[{"data":1,"prerenderedAt":1172},["ShallowReactive",2],{"navigation":3,"\u002Fdocs\u002Fcompleteness":135,"\u002Fdocs\u002Fcompleteness-surround":1167},[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":30,"body":137,"description":1161,"extension":1162,"meta":1163,"navigation":1164,"path":31,"seo":1165,"stem":32,"__hash__":1166},"docs\u002Fdocs\u002Fcompleteness.md",{"type":138,"value":139,"toc":1153},"minimark",[140,149,189,194,299,392,419,465,476,480,485,505,537,576,580,623,627,634,852,871,879,889,895,1138,1149],[141,142,143,144,148],"p",{},"Every positive answer has evidence (",[145,146,147],"code",{},"file:line",", a confidence label). Completeness is the\nother half: which part of the repo that answer was drawn from, so \"no callers\" is reliable when\nthe index is complete, and an agent knows where to fall back to text search when it is not.",[141,150,151,152,155,156,158,159,162,163,166,167,166,170,166,173,176,177,180,181,184,185,188],{},"Recorded at index time as ",[145,153,154],{},"stats.coverage",": file buckets per language, unsupported source\ntypes, and blind spots (patterns cg does not model, with ",[145,157,147],{}," samples). ",[145,160,161],{},"routes",",\n",[145,164,165],{},"impact",", ",[145,168,169],{},"callers",[145,171,172],{},"reaches",[145,174,175],{},"tests_covering"," and ",[145,178,179],{},"plan_check"," add one ",[145,182,183],{},"coverage note:","\nwhen the answer could be affected. A repo with no gaps keeps the short output. Every MCP reply\nalso carries a ",[145,186,187],{},"completeness"," object.",[190,191,193],"h2",{"id":192},"file-completeness","File completeness",[195,196,197,213],"table",{},[198,199,200],"thead",{},[201,202,203,207,210],"tr",{},[204,205,206],"th",{},"bucket",[204,208,209],{},"meaning",[204,211,212],{},"makes an answer partial?",[214,215,216,229,241,254,270,282],"tbody",{},[201,217,218,224,227],{},[219,220,221],"td",{},[145,222,223],{},"discovered",[219,225,226],{},"source files under the root (dependency, build and VCS dirs skipped)",[219,228],{},[201,230,231,236,239],{},[219,232,233],{},[145,234,235],{},"indexed",[219,237,238],{},"files in the graph",[219,240],{},[201,242,243,248,251],{},[219,244,245],{},[145,246,247],{},"parse_failed",[219,249,250],{},"the parser rejected the file",[219,252,253],{},"yes",[201,255,256,261,268],{},[219,257,258],{},[145,259,260],{},"skipped_oversize",[219,262,263,264,267],{},"over the plugin limit (Python 1.5 MB, C\u002FC++ ",[145,265,266],{},"CG_MAX_FILE_BYTES",")",[219,269,253],{},[201,271,272,277,280],{},[219,273,274],{},[145,275,276],{},"unmapped",[219,278,279],{},"parsed, not placed in the module table",[219,281,253],{},[201,283,284,289,296],{},[219,285,286],{},[145,287,288],{},"excluded",[219,290,291,292,295],{},"the plugin's skip list (Python migrations, PHP ",[145,293,294],{},"storage\u002F",", generated Dart)",[219,297,298],{},"no",[141,300,301,303,304,308,309,312,313,316,317,320,321,324,325,328,329,332,333,336,337,340,341,344,345,347,348,350,351,353,354,357,358,166,361,162,364,367,368,324,370,324,373,324,376,379,380,383,384,387,388,391],{},[145,302,276],{}," is a Python file that is not an importable name or sits outside\n",[305,306,307],"a",{"href":96},"source roots",", a ",[145,310,311],{},"pkg.py"," next to a ",[145,314,315],{},"pkg\u002F"," package, a ",[145,318,319],{},".rs"," file outside every\ncrate, or a ",[145,322,323],{},".ts"," \u002F ",[145,326,327],{},".js"," file outside the TS source dirs, ",[145,330,331],{},"bin"," scripts and test trees (hint:\n",[145,334,335],{},".cg.yaml"," ",[145,338,339],{},"include","). Tool configs, ",[145,342,343],{},".d.ts"," and fixtures inside those dirs are ",[145,346,288],{},".\nThe one-line summary prints every non-zero bucket, so ",[145,349,235],{}," plus the buckets equals\n",[145,352,223],{},". ",[145,355,356],{},"--details"," gives the reason on each excluded file (",[145,359,360],{},"tool config",[145,362,363],{},"test file",[145,365,366],{},".cg.yaml exclude","). A TypeScript-plugin entry with no ",[145,369,323],{},[145,371,372],{},".tsx",[145,374,375],{},".mts",[145,377,378],{},".cts"," files\nis labelled ",[145,381,382],{},"javascript","; the JSON keeps the plugin key ",[145,385,386],{},"typescript"," and adds ",[145,389,390],{},"label",".",[141,393,394,395,397,398,401,402,405,406,162,409,166,412,415,416,418],{},"Generated, copied and vendored files are not ",[145,396,223],{},". They are\n",[145,399,400],{},"generated: N files excluded",". See ",[305,403,404],{"href":43},"Generated files",". Parser mode (",[145,407,408],{},"exact",[145,410,411],{},"heuristic",[145,413,414],{},"scip",", …) is independent: a language can be ",[145,417,408],{}," and still incomplete.",[420,421,426],"pre",{"className":422,"code":423,"language":424,"meta":425,"style":425},"language-console shiki shiki-themes cg-light cg-light cg-dark","$ cg coverage --db out\u002Fproj.db\ncoverage proj: not fully covered: python 5 discovered, 2 indexed (exact parser): 1 parse failed, 1 unmapped, 1 excluded\n  python: parse failed: app\u002Fbad.py\n    unmapped: my-scripts\u002Frun.py\n    fix: list their roots under python.source_roots in.cg.yaml\n","console","",[145,427,428,441,447,453,459],{"__ignoreMap":425},[429,430,433,437],"span",{"class":431,"line":432},"line",1,[429,434,436],{"class":435},"sZ_TN","$",[429,438,440],{"class":439},"snmWg"," cg coverage --db out\u002Fproj.db\n",[429,442,444],{"class":431,"line":443},2,[429,445,446],{"class":439},"coverage proj: not fully covered: python 5 discovered, 2 indexed (exact parser): 1 parse failed, 1 unmapped, 1 excluded\n",[429,448,450],{"class":431,"line":449},3,[429,451,452],{"class":439},"  python: parse failed: app\u002Fbad.py\n",[429,454,456],{"class":431,"line":455},4,[429,457,458],{"class":439},"    unmapped: my-scripts\u002Frun.py\n",[429,460,462],{"class":431,"line":461},5,[429,463,464],{"class":439},"    fix: list their roots under python.source_roots in.cg.yaml\n",[141,466,467,468,471,472,475],{},"The first five paths per bucket are shown. ",[145,469,470],{},"cg coverage --all-files"," (MCP\n",[145,473,474],{},"coverage(all_files=true)",") lists every path. Per-file reports come from the Python, PHP, Dart,\nRust, C\u002FC++ and TypeScript plugins.",[190,477,479],{"id":478},"syntax-errors","Syntax errors",[141,481,482,483,391],{},"tree-sitter (Swift, Kotlin, Rust, C \u002F C++) recovers around an ERROR node. TypeScript and Dart\nreport diagnostics and still build the file. A Python or PHP file that does not parse is\n",[145,484,247],{},[141,486,487,488,492,493,496,497,500,501,504],{},"cg counts as ",[489,490,491],"strong",{},"lost"," each declaration head in an error span that has no node of that name in\nthat file (a Swift ",[145,494,495],{},"extension"," is not counted; its members are). ",[145,498,499],{},"cg coverage"," lists the files,\nmost declarations lost first (5 per language; all with ",[145,502,503],{},"--all-files","):",[420,506,508],{"className":422,"code":507,"language":424,"meta":425,"style":425},"$ cg coverage --db out\u002Fapp.db\ncoverage app: not fully covered: swift 8 heuristic, 2 parsed with syntax errors\n  swift: syntax errors in 2 files, 1 declaration lost:\n    Sources\u002FApp\u002FInvalid.swift:6 (1 declaration lost: broken:6)\n    Tests\u002FAppTests\u002FOrphanTests.swift:4, 9\n",[145,509,510,517,522,527,532],{"__ignoreMap":425},[429,511,512,514],{"class":431,"line":432},[429,513,436],{"class":435},[429,515,516],{"class":439}," cg coverage --db out\u002Fapp.db\n",[429,518,519],{"class":431,"line":443},[429,520,521],{"class":439},"coverage app: not fully covered: swift 8 heuristic, 2 parsed with syntax errors\n",[429,523,524],{"class":431,"line":449},[429,525,526],{"class":439},"  swift: syntax errors in 2 files, 1 declaration lost:\n",[429,528,529],{"class":431,"line":455},[429,530,531],{"class":439},"    Sources\u002FApp\u002FInvalid.swift:6 (1 declaration lost: broken:6)\n",[429,533,534],{"class":431,"line":461},[429,535,536],{"class":439},"    Tests\u002FAppTests\u002FOrphanTests.swift:4, 9\n",[141,538,539,542,543,546,547,550,551,166,554,557,558,561,562,565,566,568,569,571,572,575],{},[145,540,541],{},"--json"," per language: ",[145,544,545],{},"syntax_errors"," (\n",[145,548,549],{},"[{file, spans, errors, decls_lost, lost, parse_failed}]",", up to 500 files),\n",[145,552,553],{},"syntax_error_files",[145,555,556],{},"parsed_with_errors"," (parsed, not failed) and ",[145,559,560],{},"decls_lost",". The coverage\nnote mentions the count. An answer whose nodes sit in such a file is not ",[145,563,564],{},"complete",": its\n",[145,567,187],{}," has ",[145,570,545],{}," (",[145,573,574],{},"[{language, file, spans, decls_lost}]",") and the note\nnames the file and its first error line.",[190,577,579],{"id":578},"unsupported-source-types","Unsupported source types",[141,581,582,583,166,586,166,589,166,592,166,595,598,599,602,603,166,606,166,609,162,612,615,616,166,619,622],{},"A programming extension with no plugin (",[145,584,585],{},".go",[145,587,588],{},".qml",[145,590,591],{},".sh",[145,593,594],{},".lua",[145,596,597],{},".svelte",",\n…), or a ",[145,600,601],{},"#!"," line naming such an interpreter. Data and markup (",[145,604,605],{},".json",[145,607,608],{},".yaml",[145,610,611],{},".md",[145,613,614],{},".svg",") never count. Extensionless launchers of indexed languages (",[145,617,618],{},"artisan",[145,620,621],{},"bin\u002Fconsole",")\nare not listed.",[190,624,626],{"id":625},"blind-spots","Blind spots",[141,628,629,630,633],{},"Detectors run at index time. A failure is a stderr warning, not a failed index. Each one has a\npositive and a negative fixture in ",[145,631,632],{},"tests\u002Ftest_completeness.py",". A decorated function that a\nplugin already made an entry point is not reported.",[195,635,636,649],{},[198,637,638],{},[201,639,640,643,646],{},[204,641,642],{},"kind",[204,644,645],{},"category",[204,647,648],{},"detected",[214,650,651,670,685,700,715,739,757,773,791,810],{},[201,652,653,658,661],{},[219,654,655],{},[145,656,657],{},"nest_wrapped_route_decorator",[219,659,660],{},"route",[219,662,663,666,667],{},[145,664,665],{},"applyDecorators(Get(...))"," or a factory that returns ",[145,668,669],{},"Get(...)",[201,671,672,677,679],{},[219,673,674],{},[145,675,676],{},"django_dynamic_urlpatterns",[219,678,660],{},[219,680,681,684],{},[145,682,683],{},"urlpatterns"," from a call, a comprehension or a loop",[201,686,687,692,694],{},[219,688,689],{},[145,690,691],{},"django_unresolved_include",[219,693,660],{},[219,695,696,699],{},[145,697,698],{},"include(\u003Cexpression>)"," cg could not follow (a third-party package is not reported)",[201,701,702,707,709],{},[219,703,704],{},[145,705,706],{},"express_loop_routes",[219,708,660],{},[219,710,711,712],{},"Express \u002F Fastify \u002F Koa \u002F Hono \u002F Elysia routes in a loop, or ",[145,713,714],{},"router[m.method](...)",[201,716,717,722,724],{},[219,718,719],{},[145,720,721],{},"laravel_loop_routes",[219,723,660],{},[219,725,726,729,730,324,733,324,736],{},[145,727,728],{},"Route::"," inside ",[145,731,732],{},"foreach",[145,734,735],{},"->each",[145,737,738],{},"array_map",[201,740,741,746,748],{},[219,742,743],{},[145,744,745],{},"python_decorator_routes",[219,747,660],{},[219,749,750,324,753,756],{},[145,751,752],{},"@app.route",[145,754,755],{},"@router.get"," that no plugin turned into a route",[201,758,759,764,767],{},[219,760,761],{},[145,762,763],{},"python_decorator_registration",[219,765,766],{},"handler",[219,768,769,772],{},[145,770,771],{},"@registry.register"," with no entry point and no caller (click, typer and MCP are entry points)",[201,774,775,780,782],{},[219,776,777],{},[145,778,779],{},"python_registry_assignment",[219,781,766],{},[219,783,784,176,787,790],{},[145,785,786],{},"registry[key] = fn",[145,788,789],{},"fn"," has no caller",[201,792,793,798,800],{},[219,794,795],{},[145,796,797],{},"nuxt_unevaluable_import_dirs",[219,799,766],{},[219,801,802,805,806,809],{},[145,803,804],{},"imports.dirs"," that is not a literal path, when ",[145,807,808],{},".nuxt\u002F"," is absent",[201,811,812,817,820],{},[219,813,814],{},[145,815,816],{},"ts_unrecognised_http_client",[219,818,819],{},"endpoint",[219,821,822,823,166,826,166,829,166,832,166,835,166,838,166,841,166,844,847,848,851],{},"a file imports ",[145,824,825],{},"http",[145,827,828],{},"https",[145,830,831],{},"undici",[145,833,834],{},"got",[145,836,837],{},"node-fetch",[145,839,840],{},"superagent",[145,842,843],{},"needle",[145,845,846],{},"phin"," or ",[145,849,850],{},"request"," and calls it, but no client endpoint was made there (or only one whose host cg could not read)",[141,853,854,855,166,858,861,862,864,865,867,868,870],{},"Route blind spots affect every route list and every caller answer in that language. Handler\nblind spots affect the registered function and chains that run through it. Endpoint blind spots\naffect ",[145,856,857],{},"cg api-calls",[145,859,860],{},"cg external"," and cross-repo chains that start at an outbound call: those\ncommands end with a ",[145,863,183],{}," naming the files, and ",[145,866,499],{}," lists them with\n",[145,869,147],{}," samples.",[420,872,877],{"className":873,"code":875,"language":876,"meta":425},[874],"language-text","$ cg routes --db out\u002Fshop.db\nall routes: 1 indexed (possibly more: 1 unmodelled route registration)\ncoverage note: 1 route registration cg does not model (Django urlpatterns built by a function call: shop\u002Furls.py:9).\n","text",[145,878,875],{"__ignoreMap":425},[141,880,881,882,166,885,888],{},"Complete answers keep the usual wording (",[145,883,884],{},"1 of 1 routes",[145,886,887],{},"has no recorded callers",") and get\nno extra line.",[190,890,892,893],{"id":891},"mcp-completeness","MCP ",[145,894,187],{},[420,896,900],{"className":897,"code":898,"language":899,"meta":425,"style":425},"language-json shiki shiki-themes cg-light cg-light cg-dark","{\"complete\": false,\n \"languages\": {\"python\": {\"mode\": \"exact\", \"discovered\": 4, \"indexed\": 2, \"parse_failed\": 1, \"unmapped\": 1, \"complete\": false}},\n \"unsupported\": {\"qml\": 1},\n \"blind_spots\": [{\"kind\": \"django_dynamic_urlpatterns\", \"category\": \"route\", \"count\": 1, \"sample\": \"shop\u002Furls.py:9\"}]}\n","json",[145,901,902,924,1033,1060],{"__ignoreMap":425},[429,903,904,907,910,913,915,918,922],{"class":431,"line":432},[429,905,906],{"class":435},"{",[429,908,909],{"class":435},"\"",[429,911,564],{"class":912},"sbOAO",[429,914,909],{"class":435},[429,916,917],{"class":435},":",[429,919,921],{"class":920},"sZWGQ"," false",[429,923,162],{"class":435},[429,925,926,929,932,934,936,939,941,944,946,948,950,952,955,957,959,961,964,966,969,971,973,975,977,980,982,984,986,988,990,993,995,997,999,1001,1003,1006,1008,1010,1012,1014,1016,1018,1020,1022,1024,1026,1028,1030],{"class":431,"line":443},[429,927,928],{"class":435}," \"",[429,930,931],{"class":912},"languages",[429,933,909],{"class":435},[429,935,917],{"class":435},[429,937,938],{"class":435}," {",[429,940,909],{"class":435},[429,942,943],{"class":912},"python",[429,945,909],{"class":435},[429,947,917],{"class":435},[429,949,938],{"class":435},[429,951,909],{"class":435},[429,953,954],{"class":912},"mode",[429,956,909],{"class":435},[429,958,917],{"class":435},[429,960,928],{"class":435},[429,962,408],{"class":963},"sha9Y",[429,965,909],{"class":435},[429,967,968],{"class":435},",",[429,970,928],{"class":435},[429,972,223],{"class":912},[429,974,909],{"class":435},[429,976,917],{"class":435},[429,978,979],{"class":920}," 4",[429,981,968],{"class":435},[429,983,928],{"class":435},[429,985,235],{"class":912},[429,987,909],{"class":435},[429,989,917],{"class":435},[429,991,992],{"class":920}," 2",[429,994,968],{"class":435},[429,996,928],{"class":435},[429,998,247],{"class":912},[429,1000,909],{"class":435},[429,1002,917],{"class":435},[429,1004,1005],{"class":920}," 1",[429,1007,968],{"class":435},[429,1009,928],{"class":435},[429,1011,276],{"class":912},[429,1013,909],{"class":435},[429,1015,917],{"class":435},[429,1017,1005],{"class":920},[429,1019,968],{"class":435},[429,1021,928],{"class":435},[429,1023,564],{"class":912},[429,1025,909],{"class":435},[429,1027,917],{"class":435},[429,1029,921],{"class":920},[429,1031,1032],{"class":435},"}},\n",[429,1034,1035,1037,1040,1042,1044,1046,1048,1051,1053,1055,1057],{"class":431,"line":449},[429,1036,928],{"class":435},[429,1038,1039],{"class":912},"unsupported",[429,1041,909],{"class":435},[429,1043,917],{"class":435},[429,1045,938],{"class":435},[429,1047,909],{"class":435},[429,1049,1050],{"class":912},"qml",[429,1052,909],{"class":435},[429,1054,917],{"class":435},[429,1056,1005],{"class":920},[429,1058,1059],{"class":435},"},\n",[429,1061,1062,1064,1067,1069,1071,1074,1076,1078,1080,1082,1084,1086,1088,1090,1092,1094,1096,1098,1100,1102,1104,1106,1108,1111,1113,1115,1117,1119,1121,1124,1126,1128,1130,1133,1135],{"class":431,"line":455},[429,1063,928],{"class":435},[429,1065,1066],{"class":912},"blind_spots",[429,1068,909],{"class":435},[429,1070,917],{"class":435},[429,1072,1073],{"class":435}," [{",[429,1075,909],{"class":435},[429,1077,642],{"class":912},[429,1079,909],{"class":435},[429,1081,917],{"class":435},[429,1083,928],{"class":435},[429,1085,676],{"class":963},[429,1087,909],{"class":435},[429,1089,968],{"class":435},[429,1091,928],{"class":435},[429,1093,645],{"class":912},[429,1095,909],{"class":435},[429,1097,917],{"class":435},[429,1099,928],{"class":435},[429,1101,660],{"class":963},[429,1103,909],{"class":435},[429,1105,968],{"class":435},[429,1107,928],{"class":435},[429,1109,1110],{"class":912},"count",[429,1112,909],{"class":435},[429,1114,917],{"class":435},[429,1116,1005],{"class":920},[429,1118,968],{"class":435},[429,1120,928],{"class":435},[429,1122,1123],{"class":912},"sample",[429,1125,909],{"class":435},[429,1127,917],{"class":435},[429,1129,928],{"class":435},[429,1131,1132],{"class":963},"shop\u002Furls.py:9",[429,1134,909],{"class":435},[429,1136,1137],{"class":435},"}]}\n",[141,1139,1140,1141,1144,1145,1148],{},"The object is scoped like the text note. On a combined graph, language keys are prefixed with\nthe repo name (",[145,1142,1143],{},"bookstore-api\u002Fphp","). ",[145,1146,1147],{},"coverage(json_output=true)"," returns the whole-index\nobject as text.",[1150,1151,1152],"style",{},"html pre.shiki code .sZ_TN, html code.shiki .sZ_TN{--shiki-light:#71717A;--shiki-default:#71717A;--shiki-dark:#A1A1AA}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);}html pre.shiki code .sbOAO, html code.shiki .sbOAO{--shiki-light:#3F6212;--shiki-default:#3F6212;--shiki-dark:#A3E635}html pre.shiki code .sZWGQ, html code.shiki .sZWGQ{--shiki-light:#8B5CF6;--shiki-default:#8B5CF6;--shiki-dark:#C4B5FD}html pre.shiki code .sha9Y, html code.shiki .sha9Y{--shiki-light:#9F8CFF;--shiki-default:#9F8CFF;--shiki-dark:#C4B5FD}",{"title":425,"searchDepth":455,"depth":443,"links":1154},[1155,1156,1157,1158,1159],{"id":192,"depth":443,"text":193},{"id":478,"depth":443,"text":479},{"id":578,"depth":443,"text":579},{"id":625,"depth":443,"text":626},{"id":891,"depth":443,"text":1160},"MCP completeness","Every positive answer has evidence (file:line, a confidence label). Completeness is the\nother half: which part of the repo that answer was drawn from, so \"no callers\" is reliable when\nthe index is complete, and an agent knows where to fall back to text search when it is not.","md",{},true,{"title":30,"description":1161},"dIwWxeXFeXIEudJ_w1mdKoWxXECih-1yRO18BVAqM6k",[1168,1170],{"title":26,"path":27,"stem":28,"description":1169,"children":-1},"cg \u003Ccommand> is python -m cg_code_graph.cli \u003Ccommand>. Query commands need --db. Flags not listed here: cg \u003Ccommand> -h.",{"title":34,"path":35,"stem":36,"description":1171,"children":-1},"code-graph indexes a project with zero configuration. A .cg.yaml (or .cg.yml) at the indexed root is optional. The CLI, the MCP index tool and the visual view read it on every index. Command-line flags take precedence.",1792170234379]