spectra-cli 4.2.0 → 4.3.0

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 (365) hide show
  1. package/README.md +12 -5
  2. package/dist/.spectra-build-meta.json +9 -0
  3. package/dist/adapters/language-adapter.d.ts +7 -12
  4. package/dist/adapters/language-adapter.d.ts.map +1 -1
  5. package/dist/adapters/python-adapter.d.ts.map +1 -1
  6. package/dist/adapters/python-adapter.js +11 -2
  7. package/dist/adapters/python-adapter.js.map +1 -1
  8. package/dist/batch/batch-orchestrator.d.ts +44 -1
  9. package/dist/batch/batch-orchestrator.d.ts.map +1 -1
  10. package/dist/batch/batch-orchestrator.js +312 -76
  11. package/dist/batch/batch-orchestrator.js.map +1 -1
  12. package/dist/batch/delta-regenerator.d.ts.map +1 -1
  13. package/dist/batch/delta-regenerator.js +21 -28
  14. package/dist/batch/delta-regenerator.js.map +1 -1
  15. package/dist/batch/module-grouper.d.ts +7 -0
  16. package/dist/batch/module-grouper.d.ts.map +1 -1
  17. package/dist/batch/module-grouper.js +2 -0
  18. package/dist/batch/module-grouper.js.map +1 -1
  19. package/dist/batch/regen-plan.d.ts +78 -0
  20. package/dist/batch/regen-plan.d.ts.map +1 -0
  21. package/dist/batch/regen-plan.js +93 -0
  22. package/dist/batch/regen-plan.js.map +1 -0
  23. package/dist/cli/commands/batch.d.ts.map +1 -1
  24. package/dist/cli/commands/batch.js +36 -8
  25. package/dist/cli/commands/batch.js.map +1 -1
  26. package/dist/cli/commands/scaffold-kb.d.ts +9 -0
  27. package/dist/cli/commands/scaffold-kb.d.ts.map +1 -0
  28. package/dist/cli/commands/scaffold-kb.js +179 -0
  29. package/dist/cli/commands/scaffold-kb.js.map +1 -0
  30. package/dist/cli/index.js +24 -5
  31. package/dist/cli/index.js.map +1 -1
  32. package/dist/cli/utils/error-handler.d.ts +0 -6
  33. package/dist/cli/utils/error-handler.d.ts.map +1 -1
  34. package/dist/cli/utils/error-handler.js +0 -13
  35. package/dist/cli/utils/error-handler.js.map +1 -1
  36. package/dist/cli/utils/parse-args.d.ts +43 -3
  37. package/dist/cli/utils/parse-args.d.ts.map +1 -1
  38. package/dist/cli/utils/parse-args.js +98 -12
  39. package/dist/cli/utils/parse-args.js.map +1 -1
  40. package/dist/cli/version-meta.d.ts +16 -0
  41. package/dist/cli/version-meta.d.ts.map +1 -0
  42. package/dist/cli/version-meta.js +28 -0
  43. package/dist/cli/version-meta.js.map +1 -0
  44. package/dist/core/ast-analyzer.d.ts.map +1 -1
  45. package/dist/core/ast-analyzer.js +7 -11
  46. package/dist/core/ast-analyzer.js.map +1 -1
  47. package/dist/core/import-resolver.d.ts +70 -67
  48. package/dist/core/import-resolver.d.ts.map +1 -1
  49. package/dist/core/import-resolver.js +341 -200
  50. package/dist/core/import-resolver.js.map +1 -1
  51. package/dist/core/single-spec-orchestrator.d.ts +21 -0
  52. package/dist/core/single-spec-orchestrator.d.ts.map +1 -1
  53. package/dist/core/single-spec-orchestrator.js +41 -14
  54. package/dist/core/single-spec-orchestrator.js.map +1 -1
  55. package/dist/core/skeleton-hash.d.ts +33 -0
  56. package/dist/core/skeleton-hash.d.ts.map +1 -0
  57. package/dist/core/skeleton-hash.js +76 -0
  58. package/dist/core/skeleton-hash.js.map +1 -0
  59. package/dist/core/tree-sitter-analyzer.d.ts +3 -2
  60. package/dist/core/tree-sitter-analyzer.d.ts.map +1 -1
  61. package/dist/core/tree-sitter-analyzer.js +5 -6
  62. package/dist/core/tree-sitter-analyzer.js.map +1 -1
  63. package/dist/core/tree-sitter-fallback.d.ts +7 -2
  64. package/dist/core/tree-sitter-fallback.d.ts.map +1 -1
  65. package/dist/core/tree-sitter-fallback.js +18 -15
  66. package/dist/core/tree-sitter-fallback.js.map +1 -1
  67. package/dist/extraction/image-extractor.d.ts.map +1 -1
  68. package/dist/extraction/image-extractor.js +3 -1
  69. package/dist/extraction/image-extractor.js.map +1 -1
  70. package/dist/extraction/markdown-extractor.d.ts.map +1 -1
  71. package/dist/extraction/markdown-extractor.js +3 -1
  72. package/dist/extraction/markdown-extractor.js.map +1 -1
  73. package/dist/generator/frontmatter.d.ts +5 -0
  74. package/dist/generator/frontmatter.d.ts.map +1 -1
  75. package/dist/generator/frontmatter.js +4 -0
  76. package/dist/generator/frontmatter.js.map +1 -1
  77. package/dist/kb-mcp/index.d.ts +14 -0
  78. package/dist/kb-mcp/index.d.ts.map +1 -0
  79. package/dist/kb-mcp/index.js +24 -0
  80. package/dist/kb-mcp/index.js.map +1 -0
  81. package/dist/kb-mcp/lib/kb-error.d.ts +21 -0
  82. package/dist/kb-mcp/lib/kb-error.d.ts.map +1 -0
  83. package/dist/kb-mcp/lib/kb-error.js +28 -0
  84. package/dist/kb-mcp/lib/kb-error.js.map +1 -0
  85. package/dist/kb-mcp/lib/kb-locator.d.ts +58 -0
  86. package/dist/kb-mcp/lib/kb-locator.d.ts.map +1 -0
  87. package/dist/kb-mcp/lib/kb-locator.js +85 -0
  88. package/dist/kb-mcp/lib/kb-locator.js.map +1 -0
  89. package/dist/kb-mcp/lib/result-merger.d.ts +35 -0
  90. package/dist/kb-mcp/lib/result-merger.d.ts.map +1 -0
  91. package/dist/kb-mcp/lib/result-merger.js +64 -0
  92. package/dist/kb-mcp/lib/result-merger.js.map +1 -0
  93. package/dist/kb-mcp/server.d.ts +12 -0
  94. package/dist/kb-mcp/server.d.ts.map +1 -0
  95. package/dist/kb-mcp/server.js +29 -0
  96. package/dist/kb-mcp/server.js.map +1 -0
  97. package/dist/kb-mcp/tools/kb-api-lookup.d.ts +28 -0
  98. package/dist/kb-mcp/tools/kb-api-lookup.d.ts.map +1 -0
  99. package/dist/kb-mcp/tools/kb-api-lookup.js +237 -0
  100. package/dist/kb-mcp/tools/kb-api-lookup.js.map +1 -0
  101. package/dist/kb-mcp/tools/kb-doc-lookup.d.ts +20 -0
  102. package/dist/kb-mcp/tools/kb-doc-lookup.d.ts.map +1 -0
  103. package/dist/kb-mcp/tools/kb-doc-lookup.js +92 -0
  104. package/dist/kb-mcp/tools/kb-doc-lookup.js.map +1 -0
  105. package/dist/kb-mcp/tools/kb-search.d.ts +23 -0
  106. package/dist/kb-mcp/tools/kb-search.d.ts.map +1 -0
  107. package/dist/kb-mcp/tools/kb-search.js +126 -0
  108. package/dist/kb-mcp/tools/kb-search.js.map +1 -0
  109. package/dist/knowledge-graph/import-resolver.d.ts +11 -86
  110. package/dist/knowledge-graph/import-resolver.d.ts.map +1 -1
  111. package/dist/knowledge-graph/import-resolver.js +10 -333
  112. package/dist/knowledge-graph/import-resolver.js.map +1 -1
  113. package/dist/knowledge-graph/incremental.d.ts +25 -4
  114. package/dist/knowledge-graph/incremental.d.ts.map +1 -1
  115. package/dist/knowledge-graph/incremental.js +37 -15
  116. package/dist/knowledge-graph/incremental.js.map +1 -1
  117. package/dist/knowledge-graph/index.d.ts +11 -0
  118. package/dist/knowledge-graph/index.d.ts.map +1 -1
  119. package/dist/knowledge-graph/index.js +43 -1
  120. package/dist/knowledge-graph/index.js.map +1 -1
  121. package/dist/knowledge-graph/module-derivation.d.ts +14 -0
  122. package/dist/knowledge-graph/module-derivation.d.ts.map +1 -1
  123. package/dist/knowledge-graph/module-derivation.js +44 -44
  124. package/dist/knowledge-graph/module-derivation.js.map +1 -1
  125. package/dist/knowledge-graph/persistence.d.ts +56 -16
  126. package/dist/knowledge-graph/persistence.d.ts.map +1 -1
  127. package/dist/knowledge-graph/persistence.js +86 -32
  128. package/dist/knowledge-graph/persistence.js.map +1 -1
  129. package/dist/knowledge-graph/query-helpers.d.ts +39 -12
  130. package/dist/knowledge-graph/query-helpers.d.ts.map +1 -1
  131. package/dist/knowledge-graph/query-helpers.js +199 -34
  132. package/dist/knowledge-graph/query-helpers.js.map +1 -1
  133. package/dist/knowledge-graph/relativize.d.ts +51 -0
  134. package/dist/knowledge-graph/relativize.d.ts.map +1 -0
  135. package/dist/knowledge-graph/relativize.js +104 -0
  136. package/dist/knowledge-graph/relativize.js.map +1 -0
  137. package/dist/mcp/agent-context-tools.d.ts +3 -54
  138. package/dist/mcp/agent-context-tools.d.ts.map +1 -1
  139. package/dist/mcp/agent-context-tools.js +141 -189
  140. package/dist/mcp/agent-context-tools.js.map +1 -1
  141. package/dist/mcp/file-nav-tools.d.ts +42 -0
  142. package/dist/mcp/file-nav-tools.d.ts.map +1 -0
  143. package/dist/mcp/file-nav-tools.js +318 -0
  144. package/dist/mcp/file-nav-tools.js.map +1 -0
  145. package/dist/mcp/graph-tools.d.ts +2 -0
  146. package/dist/mcp/graph-tools.d.ts.map +1 -1
  147. package/dist/mcp/graph-tools.js +134 -123
  148. package/dist/mcp/graph-tools.js.map +1 -1
  149. package/dist/mcp/lib/file-nav-helpers.d.ts +128 -0
  150. package/dist/mcp/lib/file-nav-helpers.d.ts.map +1 -0
  151. package/dist/mcp/lib/file-nav-helpers.js +305 -0
  152. package/dist/mcp/lib/file-nav-helpers.js.map +1 -0
  153. package/dist/mcp/lib/telemetry.d.ts +69 -0
  154. package/dist/mcp/lib/telemetry.d.ts.map +1 -0
  155. package/dist/mcp/lib/telemetry.js +113 -0
  156. package/dist/mcp/lib/telemetry.js.map +1 -0
  157. package/dist/mcp/lib/tool-response.d.ts +46 -0
  158. package/dist/mcp/lib/tool-response.d.ts.map +1 -0
  159. package/dist/mcp/lib/tool-response.js +83 -0
  160. package/dist/mcp/lib/tool-response.js.map +1 -0
  161. package/dist/mcp/server.d.ts +13 -2
  162. package/dist/mcp/server.d.ts.map +1 -1
  163. package/dist/mcp/server.js +209 -150
  164. package/dist/mcp/server.js.map +1 -1
  165. package/dist/models/code-skeleton.d.ts +4 -2
  166. package/dist/models/code-skeleton.d.ts.map +1 -1
  167. package/dist/models/code-skeleton.js +2 -1
  168. package/dist/models/code-skeleton.js.map +1 -1
  169. package/dist/models/module-spec.d.ts +18 -0
  170. package/dist/models/module-spec.d.ts.map +1 -1
  171. package/dist/models/module-spec.js +6 -0
  172. package/dist/models/module-spec.js.map +1 -1
  173. package/dist/panoramic/builders/doc-graph-builder.d.ts +13 -0
  174. package/dist/panoramic/builders/doc-graph-builder.d.ts.map +1 -1
  175. package/dist/panoramic/builders/doc-graph-builder.js +20 -0
  176. package/dist/panoramic/builders/doc-graph-builder.js.map +1 -1
  177. package/dist/panoramic/graph/graph-builder.d.ts +72 -2
  178. package/dist/panoramic/graph/graph-builder.d.ts.map +1 -1
  179. package/dist/panoramic/graph/graph-builder.js +257 -51
  180. package/dist/panoramic/graph/graph-builder.js.map +1 -1
  181. package/dist/panoramic/graph/graph-query.d.ts +16 -0
  182. package/dist/panoramic/graph/graph-query.d.ts.map +1 -1
  183. package/dist/panoramic/graph/graph-query.js +49 -1
  184. package/dist/panoramic/graph/graph-query.js.map +1 -1
  185. package/dist/panoramic/graph/index.d.ts +2 -1
  186. package/dist/panoramic/graph/index.d.ts.map +1 -1
  187. package/dist/panoramic/graph/index.js +1 -1
  188. package/dist/panoramic/graph/index.js.map +1 -1
  189. package/dist/panoramic/pipelines/adr-evidence-verifier.d.ts.map +1 -1
  190. package/dist/panoramic/pipelines/adr-evidence-verifier.js +1 -29
  191. package/dist/panoramic/pipelines/adr-evidence-verifier.js.map +1 -1
  192. package/dist/panoramic/query.d.ts +1 -0
  193. package/dist/panoramic/query.d.ts.map +1 -1
  194. package/dist/panoramic/query.js +5 -0
  195. package/dist/panoramic/query.js.map +1 -1
  196. package/dist/scaffold-kb/api-entities-serializer.d.ts +12 -0
  197. package/dist/scaffold-kb/api-entities-serializer.d.ts.map +1 -0
  198. package/dist/scaffold-kb/api-entities-serializer.js +144 -0
  199. package/dist/scaffold-kb/api-entities-serializer.js.map +1 -0
  200. package/dist/scaffold-kb/arbitration.d.ts +44 -0
  201. package/dist/scaffold-kb/arbitration.d.ts.map +1 -0
  202. package/dist/scaffold-kb/arbitration.js +144 -0
  203. package/dist/scaffold-kb/arbitration.js.map +1 -0
  204. package/dist/scaffold-kb/chunk-splitter.d.ts +20 -0
  205. package/dist/scaffold-kb/chunk-splitter.d.ts.map +1 -0
  206. package/dist/scaffold-kb/chunk-splitter.js +309 -0
  207. package/dist/scaffold-kb/chunk-splitter.js.map +1 -0
  208. package/dist/scaffold-kb/doc-graph-builder.d.ts +26 -0
  209. package/dist/scaffold-kb/doc-graph-builder.d.ts.map +1 -0
  210. package/dist/scaffold-kb/doc-graph-builder.js +72 -0
  211. package/dist/scaffold-kb/doc-graph-builder.js.map +1 -0
  212. package/dist/scaffold-kb/entity-extractor.d.ts +40 -0
  213. package/dist/scaffold-kb/entity-extractor.d.ts.map +1 -0
  214. package/dist/scaffold-kb/entity-extractor.js +0 -0
  215. package/dist/scaffold-kb/entity-extractor.js.map +1 -0
  216. package/dist/scaffold-kb/entity-heuristic.d.ts +14 -0
  217. package/dist/scaffold-kb/entity-heuristic.d.ts.map +1 -0
  218. package/dist/scaffold-kb/entity-heuristic.js +107 -0
  219. package/dist/scaffold-kb/entity-heuristic.js.map +1 -0
  220. package/dist/scaffold-kb/entity-matcher.d.ts +20 -0
  221. package/dist/scaffold-kb/entity-matcher.d.ts.map +1 -0
  222. package/dist/scaffold-kb/entity-matcher.js +53 -0
  223. package/dist/scaffold-kb/entity-matcher.js.map +1 -0
  224. package/dist/scaffold-kb/entity-util.d.ts +11 -0
  225. package/dist/scaffold-kb/entity-util.d.ts.map +1 -0
  226. package/dist/scaffold-kb/entity-util.js +23 -0
  227. package/dist/scaffold-kb/entity-util.js.map +1 -0
  228. package/dist/scaffold-kb/evidence-envelope.d.ts +17 -0
  229. package/dist/scaffold-kb/evidence-envelope.d.ts.map +1 -0
  230. package/dist/scaffold-kb/evidence-envelope.js +32 -0
  231. package/dist/scaffold-kb/evidence-envelope.js.map +1 -0
  232. package/dist/scaffold-kb/index.d.ts +20 -0
  233. package/dist/scaffold-kb/index.d.ts.map +1 -0
  234. package/dist/scaffold-kb/index.js +102 -0
  235. package/dist/scaffold-kb/index.js.map +1 -0
  236. package/dist/scaffold-kb/ingest/ingest-core.d.ts +47 -0
  237. package/dist/scaffold-kb/ingest/ingest-core.d.ts.map +1 -0
  238. package/dist/scaffold-kb/ingest/ingest-core.js +231 -0
  239. package/dist/scaffold-kb/ingest/ingest-core.js.map +1 -0
  240. package/dist/scaffold-kb/ingest/office-parser.d.ts +33 -0
  241. package/dist/scaffold-kb/ingest/office-parser.d.ts.map +1 -0
  242. package/dist/scaffold-kb/ingest/office-parser.js +187 -0
  243. package/dist/scaffold-kb/ingest/office-parser.js.map +1 -0
  244. package/dist/scaffold-kb/ingest/url-fetcher.d.ts +43 -0
  245. package/dist/scaffold-kb/ingest/url-fetcher.d.ts.map +1 -0
  246. package/dist/scaffold-kb/ingest/url-fetcher.js +245 -0
  247. package/dist/scaffold-kb/ingest/url-fetcher.js.map +1 -0
  248. package/dist/scaffold-kb/ingester.d.ts +38 -0
  249. package/dist/scaffold-kb/ingester.d.ts.map +1 -0
  250. package/dist/scaffold-kb/ingester.js +261 -0
  251. package/dist/scaffold-kb/ingester.js.map +1 -0
  252. package/dist/scaffold-kb/injection-format.d.ts +25 -0
  253. package/dist/scaffold-kb/injection-format.d.ts.map +1 -0
  254. package/dist/scaffold-kb/injection-format.js +55 -0
  255. package/dist/scaffold-kb/injection-format.js.map +1 -0
  256. package/dist/scaffold-kb/kb-writer.d.ts +13 -0
  257. package/dist/scaffold-kb/kb-writer.d.ts.map +1 -0
  258. package/dist/scaffold-kb/kb-writer.js +69 -0
  259. package/dist/scaffold-kb/kb-writer.js.map +1 -0
  260. package/dist/scaffold-kb/keyword-extract.d.ts +16 -0
  261. package/dist/scaffold-kb/keyword-extract.d.ts.map +1 -0
  262. package/dist/scaffold-kb/keyword-extract.js +49 -0
  263. package/dist/scaffold-kb/keyword-extract.js.map +1 -0
  264. package/dist/scaffold-kb/query-sanitizer.d.ts +28 -0
  265. package/dist/scaffold-kb/query-sanitizer.d.ts.map +1 -0
  266. package/dist/scaffold-kb/query-sanitizer.js +38 -0
  267. package/dist/scaffold-kb/query-sanitizer.js.map +1 -0
  268. package/dist/scaffold-kb/recall-eval.d.ts +48 -0
  269. package/dist/scaffold-kb/recall-eval.d.ts.map +1 -0
  270. package/dist/scaffold-kb/recall-eval.js +55 -0
  271. package/dist/scaffold-kb/recall-eval.js.map +1 -0
  272. package/dist/scaffold-kb/schema-compat.d.ts +22 -0
  273. package/dist/scaffold-kb/schema-compat.d.ts.map +1 -0
  274. package/dist/scaffold-kb/schema-compat.js +32 -0
  275. package/dist/scaffold-kb/schema-compat.js.map +1 -0
  276. package/dist/scaffold-kb/search-core.d.ts +42 -0
  277. package/dist/scaffold-kb/search-core.d.ts.map +1 -0
  278. package/dist/scaffold-kb/search-core.js +89 -0
  279. package/dist/scaffold-kb/search-core.js.map +1 -0
  280. package/dist/scaffold-kb/sqlite-engine.d.ts +58 -0
  281. package/dist/scaffold-kb/sqlite-engine.d.ts.map +1 -0
  282. package/dist/scaffold-kb/sqlite-engine.js +61 -0
  283. package/dist/scaffold-kb/sqlite-engine.js.map +1 -0
  284. package/dist/scaffold-kb/sqlite-writer.d.ts +18 -0
  285. package/dist/scaffold-kb/sqlite-writer.d.ts.map +1 -0
  286. package/dist/scaffold-kb/sqlite-writer.js +76 -0
  287. package/dist/scaffold-kb/sqlite-writer.js.map +1 -0
  288. package/dist/scaffold-kb/tokenizer.d.ts +26 -0
  289. package/dist/scaffold-kb/tokenizer.d.ts.map +1 -0
  290. package/dist/scaffold-kb/tokenizer.js +97 -0
  291. package/dist/scaffold-kb/tokenizer.js.map +1 -0
  292. package/dist/scaffold-kb/types.d.ts +157 -0
  293. package/dist/scaffold-kb/types.d.ts.map +1 -0
  294. package/dist/scaffold-kb/types.js +5 -0
  295. package/dist/scaffold-kb/types.js.map +1 -0
  296. package/dist/utils/file-scanner.d.ts +15 -0
  297. package/dist/utils/file-scanner.d.ts.map +1 -1
  298. package/dist/utils/file-scanner.js +17 -0
  299. package/dist/utils/file-scanner.js.map +1 -1
  300. package/dist/utils/string-distance.d.ts +20 -0
  301. package/dist/utils/string-distance.d.ts.map +1 -0
  302. package/dist/utils/string-distance.js +38 -0
  303. package/dist/utils/string-distance.js.map +1 -0
  304. package/package.json +11 -2
  305. package/plugins/demo-kb-en/.claude-plugin/plugin.json +11 -0
  306. package/plugins/demo-kb-en/.mcp.json +8 -0
  307. package/plugins/demo-kb-en/FIXTURE.json +23 -0
  308. package/plugins/demo-kb-en/FIXTURE.md +53 -0
  309. package/plugins/demo-kb-en/ingest-samples/meeting-notes.md +13 -0
  310. package/plugins/demo-kb-en/kb/api-entities.json +3445 -0
  311. package/plugins/demo-kb-en/kb/chunks.sqlite +0 -0
  312. package/plugins/demo-kb-en/kb/doc-graph.json +113 -0
  313. package/plugins/demo-kb-zh/.claude-plugin/plugin.json +11 -0
  314. package/plugins/demo-kb-zh/.mcp.json +8 -0
  315. package/plugins/demo-kb-zh/FIXTURE.json +23 -0
  316. package/plugins/demo-kb-zh/FIXTURE.md +63 -0
  317. package/plugins/demo-kb-zh/ingest-samples/meeting-notes.md +13 -0
  318. package/plugins/demo-kb-zh/kb/api-entities.json +990 -0
  319. package/plugins/demo-kb-zh/kb/chunks.sqlite +0 -0
  320. package/plugins/demo-kb-zh/kb/doc-graph.json +113 -0
  321. package/plugins/spec-driver/.claude-plugin/plugin.json +1 -1
  322. package/plugins/spec-driver/README.md +33 -1
  323. package/plugins/spec-driver/agents/verify.md +88 -0
  324. package/plugins/spec-driver/config/orchestration.yaml +39 -31
  325. package/plugins/spec-driver/contracts/orchestration-overrides-contract.yaml +27 -0
  326. package/plugins/spec-driver/contracts/orchestration-schema.mjs +272 -227
  327. package/plugins/spec-driver/contracts/wrapper-source-of-truth.yaml +3 -0
  328. package/plugins/spec-driver/hooks/hooks.json +9 -0
  329. package/plugins/spec-driver/hooks/stop-fix-compliance-check.sh +36 -0
  330. package/plugins/spec-driver/lib/delegation-contract.mjs +84 -0
  331. package/plugins/spec-driver/lib/orchestration-resolver.mjs +49 -0
  332. package/plugins/spec-driver/lib/orchestrator.mjs +29 -1
  333. package/plugins/spec-driver/scripts/codex-skills.sh +28 -28
  334. package/plugins/spec-driver/scripts/dev/spike-fix-compliance-e2e.mjs +130 -0
  335. package/plugins/spec-driver/scripts/fix-compliance-judge.mjs +415 -0
  336. package/plugins/spec-driver/scripts/generate-adoption-insights.mjs +48 -1
  337. package/plugins/spec-driver/scripts/goal-loop-cli.mjs +307 -0
  338. package/plugins/spec-driver/scripts/init-project.sh +56 -0
  339. package/plugins/spec-driver/scripts/kb-prequery.mjs +125 -0
  340. package/plugins/spec-driver/scripts/lib/config-schema.mjs +200 -94
  341. package/plugins/spec-driver/scripts/lib/ensure-gitignore.sh +277 -0
  342. package/plugins/spec-driver/scripts/lib/extract-wrapper-body.mjs +136 -0
  343. package/plugins/spec-driver/scripts/lib/fix-compliance-core.mjs +434 -0
  344. package/plugins/spec-driver/scripts/lib/fix-compliance-io.mjs +335 -0
  345. package/plugins/spec-driver/scripts/lib/goal-loop-core.mjs +783 -0
  346. package/plugins/spec-driver/scripts/lib/init-project-output.sh +28 -0
  347. package/plugins/spec-driver/scripts/lib/load-zod.mjs +62 -0
  348. package/plugins/spec-driver/scripts/lib/project-profile-resolver.mjs +141 -49
  349. package/plugins/spec-driver/scripts/lib/project-profile-schema.mjs +88 -54
  350. package/plugins/spec-driver/scripts/postinstall.sh +13 -1
  351. package/plugins/spec-driver/scripts/record-workflow-run.mjs +75 -0
  352. package/plugins/spec-driver/scripts/sync-delegation-contract.mjs +187 -0
  353. package/plugins/spec-driver/scripts/validate-orchestrator-models.mjs +156 -0
  354. package/plugins/spec-driver/scripts/validate-wrapper-sources.mjs +46 -1
  355. package/plugins/spec-driver/skills/spec-driver-feature/SKILL.md +292 -0
  356. package/plugins/spec-driver/skills/spec-driver-fix/SKILL.md +87 -8
  357. package/plugins/spec-driver/skills/spec-driver-implement/SKILL.md +8 -0
  358. package/plugins/spec-driver/skills/spec-driver-resume/SKILL.md +12 -1
  359. package/plugins/spec-driver/skills/spec-driver-story/SKILL.md +20 -0
  360. package/plugins/spec-driver/templates/delegation-contract.md +27 -0
  361. package/plugins/spec-driver/templates/goal-loop-override-template.yaml +284 -0
  362. package/plugins/spec-driver/templates/specify-base/project-context-template.yaml +10 -0
  363. package/plugins/spectra/.claude-plugin/plugin.json +1 -1
  364. package/plugins/spectra/README.md +1 -1
  365. package/templates/module-spec.hbs +1 -0
@@ -8,6 +8,8 @@ import { resolve } from 'node:path';
8
8
  import { z } from 'zod';
9
9
  import { GraphQueryEngine } from '../panoramic/graph/graph-query.js';
10
10
  import { resolveGraphJsonPath } from '../panoramic/graph/graph-paths.js';
11
+ import { buildErrorResponse } from './lib/tool-response.js';
12
+ import { withTelemetry } from './lib/telemetry.js';
11
13
  /** 按 projectRoot 缓存 GraphQueryEngine 实例 + graph.json stat 元数据 */
12
14
  const engineCache = new Map();
13
15
  /**
@@ -90,32 +92,58 @@ export function getCachedGraphData(projectRoot) {
90
92
  sizeBytes: stat.size,
91
93
  };
92
94
  }
93
- catch {
95
+ catch (err) {
96
+ // Feature 193 FR-006:graph-format-stale 必须显式上抛,不得静默退化为 null
97
+ // (否则 impact/context/detect_changes 把"旧绝对格式图"误报成"缺图 graph-not-built",
98
+ // agent 无法区分应重建 vs 应首次构建)。其余加载失败仍按既有契约返回 null。
99
+ if (err instanceof Error && err.message.includes('graph-format-stale')) {
100
+ throw err;
101
+ }
94
102
  return null;
95
103
  }
96
104
  }
105
+ /** 判定一个 caught error 是否为加载期 graph-format-stale 信号(Feature 193 FR-006) */
106
+ export function isGraphFormatStaleError(err) {
107
+ return err instanceof Error && err.message.includes('graph-format-stale');
108
+ }
97
109
  // ──────────────────────────────────────────────────────────
98
- // 统一错误响应构建器
110
+ // Feature 177 — 统一错误契约骨架(拆 engine 加载边界)
111
+ //
112
+ // 删除原本地 buildErrorResponse(返回旧 {error,hint} 契约),改用
113
+ // lib/tool-response.ts 的统一 {code,message,hint?} 契约。
99
114
  // ──────────────────────────────────────────────────────────
100
115
  /**
101
- * 构建 MCP 错误响应
102
- * @param err - 错误对象或消息字符串
103
- * @param hint - 附加提示(可选)
116
+ * 6 graph 工具共享的执行骨架,拆分两类错误边界(spec AD-3 / Codex CRITICAL-1):
117
+ * - getEngine 失败(缺图 statSync ENOENT / 坏图 loadFromFile 解析失败)→ graph-not-built
118
+ * - 加载成功后的查询期异常 graph-query-failed
119
+ *
120
+ * 不靠 error message 内容猜分类(不稳定且可能泄露路径)。查询方法(query/getNode/
121
+ * findPath/getCommunity/getGodNodes/getHyperedges)操作纯内存 rawGraph:getCommunity
122
+ * 唯一的文件 IO(读 GRAPH_REPORT.md)已在 engine 内部 try/catch graceful 降级,不外抛,
123
+ * 故查询期 err.message 不含路径,保留以利诊断(与删除前的本地实现行为一致)。
124
+ *
125
+ * success 路径由 query 回调直接构造 envelope(保持原 JSON.stringify 形态,byte 兼容 AC-5)。
104
126
  */
105
- function buildErrorResponse(err, hint) {
106
- const errorMessage = err instanceof Error ? err.message : String(err);
107
- return {
108
- content: [
109
- {
110
- type: 'text',
111
- text: JSON.stringify({
112
- error: errorMessage,
113
- hint: hint ?? '运行 `spectra graph` 先生成图谱',
114
- }),
115
- },
116
- ],
117
- isError: true,
118
- };
127
+ function runGraphTool(projectRoot, query) {
128
+ let engine;
129
+ try {
130
+ engine = getEngine(projectRoot);
131
+ }
132
+ catch (err) {
133
+ // Feature 193 FR-006:旧绝对格式图(copy 自其他 worktree)必须给明确 stale 信号,
134
+ // 不得静默退化为通用 graph-not-built(否则 agent 不知道是格式问题还是缺图)。
135
+ const msg = err instanceof Error ? err.message : String(err);
136
+ if (msg.includes('graph-format-stale')) {
137
+ return buildErrorResponse('graph-format-stale', msg, '当前 worktree 的图为旧绝对路径格式(可能 copy 自主仓/其他 worktree)。优先运行 `spectra batch --mode graph-only`(纯 AST · 零 LLM · <2min)在当前 worktree 重建图;或 `spectra batch` 重建完整图。');
138
+ }
139
+ return buildErrorResponse('graph-not-built', '图谱未构建或加载失败', '优先运行 `spectra batch --mode graph-only` 快速建图(纯 AST · 零 LLM · 无需认证 · <2min);需要完整 spec 关系图再跑 `spectra batch`');
140
+ }
141
+ try {
142
+ return query(engine);
143
+ }
144
+ catch (err) {
145
+ return buildErrorResponse('graph-query-failed', err instanceof Error ? err.message : String(err));
146
+ }
119
147
  }
120
148
  // ──────────────────────────────────────────────────────────
121
149
  // 工具注册主函数
@@ -126,7 +154,14 @@ function buildErrorResponse(err, hint) {
126
154
  */
127
155
  export function registerGraphTools(server) {
128
156
  // ─── 工具 1: graph_query — 关键词子图查询 ───
129
- server.tool('graph_query', '查询知识图谱中与问题相关的模块和依赖关系子图。适用于探索代码库结构、查找相关模块时调用。', {
157
+ server.tool('graph_query', `查询知识图谱中与问题相关的模块和依赖关系子图,探索代码库结构、查找相关模块。
158
+
159
+ Use when:
160
+ - 不清楚结构、想按关键词找相关模块子图
161
+ - 需要某主题(如"认证")的依赖关系概览
162
+
163
+ Typical chained usage:
164
+ - batch → graph_query → graph_node(子图定位后看单节点详情)`, {
130
165
  question: z.string().describe('自然语言查询词,例如"认证模块"、"数据库连接"'),
131
166
  budget: z
132
167
  .number()
@@ -144,20 +179,21 @@ export function registerGraphTools(server) {
144
179
  .string()
145
180
  .optional()
146
181
  .describe('目标项目根目录绝对路径(默认使用当前工作目录)'),
147
- }, async ({ question, budget, mode, depth, projectRoot }) => {
148
- try {
149
- const engine = getEngine(projectRoot);
150
- const result = engine.query(question, { budget, mode, depth });
151
- return {
152
- content: [{ type: 'text', text: JSON.stringify(result) }],
153
- };
154
- }
155
- catch (err) {
156
- return buildErrorResponse(err);
157
- }
158
- });
182
+ }, withTelemetry('graph_query', (args) => {
183
+ const { question, budget, mode, depth, projectRoot } = args;
184
+ return runGraphTool(projectRoot, (engine) => ({
185
+ content: [{ type: 'text', text: JSON.stringify(engine.query(question, { budget, mode, depth })) }],
186
+ }));
187
+ }));
159
188
  // ─── 工具 2: graph_node — 单节点详情查询 ───
160
- server.tool('graph_node', '精确查找节点详情和邻居,适用于已知节点 ID 或名称关键词的场景。id 参数优先于 keyword。返回结果包含关联的语义边(references / conceptually_related_to / rationale_for)列表。', {
189
+ server.tool('graph_node', `精确查找节点详情和邻居,适用于已知节点 ID 或名称关键词的场景。id 优先于 keyword,返回含语义边(references / conceptually_related_to / rationale_for)列表。
190
+
191
+ Use when:
192
+ - 已知 symbol id 或 label 关键词,要看其邻居与语义边
193
+ - graph_query 命中后深入单节点
194
+
195
+ Typical chained usage:
196
+ - graph_query → graph_node → graph_path(节点详情后查调用路径)`, {
161
197
  id: z
162
198
  .string()
163
199
  .optional()
@@ -174,47 +210,47 @@ export function registerGraphTools(server) {
174
210
  .string()
175
211
  .optional()
176
212
  .describe('目标项目根目录绝对路径(默认使用当前工作目录)'),
177
- }, async ({ id, keyword, budget, projectRoot }) => {
178
- try {
179
- const engine = getEngine(projectRoot);
213
+ }, withTelemetry('graph_node', (args) => {
214
+ const { id, keyword, budget, projectRoot } = args;
215
+ return runGraphTool(projectRoot, (engine) => {
180
216
  const result = engine.getNode({ id, keyword, budget });
181
217
  // 追加语义边列表(schema v2.0 新字段,向后兼容现有字段)
182
218
  const semanticEdges = engine.getSemanticEdges(result.node?.id);
183
219
  return {
184
- content: [
185
- {
186
- type: 'text',
187
- text: JSON.stringify({ ...result, semanticEdges }),
188
- },
189
- ],
220
+ content: [{ type: 'text', text: JSON.stringify({ ...result, semanticEdges }) }],
190
221
  };
191
- }
192
- catch (err) {
193
- return buildErrorResponse(err);
194
- }
195
- });
222
+ });
223
+ }));
196
224
  // ─── 工具 3: graph_path — 最短路径查询 ───
197
- server.tool('graph_path', '查找两个节点间的最短调用路径,适用于理解模块依赖链、追踪调用关系。', {
225
+ server.tool('graph_path', `查找两个节点间的最短调用路径,适用于理解模块依赖链、追踪调用关系。
226
+
227
+ Use when:
228
+ - 想知道 A 如何调用到 B
229
+ - 追踪跨模块依赖链路
230
+
231
+ Typical chained usage:
232
+ - graph_node → graph_path(确定两端节点后查路径)`, {
198
233
  source: z.string().describe('源节点 ID(路径起点)'),
199
234
  target: z.string().describe('目标节点 ID(路径终点)'),
200
235
  projectRoot: z
201
236
  .string()
202
237
  .optional()
203
238
  .describe('目标项目根目录绝对路径(默认使用当前工作目录)'),
204
- }, async ({ source, target, projectRoot }) => {
205
- try {
206
- const engine = getEngine(projectRoot);
207
- const result = engine.findPath(source, target);
208
- return {
209
- content: [{ type: 'text', text: JSON.stringify(result) }],
210
- };
211
- }
212
- catch (err) {
213
- return buildErrorResponse(err);
214
- }
215
- });
239
+ }, withTelemetry('graph_path', (args) => {
240
+ const { source, target, projectRoot } = args;
241
+ return runGraphTool(projectRoot, (engine) => ({
242
+ content: [{ type: 'text', text: JSON.stringify(engine.findPath(source, target)) }],
243
+ }));
244
+ }));
216
245
  // ─── 工具 4: graph_community — 社区节点查询 ───
217
- server.tool('graph_community', '获取指定社区的节点列表,用于识别代码聚类和模块边界。需要先运行 spectra graph 生成含社区信息的图谱。', {
246
+ server.tool('graph_community', `获取指定社区的节点列表,用于识别代码聚类和模块边界。需先运行 spectra graph 生成含社区信息的图谱。
247
+
248
+ Use when:
249
+ - 想识别代码的自然聚类 / 模块边界
250
+ - 分析高内聚低耦合结构
251
+
252
+ Typical chained usage:
253
+ - batch → graph_community → graph_node(聚类后看具体节点)`, {
218
254
  communityId: z.string().describe('社区 ID(来自 graph.json 中节点的 metadata.community 字段)'),
219
255
  budget: z
220
256
  .number()
@@ -224,20 +260,21 @@ export function registerGraphTools(server) {
224
260
  .string()
225
261
  .optional()
226
262
  .describe('目标项目根目录绝对路径(默认使用当前工作目录)'),
227
- }, async ({ communityId, budget, projectRoot }) => {
228
- try {
229
- const engine = getEngine(projectRoot);
230
- const result = engine.getCommunity(communityId, budget);
231
- return {
232
- content: [{ type: 'text', text: JSON.stringify(result) }],
233
- };
234
- }
235
- catch (err) {
236
- return buildErrorResponse(err);
237
- }
238
- });
263
+ }, withTelemetry('graph_community', (args) => {
264
+ const { communityId, budget, projectRoot } = args;
265
+ return runGraphTool(projectRoot, (engine) => ({
266
+ content: [{ type: 'text', text: JSON.stringify(engine.getCommunity(communityId, budget)) }],
267
+ }));
268
+ }));
239
269
  // ─── 工具 6: graph_hyperedges — 超边查询 ───
240
- server.tool('graph_hyperedges', '查询知识图谱中的超边(Hyperedges),每条超边连接 3 个以上节点,表达命名流程或跨模块协作关系。支持按 label 模糊过滤和按节点 ID 精确过滤。', {
270
+ server.tool('graph_hyperedges', `查询知识图谱中的超边(Hyperedges),每条连接 3+ 节点,表达命名流程或跨模块协作。支持按 label 模糊过滤和节点 ID 精确过滤。
271
+
272
+ Use when:
273
+ - 想看跨多模块的协作流程
274
+ - 按 label 找某命名流程
275
+
276
+ Typical chained usage:
277
+ - graph_query → graph_hyperedges(子图后看多节点协作)`, {
241
278
  label: z
242
279
  .string()
243
280
  .optional()
@@ -254,41 +291,17 @@ export function registerGraphTools(server) {
254
291
  .string()
255
292
  .optional()
256
293
  .describe('目标项目根目录绝对路径(默认使用当前工作目录)'),
257
- }, async ({ label, node_id, limit, projectRoot }) => {
258
- // 额外校验:label node_id 为空字符串时返回明确错误
294
+ }, withTelemetry('graph_hyperedges', (args) => {
295
+ const { label, node_id, limit, projectRoot } = args;
296
+ // 额外校验:label 或 node_id 为空字符串时返回明确错误(统一 invalid-input)
259
297
  if (label !== undefined && label.trim().length === 0) {
260
- return {
261
- content: [
262
- {
263
- type: 'text',
264
- text: JSON.stringify({
265
- error: 'label 参数不能为空字符串,请传入有效的过滤词或省略此参数',
266
- }),
267
- },
268
- ],
269
- isError: true,
270
- };
298
+ return buildErrorResponse('invalid-input', 'label 参数不能为空字符串,请传入有效的过滤词或省略此参数');
271
299
  }
272
300
  if (node_id !== undefined && node_id.trim().length === 0) {
273
- return {
274
- content: [
275
- {
276
- type: 'text',
277
- text: JSON.stringify({
278
- error: 'node_id 参数不能为空字符串,请传入有效的节点 ID 或省略此参数',
279
- }),
280
- },
281
- ],
282
- isError: true,
283
- };
301
+ return buildErrorResponse('invalid-input', 'node_id 参数不能为空字符串,请传入有效的节点 ID 或省略此参数');
284
302
  }
285
- try {
286
- const engine = getEngine(projectRoot);
287
- const hyperedges = engine.getHyperedges({
288
- label,
289
- nodeId: node_id,
290
- limit,
291
- });
303
+ return runGraphTool(projectRoot, (engine) => {
304
+ const hyperedges = engine.getHyperedges({ label, nodeId: node_id, limit });
292
305
  const filtered = (label !== undefined && label.length > 0) || (node_id !== undefined && node_id.length > 0);
293
306
  return {
294
307
  content: [
@@ -298,13 +311,17 @@ export function registerGraphTools(server) {
298
311
  },
299
312
  ],
300
313
  };
301
- }
302
- catch (err) {
303
- return buildErrorResponse(err);
304
- }
305
- });
314
+ });
315
+ }));
306
316
  // ─── 工具 5: graph_god_nodes — 枢纽节点识别 ───
307
- server.tool('graph_god_nodes', '识别知识图谱中度数最高的枢纽节点,用于定位过度耦合的核心模块、分析架构瓶颈。', {
317
+ server.tool('graph_god_nodes', `识别知识图谱中度数最高的枢纽节点,用于定位过度耦合的核心模块、分析架构瓶颈。
318
+
319
+ Use when:
320
+ - 找过度耦合的"上帝模块"
321
+ - 架构瓶颈 / 重构优先级分析
322
+
323
+ Typical chained usage:
324
+ - graph_god_nodes → impact(枢纽节点再做影响面评估)`, {
308
325
  limit: z
309
326
  .number()
310
327
  .optional()
@@ -313,17 +330,11 @@ export function registerGraphTools(server) {
313
330
  .string()
314
331
  .optional()
315
332
  .describe('目标项目根目录绝对路径(默认使用当前工作目录)'),
316
- }, async ({ limit, projectRoot }) => {
317
- try {
318
- const engine = getEngine(projectRoot);
319
- const result = engine.getGodNodes(limit);
320
- return {
321
- content: [{ type: 'text', text: JSON.stringify(result) }],
322
- };
323
- }
324
- catch (err) {
325
- return buildErrorResponse(err);
326
- }
327
- });
333
+ }, withTelemetry('graph_god_nodes', (args) => {
334
+ const { limit, projectRoot } = args;
335
+ return runGraphTool(projectRoot, (engine) => ({
336
+ content: [{ type: 'text', text: JSON.stringify(engine.getGodNodes(limit)) }],
337
+ }));
338
+ }));
328
339
  }
329
340
  //# sourceMappingURL=graph-tools.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"graph-tools.js","sourceRoot":"","sources":["../../src/mcp/graph-tools.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"graph-tools.js","sourceRoot":"","sources":["../../src/mcp/graph-tools.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,128 @@
1
+ /**
2
+ * Feature 171 — File Navigation 纯计算/IO helper(对标 response-helpers.ts,便于 ≥95% 单测)
3
+ *
4
+ * 把 view_file / search_in_file / list_directory 的全部可独立测试逻辑下沉到本模块,
5
+ * 让 file-nav-tools.ts 的 handler 保持薄编排。
6
+ *
7
+ * 🔴 路径安全(resolveSafePath)是 LFI 红线:词法 containment 先于 fs,realpath 穿透 symlink,
8
+ * path.relative 防前缀碰撞,全部错误码脱敏(不回传绝对路径)。
9
+ */
10
+ /** view_file 无定位参数时的默认窗口(对标 OpenHands 前 200 行) */
11
+ export declare const DEFAULT_VIEW_WINDOW = 200;
12
+ /** search_in_file 默认返回命中数 */
13
+ export declare const DEFAULT_MAX_MATCHES = 50;
14
+ /** maxMatches 安全上界(clamp) */
15
+ export declare const MAX_MATCHES_CAP = 1000;
16
+ /** 用户 pattern 长度上界(ReDoS 缓解:限制输入) */
17
+ export declare const MAX_PATTERN_LENGTH = 200;
18
+ /** contextLines 上界 */
19
+ export declare const MAX_CONTEXT_LINES = 20;
20
+ /** list_directory depth 上界 */
21
+ export declare const MAX_DIR_DEPTH = 10;
22
+ /** list_directory 单次最多返回条目(防超大目录灌爆 payload) */
23
+ export declare const MAX_DIR_ENTRIES = 5000;
24
+ /** path 参数长度上界(防超长 path 灌爆响应 / 异常输入) */
25
+ export declare const MAX_PATH_LENGTH = 4096;
26
+ /** 用户正则可搜索的内容字节上界(ReDoS 缓解:限制 regex 作用的输入规模) */
27
+ export declare const MAX_REGEX_CONTENT_BYTES = 2000000;
28
+ export type SafePathErrorCode = 'path-outside-root' | 'invalid-input' | 'file-not-found';
29
+ export type SafePathResult = {
30
+ ok: true;
31
+ realPath: string;
32
+ } | {
33
+ ok: false;
34
+ code: SafePathErrorCode;
35
+ };
36
+ /**
37
+ * 解析并校验用户路径在 projectRoot 内(含 symlink 穿透)。
38
+ *
39
+ * 判定顺序(FR-013,修 Codex PATH-CLASSIFICATION):
40
+ * 1. NUL 字节 → invalid-input
41
+ * 2. realRoot = realpath(projectRoot)(projectRoot 自身 symlink 也解析)
42
+ * 3. 词法 containment(path.relative)→ 越界(含不存在)立即 path-outside-root,不触 fs
43
+ * 4. realpath 穿透候选 → ENOENT/error → file-not-found(脱敏)
44
+ * 5. realpath 后再 containment → symlink 逃逸 → path-outside-root
45
+ * posix-only(Windows 归一化 YAGNI)。
46
+ */
47
+ export declare function resolveSafePath(projectRoot: string, userPath: string): SafePathResult;
48
+ export interface FileSlice {
49
+ lines: string[];
50
+ startLine: number;
51
+ endLine: number;
52
+ totalLines: number;
53
+ truncated: boolean;
54
+ }
55
+ /**
56
+ * 将内容拆为行数组:按 \r?\n 切分;末尾换行不计为额外空行;空内容 → []。
57
+ */
58
+ export declare function splitLines(content: string): string[];
59
+ /**
60
+ * 按行区间切片,带行号前缀。无定位参数时返回前 defaultWindow 行 + truncated 标志。
61
+ * 区间端点被安全 clamp 到 [1, totalLines],超界不抛错。
62
+ */
63
+ export declare function sliceLines(content: string, opts?: {
64
+ startLine?: number;
65
+ endLine?: number;
66
+ defaultWindow?: number;
67
+ }): FileSlice;
68
+ /** UTF-8 byte / 4 的 token 代理(改名避开 token-counter.ts 的 estimateTokens 命名碰撞) */
69
+ export declare function estimateUtf8ByteTokens(text: string): number;
70
+ /** 二进制探测:前缀字节含 NUL 即判二进制 */
71
+ export declare function isBinary(buf: Buffer): boolean;
72
+ /** 把数值 clamp 到 [min, max],非法值(NaN/缺省)回退 fallback;返回是否被 clamp */
73
+ export declare function clampInt(value: number | undefined, min: number, max: number, fallback: number): {
74
+ value: number;
75
+ clamped: boolean;
76
+ };
77
+ export interface SearchMatch {
78
+ line: number;
79
+ text: string;
80
+ before: string[];
81
+ after: string[];
82
+ }
83
+ export type MatchResult = {
84
+ ok: true;
85
+ matches: SearchMatch[];
86
+ totalMatches: number;
87
+ returnedMatches: number;
88
+ warnings: string[];
89
+ } | {
90
+ ok: false;
91
+ reason: string;
92
+ };
93
+ /**
94
+ * ReDoS 启发式:探测高危结构,命中则拒绝。覆盖:
95
+ * - 嵌套量词组后接量词/有界重复:(a+)+ / (.*)* / (a{1,99}){1,99}
96
+ * - 量化的交替组:(a|a)+ / (a|b)*
97
+ * 非完整 ReDoS 证明(配合 pattern 长度 + content byte 上界,FR-005 明示)。
98
+ */
99
+ export declare function isRiskyRegex(pattern: string): boolean;
100
+ /**
101
+ * 在内容内逐行匹配 pattern,返回带上下文行的命中列表。
102
+ * 失败(空/超长/非法正则/高危正则)返回 { ok:false, reason },由 handler 映射 invalid-input。
103
+ */
104
+ export declare function matchInFile(content: string, pattern: string, opts?: {
105
+ isRegex?: boolean;
106
+ maxMatches?: number;
107
+ contextLines?: number;
108
+ }): MatchResult;
109
+ export interface DirEntry {
110
+ name: string;
111
+ type: 'file' | 'dir' | 'symlink';
112
+ size: number | null;
113
+ }
114
+ /**
115
+ * 列举目录条目(可递归 depth 层)。默认仅过滤 .git;includeIgnored=true 含 .git。
116
+ * 超 MAX_DIR_ENTRIES 截断并加 listing-truncated warning。readdir 失败的子目录静默跳过。
117
+ */
118
+ export declare function buildDirListing(absDir: string, opts?: {
119
+ depth?: number;
120
+ includeIgnored?: boolean;
121
+ maxEntries?: number;
122
+ }): {
123
+ entries: DirEntry[];
124
+ warnings: string[];
125
+ };
126
+ /** 生成 file-nav 工具的下一步引导(风格对齐 generateNextStepHint,闭环 view_file ↔ context) */
127
+ export declare function buildFileNavHint(toolName: 'view_file' | 'search_in_file' | 'list_directory', data: Record<string, unknown>): string;
128
+ //# sourceMappingURL=file-nav-helpers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"file-nav-helpers.d.ts","sourceRoot":"","sources":["../../../src/mcp/lib/file-nav-helpers.ts"],"names":[],"mappings":"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"}