@qjp88995/agent-runtime 0.0.0-stage → 0.1.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/dist/agent-extensions.d.ts +30 -0
- package/dist/agent-extensions.d.ts.map +1 -0
- package/dist/agent-extensions.js +4 -0
- package/dist/agent-extensions.js.map +1 -0
- package/dist/builtins/ask-outcome.d.ts +49 -0
- package/dist/builtins/ask-outcome.d.ts.map +1 -0
- package/dist/builtins/ask-outcome.js +128 -0
- package/dist/builtins/ask-outcome.js.map +1 -0
- package/dist/builtins/ask-schema.d.ts +110 -0
- package/dist/builtins/ask-schema.d.ts.map +1 -0
- package/dist/builtins/ask-schema.js +124 -0
- package/dist/builtins/ask-schema.js.map +1 -0
- package/dist/builtins/ask.service.d.ts +210 -0
- package/dist/builtins/ask.service.d.ts.map +1 -0
- package/dist/builtins/ask.service.js +373 -0
- package/dist/builtins/ask.service.js.map +1 -0
- package/dist/builtins/ask.tool.d.ts +49 -0
- package/dist/builtins/ask.tool.d.ts.map +1 -0
- package/dist/builtins/ask.tool.js +109 -0
- package/dist/builtins/ask.tool.js.map +1 -0
- package/dist/builtins/index.d.ts +8 -0
- package/dist/builtins/index.d.ts.map +1 -0
- package/dist/builtins/index.js +8 -0
- package/dist/builtins/index.js.map +1 -0
- package/dist/builtins/todo-schema.d.ts +90 -0
- package/dist/builtins/todo-schema.d.ts.map +1 -0
- package/dist/builtins/todo-schema.js +97 -0
- package/dist/builtins/todo-schema.js.map +1 -0
- package/dist/builtins/todo-settle.hook.d.ts +110 -0
- package/dist/builtins/todo-settle.hook.d.ts.map +1 -0
- package/dist/builtins/todo-settle.hook.js +174 -0
- package/dist/builtins/todo-settle.hook.js.map +1 -0
- package/dist/builtins/todo.tool.d.ts +59 -0
- package/dist/builtins/todo.tool.d.ts.map +1 -0
- package/dist/builtins/todo.tool.js +107 -0
- package/dist/builtins/todo.tool.js.map +1 -0
- package/dist/context/context-budget-tracker.d.ts +185 -0
- package/dist/context/context-budget-tracker.d.ts.map +1 -0
- package/dist/context/context-budget-tracker.js +400 -0
- package/dist/context/context-budget-tracker.js.map +1 -0
- package/dist/context/context-budget.d.ts +48 -0
- package/dist/context/context-budget.d.ts.map +1 -0
- package/dist/context/context-budget.js +89 -0
- package/dist/context/context-budget.js.map +1 -0
- package/dist/context/index.d.ts +3 -0
- package/dist/context/index.d.ts.map +1 -0
- package/dist/context/index.js +3 -0
- package/dist/context/index.js.map +1 -0
- package/dist/extensions/repeat-call.hook.d.ts +32 -0
- package/dist/extensions/repeat-call.hook.d.ts.map +1 -0
- package/dist/extensions/repeat-call.hook.js +54 -0
- package/dist/extensions/repeat-call.hook.js.map +1 -0
- package/dist/hooks/index.d.ts +3 -0
- package/dist/hooks/index.d.ts.map +1 -0
- package/dist/hooks/index.js +3 -0
- package/dist/hooks/index.js.map +1 -0
- package/dist/hooks/turn-hook.registry.d.ts +51 -0
- package/dist/hooks/turn-hook.registry.d.ts.map +1 -0
- package/dist/hooks/turn-hook.registry.js +233 -0
- package/dist/hooks/turn-hook.registry.js.map +1 -0
- package/dist/hooks/turn-hook.types.d.ts +179 -0
- package/dist/hooks/turn-hook.types.d.ts.map +1 -0
- package/dist/hooks/turn-hook.types.js +48 -0
- package/dist/hooks/turn-hook.types.js.map +1 -0
- package/dist/images/byte-cache.d.ts +24 -0
- package/dist/images/byte-cache.d.ts.map +1 -0
- package/dist/images/byte-cache.js +51 -0
- package/dist/images/byte-cache.js.map +1 -0
- package/dist/images/delivery.d.ts +115 -0
- package/dist/images/delivery.d.ts.map +1 -0
- package/dist/images/delivery.js +321 -0
- package/dist/images/delivery.js.map +1 -0
- package/dist/images/index.d.ts +5 -0
- package/dist/images/index.d.ts.map +1 -0
- package/dist/images/index.js +5 -0
- package/dist/images/index.js.map +1 -0
- package/dist/images/prompt.d.ts +151 -0
- package/dist/images/prompt.d.ts.map +1 -0
- package/dist/images/prompt.js +172 -0
- package/dist/images/prompt.js.map +1 -0
- package/dist/images/vendor-files.d.ts +93 -0
- package/dist/images/vendor-files.d.ts.map +1 -0
- package/dist/images/vendor-files.js +156 -0
- package/dist/images/vendor-files.js.map +1 -0
- package/dist/in-process/conversation-store.d.ts +64 -0
- package/dist/in-process/conversation-store.d.ts.map +1 -0
- package/dist/in-process/conversation-store.js +222 -0
- package/dist/in-process/conversation-store.js.map +1 -0
- package/dist/in-process/coordination.d.ts +54 -0
- package/dist/in-process/coordination.d.ts.map +1 -0
- package/dist/in-process/coordination.js +137 -0
- package/dist/in-process/coordination.js.map +1 -0
- package/dist/in-process/image-source.d.ts +15 -0
- package/dist/in-process/image-source.d.ts.map +1 -0
- package/dist/in-process/image-source.js +27 -0
- package/dist/in-process/image-source.js.map +1 -0
- package/dist/in-process/index.d.ts +36 -0
- package/dist/in-process/index.d.ts.map +1 -0
- package/dist/in-process/index.js +37 -0
- package/dist/in-process/index.js.map +1 -0
- package/dist/in-process/question-store.d.ts +28 -0
- package/dist/in-process/question-store.d.ts.map +1 -0
- package/dist/in-process/question-store.js +122 -0
- package/dist/in-process/question-store.js.map +1 -0
- package/dist/in-process/run-store.d.ts +36 -0
- package/dist/in-process/run-store.d.ts.map +1 -0
- package/dist/in-process/run-store.js +81 -0
- package/dist/in-process/run-store.js.map +1 -0
- package/dist/in-process/session-store.d.ts +33 -0
- package/dist/in-process/session-store.d.ts.map +1 -0
- package/dist/in-process/session-store.js +93 -0
- package/dist/in-process/session-store.js.map +1 -0
- package/dist/in-process/stream-bus.d.ts +52 -0
- package/dist/in-process/stream-bus.d.ts.map +1 -0
- package/dist/in-process/stream-bus.js +200 -0
- package/dist/in-process/stream-bus.js.map +1 -0
- package/dist/in-process/vendor-file-cache.d.ts +11 -0
- package/dist/in-process/vendor-file-cache.d.ts.map +1 -0
- package/dist/in-process/vendor-file-cache.js +47 -0
- package/dist/in-process/vendor-file-cache.js.map +1 -0
- package/dist/index.d.ts +21 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +21 -0
- package/dist/index.js.map +1 -0
- package/dist/loop/active-tick.registry.d.ts +31 -0
- package/dist/loop/active-tick.registry.d.ts.map +1 -0
- package/dist/loop/active-tick.registry.js +45 -0
- package/dist/loop/active-tick.registry.js.map +1 -0
- package/dist/loop/index.d.ts +6 -0
- package/dist/loop/index.d.ts.map +1 -0
- package/dist/loop/index.js +6 -0
- package/dist/loop/index.js.map +1 -0
- package/dist/loop/loop-driver.d.ts +127 -0
- package/dist/loop/loop-driver.d.ts.map +1 -0
- package/dist/loop/loop-driver.js +199 -0
- package/dist/loop/loop-driver.js.map +1 -0
- package/dist/loop/message-hub.d.ts +236 -0
- package/dist/loop/message-hub.d.ts.map +1 -0
- package/dist/loop/message-hub.js +439 -0
- package/dist/loop/message-hub.js.map +1 -0
- package/dist/loop/orphan-run.sweeper.d.ts +79 -0
- package/dist/loop/orphan-run.sweeper.d.ts.map +1 -0
- package/dist/loop/orphan-run.sweeper.js +145 -0
- package/dist/loop/orphan-run.sweeper.js.map +1 -0
- package/dist/loop/root-host.d.ts +51 -0
- package/dist/loop/root-host.d.ts.map +1 -0
- package/dist/loop/root-host.js +65 -0
- package/dist/loop/root-host.js.map +1 -0
- package/dist/ports/context-store.d.ts +69 -0
- package/dist/ports/context-store.d.ts.map +1 -0
- package/dist/ports/context-store.js +2 -0
- package/dist/ports/context-store.js.map +1 -0
- package/dist/ports/conversation-store.d.ts +144 -0
- package/dist/ports/conversation-store.d.ts.map +1 -0
- package/dist/ports/conversation-store.js +2 -0
- package/dist/ports/conversation-store.js.map +1 -0
- package/dist/ports/coordination.d.ts +76 -0
- package/dist/ports/coordination.d.ts.map +1 -0
- package/dist/ports/coordination.js +12 -0
- package/dist/ports/coordination.js.map +1 -0
- package/dist/ports/image-source.d.ts +26 -0
- package/dist/ports/image-source.d.ts.map +1 -0
- package/dist/ports/image-source.js +2 -0
- package/dist/ports/image-source.js.map +1 -0
- package/dist/ports/index.d.ts +11 -0
- package/dist/ports/index.d.ts.map +1 -0
- package/dist/ports/index.js +4 -0
- package/dist/ports/index.js.map +1 -0
- package/dist/ports/logger.d.ts +14 -0
- package/dist/ports/logger.d.ts.map +1 -0
- package/dist/ports/logger.js +23 -0
- package/dist/ports/logger.js.map +1 -0
- package/dist/ports/question-store.d.ts +91 -0
- package/dist/ports/question-store.d.ts.map +1 -0
- package/dist/ports/question-store.js +8 -0
- package/dist/ports/question-store.js.map +1 -0
- package/dist/ports/run-store.d.ts +66 -0
- package/dist/ports/run-store.d.ts.map +1 -0
- package/dist/ports/run-store.js +2 -0
- package/dist/ports/run-store.js.map +1 -0
- package/dist/ports/session-store.d.ts +72 -0
- package/dist/ports/session-store.d.ts.map +1 -0
- package/dist/ports/session-store.js +9 -0
- package/dist/ports/session-store.js.map +1 -0
- package/dist/ports/stream-bus.d.ts +52 -0
- package/dist/ports/stream-bus.d.ts.map +1 -0
- package/dist/ports/stream-bus.js +2 -0
- package/dist/ports/stream-bus.js.map +1 -0
- package/dist/ports/vendor-file-cache.d.ts +46 -0
- package/dist/ports/vendor-file-cache.d.ts.map +1 -0
- package/dist/ports/vendor-file-cache.js +2 -0
- package/dist/ports/vendor-file-cache.js.map +1 -0
- package/dist/schema/agent-event.d.ts +35 -0
- package/dist/schema/agent-event.d.ts.map +1 -0
- package/dist/schema/agent-event.js +46 -0
- package/dist/schema/agent-event.js.map +1 -0
- package/dist/schema/agent-run.d.ts +23 -0
- package/dist/schema/agent-run.d.ts.map +1 -0
- package/dist/schema/agent-run.js +37 -0
- package/dist/schema/agent-run.js.map +1 -0
- package/dist/schema/index.d.ts +4 -0
- package/dist/schema/index.d.ts.map +1 -0
- package/dist/schema/index.js +4 -0
- package/dist/schema/index.js.map +1 -0
- package/dist/schema/message-part.d.ts +73 -0
- package/dist/schema/message-part.d.ts.map +1 -0
- package/dist/schema/message-part.js +90 -0
- package/dist/schema/message-part.js.map +1 -0
- package/dist/subagent/delegate.tool.d.ts +145 -0
- package/dist/subagent/delegate.tool.d.ts.map +1 -0
- package/dist/subagent/delegate.tool.js +329 -0
- package/dist/subagent/delegate.tool.js.map +1 -0
- package/dist/subagent/index.d.ts +10 -0
- package/dist/subagent/index.d.ts.map +1 -0
- package/dist/subagent/index.js +10 -0
- package/dist/subagent/index.js.map +1 -0
- package/dist/subagent/milestone-body.d.ts +82 -0
- package/dist/subagent/milestone-body.d.ts.map +1 -0
- package/dist/subagent/milestone-body.js +112 -0
- package/dist/subagent/milestone-body.js.map +1 -0
- package/dist/subagent/output-scan.d.ts +14 -0
- package/dist/subagent/output-scan.d.ts.map +1 -0
- package/dist/subagent/output-scan.js +41 -0
- package/dist/subagent/output-scan.js.map +1 -0
- package/dist/subagent/registry-spawn-policy.d.ts +32 -0
- package/dist/subagent/registry-spawn-policy.d.ts.map +1 -0
- package/dist/subagent/registry-spawn-policy.js +48 -0
- package/dist/subagent/registry-spawn-policy.js.map +1 -0
- package/dist/subagent/roster-block.d.ts +45 -0
- package/dist/subagent/roster-block.d.ts.map +1 -0
- package/dist/subagent/roster-block.js +69 -0
- package/dist/subagent/roster-block.js.map +1 -0
- package/dist/subagent/situation-block.d.ts +16 -0
- package/dist/subagent/situation-block.d.ts.map +1 -0
- package/dist/subagent/situation-block.js +71 -0
- package/dist/subagent/situation-block.js.map +1 -0
- package/dist/subagent/spawn-guards.d.ts +32 -0
- package/dist/subagent/spawn-guards.d.ts.map +1 -0
- package/dist/subagent/spawn-guards.js +39 -0
- package/dist/subagent/spawn-guards.js.map +1 -0
- package/dist/subagent/subagent-registry.d.ts +150 -0
- package/dist/subagent/subagent-registry.d.ts.map +1 -0
- package/dist/subagent/subagent-registry.js +167 -0
- package/dist/subagent/subagent-registry.js.map +1 -0
- package/dist/subagent/subagent-sessions.d.ts +213 -0
- package/dist/subagent/subagent-sessions.d.ts.map +1 -0
- package/dist/subagent/subagent-sessions.js +295 -0
- package/dist/subagent/subagent-sessions.js.map +1 -0
- package/dist/testing/contracts.d.ts +37 -0
- package/dist/testing/contracts.d.ts.map +1 -0
- package/dist/testing/contracts.js +607 -0
- package/dist/testing/contracts.js.map +1 -0
- package/dist/testing/index.d.ts +5 -0
- package/dist/testing/index.d.ts.map +1 -0
- package/dist/testing/index.js +5 -0
- package/dist/testing/index.js.map +1 -0
- package/dist/testing/stub.d.ts +28 -0
- package/dist/testing/stub.d.ts.map +1 -0
- package/dist/testing/stub.js +3 -0
- package/dist/testing/stub.js.map +1 -0
- package/dist/tools/agent-tool.base.d.ts +186 -0
- package/dist/tools/agent-tool.base.d.ts.map +1 -0
- package/dist/tools/agent-tool.base.js +243 -0
- package/dist/tools/agent-tool.base.js.map +1 -0
- package/dist/tools/agent-tool.interface.d.ts +95 -0
- package/dist/tools/agent-tool.interface.d.ts.map +1 -0
- package/dist/tools/agent-tool.interface.js +2 -0
- package/dist/tools/agent-tool.interface.js.map +1 -0
- package/dist/tools/builtin-names.d.ts +18 -0
- package/dist/tools/builtin-names.d.ts.map +1 -0
- package/dist/tools/builtin-names.js +20 -0
- package/dist/tools/builtin-names.js.map +1 -0
- package/dist/tools/index.d.ts +9 -0
- package/dist/tools/index.d.ts.map +1 -0
- package/dist/tools/index.js +6 -0
- package/dist/tools/index.js.map +1 -0
- package/dist/tools/tool-definition.d.ts +18 -0
- package/dist/tools/tool-definition.d.ts.map +1 -0
- package/dist/tools/tool-definition.js +77 -0
- package/dist/tools/tool-definition.js.map +1 -0
- package/dist/tools/tool-meta.d.ts +55 -0
- package/dist/tools/tool-meta.d.ts.map +1 -0
- package/dist/tools/tool-meta.js +2 -0
- package/dist/tools/tool-meta.js.map +1 -0
- package/dist/tools/tool-registry.d.ts +190 -0
- package/dist/tools/tool-registry.d.ts.map +1 -0
- package/dist/tools/tool-registry.js +379 -0
- package/dist/tools/tool-registry.js.map +1 -0
- package/dist/tools/tool-result.d.ts +41 -0
- package/dist/tools/tool-result.d.ts.map +1 -0
- package/dist/tools/tool-result.js +19 -0
- package/dist/tools/tool-result.js.map +1 -0
- package/dist/tools/tool-wire.d.ts +24 -0
- package/dist/tools/tool-wire.d.ts.map +1 -0
- package/dist/tools/tool-wire.js +2 -0
- package/dist/tools/tool-wire.js.map +1 -0
- package/dist/turn/agent-runtime.d.ts +31 -0
- package/dist/turn/agent-runtime.d.ts.map +1 -0
- package/dist/turn/agent-runtime.js +30 -0
- package/dist/turn/agent-runtime.js.map +1 -0
- package/dist/turn/chunk-projection.d.ts +32 -0
- package/dist/turn/chunk-projection.d.ts.map +1 -0
- package/dist/turn/chunk-projection.js +62 -0
- package/dist/turn/chunk-projection.js.map +1 -0
- package/dist/turn/compaction.d.ts +48 -0
- package/dist/turn/compaction.d.ts.map +1 -0
- package/dist/turn/compaction.js +89 -0
- package/dist/turn/compaction.js.map +1 -0
- package/dist/turn/context-overflow.d.ts +11 -0
- package/dist/turn/context-overflow.d.ts.map +1 -0
- package/dist/turn/context-overflow.js +53 -0
- package/dist/turn/context-overflow.js.map +1 -0
- package/dist/turn/context-pressure.d.ts +100 -0
- package/dist/turn/context-pressure.d.ts.map +1 -0
- package/dist/turn/context-pressure.js +21 -0
- package/dist/turn/context-pressure.js.map +1 -0
- package/dist/turn/events-to-steps.d.ts +8 -0
- package/dist/turn/events-to-steps.d.ts.map +1 -0
- package/dist/turn/events-to-steps.js +64 -0
- package/dist/turn/events-to-steps.js.map +1 -0
- package/dist/turn/index.d.ts +17 -0
- package/dist/turn/index.d.ts.map +1 -0
- package/dist/turn/index.js +16 -0
- package/dist/turn/index.js.map +1 -0
- package/dist/turn/json-preview.d.ts +22 -0
- package/dist/turn/json-preview.d.ts.map +1 -0
- package/dist/turn/json-preview.js +34 -0
- package/dist/turn/json-preview.js.map +1 -0
- package/dist/turn/json-string-field.d.ts +30 -0
- package/dist/turn/json-string-field.d.ts.map +1 -0
- package/dist/turn/json-string-field.js +125 -0
- package/dist/turn/json-string-field.js.map +1 -0
- package/dist/turn/loop-reminder.d.ts +79 -0
- package/dist/turn/loop-reminder.d.ts.map +1 -0
- package/dist/turn/loop-reminder.js +0 -0
- package/dist/turn/loop-reminder.js.map +1 -0
- package/dist/turn/nul-safe.d.ts +21 -0
- package/dist/turn/nul-safe.d.ts.map +1 -0
- package/dist/turn/nul-safe.js +23 -0
- package/dist/turn/nul-safe.js.map +1 -0
- package/dist/turn/parts-from-events.d.ts +71 -0
- package/dist/turn/parts-from-events.d.ts.map +1 -0
- package/dist/turn/parts-from-events.js +217 -0
- package/dist/turn/parts-from-events.js.map +1 -0
- package/dist/turn/parts-to-model-messages.d.ts +158 -0
- package/dist/turn/parts-to-model-messages.d.ts.map +1 -0
- package/dist/turn/parts-to-model-messages.js +334 -0
- package/dist/turn/parts-to-model-messages.js.map +1 -0
- package/dist/turn/pending-work.d.ts +10 -0
- package/dist/turn/pending-work.d.ts.map +1 -0
- package/dist/turn/pending-work.js +14 -0
- package/dist/turn/pending-work.js.map +1 -0
- package/dist/turn/provider-error.d.ts +45 -0
- package/dist/turn/provider-error.d.ts.map +1 -0
- package/dist/turn/provider-error.js +154 -0
- package/dist/turn/provider-error.js.map +1 -0
- package/dist/turn/tool-input-preview.d.ts +94 -0
- package/dist/turn/tool-input-preview.d.ts.map +1 -0
- package/dist/turn/tool-input-preview.js +143 -0
- package/dist/turn/tool-input-preview.js.map +1 -0
- package/dist/turn/tool-input-progress.d.ts +47 -0
- package/dist/turn/tool-input-progress.d.ts.map +1 -0
- package/dist/turn/tool-input-progress.js +50 -0
- package/dist/turn/tool-input-progress.js.map +1 -0
- package/dist/turn/turn-envelope.d.ts +184 -0
- package/dist/turn/turn-envelope.d.ts.map +1 -0
- package/dist/turn/turn-envelope.js +2 -0
- package/dist/turn/turn-envelope.js.map +1 -0
- package/dist/turn/turn-journal.d.ts +49 -0
- package/dist/turn/turn-journal.d.ts.map +1 -0
- package/dist/turn/turn-journal.js +51 -0
- package/dist/turn/turn-journal.js.map +1 -0
- package/dist/turn/turn-run.d.ts +487 -0
- package/dist/turn/turn-run.d.ts.map +1 -0
- package/dist/turn/turn-run.js +1167 -0
- package/dist/turn/turn-run.js.map +1 -0
- package/dist/turn/usage.d.ts +27 -0
- package/dist/turn/usage.d.ts.map +1 -0
- package/dist/turn/usage.js +51 -0
- package/dist/turn/usage.js.map +1 -0
- package/package.json +55 -3
- package/src/agent-extensions.ts +33 -0
- package/src/builtins/ask-outcome.ts +168 -0
- package/src/builtins/ask-schema.ts +186 -0
- package/src/builtins/ask.service.ts +482 -0
- package/src/builtins/ask.tool.ts +138 -0
- package/src/builtins/index.ts +25 -0
- package/src/builtins/todo-schema.ts +108 -0
- package/src/builtins/todo-settle.hook.ts +221 -0
- package/src/builtins/todo.tool.ts +134 -0
- package/src/context/context-budget-tracker.ts +519 -0
- package/src/context/context-budget.ts +124 -0
- package/src/context/index.ts +17 -0
- package/src/extensions/repeat-call.hook.ts +77 -0
- package/src/hooks/index.ts +19 -0
- package/src/hooks/turn-hook.registry.ts +307 -0
- package/src/hooks/turn-hook.types.ts +210 -0
- package/src/images/byte-cache.ts +61 -0
- package/src/images/delivery.ts +508 -0
- package/src/images/index.ts +35 -0
- package/src/images/prompt.ts +289 -0
- package/src/images/vendor-files.ts +235 -0
- package/src/in-process/conversation-store.ts +304 -0
- package/src/in-process/coordination.ts +177 -0
- package/src/in-process/image-source.ts +29 -0
- package/src/in-process/index.ts +52 -0
- package/src/in-process/question-store.ts +155 -0
- package/src/in-process/run-store.ts +115 -0
- package/src/in-process/session-store.ts +118 -0
- package/src/in-process/stream-bus.ts +244 -0
- package/src/in-process/vendor-file-cache.ts +67 -0
- package/src/index.ts +28 -0
- package/src/loop/active-tick.registry.ts +49 -0
- package/src/loop/index.ts +25 -0
- package/src/loop/loop-driver.ts +275 -0
- package/src/loop/message-hub.ts +532 -0
- package/src/loop/orphan-run.sweeper.ts +204 -0
- package/src/loop/root-host.ts +119 -0
- package/src/ports/context-store.ts +71 -0
- package/src/ports/conversation-store.ts +165 -0
- package/src/ports/coordination.ts +81 -0
- package/src/ports/image-source.ts +26 -0
- package/src/ports/index.ts +56 -0
- package/src/ports/logger.ts +34 -0
- package/src/ports/question-store.ts +117 -0
- package/src/ports/run-store.ts +69 -0
- package/src/ports/session-store.ts +80 -0
- package/src/ports/stream-bus.ts +59 -0
- package/src/ports/vendor-file-cache.ts +54 -0
- package/src/schema/agent-event.ts +69 -0
- package/src/schema/agent-run.ts +44 -0
- package/src/schema/index.ts +25 -0
- package/src/schema/message-part.ts +100 -0
- package/src/subagent/delegate.tool.ts +476 -0
- package/src/subagent/index.ts +63 -0
- package/src/subagent/milestone-body.ts +144 -0
- package/src/subagent/output-scan.ts +56 -0
- package/src/subagent/registry-spawn-policy.ts +85 -0
- package/src/subagent/roster-block.ts +103 -0
- package/src/subagent/situation-block.ts +83 -0
- package/src/subagent/spawn-guards.ts +54 -0
- package/src/subagent/subagent-registry.ts +283 -0
- package/src/subagent/subagent-sessions.ts +496 -0
- package/src/testing/contracts.ts +882 -0
- package/src/testing/index.ts +14 -0
- package/src/testing/stub.ts +28 -0
- package/src/tools/agent-tool.base.ts +361 -0
- package/src/tools/agent-tool.interface.ts +101 -0
- package/src/tools/builtin-names.ts +26 -0
- package/src/tools/index.ts +39 -0
- package/src/tools/tool-definition.ts +93 -0
- package/src/tools/tool-meta.ts +60 -0
- package/src/tools/tool-registry.ts +513 -0
- package/src/tools/tool-result.ts +45 -0
- package/src/tools/tool-wire.ts +24 -0
- package/src/turn/agent-runtime.ts +43 -0
- package/src/turn/chunk-projection.ts +81 -0
- package/src/turn/compaction.ts +103 -0
- package/src/turn/context-overflow.ts +54 -0
- package/src/turn/context-pressure.ts +114 -0
- package/src/turn/events-to-steps.ts +73 -0
- package/src/turn/index.ts +71 -0
- package/src/turn/json-preview.ts +36 -0
- package/src/turn/json-string-field.ts +134 -0
- package/src/turn/loop-reminder.ts +0 -0
- package/src/turn/nul-safe.ts +22 -0
- package/src/turn/parts-from-events.ts +248 -0
- package/src/turn/parts-to-model-messages.ts +428 -0
- package/src/turn/pending-work.ts +14 -0
- package/src/turn/provider-error.ts +160 -0
- package/src/turn/tool-input-preview.ts +223 -0
- package/src/turn/tool-input-progress.ts +76 -0
- package/src/turn/turn-envelope.ts +185 -0
- package/src/turn/turn-journal.ts +102 -0
- package/src/turn/turn-run.ts +1479 -0
- package/src/turn/usage.ts +56 -0
- package/README.md +0 -3
|
@@ -0,0 +1,295 @@
|
|
|
1
|
+
import { silentLogger, } from '../ports/logger.js';
|
|
2
|
+
import { DELEGATE_TOOL_NAME } from '../tools/builtin-names.js';
|
|
3
|
+
import { buildMilestoneBody, isFailedTerminal, normalizeMilestoneStatus, } from './milestone-body.js';
|
|
4
|
+
import { scanSubagentOutput } from './output-scan.js';
|
|
5
|
+
import { MAX_LIVE_SUBS_PER_TREE } from './spawn-guards.js';
|
|
6
|
+
/** 兜底扫描的缺省「空闲多久才算嫌疑」。 */
|
|
7
|
+
export const SUBAGENT_SWEEP_IDLE_MS = 60_000;
|
|
8
|
+
/**
|
|
9
|
+
* 子会话的生命周期:派生(受理段,**不 await 子跑完**)、追加任务、取回执、收尾回投、
|
|
10
|
+
* 兜底扫描。搬自 agent-base `SubagentSessionService`,会话行走 `SessionStore`、消息走
|
|
11
|
+
* `MessageHub`,派生判据交给宿主的 `SpawnPolicy`。
|
|
12
|
+
*
|
|
13
|
+
* 子会话此后由 loop 独立驱动(inbox + 唤醒),**同步与异步是同一条实现**:子会话都是
|
|
14
|
+
* 独立持久跑的,区别只在父等不等它(`Delegate`)。
|
|
15
|
+
*
|
|
16
|
+
* 宿主要接两处:`LoopHost.afterTick` 里调 `finalizeIfIdle`,启动时调一次 `sweepStale`。
|
|
17
|
+
*/
|
|
18
|
+
export class SubagentSessions {
|
|
19
|
+
deps;
|
|
20
|
+
logger;
|
|
21
|
+
maxLivePerTree;
|
|
22
|
+
constructor(deps) {
|
|
23
|
+
this.deps = deps;
|
|
24
|
+
this.logger = (deps.logger ?? silentLogger)('SubagentSessions');
|
|
25
|
+
this.maxLivePerTree = deps.maxLivePerTree ?? MAX_LIVE_SUBS_PER_TREE;
|
|
26
|
+
}
|
|
27
|
+
/** 新建:问宿主 → 占名额 → 建会话 → 宿主补料 → 投任务 → 唤醒,即返 handle。 */
|
|
28
|
+
async spawn(req) {
|
|
29
|
+
const check = await this.deps.policy.checkSpawn(req);
|
|
30
|
+
if (!check.ok)
|
|
31
|
+
return check;
|
|
32
|
+
// 先占名额,占不到不建会话(避免建了又要回滚)。
|
|
33
|
+
const took = await this.deps.treeBudget.tryIncr(req.rootSessionId, this.maxLivePerTree);
|
|
34
|
+
if (!took)
|
|
35
|
+
return { ok: false, reason: 'tree_full' };
|
|
36
|
+
try {
|
|
37
|
+
const child = await this.deps.sessions.createSubSession({
|
|
38
|
+
rootSessionId: req.rootSessionId,
|
|
39
|
+
parentRunId: req.parentRunId,
|
|
40
|
+
subagentName: req.agentName,
|
|
41
|
+
userId: req.userId,
|
|
42
|
+
title: req.title,
|
|
43
|
+
metadata: check.metadata ?? req.sessionMetadata,
|
|
44
|
+
...(check.attrs ? { attrs: check.attrs } : {}),
|
|
45
|
+
});
|
|
46
|
+
const created = await this.deps.policy.onSubagentCreated?.({
|
|
47
|
+
...req,
|
|
48
|
+
childSessionId: child.id,
|
|
49
|
+
});
|
|
50
|
+
await this.deliver(child.id, req.prompt, req.userId);
|
|
51
|
+
const notes = created?.notes ?? [];
|
|
52
|
+
return notes.length > 0
|
|
53
|
+
? { ok: true, childSessionId: child.id, notes }
|
|
54
|
+
: { ok: true, childSessionId: child.id };
|
|
55
|
+
}
|
|
56
|
+
catch (err) {
|
|
57
|
+
// 建会话 / 投递失败:把刚占的名额还回去,不留泄漏。
|
|
58
|
+
await this.deps.treeBudget.decr(req.rootSessionId).catch(() => undefined);
|
|
59
|
+
throw err;
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* 追加任务前的目标校验——**必须先于投递**,且与投递分两步:同步等待的租约要夹在
|
|
64
|
+
* 「校验通过」与「投递」之间(见 `Delegate` 的追加任务那段)。
|
|
65
|
+
*
|
|
66
|
+
* 归属判据是「**直接子**」(子的 `parentRunId` 所属会话 == 当前会话),不是「同一棵
|
|
67
|
+
* 树」:孙辈的 handle 本就不会出现在父的上下文里,能续到孙只可能是编了个 id 或从子的
|
|
68
|
+
* 产出正文里抄了一个。
|
|
69
|
+
*/
|
|
70
|
+
async resolveFollowUpTarget(input) {
|
|
71
|
+
const child = await this.deps.sessions.getSession(input.childSessionId);
|
|
72
|
+
if (!child || child.kind !== 'subagent') {
|
|
73
|
+
return { ok: false, reason: 'not_found' };
|
|
74
|
+
}
|
|
75
|
+
const owner = child.parentRunId
|
|
76
|
+
? await this.deps.runs.getSessionId(child.parentRunId)
|
|
77
|
+
: null;
|
|
78
|
+
if (owner !== input.parentSessionId) {
|
|
79
|
+
return { ok: false, reason: 'not_own_child' };
|
|
80
|
+
}
|
|
81
|
+
return { ok: true, cursorBefore: child.lastMilestoneSeq };
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* 把追加任务投进子会话并唤醒它。与派生尾段**逐字相同**的通道,子那边零特判——「子
|
|
85
|
+
* 记得自己写过什么」不是这里做的,是会话本身没被丢弃。子此刻仍在跑就是软插话。
|
|
86
|
+
*
|
|
87
|
+
* **不占名额**:名额记的是「同时有几个**新派生**的子」,与「存活 = 游标为 null」同一个口径。
|
|
88
|
+
*/
|
|
89
|
+
async deliverFollowUp(input) {
|
|
90
|
+
await this.deliver(input.childSessionId, input.prompt, input.userId);
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* 子已到达 idle 终态后,取它自 `since` 以来的回执。**与收尾回投 inbox 的那份同源**
|
|
94
|
+
* (同一个取数 + 同一套中和)——换个 `run_in_background` 值就换一份结论,是没法排查
|
|
95
|
+
* 的那类 bug。追加任务传发起前的游标,否则父会连同上一轮全文再收一遍。
|
|
96
|
+
*/
|
|
97
|
+
async buildResult(childSessionId, since = null) {
|
|
98
|
+
const out = await this.collectOutput(childSessionId, since);
|
|
99
|
+
return this.resultOf(out);
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* 里程碑游标是否已越过 `cursor`(=子在这次等待期间到达过一次 idle 终态)。null 即
|
|
103
|
+
* 「首次 settle 了没有」。**追加任务不能沿用「非 null 即完成」**——那个条件在追加发起的
|
|
104
|
+
* 一瞬间就成立(上一轮推进过),父会立刻拿着上一轮的结果返回。
|
|
105
|
+
*/
|
|
106
|
+
async hasAdvancedPast(childSessionId, cursor) {
|
|
107
|
+
const child = await this.deps.sessions.getSession(childSessionId);
|
|
108
|
+
const now = child?.lastMilestoneSeq ?? null;
|
|
109
|
+
if (now === null)
|
|
110
|
+
return false;
|
|
111
|
+
return cursor === null || now > cursor;
|
|
112
|
+
}
|
|
113
|
+
/** loop 设置 tick 时要的子会话信息(深度、钉住的子 Agent 名……)。会话不存在返回 null。 */
|
|
114
|
+
async tickInfo(sessionId) {
|
|
115
|
+
const session = await this.deps.sessions.getSession(sessionId);
|
|
116
|
+
if (!session)
|
|
117
|
+
return null;
|
|
118
|
+
if (session.kind !== 'subagent') {
|
|
119
|
+
return {
|
|
120
|
+
kind: session.kind,
|
|
121
|
+
depth: 0,
|
|
122
|
+
parentRunId: null,
|
|
123
|
+
agentName: null,
|
|
124
|
+
title: session.title,
|
|
125
|
+
};
|
|
126
|
+
}
|
|
127
|
+
const depth = session.parentRunId
|
|
128
|
+
? (await this.deps.runs.getDepth(session.parentRunId)) + 1
|
|
129
|
+
: 0;
|
|
130
|
+
return {
|
|
131
|
+
kind: 'subagent',
|
|
132
|
+
depth,
|
|
133
|
+
parentRunId: session.parentRunId,
|
|
134
|
+
agentName: session.subagentName,
|
|
135
|
+
title: session.title,
|
|
136
|
+
};
|
|
137
|
+
}
|
|
138
|
+
/**
|
|
139
|
+
* 子会话空转终态 → 把新产出中和后作为里程碑回投父 inbox 并唤醒父。
|
|
140
|
+
*
|
|
141
|
+
* loop 在每个 tick 收尾(锁已释放、re-wake 之前)对每个会话**无条件**调(`LoopHost.afterTick`),
|
|
142
|
+
* 这里自查:非子会话直接返回。
|
|
143
|
+
*
|
|
144
|
+
* **只还一次名额**:「存活」= 从派生到首次 idle 终态,判据是游标为 null。被追加任务
|
|
145
|
+
* 续跑后再次 idle 只回投新产出、不再还。
|
|
146
|
+
*
|
|
147
|
+
* **并发安全**:两次抢锁成功的唤醒可能并发进来、读到同一个旧游标。所有副作用都收在一次
|
|
148
|
+
* 乐观 CAS(`SessionStore.advanceMilestone`)之后:先按**旧**游标取产出,再把游标推进到
|
|
149
|
+
* 产出的最大 seq(无产出从序列取号);只有 CAS 成功的那一个回投 + 唤醒 + 还名额。
|
|
150
|
+
*
|
|
151
|
+
* 全程不抛:失败只记日志,兜底扫描是后备。
|
|
152
|
+
*/
|
|
153
|
+
async finalizeIfIdle(childSessionId) {
|
|
154
|
+
try {
|
|
155
|
+
const child = await this.deps.sessions.getSession(childSessionId);
|
|
156
|
+
if (!child || child.kind !== 'subagent')
|
|
157
|
+
return;
|
|
158
|
+
// 有待处理的消息 → 软插话进来了,子会被重新唤醒续跑,不回投、不还名额。
|
|
159
|
+
if (await this.deps.hub.hasPending(childSessionId))
|
|
160
|
+
return;
|
|
161
|
+
const parentSessionId = child.parentRunId
|
|
162
|
+
? await this.deps.runs.getSessionId(child.parentRunId)
|
|
163
|
+
: null;
|
|
164
|
+
if (!parentSessionId) {
|
|
165
|
+
this.logger.warn(`finalizeIfIdle(${childSessionId}): cannot locate parent session ` +
|
|
166
|
+
`(parentRunId=${child.parentRunId ?? 'null'}) — skipped`);
|
|
167
|
+
return;
|
|
168
|
+
}
|
|
169
|
+
// 按**旧**游标取产出——CAS 前不得推进游标。
|
|
170
|
+
const oldCursor = child.lastMilestoneSeq;
|
|
171
|
+
const out = await this.collectOutput(childSessionId, oldCursor);
|
|
172
|
+
// 无新产出且非首次 → 已还过名额、也无可投,直接返回。两种情况要突破:
|
|
173
|
+
// 1. 失败态即便无新文本也必须把「子挂了」上报给父。
|
|
174
|
+
// 2. 有父正同步等着这次续跑:父的判据就是游标,这里一返回游标就停在原地,父只能
|
|
175
|
+
// 空等到超时——而子其实跑完了,只是一个字都没说。
|
|
176
|
+
if (!out.produce &&
|
|
177
|
+
!out.failed &&
|
|
178
|
+
oldCursor !== null &&
|
|
179
|
+
!(await this.deps.awaitLease.isAwaited(childSessionId))) {
|
|
180
|
+
return;
|
|
181
|
+
}
|
|
182
|
+
const watermark = out.watermark ?? (await this.deps.hub.store.reserveSeq(childSessionId));
|
|
183
|
+
const claimed = await this.deps.sessions.advanceMilestone(childSessionId, oldCursor, watermark);
|
|
184
|
+
if (!claimed)
|
|
185
|
+
return;
|
|
186
|
+
// 父正同步等着 → 产物由它自己取,这里**不投 inbox**(否则父既同步拿到、下一轮又收到
|
|
187
|
+
// 一条重复回执)。必须在 CAS **之后**:父的判据正是游标,先 claim 再 CAS 的话父可能
|
|
188
|
+
// 在完成信号落库之前就被判成「已接管」。
|
|
189
|
+
const awaitedByParent = await this.deps.awaitLease.claim(childSessionId, 'finalizer');
|
|
190
|
+
if (!awaitedByParent) {
|
|
191
|
+
const result = this.resultOf(out);
|
|
192
|
+
await this.deps.hub.post({
|
|
193
|
+
sessionId: parentSessionId,
|
|
194
|
+
kind: 'tool_result',
|
|
195
|
+
sourceKind: 'tool',
|
|
196
|
+
sourceUserId: null,
|
|
197
|
+
// 围栏由 `MessageHub.take` 取出时包:落库的是数据,围栏是给模型的呈现层。
|
|
198
|
+
source: {
|
|
199
|
+
// 标的是「这是一份子 Agent 回执」这个**类别**,不是触发它的工具——
|
|
200
|
+
// 追加任务的回执也写这个名字,收尾只看会话状态,本就不知道是谁发起的。
|
|
201
|
+
toolName: DELEGATE_TOOL_NAME,
|
|
202
|
+
handle: childSessionId,
|
|
203
|
+
status: result.status,
|
|
204
|
+
stopReason: result.stopReason,
|
|
205
|
+
// 与 stopReason 分开带:那是协议码,这是人话。只有失败才带(已中和)。
|
|
206
|
+
error: out.failed ? out.error : null,
|
|
207
|
+
},
|
|
208
|
+
parts: [{ type: 'text', text: result.body }],
|
|
209
|
+
});
|
|
210
|
+
await this.deps.wake.wake(parentSessionId);
|
|
211
|
+
}
|
|
212
|
+
if (oldCursor === null) {
|
|
213
|
+
await this.deps.treeBudget.decr(child.rootSessionId);
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
catch (err) {
|
|
217
|
+
this.logger.error(`finalizeIfIdle(${childSessionId}) failed: ${String(err)}`);
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
/**
|
|
221
|
+
* 兜底:子 loop 可能在回投 / 还名额之前崩掉或丢锁。对每个嫌疑重跑一次收尾(幂等),
|
|
222
|
+
* 再把每棵被碰过的树的名额覆盖为真值。**先收尾后校正**:收尾会把游标从 null 推成非
|
|
223
|
+
* null,校正读到的才是收尾之后的存活数。宿主在启动时调一次(fire-and-forget)。
|
|
224
|
+
*/
|
|
225
|
+
async sweepStale() {
|
|
226
|
+
const stale = await this.deps.sessions.listSubagentSessionsForSweep(this.deps.sweepIdleMs ?? SUBAGENT_SWEEP_IDLE_MS);
|
|
227
|
+
const touchedRoots = new Set();
|
|
228
|
+
for (const session of stale) {
|
|
229
|
+
touchedRoots.add(session.rootSessionId);
|
|
230
|
+
await this.finalizeIfIdle(session.id);
|
|
231
|
+
}
|
|
232
|
+
const counts = await this.deps.sessions.countAliveSubsByRoot();
|
|
233
|
+
const countByRoot = new Map(counts.map(r => [r.rootSessionId, r.count]));
|
|
234
|
+
for (const rootId of touchedRoots) {
|
|
235
|
+
await this.deps.treeBudget.set(rootId, countByRoot.get(rootId) ?? 0);
|
|
236
|
+
}
|
|
237
|
+
if (stale.length > 0) {
|
|
238
|
+
this.logger.warn(`sweepStale: finalized ${stale.length} stale session(s), corrected ${touchedRoots.size} tree(s)`);
|
|
239
|
+
}
|
|
240
|
+
}
|
|
241
|
+
// ---------------------------------------------------------------------------
|
|
242
|
+
async deliver(sessionId, prompt, userId) {
|
|
243
|
+
await this.deps.hub.post({
|
|
244
|
+
sessionId,
|
|
245
|
+
kind: 'user_message',
|
|
246
|
+
sourceKind: 'user',
|
|
247
|
+
sourceUserId: userId,
|
|
248
|
+
parts: [{ type: 'text', text: prompt }],
|
|
249
|
+
});
|
|
250
|
+
await this.deps.wake.wake(sessionId);
|
|
251
|
+
}
|
|
252
|
+
/**
|
|
253
|
+
* 子会话自 `since` 以来的 assistant 产出与终态。游标是消息 `seq`(会话内单调)——
|
|
254
|
+
* **不是时间戳**:挂钟会回拨,回拨之后新产出会被判成「旧的」直接跳过,父收到的回执
|
|
255
|
+
* 格式完好、内容缺一段。
|
|
256
|
+
*
|
|
257
|
+
* `watermark` = 取到的行里最大的 seq;没取到行时为 null(调用方从序列取号)。游标取自
|
|
258
|
+
* **取到的那些行**而不是独立取一个「当下」——后者可能跨到尚未取到的消息之后。
|
|
259
|
+
*/
|
|
260
|
+
async collectOutput(childSessionId, since) {
|
|
261
|
+
const rows = await this.deps.hub.store.listMessages(childSessionId, {
|
|
262
|
+
role: 'assistant',
|
|
263
|
+
afterSeq: since,
|
|
264
|
+
});
|
|
265
|
+
const produce = rows
|
|
266
|
+
.flatMap(r => r.parts
|
|
267
|
+
.filter((p) => p.type === 'text')
|
|
268
|
+
.map(p => p.text))
|
|
269
|
+
.join('\n')
|
|
270
|
+
.trim();
|
|
271
|
+
// 终态取自**最后一条** assistant 行的 metadata(`TurnRecorder.close` 盖的)。
|
|
272
|
+
const lastMeta = (rows[rows.length - 1]?.metadata ?? null);
|
|
273
|
+
const watermark = rows.reduce((max, r) => (max === null || r.seq > max ? r.seq : max), null);
|
|
274
|
+
return {
|
|
275
|
+
produce: produce ? scanSubagentOutput(produce).text : '',
|
|
276
|
+
status: lastMeta?.status,
|
|
277
|
+
stopReason: lastMeta?.stopReason ?? null,
|
|
278
|
+
error: lastMeta?.error ? scanSubagentOutput(lastMeta.error).text : null,
|
|
279
|
+
failed: isFailedTerminal(lastMeta?.status),
|
|
280
|
+
watermark,
|
|
281
|
+
};
|
|
282
|
+
}
|
|
283
|
+
resultOf(out) {
|
|
284
|
+
return {
|
|
285
|
+
body: buildMilestoneBody(out.produce, {
|
|
286
|
+
status: out.status,
|
|
287
|
+
stopReason: out.stopReason,
|
|
288
|
+
error: out.error,
|
|
289
|
+
}),
|
|
290
|
+
status: normalizeMilestoneStatus(out.status),
|
|
291
|
+
stopReason: out.failed ? out.stopReason : null,
|
|
292
|
+
};
|
|
293
|
+
}
|
|
294
|
+
}
|
|
295
|
+
//# sourceMappingURL=subagent-sessions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"subagent-sessions.js","sourceRoot":"","sources":["../../src/subagent/subagent-sessions.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import type { SessionLock, SubagentAwaitLease, TreeBudget, WakeChannel } from '../ports/coordination.js';
|
|
2
|
+
import { type QuestionStore } from '../ports/question-store.js';
|
|
3
|
+
import type { RunStore } from '../ports/run-store.js';
|
|
4
|
+
import type { SessionStore } from '../ports/session-store.js';
|
|
5
|
+
import type { StreamBus } from '../ports/stream-bus.js';
|
|
6
|
+
import type { VendorFileCache } from '../ports/vendor-file-cache.js';
|
|
7
|
+
/**
|
|
8
|
+
* 端口的契约用例:进程内实现与各适配包(Redis 等)跑同一套,保证换实现不换语义。
|
|
9
|
+
* 每个用例用随机 id,适配器实现可以共用一个后端实例。
|
|
10
|
+
*
|
|
11
|
+
* 用法:`describeStreamBusContract('redis', () => makeBus())`。
|
|
12
|
+
* 工厂可以返回 `{ impl, cleanup }`,cleanup 在用例结束时调用。
|
|
13
|
+
*/
|
|
14
|
+
type Factory<T> = () => T | {
|
|
15
|
+
impl: T;
|
|
16
|
+
cleanup?: () => void | Promise<void>;
|
|
17
|
+
} | Promise<T | {
|
|
18
|
+
impl: T;
|
|
19
|
+
cleanup?: () => void | Promise<void>;
|
|
20
|
+
}>;
|
|
21
|
+
export declare function describeStreamBusContract(name: string, factory: Factory<StreamBus>): void;
|
|
22
|
+
export declare function describeSessionLockContract(name: string, factory: Factory<SessionLock>): void;
|
|
23
|
+
export declare function describeWakeChannelContract(name: string, factory: Factory<WakeChannel>): void;
|
|
24
|
+
export declare function describeSubagentAwaitLeaseContract(name: string, factory: Factory<SubagentAwaitLease>): void;
|
|
25
|
+
export declare function describeTreeBudgetContract(name: string, factory: Factory<TreeBudget>): void;
|
|
26
|
+
export declare function describeRunStoreContract(name: string, factory: Factory<RunStore>,
|
|
27
|
+
/** 建一条能被 `findStaleRunning(0)` 看到的旧跑次所需的等待(毫秒),缺省 5。 */
|
|
28
|
+
staleDelayMs?: number): void;
|
|
29
|
+
/**
|
|
30
|
+
* `SessionStore` 契约(子会话行与里程碑游标)。`listSubagentSessionsForSweep` 要看消息与
|
|
31
|
+
* 更新时间,跟宿主的消息表绑在一起,不在这里测。
|
|
32
|
+
*/
|
|
33
|
+
export declare function describeSessionStoreContract(name: string, factory: Factory<SessionStore>): void;
|
|
34
|
+
export declare function describeQuestionStoreContract(name: string, factory: Factory<QuestionStore>): void;
|
|
35
|
+
export declare function describeVendorFileCacheContract(name: string, factory: Factory<VendorFileCache>): void;
|
|
36
|
+
export {};
|
|
37
|
+
//# sourceMappingURL=contracts.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"contracts.d.ts","sourceRoot":"","sources":["../../src/testing/contracts.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EACV,WAAW,EACX,kBAAkB,EAClB,UAAU,EACV,WAAW,EACZ,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAGL,KAAK,aAAa,EACnB,MAAM,4BAA4B,CAAC;AACpC,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAC9D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,KAAK,EACV,eAAe,EAEhB,MAAM,+BAA+B,CAAC;AAGvC;;;;;;GAMG;AACH,KAAK,OAAO,CAAC,CAAC,IAAI,MACd,CAAC,GACD;IAAE,IAAI,EAAE,CAAC,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;CAAE,GACjD,OAAO,CAAC,CAAC,GAAG;IAAE,IAAI,EAAE,CAAC,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;CAAE,CAAC,CAAC;AAwDnE,wBAAgB,yBAAyB,CACvC,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,OAAO,CAAC,SAAS,CAAC,QAqI5B;AAED,wBAAgB,2BAA2B,CACzC,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,OAAO,CAAC,WAAW,CAAC,QA2C9B;AAED,wBAAgB,2BAA2B,CACzC,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,OAAO,CAAC,WAAW,CAAC,QAuC9B;AAED,wBAAgB,kCAAkC,CAChD,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,OAAO,CAAC,kBAAkB,CAAC,QAiCrC;AAED,wBAAgB,0BAA0B,CACxC,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,OAAO,CAAC,UAAU,CAAC,QA0C7B;AAED,wBAAgB,wBAAwB,CACtC,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,OAAO,CAAC,QAAQ,CAAC;AAC1B,wDAAwD;AACxD,YAAY,SAAI,QA+EjB;AAWD;;;GAGG;AACH,wBAAgB,4BAA4B,CAC1C,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,OAAO,CAAC,YAAY,CAAC,QA6E/B;AAED,wBAAgB,6BAA6B,CAC3C,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,OAAO,CAAC,aAAa,CAAC,QAwLhC;AAED,wBAAgB,+BAA+B,CAC7C,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,OAAO,CAAC,eAAe,CAAC,QAiHlC"}
|