spectra-cli 4.1.1 → 4.2.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 (422) hide show
  1. package/README.md +1 -1
  2. package/dist/adapters/go-adapter.d.ts.map +1 -1
  3. package/dist/adapters/go-adapter.js +2 -0
  4. package/dist/adapters/go-adapter.js.map +1 -1
  5. package/dist/adapters/index.d.ts +1 -1
  6. package/dist/adapters/index.d.ts.map +1 -1
  7. package/dist/adapters/java-adapter.d.ts.map +1 -1
  8. package/dist/adapters/java-adapter.js +2 -0
  9. package/dist/adapters/java-adapter.js.map +1 -1
  10. package/dist/adapters/language-adapter.d.ts +47 -9
  11. package/dist/adapters/language-adapter.d.ts.map +1 -1
  12. package/dist/adapters/python-adapter.d.ts +34 -6
  13. package/dist/adapters/python-adapter.d.ts.map +1 -1
  14. package/dist/adapters/python-adapter.js +157 -59
  15. package/dist/adapters/python-adapter.js.map +1 -1
  16. package/dist/adapters/ts-js-adapter.d.ts +13 -5
  17. package/dist/adapters/ts-js-adapter.d.ts.map +1 -1
  18. package/dist/adapters/ts-js-adapter.js +55 -14
  19. package/dist/adapters/ts-js-adapter.js.map +1 -1
  20. package/dist/batch/batch-orchestrator.d.ts +30 -4
  21. package/dist/batch/batch-orchestrator.d.ts.map +1 -1
  22. package/dist/batch/batch-orchestrator.js +284 -7
  23. package/dist/batch/batch-orchestrator.js.map +1 -1
  24. package/dist/batch/delta-regenerator.d.ts +2 -2
  25. package/dist/batch/delta-regenerator.d.ts.map +1 -1
  26. package/dist/batch/delta-regenerator.js.map +1 -1
  27. package/dist/batch/module-grouper.d.ts +2 -2
  28. package/dist/batch/module-grouper.d.ts.map +1 -1
  29. package/dist/batch/module-grouper.js +1 -1
  30. package/dist/batch/module-grouper.js.map +1 -1
  31. package/dist/cli/commands/graph.js +1 -1
  32. package/dist/cli/commands/graph.js.map +1 -1
  33. package/dist/cli/commands/index.d.ts +8 -0
  34. package/dist/cli/commands/index.d.ts.map +1 -0
  35. package/dist/cli/commands/index.js +274 -0
  36. package/dist/cli/commands/index.js.map +1 -0
  37. package/dist/cli/commands/query.d.ts.map +1 -1
  38. package/dist/cli/commands/query.js +3 -1
  39. package/dist/cli/commands/query.js.map +1 -1
  40. package/dist/cli/index.js +9 -9
  41. package/dist/cli/index.js.map +1 -1
  42. package/dist/cli/utils/parse-args.d.ts +13 -1
  43. package/dist/cli/utils/parse-args.d.ts.map +1 -1
  44. package/dist/cli/utils/parse-args.js +79 -2
  45. package/dist/cli/utils/parse-args.js.map +1 -1
  46. package/dist/core/ast-analyzer.d.ts.map +1 -1
  47. package/dist/core/ast-analyzer.js +79 -5
  48. package/dist/core/ast-analyzer.js.map +1 -1
  49. package/dist/core/import-resolver.d.ts +90 -0
  50. package/dist/core/import-resolver.d.ts.map +1 -0
  51. package/dist/core/import-resolver.js +273 -0
  52. package/dist/core/import-resolver.js.map +1 -0
  53. package/dist/core/query-mappers/base-mapper.d.ts +13 -0
  54. package/dist/core/query-mappers/base-mapper.d.ts.map +1 -1
  55. package/dist/core/query-mappers/go-mapper.d.ts +68 -0
  56. package/dist/core/query-mappers/go-mapper.d.ts.map +1 -1
  57. package/dist/core/query-mappers/go-mapper.js +421 -0
  58. package/dist/core/query-mappers/go-mapper.js.map +1 -1
  59. package/dist/core/query-mappers/java-mapper.d.ts +196 -0
  60. package/dist/core/query-mappers/java-mapper.d.ts.map +1 -1
  61. package/dist/core/query-mappers/java-mapper.js +600 -0
  62. package/dist/core/query-mappers/java-mapper.js.map +1 -1
  63. package/dist/core/query-mappers/python-mapper.d.ts +55 -0
  64. package/dist/core/query-mappers/python-mapper.d.ts.map +1 -1
  65. package/dist/core/query-mappers/python-mapper.js +273 -0
  66. package/dist/core/query-mappers/python-mapper.js.map +1 -1
  67. package/dist/core/query-mappers/typescript-mapper.d.ts +102 -0
  68. package/dist/core/query-mappers/typescript-mapper.d.ts.map +1 -1
  69. package/dist/core/query-mappers/typescript-mapper.js +470 -0
  70. package/dist/core/query-mappers/typescript-mapper.js.map +1 -1
  71. package/dist/core/single-spec-orchestrator.d.ts.map +1 -1
  72. package/dist/core/single-spec-orchestrator.js +146 -9
  73. package/dist/core/single-spec-orchestrator.js.map +1 -1
  74. package/dist/core/tree-sitter-analyzer.d.ts +6 -0
  75. package/dist/core/tree-sitter-analyzer.d.ts.map +1 -1
  76. package/dist/core/tree-sitter-analyzer.js +33 -1
  77. package/dist/core/tree-sitter-analyzer.js.map +1 -1
  78. package/dist/core/tree-sitter-fallback.d.ts +7 -4
  79. package/dist/core/tree-sitter-fallback.d.ts.map +1 -1
  80. package/dist/core/tree-sitter-fallback.js +157 -12
  81. package/dist/core/tree-sitter-fallback.js.map +1 -1
  82. package/dist/extraction/extraction-types.d.ts +25 -25
  83. package/dist/generator/index-generator.d.ts +3 -3
  84. package/dist/generator/index-generator.d.ts.map +1 -1
  85. package/dist/generator/index-generator.js +1 -1
  86. package/dist/generator/index-generator.js.map +1 -1
  87. package/dist/graph/directory-graph.d.ts +14 -4
  88. package/dist/graph/directory-graph.d.ts.map +1 -1
  89. package/dist/graph/directory-graph.js +71 -128
  90. package/dist/graph/directory-graph.js.map +1 -1
  91. package/dist/graph/mermaid-renderer.d.ts +8 -5
  92. package/dist/graph/mermaid-renderer.d.ts.map +1 -1
  93. package/dist/graph/mermaid-renderer.js +3 -3
  94. package/dist/graph/mermaid-renderer.js.map +1 -1
  95. package/dist/graph/topological-sort.d.ts +13 -6
  96. package/dist/graph/topological-sort.d.ts.map +1 -1
  97. package/dist/graph/topological-sort.js +2 -2
  98. package/dist/graph/topological-sort.js.map +1 -1
  99. package/dist/knowledge-graph/call-resolver.d.ts +64 -0
  100. package/dist/knowledge-graph/call-resolver.d.ts.map +1 -0
  101. package/dist/knowledge-graph/call-resolver.js +323 -0
  102. package/dist/knowledge-graph/call-resolver.js.map +1 -0
  103. package/dist/knowledge-graph/import-resolver.d.ts +114 -0
  104. package/dist/knowledge-graph/import-resolver.d.ts.map +1 -0
  105. package/dist/knowledge-graph/import-resolver.js +537 -0
  106. package/dist/knowledge-graph/import-resolver.js.map +1 -0
  107. package/dist/knowledge-graph/incremental.d.ts +110 -0
  108. package/dist/knowledge-graph/incremental.d.ts.map +1 -0
  109. package/dist/knowledge-graph/incremental.js +410 -0
  110. package/dist/knowledge-graph/incremental.js.map +1 -0
  111. package/dist/knowledge-graph/index.d.ts +74 -0
  112. package/dist/knowledge-graph/index.d.ts.map +1 -0
  113. package/dist/knowledge-graph/index.js +156 -0
  114. package/dist/knowledge-graph/index.js.map +1 -0
  115. package/dist/knowledge-graph/module-derivation.d.ts +238 -0
  116. package/dist/knowledge-graph/module-derivation.d.ts.map +1 -0
  117. package/dist/knowledge-graph/module-derivation.js +418 -0
  118. package/dist/knowledge-graph/module-derivation.js.map +1 -0
  119. package/dist/knowledge-graph/persistence.d.ts +270 -0
  120. package/dist/knowledge-graph/persistence.d.ts.map +1 -0
  121. package/dist/knowledge-graph/persistence.js +226 -0
  122. package/dist/knowledge-graph/persistence.js.map +1 -0
  123. package/dist/knowledge-graph/query-helpers.d.ts +164 -0
  124. package/dist/knowledge-graph/query-helpers.d.ts.map +1 -0
  125. package/dist/knowledge-graph/query-helpers.js +394 -0
  126. package/dist/knowledge-graph/query-helpers.js.map +1 -0
  127. package/dist/knowledge-graph/unified-graph.d.ts +310 -0
  128. package/dist/knowledge-graph/unified-graph.d.ts.map +1 -0
  129. package/dist/knowledge-graph/unified-graph.js +182 -0
  130. package/dist/knowledge-graph/unified-graph.js.map +1 -0
  131. package/dist/mcp/agent-context-tools.d.ts +104 -0
  132. package/dist/mcp/agent-context-tools.d.ts.map +1 -0
  133. package/dist/mcp/agent-context-tools.js +854 -0
  134. package/dist/mcp/agent-context-tools.js.map +1 -0
  135. package/dist/mcp/graph-tools.d.ts +20 -0
  136. package/dist/mcp/graph-tools.d.ts.map +1 -1
  137. package/dist/mcp/graph-tools.js +71 -11
  138. package/dist/mcp/graph-tools.js.map +1 -1
  139. package/dist/mcp/lib/response-helpers.d.ts +67 -0
  140. package/dist/mcp/lib/response-helpers.d.ts.map +1 -0
  141. package/dist/mcp/lib/response-helpers.js +103 -0
  142. package/dist/mcp/lib/response-helpers.js.map +1 -0
  143. package/dist/mcp/server.d.ts +3 -1
  144. package/dist/mcp/server.d.ts.map +1 -1
  145. package/dist/mcp/server.js +9 -10
  146. package/dist/mcp/server.js.map +1 -1
  147. package/dist/models/call-site.d.ts +68 -0
  148. package/dist/models/call-site.d.ts.map +1 -0
  149. package/dist/models/call-site.js +60 -0
  150. package/dist/models/call-site.js.map +1 -0
  151. package/dist/models/code-skeleton.d.ts +78 -6
  152. package/dist/models/code-skeleton.d.ts.map +1 -1
  153. package/dist/models/code-skeleton.js +29 -0
  154. package/dist/models/code-skeleton.js.map +1 -1
  155. package/dist/models/drift-item.d.ts +4 -4
  156. package/dist/models/module-spec.d.ts +155 -94
  157. package/dist/models/module-spec.d.ts.map +1 -1
  158. package/dist/panoramic/adr-decision-pipeline.d.ts +53 -0
  159. package/dist/panoramic/adr-decision-pipeline.d.ts.map +1 -0
  160. package/dist/panoramic/adr-decision-pipeline.js +685 -0
  161. package/dist/panoramic/adr-decision-pipeline.js.map +1 -0
  162. package/dist/panoramic/api-surface-generator.d.ts +56 -0
  163. package/dist/panoramic/api-surface-generator.d.ts.map +1 -0
  164. package/dist/panoramic/api-surface-generator.js +1671 -0
  165. package/dist/panoramic/api-surface-generator.js.map +1 -0
  166. package/dist/panoramic/architecture-ir-builder.d.ts +19 -0
  167. package/dist/panoramic/architecture-ir-builder.d.ts.map +1 -0
  168. package/dist/panoramic/architecture-ir-builder.js +561 -0
  169. package/dist/panoramic/architecture-ir-builder.js.map +1 -0
  170. package/dist/panoramic/architecture-ir-exporters.d.ts +7 -0
  171. package/dist/panoramic/architecture-ir-exporters.d.ts.map +1 -0
  172. package/dist/panoramic/architecture-ir-exporters.js +183 -0
  173. package/dist/panoramic/architecture-ir-exporters.js.map +1 -0
  174. package/dist/panoramic/architecture-ir-generator.d.ts +36 -0
  175. package/dist/panoramic/architecture-ir-generator.d.ts.map +1 -0
  176. package/dist/panoramic/architecture-ir-generator.js +51 -0
  177. package/dist/panoramic/architecture-ir-generator.js.map +1 -0
  178. package/dist/panoramic/architecture-ir-mermaid-adapter.d.ts +6 -0
  179. package/dist/panoramic/architecture-ir-mermaid-adapter.d.ts.map +1 -0
  180. package/dist/panoramic/architecture-ir-mermaid-adapter.js +98 -0
  181. package/dist/panoramic/architecture-ir-mermaid-adapter.js.map +1 -0
  182. package/dist/panoramic/architecture-ir-model.d.ts +87 -0
  183. package/dist/panoramic/architecture-ir-model.d.ts.map +1 -0
  184. package/dist/panoramic/architecture-ir-model.js +20 -0
  185. package/dist/panoramic/architecture-ir-model.js.map +1 -0
  186. package/dist/panoramic/architecture-narrative.d.ts +68 -0
  187. package/dist/panoramic/architecture-narrative.d.ts.map +1 -0
  188. package/dist/panoramic/architecture-narrative.js +401 -0
  189. package/dist/panoramic/architecture-narrative.js.map +1 -0
  190. package/dist/panoramic/architecture-overview-generator.d.ts +31 -0
  191. package/dist/panoramic/architecture-overview-generator.d.ts.map +1 -0
  192. package/dist/panoramic/architecture-overview-generator.js +454 -0
  193. package/dist/panoramic/architecture-overview-generator.js.map +1 -0
  194. package/dist/panoramic/architecture-overview-model.d.ts +77 -0
  195. package/dist/panoramic/architecture-overview-model.d.ts.map +1 -0
  196. package/dist/panoramic/architecture-overview-model.js +31 -0
  197. package/dist/panoramic/architecture-overview-model.js.map +1 -0
  198. package/dist/panoramic/batch-project-docs.d.ts.map +1 -1
  199. package/dist/panoramic/batch-project-docs.js +4 -2
  200. package/dist/panoramic/batch-project-docs.js.map +1 -1
  201. package/dist/panoramic/builders/component-view-builder.d.ts +25 -1
  202. package/dist/panoramic/builders/component-view-builder.d.ts.map +1 -1
  203. package/dist/panoramic/builders/component-view-builder.js +83 -3
  204. package/dist/panoramic/builders/component-view-builder.js.map +1 -1
  205. package/dist/panoramic/builders/doc-graph-builder.d.ts +2 -2
  206. package/dist/panoramic/builders/doc-graph-builder.d.ts.map +1 -1
  207. package/dist/panoramic/builders/doc-graph-builder.js.map +1 -1
  208. package/dist/panoramic/component-view-builder.d.ts +17 -0
  209. package/dist/panoramic/component-view-builder.d.ts.map +1 -0
  210. package/dist/panoramic/component-view-builder.js +652 -0
  211. package/dist/panoramic/component-view-builder.js.map +1 -0
  212. package/dist/panoramic/component-view-model.d.ts +127 -0
  213. package/dist/panoramic/component-view-model.d.ts.map +1 -0
  214. package/dist/panoramic/component-view-model.js +65 -0
  215. package/dist/panoramic/component-view-model.js.map +1 -0
  216. package/dist/panoramic/config-reference-generator.d.ts +78 -0
  217. package/dist/panoramic/config-reference-generator.d.ts.map +1 -0
  218. package/dist/panoramic/config-reference-generator.js +199 -0
  219. package/dist/panoramic/config-reference-generator.js.map +1 -0
  220. package/dist/panoramic/coverage-auditor.d.ts +95 -0
  221. package/dist/panoramic/coverage-auditor.d.ts.map +1 -0
  222. package/dist/panoramic/coverage-auditor.js +290 -0
  223. package/dist/panoramic/coverage-auditor.js.map +1 -0
  224. package/dist/panoramic/cross-package-analyzer.d.ts +112 -0
  225. package/dist/panoramic/cross-package-analyzer.d.ts.map +1 -0
  226. package/dist/panoramic/cross-package-analyzer.js +258 -0
  227. package/dist/panoramic/cross-package-analyzer.js.map +1 -0
  228. package/dist/panoramic/data-model-generator.d.ts +528 -0
  229. package/dist/panoramic/data-model-generator.d.ts.map +1 -0
  230. package/dist/panoramic/data-model-generator.js +647 -0
  231. package/dist/panoramic/data-model-generator.js.map +1 -0
  232. package/dist/panoramic/doc-graph-builder.d.ts +80 -0
  233. package/dist/panoramic/doc-graph-builder.d.ts.map +1 -0
  234. package/dist/panoramic/doc-graph-builder.js +352 -0
  235. package/dist/panoramic/doc-graph-builder.js.map +1 -0
  236. package/dist/panoramic/docs-bundle-manifest-reader.d.ts +26 -0
  237. package/dist/panoramic/docs-bundle-manifest-reader.d.ts.map +1 -0
  238. package/dist/panoramic/docs-bundle-manifest-reader.js +106 -0
  239. package/dist/panoramic/docs-bundle-manifest-reader.js.map +1 -0
  240. package/dist/panoramic/docs-bundle-orchestrator.d.ts +14 -0
  241. package/dist/panoramic/docs-bundle-orchestrator.d.ts.map +1 -0
  242. package/dist/panoramic/docs-bundle-orchestrator.js +538 -0
  243. package/dist/panoramic/docs-bundle-orchestrator.js.map +1 -0
  244. package/dist/panoramic/docs-bundle-profiles.d.ts +4 -0
  245. package/dist/panoramic/docs-bundle-profiles.d.ts.map +1 -0
  246. package/dist/panoramic/docs-bundle-profiles.js +82 -0
  247. package/dist/panoramic/docs-bundle-profiles.js.map +1 -0
  248. package/dist/panoramic/docs-bundle-types.d.ts +94 -0
  249. package/dist/panoramic/docs-bundle-types.d.ts.map +1 -0
  250. package/dist/panoramic/docs-bundle-types.js +10 -0
  251. package/dist/panoramic/docs-bundle-types.js.map +1 -0
  252. package/dist/panoramic/docs-quality-evaluator.d.ts +31 -0
  253. package/dist/panoramic/docs-quality-evaluator.d.ts.map +1 -0
  254. package/dist/panoramic/docs-quality-evaluator.js +941 -0
  255. package/dist/panoramic/docs-quality-evaluator.js.map +1 -0
  256. package/dist/panoramic/docs-quality-model.d.ts +125 -0
  257. package/dist/panoramic/docs-quality-model.d.ts.map +1 -0
  258. package/dist/panoramic/docs-quality-model.js +166 -0
  259. package/dist/panoramic/docs-quality-model.js.map +1 -0
  260. package/dist/panoramic/dynamic-scenarios-builder.d.ts +18 -0
  261. package/dist/panoramic/dynamic-scenarios-builder.d.ts.map +1 -0
  262. package/dist/panoramic/dynamic-scenarios-builder.js +316 -0
  263. package/dist/panoramic/dynamic-scenarios-builder.js.map +1 -0
  264. package/dist/panoramic/event-surface-generator.d.ts +52 -0
  265. package/dist/panoramic/event-surface-generator.d.ts.map +1 -0
  266. package/dist/panoramic/event-surface-generator.js +507 -0
  267. package/dist/panoramic/event-surface-generator.js.map +1 -0
  268. package/dist/panoramic/generator-registry.d.ts +1 -1
  269. package/dist/panoramic/generator-registry.d.ts.map +1 -1
  270. package/dist/panoramic/generator-registry.js +5 -2
  271. package/dist/panoramic/generator-registry.js.map +1 -1
  272. package/dist/panoramic/generators/cross-package-analyzer.d.ts +5 -5
  273. package/dist/panoramic/generators/cross-package-analyzer.d.ts.map +1 -1
  274. package/dist/panoramic/generators/cross-package-analyzer.js +1 -1
  275. package/dist/panoramic/generators/cross-package-analyzer.js.map +1 -1
  276. package/dist/panoramic/generators/data-model-generator.d.ts +27 -27
  277. package/dist/panoramic/graph/confidence-mapper.d.ts +18 -0
  278. package/dist/panoramic/graph/confidence-mapper.d.ts.map +1 -1
  279. package/dist/panoramic/graph/confidence-mapper.js +26 -0
  280. package/dist/panoramic/graph/confidence-mapper.js.map +1 -1
  281. package/dist/panoramic/graph/graph-builder.d.ts.map +1 -1
  282. package/dist/panoramic/graph/graph-builder.js +78 -0
  283. package/dist/panoramic/graph/graph-builder.js.map +1 -1
  284. package/dist/panoramic/graph/graph-paths.d.ts +8 -0
  285. package/dist/panoramic/graph/graph-paths.d.ts.map +1 -1
  286. package/dist/panoramic/graph/graph-paths.js +10 -0
  287. package/dist/panoramic/graph/graph-paths.js.map +1 -1
  288. package/dist/panoramic/graph/graph-query.d.ts +33 -2
  289. package/dist/panoramic/graph/graph-query.d.ts.map +1 -1
  290. package/dist/panoramic/graph/graph-query.js +69 -19
  291. package/dist/panoramic/graph/graph-query.js.map +1 -1
  292. package/dist/panoramic/graph/graph-types.d.ts +32 -3
  293. package/dist/panoramic/graph/graph-types.d.ts.map +1 -1
  294. package/dist/panoramic/hyperedges/schema.d.ts +6 -6
  295. package/dist/panoramic/interface-surface-generator.d.ts +50 -0
  296. package/dist/panoramic/interface-surface-generator.d.ts.map +1 -0
  297. package/dist/panoramic/interface-surface-generator.js +388 -0
  298. package/dist/panoramic/interface-surface-generator.js.map +1 -0
  299. package/dist/panoramic/interfaces.d.ts +2 -2
  300. package/dist/panoramic/mock-readme-generator.d.ts +90 -0
  301. package/dist/panoramic/mock-readme-generator.d.ts.map +1 -0
  302. package/dist/panoramic/mock-readme-generator.js +111 -0
  303. package/dist/panoramic/mock-readme-generator.js.map +1 -0
  304. package/dist/panoramic/models/component-view-model.d.ts +1 -1
  305. package/dist/panoramic/models/component-view-model.d.ts.map +1 -1
  306. package/dist/panoramic/models/component-view-model.js.map +1 -1
  307. package/dist/panoramic/narrative-provenance-adapter.d.ts +8 -0
  308. package/dist/panoramic/narrative-provenance-adapter.d.ts.map +1 -0
  309. package/dist/panoramic/narrative-provenance-adapter.js +99 -0
  310. package/dist/panoramic/narrative-provenance-adapter.js.map +1 -0
  311. package/dist/panoramic/parser-registry.d.ts +1 -1
  312. package/dist/panoramic/parser-registry.js +1 -1
  313. package/dist/panoramic/parsers/types.d.ts +6 -6
  314. package/dist/panoramic/pattern-hints-generator.d.ts +28 -0
  315. package/dist/panoramic/pattern-hints-generator.d.ts.map +1 -0
  316. package/dist/panoramic/pattern-hints-generator.js +218 -0
  317. package/dist/panoramic/pattern-hints-generator.js.map +1 -0
  318. package/dist/panoramic/pattern-hints-model.d.ts +89 -0
  319. package/dist/panoramic/pattern-hints-model.d.ts.map +1 -0
  320. package/dist/panoramic/pattern-hints-model.js +61 -0
  321. package/dist/panoramic/pattern-hints-model.js.map +1 -0
  322. package/dist/panoramic/pattern-knowledge-base.d.ts +31 -0
  323. package/dist/panoramic/pattern-knowledge-base.d.ts.map +1 -0
  324. package/dist/panoramic/pattern-knowledge-base.js +407 -0
  325. package/dist/panoramic/pattern-knowledge-base.js.map +1 -0
  326. package/dist/panoramic/pipelines/coverage-auditor.d.ts.map +1 -1
  327. package/dist/panoramic/pipelines/coverage-auditor.js +4 -2
  328. package/dist/panoramic/pipelines/coverage-auditor.js.map +1 -1
  329. package/dist/panoramic/pipelines/docs-bundle-orchestrator.js +13 -6
  330. package/dist/panoramic/pipelines/docs-bundle-orchestrator.js.map +1 -1
  331. package/dist/panoramic/pipelines/product-ux-docs.d.ts +5 -0
  332. package/dist/panoramic/pipelines/product-ux-docs.d.ts.map +1 -1
  333. package/dist/panoramic/pipelines/product-ux-docs.js +34 -6
  334. package/dist/panoramic/pipelines/product-ux-docs.js.map +1 -1
  335. package/dist/panoramic/product-ux-docs.d.ts +104 -0
  336. package/dist/panoramic/product-ux-docs.d.ts.map +1 -0
  337. package/dist/panoramic/product-ux-docs.js +817 -0
  338. package/dist/panoramic/product-ux-docs.js.map +1 -0
  339. package/dist/panoramic/qa/__tests__/citation.test.d.ts +2 -0
  340. package/dist/panoramic/qa/__tests__/citation.test.d.ts.map +1 -0
  341. package/dist/panoramic/qa/__tests__/citation.test.js +193 -0
  342. package/dist/panoramic/qa/__tests__/citation.test.js.map +1 -0
  343. package/dist/panoramic/qa/__tests__/debt-context.test.d.ts +2 -0
  344. package/dist/panoramic/qa/__tests__/debt-context.test.d.ts.map +1 -0
  345. package/dist/panoramic/qa/__tests__/debt-context.test.js +154 -0
  346. package/dist/panoramic/qa/__tests__/debt-context.test.js.map +1 -0
  347. package/dist/panoramic/qa/__tests__/graph-retriever.test.d.ts +2 -0
  348. package/dist/panoramic/qa/__tests__/graph-retriever.test.d.ts.map +1 -0
  349. package/dist/panoramic/qa/__tests__/graph-retriever.test.js +148 -0
  350. package/dist/panoramic/qa/__tests__/graph-retriever.test.js.map +1 -0
  351. package/dist/panoramic/qa/__tests__/index.test.d.ts +2 -0
  352. package/dist/panoramic/qa/__tests__/index.test.d.ts.map +1 -0
  353. package/dist/panoramic/qa/__tests__/index.test.js +246 -0
  354. package/dist/panoramic/qa/__tests__/index.test.js.map +1 -0
  355. package/dist/panoramic/qa/__tests__/llm-caller.test.d.ts +2 -0
  356. package/dist/panoramic/qa/__tests__/llm-caller.test.d.ts.map +1 -0
  357. package/dist/panoramic/qa/__tests__/llm-caller.test.js +168 -0
  358. package/dist/panoramic/qa/__tests__/llm-caller.test.js.map +1 -0
  359. package/dist/panoramic/qa/__tests__/prompt-builder.test.d.ts +2 -0
  360. package/dist/panoramic/qa/__tests__/prompt-builder.test.d.ts.map +1 -0
  361. package/dist/panoramic/qa/__tests__/prompt-builder.test.js +150 -0
  362. package/dist/panoramic/qa/__tests__/prompt-builder.test.js.map +1 -0
  363. package/dist/panoramic/qa/__tests__/qa-integration.test.d.ts +2 -0
  364. package/dist/panoramic/qa/__tests__/qa-integration.test.d.ts.map +1 -0
  365. package/dist/panoramic/qa/__tests__/qa-integration.test.js +296 -0
  366. package/dist/panoramic/qa/__tests__/qa-integration.test.js.map +1 -0
  367. package/dist/panoramic/qa/__tests__/rag-reranker.test.d.ts +2 -0
  368. package/dist/panoramic/qa/__tests__/rag-reranker.test.d.ts.map +1 -0
  369. package/dist/panoramic/qa/__tests__/rag-reranker.test.js +136 -0
  370. package/dist/panoramic/qa/__tests__/rag-reranker.test.js.map +1 -0
  371. package/dist/panoramic/qa/index.d.ts.map +1 -1
  372. package/dist/panoramic/qa/index.js +10 -3
  373. package/dist/panoramic/qa/index.js.map +1 -1
  374. package/dist/panoramic/runtime-topology-generator.d.ts +77 -0
  375. package/dist/panoramic/runtime-topology-generator.d.ts.map +1 -0
  376. package/dist/panoramic/runtime-topology-generator.js +676 -0
  377. package/dist/panoramic/runtime-topology-generator.js.map +1 -0
  378. package/dist/panoramic/runtime-topology-model.d.ts +145 -0
  379. package/dist/panoramic/runtime-topology-model.d.ts.map +1 -0
  380. package/dist/panoramic/runtime-topology-model.js +300 -0
  381. package/dist/panoramic/runtime-topology-model.js.map +1 -0
  382. package/dist/panoramic/troubleshooting-generator.d.ts +51 -0
  383. package/dist/panoramic/troubleshooting-generator.d.ts.map +1 -0
  384. package/dist/panoramic/troubleshooting-generator.js +451 -0
  385. package/dist/panoramic/troubleshooting-generator.js.map +1 -0
  386. package/dist/panoramic/utils/text-segmenter.d.ts +15 -0
  387. package/dist/panoramic/utils/text-segmenter.d.ts.map +1 -1
  388. package/dist/panoramic/utils/text-segmenter.js +38 -0
  389. package/dist/panoramic/utils/text-segmenter.js.map +1 -1
  390. package/dist/panoramic/workspace-index-generator.d.ts +148 -0
  391. package/dist/panoramic/workspace-index-generator.d.ts.map +1 -0
  392. package/dist/panoramic/workspace-index-generator.js +497 -0
  393. package/dist/panoramic/workspace-index-generator.js.map +1 -0
  394. package/dist/runtime-bootstrap.d.ts +9 -0
  395. package/dist/runtime-bootstrap.d.ts.map +1 -0
  396. package/dist/runtime-bootstrap.js +33 -0
  397. package/dist/runtime-bootstrap.js.map +1 -0
  398. package/dist/utils/file-scanner.js +1 -1
  399. package/dist/utils/file-scanner.js.map +1 -1
  400. package/package.json +12 -2
  401. package/plugins/spec-driver/.claude-plugin/plugin.json +1 -1
  402. package/plugins/spec-driver/README.md +18 -1
  403. package/plugins/spec-driver/agents/implement.md +20 -1
  404. package/plugins/spec-driver/agents/plan.md +20 -1
  405. package/plugins/spec-driver/agents/quality-review.md +20 -1
  406. package/plugins/spec-driver/agents/spec-review.md +20 -1
  407. package/plugins/spec-driver/agents/verify.md +20 -1
  408. package/plugins/spec-driver/docs/customization.md +134 -0
  409. package/plugins/spec-driver/docs/spectra-mcp-integration.md +165 -0
  410. package/plugins/spec-driver/lib/preference-rules.mjs +96 -0
  411. package/plugins/spec-driver/scripts/postinstall.sh +1 -1
  412. package/plugins/spec-driver/scripts/sync-preference-rules.mjs +148 -0
  413. package/plugins/spec-driver/skills/spec-driver-feature/SKILL.md +10 -0
  414. package/plugins/spec-driver/skills/spec-driver-fix/SKILL.md +10 -0
  415. package/plugins/spec-driver/skills/spec-driver-implement/SKILL.md +10 -0
  416. package/plugins/spec-driver/skills/spec-driver-refactor/SKILL.md +10 -0
  417. package/plugins/spec-driver/skills/spec-driver-story/SKILL.md +10 -0
  418. package/plugins/spec-driver/templates/preference-rules.md +39 -0
  419. package/plugins/spectra/.claude-plugin/plugin.json +1 -1
  420. package/plugins/spectra/README.md +48 -1
  421. package/plugins/spectra/hooks/post-commit.sh +40 -0
  422. package/templates/product-overview.hbs +1 -1
@@ -0,0 +1,451 @@
1
+ /**
2
+ * TroubleshootingGenerator
3
+ *
4
+ * 从显式错误模式、配置约束与恢复路径中生成 grounded troubleshooting 文档,
5
+ * 并在证据充分时输出 explanation 风格的背景说明。
6
+ */
7
+ import * as fs from 'node:fs';
8
+ import * as path from 'node:path';
9
+ import { loadTemplate } from './utils/template-loader.js';
10
+ const IGNORE_DIRS = new Set([
11
+ '.git',
12
+ 'node_modules',
13
+ 'dist',
14
+ 'build',
15
+ 'coverage',
16
+ '.next',
17
+ '.nuxt',
18
+ '__pycache__',
19
+ '.venv',
20
+ 'venv',
21
+ ]);
22
+ const SOURCE_EXTENSIONS = new Set(['.ts', '.tsx', '.js', '.jsx', '.mts', '.cts', '.py', '.go', '.java']);
23
+ const QUICK_SIGNAL_RE = /throw new (?:\w+)?Error|(?:logger|console)\.error|process\.env|os\.getenv|getenv\(|retry|reconnect|fallback|recover|backoff|restart|resume|reset/;
24
+ const ENV_FILE_RE = /^\.env(\..*)?$/;
25
+ const ERROR_PATTERNS = [
26
+ /throw new (?:\w+)?Error\(\s*(['"`])([^'"`]+)\1/,
27
+ /(?:logger|console)\.error\(\s*(['"`])([^'"`]+)\1/,
28
+ ];
29
+ const JS_ENV_RE = /process\.env(?:\[['"]([A-Z][A-Z0-9_]*)['"]\]|\.([A-Z][A-Z0-9_]*))/g;
30
+ const PY_ENV_RE = /\b(?:os\.)?getenv\(\s*(['"])([A-Z][A-Z0-9_]*)\1/g;
31
+ const PY_ENV_MAP_RE = /os\.environ\[['"]([A-Z][A-Z0-9_]*)['"]\]/g;
32
+ const RECOVERY_RE = /\b(retry|reconnect|fallback|recover|backoff|restart|resume|reset)\b/i;
33
+ const INVALID_HINT_RE = /\b(invalid|unsupported|must|missing|required|expect|range|timeout|unavailable|failed|empty)\b/i;
34
+ const QUOTED_KEY_RE = /["']?([A-Z][A-Z0-9_]*)["']?\s*[:=]/g;
35
+ export class TroubleshootingGenerator {
36
+ id = 'troubleshooting';
37
+ name = '故障排查 / 原理说明文档生成器';
38
+ description = '从错误模式、配置约束和恢复路径生成 grounded troubleshooting 文档';
39
+ isApplicable(context) {
40
+ return collectRelevantFiles(context.projectRoot).some((filePath) => {
41
+ try {
42
+ return QUICK_SIGNAL_RE.test(fs.readFileSync(filePath, 'utf-8'));
43
+ }
44
+ catch {
45
+ return false;
46
+ }
47
+ });
48
+ }
49
+ async extract(context) {
50
+ const projectName = detectProjectName(context.projectRoot);
51
+ const files = collectRelevantFiles(context.projectRoot);
52
+ const configIndex = buildConfigIndex(context.projectRoot, files);
53
+ const entries = [];
54
+ const warnings = new Set();
55
+ for (const filePath of files) {
56
+ if (!SOURCE_EXTENSIONS.has(path.extname(filePath))) {
57
+ continue;
58
+ }
59
+ let content;
60
+ try {
61
+ content = fs.readFileSync(filePath, 'utf-8');
62
+ }
63
+ catch {
64
+ warnings.add(`跳过不可读取文件: ${toPosixPath(path.relative(context.projectRoot, filePath))}`);
65
+ continue;
66
+ }
67
+ entries.push(...extractConfigEntries(context.projectRoot, filePath, content, configIndex));
68
+ entries.push(...extractErrorEntries(context.projectRoot, filePath, content, configIndex));
69
+ }
70
+ const mergedEntries = mergeEntries(entries);
71
+ if (mergedEntries.length < 5) {
72
+ warnings.add(`当前仅提取 ${mergedEntries.length} 条 grounded troubleshooting entries,低于蓝图建议的 5 条`);
73
+ }
74
+ return {
75
+ projectName,
76
+ entries: mergedEntries,
77
+ explanations: buildExplanations(mergedEntries),
78
+ warnings: [...warnings].sort((a, b) => a.localeCompare(b)),
79
+ };
80
+ }
81
+ async generate(input, _options) {
82
+ const entries = input.entries.slice().sort((left, right) => left.title.localeCompare(right.title));
83
+ const explanations = input.explanations.slice().sort((left, right) => left.title.localeCompare(right.title));
84
+ return {
85
+ title: `故障排查 / 原理说明: ${input.projectName}`,
86
+ generatedAt: new Date().toISOString(),
87
+ projectName: input.projectName,
88
+ entries,
89
+ explanations,
90
+ totalEntries: entries.length,
91
+ warnings: input.warnings,
92
+ };
93
+ }
94
+ render(output) {
95
+ const template = loadTemplate('troubleshooting.hbs', import.meta.url);
96
+ return template(output);
97
+ }
98
+ }
99
+ function collectRelevantFiles(projectRoot) {
100
+ const results = [];
101
+ function walk(dir) {
102
+ let entries;
103
+ try {
104
+ entries = fs.readdirSync(dir, { withFileTypes: true });
105
+ }
106
+ catch {
107
+ return;
108
+ }
109
+ for (const entry of entries) {
110
+ const fullPath = path.join(dir, entry.name);
111
+ if (entry.isDirectory()) {
112
+ if (!IGNORE_DIRS.has(entry.name)) {
113
+ walk(fullPath);
114
+ }
115
+ continue;
116
+ }
117
+ if (!entry.isFile()) {
118
+ continue;
119
+ }
120
+ if (SOURCE_EXTENSIONS.has(path.extname(entry.name)) || ENV_FILE_RE.test(entry.name)) {
121
+ results.push(fullPath);
122
+ }
123
+ }
124
+ }
125
+ walk(projectRoot);
126
+ return results.sort((a, b) => a.localeCompare(b));
127
+ }
128
+ function detectProjectName(projectRoot) {
129
+ const packageJsonPath = path.join(projectRoot, 'package.json');
130
+ if (fs.existsSync(packageJsonPath)) {
131
+ try {
132
+ const parsed = JSON.parse(fs.readFileSync(packageJsonPath, 'utf-8'));
133
+ if (parsed.name?.trim()) {
134
+ return parsed.name.trim();
135
+ }
136
+ }
137
+ catch {
138
+ // ignore
139
+ }
140
+ }
141
+ return path.basename(projectRoot);
142
+ }
143
+ function buildConfigIndex(projectRoot, files) {
144
+ const index = new Map();
145
+ for (const filePath of files) {
146
+ if (!ENV_FILE_RE.test(path.basename(filePath))) {
147
+ continue;
148
+ }
149
+ let content;
150
+ try {
151
+ content = fs.readFileSync(filePath, 'utf-8');
152
+ }
153
+ catch {
154
+ continue;
155
+ }
156
+ const relFile = toPosixPath(path.relative(projectRoot, filePath));
157
+ const lines = content.split(/\r?\n/);
158
+ for (let lineIndex = 0; lineIndex < lines.length; lineIndex++) {
159
+ const line = lines[lineIndex] ?? '';
160
+ const match = /^([A-Z][A-Z0-9_]*)\s*=/.exec(line.trim());
161
+ if (!match?.[1]) {
162
+ continue;
163
+ }
164
+ const key = match[1];
165
+ const location = {
166
+ key,
167
+ sourceFile: relFile,
168
+ line: lineIndex + 1,
169
+ symbolName: 'config',
170
+ excerpt: normalizeExcerpt(line),
171
+ };
172
+ index.set(key, [...(index.get(key) ?? []), location]);
173
+ }
174
+ }
175
+ return index;
176
+ }
177
+ function extractConfigEntries(projectRoot, filePath, content, configIndex) {
178
+ const relFile = toPosixPath(path.relative(projectRoot, filePath));
179
+ const lines = content.split(/\r?\n/);
180
+ const entries = [];
181
+ for (let lineIndex = 0; lineIndex < lines.length; lineIndex++) {
182
+ const line = lines[lineIndex] ?? '';
183
+ const keys = extractEnvKeys(line);
184
+ if (keys.length === 0) {
185
+ continue;
186
+ }
187
+ const windowLines = getWindow(lines, lineIndex, 3, 4);
188
+ const errorMessage = findNearbyErrorMessage(windowLines);
189
+ const recoverySteps = inferRecoverySteps(windowLines);
190
+ for (const key of keys) {
191
+ const title = `配置约束: ${key}`;
192
+ const locations = uniqueLocations([
193
+ {
194
+ sourceFile: relFile,
195
+ line: lineIndex + 1,
196
+ symbolName: findNearestSymbol(lines, lineIndex),
197
+ excerpt: normalizeExcerpt(line),
198
+ },
199
+ ...(configIndex.get(key) ?? []),
200
+ ]);
201
+ const possibleCauses = uniqueStrings([
202
+ `${key} 缺失、为空或未注入运行环境`,
203
+ ...(hasInvalidHint(windowLines, errorMessage) ? [`${key} 值不满足代码中的约束检查`] : []),
204
+ ]);
205
+ const configSteps = [
206
+ `检查并设置 \`${key}\``,
207
+ ...(configIndex.has(key)
208
+ ? [`核对 ${configIndex.get(key).map((location) => formatLocation(location)).join('、')} 中的示例或默认值`]
209
+ : []),
210
+ ];
211
+ entries.push({
212
+ id: `config:${key}`,
213
+ kind: 'config-constraint',
214
+ title,
215
+ symptom: errorMessage ? `配置错误时出现: ${errorMessage}` : `依赖 \`${key}\` 的功能在缺失或非法时会失败`,
216
+ possibleCauses,
217
+ recoverySteps: uniqueStrings([
218
+ ...configSteps,
219
+ ...recoverySteps,
220
+ `定位并检查 ${formatLocation(locations[0])} 的约束实现`,
221
+ ]),
222
+ relatedLocations: locations,
223
+ configKeys: [key],
224
+ evidence: uniqueStrings([
225
+ normalizeExcerpt(line),
226
+ ...(errorMessage ? [errorMessage] : []),
227
+ ]),
228
+ confidence: errorMessage ? 'high' : 'medium',
229
+ });
230
+ }
231
+ }
232
+ return entries;
233
+ }
234
+ function extractErrorEntries(projectRoot, filePath, content, configIndex) {
235
+ const relFile = toPosixPath(path.relative(projectRoot, filePath));
236
+ const lines = content.split(/\r?\n/);
237
+ const entries = [];
238
+ for (let lineIndex = 0; lineIndex < lines.length; lineIndex++) {
239
+ const line = lines[lineIndex] ?? '';
240
+ const message = findErrorMessage(line);
241
+ if (!message) {
242
+ continue;
243
+ }
244
+ const windowLines = getWindow(lines, lineIndex, 3, 4);
245
+ const keys = extractEnvKeys(windowLines.join('\n'));
246
+ if (keys.length > 0) {
247
+ continue;
248
+ }
249
+ const recoverySteps = inferRecoverySteps(windowLines);
250
+ const locations = uniqueLocations([{
251
+ sourceFile: relFile,
252
+ line: lineIndex + 1,
253
+ symbolName: findNearestSymbol(lines, lineIndex),
254
+ excerpt: normalizeExcerpt(line),
255
+ }]);
256
+ entries.push({
257
+ id: `error:${slugify(message)}`,
258
+ kind: 'error-pattern',
259
+ title: `故障: ${message}`,
260
+ symptom: message,
261
+ possibleCauses: uniqueStrings([
262
+ '相关代码路径中的前置条件、输入或外部依赖未满足',
263
+ ...(recoverySteps.length > 0 ? ['代码中已显式为该场景预留恢复路径'] : []),
264
+ ]),
265
+ recoverySteps: uniqueStrings([
266
+ ...recoverySteps,
267
+ `定位并检查 ${formatLocation(locations[0])} 的前置条件和上游输入`,
268
+ ]),
269
+ relatedLocations: locations,
270
+ configKeys: [],
271
+ evidence: uniqueStrings([
272
+ message,
273
+ normalizeExcerpt(line),
274
+ ]),
275
+ confidence: recoverySteps.length > 0 ? 'high' : 'medium',
276
+ });
277
+ }
278
+ return entries;
279
+ }
280
+ function mergeEntries(entries) {
281
+ const merged = new Map();
282
+ for (const entry of entries) {
283
+ const current = merged.get(entry.id);
284
+ if (!current) {
285
+ merged.set(entry.id, {
286
+ ...entry,
287
+ possibleCauses: uniqueStrings(entry.possibleCauses),
288
+ recoverySteps: uniqueStrings(entry.recoverySteps),
289
+ relatedLocations: uniqueLocations(entry.relatedLocations),
290
+ configKeys: uniqueStrings(entry.configKeys),
291
+ evidence: uniqueStrings(entry.evidence),
292
+ });
293
+ continue;
294
+ }
295
+ merged.set(entry.id, {
296
+ ...current,
297
+ confidence: current.confidence === 'high' || entry.confidence === 'high' ? 'high' : 'medium',
298
+ possibleCauses: uniqueStrings([...current.possibleCauses, ...entry.possibleCauses]),
299
+ recoverySteps: uniqueStrings([...current.recoverySteps, ...entry.recoverySteps]),
300
+ relatedLocations: uniqueLocations([...current.relatedLocations, ...entry.relatedLocations]),
301
+ configKeys: uniqueStrings([...current.configKeys, ...entry.configKeys]),
302
+ evidence: uniqueStrings([...current.evidence, ...entry.evidence]),
303
+ });
304
+ }
305
+ return [...merged.values()].sort((left, right) => left.title.localeCompare(right.title));
306
+ }
307
+ function buildExplanations(entries) {
308
+ const explanations = [];
309
+ const configEntries = entries.filter((entry) => entry.kind === 'config-constraint');
310
+ const retryEntries = entries.filter((entry) => hasExplanationSignal(entry, /\bretry|reconnect|backoff|重试|重连|重建/i));
311
+ const fallbackEntries = entries.filter((entry) => hasExplanationSignal(entry, /\bfallback|cache|recover|回退|缓存|恢复/i));
312
+ if (configEntries.length > 0) {
313
+ explanations.push({
314
+ title: '配置校验策略',
315
+ summary: '代码中存在显式配置约束,系统倾向在启动或关键路径早期 fail-fast,而不是静默忽略缺失配置。',
316
+ evidence: configEntries.slice(0, 3).map((entry) => `${entry.title} -> ${entry.evidence[0] ?? entry.symptom}`),
317
+ });
318
+ }
319
+ if (retryEntries.length > 0) {
320
+ explanations.push({
321
+ title: '瞬时故障恢复路径',
322
+ summary: '部分错误路径带有 retry / reconnect / backoff 证据,说明系统预期外部依赖可能暂时不可用,并通过重试机制自愈。',
323
+ evidence: retryEntries.slice(0, 3).map((entry) => `${entry.title} -> ${entry.recoverySteps[0] ?? entry.symptom}`),
324
+ });
325
+ }
326
+ if (fallbackEntries.length > 0) {
327
+ explanations.push({
328
+ title: '降级与回退策略',
329
+ summary: '部分故障条目带有 fallback / recover 证据,说明系统在失败场景下更偏向保持可用性,并提供回退路径。',
330
+ evidence: fallbackEntries.slice(0, 3).map((entry) => `${entry.title} -> ${entry.recoverySteps[0] ?? entry.symptom}`),
331
+ });
332
+ }
333
+ return explanations;
334
+ }
335
+ function hasExplanationSignal(entry, pattern) {
336
+ return entry.recoverySteps.some((step) => pattern.test(step))
337
+ || entry.evidence.some((item) => pattern.test(item));
338
+ }
339
+ function extractEnvKeys(text) {
340
+ const keys = [];
341
+ let match;
342
+ const jsRegex = new RegExp(JS_ENV_RE);
343
+ while ((match = jsRegex.exec(text)) !== null) {
344
+ keys.push(match[1] ?? match[2] ?? '');
345
+ }
346
+ const pyRegex = new RegExp(PY_ENV_RE);
347
+ while ((match = pyRegex.exec(text)) !== null) {
348
+ keys.push(match[2] ?? '');
349
+ }
350
+ const pyMapRegex = new RegExp(PY_ENV_MAP_RE);
351
+ while ((match = pyMapRegex.exec(text)) !== null) {
352
+ keys.push(match[1] ?? '');
353
+ }
354
+ return uniqueStrings(keys.filter(Boolean));
355
+ }
356
+ function findNearbyErrorMessage(lines) {
357
+ for (const line of lines) {
358
+ const message = findErrorMessage(line);
359
+ if (message) {
360
+ return message;
361
+ }
362
+ }
363
+ return undefined;
364
+ }
365
+ function findErrorMessage(line) {
366
+ for (const pattern of ERROR_PATTERNS) {
367
+ const match = pattern.exec(line);
368
+ if (match?.[2]) {
369
+ return match[2].trim();
370
+ }
371
+ }
372
+ return undefined;
373
+ }
374
+ function inferRecoverySteps(lines) {
375
+ const steps = [];
376
+ const joined = lines.join('\n').toLowerCase();
377
+ if (/\bretry|\bbackoff/.test(joined)) {
378
+ steps.push('触发代码内置重试 / 退避路径');
379
+ }
380
+ if (/\breconnect/.test(joined)) {
381
+ steps.push('执行连接重建或重连流程');
382
+ }
383
+ if (/\bfallback|\bcache/.test(joined)) {
384
+ steps.push('切换到代码内置回退 / 缓存路径');
385
+ }
386
+ if (/\brecover|\bresume|\brestart|\breset/.test(joined)) {
387
+ steps.push('执行代码中的恢复 / 重置流程');
388
+ }
389
+ return uniqueStrings(steps);
390
+ }
391
+ function hasInvalidHint(lines, errorMessage) {
392
+ return INVALID_HINT_RE.test(lines.join('\n')) || (errorMessage ? INVALID_HINT_RE.test(errorMessage) : false);
393
+ }
394
+ function findNearestSymbol(lines, lineIndex) {
395
+ for (let index = lineIndex; index >= 0; index--) {
396
+ const line = lines[index]?.trim() ?? '';
397
+ if (!line) {
398
+ continue;
399
+ }
400
+ const functionMatch = /^(?:export\s+)?function\s+([A-Za-z_][A-Za-z0-9_]*)\s*\(/.exec(line)
401
+ ?? /^(?:export\s+)?async\s+function\s+([A-Za-z_][A-Za-z0-9_]*)\s*\(/.exec(line)
402
+ ?? /^(?:export\s+)?const\s+([A-Za-z_][A-Za-z0-9_]*)\s*=\s*(?:async\s*)?\(/.exec(line)
403
+ ?? /^(?:async\s+)?def\s+([A-Za-z_][A-Za-z0-9_]*)\s*\(/.exec(line)
404
+ ?? /^class\s+([A-Za-z_][A-Za-z0-9_]*)\b/.exec(line);
405
+ if (functionMatch?.[1]) {
406
+ return functionMatch[1];
407
+ }
408
+ }
409
+ return 'anonymous';
410
+ }
411
+ function getWindow(lines, lineIndex, before, after) {
412
+ return lines.slice(Math.max(0, lineIndex - before), Math.min(lines.length, lineIndex + after + 1));
413
+ }
414
+ function normalizeExcerpt(line) {
415
+ return line.trim().replace(/\s+/g, ' ').slice(0, 160);
416
+ }
417
+ function formatLocation(location) {
418
+ return `\`${location.sourceFile}:${location.line}\` (${location.symbolName})`;
419
+ }
420
+ function uniqueStrings(values) {
421
+ return [...new Set(values.map((value) => value.trim()).filter((value) => value.length > 0))]
422
+ .sort((a, b) => a.localeCompare(b));
423
+ }
424
+ function uniqueLocations(values) {
425
+ const seen = new Set();
426
+ const items = [];
427
+ for (const value of values) {
428
+ const key = `${value.sourceFile}:${value.line}:${value.symbolName}:${value.excerpt}`;
429
+ if (seen.has(key)) {
430
+ continue;
431
+ }
432
+ seen.add(key);
433
+ items.push(value);
434
+ }
435
+ return items.sort((left, right) => {
436
+ const a = `${left.sourceFile}:${left.line}:${left.symbolName}`;
437
+ const b = `${right.sourceFile}:${right.line}:${right.symbolName}`;
438
+ return a.localeCompare(b);
439
+ });
440
+ }
441
+ function slugify(input) {
442
+ return input
443
+ .toLowerCase()
444
+ .replace(/[^a-z0-9]+/g, '-')
445
+ .replace(/^-+|-+$/g, '')
446
+ .slice(0, 64) || 'entry';
447
+ }
448
+ function toPosixPath(filePath) {
449
+ return filePath.replace(/\\/g, '/');
450
+ }
451
+ //# sourceMappingURL=troubleshooting-generator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"troubleshooting-generator.js","sourceRoot":"","sources":["../../src/panoramic/troubleshooting-generator.ts"],"names":[],"mappings":"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"}
@@ -47,4 +47,19 @@ export declare function isDescriptiveText(text: string, options?: {
47
47
  minLength?: number;
48
48
  linkThreshold?: number;
49
49
  }): boolean;
50
+ /**
51
+ * 计算文本中 CJK(中日韩 Unicode 范围)字符占总字符比率。
52
+ * 用于检测英文 README 段落污染中文文档(Feature 147 bug fix)。
53
+ *
54
+ * 仅计入 letter-like 字符(CJK + ASCII letters),排除空白/标点/数字。
55
+ * 这样 "Hello 你好" 的 CJK ratio = 2/7 ≈ 0.29,不是 2/12。
56
+ *
57
+ * Returns 0..1; 0 = 全英文/无 CJK,1 = 全中文。
58
+ */
59
+ export declare function cjkRatio(text: string): number;
60
+ /**
61
+ * 判断文本是否"主要是中文"。默认 ≥30% CJK 即视为中文段落。
62
+ * < 30% 视为非中文(英文 README、技术术语堆叠等),生成器应明确标注语言来源。
63
+ */
64
+ export declare function isMostlyChinese(text: string, threshold?: number): boolean;
50
65
  //# sourceMappingURL=text-segmenter.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"text-segmenter.d.ts","sourceRoot":"","sources":["../../../src/panoramic/utils/text-segmenter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAqBH;;;GAGG;AACH,wBAAgB,WAAW,CACzB,IAAI,EAAE,MAAM,EACZ,WAAW,GAAE,UAAU,GAAG,MAAM,GAAG,UAAmB,GACrD,MAAM,EAAE,CAaV;AAaD;;;;;;;;;GASG;AACH,wBAAgB,yBAAyB,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAgC9E;AAED;;;;;;;GAOG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,SAAM,GAAG,OAAO,CAY3E;AAED;;;;;;;;GAQG;AACH,wBAAgB,iBAAiB,CAC/B,IAAI,EAAE,MAAM,EACZ,OAAO,GAAE;IAAE,SAAS,CAAC,EAAE,MAAM,CAAC;IAAC,aAAa,CAAC,EAAE,MAAM,CAAA;CAAO,GAC3D,OAAO,CAaT"}
1
+ {"version":3,"file":"text-segmenter.d.ts","sourceRoot":"","sources":["../../../src/panoramic/utils/text-segmenter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAqBH;;;GAGG;AACH,wBAAgB,WAAW,CACzB,IAAI,EAAE,MAAM,EACZ,WAAW,GAAE,UAAU,GAAG,MAAM,GAAG,UAAmB,GACrD,MAAM,EAAE,CAaV;AAaD;;;;;;;;;GASG;AACH,wBAAgB,yBAAyB,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAgC9E;AAED;;;;;;;GAOG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,SAAM,GAAG,OAAO,CAY3E;AAED;;;;;;;;GAQG;AACH,wBAAgB,iBAAiB,CAC/B,IAAI,EAAE,MAAM,EACZ,OAAO,GAAE;IAAE,SAAS,CAAC,EAAE,MAAM,CAAC;IAAC,aAAa,CAAC,EAAE,MAAM,CAAA;CAAO,GAC3D,OAAO,CAaT;AAED;;;;;;;;GAQG;AACH,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAqB7C;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,GAAE,MAAY,GAAG,OAAO,CAE9E"}
@@ -148,4 +148,42 @@ export function isDescriptiveText(text, options = {}) {
148
148
  return false;
149
149
  return true;
150
150
  }
151
+ /**
152
+ * 计算文本中 CJK(中日韩 Unicode 范围)字符占总字符比率。
153
+ * 用于检测英文 README 段落污染中文文档(Feature 147 bug fix)。
154
+ *
155
+ * 仅计入 letter-like 字符(CJK + ASCII letters),排除空白/标点/数字。
156
+ * 这样 "Hello 你好" 的 CJK ratio = 2/7 ≈ 0.29,不是 2/12。
157
+ *
158
+ * Returns 0..1; 0 = 全英文/无 CJK,1 = 全中文。
159
+ */
160
+ export function cjkRatio(text) {
161
+ let cjkCount = 0;
162
+ let asciiAlphaCount = 0;
163
+ for (const ch of text) {
164
+ const code = ch.codePointAt(0);
165
+ // CJK Unified Ideographs + ext A/B + Kana + Hangul(覆盖中日韩)
166
+ if ((code >= 0x4e00 && code <= 0x9fff) ||
167
+ (code >= 0x3400 && code <= 0x4dbf) ||
168
+ (code >= 0x20000 && code <= 0x2a6df) ||
169
+ (code >= 0x3040 && code <= 0x30ff) ||
170
+ (code >= 0xac00 && code <= 0xd7af)) {
171
+ cjkCount++;
172
+ }
173
+ else if ((code >= 0x41 && code <= 0x5a) || (code >= 0x61 && code <= 0x7a)) {
174
+ asciiAlphaCount++;
175
+ }
176
+ }
177
+ const total = cjkCount + asciiAlphaCount;
178
+ if (total === 0)
179
+ return 0;
180
+ return cjkCount / total;
181
+ }
182
+ /**
183
+ * 判断文本是否"主要是中文"。默认 ≥30% CJK 即视为中文段落。
184
+ * < 30% 视为非中文(英文 README、技术术语堆叠等),生成器应明确标注语言来源。
185
+ */
186
+ export function isMostlyChinese(text, threshold = 0.3) {
187
+ return cjkRatio(text) >= threshold;
188
+ }
151
189
  //# sourceMappingURL=text-segmenter.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"text-segmenter.js","sourceRoot":"","sources":["../../../src/panoramic/utils/text-segmenter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,yCAAyC;AACzC,MAAM,cAAc,GAAG,IAAI,GAAG,EAA0B,CAAC;AAEzD,qCAAqC;AACrC,SAAS,YAAY,CAAC,WAA6C;IACjE,IAAI,OAAO,IAAI,KAAK,WAAW,IAAI,OAAO,IAAI,CAAC,SAAS,KAAK,UAAU,EAAE,CAAC;QACxE,OAAO,IAAI,CAAC;IACd,CAAC;IACD,MAAM,MAAM,GAAG,cAAc,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;IAC/C,IAAI,MAAM;QAAE,OAAO,MAAM,CAAC;IAC1B,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,IAAI,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE,EAAE,WAAW,EAAE,CAAC,CAAC;QAC3D,cAAc,CAAC,GAAG,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC;QACrC,OAAO,GAAG,CAAC;IACb,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,WAAW,CACzB,IAAY,EACZ,cAAgD,MAAM;IAEtD,IAAI,CAAC,IAAI;QAAE,OAAO,EAAE,CAAC;IACrB,MAAM,SAAS,GAAG,YAAY,CAAC,WAAW,CAAC,CAAC;IAC5C,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,mBAAmB;QACnB,IAAI,WAAW,KAAK,UAAU;YAAE,OAAO,CAAC,GAAG,IAAI,CAAC,CAAC;QACjD,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAC3C,CAAC;IACD,MAAM,QAAQ,GAAa,EAAE,CAAC;IAC9B,KAAK,MAAM,GAAG,IAAI,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;QAC1C,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IAC7B,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,kCAAkC;AAClC,MAAM,sBAAsB,GAAG,IAAI,GAAG,CAAC;IACrC,GAAG,EAAE,IAAI,EAAE,IAAI;IACf,OAAO;IACP,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;IAC5B,SAAS;IACT,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;IAC3C,eAAe;IACf,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;CAClC,CAAC,CAAC;AAEH;;;;;;;;;GASG;AACH,MAAM,UAAU,yBAAyB,CAAC,IAAY,EAAE,MAAc;IACpE,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,MAAM,IAAI,MAAM;QAAE,OAAO,IAAI,CAAC;IAChD,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC;IAExC,sBAAsB;IACtB,KAAK,IAAI,CAAC,GAAG,MAAM,EAAE,CAAC,IAAI,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACtC,MAAM,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;QACnB,IAAI,EAAE,IAAI,sBAAsB,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC;YACzC,mBAAmB;YACnB,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,EAAE,GAAG,CAAC;QAC1C,CAAC;IACH,CAAC;IAED,iDAAiD;IACjD,MAAM,SAAS,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC;IACvC,IAAI,SAAS,EAAE,CAAC;QACd,IAAI,OAAO,GAAG,CAAC,CAAC,CAAC;QACjB,KAAK,MAAM,GAAG,IAAI,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;YAC1C,yCAAyC;YACzC,IAAI,GAAG,CAAC,KAAK,GAAG,MAAM,IAAI,GAAG,CAAC,KAAK,IAAI,MAAM,EAAE,CAAC;gBAC9C,OAAO,GAAG,GAAG,CAAC,KAAK,CAAC;YACtB,CAAC;iBAAM,IAAI,GAAG,CAAC,KAAK,GAAG,MAAM,EAAE,CAAC;gBAC9B,MAAM;YACR,CAAC;QACH,CAAC;QACD,IAAI,OAAO,GAAG,CAAC,EAAE,CAAC;YAChB,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,OAAO,EAAE,GAAG,CAAC;QAChD,CAAC;IACH,CAAC;IAED,8BAA8B;IAC9B,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,OAAO,EAAE,GAAG,CAAC;AAC/C,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,oBAAoB,CAAC,IAAY,EAAE,SAAS,GAAG,GAAG;IAChE,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;IAC5B,IAAI,CAAC,OAAO;QAAE,OAAO,KAAK,CAAC;IAE3B,MAAM,WAAW,GAAG,sBAAsB,CAAC;IAC3C,IAAI,aAAa,GAAG,CAAC,CAAC;IACtB,KAAK,MAAM,KAAK,IAAI,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC;QAClD,aAAa,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;IACnC,CAAC;IACD,IAAI,aAAa,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IAEtC,OAAO,aAAa,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC;AACpD,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,iBAAiB,CAC/B,IAAY,EACZ,UAA0D,EAAE;IAE5D,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS,IAAI,EAAE,CAAC;IAC1C,MAAM,aAAa,GAAG,OAAO,CAAC,aAAa,IAAI,GAAG,CAAC;IAEnD,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;IAC5B,IAAI,OAAO,CAAC,MAAM,GAAG,SAAS;QAAE,OAAO,KAAK,CAAC;IAC7C,IAAI,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC;QAAE,OAAO,KAAK,CAAC;IAC1C,IAAI,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC;QAAE,OAAO,KAAK,CAAC;IAC1C,IAAI,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC;QAAE,OAAO,KAAK,CAAC;IAC3C,IAAI,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC;QAAE,OAAO,KAAK,CAAC;IAC1C,IAAI,oBAAoB,CAAC,OAAO,EAAE,aAAa,CAAC;QAAE,OAAO,KAAK,CAAC;IAE/D,OAAO,IAAI,CAAC;AACd,CAAC"}
1
+ {"version":3,"file":"text-segmenter.js","sourceRoot":"","sources":["../../../src/panoramic/utils/text-segmenter.ts"],"names":[],"mappings":"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"}