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 @@
1
+ {"version":3,"file":"yaml.d.ts","sourceRoot":"","sources":["../../../src/sdd/persistence/yaml.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,cAAc,EAAE,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AACrG,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAChD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAA;AAItD,wBAAgB,QAAQ,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,GAAG,CAAC,CAG/C;AAED,wBAAgB,SAAS,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,GAAG,IAAI,CAU/D;AAED,wBAAgB,QAAQ,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,GAAG,CAAC,CAG/C;AAED,wBAAgB,SAAS,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,GAAG,IAAI,CAI/D;AAED,wBAAgB,SAAS,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAI/C;AAED,wBAAgB,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAEpD;AAED,wBAAgB,SAAS,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAYvE;AAED,wBAAgB,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,CAMlD;AAYD;;;;GAIG;AACH,qBAAa,mBAAoB,YAAW,eAAe;IACzD,OAAO,CAAC,OAAO,CAAQ;IACvB,OAAO,CAAC,SAAS,CAAQ;IACzB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAqC;gBAE7C,UAAU,EAAE,MAAM;IAK9B,YAAY,IAAI,IAAI;IASpB,aAAa,IAAI,OAAO;IAIxB,SAAS,IAAI,cAAc;IAwD3B,UAAU,IAAI,YAAY;IAQ1B,SAAS,CAAC,KAAK,EAAE,cAAc,GAAG,IAAI;IA2GtC,cAAc,IAAI,MAAM;IAIxB,YAAY,IAAI,OAAO;IAWvB,eAAe,IAAI,IAAI;IAIvB,aAAa,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM,GAAG,cAAc;IA8BpF,cAAc,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM;IAS3C,aAAa,IAAI,MAAM,EAAE;IAQzB,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,QAAQ,EAAE,UAAU,EAAE,MAAM,GAAG,eAAe;IAgBzE,YAAY,IAAI,MAAM;IAatB,oBAAoB,IAAI,MAAM;IAM9B,cAAc,CAAC,IAAI,EAAE,QAAQ,GAAG,OAAO,EAAE;IAczC,gBAAgB,CAAC,MAAM,EAAE,UAAU,GAAG,OAAO,EAAE;IAK/C,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,GAAG,SAAS;IAM5C,uBAAuB,CAAC,MAAM,EAAE,MAAM,GAAG,YAAY,EAAE;CAIxD"}
@@ -0,0 +1,382 @@
1
+ import * as yaml from "js-yaml";
2
+ import { readFileSync, writeFileSync, existsSync, mkdirSync, readdirSync } from "fs";
3
+ import { join, dirname } from "path";
4
+ import { GraphIndices } from "../graph/index.js";
5
+ import { getCacheManager } from "../cache/manager.js";
6
+ import { recordLegitimateSave, validateGraphIntegrity } from "../graph/integrity-guard.js";
7
+ export function readYaml(filePath) {
8
+ const content = readFileSync(filePath, "utf-8");
9
+ return yaml.load(content);
10
+ }
11
+ export function writeYaml(filePath, data) {
12
+ const dir = dirname(filePath);
13
+ if (!existsSync(dir))
14
+ mkdirSync(dir, { recursive: true });
15
+ const content = yaml.dump(data, {
16
+ noRefs: true,
17
+ lineWidth: 120,
18
+ quotingType: '"',
19
+ forceQuotes: false,
20
+ });
21
+ writeFileSync(filePath, content, "utf-8");
22
+ }
23
+ export function readJson(filePath) {
24
+ const content = readFileSync(filePath, "utf-8");
25
+ return JSON.parse(content);
26
+ }
27
+ export function writeJson(filePath, data) {
28
+ const dir = dirname(filePath);
29
+ if (!existsSync(dir))
30
+ mkdirSync(dir, { recursive: true });
31
+ writeFileSync(filePath, JSON.stringify(data, null, 2), "utf-8");
32
+ }
33
+ export function ensureDir(dirPath) {
34
+ if (!existsSync(dirPath)) {
35
+ mkdirSync(dirPath, { recursive: true });
36
+ }
37
+ }
38
+ export function fileExists(filePath) {
39
+ return existsSync(filePath);
40
+ }
41
+ export function listFiles(dirPath, extension) {
42
+ if (!existsSync(dirPath))
43
+ return [];
44
+ const entries = readdirSync(dirPath, { withFileTypes: true });
45
+ const files = [];
46
+ for (const entry of entries) {
47
+ if (entry.isFile()) {
48
+ if (!extension || entry.name.endsWith(extension)) {
49
+ files.push(join(dirPath, entry.name));
50
+ }
51
+ }
52
+ }
53
+ return files;
54
+ }
55
+ export function listDirs(dirPath) {
56
+ if (!existsSync(dirPath))
57
+ return [];
58
+ const entries = readdirSync(dirPath, { withFileTypes: true });
59
+ return entries
60
+ .filter((e) => e.isDirectory())
61
+ .map((e) => join(dirPath, e.name));
62
+ }
63
+ // ── Repository ───────────────────────────────────────────────────────
64
+ /**
65
+ * YAML-backed graph repository.
66
+ * Suitable for small to medium projects (<1000 nodes).
67
+ * Uses in-memory cache and pre-computed indices for fast queries.
68
+ */
69
+ export class YamlGraphRepository {
70
+ baseDir;
71
+ graphPath;
72
+ static cache = new Map();
73
+ constructor(projectDir) {
74
+ this.baseDir = join(projectDir, ".sdd");
75
+ this.graphPath = join(this.baseDir, "graph.yaml");
76
+ }
77
+ ensureSddDir() {
78
+ ensureDir(this.baseDir);
79
+ ensureDir(join(this.baseDir, "nodes"));
80
+ ensureDir(join(this.baseDir, "relationships"));
81
+ ensureDir(join(this.baseDir, "changes"));
82
+ ensureDir(join(this.baseDir, "snapshots"));
83
+ ensureDir(join(this.baseDir, "transactions"));
84
+ }
85
+ isInitialized() {
86
+ return fileExists(this.graphPath);
87
+ }
88
+ loadGraph() {
89
+ if (!this.isInitialized()) {
90
+ throw new Error("SDD not initialized. Run sdd.initialize first.");
91
+ }
92
+ // Check cache with revalidation
93
+ const cached = YamlGraphRepository.cache.get(this.graphPath);
94
+ if (cached) {
95
+ // Revalidation: check if file was modified externally
96
+ const currentMtime = (() => { try {
97
+ return require("fs").statSync(this.graphPath).mtimeMs;
98
+ }
99
+ catch {
100
+ return 0;
101
+ } })();
102
+ if (currentMtime <= cached.lastModified) {
103
+ // Cache is valid — also check incremental hash
104
+ const cacheMgr = getCacheManager(require("path").dirname(this.baseDir));
105
+ if (cacheMgr.isGraphHashValid(cached.indices.totalNodes + ":" + cached.indices.totalRelationships)) {
106
+ // Never expose the cached snapshot itself: callers intentionally
107
+ // mutate the graph before saveGraph(), and leaking this reference
108
+ // makes old/new comparisons impossible.
109
+ return structuredClone(cached.graph);
110
+ }
111
+ }
112
+ // File was modified externally or hash mismatch, invalidate cache
113
+ YamlGraphRepository.cache.delete(this.graphPath);
114
+ }
115
+ // Cross-process check
116
+ const cacheMgr = getCacheManager(require("path").dirname(this.baseDir));
117
+ if (cacheMgr.checkCrossProcessInvalidation(this.graphPath)) {
118
+ YamlGraphRepository.cache.delete(this.graphPath);
119
+ }
120
+ const graph = readYaml(this.graphPath);
121
+ const indices = GraphIndices.from(graph);
122
+ const stat = (() => { try {
123
+ return require("fs").statSync(this.graphPath).mtimeMs;
124
+ }
125
+ catch {
126
+ return 0;
127
+ } })();
128
+ YamlGraphRepository.cache.set(this.graphPath, {
129
+ graph,
130
+ indices,
131
+ lastModified: stat,
132
+ });
133
+ // Initialize incremental hash
134
+ cacheMgr.initGraphHash(graph.nodes.length, graph.relationships.length);
135
+ // Anti-bypass: check for out-of-band modifications
136
+ const projectDir = require("path").dirname(this.baseDir);
137
+ try {
138
+ const tamperResult = validateGraphIntegrity(projectDir, graph);
139
+ if (tamperResult.tampered) {
140
+ // Graph was modified outside SDD workflow — attach warning to graph metadata
141
+ ;
142
+ graph.metadata.__tamper_warning = tamperResult.reason;
143
+ }
144
+ }
145
+ catch { }
146
+ return structuredClone(graph);
147
+ }
148
+ getIndices() {
149
+ const cached = YamlGraphRepository.cache.get(this.graphPath);
150
+ if (cached)
151
+ return cached.indices;
152
+ const graph = this.loadGraph();
153
+ return GraphIndices.from(graph);
154
+ }
155
+ saveGraph(graph) {
156
+ this.ensureSddDir();
157
+ // Acquire cross-process lock
158
+ const cacheMgr = getCacheManager(require("path").dirname(this.baseDir));
159
+ cacheMgr.acquireWriteLock();
160
+ try {
161
+ writeYaml(this.graphPath, graph);
162
+ }
163
+ finally {
164
+ cacheMgr.releaseWriteLock();
165
+ }
166
+ // Record legitimate save for anti-bypass integrity tracking
167
+ const projectDir = require("path").dirname(this.baseDir);
168
+ try {
169
+ recordLegitimateSave(projectDir, graph);
170
+ }
171
+ catch { }
172
+ // Keep an immutable cache snapshot. Compute the dirty state before
173
+ // replacing it; doing this afterwards compares the new graph to itself.
174
+ const cached = YamlGraphRepository.cache.get(this.graphPath);
175
+ const { computeDirtyState } = require("../graph/index.js");
176
+ const snapshot = structuredClone(graph);
177
+ const dirty = computeDirtyState(cached?.graph || null, snapshot);
178
+ // Rebuilding the in-memory index is deterministic and avoids stale
179
+ // readonly totals/search entries after additions and removals. YAML is
180
+ // limited to small graphs; large graphs migrate to SQLite.
181
+ const indices = GraphIndices.from(snapshot);
182
+ YamlGraphRepository.cache.set(this.graphPath, {
183
+ graph: snapshot,
184
+ indices,
185
+ lastModified: Date.now(),
186
+ });
187
+ /*
188
+ if (cached) {
189
+ // Compute dirty nodes incrementally
190
+ const oldGraph = cached.graph
191
+ const { computeDirtyState } = require("../graph/index.js")
192
+ const dirty = computeDirtyState(oldGraph, graph)
193
+
194
+ if (!dirty.allChanged && dirty.dirtyNodeIds.size <= 50) {
195
+ // Incremental update: modify only affected entries
196
+ for (const nodeId of dirty.dirtyNodeIds) {
197
+ const oldNode = oldGraph.nodes.find(n => n.id === nodeId)
198
+ const newNode = graph.nodes.find(n => n.id === nodeId)
199
+ if (oldNode && newNode) {
200
+ cached.indices.updateNode(oldNode, newNode)
201
+ } else if (newNode) {
202
+ cached.indices.addNode(newNode)
203
+ } else if (oldNode) {
204
+ cached.indices.removeNode(nodeId)
205
+ }
206
+ }
207
+ // Update relationship indices incrementally
208
+ const oldRelKeys = new Set(oldGraph.relationships.map(r => `${r.from}||${r.to}||${r.type}`))
209
+ const newRelKeys = new Set(graph.relationships.map(r => `${r.from}||${r.to}||${r.type}`))
210
+ for (const rel of graph.relationships) {
211
+ const key = `${rel.from}||${rel.to}||${rel.type}`
212
+ if (!oldRelKeys.has(key)) {
213
+ cached.indices.addRelationship(rel)
214
+ }
215
+ }
216
+ for (const rel of oldGraph.relationships) {
217
+ const key = `${rel.from}||${rel.to}||${rel.type}`
218
+ if (!newRelKeys.has(key)) {
219
+ cached.indices.removeRelationship(rel)
220
+ }
221
+ }
222
+ } else {
223
+ // Full rebuild needed
224
+ YamlGraphRepository.cache.delete(this.graphPath)
225
+ const indices = GraphIndices.from(graph)
226
+ YamlGraphRepository.cache.set(this.graphPath, {
227
+ graph,
228
+ indices,
229
+ lastModified: Date.now(),
230
+ })
231
+ }
232
+ } else {
233
+ // No previous cache, full build
234
+ const indices = GraphIndices.from(graph)
235
+ YamlGraphRepository.cache.set(this.graphPath, {
236
+ graph,
237
+ indices,
238
+ lastModified: Date.now(),
239
+ })
240
+ }
241
+ */
242
+ // Update incremental hash
243
+ cacheMgr.initGraphHash(graph.nodes.length, graph.relationships.length);
244
+ // A: Granular invalidation — only invalidate caches for changed types
245
+ if (dirty.allChanged || dirty.dirtyTypes.size > 10) {
246
+ // Too many types changed — full invalidation is faster
247
+ cacheMgr.invalidateAll();
248
+ }
249
+ else if (dirty.dirtyTypes.size > 0) {
250
+ // A: Partial invalidation — only affected types
251
+ cacheMgr.invalidatePartial([...dirty.dirtyTypes]);
252
+ }
253
+ // G: Save graph snapshot to disk for cross-session restore
254
+ cacheMgr.saveGraphSnapshot(graph);
255
+ }
256
+ getStorageType() {
257
+ return "yaml";
258
+ }
259
+ isCacheValid() {
260
+ const cached = YamlGraphRepository.cache.get(this.graphPath);
261
+ if (!cached)
262
+ return false;
263
+ try {
264
+ const stat = require("fs").statSync(this.graphPath);
265
+ return stat.mtimeMs <= cached.lastModified;
266
+ }
267
+ catch {
268
+ return false;
269
+ }
270
+ }
271
+ invalidateCache() {
272
+ YamlGraphRepository.cache.delete(this.graphPath);
273
+ }
274
+ createProject(projectId, name, description) {
275
+ this.ensureSddDir();
276
+ const now = new Date().toISOString();
277
+ const graph = {
278
+ version: "1.0.0",
279
+ project_id: projectId,
280
+ nodes: [
281
+ {
282
+ id: projectId,
283
+ type: "project",
284
+ name,
285
+ description,
286
+ status: "DRAFT",
287
+ version: 1,
288
+ metadata: { name, description },
289
+ created_at: now,
290
+ updated_at: now,
291
+ },
292
+ ],
293
+ relationships: [],
294
+ metadata: {
295
+ created_at: now,
296
+ updated_at: now,
297
+ sdd_version: "1.0.0",
298
+ },
299
+ };
300
+ this.saveGraph(graph);
301
+ return graph;
302
+ }
303
+ createSnapshot(description) {
304
+ const graph = this.loadGraph();
305
+ const timestamp = new Date().toISOString().replace(/[:.]/g, "-");
306
+ const snapshotId = `snapshot-${timestamp}`;
307
+ const snapshotPath = join(this.baseDir, "snapshots", `${snapshotId}.yaml`);
308
+ writeYaml(snapshotPath, { id: snapshotId, timestamp: new Date().toISOString(), description, graph_state: graph });
309
+ return snapshotId;
310
+ }
311
+ listSnapshots() {
312
+ const snapDir = join(this.baseDir, "snapshots");
313
+ // Get both YAML files and directories (for snapshot folders)
314
+ const yamlFiles = listFiles(snapDir, ".yaml");
315
+ const dirs = listDirs(snapDir);
316
+ return [...yamlFiles, ...dirs];
317
+ }
318
+ migrateTo(target, projectDir) {
319
+ const graph = this.loadGraph();
320
+ if (target === "sqlite") {
321
+ const { SqliteGraphRepository } = require("./sqlite.js");
322
+ const repo = new SqliteGraphRepository(projectDir);
323
+ repo.saveGraph(graph);
324
+ return repo;
325
+ }
326
+ // Already YAML
327
+ return this;
328
+ }
329
+ // ── Optimized queries (use indices) ─────────────────────────────
330
+ getNodeCount() {
331
+ const cached = YamlGraphRepository.cache.get(this.graphPath);
332
+ if (cached)
333
+ return cached.indices.totalNodes;
334
+ // Quick count without full parse
335
+ try {
336
+ const content = readFileSync(this.graphPath, "utf-8");
337
+ const matches = content.match(/^ - id:/gm);
338
+ return matches ? matches.length : 0;
339
+ }
340
+ catch {
341
+ return 0;
342
+ }
343
+ }
344
+ getRelationshipCount() {
345
+ const cached = YamlGraphRepository.cache.get(this.graphPath);
346
+ if (cached)
347
+ return cached.indices.totalRelationships;
348
+ return 0;
349
+ }
350
+ getNodesByType(type) {
351
+ // Check per-type cache first
352
+ const cacheMgr = getCacheManager(require("path").dirname(this.baseDir));
353
+ const graphVersion = (() => { try {
354
+ return this.loadGraph().metadata.updated_at;
355
+ }
356
+ catch {
357
+ return "";
358
+ } })();
359
+ const versionNum = graphVersion ? new Date(graphVersion).getTime() : 0;
360
+ const cached = cacheMgr.getCachedNodesByType(type, versionNum);
361
+ if (cached)
362
+ return cached;
363
+ const indices = this.getIndices();
364
+ const nodes = indices.getNodesByType(type);
365
+ cacheMgr.setCachedNodesByType(type, nodes, versionNum);
366
+ return nodes;
367
+ }
368
+ getNodesByStatus(status) {
369
+ const indices = this.getIndices();
370
+ return indices.getNodesByStatus(status);
371
+ }
372
+ getNodeById(id) {
373
+ // Check byId map directly (O(1))
374
+ const indices = this.getIndices();
375
+ return indices.byId.get(id);
376
+ }
377
+ getRelationshipsForNode(nodeId) {
378
+ const indices = this.getIndices();
379
+ return indices.getRelationships(nodeId);
380
+ }
381
+ }
382
+ //# sourceMappingURL=yaml.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"yaml.js","sourceRoot":"","sources":["../../../src/sdd/persistence/yaml.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,48 @@
1
+ import type { KnowledgeGraph } from "../domain/types.js";
2
+ import { GraphIndices } from "../graph/index.js";
3
+ /**
4
+ * A dependency rule maps a keyword pattern to the graph infrastructure
5
+ * required to verify a promise. If the infrastructure doesn't exist
6
+ * in the graph, the promise is marked as "unverifiable".
7
+ *
8
+ * The AI can configure these rules to adapt to different project types.
9
+ */
10
+ export interface DependencyRule {
11
+ /** Keywords that trigger this rule (any match activates it) */
12
+ keywords: string[];
13
+ /** Description of what this rule checks */
14
+ description: string;
15
+ /**
16
+ * Function that checks if the required infrastructure exists in the graph.
17
+ * Returns true if the promise CAN be verified (infrastructure exists).
18
+ */
19
+ checkExists: (graph: KnowledgeGraph, indices: GraphIndices) => boolean;
20
+ }
21
+ /**
22
+ * Default dependency rules for infrastructure detection.
23
+ * The AI can extend or override these per-project.
24
+ */
25
+ export declare const DEFAULT_DEPENDENCY_RULES: DependencyRule[];
26
+ /**
27
+ * Classify whether a promise is verifiable based on its description
28
+ * and the current graph state.
29
+ *
30
+ * The AI can pass custom rules to override or extend the defaults.
31
+ */
32
+ export declare function classifyPromiseVerifiability(description: string, graph: KnowledgeGraph, customRules?: DependencyRule[]): {
33
+ verifiable: boolean;
34
+ reason?: string;
35
+ };
36
+ /**
37
+ * Batch classify a list of promises, returning those that are unverifiable.
38
+ */
39
+ export declare function findUnverifiablePromises(promises: Array<{
40
+ id: string;
41
+ description: string;
42
+ status: string;
43
+ }>, graph: KnowledgeGraph, customRules?: DependencyRule[]): Array<{
44
+ id: string;
45
+ description: string;
46
+ reason: string;
47
+ }>;
48
+ //# sourceMappingURL=classifier.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"classifier.d.ts","sourceRoot":"","sources":["../../../src/sdd/promises/classifier.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAA;AAExD,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAEhD;;;;;;GAMG;AACH,MAAM,WAAW,cAAc;IAC7B,+DAA+D;IAC/D,QAAQ,EAAE,MAAM,EAAE,CAAA;IAClB,2CAA2C;IAC3C,WAAW,EAAE,MAAM,CAAA;IACnB;;;OAGG;IACH,WAAW,EAAE,CAAC,KAAK,EAAE,cAAc,EAAE,OAAO,EAAE,YAAY,KAAK,OAAO,CAAA;CACvE;AAED;;;GAGG;AACH,eAAO,MAAM,wBAAwB,EAAE,cAAc,EAiKpD,CAAA;AAED;;;;;GAKG;AACH,wBAAgB,4BAA4B,CAC1C,WAAW,EAAE,MAAM,EACnB,KAAK,EAAE,cAAc,EACrB,WAAW,CAAC,EAAE,cAAc,EAAE,GAC7B;IAAE,UAAU,EAAE,OAAO,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,CAqB1C;AAED;;GAEG;AACH,wBAAgB,wBAAwB,CACtC,QAAQ,EAAE,KAAK,CAAC;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC,EACpE,KAAK,EAAE,cAAc,EACrB,WAAW,CAAC,EAAE,cAAc,EAAE,GAC7B,KAAK,CAAC;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC,CAsB5D"}
@@ -0,0 +1,215 @@
1
+ import { getNodesByType } from "../graph/engine.js";
2
+ import { GraphIndices } from "../graph/index.js";
3
+ /**
4
+ * Default dependency rules for infrastructure detection.
5
+ * The AI can extend or override these per-project.
6
+ */
7
+ export const DEFAULT_DEPENDENCY_RULES = [
8
+ {
9
+ keywords: ["docker", "container", "dockerfile", "docker-compose", "image"],
10
+ description: "Docker infrastructure required",
11
+ checkExists: (graph) => {
12
+ // Check for Docker-related architecture components
13
+ const archNodes = getNodesByType(graph, "architecture_component");
14
+ const hasDockerArch = archNodes.some(n => {
15
+ const tech = n.metadata.technology?.toLowerCase() || "";
16
+ return tech.includes("docker");
17
+ });
18
+ // Check for Docker files
19
+ const files = getNodesByType(graph, "file");
20
+ const hasDockerFiles = files.some(f => {
21
+ const path = f.metadata.path?.toLowerCase() || "";
22
+ return path.includes("dockerfile") || path.includes("docker-compose") || path.includes(".dockerignore");
23
+ });
24
+ return hasDockerArch || hasDockerFiles;
25
+ },
26
+ },
27
+ {
28
+ keywords: ["health check", "healthcheck", "liveness", "readiness", "probes"],
29
+ description: "Health check infrastructure required",
30
+ checkExists: (graph) => {
31
+ const archNodes = getNodesByType(graph, "architecture_component");
32
+ return archNodes.some(n => {
33
+ const name = n.name.toLowerCase();
34
+ const tech = n.metadata.technology?.toLowerCase() || "";
35
+ return name.includes("health") || name.includes("monitoring") || tech.includes("health");
36
+ });
37
+ },
38
+ },
39
+ {
40
+ keywords: ["rollback", "roll-back", "auto-rollback", "automático"],
41
+ description: "Rollback infrastructure required",
42
+ checkExists: (graph) => {
43
+ // Check for migration nodes with rollback scripts
44
+ const migrations = getNodesByType(graph, "migration");
45
+ if (migrations.length > 0)
46
+ return true;
47
+ // Check for architecture components related to deployment
48
+ const archNodes = getNodesByType(graph, "architecture_component");
49
+ return archNodes.some(n => {
50
+ const name = n.name.toLowerCase();
51
+ return name.includes("deploy") || name.includes("ci") || name.includes("cd");
52
+ });
53
+ },
54
+ },
55
+ {
56
+ keywords: ["dlq", "dead letter", "dead-letter", "idempotency", "idempotent"],
57
+ description: "Message queue infrastructure required",
58
+ checkExists: (graph) => {
59
+ const archNodes = getNodesByType(graph, "architecture_component");
60
+ return archNodes.some(n => {
61
+ const tech = n.metadata.technology?.toLowerCase() || "";
62
+ const name = n.name.toLowerCase();
63
+ return tech.includes("queue") || tech.includes("rabbitmq") || tech.includes("kafka") ||
64
+ tech.includes("bull") || tech.includes("redis") ||
65
+ name.includes("queue") || name.includes("worker") || name.includes("event");
66
+ });
67
+ },
68
+ },
69
+ {
70
+ keywords: ["observability", "observabilidade", "logging", "tracing", "metrics", "prometheus", "grafana", "datadog"],
71
+ description: "Observability stack required",
72
+ checkExists: (graph) => {
73
+ const archNodes = getNodesByType(graph, "architecture_component");
74
+ const hasObs = archNodes.some(n => {
75
+ const tech = n.metadata.technology?.toLowerCase() || "";
76
+ const name = n.name.toLowerCase();
77
+ return tech.includes("prometheus") || tech.includes("grafana") || tech.includes("datadog") ||
78
+ tech.includes("opentelemetry") || tech.includes("otel") ||
79
+ name.includes("observ") || name.includes("monitor") || name.includes("log");
80
+ });
81
+ // Also check for metric/alert nodes
82
+ const metrics = getNodesByType(graph, "metric");
83
+ const alerts = getNodesByType(graph, "alert");
84
+ return hasObs || metrics.length > 0 || alerts.length > 0;
85
+ },
86
+ },
87
+ {
88
+ keywords: ["semver", "semantic version", "versioning"],
89
+ description: "Versioning infrastructure required",
90
+ checkExists: (graph) => {
91
+ // Check for manifest/config files with versioning
92
+ const files = getNodesByType(graph, "file");
93
+ return files.some(f => {
94
+ const path = f.metadata.path?.toLowerCase() || "";
95
+ return path.includes("package.json") || path.includes("manifest") || path.includes("version");
96
+ });
97
+ },
98
+ },
99
+ {
100
+ keywords: ["performance", "perf", "latência", "response time", "tempo de resposta"],
101
+ description: "Performance measurement infrastructure required",
102
+ checkExists: (graph) => {
103
+ // Check for SLA nodes or metric nodes related to performance
104
+ const slas = getNodesByType(graph, "sla");
105
+ const metrics = getNodesByType(graph, "metric");
106
+ const hasPerfSla = slas.some(s => {
107
+ const metric = s.metadata.metric?.toLowerCase() || "";
108
+ return metric.includes("response") || metric.includes("latency") || metric.includes("performance");
109
+ });
110
+ const hasPerfMetric = metrics.some(m => {
111
+ const name = m.metadata.metric_name?.toLowerCase() || "";
112
+ return name.includes("response") || name.includes("latency") || name.includes("p99");
113
+ });
114
+ return hasPerfSla || hasPerfMetric;
115
+ },
116
+ },
117
+ {
118
+ keywords: ["cpt", "dynamic registration", "registro dinâmico"],
119
+ description: "Dynamic registration infrastructure required",
120
+ checkExists: (graph) => {
121
+ // Check for plugin system or module system architecture
122
+ const archNodes = getNodesByType(graph, "architecture_component");
123
+ return archNodes.some(n => {
124
+ const name = n.name.toLowerCase();
125
+ return name.includes("plugin") || name.includes("module") || name.includes("registry");
126
+ });
127
+ },
128
+ },
129
+ {
130
+ keywords: ["cli search", "busca cli", "search cli"],
131
+ description: "CLI search infrastructure required",
132
+ checkExists: (graph) => {
133
+ // Check for CLI-related architecture or files
134
+ const archNodes = getNodesByType(graph, "architecture_component");
135
+ const hasCliArch = archNodes.some(n => {
136
+ const name = n.name.toLowerCase();
137
+ return name.includes("cli") || name.includes("command");
138
+ });
139
+ const files = getNodesByType(graph, "file");
140
+ const hasCliFiles = files.some(f => {
141
+ const path = f.metadata.path?.toLowerCase() || "";
142
+ return path.includes("cli") || path.includes("command");
143
+ });
144
+ return hasCliArch || hasCliFiles;
145
+ },
146
+ },
147
+ {
148
+ keywords: ["layer ordering", "layer order", "ordering", "ordenação"],
149
+ description: "Layer ordering infrastructure required",
150
+ checkExists: (graph) => {
151
+ // Check for multiple architecture components with defined layers
152
+ const archNodes = getNodesByType(graph, "architecture_component");
153
+ const layers = new Set(archNodes.map(n => n.metadata.layer).filter(Boolean));
154
+ return layers.size >= 2;
155
+ },
156
+ },
157
+ {
158
+ keywords: ["checksum", "hash", "integridade"],
159
+ description: "Checksum infrastructure required",
160
+ checkExists: (graph) => {
161
+ // Check for build/deploy pipeline architecture
162
+ const archNodes = getNodesByType(graph, "architecture_component");
163
+ return archNodes.some(n => {
164
+ const name = n.name.toLowerCase();
165
+ return name.includes("build") || name.includes("pipeline") || name.includes("ci");
166
+ });
167
+ },
168
+ },
169
+ ];
170
+ /**
171
+ * Classify whether a promise is verifiable based on its description
172
+ * and the current graph state.
173
+ *
174
+ * The AI can pass custom rules to override or extend the defaults.
175
+ */
176
+ export function classifyPromiseVerifiability(description, graph, customRules) {
177
+ const rules = customRules || DEFAULT_DEPENDENCY_RULES;
178
+ const indices = GraphIndices.from(graph);
179
+ const descLower = description.toLowerCase();
180
+ for (const rule of rules) {
181
+ // Check if any keyword matches the promise description
182
+ const matchesKeyword = rule.keywords.some(kw => descLower.includes(kw.toLowerCase()));
183
+ if (!matchesKeyword)
184
+ continue;
185
+ // Keyword matched — now check if the required infrastructure exists
186
+ const infrastructureExists = rule.checkExists(graph, indices);
187
+ if (!infrastructureExists) {
188
+ return {
189
+ verifiable: false,
190
+ reason: `Requires ${rule.description} (no matching infrastructure in graph)`,
191
+ };
192
+ }
193
+ }
194
+ return { verifiable: true };
195
+ }
196
+ /**
197
+ * Batch classify a list of promises, returning those that are unverifiable.
198
+ */
199
+ export function findUnverifiablePromises(promises, graph, customRules) {
200
+ const results = [];
201
+ for (const promise of promises) {
202
+ if (promise.status !== "pending")
203
+ continue;
204
+ const classification = classifyPromiseVerifiability(promise.description, graph, customRules);
205
+ if (!classification.verifiable && classification.reason) {
206
+ results.push({
207
+ id: promise.id,
208
+ description: promise.description,
209
+ reason: classification.reason,
210
+ });
211
+ }
212
+ }
213
+ return results;
214
+ }
215
+ //# sourceMappingURL=classifier.js.map