argustack 0.2.0 → 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 (546) hide show
  1. package/README.md +31 -115
  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.js +4 -4
  67. package/dist/adapters/lmstudio/embedding-provider.js.map +1 -1
  68. package/dist/adapters/lsp/jsonrpc.js +1 -1
  69. package/dist/adapters/lsp/jsonrpc.js.map +1 -1
  70. package/dist/adapters/lsp/typescript-lsp.js +7 -7
  71. package/dist/adapters/lsp/typescript-lsp.js.map +1 -1
  72. package/dist/adapters/neo4j/client.js +2 -2
  73. package/dist/adapters/neo4j/client.js.map +1 -1
  74. package/dist/adapters/neo4j/graph-store.js +3 -3
  75. package/dist/adapters/neo4j/graph-store.js.map +1 -1
  76. package/dist/adapters/neo4j/mapper.js +4 -4
  77. package/dist/adapters/neo4j/mapper.js.map +1 -1
  78. package/dist/adapters/ollama/chat-llm.d.ts +24 -0
  79. package/dist/adapters/ollama/chat-llm.d.ts.map +1 -0
  80. package/dist/adapters/ollama/chat-llm.js +53 -0
  81. package/dist/adapters/ollama/chat-llm.js.map +1 -0
  82. package/dist/adapters/ollama/embedding-provider.d.ts +30 -0
  83. package/dist/adapters/ollama/embedding-provider.d.ts.map +1 -0
  84. package/dist/adapters/ollama/embedding-provider.js +124 -0
  85. package/dist/adapters/ollama/embedding-provider.js.map +1 -0
  86. package/dist/adapters/ollama/http-ollama-control.d.ts +24 -0
  87. package/dist/adapters/ollama/http-ollama-control.d.ts.map +1 -0
  88. package/dist/adapters/ollama/http-ollama-control.js +224 -0
  89. package/dist/adapters/ollama/http-ollama-control.js.map +1 -0
  90. package/dist/adapters/ollama/index.d.ts +6 -0
  91. package/dist/adapters/ollama/index.d.ts.map +1 -0
  92. package/dist/adapters/ollama/index.js +4 -0
  93. package/dist/adapters/ollama/index.js.map +1 -0
  94. package/dist/adapters/platform/index.d.ts +2 -0
  95. package/dist/adapters/platform/index.d.ts.map +1 -0
  96. package/dist/adapters/platform/index.js +2 -0
  97. package/dist/adapters/platform/index.js.map +1 -0
  98. package/dist/adapters/platform/node-platform-probe.d.ts +9 -0
  99. package/dist/adapters/platform/node-platform-probe.d.ts.map +1 -0
  100. package/dist/adapters/platform/node-platform-probe.js +88 -0
  101. package/dist/adapters/platform/node-platform-probe.js.map +1 -0
  102. package/dist/adapters/postgres/code-meta.js +13 -13
  103. package/dist/adapters/postgres/code-meta.js.map +1 -1
  104. package/dist/adapters/postgres/index.d.ts +2 -0
  105. package/dist/adapters/postgres/index.d.ts.map +1 -1
  106. package/dist/adapters/postgres/index.js +2 -0
  107. package/dist/adapters/postgres/index.js.map +1 -1
  108. package/dist/adapters/postgres/migrate-helpers.d.ts +43 -0
  109. package/dist/adapters/postgres/migrate-helpers.d.ts.map +1 -0
  110. package/dist/adapters/postgres/migrate-helpers.js +136 -0
  111. package/dist/adapters/postgres/migrate-helpers.js.map +1 -0
  112. package/dist/adapters/postgres/readiness-probe.d.ts +22 -0
  113. package/dist/adapters/postgres/readiness-probe.d.ts.map +1 -0
  114. package/dist/adapters/postgres/readiness-probe.js +47 -0
  115. package/dist/adapters/postgres/readiness-probe.js.map +1 -0
  116. package/dist/adapters/postgres/schema.d.ts +11 -1
  117. package/dist/adapters/postgres/schema.d.ts.map +1 -1
  118. package/dist/adapters/postgres/schema.js +159 -113
  119. package/dist/adapters/postgres/schema.js.map +1 -1
  120. package/dist/adapters/postgres/storage-commits.d.ts +13 -0
  121. package/dist/adapters/postgres/storage-commits.d.ts.map +1 -0
  122. package/dist/adapters/postgres/storage-commits.js +63 -0
  123. package/dist/adapters/postgres/storage-commits.js.map +1 -0
  124. package/dist/adapters/postgres/storage-dbschema.d.ts +14 -0
  125. package/dist/adapters/postgres/storage-dbschema.d.ts.map +1 -0
  126. package/dist/adapters/postgres/storage-dbschema.js +63 -0
  127. package/dist/adapters/postgres/storage-dbschema.js.map +1 -0
  128. package/dist/adapters/postgres/storage-graph.d.ts +18 -0
  129. package/dist/adapters/postgres/storage-graph.d.ts.map +1 -0
  130. package/dist/adapters/postgres/storage-graph.js +127 -0
  131. package/dist/adapters/postgres/storage-graph.js.map +1 -0
  132. package/dist/adapters/postgres/storage-issues.d.ts +26 -0
  133. package/dist/adapters/postgres/storage-issues.d.ts.map +1 -0
  134. package/dist/adapters/postgres/storage-issues.js +233 -0
  135. package/dist/adapters/postgres/storage-issues.js.map +1 -0
  136. package/dist/adapters/postgres/storage-prs.d.ts +15 -0
  137. package/dist/adapters/postgres/storage-prs.d.ts.map +1 -0
  138. package/dist/adapters/postgres/storage-prs.js +142 -0
  139. package/dist/adapters/postgres/storage-prs.js.map +1 -0
  140. package/dist/adapters/postgres/storage-query.d.ts +26 -0
  141. package/dist/adapters/postgres/storage-query.d.ts.map +1 -0
  142. package/dist/adapters/postgres/storage-query.js +74 -0
  143. package/dist/adapters/postgres/storage-query.js.map +1 -0
  144. package/dist/adapters/postgres/storage-search.d.ts +18 -0
  145. package/dist/adapters/postgres/storage-search.d.ts.map +1 -0
  146. package/dist/adapters/postgres/storage-search.js +90 -0
  147. package/dist/adapters/postgres/storage-search.js.map +1 -0
  148. package/dist/adapters/postgres/storage.d.ts +47 -31
  149. package/dist/adapters/postgres/storage.d.ts.map +1 -1
  150. package/dist/adapters/postgres/storage.js +86 -602
  151. package/dist/adapters/postgres/storage.js.map +1 -1
  152. package/dist/adapters/postgres/workspace-store.d.ts +26 -0
  153. package/dist/adapters/postgres/workspace-store.d.ts.map +1 -0
  154. package/dist/adapters/postgres/workspace-store.js +94 -0
  155. package/dist/adapters/postgres/workspace-store.js.map +1 -0
  156. package/dist/adapters/qdrant/client.js +1 -1
  157. package/dist/adapters/qdrant/client.js.map +1 -1
  158. package/dist/adapters/qdrant/mapper.d.ts.map +1 -1
  159. package/dist/adapters/qdrant/mapper.js +11 -4
  160. package/dist/adapters/qdrant/mapper.js.map +1 -1
  161. package/dist/adapters/qdrant/vector-store.d.ts +1 -0
  162. package/dist/adapters/qdrant/vector-store.d.ts.map +1 -1
  163. package/dist/adapters/qdrant/vector-store.js +40 -10
  164. package/dist/adapters/qdrant/vector-store.js.map +1 -1
  165. package/dist/adapters/tree-sitter/parser.d.ts.map +1 -1
  166. package/dist/adapters/tree-sitter/parser.js +12 -12
  167. package/dist/adapters/tree-sitter/parser.js.map +1 -1
  168. package/dist/adapters/voyage/embedding-provider.js +2 -2
  169. package/dist/adapters/voyage/embedding-provider.js.map +1 -1
  170. package/dist/cli/add/code.d.ts +3 -0
  171. package/dist/cli/add/code.d.ts.map +1 -0
  172. package/dist/cli/add/code.js +97 -0
  173. package/dist/cli/add/code.js.map +1 -0
  174. package/dist/cli/add/csv.d.ts +3 -0
  175. package/dist/cli/add/csv.d.ts.map +1 -0
  176. package/dist/cli/add/csv.js +26 -0
  177. package/dist/cli/add/csv.js.map +1 -0
  178. package/dist/cli/add/db.d.ts +3 -0
  179. package/dist/cli/add/db.d.ts.map +1 -0
  180. package/dist/cli/add/db.js +46 -0
  181. package/dist/cli/add/db.js.map +1 -0
  182. package/dist/cli/add/git.d.ts +3 -0
  183. package/dist/cli/add/git.d.ts.map +1 -0
  184. package/dist/cli/add/git.js +26 -0
  185. package/dist/cli/add/git.js.map +1 -0
  186. package/dist/cli/add/github.d.ts +3 -0
  187. package/dist/cli/add/github.d.ts.map +1 -0
  188. package/dist/cli/add/github.js +32 -0
  189. package/dist/cli/add/github.js.map +1 -0
  190. package/dist/cli/add/index.d.ts +3 -0
  191. package/dist/cli/add/index.d.ts.map +1 -0
  192. package/dist/cli/add/index.js +18 -0
  193. package/dist/cli/add/index.js.map +1 -0
  194. package/dist/cli/add/jira.d.ts +3 -0
  195. package/dist/cli/add/jira.d.ts.map +1 -0
  196. package/dist/cli/add/jira.js +45 -0
  197. package/dist/cli/add/jira.js.map +1 -0
  198. package/dist/cli/add/shared.d.ts +31 -0
  199. package/dist/cli/add/shared.d.ts.map +1 -0
  200. package/dist/cli/add/shared.js +102 -0
  201. package/dist/cli/add/shared.js.map +1 -0
  202. package/dist/cli/board-server.js +1 -1
  203. package/dist/cli/board-server.js.map +1 -1
  204. package/dist/cli/board.d.ts.map +1 -1
  205. package/dist/cli/board.js +11 -12
  206. package/dist/cli/board.js.map +1 -1
  207. package/dist/cli/code.d.ts.map +1 -1
  208. package/dist/cli/code.js +95 -193
  209. package/dist/cli/code.js.map +1 -1
  210. package/dist/cli/embed.d.ts.map +1 -1
  211. package/dist/cli/embed.js +21 -26
  212. package/dist/cli/embed.js.map +1 -1
  213. package/dist/cli/graph.d.ts.map +1 -1
  214. package/dist/cli/graph.js +37 -55
  215. package/dist/cli/graph.js.map +1 -1
  216. package/dist/cli/index.js +28 -25
  217. package/dist/cli/index.js.map +1 -1
  218. package/dist/cli/init/cleanup.d.ts +11 -0
  219. package/dist/cli/init/cleanup.d.ts.map +1 -0
  220. package/dist/cli/init/cleanup.js +39 -0
  221. package/dist/cli/init/cleanup.js.map +1 -0
  222. package/dist/cli/init/generators.js +27 -27
  223. package/dist/cli/init/generators.js.map +1 -1
  224. package/dist/cli/init/index.d.ts +0 -10
  225. package/dist/cli/init/index.d.ts.map +1 -1
  226. package/dist/cli/init/index.js +386 -354
  227. package/dist/cli/init/index.js.map +1 -1
  228. package/dist/cli/init/presenter.d.ts +30 -0
  229. package/dist/cli/init/presenter.d.ts.map +1 -0
  230. package/dist/cli/init/presenter.js +152 -0
  231. package/dist/cli/init/presenter.js.map +1 -0
  232. package/dist/cli/init/prompts.d.ts +28 -0
  233. package/dist/cli/init/prompts.d.ts.map +1 -0
  234. package/dist/cli/init/prompts.js +110 -0
  235. package/dist/cli/init/prompts.js.map +1 -0
  236. package/dist/cli/init/setup-csv.js +2 -2
  237. package/dist/cli/init/setup-csv.js.map +1 -1
  238. package/dist/cli/init/setup-db.d.ts.map +1 -1
  239. package/dist/cli/init/setup-db.js +17 -14
  240. package/dist/cli/init/setup-db.js.map +1 -1
  241. package/dist/cli/init/setup-git.js +16 -16
  242. package/dist/cli/init/setup-git.js.map +1 -1
  243. package/dist/cli/init/setup-github.d.ts.map +1 -1
  244. package/dist/cli/init/setup-github.js +7 -5
  245. package/dist/cli/init/setup-github.js.map +1 -1
  246. package/dist/cli/init/setup-jira.d.ts.map +1 -1
  247. package/dist/cli/init/setup-jira.js +11 -9
  248. package/dist/cli/init/setup-jira.js.map +1 -1
  249. package/dist/cli/init/types.d.ts +4 -0
  250. package/dist/cli/init/types.d.ts.map +1 -1
  251. package/dist/cli/init/types.js +4 -4
  252. package/dist/cli/init/types.js.map +1 -1
  253. package/dist/cli/mcp-install.d.ts +1 -1
  254. package/dist/cli/mcp-install.d.ts.map +1 -1
  255. package/dist/cli/mcp-install.js +10 -24
  256. package/dist/cli/mcp-install.js.map +1 -1
  257. package/dist/cli/migrate-to-hub-impl.d.ts +51 -0
  258. package/dist/cli/migrate-to-hub-impl.d.ts.map +1 -0
  259. package/dist/cli/migrate-to-hub-impl.js +171 -0
  260. package/dist/cli/migrate-to-hub-impl.js.map +1 -0
  261. package/dist/cli/migrate-to-hub.d.ts +3 -0
  262. package/dist/cli/migrate-to-hub.d.ts.map +1 -0
  263. package/dist/cli/migrate-to-hub.js +90 -0
  264. package/dist/cli/migrate-to-hub.js.map +1 -0
  265. package/dist/cli/push.d.ts.map +1 -1
  266. package/dist/cli/push.js +62 -65
  267. package/dist/cli/push.js.map +1 -1
  268. package/dist/cli/sources.d.ts +0 -7
  269. package/dist/cli/sources.d.ts.map +1 -1
  270. package/dist/cli/sources.js +47 -112
  271. package/dist/cli/sources.js.map +1 -1
  272. package/dist/cli/status.d.ts +0 -3
  273. package/dist/cli/status.d.ts.map +1 -1
  274. package/dist/cli/status.js +95 -70
  275. package/dist/cli/status.js.map +1 -1
  276. package/dist/cli/sync.d.ts +0 -10
  277. package/dist/cli/sync.d.ts.map +1 -1
  278. package/dist/cli/sync.js +186 -317
  279. package/dist/cli/sync.js.map +1 -1
  280. package/dist/cli/workspace/add.d.ts +3 -0
  281. package/dist/cli/workspace/add.d.ts.map +1 -0
  282. package/dist/cli/workspace/add.js +38 -0
  283. package/dist/cli/workspace/add.js.map +1 -0
  284. package/dist/cli/workspace/index.d.ts +3 -0
  285. package/dist/cli/workspace/index.d.ts.map +1 -0
  286. package/dist/cli/workspace/index.js +16 -0
  287. package/dist/cli/workspace/index.js.map +1 -0
  288. package/dist/cli/workspace/info.d.ts +3 -0
  289. package/dist/cli/workspace/info.d.ts.map +1 -0
  290. package/dist/cli/workspace/info.js +69 -0
  291. package/dist/cli/workspace/info.js.map +1 -0
  292. package/dist/cli/workspace/list.d.ts +3 -0
  293. package/dist/cli/workspace/list.d.ts.map +1 -0
  294. package/dist/cli/workspace/list.js +36 -0
  295. package/dist/cli/workspace/list.js.map +1 -0
  296. package/dist/cli/workspace/remove.d.ts +3 -0
  297. package/dist/cli/workspace/remove.d.ts.map +1 -0
  298. package/dist/cli/workspace/remove.js +43 -0
  299. package/dist/cli/workspace/remove.js.map +1 -0
  300. package/dist/cli/workspace/shared.d.ts +7 -0
  301. package/dist/cli/workspace/shared.d.ts.map +1 -0
  302. package/dist/cli/workspace/shared.js +17 -0
  303. package/dist/cli/workspace/shared.js.map +1 -0
  304. package/dist/cli/workspace/use.d.ts +3 -0
  305. package/dist/cli/workspace/use.d.ts.map +1 -0
  306. package/dist/cli/workspace/use.js +27 -0
  307. package/dist/cli/workspace/use.js.map +1 -0
  308. package/dist/code-intel/file-discovery.js +3 -3
  309. package/dist/code-intel/file-discovery.js.map +1 -1
  310. package/dist/code-intel/indexer.js +8 -8
  311. package/dist/code-intel/indexer.js.map +1 -1
  312. package/dist/code-intel/lsp-resolver.js +5 -5
  313. package/dist/code-intel/lsp-resolver.js.map +1 -1
  314. package/dist/code-intel/ranker.d.ts +14 -0
  315. package/dist/code-intel/ranker.d.ts.map +1 -1
  316. package/dist/code-intel/ranker.js +54 -0
  317. package/dist/code-intel/ranker.js.map +1 -1
  318. package/dist/code-intel/resolver.js +4 -4
  319. package/dist/code-intel/resolver.js.map +1 -1
  320. package/dist/code-intel/tsconfig-paths.js +2 -2
  321. package/dist/code-intel/tsconfig-paths.js.map +1 -1
  322. package/dist/code-intel/watcher.js +4 -4
  323. package/dist/code-intel/watcher.js.map +1 -1
  324. package/dist/core/board/board-column.value-object.js +1 -1
  325. package/dist/core/board/board-column.value-object.js.map +1 -1
  326. package/dist/core/board/pipeline.value-object.js +1 -1
  327. package/dist/core/board/pipeline.value-object.js.map +1 -1
  328. package/dist/core/board/skill-execution.entity.js +1 -1
  329. package/dist/core/board/skill-execution.entity.js.map +1 -1
  330. package/dist/core/board/task-title.value-object.js +1 -1
  331. package/dist/core/board/task-title.value-object.js.map +1 -1
  332. package/dist/core/ports/chat-llm.d.ts +36 -0
  333. package/dist/core/ports/chat-llm.d.ts.map +1 -0
  334. package/dist/core/ports/chat-llm.js +2 -0
  335. package/dist/core/ports/chat-llm.js.map +1 -0
  336. package/dist/core/ports/code-meta.d.ts +4 -0
  337. package/dist/core/ports/code-meta.d.ts.map +1 -1
  338. package/dist/core/ports/code-vector-store.d.ts +5 -0
  339. package/dist/core/ports/code-vector-store.d.ts.map +1 -1
  340. package/dist/core/ports/docker-control.d.ts +44 -0
  341. package/dist/core/ports/docker-control.d.ts.map +1 -0
  342. package/dist/core/ports/docker-control.js +8 -0
  343. package/dist/core/ports/docker-control.js.map +1 -0
  344. package/dist/core/ports/hub-readiness-probe.d.ts +22 -0
  345. package/dist/core/ports/hub-readiness-probe.d.ts.map +1 -0
  346. package/dist/core/ports/hub-readiness-probe.js +2 -0
  347. package/dist/core/ports/hub-readiness-probe.js.map +1 -0
  348. package/dist/core/ports/index.d.ts +4 -0
  349. package/dist/core/ports/index.d.ts.map +1 -1
  350. package/dist/core/ports/ollama-control.d.ts +61 -0
  351. package/dist/core/ports/ollama-control.d.ts.map +1 -0
  352. package/dist/core/ports/ollama-control.js +7 -0
  353. package/dist/core/ports/ollama-control.js.map +1 -0
  354. package/dist/core/ports/platform-probe.d.ts +47 -0
  355. package/dist/core/ports/platform-probe.d.ts.map +1 -0
  356. package/dist/core/ports/platform-probe.js +8 -0
  357. package/dist/core/ports/platform-probe.js.map +1 -0
  358. package/dist/core/ports/storage.d.ts +62 -29
  359. package/dist/core/ports/storage.d.ts.map +1 -1
  360. package/dist/core/ports/workspace-store.d.ts +52 -0
  361. package/dist/core/ports/workspace-store.d.ts.map +1 -0
  362. package/dist/core/ports/workspace-store.js +2 -0
  363. package/dist/core/ports/workspace-store.js.map +1 -0
  364. package/dist/core/types/index.d.ts +2 -0
  365. package/dist/core/types/index.d.ts.map +1 -1
  366. package/dist/core/types/init.d.ts +29 -0
  367. package/dist/core/types/init.d.ts.map +1 -0
  368. package/dist/core/types/init.js +2 -0
  369. package/dist/core/types/init.js.map +1 -0
  370. package/dist/core/types/workspace.d.ts +78 -0
  371. package/dist/core/types/workspace.d.ts.map +1 -0
  372. package/dist/core/types/workspace.js +2 -0
  373. package/dist/core/types/workspace.js.map +1 -0
  374. package/dist/mcp/helpers.d.ts +121 -30
  375. package/dist/mcp/helpers.d.ts.map +1 -1
  376. package/dist/mcp/helpers.js +240 -264
  377. package/dist/mcp/helpers.js.map +1 -1
  378. package/dist/mcp/server.d.ts.map +1 -1
  379. package/dist/mcp/server.js +43 -5
  380. package/dist/mcp/server.js.map +1 -1
  381. package/dist/mcp/tools/code-graph.d.ts.map +1 -1
  382. package/dist/mcp/tools/code-graph.js +109 -74
  383. package/dist/mcp/tools/code-graph.js.map +1 -1
  384. package/dist/mcp/tools/code-hybrid.d.ts.map +1 -1
  385. package/dist/mcp/tools/code-hybrid.js +75 -51
  386. package/dist/mcp/tools/code-hybrid.js.map +1 -1
  387. package/dist/mcp/tools/code-search.d.ts.map +1 -1
  388. package/dist/mcp/tools/code-search.js +32 -32
  389. package/dist/mcp/tools/code-search.js.map +1 -1
  390. package/dist/mcp/tools/database.d.ts.map +1 -1
  391. package/dist/mcp/tools/database.js +86 -97
  392. package/dist/mcp/tools/database.js.map +1 -1
  393. package/dist/mcp/tools/estimate.d.ts.map +1 -1
  394. package/dist/mcp/tools/estimate.js +106 -82
  395. package/dist/mcp/tools/estimate.js.map +1 -1
  396. package/dist/mcp/tools/graph.d.ts.map +1 -1
  397. package/dist/mcp/tools/graph.js +142 -157
  398. package/dist/mcp/tools/graph.js.map +1 -1
  399. package/dist/mcp/tools/issue.d.ts.map +1 -1
  400. package/dist/mcp/tools/issue.js +172 -172
  401. package/dist/mcp/tools/issue.js.map +1 -1
  402. package/dist/mcp/tools/push.d.ts.map +1 -1
  403. package/dist/mcp/tools/push.js +70 -100
  404. package/dist/mcp/tools/push.js.map +1 -1
  405. package/dist/mcp/tools/query.d.ts.map +1 -1
  406. package/dist/mcp/tools/query.js +187 -246
  407. package/dist/mcp/tools/query.js.map +1 -1
  408. package/dist/mcp/tools/search.d.ts.map +1 -1
  409. package/dist/mcp/tools/search.js +25 -22
  410. package/dist/mcp/tools/search.js.map +1 -1
  411. package/dist/mcp/tools/workspace.d.ts.map +1 -1
  412. package/dist/mcp/tools/workspace.js +120 -73
  413. package/dist/mcp/tools/workspace.js.map +1 -1
  414. package/dist/use-cases/build-graph.d.ts +1 -1
  415. package/dist/use-cases/build-graph.d.ts.map +1 -1
  416. package/dist/use-cases/build-graph.js +63 -50
  417. package/dist/use-cases/build-graph.js.map +1 -1
  418. package/dist/use-cases/code-search.d.ts +29 -5
  419. package/dist/use-cases/code-search.d.ts.map +1 -1
  420. package/dist/use-cases/code-search.js +98 -9
  421. package/dist/use-cases/code-search.js.map +1 -1
  422. package/dist/use-cases/embed.d.ts +1 -1
  423. package/dist/use-cases/embed.d.ts.map +1 -1
  424. package/dist/use-cases/embed.js +5 -5
  425. package/dist/use-cases/embed.js.map +1 -1
  426. package/dist/use-cases/index-code.js +2 -2
  427. package/dist/use-cases/index-code.js.map +1 -1
  428. package/dist/use-cases/init/bootstrap-hub.d.ts +55 -0
  429. package/dist/use-cases/init/bootstrap-hub.d.ts.map +1 -0
  430. package/dist/use-cases/init/bootstrap-hub.js +116 -0
  431. package/dist/use-cases/init/bootstrap-hub.js.map +1 -0
  432. package/dist/use-cases/init/check-dims-conflict.d.ts +33 -0
  433. package/dist/use-cases/init/check-dims-conflict.d.ts.map +1 -0
  434. package/dist/use-cases/init/check-dims-conflict.js +39 -0
  435. package/dist/use-cases/init/check-dims-conflict.js.map +1 -0
  436. package/dist/use-cases/init/check-hub-exists.d.ts +23 -0
  437. package/dist/use-cases/init/check-hub-exists.d.ts.map +1 -0
  438. package/dist/use-cases/init/check-hub-exists.js +39 -0
  439. package/dist/use-cases/init/check-hub-exists.js.map +1 -0
  440. package/dist/use-cases/init/check-ports.d.ts +18 -0
  441. package/dist/use-cases/init/check-ports.d.ts.map +1 -0
  442. package/dist/use-cases/init/check-ports.js +25 -0
  443. package/dist/use-cases/init/check-ports.js.map +1 -0
  444. package/dist/use-cases/init/check-versions.d.ts +37 -0
  445. package/dist/use-cases/init/check-versions.d.ts.map +1 -0
  446. package/dist/use-cases/init/check-versions.js +50 -0
  447. package/dist/use-cases/init/check-versions.js.map +1 -0
  448. package/dist/use-cases/init/clear-stale-active.d.ts +20 -0
  449. package/dist/use-cases/init/clear-stale-active.d.ts.map +1 -0
  450. package/dist/use-cases/init/clear-stale-active.js +26 -0
  451. package/dist/use-cases/init/clear-stale-active.js.map +1 -0
  452. package/dist/use-cases/init/ensure-embedding-model.d.ts +20 -0
  453. package/dist/use-cases/init/ensure-embedding-model.d.ts.map +1 -0
  454. package/dist/use-cases/init/ensure-embedding-model.js +24 -0
  455. package/dist/use-cases/init/ensure-embedding-model.js.map +1 -0
  456. package/dist/use-cases/init/ensure-ollama-running.d.ts +19 -0
  457. package/dist/use-cases/init/ensure-ollama-running.d.ts.map +1 -0
  458. package/dist/use-cases/init/ensure-ollama-running.js +24 -0
  459. package/dist/use-cases/init/ensure-ollama-running.js.map +1 -0
  460. package/dist/use-cases/init/health-check-existing-llm.d.ts +25 -0
  461. package/dist/use-cases/init/health-check-existing-llm.d.ts.map +1 -0
  462. package/dist/use-cases/init/health-check-existing-llm.js +42 -0
  463. package/dist/use-cases/init/health-check-existing-llm.js.map +1 -0
  464. package/dist/use-cases/init/install-ollama.d.ts +27 -0
  465. package/dist/use-cases/init/install-ollama.d.ts.map +1 -0
  466. package/dist/use-cases/init/install-ollama.js +51 -0
  467. package/dist/use-cases/init/install-ollama.js.map +1 -0
  468. package/dist/use-cases/init/probe-llm.d.ts +32 -0
  469. package/dist/use-cases/init/probe-llm.d.ts.map +1 -0
  470. package/dist/use-cases/init/probe-llm.js +42 -0
  471. package/dist/use-cases/init/probe-llm.js.map +1 -0
  472. package/dist/use-cases/init/resolve-hub-ports.d.ts +46 -0
  473. package/dist/use-cases/init/resolve-hub-ports.d.ts.map +1 -0
  474. package/dist/use-cases/init/resolve-hub-ports.js +77 -0
  475. package/dist/use-cases/init/resolve-hub-ports.js.map +1 -0
  476. package/dist/use-cases/init/validate-workspace-name.d.ts +26 -0
  477. package/dist/use-cases/init/validate-workspace-name.d.ts.map +1 -0
  478. package/dist/use-cases/init/validate-workspace-name.js +39 -0
  479. package/dist/use-cases/init/validate-workspace-name.js.map +1 -0
  480. package/dist/use-cases/init/wait-for-docker.d.ts +16 -0
  481. package/dist/use-cases/init/wait-for-docker.d.ts.map +1 -0
  482. package/dist/use-cases/init/wait-for-docker.js +16 -0
  483. package/dist/use-cases/init/wait-for-docker.js.map +1 -0
  484. package/dist/use-cases/init/write-config-env.d.ts +32 -0
  485. package/dist/use-cases/init/write-config-env.d.ts.map +1 -0
  486. package/dist/use-cases/init/write-config-env.js +118 -0
  487. package/dist/use-cases/init/write-config-env.js.map +1 -0
  488. package/dist/use-cases/move-task.js +2 -2
  489. package/dist/use-cases/move-task.js.map +1 -1
  490. package/dist/use-cases/pull-db.d.ts +1 -1
  491. package/dist/use-cases/pull-db.d.ts.map +1 -1
  492. package/dist/use-cases/pull-db.js +3 -3
  493. package/dist/use-cases/pull-db.js.map +1 -1
  494. package/dist/use-cases/pull-git.d.ts +1 -1
  495. package/dist/use-cases/pull-git.d.ts.map +1 -1
  496. package/dist/use-cases/pull-git.js +5 -5
  497. package/dist/use-cases/pull-git.js.map +1 -1
  498. package/dist/use-cases/pull-github.d.ts +1 -1
  499. package/dist/use-cases/pull-github.d.ts.map +1 -1
  500. package/dist/use-cases/pull-github.js +6 -6
  501. package/dist/use-cases/pull-github.js.map +1 -1
  502. package/dist/use-cases/pull.d.ts +1 -1
  503. package/dist/use-cases/pull.d.ts.map +1 -1
  504. package/dist/use-cases/pull.js +6 -6
  505. package/dist/use-cases/pull.js.map +1 -1
  506. package/dist/use-cases/push.d.ts +2 -2
  507. package/dist/use-cases/push.d.ts.map +1 -1
  508. package/dist/use-cases/push.js +8 -8
  509. package/dist/use-cases/push.js.map +1 -1
  510. package/dist/use-cases/register-code-project.d.ts +8 -0
  511. package/dist/use-cases/register-code-project.d.ts.map +1 -1
  512. package/dist/use-cases/register-code-project.js +8 -0
  513. package/dist/use-cases/register-code-project.js.map +1 -1
  514. package/dist/use-cases/watch-code.js +1 -1
  515. package/dist/use-cases/watch-code.js.map +1 -1
  516. package/dist/workspace/active-workspace.d.ts +26 -0
  517. package/dist/workspace/active-workspace.d.ts.map +1 -0
  518. package/dist/workspace/active-workspace.js +69 -0
  519. package/dist/workspace/active-workspace.js.map +1 -0
  520. package/dist/workspace/adf.d.ts.map +1 -1
  521. package/dist/workspace/adf.js +20 -19
  522. package/dist/workspace/adf.js.map +1 -1
  523. package/dist/workspace/config.d.ts +11 -0
  524. package/dist/workspace/config.d.ts.map +1 -1
  525. package/dist/workspace/config.js +76 -22
  526. package/dist/workspace/config.js.map +1 -1
  527. package/dist/workspace/hub-config.d.ts +74 -0
  528. package/dist/workspace/hub-config.d.ts.map +1 -0
  529. package/dist/workspace/hub-config.js +164 -0
  530. package/dist/workspace/hub-config.js.map +1 -0
  531. package/dist/workspace/registry.d.ts +23 -3
  532. package/dist/workspace/registry.d.ts.map +1 -1
  533. package/dist/workspace/registry.js +32 -14
  534. package/dist/workspace/registry.js.map +1 -1
  535. package/dist/workspace/resolver.d.ts +20 -18
  536. package/dist/workspace/resolver.d.ts.map +1 -1
  537. package/dist/workspace/resolver.js +100 -59
  538. package/dist/workspace/resolver.js.map +1 -1
  539. package/package.json +4 -2
  540. package/templates/hub-config.env +65 -0
  541. package/templates/hub-docker-compose.yml +88 -0
  542. package/templates/migrate-to-hub.sql +90 -0
  543. package/dist/cli/workspaces.d.ts +0 -3
  544. package/dist/cli/workspaces.d.ts.map +0 -1
  545. package/dist/cli/workspaces.js +0 -34
  546. package/dist/cli/workspaces.js.map +0 -1
package/dist/cli/board.js CHANGED
@@ -1,26 +1,25 @@
1
- import { join } from 'node:path';
1
+ import { join, resolve } from 'node:path';
2
2
  import { existsSync } from 'node:fs';
3
3
  import chalk from 'chalk';
4
+ import { findLegacyWorkspaceRoot } from '../workspace/resolver.js';
4
5
  export function registerBoardCommand(program) {
5
6
  program
6
7
  .command('board')
7
- .description('Start local Kanban board UI')
8
+ .description('Start local Kanban board UI for a project directory')
8
9
  .option('-p, --port <port>', 'Port number', '5002')
10
+ .option('--root <path>', 'Project root containing Docs/Tasks/ (default: legacy .argustack/ walk-up, then cwd)')
9
11
  .action(async (opts) => {
10
- const { findWorkspaceRoot } = await import('../workspace/resolver.js');
11
- const wsRoot = findWorkspaceRoot();
12
- if (!wsRoot) {
13
- console.log(chalk.red('No workspace found. Run: argustack init'));
14
- process.exit(1);
15
- }
16
- const tasksDir = join(wsRoot, 'Docs', 'Tasks');
12
+ const projectRoot = opts.root !== undefined && opts.root.length > 0
13
+ ? resolve(opts.root)
14
+ : (findLegacyWorkspaceRoot() ?? process.cwd());
15
+ const tasksDir = join(projectRoot, 'Docs', 'Tasks');
17
16
  if (!existsSync(tasksDir)) {
18
- console.log(chalk.yellow(`No Docs/Tasks/ directory found in ${wsRoot}`));
19
- console.log(chalk.dim('Board will start empty. Create task files to populate it.'));
17
+ console.log(chalk.yellow(` No Docs/Tasks/ in ${projectRoot}`));
18
+ console.log(chalk.dim(' Pass --root /path/to/project to point at the right folder.'));
20
19
  }
21
20
  const port = parseInt(opts.port, 10);
22
21
  const { startBoardServer } = await import('./board-server.js');
23
- await startBoardServer(wsRoot, port);
22
+ await startBoardServer(projectRoot, port);
24
23
  });
25
24
  }
26
25
  //# sourceMappingURL=board.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"board.js","sourceRoot":"","sources":["../../src/cli/board.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,MAAM,UAAU,oBAAoB,CAAC,OAAgB;IACnD,OAAO;SACJ,OAAO,CAAC,OAAO,CAAC;SAChB,WAAW,CAAC,6BAA6B,CAAC;SAC1C,MAAM,CAAC,mBAAmB,EAAE,aAAa,EAAE,MAAM,CAAC;SAClD,MAAM,CAAC,KAAK,EAAE,IAAsB,EAAE,EAAE;QACvC,MAAM,EAAE,iBAAiB,EAAE,GAAG,MAAM,MAAM,CAAC,0BAA0B,CAAC,CAAC;QACvE,MAAM,MAAM,GAAG,iBAAiB,EAAE,CAAC;QAEnC,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,yCAAyC,CAAC,CAAC,CAAC;YAClE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;QAC/C,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC1B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,qCAAqC,MAAM,EAAE,CAAC,CAAC,CAAC;YACzE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,2DAA2D,CAAC,CAAC,CAAC;QACtF,CAAC;QAED,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;QACrC,MAAM,EAAE,gBAAgB,EAAE,GAAG,MAAM,MAAM,CAAC,mBAAmB,CAAC,CAAC;QAC/D,MAAM,gBAAgB,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IACvC,CAAC,CAAC,CAAC;AACP,CAAC"}
1
+ {"version":3,"file":"board.js","sourceRoot":"","sources":["../../src/cli/board.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,uBAAuB,EAAE,MAAM,0BAA0B,CAAC;AAOnE,MAAM,UAAU,oBAAoB,CAAC,OAAgB;IACnD,OAAO;SACJ,OAAO,CAAC,OAAO,CAAC;SAChB,WAAW,CAAC,qDAAqD,CAAC;SAClE,MAAM,CAAC,mBAAmB,EAAE,aAAa,EAAE,MAAM,CAAC;SAClD,MAAM,CAAC,eAAe,EAAE,qFAAqF,CAAC;SAC9G,MAAM,CAAC,KAAK,EAAE,IAAa,EAAE,EAAE;QAC9B,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,KAAK,SAAS,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC;YACjE,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC;YACpB,CAAC,CAAC,CAAC,uBAAuB,EAAE,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;QAEjD,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;QACpD,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC1B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,uBAAuB,WAAW,EAAE,CAAC,CAAC,CAAC;YAChE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,8DAA8D,CAAC,CAAC,CAAC;QACzF,CAAC;QAED,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;QACrC,MAAM,EAAE,gBAAgB,EAAE,GAAG,MAAM,MAAM,CAAC,mBAAmB,CAAC,CAAC;QAC/D,MAAM,gBAAgB,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC;IAC5C,CAAC,CAAC,CAAC;AACP,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"code.d.ts","sourceRoot":"","sources":["../../src/cli/code.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAuKzC,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA4a3D"}
1
+ {"version":3,"file":"code.d.ts","sourceRoot":"","sources":["../../src/cli/code.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAoGzC,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAgY3D"}
package/dist/cli/code.js CHANGED
@@ -1,12 +1,10 @@
1
- import { resolve, join, dirname } from 'node:path';
2
- import { fileURLToPath } from 'node:url';
3
- import { homedir } from 'node:os';
4
- import { mkdirSync, writeFileSync, existsSync, readFileSync, unlinkSync, openSync, copyFileSync } from 'node:fs';
5
- import { spawn, spawnSync } from 'node:child_process';
1
+ import { resolve, join } from 'node:path';
2
+ import { mkdirSync, writeFileSync, existsSync, readFileSync, unlinkSync, openSync } from 'node:fs';
3
+ import { spawn } from 'node:child_process';
6
4
  import chalk from 'chalk';
7
5
  import ora from 'ora';
8
- import dotenv from 'dotenv';
9
- import { requireWorkspace } from '../workspace/resolver.js';
6
+ import { hubDir, loadHubConfig } from '../workspace/hub-config.js';
7
+ import { openHubStore, resolveWorkspaceFlag } from './add/shared.js';
10
8
  import { PostgresStorage } from '../adapters/postgres/index.js';
11
9
  import { Neo4jCodeGraphStore } from '../adapters/neo4j/index.js';
12
10
  import { QdrantCodeVectorStore } from '../adapters/qdrant/index.js';
@@ -14,53 +12,16 @@ import { TreeSitterParser } from '../adapters/tree-sitter/index.js';
14
12
  import { TypeScriptLspClient } from '../adapters/lsp/index.js';
15
13
  import { VoyageCodeEmbeddingProvider } from '../adapters/voyage/index.js';
16
14
  import { LmStudioCodeEmbeddingProvider } from '../adapters/lmstudio/index.js';
15
+ import { OllamaCodeEmbeddingProvider } from '../adapters/ollama/index.js';
17
16
  import { RegisterCodeProjectUseCase } from '../use-cases/register-code-project.js';
18
17
  import { UnregisterCodeProjectUseCase } from '../use-cases/unregister-code-project.js';
19
18
  import { IndexCodeUseCase } from '../use-cases/index-code.js';
20
19
  import { WatchCodeUseCase } from '../use-cases/watch-code.js';
21
- const HUB_DIR = join(homedir(), '.argustack', 'code');
22
- const HUB_COMPOSE_FILE = join(HUB_DIR, 'docker-compose.yml');
23
- const WATCHERS_DIR = join(HUB_DIR, 'watchers');
24
- function findTemplateFile() {
25
- const here = dirname(fileURLToPath(import.meta.url));
26
- const candidates = [
27
- join(here, '..', '..', 'templates', 'code-docker-compose.yml'),
28
- join(here, '..', '..', '..', 'templates', 'code-docker-compose.yml'),
29
- join(here, '..', 'templates', 'code-docker-compose.yml'),
30
- ];
31
- for (const path of candidates) {
32
- if (existsSync(path)) {
33
- return path;
34
- }
35
- }
36
- return null;
37
- }
38
- function ensureHubCompose() {
39
- if (!existsSync(HUB_DIR)) {
40
- mkdirSync(HUB_DIR, { recursive: true });
41
- }
42
- if (existsSync(HUB_COMPOSE_FILE)) {
43
- return { created: false, path: HUB_COMPOSE_FILE };
44
- }
45
- const template = findTemplateFile();
46
- if (!template) {
47
- throw new Error(`code-docker-compose.yml template not found. Expected near package root.`);
48
- }
49
- copyFileSync(template, HUB_COMPOSE_FILE);
50
- return { created: true, path: HUB_COMPOSE_FILE };
51
- }
52
- function dockerComposeUp() {
53
- const result = spawnSync('docker', ['compose', '-f', HUB_COMPOSE_FILE, 'up', '-d'], {
54
- stdio: 'inherit',
55
- });
56
- if (result.status !== 0) {
57
- throw new Error(`docker compose up exited with code ${String(result.status)}`);
58
- }
59
- }
20
+ const WATCHERS_DIR = () => join(hubDir(), 'watchers');
60
21
  function watcherPaths(projectId) {
61
22
  return {
62
- pidFile: join(WATCHERS_DIR, `${projectId}.pid`),
63
- logFile: join(WATCHERS_DIR, `${projectId}.log`),
23
+ pidFile: join(WATCHERS_DIR(), `${projectId}.pid`),
24
+ logFile: join(WATCHERS_DIR(), `${projectId}.log`),
64
25
  };
65
26
  }
66
27
  function readWatcherPid(projectId) {
@@ -69,7 +30,7 @@ function readWatcherPid(projectId) {
69
30
  return null;
70
31
  }
71
32
  const pid = parseInt(readFileSync(pidFile, 'utf8').trim(), 10);
72
- if (!pid) {
33
+ if (Number.isNaN(pid) || pid === 0) {
73
34
  return null;
74
35
  }
75
36
  try {
@@ -84,61 +45,47 @@ function readWatcherPid(projectId) {
84
45
  return null;
85
46
  }
86
47
  }
87
- function loadEnv() {
88
- const workspaceRoot = requireWorkspace();
89
- dotenv.config({ path: `${workspaceRoot}/.env`, quiet: true });
90
- }
91
- function readDbConfig() {
92
- return {
93
- host: process.env['DB_HOST'] ?? 'localhost',
94
- port: parseInt(process.env['DB_PORT'] ?? '5434', 10),
95
- database: process.env['DB_NAME'] ?? 'argustack',
96
- user: process.env['DB_USER'] ?? 'argustack',
97
- password: process.env['DB_PASSWORD'] ?? 'argustack_local',
98
- };
99
- }
100
- function buildAdapters() {
101
- const uri = process.env['NEO4J_URI'];
102
- const qdrantUrl = process.env['QDRANT_URL'];
103
- if (!uri || !qdrantUrl) {
104
- throw new Error('Code intelligence requires NEO4J_URI and QDRANT_URL in workspace .env');
48
+ function getStatusColor(status) {
49
+ if (status === 'completed') {
50
+ return chalk.green;
105
51
  }
106
- const provider = (process.env['CODE_EMBEDDING_PROVIDER'] ?? 'lmstudio').toLowerCase();
107
- if (provider === 'voyage' && !process.env['VOYAGE_API_KEY']) {
108
- throw new Error('CODE_EMBEDDING_PROVIDER=voyage requires VOYAGE_API_KEY in workspace .env');
52
+ if (status === 'failed') {
53
+ return chalk.red;
109
54
  }
110
- const storage = new PostgresStorage(readDbConfig());
111
- const graph = new Neo4jCodeGraphStore({
112
- uri,
113
- user: process.env['NEO4J_USER'] ?? 'neo4j',
114
- password: process.env['NEO4J_PASSWORD'] ?? 'argustack_local',
115
- });
116
- const qdrantOpts = {
117
- url: qdrantUrl,
118
- };
119
- if (process.env['QDRANT_API_KEY']) {
120
- qdrantOpts.apiKey = process.env['QDRANT_API_KEY'];
55
+ return chalk.yellow;
56
+ }
57
+ function buildAdapters() {
58
+ const hub = loadHubConfig();
59
+ if (hub.embedding.provider === 'voyage' && (hub.embedding.voyageApiKey === undefined || hub.embedding.voyageApiKey === '')) {
60
+ throw new Error('CODE_EMBEDDING_PROVIDER=voyage requires VOYAGE_API_KEY in ~/.argustack/config.env');
121
61
  }
122
- const vec = new QdrantCodeVectorStore(qdrantOpts);
62
+ const storage = new PostgresStorage(hub.db);
63
+ const graph = new Neo4jCodeGraphStore(hub.neo4j);
64
+ const vec = new QdrantCodeVectorStore({ url: hub.qdrant.url });
123
65
  let embedding;
124
- if (provider === 'voyage') {
125
- embedding = new VoyageCodeEmbeddingProvider({
126
- apiKey: process.env['VOYAGE_API_KEY'] ?? '',
66
+ if (hub.embedding.provider === 'voyage' && hub.embedding.voyageApiKey !== undefined && hub.embedding.voyageApiKey !== '') {
67
+ embedding = new VoyageCodeEmbeddingProvider({ apiKey: hub.embedding.voyageApiKey });
68
+ }
69
+ else if (hub.embedding.provider === 'ollama' || hub.embedding.provider === 'custom') {
70
+ const url = hub.embedding.provider === 'custom'
71
+ ? hub.embedding.customUrl
72
+ : hub.embedding.ollamaUrl;
73
+ embedding = new OllamaCodeEmbeddingProvider({
74
+ model: hub.embedding.model,
75
+ dimensions: hub.embedding.dimensions,
76
+ ...(url !== undefined && url !== '' ? { url } : {}),
127
77
  });
128
78
  }
129
79
  else {
130
- const lmsOpts = {};
131
- if (process.env['LMSTUDIO_URL']) {
132
- lmsOpts.url = process.env['LMSTUDIO_URL'];
133
- }
134
- if (process.env['EMBEDDING_MODEL']) {
135
- lmsOpts.model = process.env['EMBEDDING_MODEL'];
136
- }
137
- if (process.env['EMBEDDING_DIMS']) {
138
- lmsOpts.dimensions = parseInt(process.env['EMBEDDING_DIMS'], 10);
80
+ const lmsOpts = {
81
+ model: hub.embedding.model,
82
+ dimensions: hub.embedding.dimensions,
83
+ };
84
+ if (hub.embedding.lmstudioUrl !== undefined && hub.embedding.lmstudioUrl !== '') {
85
+ lmsOpts.url = hub.embedding.lmstudioUrl;
139
86
  }
140
- if (process.env['RERANK_MODEL']) {
141
- lmsOpts.rerankModel = process.env['RERANK_MODEL'];
87
+ if (hub.embedding.rerankModel !== undefined && hub.embedding.rerankModel !== '') {
88
+ lmsOpts.rerankModel = hub.embedding.rerankModel;
142
89
  }
143
90
  embedding = new LmStudioCodeEmbeddingProvider(lmsOpts);
144
91
  }
@@ -149,76 +96,35 @@ async function closeAdapters(adapters) {
149
96
  await adapters.vec.close();
150
97
  await adapters.storage.close();
151
98
  }
152
- function projectIdFromName(name) {
153
- return name.toLowerCase().replace(/[^a-z0-9-]/g, '-').replace(/-+/g, '-').replace(/^-|-$/g, '');
154
- }
155
99
  export function registerCodeCommands(program) {
156
100
  const code = program
157
101
  .command('code')
158
102
  .description('Local code intelligence — graph + semantic search of your codebase');
159
103
  code
160
104
  .command('init')
161
- .description('Generate ~/.argustack/code/docker-compose.yml, start containers, apply schemas')
162
- .option('--skip-docker', 'Skip docker compose up (assumes containers already running)')
163
- .action(async (options) => {
164
- loadEnv();
165
- const composeSpinner = ora('Preparing hub docker-compose.yml...').start();
166
- try {
167
- const { created, path } = ensureHubCompose();
168
- composeSpinner.succeed(created
169
- ? `Created ${path}`
170
- : `Using existing ${path}`);
171
- }
172
- catch (err) {
173
- composeSpinner.fail('Failed to prepare docker-compose.yml');
174
- console.error(chalk.red(` ${err instanceof Error ? err.message : String(err)}`));
175
- process.exitCode = 1;
176
- return;
177
- }
178
- if (!options.skipDocker) {
179
- const dockerSpinner = ora('Starting Neo4j + Qdrant containers...').start();
180
- try {
181
- dockerSpinner.stop();
182
- dockerComposeUp();
183
- console.log(chalk.green(' Containers up'));
184
- }
185
- catch (err) {
186
- dockerSpinner.fail('docker compose up failed');
187
- console.error(chalk.red(` ${err instanceof Error ? err.message : String(err)}`));
188
- console.error(chalk.dim(' Tip: re-run with --skip-docker if containers are managed elsewhere.'));
189
- process.exitCode = 1;
190
- return;
191
- }
192
- }
193
- const spinner = ora('Initializing code intelligence stores...').start();
194
- const adapters = buildAdapters();
195
- try {
196
- await adapters.storage.initialize();
197
- await adapters.graph.initialize();
198
- await adapters.vec.initialize();
199
- spinner.succeed('Code intelligence ready');
200
- }
201
- catch (err) {
202
- spinner.fail('Init failed');
203
- console.error(chalk.red(` ${err instanceof Error ? err.message : String(err)}`));
204
- process.exitCode = 1;
205
- }
206
- finally {
207
- await closeAdapters(adapters);
208
- }
105
+ .description('[deprecated] Use `argustack init` it now bootstraps the full hub including code-intel')
106
+ .action(() => {
107
+ console.log(chalk.yellow(' `argustack code init` is deprecated.'));
108
+ console.log(chalk.dim(' Use `argustack init` — it bootstraps the full hub (pg + neo4j + qdrant) and offers code-intel setup.'));
209
109
  });
210
110
  code
211
111
  .command('register')
212
- .description('Register a code project for indexing')
213
- .requiredOption('--name <name>', 'Project name')
112
+ .description('Register a code project for indexing (workspaces.id === code_projects.id)')
113
+ .option('--workspace <name>', 'Target workspace (defaults to active)')
214
114
  .option('--root <path>', 'Project root (default: CWD)')
215
115
  .option('--language <lang>', 'Primary language (typescript|tsx|javascript|jsx)', 'typescript')
216
116
  .action(async (options) => {
217
- loadEnv();
117
+ const { store, close: closeStore } = await openHubStore();
118
+ const workspaceId = await resolveWorkspaceFlag(store, options.workspace);
119
+ const workspace = await store.getById(workspaceId);
120
+ await closeStore();
121
+ if (workspace == null) {
122
+ throw new Error(`Workspace "${workspaceId}" not found.`);
123
+ }
218
124
  const root = resolve(options.root ?? process.cwd());
219
125
  const project = {
220
- id: projectIdFromName(options.name),
221
- name: options.name,
126
+ id: workspaceId,
127
+ name: workspace.name,
222
128
  root,
223
129
  language: options.language,
224
130
  };
@@ -239,15 +145,16 @@ export function registerCodeCommands(program) {
239
145
  code
240
146
  .command('unregister')
241
147
  .description('Remove a code project and its indexed data')
242
- .argument('<name>', 'Project name or id')
243
- .action(async (name) => {
244
- loadEnv();
245
- const projectId = projectIdFromName(name);
148
+ .option('--workspace <name>', 'Target workspace (defaults to active)')
149
+ .action(async (options) => {
150
+ const { store, close: closeStore } = await openHubStore();
151
+ const projectId = await resolveWorkspaceFlag(store, options.workspace);
152
+ await closeStore();
246
153
  const adapters = buildAdapters();
247
154
  try {
248
155
  const useCase = new UnregisterCodeProjectUseCase(adapters.storage, adapters.graph, adapters.vec);
249
156
  await useCase.execute(projectId);
250
- console.log(chalk.yellow(` Unregistered '${name}' (id: ${projectId})`));
157
+ console.log(chalk.yellow(` Unregistered project (id: ${projectId})`));
251
158
  }
252
159
  finally {
253
160
  await closeAdapters(adapters);
@@ -261,42 +168,39 @@ export function registerCodeCommands(program) {
261
168
  .option('--status', 'Print latest index job + stats and exit (no indexing)')
262
169
  .option('--lsp', 'Use typescript-language-server for cross-file call resolution (slower, more accurate)')
263
170
  .action(async (options) => {
264
- loadEnv();
265
171
  const adapters = buildAdapters();
266
172
  const spinner = ora('Resolving project...').start();
267
173
  let lspClient = null;
268
174
  try {
269
- const project = options.project
175
+ const project = options.project !== undefined && options.project !== ''
270
176
  ? await adapters.storage.getProjectById(options.project)
271
177
  : await adapters.storage.getProjectByRoot(process.cwd());
272
- if (!project) {
178
+ if (project == null) {
273
179
  spinner.fail('Project not registered. Run `argustack code register --name <name>`.');
274
180
  process.exitCode = 1;
275
181
  return;
276
182
  }
277
- if (options.status) {
183
+ if (options.status === true) {
278
184
  spinner.stop();
279
185
  const job = await adapters.storage.getLatestJob(project.id);
280
186
  console.log('');
281
187
  console.log(` ${chalk.bold(project.name)} ${chalk.dim(`(${project.id})`)}`);
282
188
  console.log(chalk.dim(` root: ${project.root}`));
283
- if (!job) {
189
+ if (job == null) {
284
190
  console.log(chalk.yellow(' No index jobs recorded yet. Run `argustack code index`.'));
285
191
  console.log('');
286
192
  return;
287
193
  }
288
- const statusColor = job.status === 'completed'
289
- ? chalk.green
290
- : job.status === 'failed' ? chalk.red : chalk.yellow;
194
+ const statusColor = getStatusColor(job.status);
291
195
  console.log(` last job: ${statusColor(job.status)} (${job.type}) #${String(job.id)}`);
292
196
  console.log(chalk.dim(` started: ${job.startedAt}`));
293
- if (job.completedAt) {
197
+ if (job.completedAt !== undefined && job.completedAt !== '') {
294
198
  console.log(chalk.dim(` completed: ${job.completedAt}`));
295
199
  }
296
- if (job.stats) {
200
+ if (job.stats != null) {
297
201
  console.log(chalk.dim(` stats: files=${String(job.stats.filesIndexed)} symbols=${String(job.stats.symbolsCreated)} chunks=${String(job.stats.chunksCreated)} edges=${String(job.stats.edgesCreated)} duration=${String(job.stats.durationMs)}ms`));
298
202
  }
299
- if (job.error) {
203
+ if (job.error !== undefined && job.error !== '') {
300
204
  console.log(chalk.red(` error: ${job.error}`));
301
205
  }
302
206
  console.log('');
@@ -304,7 +208,7 @@ export function registerCodeCommands(program) {
304
208
  }
305
209
  spinner.text = `Indexing '${project.name}'...`;
306
210
  const parser = new TreeSitterParser({ projectRoot: project.root });
307
- if (options.lsp) {
211
+ if (options.lsp === true) {
308
212
  const client = new TypeScriptLspClient();
309
213
  try {
310
214
  await client.start(project.root);
@@ -343,13 +247,13 @@ export function registerCodeCommands(program) {
343
247
  catch (err) {
344
248
  spinner.fail('Index failed');
345
249
  console.error(chalk.red(` ${err instanceof Error ? err.message : String(err)}`));
346
- if (err instanceof Error && err.stack) {
250
+ if (err instanceof Error && err.stack !== undefined && err.stack !== '') {
347
251
  console.error(chalk.dim(err.stack));
348
252
  }
349
253
  process.exitCode = 1;
350
254
  }
351
255
  finally {
352
- if (lspClient) {
256
+ if (lspClient != null) {
353
257
  try {
354
258
  await lspClient.stop();
355
259
  }
@@ -362,7 +266,6 @@ export function registerCodeCommands(program) {
362
266
  .command('list')
363
267
  .description('List registered code projects')
364
268
  .action(async () => {
365
- loadEnv();
366
269
  const adapters = buildAdapters();
367
270
  try {
368
271
  const projects = await adapters.storage.listProjects();
@@ -372,7 +275,7 @@ export function registerCodeCommands(program) {
372
275
  }
373
276
  console.log('');
374
277
  for (const p of projects) {
375
- const lastIndexed = p.lastIndexedAt
278
+ const lastIndexed = p.lastIndexedAt !== undefined && p.lastIndexedAt !== ''
376
279
  ? new Date(p.lastIndexedAt).toLocaleString()
377
280
  : chalk.dim('never');
378
281
  console.log(` ${chalk.green('●')} ${chalk.bold(p.name)} ${chalk.dim(`(${p.id})`)}`);
@@ -389,7 +292,6 @@ export function registerCodeCommands(program) {
389
292
  .command('status')
390
293
  .description('Show status of code intelligence stores and projects')
391
294
  .action(async () => {
392
- loadEnv();
393
295
  const adapters = buildAdapters();
394
296
  try {
395
297
  const projects = await adapters.storage.listProjects();
@@ -402,11 +304,11 @@ export function registerCodeCommands(program) {
402
304
  console.log(chalk.bold(` Projects (${String(projects.length)}):`));
403
305
  for (const p of projects) {
404
306
  const job = await adapters.storage.getLatestJob(p.id);
405
- const jobInfo = job
307
+ const jobInfo = job != null
406
308
  ? `${job.status} (${job.type})`
407
309
  : chalk.dim('no jobs');
408
310
  const watcherPid = readWatcherPid(p.id);
409
- const watcherInfo = watcherPid
311
+ const watcherInfo = watcherPid != null && watcherPid !== 0
410
312
  ? chalk.cyan(` ⟳ watching (pid ${String(watcherPid)})`)
411
313
  : '';
412
314
  console.log(` ${chalk.green('●')} ${p.name} — ${jobInfo}${watcherInfo}`);
@@ -419,15 +321,16 @@ export function registerCodeCommands(program) {
419
321
  });
420
322
  code
421
323
  .command('stats')
422
- .description('Show stats for a project')
423
- .argument('<projectId>', 'Project id')
424
- .action(async (projectId) => {
425
- loadEnv();
324
+ .description('Show stats for a code project')
325
+ .option('--workspace <name>', 'Target workspace (defaults to active)')
326
+ .action(async (options) => {
327
+ const { store, close: closeStore } = await openHubStore();
328
+ const id = await resolveWorkspaceFlag(store, options.workspace);
329
+ await closeStore();
426
330
  const adapters = buildAdapters();
427
331
  try {
428
- const id = projectIdFromName(projectId);
429
332
  const project = await adapters.storage.getProjectById(id);
430
- if (!project) {
333
+ if (project == null) {
431
334
  console.log(chalk.red(`\n Project '${id}' not found.\n`));
432
335
  process.exitCode = 1;
433
336
  return;
@@ -438,9 +341,9 @@ export function registerCodeCommands(program) {
438
341
  console.log(` ${chalk.bold(project.name)} ${chalk.dim(`(${project.id})`)}`);
439
342
  console.log(` root: ${project.root}`);
440
343
  console.log(` vectors: ${String(vecStats.pointCount)} (dim ${String(vecStats.vectorDim)})`);
441
- if (lastJob) {
344
+ if (lastJob != null) {
442
345
  console.log(` last job: ${lastJob.status} ${lastJob.type} @ ${lastJob.startedAt}`);
443
- if (lastJob.stats) {
346
+ if (lastJob.stats != null) {
444
347
  console.log(chalk.dim(` files=${String(lastJob.stats.filesIndexed)} symbols=${String(lastJob.stats.symbolsCreated)} chunks=${String(lastJob.stats.chunksCreated)} tokens=${String(lastJob.stats.embeddingTokens)}`));
445
348
  }
446
349
  }
@@ -457,21 +360,20 @@ export function registerCodeCommands(program) {
457
360
  .option('--daemon', 'Run in background, write PID file')
458
361
  .option('--stop', 'Stop running daemon for this project')
459
362
  .action(async (options) => {
460
- loadEnv();
461
- mkdirSync(WATCHERS_DIR, { recursive: true });
363
+ mkdirSync(WATCHERS_DIR(), { recursive: true });
462
364
  const adapters = buildAdapters();
463
365
  try {
464
- const project = options.project
366
+ const project = options.project !== undefined && options.project !== ''
465
367
  ? await adapters.storage.getProjectById(options.project)
466
368
  : await adapters.storage.getProjectByRoot(process.cwd());
467
- if (!project) {
369
+ if (project == null) {
468
370
  console.log(chalk.red('\n Project not registered. Run `argustack code register --name <name>`.\n'));
469
371
  process.exitCode = 1;
470
372
  return;
471
373
  }
472
- if (options.stop) {
374
+ if (options.stop === true) {
473
375
  const pid = readWatcherPid(project.id);
474
- if (!pid) {
376
+ if (pid == null || pid === 0) {
475
377
  console.log(chalk.yellow(` No running watcher for '${project.id}'.`));
476
378
  return;
477
379
  }
@@ -490,12 +392,12 @@ export function registerCodeCommands(program) {
490
392
  return;
491
393
  }
492
394
  const existingPid = readWatcherPid(project.id);
493
- if (existingPid) {
395
+ if (existingPid != null && existingPid !== 0) {
494
396
  console.log(chalk.yellow(` Watcher already running (pid ${String(existingPid)}) for '${project.id}'.`));
495
397
  console.log(chalk.dim(` Use --stop to stop it, or check ${watcherPaths(project.id).logFile}`));
496
398
  return;
497
399
  }
498
- if (options.daemon) {
400
+ if (options.daemon === true) {
499
401
  const { pidFile, logFile } = watcherPaths(project.id);
500
402
  const logFd = openSync(logFile, 'a');
501
403
  const child = spawn(process.execPath, [process.argv[1] ?? '', 'code', 'watch', '--project', project.id], {
@@ -504,7 +406,7 @@ export function registerCodeCommands(program) {
504
406
  env: process.env,
505
407
  });
506
408
  child.unref();
507
- if (child.pid) {
409
+ if (child.pid != null && child.pid !== 0) {
508
410
  writeFileSync(pidFile, String(child.pid));
509
411
  console.log(chalk.green(` Watcher started in background for '${project.id}'`));
510
412
  console.log(chalk.dim(` pid: ${String(child.pid)}`));