argustack 0.1.34 → 0.3.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +31 -98
- 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.d.ts +37 -0
- package/dist/adapters/lmstudio/embedding-provider.d.ts.map +1 -0
- package/dist/adapters/lmstudio/embedding-provider.js +174 -0
- package/dist/adapters/lmstudio/embedding-provider.js.map +1 -0
- package/dist/adapters/lmstudio/index.d.ts +3 -0
- package/dist/adapters/lmstudio/index.d.ts.map +1 -0
- package/dist/adapters/lmstudio/index.js +2 -0
- package/dist/adapters/lmstudio/index.js.map +1 -0
- package/dist/adapters/lsp/index.d.ts +4 -0
- package/dist/adapters/lsp/index.d.ts.map +1 -0
- package/dist/adapters/lsp/index.js +3 -0
- package/dist/adapters/lsp/index.js.map +1 -0
- package/dist/adapters/lsp/jsonrpc.d.ts +12 -0
- package/dist/adapters/lsp/jsonrpc.d.ts.map +1 -0
- package/dist/adapters/lsp/jsonrpc.js +30 -0
- package/dist/adapters/lsp/jsonrpc.js.map +1 -0
- package/dist/adapters/lsp/typescript-lsp.d.ts +25 -0
- package/dist/adapters/lsp/typescript-lsp.d.ts.map +1 -0
- package/dist/adapters/lsp/typescript-lsp.js +131 -0
- package/dist/adapters/lsp/typescript-lsp.js.map +1 -0
- package/dist/adapters/neo4j/client.d.ts +11 -0
- package/dist/adapters/neo4j/client.d.ts.map +1 -0
- package/dist/adapters/neo4j/client.js +14 -0
- package/dist/adapters/neo4j/client.js.map +1 -0
- package/dist/adapters/neo4j/cypher.d.ts +23 -0
- package/dist/adapters/neo4j/cypher.d.ts.map +1 -0
- package/dist/adapters/neo4j/cypher.js +138 -0
- package/dist/adapters/neo4j/cypher.js.map +1 -0
- package/dist/adapters/neo4j/graph-store.d.ts +33 -0
- package/dist/adapters/neo4j/graph-store.d.ts.map +1 -0
- package/dist/adapters/neo4j/graph-store.js +282 -0
- package/dist/adapters/neo4j/graph-store.js.map +1 -0
- package/dist/adapters/neo4j/index.d.ts +4 -0
- package/dist/adapters/neo4j/index.d.ts.map +1 -0
- package/dist/adapters/neo4j/index.js +3 -0
- package/dist/adapters/neo4j/index.js.map +1 -0
- package/dist/adapters/neo4j/mapper.d.ts +5 -0
- package/dist/adapters/neo4j/mapper.d.ts.map +1 -0
- package/dist/adapters/neo4j/mapper.js +49 -0
- package/dist/adapters/neo4j/mapper.js.map +1 -0
- 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.d.ts +21 -0
- package/dist/adapters/postgres/code-meta.d.ts.map +1 -0
- package/dist/adapters/postgres/code-meta.js +150 -0
- package/dist/adapters/postgres/code-meta.js.map +1 -0
- package/dist/adapters/postgres/index.d.ts +3 -0
- package/dist/adapters/postgres/index.d.ts.map +1 -1
- package/dist/adapters/postgres/index.js +3 -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 +192 -108
- 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 +49 -33
- package/dist/adapters/postgres/storage.d.ts.map +1 -1
- package/dist/adapters/postgres/storage.js +89 -605
- 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.d.ts +8 -0
- package/dist/adapters/qdrant/client.d.ts.map +1 -0
- package/dist/adapters/qdrant/client.js +12 -0
- package/dist/adapters/qdrant/client.js.map +1 -0
- package/dist/adapters/qdrant/index.d.ts +4 -0
- package/dist/adapters/qdrant/index.d.ts.map +1 -0
- package/dist/adapters/qdrant/index.js +3 -0
- package/dist/adapters/qdrant/index.js.map +1 -0
- package/dist/adapters/qdrant/mapper.d.ts +16 -0
- package/dist/adapters/qdrant/mapper.d.ts.map +1 -0
- package/dist/adapters/qdrant/mapper.js +59 -0
- package/dist/adapters/qdrant/mapper.js.map +1 -0
- package/dist/adapters/qdrant/vector-store.d.ts +20 -0
- package/dist/adapters/qdrant/vector-store.d.ts.map +1 -0
- package/dist/adapters/qdrant/vector-store.js +144 -0
- package/dist/adapters/qdrant/vector-store.js.map +1 -0
- package/dist/adapters/tree-sitter/index.d.ts +4 -0
- package/dist/adapters/tree-sitter/index.d.ts.map +1 -0
- package/dist/adapters/tree-sitter/index.js +3 -0
- package/dist/adapters/tree-sitter/index.js.map +1 -0
- package/dist/adapters/tree-sitter/parser.d.ts +15 -0
- package/dist/adapters/tree-sitter/parser.d.ts.map +1 -0
- package/dist/adapters/tree-sitter/parser.js +186 -0
- package/dist/adapters/tree-sitter/parser.js.map +1 -0
- package/dist/adapters/tree-sitter/queries.d.ts +14 -0
- package/dist/adapters/tree-sitter/queries.d.ts.map +1 -0
- package/dist/adapters/tree-sitter/queries.js +14 -0
- package/dist/adapters/tree-sitter/queries.js.map +1 -0
- package/dist/adapters/voyage/embedding-provider.d.ts +25 -0
- package/dist/adapters/voyage/embedding-provider.d.ts.map +1 -0
- package/dist/adapters/voyage/embedding-provider.js +105 -0
- package/dist/adapters/voyage/embedding-provider.js.map +1 -0
- package/dist/adapters/voyage/index.d.ts +3 -0
- package/dist/adapters/voyage/index.d.ts.map +1 -0
- package/dist/adapters/voyage/index.js +2 -0
- package/dist/adapters/voyage/index.js.map +1 -0
- 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 +3 -0
- package/dist/cli/code.d.ts.map +1 -0
- package/dist/cli/code.js +467 -0
- package/dist/cli/code.js.map +1 -0
- 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 +30 -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 -351
- 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 -314
- 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/chunker.d.ts +15 -0
- package/dist/code-intel/chunker.d.ts.map +1 -0
- package/dist/code-intel/chunker.js +39 -0
- package/dist/code-intel/chunker.js.map +1 -0
- package/dist/code-intel/file-discovery.d.ts +19 -0
- package/dist/code-intel/file-discovery.d.ts.map +1 -0
- package/dist/code-intel/file-discovery.js +80 -0
- package/dist/code-intel/file-discovery.js.map +1 -0
- package/dist/code-intel/hash.d.ts +2 -0
- package/dist/code-intel/hash.d.ts.map +1 -0
- package/dist/code-intel/hash.js +5 -0
- package/dist/code-intel/hash.js.map +1 -0
- package/dist/code-intel/index.d.ts +17 -0
- package/dist/code-intel/index.d.ts.map +1 -0
- package/dist/code-intel/index.js +11 -0
- package/dist/code-intel/index.js.map +1 -0
- package/dist/code-intel/indexer.d.ts +43 -0
- package/dist/code-intel/indexer.d.ts.map +1 -0
- package/dist/code-intel/indexer.js +234 -0
- package/dist/code-intel/indexer.js.map +1 -0
- package/dist/code-intel/job-lock.d.ts +7 -0
- package/dist/code-intel/job-lock.d.ts.map +1 -0
- package/dist/code-intel/job-lock.js +18 -0
- package/dist/code-intel/job-lock.js.map +1 -0
- package/dist/code-intel/layer-detector.d.ts +9 -0
- package/dist/code-intel/layer-detector.d.ts.map +1 -0
- package/dist/code-intel/layer-detector.js +31 -0
- package/dist/code-intel/layer-detector.js.map +1 -0
- package/dist/code-intel/lsp-resolver.d.ts +24 -0
- package/dist/code-intel/lsp-resolver.d.ts.map +1 -0
- package/dist/code-intel/lsp-resolver.js +125 -0
- package/dist/code-intel/lsp-resolver.js.map +1 -0
- package/dist/code-intel/ranker.d.ts +42 -0
- package/dist/code-intel/ranker.d.ts.map +1 -0
- package/dist/code-intel/ranker.js +123 -0
- package/dist/code-intel/ranker.js.map +1 -0
- package/dist/code-intel/resolver.d.ts +14 -0
- package/dist/code-intel/resolver.d.ts.map +1 -0
- package/dist/code-intel/resolver.js +59 -0
- package/dist/code-intel/resolver.js.map +1 -0
- package/dist/code-intel/tsconfig-paths.d.ts +11 -0
- package/dist/code-intel/tsconfig-paths.d.ts.map +1 -0
- package/dist/code-intel/tsconfig-paths.js +67 -0
- package/dist/code-intel/tsconfig-paths.js.map +1 -0
- package/dist/code-intel/watcher.d.ts +27 -0
- package/dist/code-intel/watcher.d.ts.map +1 -0
- package/dist/code-intel/watcher.js +93 -0
- package/dist/code-intel/watcher.js.map +1 -0
- 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-embedding.d.ts +42 -0
- package/dist/core/ports/code-embedding.d.ts.map +1 -0
- package/dist/core/ports/code-embedding.js +2 -0
- package/dist/core/ports/code-embedding.js.map +1 -0
- package/dist/core/ports/code-graph.d.ts +56 -0
- package/dist/core/ports/code-graph.d.ts.map +1 -0
- package/dist/core/ports/code-graph.js +2 -0
- package/dist/core/ports/code-graph.js.map +1 -0
- package/dist/core/ports/code-meta.d.ts +37 -0
- package/dist/core/ports/code-meta.d.ts.map +1 -0
- package/dist/core/ports/code-meta.js +2 -0
- package/dist/core/ports/code-meta.js.map +1 -0
- package/dist/core/ports/code-parser.d.ts +13 -0
- package/dist/core/ports/code-parser.d.ts.map +1 -0
- package/dist/core/ports/code-parser.js +2 -0
- package/dist/core/ports/code-parser.js.map +1 -0
- package/dist/core/ports/code-vector-store.d.ts +42 -0
- package/dist/core/ports/code-vector-store.d.ts.map +1 -0
- package/dist/core/ports/code-vector-store.js +2 -0
- package/dist/core/ports/code-vector-store.js.map +1 -0
- 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 +10 -0
- package/dist/core/ports/index.d.ts.map +1 -1
- package/dist/core/ports/lsp-client.d.ts +22 -0
- package/dist/core/ports/lsp-client.d.ts.map +1 -0
- package/dist/core/ports/lsp-client.js +2 -0
- package/dist/core/ports/lsp-client.js.map +1 -0
- 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/code.d.ts +153 -0
- package/dist/core/types/code.d.ts.map +1 -0
- package/dist/core/types/code.js +2 -0
- package/dist/core/types/code.js.map +1 -0
- package/dist/core/types/config.d.ts +1 -1
- package/dist/core/types/config.d.ts.map +1 -1
- package/dist/core/types/config.js +8 -1
- package/dist/core/types/config.js.map +1 -1
- package/dist/core/types/index.d.ts +3 -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 +131 -19
- package/dist/mcp/helpers.d.ts.map +1 -1
- package/dist/mcp/helpers.js +271 -141
- package/dist/mcp/helpers.js.map +1 -1
- package/dist/mcp/server.d.ts.map +1 -1
- package/dist/mcp/server.js +49 -5
- package/dist/mcp/server.js.map +1 -1
- package/dist/mcp/tools/code-graph.d.ts +3 -0
- package/dist/mcp/tools/code-graph.d.ts.map +1 -0
- package/dist/mcp/tools/code-graph.js +330 -0
- package/dist/mcp/tools/code-graph.js.map +1 -0
- package/dist/mcp/tools/code-hybrid.d.ts +3 -0
- package/dist/mcp/tools/code-hybrid.d.ts.map +1 -0
- package/dist/mcp/tools/code-hybrid.js +142 -0
- package/dist/mcp/tools/code-hybrid.js.map +1 -0
- package/dist/mcp/tools/code-search.d.ts +3 -0
- package/dist/mcp/tools/code-search.d.ts.map +1 -0
- package/dist/mcp/tools/code-search.js +95 -0
- package/dist/mcp/tools/code-search.js.map +1 -0
- 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 +60 -0
- package/dist/use-cases/code-search.d.ts.map +1 -0
- package/dist/use-cases/code-search.js +163 -0
- package/dist/use-cases/code-search.js.map +1 -0
- 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.d.ts +24 -0
- package/dist/use-cases/index-code.d.ts.map +1 -0
- package/dist/use-cases/index-code.js +43 -0
- package/dist/use-cases/index-code.js.map +1 -0
- 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 +29 -0
- package/dist/use-cases/register-code-project.d.ts.map +1 -0
- package/dist/use-cases/register-code-project.js +27 -0
- package/dist/use-cases/register-code-project.js.map +1 -0
- package/dist/use-cases/unregister-code-project.d.ts +11 -0
- package/dist/use-cases/unregister-code-project.d.ts.map +1 -0
- package/dist/use-cases/unregister-code-project.js +19 -0
- package/dist/use-cases/unregister-code-project.js.map +1 -0
- package/dist/use-cases/watch-code.d.ts +33 -0
- package/dist/use-cases/watch-code.d.ts.map +1 -0
- package/dist/use-cases/watch-code.js +52 -0
- package/dist/use-cases/watch-code.js.map +1 -0
- 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 +13 -4
- package/templates/code-docker-compose.yml +51 -0
- package/templates/env.example +16 -0
- 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/mcp/tools/graph.js
CHANGED
|
@@ -1,23 +1,27 @@
|
|
|
1
1
|
import { z } from 'zod/v4';
|
|
2
|
-
import { loadWorkspace, createAdapters, textResponse, errorResponse, getErrorMessage, } from '../helpers.js';
|
|
2
|
+
import { loadWorkspace, createAdapters, textResponse, errorResponse, workspaceNotFoundResponse, getErrorMessage, hasText, ANNOTATIONS, } from '../helpers.js';
|
|
3
|
+
const workspaceIdParam = z.string().optional().describe('Workspace id or name (defaults to active workspace)');
|
|
3
4
|
export function registerGraphTools(server) {
|
|
4
5
|
server.registerTool('impact_analysis', {
|
|
5
|
-
|
|
6
|
+
title: 'Knowledge-graph impact analysis',
|
|
7
|
+
description: 'Impact analysis for a file/module via knowledge graph (entities, developers, PRs).',
|
|
6
8
|
inputSchema: {
|
|
7
|
-
|
|
8
|
-
|
|
9
|
+
workspace_id: workspaceIdParam,
|
|
10
|
+
file_or_module: z.string().describe('File path or module name'),
|
|
11
|
+
depth: z.number().optional().describe('Traversal depth (default 2)'),
|
|
9
12
|
},
|
|
10
|
-
|
|
11
|
-
|
|
13
|
+
annotations: ANNOTATIONS.READ_ONLY,
|
|
14
|
+
}, async ({ workspace_id: workspaceIdInput, file_or_module: target, depth }) => {
|
|
15
|
+
const ws = await loadWorkspace(workspaceIdInput);
|
|
12
16
|
if (!ws.ok) {
|
|
13
|
-
return
|
|
17
|
+
return workspaceNotFoundResponse(ws.reason);
|
|
14
18
|
}
|
|
15
|
-
const { storage } = await createAdapters(ws.
|
|
19
|
+
const { storage, workspaceId } = await createAdapters(ws.workspaceId);
|
|
16
20
|
try {
|
|
17
21
|
await storage.initialize();
|
|
18
|
-
const result = await storage.queryGraph(target, depth ?? 2);
|
|
22
|
+
const result = await storage.queryGraph(workspaceId, target, depth ?? 2);
|
|
19
23
|
if (result.entities.length === 0) {
|
|
20
|
-
return textResponse(`No graph data for "${target}". Run "argustack graph build"
|
|
24
|
+
return textResponse(`No graph data for "${target}". Run "argustack graph build --workspace ${workspaceId}".`);
|
|
21
25
|
}
|
|
22
26
|
const issues = result.entities.filter((e) => e.type === 'issue');
|
|
23
27
|
const developers = result.entities.filter((e) => e.type === 'developer');
|
|
@@ -56,31 +60,32 @@ export function registerGraphTools(server) {
|
|
|
56
60
|
}
|
|
57
61
|
lines.push('');
|
|
58
62
|
}
|
|
59
|
-
await storage.close();
|
|
60
63
|
return textResponse(lines.join('\n'));
|
|
61
64
|
}
|
|
62
65
|
catch (err) {
|
|
63
|
-
await storage.close();
|
|
64
66
|
return errorResponse(`Impact analysis failed: ${getErrorMessage(err)}`);
|
|
65
67
|
}
|
|
66
68
|
});
|
|
67
69
|
server.registerTool('developer_expertise', {
|
|
68
|
-
|
|
70
|
+
title: 'Developer expertise ranking',
|
|
71
|
+
description: 'Rank developers for a topic via knowledge graph.',
|
|
69
72
|
inputSchema: {
|
|
70
|
-
|
|
71
|
-
|
|
73
|
+
workspace_id: workspaceIdParam,
|
|
74
|
+
area: z.string(),
|
|
75
|
+
limit: z.number().optional(),
|
|
72
76
|
},
|
|
73
|
-
|
|
74
|
-
|
|
77
|
+
annotations: ANNOTATIONS.READ_ONLY,
|
|
78
|
+
}, async ({ workspace_id: workspaceIdInput, area, limit }) => {
|
|
79
|
+
const ws = await loadWorkspace(workspaceIdInput);
|
|
75
80
|
if (!ws.ok) {
|
|
76
|
-
return
|
|
81
|
+
return workspaceNotFoundResponse(ws.reason);
|
|
77
82
|
}
|
|
78
|
-
const { storage } = await createAdapters(ws.
|
|
83
|
+
const { storage, workspaceId } = await createAdapters(ws.workspaceId);
|
|
79
84
|
try {
|
|
80
85
|
await storage.initialize();
|
|
81
|
-
const result = await storage.queryGraph(area, 2);
|
|
86
|
+
const result = await storage.queryGraph(workspaceId, area, 2);
|
|
82
87
|
if (result.entities.length === 0) {
|
|
83
|
-
return textResponse(`No graph data for "${area}"
|
|
88
|
+
return textResponse(`No graph data for "${area}".`);
|
|
84
89
|
}
|
|
85
90
|
const developers = result.entities.filter((e) => e.type === 'developer');
|
|
86
91
|
const ranked = developers.map((dev) => {
|
|
@@ -90,80 +95,73 @@ export function registerGraphTools(server) {
|
|
|
90
95
|
const assigned = rels.filter((r) => r.type === 'assigned_to').length;
|
|
91
96
|
return { name: dev.name, total: rels.length, commits, reviews, assigned };
|
|
92
97
|
}).sort((a, b) => b.total - a.total).slice(0, limit ?? 10);
|
|
93
|
-
const lines = [
|
|
94
|
-
`# Developer Expertise: ${area}`,
|
|
95
|
-
'',
|
|
96
|
-
];
|
|
98
|
+
const lines = [`# Developer Expertise: ${area}`, ''];
|
|
97
99
|
for (let i = 0; i < ranked.length; i++) {
|
|
98
100
|
const dev = ranked[i];
|
|
99
|
-
if (
|
|
101
|
+
if (dev === undefined) {
|
|
100
102
|
continue;
|
|
101
103
|
}
|
|
102
104
|
lines.push(`${String(i + 1)}. **${dev.name}** — ${String(dev.commits)} commits, ${String(dev.reviews)} reviews, ${String(dev.assigned)} assignments`);
|
|
103
105
|
}
|
|
104
|
-
await storage.close();
|
|
105
106
|
return textResponse(lines.join('\n'));
|
|
106
107
|
}
|
|
107
108
|
catch (err) {
|
|
108
|
-
await storage.close();
|
|
109
109
|
return errorResponse(`Developer expertise failed: ${getErrorMessage(err)}`);
|
|
110
110
|
}
|
|
111
111
|
});
|
|
112
112
|
server.registerTool('related_issues', {
|
|
113
|
-
|
|
113
|
+
title: 'Related issues (graph)',
|
|
114
|
+
description: 'Issues related to a given issue via knowledge graph traversal.',
|
|
114
115
|
inputSchema: {
|
|
115
|
-
|
|
116
|
-
|
|
116
|
+
workspace_id: workspaceIdParam,
|
|
117
|
+
issue_key: z.string(),
|
|
118
|
+
depth: z.number().optional(),
|
|
117
119
|
},
|
|
118
|
-
|
|
119
|
-
|
|
120
|
+
annotations: ANNOTATIONS.READ_ONLY,
|
|
121
|
+
}, async ({ workspace_id: workspaceIdInput, issue_key: issueKey, depth }) => {
|
|
122
|
+
const ws = await loadWorkspace(workspaceIdInput);
|
|
120
123
|
if (!ws.ok) {
|
|
121
|
-
return
|
|
124
|
+
return workspaceNotFoundResponse(ws.reason);
|
|
122
125
|
}
|
|
123
|
-
const { storage } = await createAdapters(ws.
|
|
126
|
+
const { storage, workspaceId } = await createAdapters(ws.workspaceId);
|
|
124
127
|
try {
|
|
125
128
|
await storage.initialize();
|
|
126
|
-
const result = await storage.queryGraph(issueKey, depth ?? 3);
|
|
129
|
+
const result = await storage.queryGraph(workspaceId, issueKey, depth ?? 3);
|
|
127
130
|
const related = result.entities.filter((e) => e.type === 'issue' && e.name !== issueKey);
|
|
128
131
|
if (related.length === 0) {
|
|
129
|
-
return textResponse(`No related issues
|
|
132
|
+
return textResponse(`No related issues for ${issueKey}.`);
|
|
130
133
|
}
|
|
131
|
-
const lines = [
|
|
132
|
-
`# Related Issues: ${issueKey}`,
|
|
133
|
-
`Found ${String(related.length)} related issue(s)`,
|
|
134
|
-
'',
|
|
135
|
-
];
|
|
134
|
+
const lines = [`# Related Issues: ${issueKey}`, `Found ${String(related.length)} related issue(s)`, ''];
|
|
136
135
|
for (const issue of related.slice(0, 30)) {
|
|
137
136
|
const props = issue.properties;
|
|
138
137
|
const source = result.relationships.some((r) => (r.sourceId === issue.id || r.targetId === issue.id) && r.source === 'claude') ? ' (semantic)' : '';
|
|
139
138
|
lines.push(`- **${issue.name}**${source} — ${typeof props['status'] === 'string' ? props['status'] : '?'} | ${typeof props['summary'] === 'string' ? props['summary'] : ''}`);
|
|
140
139
|
}
|
|
141
|
-
await storage.close();
|
|
142
140
|
return textResponse(lines.join('\n'));
|
|
143
141
|
}
|
|
144
142
|
catch (err) {
|
|
145
|
-
await storage.close();
|
|
146
143
|
return errorResponse(`Related issues failed: ${getErrorMessage(err)}`);
|
|
147
144
|
}
|
|
148
145
|
});
|
|
149
146
|
server.registerTool('code_dependencies', {
|
|
150
|
-
|
|
147
|
+
title: 'Code dependencies (graph)',
|
|
148
|
+
description: 'Code dependencies for a file/module.',
|
|
151
149
|
inputSchema: {
|
|
152
|
-
|
|
153
|
-
|
|
150
|
+
workspace_id: workspaceIdParam,
|
|
151
|
+
file_or_module: z.string(),
|
|
152
|
+
depth: z.number().optional(),
|
|
154
153
|
},
|
|
155
|
-
|
|
156
|
-
|
|
154
|
+
annotations: ANNOTATIONS.READ_ONLY,
|
|
155
|
+
}, async ({ workspace_id: workspaceIdInput, file_or_module: target, depth }) => {
|
|
156
|
+
const ws = await loadWorkspace(workspaceIdInput);
|
|
157
157
|
if (!ws.ok) {
|
|
158
|
-
return
|
|
158
|
+
return workspaceNotFoundResponse(ws.reason);
|
|
159
159
|
}
|
|
160
|
-
const { storage } = await createAdapters(ws.
|
|
160
|
+
const { storage, workspaceId } = await createAdapters(ws.workspaceId);
|
|
161
161
|
try {
|
|
162
162
|
await storage.initialize();
|
|
163
|
-
const result = await storage.queryGraph(target, depth ?? 2);
|
|
164
|
-
const coChanges = result.relationships
|
|
165
|
-
.filter((r) => r.type === 'co_changes')
|
|
166
|
-
.sort((a, b) => b.weight - a.weight);
|
|
163
|
+
const result = await storage.queryGraph(workspaceId, target, depth ?? 2);
|
|
164
|
+
const coChanges = result.relationships.filter((r) => r.type === 'co_changes').sort((a, b) => b.weight - a.weight);
|
|
167
165
|
const imports = result.relationships.filter((r) => r.type === 'imports');
|
|
168
166
|
const pkgDeps = result.relationships.filter((r) => r.type === 'depends_on_pkg');
|
|
169
167
|
const lines = [`# Code Dependencies: ${target}`, ''];
|
|
@@ -171,7 +169,7 @@ export function registerGraphTools(server) {
|
|
|
171
169
|
lines.push('## Co-changed Modules (coupling)');
|
|
172
170
|
for (const rel of coChanges.slice(0, 15)) {
|
|
173
171
|
const other = result.entities.find((e) => e.id === rel.sourceId || e.id === rel.targetId);
|
|
174
|
-
if (other) {
|
|
172
|
+
if (other !== undefined) {
|
|
175
173
|
lines.push(`- ${other.name} (${String(rel.weight)}x together)`);
|
|
176
174
|
}
|
|
177
175
|
}
|
|
@@ -181,7 +179,7 @@ export function registerGraphTools(server) {
|
|
|
181
179
|
lines.push('## Imports');
|
|
182
180
|
for (const rel of imports.slice(0, 20)) {
|
|
183
181
|
const importedModule = result.entities.find((e) => e.id === rel.targetId);
|
|
184
|
-
if (importedModule) {
|
|
182
|
+
if (importedModule !== undefined) {
|
|
185
183
|
lines.push(`- ${importedModule.name}`);
|
|
186
184
|
}
|
|
187
185
|
}
|
|
@@ -191,39 +189,39 @@ export function registerGraphTools(server) {
|
|
|
191
189
|
lines.push('## Package Dependencies');
|
|
192
190
|
for (const rel of pkgDeps.slice(0, 20)) {
|
|
193
191
|
const pkg = result.entities.find((e) => e.id === rel.targetId);
|
|
194
|
-
if (pkg) {
|
|
192
|
+
if (pkg !== undefined) {
|
|
195
193
|
lines.push(`- ${pkg.name}`);
|
|
196
194
|
}
|
|
197
195
|
}
|
|
198
196
|
lines.push('');
|
|
199
197
|
}
|
|
200
198
|
if (coChanges.length === 0 && imports.length === 0 && pkgDeps.length === 0) {
|
|
201
|
-
|
|
202
|
-
return textResponse(`No code dependency data for "${target}". Run "argustack graph build" first.`);
|
|
199
|
+
return textResponse(`No code dependency data for "${target}".`);
|
|
203
200
|
}
|
|
204
|
-
await storage.close();
|
|
205
201
|
return textResponse(lines.join('\n'));
|
|
206
202
|
}
|
|
207
203
|
catch (err) {
|
|
208
|
-
await storage.close();
|
|
209
204
|
return errorResponse(`Code dependencies failed: ${getErrorMessage(err)}`);
|
|
210
205
|
}
|
|
211
206
|
});
|
|
212
207
|
server.registerTool('business_context', {
|
|
213
|
-
|
|
208
|
+
title: 'Business context (graph)',
|
|
209
|
+
description: 'Business context for a topic from the workspace knowledge graph.',
|
|
214
210
|
inputSchema: {
|
|
215
|
-
|
|
216
|
-
|
|
211
|
+
workspace_id: workspaceIdParam,
|
|
212
|
+
topic: z.string(),
|
|
213
|
+
depth: z.number().optional(),
|
|
217
214
|
},
|
|
218
|
-
|
|
219
|
-
|
|
215
|
+
annotations: ANNOTATIONS.READ_ONLY,
|
|
216
|
+
}, async ({ workspace_id: workspaceIdInput, topic, depth }) => {
|
|
217
|
+
const ws = await loadWorkspace(workspaceIdInput);
|
|
220
218
|
if (!ws.ok) {
|
|
221
|
-
return
|
|
219
|
+
return workspaceNotFoundResponse(ws.reason);
|
|
222
220
|
}
|
|
223
|
-
const { storage } = await createAdapters(ws.
|
|
221
|
+
const { storage, workspaceId } = await createAdapters(ws.workspaceId);
|
|
224
222
|
try {
|
|
225
223
|
await storage.initialize();
|
|
226
|
-
const result = await storage.queryGraph(topic, depth ?? 2);
|
|
224
|
+
const result = await storage.queryGraph(workspaceId, topic, depth ?? 2);
|
|
227
225
|
const processes = result.entities.filter((e) => e.type === 'business_process');
|
|
228
226
|
const features = result.entities.filter((e) => e.type === 'feature');
|
|
229
227
|
const issues = result.entities.filter((e) => e.type === 'issue');
|
|
@@ -257,148 +255,137 @@ export function registerGraphTools(server) {
|
|
|
257
255
|
lines.push('');
|
|
258
256
|
}
|
|
259
257
|
if (processes.length === 0 && features.length === 0 && issues.length === 0) {
|
|
260
|
-
|
|
261
|
-
return textResponse('No business context for "' + topic + '". Run `build_business_graph` to have Claude analyze issue descriptions.');
|
|
258
|
+
return textResponse(`No business context for "${topic}". Run \`build_business_graph\`.`);
|
|
262
259
|
}
|
|
263
|
-
await storage.close();
|
|
264
260
|
return textResponse(lines.join('\n'));
|
|
265
261
|
}
|
|
266
262
|
catch (err) {
|
|
267
|
-
await storage.close();
|
|
268
263
|
return errorResponse(`Business context failed: ${getErrorMessage(err)}`);
|
|
269
264
|
}
|
|
270
265
|
});
|
|
271
266
|
server.registerTool('build_business_graph', {
|
|
272
|
-
|
|
267
|
+
title: 'Build business graph',
|
|
268
|
+
description: 'Analyse issues to discover business processes/features for further enrichment.',
|
|
273
269
|
inputSchema: {
|
|
274
|
-
|
|
275
|
-
|
|
270
|
+
workspace_id: workspaceIdParam,
|
|
271
|
+
project: z.string().optional(),
|
|
272
|
+
batch_size: z.number().optional(),
|
|
276
273
|
},
|
|
277
|
-
|
|
278
|
-
|
|
274
|
+
annotations: ANNOTATIONS.LOCAL_WRITE,
|
|
275
|
+
}, async ({ workspace_id: workspaceIdInput, project, batch_size: batchSize }) => {
|
|
276
|
+
const ws = await loadWorkspace(workspaceIdInput);
|
|
279
277
|
if (!ws.ok) {
|
|
280
|
-
return
|
|
278
|
+
return workspaceNotFoundResponse(ws.reason);
|
|
281
279
|
}
|
|
282
|
-
const { storage } = await createAdapters(ws.
|
|
280
|
+
const { storage, workspaceId } = await createAdapters(ws.workspaceId);
|
|
283
281
|
try {
|
|
284
282
|
await storage.initialize();
|
|
285
|
-
const projectFilter = project ? `
|
|
286
|
-
const params = project ? [project] : [];
|
|
287
|
-
const result = await storage.
|
|
283
|
+
const projectFilter = hasText(project) ? `AND project_key = $2` : '';
|
|
284
|
+
const params = hasText(project) ? [project] : [];
|
|
285
|
+
const result = await storage.queryForWorkspace(workspaceId, `SELECT issue_key, summary, description, issue_type, status FROM issues
|
|
286
|
+
WHERE workspace_id = $1 ${projectFilter}
|
|
287
|
+
ORDER BY issue_key LIMIT ${String(batchSize ?? 50)}`, params);
|
|
288
288
|
if (result.rows.length === 0) {
|
|
289
|
-
|
|
290
|
-
return textResponse('No issues found. Run `argustack sync jira` first.');
|
|
289
|
+
return textResponse('No issues found. Run `argustack sync` first.');
|
|
291
290
|
}
|
|
292
291
|
const issueList = result.rows.map((r) => {
|
|
293
292
|
const desc = r['description'] ?? '';
|
|
294
|
-
const preview = desc.length > 200 ? desc.slice(0, 200)
|
|
293
|
+
const preview = desc.length > 200 ? `${desc.slice(0, 200)}...` : desc;
|
|
295
294
|
return `**${r['issue_key']}** [${r['issue_type']}] ${r['summary']}\n${preview}`;
|
|
296
295
|
}).join('\n\n');
|
|
297
|
-
await storage.close();
|
|
298
296
|
return textResponse([
|
|
299
|
-
`# Business Graph Analysis`,
|
|
300
|
-
`
|
|
301
|
-
'',
|
|
302
|
-
'## Instructions',
|
|
303
|
-
'Read the issues below. Identify:',
|
|
304
|
-
'1. **Business Processes** (e.g. "Refund Flow", "ACH Processing", "User Onboarding")',
|
|
305
|
-
'2. **Features** (e.g. "Payment Redistribution", "LOC Account Management")',
|
|
306
|
-
'3. Which issues belong to which process/feature',
|
|
307
|
-
'4. Which processes affect each other',
|
|
308
|
-
'',
|
|
309
|
-
'Then call `add_relationship` for each connection found.',
|
|
310
|
-
'Call `add_observation` to record important business knowledge.',
|
|
311
|
-
'',
|
|
312
|
-
'---',
|
|
297
|
+
`# Business Graph Analysis — workspace ${workspaceId}`,
|
|
298
|
+
`Analysed ${String(result.rows.length)} issues. Use add_relationship to save connections.`,
|
|
313
299
|
'',
|
|
300
|
+
'---', '',
|
|
314
301
|
issueList,
|
|
315
302
|
].join('\n'));
|
|
316
303
|
}
|
|
317
304
|
catch (err) {
|
|
318
|
-
await storage.close();
|
|
319
305
|
return errorResponse(`Build business graph failed: ${getErrorMessage(err)}`);
|
|
320
306
|
}
|
|
321
307
|
});
|
|
322
308
|
server.registerTool('add_relationship', {
|
|
323
|
-
|
|
309
|
+
title: 'Add graph relationship',
|
|
310
|
+
description: 'Add a relationship between two graph entities (marked source=claude).',
|
|
324
311
|
inputSchema: {
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
312
|
+
workspace_id: workspaceIdParam,
|
|
313
|
+
source_name: z.string(),
|
|
314
|
+
source_type: z.string(),
|
|
315
|
+
target_name: z.string(),
|
|
316
|
+
target_type: z.string(),
|
|
317
|
+
relationship_type: z.string(),
|
|
318
|
+
description: z.string().optional(),
|
|
331
319
|
},
|
|
332
|
-
|
|
333
|
-
|
|
320
|
+
annotations: ANNOTATIONS.LOCAL_WRITE,
|
|
321
|
+
}, async ({ workspace_id: workspaceIdInput, source_name: srcName, source_type: srcType, target_name: tgtName, target_type: tgtType, relationship_type: relType, description: desc }) => {
|
|
322
|
+
const ws = await loadWorkspace(workspaceIdInput);
|
|
334
323
|
if (!ws.ok) {
|
|
335
|
-
return
|
|
324
|
+
return workspaceNotFoundResponse(ws.reason);
|
|
336
325
|
}
|
|
337
|
-
const { storage } = await createAdapters(ws.
|
|
326
|
+
const { storage, workspaceId } = await createAdapters(ws.workspaceId);
|
|
338
327
|
try {
|
|
339
328
|
await storage.initialize();
|
|
340
|
-
await storage.saveGraphEntities([
|
|
329
|
+
await storage.saveGraphEntities(workspaceId, [
|
|
341
330
|
{ name: srcName, type: srcType, properties: {} },
|
|
342
331
|
{ name: tgtName, type: tgtType, properties: {} },
|
|
343
332
|
]);
|
|
344
|
-
const entityResult = await storage.
|
|
333
|
+
const entityResult = await storage.queryForWorkspace(workspaceId, `SELECT id, name, type FROM graph_entities WHERE workspace_id = $1 AND ((name = $2 AND type = $3) OR (name = $4 AND type = $5))`, [srcName, srcType, tgtName, tgtType]);
|
|
345
334
|
const srcEntity = entityResult.rows.find((r) => r['name'] === srcName && r['type'] === srcType);
|
|
346
335
|
const tgtEntity = entityResult.rows.find((r) => r['name'] === tgtName && r['type'] === tgtType);
|
|
347
|
-
if (
|
|
348
|
-
await storage.close();
|
|
336
|
+
if (srcEntity === undefined || tgtEntity === undefined) {
|
|
349
337
|
return errorResponse('Failed to create entities');
|
|
350
338
|
}
|
|
351
|
-
await storage.saveGraphRelationships([{
|
|
339
|
+
await storage.saveGraphRelationships(workspaceId, [{
|
|
352
340
|
sourceId: srcEntity['id'],
|
|
353
341
|
targetId: tgtEntity['id'],
|
|
354
342
|
type: relType,
|
|
355
343
|
weight: 1,
|
|
356
344
|
source: 'claude',
|
|
357
|
-
properties: desc ? { description: desc } : {},
|
|
345
|
+
properties: hasText(desc) ? { description: desc } : {},
|
|
358
346
|
}]);
|
|
359
|
-
|
|
360
|
-
return textResponse(`Added: ${srcName} —[${relType}]→ ${tgtName}${desc ? ` (${desc})` : ''}`);
|
|
347
|
+
return textResponse(`Added: ${srcName} —[${relType}]→ ${tgtName}${hasText(desc) ? ` (${desc})` : ''}`);
|
|
361
348
|
}
|
|
362
349
|
catch (err) {
|
|
363
|
-
await storage.close();
|
|
364
350
|
return errorResponse(`Add relationship failed: ${getErrorMessage(err)}`);
|
|
365
351
|
}
|
|
366
352
|
});
|
|
367
353
|
server.registerTool('root_cause_analysis', {
|
|
368
|
-
|
|
354
|
+
title: 'Root cause analysis',
|
|
355
|
+
description: 'Trace root cause chain for a bug — confirmed, probable, claude-identified causes.',
|
|
369
356
|
inputSchema: {
|
|
370
|
-
|
|
357
|
+
workspace_id: workspaceIdParam,
|
|
358
|
+
issue_key: z.string(),
|
|
371
359
|
},
|
|
372
|
-
|
|
373
|
-
|
|
360
|
+
annotations: ANNOTATIONS.READ_ONLY,
|
|
361
|
+
}, async ({ workspace_id: workspaceIdInput, issue_key: issueKey }) => {
|
|
362
|
+
const ws = await loadWorkspace(workspaceIdInput);
|
|
374
363
|
if (!ws.ok) {
|
|
375
|
-
return
|
|
364
|
+
return workspaceNotFoundResponse(ws.reason);
|
|
376
365
|
}
|
|
377
|
-
const { storage } = await createAdapters(ws.
|
|
366
|
+
const { storage, workspaceId } = await createAdapters(ws.workspaceId);
|
|
378
367
|
try {
|
|
379
368
|
await storage.initialize();
|
|
380
|
-
const entityResult = await storage.
|
|
369
|
+
const entityResult = await storage.queryForWorkspace(workspaceId, `SELECT id FROM graph_entities WHERE workspace_id = $1 AND name = $2 LIMIT 1`, [issueKey]);
|
|
381
370
|
if (entityResult.rows.length === 0) {
|
|
382
|
-
|
|
383
|
-
return textResponse(`No graph data for "${issueKey}". Run "argustack graph build" first.`);
|
|
371
|
+
return textResponse(`No graph data for "${issueKey}".`);
|
|
384
372
|
}
|
|
385
373
|
const entityId = entityResult.rows[0]?.['id'];
|
|
386
|
-
const relsResult = await storage.
|
|
374
|
+
const relsResult = await storage.queryForWorkspace(workspaceId, `SELECT r.type, r.source, r.properties, r.weight,
|
|
387
375
|
se.name AS source_name, se.type AS source_type, se.properties AS source_props
|
|
388
376
|
FROM graph_relationships r
|
|
389
|
-
JOIN graph_entities se ON se.id = r.source_id
|
|
390
|
-
WHERE r.
|
|
377
|
+
JOIN graph_entities se ON se.workspace_id = r.workspace_id AND se.id = r.source_id
|
|
378
|
+
WHERE r.workspace_id = $1
|
|
379
|
+
AND r.target_id = $2
|
|
391
380
|
AND r.type IN ('root_causes', 'probably_caused_by', 'blocked_by', 'caused_by')
|
|
392
381
|
ORDER BY r.type, r.weight DESC`, [entityId]);
|
|
393
382
|
const rows = relsResult.rows;
|
|
383
|
+
if (rows.length === 0) {
|
|
384
|
+
return textResponse(`No root cause data for "${issueKey}".`);
|
|
385
|
+
}
|
|
394
386
|
const confirmed = rows.filter((r) => r.source === 'auto' && (r.type === 'root_causes' || r.type === 'blocked_by'));
|
|
395
387
|
const probable = rows.filter((r) => r.source === 'auto' && r.type === 'probably_caused_by');
|
|
396
388
|
const claudeIdentified = rows.filter((r) => r.source === 'claude');
|
|
397
|
-
if (rows.length === 0) {
|
|
398
|
-
await storage.close();
|
|
399
|
-
return textResponse(`No root cause data for "${issueKey}". ` +
|
|
400
|
-
'Try: check issue links in Jira, or investigate with issue_timeline.');
|
|
401
|
-
}
|
|
402
389
|
const lines = [`# Root Cause Analysis: ${issueKey}`, ''];
|
|
403
390
|
const formatRow = (r) => {
|
|
404
391
|
const props = r.properties;
|
|
@@ -416,7 +403,7 @@ export function registerGraphTools(server) {
|
|
|
416
403
|
}
|
|
417
404
|
if (probable.length > 0) {
|
|
418
405
|
lines.push(`## Probable Causes (${String(probable.length)})`);
|
|
419
|
-
lines.push('*From git timeline
|
|
406
|
+
lines.push('*From git timeline*');
|
|
420
407
|
for (const r of probable) {
|
|
421
408
|
lines.push(formatRow(r));
|
|
422
409
|
}
|
|
@@ -430,41 +417,39 @@ export function registerGraphTools(server) {
|
|
|
430
417
|
}
|
|
431
418
|
lines.push('');
|
|
432
419
|
}
|
|
433
|
-
await storage.close();
|
|
434
420
|
return textResponse(lines.join('\n'));
|
|
435
421
|
}
|
|
436
422
|
catch (err) {
|
|
437
|
-
await storage.close();
|
|
438
423
|
return errorResponse(`Root cause analysis failed: ${getErrorMessage(err)}`);
|
|
439
424
|
}
|
|
440
425
|
});
|
|
441
426
|
server.registerTool('add_observation', {
|
|
442
|
-
|
|
427
|
+
title: 'Add graph observation',
|
|
428
|
+
description: 'Append a note to a graph entity.',
|
|
443
429
|
inputSchema: {
|
|
444
|
-
|
|
445
|
-
|
|
430
|
+
workspace_id: workspaceIdParam,
|
|
431
|
+
entity_name: z.string(),
|
|
432
|
+
content: z.string(),
|
|
446
433
|
},
|
|
447
|
-
|
|
448
|
-
|
|
434
|
+
annotations: ANNOTATIONS.LOCAL_WRITE,
|
|
435
|
+
}, async ({ workspace_id: workspaceIdInput, entity_name: entityName, content }) => {
|
|
436
|
+
const ws = await loadWorkspace(workspaceIdInput);
|
|
449
437
|
if (!ws.ok) {
|
|
450
|
-
return
|
|
438
|
+
return workspaceNotFoundResponse(ws.reason);
|
|
451
439
|
}
|
|
452
|
-
const { storage } = await createAdapters(ws.
|
|
440
|
+
const { storage, workspaceId } = await createAdapters(ws.workspaceId);
|
|
453
441
|
try {
|
|
454
442
|
await storage.initialize();
|
|
455
|
-
const entityResult = await storage.
|
|
443
|
+
const entityResult = await storage.queryForWorkspace(workspaceId, `SELECT id FROM graph_entities WHERE workspace_id = $1 AND name = $2 LIMIT 1`, [entityName]);
|
|
456
444
|
if (entityResult.rows.length === 0) {
|
|
457
|
-
|
|
458
|
-
return errorResponse('Entity "' + entityName + '" not found. Run "argustack graph build" first, or create it via add_relationship.');
|
|
445
|
+
return errorResponse(`Entity "${entityName}" not found in workspace ${workspaceId}.`);
|
|
459
446
|
}
|
|
460
447
|
const entityId = entityResult.rows[0]?.['id'];
|
|
461
|
-
await storage.saveGraphObservation(entityId, content, 'claude');
|
|
462
|
-
const allObs = await storage.getObservations(entityId);
|
|
463
|
-
await storage.close();
|
|
448
|
+
await storage.saveGraphObservation(workspaceId, entityId, content, 'claude');
|
|
449
|
+
const allObs = await storage.getObservations(workspaceId, entityId);
|
|
464
450
|
return textResponse(`Added observation to "${entityName}". Total observations: ${String(allObs.length)}`);
|
|
465
451
|
}
|
|
466
452
|
catch (err) {
|
|
467
|
-
await storage.close();
|
|
468
453
|
return errorResponse(`Add observation failed: ${getErrorMessage(err)}`);
|
|
469
454
|
}
|
|
470
455
|
});
|