@mc1global/opencode-jarvis 0.1.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 (415) hide show
  1. package/LICENSE +10 -0
  2. package/README.md +171 -0
  3. package/dist/application/context-memory/dtos.d.ts +100 -0
  4. package/dist/application/context-memory/dtos.d.ts.map +1 -0
  5. package/dist/application/context-memory/dtos.js +11 -0
  6. package/dist/application/context-memory/dtos.js.map +1 -0
  7. package/dist/application/context-memory/note-use-cases.d.ts +22 -0
  8. package/dist/application/context-memory/note-use-cases.d.ts.map +1 -0
  9. package/dist/application/context-memory/note-use-cases.js +76 -0
  10. package/dist/application/context-memory/note-use-cases.js.map +1 -0
  11. package/dist/application/context-memory/session-use-cases.d.ts +23 -0
  12. package/dist/application/context-memory/session-use-cases.d.ts.map +1 -0
  13. package/dist/application/context-memory/session-use-cases.js +63 -0
  14. package/dist/application/context-memory/session-use-cases.js.map +1 -0
  15. package/dist/application/context-memory/todo-use-cases.d.ts +25 -0
  16. package/dist/application/context-memory/todo-use-cases.d.ts.map +1 -0
  17. package/dist/application/context-memory/todo-use-cases.js +100 -0
  18. package/dist/application/context-memory/todo-use-cases.js.map +1 -0
  19. package/dist/application/domain-map/dtos.d.ts +58 -0
  20. package/dist/application/domain-map/dtos.d.ts.map +1 -0
  21. package/dist/application/domain-map/dtos.js +11 -0
  22. package/dist/application/domain-map/dtos.js.map +1 -0
  23. package/dist/application/domain-map/use-cases.d.ts +64 -0
  24. package/dist/application/domain-map/use-cases.d.ts.map +1 -0
  25. package/dist/application/domain-map/use-cases.js +217 -0
  26. package/dist/application/domain-map/use-cases.js.map +1 -0
  27. package/dist/application/environment/dtos.d.ts +74 -0
  28. package/dist/application/environment/dtos.d.ts.map +1 -0
  29. package/dist/application/environment/dtos.js +10 -0
  30. package/dist/application/environment/dtos.js.map +1 -0
  31. package/dist/application/environment/use-cases.d.ts +29 -0
  32. package/dist/application/environment/use-cases.d.ts.map +1 -0
  33. package/dist/application/environment/use-cases.js +232 -0
  34. package/dist/application/environment/use-cases.js.map +1 -0
  35. package/dist/application/governance/validation-use-cases.d.ts +45 -0
  36. package/dist/application/governance/validation-use-cases.d.ts.map +1 -0
  37. package/dist/application/governance/validation-use-cases.js +51 -0
  38. package/dist/application/governance/validation-use-cases.js.map +1 -0
  39. package/dist/application/kanban/board-use-cases.d.ts +45 -0
  40. package/dist/application/kanban/board-use-cases.d.ts.map +1 -0
  41. package/dist/application/kanban/board-use-cases.js +124 -0
  42. package/dist/application/kanban/board-use-cases.js.map +1 -0
  43. package/dist/application/kanban/card-use-cases.d.ts +32 -0
  44. package/dist/application/kanban/card-use-cases.d.ts.map +1 -0
  45. package/dist/application/kanban/card-use-cases.js +204 -0
  46. package/dist/application/kanban/card-use-cases.js.map +1 -0
  47. package/dist/application/kanban/dtos.d.ts +165 -0
  48. package/dist/application/kanban/dtos.d.ts.map +1 -0
  49. package/dist/application/kanban/dtos.js +11 -0
  50. package/dist/application/kanban/dtos.js.map +1 -0
  51. package/dist/application/kanban/sprint-use-cases.d.ts +34 -0
  52. package/dist/application/kanban/sprint-use-cases.d.ts.map +1 -0
  53. package/dist/application/kanban/sprint-use-cases.js +243 -0
  54. package/dist/application/kanban/sprint-use-cases.js.map +1 -0
  55. package/dist/application/rag/dtos.d.ts +113 -0
  56. package/dist/application/rag/dtos.d.ts.map +1 -0
  57. package/dist/application/rag/dtos.js +11 -0
  58. package/dist/application/rag/dtos.js.map +1 -0
  59. package/dist/application/rag/oracle-use-cases.d.ts +30 -0
  60. package/dist/application/rag/oracle-use-cases.d.ts.map +1 -0
  61. package/dist/application/rag/oracle-use-cases.js +91 -0
  62. package/dist/application/rag/oracle-use-cases.js.map +1 -0
  63. package/dist/application/rag/use-cases.d.ts +34 -0
  64. package/dist/application/rag/use-cases.d.ts.map +1 -0
  65. package/dist/application/rag/use-cases.js +234 -0
  66. package/dist/application/rag/use-cases.js.map +1 -0
  67. package/dist/application/token-metrics/dtos.d.ts +126 -0
  68. package/dist/application/token-metrics/dtos.d.ts.map +1 -0
  69. package/dist/application/token-metrics/dtos.js +11 -0
  70. package/dist/application/token-metrics/dtos.js.map +1 -0
  71. package/dist/application/token-metrics/tracking-use-cases.d.ts +33 -0
  72. package/dist/application/token-metrics/tracking-use-cases.d.ts.map +1 -0
  73. package/dist/application/token-metrics/tracking-use-cases.js +220 -0
  74. package/dist/application/token-metrics/tracking-use-cases.js.map +1 -0
  75. package/dist/application/vault/dtos.d.ts +91 -0
  76. package/dist/application/vault/dtos.d.ts.map +1 -0
  77. package/dist/application/vault/dtos.js +11 -0
  78. package/dist/application/vault/dtos.js.map +1 -0
  79. package/dist/application/vault/use-cases.d.ts +30 -0
  80. package/dist/application/vault/use-cases.d.ts.map +1 -0
  81. package/dist/application/vault/use-cases.js +307 -0
  82. package/dist/application/vault/use-cases.js.map +1 -0
  83. package/dist/application/vault/vault-manager.d.ts +47 -0
  84. package/dist/application/vault/vault-manager.d.ts.map +1 -0
  85. package/dist/application/vault/vault-manager.js +272 -0
  86. package/dist/application/vault/vault-manager.js.map +1 -0
  87. package/dist/application/workspace-registry/dtos.d.ts +91 -0
  88. package/dist/application/workspace-registry/dtos.d.ts.map +1 -0
  89. package/dist/application/workspace-registry/dtos.js +11 -0
  90. package/dist/application/workspace-registry/dtos.js.map +1 -0
  91. package/dist/application/workspace-registry/use-cases.d.ts +29 -0
  92. package/dist/application/workspace-registry/use-cases.d.ts.map +1 -0
  93. package/dist/application/workspace-registry/use-cases.js +249 -0
  94. package/dist/application/workspace-registry/use-cases.js.map +1 -0
  95. package/dist/domain/context-memory/entities.d.ts +123 -0
  96. package/dist/domain/context-memory/entities.d.ts.map +1 -0
  97. package/dist/domain/context-memory/entities.js +229 -0
  98. package/dist/domain/context-memory/entities.js.map +1 -0
  99. package/dist/domain/context-memory/repositories.d.ts +46 -0
  100. package/dist/domain/context-memory/repositories.d.ts.map +1 -0
  101. package/dist/domain/context-memory/repositories.js +2 -0
  102. package/dist/domain/context-memory/repositories.js.map +1 -0
  103. package/dist/domain/context-memory/services.d.ts +62 -0
  104. package/dist/domain/context-memory/services.d.ts.map +1 -0
  105. package/dist/domain/context-memory/services.js +162 -0
  106. package/dist/domain/context-memory/services.js.map +1 -0
  107. package/dist/domain/context-memory/value-objects.d.ts +65 -0
  108. package/dist/domain/context-memory/value-objects.d.ts.map +1 -0
  109. package/dist/domain/context-memory/value-objects.js +105 -0
  110. package/dist/domain/context-memory/value-objects.js.map +1 -0
  111. package/dist/domain/domain-map/repositories.d.ts +126 -0
  112. package/dist/domain/domain-map/repositories.d.ts.map +1 -0
  113. package/dist/domain/domain-map/repositories.js +2 -0
  114. package/dist/domain/domain-map/repositories.js.map +1 -0
  115. package/dist/domain/domain-map/services.d.ts +108 -0
  116. package/dist/domain/domain-map/services.d.ts.map +1 -0
  117. package/dist/domain/domain-map/services.js +335 -0
  118. package/dist/domain/domain-map/services.js.map +1 -0
  119. package/dist/domain/domain-map/value-objects.d.ts +186 -0
  120. package/dist/domain/domain-map/value-objects.d.ts.map +1 -0
  121. package/dist/domain/domain-map/value-objects.js +215 -0
  122. package/dist/domain/domain-map/value-objects.js.map +1 -0
  123. package/dist/domain/environment/entities.d.ts +93 -0
  124. package/dist/domain/environment/entities.d.ts.map +1 -0
  125. package/dist/domain/environment/entities.js +207 -0
  126. package/dist/domain/environment/entities.js.map +1 -0
  127. package/dist/domain/environment/renderers.d.ts +30 -0
  128. package/dist/domain/environment/renderers.d.ts.map +1 -0
  129. package/dist/domain/environment/renderers.js +139 -0
  130. package/dist/domain/environment/renderers.js.map +1 -0
  131. package/dist/domain/environment/repositories.d.ts +73 -0
  132. package/dist/domain/environment/repositories.d.ts.map +1 -0
  133. package/dist/domain/environment/repositories.js +16 -0
  134. package/dist/domain/environment/repositories.js.map +1 -0
  135. package/dist/domain/environment/services.d.ts +62 -0
  136. package/dist/domain/environment/services.d.ts.map +1 -0
  137. package/dist/domain/environment/services.js +282 -0
  138. package/dist/domain/environment/services.js.map +1 -0
  139. package/dist/domain/environment/value-objects.d.ts +127 -0
  140. package/dist/domain/environment/value-objects.d.ts.map +1 -0
  141. package/dist/domain/environment/value-objects.js +179 -0
  142. package/dist/domain/environment/value-objects.js.map +1 -0
  143. package/dist/domain/governance/policies.d.ts +42 -0
  144. package/dist/domain/governance/policies.d.ts.map +1 -0
  145. package/dist/domain/governance/policies.js +304 -0
  146. package/dist/domain/governance/policies.js.map +1 -0
  147. package/dist/domain/governance/services.d.ts +38 -0
  148. package/dist/domain/governance/services.d.ts.map +1 -0
  149. package/dist/domain/governance/services.js +42 -0
  150. package/dist/domain/governance/services.js.map +1 -0
  151. package/dist/domain/kanban/entities.d.ts +105 -0
  152. package/dist/domain/kanban/entities.d.ts.map +1 -0
  153. package/dist/domain/kanban/entities.js +211 -0
  154. package/dist/domain/kanban/entities.js.map +1 -0
  155. package/dist/domain/kanban/grooming.d.ts +40 -0
  156. package/dist/domain/kanban/grooming.d.ts.map +1 -0
  157. package/dist/domain/kanban/grooming.js +50 -0
  158. package/dist/domain/kanban/grooming.js.map +1 -0
  159. package/dist/domain/kanban/repositories.d.ts +41 -0
  160. package/dist/domain/kanban/repositories.d.ts.map +1 -0
  161. package/dist/domain/kanban/repositories.js +2 -0
  162. package/dist/domain/kanban/repositories.js.map +1 -0
  163. package/dist/domain/kanban/services.d.ts +49 -0
  164. package/dist/domain/kanban/services.d.ts.map +1 -0
  165. package/dist/domain/kanban/services.js +154 -0
  166. package/dist/domain/kanban/services.js.map +1 -0
  167. package/dist/domain/kanban/sprint.d.ts +103 -0
  168. package/dist/domain/kanban/sprint.d.ts.map +1 -0
  169. package/dist/domain/kanban/sprint.js +192 -0
  170. package/dist/domain/kanban/sprint.js.map +1 -0
  171. package/dist/domain/kanban/value-objects.d.ts +91 -0
  172. package/dist/domain/kanban/value-objects.d.ts.map +1 -0
  173. package/dist/domain/kanban/value-objects.js +167 -0
  174. package/dist/domain/kanban/value-objects.js.map +1 -0
  175. package/dist/domain/rag/repositories.d.ts +152 -0
  176. package/dist/domain/rag/repositories.d.ts.map +1 -0
  177. package/dist/domain/rag/repositories.js +2 -0
  178. package/dist/domain/rag/repositories.js.map +1 -0
  179. package/dist/domain/rag/services.d.ts +57 -0
  180. package/dist/domain/rag/services.d.ts.map +1 -0
  181. package/dist/domain/rag/services.js +224 -0
  182. package/dist/domain/rag/services.js.map +1 -0
  183. package/dist/domain/rag/value-objects.d.ts +118 -0
  184. package/dist/domain/rag/value-objects.d.ts.map +1 -0
  185. package/dist/domain/rag/value-objects.js +114 -0
  186. package/dist/domain/rag/value-objects.js.map +1 -0
  187. package/dist/domain/shared/value-objects.d.ts +56 -0
  188. package/dist/domain/shared/value-objects.d.ts.map +1 -0
  189. package/dist/domain/shared/value-objects.js +89 -0
  190. package/dist/domain/shared/value-objects.js.map +1 -0
  191. package/dist/domain/token-metrics/entities.d.ts +90 -0
  192. package/dist/domain/token-metrics/entities.d.ts.map +1 -0
  193. package/dist/domain/token-metrics/entities.js +115 -0
  194. package/dist/domain/token-metrics/entities.js.map +1 -0
  195. package/dist/domain/token-metrics/repositories.d.ts +93 -0
  196. package/dist/domain/token-metrics/repositories.d.ts.map +1 -0
  197. package/dist/domain/token-metrics/repositories.js +2 -0
  198. package/dist/domain/token-metrics/repositories.js.map +1 -0
  199. package/dist/domain/token-metrics/value-objects.d.ts +81 -0
  200. package/dist/domain/token-metrics/value-objects.d.ts.map +1 -0
  201. package/dist/domain/token-metrics/value-objects.js +144 -0
  202. package/dist/domain/token-metrics/value-objects.js.map +1 -0
  203. package/dist/domain/vault/canvas.d.ts +70 -0
  204. package/dist/domain/vault/canvas.d.ts.map +1 -0
  205. package/dist/domain/vault/canvas.js +70 -0
  206. package/dist/domain/vault/canvas.js.map +1 -0
  207. package/dist/domain/vault/document.d.ts +71 -0
  208. package/dist/domain/vault/document.d.ts.map +1 -0
  209. package/dist/domain/vault/document.js +244 -0
  210. package/dist/domain/vault/document.js.map +1 -0
  211. package/dist/domain/vault/repositories.d.ts +35 -0
  212. package/dist/domain/vault/repositories.d.ts.map +1 -0
  213. package/dist/domain/vault/repositories.js +2 -0
  214. package/dist/domain/vault/repositories.js.map +1 -0
  215. package/dist/domain/vault/section.d.ts +33 -0
  216. package/dist/domain/vault/section.d.ts.map +1 -0
  217. package/dist/domain/vault/section.js +39 -0
  218. package/dist/domain/vault/section.js.map +1 -0
  219. package/dist/domain/vault/services.d.ts +48 -0
  220. package/dist/domain/vault/services.d.ts.map +1 -0
  221. package/dist/domain/vault/services.js +249 -0
  222. package/dist/domain/vault/services.js.map +1 -0
  223. package/dist/domain/vault/table.d.ts +58 -0
  224. package/dist/domain/vault/table.d.ts.map +1 -0
  225. package/dist/domain/vault/table.js +204 -0
  226. package/dist/domain/vault/table.js.map +1 -0
  227. package/dist/domain/vault/timeline.d.ts +53 -0
  228. package/dist/domain/vault/timeline.d.ts.map +1 -0
  229. package/dist/domain/vault/timeline.js +214 -0
  230. package/dist/domain/vault/timeline.js.map +1 -0
  231. package/dist/domain/vault/value-objects.d.ts +45 -0
  232. package/dist/domain/vault/value-objects.d.ts.map +1 -0
  233. package/dist/domain/vault/value-objects.js +89 -0
  234. package/dist/domain/vault/value-objects.js.map +1 -0
  235. package/dist/domain/workspace-registry/entities.d.ts +57 -0
  236. package/dist/domain/workspace-registry/entities.d.ts.map +1 -0
  237. package/dist/domain/workspace-registry/entities.js +148 -0
  238. package/dist/domain/workspace-registry/entities.js.map +1 -0
  239. package/dist/domain/workspace-registry/repositories.d.ts +57 -0
  240. package/dist/domain/workspace-registry/repositories.d.ts.map +1 -0
  241. package/dist/domain/workspace-registry/repositories.js +12 -0
  242. package/dist/domain/workspace-registry/repositories.js.map +1 -0
  243. package/dist/domain/workspace-registry/services.d.ts +56 -0
  244. package/dist/domain/workspace-registry/services.d.ts.map +1 -0
  245. package/dist/domain/workspace-registry/services.js +283 -0
  246. package/dist/domain/workspace-registry/services.js.map +1 -0
  247. package/dist/domain/workspace-registry/value-objects.d.ts +113 -0
  248. package/dist/domain/workspace-registry/value-objects.d.ts.map +1 -0
  249. package/dist/domain/workspace-registry/value-objects.js +235 -0
  250. package/dist/domain/workspace-registry/value-objects.js.map +1 -0
  251. package/dist/hooks/context-compacting.d.ts +35 -0
  252. package/dist/hooks/context-compacting.d.ts.map +1 -0
  253. package/dist/hooks/context-compacting.js +48 -0
  254. package/dist/hooks/context-compacting.js.map +1 -0
  255. package/dist/hooks/event-handlers.d.ts +39 -0
  256. package/dist/hooks/event-handlers.d.ts.map +1 -0
  257. package/dist/hooks/event-handlers.js +75 -0
  258. package/dist/hooks/event-handlers.js.map +1 -0
  259. package/dist/hooks/guardrails.d.ts +33 -0
  260. package/dist/hooks/guardrails.d.ts.map +1 -0
  261. package/dist/hooks/guardrails.js +22 -0
  262. package/dist/hooks/guardrails.js.map +1 -0
  263. package/dist/hooks/shell-env.d.ts +28 -0
  264. package/dist/hooks/shell-env.d.ts.map +1 -0
  265. package/dist/hooks/shell-env.js +17 -0
  266. package/dist/hooks/shell-env.js.map +1 -0
  267. package/dist/index.d.ts +16 -0
  268. package/dist/index.d.ts.map +1 -0
  269. package/dist/index.js +349 -0
  270. package/dist/index.js.map +1 -0
  271. package/dist/infrastructure/context-memory/note-repository.d.ts +26 -0
  272. package/dist/infrastructure/context-memory/note-repository.d.ts.map +1 -0
  273. package/dist/infrastructure/context-memory/note-repository.js +87 -0
  274. package/dist/infrastructure/context-memory/note-repository.js.map +1 -0
  275. package/dist/infrastructure/context-memory/search-repository.d.ts +20 -0
  276. package/dist/infrastructure/context-memory/search-repository.d.ts.map +1 -0
  277. package/dist/infrastructure/context-memory/search-repository.js +44 -0
  278. package/dist/infrastructure/context-memory/search-repository.js.map +1 -0
  279. package/dist/infrastructure/context-memory/session-repository.d.ts +26 -0
  280. package/dist/infrastructure/context-memory/session-repository.d.ts.map +1 -0
  281. package/dist/infrastructure/context-memory/session-repository.js +79 -0
  282. package/dist/infrastructure/context-memory/session-repository.js.map +1 -0
  283. package/dist/infrastructure/context-memory/todo-repository.d.ts +26 -0
  284. package/dist/infrastructure/context-memory/todo-repository.d.ts.map +1 -0
  285. package/dist/infrastructure/context-memory/todo-repository.js +105 -0
  286. package/dist/infrastructure/context-memory/todo-repository.js.map +1 -0
  287. package/dist/infrastructure/database/sqlite-adapter.d.ts +60 -0
  288. package/dist/infrastructure/database/sqlite-adapter.d.ts.map +1 -0
  289. package/dist/infrastructure/database/sqlite-adapter.js +93 -0
  290. package/dist/infrastructure/database/sqlite-adapter.js.map +1 -0
  291. package/dist/infrastructure/domain-map/llm-analyzer.d.ts +60 -0
  292. package/dist/infrastructure/domain-map/llm-analyzer.d.ts.map +1 -0
  293. package/dist/infrastructure/domain-map/llm-analyzer.js +249 -0
  294. package/dist/infrastructure/domain-map/llm-analyzer.js.map +1 -0
  295. package/dist/infrastructure/domain-map/lsp-adapter.d.ts +61 -0
  296. package/dist/infrastructure/domain-map/lsp-adapter.d.ts.map +1 -0
  297. package/dist/infrastructure/domain-map/lsp-adapter.js +210 -0
  298. package/dist/infrastructure/domain-map/lsp-adapter.js.map +1 -0
  299. package/dist/infrastructure/domain-map/lsp-configs.d.ts +53 -0
  300. package/dist/infrastructure/domain-map/lsp-configs.d.ts.map +1 -0
  301. package/dist/infrastructure/domain-map/lsp-configs.js +274 -0
  302. package/dist/infrastructure/domain-map/lsp-configs.js.map +1 -0
  303. package/dist/infrastructure/domain-map/lsp-json-rpc.d.ts +132 -0
  304. package/dist/infrastructure/domain-map/lsp-json-rpc.d.ts.map +1 -0
  305. package/dist/infrastructure/domain-map/lsp-json-rpc.js +320 -0
  306. package/dist/infrastructure/domain-map/lsp-json-rpc.js.map +1 -0
  307. package/dist/infrastructure/domain-map/project-scanner.d.ts +43 -0
  308. package/dist/infrastructure/domain-map/project-scanner.d.ts.map +1 -0
  309. package/dist/infrastructure/domain-map/project-scanner.js +193 -0
  310. package/dist/infrastructure/domain-map/project-scanner.js.map +1 -0
  311. package/dist/infrastructure/environment/environment-repository.d.ts +33 -0
  312. package/dist/infrastructure/environment/environment-repository.d.ts.map +1 -0
  313. package/dist/infrastructure/environment/environment-repository.js +161 -0
  314. package/dist/infrastructure/environment/environment-repository.js.map +1 -0
  315. package/dist/infrastructure/environment/scanner-adapter.d.ts +23 -0
  316. package/dist/infrastructure/environment/scanner-adapter.d.ts.map +1 -0
  317. package/dist/infrastructure/environment/scanner-adapter.js +102 -0
  318. package/dist/infrastructure/environment/scanner-adapter.js.map +1 -0
  319. package/dist/infrastructure/kanban/card-repository.d.ts +41 -0
  320. package/dist/infrastructure/kanban/card-repository.d.ts.map +1 -0
  321. package/dist/infrastructure/kanban/card-repository.js +185 -0
  322. package/dist/infrastructure/kanban/card-repository.js.map +1 -0
  323. package/dist/infrastructure/kanban/sprint-repository.d.ts +40 -0
  324. package/dist/infrastructure/kanban/sprint-repository.d.ts.map +1 -0
  325. package/dist/infrastructure/kanban/sprint-repository.js +186 -0
  326. package/dist/infrastructure/kanban/sprint-repository.js.map +1 -0
  327. package/dist/infrastructure/rag/file-discovery.d.ts +19 -0
  328. package/dist/infrastructure/rag/file-discovery.d.ts.map +1 -0
  329. package/dist/infrastructure/rag/file-discovery.js +201 -0
  330. package/dist/infrastructure/rag/file-discovery.js.map +1 -0
  331. package/dist/infrastructure/rag/ollama-embeddings.d.ts +18 -0
  332. package/dist/infrastructure/rag/ollama-embeddings.d.ts.map +1 -0
  333. package/dist/infrastructure/rag/ollama-embeddings.js +54 -0
  334. package/dist/infrastructure/rag/ollama-embeddings.js.map +1 -0
  335. package/dist/infrastructure/rag/text-splitter.d.ts +19 -0
  336. package/dist/infrastructure/rag/text-splitter.d.ts.map +1 -0
  337. package/dist/infrastructure/rag/text-splitter.js +38 -0
  338. package/dist/infrastructure/rag/text-splitter.js.map +1 -0
  339. package/dist/infrastructure/rag/vectra-adapter.d.ts +38 -0
  340. package/dist/infrastructure/rag/vectra-adapter.d.ts.map +1 -0
  341. package/dist/infrastructure/rag/vectra-adapter.js +275 -0
  342. package/dist/infrastructure/rag/vectra-adapter.js.map +1 -0
  343. package/dist/infrastructure/token-metrics/token-metrics-repository.d.ts +29 -0
  344. package/dist/infrastructure/token-metrics/token-metrics-repository.d.ts.map +1 -0
  345. package/dist/infrastructure/token-metrics/token-metrics-repository.js +254 -0
  346. package/dist/infrastructure/token-metrics/token-metrics-repository.js.map +1 -0
  347. package/dist/infrastructure/vault/markdown-parser.d.ts +35 -0
  348. package/dist/infrastructure/vault/markdown-parser.d.ts.map +1 -0
  349. package/dist/infrastructure/vault/markdown-parser.js +145 -0
  350. package/dist/infrastructure/vault/markdown-parser.js.map +1 -0
  351. package/dist/infrastructure/vault/vault-fs-adapter.d.ts +17 -0
  352. package/dist/infrastructure/vault/vault-fs-adapter.d.ts.map +1 -0
  353. package/dist/infrastructure/vault/vault-fs-adapter.js +105 -0
  354. package/dist/infrastructure/vault/vault-fs-adapter.js.map +1 -0
  355. package/dist/infrastructure/workspace-registry/dependency-repository.d.ts +27 -0
  356. package/dist/infrastructure/workspace-registry/dependency-repository.d.ts.map +1 -0
  357. package/dist/infrastructure/workspace-registry/dependency-repository.js +89 -0
  358. package/dist/infrastructure/workspace-registry/dependency-repository.js.map +1 -0
  359. package/dist/infrastructure/workspace-registry/workspace-repository.d.ts +28 -0
  360. package/dist/infrastructure/workspace-registry/workspace-repository.d.ts.map +1 -0
  361. package/dist/infrastructure/workspace-registry/workspace-repository.js +108 -0
  362. package/dist/infrastructure/workspace-registry/workspace-repository.js.map +1 -0
  363. package/dist/tools/agent-tools.d.ts +14 -0
  364. package/dist/tools/agent-tools.d.ts.map +1 -0
  365. package/dist/tools/agent-tools.js +238 -0
  366. package/dist/tools/agent-tools.js.map +1 -0
  367. package/dist/tools/context-memory-tools.d.ts +16 -0
  368. package/dist/tools/context-memory-tools.d.ts.map +1 -0
  369. package/dist/tools/context-memory-tools.js +242 -0
  370. package/dist/tools/context-memory-tools.js.map +1 -0
  371. package/dist/tools/data-tools.d.ts +3 -0
  372. package/dist/tools/data-tools.d.ts.map +1 -0
  373. package/dist/tools/data-tools.js +383 -0
  374. package/dist/tools/data-tools.js.map +1 -0
  375. package/dist/tools/domain-map-tools.d.ts +41 -0
  376. package/dist/tools/domain-map-tools.d.ts.map +1 -0
  377. package/dist/tools/domain-map-tools.js +134 -0
  378. package/dist/tools/domain-map-tools.js.map +1 -0
  379. package/dist/tools/environment-tools.d.ts +85 -0
  380. package/dist/tools/environment-tools.d.ts.map +1 -0
  381. package/dist/tools/environment-tools.js +223 -0
  382. package/dist/tools/environment-tools.js.map +1 -0
  383. package/dist/tools/governance-tools.d.ts +7 -0
  384. package/dist/tools/governance-tools.d.ts.map +1 -0
  385. package/dist/tools/governance-tools.js +73 -0
  386. package/dist/tools/governance-tools.js.map +1 -0
  387. package/dist/tools/kanban-board-tools.d.ts +11 -0
  388. package/dist/tools/kanban-board-tools.d.ts.map +1 -0
  389. package/dist/tools/kanban-board-tools.js +354 -0
  390. package/dist/tools/kanban-board-tools.js.map +1 -0
  391. package/dist/tools/kanban-card-tools.d.ts +11 -0
  392. package/dist/tools/kanban-card-tools.d.ts.map +1 -0
  393. package/dist/tools/kanban-card-tools.js +407 -0
  394. package/dist/tools/kanban-card-tools.js.map +1 -0
  395. package/dist/tools/rag-tools.d.ts +10 -0
  396. package/dist/tools/rag-tools.d.ts.map +1 -0
  397. package/dist/tools/rag-tools.js +279 -0
  398. package/dist/tools/rag-tools.js.map +1 -0
  399. package/dist/tools/token-metrics-tools.d.ts +98 -0
  400. package/dist/tools/token-metrics-tools.d.ts.map +1 -0
  401. package/dist/tools/token-metrics-tools.js +287 -0
  402. package/dist/tools/token-metrics-tools.js.map +1 -0
  403. package/dist/tools/vault-manage-tool.d.ts +7 -0
  404. package/dist/tools/vault-manage-tool.d.ts.map +1 -0
  405. package/dist/tools/vault-manage-tool.js +193 -0
  406. package/dist/tools/vault-manage-tool.js.map +1 -0
  407. package/dist/tools/vault-tools.d.ts +7 -0
  408. package/dist/tools/vault-tools.d.ts.map +1 -0
  409. package/dist/tools/vault-tools.js +348 -0
  410. package/dist/tools/vault-tools.js.map +1 -0
  411. package/dist/tools/workspace-registry-tools.d.ts +93 -0
  412. package/dist/tools/workspace-registry-tools.d.ts.map +1 -0
  413. package/dist/tools/workspace-registry-tools.js +217 -0
  414. package/dist/tools/workspace-registry-tools.js.map +1 -0
  415. package/package.json +59 -0
@@ -0,0 +1,161 @@
1
+ import { Environment } from "../../domain/environment/entities.js";
2
+ import { EnvironmentId, EnvironmentName, containerConfigToJSON, containerConfigFromJSON, } from "../../domain/environment/value-objects.js";
3
+ import { WorkspaceId, Timestamp } from "../../domain/shared/value-objects.js";
4
+ // ── Schema ───────────────────────────────────────────────────────────
5
+ const SCHEMA_KEY = "environments";
6
+ const DDL = `
7
+ CREATE TABLE IF NOT EXISTS environments (
8
+ id TEXT PRIMARY KEY,
9
+ name TEXT NOT NULL UNIQUE,
10
+ workspace_id TEXT NOT NULL,
11
+ card_id TEXT,
12
+ purpose TEXT NOT NULL,
13
+ description TEXT NOT NULL,
14
+ status TEXT NOT NULL DEFAULT 'creating',
15
+ container_config TEXT NOT NULL DEFAULT '{}',
16
+ merge_strategy TEXT NOT NULL DEFAULT 'squash',
17
+ merge_commit_sha TEXT,
18
+ error_message TEXT,
19
+ metadata TEXT NOT NULL DEFAULT '{}',
20
+ created_at TEXT NOT NULL,
21
+ updated_at TEXT NOT NULL
22
+ );
23
+ CREATE INDEX IF NOT EXISTS idx_environments_workspace
24
+ ON environments(workspace_id);
25
+ CREATE INDEX IF NOT EXISTS idx_environments_status
26
+ ON environments(workspace_id, status);
27
+ CREATE INDEX IF NOT EXISTS idx_environments_card
28
+ ON environments(card_id);
29
+ CREATE INDEX IF NOT EXISTS idx_environments_name
30
+ ON environments(name);
31
+ `;
32
+ // ── Repository Implementation ────────────────────────────────────────
33
+ export class SqliteEnvironmentRepository {
34
+ db;
35
+ workspaceId;
36
+ constructor(db, workspaceId) {
37
+ this.db = db;
38
+ this.workspaceId = workspaceId;
39
+ this.db.ensureSchema(SCHEMA_KEY, DDL);
40
+ }
41
+ async save(environment) {
42
+ this.db.execute(`INSERT INTO environments (
43
+ id, name, workspace_id, card_id, purpose, description,
44
+ status, container_config, merge_strategy, merge_commit_sha,
45
+ error_message, metadata, created_at, updated_at
46
+ ) VALUES (
47
+ @id, @name, @workspace_id, @card_id, @purpose, @description,
48
+ @status, @container_config, @merge_strategy, @merge_commit_sha,
49
+ @error_message, @metadata, @created_at, @updated_at
50
+ )
51
+ ON CONFLICT(id) DO UPDATE SET
52
+ name = @name,
53
+ card_id = @card_id,
54
+ purpose = @purpose,
55
+ description = @description,
56
+ status = @status,
57
+ container_config = @container_config,
58
+ merge_strategy = @merge_strategy,
59
+ merge_commit_sha = @merge_commit_sha,
60
+ error_message = @error_message,
61
+ metadata = @metadata,
62
+ updated_at = @updated_at`, {
63
+ id: environment.id.value,
64
+ name: environment.name.value,
65
+ workspace_id: this.workspaceId.value,
66
+ card_id: environment.cardId ?? null,
67
+ purpose: environment.purpose,
68
+ description: environment.description,
69
+ status: environment.status,
70
+ container_config: containerConfigToJSON(environment.containerConfig),
71
+ merge_strategy: environment.mergeStrategy,
72
+ merge_commit_sha: environment.mergeCommitSha ?? null,
73
+ error_message: environment.errorMessage ?? null,
74
+ metadata: JSON.stringify(environment.metadata),
75
+ created_at: environment.createdAt.toISO(),
76
+ updated_at: environment.updatedAt.toISO(),
77
+ });
78
+ }
79
+ async findById(id) {
80
+ const row = this.db.queryOne("SELECT * FROM environments WHERE id = @id AND workspace_id = @workspace_id", { id: id.value, workspace_id: this.workspaceId.value });
81
+ return row !== undefined ? this.toEntity(row) : null;
82
+ }
83
+ async findByName(name) {
84
+ const row = this.db.queryOne("SELECT * FROM environments WHERE name = @name AND workspace_id = @workspace_id", { name: name.value, workspace_id: this.workspaceId.value });
85
+ return row !== undefined ? this.toEntity(row) : null;
86
+ }
87
+ async findByWorkspace(workspaceId) {
88
+ const rows = this.db.queryAll("SELECT * FROM environments WHERE workspace_id = @workspace_id ORDER BY created_at DESC", { workspace_id: workspaceId.value });
89
+ return rows.map((row) => this.toEntity(row));
90
+ }
91
+ async findByStatus(workspaceId, status) {
92
+ const rows = this.db.queryAll(`SELECT * FROM environments
93
+ WHERE workspace_id = @workspace_id AND status = @status
94
+ ORDER BY created_at DESC`, { workspace_id: workspaceId.value, status });
95
+ return rows.map((row) => this.toEntity(row));
96
+ }
97
+ async findByCard(cardId) {
98
+ const rows = this.db.queryAll(`SELECT * FROM environments
99
+ WHERE card_id = @card_id AND workspace_id = @workspace_id
100
+ ORDER BY created_at DESC`, { card_id: cardId, workspace_id: this.workspaceId.value });
101
+ return rows.map((row) => this.toEntity(row));
102
+ }
103
+ async findActive(workspaceId) {
104
+ const rows = this.db.queryAll(`SELECT * FROM environments
105
+ WHERE workspace_id = @workspace_id
106
+ AND status NOT IN ('deleted', 'merged')
107
+ ORDER BY created_at DESC`, { workspace_id: workspaceId.value });
108
+ return rows.map((row) => this.toEntity(row));
109
+ }
110
+ async delete(id) {
111
+ this.db.execute("DELETE FROM environments WHERE id = @id AND workspace_id = @workspace_id", { id: id.value, workspace_id: this.workspaceId.value });
112
+ }
113
+ async exists(id) {
114
+ const row = this.db.queryOne(`SELECT COUNT(*) as count FROM environments
115
+ WHERE id = @id AND workspace_id = @workspace_id`, { id: id.value, workspace_id: this.workspaceId.value });
116
+ return row !== undefined && row.count > 0;
117
+ }
118
+ async existsByName(name) {
119
+ const row = this.db.queryOne(`SELECT COUNT(*) as count FROM environments
120
+ WHERE name = @name AND workspace_id = @workspace_id`, { name: name.value, workspace_id: this.workspaceId.value });
121
+ return row !== undefined && row.count > 0;
122
+ }
123
+ async nextSequence(workspaceId) {
124
+ const row = this.db.queryOne(`SELECT MAX(CAST(SUBSTR(id, 5) AS INTEGER)) as max_seq
125
+ FROM environments WHERE workspace_id = @workspace_id`, { workspace_id: workspaceId.value });
126
+ return (row?.max_seq ?? 0) + 1;
127
+ }
128
+ // ── Mapping ──────────────────────────────────────────────────────
129
+ toEntity(row) {
130
+ let metadata = {};
131
+ try {
132
+ metadata = JSON.parse(row.metadata);
133
+ }
134
+ catch {
135
+ // Corrupted JSON — default to empty
136
+ }
137
+ let containerConfig = containerConfigFromJSON("{}");
138
+ try {
139
+ containerConfig = containerConfigFromJSON(row.container_config);
140
+ }
141
+ catch {
142
+ // Corrupted JSON — default to empty
143
+ }
144
+ return Environment.reconstitute({
145
+ id: EnvironmentId.from(row.id),
146
+ name: EnvironmentName.from(row.name),
147
+ cardId: row.card_id ?? undefined,
148
+ purpose: row.purpose,
149
+ description: row.description,
150
+ status: row.status,
151
+ containerConfig,
152
+ mergeStrategy: row.merge_strategy,
153
+ mergeCommitSha: row.merge_commit_sha ?? undefined,
154
+ errorMessage: row.error_message ?? undefined,
155
+ metadata,
156
+ createdAt: Timestamp.fromISO(row.created_at),
157
+ updatedAt: Timestamp.fromISO(row.updated_at),
158
+ });
159
+ }
160
+ }
161
+ //# sourceMappingURL=environment-repository.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"environment-repository.js","sourceRoot":"","sources":["../../../src/infrastructure/environment/environment-repository.ts"],"names":[],"mappings":"AAWA,OAAO,EAAE,WAAW,EAAE,MAAM,sCAAsC,CAAC;AACnE,OAAO,EACL,aAAa,EACb,eAAe,EACf,qBAAqB,EACrB,uBAAuB,GACxB,MAAM,2CAA2C,CAAC;AAMnD,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,sCAAsC,CAAC;AAE9E,wEAAwE;AAExE,MAAM,UAAU,GAAG,cAAc,CAAC;AAElC,MAAM,GAAG,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;CAyBX,CAAC;AAqBF,wEAAwE;AAExE,MAAM,OAAO,2BAA2B;IAInB;IAHF,WAAW,CAAc;IAE1C,YACmB,EAAiB,EAClC,WAAwB;QADP,OAAE,GAAF,EAAE,CAAe;QAGlC,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;QAC/B,IAAI,CAAC,EAAE,CAAC,YAAY,CAAC,UAAU,EAAE,GAAG,CAAC,CAAC;IACxC,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,WAAwB;QACjC,IAAI,CAAC,EAAE,CAAC,OAAO,CACb;;;;;;;;;;;;;;;;;;;;iCAoB2B,EAC3B;YACE,EAAE,EAAE,WAAW,CAAC,EAAE,CAAC,KAAK;YACxB,IAAI,EAAE,WAAW,CAAC,IAAI,CAAC,KAAK;YAC5B,YAAY,EAAE,IAAI,CAAC,WAAW,CAAC,KAAK;YACpC,OAAO,EAAE,WAAW,CAAC,MAAM,IAAI,IAAI;YACnC,OAAO,EAAE,WAAW,CAAC,OAAO;YAC5B,WAAW,EAAE,WAAW,CAAC,WAAW;YACpC,MAAM,EAAE,WAAW,CAAC,MAAM;YAC1B,gBAAgB,EAAE,qBAAqB,CAAC,WAAW,CAAC,eAAe,CAAC;YACpE,cAAc,EAAE,WAAW,CAAC,aAAa;YACzC,gBAAgB,EAAE,WAAW,CAAC,cAAc,IAAI,IAAI;YACpD,aAAa,EAAE,WAAW,CAAC,YAAY,IAAI,IAAI;YAC/C,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,QAAQ,CAAC;YAC9C,UAAU,EAAE,WAAW,CAAC,SAAS,CAAC,KAAK,EAAE;YACzC,UAAU,EAAE,WAAW,CAAC,SAAS,CAAC,KAAK,EAAE;SAC1C,CACF,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,EAAiB;QAC9B,MAAM,GAAG,GAAG,IAAI,CAAC,EAAE,CAAC,QAAQ,CAC1B,4EAA4E,EAC5E,EAAE,EAAE,EAAE,EAAE,CAAC,KAAK,EAAE,YAAY,EAAE,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,CACvD,CAAC;QACF,OAAO,GAAG,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IACvD,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,IAAqB;QACpC,MAAM,GAAG,GAAG,IAAI,CAAC,EAAE,CAAC,QAAQ,CAC1B,gFAAgF,EAChF,EAAE,IAAI,EAAE,IAAI,CAAC,KAAK,EAAE,YAAY,EAAE,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,CAC3D,CAAC;QACF,OAAO,GAAG,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IACvD,CAAC;IAED,KAAK,CAAC,eAAe,CACnB,WAAwB;QAExB,MAAM,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,QAAQ,CAC3B,wFAAwF,EACxF,EAAE,YAAY,EAAE,WAAW,CAAC,KAAK,EAAE,CACpC,CAAC;QACF,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC;IAC/C,CAAC;IAED,KAAK,CAAC,YAAY,CAChB,WAAwB,EACxB,MAAyB;QAEzB,MAAM,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,QAAQ,CAC3B;;gCAE0B,EAC1B,EAAE,YAAY,EAAE,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,CAC5C,CAAC;QACF,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC;IAC/C,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,MAAc;QAC7B,MAAM,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,QAAQ,CAC3B;;gCAE0B,EAC1B,EAAE,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,CAC1D,CAAC;QACF,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC;IAC/C,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,WAAwB;QACvC,MAAM,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,QAAQ,CAC3B;;;gCAG0B,EAC1B,EAAE,YAAY,EAAE,WAAW,CAAC,KAAK,EAAE,CACpC,CAAC;QACF,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC;IAC/C,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,EAAiB;QAC5B,IAAI,CAAC,EAAE,CAAC,OAAO,CACb,0EAA0E,EAC1E,EAAE,EAAE,EAAE,EAAE,CAAC,KAAK,EAAE,YAAY,EAAE,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,CACvD,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,EAAiB;QAC5B,MAAM,GAAG,GAAG,IAAI,CAAC,EAAE,CAAC,QAAQ,CAC1B;uDACiD,EACjD,EAAE,EAAE,EAAE,EAAE,CAAC,KAAK,EAAE,YAAY,EAAE,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,CACvD,CAAC;QACF,OAAO,GAAG,KAAK,SAAS,IAAI,GAAG,CAAC,KAAK,GAAG,CAAC,CAAC;IAC5C,CAAC;IAED,KAAK,CAAC,YAAY,CAAC,IAAqB;QACtC,MAAM,GAAG,GAAG,IAAI,CAAC,EAAE,CAAC,QAAQ,CAC1B;2DACqD,EACrD,EAAE,IAAI,EAAE,IAAI,CAAC,KAAK,EAAE,YAAY,EAAE,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,CAC3D,CAAC;QACF,OAAO,GAAG,KAAK,SAAS,IAAI,GAAG,CAAC,KAAK,GAAG,CAAC,CAAC;IAC5C,CAAC;IAED,KAAK,CAAC,YAAY,CAAC,WAAwB;QACzC,MAAM,GAAG,GAAG,IAAI,CAAC,EAAE,CAAC,QAAQ,CAC1B;4DACsD,EACtD,EAAE,YAAY,EAAE,WAAW,CAAC,KAAK,EAAE,CACpC,CAAC;QACF,OAAO,CAAC,GAAG,EAAE,OAAO,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;IACjC,CAAC;IAED,oEAAoE;IAE5D,QAAQ,CAAC,GAAmB;QAClC,IAAI,QAAQ,GAA4B,EAAE,CAAC;QAC3C,IAAI,CAAC;YACH,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAA4B,CAAC;QACjE,CAAC;QAAC,MAAM,CAAC;YACP,oCAAoC;QACtC,CAAC;QAED,IAAI,eAAe,GAAG,uBAAuB,CAAC,IAAI,CAAC,CAAC;QACpD,IAAI,CAAC;YACH,eAAe,GAAG,uBAAuB,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;QAClE,CAAC;QAAC,MAAM,CAAC;YACP,oCAAoC;QACtC,CAAC;QAED,OAAO,WAAW,CAAC,YAAY,CAAC;YAC9B,EAAE,EAAE,aAAa,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;YAC9B,IAAI,EAAE,eAAe,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC;YACpC,MAAM,EAAE,GAAG,CAAC,OAAO,IAAI,SAAS;YAChC,OAAO,EAAE,GAAG,CAAC,OAA6B;YAC1C,WAAW,EAAE,GAAG,CAAC,WAAW;YAC5B,MAAM,EAAE,GAAG,CAAC,MAA2B;YACvC,eAAe;YACf,aAAa,EAAE,GAAG,CAAC,cAA+B;YAClD,cAAc,EAAE,GAAG,CAAC,gBAAgB,IAAI,SAAS;YACjD,YAAY,EAAE,GAAG,CAAC,aAAa,IAAI,SAAS;YAC5C,QAAQ;YACR,SAAS,EAAE,SAAS,CAAC,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC;YAC5C,SAAS,EAAE,SAAS,CAAC,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC;SAC7C,CAAC,CAAC;IACL,CAAC;CACF"}
@@ -0,0 +1,23 @@
1
+ /**
2
+ * Environment Scanner Adapter
3
+ *
4
+ * Implements EnvironmentScannerPort by wrapping domain-map's
5
+ * FileProjectScanner behind a narrow interface.
6
+ * This prevents a domain-layer cross-context dependency.
7
+ *
8
+ * SOLID: ISP - narrow interface specific to environment needs
9
+ * SOLID: DIP - depends on ProjectScannerPort, not concrete class
10
+ * SOLID: SRP - adapts project scanning for environment context
11
+ */
12
+ import type { ProjectScannerPort } from "../../domain/domain-map/repositories.js";
13
+ import type { EnvironmentScannerPort, EnvironmentProjectInfo } from "../../domain/environment/repositories.js";
14
+ /**
15
+ * Adapts the domain-map ProjectScannerPort to the narrower
16
+ * EnvironmentScannerPort interface used by the environment context.
17
+ */
18
+ export declare class EnvironmentScannerAdapter implements EnvironmentScannerPort {
19
+ private readonly scanner;
20
+ constructor(scanner: ProjectScannerPort);
21
+ scanProject(directory: string): Promise<EnvironmentProjectInfo>;
22
+ }
23
+ //# sourceMappingURL=scanner-adapter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scanner-adapter.d.ts","sourceRoot":"","sources":["../../../src/infrastructure/environment/scanner-adapter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,yCAAyC,CAAC;AAClF,OAAO,KAAK,EACV,sBAAsB,EACtB,sBAAsB,EACvB,MAAM,0CAA0C,CAAC;AAclD;;;GAGG;AACH,qBAAa,yBAA0B,YAAW,sBAAsB;IAC1D,OAAO,CAAC,QAAQ,CAAC,OAAO;gBAAP,OAAO,EAAE,kBAAkB;IAElD,WAAW,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,sBAAsB,CAAC;CAetE"}
@@ -0,0 +1,102 @@
1
+ /**
2
+ * Environment Scanner Adapter
3
+ *
4
+ * Implements EnvironmentScannerPort by wrapping domain-map's
5
+ * FileProjectScanner behind a narrow interface.
6
+ * This prevents a domain-layer cross-context dependency.
7
+ *
8
+ * SOLID: ISP - narrow interface specific to environment needs
9
+ * SOLID: DIP - depends on ProjectScannerPort, not concrete class
10
+ * SOLID: SRP - adapts project scanning for environment context
11
+ */
12
+ // ── Default Analysis Config for Scanning ─────────────────────────────
13
+ /** Lightweight scan config for environment detection (not full analysis). */
14
+ const SCAN_CONFIG = {
15
+ maxFiles: 500,
16
+ maxFileLines: 500,
17
+ legacyThresholdLines: 1000,
18
+ legacyRatio: 0.1,
19
+ };
20
+ // ── Scanner Adapter Implementation ───────────────────────────────────
21
+ /**
22
+ * Adapts the domain-map ProjectScannerPort to the narrower
23
+ * EnvironmentScannerPort interface used by the environment context.
24
+ */
25
+ export class EnvironmentScannerAdapter {
26
+ scanner;
27
+ constructor(scanner) {
28
+ this.scanner = scanner;
29
+ }
30
+ async scanProject(directory) {
31
+ const result = await this.scanner.scanProject(directory, SCAN_CONFIG);
32
+ // Extract framework indicators from file paths
33
+ const frameworks = detectFrameworks(result.files.map((f) => f.relativePath));
34
+ return {
35
+ primaryLanguage: result.primaryLanguage,
36
+ frameworks,
37
+ totalFiles: result.files.length,
38
+ totalLines: result.files.reduce((sum, f) => sum + f.lineCount, 0),
39
+ };
40
+ }
41
+ }
42
+ // ── Framework Detection ──────────────────────────────────────────────
43
+ /** Known framework indicator files/directories. */
44
+ const FRAMEWORK_INDICATORS = new Map([
45
+ ["package.json", "node"],
46
+ ["tsconfig.json", "typescript"],
47
+ ["next.config.js", "nextjs"],
48
+ ["next.config.ts", "nextjs"],
49
+ ["next.config.mjs", "nextjs"],
50
+ ["nuxt.config.ts", "nuxt"],
51
+ ["vite.config.ts", "vite"],
52
+ ["vite.config.js", "vite"],
53
+ ["angular.json", "angular"],
54
+ ["svelte.config.js", "svelte"],
55
+ ["remix.config.js", "remix"],
56
+ ["astro.config.mjs", "astro"],
57
+ ["requirements.txt", "pip"],
58
+ ["pyproject.toml", "python-project"],
59
+ ["poetry.lock", "poetry"],
60
+ ["Pipfile", "pipenv"],
61
+ ["setup.py", "setuptools"],
62
+ ["Cargo.toml", "cargo"],
63
+ ["go.mod", "go-modules"],
64
+ ["Gemfile", "bundler"],
65
+ ["composer.json", "composer"],
66
+ ["build.gradle", "gradle"],
67
+ ["build.gradle.kts", "gradle"],
68
+ ["pom.xml", "maven"],
69
+ ["Package.swift", "swift-pm"],
70
+ ["pubspec.yaml", "dart-pub"],
71
+ ["mix.exs", "mix"],
72
+ ["Makefile", "make"],
73
+ ["Dockerfile", "docker"],
74
+ ["docker-compose.yml", "docker-compose"],
75
+ ["docker-compose.yaml", "docker-compose"],
76
+ [".env", "dotenv"],
77
+ ["jest.config.ts", "jest"],
78
+ ["jest.config.js", "jest"],
79
+ ["vitest.config.ts", "vitest"],
80
+ ["pytest.ini", "pytest"],
81
+ ["tox.ini", "tox"],
82
+ ]);
83
+ /**
84
+ * Detect frameworks from file paths.
85
+ * Returns deduplicated list of detected framework identifiers.
86
+ */
87
+ function detectFrameworks(relativePaths) {
88
+ const detected = new Set();
89
+ for (const filePath of relativePaths) {
90
+ // Check just the filename (last segment)
91
+ const parts = filePath.replace(/\\/g, "/").split("/");
92
+ const fileName = parts[parts.length - 1];
93
+ if (fileName !== undefined) {
94
+ const framework = FRAMEWORK_INDICATORS.get(fileName);
95
+ if (framework !== undefined) {
96
+ detected.add(framework);
97
+ }
98
+ }
99
+ }
100
+ return [...detected].sort();
101
+ }
102
+ //# sourceMappingURL=scanner-adapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scanner-adapter.js","sourceRoot":"","sources":["../../../src/infrastructure/environment/scanner-adapter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,41 @@
1
+ /**
2
+ * SQLite Card Repository
3
+ *
4
+ * Implements CardRepository interface from the kanban domain layer.
5
+ * Maps Card entities to/from SQLite rows with full acceptance criteria
6
+ * serialization (JSON column).
7
+ *
8
+ * Schema: cards table + acceptance_criteria JSON column
9
+ * Simplified from legacy 960-line Python monolith by focusing on
10
+ * Card aggregate only (ISP: separate from Sprint/Epic repos).
11
+ *
12
+ * SOLID: SRP - persistence for Card aggregate only
13
+ * SOLID: DIP - implements domain interface
14
+ * SOLID: LSP - fully substitutable for CardRepository
15
+ */
16
+ import type { SqliteAdapter } from "../database/sqlite-adapter.js";
17
+ import type { CardRepository } from "../../domain/kanban/repositories.js";
18
+ import { Card } from "../../domain/kanban/entities.js";
19
+ import { CardId, CardStatus, SprintId, EpicId } from "../../domain/kanban/value-objects.js";
20
+ import { WorkspaceId } from "../../domain/shared/value-objects.js";
21
+ /**
22
+ * SQLite implementation of CardRepository.
23
+ *
24
+ * Acceptance criteria are stored as a JSON array column to avoid
25
+ * a separate join table (simpler, and ACs are part of the Card aggregate).
26
+ */
27
+ export declare class SqliteCardRepository implements CardRepository {
28
+ private readonly db;
29
+ constructor(db: SqliteAdapter);
30
+ save(card: Card): Promise<void>;
31
+ findById(id: CardId): Promise<Card | null>;
32
+ findByWorkspace(workspace: WorkspaceId, status?: CardStatus): Promise<readonly Card[]>;
33
+ findBySprint(sprintId: SprintId): Promise<readonly Card[]>;
34
+ findByEpic(epicId: EpicId): Promise<readonly Card[]>;
35
+ findByAgent(agent: string, workspace: WorkspaceId): Promise<readonly Card[]>;
36
+ countByStatus(workspace: WorkspaceId, status: CardStatus): Promise<number>;
37
+ nextSequence(workspace: WorkspaceId): Promise<number>;
38
+ delete(id: CardId): Promise<void>;
39
+ private toDomain;
40
+ }
41
+ //# sourceMappingURL=card-repository.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"card-repository.d.ts","sourceRoot":"","sources":["../../../src/infrastructure/kanban/card-repository.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AACH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AACnE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qCAAqC,CAAC;AAC1E,OAAO,EAAE,IAAI,EAAE,MAAM,iCAAiC,CAAC;AAEvD,OAAO,EACL,MAAM,EACN,UAAU,EAEV,QAAQ,EACR,MAAM,EACP,MAAM,sCAAsC,CAAC;AAE9C,OAAO,EAAE,WAAW,EAAa,MAAM,sCAAsC,CAAC;AAuD9E;;;;;GAKG;AACH,qBAAa,oBAAqB,YAAW,cAAc;IAC7C,OAAO,CAAC,QAAQ,CAAC,EAAE;gBAAF,EAAE,EAAE,aAAa;IAIxC,IAAI,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;IAkD/B,QAAQ,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC;IAQ1C,eAAe,CACnB,SAAS,EAAE,WAAW,EACtB,MAAM,CAAC,EAAE,UAAU,GAClB,OAAO,CAAC,SAAS,IAAI,EAAE,CAAC;IAmBrB,YAAY,CAAC,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,SAAS,IAAI,EAAE,CAAC;IAU1D,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,IAAI,EAAE,CAAC;IAUpD,WAAW,CACf,KAAK,EAAE,MAAM,EACb,SAAS,EAAE,WAAW,GACrB,OAAO,CAAC,SAAS,IAAI,EAAE,CAAC;IAUrB,aAAa,CACjB,SAAS,EAAE,WAAW,EACtB,MAAM,EAAE,UAAU,GACjB,OAAO,CAAC,MAAM,CAAC;IASZ,YAAY,CAAC,SAAS,EAAE,WAAW,GAAG,OAAO,CAAC,MAAM,CAAC;IASrD,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAMvC,OAAO,CAAC,QAAQ;CA2CjB"}
@@ -0,0 +1,185 @@
1
+ import { Card } from "../../domain/kanban/entities.js";
2
+ import { CardId, CardStatus, Priority, SprintId, EpicId, } from "../../domain/kanban/value-objects.js";
3
+ import { WorkspaceId, Timestamp } from "../../domain/shared/value-objects.js";
4
+ const SCHEMA_KEY = "kanban_cards";
5
+ const DDL = `
6
+ CREATE TABLE IF NOT EXISTS cards (
7
+ id TEXT PRIMARY KEY,
8
+ workspace TEXT NOT NULL,
9
+ title TEXT NOT NULL,
10
+ status TEXT NOT NULL DEFAULT 'backlog',
11
+ priority TEXT NOT NULL DEFAULT 'medium',
12
+ description TEXT,
13
+ epic_id TEXT,
14
+ sprint_id TEXT,
15
+ story_points INTEGER,
16
+ assigned_agent TEXT,
17
+ acceptance_criteria TEXT NOT NULL DEFAULT '[]',
18
+ review_iterations INTEGER NOT NULL DEFAULT 0,
19
+ previous_status TEXT,
20
+ grooming_completed INTEGER NOT NULL DEFAULT 0,
21
+ created_at TEXT NOT NULL,
22
+ started_at TEXT,
23
+ completed_at TEXT
24
+ );
25
+ CREATE INDEX IF NOT EXISTS idx_cards_workspace ON cards(workspace);
26
+ CREATE INDEX IF NOT EXISTS idx_cards_status ON cards(status);
27
+ CREATE INDEX IF NOT EXISTS idx_cards_sprint ON cards(sprint_id);
28
+ CREATE INDEX IF NOT EXISTS idx_cards_epic ON cards(epic_id);
29
+ CREATE INDEX IF NOT EXISTS idx_cards_workspace_status
30
+ ON cards(workspace, status);
31
+ CREATE INDEX IF NOT EXISTS idx_cards_agent
32
+ ON cards(assigned_agent);
33
+ `;
34
+ /**
35
+ * SQLite implementation of CardRepository.
36
+ *
37
+ * Acceptance criteria are stored as a JSON array column to avoid
38
+ * a separate join table (simpler, and ACs are part of the Card aggregate).
39
+ */
40
+ export class SqliteCardRepository {
41
+ db;
42
+ constructor(db) {
43
+ this.db = db;
44
+ this.db.ensureSchema(SCHEMA_KEY, DDL);
45
+ }
46
+ async save(card) {
47
+ const acJson = JSON.stringify(card.acceptanceCriteria);
48
+ const sql = `
49
+ INSERT INTO cards (
50
+ id, workspace, title, status, priority, description,
51
+ epic_id, sprint_id, story_points, assigned_agent,
52
+ acceptance_criteria, review_iterations, previous_status,
53
+ grooming_completed, created_at, started_at, completed_at
54
+ ) VALUES (
55
+ @id, @workspace, @title, @status, @priority, @description,
56
+ @epic_id, @sprint_id, @story_points, @assigned_agent,
57
+ @acceptance_criteria, @review_iterations, @previous_status,
58
+ @grooming_completed, @created_at, @started_at, @completed_at
59
+ )
60
+ ON CONFLICT(id) DO UPDATE SET
61
+ status = @status,
62
+ priority = @priority,
63
+ description = @description,
64
+ epic_id = @epic_id,
65
+ sprint_id = @sprint_id,
66
+ story_points = @story_points,
67
+ assigned_agent = @assigned_agent,
68
+ acceptance_criteria = @acceptance_criteria,
69
+ review_iterations = @review_iterations,
70
+ previous_status = @previous_status,
71
+ grooming_completed = @grooming_completed,
72
+ started_at = @started_at,
73
+ completed_at = @completed_at
74
+ `;
75
+ this.db.execute(sql, {
76
+ id: card.id.value,
77
+ workspace: card.workspace.value,
78
+ title: card.title,
79
+ status: card.status,
80
+ priority: card.priority,
81
+ description: card.description ?? null,
82
+ epic_id: card.epicId?.value ?? null,
83
+ sprint_id: card.sprintId?.value ?? null,
84
+ story_points: card.storyPoints ?? null,
85
+ assigned_agent: card.assignedAgent ?? null,
86
+ acceptance_criteria: acJson,
87
+ review_iterations: card.reviewIterations,
88
+ previous_status: card.previousStatus ?? null,
89
+ grooming_completed: card.groomingCompleted ? 1 : 0,
90
+ created_at: card.createdAt.toISO(),
91
+ started_at: card.startedAt?.toISO() ?? null,
92
+ completed_at: card.completedAt?.toISO() ?? null,
93
+ });
94
+ }
95
+ async findById(id) {
96
+ const row = this.db.queryOne("SELECT * FROM cards WHERE id = @id", { id: id.value });
97
+ return row ? this.toDomain(row) : null;
98
+ }
99
+ async findByWorkspace(workspace, status) {
100
+ if (status !== undefined) {
101
+ const rows = this.db.queryAll(`SELECT * FROM cards
102
+ WHERE workspace = @workspace AND status = @status
103
+ ORDER BY created_at DESC`, { workspace: workspace.value, status });
104
+ return rows.map((row) => this.toDomain(row));
105
+ }
106
+ const rows = this.db.queryAll(`SELECT * FROM cards
107
+ WHERE workspace = @workspace
108
+ ORDER BY created_at DESC`, { workspace: workspace.value });
109
+ return rows.map((row) => this.toDomain(row));
110
+ }
111
+ async findBySprint(sprintId) {
112
+ const rows = this.db.queryAll(`SELECT * FROM cards
113
+ WHERE sprint_id = @sprint_id
114
+ ORDER BY created_at DESC`, { sprint_id: sprintId.value });
115
+ return rows.map((row) => this.toDomain(row));
116
+ }
117
+ async findByEpic(epicId) {
118
+ const rows = this.db.queryAll(`SELECT * FROM cards
119
+ WHERE epic_id = @epic_id
120
+ ORDER BY created_at DESC`, { epic_id: epicId.value });
121
+ return rows.map((row) => this.toDomain(row));
122
+ }
123
+ async findByAgent(agent, workspace) {
124
+ const rows = this.db.queryAll(`SELECT * FROM cards
125
+ WHERE assigned_agent = @agent AND workspace = @workspace
126
+ ORDER BY created_at DESC`, { agent, workspace: workspace.value });
127
+ return rows.map((row) => this.toDomain(row));
128
+ }
129
+ async countByStatus(workspace, status) {
130
+ const row = this.db.queryOne(`SELECT COUNT(*) as cnt FROM cards
131
+ WHERE workspace = @workspace AND status = @status`, { workspace: workspace.value, status });
132
+ return row?.cnt ?? 0;
133
+ }
134
+ async nextSequence(workspace) {
135
+ const row = this.db.queryOne(`SELECT MAX(CAST(SUBSTR(id, 4) AS INTEGER)) as max_seq
136
+ FROM cards WHERE workspace = @workspace`, { workspace: workspace.value });
137
+ return (row?.max_seq ?? 0) + 1;
138
+ }
139
+ async delete(id) {
140
+ this.db.execute("DELETE FROM cards WHERE id = @id", { id: id.value });
141
+ }
142
+ // ── Mapping ─────────────────────────────────────────────────────
143
+ toDomain(row) {
144
+ let acceptanceCriteria = [];
145
+ try {
146
+ acceptanceCriteria = JSON.parse(row.acceptance_criteria);
147
+ }
148
+ catch {
149
+ acceptanceCriteria = [];
150
+ }
151
+ const props = {
152
+ id: CardId.from(row.id),
153
+ workspace: WorkspaceId.from(row.workspace),
154
+ title: row.title,
155
+ status: row.status,
156
+ priority: row.priority,
157
+ ...(row.description !== null ? { description: row.description } : {}),
158
+ ...(row.epic_id !== null ? { epicId: EpicId.from(row.epic_id) } : {}),
159
+ ...(row.sprint_id !== null
160
+ ? { sprintId: SprintId.from(row.sprint_id) }
161
+ : {}),
162
+ ...(row.story_points !== null
163
+ ? { storyPoints: row.story_points }
164
+ : {}),
165
+ ...(row.assigned_agent !== null
166
+ ? { assignedAgent: row.assigned_agent }
167
+ : {}),
168
+ acceptanceCriteria,
169
+ reviewIterations: row.review_iterations,
170
+ ...(row.previous_status !== null
171
+ ? { previousStatus: row.previous_status }
172
+ : {}),
173
+ groomingCompleted: row.grooming_completed === 1,
174
+ createdAt: Timestamp.fromISO(row.created_at),
175
+ ...(row.started_at !== null
176
+ ? { startedAt: Timestamp.fromISO(row.started_at) }
177
+ : {}),
178
+ ...(row.completed_at !== null
179
+ ? { completedAt: Timestamp.fromISO(row.completed_at) }
180
+ : {}),
181
+ };
182
+ return Card.reconstitute(props);
183
+ }
184
+ }
185
+ //# sourceMappingURL=card-repository.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"card-repository.js","sourceRoot":"","sources":["../../../src/infrastructure/kanban/card-repository.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,40 @@
1
+ /**
2
+ * SQLite Sprint & Epic Repositories
3
+ *
4
+ * Implements SprintRepository and EpicRepository interfaces from domain.
5
+ * Each repository manages its own table schema (ISP).
6
+ *
7
+ * Split from legacy 960-line Python monolith: Sprint and Epic are
8
+ * separate aggregate roots with independent persistence.
9
+ *
10
+ * SOLID: SRP - Sprint persistence + Epic persistence (two classes)
11
+ * SOLID: DIP - implements domain interfaces
12
+ * SOLID: ISP - separate repository per aggregate root
13
+ */
14
+ import type { SqliteAdapter } from "../database/sqlite-adapter.js";
15
+ import type { SprintRepository, EpicRepository } from "../../domain/kanban/repositories.js";
16
+ import { Sprint, Epic } from "../../domain/kanban/sprint.js";
17
+ import { SprintId, EpicId } from "../../domain/kanban/value-objects.js";
18
+ import { WorkspaceId } from "../../domain/shared/value-objects.js";
19
+ export declare class SqliteSprintRepository implements SprintRepository {
20
+ private readonly db;
21
+ constructor(db: SqliteAdapter);
22
+ save(sprint: Sprint): Promise<void>;
23
+ findById(id: SprintId): Promise<Sprint | null>;
24
+ findByWorkspace(workspace: WorkspaceId): Promise<readonly Sprint[]>;
25
+ findActive(workspace: WorkspaceId): Promise<Sprint | null>;
26
+ nextSequence(workspace: WorkspaceId): Promise<number>;
27
+ delete(id: SprintId): Promise<void>;
28
+ private toDomain;
29
+ }
30
+ export declare class SqliteEpicRepository implements EpicRepository {
31
+ private readonly db;
32
+ constructor(db: SqliteAdapter);
33
+ save(epic: Epic): Promise<void>;
34
+ findById(id: EpicId): Promise<Epic | null>;
35
+ findByWorkspace(workspace: WorkspaceId): Promise<readonly Epic[]>;
36
+ nextSequence(workspace: WorkspaceId): Promise<number>;
37
+ delete(id: EpicId): Promise<void>;
38
+ private toDomain;
39
+ }
40
+ //# sourceMappingURL=sprint-repository.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sprint-repository.d.ts","sourceRoot":"","sources":["../../../src/infrastructure/kanban/sprint-repository.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AACH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AACnE,OAAO,KAAK,EACV,gBAAgB,EAChB,cAAc,EACf,MAAM,qCAAqC,CAAC;AAC7C,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,+BAA+B,CAAC;AAE7D,OAAO,EACL,QAAQ,EAER,MAAM,EAGP,MAAM,sCAAsC,CAAC;AAC9C,OAAO,EAAE,WAAW,EAAa,MAAM,sCAAsC,CAAC;AAuC9E,qBAAa,sBAAuB,YAAW,gBAAgB;IACjD,OAAO,CAAC,QAAQ,CAAC,EAAE;gBAAF,EAAE,EAAE,aAAa;IAIxC,IAAI,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IA+BnC,QAAQ,CAAC,EAAE,EAAE,QAAQ,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAQ9C,eAAe,CAAC,SAAS,EAAE,WAAW,GAAG,OAAO,CAAC,SAAS,MAAM,EAAE,CAAC;IAUnE,UAAU,CAAC,SAAS,EAAE,WAAW,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAU1D,YAAY,CAAC,SAAS,EAAE,WAAW,GAAG,OAAO,CAAC,MAAM,CAAC;IASrD,MAAM,CAAC,EAAE,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;IAIzC,OAAO,CAAC,QAAQ;CAuBjB;AAiCD,qBAAa,oBAAqB,YAAW,cAAc;IAC7C,OAAO,CAAC,QAAQ,CAAC,EAAE;gBAAF,EAAE,EAAE,aAAa;IAIxC,IAAI,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;IAyB/B,QAAQ,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC;IAQ1C,eAAe,CAAC,SAAS,EAAE,WAAW,GAAG,OAAO,CAAC,SAAS,IAAI,EAAE,CAAC;IAUjE,YAAY,CAAC,SAAS,EAAE,WAAW,GAAG,OAAO,CAAC,MAAM,CAAC;IASrD,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAIvC,OAAO,CAAC,QAAQ;CAajB"}