@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 @@
|
|
|
1
|
+
{"version":3,"file":"policies.js","sourceRoot":"","sources":["../../../src/domain/governance/policies.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Policy Validation Service
|
|
3
|
+
*
|
|
4
|
+
* Evaluates tool invocations against the set of governance policies.
|
|
5
|
+
* Returns all violations (not just the first) for complete feedback.
|
|
6
|
+
*
|
|
7
|
+
* DDD: Domain Service - stateless validation logic
|
|
8
|
+
* SOLID: SRP - policy evaluation only
|
|
9
|
+
* SOLID: OCP - new policies via the PolicyRule interface
|
|
10
|
+
* SOLID: DIP - depends on PolicyRule interface, not specific rules
|
|
11
|
+
*/
|
|
12
|
+
import type { PolicyRule, Violation, ToolInvocationContext } from "./policies.js";
|
|
13
|
+
/** Result of policy validation. */
|
|
14
|
+
export interface ValidationResult {
|
|
15
|
+
readonly allowed: boolean;
|
|
16
|
+
readonly violations: readonly Violation[];
|
|
17
|
+
readonly errors: readonly Violation[];
|
|
18
|
+
readonly warnings: readonly Violation[];
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Evaluates tool invocations against governance policies.
|
|
22
|
+
* Stateless: all state comes from constructor parameters.
|
|
23
|
+
*/
|
|
24
|
+
export declare class PolicyValidationService {
|
|
25
|
+
private readonly policies;
|
|
26
|
+
constructor(policies: readonly PolicyRule[]);
|
|
27
|
+
/**
|
|
28
|
+
* Validate a tool invocation against all policies.
|
|
29
|
+
* Returns all violations found (errors + warnings).
|
|
30
|
+
* The operation is blocked if any error-severity violations exist.
|
|
31
|
+
*/
|
|
32
|
+
validate(ctx: ToolInvocationContext): ValidationResult;
|
|
33
|
+
/** Get all registered policy IDs (for introspection). */
|
|
34
|
+
get policyIds(): readonly string[];
|
|
35
|
+
/** Get count of active policies. */
|
|
36
|
+
get policyCount(): number;
|
|
37
|
+
}
|
|
38
|
+
//# sourceMappingURL=services.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"services.d.ts","sourceRoot":"","sources":["../../../src/domain/governance/services.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,OAAO,KAAK,EACV,UAAU,EACV,SAAS,EACT,qBAAqB,EACtB,MAAM,eAAe,CAAC;AAGvB,mCAAmC;AACnC,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,UAAU,EAAE,SAAS,SAAS,EAAE,CAAC;IAC1C,QAAQ,CAAC,MAAM,EAAE,SAAS,SAAS,EAAE,CAAC;IACtC,QAAQ,CAAC,QAAQ,EAAE,SAAS,SAAS,EAAE,CAAC;CACzC;AAED;;;GAGG;AACH,qBAAa,uBAAuB;IACtB,OAAO,CAAC,QAAQ,CAAC,QAAQ;gBAAR,QAAQ,EAAE,SAAS,UAAU,EAAE;IAE5D;;;;OAIG;IACH,QAAQ,CAAC,GAAG,EAAE,qBAAqB,GAAG,gBAAgB;IAyBtD,yDAAyD;IACzD,IAAI,SAAS,IAAI,SAAS,MAAM,EAAE,CAEjC;IAED,oCAAoC;IACpC,IAAI,WAAW,IAAI,MAAM,CAExB;CACF"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { ViolationSeverity } from "./policies.js";
|
|
2
|
+
/**
|
|
3
|
+
* Evaluates tool invocations against governance policies.
|
|
4
|
+
* Stateless: all state comes from constructor parameters.
|
|
5
|
+
*/
|
|
6
|
+
export class PolicyValidationService {
|
|
7
|
+
policies;
|
|
8
|
+
constructor(policies) {
|
|
9
|
+
this.policies = policies;
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Validate a tool invocation against all policies.
|
|
13
|
+
* Returns all violations found (errors + warnings).
|
|
14
|
+
* The operation is blocked if any error-severity violations exist.
|
|
15
|
+
*/
|
|
16
|
+
validate(ctx) {
|
|
17
|
+
const violations = [];
|
|
18
|
+
for (const policy of this.policies) {
|
|
19
|
+
const violation = policy.evaluate(ctx);
|
|
20
|
+
if (violation !== null) {
|
|
21
|
+
violations.push(violation);
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
const errors = violations.filter((v) => v.severity === ViolationSeverity.Error);
|
|
25
|
+
const warnings = violations.filter((v) => v.severity === ViolationSeverity.Warning);
|
|
26
|
+
return {
|
|
27
|
+
allowed: errors.length === 0,
|
|
28
|
+
violations,
|
|
29
|
+
errors,
|
|
30
|
+
warnings,
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
/** Get all registered policy IDs (for introspection). */
|
|
34
|
+
get policyIds() {
|
|
35
|
+
return this.policies.map((p) => p.id);
|
|
36
|
+
}
|
|
37
|
+
/** Get count of active policies. */
|
|
38
|
+
get policyCount() {
|
|
39
|
+
return this.policies.length;
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
//# sourceMappingURL=services.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"services.js","sourceRoot":"","sources":["../../../src/domain/governance/services.ts"],"names":[],"mappings":"AAgBA,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAUlD;;;GAGG;AACH,MAAM,OAAO,uBAAuB;IACL;IAA7B,YAA6B,QAA+B;QAA/B,aAAQ,GAAR,QAAQ,CAAuB;IAAG,CAAC;IAEhE;;;;OAIG;IACH,QAAQ,CAAC,GAA0B;QACjC,MAAM,UAAU,GAAgB,EAAE,CAAC;QAEnC,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YACnC,MAAM,SAAS,GAAG,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;YACvC,IAAI,SAAS,KAAK,IAAI,EAAE,CAAC;gBACvB,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YAC7B,CAAC;QACH,CAAC;QAED,MAAM,MAAM,GAAG,UAAU,CAAC,MAAM,CAC9B,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,iBAAiB,CAAC,KAAK,CAC9C,CAAC;QACF,MAAM,QAAQ,GAAG,UAAU,CAAC,MAAM,CAChC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,iBAAiB,CAAC,OAAO,CAChD,CAAC;QAEF,OAAO;YACL,OAAO,EAAE,MAAM,CAAC,MAAM,KAAK,CAAC;YAC5B,UAAU;YACV,MAAM;YACN,QAAQ;SACT,CAAC;IACJ,CAAC;IAED,yDAAyD;IACzD,IAAI,SAAS;QACX,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IACxC,CAAC;IAED,oCAAoC;IACpC,IAAI,WAAW;QACb,OAAO,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;IAC9B,CAAC;CACF"}
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Card Entity - Kanban Aggregate Root
|
|
3
|
+
*
|
|
4
|
+
* The primary work unit in the kanban system. Tracks a single executable
|
|
5
|
+
* task through the pipeline: backlog -> grooming -> ready -> doing ->
|
|
6
|
+
* review -> tested -> done.
|
|
7
|
+
*
|
|
8
|
+
* Includes: state machine enforcement, review iteration tracking,
|
|
9
|
+
* blocking/unblocking with previous status restoration.
|
|
10
|
+
*
|
|
11
|
+
* DDD: Aggregate Root with state machine invariants
|
|
12
|
+
* SOLID: SRP - card lifecycle management only
|
|
13
|
+
*/
|
|
14
|
+
import { WorkspaceId, Timestamp } from "../shared/value-objects.js";
|
|
15
|
+
import { CardId, CardStatus, CARD_TRANSITIONS, Priority, EpicId, SprintId } from "./value-objects.js";
|
|
16
|
+
import type { StoryPoints } from "./value-objects.js";
|
|
17
|
+
export { CardId, CardStatus, Priority, EpicId, SprintId, WorkspaceId, CARD_TRANSITIONS, };
|
|
18
|
+
export interface AcceptanceCriterion {
|
|
19
|
+
readonly description: string;
|
|
20
|
+
readonly met: boolean;
|
|
21
|
+
}
|
|
22
|
+
export interface CardProps {
|
|
23
|
+
readonly id: CardId;
|
|
24
|
+
readonly workspace: WorkspaceId;
|
|
25
|
+
readonly title: string;
|
|
26
|
+
readonly status: CardStatus;
|
|
27
|
+
readonly priority: Priority;
|
|
28
|
+
readonly description?: string;
|
|
29
|
+
readonly epicId?: EpicId;
|
|
30
|
+
readonly sprintId?: SprintId;
|
|
31
|
+
readonly storyPoints?: StoryPoints;
|
|
32
|
+
readonly assignedAgent?: string;
|
|
33
|
+
readonly acceptanceCriteria: readonly AcceptanceCriterion[];
|
|
34
|
+
readonly reviewIterations: number;
|
|
35
|
+
readonly previousStatus?: CardStatus;
|
|
36
|
+
readonly groomingCompleted: boolean;
|
|
37
|
+
readonly createdAt: Timestamp;
|
|
38
|
+
readonly startedAt?: Timestamp;
|
|
39
|
+
readonly completedAt?: Timestamp;
|
|
40
|
+
}
|
|
41
|
+
export declare class Card {
|
|
42
|
+
readonly id: CardId;
|
|
43
|
+
readonly workspace: WorkspaceId;
|
|
44
|
+
readonly title: string;
|
|
45
|
+
readonly createdAt: Timestamp;
|
|
46
|
+
private _status;
|
|
47
|
+
private _priority;
|
|
48
|
+
private _description;
|
|
49
|
+
private _epicId;
|
|
50
|
+
private _sprintId;
|
|
51
|
+
private _storyPoints;
|
|
52
|
+
private _assignedAgent;
|
|
53
|
+
private _acceptanceCriteria;
|
|
54
|
+
private _reviewIterations;
|
|
55
|
+
private _previousStatus;
|
|
56
|
+
private _groomingCompleted;
|
|
57
|
+
private _startedAt;
|
|
58
|
+
private _completedAt;
|
|
59
|
+
private constructor();
|
|
60
|
+
get status(): CardStatus;
|
|
61
|
+
get priority(): Priority;
|
|
62
|
+
get description(): string | undefined;
|
|
63
|
+
get epicId(): EpicId | undefined;
|
|
64
|
+
get sprintId(): SprintId | undefined;
|
|
65
|
+
get storyPoints(): StoryPoints | undefined;
|
|
66
|
+
get assignedAgent(): string | undefined;
|
|
67
|
+
get acceptanceCriteria(): readonly AcceptanceCriterion[];
|
|
68
|
+
get reviewIterations(): number;
|
|
69
|
+
get previousStatus(): CardStatus | undefined;
|
|
70
|
+
get groomingCompleted(): boolean;
|
|
71
|
+
get startedAt(): Timestamp | undefined;
|
|
72
|
+
get completedAt(): Timestamp | undefined;
|
|
73
|
+
/** Create a new card in Backlog status. */
|
|
74
|
+
static create(params: {
|
|
75
|
+
id: CardId;
|
|
76
|
+
workspace: WorkspaceId;
|
|
77
|
+
title: string;
|
|
78
|
+
priority?: Priority;
|
|
79
|
+
description?: string;
|
|
80
|
+
epicId?: EpicId;
|
|
81
|
+
}): Card;
|
|
82
|
+
/** Reconstitute from persistence. */
|
|
83
|
+
static reconstitute(props: CardProps): Card;
|
|
84
|
+
/**
|
|
85
|
+
* Move card to a new status.
|
|
86
|
+
* Enforces the state machine transition rules.
|
|
87
|
+
* Special handling for blocked (saves previous status) and
|
|
88
|
+
* review (tracks iteration count).
|
|
89
|
+
*/
|
|
90
|
+
moveTo(newStatus: CardStatus): void;
|
|
91
|
+
/** Mark grooming as completed. Must be in Grooming status. */
|
|
92
|
+
completeGrooming(): void;
|
|
93
|
+
setDescription(description: string): void;
|
|
94
|
+
assignToEpic(epicId: EpicId): void;
|
|
95
|
+
assignToSprint(sprintId: SprintId): void;
|
|
96
|
+
setStoryPoints(points: StoryPoints): void;
|
|
97
|
+
assignAgent(agent: string): void;
|
|
98
|
+
setPriority(priority: Priority): void;
|
|
99
|
+
addAcceptanceCriterion(description: string): void;
|
|
100
|
+
meetAcceptanceCriterion(index: number): void;
|
|
101
|
+
get isTerminal(): boolean;
|
|
102
|
+
get isBlocked(): boolean;
|
|
103
|
+
get isActive(): boolean;
|
|
104
|
+
}
|
|
105
|
+
//# sourceMappingURL=entities.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"entities.d.ts","sourceRoot":"","sources":["../../../src/domain/kanban/entities.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,211 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Card Entity - Kanban Aggregate Root
|
|
3
|
+
*
|
|
4
|
+
* The primary work unit in the kanban system. Tracks a single executable
|
|
5
|
+
* task through the pipeline: backlog -> grooming -> ready -> doing ->
|
|
6
|
+
* review -> tested -> done.
|
|
7
|
+
*
|
|
8
|
+
* Includes: state machine enforcement, review iteration tracking,
|
|
9
|
+
* blocking/unblocking with previous status restoration.
|
|
10
|
+
*
|
|
11
|
+
* DDD: Aggregate Root with state machine invariants
|
|
12
|
+
* SOLID: SRP - card lifecycle management only
|
|
13
|
+
*/
|
|
14
|
+
import { WorkspaceId, Timestamp } from "../shared/value-objects.js";
|
|
15
|
+
import { CardId, CardStatus, CARD_TRANSITIONS, MAX_REVIEW_ITERATIONS, Priority, EpicId, SprintId, } from "./value-objects.js";
|
|
16
|
+
// Re-export for convenience (consumers import from entities)
|
|
17
|
+
export { CardId, CardStatus, Priority, EpicId, SprintId, WorkspaceId, CARD_TRANSITIONS, };
|
|
18
|
+
export class Card {
|
|
19
|
+
id;
|
|
20
|
+
workspace;
|
|
21
|
+
title;
|
|
22
|
+
createdAt;
|
|
23
|
+
_status;
|
|
24
|
+
_priority;
|
|
25
|
+
_description;
|
|
26
|
+
_epicId;
|
|
27
|
+
_sprintId;
|
|
28
|
+
_storyPoints;
|
|
29
|
+
_assignedAgent;
|
|
30
|
+
_acceptanceCriteria;
|
|
31
|
+
_reviewIterations;
|
|
32
|
+
_previousStatus;
|
|
33
|
+
_groomingCompleted;
|
|
34
|
+
_startedAt;
|
|
35
|
+
_completedAt;
|
|
36
|
+
constructor(props) {
|
|
37
|
+
this.id = props.id;
|
|
38
|
+
this.workspace = props.workspace;
|
|
39
|
+
this.title = props.title;
|
|
40
|
+
this._status = props.status;
|
|
41
|
+
this._priority = props.priority;
|
|
42
|
+
this._description = props.description;
|
|
43
|
+
this._epicId = props.epicId;
|
|
44
|
+
this._sprintId = props.sprintId;
|
|
45
|
+
this._storyPoints = props.storyPoints;
|
|
46
|
+
this._assignedAgent = props.assignedAgent;
|
|
47
|
+
this._acceptanceCriteria = [...props.acceptanceCriteria];
|
|
48
|
+
this._reviewIterations = props.reviewIterations;
|
|
49
|
+
this._previousStatus = props.previousStatus;
|
|
50
|
+
this._groomingCompleted = props.groomingCompleted;
|
|
51
|
+
this.createdAt = props.createdAt;
|
|
52
|
+
this._startedAt = props.startedAt;
|
|
53
|
+
this._completedAt = props.completedAt;
|
|
54
|
+
}
|
|
55
|
+
// ── Getters ─────────────────────────────────────────────────────
|
|
56
|
+
get status() {
|
|
57
|
+
return this._status;
|
|
58
|
+
}
|
|
59
|
+
get priority() {
|
|
60
|
+
return this._priority;
|
|
61
|
+
}
|
|
62
|
+
get description() {
|
|
63
|
+
return this._description;
|
|
64
|
+
}
|
|
65
|
+
get epicId() {
|
|
66
|
+
return this._epicId;
|
|
67
|
+
}
|
|
68
|
+
get sprintId() {
|
|
69
|
+
return this._sprintId;
|
|
70
|
+
}
|
|
71
|
+
get storyPoints() {
|
|
72
|
+
return this._storyPoints;
|
|
73
|
+
}
|
|
74
|
+
get assignedAgent() {
|
|
75
|
+
return this._assignedAgent;
|
|
76
|
+
}
|
|
77
|
+
get acceptanceCriteria() {
|
|
78
|
+
return this._acceptanceCriteria;
|
|
79
|
+
}
|
|
80
|
+
get reviewIterations() {
|
|
81
|
+
return this._reviewIterations;
|
|
82
|
+
}
|
|
83
|
+
get previousStatus() {
|
|
84
|
+
return this._previousStatus;
|
|
85
|
+
}
|
|
86
|
+
get groomingCompleted() {
|
|
87
|
+
return this._groomingCompleted;
|
|
88
|
+
}
|
|
89
|
+
get startedAt() {
|
|
90
|
+
return this._startedAt;
|
|
91
|
+
}
|
|
92
|
+
get completedAt() {
|
|
93
|
+
return this._completedAt;
|
|
94
|
+
}
|
|
95
|
+
// ── Factory Methods ─────────────────────────────────────────────
|
|
96
|
+
/** Create a new card in Backlog status. */
|
|
97
|
+
static create(params) {
|
|
98
|
+
const trimmed = params.title.trim();
|
|
99
|
+
if (trimmed.length === 0) {
|
|
100
|
+
throw new Error("Card: title cannot be empty");
|
|
101
|
+
}
|
|
102
|
+
return new Card({
|
|
103
|
+
id: params.id,
|
|
104
|
+
workspace: params.workspace,
|
|
105
|
+
title: trimmed,
|
|
106
|
+
status: CardStatus.Backlog,
|
|
107
|
+
priority: params.priority ?? Priority.Medium,
|
|
108
|
+
...(params.description !== undefined
|
|
109
|
+
? { description: params.description }
|
|
110
|
+
: {}),
|
|
111
|
+
...(params.epicId !== undefined ? { epicId: params.epicId } : {}),
|
|
112
|
+
acceptanceCriteria: [],
|
|
113
|
+
reviewIterations: 0,
|
|
114
|
+
groomingCompleted: false,
|
|
115
|
+
createdAt: Timestamp.now(),
|
|
116
|
+
});
|
|
117
|
+
}
|
|
118
|
+
/** Reconstitute from persistence. */
|
|
119
|
+
static reconstitute(props) {
|
|
120
|
+
return new Card(props);
|
|
121
|
+
}
|
|
122
|
+
// ── State Transitions ───────────────────────────────────────────
|
|
123
|
+
/**
|
|
124
|
+
* Move card to a new status.
|
|
125
|
+
* Enforces the state machine transition rules.
|
|
126
|
+
* Special handling for blocked (saves previous status) and
|
|
127
|
+
* review (tracks iteration count).
|
|
128
|
+
*/
|
|
129
|
+
moveTo(newStatus) {
|
|
130
|
+
const allowed = CARD_TRANSITIONS[this._status];
|
|
131
|
+
if (!allowed.includes(newStatus)) {
|
|
132
|
+
throw new Error(`Card: invalid transition from "${this._status}" to "${newStatus}"`);
|
|
133
|
+
}
|
|
134
|
+
// Review iteration tracking
|
|
135
|
+
if (this._status === CardStatus.Review && newStatus === CardStatus.Doing) {
|
|
136
|
+
this._reviewIterations += 1;
|
|
137
|
+
if (this._reviewIterations > MAX_REVIEW_ITERATIONS) {
|
|
138
|
+
throw new Error(`Card: max review iterations (${MAX_REVIEW_ITERATIONS}) exceeded`);
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
// Blocking: save previous status for unblocking
|
|
142
|
+
if (newStatus === CardStatus.Blocked) {
|
|
143
|
+
this._previousStatus = this._status;
|
|
144
|
+
}
|
|
145
|
+
// Track lifecycle timestamps
|
|
146
|
+
if (newStatus === CardStatus.Doing && this._startedAt === undefined) {
|
|
147
|
+
this._startedAt = Timestamp.now();
|
|
148
|
+
}
|
|
149
|
+
if (newStatus === CardStatus.Done) {
|
|
150
|
+
this._completedAt = Timestamp.now();
|
|
151
|
+
}
|
|
152
|
+
this._status = newStatus;
|
|
153
|
+
}
|
|
154
|
+
/** Mark grooming as completed. Must be in Grooming status. */
|
|
155
|
+
completeGrooming() {
|
|
156
|
+
if (this._status !== CardStatus.Grooming) {
|
|
157
|
+
throw new Error(`Card: grooming can only be completed in grooming status, current: "${this._status}"`);
|
|
158
|
+
}
|
|
159
|
+
this._groomingCompleted = true;
|
|
160
|
+
}
|
|
161
|
+
// ── Mutators ────────────────────────────────────────────────────
|
|
162
|
+
setDescription(description) {
|
|
163
|
+
this._description = description.trim();
|
|
164
|
+
}
|
|
165
|
+
assignToEpic(epicId) {
|
|
166
|
+
this._epicId = epicId;
|
|
167
|
+
}
|
|
168
|
+
assignToSprint(sprintId) {
|
|
169
|
+
this._sprintId = sprintId;
|
|
170
|
+
}
|
|
171
|
+
setStoryPoints(points) {
|
|
172
|
+
this._storyPoints = points;
|
|
173
|
+
}
|
|
174
|
+
assignAgent(agent) {
|
|
175
|
+
const trimmed = agent.trim();
|
|
176
|
+
if (trimmed.length === 0) {
|
|
177
|
+
throw new Error("Card: agent name cannot be empty");
|
|
178
|
+
}
|
|
179
|
+
this._assignedAgent = trimmed;
|
|
180
|
+
}
|
|
181
|
+
setPriority(priority) {
|
|
182
|
+
this._priority = priority;
|
|
183
|
+
}
|
|
184
|
+
addAcceptanceCriterion(description) {
|
|
185
|
+
const trimmed = description.trim();
|
|
186
|
+
if (trimmed.length === 0) {
|
|
187
|
+
throw new Error("Card: acceptance criterion cannot be empty");
|
|
188
|
+
}
|
|
189
|
+
this._acceptanceCriteria.push({ description: trimmed, met: false });
|
|
190
|
+
}
|
|
191
|
+
meetAcceptanceCriterion(index) {
|
|
192
|
+
const criterion = this._acceptanceCriteria[index];
|
|
193
|
+
if (criterion === undefined) {
|
|
194
|
+
throw new Error(`Card: acceptance criterion at index ${index} not found`);
|
|
195
|
+
}
|
|
196
|
+
this._acceptanceCriteria[index] = { ...criterion, met: true };
|
|
197
|
+
}
|
|
198
|
+
// ── Queries ─────────────────────────────────────────────────────
|
|
199
|
+
get isTerminal() {
|
|
200
|
+
return this._status === CardStatus.Done;
|
|
201
|
+
}
|
|
202
|
+
get isBlocked() {
|
|
203
|
+
return this._status === CardStatus.Blocked;
|
|
204
|
+
}
|
|
205
|
+
get isActive() {
|
|
206
|
+
return (this._status === CardStatus.Doing ||
|
|
207
|
+
this._status === CardStatus.Review ||
|
|
208
|
+
this._status === CardStatus.Blocked);
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
//# sourceMappingURL=entities.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"entities.js","sourceRoot":"","sources":["../../../src/domain/kanban/entities.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Grooming Validator
|
|
3
|
+
*
|
|
4
|
+
* Validates that a card meets all criteria to transition from
|
|
5
|
+
* GROOMING to READY. Separated from Card entity (SRP).
|
|
6
|
+
*
|
|
7
|
+
* Validation rules (from vault docs):
|
|
8
|
+
* 1. Card must be in grooming status
|
|
9
|
+
* 2. Must have a description (scope document)
|
|
10
|
+
* 3. Must have >= 2 acceptance criteria
|
|
11
|
+
* 4. Must have story points estimated
|
|
12
|
+
* 5. Must have an epic assigned
|
|
13
|
+
*
|
|
14
|
+
* SOLID: SRP - grooming validation only (separate from card lifecycle)
|
|
15
|
+
* SOLID: OCP - new rules can be added without modifying existing ones
|
|
16
|
+
* DDD: Domain Service (validation logic spanning card properties)
|
|
17
|
+
*/
|
|
18
|
+
import type { Card } from "./entities.js";
|
|
19
|
+
/** Minimum acceptance criteria required for grooming completion. */
|
|
20
|
+
export declare const MIN_ACCEPTANCE_CRITERIA = 2;
|
|
21
|
+
export interface GroomingResult {
|
|
22
|
+
readonly valid: boolean;
|
|
23
|
+
readonly errors: readonly string[];
|
|
24
|
+
readonly hasDescription: boolean;
|
|
25
|
+
readonly hasAcceptanceCriteria: boolean;
|
|
26
|
+
readonly hasStoryPoints: boolean;
|
|
27
|
+
readonly hasEpic: boolean;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Validates card readiness for the grooming -> ready transition.
|
|
31
|
+
* Stateless service: all input via method parameters.
|
|
32
|
+
*/
|
|
33
|
+
export declare class GroomingValidator {
|
|
34
|
+
/**
|
|
35
|
+
* Validate a card for grooming completion.
|
|
36
|
+
* Returns a result with all validation errors (not just the first).
|
|
37
|
+
*/
|
|
38
|
+
validate(card: Card): GroomingResult;
|
|
39
|
+
}
|
|
40
|
+
//# sourceMappingURL=grooming.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"grooming.d.ts","sourceRoot":"","sources":["../../../src/domain/kanban/grooming.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AACH,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AAG1C,oEAAoE;AACpE,eAAO,MAAM,uBAAuB,IAAI,CAAC;AAEzC,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;IACxB,QAAQ,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC;IACnC,QAAQ,CAAC,cAAc,EAAE,OAAO,CAAC;IACjC,QAAQ,CAAC,qBAAqB,EAAE,OAAO,CAAC;IACxC,QAAQ,CAAC,cAAc,EAAE,OAAO,CAAC;IACjC,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;CAC3B;AAED;;;GAGG;AACH,qBAAa,iBAAiB;IAC5B;;;OAGG;IACH,QAAQ,CAAC,IAAI,EAAE,IAAI,GAAG,cAAc;CAgDrC"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import { CardStatus } from "./value-objects.js";
|
|
2
|
+
/** Minimum acceptance criteria required for grooming completion. */
|
|
3
|
+
export const MIN_ACCEPTANCE_CRITERIA = 2;
|
|
4
|
+
/**
|
|
5
|
+
* Validates card readiness for the grooming -> ready transition.
|
|
6
|
+
* Stateless service: all input via method parameters.
|
|
7
|
+
*/
|
|
8
|
+
export class GroomingValidator {
|
|
9
|
+
/**
|
|
10
|
+
* Validate a card for grooming completion.
|
|
11
|
+
* Returns a result with all validation errors (not just the first).
|
|
12
|
+
*/
|
|
13
|
+
validate(card) {
|
|
14
|
+
const errors = [];
|
|
15
|
+
// Rule 1: Must be in grooming status
|
|
16
|
+
if (card.status !== CardStatus.Grooming) {
|
|
17
|
+
errors.push(`Card must be in grooming status, current: "${card.status}"`);
|
|
18
|
+
}
|
|
19
|
+
// Rule 2: Must have a description (scope document)
|
|
20
|
+
const hasDescription = card.description !== undefined && card.description.trim().length > 0;
|
|
21
|
+
if (!hasDescription) {
|
|
22
|
+
errors.push("Missing description (scope document required)");
|
|
23
|
+
}
|
|
24
|
+
// Rule 3: Must have >= 2 acceptance criteria
|
|
25
|
+
const hasAcceptanceCriteria = card.acceptanceCriteria.length >= MIN_ACCEPTANCE_CRITERIA;
|
|
26
|
+
if (!hasAcceptanceCriteria) {
|
|
27
|
+
errors.push(`Need at least ${MIN_ACCEPTANCE_CRITERIA} acceptance criteria, ` +
|
|
28
|
+
`found: ${card.acceptanceCriteria.length}`);
|
|
29
|
+
}
|
|
30
|
+
// Rule 4: Must have story points
|
|
31
|
+
const hasStoryPoints = card.storyPoints !== undefined;
|
|
32
|
+
if (!hasStoryPoints) {
|
|
33
|
+
errors.push("Story points not estimated");
|
|
34
|
+
}
|
|
35
|
+
// Rule 5: Must have an epic
|
|
36
|
+
const hasEpic = card.epicId !== undefined;
|
|
37
|
+
if (!hasEpic) {
|
|
38
|
+
errors.push("Epic not assigned");
|
|
39
|
+
}
|
|
40
|
+
return {
|
|
41
|
+
valid: errors.length === 0,
|
|
42
|
+
errors,
|
|
43
|
+
hasDescription,
|
|
44
|
+
hasAcceptanceCriteria,
|
|
45
|
+
hasStoryPoints,
|
|
46
|
+
hasEpic,
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
//# sourceMappingURL=grooming.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"grooming.js","sourceRoot":"","sources":["../../../src/domain/kanban/grooming.ts"],"names":[],"mappings":"AAkBA,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAEhD,oEAAoE;AACpE,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAC,CAAC;AAWzC;;;GAGG;AACH,MAAM,OAAO,iBAAiB;IAC5B;;;OAGG;IACH,QAAQ,CAAC,IAAU;QACjB,MAAM,MAAM,GAAa,EAAE,CAAC;QAE5B,qCAAqC;QACrC,IAAI,IAAI,CAAC,MAAM,KAAK,UAAU,CAAC,QAAQ,EAAE,CAAC;YACxC,MAAM,CAAC,IAAI,CACT,8CAA8C,IAAI,CAAC,MAAM,GAAG,CAC7D,CAAC;QACJ,CAAC;QAED,mDAAmD;QACnD,MAAM,cAAc,GAClB,IAAI,CAAC,WAAW,KAAK,SAAS,IAAI,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC;QACvE,IAAI,CAAC,cAAc,EAAE,CAAC;YACpB,MAAM,CAAC,IAAI,CAAC,+CAA+C,CAAC,CAAC;QAC/D,CAAC;QAED,6CAA6C;QAC7C,MAAM,qBAAqB,GACzB,IAAI,CAAC,kBAAkB,CAAC,MAAM,IAAI,uBAAuB,CAAC;QAC5D,IAAI,CAAC,qBAAqB,EAAE,CAAC;YAC3B,MAAM,CAAC,IAAI,CACT,iBAAiB,uBAAuB,wBAAwB;gBAC9D,UAAU,IAAI,CAAC,kBAAkB,CAAC,MAAM,EAAE,CAC7C,CAAC;QACJ,CAAC;QAED,iCAAiC;QACjC,MAAM,cAAc,GAAG,IAAI,CAAC,WAAW,KAAK,SAAS,CAAC;QACtD,IAAI,CAAC,cAAc,EAAE,CAAC;YACpB,MAAM,CAAC,IAAI,CAAC,4BAA4B,CAAC,CAAC;QAC5C,CAAC;QAED,4BAA4B;QAC5B,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,KAAK,SAAS,CAAC;QAC1C,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,MAAM,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;QACnC,CAAC;QAED,OAAO;YACL,KAAK,EAAE,MAAM,CAAC,MAAM,KAAK,CAAC;YAC1B,MAAM;YACN,cAAc;YACd,qBAAqB;YACrB,cAAc;YACd,OAAO;SACR,CAAC;IACJ,CAAC;CACF"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Kanban Repository Interfaces (Ports)
|
|
3
|
+
*
|
|
4
|
+
* DDD: Repository pattern - persistence abstraction in domain layer
|
|
5
|
+
* SOLID: DIP - domain defines interfaces, infrastructure implements
|
|
6
|
+
* SOLID: ISP - separate interfaces per aggregate root
|
|
7
|
+
*/
|
|
8
|
+
import type { WorkspaceId } from "../shared/value-objects.js";
|
|
9
|
+
import type { Card } from "./entities.js";
|
|
10
|
+
import type { Sprint, Epic } from "./sprint.js";
|
|
11
|
+
import type { CardId, CardStatus, SprintId, EpicId } from "./value-objects.js";
|
|
12
|
+
/** Persistence port for Card aggregate root. */
|
|
13
|
+
export interface CardRepository {
|
|
14
|
+
save(card: Card): Promise<void>;
|
|
15
|
+
findById(id: CardId): Promise<Card | null>;
|
|
16
|
+
findByWorkspace(workspace: WorkspaceId, status?: CardStatus): Promise<readonly Card[]>;
|
|
17
|
+
findBySprint(sprintId: SprintId): Promise<readonly Card[]>;
|
|
18
|
+
findByEpic(epicId: EpicId): Promise<readonly Card[]>;
|
|
19
|
+
findByAgent(agent: string, workspace: WorkspaceId): Promise<readonly Card[]>;
|
|
20
|
+
countByStatus(workspace: WorkspaceId, status: CardStatus): Promise<number>;
|
|
21
|
+
nextSequence(workspace: WorkspaceId): Promise<number>;
|
|
22
|
+
delete(id: CardId): Promise<void>;
|
|
23
|
+
}
|
|
24
|
+
/** Persistence port for Sprint aggregate root. */
|
|
25
|
+
export interface SprintRepository {
|
|
26
|
+
save(sprint: Sprint): Promise<void>;
|
|
27
|
+
findById(id: SprintId): Promise<Sprint | null>;
|
|
28
|
+
findByWorkspace(workspace: WorkspaceId): Promise<readonly Sprint[]>;
|
|
29
|
+
findActive(workspace: WorkspaceId): Promise<Sprint | null>;
|
|
30
|
+
nextSequence(workspace: WorkspaceId): Promise<number>;
|
|
31
|
+
delete(id: SprintId): Promise<void>;
|
|
32
|
+
}
|
|
33
|
+
/** Persistence port for Epic aggregate root. */
|
|
34
|
+
export interface EpicRepository {
|
|
35
|
+
save(epic: Epic): Promise<void>;
|
|
36
|
+
findById(id: EpicId): Promise<Epic | null>;
|
|
37
|
+
findByWorkspace(workspace: WorkspaceId): Promise<readonly Epic[]>;
|
|
38
|
+
nextSequence(workspace: WorkspaceId): Promise<number>;
|
|
39
|
+
delete(id: EpicId): Promise<void>;
|
|
40
|
+
}
|
|
41
|
+
//# sourceMappingURL=repositories.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"repositories.d.ts","sourceRoot":"","sources":["../../../src/domain/kanban/repositories.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AAC9D,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AAC1C,OAAO,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,KAAK,EACV,MAAM,EACN,UAAU,EACV,QAAQ,EACR,MAAM,EACP,MAAM,oBAAoB,CAAC;AAE5B,gDAAgD;AAChD,MAAM,WAAW,cAAc;IAC7B,IAAI,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAChC,QAAQ,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC;IAC3C,eAAe,CACb,SAAS,EAAE,WAAW,EACtB,MAAM,CAAC,EAAE,UAAU,GAClB,OAAO,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC;IAC5B,YAAY,CAAC,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC;IAC3D,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC;IACrD,WAAW,CACT,KAAK,EAAE,MAAM,EACb,SAAS,EAAE,WAAW,GACrB,OAAO,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC;IAC5B,aAAa,CACX,SAAS,EAAE,WAAW,EACtB,MAAM,EAAE,UAAU,GACjB,OAAO,CAAC,MAAM,CAAC,CAAC;IACnB,YAAY,CAAC,SAAS,EAAE,WAAW,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IACtD,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACnC;AAED,kDAAkD;AAClD,MAAM,WAAW,gBAAgB;IAC/B,IAAI,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACpC,QAAQ,CAAC,EAAE,EAAE,QAAQ,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IAC/C,eAAe,CAAC,SAAS,EAAE,WAAW,GAAG,OAAO,CAAC,SAAS,MAAM,EAAE,CAAC,CAAC;IACpE,UAAU,CAAC,SAAS,EAAE,WAAW,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IAC3D,YAAY,CAAC,SAAS,EAAE,WAAW,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IACtD,MAAM,CAAC,EAAE,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACrC;AAED,gDAAgD;AAChD,MAAM,WAAW,cAAc;IAC7B,IAAI,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAChC,QAAQ,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC;IAC3C,eAAe,CAAC,SAAS,EAAE,WAAW,GAAG,OAAO,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC;IAClE,YAAY,CAAC,SAAS,EAAE,WAAW,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IACtD,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACnC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"repositories.js","sourceRoot":"","sources":["../../../src/domain/kanban/repositories.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Kanban Domain Services
|
|
3
|
+
*
|
|
4
|
+
* Stateless services that coordinate operations across kanban aggregates.
|
|
5
|
+
* Enforces WIP limits, grooming validation on transitions, and
|
|
6
|
+
* review iteration limits.
|
|
7
|
+
*
|
|
8
|
+
* DDD: Domain Services - logic coordinating multiple aggregates
|
|
9
|
+
* SOLID: SRP - kanban workflow orchestration only
|
|
10
|
+
* SOLID: DIP - depends on repository interfaces, not implementations
|
|
11
|
+
*/
|
|
12
|
+
import type { WorkspaceId, Result } from "../shared/value-objects.js";
|
|
13
|
+
import type { Card } from "./entities.js";
|
|
14
|
+
import { CardStatus } from "./value-objects.js";
|
|
15
|
+
import type { CardId, SprintId, EpicId, StoryPoints } from "./value-objects.js";
|
|
16
|
+
import type { CardRepository } from "./repositories.js";
|
|
17
|
+
/**
|
|
18
|
+
* Orchestrates card lifecycle operations with cross-cutting validations.
|
|
19
|
+
*/
|
|
20
|
+
export declare class CardDomainService {
|
|
21
|
+
private readonly cardRepo;
|
|
22
|
+
private readonly groomingValidator;
|
|
23
|
+
constructor(cardRepo: CardRepository);
|
|
24
|
+
/**
|
|
25
|
+
* Move a card to a new status with full validation:
|
|
26
|
+
* - State machine transition
|
|
27
|
+
* - WIP limits
|
|
28
|
+
* - Grooming validation (grooming -> ready)
|
|
29
|
+
* - Sprint/agent assignment checks
|
|
30
|
+
*/
|
|
31
|
+
moveCard(cardId: CardId, targetStatus: CardStatus): Promise<Result<Card>>;
|
|
32
|
+
/** Assign card to an epic. */
|
|
33
|
+
assignToEpic(cardId: CardId, epicId: EpicId): Promise<Result<Card>>;
|
|
34
|
+
/** Assign card to a sprint. */
|
|
35
|
+
assignToSprint(cardId: CardId, sprintId: SprintId): Promise<Result<Card>>;
|
|
36
|
+
/** Set story points on a card. */
|
|
37
|
+
setStoryPoints(cardId: CardId, points: StoryPoints): Promise<Result<Card>>;
|
|
38
|
+
/** Assign an agent to a card. */
|
|
39
|
+
assignAgent(cardId: CardId, agent: string): Promise<Result<Card>>;
|
|
40
|
+
/** List cards by workspace with optional status filter. */
|
|
41
|
+
listCards(workspace: WorkspaceId, status?: CardStatus): Promise<Result<readonly Card[]>>;
|
|
42
|
+
/** Get a single card by ID. */
|
|
43
|
+
getCard(cardId: CardId): Promise<Result<Card | null>>;
|
|
44
|
+
/**
|
|
45
|
+
* Get board statistics: card count per status column.
|
|
46
|
+
*/
|
|
47
|
+
getBoardStats(workspace: WorkspaceId): Promise<Result<Record<CardStatus, number>>>;
|
|
48
|
+
}
|
|
49
|
+
//# sourceMappingURL=services.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"services.d.ts","sourceRoot":"","sources":["../../../src/domain/kanban/services.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,4BAA4B,CAAC;AAEtE,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AAC1C,OAAO,EAAE,UAAU,EAAsB,MAAM,oBAAoB,CAAC;AACpE,OAAO,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAChF,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAGxD;;GAEG;AACH,qBAAa,iBAAiB;IAGhB,OAAO,CAAC,QAAQ,CAAC,QAAQ;IAFrC,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAA2B;gBAEhC,QAAQ,EAAE,cAAc;IAErD;;;;;;OAMG;IACG,QAAQ,CACZ,MAAM,EAAE,MAAM,EACd,YAAY,EAAE,UAAU,GACvB,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAyDxB,8BAA8B;IACxB,YAAY,CAChB,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAYxB,+BAA+B;IACzB,cAAc,CAClB,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,QAAQ,GACjB,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAYxB,kCAAkC;IAC5B,cAAc,CAClB,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,WAAW,GAClB,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAYxB,iCAAiC;IAC3B,WAAW,CACf,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,MAAM,GACZ,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAYxB,2DAA2D;IACrD,SAAS,CACb,SAAS,EAAE,WAAW,EACtB,MAAM,CAAC,EAAE,UAAU,GAClB,OAAO,CAAC,MAAM,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC;IASnC,+BAA+B;IACzB,OAAO,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC;IAS3D;;OAEG;IACG,aAAa,CACjB,SAAS,EAAE,WAAW,GACrB,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC,CAAC;CAW/C"}
|