@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,297 @@
|
|
|
1
|
+
import type { Readable } from 'node:stream';
|
|
2
|
+
import type { AuthHeaders } from './utils/auth';
|
|
3
|
+
|
|
4
|
+
// ─── Narrow client interfaces ────────────────────────────────────────────────
|
|
5
|
+
//
|
|
6
|
+
// The kernel SDK never imports a concrete Orval client; consumers
|
|
7
|
+
// (workspace-proxy) provide implementations that delegate to the real
|
|
8
|
+
// clients with per-call header forwarding.
|
|
9
|
+
//
|
|
10
|
+
// Each interface is intentionally minimal — only the calls the matching
|
|
11
|
+
// resolver needs. Adding a method to satisfy a new resolver requires
|
|
12
|
+
// extending both the interface AND the workspace-proxy implementation
|
|
13
|
+
// in lockstep. CI boundary check (epoch 6) keeps the kernel free of
|
|
14
|
+
// service imports.
|
|
15
|
+
|
|
16
|
+
export interface ArtifactBlobMetadata {
|
|
17
|
+
/** Path the blob should land at, relative to the entry's slot+relPath. */
|
|
18
|
+
readonly relPath: string;
|
|
19
|
+
/** Optional content size hint; resolvers thread it as `sizeHint`. */
|
|
20
|
+
readonly sizeBytes: number | undefined;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
export interface ArtifactCollectionStream {
|
|
24
|
+
readonly blobs: AsyncIterable<{
|
|
25
|
+
readonly metadata: ArtifactBlobMetadata;
|
|
26
|
+
readonly stream: Readable;
|
|
27
|
+
}>;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
export interface ArtifactVersionContent {
|
|
31
|
+
/** Bytes for the resolver to write at the mount entry's path. */
|
|
32
|
+
readonly bytes: Uint8Array;
|
|
33
|
+
/** Resolved content type (from the artifact metadata when available). */
|
|
34
|
+
readonly contentType: string | undefined;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
export interface ArtifactStoreClient {
|
|
38
|
+
/**
|
|
39
|
+
* Stream every blob in a collection. Implementations MUST forward
|
|
40
|
+
* `headers` verbatim to the upstream service so org-scoping is
|
|
41
|
+
* enforced at the upstream (not this layer).
|
|
42
|
+
*/
|
|
43
|
+
streamCollection(
|
|
44
|
+
collectionId: string,
|
|
45
|
+
headers: AuthHeaders,
|
|
46
|
+
): Promise<ArtifactCollectionStream>;
|
|
47
|
+
/**
|
|
48
|
+
* Fetch a single artifact version and materialise its content.
|
|
49
|
+
*
|
|
50
|
+
* If `payloadField` is set, the implementation extracts that field
|
|
51
|
+
* from the artifact's JSON payload and returns its bytes — the field
|
|
52
|
+
* value MUST be a string (`utf-8` is assumed). If unset, the entire
|
|
53
|
+
* payload is serialised as pretty-printed JSON.
|
|
54
|
+
*
|
|
55
|
+
* Fails fast on a missing/wrong-typed `payloadField` so an authoring
|
|
56
|
+
* mistake surfaces as a typed mount error rather than a stringified
|
|
57
|
+
* `[object Object]` landing on disk.
|
|
58
|
+
*/
|
|
59
|
+
fetchVersionContent(
|
|
60
|
+
artifactId: string,
|
|
61
|
+
version: number,
|
|
62
|
+
payloadField: string | undefined,
|
|
63
|
+
headers: AuthHeaders,
|
|
64
|
+
): Promise<ArtifactVersionContent>;
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
export interface KbPageBundle {
|
|
68
|
+
/** Combined, ordered markdown stream of every page in the space. */
|
|
69
|
+
readonly readable: Readable;
|
|
70
|
+
/** Optional total content size hint (sum of pages) when known. */
|
|
71
|
+
readonly sizeBytes: number | undefined;
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
/**
|
|
75
|
+
* Materialised content of a single KB page. Used by the `kb-pages`
|
|
76
|
+
* resolver to land individual pages as separate files under the
|
|
77
|
+
* `references/kb/<spaceId>/` slot — distinct from the bundled
|
|
78
|
+
* `kb-space` flow which produces a single `space.md`.
|
|
79
|
+
*/
|
|
80
|
+
export interface KbPageContent {
|
|
81
|
+
/** Page slug (kebab-case). Used as the on-disk filename stem. */
|
|
82
|
+
readonly slug: string;
|
|
83
|
+
/** Page title (informational; carried for diagnostics). */
|
|
84
|
+
readonly title: string;
|
|
85
|
+
/** Raw markdown bytes (utf-8). */
|
|
86
|
+
readonly body: string;
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
export interface KbClient {
|
|
90
|
+
streamSpaceAsMarkdown(spaceId: string, headers: AuthHeaders): Promise<KbPageBundle>;
|
|
91
|
+
/**
|
|
92
|
+
* Fetch the rendered markdown content of a single page within a
|
|
93
|
+
* space. Resolver fails fast on a 404 (the mount entry surfaces
|
|
94
|
+
* `MOUNT_SOURCE_NOT_FOUND`) so a stale page selection never lands as
|
|
95
|
+
* a silent empty file.
|
|
96
|
+
*/
|
|
97
|
+
fetchPageMarkdown(
|
|
98
|
+
spaceId: string,
|
|
99
|
+
pageSlug: string,
|
|
100
|
+
headers: AuthHeaders,
|
|
101
|
+
): Promise<KbPageContent>;
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
export interface ScmRepoCheckoutInstruction {
|
|
105
|
+
readonly cloneUrl: string;
|
|
106
|
+
readonly ref: string;
|
|
107
|
+
readonly depth: number;
|
|
108
|
+
readonly filter: string | undefined;
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
export interface ScmClient {
|
|
112
|
+
/**
|
|
113
|
+
* Returns the metadata needed for the writer phase to invoke
|
|
114
|
+
* `git clone` into the staging directory. Bytes are not transferred
|
|
115
|
+
* through the proxy itself; the proxy spawns `git` which streams
|
|
116
|
+
* directly to disk.
|
|
117
|
+
*/
|
|
118
|
+
resolveCheckout(
|
|
119
|
+
repoRef: string,
|
|
120
|
+
ref: string,
|
|
121
|
+
headers: AuthHeaders,
|
|
122
|
+
): Promise<ScmRepoCheckoutInstruction>;
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
export interface SessionAttachmentItem {
|
|
126
|
+
readonly relPath: string;
|
|
127
|
+
readonly sizeBytes: number | undefined;
|
|
128
|
+
readonly readable: Readable;
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
export interface SessionAttachmentClient {
|
|
132
|
+
streamSessionAttachments(
|
|
133
|
+
sessionId: string,
|
|
134
|
+
headers: AuthHeaders,
|
|
135
|
+
): Promise<AsyncIterable<SessionAttachmentItem>>;
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
export interface DeliverableSpecBundle {
|
|
139
|
+
/**
|
|
140
|
+
* Files that compose the spec on disk: `manifest.json`, optional
|
|
141
|
+
* `schema.json` / `schema.zod.ts`, optional `template.{md,docx,...}`,
|
|
142
|
+
* optional `assets/*`. Each file is small enough to ship as bytes.
|
|
143
|
+
*/
|
|
144
|
+
readonly files: ReadonlyArray<{
|
|
145
|
+
readonly relPath: string;
|
|
146
|
+
readonly bytes: Uint8Array;
|
|
147
|
+
}>;
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
export interface DeliverableSpecsClient {
|
|
151
|
+
fetchSpecBundle(
|
|
152
|
+
contractKey: string,
|
|
153
|
+
headers: AuthHeaders,
|
|
154
|
+
): Promise<DeliverableSpecBundle>;
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
/**
|
|
158
|
+
* One bundled resource inside a skill — a reference doc, script, asset,
|
|
159
|
+
* or template that ships alongside `SKILL.md`. `contentBase64` carries
|
|
160
|
+
* the raw bytes so binary assets survive the JSON wire intact.
|
|
161
|
+
*/
|
|
162
|
+
export interface SkillBundleResource {
|
|
163
|
+
/** Path of the file relative to the skill directory. */
|
|
164
|
+
readonly relPath: string;
|
|
165
|
+
/** Resource classification surfaced by skill-registry-api. */
|
|
166
|
+
readonly type: string;
|
|
167
|
+
/** Decoded byte size; carried for diagnostics. */
|
|
168
|
+
readonly sizeBytes: number;
|
|
169
|
+
/** Base64-encoded raw bytes of the resource. */
|
|
170
|
+
readonly contentBase64: string;
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
/**
|
|
174
|
+
* A complete skill bundle: the raw `SKILL.md` text plus every bundled
|
|
175
|
+
* resource. The `skill-bundle` resolver materialises `SKILL.md` and one
|
|
176
|
+
* file per resource under `<skill-bundles slot>/<skillKey>/`.
|
|
177
|
+
*/
|
|
178
|
+
export interface SkillBundle {
|
|
179
|
+
/** Hierarchical skill slug requested. */
|
|
180
|
+
readonly slug: string;
|
|
181
|
+
/** Raw `SKILL.md` markdown text. */
|
|
182
|
+
readonly skillMarkdown: string;
|
|
183
|
+
/** Bundled resources shipped alongside `SKILL.md`. */
|
|
184
|
+
readonly resources: readonly SkillBundleResource[];
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
/**
|
|
188
|
+
* Narrow client for skill-registry-api's multi-file skill-bundle
|
|
189
|
+
* endpoint. The implementation lives in workspace-proxy and delegates to
|
|
190
|
+
* the generated Orval client with `headers` forwarded verbatim for
|
|
191
|
+
* tenant-scoped auth.
|
|
192
|
+
*/
|
|
193
|
+
export interface SkillRegistryClient {
|
|
194
|
+
/**
|
|
195
|
+
* `GET /skills/bundle?slug=<hierarchical-slug>`. Returns the raw
|
|
196
|
+
* `SKILL.md` text plus every bundled resource (base64-encoded bytes).
|
|
197
|
+
*/
|
|
198
|
+
fetchSkillBundle(slug: string, headers: AuthHeaders): Promise<SkillBundle>;
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
/**
|
|
202
|
+
* Per-resource bundle response from llm-registry-api. Mirrors the shape
|
|
203
|
+
* of `BundleFileResponseDto` in the registry service. The kernel SDK
|
|
204
|
+
* does not import the DTO directly so this stays runtime-dep-free.
|
|
205
|
+
*/
|
|
206
|
+
export interface LlmRegistryBundleFile {
|
|
207
|
+
readonly key: string;
|
|
208
|
+
readonly content: string;
|
|
209
|
+
readonly contentHash: string;
|
|
210
|
+
}
|
|
211
|
+
|
|
212
|
+
/**
|
|
213
|
+
* Rendered AGENTS.md + context.json + system-overlay from llm-registry-
|
|
214
|
+
* api's `agent-run-context/render` endpoint. One render call serves
|
|
215
|
+
* three single-file slots — the resolvers split the response into one
|
|
216
|
+
* entry each. Resolvers cache the response by `{ applyId,
|
|
217
|
+
* renderEndpointVersion }` so a single mount-apply hits the upstream
|
|
218
|
+
* once for all three.
|
|
219
|
+
*/
|
|
220
|
+
export interface AgentRunContextRender {
|
|
221
|
+
readonly agentsMd: string;
|
|
222
|
+
readonly contextJson: Readonly<Record<string, unknown>>;
|
|
223
|
+
readonly systemOverlay: string;
|
|
224
|
+
}
|
|
225
|
+
|
|
226
|
+
/**
|
|
227
|
+
* Narrow client for llm-registry-api's per-resource bundle endpoints +
|
|
228
|
+
* the agent-run-context render. Implementations live in workspace-proxy
|
|
229
|
+
* and delegate to the generated Orval client with `headers` forwarded
|
|
230
|
+
* verbatim for tenant-scoped auth.
|
|
231
|
+
*/
|
|
232
|
+
export interface LlmRegistryClient {
|
|
233
|
+
/**
|
|
234
|
+
* `GET /agent-definitions/internal/agents/:slug/bundle`. Returns the
|
|
235
|
+
* `.opencode/agents/<slug>.md` bytes for the requested agent at the
|
|
236
|
+
* highest matching scope tier (project → org → biome → system).
|
|
237
|
+
*/
|
|
238
|
+
fetchAgentBundleFile(
|
|
239
|
+
params: {
|
|
240
|
+
readonly slug: string;
|
|
241
|
+
readonly agentMode: 'primary' | 'subagent';
|
|
242
|
+
},
|
|
243
|
+
headers: AuthHeaders,
|
|
244
|
+
): Promise<LlmRegistryBundleFile>;
|
|
245
|
+
|
|
246
|
+
/**
|
|
247
|
+
* `GET /agent-definitions/internal/instruction-sections/:sectionKey/bundle`.
|
|
248
|
+
* Returns the markdown for one instruction section. Mounted at
|
|
249
|
+
* `/workspace/.xema/instructions/<sectionKey>.md` and auto-discovered
|
|
250
|
+
* by OpenCode via the static `instructions` glob.
|
|
251
|
+
*/
|
|
252
|
+
fetchInstructionSectionBundleFile(
|
|
253
|
+
params: { readonly sectionKey: string },
|
|
254
|
+
headers: AuthHeaders,
|
|
255
|
+
): Promise<LlmRegistryBundleFile>;
|
|
256
|
+
|
|
257
|
+
/**
|
|
258
|
+
* `POST /agent-run-context/render`. Returns the rendered AGENTS.md +
|
|
259
|
+
* context.json + system-overlay for the invocation. Called by all
|
|
260
|
+
* three rendered-* resolvers (agents-md / context-json /
|
|
261
|
+
* system-overlay) — the resolver-shared cache coalesces the three
|
|
262
|
+
* calls into one upstream request per mount-apply by hashing the
|
|
263
|
+
* params consistently.
|
|
264
|
+
*/
|
|
265
|
+
renderAgentRunContext(
|
|
266
|
+
params: {
|
|
267
|
+
readonly agentSlug: string;
|
|
268
|
+
readonly projectId: string;
|
|
269
|
+
readonly role: string;
|
|
270
|
+
readonly deliverableSpecRef?: string;
|
|
271
|
+
readonly workflowRunId?: string;
|
|
272
|
+
readonly jobRunId?: string;
|
|
273
|
+
readonly sessionId?: string;
|
|
274
|
+
readonly workflowInputs?: Readonly<Record<string, unknown>>;
|
|
275
|
+
readonly mounts?: ReadonlyArray<{
|
|
276
|
+
readonly mount: string;
|
|
277
|
+
readonly mode: 'read-only' | 'read-write';
|
|
278
|
+
}>;
|
|
279
|
+
readonly inputArtifacts?: ReadonlyArray<{
|
|
280
|
+
readonly path: string;
|
|
281
|
+
readonly contentType?: string;
|
|
282
|
+
readonly sourceArtifactId: string;
|
|
283
|
+
readonly sourceVersion: number;
|
|
284
|
+
}>;
|
|
285
|
+
readonly workingFiles?: ReadonlyArray<{
|
|
286
|
+
readonly slug: string;
|
|
287
|
+
readonly path: string;
|
|
288
|
+
readonly format: 'markdown' | 'html' | 'json' | 'yaml' | 'text';
|
|
289
|
+
readonly syncDirection: 'down-only' | 'up-only' | 'bidirectional';
|
|
290
|
+
readonly sourceKind: string;
|
|
291
|
+
readonly sourceRef: Readonly<Record<string, string>>;
|
|
292
|
+
}>;
|
|
293
|
+
readonly hasRetryContext?: boolean;
|
|
294
|
+
},
|
|
295
|
+
headers: AuthHeaders,
|
|
296
|
+
): Promise<AgentRunContextRender>;
|
|
297
|
+
}
|
|
@@ -0,0 +1,33 @@
|
|
|
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 { DeliverableSpecsClient } from './clients';
|
|
5
|
+
import { assertAuthHeaders } from './utils/auth';
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* `deliverable-specs` mount kind — fetches the rendered spec bundle
|
|
9
|
+
* (manifest.json + schema files + template + assets) and emits each
|
|
10
|
+
* file as a literal MountEntry. Bundle files are typically small (KB,
|
|
11
|
+
* not MB) so literal bytes are appropriate.
|
|
12
|
+
*/
|
|
13
|
+
export class DeliverableSpecsResolver implements MountResolver<'deliverable-specs'> {
|
|
14
|
+
readonly kind = 'deliverable-specs' as const;
|
|
15
|
+
|
|
16
|
+
constructor(private readonly client: DeliverableSpecsClient) {}
|
|
17
|
+
|
|
18
|
+
async *resolve(
|
|
19
|
+
source: Extract<MountSource, { kind: 'deliverable-specs' }>,
|
|
20
|
+
slotCtx: ResolveSlotContext,
|
|
21
|
+
ctx: ResolveContext,
|
|
22
|
+
): ResolvedMountEntries {
|
|
23
|
+
const headers = assertAuthHeaders(ctx);
|
|
24
|
+
const bundle = await this.client.fetchSpecBundle(source.contractKey, headers);
|
|
25
|
+
for (const file of bundle.files) {
|
|
26
|
+
yield {
|
|
27
|
+
relPath: file.relPath,
|
|
28
|
+
mode: slotCtx.mode,
|
|
29
|
+
body: { kind: 'literal', bytes: file.bytes },
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
}
|
|
@@ -0,0 +1,41 @@
|
|
|
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
|
+
* `deliverables` mount kind — agent-authored outputs from an upstream
|
|
9
|
+
* pipeline phase. Backed by the same artifact-store substrate as
|
|
10
|
+
* `artifact-store-collection`; the caller-supplied `contractKey`
|
|
11
|
+
* resolves to the collection holding that phase's deliverables.
|
|
12
|
+
*
|
|
13
|
+
* Mode flows from the plan entry through `slotCtx.mode` — the
|
|
14
|
+
* composer is the single source of truth for whether the slot is
|
|
15
|
+
* read-only or read-write per the manifest.
|
|
16
|
+
*/
|
|
17
|
+
export class DeliverablesResolver implements MountResolver<'deliverables'> {
|
|
18
|
+
readonly kind = 'deliverables' as const;
|
|
19
|
+
|
|
20
|
+
constructor(private readonly client: ArtifactStoreClient) {}
|
|
21
|
+
|
|
22
|
+
async *resolve(
|
|
23
|
+
source: Extract<MountSource, { kind: 'deliverables' }>,
|
|
24
|
+
slotCtx: ResolveSlotContext,
|
|
25
|
+
ctx: ResolveContext,
|
|
26
|
+
): ResolvedMountEntries {
|
|
27
|
+
const headers = assertAuthHeaders(ctx);
|
|
28
|
+
const collection = await this.client.streamCollection(source.contractKey, headers);
|
|
29
|
+
for await (const blob of collection.blobs) {
|
|
30
|
+
yield {
|
|
31
|
+
relPath: blob.metadata.relPath,
|
|
32
|
+
mode: slotCtx.mode,
|
|
33
|
+
body: {
|
|
34
|
+
kind: 'stream',
|
|
35
|
+
readable: blob.stream,
|
|
36
|
+
sizeHint: blob.metadata.sizeBytes,
|
|
37
|
+
},
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
export * from './types';
|
|
2
|
+
export * from './clients';
|
|
3
|
+
export * from './utils/auth';
|
|
4
|
+
export * from './utils/size-cap';
|
|
5
|
+
export * from './utils/streaming';
|
|
6
|
+
export * from './static-literal.resolver';
|
|
7
|
+
export * from './artifact-store-collection.resolver';
|
|
8
|
+
export * from './kb-space.resolver';
|
|
9
|
+
export * from './scm-repo.resolver';
|
|
10
|
+
export * from './session-attachment.resolver';
|
|
11
|
+
export * from './deliverable-specs.resolver';
|
|
12
|
+
export * from './deliverables.resolver';
|
|
13
|
+
export * from './agent-definition.resolver';
|
|
14
|
+
export * from './skill-bundle.resolver';
|
|
15
|
+
export * from './instruction-section.resolver';
|
|
16
|
+
export * from './rendered-agents-md.resolver';
|
|
17
|
+
export * from './rendered-context-json.resolver';
|
|
18
|
+
export * from './rendered-system-overlay.resolver';
|
|
19
|
+
export * from './utils/agent-run-context-cache';
|
|
@@ -0,0 +1,36 @@
|
|
|
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
|
+
* `instruction-section` mount kind — emits one `<sectionKey>.md` file
|
|
9
|
+
* under the `instructions` slot (`/workspace/.xema/instructions/`).
|
|
10
|
+
* Auto-discovered by OpenCode at session start via the static
|
|
11
|
+
* `instructions` glob declared in base `opencode.jsonc`.
|
|
12
|
+
*/
|
|
13
|
+
export class InstructionSectionResolver implements MountResolver<'instruction-section'> {
|
|
14
|
+
readonly kind = 'instruction-section' as const;
|
|
15
|
+
|
|
16
|
+
constructor(private readonly client: LlmRegistryClient) {}
|
|
17
|
+
|
|
18
|
+
async *resolve(
|
|
19
|
+
source: Extract<MountSource, { kind: 'instruction-section' }>,
|
|
20
|
+
slotCtx: ResolveSlotContext,
|
|
21
|
+
ctx: ResolveContext,
|
|
22
|
+
): ResolvedMountEntries {
|
|
23
|
+
const headers = assertAuthHeaders(ctx);
|
|
24
|
+
const file = await this.client.fetchInstructionSectionBundleFile(
|
|
25
|
+
{ sectionKey: source.sectionKey },
|
|
26
|
+
headers,
|
|
27
|
+
);
|
|
28
|
+
yield {
|
|
29
|
+
// Writer composes slot + entryRelPath + relPath. The mount plan
|
|
30
|
+
// already sets entryRelPath to "<sectionKey>.md".
|
|
31
|
+
relPath: '',
|
|
32
|
+
mode: slotCtx.mode,
|
|
33
|
+
body: { kind: 'literal', bytes: Buffer.from(file.content, 'utf8') },
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
}
|
|
@@ -0,0 +1,62 @@
|
|
|
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 { KbClient } from './clients';
|
|
5
|
+
import { assertAuthHeaders } from './utils/auth';
|
|
6
|
+
import { MountSourceUpstreamError } from '../errors';
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* `kb-pages` mount kind — materialises a curated set of pages from a
|
|
10
|
+
* single KB space as individual markdown files under the entry's
|
|
11
|
+
* slot+relPath. Each page lands at `<pageSlug>.md`.
|
|
12
|
+
*
|
|
13
|
+
* Distinct from `kb-space` (which concatenates an entire space into one
|
|
14
|
+
* `space.md` bundle). The `kb-pages` flow is the building block for
|
|
15
|
+
* runtime KB mounting on Interactive Sessions / Brainstorming — the
|
|
16
|
+
* user picks individual pages to attach to a live session.
|
|
17
|
+
*
|
|
18
|
+
* Fail-fast contract:
|
|
19
|
+
* - empty `pageSlugs` is a programming error (the caller is expected
|
|
20
|
+
* to drop empty mount entries before composing the plan); we throw
|
|
21
|
+
* so a stale composer state cannot land a zero-byte mount.
|
|
22
|
+
* - per-page 404 / upstream errors propagate as
|
|
23
|
+
* `MountSourceUpstreamError` (mapped by workspace-proxy to
|
|
24
|
+
* `MOUNT_SOURCE_NOT_FOUND` / `MOUNT_UPSTREAM_BAD_GATEWAY`).
|
|
25
|
+
*/
|
|
26
|
+
export class KbPagesResolver implements MountResolver<'kb-pages'> {
|
|
27
|
+
readonly kind = 'kb-pages' as const;
|
|
28
|
+
|
|
29
|
+
constructor(private readonly client: KbClient) {}
|
|
30
|
+
|
|
31
|
+
async *resolve(
|
|
32
|
+
source: Extract<MountSource, { kind: 'kb-pages' }>,
|
|
33
|
+
slotCtx: ResolveSlotContext,
|
|
34
|
+
ctx: ResolveContext,
|
|
35
|
+
): ResolvedMountEntries {
|
|
36
|
+
const headers = assertAuthHeaders(ctx);
|
|
37
|
+
// De-duplicate slugs preserving first-occurrence order so the
|
|
38
|
+
// on-disk layout is deterministic regardless of caller-side
|
|
39
|
+
// accidental duplicates.
|
|
40
|
+
const seen = new Set<string>();
|
|
41
|
+
const slugs = source.pageSlugs.filter((s) => {
|
|
42
|
+
if (seen.has(s)) return false;
|
|
43
|
+
seen.add(s);
|
|
44
|
+
return true;
|
|
45
|
+
});
|
|
46
|
+
if (slugs.length === 0) {
|
|
47
|
+
throw new MountSourceUpstreamError(
|
|
48
|
+
`kb-pages mount for space '${source.spaceId}' has an empty pageSlugs[] selection`,
|
|
49
|
+
{ spaceId: source.spaceId },
|
|
50
|
+
);
|
|
51
|
+
}
|
|
52
|
+
for (const pageSlug of slugs) {
|
|
53
|
+
const page = await this.client.fetchPageMarkdown(source.spaceId, pageSlug, headers);
|
|
54
|
+
const bytes = Buffer.from(page.body, 'utf8');
|
|
55
|
+
yield {
|
|
56
|
+
relPath: `${pageSlug}.md`,
|
|
57
|
+
mode: slotCtx.mode,
|
|
58
|
+
body: { kind: 'literal', bytes },
|
|
59
|
+
};
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
}
|
|
@@ -0,0 +1,34 @@
|
|
|
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 { KbClient } from './clients';
|
|
5
|
+
import { assertAuthHeaders } from './utils/auth';
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* `kb-space` mount kind — streams the rendered markdown of every page
|
|
9
|
+
* in a knowledge-base space into a single bundle file. The bundle is
|
|
10
|
+
* landed at `space.md` within the entry's slot+relPath.
|
|
11
|
+
*/
|
|
12
|
+
export class KbSpaceResolver implements MountResolver<'kb-space'> {
|
|
13
|
+
readonly kind = 'kb-space' as const;
|
|
14
|
+
|
|
15
|
+
constructor(private readonly client: KbClient) {}
|
|
16
|
+
|
|
17
|
+
async *resolve(
|
|
18
|
+
source: Extract<MountSource, { kind: 'kb-space' }>,
|
|
19
|
+
slotCtx: ResolveSlotContext,
|
|
20
|
+
ctx: ResolveContext,
|
|
21
|
+
): ResolvedMountEntries {
|
|
22
|
+
const headers = assertAuthHeaders(ctx);
|
|
23
|
+
const bundle = await this.client.streamSpaceAsMarkdown(source.spaceId, headers);
|
|
24
|
+
yield {
|
|
25
|
+
relPath: 'space.md',
|
|
26
|
+
mode: slotCtx.mode,
|
|
27
|
+
body: {
|
|
28
|
+
kind: 'stream',
|
|
29
|
+
readable: bundle.readable,
|
|
30
|
+
sizeHint: bundle.sizeBytes,
|
|
31
|
+
},
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import type { MountResolver } from '../mount-resolver';
|
|
2
|
+
import type { MountSource } from '../mount-source';
|
|
3
|
+
import type { ResolveContext, ResolveSlotContext, ResolvedMountEntries } from './types';
|
|
4
|
+
import { assertAuthHeaders } from './utils/auth';
|
|
5
|
+
import {
|
|
6
|
+
renderParamsFromSource,
|
|
7
|
+
type RenderedAgentRunContextCache,
|
|
8
|
+
} from './utils/agent-run-context-cache';
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* `rendered-agents-md` mount kind — emits the rendered `AGENTS.md`
|
|
12
|
+
* bytes for the `agents-md` single-file slot (`/workspace/AGENTS.md`).
|
|
13
|
+
*
|
|
14
|
+
* Single-file slots require `relPath === ''` (validated upstream by
|
|
15
|
+
* `plan-validator`). Shares the `agent-run-context/render` call with
|
|
16
|
+
* `rendered-context-json` + `rendered-system-overlay`. The composer
|
|
17
|
+
* fills the same `RenderedAgentRunContextParams` superset on all three
|
|
18
|
+
* sources and `renderParamsFromSource` projects them identically — so
|
|
19
|
+
* the cache coalesces the three resolvers onto one upstream call per
|
|
20
|
+
* mount-apply.
|
|
21
|
+
*/
|
|
22
|
+
export class RenderedAgentsMdResolver implements MountResolver<'rendered-agents-md'> {
|
|
23
|
+
readonly kind = 'rendered-agents-md' as const;
|
|
24
|
+
|
|
25
|
+
constructor(private readonly cache: RenderedAgentRunContextCache) {}
|
|
26
|
+
|
|
27
|
+
async *resolve(
|
|
28
|
+
source: Extract<MountSource, { kind: 'rendered-agents-md' }>,
|
|
29
|
+
slotCtx: ResolveSlotContext,
|
|
30
|
+
ctx: ResolveContext,
|
|
31
|
+
): ResolvedMountEntries {
|
|
32
|
+
const headers = assertAuthHeaders(ctx);
|
|
33
|
+
const rendered = await this.cache.render(renderParamsFromSource(source), headers);
|
|
34
|
+
yield {
|
|
35
|
+
relPath: '',
|
|
36
|
+
mode: slotCtx.mode,
|
|
37
|
+
body: { kind: 'literal', bytes: Buffer.from(rendered.agentsMd, 'utf8') },
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import type { MountResolver } from '../mount-resolver';
|
|
2
|
+
import type { MountSource } from '../mount-source';
|
|
3
|
+
import type { ResolveContext, ResolveSlotContext, ResolvedMountEntries } from './types';
|
|
4
|
+
import { assertAuthHeaders } from './utils/auth';
|
|
5
|
+
import {
|
|
6
|
+
renderParamsFromSource,
|
|
7
|
+
type RenderedAgentRunContextCache,
|
|
8
|
+
} from './utils/agent-run-context-cache';
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* `rendered-context-json` mount kind — emits the rendered
|
|
12
|
+
* `context.json` bytes for the `context-json` single-file slot
|
|
13
|
+
* (`/workspace/context.json`).
|
|
14
|
+
*
|
|
15
|
+
* Shares the `agent-run-context/render` call with `rendered-agents-md`
|
|
16
|
+
* + `rendered-system-overlay` via the resolver-bound cache. See
|
|
17
|
+
* `renderParamsFromSource` for why all three resolvers MUST project
|
|
18
|
+
* the source through the same helper.
|
|
19
|
+
*/
|
|
20
|
+
export class RenderedContextJsonResolver
|
|
21
|
+
implements MountResolver<'rendered-context-json'>
|
|
22
|
+
{
|
|
23
|
+
readonly kind = 'rendered-context-json' as const;
|
|
24
|
+
|
|
25
|
+
constructor(private readonly cache: RenderedAgentRunContextCache) {}
|
|
26
|
+
|
|
27
|
+
async *resolve(
|
|
28
|
+
source: Extract<MountSource, { kind: 'rendered-context-json' }>,
|
|
29
|
+
slotCtx: ResolveSlotContext,
|
|
30
|
+
ctx: ResolveContext,
|
|
31
|
+
): ResolvedMountEntries {
|
|
32
|
+
const headers = assertAuthHeaders(ctx);
|
|
33
|
+
const rendered = await this.cache.render(renderParamsFromSource(source), headers);
|
|
34
|
+
const json = JSON.stringify(rendered.contextJson, null, 2);
|
|
35
|
+
yield {
|
|
36
|
+
relPath: '',
|
|
37
|
+
mode: slotCtx.mode,
|
|
38
|
+
body: { kind: 'literal', bytes: Buffer.from(json, 'utf8') },
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import type { MountResolver } from '../mount-resolver';
|
|
2
|
+
import type { MountSource } from '../mount-source';
|
|
3
|
+
import type { ResolveContext, ResolveSlotContext, ResolvedMountEntries } from './types';
|
|
4
|
+
import { assertAuthHeaders } from './utils/auth';
|
|
5
|
+
import {
|
|
6
|
+
renderParamsFromSource,
|
|
7
|
+
type RenderedAgentRunContextCache,
|
|
8
|
+
} from './utils/agent-run-context-cache';
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* `rendered-system-overlay` mount kind — emits the rendered Xema
|
|
12
|
+
* platform overlay for the `system-overlay` single-file slot
|
|
13
|
+
* (`/workspace/.xema/system-overlay.md`).
|
|
14
|
+
*
|
|
15
|
+
* Same `agent-run-context/render` call as `rendered-agents-md` and
|
|
16
|
+
* `rendered-context-json`. See `renderParamsFromSource` for the
|
|
17
|
+
* shared-cache contract that makes the three calls coalesce into one.
|
|
18
|
+
*/
|
|
19
|
+
export class RenderedSystemOverlayResolver
|
|
20
|
+
implements MountResolver<'rendered-system-overlay'>
|
|
21
|
+
{
|
|
22
|
+
readonly kind = 'rendered-system-overlay' as const;
|
|
23
|
+
|
|
24
|
+
constructor(private readonly cache: RenderedAgentRunContextCache) {}
|
|
25
|
+
|
|
26
|
+
async *resolve(
|
|
27
|
+
source: Extract<MountSource, { kind: 'rendered-system-overlay' }>,
|
|
28
|
+
slotCtx: ResolveSlotContext,
|
|
29
|
+
ctx: ResolveContext,
|
|
30
|
+
): ResolvedMountEntries {
|
|
31
|
+
const headers = assertAuthHeaders(ctx);
|
|
32
|
+
const rendered = await this.cache.render(renderParamsFromSource(source), headers);
|
|
33
|
+
yield {
|
|
34
|
+
relPath: '',
|
|
35
|
+
mode: slotCtx.mode,
|
|
36
|
+
body: { kind: 'literal', bytes: Buffer.from(rendered.systemOverlay, 'utf8') },
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
}
|