@vpxa/kb 0.1.13 → 0.1.16

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 (490) hide show
  1. package/README.md +65 -12
  2. package/package.json +14 -7
  3. package/packages/analyzers/dist/blast-radius-analyzer.d.ts +17 -21
  4. package/packages/analyzers/dist/blast-radius-analyzer.js +5 -12
  5. package/packages/analyzers/dist/dependency-analyzer.d.ts +31 -28
  6. package/packages/analyzers/dist/dependency-analyzer.js +6 -9
  7. package/packages/analyzers/dist/diagram-generator.d.ts +12 -9
  8. package/packages/analyzers/dist/diagram-generator.js +2 -4
  9. package/packages/analyzers/dist/entry-point-analyzer.d.ts +39 -36
  10. package/packages/analyzers/dist/entry-point-analyzer.js +4 -6
  11. package/packages/analyzers/dist/index.d.ts +12 -14
  12. package/packages/analyzers/dist/index.js +1 -1
  13. package/packages/analyzers/dist/knowledge-producer.d.ts +34 -26
  14. package/packages/analyzers/dist/knowledge-producer.js +17 -15
  15. package/packages/analyzers/dist/pattern-analyzer.d.ts +14 -11
  16. package/packages/analyzers/dist/pattern-analyzer.js +2 -5
  17. package/packages/analyzers/dist/regex-call-graph.d.ts +6 -13
  18. package/packages/analyzers/dist/regex-call-graph.js +1 -1
  19. package/packages/analyzers/dist/structure-analyzer.d.ts +13 -10
  20. package/packages/analyzers/dist/structure-analyzer.js +2 -4
  21. package/packages/analyzers/dist/symbol-analyzer.d.ts +13 -9
  22. package/packages/analyzers/dist/symbol-analyzer.js +9 -13
  23. package/packages/analyzers/dist/ts-call-graph.d.ts +16 -14
  24. package/packages/analyzers/dist/ts-call-graph.js +1 -1
  25. package/packages/analyzers/dist/types.d.ts +82 -80
  26. package/packages/analyzers/dist/types.js +1 -0
  27. package/packages/chunker/dist/call-graph-extractor.d.ts +15 -12
  28. package/packages/chunker/dist/call-graph-extractor.js +1 -1
  29. package/packages/chunker/dist/chunker-factory.d.ts +16 -4
  30. package/packages/chunker/dist/chunker-factory.js +1 -1
  31. package/packages/chunker/dist/chunker.interface.d.ts +8 -5
  32. package/packages/chunker/dist/chunker.interface.js +1 -0
  33. package/packages/chunker/dist/code-chunker.d.ts +16 -13
  34. package/packages/chunker/dist/code-chunker.js +11 -14
  35. package/packages/chunker/dist/extractors/call-extractor.d.ts +24 -0
  36. package/packages/chunker/dist/extractors/call-extractor.js +1 -0
  37. package/packages/chunker/dist/extractors/entry-point-detector.d.ts +14 -0
  38. package/packages/chunker/dist/extractors/entry-point-detector.js +1 -0
  39. package/packages/chunker/dist/extractors/import-extractor.d.ts +14 -0
  40. package/packages/chunker/dist/extractors/import-extractor.js +1 -0
  41. package/packages/chunker/dist/extractors/pattern-detector.d.ts +14 -0
  42. package/packages/chunker/dist/extractors/pattern-detector.js +1 -0
  43. package/packages/chunker/dist/extractors/scope-resolver.d.ts +26 -0
  44. package/packages/chunker/dist/extractors/scope-resolver.js +1 -0
  45. package/packages/chunker/dist/extractors/symbol-extractor.d.ts +14 -0
  46. package/packages/chunker/dist/extractors/symbol-extractor.js +1 -0
  47. package/packages/chunker/dist/extractors/types.d.ts +36 -0
  48. package/packages/chunker/dist/extractors/types.js +1 -0
  49. package/packages/chunker/dist/generic-chunker.d.ts +14 -11
  50. package/packages/chunker/dist/generic-chunker.js +5 -5
  51. package/packages/chunker/dist/index.d.ts +19 -8
  52. package/packages/chunker/dist/index.js +1 -1
  53. package/packages/chunker/dist/markdown-chunker.d.ts +16 -13
  54. package/packages/chunker/dist/markdown-chunker.js +3 -10
  55. package/packages/chunker/dist/wasm/languages.d.ts +18 -0
  56. package/packages/chunker/dist/wasm/languages.js +1 -0
  57. package/packages/chunker/dist/wasm/query-executor.d.ts +70 -0
  58. package/packages/chunker/dist/wasm/query-executor.js +1 -0
  59. package/packages/chunker/dist/wasm/runtime.d.ts +44 -0
  60. package/packages/chunker/dist/wasm/runtime.js +1 -0
  61. package/packages/chunker/dist/wasm/types.d.ts +84 -0
  62. package/packages/chunker/dist/wasm/types.js +1 -0
  63. package/packages/chunker/dist/wasm-chunker.d.ts +23 -0
  64. package/packages/chunker/dist/wasm-chunker.js +6 -0
  65. package/packages/chunker/src/queries/go/calls.scm +11 -0
  66. package/packages/chunker/src/queries/go/entry-points.scm +20 -0
  67. package/packages/chunker/src/queries/go/imports.scm +6 -0
  68. package/packages/chunker/src/queries/go/patterns.scm +25 -0
  69. package/packages/chunker/src/queries/go/symbols.scm +26 -0
  70. package/packages/chunker/src/queries/java/calls.scm +10 -0
  71. package/packages/chunker/src/queries/java/entry-points.scm +27 -0
  72. package/packages/chunker/src/queries/java/imports.scm +11 -0
  73. package/packages/chunker/src/queries/java/patterns.scm +27 -0
  74. package/packages/chunker/src/queries/java/symbols.scm +28 -0
  75. package/packages/chunker/src/queries/javascript/calls.scm +21 -0
  76. package/packages/chunker/src/queries/javascript/entry-points.scm +31 -0
  77. package/packages/chunker/src/queries/javascript/imports.scm +32 -0
  78. package/packages/chunker/src/queries/javascript/patterns.scm +28 -0
  79. package/packages/chunker/src/queries/javascript/symbols.scm +52 -0
  80. package/packages/chunker/src/queries/python/calls.scm +11 -0
  81. package/packages/chunker/src/queries/python/entry-points.scm +21 -0
  82. package/packages/chunker/src/queries/python/imports.scm +14 -0
  83. package/packages/chunker/src/queries/python/patterns.scm +25 -0
  84. package/packages/chunker/src/queries/python/symbols.scm +17 -0
  85. package/packages/chunker/src/queries/rust/calls.scm +20 -0
  86. package/packages/chunker/src/queries/rust/entry-points.scm +7 -0
  87. package/packages/chunker/src/queries/rust/imports.scm +26 -0
  88. package/packages/chunker/src/queries/rust/patterns.scm +18 -0
  89. package/packages/chunker/src/queries/rust/symbols.scm +73 -0
  90. package/packages/chunker/src/queries/typescript/calls.scm +21 -0
  91. package/packages/chunker/src/queries/typescript/entry-points.scm +48 -0
  92. package/packages/chunker/src/queries/typescript/imports.scm +35 -0
  93. package/packages/chunker/src/queries/typescript/patterns.scm +47 -0
  94. package/packages/chunker/src/queries/typescript/symbols.scm +79 -0
  95. package/packages/chunker/wasm/tree-sitter-go.wasm +0 -0
  96. package/packages/chunker/wasm/tree-sitter-java.wasm +0 -0
  97. package/packages/chunker/wasm/tree-sitter-javascript.wasm +0 -0
  98. package/packages/chunker/wasm/tree-sitter-python.wasm +0 -0
  99. package/packages/chunker/wasm/tree-sitter-rust.wasm +0 -0
  100. package/packages/chunker/wasm/tree-sitter-typescript.wasm +0 -0
  101. package/packages/chunker/wasm/tree-sitter.wasm +0 -0
  102. package/packages/cli/dist/commands/analyze.d.ts +6 -3
  103. package/packages/cli/dist/commands/analyze.js +2 -3
  104. package/packages/cli/dist/commands/context-cmds.d.ts +6 -3
  105. package/packages/cli/dist/commands/context-cmds.js +1 -1
  106. package/packages/cli/dist/commands/environment.d.ts +6 -3
  107. package/packages/cli/dist/commands/environment.js +1 -2
  108. package/packages/cli/dist/commands/execution.d.ts +6 -3
  109. package/packages/cli/dist/commands/execution.js +1 -1
  110. package/packages/cli/dist/commands/graph.d.ts +6 -3
  111. package/packages/cli/dist/commands/graph.js +5 -6
  112. package/packages/cli/dist/commands/init/adapters.d.ts +28 -0
  113. package/packages/cli/dist/commands/init/adapters.js +1 -0
  114. package/packages/cli/dist/commands/init/config.d.ts +10 -0
  115. package/packages/cli/dist/commands/init/config.js +3 -0
  116. package/packages/cli/dist/commands/init/constants.d.ts +18 -0
  117. package/packages/cli/dist/commands/init/constants.js +1 -0
  118. package/packages/cli/dist/commands/init/curated.d.ts +7 -0
  119. package/packages/cli/dist/commands/init/curated.js +1 -0
  120. package/packages/cli/dist/commands/init/global.d.ts +34 -0
  121. package/packages/cli/dist/commands/init/global.js +5 -0
  122. package/packages/cli/dist/commands/init/index.d.ts +28 -0
  123. package/packages/cli/dist/commands/init/index.js +5 -0
  124. package/packages/cli/dist/commands/init/scaffold.d.ts +23 -0
  125. package/packages/cli/dist/commands/init/scaffold.js +1 -0
  126. package/packages/cli/dist/commands/init/templates.d.ts +9 -0
  127. package/packages/cli/dist/commands/init/templates.js +165 -0
  128. package/packages/cli/dist/commands/knowledge.d.ts +6 -3
  129. package/packages/cli/dist/commands/knowledge.js +1 -1
  130. package/packages/cli/dist/commands/search.d.ts +6 -3
  131. package/packages/cli/dist/commands/search.js +1 -8
  132. package/packages/cli/dist/commands/system.d.ts +6 -3
  133. package/packages/cli/dist/commands/system.js +4 -7
  134. package/packages/cli/dist/commands/workspace.d.ts +6 -3
  135. package/packages/cli/dist/commands/workspace.js +1 -2
  136. package/packages/cli/dist/context.d.ts +7 -5
  137. package/packages/cli/dist/context.js +1 -1
  138. package/packages/cli/dist/helpers.d.ts +51 -48
  139. package/packages/cli/dist/helpers.js +5 -5
  140. package/packages/cli/dist/index.d.ts +4 -2
  141. package/packages/cli/dist/index.js +2 -2
  142. package/packages/cli/dist/kb-init.d.ts +48 -51
  143. package/packages/cli/dist/kb-init.js +1 -1
  144. package/packages/cli/dist/types.d.ts +8 -6
  145. package/packages/cli/dist/types.js +1 -0
  146. package/packages/core/dist/constants.d.ts +58 -34
  147. package/packages/core/dist/constants.js +1 -1
  148. package/packages/core/dist/content-detector.d.ts +8 -8
  149. package/packages/core/dist/content-detector.js +1 -1
  150. package/packages/core/dist/errors.d.ts +15 -13
  151. package/packages/core/dist/errors.js +1 -1
  152. package/packages/core/dist/global-registry.d.ts +62 -0
  153. package/packages/core/dist/global-registry.js +1 -0
  154. package/packages/core/dist/index.d.ts +7 -6
  155. package/packages/core/dist/index.js +1 -1
  156. package/packages/core/dist/logger.d.ts +19 -8
  157. package/packages/core/dist/logger.js +1 -1
  158. package/packages/core/dist/types.d.ts +107 -92
  159. package/packages/core/dist/types.js +1 -0
  160. package/packages/embeddings/dist/embedder.interface.d.ts +22 -20
  161. package/packages/embeddings/dist/embedder.interface.js +1 -0
  162. package/packages/embeddings/dist/index.d.ts +3 -3
  163. package/packages/embeddings/dist/index.js +1 -1
  164. package/packages/embeddings/dist/onnx-embedder.d.ts +21 -23
  165. package/packages/embeddings/dist/onnx-embedder.js +1 -1
  166. package/packages/enterprise-bridge/dist/cache.d.ts +28 -0
  167. package/packages/enterprise-bridge/dist/cache.js +1 -0
  168. package/packages/enterprise-bridge/dist/er-client.d.ts +37 -0
  169. package/packages/enterprise-bridge/dist/er-client.js +1 -0
  170. package/packages/enterprise-bridge/dist/evolution-collector.d.ts +62 -0
  171. package/packages/enterprise-bridge/dist/evolution-collector.js +1 -0
  172. package/packages/enterprise-bridge/dist/index.d.ts +8 -0
  173. package/packages/enterprise-bridge/dist/index.js +1 -0
  174. package/packages/enterprise-bridge/dist/policy-store.d.ts +45 -0
  175. package/packages/enterprise-bridge/dist/policy-store.js +1 -0
  176. package/packages/enterprise-bridge/dist/push-adapter.d.ts +23 -0
  177. package/packages/enterprise-bridge/dist/push-adapter.js +1 -0
  178. package/packages/enterprise-bridge/dist/result-merger.d.ts +14 -0
  179. package/packages/enterprise-bridge/dist/result-merger.js +1 -0
  180. package/packages/enterprise-bridge/dist/types.d.ts +81 -0
  181. package/packages/enterprise-bridge/dist/types.js +1 -0
  182. package/packages/indexer/dist/file-hasher.d.ts +5 -3
  183. package/packages/indexer/dist/file-hasher.js +1 -1
  184. package/packages/indexer/dist/filesystem-crawler.d.ts +23 -21
  185. package/packages/indexer/dist/filesystem-crawler.js +1 -1
  186. package/packages/indexer/dist/graph-extractor.d.ts +9 -13
  187. package/packages/indexer/dist/graph-extractor.js +1 -1
  188. package/packages/indexer/dist/incremental-indexer.d.ts +49 -44
  189. package/packages/indexer/dist/incremental-indexer.js +1 -1
  190. package/packages/indexer/dist/index.d.ts +5 -5
  191. package/packages/indexer/dist/index.js +1 -1
  192. package/packages/server/dist/api.d.ts +3 -8
  193. package/packages/server/dist/api.js +1 -1
  194. package/packages/server/dist/config.d.ts +6 -3
  195. package/packages/server/dist/config.js +1 -1
  196. package/packages/server/dist/cross-workspace.d.ts +43 -0
  197. package/packages/server/dist/cross-workspace.js +1 -0
  198. package/packages/server/dist/curated-manager.d.ts +80 -78
  199. package/packages/server/dist/curated-manager.js +5 -10
  200. package/packages/server/dist/index.d.ts +1 -2
  201. package/packages/server/dist/index.js +1 -1
  202. package/packages/server/dist/replay-interceptor.d.ts +6 -7
  203. package/packages/server/dist/replay-interceptor.js +1 -1
  204. package/packages/server/dist/resources/resources.d.ts +7 -4
  205. package/packages/server/dist/resources/resources.js +2 -2
  206. package/packages/server/dist/server.d.ts +37 -25
  207. package/packages/server/dist/server.js +1 -1
  208. package/packages/server/dist/tools/analyze.tools.d.ts +14 -11
  209. package/packages/server/dist/tools/analyze.tools.js +1 -3
  210. package/packages/server/dist/tools/audit.tool.d.ts +8 -5
  211. package/packages/server/dist/tools/audit.tool.js +1 -4
  212. package/packages/server/dist/tools/bridge.tools.d.ts +34 -0
  213. package/packages/server/dist/tools/bridge.tools.js +15 -0
  214. package/packages/server/dist/tools/evolution.tools.d.ts +7 -0
  215. package/packages/server/dist/tools/evolution.tools.js +5 -0
  216. package/packages/server/dist/tools/forge.tools.d.ts +13 -12
  217. package/packages/server/dist/tools/forge.tools.js +10 -13
  218. package/packages/server/dist/tools/forget.tool.d.ts +7 -4
  219. package/packages/server/dist/tools/forget.tool.js +1 -7
  220. package/packages/server/dist/tools/graph.tool.d.ts +7 -4
  221. package/packages/server/dist/tools/graph.tool.js +4 -5
  222. package/packages/server/dist/tools/list.tool.d.ts +7 -4
  223. package/packages/server/dist/tools/list.tool.js +2 -8
  224. package/packages/server/dist/tools/lookup.tool.d.ts +7 -4
  225. package/packages/server/dist/tools/lookup.tool.js +2 -9
  226. package/packages/server/dist/tools/onboard.tool.d.ts +8 -5
  227. package/packages/server/dist/tools/onboard.tool.js +2 -2
  228. package/packages/server/dist/tools/policy.tools.d.ts +7 -0
  229. package/packages/server/dist/tools/policy.tools.js +2 -0
  230. package/packages/server/dist/tools/produce.tool.d.ts +6 -3
  231. package/packages/server/dist/tools/produce.tool.js +2 -2
  232. package/packages/server/dist/tools/read.tool.d.ts +7 -4
  233. package/packages/server/dist/tools/read.tool.js +2 -6
  234. package/packages/server/dist/tools/reindex.tool.d.ts +10 -7
  235. package/packages/server/dist/tools/reindex.tool.js +3 -2
  236. package/packages/server/dist/tools/remember.tool.d.ts +8 -4
  237. package/packages/server/dist/tools/remember.tool.js +3 -5
  238. package/packages/server/dist/tools/replay.tool.d.ts +6 -3
  239. package/packages/server/dist/tools/replay.tool.js +2 -6
  240. package/packages/server/dist/tools/search.tool.d.ts +10 -5
  241. package/packages/server/dist/tools/search.tool.js +6 -22
  242. package/packages/server/dist/tools/status.tool.d.ts +12 -4
  243. package/packages/server/dist/tools/status.tool.js +2 -3
  244. package/packages/server/dist/tools/toolkit.tools.d.ts +36 -35
  245. package/packages/server/dist/tools/toolkit.tools.js +20 -24
  246. package/packages/server/dist/tools/update.tool.d.ts +7 -4
  247. package/packages/server/dist/tools/update.tool.js +1 -6
  248. package/packages/server/dist/tools/utility.tools.d.ts +15 -15
  249. package/packages/server/dist/tools/utility.tools.js +10 -23
  250. package/packages/server/dist/version-check.d.ts +5 -2
  251. package/packages/server/dist/version-check.js +1 -1
  252. package/packages/store/dist/graph-store.interface.d.ts +89 -87
  253. package/packages/store/dist/graph-store.interface.js +1 -0
  254. package/packages/store/dist/index.d.ts +6 -6
  255. package/packages/store/dist/index.js +1 -1
  256. package/packages/store/dist/lance-store.d.ts +37 -31
  257. package/packages/store/dist/lance-store.js +1 -1
  258. package/packages/store/dist/sqlite-graph-store.d.ts +43 -47
  259. package/packages/store/dist/sqlite-graph-store.js +13 -13
  260. package/packages/store/dist/store-factory.d.ts +11 -8
  261. package/packages/store/dist/store-factory.js +1 -1
  262. package/packages/store/dist/store.interface.d.ts +47 -47
  263. package/packages/store/dist/store.interface.js +1 -0
  264. package/packages/tools/dist/audit.d.ts +61 -62
  265. package/packages/tools/dist/audit.js +4 -5
  266. package/packages/tools/dist/batch.d.ts +20 -18
  267. package/packages/tools/dist/batch.js +1 -1
  268. package/packages/tools/dist/changelog.d.ts +29 -27
  269. package/packages/tools/dist/changelog.js +2 -2
  270. package/packages/tools/dist/check.d.ts +42 -39
  271. package/packages/tools/dist/check.js +2 -2
  272. package/packages/tools/dist/checkpoint.d.ts +17 -15
  273. package/packages/tools/dist/checkpoint.js +1 -2
  274. package/packages/tools/dist/codemod.d.ts +35 -33
  275. package/packages/tools/dist/codemod.js +2 -2
  276. package/packages/tools/dist/compact.d.ts +34 -38
  277. package/packages/tools/dist/compact.js +2 -2
  278. package/packages/tools/dist/data-transform.d.ts +10 -8
  279. package/packages/tools/dist/data-transform.js +1 -1
  280. package/packages/tools/dist/dead-symbols.d.ts +29 -26
  281. package/packages/tools/dist/dead-symbols.js +2 -2
  282. package/packages/tools/dist/delegate.d.ts +26 -24
  283. package/packages/tools/dist/delegate.js +1 -5
  284. package/packages/tools/dist/diff-parse.d.ts +24 -22
  285. package/packages/tools/dist/diff-parse.js +3 -3
  286. package/packages/tools/dist/digest.d.ts +43 -46
  287. package/packages/tools/dist/digest.js +4 -5
  288. package/packages/tools/dist/dogfood-log.d.ts +49 -0
  289. package/packages/tools/dist/dogfood-log.js +2 -0
  290. package/packages/tools/dist/encode.d.ts +11 -9
  291. package/packages/tools/dist/encode.js +1 -1
  292. package/packages/tools/dist/env-info.d.ts +25 -23
  293. package/packages/tools/dist/env-info.js +1 -1
  294. package/packages/tools/dist/eval.d.ts +13 -11
  295. package/packages/tools/dist/eval.js +2 -3
  296. package/packages/tools/dist/evidence-map.d.ts +64 -62
  297. package/packages/tools/dist/evidence-map.js +2 -3
  298. package/packages/tools/dist/file-cache.d.ts +41 -0
  299. package/packages/tools/dist/file-cache.js +3 -0
  300. package/packages/tools/dist/file-summary.d.ts +50 -30
  301. package/packages/tools/dist/file-summary.js +2 -2
  302. package/packages/tools/dist/file-walk.d.ts +6 -4
  303. package/packages/tools/dist/file-walk.js +1 -1
  304. package/packages/tools/dist/find-examples.d.ts +26 -22
  305. package/packages/tools/dist/find-examples.js +3 -3
  306. package/packages/tools/dist/find.d.ts +39 -41
  307. package/packages/tools/dist/find.js +1 -1
  308. package/packages/tools/dist/forge-classify.d.ts +35 -39
  309. package/packages/tools/dist/forge-classify.js +2 -2
  310. package/packages/tools/dist/forge-ground.d.ts +58 -61
  311. package/packages/tools/dist/forge-ground.js +1 -1
  312. package/packages/tools/dist/git-context.d.ts +22 -20
  313. package/packages/tools/dist/git-context.js +3 -3
  314. package/packages/tools/dist/graph-query.d.ts +75 -79
  315. package/packages/tools/dist/graph-query.js +1 -1
  316. package/packages/tools/dist/guide.d.ts +14 -12
  317. package/packages/tools/dist/guide.js +1 -1
  318. package/packages/tools/dist/health.d.ts +13 -11
  319. package/packages/tools/dist/health.js +2 -2
  320. package/packages/tools/dist/http-request.d.ts +20 -18
  321. package/packages/tools/dist/http-request.js +1 -1
  322. package/packages/tools/dist/index.d.ts +55 -53
  323. package/packages/tools/dist/index.js +1 -1
  324. package/packages/tools/dist/lane.d.ts +28 -26
  325. package/packages/tools/dist/lane.js +6 -7
  326. package/packages/tools/dist/measure.d.ts +34 -30
  327. package/packages/tools/dist/measure.js +2 -2
  328. package/packages/tools/dist/onboard.d.ts +29 -27
  329. package/packages/tools/dist/onboard.js +17 -41
  330. package/packages/tools/dist/parse-output.d.ts +48 -46
  331. package/packages/tools/dist/parse-output.js +2 -2
  332. package/packages/tools/dist/path-resolver.d.ts +4 -2
  333. package/packages/tools/dist/path-resolver.js +1 -1
  334. package/packages/tools/dist/process-manager.d.ts +18 -16
  335. package/packages/tools/dist/process-manager.js +1 -1
  336. package/packages/tools/dist/queue.d.ts +28 -26
  337. package/packages/tools/dist/queue.js +1 -2
  338. package/packages/tools/dist/regex-test.d.ts +26 -24
  339. package/packages/tools/dist/regex-test.js +1 -1
  340. package/packages/tools/dist/rename.d.ts +28 -26
  341. package/packages/tools/dist/rename.js +2 -2
  342. package/packages/tools/dist/replay.d.ts +33 -31
  343. package/packages/tools/dist/replay.js +4 -6
  344. package/packages/tools/dist/response-envelope.d.ts +32 -30
  345. package/packages/tools/dist/response-envelope.js +1 -1
  346. package/packages/tools/dist/schema-validate.d.ts +15 -13
  347. package/packages/tools/dist/schema-validate.js +1 -1
  348. package/packages/tools/dist/scope-map.d.ts +45 -48
  349. package/packages/tools/dist/scope-map.js +1 -1
  350. package/packages/tools/dist/snippet.d.ts +26 -25
  351. package/packages/tools/dist/snippet.js +1 -1
  352. package/packages/tools/dist/stash.d.ts +13 -11
  353. package/packages/tools/dist/stash.js +1 -2
  354. package/packages/tools/dist/stratum-card.d.ts +27 -28
  355. package/packages/tools/dist/stratum-card.js +3 -5
  356. package/packages/tools/dist/symbol.d.ts +31 -26
  357. package/packages/tools/dist/symbol.js +3 -3
  358. package/packages/tools/dist/test-run.d.ts +19 -16
  359. package/packages/tools/dist/test-run.js +2 -2
  360. package/packages/tools/dist/text-utils.d.ts +6 -4
  361. package/packages/tools/dist/text-utils.js +2 -2
  362. package/packages/tools/dist/time-utils.d.ts +15 -13
  363. package/packages/tools/dist/time-utils.js +1 -1
  364. package/packages/tools/dist/trace.d.ts +26 -21
  365. package/packages/tools/dist/trace.js +2 -2
  366. package/packages/tools/dist/truncation.d.ts +6 -4
  367. package/packages/tools/dist/truncation.js +6 -13
  368. package/packages/tools/dist/watch.d.ts +28 -26
  369. package/packages/tools/dist/watch.js +1 -1
  370. package/packages/tools/dist/web-fetch.d.ts +35 -33
  371. package/packages/tools/dist/web-fetch.js +6 -12
  372. package/packages/tools/dist/web-search.d.ts +16 -14
  373. package/packages/tools/dist/web-search.js +1 -1
  374. package/packages/tools/dist/workset.d.ts +19 -17
  375. package/packages/tools/dist/workset.js +1 -2
  376. package/packages/tui/dist/App-CYLNJLr6.js +2 -0
  377. package/packages/tui/dist/App.d.ts +11 -6
  378. package/packages/tui/dist/App.js +1 -450
  379. package/packages/tui/dist/CuratedPanel-sYdZAICX.js +2 -0
  380. package/packages/tui/dist/LogPanel-DtMnoyXT.js +3 -0
  381. package/packages/tui/dist/SearchPanel-DREo6zgt.js +2 -0
  382. package/packages/tui/dist/StatusPanel-2ex8fLOO.js +2 -0
  383. package/packages/tui/dist/chunk-D6axbAb-.js +2 -0
  384. package/packages/tui/dist/devtools-DUyj952l.js +7 -0
  385. package/packages/tui/dist/embedder.interface-D4ew0HPW.d.ts +28 -0
  386. package/packages/tui/dist/index-B9VpfVPP.d.ts +13 -0
  387. package/packages/tui/dist/index.d.ts +3 -19
  388. package/packages/tui/dist/index.js +1 -476
  389. package/packages/tui/dist/jsx-runtime-Cof-kwFn.js +316 -0
  390. package/packages/tui/dist/panels/CuratedPanel.d.ts +11 -6
  391. package/packages/tui/dist/panels/CuratedPanel.js +1 -371
  392. package/packages/tui/dist/panels/LogPanel.d.ts +7 -3
  393. package/packages/tui/dist/panels/LogPanel.js +1 -449
  394. package/packages/tui/dist/panels/SearchPanel.d.ts +14 -8
  395. package/packages/tui/dist/panels/SearchPanel.js +1 -372
  396. package/packages/tui/dist/panels/StatusPanel.d.ts +11 -6
  397. package/packages/tui/dist/panels/StatusPanel.js +1 -371
  398. package/packages/tui/dist/store.interface-CnY6SPOH.d.ts +150 -0
  399. package/scaffold/adapters/claude-code.mjs +20 -0
  400. package/scaffold/adapters/copilot.mjs +320 -0
  401. package/scaffold/copilot/agents/Architect-Reviewer-Alpha.agent.md +21 -0
  402. package/scaffold/copilot/agents/Architect-Reviewer-Beta.agent.md +21 -0
  403. package/scaffold/copilot/agents/Documenter.agent.md +42 -0
  404. package/scaffold/copilot/agents/Orchestrator.agent.md +104 -0
  405. package/scaffold/copilot/agents/Planner.agent.md +54 -0
  406. package/scaffold/copilot/agents/Refactor.agent.md +36 -0
  407. package/scaffold/copilot/agents/Researcher-Alpha.agent.md +20 -0
  408. package/scaffold/copilot/agents/Researcher-Beta.agent.md +20 -0
  409. package/scaffold/copilot/agents/Researcher-Delta.agent.md +20 -0
  410. package/scaffold/copilot/agents/Researcher-Gamma.agent.md +20 -0
  411. package/scaffold/definitions/agents.mjs +165 -0
  412. package/scaffold/definitions/bodies.mjs +292 -0
  413. package/scaffold/definitions/hooks.mjs +43 -0
  414. package/scaffold/definitions/models.mjs +56 -0
  415. package/scaffold/definitions/plugins.mjs +24 -0
  416. package/scaffold/definitions/prompts.mjs +145 -0
  417. package/scaffold/definitions/protocols.mjs +322 -0
  418. package/scaffold/definitions/tools.mjs +176 -0
  419. package/scaffold/general/agents/Architect-Reviewer-Alpha.agent.md +21 -0
  420. package/scaffold/general/agents/Architect-Reviewer-Beta.agent.md +21 -0
  421. package/scaffold/general/agents/Code-Reviewer-Alpha.agent.md +12 -0
  422. package/scaffold/general/agents/Code-Reviewer-Beta.agent.md +12 -0
  423. package/scaffold/general/agents/Debugger.agent.md +31 -0
  424. package/scaffold/general/agents/Documenter.agent.md +42 -0
  425. package/scaffold/general/agents/Explorer.agent.md +50 -0
  426. package/scaffold/general/agents/Frontend.agent.md +29 -0
  427. package/scaffold/general/agents/Implementer.agent.md +31 -0
  428. package/scaffold/general/agents/Orchestrator.agent.md +104 -0
  429. package/scaffold/general/agents/Planner.agent.md +55 -0
  430. package/scaffold/general/agents/README.md +57 -0
  431. package/scaffold/general/agents/Refactor.agent.md +36 -0
  432. package/scaffold/general/agents/Researcher-Alpha.agent.md +20 -0
  433. package/scaffold/general/agents/Researcher-Beta.agent.md +20 -0
  434. package/scaffold/general/agents/Researcher-Delta.agent.md +20 -0
  435. package/scaffold/general/agents/Researcher-Gamma.agent.md +20 -0
  436. package/scaffold/general/agents/Security.agent.md +42 -0
  437. package/scaffold/general/agents/_shared/adr-protocol.md +91 -0
  438. package/scaffold/general/agents/_shared/architect-reviewer-base.md +50 -0
  439. package/scaffold/general/agents/_shared/code-agent-base.md +88 -0
  440. package/scaffold/general/agents/_shared/code-reviewer-base.md +54 -0
  441. package/scaffold/general/agents/_shared/decision-protocol.md +27 -0
  442. package/scaffold/general/agents/_shared/forge-protocol.md +46 -0
  443. package/scaffold/general/agents/_shared/researcher-base.md +61 -0
  444. package/scaffold/general/agents/templates/adr-template.md +27 -0
  445. package/scaffold/general/agents/templates/execution-state.md +25 -0
  446. package/scaffold/general/prompts/ask.prompt.md +20 -0
  447. package/scaffold/general/prompts/debug.prompt.md +25 -0
  448. package/scaffold/general/prompts/design.prompt.md +22 -0
  449. package/scaffold/general/prompts/implement.prompt.md +26 -0
  450. package/scaffold/general/prompts/plan.prompt.md +24 -0
  451. package/scaffold/general/prompts/review.prompt.md +31 -0
  452. package/scaffold/generate.mjs +74 -0
  453. package/skills/adr-skill/SKILL.md +329 -0
  454. package/skills/adr-skill/assets/templates/adr-madr.md +89 -0
  455. package/skills/adr-skill/assets/templates/adr-readme.md +20 -0
  456. package/skills/adr-skill/assets/templates/adr-simple.md +46 -0
  457. package/skills/adr-skill/references/adr-conventions.md +95 -0
  458. package/skills/adr-skill/references/examples.md +193 -0
  459. package/skills/adr-skill/references/review-checklist.md +77 -0
  460. package/skills/adr-skill/references/template-variants.md +52 -0
  461. package/skills/adr-skill/scripts/bootstrap_adr.js +259 -0
  462. package/skills/adr-skill/scripts/new_adr.js +391 -0
  463. package/skills/adr-skill/scripts/set_adr_status.js +169 -0
  464. package/skills/brainstorming/SKILL.md +259 -0
  465. package/skills/brainstorming/scripts/frame-template.html +365 -0
  466. package/skills/brainstorming/scripts/helper.js +216 -0
  467. package/skills/brainstorming/scripts/server.cjs +9 -0
  468. package/skills/brainstorming/scripts/server.src.cjs +249 -0
  469. package/skills/brainstorming/spec-document-reviewer-prompt.md +49 -0
  470. package/skills/brainstorming/visual-companion.md +430 -0
  471. package/skills/c4-architecture/SKILL.md +295 -0
  472. package/skills/c4-architecture/references/advanced-patterns.md +552 -0
  473. package/skills/c4-architecture/references/c4-syntax.md +492 -0
  474. package/skills/c4-architecture/references/common-mistakes.md +437 -0
  475. package/skills/knowledge-base/SKILL.md +100 -10
  476. package/skills/lesson-learned/SKILL.md +105 -0
  477. package/skills/lesson-learned/references/anti-patterns.md +55 -0
  478. package/skills/lesson-learned/references/se-principles.md +109 -0
  479. package/skills/requirements-clarity/SKILL.md +324 -0
  480. package/skills/session-handoff/SKILL.md +189 -0
  481. package/skills/session-handoff/references/handoff-template.md +139 -0
  482. package/skills/session-handoff/references/resume-checklist.md +80 -0
  483. package/skills/session-handoff/scripts/check_staleness.js +269 -0
  484. package/skills/session-handoff/scripts/create_handoff.js +299 -0
  485. package/skills/session-handoff/scripts/list_handoffs.js +113 -0
  486. package/skills/session-handoff/scripts/validate_handoff.js +241 -0
  487. package/packages/chunker/dist/treesitter-chunker.d.ts +0 -47
  488. package/packages/chunker/dist/treesitter-chunker.js +0 -8
  489. package/packages/cli/dist/commands/init.d.ts +0 -10
  490. package/packages/cli/dist/commands/init.js +0 -308
@@ -1,14 +1,12 @@
1
- export type { BlastRadiusOptions } from './blast-radius-analyzer.js';
2
- export { BlastRadiusAnalyzer } from './blast-radius-analyzer.js';
3
- export { DependencyAnalyzer } from './dependency-analyzer.js';
4
- export { DiagramGenerator } from './diagram-generator.js';
5
- export { EntryPointAnalyzer } from './entry-point-analyzer.js';
6
- export type { Analyzers } from './knowledge-producer.js';
7
- export { KnowledgeProducer } from './knowledge-producer.js';
8
- export { PatternAnalyzer } from './pattern-analyzer.js';
9
- export { extractRegexCallGraph } from './regex-call-graph.js';
10
- export { StructureAnalyzer } from './structure-analyzer.js';
11
- export { SymbolAnalyzer } from './symbol-analyzer.js';
12
- export { extractTsCallGraph } from './ts-call-graph.js';
13
- export type { AnalysisResult, AnalyzerOptions, DependencyAnalyzerOptions, DiagramOptions, EntryPoint, ExistingKnowledge, ExtractionBaselines, IAnalyzer, ImportInfo, PatternMatch, ProjectStats, StructureAnalyzerOptions, SymbolAnalyzerOptions, SymbolInfo, TreeNode, } from './types.js';
14
- //# sourceMappingURL=index.d.ts.map
1
+ import { AnalysisResult, AnalyzerOptions, DependencyAnalyzerOptions, DiagramOptions, EntryPoint, ExistingKnowledge, ExtractionBaselines, IAnalyzer, ImportInfo, PatternMatch, ProjectStats, StructureAnalyzerOptions, SymbolAnalyzerOptions, SymbolInfo, TreeNode } from "./types.js";
2
+ import { BlastRadiusAnalyzer, BlastRadiusOptions } from "./blast-radius-analyzer.js";
3
+ import { DependencyAnalyzer } from "./dependency-analyzer.js";
4
+ import { DiagramGenerator } from "./diagram-generator.js";
5
+ import { EntryPointAnalyzer } from "./entry-point-analyzer.js";
6
+ import { PatternAnalyzer } from "./pattern-analyzer.js";
7
+ import { StructureAnalyzer } from "./structure-analyzer.js";
8
+ import { SymbolAnalyzer } from "./symbol-analyzer.js";
9
+ import { Analyzers, KnowledgeProducer } from "./knowledge-producer.js";
10
+ import { extractTsCallGraph } from "./ts-call-graph.js";
11
+ import { extractRegexCallGraph } from "./regex-call-graph.js";
12
+ export { type AnalysisResult, type AnalyzerOptions, type Analyzers, BlastRadiusAnalyzer, type BlastRadiusOptions, DependencyAnalyzer, type DependencyAnalyzerOptions, DiagramGenerator, type DiagramOptions, type EntryPoint, EntryPointAnalyzer, type ExistingKnowledge, type ExtractionBaselines, type IAnalyzer, type ImportInfo, KnowledgeProducer, PatternAnalyzer, type PatternMatch, type ProjectStats, StructureAnalyzer, type StructureAnalyzerOptions, SymbolAnalyzer, type SymbolAnalyzerOptions, type SymbolInfo, type TreeNode, extractRegexCallGraph, extractTsCallGraph };
@@ -1 +1 @@
1
- import{BlastRadiusAnalyzer as t}from"./blast-radius-analyzer.js";import{DependencyAnalyzer as n}from"./dependency-analyzer.js";import{DiagramGenerator as l}from"./diagram-generator.js";import{EntryPointAnalyzer as s}from"./entry-point-analyzer.js";import{KnowledgeProducer as m}from"./knowledge-producer.js";import{PatternAnalyzer as x}from"./pattern-analyzer.js";import{extractRegexCallGraph as z}from"./regex-call-graph.js";import{StructureAnalyzer as c}from"./structure-analyzer.js";import{SymbolAnalyzer as u}from"./symbol-analyzer.js";import{extractTsCallGraph as O}from"./ts-call-graph.js";export{t as BlastRadiusAnalyzer,n as DependencyAnalyzer,l as DiagramGenerator,s as EntryPointAnalyzer,m as KnowledgeProducer,x as PatternAnalyzer,c as StructureAnalyzer,u as SymbolAnalyzer,z as extractRegexCallGraph,O as extractTsCallGraph};
1
+ import{DependencyAnalyzer as e}from"./dependency-analyzer.js";import{BlastRadiusAnalyzer as t}from"./blast-radius-analyzer.js";import{StructureAnalyzer as n}from"./structure-analyzer.js";import{DiagramGenerator as r}from"./diagram-generator.js";import{EntryPointAnalyzer as i}from"./entry-point-analyzer.js";import{KnowledgeProducer as a}from"./knowledge-producer.js";import{PatternAnalyzer as o}from"./pattern-analyzer.js";import{extractRegexCallGraph as s}from"./regex-call-graph.js";import{SymbolAnalyzer as c}from"./symbol-analyzer.js";import{extractTsCallGraph as l}from"./ts-call-graph.js";export{t as BlastRadiusAnalyzer,e as DependencyAnalyzer,r as DiagramGenerator,i as EntryPointAnalyzer,a as KnowledgeProducer,o as PatternAnalyzer,n as StructureAnalyzer,c as SymbolAnalyzer,s as extractRegexCallGraph,l as extractTsCallGraph};
@@ -1,32 +1,40 @@
1
- import type { DependencyAnalyzer } from './dependency-analyzer.js';
2
- import type { DiagramGenerator } from './diagram-generator.js';
3
- import type { EntryPointAnalyzer } from './entry-point-analyzer.js';
4
- import type { PatternAnalyzer } from './pattern-analyzer.js';
5
- import type { StructureAnalyzer } from './structure-analyzer.js';
6
- import type { SymbolAnalyzer } from './symbol-analyzer.js';
7
- import type { ExtractionBaselines } from './types.js';
8
- export interface Analyzers {
9
- structure: StructureAnalyzer;
10
- dependencies: DependencyAnalyzer;
11
- symbols: SymbolAnalyzer;
12
- patterns: PatternAnalyzer;
13
- entryPoints: EntryPointAnalyzer;
14
- diagrams: DiagramGenerator;
1
+ import { ExtractionBaselines } from "./types.js";
2
+ import { DependencyAnalyzer } from "./dependency-analyzer.js";
3
+ import { DiagramGenerator } from "./diagram-generator.js";
4
+ import { EntryPointAnalyzer } from "./entry-point-analyzer.js";
5
+ import { PatternAnalyzer } from "./pattern-analyzer.js";
6
+ import { StructureAnalyzer } from "./structure-analyzer.js";
7
+ import { SymbolAnalyzer } from "./symbol-analyzer.js";
8
+
9
+ //#region packages/analyzers/src/knowledge-producer.d.ts
10
+ interface Analyzers {
11
+ structure: StructureAnalyzer;
12
+ dependencies: DependencyAnalyzer;
13
+ symbols: SymbolAnalyzer;
14
+ patterns: PatternAnalyzer;
15
+ entryPoints: EntryPointAnalyzer;
16
+ diagrams: DiagramGenerator;
15
17
  }
16
18
  /**
17
19
  * Orchestrates Tier 1 deterministic extraction and prepares
18
20
  * synthesis instructions for the LLM to produce knowledge.
19
21
  */
20
- export declare class KnowledgeProducer {
21
- private readonly analyzers;
22
- constructor(analyzers: Analyzers);
23
- /**
24
- * Run Tier 1 deterministic extraction for specified aspects.
25
- */
26
- runExtraction(scope: string, aspects: string[]): Promise<ExtractionBaselines>;
27
- /**
28
- * Build synthesis instructions from baselines for the LLM.
29
- */
30
- buildSynthesisInstructions(baselines: ExtractionBaselines, _aspects: string[]): string;
22
+ declare class KnowledgeProducer {
23
+ private readonly analyzers;
24
+ constructor(analyzers: Analyzers);
25
+ /**
26
+ * Run Tier 1 deterministic extraction for specified aspects.
27
+ */
28
+ runExtraction(scope: string, aspects: string[]): Promise<ExtractionBaselines>;
29
+ /**
30
+ * Build synthesis instructions from baselines for the LLM.
31
+ */
32
+ buildSynthesisInstructions(baselines: ExtractionBaselines, _aspects: string[]): string;
33
+ /**
34
+ * Build cross-references between baselines (symbols ↔ entry-points ↔ patterns).
35
+ * Helps the LLM see connections across independently generated sections.
36
+ */
37
+ private buildCrossReferences;
31
38
  }
32
- //# sourceMappingURL=knowledge-producer.d.ts.map
39
+ //#endregion
40
+ export { Analyzers, KnowledgeProducer };
@@ -1,24 +1,26 @@
1
- const u={structure:"structure",dependencies:"dependencies",symbols:"symbols",patterns:"patterns","entry-points":"entryPoints",diagrams:"diagrams"},p=Object.keys(u);class l{constructor(t){this.analyzers=t}async runExtraction(t,o){const e=o.includes("all")?p:o,s={},i=[];for(const r of e){const a=u[r];if(!a)continue;const n=this.analyzers[a];n&&(r==="diagrams"?i.push({key:"diagrams",promise:n.analyze(t,{diagramType:"architecture"})}):i.push({key:r,promise:n.analyze(t)}))}const c=await Promise.allSettled(i.map(async r=>({key:r.key,result:await r.promise})));for(const r of c){if(r.status!=="fulfilled")continue;const{key:a,result:n}=r.value;a==="diagrams"?s.diagrams=[n]:s[a]=n}return s}buildSynthesisInstructions(t,o){const e=[];if(e.push(`## Knowledge Production Results
2
- `),e.push(`### Extraction Baselines (auto-generated)
3
- `),t.structure&&(e.push(`#### File Structure
4
- `),e.push(t.structure.output),e.push("")),t.dependencies&&(e.push(`#### Dependencies
5
- `),e.push(t.dependencies.output),e.push("")),t.symbols&&(e.push(`#### Symbols
6
- `),e.push(t.symbols.output),e.push("")),t.patterns&&(e.push(`#### Detected Patterns
7
- `),e.push(t.patterns.output),e.push("")),t.entryPoints&&(e.push(`#### Entry Points
8
- `),e.push(t.entryPoints.output),e.push("")),t.diagrams&&t.diagrams.length>0){e.push(`#### Architecture Diagram
9
- `);for(const s of t.diagrams)e.push(s.output);e.push("")}return e.push(`### Your Task: Synthesize Knowledge
10
- `),e.push("Based on the baselines above and your reading of the source files, produce"),e.push("the following knowledge documents using `kb_remember`:\n"),e.push(`1. **Domain Overview** (category: \`architecture\`)
1
+ const e={structure:`structure`,dependencies:`dependencies`,symbols:`symbols`,patterns:`patterns`,"entry-points":`entryPoints`,diagrams:`diagrams`},t=Object.keys(e);var n=class{constructor(e){this.analyzers=e}async runExtraction(n,r){let i=r.includes(`all`)?t:r,a={},o=[];for(let t of i){let r=e[t];if(!r)continue;let i=this.analyzers[r];i&&(t===`diagrams`?o.push({key:`diagrams`,promise:i.analyze(n,{diagramType:`architecture`})}):o.push({key:t,promise:i.analyze(n)}))}let s=await Promise.allSettled(o.map(async e=>({key:e.key,result:await e.promise})));for(let e of s){if(e.status!==`fulfilled`)continue;let{key:t,result:n}=e.value;t===`diagrams`?a.diagrams=[n]:a[t]=n}return a}buildSynthesisInstructions(e,t){let n=[];if(n.push(`## Knowledge Production Results
2
+ `),n.push(`### Extraction Baselines (auto-generated)
3
+ `),e.structure&&(n.push(`#### File Structure
4
+ `),n.push(e.structure.output),n.push(``)),e.dependencies&&(n.push(`#### Dependencies
5
+ `),n.push(e.dependencies.output),n.push(``)),e.symbols&&(n.push(`#### Symbols
6
+ `),n.push(e.symbols.output),n.push(``)),e.patterns&&(n.push(`#### Detected Patterns
7
+ `),n.push(e.patterns.output),n.push(``)),e.entryPoints&&(n.push(`#### Entry Points
8
+ `),n.push(e.entryPoints.output),n.push(``)),e.diagrams&&e.diagrams.length>0){n.push(`#### Architecture Diagram
9
+ `);for(let t of e.diagrams)n.push(t.output);n.push(``)}let r=this.buildCrossReferences(e);if(r.length>0){n.push(`#### Cross-References
10
+ `),n.push(`_Connections between baselines to aid synthesis:_
11
+ `);for(let e of r)n.push(`- ${e}`);n.push(``)}return n.push(`### Your Task: Synthesize Knowledge
12
+ `),n.push(`Based on the baselines above and your reading of the source files, produce`),n.push("the following knowledge documents using `kb_remember`:\n"),n.push(`1. **Domain Overview** (category: \`architecture\`)
11
13
  - What this service does, boundary with other services
12
14
  - Key entities and their lifecycle
13
- `),e.push(`2. **Architecture Summary** (category: \`architecture\`)
15
+ `),n.push(`2. **Architecture Summary** (category: \`architecture\`)
14
16
  - Layer structure, dependency flow
15
17
  - Key design decisions
16
- `),e.push(`3. **Pattern Usage** (category: \`patterns\`)
18
+ `),n.push(`3. **Pattern Usage** (category: \`patterns\`)
17
19
  - Which patterns are used and why
18
20
  - Where to find examples
19
- `),e.push(`4. **Conventions** (category: \`conventions\`)
21
+ `),n.push(`4. **Conventions** (category: \`conventions\`)
20
22
  - Naming conventions observed
21
23
  - File organization rules
22
24
  - Testing patterns
23
- `),e.push("Store each as a separate `kb_remember` call with descriptive titles.\n"),e.join(`
24
- `)}}export{l as KnowledgeProducer};
25
+ `),n.push("Store each as a separate `kb_remember` call with descriptive titles.\n"),n.join(`
26
+ `)}buildCrossReferences(e){let t=[],n=new Set;if(e.symbols?.output)for(let t of e.symbols.output.matchAll(/`(\w+)`\s*\((?:function|class|interface|type|const|enum)\)/g))n.add(t[1]);let r=new Set;if(e.entryPoints?.output)for(let t of e.entryPoints.output.matchAll(/`(\w+)`.*?(?:handler|main|server|cli|test|construct)/gi))r.add(t[1]);for(let e of r)n.has(e)&&t.push(`Entry point \`${e}\` is also listed in symbols — check its call graph for downstream dependencies`);if(e.patterns?.output&&n.size>0){for(let r of[`Singleton`,`Factory`,`Observer`,`Builder`,`Strategy`,`Middleware`,`Repository`])if(e.patterns.output.includes(r)){let i=e.patterns.output.split(r)[1]?.slice(0,200)??``;for(let e of n)if(i.includes(e)){t.push(`Symbol \`${e}\` uses the ${r} pattern`);break}}}return t}};export{n as KnowledgeProducer};
@@ -1,12 +1,15 @@
1
- import type { AnalysisResult, AnalyzerOptions, IAnalyzer } from './types.js';
2
- export declare class PatternAnalyzer implements IAnalyzer<AnalyzerOptions> {
3
- readonly name = "patterns";
4
- analyze(rootPath: string, _options?: AnalyzerOptions): Promise<AnalysisResult>;
5
- private collectDirectories;
6
- private collectCodeFiles;
7
- private detectDirectoryPatterns;
8
- private detectCodePatterns;
9
- private detectConfigPatterns;
10
- private formatMarkdown;
1
+ import { AnalysisResult, AnalyzerOptions, IAnalyzer } from "./types.js";
2
+
3
+ //#region packages/analyzers/src/pattern-analyzer.d.ts
4
+ declare class PatternAnalyzer implements IAnalyzer<AnalyzerOptions> {
5
+ readonly name = "patterns";
6
+ analyze(rootPath: string, _options?: AnalyzerOptions): Promise<AnalysisResult>;
7
+ private collectDirectories;
8
+ private collectCodeFiles;
9
+ private detectDirectoryPatterns;
10
+ private detectCodePatterns;
11
+ private detectConfigPatterns;
12
+ private formatMarkdown;
11
13
  }
12
- //# sourceMappingURL=pattern-analyzer.d.ts.map
14
+ //#endregion
15
+ export { PatternAnalyzer };
@@ -1,5 +1,2 @@
1
- import{access as P,readdir as h,readFile as C}from"node:fs/promises";import{extname as m,join as f,relative as S}from"node:path";const w=new Set(["node_modules",".git","dist","build","coverage",".turbo",".cache","cdk.out","__pycache__",".venv","target","bin","obj",".gradle","venv","env"]),v=[{dirs:["adapters","ports"],pattern:"Hexagonal Architecture",description:"Ports & adapters (hexagonal) separation"},{dirs:["domain","infrastructure","application"],pattern:"Clean Architecture",description:"Layered with domain/infrastructure separation"},{dirs:["controllers","models"],pattern:"MVC Pattern",description:"Model-View-Controller structure"},{dirs:["repositories"],pattern:"Repository Pattern",description:"Data access abstraction via repositories"},{dirs:["factories"],pattern:"Factory Pattern",description:"Object creation via factories"},{dirs:["handlers"],pattern:"Handler Pattern",description:"Event/request handler separation"},{dirs:["middleware"],pattern:"Middleware Pattern",description:"Request pipeline middleware"},{dirs:["hooks"],pattern:"React Hooks",description:"Custom React hooks for logic reuse"},{dirs:["components"],pattern:"Component Architecture",description:"UI component-based structure"},{dirs:["stacks","constructs"],pattern:"CDK IaC",description:"AWS CDK infrastructure as code"},{dirs:["lambdas","functions"],pattern:"Serverless",description:"Serverless function architecture"}];function x(g){if(g.length<=3)return g;const r=new Map;for(const e of g){const t=e.split("/"),n=t.length>1?t.slice(0,-1).join("/"):".",a=r.get(n);a?a.push(e):r.set(n,[e])}const o=[];for(const[e,t]of r)t.length>=3?o.push(`${e}/ (${t.length} files)`):o.push(...t);return o.slice(0,5)}const y=[{regex:/container\.register|@injectable|@inject/i,pattern:"Dependency Injection",description:"IoC container or DI decorators"},{regex:/\.pipe\(|Observable|BehaviorSubject/i,pattern:"Reactive (RxJS)",description:"Reactive programming with observables",lang:"js"},{regex:/createContext|useContext/i,pattern:"React Context",description:"React Context API for state sharing",lang:"js"},{regex:/createSlice|configureStore/i,pattern:"Redux Toolkit",description:"Redux state management",lang:"js"},{regex:/defineStore|usePinia/i,pattern:"Pinia Store",description:"Vue Pinia state management",lang:"js"},{regex:/\.(test|spec)\.[jt]sx?|describe\s*\(|\bit\s*\([\s'"]/i,pattern:"Test Suite",description:"Unit/integration test files"},{regex:/@SpringBootApplication|@EnableAutoConfiguration/,pattern:"Spring Boot",description:"Spring Boot application framework",lang:"java",definitive:!0},{regex:/@Autowired|@Component|@Service|@Repository|@Controller/,pattern:"Spring DI",description:"Spring dependency injection",lang:"java"},{regex:/@RestController|@RequestMapping|@GetMapping|@PostMapping/,pattern:"Spring REST",description:"Spring REST API controllers",lang:"java"},{regex:/app\s*=\s*Flask\s*\(|@app\.route/,pattern:"Flask",description:"Flask web framework",lang:"python"},{regex:/app\s*=\s*FastAPI\s*\(|@app\.get|@app\.post/,pattern:"FastAPI",description:"FastAPI web framework",lang:"python"},{regex:/func\s+main\s*\(\s*\)|http\.ListenAndServe/,pattern:"Go Application",description:"Go main application",lang:"go"},{regex:/export\s+(?:async\s+)?function\s+create[A-Z]\w+/,pattern:"Factory",description:"Object creation via create*() functions",lang:"js"},{regex:/(?:export\s+)?function\s+wrap[A-Z]\w+/,pattern:"Wrapper/Decorator",description:"Higher-order function wrapping",lang:"js"},{regex:/(?:const|let)\s+\w+\s*=\s*new\s+(?:Map|WeakMap)\s*[<(]/,pattern:"Singleton Cache",description:"Module-level cache with lazy initialization",lang:"js"},{regex:/Record<string,\s*(?:\w+)?Handler>|\.(?:get|post|put|delete)\s*\(/,pattern:"Router/Dispatcher",description:"Request routing/dispatch table",lang:"js"},{regex:/export\s+(?:default\s+)?class\s+\w+\s+extends\s+(?:Construct|Stack|NestedStack|Stage)/,pattern:"CDK Construct",description:"AWS CDK infrastructure construct",lang:"js",definitive:!0}];class D{name="patterns";async analyze(r,o={}){const e=Date.now(),t=await this.collectDirectories(r),n=this.detectDirectoryPatterns(t,r),a=await this.collectCodeFiles(r),i=await this.detectCodePatterns(a,r),s=[...n,...i],c=await this.detectConfigPatterns(r),p=c.find(l=>l.pattern==="Maven"||l.pattern==="Gradle"||l.pattern==="Gradle (Kotlin DSL)"||l.pattern==="Node.js Project"||l.pattern==="Go Module"||l.pattern==="Rust (Cargo)"),u=new Set(["Ruby (Bundler)","PHP (Composer)","Swift Package","SBT"]);for(const l of c)p&&u.has(l.pattern)||s.push(l);return{output:this.formatMarkdown(s,r),data:{patterns:s,total:s.length},meta:{analyzedAt:new Date().toISOString(),scope:r,fileCount:a.length,durationMs:Date.now()-e}}}async collectDirectories(r){const o=[],e=async(t,n)=>{if(n>5)return;const a=await h(t,{withFileTypes:!0});for(const i of a){if(!i.isDirectory()||w.has(i.name)||i.name.startsWith("."))continue;const s=f(t,i.name);o.push(i.name),await e(s,n+1)}};return await e(r,0),o}async collectCodeFiles(r){const o=[],e=new Set([".ts",".tsx",".js",".jsx",".java",".py",".go",".cs",".kt",".scala",".rb",".rs",".php",".swift"]),t=async n=>{const a=await h(n,{withFileTypes:!0});for(const i of a){if(w.has(i.name)||i.name.startsWith("."))continue;const s=f(n,i.name);i.isDirectory()?await t(s):e.has(m(i.name))&&o.push(s)}};return await t(r),o}detectDirectoryPatterns(r,o){const e=new Set(r.map(n=>n.toLowerCase())),t=[];for(const n of v){const a=n.dirs.filter(i=>e.has(i));a.length!==0&&(n.dirs.length>1&&a.length<2||t.push({pattern:n.pattern,description:n.description,locations:a.map(i=>`${i}/`),confidence:a.length===n.dirs.length?"high":"medium"}))}return t}async detectCodePatterns(r,o){const e=[],t={},n=r.filter(s=>/Application\.\w+$|Main\.\w+$|app\.\w+$|main\.\w+$/i.test(s)||/Controller|Service|Handler|Router/i.test(s)),a=r.filter(s=>!n.includes(s)),i=[...n.slice(0,50),...a.slice(0,150)];for(const s of i)try{const c=await C(s,"utf-8"),p=m(s).toLowerCase(),u=p===".java"||p===".kt"||p===".scala"?"java":p===".py"?"python":p===".go"?"go":"js";for(const d of y)d.lang&&d.lang!==u||d.regex.test(c)&&(t[d.pattern]||(t[d.pattern]=new Set),t[d.pattern].add(S(o,s).replace(/\\/g,"/")))}catch{}for(const s of y){const c=t[s.pattern];if(c&&c.size>0){const p=x([...c]);e.push({pattern:s.pattern,description:s.description,locations:p,confidence:s.definitive||c.size>=3?"high":c.size>=2?"medium":"low"})}}return e}async detectConfigPatterns(r){const o=[],e=[{file:"Dockerfile",pattern:"Docker",description:"Containerized application"},{file:"docker-compose.yml",pattern:"Docker Compose",description:"Container orchestration"},{file:"cdk.json",pattern:"AWS CDK",description:"AWS CDK infrastructure as code"},{file:"terraform.tf",pattern:"Terraform",description:"Terraform IaC"},{file:"main.tf",pattern:"Terraform",description:"Terraform IaC"}];for(const t of e)try{await P(f(r,t.file)),o.push({pattern:t.pattern,description:t.description,locations:[t.file],confidence:"high"})}catch{}return o}formatMarkdown(r,o){const e=[];e.push(`## Patterns Detected: ${o}
2
- `),e.push(`**${r.length} patterns** found
3
- `);const t={high:[],medium:[],low:[]};for(const n of r)t[n.confidence].push(n);for(const[n,a]of Object.entries(t))if(a.length!==0){e.push(`### ${n.charAt(0).toUpperCase()+n.slice(1)} Confidence
4
- `);for(const i of a)e.push(`- **${i.pattern}**: ${i.description}`),e.push(` Locations: ${i.locations.slice(0,5).join(", ")}`);e.push("")}return e.join(`
5
- `)}}export{D as PatternAnalyzer};
1
+ import{access as e,readFile as t,readdir as n}from"node:fs/promises";import{extname as r,join as i,relative as a}from"node:path";import{SUPPORTED_EXTENSIONS as o,WasmRuntime as s,detectPatterns as c}from"../../chunker/dist/index.js";const l=new Set([`node_modules`,`.git`,`dist`,`build`,`coverage`,`.turbo`,`.cache`,`cdk.out`,`__pycache__`,`.venv`,`target`,`bin`,`obj`,`.gradle`,`venv`,`env`]),u=[{dirs:[`adapters`,`ports`],pattern:`Hexagonal Architecture`,description:`Ports & adapters (hexagonal) separation`},{dirs:[`domain`,`infrastructure`,`application`],pattern:`Clean Architecture`,description:`Layered with domain/infrastructure separation`},{dirs:[`controllers`,`models`],pattern:`MVC Pattern`,description:`Model-View-Controller structure`},{dirs:[`repositories`],pattern:`Repository Pattern`,description:`Data access abstraction via repositories`},{dirs:[`factories`],pattern:`Factory Pattern`,description:`Object creation via factories`},{dirs:[`handlers`],pattern:`Handler Pattern`,description:`Event/request handler separation`},{dirs:[`middleware`],pattern:`Middleware Pattern`,description:`Request pipeline middleware`},{dirs:[`hooks`],pattern:`React Hooks`,description:`Custom React hooks for logic reuse`},{dirs:[`components`],pattern:`Component Architecture`,description:`UI component-based structure`},{dirs:[`stacks`,`constructs`],pattern:`CDK IaC`,description:`AWS CDK infrastructure as code`},{dirs:[`lambdas`,`functions`],pattern:`Serverless`,description:`Serverless function architecture`}];function d(e){if(e.length<=3)return e;let t=new Map;for(let n of e){let e=n.split(`/`),r=e.length>1?e.slice(0,-1).join(`/`):`.`,i=t.get(r);i?i.push(n):t.set(r,[n])}let n=[];for(let[e,r]of t)r.length>=3?n.push(`${e}/ (${r.length} files)`):n.push(...r);return n.slice(0,5)}const f=[{regex:/container\.register|@injectable|@inject/i,pattern:`Dependency Injection`,description:`IoC container or DI decorators`},{regex:/\.pipe\(|Observable|BehaviorSubject/i,pattern:`Reactive (RxJS)`,description:`Reactive programming with observables`,lang:`js`},{regex:/createContext|useContext/i,pattern:`React Context`,description:`React Context API for state sharing`,lang:`js`},{regex:/createSlice|configureStore/i,pattern:`Redux Toolkit`,description:`Redux state management`,lang:`js`},{regex:/defineStore|usePinia/i,pattern:`Pinia Store`,description:`Vue Pinia state management`,lang:`js`},{regex:/\.(test|spec)\.[jt]sx?|describe\s*\(|\bit\s*\([\s'"]/i,pattern:`Test Suite`,description:`Unit/integration test files`},{regex:/@SpringBootApplication|@EnableAutoConfiguration/,pattern:`Spring Boot`,description:`Spring Boot application framework`,lang:`java`,definitive:!0},{regex:/@Autowired|@Component|@Service|@Repository|@Controller/,pattern:`Spring DI`,description:`Spring dependency injection`,lang:`java`},{regex:/@RestController|@RequestMapping|@GetMapping|@PostMapping/,pattern:`Spring REST`,description:`Spring REST API controllers`,lang:`java`},{regex:/app\s*=\s*Flask\s*\(|@app\.route/,pattern:`Flask`,description:`Flask web framework`,lang:`python`},{regex:/app\s*=\s*FastAPI\s*\(|@app\.get|@app\.post/,pattern:`FastAPI`,description:`FastAPI web framework`,lang:`python`},{regex:/func\s+main\s*\(\s*\)|http\.ListenAndServe/,pattern:`Go Application`,description:`Go main application`,lang:`go`},{regex:/export\s+(?:async\s+)?function\s+create[A-Z]\w+/,pattern:`Factory`,description:`Object creation via create*() functions`,lang:`js`},{regex:/(?:export\s+)?function\s+wrap[A-Z]\w+/,pattern:`Wrapper/Decorator`,description:`Higher-order function wrapping`,lang:`js`},{regex:/(?:const|let)\s+\w+\s*=\s*new\s+(?:Map|WeakMap)\s*[<(]/,pattern:`Singleton Cache`,description:`Module-level cache with lazy initialization`,lang:`js`},{regex:/Record<string,\s*(?:\w+)?Handler>|\.(?:get|post|put|delete)\s*\(/,pattern:`Router/Dispatcher`,description:`Request routing/dispatch table`,lang:`js`},{regex:/export\s+(?:default\s+)?class\s+\w+\s+extends\s+(?:Construct|Stack|NestedStack|Stage)/,pattern:`CDK Construct`,description:`AWS CDK infrastructure construct`,lang:`js`,definitive:!0}];var p=class{name=`patterns`;async analyze(e,t={}){let n=Date.now(),r=await this.collectDirectories(e),i=this.detectDirectoryPatterns(r,e),a=await this.collectCodeFiles(e),o=await this.detectCodePatterns(a,e),s=[...i,...o],c=await this.detectConfigPatterns(e),l=c.find(e=>e.pattern===`Maven`||e.pattern===`Gradle`||e.pattern===`Gradle (Kotlin DSL)`||e.pattern===`Node.js Project`||e.pattern===`Go Module`||e.pattern===`Rust (Cargo)`),u=new Set([`Ruby (Bundler)`,`PHP (Composer)`,`Swift Package`,`SBT`]);for(let e of c)l&&u.has(e.pattern)||s.push(e);return{output:this.formatMarkdown(s,e),data:{patterns:s,total:s.length},meta:{analyzedAt:new Date().toISOString(),scope:e,fileCount:a.length,durationMs:Date.now()-n}}}async collectDirectories(e){let t=[],r=async(e,a)=>{if(a>5)return;let o=await n(e,{withFileTypes:!0});for(let n of o){if(!n.isDirectory()||l.has(n.name)||n.name.startsWith(`.`))continue;let o=i(e,n.name);t.push(n.name),await r(o,a+1)}};return await r(e,0),t}async collectCodeFiles(e){let t=[],a=new Set([`.ts`,`.tsx`,`.js`,`.jsx`,`.java`,`.py`,`.go`,`.cs`,`.kt`,`.scala`,`.rb`,`.rs`,`.php`,`.swift`]),o=async e=>{let s=await n(e,{withFileTypes:!0});for(let n of s){if(l.has(n.name)||n.name.startsWith(`.`))continue;let s=i(e,n.name);n.isDirectory()?await o(s):a.has(r(n.name))&&t.push(s)}};return await o(e),t}detectDirectoryPatterns(e,t){let n=new Set(e.map(e=>e.toLowerCase())),r=[];for(let e of u){let t=e.dirs.filter(e=>n.has(e));t.length!==0&&(e.dirs.length>1&&t.length<2||r.push({pattern:e.pattern,description:e.description,locations:t.map(e=>`${e}/`),confidence:t.length===e.dirs.length?`high`:`medium`}))}return r}async detectCodePatterns(e,n){let i=[],l={},u=!1;try{await s.ensure(),u=!0}catch{}let p=e.filter(e=>/Application\.\w+$|Main\.\w+$|app\.\w+$|main\.\w+$/i.test(e)||/Controller|Service|Handler|Router/i.test(e)),m=e.filter(e=>!p.includes(e)),h=[...p.slice(0,50),...m.slice(0,150)];for(let e of h)try{let i=await t(e,`utf-8`),s=r(e).toLowerCase(),d=a(n,e).replace(/\\/g,`/`);if(u&&o.has(s)){let e=await c(i,s,d);for(let t of e){l[t.pattern]||(l[t.pattern]=new Set);for(let e of t.locations)l[t.pattern].add(e)}}let p=s===`.java`||s===`.kt`||s===`.scala`?`java`:s===`.py`?`python`:s===`.go`?`go`:`js`;for(let e of f)e.lang&&e.lang!==p||e.regex.test(i)&&(l[e.pattern]||(l[e.pattern]=new Set),l[e.pattern].add(d))}catch{}for(let e of f){let t=l[e.pattern];if(t&&t.size>0){let n=d([...t]);i.push({pattern:e.pattern,description:e.description,locations:n,confidence:e.definitive||t.size>=3?`high`:t.size>=2?`medium`:`low`})}}let g=new Set(f.map(e=>e.pattern));for(let[e,t]of Object.entries(l)){if(g.has(e)||t.size===0)continue;let n=d([...t]);i.push({pattern:e,description:`Detected via AST analysis`,locations:n,confidence:t.size>=3?`high`:t.size>=2?`medium`:`low`})}return i}async detectConfigPatterns(t){let n=[];for(let r of[{file:`Dockerfile`,pattern:`Docker`,description:`Containerized application`},{file:`docker-compose.yml`,pattern:`Docker Compose`,description:`Container orchestration`},{file:`cdk.json`,pattern:`AWS CDK`,description:`AWS CDK infrastructure as code`},{file:`terraform.tf`,pattern:`Terraform`,description:`Terraform IaC`},{file:`main.tf`,pattern:`Terraform`,description:`Terraform IaC`}])try{await e(i(t,r.file)),n.push({pattern:r.pattern,description:r.description,locations:[r.file],confidence:`high`})}catch{}return n}formatMarkdown(e,t){let n=[];n.push(`## Patterns Detected: ${t}\n`),n.push(`**${e.length} patterns** found\n`);let r={high:[],medium:[],low:[]};for(let t of e)r[t.confidence].push(t);for(let[e,t]of Object.entries(r))if(t.length!==0){n.push(`### ${e.charAt(0).toUpperCase()+e.slice(1)} Confidence\n`);for(let e of t)n.push(`- **${e.pattern}**: ${e.description}`),n.push(` Locations: ${e.locations.slice(0,5).join(`, `)}`);n.push(``)}return n.join(`
2
+ `)}};export{p as PatternAnalyzer};
@@ -1,17 +1,10 @@
1
- /**
2
- * Regex-based call graph extractor for all languages.
3
- *
4
- * Parses import statements to extract imported symbol names and source modules,
5
- * then scans the file body for usage of those symbols to build module-level
6
- * call edges. Works for TS/JS, Java, Python, Go, C#, Rust, PHP, Ruby, Kotlin, Scala.
7
- *
8
- * Less precise than the TypeScript Compiler API version (ts-call-graph.ts) but
9
- * works across all languages without requiring language-specific compilers.
10
- */
11
- import type { CallGraphResult } from './ts-call-graph.js';
1
+ import { CallGraphResult } from "./ts-call-graph.js";
2
+
3
+ //#region packages/analyzers/src/regex-call-graph.d.ts
12
4
  /**
13
5
  * Extract regex-based call graph for any supported language.
14
6
  * Returns null if no source files found.
15
7
  */
16
- export declare function extractRegexCallGraph(rootPath: string): Promise<CallGraphResult | null>;
17
- //# sourceMappingURL=regex-call-graph.d.ts.map
8
+ declare function extractRegexCallGraph(rootPath: string): Promise<CallGraphResult | null>;
9
+ //#endregion
10
+ export { extractRegexCallGraph };
@@ -1 +1 @@
1
- import{readdirSync as _,readFileSync as R}from"node:fs";import{extname as x,join as E,relative as y}from"node:path";const S=new Set(["node_modules",".git","dist","build","coverage",".turbo",".cache","cdk.out",".venv","venv","__pycache__","target","vendor","bin","obj"]),k=new Set([".ts",".tsx",".js",".jsx",".java",".py",".go",".cs",".kt",".scala",".rs",".rb",".php",".swift"]);async function q(e){const a=Date.now(),t=T(e);if(t.length===0)return null;const n=t.slice(0,800),s=new Map,r=new Map;for(const l of n){const g=y(e,l).replace(/\\/g,"/"),p=R(l,"utf-8"),u=x(l).toLowerCase(),m=I(p,u);s.set(g,m);const h=W(p,u);r.set(g,h)}const i=M(n,e),c=new Map;for(const[l,g]of s){if($(l))continue;const p=R(E(e,l),"utf-8"),u=C(p,x(l));for(const m of g){if(!m.isRelative)continue;const h=D(l,m.source,i,x(l));if(h.length===0)continue;const d=h[0];if($(d)||l===d)continue;let f;if(m.symbols.length>0?f=m.symbols.filter(w=>new RegExp(`\\b${A(w)}\\b`).test(u)):f=["*"],f.length===0)continue;const b=`${l}|${d}`,v=c.get(b);if(v)for(const w of f)v.add(w);else c.set(b,new Set(f))}}const o=[];for(const[l,g]of c){const[p,u]=l.split("|");o.push({from:p,to:u,symbols:[...g].sort().slice(0,10)})}return o.sort((l,g)=>g.symbols.length-l.symbols.length),{edges:o,fileCount:n.length,edgeCount:o.length,durationMs:Date.now()-a}}function I(e,a){const t=[];switch(a){case".ts":case".tsx":case".js":case".jsx":{const n=/import\s+(?:type\s+)?\{([^}]+)\}\s+from\s+['"]([^'"]+)['"]/g;let s;for(;(s=n.exec(e))!==null;){const c=s[1].split(",").map(o=>{const l=o.trim().split(/\s+as\s+/);return(l[l.length-1]||"").trim()}).filter(Boolean);t.push({source:s[2],symbols:c,isRelative:s[2].startsWith(".")})}const r=/import\s+(\w+)\s+from\s+['"]([^'"]+)['"]/g;for(;(s=r.exec(e))!==null;)s[1]!=="type"&&t.push({source:s[2],symbols:[s[1]],isRelative:s[2].startsWith(".")});const i=/(?:const|let|var)\s+\{([^}]+)\}\s*=\s*require\(\s*['"]([^'"]+)['"]\s*\)/g;for(;(s=i.exec(e))!==null;){const c=s[1].split(",").map(o=>o.trim().split(":")[0].trim()).filter(Boolean);t.push({source:s[2],symbols:c,isRelative:s[2].startsWith(".")})}break}case".java":case".kt":case".scala":{const n=/^import\s+(?:static\s+)?([\w.]+)\s*;/gm;let s;for(;(s=n.exec(e))!==null;){const r=s[1].split("."),i=r[r.length-1];i==="*"?t.push({source:s[1],symbols:[],isRelative:P(s[1],e)}):t.push({source:s[1],symbols:[i],isRelative:P(s[1],e)})}break}case".py":{const n=/^from\s+([\w.]+)\s+import\s+(.+)$/gm;let s;for(;(s=n.exec(e))!==null;){const i=s[2].split(",").map(c=>{const o=c.trim().split(/\s+as\s+/);return(o[o.length-1]||"").trim()}).filter(c=>c&&c!=="(");t.push({source:s[1],symbols:i,isRelative:s[1].startsWith(".")})}const r=/^import\s+([\w.]+)(?:\s+as\s+(\w+))?\s*$/gm;for(;(s=r.exec(e))!==null;){const i=s[1].split("."),c=s[2]||i[i.length-1];t.push({source:s[1],symbols:[c],isRelative:s[1].startsWith(".")})}break}case".go":{const n=/import\s+(?:(\w+)\s+)?[""]([^""]+)[""]/g;let s;for(;(s=n.exec(e))!==null;){const i=s[2].split("/"),c=s[1]||i[i.length-1];t.push({source:s[2],symbols:[c],isRelative:!s[2].includes(".")&&!s[2].startsWith("github.com")})}const r=/import\s*\(([\s\S]*?)\)/g;for(;(s=r.exec(e))!==null;){const i=s[1],c=/(?:(\w+)\s+)?[""]([^""]+)[""]/g;let o;for(;(o=c.exec(i))!==null;){const l=o[2].split("/"),g=o[1]||l[l.length-1];t.push({source:o[2],symbols:[g],isRelative:!o[2].includes(".")&&!o[2].startsWith("github.com")})}}break}case".cs":{const n=/^using\s+(?:static\s+)?([\w.]+)\s*;/gm;let s;for(;(s=n.exec(e))!==null;){const r=s[1].split(".");t.push({source:s[1],symbols:[r[r.length-1]],isRelative:!0})}break}case".rs":{const n=/^use\s+([\w:]+(?:::\w+)*)/gm;let s;for(;(s=n.exec(e))!==null;){const r=s[1].split("::"),i=r[r.length-1];t.push({source:s[1],symbols:i==="*"?[]:[i],isRelative:s[1].startsWith("crate")||s[1].startsWith("super")})}break}}return t}function W(e,a){const t=new Set;switch(a){case".ts":case".tsx":case".js":case".jsx":{const n=/export\s+(?:default\s+)?(?:abstract\s+)?(?:async\s+)?(?:function|class|const|let|var|type|interface|enum)\s+(\w+)/g;let s;for(;(s=n.exec(e))!==null;)t.add(s[1]);break}case".java":case".kt":case".scala":{const n=/(?:public|protected)\s+(?:static\s+)?(?:abstract\s+)?(?:final\s+)?(?:class|interface|enum|record|@interface)\s+(\w+)/g;let s;for(;(s=n.exec(e))!==null;)t.add(s[1]);const r=/(?:public|protected)\s+(?:static\s+)?(?:abstract\s+)?(?:final\s+)?\w+(?:<[^>]+>)?\s+(\w+)\s*\(/g;for(;(s=r.exec(e))!==null;)["if","for","while","switch","catch","return","class","interface","enum","new"].includes(s[1])||t.add(s[1]);break}case".py":{const n=/^(?:def|class)\s+([A-Z_]\w*)/gm;let s;for(;(s=n.exec(e))!==null;)s[1].startsWith("_")||t.add(s[1]);break}case".go":{const n=/^(?:func|type|var|const)\s+(\(?[A-Z]\w*)/gm;let s;for(;(s=n.exec(e))!==null;)t.add(s[1].replace("(",""));break}}return t}function P(e,a){const t=a.match(/^package\s+([\w.]+)\s*;/m);if(!t)return!1;const s=t[1].split("."),r=e.split(".");return s.length>=2&&r.length>=2&&s[0]===r[0]&&s[1]===r[1]}function A(e){return e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function C(e,a){switch(a){case".ts":case".tsx":case".js":case".jsx":return e.replace(/^import\s+.+$/gm,"").replace(/^const\s+.+=\s*require\(.+$/gm,"");case".java":case".kt":case".scala":return e.replace(/^import\s+.+;$/gm,"");case".py":return e.replace(/^(?:from\s+.+import\s+.+|import\s+.+)$/gm,"");case".go":return e.replace(/^import\s+.+$/gm,"").replace(/import\s*\([\s\S]*?\)/g,"");case".cs":return e.replace(/^using\s+.+;$/gm,"");case".rs":return e.replace(/^use\s+.+;$/gm,"");default:return e}}function M(e,a){const t=new Map;for(const n of e){const s=y(a,n).replace(/\\/g,"/"),r=s.replace(/\.[^.]+$/,"");j(t,r,s);const i=r.split("/"),c=i[i.length-1];j(t,c,s)}return t}function j(e,a,t){const n=e.get(a);n?n.push(t):e.set(a,[t])}function D(e,a,t,n){switch(n){case".ts":case".tsx":case".js":case".jsx":{if(!a.startsWith("."))return[];const s=e.split("/").slice(0,-1).join("/"),r=N(s?`${s}/${a}`:a);for(const c of["",".ts",".tsx",".js",".jsx","/index.ts","/index.js"]){const o=t.get(r+c)||t.get((r+c).replace(/\.[^.]+$/,""));if(o&&o.length>0)return[o[0]]}const i=t.get(r.replace(/\.[^.]+$/,""));return i?[i[0]]:[]}case".java":case".kt":case".scala":{const s=a.split("."),r=s[s.length-1];if(r==="*")return[];const i=t.get(r);return i?[i[0]]:[]}case".py":{if(a.startsWith(".")){const i=e.split("/").slice(0,-1).join("/"),c=a.replace(/^\.+/,"").replace(/\./g,"/"),o=i?`${i}/${c}`:c,l=o.split("/"),g=t.get(o)||t.get(l[l.length-1]);if(g)return[g[0]]}const s=a.replace(/\./g,"/"),r=t.get(s);return r?[r[0]]:[]}case".go":{const s=a.split("/"),r=s[s.length-1],i=t.get(r);return i?[i[0]]:[]}default:return[]}}function N(e){const a=e.split("/"),t=[];for(const n of a)if(!(n==="."||n==="")){if(n===".."){t.pop();continue}t.push(n)}return t.join("/")}function $(e){return e.split("/").some(t=>t==="test"||t==="tests"||t==="__tests__"||t==="spec"||t==="test_"||t==="__test__")||/\.(test|spec)\.[^.]+$/.test(e)}function T(e){const a=[],t=(n,s)=>{if(!(s>10))try{for(const r of _(n,{withFileTypes:!0})){if(S.has(r.name)||r.name.startsWith("."))continue;const i=E(n,r.name);if(r.isDirectory())t(i,s+1);else{const c=x(r.name).toLowerCase();if(!k.has(c)||r.name.endsWith(".d.ts")||/\.(test|spec)\.[^.]+$/.test(r.name)||y(e,n).replace(/\\/g,"/").split("/").some(l=>l==="test"||l==="tests"||l==="__tests__"||l==="spec"))continue;a.push(i)}}}catch{}};return t(e,0),a}export{q as extractRegexCallGraph};
1
+ import{extname as e,join as t,relative as n}from"node:path";import{readFileSync as r,readdirSync as i}from"node:fs";const a=new Set([`node_modules`,`.git`,`dist`,`build`,`coverage`,`.turbo`,`.cache`,`cdk.out`,`.venv`,`venv`,`__pycache__`,`target`,`vendor`,`bin`,`obj`]),o=new Set([`.ts`,`.tsx`,`.js`,`.jsx`,`.java`,`.py`,`.go`,`.cs`,`.kt`,`.scala`,`.rs`,`.rb`,`.php`,`.swift`]);async function s(i){let a=Date.now(),o=v(i);if(o.length===0)return null;let s=o.slice(0,800),u=new Map,m=new Map;for(let t of s){let a=n(i,t).replace(/\\/g,`/`),o=r(t,`utf-8`),s=e(t).toLowerCase(),d=c(o,s);u.set(a,d);let f=l(o,s);m.set(a,f)}let g=p(s,i),y=new Map;for(let[n,a]of u){if(_(n))continue;let o=f(r(t(i,n),`utf-8`),e(n));for(let t of a){if(!t.isRelative)continue;let r=h(n,t.source,g,e(n));if(r.length===0)continue;let i=r[0];if(_(i)||n===i)continue;let a;if(a=t.symbols.length>0?t.symbols.filter(e=>RegExp(`\\b${d(e)}\\b`).test(o)):[`*`],a.length===0)continue;let s=`${n}|${i}`,c=y.get(s);if(c)for(let e of a)c.add(e);else y.set(s,new Set(a))}}let b=[];for(let[e,t]of y){let[n,r]=e.split(`|`);b.push({from:n,to:r,symbols:[...t].sort().slice(0,10)})}return b.sort((e,t)=>t.symbols.length-e.symbols.length),{edges:b,fileCount:s.length,edgeCount:b.length,durationMs:Date.now()-a}}function c(e,t){let n=[];switch(t){case`.ts`:case`.tsx`:case`.js`:case`.jsx`:{let t=/import\s+(?:type\s+)?\{([^}]+)\}\s+from\s+['"]([^'"]+)['"]/g,r;for(;(r=t.exec(e))!==null;){let e=r[1].split(`,`).map(e=>{let t=e.trim().split(/\s+as\s+/);return(t[t.length-1]||``).trim()}).filter(Boolean);n.push({source:r[2],symbols:e,isRelative:r[2].startsWith(`.`)})}let i=/import\s+(\w+)\s+from\s+['"]([^'"]+)['"]/g;for(;(r=i.exec(e))!==null;)r[1]!==`type`&&n.push({source:r[2],symbols:[r[1]],isRelative:r[2].startsWith(`.`)});let a=/(?:const|let|var)\s+\{([^}]+)\}\s*=\s*require\(\s*['"]([^'"]+)['"]\s*\)/g;for(;(r=a.exec(e))!==null;){let e=r[1].split(`,`).map(e=>e.trim().split(`:`)[0].trim()).filter(Boolean);n.push({source:r[2],symbols:e,isRelative:r[2].startsWith(`.`)})}break}case`.java`:case`.kt`:case`.scala`:{let t=/^import\s+(?:static\s+)?([\w.]+)\s*;/gm,r;for(;(r=t.exec(e))!==null;){let t=r[1].split(`.`),i=t[t.length-1];i===`*`?n.push({source:r[1],symbols:[],isRelative:u(r[1],e)}):n.push({source:r[1],symbols:[i],isRelative:u(r[1],e)})}break}case`.py`:{let t=/^from\s+([\w.]+)\s+import\s+(.+)$/gm,r;for(;(r=t.exec(e))!==null;){let e=r[2].split(`,`).map(e=>{let t=e.trim().split(/\s+as\s+/);return(t[t.length-1]||``).trim()}).filter(e=>e&&e!==`(`);n.push({source:r[1],symbols:e,isRelative:r[1].startsWith(`.`)})}let i=/^import\s+([\w.]+)(?:\s+as\s+(\w+))?\s*$/gm;for(;(r=i.exec(e))!==null;){let e=r[1].split(`.`),t=r[2]||e[e.length-1];n.push({source:r[1],symbols:[t],isRelative:r[1].startsWith(`.`)})}break}case`.go`:{let t=/import\s+(?:(\w+)\s+)?[""]([^""]+)[""]/g,r;for(;(r=t.exec(e))!==null;){let e=r[2].split(`/`),t=r[1]||e[e.length-1];n.push({source:r[2],symbols:[t],isRelative:!r[2].includes(`.`)&&!r[2].startsWith(`github.com`)})}let i=/import\s*\(([\s\S]*?)\)/g;for(;(r=i.exec(e))!==null;){let e=r[1],t=/(?:(\w+)\s+)?[""]([^""]+)[""]/g,i;for(;(i=t.exec(e))!==null;){let e=i[2].split(`/`),t=i[1]||e[e.length-1];n.push({source:i[2],symbols:[t],isRelative:!i[2].includes(`.`)&&!i[2].startsWith(`github.com`)})}}break}case`.cs`:{let t=/^using\s+(?:static\s+)?([\w.]+)\s*;/gm,r;for(;(r=t.exec(e))!==null;){let e=r[1].split(`.`);n.push({source:r[1],symbols:[e[e.length-1]],isRelative:!0})}break}case`.rs`:{let t=/^use\s+([\w:]+(?:::\w+)*)/gm,r;for(;(r=t.exec(e))!==null;){let e=r[1].split(`::`),t=e[e.length-1];n.push({source:r[1],symbols:t===`*`?[]:[t],isRelative:r[1].startsWith(`crate`)||r[1].startsWith(`super`)})}break}}return n}function l(e,t){let n=new Set;switch(t){case`.ts`:case`.tsx`:case`.js`:case`.jsx`:{let t=/export\s+(?:default\s+)?(?:abstract\s+)?(?:async\s+)?(?:function|class|const|let|var|type|interface|enum)\s+(\w+)/g,r;for(;(r=t.exec(e))!==null;)n.add(r[1]);break}case`.java`:case`.kt`:case`.scala`:{let t=/(?:public|protected)\s+(?:static\s+)?(?:abstract\s+)?(?:final\s+)?(?:class|interface|enum|record|@interface)\s+(\w+)/g,r;for(;(r=t.exec(e))!==null;)n.add(r[1]);let i=/(?:public|protected)\s+(?:static\s+)?(?:abstract\s+)?(?:final\s+)?\w+(?:<[^>]+>)?\s+(\w+)\s*\(/g;for(;(r=i.exec(e))!==null;)[`if`,`for`,`while`,`switch`,`catch`,`return`,`class`,`interface`,`enum`,`new`].includes(r[1])||n.add(r[1]);break}case`.py`:{let t=/^(?:def|class)\s+([A-Z_]\w*)/gm,r;for(;(r=t.exec(e))!==null;)r[1].startsWith(`_`)||n.add(r[1]);break}case`.go`:{let t=/^(?:func|type|var|const)\s+(\(?[A-Z]\w*)/gm,r;for(;(r=t.exec(e))!==null;)n.add(r[1].replace(`(`,``));break}}return n}function u(e,t){let n=t.match(/^package\s+([\w.]+)\s*;/m);if(!n)return!1;let r=n[1].split(`.`),i=e.split(`.`);return r.length>=2&&i.length>=2&&r[0]===i[0]&&r[1]===i[1]}function d(e){return e.replace(/[.*+?^${}()|[\]\\]/g,`\\$&`)}function f(e,t){switch(t){case`.ts`:case`.tsx`:case`.js`:case`.jsx`:return e.replace(/^import\s+.+$/gm,``).replace(/^const\s+.+=\s*require\(.+$/gm,``);case`.java`:case`.kt`:case`.scala`:return e.replace(/^import\s+.+;$/gm,``);case`.py`:return e.replace(/^(?:from\s+.+import\s+.+|import\s+.+)$/gm,``);case`.go`:return e.replace(/^import\s+.+$/gm,``).replace(/import\s*\([\s\S]*?\)/g,``);case`.cs`:return e.replace(/^using\s+.+;$/gm,``);case`.rs`:return e.replace(/^use\s+.+;$/gm,``);default:return e}}function p(e,t){let r=new Map;for(let i of e){let e=n(t,i).replace(/\\/g,`/`),a=e.replace(/\.[^.]+$/,``);m(r,a,e);let o=a.split(`/`),s=o[o.length-1];m(r,s,e)}return r}function m(e,t,n){let r=e.get(t);r?r.push(n):e.set(t,[n])}function h(e,t,n,r){switch(r){case`.ts`:case`.tsx`:case`.js`:case`.jsx`:{if(!t.startsWith(`.`))return[];let r=e.split(`/`).slice(0,-1).join(`/`),i=g(r?`${r}/${t}`:t);for(let e of[``,`.ts`,`.tsx`,`.js`,`.jsx`,`/index.ts`,`/index.js`]){let t=n.get(i+e)||n.get((i+e).replace(/\.[^.]+$/,``));if(t&&t.length>0)return[t[0]]}let a=n.get(i.replace(/\.[^.]+$/,``));return a?[a[0]]:[]}case`.java`:case`.kt`:case`.scala`:{let e=t.split(`.`),r=e[e.length-1];if(r===`*`)return[];let i=n.get(r);return i?[i[0]]:[]}case`.py`:{if(t.startsWith(`.`)){let r=e.split(`/`).slice(0,-1).join(`/`),i=t.replace(/^\.+/,``).replace(/\./g,`/`),a=r?`${r}/${i}`:i,o=a.split(`/`),s=n.get(a)||n.get(o[o.length-1]);if(s)return[s[0]]}let r=t.replace(/\./g,`/`),i=n.get(r);return i?[i[0]]:[]}case`.go`:{let e=t.split(`/`),r=e[e.length-1],i=n.get(r);return i?[i[0]]:[]}default:return[]}}function g(e){let t=e.split(`/`),n=[];for(let e of t)if(!(e===`.`||e===``)){if(e===`..`){n.pop();continue}n.push(e)}return n.join(`/`)}function _(e){return e.split(`/`).some(e=>e===`test`||e===`tests`||e===`__tests__`||e===`spec`||e===`test_`||e===`__test__`)||/\.(test|spec)\.[^.]+$/.test(e)}function v(r){let s=[],c=(l,u)=>{if(!(u>10))try{for(let d of i(l,{withFileTypes:!0})){if(a.has(d.name)||d.name.startsWith(`.`))continue;let i=t(l,d.name);if(d.isDirectory())c(i,u+1);else{let t=e(d.name).toLowerCase();if(!o.has(t)||d.name.endsWith(`.d.ts`)||/\.(test|spec)\.[^.]+$/.test(d.name)||n(r,l).replace(/\\/g,`/`).split(`/`).some(e=>e===`test`||e===`tests`||e===`__tests__`||e===`spec`))continue;s.push(i)}}}catch{}};return c(r,0),s}export{s as extractRegexCallGraph};
@@ -1,11 +1,14 @@
1
- import type { AnalysisResult, IAnalyzer, StructureAnalyzerOptions } from './types.js';
2
- export declare class StructureAnalyzer implements IAnalyzer<StructureAnalyzerOptions> {
3
- readonly name = "structure";
4
- analyze(rootPath: string, options?: StructureAnalyzerOptions): Promise<AnalysisResult>;
5
- private buildTree;
6
- private computeStats;
7
- private formatMarkdown;
8
- private renderTree;
9
- private countFiles;
1
+ import { AnalysisResult, IAnalyzer, StructureAnalyzerOptions } from "./types.js";
2
+
3
+ //#region packages/analyzers/src/structure-analyzer.d.ts
4
+ declare class StructureAnalyzer implements IAnalyzer<StructureAnalyzerOptions> {
5
+ readonly name = "structure";
6
+ analyze(rootPath: string, options?: StructureAnalyzerOptions): Promise<AnalysisResult>;
7
+ private buildTree;
8
+ private computeStats;
9
+ private formatMarkdown;
10
+ private renderTree;
11
+ private countFiles;
10
12
  }
11
- //# sourceMappingURL=structure-analyzer.d.ts.map
13
+ //#endregion
14
+ export { StructureAnalyzer };
@@ -1,4 +1,2 @@
1
- import{readdir as p,stat as m}from"node:fs/promises";import{extname as d,join as f}from"node:path";const h={src:"Application source",lib:"Library code",dist:"Build output",build:"Build output",test:"Tests",tests:"Tests",spec:"Tests",__tests__:"Tests",docs:"Documentation",scripts:"Build/utility scripts",config:"Configuration",handlers:"Entry point handlers",controllers:"HTTP controllers",routes:"API routes",middleware:"Middleware",services:"Business logic services",domain:"Domain/business logic",infrastructure:"External integrations",adapters:"Adapter implementations",ports:"Port interfaces",models:"Data models",entities:"Domain entities",repositories:"Data access",utils:"Utilities",helpers:"Helper functions",types:"Type definitions",interfaces:"Interface definitions",constants:"Constants",cdk:"CDK infrastructure",stacks:"CDK stacks",constructs:"CDK constructs",lambdas:"Lambda functions",components:"UI components",hooks:"React hooks",pages:"Page components",layouts:"Layout components",store:"State management",assets:"Static assets",styles:"Stylesheets",fixtures:"Test fixtures",mocks:"Test mocks",migrations:"Database migrations"},g={".ts":"TypeScript",".tsx":"React TSX",".js":"JavaScript",".jsx":"React JSX",".mjs":"ES Module",".cjs":"CommonJS",".json":"JSON",".yaml":"YAML",".yml":"YAML",".md":"Markdown",".mdx":"MDX",".py":"Python",".go":"Go",".rs":"Rust",".java":"Java",".sh":"Shell",".ps1":"PowerShell",".css":"CSS",".scss":"SCSS",".html":"HTML",".sql":"SQL",".graphql":"GraphQL",".proto":"Protocol Buffers",".toml":"TOML",".env":"Environment"},y=new Set(["node_modules",".git","dist","build",".next",".nuxt","coverage",".turbo",".cache","__pycache__",".venv",".terraform","cdk.out"]),S=new Set([".ts",".tsx",".js",".jsx",".mjs",".cjs",".java",".kt",".kts",".scala",".py",".go",".rs",".rb",".php",".swift",".cs",".c",".cpp",".h",".hpp",".sh",".bash",".ps1",".sql",".graphql",".gql",".proto",".json",".yaml",".yml",".toml",".env",".ini",".cfg",".xml",".pom",".gradle",".tf",".hcl",".lock",".mjs"]),T=new Set(["__tests__","test","tests","spec","__mocks__","__fixtures__","fixtures","mocks"]);class b{name="structure";async analyze(t,e={}){const{format:r="markdown",maxDepth:s=6,sourceOnly:c=!1}=e,n=Date.now(),i=await this.buildTree(t,0,s,c),o=this.computeStats(i);return{output:r==="json"?JSON.stringify({tree:i,stats:o},null,2):this.formatMarkdown(i,o,t),data:{tree:i,stats:o},meta:{analyzedAt:new Date().toISOString(),scope:t,fileCount:o.totalFiles,durationMs:Date.now()-n}}}async buildTree(t,e,r,s){const c=await p(t,{withFileTypes:!0}),n=[];for(const o of c.sort((l,a)=>l.name.localeCompare(a.name))){if(y.has(o.name)||o.name.startsWith(".")&&o.name!==".env.example")continue;const l=f(t,o.name);if(o.isDirectory()&&e<r){const a=await this.buildTree(l,e+1,r,s);if(s&&(!a.children||a.children.length===0))continue;n.push(a)}else if(o.isFile()){const a=d(o.name).toLowerCase();if(s&&a&&!S.has(a)||s&&!a)continue;const u=await m(l);n.push({name:o.name,type:"file",language:g[a]??(a||"unknown"),size:u.size})}}const i=t.split(/[/\\]/).pop()??t;return{name:i,type:"directory",purpose:h[i.toLowerCase()],children:n}}computeStats(t){const e={};let r=0,s=0;const c=n=>{if(n.type==="file"){r++,s+=n.size??0;const i=n.language??"unknown";e[i]=(e[i]??0)+1}n.children?.forEach(c)};return c(t),{totalFiles:r,totalSize:s,languages:e}}formatMarkdown(t,e,r){const s=[];return s.push(`## Project Structure: ${r}
2
- `),s.push(`**${e.totalFiles} files** | Languages: ${Object.entries(e.languages).map(([c,n])=>`${c} (${n})`).join(", ")}
3
- `),s.push("```"),this.renderTree(t,"",s),s.push("```"),s.join(`
4
- `)}renderTree(t,e,r){const s=t.purpose?` \u2500\u2500 ${t.purpose}`:"";if(t.type==="directory"){const c=t.name.toLowerCase();if(T.has(c)&&t.children){const n=this.countFiles(t);r.push(`${e}${t.name}/${s} (${n} files)`);return}r.push(`${e}${t.name}/${s}`),t.children?.forEach((n,i)=>{const o=i===(t.children?.length??0)-1,l=o?"\u2514\u2500\u2500 ":"\u251C\u2500\u2500 ",a=e+(o?" ":"\u2502 ");n.type==="directory"?this.renderTree(n,a,r):r.push(`${e}${l}${n.name}`)})}else r.push(`${e}${t.name}`)}countFiles(t){return t.type==="file"?1:(t.children??[]).reduce((e,r)=>e+this.countFiles(r),0)}}export{b as StructureAnalyzer};
1
+ import{readdir as e,stat as t}from"node:fs/promises";import{extname as n,join as r}from"node:path";const i={src:`Application source`,lib:`Library code`,dist:`Build output`,build:`Build output`,test:`Tests`,tests:`Tests`,spec:`Tests`,__tests__:`Tests`,docs:`Documentation`,scripts:`Build/utility scripts`,config:`Configuration`,handlers:`Entry point handlers`,controllers:`HTTP controllers`,routes:`API routes`,middleware:`Middleware`,services:`Business logic services`,domain:`Domain/business logic`,infrastructure:`External integrations`,adapters:`Adapter implementations`,ports:`Port interfaces`,models:`Data models`,entities:`Domain entities`,repositories:`Data access`,utils:`Utilities`,helpers:`Helper functions`,types:`Type definitions`,interfaces:`Interface definitions`,constants:`Constants`,cdk:`CDK infrastructure`,stacks:`CDK stacks`,constructs:`CDK constructs`,lambdas:`Lambda functions`,components:`UI components`,hooks:`React hooks`,pages:`Page components`,layouts:`Layout components`,store:`State management`,assets:`Static assets`,styles:`Stylesheets`,fixtures:`Test fixtures`,mocks:`Test mocks`,migrations:`Database migrations`},a={".ts":`TypeScript`,".tsx":`React TSX`,".js":`JavaScript`,".jsx":`React JSX`,".mjs":`ES Module`,".cjs":`CommonJS`,".json":`JSON`,".yaml":`YAML`,".yml":`YAML`,".md":`Markdown`,".mdx":`MDX`,".py":`Python`,".go":`Go`,".rs":`Rust`,".java":`Java`,".sh":`Shell`,".ps1":`PowerShell`,".css":`CSS`,".scss":`SCSS`,".html":`HTML`,".sql":`SQL`,".graphql":`GraphQL`,".proto":`Protocol Buffers`,".toml":`TOML`,".env":`Environment`},o=new Set([`node_modules`,`.git`,`dist`,`build`,`.next`,`.nuxt`,`coverage`,`.turbo`,`.cache`,`__pycache__`,`.venv`,`.terraform`,`cdk.out`]),s=new Set(`.ts,.tsx,.js,.jsx,.mjs,.cjs,.java,.kt,.kts,.scala,.py,.go,.rs,.rb,.php,.swift,.cs,.c,.cpp,.h,.hpp,.sh,.bash,.ps1,.sql,.graphql,.gql,.proto,.json,.yaml,.yml,.toml,.env,.ini,.cfg,.xml,.pom,.gradle,.tf,.hcl,.lock,.mjs`.split(`,`)),c=new Set([`__tests__`,`test`,`tests`,`spec`,`__mocks__`,`__fixtures__`,`fixtures`,`mocks`]);var l=class{name=`structure`;async analyze(e,t={}){let{format:n=`markdown`,maxDepth:r=6,sourceOnly:i=!1}=t,a=Date.now(),o=await this.buildTree(e,0,r,i),s=this.computeStats(o);return{output:n===`json`?JSON.stringify({tree:o,stats:s},null,2):this.formatMarkdown(o,s,e),data:{tree:o,stats:s},meta:{analyzedAt:new Date().toISOString(),scope:e,fileCount:s.totalFiles,durationMs:Date.now()-a}}}async buildTree(c,l,u,d){let f=await e(c,{withFileTypes:!0}),p=[];for(let e of f.sort((e,t)=>e.name.localeCompare(t.name))){if(o.has(e.name)||e.name.startsWith(`.`)&&e.name!==`.env.example`)continue;let i=r(c,e.name);if(e.isDirectory()&&l<u){let e=await this.buildTree(i,l+1,u,d);if(d&&(!e.children||e.children.length===0))continue;p.push(e)}else if(e.isFile()){let r=n(e.name).toLowerCase();if(d&&r&&!s.has(r)||d&&!r)continue;let o=await t(i);p.push({name:e.name,type:`file`,language:a[r]??(r||`unknown`),size:o.size})}}let m=c.split(/[/\\]/).pop()??c;return{name:m,type:`directory`,purpose:i[m.toLowerCase()],children:p}}computeStats(e){let t={},n=0,r=0,i=e=>{if(e.type===`file`){n++,r+=e.size??0;let i=e.language??`unknown`;t[i]=(t[i]??0)+1}e.children?.forEach(i)};return i(e),{totalFiles:n,totalSize:r,languages:t}}formatMarkdown(e,t,n){let r=[];return r.push(`## Project Structure: ${n}\n`),r.push(`**${t.totalFiles} files** | Languages: ${Object.entries(t.languages).map(([e,t])=>`${e} (${t})`).join(`, `)}\n`),r.push("```"),this.renderTree(e,``,r),r.push("```"),r.join(`
2
+ `)}renderTree(e,t,n){let r=e.purpose?` ── ${e.purpose}`:``;if(e.type===`directory`){let i=e.name.toLowerCase();if(c.has(i)&&e.children){let i=this.countFiles(e);n.push(`${t}${e.name}/${r} (${i} files)`);return}n.push(`${t}${e.name}/${r}`),e.children?.forEach((r,i)=>{let a=i===(e.children?.length??0)-1,o=a?`└── `:`├── `,s=t+(a?` `:`│ `);r.type===`directory`?this.renderTree(r,s,n):n.push(`${t}${o}${r.name}`)})}else n.push(`${t}${e.name}`)}countFiles(e){return e.type===`file`?1:(e.children??[]).reduce((e,t)=>e+this.countFiles(t),0)}};export{l as StructureAnalyzer};
@@ -1,10 +1,14 @@
1
- import type { AnalysisResult, IAnalyzer, SymbolAnalyzerOptions } from './types.js';
2
- export declare class SymbolAnalyzer implements IAnalyzer<SymbolAnalyzerOptions> {
3
- readonly name = "symbols";
4
- analyze(rootPath: string, options?: SymbolAnalyzerOptions): Promise<AnalysisResult>;
5
- private collectFiles;
6
- private extractSymbols;
7
- private groupByKind;
8
- private formatMarkdown;
1
+ import { AnalysisResult, IAnalyzer, SymbolAnalyzerOptions } from "./types.js";
2
+
3
+ //#region packages/analyzers/src/symbol-analyzer.d.ts
4
+ declare class SymbolAnalyzer implements IAnalyzer<SymbolAnalyzerOptions> {
5
+ readonly name = "symbols";
6
+ analyze(rootPath: string, options?: SymbolAnalyzerOptions): Promise<AnalysisResult>;
7
+ private collectFiles;
8
+ private extractSymbolsRegex;
9
+ private groupByKind;
10
+ private formatMarkdown;
11
+ private formatCallGraph;
9
12
  }
10
- //# sourceMappingURL=symbol-analyzer.d.ts.map
13
+ //#endregion
14
+ export { SymbolAnalyzer };
@@ -1,13 +1,9 @@
1
- import{readdir as S,readFile as A}from"node:fs/promises";import{extname as y,join as T,relative as P}from"node:path";const v=new Set([".ts",".tsx",".js",".jsx",".java",".py",".go",".cs",".rb",".kt",".scala",".rs",".php",".swift"]),E=new Set(["node_modules",".git","dist","build","coverage",".turbo",".cache","cdk.out","__pycache__",".venv","target","bin","obj",".gradle","venv","env"]),b={exported:[{pattern:/^export\s+(?:async\s+)?function\s+(\w+)/gm,kind:"function"},{pattern:/^export\s+(?:default\s+)?class\s+(\w+)/gm,kind:"class"},{pattern:/^export\s+interface\s+(\w+)/gm,kind:"interface"},{pattern:/^export\s+type\s+(\w+)/gm,kind:"type"},{pattern:/^export\s+(?:const|let)\s+(\w+)/gm,kind:"const"},{pattern:/^export\s+enum\s+(\w+)/gm,kind:"enum"}],local:[{pattern:/^(?:async\s+)?function\s+(\w+)/gm,kind:"function"},{pattern:/^class\s+(\w+)/gm,kind:"class"},{pattern:/^interface\s+(\w+)/gm,kind:"interface"},{pattern:/^type\s+(\w+)/gm,kind:"type"},{pattern:/^(?:const|let)\s+(\w+)\s*=/gm,kind:"const"},{pattern:/^enum\s+(\w+)/gm,kind:"enum"}]},I={exported:[{pattern:/^[ \t]*public\s+(?:static\s+)?(?:abstract\s+)?class\s+(\w+)/gm,kind:"class"},{pattern:/^[ \t]*public\s+(?:static\s+)?interface\s+(\w+)/gm,kind:"interface"},{pattern:/^[ \t]*public\s+(?:static\s+)?enum\s+(\w+)/gm,kind:"enum"},{pattern:/^[ \t]*public\s+(?:static\s+)?(?:synchronized\s+)?(?:final\s+)?(?:abstract\s+)?(?:\w+(?:<[^>]*>)?(?:\[\])*)\s+(\w+)\s*\(/gm,kind:"function"}],local:[{pattern:/^[ \t]*(?:private|protected)\s+(?:static\s+)?(?:abstract\s+)?class\s+(\w+)/gm,kind:"class"},{pattern:/^[ \t]*(?:private|protected)\s+(?:static\s+)?(?:synchronized\s+)?(?:final\s+)?(?:\w+(?:<[^>]*>)?(?:\[\])*)\s+(\w+)\s*\(/gm,kind:"function"},{pattern:/^[ \t]*(?:private|protected)\s+(?:static\s+)?(?:final\s+)?(?:\w+(?:<[^>]*>)?)\s+(\w+)\s*[;=]/gm,kind:"variable"}],skipIndentFilter:!0},R={exported:[{pattern:/^def\s+(\w+)\s*\(/gm,kind:"function"},{pattern:/^async\s+def\s+(\w+)\s*\(/gm,kind:"function"},{pattern:/^class\s+(\w+)/gm,kind:"class"}],local:[{pattern:/^[ \t]+def\s+(\w+)\s*\(/gm,kind:"function"},{pattern:/^[ \t]+async\s+def\s+(\w+)\s*\(/gm,kind:"function"}],skipIndentFilter:!0},_={exported:[{pattern:/^func\s+([A-Z]\w*)\s*\(/gm,kind:"function"},{pattern:/^func\s+\([^)]+\)\s+([A-Z]\w*)\s*\(/gm,kind:"function"},{pattern:/^type\s+([A-Z]\w*)\s+struct\b/gm,kind:"class"},{pattern:/^type\s+([A-Z]\w*)\s+interface\b/gm,kind:"interface"},{pattern:/^type\s+([A-Z]\w*)\s+/gm,kind:"type"}],local:[{pattern:/^func\s+([a-z]\w*)\s*\(/gm,kind:"function"},{pattern:/^func\s+\([^)]+\)\s+([a-z]\w*)\s*\(/gm,kind:"function"},{pattern:/^type\s+([a-z]\w*)\s+struct\b/gm,kind:"class"},{pattern:/^type\s+([a-z]\w*)\s+/gm,kind:"type"}],skipIndentFilter:!0},F={exported:[{pattern:/^[ \t]*public\s+(?:static\s+)?(?:partial\s+)?(?:abstract\s+)?class\s+(\w+)/gm,kind:"class"},{pattern:/^[ \t]*public\s+(?:static\s+)?interface\s+(\w+)/gm,kind:"interface"},{pattern:/^[ \t]*public\s+(?:static\s+)?enum\s+(\w+)/gm,kind:"enum"},{pattern:/^[ \t]*public\s+(?:static\s+)?(?:virtual\s+)?(?:override\s+)?(?:async\s+)?(?:\w+(?:<[^>]*>)?(?:\[\])?)\s+(\w+)\s*\(/gm,kind:"function"}],local:[{pattern:/^[ \t]*(?:private|protected|internal)\s+(?:static\s+)?(?:abstract\s+)?class\s+(\w+)/gm,kind:"class"},{pattern:/^[ \t]*(?:private|protected|internal)\s+(?:static\s+)?(?:async\s+)?(?:\w+(?:<[^>]*>)?)\s+(\w+)\s*\(/gm,kind:"function"}],skipIndentFilter:!0},L={exported:[{pattern:/^(?:open\s+|data\s+|sealed\s+)?class\s+(\w+)/gm,kind:"class"},{pattern:/^(?:fun|suspend\s+fun)\s+(\w+)\s*[(<]/gm,kind:"function"},{pattern:/^interface\s+(\w+)/gm,kind:"interface"},{pattern:/^object\s+(\w+)/gm,kind:"class"},{pattern:/^enum\s+class\s+(\w+)/gm,kind:"enum"}],local:[{pattern:/^[ \t]+(?:private|internal)\s+(?:fun|suspend\s+fun)\s+(\w+)/gm,kind:"function"},{pattern:/^[ \t]+(?:private|internal)\s+(?:val|var)\s+(\w+)/gm,kind:"variable"}],skipIndentFilter:!0},j={exported:[{pattern:/^class\s+(\w+)/gm,kind:"class"},{pattern:/^module\s+(\w+)/gm,kind:"class"},{pattern:/^[ \t]+def\s+self\.(\w+)/gm,kind:"function"}],local:[{pattern:/^[ \t]+def\s+(\w+)/gm,kind:"function"}],skipIndentFilter:!0},$={exported:[{pattern:/^pub\s+(?:async\s+)?fn\s+(\w+)/gm,kind:"function"},{pattern:/^pub\s+struct\s+(\w+)/gm,kind:"class"},{pattern:/^pub\s+trait\s+(\w+)/gm,kind:"interface"},{pattern:/^pub\s+enum\s+(\w+)/gm,kind:"enum"},{pattern:/^pub\s+type\s+(\w+)/gm,kind:"type"}],local:[{pattern:/^(?:async\s+)?fn\s+(\w+)/gm,kind:"function"},{pattern:/^struct\s+(\w+)/gm,kind:"class"},{pattern:/^trait\s+(\w+)/gm,kind:"interface"},{pattern:/^enum\s+(\w+)/gm,kind:"enum"}],skipIndentFilter:!0},O={exported:[{pattern:/^[ \t]*(?:abstract\s+)?class\s+(\w+)/gm,kind:"class"},{pattern:/^[ \t]*interface\s+(\w+)/gm,kind:"interface"},{pattern:/^[ \t]*public\s+(?:static\s+)?function\s+(\w+)/gm,kind:"function"},{pattern:/^function\s+(\w+)\s*\(/gm,kind:"function"}],local:[{pattern:/^[ \t]*(?:private|protected)\s+(?:static\s+)?function\s+(\w+)/gm,kind:"function"}],skipIndentFilter:!0},N={exported:[{pattern:/^[ \t]*(?:open|public)\s+class\s+(\w+)/gm,kind:"class"},{pattern:/^[ \t]*(?:open|public)\s+struct\s+(\w+)/gm,kind:"class"},{pattern:/^[ \t]*(?:open|public)\s+protocol\s+(\w+)/gm,kind:"interface"},{pattern:/^[ \t]*(?:open|public)\s+enum\s+(\w+)/gm,kind:"enum"},{pattern:/^[ \t]*(?:open|public)\s+func\s+(\w+)/gm,kind:"function"}],local:[{pattern:/^[ \t]*(?:private|fileprivate|internal)\s+func\s+(\w+)/gm,kind:"function"},{pattern:/^[ \t]*(?:private|fileprivate|internal)\s+class\s+(\w+)/gm,kind:"class"}],skipIndentFilter:!0},z={exported:[{pattern:/^[ \t]*(?:case\s+)?class\s+(\w+)/gm,kind:"class"},{pattern:/^[ \t]*object\s+(\w+)/gm,kind:"class"},{pattern:/^[ \t]*trait\s+(\w+)/gm,kind:"interface"},{pattern:/^[ \t]*def\s+(\w+)/gm,kind:"function"}],local:[],skipIndentFilter:!0};function C(k){switch(k){case".ts":case".tsx":case".js":case".jsx":return b;case".java":return I;case".py":return R;case".go":return _;case".cs":return F;case".kt":return L;case".rb":return j;case".rs":return $;case".php":return O;case".swift":return N;case".scala":return z;default:return b}}function h(k,s){let r="",e=0,c=!1;for(let o=s;o<Math.min(s+5,k.length);o++){const i=k[o].trim();r+=(r?" ":"")+i;for(const n of i)n==="("&&(e++,c=!0),n===")"&&e--;if(c&&e<=0)return r.replace(/\s*\{.*$/,"").replace(/\s*:\s*$/,"").trim()}return r.trim()||void 0}class U{name="symbols";async analyze(s,r={}){const{format:e="markdown",filter:c}=r,o=Date.now(),i=await this.collectFiles(s);let n=[];for(const a of i){const d=await A(a,"utf-8"),t=this.extractSymbols(d,P(s,a).replace(/\\/g,"/"));n.push(...t)}if(c){const a=c.toLowerCase();n=n.filter(d=>d.name.toLowerCase().includes(a))}return{output:e==="json"?JSON.stringify(n,null,2):this.formatMarkdown(n,s),data:{symbols:n,byKind:this.groupByKind(n),exportedCount:n.filter(a=>a.exported).length,totalCount:n.length},meta:{analyzedAt:new Date().toISOString(),scope:s,fileCount:i.length,durationMs:Date.now()-o}}}async collectFiles(s){const r=[],e=async c=>{const o=await S(c,{withFileTypes:!0});for(const i of o){if(E.has(i.name)||i.name.startsWith("."))continue;const n=T(c,i.name);i.isDirectory()?await e(n):v.has(y(i.name))&&r.push(n)}};return await e(s),r}extractSymbols(s,r){const e=[],c=s.split(`
2
- `),o=new Set,i=y(r),n=C(i);for(const{pattern:u,kind:a}of n.exported){const d=new RegExp(u.source,u.flags);let t;for(;(t=d.exec(s))!==null;){const l=t[1];o.add(l);const p=s.slice(0,t.index).split(`
3
- `).length,f=a==="function"||a==="method"?h(c,p-1):void 0;e.push({name:l,kind:a,exported:!0,filePath:r,line:p,signature:f})}}for(const{pattern:u,kind:a}of n.local){const d=new RegExp(u.source,u.flags);let t;for(;(t=d.exec(s))!==null;){const l=t[1];if(o.has(l))continue;if(!n.skipIndentFilter){const m=s.slice(0,t.index).split(`
4
- `).length-1,w=c[m]??"";if(w.startsWith(" ")||w.startsWith(" "))continue}const p=s.slice(0,t.index).split(`
5
- `).length,f=a==="function"||a==="method"?h(c,p-1):void 0;e.push({name:l,kind:a,exported:!1,filePath:r,line:p,signature:f})}}return e}groupByKind(s){const r={};for(const e of s)r[e.kind]=(r[e.kind]??0)+1;return r}formatMarkdown(s,r){const e=[],c=s.filter(t=>t.exported).length;e.push(`## Symbols: ${r}
6
- `),e.push(`**${s.length} symbols** (${c} exported)
7
- `);const o={};for(const t of s)o[t.kind]=(o[t.kind]??0)+1;const i=Object.entries(o).sort((t,l)=>l[1]-t[1]).map(([t,l])=>{const p=t==="class"?"classes":`${t}s`;return`${l} ${p}`}).join(", ");e.push(`**Breakdown**: ${i}
8
- `);const n={};for(const t of s)n[t.filePath]||(n[t.filePath]=[]),n[t.filePath].push(t);e.push(`**${Object.keys(n).length} files** with symbols
9
- `);let u=0;const a=80*1024,d=Object.entries(n).sort((t,l)=>{const p=t[1].filter(m=>m.exported).length;return l[1].filter(m=>m.exported).length-p});for(const[t,l]of d){const p=l.filter(g=>g.exported);if(p.length===0)continue;const f=[`### ${t}
10
- `];for(const g of p){const x=g.signature?` \u2014 \`${g.signature}\``:"";f.push(`- \u{1F4E4} \`${g.kind}\` **${g.name}** (line ${g.line})${x}`)}const m=l.length-p.length;m>0&&f.push(`- _${m} internal ${m===1?"symbol":"symbols"}_`),f.push("");const w=f.join(`
11
- `);if(u+=w.length,u>a){e.push(`
12
- _Output truncated at 80KB. ${Object.keys(n).length-e.filter(g=>g.startsWith("### ")).length} files omitted._`);break}e.push(w)}return e.join(`
13
- `)}}export{U as SymbolAnalyzer};
1
+ import{readFile as e,readdir as t}from"node:fs/promises";import{extname as n,join as r,relative as i}from"node:path";import{SUPPORTED_EXTENSIONS as a,WasmRuntime as o,extractCalls as s,extractSymbols as c}from"../../chunker/dist/index.js";const l=new Set([`.ts`,`.tsx`,`.js`,`.jsx`,`.java`,`.py`,`.go`,`.cs`,`.rb`,`.kt`,`.scala`,`.rs`,`.php`,`.swift`]),u=new Set([`node_modules`,`.git`,`dist`,`build`,`coverage`,`.turbo`,`.cache`,`cdk.out`,`__pycache__`,`.venv`,`target`,`bin`,`obj`,`.gradle`,`venv`,`env`]),d={exported:[{pattern:/^export\s+(?:async\s+)?function\s+(\w+)/gm,kind:`function`},{pattern:/^export\s+(?:default\s+)?class\s+(\w+)/gm,kind:`class`},{pattern:/^export\s+interface\s+(\w+)/gm,kind:`interface`},{pattern:/^export\s+type\s+(\w+)/gm,kind:`type`},{pattern:/^export\s+(?:const|let)\s+(\w+)/gm,kind:`const`},{pattern:/^export\s+enum\s+(\w+)/gm,kind:`enum`}],local:[{pattern:/^(?:async\s+)?function\s+(\w+)/gm,kind:`function`},{pattern:/^class\s+(\w+)/gm,kind:`class`},{pattern:/^interface\s+(\w+)/gm,kind:`interface`},{pattern:/^type\s+(\w+)/gm,kind:`type`},{pattern:/^(?:const|let)\s+(\w+)\s*=/gm,kind:`const`},{pattern:/^enum\s+(\w+)/gm,kind:`enum`}]},f={exported:[{pattern:/^[ \t]*public\s+(?:static\s+)?(?:abstract\s+)?class\s+(\w+)/gm,kind:`class`},{pattern:/^[ \t]*public\s+(?:static\s+)?interface\s+(\w+)/gm,kind:`interface`},{pattern:/^[ \t]*public\s+(?:static\s+)?enum\s+(\w+)/gm,kind:`enum`},{pattern:/^[ \t]*public\s+(?:static\s+)?(?:synchronized\s+)?(?:final\s+)?(?:abstract\s+)?(?:\w+(?:<[^>]*>)?(?:\[\])*)\s+(\w+)\s*\(/gm,kind:`function`}],local:[{pattern:/^[ \t]*(?:private|protected)\s+(?:static\s+)?(?:abstract\s+)?class\s+(\w+)/gm,kind:`class`},{pattern:/^[ \t]*(?:private|protected)\s+(?:static\s+)?(?:synchronized\s+)?(?:final\s+)?(?:\w+(?:<[^>]*>)?(?:\[\])*)\s+(\w+)\s*\(/gm,kind:`function`},{pattern:/^[ \t]*(?:private|protected)\s+(?:static\s+)?(?:final\s+)?(?:\w+(?:<[^>]*>)?)\s+(\w+)\s*[;=]/gm,kind:`variable`}],skipIndentFilter:!0},p={exported:[{pattern:/^def\s+(\w+)\s*\(/gm,kind:`function`},{pattern:/^async\s+def\s+(\w+)\s*\(/gm,kind:`function`},{pattern:/^class\s+(\w+)/gm,kind:`class`}],local:[{pattern:/^[ \t]+def\s+(\w+)\s*\(/gm,kind:`function`},{pattern:/^[ \t]+async\s+def\s+(\w+)\s*\(/gm,kind:`function`}],skipIndentFilter:!0},m={exported:[{pattern:/^func\s+([A-Z]\w*)\s*\(/gm,kind:`function`},{pattern:/^func\s+\([^)]+\)\s+([A-Z]\w*)\s*\(/gm,kind:`function`},{pattern:/^type\s+([A-Z]\w*)\s+struct\b/gm,kind:`class`},{pattern:/^type\s+([A-Z]\w*)\s+interface\b/gm,kind:`interface`},{pattern:/^type\s+([A-Z]\w*)\s+/gm,kind:`type`}],local:[{pattern:/^func\s+([a-z]\w*)\s*\(/gm,kind:`function`},{pattern:/^func\s+\([^)]+\)\s+([a-z]\w*)\s*\(/gm,kind:`function`},{pattern:/^type\s+([a-z]\w*)\s+struct\b/gm,kind:`class`},{pattern:/^type\s+([a-z]\w*)\s+/gm,kind:`type`}],skipIndentFilter:!0},h={exported:[{pattern:/^[ \t]*public\s+(?:static\s+)?(?:partial\s+)?(?:abstract\s+)?class\s+(\w+)/gm,kind:`class`},{pattern:/^[ \t]*public\s+(?:static\s+)?interface\s+(\w+)/gm,kind:`interface`},{pattern:/^[ \t]*public\s+(?:static\s+)?enum\s+(\w+)/gm,kind:`enum`},{pattern:/^[ \t]*public\s+(?:static\s+)?(?:virtual\s+)?(?:override\s+)?(?:async\s+)?(?:\w+(?:<[^>]*>)?(?:\[\])?)\s+(\w+)\s*\(/gm,kind:`function`}],local:[{pattern:/^[ \t]*(?:private|protected|internal)\s+(?:static\s+)?(?:abstract\s+)?class\s+(\w+)/gm,kind:`class`},{pattern:/^[ \t]*(?:private|protected|internal)\s+(?:static\s+)?(?:async\s+)?(?:\w+(?:<[^>]*>)?)\s+(\w+)\s*\(/gm,kind:`function`}],skipIndentFilter:!0},g={exported:[{pattern:/^(?:open\s+|data\s+|sealed\s+)?class\s+(\w+)/gm,kind:`class`},{pattern:/^(?:fun|suspend\s+fun)\s+(\w+)\s*[(<]/gm,kind:`function`},{pattern:/^interface\s+(\w+)/gm,kind:`interface`},{pattern:/^object\s+(\w+)/gm,kind:`class`},{pattern:/^enum\s+class\s+(\w+)/gm,kind:`enum`}],local:[{pattern:/^[ \t]+(?:private|internal)\s+(?:fun|suspend\s+fun)\s+(\w+)/gm,kind:`function`},{pattern:/^[ \t]+(?:private|internal)\s+(?:val|var)\s+(\w+)/gm,kind:`variable`}],skipIndentFilter:!0},_={exported:[{pattern:/^class\s+(\w+)/gm,kind:`class`},{pattern:/^module\s+(\w+)/gm,kind:`class`},{pattern:/^[ \t]+def\s+self\.(\w+)/gm,kind:`function`}],local:[{pattern:/^[ \t]+def\s+(\w+)/gm,kind:`function`}],skipIndentFilter:!0},v={exported:[{pattern:/^pub\s+(?:async\s+)?fn\s+(\w+)/gm,kind:`function`},{pattern:/^pub\s+struct\s+(\w+)/gm,kind:`class`},{pattern:/^pub\s+trait\s+(\w+)/gm,kind:`interface`},{pattern:/^pub\s+enum\s+(\w+)/gm,kind:`enum`},{pattern:/^pub\s+type\s+(\w+)/gm,kind:`type`}],local:[{pattern:/^(?:async\s+)?fn\s+(\w+)/gm,kind:`function`},{pattern:/^struct\s+(\w+)/gm,kind:`class`},{pattern:/^trait\s+(\w+)/gm,kind:`interface`},{pattern:/^enum\s+(\w+)/gm,kind:`enum`}],skipIndentFilter:!0},y={exported:[{pattern:/^[ \t]*(?:abstract\s+)?class\s+(\w+)/gm,kind:`class`},{pattern:/^[ \t]*interface\s+(\w+)/gm,kind:`interface`},{pattern:/^[ \t]*public\s+(?:static\s+)?function\s+(\w+)/gm,kind:`function`},{pattern:/^function\s+(\w+)\s*\(/gm,kind:`function`}],local:[{pattern:/^[ \t]*(?:private|protected)\s+(?:static\s+)?function\s+(\w+)/gm,kind:`function`}],skipIndentFilter:!0},b={exported:[{pattern:/^[ \t]*(?:open|public)\s+class\s+(\w+)/gm,kind:`class`},{pattern:/^[ \t]*(?:open|public)\s+struct\s+(\w+)/gm,kind:`class`},{pattern:/^[ \t]*(?:open|public)\s+protocol\s+(\w+)/gm,kind:`interface`},{pattern:/^[ \t]*(?:open|public)\s+enum\s+(\w+)/gm,kind:`enum`},{pattern:/^[ \t]*(?:open|public)\s+func\s+(\w+)/gm,kind:`function`}],local:[{pattern:/^[ \t]*(?:private|fileprivate|internal)\s+func\s+(\w+)/gm,kind:`function`},{pattern:/^[ \t]*(?:private|fileprivate|internal)\s+class\s+(\w+)/gm,kind:`class`}],skipIndentFilter:!0},x={exported:[{pattern:/^[ \t]*(?:case\s+)?class\s+(\w+)/gm,kind:`class`},{pattern:/^[ \t]*object\s+(\w+)/gm,kind:`class`},{pattern:/^[ \t]*trait\s+(\w+)/gm,kind:`interface`},{pattern:/^[ \t]*def\s+(\w+)/gm,kind:`function`}],local:[],skipIndentFilter:!0};function S(e){switch(e){case`.ts`:case`.tsx`:case`.js`:case`.jsx`:return d;case`.java`:return f;case`.py`:return p;case`.go`:return m;case`.cs`:return h;case`.kt`:return g;case`.rb`:return _;case`.rs`:return v;case`.php`:return y;case`.swift`:return b;case`.scala`:return x;default:return d}}function C(e,t){let n=``,r=0,i=!1;for(let a=t;a<Math.min(t+5,e.length);a++){let t=e[a].trim();n+=(n?` `:``)+t;for(let e of t)e===`(`&&(r++,i=!0),e===`)`&&r--;if(i&&r<=0)return n.replace(/\s*\{.*$/,``).replace(/\s*:\s*$/,``).trim()}return n.trim()||void 0}var w=class{name=`symbols`;async analyze(t,r={}){let{format:l=`markdown`,filter:u}=r,d=Date.now(),f=await this.collectFiles(t),p=[],m=[],h=!1;try{await o.ensure(),h=!0}catch{}for(let r of f){let o=await e(r,`utf-8`),l=i(t,r).replace(/\\/g,`/`),u=n(r);if(h&&a.has(u)){let e=await c(o,u,l);if(e.length>0){p.push(...e);let t=await s(o,u,l);m.push(...t)}else{let e=this.extractSymbolsRegex(o,l);p.push(...e)}}else{let e=this.extractSymbolsRegex(o,l);p.push(...e)}}if(u){let e=u.toLowerCase();p=p.filter(t=>t.name.toLowerCase().includes(e))}return{output:l===`json`?JSON.stringify(p,null,2):this.formatMarkdown(p,t,m),data:{symbols:p,byKind:this.groupByKind(p),exportedCount:p.filter(e=>e.exported).length,totalCount:p.length,callEdges:m},meta:{analyzedAt:new Date().toISOString(),scope:t,fileCount:f.length,durationMs:Date.now()-d}}}async collectFiles(e){let i=[],a=async e=>{let o=await t(e,{withFileTypes:!0});for(let t of o){if(u.has(t.name)||t.name.startsWith(`.`))continue;let o=r(e,t.name);t.isDirectory()?await a(o):l.has(n(t.name))&&i.push(o)}};return await a(e),i}extractSymbolsRegex(e,t){let r=[],i=e.split(`
2
+ `),a=new Set,o=S(n(t));for(let{pattern:n,kind:s}of o.exported){let o=new RegExp(n.source,n.flags),c;for(;(c=o.exec(e))!==null;){let n=c[1];a.add(n);let o=e.slice(0,c.index).split(`
3
+ `).length,l=s===`function`||s===`method`?C(i,o-1):void 0;r.push({name:n,kind:s,exported:!0,filePath:t,line:o,signature:l})}}for(let{pattern:n,kind:s}of o.local){let c=new RegExp(n.source,n.flags),l;for(;(l=c.exec(e))!==null;){let n=l[1];if(a.has(n))continue;if(!o.skipIndentFilter){let t=i[e.slice(0,l.index).split(`
4
+ `).length-1]??``;if(t.startsWith(` `)||t.startsWith(` `))continue}let c=e.slice(0,l.index).split(`
5
+ `).length,u=s===`function`||s===`method`?C(i,c-1):void 0;r.push({name:n,kind:s,exported:!1,filePath:t,line:c,signature:u})}}return r}groupByKind(e){let t={};for(let n of e)t[n.kind]=(t[n.kind]??0)+1;return t}formatMarkdown(e,t,n=[]){let r=[],i=e.filter(e=>e.exported).length;r.push(`## Symbols: ${t}\n`),r.push(`**${e.length} symbols** (${i} exported)\n`);let a={};for(let t of e)a[t.kind]=(a[t.kind]??0)+1;let o=Object.entries(a).sort((e,t)=>t[1]-e[1]).map(([e,t])=>`${t} ${e===`class`?`classes`:`${e}s`}`).join(`, `);r.push(`**Breakdown**: ${o}\n`);let s={};for(let t of e)s[t.filePath]||(s[t.filePath]=[]),s[t.filePath].push(t);r.push(`**${Object.keys(s).length} files** with symbols\n`);let c=0,l=Object.entries(s).sort((e,t)=>{let n=e[1].filter(e=>e.exported).length;return t[1].filter(e=>e.exported).length-n});for(let[e,t]of l){let n=t.filter(e=>e.exported);if(n.length===0)continue;let i=[`### ${e}\n`];for(let e of n){let t=e.signature?` — \`${e.signature}\``:``;i.push(`- 📤 \`${e.kind}\` **${e.name}** (line ${e.line})${t}`)}let a=t.length-n.length;a>0&&i.push(`- _${a} internal ${a===1?`symbol`:`symbols`}_`),i.push(``);let o=i.join(`
6
+ `);if(c+=o.length,c>81920){r.push(`\n_Output truncated at 80KB. ${Object.keys(s).length-r.filter(e=>e.startsWith(`### `)).length} files omitted._`);break}r.push(o)}return n.length>0&&r.push(this.formatCallGraph(n)),r.join(`
7
+ `)}formatCallGraph(e){let t=new Map;for(let n of e){if(n.callerName===`<module>`)continue;let e=`${n.callerFile}:${n.callerName}->${n.calleeName}`,r=t.get(e);r?r.count++:t.set(e,{callerFile:n.callerFile,callerName:n.callerName,calleeName:n.calleeName,count:1})}if(t.size===0)return``;let n=[];n.push(`### Call Graph Summary
8
+ `),n.push(`**${e.length} call edges** across analyzed files\n`);let r=new Map;for(let e of t.values()){let t=`${e.callerFile}#${e.callerName}`;r.has(t)||r.set(t,[]),r.get(t)?.push(e.calleeName)}let i=[...r.entries()].sort((e,t)=>t[1].length-e[1].length).slice(0,30);for(let[e,t]of i){let[r,i]=e.split(`#`);n.push(`- **${i}** (${r}) → ${t.join(`, `)}`)}return n.push(``),n.join(`
9
+ `)}};export{w as SymbolAnalyzer};