@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,161 @@
|
|
|
1
|
+
import { Environment } from "../../domain/environment/entities.js";
|
|
2
|
+
import { EnvironmentId, EnvironmentName, containerConfigToJSON, containerConfigFromJSON, } from "../../domain/environment/value-objects.js";
|
|
3
|
+
import { WorkspaceId, Timestamp } from "../../domain/shared/value-objects.js";
|
|
4
|
+
// ── Schema ───────────────────────────────────────────────────────────
|
|
5
|
+
const SCHEMA_KEY = "environments";
|
|
6
|
+
const DDL = `
|
|
7
|
+
CREATE TABLE IF NOT EXISTS environments (
|
|
8
|
+
id TEXT PRIMARY KEY,
|
|
9
|
+
name TEXT NOT NULL UNIQUE,
|
|
10
|
+
workspace_id TEXT NOT NULL,
|
|
11
|
+
card_id TEXT,
|
|
12
|
+
purpose TEXT NOT NULL,
|
|
13
|
+
description TEXT NOT NULL,
|
|
14
|
+
status TEXT NOT NULL DEFAULT 'creating',
|
|
15
|
+
container_config TEXT NOT NULL DEFAULT '{}',
|
|
16
|
+
merge_strategy TEXT NOT NULL DEFAULT 'squash',
|
|
17
|
+
merge_commit_sha TEXT,
|
|
18
|
+
error_message TEXT,
|
|
19
|
+
metadata TEXT NOT NULL DEFAULT '{}',
|
|
20
|
+
created_at TEXT NOT NULL,
|
|
21
|
+
updated_at TEXT NOT NULL
|
|
22
|
+
);
|
|
23
|
+
CREATE INDEX IF NOT EXISTS idx_environments_workspace
|
|
24
|
+
ON environments(workspace_id);
|
|
25
|
+
CREATE INDEX IF NOT EXISTS idx_environments_status
|
|
26
|
+
ON environments(workspace_id, status);
|
|
27
|
+
CREATE INDEX IF NOT EXISTS idx_environments_card
|
|
28
|
+
ON environments(card_id);
|
|
29
|
+
CREATE INDEX IF NOT EXISTS idx_environments_name
|
|
30
|
+
ON environments(name);
|
|
31
|
+
`;
|
|
32
|
+
// ── Repository Implementation ────────────────────────────────────────
|
|
33
|
+
export class SqliteEnvironmentRepository {
|
|
34
|
+
db;
|
|
35
|
+
workspaceId;
|
|
36
|
+
constructor(db, workspaceId) {
|
|
37
|
+
this.db = db;
|
|
38
|
+
this.workspaceId = workspaceId;
|
|
39
|
+
this.db.ensureSchema(SCHEMA_KEY, DDL);
|
|
40
|
+
}
|
|
41
|
+
async save(environment) {
|
|
42
|
+
this.db.execute(`INSERT INTO environments (
|
|
43
|
+
id, name, workspace_id, card_id, purpose, description,
|
|
44
|
+
status, container_config, merge_strategy, merge_commit_sha,
|
|
45
|
+
error_message, metadata, created_at, updated_at
|
|
46
|
+
) VALUES (
|
|
47
|
+
@id, @name, @workspace_id, @card_id, @purpose, @description,
|
|
48
|
+
@status, @container_config, @merge_strategy, @merge_commit_sha,
|
|
49
|
+
@error_message, @metadata, @created_at, @updated_at
|
|
50
|
+
)
|
|
51
|
+
ON CONFLICT(id) DO UPDATE SET
|
|
52
|
+
name = @name,
|
|
53
|
+
card_id = @card_id,
|
|
54
|
+
purpose = @purpose,
|
|
55
|
+
description = @description,
|
|
56
|
+
status = @status,
|
|
57
|
+
container_config = @container_config,
|
|
58
|
+
merge_strategy = @merge_strategy,
|
|
59
|
+
merge_commit_sha = @merge_commit_sha,
|
|
60
|
+
error_message = @error_message,
|
|
61
|
+
metadata = @metadata,
|
|
62
|
+
updated_at = @updated_at`, {
|
|
63
|
+
id: environment.id.value,
|
|
64
|
+
name: environment.name.value,
|
|
65
|
+
workspace_id: this.workspaceId.value,
|
|
66
|
+
card_id: environment.cardId ?? null,
|
|
67
|
+
purpose: environment.purpose,
|
|
68
|
+
description: environment.description,
|
|
69
|
+
status: environment.status,
|
|
70
|
+
container_config: containerConfigToJSON(environment.containerConfig),
|
|
71
|
+
merge_strategy: environment.mergeStrategy,
|
|
72
|
+
merge_commit_sha: environment.mergeCommitSha ?? null,
|
|
73
|
+
error_message: environment.errorMessage ?? null,
|
|
74
|
+
metadata: JSON.stringify(environment.metadata),
|
|
75
|
+
created_at: environment.createdAt.toISO(),
|
|
76
|
+
updated_at: environment.updatedAt.toISO(),
|
|
77
|
+
});
|
|
78
|
+
}
|
|
79
|
+
async findById(id) {
|
|
80
|
+
const row = this.db.queryOne("SELECT * FROM environments WHERE id = @id AND workspace_id = @workspace_id", { id: id.value, workspace_id: this.workspaceId.value });
|
|
81
|
+
return row !== undefined ? this.toEntity(row) : null;
|
|
82
|
+
}
|
|
83
|
+
async findByName(name) {
|
|
84
|
+
const row = this.db.queryOne("SELECT * FROM environments WHERE name = @name AND workspace_id = @workspace_id", { name: name.value, workspace_id: this.workspaceId.value });
|
|
85
|
+
return row !== undefined ? this.toEntity(row) : null;
|
|
86
|
+
}
|
|
87
|
+
async findByWorkspace(workspaceId) {
|
|
88
|
+
const rows = this.db.queryAll("SELECT * FROM environments WHERE workspace_id = @workspace_id ORDER BY created_at DESC", { workspace_id: workspaceId.value });
|
|
89
|
+
return rows.map((row) => this.toEntity(row));
|
|
90
|
+
}
|
|
91
|
+
async findByStatus(workspaceId, status) {
|
|
92
|
+
const rows = this.db.queryAll(`SELECT * FROM environments
|
|
93
|
+
WHERE workspace_id = @workspace_id AND status = @status
|
|
94
|
+
ORDER BY created_at DESC`, { workspace_id: workspaceId.value, status });
|
|
95
|
+
return rows.map((row) => this.toEntity(row));
|
|
96
|
+
}
|
|
97
|
+
async findByCard(cardId) {
|
|
98
|
+
const rows = this.db.queryAll(`SELECT * FROM environments
|
|
99
|
+
WHERE card_id = @card_id AND workspace_id = @workspace_id
|
|
100
|
+
ORDER BY created_at DESC`, { card_id: cardId, workspace_id: this.workspaceId.value });
|
|
101
|
+
return rows.map((row) => this.toEntity(row));
|
|
102
|
+
}
|
|
103
|
+
async findActive(workspaceId) {
|
|
104
|
+
const rows = this.db.queryAll(`SELECT * FROM environments
|
|
105
|
+
WHERE workspace_id = @workspace_id
|
|
106
|
+
AND status NOT IN ('deleted', 'merged')
|
|
107
|
+
ORDER BY created_at DESC`, { workspace_id: workspaceId.value });
|
|
108
|
+
return rows.map((row) => this.toEntity(row));
|
|
109
|
+
}
|
|
110
|
+
async delete(id) {
|
|
111
|
+
this.db.execute("DELETE FROM environments WHERE id = @id AND workspace_id = @workspace_id", { id: id.value, workspace_id: this.workspaceId.value });
|
|
112
|
+
}
|
|
113
|
+
async exists(id) {
|
|
114
|
+
const row = this.db.queryOne(`SELECT COUNT(*) as count FROM environments
|
|
115
|
+
WHERE id = @id AND workspace_id = @workspace_id`, { id: id.value, workspace_id: this.workspaceId.value });
|
|
116
|
+
return row !== undefined && row.count > 0;
|
|
117
|
+
}
|
|
118
|
+
async existsByName(name) {
|
|
119
|
+
const row = this.db.queryOne(`SELECT COUNT(*) as count FROM environments
|
|
120
|
+
WHERE name = @name AND workspace_id = @workspace_id`, { name: name.value, workspace_id: this.workspaceId.value });
|
|
121
|
+
return row !== undefined && row.count > 0;
|
|
122
|
+
}
|
|
123
|
+
async nextSequence(workspaceId) {
|
|
124
|
+
const row = this.db.queryOne(`SELECT MAX(CAST(SUBSTR(id, 5) AS INTEGER)) as max_seq
|
|
125
|
+
FROM environments WHERE workspace_id = @workspace_id`, { workspace_id: workspaceId.value });
|
|
126
|
+
return (row?.max_seq ?? 0) + 1;
|
|
127
|
+
}
|
|
128
|
+
// ── Mapping ──────────────────────────────────────────────────────
|
|
129
|
+
toEntity(row) {
|
|
130
|
+
let metadata = {};
|
|
131
|
+
try {
|
|
132
|
+
metadata = JSON.parse(row.metadata);
|
|
133
|
+
}
|
|
134
|
+
catch {
|
|
135
|
+
// Corrupted JSON — default to empty
|
|
136
|
+
}
|
|
137
|
+
let containerConfig = containerConfigFromJSON("{}");
|
|
138
|
+
try {
|
|
139
|
+
containerConfig = containerConfigFromJSON(row.container_config);
|
|
140
|
+
}
|
|
141
|
+
catch {
|
|
142
|
+
// Corrupted JSON — default to empty
|
|
143
|
+
}
|
|
144
|
+
return Environment.reconstitute({
|
|
145
|
+
id: EnvironmentId.from(row.id),
|
|
146
|
+
name: EnvironmentName.from(row.name),
|
|
147
|
+
cardId: row.card_id ?? undefined,
|
|
148
|
+
purpose: row.purpose,
|
|
149
|
+
description: row.description,
|
|
150
|
+
status: row.status,
|
|
151
|
+
containerConfig,
|
|
152
|
+
mergeStrategy: row.merge_strategy,
|
|
153
|
+
mergeCommitSha: row.merge_commit_sha ?? undefined,
|
|
154
|
+
errorMessage: row.error_message ?? undefined,
|
|
155
|
+
metadata,
|
|
156
|
+
createdAt: Timestamp.fromISO(row.created_at),
|
|
157
|
+
updatedAt: Timestamp.fromISO(row.updated_at),
|
|
158
|
+
});
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
//# sourceMappingURL=environment-repository.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"environment-repository.js","sourceRoot":"","sources":["../../../src/infrastructure/environment/environment-repository.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Environment Scanner Adapter
|
|
3
|
+
*
|
|
4
|
+
* Implements EnvironmentScannerPort by wrapping domain-map's
|
|
5
|
+
* FileProjectScanner behind a narrow interface.
|
|
6
|
+
* This prevents a domain-layer cross-context dependency.
|
|
7
|
+
*
|
|
8
|
+
* SOLID: ISP - narrow interface specific to environment needs
|
|
9
|
+
* SOLID: DIP - depends on ProjectScannerPort, not concrete class
|
|
10
|
+
* SOLID: SRP - adapts project scanning for environment context
|
|
11
|
+
*/
|
|
12
|
+
import type { ProjectScannerPort } from "../../domain/domain-map/repositories.js";
|
|
13
|
+
import type { EnvironmentScannerPort, EnvironmentProjectInfo } from "../../domain/environment/repositories.js";
|
|
14
|
+
/**
|
|
15
|
+
* Adapts the domain-map ProjectScannerPort to the narrower
|
|
16
|
+
* EnvironmentScannerPort interface used by the environment context.
|
|
17
|
+
*/
|
|
18
|
+
export declare class EnvironmentScannerAdapter implements EnvironmentScannerPort {
|
|
19
|
+
private readonly scanner;
|
|
20
|
+
constructor(scanner: ProjectScannerPort);
|
|
21
|
+
scanProject(directory: string): Promise<EnvironmentProjectInfo>;
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=scanner-adapter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scanner-adapter.d.ts","sourceRoot":"","sources":["../../../src/infrastructure/environment/scanner-adapter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,yCAAyC,CAAC;AAClF,OAAO,KAAK,EACV,sBAAsB,EACtB,sBAAsB,EACvB,MAAM,0CAA0C,CAAC;AAclD;;;GAGG;AACH,qBAAa,yBAA0B,YAAW,sBAAsB;IAC1D,OAAO,CAAC,QAAQ,CAAC,OAAO;gBAAP,OAAO,EAAE,kBAAkB;IAElD,WAAW,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,sBAAsB,CAAC;CAetE"}
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Environment Scanner Adapter
|
|
3
|
+
*
|
|
4
|
+
* Implements EnvironmentScannerPort by wrapping domain-map's
|
|
5
|
+
* FileProjectScanner behind a narrow interface.
|
|
6
|
+
* This prevents a domain-layer cross-context dependency.
|
|
7
|
+
*
|
|
8
|
+
* SOLID: ISP - narrow interface specific to environment needs
|
|
9
|
+
* SOLID: DIP - depends on ProjectScannerPort, not concrete class
|
|
10
|
+
* SOLID: SRP - adapts project scanning for environment context
|
|
11
|
+
*/
|
|
12
|
+
// ── Default Analysis Config for Scanning ─────────────────────────────
|
|
13
|
+
/** Lightweight scan config for environment detection (not full analysis). */
|
|
14
|
+
const SCAN_CONFIG = {
|
|
15
|
+
maxFiles: 500,
|
|
16
|
+
maxFileLines: 500,
|
|
17
|
+
legacyThresholdLines: 1000,
|
|
18
|
+
legacyRatio: 0.1,
|
|
19
|
+
};
|
|
20
|
+
// ── Scanner Adapter Implementation ───────────────────────────────────
|
|
21
|
+
/**
|
|
22
|
+
* Adapts the domain-map ProjectScannerPort to the narrower
|
|
23
|
+
* EnvironmentScannerPort interface used by the environment context.
|
|
24
|
+
*/
|
|
25
|
+
export class EnvironmentScannerAdapter {
|
|
26
|
+
scanner;
|
|
27
|
+
constructor(scanner) {
|
|
28
|
+
this.scanner = scanner;
|
|
29
|
+
}
|
|
30
|
+
async scanProject(directory) {
|
|
31
|
+
const result = await this.scanner.scanProject(directory, SCAN_CONFIG);
|
|
32
|
+
// Extract framework indicators from file paths
|
|
33
|
+
const frameworks = detectFrameworks(result.files.map((f) => f.relativePath));
|
|
34
|
+
return {
|
|
35
|
+
primaryLanguage: result.primaryLanguage,
|
|
36
|
+
frameworks,
|
|
37
|
+
totalFiles: result.files.length,
|
|
38
|
+
totalLines: result.files.reduce((sum, f) => sum + f.lineCount, 0),
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
// ── Framework Detection ──────────────────────────────────────────────
|
|
43
|
+
/** Known framework indicator files/directories. */
|
|
44
|
+
const FRAMEWORK_INDICATORS = new Map([
|
|
45
|
+
["package.json", "node"],
|
|
46
|
+
["tsconfig.json", "typescript"],
|
|
47
|
+
["next.config.js", "nextjs"],
|
|
48
|
+
["next.config.ts", "nextjs"],
|
|
49
|
+
["next.config.mjs", "nextjs"],
|
|
50
|
+
["nuxt.config.ts", "nuxt"],
|
|
51
|
+
["vite.config.ts", "vite"],
|
|
52
|
+
["vite.config.js", "vite"],
|
|
53
|
+
["angular.json", "angular"],
|
|
54
|
+
["svelte.config.js", "svelte"],
|
|
55
|
+
["remix.config.js", "remix"],
|
|
56
|
+
["astro.config.mjs", "astro"],
|
|
57
|
+
["requirements.txt", "pip"],
|
|
58
|
+
["pyproject.toml", "python-project"],
|
|
59
|
+
["poetry.lock", "poetry"],
|
|
60
|
+
["Pipfile", "pipenv"],
|
|
61
|
+
["setup.py", "setuptools"],
|
|
62
|
+
["Cargo.toml", "cargo"],
|
|
63
|
+
["go.mod", "go-modules"],
|
|
64
|
+
["Gemfile", "bundler"],
|
|
65
|
+
["composer.json", "composer"],
|
|
66
|
+
["build.gradle", "gradle"],
|
|
67
|
+
["build.gradle.kts", "gradle"],
|
|
68
|
+
["pom.xml", "maven"],
|
|
69
|
+
["Package.swift", "swift-pm"],
|
|
70
|
+
["pubspec.yaml", "dart-pub"],
|
|
71
|
+
["mix.exs", "mix"],
|
|
72
|
+
["Makefile", "make"],
|
|
73
|
+
["Dockerfile", "docker"],
|
|
74
|
+
["docker-compose.yml", "docker-compose"],
|
|
75
|
+
["docker-compose.yaml", "docker-compose"],
|
|
76
|
+
[".env", "dotenv"],
|
|
77
|
+
["jest.config.ts", "jest"],
|
|
78
|
+
["jest.config.js", "jest"],
|
|
79
|
+
["vitest.config.ts", "vitest"],
|
|
80
|
+
["pytest.ini", "pytest"],
|
|
81
|
+
["tox.ini", "tox"],
|
|
82
|
+
]);
|
|
83
|
+
/**
|
|
84
|
+
* Detect frameworks from file paths.
|
|
85
|
+
* Returns deduplicated list of detected framework identifiers.
|
|
86
|
+
*/
|
|
87
|
+
function detectFrameworks(relativePaths) {
|
|
88
|
+
const detected = new Set();
|
|
89
|
+
for (const filePath of relativePaths) {
|
|
90
|
+
// Check just the filename (last segment)
|
|
91
|
+
const parts = filePath.replace(/\\/g, "/").split("/");
|
|
92
|
+
const fileName = parts[parts.length - 1];
|
|
93
|
+
if (fileName !== undefined) {
|
|
94
|
+
const framework = FRAMEWORK_INDICATORS.get(fileName);
|
|
95
|
+
if (framework !== undefined) {
|
|
96
|
+
detected.add(framework);
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
return [...detected].sort();
|
|
101
|
+
}
|
|
102
|
+
//# sourceMappingURL=scanner-adapter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scanner-adapter.js","sourceRoot":"","sources":["../../../src/infrastructure/environment/scanner-adapter.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SQLite Card Repository
|
|
3
|
+
*
|
|
4
|
+
* Implements CardRepository interface from the kanban domain layer.
|
|
5
|
+
* Maps Card entities to/from SQLite rows with full acceptance criteria
|
|
6
|
+
* serialization (JSON column).
|
|
7
|
+
*
|
|
8
|
+
* Schema: cards table + acceptance_criteria JSON column
|
|
9
|
+
* Simplified from legacy 960-line Python monolith by focusing on
|
|
10
|
+
* Card aggregate only (ISP: separate from Sprint/Epic repos).
|
|
11
|
+
*
|
|
12
|
+
* SOLID: SRP - persistence for Card aggregate only
|
|
13
|
+
* SOLID: DIP - implements domain interface
|
|
14
|
+
* SOLID: LSP - fully substitutable for CardRepository
|
|
15
|
+
*/
|
|
16
|
+
import type { SqliteAdapter } from "../database/sqlite-adapter.js";
|
|
17
|
+
import type { CardRepository } from "../../domain/kanban/repositories.js";
|
|
18
|
+
import { Card } from "../../domain/kanban/entities.js";
|
|
19
|
+
import { CardId, CardStatus, SprintId, EpicId } from "../../domain/kanban/value-objects.js";
|
|
20
|
+
import { WorkspaceId } from "../../domain/shared/value-objects.js";
|
|
21
|
+
/**
|
|
22
|
+
* SQLite implementation of CardRepository.
|
|
23
|
+
*
|
|
24
|
+
* Acceptance criteria are stored as a JSON array column to avoid
|
|
25
|
+
* a separate join table (simpler, and ACs are part of the Card aggregate).
|
|
26
|
+
*/
|
|
27
|
+
export declare class SqliteCardRepository implements CardRepository {
|
|
28
|
+
private readonly db;
|
|
29
|
+
constructor(db: SqliteAdapter);
|
|
30
|
+
save(card: Card): Promise<void>;
|
|
31
|
+
findById(id: CardId): Promise<Card | null>;
|
|
32
|
+
findByWorkspace(workspace: WorkspaceId, status?: CardStatus): Promise<readonly Card[]>;
|
|
33
|
+
findBySprint(sprintId: SprintId): Promise<readonly Card[]>;
|
|
34
|
+
findByEpic(epicId: EpicId): Promise<readonly Card[]>;
|
|
35
|
+
findByAgent(agent: string, workspace: WorkspaceId): Promise<readonly Card[]>;
|
|
36
|
+
countByStatus(workspace: WorkspaceId, status: CardStatus): Promise<number>;
|
|
37
|
+
nextSequence(workspace: WorkspaceId): Promise<number>;
|
|
38
|
+
delete(id: CardId): Promise<void>;
|
|
39
|
+
private toDomain;
|
|
40
|
+
}
|
|
41
|
+
//# sourceMappingURL=card-repository.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"card-repository.d.ts","sourceRoot":"","sources":["../../../src/infrastructure/kanban/card-repository.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AACH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AACnE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qCAAqC,CAAC;AAC1E,OAAO,EAAE,IAAI,EAAE,MAAM,iCAAiC,CAAC;AAEvD,OAAO,EACL,MAAM,EACN,UAAU,EAEV,QAAQ,EACR,MAAM,EACP,MAAM,sCAAsC,CAAC;AAE9C,OAAO,EAAE,WAAW,EAAa,MAAM,sCAAsC,CAAC;AAuD9E;;;;;GAKG;AACH,qBAAa,oBAAqB,YAAW,cAAc;IAC7C,OAAO,CAAC,QAAQ,CAAC,EAAE;gBAAF,EAAE,EAAE,aAAa;IAIxC,IAAI,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;IAkD/B,QAAQ,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC;IAQ1C,eAAe,CACnB,SAAS,EAAE,WAAW,EACtB,MAAM,CAAC,EAAE,UAAU,GAClB,OAAO,CAAC,SAAS,IAAI,EAAE,CAAC;IAmBrB,YAAY,CAAC,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,SAAS,IAAI,EAAE,CAAC;IAU1D,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,IAAI,EAAE,CAAC;IAUpD,WAAW,CACf,KAAK,EAAE,MAAM,EACb,SAAS,EAAE,WAAW,GACrB,OAAO,CAAC,SAAS,IAAI,EAAE,CAAC;IAUrB,aAAa,CACjB,SAAS,EAAE,WAAW,EACtB,MAAM,EAAE,UAAU,GACjB,OAAO,CAAC,MAAM,CAAC;IASZ,YAAY,CAAC,SAAS,EAAE,WAAW,GAAG,OAAO,CAAC,MAAM,CAAC;IASrD,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAMvC,OAAO,CAAC,QAAQ;CA2CjB"}
|
|
@@ -0,0 +1,185 @@
|
|
|
1
|
+
import { Card } from "../../domain/kanban/entities.js";
|
|
2
|
+
import { CardId, CardStatus, Priority, SprintId, EpicId, } from "../../domain/kanban/value-objects.js";
|
|
3
|
+
import { WorkspaceId, Timestamp } from "../../domain/shared/value-objects.js";
|
|
4
|
+
const SCHEMA_KEY = "kanban_cards";
|
|
5
|
+
const DDL = `
|
|
6
|
+
CREATE TABLE IF NOT EXISTS cards (
|
|
7
|
+
id TEXT PRIMARY KEY,
|
|
8
|
+
workspace TEXT NOT NULL,
|
|
9
|
+
title TEXT NOT NULL,
|
|
10
|
+
status TEXT NOT NULL DEFAULT 'backlog',
|
|
11
|
+
priority TEXT NOT NULL DEFAULT 'medium',
|
|
12
|
+
description TEXT,
|
|
13
|
+
epic_id TEXT,
|
|
14
|
+
sprint_id TEXT,
|
|
15
|
+
story_points INTEGER,
|
|
16
|
+
assigned_agent TEXT,
|
|
17
|
+
acceptance_criteria TEXT NOT NULL DEFAULT '[]',
|
|
18
|
+
review_iterations INTEGER NOT NULL DEFAULT 0,
|
|
19
|
+
previous_status TEXT,
|
|
20
|
+
grooming_completed INTEGER NOT NULL DEFAULT 0,
|
|
21
|
+
created_at TEXT NOT NULL,
|
|
22
|
+
started_at TEXT,
|
|
23
|
+
completed_at TEXT
|
|
24
|
+
);
|
|
25
|
+
CREATE INDEX IF NOT EXISTS idx_cards_workspace ON cards(workspace);
|
|
26
|
+
CREATE INDEX IF NOT EXISTS idx_cards_status ON cards(status);
|
|
27
|
+
CREATE INDEX IF NOT EXISTS idx_cards_sprint ON cards(sprint_id);
|
|
28
|
+
CREATE INDEX IF NOT EXISTS idx_cards_epic ON cards(epic_id);
|
|
29
|
+
CREATE INDEX IF NOT EXISTS idx_cards_workspace_status
|
|
30
|
+
ON cards(workspace, status);
|
|
31
|
+
CREATE INDEX IF NOT EXISTS idx_cards_agent
|
|
32
|
+
ON cards(assigned_agent);
|
|
33
|
+
`;
|
|
34
|
+
/**
|
|
35
|
+
* SQLite implementation of CardRepository.
|
|
36
|
+
*
|
|
37
|
+
* Acceptance criteria are stored as a JSON array column to avoid
|
|
38
|
+
* a separate join table (simpler, and ACs are part of the Card aggregate).
|
|
39
|
+
*/
|
|
40
|
+
export class SqliteCardRepository {
|
|
41
|
+
db;
|
|
42
|
+
constructor(db) {
|
|
43
|
+
this.db = db;
|
|
44
|
+
this.db.ensureSchema(SCHEMA_KEY, DDL);
|
|
45
|
+
}
|
|
46
|
+
async save(card) {
|
|
47
|
+
const acJson = JSON.stringify(card.acceptanceCriteria);
|
|
48
|
+
const sql = `
|
|
49
|
+
INSERT INTO cards (
|
|
50
|
+
id, workspace, title, status, priority, description,
|
|
51
|
+
epic_id, sprint_id, story_points, assigned_agent,
|
|
52
|
+
acceptance_criteria, review_iterations, previous_status,
|
|
53
|
+
grooming_completed, created_at, started_at, completed_at
|
|
54
|
+
) VALUES (
|
|
55
|
+
@id, @workspace, @title, @status, @priority, @description,
|
|
56
|
+
@epic_id, @sprint_id, @story_points, @assigned_agent,
|
|
57
|
+
@acceptance_criteria, @review_iterations, @previous_status,
|
|
58
|
+
@grooming_completed, @created_at, @started_at, @completed_at
|
|
59
|
+
)
|
|
60
|
+
ON CONFLICT(id) DO UPDATE SET
|
|
61
|
+
status = @status,
|
|
62
|
+
priority = @priority,
|
|
63
|
+
description = @description,
|
|
64
|
+
epic_id = @epic_id,
|
|
65
|
+
sprint_id = @sprint_id,
|
|
66
|
+
story_points = @story_points,
|
|
67
|
+
assigned_agent = @assigned_agent,
|
|
68
|
+
acceptance_criteria = @acceptance_criteria,
|
|
69
|
+
review_iterations = @review_iterations,
|
|
70
|
+
previous_status = @previous_status,
|
|
71
|
+
grooming_completed = @grooming_completed,
|
|
72
|
+
started_at = @started_at,
|
|
73
|
+
completed_at = @completed_at
|
|
74
|
+
`;
|
|
75
|
+
this.db.execute(sql, {
|
|
76
|
+
id: card.id.value,
|
|
77
|
+
workspace: card.workspace.value,
|
|
78
|
+
title: card.title,
|
|
79
|
+
status: card.status,
|
|
80
|
+
priority: card.priority,
|
|
81
|
+
description: card.description ?? null,
|
|
82
|
+
epic_id: card.epicId?.value ?? null,
|
|
83
|
+
sprint_id: card.sprintId?.value ?? null,
|
|
84
|
+
story_points: card.storyPoints ?? null,
|
|
85
|
+
assigned_agent: card.assignedAgent ?? null,
|
|
86
|
+
acceptance_criteria: acJson,
|
|
87
|
+
review_iterations: card.reviewIterations,
|
|
88
|
+
previous_status: card.previousStatus ?? null,
|
|
89
|
+
grooming_completed: card.groomingCompleted ? 1 : 0,
|
|
90
|
+
created_at: card.createdAt.toISO(),
|
|
91
|
+
started_at: card.startedAt?.toISO() ?? null,
|
|
92
|
+
completed_at: card.completedAt?.toISO() ?? null,
|
|
93
|
+
});
|
|
94
|
+
}
|
|
95
|
+
async findById(id) {
|
|
96
|
+
const row = this.db.queryOne("SELECT * FROM cards WHERE id = @id", { id: id.value });
|
|
97
|
+
return row ? this.toDomain(row) : null;
|
|
98
|
+
}
|
|
99
|
+
async findByWorkspace(workspace, status) {
|
|
100
|
+
if (status !== undefined) {
|
|
101
|
+
const rows = this.db.queryAll(`SELECT * FROM cards
|
|
102
|
+
WHERE workspace = @workspace AND status = @status
|
|
103
|
+
ORDER BY created_at DESC`, { workspace: workspace.value, status });
|
|
104
|
+
return rows.map((row) => this.toDomain(row));
|
|
105
|
+
}
|
|
106
|
+
const rows = this.db.queryAll(`SELECT * FROM cards
|
|
107
|
+
WHERE workspace = @workspace
|
|
108
|
+
ORDER BY created_at DESC`, { workspace: workspace.value });
|
|
109
|
+
return rows.map((row) => this.toDomain(row));
|
|
110
|
+
}
|
|
111
|
+
async findBySprint(sprintId) {
|
|
112
|
+
const rows = this.db.queryAll(`SELECT * FROM cards
|
|
113
|
+
WHERE sprint_id = @sprint_id
|
|
114
|
+
ORDER BY created_at DESC`, { sprint_id: sprintId.value });
|
|
115
|
+
return rows.map((row) => this.toDomain(row));
|
|
116
|
+
}
|
|
117
|
+
async findByEpic(epicId) {
|
|
118
|
+
const rows = this.db.queryAll(`SELECT * FROM cards
|
|
119
|
+
WHERE epic_id = @epic_id
|
|
120
|
+
ORDER BY created_at DESC`, { epic_id: epicId.value });
|
|
121
|
+
return rows.map((row) => this.toDomain(row));
|
|
122
|
+
}
|
|
123
|
+
async findByAgent(agent, workspace) {
|
|
124
|
+
const rows = this.db.queryAll(`SELECT * FROM cards
|
|
125
|
+
WHERE assigned_agent = @agent AND workspace = @workspace
|
|
126
|
+
ORDER BY created_at DESC`, { agent, workspace: workspace.value });
|
|
127
|
+
return rows.map((row) => this.toDomain(row));
|
|
128
|
+
}
|
|
129
|
+
async countByStatus(workspace, status) {
|
|
130
|
+
const row = this.db.queryOne(`SELECT COUNT(*) as cnt FROM cards
|
|
131
|
+
WHERE workspace = @workspace AND status = @status`, { workspace: workspace.value, status });
|
|
132
|
+
return row?.cnt ?? 0;
|
|
133
|
+
}
|
|
134
|
+
async nextSequence(workspace) {
|
|
135
|
+
const row = this.db.queryOne(`SELECT MAX(CAST(SUBSTR(id, 4) AS INTEGER)) as max_seq
|
|
136
|
+
FROM cards WHERE workspace = @workspace`, { workspace: workspace.value });
|
|
137
|
+
return (row?.max_seq ?? 0) + 1;
|
|
138
|
+
}
|
|
139
|
+
async delete(id) {
|
|
140
|
+
this.db.execute("DELETE FROM cards WHERE id = @id", { id: id.value });
|
|
141
|
+
}
|
|
142
|
+
// ── Mapping ─────────────────────────────────────────────────────
|
|
143
|
+
toDomain(row) {
|
|
144
|
+
let acceptanceCriteria = [];
|
|
145
|
+
try {
|
|
146
|
+
acceptanceCriteria = JSON.parse(row.acceptance_criteria);
|
|
147
|
+
}
|
|
148
|
+
catch {
|
|
149
|
+
acceptanceCriteria = [];
|
|
150
|
+
}
|
|
151
|
+
const props = {
|
|
152
|
+
id: CardId.from(row.id),
|
|
153
|
+
workspace: WorkspaceId.from(row.workspace),
|
|
154
|
+
title: row.title,
|
|
155
|
+
status: row.status,
|
|
156
|
+
priority: row.priority,
|
|
157
|
+
...(row.description !== null ? { description: row.description } : {}),
|
|
158
|
+
...(row.epic_id !== null ? { epicId: EpicId.from(row.epic_id) } : {}),
|
|
159
|
+
...(row.sprint_id !== null
|
|
160
|
+
? { sprintId: SprintId.from(row.sprint_id) }
|
|
161
|
+
: {}),
|
|
162
|
+
...(row.story_points !== null
|
|
163
|
+
? { storyPoints: row.story_points }
|
|
164
|
+
: {}),
|
|
165
|
+
...(row.assigned_agent !== null
|
|
166
|
+
? { assignedAgent: row.assigned_agent }
|
|
167
|
+
: {}),
|
|
168
|
+
acceptanceCriteria,
|
|
169
|
+
reviewIterations: row.review_iterations,
|
|
170
|
+
...(row.previous_status !== null
|
|
171
|
+
? { previousStatus: row.previous_status }
|
|
172
|
+
: {}),
|
|
173
|
+
groomingCompleted: row.grooming_completed === 1,
|
|
174
|
+
createdAt: Timestamp.fromISO(row.created_at),
|
|
175
|
+
...(row.started_at !== null
|
|
176
|
+
? { startedAt: Timestamp.fromISO(row.started_at) }
|
|
177
|
+
: {}),
|
|
178
|
+
...(row.completed_at !== null
|
|
179
|
+
? { completedAt: Timestamp.fromISO(row.completed_at) }
|
|
180
|
+
: {}),
|
|
181
|
+
};
|
|
182
|
+
return Card.reconstitute(props);
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
//# sourceMappingURL=card-repository.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"card-repository.js","sourceRoot":"","sources":["../../../src/infrastructure/kanban/card-repository.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SQLite Sprint & Epic Repositories
|
|
3
|
+
*
|
|
4
|
+
* Implements SprintRepository and EpicRepository interfaces from domain.
|
|
5
|
+
* Each repository manages its own table schema (ISP).
|
|
6
|
+
*
|
|
7
|
+
* Split from legacy 960-line Python monolith: Sprint and Epic are
|
|
8
|
+
* separate aggregate roots with independent persistence.
|
|
9
|
+
*
|
|
10
|
+
* SOLID: SRP - Sprint persistence + Epic persistence (two classes)
|
|
11
|
+
* SOLID: DIP - implements domain interfaces
|
|
12
|
+
* SOLID: ISP - separate repository per aggregate root
|
|
13
|
+
*/
|
|
14
|
+
import type { SqliteAdapter } from "../database/sqlite-adapter.js";
|
|
15
|
+
import type { SprintRepository, EpicRepository } from "../../domain/kanban/repositories.js";
|
|
16
|
+
import { Sprint, Epic } from "../../domain/kanban/sprint.js";
|
|
17
|
+
import { SprintId, EpicId } from "../../domain/kanban/value-objects.js";
|
|
18
|
+
import { WorkspaceId } from "../../domain/shared/value-objects.js";
|
|
19
|
+
export declare class SqliteSprintRepository implements SprintRepository {
|
|
20
|
+
private readonly db;
|
|
21
|
+
constructor(db: SqliteAdapter);
|
|
22
|
+
save(sprint: Sprint): Promise<void>;
|
|
23
|
+
findById(id: SprintId): Promise<Sprint | null>;
|
|
24
|
+
findByWorkspace(workspace: WorkspaceId): Promise<readonly Sprint[]>;
|
|
25
|
+
findActive(workspace: WorkspaceId): Promise<Sprint | null>;
|
|
26
|
+
nextSequence(workspace: WorkspaceId): Promise<number>;
|
|
27
|
+
delete(id: SprintId): Promise<void>;
|
|
28
|
+
private toDomain;
|
|
29
|
+
}
|
|
30
|
+
export declare class SqliteEpicRepository implements EpicRepository {
|
|
31
|
+
private readonly db;
|
|
32
|
+
constructor(db: SqliteAdapter);
|
|
33
|
+
save(epic: Epic): Promise<void>;
|
|
34
|
+
findById(id: EpicId): Promise<Epic | null>;
|
|
35
|
+
findByWorkspace(workspace: WorkspaceId): Promise<readonly Epic[]>;
|
|
36
|
+
nextSequence(workspace: WorkspaceId): Promise<number>;
|
|
37
|
+
delete(id: EpicId): Promise<void>;
|
|
38
|
+
private toDomain;
|
|
39
|
+
}
|
|
40
|
+
//# sourceMappingURL=sprint-repository.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sprint-repository.d.ts","sourceRoot":"","sources":["../../../src/infrastructure/kanban/sprint-repository.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AACH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AACnE,OAAO,KAAK,EACV,gBAAgB,EAChB,cAAc,EACf,MAAM,qCAAqC,CAAC;AAC7C,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,+BAA+B,CAAC;AAE7D,OAAO,EACL,QAAQ,EAER,MAAM,EAGP,MAAM,sCAAsC,CAAC;AAC9C,OAAO,EAAE,WAAW,EAAa,MAAM,sCAAsC,CAAC;AAuC9E,qBAAa,sBAAuB,YAAW,gBAAgB;IACjD,OAAO,CAAC,QAAQ,CAAC,EAAE;gBAAF,EAAE,EAAE,aAAa;IAIxC,IAAI,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IA+BnC,QAAQ,CAAC,EAAE,EAAE,QAAQ,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAQ9C,eAAe,CAAC,SAAS,EAAE,WAAW,GAAG,OAAO,CAAC,SAAS,MAAM,EAAE,CAAC;IAUnE,UAAU,CAAC,SAAS,EAAE,WAAW,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAU1D,YAAY,CAAC,SAAS,EAAE,WAAW,GAAG,OAAO,CAAC,MAAM,CAAC;IASrD,MAAM,CAAC,EAAE,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;IAIzC,OAAO,CAAC,QAAQ;CAuBjB;AAiCD,qBAAa,oBAAqB,YAAW,cAAc;IAC7C,OAAO,CAAC,QAAQ,CAAC,EAAE;gBAAF,EAAE,EAAE,aAAa;IAIxC,IAAI,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;IAyB/B,QAAQ,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC;IAQ1C,eAAe,CAAC,SAAS,EAAE,WAAW,GAAG,OAAO,CAAC,SAAS,IAAI,EAAE,CAAC;IAUjE,YAAY,CAAC,SAAS,EAAE,WAAW,GAAG,OAAO,CAAC,MAAM,CAAC;IASrD,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAIvC,OAAO,CAAC,QAAQ;CAajB"}
|