@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,145 @@
1
+ /**
2
+ * Vault Markdown Parser Infrastructure
3
+ *
4
+ * Handles YAML frontmatter parsing/serialization (using js-yaml) and
5
+ * full document parsing by composing domain parser service with YAML infrastructure.
6
+ * Also provides a TemplateEngine for {{variable}} substitution.
7
+ *
8
+ * SOLID: SRP - YAML infrastructure + template rendering
9
+ * SOLID: DIP - implements the YAML concern that domain cannot handle
10
+ */
11
+ import yaml from "js-yaml";
12
+ import { VaultPath } from "../../domain/vault/value-objects.js";
13
+ import { MarkdownDocument } from "../../domain/vault/document.js";
14
+ import { MarkdownParserService } from "../../domain/vault/services.js";
15
+ import { Section } from "../../domain/vault/section.js";
16
+ /**
17
+ * Extract and parse YAML frontmatter from markdown content.
18
+ * Returns parsed data, remaining body, and raw YAML text.
19
+ */
20
+ export function parseYamlFrontmatter(content) {
21
+ const lines = content.split("\n");
22
+ // Must start with ---
23
+ if (lines.length < 3 || lines[0].trim() !== "---") {
24
+ return { data: {}, body: content, raw: "" };
25
+ }
26
+ // Find closing ---
27
+ let closingIndex = -1;
28
+ for (let i = 1; i < lines.length; i++) {
29
+ if (lines[i].trim() === "---") {
30
+ closingIndex = i;
31
+ break;
32
+ }
33
+ }
34
+ if (closingIndex === -1) {
35
+ return { data: {}, body: content, raw: "" };
36
+ }
37
+ const rawYaml = lines.slice(1, closingIndex).join("\n");
38
+ const body = lines.slice(closingIndex + 1).join("\n");
39
+ let data = {};
40
+ try {
41
+ const parsed = yaml.load(rawYaml);
42
+ if (parsed !== null && typeof parsed === "object" && !Array.isArray(parsed)) {
43
+ data = parsed;
44
+ }
45
+ }
46
+ catch {
47
+ // Invalid YAML — return empty data
48
+ data = {};
49
+ }
50
+ return { data, body, raw: rawYaml };
51
+ }
52
+ // ── YAML Frontmatter Serialization ────────────────────────────────────
53
+ /**
54
+ * Serialize a frontmatter data object to YAML string (without --- delimiters).
55
+ * Uses consistent formatting: no line wrapping, double quotes when needed.
56
+ */
57
+ export function serializeYamlFrontmatter(data) {
58
+ if (Object.keys(data).length === 0)
59
+ return "";
60
+ const result = yaml.dump(data, {
61
+ lineWidth: -1,
62
+ quotingType: '"',
63
+ forceQuotes: false,
64
+ sortKeys: false,
65
+ noRefs: true,
66
+ });
67
+ return result.trimEnd();
68
+ }
69
+ // ── Full Document Parsing ─────────────────────────────────────────────
70
+ const parserService = new MarkdownParserService();
71
+ /**
72
+ * Parse a complete markdown document: frontmatter + section tree.
73
+ * Combines YAML infrastructure with domain parser service.
74
+ */
75
+ export function parseFullDocument(path, content) {
76
+ const { data, body, raw } = parseYamlFrontmatter(content);
77
+ const bodyLines = body.split("\n");
78
+ const bodySections = parserService.parseSections(bodyLines);
79
+ // Section line numbers from parseSections are body-relative (0-indexed from body start).
80
+ // Shift them to be rawContent-relative so they align with rawContent.split("\n").
81
+ const fmLineCount = raw.length > 0 ? raw.split("\n").length + 2 : 0; // +2 for --- delimiters
82
+ const sections = fmLineCount > 0
83
+ ? offsetSectionLines(bodySections, fmLineCount)
84
+ : bodySections;
85
+ const props = {
86
+ path,
87
+ frontmatter: data,
88
+ rawFrontmatter: raw,
89
+ sections,
90
+ rawContent: content,
91
+ };
92
+ return MarkdownDocument.reconstitute(props);
93
+ }
94
+ /** Recursively offset all section startLine/endLine by a fixed amount. */
95
+ function offsetSectionLines(sections, offset) {
96
+ return sections.map((s) => Section.create({
97
+ heading: s.heading,
98
+ level: s.level,
99
+ content: s.content,
100
+ startLine: s.startLine + offset,
101
+ endLine: s.endLine + offset,
102
+ subsections: offsetSectionLines(s.subsections, offset),
103
+ }));
104
+ }
105
+ // ── Template Engine ───────────────────────────────────────────────────
106
+ /**
107
+ * Simple template engine for Obsidian-style {{variable}} placeholders.
108
+ * Handles built-in variables: {{date}}, {{date+Nd}}, {{title}}.
109
+ */
110
+ export class TemplateEngine {
111
+ /**
112
+ * Render a template string with variable substitutions.
113
+ * Built-in variables are resolved automatically.
114
+ * Custom variables override built-ins if there's a name collision.
115
+ */
116
+ render(template, variables) {
117
+ let result = template;
118
+ // Replace custom variables first (they take precedence)
119
+ for (const [key, value] of Object.entries(variables)) {
120
+ result = result.replaceAll(`{{${key}}}`, value);
121
+ }
122
+ // Replace built-in {{date}} with today's date
123
+ const today = formatDate(new Date());
124
+ result = result.replaceAll("{{date}}", today);
125
+ // Replace {{date+Nd}} patterns (e.g., {{date+14d}}, {{date+30d}})
126
+ result = result.replace(/\{\{date\+(\d+)d\}\}/g, (_match, days) => {
127
+ const future = new Date();
128
+ future.setDate(future.getDate() + Number(days));
129
+ return formatDate(future);
130
+ });
131
+ // Replace {{title}} with the title variable if provided
132
+ if (variables["title"] !== undefined) {
133
+ result = result.replaceAll("{{title}}", variables["title"]);
134
+ }
135
+ return result;
136
+ }
137
+ }
138
+ // ── Private Helpers ───────────────────────────────────────────────────
139
+ function formatDate(date) {
140
+ const y = date.getFullYear();
141
+ const m = String(date.getMonth() + 1).padStart(2, "0");
142
+ const d = String(date.getDate()).padStart(2, "0");
143
+ return `${y}-${m}-${d}`;
144
+ }
145
+ //# sourceMappingURL=markdown-parser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"markdown-parser.js","sourceRoot":"","sources":["../../../src/infrastructure/vault/markdown-parser.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ import { VaultPath } from "../../domain/vault/value-objects.js";
2
+ import type { VaultRepository, VaultSearchResult } from "../../domain/vault/repositories.js";
3
+ export declare class VaultFsAdapter implements VaultRepository {
4
+ private readonly vaultRoot;
5
+ constructor(vaultRoot: string);
6
+ listDocuments(folder?: string): Promise<readonly VaultPath[]>;
7
+ readDocument(path: VaultPath): Promise<string | null>;
8
+ writeDocument(path: VaultPath, content: string): Promise<void>;
9
+ deleteDocument(path: VaultPath): Promise<void>;
10
+ exists(path: VaultPath): Promise<boolean>;
11
+ readCanvas(path: VaultPath): Promise<string | null>;
12
+ writeCanvas(path: VaultPath, content: string): Promise<void>;
13
+ search(query: string, folder?: string): Promise<readonly VaultSearchResult[]>;
14
+ private resolve;
15
+ private walkDirectory;
16
+ }
17
+ //# sourceMappingURL=vault-fs-adapter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vault-fs-adapter.d.ts","sourceRoot":"","sources":["../../../src/infrastructure/vault/vault-fs-adapter.ts"],"names":[],"mappings":"AAoBA,OAAO,EAAE,SAAS,EAAE,MAAM,qCAAqC,CAAC;AAChE,OAAO,KAAK,EAAE,eAAe,EAAE,iBAAiB,EAAE,MAAM,oCAAoC,CAAC;AAE7F,qBAAa,cAAe,YAAW,eAAe;IACxC,OAAO,CAAC,QAAQ,CAAC,SAAS;gBAAT,SAAS,EAAE,MAAM;IAExC,aAAa,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,SAAS,EAAE,CAAC;IAa7D,YAAY,CAAC,IAAI,EAAE,SAAS,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAMrD,aAAa,CAAC,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAO9D,cAAc,CAAC,IAAI,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC;IAO9C,MAAM,CAAC,IAAI,EAAE,SAAS,GAAG,OAAO,CAAC,OAAO,CAAC;IAIzC,UAAU,CAAC,IAAI,EAAE,SAAS,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAInD,WAAW,CAAC,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAI5D,MAAM,CACV,KAAK,EAAE,MAAM,EACb,MAAM,CAAC,EAAE,MAAM,GACd,OAAO,CAAC,SAAS,iBAAiB,EAAE,CAAC;IA6BxC,OAAO,CAAC,OAAO;IAIf,OAAO,CAAC,aAAa;CAmBtB"}
@@ -0,0 +1,105 @@
1
+ /**
2
+ * Vault Filesystem Adapter
3
+ *
4
+ * Implements VaultRepository interface from the vault domain layer.
5
+ * Maps vault operations to Node.js filesystem calls.
6
+ * All paths are resolved relative to the vault root directory.
7
+ *
8
+ * SOLID: SRP - filesystem I/O for vault documents only
9
+ * SOLID: DIP - implements domain interface
10
+ * SOLID: LSP - fully substitutable for VaultRepository
11
+ */
12
+ import { readFileSync, writeFileSync, existsSync, readdirSync, mkdirSync, unlinkSync, } from "node:fs";
13
+ import { join, dirname, relative } from "node:path";
14
+ import { VaultPath } from "../../domain/vault/value-objects.js";
15
+ export class VaultFsAdapter {
16
+ vaultRoot;
17
+ constructor(vaultRoot) {
18
+ this.vaultRoot = vaultRoot;
19
+ }
20
+ async listDocuments(folder) {
21
+ const searchDir = folder !== undefined
22
+ ? join(this.vaultRoot, folder)
23
+ : this.vaultRoot;
24
+ if (!existsSync(searchDir))
25
+ return [];
26
+ const paths = [];
27
+ this.walkDirectory(searchDir, paths);
28
+ return paths.sort((a, b) => a.value.localeCompare(b.value));
29
+ }
30
+ async readDocument(path) {
31
+ const absPath = this.resolve(path);
32
+ if (!existsSync(absPath))
33
+ return null;
34
+ return readFileSync(absPath, "utf-8");
35
+ }
36
+ async writeDocument(path, content) {
37
+ const absPath = this.resolve(path);
38
+ const dir = dirname(absPath);
39
+ mkdirSync(dir, { recursive: true });
40
+ writeFileSync(absPath, content, "utf-8");
41
+ }
42
+ async deleteDocument(path) {
43
+ const absPath = this.resolve(path);
44
+ if (existsSync(absPath)) {
45
+ unlinkSync(absPath);
46
+ }
47
+ }
48
+ async exists(path) {
49
+ return existsSync(this.resolve(path));
50
+ }
51
+ async readCanvas(path) {
52
+ return this.readDocument(path);
53
+ }
54
+ async writeCanvas(path, content) {
55
+ return this.writeDocument(path, content);
56
+ }
57
+ async search(query, folder) {
58
+ const docs = await this.listDocuments(folder);
59
+ const results = [];
60
+ const lowerQuery = query.toLowerCase();
61
+ for (const docPath of docs) {
62
+ if (!docPath.isMarkdown)
63
+ continue;
64
+ const content = await this.readDocument(docPath);
65
+ if (content === null)
66
+ continue;
67
+ const lines = content.split("\n");
68
+ for (let i = 0; i < lines.length; i++) {
69
+ const line = lines[i];
70
+ if (line.toLowerCase().includes(lowerQuery)) {
71
+ results.push({
72
+ path: docPath,
73
+ line: i + 1, // 1-indexed for user-facing output
74
+ match: line.trim(),
75
+ });
76
+ }
77
+ }
78
+ }
79
+ return results;
80
+ }
81
+ // ── Private Helpers ───────────────────────────────────────────────
82
+ resolve(path) {
83
+ return join(this.vaultRoot, path.value);
84
+ }
85
+ walkDirectory(dir, results) {
86
+ const entries = readdirSync(dir, { withFileTypes: true });
87
+ for (const entry of entries) {
88
+ const fullPath = join(dir, entry.name);
89
+ if (entry.isDirectory()) {
90
+ // Skip hidden directories (.obsidian, .git, etc.)
91
+ if (entry.name.startsWith("."))
92
+ continue;
93
+ this.walkDirectory(fullPath, results);
94
+ }
95
+ else if (entry.isFile()) {
96
+ const ext = entry.name.split(".").pop()?.toLowerCase();
97
+ if (ext === "md" || ext === "canvas") {
98
+ const rel = relative(this.vaultRoot, fullPath).replace(/\\/g, "/");
99
+ results.push(VaultPath.from(rel));
100
+ }
101
+ }
102
+ }
103
+ }
104
+ }
105
+ //# sourceMappingURL=vault-fs-adapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vault-fs-adapter.js","sourceRoot":"","sources":["../../../src/infrastructure/vault/vault-fs-adapter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,27 @@
1
+ /**
2
+ * SQLite Workspace Dependency Repository
3
+ *
4
+ * Implements WorkspaceDependencyRepository from the domain layer.
5
+ * Stores cross-workspace dependency relationships in registry.db.
6
+ *
7
+ * SOLID: SRP - persistence for workspace dependencies only
8
+ * SOLID: ISP - separate from WorkspaceRegistryRepository
9
+ * SOLID: DIP - implements domain interface
10
+ */
11
+ import type { SqliteAdapter } from "../database/sqlite-adapter.js";
12
+ import type { WorkspaceDependencyRepository } from "../../domain/workspace-registry/repositories.js";
13
+ import type { WorkspaceDependency, DependencyType } from "../../domain/workspace-registry/value-objects.js";
14
+ import { WorkspaceId } from "../../domain/shared/value-objects.js";
15
+ export declare class SqliteWorkspaceDependencyRepository implements WorkspaceDependencyRepository {
16
+ private readonly db;
17
+ constructor(db: SqliteAdapter);
18
+ addDependency(dependency: WorkspaceDependency): Promise<void>;
19
+ removeDependency(sourceId: WorkspaceId, targetId: WorkspaceId): Promise<void>;
20
+ getDependencies(sourceId: WorkspaceId): Promise<readonly WorkspaceDependency[]>;
21
+ getDependents(targetId: WorkspaceId): Promise<readonly WorkspaceDependency[]>;
22
+ getDependenciesByType(sourceId: WorkspaceId, dependencyType: DependencyType): Promise<readonly WorkspaceDependency[]>;
23
+ dependencyExists(sourceId: WorkspaceId, targetId: WorkspaceId): Promise<boolean>;
24
+ removeAllForWorkspace(id: WorkspaceId): Promise<void>;
25
+ private toEntity;
26
+ }
27
+ //# sourceMappingURL=dependency-repository.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dependency-repository.d.ts","sourceRoot":"","sources":["../../../src/infrastructure/workspace-registry/dependency-repository.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AACnE,OAAO,KAAK,EAAE,6BAA6B,EAAE,MAAM,iDAAiD,CAAC;AAErG,OAAO,KAAK,EACV,mBAAmB,EACnB,cAAc,EACf,MAAM,kDAAkD,CAAC;AAC1D,OAAO,EAAE,WAAW,EAAE,MAAM,sCAAsC,CAAC;AAiCnE,qBAAa,mCAAoC,YAAW,6BAA6B;IAC3E,OAAO,CAAC,QAAQ,CAAC,EAAE;gBAAF,EAAE,EAAE,aAAa;IAIxC,aAAa,CAAC,UAAU,EAAE,mBAAmB,GAAG,OAAO,CAAC,IAAI,CAAC;IAgB7D,gBAAgB,CACpB,QAAQ,EAAE,WAAW,EACrB,QAAQ,EAAE,WAAW,GACpB,OAAO,CAAC,IAAI,CAAC;IAWV,eAAe,CACnB,QAAQ,EAAE,WAAW,GACpB,OAAO,CAAC,SAAS,mBAAmB,EAAE,CAAC;IAUpC,aAAa,CACjB,QAAQ,EAAE,WAAW,GACpB,OAAO,CAAC,SAAS,mBAAmB,EAAE,CAAC;IAUpC,qBAAqB,CACzB,QAAQ,EAAE,WAAW,EACrB,cAAc,EAAE,cAAc,GAC7B,OAAO,CAAC,SAAS,mBAAmB,EAAE,CAAC;IAapC,gBAAgB,CACpB,QAAQ,EAAE,WAAW,EACrB,QAAQ,EAAE,WAAW,GACpB,OAAO,CAAC,OAAO,CAAC;IAYb,qBAAqB,CAAC,EAAE,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;IAU3D,OAAO,CAAC,QAAQ;CAQjB"}
@@ -0,0 +1,89 @@
1
+ import { createWorkspaceDependency } from "../../domain/workspace-registry/value-objects.js";
2
+ import { WorkspaceId } from "../../domain/shared/value-objects.js";
3
+ // ── Schema ───────────────────────────────────────────────────────────
4
+ const SCHEMA_KEY = "workspace_dependencies";
5
+ const DDL = `
6
+ CREATE TABLE IF NOT EXISTS workspace_dependencies (
7
+ source_id TEXT NOT NULL,
8
+ target_id TEXT NOT NULL,
9
+ dependency_type TEXT NOT NULL,
10
+ description TEXT,
11
+ PRIMARY KEY (source_id, target_id),
12
+ FOREIGN KEY (source_id) REFERENCES workspaces(id) ON DELETE CASCADE,
13
+ FOREIGN KEY (target_id) REFERENCES workspaces(id) ON DELETE CASCADE
14
+ );
15
+ CREATE INDEX IF NOT EXISTS idx_deps_source
16
+ ON workspace_dependencies(source_id);
17
+ CREATE INDEX IF NOT EXISTS idx_deps_target
18
+ ON workspace_dependencies(target_id);
19
+ `;
20
+ // ── Repository Implementation ────────────────────────────────────────
21
+ export class SqliteWorkspaceDependencyRepository {
22
+ db;
23
+ constructor(db) {
24
+ this.db = db;
25
+ this.db.ensureSchema(SCHEMA_KEY, DDL);
26
+ }
27
+ async addDependency(dependency) {
28
+ this.db.execute(`INSERT INTO workspace_dependencies (
29
+ source_id, target_id, dependency_type, description
30
+ ) VALUES (
31
+ @source_id, @target_id, @dependency_type, @description
32
+ )`, {
33
+ source_id: dependency.sourceId.value,
34
+ target_id: dependency.targetId.value,
35
+ dependency_type: dependency.dependencyType,
36
+ description: dependency.description ?? null,
37
+ });
38
+ }
39
+ async removeDependency(sourceId, targetId) {
40
+ this.db.execute(`DELETE FROM workspace_dependencies
41
+ WHERE source_id = @source_id AND target_id = @target_id`, {
42
+ source_id: sourceId.value,
43
+ target_id: targetId.value,
44
+ });
45
+ }
46
+ async getDependencies(sourceId) {
47
+ const rows = this.db.queryAll(`SELECT * FROM workspace_dependencies
48
+ WHERE source_id = @source_id
49
+ ORDER BY target_id ASC`, { source_id: sourceId.value });
50
+ return rows.map((row) => this.toEntity(row));
51
+ }
52
+ async getDependents(targetId) {
53
+ const rows = this.db.queryAll(`SELECT * FROM workspace_dependencies
54
+ WHERE target_id = @target_id
55
+ ORDER BY source_id ASC`, { target_id: targetId.value });
56
+ return rows.map((row) => this.toEntity(row));
57
+ }
58
+ async getDependenciesByType(sourceId, dependencyType) {
59
+ const rows = this.db.queryAll(`SELECT * FROM workspace_dependencies
60
+ WHERE source_id = @source_id AND dependency_type = @dep_type
61
+ ORDER BY target_id ASC`, {
62
+ source_id: sourceId.value,
63
+ dep_type: dependencyType,
64
+ });
65
+ return rows.map((row) => this.toEntity(row));
66
+ }
67
+ async dependencyExists(sourceId, targetId) {
68
+ const row = this.db.queryOne(`SELECT COUNT(*) as count FROM workspace_dependencies
69
+ WHERE source_id = @source_id AND target_id = @target_id`, {
70
+ source_id: sourceId.value,
71
+ target_id: targetId.value,
72
+ });
73
+ return row !== undefined && row.count > 0;
74
+ }
75
+ async removeAllForWorkspace(id) {
76
+ this.db.execute(`DELETE FROM workspace_dependencies
77
+ WHERE source_id = @id OR target_id = @id`, { id: id.value });
78
+ }
79
+ // ── Mapping ──────────────────────────────────────────────────────
80
+ toEntity(row) {
81
+ return createWorkspaceDependency({
82
+ sourceId: WorkspaceId.from(row.source_id),
83
+ targetId: WorkspaceId.from(row.target_id),
84
+ dependencyType: row.dependency_type,
85
+ ...(row.description !== null ? { description: row.description } : {}),
86
+ });
87
+ }
88
+ }
89
+ //# sourceMappingURL=dependency-repository.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dependency-repository.js","sourceRoot":"","sources":["../../../src/infrastructure/workspace-registry/dependency-repository.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,28 @@
1
+ /**
2
+ * SQLite Workspace Registry Repository
3
+ *
4
+ * Implements WorkspaceRegistryRepository from the domain layer.
5
+ * Operates on the central registry database (~/.jarvis/registry.db),
6
+ * separate from the per-project .jarvis/jarvis.db.
7
+ *
8
+ * SOLID: SRP - persistence for Workspace aggregate only
9
+ * SOLID: DIP - implements domain interface
10
+ */
11
+ import type { SqliteAdapter } from "../database/sqlite-adapter.js";
12
+ import type { WorkspaceRegistryRepository } from "../../domain/workspace-registry/repositories.js";
13
+ import { Workspace } from "../../domain/workspace-registry/entities.js";
14
+ import { ProjectDirectory } from "../../domain/workspace-registry/value-objects.js";
15
+ import { WorkspaceId } from "../../domain/shared/value-objects.js";
16
+ export declare class SqliteWorkspaceRegistryRepository implements WorkspaceRegistryRepository {
17
+ private readonly db;
18
+ constructor(db: SqliteAdapter);
19
+ save(workspace: Workspace): Promise<void>;
20
+ findById(id: WorkspaceId): Promise<Workspace | null>;
21
+ findByDirectory(directory: ProjectDirectory): Promise<Workspace | null>;
22
+ findAll(): Promise<readonly Workspace[]>;
23
+ findByStatus(status: string): Promise<readonly Workspace[]>;
24
+ delete(id: WorkspaceId): Promise<void>;
25
+ exists(id: WorkspaceId): Promise<boolean>;
26
+ private toEntity;
27
+ }
28
+ //# sourceMappingURL=workspace-repository.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workspace-repository.d.ts","sourceRoot":"","sources":["../../../src/infrastructure/workspace-registry/workspace-repository.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AACnE,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,iDAAiD,CAAC;AACnG,OAAO,EAAE,SAAS,EAAE,MAAM,6CAA6C,CAAC;AACxE,OAAO,EACL,gBAAgB,EAEjB,MAAM,kDAAkD,CAAC;AAK1D,OAAO,EAAE,WAAW,EAAa,MAAM,sCAAsC,CAAC;AA0C9E,qBAAa,iCAAkC,YAAW,2BAA2B;IACvE,OAAO,CAAC,QAAQ,CAAC,EAAE;gBAAF,EAAE,EAAE,aAAa;IAIxC,IAAI,CAAC,SAAS,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC;IAiCzC,QAAQ,CAAC,EAAE,EAAE,WAAW,GAAG,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC;IAQpD,eAAe,CACnB,SAAS,EAAE,gBAAgB,GAC1B,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC;IAQtB,OAAO,IAAI,OAAO,CAAC,SAAS,SAAS,EAAE,CAAC;IAOxC,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,SAAS,EAAE,CAAC;IAQ3D,MAAM,CAAC,EAAE,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;IAMtC,MAAM,CAAC,EAAE,EAAE,WAAW,GAAG,OAAO,CAAC,OAAO,CAAC;IAU/C,OAAO,CAAC,QAAQ;CAqBjB"}
@@ -0,0 +1,108 @@
1
+ import { Workspace } from "../../domain/workspace-registry/entities.js";
2
+ import { ProjectDirectory, TechStack, } from "../../domain/workspace-registry/value-objects.js";
3
+ import { WorkspaceId, Timestamp } from "../../domain/shared/value-objects.js";
4
+ // ── Schema ───────────────────────────────────────────────────────────
5
+ const SCHEMA_KEY = "workspace_registry";
6
+ const DDL = `
7
+ CREATE TABLE IF NOT EXISTS workspaces (
8
+ id TEXT PRIMARY KEY,
9
+ name TEXT NOT NULL,
10
+ directory TEXT NOT NULL UNIQUE,
11
+ description TEXT,
12
+ primary_language TEXT NOT NULL DEFAULT 'unknown',
13
+ tech_stack TEXT NOT NULL DEFAULT '[]',
14
+ status TEXT NOT NULL DEFAULT 'active',
15
+ metadata TEXT NOT NULL DEFAULT '{}',
16
+ created_at TEXT NOT NULL,
17
+ updated_at TEXT NOT NULL
18
+ );
19
+ CREATE INDEX IF NOT EXISTS idx_workspaces_directory
20
+ ON workspaces(directory);
21
+ CREATE INDEX IF NOT EXISTS idx_workspaces_status
22
+ ON workspaces(status);
23
+ `;
24
+ // ── Repository Implementation ────────────────────────────────────────
25
+ export class SqliteWorkspaceRegistryRepository {
26
+ db;
27
+ constructor(db) {
28
+ this.db = db;
29
+ this.db.ensureSchema(SCHEMA_KEY, DDL);
30
+ }
31
+ async save(workspace) {
32
+ this.db.execute(`INSERT INTO workspaces (
33
+ id, name, directory, description, primary_language,
34
+ tech_stack, status, metadata, created_at, updated_at
35
+ ) VALUES (
36
+ @id, @name, @directory, @description, @primary_language,
37
+ @tech_stack, @status, @metadata, @created_at, @updated_at
38
+ )
39
+ ON CONFLICT(id) DO UPDATE SET
40
+ name = @name,
41
+ directory = @directory,
42
+ description = @description,
43
+ primary_language = @primary_language,
44
+ tech_stack = @tech_stack,
45
+ status = @status,
46
+ metadata = @metadata,
47
+ updated_at = @updated_at`, {
48
+ id: workspace.id.value,
49
+ name: workspace.name,
50
+ directory: workspace.directory.value,
51
+ description: workspace.description ?? null,
52
+ primary_language: workspace.primaryLanguage,
53
+ tech_stack: workspace.techStack.toJSON(),
54
+ status: workspace.status,
55
+ metadata: JSON.stringify(workspace.metadata),
56
+ created_at: workspace.createdAt.toISO(),
57
+ updated_at: workspace.updatedAt.toISO(),
58
+ });
59
+ }
60
+ async findById(id) {
61
+ const row = this.db.queryOne("SELECT * FROM workspaces WHERE id = @id", { id: id.value });
62
+ return row !== undefined ? this.toEntity(row) : null;
63
+ }
64
+ async findByDirectory(directory) {
65
+ const row = this.db.queryOne("SELECT * FROM workspaces WHERE directory = @directory", { directory: directory.value });
66
+ return row !== undefined ? this.toEntity(row) : null;
67
+ }
68
+ async findAll() {
69
+ const rows = this.db.queryAll("SELECT * FROM workspaces ORDER BY name ASC");
70
+ return rows.map((row) => this.toEntity(row));
71
+ }
72
+ async findByStatus(status) {
73
+ const rows = this.db.queryAll("SELECT * FROM workspaces WHERE status = @status ORDER BY name ASC", { status });
74
+ return rows.map((row) => this.toEntity(row));
75
+ }
76
+ async delete(id) {
77
+ this.db.execute("DELETE FROM workspaces WHERE id = @id", {
78
+ id: id.value,
79
+ });
80
+ }
81
+ async exists(id) {
82
+ const row = this.db.queryOne("SELECT COUNT(*) as count FROM workspaces WHERE id = @id", { id: id.value });
83
+ return row !== undefined && row.count > 0;
84
+ }
85
+ // ── Mapping ──────────────────────────────────────────────────────
86
+ toEntity(row) {
87
+ let metadata = {};
88
+ try {
89
+ metadata = JSON.parse(row.metadata);
90
+ }
91
+ catch {
92
+ // Corrupted JSON — default to empty
93
+ }
94
+ return Workspace.reconstitute({
95
+ id: WorkspaceId.from(row.id),
96
+ name: row.name,
97
+ directory: ProjectDirectory.from(row.directory),
98
+ description: row.description ?? undefined,
99
+ primaryLanguage: row.primary_language,
100
+ techStack: TechStack.fromJSON(row.tech_stack),
101
+ status: row.status,
102
+ metadata,
103
+ createdAt: Timestamp.fromISO(row.created_at),
104
+ updatedAt: Timestamp.fromISO(row.updated_at),
105
+ });
106
+ }
107
+ }
108
+ //# sourceMappingURL=workspace-repository.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workspace-repository.js","sourceRoot":"","sources":["../../../src/infrastructure/workspace-registry/workspace-repository.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ import type { PluginInput } from "@opencode-ai/plugin";
2
+ import type { ToolDefinition } from "@opencode-ai/plugin";
3
+ import type { CardUseCases } from "../application/kanban/card-use-cases.js";
4
+ import type { SprintUseCases, EpicUseCases } from "../application/kanban/sprint-use-cases.js";
5
+ type OpencodeClient = PluginInput["client"];
6
+ export interface AgentToolsDeps {
7
+ readonly client: OpencodeClient;
8
+ readonly cardUseCases: CardUseCases;
9
+ readonly sprintUseCases: SprintUseCases;
10
+ readonly epicUseCases: EpicUseCases;
11
+ }
12
+ export declare function createAgentTools(deps: AgentToolsDeps): Record<string, ToolDefinition>;
13
+ export {};
14
+ //# sourceMappingURL=agent-tools.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-tools.d.ts","sourceRoot":"","sources":["../../src/tools/agent-tools.ts"],"names":[],"mappings":"AAkBA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,yCAAyC,CAAC;AAC5E,OAAO,KAAK,EACV,cAAc,EACd,YAAY,EACb,MAAM,2CAA2C,CAAC;AAMnD,KAAK,cAAc,GAAG,WAAW,CAAC,QAAQ,CAAC,CAAC;AAE5C,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,MAAM,EAAE,cAAc,CAAC;IAChC,QAAQ,CAAC,YAAY,EAAE,YAAY,CAAC;IACpC,QAAQ,CAAC,cAAc,EAAE,cAAc,CAAC;IACxC,QAAQ,CAAC,YAAY,EAAE,YAAY,CAAC;CACrC;AAID,wBAAgB,gBAAgB,CAC9B,IAAI,EAAE,cAAc,GACnB,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,CAuQhC"}