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,148 @@
1
+ import type { DocumentGenerator, ProjectContext, GenerateOptions } from './interfaces.js';
2
+ /**
3
+ * 单个子包的元信息
4
+ * 从子包的 package.json(npm/pnpm)或 pyproject.toml(uv)中提取
5
+ */
6
+ export interface WorkspacePackageInfo {
7
+ /** 包名(如 "@scope/core"、"octoagent-core") */
8
+ name: string;
9
+ /** 子包相对于 projectRoot 的路径(如 "packages/core") */
10
+ path: string;
11
+ /** 包描述(来自 description 字段,缺失时为空字符串) */
12
+ description: string;
13
+ /** 主要语言(TypeScript / JavaScript / Python / Unknown) */
14
+ language: string;
15
+ /** workspace 内部依赖列表(仅包名,不含版本) */
16
+ dependencies: string[];
17
+ }
18
+ /**
19
+ * extract() 步骤的输出
20
+ * 包含项目级信息和所有子包的元信息列表
21
+ */
22
+ export interface WorkspaceInput {
23
+ /** 项目名称(来自根 package.json 或 pyproject.toml,降级为目录名) */
24
+ projectName: string;
25
+ /** workspace 管理器类型 */
26
+ workspaceType: 'npm' | 'pnpm' | 'uv';
27
+ /** 所有子包的元信息列表 */
28
+ packages: WorkspacePackageInfo[];
29
+ }
30
+ /**
31
+ * 按路径第一级目录分组的子包集合
32
+ */
33
+ export interface WorkspaceGroup {
34
+ /** 分组名称(第一级目录名,如 "packages"、"apps") */
35
+ name: string;
36
+ /** 该分组下的子包列表 */
37
+ packages: WorkspacePackageInfo[];
38
+ }
39
+ /**
40
+ * generate() 步骤的输出
41
+ * 包含渲染模板所需的全部数据
42
+ */
43
+ export interface WorkspaceOutput {
44
+ /** 文档标题(如 "Workspace 架构索引: my-project") */
45
+ title: string;
46
+ /** 项目名称 */
47
+ projectName: string;
48
+ /** 生成日期(YYYY-MM-DD 格式) */
49
+ generatedAt: string;
50
+ /** 所有子包信息(按路径排序) */
51
+ packages: WorkspacePackageInfo[];
52
+ /** Mermaid graph TD 依赖拓扑图源代码 */
53
+ dependencyDiagram: string;
54
+ /** 子包总数 */
55
+ totalPackages: number;
56
+ /** 按层级目录分组的子包 */
57
+ groups: WorkspaceGroup[];
58
+ }
59
+ /**
60
+ * 展开 glob 模式为实际目录路径列表(T004)
61
+ * 仅支持 `*` 通配符匹配单层目录名
62
+ * 精确路径(不含 `*`)直接返回(如果存在)
63
+ * 不存在的目录静默跳过
64
+ *
65
+ * @param projectRoot - 项目根目录
66
+ * @param patterns - glob 模式列表(如 ["packages/*", "apps/gateway"])
67
+ * @returns 展开后的绝对目录路径列表
68
+ */
69
+ declare function expandGlobPatterns(projectRoot: string, patterns: string[]): string[];
70
+ /**
71
+ * 正则解析 pnpm-workspace.yaml 的 packages 列表(T005)
72
+ * 逐行解析 `- "pattern"` 或 `- 'pattern'` 或 `- pattern` 条目
73
+ *
74
+ * @param content - pnpm-workspace.yaml 文件内容
75
+ * @returns packages 列表
76
+ */
77
+ declare function parsePnpmWorkspaceYaml(content: string): string[];
78
+ /**
79
+ * 正则解析 pyproject.toml 的 [tool.uv.workspace] 段中 members 列表(T006)
80
+ *
81
+ * @param content - pyproject.toml 文件内容
82
+ * @returns members 列表
83
+ */
84
+ declare function parseUvWorkspaceToml(content: string): string[];
85
+ /**
86
+ * 根据目录内文件特征推断主要语言(T007)
87
+ *
88
+ * @param packageDir - 子包目录绝对路径
89
+ * @returns 推断的语言名称
90
+ */
91
+ declare function detectLanguage(packageDir: string): string;
92
+ /**
93
+ * 从子包 pyproject.toml 提取元信息(T021)
94
+ *
95
+ * @param packageDir - 子包目录绝对路径
96
+ * @param allPackageNames - workspace 中所有子包名的集合,用于匹配内部依赖
97
+ * @returns 子包元信息,解析失败返回 null
98
+ */
99
+ declare function extractPyprojectInfo(packageDir: string, allPackageNames: Set<string>): WorkspacePackageInfo | null;
100
+ /**
101
+ * 构建 Mermaid graph TD 依赖拓扑图(T030, T031)
102
+ *
103
+ * @param packages - 所有子包的元信息列表
104
+ * @returns Mermaid 源代码字符串
105
+ */
106
+ declare function buildMermaidDiagram(packages: WorkspacePackageInfo[]): string;
107
+ /**
108
+ * 从项目中提取 workspace 信息(T012-T014, T020-T022)
109
+ * 检测 workspace 管理器类型,解析 members 列表,读取子包元信息
110
+ *
111
+ * 此函数为纯函数(不依赖 this),供 WorkspaceIndexGenerator.extract()
112
+ * 和 CrossPackageAnalyzer.extract() 直接调用,避免重复实例化 Generator。
113
+ *
114
+ * @param context - 项目上下文
115
+ * @returns workspace 信息(项目名、管理器类型、子包列表)
116
+ */
117
+ export declare function extractWorkspaceData(context: ProjectContext): WorkspaceInput;
118
+ /**
119
+ * Monorepo 层级架构索引生成器
120
+ * 实现 DocumentGenerator<WorkspaceInput, WorkspaceOutput> 接口。
121
+ * 从 Monorepo 项目中提取所有子包信息,生成层级索引文档和 Mermaid 依赖图。
122
+ */
123
+ export declare class WorkspaceIndexGenerator implements DocumentGenerator<WorkspaceInput, WorkspaceOutput> {
124
+ readonly id: "workspace-index";
125
+ readonly name: "Monorepo \u5C42\u7EA7\u67B6\u6784\u7D22\u5F15\u751F\u6210\u5668";
126
+ readonly description = "\u4E3A Monorepo \u9879\u76EE\u751F\u6210 packages/apps \u5C42\u7EA7\u7D22\u5F15\u6587\u6863\uFF0C\u5305\u542B\u5B50\u5305\u5217\u8868\u548C Mermaid \u5305\u7EA7\u4F9D\u8D56\u62D3\u6251\u56FE";
127
+ /**
128
+ * 判断当前项目是否适用此 Generator(T025)
129
+ * 仅当 workspaceType === 'monorepo' 时返回 true
130
+ */
131
+ isApplicable(context: ProjectContext): boolean;
132
+ /**
133
+ * 从项目中提取 workspace 信息(T012-T014, T020-T022)
134
+ * 委托给独立函数 extractWorkspaceData(),便于跨 Generator 复用
135
+ */
136
+ extract(context: ProjectContext): Promise<WorkspaceInput>;
137
+ /**
138
+ * 将提取的数据转换为结构化文档输出(T015, T030)
139
+ */
140
+ generate(input: WorkspaceInput, _options?: GenerateOptions): Promise<WorkspaceOutput>;
141
+ /**
142
+ * 使用 Handlebars 模板渲染为 Markdown(T016, T035)
143
+ */
144
+ render(output: WorkspaceOutput): string;
145
+ }
146
+ export { sanitizeMermaidId as _sanitizeMermaidId } from './utils/mermaid-helpers.js';
147
+ export { expandGlobPatterns as _expandGlobPatterns, parsePnpmWorkspaceYaml as _parsePnpmWorkspaceYaml, parseUvWorkspaceToml as _parseUvWorkspaceToml, detectLanguage as _detectLanguage, buildMermaidDiagram as _buildMermaidDiagram, extractPyprojectInfo as _extractPyprojectInfo, };
148
+ //# sourceMappingURL=workspace-index-generator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workspace-index-generator.d.ts","sourceRoot":"","sources":["../../src/panoramic/workspace-index-generator.ts"],"names":[],"mappings":"AAqBA,OAAO,KAAK,EAAE,iBAAiB,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAQ1F;;;GAGG;AACH,MAAM,WAAW,oBAAoB;IACnC,2CAA2C;IAC3C,IAAI,EAAE,MAAM,CAAC;IAEb,+CAA+C;IAC/C,IAAI,EAAE,MAAM,CAAC;IAEb,sCAAsC;IACtC,WAAW,EAAE,MAAM,CAAC;IAEpB,uDAAuD;IACvD,QAAQ,EAAE,MAAM,CAAC;IAEjB,iCAAiC;IACjC,YAAY,EAAE,MAAM,EAAE,CAAC;CACxB;AAED;;;GAGG;AACH,MAAM,WAAW,cAAc;IAC7B,qDAAqD;IACrD,WAAW,EAAE,MAAM,CAAC;IAEpB,sBAAsB;IACtB,aAAa,EAAE,KAAK,GAAG,MAAM,GAAG,IAAI,CAAC;IAErC,iBAAiB;IACjB,QAAQ,EAAE,oBAAoB,EAAE,CAAC;CAClC;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,uCAAuC;IACvC,IAAI,EAAE,MAAM,CAAC;IAEb,gBAAgB;IAChB,QAAQ,EAAE,oBAAoB,EAAE,CAAC;CAClC;AAED;;;GAGG;AACH,MAAM,WAAW,eAAe;IAC9B,2CAA2C;IAC3C,KAAK,EAAE,MAAM,CAAC;IAEd,WAAW;IACX,WAAW,EAAE,MAAM,CAAC;IAEpB,0BAA0B;IAC1B,WAAW,EAAE,MAAM,CAAC;IAEpB,oBAAoB;IACpB,QAAQ,EAAE,oBAAoB,EAAE,CAAC;IAEjC,gCAAgC;IAChC,iBAAiB,EAAE,MAAM,CAAC;IAE1B,WAAW;IACX,aAAa,EAAE,MAAM,CAAC;IAEtB,iBAAiB;IACjB,MAAM,EAAE,cAAc,EAAE,CAAC;CAC1B;AAMD;;;;;;;;;GASG;AACH,iBAAS,kBAAkB,CAAC,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,CA2C7E;AAED;;;;;;GAMG;AACH,iBAAS,sBAAsB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,CAqCzD;AAED;;;;;GAKG;AACH,iBAAS,oBAAoB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,CAsBvD;AAED;;;;;GAKG;AACH,iBAAS,cAAc,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAalD;AAED;;;;;;GAMG;AACH,iBAAS,oBAAoB,CAC3B,UAAU,EAAE,MAAM,EAClB,eAAe,EAAE,GAAG,CAAC,MAAM,CAAC,GAC3B,oBAAoB,GAAG,IAAI,CAkD7B;AAED;;;;;GAKG;AACH,iBAAS,mBAAmB,CAAC,QAAQ,EAAE,oBAAoB,EAAE,GAAG,MAAM,CA0BrE;AAMD;;;;;;;;;GASG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,cAAc,GAAG,cAAc,CAqL5E;AAMD;;;;GAIG;AACH,qBAAa,uBACX,YAAW,iBAAiB,CAAC,cAAc,EAAE,eAAe,CAAC;IAE7D,QAAQ,CAAC,EAAE,EAAG,iBAAiB,CAAU;IACzC,QAAQ,CAAC,IAAI,EAAG,iEAAoB,CAAU;IAC9C,QAAQ,CAAC,WAAW,oMAAkE;IAEtF;;;OAGG;IACH,YAAY,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO;IAI9C;;;OAGG;IACG,OAAO,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,cAAc,CAAC;IAI/D;;OAEG;IACG,QAAQ,CACZ,KAAK,EAAE,cAAc,EACrB,QAAQ,CAAC,EAAE,eAAe,GACzB,OAAO,CAAC,eAAe,CAAC;IAoC3B;;OAEG;IACH,MAAM,CAAC,MAAM,EAAE,eAAe,GAAG,MAAM;CAIxC;AAGD,OAAO,EAAE,iBAAiB,IAAI,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAGrF,OAAO,EACL,kBAAkB,IAAI,mBAAmB,EACzC,sBAAsB,IAAI,uBAAuB,EACjD,oBAAoB,IAAI,qBAAqB,EAC7C,cAAc,IAAI,eAAe,EACjC,mBAAmB,IAAI,oBAAoB,EAC3C,oBAAoB,IAAI,qBAAqB,GAC9C,CAAC"}
@@ -0,0 +1,497 @@
1
+ /**
2
+ * WorkspaceIndexGenerator -- Monorepo 层级架构索引生成器
3
+ *
4
+ * 为 Monorepo 项目生成 packages/apps 层级索引文档。
5
+ * 实现 DocumentGenerator<WorkspaceInput, WorkspaceOutput> 接口。
6
+ *
7
+ * 支持的 workspace 管理器:
8
+ * - npm workspaces(package.json workspaces 字段)
9
+ * - pnpm workspaces(pnpm-workspace.yaml)
10
+ * - uv workspaces(pyproject.toml [tool.uv.workspace] 段)
11
+ *
12
+ * 技术决策:
13
+ * - 纯 fs.readdirSync 展开 glob 模式,不引入 glob 库
14
+ * - 纯正则解析 pnpm-workspace.yaml,不引入 YAML 库
15
+ * - 纯正则解析 pyproject.toml,不引入 TOML 库
16
+ * - Handlebars 模板渲染输出 Markdown
17
+ *
18
+ * @module panoramic/workspace-index-generator
19
+ */
20
+ import * as fs from 'node:fs';
21
+ import * as path from 'node:path';
22
+ import { loadTemplate } from './utils/template-loader.js';
23
+ import { sanitizeMermaidId } from './utils/mermaid-helpers.js';
24
+ // ============================================================
25
+ // 私有辅助函数
26
+ // ============================================================
27
+ /**
28
+ * 展开 glob 模式为实际目录路径列表(T004)
29
+ * 仅支持 `*` 通配符匹配单层目录名
30
+ * 精确路径(不含 `*`)直接返回(如果存在)
31
+ * 不存在的目录静默跳过
32
+ *
33
+ * @param projectRoot - 项目根目录
34
+ * @param patterns - glob 模式列表(如 ["packages/*", "apps/gateway"])
35
+ * @returns 展开后的绝对目录路径列表
36
+ */
37
+ function expandGlobPatterns(projectRoot, patterns) {
38
+ const result = [];
39
+ for (const pattern of patterns) {
40
+ // 检查是否包含 * 通配符
41
+ if (pattern.includes('*')) {
42
+ // 拆分为父目录和通配部分
43
+ // 支持 "packages/*" 模式——仅末尾单层通配
44
+ const parts = pattern.split('/');
45
+ const starIndex = parts.findIndex((p) => p.includes('*'));
46
+ if (starIndex < 0)
47
+ continue;
48
+ // 构建父目录路径
49
+ const parentParts = parts.slice(0, starIndex);
50
+ const parentDir = path.join(projectRoot, ...parentParts);
51
+ // 通配后是否还有后续路径部分
52
+ const suffixParts = parts.slice(starIndex + 1);
53
+ try {
54
+ const entries = fs.readdirSync(parentDir, { withFileTypes: true });
55
+ for (const entry of entries) {
56
+ if (entry.isDirectory() && !entry.name.startsWith('.')) {
57
+ const fullPath = path.join(parentDir, entry.name, ...suffixParts);
58
+ // 验证展开后的路径是否实际存在
59
+ if (fs.existsSync(fullPath)) {
60
+ result.push(fullPath);
61
+ }
62
+ }
63
+ }
64
+ }
65
+ catch {
66
+ // 父目录不存在或不可读,静默跳过
67
+ }
68
+ }
69
+ else {
70
+ // 精确路径,直接检查存在性
71
+ const fullPath = path.join(projectRoot, pattern);
72
+ if (fs.existsSync(fullPath)) {
73
+ result.push(fullPath);
74
+ }
75
+ }
76
+ }
77
+ return result;
78
+ }
79
+ /**
80
+ * 正则解析 pnpm-workspace.yaml 的 packages 列表(T005)
81
+ * 逐行解析 `- "pattern"` 或 `- 'pattern'` 或 `- pattern` 条目
82
+ *
83
+ * @param content - pnpm-workspace.yaml 文件内容
84
+ * @returns packages 列表
85
+ */
86
+ function parsePnpmWorkspaceYaml(content) {
87
+ const result = [];
88
+ const lines = content.split('\n');
89
+ let inPackages = false;
90
+ for (const line of lines) {
91
+ const trimmed = line.trim();
92
+ // 检测 packages: 段开始
93
+ if (/^packages\s*:/.test(trimmed)) {
94
+ inPackages = true;
95
+ continue;
96
+ }
97
+ // 如果当前在 packages 段中
98
+ if (inPackages) {
99
+ // 空行或注释跳过
100
+ if (trimmed === '' || trimmed.startsWith('#')) {
101
+ continue;
102
+ }
103
+ // 检测列表项 - "pattern" / - 'pattern' / - pattern
104
+ const match = trimmed.match(/^-\s+["']?([^"'\s]+)["']?\s*$/);
105
+ if (match) {
106
+ result.push(match[1]);
107
+ continue;
108
+ }
109
+ // 遇到非列表项且非空行,说明 packages 段结束
110
+ if (!trimmed.startsWith('-')) {
111
+ inPackages = false;
112
+ }
113
+ }
114
+ }
115
+ return result;
116
+ }
117
+ /**
118
+ * 正则解析 pyproject.toml 的 [tool.uv.workspace] 段中 members 列表(T006)
119
+ *
120
+ * @param content - pyproject.toml 文件内容
121
+ * @returns members 列表
122
+ */
123
+ function parseUvWorkspaceToml(content) {
124
+ // 查找 [tool.uv.workspace] 段,提取到下一个 [section] 头之前的内容
125
+ const sectionMatch = content.match(/\[tool\.uv\.workspace\]([\s\S]*?)(?=\n\[(?!\])|$)/);
126
+ if (!sectionMatch)
127
+ return [];
128
+ const section = sectionMatch[1];
129
+ // 提取 members = [...] 列表
130
+ const membersMatch = section.match(/members\s*=\s*\[([\s\S]*?)\]/);
131
+ if (!membersMatch)
132
+ return [];
133
+ const membersContent = membersMatch[1];
134
+ const result = [];
135
+ // 逐项提取被引号包裹的值
136
+ const itemPattern = /["']([^"']+)["']/g;
137
+ let match;
138
+ while ((match = itemPattern.exec(membersContent)) !== null) {
139
+ result.push(match[1]);
140
+ }
141
+ return result;
142
+ }
143
+ /**
144
+ * 根据目录内文件特征推断主要语言(T007)
145
+ *
146
+ * @param packageDir - 子包目录绝对路径
147
+ * @returns 推断的语言名称
148
+ */
149
+ function detectLanguage(packageDir) {
150
+ try {
151
+ const entries = fs.readdirSync(packageDir);
152
+ const fileSet = new Set(entries);
153
+ if (fileSet.has('tsconfig.json'))
154
+ return 'TypeScript';
155
+ if (fileSet.has('package.json'))
156
+ return 'JavaScript';
157
+ if (fileSet.has('pyproject.toml'))
158
+ return 'Python';
159
+ return 'Unknown';
160
+ }
161
+ catch {
162
+ return 'Unknown';
163
+ }
164
+ }
165
+ /**
166
+ * 从子包 pyproject.toml 提取元信息(T021)
167
+ *
168
+ * @param packageDir - 子包目录绝对路径
169
+ * @param allPackageNames - workspace 中所有子包名的集合,用于匹配内部依赖
170
+ * @returns 子包元信息,解析失败返回 null
171
+ */
172
+ function extractPyprojectInfo(packageDir, allPackageNames) {
173
+ const pyprojectPath = path.join(packageDir, 'pyproject.toml');
174
+ let content;
175
+ try {
176
+ content = fs.readFileSync(pyprojectPath, 'utf-8');
177
+ }
178
+ catch {
179
+ return null;
180
+ }
181
+ // 提取 [project] 段(从 [project] 到下一个 [section] 头之前)
182
+ const projectSectionMatch = content.match(/\[project\]([\s\S]*?)(?=\n\[(?!\])|$)/);
183
+ if (!projectSectionMatch)
184
+ return null;
185
+ const projectSection = projectSectionMatch[1];
186
+ // 提取 name
187
+ const nameMatch = projectSection.match(/^name\s*=\s*["']([^"']+)["']/m);
188
+ const name = nameMatch ? nameMatch[1] : path.basename(packageDir);
189
+ // 提取 description
190
+ const descMatch = projectSection.match(/^description\s*=\s*["']([^"']*)["']/m);
191
+ const description = descMatch ? descMatch[1] : '';
192
+ // 提取 dependencies 列表
193
+ const depsMatch = projectSection.match(/^dependencies\s*=\s*\[([\s\S]*?)\]/m);
194
+ const dependencies = [];
195
+ if (depsMatch) {
196
+ const depsContent = depsMatch[1];
197
+ // 提取每个依赖项(取包名部分,忽略版本约束)
198
+ const depPattern = /["']([a-zA-Z0-9_-]+)[^"']*["']/g;
199
+ let depMatch;
200
+ while ((depMatch = depPattern.exec(depsContent)) !== null) {
201
+ const depName = depMatch[1];
202
+ if (allPackageNames.has(depName)) {
203
+ dependencies.push(depName);
204
+ }
205
+ }
206
+ }
207
+ const language = detectLanguage(packageDir);
208
+ return {
209
+ name,
210
+ path: '', // 由调用者填充
211
+ description,
212
+ language,
213
+ dependencies,
214
+ };
215
+ }
216
+ /**
217
+ * 构建 Mermaid graph TD 依赖拓扑图(T030, T031)
218
+ *
219
+ * @param packages - 所有子包的元信息列表
220
+ * @returns Mermaid 源代码字符串
221
+ */
222
+ function buildMermaidDiagram(packages) {
223
+ const lines = ['graph TD'];
224
+ // 添加所有节点
225
+ for (const pkg of packages) {
226
+ const nodeId = sanitizeMermaidId(pkg.name);
227
+ lines.push(` ${nodeId}["${pkg.name}"]`);
228
+ }
229
+ // 收集所有边
230
+ const edges = [];
231
+ for (const pkg of packages) {
232
+ const sourceId = sanitizeMermaidId(pkg.name);
233
+ for (const dep of pkg.dependencies) {
234
+ const targetId = sanitizeMermaidId(dep);
235
+ edges.push(` ${sourceId} --> ${targetId}`);
236
+ }
237
+ }
238
+ if (edges.length === 0) {
239
+ lines.push(' %% 无内部依赖');
240
+ }
241
+ else {
242
+ lines.push(...edges);
243
+ }
244
+ return lines.join('\n');
245
+ }
246
+ // ============================================================
247
+ // extractWorkspaceData 独立函数(供 WorkspaceIndexGenerator 和 CrossPackageAnalyzer 复用)
248
+ // ============================================================
249
+ /**
250
+ * 从项目中提取 workspace 信息(T012-T014, T020-T022)
251
+ * 检测 workspace 管理器类型,解析 members 列表,读取子包元信息
252
+ *
253
+ * 此函数为纯函数(不依赖 this),供 WorkspaceIndexGenerator.extract()
254
+ * 和 CrossPackageAnalyzer.extract() 直接调用,避免重复实例化 Generator。
255
+ *
256
+ * @param context - 项目上下文
257
+ * @returns workspace 信息(项目名、管理器类型、子包列表)
258
+ */
259
+ export function extractWorkspaceData(context) {
260
+ const projectRoot = context.projectRoot;
261
+ // 尝试获取项目名称
262
+ let projectName = path.basename(projectRoot);
263
+ // 步骤 1: 检测 workspace 管理器类型并解析 members(T012)
264
+ let workspaceType = 'npm';
265
+ let memberPatterns = [];
266
+ // 优先检查 pnpm-workspace.yaml
267
+ const pnpmWorkspacePath = path.join(projectRoot, 'pnpm-workspace.yaml');
268
+ if (fs.existsSync(pnpmWorkspacePath)) {
269
+ try {
270
+ const content = fs.readFileSync(pnpmWorkspacePath, 'utf-8');
271
+ memberPatterns = parsePnpmWorkspaceYaml(content);
272
+ workspaceType = 'pnpm';
273
+ }
274
+ catch {
275
+ console.warn('无法读取 pnpm-workspace.yaml,尝试其他检测方式');
276
+ memberPatterns = [];
277
+ }
278
+ }
279
+ // 其次检查 package.json workspaces
280
+ if (memberPatterns.length === 0) {
281
+ const packageJsonPath = path.join(projectRoot, 'package.json');
282
+ if (fs.existsSync(packageJsonPath)) {
283
+ try {
284
+ const content = fs.readFileSync(packageJsonPath, 'utf-8');
285
+ const pkg = JSON.parse(content);
286
+ if (pkg.name && typeof pkg.name === 'string') {
287
+ projectName = pkg.name;
288
+ }
289
+ if (Array.isArray(pkg.workspaces)) {
290
+ memberPatterns = pkg.workspaces;
291
+ workspaceType = 'npm';
292
+ }
293
+ else if (pkg.workspaces && Array.isArray(pkg.workspaces.packages)) {
294
+ memberPatterns = pkg.workspaces.packages;
295
+ workspaceType = 'npm';
296
+ }
297
+ }
298
+ catch {
299
+ console.warn('无法解析 package.json');
300
+ }
301
+ }
302
+ }
303
+ // 最后检查 pyproject.toml [tool.uv.workspace](T020)
304
+ if (memberPatterns.length === 0) {
305
+ const pyprojectPath = path.join(projectRoot, 'pyproject.toml');
306
+ if (fs.existsSync(pyprojectPath)) {
307
+ try {
308
+ const content = fs.readFileSync(pyprojectPath, 'utf-8');
309
+ // 提取项目名称
310
+ const nameMatch = content.match(/\[project\][\s\S]*?^name\s*=\s*["']([^"']+)["']/m);
311
+ if (nameMatch) {
312
+ projectName = nameMatch[1];
313
+ }
314
+ if (/\[tool\.uv\.workspace\]/m.test(content)) {
315
+ memberPatterns = parseUvWorkspaceToml(content);
316
+ workspaceType = 'uv';
317
+ }
318
+ }
319
+ catch {
320
+ console.warn('无法解析 pyproject.toml');
321
+ }
322
+ }
323
+ }
324
+ // 也尝试从 pnpm 场景下读取 package.json 获取项目名
325
+ if (workspaceType === 'pnpm') {
326
+ const packageJsonPath = path.join(projectRoot, 'package.json');
327
+ try {
328
+ if (fs.existsSync(packageJsonPath)) {
329
+ const pkg = JSON.parse(fs.readFileSync(packageJsonPath, 'utf-8'));
330
+ if (pkg.name && typeof pkg.name === 'string') {
331
+ projectName = pkg.name;
332
+ }
333
+ }
334
+ }
335
+ catch {
336
+ // 使用默认名称
337
+ }
338
+ }
339
+ // 步骤 2: glob 展开获取子包目录列表(T013)
340
+ const packageDirs = expandGlobPatterns(projectRoot, memberPatterns);
341
+ // 步骤 3: 读取子包元信息
342
+ const packages = [];
343
+ if (workspaceType === 'uv') {
344
+ // uv workspace: 两遍扫描
345
+ // 第一遍:收集所有子包名称
346
+ const allNames = new Set();
347
+ const tempInfos = [];
348
+ for (const dir of packageDirs) {
349
+ const relPath = path.relative(projectRoot, dir);
350
+ const pyprojectPath = path.join(dir, 'pyproject.toml');
351
+ if (!fs.existsSync(pyprojectPath))
352
+ continue;
353
+ try {
354
+ const content = fs.readFileSync(pyprojectPath, 'utf-8');
355
+ const nameMatch = content.match(/\[project\][\s\S]*?^name\s*=\s*["']([^"']+)["']/m);
356
+ if (nameMatch) {
357
+ allNames.add(nameMatch[1]);
358
+ }
359
+ }
360
+ catch {
361
+ // 忽略
362
+ }
363
+ tempInfos.push({ dir, relPath });
364
+ }
365
+ // 第二遍:提取完整元信息(T022)
366
+ for (const { dir, relPath } of tempInfos) {
367
+ const info = extractPyprojectInfo(dir, allNames);
368
+ if (info) {
369
+ info.path = relPath;
370
+ packages.push(info);
371
+ }
372
+ }
373
+ }
374
+ else {
375
+ // npm/pnpm workspace: 读取 package.json
376
+ // 第一遍:收集所有子包名称
377
+ const allNames = new Set();
378
+ const validDirs = [];
379
+ for (const dir of packageDirs) {
380
+ const relPath = path.relative(projectRoot, dir);
381
+ const pkgJsonPath = path.join(dir, 'package.json');
382
+ if (!fs.existsSync(pkgJsonPath))
383
+ continue;
384
+ try {
385
+ const content = fs.readFileSync(pkgJsonPath, 'utf-8');
386
+ const pkg = JSON.parse(content);
387
+ const name = typeof pkg.name === 'string' ? pkg.name : path.basename(dir);
388
+ allNames.add(name);
389
+ validDirs.push({ dir, relPath, pkg });
390
+ }
391
+ catch {
392
+ // JSON 解析失败时记录警告并跳过(T014)
393
+ console.warn(`无法解析 ${pkgJsonPath},跳过该子包`);
394
+ }
395
+ }
396
+ // 第二遍:提取完整元信息并匹配内部依赖
397
+ for (const { dir, relPath, pkg } of validDirs) {
398
+ const name = typeof pkg.name === 'string' ? pkg.name : path.basename(dir);
399
+ const description = typeof pkg.description === 'string' ? pkg.description : '';
400
+ const language = detectLanguage(dir);
401
+ // 提取 workspace 内部依赖
402
+ const dependencies = [];
403
+ const allDeps = {
404
+ ...pkg.dependencies,
405
+ ...pkg.devDependencies,
406
+ };
407
+ for (const depName of Object.keys(allDeps)) {
408
+ if (allNames.has(depName)) {
409
+ dependencies.push(depName);
410
+ }
411
+ }
412
+ packages.push({
413
+ name,
414
+ path: relPath,
415
+ description,
416
+ language,
417
+ dependencies,
418
+ });
419
+ }
420
+ }
421
+ return {
422
+ projectName,
423
+ workspaceType,
424
+ packages,
425
+ };
426
+ }
427
+ // ============================================================
428
+ // WorkspaceIndexGenerator 实现(T003)
429
+ // ============================================================
430
+ /**
431
+ * Monorepo 层级架构索引生成器
432
+ * 实现 DocumentGenerator<WorkspaceInput, WorkspaceOutput> 接口。
433
+ * 从 Monorepo 项目中提取所有子包信息,生成层级索引文档和 Mermaid 依赖图。
434
+ */
435
+ export class WorkspaceIndexGenerator {
436
+ id = 'workspace-index';
437
+ name = 'Monorepo 层级架构索引生成器';
438
+ description = '为 Monorepo 项目生成 packages/apps 层级索引文档,包含子包列表和 Mermaid 包级依赖拓扑图';
439
+ /**
440
+ * 判断当前项目是否适用此 Generator(T025)
441
+ * 仅当 workspaceType === 'monorepo' 时返回 true
442
+ */
443
+ isApplicable(context) {
444
+ return context.workspaceType === 'monorepo';
445
+ }
446
+ /**
447
+ * 从项目中提取 workspace 信息(T012-T014, T020-T022)
448
+ * 委托给独立函数 extractWorkspaceData(),便于跨 Generator 复用
449
+ */
450
+ async extract(context) {
451
+ return extractWorkspaceData(context);
452
+ }
453
+ /**
454
+ * 将提取的数据转换为结构化文档输出(T015, T030)
455
+ */
456
+ async generate(input, _options) {
457
+ // 按路径排序
458
+ const sortedPackages = [...input.packages].sort((a, b) => a.path.localeCompare(b.path));
459
+ // 按路径第一级目录分组(T015)
460
+ const groupMap = new Map();
461
+ for (const pkg of sortedPackages) {
462
+ const parts = pkg.path.split('/');
463
+ const groupName = parts.length > 1 ? parts[0] : '.';
464
+ if (!groupMap.has(groupName)) {
465
+ groupMap.set(groupName, []);
466
+ }
467
+ groupMap.get(groupName).push(pkg);
468
+ }
469
+ const groups = [];
470
+ for (const [name, pkgs] of groupMap) {
471
+ groups.push({ name, packages: pkgs });
472
+ }
473
+ // 生成 Mermaid 依赖图(T030)
474
+ const dependencyDiagram = buildMermaidDiagram(sortedPackages);
475
+ return {
476
+ title: `Workspace 架构索引: ${input.projectName}`,
477
+ projectName: input.projectName,
478
+ generatedAt: new Date().toISOString().split('T')[0],
479
+ packages: sortedPackages,
480
+ dependencyDiagram,
481
+ totalPackages: sortedPackages.length,
482
+ groups,
483
+ };
484
+ }
485
+ /**
486
+ * 使用 Handlebars 模板渲染为 Markdown(T016, T035)
487
+ */
488
+ render(output) {
489
+ const template = loadTemplate('workspace-index.hbs', import.meta.url);
490
+ return template(output);
491
+ }
492
+ }
493
+ // 从共享模块重导出 sanitizeMermaidId,保持向后兼容
494
+ export { sanitizeMermaidId as _sanitizeMermaidId } from './utils/mermaid-helpers.js';
495
+ // 导出辅助函数供测试使用
496
+ export { expandGlobPatterns as _expandGlobPatterns, parsePnpmWorkspaceYaml as _parsePnpmWorkspaceYaml, parseUvWorkspaceToml as _parseUvWorkspaceToml, detectLanguage as _detectLanguage, buildMermaidDiagram as _buildMermaidDiagram, extractPyprojectInfo as _extractPyprojectInfo, };
497
+ //# sourceMappingURL=workspace-index-generator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workspace-index-generator.js","sourceRoot":"","sources":["../../src/panoramic/workspace-index-generator.ts"],"names":[],"mappings":"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"}