@spine-event-engine/server 2.0.0-snapshot.24 → 2.0.0-snapshot.26
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/README.md +86 -19
- package/REFERENCE.md +538 -150
- package/dist/agent/agent-acceptance-receipts.d.ts +69 -0
- package/dist/agent/agent-acceptance-receipts.d.ts.map +1 -0
- package/dist/agent/agent-acceptance-receipts.js +198 -0
- package/dist/agent/agent-acceptance-receipts.js.map +1 -0
- package/dist/agent/agent-execution-capacity.d.ts +37 -9
- package/dist/agent/agent-execution-capacity.d.ts.map +1 -1
- package/dist/agent/agent-execution-capacity.js +73 -15
- package/dist/agent/agent-execution-capacity.js.map +1 -1
- package/dist/agent/agent-history.d.ts +33 -12
- package/dist/agent/agent-history.d.ts.map +1 -1
- package/dist/agent/agent-history.js +61 -18
- package/dist/agent/agent-history.js.map +1 -1
- package/dist/agent/agent-live-ai-audit.d.ts +95 -0
- package/dist/agent/agent-live-ai-audit.d.ts.map +1 -0
- package/dist/agent/agent-live-ai-audit.js +290 -0
- package/dist/agent/agent-live-ai-audit.js.map +1 -0
- package/dist/agent/agent-live-ai-runtime.d.ts +300 -0
- package/dist/agent/agent-live-ai-runtime.d.ts.map +1 -0
- package/dist/agent/agent-live-ai-runtime.js +611 -0
- package/dist/agent/agent-live-ai-runtime.js.map +1 -0
- package/dist/agent/agent-live-audit.d.ts +67 -0
- package/dist/agent/agent-live-audit.d.ts.map +1 -0
- package/dist/agent/agent-live-audit.js +121 -0
- package/dist/agent/agent-live-audit.js.map +1 -0
- package/dist/agent/agent-live-budget.d.ts +84 -0
- package/dist/agent/agent-live-budget.d.ts.map +1 -0
- package/dist/agent/agent-live-budget.js +161 -0
- package/dist/agent/agent-live-budget.js.map +1 -0
- package/dist/agent/agent-live-fault.d.ts +18 -0
- package/dist/agent/agent-live-fault.d.ts.map +1 -0
- package/dist/agent/{agent-execution-fault.js → agent-live-fault.js} +7 -7
- package/dist/agent/agent-live-fault.js.map +1 -0
- package/dist/agent/agent-live-inputs.d.ts +74 -0
- package/dist/agent/agent-live-inputs.d.ts.map +1 -0
- package/dist/agent/agent-live-inputs.js +15 -0
- package/dist/agent/agent-live-inputs.js.map +1 -0
- package/dist/agent/agent-live-interaction-events.d.ts +46 -0
- package/dist/agent/agent-live-interaction-events.d.ts.map +1 -0
- package/dist/agent/agent-live-interaction-events.js +104 -0
- package/dist/agent/agent-live-interaction-events.js.map +1 -0
- package/dist/agent/agent-live-mcp-controls.d.ts +129 -0
- package/dist/agent/agent-live-mcp-controls.d.ts.map +1 -0
- package/dist/agent/agent-live-mcp-controls.js +228 -0
- package/dist/agent/agent-live-mcp-controls.js.map +1 -0
- package/dist/agent/agent-live-mcp-host.d.ts +88 -0
- package/dist/agent/agent-live-mcp-host.d.ts.map +1 -0
- package/dist/agent/{agent-mcp-host.js → agent-live-mcp-host.js} +1 -1
- package/dist/agent/agent-live-mcp-host.js.map +1 -0
- package/dist/agent/{agent-mcp-runtime.d.ts → agent-live-mcp-runtime.d.ts} +6 -6
- package/dist/agent/agent-live-mcp-runtime.d.ts.map +1 -0
- package/dist/agent/{agent-mcp-runtime.js → agent-live-mcp-runtime.js} +13 -42
- package/dist/agent/agent-live-mcp-runtime.js.map +1 -0
- package/dist/agent/agent-live-read-runtime.d.ts +72 -0
- package/dist/agent/agent-live-read-runtime.d.ts.map +1 -0
- package/dist/agent/agent-live-read-runtime.js +122 -0
- package/dist/agent/agent-live-read-runtime.js.map +1 -0
- package/dist/agent/agent-model-selection.d.ts +21 -34
- package/dist/agent/agent-model-selection.d.ts.map +1 -1
- package/dist/agent/agent-model-selection.js +61 -78
- package/dist/agent/agent-model-selection.js.map +1 -1
- package/dist/browser/browser-server.d.ts +163 -0
- package/dist/browser/browser-server.d.ts.map +1 -1
- package/dist/browser/browser-server.js +579 -188
- package/dist/browser/browser-server.js.map +1 -1
- package/dist/browser/durable-subscription-bindings.d.ts +5 -0
- package/dist/browser/durable-subscription-bindings.d.ts.map +1 -1
- package/dist/browser/durable-subscription-bindings.js +226 -38
- package/dist/browser/durable-subscription-bindings.js.map +1 -1
- package/dist/browser/options.d.ts +5 -0
- package/dist/browser/options.d.ts.map +1 -1
- package/dist/bus/command-bus.d.ts +17 -18
- package/dist/bus/command-bus.d.ts.map +1 -1
- package/dist/bus/command-bus.js +97 -54
- package/dist/bus/command-bus.js.map +1 -1
- package/dist/bus/command-errors.d.ts +20 -4
- package/dist/bus/command-errors.d.ts.map +1 -1
- package/dist/bus/command-errors.js +47 -7
- package/dist/bus/command-errors.js.map +1 -1
- package/dist/bus/event-bus.d.ts +20 -4
- package/dist/bus/event-bus.d.ts.map +1 -1
- package/dist/bus/event-bus.js +166 -14
- package/dist/bus/event-bus.js.map +1 -1
- package/dist/context/bounded-context.d.ts +169 -98
- package/dist/context/bounded-context.d.ts.map +1 -1
- package/dist/context/bounded-context.js +837 -503
- package/dist/context/bounded-context.js.map +1 -1
- package/dist/context/entity-inbox.d.ts +7 -2
- package/dist/context/entity-inbox.d.ts.map +1 -1
- package/dist/context/entity-inbox.js +22 -13
- package/dist/context/entity-inbox.js.map +1 -1
- package/dist/context/local-inbox-handoff.d.ts +34 -34
- package/dist/context/local-inbox-handoff.d.ts.map +1 -1
- package/dist/context/local-inbox-handoff.js +108 -150
- package/dist/context/local-inbox-handoff.js.map +1 -1
- package/dist/context/projection-handoff.d.ts +2 -2
- package/dist/context/projection-handoff.d.ts.map +1 -1
- package/dist/context/projection-handoff.js +10 -8
- package/dist/context/projection-handoff.js.map +1 -1
- package/dist/context/tenant-index.d.ts +36 -31
- package/dist/context/tenant-index.d.ts.map +1 -1
- package/dist/context/tenant-index.js +123 -125
- package/dist/context/tenant-index.js.map +1 -1
- package/dist/context/tenant-unknown-error.d.ts +33 -0
- package/dist/context/tenant-unknown-error.d.ts.map +1 -0
- package/dist/context/tenant-unknown-error.js +75 -0
- package/dist/context/tenant-unknown-error.js.map +1 -0
- package/dist/delivery/agent-delivery-scope.d.ts +66 -0
- package/dist/delivery/agent-delivery-scope.d.ts.map +1 -0
- package/dist/delivery/agent-delivery-scope.js +44 -0
- package/dist/delivery/agent-delivery-scope.js.map +1 -0
- package/dist/delivery/delivery-builder.d.ts +25 -1
- package/dist/delivery/delivery-builder.d.ts.map +1 -1
- package/dist/delivery/delivery-builder.js +89 -0
- package/dist/delivery/delivery-builder.js.map +1 -1
- package/dist/delivery/delivery-monitor.d.ts +1 -1
- package/dist/delivery/delivery-monitor.js +1 -1
- package/dist/delivery/delivery-run-control.d.ts +6 -0
- package/dist/delivery/delivery-run-control.d.ts.map +1 -1
- package/dist/delivery/delivery-run-control.js +10 -0
- package/dist/delivery/delivery-run-control.js.map +1 -1
- package/dist/delivery/delivery-supervisor.d.ts.map +1 -1
- package/dist/delivery/delivery-supervisor.js +28 -4
- package/dist/delivery/delivery-supervisor.js.map +1 -1
- package/dist/delivery/delivery-tenant.d.ts +17 -0
- package/dist/delivery/delivery-tenant.d.ts.map +1 -0
- package/dist/delivery/delivery-tenant.js +50 -0
- package/dist/delivery/delivery-tenant.js.map +1 -0
- package/dist/delivery/delivery.d.ts +96 -2
- package/dist/delivery/delivery.d.ts.map +1 -1
- package/dist/delivery/delivery.js +693 -53
- package/dist/delivery/delivery.js.map +1 -1
- package/dist/delivery/inbox-records.d.ts.map +1 -1
- package/dist/delivery/inbox-records.js +9 -16
- package/dist/delivery/inbox-records.js.map +1 -1
- package/dist/delivery/inbox-storage.d.ts +6 -0
- package/dist/delivery/inbox-storage.d.ts.map +1 -1
- package/dist/delivery/inbox-storage.js +43 -6
- package/dist/delivery/inbox-storage.js.map +1 -1
- package/dist/delivery/inbox.d.ts.map +1 -1
- package/dist/delivery/inbox.js +3 -2
- package/dist/delivery/inbox.js.map +1 -1
- package/dist/delivery/reception-observation.d.ts +12 -4
- package/dist/delivery/reception-observation.d.ts.map +1 -1
- package/dist/delivery/reception-observation.js +14 -3
- package/dist/delivery/reception-observation.js.map +1 -1
- package/dist/delivery/sharded-work-registry.d.ts +6 -0
- package/dist/delivery/sharded-work-registry.d.ts.map +1 -1
- package/dist/delivery/sharded-work-registry.js +41 -4
- package/dist/delivery/sharded-work-registry.js.map +1 -1
- package/dist/entity/entity-storage-descriptor.d.ts.map +1 -1
- package/dist/entity/entity-storage-descriptor.js +7 -4
- package/dist/entity/entity-storage-descriptor.js.map +1 -1
- package/dist/entity/entity.d.ts +59 -0
- package/dist/entity/entity.d.ts.map +1 -1
- package/dist/entity/entity.js +60 -0
- package/dist/entity/entity.js.map +1 -1
- package/dist/handler/app-query-handler.d.ts +60 -0
- package/dist/handler/app-query-handler.d.ts.map +1 -0
- package/dist/{bus/saved-dispatcher-binding.js → handler/app-query-handler.js} +8 -12
- package/dist/handler/app-query-handler.js.map +1 -0
- package/dist/handler/generated-registry-discovery.d.ts +6 -0
- package/dist/handler/generated-registry-discovery.d.ts.map +1 -1
- package/dist/handler/generated-registry-discovery.js +71 -2
- package/dist/handler/generated-registry-discovery.js.map +1 -1
- package/dist/handler/handler-decorators.d.ts +8 -29
- package/dist/handler/handler-decorators.d.ts.map +1 -1
- package/dist/handler/handler-decorators.js +33 -210
- package/dist/handler/handler-decorators.js.map +1 -1
- package/dist/handler/spine-metadata-inventory.d.ts +99 -0
- package/dist/handler/spine-metadata-inventory.d.ts.map +1 -0
- package/dist/handler/spine-metadata-inventory.js +162 -0
- package/dist/handler/spine-metadata-inventory.js.map +1 -0
- package/dist/index.d.ts +9 -5
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +6 -3
- package/dist/index.js.map +1 -1
- package/dist/integration/external-messages.d.ts.map +1 -1
- package/dist/integration/external-messages.js +9 -15
- package/dist/integration/external-messages.js.map +1 -1
- package/dist/integration/integration-broker.d.ts.map +1 -1
- package/dist/integration/integration-broker.js +112 -6
- package/dist/integration/integration-broker.js.map +1 -1
- package/dist/integration/third-party-context.d.ts.map +1 -1
- package/dist/integration/third-party-context.js +7 -10
- package/dist/integration/third-party-context.js.map +1 -1
- package/dist/repository/primitive-id.js +26 -11
- package/dist/repository/primitive-id.js.map +1 -1
- package/dist/repository/repository.d.ts +75 -60
- package/dist/repository/repository.d.ts.map +1 -1
- package/dist/repository/repository.js +1757 -1818
- package/dist/repository/repository.js.map +1 -1
- package/dist/runtime/runtime.d.ts +13 -0
- package/dist/runtime/runtime.d.ts.map +1 -1
- package/dist/runtime/runtime.js +18 -0
- package/dist/runtime/runtime.js.map +1 -1
- package/dist/runtime/signal-metadata.d.ts.map +1 -1
- package/dist/runtime/signal-metadata.js +6 -6
- package/dist/runtime/signal-metadata.js.map +1 -1
- package/dist/runtime/signal-publisher.d.ts +0 -6
- package/dist/runtime/signal-publisher.d.ts.map +1 -1
- package/dist/runtime/signal-publisher.js +1 -9
- package/dist/runtime/signal-publisher.js.map +1 -1
- package/dist/runtime/standalone-handler-runtime.d.ts +0 -7
- package/dist/runtime/standalone-handler-runtime.d.ts.map +1 -1
- package/dist/runtime/standalone-handler-runtime.js +13 -99
- package/dist/runtime/standalone-handler-runtime.js.map +1 -1
- package/dist/server/managed-delivery-gate.d.ts +34 -0
- package/dist/server/managed-delivery-gate.d.ts.map +1 -0
- package/dist/server/managed-delivery-gate.js +70 -0
- package/dist/server/managed-delivery-gate.js.map +1 -0
- package/dist/server/managed-server-application.d.ts +12 -11
- package/dist/server/managed-server-application.d.ts.map +1 -1
- package/dist/server/managed-server-application.js +48 -29
- package/dist/server/managed-server-application.js.map +1 -1
- package/dist/server/node-coordinator.d.ts +18 -5
- package/dist/server/node-coordinator.d.ts.map +1 -1
- package/dist/server/node-coordinator.js +554 -84
- package/dist/server/node-coordinator.js.map +1 -1
- package/dist/server/reserved-spine-rpc-paths.json +1 -0
- package/dist/server/server-environment.d.ts +220 -25
- package/dist/server/server-environment.d.ts.map +1 -1
- package/dist/server/server-environment.js +734 -145
- package/dist/server/server-environment.js.map +1 -1
- package/dist/server/server-log.d.ts +7 -0
- package/dist/server/server-log.d.ts.map +1 -1
- package/dist/server/server-log.js +14 -1
- package/dist/server/server-log.js.map +1 -1
- package/dist/server/server.d.ts +60 -29
- package/dist/server/server.d.ts.map +1 -1
- package/dist/server/server.js +155 -201
- package/dist/server/server.js.map +1 -1
- package/dist/services/app-query-execution.d.ts +53 -0
- package/dist/services/app-query-execution.d.ts.map +1 -0
- package/dist/services/app-query-execution.js +408 -0
- package/dist/services/app-query-execution.js.map +1 -0
- package/dist/services/query-reader.d.ts +32 -7
- package/dist/services/query-reader.d.ts.map +1 -1
- package/dist/services/query-reader.js +22 -2
- package/dist/services/query-reader.js.map +1 -1
- package/dist/services/read-request-status.d.ts +65 -0
- package/dist/services/read-request-status.d.ts.map +1 -0
- package/dist/services/read-request-status.js +151 -0
- package/dist/services/read-request-status.js.map +1 -0
- package/dist/services/spine-services.d.ts +37 -8
- package/dist/services/spine-services.d.ts.map +1 -1
- package/dist/services/spine-services.js +1103 -470
- package/dist/services/spine-services.js.map +1 -1
- package/dist/services/trusted-reader-ingress.d.ts +92 -0
- package/dist/services/trusted-reader-ingress.d.ts.map +1 -0
- package/dist/services/trusted-reader-ingress.js +89 -0
- package/dist/services/trusted-reader-ingress.js.map +1 -0
- package/dist/spi/handler-registry.d.ts +2 -0
- package/dist/spi/handler-registry.d.ts.map +1 -1
- package/dist/spi/handler-registry.js +1 -1
- package/dist/spi/handler-registry.js.map +1 -1
- package/dist/stand/event-origin-filter.js +3 -3
- package/dist/stand/event-origin-filter.js.map +1 -1
- package/dist/stand/read-side-filter-engine.d.ts +46 -0
- package/dist/stand/read-side-filter-engine.d.ts.map +1 -0
- package/dist/stand/read-side-filter-engine.js +356 -0
- package/dist/stand/read-side-filter-engine.js.map +1 -0
- package/dist/stand/read-side-filter.d.ts +247 -0
- package/dist/stand/read-side-filter.d.ts.map +1 -0
- package/dist/stand/read-side-filter.js +39 -0
- package/dist/stand/read-side-filter.js.map +1 -0
- package/dist/stand/read-side-message.d.ts +66 -0
- package/dist/stand/read-side-message.d.ts.map +1 -0
- package/dist/stand/read-side-message.js +167 -0
- package/dist/stand/read-side-message.js.map +1 -0
- package/dist/stand/stand-direct-delivery.d.ts +161 -0
- package/dist/stand/stand-direct-delivery.d.ts.map +1 -0
- package/dist/stand/stand-direct-delivery.js +210 -0
- package/dist/stand/stand-direct-delivery.js.map +1 -0
- package/dist/stand/stand.d.ts +94 -42
- package/dist/stand/stand.d.ts.map +1 -1
- package/dist/stand/stand.js +460 -60
- package/dist/stand/stand.js.map +1 -1
- package/dist/stand/subscription-observer.d.ts.map +1 -1
- package/dist/stand/subscription-observer.js +157 -40
- package/dist/stand/subscription-observer.js.map +1 -1
- package/dist/stand/subscription-read-filters.d.ts +40 -0
- package/dist/stand/subscription-read-filters.d.ts.map +1 -0
- package/dist/stand/subscription-read-filters.js +91 -0
- package/dist/stand/subscription-read-filters.js.map +1 -0
- package/dist/stand/subscription-reader-binding.d.ts +20 -0
- package/dist/stand/subscription-reader-binding.d.ts.map +1 -0
- package/dist/stand/subscription-reader-binding.js +56 -0
- package/dist/stand/subscription-reader-binding.js.map +1 -0
- package/dist/stand/subscription-records.d.ts +30 -3
- package/dist/stand/subscription-records.d.ts.map +1 -1
- package/dist/stand/subscription-records.js +61 -16
- package/dist/stand/subscription-records.js.map +1 -1
- package/dist/stand/subscription-registry.d.ts +54 -15
- package/dist/stand/subscription-registry.d.ts.map +1 -1
- package/dist/stand/subscription-registry.js +164 -41
- package/dist/stand/subscription-registry.js.map +1 -1
- package/dist/stand/subscription-runtime.d.ts +12 -5
- package/dist/stand/subscription-runtime.d.ts.map +1 -1
- package/dist/stand/subscription-runtime.js +183 -34
- package/dist/stand/subscription-runtime.js.map +1 -1
- package/dist/testing/index.d.ts.map +1 -1
- package/dist/testing/index.js +4 -3
- package/dist/testing/index.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +14 -14
- package/dist/agent/agent-admission.d.ts +0 -80
- package/dist/agent/agent-admission.d.ts.map +0 -1
- package/dist/agent/agent-admission.js +0 -127
- package/dist/agent/agent-admission.js.map +0 -1
- package/dist/agent/agent-ai-runtime.d.ts +0 -76
- package/dist/agent/agent-ai-runtime.d.ts.map +0 -1
- package/dist/agent/agent-ai-runtime.js +0 -1269
- package/dist/agent/agent-ai-runtime.js.map +0 -1
- package/dist/agent/agent-execution-fault.d.ts +0 -18
- package/dist/agent/agent-execution-fault.d.ts.map +0 -1
- package/dist/agent/agent-execution-fault.js.map +0 -1
- package/dist/agent/agent-execution-session.d.ts +0 -103
- package/dist/agent/agent-execution-session.d.ts.map +0 -1
- package/dist/agent/agent-execution-session.js +0 -238
- package/dist/agent/agent-execution-session.js.map +0 -1
- package/dist/agent/agent-interaction-audit.d.ts +0 -58
- package/dist/agent/agent-interaction-audit.d.ts.map +0 -1
- package/dist/agent/agent-interaction-audit.js +0 -114
- package/dist/agent/agent-interaction-audit.js.map +0 -1
- package/dist/agent/agent-interaction-events.d.ts +0 -40
- package/dist/agent/agent-interaction-events.d.ts.map +0 -1
- package/dist/agent/agent-interaction-events.js +0 -129
- package/dist/agent/agent-interaction-events.js.map +0 -1
- package/dist/agent/agent-mcp-budget.d.ts +0 -125
- package/dist/agent/agent-mcp-budget.d.ts.map +0 -1
- package/dist/agent/agent-mcp-budget.js +0 -566
- package/dist/agent/agent-mcp-budget.js.map +0 -1
- package/dist/agent/agent-mcp-host.d.ts +0 -125
- package/dist/agent/agent-mcp-host.d.ts.map +0 -1
- package/dist/agent/agent-mcp-host.js.map +0 -1
- package/dist/agent/agent-mcp-runtime.d.ts.map +0 -1
- package/dist/agent/agent-mcp-runtime.js.map +0 -1
- package/dist/agent/agent-read-runtime.d.ts +0 -70
- package/dist/agent/agent-read-runtime.d.ts.map +0 -1
- package/dist/agent/agent-read-runtime.js +0 -320
- package/dist/agent/agent-read-runtime.js.map +0 -1
- package/dist/agent/agent-revisions.d.ts +0 -35
- package/dist/agent/agent-revisions.d.ts.map +0 -1
- package/dist/agent/agent-revisions.js +0 -133
- package/dist/agent/agent-revisions.js.map +0 -1
- package/dist/agent/agent-scheduler.d.ts +0 -99
- package/dist/agent/agent-scheduler.d.ts.map +0 -1
- package/dist/agent/agent-scheduler.js +0 -398
- package/dist/agent/agent-scheduler.js.map +0 -1
- package/dist/bus/saved-dispatcher-binding.d.ts +0 -53
- package/dist/bus/saved-dispatcher-binding.d.ts.map +0 -1
- package/dist/bus/saved-dispatcher-binding.js.map +0 -1
- package/dist/delivery/delivery-run-coordinator.d.ts +0 -218
- package/dist/delivery/delivery-run-coordinator.d.ts.map +0 -1
- package/dist/delivery/delivery-run-coordinator.js +0 -609
- package/dist/delivery/delivery-run-coordinator.js.map +0 -1
- package/dist/delivery/parked-delivery-obligations.d.ts +0 -182
- package/dist/delivery/parked-delivery-obligations.d.ts.map +0 -1
- package/dist/delivery/parked-delivery-obligations.js +0 -390
- package/dist/delivery/parked-delivery-obligations.js.map +0 -1
- package/dist/server/environment-attachment.d.ts +0 -356
- package/dist/server/environment-attachment.d.ts.map +0 -1
- package/dist/server/environment-attachment.js +0 -2062
- package/dist/server/environment-attachment.js.map +0 -1
- package/dist/server/environment-delivery-records.d.ts +0 -77
- package/dist/server/environment-delivery-records.d.ts.map +0 -1
- package/dist/server/environment-delivery-records.js +0 -282
- package/dist/server/environment-delivery-records.js.map +0 -1
- package/dist/server/environment-delivery-worker.d.ts +0 -161
- package/dist/server/environment-delivery-worker.d.ts.map +0 -1
- package/dist/server/environment-delivery-worker.js +0 -973
- package/dist/server/environment-delivery-worker.js.map +0 -1
|
@@ -1,133 +0,0 @@
|
|
|
1
|
-
/*
|
|
2
|
-
* Copyright 2026, CodeMatters. All rights reserved.
|
|
3
|
-
*
|
|
4
|
-
* Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
|
|
5
|
-
* in compliance with the License. You may obtain a copy of the License at
|
|
6
|
-
*
|
|
7
|
-
* https://www.apache.org/licenses/LICENSE-2.0
|
|
8
|
-
*
|
|
9
|
-
* Unless required by applicable law or agreed to in writing, software distributed under the License
|
|
10
|
-
* is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
|
|
11
|
-
* or implied. See the License for the specific language governing permissions and limitations under
|
|
12
|
-
* the License.
|
|
13
|
-
*/
|
|
14
|
-
import { createHash } from "node:crypto";
|
|
15
|
-
import { toBinary } from "@bufbuild/protobuf";
|
|
16
|
-
import { FileDescriptorProtoSchema } from "@bufbuild/protobuf/wkt";
|
|
17
|
-
import { mcpDefinition, mcpRegistrations, registryOptions, } from "@spine-event-engine/ai/spi/runtime";
|
|
18
|
-
/**
|
|
19
|
-
* Derives restart comparison keys without retaining application callbacks.
|
|
20
|
-
*/
|
|
21
|
-
export const AgentRevisions = Object.freeze({
|
|
22
|
-
/**
|
|
23
|
-
* Computes descriptor and effective-policy digests for accepted work.
|
|
24
|
-
*
|
|
25
|
-
* @param state Generated Agent state descriptor.
|
|
26
|
-
* @param handlers Selected handler bindings in execution order.
|
|
27
|
-
* @param ai Effective Bounded Context AI registry.
|
|
28
|
-
* @param repository Repository capability configuration.
|
|
29
|
-
* @returns Revisions persisted for recovery comparison.
|
|
30
|
-
*/
|
|
31
|
-
atAdmission(state, handlers, ai, repository) {
|
|
32
|
-
const schemas = [
|
|
33
|
-
state,
|
|
34
|
-
...handlers.map((entry) => entry.handler.schema),
|
|
35
|
-
...repository.models.flatMap((model) => [model.definition.input, model.definition.output]),
|
|
36
|
-
];
|
|
37
|
-
const files = new Map(schemas.map((schema) => [schema.file.proto.name, schema.file.proto]));
|
|
38
|
-
const schemaHash = createHash("sha256");
|
|
39
|
-
for (const name of [...files.keys()].sort()) {
|
|
40
|
-
schemaHash.update(name);
|
|
41
|
-
const file = files.get(name);
|
|
42
|
-
if (file === undefined)
|
|
43
|
-
throw new Error("Agent descriptor disappeared during admission.");
|
|
44
|
-
schemaHash.update(toBinary(FileDescriptorProtoSchema, file));
|
|
45
|
-
}
|
|
46
|
-
return Object.freeze({
|
|
47
|
-
schema: schemaHash.digest("hex"),
|
|
48
|
-
policy: createHash("sha256")
|
|
49
|
-
.update(JSON.stringify(policyShape(ai, repository)))
|
|
50
|
-
.digest("hex"),
|
|
51
|
-
});
|
|
52
|
-
},
|
|
53
|
-
});
|
|
54
|
-
/**
|
|
55
|
-
* Selects serializable policy fields while callback revisions remain in codeRevision.
|
|
56
|
-
*
|
|
57
|
-
* @param ai Effective registry.
|
|
58
|
-
* @param repository Repository capabilities and narrowing policy.
|
|
59
|
-
* @returns Ordered policy value for a deterministic digest.
|
|
60
|
-
*/
|
|
61
|
-
function policyShape(ai, repository) {
|
|
62
|
-
const options = registryOptions(ai);
|
|
63
|
-
return {
|
|
64
|
-
defaults: options.defaultModels,
|
|
65
|
-
limits: options.invocationLimits,
|
|
66
|
-
hookTimeoutMs: options.hookTimeoutMs,
|
|
67
|
-
repositoryDefaults: repository.defaultModels,
|
|
68
|
-
allowedModels: repository.allowedModels,
|
|
69
|
-
invocationLimits: repository.invocationLimits,
|
|
70
|
-
mcpServers: mcpPolicies(ai, repository),
|
|
71
|
-
models: repository.models.map(({ definition }) => ({
|
|
72
|
-
name: definition.name,
|
|
73
|
-
version: definition.version,
|
|
74
|
-
kind: definition.kind,
|
|
75
|
-
input: definition.input.typeName,
|
|
76
|
-
output: definition.output.typeName,
|
|
77
|
-
limits: definition.limits,
|
|
78
|
-
validationVersion: definition.validation?.version,
|
|
79
|
-
...(definition.kind === "generation"
|
|
80
|
-
? {
|
|
81
|
-
instructions: definition.instructions,
|
|
82
|
-
outputMode: definition.outputMode,
|
|
83
|
-
tools: definition.tools,
|
|
84
|
-
}
|
|
85
|
-
: {
|
|
86
|
-
questions: definition.questions,
|
|
87
|
-
mappingVersion: definition.mapping.version,
|
|
88
|
-
requireProbabilities: definition.requireProbabilities,
|
|
89
|
-
requireIndependentQuestions: definition.requireIndependentQuestions,
|
|
90
|
-
}),
|
|
91
|
-
})),
|
|
92
|
-
};
|
|
93
|
-
}
|
|
94
|
-
/**
|
|
95
|
-
* Hashes only available tools and their server policy without evaluating credential callbacks.
|
|
96
|
-
*
|
|
97
|
-
* @param ai Effective AI registry with registered tool servers.
|
|
98
|
-
* @param repository Model capabilities available to this Agent repository.
|
|
99
|
-
* @returns Deterministically ordered serializable server policies.
|
|
100
|
-
*/
|
|
101
|
-
function mcpPolicies(ai, repository) {
|
|
102
|
-
const selected = repository.models.flatMap(({ definition }) => definition.kind === "generation" ? (definition.tools ?? []) : []);
|
|
103
|
-
return mcpRegistrations(ai)
|
|
104
|
-
.filter((registration) => selected.some((ref) => ref.server === mcpDefinition(registration).id))
|
|
105
|
-
.map((registration) => {
|
|
106
|
-
const server = mcpDefinition(registration);
|
|
107
|
-
const transport = server.transport.kind === "streamable-http"
|
|
108
|
-
? { kind: server.transport.kind, url: server.transport.url }
|
|
109
|
-
: {
|
|
110
|
-
kind: server.transport.kind,
|
|
111
|
-
executable: server.transport.executable,
|
|
112
|
-
args: server.transport.args,
|
|
113
|
-
cwd: server.transport.cwd,
|
|
114
|
-
};
|
|
115
|
-
return {
|
|
116
|
-
id: server.id,
|
|
117
|
-
revision: server.revision,
|
|
118
|
-
transport,
|
|
119
|
-
tools: Object.entries(server.tools)
|
|
120
|
-
.filter(([name]) => selected.some((ref) => ref.server === server.id && ref.tool === name))
|
|
121
|
-
.sort(([left], [right]) => left.localeCompare(right))
|
|
122
|
-
.map(([name, policy]) => ({
|
|
123
|
-
name,
|
|
124
|
-
effect: policy.effect,
|
|
125
|
-
timeoutMs: policy.timeoutMs,
|
|
126
|
-
maxArgumentBytes: policy.maxArgumentBytes,
|
|
127
|
-
maxResultBytes: policy.maxResultBytes,
|
|
128
|
-
})),
|
|
129
|
-
};
|
|
130
|
-
})
|
|
131
|
-
.sort((left, right) => left.id.localeCompare(right.id));
|
|
132
|
-
}
|
|
133
|
-
//# sourceMappingURL=agent-revisions.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"agent-revisions.js","sourceRoot":"","sources":["../../src/agent/agent-revisions.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,99 +0,0 @@
|
|
|
1
|
-
import { type AgentInvocationKey } from "@spine-event-engine/proto/generated/spine/server/agent/execution_record_pb.js";
|
|
2
|
-
import type { TenantId } from "@spine-event-engine/proto";
|
|
3
|
-
import type { AgentPendingCursor, AgentPendingPage, TenantCatalogCursor } from "@spine-event-engine/storage/provider";
|
|
4
|
-
import type { TenantIndexPage } from "../context/tenant-index.js";
|
|
5
|
-
import { AgentExecutionCapacity } from "./agent-execution-capacity.js";
|
|
6
|
-
/**
|
|
7
|
-
* One complete repository and tenant visited by the Agent scheduler.
|
|
8
|
-
*/
|
|
9
|
-
export interface AgentScanScope {
|
|
10
|
-
/**
|
|
11
|
-
* Identifies one repository and tenant scan scope.
|
|
12
|
-
*/
|
|
13
|
-
readonly id: string;
|
|
14
|
-
/**
|
|
15
|
-
* Reads a finite page of unresolved Agent invocations.
|
|
16
|
-
*
|
|
17
|
-
* @param after Provider continuation from the prior page.
|
|
18
|
-
* @param count Maximum records requested for this scan.
|
|
19
|
-
* @returns Pending records and their next continuation.
|
|
20
|
-
*/
|
|
21
|
-
pending(after: AgentPendingCursor | undefined, count: number): Promise<AgentPendingPage>;
|
|
22
|
-
/**
|
|
23
|
-
* Executes one invocation after attempting its provider claim.
|
|
24
|
-
*
|
|
25
|
-
* @param key Exact accepted invocation selected by the scan.
|
|
26
|
-
* @param signal Bounded Context shutdown cancellation signal.
|
|
27
|
-
* @returns Completion after the claimed work settles.
|
|
28
|
-
*/
|
|
29
|
-
run(key: AgentInvocationKey, signal: AbortSignal): Promise<void>;
|
|
30
|
-
}
|
|
31
|
-
/**
|
|
32
|
-
* Produces finite tenant pages and lazily constructs registered scopes.
|
|
33
|
-
*/
|
|
34
|
-
export interface AgentScopeSource {
|
|
35
|
-
/**
|
|
36
|
-
* Number of registered Agent repository views per tenant.
|
|
37
|
-
*/
|
|
38
|
-
readonly repositories: number;
|
|
39
|
-
/**
|
|
40
|
-
* Reads one bounded tenant catalog page.
|
|
41
|
-
*
|
|
42
|
-
* @param after Opaque provider continuation from the prior page.
|
|
43
|
-
* @param signal Scheduler shutdown signal.
|
|
44
|
-
* @returns Complete tenant IDs and a possible continuation.
|
|
45
|
-
*/
|
|
46
|
-
page(after: TenantCatalogCursor | undefined, signal: AbortSignal): Promise<TenantIndexPage>;
|
|
47
|
-
/**
|
|
48
|
-
* Creates one registered repository scope for a selected tenant.
|
|
49
|
-
*
|
|
50
|
-
* @param tenant Complete tenant identifier.
|
|
51
|
-
* @param repository Index in the fixed registered repository list.
|
|
52
|
-
* @returns A lazily constructed scan scope.
|
|
53
|
-
*/
|
|
54
|
-
scope(tenant: TenantId, repository: number): AgentScanScope;
|
|
55
|
-
}
|
|
56
|
-
/**
|
|
57
|
-
* Bounded, round-robin scan of provider-indexed Agent heads.
|
|
58
|
-
*/
|
|
59
|
-
export declare class AgentScheduler {
|
|
60
|
-
#private;
|
|
61
|
-
private readonly source;
|
|
62
|
-
private readonly capacity;
|
|
63
|
-
private readonly onError;
|
|
64
|
-
/**
|
|
65
|
-
* Creates bounded discovery for the Bounded Context's registered Agent scopes.
|
|
66
|
-
*
|
|
67
|
-
* @param source Pages tenants and constructs a registered scope on demand.
|
|
68
|
-
* @param capacity Shared registry execution gate.
|
|
69
|
-
* @param onError Reports failed discovery or execution turns.
|
|
70
|
-
*/
|
|
71
|
-
constructor(source: AgentScopeSource, capacity: AgentExecutionCapacity, onError: (error: unknown) => void);
|
|
72
|
-
/**
|
|
73
|
-
* Starts periodic discovery, including pending work after process reconstruction.
|
|
74
|
-
*/
|
|
75
|
-
start(): void;
|
|
76
|
-
/**
|
|
77
|
-
* Schedules a prompt bounded turn without resetting the fixed-time sweep.
|
|
78
|
-
*
|
|
79
|
-
* @param scope Newly accepted repository and tenant, when available.
|
|
80
|
-
*/
|
|
81
|
-
wake(scope?: AgentScanScope): void;
|
|
82
|
-
/**
|
|
83
|
-
* Reads at most four indexed pages and retains continuation across turns.
|
|
84
|
-
*
|
|
85
|
-
* @returns Completion after this bounded scan, or the scan already in progress.
|
|
86
|
-
*/
|
|
87
|
-
turn(): Promise<void>;
|
|
88
|
-
/**
|
|
89
|
-
* Stops discovery and waits for already dispatched bounded work.
|
|
90
|
-
*/
|
|
91
|
-
stop(): void;
|
|
92
|
-
/**
|
|
93
|
-
* Waits for dispatched work after stopping new discovery.
|
|
94
|
-
*
|
|
95
|
-
* @returns Completion after active work has settled.
|
|
96
|
-
*/
|
|
97
|
-
close(): Promise<void>;
|
|
98
|
-
}
|
|
99
|
-
//# sourceMappingURL=agent-scheduler.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"agent-scheduler.d.ts","sourceRoot":"","sources":["../../src/agent/agent-scheduler.ts"],"names":[],"mappings":"AAeA,OAAO,EAGL,KAAK,kBAAkB,EACxB,MAAM,+EAA+E,CAAC;AACvF,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AAC1D,OAAO,KAAK,EACV,kBAAkB,EAClB,gBAAgB,EAChB,mBAAmB,EACpB,MAAM,sCAAsC,CAAC;AAG9C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAElE,OAAO,EAAE,sBAAsB,EAAE,MAAM,+BAA+B,CAAC;AAEvE;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B;;OAEG;IACH,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IAEpB;;;;;;OAMG;IACH,OAAO,CAAC,KAAK,EAAE,kBAAkB,GAAG,SAAS,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAAC;IAEzF;;;;;;OAMG;IACH,GAAG,CAAC,GAAG,EAAE,kBAAkB,EAAE,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAClE;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B;;OAEG;IACH,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAE9B;;;;;;OAMG;IACH,IAAI,CAAC,KAAK,EAAE,mBAAmB,GAAG,SAAS,EAAE,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,eAAe,CAAC,CAAC;IAE5F;;;;;;OAMG;IACH,KAAK,CAAC,MAAM,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,GAAG,cAAc,CAAC;CAC7D;AAmBD;;GAEG;AACH,qBAAa,cAAc;;IA6CvB,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,QAAQ;IACzB,OAAO,CAAC,QAAQ,CAAC,OAAO;IAV1B;;;;;;OAMG;gBAEgB,MAAM,EAAE,gBAAgB,EACxB,QAAQ,EAAE,sBAAsB,EAChC,OAAO,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI;IAGpD;;OAEG;IACH,KAAK,IAAI,IAAI;IAIb;;;;OAIG;IACH,IAAI,CAAC,KAAK,CAAC,EAAE,cAAc,GAAG,IAAI;IAelC;;;;OAIG;IACG,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAiR3B;;OAEG;IACH,IAAI,IAAI,IAAI;IAWZ;;;;OAIG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAO7B"}
|
|
@@ -1,398 +0,0 @@
|
|
|
1
|
-
/*
|
|
2
|
-
* Copyright 2026, CodeMatters. All rights reserved.
|
|
3
|
-
*
|
|
4
|
-
* Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
|
|
5
|
-
* in compliance with the License. You may obtain a copy of the License at
|
|
6
|
-
*
|
|
7
|
-
* https://www.apache.org/licenses/LICENSE-2.0
|
|
8
|
-
*
|
|
9
|
-
* Unless required by applicable law or agreed to in writing, software distributed under the License
|
|
10
|
-
* is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
|
|
11
|
-
* or implied. See the License for the specific language governing permissions and limitations under
|
|
12
|
-
* the License.
|
|
13
|
-
*/
|
|
14
|
-
import { toBinary } from "@bufbuild/protobuf";
|
|
15
|
-
import { AgentInvocationKeySchema, } from "@spine-event-engine/proto/generated/spine/server/agent/execution_record_pb.js";
|
|
16
|
-
import { AgentExecutionRecords } from "@spine-event-engine/storage/provider";
|
|
17
|
-
import { Time } from "@spine-event-engine/core";
|
|
18
|
-
import { withoutDeliveryCommitFence } from "../repository/commit-fence.js";
|
|
19
|
-
import { AgentExecutionCapacity } from "./agent-execution-capacity.js";
|
|
20
|
-
const catalogPageSize = 16;
|
|
21
|
-
const pendingPageSize = 16;
|
|
22
|
-
const maxPendingPages = 4;
|
|
23
|
-
const maxResidentScopes = 4;
|
|
24
|
-
const maxUrgentScopes = 64;
|
|
25
|
-
const sweepIntervalNanoseconds = 5000000000n;
|
|
26
|
-
/**
|
|
27
|
-
* Bounded, round-robin scan of provider-indexed Agent heads.
|
|
28
|
-
*/
|
|
29
|
-
export class AgentScheduler {
|
|
30
|
-
source;
|
|
31
|
-
capacity;
|
|
32
|
-
onError;
|
|
33
|
-
#controller = new AbortController();
|
|
34
|
-
#active = new Map();
|
|
35
|
-
#urgent = new Map();
|
|
36
|
-
#resident = [];
|
|
37
|
-
#catalogAfter;
|
|
38
|
-
#catalogPage;
|
|
39
|
-
#catalogReady;
|
|
40
|
-
#catalogRequest;
|
|
41
|
-
#catalogDone = false;
|
|
42
|
-
#tenantAt = 0;
|
|
43
|
-
#repositoryAt = 0;
|
|
44
|
-
#restartAt = 0n;
|
|
45
|
-
#sweepStarted = false;
|
|
46
|
-
#sweepFirst = false;
|
|
47
|
-
#nextResident = 0;
|
|
48
|
-
#timer;
|
|
49
|
-
#scanning;
|
|
50
|
-
#closed = false;
|
|
51
|
-
/**
|
|
52
|
-
* Creates bounded discovery for the Bounded Context's registered Agent scopes.
|
|
53
|
-
*
|
|
54
|
-
* @param source Pages tenants and constructs a registered scope on demand.
|
|
55
|
-
* @param capacity Shared registry execution gate.
|
|
56
|
-
* @param onError Reports failed discovery or execution turns.
|
|
57
|
-
*/
|
|
58
|
-
constructor(source, capacity, onError) {
|
|
59
|
-
this.source = source;
|
|
60
|
-
this.capacity = capacity;
|
|
61
|
-
this.onError = onError;
|
|
62
|
-
}
|
|
63
|
-
/**
|
|
64
|
-
* Starts periodic discovery, including pending work after process reconstruction.
|
|
65
|
-
*/
|
|
66
|
-
start() {
|
|
67
|
-
this.#schedule(100);
|
|
68
|
-
}
|
|
69
|
-
/**
|
|
70
|
-
* Schedules a prompt bounded turn without resetting the fixed-time sweep.
|
|
71
|
-
*
|
|
72
|
-
* @param scope Newly accepted repository and tenant, when available.
|
|
73
|
-
*/
|
|
74
|
-
wake(scope) {
|
|
75
|
-
if (this.#closed)
|
|
76
|
-
return;
|
|
77
|
-
if (scope !== undefined && !this.#urgent.has(scope.id) && this.#urgent.size < maxUrgentScopes)
|
|
78
|
-
this.#urgent.set(scope.id, { scope });
|
|
79
|
-
if (this.#timer !== undefined)
|
|
80
|
-
clearTimeout(this.#timer);
|
|
81
|
-
this.#timer = setTimeout(() => {
|
|
82
|
-
this.#timer = undefined;
|
|
83
|
-
void this.turn()
|
|
84
|
-
.catch(this.onError)
|
|
85
|
-
.finally(() => {
|
|
86
|
-
this.#schedule(100);
|
|
87
|
-
});
|
|
88
|
-
}, 0);
|
|
89
|
-
}
|
|
90
|
-
/**
|
|
91
|
-
* Reads at most four indexed pages and retains continuation across turns.
|
|
92
|
-
*
|
|
93
|
-
* @returns Completion after this bounded scan, or the scan already in progress.
|
|
94
|
-
*/
|
|
95
|
-
async turn() {
|
|
96
|
-
if (this.#closed)
|
|
97
|
-
return;
|
|
98
|
-
if (this.#scanning !== undefined)
|
|
99
|
-
return this.#scanning;
|
|
100
|
-
const scan = this.#scan();
|
|
101
|
-
this.#scanning = scan;
|
|
102
|
-
try {
|
|
103
|
-
await scan;
|
|
104
|
-
}
|
|
105
|
-
finally {
|
|
106
|
-
this.#scanning = undefined;
|
|
107
|
-
}
|
|
108
|
-
}
|
|
109
|
-
async #scan() {
|
|
110
|
-
this.#prepareSweep();
|
|
111
|
-
const sweepFirst = this.#sweepFirst;
|
|
112
|
-
const visited = new Set();
|
|
113
|
-
const firstSweep = sweepFirst ? await this.#sweepPages(1, visited) : 0;
|
|
114
|
-
let pages = firstSweep;
|
|
115
|
-
pages += await this.#urgentPages(3 - pages);
|
|
116
|
-
pages += await this.#sweepPages(maxPendingPages - pages, visited);
|
|
117
|
-
if (pages > 0)
|
|
118
|
-
this.#sweepFirst = !sweepFirst;
|
|
119
|
-
}
|
|
120
|
-
/**
|
|
121
|
-
* Visits a bounded set of accepted scopes ahead of catalog rotation.
|
|
122
|
-
*
|
|
123
|
-
* @param limit Maximum indexed pages to visit.
|
|
124
|
-
* @returns Number of pages visited.
|
|
125
|
-
*/
|
|
126
|
-
async #urgentPages(limit) {
|
|
127
|
-
let pages = 0;
|
|
128
|
-
for (const [id, resident] of this.#urgent) {
|
|
129
|
-
if (pages === limit || this.#closed || this.capacity.full())
|
|
130
|
-
break;
|
|
131
|
-
const { page, retry } = await this.#visit(resident);
|
|
132
|
-
if (!retry) {
|
|
133
|
-
if (page.hasMore && page.after !== undefined)
|
|
134
|
-
resident.cursor = page.after;
|
|
135
|
-
else
|
|
136
|
-
this.#urgent.delete(id);
|
|
137
|
-
}
|
|
138
|
-
pages += 1;
|
|
139
|
-
}
|
|
140
|
-
return pages;
|
|
141
|
-
}
|
|
142
|
-
/**
|
|
143
|
-
* Advances the periodic catalog sweep even under sustained accepted work.
|
|
144
|
-
*
|
|
145
|
-
* @param limit Remaining page budget.
|
|
146
|
-
* @param visited Residents already read in this turn.
|
|
147
|
-
* @returns Number of pages visited.
|
|
148
|
-
*/
|
|
149
|
-
async #sweepPages(limit, visited) {
|
|
150
|
-
let pages = 0;
|
|
151
|
-
for (let considered = 0; considered < maxResidentScopes && pages < limit; considered += 1) {
|
|
152
|
-
if (this.#closed || this.capacity.full())
|
|
153
|
-
break;
|
|
154
|
-
if (this.#resident.length === 0)
|
|
155
|
-
break;
|
|
156
|
-
const index = this.#nextResident % this.#resident.length;
|
|
157
|
-
const resident = this.#resident[index];
|
|
158
|
-
if (resident === undefined)
|
|
159
|
-
break;
|
|
160
|
-
if (visited.has(resident)) {
|
|
161
|
-
this.#nextResident = index + 1;
|
|
162
|
-
continue;
|
|
163
|
-
}
|
|
164
|
-
visited.add(resident);
|
|
165
|
-
const { page, retry } = await this.#visit(resident);
|
|
166
|
-
if (page.hasMore || retry) {
|
|
167
|
-
if (!retry && page.after !== undefined)
|
|
168
|
-
resident.cursor = page.after;
|
|
169
|
-
this.#nextResident = index + 1;
|
|
170
|
-
}
|
|
171
|
-
else {
|
|
172
|
-
this.#resident.splice(index, 1);
|
|
173
|
-
this.#nextResident = index;
|
|
174
|
-
}
|
|
175
|
-
pages += 1;
|
|
176
|
-
}
|
|
177
|
-
return pages;
|
|
178
|
-
}
|
|
179
|
-
/**
|
|
180
|
-
* Restarts completed traversals only after their original cadence.
|
|
181
|
-
*/
|
|
182
|
-
#prepareSweep() {
|
|
183
|
-
const now = Time.currentTime();
|
|
184
|
-
const current = now.seconds * 1000000000n + BigInt(now.nanos);
|
|
185
|
-
if (!this.#sweepStarted || (this.#completeSweep() && current >= this.#restartAt)) {
|
|
186
|
-
this.#sweepStarted = true;
|
|
187
|
-
this.#restartAt = current + sweepIntervalNanoseconds;
|
|
188
|
-
this.#catalogDone = false;
|
|
189
|
-
this.#catalogAfter = undefined;
|
|
190
|
-
}
|
|
191
|
-
this.#acceptCatalogPage();
|
|
192
|
-
this.#fillResident();
|
|
193
|
-
if (!this.#catalogDone && this.#catalogPage === undefined && this.#catalogRequest === undefined)
|
|
194
|
-
this.#requestCatalogPage();
|
|
195
|
-
}
|
|
196
|
-
/**
|
|
197
|
-
* Reports whether the prior finite catalog traversal has ended.
|
|
198
|
-
*/
|
|
199
|
-
#completeSweep() {
|
|
200
|
-
return (this.#catalogDone &&
|
|
201
|
-
this.#catalogPage === undefined &&
|
|
202
|
-
this.#catalogReady === undefined &&
|
|
203
|
-
this.#catalogRequest === undefined &&
|
|
204
|
-
this.#resident.length === 0);
|
|
205
|
-
}
|
|
206
|
-
/**
|
|
207
|
-
* Installs one settled provider page without retaining earlier pages.
|
|
208
|
-
*/
|
|
209
|
-
#acceptCatalogPage() {
|
|
210
|
-
const page = this.#catalogReady;
|
|
211
|
-
if (page === undefined)
|
|
212
|
-
return;
|
|
213
|
-
this.#catalogReady = undefined;
|
|
214
|
-
if (page.ids.length > catalogPageSize || (page.hasMore && page.after === undefined))
|
|
215
|
-
throw new Error("Agent tenant catalog returned an invalid bounded page.");
|
|
216
|
-
if (page.hasMore && page.after === this.#catalogAfter)
|
|
217
|
-
throw new Error("Agent tenant catalog returned a nonadvancing continuation.");
|
|
218
|
-
this.#catalogPage = page;
|
|
219
|
-
this.#catalogAfter = page.after;
|
|
220
|
-
this.#catalogDone = !page.hasMore;
|
|
221
|
-
this.#tenantAt = 0;
|
|
222
|
-
this.#repositoryAt = 0;
|
|
223
|
-
}
|
|
224
|
-
/**
|
|
225
|
-
* Constructs at most four resident tenant/repository scopes.
|
|
226
|
-
*/
|
|
227
|
-
#fillResident() {
|
|
228
|
-
while (this.#resident.length < maxResidentScopes && this.#catalogPage !== undefined) {
|
|
229
|
-
const tenant = this.#catalogPage.ids[this.#tenantAt];
|
|
230
|
-
if (tenant === undefined) {
|
|
231
|
-
this.#catalogPage = undefined;
|
|
232
|
-
break;
|
|
233
|
-
}
|
|
234
|
-
this.#resident.push({ scope: this.source.scope(tenant, this.#repositoryAt) });
|
|
235
|
-
this.#repositoryAt += 1;
|
|
236
|
-
if (this.#repositoryAt === this.source.repositories) {
|
|
237
|
-
this.#repositoryAt = 0;
|
|
238
|
-
this.#tenantAt += 1;
|
|
239
|
-
}
|
|
240
|
-
}
|
|
241
|
-
}
|
|
242
|
-
/**
|
|
243
|
-
* Starts one provider page without making urgent work await its I/O.
|
|
244
|
-
*/
|
|
245
|
-
#requestCatalogPage() {
|
|
246
|
-
const after = this.#catalogAfter;
|
|
247
|
-
let received = false;
|
|
248
|
-
this.#catalogRequest = Promise.resolve()
|
|
249
|
-
.then(() => {
|
|
250
|
-
if (this.#closed)
|
|
251
|
-
return undefined;
|
|
252
|
-
return this.source.page(after, this.#controller.signal);
|
|
253
|
-
})
|
|
254
|
-
.then((page) => {
|
|
255
|
-
if (!this.#closed && page !== undefined) {
|
|
256
|
-
this.#catalogReady = page;
|
|
257
|
-
received = true;
|
|
258
|
-
}
|
|
259
|
-
})
|
|
260
|
-
.catch((error) => {
|
|
261
|
-
if (!this.#closed)
|
|
262
|
-
this.onError(error);
|
|
263
|
-
})
|
|
264
|
-
.finally(() => {
|
|
265
|
-
this.#catalogRequest = undefined;
|
|
266
|
-
if (this.#closed)
|
|
267
|
-
return;
|
|
268
|
-
if (received)
|
|
269
|
-
this.wake();
|
|
270
|
-
else
|
|
271
|
-
this.#schedule(100);
|
|
272
|
-
});
|
|
273
|
-
}
|
|
274
|
-
/**
|
|
275
|
-
* Reads one indexed pending page with shutdown detachment.
|
|
276
|
-
*/
|
|
277
|
-
async #visit(resident) {
|
|
278
|
-
const page = await this.#awaitStop(resident.scope.pending(resident.cursor, pendingPageSize));
|
|
279
|
-
if (page.records.length > pendingPageSize)
|
|
280
|
-
throw new Error("Agent pending provider exceeded the bounded page size.");
|
|
281
|
-
if (page.hasMore && page.after === undefined)
|
|
282
|
-
throw new Error("Agent pending provider omitted its required continuation.");
|
|
283
|
-
if (page.hasMore && !this.#advances(resident.cursor, page.after))
|
|
284
|
-
throw new Error("Agent pending provider returned a nonadvancing continuation.");
|
|
285
|
-
let retry = false;
|
|
286
|
-
if (!this.#closed)
|
|
287
|
-
for (const record of page.records)
|
|
288
|
-
if (!this.#submit(resident.scope, record))
|
|
289
|
-
retry = true;
|
|
290
|
-
return { page, retry };
|
|
291
|
-
}
|
|
292
|
-
/**
|
|
293
|
-
* Verifies that a continuation moves beyond the previously examined head.
|
|
294
|
-
*/
|
|
295
|
-
#advances(before, after) {
|
|
296
|
-
if (after === undefined)
|
|
297
|
-
return false;
|
|
298
|
-
if (before === undefined)
|
|
299
|
-
return true;
|
|
300
|
-
if (after.asOf.seconds !== before.asOf.seconds || after.asOf.nanos !== before.asOf.nanos)
|
|
301
|
-
return false;
|
|
302
|
-
return (AgentExecutionRecords.pendingKey(after.key.eligibleAt, after.key.scope) >
|
|
303
|
-
AgentExecutionRecords.pendingKey(before.key.eligibleAt, before.key.scope));
|
|
304
|
-
}
|
|
305
|
-
/**
|
|
306
|
-
* Detaches promptly from a provider read that ignores cancellation.
|
|
307
|
-
*
|
|
308
|
-
* @typeParam T Provider response type.
|
|
309
|
-
* @param promise Underlying provider read.
|
|
310
|
-
* @returns Response or prompt shutdown rejection.
|
|
311
|
-
*/
|
|
312
|
-
#awaitStop(promise) {
|
|
313
|
-
return new Promise((resolve, reject) => {
|
|
314
|
-
const signal = this.#controller.signal;
|
|
315
|
-
const abort = () => {
|
|
316
|
-
signal.removeEventListener("abort", abort);
|
|
317
|
-
reject(new Error("Agent discovery stopped."));
|
|
318
|
-
};
|
|
319
|
-
signal.addEventListener("abort", abort, { once: true });
|
|
320
|
-
promise.then((value) => {
|
|
321
|
-
signal.removeEventListener("abort", abort);
|
|
322
|
-
if (!signal.aborted)
|
|
323
|
-
resolve(value);
|
|
324
|
-
}, (error) => {
|
|
325
|
-
signal.removeEventListener("abort", abort);
|
|
326
|
-
reject(error instanceof Error ? error : new Error("Agent discovery failed.", { cause: error }));
|
|
327
|
-
});
|
|
328
|
-
if (signal.aborted)
|
|
329
|
-
abort();
|
|
330
|
-
});
|
|
331
|
-
}
|
|
332
|
-
#submit(scope, record) {
|
|
333
|
-
const key = record.accepted?.key;
|
|
334
|
-
if (key === undefined || this.#closed)
|
|
335
|
-
return false;
|
|
336
|
-
const id = `${scope.id}:${Buffer.from(toBinary(AgentInvocationKeySchema, key)).toString("base64")}`;
|
|
337
|
-
if (this.#active.has(id))
|
|
338
|
-
return true;
|
|
339
|
-
const invocation = key;
|
|
340
|
-
const task = this.capacity.trySubmit({
|
|
341
|
-
key: id,
|
|
342
|
-
signal: this.#controller.signal,
|
|
343
|
-
run: () => withoutDeliveryCommitFence(() => {
|
|
344
|
-
if (this.#closed)
|
|
345
|
-
return Promise.resolve();
|
|
346
|
-
return scope.run(invocation, this.#controller.signal);
|
|
347
|
-
}),
|
|
348
|
-
});
|
|
349
|
-
if (task === undefined)
|
|
350
|
-
return false;
|
|
351
|
-
this.#active.set(id, task);
|
|
352
|
-
void task.catch(this.onError).finally(() => {
|
|
353
|
-
this.#active.delete(id);
|
|
354
|
-
this.wake();
|
|
355
|
-
});
|
|
356
|
-
return true;
|
|
357
|
-
}
|
|
358
|
-
#schedule(delay) {
|
|
359
|
-
if (this.#closed || this.#timer !== undefined)
|
|
360
|
-
return;
|
|
361
|
-
this.#timer = setTimeout(() => {
|
|
362
|
-
this.#timer = undefined;
|
|
363
|
-
void this.turn()
|
|
364
|
-
.catch(this.onError)
|
|
365
|
-
.finally(() => {
|
|
366
|
-
this.#schedule(100);
|
|
367
|
-
});
|
|
368
|
-
}, delay);
|
|
369
|
-
}
|
|
370
|
-
/**
|
|
371
|
-
* Stops discovery and waits for already dispatched bounded work.
|
|
372
|
-
*/
|
|
373
|
-
stop() {
|
|
374
|
-
this.#closed = true;
|
|
375
|
-
this.#controller.abort();
|
|
376
|
-
if (this.#timer !== undefined)
|
|
377
|
-
clearTimeout(this.#timer);
|
|
378
|
-
this.#timer = undefined;
|
|
379
|
-
this.#urgent.clear();
|
|
380
|
-
this.#resident.length = 0;
|
|
381
|
-
this.#catalogPage = undefined;
|
|
382
|
-
this.#catalogReady = undefined;
|
|
383
|
-
}
|
|
384
|
-
/**
|
|
385
|
-
* Waits for dispatched work after stopping new discovery.
|
|
386
|
-
*
|
|
387
|
-
* @returns Completion after active work has settled.
|
|
388
|
-
*/
|
|
389
|
-
async close() {
|
|
390
|
-
this.stop();
|
|
391
|
-
await this.#scanning?.catch((error) => {
|
|
392
|
-
if (!this.#closed)
|
|
393
|
-
throw error;
|
|
394
|
-
});
|
|
395
|
-
await Promise.allSettled(this.#active.values());
|
|
396
|
-
}
|
|
397
|
-
}
|
|
398
|
-
//# sourceMappingURL=agent-scheduler.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"agent-scheduler.js","sourceRoot":"","sources":["../../src/agent/agent-scheduler.ts"],"names":[],"mappings":"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"}
|