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
|
@@ -1,12 +1,34 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Ensure all tables exist
|
|
2
|
+
* Ensure all tables exist in the Argustack hub Postgres.
|
|
3
|
+
*
|
|
4
|
+
* Hub model: one Postgres database hosts data for many tenants
|
|
5
|
+
* (workspaces). Every data table carries a `workspace_id TEXT NOT NULL
|
|
6
|
+
* REFERENCES workspaces(id) ON DELETE CASCADE` column. Composite UNIQUE
|
|
7
|
+
* and PRIMARY KEY constraints always include `workspace_id` first.
|
|
8
|
+
*
|
|
9
|
+
* Idempotent: safe to call on every CLI/MCP invocation. Re-running on a
|
|
10
|
+
* populated database is a no-op. Migration from legacy per-workspace
|
|
11
|
+
* databases is handled by `argustack migrate-to-hub` (H7) using a
|
|
12
|
+
* separate raw-pg reader.
|
|
3
13
|
*/
|
|
4
14
|
export async function ensureSchema(pool) {
|
|
5
15
|
await pool.query(`CREATE EXTENSION IF NOT EXISTS vector`);
|
|
6
16
|
await pool.query(`
|
|
17
|
+
CREATE TABLE IF NOT EXISTS workspaces (
|
|
18
|
+
id TEXT PRIMARY KEY,
|
|
19
|
+
name TEXT NOT NULL UNIQUE,
|
|
20
|
+
display_name TEXT,
|
|
21
|
+
settings JSONB NOT NULL DEFAULT '{}',
|
|
22
|
+
created_at TIMESTAMPTZ DEFAULT NOW(),
|
|
23
|
+
last_active_at TIMESTAMPTZ DEFAULT NOW()
|
|
24
|
+
)
|
|
25
|
+
`);
|
|
26
|
+
await pool.query(`CREATE INDEX IF NOT EXISTS idx_workspaces_active ON workspaces (last_active_at DESC)`);
|
|
27
|
+
await pool.query(`
|
|
7
28
|
CREATE TABLE IF NOT EXISTS issues (
|
|
8
29
|
id SERIAL PRIMARY KEY,
|
|
9
|
-
|
|
30
|
+
workspace_id TEXT NOT NULL REFERENCES workspaces(id) ON DELETE CASCADE,
|
|
31
|
+
issue_key TEXT NOT NULL,
|
|
10
32
|
issue_id TEXT,
|
|
11
33
|
project_key TEXT,
|
|
12
34
|
summary TEXT NOT NULL,
|
|
@@ -38,56 +60,17 @@ export async function ensureSchema(pool) {
|
|
|
38
60
|
embedding vector(1536),
|
|
39
61
|
search_vector tsvector,
|
|
40
62
|
source VARCHAR(10) DEFAULT 'jira',
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
await pool.query(`ALTER TABLE issues ADD COLUMN IF NOT EXISTS modified_at TIMESTAMP`);
|
|
47
|
-
await pool.query(`ALTER TABLE issues ADD COLUMN IF NOT EXISTS modified_fields TEXT[]`);
|
|
48
|
-
await pool.query(`CREATE INDEX IF NOT EXISTS idx_issues_locally_modified ON issues (locally_modified) WHERE locally_modified = true`);
|
|
49
|
-
await pool.query(`
|
|
50
|
-
CREATE TABLE IF NOT EXISTS graph_entities (
|
|
51
|
-
id SERIAL PRIMARY KEY,
|
|
52
|
-
name TEXT NOT NULL,
|
|
53
|
-
type VARCHAR(50) NOT NULL,
|
|
54
|
-
properties JSONB DEFAULT '{}',
|
|
55
|
-
created_at TIMESTAMP DEFAULT NOW(),
|
|
56
|
-
UNIQUE(name, type)
|
|
57
|
-
)
|
|
58
|
-
`);
|
|
59
|
-
await pool.query(`
|
|
60
|
-
CREATE TABLE IF NOT EXISTS graph_relationships (
|
|
61
|
-
id SERIAL PRIMARY KEY,
|
|
62
|
-
source_id INTEGER REFERENCES graph_entities(id) ON DELETE CASCADE,
|
|
63
|
-
target_id INTEGER REFERENCES graph_entities(id) ON DELETE CASCADE,
|
|
64
|
-
type VARCHAR(50) NOT NULL,
|
|
65
|
-
weight NUMERIC DEFAULT 1,
|
|
66
|
-
source VARCHAR(20) DEFAULT 'structural',
|
|
67
|
-
properties JSONB DEFAULT '{}',
|
|
68
|
-
created_at TIMESTAMP DEFAULT NOW(),
|
|
69
|
-
UNIQUE(source_id, target_id, type)
|
|
70
|
-
)
|
|
71
|
-
`);
|
|
72
|
-
await pool.query(`
|
|
73
|
-
CREATE TABLE IF NOT EXISTS graph_observations (
|
|
74
|
-
id SERIAL PRIMARY KEY,
|
|
75
|
-
entity_id INTEGER REFERENCES graph_entities(id) ON DELETE CASCADE,
|
|
76
|
-
content TEXT NOT NULL,
|
|
77
|
-
author VARCHAR(50) DEFAULT 'claude',
|
|
78
|
-
created_at TIMESTAMP DEFAULT NOW()
|
|
63
|
+
locally_modified BOOLEAN DEFAULT FALSE,
|
|
64
|
+
modified_at TIMESTAMP,
|
|
65
|
+
modified_fields TEXT[],
|
|
66
|
+
pulled_at TIMESTAMP DEFAULT NOW(),
|
|
67
|
+
UNIQUE (workspace_id, issue_key)
|
|
79
68
|
)
|
|
80
69
|
`);
|
|
81
|
-
await pool.query(`CREATE INDEX IF NOT EXISTS idx_graph_entities_name ON graph_entities (name)`);
|
|
82
|
-
await pool.query(`CREATE INDEX IF NOT EXISTS idx_graph_entities_type ON graph_entities (type)`);
|
|
83
|
-
await pool.query(`CREATE INDEX IF NOT EXISTS idx_graph_rel_source ON graph_relationships (source_id)`);
|
|
84
|
-
await pool.query(`CREATE INDEX IF NOT EXISTS idx_graph_rel_target ON graph_relationships (target_id)`);
|
|
85
|
-
await pool.query(`CREATE INDEX IF NOT EXISTS idx_graph_rel_type ON graph_relationships (type)`);
|
|
86
|
-
await pool.query(`CREATE INDEX IF NOT EXISTS idx_graph_rel_origin ON graph_relationships (source)`);
|
|
87
|
-
await pool.query(`CREATE INDEX IF NOT EXISTS idx_graph_obs_entity ON graph_observations (entity_id)`);
|
|
88
70
|
await pool.query(`
|
|
89
71
|
CREATE TABLE IF NOT EXISTS issue_comments (
|
|
90
72
|
id SERIAL PRIMARY KEY,
|
|
73
|
+
workspace_id TEXT NOT NULL REFERENCES workspaces(id) ON DELETE CASCADE,
|
|
91
74
|
issue_key TEXT NOT NULL,
|
|
92
75
|
comment_id TEXT,
|
|
93
76
|
author VARCHAR(100),
|
|
@@ -99,6 +82,7 @@ export async function ensureSchema(pool) {
|
|
|
99
82
|
await pool.query(`
|
|
100
83
|
CREATE TABLE IF NOT EXISTS issue_changelogs (
|
|
101
84
|
id SERIAL PRIMARY KEY,
|
|
85
|
+
workspace_id TEXT NOT NULL REFERENCES workspaces(id) ON DELETE CASCADE,
|
|
102
86
|
issue_key TEXT NOT NULL,
|
|
103
87
|
author VARCHAR(100),
|
|
104
88
|
field VARCHAR(100),
|
|
@@ -110,6 +94,7 @@ export async function ensureSchema(pool) {
|
|
|
110
94
|
await pool.query(`
|
|
111
95
|
CREATE TABLE IF NOT EXISTS issue_worklogs (
|
|
112
96
|
id SERIAL PRIMARY KEY,
|
|
97
|
+
workspace_id TEXT NOT NULL REFERENCES workspaces(id) ON DELETE CASCADE,
|
|
113
98
|
issue_key TEXT NOT NULL,
|
|
114
99
|
author VARCHAR(100),
|
|
115
100
|
time_spent TEXT,
|
|
@@ -121,6 +106,7 @@ export async function ensureSchema(pool) {
|
|
|
121
106
|
await pool.query(`
|
|
122
107
|
CREATE TABLE IF NOT EXISTS issue_links (
|
|
123
108
|
id SERIAL PRIMARY KEY,
|
|
109
|
+
workspace_id TEXT NOT NULL REFERENCES workspaces(id) ON DELETE CASCADE,
|
|
124
110
|
source_key TEXT NOT NULL,
|
|
125
111
|
target_key TEXT NOT NULL,
|
|
126
112
|
link_type VARCHAR(50),
|
|
@@ -129,7 +115,8 @@ export async function ensureSchema(pool) {
|
|
|
129
115
|
`);
|
|
130
116
|
await pool.query(`
|
|
131
117
|
CREATE TABLE IF NOT EXISTS commits (
|
|
132
|
-
|
|
118
|
+
workspace_id TEXT NOT NULL REFERENCES workspaces(id) ON DELETE CASCADE,
|
|
119
|
+
hash VARCHAR(40) NOT NULL,
|
|
133
120
|
message TEXT,
|
|
134
121
|
author VARCHAR(200),
|
|
135
122
|
email VARCHAR(200),
|
|
@@ -137,28 +124,34 @@ export async function ensureSchema(pool) {
|
|
|
137
124
|
parents TEXT[],
|
|
138
125
|
repo_path TEXT,
|
|
139
126
|
search_vector tsvector,
|
|
140
|
-
pulled_at TIMESTAMP DEFAULT NOW()
|
|
127
|
+
pulled_at TIMESTAMP DEFAULT NOW(),
|
|
128
|
+
PRIMARY KEY (workspace_id, hash)
|
|
141
129
|
)
|
|
142
130
|
`);
|
|
143
131
|
await pool.query(`
|
|
144
132
|
CREATE TABLE IF NOT EXISTS commit_files (
|
|
145
133
|
id SERIAL PRIMARY KEY,
|
|
146
|
-
|
|
134
|
+
workspace_id TEXT NOT NULL,
|
|
135
|
+
commit_hash VARCHAR(40) NOT NULL,
|
|
147
136
|
file_path TEXT NOT NULL,
|
|
148
137
|
status TEXT,
|
|
149
138
|
additions INTEGER DEFAULT 0,
|
|
150
|
-
deletions INTEGER DEFAULT 0
|
|
139
|
+
deletions INTEGER DEFAULT 0,
|
|
140
|
+
FOREIGN KEY (workspace_id, commit_hash) REFERENCES commits(workspace_id, hash) ON DELETE CASCADE
|
|
151
141
|
)
|
|
152
142
|
`);
|
|
153
143
|
await pool.query(`
|
|
154
144
|
CREATE TABLE IF NOT EXISTS commit_issue_refs (
|
|
155
|
-
|
|
145
|
+
workspace_id TEXT NOT NULL,
|
|
146
|
+
commit_hash VARCHAR(40) NOT NULL,
|
|
156
147
|
issue_key TEXT NOT NULL,
|
|
157
|
-
PRIMARY KEY (commit_hash, issue_key)
|
|
148
|
+
PRIMARY KEY (workspace_id, commit_hash, issue_key),
|
|
149
|
+
FOREIGN KEY (workspace_id, commit_hash) REFERENCES commits(workspace_id, hash) ON DELETE CASCADE
|
|
158
150
|
)
|
|
159
151
|
`);
|
|
160
152
|
await pool.query(`
|
|
161
153
|
CREATE TABLE IF NOT EXISTS pull_requests (
|
|
154
|
+
workspace_id TEXT NOT NULL REFERENCES workspaces(id) ON DELETE CASCADE,
|
|
162
155
|
number INTEGER NOT NULL,
|
|
163
156
|
repo_full_name VARCHAR(200) NOT NULL,
|
|
164
157
|
title TEXT,
|
|
@@ -180,24 +173,28 @@ export async function ensureSchema(pool) {
|
|
|
180
173
|
raw_json JSONB,
|
|
181
174
|
search_vector tsvector,
|
|
182
175
|
pulled_at TIMESTAMP DEFAULT NOW(),
|
|
183
|
-
PRIMARY KEY (repo_full_name, number)
|
|
176
|
+
PRIMARY KEY (workspace_id, repo_full_name, number)
|
|
184
177
|
)
|
|
185
178
|
`);
|
|
186
179
|
await pool.query(`
|
|
187
180
|
CREATE TABLE IF NOT EXISTS pr_reviews (
|
|
188
181
|
id SERIAL PRIMARY KEY,
|
|
182
|
+
workspace_id TEXT NOT NULL,
|
|
189
183
|
pr_number INTEGER NOT NULL,
|
|
190
184
|
repo_full_name VARCHAR(200) NOT NULL,
|
|
191
185
|
review_id INTEGER NOT NULL,
|
|
192
186
|
reviewer VARCHAR(200),
|
|
193
187
|
state VARCHAR(30),
|
|
194
188
|
body TEXT,
|
|
195
|
-
submitted_at TIMESTAMPTZ
|
|
189
|
+
submitted_at TIMESTAMPTZ,
|
|
190
|
+
FOREIGN KEY (workspace_id, repo_full_name, pr_number)
|
|
191
|
+
REFERENCES pull_requests(workspace_id, repo_full_name, number) ON DELETE CASCADE
|
|
196
192
|
)
|
|
197
193
|
`);
|
|
198
194
|
await pool.query(`
|
|
199
195
|
CREATE TABLE IF NOT EXISTS pr_comments (
|
|
200
196
|
id SERIAL PRIMARY KEY,
|
|
197
|
+
workspace_id TEXT NOT NULL,
|
|
201
198
|
pr_number INTEGER NOT NULL,
|
|
202
199
|
repo_full_name VARCHAR(200) NOT NULL,
|
|
203
200
|
comment_id BIGINT NOT NULL,
|
|
@@ -206,30 +203,39 @@ export async function ensureSchema(pool) {
|
|
|
206
203
|
path TEXT,
|
|
207
204
|
line INTEGER,
|
|
208
205
|
created_at TIMESTAMPTZ,
|
|
209
|
-
updated_at TIMESTAMPTZ
|
|
206
|
+
updated_at TIMESTAMPTZ,
|
|
207
|
+
FOREIGN KEY (workspace_id, repo_full_name, pr_number)
|
|
208
|
+
REFERENCES pull_requests(workspace_id, repo_full_name, number) ON DELETE CASCADE
|
|
210
209
|
)
|
|
211
210
|
`);
|
|
212
211
|
await pool.query(`
|
|
213
212
|
CREATE TABLE IF NOT EXISTS pr_files (
|
|
214
213
|
id SERIAL PRIMARY KEY,
|
|
214
|
+
workspace_id TEXT NOT NULL,
|
|
215
215
|
pr_number INTEGER NOT NULL,
|
|
216
216
|
repo_full_name VARCHAR(200) NOT NULL,
|
|
217
217
|
file_path TEXT NOT NULL,
|
|
218
218
|
status TEXT,
|
|
219
219
|
additions INTEGER DEFAULT 0,
|
|
220
|
-
deletions INTEGER DEFAULT 0
|
|
220
|
+
deletions INTEGER DEFAULT 0,
|
|
221
|
+
FOREIGN KEY (workspace_id, repo_full_name, pr_number)
|
|
222
|
+
REFERENCES pull_requests(workspace_id, repo_full_name, number) ON DELETE CASCADE
|
|
221
223
|
)
|
|
222
224
|
`);
|
|
223
225
|
await pool.query(`
|
|
224
226
|
CREATE TABLE IF NOT EXISTS pr_issue_refs (
|
|
227
|
+
workspace_id TEXT NOT NULL,
|
|
225
228
|
pr_number INTEGER NOT NULL,
|
|
226
229
|
repo_full_name VARCHAR(200) NOT NULL,
|
|
227
230
|
issue_key TEXT NOT NULL,
|
|
228
|
-
PRIMARY KEY (repo_full_name, pr_number, issue_key)
|
|
231
|
+
PRIMARY KEY (workspace_id, repo_full_name, pr_number, issue_key),
|
|
232
|
+
FOREIGN KEY (workspace_id, repo_full_name, pr_number)
|
|
233
|
+
REFERENCES pull_requests(workspace_id, repo_full_name, number) ON DELETE CASCADE
|
|
229
234
|
)
|
|
230
235
|
`);
|
|
231
236
|
await pool.query(`
|
|
232
237
|
CREATE TABLE IF NOT EXISTS releases (
|
|
238
|
+
workspace_id TEXT NOT NULL REFERENCES workspaces(id) ON DELETE CASCADE,
|
|
233
239
|
id INTEGER NOT NULL,
|
|
234
240
|
repo_full_name VARCHAR(200) NOT NULL,
|
|
235
241
|
tag_name VARCHAR(200),
|
|
@@ -243,33 +249,61 @@ export async function ensureSchema(pool) {
|
|
|
243
249
|
raw_json JSONB,
|
|
244
250
|
search_vector tsvector,
|
|
245
251
|
pulled_at TIMESTAMP DEFAULT NOW(),
|
|
246
|
-
PRIMARY KEY (repo_full_name, id)
|
|
252
|
+
PRIMARY KEY (workspace_id, repo_full_name, id)
|
|
253
|
+
)
|
|
254
|
+
`);
|
|
255
|
+
await pool.query(`
|
|
256
|
+
CREATE TABLE IF NOT EXISTS graph_entities (
|
|
257
|
+
id SERIAL PRIMARY KEY,
|
|
258
|
+
workspace_id TEXT NOT NULL REFERENCES workspaces(id) ON DELETE CASCADE,
|
|
259
|
+
name TEXT NOT NULL,
|
|
260
|
+
type VARCHAR(50) NOT NULL,
|
|
261
|
+
properties JSONB DEFAULT '{}',
|
|
262
|
+
created_at TIMESTAMP DEFAULT NOW(),
|
|
263
|
+
UNIQUE (workspace_id, name, type)
|
|
264
|
+
)
|
|
265
|
+
`);
|
|
266
|
+
await pool.query(`
|
|
267
|
+
CREATE TABLE IF NOT EXISTS graph_relationships (
|
|
268
|
+
id SERIAL PRIMARY KEY,
|
|
269
|
+
workspace_id TEXT NOT NULL REFERENCES workspaces(id) ON DELETE CASCADE,
|
|
270
|
+
source_id INTEGER REFERENCES graph_entities(id) ON DELETE CASCADE,
|
|
271
|
+
target_id INTEGER REFERENCES graph_entities(id) ON DELETE CASCADE,
|
|
272
|
+
type VARCHAR(50) NOT NULL,
|
|
273
|
+
weight NUMERIC DEFAULT 1,
|
|
274
|
+
source VARCHAR(20) DEFAULT 'structural',
|
|
275
|
+
properties JSONB DEFAULT '{}',
|
|
276
|
+
created_at TIMESTAMP DEFAULT NOW(),
|
|
277
|
+
UNIQUE (workspace_id, source_id, target_id, type)
|
|
278
|
+
)
|
|
279
|
+
`);
|
|
280
|
+
await pool.query(`
|
|
281
|
+
CREATE TABLE IF NOT EXISTS graph_observations (
|
|
282
|
+
id SERIAL PRIMARY KEY,
|
|
283
|
+
workspace_id TEXT NOT NULL REFERENCES workspaces(id) ON DELETE CASCADE,
|
|
284
|
+
entity_id INTEGER REFERENCES graph_entities(id) ON DELETE CASCADE,
|
|
285
|
+
content TEXT NOT NULL,
|
|
286
|
+
author VARCHAR(50) DEFAULT 'claude',
|
|
287
|
+
created_at TIMESTAMP DEFAULT NOW()
|
|
247
288
|
)
|
|
248
289
|
`);
|
|
249
|
-
await pool.query(`ALTER TABLE issues ADD COLUMN IF NOT EXISTS original_estimate INTEGER`);
|
|
250
|
-
await pool.query(`ALTER TABLE issues ADD COLUMN IF NOT EXISTS remaining_estimate INTEGER`);
|
|
251
|
-
await pool.query(`ALTER TABLE issues ADD COLUMN IF NOT EXISTS time_spent INTEGER`);
|
|
252
|
-
await pool.query(`ALTER TABLE issues ADD COLUMN IF NOT EXISTS assignee_id TEXT`);
|
|
253
|
-
await pool.query(`ALTER TABLE issues ADD COLUMN IF NOT EXISTS reporter_id TEXT`);
|
|
254
|
-
await pool.query(`ALTER TABLE issues ADD COLUMN IF NOT EXISTS search_vector tsvector`);
|
|
255
|
-
await pool.query(`ALTER TABLE commits ADD COLUMN IF NOT EXISTS search_vector tsvector`);
|
|
256
|
-
await pool.query(`ALTER TABLE pull_requests ADD COLUMN IF NOT EXISTS search_vector tsvector`);
|
|
257
|
-
await pool.query(`ALTER TABLE releases ADD COLUMN IF NOT EXISTS search_vector tsvector`);
|
|
258
290
|
await pool.query(`
|
|
259
291
|
CREATE TABLE IF NOT EXISTS db_tables (
|
|
260
292
|
id SERIAL PRIMARY KEY,
|
|
293
|
+
workspace_id TEXT NOT NULL REFERENCES workspaces(id) ON DELETE CASCADE,
|
|
261
294
|
source_name TEXT NOT NULL,
|
|
262
295
|
table_schema TEXT,
|
|
263
296
|
table_name TEXT NOT NULL,
|
|
264
297
|
row_count BIGINT,
|
|
265
298
|
size_bytes BIGINT,
|
|
266
299
|
pulled_at TIMESTAMP DEFAULT NOW(),
|
|
267
|
-
UNIQUE(source_name, table_schema, table_name)
|
|
300
|
+
UNIQUE (workspace_id, source_name, table_schema, table_name)
|
|
268
301
|
)
|
|
269
302
|
`);
|
|
270
303
|
await pool.query(`
|
|
271
304
|
CREATE TABLE IF NOT EXISTS db_columns (
|
|
272
305
|
id SERIAL PRIMARY KEY,
|
|
306
|
+
workspace_id TEXT NOT NULL REFERENCES workspaces(id) ON DELETE CASCADE,
|
|
273
307
|
source_name TEXT NOT NULL,
|
|
274
308
|
table_schema TEXT,
|
|
275
309
|
table_name TEXT NOT NULL,
|
|
@@ -279,42 +313,46 @@ export async function ensureSchema(pool) {
|
|
|
279
313
|
default_value TEXT,
|
|
280
314
|
is_primary_key BOOLEAN DEFAULT FALSE,
|
|
281
315
|
ordinal_position INTEGER,
|
|
282
|
-
UNIQUE(source_name, table_schema, table_name, column_name)
|
|
316
|
+
UNIQUE (workspace_id, source_name, table_schema, table_name, column_name)
|
|
283
317
|
)
|
|
284
318
|
`);
|
|
285
319
|
await pool.query(`
|
|
286
320
|
CREATE TABLE IF NOT EXISTS db_foreign_keys (
|
|
287
321
|
id SERIAL PRIMARY KEY,
|
|
322
|
+
workspace_id TEXT NOT NULL REFERENCES workspaces(id) ON DELETE CASCADE,
|
|
288
323
|
source_name TEXT NOT NULL,
|
|
289
324
|
table_name TEXT NOT NULL,
|
|
290
325
|
column_name TEXT NOT NULL,
|
|
291
326
|
referenced_table TEXT NOT NULL,
|
|
292
327
|
referenced_column TEXT NOT NULL,
|
|
293
|
-
UNIQUE(source_name, table_name, column_name, referenced_table, referenced_column)
|
|
328
|
+
UNIQUE (workspace_id, source_name, table_name, column_name, referenced_table, referenced_column)
|
|
294
329
|
)
|
|
295
330
|
`);
|
|
296
331
|
await pool.query(`
|
|
297
332
|
CREATE TABLE IF NOT EXISTS db_indexes (
|
|
298
333
|
id SERIAL PRIMARY KEY,
|
|
334
|
+
workspace_id TEXT NOT NULL REFERENCES workspaces(id) ON DELETE CASCADE,
|
|
299
335
|
source_name TEXT NOT NULL,
|
|
300
336
|
table_name TEXT NOT NULL,
|
|
301
337
|
index_name TEXT NOT NULL,
|
|
302
338
|
columns TEXT[],
|
|
303
339
|
is_unique BOOLEAN DEFAULT FALSE,
|
|
304
340
|
is_primary BOOLEAN DEFAULT FALSE,
|
|
305
|
-
UNIQUE(source_name, table_name, index_name)
|
|
341
|
+
UNIQUE (workspace_id, source_name, table_name, index_name)
|
|
306
342
|
)
|
|
307
343
|
`);
|
|
308
344
|
await pool.query(`
|
|
309
345
|
CREATE TABLE IF NOT EXISTS code_projects (
|
|
310
346
|
id TEXT PRIMARY KEY,
|
|
347
|
+
workspace_id TEXT NOT NULL UNIQUE REFERENCES workspaces(id) ON DELETE CASCADE,
|
|
311
348
|
name TEXT NOT NULL,
|
|
312
349
|
root_path TEXT NOT NULL,
|
|
313
350
|
language TEXT NOT NULL,
|
|
314
351
|
layer_config JSONB,
|
|
315
352
|
excludes TEXT[],
|
|
316
353
|
created_at TIMESTAMPTZ DEFAULT NOW(),
|
|
317
|
-
last_indexed_at TIMESTAMPTZ
|
|
354
|
+
last_indexed_at TIMESTAMPTZ,
|
|
355
|
+
CHECK (id = workspace_id)
|
|
318
356
|
)
|
|
319
357
|
`);
|
|
320
358
|
await pool.query(`CREATE UNIQUE INDEX IF NOT EXISTS idx_code_projects_root ON code_projects(root_path)`);
|
|
@@ -331,7 +369,7 @@ export async function ensureSchema(pool) {
|
|
|
331
369
|
await pool.query(`
|
|
332
370
|
CREATE TABLE IF NOT EXISTS code_index_jobs (
|
|
333
371
|
id BIGSERIAL PRIMARY KEY,
|
|
334
|
-
project_id TEXT NOT NULL,
|
|
372
|
+
project_id TEXT NOT NULL REFERENCES code_projects(id) ON DELETE CASCADE,
|
|
335
373
|
type TEXT NOT NULL,
|
|
336
374
|
status TEXT NOT NULL,
|
|
337
375
|
started_at TIMESTAMPTZ DEFAULT NOW(),
|
|
@@ -341,51 +379,59 @@ export async function ensureSchema(pool) {
|
|
|
341
379
|
)
|
|
342
380
|
`);
|
|
343
381
|
const indexes = [
|
|
344
|
-
'CREATE INDEX IF NOT EXISTS
|
|
345
|
-
'CREATE INDEX IF NOT EXISTS
|
|
346
|
-
'CREATE INDEX IF NOT EXISTS
|
|
347
|
-
'CREATE INDEX IF NOT EXISTS
|
|
348
|
-
'CREATE INDEX IF NOT EXISTS
|
|
349
|
-
'CREATE INDEX IF NOT EXISTS
|
|
350
|
-
'CREATE INDEX IF NOT EXISTS
|
|
382
|
+
'CREATE INDEX IF NOT EXISTS idx_issues_ws ON issues (workspace_id, updated DESC)',
|
|
383
|
+
'CREATE INDEX IF NOT EXISTS idx_issues_ws_project ON issues (workspace_id, project_key)',
|
|
384
|
+
'CREATE INDEX IF NOT EXISTS idx_issues_ws_status ON issues (workspace_id, status)',
|
|
385
|
+
'CREATE INDEX IF NOT EXISTS idx_issues_ws_type ON issues (workspace_id, issue_type)',
|
|
386
|
+
'CREATE INDEX IF NOT EXISTS idx_issues_ws_assignee ON issues (workspace_id, assignee)',
|
|
387
|
+
'CREATE INDEX IF NOT EXISTS idx_issues_ws_created ON issues (workspace_id, created)',
|
|
388
|
+
'CREATE INDEX IF NOT EXISTS idx_issues_ws_source ON issues (workspace_id, source)',
|
|
389
|
+
`CREATE INDEX IF NOT EXISTS idx_issues_ws_modified ON issues (workspace_id, locally_modified) WHERE locally_modified = true`,
|
|
351
390
|
'CREATE INDEX IF NOT EXISTS idx_issues_search ON issues USING GIN(search_vector)',
|
|
352
391
|
'CREATE INDEX IF NOT EXISTS idx_issues_custom ON issues USING GIN(custom_fields)',
|
|
353
392
|
'CREATE INDEX IF NOT EXISTS idx_issues_raw ON issues USING GIN(raw_json)',
|
|
354
|
-
'CREATE INDEX IF NOT EXISTS
|
|
355
|
-
'CREATE INDEX IF NOT EXISTS
|
|
356
|
-
'CREATE INDEX IF NOT EXISTS
|
|
357
|
-
'CREATE INDEX IF NOT EXISTS
|
|
358
|
-
'CREATE INDEX IF NOT EXISTS
|
|
359
|
-
'CREATE INDEX IF NOT EXISTS
|
|
360
|
-
'CREATE INDEX IF NOT EXISTS
|
|
361
|
-
'CREATE INDEX IF NOT EXISTS
|
|
393
|
+
'CREATE INDEX IF NOT EXISTS idx_comments_ws_key ON issue_comments (workspace_id, issue_key)',
|
|
394
|
+
'CREATE INDEX IF NOT EXISTS idx_changelogs_ws_key ON issue_changelogs (workspace_id, issue_key)',
|
|
395
|
+
'CREATE INDEX IF NOT EXISTS idx_worklogs_ws_key ON issue_worklogs (workspace_id, issue_key)',
|
|
396
|
+
'CREATE INDEX IF NOT EXISTS idx_links_ws_source ON issue_links (workspace_id, source_key)',
|
|
397
|
+
'CREATE INDEX IF NOT EXISTS idx_links_ws_target ON issue_links (workspace_id, target_key)',
|
|
398
|
+
'CREATE INDEX IF NOT EXISTS idx_commits_ws_author ON commits (workspace_id, author)',
|
|
399
|
+
'CREATE INDEX IF NOT EXISTS idx_commits_ws_date ON commits (workspace_id, committed_at DESC)',
|
|
400
|
+
'CREATE INDEX IF NOT EXISTS idx_commits_ws_repo ON commits (workspace_id, repo_path)',
|
|
362
401
|
'CREATE INDEX IF NOT EXISTS idx_commits_search ON commits USING GIN(search_vector)',
|
|
363
|
-
'CREATE INDEX IF NOT EXISTS
|
|
364
|
-
'CREATE INDEX IF NOT EXISTS idx_commit_files_path ON commit_files(file_path)',
|
|
365
|
-
'CREATE INDEX IF NOT EXISTS
|
|
366
|
-
'CREATE INDEX IF NOT EXISTS
|
|
367
|
-
'CREATE INDEX IF NOT EXISTS
|
|
368
|
-
'CREATE INDEX IF NOT EXISTS
|
|
369
|
-
'CREATE INDEX IF NOT EXISTS
|
|
370
|
-
'CREATE INDEX IF NOT EXISTS
|
|
371
|
-
'CREATE INDEX IF NOT EXISTS idx_prs_merge_sha ON pull_requests(merge_commit_sha)',
|
|
402
|
+
'CREATE INDEX IF NOT EXISTS idx_commit_files_ws_hash ON commit_files (workspace_id, commit_hash)',
|
|
403
|
+
'CREATE INDEX IF NOT EXISTS idx_commit_files_path ON commit_files (file_path)',
|
|
404
|
+
'CREATE INDEX IF NOT EXISTS idx_commit_refs_ws_issue ON commit_issue_refs (workspace_id, issue_key)',
|
|
405
|
+
'CREATE INDEX IF NOT EXISTS idx_prs_ws_repo ON pull_requests (workspace_id, repo_full_name)',
|
|
406
|
+
'CREATE INDEX IF NOT EXISTS idx_prs_ws_state ON pull_requests (workspace_id, state)',
|
|
407
|
+
'CREATE INDEX IF NOT EXISTS idx_prs_ws_author ON pull_requests (workspace_id, author)',
|
|
408
|
+
'CREATE INDEX IF NOT EXISTS idx_prs_ws_merged ON pull_requests (workspace_id, merged_at)',
|
|
409
|
+
'CREATE INDEX IF NOT EXISTS idx_prs_ws_updated ON pull_requests (workspace_id, updated_at)',
|
|
410
|
+
'CREATE INDEX IF NOT EXISTS idx_prs_merge_sha ON pull_requests (merge_commit_sha)',
|
|
372
411
|
'CREATE INDEX IF NOT EXISTS idx_prs_search ON pull_requests USING GIN(search_vector)',
|
|
373
|
-
'CREATE INDEX IF NOT EXISTS idx_pr_reviews_pr ON pr_reviews(repo_full_name, pr_number)',
|
|
374
|
-
'CREATE INDEX IF NOT EXISTS idx_pr_comments_pr ON pr_comments(repo_full_name, pr_number)',
|
|
375
|
-
'CREATE INDEX IF NOT EXISTS idx_pr_files_pr ON pr_files(repo_full_name, pr_number)',
|
|
376
|
-
'CREATE INDEX IF NOT EXISTS idx_pr_files_path ON pr_files(file_path)',
|
|
377
|
-
'CREATE INDEX IF NOT EXISTS
|
|
378
|
-
'CREATE INDEX IF NOT EXISTS
|
|
379
|
-
'CREATE INDEX IF NOT EXISTS idx_releases_tag ON releases(tag_name)',
|
|
412
|
+
'CREATE INDEX IF NOT EXISTS idx_pr_reviews_pr ON pr_reviews (workspace_id, repo_full_name, pr_number)',
|
|
413
|
+
'CREATE INDEX IF NOT EXISTS idx_pr_comments_pr ON pr_comments (workspace_id, repo_full_name, pr_number)',
|
|
414
|
+
'CREATE INDEX IF NOT EXISTS idx_pr_files_pr ON pr_files (workspace_id, repo_full_name, pr_number)',
|
|
415
|
+
'CREATE INDEX IF NOT EXISTS idx_pr_files_path ON pr_files (file_path)',
|
|
416
|
+
'CREATE INDEX IF NOT EXISTS idx_pr_refs_ws_issue ON pr_issue_refs (workspace_id, issue_key)',
|
|
417
|
+
'CREATE INDEX IF NOT EXISTS idx_releases_ws_repo ON releases (workspace_id, repo_full_name)',
|
|
418
|
+
'CREATE INDEX IF NOT EXISTS idx_releases_tag ON releases (tag_name)',
|
|
380
419
|
'CREATE INDEX IF NOT EXISTS idx_releases_search ON releases USING GIN(search_vector)',
|
|
381
|
-
'CREATE INDEX IF NOT EXISTS
|
|
382
|
-
'CREATE INDEX IF NOT EXISTS
|
|
383
|
-
'CREATE INDEX IF NOT EXISTS
|
|
384
|
-
'CREATE INDEX IF NOT EXISTS
|
|
385
|
-
'CREATE INDEX IF NOT EXISTS
|
|
386
|
-
'CREATE INDEX IF NOT EXISTS
|
|
387
|
-
'CREATE INDEX IF NOT EXISTS
|
|
388
|
-
'CREATE INDEX IF NOT EXISTS
|
|
420
|
+
'CREATE INDEX IF NOT EXISTS idx_graph_entities_ws_name ON graph_entities (workspace_id, name)',
|
|
421
|
+
'CREATE INDEX IF NOT EXISTS idx_graph_entities_ws_type ON graph_entities (workspace_id, type)',
|
|
422
|
+
'CREATE INDEX IF NOT EXISTS idx_graph_rel_ws_source ON graph_relationships (workspace_id, source_id)',
|
|
423
|
+
'CREATE INDEX IF NOT EXISTS idx_graph_rel_ws_target ON graph_relationships (workspace_id, target_id)',
|
|
424
|
+
'CREATE INDEX IF NOT EXISTS idx_graph_rel_ws_type ON graph_relationships (workspace_id, type)',
|
|
425
|
+
'CREATE INDEX IF NOT EXISTS idx_graph_rel_origin ON graph_relationships (source)',
|
|
426
|
+
'CREATE INDEX IF NOT EXISTS idx_graph_obs_ws_entity ON graph_observations (workspace_id, entity_id)',
|
|
427
|
+
'CREATE INDEX IF NOT EXISTS idx_db_tables_ws_source ON db_tables (workspace_id, source_name)',
|
|
428
|
+
'CREATE INDEX IF NOT EXISTS idx_db_columns_ws_source ON db_columns (workspace_id, source_name)',
|
|
429
|
+
'CREATE INDEX IF NOT EXISTS idx_db_columns_ws_table ON db_columns (workspace_id, source_name, table_name)',
|
|
430
|
+
'CREATE INDEX IF NOT EXISTS idx_db_fk_ws_source ON db_foreign_keys (workspace_id, source_name)',
|
|
431
|
+
'CREATE INDEX IF NOT EXISTS idx_db_indexes_ws_source ON db_indexes (workspace_id, source_name)',
|
|
432
|
+
'CREATE INDEX IF NOT EXISTS idx_code_files_project ON code_files (project_id)',
|
|
433
|
+
'CREATE INDEX IF NOT EXISTS idx_code_jobs_project_status ON code_index_jobs (project_id, status)',
|
|
434
|
+
'CREATE INDEX IF NOT EXISTS idx_code_jobs_started ON code_index_jobs (started_at DESC)',
|
|
389
435
|
];
|
|
390
436
|
for (const idx of indexes) {
|
|
391
437
|
await pool.query(idx);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schema.js","sourceRoot":"","sources":["../../../src/adapters/postgres/schema.ts"],"names":[],"mappings":"AAEA
|
|
1
|
+
{"version":3,"file":"schema.js","sourceRoot":"","sources":["../../../src/adapters/postgres/schema.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;GAYG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,IAAa;IAC9C,MAAM,IAAI,CAAC,KAAK,CAAC,uCAAuC,CAAC,CAAC;IAE1D,MAAM,IAAI,CAAC,KAAK,CAAC;;;;;;;;;GAShB,CAAC,CAAC;IACH,MAAM,IAAI,CAAC,KAAK,CAAC,sFAAsF,CAAC,CAAC;IAEzG,MAAM,IAAI,CAAC,KAAK,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA0ChB,CAAC,CAAC;IAEH,MAAM,IAAI,CAAC,KAAK,CAAC;;;;;;;;;;;GAWhB,CAAC,CAAC;IAEH,MAAM,IAAI,CAAC,KAAK,CAAC;;;;;;;;;;;GAWhB,CAAC,CAAC;IAEH,MAAM,IAAI,CAAC,KAAK,CAAC;;;;;;;;;;;GAWhB,CAAC,CAAC;IAEH,MAAM,IAAI,CAAC,KAAK,CAAC;;;;;;;;;GAShB,CAAC,CAAC;IAEH,MAAM,IAAI,CAAC,KAAK,CAAC;;;;;;;;;;;;;;GAchB,CAAC,CAAC;IAEH,MAAM,IAAI,CAAC,KAAK,CAAC;;;;;;;;;;;GAWhB,CAAC,CAAC;IAEH,MAAM,IAAI,CAAC,KAAK,CAAC;;;;;;;;GAQhB,CAAC,CAAC;IAEH,MAAM,IAAI,CAAC,KAAK,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BhB,CAAC,CAAC;IAEH,MAAM,IAAI,CAAC,KAAK,CAAC;;;;;;;;;;;;;;GAchB,CAAC,CAAC;IAEH,MAAM,IAAI,CAAC,KAAK,CAAC;;;;;;;;;;;;;;;;GAgBhB,CAAC,CAAC;IAEH,MAAM,IAAI,CAAC,KAAK,CAAC;;;;;;;;;;;;;GAahB,CAAC,CAAC;IAEH,MAAM,IAAI,CAAC,KAAK,CAAC;;;;;;;;;;GAUhB,CAAC,CAAC;IAEH,MAAM,IAAI,CAAC,KAAK,CAAC;;;;;;;;;;;;;;;;;;GAkBhB,CAAC,CAAC;IAEH,MAAM,IAAI,CAAC,KAAK,CAAC;;;;;;;;;;GAUhB,CAAC,CAAC;IAEH,MAAM,IAAI,CAAC,KAAK,CAAC;;;;;;;;;;;;;GAahB,CAAC,CAAC;IAEH,MAAM,IAAI,CAAC,KAAK,CAAC;;;;;;;;;GAShB,CAAC,CAAC;IAEH,MAAM,IAAI,CAAC,KAAK,CAAC;;;;;;;;;;;;GAYhB,CAAC,CAAC;IAEH,MAAM,IAAI,CAAC,KAAK,CAAC;;;;;;;;;;;;;;;GAehB,CAAC,CAAC;IAEH,MAAM,IAAI,CAAC,KAAK,CAAC;;;;;;;;;;;GAWhB,CAAC,CAAC;IAEH,MAAM,IAAI,CAAC,KAAK,CAAC;;;;;;;;;;;;GAYhB,CAAC,CAAC;IAEH,MAAM,IAAI,CAAC,KAAK,CAAC;;;;;;;;;;;;;GAahB,CAAC,CAAC;IAEH,MAAM,IAAI,CAAC,KAAK,CAAC,sFAAsF,CAAC,CAAC;IAEzG,MAAM,IAAI,CAAC,KAAK,CAAC;;;;;;;;;GAShB,CAAC,CAAC;IAEH,MAAM,IAAI,CAAC,KAAK,CAAC;;;;;;;;;;;GAWhB,CAAC,CAAC;IAEH,MAAM,OAAO,GAAG;QACd,iFAAiF;QACjF,wFAAwF;QACxF,kFAAkF;QAClF,oFAAoF;QACpF,sFAAsF;QACtF,oFAAoF;QACpF,kFAAkF;QAClF,4HAA4H;QAC5H,iFAAiF;QACjF,iFAAiF;QACjF,yEAAyE;QACzE,4FAA4F;QAC5F,gGAAgG;QAChG,4FAA4F;QAC5F,0FAA0F;QAC1F,0FAA0F;QAC1F,oFAAoF;QACpF,6FAA6F;QAC7F,qFAAqF;QACrF,mFAAmF;QACnF,iGAAiG;QACjG,8EAA8E;QAC9E,oGAAoG;QACpG,4FAA4F;QAC5F,oFAAoF;QACpF,sFAAsF;QACtF,yFAAyF;QACzF,2FAA2F;QAC3F,kFAAkF;QAClF,qFAAqF;QACrF,sGAAsG;QACtG,wGAAwG;QACxG,kGAAkG;QAClG,sEAAsE;QACtE,4FAA4F;QAC5F,4FAA4F;QAC5F,oEAAoE;QACpE,qFAAqF;QACrF,8FAA8F;QAC9F,8FAA8F;QAC9F,qGAAqG;QACrG,qGAAqG;QACrG,8FAA8F;QAC9F,iFAAiF;QACjF,oGAAoG;QACpG,6FAA6F;QAC7F,+FAA+F;QAC/F,0GAA0G;QAC1G,+FAA+F;QAC/F,+FAA+F;QAC/F,8EAA8E;QAC9E,iGAAiG;QACjG,uFAAuF;KACxF,CAAC;IAEF,KAAK,MAAM,GAAG,IAAI,OAAO,EAAE,CAAC;QAC1B,MAAM,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACxB,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type pg from 'pg';
|
|
2
|
+
import type { CommitBatch } from '../../core/types/git.js';
|
|
3
|
+
/**
|
|
4
|
+
* Per-aggregate storage module: Git commits + per-file diff + issue
|
|
5
|
+
* cross-references. Orchestrated by `PostgresStorage`.
|
|
6
|
+
*/
|
|
7
|
+
export declare class PostgresCommitStorage {
|
|
8
|
+
private readonly pool;
|
|
9
|
+
constructor(pool: pg.Pool);
|
|
10
|
+
saveCommitBatch(workspaceId: string, batch: CommitBatch): Promise<void>;
|
|
11
|
+
getLastCommitDate(workspaceId: string, repoPath: string): Promise<Date | null>;
|
|
12
|
+
}
|
|
13
|
+
//# sourceMappingURL=storage-commits.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"storage-commits.d.ts","sourceRoot":"","sources":["../../../src/adapters/postgres/storage-commits.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AACzB,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAE3D;;;GAGG;AACH,qBAAa,qBAAqB;IACpB,OAAO,CAAC,QAAQ,CAAC,IAAI;gBAAJ,IAAI,EAAE,EAAE,CAAC,IAAI;IAEpC,eAAe,CAAC,WAAW,EAAE,MAAM,EAAE,KAAK,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;IAmEvE,iBAAiB,CAAC,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC;CAUrF"}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Per-aggregate storage module: Git commits + per-file diff + issue
|
|
3
|
+
* cross-references. Orchestrated by `PostgresStorage`.
|
|
4
|
+
*/
|
|
5
|
+
export class PostgresCommitStorage {
|
|
6
|
+
pool;
|
|
7
|
+
constructor(pool) {
|
|
8
|
+
this.pool = pool;
|
|
9
|
+
}
|
|
10
|
+
async saveCommitBatch(workspaceId, batch) {
|
|
11
|
+
const client = await this.pool.connect();
|
|
12
|
+
try {
|
|
13
|
+
await client.query('BEGIN');
|
|
14
|
+
for (const commit of batch.commits) {
|
|
15
|
+
await client.query(`INSERT INTO commits (workspace_id, hash, message, author, email, committed_at, parents, repo_path, pulled_at, search_vector)
|
|
16
|
+
VALUES ($1, $2, $3, $4, $5, $6, $7::text[], $8, NOW(),
|
|
17
|
+
to_tsvector('english', $9)
|
|
18
|
+
)
|
|
19
|
+
ON CONFLICT (workspace_id, hash) DO UPDATE SET
|
|
20
|
+
message = EXCLUDED.message,
|
|
21
|
+
author = EXCLUDED.author,
|
|
22
|
+
email = EXCLUDED.email,
|
|
23
|
+
committed_at = EXCLUDED.committed_at,
|
|
24
|
+
parents = EXCLUDED.parents,
|
|
25
|
+
repo_path = EXCLUDED.repo_path,
|
|
26
|
+
pulled_at = NOW(),
|
|
27
|
+
search_vector = to_tsvector('english', coalesce(EXCLUDED.message, '') || ' ' || coalesce(EXCLUDED.author, ''))`, [
|
|
28
|
+
workspaceId, commit.hash, commit.message, commit.author, commit.email,
|
|
29
|
+
commit.committedAt, commit.parents, commit.repoPath,
|
|
30
|
+
`${commit.message} ${commit.author}`,
|
|
31
|
+
]);
|
|
32
|
+
}
|
|
33
|
+
const hashes = batch.commits.map((c) => c.hash);
|
|
34
|
+
if (hashes.length > 0) {
|
|
35
|
+
const hashesParam = hashes.map((_, i) => `$${String(i + 2)}`).join(',');
|
|
36
|
+
await client.query(`DELETE FROM commit_files WHERE workspace_id = $1 AND commit_hash IN (${hashesParam})`, [workspaceId, ...hashes]);
|
|
37
|
+
await client.query(`DELETE FROM commit_issue_refs WHERE workspace_id = $1 AND commit_hash IN (${hashesParam})`, [workspaceId, ...hashes]);
|
|
38
|
+
}
|
|
39
|
+
for (const file of batch.files) {
|
|
40
|
+
await client.query(`INSERT INTO commit_files (workspace_id, commit_hash, file_path, status, additions, deletions)
|
|
41
|
+
VALUES ($1, $2, $3, $4, $5, $6)`, [workspaceId, file.commitHash, file.filePath, file.status, file.additions, file.deletions]);
|
|
42
|
+
}
|
|
43
|
+
for (const ref of batch.issueRefs) {
|
|
44
|
+
await client.query(`INSERT INTO commit_issue_refs (workspace_id, commit_hash, issue_key)
|
|
45
|
+
VALUES ($1, $2, $3)
|
|
46
|
+
ON CONFLICT DO NOTHING`, [workspaceId, ref.commitHash, ref.issueKey]);
|
|
47
|
+
}
|
|
48
|
+
await client.query('COMMIT');
|
|
49
|
+
}
|
|
50
|
+
catch (err) {
|
|
51
|
+
await client.query('ROLLBACK');
|
|
52
|
+
throw err;
|
|
53
|
+
}
|
|
54
|
+
finally {
|
|
55
|
+
client.release();
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
async getLastCommitDate(workspaceId, repoPath) {
|
|
59
|
+
const result = await this.pool.query(`SELECT MAX(committed_at) as last_date FROM commits WHERE workspace_id = $1 AND repo_path = $2`, [workspaceId, repoPath]);
|
|
60
|
+
return result.rows[0]?.last_date ?? null;
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
//# sourceMappingURL=storage-commits.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"storage-commits.js","sourceRoot":"","sources":["../../../src/adapters/postgres/storage-commits.ts"],"names":[],"mappings":"AAGA;;;GAGG;AACH,MAAM,OAAO,qBAAqB;IACH;IAA7B,YAA6B,IAAa;QAAb,SAAI,GAAJ,IAAI,CAAS;IAAG,CAAC;IAE9C,KAAK,CAAC,eAAe,CAAC,WAAmB,EAAE,KAAkB;QAC3D,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;QACzC,IAAI,CAAC;YACH,MAAM,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YAE5B,KAAK,MAAM,MAAM,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;gBACnC,MAAM,MAAM,CAAC,KAAK,CAChB;;;;;;;;;;;;4HAYkH,EAClH;oBACE,WAAW,EAAE,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,KAAK;oBACrE,MAAM,CAAC,WAAW,EAAE,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,QAAQ;oBACnD,GAAG,MAAM,CAAC,OAAO,IAAI,MAAM,CAAC,MAAM,EAAE;iBACrC,CACF,CAAC;YACJ,CAAC;YAED,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;YAChD,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACtB,MAAM,WAAW,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,IAAI,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;gBACxE,MAAM,MAAM,CAAC,KAAK,CAChB,wEAAwE,WAAW,GAAG,EACtF,CAAC,WAAW,EAAE,GAAG,MAAM,CAAC,CACzB,CAAC;gBACF,MAAM,MAAM,CAAC,KAAK,CAChB,6EAA6E,WAAW,GAAG,EAC3F,CAAC,WAAW,EAAE,GAAG,MAAM,CAAC,CACzB,CAAC;YACJ,CAAC;YAED,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC;gBAC/B,MAAM,MAAM,CAAC,KAAK,CAChB;2CACiC,EACjC,CAAC,WAAW,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,CAC3F,CAAC;YACJ,CAAC;YAED,KAAK,MAAM,GAAG,IAAI,KAAK,CAAC,SAAS,EAAE,CAAC;gBAClC,MAAM,MAAM,CAAC,KAAK,CAChB;;kCAEwB,EACxB,CAAC,WAAW,EAAE,GAAG,CAAC,UAAU,EAAE,GAAG,CAAC,QAAQ,CAAC,CAC5C,CAAC;YACJ,CAAC;YAED,MAAM,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;QAC/B,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;YAC/B,MAAM,GAAG,CAAC;QACZ,CAAC;gBAAS,CAAC;YACT,MAAM,CAAC,OAAO,EAAE,CAAC;QACnB,CAAC;IACH,CAAC;IAED,KAAK,CAAC,iBAAiB,CAAC,WAAmB,EAAE,QAAgB;QAI3D,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,KAAK,CAClC,+FAA+F,EAC/F,CAAC,WAAW,EAAE,QAAQ,CAAC,CACxB,CAAC;QACF,OAAO,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,SAAS,IAAI,IAAI,CAAC;IAC3C,CAAC;CACF"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type pg from 'pg';
|
|
2
|
+
import type { DbSchemaBatch } from '../../core/types/database.js';
|
|
3
|
+
/**
|
|
4
|
+
* Per-aggregate storage module: external application database schema
|
|
5
|
+
* mirror (`db_tables`, `db_columns`, `db_foreign_keys`, `db_indexes`).
|
|
6
|
+
* Orchestrated by `PostgresStorage`.
|
|
7
|
+
*/
|
|
8
|
+
export declare class PostgresDbSchemaStorage {
|
|
9
|
+
private readonly pool;
|
|
10
|
+
constructor(pool: pg.Pool);
|
|
11
|
+
saveDbSchemaBatch(workspaceId: string, batch: DbSchemaBatch, sourceName: string): Promise<void>;
|
|
12
|
+
deleteDbSchema(workspaceId: string, sourceName: string): Promise<void>;
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=storage-dbschema.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"storage-dbschema.d.ts","sourceRoot":"","sources":["../../../src/adapters/postgres/storage-dbschema.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AACzB,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAElE;;;;GAIG;AACH,qBAAa,uBAAuB;IACtB,OAAO,CAAC,QAAQ,CAAC,IAAI;gBAAJ,IAAI,EAAE,EAAE,CAAC,IAAI;IAEpC,iBAAiB,CAAC,WAAW,EAAE,MAAM,EAAE,KAAK,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IA6D/F,cAAc,CAAC,WAAW,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAkB7E"}
|