[{"data":1,"prerenderedAt":454},["ShallowReactive",2],{"navigation":3,"\u002Fdocs\u002Fviz":135,"\u002Fdocs\u002Fviz-surround":450},[4],{"title":5,"path":6,"stem":7,"children":8,"page":134},"Docs","\u002Fdocs","docs",[9,13,17,21,25,29,33,37,41,45,49,53,57,61,70,74,78,82,86,90,94,98,102,106,110,114,118,122,126,130],{"title":10,"path":11,"stem":12},"AI harnesses: LLM tools, MCP servers and agents","\u002Fdocs\u002Fai-tools","docs\u002Fai-tools",{"title":14,"path":15,"stem":16},"Architecture","\u002Fdocs\u002Farchitecture","docs\u002Farchitecture",{"title":18,"path":19,"stem":20},"Web \u002F native bridges","\u002Fdocs\u002Fbridges","docs\u002Fbridges",{"title":22,"path":23,"stem":24},"Broadcast channels and tests","\u002Fdocs\u002Fchannels-and-tests","docs\u002Fchannels-and-tests",{"title":26,"path":27,"stem":28},"CLI reference","\u002Fdocs\u002Fcli","docs\u002Fcli",{"title":30,"path":31,"stem":32},"Completeness: how far an answer reaches","\u002Fdocs\u002Fcompleteness","docs\u002Fcompleteness",{"title":34,"path":35,"stem":36},"Configuration","\u002Fdocs\u002Fconfiguration","docs\u002Fconfiguration",{"title":38,"path":39,"stem":40},"External systems","\u002Fdocs\u002Fexternal","docs\u002Fexternal",{"title":42,"path":43,"stem":44},"Generated, copied and vendored files","\u002Fdocs\u002Fgenerated","docs\u002Fgenerated",{"title":46,"path":47,"stem":48},"Installing and updating cg","\u002Fdocs\u002Finstall","docs\u002Finstall",{"title":50,"path":51,"stem":52},"Java","\u002Fdocs\u002Fjava","docs\u002Fjava",{"title":54,"path":55,"stem":56},"Kotlin","\u002Fdocs\u002Fkotlin","docs\u002Fkotlin",{"title":58,"path":59,"stem":60},"Known limitations","\u002Fdocs\u002Flimitations","docs\u002Flimitations",{"title":62,"path":63,"stem":64,"children":65},"MCP server","\u002Fdocs\u002Fmcp","docs\u002Fmcp",[66],{"title":67,"path":68,"stem":69},"code-graph MCP: sample outputs (real calls via the MCP Python SDK stdio client)","\u002Fdocs\u002Fmcp\u002Fsample_outputs","docs\u002Fmcp\u002Fsample_outputs",{"title":71,"path":72,"stem":73},"Rust, C and C++","\u002Fdocs\u002Fnative","docs\u002Fnative",{"title":75,"path":76,"stem":77},"Port gaps: cg parity","\u002Fdocs\u002Fparity","docs\u002Fparity",{"title":79,"path":80,"stem":81},"PHP","\u002Fdocs\u002Fphp","docs\u002Fphp",{"title":83,"path":84,"stem":85},"Planned changes","\u002Fdocs\u002Fplans","docs\u002Fplans",{"title":87,"path":88,"stem":89},"Platform-specific code","\u002Fdocs\u002Fplatforms","docs\u002Fplatforms",{"title":91,"path":92,"stem":93},"Protocol links","\u002Fdocs\u002Fprotocols","docs\u002Fprotocols",{"title":95,"path":96,"stem":97},"Python","\u002Fdocs\u002Fpython","docs\u002Fpython",{"title":99,"path":100,"stem":101},"Quick start","\u002Fdocs\u002Fquickstart","docs\u002Fquickstart",{"title":103,"path":104,"stem":105},"Graph schema","\u002Fdocs\u002Fschema","docs\u002Fschema",{"title":107,"path":108,"stem":109},"Attack surface","\u002Fdocs\u002Fsurface","docs\u002Fsurface",{"title":111,"path":112,"stem":113},"Swift","\u002Fdocs\u002Fswift","docs\u002Fswift",{"title":115,"path":116,"stem":117},"TypeScript \u002F JavaScript frameworks","\u002Fdocs\u002Fts-frameworks","docs\u002Fts-frameworks",{"title":119,"path":120,"stem":121},"How we validate","\u002Fdocs\u002Fvalidation","docs\u002Fvalidation",{"title":123,"path":124,"stem":125},"Validation log","\u002Fdocs\u002Fvalidation-log","docs\u002Fvalidation-log",{"title":127,"path":128,"stem":129},"Value facts and resolutions","\u002Fdocs\u002Fvalue-facts","docs\u002Fvalue-facts",{"title":131,"path":132,"stem":133},"Visual view","\u002Fdocs\u002Fviz","docs\u002Fviz",false,{"id":136,"title":131,"body":137,"description":151,"extension":445,"meta":446,"navigation":447,"path":132,"seo":448,"stem":133,"__hash__":449},"docs\u002Fdocs\u002Fviz.md",{"type":138,"value":139,"toc":436},"minimark",[140,145,199,215,223,227,330,333,337,340,354,358,395,399,421,432],[141,142,144],"h2",{"id":143},"open","Open",[146,147,152],"pre",{"className":148,"code":149,"language":150,"meta":151,"style":151},"language-bash shiki shiki-themes cg-light cg-light cg-dark","cg serve --db out\u002Fgraph.db [--port 8177] [--host 127.0.0.1] [--plans-dir examples\u002Fplans] [--presets FILE]\n","bash","",[153,154,155],"code",{"__ignoreMap":151},[156,157,160,164,168,171,174,178,181,184,187,190,193,196],"span",{"class":158,"line":159},"line",1,[156,161,163],{"class":162},"sZJo5","cg",[156,165,167],{"class":166},"sha9Y"," serve",[156,169,170],{"class":166}," --db",[156,172,173],{"class":166}," out\u002Fgraph.db",[156,175,177],{"class":176},"snmWg"," [--port ",[156,179,180],{"class":166},"8177]",[156,182,183],{"class":176}," [--host ",[156,185,186],{"class":166},"127.0.0.1]",[156,188,189],{"class":176}," [--plans-dir ",[156,191,192],{"class":166},"examples\u002Fplans]",[156,194,195],{"class":176}," [--presets ",[156,197,198],{"class":166},"FILE]\n",[200,201,202,203,206,207,210,211,214],"p",{},"Read-only stdlib HTTP server. Cytoscape.js and fcose are vendored (MIT, versions in ",[153,204,205],{},"VERSIONS.txt",") and served locally, so the UI works offline. Open ",[153,208,209],{},"http:\u002F\u002F127.0.0.1:8177\u002F",". There is no auth; keep the host on localhost. Flags: ",[153,212,213],{},"cg serve -h",".",[200,216,217,218,214],{},"Watch the ",[219,220,222],"a",{"href":221},"\u002Fmedia\u002Fcg-view-demo.mp4","visual view demo",[141,224,226],{"id":225},"what-you-can-do","What you can do",[228,229,230,251,280,286,306,312,320],"ul",{},[231,232,233,237,238,241,242,245,246,250],"li",{},[234,235,236],"strong",{},"Landing."," Project, index time, counts, a search box (kind chips, fuzzy short names, ↑\u002F↓\u002FEnter) and starter cards. Starters come from ",[153,239,240],{},"--presets FILE"," or ",[153,243,244],{},"viz.presets",", then sample presets whose targets are in the graph, then queries derived from the graph (",[219,247,249],{"href":248},"\u002Fdocs\u002Fconfiguration#viz-presets-and-starter-queries","viz presets and starter queries",").",[231,252,253,256,257,260,261,260,264,267,268,271,272,275,276,279],{},[234,254,255],{},"Query."," Modes ",[153,258,259],{},"reaches",", ",[153,262,263],{},"impact",[153,265,266],{},"downstream"," (with sinks), ",[153,269,270],{},"path"," (",[153,273,274],{},"source, [waypoints…,] target",") and ",[153,277,278],{},"plan overlay",". Filters: min confidence and sinks. The subgraph is the union of the evidence paths.",[231,281,282,285],{},[234,283,284],{},"Layout."," Impact, downstream and path draw in layers; reaches and plan overviews use fcose with module boxes. Wide layers fold into clusters; click a cluster or a folded box to open it.",[231,287,288,291,292,260,295,260,298,301,302,305],{},[234,289,290],{},"Detail."," Click a node for file:line, a source snippet, evidence edges and actions that run a new query (",[153,293,294],{},"impact of this",[153,296,297],{},"downstream of this",[153,299,300],{},"path from here","). Copy id, FQN or the ",[153,303,304],{},"cg impact"," command. Drag the panel edge to resize it; the width is remembered.",[231,307,308,311],{},[234,309,310],{},"Search default."," Enter on a hit runs the default query for its kind: reaches for tables, columns, config and env; downstream for pages and routes; impact otherwise.",[231,313,314,317,318,250],{},[234,315,316],{},"Plan overlay."," Loads a plan on top of the graph. Colours mark planned nodes, modified targets, gaps and forbidden paths (",[219,319,83],{"href":84},[231,321,322,325,326,329],{},[234,323,324],{},"Share."," The URL hash stores the query, selection and layout. ",[234,327,328],{},"Copy link"," copies it.",[200,331,332],{},"Layered views read left to right: impact (entry points, then the target), downstream (source, then sinks), path (the specs in order). A layer with more than 12 nodes folds into counted clusters. Click a cluster to show its next 20 members; Esc folds it. In the force-directed view, nodes sit in module boxes (columns by table). Click a folded box to open it; double-click an open box to fold it.",[141,334,336],{"id":335},"reading-the-graph","Reading the graph",[200,338,339],{},"Colour is the node kind. A diamond marks an entry point (its kind is in the label), a star marks the query target, and a dashed red border means the node is gated for the indexed scenario. Edges encode confidence as well as colour: solid for exact, dashed for resolved, dotted for heuristic. The legend lists only what this view contains; click a kind to dim the rest.",[200,341,342,343,271,346,349,350,353],{},"Hover a node for its full name, kind, file:line and confidence. The first fit shows every node. When leaf labels would fall under 11 px, zoom to the target; cluster, module and selected labels stay visible zoomed out. ",[234,344,345],{},"List",[153,347,348],{},"l",") shows the same subgraph as a tree. ",[234,351,352],{},"Theme"," cycles auto (follows the system theme), light and dark.",[141,355,357],{"id":356},"keyboard","Keyboard",[200,359,360,363,364,367,368,371,372,375,376,379,380,383,384,387,388,390,391,394],{},[153,361,362],{},"\u002F"," search, ",[153,365,366],{},"Enter"," run, ",[153,369,370],{},"Esc"," fold or close, ",[153,373,374],{},"f"," fit, ",[153,377,378],{},"+"," ",[153,381,382],{},"-"," zoom, ",[153,385,386],{},"0"," reset, arrows move along callers and callees, ",[153,389,348],{}," list view, ",[153,392,393],{},"?"," shortcut list.",[141,396,398],{"id":397},"export","Export",[200,400,401,404,405,408,409,260,411,260,413,241,415,417,418,214],{},[153,402,403],{},"cg viz-export MODE SPEC… --db … -o file.html"," writes the same view as one HTML file (data and JS inlined) that opens from disk. ",[153,406,407],{},"MODE"," is ",[153,410,259],{},[153,412,263],{},[153,414,266],{},[153,416,270],{},". Optional ",[153,419,420],{},"--sinks table,column",[200,422,423,424,427,428,431],{},"In the browser, ",[234,425,426],{},"PNG"," downloads the whole drawing at 2x on the current theme. ",[234,429,430],{},"JSON"," downloads the visible subgraph (nodes, edges of the shown confidences, the query and the URL). File names come from the mode and the spec.",[433,434,435],"style",{},"html pre.shiki code .sZJo5, html code.shiki .sZJo5{--shiki-light:#65A30D;--shiki-default:#65A30D;--shiki-dark:#84CC16}html pre.shiki code .sha9Y, html code.shiki .sha9Y{--shiki-light:#9F8CFF;--shiki-default:#9F8CFF;--shiki-dark:#C4B5FD}html pre.shiki code .snmWg, html code.shiki .snmWg{--shiki-light:#27272A;--shiki-default:#27272A;--shiki-dark:#E4E4E7}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":151,"searchDepth":437,"depth":438,"links":439},4,2,[440,441,442,443,444],{"id":143,"depth":438,"text":144},{"id":225,"depth":438,"text":226},{"id":335,"depth":438,"text":336},{"id":356,"depth":438,"text":357},{"id":397,"depth":438,"text":398},"md",{},true,{"title":131,"description":151},"HiOKlkAENAPE_Cti6L5Y7J24fthaNMc0pwbrR4Yab7o",[451,453],{"title":127,"path":128,"stem":129,"description":452,"children":-1},"Facts about values, from the PHP and TypeScript ASTs (cg_code_graph\u002Fplugins\u002Flaravel\u002Fvalues.py and\nthe TS extractor).",null,1792170234880]