@mc1global/opencode-jarvis 0.1.0
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/LICENSE +10 -0
- package/README.md +171 -0
- package/dist/application/context-memory/dtos.d.ts +100 -0
- package/dist/application/context-memory/dtos.d.ts.map +1 -0
- package/dist/application/context-memory/dtos.js +11 -0
- package/dist/application/context-memory/dtos.js.map +1 -0
- package/dist/application/context-memory/note-use-cases.d.ts +22 -0
- package/dist/application/context-memory/note-use-cases.d.ts.map +1 -0
- package/dist/application/context-memory/note-use-cases.js +76 -0
- package/dist/application/context-memory/note-use-cases.js.map +1 -0
- package/dist/application/context-memory/session-use-cases.d.ts +23 -0
- package/dist/application/context-memory/session-use-cases.d.ts.map +1 -0
- package/dist/application/context-memory/session-use-cases.js +63 -0
- package/dist/application/context-memory/session-use-cases.js.map +1 -0
- package/dist/application/context-memory/todo-use-cases.d.ts +25 -0
- package/dist/application/context-memory/todo-use-cases.d.ts.map +1 -0
- package/dist/application/context-memory/todo-use-cases.js +100 -0
- package/dist/application/context-memory/todo-use-cases.js.map +1 -0
- package/dist/application/domain-map/dtos.d.ts +58 -0
- package/dist/application/domain-map/dtos.d.ts.map +1 -0
- package/dist/application/domain-map/dtos.js +11 -0
- package/dist/application/domain-map/dtos.js.map +1 -0
- package/dist/application/domain-map/use-cases.d.ts +64 -0
- package/dist/application/domain-map/use-cases.d.ts.map +1 -0
- package/dist/application/domain-map/use-cases.js +217 -0
- package/dist/application/domain-map/use-cases.js.map +1 -0
- package/dist/application/environment/dtos.d.ts +74 -0
- package/dist/application/environment/dtos.d.ts.map +1 -0
- package/dist/application/environment/dtos.js +10 -0
- package/dist/application/environment/dtos.js.map +1 -0
- package/dist/application/environment/use-cases.d.ts +29 -0
- package/dist/application/environment/use-cases.d.ts.map +1 -0
- package/dist/application/environment/use-cases.js +232 -0
- package/dist/application/environment/use-cases.js.map +1 -0
- package/dist/application/governance/validation-use-cases.d.ts +45 -0
- package/dist/application/governance/validation-use-cases.d.ts.map +1 -0
- package/dist/application/governance/validation-use-cases.js +51 -0
- package/dist/application/governance/validation-use-cases.js.map +1 -0
- package/dist/application/kanban/board-use-cases.d.ts +45 -0
- package/dist/application/kanban/board-use-cases.d.ts.map +1 -0
- package/dist/application/kanban/board-use-cases.js +124 -0
- package/dist/application/kanban/board-use-cases.js.map +1 -0
- package/dist/application/kanban/card-use-cases.d.ts +32 -0
- package/dist/application/kanban/card-use-cases.d.ts.map +1 -0
- package/dist/application/kanban/card-use-cases.js +204 -0
- package/dist/application/kanban/card-use-cases.js.map +1 -0
- package/dist/application/kanban/dtos.d.ts +165 -0
- package/dist/application/kanban/dtos.d.ts.map +1 -0
- package/dist/application/kanban/dtos.js +11 -0
- package/dist/application/kanban/dtos.js.map +1 -0
- package/dist/application/kanban/sprint-use-cases.d.ts +34 -0
- package/dist/application/kanban/sprint-use-cases.d.ts.map +1 -0
- package/dist/application/kanban/sprint-use-cases.js +243 -0
- package/dist/application/kanban/sprint-use-cases.js.map +1 -0
- package/dist/application/rag/dtos.d.ts +113 -0
- package/dist/application/rag/dtos.d.ts.map +1 -0
- package/dist/application/rag/dtos.js +11 -0
- package/dist/application/rag/dtos.js.map +1 -0
- package/dist/application/rag/oracle-use-cases.d.ts +30 -0
- package/dist/application/rag/oracle-use-cases.d.ts.map +1 -0
- package/dist/application/rag/oracle-use-cases.js +91 -0
- package/dist/application/rag/oracle-use-cases.js.map +1 -0
- package/dist/application/rag/use-cases.d.ts +34 -0
- package/dist/application/rag/use-cases.d.ts.map +1 -0
- package/dist/application/rag/use-cases.js +234 -0
- package/dist/application/rag/use-cases.js.map +1 -0
- package/dist/application/token-metrics/dtos.d.ts +126 -0
- package/dist/application/token-metrics/dtos.d.ts.map +1 -0
- package/dist/application/token-metrics/dtos.js +11 -0
- package/dist/application/token-metrics/dtos.js.map +1 -0
- package/dist/application/token-metrics/tracking-use-cases.d.ts +33 -0
- package/dist/application/token-metrics/tracking-use-cases.d.ts.map +1 -0
- package/dist/application/token-metrics/tracking-use-cases.js +220 -0
- package/dist/application/token-metrics/tracking-use-cases.js.map +1 -0
- package/dist/application/vault/dtos.d.ts +91 -0
- package/dist/application/vault/dtos.d.ts.map +1 -0
- package/dist/application/vault/dtos.js +11 -0
- package/dist/application/vault/dtos.js.map +1 -0
- package/dist/application/vault/use-cases.d.ts +30 -0
- package/dist/application/vault/use-cases.d.ts.map +1 -0
- package/dist/application/vault/use-cases.js +307 -0
- package/dist/application/vault/use-cases.js.map +1 -0
- package/dist/application/vault/vault-manager.d.ts +47 -0
- package/dist/application/vault/vault-manager.d.ts.map +1 -0
- package/dist/application/vault/vault-manager.js +272 -0
- package/dist/application/vault/vault-manager.js.map +1 -0
- package/dist/application/workspace-registry/dtos.d.ts +91 -0
- package/dist/application/workspace-registry/dtos.d.ts.map +1 -0
- package/dist/application/workspace-registry/dtos.js +11 -0
- package/dist/application/workspace-registry/dtos.js.map +1 -0
- package/dist/application/workspace-registry/use-cases.d.ts +29 -0
- package/dist/application/workspace-registry/use-cases.d.ts.map +1 -0
- package/dist/application/workspace-registry/use-cases.js +249 -0
- package/dist/application/workspace-registry/use-cases.js.map +1 -0
- package/dist/domain/context-memory/entities.d.ts +123 -0
- package/dist/domain/context-memory/entities.d.ts.map +1 -0
- package/dist/domain/context-memory/entities.js +229 -0
- package/dist/domain/context-memory/entities.js.map +1 -0
- package/dist/domain/context-memory/repositories.d.ts +46 -0
- package/dist/domain/context-memory/repositories.d.ts.map +1 -0
- package/dist/domain/context-memory/repositories.js +2 -0
- package/dist/domain/context-memory/repositories.js.map +1 -0
- package/dist/domain/context-memory/services.d.ts +62 -0
- package/dist/domain/context-memory/services.d.ts.map +1 -0
- package/dist/domain/context-memory/services.js +162 -0
- package/dist/domain/context-memory/services.js.map +1 -0
- package/dist/domain/context-memory/value-objects.d.ts +65 -0
- package/dist/domain/context-memory/value-objects.d.ts.map +1 -0
- package/dist/domain/context-memory/value-objects.js +105 -0
- package/dist/domain/context-memory/value-objects.js.map +1 -0
- package/dist/domain/domain-map/repositories.d.ts +126 -0
- package/dist/domain/domain-map/repositories.d.ts.map +1 -0
- package/dist/domain/domain-map/repositories.js +2 -0
- package/dist/domain/domain-map/repositories.js.map +1 -0
- package/dist/domain/domain-map/services.d.ts +108 -0
- package/dist/domain/domain-map/services.d.ts.map +1 -0
- package/dist/domain/domain-map/services.js +335 -0
- package/dist/domain/domain-map/services.js.map +1 -0
- package/dist/domain/domain-map/value-objects.d.ts +186 -0
- package/dist/domain/domain-map/value-objects.d.ts.map +1 -0
- package/dist/domain/domain-map/value-objects.js +215 -0
- package/dist/domain/domain-map/value-objects.js.map +1 -0
- package/dist/domain/environment/entities.d.ts +93 -0
- package/dist/domain/environment/entities.d.ts.map +1 -0
- package/dist/domain/environment/entities.js +207 -0
- package/dist/domain/environment/entities.js.map +1 -0
- package/dist/domain/environment/renderers.d.ts +30 -0
- package/dist/domain/environment/renderers.d.ts.map +1 -0
- package/dist/domain/environment/renderers.js +139 -0
- package/dist/domain/environment/renderers.js.map +1 -0
- package/dist/domain/environment/repositories.d.ts +73 -0
- package/dist/domain/environment/repositories.d.ts.map +1 -0
- package/dist/domain/environment/repositories.js +16 -0
- package/dist/domain/environment/repositories.js.map +1 -0
- package/dist/domain/environment/services.d.ts +62 -0
- package/dist/domain/environment/services.d.ts.map +1 -0
- package/dist/domain/environment/services.js +282 -0
- package/dist/domain/environment/services.js.map +1 -0
- package/dist/domain/environment/value-objects.d.ts +127 -0
- package/dist/domain/environment/value-objects.d.ts.map +1 -0
- package/dist/domain/environment/value-objects.js +179 -0
- package/dist/domain/environment/value-objects.js.map +1 -0
- package/dist/domain/governance/policies.d.ts +42 -0
- package/dist/domain/governance/policies.d.ts.map +1 -0
- package/dist/domain/governance/policies.js +304 -0
- package/dist/domain/governance/policies.js.map +1 -0
- package/dist/domain/governance/services.d.ts +38 -0
- package/dist/domain/governance/services.d.ts.map +1 -0
- package/dist/domain/governance/services.js +42 -0
- package/dist/domain/governance/services.js.map +1 -0
- package/dist/domain/kanban/entities.d.ts +105 -0
- package/dist/domain/kanban/entities.d.ts.map +1 -0
- package/dist/domain/kanban/entities.js +211 -0
- package/dist/domain/kanban/entities.js.map +1 -0
- package/dist/domain/kanban/grooming.d.ts +40 -0
- package/dist/domain/kanban/grooming.d.ts.map +1 -0
- package/dist/domain/kanban/grooming.js +50 -0
- package/dist/domain/kanban/grooming.js.map +1 -0
- package/dist/domain/kanban/repositories.d.ts +41 -0
- package/dist/domain/kanban/repositories.d.ts.map +1 -0
- package/dist/domain/kanban/repositories.js +2 -0
- package/dist/domain/kanban/repositories.js.map +1 -0
- package/dist/domain/kanban/services.d.ts +49 -0
- package/dist/domain/kanban/services.d.ts.map +1 -0
- package/dist/domain/kanban/services.js +154 -0
- package/dist/domain/kanban/services.js.map +1 -0
- package/dist/domain/kanban/sprint.d.ts +103 -0
- package/dist/domain/kanban/sprint.d.ts.map +1 -0
- package/dist/domain/kanban/sprint.js +192 -0
- package/dist/domain/kanban/sprint.js.map +1 -0
- package/dist/domain/kanban/value-objects.d.ts +91 -0
- package/dist/domain/kanban/value-objects.d.ts.map +1 -0
- package/dist/domain/kanban/value-objects.js +167 -0
- package/dist/domain/kanban/value-objects.js.map +1 -0
- package/dist/domain/rag/repositories.d.ts +152 -0
- package/dist/domain/rag/repositories.d.ts.map +1 -0
- package/dist/domain/rag/repositories.js +2 -0
- package/dist/domain/rag/repositories.js.map +1 -0
- package/dist/domain/rag/services.d.ts +57 -0
- package/dist/domain/rag/services.d.ts.map +1 -0
- package/dist/domain/rag/services.js +224 -0
- package/dist/domain/rag/services.js.map +1 -0
- package/dist/domain/rag/value-objects.d.ts +118 -0
- package/dist/domain/rag/value-objects.d.ts.map +1 -0
- package/dist/domain/rag/value-objects.js +114 -0
- package/dist/domain/rag/value-objects.js.map +1 -0
- package/dist/domain/shared/value-objects.d.ts +56 -0
- package/dist/domain/shared/value-objects.d.ts.map +1 -0
- package/dist/domain/shared/value-objects.js +89 -0
- package/dist/domain/shared/value-objects.js.map +1 -0
- package/dist/domain/token-metrics/entities.d.ts +90 -0
- package/dist/domain/token-metrics/entities.d.ts.map +1 -0
- package/dist/domain/token-metrics/entities.js +115 -0
- package/dist/domain/token-metrics/entities.js.map +1 -0
- package/dist/domain/token-metrics/repositories.d.ts +93 -0
- package/dist/domain/token-metrics/repositories.d.ts.map +1 -0
- package/dist/domain/token-metrics/repositories.js +2 -0
- package/dist/domain/token-metrics/repositories.js.map +1 -0
- package/dist/domain/token-metrics/value-objects.d.ts +81 -0
- package/dist/domain/token-metrics/value-objects.d.ts.map +1 -0
- package/dist/domain/token-metrics/value-objects.js +144 -0
- package/dist/domain/token-metrics/value-objects.js.map +1 -0
- package/dist/domain/vault/canvas.d.ts +70 -0
- package/dist/domain/vault/canvas.d.ts.map +1 -0
- package/dist/domain/vault/canvas.js +70 -0
- package/dist/domain/vault/canvas.js.map +1 -0
- package/dist/domain/vault/document.d.ts +71 -0
- package/dist/domain/vault/document.d.ts.map +1 -0
- package/dist/domain/vault/document.js +244 -0
- package/dist/domain/vault/document.js.map +1 -0
- package/dist/domain/vault/repositories.d.ts +35 -0
- package/dist/domain/vault/repositories.d.ts.map +1 -0
- package/dist/domain/vault/repositories.js +2 -0
- package/dist/domain/vault/repositories.js.map +1 -0
- package/dist/domain/vault/section.d.ts +33 -0
- package/dist/domain/vault/section.d.ts.map +1 -0
- package/dist/domain/vault/section.js +39 -0
- package/dist/domain/vault/section.js.map +1 -0
- package/dist/domain/vault/services.d.ts +48 -0
- package/dist/domain/vault/services.d.ts.map +1 -0
- package/dist/domain/vault/services.js +249 -0
- package/dist/domain/vault/services.js.map +1 -0
- package/dist/domain/vault/table.d.ts +58 -0
- package/dist/domain/vault/table.d.ts.map +1 -0
- package/dist/domain/vault/table.js +204 -0
- package/dist/domain/vault/table.js.map +1 -0
- package/dist/domain/vault/timeline.d.ts +53 -0
- package/dist/domain/vault/timeline.d.ts.map +1 -0
- package/dist/domain/vault/timeline.js +214 -0
- package/dist/domain/vault/timeline.js.map +1 -0
- package/dist/domain/vault/value-objects.d.ts +45 -0
- package/dist/domain/vault/value-objects.d.ts.map +1 -0
- package/dist/domain/vault/value-objects.js +89 -0
- package/dist/domain/vault/value-objects.js.map +1 -0
- package/dist/domain/workspace-registry/entities.d.ts +57 -0
- package/dist/domain/workspace-registry/entities.d.ts.map +1 -0
- package/dist/domain/workspace-registry/entities.js +148 -0
- package/dist/domain/workspace-registry/entities.js.map +1 -0
- package/dist/domain/workspace-registry/repositories.d.ts +57 -0
- package/dist/domain/workspace-registry/repositories.d.ts.map +1 -0
- package/dist/domain/workspace-registry/repositories.js +12 -0
- package/dist/domain/workspace-registry/repositories.js.map +1 -0
- package/dist/domain/workspace-registry/services.d.ts +56 -0
- package/dist/domain/workspace-registry/services.d.ts.map +1 -0
- package/dist/domain/workspace-registry/services.js +283 -0
- package/dist/domain/workspace-registry/services.js.map +1 -0
- package/dist/domain/workspace-registry/value-objects.d.ts +113 -0
- package/dist/domain/workspace-registry/value-objects.d.ts.map +1 -0
- package/dist/domain/workspace-registry/value-objects.js +235 -0
- package/dist/domain/workspace-registry/value-objects.js.map +1 -0
- package/dist/hooks/context-compacting.d.ts +35 -0
- package/dist/hooks/context-compacting.d.ts.map +1 -0
- package/dist/hooks/context-compacting.js +48 -0
- package/dist/hooks/context-compacting.js.map +1 -0
- package/dist/hooks/event-handlers.d.ts +39 -0
- package/dist/hooks/event-handlers.d.ts.map +1 -0
- package/dist/hooks/event-handlers.js +75 -0
- package/dist/hooks/event-handlers.js.map +1 -0
- package/dist/hooks/guardrails.d.ts +33 -0
- package/dist/hooks/guardrails.d.ts.map +1 -0
- package/dist/hooks/guardrails.js +22 -0
- package/dist/hooks/guardrails.js.map +1 -0
- package/dist/hooks/shell-env.d.ts +28 -0
- package/dist/hooks/shell-env.d.ts.map +1 -0
- package/dist/hooks/shell-env.js +17 -0
- package/dist/hooks/shell-env.js.map +1 -0
- package/dist/index.d.ts +16 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +349 -0
- package/dist/index.js.map +1 -0
- package/dist/infrastructure/context-memory/note-repository.d.ts +26 -0
- package/dist/infrastructure/context-memory/note-repository.d.ts.map +1 -0
- package/dist/infrastructure/context-memory/note-repository.js +87 -0
- package/dist/infrastructure/context-memory/note-repository.js.map +1 -0
- package/dist/infrastructure/context-memory/search-repository.d.ts +20 -0
- package/dist/infrastructure/context-memory/search-repository.d.ts.map +1 -0
- package/dist/infrastructure/context-memory/search-repository.js +44 -0
- package/dist/infrastructure/context-memory/search-repository.js.map +1 -0
- package/dist/infrastructure/context-memory/session-repository.d.ts +26 -0
- package/dist/infrastructure/context-memory/session-repository.d.ts.map +1 -0
- package/dist/infrastructure/context-memory/session-repository.js +79 -0
- package/dist/infrastructure/context-memory/session-repository.js.map +1 -0
- package/dist/infrastructure/context-memory/todo-repository.d.ts +26 -0
- package/dist/infrastructure/context-memory/todo-repository.d.ts.map +1 -0
- package/dist/infrastructure/context-memory/todo-repository.js +105 -0
- package/dist/infrastructure/context-memory/todo-repository.js.map +1 -0
- package/dist/infrastructure/database/sqlite-adapter.d.ts +60 -0
- package/dist/infrastructure/database/sqlite-adapter.d.ts.map +1 -0
- package/dist/infrastructure/database/sqlite-adapter.js +93 -0
- package/dist/infrastructure/database/sqlite-adapter.js.map +1 -0
- package/dist/infrastructure/domain-map/llm-analyzer.d.ts +60 -0
- package/dist/infrastructure/domain-map/llm-analyzer.d.ts.map +1 -0
- package/dist/infrastructure/domain-map/llm-analyzer.js +249 -0
- package/dist/infrastructure/domain-map/llm-analyzer.js.map +1 -0
- package/dist/infrastructure/domain-map/lsp-adapter.d.ts +61 -0
- package/dist/infrastructure/domain-map/lsp-adapter.d.ts.map +1 -0
- package/dist/infrastructure/domain-map/lsp-adapter.js +210 -0
- package/dist/infrastructure/domain-map/lsp-adapter.js.map +1 -0
- package/dist/infrastructure/domain-map/lsp-configs.d.ts +53 -0
- package/dist/infrastructure/domain-map/lsp-configs.d.ts.map +1 -0
- package/dist/infrastructure/domain-map/lsp-configs.js +274 -0
- package/dist/infrastructure/domain-map/lsp-configs.js.map +1 -0
- package/dist/infrastructure/domain-map/lsp-json-rpc.d.ts +132 -0
- package/dist/infrastructure/domain-map/lsp-json-rpc.d.ts.map +1 -0
- package/dist/infrastructure/domain-map/lsp-json-rpc.js +320 -0
- package/dist/infrastructure/domain-map/lsp-json-rpc.js.map +1 -0
- package/dist/infrastructure/domain-map/project-scanner.d.ts +43 -0
- package/dist/infrastructure/domain-map/project-scanner.d.ts.map +1 -0
- package/dist/infrastructure/domain-map/project-scanner.js +193 -0
- package/dist/infrastructure/domain-map/project-scanner.js.map +1 -0
- package/dist/infrastructure/environment/environment-repository.d.ts +33 -0
- package/dist/infrastructure/environment/environment-repository.d.ts.map +1 -0
- package/dist/infrastructure/environment/environment-repository.js +161 -0
- package/dist/infrastructure/environment/environment-repository.js.map +1 -0
- package/dist/infrastructure/environment/scanner-adapter.d.ts +23 -0
- package/dist/infrastructure/environment/scanner-adapter.d.ts.map +1 -0
- package/dist/infrastructure/environment/scanner-adapter.js +102 -0
- package/dist/infrastructure/environment/scanner-adapter.js.map +1 -0
- package/dist/infrastructure/kanban/card-repository.d.ts +41 -0
- package/dist/infrastructure/kanban/card-repository.d.ts.map +1 -0
- package/dist/infrastructure/kanban/card-repository.js +185 -0
- package/dist/infrastructure/kanban/card-repository.js.map +1 -0
- package/dist/infrastructure/kanban/sprint-repository.d.ts +40 -0
- package/dist/infrastructure/kanban/sprint-repository.d.ts.map +1 -0
- package/dist/infrastructure/kanban/sprint-repository.js +186 -0
- package/dist/infrastructure/kanban/sprint-repository.js.map +1 -0
- package/dist/infrastructure/rag/file-discovery.d.ts +19 -0
- package/dist/infrastructure/rag/file-discovery.d.ts.map +1 -0
- package/dist/infrastructure/rag/file-discovery.js +201 -0
- package/dist/infrastructure/rag/file-discovery.js.map +1 -0
- package/dist/infrastructure/rag/ollama-embeddings.d.ts +18 -0
- package/dist/infrastructure/rag/ollama-embeddings.d.ts.map +1 -0
- package/dist/infrastructure/rag/ollama-embeddings.js +54 -0
- package/dist/infrastructure/rag/ollama-embeddings.js.map +1 -0
- package/dist/infrastructure/rag/text-splitter.d.ts +19 -0
- package/dist/infrastructure/rag/text-splitter.d.ts.map +1 -0
- package/dist/infrastructure/rag/text-splitter.js +38 -0
- package/dist/infrastructure/rag/text-splitter.js.map +1 -0
- package/dist/infrastructure/rag/vectra-adapter.d.ts +38 -0
- package/dist/infrastructure/rag/vectra-adapter.d.ts.map +1 -0
- package/dist/infrastructure/rag/vectra-adapter.js +275 -0
- package/dist/infrastructure/rag/vectra-adapter.js.map +1 -0
- package/dist/infrastructure/token-metrics/token-metrics-repository.d.ts +29 -0
- package/dist/infrastructure/token-metrics/token-metrics-repository.d.ts.map +1 -0
- package/dist/infrastructure/token-metrics/token-metrics-repository.js +254 -0
- package/dist/infrastructure/token-metrics/token-metrics-repository.js.map +1 -0
- package/dist/infrastructure/vault/markdown-parser.d.ts +35 -0
- package/dist/infrastructure/vault/markdown-parser.d.ts.map +1 -0
- package/dist/infrastructure/vault/markdown-parser.js +145 -0
- package/dist/infrastructure/vault/markdown-parser.js.map +1 -0
- package/dist/infrastructure/vault/vault-fs-adapter.d.ts +17 -0
- package/dist/infrastructure/vault/vault-fs-adapter.d.ts.map +1 -0
- package/dist/infrastructure/vault/vault-fs-adapter.js +105 -0
- package/dist/infrastructure/vault/vault-fs-adapter.js.map +1 -0
- package/dist/infrastructure/workspace-registry/dependency-repository.d.ts +27 -0
- package/dist/infrastructure/workspace-registry/dependency-repository.d.ts.map +1 -0
- package/dist/infrastructure/workspace-registry/dependency-repository.js +89 -0
- package/dist/infrastructure/workspace-registry/dependency-repository.js.map +1 -0
- package/dist/infrastructure/workspace-registry/workspace-repository.d.ts +28 -0
- package/dist/infrastructure/workspace-registry/workspace-repository.d.ts.map +1 -0
- package/dist/infrastructure/workspace-registry/workspace-repository.js +108 -0
- package/dist/infrastructure/workspace-registry/workspace-repository.js.map +1 -0
- package/dist/tools/agent-tools.d.ts +14 -0
- package/dist/tools/agent-tools.d.ts.map +1 -0
- package/dist/tools/agent-tools.js +238 -0
- package/dist/tools/agent-tools.js.map +1 -0
- package/dist/tools/context-memory-tools.d.ts +16 -0
- package/dist/tools/context-memory-tools.d.ts.map +1 -0
- package/dist/tools/context-memory-tools.js +242 -0
- package/dist/tools/context-memory-tools.js.map +1 -0
- package/dist/tools/data-tools.d.ts +3 -0
- package/dist/tools/data-tools.d.ts.map +1 -0
- package/dist/tools/data-tools.js +383 -0
- package/dist/tools/data-tools.js.map +1 -0
- package/dist/tools/domain-map-tools.d.ts +41 -0
- package/dist/tools/domain-map-tools.d.ts.map +1 -0
- package/dist/tools/domain-map-tools.js +134 -0
- package/dist/tools/domain-map-tools.js.map +1 -0
- package/dist/tools/environment-tools.d.ts +85 -0
- package/dist/tools/environment-tools.d.ts.map +1 -0
- package/dist/tools/environment-tools.js +223 -0
- package/dist/tools/environment-tools.js.map +1 -0
- package/dist/tools/governance-tools.d.ts +7 -0
- package/dist/tools/governance-tools.d.ts.map +1 -0
- package/dist/tools/governance-tools.js +73 -0
- package/dist/tools/governance-tools.js.map +1 -0
- package/dist/tools/kanban-board-tools.d.ts +11 -0
- package/dist/tools/kanban-board-tools.d.ts.map +1 -0
- package/dist/tools/kanban-board-tools.js +354 -0
- package/dist/tools/kanban-board-tools.js.map +1 -0
- package/dist/tools/kanban-card-tools.d.ts +11 -0
- package/dist/tools/kanban-card-tools.d.ts.map +1 -0
- package/dist/tools/kanban-card-tools.js +407 -0
- package/dist/tools/kanban-card-tools.js.map +1 -0
- package/dist/tools/rag-tools.d.ts +10 -0
- package/dist/tools/rag-tools.d.ts.map +1 -0
- package/dist/tools/rag-tools.js +279 -0
- package/dist/tools/rag-tools.js.map +1 -0
- package/dist/tools/token-metrics-tools.d.ts +98 -0
- package/dist/tools/token-metrics-tools.d.ts.map +1 -0
- package/dist/tools/token-metrics-tools.js +287 -0
- package/dist/tools/token-metrics-tools.js.map +1 -0
- package/dist/tools/vault-manage-tool.d.ts +7 -0
- package/dist/tools/vault-manage-tool.d.ts.map +1 -0
- package/dist/tools/vault-manage-tool.js +193 -0
- package/dist/tools/vault-manage-tool.js.map +1 -0
- package/dist/tools/vault-tools.d.ts +7 -0
- package/dist/tools/vault-tools.d.ts.map +1 -0
- package/dist/tools/vault-tools.js +348 -0
- package/dist/tools/vault-tools.js.map +1 -0
- package/dist/tools/workspace-registry-tools.d.ts +93 -0
- package/dist/tools/workspace-registry-tools.d.ts.map +1 -0
- package/dist/tools/workspace-registry-tools.js +217 -0
- package/dist/tools/workspace-registry-tools.js.map +1 -0
- package/package.json +59 -0
|
@@ -0,0 +1,249 @@
|
|
|
1
|
+
// ── LLM Analyzer Implementation ──────────────────────────────────────
|
|
2
|
+
/**
|
|
3
|
+
* Implementation of LlmAnalysisPort using an injected prompt function.
|
|
4
|
+
* Builds a structured analysis prompt, sends it to the LLM, and
|
|
5
|
+
* parses the JSON response into domain value objects.
|
|
6
|
+
*/
|
|
7
|
+
export class LlmSemanticAnalyzer {
|
|
8
|
+
promptFn;
|
|
9
|
+
constructor(promptFn) {
|
|
10
|
+
this.promptFn = promptFn;
|
|
11
|
+
}
|
|
12
|
+
async analyzeStructure(graph, codeSamples, modelPreference) {
|
|
13
|
+
const prompt = buildAnalysisPrompt(graph, codeSamples);
|
|
14
|
+
const response = await this.promptFn(prompt, modelPreference);
|
|
15
|
+
return parseAnalysisResponse(response);
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
// ── Prompt Building ───────────────────────────────────────────────────
|
|
19
|
+
/**
|
|
20
|
+
* Build the analysis prompt from structural graph and code samples.
|
|
21
|
+
* Instructs the LLM to produce a JSON response matching SemanticAnalysis.
|
|
22
|
+
*
|
|
23
|
+
* @param graph - Structural graph from LSP extraction
|
|
24
|
+
* @param codeSamples - Representative code samples
|
|
25
|
+
* @returns The prompt string to send to the LLM
|
|
26
|
+
*/
|
|
27
|
+
export function buildAnalysisPrompt(graph, codeSamples) {
|
|
28
|
+
const lines = [];
|
|
29
|
+
lines.push("You are a Domain-Driven Design expert analyzing a codebase.");
|
|
30
|
+
lines.push("Based on the structural analysis and code samples below,");
|
|
31
|
+
lines.push("identify bounded contexts, SRP violations, and recommend a DDD structure.");
|
|
32
|
+
lines.push("");
|
|
33
|
+
lines.push("## Structural Analysis");
|
|
34
|
+
lines.push("");
|
|
35
|
+
lines.push(`Total files: ${graph.totalFiles}`);
|
|
36
|
+
lines.push(`Total symbols: ${graph.totalSymbols}`);
|
|
37
|
+
lines.push(`Cross-file references: ${graph.references.length}`);
|
|
38
|
+
lines.push("");
|
|
39
|
+
// File symbol summary (truncated to avoid token overflow)
|
|
40
|
+
lines.push("### File Symbols");
|
|
41
|
+
lines.push("");
|
|
42
|
+
let fileCount = 0;
|
|
43
|
+
for (const [filePath, symbols] of graph.fileSymbolMap) {
|
|
44
|
+
if (fileCount >= 50) {
|
|
45
|
+
lines.push(`... and ${graph.totalFiles - fileCount} more files`);
|
|
46
|
+
break;
|
|
47
|
+
}
|
|
48
|
+
lines.push(`**${filePath}**:`);
|
|
49
|
+
for (const sym of symbols) {
|
|
50
|
+
lines.push(formatSymbolSummary(sym, 1));
|
|
51
|
+
}
|
|
52
|
+
lines.push("");
|
|
53
|
+
fileCount++;
|
|
54
|
+
}
|
|
55
|
+
// Cross-file references summary
|
|
56
|
+
if (graph.references.length > 0) {
|
|
57
|
+
lines.push("### Cross-File References");
|
|
58
|
+
lines.push("");
|
|
59
|
+
const maxRefs = Math.min(graph.references.length, 100);
|
|
60
|
+
for (let i = 0; i < maxRefs; i++) {
|
|
61
|
+
const ref = graph.references[i];
|
|
62
|
+
lines.push(`- ${ref.fromFile}::${ref.fromSymbol} --${ref.type}--> ${ref.toFile}::${ref.toSymbol}`);
|
|
63
|
+
}
|
|
64
|
+
if (graph.references.length > 100) {
|
|
65
|
+
lines.push(`... and ${graph.references.length - 100} more references`);
|
|
66
|
+
}
|
|
67
|
+
lines.push("");
|
|
68
|
+
}
|
|
69
|
+
// Code samples
|
|
70
|
+
if (codeSamples.length > 0) {
|
|
71
|
+
lines.push("### Code Samples");
|
|
72
|
+
lines.push("");
|
|
73
|
+
for (const sample of codeSamples.slice(0, 10)) {
|
|
74
|
+
lines.push(`**${sample.filePath}** (${sample.lineCount} lines):`);
|
|
75
|
+
lines.push("```");
|
|
76
|
+
// Truncate very large samples
|
|
77
|
+
const truncated = sample.content.length > 3000
|
|
78
|
+
? sample.content.slice(0, 3000) + "\n... (truncated)"
|
|
79
|
+
: sample.content;
|
|
80
|
+
lines.push(truncated);
|
|
81
|
+
lines.push("```");
|
|
82
|
+
lines.push("");
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
// Output format instructions
|
|
86
|
+
lines.push("## Instructions");
|
|
87
|
+
lines.push("");
|
|
88
|
+
lines.push("Respond with ONLY a JSON object (no markdown fences, no explanation) matching this schema:");
|
|
89
|
+
lines.push("");
|
|
90
|
+
lines.push("```json");
|
|
91
|
+
lines.push(JSON.stringify(RESPONSE_SCHEMA, null, 2));
|
|
92
|
+
lines.push("```");
|
|
93
|
+
lines.push("");
|
|
94
|
+
lines.push("Be specific about file assignments and entity identification.");
|
|
95
|
+
lines.push("If you detect SRP violations (files doing too many things),");
|
|
96
|
+
lines.push("list them with concrete suggested splits.");
|
|
97
|
+
return lines.join("\n");
|
|
98
|
+
}
|
|
99
|
+
/** Format a symbol summary line with indentation for hierarchy. */
|
|
100
|
+
function formatSymbolSummary(symbol, depth) {
|
|
101
|
+
const indent = " ".repeat(depth);
|
|
102
|
+
const childCount = symbol.children.length;
|
|
103
|
+
const childInfo = childCount > 0 ? ` (${childCount} children)` : "";
|
|
104
|
+
let line = `${indent}- ${symbol.kind}: ${symbol.name}${childInfo}`;
|
|
105
|
+
// Show immediate children but don't recurse too deep
|
|
106
|
+
if (depth < 3) {
|
|
107
|
+
for (const child of symbol.children) {
|
|
108
|
+
line += "\n" + formatSymbolSummary(child, depth + 1);
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
return line;
|
|
112
|
+
}
|
|
113
|
+
/** Expected JSON response schema for LLM output. */
|
|
114
|
+
const RESPONSE_SCHEMA = {
|
|
115
|
+
type: "object",
|
|
116
|
+
properties: {
|
|
117
|
+
boundedContexts: {
|
|
118
|
+
type: "array",
|
|
119
|
+
items: {
|
|
120
|
+
type: "object",
|
|
121
|
+
properties: {
|
|
122
|
+
name: { type: "string" },
|
|
123
|
+
responsibility: { type: "string" },
|
|
124
|
+
files: { type: "array", items: { type: "string" } },
|
|
125
|
+
entities: { type: "array", items: { type: "string" } },
|
|
126
|
+
aggregates: { type: "array", items: { type: "string" } },
|
|
127
|
+
dependencies: { type: "array", items: { type: "string" } },
|
|
128
|
+
},
|
|
129
|
+
required: [
|
|
130
|
+
"name",
|
|
131
|
+
"responsibility",
|
|
132
|
+
"files",
|
|
133
|
+
"entities",
|
|
134
|
+
"aggregates",
|
|
135
|
+
"dependencies",
|
|
136
|
+
],
|
|
137
|
+
},
|
|
138
|
+
},
|
|
139
|
+
violations: {
|
|
140
|
+
type: "array",
|
|
141
|
+
items: {
|
|
142
|
+
type: "object",
|
|
143
|
+
properties: {
|
|
144
|
+
file: { type: "string" },
|
|
145
|
+
lines: { type: "number" },
|
|
146
|
+
issue: { type: "string" },
|
|
147
|
+
suggestedSplit: { type: "array", items: { type: "string" } },
|
|
148
|
+
},
|
|
149
|
+
required: ["file", "lines", "issue", "suggestedSplit"],
|
|
150
|
+
},
|
|
151
|
+
},
|
|
152
|
+
recommendedStructure: { type: "string" },
|
|
153
|
+
},
|
|
154
|
+
required: ["boundedContexts", "violations", "recommendedStructure"],
|
|
155
|
+
};
|
|
156
|
+
// ── Response Parsing ──────────────────────────────────────────────────
|
|
157
|
+
/**
|
|
158
|
+
* Parse and validate the LLM's JSON response into a SemanticAnalysis.
|
|
159
|
+
* Handles common LLM output quirks (markdown fences, extra text).
|
|
160
|
+
*
|
|
161
|
+
* @param response - Raw LLM response text
|
|
162
|
+
* @returns Validated SemanticAnalysis
|
|
163
|
+
* @throws Error if the response cannot be parsed
|
|
164
|
+
*/
|
|
165
|
+
export function parseAnalysisResponse(response) {
|
|
166
|
+
const json = extractJson(response);
|
|
167
|
+
let parsed;
|
|
168
|
+
try {
|
|
169
|
+
parsed = JSON.parse(json);
|
|
170
|
+
}
|
|
171
|
+
catch {
|
|
172
|
+
throw new Error(`LLM response is not valid JSON. Raw response: ${response.slice(0, 200)}`);
|
|
173
|
+
}
|
|
174
|
+
if (typeof parsed !== "object" || parsed === null) {
|
|
175
|
+
throw new Error("LLM response is not a JSON object");
|
|
176
|
+
}
|
|
177
|
+
const obj = parsed;
|
|
178
|
+
// Validate and extract bounded contexts
|
|
179
|
+
const boundedContexts = validateBoundedContexts(obj.boundedContexts);
|
|
180
|
+
const violations = validateViolations(obj.violations);
|
|
181
|
+
const recommendedStructure = typeof obj.recommendedStructure === "string"
|
|
182
|
+
? obj.recommendedStructure
|
|
183
|
+
: "";
|
|
184
|
+
return {
|
|
185
|
+
boundedContexts,
|
|
186
|
+
violations,
|
|
187
|
+
recommendedStructure,
|
|
188
|
+
};
|
|
189
|
+
}
|
|
190
|
+
/**
|
|
191
|
+
* Extract JSON from LLM response that may contain markdown fences or extra text.
|
|
192
|
+
* Looks for the first { and last } to extract the JSON object.
|
|
193
|
+
*/
|
|
194
|
+
export function extractJson(text) {
|
|
195
|
+
// Try to find JSON within markdown code fences first
|
|
196
|
+
const fenceMatch = text.match(/```(?:json)?\s*\n?([\s\S]*?)\n?\s*```/);
|
|
197
|
+
if (fenceMatch !== null) {
|
|
198
|
+
return fenceMatch[1].trim();
|
|
199
|
+
}
|
|
200
|
+
// Find the first { and last } for bare JSON
|
|
201
|
+
const firstBrace = text.indexOf("{");
|
|
202
|
+
const lastBrace = text.lastIndexOf("}");
|
|
203
|
+
if (firstBrace !== -1 && lastBrace > firstBrace) {
|
|
204
|
+
return text.slice(firstBrace, lastBrace + 1);
|
|
205
|
+
}
|
|
206
|
+
// Return as-is and let JSON.parse fail with a clear error
|
|
207
|
+
return text;
|
|
208
|
+
}
|
|
209
|
+
/** Validate and sanitize bounded contexts from LLM output. */
|
|
210
|
+
function validateBoundedContexts(raw) {
|
|
211
|
+
if (!Array.isArray(raw)) {
|
|
212
|
+
return [];
|
|
213
|
+
}
|
|
214
|
+
return raw
|
|
215
|
+
.filter((item) => typeof item === "object" && item !== null)
|
|
216
|
+
.map((item) => ({
|
|
217
|
+
name: typeof item.name === "string" ? item.name : "unknown",
|
|
218
|
+
responsibility: typeof item.responsibility === "string" ? item.responsibility : "",
|
|
219
|
+
files: Array.isArray(item.files)
|
|
220
|
+
? item.files.filter((f) => typeof f === "string")
|
|
221
|
+
: [],
|
|
222
|
+
entities: Array.isArray(item.entities)
|
|
223
|
+
? item.entities.filter((e) => typeof e === "string")
|
|
224
|
+
: [],
|
|
225
|
+
aggregates: Array.isArray(item.aggregates)
|
|
226
|
+
? item.aggregates.filter((a) => typeof a === "string")
|
|
227
|
+
: [],
|
|
228
|
+
dependencies: Array.isArray(item.dependencies)
|
|
229
|
+
? item.dependencies.filter((d) => typeof d === "string")
|
|
230
|
+
: [],
|
|
231
|
+
}));
|
|
232
|
+
}
|
|
233
|
+
/** Validate and sanitize violations from LLM output. */
|
|
234
|
+
function validateViolations(raw) {
|
|
235
|
+
if (!Array.isArray(raw)) {
|
|
236
|
+
return [];
|
|
237
|
+
}
|
|
238
|
+
return raw
|
|
239
|
+
.filter((item) => typeof item === "object" && item !== null)
|
|
240
|
+
.map((item) => ({
|
|
241
|
+
file: typeof item.file === "string" ? item.file : "unknown",
|
|
242
|
+
lines: typeof item.lines === "number" ? item.lines : 0,
|
|
243
|
+
issue: typeof item.issue === "string" ? item.issue : "",
|
|
244
|
+
suggestedSplit: Array.isArray(item.suggestedSplit)
|
|
245
|
+
? item.suggestedSplit.filter((s) => typeof s === "string")
|
|
246
|
+
: [],
|
|
247
|
+
}));
|
|
248
|
+
}
|
|
249
|
+
//# sourceMappingURL=llm-analyzer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"llm-analyzer.js","sourceRoot":"","sources":["../../../src/infrastructure/domain-map/llm-analyzer.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import type { LspClientPort } from "../../domain/domain-map/repositories.js";
|
|
2
|
+
import type { CodeSymbol, LanguageId, SourceRange, SymbolKind, SymbolReference } from "../../domain/domain-map/value-objects.js";
|
|
3
|
+
/** LSP Position (0-based line/character). */
|
|
4
|
+
interface LspPosition {
|
|
5
|
+
readonly line: number;
|
|
6
|
+
readonly character: number;
|
|
7
|
+
}
|
|
8
|
+
/** LSP Range. */
|
|
9
|
+
interface LspRange {
|
|
10
|
+
readonly start: LspPosition;
|
|
11
|
+
readonly end: LspPosition;
|
|
12
|
+
}
|
|
13
|
+
/** LSP DocumentSymbol (hierarchical). */
|
|
14
|
+
interface LspDocumentSymbol {
|
|
15
|
+
readonly name: string;
|
|
16
|
+
readonly kind: number;
|
|
17
|
+
readonly range: LspRange;
|
|
18
|
+
readonly selectionRange: LspRange;
|
|
19
|
+
readonly children?: readonly LspDocumentSymbol[];
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Map an LSP DocumentSymbol to a domain CodeSymbol.
|
|
23
|
+
* Recursively maps children.
|
|
24
|
+
*/
|
|
25
|
+
export declare function mapLspSymbolToDomain(lspSymbol: LspDocumentSymbol, containerName?: string): CodeSymbol;
|
|
26
|
+
/**
|
|
27
|
+
* Map an LSP SymbolKind number to a domain SymbolKind string.
|
|
28
|
+
* Falls back to "variable" for unknown kinds.
|
|
29
|
+
*/
|
|
30
|
+
export declare function mapSymbolKind(lspKind: number): SymbolKind;
|
|
31
|
+
/**
|
|
32
|
+
* Map an LSP Range to a domain SourceRange.
|
|
33
|
+
*/
|
|
34
|
+
export declare function mapLspRange(lspRange: LspRange): SourceRange;
|
|
35
|
+
/**
|
|
36
|
+
* Extract a file path from a file:// URI.
|
|
37
|
+
* Handles URL-encoded characters.
|
|
38
|
+
*/
|
|
39
|
+
export declare function fileUriToPath(uri: string): string;
|
|
40
|
+
/**
|
|
41
|
+
* Implementation of LspClientPort using GenericLspClient.
|
|
42
|
+
* Spawns one LSP server per analysis session.
|
|
43
|
+
*/
|
|
44
|
+
export declare class LspClientAdapter implements LspClientPort {
|
|
45
|
+
private readonly timeoutMs;
|
|
46
|
+
private client;
|
|
47
|
+
private currentLanguage;
|
|
48
|
+
constructor(timeoutMs?: number);
|
|
49
|
+
initialize(rootUri: string, language: LanguageId): Promise<void>;
|
|
50
|
+
shutdown(): Promise<void>;
|
|
51
|
+
documentSymbols(fileUri: string): Promise<readonly CodeSymbol[]>;
|
|
52
|
+
references(fileUri: string, position: SourceRange): Promise<readonly SymbolReference[]>;
|
|
53
|
+
callHierarchy(fileUri: string, position: SourceRange): Promise<readonly SymbolReference[]>;
|
|
54
|
+
isAvailable(language: LanguageId): Promise<boolean>;
|
|
55
|
+
/** Throw if not connected. */
|
|
56
|
+
private ensureConnected;
|
|
57
|
+
/** Throw if the current language's config doesn't support a capability. */
|
|
58
|
+
private ensureCapability;
|
|
59
|
+
}
|
|
60
|
+
export {};
|
|
61
|
+
//# sourceMappingURL=lsp-adapter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lsp-adapter.d.ts","sourceRoot":"","sources":["../../../src/infrastructure/domain-map/lsp-adapter.ts"],"names":[],"mappings":"AAqBA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,yCAAyC,CAAC;AAC7E,OAAO,KAAK,EACV,UAAU,EACV,UAAU,EACV,WAAW,EACX,UAAU,EACV,eAAe,EAChB,MAAM,0CAA0C,CAAC;AASlD,6CAA6C;AAC7C,UAAU,WAAW;IACnB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;CAC5B;AAED,iBAAiB;AACjB,UAAU,QAAQ;IAChB,QAAQ,CAAC,KAAK,EAAE,WAAW,CAAC;IAC5B,QAAQ,CAAC,GAAG,EAAE,WAAW,CAAC;CAC3B;AAED,yCAAyC;AACzC,UAAU,iBAAiB;IACzB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAC;IACzB,QAAQ,CAAC,cAAc,EAAE,QAAQ,CAAC;IAClC,QAAQ,CAAC,QAAQ,CAAC,EAAE,SAAS,iBAAiB,EAAE,CAAC;CAClD;AA+BD;;;GAGG;AACH,wBAAgB,oBAAoB,CAClC,SAAS,EAAE,iBAAiB,EAC5B,aAAa,CAAC,EAAE,MAAM,GACrB,UAAU,CAcZ;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,UAAU,CAEzD;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,QAAQ,EAAE,QAAQ,GAAG,WAAW,CAO3D;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAKjD;AAID;;;GAGG;AACH,qBAAa,gBAAiB,YAAW,aAAa;IAIxC,OAAO,CAAC,QAAQ,CAAC,SAAS;IAHtC,OAAO,CAAC,MAAM,CAAiC;IAC/C,OAAO,CAAC,eAAe,CAA2B;gBAErB,SAAS,GAAE,MAAe;IAEjD,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;IAchE,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IAQzB,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,UAAU,EAAE,CAAC;IAqBhE,UAAU,CACd,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,WAAW,GACpB,OAAO,CAAC,SAAS,eAAe,EAAE,CAAC;IA6BhC,aAAa,CACjB,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,WAAW,GACpB,OAAO,CAAC,SAAS,eAAe,EAAE,CAAC;IA8DhC,WAAW,CAAC,QAAQ,EAAE,UAAU,GAAG,OAAO,CAAC,OAAO,CAAC;IAezD,8BAA8B;IAC9B,OAAO,CAAC,eAAe;IAQvB,2EAA2E;IAC3E,OAAO,CAAC,gBAAgB;CAczB"}
|
|
@@ -0,0 +1,210 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Domain Map Infrastructure — LSP Client Adapter
|
|
3
|
+
*
|
|
4
|
+
* Implements LspClientPort from the domain layer using GenericLspClient.
|
|
5
|
+
* Maps LSP protocol responses to domain value objects.
|
|
6
|
+
*
|
|
7
|
+
* Responsibilities:
|
|
8
|
+
* - Look up LSP server config for a language
|
|
9
|
+
* - Spawn and initialize the LSP server via GenericLspClient
|
|
10
|
+
* - Map textDocument/documentSymbol responses to domain CodeSymbol[]
|
|
11
|
+
* - Map textDocument/references responses to domain SymbolReference[]
|
|
12
|
+
* - Map callHierarchy responses to domain SymbolReference[]
|
|
13
|
+
* - Check LSP server availability via PATH lookup
|
|
14
|
+
*
|
|
15
|
+
* SOLID: SRP — LSP-to-domain mapping only
|
|
16
|
+
* SOLID: DIP — implements domain LspClientPort interface
|
|
17
|
+
* DDD: Infrastructure adapter
|
|
18
|
+
*/
|
|
19
|
+
import { execFile } from "node:child_process";
|
|
20
|
+
import { promisify } from "node:util";
|
|
21
|
+
import { LSP_SYMBOL_KIND_MAP } from "../../domain/domain-map/value-objects.js";
|
|
22
|
+
import { GenericLspClient } from "./lsp-json-rpc.js";
|
|
23
|
+
import { getLspConfig } from "./lsp-configs.js";
|
|
24
|
+
const execFileAsync = promisify(execFile);
|
|
25
|
+
// ── Mapping Functions (Pure, Exported for Testing) ────────────────────
|
|
26
|
+
/**
|
|
27
|
+
* Map an LSP DocumentSymbol to a domain CodeSymbol.
|
|
28
|
+
* Recursively maps children.
|
|
29
|
+
*/
|
|
30
|
+
export function mapLspSymbolToDomain(lspSymbol, containerName) {
|
|
31
|
+
const kind = mapSymbolKind(lspSymbol.kind);
|
|
32
|
+
const range = mapLspRange(lspSymbol.range);
|
|
33
|
+
const children = (lspSymbol.children ?? []).map((child) => mapLspSymbolToDomain(child, lspSymbol.name));
|
|
34
|
+
return {
|
|
35
|
+
name: lspSymbol.name,
|
|
36
|
+
kind,
|
|
37
|
+
range,
|
|
38
|
+
children,
|
|
39
|
+
...(containerName !== undefined ? { containerName } : {}),
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Map an LSP SymbolKind number to a domain SymbolKind string.
|
|
44
|
+
* Falls back to "variable" for unknown kinds.
|
|
45
|
+
*/
|
|
46
|
+
export function mapSymbolKind(lspKind) {
|
|
47
|
+
return LSP_SYMBOL_KIND_MAP.get(lspKind) ?? "variable";
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Map an LSP Range to a domain SourceRange.
|
|
51
|
+
*/
|
|
52
|
+
export function mapLspRange(lspRange) {
|
|
53
|
+
return {
|
|
54
|
+
startLine: lspRange.start.line,
|
|
55
|
+
startCharacter: lspRange.start.character,
|
|
56
|
+
endLine: lspRange.end.line,
|
|
57
|
+
endCharacter: lspRange.end.character,
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Extract a file path from a file:// URI.
|
|
62
|
+
* Handles URL-encoded characters.
|
|
63
|
+
*/
|
|
64
|
+
export function fileUriToPath(uri) {
|
|
65
|
+
if (uri.startsWith("file://")) {
|
|
66
|
+
return decodeURIComponent(uri.slice(7));
|
|
67
|
+
}
|
|
68
|
+
return uri;
|
|
69
|
+
}
|
|
70
|
+
// ── LSP Client Adapter ───────────────────────────────────────────────
|
|
71
|
+
/**
|
|
72
|
+
* Implementation of LspClientPort using GenericLspClient.
|
|
73
|
+
* Spawns one LSP server per analysis session.
|
|
74
|
+
*/
|
|
75
|
+
export class LspClientAdapter {
|
|
76
|
+
timeoutMs;
|
|
77
|
+
client = null;
|
|
78
|
+
currentLanguage = null;
|
|
79
|
+
constructor(timeoutMs = 30_000) {
|
|
80
|
+
this.timeoutMs = timeoutMs;
|
|
81
|
+
}
|
|
82
|
+
async initialize(rootUri, language) {
|
|
83
|
+
const config = getLspConfig(language);
|
|
84
|
+
if (config === undefined) {
|
|
85
|
+
throw new Error(`No LSP configuration found for language: ${language}`);
|
|
86
|
+
}
|
|
87
|
+
this.client = new GenericLspClient(this.timeoutMs);
|
|
88
|
+
await this.client.start(config.command, config.args, rootUri, {
|
|
89
|
+
...config.initializationOptions,
|
|
90
|
+
});
|
|
91
|
+
this.currentLanguage = language;
|
|
92
|
+
}
|
|
93
|
+
async shutdown() {
|
|
94
|
+
if (this.client !== null) {
|
|
95
|
+
await this.client.shutdown();
|
|
96
|
+
this.client = null;
|
|
97
|
+
this.currentLanguage = null;
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
async documentSymbols(fileUri) {
|
|
101
|
+
this.ensureConnected();
|
|
102
|
+
const result = await this.client.sendRequest("textDocument/documentSymbol", {
|
|
103
|
+
textDocument: { uri: fileUri },
|
|
104
|
+
});
|
|
105
|
+
if (!Array.isArray(result)) {
|
|
106
|
+
return [];
|
|
107
|
+
}
|
|
108
|
+
// LSP can return DocumentSymbol[] (hierarchical) or SymbolInformation[] (flat)
|
|
109
|
+
// We request hierarchical via capabilities, but handle both
|
|
110
|
+
return result.map((sym) => mapLspSymbolToDomain(sym));
|
|
111
|
+
}
|
|
112
|
+
async references(fileUri, position) {
|
|
113
|
+
this.ensureConnected();
|
|
114
|
+
this.ensureCapability("supportsReferences");
|
|
115
|
+
const result = await this.client.sendRequest("textDocument/references", {
|
|
116
|
+
textDocument: { uri: fileUri },
|
|
117
|
+
position: {
|
|
118
|
+
line: position.startLine,
|
|
119
|
+
character: position.startCharacter,
|
|
120
|
+
},
|
|
121
|
+
context: { includeDeclaration: false },
|
|
122
|
+
});
|
|
123
|
+
if (!Array.isArray(result)) {
|
|
124
|
+
return [];
|
|
125
|
+
}
|
|
126
|
+
const sourceFile = fileUriToPath(fileUri);
|
|
127
|
+
return result.map((loc) => ({
|
|
128
|
+
fromFile: sourceFile,
|
|
129
|
+
fromSymbol: "",
|
|
130
|
+
toFile: fileUriToPath(loc.uri),
|
|
131
|
+
toSymbol: "",
|
|
132
|
+
type: "uses",
|
|
133
|
+
}));
|
|
134
|
+
}
|
|
135
|
+
async callHierarchy(fileUri, position) {
|
|
136
|
+
this.ensureConnected();
|
|
137
|
+
this.ensureCapability("supportsCallHierarchy");
|
|
138
|
+
// Stage 1: Prepare call hierarchy item
|
|
139
|
+
const prepareResult = await this.client.sendRequest("callHierarchy/prepareCallHierarchy", {
|
|
140
|
+
textDocument: { uri: fileUri },
|
|
141
|
+
position: {
|
|
142
|
+
line: position.startLine,
|
|
143
|
+
character: position.startCharacter,
|
|
144
|
+
},
|
|
145
|
+
});
|
|
146
|
+
if (!Array.isArray(prepareResult) || prepareResult.length === 0) {
|
|
147
|
+
return [];
|
|
148
|
+
}
|
|
149
|
+
const item = prepareResult[0];
|
|
150
|
+
const references = [];
|
|
151
|
+
// Stage 2: Get incoming calls
|
|
152
|
+
const incomingResult = await this.client.sendRequest("callHierarchy/incomingCalls", { item });
|
|
153
|
+
if (Array.isArray(incomingResult)) {
|
|
154
|
+
for (const call of incomingResult) {
|
|
155
|
+
references.push({
|
|
156
|
+
fromFile: fileUriToPath(call.from.uri),
|
|
157
|
+
fromSymbol: call.from.name,
|
|
158
|
+
toFile: fileUriToPath(item.uri),
|
|
159
|
+
toSymbol: item.name,
|
|
160
|
+
type: "calls",
|
|
161
|
+
});
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
// Stage 3: Get outgoing calls
|
|
165
|
+
const outgoingResult = await this.client.sendRequest("callHierarchy/outgoingCalls", { item });
|
|
166
|
+
if (Array.isArray(outgoingResult)) {
|
|
167
|
+
for (const call of outgoingResult) {
|
|
168
|
+
references.push({
|
|
169
|
+
fromFile: fileUriToPath(item.uri),
|
|
170
|
+
fromSymbol: item.name,
|
|
171
|
+
toFile: fileUriToPath(call.to.uri),
|
|
172
|
+
toSymbol: call.to.name,
|
|
173
|
+
type: "calls",
|
|
174
|
+
});
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
return references;
|
|
178
|
+
}
|
|
179
|
+
async isAvailable(language) {
|
|
180
|
+
const config = getLspConfig(language);
|
|
181
|
+
if (config === undefined) {
|
|
182
|
+
return false;
|
|
183
|
+
}
|
|
184
|
+
try {
|
|
185
|
+
// Use 'which' on Unix/macOS to check if command exists in PATH
|
|
186
|
+
await execFileAsync("which", [config.command]);
|
|
187
|
+
return true;
|
|
188
|
+
}
|
|
189
|
+
catch {
|
|
190
|
+
return false;
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
/** Throw if not connected. */
|
|
194
|
+
ensureConnected() {
|
|
195
|
+
if (this.client === null || !this.client.isConnected) {
|
|
196
|
+
throw new Error("LspClientAdapter: not connected. Call initialize() first.");
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
/** Throw if the current language's config doesn't support a capability. */
|
|
200
|
+
ensureCapability(capability) {
|
|
201
|
+
if (this.currentLanguage === null) {
|
|
202
|
+
throw new Error("LspClientAdapter: no language set");
|
|
203
|
+
}
|
|
204
|
+
const config = getLspConfig(this.currentLanguage);
|
|
205
|
+
if (config === undefined || !config[capability]) {
|
|
206
|
+
throw new Error(`LSP server for ${this.currentLanguage} does not support ${capability}`);
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
//# sourceMappingURL=lsp-adapter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lsp-adapter.js","sourceRoot":"","sources":["../../../src/infrastructure/domain-map/lsp-adapter.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Domain Map Infrastructure — LSP Server Configurations
|
|
3
|
+
*
|
|
4
|
+
* Configuration for each supported LSP server. Maps LanguageId to
|
|
5
|
+
* the command, arguments, and capabilities needed to spawn and
|
|
6
|
+
* communicate with the appropriate language server.
|
|
7
|
+
*
|
|
8
|
+
* 16 distinct LSP server configurations covering 18 languages.
|
|
9
|
+
* TypeScript/JavaScript share one server, C/C++/Objective-C share another.
|
|
10
|
+
*
|
|
11
|
+
* SOLID: SRP — LSP server configuration only
|
|
12
|
+
* SOLID: OCP — new languages added by extending the config map
|
|
13
|
+
*/
|
|
14
|
+
import type { LanguageId } from "../../domain/domain-map/value-objects.js";
|
|
15
|
+
/**
|
|
16
|
+
* Configuration for a single LSP server.
|
|
17
|
+
* Contains everything needed to spawn and initialize the server.
|
|
18
|
+
*/
|
|
19
|
+
export interface LspLanguageConfig {
|
|
20
|
+
/** The command to spawn (e.g., "typescript-language-server"). */
|
|
21
|
+
readonly command: string;
|
|
22
|
+
/** Arguments to pass to the command (e.g., ["--stdio"]). */
|
|
23
|
+
readonly args: readonly string[];
|
|
24
|
+
/** LSP initialization options passed during handshake. */
|
|
25
|
+
readonly initializationOptions: Record<string, unknown>;
|
|
26
|
+
/** Root file patterns that indicate this language's project root. */
|
|
27
|
+
readonly rootPatterns: readonly string[];
|
|
28
|
+
/** Whether this server supports textDocument/documentSymbol. */
|
|
29
|
+
readonly supportsDocumentSymbols: boolean;
|
|
30
|
+
/** Whether this server supports textDocument/references. */
|
|
31
|
+
readonly supportsReferences: boolean;
|
|
32
|
+
/** Whether this server supports callHierarchy requests. */
|
|
33
|
+
readonly supportsCallHierarchy: boolean;
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* LSP server configurations indexed by LanguageId.
|
|
37
|
+
* Multiple languages may share the same server (e.g., TS/JS, C/C++/ObjC).
|
|
38
|
+
*/
|
|
39
|
+
export declare const LSP_CONFIGS: ReadonlyMap<LanguageId, LspLanguageConfig>;
|
|
40
|
+
/**
|
|
41
|
+
* Get the LSP configuration for a language.
|
|
42
|
+
* @param language - The language ID
|
|
43
|
+
* @returns The configuration or undefined if not supported
|
|
44
|
+
*/
|
|
45
|
+
export declare function getLspConfig(language: LanguageId): LspLanguageConfig | undefined;
|
|
46
|
+
/**
|
|
47
|
+
* Get all languages that share the same LSP server command.
|
|
48
|
+
* Useful for determining when a single server can handle multiple file types.
|
|
49
|
+
* @param command - The LSP server command (e.g., "clangd")
|
|
50
|
+
* @returns Array of language IDs using that server
|
|
51
|
+
*/
|
|
52
|
+
export declare function getLanguagesByServer(command: string): readonly LanguageId[];
|
|
53
|
+
//# sourceMappingURL=lsp-configs.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lsp-configs.d.ts","sourceRoot":"","sources":["../../../src/infrastructure/domain-map/lsp-configs.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AACH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,0CAA0C,CAAC;AAI3E;;;GAGG;AACH,MAAM,WAAW,iBAAiB;IAChC,iEAAiE;IACjE,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,4DAA4D;IAC5D,QAAQ,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,CAAC;IACjC,0DAA0D;IAC1D,QAAQ,CAAC,qBAAqB,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACxD,qEAAqE;IACrE,QAAQ,CAAC,YAAY,EAAE,SAAS,MAAM,EAAE,CAAC;IACzC,gEAAgE;IAChE,QAAQ,CAAC,uBAAuB,EAAE,OAAO,CAAC;IAC1C,4DAA4D;IAC5D,QAAQ,CAAC,kBAAkB,EAAE,OAAO,CAAC;IACrC,2DAA2D;IAC3D,QAAQ,CAAC,qBAAqB,EAAE,OAAO,CAAC;CACzC;AAID;;;GAGG;AACH,eAAO,MAAM,WAAW,EAAE,WAAW,CAAC,UAAU,EAAE,iBAAiB,CAmQjE,CAAC;AAIH;;;;GAIG;AACH,wBAAgB,YAAY,CAC1B,QAAQ,EAAE,UAAU,GACnB,iBAAiB,GAAG,SAAS,CAE/B;AAED;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,UAAU,EAAE,CAQ3E"}
|