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,685 @@
1
+ /**
2
+ * Composite Tools — Tools compostas que substituem múltiplas tools originais.
3
+ *
4
+ * Cada tool composta aceita um parâmetro `action` e delega para a lógica
5
+ * correspondente nos módulos SDD. As tools originais são mantidas como
6
+ * deprecated por compatibilidade.
7
+ *
8
+ * Consumido por: createSddTools() em tools.ts
9
+ */
10
+
11
+ import { tool, type ToolDefinition } from "@opencode-ai/plugin"
12
+ import { createRepository, type GraphRepository } from "../../sdd/persistence/repository.js"
13
+ import {
14
+ getNodeIndexed,
15
+ updateNode,
16
+ removeNode,
17
+ addRelationship,
18
+ removeRelationship,
19
+ getNodesByTypeIndexed,
20
+ getGraphStatsIndexed,
21
+ } from "../../sdd/graph/engine.js"
22
+ import { bfsOutgoing, bfsBoth, bfsIncoming, getSubgraph, findPath } from "../../sdd/graph/traverse.js"
23
+ import {
24
+ checkPermission,
25
+ getUserRoleWithAuth,
26
+ addAuditEntry,
27
+ getAuditLog,
28
+ formatAuditLog,
29
+ loadPermissions,
30
+ savePermissions,
31
+ getUserRole,
32
+ setRole,
33
+ getRequiredApprovals,
34
+ formatPermissionCheck,
35
+ } from "../../sdd/permissions/access.js"
36
+ import { createSnapshot, executeRollback, loadRollbackHistory, formatRollbackResult, formatRollbackHistory } from "../../sdd/rollback/manager.js"
37
+ import { getSyncStatus, pullLatest, pushChanges, detectConflicts, mergeGraphs, formatSyncStatus } from "../../sdd/sync/git-sync.js"
38
+ import { computeGraphHealth } from "../../sdd/session/handoff.js"
39
+ import { getCacheManager } from "../../sdd/cache/manager.js"
40
+ import { detectConventions, formatConventions } from "../../sdd/code-quality/conventions.js"
41
+ import { learnPatterns, formatPatterns, loadPatterns, savePatterns, getSuggestedDefaults, getSuggestedRelationships, getSuggestedNaming } from "../../sdd/patterns/learner.js"
42
+ import { analyzeComplexity, formatComplexityReport } from "../../sdd/code-quality/complexity.js"
43
+ import { analyzeMetrics, formatMetricsReport } from "../../sdd/code-quality/metrics.js"
44
+ import { detectCodeSmells, formatCodeSmellReport } from "../../sdd/code-quality/smells.js"
45
+ import { analyzeDependencies, formatDependencyReport } from "../../sdd/code-quality/dependencies.js"
46
+ import { detectConfigDrift, formatConfigDriftReport } from "../../sdd/patterns/config-drift.js"
47
+ import { exportWorkflow, formatWorkflowExport } from "../../sdd/workflow/exporter.js"
48
+ import { addToDriftWhitelist, removeFromDriftWhitelist, loadDriftWhitelist } from "../../sdd/drift/exclusion.js"
49
+ import { parseSymbols, convertToSymbolNodes } from "../../sdd/code-quality/symbol-parser.js"
50
+ import { validateGraph } from "../../sdd/validation/validator.js"
51
+ import type { KnowledgeGraph, AnyNode, NodeType } from "../../sdd/domain/types.js"
52
+ import { pruneGraph, formatPruneReport } from "../../sdd/graph/pruner.js"
53
+
54
+ function getRepo(directory: string): GraphRepository {
55
+ return createRepository(directory)
56
+ }
57
+
58
+ function loadOrEmpty(directory: string): KnowledgeGraph {
59
+ const repo = getRepo(directory)
60
+ if (repo.isInitialized()) return repo.loadGraph()
61
+ return { project_id: "pending", version: "1", nodes: [], relationships: [], metadata: { created_at: "", updated_at: "", sdd_version: "1.0" } }
62
+ }
63
+
64
+ // ── Composite: sdd.graph_mutation ──────────────────────────────────
65
+
66
+ export function createGraphMutationTool(): ToolDefinition {
67
+ return tool({
68
+ description:
69
+ "Modificar a estrutura do Knowledge Graph. " +
70
+ "Use `action` para selecionar a operação: add_node, update_node, remove_node, add_relationship, remove_relationship.",
71
+ args: {
72
+ action: tool.schema.enum(["add_node", "update_node", "remove_node", "add_relationship", "remove_relationship"]).describe("Operação a executar"),
73
+ type: tool.schema.string().optional().describe("Tipo do nó (para add_node)"),
74
+ name: tool.schema.string().optional().describe("Nome do nó (para add_node)"),
75
+ description_text: tool.schema.string().optional().describe("Descrição do nó (para add_node)"),
76
+ parent_id: tool.schema.string().optional().describe("ID do nó pai (para add_node)"),
77
+ metadata_json: tool.schema.string().optional().describe("Metadados como JSON (para add_node)"),
78
+ node_id: tool.schema.string().optional().describe("ID do nó (para update_node, remove_node)"),
79
+ updates_json: tool.schema.string().optional().describe("Updates como JSON (para update_node)"),
80
+ from_id: tool.schema.string().optional().describe("Nó origem (para add_relationship)"),
81
+ to_id: tool.schema.string().optional().describe("Nó destino (para add_relationship)"),
82
+ rel_type: tool.schema.string().optional().describe("Tipo da relação (para add_relationship)"),
83
+ relationship_id: tool.schema.string().optional().describe("ID da relação (para remove_relationship)"),
84
+ },
85
+ async execute(args, ctx) {
86
+ const repo = getRepo(ctx.directory)
87
+ if (!repo.isInitialized()) return "SDD not initialized."
88
+ const graph = repo.loadGraph()
89
+
90
+ switch (args.action) {
91
+ case "add_node": {
92
+ if (!args.type || !args.name) return "type and name are required for add_node"
93
+ const existing = graph.nodes.find(
94
+ (n) => n.type === args.type && n.name.toLowerCase() === args.name!.toLowerCase()
95
+ )
96
+ if (existing) return `Node "${args.name}" already exists: ${existing.id}. Use update_node instead.`
97
+
98
+ const nodeId = `${graph.project_id}-${args.type.toUpperCase().slice(0, 4)}-${String(graph.nodes.filter((n) => n.type === args.type).length + 1).padStart(3, "0")}`
99
+ let metadata: Record<string, unknown> = {}
100
+ if (args.metadata_json) {
101
+ try { metadata = JSON.parse(args.metadata_json) } catch { return "Invalid JSON in metadata_json" }
102
+ }
103
+
104
+ const nodeType = args.type as NodeType
105
+ if (nodeType === "business_rule" && !metadata.rule_text) metadata.rule_text = args.description_text || args.name || ""
106
+ if (nodeType === "constraint" && !metadata.rule_text) metadata.rule_text = args.description_text || args.name || ""
107
+ if (nodeType === "constraint" && !metadata.constraint_type) metadata.constraint_type = "business"
108
+ if (nodeType === "entity" && !metadata.fields) metadata.fields = []
109
+ if (nodeType === "endpoint" && !metadata.method) { metadata.method = "GET"; metadata.path = "/" }
110
+ if (nodeType === "database" && !metadata.engine) metadata.engine = "postgresql"
111
+ if (nodeType === "architecture_component" && !metadata.layer) metadata.layer = "backend"
112
+
113
+ const node: AnyNode = {
114
+ id: nodeId, type: args.type as NodeType, name: args.name,
115
+ description: args.description_text, status: "DRAFT", version: 1,
116
+ metadata, created_at: new Date().toISOString(), updated_at: new Date().toISOString(),
117
+ } as AnyNode
118
+
119
+ graph.nodes.push(node)
120
+
121
+ if (args.parent_id) {
122
+ try { addRelationship(graph, args.parent_id, nodeId, "contains") } catch {}
123
+ }
124
+
125
+ repo.saveGraph(graph)
126
+ return `Node created: **${nodeId}** (${args.type}): ${args.name}`
127
+ }
128
+
129
+ case "update_node": {
130
+ if (!args.node_id || !args.updates_json) return "node_id and updates_json are required"
131
+ let updates: Partial<AnyNode>
132
+ try { updates = JSON.parse(args.updates_json) } catch { return "Invalid JSON in updates_json" }
133
+ const indices = repo.getIndices()
134
+ const node = getNodeIndexed(indices, args.node_id)
135
+ if (!node) return `Node ${args.node_id} not found.`
136
+ updateNode(graph, args.node_id, updates)
137
+ repo.saveGraph(graph)
138
+ return `Node ${args.node_id} updated.`
139
+ }
140
+
141
+ case "remove_node": {
142
+ if (!args.node_id) return "node_id is required"
143
+ const indices = repo.getIndices()
144
+ const node = getNodeIndexed(indices, args.node_id)
145
+ if (!node) return `Node ${args.node_id} not found.`
146
+ removeNode(graph, args.node_id)
147
+ repo.saveGraph(graph)
148
+ return `Node ${args.node_id} removed.`
149
+ }
150
+
151
+ case "add_relationship": {
152
+ if (!args.from_id || !args.to_id || !args.rel_type) return "from_id, to_id, and rel_type are required"
153
+ try {
154
+ addRelationship(graph, args.from_id, args.to_id, args.rel_type as any)
155
+ repo.saveGraph(graph)
156
+ return `Relationship created: ${args.from_id} --[${args.rel_type}]--> ${args.to_id}`
157
+ } catch (e) {
158
+ return `Error: ${e instanceof Error ? e.message : String(e)}`
159
+ }
160
+ }
161
+
162
+ case "remove_relationship": {
163
+ if (!args.from_id || !args.to_id || !args.rel_type) return "from_id, to_id, and rel_type are required"
164
+ removeRelationship(graph, args.from_id, args.to_id, args.rel_type as any)
165
+ repo.saveGraph(graph)
166
+ return `Relationship removed: ${args.from_id} --[${args.rel_type}]--> ${args.to_id}`
167
+ }
168
+
169
+ default:
170
+ return `Unknown action: ${args.action}`
171
+ }
172
+ },
173
+ })
174
+ }
175
+
176
+ // ── Composite: sdd.graph_query ────────────────────────────────────
177
+
178
+ export function createGraphQueryTool(): ToolDefinition {
179
+ return tool({
180
+ description: "Consultar o Knowledge Graph: contar nós, filtrar por status, listar por tipo.",
181
+ args: {
182
+ action: tool.schema.enum(["count_nodes", "get_nodes_by_status", "list_nodes"]).describe("Operação a executar"),
183
+ type: tool.schema.string().optional().describe("Tipo de nó (para list_nodes)"),
184
+ status: tool.schema.string().optional().describe("Status do nó (para get_nodes_by_status)"),
185
+ },
186
+ async execute(args, ctx) {
187
+ const repo = getRepo(ctx.directory)
188
+ if (!repo.isInitialized()) return "SDD not initialized."
189
+ const indices = repo.getIndices()
190
+
191
+ switch (args.action) {
192
+ case "count_nodes": {
193
+ const stats = getGraphStatsIndexed(indices)
194
+ const lines = [`## Node Counts\n`]
195
+ for (const [type, count] of Object.entries(stats.by_type).sort(([, a], [, b]) => b - a)) {
196
+ lines.push(`- ${type}: ${count}`)
197
+ }
198
+ lines.push(`\n**Total:** ${stats.total_nodes} nodes, ${stats.total_relationships} relationships`)
199
+ return lines.join("\n")
200
+ }
201
+
202
+ case "get_nodes_by_status": {
203
+ if (!args.status) return "status is required"
204
+ const allNodes = [...indices.byId.values()]
205
+ const filtered = allNodes.filter((n) => n.status === args.status)
206
+ if (filtered.length === 0) return `No nodes with status "${args.status}".`
207
+ const lines = [`## Nodes with status "${args.status}" (${filtered.length})\n`]
208
+ for (const node of filtered.slice(0, 30)) {
209
+ lines.push(`- **${node.id}** (${node.type}): ${node.name}`)
210
+ }
211
+ if (filtered.length > 30) lines.push(`\n... and ${filtered.length - 30} more`)
212
+ return lines.join("\n")
213
+ }
214
+
215
+ case "list_nodes": {
216
+ if (!args.type) return "type is required"
217
+ const nodes = getNodesByTypeIndexed(indices, args.type as NodeType)
218
+ if (nodes.length === 0) return `No nodes of type "${args.type}".`
219
+ const lines = [`## ${args.type} Nodes (${nodes.length})\n`]
220
+ for (const node of nodes.slice(0, 30)) {
221
+ lines.push(`- **${node.id}:** ${node.name} [${node.status}]`)
222
+ }
223
+ if (nodes.length > 30) lines.push(`\n... and ${nodes.length - 30} more`)
224
+ return lines.join("\n")
225
+ }
226
+
227
+ default:
228
+ return `Unknown action: ${args.action}`
229
+ }
230
+ },
231
+ })
232
+ }
233
+
234
+ // ── Composite: sdd.traverse ───────────────────────────────────────
235
+
236
+ export function createTraverseTool(): ToolDefinition {
237
+ return tool({
238
+ description: "Percorrer o Knowledge Graph: BFS, subgraph, path finding.",
239
+ args: {
240
+ action: tool.schema.enum(["outgoing", "incoming", "both", "subgraph", "find_path"]).describe("Operação a executar"),
241
+ node_id: tool.schema.string().describe("Nó de origem"),
242
+ to_id: tool.schema.string().optional().describe("Nó destino (para find_path)"),
243
+ depth: tool.schema.number().optional().describe("Profundidade máxima (default: 2)"),
244
+ },
245
+ async execute(args, ctx) {
246
+ const repo = getRepo(ctx.directory)
247
+ if (!repo.isInitialized()) return "SDD not initialized."
248
+ const graph = repo.loadGraph()
249
+ const indices = repo.getIndices()
250
+ const depth = args.depth || 2
251
+ const node = getNodeIndexed(indices, args.node_id)
252
+ if (!node) return `Node ${args.node_id} not found.`
253
+
254
+ switch (args.action) {
255
+ case "outgoing": {
256
+ const result = bfsOutgoing(graph, args.node_id, { max_depth: depth, include_start: true })
257
+ const lines = [`## BFS Outgoing from ${args.node_id} (depth ${depth})\n`]
258
+ for (const n of result.nodes.slice(0, 30)) lines.push(`- **${n.id}** (${n.type}): ${n.name}`)
259
+ if (result.nodes.length > 30) lines.push(`\n... and ${result.nodes.length - 30} more`)
260
+ return lines.join("\n")
261
+ }
262
+ case "incoming": {
263
+ const result = bfsIncoming(graph, args.node_id, { max_depth: depth, include_start: true })
264
+ const lines = [`## BFS Incoming to ${args.node_id} (depth ${depth})\n`]
265
+ for (const n of result.nodes.slice(0, 30)) lines.push(`- **${n.id}** (${n.type}): ${n.name}`)
266
+ if (result.nodes.length > 30) lines.push(`\n... and ${result.nodes.length - 30} more`)
267
+ return lines.join("\n")
268
+ }
269
+ case "both": {
270
+ const result = bfsBoth(graph, args.node_id, { max_depth: depth, include_start: true })
271
+ const lines = [`## BFS Both from ${args.node_id} (depth ${depth})\n`]
272
+ for (const n of result.nodes.slice(0, 30)) lines.push(`- **${n.id}** (${n.type}): ${n.name}`)
273
+ if (result.nodes.length > 30) lines.push(`\n... and ${result.nodes.length - 30} more`)
274
+ return lines.join("\n")
275
+ }
276
+ case "subgraph": {
277
+ // Get neighbors up to depth
278
+ const result = bfsBoth(graph, args.node_id, { max_depth: depth, include_start: true })
279
+ const nodeIds = result.nodes.map(n => n.id)
280
+ const sub = getSubgraph(graph, nodeIds)
281
+ const lines = [`## Subgraph around ${args.node_id}\n`]
282
+ lines.push(`**Nodes:** ${sub.nodes.length} | **Relationships:** ${sub.relationships.length}\n`)
283
+ for (const n of sub.nodes.slice(0, 20)) lines.push(`- **${n.id}** (${n.type}): ${n.name}`)
284
+ return lines.join("\n")
285
+ }
286
+ case "find_path": {
287
+ if (!args.to_id) return "to_id is required for find_path"
288
+ const path = findPath(graph, args.node_id, args.to_id)
289
+ if (!path) return `No path found between ${args.node_id} and ${args.to_id}.`
290
+ const lines = [`## Path: ${args.node_id} → ${args.to_id}\n`]
291
+ for (let i = 0; i < path.length; i++) {
292
+ const n = path[i]
293
+ lines.push(`${i + 1}. **${n.id}** (${n.type}): ${n.name}${i < path.length - 1 ? " →" : ""}`)
294
+ }
295
+ return lines.join("\n")
296
+ }
297
+ default:
298
+ return `Unknown action: ${args.action}`
299
+ }
300
+ },
301
+ })
302
+ }
303
+
304
+ // ── Composite: sdd.permissions ────────────────────────────────────
305
+
306
+ export function createPermissionsTool(): ToolDefinition {
307
+ return tool({
308
+ description: "Gerenciar permissões, roles, audit log e configuração de acesso.",
309
+ args: {
310
+ action: tool.schema.enum(["set_role", "check", "audit", "config", "role", "approval"]).describe("Operação a executar"),
311
+ user: tool.schema.string().optional().describe("Nome do usuário"),
312
+ role: tool.schema.string().optional().describe("Role a atribuir"),
313
+ permission: tool.schema.string().optional().describe("Permissão a verificar"),
314
+ change_id: tool.schema.string().optional().describe("ID da change"),
315
+ limit: tool.schema.number().optional().describe("Limite de entradas no audit log"),
316
+ },
317
+ async execute(args, ctx) {
318
+ const currentUser = process.env.USER || process.env.USERNAME || "current"
319
+
320
+ switch (args.action) {
321
+ case "set_role": {
322
+ if (!args.user || !args.role) return "user and role are required"
323
+ setRole(ctx.directory, args.user, args.role as any)
324
+ return `Role "${args.role}" set for user "${args.user}".`
325
+ }
326
+ case "check": {
327
+ if (!args.user || !args.permission) return "user and permission are required"
328
+ const role = getUserRoleWithAuth(ctx.directory, args.user)
329
+ const has = checkPermission(role, args.permission as any, ctx.directory)
330
+ return `User ${args.user} has permission ${args.permission}: ${has}`
331
+ }
332
+ case "audit": {
333
+ const limit = args.limit || 20
334
+ const log = getAuditLog(ctx.directory, { limit })
335
+ return formatAuditLog(log)
336
+ }
337
+ case "config": {
338
+ const config = loadPermissions(ctx.directory)
339
+ return JSON.stringify(config, null, 2)
340
+ }
341
+ case "role": {
342
+ const role = getUserRoleWithAuth(ctx.directory, args.user || currentUser)
343
+ return `User "${args.user || currentUser}" has role: **${role}**`
344
+ }
345
+ case "approval": {
346
+ if (!args.change_id) return "change_id is required"
347
+ const required = getRequiredApprovals("change", ctx.directory)
348
+ return `Change ${args.change_id} requires ${required} approval(s).`
349
+ }
350
+ default:
351
+ return `Unknown action: ${args.action}`
352
+ }
353
+ },
354
+ })
355
+ }
356
+
357
+ // ── Composite: sdd.snapshot ───────────────────────────────────────
358
+
359
+ export function createSnapshotTool(): ToolDefinition {
360
+ return tool({
361
+ description: "Criar snapshots do grafo, rollback e histórico.",
362
+ args: {
363
+ action: tool.schema.enum(["create", "rollback", "history"]).describe("Operação a executar"),
364
+ change_id: tool.schema.string().optional().describe("ID da change (para create)"),
365
+ snapshot_id: tool.schema.string().optional().describe("ID do snapshot (para rollback)"),
366
+ },
367
+ async execute(args, ctx) {
368
+ const repo = getRepo(ctx.directory)
369
+ if (!repo.isInitialized()) return "SDD not initialized."
370
+ const graph = repo.loadGraph()
371
+
372
+ switch (args.action) {
373
+ case "create": {
374
+ if (!args.change_id) return "change_id is required"
375
+ createSnapshot(graph, args.change_id, ctx.directory)
376
+ return `Snapshot created for change ${args.change_id}.`
377
+ }
378
+ case "rollback": {
379
+ if (!args.snapshot_id) return "snapshot_id is required"
380
+ const result = executeRollback(graph, args.snapshot_id, ctx.directory)
381
+ repo.saveGraph(graph)
382
+ return formatRollbackResult(result)
383
+ }
384
+ case "history": {
385
+ const history = loadRollbackHistory(ctx.directory)
386
+ return formatRollbackHistory(history)
387
+ }
388
+ default:
389
+ return `Unknown action: ${args.action}`
390
+ }
391
+ },
392
+ })
393
+ }
394
+
395
+ // ── Composite: sdd.sync ───────────────────────────────────────────
396
+
397
+ export function createSyncTool(): ToolDefinition {
398
+ return tool({
399
+ description: "Sincronizar grafo com repositório remoto: pull, push, conflitos, merge.",
400
+ args: {
401
+ action: tool.schema.enum(["status", "pull", "push", "conflicts", "merge"]).describe("Operação a executar"),
402
+ },
403
+ async execute(args, ctx) {
404
+ switch (args.action) {
405
+ case "status": {
406
+ const status = await getSyncStatus(ctx.directory)
407
+ return formatSyncStatus(status)
408
+ }
409
+ case "pull": {
410
+ const result = pullLatest(ctx.directory)
411
+ return `Pull: ${result.success ? "✅" : "❌"}`
412
+ }
413
+ case "push": {
414
+ const result = pushChanges(ctx.directory, "SDD sync push")
415
+ return `Push: ${result.success ? "✅" : "❌"}`
416
+ }
417
+ case "conflicts": {
418
+ return "Use sdd.detect_sync_conflicts in the original tools for conflict detection."
419
+ }
420
+ case "merge": {
421
+ return "Use sdd.merge_graphs in the original tools for graph merging."
422
+ }
423
+ default:
424
+ return `Unknown action: ${args.action}`
425
+ }
426
+ },
427
+ })
428
+ }
429
+
430
+ // ── Composite: sdd.graph_admin ────────────────────────────────────
431
+
432
+ export function createGraphAdminTool(): ToolDefinition {
433
+ return tool({
434
+ description: "Administração do grafo: health, pruning, cache, convenções, padrões.",
435
+ args: {
436
+ action: tool.schema.enum(["health", "health_detail", "prune", "cache", "conventions", "learn"]).describe("Operação a executar"),
437
+ learn_action: tool.schema.enum(["learn", "show", "suggest"]).optional().describe("Sub-action para learn"),
438
+ node_type: tool.schema.string().optional().describe("Tipo de nó (para learn com suggest)"),
439
+ },
440
+ async execute(args, ctx) {
441
+ const repo = getRepo(ctx.directory)
442
+ if (!repo.isInitialized()) return "SDD not initialized."
443
+
444
+ switch (args.action) {
445
+ case "health": {
446
+ const graph = repo.loadGraph()
447
+ const indices = repo.getIndices()
448
+ const stats = getGraphStatsIndexed(indices)
449
+ const orphanCount = graph.nodes.filter(n => !graph.relationships.some(r => r.from === n.id || r.to === n.id)).length
450
+ const avgRels = graph.nodes.length > 0 ? (graph.relationships.length / graph.nodes.length).toFixed(2) : "0"
451
+ return [
452
+ "## Graph Health Report",
453
+ `- Nodes: ${graph.nodes.length} | Relationships: ${graph.relationships.length}`,
454
+ `- Orphan nodes: ${orphanCount}`,
455
+ `- Relationship density: ${avgRels} rels/node`,
456
+ `- Types: ${Object.keys(stats.by_type).length}`,
457
+ ].join("\n")
458
+ }
459
+ case "health_detail": {
460
+ const graph = repo.loadGraph()
461
+ const health = computeGraphHealth(graph)
462
+ return [
463
+ "## Detailed Graph Health",
464
+ `- Stale changes: ${health.staleChanges}`,
465
+ `- Cycles: ${health.cyclesDetected}`,
466
+ `- God nodes: ${health.godNodes.length}`,
467
+ `- Orphan changes: ${health.orphanChanges}`,
468
+ `- Draft endpoints: ${health.draftEndpoints}`,
469
+ ].join("\n")
470
+ }
471
+ case "prune": {
472
+ const graph = repo.loadGraph()
473
+ const report = pruneGraph(graph, ctx.directory)
474
+ repo.saveGraph(graph)
475
+ return formatPruneReport(report)
476
+ }
477
+ case "cache": {
478
+ const cacheMgr = getCacheManager(ctx.directory)
479
+ const stats = cacheMgr.getStats()
480
+ return [
481
+ "## Cache Statistics",
482
+ `- Tool cache: ${stats.toolCacheSize} entries (${stats.hitRate} hit rate)`,
483
+ `- Analysis cache: ${stats.analysisCacheSize} entries (${stats.analysisHitRate} hit rate)`,
484
+ `- Invalidation count: ${stats.invalidations}`,
485
+ ].join("\n")
486
+ }
487
+ case "conventions": {
488
+ const conventions = detectConventions(ctx.directory)
489
+ return formatConventions(conventions)
490
+ }
491
+ case "learn": {
492
+ const graph = repo.loadGraph()
493
+ const subAction = args.learn_action || "show"
494
+ if (subAction === "learn") {
495
+ const patterns = learnPatterns(graph)
496
+ savePatterns(ctx.directory, patterns)
497
+ return formatPatterns(patterns)
498
+ }
499
+ if (subAction === "show") {
500
+ const patterns = loadPatterns(ctx.directory)
501
+ if (!patterns) return "No patterns learned yet. Run with learn_action=learn first."
502
+ return formatPatterns(patterns)
503
+ }
504
+ if (subAction === "suggest") {
505
+ if (!args.node_type) return "node_type is required for suggest"
506
+ const patterns = loadPatterns(ctx.directory)
507
+ if (!patterns) return "No patterns learned yet. Run with learn_action=learn first."
508
+ const defaults = getSuggestedDefaults(patterns, args.node_type as any)
509
+ const rels = getSuggestedRelationships(patterns, args.node_type as any)
510
+ const naming = getSuggestedNaming(patterns, args.node_type as any)
511
+ return [
512
+ `## Suggestions for ${args.node_type}`,
513
+ `Default metadata: ${Object.keys(defaults).length > 0 ? JSON.stringify(defaults) : "none"}`,
514
+ `Suggested relationships: ${rels.map(r => `→[${r.relationship_type}]→ ${r.to_type}`).join(", ") || "none"}`,
515
+ naming ? `Naming convention: ${naming}` : "",
516
+ ].filter(Boolean).join("\n")
517
+ }
518
+ return "Invalid learn_action. Use learn, show, or suggest."
519
+ }
520
+ default:
521
+ return `Unknown action: ${args.action}`
522
+ }
523
+ },
524
+ })
525
+ }
526
+
527
+ // ── Composite: sdd.code_quality ───────────────────────────────────
528
+
529
+ export function createCodeQualityTool(): ToolDefinition {
530
+ return tool({
531
+ description: "Análise de qualidade de código: complexidade, métricas, smells, dependências, código morto, símbolos.",
532
+ args: {
533
+ action: tool.schema.enum([
534
+ "complexity", "metrics", "smells", "dependencies",
535
+ "usage", "dead_code", "parse_symbols", "plan_implementation",
536
+ ]).describe("Operação a executar"),
537
+ file_path: tool.schema.string().optional().describe("Caminho do arquivo"),
538
+ feature_id: tool.schema.string().optional().describe("ID da feature"),
539
+ files: tool.schema.string().optional().describe("Lista de arquivos separados por vírgula"),
540
+ },
541
+ async execute(args, ctx) {
542
+ switch (args.action) {
543
+ case "complexity": {
544
+ if (!args.file_path) return "file_path is required"
545
+ const { readFileSync } = await import("fs")
546
+ const { join } = await import("path")
547
+ const code = readFileSync(join(ctx.directory, args.file_path), "utf-8")
548
+ const result = analyzeComplexity(code, args.file_path)
549
+ return formatComplexityReport(result)
550
+ }
551
+ case "metrics": {
552
+ if (!args.file_path) return "file_path is required"
553
+ const { readFileSync } = await import("fs")
554
+ const { join } = await import("path")
555
+ const code = readFileSync(join(ctx.directory, args.file_path), "utf-8")
556
+ const result = analyzeMetrics(code, args.file_path)
557
+ return formatMetricsReport(result)
558
+ }
559
+ case "smells": {
560
+ if (!args.file_path) return "file_path is required"
561
+ const { readFileSync } = await import("fs")
562
+ const { join } = await import("path")
563
+ const code = readFileSync(join(ctx.directory, args.file_path), "utf-8")
564
+ const result = detectCodeSmells(code, args.file_path)
565
+ return formatCodeSmellReport(result)
566
+ }
567
+ case "dependencies": {
568
+ const graph = loadOrEmpty(ctx.directory)
569
+ const result = analyzeDependencies(graph)
570
+ return formatDependencyReport(result)
571
+ }
572
+ case "usage": {
573
+ return "Usage analysis: use sdd.verify_usage in the original tools."
574
+ }
575
+ case "dead_code": {
576
+ return "Dead code detection: use sdd.find_dead_code in the original tools."
577
+ }
578
+ case "parse_symbols": {
579
+ if (!args.file_path) return "file_path is required"
580
+ const { readFileSync } = await import("fs")
581
+ const { join } = await import("path")
582
+ const code = readFileSync(join(ctx.directory, args.file_path), "utf-8")
583
+ const symbols = parseSymbols(code, args.file_path)
584
+ const nodes = convertToSymbolNodes(symbols)
585
+ return nodes.map(n => `- **${n.id}** (${n.type}): ${n.name}`).join("\n") || "No symbols found."
586
+ }
587
+ case "plan_implementation": {
588
+ if (!args.feature_id || !args.files) return "feature_id and files are required"
589
+ return `Implementation plan for feature ${args.feature_id}: connect files via graph nodes.`
590
+ }
591
+ default:
592
+ return `Unknown action: ${args.action}`
593
+ }
594
+ },
595
+ })
596
+ }
597
+
598
+ // ── Composite: sdd.enterprise ─────────────────────────────────────
599
+
600
+ export function createEnterpriseTool(): ToolDefinition {
601
+ return tool({
602
+ description: "Workflows empresariais: migrations, experiments, feature flags, security, compliance, docs.",
603
+ args: {
604
+ action: tool.schema.enum([
605
+ "security_audit", "scalability", "compliance",
606
+ "monitoring", "docs", "onboarding",
607
+ ]).describe("Operação a executar"),
608
+ params_json: tool.schema.string().optional().describe("Parâmetros como JSON"),
609
+ },
610
+ async execute(args, ctx) {
611
+ const graph = loadOrEmpty(ctx.directory)
612
+
613
+ switch (args.action) {
614
+ case "security_audit": {
615
+ const { performSecurityAudit, formatSecurityAudit } = await import("../../sdd/analysis/security.js")
616
+ const result = performSecurityAudit(graph)
617
+ return formatSecurityAudit(result)
618
+ }
619
+ case "scalability": {
620
+ const { analyzeScalability, formatScalabilityAnalysis } = await import("../../sdd/analysis/scalability.js")
621
+ const result = analyzeScalability(graph)
622
+ return formatScalabilityAnalysis(result)
623
+ }
624
+ case "compliance": {
625
+ const params = args.params_json ? JSON.parse(args.params_json) : {}
626
+ const standard = params.standard || "GDPR"
627
+ const { checkCompliance, formatComplianceCheck } = await import("../../sdd/analysis/compliance.js")
628
+ const result = checkCompliance(graph, standard)
629
+ return formatComplianceCheck(result)
630
+ }
631
+ case "monitoring": {
632
+ const { setupMonitoring, formatMonitoringSetup } = await import("../../sdd/monitoring/setup.js")
633
+ const result = setupMonitoring(graph)
634
+ return formatMonitoringSetup(result)
635
+ }
636
+ case "docs": {
637
+ const { generateDocumentation } = await import("../../sdd/documentation/generator.js")
638
+ const params = args.params_json ? JSON.parse(args.params_json) : {}
639
+ return generateDocumentation(graph, params.format || "api")
640
+ }
641
+ case "onboarding": {
642
+ const { generateOnboardingGuide } = await import("../../sdd/workflows/onboarding.js")
643
+ return generateOnboardingGuide(graph, {} as any)
644
+ }
645
+ default:
646
+ return `Unknown action: ${args.action}`
647
+ }
648
+ },
649
+ })
650
+ }
651
+
652
+ // ── Composite: sdd.drift_whitelist ────────────────────────────────
653
+
654
+ export function createDriftWhitelistTool(): ToolDefinition {
655
+ return tool({
656
+ description: "Gerenciar whitelist de drift: adicionar, remover, listar.",
657
+ args: {
658
+ action: tool.schema.enum(["add", "remove", "list"]).describe("Operação a executar"),
659
+ file_path: tool.schema.string().optional().describe("Caminho do arquivo ou padrão"),
660
+ reason: tool.schema.string().optional().describe("Motivo (para add)"),
661
+ },
662
+ async execute(args, ctx) {
663
+ switch (args.action) {
664
+ case "add": {
665
+ if (!args.file_path || !args.reason) return "file_path and reason are required"
666
+ addToDriftWhitelist(ctx.directory, args.file_path, args.reason)
667
+ const whitelist = loadDriftWhitelist(ctx.directory)
668
+ return `✅ Whitelisted: ${args.file_path} — Total: ${whitelist.entries.length}`
669
+ }
670
+ case "remove": {
671
+ if (!args.file_path) return "file_path is required"
672
+ removeFromDriftWhitelist(ctx.directory, args.file_path)
673
+ return `✅ Removed: ${args.file_path}`
674
+ }
675
+ case "list": {
676
+ const whitelist = loadDriftWhitelist(ctx.directory)
677
+ if (whitelist.entries.length === 0) return "Whitelist is empty."
678
+ return whitelist.entries.map(e => `- **${e.file_path}** — ${e.reason}`).join("\n")
679
+ }
680
+ default:
681
+ return `Unknown action: ${args.action}`
682
+ }
683
+ },
684
+ })
685
+ }