@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
|
@@ -21,6 +21,7 @@ import type { StoredMessage } from '@animalabs/context-manager';
|
|
|
21
21
|
import type { ChannelRegistry, TuneOutParams } from '../mcpl/channel-registry.js';
|
|
22
22
|
import type { McplServerRegistry } from '../mcpl/server-registry.js';
|
|
23
23
|
import { CapabilityGrant } from '../mcpl/capability-grant.js';
|
|
24
|
+
import { armAfter, armAt } from '../deadline-timer.js';
|
|
24
25
|
|
|
25
26
|
/** Defaults for tune_out tool params. */
|
|
26
27
|
export const TUNE_OUT_DEFAULTS = {
|
|
@@ -33,6 +34,19 @@ export const TUNE_OUT_DEFAULTS = {
|
|
|
33
34
|
* subconscious turn, and max-wakes counts invocations, not messages. */
|
|
34
35
|
const WAKE_COALESCE_MS = 2_000;
|
|
35
36
|
|
|
37
|
+
/** How long after an end time whose cancel threw the cancel is tried again. */
|
|
38
|
+
const EXPIRY_RETRY_MS = 60_000;
|
|
39
|
+
|
|
40
|
+
/** What a thrown value says, without throwing: an Error's message, or the
|
|
41
|
+
* value as text, which String() can't give for an object with no prototype. */
|
|
42
|
+
function thrownReason(error: unknown): string {
|
|
43
|
+
try {
|
|
44
|
+
return error instanceof Error ? error.message : String(error);
|
|
45
|
+
} catch {
|
|
46
|
+
return '(a value that could not be read)';
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
|
|
36
50
|
export interface TuneOutFrameworkHooks {
|
|
37
51
|
/** Deliver a message into an agent's window (per-agent seam). */
|
|
38
52
|
addMessage: (
|
|
@@ -64,7 +78,11 @@ export interface TuneOutFrameworkHooks {
|
|
|
64
78
|
|
|
65
79
|
export class TuneOutCoordinator {
|
|
66
80
|
private cadenceTimers = new Map<string, ReturnType<typeof setTimeout>>();
|
|
67
|
-
/**
|
|
81
|
+
/** Each duration's pending timer: a step toward its end time
|
|
82
|
+
* (params.expiresAtMs), or the retry of an end-time cancel that threw.
|
|
83
|
+
* stop clears it, cancel does when it finds the tune-out in the registry,
|
|
84
|
+
* the end time does when its cancel finds the tune-out already ended,
|
|
85
|
+
* and the channel's next accepted enter does in any case. */
|
|
68
86
|
private expiryTimers = new Map<string, ReturnType<typeof setTimeout>>();
|
|
69
87
|
/** Channels with a wake invocation pending inside the coalescing window. */
|
|
70
88
|
private pendingWakes = new Map<string, { count: number; timer: ReturnType<typeof setTimeout> }>();
|
|
@@ -108,11 +126,36 @@ export class TuneOutCoordinator {
|
|
|
108
126
|
const key = this.key(serverId, channelId);
|
|
109
127
|
const existing = this.expiryTimers.get(key);
|
|
110
128
|
if (existing) clearTimeout(existing);
|
|
111
|
-
const
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
129
|
+
const hold = (timer: ReturnType<typeof setTimeout>): void => { this.expiryTimers.set(key, timer); };
|
|
130
|
+
const end = (): void => {
|
|
131
|
+
try {
|
|
132
|
+
// The retry is armed before the cancel, as the cadence arms its next
|
|
133
|
+
// period before its turn, so a cancel that throws is tried again. A
|
|
134
|
+
// cancel that ends the tune-out clears it with the channel's other
|
|
135
|
+
// timers, and so does finding the tune-out already ended.
|
|
136
|
+
hold(setTimeout(end, EXPIRY_RETRY_MS));
|
|
137
|
+
if (!this.cancel(serverId, channelId, 'duration', 'duration elapsed').ok) {
|
|
138
|
+
this.clearTimers(serverId, channelId);
|
|
139
|
+
}
|
|
140
|
+
} catch (err) {
|
|
141
|
+
this.timerFailed('expiry', serverId, channelId, err);
|
|
142
|
+
}
|
|
143
|
+
};
|
|
144
|
+
armAt(params.expiresAtMs, hold, end);
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
/** A timer callback's work threw. Report it on stderr and as a trace rather
|
|
148
|
+
* than throw it into the event loop, where an uncaught exception ends the
|
|
149
|
+
* host process. */
|
|
150
|
+
private timerFailed(timer: 'cadence' | 'wake' | 'expiry', serverId: string, channelId: string, err: unknown): void {
|
|
151
|
+
console.error(`[tune-out] the ${timer} timer for ${channelId} on ${serverId} failed:`, err);
|
|
152
|
+
this.hooks.emitTrace({
|
|
153
|
+
type: 'tune-out:timer-failed',
|
|
154
|
+
timer,
|
|
155
|
+
serverId,
|
|
156
|
+
channelId,
|
|
157
|
+
error: thrownReason(err),
|
|
158
|
+
});
|
|
116
159
|
}
|
|
117
160
|
|
|
118
161
|
private listActive(): Array<{ serverId: string; channelId: string; params: TuneOutParams }> {
|
|
@@ -137,24 +180,89 @@ export class TuneOutCoordinator {
|
|
|
137
180
|
source: string,
|
|
138
181
|
): { ok: true; params: TuneOutParams } | { ok: false; error: string } {
|
|
139
182
|
if (!this.hooks.subconsciousName()) {
|
|
140
|
-
return {
|
|
183
|
+
return {
|
|
184
|
+
ok: false,
|
|
185
|
+
error: 'Nothing was tuned out: this host has no subconscious resident to watch a channel, so tune_out '
|
|
186
|
+
+ "isn't available here, and calling it again won't change that. If you need channels diverted, ask "
|
|
187
|
+
+ 'whoever runs this host.',
|
|
188
|
+
};
|
|
141
189
|
}
|
|
142
190
|
if (this.hooks.isForkBound(channelId)) {
|
|
143
|
-
return {
|
|
191
|
+
return {
|
|
192
|
+
ok: false,
|
|
193
|
+
error: `Nothing changed: a conversation is bound to ${JSON.stringify(channelId)}, so its messages go to that `
|
|
194
|
+
+ "conversation, and tune_out won't divert a channel while one is. Calling tune_out on it again won't change "
|
|
195
|
+
+ 'that until the conversation ends, which happens only once the channel has been quiet for a while. Tune '
|
|
196
|
+
+ 'out a different channel, or ask whoever runs this host if this one should be diverted.',
|
|
197
|
+
};
|
|
198
|
+
}
|
|
199
|
+
const current = this.channelRegistry.getTuneOutState(serverId, channelId);
|
|
200
|
+
if (current) {
|
|
201
|
+
const p = current.params;
|
|
202
|
+
// A duration so long its end is past what a Date can hold has no time to show.
|
|
203
|
+
const expires = p.expiresAtMs !== undefined ? new Date(p.expiresAtMs) : undefined;
|
|
204
|
+
const until = expires && Number.isFinite(expires.getTime())
|
|
205
|
+
? `, until ${expires.toISOString().replace(/\.\d+Z$/, 'Z')}`
|
|
206
|
+
: '';
|
|
207
|
+
return {
|
|
208
|
+
ok: false,
|
|
209
|
+
error: `Nothing changed: ${JSON.stringify(channelId)} is already tuned out, with cadenceSeconds `
|
|
210
|
+
+ `${p.cadenceSeconds}, backlogCap ${p.backlogCap} and maxWakes ${p.maxWakes}${until}. To change those, `
|
|
211
|
+
+ 'cancel it first with tune_out mode "cancel", which delivers its backlog to you now, then call tune_out '
|
|
212
|
+
+ 'again with the new settings.',
|
|
213
|
+
};
|
|
144
214
|
}
|
|
145
|
-
|
|
146
|
-
|
|
215
|
+
// A tool's input reaches here as the model wrote it, and the store can't
|
|
216
|
+
// keep a NaN or an Infinity: its append would throw after the registry
|
|
217
|
+
// had marked the channel tuned out. So each option is read as a number
|
|
218
|
+
// before anything changes, a numeric string included, as the sleep tool
|
|
219
|
+
// reads its seconds; null counts as left out. A value that gives no
|
|
220
|
+
// finite number is refused.
|
|
221
|
+
const leftOut = {
|
|
222
|
+
durationSeconds: 'to stay tuned out until you cancel',
|
|
223
|
+
cadenceSeconds: `for the default, ${TUNE_OUT_DEFAULTS.cadenceSeconds}`,
|
|
224
|
+
backlogCap: `for the default, ${TUNE_OUT_DEFAULTS.backlogCap}`,
|
|
225
|
+
maxWakes: `for the default, ${TUNE_OUT_DEFAULTS.maxWakes}`,
|
|
226
|
+
} as const;
|
|
227
|
+
const given: Partial<Record<keyof typeof leftOut, number>> = {};
|
|
228
|
+
for (const name of Object.keys(leftOut) as Array<keyof typeof leftOut>) {
|
|
229
|
+
const value: unknown = opts[name];
|
|
230
|
+
if (value == null) continue;
|
|
231
|
+
const n = Number(value);
|
|
232
|
+
if (!Number.isFinite(n)) {
|
|
233
|
+
const got = typeof value === 'number'
|
|
234
|
+
? String(value)
|
|
235
|
+
: `${typeof value === 'string' ? 'the string' : 'the value'} ${JSON.stringify(value)}`;
|
|
236
|
+
return {
|
|
237
|
+
ok: false,
|
|
238
|
+
error: `Nothing was tuned out: ${name} must be a finite number${name.endsWith('Seconds') ? ' of seconds' : ''}, `
|
|
239
|
+
+ `and it was ${got}. Leave it out ${leftOut[name]}.`,
|
|
240
|
+
};
|
|
241
|
+
}
|
|
242
|
+
given[name] = n;
|
|
243
|
+
}
|
|
244
|
+
const expiresAtMs = given.durationSeconds === undefined
|
|
245
|
+
? undefined
|
|
246
|
+
: Date.now() + Math.max(60, given.durationSeconds) * 1000;
|
|
247
|
+
if (expiresAtMs !== undefined && !Number.isFinite(expiresAtMs)) {
|
|
248
|
+
return {
|
|
249
|
+
ok: false,
|
|
250
|
+
error: `Nothing was tuned out: durationSeconds ${given.durationSeconds} is longer than an end time can be kept. `
|
|
251
|
+
+ `Leave it out ${leftOut.durationSeconds}.`,
|
|
252
|
+
};
|
|
147
253
|
}
|
|
148
254
|
const params: TuneOutParams = {
|
|
149
255
|
epochId: randomUUID(),
|
|
150
|
-
cadenceSeconds: Math.max(30,
|
|
151
|
-
backlogCap: Math.max(0,
|
|
152
|
-
maxWakes: Math.max(1,
|
|
256
|
+
cadenceSeconds: Math.max(30, given.cadenceSeconds ?? TUNE_OUT_DEFAULTS.cadenceSeconds),
|
|
257
|
+
backlogCap: Math.max(0, given.backlogCap ?? TUNE_OUT_DEFAULTS.backlogCap),
|
|
258
|
+
maxWakes: Math.max(1, given.maxWakes ?? TUNE_OUT_DEFAULTS.maxWakes),
|
|
153
259
|
startedAtSequence: this.hooks.currentSequence(),
|
|
154
|
-
...(
|
|
155
|
-
? { expiresAtMs: Date.now() + Math.max(60, opts.durationSeconds) * 1000 }
|
|
156
|
-
: {}),
|
|
260
|
+
...(expiresAtMs !== undefined ? { expiresAtMs } : {}),
|
|
157
261
|
};
|
|
262
|
+
// A tune-out can end in the registry without cancel (a send into the
|
|
263
|
+
// channel or a close sets its state there), leaving its timers armed:
|
|
264
|
+
// clear them, so none of them acts on this one.
|
|
265
|
+
this.clearTimers(serverId, channelId);
|
|
158
266
|
this.channelRegistry.enterTuneOut(serverId, channelId, params, source);
|
|
159
267
|
this.armExpiry(serverId, channelId, params);
|
|
160
268
|
|
|
@@ -188,19 +296,10 @@ export class TuneOutCoordinator {
|
|
|
188
296
|
): { ok: true } | { ok: false; error: string } {
|
|
189
297
|
const ended = this.channelRegistry.cancelTuneOut(serverId, channelId, 'open', source);
|
|
190
298
|
if (!ended) {
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
this.stopCadence(serverId, channelId);
|
|
194
|
-
const expiry = this.expiryTimers.get(this.key(serverId, channelId));
|
|
195
|
-
if (expiry) {
|
|
196
|
-
clearTimeout(expiry);
|
|
197
|
-
this.expiryTimers.delete(this.key(serverId, channelId));
|
|
198
|
-
}
|
|
199
|
-
const pending = this.pendingWakes.get(this.key(serverId, channelId));
|
|
200
|
-
if (pending) {
|
|
201
|
-
clearTimeout(pending.timer);
|
|
202
|
-
this.pendingWakes.delete(this.key(serverId, channelId));
|
|
299
|
+
// Its reader is the resident's tune_out: cancel_tuneout finds the channel first.
|
|
300
|
+
return { ok: false, error: this.notTunedOut(channelId, 'you') };
|
|
203
301
|
}
|
|
302
|
+
this.clearTimers(serverId, channelId);
|
|
204
303
|
this.divertedSinceInvocation.delete(this.key(serverId, channelId));
|
|
205
304
|
|
|
206
305
|
// Backlog: every message stamped with this epoch, oldest first.
|
|
@@ -326,11 +425,12 @@ export class TuneOutCoordinator {
|
|
|
326
425
|
intent: 'suppressed-tuned-out',
|
|
327
426
|
});
|
|
328
427
|
} catch (err) {
|
|
428
|
+
console.error(`[tune-out] acknowledging ${messageId} in ${channelId} on ${serverId} failed:`, err);
|
|
329
429
|
this.hooks.emitTrace({
|
|
330
430
|
type: 'tune-out:ack-failed',
|
|
331
431
|
serverId,
|
|
332
432
|
channelId,
|
|
333
|
-
error: (err
|
|
433
|
+
error: thrownReason(err),
|
|
334
434
|
});
|
|
335
435
|
}
|
|
336
436
|
}
|
|
@@ -342,17 +442,37 @@ export class TuneOutCoordinator {
|
|
|
342
442
|
private startCadence(serverId: string, channelId: string, cadenceSeconds: number): void {
|
|
343
443
|
this.stopCadence(serverId, channelId);
|
|
344
444
|
const key = this.key(serverId, channelId);
|
|
445
|
+
const hold = (timer: ReturnType<typeof setTimeout>): void => { this.cadenceTimers.set(key, timer); };
|
|
345
446
|
const tick = () => {
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
447
|
+
try {
|
|
448
|
+
const state = this.channelRegistry.getTuneOutState(serverId, channelId);
|
|
449
|
+
if (!state) return; // cancelled meanwhile
|
|
450
|
+
// The next period is armed before this one's turn, so a turn that
|
|
451
|
+
// fails can't end the cadence.
|
|
452
|
+
armAfter(cadenceSeconds * 1000, hold, tick);
|
|
453
|
+
const diverted = this.divertedSinceInvocation.get(key) ?? 0;
|
|
454
|
+
// An empty period needs no turn at all — skip silently.
|
|
455
|
+
if (diverted > 0) {
|
|
456
|
+
this.invokeSubconscious(serverId, channelId, 'cadence', diverted);
|
|
457
|
+
}
|
|
458
|
+
} catch (err) {
|
|
459
|
+
this.timerFailed('cadence', serverId, channelId, err);
|
|
352
460
|
}
|
|
353
|
-
this.cadenceTimers.set(key, setTimeout(tick, cadenceSeconds * 1000));
|
|
354
461
|
};
|
|
355
|
-
|
|
462
|
+
armAfter(cadenceSeconds * 1000, hold, tick);
|
|
463
|
+
}
|
|
464
|
+
|
|
465
|
+
/** Clear a channel's tune-out timers: its cadence, its end time and a wake
|
|
466
|
+
* still coalescing. */
|
|
467
|
+
private clearTimers(serverId: string, channelId: string): void {
|
|
468
|
+
const key = this.key(serverId, channelId);
|
|
469
|
+
this.stopCadence(serverId, channelId);
|
|
470
|
+
const expiry = this.expiryTimers.get(key);
|
|
471
|
+
if (expiry) clearTimeout(expiry);
|
|
472
|
+
this.expiryTimers.delete(key);
|
|
473
|
+
const pending = this.pendingWakes.get(key);
|
|
474
|
+
if (pending) clearTimeout(pending.timer);
|
|
475
|
+
this.pendingWakes.delete(key);
|
|
356
476
|
}
|
|
357
477
|
|
|
358
478
|
private stopCadence(serverId: string, channelId: string): void {
|
|
@@ -370,21 +490,25 @@ export class TuneOutCoordinator {
|
|
|
370
490
|
return;
|
|
371
491
|
}
|
|
372
492
|
const timer = setTimeout(() => {
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
493
|
+
try {
|
|
494
|
+
const entry = this.pendingWakes.get(key);
|
|
495
|
+
this.pendingWakes.delete(key);
|
|
496
|
+
// Count ONE durable wake per coalesced invocation.
|
|
497
|
+
const counted = this.channelRegistry.recordTuneOutWake(serverId, channelId);
|
|
498
|
+
if (!counted) return; // cancelled inside the window
|
|
499
|
+
if (counted.wakeCount > counted.params.maxWakes) {
|
|
500
|
+
this.cancel(
|
|
501
|
+
serverId,
|
|
502
|
+
channelId,
|
|
503
|
+
'tune-out-max-wakes',
|
|
504
|
+
`wake budget exhausted (${counted.params.maxWakes})`,
|
|
505
|
+
);
|
|
506
|
+
return;
|
|
507
|
+
}
|
|
508
|
+
this.invokeSubconscious(serverId, channelId, 'wake', entry?.count ?? 1);
|
|
509
|
+
} catch (err) {
|
|
510
|
+
this.timerFailed('wake', serverId, channelId, err);
|
|
386
511
|
}
|
|
387
|
-
this.invokeSubconscious(serverId, channelId, 'wake', entry?.count ?? 1);
|
|
388
512
|
}, WAKE_COALESCE_MS);
|
|
389
513
|
this.pendingWakes.set(key, { count: 1, timer });
|
|
390
514
|
}
|
|
@@ -403,7 +527,6 @@ export class TuneOutCoordinator {
|
|
|
403
527
|
const subName = this.hooks.subconsciousName();
|
|
404
528
|
if (!subName) return;
|
|
405
529
|
const key = this.key(serverId, channelId);
|
|
406
|
-
this.divertedSinceInvocation.set(key, 0);
|
|
407
530
|
|
|
408
531
|
const notice = trigger === 'wake'
|
|
409
532
|
? `[Tune-out wake: ${channelId} — ${count} addressed message${count === 1 ? '' : 's'}]`
|
|
@@ -415,6 +538,9 @@ export class TuneOutCoordinator {
|
|
|
415
538
|
subName,
|
|
416
539
|
);
|
|
417
540
|
this.hooks.requestInference(subName, `tune-out ${trigger}: ${channelId}`, 'tune-out');
|
|
541
|
+
// Counted from here only once the turn has been asked for, so a turn that
|
|
542
|
+
// throws leaves its messages for the next period's turn.
|
|
543
|
+
this.divertedSinceInvocation.set(key, 0);
|
|
418
544
|
}
|
|
419
545
|
|
|
420
546
|
// ==========================================================================
|
|
@@ -432,6 +558,8 @@ export class TuneOutCoordinator {
|
|
|
432
558
|
* subconscious's compiles (antra: deliver changes, never let them wash
|
|
433
559
|
* away — it has no long-term memory, so they must not live in window
|
|
434
560
|
* content). Bytes change only when a disposition changes: KV-friendly.
|
|
561
|
+
* A failed read of the stored map throws, so the compile stops rather than
|
|
562
|
+
* run without them.
|
|
435
563
|
*/
|
|
436
564
|
getDispositionsInjection(): {
|
|
437
565
|
namespace: string;
|
|
@@ -453,12 +581,17 @@ export class TuneOutCoordinator {
|
|
|
453
581
|
|
|
454
582
|
private readDispositions(): Record<string, string> {
|
|
455
583
|
if (this.dispositionsCache) return this.dispositionsCache;
|
|
584
|
+
let raw: unknown;
|
|
456
585
|
try {
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
|
|
586
|
+
raw = this.channelRegistry.readCoordinatorState(this.dispositionsStateId);
|
|
587
|
+
} catch (error) {
|
|
588
|
+
// A failed read is not an empty map, and nothing is cached, so the next
|
|
589
|
+
// read asks the store again. Taken as empty, it would compile the
|
|
590
|
+
// subconscious without its dispositions until a restart, and the next
|
|
591
|
+
// noteDisposition would write that empty map over the stored one.
|
|
592
|
+
throw new Error(`the stored dispositions (${this.dispositionsStateId}) could not be read: ${thrownReason(error)}`, { cause: error });
|
|
461
593
|
}
|
|
594
|
+
this.dispositionsCache = (raw && typeof raw === 'object') ? raw as Record<string, string> : {};
|
|
462
595
|
return this.dispositionsCache;
|
|
463
596
|
}
|
|
464
597
|
|
|
@@ -469,8 +602,14 @@ export class TuneOutCoordinator {
|
|
|
469
602
|
} else {
|
|
470
603
|
dispositions[key] = text;
|
|
471
604
|
}
|
|
605
|
+
// Stored before it's cached: a write that fails leaves the cache and the
|
|
606
|
+
// store as they were, so the note is in effect nowhere.
|
|
607
|
+
try {
|
|
608
|
+
this.channelRegistry.writeCoordinatorState(this.dispositionsStateId, dispositions);
|
|
609
|
+
} catch (error) {
|
|
610
|
+
throw new Error(`the dispositions (${this.dispositionsStateId}) could not be stored: ${thrownReason(error)}`, { cause: error });
|
|
611
|
+
}
|
|
472
612
|
this.dispositionsCache = dispositions;
|
|
473
|
-
this.channelRegistry.writeCoordinatorState(this.dispositionsStateId, dispositions);
|
|
474
613
|
}
|
|
475
614
|
|
|
476
615
|
// ==========================================================================
|
|
@@ -485,7 +624,14 @@ export class TuneOutCoordinator {
|
|
|
485
624
|
case 'deliver_summary': {
|
|
486
625
|
const text = String(input.text ?? '').trim();
|
|
487
626
|
const channelId = String(input.channelId ?? '');
|
|
488
|
-
if (!text)
|
|
627
|
+
if (!text) {
|
|
628
|
+
return {
|
|
629
|
+
success: false,
|
|
630
|
+
error: 'Nothing was delivered: deliver_summary needs the summary in "text". If there\'s nothing to '
|
|
631
|
+
+ "report, don't call it: staying silent is allowed.",
|
|
632
|
+
isError: true,
|
|
633
|
+
};
|
|
634
|
+
}
|
|
489
635
|
const subName = this.hooks.subconsciousName();
|
|
490
636
|
if (!subName) return { success: false, error: 'subconscious not configured', isError: true };
|
|
491
637
|
// Verbatim, under its own participant name, into the resident's window.
|
|
@@ -498,30 +644,58 @@ export class TuneOutCoordinator {
|
|
|
498
644
|
case 'cancel_tuneout': {
|
|
499
645
|
const channelId = String(input.channelId ?? '');
|
|
500
646
|
const located = this.findByChannel(channelId);
|
|
501
|
-
if (!located) return { success: false, error:
|
|
647
|
+
if (!located) return { success: false, error: this.notTunedOut(channelId, 'the resident'), isError: true };
|
|
502
648
|
const note = typeof input.text === 'string' && input.text.trim() ? input.text.trim() : undefined;
|
|
503
649
|
const result = this.cancel(located.serverId, channelId, 'subconscious', 'subconscious judgment', note);
|
|
504
650
|
return result.ok
|
|
505
651
|
? { success: true, data: { cancelled: true } }
|
|
506
|
-
: { success: false, error: result.error, isError:
|
|
652
|
+
: { success: false, error: result.error, isError: true };
|
|
507
653
|
}
|
|
508
654
|
case 'note_disposition': {
|
|
509
655
|
const key = String(input.key ?? '').trim();
|
|
510
|
-
if (!key)
|
|
511
|
-
|
|
656
|
+
if (!key) {
|
|
657
|
+
return {
|
|
658
|
+
success: false,
|
|
659
|
+
error: 'Nothing was recorded: note_disposition needs a "key", a short stable name for the note, such as '
|
|
660
|
+
+ '"busy-channels". To delete a note, call it with that note\'s key and an empty "text".',
|
|
661
|
+
isError: true,
|
|
662
|
+
};
|
|
663
|
+
}
|
|
664
|
+
try {
|
|
665
|
+
this.noteDisposition(key, String(input.text ?? ''));
|
|
666
|
+
} catch (error) {
|
|
667
|
+
// For the subconscious first: what became of its note, and that a
|
|
668
|
+
// later call may land. The store's own reason follows, for an operator.
|
|
669
|
+
// The note may set, change or remove a disposition, so what stays in
|
|
670
|
+
// effect is whatever was there before, if anything.
|
|
671
|
+
return {
|
|
672
|
+
success: false,
|
|
673
|
+
isError: true,
|
|
674
|
+
error: `The change to the disposition ${JSON.stringify(key)} wasn't recorded, so the dispositions stay as they were. ` +
|
|
675
|
+
`Noting it again may work once the store can be read and written. The store's error: ${thrownReason(error)}`,
|
|
676
|
+
};
|
|
677
|
+
}
|
|
512
678
|
return { success: true, data: { noted: key } };
|
|
513
679
|
}
|
|
514
680
|
case 'speak_in_channel': {
|
|
515
681
|
if (!this.hooks.allowChannelSpeech()) {
|
|
682
|
+
// The setting's name is the host's, for its log; the subconscious
|
|
683
|
+
// reads what it can do instead.
|
|
684
|
+
console.warn('[tune-out] speak_in_channel refused: FrameworkConfig.subconscious.allowChannelSpeech is off');
|
|
516
685
|
return {
|
|
517
686
|
success: false,
|
|
518
|
-
isError:
|
|
519
|
-
error:
|
|
687
|
+
isError: true,
|
|
688
|
+
error: "Nothing was posted: speak_in_channel is turned off for you in the resident's configuration, and "
|
|
689
|
+
+ "calling it again won't change that. The resident can speak there: tell it what's needed with "
|
|
690
|
+
+ 'deliver_summary, or, if the channel is tuned out and needs the resident now, end the tune-out with '
|
|
691
|
+
+ 'cancel_tuneout.',
|
|
520
692
|
};
|
|
521
693
|
}
|
|
522
694
|
const channelId = String(input.channelId ?? '');
|
|
523
695
|
const text = String(input.text ?? '').trim();
|
|
524
|
-
if (!text)
|
|
696
|
+
if (!text) {
|
|
697
|
+
return { success: false, error: 'Nothing was posted: speak_in_channel needs the message in "text".', isError: true };
|
|
698
|
+
}
|
|
525
699
|
return this.channelRegistry.publishForAgent(channelId, text, this.hooks.subconsciousName() ?? 'Subconscious');
|
|
526
700
|
}
|
|
527
701
|
default:
|
|
@@ -529,6 +703,26 @@ export class TuneOutCoordinator {
|
|
|
529
703
|
}
|
|
530
704
|
}
|
|
531
705
|
|
|
706
|
+
/**
|
|
707
|
+
* A cancel of a channel that isn't tuned out: which channels are, so the
|
|
708
|
+
* next call can name one, and how a tune-out ends without one. `backlogTo`
|
|
709
|
+
* names the resident as the message's reader knows it: "you" to the
|
|
710
|
+
* resident, "the resident" to the subconscious. It speaks of connected
|
|
711
|
+
* channels because listActive reads the registered ones: removing a server
|
|
712
|
+
* drops its channels and keeps their tune-outs, so a tune-out there is in
|
|
713
|
+
* neither this list nor findByChannel's lookup, and the text claims nothing
|
|
714
|
+
* about it.
|
|
715
|
+
*/
|
|
716
|
+
private notTunedOut(channelId: string, backlogTo: 'you' | 'the resident'): string {
|
|
717
|
+
const active = this.listActive().map((e) => JSON.stringify(e.channelId));
|
|
718
|
+
const opening = active.length === 0
|
|
719
|
+
? 'no connected channel is tuned out now.'
|
|
720
|
+
: `no connected channel ${JSON.stringify(channelId)} is tuned out. Connected channels tuned out now: `
|
|
721
|
+
+ `${active.join(', ')}.`;
|
|
722
|
+
return `Nothing was cancelled: ${opening} A tune-out also ends by itself when its duration runs out, or at the `
|
|
723
|
+
+ `first wake past its wake budget, and its backlog goes to ${backlogTo} then.`;
|
|
724
|
+
}
|
|
725
|
+
|
|
532
726
|
private findByChannel(channelId: string): { serverId: string } | null {
|
|
533
727
|
for (const entry of this.listActive()) {
|
|
534
728
|
if (entry.channelId === channelId) return { serverId: entry.serverId };
|
package/src/types/agent.ts
CHANGED
|
@@ -14,7 +14,12 @@ export type SameRoundThinkTextPolicySource =
|
|
|
14
14
|
*/
|
|
15
15
|
export interface AgentConfig {
|
|
16
16
|
toolPresentation?: import("../tool-presentation.js").ToolPresentationConfig;
|
|
17
|
-
/**
|
|
17
|
+
/**
|
|
18
|
+
* Unique name for this agent: create() refuses two configured agents of one
|
|
19
|
+
* name. Names compare exactly, so `Dup` beside `dup` is two agents, though
|
|
20
|
+
* the history tool's author filter matches their own turns without letter
|
|
21
|
+
* case and can't tell them apart there.
|
|
22
|
+
*/
|
|
18
23
|
name: string;
|
|
19
24
|
|
|
20
25
|
/** Model to use (e.g., 'claude-sonnet-4-20250514') */
|
|
@@ -27,9 +32,19 @@ export interface AgentConfig {
|
|
|
27
32
|
strategy?: ContextStrategy;
|
|
28
33
|
|
|
29
34
|
/**
|
|
30
|
-
*
|
|
35
|
+
* Enforced at dispatch for registered agent callers; omitted means 'all'.
|
|
31
36
|
* - 'all': all available tools
|
|
32
|
-
* - string[]:
|
|
37
|
+
* - string[]: exact tool names, including module--utility names for utilities.
|
|
38
|
+
* Utilities aren't tools of their own: an agent's model and its scripts are
|
|
39
|
+
* offered them only through 'utils', whose run checks the utility's own
|
|
40
|
+
* name. An agent that should use a utility lists both 'utils' and
|
|
41
|
+
* 'module--utility'. The name alone passes the dispatch check for any call
|
|
42
|
+
* by that name, whether the host makes it with executeToolCall on the
|
|
43
|
+
* agent's behalf or the model or a script makes it without being offered
|
|
44
|
+
* it. The slot is hidden when no utility is permitted.
|
|
45
|
+
* Trusted module calls are exempt. Genuinely unidentified public callers,
|
|
46
|
+
* including unknown legacy names, remain unrestricted. Framework-created
|
|
47
|
+
* identities have tool authority only while registered.
|
|
33
48
|
*/
|
|
34
49
|
allowedTools?: 'all' | string[];
|
|
35
50
|
|
|
@@ -93,11 +108,16 @@ export interface AgentConfig {
|
|
|
93
108
|
promptCaching?: boolean;
|
|
94
109
|
|
|
95
110
|
/**
|
|
96
|
-
*
|
|
97
|
-
*
|
|
98
|
-
* scaffold).
|
|
99
|
-
*
|
|
100
|
-
*
|
|
111
|
+
* A synthetic user message for a request whose formatted conversation
|
|
112
|
+
* would otherwise begin with the assistant (e.g. chapterx's
|
|
113
|
+
* `<cmd>cat untitled.txt</cmd>` CLI-sim scaffold). A non-empty value is
|
|
114
|
+
* forwarded verbatim to membrane, on framework turns and the direct API
|
|
115
|
+
* alike. Membrane's anthropic-xml formatter makes it the first message,
|
|
116
|
+
* ahead of the assistant turn that carries the conversation. Its native
|
|
117
|
+
* formatter uses it as the text of a leading user turn that its tool-pair
|
|
118
|
+
* normalizer adds, in place of `[continuing]`. Part of reproducing a
|
|
119
|
+
* prefill-era bot's exact prompting structure when migrating it into a
|
|
120
|
+
* resident.
|
|
101
121
|
*/
|
|
102
122
|
prefillUserMessage?: string;
|
|
103
123
|
|
|
@@ -167,12 +187,6 @@ export interface AgentConfig {
|
|
|
167
187
|
autoRewind?: boolean;
|
|
168
188
|
/** Max consecutive rewinds before giving up a turn. Default 3. */
|
|
169
189
|
maxRewinds?: number;
|
|
170
|
-
/**
|
|
171
|
-
* When the rewound turn is a *human* message (not a machine tool result),
|
|
172
|
-
* announce the withholding on the conversational surface (Discord) rather
|
|
173
|
-
* than dropping it silently. Default true.
|
|
174
|
-
*/
|
|
175
|
-
announceHumanTurns?: boolean;
|
|
176
190
|
};
|
|
177
191
|
|
|
178
192
|
/** Opt-in tool-output admission and one guarded retry after a provider
|
|
@@ -192,7 +206,8 @@ export interface AgentConfig {
|
|
|
192
206
|
* that publication envelope through the same authorized resolver.
|
|
193
207
|
* See docs/hybrid-prose-routing.md.
|
|
194
208
|
* - 'disabled': generated prose is never published. Only explicit tools may
|
|
195
|
-
* send externally; prose remains in Chronicle
|
|
209
|
+
* send externally; prose remains in Chronicle, and a turn that wrote plain
|
|
210
|
+
* speech ends with a private `[delivered] plain speech → no channel` receipt.
|
|
196
211
|
*/
|
|
197
212
|
proseRouting?: 'locus' | 'explicit' | 'hybrid' | 'disabled';
|
|
198
213
|
|
|
@@ -307,13 +322,18 @@ export interface InferenceOptions {
|
|
|
307
322
|
|
|
308
323
|
/**
|
|
309
324
|
* Internal state of an agent.
|
|
325
|
+
*
|
|
326
|
+
* `supportsInjectedMessages` is what the stream declared with the round's
|
|
327
|
+
* tool calls (membrane's `ToolContext.supportsInjectedMessages`): whether it
|
|
328
|
+
* can carry messages injected with that round's results. It's absent when
|
|
329
|
+
* the stream doesn't say, as on membrane 0.5.87 and earlier.
|
|
310
330
|
*/
|
|
311
331
|
export type AgentState =
|
|
312
332
|
| { status: 'idle' }
|
|
313
333
|
| { status: 'inferring'; promise: Promise<InferenceResult>; abortController: AbortController }
|
|
314
334
|
| { status: 'streaming'; stream: YieldingStream }
|
|
315
|
-
| { status: 'waiting_for_tools'; pending: Map<ToolCallId, PendingToolCall>; completed: CompletedToolCall[]; stream?: YieldingStream }
|
|
316
|
-
| { status: 'ready'; toolResults: CompletedToolCall[]; stream?: YieldingStream };
|
|
335
|
+
| { status: 'waiting_for_tools'; pending: Map<ToolCallId, PendingToolCall>; completed: CompletedToolCall[]; stream?: YieldingStream; supportsInjectedMessages?: boolean }
|
|
336
|
+
| { status: 'ready'; toolResults: CompletedToolCall[]; stream?: YieldingStream; supportsInjectedMessages?: boolean };
|
|
317
337
|
|
|
318
338
|
/**
|
|
319
339
|
* A tool call that's in progress.
|
|
@@ -362,7 +382,8 @@ export interface InferenceRequest {
|
|
|
362
382
|
* replies in the channel it is answering — not the process-global most-recent-
|
|
363
383
|
* inbound locus, which a concurrent message elsewhere can hijack (item-3
|
|
364
384
|
* redux). Undefined for non-channel wakes (heartbeat, timers, module events),
|
|
365
|
-
* which correctly fall back to the global default channel
|
|
385
|
+
* which correctly fall back to the global default channel, except an
|
|
386
|
+
* ephemeral run's (a subagent's), which takes no global fallback.
|
|
366
387
|
*/
|
|
367
388
|
channelId?: string;
|
|
368
389
|
/**
|
|
@@ -396,11 +417,10 @@ export interface InferenceRequest {
|
|
|
396
417
|
/** Suppress every automatic plain-prose delivery for this logical turn.
|
|
397
418
|
* Explicit tool calls remain available. Used by authenticated silent wakes. */
|
|
398
419
|
suppressProse?: boolean;
|
|
399
|
-
/**
|
|
400
|
-
*
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
*
|
|
404
|
-
* builds render a request-only separator before the tick's first row. */
|
|
420
|
+
/** The authenticated silent heartbeat tick this turn answers. The rows the
|
|
421
|
+
* turn's reply stores (its assistant responses and tool results) are
|
|
422
|
+
* stamped `metadata.silentHeartbeat` with it, and request builds render a
|
|
423
|
+
* request-only separator carrying the tick's instruction before the tick's
|
|
424
|
+
* first surviving row (`SILENT_HEARTBEAT_SEPARATOR`). */
|
|
405
425
|
silentHeartbeat?: SilentHeartbeatTick;
|
|
406
426
|
}
|
package/src/types/events.ts
CHANGED
|
@@ -192,6 +192,14 @@ export interface ToolResult {
|
|
|
192
192
|
error?: string;
|
|
193
193
|
/** Whether this was an error (for LLM) */
|
|
194
194
|
isError?: boolean;
|
|
195
|
+
/**
|
|
196
|
+
* An MCP tool's `structuredContent`: its machine-readable result, beside
|
|
197
|
+
* `data`, which is the content view. Present exactly when the server sent
|
|
198
|
+
* one, so `false`, `0` and `null` are values here, not absence. Programs
|
|
199
|
+
* read it (scripts get it in their result object); the model sees content,
|
|
200
|
+
* and sees this rendered as JSON only when the content carries no text.
|
|
201
|
+
*/
|
|
202
|
+
structured?: unknown;
|
|
195
203
|
/**
|
|
196
204
|
* When true, the framework saves tool_use + tool_result messages to context,
|
|
197
205
|
* cancels the active stream, and resets the agent to idle.
|
|
@@ -225,6 +233,19 @@ export interface ToolCall {
|
|
|
225
233
|
input: unknown;
|
|
226
234
|
/** The agent that made this tool call. Set by the framework dispatch layer. */
|
|
227
235
|
callerAgentName?: string;
|
|
236
|
+
/**
|
|
237
|
+
* The turn the call was made in, the same id as that turn's
|
|
238
|
+
* `SpeechContext.turnId`. Set by the framework dispatch layer, beside
|
|
239
|
+
* `callerAgentName`: a model's call carries the turn whose stream made it, a
|
|
240
|
+
* foreground script's inner call the turn of the code_execution call whose
|
|
241
|
+
* script is running when the call arrives, and a utility run its `utils`
|
|
242
|
+
* call's. A background script runs apart from any turn, so its calls carry
|
|
243
|
+
* none. Ids increase, so a later turn's is larger, and they're unique only
|
|
244
|
+
* within one run of the process. A call made with `executeToolCall` or a
|
|
245
|
+
* module's `callTool` skips that layer and carries whatever turn its caller
|
|
246
|
+
* put on the call, usually none.
|
|
247
|
+
*/
|
|
248
|
+
callerTurnId?: number;
|
|
228
249
|
}
|
|
229
250
|
|
|
230
251
|
// ============================================================================
|
|
@@ -247,6 +268,8 @@ export interface McplPushEvent {
|
|
|
247
268
|
inferenceId: string;
|
|
248
269
|
triggerInference?: boolean;
|
|
249
270
|
targetAgents?: string[];
|
|
271
|
+
/** Host acceptance time (epoch ms), stamped where the push is admitted. */
|
|
272
|
+
acceptedAt?: number;
|
|
250
273
|
}
|
|
251
274
|
|
|
252
275
|
/**
|
|
@@ -265,4 +288,6 @@ export interface McplChannelIncomingEvent {
|
|
|
265
288
|
metadata?: Record<string, unknown>;
|
|
266
289
|
triggerInference?: boolean;
|
|
267
290
|
targetAgents?: string[];
|
|
291
|
+
/** Host acceptance time (epoch ms), stamped where the message is admitted. */
|
|
292
|
+
acceptedAt?: number;
|
|
268
293
|
}
|