@animalabs/agent-framework 0.22.2 → 0.23.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +108 -4
- package/dist/src/agent.d.ts +108 -17
- package/dist/src/agent.d.ts.map +1 -1
- package/dist/src/agent.js +207 -67
- package/dist/src/agent.js.map +1 -1
- package/dist/src/api/mcp-server-core.js +1 -1
- package/dist/src/api/mcp-server-core.js.map +1 -1
- package/dist/src/api/server.d.ts.map +1 -1
- package/dist/src/api/server.js +5 -1
- package/dist/src/api/server.js.map +1 -1
- package/dist/src/api/types.d.ts +1 -1
- package/dist/src/api/types.d.ts.map +1 -1
- package/dist/src/branch-names.d.ts +14 -0
- package/dist/src/branch-names.d.ts.map +1 -0
- package/dist/src/branch-names.js +22 -0
- package/dist/src/branch-names.js.map +1 -0
- package/dist/src/closest-names.d.ts +28 -0
- package/dist/src/closest-names.d.ts.map +1 -0
- package/dist/src/closest-names.js +98 -0
- package/dist/src/closest-names.js.map +1 -0
- package/dist/src/code-execution/index.d.ts +1 -1
- package/dist/src/code-execution/index.d.ts.map +1 -1
- package/dist/src/code-execution/index.js.map +1 -1
- package/dist/src/code-execution/py-runner.d.ts +50 -7
- package/dist/src/code-execution/py-runner.d.ts.map +1 -1
- package/dist/src/code-execution/py-runner.js +258 -90
- package/dist/src/code-execution/py-runner.js.map +1 -1
- package/dist/src/code-execution/runtime-py.d.ts +3 -2
- package/dist/src/code-execution/runtime-py.d.ts.map +1 -1
- package/dist/src/code-execution/runtime-py.js +94 -8
- package/dist/src/code-execution/runtime-py.js.map +1 -1
- package/dist/src/code-execution/tool-definition.d.ts +17 -1
- package/dist/src/code-execution/tool-definition.d.ts.map +1 -1
- package/dist/src/code-execution/tool-definition.js +72 -6
- package/dist/src/code-execution/tool-definition.js.map +1 -1
- package/dist/src/config-checks.d.ts +28 -0
- package/dist/src/config-checks.d.ts.map +1 -0
- package/dist/src/config-checks.js +56 -0
- package/dist/src/config-checks.js.map +1 -0
- package/dist/src/deadline-timer.d.ts +21 -0
- package/dist/src/deadline-timer.d.ts.map +1 -0
- package/dist/src/deadline-timer.js +43 -0
- package/dist/src/deadline-timer.js.map +1 -0
- package/dist/src/error-message.d.ts +30 -0
- package/dist/src/error-message.d.ts.map +1 -0
- package/dist/src/error-message.js +50 -0
- package/dist/src/error-message.js.map +1 -0
- package/dist/src/framework.d.ts +1529 -165
- package/dist/src/framework.d.ts.map +1 -1
- package/dist/src/framework.js +8264 -1939
- package/dist/src/framework.js.map +1 -1
- package/dist/src/gate/event-gate.d.ts +8 -0
- package/dist/src/gate/event-gate.d.ts.map +1 -1
- package/dist/src/gate/event-gate.js +36 -5
- package/dist/src/gate/event-gate.js.map +1 -1
- package/dist/src/held-writes.d.ts +16 -0
- package/dist/src/held-writes.d.ts.map +1 -0
- package/dist/src/held-writes.js +56 -0
- package/dist/src/held-writes.js.map +1 -0
- package/dist/src/index.d.ts +10 -4
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +11 -5
- package/dist/src/index.js.map +1 -1
- package/dist/src/mcpl/capability-grant.d.ts +4 -0
- package/dist/src/mcpl/capability-grant.d.ts.map +1 -1
- package/dist/src/mcpl/capability-grant.js +1 -1
- package/dist/src/mcpl/capability-grant.js.map +1 -1
- package/dist/src/mcpl/channel-registry.d.ts +233 -18
- package/dist/src/mcpl/channel-registry.d.ts.map +1 -1
- package/dist/src/mcpl/channel-registry.js +975 -386
- package/dist/src/mcpl/channel-registry.js.map +1 -1
- package/dist/src/mcpl/checkpoint-manager.d.ts +21 -1
- package/dist/src/mcpl/checkpoint-manager.d.ts.map +1 -1
- package/dist/src/mcpl/checkpoint-manager.js +91 -30
- package/dist/src/mcpl/checkpoint-manager.js.map +1 -1
- package/dist/src/mcpl/conversation-router.d.ts +19 -3
- package/dist/src/mcpl/conversation-router.d.ts.map +1 -1
- package/dist/src/mcpl/conversation-router.js +23 -8
- package/dist/src/mcpl/conversation-router.js.map +1 -1
- package/dist/src/mcpl/convert-block.d.ts +20 -0
- package/dist/src/mcpl/convert-block.d.ts.map +1 -0
- package/dist/src/mcpl/convert-block.js +88 -0
- package/dist/src/mcpl/convert-block.js.map +1 -0
- package/dist/src/mcpl/errors.d.ts +13 -0
- package/dist/src/mcpl/errors.d.ts.map +1 -1
- package/dist/src/mcpl/errors.js +28 -0
- package/dist/src/mcpl/errors.js.map +1 -1
- package/dist/src/mcpl/hook-orchestrator.d.ts +23 -0
- package/dist/src/mcpl/hook-orchestrator.d.ts.map +1 -1
- package/dist/src/mcpl/hook-orchestrator.js +83 -72
- package/dist/src/mcpl/hook-orchestrator.js.map +1 -1
- package/dist/src/mcpl/inbound-source.d.ts +114 -0
- package/dist/src/mcpl/inbound-source.d.ts.map +1 -0
- package/dist/src/mcpl/inbound-source.js +83 -0
- package/dist/src/mcpl/inbound-source.js.map +1 -0
- package/dist/src/mcpl/index.d.ts +7 -1
- package/dist/src/mcpl/index.d.ts.map +1 -1
- package/dist/src/mcpl/index.js +5 -1
- package/dist/src/mcpl/index.js.map +1 -1
- package/dist/src/mcpl/inference-router.d.ts +19 -13
- package/dist/src/mcpl/inference-router.d.ts.map +1 -1
- package/dist/src/mcpl/inference-router.js +155 -87
- package/dist/src/mcpl/inference-router.js.map +1 -1
- package/dist/src/mcpl/log-value.d.ts +7 -0
- package/dist/src/mcpl/log-value.d.ts.map +1 -1
- package/dist/src/mcpl/log-value.js +9 -0
- package/dist/src/mcpl/log-value.js.map +1 -1
- package/dist/src/mcpl/modern-connection.d.ts +227 -0
- package/dist/src/mcpl/modern-connection.d.ts.map +1 -0
- package/dist/src/mcpl/modern-connection.js +1088 -0
- package/dist/src/mcpl/modern-connection.js.map +1 -0
- package/dist/src/mcpl/prefix-rule.d.ts +18 -0
- package/dist/src/mcpl/prefix-rule.d.ts.map +1 -0
- package/dist/src/mcpl/prefix-rule.js +25 -0
- package/dist/src/mcpl/prefix-rule.js.map +1 -0
- package/dist/src/mcpl/protocol-family.d.ts +179 -0
- package/dist/src/mcpl/protocol-family.d.ts.map +1 -0
- package/dist/src/mcpl/protocol-family.js +697 -0
- package/dist/src/mcpl/protocol-family.js.map +1 -0
- package/dist/src/mcpl/push-coalescer.d.ts +58 -17
- package/dist/src/mcpl/push-coalescer.d.ts.map +1 -1
- package/dist/src/mcpl/push-coalescer.js +93 -32
- package/dist/src/mcpl/push-coalescer.js.map +1 -1
- package/dist/src/mcpl/push-handler.d.ts +16 -9
- package/dist/src/mcpl/push-handler.d.ts.map +1 -1
- package/dist/src/mcpl/push-handler.js +18 -83
- package/dist/src/mcpl/push-handler.js.map +1 -1
- package/dist/src/mcpl/reference-fetcher.d.ts +76 -13
- package/dist/src/mcpl/reference-fetcher.d.ts.map +1 -1
- package/dist/src/mcpl/reference-fetcher.js +275 -66
- package/dist/src/mcpl/reference-fetcher.js.map +1 -1
- package/dist/src/mcpl/references.d.ts +98 -18
- package/dist/src/mcpl/references.d.ts.map +1 -1
- package/dist/src/mcpl/references.js +170 -32
- package/dist/src/mcpl/references.js.map +1 -1
- package/dist/src/mcpl/server-connection.d.ts +406 -31
- package/dist/src/mcpl/server-connection.d.ts.map +1 -1
- package/dist/src/mcpl/server-connection.js +1331 -272
- package/dist/src/mcpl/server-connection.js.map +1 -1
- package/dist/src/mcpl/server-registry.d.ts +35 -6
- package/dist/src/mcpl/server-registry.d.ts.map +1 -1
- package/dist/src/mcpl/server-registry.js +63 -13
- package/dist/src/mcpl/server-registry.js.map +1 -1
- package/dist/src/mcpl/skip-reply-wake.d.ts +36 -0
- package/dist/src/mcpl/skip-reply-wake.d.ts.map +1 -0
- package/dist/src/mcpl/skip-reply-wake.js +55 -0
- package/dist/src/mcpl/skip-reply-wake.js.map +1 -0
- package/dist/src/mcpl/tool-result-normalize.d.ts +54 -0
- package/dist/src/mcpl/tool-result-normalize.d.ts.map +1 -0
- package/dist/src/mcpl/tool-result-normalize.js +232 -0
- package/dist/src/mcpl/tool-result-normalize.js.map +1 -0
- package/dist/src/mcpl/transport.d.ts +104 -12
- package/dist/src/mcpl/transport.d.ts.map +1 -1
- package/dist/src/mcpl/transport.js +315 -85
- package/dist/src/mcpl/transport.js.map +1 -1
- package/dist/src/mcpl/types.d.ts +76 -19
- package/dist/src/mcpl/types.d.ts.map +1 -1
- package/dist/src/mcpl/types.js.map +1 -1
- package/dist/src/mcpl/visible-content.d.ts +16 -0
- package/dist/src/mcpl/visible-content.d.ts.map +1 -1
- package/dist/src/mcpl/visible-content.js +26 -0
- package/dist/src/mcpl/visible-content.js.map +1 -1
- package/dist/src/module-registry.d.ts +34 -6
- package/dist/src/module-registry.d.ts.map +1 -1
- package/dist/src/module-registry.js +119 -31
- package/dist/src/module-registry.js.map +1 -1
- package/dist/src/modules/api/index.d.ts +1 -1
- package/dist/src/modules/api/index.d.ts.map +1 -1
- package/dist/src/modules/api/index.js +3 -2
- package/dist/src/modules/api/index.js.map +1 -1
- package/dist/src/modules/discord/discord-js-client.d.ts +43 -2
- package/dist/src/modules/discord/discord-js-client.d.ts.map +1 -1
- package/dist/src/modules/discord/discord-js-client.js +286 -67
- package/dist/src/modules/discord/discord-js-client.js.map +1 -1
- package/dist/src/modules/discord/index.d.ts +53 -5
- package/dist/src/modules/discord/index.d.ts.map +1 -1
- package/dist/src/modules/discord/index.js +712 -186
- package/dist/src/modules/discord/index.js.map +1 -1
- package/dist/src/modules/discord/refusal.d.ts +14 -0
- package/dist/src/modules/discord/refusal.d.ts.map +1 -0
- package/dist/src/modules/discord/refusal.js +14 -0
- package/dist/src/modules/discord/refusal.js.map +1 -0
- package/dist/src/modules/discord/types.d.ts +27 -4
- package/dist/src/modules/discord/types.d.ts.map +1 -1
- package/dist/src/modules/health/index.d.ts.map +1 -1
- package/dist/src/modules/health/index.js +8 -3
- package/dist/src/modules/health/index.js.map +1 -1
- package/dist/src/modules/history/index.d.ts +3 -1
- package/dist/src/modules/history/index.d.ts.map +1 -1
- package/dist/src/modules/history/index.js +359 -127
- package/dist/src/modules/history/index.js.map +1 -1
- package/dist/src/modules/history/semantic.d.ts +28 -1
- package/dist/src/modules/history/semantic.d.ts.map +1 -1
- package/dist/src/modules/history/semantic.js +177 -32
- package/dist/src/modules/history/semantic.js.map +1 -1
- package/dist/src/modules/index.d.ts +1 -1
- package/dist/src/modules/index.d.ts.map +1 -1
- package/dist/src/modules/index.js +1 -1
- package/dist/src/modules/index.js.map +1 -1
- package/dist/src/modules/unknown-tool.d.ts +10 -0
- package/dist/src/modules/unknown-tool.d.ts.map +1 -0
- package/dist/src/modules/unknown-tool.js +17 -0
- package/dist/src/modules/unknown-tool.js.map +1 -0
- package/dist/src/modules/workspace/disk-agreement.d.ts +57 -4
- package/dist/src/modules/workspace/disk-agreement.d.ts.map +1 -1
- package/dist/src/modules/workspace/disk-agreement.js +75 -7
- package/dist/src/modules/workspace/disk-agreement.js.map +1 -1
- package/dist/src/modules/workspace/effects.d.ts +66 -7
- package/dist/src/modules/workspace/effects.d.ts.map +1 -1
- package/dist/src/modules/workspace/effects.js +303 -46
- package/dist/src/modules/workspace/effects.js.map +1 -1
- package/dist/src/modules/workspace/index.d.ts +313 -45
- package/dist/src/modules/workspace/index.d.ts.map +1 -1
- package/dist/src/modules/workspace/index.js +1404 -304
- package/dist/src/modules/workspace/index.js.map +1 -1
- package/dist/src/modules/workspace/observe.d.ts +315 -16
- package/dist/src/modules/workspace/observe.d.ts.map +1 -1
- package/dist/src/modules/workspace/observe.js +727 -37
- package/dist/src/modules/workspace/observe.js.map +1 -1
- package/dist/src/modules/workspace/reconcile.d.ts +58 -7
- package/dist/src/modules/workspace/reconcile.d.ts.map +1 -1
- package/dist/src/modules/workspace/reconcile.js +521 -56
- package/dist/src/modules/workspace/reconcile.js.map +1 -1
- package/dist/src/modules/workspace/types.d.ts +28 -5
- package/dist/src/modules/workspace/types.d.ts.map +1 -1
- package/dist/src/modules/workspace/types.js.map +1 -1
- package/dist/src/modules/workspace/watcher.d.ts +49 -2
- package/dist/src/modules/workspace/watcher.d.ts.map +1 -1
- package/dist/src/modules/workspace/watcher.js +158 -29
- package/dist/src/modules/workspace/watcher.js.map +1 -1
- package/dist/src/prose-drafts.d.ts +240 -0
- package/dist/src/prose-drafts.d.ts.map +1 -0
- package/dist/src/prose-drafts.js +362 -0
- package/dist/src/prose-drafts.js.map +1 -0
- package/dist/src/prose-segments.d.ts +21 -2
- package/dist/src/prose-segments.d.ts.map +1 -1
- package/dist/src/prose-segments.js +46 -9
- package/dist/src/prose-segments.js.map +1 -1
- package/dist/src/recovery/offline-branch.d.ts +1 -0
- package/dist/src/recovery/offline-branch.d.ts.map +1 -1
- package/dist/src/recovery/offline-branch.js +3 -1
- package/dist/src/recovery/offline-branch.js.map +1 -1
- package/dist/src/safe-slice.d.ts +5 -1
- package/dist/src/safe-slice.d.ts.map +1 -1
- package/dist/src/safe-slice.js +9 -1
- package/dist/src/safe-slice.js.map +1 -1
- package/dist/src/silent-heartbeat.d.ts +112 -39
- package/dist/src/silent-heartbeat.d.ts.map +1 -1
- package/dist/src/silent-heartbeat.js +100 -29
- package/dist/src/silent-heartbeat.js.map +1 -1
- package/dist/src/tool-args.d.ts +40 -0
- package/dist/src/tool-args.d.ts.map +1 -0
- package/dist/src/tool-args.js +207 -0
- package/dist/src/tool-args.js.map +1 -0
- package/dist/src/tool-image-ledger.d.ts +87 -19
- package/dist/src/tool-image-ledger.d.ts.map +1 -1
- package/dist/src/tool-image-ledger.js +135 -32
- package/dist/src/tool-image-ledger.js.map +1 -1
- package/dist/src/tool-presentation.d.ts +9 -0
- package/dist/src/tool-presentation.d.ts.map +1 -1
- package/dist/src/tool-presentation.js +266 -62
- package/dist/src/tool-presentation.js.map +1 -1
- package/dist/src/tool-result-guard.d.ts.map +1 -1
- package/dist/src/tool-result-guard.js +7 -10
- package/dist/src/tool-result-guard.js.map +1 -1
- package/dist/src/tool-result-history.d.ts +32 -3
- package/dist/src/tool-result-history.d.ts.map +1 -1
- package/dist/src/tool-result-history.js +106 -19
- package/dist/src/tool-result-history.js.map +1 -1
- package/dist/src/tune-out/coordinator.d.ts +25 -1
- package/dist/src/tune-out/coordinator.d.ts.map +1 -1
- package/dist/src/tune-out/coordinator.js +260 -65
- package/dist/src/tune-out/coordinator.js.map +1 -1
- package/dist/src/types/agent.d.ts +44 -22
- package/dist/src/types/agent.d.ts.map +1 -1
- package/dist/src/types/events.d.ts +25 -0
- package/dist/src/types/events.d.ts.map +1 -1
- package/dist/src/types/framework.d.ts +38 -7
- package/dist/src/types/framework.d.ts.map +1 -1
- package/dist/src/types/inference-log.d.ts +1 -1
- package/dist/src/types/inference-log.d.ts.map +1 -1
- package/dist/src/types/module.d.ts +77 -14
- package/dist/src/types/module.d.ts.map +1 -1
- package/dist/src/types/trace.d.ts +97 -8
- package/dist/src/types/trace.d.ts.map +1 -1
- package/dist/src/usage/usage-tracker.d.ts +5 -0
- package/dist/src/usage/usage-tracker.d.ts.map +1 -1
- package/dist/src/usage/usage-tracker.js +35 -8
- package/dist/src/usage/usage-tracker.js.map +1 -1
- package/package.json +5 -4
- package/src/agent.ts +257 -72
- package/src/api/mcp-server-core.ts +1 -1
- package/src/api/server.ts +4 -1
- package/src/api/types.ts +1 -1
- package/src/branch-names.ts +19 -0
- package/src/closest-names.ts +94 -0
- package/src/code-execution/index.ts +1 -0
- package/src/code-execution/py-runner.ts +304 -93
- package/src/code-execution/runtime-py.ts +94 -8
- package/src/code-execution/tool-definition.ts +85 -7
- package/src/config-checks.ts +50 -0
- package/src/deadline-timer.ts +44 -0
- package/src/error-message.ts +48 -0
- package/src/framework.ts +8625 -1984
- package/src/gate/event-gate.ts +38 -5
- package/src/held-writes.ts +59 -0
- package/src/index.ts +29 -5
- package/src/mcpl/capability-grant.ts +1 -1
- package/src/mcpl/channel-registry.ts +1095 -411
- package/src/mcpl/checkpoint-manager.ts +104 -29
- package/src/mcpl/conversation-router.ts +28 -8
- package/src/mcpl/convert-block.ts +105 -0
- package/src/mcpl/errors.ts +28 -0
- package/src/mcpl/hook-orchestrator.ts +84 -77
- package/src/mcpl/inbound-source.ts +156 -0
- package/src/mcpl/index.ts +23 -1
- package/src/mcpl/inference-router.ts +179 -103
- package/src/mcpl/log-value.ts +10 -0
- package/src/mcpl/modern-connection.ts +1182 -0
- package/src/mcpl/prefix-rule.ts +32 -0
- package/src/mcpl/protocol-family.ts +691 -0
- package/src/mcpl/push-coalescer.ts +110 -36
- package/src/mcpl/push-handler.ts +20 -90
- package/src/mcpl/reference-fetcher.ts +318 -67
- package/src/mcpl/references.ts +183 -34
- package/src/mcpl/server-connection.ts +1404 -280
- package/src/mcpl/server-registry.ts +63 -14
- package/src/mcpl/skip-reply-wake.ts +73 -0
- package/src/mcpl/tool-result-normalize.ts +294 -0
- package/src/mcpl/transport.ts +320 -76
- package/src/mcpl/types.ts +77 -19
- package/src/mcpl/visible-content.ts +28 -0
- package/src/module-registry.ts +126 -36
- package/src/modules/api/index.ts +3 -2
- package/src/modules/discord/discord-js-client.ts +306 -74
- package/src/modules/discord/index.ts +737 -201
- package/src/modules/discord/refusal.ts +13 -0
- package/src/modules/discord/types.ts +27 -6
- package/src/modules/health/index.ts +8 -3
- package/src/modules/history/index.ts +410 -120
- package/src/modules/history/semantic.ts +189 -32
- package/src/modules/index.ts +1 -1
- package/src/modules/unknown-tool.ts +16 -0
- package/src/modules/workspace/disk-agreement.ts +97 -8
- package/src/modules/workspace/effects.ts +291 -36
- package/src/modules/workspace/index.ts +1469 -321
- package/src/modules/workspace/observe.ts +784 -41
- package/src/modules/workspace/reconcile.ts +619 -64
- package/src/modules/workspace/types.ts +28 -5
- package/src/modules/workspace/watcher.ts +154 -30
- package/src/prose-drafts.ts +481 -0
- package/src/prose-segments.ts +51 -8
- package/src/recovery/offline-branch.ts +4 -1
- package/src/safe-slice.ts +9 -1
- package/src/silent-heartbeat.ts +184 -59
- package/src/tool-args.ts +213 -0
- package/src/tool-image-ledger.ts +153 -34
- package/src/tool-presentation.ts +233 -42
- package/src/tool-result-guard.ts +7 -8
- package/src/tool-result-history.ts +124 -20
- package/src/tune-out/coordinator.ts +259 -65
- package/src/types/agent.ts +44 -24
- package/src/types/events.ts +25 -0
- package/src/types/framework.ts +38 -7
- package/src/types/inference-log.ts +1 -1
- package/src/types/module.ts +79 -14
- package/src/types/trace.ts +103 -8
- package/src/usage/usage-tracker.ts +32 -8
- package/dist/test/activation-request-sanitize.test.d.ts +0 -2
- package/dist/test/activation-request-sanitize.test.d.ts.map +0 -1
- package/dist/test/activation-request-sanitize.test.js +0 -89
- package/dist/test/activation-request-sanitize.test.js.map +0 -1
- package/dist/test/agent-cache-ttl.test.d.ts +0 -2
- package/dist/test/agent-cache-ttl.test.d.ts.map +0 -1
- package/dist/test/agent-cache-ttl.test.js +0 -41
- package/dist/test/agent-cache-ttl.test.js.map +0 -1
- package/dist/test/agent-runtime-settings.test.d.ts +0 -2
- package/dist/test/agent-runtime-settings.test.d.ts.map +0 -1
- package/dist/test/agent-runtime-settings.test.js +0 -1598
- package/dist/test/agent-runtime-settings.test.js.map +0 -1
- package/dist/test/api-admin-gate.test.d.ts +0 -2
- package/dist/test/api-admin-gate.test.d.ts.map +0 -1
- package/dist/test/api-admin-gate.test.js +0 -116
- package/dist/test/api-admin-gate.test.js.map +0 -1
- package/dist/test/assistant-persist-refusal.test.d.ts +0 -2
- package/dist/test/assistant-persist-refusal.test.d.ts.map +0 -1
- package/dist/test/assistant-persist-refusal.test.js +0 -63
- package/dist/test/assistant-persist-refusal.test.js.map +0 -1
- package/dist/test/batched-wake-locus.test.d.ts +0 -2
- package/dist/test/batched-wake-locus.test.d.ts.map +0 -1
- package/dist/test/batched-wake-locus.test.js +0 -166
- package/dist/test/batched-wake-locus.test.js.map +0 -1
- package/dist/test/busy-agent-scheduler.test.d.ts +0 -2
- package/dist/test/busy-agent-scheduler.test.d.ts.map +0 -1
- package/dist/test/busy-agent-scheduler.test.js +0 -92
- package/dist/test/busy-agent-scheduler.test.js.map +0 -1
- package/dist/test/channel-incoming-targeting.test.d.ts +0 -2
- package/dist/test/channel-incoming-targeting.test.d.ts.map +0 -1
- package/dist/test/channel-incoming-targeting.test.js +0 -81
- package/dist/test/channel-incoming-targeting.test.js.map +0 -1
- package/dist/test/channel-label-history.test.d.ts +0 -2
- package/dist/test/channel-label-history.test.d.ts.map +0 -1
- package/dist/test/channel-label-history.test.js +0 -424
- package/dist/test/channel-label-history.test.js.map +0 -1
- package/dist/test/channel-lifecycle-provenance.test.d.ts +0 -2
- package/dist/test/channel-lifecycle-provenance.test.d.ts.map +0 -1
- package/dist/test/channel-lifecycle-provenance.test.js +0 -47
- package/dist/test/channel-lifecycle-provenance.test.js.map +0 -1
- package/dist/test/channel-registry-routing.test.d.ts +0 -2
- package/dist/test/channel-registry-routing.test.d.ts.map +0 -1
- package/dist/test/channel-registry-routing.test.js +0 -446
- package/dist/test/channel-registry-routing.test.js.map +0 -1
- package/dist/test/channel-registry-typing.test.d.ts +0 -2
- package/dist/test/channel-registry-typing.test.d.ts.map +0 -1
- package/dist/test/channel-registry-typing.test.js +0 -91
- package/dist/test/channel-registry-typing.test.js.map +0 -1
- package/dist/test/channels-changed-respond-first.test.d.ts +0 -2
- package/dist/test/channels-changed-respond-first.test.d.ts.map +0 -1
- package/dist/test/channels-changed-respond-first.test.js +0 -74
- package/dist/test/channels-changed-respond-first.test.js.map +0 -1
- package/dist/test/checkpoint-attribution.test.d.ts +0 -2
- package/dist/test/checkpoint-attribution.test.d.ts.map +0 -1
- package/dist/test/checkpoint-attribution.test.js +0 -200
- package/dist/test/checkpoint-attribution.test.js.map +0 -1
- package/dist/test/code-execution.test.d.ts +0 -11
- package/dist/test/code-execution.test.d.ts.map +0 -1
- package/dist/test/code-execution.test.js +0 -1272
- package/dist/test/code-execution.test.js.map +0 -1
- package/dist/test/component-defaults.test.d.ts +0 -2
- package/dist/test/component-defaults.test.d.ts.map +0 -1
- package/dist/test/component-defaults.test.js +0 -54
- package/dist/test/component-defaults.test.js.map +0 -1
- package/dist/test/conversation-fork-injection-scoping.test.d.ts +0 -2
- package/dist/test/conversation-fork-injection-scoping.test.d.ts.map +0 -1
- package/dist/test/conversation-fork-injection-scoping.test.js +0 -200
- package/dist/test/conversation-fork-injection-scoping.test.js.map +0 -1
- package/dist/test/conversation-router.test.d.ts +0 -2
- package/dist/test/conversation-router.test.d.ts.map +0 -1
- package/dist/test/conversation-router.test.js +0 -174
- package/dist/test/conversation-router.test.js.map +0 -1
- package/dist/test/conversation-routing.test.d.ts +0 -7
- package/dist/test/conversation-routing.test.d.ts.map +0 -1
- package/dist/test/conversation-routing.test.js +0 -621
- package/dist/test/conversation-routing.test.js.map +0 -1
- package/dist/test/deferred-wake-integrity.test.d.ts +0 -29
- package/dist/test/deferred-wake-integrity.test.d.ts.map +0 -1
- package/dist/test/deferred-wake-integrity.test.js +0 -320
- package/dist/test/deferred-wake-integrity.test.js.map +0 -1
- package/dist/test/discord-awareness-outbox.test.d.ts +0 -2
- package/dist/test/discord-awareness-outbox.test.d.ts.map +0 -1
- package/dist/test/discord-awareness-outbox.test.js +0 -371
- package/dist/test/discord-awareness-outbox.test.js.map +0 -1
- package/dist/test/discord-history-delete-window.test.d.ts +0 -2
- package/dist/test/discord-history-delete-window.test.d.ts.map +0 -1
- package/dist/test/discord-history-delete-window.test.js +0 -81
- package/dist/test/discord-history-delete-window.test.js.map +0 -1
- package/dist/test/discord-history-sync.test.d.ts +0 -2
- package/dist/test/discord-history-sync.test.d.ts.map +0 -1
- package/dist/test/discord-history-sync.test.js +0 -56
- package/dist/test/discord-history-sync.test.js.map +0 -1
- package/dist/test/discord-typing-keepalive.test.d.ts +0 -2
- package/dist/test/discord-typing-keepalive.test.d.ts.map +0 -1
- package/dist/test/discord-typing-keepalive.test.js +0 -77
- package/dist/test/discord-typing-keepalive.test.js.map +0 -1
- package/dist/test/ephemeral-settle.test.d.ts +0 -2
- package/dist/test/ephemeral-settle.test.d.ts.map +0 -1
- package/dist/test/ephemeral-settle.test.js +0 -354
- package/dist/test/ephemeral-settle.test.js.map +0 -1
- package/dist/test/event-gate-passthrough.test.d.ts +0 -15
- package/dist/test/event-gate-passthrough.test.d.ts.map +0 -1
- package/dist/test/event-gate-passthrough.test.js +0 -289
- package/dist/test/event-gate-passthrough.test.js.map +0 -1
- package/dist/test/event-gate-policy-mutation.test.d.ts +0 -2
- package/dist/test/event-gate-policy-mutation.test.d.ts.map +0 -1
- package/dist/test/event-gate-policy-mutation.test.js +0 -137
- package/dist/test/event-gate-policy-mutation.test.js.map +0 -1
- package/dist/test/event-gate-rate-limit.test.d.ts +0 -2
- package/dist/test/event-gate-rate-limit.test.d.ts.map +0 -1
- package/dist/test/event-gate-rate-limit.test.js +0 -627
- package/dist/test/event-gate-rate-limit.test.js.map +0 -1
- package/dist/test/event-gate-script.test.d.ts +0 -2
- package/dist/test/event-gate-script.test.d.ts.map +0 -1
- package/dist/test/event-gate-script.test.js +0 -95
- package/dist/test/event-gate-script.test.js.map +0 -1
- package/dist/test/event-gate-selfwake.test.d.ts +0 -15
- package/dist/test/event-gate-selfwake.test.d.ts.map +0 -1
- package/dist/test/event-gate-selfwake.test.js +0 -125
- package/dist/test/event-gate-selfwake.test.js.map +0 -1
- package/dist/test/event-gate-tags.test.d.ts +0 -2
- package/dist/test/event-gate-tags.test.d.ts.map +0 -1
- package/dist/test/event-gate-tags.test.js +0 -76
- package/dist/test/event-gate-tags.test.js.map +0 -1
- package/dist/test/event-gate.test.d.ts +0 -2
- package/dist/test/event-gate.test.d.ts.map +0 -1
- package/dist/test/event-gate.test.js +0 -919
- package/dist/test/event-gate.test.js.map +0 -1
- package/dist/test/explicit-prose-routing.test.d.ts +0 -11
- package/dist/test/explicit-prose-routing.test.d.ts.map +0 -1
- package/dist/test/explicit-prose-routing.test.js +0 -1715
- package/dist/test/explicit-prose-routing.test.js.map +0 -1
- package/dist/test/framework.test.d.ts +0 -5
- package/dist/test/framework.test.d.ts.map +0 -1
- package/dist/test/framework.test.js +0 -1048
- package/dist/test/framework.test.js.map +0 -1
- package/dist/test/gather-context-timeout.test.d.ts +0 -2
- package/dist/test/gather-context-timeout.test.d.ts.map +0 -1
- package/dist/test/gather-context-timeout.test.js +0 -120
- package/dist/test/gather-context-timeout.test.js.map +0 -1
- package/dist/test/health-snapshot.test.d.ts +0 -2
- package/dist/test/health-snapshot.test.d.ts.map +0 -1
- package/dist/test/health-snapshot.test.js +0 -74
- package/dist/test/health-snapshot.test.js.map +0 -1
- package/dist/test/helpers/coalescing-fixture.d.ts +0 -74
- package/dist/test/helpers/coalescing-fixture.d.ts.map +0 -1
- package/dist/test/helpers/coalescing-fixture.js +0 -152
- package/dist/test/helpers/coalescing-fixture.js.map +0 -1
- package/dist/test/helpers/coalescing-kill-child.d.ts +0 -2
- package/dist/test/helpers/coalescing-kill-child.d.ts.map +0 -1
- package/dist/test/helpers/coalescing-kill-child.js +0 -24
- package/dist/test/helpers/coalescing-kill-child.js.map +0 -1
- package/dist/test/helpers/mock-membrane.d.ts +0 -53
- package/dist/test/helpers/mock-membrane.d.ts.map +0 -1
- package/dist/test/helpers/mock-membrane.js +0 -168
- package/dist/test/helpers/mock-membrane.js.map +0 -1
- package/dist/test/helpers/pytc-stop-rows.d.ts +0 -11
- package/dist/test/helpers/pytc-stop-rows.d.ts.map +0 -1
- package/dist/test/helpers/pytc-stop-rows.js +0 -143
- package/dist/test/helpers/pytc-stop-rows.js.map +0 -1
- package/dist/test/helpers/quiesce-crash-child.d.ts +0 -2
- package/dist/test/helpers/quiesce-crash-child.d.ts.map +0 -1
- package/dist/test/helpers/quiesce-crash-child.js +0 -156
- package/dist/test/helpers/quiesce-crash-child.js.map +0 -1
- package/dist/test/hide-then-turn.test.d.ts +0 -2
- package/dist/test/hide-then-turn.test.d.ts.map +0 -1
- package/dist/test/hide-then-turn.test.js +0 -101
- package/dist/test/hide-then-turn.test.js.map +0 -1
- package/dist/test/history-module-overview.test.d.ts +0 -2
- package/dist/test/history-module-overview.test.d.ts.map +0 -1
- package/dist/test/history-module-overview.test.js +0 -711
- package/dist/test/history-module-overview.test.js.map +0 -1
- package/dist/test/history-module-realstore.test.d.ts +0 -2
- package/dist/test/history-module-realstore.test.d.ts.map +0 -1
- package/dist/test/history-module-realstore.test.js +0 -363
- package/dist/test/history-module-realstore.test.js.map +0 -1
- package/dist/test/history-module-semantic.test.d.ts +0 -2
- package/dist/test/history-module-semantic.test.d.ts.map +0 -1
- package/dist/test/history-module-semantic.test.js +0 -213
- package/dist/test/history-module-semantic.test.js.map +0 -1
- package/dist/test/history-module-ux.test.d.ts +0 -2
- package/dist/test/history-module-ux.test.d.ts.map +0 -1
- package/dist/test/history-module-ux.test.js +0 -304
- package/dist/test/history-module-ux.test.js.map +0 -1
- package/dist/test/history-module.test.d.ts +0 -2
- package/dist/test/history-module.test.d.ts.map +0 -1
- package/dist/test/history-module.test.js +0 -619
- package/dist/test/history-module.test.js.map +0 -1
- package/dist/test/history-semantic-review-findings.test.d.ts +0 -2
- package/dist/test/history-semantic-review-findings.test.d.ts.map +0 -1
- package/dist/test/history-semantic-review-findings.test.js +0 -338
- package/dist/test/history-semantic-review-findings.test.js.map +0 -1
- package/dist/test/history-semantic-sync-converges.test.d.ts +0 -2
- package/dist/test/history-semantic-sync-converges.test.d.ts.map +0 -1
- package/dist/test/history-semantic-sync-converges.test.js +0 -109
- package/dist/test/history-semantic-sync-converges.test.js.map +0 -1
- package/dist/test/host-quiesce.test.d.ts +0 -2
- package/dist/test/host-quiesce.test.d.ts.map +0 -1
- package/dist/test/host-quiesce.test.js +0 -988
- package/dist/test/host-quiesce.test.js.map +0 -1
- package/dist/test/inference-exhaustion-rewind.test.d.ts +0 -2
- package/dist/test/inference-exhaustion-rewind.test.d.ts.map +0 -1
- package/dist/test/inference-exhaustion-rewind.test.js +0 -387
- package/dist/test/inference-exhaustion-rewind.test.js.map +0 -1
- package/dist/test/inference-failure-bounds.test.d.ts +0 -2
- package/dist/test/inference-failure-bounds.test.d.ts.map +0 -1
- package/dist/test/inference-failure-bounds.test.js +0 -1202
- package/dist/test/inference-failure-bounds.test.js.map +0 -1
- package/dist/test/inference-failure-observability.test.d.ts +0 -2
- package/dist/test/inference-failure-observability.test.d.ts.map +0 -1
- package/dist/test/inference-failure-observability.test.js +0 -84
- package/dist/test/inference-failure-observability.test.js.map +0 -1
- package/dist/test/journal-tool.test.d.ts +0 -2
- package/dist/test/journal-tool.test.d.ts.map +0 -1
- package/dist/test/journal-tool.test.js +0 -33
- package/dist/test/journal-tool.test.js.map +0 -1
- package/dist/test/kv-unified-open-flight-retry.test.d.ts +0 -2
- package/dist/test/kv-unified-open-flight-retry.test.d.ts.map +0 -1
- package/dist/test/kv-unified-open-flight-retry.test.js +0 -189
- package/dist/test/kv-unified-open-flight-retry.test.js.map +0 -1
- package/dist/test/kv-unified-wiring.test.d.ts +0 -2
- package/dist/test/kv-unified-wiring.test.d.ts.map +0 -1
- package/dist/test/kv-unified-wiring.test.js +0 -95
- package/dist/test/kv-unified-wiring.test.js.map +0 -1
- package/dist/test/late-events-after-stop.test.d.ts +0 -2
- package/dist/test/late-events-after-stop.test.d.ts.map +0 -1
- package/dist/test/late-events-after-stop.test.js +0 -122
- package/dist/test/late-events-after-stop.test.js.map +0 -1
- package/dist/test/liveness-watchdog.test.d.ts +0 -2
- package/dist/test/liveness-watchdog.test.d.ts.map +0 -1
- package/dist/test/liveness-watchdog.test.js +0 -94
- package/dist/test/liveness-watchdog.test.js.map +0 -1
- package/dist/test/machine-close-provenance.test.d.ts +0 -2
- package/dist/test/machine-close-provenance.test.d.ts.map +0 -1
- package/dist/test/machine-close-provenance.test.js +0 -116
- package/dist/test/machine-close-provenance.test.js.map +0 -1
- package/dist/test/maintenance-timer.test.d.ts +0 -2
- package/dist/test/maintenance-timer.test.d.ts.map +0 -1
- package/dist/test/maintenance-timer.test.js +0 -1827
- package/dist/test/maintenance-timer.test.js.map +0 -1
- package/dist/test/mcp-server-bin.test.d.ts +0 -2
- package/dist/test/mcp-server-bin.test.d.ts.map +0 -1
- package/dist/test/mcp-server-bin.test.js +0 -142
- package/dist/test/mcp-server-bin.test.js.map +0 -1
- package/dist/test/mcpl-access-provider.test.d.ts +0 -2
- package/dist/test/mcpl-access-provider.test.d.ts.map +0 -1
- package/dist/test/mcpl-access-provider.test.js +0 -20
- package/dist/test/mcpl-access-provider.test.js.map +0 -1
- package/dist/test/mcpl-awareness-barrier.test.d.ts +0 -2
- package/dist/test/mcpl-awareness-barrier.test.d.ts.map +0 -1
- package/dist/test/mcpl-awareness-barrier.test.js +0 -769
- package/dist/test/mcpl-awareness-barrier.test.js.map +0 -1
- package/dist/test/mcpl-capability-grant.test.d.ts +0 -10
- package/dist/test/mcpl-capability-grant.test.d.ts.map +0 -1
- package/dist/test/mcpl-capability-grant.test.js +0 -111
- package/dist/test/mcpl-capability-grant.test.js.map +0 -1
- package/dist/test/mcpl-capability-scoping.test.d.ts +0 -2
- package/dist/test/mcpl-capability-scoping.test.d.ts.map +0 -1
- package/dist/test/mcpl-capability-scoping.test.js +0 -266
- package/dist/test/mcpl-capability-scoping.test.js.map +0 -1
- package/dist/test/mcpl-child-env.test.d.ts +0 -2
- package/dist/test/mcpl-child-env.test.d.ts.map +0 -1
- package/dist/test/mcpl-child-env.test.js +0 -158
- package/dist/test/mcpl-child-env.test.js.map +0 -1
- package/dist/test/mcpl-coalesced-content-parity.test.d.ts +0 -2
- package/dist/test/mcpl-coalesced-content-parity.test.d.ts.map +0 -1
- package/dist/test/mcpl-coalesced-content-parity.test.js +0 -532
- package/dist/test/mcpl-coalesced-content-parity.test.js.map +0 -1
- package/dist/test/mcpl-coalescing.test.d.ts +0 -2
- package/dist/test/mcpl-coalescing.test.d.ts.map +0 -1
- package/dist/test/mcpl-coalescing.test.js +0 -1125
- package/dist/test/mcpl-coalescing.test.js.map +0 -1
- package/dist/test/mcpl-config-diagnostics.test.d.ts +0 -2
- package/dist/test/mcpl-config-diagnostics.test.d.ts.map +0 -1
- package/dist/test/mcpl-config-diagnostics.test.js +0 -452
- package/dist/test/mcpl-config-diagnostics.test.js.map +0 -1
- package/dist/test/mcpl-empty-content.test.d.ts +0 -2
- package/dist/test/mcpl-empty-content.test.d.ts.map +0 -1
- package/dist/test/mcpl-empty-content.test.js +0 -368
- package/dist/test/mcpl-empty-content.test.js.map +0 -1
- package/dist/test/mcpl-gate-roundtrip.test.d.ts +0 -2
- package/dist/test/mcpl-gate-roundtrip.test.d.ts.map +0 -1
- package/dist/test/mcpl-gate-roundtrip.test.js +0 -285
- package/dist/test/mcpl-gate-roundtrip.test.js.map +0 -1
- package/dist/test/mcpl-list-status.test.d.ts +0 -2
- package/dist/test/mcpl-list-status.test.d.ts.map +0 -1
- package/dist/test/mcpl-list-status.test.js +0 -82
- package/dist/test/mcpl-list-status.test.js.map +0 -1
- package/dist/test/mcpl-manifest-changed.test.d.ts +0 -2
- package/dist/test/mcpl-manifest-changed.test.d.ts.map +0 -1
- package/dist/test/mcpl-manifest-changed.test.js +0 -178
- package/dist/test/mcpl-manifest-changed.test.js.map +0 -1
- package/dist/test/mcpl-push-convert.test.d.ts +0 -2
- package/dist/test/mcpl-push-convert.test.d.ts.map +0 -1
- package/dist/test/mcpl-push-convert.test.js +0 -42
- package/dist/test/mcpl-push-convert.test.js.map +0 -1
- package/dist/test/mcpl-reconnect-events.test.d.ts +0 -2
- package/dist/test/mcpl-reconnect-events.test.d.ts.map +0 -1
- package/dist/test/mcpl-reconnect-events.test.js +0 -144
- package/dist/test/mcpl-reconnect-events.test.js.map +0 -1
- package/dist/test/mcpl-reconnect-reregistration.test.d.ts +0 -2
- package/dist/test/mcpl-reconnect-reregistration.test.d.ts.map +0 -1
- package/dist/test/mcpl-reconnect-reregistration.test.js +0 -238
- package/dist/test/mcpl-reconnect-reregistration.test.js.map +0 -1
- package/dist/test/mcpl-reference-fetcher.test.d.ts +0 -2
- package/dist/test/mcpl-reference-fetcher.test.d.ts.map +0 -1
- package/dist/test/mcpl-reference-fetcher.test.js +0 -427
- package/dist/test/mcpl-reference-fetcher.test.js.map +0 -1
- package/dist/test/mcpl-reference-fields.test.d.ts +0 -2
- package/dist/test/mcpl-reference-fields.test.d.ts.map +0 -1
- package/dist/test/mcpl-reference-fields.test.js +0 -149
- package/dist/test/mcpl-reference-fields.test.js.map +0 -1
- package/dist/test/mcpl-rejection-log-lines.test.d.ts +0 -2
- package/dist/test/mcpl-rejection-log-lines.test.d.ts.map +0 -1
- package/dist/test/mcpl-rejection-log-lines.test.js +0 -349
- package/dist/test/mcpl-rejection-log-lines.test.js.map +0 -1
- package/dist/test/mcpl-request-timeout.test.d.ts +0 -2
- package/dist/test/mcpl-request-timeout.test.d.ts.map +0 -1
- package/dist/test/mcpl-request-timeout.test.js +0 -138
- package/dist/test/mcpl-request-timeout.test.js.map +0 -1
- package/dist/test/mcpl-runtime-lifecycle.test.d.ts +0 -7
- package/dist/test/mcpl-runtime-lifecycle.test.d.ts.map +0 -1
- package/dist/test/mcpl-runtime-lifecycle.test.js +0 -142
- package/dist/test/mcpl-runtime-lifecycle.test.js.map +0 -1
- package/dist/test/mcpl-stderr-tail.test.d.ts +0 -2
- package/dist/test/mcpl-stderr-tail.test.d.ts.map +0 -1
- package/dist/test/mcpl-stderr-tail.test.js +0 -210
- package/dist/test/mcpl-stderr-tail.test.js.map +0 -1
- package/dist/test/mcpl-tool-class-listing.test.d.ts +0 -2
- package/dist/test/mcpl-tool-class-listing.test.d.ts.map +0 -1
- package/dist/test/mcpl-tool-class-listing.test.js +0 -147
- package/dist/test/mcpl-tool-class-listing.test.js.map +0 -1
- package/dist/test/mcpl-tool-classes.test.d.ts +0 -7
- package/dist/test/mcpl-tool-classes.test.d.ts.map +0 -1
- package/dist/test/mcpl-tool-classes.test.js +0 -80
- package/dist/test/mcpl-tool-classes.test.js.map +0 -1
- package/dist/test/mcpl-tool-lifecycle-e2e.test.d.ts +0 -2
- package/dist/test/mcpl-tool-lifecycle-e2e.test.d.ts.map +0 -1
- package/dist/test/mcpl-tool-lifecycle-e2e.test.js +0 -237
- package/dist/test/mcpl-tool-lifecycle-e2e.test.js.map +0 -1
- package/dist/test/mcpl-tool-lifecycle-emitter.test.d.ts +0 -11
- package/dist/test/mcpl-tool-lifecycle-emitter.test.d.ts.map +0 -1
- package/dist/test/mcpl-tool-lifecycle-emitter.test.js +0 -412
- package/dist/test/mcpl-tool-lifecycle-emitter.test.js.map +0 -1
- package/dist/test/mcpl-tool-lifecycle-script.test.d.ts +0 -2
- package/dist/test/mcpl-tool-lifecycle-script.test.d.ts.map +0 -1
- package/dist/test/mcpl-tool-lifecycle-script.test.js +0 -288
- package/dist/test/mcpl-tool-lifecycle-script.test.js.map +0 -1
- package/dist/test/mcpl-tool-lifecycle.test.d.ts +0 -11
- package/dist/test/mcpl-tool-lifecycle.test.d.ts.map +0 -1
- package/dist/test/mcpl-tool-lifecycle.test.js +0 -270
- package/dist/test/mcpl-tool-lifecycle.test.js.map +0 -1
- package/dist/test/mcpl-transport-close.test.d.ts +0 -2
- package/dist/test/mcpl-transport-close.test.d.ts.map +0 -1
- package/dist/test/mcpl-transport-close.test.js +0 -373
- package/dist/test/mcpl-transport-close.test.js.map +0 -1
- package/dist/test/mcpl-transport-spawn.test.d.ts +0 -2
- package/dist/test/mcpl-transport-spawn.test.d.ts.map +0 -1
- package/dist/test/mcpl-transport-spawn.test.js +0 -58
- package/dist/test/mcpl-transport-spawn.test.js.map +0 -1
- package/dist/test/mcpl-ws-transport.test.d.ts +0 -2
- package/dist/test/mcpl-ws-transport.test.d.ts.map +0 -1
- package/dist/test/mcpl-ws-transport.test.js +0 -259
- package/dist/test/mcpl-ws-transport.test.js.map +0 -1
- package/dist/test/module-context-integration.test.d.ts +0 -18
- package/dist/test/module-context-integration.test.d.ts.map +0 -1
- package/dist/test/module-context-integration.test.js +0 -181
- package/dist/test/module-context-integration.test.js.map +0 -1
- package/dist/test/offline-recovery-branch.test.d.ts +0 -2
- package/dist/test/offline-recovery-branch.test.d.ts.map +0 -1
- package/dist/test/offline-recovery-branch.test.js +0 -570
- package/dist/test/offline-recovery-branch.test.js.map +0 -1
- package/dist/test/operator-surgery.test.d.ts +0 -2
- package/dist/test/operator-surgery.test.d.ts.map +0 -1
- package/dist/test/operator-surgery.test.js +0 -595
- package/dist/test/operator-surgery.test.js.map +0 -1
- package/dist/test/ops-alert.test.d.ts +0 -2
- package/dist/test/ops-alert.test.d.ts.map +0 -1
- package/dist/test/ops-alert.test.js +0 -153
- package/dist/test/ops-alert.test.js.map +0 -1
- package/dist/test/overbudget-drain-breaker.test.d.ts +0 -2
- package/dist/test/overbudget-drain-breaker.test.d.ts.map +0 -1
- package/dist/test/overbudget-drain-breaker.test.js +0 -198
- package/dist/test/overbudget-drain-breaker.test.js.map +0 -1
- package/dist/test/pack-installs-alone.test.d.ts +0 -2
- package/dist/test/pack-installs-alone.test.d.ts.map +0 -1
- package/dist/test/pack-installs-alone.test.js +0 -284
- package/dist/test/pack-installs-alone.test.js.map +0 -1
- package/dist/test/per-agent-delivery.test.d.ts +0 -2
- package/dist/test/per-agent-delivery.test.d.ts.map +0 -1
- package/dist/test/per-agent-delivery.test.js +0 -108
- package/dist/test/per-agent-delivery.test.js.map +0 -1
- package/dist/test/physical-window-restart.test.d.ts +0 -16
- package/dist/test/physical-window-restart.test.d.ts.map +0 -1
- package/dist/test/physical-window-restart.test.js +0 -487
- package/dist/test/physical-window-restart.test.js.map +0 -1
- package/dist/test/placed-reaction-baseline.test.d.ts +0 -2
- package/dist/test/placed-reaction-baseline.test.d.ts.map +0 -1
- package/dist/test/placed-reaction-baseline.test.js +0 -312
- package/dist/test/placed-reaction-baseline.test.js.map +0 -1
- package/dist/test/present-while-acting.test.d.ts +0 -19
- package/dist/test/present-while-acting.test.d.ts.map +0 -1
- package/dist/test/present-while-acting.test.js +0 -1649
- package/dist/test/present-while-acting.test.js.map +0 -1
- package/dist/test/prose-segments.test.d.ts +0 -2
- package/dist/test/prose-segments.test.d.ts.map +0 -1
- package/dist/test/prose-segments.test.js +0 -52
- package/dist/test/prose-segments.test.js.map +0 -1
- package/dist/test/prose-stream-router.test.d.ts +0 -2
- package/dist/test/prose-stream-router.test.d.ts.map +0 -1
- package/dist/test/prose-stream-router.test.js +0 -171
- package/dist/test/prose-stream-router.test.js.map +0 -1
- package/dist/test/provider-acceleration-cooldown.test.d.ts +0 -2
- package/dist/test/provider-acceleration-cooldown.test.d.ts.map +0 -1
- package/dist/test/provider-acceleration-cooldown.test.js +0 -435
- package/dist/test/provider-acceleration-cooldown.test.js.map +0 -1
- package/dist/test/provider-waits.test.d.ts +0 -2
- package/dist/test/provider-waits.test.d.ts.map +0 -1
- package/dist/test/provider-waits.test.js +0 -2259
- package/dist/test/provider-waits.test.js.map +0 -1
- package/dist/test/puppet-tool-call.test.d.ts +0 -2
- package/dist/test/puppet-tool-call.test.d.ts.map +0 -1
- package/dist/test/puppet-tool-call.test.js +0 -226
- package/dist/test/puppet-tool-call.test.js.map +0 -1
- package/dist/test/puppet-turn-reservation.test.d.ts +0 -2
- package/dist/test/puppet-turn-reservation.test.d.ts.map +0 -1
- package/dist/test/puppet-turn-reservation.test.js +0 -139
- package/dist/test/puppet-turn-reservation.test.js.map +0 -1
- package/dist/test/reaction-baseline-platform.test.d.ts +0 -2
- package/dist/test/reaction-baseline-platform.test.d.ts.map +0 -1
- package/dist/test/reaction-baseline-platform.test.js +0 -124
- package/dist/test/reaction-baseline-platform.test.js.map +0 -1
- package/dist/test/record-journal.test.d.ts +0 -6
- package/dist/test/record-journal.test.d.ts.map +0 -1
- package/dist/test/record-journal.test.js +0 -269
- package/dist/test/record-journal.test.js.map +0 -1
- package/dist/test/refusal-reaction-baseline.test.d.ts +0 -2
- package/dist/test/refusal-reaction-baseline.test.d.ts.map +0 -1
- package/dist/test/refusal-reaction-baseline.test.js +0 -81
- package/dist/test/refusal-reaction-baseline.test.js.map +0 -1
- package/dist/test/refusal-rewind.test.d.ts +0 -2
- package/dist/test/refusal-rewind.test.d.ts.map +0 -1
- package/dist/test/refusal-rewind.test.js +0 -117
- package/dist/test/refusal-rewind.test.js.map +0 -1
- package/dist/test/refusal-single-call.test.d.ts +0 -2
- package/dist/test/refusal-single-call.test.d.ts.map +0 -1
- package/dist/test/refusal-single-call.test.js +0 -177
- package/dist/test/refusal-single-call.test.js.map +0 -1
- package/dist/test/release-bump.test.d.ts +0 -2
- package/dist/test/release-bump.test.d.ts.map +0 -1
- package/dist/test/release-bump.test.js +0 -248
- package/dist/test/release-bump.test.js.map +0 -1
- package/dist/test/release-changelog.test.d.ts +0 -2
- package/dist/test/release-changelog.test.d.ts.map +0 -1
- package/dist/test/release-changelog.test.js +0 -159
- package/dist/test/release-changelog.test.js.map +0 -1
- package/dist/test/release-holds.test.d.ts +0 -2
- package/dist/test/release-holds.test.d.ts.map +0 -1
- package/dist/test/release-holds.test.js +0 -456
- package/dist/test/release-holds.test.js.map +0 -1
- package/dist/test/same-round-think-policy.test.d.ts +0 -2
- package/dist/test/same-round-think-policy.test.d.ts.map +0 -1
- package/dist/test/same-round-think-policy.test.js +0 -853
- package/dist/test/same-round-think-policy.test.js.map +0 -1
- package/dist/test/save-recent-image.test.d.ts +0 -26
- package/dist/test/save-recent-image.test.d.ts.map +0 -1
- package/dist/test/save-recent-image.test.js +0 -974
- package/dist/test/save-recent-image.test.js.map +0 -1
- package/dist/test/shutdown-errors.test.d.ts +0 -2
- package/dist/test/shutdown-errors.test.d.ts.map +0 -1
- package/dist/test/shutdown-errors.test.js +0 -662
- package/dist/test/shutdown-errors.test.js.map +0 -1
- package/dist/test/silent-heartbeat-rows.test.d.ts +0 -2
- package/dist/test/silent-heartbeat-rows.test.d.ts.map +0 -1
- package/dist/test/silent-heartbeat-rows.test.js +0 -451
- package/dist/test/silent-heartbeat-rows.test.js.map +0 -1
- package/dist/test/silent-heartbeat.test.d.ts +0 -2
- package/dist/test/silent-heartbeat.test.d.ts.map +0 -1
- package/dist/test/silent-heartbeat.test.js +0 -165
- package/dist/test/silent-heartbeat.test.js.map +0 -1
- package/dist/test/state-scaling-e2e.test.d.ts +0 -22
- package/dist/test/state-scaling-e2e.test.d.ts.map +0 -1
- package/dist/test/state-scaling-e2e.test.js +0 -206
- package/dist/test/state-scaling-e2e.test.js.map +0 -1
- package/dist/test/state-scaling.test.d.ts +0 -12
- package/dist/test/state-scaling.test.d.ts.map +0 -1
- package/dist/test/state-scaling.test.js +0 -251
- package/dist/test/state-scaling.test.js.map +0 -1
- package/dist/test/stop-with-host-operations.test.d.ts +0 -20
- package/dist/test/stop-with-host-operations.test.d.ts.map +0 -1
- package/dist/test/stop-with-host-operations.test.js +0 -1174
- package/dist/test/stop-with-host-operations.test.js.map +0 -1
- package/dist/test/stop-with-work-in-flight.test.d.ts +0 -23
- package/dist/test/stop-with-work-in-flight.test.d.ts.map +0 -1
- package/dist/test/stop-with-work-in-flight.test.js +0 -784
- package/dist/test/stop-with-work-in-flight.test.js.map +0 -1
- package/dist/test/surgery-marks-receipt.test.d.ts +0 -2
- package/dist/test/surgery-marks-receipt.test.d.ts.map +0 -1
- package/dist/test/surgery-marks-receipt.test.js +0 -540
- package/dist/test/surgery-marks-receipt.test.js.map +0 -1
- package/dist/test/thinking-token-stamp.test.d.ts +0 -12
- package/dist/test/thinking-token-stamp.test.d.ts.map +0 -1
- package/dist/test/thinking-token-stamp.test.js +0 -129
- package/dist/test/thinking-token-stamp.test.js.map +0 -1
- package/dist/test/timezone.test.d.ts +0 -2
- package/dist/test/timezone.test.d.ts.map +0 -1
- package/dist/test/timezone.test.js +0 -18
- package/dist/test/timezone.test.js.map +0 -1
- package/dist/test/tool-batch-hook.test.d.ts +0 -8
- package/dist/test/tool-batch-hook.test.d.ts.map +0 -1
- package/dist/test/tool-batch-hook.test.js +0 -275
- package/dist/test/tool-batch-hook.test.js.map +0 -1
- package/dist/test/tool-policy.test.d.ts +0 -2
- package/dist/test/tool-policy.test.d.ts.map +0 -1
- package/dist/test/tool-policy.test.js +0 -51
- package/dist/test/tool-policy.test.js.map +0 -1
- package/dist/test/tool-presentation.test.d.ts +0 -2
- package/dist/test/tool-presentation.test.d.ts.map +0 -1
- package/dist/test/tool-presentation.test.js +0 -268
- package/dist/test/tool-presentation.test.js.map +0 -1
- package/dist/test/tool-result-content.test.d.ts +0 -2
- package/dist/test/tool-result-content.test.d.ts.map +0 -1
- package/dist/test/tool-result-content.test.js +0 -37
- package/dist/test/tool-result-content.test.js.map +0 -1
- package/dist/test/tool-result-guard.test.d.ts +0 -2
- package/dist/test/tool-result-guard.test.d.ts.map +0 -1
- package/dist/test/tool-result-guard.test.js +0 -3729
- package/dist/test/tool-result-guard.test.js.map +0 -1
- package/dist/test/tool-result-history.test.d.ts +0 -7
- package/dist/test/tool-result-history.test.d.ts.map +0 -1
- package/dist/test/tool-result-history.test.js +0 -156
- package/dist/test/tool-result-history.test.js.map +0 -1
- package/dist/test/tool-result-spill.test.d.ts +0 -13
- package/dist/test/tool-result-spill.test.d.ts.map +0 -1
- package/dist/test/tool-result-spill.test.js +0 -586
- package/dist/test/tool-result-spill.test.js.map +0 -1
- package/dist/test/tool-wrapper-prose-guard-integration.test.d.ts +0 -2
- package/dist/test/tool-wrapper-prose-guard-integration.test.d.ts.map +0 -1
- package/dist/test/tool-wrapper-prose-guard-integration.test.js +0 -485
- package/dist/test/tool-wrapper-prose-guard-integration.test.js.map +0 -1
- package/dist/test/tool-wrapper-prose-guard.test.d.ts +0 -2
- package/dist/test/tool-wrapper-prose-guard.test.d.ts.map +0 -1
- package/dist/test/tool-wrapper-prose-guard.test.js +0 -34
- package/dist/test/tool-wrapper-prose-guard.test.js.map +0 -1
- package/dist/test/tools-observe-parser-conformance.test.d.ts +0 -2
- package/dist/test/tools-observe-parser-conformance.test.d.ts.map +0 -1
- package/dist/test/tools-observe-parser-conformance.test.js +0 -129
- package/dist/test/tools-observe-parser-conformance.test.js.map +0 -1
- package/dist/test/trunk-channel-routing.test.d.ts +0 -19
- package/dist/test/trunk-channel-routing.test.d.ts.map +0 -1
- package/dist/test/trunk-channel-routing.test.js +0 -652
- package/dist/test/trunk-channel-routing.test.js.map +0 -1
- package/dist/test/tune-out-e2e.test.d.ts +0 -2
- package/dist/test/tune-out-e2e.test.d.ts.map +0 -1
- package/dist/test/tune-out-e2e.test.js +0 -142
- package/dist/test/tune-out-e2e.test.js.map +0 -1
- package/dist/test/tune-out-gate-composition.test.d.ts +0 -2
- package/dist/test/tune-out-gate-composition.test.d.ts.map +0 -1
- package/dist/test/tune-out-gate-composition.test.js +0 -221
- package/dist/test/tune-out-gate-composition.test.js.map +0 -1
- package/dist/test/tune-out-lifecycle.test.d.ts +0 -2
- package/dist/test/tune-out-lifecycle.test.d.ts.map +0 -1
- package/dist/test/tune-out-lifecycle.test.js +0 -121
- package/dist/test/tune-out-lifecycle.test.js.map +0 -1
- package/dist/test/turn-trigger-provenance.test.d.ts +0 -2
- package/dist/test/turn-trigger-provenance.test.d.ts.map +0 -1
- package/dist/test/turn-trigger-provenance.test.js +0 -137
- package/dist/test/turn-trigger-provenance.test.js.map +0 -1
- package/dist/test/unconvertible-tool-result.test.d.ts +0 -2
- package/dist/test/unconvertible-tool-result.test.d.ts.map +0 -1
- package/dist/test/unconvertible-tool-result.test.js +0 -358
- package/dist/test/unconvertible-tool-result.test.js.map +0 -1
- package/dist/test/unsent-compiles.test.d.ts +0 -2
- package/dist/test/unsent-compiles.test.d.ts.map +0 -1
- package/dist/test/unsent-compiles.test.js +0 -139
- package/dist/test/unsent-compiles.test.js.map +0 -1
- package/dist/test/usage-accounting.test.d.ts +0 -2
- package/dist/test/usage-accounting.test.d.ts.map +0 -1
- package/dist/test/usage-accounting.test.js +0 -13
- package/dist/test/usage-accounting.test.js.map +0 -1
- package/dist/test/usage-tracker.test.d.ts +0 -2
- package/dist/test/usage-tracker.test.d.ts.map +0 -1
- package/dist/test/usage-tracker.test.js +0 -129
- package/dist/test/usage-tracker.test.js.map +0 -1
- package/dist/test/utils-surface.test.d.ts +0 -2
- package/dist/test/utils-surface.test.d.ts.map +0 -1
- package/dist/test/utils-surface.test.js +0 -145
- package/dist/test/utils-surface.test.js.map +0 -1
- package/dist/test/workspace-branch-continuation.test.d.ts +0 -15
- package/dist/test/workspace-branch-continuation.test.d.ts.map +0 -1
- package/dist/test/workspace-branch-continuation.test.js +0 -183
- package/dist/test/workspace-branch-continuation.test.js.map +0 -1
- package/dist/test/workspace-materialize-freshness.test.d.ts +0 -16
- package/dist/test/workspace-materialize-freshness.test.d.ts.map +0 -1
- package/dist/test/workspace-materialize-freshness.test.js +0 -252
- package/dist/test/workspace-materialize-freshness.test.js.map +0 -1
- package/dist/test/workspace-path-containment.test.d.ts +0 -19
- package/dist/test/workspace-path-containment.test.d.ts.map +0 -1
- package/dist/test/workspace-path-containment.test.js +0 -91
- package/dist/test/workspace-path-containment.test.js.map +0 -1
- package/dist/test/workspace-read-file-from-disk.test.d.ts +0 -17
- package/dist/test/workspace-read-file-from-disk.test.d.ts.map +0 -1
- package/dist/test/workspace-read-file-from-disk.test.js +0 -174
- package/dist/test/workspace-read-file-from-disk.test.js.map +0 -1
- package/dist/test/workspace-read-image.test.d.ts +0 -2
- package/dist/test/workspace-read-image.test.d.ts.map +0 -1
- package/dist/test/workspace-read-image.test.js +0 -597
- package/dist/test/workspace-read-image.test.js.map +0 -1
- package/dist/test/workspace-read-text.test.d.ts +0 -2
- package/dist/test/workspace-read-text.test.d.ts.map +0 -1
- package/dist/test/workspace-read-text.test.js +0 -101
- package/dist/test/workspace-read-text.test.js.map +0 -1
- package/dist/test/workspace-restore-order.test.d.ts +0 -16
- package/dist/test/workspace-restore-order.test.d.ts.map +0 -1
- package/dist/test/workspace-restore-order.test.js +0 -140
- package/dist/test/workspace-restore-order.test.js.map +0 -1
- package/dist/test/workspace-three-way.test.d.ts +0 -12
- package/dist/test/workspace-three-way.test.d.ts.map +0 -1
- package/dist/test/workspace-three-way.test.js +0 -4094
- package/dist/test/workspace-three-way.test.js.map +0 -1
- package/dist/test/workspace-watcher.test.d.ts +0 -2
- package/dist/test/workspace-watcher.test.d.ts.map +0 -1
- package/dist/test/workspace-watcher.test.js +0 -281
- package/dist/test/workspace-watcher.test.js.map +0 -1
- package/dist/test/xml-round-persist.test.d.ts +0 -19
- package/dist/test/xml-round-persist.test.d.ts.map +0 -1
- package/dist/test/xml-round-persist.test.js +0 -235
- package/dist/test/xml-round-persist.test.js.map +0 -1
- package/dist/tsconfig.tsbuildinfo +0 -1
package/src/agent.ts
CHANGED
|
@@ -3,14 +3,21 @@ import { isAbortedResponse } from '@animalabs/membrane';
|
|
|
3
3
|
import { createHash } from 'node:crypto';
|
|
4
4
|
import type { CacheWireReceipt, KvUnifiedRequestHooks } from './kv-unified-wire.js';
|
|
5
5
|
import { ToolResultGuard } from './tool-result-guard.js';
|
|
6
|
+
import { assertBooleanSetting, holdsSettings } from './config-checks.js';
|
|
6
7
|
import {
|
|
7
|
-
|
|
8
|
-
|
|
8
|
+
CONTINUE_ROW,
|
|
9
|
+
continueTurn,
|
|
10
|
+
indexRequestOnlyRows,
|
|
11
|
+
renderRequestOnlyRows,
|
|
9
12
|
silentHeartbeatSeparatorTurn,
|
|
13
|
+
tickKey,
|
|
14
|
+
toolLoopPrompt,
|
|
15
|
+
type RequestOnlyPrompt,
|
|
16
|
+
type RequestOnlyRowIndex,
|
|
10
17
|
type SilentHeartbeatTick,
|
|
11
|
-
type SilentTickIndex,
|
|
12
18
|
type StoredRowLike,
|
|
13
19
|
} from './silent-heartbeat.js';
|
|
20
|
+
import { randomUUID } from 'node:crypto';
|
|
14
21
|
import {
|
|
15
22
|
nonErrorResultText,
|
|
16
23
|
truncateForHistory,
|
|
@@ -28,6 +35,13 @@ export interface ActivationRequestOptions {
|
|
|
28
35
|
export interface StartStreamResult {
|
|
29
36
|
stream: YieldingStream;
|
|
30
37
|
request: NormalizedRequest;
|
|
38
|
+
/** The request-only `[Continue]` prompt this request's reply follows, if
|
|
39
|
+
* any, read from the request: a new one when it ends on `[Continue]`;
|
|
40
|
+
* else, when it ends on tool results, the prompt of the reply that called
|
|
41
|
+
* those tools (`toolLoopPrompt`); else none. The framework stamps the
|
|
42
|
+
* reply's rows with it (`metadata.promptedBy`), for later compiles to
|
|
43
|
+
* render it before them. */
|
|
44
|
+
continuePrompt?: RequestOnlyPrompt;
|
|
31
45
|
takeKvSubmission?: () => { submissionId: string; wireReceipt: CacheWireReceipt } | undefined;
|
|
32
46
|
drainKvSubmissionIds?: () => string[];
|
|
33
47
|
}
|
|
@@ -75,6 +89,53 @@ const DEFAULT_CONTEXT_BUDGET_TOKENS = 100_000;
|
|
|
75
89
|
const DEFAULT_TRANSITION_PACE_TOKENS = 16_000;
|
|
76
90
|
const DEFAULT_SAME_ROUND_THINK_TEXT_POLICY: SameRoundThinkTextPolicy = 'public';
|
|
77
91
|
|
|
92
|
+
/**
|
|
93
|
+
* Refuse an agent config whose `promptCaching`, `toolResultGuard`,
|
|
94
|
+
* `toolWrapperProseGuard`, `thinking.enabled` or `refusalHandling.autoRewind`
|
|
95
|
+
* holds anything but true or false (assertBooleanSetting), or whose `thinking`
|
|
96
|
+
* or `refusalHandling` is anything but an object, null or false
|
|
97
|
+
* (holdsSettings). The constructor runs it first, so the rule holds wherever
|
|
98
|
+
* an Agent is built. `create()` also runs it for each of its agents before
|
|
99
|
+
* anything opens, and `createEphemeralAgent` before it reserves the name, so a
|
|
100
|
+
* refusal there leaves nothing behind. Membrane reads `thinking.enabled`, and
|
|
101
|
+
* the refusal is here because the setting is AgentConfig's.
|
|
102
|
+
*/
|
|
103
|
+
export function assertAgentSwitches(config: AgentConfig): void {
|
|
104
|
+
const agent = `Agent "${config.name}"`;
|
|
105
|
+
assertBooleanSetting(
|
|
106
|
+
`${agent} promptCaching`,
|
|
107
|
+
config.promptCaching,
|
|
108
|
+
'true or leaving it out marks requests for prompt caching, and false leaves the markers off, for transports that refuse them',
|
|
109
|
+
);
|
|
110
|
+
if (holdsSettings(`${agent} thinking`, config.thinking, '{ enabled: true }')) {
|
|
111
|
+
assertBooleanSetting(
|
|
112
|
+
`${agent} thinking.enabled`,
|
|
113
|
+
config.thinking.enabled,
|
|
114
|
+
'true asks the provider for extended thinking, and false or leaving it out doesn\'t',
|
|
115
|
+
);
|
|
116
|
+
}
|
|
117
|
+
if (holdsSettings(`${agent} refusalHandling`, config.refusalHandling, '{ autoRewind: true }')) {
|
|
118
|
+
assertBooleanSetting(
|
|
119
|
+
`${agent} refusalHandling.autoRewind`,
|
|
120
|
+
config.refusalHandling.autoRewind,
|
|
121
|
+
'true redacts the turn that tripped a refusal and runs again, up to maxRewinds times, ' +
|
|
122
|
+
'and false or leaving it out doesn\'t',
|
|
123
|
+
);
|
|
124
|
+
}
|
|
125
|
+
assertBooleanSetting(
|
|
126
|
+
`${agent} toolResultGuard`,
|
|
127
|
+
config.toolResultGuard,
|
|
128
|
+
'true turns on tool-output admission, with one guarded retry after a provider refusal, ' +
|
|
129
|
+
'and false or leaving it out doesn\'t',
|
|
130
|
+
);
|
|
131
|
+
assertBooleanSetting(
|
|
132
|
+
`${agent} toolWrapperProseGuard`,
|
|
133
|
+
config.toolWrapperProseGuard,
|
|
134
|
+
'true keeps a response whose whole prose is a tool-call-shaped wrapper from running or entering the agent\'s history, ' +
|
|
135
|
+
'and false or leaving it out doesn\'t',
|
|
136
|
+
);
|
|
137
|
+
}
|
|
138
|
+
|
|
78
139
|
/**
|
|
79
140
|
* An agent wraps a context manager and manages inference state.
|
|
80
141
|
*/
|
|
@@ -221,6 +282,7 @@ export class Agent {
|
|
|
221
282
|
contextManager: ContextManager,
|
|
222
283
|
membrane: Membrane
|
|
223
284
|
) {
|
|
285
|
+
assertAgentSwitches(config);
|
|
224
286
|
this.name = config.name;
|
|
225
287
|
this.model = config.model;
|
|
226
288
|
this.systemPrompt = config.systemPrompt;
|
|
@@ -230,11 +292,11 @@ export class Agent {
|
|
|
230
292
|
this.temperature = config.temperature;
|
|
231
293
|
this.thinking = config.thinking;
|
|
232
294
|
this.refusalHandling = config.refusalHandling;
|
|
233
|
-
this.toolResultGuard = new ToolResultGuard(config.name, contextManager, config.toolResultGuard);
|
|
295
|
+
this.toolResultGuard = new ToolResultGuard(config.name, contextManager, config.toolResultGuard === true);
|
|
234
296
|
this.proseRouting = config.proseRouting ?? 'locus';
|
|
235
|
-
this.toolWrapperProseGuard = config.toolWrapperProseGuard
|
|
297
|
+
this.toolWrapperProseGuard = config.toolWrapperProseGuard === true;
|
|
236
298
|
this.cacheTtl = config.cacheTtl ?? '1h';
|
|
237
|
-
this.promptCaching = config.promptCaching
|
|
299
|
+
this.promptCaching = config.promptCaching !== false;
|
|
238
300
|
this.prefillUserMessage = config.prefillUserMessage;
|
|
239
301
|
this.providerParams = config.providerParams;
|
|
240
302
|
this.sameRoundThinkTextPolicy = config.sameRoundThinkTextPolicy;
|
|
@@ -862,20 +924,42 @@ export class Agent {
|
|
|
862
924
|
|
|
863
925
|
/**
|
|
864
926
|
* RFC-006 consumed watermark: the newest stored message at the last compile
|
|
865
|
-
* of a model request,
|
|
927
|
+
* of a model request, or at the last tool boundary that injected messages
|
|
928
|
+
* into a live one, per branch. Everything above it has never been in a
|
|
866
929
|
* request and may still be replaced or withdrawn in place by its sender.
|
|
867
930
|
*/
|
|
868
931
|
private consumedWatermark: { branch: string; sequence: number } | null = null;
|
|
932
|
+
/** Counts marks: a compile writes its watermark back only if no mark was
|
|
933
|
+
* made while it ran (a tool boundary's, or another compile's). */
|
|
934
|
+
private watermarkMarks = 0;
|
|
869
935
|
|
|
870
936
|
getConsumedWatermark(): { branch: string; sequence: number } | null {
|
|
871
937
|
return this.consumedWatermark;
|
|
872
938
|
}
|
|
873
939
|
|
|
874
|
-
/** Mark everything currently stored as consumed (
|
|
940
|
+
/** Mark everything currently stored as consumed (the agent's creation, at
|
|
941
|
+
* boot or later, and a tool boundary that injected messages into the live
|
|
942
|
+
* stream). */
|
|
875
943
|
markContextConsumed(): void {
|
|
876
944
|
// Tolerates partial context-manager doubles (tests build Agents over
|
|
877
945
|
// stubs): without a watermark nothing is ever treated as unread.
|
|
878
946
|
this.consumedWatermark = this.pendingWatermark();
|
|
947
|
+
this.watermarkMarks++;
|
|
948
|
+
}
|
|
949
|
+
|
|
950
|
+
/**
|
|
951
|
+
* A finished compile's watermark, taken before it awaited. Within a branch
|
|
952
|
+
* the watermark only advances: if a mark was made while the compile ran,
|
|
953
|
+
* the compile's (older) one is applied only where it is later on that
|
|
954
|
+
* mark's branch, so a boundary's mark is never rolled back by a compile
|
|
955
|
+
* that started before it (a preview during a live turn).
|
|
956
|
+
*/
|
|
957
|
+
private applyCompileWatermark(watermark: { branch: string; sequence: number }, marksBefore: number): void {
|
|
958
|
+
const current = this.consumedWatermark;
|
|
959
|
+
if (this.watermarkMarks !== marksBefore && current
|
|
960
|
+
&& (current.branch !== watermark.branch || current.sequence >= watermark.sequence)) return;
|
|
961
|
+
this.consumedWatermark = watermark;
|
|
962
|
+
this.watermarkMarks++;
|
|
879
963
|
}
|
|
880
964
|
|
|
881
965
|
/** The watermark a successful compile will establish (taken before, applied after). */
|
|
@@ -907,9 +991,10 @@ export class Agent {
|
|
|
907
991
|
// RFC-006 §3.3: consumption is determined at assembly — a compile that
|
|
908
992
|
// fails assembled nothing, so the watermark moves only on success.
|
|
909
993
|
const watermark = this.pendingWatermark();
|
|
994
|
+
const marksBefore = this.watermarkMarks;
|
|
910
995
|
const compile = () => this.contextManager.compile(this.compileBudget(budget));
|
|
911
996
|
const result = budget ? await compile() : await this.compileAtLiveBudget(compile);
|
|
912
|
-
if (watermark) this.
|
|
997
|
+
if (watermark) this.applyCompileWatermark(watermark, marksBefore);
|
|
913
998
|
return result;
|
|
914
999
|
}
|
|
915
1000
|
|
|
@@ -948,9 +1033,10 @@ export class Agent {
|
|
|
948
1033
|
// compression hold whose deadline has passed, which `compile` does for
|
|
949
1034
|
// any compile before it selects.
|
|
950
1035
|
const watermark = opts?.dryRun ? null : this.pendingWatermark();
|
|
1036
|
+
const marksBefore = this.watermarkMarks;
|
|
951
1037
|
const compile = () => this.contextManager.compile(this.compileBudget(budget), injections, opts as never);
|
|
952
1038
|
const result = budget || opts?.dryRun ? await compile() : await this.compileAtLiveBudget(compile);
|
|
953
|
-
if (watermark) this.
|
|
1039
|
+
if (watermark) this.applyCompileWatermark(watermark, marksBefore);
|
|
954
1040
|
return result;
|
|
955
1041
|
}
|
|
956
1042
|
|
|
@@ -1026,15 +1112,8 @@ export class Agent {
|
|
|
1026
1112
|
return {
|
|
1027
1113
|
messages: this.toolResultGuard.prepareRequest(messages, true),
|
|
1028
1114
|
system: this.buildSystemPrompt(systemInjections),
|
|
1029
|
-
config: {
|
|
1030
|
-
model: this.model,
|
|
1031
|
-
maxTokens: this.maxTokens,
|
|
1032
|
-
...(this.temperature !== undefined && { temperature: this.temperature }),
|
|
1033
|
-
...(this.thinking !== undefined && { thinking: this.thinking }),
|
|
1034
|
-
},
|
|
1035
1115
|
tools: tools.length > 0 ? tools : undefined,
|
|
1036
|
-
...
|
|
1037
|
-
assistantParticipant: this.name,
|
|
1116
|
+
...this.requestSettings(),
|
|
1038
1117
|
};
|
|
1039
1118
|
};
|
|
1040
1119
|
const request = await assemble();
|
|
@@ -1114,7 +1193,12 @@ export class Agent {
|
|
|
1114
1193
|
|
|
1115
1194
|
// If all tools done, transition to ready
|
|
1116
1195
|
if (this._state.pending.size === 0) {
|
|
1117
|
-
this._state = {
|
|
1196
|
+
this._state = {
|
|
1197
|
+
status: 'ready',
|
|
1198
|
+
toolResults: this._state.completed,
|
|
1199
|
+
stream: this._state.stream,
|
|
1200
|
+
supportsInjectedMessages: this._state.supportsInjectedMessages,
|
|
1201
|
+
};
|
|
1118
1202
|
}
|
|
1119
1203
|
}
|
|
1120
1204
|
|
|
@@ -1133,9 +1217,12 @@ export class Agent {
|
|
|
1133
1217
|
* Build the membrane-normalized request that WOULD be emitted for this
|
|
1134
1218
|
* agent's next activation, given the supplied tools and injections.
|
|
1135
1219
|
*
|
|
1136
|
-
* This is the single source of truth for
|
|
1137
|
-
* real activation path (`startStreamWithInjections`) and
|
|
1138
|
-
* tooling (`Framework.previewActivation`). It does not call
|
|
1220
|
+
* This is the single source of truth for a framework turn's request,
|
|
1221
|
+
* shared by the real activation path (`startStreamWithInjections`) and
|
|
1222
|
+
* debug/preview tooling (`Framework.previewActivation`). It does not call
|
|
1223
|
+
* the membrane. The direct API (`runInferenceWithInjections`) assembles its
|
|
1224
|
+
* own messages, system prompt and tools, and both take the agent's
|
|
1225
|
+
* settings from `requestSettings()`.
|
|
1139
1226
|
* A compile that is sent commits what the context manager commits for it
|
|
1140
1227
|
* (fold resolutions, the compression its fold plan calls for, the consumed
|
|
1141
1228
|
* watermark); a preview passes `options.dryRun`, so its compile commits
|
|
@@ -1147,13 +1234,13 @@ export class Agent {
|
|
|
1147
1234
|
* may show a withheld stub before its place is added; the activation waits
|
|
1148
1235
|
* for them around its call.
|
|
1149
1236
|
*/
|
|
1150
|
-
async
|
|
1237
|
+
private async assembleActivationRequest(
|
|
1151
1238
|
availableTools: ToolDefinition[],
|
|
1152
1239
|
injections?: ContextInjection[],
|
|
1153
1240
|
budget?: TokenBudget,
|
|
1154
1241
|
compressionTools: ToolDefinition[] = availableTools,
|
|
1155
1242
|
options: ActivationRequestOptions = {},
|
|
1156
|
-
): Promise<NormalizedRequest> {
|
|
1243
|
+
): Promise<{ request: NormalizedRequest; continuePrompt?: RequestOnlyPrompt }> {
|
|
1157
1244
|
// Compression may revisit hidden tools in recorded history. Keep its full
|
|
1158
1245
|
// definition set separate from the resident's advertised tools: the
|
|
1159
1246
|
// autobiographical strategy must declare the same tools on its
|
|
@@ -1212,42 +1299,72 @@ export class Agent {
|
|
|
1212
1299
|
}))
|
|
1213
1300
|
.filter((m) => m.content.length > 0);
|
|
1214
1301
|
|
|
1215
|
-
// Silent heartbeat ticks
|
|
1216
|
-
//
|
|
1217
|
-
// cannot merge the
|
|
1218
|
-
//
|
|
1219
|
-
//
|
|
1220
|
-
//
|
|
1221
|
-
//
|
|
1222
|
-
|
|
1223
|
-
|
|
1302
|
+
// Silent heartbeat ticks and replies to a [Continue] turn store no
|
|
1303
|
+
// prompt row. Render each request-only turn before its response's first
|
|
1304
|
+
// surviving row, so the wire formatter cannot merge the response into the
|
|
1305
|
+
// previous assistant message and every later request keeps the prefix
|
|
1306
|
+
// the response was minted under (see silent-heartbeat.ts for what can
|
|
1307
|
+
// and cannot be matched). The request that minted the response ended on
|
|
1308
|
+
// that same turn, so the prefix it caches is the one every later compile
|
|
1309
|
+
// renders. "First" is per agent: a broadcast tick shares its eventId with
|
|
1310
|
+
// every resident.
|
|
1311
|
+
const index = this.indexRequestOnlyRows();
|
|
1312
|
+
const rendered = renderRequestOnlyRows(messages, index, this.name);
|
|
1313
|
+
messages = rendered.messages;
|
|
1314
|
+
// A tick opens wherever its separator isn't already rendered: on its first
|
|
1315
|
+
// request, and on a restart whose compile left none of the tick's rows,
|
|
1316
|
+
// so the restart's reply follows the separator, where every later compile
|
|
1317
|
+
// renders it.
|
|
1224
1318
|
const openingTick = options.silentHeartbeat !== undefined
|
|
1225
|
-
&& !
|
|
1226
|
-
|
|
1319
|
+
&& !rendered.separatedTicks.has(tickKey(options.silentHeartbeat));
|
|
1320
|
+
|
|
1321
|
+
// The [Continue] prompt this request's reply follows, read from the
|
|
1322
|
+
// request itself: a new one when it ends on [Continue]; else, when it
|
|
1323
|
+
// ends on tool results, the prompt of the reply that called those tools,
|
|
1324
|
+
// whose tool loop this reply continues; else none. A request that ends
|
|
1325
|
+
// on anything else (a message that arrived during a cooldown, say) gets
|
|
1326
|
+
// a reply that follows that message and carries no prompt.
|
|
1327
|
+
let continuePrompt: RequestOnlyPrompt | undefined;
|
|
1227
1328
|
if (openingTick) {
|
|
1228
1329
|
messages = [...messages, silentHeartbeatSeparatorTurn()];
|
|
1229
1330
|
} else if (messages.length > 0 && messages[messages.length - 1]!.participant === this.name) {
|
|
1230
1331
|
// Safety: ensure messages don't end with an assistant message.
|
|
1231
1332
|
// Some models reject trailing assistant messages ("prefill not supported"),
|
|
1232
1333
|
// and after context compression a stale assistant turn can end up last.
|
|
1233
|
-
messages = [...messages,
|
|
1234
|
-
|
|
1235
|
-
|
|
1236
|
-
|
|
1334
|
+
messages = [...messages, continueTurn()];
|
|
1335
|
+
continuePrompt = { turn: randomUUID(), text: CONTINUE_ROW };
|
|
1336
|
+
} else {
|
|
1337
|
+
continuePrompt = toolLoopPrompt(messages.at(-1), index);
|
|
1237
1338
|
}
|
|
1238
1339
|
|
|
1239
|
-
|
|
1340
|
+
const request: NormalizedRequest = {
|
|
1240
1341
|
messages: this.toolResultGuard.prepareRequest(messages),
|
|
1241
1342
|
system: this.buildSystemPrompt(systemInjections),
|
|
1343
|
+
tools: availableTools.length > 0 ? availableTools : undefined,
|
|
1344
|
+
...this.requestSettings(),
|
|
1345
|
+
...(kvUnified ? { cacheMarkers: 'cm-owned' as const } : {}),
|
|
1346
|
+
};
|
|
1347
|
+
return { request, ...(continuePrompt ? { continuePrompt } : {}) };
|
|
1348
|
+
}
|
|
1349
|
+
|
|
1350
|
+
/**
|
|
1351
|
+
* The request fields that come from this agent's own settings: its model
|
|
1352
|
+
* config, prompt caching and cache TTL, prefill message, provider
|
|
1353
|
+
* parameters and participant name. Every request the agent sends takes
|
|
1354
|
+
* them from here, a framework turn's (assembleActivationRequest) and the
|
|
1355
|
+
* direct API's (runInferenceWithInjections), so a setting reaches both or
|
|
1356
|
+
* neither.
|
|
1357
|
+
*/
|
|
1358
|
+
private requestSettings(): Pick<NormalizedRequest,
|
|
1359
|
+
'config' | 'promptCaching' | 'cacheTtl' | 'prefillUserMessage' | 'providerParams' | 'assistantParticipant'> {
|
|
1360
|
+
return {
|
|
1242
1361
|
config: {
|
|
1243
1362
|
model: this.model,
|
|
1244
1363
|
maxTokens: this.maxTokens,
|
|
1245
1364
|
...(this.temperature !== undefined && { temperature: this.temperature }),
|
|
1246
1365
|
...(this.thinking !== undefined && { thinking: this.thinking }),
|
|
1247
1366
|
},
|
|
1248
|
-
tools: availableTools.length > 0 ? availableTools : undefined,
|
|
1249
1367
|
promptCaching: this.promptCaching,
|
|
1250
|
-
...(kvUnified ? { cacheMarkers: 'cm-owned' as const } : {}),
|
|
1251
1368
|
cacheTtl: this.cacheTtl,
|
|
1252
1369
|
...(this.prefillUserMessage && { prefillUserMessage: this.prefillUserMessage }),
|
|
1253
1370
|
...(this.providerParams && { providerParams: this.providerParams }),
|
|
@@ -1255,22 +1372,35 @@ export class Agent {
|
|
|
1255
1372
|
};
|
|
1256
1373
|
}
|
|
1257
1374
|
|
|
1258
|
-
/**
|
|
1259
|
-
*
|
|
1260
|
-
|
|
1375
|
+
/** The request `assembleActivationRequest` builds (see there), for preview
|
|
1376
|
+
* and debug tooling: what this agent's next activation would send. */
|
|
1377
|
+
async buildActivationRequest(
|
|
1378
|
+
availableTools: ToolDefinition[],
|
|
1379
|
+
injections?: ContextInjection[],
|
|
1380
|
+
budget?: TokenBudget,
|
|
1381
|
+
compressionTools: ToolDefinition[] = availableTools,
|
|
1382
|
+
options: ActivationRequestOptions = {},
|
|
1383
|
+
): Promise<NormalizedRequest> {
|
|
1384
|
+
return (await this.assembleActivationRequest(availableTools, injections, budget, compressionTools, options)).request;
|
|
1385
|
+
}
|
|
1386
|
+
|
|
1387
|
+
/** Stored rows that follow a request-only turn, memoized on the store's
|
|
1388
|
+
* cached message array (ContextManager returns the same array until the
|
|
1389
|
+
* store changes). */
|
|
1390
|
+
private requestOnlyIndex: { source: readonly unknown[]; index: RequestOnlyRowIndex } | null = null;
|
|
1261
1391
|
|
|
1262
|
-
private
|
|
1263
|
-
const empty:
|
|
1392
|
+
private indexRequestOnlyRows(): RequestOnlyRowIndex {
|
|
1393
|
+
const empty: RequestOnlyRowIndex = { ticks: new Map(), prompts: new Map() };
|
|
1264
1394
|
const cm = this.contextManager as Partial<ContextManager>;
|
|
1265
1395
|
if (typeof cm.getAllMessages !== 'function') return empty;
|
|
1266
1396
|
try {
|
|
1267
1397
|
const stored = cm.getAllMessages() as unknown as readonly StoredRowLike[];
|
|
1268
|
-
if (this.
|
|
1269
|
-
const index =
|
|
1270
|
-
this.
|
|
1398
|
+
if (this.requestOnlyIndex?.source === stored) return this.requestOnlyIndex.index;
|
|
1399
|
+
const index = indexRequestOnlyRows(stored, this.name);
|
|
1400
|
+
this.requestOnlyIndex = { source: stored, index };
|
|
1271
1401
|
return index;
|
|
1272
1402
|
} catch (error) {
|
|
1273
|
-
console.error(`[
|
|
1403
|
+
console.error(`[request-only-rows] ${this.name}: could not index stored rows; request-only turns omitted:`, error);
|
|
1274
1404
|
return empty;
|
|
1275
1405
|
}
|
|
1276
1406
|
}
|
|
@@ -1308,6 +1438,15 @@ export class Agent {
|
|
|
1308
1438
|
this.failOpenKvSubmissions();
|
|
1309
1439
|
|
|
1310
1440
|
this._streamId++;
|
|
1441
|
+
// A pending cancel belongs to the stream that was live when cancelStream()
|
|
1442
|
+
// ran. The stream driver collects it on that stream's terminal event, or
|
|
1443
|
+
// at the loop's end when the iterator closed without one, while the
|
|
1444
|
+
// stream still owns the agent. This clear is for the records no driver
|
|
1445
|
+
// collects: a dropped turn's, whose stream no driver iterates; one whose
|
|
1446
|
+
// stream's terminal came after another stream took the agent; or a
|
|
1447
|
+
// cancel after the stream's complete event. A fresh stream must not
|
|
1448
|
+
// inherit one and read its own later error as a deliberate stop.
|
|
1449
|
+
this._pendingCancel = undefined;
|
|
1311
1450
|
this._inferenceStartedAt = Date.now();
|
|
1312
1451
|
this.lastStreamInputTokens = 0;
|
|
1313
1452
|
// Reset the cache-inclusive counters too: a new stream must not inherit
|
|
@@ -1325,8 +1464,8 @@ export class Agent {
|
|
|
1325
1464
|
// Compiled only once each withheld stub's annotation has finished,
|
|
1326
1465
|
// including one that began during the compile, and after a stub edit that
|
|
1327
1466
|
// failed has been retried (see afterAnnotations).
|
|
1328
|
-
const request = await this.toolResultGuard.afterAnnotations(
|
|
1329
|
-
() => this.
|
|
1467
|
+
const { request, continuePrompt } = await this.toolResultGuard.afterAnnotations(
|
|
1468
|
+
() => this.assembleActivationRequest(availableTools, injections, budget, compressionTools, options));
|
|
1330
1469
|
request.messages = this.toolResultGuard.prepareRequest(request.messages, true);
|
|
1331
1470
|
|
|
1332
1471
|
const receiptAware = (this.contextManager as unknown as { getStrategy?: () => unknown })
|
|
@@ -1375,6 +1514,7 @@ export class Agent {
|
|
|
1375
1514
|
return {
|
|
1376
1515
|
stream,
|
|
1377
1516
|
request,
|
|
1517
|
+
...(continuePrompt ? { continuePrompt } : {}),
|
|
1378
1518
|
...(kvEnabled
|
|
1379
1519
|
? {
|
|
1380
1520
|
takeKvSubmission: () => kvQueue.shift(),
|
|
@@ -1408,9 +1548,10 @@ export class Agent {
|
|
|
1408
1548
|
|
|
1409
1549
|
/**
|
|
1410
1550
|
* Transition to waiting_for_tools when stream yields tool calls.
|
|
1411
|
-
* Called by framework's driveStream
|
|
1551
|
+
* Called by framework's driveStream, with what the stream declared about
|
|
1552
|
+
* carrying injected messages with this round's results (see AgentState).
|
|
1412
1553
|
*/
|
|
1413
|
-
enterWaitingForTools(calls: ToolCall[], stream: YieldingStream): void {
|
|
1554
|
+
enterWaitingForTools(calls: ToolCall[], stream: YieldingStream, supportsInjectedMessages?: boolean): void {
|
|
1414
1555
|
const pending = new Map<ToolCallId, PendingToolCall>();
|
|
1415
1556
|
for (const call of calls) {
|
|
1416
1557
|
pending.set(call.id, {
|
|
@@ -1420,7 +1561,7 @@ export class Agent {
|
|
|
1420
1561
|
startedAt: Date.now(),
|
|
1421
1562
|
});
|
|
1422
1563
|
}
|
|
1423
|
-
this._state = { status: 'waiting_for_tools', pending, completed: [], stream };
|
|
1564
|
+
this._state = { status: 'waiting_for_tools', pending, completed: [], stream, supportsInjectedMessages };
|
|
1424
1565
|
}
|
|
1425
1566
|
|
|
1426
1567
|
/**
|
|
@@ -1463,18 +1604,63 @@ export class Agent {
|
|
|
1463
1604
|
this._state = { status: 'streaming', stream };
|
|
1464
1605
|
}
|
|
1465
1606
|
|
|
1607
|
+
/** The most recent cancelStream() of a live stream, until the stream
|
|
1608
|
+
* driver collects it on that stream's terminal event. Its presence is
|
|
1609
|
+
* the signal (a reasonless Stop is still a deliberate stop); its reason
|
|
1610
|
+
* is the caller's own word. Membrane reports every cancel() as reason
|
|
1611
|
+
* 'user' — the call, not the actor — and a stream implementation may
|
|
1612
|
+
* report the cancel as `error` with no reason at all, so this record is
|
|
1613
|
+
* the only provenance a host-side cancel has. */
|
|
1614
|
+
private _pendingCancel: { reason?: string } | undefined;
|
|
1615
|
+
|
|
1616
|
+
/** The most recent cancelStream() made while this agent held no stream:
|
|
1617
|
+
* during a turn's hooks or compile, while it waits to retry, or while no
|
|
1618
|
+
* check of a turn is ahead at all. The framework collects it at the check
|
|
1619
|
+
* ahead of it, which ends the turn, and the next start drops one no check
|
|
1620
|
+
* collected, so a stop made while none was ahead, such as a host's
|
|
1621
|
+
* interrupt of every agent, ends nothing. */
|
|
1622
|
+
private _stopWithoutStream: { reason?: string } | undefined;
|
|
1623
|
+
|
|
1466
1624
|
/**
|
|
1467
|
-
* Cancel
|
|
1625
|
+
* Cancel the stream this agent's state holds (streaming, waiting on its
|
|
1626
|
+
* tools, or ready at a tool boundary with every result in), and reset to
|
|
1627
|
+
* idle. With no stream, the stop is kept for the turn in progress, which
|
|
1628
|
+
* the framework ends at its next check, before it sends anything more, if
|
|
1629
|
+
* one is still ahead; otherwise the next start drops it. `reason` is
|
|
1630
|
+
* provenance for the framework's inference:aborted trace and marker
|
|
1631
|
+
* metadata (e.g. 'zombie_reclaim', 'subagent_cancel'); it never reaches
|
|
1632
|
+
* the provider.
|
|
1468
1633
|
*/
|
|
1469
|
-
cancelStream(): void {
|
|
1470
|
-
if (this._state
|
|
1471
|
-
this.
|
|
1472
|
-
} else if (this._state.status === 'waiting_for_tools' && this._state.stream) {
|
|
1634
|
+
cancelStream(reason?: string): void {
|
|
1635
|
+
if ('stream' in this._state && this._state.stream) {
|
|
1636
|
+
this._pendingCancel = { reason };
|
|
1473
1637
|
this._state.stream.cancel();
|
|
1638
|
+
} else {
|
|
1639
|
+
this._stopWithoutStream = { reason };
|
|
1474
1640
|
}
|
|
1475
1641
|
this._state = { status: 'idle' };
|
|
1476
1642
|
}
|
|
1477
1643
|
|
|
1644
|
+
/** Collect (and clear) the cancelStream() made while this agent held no
|
|
1645
|
+
* stream, if one was made since the last collection. */
|
|
1646
|
+
takeStopWithoutStream(): { reason?: string } | undefined {
|
|
1647
|
+
const s = this._stopWithoutStream;
|
|
1648
|
+
this._stopWithoutStream = undefined;
|
|
1649
|
+
return s;
|
|
1650
|
+
}
|
|
1651
|
+
|
|
1652
|
+
/** Collect (and clear) the cancel that ended the current stream, if this
|
|
1653
|
+
* side issued one. The stream driver calls it once, while the stream
|
|
1654
|
+
* still owns the agent, at the stream's terminal event (`aborted`
|
|
1655
|
+
* normally, `error` for implementations that report cancel() that way)
|
|
1656
|
+
* or at the loop's end when the stream closed without one. A record no
|
|
1657
|
+
* driver collects is cleared when the agent's next stream starts. */
|
|
1658
|
+
takeCancel(): { reason?: string } | undefined {
|
|
1659
|
+
const c = this._pendingCancel;
|
|
1660
|
+
this._pendingCancel = undefined;
|
|
1661
|
+
return c;
|
|
1662
|
+
}
|
|
1663
|
+
|
|
1478
1664
|
/**
|
|
1479
1665
|
* Check if agent has pending tool calls.
|
|
1480
1666
|
*/
|
|
@@ -1507,20 +1693,20 @@ export class Agent {
|
|
|
1507
1693
|
}
|
|
1508
1694
|
|
|
1509
1695
|
/**
|
|
1510
|
-
* Build the effective system prompt, appending any system-position
|
|
1696
|
+
* Build the effective system prompt, appending any system-position
|
|
1697
|
+
* injections, their blocks joined by line breaks. The system prompt is
|
|
1698
|
+
* text, so a block of another type, such as an image a server or module
|
|
1699
|
+
* injected there, can't go in it: a line in its place says so. The hook
|
|
1700
|
+
* orchestrator tells a server's operator once per server and namespace,
|
|
1701
|
+
* and the module registry tells a module's once per module and namespace.
|
|
1511
1702
|
*/
|
|
1512
1703
|
private buildSystemPrompt(systemInjections: ContentBlock[]): string {
|
|
1513
1704
|
if (systemInjections.length === 0) {
|
|
1514
1705
|
return this.systemPrompt;
|
|
1515
1706
|
}
|
|
1516
1707
|
|
|
1517
|
-
const injectedText = systemInjections
|
|
1518
|
-
.
|
|
1519
|
-
.map((block) => block.text);
|
|
1520
|
-
|
|
1521
|
-
if (injectedText.length === 0) {
|
|
1522
|
-
return this.systemPrompt;
|
|
1523
|
-
}
|
|
1708
|
+
const injectedText = systemInjections.map((block) =>
|
|
1709
|
+
block.type === 'text' ? block.text : `[${block.type} block not shown: the system prompt carries text only.]`);
|
|
1524
1710
|
|
|
1525
1711
|
return this.systemPrompt + '\n' + injectedText.join('\n');
|
|
1526
1712
|
}
|
|
@@ -1532,10 +1718,9 @@ export class Agent {
|
|
|
1532
1718
|
return { aborted: true, durationMs };
|
|
1533
1719
|
}
|
|
1534
1720
|
|
|
1535
|
-
if (this._state
|
|
1536
|
-
(this._state.status === 'waiting_for_tools' && this._state.stream)) {
|
|
1721
|
+
if ('stream' in this._state && this._state.stream) {
|
|
1537
1722
|
const durationMs = Date.now() - this._inferenceStartedAt;
|
|
1538
|
-
this.cancelStream();
|
|
1723
|
+
this.cancelStream(reason);
|
|
1539
1724
|
return { aborted: true, durationMs };
|
|
1540
1725
|
}
|
|
1541
1726
|
|
package/src/api/server.ts
CHANGED
|
@@ -11,7 +11,7 @@ import { createServer, IncomingMessage, ServerResponse } from 'node:http';
|
|
|
11
11
|
import { timingSafeEqual } from 'node:crypto';
|
|
12
12
|
import type { ContentBlock } from '@animalabs/membrane';
|
|
13
13
|
import type { AgentFramework } from '../framework.js';
|
|
14
|
-
import { ResumeBlockedError } from '../framework.js';
|
|
14
|
+
import { QuiesceBlockedError, ResumeBlockedError } from '../framework.js';
|
|
15
15
|
import { isReleaseModel } from '../provider-waits.js';
|
|
16
16
|
import type { TraceEvent, ProcessEvent } from '../types/index.js';
|
|
17
17
|
import type {
|
|
@@ -1073,6 +1073,9 @@ export class ApiServer {
|
|
|
1073
1073
|
verdicts: error.verdicts,
|
|
1074
1074
|
hostMode: this.framework.getHostModeStatus(),
|
|
1075
1075
|
});
|
|
1076
|
+
} else if (error instanceof QuiesceBlockedError) {
|
|
1077
|
+
// A refusal, as resume()'s is: the host's mode is as it was.
|
|
1078
|
+
respond(409, { error: error.message, hostMode: this.framework.getHostModeStatus() });
|
|
1076
1079
|
} else {
|
|
1077
1080
|
respond(500, { error: error instanceof Error ? error.message : String(error) });
|
|
1078
1081
|
}
|
package/src/api/types.ts
CHANGED
|
@@ -210,7 +210,7 @@ export interface InferenceSearchParams {
|
|
|
210
210
|
offset?: number;
|
|
211
211
|
/** Regex pattern to match against log content */
|
|
212
212
|
pattern?: string;
|
|
213
|
-
/** Only show failed
|
|
213
|
+
/** Only show inferences that didn't succeed: failed or stopped */
|
|
214
214
|
errorsOnly?: boolean;
|
|
215
215
|
}
|
|
216
216
|
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A name for a new branch: `base` when `taken(base)` is false, else the first
|
|
3
|
+
* of `base-2`, `base-3`, … that isn't taken.
|
|
4
|
+
*
|
|
5
|
+
* Default operator branch names carry the time in milliseconds
|
|
6
|
+
* (`suppress/<agent>/<ts>`, `rollback/<agent>/<ts>`, …), so a second change of
|
|
7
|
+
* one kind made right after the first, in the same millisecond, would
|
|
8
|
+
* otherwise get the first one's name and be refused. Callers pass what counts
|
|
9
|
+
* as taken, at least every branch the store holds: the store knows every
|
|
10
|
+
* branch, whatever made it, where a counter kept in the process would know
|
|
11
|
+
* only the names it gave out.
|
|
12
|
+
*/
|
|
13
|
+
export function firstFreeBranchName(base: string, taken: (name: string) => boolean): string {
|
|
14
|
+
if (!taken(base)) return base;
|
|
15
|
+
for (let n = 2; ; n++) {
|
|
16
|
+
const name = `${base}-${n}`;
|
|
17
|
+
if (!taken(name)) return name;
|
|
18
|
+
}
|
|
19
|
+
}
|