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.
- package/README.md +31 -115
- package/dist/adapters/board/board-sync.js +2 -2
- package/dist/adapters/board/board-sync.js.map +1 -1
- package/dist/adapters/board/md-parser.js +3 -3
- package/dist/adapters/board/md-parser.js.map +1 -1
- package/dist/adapters/board/skill-discovery.js +2 -2
- package/dist/adapters/board/skill-discovery.js.map +1 -1
- package/dist/adapters/board/skill-runner.js +2 -2
- package/dist/adapters/board/skill-runner.js.map +1 -1
- package/dist/adapters/board/store.d.ts.map +1 -1
- package/dist/adapters/board/store.js +11 -11
- package/dist/adapters/board/store.js.map +1 -1
- package/dist/adapters/csv/mapper.js +11 -11
- package/dist/adapters/csv/mapper.js.map +1 -1
- package/dist/adapters/csv/parser.d.ts.map +1 -1
- package/dist/adapters/csv/parser.js +8 -7
- package/dist/adapters/csv/parser.js.map +1 -1
- package/dist/adapters/csv/provider.js +4 -4
- package/dist/adapters/csv/provider.js.map +1 -1
- package/dist/adapters/db/client.js +2 -2
- package/dist/adapters/db/client.js.map +1 -1
- package/dist/adapters/db/index.js +1 -0
- package/dist/adapters/db/index.js.map +1 -1
- package/dist/adapters/db/mapper.js +1 -1
- package/dist/adapters/db/mapper.js.map +1 -1
- package/dist/adapters/db/provider.js +4 -4
- package/dist/adapters/db/provider.js.map +1 -1
- package/dist/adapters/db/sql-validator.js +2 -2
- package/dist/adapters/db/sql-validator.js.map +1 -1
- package/dist/adapters/docker/cli-docker-control.d.ts +13 -0
- package/dist/adapters/docker/cli-docker-control.d.ts.map +1 -0
- package/dist/adapters/docker/cli-docker-control.js +70 -0
- package/dist/adapters/docker/cli-docker-control.js.map +1 -0
- package/dist/adapters/docker/index.d.ts +2 -0
- package/dist/adapters/docker/index.d.ts.map +1 -0
- package/dist/adapters/docker/index.js +2 -0
- package/dist/adapters/docker/index.js.map +1 -0
- package/dist/adapters/git/mapper.js +1 -1
- package/dist/adapters/git/mapper.js.map +1 -1
- package/dist/adapters/git/provider.js +4 -4
- package/dist/adapters/git/provider.js.map +1 -1
- package/dist/adapters/github/mapper.js +3 -3
- package/dist/adapters/github/mapper.js.map +1 -1
- package/dist/adapters/github/provider.d.ts.map +1 -1
- package/dist/adapters/github/provider.js +2 -2
- package/dist/adapters/github/provider.js.map +1 -1
- package/dist/adapters/jira/mapper.js +4 -4
- package/dist/adapters/jira/mapper.js.map +1 -1
- package/dist/adapters/jira/provider.js +8 -8
- package/dist/adapters/jira/provider.js.map +1 -1
- package/dist/adapters/jira-proxy/client.js +4 -4
- package/dist/adapters/jira-proxy/client.js.map +1 -1
- package/dist/adapters/jira-proxy/config-loader.d.ts +9 -0
- package/dist/adapters/jira-proxy/config-loader.d.ts.map +1 -1
- package/dist/adapters/jira-proxy/config-loader.js +26 -3
- package/dist/adapters/jira-proxy/config-loader.js.map +1 -1
- package/dist/adapters/jira-proxy/index.d.ts +1 -1
- package/dist/adapters/jira-proxy/index.d.ts.map +1 -1
- package/dist/adapters/jira-proxy/index.js +1 -1
- package/dist/adapters/jira-proxy/index.js.map +1 -1
- package/dist/adapters/jira-proxy/mapper.js +2 -2
- package/dist/adapters/jira-proxy/mapper.js.map +1 -1
- package/dist/adapters/jira-proxy/provider.d.ts.map +1 -1
- package/dist/adapters/jira-proxy/provider.js +19 -8
- package/dist/adapters/jira-proxy/provider.js.map +1 -1
- package/dist/adapters/lmstudio/embedding-provider.js +4 -4
- package/dist/adapters/lmstudio/embedding-provider.js.map +1 -1
- package/dist/adapters/lsp/jsonrpc.js +1 -1
- package/dist/adapters/lsp/jsonrpc.js.map +1 -1
- package/dist/adapters/lsp/typescript-lsp.js +7 -7
- package/dist/adapters/lsp/typescript-lsp.js.map +1 -1
- package/dist/adapters/neo4j/client.js +2 -2
- package/dist/adapters/neo4j/client.js.map +1 -1
- package/dist/adapters/neo4j/graph-store.js +3 -3
- package/dist/adapters/neo4j/graph-store.js.map +1 -1
- package/dist/adapters/neo4j/mapper.js +4 -4
- package/dist/adapters/neo4j/mapper.js.map +1 -1
- package/dist/adapters/ollama/chat-llm.d.ts +24 -0
- package/dist/adapters/ollama/chat-llm.d.ts.map +1 -0
- package/dist/adapters/ollama/chat-llm.js +53 -0
- package/dist/adapters/ollama/chat-llm.js.map +1 -0
- package/dist/adapters/ollama/embedding-provider.d.ts +30 -0
- package/dist/adapters/ollama/embedding-provider.d.ts.map +1 -0
- package/dist/adapters/ollama/embedding-provider.js +124 -0
- package/dist/adapters/ollama/embedding-provider.js.map +1 -0
- package/dist/adapters/ollama/http-ollama-control.d.ts +24 -0
- package/dist/adapters/ollama/http-ollama-control.d.ts.map +1 -0
- package/dist/adapters/ollama/http-ollama-control.js +224 -0
- package/dist/adapters/ollama/http-ollama-control.js.map +1 -0
- package/dist/adapters/ollama/index.d.ts +6 -0
- package/dist/adapters/ollama/index.d.ts.map +1 -0
- package/dist/adapters/ollama/index.js +4 -0
- package/dist/adapters/ollama/index.js.map +1 -0
- package/dist/adapters/platform/index.d.ts +2 -0
- package/dist/adapters/platform/index.d.ts.map +1 -0
- package/dist/adapters/platform/index.js +2 -0
- package/dist/adapters/platform/index.js.map +1 -0
- package/dist/adapters/platform/node-platform-probe.d.ts +9 -0
- package/dist/adapters/platform/node-platform-probe.d.ts.map +1 -0
- package/dist/adapters/platform/node-platform-probe.js +88 -0
- package/dist/adapters/platform/node-platform-probe.js.map +1 -0
- package/dist/adapters/postgres/code-meta.js +13 -13
- package/dist/adapters/postgres/code-meta.js.map +1 -1
- package/dist/adapters/postgres/index.d.ts +2 -0
- package/dist/adapters/postgres/index.d.ts.map +1 -1
- package/dist/adapters/postgres/index.js +2 -0
- package/dist/adapters/postgres/index.js.map +1 -1
- package/dist/adapters/postgres/migrate-helpers.d.ts +43 -0
- package/dist/adapters/postgres/migrate-helpers.d.ts.map +1 -0
- package/dist/adapters/postgres/migrate-helpers.js +136 -0
- package/dist/adapters/postgres/migrate-helpers.js.map +1 -0
- package/dist/adapters/postgres/readiness-probe.d.ts +22 -0
- package/dist/adapters/postgres/readiness-probe.d.ts.map +1 -0
- package/dist/adapters/postgres/readiness-probe.js +47 -0
- package/dist/adapters/postgres/readiness-probe.js.map +1 -0
- package/dist/adapters/postgres/schema.d.ts +11 -1
- package/dist/adapters/postgres/schema.d.ts.map +1 -1
- package/dist/adapters/postgres/schema.js +159 -113
- package/dist/adapters/postgres/schema.js.map +1 -1
- package/dist/adapters/postgres/storage-commits.d.ts +13 -0
- package/dist/adapters/postgres/storage-commits.d.ts.map +1 -0
- package/dist/adapters/postgres/storage-commits.js +63 -0
- package/dist/adapters/postgres/storage-commits.js.map +1 -0
- package/dist/adapters/postgres/storage-dbschema.d.ts +14 -0
- package/dist/adapters/postgres/storage-dbschema.d.ts.map +1 -0
- package/dist/adapters/postgres/storage-dbschema.js +63 -0
- package/dist/adapters/postgres/storage-dbschema.js.map +1 -0
- package/dist/adapters/postgres/storage-graph.d.ts +18 -0
- package/dist/adapters/postgres/storage-graph.d.ts.map +1 -0
- package/dist/adapters/postgres/storage-graph.js +127 -0
- package/dist/adapters/postgres/storage-graph.js.map +1 -0
- package/dist/adapters/postgres/storage-issues.d.ts +26 -0
- package/dist/adapters/postgres/storage-issues.d.ts.map +1 -0
- package/dist/adapters/postgres/storage-issues.js +233 -0
- package/dist/adapters/postgres/storage-issues.js.map +1 -0
- package/dist/adapters/postgres/storage-prs.d.ts +15 -0
- package/dist/adapters/postgres/storage-prs.d.ts.map +1 -0
- package/dist/adapters/postgres/storage-prs.js +142 -0
- package/dist/adapters/postgres/storage-prs.js.map +1 -0
- package/dist/adapters/postgres/storage-query.d.ts +26 -0
- package/dist/adapters/postgres/storage-query.d.ts.map +1 -0
- package/dist/adapters/postgres/storage-query.js +74 -0
- package/dist/adapters/postgres/storage-query.js.map +1 -0
- package/dist/adapters/postgres/storage-search.d.ts +18 -0
- package/dist/adapters/postgres/storage-search.d.ts.map +1 -0
- package/dist/adapters/postgres/storage-search.js +90 -0
- package/dist/adapters/postgres/storage-search.js.map +1 -0
- package/dist/adapters/postgres/storage.d.ts +47 -31
- package/dist/adapters/postgres/storage.d.ts.map +1 -1
- package/dist/adapters/postgres/storage.js +86 -602
- package/dist/adapters/postgres/storage.js.map +1 -1
- package/dist/adapters/postgres/workspace-store.d.ts +26 -0
- package/dist/adapters/postgres/workspace-store.d.ts.map +1 -0
- package/dist/adapters/postgres/workspace-store.js +94 -0
- package/dist/adapters/postgres/workspace-store.js.map +1 -0
- package/dist/adapters/qdrant/client.js +1 -1
- package/dist/adapters/qdrant/client.js.map +1 -1
- package/dist/adapters/qdrant/mapper.d.ts.map +1 -1
- package/dist/adapters/qdrant/mapper.js +11 -4
- package/dist/adapters/qdrant/mapper.js.map +1 -1
- package/dist/adapters/qdrant/vector-store.d.ts +1 -0
- package/dist/adapters/qdrant/vector-store.d.ts.map +1 -1
- package/dist/adapters/qdrant/vector-store.js +40 -10
- package/dist/adapters/qdrant/vector-store.js.map +1 -1
- package/dist/adapters/tree-sitter/parser.d.ts.map +1 -1
- package/dist/adapters/tree-sitter/parser.js +12 -12
- package/dist/adapters/tree-sitter/parser.js.map +1 -1
- package/dist/adapters/voyage/embedding-provider.js +2 -2
- package/dist/adapters/voyage/embedding-provider.js.map +1 -1
- package/dist/cli/add/code.d.ts +3 -0
- package/dist/cli/add/code.d.ts.map +1 -0
- package/dist/cli/add/code.js +97 -0
- package/dist/cli/add/code.js.map +1 -0
- package/dist/cli/add/csv.d.ts +3 -0
- package/dist/cli/add/csv.d.ts.map +1 -0
- package/dist/cli/add/csv.js +26 -0
- package/dist/cli/add/csv.js.map +1 -0
- package/dist/cli/add/db.d.ts +3 -0
- package/dist/cli/add/db.d.ts.map +1 -0
- package/dist/cli/add/db.js +46 -0
- package/dist/cli/add/db.js.map +1 -0
- package/dist/cli/add/git.d.ts +3 -0
- package/dist/cli/add/git.d.ts.map +1 -0
- package/dist/cli/add/git.js +26 -0
- package/dist/cli/add/git.js.map +1 -0
- package/dist/cli/add/github.d.ts +3 -0
- package/dist/cli/add/github.d.ts.map +1 -0
- package/dist/cli/add/github.js +32 -0
- package/dist/cli/add/github.js.map +1 -0
- package/dist/cli/add/index.d.ts +3 -0
- package/dist/cli/add/index.d.ts.map +1 -0
- package/dist/cli/add/index.js +18 -0
- package/dist/cli/add/index.js.map +1 -0
- package/dist/cli/add/jira.d.ts +3 -0
- package/dist/cli/add/jira.d.ts.map +1 -0
- package/dist/cli/add/jira.js +45 -0
- package/dist/cli/add/jira.js.map +1 -0
- package/dist/cli/add/shared.d.ts +31 -0
- package/dist/cli/add/shared.d.ts.map +1 -0
- package/dist/cli/add/shared.js +102 -0
- package/dist/cli/add/shared.js.map +1 -0
- package/dist/cli/board-server.js +1 -1
- package/dist/cli/board-server.js.map +1 -1
- package/dist/cli/board.d.ts.map +1 -1
- package/dist/cli/board.js +11 -12
- package/dist/cli/board.js.map +1 -1
- package/dist/cli/code.d.ts.map +1 -1
- package/dist/cli/code.js +95 -193
- package/dist/cli/code.js.map +1 -1
- package/dist/cli/embed.d.ts.map +1 -1
- package/dist/cli/embed.js +21 -26
- package/dist/cli/embed.js.map +1 -1
- package/dist/cli/graph.d.ts.map +1 -1
- package/dist/cli/graph.js +37 -55
- package/dist/cli/graph.js.map +1 -1
- package/dist/cli/index.js +28 -25
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/init/cleanup.d.ts +11 -0
- package/dist/cli/init/cleanup.d.ts.map +1 -0
- package/dist/cli/init/cleanup.js +39 -0
- package/dist/cli/init/cleanup.js.map +1 -0
- package/dist/cli/init/generators.js +27 -27
- package/dist/cli/init/generators.js.map +1 -1
- package/dist/cli/init/index.d.ts +0 -10
- package/dist/cli/init/index.d.ts.map +1 -1
- package/dist/cli/init/index.js +386 -354
- package/dist/cli/init/index.js.map +1 -1
- package/dist/cli/init/presenter.d.ts +30 -0
- package/dist/cli/init/presenter.d.ts.map +1 -0
- package/dist/cli/init/presenter.js +152 -0
- package/dist/cli/init/presenter.js.map +1 -0
- package/dist/cli/init/prompts.d.ts +28 -0
- package/dist/cli/init/prompts.d.ts.map +1 -0
- package/dist/cli/init/prompts.js +110 -0
- package/dist/cli/init/prompts.js.map +1 -0
- package/dist/cli/init/setup-csv.js +2 -2
- package/dist/cli/init/setup-csv.js.map +1 -1
- package/dist/cli/init/setup-db.d.ts.map +1 -1
- package/dist/cli/init/setup-db.js +17 -14
- package/dist/cli/init/setup-db.js.map +1 -1
- package/dist/cli/init/setup-git.js +16 -16
- package/dist/cli/init/setup-git.js.map +1 -1
- package/dist/cli/init/setup-github.d.ts.map +1 -1
- package/dist/cli/init/setup-github.js +7 -5
- package/dist/cli/init/setup-github.js.map +1 -1
- package/dist/cli/init/setup-jira.d.ts.map +1 -1
- package/dist/cli/init/setup-jira.js +11 -9
- package/dist/cli/init/setup-jira.js.map +1 -1
- package/dist/cli/init/types.d.ts +4 -0
- package/dist/cli/init/types.d.ts.map +1 -1
- package/dist/cli/init/types.js +4 -4
- package/dist/cli/init/types.js.map +1 -1
- package/dist/cli/mcp-install.d.ts +1 -1
- package/dist/cli/mcp-install.d.ts.map +1 -1
- package/dist/cli/mcp-install.js +10 -24
- package/dist/cli/mcp-install.js.map +1 -1
- package/dist/cli/migrate-to-hub-impl.d.ts +51 -0
- package/dist/cli/migrate-to-hub-impl.d.ts.map +1 -0
- package/dist/cli/migrate-to-hub-impl.js +171 -0
- package/dist/cli/migrate-to-hub-impl.js.map +1 -0
- package/dist/cli/migrate-to-hub.d.ts +3 -0
- package/dist/cli/migrate-to-hub.d.ts.map +1 -0
- package/dist/cli/migrate-to-hub.js +90 -0
- package/dist/cli/migrate-to-hub.js.map +1 -0
- package/dist/cli/push.d.ts.map +1 -1
- package/dist/cli/push.js +62 -65
- package/dist/cli/push.js.map +1 -1
- package/dist/cli/sources.d.ts +0 -7
- package/dist/cli/sources.d.ts.map +1 -1
- package/dist/cli/sources.js +47 -112
- package/dist/cli/sources.js.map +1 -1
- package/dist/cli/status.d.ts +0 -3
- package/dist/cli/status.d.ts.map +1 -1
- package/dist/cli/status.js +95 -70
- package/dist/cli/status.js.map +1 -1
- package/dist/cli/sync.d.ts +0 -10
- package/dist/cli/sync.d.ts.map +1 -1
- package/dist/cli/sync.js +186 -317
- package/dist/cli/sync.js.map +1 -1
- package/dist/cli/workspace/add.d.ts +3 -0
- package/dist/cli/workspace/add.d.ts.map +1 -0
- package/dist/cli/workspace/add.js +38 -0
- package/dist/cli/workspace/add.js.map +1 -0
- package/dist/cli/workspace/index.d.ts +3 -0
- package/dist/cli/workspace/index.d.ts.map +1 -0
- package/dist/cli/workspace/index.js +16 -0
- package/dist/cli/workspace/index.js.map +1 -0
- package/dist/cli/workspace/info.d.ts +3 -0
- package/dist/cli/workspace/info.d.ts.map +1 -0
- package/dist/cli/workspace/info.js +69 -0
- package/dist/cli/workspace/info.js.map +1 -0
- package/dist/cli/workspace/list.d.ts +3 -0
- package/dist/cli/workspace/list.d.ts.map +1 -0
- package/dist/cli/workspace/list.js +36 -0
- package/dist/cli/workspace/list.js.map +1 -0
- package/dist/cli/workspace/remove.d.ts +3 -0
- package/dist/cli/workspace/remove.d.ts.map +1 -0
- package/dist/cli/workspace/remove.js +43 -0
- package/dist/cli/workspace/remove.js.map +1 -0
- package/dist/cli/workspace/shared.d.ts +7 -0
- package/dist/cli/workspace/shared.d.ts.map +1 -0
- package/dist/cli/workspace/shared.js +17 -0
- package/dist/cli/workspace/shared.js.map +1 -0
- package/dist/cli/workspace/use.d.ts +3 -0
- package/dist/cli/workspace/use.d.ts.map +1 -0
- package/dist/cli/workspace/use.js +27 -0
- package/dist/cli/workspace/use.js.map +1 -0
- package/dist/code-intel/file-discovery.js +3 -3
- package/dist/code-intel/file-discovery.js.map +1 -1
- package/dist/code-intel/indexer.js +8 -8
- package/dist/code-intel/indexer.js.map +1 -1
- package/dist/code-intel/lsp-resolver.js +5 -5
- package/dist/code-intel/lsp-resolver.js.map +1 -1
- package/dist/code-intel/ranker.d.ts +14 -0
- package/dist/code-intel/ranker.d.ts.map +1 -1
- package/dist/code-intel/ranker.js +54 -0
- package/dist/code-intel/ranker.js.map +1 -1
- package/dist/code-intel/resolver.js +4 -4
- package/dist/code-intel/resolver.js.map +1 -1
- package/dist/code-intel/tsconfig-paths.js +2 -2
- package/dist/code-intel/tsconfig-paths.js.map +1 -1
- package/dist/code-intel/watcher.js +4 -4
- package/dist/code-intel/watcher.js.map +1 -1
- package/dist/core/board/board-column.value-object.js +1 -1
- package/dist/core/board/board-column.value-object.js.map +1 -1
- package/dist/core/board/pipeline.value-object.js +1 -1
- package/dist/core/board/pipeline.value-object.js.map +1 -1
- package/dist/core/board/skill-execution.entity.js +1 -1
- package/dist/core/board/skill-execution.entity.js.map +1 -1
- package/dist/core/board/task-title.value-object.js +1 -1
- package/dist/core/board/task-title.value-object.js.map +1 -1
- package/dist/core/ports/chat-llm.d.ts +36 -0
- package/dist/core/ports/chat-llm.d.ts.map +1 -0
- package/dist/core/ports/chat-llm.js +2 -0
- package/dist/core/ports/chat-llm.js.map +1 -0
- package/dist/core/ports/code-meta.d.ts +4 -0
- package/dist/core/ports/code-meta.d.ts.map +1 -1
- package/dist/core/ports/code-vector-store.d.ts +5 -0
- package/dist/core/ports/code-vector-store.d.ts.map +1 -1
- package/dist/core/ports/docker-control.d.ts +44 -0
- package/dist/core/ports/docker-control.d.ts.map +1 -0
- package/dist/core/ports/docker-control.js +8 -0
- package/dist/core/ports/docker-control.js.map +1 -0
- package/dist/core/ports/hub-readiness-probe.d.ts +22 -0
- package/dist/core/ports/hub-readiness-probe.d.ts.map +1 -0
- package/dist/core/ports/hub-readiness-probe.js +2 -0
- package/dist/core/ports/hub-readiness-probe.js.map +1 -0
- package/dist/core/ports/index.d.ts +4 -0
- package/dist/core/ports/index.d.ts.map +1 -1
- package/dist/core/ports/ollama-control.d.ts +61 -0
- package/dist/core/ports/ollama-control.d.ts.map +1 -0
- package/dist/core/ports/ollama-control.js +7 -0
- package/dist/core/ports/ollama-control.js.map +1 -0
- package/dist/core/ports/platform-probe.d.ts +47 -0
- package/dist/core/ports/platform-probe.d.ts.map +1 -0
- package/dist/core/ports/platform-probe.js +8 -0
- package/dist/core/ports/platform-probe.js.map +1 -0
- package/dist/core/ports/storage.d.ts +62 -29
- package/dist/core/ports/storage.d.ts.map +1 -1
- package/dist/core/ports/workspace-store.d.ts +52 -0
- package/dist/core/ports/workspace-store.d.ts.map +1 -0
- package/dist/core/ports/workspace-store.js +2 -0
- package/dist/core/ports/workspace-store.js.map +1 -0
- package/dist/core/types/index.d.ts +2 -0
- package/dist/core/types/index.d.ts.map +1 -1
- package/dist/core/types/init.d.ts +29 -0
- package/dist/core/types/init.d.ts.map +1 -0
- package/dist/core/types/init.js +2 -0
- package/dist/core/types/init.js.map +1 -0
- package/dist/core/types/workspace.d.ts +78 -0
- package/dist/core/types/workspace.d.ts.map +1 -0
- package/dist/core/types/workspace.js +2 -0
- package/dist/core/types/workspace.js.map +1 -0
- package/dist/mcp/helpers.d.ts +121 -30
- package/dist/mcp/helpers.d.ts.map +1 -1
- package/dist/mcp/helpers.js +240 -264
- package/dist/mcp/helpers.js.map +1 -1
- package/dist/mcp/server.d.ts.map +1 -1
- package/dist/mcp/server.js +43 -5
- package/dist/mcp/server.js.map +1 -1
- package/dist/mcp/tools/code-graph.d.ts.map +1 -1
- package/dist/mcp/tools/code-graph.js +109 -74
- package/dist/mcp/tools/code-graph.js.map +1 -1
- package/dist/mcp/tools/code-hybrid.d.ts.map +1 -1
- package/dist/mcp/tools/code-hybrid.js +75 -51
- package/dist/mcp/tools/code-hybrid.js.map +1 -1
- package/dist/mcp/tools/code-search.d.ts.map +1 -1
- package/dist/mcp/tools/code-search.js +32 -32
- package/dist/mcp/tools/code-search.js.map +1 -1
- package/dist/mcp/tools/database.d.ts.map +1 -1
- package/dist/mcp/tools/database.js +86 -97
- package/dist/mcp/tools/database.js.map +1 -1
- package/dist/mcp/tools/estimate.d.ts.map +1 -1
- package/dist/mcp/tools/estimate.js +106 -82
- package/dist/mcp/tools/estimate.js.map +1 -1
- package/dist/mcp/tools/graph.d.ts.map +1 -1
- package/dist/mcp/tools/graph.js +142 -157
- package/dist/mcp/tools/graph.js.map +1 -1
- package/dist/mcp/tools/issue.d.ts.map +1 -1
- package/dist/mcp/tools/issue.js +172 -172
- package/dist/mcp/tools/issue.js.map +1 -1
- package/dist/mcp/tools/push.d.ts.map +1 -1
- package/dist/mcp/tools/push.js +70 -100
- package/dist/mcp/tools/push.js.map +1 -1
- package/dist/mcp/tools/query.d.ts.map +1 -1
- package/dist/mcp/tools/query.js +187 -246
- package/dist/mcp/tools/query.js.map +1 -1
- package/dist/mcp/tools/search.d.ts.map +1 -1
- package/dist/mcp/tools/search.js +25 -22
- package/dist/mcp/tools/search.js.map +1 -1
- package/dist/mcp/tools/workspace.d.ts.map +1 -1
- package/dist/mcp/tools/workspace.js +120 -73
- package/dist/mcp/tools/workspace.js.map +1 -1
- package/dist/use-cases/build-graph.d.ts +1 -1
- package/dist/use-cases/build-graph.d.ts.map +1 -1
- package/dist/use-cases/build-graph.js +63 -50
- package/dist/use-cases/build-graph.js.map +1 -1
- package/dist/use-cases/code-search.d.ts +29 -5
- package/dist/use-cases/code-search.d.ts.map +1 -1
- package/dist/use-cases/code-search.js +98 -9
- package/dist/use-cases/code-search.js.map +1 -1
- package/dist/use-cases/embed.d.ts +1 -1
- package/dist/use-cases/embed.d.ts.map +1 -1
- package/dist/use-cases/embed.js +5 -5
- package/dist/use-cases/embed.js.map +1 -1
- package/dist/use-cases/index-code.js +2 -2
- package/dist/use-cases/index-code.js.map +1 -1
- package/dist/use-cases/init/bootstrap-hub.d.ts +55 -0
- package/dist/use-cases/init/bootstrap-hub.d.ts.map +1 -0
- package/dist/use-cases/init/bootstrap-hub.js +116 -0
- package/dist/use-cases/init/bootstrap-hub.js.map +1 -0
- package/dist/use-cases/init/check-dims-conflict.d.ts +33 -0
- package/dist/use-cases/init/check-dims-conflict.d.ts.map +1 -0
- package/dist/use-cases/init/check-dims-conflict.js +39 -0
- package/dist/use-cases/init/check-dims-conflict.js.map +1 -0
- package/dist/use-cases/init/check-hub-exists.d.ts +23 -0
- package/dist/use-cases/init/check-hub-exists.d.ts.map +1 -0
- package/dist/use-cases/init/check-hub-exists.js +39 -0
- package/dist/use-cases/init/check-hub-exists.js.map +1 -0
- package/dist/use-cases/init/check-ports.d.ts +18 -0
- package/dist/use-cases/init/check-ports.d.ts.map +1 -0
- package/dist/use-cases/init/check-ports.js +25 -0
- package/dist/use-cases/init/check-ports.js.map +1 -0
- package/dist/use-cases/init/check-versions.d.ts +37 -0
- package/dist/use-cases/init/check-versions.d.ts.map +1 -0
- package/dist/use-cases/init/check-versions.js +50 -0
- package/dist/use-cases/init/check-versions.js.map +1 -0
- package/dist/use-cases/init/clear-stale-active.d.ts +20 -0
- package/dist/use-cases/init/clear-stale-active.d.ts.map +1 -0
- package/dist/use-cases/init/clear-stale-active.js +26 -0
- package/dist/use-cases/init/clear-stale-active.js.map +1 -0
- package/dist/use-cases/init/ensure-embedding-model.d.ts +20 -0
- package/dist/use-cases/init/ensure-embedding-model.d.ts.map +1 -0
- package/dist/use-cases/init/ensure-embedding-model.js +24 -0
- package/dist/use-cases/init/ensure-embedding-model.js.map +1 -0
- package/dist/use-cases/init/ensure-ollama-running.d.ts +19 -0
- package/dist/use-cases/init/ensure-ollama-running.d.ts.map +1 -0
- package/dist/use-cases/init/ensure-ollama-running.js +24 -0
- package/dist/use-cases/init/ensure-ollama-running.js.map +1 -0
- package/dist/use-cases/init/health-check-existing-llm.d.ts +25 -0
- package/dist/use-cases/init/health-check-existing-llm.d.ts.map +1 -0
- package/dist/use-cases/init/health-check-existing-llm.js +42 -0
- package/dist/use-cases/init/health-check-existing-llm.js.map +1 -0
- package/dist/use-cases/init/install-ollama.d.ts +27 -0
- package/dist/use-cases/init/install-ollama.d.ts.map +1 -0
- package/dist/use-cases/init/install-ollama.js +51 -0
- package/dist/use-cases/init/install-ollama.js.map +1 -0
- package/dist/use-cases/init/probe-llm.d.ts +32 -0
- package/dist/use-cases/init/probe-llm.d.ts.map +1 -0
- package/dist/use-cases/init/probe-llm.js +42 -0
- package/dist/use-cases/init/probe-llm.js.map +1 -0
- package/dist/use-cases/init/resolve-hub-ports.d.ts +46 -0
- package/dist/use-cases/init/resolve-hub-ports.d.ts.map +1 -0
- package/dist/use-cases/init/resolve-hub-ports.js +77 -0
- package/dist/use-cases/init/resolve-hub-ports.js.map +1 -0
- package/dist/use-cases/init/validate-workspace-name.d.ts +26 -0
- package/dist/use-cases/init/validate-workspace-name.d.ts.map +1 -0
- package/dist/use-cases/init/validate-workspace-name.js +39 -0
- package/dist/use-cases/init/validate-workspace-name.js.map +1 -0
- package/dist/use-cases/init/wait-for-docker.d.ts +16 -0
- package/dist/use-cases/init/wait-for-docker.d.ts.map +1 -0
- package/dist/use-cases/init/wait-for-docker.js +16 -0
- package/dist/use-cases/init/wait-for-docker.js.map +1 -0
- package/dist/use-cases/init/write-config-env.d.ts +32 -0
- package/dist/use-cases/init/write-config-env.d.ts.map +1 -0
- package/dist/use-cases/init/write-config-env.js +118 -0
- package/dist/use-cases/init/write-config-env.js.map +1 -0
- package/dist/use-cases/move-task.js +2 -2
- package/dist/use-cases/move-task.js.map +1 -1
- package/dist/use-cases/pull-db.d.ts +1 -1
- package/dist/use-cases/pull-db.d.ts.map +1 -1
- package/dist/use-cases/pull-db.js +3 -3
- package/dist/use-cases/pull-db.js.map +1 -1
- package/dist/use-cases/pull-git.d.ts +1 -1
- package/dist/use-cases/pull-git.d.ts.map +1 -1
- package/dist/use-cases/pull-git.js +5 -5
- package/dist/use-cases/pull-git.js.map +1 -1
- package/dist/use-cases/pull-github.d.ts +1 -1
- package/dist/use-cases/pull-github.d.ts.map +1 -1
- package/dist/use-cases/pull-github.js +6 -6
- package/dist/use-cases/pull-github.js.map +1 -1
- package/dist/use-cases/pull.d.ts +1 -1
- package/dist/use-cases/pull.d.ts.map +1 -1
- package/dist/use-cases/pull.js +6 -6
- package/dist/use-cases/pull.js.map +1 -1
- package/dist/use-cases/push.d.ts +2 -2
- package/dist/use-cases/push.d.ts.map +1 -1
- package/dist/use-cases/push.js +8 -8
- package/dist/use-cases/push.js.map +1 -1
- package/dist/use-cases/register-code-project.d.ts +8 -0
- package/dist/use-cases/register-code-project.d.ts.map +1 -1
- package/dist/use-cases/register-code-project.js +8 -0
- package/dist/use-cases/register-code-project.js.map +1 -1
- package/dist/use-cases/watch-code.js +1 -1
- package/dist/use-cases/watch-code.js.map +1 -1
- package/dist/workspace/active-workspace.d.ts +26 -0
- package/dist/workspace/active-workspace.d.ts.map +1 -0
- package/dist/workspace/active-workspace.js +69 -0
- package/dist/workspace/active-workspace.js.map +1 -0
- package/dist/workspace/adf.d.ts.map +1 -1
- package/dist/workspace/adf.js +20 -19
- package/dist/workspace/adf.js.map +1 -1
- package/dist/workspace/config.d.ts +11 -0
- package/dist/workspace/config.d.ts.map +1 -1
- package/dist/workspace/config.js +76 -22
- package/dist/workspace/config.js.map +1 -1
- package/dist/workspace/hub-config.d.ts +74 -0
- package/dist/workspace/hub-config.d.ts.map +1 -0
- package/dist/workspace/hub-config.js +164 -0
- package/dist/workspace/hub-config.js.map +1 -0
- package/dist/workspace/registry.d.ts +23 -3
- package/dist/workspace/registry.d.ts.map +1 -1
- package/dist/workspace/registry.js +32 -14
- package/dist/workspace/registry.js.map +1 -1
- package/dist/workspace/resolver.d.ts +20 -18
- package/dist/workspace/resolver.d.ts.map +1 -1
- package/dist/workspace/resolver.js +100 -59
- package/dist/workspace/resolver.js.map +1 -1
- package/package.json +4 -2
- package/templates/hub-config.env +65 -0
- package/templates/hub-docker-compose.yml +88 -0
- package/templates/migrate-to-hub.sql +90 -0
- package/dist/cli/workspaces.d.ts +0 -3
- package/dist/cli/workspaces.d.ts.map +0 -1
- package/dist/cli/workspaces.js +0 -34
- package/dist/cli/workspaces.js.map +0 -1
package/dist/cli/sync.js
CHANGED
|
@@ -1,144 +1,103 @@
|
|
|
1
1
|
import chalk from 'chalk';
|
|
2
2
|
import ora from 'ora';
|
|
3
|
-
import dotenv from 'dotenv';
|
|
4
|
-
import { requireWorkspace } from '../workspace/resolver.js';
|
|
5
|
-
import { readConfig, writeConfig, getEnabledSources } from '../workspace/config.js';
|
|
6
3
|
import { JiraProvider } from '../adapters/jira/index.js';
|
|
7
|
-
import { ProxyJiraProvider,
|
|
4
|
+
import { ProxyJiraProvider, loadProxyConfigForWorkspace, proxyConfigExistsForWorkspace, } from '../adapters/jira-proxy/index.js';
|
|
8
5
|
import { GitProvider } from '../adapters/git/index.js';
|
|
9
6
|
import { CsvProvider } from '../adapters/csv/index.js';
|
|
7
|
+
import { GitHubProvider } from '../adapters/github/index.js';
|
|
8
|
+
import { DbProvider } from '../adapters/db/index.js';
|
|
10
9
|
import { PostgresStorage } from '../adapters/postgres/index.js';
|
|
11
10
|
import { PullUseCase } from '../use-cases/pull.js';
|
|
12
11
|
import { PullGitUseCase } from '../use-cases/pull-git.js';
|
|
13
|
-
import { GitHubProvider } from '../adapters/github/index.js';
|
|
14
12
|
import { PullGitHubUseCase } from '../use-cases/pull-github.js';
|
|
15
|
-
import { DbProvider } from '../adapters/db/index.js';
|
|
16
13
|
import { PullDbUseCase } from '../use-cases/pull-db.js';
|
|
17
|
-
import {
|
|
18
|
-
import {
|
|
19
|
-
import {
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
function createStorage(workspaceRoot) {
|
|
24
|
-
dotenv.config({ path: `${workspaceRoot}/.env`, quiet: true });
|
|
25
|
-
return new PostgresStorage({
|
|
26
|
-
host: process.env['DB_HOST'] ?? 'localhost',
|
|
27
|
-
port: parseInt(process.env['DB_PORT'] ?? '5434', 10),
|
|
28
|
-
user: process.env['DB_USER'] ?? 'argustack',
|
|
29
|
-
password: process.env['DB_PASSWORD'] ?? 'argustack_local',
|
|
30
|
-
database: process.env['DB_NAME'] ?? 'argustack',
|
|
31
|
-
});
|
|
14
|
+
import { loadHubConfig } from '../workspace/hub-config.js';
|
|
15
|
+
import { openHubStore, resolveWorkspaceFlag } from './add/shared.js';
|
|
16
|
+
import { ALL_SOURCES } from '../core/types/index.js';
|
|
17
|
+
function createStorage() {
|
|
18
|
+
const hub = loadHubConfig();
|
|
19
|
+
return new PostgresStorage(hub.db);
|
|
32
20
|
}
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
21
|
+
function resolveJiraProjectKeys(workspace, options) {
|
|
22
|
+
if (options.project !== undefined && options.project !== '') {
|
|
23
|
+
return [options.project];
|
|
24
|
+
}
|
|
25
|
+
const bound = workspace.settings?.jiraProjectKeys;
|
|
26
|
+
if (bound !== undefined) {
|
|
27
|
+
return [...bound];
|
|
28
|
+
}
|
|
29
|
+
return [];
|
|
30
|
+
}
|
|
31
|
+
async function syncJira(workspace, options) {
|
|
32
|
+
const hub = loadHubConfig();
|
|
33
|
+
const projectKeys = resolveJiraProjectKeys(workspace, options);
|
|
34
|
+
if (projectKeys.length === 0) {
|
|
35
|
+
console.log(chalk.yellow(` No Jira projects bound to workspace "${workspace.id}"`));
|
|
36
|
+
console.log(chalk.dim(` Run: argustack add jira --workspace ${workspace.id} --projects KEY,KEY2`));
|
|
37
|
+
return;
|
|
42
38
|
}
|
|
43
|
-
const useProxy = proxyConfigExists(workspaceRoot);
|
|
44
39
|
let source;
|
|
45
|
-
if (
|
|
46
|
-
const proxyConfig =
|
|
47
|
-
source = new ProxyJiraProvider(proxyConfig
|
|
40
|
+
if (proxyConfigExistsForWorkspace(workspace.id)) {
|
|
41
|
+
const proxyConfig = loadProxyConfigForWorkspace(workspace.id);
|
|
42
|
+
source = new ProxyJiraProvider(proxyConfig);
|
|
48
43
|
console.log(chalk.dim(` Using proxy: ${proxyConfig.name}`));
|
|
49
44
|
}
|
|
50
|
-
else
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
const jiraToken = process.env['JIRA_API_TOKEN'];
|
|
54
|
-
if (!jiraUrl || !jiraEmail || !jiraToken) {
|
|
55
|
-
console.log(chalk.red(' Missing Jira credentials in .env'));
|
|
56
|
-
console.log(chalk.dim(' Required: JIRA_URL, JIRA_EMAIL, JIRA_API_TOKEN'));
|
|
57
|
-
process.exit(1);
|
|
58
|
-
}
|
|
45
|
+
else if (hub.credentials.jiraUrl !== undefined && hub.credentials.jiraUrl !== '' &&
|
|
46
|
+
hub.credentials.jiraEmail !== undefined && hub.credentials.jiraEmail !== '' &&
|
|
47
|
+
hub.credentials.jiraApiToken !== undefined && hub.credentials.jiraApiToken !== '') {
|
|
59
48
|
source = new JiraProvider({
|
|
60
|
-
host: jiraUrl,
|
|
61
|
-
email: jiraEmail,
|
|
62
|
-
apiToken:
|
|
63
|
-
}
|
|
49
|
+
host: hub.credentials.jiraUrl,
|
|
50
|
+
email: hub.credentials.jiraEmail,
|
|
51
|
+
apiToken: hub.credentials.jiraApiToken,
|
|
52
|
+
});
|
|
53
|
+
}
|
|
54
|
+
else {
|
|
55
|
+
console.log(chalk.red(' Missing Jira credentials in ~/.argustack/config.env'));
|
|
56
|
+
console.log(chalk.dim(` Run: argustack add jira --workspace ${workspace.id} --url ... --email ... --token ...`));
|
|
57
|
+
return;
|
|
64
58
|
}
|
|
65
|
-
const
|
|
66
|
-
.split(',')
|
|
67
|
-
.map((p) => p.trim())
|
|
68
|
-
.filter(Boolean);
|
|
69
|
-
const storage = createStorage(workspaceRoot);
|
|
59
|
+
const storage = createStorage();
|
|
70
60
|
const spinner = ora('Syncing Jira...').start();
|
|
71
61
|
try {
|
|
72
|
-
const projectKeys
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
:
|
|
77
|
-
if (projectKeys) {
|
|
78
|
-
const allResults = [];
|
|
79
|
-
for (const projectKey of projectKeys) {
|
|
80
|
-
const pullUseCase = new PullUseCase(source, storage);
|
|
81
|
-
const results = await pullUseCase.execute({
|
|
82
|
-
projectKey,
|
|
83
|
-
...(options.since ? { since: options.since } : {}),
|
|
84
|
-
onProgress: (msg) => { spinner.text = msg; },
|
|
85
|
-
});
|
|
86
|
-
allResults.push(...results);
|
|
87
|
-
}
|
|
88
|
-
spinner.succeed('Jira sync complete!');
|
|
89
|
-
console.log('');
|
|
90
|
-
for (const r of allResults) {
|
|
91
|
-
console.log(chalk.green(` ${r.projectKey}: ${String(r.issuesCount)} issues, ${String(r.commentsCount)} comments, ${String(r.changelogsCount)} changelogs`));
|
|
92
|
-
}
|
|
93
|
-
}
|
|
94
|
-
else {
|
|
95
|
-
const pullUseCase = new PullUseCase(source, storage);
|
|
96
|
-
const results = await pullUseCase.execute({
|
|
97
|
-
...(options.since ? { since: options.since } : {}),
|
|
62
|
+
for (const projectKey of projectKeys) {
|
|
63
|
+
const pull = new PullUseCase(source, storage);
|
|
64
|
+
const results = await pull.execute(workspace.id, {
|
|
65
|
+
projectKey,
|
|
66
|
+
...(options.since !== undefined && options.since !== '' ? { since: options.since } : {}),
|
|
98
67
|
onProgress: (msg) => { spinner.text = msg; },
|
|
99
68
|
});
|
|
100
|
-
spinner.succeed('Jira sync complete!');
|
|
101
|
-
console.log('');
|
|
102
69
|
for (const r of results) {
|
|
103
70
|
console.log(chalk.green(` ${r.projectKey}: ${String(r.issuesCount)} issues, ${String(r.commentsCount)} comments, ${String(r.changelogsCount)} changelogs`));
|
|
104
71
|
}
|
|
105
72
|
}
|
|
106
|
-
|
|
73
|
+
spinner.succeed('Jira sync complete!');
|
|
74
|
+
}
|
|
75
|
+
catch (err) {
|
|
76
|
+
spinner.fail(`Jira sync failed: ${err instanceof Error ? err.message : String(err)}`);
|
|
107
77
|
}
|
|
108
78
|
finally {
|
|
109
79
|
await storage.close();
|
|
110
80
|
}
|
|
111
81
|
}
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
dotenv.config({ path: `${workspaceRoot}/.env`, quiet: true });
|
|
119
|
-
const rawPaths = process.env['GIT_REPO_PATHS'] ?? process.env['GIT_REPO_PATH'];
|
|
120
|
-
if (!rawPaths) {
|
|
121
|
-
console.log(chalk.red(' Missing Git repo paths in .env'));
|
|
122
|
-
console.log(chalk.dim(' Required: GIT_REPO_PATHS'));
|
|
123
|
-
process.exit(1);
|
|
82
|
+
async function syncGit(workspace, options) {
|
|
83
|
+
const repos = workspace.settings?.gitRepoPaths ?? [];
|
|
84
|
+
if (repos.length === 0) {
|
|
85
|
+
console.log(chalk.yellow(` No git repos bound to workspace "${workspace.id}"`));
|
|
86
|
+
console.log(chalk.dim(` Run: argustack add git --workspace ${workspace.id} --root /path/to/repo`));
|
|
87
|
+
return;
|
|
124
88
|
}
|
|
125
|
-
const
|
|
126
|
-
if (repoPaths.length === 0) {
|
|
127
|
-
console.log(chalk.red(' No Git repo paths configured in .env'));
|
|
128
|
-
process.exit(1);
|
|
129
|
-
}
|
|
130
|
-
const storage = createStorage(workspaceRoot);
|
|
89
|
+
const storage = createStorage();
|
|
131
90
|
const spinner = ora('Syncing Git...').start();
|
|
91
|
+
const since = options.since !== undefined && options.since !== '' ? new Date(options.since) : undefined;
|
|
132
92
|
try {
|
|
133
|
-
const
|
|
134
|
-
for (const repoPath of repoPaths) {
|
|
93
|
+
for (const repoPath of repos) {
|
|
135
94
|
const repoName = repoPath.split('/').pop() ?? repoPath;
|
|
136
|
-
spinner.text = `Syncing Git: ${repoName}
|
|
95
|
+
spinner.text = `Syncing Git: ${repoName}`;
|
|
137
96
|
try {
|
|
138
97
|
const git = new GitProvider(repoPath);
|
|
139
|
-
const
|
|
140
|
-
const result = await
|
|
141
|
-
...(since ? { since } : {}),
|
|
98
|
+
const pull = new PullGitUseCase(git, storage);
|
|
99
|
+
const result = await pull.execute(workspace.id, repoPath, {
|
|
100
|
+
...(since != null ? { since } : {}),
|
|
142
101
|
onProgress: (msg) => { spinner.text = msg; },
|
|
143
102
|
});
|
|
144
103
|
console.log(chalk.green(` ✓ ${repoName}: ${String(result.commitsCount)} commits, ${String(result.filesCount)} files, ${String(result.issueRefsCount)} issue refs`));
|
|
@@ -148,273 +107,183 @@ async function syncGit(workspaceRoot, options) {
|
|
|
148
107
|
}
|
|
149
108
|
}
|
|
150
109
|
spinner.succeed('Git sync complete!');
|
|
151
|
-
console.log('');
|
|
152
110
|
}
|
|
153
111
|
finally {
|
|
154
112
|
await storage.close();
|
|
155
113
|
}
|
|
156
114
|
}
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
const githubToken = process.env['GITHUB_TOKEN'];
|
|
163
|
-
const githubOwner = process.env['GITHUB_OWNER'];
|
|
164
|
-
const githubRepo = process.env['GITHUB_REPO'];
|
|
165
|
-
if (!githubToken || !githubOwner || !githubRepo) {
|
|
166
|
-
console.log(chalk.red(' Missing GitHub credentials in .env'));
|
|
167
|
-
console.log(chalk.dim(' Required: GITHUB_TOKEN, GITHUB_OWNER, GITHUB_REPO'));
|
|
168
|
-
process.exit(1);
|
|
115
|
+
async function syncGithub(workspace, options) {
|
|
116
|
+
const hub = loadHubConfig();
|
|
117
|
+
if (hub.credentials.githubToken === undefined || hub.credentials.githubToken === '') {
|
|
118
|
+
console.log(chalk.red(' Missing GITHUB_TOKEN in ~/.argustack/config.env'));
|
|
119
|
+
return;
|
|
169
120
|
}
|
|
170
|
-
const
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
121
|
+
const repos = workspace.settings?.githubRepos ?? [];
|
|
122
|
+
if (repos.length === 0) {
|
|
123
|
+
console.log(chalk.yellow(` No GitHub repos bound to workspace "${workspace.id}"`));
|
|
124
|
+
console.log(chalk.dim(` Run: argustack add github --workspace ${workspace.id} --owner X --repo Y`));
|
|
125
|
+
return;
|
|
126
|
+
}
|
|
127
|
+
const storage = createStorage();
|
|
176
128
|
const spinner = ora('Syncing GitHub PRs...').start();
|
|
129
|
+
const since = options.since !== undefined && options.since !== '' ? new Date(options.since) : undefined;
|
|
177
130
|
try {
|
|
178
|
-
const
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
131
|
+
for (const { owner, repo } of repos) {
|
|
132
|
+
const provider = new GitHubProvider({ token: hub.credentials.githubToken, owner, repo });
|
|
133
|
+
const pull = new PullGitHubUseCase(provider, storage);
|
|
134
|
+
const repoFullName = `${owner}/${repo}`;
|
|
135
|
+
spinner.text = `Syncing GitHub: ${repoFullName}`;
|
|
136
|
+
const result = await pull.execute(workspace.id, repoFullName, {
|
|
137
|
+
...(since != null ? { since } : {}),
|
|
138
|
+
onProgress: (msg) => { spinner.text = msg; },
|
|
139
|
+
});
|
|
140
|
+
console.log(chalk.green(` ✓ ${repoFullName}: ${String(result.prsCount)} PRs, ${String(result.reviewsCount)} reviews, ${String(result.releasesCount)} releases`));
|
|
141
|
+
}
|
|
185
142
|
spinner.succeed('GitHub sync complete!');
|
|
186
|
-
console.log('');
|
|
187
|
-
console.log(chalk.green(` ${result.prsCount} PRs, ${result.reviewsCount} reviews, ${result.releasesCount} releases`));
|
|
188
|
-
console.log('');
|
|
189
143
|
}
|
|
190
144
|
finally {
|
|
191
145
|
await storage.close();
|
|
192
146
|
}
|
|
193
147
|
}
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
console.log(chalk.red(' Missing CSV file path'));
|
|
202
|
-
console.log(chalk.dim(' Use --file <path> or set CSV_FILE_PATH in .env'));
|
|
203
|
-
process.exit(1);
|
|
148
|
+
async function syncCsv(workspace, options) {
|
|
149
|
+
const explicit = options.file;
|
|
150
|
+
const bound = workspace.settings?.csvFilePaths ?? [];
|
|
151
|
+
const paths = explicit !== undefined && explicit !== '' ? [explicit] : bound.map((b) => b.path);
|
|
152
|
+
if (paths.length === 0) {
|
|
153
|
+
console.log(chalk.yellow(` No CSV files bound to workspace "${workspace.id}"`));
|
|
154
|
+
return;
|
|
204
155
|
}
|
|
205
|
-
const
|
|
206
|
-
const storage = createStorage(workspaceRoot);
|
|
156
|
+
const storage = createStorage();
|
|
207
157
|
const spinner = ora('Importing Jira CSV...').start();
|
|
208
158
|
try {
|
|
209
|
-
const
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
: projects.map((p) => p.key);
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
159
|
+
for (const csvFilePath of paths) {
|
|
160
|
+
const source = new CsvProvider(csvFilePath);
|
|
161
|
+
const projects = await source.getProjects();
|
|
162
|
+
const projectKeys = options.project !== undefined && options.project !== '' ? [options.project] : projects.map((p) => p.key);
|
|
163
|
+
for (const projectKey of projectKeys) {
|
|
164
|
+
const pull = new PullUseCase(source, storage);
|
|
165
|
+
const results = await pull.execute(workspace.id, {
|
|
166
|
+
projectKey,
|
|
167
|
+
...(options.since !== undefined && options.since !== '' ? { since: options.since } : {}),
|
|
168
|
+
onProgress: (msg) => { spinner.text = msg; },
|
|
169
|
+
});
|
|
170
|
+
for (const r of results) {
|
|
171
|
+
console.log(chalk.green(` ${r.projectKey}: ${String(r.issuesCount)} issues, ${String(r.commentsCount)} comments`));
|
|
172
|
+
}
|
|
173
|
+
}
|
|
222
174
|
}
|
|
223
175
|
spinner.succeed('CSV import complete!');
|
|
224
|
-
console.log('');
|
|
225
|
-
for (const r of allResults) {
|
|
226
|
-
console.log(chalk.green(` ${r.projectKey}: ${String(r.issuesCount)} issues, ${String(r.commentsCount)} comments, ${String(r.changelogsCount)} changelogs`));
|
|
227
|
-
}
|
|
228
|
-
console.log('');
|
|
229
176
|
}
|
|
230
177
|
finally {
|
|
231
178
|
await storage.close();
|
|
232
179
|
}
|
|
233
180
|
}
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
export async function syncJiraFromInit(workspaceRoot) {
|
|
240
|
-
await syncJira(workspaceRoot, { since: '1970-01-01' });
|
|
241
|
-
}
|
|
242
|
-
export async function syncGitFromInit(workspaceRoot) {
|
|
243
|
-
await syncGit(workspaceRoot, { since: '1970-01-01' });
|
|
244
|
-
}
|
|
245
|
-
export async function syncGithubFromInit(workspaceRoot) {
|
|
246
|
-
await syncGithub(workspaceRoot, { since: '1970-01-01' });
|
|
247
|
-
}
|
|
248
|
-
export async function syncCsvFromInit(workspaceRoot, filePath) {
|
|
249
|
-
await syncCsv(workspaceRoot, { since: '1970-01-01', ...(filePath ? { file: filePath } : {}) });
|
|
250
|
-
}
|
|
251
|
-
/**
|
|
252
|
-
* Sync external database schema → PostgreSQL.
|
|
253
|
-
*/
|
|
254
|
-
async function syncDb(workspaceRoot, _options) {
|
|
255
|
-
dotenv.config({ path: `${workspaceRoot}/.env`, quiet: true });
|
|
256
|
-
const engine = (process.env['TARGET_DB_ENGINE'] ?? 'postgresql');
|
|
257
|
-
const host = process.env['TARGET_DB_HOST'];
|
|
258
|
-
const port = process.env['TARGET_DB_PORT'];
|
|
259
|
-
const user = process.env['TARGET_DB_USER'];
|
|
260
|
-
const password = process.env['TARGET_DB_PASSWORD'];
|
|
261
|
-
const database = process.env['TARGET_DB_NAME'];
|
|
262
|
-
if (!host || !user || !database) {
|
|
263
|
-
console.log(chalk.red(' Missing target database credentials in .env'));
|
|
264
|
-
console.log(chalk.dim(' Required: TARGET_DB_HOST, TARGET_DB_USER, TARGET_DB_NAME'));
|
|
265
|
-
process.exit(1);
|
|
181
|
+
async function syncDb(workspace, _options) {
|
|
182
|
+
const dbs = workspace.settings?.dbConfigs ?? [];
|
|
183
|
+
if (dbs.length === 0) {
|
|
184
|
+
console.log(chalk.yellow(` No external DBs bound to workspace "${workspace.id}"`));
|
|
185
|
+
return;
|
|
266
186
|
}
|
|
267
|
-
const
|
|
268
|
-
const db = new DbProvider({
|
|
269
|
-
engine,
|
|
270
|
-
host,
|
|
271
|
-
port: parseInt(port ?? '5432', 10),
|
|
272
|
-
user,
|
|
273
|
-
password: password ?? '',
|
|
274
|
-
database,
|
|
275
|
-
name: sourceName,
|
|
276
|
-
});
|
|
277
|
-
const storage = createStorage(workspaceRoot);
|
|
187
|
+
const storage = createStorage();
|
|
278
188
|
const spinner = ora('Syncing database schema...').start();
|
|
279
189
|
try {
|
|
280
|
-
const
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
190
|
+
for (const cfg of dbs) {
|
|
191
|
+
const provider = new DbProvider({
|
|
192
|
+
engine: cfg.engine,
|
|
193
|
+
host: cfg.host,
|
|
194
|
+
port: cfg.port,
|
|
195
|
+
user: cfg.user,
|
|
196
|
+
password: cfg.password,
|
|
197
|
+
database: cfg.database,
|
|
198
|
+
name: cfg.name,
|
|
199
|
+
});
|
|
200
|
+
const pull = new PullDbUseCase(provider, storage);
|
|
201
|
+
const result = await pull.execute(workspace.id, cfg.name, {
|
|
202
|
+
onProgress: (msg) => { spinner.text = msg; },
|
|
203
|
+
});
|
|
204
|
+
console.log(chalk.green(` ✓ ${cfg.name}: ${String(result.tablesCount)} tables, ${String(result.columnsCount)} columns`));
|
|
205
|
+
}
|
|
206
|
+
spinner.succeed('DB sync complete!');
|
|
288
207
|
}
|
|
289
208
|
finally {
|
|
290
209
|
await storage.close();
|
|
291
210
|
}
|
|
292
211
|
}
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
*
|
|
299
|
-
* Usage:
|
|
300
|
-
* argustack sync — sync all enabled sources
|
|
301
|
-
* argustack sync jira — sync Jira only
|
|
302
|
-
* argustack sync jira -p KEY — sync specific project
|
|
303
|
-
* argustack sync jira --since 2024-01-01
|
|
304
|
-
*/
|
|
305
|
-
async function resolveTypeNamesToIds(names, workspaceRoot) {
|
|
306
|
-
try {
|
|
307
|
-
dotenv.config({ path: `${workspaceRoot}/.env`, quiet: true });
|
|
308
|
-
const jiraUrl = process.env['JIRA_URL'];
|
|
309
|
-
const jiraEmail = process.env['JIRA_EMAIL'];
|
|
310
|
-
const jiraToken = process.env['JIRA_API_TOKEN'];
|
|
311
|
-
if (!jiraUrl || !jiraEmail || !jiraToken) {
|
|
312
|
-
return undefined;
|
|
313
|
-
}
|
|
314
|
-
const { Version3Client } = await import('jira.js');
|
|
315
|
-
const client = new Version3Client({
|
|
316
|
-
host: jiraUrl,
|
|
317
|
-
authentication: { basic: { email: jiraEmail, apiToken: jiraToken } },
|
|
318
|
-
});
|
|
319
|
-
const allTypes = await client.issueTypes.getIssueAllTypes();
|
|
320
|
-
const nameSet = new Set(names);
|
|
321
|
-
const ids = allTypes
|
|
322
|
-
.filter((t) => typeof t.name === 'string' && typeof t.id === 'string' && nameSet.has(t.name))
|
|
323
|
-
.map((t) => t.id);
|
|
324
|
-
if (ids.length > 0) {
|
|
325
|
-
const wsConfig = readConfig(workspaceRoot);
|
|
326
|
-
if (wsConfig?.sources.jira) {
|
|
327
|
-
wsConfig.sources.jira.issueTypeIds = ids;
|
|
328
|
-
writeConfig(workspaceRoot, wsConfig);
|
|
329
|
-
}
|
|
330
|
-
}
|
|
331
|
-
return ids.length > 0 ? ids : undefined;
|
|
212
|
+
function enabledSourcesFor(workspace) {
|
|
213
|
+
const settings = workspace.settings ?? {};
|
|
214
|
+
const sources = [];
|
|
215
|
+
if ((settings.jiraProjectKeys?.length ?? 0) > 0) {
|
|
216
|
+
sources.push('jira');
|
|
332
217
|
}
|
|
333
|
-
|
|
334
|
-
|
|
218
|
+
if ((settings.gitRepoPaths?.length ?? 0) > 0) {
|
|
219
|
+
sources.push('git');
|
|
335
220
|
}
|
|
221
|
+
if ((settings.githubRepos?.length ?? 0) > 0) {
|
|
222
|
+
sources.push('github');
|
|
223
|
+
}
|
|
224
|
+
if ((settings.csvFilePaths?.length ?? 0) > 0) {
|
|
225
|
+
sources.push('csv');
|
|
226
|
+
}
|
|
227
|
+
if ((settings.dbConfigs?.length ?? 0) > 0) {
|
|
228
|
+
sources.push('db');
|
|
229
|
+
}
|
|
230
|
+
return sources;
|
|
336
231
|
}
|
|
337
232
|
export function registerSyncCommand(program) {
|
|
338
233
|
program
|
|
339
234
|
.command('sync [type]')
|
|
340
|
-
.description('Sync data
|
|
341
|
-
.option('
|
|
342
|
-
.option('--
|
|
235
|
+
.description('Sync data for the active or selected workspace')
|
|
236
|
+
.option('--workspace <name>', 'Target workspace (defaults to active)')
|
|
237
|
+
.option('-p, --project <key>', 'Sync only a specific Jira project key')
|
|
238
|
+
.option('--since <date>', 'Sync entries updated since YYYY-MM-DD')
|
|
343
239
|
.option('-f, --file <path>', 'CSV file path (for csv source)')
|
|
344
240
|
.action(async (type, options) => {
|
|
241
|
+
const { store, close } = await openHubStore();
|
|
345
242
|
try {
|
|
346
|
-
const
|
|
347
|
-
const
|
|
348
|
-
if (
|
|
349
|
-
|
|
350
|
-
process.exit(1);
|
|
243
|
+
const workspaceId = await resolveWorkspaceFlag(store, options.workspace);
|
|
244
|
+
const workspace = await store.getById(workspaceId);
|
|
245
|
+
if (workspace == null) {
|
|
246
|
+
throw new Error(`Workspace "${workspaceId}" disappeared during resolution.`);
|
|
351
247
|
}
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
process.exit(1);
|
|
360
|
-
}
|
|
361
|
-
if (!config.sources[source]?.enabled) {
|
|
362
|
-
console.log(chalk.red(`\n ${SOURCE_META[source].label} is not enabled.`));
|
|
363
|
-
console.log(chalk.dim(` Enable it: ${chalk.cyan(`argustack source add ${source}`)}`));
|
|
364
|
-
process.exit(1);
|
|
365
|
-
}
|
|
366
|
-
sourcesToSync = [source];
|
|
248
|
+
const sources = type !== undefined && type !== ''
|
|
249
|
+
? [type.toLowerCase()]
|
|
250
|
+
: enabledSourcesFor(workspace);
|
|
251
|
+
if (sources.length === 0) {
|
|
252
|
+
console.log(chalk.yellow(`\n No sources configured for "${workspace.name}".`));
|
|
253
|
+
console.log(chalk.dim(` Add one: argustack add jira --workspace ${workspace.id} --projects KEY`));
|
|
254
|
+
return;
|
|
367
255
|
}
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
console.log(chalk.yellow('\n No sources enabled.'));
|
|
372
|
-
console.log(chalk.dim(` Add one: ${chalk.cyan('argustack source add jira')}`));
|
|
373
|
-
process.exit(1);
|
|
256
|
+
for (const s of sources) {
|
|
257
|
+
if (!ALL_SOURCES.includes(s)) {
|
|
258
|
+
throw new Error(`Unknown source "${s}". Available: ${ALL_SOURCES.join(', ')}.`);
|
|
374
259
|
}
|
|
375
260
|
}
|
|
376
261
|
console.log('');
|
|
377
|
-
|
|
378
|
-
const githubToken = process.env['GITHUB_TOKEN'];
|
|
379
|
-
const githubEnabled = config.sources.github?.enabled;
|
|
380
|
-
if (githubToken && !githubEnabled && !type) {
|
|
381
|
-
console.log(chalk.yellow(' ⚠ GitHub token found in .env but "github" source is not enabled.'));
|
|
382
|
-
console.log(chalk.dim(` Enable: ${chalk.cyan('argustack source add github')}\n`));
|
|
383
|
-
}
|
|
384
|
-
for (const source of sourcesToSync) {
|
|
262
|
+
for (const source of sources) {
|
|
385
263
|
switch (source) {
|
|
386
|
-
case 'jira':
|
|
387
|
-
await syncJira(
|
|
388
|
-
break;
|
|
389
|
-
}
|
|
390
|
-
case 'git': {
|
|
391
|
-
await syncGit(workspaceRoot, options);
|
|
392
|
-
break;
|
|
393
|
-
}
|
|
394
|
-
case 'github': {
|
|
395
|
-
await syncGithub(workspaceRoot, options);
|
|
264
|
+
case 'jira':
|
|
265
|
+
await syncJira(workspace, options);
|
|
396
266
|
break;
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
await syncCsv(workspaceRoot, options);
|
|
267
|
+
case 'git':
|
|
268
|
+
await syncGit(workspace, options);
|
|
400
269
|
break;
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
await syncDb(workspaceRoot, options);
|
|
270
|
+
case 'github':
|
|
271
|
+
await syncGithub(workspace, options);
|
|
404
272
|
break;
|
|
405
|
-
|
|
406
|
-
|
|
273
|
+
case 'csv':
|
|
274
|
+
await syncCsv(workspace, options);
|
|
407
275
|
break;
|
|
408
|
-
|
|
409
|
-
|
|
276
|
+
case 'db':
|
|
277
|
+
await syncDb(workspace, options);
|
|
410
278
|
break;
|
|
411
|
-
|
|
279
|
+
case 'board': break;
|
|
280
|
+
case 'code': break;
|
|
412
281
|
}
|
|
413
282
|
}
|
|
283
|
+
await store.touchActive(workspace.id);
|
|
414
284
|
}
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
process.exit(1);
|
|
285
|
+
finally {
|
|
286
|
+
await close();
|
|
418
287
|
}
|
|
419
288
|
});
|
|
420
289
|
}
|