@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,214 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Vault Timeline Value Objects
|
|
3
|
+
*
|
|
4
|
+
* Models the Chronos Timeline plugin syntax for Obsidian.
|
|
5
|
+
* TimelineEntry represents a single timeline item (event, period, point, marker).
|
|
6
|
+
* TimelineBlock represents a complete ```chronos code block.
|
|
7
|
+
*
|
|
8
|
+
* DDD: Value Objects - immutable, equality by content
|
|
9
|
+
* SOLID: SRP - timeline serialization/parsing only
|
|
10
|
+
*/
|
|
11
|
+
const TYPE_PREFIXES = {
|
|
12
|
+
event: "-",
|
|
13
|
+
period: "@",
|
|
14
|
+
point: "*",
|
|
15
|
+
marker: "=",
|
|
16
|
+
};
|
|
17
|
+
// ── TimelineEntry ─────────────────────────────────────────────────────
|
|
18
|
+
export class TimelineEntry {
|
|
19
|
+
type;
|
|
20
|
+
startDate;
|
|
21
|
+
endDate;
|
|
22
|
+
name;
|
|
23
|
+
description;
|
|
24
|
+
color;
|
|
25
|
+
group;
|
|
26
|
+
constructor(params) {
|
|
27
|
+
this.type = params.type;
|
|
28
|
+
this.startDate = params.startDate;
|
|
29
|
+
this.endDate = params.endDate;
|
|
30
|
+
this.name = params.name;
|
|
31
|
+
this.description = params.description;
|
|
32
|
+
this.color = params.color;
|
|
33
|
+
this.group = params.group;
|
|
34
|
+
}
|
|
35
|
+
static create(params) {
|
|
36
|
+
if (params.startDate.trim().length === 0) {
|
|
37
|
+
throw new Error("TimelineEntry: startDate cannot be empty");
|
|
38
|
+
}
|
|
39
|
+
if (params.name.trim().length === 0) {
|
|
40
|
+
throw new Error("TimelineEntry: name cannot be empty");
|
|
41
|
+
}
|
|
42
|
+
if (params.type === "period" && params.endDate === undefined) {
|
|
43
|
+
throw new Error("TimelineEntry: period type requires endDate");
|
|
44
|
+
}
|
|
45
|
+
if (params.type === "marker" && params.endDate !== undefined) {
|
|
46
|
+
throw new Error("TimelineEntry: marker type cannot have endDate");
|
|
47
|
+
}
|
|
48
|
+
return new TimelineEntry({
|
|
49
|
+
type: params.type,
|
|
50
|
+
startDate: params.startDate.trim(),
|
|
51
|
+
endDate: params.endDate?.trim(),
|
|
52
|
+
name: params.name.trim(),
|
|
53
|
+
description: params.description?.trim(),
|
|
54
|
+
color: params.color,
|
|
55
|
+
group: params.group?.trim(),
|
|
56
|
+
});
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Serialize to a single Chronos timeline line.
|
|
60
|
+
* Format: `{prefix} [{date}] #color {Group} Name | Description`
|
|
61
|
+
*/
|
|
62
|
+
toChronosLine() {
|
|
63
|
+
const prefix = TYPE_PREFIXES[this.type];
|
|
64
|
+
const dateStr = this.endDate !== undefined
|
|
65
|
+
? `${this.startDate}~${this.endDate}`
|
|
66
|
+
: this.startDate;
|
|
67
|
+
const parts = [`${prefix} [${dateStr}]`];
|
|
68
|
+
if (this.color !== undefined) {
|
|
69
|
+
parts.push(`#${this.color}`);
|
|
70
|
+
}
|
|
71
|
+
if (this.group !== undefined) {
|
|
72
|
+
parts.push(`{${this.group}}`);
|
|
73
|
+
}
|
|
74
|
+
parts.push(this.name);
|
|
75
|
+
let line = parts.join(" ");
|
|
76
|
+
if (this.description !== undefined) {
|
|
77
|
+
line += ` | ${this.description}`;
|
|
78
|
+
}
|
|
79
|
+
return line;
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
// ── TimelineBlock ─────────────────────────────────────────────────────
|
|
83
|
+
export class TimelineBlock {
|
|
84
|
+
entries;
|
|
85
|
+
flags;
|
|
86
|
+
constructor(entries, flags) {
|
|
87
|
+
this.entries = entries;
|
|
88
|
+
this.flags = flags;
|
|
89
|
+
}
|
|
90
|
+
static create(entries, flags) {
|
|
91
|
+
return new TimelineBlock(entries, flags ?? []);
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* Parse a Chronos code block body (content between ```chronos fences).
|
|
95
|
+
* Recognizes entry lines (- @ * =) and flag lines (>).
|
|
96
|
+
* Comments (#) are ignored.
|
|
97
|
+
*/
|
|
98
|
+
static parse(blockContent) {
|
|
99
|
+
const lines = blockContent.split("\n");
|
|
100
|
+
const entries = [];
|
|
101
|
+
const flags = [];
|
|
102
|
+
for (const rawLine of lines) {
|
|
103
|
+
const line = rawLine.trim();
|
|
104
|
+
if (line.length === 0)
|
|
105
|
+
continue;
|
|
106
|
+
// Comment
|
|
107
|
+
if (line.startsWith("#"))
|
|
108
|
+
continue;
|
|
109
|
+
// Flag
|
|
110
|
+
if (line.startsWith(">")) {
|
|
111
|
+
flags.push(line.slice(1).trim());
|
|
112
|
+
continue;
|
|
113
|
+
}
|
|
114
|
+
// Entry: detect type by prefix
|
|
115
|
+
const entryMatch = line.match(/^([*@=\-])\s+\[([^\]]+)\]\s*(.*)/);
|
|
116
|
+
if (entryMatch === null)
|
|
117
|
+
continue;
|
|
118
|
+
const prefixChar = entryMatch[1];
|
|
119
|
+
const dateSection = entryMatch[2];
|
|
120
|
+
let remainder = entryMatch[3];
|
|
121
|
+
const type = prefixToType(prefixChar);
|
|
122
|
+
if (type === null)
|
|
123
|
+
continue;
|
|
124
|
+
// Parse date range
|
|
125
|
+
const dateParts = dateSection.split("~");
|
|
126
|
+
const startDate = dateParts[0].trim();
|
|
127
|
+
const endDate = dateParts.length > 1 ? dateParts[1].trim() : undefined;
|
|
128
|
+
// Parse optional color
|
|
129
|
+
let color;
|
|
130
|
+
const colorMatch = remainder.match(/^#(\w+)\s*/);
|
|
131
|
+
if (colorMatch !== null) {
|
|
132
|
+
const candidate = colorMatch[1].toLowerCase();
|
|
133
|
+
if (isChronosColor(candidate)) {
|
|
134
|
+
color = candidate;
|
|
135
|
+
remainder = remainder.slice(colorMatch[0].length);
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
// Parse optional group
|
|
139
|
+
let group;
|
|
140
|
+
const groupMatch = remainder.match(/^\{([^}]+)\}\s*/);
|
|
141
|
+
if (groupMatch !== null) {
|
|
142
|
+
group = groupMatch[1].trim();
|
|
143
|
+
remainder = remainder.slice(groupMatch[0].length);
|
|
144
|
+
}
|
|
145
|
+
// Parse name and description
|
|
146
|
+
const pipeIndex = remainder.indexOf("|");
|
|
147
|
+
let name;
|
|
148
|
+
let description;
|
|
149
|
+
if (pipeIndex !== -1) {
|
|
150
|
+
name = remainder.slice(0, pipeIndex).trim();
|
|
151
|
+
description = remainder.slice(pipeIndex + 1).trim();
|
|
152
|
+
}
|
|
153
|
+
else {
|
|
154
|
+
name = remainder.trim();
|
|
155
|
+
}
|
|
156
|
+
if (name.length === 0)
|
|
157
|
+
continue;
|
|
158
|
+
try {
|
|
159
|
+
entries.push(TimelineEntry.create({
|
|
160
|
+
type,
|
|
161
|
+
startDate,
|
|
162
|
+
...(endDate !== undefined ? { endDate } : {}),
|
|
163
|
+
name,
|
|
164
|
+
...(description !== undefined ? { description } : {}),
|
|
165
|
+
...(color !== undefined ? { color } : {}),
|
|
166
|
+
...(group !== undefined ? { group } : {}),
|
|
167
|
+
}));
|
|
168
|
+
}
|
|
169
|
+
catch {
|
|
170
|
+
// Skip invalid entries (e.g., period without end date)
|
|
171
|
+
continue;
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
return new TimelineBlock(entries, flags);
|
|
175
|
+
}
|
|
176
|
+
/** Serialize to a complete ```chronos fenced code block. */
|
|
177
|
+
toChronosBlock() {
|
|
178
|
+
const lines = ["```chronos"];
|
|
179
|
+
for (const flag of this.flags) {
|
|
180
|
+
lines.push(`> ${flag}`);
|
|
181
|
+
}
|
|
182
|
+
for (const entry of this.entries) {
|
|
183
|
+
lines.push(entry.toChronosLine());
|
|
184
|
+
}
|
|
185
|
+
lines.push("```");
|
|
186
|
+
return lines.join("\n");
|
|
187
|
+
}
|
|
188
|
+
/** Return a new block with an entry appended. */
|
|
189
|
+
withEntry(entry) {
|
|
190
|
+
return new TimelineBlock([...this.entries, entry], this.flags);
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
// ── Private Helpers ───────────────────────────────────────────────────
|
|
194
|
+
const CHRONOS_COLORS = new Set([
|
|
195
|
+
"red", "orange", "yellow", "green", "blue", "purple", "pink", "cyan",
|
|
196
|
+
]);
|
|
197
|
+
function isChronosColor(value) {
|
|
198
|
+
return CHRONOS_COLORS.has(value);
|
|
199
|
+
}
|
|
200
|
+
function prefixToType(prefix) {
|
|
201
|
+
switch (prefix) {
|
|
202
|
+
case "-":
|
|
203
|
+
return "event";
|
|
204
|
+
case "@":
|
|
205
|
+
return "period";
|
|
206
|
+
case "*":
|
|
207
|
+
return "point";
|
|
208
|
+
case "=":
|
|
209
|
+
return "marker";
|
|
210
|
+
default:
|
|
211
|
+
return null;
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
//# sourceMappingURL=timeline.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"timeline.js","sourceRoot":"","sources":["../../../src/domain/vault/timeline.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAgBH,MAAM,aAAa,GAAoC;IACrD,KAAK,EAAE,GAAG;IACV,MAAM,EAAE,GAAG;IACX,KAAK,EAAE,GAAG;IACV,MAAM,EAAE,GAAG;CACZ,CAAC;AAEF,yEAAyE;AAEzE,MAAM,OAAO,aAAa;IACf,IAAI,CAAkB;IACtB,SAAS,CAAS;IAClB,OAAO,CAAqB;IAC5B,IAAI,CAAS;IACb,WAAW,CAAqB;IAChC,KAAK,CAA2B;IAChC,KAAK,CAAqB;IAEnC,YAAoB,MAQnB;QACC,IAAI,CAAC,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC;QACxB,IAAI,CAAC,SAAS,GAAG,MAAM,CAAC,SAAS,CAAC;QAClC,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC;QAC9B,IAAI,CAAC,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC;QACxB,IAAI,CAAC,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC;QACtC,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC;QAC1B,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC;IAC5B,CAAC;IAED,MAAM,CAAC,MAAM,CAAC,MAQb;QACC,IAAI,MAAM,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACzC,MAAM,IAAI,KAAK,CAAC,0CAA0C,CAAC,CAAC;QAC9D,CAAC;QACD,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACpC,MAAM,IAAI,KAAK,CAAC,qCAAqC,CAAC,CAAC;QACzD,CAAC;QACD,IAAI,MAAM,CAAC,IAAI,KAAK,QAAQ,IAAI,MAAM,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;YAC7D,MAAM,IAAI,KAAK,CAAC,6CAA6C,CAAC,CAAC;QACjE,CAAC;QACD,IAAI,MAAM,CAAC,IAAI,KAAK,QAAQ,IAAI,MAAM,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;YAC7D,MAAM,IAAI,KAAK,CAAC,gDAAgD,CAAC,CAAC;QACpE,CAAC;QACD,OAAO,IAAI,aAAa,CAAC;YACvB,IAAI,EAAE,MAAM,CAAC,IAAI;YACjB,SAAS,EAAE,MAAM,CAAC,SAAS,CAAC,IAAI,EAAE;YAClC,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,IAAI,EAAE;YAC/B,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE;YACxB,WAAW,EAAE,MAAM,CAAC,WAAW,EAAE,IAAI,EAAE;YACvC,KAAK,EAAE,MAAM,CAAC,KAAK;YACnB,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,IAAI,EAAE;SAC5B,CAAC,CAAC;IACL,CAAC;IAED;;;OAGG;IACH,aAAa;QACX,MAAM,MAAM,GAAG,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACxC,MAAM,OAAO,GACX,IAAI,CAAC,OAAO,KAAK,SAAS;YACxB,CAAC,CAAC,GAAG,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,OAAO,EAAE;YACrC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC;QAErB,MAAM,KAAK,GAAa,CAAC,GAAG,MAAM,KAAK,OAAO,GAAG,CAAC,CAAC;QAEnD,IAAI,IAAI,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;YAC7B,KAAK,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;QAC/B,CAAC;QACD,IAAI,IAAI,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;YAC7B,KAAK,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC;QAChC,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAEtB,IAAI,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAC3B,IAAI,IAAI,CAAC,WAAW,KAAK,SAAS,EAAE,CAAC;YACnC,IAAI,IAAI,MAAM,IAAI,CAAC,WAAW,EAAE,CAAC;QACnC,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;CACF;AAED,yEAAyE;AAEzE,MAAM,OAAO,aAAa;IACf,OAAO,CAA2B;IAClC,KAAK,CAAoB;IAElC,YACE,OAAiC,EACjC,KAAwB;QAExB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;IACrB,CAAC;IAED,MAAM,CAAC,MAAM,CACX,OAAiC,EACjC,KAAyB;QAEzB,OAAO,IAAI,aAAa,CAAC,OAAO,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC;IACjD,CAAC;IAED;;;;OAIG;IACH,MAAM,CAAC,KAAK,CAAC,YAAoB;QAC/B,MAAM,KAAK,GAAG,YAAY,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACvC,MAAM,OAAO,GAAoB,EAAE,CAAC;QACpC,MAAM,KAAK,GAAa,EAAE,CAAC;QAE3B,KAAK,MAAM,OAAO,IAAI,KAAK,EAAE,CAAC;YAC5B,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC;YAC5B,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;gBAAE,SAAS;YAEhC,UAAU;YACV,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;gBAAE,SAAS;YAEnC,OAAO;YACP,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;gBACzB,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;gBACjC,SAAS;YACX,CAAC;YAED,+BAA+B;YAC/B,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAC3B,kCAAkC,CACnC,CAAC;YACF,IAAI,UAAU,KAAK,IAAI;gBAAE,SAAS;YAElC,MAAM,UAAU,GAAG,UAAU,CAAC,CAAC,CAAE,CAAC;YAClC,MAAM,WAAW,GAAG,UAAU,CAAC,CAAC,CAAE,CAAC;YACnC,IAAI,SAAS,GAAG,UAAU,CAAC,CAAC,CAAE,CAAC;YAE/B,MAAM,IAAI,GAAG,YAAY,CAAC,UAAU,CAAC,CAAC;YACtC,IAAI,IAAI,KAAK,IAAI;gBAAE,SAAS;YAE5B,mBAAmB;YACnB,MAAM,SAAS,GAAG,WAAW,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YACzC,MAAM,SAAS,GAAG,SAAS,CAAC,CAAC,CAAE,CAAC,IAAI,EAAE,CAAC;YACvC,MAAM,OAAO,GACX,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAE,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;YAE1D,uBAAuB;YACvB,IAAI,KAA+B,CAAC;YACpC,MAAM,UAAU,GAAG,SAAS,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;YACjD,IAAI,UAAU,KAAK,IAAI,EAAE,CAAC;gBACxB,MAAM,SAAS,GAAG,UAAU,CAAC,CAAC,CAAE,CAAC,WAAW,EAAE,CAAC;gBAC/C,IAAI,cAAc,CAAC,SAAS,CAAC,EAAE,CAAC;oBAC9B,KAAK,GAAG,SAAS,CAAC;oBAClB,SAAS,GAAG,SAAS,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;gBACpD,CAAC;YACH,CAAC;YAED,uBAAuB;YACvB,IAAI,KAAyB,CAAC;YAC9B,MAAM,UAAU,GAAG,SAAS,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC;YACtD,IAAI,UAAU,KAAK,IAAI,EAAE,CAAC;gBACxB,KAAK,GAAG,UAAU,CAAC,CAAC,CAAE,CAAC,IAAI,EAAE,CAAC;gBAC9B,SAAS,GAAG,SAAS,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;YACpD,CAAC;YAED,6BAA6B;YAC7B,MAAM,SAAS,GAAG,SAAS,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;YACzC,IAAI,IAAY,CAAC;YACjB,IAAI,WAA+B,CAAC;YACpC,IAAI,SAAS,KAAK,CAAC,CAAC,EAAE,CAAC;gBACrB,IAAI,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,IAAI,EAAE,CAAC;gBAC5C,WAAW,GAAG,SAAS,CAAC,KAAK,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;YACtD,CAAC;iBAAM,CAAC;gBACN,IAAI,GAAG,SAAS,CAAC,IAAI,EAAE,CAAC;YAC1B,CAAC;YAED,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;gBAAE,SAAS;YAEhC,IAAI,CAAC;gBACH,OAAO,CAAC,IAAI,CACV,aAAa,CAAC,MAAM,CAAC;oBACnB,IAAI;oBACJ,SAAS;oBACT,GAAG,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;oBAC7C,IAAI;oBACJ,GAAG,CAAC,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;oBACrD,GAAG,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;oBACzC,GAAG,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;iBAC1C,CAAC,CACH,CAAC;YACJ,CAAC;YAAC,MAAM,CAAC;gBACP,uDAAuD;gBACvD,SAAS;YACX,CAAC;QACH,CAAC;QAED,OAAO,IAAI,aAAa,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;IAC3C,CAAC;IAED,4DAA4D;IAC5D,cAAc;QACZ,MAAM,KAAK,GAAa,CAAC,YAAY,CAAC,CAAC;QACvC,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YAC9B,KAAK,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC;QAC1B,CAAC;QACD,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACjC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,aAAa,EAAE,CAAC,CAAC;QACpC,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAClB,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC1B,CAAC;IAED,iDAAiD;IACjD,SAAS,CAAC,KAAoB;QAC5B,OAAO,IAAI,aAAa,CAAC,CAAC,GAAG,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;IACjE,CAAC;CACF;AAED,yEAAyE;AAEzE,MAAM,cAAc,GAAG,IAAI,GAAG,CAAS;IACrC,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM;CACrE,CAAC,CAAC;AAEH,SAAS,cAAc,CAAC,KAAa;IACnC,OAAO,cAAc,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;AACnC,CAAC;AAED,SAAS,YAAY,CAAC,MAAc;IAClC,QAAQ,MAAM,EAAE,CAAC;QACf,KAAK,GAAG;YACN,OAAO,OAAO,CAAC;QACjB,KAAK,GAAG;YACN,OAAO,QAAQ,CAAC;QAClB,KAAK,GAAG;YACN,OAAO,OAAO,CAAC;QACjB,KAAK,GAAG;YACN,OAAO,QAAQ,CAAC;QAClB;YACE,OAAO,IAAI,CAAC;IAChB,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Vault Value Objects
|
|
3
|
+
*
|
|
4
|
+
* Identity and structural types for the vault bounded context.
|
|
5
|
+
* VaultPath represents a relative path within an Obsidian vault.
|
|
6
|
+
* Patterns provide regex constants for markdown element detection.
|
|
7
|
+
*
|
|
8
|
+
* DDD: Value Objects - no identity lifecycle, equality by value
|
|
9
|
+
* SOLID: SRP - path handling and pattern definitions
|
|
10
|
+
*/
|
|
11
|
+
/**
|
|
12
|
+
* Relative path within an Obsidian vault.
|
|
13
|
+
* Always uses forward slashes, no leading slash.
|
|
14
|
+
* Must end with .md or .canvas extension.
|
|
15
|
+
*/
|
|
16
|
+
export declare class VaultPath {
|
|
17
|
+
readonly value: string;
|
|
18
|
+
private constructor();
|
|
19
|
+
static create(path: string): VaultPath;
|
|
20
|
+
static from(value: string): VaultPath;
|
|
21
|
+
/** Directory part of the path (empty string if no directory). */
|
|
22
|
+
get folder(): string;
|
|
23
|
+
/** Filename without extension. */
|
|
24
|
+
get filename(): string;
|
|
25
|
+
/** File extension without dot (e.g., "md" or "canvas"). */
|
|
26
|
+
get extension(): string;
|
|
27
|
+
get isMarkdown(): boolean;
|
|
28
|
+
get isCanvas(): boolean;
|
|
29
|
+
equals(other: VaultPath): boolean;
|
|
30
|
+
toString(): string;
|
|
31
|
+
}
|
|
32
|
+
/** Markdown heading level (1-6 corresponding to # through ######). */
|
|
33
|
+
export type HeadingLevel = 1 | 2 | 3 | 4 | 5 | 6;
|
|
34
|
+
/** Matches a markdown heading line. Groups: [1]=hashes, [2]=heading text. */
|
|
35
|
+
export declare const HEADING_PATTERN: RegExp;
|
|
36
|
+
/** Matches a [[wikilink]] or [[path|alias]]. Groups: [1]=target, [2]=alias (optional). */
|
|
37
|
+
export declare const WIKILINK_PATTERN: RegExp;
|
|
38
|
+
/** Matches a checkbox line. Groups: [1]=indent, [2]=check char, [3]=text. */
|
|
39
|
+
export declare const CHECKBOX_PATTERN: RegExp;
|
|
40
|
+
/** Frontmatter YAML delimiters. */
|
|
41
|
+
export declare const FRONTMATTER_DELIMITERS: {
|
|
42
|
+
readonly open: "---";
|
|
43
|
+
readonly close: "---";
|
|
44
|
+
};
|
|
45
|
+
//# sourceMappingURL=value-objects.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"value-objects.d.ts","sourceRoot":"","sources":["../../../src/domain/vault/value-objects.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAMH;;;;GAIG;AACH,qBAAa,SAAS;aACgB,KAAK,EAAE,MAAM;IAAjD,OAAO;IAEP,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS;IA6BtC,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS;IAIrC,iEAAiE;IACjE,IAAI,MAAM,IAAI,MAAM,CAGnB;IAED,kCAAkC;IAClC,IAAI,QAAQ,IAAI,MAAM,CAKrB;IAED,2DAA2D;IAC3D,IAAI,SAAS,IAAI,MAAM,CAGtB;IAED,IAAI,UAAU,IAAI,OAAO,CAExB;IAED,IAAI,QAAQ,IAAI,OAAO,CAEtB;IAED,MAAM,CAAC,KAAK,EAAE,SAAS,GAAG,OAAO;IAIjC,QAAQ,IAAI,MAAM;CAGnB;AAID,sEAAsE;AACtE,MAAM,MAAM,YAAY,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AAIjD,6EAA6E;AAC7E,eAAO,MAAM,eAAe,QAAsB,CAAC;AAEnD,0FAA0F;AAC1F,eAAO,MAAM,gBAAgB,QAAsC,CAAC;AAEpE,6EAA6E;AAC7E,eAAO,MAAM,gBAAgB,QAAgC,CAAC;AAE9D,mCAAmC;AACnC,eAAO,MAAM,sBAAsB;;;CAGzB,CAAC"}
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Vault Value Objects
|
|
3
|
+
*
|
|
4
|
+
* Identity and structural types for the vault bounded context.
|
|
5
|
+
* VaultPath represents a relative path within an Obsidian vault.
|
|
6
|
+
* Patterns provide regex constants for markdown element detection.
|
|
7
|
+
*
|
|
8
|
+
* DDD: Value Objects - no identity lifecycle, equality by value
|
|
9
|
+
* SOLID: SRP - path handling and pattern definitions
|
|
10
|
+
*/
|
|
11
|
+
// ── VaultPath ─────────────────────────────────────────────────────────
|
|
12
|
+
const VALID_EXTENSIONS = ["md", "canvas"];
|
|
13
|
+
/**
|
|
14
|
+
* Relative path within an Obsidian vault.
|
|
15
|
+
* Always uses forward slashes, no leading slash.
|
|
16
|
+
* Must end with .md or .canvas extension.
|
|
17
|
+
*/
|
|
18
|
+
export class VaultPath {
|
|
19
|
+
value;
|
|
20
|
+
constructor(value) {
|
|
21
|
+
this.value = value;
|
|
22
|
+
}
|
|
23
|
+
static create(path) {
|
|
24
|
+
const trimmed = path.trim();
|
|
25
|
+
if (trimmed.length === 0) {
|
|
26
|
+
throw new Error("VaultPath: path cannot be empty");
|
|
27
|
+
}
|
|
28
|
+
// Normalize to forward slashes, strip leading slash
|
|
29
|
+
let normalized = trimmed.replace(/\\/g, "/");
|
|
30
|
+
if (normalized.startsWith("/")) {
|
|
31
|
+
normalized = normalized.slice(1);
|
|
32
|
+
}
|
|
33
|
+
// Validate extension
|
|
34
|
+
const dotIndex = normalized.lastIndexOf(".");
|
|
35
|
+
if (dotIndex === -1) {
|
|
36
|
+
throw new Error(`VaultPath: path must have .md or .canvas extension: "${path}"`);
|
|
37
|
+
}
|
|
38
|
+
const ext = normalized.slice(dotIndex + 1).toLowerCase();
|
|
39
|
+
if (!VALID_EXTENSIONS.includes(ext)) {
|
|
40
|
+
throw new Error(`VaultPath: invalid extension ".${ext}", must be .md or .canvas`);
|
|
41
|
+
}
|
|
42
|
+
return new VaultPath(normalized);
|
|
43
|
+
}
|
|
44
|
+
static from(value) {
|
|
45
|
+
return new VaultPath(value);
|
|
46
|
+
}
|
|
47
|
+
/** Directory part of the path (empty string if no directory). */
|
|
48
|
+
get folder() {
|
|
49
|
+
const lastSlash = this.value.lastIndexOf("/");
|
|
50
|
+
return lastSlash === -1 ? "" : this.value.slice(0, lastSlash);
|
|
51
|
+
}
|
|
52
|
+
/** Filename without extension. */
|
|
53
|
+
get filename() {
|
|
54
|
+
const lastSlash = this.value.lastIndexOf("/");
|
|
55
|
+
const name = lastSlash === -1 ? this.value : this.value.slice(lastSlash + 1);
|
|
56
|
+
const dotIndex = name.lastIndexOf(".");
|
|
57
|
+
return dotIndex === -1 ? name : name.slice(0, dotIndex);
|
|
58
|
+
}
|
|
59
|
+
/** File extension without dot (e.g., "md" or "canvas"). */
|
|
60
|
+
get extension() {
|
|
61
|
+
const dotIndex = this.value.lastIndexOf(".");
|
|
62
|
+
return dotIndex === -1 ? "" : this.value.slice(dotIndex + 1).toLowerCase();
|
|
63
|
+
}
|
|
64
|
+
get isMarkdown() {
|
|
65
|
+
return this.extension === "md";
|
|
66
|
+
}
|
|
67
|
+
get isCanvas() {
|
|
68
|
+
return this.extension === "canvas";
|
|
69
|
+
}
|
|
70
|
+
equals(other) {
|
|
71
|
+
return this.value === other.value;
|
|
72
|
+
}
|
|
73
|
+
toString() {
|
|
74
|
+
return this.value;
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
// ── Regex Patterns ────────────────────────────────────────────────────
|
|
78
|
+
/** Matches a markdown heading line. Groups: [1]=hashes, [2]=heading text. */
|
|
79
|
+
export const HEADING_PATTERN = /^(#{1,6})\s+(.+)$/;
|
|
80
|
+
/** Matches a [[wikilink]] or [[path|alias]]. Groups: [1]=target, [2]=alias (optional). */
|
|
81
|
+
export const WIKILINK_PATTERN = /\[\[([^\]|]+)(?:\|([^\]]+))?\]\]/g;
|
|
82
|
+
/** Matches a checkbox line. Groups: [1]=indent, [2]=check char, [3]=text. */
|
|
83
|
+
export const CHECKBOX_PATTERN = /^(\s*)- \[([ xX])\]\s+(.+)$/;
|
|
84
|
+
/** Frontmatter YAML delimiters. */
|
|
85
|
+
export const FRONTMATTER_DELIMITERS = {
|
|
86
|
+
open: "---",
|
|
87
|
+
close: "---",
|
|
88
|
+
};
|
|
89
|
+
//# sourceMappingURL=value-objects.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"value-objects.js","sourceRoot":"","sources":["../../../src/domain/vault/value-objects.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Workspace Registry - Entities
|
|
3
|
+
*
|
|
4
|
+
* Workspace is the aggregate root of the workspace-registry bounded context.
|
|
5
|
+
* It represents a registered software project managed by JARVIS.
|
|
6
|
+
*
|
|
7
|
+
* DDD: Aggregate Root with identity (WorkspaceId)
|
|
8
|
+
* SOLID: SRP - entity state and invariants only
|
|
9
|
+
*/
|
|
10
|
+
import { WorkspaceId, Timestamp } from "../shared/value-objects.js";
|
|
11
|
+
import type { ProjectDirectory, PrimaryLanguage, WorkspaceStatus, WorkspaceData, WorkspaceRegistrationData } from "./value-objects.js";
|
|
12
|
+
import { TechStack } from "./value-objects.js";
|
|
13
|
+
export declare class Workspace {
|
|
14
|
+
readonly id: WorkspaceId;
|
|
15
|
+
readonly name: string;
|
|
16
|
+
readonly directory: ProjectDirectory;
|
|
17
|
+
private _description;
|
|
18
|
+
private _primaryLanguage;
|
|
19
|
+
private _techStack;
|
|
20
|
+
private _status;
|
|
21
|
+
private _metadata;
|
|
22
|
+
readonly createdAt: Timestamp;
|
|
23
|
+
private _updatedAt;
|
|
24
|
+
private constructor();
|
|
25
|
+
/**
|
|
26
|
+
* Creates a new Workspace from registration data.
|
|
27
|
+
* Sets defaults for optional fields.
|
|
28
|
+
*/
|
|
29
|
+
static register(data: WorkspaceRegistrationData): Workspace;
|
|
30
|
+
/**
|
|
31
|
+
* Reconstitutes a Workspace from persisted data.
|
|
32
|
+
* No validation — assumes data integrity from the repository.
|
|
33
|
+
*/
|
|
34
|
+
static reconstitute(data: WorkspaceData): Workspace;
|
|
35
|
+
get description(): string | undefined;
|
|
36
|
+
get primaryLanguage(): PrimaryLanguage;
|
|
37
|
+
get techStack(): TechStack;
|
|
38
|
+
get status(): WorkspaceStatus;
|
|
39
|
+
get metadata(): Readonly<Record<string, unknown>>;
|
|
40
|
+
get updatedAt(): Timestamp;
|
|
41
|
+
get isActive(): boolean;
|
|
42
|
+
get isArchived(): boolean;
|
|
43
|
+
updateDescription(description: string): void;
|
|
44
|
+
updatePrimaryLanguage(language: PrimaryLanguage): void;
|
|
45
|
+
updateTechStack(techStack: TechStack): void;
|
|
46
|
+
addTechStackItem(name: string): void;
|
|
47
|
+
removeTechStackItem(name: string): void;
|
|
48
|
+
updateDirectory(directory: ProjectDirectory): void;
|
|
49
|
+
setMetadata(key: string, value: unknown): void;
|
|
50
|
+
removeMetadata(key: string): void;
|
|
51
|
+
archive(): void;
|
|
52
|
+
activate(): void;
|
|
53
|
+
markAsTemplate(): void;
|
|
54
|
+
equals(other: Workspace): boolean;
|
|
55
|
+
private touch;
|
|
56
|
+
}
|
|
57
|
+
//# sourceMappingURL=entities.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"entities.d.ts","sourceRoot":"","sources":["../../../src/domain/workspace-registry/entities.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,4BAA4B,CAAC;AACpE,OAAO,KAAK,EACV,gBAAgB,EAChB,eAAe,EACf,eAAe,EACf,aAAa,EACb,yBAAyB,EAC1B,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAI/C,qBAAa,SAAS;aAEF,EAAE,EAAE,WAAW;aACf,IAAI,EAAE,MAAM;aACZ,SAAS,EAAE,gBAAgB;IAC3C,OAAO,CAAC,YAAY;IACpB,OAAO,CAAC,gBAAgB;IACxB,OAAO,CAAC,UAAU;IAClB,OAAO,CAAC,OAAO;IACf,OAAO,CAAC,SAAS;aACD,SAAS,EAAE,SAAS;IACpC,OAAO,CAAC,UAAU;IAVpB,OAAO;IAeP;;;OAGG;IACH,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,yBAAyB,GAAG,SAAS;IAgB3D;;;OAGG;IACH,MAAM,CAAC,YAAY,CAAC,IAAI,EAAE,aAAa,GAAG,SAAS;IAiBnD,IAAI,WAAW,IAAI,MAAM,GAAG,SAAS,CAEpC;IAED,IAAI,eAAe,IAAI,eAAe,CAErC;IAED,IAAI,SAAS,IAAI,SAAS,CAEzB;IAED,IAAI,MAAM,IAAI,eAAe,CAE5B;IAED,IAAI,QAAQ,IAAI,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAEhD;IAED,IAAI,SAAS,IAAI,SAAS,CAEzB;IAED,IAAI,QAAQ,IAAI,OAAO,CAEtB;IAED,IAAI,UAAU,IAAI,OAAO,CAExB;IAID,iBAAiB,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI;IAK5C,qBAAqB,CAAC,QAAQ,EAAE,eAAe,GAAG,IAAI;IAKtD,eAAe,CAAC,SAAS,EAAE,SAAS,GAAG,IAAI;IAK3C,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAKpC,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAKvC,eAAe,CAAC,SAAS,EAAE,gBAAgB,GAAG,IAAI;IAelD,WAAW,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,IAAI;IAK9C,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAMjC,OAAO,IAAI,IAAI;IAQf,QAAQ,IAAI,IAAI;IAQhB,cAAc,IAAI,IAAI;IAOtB,MAAM,CAAC,KAAK,EAAE,SAAS,GAAG,OAAO;IAMjC,OAAO,CAAC,KAAK;CAGd"}
|
|
@@ -0,0 +1,148 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Workspace Registry - Entities
|
|
3
|
+
*
|
|
4
|
+
* Workspace is the aggregate root of the workspace-registry bounded context.
|
|
5
|
+
* It represents a registered software project managed by JARVIS.
|
|
6
|
+
*
|
|
7
|
+
* DDD: Aggregate Root with identity (WorkspaceId)
|
|
8
|
+
* SOLID: SRP - entity state and invariants only
|
|
9
|
+
*/
|
|
10
|
+
import { WorkspaceId, Timestamp } from "../shared/value-objects.js";
|
|
11
|
+
import { TechStack } from "./value-objects.js";
|
|
12
|
+
// ── Workspace Entity ─────────────────────────────────────────────────
|
|
13
|
+
export class Workspace {
|
|
14
|
+
id;
|
|
15
|
+
name;
|
|
16
|
+
directory;
|
|
17
|
+
_description;
|
|
18
|
+
_primaryLanguage;
|
|
19
|
+
_techStack;
|
|
20
|
+
_status;
|
|
21
|
+
_metadata;
|
|
22
|
+
createdAt;
|
|
23
|
+
_updatedAt;
|
|
24
|
+
constructor(id, name, directory, _description, _primaryLanguage, _techStack, _status, _metadata, createdAt, _updatedAt) {
|
|
25
|
+
this.id = id;
|
|
26
|
+
this.name = name;
|
|
27
|
+
this.directory = directory;
|
|
28
|
+
this._description = _description;
|
|
29
|
+
this._primaryLanguage = _primaryLanguage;
|
|
30
|
+
this._techStack = _techStack;
|
|
31
|
+
this._status = _status;
|
|
32
|
+
this._metadata = _metadata;
|
|
33
|
+
this.createdAt = createdAt;
|
|
34
|
+
this._updatedAt = _updatedAt;
|
|
35
|
+
}
|
|
36
|
+
// ── Factories ────────────────────────────────────────────────────
|
|
37
|
+
/**
|
|
38
|
+
* Creates a new Workspace from registration data.
|
|
39
|
+
* Sets defaults for optional fields.
|
|
40
|
+
*/
|
|
41
|
+
static register(data) {
|
|
42
|
+
const now = Timestamp.now();
|
|
43
|
+
return new Workspace(data.id, data.name.trim(), data.directory, data.description?.trim(), data.primaryLanguage ?? "unknown", data.techStack ?? TechStack.empty(), "active", data.metadata ?? {}, now, now);
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Reconstitutes a Workspace from persisted data.
|
|
47
|
+
* No validation — assumes data integrity from the repository.
|
|
48
|
+
*/
|
|
49
|
+
static reconstitute(data) {
|
|
50
|
+
return new Workspace(data.id, data.name, data.directory, data.description, data.primaryLanguage, data.techStack, data.status, data.metadata, data.createdAt, data.updatedAt);
|
|
51
|
+
}
|
|
52
|
+
// ── Getters ──────────────────────────────────────────────────────
|
|
53
|
+
get description() {
|
|
54
|
+
return this._description;
|
|
55
|
+
}
|
|
56
|
+
get primaryLanguage() {
|
|
57
|
+
return this._primaryLanguage;
|
|
58
|
+
}
|
|
59
|
+
get techStack() {
|
|
60
|
+
return this._techStack;
|
|
61
|
+
}
|
|
62
|
+
get status() {
|
|
63
|
+
return this._status;
|
|
64
|
+
}
|
|
65
|
+
get metadata() {
|
|
66
|
+
return this._metadata;
|
|
67
|
+
}
|
|
68
|
+
get updatedAt() {
|
|
69
|
+
return this._updatedAt;
|
|
70
|
+
}
|
|
71
|
+
get isActive() {
|
|
72
|
+
return this._status === "active";
|
|
73
|
+
}
|
|
74
|
+
get isArchived() {
|
|
75
|
+
return this._status === "archived";
|
|
76
|
+
}
|
|
77
|
+
// ── Commands (state mutations) ───────────────────────────────────
|
|
78
|
+
updateDescription(description) {
|
|
79
|
+
this._description = description.trim();
|
|
80
|
+
this.touch();
|
|
81
|
+
}
|
|
82
|
+
updatePrimaryLanguage(language) {
|
|
83
|
+
this._primaryLanguage = language;
|
|
84
|
+
this.touch();
|
|
85
|
+
}
|
|
86
|
+
updateTechStack(techStack) {
|
|
87
|
+
this._techStack = techStack;
|
|
88
|
+
this.touch();
|
|
89
|
+
}
|
|
90
|
+
addTechStackItem(name) {
|
|
91
|
+
this._techStack = this._techStack.add(name);
|
|
92
|
+
this.touch();
|
|
93
|
+
}
|
|
94
|
+
removeTechStackItem(name) {
|
|
95
|
+
this._techStack = this._techStack.remove(name);
|
|
96
|
+
this.touch();
|
|
97
|
+
}
|
|
98
|
+
updateDirectory(directory) {
|
|
99
|
+
this._description;
|
|
100
|
+
// Only update if the directory actually changed to avoid stale updates
|
|
101
|
+
if (!this.directory.equals(directory)) {
|
|
102
|
+
// Workspace is immutable on `directory` field (set at construction),
|
|
103
|
+
// so we use reconstitute pattern for this rare mutation.
|
|
104
|
+
Object.defineProperty(this, "directory", {
|
|
105
|
+
value: directory,
|
|
106
|
+
writable: false,
|
|
107
|
+
configurable: true,
|
|
108
|
+
});
|
|
109
|
+
this.touch();
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
setMetadata(key, value) {
|
|
113
|
+
this._metadata = { ...this._metadata, [key]: value };
|
|
114
|
+
this.touch();
|
|
115
|
+
}
|
|
116
|
+
removeMetadata(key) {
|
|
117
|
+
const { [key]: _, ...rest } = this._metadata;
|
|
118
|
+
this._metadata = rest;
|
|
119
|
+
this.touch();
|
|
120
|
+
}
|
|
121
|
+
archive() {
|
|
122
|
+
if (this._status === "archived") {
|
|
123
|
+
throw new Error(`Workspace ${this.id.value} is already archived`);
|
|
124
|
+
}
|
|
125
|
+
this._status = "archived";
|
|
126
|
+
this.touch();
|
|
127
|
+
}
|
|
128
|
+
activate() {
|
|
129
|
+
if (this._status === "active") {
|
|
130
|
+
throw new Error(`Workspace ${this.id.value} is already active`);
|
|
131
|
+
}
|
|
132
|
+
this._status = "active";
|
|
133
|
+
this.touch();
|
|
134
|
+
}
|
|
135
|
+
markAsTemplate() {
|
|
136
|
+
this._status = "template";
|
|
137
|
+
this.touch();
|
|
138
|
+
}
|
|
139
|
+
// ── Equality ─────────────────────────────────────────────────────
|
|
140
|
+
equals(other) {
|
|
141
|
+
return this.id.equals(other.id);
|
|
142
|
+
}
|
|
143
|
+
// ── Private ──────────────────────────────────────────────────────
|
|
144
|
+
touch() {
|
|
145
|
+
this._updatedAt = Timestamp.now();
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
//# sourceMappingURL=entities.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"entities.js","sourceRoot":"","sources":["../../../src/domain/workspace-registry/entities.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Workspace Registry - Repository Ports
|
|
3
|
+
*
|
|
4
|
+
* Interfaces for workspace persistence and dependency management.
|
|
5
|
+
* Implementations live in the infrastructure layer (SQLite registry.db).
|
|
6
|
+
*
|
|
7
|
+
* DDD: Repository interfaces in domain, implementations in infrastructure
|
|
8
|
+
* SOLID: DIP - domain depends on abstractions, not concrete persistence
|
|
9
|
+
* SOLID: ISP - separate interfaces for workspaces and dependencies
|
|
10
|
+
*/
|
|
11
|
+
import type { WorkspaceId } from "../shared/value-objects.js";
|
|
12
|
+
import type { Workspace } from "./entities.js";
|
|
13
|
+
import type { WorkspaceDependency, DependencyType, ProjectDirectory } from "./value-objects.js";
|
|
14
|
+
/**
|
|
15
|
+
* Persistence port for the Workspace aggregate root.
|
|
16
|
+
* Operates on the central registry database (~/.jarvis/registry.db).
|
|
17
|
+
*/
|
|
18
|
+
export interface WorkspaceRegistryRepository {
|
|
19
|
+
/** Persist a new or updated workspace. */
|
|
20
|
+
save(workspace: Workspace): Promise<void>;
|
|
21
|
+
/** Find workspace by its unique ID. */
|
|
22
|
+
findById(id: WorkspaceId): Promise<Workspace | null>;
|
|
23
|
+
/** Find workspace by its project directory path. */
|
|
24
|
+
findByDirectory(directory: ProjectDirectory): Promise<Workspace | null>;
|
|
25
|
+
/** List all registered workspaces. */
|
|
26
|
+
findAll(): Promise<readonly Workspace[]>;
|
|
27
|
+
/** List workspaces filtered by status. */
|
|
28
|
+
findByStatus(status: string): Promise<readonly Workspace[]>;
|
|
29
|
+
/** Delete a workspace registration (does NOT delete project files). */
|
|
30
|
+
delete(id: WorkspaceId): Promise<void>;
|
|
31
|
+
/** Check if a workspace with this ID exists. */
|
|
32
|
+
exists(id: WorkspaceId): Promise<boolean>;
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Persistence port for cross-workspace dependencies.
|
|
36
|
+
* Stored alongside workspace data in the central registry.
|
|
37
|
+
*/
|
|
38
|
+
export interface WorkspaceDependencyRepository {
|
|
39
|
+
/** Add a dependency between two workspaces. */
|
|
40
|
+
addDependency(dependency: WorkspaceDependency): Promise<void>;
|
|
41
|
+
/** Remove a specific dependency. */
|
|
42
|
+
removeDependency(sourceId: WorkspaceId, targetId: WorkspaceId): Promise<void>;
|
|
43
|
+
/** Get all dependencies where this workspace is the source (depends on). */
|
|
44
|
+
getDependencies(sourceId: WorkspaceId): Promise<readonly WorkspaceDependency[]>;
|
|
45
|
+
/** Get all workspaces that depend on this workspace (dependents/consumers). */
|
|
46
|
+
getDependents(targetId: WorkspaceId): Promise<readonly WorkspaceDependency[]>;
|
|
47
|
+
/**
|
|
48
|
+
* Get all dependencies of a specific type for a workspace.
|
|
49
|
+
* E.g., all "api-consumer" dependencies.
|
|
50
|
+
*/
|
|
51
|
+
getDependenciesByType(sourceId: WorkspaceId, dependencyType: DependencyType): Promise<readonly WorkspaceDependency[]>;
|
|
52
|
+
/** Check if a specific dependency exists. */
|
|
53
|
+
dependencyExists(sourceId: WorkspaceId, targetId: WorkspaceId): Promise<boolean>;
|
|
54
|
+
/** Remove all dependencies for a workspace (both as source and target). */
|
|
55
|
+
removeAllForWorkspace(id: WorkspaceId): Promise<void>;
|
|
56
|
+
}
|
|
57
|
+
//# sourceMappingURL=repositories.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"repositories.d.ts","sourceRoot":"","sources":["../../../src/domain/workspace-registry/repositories.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AAC9D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,KAAK,EACV,mBAAmB,EACnB,cAAc,EACd,gBAAgB,EACjB,MAAM,oBAAoB,CAAC;AAI5B;;;GAGG;AACH,MAAM,WAAW,2BAA2B;IAC1C,0CAA0C;IAC1C,IAAI,CAAC,SAAS,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAE1C,uCAAuC;IACvC,QAAQ,CAAC,EAAE,EAAE,WAAW,GAAG,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC,CAAC;IAErD,oDAAoD;IACpD,eAAe,CAAC,SAAS,EAAE,gBAAgB,GAAG,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC,CAAC;IAExE,sCAAsC;IACtC,OAAO,IAAI,OAAO,CAAC,SAAS,SAAS,EAAE,CAAC,CAAC;IAEzC,0CAA0C;IAC1C,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,SAAS,EAAE,CAAC,CAAC;IAE5D,uEAAuE;IACvE,MAAM,CAAC,EAAE,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAEvC,gDAAgD;IAChD,MAAM,CAAC,EAAE,EAAE,WAAW,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;CAC3C;AAID;;;GAGG;AACH,MAAM,WAAW,6BAA6B;IAC5C,+CAA+C;IAC/C,aAAa,CAAC,UAAU,EAAE,mBAAmB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAE9D,oCAAoC;IACpC,gBAAgB,CAAC,QAAQ,EAAE,WAAW,EAAE,QAAQ,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAE9E,4EAA4E;IAC5E,eAAe,CACb,QAAQ,EAAE,WAAW,GACpB,OAAO,CAAC,SAAS,mBAAmB,EAAE,CAAC,CAAC;IAE3C,+EAA+E;IAC/E,aAAa,CAAC,QAAQ,EAAE,WAAW,GAAG,OAAO,CAAC,SAAS,mBAAmB,EAAE,CAAC,CAAC;IAE9E;;;OAGG;IACH,qBAAqB,CACnB,QAAQ,EAAE,WAAW,EACrB,cAAc,EAAE,cAAc,GAC7B,OAAO,CAAC,SAAS,mBAAmB,EAAE,CAAC,CAAC;IAE3C,6CAA6C;IAC7C,gBAAgB,CACd,QAAQ,EAAE,WAAW,EACrB,QAAQ,EAAE,WAAW,GACpB,OAAO,CAAC,OAAO,CAAC,CAAC;IAEpB,2EAA2E;IAC3E,qBAAqB,CAAC,EAAE,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACvD"}
|