opencode-telos 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (568) hide show
  1. package/README.md +927 -0
  2. package/dist/code-intelligence/analyzer.d.ts +9 -0
  3. package/dist/code-intelligence/analyzer.d.ts.map +1 -0
  4. package/dist/code-intelligence/analyzer.js +321 -0
  5. package/dist/code-intelligence/analyzer.js.map +1 -0
  6. package/dist/code-intelligence/ast/cache.d.ts +16 -0
  7. package/dist/code-intelligence/ast/cache.d.ts.map +1 -0
  8. package/dist/code-intelligence/ast/cache.js +44 -0
  9. package/dist/code-intelligence/ast/cache.js.map +1 -0
  10. package/dist/code-intelligence/ast/common.d.ts +8 -0
  11. package/dist/code-intelligence/ast/common.d.ts.map +1 -0
  12. package/dist/code-intelligence/ast/common.js +42 -0
  13. package/dist/code-intelligence/ast/common.js.map +1 -0
  14. package/dist/code-intelligence/ast/component.d.ts +10 -0
  15. package/dist/code-intelligence/ast/component.d.ts.map +1 -0
  16. package/dist/code-intelligence/ast/component.js +38 -0
  17. package/dist/code-intelligence/ast/component.js.map +1 -0
  18. package/dist/code-intelligence/ast/fallback.d.ts +9 -0
  19. package/dist/code-intelligence/ast/fallback.d.ts.map +1 -0
  20. package/dist/code-intelligence/ast/fallback.js +38 -0
  21. package/dist/code-intelligence/ast/fallback.js.map +1 -0
  22. package/dist/code-intelligence/ast/index.d.ts +5 -0
  23. package/dist/code-intelligence/ast/index.d.ts.map +1 -0
  24. package/dist/code-intelligence/ast/index.js +5 -0
  25. package/dist/code-intelligence/ast/index.js.map +1 -0
  26. package/dist/code-intelligence/ast/ir.d.ts +72 -0
  27. package/dist/code-intelligence/ast/ir.d.ts.map +1 -0
  28. package/dist/code-intelligence/ast/ir.js +2 -0
  29. package/dist/code-intelligence/ast/ir.js.map +1 -0
  30. package/dist/code-intelligence/ast/metrics.d.ts +25 -0
  31. package/dist/code-intelligence/ast/metrics.d.ts.map +1 -0
  32. package/dist/code-intelligence/ast/metrics.js +38 -0
  33. package/dist/code-intelligence/ast/metrics.js.map +1 -0
  34. package/dist/code-intelligence/ast/registry.d.ts +5 -0
  35. package/dist/code-intelligence/ast/registry.d.ts.map +1 -0
  36. package/dist/code-intelligence/ast/registry.js +22 -0
  37. package/dist/code-intelligence/ast/registry.js.map +1 -0
  38. package/dist/code-intelligence/ast/tree-sitter.d.ts +8 -0
  39. package/dist/code-intelligence/ast/tree-sitter.d.ts.map +1 -0
  40. package/dist/code-intelligence/ast/tree-sitter.js +247 -0
  41. package/dist/code-intelligence/ast/tree-sitter.js.map +1 -0
  42. package/dist/code-intelligence/ast/typescript.d.ts +8 -0
  43. package/dist/code-intelligence/ast/typescript.d.ts.map +1 -0
  44. package/dist/code-intelligence/ast/typescript.js +147 -0
  45. package/dist/code-intelligence/ast/typescript.js.map +1 -0
  46. package/dist/index.d.ts +10 -0
  47. package/dist/index.d.ts.map +1 -0
  48. package/dist/index.js +18 -0
  49. package/dist/index.js.map +1 -0
  50. package/dist/mcp/server.d.ts +27 -0
  51. package/dist/mcp/server.d.ts.map +1 -0
  52. package/dist/mcp/server.js +67 -0
  53. package/dist/mcp/server.js.map +1 -0
  54. package/dist/opencode/hooks.d.ts +9 -0
  55. package/dist/opencode/hooks.d.ts.map +1 -0
  56. package/dist/opencode/hooks.js +583 -0
  57. package/dist/opencode/hooks.js.map +1 -0
  58. package/dist/opencode/router/categories.d.ts +31 -0
  59. package/dist/opencode/router/categories.d.ts.map +1 -0
  60. package/dist/opencode/router/categories.js +165 -0
  61. package/dist/opencode/router/categories.js.map +1 -0
  62. package/dist/opencode/router/embeddings.d.ts +41 -0
  63. package/dist/opencode/router/embeddings.d.ts.map +1 -0
  64. package/dist/opencode/router/embeddings.js +136 -0
  65. package/dist/opencode/router/embeddings.js.map +1 -0
  66. package/dist/opencode/router/graph-state-snapshot.d.ts +35 -0
  67. package/dist/opencode/router/graph-state-snapshot.d.ts.map +1 -0
  68. package/dist/opencode/router/graph-state-snapshot.js +129 -0
  69. package/dist/opencode/router/graph-state-snapshot.js.map +1 -0
  70. package/dist/opencode/router/index.d.ts +21 -0
  71. package/dist/opencode/router/index.d.ts.map +1 -0
  72. package/dist/opencode/router/index.js +23 -0
  73. package/dist/opencode/router/index.js.map +1 -0
  74. package/dist/opencode/router/intent-classifier.d.ts +35 -0
  75. package/dist/opencode/router/intent-classifier.d.ts.map +1 -0
  76. package/dist/opencode/router/intent-classifier.js +108 -0
  77. package/dist/opencode/router/intent-classifier.js.map +1 -0
  78. package/dist/opencode/router/semantic-nudge.d.ts +42 -0
  79. package/dist/opencode/router/semantic-nudge.d.ts.map +1 -0
  80. package/dist/opencode/router/semantic-nudge.js +73 -0
  81. package/dist/opencode/router/semantic-nudge.js.map +1 -0
  82. package/dist/opencode/router/state-gate.d.ts +25 -0
  83. package/dist/opencode/router/state-gate.d.ts.map +1 -0
  84. package/dist/opencode/router/state-gate.js +178 -0
  85. package/dist/opencode/router/state-gate.js.map +1 -0
  86. package/dist/opencode/router/tool-embeddings.d.ts +36 -0
  87. package/dist/opencode/router/tool-embeddings.d.ts.map +1 -0
  88. package/dist/opencode/router/tool-embeddings.js +140 -0
  89. package/dist/opencode/router/tool-embeddings.js.map +1 -0
  90. package/dist/opencode/router/tool-registry.d.ts +45 -0
  91. package/dist/opencode/router/tool-registry.d.ts.map +1 -0
  92. package/dist/opencode/router/tool-registry.js +103 -0
  93. package/dist/opencode/router/tool-registry.js.map +1 -0
  94. package/dist/opencode/router/tool-taxonomy.d.ts +51 -0
  95. package/dist/opencode/router/tool-taxonomy.d.ts.map +1 -0
  96. package/dist/opencode/router/tool-taxonomy.js +250 -0
  97. package/dist/opencode/router/tool-taxonomy.js.map +1 -0
  98. package/dist/opencode/router/tools-composite.d.ts +21 -0
  99. package/dist/opencode/router/tools-composite.d.ts.map +1 -0
  100. package/dist/opencode/router/tools-composite.js +684 -0
  101. package/dist/opencode/router/tools-composite.js.map +1 -0
  102. package/dist/opencode/shell-hooks.d.ts +7 -0
  103. package/dist/opencode/shell-hooks.d.ts.map +1 -0
  104. package/dist/opencode/shell-hooks.js +96 -0
  105. package/dist/opencode/shell-hooks.js.map +1 -0
  106. package/dist/opencode/system-prompt.d.ts +10 -0
  107. package/dist/opencode/system-prompt.d.ts.map +1 -0
  108. package/dist/opencode/system-prompt.js +600 -0
  109. package/dist/opencode/system-prompt.js.map +1 -0
  110. package/dist/opencode/tools.d.ts +8 -0
  111. package/dist/opencode/tools.d.ts.map +1 -0
  112. package/dist/opencode/tools.js +3731 -0
  113. package/dist/opencode/tools.js.map +1 -0
  114. package/dist/opencode/workflows/chains.d.ts +52 -0
  115. package/dist/opencode/workflows/chains.d.ts.map +1 -0
  116. package/dist/opencode/workflows/chains.js +170 -0
  117. package/dist/opencode/workflows/chains.js.map +1 -0
  118. package/dist/opencode/workflows/executor.d.ts +52 -0
  119. package/dist/opencode/workflows/executor.d.ts.map +1 -0
  120. package/dist/opencode/workflows/executor.js +130 -0
  121. package/dist/opencode/workflows/executor.js.map +1 -0
  122. package/dist/opencode/workflows/index.d.ts +14 -0
  123. package/dist/opencode/workflows/index.d.ts.map +1 -0
  124. package/dist/opencode/workflows/index.js +15 -0
  125. package/dist/opencode/workflows/index.js.map +1 -0
  126. package/dist/opencode/workflows/tools-workflow.d.ts +24 -0
  127. package/dist/opencode/workflows/tools-workflow.d.ts.map +1 -0
  128. package/dist/opencode/workflows/tools-workflow.js +85 -0
  129. package/dist/opencode/workflows/tools-workflow.js.map +1 -0
  130. package/dist/opencode/workflows/types.d.ts +32 -0
  131. package/dist/opencode/workflows/types.d.ts.map +1 -0
  132. package/dist/opencode/workflows/types.js +13 -0
  133. package/dist/opencode/workflows/types.js.map +1 -0
  134. package/dist/sdd/analysis/compliance.d.ts +30 -0
  135. package/dist/sdd/analysis/compliance.d.ts.map +1 -0
  136. package/dist/sdd/analysis/compliance.js +251 -0
  137. package/dist/sdd/analysis/compliance.js.map +1 -0
  138. package/dist/sdd/analysis/scalability.d.ts +15 -0
  139. package/dist/sdd/analysis/scalability.d.ts.map +1 -0
  140. package/dist/sdd/analysis/scalability.js +72 -0
  141. package/dist/sdd/analysis/scalability.js.map +1 -0
  142. package/dist/sdd/analysis/security.d.ts +25 -0
  143. package/dist/sdd/analysis/security.d.ts.map +1 -0
  144. package/dist/sdd/analysis/security.js +94 -0
  145. package/dist/sdd/analysis/security.js.map +1 -0
  146. package/dist/sdd/brownfield/scanner.d.ts +31 -0
  147. package/dist/sdd/brownfield/scanner.d.ts.map +1 -0
  148. package/dist/sdd/brownfield/scanner.js +228 -0
  149. package/dist/sdd/brownfield/scanner.js.map +1 -0
  150. package/dist/sdd/cache/manager.d.ts +237 -0
  151. package/dist/sdd/cache/manager.d.ts.map +1 -0
  152. package/dist/sdd/cache/manager.js +770 -0
  153. package/dist/sdd/cache/manager.js.map +1 -0
  154. package/dist/sdd/cache/snapshot-store.d.ts +39 -0
  155. package/dist/sdd/cache/snapshot-store.d.ts.map +1 -0
  156. package/dist/sdd/cache/snapshot-store.js +156 -0
  157. package/dist/sdd/cache/snapshot-store.js.map +1 -0
  158. package/dist/sdd/changes/manager.d.ts +58 -0
  159. package/dist/sdd/changes/manager.d.ts.map +1 -0
  160. package/dist/sdd/changes/manager.js +235 -0
  161. package/dist/sdd/changes/manager.js.map +1 -0
  162. package/dist/sdd/cicd/generators.d.ts +16 -0
  163. package/dist/sdd/cicd/generators.d.ts.map +1 -0
  164. package/dist/sdd/cicd/generators.js +1042 -0
  165. package/dist/sdd/cicd/generators.js.map +1 -0
  166. package/dist/sdd/code-quality/complexity.d.ts +38 -0
  167. package/dist/sdd/code-quality/complexity.d.ts.map +1 -0
  168. package/dist/sdd/code-quality/complexity.js +161 -0
  169. package/dist/sdd/code-quality/complexity.js.map +1 -0
  170. package/dist/sdd/code-quality/conventions.d.ts +33 -0
  171. package/dist/sdd/code-quality/conventions.d.ts.map +1 -0
  172. package/dist/sdd/code-quality/conventions.js +193 -0
  173. package/dist/sdd/code-quality/conventions.js.map +1 -0
  174. package/dist/sdd/code-quality/dependencies.d.ts +27 -0
  175. package/dist/sdd/code-quality/dependencies.d.ts.map +1 -0
  176. package/dist/sdd/code-quality/dependencies.js +142 -0
  177. package/dist/sdd/code-quality/dependencies.js.map +1 -0
  178. package/dist/sdd/code-quality/import-analyzer.d.ts +49 -0
  179. package/dist/sdd/code-quality/import-analyzer.d.ts.map +1 -0
  180. package/dist/sdd/code-quality/import-analyzer.js +213 -0
  181. package/dist/sdd/code-quality/import-analyzer.js.map +1 -0
  182. package/dist/sdd/code-quality/metrics.d.ts +35 -0
  183. package/dist/sdd/code-quality/metrics.d.ts.map +1 -0
  184. package/dist/sdd/code-quality/metrics.js +172 -0
  185. package/dist/sdd/code-quality/metrics.js.map +1 -0
  186. package/dist/sdd/code-quality/smells.d.ts +38 -0
  187. package/dist/sdd/code-quality/smells.d.ts.map +1 -0
  188. package/dist/sdd/code-quality/smells.js +319 -0
  189. package/dist/sdd/code-quality/smells.js.map +1 -0
  190. package/dist/sdd/code-quality/symbol-parser.d.ts +28 -0
  191. package/dist/sdd/code-quality/symbol-parser.d.ts.map +1 -0
  192. package/dist/sdd/code-quality/symbol-parser.js +230 -0
  193. package/dist/sdd/code-quality/symbol-parser.js.map +1 -0
  194. package/dist/sdd/code-quality/usage-tracker.d.ts +59 -0
  195. package/dist/sdd/code-quality/usage-tracker.d.ts.map +1 -0
  196. package/dist/sdd/code-quality/usage-tracker.js +402 -0
  197. package/dist/sdd/code-quality/usage-tracker.js.map +1 -0
  198. package/dist/sdd/code-quality/utils.d.ts +6 -0
  199. package/dist/sdd/code-quality/utils.d.ts.map +1 -0
  200. package/dist/sdd/code-quality/utils.js +14 -0
  201. package/dist/sdd/code-quality/utils.js.map +1 -0
  202. package/dist/sdd/codegen/generator.d.ts +42 -0
  203. package/dist/sdd/codegen/generator.d.ts.map +1 -0
  204. package/dist/sdd/codegen/generator.js +1023 -0
  205. package/dist/sdd/codegen/generator.js.map +1 -0
  206. package/dist/sdd/constitution/validator.d.ts +37 -0
  207. package/dist/sdd/constitution/validator.d.ts.map +1 -0
  208. package/dist/sdd/constitution/validator.js +192 -0
  209. package/dist/sdd/constitution/validator.js.map +1 -0
  210. package/dist/sdd/cost/estimator.d.ts +31 -0
  211. package/dist/sdd/cost/estimator.d.ts.map +1 -0
  212. package/dist/sdd/cost/estimator.js +92 -0
  213. package/dist/sdd/cost/estimator.js.map +1 -0
  214. package/dist/sdd/coverage/tracker.d.ts +47 -0
  215. package/dist/sdd/coverage/tracker.d.ts.map +1 -0
  216. package/dist/sdd/coverage/tracker.js +251 -0
  217. package/dist/sdd/coverage/tracker.js.map +1 -0
  218. package/dist/sdd/disaster/recovery.d.ts +11 -0
  219. package/dist/sdd/disaster/recovery.d.ts.map +1 -0
  220. package/dist/sdd/disaster/recovery.js +55 -0
  221. package/dist/sdd/disaster/recovery.js.map +1 -0
  222. package/dist/sdd/discovery/adaptive.d.ts +14 -0
  223. package/dist/sdd/discovery/adaptive.d.ts.map +1 -0
  224. package/dist/sdd/discovery/adaptive.js +145 -0
  225. package/dist/sdd/discovery/adaptive.js.map +1 -0
  226. package/dist/sdd/discovery/briefing-analyzer.d.ts +66 -0
  227. package/dist/sdd/discovery/briefing-analyzer.d.ts.map +1 -0
  228. package/dist/sdd/discovery/briefing-analyzer.js +672 -0
  229. package/dist/sdd/discovery/briefing-analyzer.js.map +1 -0
  230. package/dist/sdd/discovery/briefing.d.ts +109 -0
  231. package/dist/sdd/discovery/briefing.d.ts.map +1 -0
  232. package/dist/sdd/discovery/briefing.js +617 -0
  233. package/dist/sdd/discovery/briefing.js.map +1 -0
  234. package/dist/sdd/discovery/graph-builder.d.ts +10 -0
  235. package/dist/sdd/discovery/graph-builder.d.ts.map +1 -0
  236. package/dist/sdd/discovery/graph-builder.js +510 -0
  237. package/dist/sdd/discovery/graph-builder.js.map +1 -0
  238. package/dist/sdd/documentation/generator.d.ts +7 -0
  239. package/dist/sdd/documentation/generator.d.ts.map +1 -0
  240. package/dist/sdd/documentation/generator.js +119 -0
  241. package/dist/sdd/documentation/generator.js.map +1 -0
  242. package/dist/sdd/domain/types.d.ts +460 -0
  243. package/dist/sdd/domain/types.d.ts.map +1 -0
  244. package/dist/sdd/domain/types.js +25 -0
  245. package/dist/sdd/domain/types.js.map +1 -0
  246. package/dist/sdd/drift/detector.d.ts +28 -0
  247. package/dist/sdd/drift/detector.d.ts.map +1 -0
  248. package/dist/sdd/drift/detector.js +379 -0
  249. package/dist/sdd/drift/detector.js.map +1 -0
  250. package/dist/sdd/drift/exclusion.d.ts +54 -0
  251. package/dist/sdd/drift/exclusion.d.ts.map +1 -0
  252. package/dist/sdd/drift/exclusion.js +179 -0
  253. package/dist/sdd/drift/exclusion.js.map +1 -0
  254. package/dist/sdd/drift/signals.d.ts +52 -0
  255. package/dist/sdd/drift/signals.d.ts.map +1 -0
  256. package/dist/sdd/drift/signals.js +470 -0
  257. package/dist/sdd/drift/signals.js.map +1 -0
  258. package/dist/sdd/enforcement/interceptor.d.ts +47 -0
  259. package/dist/sdd/enforcement/interceptor.d.ts.map +1 -0
  260. package/dist/sdd/enforcement/interceptor.js +365 -0
  261. package/dist/sdd/enforcement/interceptor.js.map +1 -0
  262. package/dist/sdd/enforcement/workflow-tracker.d.ts +66 -0
  263. package/dist/sdd/enforcement/workflow-tracker.d.ts.map +1 -0
  264. package/dist/sdd/enforcement/workflow-tracker.js +229 -0
  265. package/dist/sdd/enforcement/workflow-tracker.js.map +1 -0
  266. package/dist/sdd/graph/engine.d.ts +44 -0
  267. package/dist/sdd/graph/engine.d.ts.map +1 -0
  268. package/dist/sdd/graph/engine.js +203 -0
  269. package/dist/sdd/graph/engine.js.map +1 -0
  270. package/dist/sdd/graph/index.d.ts +160 -0
  271. package/dist/sdd/graph/index.d.ts.map +1 -0
  272. package/dist/sdd/graph/index.js +624 -0
  273. package/dist/sdd/graph/index.js.map +1 -0
  274. package/dist/sdd/graph/integrity-guard.d.ts +129 -0
  275. package/dist/sdd/graph/integrity-guard.d.ts.map +1 -0
  276. package/dist/sdd/graph/integrity-guard.js +263 -0
  277. package/dist/sdd/graph/integrity-guard.js.map +1 -0
  278. package/dist/sdd/graph/integrity.d.ts +79 -0
  279. package/dist/sdd/graph/integrity.d.ts.map +1 -0
  280. package/dist/sdd/graph/integrity.js +462 -0
  281. package/dist/sdd/graph/integrity.js.map +1 -0
  282. package/dist/sdd/graph/pruner.d.ts +27 -0
  283. package/dist/sdd/graph/pruner.d.ts.map +1 -0
  284. package/dist/sdd/graph/pruner.js +203 -0
  285. package/dist/sdd/graph/pruner.js.map +1 -0
  286. package/dist/sdd/graph/traverse.d.ts +43 -0
  287. package/dist/sdd/graph/traverse.d.ts.map +1 -0
  288. package/dist/sdd/graph/traverse.js +265 -0
  289. package/dist/sdd/graph/traverse.js.map +1 -0
  290. package/dist/sdd/incidents/manager.d.ts +10 -0
  291. package/dist/sdd/incidents/manager.d.ts.map +1 -0
  292. package/dist/sdd/incidents/manager.js +63 -0
  293. package/dist/sdd/incidents/manager.js.map +1 -0
  294. package/dist/sdd/knowledge/transfer.d.ts +24 -0
  295. package/dist/sdd/knowledge/transfer.d.ts.map +1 -0
  296. package/dist/sdd/knowledge/transfer.js +94 -0
  297. package/dist/sdd/knowledge/transfer.js.map +1 -0
  298. package/dist/sdd/migrations/fixes.d.ts +2 -0
  299. package/dist/sdd/migrations/fixes.d.ts.map +1 -0
  300. package/dist/sdd/migrations/fixes.js +159 -0
  301. package/dist/sdd/migrations/fixes.js.map +1 -0
  302. package/dist/sdd/migrations/index.d.ts +2 -0
  303. package/dist/sdd/migrations/index.d.ts.map +1 -0
  304. package/dist/sdd/migrations/index.js +5 -0
  305. package/dist/sdd/migrations/index.js.map +1 -0
  306. package/dist/sdd/migrations/migration-runner.d.ts +41 -0
  307. package/dist/sdd/migrations/migration-runner.d.ts.map +1 -0
  308. package/dist/sdd/migrations/migration-runner.js +91 -0
  309. package/dist/sdd/migrations/migration-runner.js.map +1 -0
  310. package/dist/sdd/monitoring/setup.d.ts +40 -0
  311. package/dist/sdd/monitoring/setup.d.ts.map +1 -0
  312. package/dist/sdd/monitoring/setup.js +177 -0
  313. package/dist/sdd/monitoring/setup.js.map +1 -0
  314. package/dist/sdd/monitoring/telemetry.d.ts +18 -0
  315. package/dist/sdd/monitoring/telemetry.d.ts.map +1 -0
  316. package/dist/sdd/monitoring/telemetry.js +37 -0
  317. package/dist/sdd/monitoring/telemetry.js.map +1 -0
  318. package/dist/sdd/patterns/anti-patterns.d.ts +21 -0
  319. package/dist/sdd/patterns/anti-patterns.d.ts.map +1 -0
  320. package/dist/sdd/patterns/anti-patterns.js +286 -0
  321. package/dist/sdd/patterns/anti-patterns.js.map +1 -0
  322. package/dist/sdd/patterns/ast-clones.d.ts +23 -0
  323. package/dist/sdd/patterns/ast-clones.d.ts.map +1 -0
  324. package/dist/sdd/patterns/ast-clones.js +171 -0
  325. package/dist/sdd/patterns/ast-clones.js.map +1 -0
  326. package/dist/sdd/patterns/config-drift.d.ts +16 -0
  327. package/dist/sdd/patterns/config-drift.d.ts.map +1 -0
  328. package/dist/sdd/patterns/config-drift.js +322 -0
  329. package/dist/sdd/patterns/config-drift.js.map +1 -0
  330. package/dist/sdd/patterns/contradictions.d.ts +38 -0
  331. package/dist/sdd/patterns/contradictions.d.ts.map +1 -0
  332. package/dist/sdd/patterns/contradictions.js +237 -0
  333. package/dist/sdd/patterns/contradictions.js.map +1 -0
  334. package/dist/sdd/patterns/learner.d.ts +49 -0
  335. package/dist/sdd/patterns/learner.d.ts.map +1 -0
  336. package/dist/sdd/patterns/learner.js +226 -0
  337. package/dist/sdd/patterns/learner.js.map +1 -0
  338. package/dist/sdd/permissions/access.d.ts +69 -0
  339. package/dist/sdd/permissions/access.d.ts.map +1 -0
  340. package/dist/sdd/permissions/access.js +333 -0
  341. package/dist/sdd/permissions/access.js.map +1 -0
  342. package/dist/sdd/persistence/repository.d.ts +60 -0
  343. package/dist/sdd/persistence/repository.d.ts.map +1 -0
  344. package/dist/sdd/persistence/repository.js +96 -0
  345. package/dist/sdd/persistence/repository.js.map +1 -0
  346. package/dist/sdd/persistence/sqlite.d.ts +122 -0
  347. package/dist/sdd/persistence/sqlite.d.ts.map +1 -0
  348. package/dist/sdd/persistence/sqlite.js +602 -0
  349. package/dist/sdd/persistence/sqlite.js.map +1 -0
  350. package/dist/sdd/persistence/yaml.d.ts +41 -0
  351. package/dist/sdd/persistence/yaml.d.ts.map +1 -0
  352. package/dist/sdd/persistence/yaml.js +382 -0
  353. package/dist/sdd/persistence/yaml.js.map +1 -0
  354. package/dist/sdd/promises/classifier.d.ts +48 -0
  355. package/dist/sdd/promises/classifier.d.ts.map +1 -0
  356. package/dist/sdd/promises/classifier.js +215 -0
  357. package/dist/sdd/promises/classifier.js.map +1 -0
  358. package/dist/sdd/promises/tracker.d.ts +20 -0
  359. package/dist/sdd/promises/tracker.d.ts.map +1 -0
  360. package/dist/sdd/promises/tracker.js +204 -0
  361. package/dist/sdd/promises/tracker.js.map +1 -0
  362. package/dist/sdd/quality/scorer.d.ts +44 -0
  363. package/dist/sdd/quality/scorer.d.ts.map +1 -0
  364. package/dist/sdd/quality/scorer.js +216 -0
  365. package/dist/sdd/quality/scorer.js.map +1 -0
  366. package/dist/sdd/rollback/manager.d.ts +45 -0
  367. package/dist/sdd/rollback/manager.d.ts.map +1 -0
  368. package/dist/sdd/rollback/manager.js +266 -0
  369. package/dist/sdd/rollback/manager.js.map +1 -0
  370. package/dist/sdd/session/handoff.d.ts +52 -0
  371. package/dist/sdd/session/handoff.d.ts.map +1 -0
  372. package/dist/sdd/session/handoff.js +264 -0
  373. package/dist/sdd/session/handoff.js.map +1 -0
  374. package/dist/sdd/sla/tracker.d.ts +11 -0
  375. package/dist/sdd/sla/tracker.d.ts.map +1 -0
  376. package/dist/sdd/sla/tracker.js +52 -0
  377. package/dist/sdd/sla/tracker.js.map +1 -0
  378. package/dist/sdd/sync/git-sync.d.ts +61 -0
  379. package/dist/sdd/sync/git-sync.d.ts.map +1 -0
  380. package/dist/sdd/sync/git-sync.js +297 -0
  381. package/dist/sdd/sync/git-sync.js.map +1 -0
  382. package/dist/sdd/toggle/state.d.ts +8 -0
  383. package/dist/sdd/toggle/state.d.ts.map +1 -0
  384. package/dist/sdd/toggle/state.js +32 -0
  385. package/dist/sdd/toggle/state.js.map +1 -0
  386. package/dist/sdd/transactions/manager.d.ts +12 -0
  387. package/dist/sdd/transactions/manager.d.ts.map +1 -0
  388. package/dist/sdd/transactions/manager.js +80 -0
  389. package/dist/sdd/transactions/manager.js.map +1 -0
  390. package/dist/sdd/validation/coverage-index.d.ts +117 -0
  391. package/dist/sdd/validation/coverage-index.d.ts.map +1 -0
  392. package/dist/sdd/validation/coverage-index.js +251 -0
  393. package/dist/sdd/validation/coverage-index.js.map +1 -0
  394. package/dist/sdd/validation/executable.d.ts +26 -0
  395. package/dist/sdd/validation/executable.d.ts.map +1 -0
  396. package/dist/sdd/validation/executable.js +122 -0
  397. package/dist/sdd/validation/executable.js.map +1 -0
  398. package/dist/sdd/validation/smart-validator.d.ts +53 -0
  399. package/dist/sdd/validation/smart-validator.d.ts.map +1 -0
  400. package/dist/sdd/validation/smart-validator.js +347 -0
  401. package/dist/sdd/validation/smart-validator.js.map +1 -0
  402. package/dist/sdd/validation/validator.d.ts +39 -0
  403. package/dist/sdd/validation/validator.d.ts.map +1 -0
  404. package/dist/sdd/validation/validator.js +512 -0
  405. package/dist/sdd/validation/validator.js.map +1 -0
  406. package/dist/sdd/workflow/exporter.d.ts +36 -0
  407. package/dist/sdd/workflow/exporter.d.ts.map +1 -0
  408. package/dist/sdd/workflow/exporter.js +112 -0
  409. package/dist/sdd/workflow/exporter.js.map +1 -0
  410. package/dist/sdd/workflows/ab-testing.d.ts +18 -0
  411. package/dist/sdd/workflows/ab-testing.d.ts.map +1 -0
  412. package/dist/sdd/workflows/ab-testing.js +67 -0
  413. package/dist/sdd/workflows/ab-testing.js.map +1 -0
  414. package/dist/sdd/workflows/bug-fix.d.ts +13 -0
  415. package/dist/sdd/workflows/bug-fix.d.ts.map +1 -0
  416. package/dist/sdd/workflows/bug-fix.js +65 -0
  417. package/dist/sdd/workflows/bug-fix.js.map +1 -0
  418. package/dist/sdd/workflows/data-migration.d.ts +14 -0
  419. package/dist/sdd/workflows/data-migration.d.ts.map +1 -0
  420. package/dist/sdd/workflows/data-migration.js +68 -0
  421. package/dist/sdd/workflows/data-migration.js.map +1 -0
  422. package/dist/sdd/workflows/deprecation.d.ts +15 -0
  423. package/dist/sdd/workflows/deprecation.d.ts.map +1 -0
  424. package/dist/sdd/workflows/deprecation.js +68 -0
  425. package/dist/sdd/workflows/deprecation.js.map +1 -0
  426. package/dist/sdd/workflows/feature-flags.d.ts +14 -0
  427. package/dist/sdd/workflows/feature-flags.d.ts.map +1 -0
  428. package/dist/sdd/workflows/feature-flags.js +73 -0
  429. package/dist/sdd/workflows/feature-flags.js.map +1 -0
  430. package/dist/sdd/workflows/hotfix.d.ts +13 -0
  431. package/dist/sdd/workflows/hotfix.d.ts.map +1 -0
  432. package/dist/sdd/workflows/hotfix.js +67 -0
  433. package/dist/sdd/workflows/hotfix.js.map +1 -0
  434. package/dist/sdd/workflows/multi-tenancy.d.ts +13 -0
  435. package/dist/sdd/workflows/multi-tenancy.d.ts.map +1 -0
  436. package/dist/sdd/workflows/multi-tenancy.js +68 -0
  437. package/dist/sdd/workflows/multi-tenancy.js.map +1 -0
  438. package/dist/sdd/workflows/onboarding.d.ts +7 -0
  439. package/dist/sdd/workflows/onboarding.d.ts.map +1 -0
  440. package/dist/sdd/workflows/onboarding.js +43 -0
  441. package/dist/sdd/workflows/onboarding.js.map +1 -0
  442. package/dist/sdd/workflows/refactoring.d.ts +14 -0
  443. package/dist/sdd/workflows/refactoring.d.ts.map +1 -0
  444. package/dist/sdd/workflows/refactoring.js +73 -0
  445. package/dist/sdd/workflows/refactoring.js.map +1 -0
  446. package/dist/server/events.d.ts +64 -0
  447. package/dist/server/events.d.ts.map +1 -0
  448. package/dist/server/events.js +149 -0
  449. package/dist/server/events.js.map +1 -0
  450. package/dist/server/server.d.ts +33 -0
  451. package/dist/server/server.d.ts.map +1 -0
  452. package/dist/server/server.js +1019 -0
  453. package/dist/server/server.js.map +1 -0
  454. package/marketplace.json +39 -0
  455. package/package.json +65 -0
  456. package/src/code-intelligence/analyzer.ts +350 -0
  457. package/src/code-intelligence/ast/cache.ts +61 -0
  458. package/src/code-intelligence/ast/common.ts +62 -0
  459. package/src/code-intelligence/ast/component.ts +39 -0
  460. package/src/code-intelligence/ast/fallback.ts +44 -0
  461. package/src/code-intelligence/ast/index.ts +4 -0
  462. package/src/code-intelligence/ast/ir.ts +91 -0
  463. package/src/code-intelligence/ast/metrics.ts +65 -0
  464. package/src/code-intelligence/ast/registry.ts +28 -0
  465. package/src/code-intelligence/ast/tree-sitter.ts +226 -0
  466. package/src/code-intelligence/ast/typescript.ts +140 -0
  467. package/src/index.ts +22 -0
  468. package/src/mcp/server.ts +77 -0
  469. package/src/opencode/hooks.ts +728 -0
  470. package/src/opencode/router/categories.ts +192 -0
  471. package/src/opencode/router/embeddings.ts +149 -0
  472. package/src/opencode/router/graph-state-snapshot.ts +163 -0
  473. package/src/opencode/router/index.ts +44 -0
  474. package/src/opencode/router/intent-classifier.ts +140 -0
  475. package/src/opencode/router/semantic-nudge.ts +89 -0
  476. package/src/opencode/router/state-gate.ts +192 -0
  477. package/src/opencode/router/tool-embeddings.ts +162 -0
  478. package/src/opencode/router/tool-registry.ts +135 -0
  479. package/src/opencode/router/tool-taxonomy.ts +284 -0
  480. package/src/opencode/router/tools-composite.ts +685 -0
  481. package/src/opencode/shell-hooks.ts +115 -0
  482. package/src/opencode/system-prompt.ts +617 -0
  483. package/src/opencode/tools.ts +4102 -0
  484. package/src/opencode/workflows/chains.ts +205 -0
  485. package/src/opencode/workflows/executor.ts +172 -0
  486. package/src/opencode/workflows/index.ts +21 -0
  487. package/src/opencode/workflows/tools-workflow.ts +91 -0
  488. package/src/opencode/workflows/types.ts +42 -0
  489. package/src/sdd/analysis/compliance.ts +279 -0
  490. package/src/sdd/analysis/scalability.ts +97 -0
  491. package/src/sdd/analysis/security.ts +135 -0
  492. package/src/sdd/brownfield/scanner.ts +276 -0
  493. package/src/sdd/cache/manager.ts +899 -0
  494. package/src/sdd/cache/snapshot-store.ts +185 -0
  495. package/src/sdd/changes/manager.ts +326 -0
  496. package/src/sdd/cicd/generators.ts +1095 -0
  497. package/src/sdd/code-quality/complexity.ts +235 -0
  498. package/src/sdd/code-quality/conventions.ts +220 -0
  499. package/src/sdd/code-quality/dependencies.ts +203 -0
  500. package/src/sdd/code-quality/import-analyzer.ts +294 -0
  501. package/src/sdd/code-quality/metrics.ts +232 -0
  502. package/src/sdd/code-quality/smells.ts +415 -0
  503. package/src/sdd/code-quality/symbol-parser.ts +335 -0
  504. package/src/sdd/code-quality/usage-tracker.ts +527 -0
  505. package/src/sdd/code-quality/utils.ts +13 -0
  506. package/src/sdd/codegen/generator.ts +1181 -0
  507. package/src/sdd/constitution/validator.ts +253 -0
  508. package/src/sdd/cost/estimator.ts +147 -0
  509. package/src/sdd/coverage/tracker.ts +342 -0
  510. package/src/sdd/disaster/recovery.ts +79 -0
  511. package/src/sdd/discovery/adaptive.ts +167 -0
  512. package/src/sdd/discovery/briefing-analyzer.ts +802 -0
  513. package/src/sdd/discovery/briefing.ts +770 -0
  514. package/src/sdd/discovery/graph-builder.ts +598 -0
  515. package/src/sdd/documentation/generator.ts +158 -0
  516. package/src/sdd/domain/types.ts +658 -0
  517. package/src/sdd/drift/detector.ts +465 -0
  518. package/src/sdd/drift/exclusion.ts +223 -0
  519. package/src/sdd/drift/signals.ts +577 -0
  520. package/src/sdd/enforcement/interceptor.ts +444 -0
  521. package/src/sdd/enforcement/workflow-tracker.ts +263 -0
  522. package/src/sdd/graph/engine.ts +277 -0
  523. package/src/sdd/graph/index.ts +700 -0
  524. package/src/sdd/graph/integrity-guard.ts +348 -0
  525. package/src/sdd/graph/integrity.ts +628 -0
  526. package/src/sdd/graph/pruner.ts +221 -0
  527. package/src/sdd/graph/traverse.ts +331 -0
  528. package/src/sdd/incidents/manager.ts +87 -0
  529. package/src/sdd/knowledge/transfer.ts +140 -0
  530. package/src/sdd/migrations/fixes.ts +154 -0
  531. package/src/sdd/migrations/index.ts +14 -0
  532. package/src/sdd/migrations/migration-runner.ts +118 -0
  533. package/src/sdd/monitoring/setup.ts +237 -0
  534. package/src/sdd/monitoring/telemetry.ts +44 -0
  535. package/src/sdd/patterns/anti-patterns.ts +333 -0
  536. package/src/sdd/patterns/ast-clones.ts +214 -0
  537. package/src/sdd/patterns/config-drift.ts +346 -0
  538. package/src/sdd/patterns/contradictions.ts +323 -0
  539. package/src/sdd/patterns/learner.ts +266 -0
  540. package/src/sdd/permissions/access.ts +478 -0
  541. package/src/sdd/persistence/repository.ts +166 -0
  542. package/src/sdd/persistence/sqlite.ts +703 -0
  543. package/src/sdd/persistence/yaml.ts +409 -0
  544. package/src/sdd/promises/classifier.ts +253 -0
  545. package/src/sdd/promises/tracker.ts +258 -0
  546. package/src/sdd/quality/scorer.ts +263 -0
  547. package/src/sdd/rollback/manager.ts +361 -0
  548. package/src/sdd/session/handoff.ts +354 -0
  549. package/src/sdd/sla/tracker.ts +68 -0
  550. package/src/sdd/sync/git-sync.ts +401 -0
  551. package/src/sdd/toggle/state.ts +38 -0
  552. package/src/sdd/transactions/manager.ts +93 -0
  553. package/src/sdd/validation/coverage-index.ts +339 -0
  554. package/src/sdd/validation/executable.ts +127 -0
  555. package/src/sdd/validation/smart-validator.ts +470 -0
  556. package/src/sdd/validation/validator.ts +641 -0
  557. package/src/sdd/workflow/exporter.ts +169 -0
  558. package/src/sdd/workflows/ab-testing.ts +90 -0
  559. package/src/sdd/workflows/bug-fix.ts +81 -0
  560. package/src/sdd/workflows/data-migration.ts +86 -0
  561. package/src/sdd/workflows/deprecation.ts +87 -0
  562. package/src/sdd/workflows/feature-flags.ts +91 -0
  563. package/src/sdd/workflows/hotfix.ts +83 -0
  564. package/src/sdd/workflows/multi-tenancy.ts +84 -0
  565. package/src/sdd/workflows/onboarding.ts +82 -0
  566. package/src/sdd/workflows/refactoring.ts +90 -0
  567. package/src/server/events.ts +184 -0
  568. package/src/server/server.ts +1088 -0
@@ -0,0 +1,192 @@
1
+ /**
2
+ * Categories — Mapeamento de tools para categorias de intenção.
3
+ *
4
+ * Cada tool é classificada em uma ou mais categorias.
5
+ * O intent classifier usa isso para filtrar tools por categoria.
6
+ *
7
+ * Consumido por: intent-classifier.ts, tool-registry.ts
8
+ * Dependências: tool-taxonomy.ts
9
+ */
10
+
11
+ import { STANDALONE_TOOLS, TOOL_TAXONOMY, type ToolCategory } from "./tool-taxonomy.js"
12
+
13
+ /**
14
+ * Categorias de intenção do usuário.
15
+ */
16
+ export type IntentCategory =
17
+ | "mutation" // Criar, modificar, remover nós/relações
18
+ | "query" // Buscar, consultar, inspecionar o grafo
19
+ | "workflow" // Gerenciar changes, aprovações, ciclo de vida
20
+ | "analysis" // Análise de impacto, drift, validação
21
+ | "quality" // Qualidade de código, métricas, smells
22
+ | "enterprise" // Workflows empresariais (migration, security, etc.)
23
+ | "admin" // Administração: permissões, sync, cache, snapshots
24
+ | "discovery" // Descoberta de requisitos, briefing, perguntas
25
+ | "implementation" // Geração de código, planejamento, implementação
26
+ | "info" // Informação: status, histórico, help
27
+
28
+ /**
29
+ * Mapeamento de tools standalone para categorias de intenção.
30
+ */
31
+ const STANDALONE_CATEGORIES: Record<string, IntentCategory[]> = {
32
+ // Mutation
33
+ "sdd.initialize": ["mutation"],
34
+ "sdd.build_graph": ["mutation", "discovery"],
35
+ "sdd.update_from_answers": ["mutation", "discovery"],
36
+ "sdd.discover": ["discovery"],
37
+
38
+ // Query
39
+ "sdd.inspect": ["query"],
40
+ "sdd.query_graph": ["query"],
41
+ "sdd.get_context": ["query"],
42
+
43
+ // Workflow
44
+ "sdd.enforce": ["workflow"],
45
+ "sdd.enforce_rules": ["workflow"],
46
+ "sdd.full_cycle": ["workflow"],
47
+ "sdd.create_change": ["workflow"],
48
+ "sdd.approve_change": ["workflow"],
49
+ "sdd.complete_change": ["workflow"],
50
+ "sdd.fail_change": ["workflow"],
51
+ "sdd.pending_changes": ["workflow", "info"],
52
+ "sdd.change_history": ["info"],
53
+ "sdd.impact_report": ["analysis"],
54
+ "sdd.toggle": ["admin"],
55
+ "sdd.toggle_status": ["admin"],
56
+
57
+ // Analysis
58
+ "sdd.analyze_impact": ["analysis"],
59
+ "sdd.validate": ["analysis"],
60
+ "sdd.detect_drift": ["analysis"],
61
+ "sdd.drift_signals": ["analysis"],
62
+ "sdd.anti_patterns": ["analysis"],
63
+ "sdd.clone_detection": ["analysis"],
64
+ "sdd.contradictions": ["analysis"],
65
+ "sdd.coverage": ["analysis"],
66
+ "sdd.promises": ["analysis"],
67
+
68
+ // Implementation
69
+ "sdd.generate_code": ["implementation"],
70
+ "sdd.auto_link_tests": ["implementation"],
71
+
72
+ // Quality (individual tools, não composits)
73
+ "sdd.quality": ["quality"],
74
+ "sdd.constitution": ["analysis"],
75
+
76
+ // Enterprise
77
+ "sdd.bug_fix": ["workflow", "implementation"],
78
+ "sdd.hotfix": ["workflow", "implementation"],
79
+ "sdd.refactoring": ["workflow", "implementation"],
80
+ "sdd.deprecate": ["workflow"],
81
+ "sdd.install_hooks": ["implementation"],
82
+ "sdd.brownfield_scan": ["analysis"],
83
+ "sdd.generate_cicd": ["implementation"],
84
+ "sdd.session_handoff": ["info"],
85
+ "sdd.migrate_storage": ["admin"],
86
+
87
+ // Info
88
+ "sdd.start_dashboard": ["admin"],
89
+ "sdd.mcp_server_info": ["info"],
90
+ "sdd.handle_mcp_tool": ["info"],
91
+ }
92
+
93
+ /**
94
+ * Mapeamento de tools composits para categorias de intenção.
95
+ */
96
+ const COMPOSITE_CATEGORIES: Record<string, IntentCategory[]> = {
97
+ "sdd.graph_mutation": ["mutation"],
98
+ "sdd.graph_query": ["query"],
99
+ "sdd.traverse": ["query"],
100
+ "sdd.permissions": ["admin"],
101
+ "sdd.snapshot": ["admin"],
102
+ "sdd.sync": ["admin"],
103
+ "sdd.graph_admin": ["admin", "analysis"],
104
+ "sdd.code_quality": ["quality"],
105
+ "sdd.enterprise": ["enterprise"],
106
+ "sdd.drift_whitelist": ["analysis"],
107
+ }
108
+
109
+ /**
110
+ * Obtém as categorias de intenção para uma tool.
111
+ */
112
+ export function getToolCategories(toolName: string): IntentCategory[] {
113
+ if (STANDALONE_CATEGORIES[toolName]) return STANDALONE_CATEGORIES[toolName]
114
+ if (COMPOSITE_CATEGORIES[toolName]) return COMPOSITE_CATEGORIES[toolName]
115
+ return ["info"] // fallback
116
+ }
117
+
118
+ /**
119
+ * Obtém todas as tools de uma categoria de intenção.
120
+ */
121
+ export function getToolsByCategory(category: IntentCategory): string[] {
122
+ const tools: string[] = []
123
+
124
+ for (const [name, categories] of Object.entries(STANDALONE_CATEGORIES)) {
125
+ if (categories.includes(category)) tools.push(name)
126
+ }
127
+ for (const [name, categories] of Object.entries(COMPOSITE_CATEGORIES)) {
128
+ if (categories.includes(category)) tools.push(name)
129
+ }
130
+
131
+ return tools
132
+ }
133
+
134
+ /**
135
+ * Obtém categorias representadas em um conjunto de tools.
136
+ */
137
+ export function getCategoriesInToolSet(toolNames: Set<string>): IntentCategory[] {
138
+ const categories = new Set<IntentCategory>()
139
+ for (const name of toolNames) {
140
+ for (const cat of getToolCategories(name)) {
141
+ categories.add(cat)
142
+ }
143
+ }
144
+ return [...categories]
145
+ }
146
+
147
+ /**
148
+ * Keywords associadas a cada categoria de intenção.
149
+ * Usado como sinal auxiliar no intent classifier.
150
+ */
151
+ export const CATEGORY_KEYWORDS: Record<IntentCategory, string[]> = {
152
+ mutation: [
153
+ "criar", "adicionar", "remover", "deletar", "modificar", "atualizar",
154
+ "create", "add", "remove", "delete", "modify", "update",
155
+ ],
156
+ query: [
157
+ "buscar", "consultar", "mostrar", "listar", "ver", "inspecionar",
158
+ "search", "query", "show", "list", "find", "inspect", "get",
159
+ ],
160
+ workflow: [
161
+ "aprovar", "rejeitar", "completar", "falhar", "mudar", "change",
162
+ "approve", "reject", "complete", "fail", "change", "enforce",
163
+ ],
164
+ analysis: [
165
+ "analisar", "validar", "verificar", "detectar", "drift", "impacto",
166
+ "analyze", "validate", "verify", "detect", "drift", "impact",
167
+ ],
168
+ quality: [
169
+ "qualidade", "métrica", "smell", "complexidade", "dependência",
170
+ "quality", "metric", "smell", "complexity", "dependency", "dead code",
171
+ ],
172
+ enterprise: [
173
+ "migration", "experimento", "flag", "tenant", "segurança", "compliance",
174
+ "security", "monitoring", "incident", "sla", "custo",
175
+ ],
176
+ admin: [
177
+ "permissão", "role", "audit", "sync", "snapshot", "rollback", "cache",
178
+ "permission", "role", "sync", "snapshot", "rollback",
179
+ ],
180
+ discovery: [
181
+ "briefing", "descobrir", "perguntar", "especificação", "requisito",
182
+ "discover", "briefing", "question", "specification", "requirement",
183
+ ],
184
+ implementation: [
185
+ "implementar", "gerar código", "code", "generate", "planejar",
186
+ "implement", "build", "write", "plan",
187
+ ],
188
+ info: [
189
+ "status", "histórico", "help", "informação", "info",
190
+ "status", "history", "help", "information", "info",
191
+ ],
192
+ }
@@ -0,0 +1,149 @@
1
+ /**
2
+ * Similaridade local entre input do usuário e tools SDD.
3
+ *
4
+ * O roteamento usa BM25 lexical; as funções de embedding permanecem apenas
5
+ * como compatibilidade para consumidores externos e migração futura.
6
+ *
7
+ * Consumido por: intent-classifier.ts, semantic-nudge.ts
8
+ * Dependências: nenhuma (módulo puro)
9
+ */
10
+
11
+ /** Dimensão dos embeddings (compatível com sentence-transformers all-MiniLM-L6-v2) */
12
+ const EMBEDDING_DIM = 384
13
+
14
+ /**
15
+ * Gera um embedding determinístico a partir de uma string.
16
+ * Usa hash simples para criar um vetor pseudo-aleatório.
17
+ * Para produção, substituir por chamada a um modelo real.
18
+ */
19
+ function hashToEmbedding(text: string): number[] {
20
+ const embedding: number[] = new Array(EMBEDDING_DIM)
21
+ const normalized = text.toLowerCase().replace(/[^a-z0-9\s]/g, " ").trim()
22
+ const words = normalized.split(/\s+/).filter(w => w.length > 1)
23
+
24
+ // Inicializar com zeros
25
+ for (let i = 0; i < EMBEDDING_DIM; i++) {
26
+ embedding[i] = 0
27
+ }
28
+
29
+ // Adicionar contribuição de cada palavra
30
+ for (const word of words) {
31
+ let hash = 0
32
+ for (let i = 0; i < word.length; i++) {
33
+ hash = ((hash << 5) - hash + word.charCodeAt(i)) | 0
34
+ }
35
+
36
+ // Espalhar a contribuição da palavra pelo vetor
37
+ const seed = Math.abs(hash)
38
+ for (let i = 0; i < EMBEDDING_DIM; i++) {
39
+ const val = Math.sin(seed * (i + 1) * 0.001) * 0.1
40
+ embedding[i] += val
41
+ }
42
+ }
43
+
44
+ // Normalizar
45
+ let norm = 0
46
+ for (let i = 0; i < EMBEDDING_DIM; i++) {
47
+ norm += embedding[i] * embedding[i]
48
+ }
49
+ norm = Math.sqrt(norm)
50
+ if (norm > 0) {
51
+ for (let i = 0; i < EMBEDDING_DIM; i++) {
52
+ embedding[i] /= norm
53
+ }
54
+ }
55
+
56
+ return embedding
57
+ }
58
+
59
+ /**
60
+ * Calcula similaridade coseno entre dois vetores.
61
+ */
62
+ export function cosineSimilarity(a: number[], b: number[]): number {
63
+ if (a.length !== b.length) return 0
64
+ let dotProduct = 0
65
+ let normA = 0
66
+ let normB = 0
67
+ for (let i = 0; i < a.length; i++) {
68
+ dotProduct += a[i] * b[i]
69
+ normA += a[i] * a[i]
70
+ normB += b[i] * b[i]
71
+ }
72
+ const denominator = Math.sqrt(normA) * Math.sqrt(normB)
73
+ return denominator === 0 ? 0 : dotProduct / denominator
74
+ }
75
+
76
+ /**
77
+ * Cache de embeddings calculados.
78
+ */
79
+ const embeddingCache = new Map<string, number[]>()
80
+
81
+ /**
82
+ * Obtém o embedding para uma string (com cache).
83
+ */
84
+ export function getEmbedding(text: string): number[] {
85
+ const cached = embeddingCache.get(text)
86
+ if (cached) return cached
87
+
88
+ const embedding = hashToEmbedding(text)
89
+ embeddingCache.set(text, embedding)
90
+ return embedding
91
+ }
92
+
93
+ /**
94
+ * Calcula similaridade entre um texto e múltiplas opções.
95
+ * Retorna pares (label, score) ordenados por similaridade decrescente.
96
+ */
97
+ export function rankSimilarity(
98
+ query: string,
99
+ options: Array<{ label: string; text: string }>,
100
+ ): Array<{ label: string; score: number }> {
101
+ // Tool routing needs dependable lexical relevance, not an untrained hash
102
+ // vector that merely looks semantic. BM25 is local, deterministic and
103
+ // preserves exact technical terms, filenames and command names.
104
+ const tokenize = (text: string) => text.toLowerCase()
105
+ .normalize("NFD").replace(/[\u0300-\u036f]/g, "")
106
+ .split(/[^a-z0-9_./-]+/).filter((term) => term.length > 1)
107
+ const terms = tokenize(query)
108
+ const documents = options.map((option) => tokenize(option.text))
109
+ const averageLength = documents.reduce((sum, document) => sum + document.length, 0) / Math.max(documents.length, 1)
110
+ const documentFrequency = new Map<string, number>()
111
+ for (const document of documents) {
112
+ for (const term of new Set(document)) documentFrequency.set(term, (documentFrequency.get(term) || 0) + 1)
113
+ }
114
+ return options.map((option, index) => {
115
+ const document = documents[index]
116
+ const frequencies = new Map<string, number>()
117
+ for (const term of document) frequencies.set(term, (frequencies.get(term) || 0) + 1)
118
+ const score = [...new Set(terms)].reduce((total, term) => {
119
+ const frequency = frequencies.get(term) || 0
120
+ if (!frequency) return total
121
+ const idf = Math.log(1 + (options.length - (documentFrequency.get(term) || 0) + 0.5) / ((documentFrequency.get(term) || 0) + 0.5))
122
+ const k1 = 1.2
123
+ const b = 0.75
124
+ return total + idf * (frequency * (k1 + 1)) / (frequency + k1 * (1 - b + b * document.length / Math.max(averageLength, 1)))
125
+ }, 0)
126
+ return { label: option.label, score }
127
+ }).sort((a, b) => b.score - a.score)
128
+ }
129
+
130
+ /**
131
+ * Limpa o cache de embeddings.
132
+ */
133
+ export function clearEmbeddingCache(): void {
134
+ embeddingCache.clear()
135
+ }
136
+
137
+ /**
138
+ * Gera embeddings para todas as tools e retorna o mapa.
139
+ * Útil para pré-computação e persistência.
140
+ */
141
+ export function generateToolEmbeddings(
142
+ tools: Array<{ name: string; description: string }>,
143
+ ): Map<string, number[]> {
144
+ const map = new Map<string, number[]>()
145
+ for (const tool of tools) {
146
+ map.set(tool.name, getEmbedding(tool.description))
147
+ }
148
+ return map
149
+ }
@@ -0,0 +1,163 @@
1
+ /**
2
+ * Graph State Snapshot — Captura o estado do grafo para decisão de visibilidade de tools.
3
+ *
4
+ * Cache por sessão com TTL de 30s para evitar reads redundantes do disco.
5
+ *
6
+ * Consumido por: state-gate.ts, hooks.ts
7
+ */
8
+
9
+ import { createRepository } from "../../sdd/persistence/repository.js"
10
+ import type { KnowledgeGraph } from "../../sdd/domain/types.js"
11
+
12
+ export type GraphState =
13
+ | "uninitialized"
14
+ | "empty"
15
+ | "partial"
16
+ | "ready"
17
+ | "has_change"
18
+ | "has_approved_change"
19
+ | "emergency"
20
+
21
+ export interface GraphSnapshot {
22
+ state: GraphState
23
+ nodeCount: number
24
+ relationshipCount: number
25
+ nodeTypes: string[]
26
+ hasSpecNodes: boolean
27
+ hasChanges: boolean
28
+ pendingChangeCount: number
29
+ approvedChangeCount: number
30
+ hasWorkflow: boolean
31
+ /** Timestamp do snapshot (para TTL cache) */
32
+ timestamp: number
33
+ }
34
+
35
+ const CACHE_TTL_MS = 30_000 // 30 segundos
36
+
37
+ const SPEC_NODE_TYPES = ["feature", "entity", "requirement", "architecture_component", "module"]
38
+
39
+ let cachedSnapshot: GraphSnapshot | null = null
40
+ let cachedDirectory: string | null = null
41
+
42
+ /**
43
+ * Captura o estado atual do grafo (com cache).
44
+ * Se o cache ainda é válido (TTL < 30s), retorna o cache.
45
+ */
46
+ export function getGraphSnapshot(directory: string): GraphSnapshot {
47
+ const now = Date.now()
48
+ if (cachedSnapshot && cachedDirectory === directory && (now - cachedSnapshot.timestamp) < CACHE_TTL_MS) {
49
+ return cachedSnapshot
50
+ }
51
+
52
+ const snapshot = captureSnapshot(directory)
53
+ cachedSnapshot = snapshot
54
+ cachedDirectory = directory
55
+ return snapshot
56
+ }
57
+
58
+ /**
59
+ * Força refresh do cache (após mutações no grafo).
60
+ */
61
+ export function invalidateSnapshotCache(): void {
62
+ cachedSnapshot = null
63
+ cachedDirectory = null
64
+ }
65
+
66
+ function captureSnapshot(directory: string): GraphSnapshot {
67
+ const now = Date.now()
68
+
69
+ try {
70
+ const repo = createRepository(directory)
71
+ if (!repo.isInitialized()) {
72
+ return {
73
+ state: "uninitialized",
74
+ nodeCount: 0, relationshipCount: 0, nodeTypes: [],
75
+ hasSpecNodes: false, hasChanges: false,
76
+ pendingChangeCount: 0, approvedChangeCount: 0,
77
+ hasWorkflow: false, timestamp: now,
78
+ }
79
+ }
80
+
81
+ const graph = repo.loadGraph()
82
+ const nodeTypes = [...new Set(graph.nodes.map(n => n.type))]
83
+ const hasSpecNodes = graph.nodes.some(n => SPEC_NODE_TYPES.includes(n.type))
84
+ const changes = graph.nodes.filter(n => n.type === "change")
85
+ const pendingChanges = changes.filter(c => ["DRAFT", "PROPOSED"].includes(c.status))
86
+ const approvedChanges = changes.filter(c => c.status === "APPROVED")
87
+
88
+ // Detectar emergência (hotfix)
89
+ const hasEmergency = changes.some(c =>
90
+ c.name.toLowerCase().includes("hotfix") ||
91
+ c.name.toLowerCase().includes("emergency") ||
92
+ (c.metadata as Record<string, unknown>)?.approval_level === "POST_HOC"
93
+ )
94
+
95
+ // Detectar workflow ativo
96
+ let hasWorkflow = false
97
+ try {
98
+ const { getWorkflowState } = require("../../sdd/enforcement/workflow-tracker.js")
99
+ const wfState = getWorkflowState()
100
+ hasWorkflow = wfState.enforced === true
101
+ } catch {}
102
+
103
+ // Determinar estado
104
+ let state: GraphState
105
+ if (hasEmergency) {
106
+ state = "emergency"
107
+ } else if (approvedChanges.length > 0) {
108
+ state = "has_approved_change"
109
+ } else if (pendingChanges.length > 0) {
110
+ state = "has_change"
111
+ } else if (graph.nodes.length <= 1) {
112
+ state = "empty"
113
+ } else if (!hasSpecNodes) {
114
+ state = "partial"
115
+ } else {
116
+ state = "ready"
117
+ }
118
+
119
+ return {
120
+ state,
121
+ nodeCount: graph.nodes.length,
122
+ relationshipCount: graph.relationships.length,
123
+ nodeTypes,
124
+ hasSpecNodes,
125
+ hasChanges: changes.length > 0,
126
+ pendingChangeCount: pendingChanges.length,
127
+ approvedChangeCount: approvedChanges.length,
128
+ hasWorkflow,
129
+ timestamp: now,
130
+ }
131
+ } catch {
132
+ return {
133
+ state: "uninitialized",
134
+ nodeCount: 0, relationshipCount: 0, nodeTypes: [],
135
+ hasSpecNodes: false, hasChanges: false,
136
+ pendingChangeCount: 0, approvedChangeCount: 0,
137
+ hasWorkflow: false, timestamp: now,
138
+ }
139
+ }
140
+ }
141
+
142
+ /**
143
+ * Descrição legível do estado para debugging.
144
+ */
145
+ export function formatGraphState(snapshot: GraphSnapshot): string {
146
+ const stateLabels: Record<GraphState, string> = {
147
+ uninitialized: "❌ Não inicializado",
148
+ empty: "📭 Grafo vazio",
149
+ partial: "⚠️ Parcial (sem spec nodes)",
150
+ ready: "✅ Pronto",
151
+ has_change: "📝 Com changes pendentes",
152
+ has_approved_change: "🟢 Com change aprovada",
153
+ emergency: "🚨 Emergência (hotfix)",
154
+ }
155
+
156
+ return [
157
+ `Estado: ${stateLabels[snapshot.state]}`,
158
+ `Nós: ${snapshot.nodeCount} | Relações: ${snapshot.relationshipCount}`,
159
+ `Spec nodes: ${snapshot.hasSpecNodes ? "sim" : "não"}`,
160
+ `Changes: ${snapshot.pendingChangeCount} pendente(s), ${snapshot.approvedChangeCount} aprovada(s)`,
161
+ `Workflow: ${snapshot.hasWorkflow ? "ativo" : "inativo"}`,
162
+ ].join("\n")
163
+ }
@@ -0,0 +1,44 @@
1
+ /**
2
+ * Router Module — Barrel export.
3
+ *
4
+ * Exporta todas as funções públicas do módulo router.
5
+ * Consumido por: hooks.ts
6
+ */
7
+
8
+ // State Gate
9
+ export { getVisibleTools, formatVisibleTools, ESCAPE_HATCH_INSTRUCTION } from "./state-gate.js"
10
+
11
+ // Graph State Snapshot
12
+ export { getGraphSnapshot, invalidateSnapshotCache, formatGraphState } from "./graph-state-snapshot.js"
13
+ export type { GraphSnapshot, GraphState } from "./graph-state-snapshot.js"
14
+
15
+ // Intent Classifier
16
+ export { classifyIntent, getToolsForIntent } from "./intent-classifier.js"
17
+ export type { IntentResult } from "./intent-classifier.js"
18
+
19
+ // Tool Registry
20
+ export { getToolsForSession, getToolDescription, listAllTools } from "./tool-registry.js"
21
+ export type { ToolRegistryResult } from "./tool-registry.js"
22
+
23
+ // Semantic Nudge
24
+ export { calculateSemanticNudge, formatNudgeInput, isToolSuggested, getTopSuggestion } from "./semantic-nudge.js"
25
+ export type { NudgeResult } from "./semantic-nudge.js"
26
+
27
+ // Embeddings
28
+ export { cosineSimilarity, getEmbedding, rankSimilarity } from "./embeddings.js"
29
+
30
+ // Categories
31
+ export { getToolCategories, getToolsByCategory, getCategoriesInToolSet, CATEGORY_KEYWORDS } from "./categories.js"
32
+ export type { IntentCategory } from "./categories.js"
33
+
34
+ // Tool Taxonomy
35
+ export {
36
+ TOOL_TAXONOMY,
37
+ STANDALONE_TOOLS,
38
+ DEPRECATED_TOOLS,
39
+ TOOL_TO_COMPOSITE,
40
+ isDeprecatedTool,
41
+ getCompositeForTool,
42
+ countActiveTools,
43
+ } from "./tool-taxonomy.js"
44
+ export type { CompositeTool, SubAction, ToolCategory } from "./tool-taxonomy.js"
@@ -0,0 +1,140 @@
1
+ /**
2
+ * Intent Classifier — Classifica a intenção do usuário a partir do input.
3
+ *
4
+ * Combina similaridade semântica (embeddings) com keywords para classificar
5
+ * a intenção em uma das categorias: mutation, query, workflow, analysis, etc.
6
+ *
7
+ * Consumido por: hooks.ts (experimental.chat.system.transform)
8
+ * Dependências: embeddings.ts, categories.ts
9
+ */
10
+
11
+ import { rankSimilarity } from "./embeddings.js"
12
+ import {
13
+ CATEGORY_KEYWORDS,
14
+ getToolsByCategory,
15
+ type IntentCategory,
16
+ } from "./categories.js"
17
+ import { TOOL_TAXONOMY, STANDALONE_TOOLS } from "./tool-taxonomy.js"
18
+
19
+ export interface IntentResult {
20
+ category: IntentCategory
21
+ confidence: number
22
+ /** Top-3 categorias com scores */
23
+ topCategories: Array<{ category: IntentCategory; score: number }>
24
+ }
25
+
26
+ /**
27
+ * Embeddings pré-computados para descrições de categorias.
28
+ * Cada categoria tem uma descrição representativa.
29
+ */
30
+ const CATEGORY_DESCRIPTIONS: Record<IntentCategory, string> = {
31
+ mutation: "Create, add, update, or remove nodes and relationships in the knowledge graph",
32
+ query: "Search, query, list, inspect, or retrieve information from the knowledge graph",
33
+ workflow: "Manage changes, approvals, enforcement, lifecycle of specifications",
34
+ analysis: "Analyze impact, validate, detect drift, check integrity of the specification",
35
+ quality: "Code quality metrics, complexity, smells, dependencies, dead code detection",
36
+ enterprise: "Enterprise workflows: migrations, experiments, feature flags, security, compliance",
37
+ admin: "Administration: permissions, roles, sync, snapshots, cache, configuration",
38
+ discovery: "Discover requirements, analyze briefings, ask questions, elicit specifications",
39
+ implementation: "Generate code, plan implementation, create files from specification",
40
+ info: "Get status, history, help, general information about the project",
41
+ }
42
+
43
+ /**
44
+ * Calcula score de keywords para cada categoria.
45
+ */
46
+ function keywordScore(text: string): Record<IntentCategory, number> {
47
+ const normalized = text.toLowerCase()
48
+ const scores: Record<IntentCategory, number> = {} as any
49
+
50
+ for (const [category, keywords] of Object.entries(CATEGORY_KEYWORDS) as [IntentCategory, string[]][]) {
51
+ let score = 0
52
+ for (const keyword of keywords) {
53
+ if (normalized.includes(keyword.toLowerCase())) {
54
+ score += 1
55
+ }
56
+ }
57
+ scores[category] = score
58
+ }
59
+
60
+ return scores
61
+ }
62
+
63
+ /**
64
+ * Calcula score de embeddings para cada categoria.
65
+ */
66
+ function embeddingScore(text: string): Record<IntentCategory, number> {
67
+ const options = Object.entries(CATEGORY_DESCRIPTIONS).map(([category, description]) => ({
68
+ label: category,
69
+ text: description,
70
+ }))
71
+
72
+ const ranked = rankSimilarity(text, options)
73
+
74
+ const scores: Record<IntentCategory, number> = {} as any
75
+ for (const r of ranked) {
76
+ scores[r.label as IntentCategory] = r.score
77
+ }
78
+
79
+ return scores
80
+ }
81
+
82
+ /**
83
+ * Combina keyword score e embedding score com pesos.
84
+ * Keywords: 0.4, Embeddings: 0.6
85
+ */
86
+ function combinedScore(text: string): Record<IntentCategory, number> {
87
+ const kw = keywordScore(text)
88
+ const emb = embeddingScore(text)
89
+
90
+ const combined: Record<IntentCategory, number> = {} as any
91
+ for (const category of Object.keys(kw) as IntentCategory[]) {
92
+ combined[category] = (kw[category] * 0.4) + ((emb[category] || 0) * 0.6)
93
+ }
94
+
95
+ return combined
96
+ }
97
+
98
+ /**
99
+ * Classifica a intenção do usuário.
100
+ *
101
+ * @param text - Input do usuário
102
+ * @returns IntentResult com categoria, confidence e top-3
103
+ */
104
+ export function classifyIntent(text: string): IntentResult {
105
+ const scores = combinedScore(text)
106
+
107
+ // Ordenar por score decrescente
108
+ const sorted = Object.entries(scores)
109
+ .map(([category, score]) => ({ category: category as IntentCategory, score }))
110
+ .sort((a, b) => b.score - a.score)
111
+
112
+ const top = sorted[0]
113
+ const totalScore = sorted.reduce((sum, s) => sum + Math.max(0, s.score), 0)
114
+ const confidence = totalScore > 0 ? top.score / totalScore : 0
115
+
116
+ return {
117
+ category: top.category,
118
+ confidence: Math.min(1, Math.max(0, confidence)),
119
+ topCategories: sorted.slice(0, 3),
120
+ }
121
+ }
122
+
123
+ /**
124
+ * Obtém as tools relevantes para uma intenção, combinando com o state gate.
125
+ *
126
+ * @param intent - Resultado da classificação
127
+ * @param stateTools - Tools visíveis pelo state gate (null = todas)
128
+ * @returns Lista de tools relevantes
129
+ */
130
+ export function getToolsForIntent(
131
+ intent: IntentResult,
132
+ stateTools: Set<string> | null,
133
+ ): string[] {
134
+ const categoryTools = getToolsByCategory(intent.category)
135
+
136
+ if (!stateTools) return categoryTools
137
+
138
+ // Interseção: tools da categoria ∩ tools visíveis pelo estado
139
+ return categoryTools.filter(t => stateTools.has(t))
140
+ }