@animalabs/agent-framework 0.22.2 → 0.22.4
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 +3 -1
- package/dist/src/agent.d.ts +77 -12
- package/dist/src/agent.d.ts.map +1 -1
- package/dist/src/agent.js +143 -41
- 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/py-runner.d.ts +16 -5
- package/dist/src/code-execution/py-runner.d.ts.map +1 -1
- package/dist/src/code-execution/py-runner.js +186 -74
- package/dist/src/code-execution/py-runner.js.map +1 -1
- package/dist/src/code-execution/runtime-py.d.ts.map +1 -1
- package/dist/src/code-execution/runtime-py.js +49 -3
- package/dist/src/code-execution/runtime-py.js.map +1 -1
- package/dist/src/code-execution/tool-definition.d.ts +12 -1
- package/dist/src/code-execution/tool-definition.d.ts.map +1 -1
- package/dist/src/code-execution/tool-definition.js +21 -3
- 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 +52 -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 +828 -88
- package/dist/src/framework.d.ts.map +1 -1
- package/dist/src/framework.js +5011 -1326
- 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 +27 -3
- package/dist/src/gate/event-gate.js.map +1 -1
- package/dist/src/index.d.ts +4 -2
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +4 -2
- package/dist/src/index.js.map +1 -1
- package/dist/src/mcpl/channel-registry.d.ts +144 -6
- package/dist/src/mcpl/channel-registry.d.ts.map +1 -1
- package/dist/src/mcpl/channel-registry.js +424 -263
- 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 +89 -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 +3 -1
- package/dist/src/mcpl/index.d.ts.map +1 -1
- package/dist/src/mcpl/index.js +3 -1
- package/dist/src/mcpl/index.js.map +1 -1
- package/dist/src/mcpl/inference-router.d.ts +15 -11
- package/dist/src/mcpl/inference-router.d.ts.map +1 -1
- package/dist/src/mcpl/inference-router.js +153 -84
- package/dist/src/mcpl/inference-router.js.map +1 -1
- package/dist/src/mcpl/push-coalescer.d.ts +33 -11
- package/dist/src/mcpl/push-coalescer.d.ts.map +1 -1
- package/dist/src/mcpl/push-coalescer.js +52 -20
- 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 +14 -2
- package/dist/src/mcpl/reference-fetcher.d.ts.map +1 -1
- package/dist/src/mcpl/reference-fetcher.js +72 -30
- package/dist/src/mcpl/reference-fetcher.js.map +1 -1
- package/dist/src/mcpl/references.d.ts +47 -12
- package/dist/src/mcpl/references.d.ts.map +1 -1
- package/dist/src/mcpl/references.js +74 -21
- package/dist/src/mcpl/references.js.map +1 -1
- package/dist/src/mcpl/server-connection.d.ts +89 -10
- package/dist/src/mcpl/server-connection.d.ts.map +1 -1
- package/dist/src/mcpl/server-connection.js +405 -129
- package/dist/src/mcpl/server-connection.js.map +1 -1
- package/dist/src/mcpl/server-registry.d.ts +10 -1
- package/dist/src/mcpl/server-registry.d.ts.map +1 -1
- package/dist/src/mcpl/server-registry.js +14 -3
- 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/transport.d.ts +51 -2
- package/dist/src/mcpl/transport.d.ts.map +1 -1
- package/dist/src/mcpl/transport.js +114 -20
- package/dist/src/mcpl/transport.js.map +1 -1
- package/dist/src/mcpl/types.d.ts +14 -3
- 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 +15 -0
- package/dist/src/mcpl/visible-content.d.ts.map +1 -1
- package/dist/src/mcpl/visible-content.js +25 -0
- package/dist/src/mcpl/visible-content.js.map +1 -1
- package/dist/src/module-registry.d.ts +19 -1
- package/dist/src/module-registry.d.ts.map +1 -1
- package/dist/src/module-registry.js +54 -25
- package/dist/src/module-registry.js.map +1 -1
- package/dist/src/modules/api/index.js +1 -1
- package/dist/src/modules/api/index.js.map +1 -1
- package/dist/src/modules/discord/discord-js-client.d.ts +1 -0
- package/dist/src/modules/discord/discord-js-client.d.ts.map +1 -1
- package/dist/src/modules/discord/discord-js-client.js +25 -9
- package/dist/src/modules/discord/discord-js-client.js.map +1 -1
- package/dist/src/modules/discord/index.d.ts +29 -3
- package/dist/src/modules/discord/index.d.ts.map +1 -1
- package/dist/src/modules/discord/index.js +379 -143
- package/dist/src/modules/discord/index.js.map +1 -1
- package/dist/src/modules/discord/types.d.ts +14 -1
- 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 +2 -1
- 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/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 +32 -2
- package/dist/src/modules/workspace/disk-agreement.d.ts.map +1 -1
- package/dist/src/modules/workspace/disk-agreement.js +30 -2
- package/dist/src/modules/workspace/disk-agreement.js.map +1 -1
- package/dist/src/modules/workspace/effects.d.ts +64 -6
- package/dist/src/modules/workspace/effects.d.ts.map +1 -1
- package/dist/src/modules/workspace/effects.js +291 -44
- package/dist/src/modules/workspace/effects.js.map +1 -1
- package/dist/src/modules/workspace/index.d.ts +119 -23
- package/dist/src/modules/workspace/index.d.ts.map +1 -1
- package/dist/src/modules/workspace/index.js +793 -247
- package/dist/src/modules/workspace/index.js.map +1 -1
- package/dist/src/modules/workspace/observe.d.ts +75 -8
- package/dist/src/modules/workspace/observe.d.ts.map +1 -1
- package/dist/src/modules/workspace/observe.js +174 -14
- 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 +18 -4
- 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 +7 -2
- package/dist/src/modules/workspace/watcher.d.ts.map +1 -1
- package/dist/src/modules/workspace/watcher.js +28 -4
- 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/thinking-token-stamp.d.ts +12 -0
- package/dist/src/thinking-token-stamp.d.ts.map +1 -1
- package/dist/src/thinking-token-stamp.js +34 -3
- package/dist/src/thinking-token-stamp.js.map +1 -1
- 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 +257 -60
- 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 +17 -5
- package/dist/src/types/agent.d.ts.map +1 -1
- package/dist/src/types/events.d.ts +17 -0
- package/dist/src/types/events.d.ts.map +1 -1
- package/dist/src/types/framework.d.ts +21 -5
- 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 +23 -4
- package/dist/src/types/module.d.ts.map +1 -1
- package/dist/src/types/trace.d.ts +95 -6
- 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 +6 -4
- package/src/agent.ts +169 -41
- 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/py-runner.ts +200 -76
- package/src/code-execution/runtime-py.ts +49 -3
- package/src/code-execution/tool-definition.ts +28 -4
- package/src/config-checks.ts +48 -0
- package/src/deadline-timer.ts +44 -0
- package/src/error-message.ts +48 -0
- package/src/framework.ts +5352 -1388
- package/src/gate/event-gate.ts +28 -3
- package/src/index.ts +11 -2
- package/src/mcpl/channel-registry.ts +517 -286
- package/src/mcpl/checkpoint-manager.ts +104 -29
- package/src/mcpl/conversation-router.ts +28 -8
- package/src/mcpl/convert-block.ts +97 -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 +10 -1
- package/src/mcpl/inference-router.ts +174 -99
- package/src/mcpl/push-coalescer.ts +60 -24
- package/src/mcpl/push-handler.ts +20 -90
- package/src/mcpl/reference-fetcher.ts +71 -26
- package/src/mcpl/references.ts +81 -22
- package/src/mcpl/server-connection.ts +427 -132
- package/src/mcpl/server-registry.ts +15 -4
- package/src/mcpl/skip-reply-wake.ts +73 -0
- package/src/mcpl/transport.ts +120 -18
- package/src/mcpl/types.ts +14 -3
- package/src/mcpl/visible-content.ts +27 -0
- package/src/module-registry.ts +58 -23
- package/src/modules/api/index.ts +1 -1
- package/src/modules/discord/discord-js-client.ts +26 -10
- package/src/modules/discord/index.ts +391 -158
- package/src/modules/discord/types.ts +15 -2
- package/src/modules/health/index.ts +2 -1
- package/src/modules/history/index.ts +410 -120
- package/src/modules/history/semantic.ts +189 -32
- package/src/modules/unknown-tool.ts +16 -0
- package/src/modules/workspace/disk-agreement.ts +51 -3
- package/src/modules/workspace/effects.ts +279 -35
- package/src/modules/workspace/index.ts +810 -260
- package/src/modules/workspace/observe.ts +194 -20
- package/src/modules/workspace/reconcile.ts +619 -64
- package/src/modules/workspace/types.ts +18 -4
- package/src/modules/workspace/watcher.ts +27 -4
- 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/thinking-token-stamp.ts +34 -3
- package/src/tool-image-ledger.ts +153 -34
- package/src/tool-presentation.ts +224 -40
- 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 +17 -7
- package/src/types/events.ts +17 -0
- package/src/types/framework.ts +21 -5
- package/src/types/inference-log.ts +1 -1
- package/src/types/module.ts +24 -4
- package/src/types/trace.ts +101 -6
- 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/package.json
CHANGED
|
@@ -1,11 +1,14 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@animalabs/agent-framework",
|
|
3
|
-
"version": "0.22.
|
|
3
|
+
"version": "0.22.4",
|
|
4
4
|
"description": "Multi-agent framework with pluggable modules, persistent state, and concurrent tool execution",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
7
7
|
"url": "git+https://github.com/anima-research/agent-framework.git"
|
|
8
8
|
},
|
|
9
|
+
"publishConfig": {
|
|
10
|
+
"tag": "release-0.22"
|
|
11
|
+
},
|
|
9
12
|
"type": "module",
|
|
10
13
|
"main": "dist/src/index.js",
|
|
11
14
|
"types": "dist/src/index.d.ts",
|
|
@@ -17,7 +20,7 @@
|
|
|
17
20
|
}
|
|
18
21
|
},
|
|
19
22
|
"files": [
|
|
20
|
-
"dist",
|
|
23
|
+
"dist/src",
|
|
21
24
|
"src"
|
|
22
25
|
],
|
|
23
26
|
"bin": {
|
|
@@ -31,7 +34,7 @@
|
|
|
31
34
|
"clean": "rm -rf dist",
|
|
32
35
|
"typecheck": "tsc --noEmit",
|
|
33
36
|
"pretest": "mkdir -p dist/test/fixtures && cp test/fixtures/*.mjs dist/test/fixtures/",
|
|
34
|
-
"test": "node --test --test-force-exit dist/test/*.test.js",
|
|
37
|
+
"test": "node --import ./dist/test/helpers/force-exit-blocking-stdout.js --test --test-force-exit --test-timeout=600000 dist/test/*.test.js",
|
|
35
38
|
"preversion": "node scripts/release-bump.mjs && node scripts/release-holds.mjs",
|
|
36
39
|
"version": "node scripts/release-changelog.mjs && git add CHANGELOG.md changelog.d",
|
|
37
40
|
"prepublishOnly": "node scripts/release-holds.mjs && npm run build"
|
|
@@ -58,7 +61,6 @@
|
|
|
58
61
|
"@babel/parser": "^7.29.9",
|
|
59
62
|
"@types/node": "^22.0.0",
|
|
60
63
|
"@types/ws": "^8.5.13",
|
|
61
|
-
"discord.js": "^14.25.1",
|
|
62
64
|
"tsx": "^4.21.0",
|
|
63
65
|
"typescript": "^7.0.2"
|
|
64
66
|
},
|
package/src/agent.ts
CHANGED
|
@@ -3,6 +3,8 @@ 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 { withoutTokenEstimates } from './thinking-token-stamp.js';
|
|
7
|
+
import { assertBooleanSetting, holdsSettings } from './config-checks.js';
|
|
6
8
|
import {
|
|
7
9
|
indexSilentTickRows,
|
|
8
10
|
separateSilentHeartbeatTicks,
|
|
@@ -75,6 +77,53 @@ const DEFAULT_CONTEXT_BUDGET_TOKENS = 100_000;
|
|
|
75
77
|
const DEFAULT_TRANSITION_PACE_TOKENS = 16_000;
|
|
76
78
|
const DEFAULT_SAME_ROUND_THINK_TEXT_POLICY: SameRoundThinkTextPolicy = 'public';
|
|
77
79
|
|
|
80
|
+
/**
|
|
81
|
+
* Refuse an agent config whose `promptCaching`, `toolResultGuard`,
|
|
82
|
+
* `toolWrapperProseGuard`, `thinking.enabled` or `refusalHandling.autoRewind`
|
|
83
|
+
* holds anything but true or false (assertBooleanSetting), or whose `thinking`
|
|
84
|
+
* or `refusalHandling` is anything but an object, null or false
|
|
85
|
+
* (holdsSettings). The constructor runs it first, so the rule holds wherever
|
|
86
|
+
* an Agent is built. `create()` also runs it for each of its agents before
|
|
87
|
+
* anything opens, and `createEphemeralAgent` before it reserves the name, so a
|
|
88
|
+
* refusal there leaves nothing behind. Membrane reads `thinking.enabled`, and
|
|
89
|
+
* the refusal is here because the setting is AgentConfig's.
|
|
90
|
+
*/
|
|
91
|
+
export function assertAgentSwitches(config: AgentConfig): void {
|
|
92
|
+
const agent = `Agent "${config.name}"`;
|
|
93
|
+
assertBooleanSetting(
|
|
94
|
+
`${agent} promptCaching`,
|
|
95
|
+
config.promptCaching,
|
|
96
|
+
'true or leaving it out marks requests for prompt caching, and false leaves the markers off, for transports that refuse them',
|
|
97
|
+
);
|
|
98
|
+
if (holdsSettings(`${agent} thinking`, config.thinking, '{ enabled: true }')) {
|
|
99
|
+
assertBooleanSetting(
|
|
100
|
+
`${agent} thinking.enabled`,
|
|
101
|
+
config.thinking.enabled,
|
|
102
|
+
'true asks the provider for extended thinking, and false or leaving it out doesn\'t',
|
|
103
|
+
);
|
|
104
|
+
}
|
|
105
|
+
if (holdsSettings(`${agent} refusalHandling`, config.refusalHandling, '{ autoRewind: true }')) {
|
|
106
|
+
assertBooleanSetting(
|
|
107
|
+
`${agent} refusalHandling.autoRewind`,
|
|
108
|
+
config.refusalHandling.autoRewind,
|
|
109
|
+
'true redacts the turn that tripped a refusal and runs again, up to maxRewinds times, ' +
|
|
110
|
+
'and false or leaving it out doesn\'t',
|
|
111
|
+
);
|
|
112
|
+
}
|
|
113
|
+
assertBooleanSetting(
|
|
114
|
+
`${agent} toolResultGuard`,
|
|
115
|
+
config.toolResultGuard,
|
|
116
|
+
'true turns on tool-output admission, with one guarded retry after a provider refusal, ' +
|
|
117
|
+
'and false or leaving it out doesn\'t',
|
|
118
|
+
);
|
|
119
|
+
assertBooleanSetting(
|
|
120
|
+
`${agent} toolWrapperProseGuard`,
|
|
121
|
+
config.toolWrapperProseGuard,
|
|
122
|
+
'true keeps a response whose whole prose is a tool-call-shaped wrapper from running or entering the agent\'s history, ' +
|
|
123
|
+
'and false or leaving it out doesn\'t',
|
|
124
|
+
);
|
|
125
|
+
}
|
|
126
|
+
|
|
78
127
|
/**
|
|
79
128
|
* An agent wraps a context manager and manages inference state.
|
|
80
129
|
*/
|
|
@@ -221,6 +270,7 @@ export class Agent {
|
|
|
221
270
|
contextManager: ContextManager,
|
|
222
271
|
membrane: Membrane
|
|
223
272
|
) {
|
|
273
|
+
assertAgentSwitches(config);
|
|
224
274
|
this.name = config.name;
|
|
225
275
|
this.model = config.model;
|
|
226
276
|
this.systemPrompt = config.systemPrompt;
|
|
@@ -230,11 +280,11 @@ export class Agent {
|
|
|
230
280
|
this.temperature = config.temperature;
|
|
231
281
|
this.thinking = config.thinking;
|
|
232
282
|
this.refusalHandling = config.refusalHandling;
|
|
233
|
-
this.toolResultGuard = new ToolResultGuard(config.name, contextManager, config.toolResultGuard);
|
|
283
|
+
this.toolResultGuard = new ToolResultGuard(config.name, contextManager, config.toolResultGuard === true);
|
|
234
284
|
this.proseRouting = config.proseRouting ?? 'locus';
|
|
235
|
-
this.toolWrapperProseGuard = config.toolWrapperProseGuard
|
|
285
|
+
this.toolWrapperProseGuard = config.toolWrapperProseGuard === true;
|
|
236
286
|
this.cacheTtl = config.cacheTtl ?? '1h';
|
|
237
|
-
this.promptCaching = config.promptCaching
|
|
287
|
+
this.promptCaching = config.promptCaching !== false;
|
|
238
288
|
this.prefillUserMessage = config.prefillUserMessage;
|
|
239
289
|
this.providerParams = config.providerParams;
|
|
240
290
|
this.sameRoundThinkTextPolicy = config.sameRoundThinkTextPolicy;
|
|
@@ -862,20 +912,42 @@ export class Agent {
|
|
|
862
912
|
|
|
863
913
|
/**
|
|
864
914
|
* RFC-006 consumed watermark: the newest stored message at the last compile
|
|
865
|
-
* of a model request,
|
|
915
|
+
* of a model request, or at the last tool boundary that injected messages
|
|
916
|
+
* into a live one, per branch. Everything above it has never been in a
|
|
866
917
|
* request and may still be replaced or withdrawn in place by its sender.
|
|
867
918
|
*/
|
|
868
919
|
private consumedWatermark: { branch: string; sequence: number } | null = null;
|
|
920
|
+
/** Counts marks: a compile writes its watermark back only if no mark was
|
|
921
|
+
* made while it ran (a tool boundary's, or another compile's). */
|
|
922
|
+
private watermarkMarks = 0;
|
|
869
923
|
|
|
870
924
|
getConsumedWatermark(): { branch: string; sequence: number } | null {
|
|
871
925
|
return this.consumedWatermark;
|
|
872
926
|
}
|
|
873
927
|
|
|
874
|
-
/** Mark everything currently stored as consumed (
|
|
928
|
+
/** Mark everything currently stored as consumed (the agent's creation, at
|
|
929
|
+
* boot or later, and a tool boundary that injected messages into the live
|
|
930
|
+
* stream). */
|
|
875
931
|
markContextConsumed(): void {
|
|
876
932
|
// Tolerates partial context-manager doubles (tests build Agents over
|
|
877
933
|
// stubs): without a watermark nothing is ever treated as unread.
|
|
878
934
|
this.consumedWatermark = this.pendingWatermark();
|
|
935
|
+
this.watermarkMarks++;
|
|
936
|
+
}
|
|
937
|
+
|
|
938
|
+
/**
|
|
939
|
+
* A finished compile's watermark, taken before it awaited. Within a branch
|
|
940
|
+
* the watermark only advances: if a mark was made while the compile ran,
|
|
941
|
+
* the compile's (older) one is applied only where it is later on that
|
|
942
|
+
* mark's branch, so a boundary's mark is never rolled back by a compile
|
|
943
|
+
* that started before it (a preview during a live turn).
|
|
944
|
+
*/
|
|
945
|
+
private applyCompileWatermark(watermark: { branch: string; sequence: number }, marksBefore: number): void {
|
|
946
|
+
const current = this.consumedWatermark;
|
|
947
|
+
if (this.watermarkMarks !== marksBefore && current
|
|
948
|
+
&& (current.branch !== watermark.branch || current.sequence >= watermark.sequence)) return;
|
|
949
|
+
this.consumedWatermark = watermark;
|
|
950
|
+
this.watermarkMarks++;
|
|
879
951
|
}
|
|
880
952
|
|
|
881
953
|
/** The watermark a successful compile will establish (taken before, applied after). */
|
|
@@ -907,9 +979,10 @@ export class Agent {
|
|
|
907
979
|
// RFC-006 §3.3: consumption is determined at assembly — a compile that
|
|
908
980
|
// fails assembled nothing, so the watermark moves only on success.
|
|
909
981
|
const watermark = this.pendingWatermark();
|
|
982
|
+
const marksBefore = this.watermarkMarks;
|
|
910
983
|
const compile = () => this.contextManager.compile(this.compileBudget(budget));
|
|
911
984
|
const result = budget ? await compile() : await this.compileAtLiveBudget(compile);
|
|
912
|
-
if (watermark) this.
|
|
985
|
+
if (watermark) this.applyCompileWatermark(watermark, marksBefore);
|
|
913
986
|
return result;
|
|
914
987
|
}
|
|
915
988
|
|
|
@@ -948,9 +1021,10 @@ export class Agent {
|
|
|
948
1021
|
// compression hold whose deadline has passed, which `compile` does for
|
|
949
1022
|
// any compile before it selects.
|
|
950
1023
|
const watermark = opts?.dryRun ? null : this.pendingWatermark();
|
|
1024
|
+
const marksBefore = this.watermarkMarks;
|
|
951
1025
|
const compile = () => this.contextManager.compile(this.compileBudget(budget), injections, opts as never);
|
|
952
1026
|
const result = budget || opts?.dryRun ? await compile() : await this.compileAtLiveBudget(compile);
|
|
953
|
-
if (watermark) this.
|
|
1027
|
+
if (watermark) this.applyCompileWatermark(watermark, marksBefore);
|
|
954
1028
|
return result;
|
|
955
1029
|
}
|
|
956
1030
|
|
|
@@ -1015,8 +1089,11 @@ export class Agent {
|
|
|
1015
1089
|
// notice.
|
|
1016
1090
|
let unguardedResults: ReturnType<Agent['buildToolResultMessages']> | undefined;
|
|
1017
1091
|
const assemble = async (): Promise<NormalizedRequest> => {
|
|
1018
|
-
const
|
|
1092
|
+
const compiled = await this.toolResultGuard.afterAnnotations(
|
|
1019
1093
|
() => this.compileWithInjections(budget, injections));
|
|
1094
|
+
const { systemInjections } = compiled;
|
|
1095
|
+
// The framework's own pricing stamp never goes out (thinking-token-stamp.ts).
|
|
1096
|
+
const messages = withoutTokenEstimates(compiled.messages);
|
|
1020
1097
|
// Read once, after the first compile, since results may have become
|
|
1021
1098
|
// ready while it ran; the refusal retry, assembled while the agent is
|
|
1022
1099
|
// inferring, sends the same ones.
|
|
@@ -1026,15 +1103,8 @@ export class Agent {
|
|
|
1026
1103
|
return {
|
|
1027
1104
|
messages: this.toolResultGuard.prepareRequest(messages, true),
|
|
1028
1105
|
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
1106
|
tools: tools.length > 0 ? tools : undefined,
|
|
1036
|
-
...
|
|
1037
|
-
assistantParticipant: this.name,
|
|
1107
|
+
...this.requestSettings(),
|
|
1038
1108
|
};
|
|
1039
1109
|
};
|
|
1040
1110
|
const request = await assemble();
|
|
@@ -1114,7 +1184,12 @@ export class Agent {
|
|
|
1114
1184
|
|
|
1115
1185
|
// If all tools done, transition to ready
|
|
1116
1186
|
if (this._state.pending.size === 0) {
|
|
1117
|
-
this._state = {
|
|
1187
|
+
this._state = {
|
|
1188
|
+
status: 'ready',
|
|
1189
|
+
toolResults: this._state.completed,
|
|
1190
|
+
stream: this._state.stream,
|
|
1191
|
+
supportsInjectedMessages: this._state.supportsInjectedMessages,
|
|
1192
|
+
};
|
|
1118
1193
|
}
|
|
1119
1194
|
}
|
|
1120
1195
|
|
|
@@ -1133,9 +1208,12 @@ export class Agent {
|
|
|
1133
1208
|
* Build the membrane-normalized request that WOULD be emitted for this
|
|
1134
1209
|
* agent's next activation, given the supplied tools and injections.
|
|
1135
1210
|
*
|
|
1136
|
-
* This is the single source of truth for
|
|
1137
|
-
* real activation path (`startStreamWithInjections`) and
|
|
1138
|
-
* tooling (`Framework.previewActivation`). It does not call
|
|
1211
|
+
* This is the single source of truth for a framework turn's request,
|
|
1212
|
+
* shared by the real activation path (`startStreamWithInjections`) and
|
|
1213
|
+
* debug/preview tooling (`Framework.previewActivation`). It does not call
|
|
1214
|
+
* the membrane. The direct API (`runInferenceWithInjections`) assembles its
|
|
1215
|
+
* own messages, system prompt and tools, and both take the agent's
|
|
1216
|
+
* settings from `requestSettings()`.
|
|
1139
1217
|
* A compile that is sent commits what the context manager commits for it
|
|
1140
1218
|
* (fold resolutions, the compression its fold plan calls for, the consumed
|
|
1141
1219
|
* watermark); a preview passes `options.dryRun`, so its compile commits
|
|
@@ -1211,6 +1289,8 @@ export class Agent {
|
|
|
1211
1289
|
),
|
|
1212
1290
|
}))
|
|
1213
1291
|
.filter((m) => m.content.length > 0);
|
|
1292
|
+
// The framework's own pricing stamp never goes out (thinking-token-stamp.ts).
|
|
1293
|
+
messages = withoutTokenEstimates(messages);
|
|
1214
1294
|
|
|
1215
1295
|
// Silent heartbeat ticks store no prompt row. Render a request-only
|
|
1216
1296
|
// separator before each tick's first surviving row so the wire formatter
|
|
@@ -1239,15 +1319,30 @@ export class Agent {
|
|
|
1239
1319
|
return {
|
|
1240
1320
|
messages: this.toolResultGuard.prepareRequest(messages),
|
|
1241
1321
|
system: this.buildSystemPrompt(systemInjections),
|
|
1322
|
+
tools: availableTools.length > 0 ? availableTools : undefined,
|
|
1323
|
+
...this.requestSettings(),
|
|
1324
|
+
...(kvUnified ? { cacheMarkers: 'cm-owned' as const } : {}),
|
|
1325
|
+
};
|
|
1326
|
+
}
|
|
1327
|
+
|
|
1328
|
+
/**
|
|
1329
|
+
* The request fields that come from this agent's own settings: its model
|
|
1330
|
+
* config, prompt caching and cache TTL, prefill message, provider
|
|
1331
|
+
* parameters and participant name. Every request the agent sends takes
|
|
1332
|
+
* them from here, a framework turn's (buildActivationRequest) and the
|
|
1333
|
+
* direct API's (runInferenceWithInjections), so a setting reaches both or
|
|
1334
|
+
* neither.
|
|
1335
|
+
*/
|
|
1336
|
+
private requestSettings(): Pick<NormalizedRequest,
|
|
1337
|
+
'config' | 'promptCaching' | 'cacheTtl' | 'prefillUserMessage' | 'providerParams' | 'assistantParticipant'> {
|
|
1338
|
+
return {
|
|
1242
1339
|
config: {
|
|
1243
1340
|
model: this.model,
|
|
1244
1341
|
maxTokens: this.maxTokens,
|
|
1245
1342
|
...(this.temperature !== undefined && { temperature: this.temperature }),
|
|
1246
1343
|
...(this.thinking !== undefined && { thinking: this.thinking }),
|
|
1247
1344
|
},
|
|
1248
|
-
tools: availableTools.length > 0 ? availableTools : undefined,
|
|
1249
1345
|
promptCaching: this.promptCaching,
|
|
1250
|
-
...(kvUnified ? { cacheMarkers: 'cm-owned' as const } : {}),
|
|
1251
1346
|
cacheTtl: this.cacheTtl,
|
|
1252
1347
|
...(this.prefillUserMessage && { prefillUserMessage: this.prefillUserMessage }),
|
|
1253
1348
|
...(this.providerParams && { providerParams: this.providerParams }),
|
|
@@ -1308,6 +1403,15 @@ export class Agent {
|
|
|
1308
1403
|
this.failOpenKvSubmissions();
|
|
1309
1404
|
|
|
1310
1405
|
this._streamId++;
|
|
1406
|
+
// A pending cancel belongs to the stream that was live when cancelStream()
|
|
1407
|
+
// ran. The stream driver collects it on that stream's terminal event, or
|
|
1408
|
+
// at the loop's end when the iterator closed without one, while the
|
|
1409
|
+
// stream still owns the agent. This clear is for the records no driver
|
|
1410
|
+
// collects: a dropped turn's, whose stream no driver iterates; one whose
|
|
1411
|
+
// stream's terminal came after another stream took the agent; or a
|
|
1412
|
+
// cancel after the stream's complete event. A fresh stream must not
|
|
1413
|
+
// inherit one and read its own later error as a deliberate stop.
|
|
1414
|
+
this._pendingCancel = undefined;
|
|
1311
1415
|
this._inferenceStartedAt = Date.now();
|
|
1312
1416
|
this.lastStreamInputTokens = 0;
|
|
1313
1417
|
// Reset the cache-inclusive counters too: a new stream must not inherit
|
|
@@ -1408,9 +1512,10 @@ export class Agent {
|
|
|
1408
1512
|
|
|
1409
1513
|
/**
|
|
1410
1514
|
* Transition to waiting_for_tools when stream yields tool calls.
|
|
1411
|
-
* Called by framework's driveStream
|
|
1515
|
+
* Called by framework's driveStream, with what the stream declared about
|
|
1516
|
+
* carrying injected messages with this round's results (see AgentState).
|
|
1412
1517
|
*/
|
|
1413
|
-
enterWaitingForTools(calls: ToolCall[], stream: YieldingStream): void {
|
|
1518
|
+
enterWaitingForTools(calls: ToolCall[], stream: YieldingStream, supportsInjectedMessages?: boolean): void {
|
|
1414
1519
|
const pending = new Map<ToolCallId, PendingToolCall>();
|
|
1415
1520
|
for (const call of calls) {
|
|
1416
1521
|
pending.set(call.id, {
|
|
@@ -1420,7 +1525,7 @@ export class Agent {
|
|
|
1420
1525
|
startedAt: Date.now(),
|
|
1421
1526
|
});
|
|
1422
1527
|
}
|
|
1423
|
-
this._state = { status: 'waiting_for_tools', pending, completed: [], stream };
|
|
1528
|
+
this._state = { status: 'waiting_for_tools', pending, completed: [], stream, supportsInjectedMessages };
|
|
1424
1529
|
}
|
|
1425
1530
|
|
|
1426
1531
|
/**
|
|
@@ -1463,18 +1568,42 @@ export class Agent {
|
|
|
1463
1568
|
this._state = { status: 'streaming', stream };
|
|
1464
1569
|
}
|
|
1465
1570
|
|
|
1571
|
+
/** The most recent cancelStream() of a live stream, until the stream
|
|
1572
|
+
* driver collects it on that stream's terminal event. Its presence is
|
|
1573
|
+
* the signal (a reasonless Stop is still a deliberate stop); its reason
|
|
1574
|
+
* is the caller's own word. Membrane reports every cancel() as reason
|
|
1575
|
+
* 'user' — the call, not the actor — and a stream implementation may
|
|
1576
|
+
* report the cancel as `error` with no reason at all, so this record is
|
|
1577
|
+
* the only provenance a host-side cancel has. */
|
|
1578
|
+
private _pendingCancel: { reason?: string } | undefined;
|
|
1579
|
+
|
|
1466
1580
|
/**
|
|
1467
|
-
* Cancel
|
|
1581
|
+
* Cancel the stream this agent's state holds (streaming, waiting on its
|
|
1582
|
+
* tools, or ready at a tool boundary with every result in), and reset to
|
|
1583
|
+
* idle. `reason` is provenance for the framework's inference:aborted trace
|
|
1584
|
+
* and marker metadata (e.g. 'zombie_reclaim', 'subagent_cancel'); it never
|
|
1585
|
+
* reaches the provider.
|
|
1468
1586
|
*/
|
|
1469
|
-
cancelStream(): void {
|
|
1470
|
-
if (this._state
|
|
1471
|
-
this.
|
|
1472
|
-
} else if (this._state.status === 'waiting_for_tools' && this._state.stream) {
|
|
1587
|
+
cancelStream(reason?: string): void {
|
|
1588
|
+
if ('stream' in this._state && this._state.stream) {
|
|
1589
|
+
this._pendingCancel = { reason };
|
|
1473
1590
|
this._state.stream.cancel();
|
|
1474
1591
|
}
|
|
1475
1592
|
this._state = { status: 'idle' };
|
|
1476
1593
|
}
|
|
1477
1594
|
|
|
1595
|
+
/** Collect (and clear) the cancel that ended the current stream, if this
|
|
1596
|
+
* side issued one. The stream driver calls it once, while the stream
|
|
1597
|
+
* still owns the agent, at the stream's terminal event (`aborted`
|
|
1598
|
+
* normally, `error` for implementations that report cancel() that way)
|
|
1599
|
+
* or at the loop's end when the stream closed without one. A record no
|
|
1600
|
+
* driver collects is cleared when the agent's next stream starts. */
|
|
1601
|
+
takeCancel(): { reason?: string } | undefined {
|
|
1602
|
+
const c = this._pendingCancel;
|
|
1603
|
+
this._pendingCancel = undefined;
|
|
1604
|
+
return c;
|
|
1605
|
+
}
|
|
1606
|
+
|
|
1478
1607
|
/**
|
|
1479
1608
|
* Check if agent has pending tool calls.
|
|
1480
1609
|
*/
|
|
@@ -1507,20 +1636,20 @@ export class Agent {
|
|
|
1507
1636
|
}
|
|
1508
1637
|
|
|
1509
1638
|
/**
|
|
1510
|
-
* Build the effective system prompt, appending any system-position
|
|
1639
|
+
* Build the effective system prompt, appending any system-position
|
|
1640
|
+
* injections, their blocks joined by line breaks. The system prompt is
|
|
1641
|
+
* text, so a block of another type, such as an image a server or module
|
|
1642
|
+
* injected there, can't go in it: a line in its place says so. The hook
|
|
1643
|
+
* orchestrator tells a server's operator once per server and namespace,
|
|
1644
|
+
* and the module registry tells a module's once per module and namespace.
|
|
1511
1645
|
*/
|
|
1512
1646
|
private buildSystemPrompt(systemInjections: ContentBlock[]): string {
|
|
1513
1647
|
if (systemInjections.length === 0) {
|
|
1514
1648
|
return this.systemPrompt;
|
|
1515
1649
|
}
|
|
1516
1650
|
|
|
1517
|
-
const injectedText = systemInjections
|
|
1518
|
-
.
|
|
1519
|
-
.map((block) => block.text);
|
|
1520
|
-
|
|
1521
|
-
if (injectedText.length === 0) {
|
|
1522
|
-
return this.systemPrompt;
|
|
1523
|
-
}
|
|
1651
|
+
const injectedText = systemInjections.map((block) =>
|
|
1652
|
+
block.type === 'text' ? block.text : `[${block.type} block not shown: the system prompt carries text only.]`);
|
|
1524
1653
|
|
|
1525
1654
|
return this.systemPrompt + '\n' + injectedText.join('\n');
|
|
1526
1655
|
}
|
|
@@ -1532,10 +1661,9 @@ export class Agent {
|
|
|
1532
1661
|
return { aborted: true, durationMs };
|
|
1533
1662
|
}
|
|
1534
1663
|
|
|
1535
|
-
if (this._state
|
|
1536
|
-
(this._state.status === 'waiting_for_tools' && this._state.stream)) {
|
|
1664
|
+
if ('stream' in this._state && this._state.stream) {
|
|
1537
1665
|
const durationMs = Date.now() - this._inferenceStartedAt;
|
|
1538
|
-
this.cancelStream();
|
|
1666
|
+
this.cancelStream(reason);
|
|
1539
1667
|
return { aborted: true, durationMs };
|
|
1540
1668
|
}
|
|
1541
1669
|
|
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
|
+
}
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The names someone most likely meant, when the one they gave matches none:
|
|
3
|
+
* for a refusal's "did you mean", such as a tool name an agent got wrong.
|
|
4
|
+
*
|
|
5
|
+
* Case is ignored. A candidate that the name matches as a whole `--` segment
|
|
6
|
+
* ("ls" for "workspace--ls"), then one that starts with it or that it starts
|
|
7
|
+
* with, then one that contains it or that it contains, ranks ahead of one
|
|
8
|
+
* that is only a few edits away, however many edits those matches take. The
|
|
9
|
+
* prefix and substring matches need three characters on the shorter side,
|
|
10
|
+
* since a letter or two is in nearly every name. A candidate that matches in
|
|
11
|
+
* none of those ways counts only within the edits noiseLimit allows, and past
|
|
12
|
+
* that it's noise. So a name that is part of no candidate, holds none and is
|
|
13
|
+
* close to none gets nothing back, and a name in a crowded namespace doesn't
|
|
14
|
+
* get its neighbours (`workspace--write` for `workspace--read`).
|
|
15
|
+
*/
|
|
16
|
+
export function closestNames(name: string, candidates: readonly string[], max = 2): string[] {
|
|
17
|
+
const wanted = name.toLowerCase();
|
|
18
|
+
const ranked: { candidate: string; tier: number; distance: number }[] = [];
|
|
19
|
+
for (const candidate of new Set(candidates)) {
|
|
20
|
+
const other = candidate.toLowerCase();
|
|
21
|
+
const shorter = Math.min(wanted.length, other.length);
|
|
22
|
+
const tier = other === wanted ? 0
|
|
23
|
+
: wanted && other.split('--').includes(wanted) ? 1
|
|
24
|
+
: shorter >= 3 && (other.startsWith(wanted) || wanted.startsWith(other)) ? 2
|
|
25
|
+
: shorter >= 3 && (other.includes(wanted) || wanted.includes(other)) ? 3
|
|
26
|
+
: 4;
|
|
27
|
+
// In tiers 0 to 3 one name holds the other, so the length difference is
|
|
28
|
+
// already their distance, and a long name skips the edit table.
|
|
29
|
+
const limit = tier === 4 ? noiseLimit(wanted, other) : Infinity;
|
|
30
|
+
const distance = tier === 4 ? editDistance(wanted, other, limit) : Math.abs(wanted.length - other.length);
|
|
31
|
+
if (distance > limit) continue;
|
|
32
|
+
ranked.push({ candidate, tier, distance });
|
|
33
|
+
}
|
|
34
|
+
// A stable sort: candidates that tie keep the order they were given in.
|
|
35
|
+
ranked.sort((a, b) => a.tier - b.tier || a.distance - b.distance);
|
|
36
|
+
return ranked.slice(0, Math.max(0, max)).map((entry) => entry.candidate);
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
/**
|
|
40
|
+
* Whether `name` looks like a slip for `candidate`, ignoring case: the same;
|
|
41
|
+
* a few edits apart, where a transposition counts as one edit; or, at three
|
|
42
|
+
* characters or more, a part of it, which is a shortened attempt at it
|
|
43
|
+
* (`mode` for `deliveryMode`, `interval` for `refillIntervalMs`). A part
|
|
44
|
+
* counts only that way round: a name that holds the candidate, and is more
|
|
45
|
+
* edits from it than a slip allows, is another name, usually an extra that
|
|
46
|
+
* explains it (`channel_note` beside `channel`, where `channels` is a slip).
|
|
47
|
+
* Beyond these, two names are different names rather than one mistyped.
|
|
48
|
+
*/
|
|
49
|
+
export function isNearMiss(name: string, candidate: string): boolean {
|
|
50
|
+
const a = name.toLowerCase(), b = candidate.toLowerCase();
|
|
51
|
+
if (a.length >= 3 && b.includes(a)) return true;
|
|
52
|
+
const limit = noiseLimit(a, b);
|
|
53
|
+
return editDistance(a, b, limit) <= limit;
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
/**
|
|
57
|
+
* The most edits that still read as a slip: a quarter of what follows the
|
|
58
|
+
* prefix the two names share, and at least one. A shared prefix is mostly a
|
|
59
|
+
* namespace (`workspace--`, `mcpl--discord--`) and says nothing about the
|
|
60
|
+
* rest, so `workspace--read` and `workspace--write` are four edits apart in
|
|
61
|
+
* a four-letter tool name, not in a fifteen-letter one.
|
|
62
|
+
*/
|
|
63
|
+
function noiseLimit(a: string, b: string): number {
|
|
64
|
+
let shared = 0;
|
|
65
|
+
while (shared < a.length && shared < b.length && a[shared] === b[shared]) shared++;
|
|
66
|
+
return Math.max(1, Math.floor((Math.max(a.length, b.length) - shared) / 4));
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
/**
|
|
70
|
+
* Edits between two strings: insertions, deletions, substitutions and
|
|
71
|
+
* swaps of neighbours (optimal string alignment). Past `limit` the exact
|
|
72
|
+
* count doesn't matter, so it answers `limit + 1` as soon as it is sure.
|
|
73
|
+
*/
|
|
74
|
+
function editDistance(a: string, b: string, limit: number): number {
|
|
75
|
+
if (Math.abs(a.length - b.length) > limit) return limit + 1;
|
|
76
|
+
let before: number[] = [];
|
|
77
|
+
let previous = Array.from({ length: b.length + 1 }, (_, j) => j);
|
|
78
|
+
for (let i = 1; i <= a.length; i++) {
|
|
79
|
+
const current = [i];
|
|
80
|
+
let best = i;
|
|
81
|
+
for (let j = 1; j <= b.length; j++) {
|
|
82
|
+
const cost = a[i - 1] === b[j - 1] ? 0 : 1;
|
|
83
|
+
let value = Math.min(previous[j] + 1, current[j - 1] + 1, previous[j - 1] + cost);
|
|
84
|
+
if (i > 1 && j > 1 && a[i - 1] === b[j - 2] && a[i - 2] === b[j - 1]) value = Math.min(value, before[j - 2] + 1);
|
|
85
|
+
current.push(value);
|
|
86
|
+
best = Math.min(best, value);
|
|
87
|
+
}
|
|
88
|
+
// No row's smallest entry is below the one before it, so none later can come back under the limit.
|
|
89
|
+
if (best > limit) return limit + 1;
|
|
90
|
+
before = previous;
|
|
91
|
+
previous = current;
|
|
92
|
+
}
|
|
93
|
+
return previous[b.length];
|
|
94
|
+
}
|