@xemahq/biome-sdk 0.1.1
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 +201 -0
- package/README.md +62 -0
- package/dist/adapter/index.d.ts +7 -0
- package/dist/adapter/index.d.ts.map +1 -0
- package/dist/adapter/index.js +23 -0
- package/dist/adapter/index.js.map +1 -0
- package/dist/adapter/lib/action.d.ts +25 -0
- package/dist/adapter/lib/action.d.ts.map +1 -0
- package/dist/adapter/lib/action.js +3 -0
- package/dist/adapter/lib/action.js.map +1 -0
- package/dist/adapter/lib/provider-module.d.ts +41 -0
- package/dist/adapter/lib/provider-module.d.ts.map +1 -0
- package/dist/adapter/lib/provider-module.js +7 -0
- package/dist/adapter/lib/provider-module.js.map +1 -0
- package/dist/adapter/lib/resource.d.ts +25 -0
- package/dist/adapter/lib/resource.d.ts.map +1 -0
- package/dist/adapter/lib/resource.js +3 -0
- package/dist/adapter/lib/resource.js.map +1 -0
- package/dist/adapter/lib/result.d.ts +18 -0
- package/dist/adapter/lib/result.d.ts.map +1 -0
- package/dist/adapter/lib/result.js +12 -0
- package/dist/adapter/lib/result.js.map +1 -0
- package/dist/adapter/lib/sidecar-contract.d.ts +91 -0
- package/dist/adapter/lib/sidecar-contract.d.ts.map +1 -0
- package/dist/adapter/lib/sidecar-contract.js +19 -0
- package/dist/adapter/lib/sidecar-contract.js.map +1 -0
- package/dist/adapter/lib/webhook.d.ts +49 -0
- package/dist/adapter/lib/webhook.d.ts.map +1 -0
- package/dist/adapter/lib/webhook.js +3 -0
- package/dist/adapter/lib/webhook.js.map +1 -0
- package/dist/agent-workspace/index.d.ts +8 -0
- package/dist/agent-workspace/index.d.ts.map +1 -0
- package/dist/agent-workspace/index.js +24 -0
- package/dist/agent-workspace/index.js.map +1 -0
- package/dist/agent-workspace/lib/errors/error-codes.d.ts +16 -0
- package/dist/agent-workspace/lib/errors/error-codes.d.ts.map +1 -0
- package/dist/agent-workspace/lib/errors/error-codes.js +37 -0
- package/dist/agent-workspace/lib/errors/error-codes.js.map +1 -0
- package/dist/agent-workspace/lib/errors/index.d.ts +4 -0
- package/dist/agent-workspace/lib/errors/index.d.ts.map +1 -0
- package/dist/agent-workspace/lib/errors/index.js +20 -0
- package/dist/agent-workspace/lib/errors/index.js.map +1 -0
- package/dist/agent-workspace/lib/errors/mount-plan-error.d.ts +16 -0
- package/dist/agent-workspace/lib/errors/mount-plan-error.d.ts.map +1 -0
- package/dist/agent-workspace/lib/errors/mount-plan-error.js +26 -0
- package/dist/agent-workspace/lib/errors/mount-plan-error.js.map +1 -0
- package/dist/agent-workspace/lib/errors/mount-resolver-error.d.ts +34 -0
- package/dist/agent-workspace/lib/errors/mount-resolver-error.d.ts.map +1 -0
- package/dist/agent-workspace/lib/errors/mount-resolver-error.js +50 -0
- package/dist/agent-workspace/lib/errors/mount-resolver-error.js.map +1 -0
- package/dist/agent-workspace/lib/mount-resolver.d.ts +10 -0
- package/dist/agent-workspace/lib/mount-resolver.d.ts.map +1 -0
- package/dist/agent-workspace/lib/mount-resolver.js +3 -0
- package/dist/agent-workspace/lib/mount-resolver.js.map +1 -0
- package/dist/agent-workspace/lib/mount-source.d.ts +4 -0
- package/dist/agent-workspace/lib/mount-source.d.ts.map +1 -0
- package/dist/agent-workspace/lib/mount-source.js +3 -0
- package/dist/agent-workspace/lib/mount-source.js.map +1 -0
- package/dist/agent-workspace/lib/refid-resolver.d.ts +23 -0
- package/dist/agent-workspace/lib/refid-resolver.d.ts.map +1 -0
- package/dist/agent-workspace/lib/refid-resolver.js +103 -0
- package/dist/agent-workspace/lib/refid-resolver.js.map +1 -0
- package/dist/agent-workspace/lib/registries.d.ts +30 -0
- package/dist/agent-workspace/lib/registries.d.ts.map +1 -0
- package/dist/agent-workspace/lib/registries.js +88 -0
- package/dist/agent-workspace/lib/registries.js.map +1 -0
- package/dist/agent-workspace/lib/resolvers/agent-definition.resolver.d.ts +13 -0
- package/dist/agent-workspace/lib/resolvers/agent-definition.resolver.d.ts.map +1 -0
- package/dist/agent-workspace/lib/resolvers/agent-definition.resolver.js +25 -0
- package/dist/agent-workspace/lib/resolvers/agent-definition.resolver.js.map +1 -0
- package/dist/agent-workspace/lib/resolvers/artifact-store-collection.resolver.d.ts +13 -0
- package/dist/agent-workspace/lib/resolvers/artifact-store-collection.resolver.d.ts.map +1 -0
- package/dist/agent-workspace/lib/resolvers/artifact-store-collection.resolver.js +28 -0
- package/dist/agent-workspace/lib/resolvers/artifact-store-collection.resolver.js.map +1 -0
- package/dist/agent-workspace/lib/resolvers/artifact-version.resolver.d.ts +13 -0
- package/dist/agent-workspace/lib/resolvers/artifact-version.resolver.d.ts.map +1 -0
- package/dist/agent-workspace/lib/resolvers/artifact-version.resolver.js +25 -0
- package/dist/agent-workspace/lib/resolvers/artifact-version.resolver.js.map +1 -0
- package/dist/agent-workspace/lib/resolvers/clients.d.ts +122 -0
- package/dist/agent-workspace/lib/resolvers/clients.d.ts.map +1 -0
- package/dist/agent-workspace/lib/resolvers/clients.js +3 -0
- package/dist/agent-workspace/lib/resolvers/clients.js.map +1 -0
- package/dist/agent-workspace/lib/resolvers/deliverable-specs.resolver.d.ts +13 -0
- package/dist/agent-workspace/lib/resolvers/deliverable-specs.resolver.d.ts.map +1 -0
- package/dist/agent-workspace/lib/resolvers/deliverable-specs.resolver.js +24 -0
- package/dist/agent-workspace/lib/resolvers/deliverable-specs.resolver.js.map +1 -0
- package/dist/agent-workspace/lib/resolvers/deliverables.resolver.d.ts +13 -0
- package/dist/agent-workspace/lib/resolvers/deliverables.resolver.d.ts.map +1 -0
- package/dist/agent-workspace/lib/resolvers/deliverables.resolver.js +28 -0
- package/dist/agent-workspace/lib/resolvers/deliverables.resolver.js.map +1 -0
- package/dist/agent-workspace/lib/resolvers/index.d.ts +20 -0
- package/dist/agent-workspace/lib/resolvers/index.d.ts.map +1 -0
- package/dist/agent-workspace/lib/resolvers/index.js +36 -0
- package/dist/agent-workspace/lib/resolvers/index.js.map +1 -0
- package/dist/agent-workspace/lib/resolvers/instruction-section.resolver.d.ts +13 -0
- package/dist/agent-workspace/lib/resolvers/instruction-section.resolver.d.ts.map +1 -0
- package/dist/agent-workspace/lib/resolvers/instruction-section.resolver.js +22 -0
- package/dist/agent-workspace/lib/resolvers/instruction-section.resolver.js.map +1 -0
- package/dist/agent-workspace/lib/resolvers/kb-pages.resolver.d.ts +13 -0
- package/dist/agent-workspace/lib/resolvers/kb-pages.resolver.d.ts.map +1 -0
- package/dist/agent-workspace/lib/resolvers/kb-pages.resolver.js +36 -0
- package/dist/agent-workspace/lib/resolvers/kb-pages.resolver.js.map +1 -0
- package/dist/agent-workspace/lib/resolvers/kb-space.resolver.d.ts +13 -0
- package/dist/agent-workspace/lib/resolvers/kb-space.resolver.d.ts.map +1 -0
- package/dist/agent-workspace/lib/resolvers/kb-space.resolver.js +26 -0
- package/dist/agent-workspace/lib/resolvers/kb-space.resolver.js.map +1 -0
- package/dist/agent-workspace/lib/resolvers/rendered-agents-md.resolver.d.ts +13 -0
- package/dist/agent-workspace/lib/resolvers/rendered-agents-md.resolver.d.ts.map +1 -0
- package/dist/agent-workspace/lib/resolvers/rendered-agents-md.resolver.js +23 -0
- package/dist/agent-workspace/lib/resolvers/rendered-agents-md.resolver.js.map +1 -0
- package/dist/agent-workspace/lib/resolvers/rendered-context-json.resolver.d.ts +13 -0
- package/dist/agent-workspace/lib/resolvers/rendered-context-json.resolver.d.ts.map +1 -0
- package/dist/agent-workspace/lib/resolvers/rendered-context-json.resolver.js +24 -0
- package/dist/agent-workspace/lib/resolvers/rendered-context-json.resolver.js.map +1 -0
- package/dist/agent-workspace/lib/resolvers/rendered-system-overlay.resolver.d.ts +13 -0
- package/dist/agent-workspace/lib/resolvers/rendered-system-overlay.resolver.d.ts.map +1 -0
- package/dist/agent-workspace/lib/resolvers/rendered-system-overlay.resolver.js +23 -0
- package/dist/agent-workspace/lib/resolvers/rendered-system-overlay.resolver.js.map +1 -0
- package/dist/agent-workspace/lib/resolvers/scm-repo.resolver.d.ts +13 -0
- package/dist/agent-workspace/lib/resolvers/scm-repo.resolver.d.ts.map +1 -0
- package/dist/agent-workspace/lib/resolvers/scm-repo.resolver.js +28 -0
- package/dist/agent-workspace/lib/resolvers/scm-repo.resolver.js.map +1 -0
- package/dist/agent-workspace/lib/resolvers/session-attachment.resolver.d.ts +13 -0
- package/dist/agent-workspace/lib/resolvers/session-attachment.resolver.d.ts.map +1 -0
- package/dist/agent-workspace/lib/resolvers/session-attachment.resolver.js +28 -0
- package/dist/agent-workspace/lib/resolvers/session-attachment.resolver.js.map +1 -0
- package/dist/agent-workspace/lib/resolvers/skill-bundle.resolver.d.ts +13 -0
- package/dist/agent-workspace/lib/resolvers/skill-bundle.resolver.d.ts.map +1 -0
- package/dist/agent-workspace/lib/resolvers/skill-bundle.resolver.js +29 -0
- package/dist/agent-workspace/lib/resolvers/skill-bundle.resolver.js.map +1 -0
- package/dist/agent-workspace/lib/resolvers/static-literal.resolver.d.ts +11 -0
- package/dist/agent-workspace/lib/resolvers/static-literal.resolver.d.ts.map +1 -0
- package/dist/agent-workspace/lib/resolvers/static-literal.resolver.js +33 -0
- package/dist/agent-workspace/lib/resolvers/static-literal.resolver.js.map +1 -0
- package/dist/agent-workspace/lib/resolvers/types.d.ts +35 -0
- package/dist/agent-workspace/lib/resolvers/types.d.ts.map +1 -0
- package/dist/agent-workspace/lib/resolvers/types.js +3 -0
- package/dist/agent-workspace/lib/resolvers/types.js.map +1 -0
- package/dist/agent-workspace/lib/resolvers/utils/agent-run-context-cache.d.ts +70 -0
- package/dist/agent-workspace/lib/resolvers/utils/agent-run-context-cache.d.ts.map +1 -0
- package/dist/agent-workspace/lib/resolvers/utils/agent-run-context-cache.js +90 -0
- package/dist/agent-workspace/lib/resolvers/utils/agent-run-context-cache.js.map +1 -0
- package/dist/agent-workspace/lib/resolvers/utils/auth.d.ts +5 -0
- package/dist/agent-workspace/lib/resolvers/utils/auth.d.ts.map +1 -0
- package/dist/agent-workspace/lib/resolvers/utils/auth.js +19 -0
- package/dist/agent-workspace/lib/resolvers/utils/auth.js.map +1 -0
- package/dist/agent-workspace/lib/resolvers/utils/size-cap.d.ts +3 -0
- package/dist/agent-workspace/lib/resolvers/utils/size-cap.d.ts.map +1 -0
- package/dist/agent-workspace/lib/resolvers/utils/size-cap.js +23 -0
- package/dist/agent-workspace/lib/resolvers/utils/size-cap.js.map +1 -0
- package/dist/agent-workspace/lib/resolvers/utils/streaming.d.ts +3 -0
- package/dist/agent-workspace/lib/resolvers/utils/streaming.d.ts.map +1 -0
- package/dist/agent-workspace/lib/resolvers/utils/streaming.js +11 -0
- package/dist/agent-workspace/lib/resolvers/utils/streaming.js.map +1 -0
- package/dist/agent-workspace/lib/workspace-renderer.d.ts +13 -0
- package/dist/agent-workspace/lib/workspace-renderer.d.ts.map +1 -0
- package/dist/agent-workspace/lib/workspace-renderer.js +3 -0
- package/dist/agent-workspace/lib/workspace-renderer.js.map +1 -0
- package/dist/api/index.d.ts +11 -0
- package/dist/api/index.d.ts.map +1 -0
- package/dist/api/index.js +27 -0
- package/dist/api/index.js.map +1 -0
- package/dist/api/lib/api-manifest.d.ts +29 -0
- package/dist/api/lib/api-manifest.d.ts.map +1 -0
- package/dist/api/lib/api-manifest.js +28 -0
- package/dist/api/lib/api-manifest.js.map +1 -0
- package/dist/api/lib/biome-db.d.ts +2 -0
- package/dist/api/lib/biome-db.d.ts.map +1 -0
- package/dist/api/lib/biome-db.js +13 -0
- package/dist/api/lib/biome-db.js.map +1 -0
- package/dist/api/lib/code-tool-context.d.ts +16 -0
- package/dist/api/lib/code-tool-context.d.ts.map +1 -0
- package/dist/api/lib/code-tool-context.js +12 -0
- package/dist/api/lib/code-tool-context.js.map +1 -0
- package/dist/api/lib/code-tool-descriptor.d.ts +49 -0
- package/dist/api/lib/code-tool-descriptor.d.ts.map +1 -0
- package/dist/api/lib/code-tool-descriptor.js +3 -0
- package/dist/api/lib/code-tool-descriptor.js.map +1 -0
- package/dist/api/lib/code-tool.decorator.d.ts +17 -0
- package/dist/api/lib/code-tool.decorator.d.ts.map +1 -0
- package/dist/api/lib/code-tool.decorator.js +38 -0
- package/dist/api/lib/code-tool.decorator.js.map +1 -0
- package/dist/api/lib/mutation-context.d.ts +16 -0
- package/dist/api/lib/mutation-context.d.ts.map +1 -0
- package/dist/api/lib/mutation-context.js +17 -0
- package/dist/api/lib/mutation-context.js.map +1 -0
- package/dist/api/lib/pagination.d.ts +8 -0
- package/dist/api/lib/pagination.d.ts.map +1 -0
- package/dist/api/lib/pagination.js +7 -0
- package/dist/api/lib/pagination.js.map +1 -0
- package/dist/api/lib/provider-kind-mirror.d.ts +7 -0
- package/dist/api/lib/provider-kind-mirror.d.ts.map +1 -0
- package/dist/api/lib/provider-kind-mirror.js +11 -0
- package/dist/api/lib/provider-kind-mirror.js.map +1 -0
- package/dist/api/lib/request-context.d.ts +21 -0
- package/dist/api/lib/request-context.d.ts.map +1 -0
- package/dist/api/lib/request-context.js +51 -0
- package/dist/api/lib/request-context.js.map +1 -0
- package/dist/api/lib/route-registry-entry.d.ts +11 -0
- package/dist/api/lib/route-registry-entry.d.ts.map +1 -0
- package/dist/api/lib/route-registry-entry.js +3 -0
- package/dist/api/lib/route-registry-entry.js.map +1 -0
- package/dist/api/nest/controller-base.d.ts +6 -0
- package/dist/api/nest/controller-base.d.ts.map +1 -0
- package/dist/api/nest/controller-base.js +28 -0
- package/dist/api/nest/controller-base.js.map +1 -0
- package/dist/api/nest/events/events.controller.d.ts +10 -0
- package/dist/api/nest/events/events.controller.d.ts.map +1 -0
- package/dist/api/nest/events/events.controller.js +56 -0
- package/dist/api/nest/events/events.controller.js.map +1 -0
- package/dist/api/nest/health/health.controller.d.ts +19 -0
- package/dist/api/nest/health/health.controller.d.ts.map +1 -0
- package/dist/api/nest/health/health.controller.js +63 -0
- package/dist/api/nest/health/health.controller.js.map +1 -0
- package/dist/api/nest/health/health.module.d.ts +6 -0
- package/dist/api/nest/health/health.module.d.ts.map +1 -0
- package/dist/api/nest/health/health.module.js +29 -0
- package/dist/api/nest/health/health.module.js.map +1 -0
- package/dist/api/nest/index.d.ts +7 -0
- package/dist/api/nest/index.d.ts.map +1 -0
- package/dist/api/nest/index.js +23 -0
- package/dist/api/nest/index.js.map +1 -0
- package/dist/api/nest/module.d.ts +6 -0
- package/dist/api/nest/module.d.ts.map +1 -0
- package/dist/api/nest/module.js +34 -0
- package/dist/api/nest/module.js.map +1 -0
- package/dist/api/nest/request-context.d.ts +17 -0
- package/dist/api/nest/request-context.d.ts.map +1 -0
- package/dist/api/nest/request-context.js +75 -0
- package/dist/api/nest/request-context.js.map +1 -0
- package/dist/builder/index.d.ts +7 -0
- package/dist/builder/index.d.ts.map +1 -0
- package/dist/builder/index.js +23 -0
- package/dist/builder/index.js.map +1 -0
- package/dist/builder/lib/content-walker.d.ts +27 -0
- package/dist/builder/lib/content-walker.d.ts.map +1 -0
- package/dist/builder/lib/content-walker.js +274 -0
- package/dist/builder/lib/content-walker.js.map +1 -0
- package/dist/builder/lib/contribution-schemas.d.ts +348 -0
- package/dist/builder/lib/contribution-schemas.d.ts.map +1 -0
- package/dist/builder/lib/contribution-schemas.js +301 -0
- package/dist/builder/lib/contribution-schemas.js.map +1 -0
- package/dist/builder/lib/define-biome.d.ts +17 -0
- package/dist/builder/lib/define-biome.d.ts.map +1 -0
- package/dist/builder/lib/define-biome.js +11 -0
- package/dist/builder/lib/define-biome.js.map +1 -0
- package/dist/builder/lib/define-helpers.d.ts +6 -0
- package/dist/builder/lib/define-helpers.d.ts.map +1 -0
- package/dist/builder/lib/define-helpers.js +20 -0
- package/dist/builder/lib/define-helpers.js.map +1 -0
- package/dist/builder/lib/extends-precedence.d.ts +14 -0
- package/dist/builder/lib/extends-precedence.d.ts.map +1 -0
- package/dist/builder/lib/extends-precedence.js +113 -0
- package/dist/builder/lib/extends-precedence.js.map +1 -0
- package/dist/builder/lib/workflow-phase-config-loader.d.ts +18 -0
- package/dist/builder/lib/workflow-phase-config-loader.d.ts.map +1 -0
- package/dist/builder/lib/workflow-phase-config-loader.js +78 -0
- package/dist/builder/lib/workflow-phase-config-loader.js.map +1 -0
- package/dist/host/index.d.ts +11 -0
- package/dist/host/index.d.ts.map +1 -0
- package/dist/host/index.js +38 -0
- package/dist/host/index.js.map +1 -0
- package/dist/host/lib/agents-cross-validate.d.ts +7 -0
- package/dist/host/lib/agents-cross-validate.d.ts.map +1 -0
- package/dist/host/lib/agents-cross-validate.js +157 -0
- package/dist/host/lib/agents-cross-validate.js.map +1 -0
- package/dist/host/lib/biome-manifest.d.ts +808 -0
- package/dist/host/lib/biome-manifest.d.ts.map +1 -0
- package/dist/host/lib/biome-manifest.js +490 -0
- package/dist/host/lib/biome-manifest.js.map +1 -0
- package/dist/host/lib/bootstrap-contributions-service.d.ts +35 -0
- package/dist/host/lib/bootstrap-contributions-service.d.ts.map +1 -0
- package/dist/host/lib/bootstrap-contributions-service.js +79 -0
- package/dist/host/lib/bootstrap-contributions-service.js.map +1 -0
- package/dist/host/lib/default-state.d.ts +3 -0
- package/dist/host/lib/default-state.d.ts.map +1 -0
- package/dist/host/lib/default-state.js +20 -0
- package/dist/host/lib/default-state.js.map +1 -0
- package/dist/host/lib/integration-cross-validate.d.ts +12 -0
- package/dist/host/lib/integration-cross-validate.d.ts.map +1 -0
- package/dist/host/lib/integration-cross-validate.js +66 -0
- package/dist/host/lib/integration-cross-validate.js.map +1 -0
- package/dist/host/lib/system-overlay-contribution.d.ts +14 -0
- package/dist/host/lib/system-overlay-contribution.d.ts.map +1 -0
- package/dist/host/lib/system-overlay-contribution.js +3 -0
- package/dist/host/lib/system-overlay-contribution.js.map +1 -0
- package/dist/host/lib/topology.d.ts +7 -0
- package/dist/host/lib/topology.d.ts.map +1 -0
- package/dist/host/lib/topology.js +105 -0
- package/dist/host/lib/topology.js.map +1 -0
- package/dist/index.d.ts +9 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +37 -0
- package/dist/index.js.map +1 -0
- package/dist/orchestrator-adapter/index.d.ts +3 -0
- package/dist/orchestrator-adapter/index.d.ts.map +1 -0
- package/dist/orchestrator-adapter/index.js +19 -0
- package/dist/orchestrator-adapter/index.js.map +1 -0
- package/dist/orchestrator-adapter/lib/orchestrator-adapter-registry.d.ts +6 -0
- package/dist/orchestrator-adapter/lib/orchestrator-adapter-registry.d.ts.map +1 -0
- package/dist/orchestrator-adapter/lib/orchestrator-adapter-registry.js +11 -0
- package/dist/orchestrator-adapter/lib/orchestrator-adapter-registry.js.map +1 -0
- package/dist/orchestrator-adapter/lib/orchestrator-adapter.d.ts +11 -0
- package/dist/orchestrator-adapter/lib/orchestrator-adapter.d.ts.map +1 -0
- package/dist/orchestrator-adapter/lib/orchestrator-adapter.js +3 -0
- package/dist/orchestrator-adapter/lib/orchestrator-adapter.js.map +1 -0
- package/package.json +110 -0
- package/src/adapter/index.ts +6 -0
- package/src/adapter/lib/action.ts +60 -0
- package/src/adapter/lib/provider-module.ts +140 -0
- package/src/adapter/lib/resource.ts +52 -0
- package/src/adapter/lib/result.ts +53 -0
- package/src/adapter/lib/sidecar-contract.ts +169 -0
- package/src/adapter/lib/webhook.ts +142 -0
- package/src/agent-workspace/index.ts +7 -0
- package/src/agent-workspace/lib/errors/error-codes.ts +44 -0
- package/src/agent-workspace/lib/errors/index.ts +3 -0
- package/src/agent-workspace/lib/errors/mount-plan-error.ts +29 -0
- package/src/agent-workspace/lib/errors/mount-resolver-error.ts +56 -0
- package/src/agent-workspace/lib/mount-resolver.ts +35 -0
- package/src/agent-workspace/lib/mount-source.ts +11 -0
- package/src/agent-workspace/lib/refid-resolver.ts +135 -0
- package/src/agent-workspace/lib/registries.ts +150 -0
- package/src/agent-workspace/lib/resolvers/agent-definition.resolver.ts +45 -0
- package/src/agent-workspace/lib/resolvers/artifact-store-collection.resolver.ts +43 -0
- package/src/agent-workspace/lib/resolvers/artifact-version.resolver.ts +52 -0
- package/src/agent-workspace/lib/resolvers/clients.ts +297 -0
- package/src/agent-workspace/lib/resolvers/deliverable-specs.resolver.ts +33 -0
- package/src/agent-workspace/lib/resolvers/deliverables.resolver.ts +41 -0
- package/src/agent-workspace/lib/resolvers/index.ts +19 -0
- package/src/agent-workspace/lib/resolvers/instruction-section.resolver.ts +36 -0
- package/src/agent-workspace/lib/resolvers/kb-pages.resolver.ts +62 -0
- package/src/agent-workspace/lib/resolvers/kb-space.resolver.ts +34 -0
- package/src/agent-workspace/lib/resolvers/rendered-agents-md.resolver.ts +40 -0
- package/src/agent-workspace/lib/resolvers/rendered-context-json.resolver.ts +41 -0
- package/src/agent-workspace/lib/resolvers/rendered-system-overlay.resolver.ts +39 -0
- package/src/agent-workspace/lib/resolvers/scm-repo.resolver.ts +43 -0
- package/src/agent-workspace/lib/resolvers/session-attachment.resolver.ts +37 -0
- package/src/agent-workspace/lib/resolvers/skill-bundle.resolver.ts +42 -0
- package/src/agent-workspace/lib/resolvers/static-literal.resolver.ts +69 -0
- package/src/agent-workspace/lib/resolvers/types.ts +94 -0
- package/src/agent-workspace/lib/resolvers/utils/agent-run-context-cache.ts +206 -0
- package/src/agent-workspace/lib/resolvers/utils/auth.ts +39 -0
- package/src/agent-workspace/lib/resolvers/utils/size-cap.ts +38 -0
- package/src/agent-workspace/lib/resolvers/utils/streaming.ts +22 -0
- package/src/agent-workspace/lib/workspace-renderer.ts +25 -0
- package/src/api/index.ts +10 -0
- package/src/api/lib/api-manifest.ts +54 -0
- package/src/api/lib/biome-db.ts +28 -0
- package/src/api/lib/code-tool-context.ts +45 -0
- package/src/api/lib/code-tool-descriptor.ts +102 -0
- package/src/api/lib/code-tool.decorator.ts +111 -0
- package/src/api/lib/mutation-context.ts +49 -0
- package/src/api/lib/pagination.ts +17 -0
- package/src/api/lib/provider-kind-mirror.ts +16 -0
- package/src/api/lib/request-context.ts +90 -0
- package/src/api/lib/route-registry-entry.ts +35 -0
- package/src/api/nest/controller-base.ts +59 -0
- package/src/api/nest/events/events.controller.ts +48 -0
- package/src/api/nest/health/health.controller.ts +36 -0
- package/src/api/nest/health/health.module.ts +29 -0
- package/src/api/nest/index.ts +6 -0
- package/src/api/nest/module.ts +51 -0
- package/src/api/nest/request-context.ts +166 -0
- package/src/builder/index.ts +26 -0
- package/src/builder/lib/content-walker.ts +383 -0
- package/src/builder/lib/contribution-schemas.ts +572 -0
- package/src/builder/lib/define-biome.ts +84 -0
- package/src/builder/lib/define-helpers.ts +42 -0
- package/src/builder/lib/extends-precedence.ts +195 -0
- package/src/builder/lib/workflow-phase-config-loader.ts +163 -0
- package/src/host/index.ts +39 -0
- package/src/host/lib/agents-cross-validate.ts +283 -0
- package/src/host/lib/biome-manifest.ts +1060 -0
- package/src/host/lib/bootstrap-contributions-service.ts +233 -0
- package/src/host/lib/default-state.ts +40 -0
- package/src/host/lib/integration-cross-validate.ts +140 -0
- package/src/host/lib/system-overlay-contribution.ts +53 -0
- package/src/host/lib/topology.ts +174 -0
- package/src/index.ts +58 -0
- package/src/orchestrator-adapter/index.ts +2 -0
- package/src/orchestrator-adapter/lib/orchestrator-adapter-registry.ts +8 -0
- package/src/orchestrator-adapter/lib/orchestrator-adapter.ts +20 -0
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import { MountResolverErrorCode } from './error-codes';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Resolver / proxy faults — surfaced during apply. Distinct hierarchy
|
|
5
|
+
* from `MountPlanError` so the proxy can map them to different HTTP
|
|
6
|
+
* statuses without sniffing message strings.
|
|
7
|
+
*
|
|
8
|
+
* Subclass per error code. `details` is a structured, scrubbable bag —
|
|
9
|
+
* NEVER includes JWTs, signed URLs, or upstream payload bodies.
|
|
10
|
+
*/
|
|
11
|
+
export abstract class MountResolverError extends Error {
|
|
12
|
+
abstract readonly code: MountResolverErrorCode;
|
|
13
|
+
readonly details: Readonly<Record<string, unknown>>;
|
|
14
|
+
|
|
15
|
+
constructor(message: string, details: Readonly<Record<string, unknown>> = {}) {
|
|
16
|
+
super(message);
|
|
17
|
+
this.name = new.target.name;
|
|
18
|
+
this.details = details;
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
export class MountActorUnauthorizedError extends MountResolverError {
|
|
23
|
+
readonly code = MountResolverErrorCode.ActorUnauthorized;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
export class MountActorForbiddenError extends MountResolverError {
|
|
27
|
+
readonly code = MountResolverErrorCode.ActorForbidden;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
export class MountSourceNotFoundError extends MountResolverError {
|
|
31
|
+
readonly code = MountResolverErrorCode.SourceNotFound;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
export class MountSourcePayloadTooLargeError extends MountResolverError {
|
|
35
|
+
readonly code = MountResolverErrorCode.PayloadTooLarge;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
export class MountSourceUpstreamError extends MountResolverError {
|
|
39
|
+
readonly code = MountResolverErrorCode.UpstreamBadGateway;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
export class MountSourceUpstreamUnavailableError extends MountResolverError {
|
|
43
|
+
readonly code = MountResolverErrorCode.UpstreamUnavailable;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
export class MountSourceUpstreamTimeoutError extends MountResolverError {
|
|
47
|
+
readonly code = MountResolverErrorCode.UpstreamTimeout;
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
export class MountInsufficientStorageError extends MountResolverError {
|
|
51
|
+
readonly code = MountResolverErrorCode.InsufficientStorage;
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
export class MountInternalError extends MountResolverError {
|
|
55
|
+
readonly code = MountResolverErrorCode.Internal;
|
|
56
|
+
}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import type { MountSource, MountSourceKind } from './mount-source';
|
|
2
|
+
import type {
|
|
3
|
+
ResolveContext,
|
|
4
|
+
ResolveSlotContext,
|
|
5
|
+
ResolvedMountEntries,
|
|
6
|
+
} from './resolvers/types';
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* One adapter per `MountSource.kind`. Resolvers stream files into the
|
|
10
|
+
* writer phase, which writes them through `workspace-proxy` into the
|
|
11
|
+
* agent's `/workspace/` tree.
|
|
12
|
+
*
|
|
13
|
+
* Biomes ship their own `MountResolver` and register it with the
|
|
14
|
+
* `MountSourceKindRegistry` at platform boot. No core code changes when
|
|
15
|
+
* a new mount-source kind lands.
|
|
16
|
+
*
|
|
17
|
+
* Implementations MUST:
|
|
18
|
+
* - Forward `ctx.authHeaders` verbatim to upstream Orval clients.
|
|
19
|
+
* Cross-tenant access depends on the upstream service's
|
|
20
|
+
* `RequestContextMiddleware` enforcing org-scoping; the resolver
|
|
21
|
+
* must not silently strip headers.
|
|
22
|
+
* - Yield streamed bodies for any payload that may exceed ~1 MB.
|
|
23
|
+
* - Throw a `MountResolverError` subclass on any upstream failure —
|
|
24
|
+
* never swallow errors or return partial results.
|
|
25
|
+
*/
|
|
26
|
+
export interface MountResolver<K extends MountSourceKind = MountSourceKind> {
|
|
27
|
+
readonly kind: K;
|
|
28
|
+
resolve(
|
|
29
|
+
source: Extract<MountSource, { kind: K }>,
|
|
30
|
+
slotCtx: ResolveSlotContext,
|
|
31
|
+
ctx: ResolveContext,
|
|
32
|
+
): ResolvedMountEntries;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
export type { ResolveContext, ResolveSlotContext, ResolvedMountEntries } from './resolvers/types';
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `MountSource` is the canonical contract owned by `@xemahq/kernel-contracts/workflow`.
|
|
3
|
+
* Re-exported here so SDK consumers have a single import surface.
|
|
4
|
+
*
|
|
5
|
+
* Biomes extend the closed set via TS module augmentation +
|
|
6
|
+
* `MountSourceKindRegistry.register`.
|
|
7
|
+
*/
|
|
8
|
+
export type { MountSource } from '@xemahq/kernel-contracts/workflow';
|
|
9
|
+
|
|
10
|
+
import type { MountSource } from '@xemahq/kernel-contracts/workflow';
|
|
11
|
+
export type MountSourceKind = MountSource['kind'];
|
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
import type { MountSource } from './mount-source';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Closed prefix table — every refId carried in DSL outputs has exactly
|
|
5
|
+
* one matching entry. Adding a new prefix requires extending both this
|
|
6
|
+
* enum AND `PREFIX_PARSERS`; an unmatched prefix throws fail-fast.
|
|
7
|
+
*/
|
|
8
|
+
export enum RefIdPrefix {
|
|
9
|
+
ArtifactStoreCollection = 'art',
|
|
10
|
+
KnowledgeBaseSpace = 'kb',
|
|
11
|
+
ScmRepo = 'scm',
|
|
12
|
+
SessionAttachment = 'att',
|
|
13
|
+
Deliverables = 'dlv',
|
|
14
|
+
DeliverableSpecs = 'dlv-spec',
|
|
15
|
+
StaticLiteral = 'lit',
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* Converts the short refId form carried in DSL outputs (`art:<id>`,
|
|
20
|
+
* `kb:<id>`, `scm:<repo>@<ref>`, `att:<sessionId>`,
|
|
21
|
+
* `dlv:<contractKey>`, `dlv-spec:<contractKey>`, `lit:<inline>`) into a
|
|
22
|
+
* concrete `MountSource` the renderer can dispatch to a `MountResolver`.
|
|
23
|
+
*
|
|
24
|
+
* Short prefixes are the wire form (DSL author + agent visible); full
|
|
25
|
+
* URIs stay internal to resolvers and `workspace-proxy`.
|
|
26
|
+
*/
|
|
27
|
+
export interface RefIdResolver {
|
|
28
|
+
resolve(refId: string): MountSource;
|
|
29
|
+
canResolve(refId: string): boolean;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
export class RefIdSchemeError extends Error {
|
|
33
|
+
readonly refId: string;
|
|
34
|
+
|
|
35
|
+
constructor(refId: string, message: string) {
|
|
36
|
+
super(`[refId "${refId}"] ${message}`);
|
|
37
|
+
this.name = 'RefIdSchemeError';
|
|
38
|
+
this.refId = refId;
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
type PrefixParser = (refId: string, body: string) => MountSource;
|
|
43
|
+
|
|
44
|
+
const PREFIX_PARSERS: Readonly<Record<RefIdPrefix, PrefixParser>> = {
|
|
45
|
+
[RefIdPrefix.ArtifactStoreCollection]: (refId, body) => {
|
|
46
|
+
if (body.length === 0) {
|
|
47
|
+
throw new RefIdSchemeError(refId, 'artifact-store collection id is empty');
|
|
48
|
+
}
|
|
49
|
+
return { kind: 'artifact-store-collection', collectionId: body };
|
|
50
|
+
},
|
|
51
|
+
[RefIdPrefix.KnowledgeBaseSpace]: (refId, body) => {
|
|
52
|
+
if (body.length === 0) {
|
|
53
|
+
throw new RefIdSchemeError(refId, 'kb space id is empty');
|
|
54
|
+
}
|
|
55
|
+
return { kind: 'kb-space', spaceId: body };
|
|
56
|
+
},
|
|
57
|
+
[RefIdPrefix.ScmRepo]: (refId, body) => {
|
|
58
|
+
const at = body.indexOf('@');
|
|
59
|
+
if (at < 1 || at === body.length - 1) {
|
|
60
|
+
throw new RefIdSchemeError(
|
|
61
|
+
refId,
|
|
62
|
+
"scm refId must be of the form 'scm:<repoRef>@<ref>'",
|
|
63
|
+
);
|
|
64
|
+
}
|
|
65
|
+
const repoRef = body.slice(0, at);
|
|
66
|
+
const ref = body.slice(at + 1);
|
|
67
|
+
return { kind: 'scm-repo', repoRef, ref };
|
|
68
|
+
},
|
|
69
|
+
[RefIdPrefix.SessionAttachment]: (refId, body) => {
|
|
70
|
+
if (body.length === 0) {
|
|
71
|
+
throw new RefIdSchemeError(refId, 'session id is empty');
|
|
72
|
+
}
|
|
73
|
+
return { kind: 'session-attachment', sessionId: body };
|
|
74
|
+
},
|
|
75
|
+
[RefIdPrefix.Deliverables]: (refId, body) => {
|
|
76
|
+
if (body.length === 0) {
|
|
77
|
+
throw new RefIdSchemeError(refId, 'deliverable contract key is empty');
|
|
78
|
+
}
|
|
79
|
+
return { kind: 'deliverables', contractKey: body };
|
|
80
|
+
},
|
|
81
|
+
[RefIdPrefix.DeliverableSpecs]: (refId, body) => {
|
|
82
|
+
if (body.length === 0) {
|
|
83
|
+
throw new RefIdSchemeError(refId, 'deliverable-spec contract key is empty');
|
|
84
|
+
}
|
|
85
|
+
return { kind: 'deliverable-specs', contractKey: body };
|
|
86
|
+
},
|
|
87
|
+
[RefIdPrefix.StaticLiteral]: (refId, body) => {
|
|
88
|
+
// `lit:<pathWithinWorkspace>=<base64-bytes>` — both segments required.
|
|
89
|
+
const eq = body.indexOf('=');
|
|
90
|
+
if (eq < 1 || eq === body.length - 1) {
|
|
91
|
+
throw new RefIdSchemeError(
|
|
92
|
+
refId,
|
|
93
|
+
"literal refId must be of the form 'lit:<pathWithinWorkspace>=<base64-bytes>'",
|
|
94
|
+
);
|
|
95
|
+
}
|
|
96
|
+
const pathWithinWorkspace = body.slice(0, eq);
|
|
97
|
+
const bytes = body.slice(eq + 1);
|
|
98
|
+
return { kind: 'static-literal', pathWithinWorkspace, bytes };
|
|
99
|
+
},
|
|
100
|
+
};
|
|
101
|
+
|
|
102
|
+
const KNOWN_PREFIXES: ReadonlySet<string> = new Set(Object.values(RefIdPrefix));
|
|
103
|
+
|
|
104
|
+
function splitPrefix(refId: string): { prefix: string; body: string } {
|
|
105
|
+
// dlv-spec contains a dash; we still split on the FIRST `:` only.
|
|
106
|
+
const colon = refId.indexOf(':');
|
|
107
|
+
if (colon < 1) {
|
|
108
|
+
throw new RefIdSchemeError(refId, 'expected `<prefix>:<body>` form');
|
|
109
|
+
}
|
|
110
|
+
return { prefix: refId.slice(0, colon), body: refId.slice(colon + 1) };
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
export class RefIdResolverImpl implements RefIdResolver {
|
|
114
|
+
canResolve(refId: string): boolean {
|
|
115
|
+
if (typeof refId !== 'string' || refId.length === 0) return false;
|
|
116
|
+
const colon = refId.indexOf(':');
|
|
117
|
+
if (colon < 1) return false;
|
|
118
|
+
return KNOWN_PREFIXES.has(refId.slice(0, colon));
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
resolve(refId: string): MountSource {
|
|
122
|
+
if (typeof refId !== 'string' || refId.length === 0) {
|
|
123
|
+
throw new RefIdSchemeError(String(refId), 'refId must be a non-empty string');
|
|
124
|
+
}
|
|
125
|
+
const { prefix, body } = splitPrefix(refId);
|
|
126
|
+
if (!KNOWN_PREFIXES.has(prefix)) {
|
|
127
|
+
throw new RefIdSchemeError(
|
|
128
|
+
refId,
|
|
129
|
+
`unknown refId prefix '${prefix}' — expected one of: ${Object.values(RefIdPrefix).join(', ')}`,
|
|
130
|
+
);
|
|
131
|
+
}
|
|
132
|
+
const parser = PREFIX_PARSERS[prefix as RefIdPrefix];
|
|
133
|
+
return parser(refId, body);
|
|
134
|
+
}
|
|
135
|
+
}
|
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
import { Registry } from '@xemahq/registry';
|
|
2
|
+
import type { MountResolver } from './mount-resolver';
|
|
3
|
+
import type { MountSourceKind } from './mount-source';
|
|
4
|
+
import type {
|
|
5
|
+
ArtifactStoreClient,
|
|
6
|
+
KbClient,
|
|
7
|
+
LlmRegistryClient,
|
|
8
|
+
ScmClient,
|
|
9
|
+
SessionAttachmentClient,
|
|
10
|
+
DeliverableSpecsClient,
|
|
11
|
+
SkillRegistryClient,
|
|
12
|
+
} from './resolvers/clients';
|
|
13
|
+
import { AgentDefinitionResolver } from './resolvers/agent-definition.resolver';
|
|
14
|
+
import { ArtifactStoreCollectionResolver } from './resolvers/artifact-store-collection.resolver';
|
|
15
|
+
import { ArtifactVersionResolver } from './resolvers/artifact-version.resolver';
|
|
16
|
+
import { DeliverablesResolver } from './resolvers/deliverables.resolver';
|
|
17
|
+
import { DeliverableSpecsResolver } from './resolvers/deliverable-specs.resolver';
|
|
18
|
+
import { InstructionSectionResolver } from './resolvers/instruction-section.resolver';
|
|
19
|
+
import { KbSpaceResolver } from './resolvers/kb-space.resolver';
|
|
20
|
+
import { KbPagesResolver } from './resolvers/kb-pages.resolver';
|
|
21
|
+
import { RenderedAgentsMdResolver } from './resolvers/rendered-agents-md.resolver';
|
|
22
|
+
import { RenderedContextJsonResolver } from './resolvers/rendered-context-json.resolver';
|
|
23
|
+
import { RenderedSystemOverlayResolver } from './resolvers/rendered-system-overlay.resolver';
|
|
24
|
+
import { RenderedAgentRunContextCache } from './resolvers/utils/agent-run-context-cache';
|
|
25
|
+
import { ScmRepoResolver } from './resolvers/scm-repo.resolver';
|
|
26
|
+
import { SessionAttachmentResolver } from './resolvers/session-attachment.resolver';
|
|
27
|
+
import { SkillBundleResolver } from './resolvers/skill-bundle.resolver';
|
|
28
|
+
import { StaticLiteralResolver } from './resolvers/static-literal.resolver';
|
|
29
|
+
|
|
30
|
+
export interface MountSourceKindRegistration {
|
|
31
|
+
readonly key: MountSourceKind;
|
|
32
|
+
readonly resolver: MountResolver;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
/**
|
|
36
|
+
* Runtime dispatch table for `MountSource.kind` → `MountResolver`. Built-in
|
|
37
|
+
* kinds register at platform boot; biomes extend it via the same API.
|
|
38
|
+
*/
|
|
39
|
+
export class MountSourceKindRegistry extends Registry<MountSourceKind, MountSourceKindRegistration> {
|
|
40
|
+
constructor(seed?: readonly MountSourceKindRegistration[]) {
|
|
41
|
+
super(seed ? { name: 'MountSourceKindRegistry', seed } : { name: 'MountSourceKindRegistry' });
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
/**
|
|
46
|
+
* Constructor deps for the built-in resolver set. Each client is
|
|
47
|
+
* **per-call auth aware** — workspace-proxy threads the actor's
|
|
48
|
+
* `authHeaders` into every call, so a single client instance services
|
|
49
|
+
* many actors safely. Static service-token clients MUST NOT be used.
|
|
50
|
+
*
|
|
51
|
+
* The interface is kept narrow on purpose: each resolver claims exactly
|
|
52
|
+
* the upstream client it needs, no global "platform clients" bag.
|
|
53
|
+
*/
|
|
54
|
+
export interface MountSourceKindResolverDeps {
|
|
55
|
+
readonly artifactStoreClient: ArtifactStoreClient;
|
|
56
|
+
readonly kbClient: KbClient;
|
|
57
|
+
readonly scmClient: ScmClient;
|
|
58
|
+
readonly sessionAttachmentClient: SessionAttachmentClient;
|
|
59
|
+
readonly deliverableSpecsClient: DeliverableSpecsClient;
|
|
60
|
+
readonly llmRegistryClient: LlmRegistryClient;
|
|
61
|
+
readonly skillRegistryClient: SkillRegistryClient;
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
/**
|
|
65
|
+
* Boot-time factory: returns a fully-populated registry containing the
|
|
66
|
+
* seven built-in resolvers. Biomes register their own kinds via
|
|
67
|
+
* `registry.register()` after this is built.
|
|
68
|
+
*
|
|
69
|
+
* Each resolver is a constructor-injected pure class — no I/O at
|
|
70
|
+
* construction time, no global singletons. Adding a new built-in kind
|
|
71
|
+
* = extending `MountSource` + appending a registration here.
|
|
72
|
+
*/
|
|
73
|
+
export function buildBuiltinMountSourceKindRegistry(
|
|
74
|
+
deps: MountSourceKindResolverDeps,
|
|
75
|
+
): MountSourceKindRegistry {
|
|
76
|
+
const registry = new MountSourceKindRegistry();
|
|
77
|
+
registry.registerMany([
|
|
78
|
+
{
|
|
79
|
+
key: 'artifact-store-collection',
|
|
80
|
+
resolver: new ArtifactStoreCollectionResolver(deps.artifactStoreClient),
|
|
81
|
+
},
|
|
82
|
+
{
|
|
83
|
+
key: 'artifact-version',
|
|
84
|
+
resolver: new ArtifactVersionResolver(deps.artifactStoreClient),
|
|
85
|
+
},
|
|
86
|
+
{ key: 'kb-space', resolver: new KbSpaceResolver(deps.kbClient) },
|
|
87
|
+
{ key: 'kb-pages', resolver: new KbPagesResolver(deps.kbClient) },
|
|
88
|
+
{ key: 'scm-repo', resolver: new ScmRepoResolver(deps.scmClient) },
|
|
89
|
+
{
|
|
90
|
+
key: 'session-attachment',
|
|
91
|
+
resolver: new SessionAttachmentResolver(deps.sessionAttachmentClient),
|
|
92
|
+
},
|
|
93
|
+
{
|
|
94
|
+
key: 'deliverable-specs',
|
|
95
|
+
resolver: new DeliverableSpecsResolver(deps.deliverableSpecsClient),
|
|
96
|
+
},
|
|
97
|
+
{ key: 'deliverables', resolver: new DeliverablesResolver(deps.artifactStoreClient) },
|
|
98
|
+
{ key: 'static-literal', resolver: new StaticLiteralResolver() },
|
|
99
|
+
// ── Platform-rendered (mount-apply pipeline for `.opencode/` and
|
|
100
|
+
// AGENTS.md / context.json) ──
|
|
101
|
+
{
|
|
102
|
+
key: 'agent-definition',
|
|
103
|
+
resolver: new AgentDefinitionResolver(deps.llmRegistryClient),
|
|
104
|
+
},
|
|
105
|
+
{
|
|
106
|
+
key: 'skill-bundle',
|
|
107
|
+
resolver: new SkillBundleResolver(deps.skillRegistryClient),
|
|
108
|
+
},
|
|
109
|
+
{
|
|
110
|
+
key: 'instruction-section',
|
|
111
|
+
resolver: new InstructionSectionResolver(deps.llmRegistryClient),
|
|
112
|
+
},
|
|
113
|
+
]);
|
|
114
|
+
// Three rendered-* resolvers share one cache so a single mount-apply
|
|
115
|
+
// hits `agent-run-context/render` once for AGENTS.md + context.json +
|
|
116
|
+
// system-overlay.
|
|
117
|
+
const renderCache = new RenderedAgentRunContextCache(deps.llmRegistryClient);
|
|
118
|
+
registry.registerMany([
|
|
119
|
+
{
|
|
120
|
+
key: 'rendered-agents-md',
|
|
121
|
+
resolver: new RenderedAgentsMdResolver(renderCache),
|
|
122
|
+
},
|
|
123
|
+
{
|
|
124
|
+
key: 'rendered-context-json',
|
|
125
|
+
resolver: new RenderedContextJsonResolver(renderCache),
|
|
126
|
+
},
|
|
127
|
+
{
|
|
128
|
+
key: 'rendered-system-overlay',
|
|
129
|
+
resolver: new RenderedSystemOverlayResolver(renderCache),
|
|
130
|
+
},
|
|
131
|
+
]);
|
|
132
|
+
return registry;
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
export interface RuntimeMountKindRegistration {
|
|
136
|
+
readonly key: string;
|
|
137
|
+
readonly displayName: string;
|
|
138
|
+
readonly apply: (ctx: unknown) => Promise<void>;
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
/**
|
|
142
|
+
* Replaces the hardcoded `RuntimeMountKind` switch in
|
|
143
|
+
* `agent-session-api`. Each agent-session profile (and any
|
|
144
|
+
* biome-defined profile) registers its mount strategy here.
|
|
145
|
+
*/
|
|
146
|
+
export class RuntimeMountKindRegistry extends Registry<string, RuntimeMountKindRegistration> {
|
|
147
|
+
constructor(seed?: readonly RuntimeMountKindRegistration[]) {
|
|
148
|
+
super(seed ? { name: 'RuntimeMountKindRegistry', seed } : { name: 'RuntimeMountKindRegistry' });
|
|
149
|
+
}
|
|
150
|
+
}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import type { MountResolver } from '../mount-resolver';
|
|
2
|
+
import type { MountSource } from '../mount-source';
|
|
3
|
+
import type { LlmRegistryClient } from './clients';
|
|
4
|
+
import type { ResolveContext, ResolveSlotContext, ResolvedMountEntries } from './types';
|
|
5
|
+
import { assertAuthHeaders } from './utils/auth';
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* `agent-definition` mount kind — emits one `<slug>.md` file under the
|
|
9
|
+
* `agent-bundles` slot (`/workspace/.opencode/agents/`). Per OpenCode
|
|
10
|
+
* convention, primary agents and sub-agents share the same directory
|
|
11
|
+
* and are differentiated by frontmatter `mode`.
|
|
12
|
+
*
|
|
13
|
+
* Source data lives in llm-registry-api's `AgentDefinition` table and
|
|
14
|
+
* is rendered with frontmatter by the `BundleFileService`. This
|
|
15
|
+
* resolver simply forwards the actor's auth headers and writes the
|
|
16
|
+
* bytes into the slot.
|
|
17
|
+
*/
|
|
18
|
+
export class AgentDefinitionResolver implements MountResolver<'agent-definition'> {
|
|
19
|
+
readonly kind = 'agent-definition' as const;
|
|
20
|
+
|
|
21
|
+
constructor(private readonly client: LlmRegistryClient) {}
|
|
22
|
+
|
|
23
|
+
async *resolve(
|
|
24
|
+
source: Extract<MountSource, { kind: 'agent-definition' }>,
|
|
25
|
+
slotCtx: ResolveSlotContext,
|
|
26
|
+
ctx: ResolveContext,
|
|
27
|
+
): ResolvedMountEntries {
|
|
28
|
+
const headers = assertAuthHeaders(ctx);
|
|
29
|
+
const file = await this.client.fetchAgentBundleFile(
|
|
30
|
+
{
|
|
31
|
+
slug: source.agentSlug,
|
|
32
|
+
agentMode: source.agentMode,
|
|
33
|
+
},
|
|
34
|
+
headers,
|
|
35
|
+
);
|
|
36
|
+
yield {
|
|
37
|
+
// Writer composes slot + entryRelPath + relPath. The mount plan
|
|
38
|
+
// already sets entryRelPath to "<slug>.md", so resolver relPath
|
|
39
|
+
// must stay empty to avoid duplicate nesting.
|
|
40
|
+
relPath: '',
|
|
41
|
+
mode: slotCtx.mode,
|
|
42
|
+
body: { kind: 'literal', bytes: Buffer.from(file.content, 'utf8') },
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import type { MountResolver } from '../mount-resolver';
|
|
2
|
+
import type { MountSource } from '../mount-source';
|
|
3
|
+
import type { ResolveContext, ResolveSlotContext, ResolvedMountEntries } from './types';
|
|
4
|
+
import type { ArtifactStoreClient } from './clients';
|
|
5
|
+
import { assertAuthHeaders } from './utils/auth';
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* `artifact-store-collection` mount kind — streams every blob in a
|
|
9
|
+
* collection into the slot. Each blob lands at the path the upstream
|
|
10
|
+
* service declares in its metadata (typically the relative path the
|
|
11
|
+
* blob was emitted with).
|
|
12
|
+
*
|
|
13
|
+
* Bytes are streamed end-to-end: the resolver yields `MountEntry`
|
|
14
|
+
* objects with `body.kind = 'stream'`, never buffering blob contents
|
|
15
|
+
* in memory.
|
|
16
|
+
*/
|
|
17
|
+
export class ArtifactStoreCollectionResolver
|
|
18
|
+
implements MountResolver<'artifact-store-collection'>
|
|
19
|
+
{
|
|
20
|
+
readonly kind = 'artifact-store-collection' as const;
|
|
21
|
+
|
|
22
|
+
constructor(private readonly client: ArtifactStoreClient) {}
|
|
23
|
+
|
|
24
|
+
async *resolve(
|
|
25
|
+
source: Extract<MountSource, { kind: 'artifact-store-collection' }>,
|
|
26
|
+
slotCtx: ResolveSlotContext,
|
|
27
|
+
ctx: ResolveContext,
|
|
28
|
+
): ResolvedMountEntries {
|
|
29
|
+
const headers = assertAuthHeaders(ctx);
|
|
30
|
+
const collection = await this.client.streamCollection(source.collectionId, headers);
|
|
31
|
+
for await (const blob of collection.blobs) {
|
|
32
|
+
yield {
|
|
33
|
+
relPath: blob.metadata.relPath,
|
|
34
|
+
mode: slotCtx.mode,
|
|
35
|
+
body: {
|
|
36
|
+
kind: 'stream',
|
|
37
|
+
readable: blob.stream,
|
|
38
|
+
sizeHint: blob.metadata.sizeBytes,
|
|
39
|
+
},
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import type { MountResolver } from '../mount-resolver';
|
|
2
|
+
import type { MountSource } from '../mount-source';
|
|
3
|
+
import type { ResolveContext, ResolveSlotContext, ResolvedMountEntries } from './types';
|
|
4
|
+
import type { ArtifactStoreClient } from './clients';
|
|
5
|
+
import { assertAuthHeaders } from './utils/auth';
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* `artifact-version` mount kind — materialises one artifact-store version
|
|
9
|
+
* as a single file at the entry's path.
|
|
10
|
+
*
|
|
11
|
+
* Powers the "produce-then-mount" hand-off pattern: an upstream activity
|
|
12
|
+
* (e.g. `xema/http@v1` with `outputMode: artifact`) emits a versioned
|
|
13
|
+
* artifact; the downstream agent declares an `inputArtifacts` entry that
|
|
14
|
+
* lands the bytes inside `/workspace/<slot>/<fileName>`. The agent reads
|
|
15
|
+
* the file via its tool surface instead of receiving the bytes inline
|
|
16
|
+
* through the agent-run-context prompt, avoiding the 1.2 MB blow-up that
|
|
17
|
+
* killed demo-06.
|
|
18
|
+
*
|
|
19
|
+
* The resolver intentionally yields a `literal` body (full bytes in
|
|
20
|
+
* memory) rather than a `stream`: artifact-store inline payloads are
|
|
21
|
+
* already memory-resident on the upstream and capped by the platform
|
|
22
|
+
* 10 MB body limit, so streaming would add complexity without saving
|
|
23
|
+
* RSS. Larger artifacts should use the blob storage path with a
|
|
24
|
+
* dedicated streaming kind — not retrofitted onto this resolver.
|
|
25
|
+
*/
|
|
26
|
+
export class ArtifactVersionResolver implements MountResolver<'artifact-version'> {
|
|
27
|
+
readonly kind = 'artifact-version' as const;
|
|
28
|
+
|
|
29
|
+
constructor(private readonly client: ArtifactStoreClient) {}
|
|
30
|
+
|
|
31
|
+
async *resolve(
|
|
32
|
+
source: Extract<MountSource, { kind: 'artifact-version' }>,
|
|
33
|
+
slotCtx: ResolveSlotContext,
|
|
34
|
+
ctx: ResolveContext,
|
|
35
|
+
): ResolvedMountEntries {
|
|
36
|
+
const headers = assertAuthHeaders(ctx);
|
|
37
|
+
const content = await this.client.fetchVersionContent(
|
|
38
|
+
source.artifactId,
|
|
39
|
+
source.version,
|
|
40
|
+
source.payloadField,
|
|
41
|
+
headers,
|
|
42
|
+
);
|
|
43
|
+
yield {
|
|
44
|
+
relPath: source.fileName,
|
|
45
|
+
mode: slotCtx.mode,
|
|
46
|
+
body: {
|
|
47
|
+
kind: 'literal',
|
|
48
|
+
bytes: content.bytes,
|
|
49
|
+
},
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
}
|