@animalabs/agent-framework 0.22.2 → 0.23.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +108 -4
- package/dist/src/agent.d.ts +108 -17
- package/dist/src/agent.d.ts.map +1 -1
- package/dist/src/agent.js +207 -67
- package/dist/src/agent.js.map +1 -1
- package/dist/src/api/mcp-server-core.js +1 -1
- package/dist/src/api/mcp-server-core.js.map +1 -1
- package/dist/src/api/server.d.ts.map +1 -1
- package/dist/src/api/server.js +5 -1
- package/dist/src/api/server.js.map +1 -1
- package/dist/src/api/types.d.ts +1 -1
- package/dist/src/api/types.d.ts.map +1 -1
- package/dist/src/branch-names.d.ts +14 -0
- package/dist/src/branch-names.d.ts.map +1 -0
- package/dist/src/branch-names.js +22 -0
- package/dist/src/branch-names.js.map +1 -0
- package/dist/src/closest-names.d.ts +28 -0
- package/dist/src/closest-names.d.ts.map +1 -0
- package/dist/src/closest-names.js +98 -0
- package/dist/src/closest-names.js.map +1 -0
- package/dist/src/code-execution/index.d.ts +1 -1
- package/dist/src/code-execution/index.d.ts.map +1 -1
- package/dist/src/code-execution/index.js.map +1 -1
- package/dist/src/code-execution/py-runner.d.ts +50 -7
- package/dist/src/code-execution/py-runner.d.ts.map +1 -1
- package/dist/src/code-execution/py-runner.js +258 -90
- package/dist/src/code-execution/py-runner.js.map +1 -1
- package/dist/src/code-execution/runtime-py.d.ts +3 -2
- package/dist/src/code-execution/runtime-py.d.ts.map +1 -1
- package/dist/src/code-execution/runtime-py.js +94 -8
- package/dist/src/code-execution/runtime-py.js.map +1 -1
- package/dist/src/code-execution/tool-definition.d.ts +17 -1
- package/dist/src/code-execution/tool-definition.d.ts.map +1 -1
- package/dist/src/code-execution/tool-definition.js +72 -6
- package/dist/src/code-execution/tool-definition.js.map +1 -1
- package/dist/src/config-checks.d.ts +28 -0
- package/dist/src/config-checks.d.ts.map +1 -0
- package/dist/src/config-checks.js +56 -0
- package/dist/src/config-checks.js.map +1 -0
- package/dist/src/deadline-timer.d.ts +21 -0
- package/dist/src/deadline-timer.d.ts.map +1 -0
- package/dist/src/deadline-timer.js +43 -0
- package/dist/src/deadline-timer.js.map +1 -0
- package/dist/src/error-message.d.ts +30 -0
- package/dist/src/error-message.d.ts.map +1 -0
- package/dist/src/error-message.js +50 -0
- package/dist/src/error-message.js.map +1 -0
- package/dist/src/framework.d.ts +1529 -165
- package/dist/src/framework.d.ts.map +1 -1
- package/dist/src/framework.js +8264 -1939
- package/dist/src/framework.js.map +1 -1
- package/dist/src/gate/event-gate.d.ts +8 -0
- package/dist/src/gate/event-gate.d.ts.map +1 -1
- package/dist/src/gate/event-gate.js +36 -5
- package/dist/src/gate/event-gate.js.map +1 -1
- package/dist/src/held-writes.d.ts +16 -0
- package/dist/src/held-writes.d.ts.map +1 -0
- package/dist/src/held-writes.js +56 -0
- package/dist/src/held-writes.js.map +1 -0
- package/dist/src/index.d.ts +10 -4
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +11 -5
- package/dist/src/index.js.map +1 -1
- package/dist/src/mcpl/capability-grant.d.ts +4 -0
- package/dist/src/mcpl/capability-grant.d.ts.map +1 -1
- package/dist/src/mcpl/capability-grant.js +1 -1
- package/dist/src/mcpl/capability-grant.js.map +1 -1
- package/dist/src/mcpl/channel-registry.d.ts +233 -18
- package/dist/src/mcpl/channel-registry.d.ts.map +1 -1
- package/dist/src/mcpl/channel-registry.js +975 -386
- package/dist/src/mcpl/channel-registry.js.map +1 -1
- package/dist/src/mcpl/checkpoint-manager.d.ts +21 -1
- package/dist/src/mcpl/checkpoint-manager.d.ts.map +1 -1
- package/dist/src/mcpl/checkpoint-manager.js +91 -30
- package/dist/src/mcpl/checkpoint-manager.js.map +1 -1
- package/dist/src/mcpl/conversation-router.d.ts +19 -3
- package/dist/src/mcpl/conversation-router.d.ts.map +1 -1
- package/dist/src/mcpl/conversation-router.js +23 -8
- package/dist/src/mcpl/conversation-router.js.map +1 -1
- package/dist/src/mcpl/convert-block.d.ts +20 -0
- package/dist/src/mcpl/convert-block.d.ts.map +1 -0
- package/dist/src/mcpl/convert-block.js +88 -0
- package/dist/src/mcpl/convert-block.js.map +1 -0
- package/dist/src/mcpl/errors.d.ts +13 -0
- package/dist/src/mcpl/errors.d.ts.map +1 -1
- package/dist/src/mcpl/errors.js +28 -0
- package/dist/src/mcpl/errors.js.map +1 -1
- package/dist/src/mcpl/hook-orchestrator.d.ts +23 -0
- package/dist/src/mcpl/hook-orchestrator.d.ts.map +1 -1
- package/dist/src/mcpl/hook-orchestrator.js +83 -72
- package/dist/src/mcpl/hook-orchestrator.js.map +1 -1
- package/dist/src/mcpl/inbound-source.d.ts +114 -0
- package/dist/src/mcpl/inbound-source.d.ts.map +1 -0
- package/dist/src/mcpl/inbound-source.js +83 -0
- package/dist/src/mcpl/inbound-source.js.map +1 -0
- package/dist/src/mcpl/index.d.ts +7 -1
- package/dist/src/mcpl/index.d.ts.map +1 -1
- package/dist/src/mcpl/index.js +5 -1
- package/dist/src/mcpl/index.js.map +1 -1
- package/dist/src/mcpl/inference-router.d.ts +19 -13
- package/dist/src/mcpl/inference-router.d.ts.map +1 -1
- package/dist/src/mcpl/inference-router.js +155 -87
- package/dist/src/mcpl/inference-router.js.map +1 -1
- package/dist/src/mcpl/log-value.d.ts +7 -0
- package/dist/src/mcpl/log-value.d.ts.map +1 -1
- package/dist/src/mcpl/log-value.js +9 -0
- package/dist/src/mcpl/log-value.js.map +1 -1
- package/dist/src/mcpl/modern-connection.d.ts +227 -0
- package/dist/src/mcpl/modern-connection.d.ts.map +1 -0
- package/dist/src/mcpl/modern-connection.js +1088 -0
- package/dist/src/mcpl/modern-connection.js.map +1 -0
- package/dist/src/mcpl/prefix-rule.d.ts +18 -0
- package/dist/src/mcpl/prefix-rule.d.ts.map +1 -0
- package/dist/src/mcpl/prefix-rule.js +25 -0
- package/dist/src/mcpl/prefix-rule.js.map +1 -0
- package/dist/src/mcpl/protocol-family.d.ts +179 -0
- package/dist/src/mcpl/protocol-family.d.ts.map +1 -0
- package/dist/src/mcpl/protocol-family.js +697 -0
- package/dist/src/mcpl/protocol-family.js.map +1 -0
- package/dist/src/mcpl/push-coalescer.d.ts +58 -17
- package/dist/src/mcpl/push-coalescer.d.ts.map +1 -1
- package/dist/src/mcpl/push-coalescer.js +93 -32
- package/dist/src/mcpl/push-coalescer.js.map +1 -1
- package/dist/src/mcpl/push-handler.d.ts +16 -9
- package/dist/src/mcpl/push-handler.d.ts.map +1 -1
- package/dist/src/mcpl/push-handler.js +18 -83
- package/dist/src/mcpl/push-handler.js.map +1 -1
- package/dist/src/mcpl/reference-fetcher.d.ts +76 -13
- package/dist/src/mcpl/reference-fetcher.d.ts.map +1 -1
- package/dist/src/mcpl/reference-fetcher.js +275 -66
- package/dist/src/mcpl/reference-fetcher.js.map +1 -1
- package/dist/src/mcpl/references.d.ts +98 -18
- package/dist/src/mcpl/references.d.ts.map +1 -1
- package/dist/src/mcpl/references.js +170 -32
- package/dist/src/mcpl/references.js.map +1 -1
- package/dist/src/mcpl/server-connection.d.ts +406 -31
- package/dist/src/mcpl/server-connection.d.ts.map +1 -1
- package/dist/src/mcpl/server-connection.js +1331 -272
- package/dist/src/mcpl/server-connection.js.map +1 -1
- package/dist/src/mcpl/server-registry.d.ts +35 -6
- package/dist/src/mcpl/server-registry.d.ts.map +1 -1
- package/dist/src/mcpl/server-registry.js +63 -13
- package/dist/src/mcpl/server-registry.js.map +1 -1
- package/dist/src/mcpl/skip-reply-wake.d.ts +36 -0
- package/dist/src/mcpl/skip-reply-wake.d.ts.map +1 -0
- package/dist/src/mcpl/skip-reply-wake.js +55 -0
- package/dist/src/mcpl/skip-reply-wake.js.map +1 -0
- package/dist/src/mcpl/tool-result-normalize.d.ts +54 -0
- package/dist/src/mcpl/tool-result-normalize.d.ts.map +1 -0
- package/dist/src/mcpl/tool-result-normalize.js +232 -0
- package/dist/src/mcpl/tool-result-normalize.js.map +1 -0
- package/dist/src/mcpl/transport.d.ts +104 -12
- package/dist/src/mcpl/transport.d.ts.map +1 -1
- package/dist/src/mcpl/transport.js +315 -85
- package/dist/src/mcpl/transport.js.map +1 -1
- package/dist/src/mcpl/types.d.ts +76 -19
- package/dist/src/mcpl/types.d.ts.map +1 -1
- package/dist/src/mcpl/types.js.map +1 -1
- package/dist/src/mcpl/visible-content.d.ts +16 -0
- package/dist/src/mcpl/visible-content.d.ts.map +1 -1
- package/dist/src/mcpl/visible-content.js +26 -0
- package/dist/src/mcpl/visible-content.js.map +1 -1
- package/dist/src/module-registry.d.ts +34 -6
- package/dist/src/module-registry.d.ts.map +1 -1
- package/dist/src/module-registry.js +119 -31
- package/dist/src/module-registry.js.map +1 -1
- package/dist/src/modules/api/index.d.ts +1 -1
- package/dist/src/modules/api/index.d.ts.map +1 -1
- package/dist/src/modules/api/index.js +3 -2
- package/dist/src/modules/api/index.js.map +1 -1
- package/dist/src/modules/discord/discord-js-client.d.ts +43 -2
- package/dist/src/modules/discord/discord-js-client.d.ts.map +1 -1
- package/dist/src/modules/discord/discord-js-client.js +286 -67
- package/dist/src/modules/discord/discord-js-client.js.map +1 -1
- package/dist/src/modules/discord/index.d.ts +53 -5
- package/dist/src/modules/discord/index.d.ts.map +1 -1
- package/dist/src/modules/discord/index.js +712 -186
- package/dist/src/modules/discord/index.js.map +1 -1
- package/dist/src/modules/discord/refusal.d.ts +14 -0
- package/dist/src/modules/discord/refusal.d.ts.map +1 -0
- package/dist/src/modules/discord/refusal.js +14 -0
- package/dist/src/modules/discord/refusal.js.map +1 -0
- package/dist/src/modules/discord/types.d.ts +27 -4
- package/dist/src/modules/discord/types.d.ts.map +1 -1
- package/dist/src/modules/health/index.d.ts.map +1 -1
- package/dist/src/modules/health/index.js +8 -3
- package/dist/src/modules/health/index.js.map +1 -1
- package/dist/src/modules/history/index.d.ts +3 -1
- package/dist/src/modules/history/index.d.ts.map +1 -1
- package/dist/src/modules/history/index.js +359 -127
- package/dist/src/modules/history/index.js.map +1 -1
- package/dist/src/modules/history/semantic.d.ts +28 -1
- package/dist/src/modules/history/semantic.d.ts.map +1 -1
- package/dist/src/modules/history/semantic.js +177 -32
- package/dist/src/modules/history/semantic.js.map +1 -1
- package/dist/src/modules/index.d.ts +1 -1
- package/dist/src/modules/index.d.ts.map +1 -1
- package/dist/src/modules/index.js +1 -1
- package/dist/src/modules/index.js.map +1 -1
- package/dist/src/modules/unknown-tool.d.ts +10 -0
- package/dist/src/modules/unknown-tool.d.ts.map +1 -0
- package/dist/src/modules/unknown-tool.js +17 -0
- package/dist/src/modules/unknown-tool.js.map +1 -0
- package/dist/src/modules/workspace/disk-agreement.d.ts +57 -4
- package/dist/src/modules/workspace/disk-agreement.d.ts.map +1 -1
- package/dist/src/modules/workspace/disk-agreement.js +75 -7
- package/dist/src/modules/workspace/disk-agreement.js.map +1 -1
- package/dist/src/modules/workspace/effects.d.ts +66 -7
- package/dist/src/modules/workspace/effects.d.ts.map +1 -1
- package/dist/src/modules/workspace/effects.js +303 -46
- package/dist/src/modules/workspace/effects.js.map +1 -1
- package/dist/src/modules/workspace/index.d.ts +313 -45
- package/dist/src/modules/workspace/index.d.ts.map +1 -1
- package/dist/src/modules/workspace/index.js +1404 -304
- package/dist/src/modules/workspace/index.js.map +1 -1
- package/dist/src/modules/workspace/observe.d.ts +315 -16
- package/dist/src/modules/workspace/observe.d.ts.map +1 -1
- package/dist/src/modules/workspace/observe.js +727 -37
- package/dist/src/modules/workspace/observe.js.map +1 -1
- package/dist/src/modules/workspace/reconcile.d.ts +58 -7
- package/dist/src/modules/workspace/reconcile.d.ts.map +1 -1
- package/dist/src/modules/workspace/reconcile.js +521 -56
- package/dist/src/modules/workspace/reconcile.js.map +1 -1
- package/dist/src/modules/workspace/types.d.ts +28 -5
- package/dist/src/modules/workspace/types.d.ts.map +1 -1
- package/dist/src/modules/workspace/types.js.map +1 -1
- package/dist/src/modules/workspace/watcher.d.ts +49 -2
- package/dist/src/modules/workspace/watcher.d.ts.map +1 -1
- package/dist/src/modules/workspace/watcher.js +158 -29
- package/dist/src/modules/workspace/watcher.js.map +1 -1
- package/dist/src/prose-drafts.d.ts +240 -0
- package/dist/src/prose-drafts.d.ts.map +1 -0
- package/dist/src/prose-drafts.js +362 -0
- package/dist/src/prose-drafts.js.map +1 -0
- package/dist/src/prose-segments.d.ts +21 -2
- package/dist/src/prose-segments.d.ts.map +1 -1
- package/dist/src/prose-segments.js +46 -9
- package/dist/src/prose-segments.js.map +1 -1
- package/dist/src/recovery/offline-branch.d.ts +1 -0
- package/dist/src/recovery/offline-branch.d.ts.map +1 -1
- package/dist/src/recovery/offline-branch.js +3 -1
- package/dist/src/recovery/offline-branch.js.map +1 -1
- package/dist/src/safe-slice.d.ts +5 -1
- package/dist/src/safe-slice.d.ts.map +1 -1
- package/dist/src/safe-slice.js +9 -1
- package/dist/src/safe-slice.js.map +1 -1
- package/dist/src/silent-heartbeat.d.ts +112 -39
- package/dist/src/silent-heartbeat.d.ts.map +1 -1
- package/dist/src/silent-heartbeat.js +100 -29
- package/dist/src/silent-heartbeat.js.map +1 -1
- package/dist/src/tool-args.d.ts +40 -0
- package/dist/src/tool-args.d.ts.map +1 -0
- package/dist/src/tool-args.js +207 -0
- package/dist/src/tool-args.js.map +1 -0
- package/dist/src/tool-image-ledger.d.ts +87 -19
- package/dist/src/tool-image-ledger.d.ts.map +1 -1
- package/dist/src/tool-image-ledger.js +135 -32
- package/dist/src/tool-image-ledger.js.map +1 -1
- package/dist/src/tool-presentation.d.ts +9 -0
- package/dist/src/tool-presentation.d.ts.map +1 -1
- package/dist/src/tool-presentation.js +266 -62
- package/dist/src/tool-presentation.js.map +1 -1
- package/dist/src/tool-result-guard.d.ts.map +1 -1
- package/dist/src/tool-result-guard.js +7 -10
- package/dist/src/tool-result-guard.js.map +1 -1
- package/dist/src/tool-result-history.d.ts +32 -3
- package/dist/src/tool-result-history.d.ts.map +1 -1
- package/dist/src/tool-result-history.js +106 -19
- package/dist/src/tool-result-history.js.map +1 -1
- package/dist/src/tune-out/coordinator.d.ts +25 -1
- package/dist/src/tune-out/coordinator.d.ts.map +1 -1
- package/dist/src/tune-out/coordinator.js +260 -65
- package/dist/src/tune-out/coordinator.js.map +1 -1
- package/dist/src/types/agent.d.ts +44 -22
- package/dist/src/types/agent.d.ts.map +1 -1
- package/dist/src/types/events.d.ts +25 -0
- package/dist/src/types/events.d.ts.map +1 -1
- package/dist/src/types/framework.d.ts +38 -7
- package/dist/src/types/framework.d.ts.map +1 -1
- package/dist/src/types/inference-log.d.ts +1 -1
- package/dist/src/types/inference-log.d.ts.map +1 -1
- package/dist/src/types/module.d.ts +77 -14
- package/dist/src/types/module.d.ts.map +1 -1
- package/dist/src/types/trace.d.ts +97 -8
- package/dist/src/types/trace.d.ts.map +1 -1
- package/dist/src/usage/usage-tracker.d.ts +5 -0
- package/dist/src/usage/usage-tracker.d.ts.map +1 -1
- package/dist/src/usage/usage-tracker.js +35 -8
- package/dist/src/usage/usage-tracker.js.map +1 -1
- package/package.json +5 -4
- package/src/agent.ts +257 -72
- package/src/api/mcp-server-core.ts +1 -1
- package/src/api/server.ts +4 -1
- package/src/api/types.ts +1 -1
- package/src/branch-names.ts +19 -0
- package/src/closest-names.ts +94 -0
- package/src/code-execution/index.ts +1 -0
- package/src/code-execution/py-runner.ts +304 -93
- package/src/code-execution/runtime-py.ts +94 -8
- package/src/code-execution/tool-definition.ts +85 -7
- package/src/config-checks.ts +50 -0
- package/src/deadline-timer.ts +44 -0
- package/src/error-message.ts +48 -0
- package/src/framework.ts +8625 -1984
- package/src/gate/event-gate.ts +38 -5
- package/src/held-writes.ts +59 -0
- package/src/index.ts +29 -5
- package/src/mcpl/capability-grant.ts +1 -1
- package/src/mcpl/channel-registry.ts +1095 -411
- package/src/mcpl/checkpoint-manager.ts +104 -29
- package/src/mcpl/conversation-router.ts +28 -8
- package/src/mcpl/convert-block.ts +105 -0
- package/src/mcpl/errors.ts +28 -0
- package/src/mcpl/hook-orchestrator.ts +84 -77
- package/src/mcpl/inbound-source.ts +156 -0
- package/src/mcpl/index.ts +23 -1
- package/src/mcpl/inference-router.ts +179 -103
- package/src/mcpl/log-value.ts +10 -0
- package/src/mcpl/modern-connection.ts +1182 -0
- package/src/mcpl/prefix-rule.ts +32 -0
- package/src/mcpl/protocol-family.ts +691 -0
- package/src/mcpl/push-coalescer.ts +110 -36
- package/src/mcpl/push-handler.ts +20 -90
- package/src/mcpl/reference-fetcher.ts +318 -67
- package/src/mcpl/references.ts +183 -34
- package/src/mcpl/server-connection.ts +1404 -280
- package/src/mcpl/server-registry.ts +63 -14
- package/src/mcpl/skip-reply-wake.ts +73 -0
- package/src/mcpl/tool-result-normalize.ts +294 -0
- package/src/mcpl/transport.ts +320 -76
- package/src/mcpl/types.ts +77 -19
- package/src/mcpl/visible-content.ts +28 -0
- package/src/module-registry.ts +126 -36
- package/src/modules/api/index.ts +3 -2
- package/src/modules/discord/discord-js-client.ts +306 -74
- package/src/modules/discord/index.ts +737 -201
- package/src/modules/discord/refusal.ts +13 -0
- package/src/modules/discord/types.ts +27 -6
- package/src/modules/health/index.ts +8 -3
- package/src/modules/history/index.ts +410 -120
- package/src/modules/history/semantic.ts +189 -32
- package/src/modules/index.ts +1 -1
- package/src/modules/unknown-tool.ts +16 -0
- package/src/modules/workspace/disk-agreement.ts +97 -8
- package/src/modules/workspace/effects.ts +291 -36
- package/src/modules/workspace/index.ts +1469 -321
- package/src/modules/workspace/observe.ts +784 -41
- package/src/modules/workspace/reconcile.ts +619 -64
- package/src/modules/workspace/types.ts +28 -5
- package/src/modules/workspace/watcher.ts +154 -30
- package/src/prose-drafts.ts +481 -0
- package/src/prose-segments.ts +51 -8
- package/src/recovery/offline-branch.ts +4 -1
- package/src/safe-slice.ts +9 -1
- package/src/silent-heartbeat.ts +184 -59
- package/src/tool-args.ts +213 -0
- package/src/tool-image-ledger.ts +153 -34
- package/src/tool-presentation.ts +233 -42
- package/src/tool-result-guard.ts +7 -8
- package/src/tool-result-history.ts +124 -20
- package/src/tune-out/coordinator.ts +259 -65
- package/src/types/agent.ts +44 -24
- package/src/types/events.ts +25 -0
- package/src/types/framework.ts +38 -7
- package/src/types/inference-log.ts +1 -1
- package/src/types/module.ts +79 -14
- package/src/types/trace.ts +103 -8
- package/src/usage/usage-tracker.ts +32 -8
- package/dist/test/activation-request-sanitize.test.d.ts +0 -2
- package/dist/test/activation-request-sanitize.test.d.ts.map +0 -1
- package/dist/test/activation-request-sanitize.test.js +0 -89
- package/dist/test/activation-request-sanitize.test.js.map +0 -1
- package/dist/test/agent-cache-ttl.test.d.ts +0 -2
- package/dist/test/agent-cache-ttl.test.d.ts.map +0 -1
- package/dist/test/agent-cache-ttl.test.js +0 -41
- package/dist/test/agent-cache-ttl.test.js.map +0 -1
- package/dist/test/agent-runtime-settings.test.d.ts +0 -2
- package/dist/test/agent-runtime-settings.test.d.ts.map +0 -1
- package/dist/test/agent-runtime-settings.test.js +0 -1598
- package/dist/test/agent-runtime-settings.test.js.map +0 -1
- package/dist/test/api-admin-gate.test.d.ts +0 -2
- package/dist/test/api-admin-gate.test.d.ts.map +0 -1
- package/dist/test/api-admin-gate.test.js +0 -116
- package/dist/test/api-admin-gate.test.js.map +0 -1
- package/dist/test/assistant-persist-refusal.test.d.ts +0 -2
- package/dist/test/assistant-persist-refusal.test.d.ts.map +0 -1
- package/dist/test/assistant-persist-refusal.test.js +0 -63
- package/dist/test/assistant-persist-refusal.test.js.map +0 -1
- package/dist/test/batched-wake-locus.test.d.ts +0 -2
- package/dist/test/batched-wake-locus.test.d.ts.map +0 -1
- package/dist/test/batched-wake-locus.test.js +0 -166
- package/dist/test/batched-wake-locus.test.js.map +0 -1
- package/dist/test/busy-agent-scheduler.test.d.ts +0 -2
- package/dist/test/busy-agent-scheduler.test.d.ts.map +0 -1
- package/dist/test/busy-agent-scheduler.test.js +0 -92
- package/dist/test/busy-agent-scheduler.test.js.map +0 -1
- package/dist/test/channel-incoming-targeting.test.d.ts +0 -2
- package/dist/test/channel-incoming-targeting.test.d.ts.map +0 -1
- package/dist/test/channel-incoming-targeting.test.js +0 -81
- package/dist/test/channel-incoming-targeting.test.js.map +0 -1
- package/dist/test/channel-label-history.test.d.ts +0 -2
- package/dist/test/channel-label-history.test.d.ts.map +0 -1
- package/dist/test/channel-label-history.test.js +0 -424
- package/dist/test/channel-label-history.test.js.map +0 -1
- package/dist/test/channel-lifecycle-provenance.test.d.ts +0 -2
- package/dist/test/channel-lifecycle-provenance.test.d.ts.map +0 -1
- package/dist/test/channel-lifecycle-provenance.test.js +0 -47
- package/dist/test/channel-lifecycle-provenance.test.js.map +0 -1
- package/dist/test/channel-registry-routing.test.d.ts +0 -2
- package/dist/test/channel-registry-routing.test.d.ts.map +0 -1
- package/dist/test/channel-registry-routing.test.js +0 -446
- package/dist/test/channel-registry-routing.test.js.map +0 -1
- package/dist/test/channel-registry-typing.test.d.ts +0 -2
- package/dist/test/channel-registry-typing.test.d.ts.map +0 -1
- package/dist/test/channel-registry-typing.test.js +0 -91
- package/dist/test/channel-registry-typing.test.js.map +0 -1
- package/dist/test/channels-changed-respond-first.test.d.ts +0 -2
- package/dist/test/channels-changed-respond-first.test.d.ts.map +0 -1
- package/dist/test/channels-changed-respond-first.test.js +0 -74
- package/dist/test/channels-changed-respond-first.test.js.map +0 -1
- package/dist/test/checkpoint-attribution.test.d.ts +0 -2
- package/dist/test/checkpoint-attribution.test.d.ts.map +0 -1
- package/dist/test/checkpoint-attribution.test.js +0 -200
- package/dist/test/checkpoint-attribution.test.js.map +0 -1
- package/dist/test/code-execution.test.d.ts +0 -11
- package/dist/test/code-execution.test.d.ts.map +0 -1
- package/dist/test/code-execution.test.js +0 -1272
- package/dist/test/code-execution.test.js.map +0 -1
- package/dist/test/component-defaults.test.d.ts +0 -2
- package/dist/test/component-defaults.test.d.ts.map +0 -1
- package/dist/test/component-defaults.test.js +0 -54
- package/dist/test/component-defaults.test.js.map +0 -1
- package/dist/test/conversation-fork-injection-scoping.test.d.ts +0 -2
- package/dist/test/conversation-fork-injection-scoping.test.d.ts.map +0 -1
- package/dist/test/conversation-fork-injection-scoping.test.js +0 -200
- package/dist/test/conversation-fork-injection-scoping.test.js.map +0 -1
- package/dist/test/conversation-router.test.d.ts +0 -2
- package/dist/test/conversation-router.test.d.ts.map +0 -1
- package/dist/test/conversation-router.test.js +0 -174
- package/dist/test/conversation-router.test.js.map +0 -1
- package/dist/test/conversation-routing.test.d.ts +0 -7
- package/dist/test/conversation-routing.test.d.ts.map +0 -1
- package/dist/test/conversation-routing.test.js +0 -621
- package/dist/test/conversation-routing.test.js.map +0 -1
- package/dist/test/deferred-wake-integrity.test.d.ts +0 -29
- package/dist/test/deferred-wake-integrity.test.d.ts.map +0 -1
- package/dist/test/deferred-wake-integrity.test.js +0 -320
- package/dist/test/deferred-wake-integrity.test.js.map +0 -1
- package/dist/test/discord-awareness-outbox.test.d.ts +0 -2
- package/dist/test/discord-awareness-outbox.test.d.ts.map +0 -1
- package/dist/test/discord-awareness-outbox.test.js +0 -371
- package/dist/test/discord-awareness-outbox.test.js.map +0 -1
- package/dist/test/discord-history-delete-window.test.d.ts +0 -2
- package/dist/test/discord-history-delete-window.test.d.ts.map +0 -1
- package/dist/test/discord-history-delete-window.test.js +0 -81
- package/dist/test/discord-history-delete-window.test.js.map +0 -1
- package/dist/test/discord-history-sync.test.d.ts +0 -2
- package/dist/test/discord-history-sync.test.d.ts.map +0 -1
- package/dist/test/discord-history-sync.test.js +0 -56
- package/dist/test/discord-history-sync.test.js.map +0 -1
- package/dist/test/discord-typing-keepalive.test.d.ts +0 -2
- package/dist/test/discord-typing-keepalive.test.d.ts.map +0 -1
- package/dist/test/discord-typing-keepalive.test.js +0 -77
- package/dist/test/discord-typing-keepalive.test.js.map +0 -1
- package/dist/test/ephemeral-settle.test.d.ts +0 -2
- package/dist/test/ephemeral-settle.test.d.ts.map +0 -1
- package/dist/test/ephemeral-settle.test.js +0 -354
- package/dist/test/ephemeral-settle.test.js.map +0 -1
- package/dist/test/event-gate-passthrough.test.d.ts +0 -15
- package/dist/test/event-gate-passthrough.test.d.ts.map +0 -1
- package/dist/test/event-gate-passthrough.test.js +0 -289
- package/dist/test/event-gate-passthrough.test.js.map +0 -1
- package/dist/test/event-gate-policy-mutation.test.d.ts +0 -2
- package/dist/test/event-gate-policy-mutation.test.d.ts.map +0 -1
- package/dist/test/event-gate-policy-mutation.test.js +0 -137
- package/dist/test/event-gate-policy-mutation.test.js.map +0 -1
- package/dist/test/event-gate-rate-limit.test.d.ts +0 -2
- package/dist/test/event-gate-rate-limit.test.d.ts.map +0 -1
- package/dist/test/event-gate-rate-limit.test.js +0 -627
- package/dist/test/event-gate-rate-limit.test.js.map +0 -1
- package/dist/test/event-gate-script.test.d.ts +0 -2
- package/dist/test/event-gate-script.test.d.ts.map +0 -1
- package/dist/test/event-gate-script.test.js +0 -95
- package/dist/test/event-gate-script.test.js.map +0 -1
- package/dist/test/event-gate-selfwake.test.d.ts +0 -15
- package/dist/test/event-gate-selfwake.test.d.ts.map +0 -1
- package/dist/test/event-gate-selfwake.test.js +0 -125
- package/dist/test/event-gate-selfwake.test.js.map +0 -1
- package/dist/test/event-gate-tags.test.d.ts +0 -2
- package/dist/test/event-gate-tags.test.d.ts.map +0 -1
- package/dist/test/event-gate-tags.test.js +0 -76
- package/dist/test/event-gate-tags.test.js.map +0 -1
- package/dist/test/event-gate.test.d.ts +0 -2
- package/dist/test/event-gate.test.d.ts.map +0 -1
- package/dist/test/event-gate.test.js +0 -919
- package/dist/test/event-gate.test.js.map +0 -1
- package/dist/test/explicit-prose-routing.test.d.ts +0 -11
- package/dist/test/explicit-prose-routing.test.d.ts.map +0 -1
- package/dist/test/explicit-prose-routing.test.js +0 -1715
- package/dist/test/explicit-prose-routing.test.js.map +0 -1
- package/dist/test/framework.test.d.ts +0 -5
- package/dist/test/framework.test.d.ts.map +0 -1
- package/dist/test/framework.test.js +0 -1048
- package/dist/test/framework.test.js.map +0 -1
- package/dist/test/gather-context-timeout.test.d.ts +0 -2
- package/dist/test/gather-context-timeout.test.d.ts.map +0 -1
- package/dist/test/gather-context-timeout.test.js +0 -120
- package/dist/test/gather-context-timeout.test.js.map +0 -1
- package/dist/test/health-snapshot.test.d.ts +0 -2
- package/dist/test/health-snapshot.test.d.ts.map +0 -1
- package/dist/test/health-snapshot.test.js +0 -74
- package/dist/test/health-snapshot.test.js.map +0 -1
- package/dist/test/helpers/coalescing-fixture.d.ts +0 -74
- package/dist/test/helpers/coalescing-fixture.d.ts.map +0 -1
- package/dist/test/helpers/coalescing-fixture.js +0 -152
- package/dist/test/helpers/coalescing-fixture.js.map +0 -1
- package/dist/test/helpers/coalescing-kill-child.d.ts +0 -2
- package/dist/test/helpers/coalescing-kill-child.d.ts.map +0 -1
- package/dist/test/helpers/coalescing-kill-child.js +0 -24
- package/dist/test/helpers/coalescing-kill-child.js.map +0 -1
- package/dist/test/helpers/mock-membrane.d.ts +0 -53
- package/dist/test/helpers/mock-membrane.d.ts.map +0 -1
- package/dist/test/helpers/mock-membrane.js +0 -168
- package/dist/test/helpers/mock-membrane.js.map +0 -1
- package/dist/test/helpers/pytc-stop-rows.d.ts +0 -11
- package/dist/test/helpers/pytc-stop-rows.d.ts.map +0 -1
- package/dist/test/helpers/pytc-stop-rows.js +0 -143
- package/dist/test/helpers/pytc-stop-rows.js.map +0 -1
- package/dist/test/helpers/quiesce-crash-child.d.ts +0 -2
- package/dist/test/helpers/quiesce-crash-child.d.ts.map +0 -1
- package/dist/test/helpers/quiesce-crash-child.js +0 -156
- package/dist/test/helpers/quiesce-crash-child.js.map +0 -1
- package/dist/test/hide-then-turn.test.d.ts +0 -2
- package/dist/test/hide-then-turn.test.d.ts.map +0 -1
- package/dist/test/hide-then-turn.test.js +0 -101
- package/dist/test/hide-then-turn.test.js.map +0 -1
- package/dist/test/history-module-overview.test.d.ts +0 -2
- package/dist/test/history-module-overview.test.d.ts.map +0 -1
- package/dist/test/history-module-overview.test.js +0 -711
- package/dist/test/history-module-overview.test.js.map +0 -1
- package/dist/test/history-module-realstore.test.d.ts +0 -2
- package/dist/test/history-module-realstore.test.d.ts.map +0 -1
- package/dist/test/history-module-realstore.test.js +0 -363
- package/dist/test/history-module-realstore.test.js.map +0 -1
- package/dist/test/history-module-semantic.test.d.ts +0 -2
- package/dist/test/history-module-semantic.test.d.ts.map +0 -1
- package/dist/test/history-module-semantic.test.js +0 -213
- package/dist/test/history-module-semantic.test.js.map +0 -1
- package/dist/test/history-module-ux.test.d.ts +0 -2
- package/dist/test/history-module-ux.test.d.ts.map +0 -1
- package/dist/test/history-module-ux.test.js +0 -304
- package/dist/test/history-module-ux.test.js.map +0 -1
- package/dist/test/history-module.test.d.ts +0 -2
- package/dist/test/history-module.test.d.ts.map +0 -1
- package/dist/test/history-module.test.js +0 -619
- package/dist/test/history-module.test.js.map +0 -1
- package/dist/test/history-semantic-review-findings.test.d.ts +0 -2
- package/dist/test/history-semantic-review-findings.test.d.ts.map +0 -1
- package/dist/test/history-semantic-review-findings.test.js +0 -338
- package/dist/test/history-semantic-review-findings.test.js.map +0 -1
- package/dist/test/history-semantic-sync-converges.test.d.ts +0 -2
- package/dist/test/history-semantic-sync-converges.test.d.ts.map +0 -1
- package/dist/test/history-semantic-sync-converges.test.js +0 -109
- package/dist/test/history-semantic-sync-converges.test.js.map +0 -1
- package/dist/test/host-quiesce.test.d.ts +0 -2
- package/dist/test/host-quiesce.test.d.ts.map +0 -1
- package/dist/test/host-quiesce.test.js +0 -988
- package/dist/test/host-quiesce.test.js.map +0 -1
- package/dist/test/inference-exhaustion-rewind.test.d.ts +0 -2
- package/dist/test/inference-exhaustion-rewind.test.d.ts.map +0 -1
- package/dist/test/inference-exhaustion-rewind.test.js +0 -387
- package/dist/test/inference-exhaustion-rewind.test.js.map +0 -1
- package/dist/test/inference-failure-bounds.test.d.ts +0 -2
- package/dist/test/inference-failure-bounds.test.d.ts.map +0 -1
- package/dist/test/inference-failure-bounds.test.js +0 -1202
- package/dist/test/inference-failure-bounds.test.js.map +0 -1
- package/dist/test/inference-failure-observability.test.d.ts +0 -2
- package/dist/test/inference-failure-observability.test.d.ts.map +0 -1
- package/dist/test/inference-failure-observability.test.js +0 -84
- package/dist/test/inference-failure-observability.test.js.map +0 -1
- package/dist/test/journal-tool.test.d.ts +0 -2
- package/dist/test/journal-tool.test.d.ts.map +0 -1
- package/dist/test/journal-tool.test.js +0 -33
- package/dist/test/journal-tool.test.js.map +0 -1
- package/dist/test/kv-unified-open-flight-retry.test.d.ts +0 -2
- package/dist/test/kv-unified-open-flight-retry.test.d.ts.map +0 -1
- package/dist/test/kv-unified-open-flight-retry.test.js +0 -189
- package/dist/test/kv-unified-open-flight-retry.test.js.map +0 -1
- package/dist/test/kv-unified-wiring.test.d.ts +0 -2
- package/dist/test/kv-unified-wiring.test.d.ts.map +0 -1
- package/dist/test/kv-unified-wiring.test.js +0 -95
- package/dist/test/kv-unified-wiring.test.js.map +0 -1
- package/dist/test/late-events-after-stop.test.d.ts +0 -2
- package/dist/test/late-events-after-stop.test.d.ts.map +0 -1
- package/dist/test/late-events-after-stop.test.js +0 -122
- package/dist/test/late-events-after-stop.test.js.map +0 -1
- package/dist/test/liveness-watchdog.test.d.ts +0 -2
- package/dist/test/liveness-watchdog.test.d.ts.map +0 -1
- package/dist/test/liveness-watchdog.test.js +0 -94
- package/dist/test/liveness-watchdog.test.js.map +0 -1
- package/dist/test/machine-close-provenance.test.d.ts +0 -2
- package/dist/test/machine-close-provenance.test.d.ts.map +0 -1
- package/dist/test/machine-close-provenance.test.js +0 -116
- package/dist/test/machine-close-provenance.test.js.map +0 -1
- package/dist/test/maintenance-timer.test.d.ts +0 -2
- package/dist/test/maintenance-timer.test.d.ts.map +0 -1
- package/dist/test/maintenance-timer.test.js +0 -1827
- package/dist/test/maintenance-timer.test.js.map +0 -1
- package/dist/test/mcp-server-bin.test.d.ts +0 -2
- package/dist/test/mcp-server-bin.test.d.ts.map +0 -1
- package/dist/test/mcp-server-bin.test.js +0 -142
- package/dist/test/mcp-server-bin.test.js.map +0 -1
- package/dist/test/mcpl-access-provider.test.d.ts +0 -2
- package/dist/test/mcpl-access-provider.test.d.ts.map +0 -1
- package/dist/test/mcpl-access-provider.test.js +0 -20
- package/dist/test/mcpl-access-provider.test.js.map +0 -1
- package/dist/test/mcpl-awareness-barrier.test.d.ts +0 -2
- package/dist/test/mcpl-awareness-barrier.test.d.ts.map +0 -1
- package/dist/test/mcpl-awareness-barrier.test.js +0 -769
- package/dist/test/mcpl-awareness-barrier.test.js.map +0 -1
- package/dist/test/mcpl-capability-grant.test.d.ts +0 -10
- package/dist/test/mcpl-capability-grant.test.d.ts.map +0 -1
- package/dist/test/mcpl-capability-grant.test.js +0 -111
- package/dist/test/mcpl-capability-grant.test.js.map +0 -1
- package/dist/test/mcpl-capability-scoping.test.d.ts +0 -2
- package/dist/test/mcpl-capability-scoping.test.d.ts.map +0 -1
- package/dist/test/mcpl-capability-scoping.test.js +0 -266
- package/dist/test/mcpl-capability-scoping.test.js.map +0 -1
- package/dist/test/mcpl-child-env.test.d.ts +0 -2
- package/dist/test/mcpl-child-env.test.d.ts.map +0 -1
- package/dist/test/mcpl-child-env.test.js +0 -158
- package/dist/test/mcpl-child-env.test.js.map +0 -1
- package/dist/test/mcpl-coalesced-content-parity.test.d.ts +0 -2
- package/dist/test/mcpl-coalesced-content-parity.test.d.ts.map +0 -1
- package/dist/test/mcpl-coalesced-content-parity.test.js +0 -532
- package/dist/test/mcpl-coalesced-content-parity.test.js.map +0 -1
- package/dist/test/mcpl-coalescing.test.d.ts +0 -2
- package/dist/test/mcpl-coalescing.test.d.ts.map +0 -1
- package/dist/test/mcpl-coalescing.test.js +0 -1125
- package/dist/test/mcpl-coalescing.test.js.map +0 -1
- package/dist/test/mcpl-config-diagnostics.test.d.ts +0 -2
- package/dist/test/mcpl-config-diagnostics.test.d.ts.map +0 -1
- package/dist/test/mcpl-config-diagnostics.test.js +0 -452
- package/dist/test/mcpl-config-diagnostics.test.js.map +0 -1
- package/dist/test/mcpl-empty-content.test.d.ts +0 -2
- package/dist/test/mcpl-empty-content.test.d.ts.map +0 -1
- package/dist/test/mcpl-empty-content.test.js +0 -368
- package/dist/test/mcpl-empty-content.test.js.map +0 -1
- package/dist/test/mcpl-gate-roundtrip.test.d.ts +0 -2
- package/dist/test/mcpl-gate-roundtrip.test.d.ts.map +0 -1
- package/dist/test/mcpl-gate-roundtrip.test.js +0 -285
- package/dist/test/mcpl-gate-roundtrip.test.js.map +0 -1
- package/dist/test/mcpl-list-status.test.d.ts +0 -2
- package/dist/test/mcpl-list-status.test.d.ts.map +0 -1
- package/dist/test/mcpl-list-status.test.js +0 -82
- package/dist/test/mcpl-list-status.test.js.map +0 -1
- package/dist/test/mcpl-manifest-changed.test.d.ts +0 -2
- package/dist/test/mcpl-manifest-changed.test.d.ts.map +0 -1
- package/dist/test/mcpl-manifest-changed.test.js +0 -178
- package/dist/test/mcpl-manifest-changed.test.js.map +0 -1
- package/dist/test/mcpl-push-convert.test.d.ts +0 -2
- package/dist/test/mcpl-push-convert.test.d.ts.map +0 -1
- package/dist/test/mcpl-push-convert.test.js +0 -42
- package/dist/test/mcpl-push-convert.test.js.map +0 -1
- package/dist/test/mcpl-reconnect-events.test.d.ts +0 -2
- package/dist/test/mcpl-reconnect-events.test.d.ts.map +0 -1
- package/dist/test/mcpl-reconnect-events.test.js +0 -144
- package/dist/test/mcpl-reconnect-events.test.js.map +0 -1
- package/dist/test/mcpl-reconnect-reregistration.test.d.ts +0 -2
- package/dist/test/mcpl-reconnect-reregistration.test.d.ts.map +0 -1
- package/dist/test/mcpl-reconnect-reregistration.test.js +0 -238
- package/dist/test/mcpl-reconnect-reregistration.test.js.map +0 -1
- package/dist/test/mcpl-reference-fetcher.test.d.ts +0 -2
- package/dist/test/mcpl-reference-fetcher.test.d.ts.map +0 -1
- package/dist/test/mcpl-reference-fetcher.test.js +0 -427
- package/dist/test/mcpl-reference-fetcher.test.js.map +0 -1
- package/dist/test/mcpl-reference-fields.test.d.ts +0 -2
- package/dist/test/mcpl-reference-fields.test.d.ts.map +0 -1
- package/dist/test/mcpl-reference-fields.test.js +0 -149
- package/dist/test/mcpl-reference-fields.test.js.map +0 -1
- package/dist/test/mcpl-rejection-log-lines.test.d.ts +0 -2
- package/dist/test/mcpl-rejection-log-lines.test.d.ts.map +0 -1
- package/dist/test/mcpl-rejection-log-lines.test.js +0 -349
- package/dist/test/mcpl-rejection-log-lines.test.js.map +0 -1
- package/dist/test/mcpl-request-timeout.test.d.ts +0 -2
- package/dist/test/mcpl-request-timeout.test.d.ts.map +0 -1
- package/dist/test/mcpl-request-timeout.test.js +0 -138
- package/dist/test/mcpl-request-timeout.test.js.map +0 -1
- package/dist/test/mcpl-runtime-lifecycle.test.d.ts +0 -7
- package/dist/test/mcpl-runtime-lifecycle.test.d.ts.map +0 -1
- package/dist/test/mcpl-runtime-lifecycle.test.js +0 -142
- package/dist/test/mcpl-runtime-lifecycle.test.js.map +0 -1
- package/dist/test/mcpl-stderr-tail.test.d.ts +0 -2
- package/dist/test/mcpl-stderr-tail.test.d.ts.map +0 -1
- package/dist/test/mcpl-stderr-tail.test.js +0 -210
- package/dist/test/mcpl-stderr-tail.test.js.map +0 -1
- package/dist/test/mcpl-tool-class-listing.test.d.ts +0 -2
- package/dist/test/mcpl-tool-class-listing.test.d.ts.map +0 -1
- package/dist/test/mcpl-tool-class-listing.test.js +0 -147
- package/dist/test/mcpl-tool-class-listing.test.js.map +0 -1
- package/dist/test/mcpl-tool-classes.test.d.ts +0 -7
- package/dist/test/mcpl-tool-classes.test.d.ts.map +0 -1
- package/dist/test/mcpl-tool-classes.test.js +0 -80
- package/dist/test/mcpl-tool-classes.test.js.map +0 -1
- package/dist/test/mcpl-tool-lifecycle-e2e.test.d.ts +0 -2
- package/dist/test/mcpl-tool-lifecycle-e2e.test.d.ts.map +0 -1
- package/dist/test/mcpl-tool-lifecycle-e2e.test.js +0 -237
- package/dist/test/mcpl-tool-lifecycle-e2e.test.js.map +0 -1
- package/dist/test/mcpl-tool-lifecycle-emitter.test.d.ts +0 -11
- package/dist/test/mcpl-tool-lifecycle-emitter.test.d.ts.map +0 -1
- package/dist/test/mcpl-tool-lifecycle-emitter.test.js +0 -412
- package/dist/test/mcpl-tool-lifecycle-emitter.test.js.map +0 -1
- package/dist/test/mcpl-tool-lifecycle-script.test.d.ts +0 -2
- package/dist/test/mcpl-tool-lifecycle-script.test.d.ts.map +0 -1
- package/dist/test/mcpl-tool-lifecycle-script.test.js +0 -288
- package/dist/test/mcpl-tool-lifecycle-script.test.js.map +0 -1
- package/dist/test/mcpl-tool-lifecycle.test.d.ts +0 -11
- package/dist/test/mcpl-tool-lifecycle.test.d.ts.map +0 -1
- package/dist/test/mcpl-tool-lifecycle.test.js +0 -270
- package/dist/test/mcpl-tool-lifecycle.test.js.map +0 -1
- package/dist/test/mcpl-transport-close.test.d.ts +0 -2
- package/dist/test/mcpl-transport-close.test.d.ts.map +0 -1
- package/dist/test/mcpl-transport-close.test.js +0 -373
- package/dist/test/mcpl-transport-close.test.js.map +0 -1
- package/dist/test/mcpl-transport-spawn.test.d.ts +0 -2
- package/dist/test/mcpl-transport-spawn.test.d.ts.map +0 -1
- package/dist/test/mcpl-transport-spawn.test.js +0 -58
- package/dist/test/mcpl-transport-spawn.test.js.map +0 -1
- package/dist/test/mcpl-ws-transport.test.d.ts +0 -2
- package/dist/test/mcpl-ws-transport.test.d.ts.map +0 -1
- package/dist/test/mcpl-ws-transport.test.js +0 -259
- package/dist/test/mcpl-ws-transport.test.js.map +0 -1
- package/dist/test/module-context-integration.test.d.ts +0 -18
- package/dist/test/module-context-integration.test.d.ts.map +0 -1
- package/dist/test/module-context-integration.test.js +0 -181
- package/dist/test/module-context-integration.test.js.map +0 -1
- package/dist/test/offline-recovery-branch.test.d.ts +0 -2
- package/dist/test/offline-recovery-branch.test.d.ts.map +0 -1
- package/dist/test/offline-recovery-branch.test.js +0 -570
- package/dist/test/offline-recovery-branch.test.js.map +0 -1
- package/dist/test/operator-surgery.test.d.ts +0 -2
- package/dist/test/operator-surgery.test.d.ts.map +0 -1
- package/dist/test/operator-surgery.test.js +0 -595
- package/dist/test/operator-surgery.test.js.map +0 -1
- package/dist/test/ops-alert.test.d.ts +0 -2
- package/dist/test/ops-alert.test.d.ts.map +0 -1
- package/dist/test/ops-alert.test.js +0 -153
- package/dist/test/ops-alert.test.js.map +0 -1
- package/dist/test/overbudget-drain-breaker.test.d.ts +0 -2
- package/dist/test/overbudget-drain-breaker.test.d.ts.map +0 -1
- package/dist/test/overbudget-drain-breaker.test.js +0 -198
- package/dist/test/overbudget-drain-breaker.test.js.map +0 -1
- package/dist/test/pack-installs-alone.test.d.ts +0 -2
- package/dist/test/pack-installs-alone.test.d.ts.map +0 -1
- package/dist/test/pack-installs-alone.test.js +0 -284
- package/dist/test/pack-installs-alone.test.js.map +0 -1
- package/dist/test/per-agent-delivery.test.d.ts +0 -2
- package/dist/test/per-agent-delivery.test.d.ts.map +0 -1
- package/dist/test/per-agent-delivery.test.js +0 -108
- package/dist/test/per-agent-delivery.test.js.map +0 -1
- package/dist/test/physical-window-restart.test.d.ts +0 -16
- package/dist/test/physical-window-restart.test.d.ts.map +0 -1
- package/dist/test/physical-window-restart.test.js +0 -487
- package/dist/test/physical-window-restart.test.js.map +0 -1
- package/dist/test/placed-reaction-baseline.test.d.ts +0 -2
- package/dist/test/placed-reaction-baseline.test.d.ts.map +0 -1
- package/dist/test/placed-reaction-baseline.test.js +0 -312
- package/dist/test/placed-reaction-baseline.test.js.map +0 -1
- package/dist/test/present-while-acting.test.d.ts +0 -19
- package/dist/test/present-while-acting.test.d.ts.map +0 -1
- package/dist/test/present-while-acting.test.js +0 -1649
- package/dist/test/present-while-acting.test.js.map +0 -1
- package/dist/test/prose-segments.test.d.ts +0 -2
- package/dist/test/prose-segments.test.d.ts.map +0 -1
- package/dist/test/prose-segments.test.js +0 -52
- package/dist/test/prose-segments.test.js.map +0 -1
- package/dist/test/prose-stream-router.test.d.ts +0 -2
- package/dist/test/prose-stream-router.test.d.ts.map +0 -1
- package/dist/test/prose-stream-router.test.js +0 -171
- package/dist/test/prose-stream-router.test.js.map +0 -1
- package/dist/test/provider-acceleration-cooldown.test.d.ts +0 -2
- package/dist/test/provider-acceleration-cooldown.test.d.ts.map +0 -1
- package/dist/test/provider-acceleration-cooldown.test.js +0 -435
- package/dist/test/provider-acceleration-cooldown.test.js.map +0 -1
- package/dist/test/provider-waits.test.d.ts +0 -2
- package/dist/test/provider-waits.test.d.ts.map +0 -1
- package/dist/test/provider-waits.test.js +0 -2259
- package/dist/test/provider-waits.test.js.map +0 -1
- package/dist/test/puppet-tool-call.test.d.ts +0 -2
- package/dist/test/puppet-tool-call.test.d.ts.map +0 -1
- package/dist/test/puppet-tool-call.test.js +0 -226
- package/dist/test/puppet-tool-call.test.js.map +0 -1
- package/dist/test/puppet-turn-reservation.test.d.ts +0 -2
- package/dist/test/puppet-turn-reservation.test.d.ts.map +0 -1
- package/dist/test/puppet-turn-reservation.test.js +0 -139
- package/dist/test/puppet-turn-reservation.test.js.map +0 -1
- package/dist/test/reaction-baseline-platform.test.d.ts +0 -2
- package/dist/test/reaction-baseline-platform.test.d.ts.map +0 -1
- package/dist/test/reaction-baseline-platform.test.js +0 -124
- package/dist/test/reaction-baseline-platform.test.js.map +0 -1
- package/dist/test/record-journal.test.d.ts +0 -6
- package/dist/test/record-journal.test.d.ts.map +0 -1
- package/dist/test/record-journal.test.js +0 -269
- package/dist/test/record-journal.test.js.map +0 -1
- package/dist/test/refusal-reaction-baseline.test.d.ts +0 -2
- package/dist/test/refusal-reaction-baseline.test.d.ts.map +0 -1
- package/dist/test/refusal-reaction-baseline.test.js +0 -81
- package/dist/test/refusal-reaction-baseline.test.js.map +0 -1
- package/dist/test/refusal-rewind.test.d.ts +0 -2
- package/dist/test/refusal-rewind.test.d.ts.map +0 -1
- package/dist/test/refusal-rewind.test.js +0 -117
- package/dist/test/refusal-rewind.test.js.map +0 -1
- package/dist/test/refusal-single-call.test.d.ts +0 -2
- package/dist/test/refusal-single-call.test.d.ts.map +0 -1
- package/dist/test/refusal-single-call.test.js +0 -177
- package/dist/test/refusal-single-call.test.js.map +0 -1
- package/dist/test/release-bump.test.d.ts +0 -2
- package/dist/test/release-bump.test.d.ts.map +0 -1
- package/dist/test/release-bump.test.js +0 -248
- package/dist/test/release-bump.test.js.map +0 -1
- package/dist/test/release-changelog.test.d.ts +0 -2
- package/dist/test/release-changelog.test.d.ts.map +0 -1
- package/dist/test/release-changelog.test.js +0 -159
- package/dist/test/release-changelog.test.js.map +0 -1
- package/dist/test/release-holds.test.d.ts +0 -2
- package/dist/test/release-holds.test.d.ts.map +0 -1
- package/dist/test/release-holds.test.js +0 -456
- package/dist/test/release-holds.test.js.map +0 -1
- package/dist/test/same-round-think-policy.test.d.ts +0 -2
- package/dist/test/same-round-think-policy.test.d.ts.map +0 -1
- package/dist/test/same-round-think-policy.test.js +0 -853
- package/dist/test/same-round-think-policy.test.js.map +0 -1
- package/dist/test/save-recent-image.test.d.ts +0 -26
- package/dist/test/save-recent-image.test.d.ts.map +0 -1
- package/dist/test/save-recent-image.test.js +0 -974
- package/dist/test/save-recent-image.test.js.map +0 -1
- package/dist/test/shutdown-errors.test.d.ts +0 -2
- package/dist/test/shutdown-errors.test.d.ts.map +0 -1
- package/dist/test/shutdown-errors.test.js +0 -662
- package/dist/test/shutdown-errors.test.js.map +0 -1
- package/dist/test/silent-heartbeat-rows.test.d.ts +0 -2
- package/dist/test/silent-heartbeat-rows.test.d.ts.map +0 -1
- package/dist/test/silent-heartbeat-rows.test.js +0 -451
- package/dist/test/silent-heartbeat-rows.test.js.map +0 -1
- package/dist/test/silent-heartbeat.test.d.ts +0 -2
- package/dist/test/silent-heartbeat.test.d.ts.map +0 -1
- package/dist/test/silent-heartbeat.test.js +0 -165
- package/dist/test/silent-heartbeat.test.js.map +0 -1
- package/dist/test/state-scaling-e2e.test.d.ts +0 -22
- package/dist/test/state-scaling-e2e.test.d.ts.map +0 -1
- package/dist/test/state-scaling-e2e.test.js +0 -206
- package/dist/test/state-scaling-e2e.test.js.map +0 -1
- package/dist/test/state-scaling.test.d.ts +0 -12
- package/dist/test/state-scaling.test.d.ts.map +0 -1
- package/dist/test/state-scaling.test.js +0 -251
- package/dist/test/state-scaling.test.js.map +0 -1
- package/dist/test/stop-with-host-operations.test.d.ts +0 -20
- package/dist/test/stop-with-host-operations.test.d.ts.map +0 -1
- package/dist/test/stop-with-host-operations.test.js +0 -1174
- package/dist/test/stop-with-host-operations.test.js.map +0 -1
- package/dist/test/stop-with-work-in-flight.test.d.ts +0 -23
- package/dist/test/stop-with-work-in-flight.test.d.ts.map +0 -1
- package/dist/test/stop-with-work-in-flight.test.js +0 -784
- package/dist/test/stop-with-work-in-flight.test.js.map +0 -1
- package/dist/test/surgery-marks-receipt.test.d.ts +0 -2
- package/dist/test/surgery-marks-receipt.test.d.ts.map +0 -1
- package/dist/test/surgery-marks-receipt.test.js +0 -540
- package/dist/test/surgery-marks-receipt.test.js.map +0 -1
- package/dist/test/thinking-token-stamp.test.d.ts +0 -12
- package/dist/test/thinking-token-stamp.test.d.ts.map +0 -1
- package/dist/test/thinking-token-stamp.test.js +0 -129
- package/dist/test/thinking-token-stamp.test.js.map +0 -1
- package/dist/test/timezone.test.d.ts +0 -2
- package/dist/test/timezone.test.d.ts.map +0 -1
- package/dist/test/timezone.test.js +0 -18
- package/dist/test/timezone.test.js.map +0 -1
- package/dist/test/tool-batch-hook.test.d.ts +0 -8
- package/dist/test/tool-batch-hook.test.d.ts.map +0 -1
- package/dist/test/tool-batch-hook.test.js +0 -275
- package/dist/test/tool-batch-hook.test.js.map +0 -1
- package/dist/test/tool-policy.test.d.ts +0 -2
- package/dist/test/tool-policy.test.d.ts.map +0 -1
- package/dist/test/tool-policy.test.js +0 -51
- package/dist/test/tool-policy.test.js.map +0 -1
- package/dist/test/tool-presentation.test.d.ts +0 -2
- package/dist/test/tool-presentation.test.d.ts.map +0 -1
- package/dist/test/tool-presentation.test.js +0 -268
- package/dist/test/tool-presentation.test.js.map +0 -1
- package/dist/test/tool-result-content.test.d.ts +0 -2
- package/dist/test/tool-result-content.test.d.ts.map +0 -1
- package/dist/test/tool-result-content.test.js +0 -37
- package/dist/test/tool-result-content.test.js.map +0 -1
- package/dist/test/tool-result-guard.test.d.ts +0 -2
- package/dist/test/tool-result-guard.test.d.ts.map +0 -1
- package/dist/test/tool-result-guard.test.js +0 -3729
- package/dist/test/tool-result-guard.test.js.map +0 -1
- package/dist/test/tool-result-history.test.d.ts +0 -7
- package/dist/test/tool-result-history.test.d.ts.map +0 -1
- package/dist/test/tool-result-history.test.js +0 -156
- package/dist/test/tool-result-history.test.js.map +0 -1
- package/dist/test/tool-result-spill.test.d.ts +0 -13
- package/dist/test/tool-result-spill.test.d.ts.map +0 -1
- package/dist/test/tool-result-spill.test.js +0 -586
- package/dist/test/tool-result-spill.test.js.map +0 -1
- package/dist/test/tool-wrapper-prose-guard-integration.test.d.ts +0 -2
- package/dist/test/tool-wrapper-prose-guard-integration.test.d.ts.map +0 -1
- package/dist/test/tool-wrapper-prose-guard-integration.test.js +0 -485
- package/dist/test/tool-wrapper-prose-guard-integration.test.js.map +0 -1
- package/dist/test/tool-wrapper-prose-guard.test.d.ts +0 -2
- package/dist/test/tool-wrapper-prose-guard.test.d.ts.map +0 -1
- package/dist/test/tool-wrapper-prose-guard.test.js +0 -34
- package/dist/test/tool-wrapper-prose-guard.test.js.map +0 -1
- package/dist/test/tools-observe-parser-conformance.test.d.ts +0 -2
- package/dist/test/tools-observe-parser-conformance.test.d.ts.map +0 -1
- package/dist/test/tools-observe-parser-conformance.test.js +0 -129
- package/dist/test/tools-observe-parser-conformance.test.js.map +0 -1
- package/dist/test/trunk-channel-routing.test.d.ts +0 -19
- package/dist/test/trunk-channel-routing.test.d.ts.map +0 -1
- package/dist/test/trunk-channel-routing.test.js +0 -652
- package/dist/test/trunk-channel-routing.test.js.map +0 -1
- package/dist/test/tune-out-e2e.test.d.ts +0 -2
- package/dist/test/tune-out-e2e.test.d.ts.map +0 -1
- package/dist/test/tune-out-e2e.test.js +0 -142
- package/dist/test/tune-out-e2e.test.js.map +0 -1
- package/dist/test/tune-out-gate-composition.test.d.ts +0 -2
- package/dist/test/tune-out-gate-composition.test.d.ts.map +0 -1
- package/dist/test/tune-out-gate-composition.test.js +0 -221
- package/dist/test/tune-out-gate-composition.test.js.map +0 -1
- package/dist/test/tune-out-lifecycle.test.d.ts +0 -2
- package/dist/test/tune-out-lifecycle.test.d.ts.map +0 -1
- package/dist/test/tune-out-lifecycle.test.js +0 -121
- package/dist/test/tune-out-lifecycle.test.js.map +0 -1
- package/dist/test/turn-trigger-provenance.test.d.ts +0 -2
- package/dist/test/turn-trigger-provenance.test.d.ts.map +0 -1
- package/dist/test/turn-trigger-provenance.test.js +0 -137
- package/dist/test/turn-trigger-provenance.test.js.map +0 -1
- package/dist/test/unconvertible-tool-result.test.d.ts +0 -2
- package/dist/test/unconvertible-tool-result.test.d.ts.map +0 -1
- package/dist/test/unconvertible-tool-result.test.js +0 -358
- package/dist/test/unconvertible-tool-result.test.js.map +0 -1
- package/dist/test/unsent-compiles.test.d.ts +0 -2
- package/dist/test/unsent-compiles.test.d.ts.map +0 -1
- package/dist/test/unsent-compiles.test.js +0 -139
- package/dist/test/unsent-compiles.test.js.map +0 -1
- package/dist/test/usage-accounting.test.d.ts +0 -2
- package/dist/test/usage-accounting.test.d.ts.map +0 -1
- package/dist/test/usage-accounting.test.js +0 -13
- package/dist/test/usage-accounting.test.js.map +0 -1
- package/dist/test/usage-tracker.test.d.ts +0 -2
- package/dist/test/usage-tracker.test.d.ts.map +0 -1
- package/dist/test/usage-tracker.test.js +0 -129
- package/dist/test/usage-tracker.test.js.map +0 -1
- package/dist/test/utils-surface.test.d.ts +0 -2
- package/dist/test/utils-surface.test.d.ts.map +0 -1
- package/dist/test/utils-surface.test.js +0 -145
- package/dist/test/utils-surface.test.js.map +0 -1
- package/dist/test/workspace-branch-continuation.test.d.ts +0 -15
- package/dist/test/workspace-branch-continuation.test.d.ts.map +0 -1
- package/dist/test/workspace-branch-continuation.test.js +0 -183
- package/dist/test/workspace-branch-continuation.test.js.map +0 -1
- package/dist/test/workspace-materialize-freshness.test.d.ts +0 -16
- package/dist/test/workspace-materialize-freshness.test.d.ts.map +0 -1
- package/dist/test/workspace-materialize-freshness.test.js +0 -252
- package/dist/test/workspace-materialize-freshness.test.js.map +0 -1
- package/dist/test/workspace-path-containment.test.d.ts +0 -19
- package/dist/test/workspace-path-containment.test.d.ts.map +0 -1
- package/dist/test/workspace-path-containment.test.js +0 -91
- package/dist/test/workspace-path-containment.test.js.map +0 -1
- package/dist/test/workspace-read-file-from-disk.test.d.ts +0 -17
- package/dist/test/workspace-read-file-from-disk.test.d.ts.map +0 -1
- package/dist/test/workspace-read-file-from-disk.test.js +0 -174
- package/dist/test/workspace-read-file-from-disk.test.js.map +0 -1
- package/dist/test/workspace-read-image.test.d.ts +0 -2
- package/dist/test/workspace-read-image.test.d.ts.map +0 -1
- package/dist/test/workspace-read-image.test.js +0 -597
- package/dist/test/workspace-read-image.test.js.map +0 -1
- package/dist/test/workspace-read-text.test.d.ts +0 -2
- package/dist/test/workspace-read-text.test.d.ts.map +0 -1
- package/dist/test/workspace-read-text.test.js +0 -101
- package/dist/test/workspace-read-text.test.js.map +0 -1
- package/dist/test/workspace-restore-order.test.d.ts +0 -16
- package/dist/test/workspace-restore-order.test.d.ts.map +0 -1
- package/dist/test/workspace-restore-order.test.js +0 -140
- package/dist/test/workspace-restore-order.test.js.map +0 -1
- package/dist/test/workspace-three-way.test.d.ts +0 -12
- package/dist/test/workspace-three-way.test.d.ts.map +0 -1
- package/dist/test/workspace-three-way.test.js +0 -4094
- package/dist/test/workspace-three-way.test.js.map +0 -1
- package/dist/test/workspace-watcher.test.d.ts +0 -2
- package/dist/test/workspace-watcher.test.d.ts.map +0 -1
- package/dist/test/workspace-watcher.test.js +0 -281
- package/dist/test/workspace-watcher.test.js.map +0 -1
- package/dist/test/xml-round-persist.test.d.ts +0 -19
- package/dist/test/xml-round-persist.test.d.ts.map +0 -1
- package/dist/test/xml-round-persist.test.js +0 -235
- package/dist/test/xml-round-persist.test.js.map +0 -1
- package/dist/tsconfig.tsbuildinfo +0 -1
package/src/silent-heartbeat.ts
CHANGED
|
@@ -1,40 +1,70 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
2
|
+
* Request-only rows: user turns a request carries before a stored response
|
|
3
|
+
* that the store never holds, rendered again by every later compile.
|
|
3
4
|
*
|
|
4
|
-
*
|
|
5
|
-
* after whatever the window held before it — often the previous assistant
|
|
6
|
-
* message, since a suppressed tick leaves no delivery receipt behind. The
|
|
7
|
-
* wire formatter merges consecutive same-role messages, so without a turn
|
|
8
|
-
* between them the tick would read as an unprompted continuation of the
|
|
9
|
-
* earlier response and one assistant message would carry signed thinking
|
|
10
|
-
* from two separate responses (a provider 400 when it is the latest
|
|
11
|
-
* assistant message; see `Agent.addAssistantResponse`).
|
|
5
|
+
* Two kinds exist, and both are anchored to the response they prompted:
|
|
12
6
|
*
|
|
13
|
-
*
|
|
14
|
-
*
|
|
15
|
-
*
|
|
16
|
-
*
|
|
17
|
-
*
|
|
18
|
-
*
|
|
19
|
-
*
|
|
20
|
-
* message.
|
|
7
|
+
* - A silent heartbeat tick stores no prompt row (#216): its reply is written
|
|
8
|
+
* straight after whatever the window held before it — often the previous
|
|
9
|
+
* assistant message, since a suppressed tick leaves no delivery receipt
|
|
10
|
+
* behind. Every row a tick writes is stamped with `metadata.silentHeartbeat`,
|
|
11
|
+
* and a separator carrying the tick's instruction is rendered before the
|
|
12
|
+
* first of the tick's rows that survives compilation.
|
|
13
|
+
* - A compile that ends on the agent's own message gets a trailing
|
|
14
|
+
* `[Continue]` turn (some models reject a trailing assistant message). The
|
|
15
|
+
* reply it prompts is stored straight after that message, so the reply's
|
|
16
|
+
* rows are stamped `metadata.promptedBy` (`RequestOnlyPrompt`), and the turn
|
|
17
|
+
* is rendered before the first of them that survives. A reply follows the
|
|
18
|
+
* prompt when what it was sent ends on that `[Continue]`, or on the tool
|
|
19
|
+
* results of a reply that followed it (`toolLoopPrompt`): a stream start
|
|
20
|
+
* and each round of a stream alike. A reply sent anything else after the
|
|
21
|
+
* results (a message that arrived meanwhile) follows that, and carries no
|
|
22
|
+
* prompt.
|
|
23
|
+
*
|
|
24
|
+
* Without the row, the wire formatter merges consecutive same-role messages:
|
|
25
|
+
* the reply would read as an unprompted continuation of the earlier response,
|
|
26
|
+
* and one assistant message would carry signed thinking from two separate
|
|
27
|
+
* responses (a provider 400 when it is the latest assistant message; see
|
|
28
|
+
* `Agent.addAssistantResponse`). And the request that minted the reply held
|
|
29
|
+
* the row: a provider that binds signed thinking to the prefix it was minted
|
|
30
|
+
* under (context-manager #155) refuses that thinking once a later request
|
|
31
|
+
* drops it. Each row's text is read from the stamp (what the request that
|
|
32
|
+
* minted the reply rendered, so a later change to the constant changes no
|
|
33
|
+
* stored reply's prefix) and its position is a function of the stamped rows
|
|
34
|
+
* alone, so every compile renders it in the same place (the request that
|
|
35
|
+
* minted the reply ends on that same turn), which keeps the prompt-cache
|
|
36
|
+
* prefix and the binding stable — unlike a per-compile injection that
|
|
37
|
+
* re-anchors to the newest user message, or a system prompt that changes for
|
|
38
|
+
* one turn.
|
|
21
39
|
*
|
|
22
40
|
* Known limit: compiled messages carry no store provenance, so a stored row
|
|
23
41
|
* is recognised only by structural identity the provider made unique
|
|
24
|
-
* (tool_use ids, thinking signatures). A
|
|
25
|
-
*
|
|
26
|
-
*
|
|
27
|
-
*
|
|
28
|
-
*
|
|
29
|
-
*
|
|
30
|
-
*
|
|
31
|
-
* message's source rows.
|
|
42
|
+
* (tool_use ids, thinking signatures). A reply with neither — unsigned and
|
|
43
|
+
* tool-free — gets no row and still merges as before. Without signed thinking
|
|
44
|
+
* that merge carries no provider-rejection risk; it is only a misreading.
|
|
45
|
+
* Reply text is deliberately never used as identity: identical replies ("all
|
|
46
|
+
* quiet") would collide, and an ordinary reply with the same text could take
|
|
47
|
+
* another reply's row and rewrite cached history. Exact matching for every
|
|
48
|
+
* row would need the compile result to expose each message's source rows.
|
|
32
49
|
*/
|
|
33
50
|
import type { ContentBlock, NormalizedMessage } from '@animalabs/membrane';
|
|
34
51
|
|
|
35
|
-
/** Request-only separator
|
|
36
|
-
*
|
|
37
|
-
|
|
52
|
+
/** Request-only separator a silent tick's request ends on. It carries the
|
|
53
|
+
* tick's instruction, so the tick's own request reads it as its prompt, and
|
|
54
|
+
* every later compile renders it again before the tick's first surviving row.
|
|
55
|
+
* Constant on purpose: it carries no time or id. Each tick's rows record the
|
|
56
|
+
* text their request rendered (`SilentHeartbeatStamp.separator`), so changing
|
|
57
|
+
* this constant changes only ticks that open afterwards. */
|
|
58
|
+
export const SILENT_HEARTBEAT_SEPARATOR =
|
|
59
|
+
'[silent heartbeat] Scheduled private self-check. Review pending matters privately. ' +
|
|
60
|
+
'Do not narrate or publish plain prose; use an explicit send tool only if you deliberately choose to contact someone.';
|
|
61
|
+
|
|
62
|
+
/** The separator ticks rendered before their rows recorded its text: rows
|
|
63
|
+
* stamped without `separator` still render it, byte for byte. */
|
|
64
|
+
const LEGACY_SILENT_HEARTBEAT_SEPARATOR = '[heartbeat tick]';
|
|
65
|
+
|
|
66
|
+
/** Request-only turn a compile that ends on the agent's own message gets. */
|
|
67
|
+
export const CONTINUE_ROW = '[Continue]';
|
|
38
68
|
|
|
39
69
|
/** Identity of one authenticated silent heartbeat tick. */
|
|
40
70
|
export interface SilentHeartbeatTick {
|
|
@@ -50,20 +80,63 @@ export interface SilentHeartbeatTick {
|
|
|
50
80
|
* (tool_result rows are stored as `user`). */
|
|
51
81
|
export interface SilentHeartbeatStamp extends SilentHeartbeatTick {
|
|
52
82
|
agentName: string;
|
|
83
|
+
/** The separator text the tick's request rendered, which later compiles
|
|
84
|
+
* render again. Absent on rows stamped before it was recorded; they render
|
|
85
|
+
* the bare marker those requests carried. */
|
|
86
|
+
separator?: string;
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
/** One tick's key in an index or a rendered window: the server and its event
|
|
90
|
+
* id together, since two servers' events can share an id. */
|
|
91
|
+
export function tickKey(tick: SilentHeartbeatTick): string {
|
|
92
|
+
return JSON.stringify([tick.serverId, tick.eventId]);
|
|
53
93
|
}
|
|
54
94
|
|
|
55
95
|
/** The tick stamp on a stored row's metadata, if any. */
|
|
56
96
|
export function silentHeartbeatOf(metadata: unknown): SilentHeartbeatStamp | undefined {
|
|
57
97
|
const stamp = (metadata as { silentHeartbeat?: unknown } | undefined)?.silentHeartbeat;
|
|
58
98
|
if (!stamp || typeof stamp !== 'object') return undefined;
|
|
59
|
-
const { eventId, serverId, agentName } = stamp as Record<string, unknown>;
|
|
99
|
+
const { eventId, serverId, agentName, separator } = stamp as Record<string, unknown>;
|
|
60
100
|
return typeof eventId === 'string' && typeof serverId === 'string' && typeof agentName === 'string'
|
|
61
|
-
? { eventId, serverId, agentName }
|
|
101
|
+
? { eventId, serverId, agentName, ...(typeof separator === 'string' ? { separator } : {}) }
|
|
62
102
|
: undefined;
|
|
63
103
|
}
|
|
64
104
|
|
|
105
|
+
/** A request-only turn a request ended on before the agent's reply, as
|
|
106
|
+
* `metadata.promptedBy` on the rows of each reply that follows it: `turn`
|
|
107
|
+
* names the one prompt, and `text` is what the request rendered. */
|
|
108
|
+
export interface RequestOnlyPrompt {
|
|
109
|
+
turn: string;
|
|
110
|
+
text: string;
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
/** The stamps on a row a turn stores after a request-only turn
|
|
114
|
+
* (`silentHeartbeatOf`, `promptedByOf` read them back). A type alias, so a
|
|
115
|
+
* value fits `MessageMetadata`'s index signature without a cast, and a
|
|
116
|
+
* misspelled key fails to compile. */
|
|
117
|
+
export type RequestOnlyStamps = {
|
|
118
|
+
silentHeartbeat?: SilentHeartbeatStamp;
|
|
119
|
+
promptedBy?: RequestOnlyPrompt;
|
|
120
|
+
};
|
|
121
|
+
|
|
122
|
+
/** The request-only prompt a stored row replies to, if any. */
|
|
123
|
+
export function promptedByOf(metadata: unknown): RequestOnlyPrompt | undefined {
|
|
124
|
+
const prompt = (metadata as { promptedBy?: unknown } | undefined)?.promptedBy;
|
|
125
|
+
if (!prompt || typeof prompt !== 'object') return undefined;
|
|
126
|
+
const { turn, text } = prompt as Record<string, unknown>;
|
|
127
|
+
return typeof turn === 'string' && typeof text === 'string' ? { turn, text } : undefined;
|
|
128
|
+
}
|
|
129
|
+
|
|
65
130
|
export function silentHeartbeatSeparatorTurn(): NormalizedMessage {
|
|
66
|
-
return
|
|
131
|
+
return requestOnlyTurn(SILENT_HEARTBEAT_SEPARATOR);
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
export function continueTurn(): NormalizedMessage {
|
|
135
|
+
return requestOnlyTurn(CONTINUE_ROW);
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
function requestOnlyTurn(text: string): NormalizedMessage {
|
|
139
|
+
return { participant: 'user', content: [{ type: 'text', text }] };
|
|
67
140
|
}
|
|
68
141
|
|
|
69
142
|
/**
|
|
@@ -76,7 +149,7 @@ export function silentHeartbeatSeparatorTurn(): NormalizedMessage {
|
|
|
76
149
|
function identityKeys(content: ContentBlock[]): string[] {
|
|
77
150
|
const keys: string[] = [];
|
|
78
151
|
for (const block of content) {
|
|
79
|
-
if (block.type === 'tool_use' && typeof block.id === 'string' && block.id) keys.push(
|
|
152
|
+
if (block.type === 'tool_use' && typeof block.id === 'string' && block.id) keys.push(toolUseKey(block.id));
|
|
80
153
|
else if (block.type === 'thinking' && typeof block.signature === 'string' && block.signature) {
|
|
81
154
|
keys.push(`thinking:${block.signature}`);
|
|
82
155
|
} else if (block.type === 'redacted_thinking' && typeof block.data === 'string' && block.data) {
|
|
@@ -86,56 +159,108 @@ function identityKeys(content: ContentBlock[]): string[] {
|
|
|
86
159
|
return keys;
|
|
87
160
|
}
|
|
88
161
|
|
|
162
|
+
function toolUseKey(id: string): string {
|
|
163
|
+
return `tool_use:${id}`;
|
|
164
|
+
}
|
|
165
|
+
|
|
89
166
|
export interface StoredRowLike {
|
|
90
167
|
participant: string;
|
|
91
168
|
content: ContentBlock[];
|
|
92
169
|
metadata?: unknown;
|
|
93
170
|
}
|
|
94
171
|
|
|
95
|
-
export interface
|
|
96
|
-
/** Identity key of every assistant row this agent stored during a
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
172
|
+
export interface RequestOnlyRowIndex {
|
|
173
|
+
/** Identity key of every assistant row this agent stored during a silent
|
|
174
|
+
* tick → the tick (`tickKey`), and the separator text to render before
|
|
175
|
+
* its first surviving row. */
|
|
176
|
+
ticks: Map<string, { tick: string; text: string }>;
|
|
177
|
+
/** Identity key of every assistant row this agent stored in reply to a
|
|
178
|
+
* request-only prompt → that prompt. */
|
|
179
|
+
prompts: Map<string, RequestOnlyPrompt>;
|
|
100
180
|
}
|
|
101
181
|
|
|
102
|
-
/** Index the rows
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
182
|
+
/** Index the agent's own rows that follow request-only turns: the rows of its
|
|
183
|
+
* silent ticks, and the rows of each reply to a `[Continue]`. The two are
|
|
184
|
+
* independent, so a row can be both. Only stamped rows are keyed, so an
|
|
185
|
+
* agent's history walk costs a metadata read per row. */
|
|
186
|
+
export function indexRequestOnlyRows(stored: readonly StoredRowLike[], agentName: string): RequestOnlyRowIndex {
|
|
187
|
+
const ticks = new Map<string, { tick: string; text: string }>();
|
|
188
|
+
const prompts = new Map<string, RequestOnlyPrompt>();
|
|
106
189
|
for (const row of stored) {
|
|
107
|
-
const stamp = silentHeartbeatOf(row.metadata);
|
|
108
|
-
if (!stamp || stamp.agentName !== agentName) continue;
|
|
109
|
-
started.add(stamp.eventId);
|
|
110
190
|
if (row.participant !== agentName) continue;
|
|
111
|
-
|
|
191
|
+
const stamp = silentHeartbeatOf(row.metadata);
|
|
192
|
+
const ownTick = stamp !== undefined && stamp.agentName === agentName;
|
|
193
|
+
const prompt = promptedByOf(row.metadata);
|
|
194
|
+
if (!ownTick && !prompt) continue;
|
|
195
|
+
const keys = identityKeys(row.content);
|
|
196
|
+
if (ownTick) {
|
|
197
|
+
const tick = { tick: tickKey(stamp), text: stamp.separator ?? LEGACY_SILENT_HEARTBEAT_SEPARATOR };
|
|
198
|
+
for (const key of keys) ticks.set(key, tick);
|
|
199
|
+
}
|
|
200
|
+
if (prompt) for (const key of keys) prompts.set(key, prompt);
|
|
112
201
|
}
|
|
113
|
-
return {
|
|
202
|
+
return { ticks, prompts };
|
|
114
203
|
}
|
|
115
204
|
|
|
116
205
|
/**
|
|
117
|
-
*
|
|
118
|
-
*
|
|
119
|
-
*
|
|
206
|
+
* The prompt a reply continues when what it is sent ends on `last`: if
|
|
207
|
+
* `last` holds tool results, the prompt of the reply that called those tools
|
|
208
|
+
* (this reply continues that reply's tool loop); otherwise none. Read from
|
|
209
|
+
* the stored stamps, so it doesn't depend on anything held in memory. A
|
|
210
|
+
* request that ends on its own `[Continue]` mints a new prompt instead.
|
|
211
|
+
*/
|
|
212
|
+
export function toolLoopPrompt(
|
|
213
|
+
last: NormalizedMessage | undefined,
|
|
214
|
+
index: RequestOnlyRowIndex,
|
|
215
|
+
): RequestOnlyPrompt | undefined {
|
|
216
|
+
if (!last) return undefined;
|
|
217
|
+
for (const block of last.content) {
|
|
218
|
+
if (block.type !== 'tool_result') continue;
|
|
219
|
+
const prompt = index.prompts.get(toolUseKey(block.toolUseId));
|
|
220
|
+
if (prompt) return prompt;
|
|
221
|
+
}
|
|
222
|
+
return undefined;
|
|
223
|
+
}
|
|
224
|
+
|
|
225
|
+
export interface RenderedRequestOnlyRows {
|
|
226
|
+
messages: NormalizedMessage[];
|
|
227
|
+
/** The ticks (`tickKey`) whose separator this window renders. A tick none
|
|
228
|
+
* of whose rows survive compilation renders none. */
|
|
229
|
+
separatedTicks: Set<string>;
|
|
230
|
+
}
|
|
231
|
+
|
|
232
|
+
/**
|
|
233
|
+
* Insert the request-only turns into a compiled window, each immediately
|
|
234
|
+
* before the first of its rows that survives compilation (the first row when
|
|
235
|
+
* it is rendered, otherwise whichever later row a strategy kept): a tick's
|
|
236
|
+
* separator, and the prompt each reply to `[Continue]` followed, after any
|
|
237
|
+
* separator, as the reply's request had them. Rows folded into summaries
|
|
120
238
|
* simply do not match; ordinary messages pass through untouched.
|
|
121
239
|
*/
|
|
122
|
-
export function
|
|
240
|
+
export function renderRequestOnlyRows(
|
|
123
241
|
messages: NormalizedMessage[],
|
|
124
|
-
|
|
242
|
+
index: RequestOnlyRowIndex,
|
|
125
243
|
agentName: string,
|
|
126
|
-
):
|
|
127
|
-
|
|
128
|
-
const
|
|
244
|
+
): RenderedRequestOnlyRows {
|
|
245
|
+
const separatedTicks = new Set<string>();
|
|
246
|
+
const promptedTurns = new Set<string>();
|
|
247
|
+
if (index.ticks.size === 0 && index.prompts.size === 0) return { messages, separatedTicks };
|
|
129
248
|
const out: NormalizedMessage[] = [];
|
|
130
249
|
for (const message of messages) {
|
|
131
250
|
if (message.participant === agentName) {
|
|
132
|
-
const
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
251
|
+
const keys = identityKeys(message.content);
|
|
252
|
+
const tick = keys.map((key) => index.ticks.get(key)).find((t) => t !== undefined);
|
|
253
|
+
if (tick !== undefined && !separatedTicks.has(tick.tick)) {
|
|
254
|
+
separatedTicks.add(tick.tick);
|
|
255
|
+
out.push(requestOnlyTurn(tick.text));
|
|
256
|
+
}
|
|
257
|
+
const prompt = keys.map((key) => index.prompts.get(key)).find((p) => p !== undefined);
|
|
258
|
+
if (prompt !== undefined && !promptedTurns.has(prompt.turn)) {
|
|
259
|
+
promptedTurns.add(prompt.turn);
|
|
260
|
+
out.push(requestOnlyTurn(prompt.text));
|
|
136
261
|
}
|
|
137
262
|
}
|
|
138
263
|
out.push(message);
|
|
139
264
|
}
|
|
140
|
-
return out;
|
|
265
|
+
return { messages: out, separatedTicks };
|
|
141
266
|
}
|
package/src/tool-args.ts
ADDED
|
@@ -0,0 +1,213 @@
|
|
|
1
|
+
import type { ToolDefinition } from './types/index.js';
|
|
2
|
+
|
|
3
|
+
/** A run of 16 or more digits, which membrane's XML parser passes as text for
|
|
4
|
+
* a number or integer parameter: some such runs would lose precision as a
|
|
5
|
+
* JavaScript number, so membrane keeps every one as text, and so does this
|
|
6
|
+
* check. */
|
|
7
|
+
const LARGE_INTEGER_TEXT = /^\d{16,}$/;
|
|
8
|
+
|
|
9
|
+
/** The JSON kind of a value, as a schema's `type` names it. */
|
|
10
|
+
function kindOf(value: unknown): string {
|
|
11
|
+
if (Array.isArray(value)) return 'array';
|
|
12
|
+
if (value === null) return 'null';
|
|
13
|
+
return typeof value;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
/** A kind with its article, for a sentence. */
|
|
17
|
+
function withArticle(kind: string): string {
|
|
18
|
+
if (kind === 'null') return 'null';
|
|
19
|
+
return /^[aeiou]/.test(kind) ? `an ${kind}` : `a ${kind}`;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
/** The types JSON Schema names. A `type` naming anything else, such as
|
|
23
|
+
* `any`, is one the check can't read. */
|
|
24
|
+
const JSON_TYPES = new Set(['string', 'number', 'integer', 'boolean', 'object', 'array', 'null']);
|
|
25
|
+
|
|
26
|
+
/** The kinds a declaration's type admits, each once, or none when it declares
|
|
27
|
+
* none it can read. A type list naming anything JSON Schema doesn't have is
|
|
28
|
+
* one it can't read as a whole, as membrane reads it, rather than the names
|
|
29
|
+
* in it that it knows. OpenAPI's `nullable: true`, the form Gemini's dialect
|
|
30
|
+
* uses, admits `null` beside its type, as a type list naming `null` does. */
|
|
31
|
+
function admittedKinds(param: { type?: unknown; nullable?: unknown } | undefined): string[] {
|
|
32
|
+
const type = param?.type;
|
|
33
|
+
const types = Array.isArray(type) ? type : type === undefined ? [] : [type];
|
|
34
|
+
if (!types.every((t) => typeof t === 'string' && JSON_TYPES.has(t))) return [];
|
|
35
|
+
const kinds = new Set((types as string[]).map((t) => (t === 'integer' ? 'number' : t)));
|
|
36
|
+
if (kinds.size > 0 && param?.nullable === true) kinds.add('null');
|
|
37
|
+
return [...kinds];
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
/** Whether `null` is a value for a key so declared: where the declaration
|
|
41
|
+
* admits it (a type list naming it, or `nullable: true`), or declares no
|
|
42
|
+
* type at all. A type the check can't read says nothing about `null`, so
|
|
43
|
+
* there `null` is no value unless the declaration names it. */
|
|
44
|
+
function takesNull(param: { type?: unknown; nullable?: unknown } | undefined): boolean {
|
|
45
|
+
const type = param?.type;
|
|
46
|
+
if (type === undefined || param?.nullable === true) return true;
|
|
47
|
+
return Array.isArray(type) ? type.includes('null') : type === 'null';
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
/** A value as the call gave it, briefly: the first 80 characters of its JSON
|
|
51
|
+
* text, then an ellipsis when there are more, cut between characters rather
|
|
52
|
+
* than inside one. The whole value is serialized before the cut. */
|
|
53
|
+
function shown(value: unknown): string {
|
|
54
|
+
let text: string;
|
|
55
|
+
try {
|
|
56
|
+
text = JSON.stringify(value) ?? String(value);
|
|
57
|
+
} catch {
|
|
58
|
+
text = '(a value that could not be shown)';
|
|
59
|
+
}
|
|
60
|
+
let head = '';
|
|
61
|
+
let count = 0;
|
|
62
|
+
for (const char of text) {
|
|
63
|
+
if (count === 80) return `${head}…`;
|
|
64
|
+
head += char;
|
|
65
|
+
count++;
|
|
66
|
+
}
|
|
67
|
+
return head;
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
/** A list in prose: `a`, `a or b`, `a, b or c`. */
|
|
71
|
+
function oneOf(items: string[]): string {
|
|
72
|
+
return items.length <= 1 ? items.join('') : `${items.slice(0, -1).join(', ')} or ${items[items.length - 1]}`;
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
/** A list in prose: `a`, `a and b`, `a, b and c`. */
|
|
76
|
+
function allOf(items: string[]): string {
|
|
77
|
+
return items.length <= 1 ? items.join('') : `${items.slice(0, -1).join(', ')} and ${items[items.length - 1]}`;
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
/** At most this many keys a call gave that its schema doesn't declare are named. */
|
|
81
|
+
const UNDECLARED_SHOWN = 5;
|
|
82
|
+
|
|
83
|
+
/** An own property, so a key such as `constructor` isn't found on the prototype. */
|
|
84
|
+
function own(obj: Record<string, unknown>, key: string): unknown {
|
|
85
|
+
return Object.hasOwn(obj, key) ? obj[key] : undefined;
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
/** An object that isn't a list: a map of keys, as `properties` should be. */
|
|
89
|
+
function isMap(value: unknown): value is Record<string, unknown> {
|
|
90
|
+
return typeof value === 'object' && value !== null && !Array.isArray(value);
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
/** Every root keyword in JSON Schema's drafts 4 to 2020-12, besides
|
|
94
|
+
* `properties` and `required`, that can accept, require or name an object's
|
|
95
|
+
* keys, except the two read by declaresKeysPlainly (`additionalProperties`
|
|
96
|
+
* and `unevaluatedProperties`, which count when `true` or a schema object). The
|
|
97
|
+
* reading is cautious: a root with any of them names no key, whatever its
|
|
98
|
+
* subschemas hold, since naming a key the schema takes would mislead the
|
|
99
|
+
* agent more than a hint left out. So `not` is here too, since a negation
|
|
100
|
+
* can require a key (`not: {properties: {y: {type: 'string'}}}` refuses an
|
|
101
|
+
* object without a non-string `y`), and so is `if` with or without `then`
|
|
102
|
+
* and `else`. `then` and `else` act only beside `if`, and a keyword JSON
|
|
103
|
+
* Schema doesn't have declares nothing. */
|
|
104
|
+
const OTHER_KEY_DECLARERS = [
|
|
105
|
+
'allOf', 'anyOf', 'oneOf', 'not', 'if', '$ref', '$dynamicRef', '$recursiveRef',
|
|
106
|
+
'dependentSchemas', 'dependencies', 'dependentRequired', 'patternProperties',
|
|
107
|
+
'propertyNames', 'enum', 'const',
|
|
108
|
+
];
|
|
109
|
+
|
|
110
|
+
/** Whether a schema's root declares its keys only in `properties` and
|
|
111
|
+
* `required`, so that a key in neither isn't one of its parameters. A root
|
|
112
|
+
* with any keyword in OTHER_KEY_DECLARERS can declare keys another way. A
|
|
113
|
+
* schema object for `additionalProperties` or `unevaluatedProperties`, `{}`
|
|
114
|
+
* included, or `true`, which means the same there, says the root takes keys
|
|
115
|
+
* `properties` doesn't list, as a map's input does, so a key in neither list
|
|
116
|
+
* may be meant. `false` there says it takes none, so it names. Left out,
|
|
117
|
+
* the keyword is JSON Schema's default, which says nothing of what the
|
|
118
|
+
* author meant, and most schemas leave it out without welcoming other keys,
|
|
119
|
+
* so a root without it names them too. */
|
|
120
|
+
function declaresKeysPlainly(schema: Record<string, unknown>): boolean {
|
|
121
|
+
return !OTHER_KEY_DECLARERS.some((key) => Object.hasOwn(schema, key))
|
|
122
|
+
&& !takesOtherKeys(schema.additionalProperties)
|
|
123
|
+
&& !takesOtherKeys(schema.unevaluatedProperties);
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
function takesOtherKeys(value: unknown): boolean {
|
|
127
|
+
return value === true || isMap(value);
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
/**
|
|
131
|
+
* What's wrong with a call's input against its tool's declared inputSchema,
|
|
132
|
+
* checked shallowly: the input is an object, and each root `required` key has
|
|
133
|
+
* a value. With `values`, also each declared key's value: a type and an enum
|
|
134
|
+
* value its declaration admits. It isn't a JSON-Schema engine: nested shapes,
|
|
135
|
+
* unions and references are the handler's to check, as they always were.
|
|
136
|
+
* Every problem is reported at once, each naming the key, what the schema
|
|
137
|
+
* wants and what the call gave. An empty list means the call can go to its
|
|
138
|
+
* handler.
|
|
139
|
+
*
|
|
140
|
+
* - An absent input (`undefined` or `null`) gives no arguments: it's refused
|
|
141
|
+
* only for the keys the schema requires.
|
|
142
|
+
* - A required key given as `null` has no value, the same as one left out,
|
|
143
|
+
* unless its declaration admits `null` (a type list naming it, or
|
|
144
|
+
* `nullable: true`), or has no `type` at all: a key with no `type` takes
|
|
145
|
+
* `null` as a value, as it takes any other. One whose `type` the check
|
|
146
|
+
* can't read, such as Gemini's `STRING`, or a list naming one, takes
|
|
147
|
+
* `null` only where the declaration names it, and its values aren't
|
|
148
|
+
* checked against the type. An empty string is a value.
|
|
149
|
+
* - A schema whose `required` isn't a list requires nothing here, and a key
|
|
150
|
+
* it lists twice is reported once.
|
|
151
|
+
* - Where a required key is missing and the call gave keys the schema
|
|
152
|
+
* declares neither in its `properties` nor in its `required` list, those
|
|
153
|
+
* are named too, since a key sent under another name is one reason a
|
|
154
|
+
* required key goes missing. They're never refused for themselves. A schema
|
|
155
|
+
* whose root can declare keys another way names none
|
|
156
|
+
* (declaresKeysPlainly).
|
|
157
|
+
*
|
|
158
|
+
* A module tool's call is checked without `values`: a handler may take more
|
|
159
|
+
* than its schema can say on every provider, such as one name where a list
|
|
160
|
+
* is declared, and refusing that would refuse calls that work. The `utils`
|
|
161
|
+
* tool checks a utility's values too, as it always has. `field` names what
|
|
162
|
+
* the input is to the caller ("input" unless given).
|
|
163
|
+
*/
|
|
164
|
+
export function toolArgsProblems(
|
|
165
|
+
input: unknown,
|
|
166
|
+
schema: ToolDefinition['inputSchema'] | undefined,
|
|
167
|
+
options: { values?: boolean; field?: string } = {},
|
|
168
|
+
): string[] {
|
|
169
|
+
if (!schema) return [];
|
|
170
|
+
const absent = input === undefined || input === null;
|
|
171
|
+
if (!absent && (typeof input !== 'object' || Array.isArray(input))) {
|
|
172
|
+
return [`its ${options.field ?? 'input'} must be an object, and this call gave ${withArticle(kindOf(input))}`];
|
|
173
|
+
}
|
|
174
|
+
const obj = (absent ? {} : input) as Record<string, unknown>;
|
|
175
|
+
const properties = (isMap(schema.properties) ? schema.properties : {}) as Record<string, { type?: unknown; nullable?: unknown; enum?: unknown } | undefined>;
|
|
176
|
+
const declared = (key: string) => (Object.hasOwn(properties, key) ? properties[key] : undefined);
|
|
177
|
+
const problems: string[] = [];
|
|
178
|
+
const missing = new Set<string>();
|
|
179
|
+
const required: unknown[] = Array.isArray(schema.required) ? schema.required : [];
|
|
180
|
+
for (const key of required) {
|
|
181
|
+
if (typeof key !== 'string' || missing.has(key)) continue;
|
|
182
|
+
const value = own(obj, key);
|
|
183
|
+
const kinds = admittedKinds(declared(key));
|
|
184
|
+
if (value !== undefined && (value !== null || takesNull(declared(key)))) continue;
|
|
185
|
+
missing.add(key);
|
|
186
|
+
const wanted = kinds.length > 0 ? `"${key}" (${oneOf(kinds.map(withArticle))})` : `"${key}"`;
|
|
187
|
+
problems.push(`needs ${wanted}, and this call gave ${value === null ? 'null' : 'none'}`);
|
|
188
|
+
}
|
|
189
|
+
if (missing.size > 0 && declaresKeysPlainly(schema as Record<string, unknown>)) {
|
|
190
|
+
const undeclared = Object.keys(obj).filter((key) => !Object.hasOwn(properties, key) && !required.includes(key));
|
|
191
|
+
if (undeclared.length > 0) {
|
|
192
|
+
const named = undeclared.slice(0, UNDECLARED_SHOWN).map(shown);
|
|
193
|
+
if (undeclared.length > UNDECLARED_SHOWN) named.push(`${undeclared.length - UNDECLARED_SHOWN} more`);
|
|
194
|
+
problems.push(undeclared.length === 1 ? `${named[0]} isn't one of its parameters` : `${allOf(named)} aren't among its parameters`);
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
if (!options.values) return problems;
|
|
198
|
+
for (const [key, value] of Object.entries(obj)) {
|
|
199
|
+
const param = declared(key);
|
|
200
|
+
if (!param || value === undefined || missing.has(key)) continue;
|
|
201
|
+
const kinds = admittedKinds(param);
|
|
202
|
+
const kind = kindOf(value);
|
|
203
|
+
const largeInteger = kind === 'string' && kinds.includes('number') && LARGE_INTEGER_TEXT.test(value as string);
|
|
204
|
+
if (kinds.length > 0 && !kinds.includes(kind) && !largeInteger) {
|
|
205
|
+
problems.push(`"${key}" must be ${oneOf(kinds.map(withArticle))}, and this call gave ${withArticle(kind)}`);
|
|
206
|
+
continue;
|
|
207
|
+
}
|
|
208
|
+
if (Array.isArray(param.enum) && !param.enum.includes(value)) {
|
|
209
|
+
problems.push(`"${key}" must be one of ${oneOf(param.enum.map(shown))}, and this call gave ${shown(value)}`);
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
return problems;
|
|
213
|
+
}
|