[{"data":1,"prerenderedAt":371},["ShallowReactive",2],{"navigation_docs":3,"-docs-key-features-agent-code-review-findings":158,"-docs-key-features-agent-code-review-findings-surround":366},[4,15,74,98,113],{"title":5,"icon":6,"path":7,"stem":8,"children":9,"page":6},"Getting Started",false,"\u002Fdocs\u002Fgetting-started","docs\u002F1.getting-started",[10],{"title":11,"path":12,"stem":13,"icon":14},"Zeeq Introduction","\u002Fdocs\u002Fgetting-started\u002Fintroduction","docs\u002F1.getting-started\u002F1.introduction","i-lucide-house",{"title":16,"path":17,"stem":18,"children":19,"page":6},"Key Features","\u002Fdocs\u002Fkey-features","docs\u002F3.key-features",[20,25,30,35,40,45,50,55,59,64,69],{"title":21,"path":22,"stem":23,"icon":24},"Membership Invitations","\u002Fdocs\u002Fkey-features\u002Fmembership-invitations","docs\u002F3.key-features\u002F1.membership-invitations","i-hugeicons-cube",{"title":26,"path":27,"stem":28,"icon":29},"Command Palette","\u002Fdocs\u002Fkey-features\u002Fcommand-palette","docs\u002F3.key-features\u002F10.command-palette","i-hugeicons-search-01",{"title":31,"path":32,"stem":33,"icon":34},"Library Import and Export","\u002Fdocs\u002Fkey-features\u002Flibrary-import-export","docs\u002F3.key-features\u002F11.library-import-export","i-lucide-package-open",{"title":36,"path":37,"stem":38,"icon":39},"LLM Settings Configuration","\u002Fdocs\u002Fkey-features\u002Fllm-settings-configuration","docs\u002F3.key-features\u002F2.llm-settings-configuration","i-hugeicons-ai-magic",{"title":41,"path":42,"stem":43,"icon":44},"Agent Code Review Findings","\u002Fdocs\u002Fkey-features\u002Fagent-code-review-findings","docs\u002F3.key-features\u002F3.agent-code-review-findings","i-lucide-list-checks",{"title":46,"path":47,"stem":48,"icon":49},"Credentials & API Tokens","\u002Fdocs\u002Fkey-features\u002Fcredentials","docs\u002F3.key-features\u002F4.credentials","i-hugeicons-key-01",{"title":51,"path":52,"stem":53,"icon":54},"Manual Document Libraries","\u002Fdocs\u002Fkey-features\u002Fmanual-document-libraries","docs\u002F3.key-features\u002F5.manual-document-libraries","i-lucide-library-big",{"title":56,"path":57,"stem":58,"icon":29},"Snippet Search","\u002Fdocs\u002Fkey-features\u002Fsnippet-search","docs\u002F3.key-features\u002F6.snippet-search",{"title":60,"path":61,"stem":62,"icon":63},"Shared Prompt Fragment","\u002Fdocs\u002Fkey-features\u002Fshared-prompt-fragment","docs\u002F3.key-features\u002F7.shared-prompt-fragment","i-lucide-notebook-pen",{"title":65,"path":66,"stem":67,"icon":68},"Code Review Sources & Telemetry","\u002Fdocs\u002Fkey-features\u002Fcode-review-sources","docs\u002F3.key-features\u002F8.code-review-sources","i-hugeicons-book-01",{"title":70,"path":71,"stem":72,"icon":73},"Excluding Documents from Code Reviews","\u002Fdocs\u002Fkey-features\u002Fcode-review-document-exclusion","docs\u002F3.key-features\u002F9.code-review-document-exclusion","i-lucide-eye-off",{"title":75,"path":76,"stem":77,"children":78,"page":6},"Runtime Configuration","\u002Fdocs\u002Fconfiguration","docs\u002F5.configuration",[79,84,89,93],{"title":80,"path":81,"stem":82,"icon":83},"Google Cloud Configuration","\u002Fdocs\u002Fconfiguration\u002Fgcp-runtime","docs\u002F5.configuration\u002F1.gcp-runtime","i-hugeicons-google",{"title":85,"path":86,"stem":87,"icon":88},"GitHub Configuration","\u002Fdocs\u002Fconfiguration\u002Fgithub-configuration","docs\u002F5.configuration\u002F2.github-configuration","i-hugeicons-github",{"title":90,"path":91,"stem":92},"Local OpenIddict Certificates","\u002Fdocs\u002Fconfiguration\u002Flocal-openiddict-certificates","docs\u002F5.configuration\u002F3.local-openiddict-certificates",{"title":94,"path":95,"stem":96,"icon":97},"System Admin Access","\u002Fdocs\u002Fconfiguration\u002Fsystem-admin-access","docs\u002F5.configuration\u002F4.system-admin-access","i-hugeicons-shield-01",{"title":99,"path":100,"stem":101,"children":102,"page":6},"Metrics","\u002Fdocs\u002Fmetrics","docs\u002F6.metrics",[103,108],{"title":104,"path":105,"stem":106,"icon":107},"Metrics Dashboard","\u002Fdocs\u002Fmetrics\u002Fmetrics-dashboard","docs\u002F6.metrics\u002F1.metrics-dashboard","i-hugeicons-analytics-01",{"title":109,"path":110,"stem":111,"icon":112},"Metrics Pipeline","\u002Fdocs\u002Fmetrics\u002Fmetrics-pipeline","docs\u002F6.metrics\u002F2.metrics-pipeline","i-hugeicons-database-02",{"title":114,"path":115,"stem":116,"children":117,"page":6},"Design and Architecture","\u002Fdocs\u002Farchitecture","docs\u002F9.architecture",[118,123,128,133,137,141,145,150,154],{"title":119,"path":120,"stem":121,"icon":122},"Caching","\u002Fdocs\u002Farchitecture\u002Fcaching","docs\u002F9.architecture\u002F1.caching","i-lucide-database",{"title":124,"path":125,"stem":126,"icon":127},"Messaging and Queueing","\u002Fdocs\u002Farchitecture\u002Fmessaging-and-queueing","docs\u002F9.architecture\u002F2.messaging-and-queueing","i-lucide-message-square",{"title":129,"path":130,"stem":131,"icon":132},"GitHub Comment Rendering","\u002Fdocs\u002Farchitecture\u002Fgithub-comment-rendering","docs\u002F9.architecture\u002F3.github-comment-rendering","i-lucide-github",{"title":134,"path":135,"stem":136},"GitHub Integration","\u002Fdocs\u002Farchitecture\u002Fgithub-integration","docs\u002F9.architecture\u002F4.github-integration",{"title":138,"path":139,"stem":140},"LLM Settings and Secret Storage","\u002Fdocs\u002Farchitecture\u002Fllm-settings-and-secret-storage","docs\u002F9.architecture\u002F5.llm-settings-and-secret-storage",{"title":142,"path":143,"stem":144},"Organization Activation and Routes","\u002Fdocs\u002Farchitecture\u002Forganization-activation-and-routes","docs\u002F9.architecture\u002F6.organization-activation-and-routes",{"title":146,"path":147,"stem":148,"icon":149},"MCP Uploaded-Diff Code Reviews","\u002Fdocs\u002Farchitecture\u002Fmcp-uploaded-diff-code-reviews","docs\u002F9.architecture\u002F7.mcp-uploaded-diff-code-reviews","i-lucide-file-search",{"title":151,"path":152,"stem":153},"Repository Content Ingest","\u002Fdocs\u002Farchitecture\u002Frepository-content-ingest","docs\u002F9.architecture\u002F8.repository-content-ingest",{"title":155,"path":156,"stem":157},"Telemetry Ingest","\u002Fdocs\u002Farchitecture\u002Ftelemetry-ingest","docs\u002F9.architecture\u002F9.telemetry-ingest",{"id":159,"title":41,"body":160,"description":359,"extension":360,"links":361,"meta":362,"navigation":363,"path":42,"seo":364,"stem":43,"__hash__":365},"docs\u002Fdocs\u002F3.key-features\u002F3.agent-code-review-findings.md",{"type":161,"value":162,"toc":350},"minimark",[163,168,172,175,179,187,195,198,201,205,208,227,230,234,245,252,256,263,266,305,312,319,322,326,333,343],[164,165,167],"h2",{"id":166},"summary","Summary",[169,170,171],"p",{},"Agent code reviews store the canonical model output as XML in artifact storage. The pull request inbox and review history load only review status, aggregate finding counts, and the artifact URI. Detailed finding bodies are loaded lazily when a user opens a review row that has one or more findings.",[169,173,174],{},"The Vue app does not parse raw XML. It calls the backend findings endpoint for one review record, and the backend loads the artifact, validates the XML contract, and returns typed reviewer and finding DTOs.",[164,176,178],{"id":177},"clean-reviews","Clean Reviews",[169,180,181,182,186],{},"If a review record has zero aggregate findings ",[183,184,185],"strong",{},"and"," no source telemetry, the app does not request the findings artifact. The review body shows a compact success alert indicating that the pull request was clean of findings.",[169,188,189,190,194],{},"A clean review that still consulted the knowledge base does request its findings response, because that response also carries the ",[191,192,193],"a",{"href":66},"source telemetry"," used to render the \"Sources consulted\" panel. The backend returns the telemetry without opening the (empty) findings artifact, so a clean review still avoids the artifact read.",[169,196,197],{},"The clean success alert is shown only for completed reviews. Failed reviews show a warning alert, and non-completed zero-count reviews show an in-progress state instead of claiming the pull request is clean.",[169,199,200],{},"Clean reviews do not show severity tabs, XML messaging, or artifact placeholders. This keeps the common \"no findings\" state quick to scan.",[164,202,204],{"id":203},"detailed-findings","Detailed Findings",[169,206,207],{},"Reviews with findings are displayed by severity:",[209,210,211,215,218,221,224],"ul",{},[212,213,214],"li",{},"Critical",[212,216,217],{},"Major",[212,219,220],{},"Minor",[212,222,223],{},"Suggestion",[212,225,226],{},"Comment",[169,228,229],{},"Within each severity tab, findings are grouped by reviewer facet and reviewer agent. Reviewer facet bodies are collapsible; the first reviewer section in each severity tab opens by default, and additional reviewer sections start collapsed. Each reviewer section can copy reconstructed XML guidance to the clipboard. Each finding shows the severity, summary, repository-relative file location, optional line and diff side, and body text.",[164,231,233],{"id":232},"data-flow","Data Flow",[235,236,242],"pre",{"className":237,"code":239,"language":240,"meta":241},[238],"language-text","User opens review row\n  -> store checks aggregate finding count and hasSourceTelemetry\n  -> zero findings and no telemetry: render success alert and stop\n  -> otherwise: call generated CodeReviews.getCodeReviewFindings\n  -> backend checks organization membership and review partition key\n  -> backend reads FindingsStorageUri through ICodeReviewArtifactStore (only when findings exist)\n  -> backend validates XML with CodeReviewXmlOutputValidator\n  -> backend deserializes source telemetry from the review record\n  -> frontend renders typed reviewer\u002Ffinding DTOs and the sources panel\n","text","",[243,244,239],"code",{"__ignoreMap":241},[169,246,247,248,251],{},"The endpoint requires both the review id and ",[243,249,250],{},"createdAtUtc"," partition timestamp. This matches the rest of the code-review API and avoids cross-partition id scans.",[164,253,255],{"id":254},"local-mcp-reviews","Local MCP Reviews",[169,257,258,259,262],{},"Coding agents can request the same expert reviewer agents before a pull request is pushed by using the ",[243,260,261],{},"expert_code_review"," MCP tool. This path reviews a local unified git diff instead of a GitHub pull request snapshot.",[169,264,265],{},"The flow has three steps:",[267,268,269,279,286],"ol",{},[212,270,271,272,274,275,278],{},"Call ",[243,273,261],{}," with ",[243,276,277],{},"action=create_upload_url",".",[212,280,281,282,285],{},"Write a raw diff locally and upload it with the returned ",[243,283,284],{},"curl --data-binary"," command.",[212,287,271,288,274,290,293,294,293,297,300,301,304],{},[243,289,261],{},[243,291,292],{},"action=run_review",", the returned ",[243,295,296],{},"jobId",[243,298,299],{},"uploadToken",", ",[243,302,303],{},"ownerQualifiedRepoName",", and optional title and description context.",[169,306,307,308,311],{},"The MCP response returns the canonical ",[243,309,310],{},"\u003Creviews>"," XML directly to the local agent. It also includes instructions telling the agent to evaluate each finding, plan concrete fixes, and provide context if it asks for a follow-up review.",[169,313,314,315,318],{},"Uploaded diffs are limited by ",[243,316,317],{},"CodeReview.DiffUploadMaxBytes",", stored temporarily, and deleted after a review run attempt finishes. Re-uploading to the same upload URL before expiry overwrites the previous diff for that job.",[169,320,321],{},"If the repository is configured in Zeeq, repository file filters and configured reviewer agents apply. If the repository is not mapped, Zeeq still runs the built-in principal software engineer reviewer so local review remains available for ad hoc repositories.",[164,323,325],{"id":324},"storage-rule","Storage Rule",[169,327,328,329,332],{},"The durable source of detailed review output is the artifact referenced by ",[243,330,331],{},"FindingsStorageUri","; the application only hydrates that artifact on demand.",[169,334,335,336,339,340,342],{},"The review record's ",[243,337,338],{},"SourceTelemetryPayload"," column holds the compact ",[191,341,193],{"href":66}," snapshot — which knowledge-base documents and snippets the reviewers consulted — captured for both completed and failed runs. It is display and durable-capture data, not the finding bodies.",[169,344,345,346,349],{},"Local MCP reviews are intentionally not durable ",[243,347,348],{},"CodeReviewRecord"," rows. They return XML on the MCP call path and clean up the uploaded diff immediately after the run attempt.",{"title":241,"searchDepth":351,"depth":351,"links":352},2,[353,354,355,356,357,358],{"id":166,"depth":351,"text":167},{"id":177,"depth":351,"text":178},{"id":203,"depth":351,"text":204},{"id":232,"depth":351,"text":233},{"id":254,"depth":351,"text":255},{"id":324,"depth":351,"text":325},"How Zeeq loads and displays detailed automated code review findings.","md",null,{},{"icon":44},{"title":41,"description":359},"6DpwLzxlgkbG_9bBVrCoGhOGtYMwJ9pOfKHcg1YyRXs",[367,369],{"title":36,"path":37,"stem":38,"description":368,"icon":39,"children":-1},"How organization owners configure shared LLM tiers and tenant-managed API keys.",{"title":46,"path":47,"stem":48,"description":370,"icon":49,"children":-1},"Manage OAuth client credentials and long-lived API tokens for machine and scripting access to Zeeq.",1784297365799]