@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,186 @@
|
|
|
1
|
+
import { Sprint, Epic } from "../../domain/kanban/sprint.js";
|
|
2
|
+
import { SprintId, SprintStatus, EpicId, EpicStatus, Priority, } from "../../domain/kanban/value-objects.js";
|
|
3
|
+
import { WorkspaceId, Timestamp } from "../../domain/shared/value-objects.js";
|
|
4
|
+
// ── Sprint Repository ─────────────────────────────────────────────────
|
|
5
|
+
const SPRINT_SCHEMA_KEY = "kanban_sprints";
|
|
6
|
+
const SPRINT_DDL = `
|
|
7
|
+
CREATE TABLE IF NOT EXISTS sprints (
|
|
8
|
+
id TEXT PRIMARY KEY,
|
|
9
|
+
workspace TEXT NOT NULL,
|
|
10
|
+
name TEXT NOT NULL,
|
|
11
|
+
status TEXT NOT NULL DEFAULT 'planning',
|
|
12
|
+
goal TEXT,
|
|
13
|
+
start_date TEXT,
|
|
14
|
+
end_date TEXT,
|
|
15
|
+
velocity_planned INTEGER,
|
|
16
|
+
velocity_actual INTEGER,
|
|
17
|
+
created_at TEXT NOT NULL
|
|
18
|
+
);
|
|
19
|
+
CREATE INDEX IF NOT EXISTS idx_sprints_workspace ON sprints(workspace);
|
|
20
|
+
CREATE INDEX IF NOT EXISTS idx_sprints_status ON sprints(status);
|
|
21
|
+
CREATE INDEX IF NOT EXISTS idx_sprints_workspace_status
|
|
22
|
+
ON sprints(workspace, status);
|
|
23
|
+
`;
|
|
24
|
+
export class SqliteSprintRepository {
|
|
25
|
+
db;
|
|
26
|
+
constructor(db) {
|
|
27
|
+
this.db = db;
|
|
28
|
+
this.db.ensureSchema(SPRINT_SCHEMA_KEY, SPRINT_DDL);
|
|
29
|
+
}
|
|
30
|
+
async save(sprint) {
|
|
31
|
+
const sql = `
|
|
32
|
+
INSERT INTO sprints (
|
|
33
|
+
id, workspace, name, status, goal,
|
|
34
|
+
start_date, end_date, velocity_planned, velocity_actual, created_at
|
|
35
|
+
) VALUES (
|
|
36
|
+
@id, @workspace, @name, @status, @goal,
|
|
37
|
+
@start_date, @end_date, @velocity_planned, @velocity_actual, @created_at
|
|
38
|
+
)
|
|
39
|
+
ON CONFLICT(id) DO UPDATE SET
|
|
40
|
+
status = @status,
|
|
41
|
+
goal = @goal,
|
|
42
|
+
start_date = @start_date,
|
|
43
|
+
end_date = @end_date,
|
|
44
|
+
velocity_planned = @velocity_planned,
|
|
45
|
+
velocity_actual = @velocity_actual
|
|
46
|
+
`;
|
|
47
|
+
this.db.execute(sql, {
|
|
48
|
+
id: sprint.id.value,
|
|
49
|
+
workspace: sprint.workspace.value,
|
|
50
|
+
name: sprint.name,
|
|
51
|
+
status: sprint.status,
|
|
52
|
+
goal: sprint.goal ?? null,
|
|
53
|
+
start_date: sprint.startDate?.toISO() ?? null,
|
|
54
|
+
end_date: sprint.endDate?.toISO() ?? null,
|
|
55
|
+
velocity_planned: sprint.velocityPlanned ?? null,
|
|
56
|
+
velocity_actual: sprint.velocityActual ?? null,
|
|
57
|
+
created_at: sprint.createdAt.toISO(),
|
|
58
|
+
});
|
|
59
|
+
}
|
|
60
|
+
async findById(id) {
|
|
61
|
+
const row = this.db.queryOne("SELECT * FROM sprints WHERE id = @id", { id: id.value });
|
|
62
|
+
return row ? this.toDomain(row) : null;
|
|
63
|
+
}
|
|
64
|
+
async findByWorkspace(workspace) {
|
|
65
|
+
const rows = this.db.queryAll(`SELECT * FROM sprints
|
|
66
|
+
WHERE workspace = @workspace
|
|
67
|
+
ORDER BY created_at DESC`, { workspace: workspace.value });
|
|
68
|
+
return rows.map((row) => this.toDomain(row));
|
|
69
|
+
}
|
|
70
|
+
async findActive(workspace) {
|
|
71
|
+
const row = this.db.queryOne(`SELECT * FROM sprints
|
|
72
|
+
WHERE workspace = @workspace AND status = 'active'
|
|
73
|
+
ORDER BY created_at DESC LIMIT 1`, { workspace: workspace.value });
|
|
74
|
+
return row ? this.toDomain(row) : null;
|
|
75
|
+
}
|
|
76
|
+
async nextSequence(workspace) {
|
|
77
|
+
const row = this.db.queryOne(`SELECT MAX(CAST(SUBSTR(id, 4) AS INTEGER)) as max_seq
|
|
78
|
+
FROM sprints WHERE workspace = @workspace`, { workspace: workspace.value });
|
|
79
|
+
return (row?.max_seq ?? 0) + 1;
|
|
80
|
+
}
|
|
81
|
+
async delete(id) {
|
|
82
|
+
this.db.execute("DELETE FROM sprints WHERE id = @id", { id: id.value });
|
|
83
|
+
}
|
|
84
|
+
toDomain(row) {
|
|
85
|
+
const props = {
|
|
86
|
+
id: SprintId.from(row.id),
|
|
87
|
+
workspace: WorkspaceId.from(row.workspace),
|
|
88
|
+
name: row.name,
|
|
89
|
+
status: row.status,
|
|
90
|
+
...(row.goal !== null ? { goal: row.goal } : {}),
|
|
91
|
+
...(row.start_date !== null
|
|
92
|
+
? { startDate: Timestamp.fromISO(row.start_date) }
|
|
93
|
+
: {}),
|
|
94
|
+
...(row.end_date !== null
|
|
95
|
+
? { endDate: Timestamp.fromISO(row.end_date) }
|
|
96
|
+
: {}),
|
|
97
|
+
...(row.velocity_planned !== null
|
|
98
|
+
? { velocityPlanned: row.velocity_planned }
|
|
99
|
+
: {}),
|
|
100
|
+
...(row.velocity_actual !== null
|
|
101
|
+
? { velocityActual: row.velocity_actual }
|
|
102
|
+
: {}),
|
|
103
|
+
createdAt: Timestamp.fromISO(row.created_at),
|
|
104
|
+
};
|
|
105
|
+
return Sprint.reconstitute(props);
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
// ── Epic Repository ───────────────────────────────────────────────────
|
|
109
|
+
const EPIC_SCHEMA_KEY = "kanban_epics";
|
|
110
|
+
const EPIC_DDL = `
|
|
111
|
+
CREATE TABLE IF NOT EXISTS epics (
|
|
112
|
+
id TEXT PRIMARY KEY,
|
|
113
|
+
workspace TEXT NOT NULL,
|
|
114
|
+
title TEXT NOT NULL,
|
|
115
|
+
status TEXT NOT NULL DEFAULT 'backlog',
|
|
116
|
+
priority TEXT NOT NULL DEFAULT 'medium',
|
|
117
|
+
description TEXT,
|
|
118
|
+
owner TEXT,
|
|
119
|
+
created_at TEXT NOT NULL
|
|
120
|
+
);
|
|
121
|
+
CREATE INDEX IF NOT EXISTS idx_epics_workspace ON epics(workspace);
|
|
122
|
+
CREATE INDEX IF NOT EXISTS idx_epics_status ON epics(status);
|
|
123
|
+
`;
|
|
124
|
+
export class SqliteEpicRepository {
|
|
125
|
+
db;
|
|
126
|
+
constructor(db) {
|
|
127
|
+
this.db = db;
|
|
128
|
+
this.db.ensureSchema(EPIC_SCHEMA_KEY, EPIC_DDL);
|
|
129
|
+
}
|
|
130
|
+
async save(epic) {
|
|
131
|
+
const sql = `
|
|
132
|
+
INSERT INTO epics (
|
|
133
|
+
id, workspace, title, status, priority, description, owner, created_at
|
|
134
|
+
) VALUES (
|
|
135
|
+
@id, @workspace, @title, @status, @priority, @description, @owner, @created_at
|
|
136
|
+
)
|
|
137
|
+
ON CONFLICT(id) DO UPDATE SET
|
|
138
|
+
status = @status,
|
|
139
|
+
priority = @priority,
|
|
140
|
+
description = @description,
|
|
141
|
+
owner = @owner
|
|
142
|
+
`;
|
|
143
|
+
this.db.execute(sql, {
|
|
144
|
+
id: epic.id.value,
|
|
145
|
+
workspace: epic.workspace.value,
|
|
146
|
+
title: epic.title,
|
|
147
|
+
status: epic.status,
|
|
148
|
+
priority: epic.priority,
|
|
149
|
+
description: epic.description ?? null,
|
|
150
|
+
owner: epic.owner ?? null,
|
|
151
|
+
created_at: epic.createdAt.toISO(),
|
|
152
|
+
});
|
|
153
|
+
}
|
|
154
|
+
async findById(id) {
|
|
155
|
+
const row = this.db.queryOne("SELECT * FROM epics WHERE id = @id", { id: id.value });
|
|
156
|
+
return row ? this.toDomain(row) : null;
|
|
157
|
+
}
|
|
158
|
+
async findByWorkspace(workspace) {
|
|
159
|
+
const rows = this.db.queryAll(`SELECT * FROM epics
|
|
160
|
+
WHERE workspace = @workspace
|
|
161
|
+
ORDER BY created_at DESC`, { workspace: workspace.value });
|
|
162
|
+
return rows.map((row) => this.toDomain(row));
|
|
163
|
+
}
|
|
164
|
+
async nextSequence(workspace) {
|
|
165
|
+
const row = this.db.queryOne(`SELECT MAX(CAST(SUBSTR(id, 4) AS INTEGER)) as max_seq
|
|
166
|
+
FROM epics WHERE workspace = @workspace`, { workspace: workspace.value });
|
|
167
|
+
return (row?.max_seq ?? 0) + 1;
|
|
168
|
+
}
|
|
169
|
+
async delete(id) {
|
|
170
|
+
this.db.execute("DELETE FROM epics WHERE id = @id", { id: id.value });
|
|
171
|
+
}
|
|
172
|
+
toDomain(row) {
|
|
173
|
+
const props = {
|
|
174
|
+
id: EpicId.from(row.id),
|
|
175
|
+
workspace: WorkspaceId.from(row.workspace),
|
|
176
|
+
title: row.title,
|
|
177
|
+
status: row.status,
|
|
178
|
+
priority: row.priority,
|
|
179
|
+
...(row.description !== null ? { description: row.description } : {}),
|
|
180
|
+
...(row.owner !== null ? { owner: row.owner } : {}),
|
|
181
|
+
createdAt: Timestamp.fromISO(row.created_at),
|
|
182
|
+
};
|
|
183
|
+
return Epic.reconstitute(props);
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
//# sourceMappingURL=sprint-repository.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sprint-repository.js","sourceRoot":"","sources":["../../../src/infrastructure/kanban/sprint-repository.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import type { FileDiscoveryPort, ProjectAnalysis } from "../../domain/rag/repositories.js";
|
|
2
|
+
/**
|
|
3
|
+
* Node.js file system implementation of FileDiscoveryPort.
|
|
4
|
+
*
|
|
5
|
+
* Walks directories recursively, applying:
|
|
6
|
+
* 1. SKIP_DIRECTORIES (hardcoded domain list)
|
|
7
|
+
* 2. BINARY_EXTENSIONS (hardcoded domain list)
|
|
8
|
+
* 3. .ragignore patterns (if file exists in root)
|
|
9
|
+
* 4. Size limit filtering (files > 1MB skipped)
|
|
10
|
+
*/
|
|
11
|
+
export declare class FileSystemDiscovery implements FileDiscoveryPort {
|
|
12
|
+
private static readonly MAX_FILE_SIZE;
|
|
13
|
+
discover(directory: string): Promise<ProjectAnalysis>;
|
|
14
|
+
readFile(absolutePath: string): Promise<string | null>;
|
|
15
|
+
createRagignore(directory: string, projectType: string): Promise<void>;
|
|
16
|
+
private loadRagignoreRules;
|
|
17
|
+
private walkDirectory;
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=file-discovery.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"file-discovery.d.ts","sourceRoot":"","sources":["../../../src/infrastructure/rag/file-discovery.ts"],"names":[],"mappings":"AAaA,OAAO,KAAK,EACV,iBAAiB,EAEjB,eAAe,EAChB,MAAM,kCAAkC,CAAC;AA8D1C;;;;;;;;GAQG;AACH,qBAAa,mBAAoB,YAAW,iBAAiB;IAC3D,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,aAAa,CAAa;IAE5C,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC;IA6CrD,QAAQ,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAQtD,eAAe,CAAC,SAAS,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;YA6B9D,kBAAkB;YAYlB,aAAa;CAsE5B"}
|
|
@@ -0,0 +1,201 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* RAG Infrastructure — File System Discovery
|
|
3
|
+
*
|
|
4
|
+
* Implements FileDiscoveryPort using Node.js fs operations.
|
|
5
|
+
* Discovers indexable files, applies .ragignore patterns,
|
|
6
|
+
* filters binaries and skip directories.
|
|
7
|
+
*
|
|
8
|
+
* SOLID: SRP — file discovery and filtering only
|
|
9
|
+
* SOLID: DIP — implements domain FileDiscoveryPort interface
|
|
10
|
+
* DDD: Infrastructure adapter for file system access
|
|
11
|
+
*/
|
|
12
|
+
import { readdir, readFile, stat, writeFile, access } from "node:fs/promises";
|
|
13
|
+
import { join, relative, extname } from "node:path";
|
|
14
|
+
import { BINARY_EXTENSIONS, SKIP_DIRECTORIES, } from "../../domain/rag/value-objects.js";
|
|
15
|
+
import { detectProjectType, UNIVERSAL_RAGIGNORE, PROJECT_RAGIGNORE, } from "../../domain/rag/services.js";
|
|
16
|
+
function parseRagignoreRules(patterns) {
|
|
17
|
+
return patterns
|
|
18
|
+
.filter((p) => p.trim().length > 0 && !p.startsWith("#"))
|
|
19
|
+
.map((pattern) => {
|
|
20
|
+
const trimmed = pattern.trim();
|
|
21
|
+
const isDirectory = trimmed.endsWith("/");
|
|
22
|
+
const isGlob = trimmed.startsWith("*.");
|
|
23
|
+
const extension = isGlob ? trimmed.slice(1) : "";
|
|
24
|
+
return { pattern: trimmed, isDirectory, isGlob, extension };
|
|
25
|
+
});
|
|
26
|
+
}
|
|
27
|
+
function isExcludedByRules(relativePath, fileName, isDir, rules) {
|
|
28
|
+
for (const rule of rules) {
|
|
29
|
+
if (rule.isDirectory) {
|
|
30
|
+
const dirName = rule.pattern.slice(0, -1);
|
|
31
|
+
if (isDir && fileName === dirName)
|
|
32
|
+
return true;
|
|
33
|
+
if (relativePath.includes(`/${dirName}/`) || relativePath.startsWith(`${dirName}/`)) {
|
|
34
|
+
return true;
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
else if (rule.isGlob) {
|
|
38
|
+
if (fileName.endsWith(rule.extension))
|
|
39
|
+
return true;
|
|
40
|
+
}
|
|
41
|
+
else {
|
|
42
|
+
if (fileName === rule.pattern)
|
|
43
|
+
return true;
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
return false;
|
|
47
|
+
}
|
|
48
|
+
// ── Implementation ────────────────────────────────────────────────────
|
|
49
|
+
/**
|
|
50
|
+
* Node.js file system implementation of FileDiscoveryPort.
|
|
51
|
+
*
|
|
52
|
+
* Walks directories recursively, applying:
|
|
53
|
+
* 1. SKIP_DIRECTORIES (hardcoded domain list)
|
|
54
|
+
* 2. BINARY_EXTENSIONS (hardcoded domain list)
|
|
55
|
+
* 3. .ragignore patterns (if file exists in root)
|
|
56
|
+
* 4. Size limit filtering (files > 1MB skipped)
|
|
57
|
+
*/
|
|
58
|
+
export class FileSystemDiscovery {
|
|
59
|
+
static MAX_FILE_SIZE = 1_048_576; // 1 MB
|
|
60
|
+
async discover(directory) {
|
|
61
|
+
const ragignoreRules = await this.loadRagignoreRules(directory);
|
|
62
|
+
const rootFiles = new Set();
|
|
63
|
+
const files = [];
|
|
64
|
+
let excludedCount = 0;
|
|
65
|
+
let totalSizeBytes = 0;
|
|
66
|
+
// Collect root file names for project type detection
|
|
67
|
+
try {
|
|
68
|
+
const rootEntries = await readdir(directory, { withFileTypes: true });
|
|
69
|
+
for (const entry of rootEntries) {
|
|
70
|
+
if (entry.isFile()) {
|
|
71
|
+
rootFiles.add(entry.name);
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
catch {
|
|
76
|
+
// Directory unreadable
|
|
77
|
+
}
|
|
78
|
+
const projectType = detectProjectType(rootFiles);
|
|
79
|
+
// Recursive walk
|
|
80
|
+
const walkResult = await this.walkDirectory(directory, directory, ragignoreRules);
|
|
81
|
+
for (const result of walkResult) {
|
|
82
|
+
if (result.excluded) {
|
|
83
|
+
excludedCount++;
|
|
84
|
+
}
|
|
85
|
+
else {
|
|
86
|
+
files.push(result.file);
|
|
87
|
+
totalSizeBytes += result.file.sizeBytes;
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
return {
|
|
91
|
+
projectType,
|
|
92
|
+
files,
|
|
93
|
+
excludedCount,
|
|
94
|
+
totalSizeMb: Math.round((totalSizeBytes / 1_048_576) * 100) / 100,
|
|
95
|
+
};
|
|
96
|
+
}
|
|
97
|
+
async readFile(absolutePath) {
|
|
98
|
+
try {
|
|
99
|
+
return await readFile(absolutePath, "utf-8");
|
|
100
|
+
}
|
|
101
|
+
catch {
|
|
102
|
+
return null;
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
async createRagignore(directory, projectType) {
|
|
106
|
+
const ragignorePath = join(directory, ".ragignore");
|
|
107
|
+
// Don't overwrite existing .ragignore
|
|
108
|
+
try {
|
|
109
|
+
await access(ragignorePath);
|
|
110
|
+
return; // File already exists
|
|
111
|
+
}
|
|
112
|
+
catch {
|
|
113
|
+
// File doesn't exist, continue
|
|
114
|
+
}
|
|
115
|
+
const lines = [
|
|
116
|
+
"# RAG Indexing Ignore File",
|
|
117
|
+
"# Patterns follow .gitignore-like syntax",
|
|
118
|
+
"",
|
|
119
|
+
"# Universal patterns",
|
|
120
|
+
...UNIVERSAL_RAGIGNORE,
|
|
121
|
+
];
|
|
122
|
+
const projectPatterns = PROJECT_RAGIGNORE.get(projectType);
|
|
123
|
+
if (projectPatterns !== undefined) {
|
|
124
|
+
lines.push("", `# ${projectType}-specific patterns`, ...projectPatterns);
|
|
125
|
+
}
|
|
126
|
+
await writeFile(ragignorePath, lines.join("\n") + "\n", "utf-8");
|
|
127
|
+
}
|
|
128
|
+
// ── Private Helpers ───────────────────────────────────────────
|
|
129
|
+
async loadRagignoreRules(directory) {
|
|
130
|
+
const ragignorePath = join(directory, ".ragignore");
|
|
131
|
+
try {
|
|
132
|
+
const content = await readFile(ragignorePath, "utf-8");
|
|
133
|
+
return parseRagignoreRules(content.split("\n"));
|
|
134
|
+
}
|
|
135
|
+
catch {
|
|
136
|
+
return [];
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
async walkDirectory(rootDir, currentDir, rules) {
|
|
140
|
+
const results = [];
|
|
141
|
+
let entries;
|
|
142
|
+
try {
|
|
143
|
+
entries = await readdir(currentDir, { withFileTypes: true });
|
|
144
|
+
}
|
|
145
|
+
catch {
|
|
146
|
+
return results;
|
|
147
|
+
}
|
|
148
|
+
for (const entry of entries) {
|
|
149
|
+
const absolutePath = join(currentDir, entry.name);
|
|
150
|
+
const relPath = relative(rootDir, absolutePath);
|
|
151
|
+
if (entry.isDirectory()) {
|
|
152
|
+
// Skip known directories
|
|
153
|
+
if (SKIP_DIRECTORIES.has(entry.name)) {
|
|
154
|
+
continue;
|
|
155
|
+
}
|
|
156
|
+
// Skip ragignore-excluded directories
|
|
157
|
+
if (isExcludedByRules(relPath, entry.name, true, rules)) {
|
|
158
|
+
continue;
|
|
159
|
+
}
|
|
160
|
+
// Recurse
|
|
161
|
+
const subResults = await this.walkDirectory(rootDir, absolutePath, rules);
|
|
162
|
+
results.push(...subResults);
|
|
163
|
+
}
|
|
164
|
+
else if (entry.isFile()) {
|
|
165
|
+
const ext = extname(entry.name).toLowerCase();
|
|
166
|
+
// Skip binary extensions
|
|
167
|
+
if (BINARY_EXTENSIONS.has(ext)) {
|
|
168
|
+
results.push({ excluded: true, file: null });
|
|
169
|
+
continue;
|
|
170
|
+
}
|
|
171
|
+
// Skip ragignore-excluded files
|
|
172
|
+
if (isExcludedByRules(relPath, entry.name, false, rules)) {
|
|
173
|
+
results.push({ excluded: true, file: null });
|
|
174
|
+
continue;
|
|
175
|
+
}
|
|
176
|
+
// Get file stats for size check
|
|
177
|
+
try {
|
|
178
|
+
const fileStat = await stat(absolutePath);
|
|
179
|
+
if (fileStat.size > FileSystemDiscovery.MAX_FILE_SIZE) {
|
|
180
|
+
results.push({ excluded: true, file: null });
|
|
181
|
+
continue;
|
|
182
|
+
}
|
|
183
|
+
results.push({
|
|
184
|
+
excluded: false,
|
|
185
|
+
file: {
|
|
186
|
+
absolutePath,
|
|
187
|
+
relativePath: relPath,
|
|
188
|
+
extension: ext,
|
|
189
|
+
sizeBytes: fileStat.size,
|
|
190
|
+
},
|
|
191
|
+
});
|
|
192
|
+
}
|
|
193
|
+
catch {
|
|
194
|
+
results.push({ excluded: true, file: null });
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
return results;
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
//# sourceMappingURL=file-discovery.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"file-discovery.js","sourceRoot":"","sources":["../../../src/infrastructure/rag/file-discovery.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { EmbeddingProvider } from "../../domain/rag/repositories.js";
|
|
2
|
+
/**
|
|
3
|
+
* Ollama-backed implementation of the EmbeddingProvider port.
|
|
4
|
+
*
|
|
5
|
+
* Uses the `embed` endpoint (not the deprecated `embeddings`).
|
|
6
|
+
* The `embed` endpoint supports batch input: `input: string | string[]`.
|
|
7
|
+
*
|
|
8
|
+
* Default model: `embeddinggemma` (768 dimensions).
|
|
9
|
+
*/
|
|
10
|
+
export declare class OllamaEmbeddingProvider implements EmbeddingProvider {
|
|
11
|
+
private readonly model;
|
|
12
|
+
private readonly client;
|
|
13
|
+
readonly dimensions: number;
|
|
14
|
+
constructor(ollamaUrl: string, model: string, dimensions: number);
|
|
15
|
+
embed(text: string): Promise<readonly number[]>;
|
|
16
|
+
embedBatch(texts: readonly string[]): Promise<readonly (readonly number[])[]>;
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=ollama-embeddings.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ollama-embeddings.d.ts","sourceRoot":"","sources":["../../../src/infrastructure/rag/ollama-embeddings.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,kCAAkC,CAAC;AAE1E;;;;;;;GAOG;AACH,qBAAa,uBAAwB,YAAW,iBAAiB;IAO7D,OAAO,CAAC,QAAQ,CAAC,KAAK;IANxB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAEhC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;gBAG1B,SAAS,EAAE,MAAM,EACA,KAAK,EAAE,MAAM,EAC9B,UAAU,EAAE,MAAM;IAMd,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,MAAM,EAAE,CAAC;IAgB/C,UAAU,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,GAAG,OAAO,CAAC,SAAS,CAAC,SAAS,MAAM,EAAE,CAAC,EAAE,CAAC;CAiBpF"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* RAG Infrastructure — Ollama Embedding Provider
|
|
3
|
+
*
|
|
4
|
+
* Implements EmbeddingProvider using the official Ollama JS client.
|
|
5
|
+
* Wraps ollama.embed() for single and batch embedding generation.
|
|
6
|
+
*
|
|
7
|
+
* SOLID: SRP — embedding generation only
|
|
8
|
+
* SOLID: DIP — implements domain EmbeddingProvider interface
|
|
9
|
+
* DDD: Infrastructure adapter for external service (Ollama)
|
|
10
|
+
*/
|
|
11
|
+
import { Ollama } from "ollama";
|
|
12
|
+
/**
|
|
13
|
+
* Ollama-backed implementation of the EmbeddingProvider port.
|
|
14
|
+
*
|
|
15
|
+
* Uses the `embed` endpoint (not the deprecated `embeddings`).
|
|
16
|
+
* The `embed` endpoint supports batch input: `input: string | string[]`.
|
|
17
|
+
*
|
|
18
|
+
* Default model: `embeddinggemma` (768 dimensions).
|
|
19
|
+
*/
|
|
20
|
+
export class OllamaEmbeddingProvider {
|
|
21
|
+
model;
|
|
22
|
+
client;
|
|
23
|
+
dimensions;
|
|
24
|
+
constructor(ollamaUrl, model, dimensions) {
|
|
25
|
+
this.model = model;
|
|
26
|
+
this.client = new Ollama({ host: ollamaUrl });
|
|
27
|
+
this.dimensions = dimensions;
|
|
28
|
+
}
|
|
29
|
+
async embed(text) {
|
|
30
|
+
const response = await this.client.embed({
|
|
31
|
+
model: this.model,
|
|
32
|
+
input: text,
|
|
33
|
+
});
|
|
34
|
+
const vector = response.embeddings[0];
|
|
35
|
+
if (vector === undefined) {
|
|
36
|
+
throw new Error(`OllamaEmbeddingProvider: embed returned no vectors for model "${this.model}"`);
|
|
37
|
+
}
|
|
38
|
+
return vector;
|
|
39
|
+
}
|
|
40
|
+
async embedBatch(texts) {
|
|
41
|
+
if (texts.length === 0)
|
|
42
|
+
return [];
|
|
43
|
+
const response = await this.client.embed({
|
|
44
|
+
model: this.model,
|
|
45
|
+
input: [...texts],
|
|
46
|
+
});
|
|
47
|
+
if (response.embeddings.length !== texts.length) {
|
|
48
|
+
throw new Error(`OllamaEmbeddingProvider: expected ${texts.length} embeddings, ` +
|
|
49
|
+
`got ${response.embeddings.length}`);
|
|
50
|
+
}
|
|
51
|
+
return response.embeddings;
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
//# sourceMappingURL=ollama-embeddings.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ollama-embeddings.js","sourceRoot":"","sources":["../../../src/infrastructure/rag/ollama-embeddings.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAGhC;;;;;;;GAOG;AACH,MAAM,OAAO,uBAAuB;IAOf;IANF,MAAM,CAAS;IAEvB,UAAU,CAAS;IAE5B,YACE,SAAiB,EACA,KAAa,EAC9B,UAAkB;QADD,UAAK,GAAL,KAAK,CAAQ;QAG9B,IAAI,CAAC,MAAM,GAAG,IAAI,MAAM,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC;QAC9C,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;IAC/B,CAAC;IAED,KAAK,CAAC,KAAK,CAAC,IAAY;QACtB,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC;YACvC,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,KAAK,EAAE,IAAI;SACZ,CAAC,CAAC;QAEH,MAAM,MAAM,GAAG,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;QACtC,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;YACzB,MAAM,IAAI,KAAK,CACb,iEAAiE,IAAI,CAAC,KAAK,GAAG,CAC/E,CAAC;QACJ,CAAC;QAED,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,KAAwB;QACvC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,EAAE,CAAC;QAElC,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC;YACvC,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,KAAK,EAAE,CAAC,GAAG,KAAK,CAAC;SAClB,CAAC,CAAC;QAEH,IAAI,QAAQ,CAAC,UAAU,CAAC,MAAM,KAAK,KAAK,CAAC,MAAM,EAAE,CAAC;YAChD,MAAM,IAAI,KAAK,CACb,qCAAqC,KAAK,CAAC,MAAM,eAAe;gBAChE,OAAO,QAAQ,CAAC,UAAU,CAAC,MAAM,EAAE,CACpC,CAAC;QACJ,CAAC;QAED,OAAO,QAAQ,CAAC,UAAU,CAAC;IAC7B,CAAC;CACF"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import type { TextSplitterPort, TextChunk } from "../../domain/rag/repositories.js";
|
|
2
|
+
import type { ChunkConfig, SupportedLanguage } from "../../domain/rag/value-objects.js";
|
|
3
|
+
/**
|
|
4
|
+
* @langchain/textsplitters-backed implementation of the TextSplitterPort.
|
|
5
|
+
*
|
|
6
|
+
* Uses RecursiveCharacterTextSplitter.fromLanguage() for code-aware
|
|
7
|
+
* splitting, and delegates markdown header splitting to the domain
|
|
8
|
+
* service splitMarkdownByHeaders().
|
|
9
|
+
*/
|
|
10
|
+
export declare class LangchainTextSplitter implements TextSplitterPort {
|
|
11
|
+
split(text: string, language: SupportedLanguage | undefined, config: ChunkConfig): Promise<readonly TextChunk[]>;
|
|
12
|
+
splitByHeaders(text: string): readonly {
|
|
13
|
+
readonly content: string;
|
|
14
|
+
readonly header1: string;
|
|
15
|
+
readonly header2: string;
|
|
16
|
+
readonly header3: string;
|
|
17
|
+
}[];
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=text-splitter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"text-splitter.d.ts","sourceRoot":"","sources":["../../../src/infrastructure/rag/text-splitter.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,gBAAgB,EAAE,SAAS,EAAE,MAAM,kCAAkC,CAAC;AACpF,OAAO,KAAK,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,mCAAmC,CAAC;AAGxF;;;;;;GAMG;AACH,qBAAa,qBAAsB,YAAW,gBAAgB;IACtD,KAAK,CACT,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,iBAAiB,GAAG,SAAS,EACvC,MAAM,EAAE,WAAW,GAClB,OAAO,CAAC,SAAS,SAAS,EAAE,CAAC;IAmBhC,cAAc,CACZ,IAAI,EAAE,MAAM,GACX,SAAS;QACV,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;QACzB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;QACzB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;QACzB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;KAC1B,EAAE;CAGJ"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* RAG Infrastructure — LangChain Text Splitter Adapter
|
|
3
|
+
*
|
|
4
|
+
* Implements TextSplitterPort using @langchain/textsplitters.
|
|
5
|
+
* Provides language-aware code splitting and markdown header splitting.
|
|
6
|
+
*
|
|
7
|
+
* SOLID: SRP — text splitting only
|
|
8
|
+
* SOLID: DIP — implements domain TextSplitterPort interface
|
|
9
|
+
* DDD: Infrastructure adapter for text processing library
|
|
10
|
+
*/
|
|
11
|
+
import { RecursiveCharacterTextSplitter } from "@langchain/textsplitters";
|
|
12
|
+
import { splitMarkdownByHeaders } from "../../domain/rag/services.js";
|
|
13
|
+
/**
|
|
14
|
+
* @langchain/textsplitters-backed implementation of the TextSplitterPort.
|
|
15
|
+
*
|
|
16
|
+
* Uses RecursiveCharacterTextSplitter.fromLanguage() for code-aware
|
|
17
|
+
* splitting, and delegates markdown header splitting to the domain
|
|
18
|
+
* service splitMarkdownByHeaders().
|
|
19
|
+
*/
|
|
20
|
+
export class LangchainTextSplitter {
|
|
21
|
+
async split(text, language, config) {
|
|
22
|
+
const splitter = language !== undefined
|
|
23
|
+
? RecursiveCharacterTextSplitter.fromLanguage(language, { chunkSize: config.chunkSize, chunkOverlap: config.chunkOverlap })
|
|
24
|
+
: new RecursiveCharacterTextSplitter({
|
|
25
|
+
chunkSize: config.chunkSize,
|
|
26
|
+
chunkOverlap: config.chunkOverlap,
|
|
27
|
+
});
|
|
28
|
+
const rawChunks = await splitter.splitText(text);
|
|
29
|
+
return rawChunks.map((content, index) => ({
|
|
30
|
+
content,
|
|
31
|
+
index,
|
|
32
|
+
}));
|
|
33
|
+
}
|
|
34
|
+
splitByHeaders(text) {
|
|
35
|
+
return splitMarkdownByHeaders(text);
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
//# sourceMappingURL=text-splitter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"text-splitter.js","sourceRoot":"","sources":["../../../src/infrastructure/rag/text-splitter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,OAAO,EAAE,8BAA8B,EAAE,MAAM,0BAA0B,CAAC;AAI1E,OAAO,EAAE,sBAAsB,EAAE,MAAM,8BAA8B,CAAC;AAEtE;;;;;;GAMG;AACH,MAAM,OAAO,qBAAqB;IAChC,KAAK,CAAC,KAAK,CACT,IAAY,EACZ,QAAuC,EACvC,MAAmB;QAEnB,MAAM,QAAQ,GAAG,QAAQ,KAAK,SAAS;YACrC,CAAC,CAAC,8BAA8B,CAAC,YAAY,CACzC,QAAyC,EACzC,EAAE,SAAS,EAAE,MAAM,CAAC,SAAS,EAAE,YAAY,EAAE,MAAM,CAAC,YAAY,EAAE,CACnE;YACH,CAAC,CAAC,IAAI,8BAA8B,CAAC;gBACjC,SAAS,EAAE,MAAM,CAAC,SAAS;gBAC3B,YAAY,EAAE,MAAM,CAAC,YAAY;aAClC,CAAC,CAAC;QAEP,MAAM,SAAS,GAAG,MAAM,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QAEjD,OAAO,SAAS,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC;YACxC,OAAO;YACP,KAAK;SACN,CAAC,CAAC,CAAC;IACN,CAAC;IAED,cAAc,CACZ,IAAY;QAOZ,OAAO,sBAAsB,CAAC,IAAI,CAAC,CAAC;IACtC,CAAC;CACF"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import type { VectorRepository, SearchOptions, OracleSearchOptions } from "../../domain/rag/repositories.js";
|
|
2
|
+
import type { ChunkMetadata, OracleChunkMetadata, SearchResult, OracleSearchResult, IndexStats } from "../../domain/rag/value-objects.js";
|
|
3
|
+
/**
|
|
4
|
+
* Vectra-backed implementation of the VectorRepository port.
|
|
5
|
+
*
|
|
6
|
+
* Index layout on disk:
|
|
7
|
+
* {persistRoot}/{workspace}/ → workspace index
|
|
8
|
+
* {persistRoot}/ORACLE/ → shared Oracle index
|
|
9
|
+
*/
|
|
10
|
+
export declare class VectraVectorRepository implements VectorRepository {
|
|
11
|
+
private readonly persistRoot;
|
|
12
|
+
private readonly embeddingModel;
|
|
13
|
+
private readonly indexes;
|
|
14
|
+
private oracleIndex;
|
|
15
|
+
constructor(persistRoot: string, embeddingModel: string);
|
|
16
|
+
private getIndex;
|
|
17
|
+
private getOracleIndex;
|
|
18
|
+
private buildWorkspaceFilter;
|
|
19
|
+
ensureIndex(workspace: string): Promise<void>;
|
|
20
|
+
addChunks(workspace: string, chunks: readonly {
|
|
21
|
+
readonly vector: readonly number[];
|
|
22
|
+
readonly metadata: ChunkMetadata;
|
|
23
|
+
}[]): Promise<void>;
|
|
24
|
+
deleteBySource(workspace: string, source: string): Promise<number>;
|
|
25
|
+
search(vector: readonly number[], options: SearchOptions): Promise<readonly SearchResult[]>;
|
|
26
|
+
getStats(workspace: string): Promise<IndexStats>;
|
|
27
|
+
clearIndex(workspace: string): Promise<void>;
|
|
28
|
+
ensureOracleIndex(): Promise<void>;
|
|
29
|
+
addOracleChunks(chunks: readonly {
|
|
30
|
+
readonly vector: readonly number[];
|
|
31
|
+
readonly metadata: OracleChunkMetadata;
|
|
32
|
+
}[]): Promise<void>;
|
|
33
|
+
searchOracle(vector: readonly number[], options: OracleSearchOptions): Promise<readonly OracleSearchResult[]>;
|
|
34
|
+
getOracleStats(): Promise<IndexStats>;
|
|
35
|
+
clearOracleIndex(): Promise<void>;
|
|
36
|
+
oracleIndexExists(): Promise<boolean>;
|
|
37
|
+
}
|
|
38
|
+
//# sourceMappingURL=vectra-adapter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vectra-adapter.d.ts","sourceRoot":"","sources":["../../../src/infrastructure/rag/vectra-adapter.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EACV,gBAAgB,EAChB,aAAa,EACb,mBAAmB,EACpB,MAAM,kCAAkC,CAAC;AAC1C,OAAO,KAAK,EACV,aAAa,EACb,mBAAmB,EACnB,YAAY,EACZ,kBAAkB,EAClB,UAAU,EACX,MAAM,mCAAmC,CAAC;AAyC3C;;;;;;GAMG;AACH,qBAAa,sBAAuB,YAAW,gBAAgB;IAK3D,OAAO,CAAC,QAAQ,CAAC,WAAW;IAC5B,OAAO,CAAC,QAAQ,CAAC,cAAc;IALjC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAsD;IAC9E,OAAO,CAAC,WAAW,CAA+C;gBAG/C,WAAW,EAAE,MAAM,EACnB,cAAc,EAAE,MAAM;IAKzC,OAAO,CAAC,QAAQ;IAWhB,OAAO,CAAC,cAAc;IAQtB,OAAO,CAAC,oBAAoB;IAoBtB,WAAW,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAW7C,SAAS,CACb,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,SAAS;QACf,QAAQ,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC;QACnC,QAAQ,CAAC,QAAQ,EAAE,aAAa,CAAC;KAClC,EAAE,GACF,OAAO,CAAC,IAAI,CAAC;IA6BV,cAAc,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAqBlE,MAAM,CACV,MAAM,EAAE,SAAS,MAAM,EAAE,EACzB,OAAO,EAAE,aAAa,GACrB,OAAO,CAAC,SAAS,YAAY,EAAE,CAAC;IA2B7B,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC;IAqBhD,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAc5C,iBAAiB,IAAI,OAAO,CAAC,IAAI,CAAC;IAWlC,eAAe,CACnB,MAAM,EAAE,SAAS;QACf,QAAQ,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC;QACnC,QAAQ,CAAC,QAAQ,EAAE,mBAAmB,CAAC;KACxC,EAAE,GACF,OAAO,CAAC,IAAI,CAAC;IA4BV,YAAY,CAChB,MAAM,EAAE,SAAS,MAAM,EAAE,EACzB,OAAO,EAAE,mBAAmB,GAC3B,OAAO,CAAC,SAAS,kBAAkB,EAAE,CAAC;IA4BnC,cAAc,IAAI,OAAO,CAAC,UAAU,CAAC;IAqBrC,gBAAgB,IAAI,OAAO,CAAC,IAAI,CAAC;IAYjC,iBAAiB,IAAI,OAAO,CAAC,OAAO,CAAC;CAQ5C"}
|