kirograph 1.0.0 → 1.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (84) hide show
  1. package/README.md +3 -2
  2. package/dist/architecture/manifest/python.js +2 -2
  3. package/dist/architecture/manifest/python.js.map +2 -2
  4. package/dist/bin/commands/help.js +3 -1
  5. package/dist/bin/commands/help.js.map +2 -2
  6. package/dist/bin/commands/memory.js +18 -8
  7. package/dist/bin/commands/memory.js.map +2 -2
  8. package/dist/bin/commands/reachability.js +7 -2
  9. package/dist/bin/commands/reachability.js.map +2 -2
  10. package/dist/bin/commands/vulns.js +16 -1
  11. package/dist/bin/commands/vulns.js.map +2 -2
  12. package/dist/bin/commands/wiki.js +56 -0
  13. package/dist/bin/commands/wiki.js.map +2 -2
  14. package/dist/bin/installer/steering.js +9 -0
  15. package/dist/bin/installer/steering.js.map +2 -2
  16. package/dist/bin/kirograph.js +1 -1
  17. package/dist/config.js +4 -0
  18. package/dist/config.js.map +2 -2
  19. package/dist/extraction/extractor.js +46 -41
  20. package/dist/extraction/extractor.js.map +2 -2
  21. package/dist/extraction/notebook.js +15 -7
  22. package/dist/extraction/notebook.js.map +2 -2
  23. package/dist/jev/client.js +99 -0
  24. package/dist/jev/client.js.map +7 -0
  25. package/dist/jev/types.js +17 -0
  26. package/dist/jev/types.js.map +7 -0
  27. package/dist/mcp/handlers/memory.js +14 -8
  28. package/dist/mcp/handlers/memory.js.map +2 -2
  29. package/dist/mcp/handlers/security.js +5 -3
  30. package/dist/mcp/handlers/security.js.map +2 -2
  31. package/dist/mcp/tools.js +1 -1
  32. package/dist/mcp/tools.js.map +1 -1
  33. package/dist/memory/index.js +13 -1
  34. package/dist/memory/index.js.map +3 -3
  35. package/dist/memory/relation-jev.js +59 -0
  36. package/dist/memory/relation-jev.js.map +7 -0
  37. package/dist/memory/schema.js +57 -0
  38. package/dist/memory/schema.js.map +7 -0
  39. package/dist/security/auth-detection-jev.js +47 -0
  40. package/dist/security/auth-detection-jev.js.map +7 -0
  41. package/dist/security/manifest/adapter.js +17 -3
  42. package/dist/security/manifest/adapter.js.map +3 -3
  43. package/dist/security/manifest/plugins/cargo.js +23 -0
  44. package/dist/security/manifest/plugins/cargo.js.map +2 -2
  45. package/dist/security/manifest/plugins/composer.js +12 -0
  46. package/dist/security/manifest/plugins/composer.js.map +2 -2
  47. package/dist/security/manifest/plugins/gradle.js +12 -0
  48. package/dist/security/manifest/plugins/gradle.js.map +2 -2
  49. package/dist/security/manifest/plugins/hex.js +12 -0
  50. package/dist/security/manifest/plugins/hex.js.map +2 -2
  51. package/dist/security/manifest/plugins/maven.js +68 -1
  52. package/dist/security/manifest/plugins/maven.js.map +2 -2
  53. package/dist/security/manifest/plugins/npm.js +86 -0
  54. package/dist/security/manifest/plugins/npm.js.map +2 -2
  55. package/dist/security/manifest/plugins/nuget.js +13 -0
  56. package/dist/security/manifest/plugins/nuget.js.map +2 -2
  57. package/dist/security/manifest/plugins/pubspec.js +12 -0
  58. package/dist/security/manifest/plugins/pubspec.js.map +2 -2
  59. package/dist/security/manifest/plugins/pyproject.js +12 -0
  60. package/dist/security/manifest/plugins/pyproject.js.map +2 -2
  61. package/dist/security/manifest/plugins/rubygems.js +12 -0
  62. package/dist/security/manifest/plugins/rubygems.js.map +2 -2
  63. package/dist/security/pipeline.js +1 -1
  64. package/dist/security/pipeline.js.map +2 -2
  65. package/dist/security/reachability.js +54 -5
  66. package/dist/security/reachability.js.map +3 -3
  67. package/dist/security/types.js.map +1 -1
  68. package/dist/security/vuln/client.js +45 -1
  69. package/dist/security/vuln/client.js.map +2 -2
  70. package/dist/security/vuln/osv-adapter.js +45 -1
  71. package/dist/security/vuln/osv-adapter.js.map +2 -2
  72. package/dist/wiki/contradiction-jev.js +49 -0
  73. package/dist/wiki/contradiction-jev.js.map +7 -0
  74. package/dist/wiki/index.js +13 -0
  75. package/dist/wiki/index.js.map +2 -2
  76. package/dist/wiki/ingest.js +2 -0
  77. package/dist/wiki/ingest.js.map +2 -2
  78. package/dist/wiki/links.js +53 -0
  79. package/dist/wiki/links.js.map +7 -0
  80. package/dist/wiki/lint.js +3 -6
  81. package/dist/wiki/lint.js.map +2 -2
  82. package/dist/wiki/rename.js +103 -0
  83. package/dist/wiki/rename.js.map +7 -0
  84. package/package.json +1 -1
package/README.md CHANGED
@@ -43,9 +43,9 @@ The result is fewer tool calls, less context used, and faster responses on compl
43
43
  | <h4>Security</h4> | |
44
44
  | 🔒 **Security (KiroGraph-Sec opt-in module)** | Goes beyond "this dependency has a CVE" — uses the call graph to determine if vulnerable code is **actually reachable** from your entry points. Maps your **attack surface** (which HTTP routes reach vulnerable deps). Detects **hardcoded secrets** and shows how many entry points expose them. **SAST-lite** finds SQL injection, path traversal, and dangerous eval in your code. **AST-based SAST (opt-in via `enablePatterns`)** runs 10 bundled structural pattern rules via `@ast-grep/napi` — matches actual code structure, not just symbol names. **Supply chain health** checks OpenSSF Scorecard scores and detects dependency confusion attacks. Covers 14 ecosystems, outputs CycloneDX SBOM/VEX and CI-ready SARIF reports. |
45
45
  | <h4>Knowledge & Data</h4> | |
46
- | 🧠 **Persistent Memory (KiroGraph-Mem opt-in module)** | Cross-session observations — decisions, errors, patterns — auto-linked to code symbols. **Conflict detection**: typed relations between observations (`supersedes`, `conflicts_with`, `compatible`) with agent judgment workflow (`kirograph_mem_compare`, `kirograph_mem_judge`). **Stale review**: schedule observations for re-evaluation (`review_after` + `kirograph_mem_review`). **Passive capture**: extract learnings from structured text. **Prompt saving**: session context reconstruction. **Topic key**: stable semantic addressing. Inspired by [Engram](https://github.com/Gentleman-Programming/engram). |
46
+ | 🧠 **Persistent Memory (KiroGraph-Mem opt-in module)** | Cross-session observations — decisions, errors, patterns — auto-linked to code symbols. **Conflict detection**: typed relations between observations (`supersedes`, `conflicts_with`, `compatible`) with agent judgment workflow (`kirograph_mem_compare`, `kirograph_mem_judge`). **Stale review**: schedule observations for re-evaluation (`review_after` + `kirograph_mem_review`). **Passive capture**: extract learnings from structured text. **Prompt saving**: session context reconstruction. **Topic key**: stable semantic addressing. **Strict writes (opt-in via `memoryStrictWrites`)**: rejects an unknown `kind` or blank tags instead of silently corrupting the store. Inspired by [Engram](https://github.com/Gentleman-Programming/engram) and [IWE](https://github.com/iwe-org/iwe)'s schema-validated agent writes. |
47
47
  | 👁️ **Watchmen (KiroGraph-Watchmen opt-in module)** ⚠️ *experimental* | Auto-synthesizes accumulated memory observations into workspace briefs and `inclusion: manual` skill files. Fires via the `watchmenReady` signal in `kirograph_mem_store` when threshold is reached. **Local model** (default, `watchmenSynthesisMode: 'local'`): runs `gemma-4-E4B-it-ONNX` on-device via `@huggingface/transformers` — ~3–4 GB one-time download, ~3–5 GB RAM, 8–15 s on Apple Silicon M1+. No API key, no background daemon, no external calls. **Agent mode** also available for Kiro (`watchmenSynthesisMode: 'agent'`, uses active session). ⚠️ **Experimental:** output quality in local mode depends heavily on the model chosen and your hardware. Smaller models or slower machines may produce incomplete briefs and lower-quality skill files. Use `agent` mode for best results. |
48
- | 📚 **Wiki (KiroGraph-Wiki opt-in module)** | Karpathy-style LLM wiki — a set of markdown pages that compound knowledge across sessions. Three ops: **ingest** (build structured prompt from source text), **apply-diff** (write LLM-generated WIKI_DIFF to SQLite + disk), **lint** (broken links, orphan pages, contradictions). Context enrichment: `kirograph_context` auto-includes relevant wiki pages above score threshold. Two synthesis modes: `agent` (IDE LLM) or `local` (HuggingFace, same infra as Watchmen). Conflict resolution: deterministic by source date when `wikiAutoResolveConflicts: true`. Inspired by [Karpathy's LLM Wiki pattern](https://gist.github.com/karpathy/442a6bf555914893e9891c11519de94f). |
48
+ | 📚 **Wiki (KiroGraph-Wiki opt-in module)** | Karpathy-style LLM wiki — a set of markdown pages that compound knowledge across sessions. Three ops: **ingest** (build structured prompt from source text), **apply-diff** (write LLM-generated WIKI_DIFF to SQLite + disk), **lint** (broken links, orphan pages, contradictions). **Link graph** (`kirograph wiki links <slug>`): outgoing/broken/incoming `[[slug]]` backlinks for a page. **Rename** (`kirograph wiki rename <from> <to>`): moves a page's file and rewrites every `[[slug]]` reference to it across the wiki — a CLI-first port of the navigation/refactor features [IWE](https://github.com/iwe-org/iwe) gets from a full LSP. Context enrichment: `kirograph_context` auto-includes relevant wiki pages above score threshold. Two synthesis modes: `agent` (IDE LLM) or `local` (HuggingFace, same infra as Watchmen). Conflict resolution: deterministic by source date when `wikiAutoResolveConflicts: true`. Inspired by [Karpathy's LLM Wiki pattern](https://gist.github.com/karpathy/442a6bf555914893e9891c11519de94f) and [IWE](https://github.com/iwe-org/iwe). |
49
49
  | 📖 **Documentation Indexing (KiroGraph-Doc opt-in module)** | Section-level retrieval from Markdown, MDX, RST, AsciiDoc, OpenAPI — 92-97% token savings |
50
50
  | 📊 **Data Navigation (KiroGraph-Data opt-in module)** | Query CSV/JSON/Excel/Parquet/**PDF** with filters, aggregations, joins — all server-side in SQLite |
51
51
  | <h4>Token Optimization</h4> | |
@@ -176,6 +176,7 @@ KiroGraph is inspired by [CodeGraph](https://github.com/colbymchenry/codegraph)
176
176
  - [caveman](https://github.com/JuliusBrussee/caveman) by [Julius Brussee](https://www.linkedin.com/in/julius-brussee/): the caveman mode's agent prose compression concept, multi-level steering injection.
177
177
  - [watchmen](https://github.com/firstbatchxyz/watchmen) by [firstbatch](https://github.com/firstbatchxyz): the watchmen module's session-mining concept, workspace brief generation, and `AGENTS.md` mirroring pattern.
178
178
  - [LLM Wiki](https://gist.github.com/karpathy/442a6bf555914893e9891c11519de94f) by [Andrej Karpathy](https://karpathy.ai/): the wiki module's three-op pattern (ingest → apply → lint), WIKI_DIFF block format, two-tool ingest flow, and the principle of knowledge compounding rather than accumulating.
179
+ - [IWE](https://github.com/iwe-org/iwe): a markdown knowledge-graph tool with a full LSP integration and schema-validated agent writes (`expect` guards, per-type document schemas) over MCP. `memoryStrictWrites` (opt-in observation schema validation) and `kirograph wiki links`/`kirograph wiki rename` (link-graph navigation and rename-with-reference-updates, ported to the CLI rather than a full LSP server) both scale down ideas from IWE to fit KiroGraph's existing memory and wiki modules.
179
180
  - [jDocMunch-MCP](https://github.com/jgravelle/jdocmunch-mcp) by [J. Gravelle](https://www.linkedin.com/in/j-gravelle-2778223/): the documentation module's section-first retrieval approach, stable section IDs, and byte-offset addressing.
180
181
  - [jDataMunch-MCP](https://github.com/jgravelle/jdatamunch-mcp) by [J. Gravelle](https://www.linkedin.com/in/j-gravelle-2778223/): the data module's column profiling, streaming parsers, and server-side aggregation approach.
181
182
  - [rtk](https://github.com/rtk-ai/rtk) by [rtk-ai](https://github.com/rtk-ai): the shell compression module's command-family approach and token-optimized output patterns.
@@ -35,11 +35,11 @@ var fs = __toESM(require("fs"));
35
35
  var path = __toESM(require("path"));
36
36
  const pythonParser = {
37
37
  name: "python",
38
- manifestFiles: ["pyproject.toml", "setup.py", "setup.cfg"],
38
+ manifestFiles: ["pyproject.toml", "setup.py", "setup.cfg", "requirements.txt"],
39
39
  language: "python",
40
40
  canParse(manifestPath) {
41
41
  const base = path.basename(manifestPath);
42
- return base === "pyproject.toml" || base === "setup.py" || base === "setup.cfg";
42
+ return base === "pyproject.toml" || base === "setup.py" || base === "setup.cfg" || base === "requirements.txt";
43
43
  },
44
44
  async parse(manifestPath, projectRoot) {
45
45
  let content;
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/architecture/manifest/python.ts"],
4
- "sourcesContent": ["/**\n * Python manifest parser.\n * Handles pyproject.toml, setup.py, setup.cfg.\n */\nimport * as fs from 'fs';\nimport * as path from 'path';\nimport type { ManifestParser, ArchPackage } from '../types';\n\nexport const pythonParser: ManifestParser = {\n name: 'python',\n manifestFiles: ['pyproject.toml', 'setup.py', 'setup.cfg'],\n language: 'python',\n\n canParse(manifestPath: string): boolean {\n const base = path.basename(manifestPath);\n return base === 'pyproject.toml' || base === 'setup.py' || base === 'setup.cfg';\n },\n\n async parse(manifestPath: string, projectRoot: string): Promise<ArchPackage[]> {\n let content: string;\n try {\n content = fs.readFileSync(manifestPath, 'utf8');\n } catch {\n return [];\n }\n\n const base = path.basename(manifestPath);\n let name: string | undefined;\n let version: string | undefined;\n const externalDeps: string[] = [];\n\n if (base === 'pyproject.toml') {\n name = content.match(/^\\[(?:tool\\.poetry|project)\\][^[]*name\\s*=\\s*\"([^\"]+)\"/ms)?.[1];\n version = content.match(/^\\[(?:tool\\.poetry|project)\\][^[]*version\\s*=\\s*\"([^\"]+)\"/ms)?.[1];\n const depsMatch = content.match(/^\\[(?:tool\\.poetry\\.)?dependencies\\]([\\s\\S]*?)(?=^\\[|\\Z)/m);\n if (depsMatch) {\n for (const line of depsMatch[1].split('\\n')) {\n const m = line.trim().match(/^([a-zA-Z0-9_.-]+)\\s*[=<>!]/);\n if (m && m[1] !== 'python') externalDeps.push(m[1]);\n }\n }\n } else if (base === 'setup.py') {\n name = content.match(/name\\s*=\\s*['\"]([^'\"]+)['\"]/)?.[1];\n version = content.match(/version\\s*=\\s*['\"]([^'\"]+)['\"]/)?.[1];\n const installRequires = content.match(/install_requires\\s*=\\s*\\[([^\\]]+)\\]/s);\n if (installRequires) {\n for (const dep of installRequires[1].matchAll(/['\"]([a-zA-Z0-9_.-]+)/g)) {\n externalDeps.push(dep[1]);\n }\n }\n } else if (base === 'setup.cfg') {\n name = content.match(/^name\\s*=\\s*(.+)/m)?.[1]?.trim();\n version = content.match(/^version\\s*=\\s*(.+)/m)?.[1]?.trim();\n const depsSection = content.match(/^install_requires\\s*=([\\s\\S]*?)(?=^\\[|\\Z)/m);\n if (depsSection) {\n for (const line of depsSection[1].split('\\n')) {\n const m = line.trim().match(/^([a-zA-Z0-9_.-]+)/);\n if (m) externalDeps.push(m[1]);\n }\n }\n }\n\n const relDir = path.relative(projectRoot, path.dirname(manifestPath)).replace(/\\\\/g, '/') || '.';\n const relManifest = path.relative(projectRoot, manifestPath).replace(/\\\\/g, '/');\n const pkgName = name ?? path.basename(path.dirname(manifestPath));\n\n return [{\n id: `pkg:python:${relDir}`,\n name: pkgName,\n path: relDir,\n source: 'manifest',\n language: 'python',\n manifestPath: relManifest,\n version,\n externalDeps,\n updatedAt: Date.now(),\n }];\n },\n};\n"],
5
- "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAIA,SAAoB;AACpB,WAAsB;AAGf,MAAM,eAA+B;AAAA,EAC1C,MAAM;AAAA,EACN,eAAe,CAAC,kBAAkB,YAAY,WAAW;AAAA,EACzD,UAAU;AAAA,EAEV,SAAS,cAA+B;AACtC,UAAM,OAAO,KAAK,SAAS,YAAY;AACvC,WAAO,SAAS,oBAAoB,SAAS,cAAc,SAAS;AAAA,EACtE;AAAA,EAEA,MAAM,MAAM,cAAsB,aAA6C;AAC7E,QAAI;AACJ,QAAI;AACF,gBAAU,GAAG,aAAa,cAAc,MAAM;AAAA,IAChD,QAAQ;AACN,aAAO,CAAC;AAAA,IACV;AAEA,UAAM,OAAO,KAAK,SAAS,YAAY;AACvC,QAAI;AACJ,QAAI;AACJ,UAAM,eAAyB,CAAC;AAEhC,QAAI,SAAS,kBAAkB;AAC7B,aAAO,QAAQ,MAAM,0DAA0D,IAAI,CAAC;AACpF,gBAAU,QAAQ,MAAM,6DAA6D,IAAI,CAAC;AAC1F,YAAM,YAAY,QAAQ,MAAM,2DAA2D;AAC3F,UAAI,WAAW;AACb,mBAAW,QAAQ,UAAU,CAAC,EAAE,MAAM,IAAI,GAAG;AAC3C,gBAAM,IAAI,KAAK,KAAK,EAAE,MAAM,6BAA6B;AACzD,cAAI,KAAK,EAAE,CAAC,MAAM,SAAU,cAAa,KAAK,EAAE,CAAC,CAAC;AAAA,QACpD;AAAA,MACF;AAAA,IACF,WAAW,SAAS,YAAY;AAC9B,aAAO,QAAQ,MAAM,6BAA6B,IAAI,CAAC;AACvD,gBAAU,QAAQ,MAAM,gCAAgC,IAAI,CAAC;AAC7D,YAAM,kBAAkB,QAAQ,MAAM,sCAAsC;AAC5E,UAAI,iBAAiB;AACnB,mBAAW,OAAO,gBAAgB,CAAC,EAAE,SAAS,wBAAwB,GAAG;AACvE,uBAAa,KAAK,IAAI,CAAC,CAAC;AAAA,QAC1B;AAAA,MACF;AAAA,IACF,WAAW,SAAS,aAAa;AAC/B,aAAO,QAAQ,MAAM,mBAAmB,IAAI,CAAC,GAAG,KAAK;AACrD,gBAAU,QAAQ,MAAM,sBAAsB,IAAI,CAAC,GAAG,KAAK;AAC3D,YAAM,cAAc,QAAQ,MAAM,4CAA4C;AAC9E,UAAI,aAAa;AACf,mBAAW,QAAQ,YAAY,CAAC,EAAE,MAAM,IAAI,GAAG;AAC7C,gBAAM,IAAI,KAAK,KAAK,EAAE,MAAM,oBAAoB;AAChD,cAAI,EAAG,cAAa,KAAK,EAAE,CAAC,CAAC;AAAA,QAC/B;AAAA,MACF;AAAA,IACF;AAEA,UAAM,SAAS,KAAK,SAAS,aAAa,KAAK,QAAQ,YAAY,CAAC,EAAE,QAAQ,OAAO,GAAG,KAAK;AAC7F,UAAM,cAAc,KAAK,SAAS,aAAa,YAAY,EAAE,QAAQ,OAAO,GAAG;AAC/E,UAAM,UAAU,QAAQ,KAAK,SAAS,KAAK,QAAQ,YAAY,CAAC;AAEhE,WAAO,CAAC;AAAA,MACN,IAAI,cAAc,MAAM;AAAA,MACxB,MAAM;AAAA,MACN,MAAM;AAAA,MACN,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,cAAc;AAAA,MACd;AAAA,MACA;AAAA,MACA,WAAW,KAAK,IAAI;AAAA,IACtB,CAAC;AAAA,EACH;AACF;",
4
+ "sourcesContent": ["/**\n * Python manifest parser.\n * Handles pyproject.toml, setup.py, setup.cfg, requirements.txt.\n *\n * requirements.txt has no name/version/externalDeps of its own for the\n * architecture (import-graph) side \u2014 it's listed here purely so the security\n * module's pip plugin (registered under the same 'python' ecosystem key)\n * gets it through manifest discovery at all; see security/manifest/adapter.ts.\n */\nimport * as fs from 'fs';\nimport * as path from 'path';\nimport type { ManifestParser, ArchPackage } from '../types';\n\nexport const pythonParser: ManifestParser = {\n name: 'python',\n manifestFiles: ['pyproject.toml', 'setup.py', 'setup.cfg', 'requirements.txt'],\n language: 'python',\n\n canParse(manifestPath: string): boolean {\n const base = path.basename(manifestPath);\n return base === 'pyproject.toml' || base === 'setup.py' || base === 'setup.cfg' || base === 'requirements.txt';\n },\n\n async parse(manifestPath: string, projectRoot: string): Promise<ArchPackage[]> {\n let content: string;\n try {\n content = fs.readFileSync(manifestPath, 'utf8');\n } catch {\n return [];\n }\n\n const base = path.basename(manifestPath);\n let name: string | undefined;\n let version: string | undefined;\n const externalDeps: string[] = [];\n\n if (base === 'pyproject.toml') {\n name = content.match(/^\\[(?:tool\\.poetry|project)\\][^[]*name\\s*=\\s*\"([^\"]+)\"/ms)?.[1];\n version = content.match(/^\\[(?:tool\\.poetry|project)\\][^[]*version\\s*=\\s*\"([^\"]+)\"/ms)?.[1];\n const depsMatch = content.match(/^\\[(?:tool\\.poetry\\.)?dependencies\\]([\\s\\S]*?)(?=^\\[|\\Z)/m);\n if (depsMatch) {\n for (const line of depsMatch[1].split('\\n')) {\n const m = line.trim().match(/^([a-zA-Z0-9_.-]+)\\s*[=<>!]/);\n if (m && m[1] !== 'python') externalDeps.push(m[1]);\n }\n }\n } else if (base === 'setup.py') {\n name = content.match(/name\\s*=\\s*['\"]([^'\"]+)['\"]/)?.[1];\n version = content.match(/version\\s*=\\s*['\"]([^'\"]+)['\"]/)?.[1];\n const installRequires = content.match(/install_requires\\s*=\\s*\\[([^\\]]+)\\]/s);\n if (installRequires) {\n for (const dep of installRequires[1].matchAll(/['\"]([a-zA-Z0-9_.-]+)/g)) {\n externalDeps.push(dep[1]);\n }\n }\n } else if (base === 'setup.cfg') {\n name = content.match(/^name\\s*=\\s*(.+)/m)?.[1]?.trim();\n version = content.match(/^version\\s*=\\s*(.+)/m)?.[1]?.trim();\n const depsSection = content.match(/^install_requires\\s*=([\\s\\S]*?)(?=^\\[|\\Z)/m);\n if (depsSection) {\n for (const line of depsSection[1].split('\\n')) {\n const m = line.trim().match(/^([a-zA-Z0-9_.-]+)/);\n if (m) externalDeps.push(m[1]);\n }\n }\n }\n\n const relDir = path.relative(projectRoot, path.dirname(manifestPath)).replace(/\\\\/g, '/') || '.';\n const relManifest = path.relative(projectRoot, manifestPath).replace(/\\\\/g, '/');\n const pkgName = name ?? path.basename(path.dirname(manifestPath));\n\n return [{\n id: `pkg:python:${relDir}`,\n name: pkgName,\n path: relDir,\n source: 'manifest',\n language: 'python',\n manifestPath: relManifest,\n version,\n externalDeps,\n updatedAt: Date.now(),\n }];\n },\n};\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AASA,SAAoB;AACpB,WAAsB;AAGf,MAAM,eAA+B;AAAA,EAC1C,MAAM;AAAA,EACN,eAAe,CAAC,kBAAkB,YAAY,aAAa,kBAAkB;AAAA,EAC7E,UAAU;AAAA,EAEV,SAAS,cAA+B;AACtC,UAAM,OAAO,KAAK,SAAS,YAAY;AACvC,WAAO,SAAS,oBAAoB,SAAS,cAAc,SAAS,eAAe,SAAS;AAAA,EAC9F;AAAA,EAEA,MAAM,MAAM,cAAsB,aAA6C;AAC7E,QAAI;AACJ,QAAI;AACF,gBAAU,GAAG,aAAa,cAAc,MAAM;AAAA,IAChD,QAAQ;AACN,aAAO,CAAC;AAAA,IACV;AAEA,UAAM,OAAO,KAAK,SAAS,YAAY;AACvC,QAAI;AACJ,QAAI;AACJ,UAAM,eAAyB,CAAC;AAEhC,QAAI,SAAS,kBAAkB;AAC7B,aAAO,QAAQ,MAAM,0DAA0D,IAAI,CAAC;AACpF,gBAAU,QAAQ,MAAM,6DAA6D,IAAI,CAAC;AAC1F,YAAM,YAAY,QAAQ,MAAM,2DAA2D;AAC3F,UAAI,WAAW;AACb,mBAAW,QAAQ,UAAU,CAAC,EAAE,MAAM,IAAI,GAAG;AAC3C,gBAAM,IAAI,KAAK,KAAK,EAAE,MAAM,6BAA6B;AACzD,cAAI,KAAK,EAAE,CAAC,MAAM,SAAU,cAAa,KAAK,EAAE,CAAC,CAAC;AAAA,QACpD;AAAA,MACF;AAAA,IACF,WAAW,SAAS,YAAY;AAC9B,aAAO,QAAQ,MAAM,6BAA6B,IAAI,CAAC;AACvD,gBAAU,QAAQ,MAAM,gCAAgC,IAAI,CAAC;AAC7D,YAAM,kBAAkB,QAAQ,MAAM,sCAAsC;AAC5E,UAAI,iBAAiB;AACnB,mBAAW,OAAO,gBAAgB,CAAC,EAAE,SAAS,wBAAwB,GAAG;AACvE,uBAAa,KAAK,IAAI,CAAC,CAAC;AAAA,QAC1B;AAAA,MACF;AAAA,IACF,WAAW,SAAS,aAAa;AAC/B,aAAO,QAAQ,MAAM,mBAAmB,IAAI,CAAC,GAAG,KAAK;AACrD,gBAAU,QAAQ,MAAM,sBAAsB,IAAI,CAAC,GAAG,KAAK;AAC3D,YAAM,cAAc,QAAQ,MAAM,4CAA4C;AAC9E,UAAI,aAAa;AACf,mBAAW,QAAQ,YAAY,CAAC,EAAE,MAAM,IAAI,GAAG;AAC7C,gBAAM,IAAI,KAAK,KAAK,EAAE,MAAM,oBAAoB;AAChD,cAAI,EAAG,cAAa,KAAK,EAAE,CAAC,CAAC;AAAA,QAC/B;AAAA,MACF;AAAA,IACF;AAEA,UAAM,SAAS,KAAK,SAAS,aAAa,KAAK,QAAQ,YAAY,CAAC,EAAE,QAAQ,OAAO,GAAG,KAAK;AAC7F,UAAM,cAAc,KAAK,SAAS,aAAa,YAAY,EAAE,QAAQ,OAAO,GAAG;AAC/E,UAAM,UAAU,QAAQ,KAAK,SAAS,KAAK,QAAQ,YAAY,CAAC;AAEhE,WAAO,CAAC;AAAA,MACN,IAAI,cAAc,MAAM;AAAA,MACxB,MAAM;AAAA,MACN,MAAM;AAAA,MACN,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,cAAc;AAAA,MACd;AAAA,MACA;AAAA,MACA,WAAW,KAAK,IAAI;AAAA,IACtB,CAAC;AAAA,EACH;AACF;",
6
6
  "names": []
7
7
  }
@@ -286,6 +286,8 @@ const GROUPS = [
286
286
  { name: "wiki page", args: "<slug>", desc: "Print the full content of a wiki page" },
287
287
  { name: "wiki list", desc: "List all wiki pages" },
288
288
  { name: "wiki lint", desc: "Health check the wiki for broken links, orphans, contradictions" },
289
+ { name: "wiki links", args: "<slug>", desc: "Show outgoing, broken, and incoming [[slug]] links for a page" },
290
+ { name: "wiki rename", args: "<from> <to>", desc: "Rename a page slug, moving its file and updating every [[slug]] reference to it" },
289
291
  { name: "wiki reindex", desc: "Rebuild SQLite index from .kirograph/wiki/*.md files" },
290
292
  { name: "wiki status", desc: "Wiki subsystem stats: page count, source count, oldest/newest page" },
291
293
  { name: "wiki synthesize", desc: "Run local-model wiki synthesis over the pending source queue" },
@@ -343,7 +345,7 @@ const GROUPS = [
343
345
  "--add <cveId> Manually register a CVE (requires --package and --version)"
344
346
  ]
345
347
  },
346
- { name: "reachability", args: "<target>", desc: "Check reachability for a CVE or dependency: verdict, call paths, impact" },
348
+ { name: "reachability", args: "<target>", desc: "Check reachability for a CVE or dependency: verdict, call paths, impact", opts: ["--explain Plain-English reason for the verdict"] },
347
349
  {
348
350
  name: "vuln suppress",
349
351
  args: "<cveId>",
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/bin/commands/help.ts"],
4
- "sourcesContent": ["import { Command } from 'commander';\nimport { printBanner } from '../banner';\n\ntype CommandEntry = { name: string; args?: string; desc: string; opts?: string[] };\ntype Group = { icon: string; title: string; commands: CommandEntry[]; examples: [string, string][] };\n\nconst c = {\n reset: '\\x1b[0m',\n bold: '\\x1b[1m',\n dim: '\\x1b[2m',\n violet: '\\x1b[38;5;99m',\n purple: '\\x1b[38;5;135m',\n lavender: '\\x1b[38;5;141m',\n paleLavender: '\\x1b[38;5;183m',\n gray: '\\x1b[90m',\n brown: '\\x1b[38;5;130m',\n green: '\\x1b[32m',\n cyan: '\\x1b[36m',\n underline: '\\x1b[4m',\n};\n\nconst GROUPS: Group[] = [\n {\n icon: '\uD83D\uDD27', title: 'Setup',\n commands: [\n { name: 'install', desc: 'Wire up MCP/instructions for an agent workspace', opts: ['--target <t> kiro | cursor | claude | windsurf | ...', 'Kiro install: prompts to import global hooks'] },\n { name: 'init', args: '[path]', desc: 'Initialize KiroGraph in a project', opts: ['-i, --index Index immediately after init'] },\n { name: 'uninit', args: '[path]', desc: 'Remove KiroGraph from a project', opts: ['--force Skip confirmation', '--target <t> Target to clean up (or \"all\")'] },\n { name: 'hook', desc: 'Manage global Kiro hooks in ~/.kirograph/hooks/', opts: ['save [path] Save workspace hooks to global store', 'import [path] Import global hooks into workspace', 'list List saved global hooks', '--all Save or import all without prompting (save/import)'] },\n { name: 'doctor', args: '[path]', desc: 'Health check: index, config, hooks, and permissions', opts: ['--fix Auto-repair fixable issues'] },\n ],\n examples: [\n ['kirograph install', 'Wire up Kiro MCP + hooks + steering'],\n ['kirograph install --target claude', 'Wire up Claude Code MCP + project memory'],\n ['kirograph init --index', 'Init and immediately index'],\n ['kirograph hook save', 'Save workspace hooks to your global library'],\n ['kirograph hook import', 'Import global hooks into this project'],\n ['kirograph doctor --fix', 'Check and auto-repair installation issues'],\n ],\n },\n {\n icon: '\uD83D\uDCE6', title: 'Indexing',\n commands: [\n { name: 'index', args: '[path]', desc: 'Full re-index of a project', opts: ['--force Force re-index all files'] },\n { name: 'sync', args: '[path]', desc: 'Incremental sync of changed files', opts: ['--files <f> Specific files to sync'] },\n { name: 'sync-if-dirty', args: '[path]', desc: 'Sync only if a dirty marker is present', opts: ['-q, --quiet Suppress output'] },\n { name: 'mark-dirty', args: '[path]', desc: 'Write a dirty marker for deferred sync' },\n { name: 'unlock', args: '[path]', desc: 'Force-release a stale lock file' },\n ],\n examples: [\n ['kirograph sync', 'Incremental sync of changed files'],\n ['kirograph index --force', 'Force full re-index'],\n ],\n },\n {\n icon: '\uD83D\uDD0D', title: 'Search',\n commands: [\n { name: 'status', args: '[path]', desc: 'Show index statistics and health' },\n { name: 'query', args: '<search>', desc: 'Search for symbols by name', opts: ['--kind <k> Filter by kind', '--limit <n> Max results'] },\n { name: 'context', args: '<task>', desc: 'Build relevant code context for a task', opts: ['--max-nodes <n> Max symbols', '--no-code Exclude code', '--format <f> markdown | json'] },\n { name: 'files', args: '[path]', desc: 'Show project file structure', opts: ['--format <f> tree | flat | grouped | compact', '--filter <p> Directory prefix', '--pattern <g> Glob'] },\n { name: 'path', args: '<from> <to>', desc: 'Shortest dependency path between two symbols' },\n { name: 'affected', args: '[files...]', desc: 'Find test files affected by changed source files', opts: ['--stdin Read from stdin', '-d <n> Depth', '-q Quiet'] },\n { name: 'callers', args: '<symbol>', desc: 'List symbols that call a given function or method', opts: ['--limit <n> Max results'] },\n { name: 'callees', args: '<symbol>', desc: 'List symbols called by a given function or method', opts: ['--limit <n> Max results'] },\n { name: 'impact', args: '<symbol>', desc: 'Show symbols affected by changing a given symbol', opts: ['-d, --depth <n> Max traversal depth'] },\n ],\n examples: [\n ['kirograph query useState', 'Find symbols named useState'],\n ['kirograph context \"add dark mode\"', 'Get context for a task'],\n ['kirograph callers parseToken', 'Who calls parseToken?'],\n ['kirograph callees handleRequest', 'What does handleRequest call?'],\n ['kirograph impact UserService', 'What breaks if UserService changes?'],\n ['git diff --name-only | kirograph affected --stdin', 'Affected tests from git diff'],\n ],\n },\n {\n icon: '\uD83D\uDCCA', title: 'Insights',\n commands: [\n { name: 'hotspots', args: '[path]', desc: 'Most-connected symbols by edge degree', opts: ['--limit <n> Max results', '--format <f> table | json'] },\n { name: 'surprising', args: '[path]', desc: 'Non-obvious cross-file connections', opts: ['--limit <n> Max results'] },\n { name: 'dead-code', args: '[path]', desc: 'Unreferenced unexported symbols', opts: ['--limit <n> Max results'] },\n { name: 'circular-deps', args: '[path]', desc: 'Find circular dependency cycles', opts: ['-j, --json JSON output'] },\n { name: 'largest', args: '[path]', desc: 'Symbols ranked by lines of code', opts: ['--limit <n> Max results'] },\n { name: 'rank', args: '[path]', desc: 'Symbols ranked by fan-in or fan-out edge count', opts: ['--by <by> fan-in | fan-out'] },\n { name: 'distribution', args: '[dir]', desc: 'Symbol-kind breakdown per file or directory', opts: ['--limit <n> Max results'] },\n { name: 'god-class', args: '[path]', desc: 'Classes ranked by member count (god-class risk)', opts: ['--limit <n> Max results'] },\n { name: 'gini', args: '[path]', desc: 'Gini inequality coefficient of a metric', opts: ['--metric <m> loc | fan-in | fan-out'] },\n { name: 'snapshot', desc: 'Save/list/diff graph snapshots', opts: ['save [label]', 'list', 'diff [label] --format summary|full|json'] },\n { name: 'export', desc: 'Interactive graph dashboard', opts: ['build [path] Generate HTML', 'start [path] Generate and open'] },\n ],\n examples: [\n ['kirograph hotspots --limit 10', 'Top 10 most-connected symbols'],\n ['kirograph circular-deps', 'Find all circular dependency cycles'],\n ['kirograph largest --limit 20', 'Biggest functions by LOC'],\n ['kirograph god-class', 'Find potential god classes'],\n ['kirograph snapshot save pre-refactor', 'Save before a refactor'],\n ['kirograph export start', 'Open the graph dashboard'],\n ],\n },\n {\n icon: '\uD83C\uDFDB\uFE0F', title: 'Architecture',\n commands: [\n { name: 'architecture', args: '[path]', desc: 'Package graph and layer map', opts: ['--packages Packages only', '--layers Layers only'] },\n { name: 'coupling', args: '[path]', desc: 'Coupling metrics per package', opts: ['--sort <s> instability | ca | ce | name', '--package <n> Detail view'] },\n { name: 'package', args: '<name>', desc: 'Inspect a package', opts: ['--no-files Omit file list'] },\n { name: 'type-hierarchy', args: '<symbol>', desc: 'Traverse base/derived types of a class or interface', opts: ['--direction <dir> up | down | both'] },\n { name: 'communities', args: '[path]', desc: 'Detect code communities (clusters of related symbols)' },\n { name: 'manifest', args: '[path]', desc: 'Workspace manifest: packages, versions, licenses, version drift' },\n ],\n examples: [\n ['kirograph architecture --packages', 'List all detected packages'],\n ['kirograph coupling --sort instability', 'Packages ranked by instability'],\n ['kirograph type-hierarchy UserRepository --direction up', 'What interfaces does this implement?'],\n ['kirograph communities', 'Find tightly coupled clusters'],\n ['kirograph manifest', 'Show all dependency versions and drift'],\n ],\n },\n {\n icon: '\uD83C\uDFE5', title: 'Code Health',\n commands: [\n { name: 'module-api', args: '[path]', desc: 'List all exported symbols in a file or directory', opts: ['--limit <n> Max results'] },\n { name: 'rename-preview', args: '<symbol>', desc: 'Show all reference sites for a symbol before renaming', opts: ['--limit <n> Max results'] },\n { name: 'doc-coverage', args: '[path]', desc: 'Find exported symbols missing docstrings', opts: ['--limit <n> Max results'] },\n { name: 'inheritance-depth', args: '[path]', desc: 'Find deepest inheritance chains', opts: ['--limit <n> Max results'] },\n { name: 'recursion', args: '[path]', desc: 'Find recursive and mutually-recursive functions', opts: ['--limit <n> Max results'] },\n { name: 'annotations', args: '[path]', desc: 'Decorator/attribute histogram across the codebase', opts: ['--decorator <name> Filter by name'] },\n { name: 'unused-imports', args: '[path]', desc: 'Find import nodes with zero resolved downstream edges', opts: ['--limit <n> Max results'] },\n { name: 'dependency-depth', args: '[path]', desc: 'Topological depth of each file in the import graph', opts: ['--limit <n> Max files'] },\n { name: 'session', desc: 'Save or compare session baselines for tracking changes', opts: ['start Start a session baseline', 'end Compare current state to baseline'] },\n { name: 'refactor', desc: 'Refactoring tools: rename preview and community-driven suggestions', opts: ['rename <symbol> Preview rename locations', 'suggest Get refactoring suggestions'] },\n ],\n examples: [\n ['kirograph module-api src/auth', 'List public API of the auth module'],\n ['kirograph rename-preview handleLogin', 'Find all sites before renaming'],\n ['kirograph doc-coverage', 'Find undocumented exports'],\n ['kirograph unused-imports', 'Find dead import statements'],\n ['kirograph session start && <edit> && kirograph session end', 'Diff graph before and after a change'],\n ],\n },\n {\n icon: '\uD83D\uDD2C', title: 'Analysis',\n commands: [\n { name: 'complexity', args: '[path]', desc: 'Rank functions by cyclomatic, cognitive, and maintainability score', opts: ['--limit <n> Max results'] },\n { name: 'simplify-scan', args: '[path]', desc: 'Find candidates for simplification by complexity and dead code', opts: ['--limit <n> Max results'] },\n { name: 'health', args: '[path]', desc: 'Composite codebase health score (0-10000) with grade' },\n { name: 'dsm', args: '[path]', desc: 'Design Structure Matrix \u2014 detect strongly coupled module groups', opts: ['--limit <n> Max groups'] },\n { name: 'test-risk', args: '[path]', desc: 'Rank untested code by risk score (complexity \u00D7 fan-in)', opts: ['--limit <n> Max results'] },\n { name: 'test-coverage', args: '[path]', desc: 'Show test coverage gaps from lcov/Istanbul reports', opts: ['--sort <order> asc (worst first) | desc'] },\n ],\n examples: [\n ['kirograph health', 'Get overall health score and grade'],\n ['kirograph complexity --limit 10', 'Top 10 most complex functions'],\n ['kirograph test-risk', 'Which untested code is highest risk?'],\n ['kirograph test-coverage', 'Show worst-covered files first'],\n ['kirograph dsm', 'Find tightly coupled module groups'],\n ],\n },\n {\n icon: '\uD83C\uDF3F', title: 'Git',\n commands: [\n { name: 'diff-context', args: '[path]', desc: 'Changed symbols, their callers/callees, and affected tests', opts: ['--staged Use staged changes only'] },\n { name: 'commit-context', args: '[path]', desc: 'Structured summary of staged changes for a commit message' },\n { name: 'pr-context', args: '<base> [head]', desc: 'Semantic diff between two git refs for PR descriptions', opts: ['--format <fmt> text | json'] },\n { name: 'changelog', args: '<ref1> <ref2>', desc: 'Human-readable semantic diff between two git refs' },\n { name: 'test-map', args: '[symbol]', desc: 'Map symbols to test files; show uncovered symbols', opts: ['--limit <n> Max results'] },\n ],\n examples: [\n ['kirograph diff-context --staged', 'What does my staged diff actually change?'],\n ['kirograph commit-context', 'Generate a structured commit message draft'],\n ['kirograph pr-context main', 'Semantic PR description vs main'],\n ['kirograph changelog v1.0 v1.1', 'What changed between two tags?'],\n ['kirograph test-map', 'Which symbols have no test coverage?'],\n ],\n },\n {\n icon: '\u270F\uFE0F', title: 'Edit',\n commands: [\n { name: 'str-replace', args: '<file> <old> <new>', desc: 'Replace unique string anchor in a file; fails on 0 or >1 matches' },\n { name: 'multi-replace', args: '<file> <pairs-json>', desc: 'Multiple string replacements as an all-or-nothing transaction' },\n { name: 'insert-at', args: '<file> <anchor> <content>', desc: 'Insert content before or after an anchor or line number', opts: ['--after Insert after anchor', '--line Treat anchor as line number'] },\n { name: 'ast-rewrite', args: '<file> <pattern> <rewrite>', desc: 'Structural rewrite via ast-grep (requires ast-grep on PATH)' },\n ],\n examples: [\n ['kirograph str-replace auth.ts \"return null\" \"return undefined\"', 'Safe replace a unique string'],\n ['kirograph insert-at server.ts \"app.listen\" \"app.use(logger());\" --before', 'Insert before a line'],\n ['kirograph ast-rewrite src/api.ts \"console.log($MSG)\" \"logger.debug($MSG)\"', 'Structural rewrite'],\n ],\n },\n {\n icon: '\uD83C\uDF32', title: 'Branch',\n commands: [\n { name: 'branch list', desc: 'List tracked branches with size and last-sync time' },\n { name: 'branch add', args: '[name]', desc: 'Start tracking a branch (copies current index)' },\n { name: 'branch remove', args: '<name>', desc: 'Stop tracking a branch and delete its DB' },\n { name: 'branch gc', desc: 'Remove DBs for branches that no longer exist in git' },\n { name: 'branch diff', args: '<a> <b>', desc: 'Symbol diff between two tracked branch DBs' },\n { name: 'branch search', args: '<name> <query>', desc: 'Search symbols in a branch DB without switching' },\n ],\n examples: [\n ['kirograph branch list', 'See all tracked branches'],\n ['kirograph branch add feature/auth', 'Track the auth branch'],\n ['kirograph branch diff main feature/auth', 'What symbols changed?'],\n ['kirograph branch search feature/auth \"handleLogin\"', 'Search in branch without switching'],\n ['kirograph branch gc', 'Clean up deleted branches'],\n ],\n },\n {\n icon: '\uD83D\uDCDA', title: 'Docs',\n commands: [\n { name: 'docs toc', args: '[file]', desc: 'Table of contents for a file or the whole project' },\n { name: 'docs search', args: '<query>', desc: 'Full-text search over documentation sections', opts: ['--limit <n> Max results', '--section <id> Restrict to section'] },\n { name: 'docs section', args: '<id>', desc: 'Print the full content of a section by ID' },\n { name: 'docs outline', args: '<file>', desc: 'Print heading hierarchy for a document' },\n { name: 'docs refs', args: '<id>', desc: 'Show code-to-doc and doc-to-code cross-references' },\n { name: 'docs reindex', desc: 'Force re-index all documentation files' },\n { name: 'docs lint', desc: 'Find broken refs, stale sections, FTS desync' },\n ],\n examples: [\n ['kirograph docs toc', 'Table of contents for the project'],\n ['kirograph docs search \"authentication\"', 'Find docs about auth'],\n ['kirograph docs section api.auth.login', 'Read a specific section'],\n ['kirograph docs refs api.auth.login', 'Which code references this doc section?'],\n ],\n },\n {\n icon: '\uD83D\uDDC4\uFE0F', title: 'Data',\n commands: [\n { name: 'data list', desc: 'List all indexed datasets' },\n { name: 'data describe', args: '<dataset>', desc: 'Show schema and column profiles', opts: ['--format <f> table | json'] },\n { name: 'data query', args: '<dataset>', desc: 'Query rows with filters', opts: ['--filter <f> col:op:val', '--limit <n> Max rows', '--format <f> table | json | csv'] },\n { name: 'data aggregate', args: '<dataset>', desc: 'Server-side GROUP BY aggregation', opts: ['--group-by <col>', '--metric <agg:col> sum|avg|count|min|max'] },\n { name: 'data search', args: '<dataset> <q>', desc: 'Search column names and sample values' },\n { name: 'data join', args: '<left> <right>', desc: 'SQL JOIN across two indexed datasets', opts: ['--left-col <c> Join key', '--right-col <c> Join key', '--type inner|left|right'] },\n { name: 'data correlations', args: '<dataset>', desc: 'Pairwise Pearson correlations between numeric columns' },\n { name: 'data quality', args: '<dataset>', desc: 'Data quality triage: rank columns by risk' },\n { name: 'data drift', args: '<dataset>', desc: 'Show schema drift between last two indexes' },\n { name: 'data history', args: '<dataset>', desc: 'Show history of schema changes for a dataset' },\n ],\n examples: [\n ['kirograph data list', 'List all indexed datasets'],\n ['kirograph data describe orders', 'Schema and column profiles for orders'],\n ['kirograph data query orders --filter status:eq:shipped', 'Filter rows'],\n ['kirograph data aggregate orders --group-by region --metric sum:amount', 'Aggregate by region'],\n ['kirograph data join users orders --left-col id --right-col user_id', 'Join datasets'],\n ],\n },\n {\n icon: '\uD83D\uDCD6', title: 'Wiki',\n commands: [\n { name: 'wiki init', desc: 'Initialize wiki: create SCHEMA.md and MANIFEST.md' },\n { name: 'wiki ingest', args: '[source]', desc: 'Print the ingest prompt for the LLM (reads file or stdin)' },\n { name: 'wiki search', args: '<query>', desc: 'Full-text search over wiki pages', opts: ['--limit <n> Max results'] },\n { name: 'wiki page', args: '<slug>', desc: 'Print the full content of a wiki page' },\n { name: 'wiki list', desc: 'List all wiki pages' },\n { name: 'wiki lint', desc: 'Health check the wiki for broken links, orphans, contradictions' },\n { name: 'wiki reindex', desc: 'Rebuild SQLite index from .kirograph/wiki/*.md files' },\n { name: 'wiki status', desc: 'Wiki subsystem stats: page count, source count, oldest/newest page' },\n { name: 'wiki synthesize', desc: 'Run local-model wiki synthesis over the pending source queue' },\n { name: 'wiki apply-diff', args: '[diff]', desc: 'Apply a WIKI_DIFF string to the wiki' },\n ],\n examples: [\n ['kirograph wiki init', 'Initialize the wiki in this project'],\n ['kirograph wiki search \"authentication flow\"', 'Find wiki pages about auth'],\n ['kirograph wiki page arch-overview', 'Read a specific wiki page'],\n ['kirograph wiki lint', 'Check wiki health'],\n ['kirograph wiki status', 'How many pages and sources?'],\n ],\n },\n {\n icon: '\uD83E\uDDE0', title: 'Memory',\n commands: [\n { name: 'mem search', args: '<query>', desc: 'Search past observations', opts: ['--kind <k> Filter by kind', '--limit <n> Max results'] },\n { name: 'mem store', args: '<text>', desc: 'Store an observation', opts: ['--kind <k> decision | error | pattern | architecture | note'] },\n { name: 'mem capture', args: '<text>', desc: 'Passively extract multiple observations from free-form text' },\n { name: 'mem timeline', desc: 'List recent sessions and observations' },\n { name: 'mem status', desc: 'Memory health dashboard' },\n { name: 'mem prune', desc: 'Remove old observations', opts: ['--older-than <d> Duration (e.g. 90d)'] },\n { name: 'mem export', desc: 'Export observations', opts: ['--format <f> jsonl | md'] },\n { name: 'mem lint', desc: 'Health check and auto-repair', opts: ['--fix Auto-fix issues'] },\n { name: 'mem reembed', desc: 'Re-embed all observations after model change' },\n { name: 'mem conflicts list', desc: 'List pending conflict relations' },\n { name: 'mem conflicts ignore', args: '<id>', desc: 'Dismiss a pending conflict relation' },\n { name: 'mem watchmen status', desc: 'Show watchmen observation counter and last synthesis time' },\n { name: 'mem watchmen synthesize', desc: 'Run watchmen synthesis: produce brief and/or skill files' },\n { name: 'mem watchmen reset', desc: 'Reset the watchmen observation counter to zero' },\n ],\n examples: [\n ['kirograph mem search \"auth decision\"', 'Search for past decisions'],\n ['kirograph mem store \"use idempotency keys\" --kind decision', 'Store a decision'],\n ['kirograph mem prune --older-than 90d', 'Remove observations older than 90 days'],\n ['kirograph mem conflicts list', 'See pending conflict relations'],\n ['kirograph mem watchmen status', 'Check watchmen counter and last synthesis'],\n ['kirograph mem watchmen synthesize', 'Trigger watchmen synthesis manually'],\n ],\n },\n {\n icon: '\uD83D\uDD12', title: 'Security',\n commands: [\n { name: 'security', args: '[path]', desc: 'Security overview: vulnerabilities, verdicts, stale-data warnings' },\n { name: 'vulns', args: '[path]', desc: 'List vulnerabilities with reachability verdicts and severity',\n opts: [\n '--severity <level> Filter by severity: critical, high, medium, low',\n '--verdict <verdict> Filter by verdict: affected, not_affected, under_investigation',\n '--refresh Trigger fresh vulnerability enrichment before listing',\n '--add <cveId> Manually register a CVE (requires --package and --version)',\n ],\n },\n { name: 'reachability', args: '<target>', desc: 'Check reachability for a CVE or dependency: verdict, call paths, impact' },\n { name: 'vuln suppress', args: '<cveId>', desc: 'Mark a CVE as suppressed (false positive or accepted risk)',\n opts: [\n '--reason <text> Reason for suppression',\n '--expires <date> Expiry date (e.g. 2026-12-31)',\n ],\n },\n { name: 'vuln unsuppress', args: '<cveId>', desc: 'Remove a suppression' },\n { name: 'vuln suppressions', desc: 'List all active suppressions', opts: ['--format json JSON output'] },\n { name: 'licenses', args: '[path]', desc: 'Show dependency licenses and check against policy (deny/warn lists)',\n opts: [\n '--policy Show only policy violations',\n '--deny <patterns> Override deny list (comma-separated SPDX patterns)',\n '--warn <patterns> Override warn list (comma-separated SPDX patterns)',\n '--format json JSON output',\n ],\n },\n { name: 'vex', args: '[path]', desc: 'Export a VEX document (Vulnerability Exploitability eXchange)', opts: ['--output <file> Write to file instead of stdout'] },\n { name: 'sbom', args: '[path]', desc: 'Export a Software Bill of Materials', opts: ['--output <file> Write to file instead of stdout'] },\n { name: 'staleness', args: '[path]', desc: 'Check dependency freshness \u2014 packages behind their latest version',\n opts: [\n '--threshold <n> Show only packages with staleness_score >= n (default: 0.3)',\n '--refresh Fetch latest version info from registries before listing',\n '--format <fmt> table | json',\n ],\n },\n { name: 'security export', args: '[path]', desc: 'Generate HTML security dashboard', opts: ['--output <file> Output path', '--open Open in browser'] },\n { name: 'security secrets', args: '[path]', desc: 'Scan for hardcoded secrets with call-graph blast radius', opts: ['--include-tests Include test files', '--severity <s> Filter level', '--format json'] },\n { name: 'security flows', args: '[path]', desc: 'SAST-lite: detect dangerous data flows (SQL injection, eval, path traversal, etc.)', opts: ['--type sql|eval|deserialize|path|all', '--format json'] },\n { name: 'security ci-report', args: '[path]', desc: 'Generate CI/CD security report (JSON, SARIF for GitHub, or text)', opts: ['--format json|sarif|text', '--fail-on affected|any|critical', '--output <file>'] },\n { name: 'attack-surface', args: '[path]', desc: 'Map attack surface: routes \u2192 vulnerable deps with hop count and auth status', opts: ['--limit <n>', '--public-only', '--format json'] },\n { name: 'supply-chain', args: '[path]', desc: 'Supply chain health: OpenSSF Scorecard, maintainer count, abandoned packages', opts: ['--threshold critical|high|medium', '--refresh', '--format json'] },\n { name: 'dep-confusion', args: '[path]', desc: 'Detect dependency confusion: internal packages that exist in public registries', opts: ['--format json'] },\n { name: 'remediation', args: '[path]', desc: 'Remediation SLA tracking: days open, fix available since, overdue alerts', opts: ['--overdue-only', '--format json'] },\n { name: 'pattern', args: '[pattern]', desc: 'AST structural search: live pattern search or library rule runner',\n opts: [\n '--list Show all bundled SAST rules',\n '--library <id> Run a specific library rule',\n '--lang <l> Language filter (js, ts, python, go, ...)',\n '--format json JSON output',\n ],\n },\n ],\n examples: [\n ['kirograph security', 'Overview: dep count, vuln count, verdict breakdown'],\n ['kirograph security --refresh-staleness', 'Overview including stale dependency count'],\n ['kirograph vulns', 'List all vulnerabilities with severity and verdict'],\n ['kirograph vulns --stale', 'Show staleness score alongside each CVE'],\n ['kirograph vulns --verdict under_investigation', 'Show only vulnerabilities still being investigated'],\n ['kirograph vulns --severity critical --verdict affected', 'Critical confirmed vulnerabilities'],\n ['kirograph vulns --refresh', 'Re-query OSV before listing'],\n ['kirograph staleness', 'Show packages with staleness_score >= 0.3'],\n ['kirograph staleness --refresh --threshold 0.5', 'Fetch latest versions and show very stale packages'],\n ['kirograph reachability CVE-2023-12345', 'Check reachability for a specific CVE'],\n ['kirograph reachability lodash', 'Check reachability for a dependency by package name'],\n ['kirograph licenses', 'Show all dependency licenses'],\n ['kirograph licenses --policy', 'Show only license policy violations'],\n ['kirograph licenses --deny \"GPL-*,AGPL-*\"', 'Block all GPL/AGPL licenses'],\n ['kirograph vex --output vex.json', 'Export CycloneDX VEX document'],\n ['kirograph sbom --output sbom.json', 'Export SPDX SBOM'],\n ['kirograph security export --open', 'Generate and open HTML security dashboard'],\n ['kirograph security secrets', 'Scan for hardcoded secrets with call-graph blast radius'],\n ['kirograph security flows', 'Detect dangerous data flows (SQL injection, eval, etc.)'],\n ['kirograph security ci-report --format sarif --output results.sarif', 'SARIF report for GitHub Security tab'],\n ['kirograph attack-surface --public-only', 'Show public routes reaching vulnerable deps'],\n ['kirograph supply-chain --threshold high', 'Show high-risk supply chain findings'],\n ['kirograph dep-confusion', 'Detect dependency confusion attack vectors'],\n ['kirograph remediation --overdue-only', 'Show CVEs past their remediation SLA'],\n ['kirograph vuln suppress CVE-2024-1234 --reason \"not in code path\"', 'Suppress a false positive CVE'],\n ['kirograph vuln unsuppress CVE-2024-1234', 'Remove a suppression'],\n ['kirograph vuln suppressions', 'List all active suppressions'],\n ['kirograph pattern \"eval($X)\"', 'Find all eval() calls'],\n ['kirograph pattern --list', 'Show all bundled SAST rules'],\n ['kirograph pattern --library dangerous-eval-js', 'Run the dangerous-eval library rule'],\n ],\n },\n {\n icon: '\u2699\uFE0F', title: 'Agent',\n commands: [\n { name: 'caveman', args: '[mode]', desc: 'Communication style (off | lite | full | ultra)' },\n { name: 'compression', args: '[level]', desc: 'Shell compression level (off | normal | aggressive | ultra)' },\n { name: 'exec', args: '<cmd>', desc: 'Run command with token-optimized output', opts: ['-l <level> Compression level', '-t <sec> Timeout'] },\n { name: 'gain', desc: 'Token savings statistics', opts: ['--graph ASCII chart', '--history Recent commands', '--daily Day breakdown'] },\n { name: 'bench', desc: 'Run local token-efficiency benchmark across KiroGraph tools', opts: ['--quiet Suppress per-tool output'] },\n { name: 'monitor', desc: 'Live tail of mcp-calls.jsonl \u2014 watch MCP tool usage in real time', opts: ['--lines <n> Initial lines to show'] },\n { name: 'upgrade', desc: 'Update KiroGraph to the latest version', opts: ['--dry-run Show what would change without installing'] },\n { name: 'cost', args: '[sessionDir]', desc: 'Analyze MCP tool usage and token cost from Claude session transcripts', opts: ['--last <n> Last N sessions', '--category Group by tool category'] },\n { name: 'serve', desc: 'Start the MCP server', opts: ['--mcp Run as stdio MCP', '--path <p> Project path'] },\n ],\n examples: [\n ['kirograph caveman lite', 'Enable lite caveman mode'],\n ['kirograph exec git status', 'Run git status with compression'],\n ['kirograph gain --graph', 'Show token savings graph'],\n ['kirograph bench', 'Run token-efficiency benchmark'],\n ['kirograph monitor', 'Watch MCP tool calls live'],\n ['kirograph cost --last 5', 'Cost breakdown for the last 5 sessions'],\n ['kirograph upgrade --dry-run', 'Preview available KiroGraph update'],\n ],\n },\n];\n\nfunction renderGroup(group: Group, highlightIdx: number, interactive = false): string[] {\n const lines: string[] = [];\n const nameWidth = Math.max(...group.commands.map(cmd => (cmd.name + (cmd.args ? ' ' + cmd.args : '')).length)) + 2;\n\n lines.push('');\n lines.push(` ${c.bold}${c.paleLavender}COMMANDS${c.reset} ${c.dim}\u2191\u2193 select \u00B7 enter to copy \u00B7 q quit${c.reset}`);\n lines.push('');\n\n for (let i = 0; i < group.commands.length; i++) {\n const cmd = group.commands[i]!;\n const signature = cmd.name + (cmd.args ? ' ' + cmd.args : '');\n const isHighlighted = i === highlightIdx;\n const prefix = isHighlighted ? `${c.green}${c.bold}\u276F${c.reset} ` : ' ';\n const namePart = isHighlighted\n ? `${c.bold}${c.lavender}${cmd.name}${c.reset}${cmd.args ? ' ' + c.bold + cmd.args + c.reset : ''}`\n : `${c.lavender}${cmd.name}${c.reset}${cmd.args ? ' ' + c.dim + cmd.args + c.reset : ''}`;\n const pad = ' '.repeat(Math.max(0, nameWidth - signature.length));\n lines.push(`${prefix}${namePart}${pad}${c.gray}${cmd.desc}${c.reset}`);\n // In interactive mode show only the highlighted command's opts\n if (cmd.opts && (!interactive || isHighlighted)) {\n for (const opt of cmd.opts) {\n const [flag, ...rest] = opt.split(/ +/);\n lines.push(` ${c.purple}${flag}${c.reset}${rest.length ? ' ' + c.dim + rest.join(' ') + c.reset : ''}`);\n }\n }\n }\n\n if (!interactive && group.examples.length > 0) {\n lines.push('');\n lines.push(` ${c.bold}${c.paleLavender}EXAMPLES${c.reset}`);\n lines.push('');\n for (const [ex, desc] of group.examples) {\n lines.push(` ${c.violet}$${c.reset} ${c.lavender}${ex}${c.reset}`);\n lines.push(` ${c.dim}${desc}${c.reset}`);\n }\n }\n\n return lines;\n}\n\n\nfunction renderTabs(selectedIdx: number): string {\n return GROUPS.map((g, i) => {\n if (i === selectedIdx) {\n return `${c.bold}${c.violet}${c.underline}${g.icon} ${g.title}${c.reset}`;\n }\n return `${c.dim}${g.icon} ${g.title}${c.reset}`;\n }).join(' ');\n}\n\n/**\n * Interactive tabbed help \u2014 left/right for tabs, up/down for commands, enter to copy.\n */\nexport function printInteractiveHelp(): void {\n let selectedTab = 0;\n let selectedCmd = 0;\n\n function render() {\n // Move to top-left and clear from cursor to end of screen\n process.stdout.write('\\x1b[H\\x1b[J');\n\n const lines: string[] = [];\n lines.push('');\n lines.push(` ${renderTabs(selectedTab)}`);\n lines.push(` ${c.dim}\u2190 \u2192 tabs \u00B7 \u2191 \u2193 commands \u00B7 enter to use \u00B7 q quit${c.reset}`);\n lines.push(...renderGroup(GROUPS[selectedTab]!, selectedCmd, true));\n\n process.stdout.write(lines.join('\\n') + '\\n');\n }\n\n // Enter alternate screen + hide cursor so rendering never scrolls or flickers\n process.stdout.write('\\x1b[?1049h\\x1b[?25l');\n\n printBanner();\n console.log(`\\n${c.bold}${c.paleLavender}USAGE${c.reset} ${c.lavender}kirograph${c.reset} ${c.gray}<command>${c.reset} ${c.dim}[options]${c.reset}`);\n\n render();\n\n // Enter raw mode for interactive navigation\n const stdin = process.stdin;\n if (!stdin.isTTY) {\n // Non-interactive: leave alternate screen and print all groups normally\n process.stdout.write('\\x1b[?25h\\x1b[?1049l');\n for (let i = 1; i < GROUPS.length; i++) {\n const lines = renderGroup(GROUPS[i]!, -1);\n for (const line of lines) console.log(line);\n }\n return;\n }\n\n stdin.setRawMode(true);\n stdin.resume();\n stdin.setEncoding('utf8');\n\n function cleanup() {\n stdin.removeListener('data', onData);\n stdin.setRawMode(false);\n stdin.pause();\n // Leave alternate screen and restore cursor\n process.stdout.write('\\x1b[?25h\\x1b[?1049l');\n }\n\n function onData(key: string) {\n // Arrow keys and other escape sequences start with \\x1b[\n if (key.startsWith('\\x1b[')) {\n if (key === '\\x1b[C') { // right arrow \u2014 next tab\n selectedTab = (selectedTab + 1) % GROUPS.length;\n selectedCmd = 0;\n render();\n } else if (key === '\\x1b[D') { // left arrow \u2014 prev tab\n selectedTab = (selectedTab - 1 + GROUPS.length) % GROUPS.length;\n selectedCmd = 0;\n render();\n } else if (key === '\\x1b[B') { // down arrow \u2014 next command\n const maxCmd = GROUPS[selectedTab]!.commands.length - 1;\n selectedCmd = Math.min(selectedCmd + 1, maxCmd);\n render();\n } else if (key === '\\x1b[A') { // up arrow \u2014 prev command\n selectedCmd = Math.max(selectedCmd - 1, 0);\n render();\n }\n // Ignore other escape sequences\n return;\n }\n\n if (key === '\\r' || key === '\\n') { // enter \u2014 copy command to terminal\n cleanup();\n const cmd = GROUPS[selectedTab]!.commands[selectedCmd]!;\n const fullCmd = `kirograph ${cmd.name}${cmd.args ? ' ' + cmd.args : ''}`;\n console.log(`\\n ${c.green}${c.bold}$${c.reset} ${fullCmd}\\n`);\n process.exit(0);\n } else if (key === 'q' || key === '\\x03') { // q, ctrl+c\n cleanup();\n console.log();\n process.exit(0);\n }\n }\n\n stdin.on('data', onData);\n}\n\n/**\n * Non-interactive full help (for piping, --help flag).\n */\nexport function printColoredHelp(): void {\n\n console.log(`\\n${c.bold}${c.paleLavender}USAGE${c.reset}`);\n console.log(` ${c.lavender}kirograph${c.reset} ${c.gray}<command>${c.reset} ${c.dim}[options]${c.reset}\\n`);\n\n for (const group of GROUPS) {\n console.log(`${c.bold}${c.paleLavender}${group.icon} ${group.title.toUpperCase()}${c.reset}\\n`);\n const nameWidth = Math.max(...group.commands.map(cmd => (cmd.name + (cmd.args ? ' ' + cmd.args : '')).length)) + 2;\n for (const cmd of group.commands) {\n const signature = cmd.name + (cmd.args ? ' ' + cmd.args : '');\n const namePart = `${c.lavender}${cmd.name}${c.reset}${cmd.args ? ' ' + c.dim + cmd.args + c.reset : ''}`;\n const pad = ' '.repeat(Math.max(0, nameWidth - signature.length));\n console.log(` ${namePart}${pad}${c.gray}${cmd.desc}${c.reset}`);\n if (cmd.opts) {\n for (const opt of cmd.opts) {\n const [flag, ...rest] = opt.split(/ +/);\n console.log(` ${c.purple}${flag}${c.reset}${rest.length ? ' ' + c.dim + rest.join(' ') + c.reset : ''}`);\n }\n }\n }\n console.log();\n }\n\n console.log(`${c.bold}${c.paleLavender}GLOBAL FLAGS${c.reset}\\n`);\n console.log(` ${c.purple}-h, --help${c.reset} ${c.gray}Show this help${c.reset}`);\n console.log(` ${c.purple}-V, --version${c.reset} ${c.gray}Show version number${c.reset}\\n`);\n\n\n console.log(`${c.bold}${c.paleLavender}EXAMPLES${c.reset}\\n`);\n\n const exampleGroups: Array<{ title: string; examples: [string, string][] }> = [\n {\n title: '\uD83D\uDD27 Setup & indexing',\n examples: [\n ['kirograph install', 'Wire up Kiro MCP + hooks + steering for the current workspace'],\n ['kirograph install --target claude', 'Wire up Claude Code MCP + project memory'],\n ['kirograph install --target codex', 'Install Codex project instructions and print MCP config'],\n ['kirograph init --index', 'Init and immediately index the project'],\n ['kirograph hook save', 'Save workspace hooks to ~/.kirograph/hooks/'],\n ['kirograph hook import', 'Import global hooks into .kiro/hooks/'],\n ['kirograph sync', 'Incremental sync of changed files'],\n ],\n },\n {\n title: '\uD83D\uDD0D Search & exploration',\n examples: [\n ['kirograph query useState', 'Find all symbols named useState'],\n ['kirograph context \"add dark mode\"', 'Get relevant code context for a task'],\n ['kirograph files --format grouped', 'Show files grouped by directory'],\n ['kirograph path LoginController DatabasePool', 'Find how two symbols are connected'],\n ['kirograph affected src/auth.ts', 'Find tests affected by a change'],\n ['git diff --name-only | kirograph affected --stdin', 'Affected tests from a git diff'],\n ['kirograph export start', 'Open the interactive graph dashboard in the browser'],\n ['kirograph export build -o /tmp/graph', 'Export the dashboard to a custom directory'],\n ],\n },\n {\n title: '\uD83D\uDCCA Graph insights',\n examples: [\n ['kirograph hotspots --limit 10', 'Top 10 most-connected symbols'],\n ['kirograph surprising', 'Find unexpected cross-module connections'],\n ['kirograph dead-code', 'Find unreferenced unexported symbols'],\n ['kirograph snapshot save pre-refactor', 'Save a named snapshot before a refactor'],\n ['kirograph snapshot diff pre-refactor', 'Diff current graph vs the named snapshot'],\n ],\n },\n {\n title: '\uD83C\uDFDB\uFE0F Architecture',\n examples: [\n ['kirograph architecture --packages', 'List all detected packages'],\n ['kirograph coupling --sort instability', 'Show packages ranked by instability'],\n ['kirograph package src/auth', 'Inspect the auth package'],\n ],\n },\n {\n title: '\uD83D\uDD12 Security',\n examples: [\n ['kirograph security', 'Overview: dep count, vuln count, verdict breakdown'],\n ['kirograph security --refresh-staleness', 'Overview including stale dependency count'],\n ['kirograph vulns', 'List all vulnerabilities'],\n ['kirograph vulns --stale', 'Show staleness score alongside each CVE'],\n ['kirograph vulns --verdict under_investigation', 'Vulnerabilities still being investigated'],\n ['kirograph vulns --severity critical --verdict affected', 'Critical confirmed vulnerabilities'],\n ['kirograph vulns --refresh', 'Re-query OSV then list'],\n ['kirograph staleness', 'Show packages with staleness_score >= 0.3'],\n ['kirograph staleness --refresh --threshold 0.5', 'Fetch latest versions and show very stale packages'],\n ['kirograph reachability CVE-2023-12345', 'Check reachability for a specific CVE'],\n ['kirograph reachability lodash', 'Check reachability for a dependency by package name'],\n ['kirograph licenses', 'Show all dependency licenses'],\n ['kirograph licenses --policy', 'Show only license policy violations'],\n ['kirograph licenses --deny \"GPL-*,AGPL-*\"', 'Block all GPL/AGPL licenses'],\n ['kirograph vex --output vex.json', 'Export CycloneDX VEX document'],\n ['kirograph sbom --output sbom.json', 'Export SPDX SBOM'],\n ['kirograph vuln suppress CVE-2024-1234 --reason \"not in code path\"', 'Suppress a false positive CVE'],\n ['kirograph vuln suppress CVE-2024-1234 --expires 2026-12-31', 'Suppress with expiry date'],\n ['kirograph vuln unsuppress CVE-2024-1234', 'Remove a suppression'],\n ['kirograph vuln suppressions', 'List all active suppressions'],\n ['kirograph pattern \"eval($X)\"', 'Find all eval() calls (requires enablePatterns: true)'],\n ['kirograph pattern --list', 'Show all bundled SAST pattern rules'],\n ['kirograph pattern --library dangerous-eval-js', 'Run a specific library rule'],\n ],\n },\n {\n title: '\u2699\uFE0F Agent',\n examples: [\n ['kirograph caveman full', 'Enable full caveman mode for the agent'],\n ['kirograph caveman off', 'Disable caveman mode'],\n ['kirograph compression aggressive', 'Set compression to aggressive level'],\n ['kirograph compression off', 'Disable compression hook (tool still available)'],\n ['kirograph exec git status', 'Run git status with compression'],\n ['kirograph exec --level ultra npm test', 'Run tests with ultra compression'],\n ['kirograph exec --raw cargo build', 'Show raw vs compressed comparison'],\n ['kirograph gain --graph', 'Show token savings graph'],\n ['kirograph mem search \"auth decision\"', 'Search memory for past decisions'],\n ['kirograph mem store \"use idempotency keys\" --kind decision', 'Store a decision'],\n ['kirograph data list', 'List all indexed datasets'],\n ['kirograph data describe tests-fixtures-users', 'Show schema and column profiles'],\n ['kirograph data query orders --filter status:eq:shipped --limit 10', 'Query rows with filters'],\n ['kirograph data aggregate orders --group-by region --metric sum:amount', 'Server-side aggregation'],\n ['kirograph serve --mcp', 'Start the MCP server'],\n ],\n },\n ];\n\n for (const eg of exampleGroups) {\n console.log(` ${c.dim}${eg.title}${c.reset}`);\n for (const [ex, desc] of eg.examples) {\n console.log(` ${c.violet}$${c.reset} ${c.lavender}${ex}${c.reset}`);\n console.log(` ${c.dim}${desc}${c.reset}`);\n }\n console.log();\n }\n}\n\nexport function register(program: Command): void {\n program.configureHelp({ formatHelp: () => '' });\n program.addHelpText('afterAll', '');\n // Disable Commander's built-in --help to prevent process.exit\n program.helpOption(false);\n}\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["import { Command } from 'commander';\nimport { printBanner } from '../banner';\n\ntype CommandEntry = { name: string; args?: string; desc: string; opts?: string[] };\ntype Group = { icon: string; title: string; commands: CommandEntry[]; examples: [string, string][] };\n\nconst c = {\n reset: '\\x1b[0m',\n bold: '\\x1b[1m',\n dim: '\\x1b[2m',\n violet: '\\x1b[38;5;99m',\n purple: '\\x1b[38;5;135m',\n lavender: '\\x1b[38;5;141m',\n paleLavender: '\\x1b[38;5;183m',\n gray: '\\x1b[90m',\n brown: '\\x1b[38;5;130m',\n green: '\\x1b[32m',\n cyan: '\\x1b[36m',\n underline: '\\x1b[4m',\n};\n\nconst GROUPS: Group[] = [\n {\n icon: '\uD83D\uDD27', title: 'Setup',\n commands: [\n { name: 'install', desc: 'Wire up MCP/instructions for an agent workspace', opts: ['--target <t> kiro | cursor | claude | windsurf | ...', 'Kiro install: prompts to import global hooks'] },\n { name: 'init', args: '[path]', desc: 'Initialize KiroGraph in a project', opts: ['-i, --index Index immediately after init'] },\n { name: 'uninit', args: '[path]', desc: 'Remove KiroGraph from a project', opts: ['--force Skip confirmation', '--target <t> Target to clean up (or \"all\")'] },\n { name: 'hook', desc: 'Manage global Kiro hooks in ~/.kirograph/hooks/', opts: ['save [path] Save workspace hooks to global store', 'import [path] Import global hooks into workspace', 'list List saved global hooks', '--all Save or import all without prompting (save/import)'] },\n { name: 'doctor', args: '[path]', desc: 'Health check: index, config, hooks, and permissions', opts: ['--fix Auto-repair fixable issues'] },\n ],\n examples: [\n ['kirograph install', 'Wire up Kiro MCP + hooks + steering'],\n ['kirograph install --target claude', 'Wire up Claude Code MCP + project memory'],\n ['kirograph init --index', 'Init and immediately index'],\n ['kirograph hook save', 'Save workspace hooks to your global library'],\n ['kirograph hook import', 'Import global hooks into this project'],\n ['kirograph doctor --fix', 'Check and auto-repair installation issues'],\n ],\n },\n {\n icon: '\uD83D\uDCE6', title: 'Indexing',\n commands: [\n { name: 'index', args: '[path]', desc: 'Full re-index of a project', opts: ['--force Force re-index all files'] },\n { name: 'sync', args: '[path]', desc: 'Incremental sync of changed files', opts: ['--files <f> Specific files to sync'] },\n { name: 'sync-if-dirty', args: '[path]', desc: 'Sync only if a dirty marker is present', opts: ['-q, --quiet Suppress output'] },\n { name: 'mark-dirty', args: '[path]', desc: 'Write a dirty marker for deferred sync' },\n { name: 'unlock', args: '[path]', desc: 'Force-release a stale lock file' },\n ],\n examples: [\n ['kirograph sync', 'Incremental sync of changed files'],\n ['kirograph index --force', 'Force full re-index'],\n ],\n },\n {\n icon: '\uD83D\uDD0D', title: 'Search',\n commands: [\n { name: 'status', args: '[path]', desc: 'Show index statistics and health' },\n { name: 'query', args: '<search>', desc: 'Search for symbols by name', opts: ['--kind <k> Filter by kind', '--limit <n> Max results'] },\n { name: 'context', args: '<task>', desc: 'Build relevant code context for a task', opts: ['--max-nodes <n> Max symbols', '--no-code Exclude code', '--format <f> markdown | json'] },\n { name: 'files', args: '[path]', desc: 'Show project file structure', opts: ['--format <f> tree | flat | grouped | compact', '--filter <p> Directory prefix', '--pattern <g> Glob'] },\n { name: 'path', args: '<from> <to>', desc: 'Shortest dependency path between two symbols' },\n { name: 'affected', args: '[files...]', desc: 'Find test files affected by changed source files', opts: ['--stdin Read from stdin', '-d <n> Depth', '-q Quiet'] },\n { name: 'callers', args: '<symbol>', desc: 'List symbols that call a given function or method', opts: ['--limit <n> Max results'] },\n { name: 'callees', args: '<symbol>', desc: 'List symbols called by a given function or method', opts: ['--limit <n> Max results'] },\n { name: 'impact', args: '<symbol>', desc: 'Show symbols affected by changing a given symbol', opts: ['-d, --depth <n> Max traversal depth'] },\n ],\n examples: [\n ['kirograph query useState', 'Find symbols named useState'],\n ['kirograph context \"add dark mode\"', 'Get context for a task'],\n ['kirograph callers parseToken', 'Who calls parseToken?'],\n ['kirograph callees handleRequest', 'What does handleRequest call?'],\n ['kirograph impact UserService', 'What breaks if UserService changes?'],\n ['git diff --name-only | kirograph affected --stdin', 'Affected tests from git diff'],\n ],\n },\n {\n icon: '\uD83D\uDCCA', title: 'Insights',\n commands: [\n { name: 'hotspots', args: '[path]', desc: 'Most-connected symbols by edge degree', opts: ['--limit <n> Max results', '--format <f> table | json'] },\n { name: 'surprising', args: '[path]', desc: 'Non-obvious cross-file connections', opts: ['--limit <n> Max results'] },\n { name: 'dead-code', args: '[path]', desc: 'Unreferenced unexported symbols', opts: ['--limit <n> Max results'] },\n { name: 'circular-deps', args: '[path]', desc: 'Find circular dependency cycles', opts: ['-j, --json JSON output'] },\n { name: 'largest', args: '[path]', desc: 'Symbols ranked by lines of code', opts: ['--limit <n> Max results'] },\n { name: 'rank', args: '[path]', desc: 'Symbols ranked by fan-in or fan-out edge count', opts: ['--by <by> fan-in | fan-out'] },\n { name: 'distribution', args: '[dir]', desc: 'Symbol-kind breakdown per file or directory', opts: ['--limit <n> Max results'] },\n { name: 'god-class', args: '[path]', desc: 'Classes ranked by member count (god-class risk)', opts: ['--limit <n> Max results'] },\n { name: 'gini', args: '[path]', desc: 'Gini inequality coefficient of a metric', opts: ['--metric <m> loc | fan-in | fan-out'] },\n { name: 'snapshot', desc: 'Save/list/diff graph snapshots', opts: ['save [label]', 'list', 'diff [label] --format summary|full|json'] },\n { name: 'export', desc: 'Interactive graph dashboard', opts: ['build [path] Generate HTML', 'start [path] Generate and open'] },\n ],\n examples: [\n ['kirograph hotspots --limit 10', 'Top 10 most-connected symbols'],\n ['kirograph circular-deps', 'Find all circular dependency cycles'],\n ['kirograph largest --limit 20', 'Biggest functions by LOC'],\n ['kirograph god-class', 'Find potential god classes'],\n ['kirograph snapshot save pre-refactor', 'Save before a refactor'],\n ['kirograph export start', 'Open the graph dashboard'],\n ],\n },\n {\n icon: '\uD83C\uDFDB\uFE0F', title: 'Architecture',\n commands: [\n { name: 'architecture', args: '[path]', desc: 'Package graph and layer map', opts: ['--packages Packages only', '--layers Layers only'] },\n { name: 'coupling', args: '[path]', desc: 'Coupling metrics per package', opts: ['--sort <s> instability | ca | ce | name', '--package <n> Detail view'] },\n { name: 'package', args: '<name>', desc: 'Inspect a package', opts: ['--no-files Omit file list'] },\n { name: 'type-hierarchy', args: '<symbol>', desc: 'Traverse base/derived types of a class or interface', opts: ['--direction <dir> up | down | both'] },\n { name: 'communities', args: '[path]', desc: 'Detect code communities (clusters of related symbols)' },\n { name: 'manifest', args: '[path]', desc: 'Workspace manifest: packages, versions, licenses, version drift' },\n ],\n examples: [\n ['kirograph architecture --packages', 'List all detected packages'],\n ['kirograph coupling --sort instability', 'Packages ranked by instability'],\n ['kirograph type-hierarchy UserRepository --direction up', 'What interfaces does this implement?'],\n ['kirograph communities', 'Find tightly coupled clusters'],\n ['kirograph manifest', 'Show all dependency versions and drift'],\n ],\n },\n {\n icon: '\uD83C\uDFE5', title: 'Code Health',\n commands: [\n { name: 'module-api', args: '[path]', desc: 'List all exported symbols in a file or directory', opts: ['--limit <n> Max results'] },\n { name: 'rename-preview', args: '<symbol>', desc: 'Show all reference sites for a symbol before renaming', opts: ['--limit <n> Max results'] },\n { name: 'doc-coverage', args: '[path]', desc: 'Find exported symbols missing docstrings', opts: ['--limit <n> Max results'] },\n { name: 'inheritance-depth', args: '[path]', desc: 'Find deepest inheritance chains', opts: ['--limit <n> Max results'] },\n { name: 'recursion', args: '[path]', desc: 'Find recursive and mutually-recursive functions', opts: ['--limit <n> Max results'] },\n { name: 'annotations', args: '[path]', desc: 'Decorator/attribute histogram across the codebase', opts: ['--decorator <name> Filter by name'] },\n { name: 'unused-imports', args: '[path]', desc: 'Find import nodes with zero resolved downstream edges', opts: ['--limit <n> Max results'] },\n { name: 'dependency-depth', args: '[path]', desc: 'Topological depth of each file in the import graph', opts: ['--limit <n> Max files'] },\n { name: 'session', desc: 'Save or compare session baselines for tracking changes', opts: ['start Start a session baseline', 'end Compare current state to baseline'] },\n { name: 'refactor', desc: 'Refactoring tools: rename preview and community-driven suggestions', opts: ['rename <symbol> Preview rename locations', 'suggest Get refactoring suggestions'] },\n ],\n examples: [\n ['kirograph module-api src/auth', 'List public API of the auth module'],\n ['kirograph rename-preview handleLogin', 'Find all sites before renaming'],\n ['kirograph doc-coverage', 'Find undocumented exports'],\n ['kirograph unused-imports', 'Find dead import statements'],\n ['kirograph session start && <edit> && kirograph session end', 'Diff graph before and after a change'],\n ],\n },\n {\n icon: '\uD83D\uDD2C', title: 'Analysis',\n commands: [\n { name: 'complexity', args: '[path]', desc: 'Rank functions by cyclomatic, cognitive, and maintainability score', opts: ['--limit <n> Max results'] },\n { name: 'simplify-scan', args: '[path]', desc: 'Find candidates for simplification by complexity and dead code', opts: ['--limit <n> Max results'] },\n { name: 'health', args: '[path]', desc: 'Composite codebase health score (0-10000) with grade' },\n { name: 'dsm', args: '[path]', desc: 'Design Structure Matrix \u2014 detect strongly coupled module groups', opts: ['--limit <n> Max groups'] },\n { name: 'test-risk', args: '[path]', desc: 'Rank untested code by risk score (complexity \u00D7 fan-in)', opts: ['--limit <n> Max results'] },\n { name: 'test-coverage', args: '[path]', desc: 'Show test coverage gaps from lcov/Istanbul reports', opts: ['--sort <order> asc (worst first) | desc'] },\n ],\n examples: [\n ['kirograph health', 'Get overall health score and grade'],\n ['kirograph complexity --limit 10', 'Top 10 most complex functions'],\n ['kirograph test-risk', 'Which untested code is highest risk?'],\n ['kirograph test-coverage', 'Show worst-covered files first'],\n ['kirograph dsm', 'Find tightly coupled module groups'],\n ],\n },\n {\n icon: '\uD83C\uDF3F', title: 'Git',\n commands: [\n { name: 'diff-context', args: '[path]', desc: 'Changed symbols, their callers/callees, and affected tests', opts: ['--staged Use staged changes only'] },\n { name: 'commit-context', args: '[path]', desc: 'Structured summary of staged changes for a commit message' },\n { name: 'pr-context', args: '<base> [head]', desc: 'Semantic diff between two git refs for PR descriptions', opts: ['--format <fmt> text | json'] },\n { name: 'changelog', args: '<ref1> <ref2>', desc: 'Human-readable semantic diff between two git refs' },\n { name: 'test-map', args: '[symbol]', desc: 'Map symbols to test files; show uncovered symbols', opts: ['--limit <n> Max results'] },\n ],\n examples: [\n ['kirograph diff-context --staged', 'What does my staged diff actually change?'],\n ['kirograph commit-context', 'Generate a structured commit message draft'],\n ['kirograph pr-context main', 'Semantic PR description vs main'],\n ['kirograph changelog v1.0 v1.1', 'What changed between two tags?'],\n ['kirograph test-map', 'Which symbols have no test coverage?'],\n ],\n },\n {\n icon: '\u270F\uFE0F', title: 'Edit',\n commands: [\n { name: 'str-replace', args: '<file> <old> <new>', desc: 'Replace unique string anchor in a file; fails on 0 or >1 matches' },\n { name: 'multi-replace', args: '<file> <pairs-json>', desc: 'Multiple string replacements as an all-or-nothing transaction' },\n { name: 'insert-at', args: '<file> <anchor> <content>', desc: 'Insert content before or after an anchor or line number', opts: ['--after Insert after anchor', '--line Treat anchor as line number'] },\n { name: 'ast-rewrite', args: '<file> <pattern> <rewrite>', desc: 'Structural rewrite via ast-grep (requires ast-grep on PATH)' },\n ],\n examples: [\n ['kirograph str-replace auth.ts \"return null\" \"return undefined\"', 'Safe replace a unique string'],\n ['kirograph insert-at server.ts \"app.listen\" \"app.use(logger());\" --before', 'Insert before a line'],\n ['kirograph ast-rewrite src/api.ts \"console.log($MSG)\" \"logger.debug($MSG)\"', 'Structural rewrite'],\n ],\n },\n {\n icon: '\uD83C\uDF32', title: 'Branch',\n commands: [\n { name: 'branch list', desc: 'List tracked branches with size and last-sync time' },\n { name: 'branch add', args: '[name]', desc: 'Start tracking a branch (copies current index)' },\n { name: 'branch remove', args: '<name>', desc: 'Stop tracking a branch and delete its DB' },\n { name: 'branch gc', desc: 'Remove DBs for branches that no longer exist in git' },\n { name: 'branch diff', args: '<a> <b>', desc: 'Symbol diff between two tracked branch DBs' },\n { name: 'branch search', args: '<name> <query>', desc: 'Search symbols in a branch DB without switching' },\n ],\n examples: [\n ['kirograph branch list', 'See all tracked branches'],\n ['kirograph branch add feature/auth', 'Track the auth branch'],\n ['kirograph branch diff main feature/auth', 'What symbols changed?'],\n ['kirograph branch search feature/auth \"handleLogin\"', 'Search in branch without switching'],\n ['kirograph branch gc', 'Clean up deleted branches'],\n ],\n },\n {\n icon: '\uD83D\uDCDA', title: 'Docs',\n commands: [\n { name: 'docs toc', args: '[file]', desc: 'Table of contents for a file or the whole project' },\n { name: 'docs search', args: '<query>', desc: 'Full-text search over documentation sections', opts: ['--limit <n> Max results', '--section <id> Restrict to section'] },\n { name: 'docs section', args: '<id>', desc: 'Print the full content of a section by ID' },\n { name: 'docs outline', args: '<file>', desc: 'Print heading hierarchy for a document' },\n { name: 'docs refs', args: '<id>', desc: 'Show code-to-doc and doc-to-code cross-references' },\n { name: 'docs reindex', desc: 'Force re-index all documentation files' },\n { name: 'docs lint', desc: 'Find broken refs, stale sections, FTS desync' },\n ],\n examples: [\n ['kirograph docs toc', 'Table of contents for the project'],\n ['kirograph docs search \"authentication\"', 'Find docs about auth'],\n ['kirograph docs section api.auth.login', 'Read a specific section'],\n ['kirograph docs refs api.auth.login', 'Which code references this doc section?'],\n ],\n },\n {\n icon: '\uD83D\uDDC4\uFE0F', title: 'Data',\n commands: [\n { name: 'data list', desc: 'List all indexed datasets' },\n { name: 'data describe', args: '<dataset>', desc: 'Show schema and column profiles', opts: ['--format <f> table | json'] },\n { name: 'data query', args: '<dataset>', desc: 'Query rows with filters', opts: ['--filter <f> col:op:val', '--limit <n> Max rows', '--format <f> table | json | csv'] },\n { name: 'data aggregate', args: '<dataset>', desc: 'Server-side GROUP BY aggregation', opts: ['--group-by <col>', '--metric <agg:col> sum|avg|count|min|max'] },\n { name: 'data search', args: '<dataset> <q>', desc: 'Search column names and sample values' },\n { name: 'data join', args: '<left> <right>', desc: 'SQL JOIN across two indexed datasets', opts: ['--left-col <c> Join key', '--right-col <c> Join key', '--type inner|left|right'] },\n { name: 'data correlations', args: '<dataset>', desc: 'Pairwise Pearson correlations between numeric columns' },\n { name: 'data quality', args: '<dataset>', desc: 'Data quality triage: rank columns by risk' },\n { name: 'data drift', args: '<dataset>', desc: 'Show schema drift between last two indexes' },\n { name: 'data history', args: '<dataset>', desc: 'Show history of schema changes for a dataset' },\n ],\n examples: [\n ['kirograph data list', 'List all indexed datasets'],\n ['kirograph data describe orders', 'Schema and column profiles for orders'],\n ['kirograph data query orders --filter status:eq:shipped', 'Filter rows'],\n ['kirograph data aggregate orders --group-by region --metric sum:amount', 'Aggregate by region'],\n ['kirograph data join users orders --left-col id --right-col user_id', 'Join datasets'],\n ],\n },\n {\n icon: '\uD83D\uDCD6', title: 'Wiki',\n commands: [\n { name: 'wiki init', desc: 'Initialize wiki: create SCHEMA.md and MANIFEST.md' },\n { name: 'wiki ingest', args: '[source]', desc: 'Print the ingest prompt for the LLM (reads file or stdin)' },\n { name: 'wiki search', args: '<query>', desc: 'Full-text search over wiki pages', opts: ['--limit <n> Max results'] },\n { name: 'wiki page', args: '<slug>', desc: 'Print the full content of a wiki page' },\n { name: 'wiki list', desc: 'List all wiki pages' },\n { name: 'wiki lint', desc: 'Health check the wiki for broken links, orphans, contradictions' },\n { name: 'wiki links', args: '<slug>', desc: 'Show outgoing, broken, and incoming [[slug]] links for a page' },\n { name: 'wiki rename', args: '<from> <to>', desc: 'Rename a page slug, moving its file and updating every [[slug]] reference to it' },\n { name: 'wiki reindex', desc: 'Rebuild SQLite index from .kirograph/wiki/*.md files' },\n { name: 'wiki status', desc: 'Wiki subsystem stats: page count, source count, oldest/newest page' },\n { name: 'wiki synthesize', desc: 'Run local-model wiki synthesis over the pending source queue' },\n { name: 'wiki apply-diff', args: '[diff]', desc: 'Apply a WIKI_DIFF string to the wiki' },\n ],\n examples: [\n ['kirograph wiki init', 'Initialize the wiki in this project'],\n ['kirograph wiki search \"authentication flow\"', 'Find wiki pages about auth'],\n ['kirograph wiki page arch-overview', 'Read a specific wiki page'],\n ['kirograph wiki lint', 'Check wiki health'],\n ['kirograph wiki status', 'How many pages and sources?'],\n ],\n },\n {\n icon: '\uD83E\uDDE0', title: 'Memory',\n commands: [\n { name: 'mem search', args: '<query>', desc: 'Search past observations', opts: ['--kind <k> Filter by kind', '--limit <n> Max results'] },\n { name: 'mem store', args: '<text>', desc: 'Store an observation', opts: ['--kind <k> decision | error | pattern | architecture | note'] },\n { name: 'mem capture', args: '<text>', desc: 'Passively extract multiple observations from free-form text' },\n { name: 'mem timeline', desc: 'List recent sessions and observations' },\n { name: 'mem status', desc: 'Memory health dashboard' },\n { name: 'mem prune', desc: 'Remove old observations', opts: ['--older-than <d> Duration (e.g. 90d)'] },\n { name: 'mem export', desc: 'Export observations', opts: ['--format <f> jsonl | md'] },\n { name: 'mem lint', desc: 'Health check and auto-repair', opts: ['--fix Auto-fix issues'] },\n { name: 'mem reembed', desc: 'Re-embed all observations after model change' },\n { name: 'mem conflicts list', desc: 'List pending conflict relations' },\n { name: 'mem conflicts ignore', args: '<id>', desc: 'Dismiss a pending conflict relation' },\n { name: 'mem watchmen status', desc: 'Show watchmen observation counter and last synthesis time' },\n { name: 'mem watchmen synthesize', desc: 'Run watchmen synthesis: produce brief and/or skill files' },\n { name: 'mem watchmen reset', desc: 'Reset the watchmen observation counter to zero' },\n ],\n examples: [\n ['kirograph mem search \"auth decision\"', 'Search for past decisions'],\n ['kirograph mem store \"use idempotency keys\" --kind decision', 'Store a decision'],\n ['kirograph mem prune --older-than 90d', 'Remove observations older than 90 days'],\n ['kirograph mem conflicts list', 'See pending conflict relations'],\n ['kirograph mem watchmen status', 'Check watchmen counter and last synthesis'],\n ['kirograph mem watchmen synthesize', 'Trigger watchmen synthesis manually'],\n ],\n },\n {\n icon: '\uD83D\uDD12', title: 'Security',\n commands: [\n { name: 'security', args: '[path]', desc: 'Security overview: vulnerabilities, verdicts, stale-data warnings' },\n { name: 'vulns', args: '[path]', desc: 'List vulnerabilities with reachability verdicts and severity',\n opts: [\n '--severity <level> Filter by severity: critical, high, medium, low',\n '--verdict <verdict> Filter by verdict: affected, not_affected, under_investigation',\n '--refresh Trigger fresh vulnerability enrichment before listing',\n '--add <cveId> Manually register a CVE (requires --package and --version)',\n ],\n },\n { name: 'reachability', args: '<target>', desc: 'Check reachability for a CVE or dependency: verdict, call paths, impact', opts: ['--explain Plain-English reason for the verdict'] },\n { name: 'vuln suppress', args: '<cveId>', desc: 'Mark a CVE as suppressed (false positive or accepted risk)',\n opts: [\n '--reason <text> Reason for suppression',\n '--expires <date> Expiry date (e.g. 2026-12-31)',\n ],\n },\n { name: 'vuln unsuppress', args: '<cveId>', desc: 'Remove a suppression' },\n { name: 'vuln suppressions', desc: 'List all active suppressions', opts: ['--format json JSON output'] },\n { name: 'licenses', args: '[path]', desc: 'Show dependency licenses and check against policy (deny/warn lists)',\n opts: [\n '--policy Show only policy violations',\n '--deny <patterns> Override deny list (comma-separated SPDX patterns)',\n '--warn <patterns> Override warn list (comma-separated SPDX patterns)',\n '--format json JSON output',\n ],\n },\n { name: 'vex', args: '[path]', desc: 'Export a VEX document (Vulnerability Exploitability eXchange)', opts: ['--output <file> Write to file instead of stdout'] },\n { name: 'sbom', args: '[path]', desc: 'Export a Software Bill of Materials', opts: ['--output <file> Write to file instead of stdout'] },\n { name: 'staleness', args: '[path]', desc: 'Check dependency freshness \u2014 packages behind their latest version',\n opts: [\n '--threshold <n> Show only packages with staleness_score >= n (default: 0.3)',\n '--refresh Fetch latest version info from registries before listing',\n '--format <fmt> table | json',\n ],\n },\n { name: 'security export', args: '[path]', desc: 'Generate HTML security dashboard', opts: ['--output <file> Output path', '--open Open in browser'] },\n { name: 'security secrets', args: '[path]', desc: 'Scan for hardcoded secrets with call-graph blast radius', opts: ['--include-tests Include test files', '--severity <s> Filter level', '--format json'] },\n { name: 'security flows', args: '[path]', desc: 'SAST-lite: detect dangerous data flows (SQL injection, eval, path traversal, etc.)', opts: ['--type sql|eval|deserialize|path|all', '--format json'] },\n { name: 'security ci-report', args: '[path]', desc: 'Generate CI/CD security report (JSON, SARIF for GitHub, or text)', opts: ['--format json|sarif|text', '--fail-on affected|any|critical', '--output <file>'] },\n { name: 'attack-surface', args: '[path]', desc: 'Map attack surface: routes \u2192 vulnerable deps with hop count and auth status', opts: ['--limit <n>', '--public-only', '--format json'] },\n { name: 'supply-chain', args: '[path]', desc: 'Supply chain health: OpenSSF Scorecard, maintainer count, abandoned packages', opts: ['--threshold critical|high|medium', '--refresh', '--format json'] },\n { name: 'dep-confusion', args: '[path]', desc: 'Detect dependency confusion: internal packages that exist in public registries', opts: ['--format json'] },\n { name: 'remediation', args: '[path]', desc: 'Remediation SLA tracking: days open, fix available since, overdue alerts', opts: ['--overdue-only', '--format json'] },\n { name: 'pattern', args: '[pattern]', desc: 'AST structural search: live pattern search or library rule runner',\n opts: [\n '--list Show all bundled SAST rules',\n '--library <id> Run a specific library rule',\n '--lang <l> Language filter (js, ts, python, go, ...)',\n '--format json JSON output',\n ],\n },\n ],\n examples: [\n ['kirograph security', 'Overview: dep count, vuln count, verdict breakdown'],\n ['kirograph security --refresh-staleness', 'Overview including stale dependency count'],\n ['kirograph vulns', 'List all vulnerabilities with severity and verdict'],\n ['kirograph vulns --stale', 'Show staleness score alongside each CVE'],\n ['kirograph vulns --verdict under_investigation', 'Show only vulnerabilities still being investigated'],\n ['kirograph vulns --severity critical --verdict affected', 'Critical confirmed vulnerabilities'],\n ['kirograph vulns --refresh', 'Re-query OSV before listing'],\n ['kirograph staleness', 'Show packages with staleness_score >= 0.3'],\n ['kirograph staleness --refresh --threshold 0.5', 'Fetch latest versions and show very stale packages'],\n ['kirograph reachability CVE-2023-12345', 'Check reachability for a specific CVE'],\n ['kirograph reachability lodash', 'Check reachability for a dependency by package name'],\n ['kirograph licenses', 'Show all dependency licenses'],\n ['kirograph licenses --policy', 'Show only license policy violations'],\n ['kirograph licenses --deny \"GPL-*,AGPL-*\"', 'Block all GPL/AGPL licenses'],\n ['kirograph vex --output vex.json', 'Export CycloneDX VEX document'],\n ['kirograph sbom --output sbom.json', 'Export SPDX SBOM'],\n ['kirograph security export --open', 'Generate and open HTML security dashboard'],\n ['kirograph security secrets', 'Scan for hardcoded secrets with call-graph blast radius'],\n ['kirograph security flows', 'Detect dangerous data flows (SQL injection, eval, etc.)'],\n ['kirograph security ci-report --format sarif --output results.sarif', 'SARIF report for GitHub Security tab'],\n ['kirograph attack-surface --public-only', 'Show public routes reaching vulnerable deps'],\n ['kirograph supply-chain --threshold high', 'Show high-risk supply chain findings'],\n ['kirograph dep-confusion', 'Detect dependency confusion attack vectors'],\n ['kirograph remediation --overdue-only', 'Show CVEs past their remediation SLA'],\n ['kirograph vuln suppress CVE-2024-1234 --reason \"not in code path\"', 'Suppress a false positive CVE'],\n ['kirograph vuln unsuppress CVE-2024-1234', 'Remove a suppression'],\n ['kirograph vuln suppressions', 'List all active suppressions'],\n ['kirograph pattern \"eval($X)\"', 'Find all eval() calls'],\n ['kirograph pattern --list', 'Show all bundled SAST rules'],\n ['kirograph pattern --library dangerous-eval-js', 'Run the dangerous-eval library rule'],\n ],\n },\n {\n icon: '\u2699\uFE0F', title: 'Agent',\n commands: [\n { name: 'caveman', args: '[mode]', desc: 'Communication style (off | lite | full | ultra)' },\n { name: 'compression', args: '[level]', desc: 'Shell compression level (off | normal | aggressive | ultra)' },\n { name: 'exec', args: '<cmd>', desc: 'Run command with token-optimized output', opts: ['-l <level> Compression level', '-t <sec> Timeout'] },\n { name: 'gain', desc: 'Token savings statistics', opts: ['--graph ASCII chart', '--history Recent commands', '--daily Day breakdown'] },\n { name: 'bench', desc: 'Run local token-efficiency benchmark across KiroGraph tools', opts: ['--quiet Suppress per-tool output'] },\n { name: 'monitor', desc: 'Live tail of mcp-calls.jsonl \u2014 watch MCP tool usage in real time', opts: ['--lines <n> Initial lines to show'] },\n { name: 'upgrade', desc: 'Update KiroGraph to the latest version', opts: ['--dry-run Show what would change without installing'] },\n { name: 'cost', args: '[sessionDir]', desc: 'Analyze MCP tool usage and token cost from Claude session transcripts', opts: ['--last <n> Last N sessions', '--category Group by tool category'] },\n { name: 'serve', desc: 'Start the MCP server', opts: ['--mcp Run as stdio MCP', '--path <p> Project path'] },\n ],\n examples: [\n ['kirograph caveman lite', 'Enable lite caveman mode'],\n ['kirograph exec git status', 'Run git status with compression'],\n ['kirograph gain --graph', 'Show token savings graph'],\n ['kirograph bench', 'Run token-efficiency benchmark'],\n ['kirograph monitor', 'Watch MCP tool calls live'],\n ['kirograph cost --last 5', 'Cost breakdown for the last 5 sessions'],\n ['kirograph upgrade --dry-run', 'Preview available KiroGraph update'],\n ],\n },\n];\n\nfunction renderGroup(group: Group, highlightIdx: number, interactive = false): string[] {\n const lines: string[] = [];\n const nameWidth = Math.max(...group.commands.map(cmd => (cmd.name + (cmd.args ? ' ' + cmd.args : '')).length)) + 2;\n\n lines.push('');\n lines.push(` ${c.bold}${c.paleLavender}COMMANDS${c.reset} ${c.dim}\u2191\u2193 select \u00B7 enter to copy \u00B7 q quit${c.reset}`);\n lines.push('');\n\n for (let i = 0; i < group.commands.length; i++) {\n const cmd = group.commands[i]!;\n const signature = cmd.name + (cmd.args ? ' ' + cmd.args : '');\n const isHighlighted = i === highlightIdx;\n const prefix = isHighlighted ? `${c.green}${c.bold}\u276F${c.reset} ` : ' ';\n const namePart = isHighlighted\n ? `${c.bold}${c.lavender}${cmd.name}${c.reset}${cmd.args ? ' ' + c.bold + cmd.args + c.reset : ''}`\n : `${c.lavender}${cmd.name}${c.reset}${cmd.args ? ' ' + c.dim + cmd.args + c.reset : ''}`;\n const pad = ' '.repeat(Math.max(0, nameWidth - signature.length));\n lines.push(`${prefix}${namePart}${pad}${c.gray}${cmd.desc}${c.reset}`);\n // In interactive mode show only the highlighted command's opts\n if (cmd.opts && (!interactive || isHighlighted)) {\n for (const opt of cmd.opts) {\n const [flag, ...rest] = opt.split(/ +/);\n lines.push(` ${c.purple}${flag}${c.reset}${rest.length ? ' ' + c.dim + rest.join(' ') + c.reset : ''}`);\n }\n }\n }\n\n if (!interactive && group.examples.length > 0) {\n lines.push('');\n lines.push(` ${c.bold}${c.paleLavender}EXAMPLES${c.reset}`);\n lines.push('');\n for (const [ex, desc] of group.examples) {\n lines.push(` ${c.violet}$${c.reset} ${c.lavender}${ex}${c.reset}`);\n lines.push(` ${c.dim}${desc}${c.reset}`);\n }\n }\n\n return lines;\n}\n\n\nfunction renderTabs(selectedIdx: number): string {\n return GROUPS.map((g, i) => {\n if (i === selectedIdx) {\n return `${c.bold}${c.violet}${c.underline}${g.icon} ${g.title}${c.reset}`;\n }\n return `${c.dim}${g.icon} ${g.title}${c.reset}`;\n }).join(' ');\n}\n\n/**\n * Interactive tabbed help \u2014 left/right for tabs, up/down for commands, enter to copy.\n */\nexport function printInteractiveHelp(): void {\n let selectedTab = 0;\n let selectedCmd = 0;\n\n function render() {\n // Move to top-left and clear from cursor to end of screen\n process.stdout.write('\\x1b[H\\x1b[J');\n\n const lines: string[] = [];\n lines.push('');\n lines.push(` ${renderTabs(selectedTab)}`);\n lines.push(` ${c.dim}\u2190 \u2192 tabs \u00B7 \u2191 \u2193 commands \u00B7 enter to use \u00B7 q quit${c.reset}`);\n lines.push(...renderGroup(GROUPS[selectedTab]!, selectedCmd, true));\n\n process.stdout.write(lines.join('\\n') + '\\n');\n }\n\n // Enter alternate screen + hide cursor so rendering never scrolls or flickers\n process.stdout.write('\\x1b[?1049h\\x1b[?25l');\n\n printBanner();\n console.log(`\\n${c.bold}${c.paleLavender}USAGE${c.reset} ${c.lavender}kirograph${c.reset} ${c.gray}<command>${c.reset} ${c.dim}[options]${c.reset}`);\n\n render();\n\n // Enter raw mode for interactive navigation\n const stdin = process.stdin;\n if (!stdin.isTTY) {\n // Non-interactive: leave alternate screen and print all groups normally\n process.stdout.write('\\x1b[?25h\\x1b[?1049l');\n for (let i = 1; i < GROUPS.length; i++) {\n const lines = renderGroup(GROUPS[i]!, -1);\n for (const line of lines) console.log(line);\n }\n return;\n }\n\n stdin.setRawMode(true);\n stdin.resume();\n stdin.setEncoding('utf8');\n\n function cleanup() {\n stdin.removeListener('data', onData);\n stdin.setRawMode(false);\n stdin.pause();\n // Leave alternate screen and restore cursor\n process.stdout.write('\\x1b[?25h\\x1b[?1049l');\n }\n\n function onData(key: string) {\n // Arrow keys and other escape sequences start with \\x1b[\n if (key.startsWith('\\x1b[')) {\n if (key === '\\x1b[C') { // right arrow \u2014 next tab\n selectedTab = (selectedTab + 1) % GROUPS.length;\n selectedCmd = 0;\n render();\n } else if (key === '\\x1b[D') { // left arrow \u2014 prev tab\n selectedTab = (selectedTab - 1 + GROUPS.length) % GROUPS.length;\n selectedCmd = 0;\n render();\n } else if (key === '\\x1b[B') { // down arrow \u2014 next command\n const maxCmd = GROUPS[selectedTab]!.commands.length - 1;\n selectedCmd = Math.min(selectedCmd + 1, maxCmd);\n render();\n } else if (key === '\\x1b[A') { // up arrow \u2014 prev command\n selectedCmd = Math.max(selectedCmd - 1, 0);\n render();\n }\n // Ignore other escape sequences\n return;\n }\n\n if (key === '\\r' || key === '\\n') { // enter \u2014 copy command to terminal\n cleanup();\n const cmd = GROUPS[selectedTab]!.commands[selectedCmd]!;\n const fullCmd = `kirograph ${cmd.name}${cmd.args ? ' ' + cmd.args : ''}`;\n console.log(`\\n ${c.green}${c.bold}$${c.reset} ${fullCmd}\\n`);\n process.exit(0);\n } else if (key === 'q' || key === '\\x03') { // q, ctrl+c\n cleanup();\n console.log();\n process.exit(0);\n }\n }\n\n stdin.on('data', onData);\n}\n\n/**\n * Non-interactive full help (for piping, --help flag).\n */\nexport function printColoredHelp(): void {\n\n console.log(`\\n${c.bold}${c.paleLavender}USAGE${c.reset}`);\n console.log(` ${c.lavender}kirograph${c.reset} ${c.gray}<command>${c.reset} ${c.dim}[options]${c.reset}\\n`);\n\n for (const group of GROUPS) {\n console.log(`${c.bold}${c.paleLavender}${group.icon} ${group.title.toUpperCase()}${c.reset}\\n`);\n const nameWidth = Math.max(...group.commands.map(cmd => (cmd.name + (cmd.args ? ' ' + cmd.args : '')).length)) + 2;\n for (const cmd of group.commands) {\n const signature = cmd.name + (cmd.args ? ' ' + cmd.args : '');\n const namePart = `${c.lavender}${cmd.name}${c.reset}${cmd.args ? ' ' + c.dim + cmd.args + c.reset : ''}`;\n const pad = ' '.repeat(Math.max(0, nameWidth - signature.length));\n console.log(` ${namePart}${pad}${c.gray}${cmd.desc}${c.reset}`);\n if (cmd.opts) {\n for (const opt of cmd.opts) {\n const [flag, ...rest] = opt.split(/ +/);\n console.log(` ${c.purple}${flag}${c.reset}${rest.length ? ' ' + c.dim + rest.join(' ') + c.reset : ''}`);\n }\n }\n }\n console.log();\n }\n\n console.log(`${c.bold}${c.paleLavender}GLOBAL FLAGS${c.reset}\\n`);\n console.log(` ${c.purple}-h, --help${c.reset} ${c.gray}Show this help${c.reset}`);\n console.log(` ${c.purple}-V, --version${c.reset} ${c.gray}Show version number${c.reset}\\n`);\n\n\n console.log(`${c.bold}${c.paleLavender}EXAMPLES${c.reset}\\n`);\n\n const exampleGroups: Array<{ title: string; examples: [string, string][] }> = [\n {\n title: '\uD83D\uDD27 Setup & indexing',\n examples: [\n ['kirograph install', 'Wire up Kiro MCP + hooks + steering for the current workspace'],\n ['kirograph install --target claude', 'Wire up Claude Code MCP + project memory'],\n ['kirograph install --target codex', 'Install Codex project instructions and print MCP config'],\n ['kirograph init --index', 'Init and immediately index the project'],\n ['kirograph hook save', 'Save workspace hooks to ~/.kirograph/hooks/'],\n ['kirograph hook import', 'Import global hooks into .kiro/hooks/'],\n ['kirograph sync', 'Incremental sync of changed files'],\n ],\n },\n {\n title: '\uD83D\uDD0D Search & exploration',\n examples: [\n ['kirograph query useState', 'Find all symbols named useState'],\n ['kirograph context \"add dark mode\"', 'Get relevant code context for a task'],\n ['kirograph files --format grouped', 'Show files grouped by directory'],\n ['kirograph path LoginController DatabasePool', 'Find how two symbols are connected'],\n ['kirograph affected src/auth.ts', 'Find tests affected by a change'],\n ['git diff --name-only | kirograph affected --stdin', 'Affected tests from a git diff'],\n ['kirograph export start', 'Open the interactive graph dashboard in the browser'],\n ['kirograph export build -o /tmp/graph', 'Export the dashboard to a custom directory'],\n ],\n },\n {\n title: '\uD83D\uDCCA Graph insights',\n examples: [\n ['kirograph hotspots --limit 10', 'Top 10 most-connected symbols'],\n ['kirograph surprising', 'Find unexpected cross-module connections'],\n ['kirograph dead-code', 'Find unreferenced unexported symbols'],\n ['kirograph snapshot save pre-refactor', 'Save a named snapshot before a refactor'],\n ['kirograph snapshot diff pre-refactor', 'Diff current graph vs the named snapshot'],\n ],\n },\n {\n title: '\uD83C\uDFDB\uFE0F Architecture',\n examples: [\n ['kirograph architecture --packages', 'List all detected packages'],\n ['kirograph coupling --sort instability', 'Show packages ranked by instability'],\n ['kirograph package src/auth', 'Inspect the auth package'],\n ],\n },\n {\n title: '\uD83D\uDD12 Security',\n examples: [\n ['kirograph security', 'Overview: dep count, vuln count, verdict breakdown'],\n ['kirograph security --refresh-staleness', 'Overview including stale dependency count'],\n ['kirograph vulns', 'List all vulnerabilities'],\n ['kirograph vulns --stale', 'Show staleness score alongside each CVE'],\n ['kirograph vulns --verdict under_investigation', 'Vulnerabilities still being investigated'],\n ['kirograph vulns --severity critical --verdict affected', 'Critical confirmed vulnerabilities'],\n ['kirograph vulns --refresh', 'Re-query OSV then list'],\n ['kirograph staleness', 'Show packages with staleness_score >= 0.3'],\n ['kirograph staleness --refresh --threshold 0.5', 'Fetch latest versions and show very stale packages'],\n ['kirograph reachability CVE-2023-12345', 'Check reachability for a specific CVE'],\n ['kirograph reachability lodash', 'Check reachability for a dependency by package name'],\n ['kirograph licenses', 'Show all dependency licenses'],\n ['kirograph licenses --policy', 'Show only license policy violations'],\n ['kirograph licenses --deny \"GPL-*,AGPL-*\"', 'Block all GPL/AGPL licenses'],\n ['kirograph vex --output vex.json', 'Export CycloneDX VEX document'],\n ['kirograph sbom --output sbom.json', 'Export SPDX SBOM'],\n ['kirograph vuln suppress CVE-2024-1234 --reason \"not in code path\"', 'Suppress a false positive CVE'],\n ['kirograph vuln suppress CVE-2024-1234 --expires 2026-12-31', 'Suppress with expiry date'],\n ['kirograph vuln unsuppress CVE-2024-1234', 'Remove a suppression'],\n ['kirograph vuln suppressions', 'List all active suppressions'],\n ['kirograph pattern \"eval($X)\"', 'Find all eval() calls (requires enablePatterns: true)'],\n ['kirograph pattern --list', 'Show all bundled SAST pattern rules'],\n ['kirograph pattern --library dangerous-eval-js', 'Run a specific library rule'],\n ],\n },\n {\n title: '\u2699\uFE0F Agent',\n examples: [\n ['kirograph caveman full', 'Enable full caveman mode for the agent'],\n ['kirograph caveman off', 'Disable caveman mode'],\n ['kirograph compression aggressive', 'Set compression to aggressive level'],\n ['kirograph compression off', 'Disable compression hook (tool still available)'],\n ['kirograph exec git status', 'Run git status with compression'],\n ['kirograph exec --level ultra npm test', 'Run tests with ultra compression'],\n ['kirograph exec --raw cargo build', 'Show raw vs compressed comparison'],\n ['kirograph gain --graph', 'Show token savings graph'],\n ['kirograph mem search \"auth decision\"', 'Search memory for past decisions'],\n ['kirograph mem store \"use idempotency keys\" --kind decision', 'Store a decision'],\n ['kirograph data list', 'List all indexed datasets'],\n ['kirograph data describe tests-fixtures-users', 'Show schema and column profiles'],\n ['kirograph data query orders --filter status:eq:shipped --limit 10', 'Query rows with filters'],\n ['kirograph data aggregate orders --group-by region --metric sum:amount', 'Server-side aggregation'],\n ['kirograph serve --mcp', 'Start the MCP server'],\n ],\n },\n ];\n\n for (const eg of exampleGroups) {\n console.log(` ${c.dim}${eg.title}${c.reset}`);\n for (const [ex, desc] of eg.examples) {\n console.log(` ${c.violet}$${c.reset} ${c.lavender}${ex}${c.reset}`);\n console.log(` ${c.dim}${desc}${c.reset}`);\n }\n console.log();\n }\n}\n\nexport function register(program: Command): void {\n program.configureHelp({ formatHelp: () => '' });\n program.addHelpText('afterAll', '');\n // Disable Commander's built-in --help to prevent process.exit\n program.helpOption(false);\n}\n"],
5
+ "mappings": "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",
6
6
  "names": []
7
7
  }
@@ -97,7 +97,7 @@ function register(program) {
97
97
  cg.close();
98
98
  });
99
99
  mem.command("store [content]").description("Store an observation in memory").option("--kind <kind>", "Observation kind", "note").option("--topic-key <key>", "Stable semantic key (e.g. architecture/auth-model)").option("--review-after <ms>", "Epoch ms: schedule re-evaluation after this timestamp").action(async (content, opts) => {
100
- const { MemoryManager } = await Promise.resolve().then(() => require("../../memory/index.js"));
100
+ const { MemoryManager, MemorySchemaError } = await Promise.resolve().then(() => require("../../memory/index.js"));
101
101
  const { loadConfig } = await Promise.resolve().then(() => require("../../config.js"));
102
102
  const KiroGraph = (await Promise.resolve().then(() => require("../../index.js"))).default;
103
103
  const cwd = process.cwd();
@@ -127,13 +127,23 @@ function register(program) {
127
127
  db.applyMemorySchema();
128
128
  const mem2 = new MemoryManager(config, db.getRawDb());
129
129
  mem2.initialize();
130
- const result = await mem2.store({
131
- content: text,
132
- kind: opts.kind,
133
- source: "manual",
134
- topicKey: opts.topicKey,
135
- reviewAfter: opts.reviewAfter ? parseInt(opts.reviewAfter) : void 0
136
- });
130
+ let result;
131
+ try {
132
+ result = await mem2.store({
133
+ content: text,
134
+ kind: opts.kind,
135
+ source: "manual",
136
+ topicKey: opts.topicKey,
137
+ reviewAfter: opts.reviewAfter ? parseInt(opts.reviewAfter) : void 0
138
+ });
139
+ } catch (err) {
140
+ if (err instanceof MemorySchemaError) {
141
+ console.error(` \u2716 ${err.message}`);
142
+ cg.close();
143
+ process.exit(1);
144
+ }
145
+ throw err;
146
+ }
137
147
  if (!result) {
138
148
  console.log(` ${import_ui.dim}Duplicate observation \u2014 already stored.${import_ui.reset}`);
139
149
  } else if (typeof result === "object" && result.watchmenReady) {