argustack 0.1.34 → 0.3.1

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 (672) hide show
  1. package/README.md +31 -98
  2. package/dist/adapters/board/board-sync.js +2 -2
  3. package/dist/adapters/board/board-sync.js.map +1 -1
  4. package/dist/adapters/board/md-parser.js +3 -3
  5. package/dist/adapters/board/md-parser.js.map +1 -1
  6. package/dist/adapters/board/skill-discovery.js +2 -2
  7. package/dist/adapters/board/skill-discovery.js.map +1 -1
  8. package/dist/adapters/board/skill-runner.js +2 -2
  9. package/dist/adapters/board/skill-runner.js.map +1 -1
  10. package/dist/adapters/board/store.d.ts.map +1 -1
  11. package/dist/adapters/board/store.js +11 -11
  12. package/dist/adapters/board/store.js.map +1 -1
  13. package/dist/adapters/csv/mapper.js +11 -11
  14. package/dist/adapters/csv/mapper.js.map +1 -1
  15. package/dist/adapters/csv/parser.d.ts.map +1 -1
  16. package/dist/adapters/csv/parser.js +8 -7
  17. package/dist/adapters/csv/parser.js.map +1 -1
  18. package/dist/adapters/csv/provider.js +4 -4
  19. package/dist/adapters/csv/provider.js.map +1 -1
  20. package/dist/adapters/db/client.js +2 -2
  21. package/dist/adapters/db/client.js.map +1 -1
  22. package/dist/adapters/db/index.js +1 -0
  23. package/dist/adapters/db/index.js.map +1 -1
  24. package/dist/adapters/db/mapper.js +1 -1
  25. package/dist/adapters/db/mapper.js.map +1 -1
  26. package/dist/adapters/db/provider.js +4 -4
  27. package/dist/adapters/db/provider.js.map +1 -1
  28. package/dist/adapters/db/sql-validator.js +2 -2
  29. package/dist/adapters/db/sql-validator.js.map +1 -1
  30. package/dist/adapters/docker/cli-docker-control.d.ts +13 -0
  31. package/dist/adapters/docker/cli-docker-control.d.ts.map +1 -0
  32. package/dist/adapters/docker/cli-docker-control.js +70 -0
  33. package/dist/adapters/docker/cli-docker-control.js.map +1 -0
  34. package/dist/adapters/docker/index.d.ts +2 -0
  35. package/dist/adapters/docker/index.d.ts.map +1 -0
  36. package/dist/adapters/docker/index.js +2 -0
  37. package/dist/adapters/docker/index.js.map +1 -0
  38. package/dist/adapters/git/mapper.js +1 -1
  39. package/dist/adapters/git/mapper.js.map +1 -1
  40. package/dist/adapters/git/provider.js +4 -4
  41. package/dist/adapters/git/provider.js.map +1 -1
  42. package/dist/adapters/github/mapper.js +3 -3
  43. package/dist/adapters/github/mapper.js.map +1 -1
  44. package/dist/adapters/github/provider.d.ts.map +1 -1
  45. package/dist/adapters/github/provider.js +2 -2
  46. package/dist/adapters/github/provider.js.map +1 -1
  47. package/dist/adapters/jira/mapper.js +4 -4
  48. package/dist/adapters/jira/mapper.js.map +1 -1
  49. package/dist/adapters/jira/provider.js +8 -8
  50. package/dist/adapters/jira/provider.js.map +1 -1
  51. package/dist/adapters/jira-proxy/client.js +4 -4
  52. package/dist/adapters/jira-proxy/client.js.map +1 -1
  53. package/dist/adapters/jira-proxy/config-loader.d.ts +9 -0
  54. package/dist/adapters/jira-proxy/config-loader.d.ts.map +1 -1
  55. package/dist/adapters/jira-proxy/config-loader.js +26 -3
  56. package/dist/adapters/jira-proxy/config-loader.js.map +1 -1
  57. package/dist/adapters/jira-proxy/index.d.ts +1 -1
  58. package/dist/adapters/jira-proxy/index.d.ts.map +1 -1
  59. package/dist/adapters/jira-proxy/index.js +1 -1
  60. package/dist/adapters/jira-proxy/index.js.map +1 -1
  61. package/dist/adapters/jira-proxy/mapper.js +2 -2
  62. package/dist/adapters/jira-proxy/mapper.js.map +1 -1
  63. package/dist/adapters/jira-proxy/provider.d.ts.map +1 -1
  64. package/dist/adapters/jira-proxy/provider.js +19 -8
  65. package/dist/adapters/jira-proxy/provider.js.map +1 -1
  66. package/dist/adapters/lmstudio/embedding-provider.d.ts +37 -0
  67. package/dist/adapters/lmstudio/embedding-provider.d.ts.map +1 -0
  68. package/dist/adapters/lmstudio/embedding-provider.js +174 -0
  69. package/dist/adapters/lmstudio/embedding-provider.js.map +1 -0
  70. package/dist/adapters/lmstudio/index.d.ts +3 -0
  71. package/dist/adapters/lmstudio/index.d.ts.map +1 -0
  72. package/dist/adapters/lmstudio/index.js +2 -0
  73. package/dist/adapters/lmstudio/index.js.map +1 -0
  74. package/dist/adapters/lsp/index.d.ts +4 -0
  75. package/dist/adapters/lsp/index.d.ts.map +1 -0
  76. package/dist/adapters/lsp/index.js +3 -0
  77. package/dist/adapters/lsp/index.js.map +1 -0
  78. package/dist/adapters/lsp/jsonrpc.d.ts +12 -0
  79. package/dist/adapters/lsp/jsonrpc.d.ts.map +1 -0
  80. package/dist/adapters/lsp/jsonrpc.js +30 -0
  81. package/dist/adapters/lsp/jsonrpc.js.map +1 -0
  82. package/dist/adapters/lsp/typescript-lsp.d.ts +25 -0
  83. package/dist/adapters/lsp/typescript-lsp.d.ts.map +1 -0
  84. package/dist/adapters/lsp/typescript-lsp.js +131 -0
  85. package/dist/adapters/lsp/typescript-lsp.js.map +1 -0
  86. package/dist/adapters/neo4j/client.d.ts +11 -0
  87. package/dist/adapters/neo4j/client.d.ts.map +1 -0
  88. package/dist/adapters/neo4j/client.js +14 -0
  89. package/dist/adapters/neo4j/client.js.map +1 -0
  90. package/dist/adapters/neo4j/cypher.d.ts +23 -0
  91. package/dist/adapters/neo4j/cypher.d.ts.map +1 -0
  92. package/dist/adapters/neo4j/cypher.js +138 -0
  93. package/dist/adapters/neo4j/cypher.js.map +1 -0
  94. package/dist/adapters/neo4j/graph-store.d.ts +33 -0
  95. package/dist/adapters/neo4j/graph-store.d.ts.map +1 -0
  96. package/dist/adapters/neo4j/graph-store.js +282 -0
  97. package/dist/adapters/neo4j/graph-store.js.map +1 -0
  98. package/dist/adapters/neo4j/index.d.ts +4 -0
  99. package/dist/adapters/neo4j/index.d.ts.map +1 -0
  100. package/dist/adapters/neo4j/index.js +3 -0
  101. package/dist/adapters/neo4j/index.js.map +1 -0
  102. package/dist/adapters/neo4j/mapper.d.ts +5 -0
  103. package/dist/adapters/neo4j/mapper.d.ts.map +1 -0
  104. package/dist/adapters/neo4j/mapper.js +49 -0
  105. package/dist/adapters/neo4j/mapper.js.map +1 -0
  106. package/dist/adapters/ollama/chat-llm.d.ts +24 -0
  107. package/dist/adapters/ollama/chat-llm.d.ts.map +1 -0
  108. package/dist/adapters/ollama/chat-llm.js +53 -0
  109. package/dist/adapters/ollama/chat-llm.js.map +1 -0
  110. package/dist/adapters/ollama/embedding-provider.d.ts +30 -0
  111. package/dist/adapters/ollama/embedding-provider.d.ts.map +1 -0
  112. package/dist/adapters/ollama/embedding-provider.js +124 -0
  113. package/dist/adapters/ollama/embedding-provider.js.map +1 -0
  114. package/dist/adapters/ollama/http-ollama-control.d.ts +24 -0
  115. package/dist/adapters/ollama/http-ollama-control.d.ts.map +1 -0
  116. package/dist/adapters/ollama/http-ollama-control.js +224 -0
  117. package/dist/adapters/ollama/http-ollama-control.js.map +1 -0
  118. package/dist/adapters/ollama/index.d.ts +6 -0
  119. package/dist/adapters/ollama/index.d.ts.map +1 -0
  120. package/dist/adapters/ollama/index.js +4 -0
  121. package/dist/adapters/ollama/index.js.map +1 -0
  122. package/dist/adapters/platform/index.d.ts +2 -0
  123. package/dist/adapters/platform/index.d.ts.map +1 -0
  124. package/dist/adapters/platform/index.js +2 -0
  125. package/dist/adapters/platform/index.js.map +1 -0
  126. package/dist/adapters/platform/node-platform-probe.d.ts +9 -0
  127. package/dist/adapters/platform/node-platform-probe.d.ts.map +1 -0
  128. package/dist/adapters/platform/node-platform-probe.js +88 -0
  129. package/dist/adapters/platform/node-platform-probe.js.map +1 -0
  130. package/dist/adapters/postgres/code-meta.d.ts +21 -0
  131. package/dist/adapters/postgres/code-meta.d.ts.map +1 -0
  132. package/dist/adapters/postgres/code-meta.js +150 -0
  133. package/dist/adapters/postgres/code-meta.js.map +1 -0
  134. package/dist/adapters/postgres/index.d.ts +3 -0
  135. package/dist/adapters/postgres/index.d.ts.map +1 -1
  136. package/dist/adapters/postgres/index.js +3 -0
  137. package/dist/adapters/postgres/index.js.map +1 -1
  138. package/dist/adapters/postgres/migrate-helpers.d.ts +43 -0
  139. package/dist/adapters/postgres/migrate-helpers.d.ts.map +1 -0
  140. package/dist/adapters/postgres/migrate-helpers.js +136 -0
  141. package/dist/adapters/postgres/migrate-helpers.js.map +1 -0
  142. package/dist/adapters/postgres/readiness-probe.d.ts +22 -0
  143. package/dist/adapters/postgres/readiness-probe.d.ts.map +1 -0
  144. package/dist/adapters/postgres/readiness-probe.js +47 -0
  145. package/dist/adapters/postgres/readiness-probe.js.map +1 -0
  146. package/dist/adapters/postgres/schema.d.ts +11 -1
  147. package/dist/adapters/postgres/schema.d.ts.map +1 -1
  148. package/dist/adapters/postgres/schema.js +192 -108
  149. package/dist/adapters/postgres/schema.js.map +1 -1
  150. package/dist/adapters/postgres/storage-commits.d.ts +13 -0
  151. package/dist/adapters/postgres/storage-commits.d.ts.map +1 -0
  152. package/dist/adapters/postgres/storage-commits.js +63 -0
  153. package/dist/adapters/postgres/storage-commits.js.map +1 -0
  154. package/dist/adapters/postgres/storage-dbschema.d.ts +14 -0
  155. package/dist/adapters/postgres/storage-dbschema.d.ts.map +1 -0
  156. package/dist/adapters/postgres/storage-dbschema.js +63 -0
  157. package/dist/adapters/postgres/storage-dbschema.js.map +1 -0
  158. package/dist/adapters/postgres/storage-graph.d.ts +18 -0
  159. package/dist/adapters/postgres/storage-graph.d.ts.map +1 -0
  160. package/dist/adapters/postgres/storage-graph.js +127 -0
  161. package/dist/adapters/postgres/storage-graph.js.map +1 -0
  162. package/dist/adapters/postgres/storage-issues.d.ts +26 -0
  163. package/dist/adapters/postgres/storage-issues.d.ts.map +1 -0
  164. package/dist/adapters/postgres/storage-issues.js +233 -0
  165. package/dist/adapters/postgres/storage-issues.js.map +1 -0
  166. package/dist/adapters/postgres/storage-prs.d.ts +15 -0
  167. package/dist/adapters/postgres/storage-prs.d.ts.map +1 -0
  168. package/dist/adapters/postgres/storage-prs.js +142 -0
  169. package/dist/adapters/postgres/storage-prs.js.map +1 -0
  170. package/dist/adapters/postgres/storage-query.d.ts +26 -0
  171. package/dist/adapters/postgres/storage-query.d.ts.map +1 -0
  172. package/dist/adapters/postgres/storage-query.js +74 -0
  173. package/dist/adapters/postgres/storage-query.js.map +1 -0
  174. package/dist/adapters/postgres/storage-search.d.ts +18 -0
  175. package/dist/adapters/postgres/storage-search.d.ts.map +1 -0
  176. package/dist/adapters/postgres/storage-search.js +90 -0
  177. package/dist/adapters/postgres/storage-search.js.map +1 -0
  178. package/dist/adapters/postgres/storage.d.ts +49 -33
  179. package/dist/adapters/postgres/storage.d.ts.map +1 -1
  180. package/dist/adapters/postgres/storage.js +89 -605
  181. package/dist/adapters/postgres/storage.js.map +1 -1
  182. package/dist/adapters/postgres/workspace-store.d.ts +26 -0
  183. package/dist/adapters/postgres/workspace-store.d.ts.map +1 -0
  184. package/dist/adapters/postgres/workspace-store.js +94 -0
  185. package/dist/adapters/postgres/workspace-store.js.map +1 -0
  186. package/dist/adapters/qdrant/client.d.ts +8 -0
  187. package/dist/adapters/qdrant/client.d.ts.map +1 -0
  188. package/dist/adapters/qdrant/client.js +12 -0
  189. package/dist/adapters/qdrant/client.js.map +1 -0
  190. package/dist/adapters/qdrant/index.d.ts +4 -0
  191. package/dist/adapters/qdrant/index.d.ts.map +1 -0
  192. package/dist/adapters/qdrant/index.js +3 -0
  193. package/dist/adapters/qdrant/index.js.map +1 -0
  194. package/dist/adapters/qdrant/mapper.d.ts +16 -0
  195. package/dist/adapters/qdrant/mapper.d.ts.map +1 -0
  196. package/dist/adapters/qdrant/mapper.js +59 -0
  197. package/dist/adapters/qdrant/mapper.js.map +1 -0
  198. package/dist/adapters/qdrant/vector-store.d.ts +20 -0
  199. package/dist/adapters/qdrant/vector-store.d.ts.map +1 -0
  200. package/dist/adapters/qdrant/vector-store.js +144 -0
  201. package/dist/adapters/qdrant/vector-store.js.map +1 -0
  202. package/dist/adapters/tree-sitter/index.d.ts +4 -0
  203. package/dist/adapters/tree-sitter/index.d.ts.map +1 -0
  204. package/dist/adapters/tree-sitter/index.js +3 -0
  205. package/dist/adapters/tree-sitter/index.js.map +1 -0
  206. package/dist/adapters/tree-sitter/parser.d.ts +15 -0
  207. package/dist/adapters/tree-sitter/parser.d.ts.map +1 -0
  208. package/dist/adapters/tree-sitter/parser.js +186 -0
  209. package/dist/adapters/tree-sitter/parser.js.map +1 -0
  210. package/dist/adapters/tree-sitter/queries.d.ts +14 -0
  211. package/dist/adapters/tree-sitter/queries.d.ts.map +1 -0
  212. package/dist/adapters/tree-sitter/queries.js +14 -0
  213. package/dist/adapters/tree-sitter/queries.js.map +1 -0
  214. package/dist/adapters/voyage/embedding-provider.d.ts +25 -0
  215. package/dist/adapters/voyage/embedding-provider.d.ts.map +1 -0
  216. package/dist/adapters/voyage/embedding-provider.js +105 -0
  217. package/dist/adapters/voyage/embedding-provider.js.map +1 -0
  218. package/dist/adapters/voyage/index.d.ts +3 -0
  219. package/dist/adapters/voyage/index.d.ts.map +1 -0
  220. package/dist/adapters/voyage/index.js +2 -0
  221. package/dist/adapters/voyage/index.js.map +1 -0
  222. package/dist/cli/add/code.d.ts +3 -0
  223. package/dist/cli/add/code.d.ts.map +1 -0
  224. package/dist/cli/add/code.js +97 -0
  225. package/dist/cli/add/code.js.map +1 -0
  226. package/dist/cli/add/csv.d.ts +3 -0
  227. package/dist/cli/add/csv.d.ts.map +1 -0
  228. package/dist/cli/add/csv.js +26 -0
  229. package/dist/cli/add/csv.js.map +1 -0
  230. package/dist/cli/add/db.d.ts +3 -0
  231. package/dist/cli/add/db.d.ts.map +1 -0
  232. package/dist/cli/add/db.js +46 -0
  233. package/dist/cli/add/db.js.map +1 -0
  234. package/dist/cli/add/git.d.ts +3 -0
  235. package/dist/cli/add/git.d.ts.map +1 -0
  236. package/dist/cli/add/git.js +26 -0
  237. package/dist/cli/add/git.js.map +1 -0
  238. package/dist/cli/add/github.d.ts +3 -0
  239. package/dist/cli/add/github.d.ts.map +1 -0
  240. package/dist/cli/add/github.js +32 -0
  241. package/dist/cli/add/github.js.map +1 -0
  242. package/dist/cli/add/index.d.ts +3 -0
  243. package/dist/cli/add/index.d.ts.map +1 -0
  244. package/dist/cli/add/index.js +18 -0
  245. package/dist/cli/add/index.js.map +1 -0
  246. package/dist/cli/add/jira.d.ts +3 -0
  247. package/dist/cli/add/jira.d.ts.map +1 -0
  248. package/dist/cli/add/jira.js +45 -0
  249. package/dist/cli/add/jira.js.map +1 -0
  250. package/dist/cli/add/shared.d.ts +31 -0
  251. package/dist/cli/add/shared.d.ts.map +1 -0
  252. package/dist/cli/add/shared.js +102 -0
  253. package/dist/cli/add/shared.js.map +1 -0
  254. package/dist/cli/board-server.js +1 -1
  255. package/dist/cli/board-server.js.map +1 -1
  256. package/dist/cli/board.d.ts.map +1 -1
  257. package/dist/cli/board.js +11 -12
  258. package/dist/cli/board.js.map +1 -1
  259. package/dist/cli/code.d.ts +3 -0
  260. package/dist/cli/code.d.ts.map +1 -0
  261. package/dist/cli/code.js +467 -0
  262. package/dist/cli/code.js.map +1 -0
  263. package/dist/cli/embed.d.ts.map +1 -1
  264. package/dist/cli/embed.js +21 -26
  265. package/dist/cli/embed.js.map +1 -1
  266. package/dist/cli/graph.d.ts.map +1 -1
  267. package/dist/cli/graph.js +37 -55
  268. package/dist/cli/graph.js.map +1 -1
  269. package/dist/cli/index.js +30 -25
  270. package/dist/cli/index.js.map +1 -1
  271. package/dist/cli/init/cleanup.d.ts +11 -0
  272. package/dist/cli/init/cleanup.d.ts.map +1 -0
  273. package/dist/cli/init/cleanup.js +39 -0
  274. package/dist/cli/init/cleanup.js.map +1 -0
  275. package/dist/cli/init/generators.js +27 -27
  276. package/dist/cli/init/generators.js.map +1 -1
  277. package/dist/cli/init/index.d.ts +0 -10
  278. package/dist/cli/init/index.d.ts.map +1 -1
  279. package/dist/cli/init/index.js +386 -351
  280. package/dist/cli/init/index.js.map +1 -1
  281. package/dist/cli/init/presenter.d.ts +30 -0
  282. package/dist/cli/init/presenter.d.ts.map +1 -0
  283. package/dist/cli/init/presenter.js +152 -0
  284. package/dist/cli/init/presenter.js.map +1 -0
  285. package/dist/cli/init/prompts.d.ts +28 -0
  286. package/dist/cli/init/prompts.d.ts.map +1 -0
  287. package/dist/cli/init/prompts.js +110 -0
  288. package/dist/cli/init/prompts.js.map +1 -0
  289. package/dist/cli/init/setup-csv.js +2 -2
  290. package/dist/cli/init/setup-csv.js.map +1 -1
  291. package/dist/cli/init/setup-db.d.ts.map +1 -1
  292. package/dist/cli/init/setup-db.js +17 -14
  293. package/dist/cli/init/setup-db.js.map +1 -1
  294. package/dist/cli/init/setup-git.js +16 -16
  295. package/dist/cli/init/setup-git.js.map +1 -1
  296. package/dist/cli/init/setup-github.d.ts.map +1 -1
  297. package/dist/cli/init/setup-github.js +7 -5
  298. package/dist/cli/init/setup-github.js.map +1 -1
  299. package/dist/cli/init/setup-jira.d.ts.map +1 -1
  300. package/dist/cli/init/setup-jira.js +11 -9
  301. package/dist/cli/init/setup-jira.js.map +1 -1
  302. package/dist/cli/init/types.d.ts +4 -0
  303. package/dist/cli/init/types.d.ts.map +1 -1
  304. package/dist/cli/init/types.js +4 -4
  305. package/dist/cli/init/types.js.map +1 -1
  306. package/dist/cli/mcp-install.d.ts +1 -1
  307. package/dist/cli/mcp-install.d.ts.map +1 -1
  308. package/dist/cli/mcp-install.js +10 -24
  309. package/dist/cli/mcp-install.js.map +1 -1
  310. package/dist/cli/migrate-to-hub-impl.d.ts +51 -0
  311. package/dist/cli/migrate-to-hub-impl.d.ts.map +1 -0
  312. package/dist/cli/migrate-to-hub-impl.js +171 -0
  313. package/dist/cli/migrate-to-hub-impl.js.map +1 -0
  314. package/dist/cli/migrate-to-hub.d.ts +3 -0
  315. package/dist/cli/migrate-to-hub.d.ts.map +1 -0
  316. package/dist/cli/migrate-to-hub.js +90 -0
  317. package/dist/cli/migrate-to-hub.js.map +1 -0
  318. package/dist/cli/push.d.ts.map +1 -1
  319. package/dist/cli/push.js +62 -65
  320. package/dist/cli/push.js.map +1 -1
  321. package/dist/cli/sources.d.ts +0 -7
  322. package/dist/cli/sources.d.ts.map +1 -1
  323. package/dist/cli/sources.js +47 -112
  324. package/dist/cli/sources.js.map +1 -1
  325. package/dist/cli/status.d.ts +0 -3
  326. package/dist/cli/status.d.ts.map +1 -1
  327. package/dist/cli/status.js +95 -70
  328. package/dist/cli/status.js.map +1 -1
  329. package/dist/cli/sync.d.ts +0 -10
  330. package/dist/cli/sync.d.ts.map +1 -1
  331. package/dist/cli/sync.js +186 -314
  332. package/dist/cli/sync.js.map +1 -1
  333. package/dist/cli/workspace/add.d.ts +3 -0
  334. package/dist/cli/workspace/add.d.ts.map +1 -0
  335. package/dist/cli/workspace/add.js +38 -0
  336. package/dist/cli/workspace/add.js.map +1 -0
  337. package/dist/cli/workspace/index.d.ts +3 -0
  338. package/dist/cli/workspace/index.d.ts.map +1 -0
  339. package/dist/cli/workspace/index.js +16 -0
  340. package/dist/cli/workspace/index.js.map +1 -0
  341. package/dist/cli/workspace/info.d.ts +3 -0
  342. package/dist/cli/workspace/info.d.ts.map +1 -0
  343. package/dist/cli/workspace/info.js +69 -0
  344. package/dist/cli/workspace/info.js.map +1 -0
  345. package/dist/cli/workspace/list.d.ts +3 -0
  346. package/dist/cli/workspace/list.d.ts.map +1 -0
  347. package/dist/cli/workspace/list.js +36 -0
  348. package/dist/cli/workspace/list.js.map +1 -0
  349. package/dist/cli/workspace/remove.d.ts +3 -0
  350. package/dist/cli/workspace/remove.d.ts.map +1 -0
  351. package/dist/cli/workspace/remove.js +43 -0
  352. package/dist/cli/workspace/remove.js.map +1 -0
  353. package/dist/cli/workspace/shared.d.ts +7 -0
  354. package/dist/cli/workspace/shared.d.ts.map +1 -0
  355. package/dist/cli/workspace/shared.js +17 -0
  356. package/dist/cli/workspace/shared.js.map +1 -0
  357. package/dist/cli/workspace/use.d.ts +3 -0
  358. package/dist/cli/workspace/use.d.ts.map +1 -0
  359. package/dist/cli/workspace/use.js +27 -0
  360. package/dist/cli/workspace/use.js.map +1 -0
  361. package/dist/code-intel/chunker.d.ts +15 -0
  362. package/dist/code-intel/chunker.d.ts.map +1 -0
  363. package/dist/code-intel/chunker.js +39 -0
  364. package/dist/code-intel/chunker.js.map +1 -0
  365. package/dist/code-intel/file-discovery.d.ts +19 -0
  366. package/dist/code-intel/file-discovery.d.ts.map +1 -0
  367. package/dist/code-intel/file-discovery.js +80 -0
  368. package/dist/code-intel/file-discovery.js.map +1 -0
  369. package/dist/code-intel/hash.d.ts +2 -0
  370. package/dist/code-intel/hash.d.ts.map +1 -0
  371. package/dist/code-intel/hash.js +5 -0
  372. package/dist/code-intel/hash.js.map +1 -0
  373. package/dist/code-intel/index.d.ts +17 -0
  374. package/dist/code-intel/index.d.ts.map +1 -0
  375. package/dist/code-intel/index.js +11 -0
  376. package/dist/code-intel/index.js.map +1 -0
  377. package/dist/code-intel/indexer.d.ts +43 -0
  378. package/dist/code-intel/indexer.d.ts.map +1 -0
  379. package/dist/code-intel/indexer.js +234 -0
  380. package/dist/code-intel/indexer.js.map +1 -0
  381. package/dist/code-intel/job-lock.d.ts +7 -0
  382. package/dist/code-intel/job-lock.d.ts.map +1 -0
  383. package/dist/code-intel/job-lock.js +18 -0
  384. package/dist/code-intel/job-lock.js.map +1 -0
  385. package/dist/code-intel/layer-detector.d.ts +9 -0
  386. package/dist/code-intel/layer-detector.d.ts.map +1 -0
  387. package/dist/code-intel/layer-detector.js +31 -0
  388. package/dist/code-intel/layer-detector.js.map +1 -0
  389. package/dist/code-intel/lsp-resolver.d.ts +24 -0
  390. package/dist/code-intel/lsp-resolver.d.ts.map +1 -0
  391. package/dist/code-intel/lsp-resolver.js +125 -0
  392. package/dist/code-intel/lsp-resolver.js.map +1 -0
  393. package/dist/code-intel/ranker.d.ts +42 -0
  394. package/dist/code-intel/ranker.d.ts.map +1 -0
  395. package/dist/code-intel/ranker.js +123 -0
  396. package/dist/code-intel/ranker.js.map +1 -0
  397. package/dist/code-intel/resolver.d.ts +14 -0
  398. package/dist/code-intel/resolver.d.ts.map +1 -0
  399. package/dist/code-intel/resolver.js +59 -0
  400. package/dist/code-intel/resolver.js.map +1 -0
  401. package/dist/code-intel/tsconfig-paths.d.ts +11 -0
  402. package/dist/code-intel/tsconfig-paths.d.ts.map +1 -0
  403. package/dist/code-intel/tsconfig-paths.js +67 -0
  404. package/dist/code-intel/tsconfig-paths.js.map +1 -0
  405. package/dist/code-intel/watcher.d.ts +27 -0
  406. package/dist/code-intel/watcher.d.ts.map +1 -0
  407. package/dist/code-intel/watcher.js +93 -0
  408. package/dist/code-intel/watcher.js.map +1 -0
  409. package/dist/core/board/board-column.value-object.js +1 -1
  410. package/dist/core/board/board-column.value-object.js.map +1 -1
  411. package/dist/core/board/pipeline.value-object.js +1 -1
  412. package/dist/core/board/pipeline.value-object.js.map +1 -1
  413. package/dist/core/board/skill-execution.entity.js +1 -1
  414. package/dist/core/board/skill-execution.entity.js.map +1 -1
  415. package/dist/core/board/task-title.value-object.js +1 -1
  416. package/dist/core/board/task-title.value-object.js.map +1 -1
  417. package/dist/core/ports/chat-llm.d.ts +36 -0
  418. package/dist/core/ports/chat-llm.d.ts.map +1 -0
  419. package/dist/core/ports/chat-llm.js +2 -0
  420. package/dist/core/ports/chat-llm.js.map +1 -0
  421. package/dist/core/ports/code-embedding.d.ts +42 -0
  422. package/dist/core/ports/code-embedding.d.ts.map +1 -0
  423. package/dist/core/ports/code-embedding.js +2 -0
  424. package/dist/core/ports/code-embedding.js.map +1 -0
  425. package/dist/core/ports/code-graph.d.ts +56 -0
  426. package/dist/core/ports/code-graph.d.ts.map +1 -0
  427. package/dist/core/ports/code-graph.js +2 -0
  428. package/dist/core/ports/code-graph.js.map +1 -0
  429. package/dist/core/ports/code-meta.d.ts +37 -0
  430. package/dist/core/ports/code-meta.d.ts.map +1 -0
  431. package/dist/core/ports/code-meta.js +2 -0
  432. package/dist/core/ports/code-meta.js.map +1 -0
  433. package/dist/core/ports/code-parser.d.ts +13 -0
  434. package/dist/core/ports/code-parser.d.ts.map +1 -0
  435. package/dist/core/ports/code-parser.js +2 -0
  436. package/dist/core/ports/code-parser.js.map +1 -0
  437. package/dist/core/ports/code-vector-store.d.ts +42 -0
  438. package/dist/core/ports/code-vector-store.d.ts.map +1 -0
  439. package/dist/core/ports/code-vector-store.js +2 -0
  440. package/dist/core/ports/code-vector-store.js.map +1 -0
  441. package/dist/core/ports/docker-control.d.ts +44 -0
  442. package/dist/core/ports/docker-control.d.ts.map +1 -0
  443. package/dist/core/ports/docker-control.js +8 -0
  444. package/dist/core/ports/docker-control.js.map +1 -0
  445. package/dist/core/ports/hub-readiness-probe.d.ts +22 -0
  446. package/dist/core/ports/hub-readiness-probe.d.ts.map +1 -0
  447. package/dist/core/ports/hub-readiness-probe.js +2 -0
  448. package/dist/core/ports/hub-readiness-probe.js.map +1 -0
  449. package/dist/core/ports/index.d.ts +10 -0
  450. package/dist/core/ports/index.d.ts.map +1 -1
  451. package/dist/core/ports/lsp-client.d.ts +22 -0
  452. package/dist/core/ports/lsp-client.d.ts.map +1 -0
  453. package/dist/core/ports/lsp-client.js +2 -0
  454. package/dist/core/ports/lsp-client.js.map +1 -0
  455. package/dist/core/ports/ollama-control.d.ts +61 -0
  456. package/dist/core/ports/ollama-control.d.ts.map +1 -0
  457. package/dist/core/ports/ollama-control.js +7 -0
  458. package/dist/core/ports/ollama-control.js.map +1 -0
  459. package/dist/core/ports/platform-probe.d.ts +47 -0
  460. package/dist/core/ports/platform-probe.d.ts.map +1 -0
  461. package/dist/core/ports/platform-probe.js +8 -0
  462. package/dist/core/ports/platform-probe.js.map +1 -0
  463. package/dist/core/ports/storage.d.ts +62 -29
  464. package/dist/core/ports/storage.d.ts.map +1 -1
  465. package/dist/core/ports/workspace-store.d.ts +52 -0
  466. package/dist/core/ports/workspace-store.d.ts.map +1 -0
  467. package/dist/core/ports/workspace-store.js +2 -0
  468. package/dist/core/ports/workspace-store.js.map +1 -0
  469. package/dist/core/types/code.d.ts +153 -0
  470. package/dist/core/types/code.d.ts.map +1 -0
  471. package/dist/core/types/code.js +2 -0
  472. package/dist/core/types/code.js.map +1 -0
  473. package/dist/core/types/config.d.ts +1 -1
  474. package/dist/core/types/config.d.ts.map +1 -1
  475. package/dist/core/types/config.js +8 -1
  476. package/dist/core/types/config.js.map +1 -1
  477. package/dist/core/types/index.d.ts +3 -0
  478. package/dist/core/types/index.d.ts.map +1 -1
  479. package/dist/core/types/init.d.ts +29 -0
  480. package/dist/core/types/init.d.ts.map +1 -0
  481. package/dist/core/types/init.js +2 -0
  482. package/dist/core/types/init.js.map +1 -0
  483. package/dist/core/types/workspace.d.ts +78 -0
  484. package/dist/core/types/workspace.d.ts.map +1 -0
  485. package/dist/core/types/workspace.js +2 -0
  486. package/dist/core/types/workspace.js.map +1 -0
  487. package/dist/mcp/helpers.d.ts +131 -19
  488. package/dist/mcp/helpers.d.ts.map +1 -1
  489. package/dist/mcp/helpers.js +271 -141
  490. package/dist/mcp/helpers.js.map +1 -1
  491. package/dist/mcp/server.d.ts.map +1 -1
  492. package/dist/mcp/server.js +49 -5
  493. package/dist/mcp/server.js.map +1 -1
  494. package/dist/mcp/tools/code-graph.d.ts +3 -0
  495. package/dist/mcp/tools/code-graph.d.ts.map +1 -0
  496. package/dist/mcp/tools/code-graph.js +330 -0
  497. package/dist/mcp/tools/code-graph.js.map +1 -0
  498. package/dist/mcp/tools/code-hybrid.d.ts +3 -0
  499. package/dist/mcp/tools/code-hybrid.d.ts.map +1 -0
  500. package/dist/mcp/tools/code-hybrid.js +142 -0
  501. package/dist/mcp/tools/code-hybrid.js.map +1 -0
  502. package/dist/mcp/tools/code-search.d.ts +3 -0
  503. package/dist/mcp/tools/code-search.d.ts.map +1 -0
  504. package/dist/mcp/tools/code-search.js +95 -0
  505. package/dist/mcp/tools/code-search.js.map +1 -0
  506. package/dist/mcp/tools/database.d.ts.map +1 -1
  507. package/dist/mcp/tools/database.js +86 -97
  508. package/dist/mcp/tools/database.js.map +1 -1
  509. package/dist/mcp/tools/estimate.d.ts.map +1 -1
  510. package/dist/mcp/tools/estimate.js +106 -82
  511. package/dist/mcp/tools/estimate.js.map +1 -1
  512. package/dist/mcp/tools/graph.d.ts.map +1 -1
  513. package/dist/mcp/tools/graph.js +142 -157
  514. package/dist/mcp/tools/graph.js.map +1 -1
  515. package/dist/mcp/tools/issue.d.ts.map +1 -1
  516. package/dist/mcp/tools/issue.js +172 -172
  517. package/dist/mcp/tools/issue.js.map +1 -1
  518. package/dist/mcp/tools/push.d.ts.map +1 -1
  519. package/dist/mcp/tools/push.js +70 -100
  520. package/dist/mcp/tools/push.js.map +1 -1
  521. package/dist/mcp/tools/query.d.ts.map +1 -1
  522. package/dist/mcp/tools/query.js +187 -246
  523. package/dist/mcp/tools/query.js.map +1 -1
  524. package/dist/mcp/tools/search.d.ts.map +1 -1
  525. package/dist/mcp/tools/search.js +25 -22
  526. package/dist/mcp/tools/search.js.map +1 -1
  527. package/dist/mcp/tools/workspace.d.ts.map +1 -1
  528. package/dist/mcp/tools/workspace.js +120 -73
  529. package/dist/mcp/tools/workspace.js.map +1 -1
  530. package/dist/use-cases/build-graph.d.ts +1 -1
  531. package/dist/use-cases/build-graph.d.ts.map +1 -1
  532. package/dist/use-cases/build-graph.js +63 -50
  533. package/dist/use-cases/build-graph.js.map +1 -1
  534. package/dist/use-cases/code-search.d.ts +60 -0
  535. package/dist/use-cases/code-search.d.ts.map +1 -0
  536. package/dist/use-cases/code-search.js +163 -0
  537. package/dist/use-cases/code-search.js.map +1 -0
  538. package/dist/use-cases/embed.d.ts +1 -1
  539. package/dist/use-cases/embed.d.ts.map +1 -1
  540. package/dist/use-cases/embed.js +5 -5
  541. package/dist/use-cases/embed.js.map +1 -1
  542. package/dist/use-cases/index-code.d.ts +24 -0
  543. package/dist/use-cases/index-code.d.ts.map +1 -0
  544. package/dist/use-cases/index-code.js +43 -0
  545. package/dist/use-cases/index-code.js.map +1 -0
  546. package/dist/use-cases/init/bootstrap-hub.d.ts +55 -0
  547. package/dist/use-cases/init/bootstrap-hub.d.ts.map +1 -0
  548. package/dist/use-cases/init/bootstrap-hub.js +116 -0
  549. package/dist/use-cases/init/bootstrap-hub.js.map +1 -0
  550. package/dist/use-cases/init/check-dims-conflict.d.ts +33 -0
  551. package/dist/use-cases/init/check-dims-conflict.d.ts.map +1 -0
  552. package/dist/use-cases/init/check-dims-conflict.js +39 -0
  553. package/dist/use-cases/init/check-dims-conflict.js.map +1 -0
  554. package/dist/use-cases/init/check-hub-exists.d.ts +23 -0
  555. package/dist/use-cases/init/check-hub-exists.d.ts.map +1 -0
  556. package/dist/use-cases/init/check-hub-exists.js +39 -0
  557. package/dist/use-cases/init/check-hub-exists.js.map +1 -0
  558. package/dist/use-cases/init/check-ports.d.ts +18 -0
  559. package/dist/use-cases/init/check-ports.d.ts.map +1 -0
  560. package/dist/use-cases/init/check-ports.js +25 -0
  561. package/dist/use-cases/init/check-ports.js.map +1 -0
  562. package/dist/use-cases/init/check-versions.d.ts +37 -0
  563. package/dist/use-cases/init/check-versions.d.ts.map +1 -0
  564. package/dist/use-cases/init/check-versions.js +50 -0
  565. package/dist/use-cases/init/check-versions.js.map +1 -0
  566. package/dist/use-cases/init/clear-stale-active.d.ts +20 -0
  567. package/dist/use-cases/init/clear-stale-active.d.ts.map +1 -0
  568. package/dist/use-cases/init/clear-stale-active.js +26 -0
  569. package/dist/use-cases/init/clear-stale-active.js.map +1 -0
  570. package/dist/use-cases/init/ensure-embedding-model.d.ts +20 -0
  571. package/dist/use-cases/init/ensure-embedding-model.d.ts.map +1 -0
  572. package/dist/use-cases/init/ensure-embedding-model.js +24 -0
  573. package/dist/use-cases/init/ensure-embedding-model.js.map +1 -0
  574. package/dist/use-cases/init/ensure-ollama-running.d.ts +19 -0
  575. package/dist/use-cases/init/ensure-ollama-running.d.ts.map +1 -0
  576. package/dist/use-cases/init/ensure-ollama-running.js +24 -0
  577. package/dist/use-cases/init/ensure-ollama-running.js.map +1 -0
  578. package/dist/use-cases/init/health-check-existing-llm.d.ts +25 -0
  579. package/dist/use-cases/init/health-check-existing-llm.d.ts.map +1 -0
  580. package/dist/use-cases/init/health-check-existing-llm.js +42 -0
  581. package/dist/use-cases/init/health-check-existing-llm.js.map +1 -0
  582. package/dist/use-cases/init/install-ollama.d.ts +27 -0
  583. package/dist/use-cases/init/install-ollama.d.ts.map +1 -0
  584. package/dist/use-cases/init/install-ollama.js +51 -0
  585. package/dist/use-cases/init/install-ollama.js.map +1 -0
  586. package/dist/use-cases/init/probe-llm.d.ts +32 -0
  587. package/dist/use-cases/init/probe-llm.d.ts.map +1 -0
  588. package/dist/use-cases/init/probe-llm.js +42 -0
  589. package/dist/use-cases/init/probe-llm.js.map +1 -0
  590. package/dist/use-cases/init/resolve-hub-ports.d.ts +46 -0
  591. package/dist/use-cases/init/resolve-hub-ports.d.ts.map +1 -0
  592. package/dist/use-cases/init/resolve-hub-ports.js +77 -0
  593. package/dist/use-cases/init/resolve-hub-ports.js.map +1 -0
  594. package/dist/use-cases/init/validate-workspace-name.d.ts +26 -0
  595. package/dist/use-cases/init/validate-workspace-name.d.ts.map +1 -0
  596. package/dist/use-cases/init/validate-workspace-name.js +39 -0
  597. package/dist/use-cases/init/validate-workspace-name.js.map +1 -0
  598. package/dist/use-cases/init/wait-for-docker.d.ts +16 -0
  599. package/dist/use-cases/init/wait-for-docker.d.ts.map +1 -0
  600. package/dist/use-cases/init/wait-for-docker.js +16 -0
  601. package/dist/use-cases/init/wait-for-docker.js.map +1 -0
  602. package/dist/use-cases/init/write-config-env.d.ts +32 -0
  603. package/dist/use-cases/init/write-config-env.d.ts.map +1 -0
  604. package/dist/use-cases/init/write-config-env.js +118 -0
  605. package/dist/use-cases/init/write-config-env.js.map +1 -0
  606. package/dist/use-cases/move-task.js +2 -2
  607. package/dist/use-cases/move-task.js.map +1 -1
  608. package/dist/use-cases/pull-db.d.ts +1 -1
  609. package/dist/use-cases/pull-db.d.ts.map +1 -1
  610. package/dist/use-cases/pull-db.js +3 -3
  611. package/dist/use-cases/pull-db.js.map +1 -1
  612. package/dist/use-cases/pull-git.d.ts +1 -1
  613. package/dist/use-cases/pull-git.d.ts.map +1 -1
  614. package/dist/use-cases/pull-git.js +5 -5
  615. package/dist/use-cases/pull-git.js.map +1 -1
  616. package/dist/use-cases/pull-github.d.ts +1 -1
  617. package/dist/use-cases/pull-github.d.ts.map +1 -1
  618. package/dist/use-cases/pull-github.js +6 -6
  619. package/dist/use-cases/pull-github.js.map +1 -1
  620. package/dist/use-cases/pull.d.ts +1 -1
  621. package/dist/use-cases/pull.d.ts.map +1 -1
  622. package/dist/use-cases/pull.js +6 -6
  623. package/dist/use-cases/pull.js.map +1 -1
  624. package/dist/use-cases/push.d.ts +2 -2
  625. package/dist/use-cases/push.d.ts.map +1 -1
  626. package/dist/use-cases/push.js +8 -8
  627. package/dist/use-cases/push.js.map +1 -1
  628. package/dist/use-cases/register-code-project.d.ts +29 -0
  629. package/dist/use-cases/register-code-project.d.ts.map +1 -0
  630. package/dist/use-cases/register-code-project.js +27 -0
  631. package/dist/use-cases/register-code-project.js.map +1 -0
  632. package/dist/use-cases/unregister-code-project.d.ts +11 -0
  633. package/dist/use-cases/unregister-code-project.d.ts.map +1 -0
  634. package/dist/use-cases/unregister-code-project.js +19 -0
  635. package/dist/use-cases/unregister-code-project.js.map +1 -0
  636. package/dist/use-cases/watch-code.d.ts +33 -0
  637. package/dist/use-cases/watch-code.d.ts.map +1 -0
  638. package/dist/use-cases/watch-code.js +52 -0
  639. package/dist/use-cases/watch-code.js.map +1 -0
  640. package/dist/workspace/active-workspace.d.ts +26 -0
  641. package/dist/workspace/active-workspace.d.ts.map +1 -0
  642. package/dist/workspace/active-workspace.js +69 -0
  643. package/dist/workspace/active-workspace.js.map +1 -0
  644. package/dist/workspace/adf.d.ts.map +1 -1
  645. package/dist/workspace/adf.js +20 -19
  646. package/dist/workspace/adf.js.map +1 -1
  647. package/dist/workspace/config.d.ts +11 -0
  648. package/dist/workspace/config.d.ts.map +1 -1
  649. package/dist/workspace/config.js +76 -22
  650. package/dist/workspace/config.js.map +1 -1
  651. package/dist/workspace/hub-config.d.ts +74 -0
  652. package/dist/workspace/hub-config.d.ts.map +1 -0
  653. package/dist/workspace/hub-config.js +164 -0
  654. package/dist/workspace/hub-config.js.map +1 -0
  655. package/dist/workspace/registry.d.ts +23 -3
  656. package/dist/workspace/registry.d.ts.map +1 -1
  657. package/dist/workspace/registry.js +32 -14
  658. package/dist/workspace/registry.js.map +1 -1
  659. package/dist/workspace/resolver.d.ts +20 -18
  660. package/dist/workspace/resolver.d.ts.map +1 -1
  661. package/dist/workspace/resolver.js +100 -59
  662. package/dist/workspace/resolver.js.map +1 -1
  663. package/package.json +13 -4
  664. package/templates/code-docker-compose.yml +51 -0
  665. package/templates/env.example +16 -0
  666. package/templates/hub-config.env +65 -0
  667. package/templates/hub-docker-compose.yml +88 -0
  668. package/templates/migrate-to-hub.sql +90 -0
  669. package/dist/cli/workspaces.d.ts +0 -3
  670. package/dist/cli/workspaces.d.ts.map +0 -1
  671. package/dist/cli/workspaces.js +0 -34
  672. package/dist/cli/workspaces.js.map +0 -1
@@ -1,12 +1,34 @@
1
1
  /**
2
- * Ensure all tables exist. Idempotent safe to call every time.
2
+ * Ensure all tables exist in the Argustack hub Postgres.
3
+ *
4
+ * Hub model: one Postgres database hosts data for many tenants
5
+ * (workspaces). Every data table carries a `workspace_id TEXT NOT NULL
6
+ * REFERENCES workspaces(id) ON DELETE CASCADE` column. Composite UNIQUE
7
+ * and PRIMARY KEY constraints always include `workspace_id` first.
8
+ *
9
+ * Idempotent: safe to call on every CLI/MCP invocation. Re-running on a
10
+ * populated database is a no-op. Migration from legacy per-workspace
11
+ * databases is handled by `argustack migrate-to-hub` (H7) using a
12
+ * separate raw-pg reader.
3
13
  */
4
14
  export async function ensureSchema(pool) {
5
15
  await pool.query(`CREATE EXTENSION IF NOT EXISTS vector`);
6
16
  await pool.query(`
17
+ CREATE TABLE IF NOT EXISTS workspaces (
18
+ id TEXT PRIMARY KEY,
19
+ name TEXT NOT NULL UNIQUE,
20
+ display_name TEXT,
21
+ settings JSONB NOT NULL DEFAULT '{}',
22
+ created_at TIMESTAMPTZ DEFAULT NOW(),
23
+ last_active_at TIMESTAMPTZ DEFAULT NOW()
24
+ )
25
+ `);
26
+ await pool.query(`CREATE INDEX IF NOT EXISTS idx_workspaces_active ON workspaces (last_active_at DESC)`);
27
+ await pool.query(`
7
28
  CREATE TABLE IF NOT EXISTS issues (
8
29
  id SERIAL PRIMARY KEY,
9
- issue_key TEXT UNIQUE NOT NULL,
30
+ workspace_id TEXT NOT NULL REFERENCES workspaces(id) ON DELETE CASCADE,
31
+ issue_key TEXT NOT NULL,
10
32
  issue_id TEXT,
11
33
  project_key TEXT,
12
34
  summary TEXT NOT NULL,
@@ -38,56 +60,17 @@ export async function ensureSchema(pool) {
38
60
  embedding vector(1536),
39
61
  search_vector tsvector,
40
62
  source VARCHAR(10) DEFAULT 'jira',
41
- pulled_at TIMESTAMP DEFAULT NOW()
42
- )
43
- `);
44
- await pool.query(`ALTER TABLE issues ADD COLUMN IF NOT EXISTS source VARCHAR(10) DEFAULT 'jira'`);
45
- await pool.query(`ALTER TABLE issues ADD COLUMN IF NOT EXISTS locally_modified BOOLEAN DEFAULT FALSE`);
46
- await pool.query(`ALTER TABLE issues ADD COLUMN IF NOT EXISTS modified_at TIMESTAMP`);
47
- await pool.query(`ALTER TABLE issues ADD COLUMN IF NOT EXISTS modified_fields TEXT[]`);
48
- await pool.query(`CREATE INDEX IF NOT EXISTS idx_issues_locally_modified ON issues (locally_modified) WHERE locally_modified = true`);
49
- await pool.query(`
50
- CREATE TABLE IF NOT EXISTS graph_entities (
51
- id SERIAL PRIMARY KEY,
52
- name TEXT NOT NULL,
53
- type VARCHAR(50) NOT NULL,
54
- properties JSONB DEFAULT '{}',
55
- created_at TIMESTAMP DEFAULT NOW(),
56
- UNIQUE(name, type)
57
- )
58
- `);
59
- await pool.query(`
60
- CREATE TABLE IF NOT EXISTS graph_relationships (
61
- id SERIAL PRIMARY KEY,
62
- source_id INTEGER REFERENCES graph_entities(id) ON DELETE CASCADE,
63
- target_id INTEGER REFERENCES graph_entities(id) ON DELETE CASCADE,
64
- type VARCHAR(50) NOT NULL,
65
- weight NUMERIC DEFAULT 1,
66
- source VARCHAR(20) DEFAULT 'structural',
67
- properties JSONB DEFAULT '{}',
68
- created_at TIMESTAMP DEFAULT NOW(),
69
- UNIQUE(source_id, target_id, type)
70
- )
71
- `);
72
- await pool.query(`
73
- CREATE TABLE IF NOT EXISTS graph_observations (
74
- id SERIAL PRIMARY KEY,
75
- entity_id INTEGER REFERENCES graph_entities(id) ON DELETE CASCADE,
76
- content TEXT NOT NULL,
77
- author VARCHAR(50) DEFAULT 'claude',
78
- created_at TIMESTAMP DEFAULT NOW()
63
+ locally_modified BOOLEAN DEFAULT FALSE,
64
+ modified_at TIMESTAMP,
65
+ modified_fields TEXT[],
66
+ pulled_at TIMESTAMP DEFAULT NOW(),
67
+ UNIQUE (workspace_id, issue_key)
79
68
  )
80
69
  `);
81
- await pool.query(`CREATE INDEX IF NOT EXISTS idx_graph_entities_name ON graph_entities (name)`);
82
- await pool.query(`CREATE INDEX IF NOT EXISTS idx_graph_entities_type ON graph_entities (type)`);
83
- await pool.query(`CREATE INDEX IF NOT EXISTS idx_graph_rel_source ON graph_relationships (source_id)`);
84
- await pool.query(`CREATE INDEX IF NOT EXISTS idx_graph_rel_target ON graph_relationships (target_id)`);
85
- await pool.query(`CREATE INDEX IF NOT EXISTS idx_graph_rel_type ON graph_relationships (type)`);
86
- await pool.query(`CREATE INDEX IF NOT EXISTS idx_graph_rel_origin ON graph_relationships (source)`);
87
- await pool.query(`CREATE INDEX IF NOT EXISTS idx_graph_obs_entity ON graph_observations (entity_id)`);
88
70
  await pool.query(`
89
71
  CREATE TABLE IF NOT EXISTS issue_comments (
90
72
  id SERIAL PRIMARY KEY,
73
+ workspace_id TEXT NOT NULL REFERENCES workspaces(id) ON DELETE CASCADE,
91
74
  issue_key TEXT NOT NULL,
92
75
  comment_id TEXT,
93
76
  author VARCHAR(100),
@@ -99,6 +82,7 @@ export async function ensureSchema(pool) {
99
82
  await pool.query(`
100
83
  CREATE TABLE IF NOT EXISTS issue_changelogs (
101
84
  id SERIAL PRIMARY KEY,
85
+ workspace_id TEXT NOT NULL REFERENCES workspaces(id) ON DELETE CASCADE,
102
86
  issue_key TEXT NOT NULL,
103
87
  author VARCHAR(100),
104
88
  field VARCHAR(100),
@@ -110,6 +94,7 @@ export async function ensureSchema(pool) {
110
94
  await pool.query(`
111
95
  CREATE TABLE IF NOT EXISTS issue_worklogs (
112
96
  id SERIAL PRIMARY KEY,
97
+ workspace_id TEXT NOT NULL REFERENCES workspaces(id) ON DELETE CASCADE,
113
98
  issue_key TEXT NOT NULL,
114
99
  author VARCHAR(100),
115
100
  time_spent TEXT,
@@ -121,6 +106,7 @@ export async function ensureSchema(pool) {
121
106
  await pool.query(`
122
107
  CREATE TABLE IF NOT EXISTS issue_links (
123
108
  id SERIAL PRIMARY KEY,
109
+ workspace_id TEXT NOT NULL REFERENCES workspaces(id) ON DELETE CASCADE,
124
110
  source_key TEXT NOT NULL,
125
111
  target_key TEXT NOT NULL,
126
112
  link_type VARCHAR(50),
@@ -129,7 +115,8 @@ export async function ensureSchema(pool) {
129
115
  `);
130
116
  await pool.query(`
131
117
  CREATE TABLE IF NOT EXISTS commits (
132
- hash VARCHAR(40) PRIMARY KEY,
118
+ workspace_id TEXT NOT NULL REFERENCES workspaces(id) ON DELETE CASCADE,
119
+ hash VARCHAR(40) NOT NULL,
133
120
  message TEXT,
134
121
  author VARCHAR(200),
135
122
  email VARCHAR(200),
@@ -137,28 +124,34 @@ export async function ensureSchema(pool) {
137
124
  parents TEXT[],
138
125
  repo_path TEXT,
139
126
  search_vector tsvector,
140
- pulled_at TIMESTAMP DEFAULT NOW()
127
+ pulled_at TIMESTAMP DEFAULT NOW(),
128
+ PRIMARY KEY (workspace_id, hash)
141
129
  )
142
130
  `);
143
131
  await pool.query(`
144
132
  CREATE TABLE IF NOT EXISTS commit_files (
145
133
  id SERIAL PRIMARY KEY,
146
- commit_hash VARCHAR(40) NOT NULL REFERENCES commits(hash),
134
+ workspace_id TEXT NOT NULL,
135
+ commit_hash VARCHAR(40) NOT NULL,
147
136
  file_path TEXT NOT NULL,
148
137
  status TEXT,
149
138
  additions INTEGER DEFAULT 0,
150
- deletions INTEGER DEFAULT 0
139
+ deletions INTEGER DEFAULT 0,
140
+ FOREIGN KEY (workspace_id, commit_hash) REFERENCES commits(workspace_id, hash) ON DELETE CASCADE
151
141
  )
152
142
  `);
153
143
  await pool.query(`
154
144
  CREATE TABLE IF NOT EXISTS commit_issue_refs (
155
- commit_hash VARCHAR(40) NOT NULL REFERENCES commits(hash),
145
+ workspace_id TEXT NOT NULL,
146
+ commit_hash VARCHAR(40) NOT NULL,
156
147
  issue_key TEXT NOT NULL,
157
- PRIMARY KEY (commit_hash, issue_key)
148
+ PRIMARY KEY (workspace_id, commit_hash, issue_key),
149
+ FOREIGN KEY (workspace_id, commit_hash) REFERENCES commits(workspace_id, hash) ON DELETE CASCADE
158
150
  )
159
151
  `);
160
152
  await pool.query(`
161
153
  CREATE TABLE IF NOT EXISTS pull_requests (
154
+ workspace_id TEXT NOT NULL REFERENCES workspaces(id) ON DELETE CASCADE,
162
155
  number INTEGER NOT NULL,
163
156
  repo_full_name VARCHAR(200) NOT NULL,
164
157
  title TEXT,
@@ -180,24 +173,28 @@ export async function ensureSchema(pool) {
180
173
  raw_json JSONB,
181
174
  search_vector tsvector,
182
175
  pulled_at TIMESTAMP DEFAULT NOW(),
183
- PRIMARY KEY (repo_full_name, number)
176
+ PRIMARY KEY (workspace_id, repo_full_name, number)
184
177
  )
185
178
  `);
186
179
  await pool.query(`
187
180
  CREATE TABLE IF NOT EXISTS pr_reviews (
188
181
  id SERIAL PRIMARY KEY,
182
+ workspace_id TEXT NOT NULL,
189
183
  pr_number INTEGER NOT NULL,
190
184
  repo_full_name VARCHAR(200) NOT NULL,
191
185
  review_id INTEGER NOT NULL,
192
186
  reviewer VARCHAR(200),
193
187
  state VARCHAR(30),
194
188
  body TEXT,
195
- submitted_at TIMESTAMPTZ
189
+ submitted_at TIMESTAMPTZ,
190
+ FOREIGN KEY (workspace_id, repo_full_name, pr_number)
191
+ REFERENCES pull_requests(workspace_id, repo_full_name, number) ON DELETE CASCADE
196
192
  )
197
193
  `);
198
194
  await pool.query(`
199
195
  CREATE TABLE IF NOT EXISTS pr_comments (
200
196
  id SERIAL PRIMARY KEY,
197
+ workspace_id TEXT NOT NULL,
201
198
  pr_number INTEGER NOT NULL,
202
199
  repo_full_name VARCHAR(200) NOT NULL,
203
200
  comment_id BIGINT NOT NULL,
@@ -206,30 +203,39 @@ export async function ensureSchema(pool) {
206
203
  path TEXT,
207
204
  line INTEGER,
208
205
  created_at TIMESTAMPTZ,
209
- updated_at TIMESTAMPTZ
206
+ updated_at TIMESTAMPTZ,
207
+ FOREIGN KEY (workspace_id, repo_full_name, pr_number)
208
+ REFERENCES pull_requests(workspace_id, repo_full_name, number) ON DELETE CASCADE
210
209
  )
211
210
  `);
212
211
  await pool.query(`
213
212
  CREATE TABLE IF NOT EXISTS pr_files (
214
213
  id SERIAL PRIMARY KEY,
214
+ workspace_id TEXT NOT NULL,
215
215
  pr_number INTEGER NOT NULL,
216
216
  repo_full_name VARCHAR(200) NOT NULL,
217
217
  file_path TEXT NOT NULL,
218
218
  status TEXT,
219
219
  additions INTEGER DEFAULT 0,
220
- deletions INTEGER DEFAULT 0
220
+ deletions INTEGER DEFAULT 0,
221
+ FOREIGN KEY (workspace_id, repo_full_name, pr_number)
222
+ REFERENCES pull_requests(workspace_id, repo_full_name, number) ON DELETE CASCADE
221
223
  )
222
224
  `);
223
225
  await pool.query(`
224
226
  CREATE TABLE IF NOT EXISTS pr_issue_refs (
227
+ workspace_id TEXT NOT NULL,
225
228
  pr_number INTEGER NOT NULL,
226
229
  repo_full_name VARCHAR(200) NOT NULL,
227
230
  issue_key TEXT NOT NULL,
228
- PRIMARY KEY (repo_full_name, pr_number, issue_key)
231
+ PRIMARY KEY (workspace_id, repo_full_name, pr_number, issue_key),
232
+ FOREIGN KEY (workspace_id, repo_full_name, pr_number)
233
+ REFERENCES pull_requests(workspace_id, repo_full_name, number) ON DELETE CASCADE
229
234
  )
230
235
  `);
231
236
  await pool.query(`
232
237
  CREATE TABLE IF NOT EXISTS releases (
238
+ workspace_id TEXT NOT NULL REFERENCES workspaces(id) ON DELETE CASCADE,
233
239
  id INTEGER NOT NULL,
234
240
  repo_full_name VARCHAR(200) NOT NULL,
235
241
  tag_name VARCHAR(200),
@@ -243,33 +249,61 @@ export async function ensureSchema(pool) {
243
249
  raw_json JSONB,
244
250
  search_vector tsvector,
245
251
  pulled_at TIMESTAMP DEFAULT NOW(),
246
- PRIMARY KEY (repo_full_name, id)
252
+ PRIMARY KEY (workspace_id, repo_full_name, id)
253
+ )
254
+ `);
255
+ await pool.query(`
256
+ CREATE TABLE IF NOT EXISTS graph_entities (
257
+ id SERIAL PRIMARY KEY,
258
+ workspace_id TEXT NOT NULL REFERENCES workspaces(id) ON DELETE CASCADE,
259
+ name TEXT NOT NULL,
260
+ type VARCHAR(50) NOT NULL,
261
+ properties JSONB DEFAULT '{}',
262
+ created_at TIMESTAMP DEFAULT NOW(),
263
+ UNIQUE (workspace_id, name, type)
264
+ )
265
+ `);
266
+ await pool.query(`
267
+ CREATE TABLE IF NOT EXISTS graph_relationships (
268
+ id SERIAL PRIMARY KEY,
269
+ workspace_id TEXT NOT NULL REFERENCES workspaces(id) ON DELETE CASCADE,
270
+ source_id INTEGER REFERENCES graph_entities(id) ON DELETE CASCADE,
271
+ target_id INTEGER REFERENCES graph_entities(id) ON DELETE CASCADE,
272
+ type VARCHAR(50) NOT NULL,
273
+ weight NUMERIC DEFAULT 1,
274
+ source VARCHAR(20) DEFAULT 'structural',
275
+ properties JSONB DEFAULT '{}',
276
+ created_at TIMESTAMP DEFAULT NOW(),
277
+ UNIQUE (workspace_id, source_id, target_id, type)
278
+ )
279
+ `);
280
+ await pool.query(`
281
+ CREATE TABLE IF NOT EXISTS graph_observations (
282
+ id SERIAL PRIMARY KEY,
283
+ workspace_id TEXT NOT NULL REFERENCES workspaces(id) ON DELETE CASCADE,
284
+ entity_id INTEGER REFERENCES graph_entities(id) ON DELETE CASCADE,
285
+ content TEXT NOT NULL,
286
+ author VARCHAR(50) DEFAULT 'claude',
287
+ created_at TIMESTAMP DEFAULT NOW()
247
288
  )
248
289
  `);
249
- await pool.query(`ALTER TABLE issues ADD COLUMN IF NOT EXISTS original_estimate INTEGER`);
250
- await pool.query(`ALTER TABLE issues ADD COLUMN IF NOT EXISTS remaining_estimate INTEGER`);
251
- await pool.query(`ALTER TABLE issues ADD COLUMN IF NOT EXISTS time_spent INTEGER`);
252
- await pool.query(`ALTER TABLE issues ADD COLUMN IF NOT EXISTS assignee_id TEXT`);
253
- await pool.query(`ALTER TABLE issues ADD COLUMN IF NOT EXISTS reporter_id TEXT`);
254
- await pool.query(`ALTER TABLE issues ADD COLUMN IF NOT EXISTS search_vector tsvector`);
255
- await pool.query(`ALTER TABLE commits ADD COLUMN IF NOT EXISTS search_vector tsvector`);
256
- await pool.query(`ALTER TABLE pull_requests ADD COLUMN IF NOT EXISTS search_vector tsvector`);
257
- await pool.query(`ALTER TABLE releases ADD COLUMN IF NOT EXISTS search_vector tsvector`);
258
290
  await pool.query(`
259
291
  CREATE TABLE IF NOT EXISTS db_tables (
260
292
  id SERIAL PRIMARY KEY,
293
+ workspace_id TEXT NOT NULL REFERENCES workspaces(id) ON DELETE CASCADE,
261
294
  source_name TEXT NOT NULL,
262
295
  table_schema TEXT,
263
296
  table_name TEXT NOT NULL,
264
297
  row_count BIGINT,
265
298
  size_bytes BIGINT,
266
299
  pulled_at TIMESTAMP DEFAULT NOW(),
267
- UNIQUE(source_name, table_schema, table_name)
300
+ UNIQUE (workspace_id, source_name, table_schema, table_name)
268
301
  )
269
302
  `);
270
303
  await pool.query(`
271
304
  CREATE TABLE IF NOT EXISTS db_columns (
272
305
  id SERIAL PRIMARY KEY,
306
+ workspace_id TEXT NOT NULL REFERENCES workspaces(id) ON DELETE CASCADE,
273
307
  source_name TEXT NOT NULL,
274
308
  table_schema TEXT,
275
309
  table_name TEXT NOT NULL,
@@ -279,75 +313,125 @@ export async function ensureSchema(pool) {
279
313
  default_value TEXT,
280
314
  is_primary_key BOOLEAN DEFAULT FALSE,
281
315
  ordinal_position INTEGER,
282
- UNIQUE(source_name, table_schema, table_name, column_name)
316
+ UNIQUE (workspace_id, source_name, table_schema, table_name, column_name)
283
317
  )
284
318
  `);
285
319
  await pool.query(`
286
320
  CREATE TABLE IF NOT EXISTS db_foreign_keys (
287
321
  id SERIAL PRIMARY KEY,
322
+ workspace_id TEXT NOT NULL REFERENCES workspaces(id) ON DELETE CASCADE,
288
323
  source_name TEXT NOT NULL,
289
324
  table_name TEXT NOT NULL,
290
325
  column_name TEXT NOT NULL,
291
326
  referenced_table TEXT NOT NULL,
292
327
  referenced_column TEXT NOT NULL,
293
- UNIQUE(source_name, table_name, column_name, referenced_table, referenced_column)
328
+ UNIQUE (workspace_id, source_name, table_name, column_name, referenced_table, referenced_column)
294
329
  )
295
330
  `);
296
331
  await pool.query(`
297
332
  CREATE TABLE IF NOT EXISTS db_indexes (
298
333
  id SERIAL PRIMARY KEY,
334
+ workspace_id TEXT NOT NULL REFERENCES workspaces(id) ON DELETE CASCADE,
299
335
  source_name TEXT NOT NULL,
300
336
  table_name TEXT NOT NULL,
301
337
  index_name TEXT NOT NULL,
302
338
  columns TEXT[],
303
339
  is_unique BOOLEAN DEFAULT FALSE,
304
340
  is_primary BOOLEAN DEFAULT FALSE,
305
- UNIQUE(source_name, table_name, index_name)
341
+ UNIQUE (workspace_id, source_name, table_name, index_name)
342
+ )
343
+ `);
344
+ await pool.query(`
345
+ CREATE TABLE IF NOT EXISTS code_projects (
346
+ id TEXT PRIMARY KEY,
347
+ workspace_id TEXT NOT NULL UNIQUE REFERENCES workspaces(id) ON DELETE CASCADE,
348
+ name TEXT NOT NULL,
349
+ root_path TEXT NOT NULL,
350
+ language TEXT NOT NULL,
351
+ layer_config JSONB,
352
+ excludes TEXT[],
353
+ created_at TIMESTAMPTZ DEFAULT NOW(),
354
+ last_indexed_at TIMESTAMPTZ,
355
+ CHECK (id = workspace_id)
356
+ )
357
+ `);
358
+ await pool.query(`CREATE UNIQUE INDEX IF NOT EXISTS idx_code_projects_root ON code_projects(root_path)`);
359
+ await pool.query(`
360
+ CREATE TABLE IF NOT EXISTS code_files (
361
+ project_id TEXT NOT NULL REFERENCES code_projects(id) ON DELETE CASCADE,
362
+ path TEXT NOT NULL,
363
+ hash TEXT NOT NULL,
364
+ git_sha TEXT,
365
+ indexed_at TIMESTAMPTZ DEFAULT NOW(),
366
+ PRIMARY KEY (project_id, path)
367
+ )
368
+ `);
369
+ await pool.query(`
370
+ CREATE TABLE IF NOT EXISTS code_index_jobs (
371
+ id BIGSERIAL PRIMARY KEY,
372
+ project_id TEXT NOT NULL REFERENCES code_projects(id) ON DELETE CASCADE,
373
+ type TEXT NOT NULL,
374
+ status TEXT NOT NULL,
375
+ started_at TIMESTAMPTZ DEFAULT NOW(),
376
+ completed_at TIMESTAMPTZ,
377
+ stats JSONB,
378
+ error TEXT
306
379
  )
307
380
  `);
308
381
  const indexes = [
309
- 'CREATE INDEX IF NOT EXISTS idx_issues_project ON issues(project_key)',
310
- 'CREATE INDEX IF NOT EXISTS idx_issues_status ON issues(status)',
311
- 'CREATE INDEX IF NOT EXISTS idx_issues_type ON issues(issue_type)',
312
- 'CREATE INDEX IF NOT EXISTS idx_issues_assignee ON issues(assignee)',
313
- 'CREATE INDEX IF NOT EXISTS idx_issues_created ON issues(created)',
314
- 'CREATE INDEX IF NOT EXISTS idx_issues_updated ON issues(updated)',
315
- 'CREATE INDEX IF NOT EXISTS idx_issues_source ON issues(source)',
382
+ 'CREATE INDEX IF NOT EXISTS idx_issues_ws ON issues (workspace_id, updated DESC)',
383
+ 'CREATE INDEX IF NOT EXISTS idx_issues_ws_project ON issues (workspace_id, project_key)',
384
+ 'CREATE INDEX IF NOT EXISTS idx_issues_ws_status ON issues (workspace_id, status)',
385
+ 'CREATE INDEX IF NOT EXISTS idx_issues_ws_type ON issues (workspace_id, issue_type)',
386
+ 'CREATE INDEX IF NOT EXISTS idx_issues_ws_assignee ON issues (workspace_id, assignee)',
387
+ 'CREATE INDEX IF NOT EXISTS idx_issues_ws_created ON issues (workspace_id, created)',
388
+ 'CREATE INDEX IF NOT EXISTS idx_issues_ws_source ON issues (workspace_id, source)',
389
+ `CREATE INDEX IF NOT EXISTS idx_issues_ws_modified ON issues (workspace_id, locally_modified) WHERE locally_modified = true`,
316
390
  'CREATE INDEX IF NOT EXISTS idx_issues_search ON issues USING GIN(search_vector)',
317
391
  'CREATE INDEX IF NOT EXISTS idx_issues_custom ON issues USING GIN(custom_fields)',
318
392
  'CREATE INDEX IF NOT EXISTS idx_issues_raw ON issues USING GIN(raw_json)',
319
- 'CREATE INDEX IF NOT EXISTS idx_comments_key ON issue_comments(issue_key)',
320
- 'CREATE INDEX IF NOT EXISTS idx_changelogs_key ON issue_changelogs(issue_key)',
321
- 'CREATE INDEX IF NOT EXISTS idx_worklogs_key ON issue_worklogs(issue_key)',
322
- 'CREATE INDEX IF NOT EXISTS idx_links_source ON issue_links(source_key)',
323
- 'CREATE INDEX IF NOT EXISTS idx_links_target ON issue_links(target_key)',
324
- 'CREATE INDEX IF NOT EXISTS idx_commits_author ON commits(author)',
325
- 'CREATE INDEX IF NOT EXISTS idx_commits_date ON commits(committed_at)',
326
- 'CREATE INDEX IF NOT EXISTS idx_commits_repo ON commits(repo_path)',
393
+ 'CREATE INDEX IF NOT EXISTS idx_comments_ws_key ON issue_comments (workspace_id, issue_key)',
394
+ 'CREATE INDEX IF NOT EXISTS idx_changelogs_ws_key ON issue_changelogs (workspace_id, issue_key)',
395
+ 'CREATE INDEX IF NOT EXISTS idx_worklogs_ws_key ON issue_worklogs (workspace_id, issue_key)',
396
+ 'CREATE INDEX IF NOT EXISTS idx_links_ws_source ON issue_links (workspace_id, source_key)',
397
+ 'CREATE INDEX IF NOT EXISTS idx_links_ws_target ON issue_links (workspace_id, target_key)',
398
+ 'CREATE INDEX IF NOT EXISTS idx_commits_ws_author ON commits (workspace_id, author)',
399
+ 'CREATE INDEX IF NOT EXISTS idx_commits_ws_date ON commits (workspace_id, committed_at DESC)',
400
+ 'CREATE INDEX IF NOT EXISTS idx_commits_ws_repo ON commits (workspace_id, repo_path)',
327
401
  'CREATE INDEX IF NOT EXISTS idx_commits_search ON commits USING GIN(search_vector)',
328
- 'CREATE INDEX IF NOT EXISTS idx_commit_files_hash ON commit_files(commit_hash)',
329
- 'CREATE INDEX IF NOT EXISTS idx_commit_files_path ON commit_files(file_path)',
330
- 'CREATE INDEX IF NOT EXISTS idx_commit_refs_issue ON commit_issue_refs(issue_key)',
331
- 'CREATE INDEX IF NOT EXISTS idx_prs_repo ON pull_requests(repo_full_name)',
332
- 'CREATE INDEX IF NOT EXISTS idx_prs_state ON pull_requests(state)',
333
- 'CREATE INDEX IF NOT EXISTS idx_prs_author ON pull_requests(author)',
334
- 'CREATE INDEX IF NOT EXISTS idx_prs_merged ON pull_requests(merged_at)',
335
- 'CREATE INDEX IF NOT EXISTS idx_prs_updated ON pull_requests(updated_at)',
336
- 'CREATE INDEX IF NOT EXISTS idx_prs_merge_sha ON pull_requests(merge_commit_sha)',
402
+ 'CREATE INDEX IF NOT EXISTS idx_commit_files_ws_hash ON commit_files (workspace_id, commit_hash)',
403
+ 'CREATE INDEX IF NOT EXISTS idx_commit_files_path ON commit_files (file_path)',
404
+ 'CREATE INDEX IF NOT EXISTS idx_commit_refs_ws_issue ON commit_issue_refs (workspace_id, issue_key)',
405
+ 'CREATE INDEX IF NOT EXISTS idx_prs_ws_repo ON pull_requests (workspace_id, repo_full_name)',
406
+ 'CREATE INDEX IF NOT EXISTS idx_prs_ws_state ON pull_requests (workspace_id, state)',
407
+ 'CREATE INDEX IF NOT EXISTS idx_prs_ws_author ON pull_requests (workspace_id, author)',
408
+ 'CREATE INDEX IF NOT EXISTS idx_prs_ws_merged ON pull_requests (workspace_id, merged_at)',
409
+ 'CREATE INDEX IF NOT EXISTS idx_prs_ws_updated ON pull_requests (workspace_id, updated_at)',
410
+ 'CREATE INDEX IF NOT EXISTS idx_prs_merge_sha ON pull_requests (merge_commit_sha)',
337
411
  'CREATE INDEX IF NOT EXISTS idx_prs_search ON pull_requests USING GIN(search_vector)',
338
- 'CREATE INDEX IF NOT EXISTS idx_pr_reviews_pr ON pr_reviews(repo_full_name, pr_number)',
339
- 'CREATE INDEX IF NOT EXISTS idx_pr_comments_pr ON pr_comments(repo_full_name, pr_number)',
340
- 'CREATE INDEX IF NOT EXISTS idx_pr_files_pr ON pr_files(repo_full_name, pr_number)',
341
- 'CREATE INDEX IF NOT EXISTS idx_pr_files_path ON pr_files(file_path)',
342
- 'CREATE INDEX IF NOT EXISTS idx_pr_refs_issue ON pr_issue_refs(issue_key)',
343
- 'CREATE INDEX IF NOT EXISTS idx_releases_repo ON releases(repo_full_name)',
344
- 'CREATE INDEX IF NOT EXISTS idx_releases_tag ON releases(tag_name)',
412
+ 'CREATE INDEX IF NOT EXISTS idx_pr_reviews_pr ON pr_reviews (workspace_id, repo_full_name, pr_number)',
413
+ 'CREATE INDEX IF NOT EXISTS idx_pr_comments_pr ON pr_comments (workspace_id, repo_full_name, pr_number)',
414
+ 'CREATE INDEX IF NOT EXISTS idx_pr_files_pr ON pr_files (workspace_id, repo_full_name, pr_number)',
415
+ 'CREATE INDEX IF NOT EXISTS idx_pr_files_path ON pr_files (file_path)',
416
+ 'CREATE INDEX IF NOT EXISTS idx_pr_refs_ws_issue ON pr_issue_refs (workspace_id, issue_key)',
417
+ 'CREATE INDEX IF NOT EXISTS idx_releases_ws_repo ON releases (workspace_id, repo_full_name)',
418
+ 'CREATE INDEX IF NOT EXISTS idx_releases_tag ON releases (tag_name)',
345
419
  'CREATE INDEX IF NOT EXISTS idx_releases_search ON releases USING GIN(search_vector)',
346
- 'CREATE INDEX IF NOT EXISTS idx_db_tables_source ON db_tables(source_name)',
347
- 'CREATE INDEX IF NOT EXISTS idx_db_columns_source ON db_columns(source_name)',
348
- 'CREATE INDEX IF NOT EXISTS idx_db_columns_table ON db_columns(source_name, table_name)',
349
- 'CREATE INDEX IF NOT EXISTS idx_db_fk_source ON db_foreign_keys(source_name)',
350
- 'CREATE INDEX IF NOT EXISTS idx_db_indexes_source ON db_indexes(source_name)',
420
+ 'CREATE INDEX IF NOT EXISTS idx_graph_entities_ws_name ON graph_entities (workspace_id, name)',
421
+ 'CREATE INDEX IF NOT EXISTS idx_graph_entities_ws_type ON graph_entities (workspace_id, type)',
422
+ 'CREATE INDEX IF NOT EXISTS idx_graph_rel_ws_source ON graph_relationships (workspace_id, source_id)',
423
+ 'CREATE INDEX IF NOT EXISTS idx_graph_rel_ws_target ON graph_relationships (workspace_id, target_id)',
424
+ 'CREATE INDEX IF NOT EXISTS idx_graph_rel_ws_type ON graph_relationships (workspace_id, type)',
425
+ 'CREATE INDEX IF NOT EXISTS idx_graph_rel_origin ON graph_relationships (source)',
426
+ 'CREATE INDEX IF NOT EXISTS idx_graph_obs_ws_entity ON graph_observations (workspace_id, entity_id)',
427
+ 'CREATE INDEX IF NOT EXISTS idx_db_tables_ws_source ON db_tables (workspace_id, source_name)',
428
+ 'CREATE INDEX IF NOT EXISTS idx_db_columns_ws_source ON db_columns (workspace_id, source_name)',
429
+ 'CREATE INDEX IF NOT EXISTS idx_db_columns_ws_table ON db_columns (workspace_id, source_name, table_name)',
430
+ 'CREATE INDEX IF NOT EXISTS idx_db_fk_ws_source ON db_foreign_keys (workspace_id, source_name)',
431
+ 'CREATE INDEX IF NOT EXISTS idx_db_indexes_ws_source ON db_indexes (workspace_id, source_name)',
432
+ 'CREATE INDEX IF NOT EXISTS idx_code_files_project ON code_files (project_id)',
433
+ 'CREATE INDEX IF NOT EXISTS idx_code_jobs_project_status ON code_index_jobs (project_id, status)',
434
+ 'CREATE INDEX IF NOT EXISTS idx_code_jobs_started ON code_index_jobs (started_at DESC)',
351
435
  ];
352
436
  for (const idx of indexes) {
353
437
  await pool.query(idx);
@@ -1 +1 @@
1
- {"version":3,"file":"schema.js","sourceRoot":"","sources":["../../../src/adapters/postgres/schema.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"schema.js","sourceRoot":"","sources":["../../../src/adapters/postgres/schema.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ import type pg from 'pg';
2
+ import type { CommitBatch } from '../../core/types/git.js';
3
+ /**
4
+ * Per-aggregate storage module: Git commits + per-file diff + issue
5
+ * cross-references. Orchestrated by `PostgresStorage`.
6
+ */
7
+ export declare class PostgresCommitStorage {
8
+ private readonly pool;
9
+ constructor(pool: pg.Pool);
10
+ saveCommitBatch(workspaceId: string, batch: CommitBatch): Promise<void>;
11
+ getLastCommitDate(workspaceId: string, repoPath: string): Promise<Date | null>;
12
+ }
13
+ //# sourceMappingURL=storage-commits.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"storage-commits.d.ts","sourceRoot":"","sources":["../../../src/adapters/postgres/storage-commits.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AACzB,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAE3D;;;GAGG;AACH,qBAAa,qBAAqB;IACpB,OAAO,CAAC,QAAQ,CAAC,IAAI;gBAAJ,IAAI,EAAE,EAAE,CAAC,IAAI;IAEpC,eAAe,CAAC,WAAW,EAAE,MAAM,EAAE,KAAK,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;IAmEvE,iBAAiB,CAAC,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC;CAUrF"}
@@ -0,0 +1,63 @@
1
+ /**
2
+ * Per-aggregate storage module: Git commits + per-file diff + issue
3
+ * cross-references. Orchestrated by `PostgresStorage`.
4
+ */
5
+ export class PostgresCommitStorage {
6
+ pool;
7
+ constructor(pool) {
8
+ this.pool = pool;
9
+ }
10
+ async saveCommitBatch(workspaceId, batch) {
11
+ const client = await this.pool.connect();
12
+ try {
13
+ await client.query('BEGIN');
14
+ for (const commit of batch.commits) {
15
+ await client.query(`INSERT INTO commits (workspace_id, hash, message, author, email, committed_at, parents, repo_path, pulled_at, search_vector)
16
+ VALUES ($1, $2, $3, $4, $5, $6, $7::text[], $8, NOW(),
17
+ to_tsvector('english', $9)
18
+ )
19
+ ON CONFLICT (workspace_id, hash) DO UPDATE SET
20
+ message = EXCLUDED.message,
21
+ author = EXCLUDED.author,
22
+ email = EXCLUDED.email,
23
+ committed_at = EXCLUDED.committed_at,
24
+ parents = EXCLUDED.parents,
25
+ repo_path = EXCLUDED.repo_path,
26
+ pulled_at = NOW(),
27
+ search_vector = to_tsvector('english', coalesce(EXCLUDED.message, '') || ' ' || coalesce(EXCLUDED.author, ''))`, [
28
+ workspaceId, commit.hash, commit.message, commit.author, commit.email,
29
+ commit.committedAt, commit.parents, commit.repoPath,
30
+ `${commit.message} ${commit.author}`,
31
+ ]);
32
+ }
33
+ const hashes = batch.commits.map((c) => c.hash);
34
+ if (hashes.length > 0) {
35
+ const hashesParam = hashes.map((_, i) => `$${String(i + 2)}`).join(',');
36
+ await client.query(`DELETE FROM commit_files WHERE workspace_id = $1 AND commit_hash IN (${hashesParam})`, [workspaceId, ...hashes]);
37
+ await client.query(`DELETE FROM commit_issue_refs WHERE workspace_id = $1 AND commit_hash IN (${hashesParam})`, [workspaceId, ...hashes]);
38
+ }
39
+ for (const file of batch.files) {
40
+ await client.query(`INSERT INTO commit_files (workspace_id, commit_hash, file_path, status, additions, deletions)
41
+ VALUES ($1, $2, $3, $4, $5, $6)`, [workspaceId, file.commitHash, file.filePath, file.status, file.additions, file.deletions]);
42
+ }
43
+ for (const ref of batch.issueRefs) {
44
+ await client.query(`INSERT INTO commit_issue_refs (workspace_id, commit_hash, issue_key)
45
+ VALUES ($1, $2, $3)
46
+ ON CONFLICT DO NOTHING`, [workspaceId, ref.commitHash, ref.issueKey]);
47
+ }
48
+ await client.query('COMMIT');
49
+ }
50
+ catch (err) {
51
+ await client.query('ROLLBACK');
52
+ throw err;
53
+ }
54
+ finally {
55
+ client.release();
56
+ }
57
+ }
58
+ async getLastCommitDate(workspaceId, repoPath) {
59
+ const result = await this.pool.query(`SELECT MAX(committed_at) as last_date FROM commits WHERE workspace_id = $1 AND repo_path = $2`, [workspaceId, repoPath]);
60
+ return result.rows[0]?.last_date ?? null;
61
+ }
62
+ }
63
+ //# sourceMappingURL=storage-commits.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"storage-commits.js","sourceRoot":"","sources":["../../../src/adapters/postgres/storage-commits.ts"],"names":[],"mappings":"AAGA;;;GAGG;AACH,MAAM,OAAO,qBAAqB;IACH;IAA7B,YAA6B,IAAa;QAAb,SAAI,GAAJ,IAAI,CAAS;IAAG,CAAC;IAE9C,KAAK,CAAC,eAAe,CAAC,WAAmB,EAAE,KAAkB;QAC3D,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;QACzC,IAAI,CAAC;YACH,MAAM,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YAE5B,KAAK,MAAM,MAAM,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;gBACnC,MAAM,MAAM,CAAC,KAAK,CAChB;;;;;;;;;;;;4HAYkH,EAClH;oBACE,WAAW,EAAE,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,KAAK;oBACrE,MAAM,CAAC,WAAW,EAAE,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,QAAQ;oBACnD,GAAG,MAAM,CAAC,OAAO,IAAI,MAAM,CAAC,MAAM,EAAE;iBACrC,CACF,CAAC;YACJ,CAAC;YAED,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;YAChD,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACtB,MAAM,WAAW,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,IAAI,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;gBACxE,MAAM,MAAM,CAAC,KAAK,CAChB,wEAAwE,WAAW,GAAG,EACtF,CAAC,WAAW,EAAE,GAAG,MAAM,CAAC,CACzB,CAAC;gBACF,MAAM,MAAM,CAAC,KAAK,CAChB,6EAA6E,WAAW,GAAG,EAC3F,CAAC,WAAW,EAAE,GAAG,MAAM,CAAC,CACzB,CAAC;YACJ,CAAC;YAED,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC;gBAC/B,MAAM,MAAM,CAAC,KAAK,CAChB;2CACiC,EACjC,CAAC,WAAW,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,CAC3F,CAAC;YACJ,CAAC;YAED,KAAK,MAAM,GAAG,IAAI,KAAK,CAAC,SAAS,EAAE,CAAC;gBAClC,MAAM,MAAM,CAAC,KAAK,CAChB;;kCAEwB,EACxB,CAAC,WAAW,EAAE,GAAG,CAAC,UAAU,EAAE,GAAG,CAAC,QAAQ,CAAC,CAC5C,CAAC;YACJ,CAAC;YAED,MAAM,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;QAC/B,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;YAC/B,MAAM,GAAG,CAAC;QACZ,CAAC;gBAAS,CAAC;YACT,MAAM,CAAC,OAAO,EAAE,CAAC;QACnB,CAAC;IACH,CAAC;IAED,KAAK,CAAC,iBAAiB,CAAC,WAAmB,EAAE,QAAgB;QAI3D,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,KAAK,CAClC,+FAA+F,EAC/F,CAAC,WAAW,EAAE,QAAQ,CAAC,CACxB,CAAC;QACF,OAAO,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,SAAS,IAAI,IAAI,CAAC;IAC3C,CAAC;CACF"}
@@ -0,0 +1,14 @@
1
+ import type pg from 'pg';
2
+ import type { DbSchemaBatch } from '../../core/types/database.js';
3
+ /**
4
+ * Per-aggregate storage module: external application database schema
5
+ * mirror (`db_tables`, `db_columns`, `db_foreign_keys`, `db_indexes`).
6
+ * Orchestrated by `PostgresStorage`.
7
+ */
8
+ export declare class PostgresDbSchemaStorage {
9
+ private readonly pool;
10
+ constructor(pool: pg.Pool);
11
+ saveDbSchemaBatch(workspaceId: string, batch: DbSchemaBatch, sourceName: string): Promise<void>;
12
+ deleteDbSchema(workspaceId: string, sourceName: string): Promise<void>;
13
+ }
14
+ //# sourceMappingURL=storage-dbschema.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"storage-dbschema.d.ts","sourceRoot":"","sources":["../../../src/adapters/postgres/storage-dbschema.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AACzB,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAElE;;;;GAIG;AACH,qBAAa,uBAAuB;IACtB,OAAO,CAAC,QAAQ,CAAC,IAAI;gBAAJ,IAAI,EAAE,EAAE,CAAC,IAAI;IAEpC,iBAAiB,CAAC,WAAW,EAAE,MAAM,EAAE,KAAK,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IA6D/F,cAAc,CAAC,WAAW,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAkB7E"}