@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,235 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Workspace Registry - Value Objects
|
|
3
|
+
*
|
|
4
|
+
* Immutable value objects for the workspace registry bounded context.
|
|
5
|
+
* Defines project metadata, dependencies, and configuration types.
|
|
6
|
+
*
|
|
7
|
+
* DDD: Value Objects (no identity, compared by value)
|
|
8
|
+
* SOLID: SRP - value definitions and validation only
|
|
9
|
+
*/
|
|
10
|
+
import { WorkspaceId, Timestamp } from "../shared/value-objects.js";
|
|
11
|
+
// ── Project Directory ────────────────────────────────────────────────
|
|
12
|
+
/** Validated absolute filesystem path to a project root. */
|
|
13
|
+
export class ProjectDirectory {
|
|
14
|
+
value;
|
|
15
|
+
constructor(value) {
|
|
16
|
+
this.value = value;
|
|
17
|
+
}
|
|
18
|
+
static create(path) {
|
|
19
|
+
const trimmed = path.trim();
|
|
20
|
+
if (trimmed.length === 0) {
|
|
21
|
+
throw new Error("ProjectDirectory: path cannot be empty");
|
|
22
|
+
}
|
|
23
|
+
if (!trimmed.startsWith("/") && !trimmed.match(/^[A-Z]:\\/i)) {
|
|
24
|
+
throw new Error(`ProjectDirectory: path must be absolute, got "${trimmed}"`);
|
|
25
|
+
}
|
|
26
|
+
// Normalize trailing slash
|
|
27
|
+
const normalized = trimmed.endsWith("/") ? trimmed.slice(0, -1) : trimmed;
|
|
28
|
+
return new ProjectDirectory(normalized);
|
|
29
|
+
}
|
|
30
|
+
static from(value) {
|
|
31
|
+
return new ProjectDirectory(value);
|
|
32
|
+
}
|
|
33
|
+
equals(other) {
|
|
34
|
+
return this.value === other.value;
|
|
35
|
+
}
|
|
36
|
+
toString() {
|
|
37
|
+
return this.value;
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
// ── Primary Language ─────────────────────────────────────────────────
|
|
41
|
+
/**
|
|
42
|
+
* Primary programming language of a project.
|
|
43
|
+
* Uses a constrained set for consistent detection and base-image mapping.
|
|
44
|
+
*/
|
|
45
|
+
export const PRIMARY_LANGUAGES = [
|
|
46
|
+
"typescript",
|
|
47
|
+
"javascript",
|
|
48
|
+
"python",
|
|
49
|
+
"swift",
|
|
50
|
+
"java",
|
|
51
|
+
"kotlin",
|
|
52
|
+
"csharp",
|
|
53
|
+
"go",
|
|
54
|
+
"rust",
|
|
55
|
+
"c",
|
|
56
|
+
"cpp",
|
|
57
|
+
"dart",
|
|
58
|
+
"ruby",
|
|
59
|
+
"php",
|
|
60
|
+
"elixir",
|
|
61
|
+
"unknown",
|
|
62
|
+
];
|
|
63
|
+
export function isValidPrimaryLanguage(value) {
|
|
64
|
+
return PRIMARY_LANGUAGES.includes(value);
|
|
65
|
+
}
|
|
66
|
+
export function parsePrimaryLanguage(value) {
|
|
67
|
+
const lower = value.toLowerCase().trim();
|
|
68
|
+
if (isValidPrimaryLanguage(lower)) {
|
|
69
|
+
return lower;
|
|
70
|
+
}
|
|
71
|
+
// Common aliases
|
|
72
|
+
const aliases = {
|
|
73
|
+
ts: "typescript",
|
|
74
|
+
js: "javascript",
|
|
75
|
+
py: "python",
|
|
76
|
+
cs: "csharp",
|
|
77
|
+
"c#": "csharp",
|
|
78
|
+
".net": "csharp",
|
|
79
|
+
golang: "go",
|
|
80
|
+
"c++": "cpp",
|
|
81
|
+
"objective-c": "c",
|
|
82
|
+
objc: "c",
|
|
83
|
+
flutter: "dart",
|
|
84
|
+
swiftui: "swift",
|
|
85
|
+
};
|
|
86
|
+
return aliases[lower] ?? "unknown";
|
|
87
|
+
}
|
|
88
|
+
// ── Tech Stack ───────────────────────────────────────────────────────
|
|
89
|
+
/**
|
|
90
|
+
* A single technology in the project stack.
|
|
91
|
+
* Normalized to lowercase, trimmed.
|
|
92
|
+
*/
|
|
93
|
+
export class TechStackItem {
|
|
94
|
+
value;
|
|
95
|
+
constructor(value) {
|
|
96
|
+
this.value = value;
|
|
97
|
+
}
|
|
98
|
+
static create(name) {
|
|
99
|
+
const trimmed = name.trim().toLowerCase();
|
|
100
|
+
if (trimmed.length === 0) {
|
|
101
|
+
throw new Error("TechStackItem: name cannot be empty");
|
|
102
|
+
}
|
|
103
|
+
return new TechStackItem(trimmed);
|
|
104
|
+
}
|
|
105
|
+
static from(value) {
|
|
106
|
+
return new TechStackItem(value);
|
|
107
|
+
}
|
|
108
|
+
equals(other) {
|
|
109
|
+
return this.value === other.value;
|
|
110
|
+
}
|
|
111
|
+
toString() {
|
|
112
|
+
return this.value;
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
/** Immutable ordered collection of tech stack items. */
|
|
116
|
+
export class TechStack {
|
|
117
|
+
items;
|
|
118
|
+
constructor(items) {
|
|
119
|
+
this.items = items;
|
|
120
|
+
}
|
|
121
|
+
static create(names) {
|
|
122
|
+
const items = names.map((n) => TechStackItem.create(n));
|
|
123
|
+
// Deduplicate by value
|
|
124
|
+
const seen = new Set();
|
|
125
|
+
const unique = [];
|
|
126
|
+
for (const item of items) {
|
|
127
|
+
if (!seen.has(item.value)) {
|
|
128
|
+
seen.add(item.value);
|
|
129
|
+
unique.push(item);
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
return new TechStack(unique);
|
|
133
|
+
}
|
|
134
|
+
static empty() {
|
|
135
|
+
return new TechStack([]);
|
|
136
|
+
}
|
|
137
|
+
static fromItems(items) {
|
|
138
|
+
return new TechStack(items);
|
|
139
|
+
}
|
|
140
|
+
get size() {
|
|
141
|
+
return this.items.length;
|
|
142
|
+
}
|
|
143
|
+
get isEmpty() {
|
|
144
|
+
return this.items.length === 0;
|
|
145
|
+
}
|
|
146
|
+
has(name) {
|
|
147
|
+
const normalized = name.trim().toLowerCase();
|
|
148
|
+
return this.items.some((item) => item.value === normalized);
|
|
149
|
+
}
|
|
150
|
+
add(name) {
|
|
151
|
+
if (this.has(name)) {
|
|
152
|
+
return this;
|
|
153
|
+
}
|
|
154
|
+
return new TechStack([...this.items, TechStackItem.create(name)]);
|
|
155
|
+
}
|
|
156
|
+
remove(name) {
|
|
157
|
+
const normalized = name.trim().toLowerCase();
|
|
158
|
+
const filtered = this.items.filter((item) => item.value !== normalized);
|
|
159
|
+
if (filtered.length === this.items.length) {
|
|
160
|
+
return this;
|
|
161
|
+
}
|
|
162
|
+
return new TechStack(filtered);
|
|
163
|
+
}
|
|
164
|
+
toArray() {
|
|
165
|
+
return this.items.map((item) => item.value);
|
|
166
|
+
}
|
|
167
|
+
toJSON() {
|
|
168
|
+
return JSON.stringify(this.toArray());
|
|
169
|
+
}
|
|
170
|
+
static fromJSON(json) {
|
|
171
|
+
const parsed = JSON.parse(json);
|
|
172
|
+
if (!Array.isArray(parsed)) {
|
|
173
|
+
throw new Error("TechStack.fromJSON: expected JSON array");
|
|
174
|
+
}
|
|
175
|
+
return TechStack.create(parsed);
|
|
176
|
+
}
|
|
177
|
+
equals(other) {
|
|
178
|
+
if (this.items.length !== other.items.length) {
|
|
179
|
+
return false;
|
|
180
|
+
}
|
|
181
|
+
return this.items.every((item, i) => {
|
|
182
|
+
const otherItem = other.items[i];
|
|
183
|
+
return otherItem !== undefined && item.equals(otherItem);
|
|
184
|
+
});
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
// ── Workspace Dependency ─────────────────────────────────────────────
|
|
188
|
+
/** Classification of dependency between workspaces. */
|
|
189
|
+
export const DEPENDENCY_TYPES = [
|
|
190
|
+
"api-consumer",
|
|
191
|
+
"api-provider",
|
|
192
|
+
"shared-lib",
|
|
193
|
+
"monorepo-package",
|
|
194
|
+
"data-source",
|
|
195
|
+
"deployment-target",
|
|
196
|
+
"other",
|
|
197
|
+
];
|
|
198
|
+
export function isValidDependencyType(value) {
|
|
199
|
+
return DEPENDENCY_TYPES.includes(value);
|
|
200
|
+
}
|
|
201
|
+
export function createWorkspaceDependency(params) {
|
|
202
|
+
if (params.sourceId.equals(params.targetId)) {
|
|
203
|
+
throw new Error("WorkspaceDependency: source and target cannot be the same workspace");
|
|
204
|
+
}
|
|
205
|
+
return {
|
|
206
|
+
sourceId: params.sourceId,
|
|
207
|
+
targetId: params.targetId,
|
|
208
|
+
dependencyType: params.dependencyType,
|
|
209
|
+
...(params.description !== undefined
|
|
210
|
+
? { description: params.description }
|
|
211
|
+
: { description: undefined }),
|
|
212
|
+
};
|
|
213
|
+
}
|
|
214
|
+
// ── Workspace Status ─────────────────────────────────────────────────
|
|
215
|
+
export const WORKSPACE_STATUSES = ["active", "archived", "template"];
|
|
216
|
+
export function isValidWorkspaceStatus(value) {
|
|
217
|
+
return WORKSPACE_STATUSES.includes(value);
|
|
218
|
+
}
|
|
219
|
+
// ── Jarvis Home Configuration ────────────────────────────────────────
|
|
220
|
+
/**
|
|
221
|
+
* Resolves the JARVIS_HOME directory.
|
|
222
|
+
* Defaults to ~/.jarvis, overridable via JARVIS_HOME env var.
|
|
223
|
+
*/
|
|
224
|
+
export function resolveJarvisHome() {
|
|
225
|
+
const envVar = process.env["JARVIS_HOME"];
|
|
226
|
+
if (envVar !== undefined && envVar.trim().length > 0) {
|
|
227
|
+
return envVar.trim();
|
|
228
|
+
}
|
|
229
|
+
const home = process.env["HOME"] ?? process.env["USERPROFILE"];
|
|
230
|
+
if (home === undefined) {
|
|
231
|
+
throw new Error("Cannot resolve JARVIS_HOME: neither JARVIS_HOME, HOME, nor USERPROFILE env vars are set");
|
|
232
|
+
}
|
|
233
|
+
return `${home}/.jarvis`;
|
|
234
|
+
}
|
|
235
|
+
//# sourceMappingURL=value-objects.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"value-objects.js","sourceRoot":"","sources":["../../../src/domain/workspace-registry/value-objects.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Context Compacting Hook
|
|
3
|
+
*
|
|
4
|
+
* Injects active session context into OpenCode's session compaction prompt.
|
|
5
|
+
* When the LLM context window is being compacted, this hook ensures the
|
|
6
|
+
* compacted summary retains knowledge of the active session, pending todos,
|
|
7
|
+
* and recent notes/decisions.
|
|
8
|
+
*
|
|
9
|
+
* Hook: "experimental.session.compacting"
|
|
10
|
+
* Signature: (input: { sessionID }, output: { context, prompt? }) => Promise<void>
|
|
11
|
+
*
|
|
12
|
+
* SOLID: SRP - compaction context injection only
|
|
13
|
+
* SOLID: DIP - depends on use case abstractions
|
|
14
|
+
*/
|
|
15
|
+
import type { SessionUseCases } from "../application/context-memory/session-use-cases.js";
|
|
16
|
+
import type { TodoUseCases } from "../application/context-memory/todo-use-cases.js";
|
|
17
|
+
import type { NoteUseCases } from "../application/context-memory/note-use-cases.js";
|
|
18
|
+
export interface CompactingHookDeps {
|
|
19
|
+
readonly sessionUseCases: SessionUseCases;
|
|
20
|
+
readonly todoUseCases: TodoUseCases;
|
|
21
|
+
readonly noteUseCases: NoteUseCases;
|
|
22
|
+
readonly getWorkspace: (directory: string) => string;
|
|
23
|
+
readonly directory: string;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Creates the session compacting hook.
|
|
27
|
+
* Appends context strings to help the LLM retain session awareness.
|
|
28
|
+
*/
|
|
29
|
+
export declare function createCompactingHook(deps: CompactingHookDeps): (input: {
|
|
30
|
+
sessionID: string;
|
|
31
|
+
}, output: {
|
|
32
|
+
context: string[];
|
|
33
|
+
prompt?: string;
|
|
34
|
+
}) => Promise<void>;
|
|
35
|
+
//# sourceMappingURL=context-compacting.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context-compacting.d.ts","sourceRoot":"","sources":["../../src/hooks/context-compacting.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AACH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,oDAAoD,CAAC;AAC1F,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,iDAAiD,CAAC;AACpF,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,iDAAiD,CAAC;AAEpF,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,eAAe,EAAE,eAAe,CAAC;IAC1C,QAAQ,CAAC,YAAY,EAAE,YAAY,CAAC;IACpC,QAAQ,CAAC,YAAY,EAAE,YAAY,CAAC;IACpC,QAAQ,CAAC,YAAY,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,MAAM,CAAC;IACrD,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;CAC5B;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAClC,IAAI,EAAE,kBAAkB,GACvB,CACD,KAAK,EAAE;IAAE,SAAS,EAAE,MAAM,CAAA;CAAE,EAC5B,MAAM,EAAE;IAAE,OAAO,EAAE,MAAM,EAAE,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,KAC3C,OAAO,CAAC,IAAI,CAAC,CA0DjB"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Creates the session compacting hook.
|
|
3
|
+
* Appends context strings to help the LLM retain session awareness.
|
|
4
|
+
*/
|
|
5
|
+
export function createCompactingHook(deps) {
|
|
6
|
+
return async (_input, output) => {
|
|
7
|
+
const workspace = deps.getWorkspace(deps.directory);
|
|
8
|
+
const sections = [];
|
|
9
|
+
// 1. Active session info
|
|
10
|
+
const sessionResult = await deps.sessionUseCases.getActiveSession({
|
|
11
|
+
workspace,
|
|
12
|
+
});
|
|
13
|
+
if (sessionResult.success && sessionResult.data !== null) {
|
|
14
|
+
const s = sessionResult.data;
|
|
15
|
+
sections.push(`## Active JARVIS Session\n` +
|
|
16
|
+
`- ID: ${s.id}\n` +
|
|
17
|
+
`- Purpose: ${s.purpose}\n` +
|
|
18
|
+
`- State: ${s.state}\n` +
|
|
19
|
+
`- Started: ${s.startedAt}` +
|
|
20
|
+
(s.agentName !== undefined ? `\n- Agent: ${s.agentName}` : ""));
|
|
21
|
+
}
|
|
22
|
+
// 2. Pending/in-progress todos
|
|
23
|
+
const todosResult = await deps.todoUseCases.listTodos({ workspace });
|
|
24
|
+
if (todosResult.success && todosResult.data.length > 0) {
|
|
25
|
+
const activeTodos = todosResult.data.filter((t) => t.status === "pending" || t.status === "in_progress");
|
|
26
|
+
if (activeTodos.length > 0) {
|
|
27
|
+
const todoLines = activeTodos.map((t) => `- [${t.status}] (P${t.priority}) ${t.content}` +
|
|
28
|
+
(t.tags.length > 0 ? ` [${t.tags.join(", ")}]` : ""));
|
|
29
|
+
sections.push(`## Pending TODOs\n${todoLines.join("\n")}`);
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
// 3. Recent notes (last 5)
|
|
33
|
+
const notesResult = await deps.noteUseCases.getRecentNotes({
|
|
34
|
+
workspace,
|
|
35
|
+
limit: 5,
|
|
36
|
+
});
|
|
37
|
+
if (notesResult.success && notesResult.data.length > 0) {
|
|
38
|
+
const noteLines = notesResult.data.map((n) => `- [${n.type}] ${n.content}` +
|
|
39
|
+
(n.tags.length > 0 ? ` [${n.tags.join(", ")}]` : ""));
|
|
40
|
+
sections.push(`## Recent Notes\n${noteLines.join("\n")}`);
|
|
41
|
+
}
|
|
42
|
+
// Only add context if we have something to inject
|
|
43
|
+
if (sections.length > 0) {
|
|
44
|
+
output.context.push(`# JARVIS Context Memory\n\n${sections.join("\n\n")}`);
|
|
45
|
+
}
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
//# sourceMappingURL=context-compacting.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context-compacting.js","sourceRoot":"","sources":["../../src/hooks/context-compacting.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Event Handlers Hook
|
|
3
|
+
*
|
|
4
|
+
* Subscribes to OpenCode events for cross-cutting concerns:
|
|
5
|
+
* - Logging governance violations from tool execution errors
|
|
6
|
+
* - Recording token metrics on tool.execute.after events
|
|
7
|
+
*
|
|
8
|
+
* Hook: "event"
|
|
9
|
+
* Signature: (input: { event }) => Promise<void>
|
|
10
|
+
*
|
|
11
|
+
* Events received include tool execution results, errors, and
|
|
12
|
+
* lifecycle events. This hook inspects them for governance and
|
|
13
|
+
* metrics patterns.
|
|
14
|
+
*
|
|
15
|
+
* SOLID: SRP - event processing only
|
|
16
|
+
* SOLID: OCP - new event handlers can be added without modification
|
|
17
|
+
*/
|
|
18
|
+
import type { TokenMetricsUseCases } from "../application/token-metrics/tracking-use-cases.js";
|
|
19
|
+
/** Shape of an OpenCode event (subset we care about). */
|
|
20
|
+
export interface PluginEvent {
|
|
21
|
+
readonly type: string;
|
|
22
|
+
readonly properties: Record<string, unknown>;
|
|
23
|
+
}
|
|
24
|
+
export interface EventHandlersDeps {
|
|
25
|
+
/** Called when a governance violation is detected in an event. */
|
|
26
|
+
readonly onGovernanceViolation?: (event: PluginEvent) => void;
|
|
27
|
+
/** Token metrics use cases for recording usage. */
|
|
28
|
+
readonly tokenMetricsUseCases?: TokenMetricsUseCases;
|
|
29
|
+
/** Workspace name for token tracking. */
|
|
30
|
+
readonly workspace?: string;
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Creates the event hook.
|
|
34
|
+
* Monitors for governance violations and records token metrics.
|
|
35
|
+
*/
|
|
36
|
+
export declare function createEventHook(deps: EventHandlersDeps): (input: {
|
|
37
|
+
event: PluginEvent;
|
|
38
|
+
}) => Promise<void>;
|
|
39
|
+
//# sourceMappingURL=event-handlers.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"event-handlers.d.ts","sourceRoot":"","sources":["../../src/hooks/event-handlers.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AACH,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,oDAAoD,CAAC;AAE/F,yDAAyD;AACzD,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAC9C;AAED,MAAM,WAAW,iBAAiB;IAChC,kEAAkE;IAClE,QAAQ,CAAC,qBAAqB,CAAC,EAAE,CAAC,KAAK,EAAE,WAAW,KAAK,IAAI,CAAC;IAC9D,mDAAmD;IACnD,QAAQ,CAAC,oBAAoB,CAAC,EAAE,oBAAoB,CAAC;IACrD,yCAAyC;IACzC,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;CAC7B;AAwDD;;;GAGG;AACH,wBAAgB,eAAe,CAC7B,IAAI,EAAE,iBAAiB,GACtB,CAAC,KAAK,EAAE;IAAE,KAAK,EAAE,WAAW,CAAA;CAAE,KAAK,OAAO,CAAC,IAAI,CAAC,CAuClD"}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Extract token-relevant data from event properties.
|
|
3
|
+
* OpenCode events may include tool name, input/output sizes, model, etc.
|
|
4
|
+
*/
|
|
5
|
+
function extractTokenData(properties) {
|
|
6
|
+
const toolName = typeof properties["tool"] === "string"
|
|
7
|
+
? properties["tool"]
|
|
8
|
+
: typeof properties["toolName"] === "string"
|
|
9
|
+
? properties["toolName"]
|
|
10
|
+
: undefined;
|
|
11
|
+
// Estimate tokens from input/output sizes if available
|
|
12
|
+
const inputTokens = typeof properties["inputTokens"] === "number"
|
|
13
|
+
? properties["inputTokens"]
|
|
14
|
+
: typeof properties["input_tokens"] === "number"
|
|
15
|
+
? properties["input_tokens"]
|
|
16
|
+
: 0;
|
|
17
|
+
const outputTokens = typeof properties["outputTokens"] === "number"
|
|
18
|
+
? properties["outputTokens"]
|
|
19
|
+
: typeof properties["output_tokens"] === "number"
|
|
20
|
+
? properties["output_tokens"]
|
|
21
|
+
: 0;
|
|
22
|
+
const model = typeof properties["model"] === "string"
|
|
23
|
+
? properties["model"]
|
|
24
|
+
: "unknown";
|
|
25
|
+
const agent = typeof properties["agent"] === "string"
|
|
26
|
+
? properties["agent"]
|
|
27
|
+
: "default";
|
|
28
|
+
const sessionId = typeof properties["sessionId"] === "string"
|
|
29
|
+
? properties["sessionId"]
|
|
30
|
+
: typeof properties["session_id"] === "string"
|
|
31
|
+
? properties["session_id"]
|
|
32
|
+
: undefined;
|
|
33
|
+
return { toolName, inputTokens, outputTokens, model, agent, sessionId };
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Creates the event hook.
|
|
37
|
+
* Monitors for governance violations and records token metrics.
|
|
38
|
+
*/
|
|
39
|
+
export function createEventHook(deps) {
|
|
40
|
+
return async (input) => {
|
|
41
|
+
const event = input.event;
|
|
42
|
+
if (event.type !== "tool.execute.after")
|
|
43
|
+
return;
|
|
44
|
+
// Detect governance violations in tool errors
|
|
45
|
+
const error = event.properties["error"];
|
|
46
|
+
if (typeof error === "string" &&
|
|
47
|
+
error.includes("GOVERNANCE VIOLATION")) {
|
|
48
|
+
deps.onGovernanceViolation?.(event);
|
|
49
|
+
}
|
|
50
|
+
// Record token metrics if use cases are available
|
|
51
|
+
if (deps.tokenMetricsUseCases && deps.workspace) {
|
|
52
|
+
const data = extractTokenData(event.properties);
|
|
53
|
+
// Only record if we have a tool name and some token data
|
|
54
|
+
if (data.toolName && (data.inputTokens > 0 || data.outputTokens > 0)) {
|
|
55
|
+
try {
|
|
56
|
+
await deps.tokenMetricsUseCases.recordUsage({
|
|
57
|
+
workspace: deps.workspace,
|
|
58
|
+
toolName: data.toolName,
|
|
59
|
+
agent: data.agent,
|
|
60
|
+
inputTokens: data.inputTokens,
|
|
61
|
+
outputTokens: data.outputTokens,
|
|
62
|
+
model: data.model,
|
|
63
|
+
...(data.sessionId !== undefined
|
|
64
|
+
? { sessionId: data.sessionId }
|
|
65
|
+
: {}),
|
|
66
|
+
});
|
|
67
|
+
}
|
|
68
|
+
catch {
|
|
69
|
+
// Silent failure — metrics recording should never break tool execution
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
};
|
|
74
|
+
}
|
|
75
|
+
//# sourceMappingURL=event-handlers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"event-handlers.js","sourceRoot":"","sources":["../../src/hooks/event-handlers.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Guardrails Hook
|
|
3
|
+
*
|
|
4
|
+
* Intercepts tool invocations before execution to enforce governance
|
|
5
|
+
* policies. Blocks operations that violate error-severity rules.
|
|
6
|
+
* Warnings are logged but do not block execution.
|
|
7
|
+
*
|
|
8
|
+
* Hook: "tool.execute.before"
|
|
9
|
+
* Signature: (input: { tool, args }, output: { args }) => Promise<void>
|
|
10
|
+
*
|
|
11
|
+
* On violation: throws Error to abort the tool execution.
|
|
12
|
+
* The error message includes all violations for agent feedback.
|
|
13
|
+
*
|
|
14
|
+
* SOLID: SRP - pre-execution governance enforcement only
|
|
15
|
+
* SOLID: DIP - depends on PolicyValidationService interface
|
|
16
|
+
*/
|
|
17
|
+
import type { PolicyValidationService } from "../domain/governance/services.js";
|
|
18
|
+
export interface GuardrailsHookDeps {
|
|
19
|
+
readonly validationService: PolicyValidationService;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Creates the tool.execute.before hook for governance enforcement.
|
|
23
|
+
*
|
|
24
|
+
* When a tool is invoked, this hook evaluates all governance policies.
|
|
25
|
+
* If any error-severity violations are found, the hook throws an Error
|
|
26
|
+
* which OpenCode surfaces to the LLM as a tool failure.
|
|
27
|
+
*/
|
|
28
|
+
export declare function createGuardrailsHook(deps: GuardrailsHookDeps): (input: {
|
|
29
|
+
tool: string;
|
|
30
|
+
}, output: {
|
|
31
|
+
args: Record<string, unknown>;
|
|
32
|
+
}) => Promise<void>;
|
|
33
|
+
//# sourceMappingURL=guardrails.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"guardrails.d.ts","sourceRoot":"","sources":["../../src/hooks/guardrails.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AACH,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,kCAAkC,CAAC;AAEhF,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,iBAAiB,EAAE,uBAAuB,CAAC;CACrD;AAED;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAClC,IAAI,EAAE,kBAAkB,GACvB,CACD,KAAK,EAAE;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,EACvB,MAAM,EAAE;IAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAAE,KACtC,OAAO,CAAC,IAAI,CAAC,CAmBjB"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Creates the tool.execute.before hook for governance enforcement.
|
|
3
|
+
*
|
|
4
|
+
* When a tool is invoked, this hook evaluates all governance policies.
|
|
5
|
+
* If any error-severity violations are found, the hook throws an Error
|
|
6
|
+
* which OpenCode surfaces to the LLM as a tool failure.
|
|
7
|
+
*/
|
|
8
|
+
export function createGuardrailsHook(deps) {
|
|
9
|
+
return async (input, output) => {
|
|
10
|
+
const result = deps.validationService.validate({
|
|
11
|
+
toolName: input.tool,
|
|
12
|
+
args: output.args,
|
|
13
|
+
});
|
|
14
|
+
if (!result.allowed) {
|
|
15
|
+
const messages = result.errors.map((v) => `[${v.rule}] ${v.message}`);
|
|
16
|
+
throw new Error(`GOVERNANCE VIOLATION:\n${messages.join("\n")}`);
|
|
17
|
+
}
|
|
18
|
+
// Warnings are non-blocking but could be logged
|
|
19
|
+
// In a future phase, we could push warnings to an audit trail
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=guardrails.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"guardrails.js","sourceRoot":"","sources":["../../src/hooks/guardrails.ts"],"names":[],"mappings":"AAsBA;;;;;;GAMG;AACH,MAAM,UAAU,oBAAoB,CAClC,IAAwB;IAKxB,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE;QAC7B,MAAM,MAAM,GAAG,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC;YAC7C,QAAQ,EAAE,KAAK,CAAC,IAAI;YACpB,IAAI,EAAE,MAAM,CAAC,IAAI;SAClB,CAAC,CAAC;QAEH,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YACpB,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,CAAC,GAAG,CAChC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,OAAO,EAAE,CAClC,CAAC;YACF,MAAM,IAAI,KAAK,CACb,0BAA0B,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAChD,CAAC;QACJ,CAAC;QAED,gDAAgD;QAChD,8DAA8D;IAChE,CAAC,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shell Environment Hook
|
|
3
|
+
*
|
|
4
|
+
* Injects JARVIS-related environment variables into shell commands
|
|
5
|
+
* executed by OpenCode. This allows external scripts (e.g., Python RAG)
|
|
6
|
+
* to discover the workspace, database path, and session context.
|
|
7
|
+
*
|
|
8
|
+
* Hook: "shell.env"
|
|
9
|
+
* Signature: (input: { cwd }, output: { env }) => Promise<void>
|
|
10
|
+
*
|
|
11
|
+
* SOLID: SRP - environment variable injection only
|
|
12
|
+
*/
|
|
13
|
+
import type { SessionUseCases } from "../application/context-memory/session-use-cases.js";
|
|
14
|
+
export interface ShellEnvHookDeps {
|
|
15
|
+
readonly sessionUseCases: SessionUseCases;
|
|
16
|
+
readonly getWorkspace: (directory: string) => string;
|
|
17
|
+
readonly dbPath: string;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Creates the shell.env hook.
|
|
21
|
+
* Injects environment variables for external tool consumption.
|
|
22
|
+
*/
|
|
23
|
+
export declare function createShellEnvHook(deps: ShellEnvHookDeps): (input: {
|
|
24
|
+
cwd: string;
|
|
25
|
+
}, output: {
|
|
26
|
+
env: Record<string, string>;
|
|
27
|
+
}) => Promise<void>;
|
|
28
|
+
//# sourceMappingURL=shell-env.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shell-env.d.ts","sourceRoot":"","sources":["../../src/hooks/shell-env.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AACH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,oDAAoD,CAAC;AAE1F,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,eAAe,EAAE,eAAe,CAAC;IAC1C,QAAQ,CAAC,YAAY,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,MAAM,CAAC;IACrD,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAChC,IAAI,EAAE,gBAAgB,GACrB,CACD,KAAK,EAAE;IAAE,GAAG,EAAE,MAAM,CAAA;CAAE,EACtB,MAAM,EAAE;IAAE,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CAAE,KACpC,OAAO,CAAC,IAAI,CAAC,CAajB"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Creates the shell.env hook.
|
|
3
|
+
* Injects environment variables for external tool consumption.
|
|
4
|
+
*/
|
|
5
|
+
export function createShellEnvHook(deps) {
|
|
6
|
+
return async (input, output) => {
|
|
7
|
+
const workspace = deps.getWorkspace(input.cwd);
|
|
8
|
+
output.env["JARVIS_WORKSPACE"] = workspace;
|
|
9
|
+
output.env["JARVIS_DB_PATH"] = deps.dbPath;
|
|
10
|
+
// Inject active session ID if one exists
|
|
11
|
+
const result = await deps.sessionUseCases.getActiveSession({ workspace });
|
|
12
|
+
if (result.success && result.data !== null) {
|
|
13
|
+
output.env["JARVIS_SESSION_ID"] = result.data.id;
|
|
14
|
+
}
|
|
15
|
+
};
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=shell-env.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shell-env.js","sourceRoot":"","sources":["../../src/hooks/shell-env.ts"],"names":[],"mappings":"AAoBA;;;GAGG;AACH,MAAM,UAAU,kBAAkB,CAChC,IAAsB;IAKtB,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE;QAC7B,MAAM,SAAS,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAE/C,MAAM,CAAC,GAAG,CAAC,kBAAkB,CAAC,GAAG,SAAS,CAAC;QAC3C,MAAM,CAAC,GAAG,CAAC,gBAAgB,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC;QAE3C,yCAAyC;QACzC,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,gBAAgB,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC;QAC1E,IAAI,MAAM,CAAC,OAAO,IAAI,MAAM,CAAC,IAAI,KAAK,IAAI,EAAE,CAAC;YAC3C,MAAM,CAAC,GAAG,CAAC,mBAAmB,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;QACnD,CAAC;IACH,CAAC,CAAC;AACJ,CAAC"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* JARVIS OpenCode Plugin - Entry Point
|
|
3
|
+
*
|
|
4
|
+
* Thin orchestrator that composes tools and hooks from each bounded context.
|
|
5
|
+
* Wires infrastructure -> domain services -> use cases -> tools/hooks.
|
|
6
|
+
*
|
|
7
|
+
* Architecture: DDD with SOLID principles
|
|
8
|
+
* - Domain layer: pure business logic, zero external deps
|
|
9
|
+
* - Application layer: use cases with DTOs
|
|
10
|
+
* - Infrastructure layer: SQLite repos, Vectra/Ollama adapters
|
|
11
|
+
* - Tools layer: OpenCode tool() definitions (thin adapters)
|
|
12
|
+
* - Hooks layer: guardrails, compacting, events
|
|
13
|
+
*/
|
|
14
|
+
import type { Plugin } from "@opencode-ai/plugin";
|
|
15
|
+
export declare const JarvisPlugin: Plugin;
|
|
16
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AACH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAuIlD,eAAO,MAAM,YAAY,EAAE,MAgV1B,CAAC"}
|