@alvin0/ai-agent-sdk-core 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/LICENSE +21 -0
- package/README.md +52 -0
- package/dist/agent/accounting/common.js +2 -0
- package/dist/agent/accounting/common.js.map +1 -0
- package/dist/agent/accounting/config.js +2 -0
- package/dist/agent/accounting/config.js.map +1 -0
- package/dist/agent/accounting/contracts.d.ts +36 -0
- package/dist/agent/accounting/contracts.d.ts.map +1 -0
- package/dist/agent/accounting/delivery/accounting-data.js +2 -0
- package/dist/agent/accounting/delivery/accounting-data.js.map +1 -0
- package/dist/agent/accounting/delivery/config.js +2 -0
- package/dist/agent/accounting/delivery/config.js.map +1 -0
- package/dist/agent/accounting/delivery/data.js +2 -0
- package/dist/agent/accounting/delivery/data.js.map +1 -0
- package/dist/agent/accounting/delivery/support-errors.js +2 -0
- package/dist/agent/accounting/delivery/support-errors.js.map +1 -0
- package/dist/agent/accounting/delivery/terminal.js +2 -0
- package/dist/agent/accounting/delivery/terminal.js.map +1 -0
- package/dist/agent/accounting/delivery-types.d.ts +43 -0
- package/dist/agent/accounting/delivery-types.d.ts.map +1 -0
- package/dist/agent/accounting/error.d.ts +18 -0
- package/dist/agent/accounting/error.d.ts.map +1 -0
- package/dist/agent/accounting/error.js +2 -0
- package/dist/agent/accounting/error.js.map +1 -0
- package/dist/agent/accounting/estimate.js +2 -0
- package/dist/agent/accounting/estimate.js.map +1 -0
- package/dist/agent/accounting/event-buffer.js +2 -0
- package/dist/agent/accounting/event-buffer.js.map +1 -0
- package/dist/agent/accounting/ledger.js +2 -0
- package/dist/agent/accounting/ledger.js.map +1 -0
- package/dist/agent/accounting/report.d.ts +70 -0
- package/dist/agent/accounting/report.d.ts.map +1 -0
- package/dist/agent/accounting/usage.d.ts +13 -0
- package/dist/agent/accounting/usage.d.ts.map +1 -0
- package/dist/agent/accounting/usage.js +2 -0
- package/dist/agent/accounting/usage.js.map +1 -0
- package/dist/agent/context/section.d.ts +15 -0
- package/dist/agent/context/section.d.ts.map +1 -0
- package/dist/agent/context/section.js +2 -0
- package/dist/agent/context/section.js.map +1 -0
- package/dist/agent/context/types.d.ts +98 -0
- package/dist/agent/context/types.d.ts.map +1 -0
- package/dist/agent/define/definition.d.ts +110 -0
- package/dist/agent/define/definition.d.ts.map +1 -0
- package/dist/agent/define/definition.js +2 -0
- package/dist/agent/define/definition.js.map +1 -0
- package/dist/agent/define/instructions.js +2 -0
- package/dist/agent/define/instructions.js.map +1 -0
- package/dist/agent/define/output-format.js +2 -0
- package/dist/agent/define/output-format.js.map +1 -0
- package/dist/agent/define/session/accounting.js +2 -0
- package/dist/agent/define/session/accounting.js.map +1 -0
- package/dist/agent/define/session/common.js +2 -0
- package/dist/agent/define/session/common.js.map +1 -0
- package/dist/agent/define/session/config.js +2 -0
- package/dist/agent/define/session/config.js.map +1 -0
- package/dist/agent/define/session/model-config.js +2 -0
- package/dist/agent/define/session/model-config.js.map +1 -0
- package/dist/agent/define/session/observer.js +2 -0
- package/dist/agent/define/session/observer.js.map +1 -0
- package/dist/agent/define/session/run-seal.js +2 -0
- package/dist/agent/define/session/run-seal.js.map +1 -0
- package/dist/agent/define/session/runtime-binding.js +2 -0
- package/dist/agent/define/session/runtime-binding.js.map +1 -0
- package/dist/agent/define/session/runtime-compaction.js +2 -0
- package/dist/agent/define/session/runtime-compaction.js.map +1 -0
- package/dist/agent/define/session/runtime-memory.js +2 -0
- package/dist/agent/define/session/runtime-memory.js.map +1 -0
- package/dist/agent/define/session/skills.js +2 -0
- package/dist/agent/define/session/skills.js.map +1 -0
- package/dist/agent/define/session/trace-accounting.js +2 -0
- package/dist/agent/define/session/trace-accounting.js.map +1 -0
- package/dist/agent/define/session/types.d.ts +217 -0
- package/dist/agent/define/session/types.d.ts.map +1 -0
- package/dist/agent/define/session/validation.js +2 -0
- package/dist/agent/define/session/validation.js.map +1 -0
- package/dist/agent/define/session.d.ts +77 -0
- package/dist/agent/define/session.d.ts.map +1 -0
- package/dist/agent/define/session.js +2 -0
- package/dist/agent/define/session.js.map +1 -0
- package/dist/agent/history/config.js +2 -0
- package/dist/agent/history/config.js.map +1 -0
- package/dist/agent/history/history.d.ts +33 -0
- package/dist/agent/history/history.d.ts.map +1 -0
- package/dist/agent/history/history.js +2 -0
- package/dist/agent/history/history.js.map +1 -0
- package/dist/agent/history/normalize.d.ts +7 -0
- package/dist/agent/history/normalize.d.ts.map +1 -0
- package/dist/agent/history/normalize.js +2 -0
- package/dist/agent/history/normalize.js.map +1 -0
- package/dist/agent/history/project.d.ts +14 -0
- package/dist/agent/history/project.d.ts.map +1 -0
- package/dist/agent/history/project.js +2 -0
- package/dist/agent/history/project.js.map +1 -0
- package/dist/agent/history/types.d.ts +85 -0
- package/dist/agent/history/types.d.ts.map +1 -0
- package/dist/agent/history/validation.js +2 -0
- package/dist/agent/history/validation.js.map +1 -0
- package/dist/agent/loop/events.d.ts +213 -0
- package/dist/agent/loop/events.d.ts.map +1 -0
- package/dist/agent/loop/queue.js +2 -0
- package/dist/agent/loop/queue.js.map +1 -0
- package/dist/agent/loop/run-turn.d.ts +8 -0
- package/dist/agent/loop/run-turn.d.ts.map +1 -0
- package/dist/agent/loop/run-turn.js +2 -0
- package/dist/agent/loop/run-turn.js.map +1 -0
- package/dist/agent/loop/schedule.d.ts +62 -0
- package/dist/agent/loop/schedule.d.ts.map +1 -0
- package/dist/agent/loop/schedule.js +3 -0
- package/dist/agent/loop/schedule.js.map +1 -0
- package/dist/agent/loop/turn/cancellation.js +2 -0
- package/dist/agent/loop/turn/cancellation.js.map +1 -0
- package/dist/agent/loop/turn/common.js +2 -0
- package/dist/agent/loop/turn/common.js.map +1 -0
- package/dist/agent/loop/turn/config.js +2 -0
- package/dist/agent/loop/turn/config.js.map +1 -0
- package/dist/agent/loop/turn/content.js +4 -0
- package/dist/agent/loop/turn/content.js.map +1 -0
- package/dist/agent/loop/turn/hooks.js +2 -0
- package/dist/agent/loop/turn/hooks.js.map +1 -0
- package/dist/agent/loop/turn/model-round.js +2 -0
- package/dist/agent/loop/turn/model-round.js.map +1 -0
- package/dist/agent/loop/turn/repetition.js +2 -0
- package/dist/agent/loop/turn/repetition.js.map +1 -0
- package/dist/agent/loop/turn/types.d.ts +82 -0
- package/dist/agent/loop/turn/types.d.ts.map +1 -0
- package/dist/agent/loop/turn/usage-stop.js +2 -0
- package/dist/agent/loop/turn/usage-stop.js.map +1 -0
- package/dist/agent/loop/turn/validation.js +2 -0
- package/dist/agent/loop/turn/validation.js.map +1 -0
- package/dist/agent/loop/types.d.ts +82 -0
- package/dist/agent/loop/types.d.ts.map +1 -0
- package/dist/agent/memory/accounting-binding.js +2 -0
- package/dist/agent/memory/accounting-binding.js.map +1 -0
- package/dist/agent/memory/compaction-config.d.ts +63 -0
- package/dist/agent/memory/compaction-config.d.ts.map +1 -0
- package/dist/agent/memory/compaction-config.js +2 -0
- package/dist/agent/memory/compaction-config.js.map +1 -0
- package/dist/agent/memory/compaction.d.ts +62 -0
- package/dist/agent/memory/compaction.d.ts.map +1 -0
- package/dist/agent/memory/compaction.js +6 -0
- package/dist/agent/memory/compaction.js.map +1 -0
- package/dist/agent/memory/memory.d.ts +61 -0
- package/dist/agent/memory/memory.d.ts.map +1 -0
- package/dist/agent/memory/memory.js +5 -0
- package/dist/agent/memory/memory.js.map +1 -0
- package/dist/agent/memory/persistence-types.d.ts +44 -0
- package/dist/agent/memory/persistence-types.d.ts.map +1 -0
- package/dist/agent/memory/surface-compaction.d.ts +6 -0
- package/dist/agent/memory/surface-compaction.d.ts.map +1 -0
- package/dist/agent/memory/surface-compaction.js +4 -0
- package/dist/agent/memory/surface-compaction.js.map +1 -0
- package/dist/agent/memory/token-estimator.d.ts +12 -0
- package/dist/agent/memory/token-estimator.d.ts.map +1 -0
- package/dist/agent/memory/token-estimator.js +2 -0
- package/dist/agent/memory/token-estimator.js.map +1 -0
- package/dist/agent/mode/run-agent.d.ts +79 -0
- package/dist/agent/mode/run-agent.d.ts.map +1 -0
- package/dist/agent/mode/run-agent.js +4 -0
- package/dist/agent/mode/run-agent.js.map +1 -0
- package/dist/agent/mode/user-input.d.ts +61 -0
- package/dist/agent/mode/user-input.d.ts.map +1 -0
- package/dist/agent/mode/user-input.js +2 -0
- package/dist/agent/mode/user-input.js.map +1 -0
- package/dist/agent/skill/catalog.d.ts +53 -0
- package/dist/agent/skill/catalog.d.ts.map +1 -0
- package/dist/agent/skill/catalog.js +2 -0
- package/dist/agent/skill/catalog.js.map +1 -0
- package/dist/agent/skill/definition.d.ts +106 -0
- package/dist/agent/skill/definition.d.ts.map +1 -0
- package/dist/agent/skill/definition.js +2 -0
- package/dist/agent/skill/definition.js.map +1 -0
- package/dist/agent/skill/provider/config.d.ts +11 -0
- package/dist/agent/skill/provider/config.d.ts.map +1 -0
- package/dist/agent/skill/provider/config.js +2 -0
- package/dist/agent/skill/provider/config.js.map +1 -0
- package/dist/agent/skill/provider/context.js +2 -0
- package/dist/agent/skill/provider/context.js.map +1 -0
- package/dist/agent/skill/provider/definition.d.ts +6 -0
- package/dist/agent/skill/provider/definition.d.ts.map +1 -0
- package/dist/agent/skill/provider/definition.js +2 -0
- package/dist/agent/skill/provider/definition.js.map +1 -0
- package/dist/agent/skill/provider/snapshot.js +2 -0
- package/dist/agent/skill/provider/snapshot.js.map +1 -0
- package/dist/agent/skill/provider/types.d.ts +49 -0
- package/dist/agent/skill/provider/types.d.ts.map +1 -0
- package/dist/agent/skill/tools.d.ts +45 -0
- package/dist/agent/skill/tools.d.ts.map +1 -0
- package/dist/agent/skill/tools.js +14 -0
- package/dist/agent/skill/tools.js.map +1 -0
- package/dist/agent/team/common.d.ts +26 -0
- package/dist/agent/team/common.d.ts.map +1 -0
- package/dist/agent/team/common.js +2 -0
- package/dist/agent/team/common.js.map +1 -0
- package/dist/agent/team/composed.d.ts +45 -0
- package/dist/agent/team/composed.d.ts.map +1 -0
- package/dist/agent/team/composed.js +2 -0
- package/dist/agent/team/composed.js.map +1 -0
- package/dist/agent/team/contracts.d.ts +54 -0
- package/dist/agent/team/contracts.d.ts.map +1 -0
- package/dist/agent/team/managed.d.ts +527 -0
- package/dist/agent/team/managed.d.ts.map +1 -0
- package/dist/agent/team/managed.js +4 -0
- package/dist/agent/team/managed.js.map +1 -0
- package/dist/agent/team/team.d.ts +142 -0
- package/dist/agent/team/team.d.ts.map +1 -0
- package/dist/agent/team/team.js +2 -0
- package/dist/agent/team/team.js.map +1 -0
- package/dist/agent/team/types.d.ts +170 -0
- package/dist/agent/team/types.d.ts.map +1 -0
- package/dist/agent/tool/approval.d.ts +106 -0
- package/dist/agent/tool/approval.d.ts.map +1 -0
- package/dist/agent/tool/approval.js +2 -0
- package/dist/agent/tool/approval.js.map +1 -0
- package/dist/agent/tool/capture.js +2 -0
- package/dist/agent/tool/capture.js.map +1 -0
- package/dist/agent/tool/config.js +2 -0
- package/dist/agent/tool/config.js.map +1 -0
- package/dist/agent/tool/definition.d.ts +227 -0
- package/dist/agent/tool/definition.d.ts.map +1 -0
- package/dist/agent/tool/definition.js +2 -0
- package/dist/agent/tool/definition.js.map +1 -0
- package/dist/agent/tool/errors.d.ts +82 -0
- package/dist/agent/tool/errors.d.ts.map +1 -0
- package/dist/agent/tool/errors.js +2 -0
- package/dist/agent/tool/errors.js.map +1 -0
- package/dist/agent/tool/execution.d.ts +60 -0
- package/dist/agent/tool/execution.d.ts.map +1 -0
- package/dist/agent/tool/execution.js +2 -0
- package/dist/agent/tool/execution.js.map +1 -0
- package/dist/agent/tool/output-budget.d.ts +159 -0
- package/dist/agent/tool/output-budget.d.ts.map +1 -0
- package/dist/agent/tool/output-budget.js +3 -0
- package/dist/agent/tool/output-budget.js.map +1 -0
- package/dist/agent/tool/pipeline.d.ts +98 -0
- package/dist/agent/tool/pipeline.d.ts.map +1 -0
- package/dist/agent/tool/pipeline.js +4 -0
- package/dist/agent/tool/pipeline.js.map +1 -0
- package/dist/agent/tool/registry.d.ts +70 -0
- package/dist/agent/tool/registry.d.ts.map +1 -0
- package/dist/agent/tool/registry.js +2 -0
- package/dist/agent/tool/registry.js.map +1 -0
- package/dist/agent/tool/schema.d.ts +12 -0
- package/dist/agent/tool/schema.d.ts.map +1 -0
- package/dist/agent/tool/schema.js +2 -0
- package/dist/agent/tool/schema.js.map +1 -0
- package/dist/agent/tool/source-types.d.ts +25 -0
- package/dist/agent/tool/source-types.d.ts.map +1 -0
- package/dist/agent/trace/trace.d.ts +63 -0
- package/dist/agent/trace/trace.d.ts.map +1 -0
- package/dist/agent/trace/trace.js +2 -0
- package/dist/agent/trace/trace.js.map +1 -0
- package/dist/agent.d.ts +52 -0
- package/dist/agent.js +1 -0
- package/dist/async/settlement.d.ts +6 -0
- package/dist/async/settlement.d.ts.map +1 -0
- package/dist/async/settlement.js +2 -0
- package/dist/async/settlement.js.map +1 -0
- package/dist/capability/common/config.js +2 -0
- package/dist/capability/common/config.js.map +1 -0
- package/dist/capability/common/data.js +2 -0
- package/dist/capability/common/data.js.map +1 -0
- package/dist/composition/agent/author.d.ts +12 -0
- package/dist/composition/agent/author.d.ts.map +1 -0
- package/dist/composition/agent/author.js +2 -0
- package/dist/composition/agent/author.js.map +1 -0
- package/dist/composition/agent/definition.js +2 -0
- package/dist/composition/agent/definition.js.map +1 -0
- package/dist/composition/agent/native-event.js +2 -0
- package/dist/composition/agent/native-event.js.map +1 -0
- package/dist/composition/agent/native-tools.js +2 -0
- package/dist/composition/agent/native-tools.js.map +1 -0
- package/dist/composition/agent/options.js +2 -0
- package/dist/composition/agent/options.js.map +1 -0
- package/dist/composition/agent/policy.js +2 -0
- package/dist/composition/agent/policy.js.map +1 -0
- package/dist/composition/agent/public-message.js +2 -0
- package/dist/composition/agent/public-message.js.map +1 -0
- package/dist/composition/agent/session.js +2 -0
- package/dist/composition/agent/session.js.map +1 -0
- package/dist/composition/agent/types.d.ts +218 -0
- package/dist/composition/agent/types.d.ts.map +1 -0
- package/dist/composition/common/counter.js +2 -0
- package/dist/composition/common/counter.js.map +1 -0
- package/dist/composition/common/errors.d.ts +15 -0
- package/dist/composition/common/errors.d.ts.map +1 -0
- package/dist/composition/common/errors.js +2 -0
- package/dist/composition/common/errors.js.map +1 -0
- package/dist/composition/common/json-data.js +2 -0
- package/dist/composition/common/json-data.js.map +1 -0
- package/dist/composition/credential/config.d.ts +5 -0
- package/dist/composition/credential/config.d.ts.map +1 -0
- package/dist/composition/credential/config.js +2 -0
- package/dist/composition/credential/config.js.map +1 -0
- package/dist/composition/credential/definition.d.ts +9 -0
- package/dist/composition/credential/definition.d.ts.map +1 -0
- package/dist/composition/credential/definition.js +2 -0
- package/dist/composition/credential/definition.js.map +1 -0
- package/dist/composition/credential/types.d.ts +38 -0
- package/dist/composition/credential/types.d.ts.map +1 -0
- package/dist/composition/delivery/ack.js +2 -0
- package/dist/composition/delivery/ack.js.map +1 -0
- package/dist/composition/delivery/attempt.js +2 -0
- package/dist/composition/delivery/attempt.js.map +1 -0
- package/dist/composition/delivery/batch.js +2 -0
- package/dist/composition/delivery/batch.js.map +1 -0
- package/dist/composition/delivery/checkpoint.js +2 -0
- package/dist/composition/delivery/checkpoint.js.map +1 -0
- package/dist/composition/delivery/event.js +2 -0
- package/dist/composition/delivery/event.js.map +1 -0
- package/dist/composition/delivery/resource.d.ts +11 -0
- package/dist/composition/delivery/resource.d.ts.map +1 -0
- package/dist/composition/delivery/resource.js +2 -0
- package/dist/composition/delivery/resource.js.map +1 -0
- package/dist/composition/delivery/staging.js +2 -0
- package/dist/composition/delivery/staging.js.map +1 -0
- package/dist/composition/diagnostics/config.js +2 -0
- package/dist/composition/diagnostics/config.js.map +1 -0
- package/dist/composition/diagnostics/ring.d.ts +12 -0
- package/dist/composition/diagnostics/ring.d.ts.map +1 -0
- package/dist/composition/diagnostics/ring.js +2 -0
- package/dist/composition/diagnostics/ring.js.map +1 -0
- package/dist/composition/exporter/definition.d.ts +7 -0
- package/dist/composition/exporter/definition.d.ts.map +1 -0
- package/dist/composition/exporter/definition.js +2 -0
- package/dist/composition/exporter/definition.js.map +1 -0
- package/dist/composition/exporter/lifecycle.js +2 -0
- package/dist/composition/exporter/lifecycle.js.map +1 -0
- package/dist/composition/exporter/preflight.js +2 -0
- package/dist/composition/exporter/preflight.js.map +1 -0
- package/dist/composition/exporter/types.d.ts +25 -0
- package/dist/composition/exporter/types.d.ts.map +1 -0
- package/dist/composition/exporter/types.js +2 -0
- package/dist/composition/exporter/types.js.map +1 -0
- package/dist/composition/identity/agent.js +2 -0
- package/dist/composition/identity/agent.js.map +1 -0
- package/dist/composition/lifecycle/bounded.js +2 -0
- package/dist/composition/lifecycle/bounded.js.map +1 -0
- package/dist/composition/lifecycle/operations.js +2 -0
- package/dist/composition/lifecycle/operations.js.map +1 -0
- package/dist/composition/lifecycle/types.d.ts +13 -0
- package/dist/composition/lifecycle/types.d.ts.map +1 -0
- package/dist/composition/lifecycle/types.js +2 -0
- package/dist/composition/lifecycle/types.js.map +1 -0
- package/dist/composition/logging/config.js +2 -0
- package/dist/composition/logging/config.js.map +1 -0
- package/dist/composition/logging/integration.js +2 -0
- package/dist/composition/logging/integration.js.map +1 -0
- package/dist/composition/logging/logger.d.ts +9 -0
- package/dist/composition/logging/logger.d.ts.map +1 -0
- package/dist/composition/logging/logger.js +2 -0
- package/dist/composition/logging/logger.js.map +1 -0
- package/dist/composition/memory/config.d.ts +10 -0
- package/dist/composition/memory/config.d.ts.map +1 -0
- package/dist/composition/memory/config.js +2 -0
- package/dist/composition/memory/config.js.map +1 -0
- package/dist/composition/memory/definition.d.ts +7 -0
- package/dist/composition/memory/definition.d.ts.map +1 -0
- package/dist/composition/memory/definition.js +2 -0
- package/dist/composition/memory/definition.js.map +1 -0
- package/dist/composition/memory/key.js +2 -0
- package/dist/composition/memory/key.js.map +1 -0
- package/dist/composition/memory/resume.js +2 -0
- package/dist/composition/memory/resume.js.map +1 -0
- package/dist/composition/memory/run.js +2 -0
- package/dist/composition/memory/run.js.map +1 -0
- package/dist/composition/model-catalog/config.js +2 -0
- package/dist/composition/model-catalog/config.js.map +1 -0
- package/dist/composition/model-catalog/manager.js +2 -0
- package/dist/composition/model-catalog/manager.js.map +1 -0
- package/dist/composition/model-catalog/options.js +2 -0
- package/dist/composition/model-catalog/options.js.map +1 -0
- package/dist/composition/model-catalog/types.d.ts +9 -0
- package/dist/composition/model-catalog/types.d.ts.map +1 -0
- package/dist/composition/observation/config.js +2 -0
- package/dist/composition/observation/config.js.map +1 -0
- package/dist/composition/observation/extensions.js +2 -0
- package/dist/composition/observation/extensions.js.map +1 -0
- package/dist/composition/observation/final-report.d.ts +6 -0
- package/dist/composition/observation/final-report.d.ts.map +1 -0
- package/dist/composition/observation/final-report.js +2 -0
- package/dist/composition/observation/final-report.js.map +1 -0
- package/dist/composition/observation/health.d.ts +13 -0
- package/dist/composition/observation/health.d.ts.map +1 -0
- package/dist/composition/observation/port.d.ts +11 -0
- package/dist/composition/observation/port.d.ts.map +1 -0
- package/dist/composition/observation/port.js +2 -0
- package/dist/composition/observation/port.js.map +1 -0
- package/dist/composition/preflight.js +2 -0
- package/dist/composition/preflight.js.map +1 -0
- package/dist/composition/provider/activation.js +2 -0
- package/dist/composition/provider/activation.js.map +1 -0
- package/dist/composition/provider/definition.d.ts +7 -0
- package/dist/composition/provider/definition.d.ts.map +1 -0
- package/dist/composition/provider/definition.js +2 -0
- package/dist/composition/provider/definition.js.map +1 -0
- package/dist/composition/provider/model-selection.js +2 -0
- package/dist/composition/provider/model-selection.js.map +1 -0
- package/dist/composition/provider/preflight.js +2 -0
- package/dist/composition/provider/preflight.js.map +1 -0
- package/dist/composition/provider/types.d.ts +38 -0
- package/dist/composition/provider/types.d.ts.map +1 -0
- package/dist/composition/provider/types.js +2 -0
- package/dist/composition/provider/types.js.map +1 -0
- package/dist/composition/queue/config.js +2 -0
- package/dist/composition/queue/config.js.map +1 -0
- package/dist/composition/queue/scheduler.js +2 -0
- package/dist/composition/queue/scheduler.js.map +1 -0
- package/dist/composition/queue/store.js +2 -0
- package/dist/composition/queue/store.js.map +1 -0
- package/dist/composition/runtime/config.js +2 -0
- package/dist/composition/runtime/config.js.map +1 -0
- package/dist/composition/runtime/owner.js +2 -0
- package/dist/composition/runtime/owner.js.map +1 -0
- package/dist/composition/runtime/public.d.ts +7 -0
- package/dist/composition/runtime/public.d.ts.map +1 -0
- package/dist/composition/runtime/public.js +2 -0
- package/dist/composition/runtime/public.js.map +1 -0
- package/dist/composition/runtime/types.d.ts +76 -0
- package/dist/composition/runtime/types.d.ts.map +1 -0
- package/dist/composition/startup.js +2 -0
- package/dist/composition/startup.js.map +1 -0
- package/dist/composition/team/config.js +2 -0
- package/dist/composition/team/config.js.map +1 -0
- package/dist/composition/team/options.js +2 -0
- package/dist/composition/team/options.js.map +1 -0
- package/dist/composition/team/runtime.js +2 -0
- package/dist/composition/team/runtime.js.map +1 -0
- package/dist/composition/team/types.d.ts +63 -0
- package/dist/composition/team/types.d.ts.map +1 -0
- package/dist/composition/tool-source/config.d.ts +5 -0
- package/dist/composition/tool-source/config.d.ts.map +1 -0
- package/dist/composition/tool-source/config.js +2 -0
- package/dist/composition/tool-source/config.js.map +1 -0
- package/dist/composition/tool-source/definition.d.ts +7 -0
- package/dist/composition/tool-source/definition.d.ts.map +1 -0
- package/dist/composition/tool-source/definition.js +2 -0
- package/dist/composition/tool-source/definition.js.map +1 -0
- package/dist/composition/tool-source/snapshot.js +2 -0
- package/dist/composition/tool-source/snapshot.js.map +1 -0
- package/dist/contract/adapter.d.ts +91 -0
- package/dist/contract/adapter.d.ts.map +1 -0
- package/dist/contract/adapter.js +2 -0
- package/dist/contract/adapter.js.map +1 -0
- package/dist/contract/call-config.d.ts +36 -0
- package/dist/contract/call-config.d.ts.map +1 -0
- package/dist/contract/call-config.js +2 -0
- package/dist/contract/call-config.js.map +1 -0
- package/dist/contract/generate-options.d.ts +41 -0
- package/dist/contract/generate-options.d.ts.map +1 -0
- package/dist/contract/model-info.d.ts +99 -0
- package/dist/contract/model-info.d.ts.map +1 -0
- package/dist/contract/output-format.d.ts +18 -0
- package/dist/contract/output-format.d.ts.map +1 -0
- package/dist/contract/retry-policy.d.ts +104 -0
- package/dist/contract/retry-policy.d.ts.map +1 -0
- package/dist/contract/retry-policy.js +2 -0
- package/dist/contract/retry-policy.js.map +1 -0
- package/dist/contract/tool.d.ts +65 -0
- package/dist/contract/tool.d.ts.map +1 -0
- package/dist/contract/tool.js +2 -0
- package/dist/contract/tool.js.map +1 -0
- package/dist/errors/agent-sdk-error.d.ts +88 -0
- package/dist/errors/agent-sdk-error.d.ts.map +1 -0
- package/dist/errors/agent-sdk-error.js +2 -0
- package/dist/errors/agent-sdk-error.js.map +1 -0
- package/dist/errors/capability-identity.d.ts +10 -0
- package/dist/errors/capability-identity.d.ts.map +1 -0
- package/dist/errors/capability-identity.js +2 -0
- package/dist/errors/capability-identity.js.map +1 -0
- package/dist/errors/failure.d.ts +33 -0
- package/dist/errors/failure.d.ts.map +1 -0
- package/dist/errors/failure.js +2 -0
- package/dist/errors/failure.js.map +1 -0
- package/dist/errors/model-error.d.ts +83 -0
- package/dist/errors/model-error.d.ts.map +1 -0
- package/dist/errors/model-error.js +2 -0
- package/dist/errors/model-error.js.map +1 -0
- package/dist/http/api-key.d.ts +47 -0
- package/dist/http/api-key.d.ts.map +1 -0
- package/dist/http/api-key.js +2 -0
- package/dist/http/api-key.js.map +1 -0
- package/dist/http/attribution.d.ts +51 -0
- package/dist/http/attribution.d.ts.map +1 -0
- package/dist/http/attribution.js +2 -0
- package/dist/http/attribution.js.map +1 -0
- package/dist/index.d.ts +70 -0
- package/dist/index.js +1 -0
- package/dist/logging/types.d.ts +53 -0
- package/dist/logging/types.d.ts.map +1 -0
- package/dist/logging/types.js +2 -0
- package/dist/logging/types.js.map +1 -0
- package/dist/memory.d.ts +10 -0
- package/dist/memory.js +1 -0
- package/dist/message/content.d.ts +125 -0
- package/dist/message/content.d.ts.map +1 -0
- package/dist/message/message.d.ts +154 -0
- package/dist/message/message.d.ts.map +1 -0
- package/dist/message/message.js +2 -0
- package/dist/message/message.js.map +1 -0
- package/dist/message/projection.d.ts +34 -0
- package/dist/message/projection.d.ts.map +1 -0
- package/dist/message/projection.js +2 -0
- package/dist/message/projection.js.map +1 -0
- package/dist/observability/bus.d.ts +7 -0
- package/dist/observability/bus.d.ts.map +1 -0
- package/dist/observability/bus.js +2 -0
- package/dist/observability/bus.js.map +1 -0
- package/dist/observability/exporters.d.ts +39 -0
- package/dist/observability/exporters.d.ts.map +1 -0
- package/dist/observability/exporters.js +2 -0
- package/dist/observability/exporters.js.map +1 -0
- package/dist/observability/logger.js +2 -0
- package/dist/observability/logger.js.map +1 -0
- package/dist/observability/projections.d.ts +12 -0
- package/dist/observability/projections.d.ts.map +1 -0
- package/dist/observability/projections.js +2 -0
- package/dist/observability/projections.js.map +1 -0
- package/dist/observability/types.d.ts +103 -0
- package/dist/observability/types.d.ts.map +1 -0
- package/dist/observability.d.ts +20 -0
- package/dist/observability.js +1 -0
- package/dist/observation/boundaries.js +2 -0
- package/dist/observation/boundaries.js.map +1 -0
- package/dist/observation/context.d.ts +39 -0
- package/dist/observation/context.d.ts.map +1 -0
- package/dist/observation/context.js +2 -0
- package/dist/observation/context.js.map +1 -0
- package/dist/observation/event.d.ts +50 -0
- package/dist/observation/event.d.ts.map +1 -0
- package/dist/observation/event.js +2 -0
- package/dist/observation/event.js.map +1 -0
- package/dist/observation/port.d.ts +56 -0
- package/dist/observation/port.d.ts.map +1 -0
- package/dist/observation/port.js +2 -0
- package/dist/observation/port.js.map +1 -0
- package/dist/observation/privacy.js +2 -0
- package/dist/observation/privacy.js.map +1 -0
- package/dist/observation/report.d.ts +117 -0
- package/dist/observation/report.d.ts.map +1 -0
- package/dist/observation/report.js +2 -0
- package/dist/observation/report.js.map +1 -0
- package/dist/observation/telemetry-types.d.ts +29 -0
- package/dist/observation/telemetry-types.d.ts.map +1 -0
- package/dist/observation/usage.d.ts +52 -0
- package/dist/observation/usage.d.ts.map +1 -0
- package/dist/observation/usage.js +2 -0
- package/dist/observation/usage.js.map +1 -0
- package/dist/platform/adapter.js +2 -0
- package/dist/platform/adapter.js.map +1 -0
- package/dist/platform/capability-operation.js +2 -0
- package/dist/platform/capability-operation.js.map +1 -0
- package/dist/platform/config.js +2 -0
- package/dist/platform/config.js.map +1 -0
- package/dist/platform/logger-platform.js +2 -0
- package/dist/platform/logger-platform.js.map +1 -0
- package/dist/platform/resources.js +2 -0
- package/dist/platform/resources.js.map +1 -0
- package/dist/plugin/provider-plugin.d.ts +37 -0
- package/dist/plugin/provider-plugin.d.ts.map +1 -0
- package/dist/plugin/provider-plugin.js +2 -0
- package/dist/plugin/provider-plugin.js.map +1 -0
- package/dist/primitives/brand.d.ts +61 -0
- package/dist/primitives/brand.d.ts.map +1 -0
- package/dist/primitives/brand.js +2 -0
- package/dist/primitives/brand.js.map +1 -0
- package/dist/primitives/freeze.d.ts +20 -0
- package/dist/primitives/freeze.d.ts.map +1 -0
- package/dist/primitives/freeze.js +2 -0
- package/dist/primitives/freeze.js.map +1 -0
- package/dist/primitives/json-snapshot.js +2 -0
- package/dist/primitives/json-snapshot.js.map +1 -0
- package/dist/primitives/json.d.ts +32 -0
- package/dist/primitives/json.d.ts.map +1 -0
- package/dist/primitives/json.js +2 -0
- package/dist/primitives/json.js.map +1 -0
- package/dist/primitives/never.d.ts +22 -0
- package/dist/primitives/never.d.ts.map +1 -0
- package/dist/primitives/never.js +2 -0
- package/dist/primitives/never.js.map +1 -0
- package/dist/primitives/snapshot.d.ts +10 -0
- package/dist/primitives/snapshot.d.ts.map +1 -0
- package/dist/primitives/snapshot.js +2 -0
- package/dist/primitives/snapshot.js.map +1 -0
- package/dist/primitives/version.d.ts +6 -0
- package/dist/primitives/version.d.ts.map +1 -0
- package/dist/primitives/version.js +2 -0
- package/dist/primitives/version.js.map +1 -0
- package/dist/provider.d.ts +19 -0
- package/dist/provider.js +1 -0
- package/dist/runtime/model-call-handle.js +2 -0
- package/dist/runtime/model-call-handle.js.map +1 -0
- package/dist/runtime/model-metadata.js +2 -0
- package/dist/runtime/model-metadata.js.map +1 -0
- package/dist/runtime/model-stream.js +2 -0
- package/dist/runtime/model-stream.js.map +1 -0
- package/dist/runtime/registry.d.ts +171 -0
- package/dist/runtime/registry.d.ts.map +1 -0
- package/dist/runtime/registry.js +2 -0
- package/dist/runtime/registry.js.map +1 -0
- package/dist/runtime/with-retry.d.ts +45 -0
- package/dist/runtime/with-retry.d.ts.map +1 -0
- package/dist/runtime/with-retry.js +2 -0
- package/dist/runtime/with-retry.js.map +1 -0
- package/dist/skills.d.ts +8 -0
- package/dist/skills.js +1 -0
- package/dist/stream/assembler.d.ts +86 -0
- package/dist/stream/assembler.d.ts.map +1 -0
- package/dist/stream/assembler.js +2 -0
- package/dist/stream/assembler.js.map +1 -0
- package/dist/stream/chunk.d.ts +135 -0
- package/dist/stream/chunk.d.ts.map +1 -0
- package/dist/stream/idle-timeout.d.ts +30 -0
- package/dist/stream/idle-timeout.d.ts.map +1 -0
- package/dist/stream/idle-timeout.js +2 -0
- package/dist/stream/idle-timeout.js.map +1 -0
- package/dist/support-safe/error.d.ts +29 -0
- package/dist/support-safe/error.d.ts.map +1 -0
- package/dist/support-safe/error.js +2 -0
- package/dist/support-safe/error.js.map +1 -0
- package/dist/tools.d.ts +15 -0
- package/dist/tools.js +1 -0
- package/package.json +96 -0
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
import { SpanId, TraceId } from "../../../observation/context.js";
|
|
2
|
+
import { SdkLogger } from "../../../logging/types.js";
|
|
3
|
+
import { NativeToolSchema, ToolChoice } from "../../../contract/tool.js";
|
|
4
|
+
import { ModelOutputFormat } from "../../../contract/output-format.js";
|
|
5
|
+
import { CallConfig } from "../../../contract/call-config.js";
|
|
6
|
+
import { SpillStore } from "../../tool/output-budget.js";
|
|
7
|
+
import { History } from "../../history/history.js";
|
|
8
|
+
import { ApprovalBroker } from "../../tool/approval.js";
|
|
9
|
+
import { ToolCatalog } from "../../tool/registry.js";
|
|
10
|
+
import { ToolInterceptor } from "../../tool/pipeline.js";
|
|
11
|
+
import { TurnHooks } from "../events.js";
|
|
12
|
+
import { TurnBounds } from "../types.js";
|
|
13
|
+
import { ModelRegistry } from "../../../runtime/registry.js";
|
|
14
|
+
import { RunAccountingPort } from "../../accounting/contracts.js";
|
|
15
|
+
import { ContextSection } from "../../context/types.js";
|
|
16
|
+
//#region src/agent/loop/turn/types.d.ts
|
|
17
|
+
interface RunTurnOptions {
|
|
18
|
+
readonly validateOutput?: (value: unknown) => void;
|
|
19
|
+
/** strict rejects known text-only models when request history contains images; project permits lossy conversion. */
|
|
20
|
+
readonly imagePolicy?: 'strict' | 'project';
|
|
21
|
+
readonly registry: ModelRegistry;
|
|
22
|
+
readonly config: CallConfig;
|
|
23
|
+
readonly history: History;
|
|
24
|
+
readonly tools?: ToolCatalog;
|
|
25
|
+
/** Tools executed inside the provider response (web search, image generation). */
|
|
26
|
+
readonly nativeTools?: readonly NativeToolSchema[];
|
|
27
|
+
/** Optional provider-neutral selection constraint for host or native tools. */
|
|
28
|
+
readonly toolChoice?: ToolChoice;
|
|
29
|
+
/** Visible response format applied only when the loop produces its final answer. */
|
|
30
|
+
readonly outputFormat?: ModelOutputFormat;
|
|
31
|
+
readonly system?: string;
|
|
32
|
+
readonly interceptors?: readonly ToolInterceptor[];
|
|
33
|
+
readonly approvals?: ApprovalBroker;
|
|
34
|
+
readonly bounds?: Partial<TurnBounds>;
|
|
35
|
+
readonly hooks?: TurnHooks;
|
|
36
|
+
readonly signal?: AbortSignal;
|
|
37
|
+
/** Runtime-bound correlation; optional for the preserved low-level runner. */
|
|
38
|
+
readonly logger?: SdkLogger;
|
|
39
|
+
/** Maximum wait for an uncooperative producer after the event consumer stops. Defaults to 30s. */
|
|
40
|
+
readonly teardownTimeoutMs?: number;
|
|
41
|
+
/** Total wall-clock allowance for one model stream, including adapter preparation. Defaults to 10m. */
|
|
42
|
+
readonly modelTimeoutMs?: number;
|
|
43
|
+
/** Maximum serialized request bytes passed to a model adapter. Defaults to 32 MiB. */
|
|
44
|
+
readonly maxModelRequestBytes?: number;
|
|
45
|
+
/** Maximum serialized response bytes accepted from one model stream. Defaults to 32 MiB. */
|
|
46
|
+
readonly maxModelResponseBytes?: number;
|
|
47
|
+
/** Maximum chunks accepted from one model stream. Defaults to 100,000. */
|
|
48
|
+
readonly maxModelStreamEvents?: number;
|
|
49
|
+
/** Maximum wall time for one policy/lifecycle hook. Defaults to 10 minutes. */
|
|
50
|
+
readonly hookTimeoutMs?: number;
|
|
51
|
+
/** Maximum wait after a timed-out hook ignores cancellation. Defaults to 30 seconds. */
|
|
52
|
+
readonly hookTeardownTimeoutMs?: number;
|
|
53
|
+
/** Ask the model for concise user-visible progress narration around tool use. */
|
|
54
|
+
readonly commentary?: 'auto' | 'concise' | 'off';
|
|
55
|
+
readonly trace?: {
|
|
56
|
+
readonly traceId?: TraceId;
|
|
57
|
+
readonly parentSpanId?: SpanId;
|
|
58
|
+
readonly conversationId?: string;
|
|
59
|
+
readonly agentId?: string;
|
|
60
|
+
readonly agentName?: string;
|
|
61
|
+
};
|
|
62
|
+
/** Internal canonical accounting surface supplied by AgentSession. */
|
|
63
|
+
readonly accounting?: RunAccountingPort;
|
|
64
|
+
/**
|
|
65
|
+
* Where oversized tool output is saved instead of being cut.
|
|
66
|
+
*
|
|
67
|
+
* Mounting one switches the default `auto` policy from truncating to
|
|
68
|
+
* spilling, so nothing the model asked for is lost — it reads a preview and
|
|
69
|
+
* retrieves the rest.
|
|
70
|
+
*/
|
|
71
|
+
readonly spillStore?: SpillStore;
|
|
72
|
+
/**
|
|
73
|
+
* Model-visible context recomputed before every model round.
|
|
74
|
+
*
|
|
75
|
+
* Each section owns one surface node and rewrites it only when its revision
|
|
76
|
+
* changes, so unchanged context costs nothing after the first write.
|
|
77
|
+
*/
|
|
78
|
+
readonly contextSections?: readonly ContextSection[];
|
|
79
|
+
}
|
|
80
|
+
//#endregion
|
|
81
|
+
export { RunTurnOptions };
|
|
82
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","names":[],"sources":["../../../../src/agent/loop/turn/types.ts"],"mappings":";;;;;;;;;;;;;;;;UAkBiB;WACN,kBAAkB;;WAElB;WACA,UAAU;WACV,QAAQ;WACR,SAAS;WACT,QAAQ;;WAER,uBAAuB;;WAEvB,aAAa;;WAEb,eAAe;WACf;WACA,wBAAwB;WACxB,YAAY;WACZ,SAAS,QAAQ;WACjB,QAAQ;WACR,SAAS;;WAET,SAAS;;WAET;;WAEA;;WAEA;;WAEA;;WAEA;;WAEA;;WAEA;;WAEA;WACA;aACE,UAAU;aACV,eAAe;aACf;aACA;aACA;;;WAGF,aAAa;;;;;;;;WAQb,aAAa;;;;;;;WAOb,2BAA2B"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
function e(e){let t=e?.usageStop;if(t?.usageRequired)return{kind:`error`,failure:{code:`USAGE_REQUIRED`,message:`provider usage is required by the configured run policy`}};if(t?.usageUnavailable)return{kind:`usage-unavailable`,modelCallId:t.report.modelCallId}}export{e as accountingUsageStop};
|
|
2
|
+
//# sourceMappingURL=usage-stop.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"usage-stop.js","names":[],"sources":["../../../../src/agent/loop/turn/usage-stop.ts"],"sourcesContent":["import type { RunAccountingPort } from '../../accounting/contracts.ts'\nimport type { TurnEndReason } from '../types.ts'\n\n/** Maintenance and main model calls share mandatory usage policy, not token caps. */\nexport function accountingUsageStop(accounting: RunAccountingPort | undefined): TurnEndReason | undefined {\n const stop = accounting?.usageStop\n if (stop?.usageRequired) return { kind: 'error', failure: {\n code: 'USAGE_REQUIRED', message: 'provider usage is required by the configured run policy',\n } }\n if (stop?.usageUnavailable) return { kind: 'usage-unavailable', modelCallId: stop.report.modelCallId }\n return undefined\n}\n"],"mappings":"AAIA,SAAgB,EAAoB,EAAsE,CACxG,IAAM,EAAO,GAAY,UACzB,GAAI,GAAM,cAAe,MAAO,CAAE,KAAM,QAAS,QAAS,CACxD,KAAM,iBAAkB,QAAS,yDACnC,CAAE,EACF,GAAI,GAAM,iBAAkB,MAAO,CAAE,KAAM,oBAAqB,YAAa,EAAK,OAAO,WAAY,CAEvG"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
function e(e,n){if(typeof e!=`object`||!e||typeof e.type!=`string`)throw TypeError(`chunk must be an object with a type`);if(`index`in e&&(!Number.isSafeInteger(e.index)||e.index<0))throw TypeError(`chunk index must be a non-negative safe integer`);switch(e.type){case`block-start`:if(typeof e.blockType!=`string`||e.blockType.length===0)throw TypeError(`blockType must be non-empty`);return;case`text-delta`:if(typeof e.text!=`string`)throw TypeError(`text delta must be a string`);if(e.phase!==void 0&&e.phase!==`commentary`&&e.phase!==`final-answer`)throw TypeError(`text phase is invalid`);return;case`reasoning-delta`:if(typeof e.text!=`string`)throw TypeError(`reasoning delta must be a string`);return;case`image-delta`:if(typeof e.itemId!=`string`||typeof e.data!=`string`||typeof e.mediaType!=`string`)throw TypeError(`image delta fields must be strings`);if(e.partialIndex!==void 0&&(!Number.isSafeInteger(e.partialIndex)||e.partialIndex<0))throw TypeError(`image partialIndex must be a non-negative safe integer`);return;case`tool-call-delta`:if(typeof e.id!=`string`||e.id.length===0||e.name!==void 0&&typeof e.name!=`string`||typeof e.argumentsDelta!=`string`)throw TypeError(`tool-call delta fields are invalid`);return;case`block-end`:if(typeof e.block!=`object`||e.block===null||typeof e.block.type!=`string`)throw TypeError(`block-end must contain a content block`);t(e.block,n);return;case`usage`:r(e.usage.inputTokens,`inputTokens`),r(e.usage.outputTokens,`outputTokens`);for(let t of[`totalTokens`,`cacheReadTokens`,`cacheWriteTokens`,`reasoningTokens`])e.usage[t]!==void 0&&r(e.usage[t],t);return;case`finish`:if(typeof e.reason!=`object`||e.reason===null||typeof e.reason.kind!=`string`)throw TypeError(`finish reason is invalid`);if((e.reason.kind===`error`||e.reason.kind===`aborted`)&&(typeof e.reason.failure!=`object`||e.reason.failure===null||typeof e.reason.failure.message!=`string`||typeof e.reason.failure.code!=`string`))throw TypeError(`finish failure is invalid`);return;default:throw TypeError(`unknown chunk type '${String(e.type)}'`)}}function t(e,t){let r=[e],i=0;for(;r.length>0;){let e=r.pop();if(!n(e)||typeof e.type!=`string`||e.type.length===0)throw TypeError(`content block must be an object with a non-empty type`);if(i++,i>t)throw TypeError(`content block tree exceeds ${t} nodes`);switch(e.type){case`text`:if(typeof e.text!=`string`)throw TypeError(`text block text must be a string`);if(e.phase!==void 0&&e.phase!==`commentary`&&e.phase!==`final-answer`)throw TypeError(`text block phase is invalid`);break;case`reasoning`:if(typeof e.text!=`string`)throw TypeError(`reasoning block text must be a string`);break;case`image`:if(!n(e.source)||typeof e.source.kind!=`string`)throw TypeError(`image block source is invalid`);if(e.source.kind===`base64`){if(typeof e.source.data!=`string`||typeof e.source.mediaType!=`string`)throw TypeError(`base64 image source is invalid`)}else if(e.source.kind===`url`){if(typeof e.source.url!=`string`)throw TypeError(`URL image source is invalid`)}else if(e.source.kind===`file`){if(typeof e.source.fileId!=`string`)throw TypeError(`file image source is invalid`)}else throw TypeError(`image source kind is invalid`);break;case`tool-call`:if(typeof e.id!=`string`||e.id.length===0||typeof e.name!=`string`||e.name.length===0||typeof e.arguments!=`string`)throw TypeError(`tool-call block fields are invalid`);break;case`tool-result`:if(typeof e.toolCallId!=`string`||e.toolCallId.length===0||!Array.isArray(e.content)||e.isError!==void 0&&typeof e.isError!=`boolean`)throw TypeError(`tool-result block fields are invalid`);for(let t=e.content.length-1;t>=0;t--)r.push(e.content[t]);break;case`native-tool-call`:if(typeof e.id!=`string`||e.id.length===0||typeof e.name!=`string`||e.name.length===0||e.status!==void 0&&typeof e.status!=`string`||!Array.isArray(e.content))throw TypeError(`native-tool-call block fields are invalid`);for(let t=e.content.length-1;t>=0;t--)r.push(e.content[t])}}}function n(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function r(e,t){if(!Number.isSafeInteger(e)||e<0)throw TypeError(`usage ${t} must be a non-negative safe integer`)}export{n as record,t as validateContentBlock,e as validateStreamChunk,r as validateUsageCount};
|
|
2
|
+
//# sourceMappingURL=validation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validation.js","names":[],"sources":["../../../../src/agent/loop/turn/validation.ts"],"sourcesContent":["import type { ContentBlock } from '../../../message/index.ts'\nimport type { StreamChunk } from '../../../stream/index.ts'\n\nexport function validateStreamChunk(chunk: StreamChunk, maxBlockNodes: number): void {\n if (typeof chunk !== 'object' || chunk === null || typeof chunk.type !== 'string') {\n throw new TypeError('chunk must be an object with a type')\n }\n if ('index' in chunk && (!Number.isSafeInteger(chunk.index) || chunk.index < 0)) {\n throw new TypeError('chunk index must be a non-negative safe integer')\n }\n switch (chunk.type) {\n case 'block-start':\n if (typeof chunk.blockType !== 'string' || chunk.blockType.length === 0) throw new TypeError('blockType must be non-empty')\n return\n case 'text-delta':\n if (typeof chunk.text !== 'string') throw new TypeError('text delta must be a string')\n if (chunk.phase !== undefined && chunk.phase !== 'commentary' && chunk.phase !== 'final-answer') {\n throw new TypeError('text phase is invalid')\n }\n return\n case 'reasoning-delta':\n if (typeof chunk.text !== 'string') throw new TypeError('reasoning delta must be a string')\n return\n case 'image-delta':\n if (typeof chunk.itemId !== 'string' || typeof chunk.data !== 'string' || typeof chunk.mediaType !== 'string') {\n throw new TypeError('image delta fields must be strings')\n }\n if (chunk.partialIndex !== undefined\n && (!Number.isSafeInteger(chunk.partialIndex) || chunk.partialIndex < 0)) {\n throw new TypeError('image partialIndex must be a non-negative safe integer')\n }\n return\n case 'tool-call-delta':\n if (typeof chunk.id !== 'string' || chunk.id.length === 0\n || (chunk.name !== undefined && typeof chunk.name !== 'string')\n || typeof chunk.argumentsDelta !== 'string') {\n throw new TypeError('tool-call delta fields are invalid')\n }\n return\n case 'block-end':\n if (typeof chunk.block !== 'object' || chunk.block === null || typeof chunk.block.type !== 'string') {\n throw new TypeError('block-end must contain a content block')\n }\n validateContentBlock(chunk.block, maxBlockNodes)\n return\n case 'usage':\n validateUsageCount(chunk.usage.inputTokens, 'inputTokens')\n validateUsageCount(chunk.usage.outputTokens, 'outputTokens')\n for (const key of ['totalTokens', 'cacheReadTokens', 'cacheWriteTokens', 'reasoningTokens'] as const) {\n if (chunk.usage[key] !== undefined) validateUsageCount(chunk.usage[key], key)\n }\n return\n case 'finish':\n if (typeof chunk.reason !== 'object' || chunk.reason === null || typeof chunk.reason.kind !== 'string') {\n throw new TypeError('finish reason is invalid')\n }\n if ((chunk.reason.kind === 'error' || chunk.reason.kind === 'aborted')\n && (typeof chunk.reason.failure !== 'object' || chunk.reason.failure === null\n || typeof chunk.reason.failure.message !== 'string'\n || typeof chunk.reason.failure.code !== 'string')) {\n throw new TypeError('finish failure is invalid')\n }\n return\n default:\n throw new TypeError(`unknown chunk type '${String((chunk as { type?: unknown }).type)}'`)\n }\n}\n\nexport function validateContentBlock(root: ContentBlock, maxNodes: number): void {\n const pending: unknown[] = [root]\n let nodes = 0\n while (pending.length > 0) {\n const value = pending.pop()\n if (!record(value) || typeof value.type !== 'string' || value.type.length === 0) {\n throw new TypeError('content block must be an object with a non-empty type')\n }\n nodes++\n if (nodes > maxNodes) throw new TypeError(`content block tree exceeds ${maxNodes} nodes`)\n switch (value.type) {\n case 'text':\n if (typeof value.text !== 'string') throw new TypeError('text block text must be a string')\n if (value.phase !== undefined && value.phase !== 'commentary' && value.phase !== 'final-answer') {\n throw new TypeError('text block phase is invalid')\n }\n break\n case 'reasoning':\n if (typeof value.text !== 'string') throw new TypeError('reasoning block text must be a string')\n break\n case 'image':\n if (!record(value.source) || typeof value.source.kind !== 'string') {\n throw new TypeError('image block source is invalid')\n }\n if (value.source.kind === 'base64') {\n if (typeof value.source.data !== 'string' || typeof value.source.mediaType !== 'string') {\n throw new TypeError('base64 image source is invalid')\n }\n } else if (value.source.kind === 'url') {\n if (typeof value.source.url !== 'string') throw new TypeError('URL image source is invalid')\n } else if (value.source.kind === 'file') {\n if (typeof value.source.fileId !== 'string') throw new TypeError('file image source is invalid')\n } else {\n throw new TypeError('image source kind is invalid')\n }\n break\n case 'tool-call':\n if (typeof value.id !== 'string' || value.id.length === 0\n || typeof value.name !== 'string' || value.name.length === 0\n || typeof value.arguments !== 'string') {\n throw new TypeError('tool-call block fields are invalid')\n }\n break\n case 'tool-result':\n if (typeof value.toolCallId !== 'string' || value.toolCallId.length === 0\n || !Array.isArray(value.content)\n || (value.isError !== undefined && typeof value.isError !== 'boolean')) {\n throw new TypeError('tool-result block fields are invalid')\n }\n for (let index = value.content.length - 1; index >= 0; index--) pending.push(value.content[index])\n break\n case 'native-tool-call':\n if (typeof value.id !== 'string' || value.id.length === 0\n || typeof value.name !== 'string' || value.name.length === 0\n || (value.status !== undefined && typeof value.status !== 'string')\n || !Array.isArray(value.content)) {\n throw new TypeError('native-tool-call block fields are invalid')\n }\n for (let index = value.content.length - 1; index >= 0; index--) pending.push(value.content[index])\n break\n default:\n // ContentBlockMap is declaration-merge extensible. The core can only\n // validate the tags it owns; extension blocks remain adapter-defined.\n break\n }\n }\n}\n\nexport function record(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null && !Array.isArray(value)\n}\nexport function validateUsageCount(value: number, field: string): void {\n if (!Number.isSafeInteger(value) || value < 0) throw new TypeError(`usage ${field} must be a non-negative safe integer`)\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
import { ToolOutputOverflowPolicy } from "../tool/output-budget.js";
|
|
2
|
+
import { CompactionBackoffReason } from "../history/types.js";
|
|
3
|
+
import { AgentEvent, AgentMaintenanceEvent, AssistantContentTiming, BeforeStepContext, CheckpointContext, CompactionTrigger, ExhaustedBudget, RequestErrorContext, StepDecision, StreamedAssistantTextPhase, ToolDeclineReason, TurnEndContext, TurnEndReason, TurnHooks, TurnOutcome } from "./events.js";
|
|
4
|
+
//#region src/agent/loop/types.d.ts
|
|
5
|
+
interface TurnBounds {
|
|
6
|
+
/** Model steps before finalization; 'auto' removes only the step ceiling. */
|
|
7
|
+
readonly maxSteps: number | 'auto';
|
|
8
|
+
readonly maxToolCalls: number;
|
|
9
|
+
/**
|
|
10
|
+
* Remaining-call counts at which the turn tells the model how much is left.
|
|
11
|
+
*
|
|
12
|
+
* One reminder per threshold crossed, so a turn that keeps spending keeps
|
|
13
|
+
* being told — the shape Codex uses for its token budget. A single warning
|
|
14
|
+
* is not enough: warned once at a quarter left and still exploring at two,
|
|
15
|
+
* a model hits the wall with no notice and the turn ends in a failed tool
|
|
16
|
+
* call instead of an answer.
|
|
17
|
+
*
|
|
18
|
+
* Thresholds outside `1..maxToolCalls - 1` are ignored, so a list written
|
|
19
|
+
* for a larger budget stays valid. Empty disables the reminders.
|
|
20
|
+
*/
|
|
21
|
+
readonly toolBudgetRemindAt: readonly number[];
|
|
22
|
+
/**
|
|
23
|
+
* What a spent budget does to the turn.
|
|
24
|
+
*
|
|
25
|
+
* - `force-final-answer` (default) — stop dispatching and take one last model
|
|
26
|
+
* round for the answer.
|
|
27
|
+
* - `stop` — end the turn where it stands.
|
|
28
|
+
* - `continue` — the tool-call budget stops being a wall and becomes a
|
|
29
|
+
* notice: calls keep running, and the turn is bounded by `maxSteps`,
|
|
30
|
+
* `maxTotalTokens`, and the run-level ledger limits instead. This is the
|
|
31
|
+
* shape both reference harnesses use — neither fails a tool call to
|
|
32
|
+
* enforce a budget — and it is the right choice for long research or team
|
|
33
|
+
* work, where the useful call is often the last one. Step and loop-guard
|
|
34
|
+
* exhaustion still allows one tools-disabled summary. Token and run-level
|
|
35
|
+
* limits, or cancellation, never grant an extra model call.
|
|
36
|
+
*/
|
|
37
|
+
readonly onExhausted: 'force-final-answer' | 'stop' | 'continue';
|
|
38
|
+
readonly maxConsecutiveToolErrors: number;
|
|
39
|
+
/** Consecutive identical calls before a corrective reminder. */
|
|
40
|
+
readonly repeatToolWarningAt: number;
|
|
41
|
+
/** Consecutive identical calls before declining further repetition. */
|
|
42
|
+
readonly repeatToolLimit: number;
|
|
43
|
+
/** Repeated step-pattern cycles before a corrective reminder is injected. */
|
|
44
|
+
readonly toolCycleWarningAt: number;
|
|
45
|
+
/** Repeated step-pattern cycles before further calls in the cycle are declined. */
|
|
46
|
+
readonly toolCycleLimit: number;
|
|
47
|
+
/** Longest repeating sequence of tool-call steps inspected for cycles. */
|
|
48
|
+
readonly maxToolCycleLength: number;
|
|
49
|
+
/** Maximum aggregate model tokens per turn. Default 'auto' imposes no total-token ceiling. */
|
|
50
|
+
readonly maxTotalTokens: number | 'auto';
|
|
51
|
+
/** Stop tool work this many tokens before the hard total to reserve a report.
|
|
52
|
+
* Ignored with maxTotalTokens: 'auto'. Zero disables the reserve. */
|
|
53
|
+
readonly finalReportReserveTokens: number;
|
|
54
|
+
readonly maxParallel: number;
|
|
55
|
+
/** Maximum serialized bytes retained for one finalized tool result. */
|
|
56
|
+
readonly maxToolResultBytes: number;
|
|
57
|
+
/**
|
|
58
|
+
* Estimated tokens of text ONE tool result may put in front of the model.
|
|
59
|
+
*
|
|
60
|
+
* Defaults to 10,000, the same allowance Codex gives a shell call. The byte
|
|
61
|
+
* cap above is a storage bound measured in megabytes; this is the context
|
|
62
|
+
* bound, and it is the one that decides whether a turn survives a `cat` of a
|
|
63
|
+
* generated file. A tool may lower its own share with
|
|
64
|
+
* `ToolDefinition.maxOutputTokens`.
|
|
65
|
+
*/
|
|
66
|
+
readonly maxToolResultTokens: number;
|
|
67
|
+
/**
|
|
68
|
+
* What happens to a result over that budget. Defaults to `auto`.
|
|
69
|
+
*
|
|
70
|
+
* `auto` spills when a store is mounted and truncates when none is, so the
|
|
71
|
+
* cheap path works everywhere and the lossless one turns itself on the
|
|
72
|
+
* moment it can.
|
|
73
|
+
*/
|
|
74
|
+
readonly toolResultOverflow: ToolOutputOverflowPolicy;
|
|
75
|
+
/** End-to-end wall-clock allowance for one tool call. */
|
|
76
|
+
readonly maxToolDurationMs: number;
|
|
77
|
+
/** Maximum wait after canceling an uncooperative in-process tool. */
|
|
78
|
+
readonly toolTeardownTimeoutMs: number;
|
|
79
|
+
}
|
|
80
|
+
//#endregion
|
|
81
|
+
export { type AgentEvent, type AssistantContentTiming, type BeforeStepContext, type CheckpointContext, type CompactionBackoffReason, type ExhaustedBudget, type RequestErrorContext, type StepDecision, type StreamedAssistantTextPhase, TurnBounds, type TurnEndContext, type TurnEndReason, type TurnHooks, type TurnOutcome };
|
|
82
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","names":[],"sources":["../../../src/agent/loop/types.ts"],"mappings":";;;;UAQiB;;WAEN;WACA;;;;;;;;;;;;;WAaA;;;;;;;;;;;;;;;;WAgBA;WACA;;WAEA;;WAEA;;WAEA;;WAEA;;WAEA;;WAEA;;;WAGA;WACA;;WAEA;;;;;;;;;;WAUA;;;;;;;;WAQA,oBAAoB;;WAEpB;;WAEA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"accounting-binding.js","names":[],"sources":["../../../src/agent/memory/accounting-binding.ts"],"sourcesContent":["import type { RunAccountingPort } from '../accounting/contracts.ts'\n\nconst bindings = new WeakMap<object, RunAccountingPort>()\n\n/** Internal session seam: compaction maintenance joins the owning run ledger. */\nexport function bindCompactionAccounting(owner: object, accounting: RunAccountingPort | undefined): void {\n if (accounting === undefined) bindings.delete(owner)\n else bindings.set(owner, accounting)\n}\n\nexport function compactionAccounting(owner: object): RunAccountingPort | undefined {\n return bindings.get(owner)\n}\n"],"mappings":"AAEA,MAAM,EAAW,IAAI,QAGrB,SAAgB,EAAyB,EAAe,EAAiD,CACnG,IAAe,IAAA,GAAW,EAAS,OAAO,CAAK,EAC9C,EAAS,IAAI,EAAO,CAAU,CACrC,CAEA,SAAgB,EAAqB,EAA8C,CACjF,OAAO,EAAS,IAAI,CAAK,CAC3B"}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
//#region src/agent/memory/compaction-config.d.ts
|
|
2
|
+
interface AgentCompactionOptions {
|
|
3
|
+
/** Run pressure checks before model steps. Defaults to true. */
|
|
4
|
+
readonly auto?: boolean;
|
|
5
|
+
/** Absolute request threshold. When omitted, thresholdRatio uses model metadata. */
|
|
6
|
+
readonly maxInputTokens?: number;
|
|
7
|
+
/** Fraction of the model context window that triggers compaction. Defaults to 0.8. */
|
|
8
|
+
readonly thresholdRatio?: number;
|
|
9
|
+
/** Recent context retained verbatim as a fraction of the context window. Defaults to 0.2. */
|
|
10
|
+
readonly retainRatio?: number;
|
|
11
|
+
/** Absolute recent-context budget; mutually exclusive with retainRatio. */
|
|
12
|
+
readonly retainTokens?: number;
|
|
13
|
+
readonly summarizationProvider?: string;
|
|
14
|
+
readonly summarizationModel?: string;
|
|
15
|
+
readonly summarizationEffort?: string;
|
|
16
|
+
/** Provider output cap for the checkpoint call. Defaults to 4096. */
|
|
17
|
+
readonly maxSummaryTokens?: number;
|
|
18
|
+
/** Additional pressure compactions attempted at one step. Defaults to 1. */
|
|
19
|
+
readonly compactionRetries?: number;
|
|
20
|
+
/** Retries after a canonical context-window error. Defaults to 1. */
|
|
21
|
+
readonly maxOverflowRetries?: number;
|
|
22
|
+
/** Per-block character cap in the summarizer replay. Defaults to 12,000. */
|
|
23
|
+
readonly maxSummaryInputChars?: number;
|
|
24
|
+
/** Cumulative replay payload characters sent to the summarizer. Defaults to 256,000. */
|
|
25
|
+
readonly maxSummaryRequestChars?: number;
|
|
26
|
+
/** Maximum serialized summarizer request bytes, including schemas/system text. Defaults to 32 MiB. */
|
|
27
|
+
readonly maxSummaryRequestBytes?: number;
|
|
28
|
+
/** Maximum serialized response bytes accepted from the summarizer. Defaults to 8 MiB. */
|
|
29
|
+
readonly maxSummaryResponseBytes?: number;
|
|
30
|
+
/** Maximum chunks accepted from the summarizer. Defaults to 50,000. */
|
|
31
|
+
readonly maxSummaryStreamEvents?: number;
|
|
32
|
+
/** Total summarizer/model-metadata deadline. Defaults to 10 minutes. */
|
|
33
|
+
readonly summaryTimeoutMs?: number;
|
|
34
|
+
/** Maximum wait for a non-cooperative summarizer teardown. Defaults to 30 seconds. */
|
|
35
|
+
readonly teardownTimeoutMs?: number;
|
|
36
|
+
/** Text retained in each model-visible tool result before summary selection. Defaults to 24,000. */
|
|
37
|
+
readonly maxToolResultChars?: number;
|
|
38
|
+
}
|
|
39
|
+
interface AgentCompactionConfig {
|
|
40
|
+
readonly auto: boolean;
|
|
41
|
+
readonly maxInputTokens: number | undefined;
|
|
42
|
+
readonly thresholdRatio: number;
|
|
43
|
+
readonly retainRatio: number | undefined;
|
|
44
|
+
readonly retainTokens: number | undefined;
|
|
45
|
+
readonly summarizationProvider: string | undefined;
|
|
46
|
+
readonly summarizationModel: string | undefined;
|
|
47
|
+
readonly summarizationEffort: string | undefined;
|
|
48
|
+
readonly maxSummaryTokens: number;
|
|
49
|
+
readonly compactionRetries: number;
|
|
50
|
+
readonly maxOverflowRetries: number;
|
|
51
|
+
readonly maxSummaryInputChars: number;
|
|
52
|
+
readonly maxSummaryRequestChars: number;
|
|
53
|
+
readonly maxSummaryRequestBytes: number;
|
|
54
|
+
readonly maxSummaryResponseBytes: number;
|
|
55
|
+
readonly maxSummaryStreamEvents: number;
|
|
56
|
+
readonly summaryTimeoutMs: number;
|
|
57
|
+
readonly teardownTimeoutMs: number;
|
|
58
|
+
readonly maxToolResultChars: number;
|
|
59
|
+
}
|
|
60
|
+
declare function resolveCompactionConfig(input: AgentCompactionOptions | undefined): AgentCompactionConfig;
|
|
61
|
+
//#endregion
|
|
62
|
+
export { AgentCompactionConfig, AgentCompactionOptions, resolveCompactionConfig };
|
|
63
|
+
//# sourceMappingURL=compaction-config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"compaction-config.d.ts","names":[],"sources":["../../../src/agent/memory/compaction-config.ts"],"mappings":";UAGiB;;WAEN;;WAEA;;WAEA;;WAEA;;WAEA;WACA;WACA;WACA;;WAEA;;WAEA;;WAEA;;WAEA;;WAEA;;WAEA;;WAEA;;WAEA;;WAEA;;WAEA;;WAEA;;UAGM;WACN;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;;iBAGK,wBAAwB,OAAO,qCAAqC"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{timeoutValue as e}from"../../platform/config.js";function t(t){if(t?.retainRatio!==void 0&&t.retainTokens!==void 0)throw TypeError(`agent compaction retainRatio and retainTokens are mutually exclusive`);if(t?.summarizationProvider===void 0!=(t?.summarizationModel===void 0))throw TypeError(`agent compaction summarizationProvider and summarizationModel must be set together`);let c=n(t?.thresholdRatio??.8,`thresholdRatio`),l=t?.retainTokens===void 0?n(t?.retainRatio??.2,`retainRatio`):void 0;if(l!==void 0&&l>=c)throw RangeError(`agent compaction retainRatio must be lower than thresholdRatio`);return Object.freeze({auto:t?.auto??!0,maxInputTokens:a(t?.maxInputTokens,`maxInputTokens`),thresholdRatio:c,retainRatio:l,retainTokens:o(t?.retainTokens,`retainTokens`),summarizationProvider:s(t?.summarizationProvider,`summarizationProvider`),summarizationModel:s(t?.summarizationModel,`summarizationModel`),summarizationEffort:s(t?.summarizationEffort,`summarizationEffort`),maxSummaryTokens:r(t?.maxSummaryTokens??4096,`maxSummaryTokens`),compactionRetries:i(t?.compactionRetries??1,`compactionRetries`),maxOverflowRetries:i(t?.maxOverflowRetries??1,`maxOverflowRetries`),maxSummaryInputChars:r(t?.maxSummaryInputChars??12e3,`maxSummaryInputChars`),maxSummaryRequestChars:r(t?.maxSummaryRequestChars??256e3,`maxSummaryRequestChars`),maxSummaryRequestBytes:r(t?.maxSummaryRequestBytes??33554432,`maxSummaryRequestBytes`),maxSummaryResponseBytes:r(t?.maxSummaryResponseBytes??8388608,`maxSummaryResponseBytes`),maxSummaryStreamEvents:r(t?.maxSummaryStreamEvents??5e4,`maxSummaryStreamEvents`),summaryTimeoutMs:e(t?.summaryTimeoutMs??6e5),teardownTimeoutMs:e(t?.teardownTimeoutMs??3e4),maxToolResultChars:r(t?.maxToolResultChars??24e3,`maxToolResultChars`)})}function n(e,t){if(!Number.isFinite(e)||e<=0||e>=1)throw RangeError(`agent compaction ${t} must be > 0 and < 1`);return e}function r(e,t){if(!Number.isSafeInteger(e)||e<1)throw RangeError(`agent compaction ${t} must be a positive safe integer`);return e}function i(e,t){if(!Number.isSafeInteger(e)||e<0)throw RangeError(`agent compaction ${t} must be a non-negative safe integer`);return e}function a(e,t){return e===void 0?void 0:r(e,t)}function o(e,t){return e===void 0?void 0:i(e,t)}function s(e,t){if(e!==void 0&&e.trim().length===0)throw TypeError(`agent compaction ${t} must be non-empty`);return e}export{t as resolveCompactionConfig};
|
|
2
|
+
//# sourceMappingURL=compaction-config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"compaction-config.js","names":[],"sources":["../../../src/agent/memory/compaction-config.ts"],"sourcesContent":["/** Validated policy for automatic and manual context compaction. */\nimport { timeoutValue } from '../../platform/config.ts'\n\nexport interface AgentCompactionOptions {\n /** Run pressure checks before model steps. Defaults to true. */\n readonly auto?: boolean\n /** Absolute request threshold. When omitted, thresholdRatio uses model metadata. */\n readonly maxInputTokens?: number\n /** Fraction of the model context window that triggers compaction. Defaults to 0.8. */\n readonly thresholdRatio?: number\n /** Recent context retained verbatim as a fraction of the context window. Defaults to 0.2. */\n readonly retainRatio?: number\n /** Absolute recent-context budget; mutually exclusive with retainRatio. */\n readonly retainTokens?: number\n readonly summarizationProvider?: string\n readonly summarizationModel?: string\n readonly summarizationEffort?: string\n /** Provider output cap for the checkpoint call. Defaults to 4096. */\n readonly maxSummaryTokens?: number\n /** Additional pressure compactions attempted at one step. Defaults to 1. */\n readonly compactionRetries?: number\n /** Retries after a canonical context-window error. Defaults to 1. */\n readonly maxOverflowRetries?: number\n /** Per-block character cap in the summarizer replay. Defaults to 12,000. */\n readonly maxSummaryInputChars?: number\n /** Cumulative replay payload characters sent to the summarizer. Defaults to 256,000. */\n readonly maxSummaryRequestChars?: number\n /** Maximum serialized summarizer request bytes, including schemas/system text. Defaults to 32 MiB. */\n readonly maxSummaryRequestBytes?: number\n /** Maximum serialized response bytes accepted from the summarizer. Defaults to 8 MiB. */\n readonly maxSummaryResponseBytes?: number\n /** Maximum chunks accepted from the summarizer. Defaults to 50,000. */\n readonly maxSummaryStreamEvents?: number\n /** Total summarizer/model-metadata deadline. Defaults to 10 minutes. */\n readonly summaryTimeoutMs?: number\n /** Maximum wait for a non-cooperative summarizer teardown. Defaults to 30 seconds. */\n readonly teardownTimeoutMs?: number\n /** Text retained in each model-visible tool result before summary selection. Defaults to 24,000. */\n readonly maxToolResultChars?: number\n}\n\nexport interface AgentCompactionConfig {\n readonly auto: boolean\n readonly maxInputTokens: number | undefined\n readonly thresholdRatio: number\n readonly retainRatio: number | undefined\n readonly retainTokens: number | undefined\n readonly summarizationProvider: string | undefined\n readonly summarizationModel: string | undefined\n readonly summarizationEffort: string | undefined\n readonly maxSummaryTokens: number\n readonly compactionRetries: number\n readonly maxOverflowRetries: number\n readonly maxSummaryInputChars: number\n readonly maxSummaryRequestChars: number\n readonly maxSummaryRequestBytes: number\n readonly maxSummaryResponseBytes: number\n readonly maxSummaryStreamEvents: number\n readonly summaryTimeoutMs: number\n readonly teardownTimeoutMs: number\n readonly maxToolResultChars: number\n}\n\nexport function resolveCompactionConfig(input: AgentCompactionOptions | undefined): AgentCompactionConfig {\n if (input?.retainRatio !== undefined && input.retainTokens !== undefined) {\n throw new TypeError('agent compaction retainRatio and retainTokens are mutually exclusive')\n }\n if ((input?.summarizationProvider === undefined) !== (input?.summarizationModel === undefined)) {\n throw new TypeError('agent compaction summarizationProvider and summarizationModel must be set together')\n }\n const thresholdRatio = ratio(input?.thresholdRatio ?? 0.8, 'thresholdRatio')\n const retainRatio = input?.retainTokens === undefined\n ? ratio(input?.retainRatio ?? 0.2, 'retainRatio')\n : undefined\n if (retainRatio !== undefined && retainRatio >= thresholdRatio) {\n throw new RangeError('agent compaction retainRatio must be lower than thresholdRatio')\n }\n return Object.freeze({\n auto: input?.auto ?? true,\n maxInputTokens: optionalPositiveInteger(input?.maxInputTokens, 'maxInputTokens'),\n thresholdRatio,\n retainRatio,\n retainTokens: optionalNonNegativeInteger(input?.retainTokens, 'retainTokens'),\n summarizationProvider: optionalNonEmpty(input?.summarizationProvider, 'summarizationProvider'),\n summarizationModel: optionalNonEmpty(input?.summarizationModel, 'summarizationModel'),\n summarizationEffort: optionalNonEmpty(input?.summarizationEffort, 'summarizationEffort'),\n maxSummaryTokens: positiveInteger(input?.maxSummaryTokens ?? 4096, 'maxSummaryTokens'),\n compactionRetries: nonNegativeInteger(input?.compactionRetries ?? 1, 'compactionRetries'),\n maxOverflowRetries: nonNegativeInteger(input?.maxOverflowRetries ?? 1, 'maxOverflowRetries'),\n maxSummaryInputChars: positiveInteger(input?.maxSummaryInputChars ?? 12_000, 'maxSummaryInputChars'),\n maxSummaryRequestChars: positiveInteger(input?.maxSummaryRequestChars ?? 256_000, 'maxSummaryRequestChars'),\n maxSummaryRequestBytes: positiveInteger(input?.maxSummaryRequestBytes ?? 32 * 1024 * 1024, 'maxSummaryRequestBytes'),\n maxSummaryResponseBytes: positiveInteger(input?.maxSummaryResponseBytes ?? 8 * 1024 * 1024, 'maxSummaryResponseBytes'),\n maxSummaryStreamEvents: positiveInteger(input?.maxSummaryStreamEvents ?? 50_000, 'maxSummaryStreamEvents'),\n summaryTimeoutMs: timeoutValue(input?.summaryTimeoutMs ?? 10 * 60_000),\n teardownTimeoutMs: timeoutValue(input?.teardownTimeoutMs ?? 30_000),\n maxToolResultChars: positiveInteger(input?.maxToolResultChars ?? 24_000, 'maxToolResultChars'),\n })\n}\n\nfunction ratio(value: number, name: string): number {\n if (!Number.isFinite(value) || value <= 0 || value >= 1) {\n throw new RangeError(`agent compaction ${name} must be > 0 and < 1`)\n }\n return value\n}\nfunction positiveInteger(value: number, name: string): number {\n if (!Number.isSafeInteger(value) || value < 1) {\n throw new RangeError(`agent compaction ${name} must be a positive safe integer`)\n }\n return value\n}\nfunction nonNegativeInteger(value: number, name: string): number {\n if (!Number.isSafeInteger(value) || value < 0) {\n throw new RangeError(`agent compaction ${name} must be a non-negative safe integer`)\n }\n return value\n}\nfunction optionalPositiveInteger(value: number | undefined, name: string): number | undefined {\n return value === undefined ? undefined : positiveInteger(value, name)\n}\nfunction optionalNonNegativeInteger(value: number | undefined, name: string): number | undefined {\n return value === undefined ? undefined : nonNegativeInteger(value, name)\n}\nfunction optionalNonEmpty(value: string | undefined, name: string): string | undefined {\n if (value !== undefined && value.trim().length === 0) {\n throw new TypeError(`agent compaction ${name} must be non-empty`)\n }\n return value\n}\n"],"mappings":"wDA+DA,SAAgB,EAAwB,EAAkE,CACxG,GAAI,GAAO,cAAgB,IAAA,IAAa,EAAM,eAAiB,IAAA,GAC7D,MAAU,UAAU,sEAAsE,EAE5F,GAAK,GAAO,wBAA0B,IAAA,KAAgB,GAAO,qBAAuB,IAAA,IAClF,MAAU,UAAU,oFAAoF,EAE1G,IAAM,EAAiB,EAAM,GAAO,gBAAkB,GAAK,gBAAgB,EACrE,EAAc,GAAO,eAAiB,IAAA,GACxC,EAAM,GAAO,aAAe,GAAK,aAAa,EAC9C,IAAA,GACJ,GAAI,IAAgB,IAAA,IAAa,GAAe,EAC9C,MAAU,WAAW,gEAAgE,EAEvF,OAAO,OAAO,OAAO,CACnB,KAAM,GAAO,MAAQ,GACrB,eAAgB,EAAwB,GAAO,eAAgB,gBAAgB,EAC/E,iBACA,cACA,aAAc,EAA2B,GAAO,aAAc,cAAc,EAC5E,sBAAuB,EAAiB,GAAO,sBAAuB,uBAAuB,EAC7F,mBAAoB,EAAiB,GAAO,mBAAoB,oBAAoB,EACpF,oBAAqB,EAAiB,GAAO,oBAAqB,qBAAqB,EACvF,iBAAkB,EAAgB,GAAO,kBAAoB,KAAM,kBAAkB,EACrF,kBAAmB,EAAmB,GAAO,mBAAqB,EAAG,mBAAmB,EACxF,mBAAoB,EAAmB,GAAO,oBAAsB,EAAG,oBAAoB,EAC3F,qBAAsB,EAAgB,GAAO,sBAAwB,KAAQ,sBAAsB,EACnG,uBAAwB,EAAgB,GAAO,wBAA0B,MAAS,wBAAwB,EAC1G,uBAAwB,EAAgB,GAAO,wBAA0B,SAAkB,wBAAwB,EACnH,wBAAyB,EAAgB,GAAO,yBAA2B,QAAiB,yBAAyB,EACrH,uBAAwB,EAAgB,GAAO,wBAA0B,IAAQ,wBAAwB,EACzG,iBAAkB,EAAa,GAAO,kBAAoB,GAAW,EACrE,kBAAmB,EAAa,GAAO,mBAAqB,GAAM,EAClE,mBAAoB,EAAgB,GAAO,oBAAsB,KAAQ,oBAAoB,CAC/F,CAAC,CACH,CAEA,SAAS,EAAM,EAAe,EAAsB,CAClD,GAAI,CAAC,OAAO,SAAS,CAAK,GAAK,GAAS,GAAK,GAAS,EACpD,MAAU,WAAW,oBAAoB,EAAK,qBAAqB,EAErE,OAAO,CACT,CACA,SAAS,EAAgB,EAAe,EAAsB,CAC5D,GAAI,CAAC,OAAO,cAAc,CAAK,GAAK,EAAQ,EAC1C,MAAU,WAAW,oBAAoB,EAAK,iCAAiC,EAEjF,OAAO,CACT,CACA,SAAS,EAAmB,EAAe,EAAsB,CAC/D,GAAI,CAAC,OAAO,cAAc,CAAK,GAAK,EAAQ,EAC1C,MAAU,WAAW,oBAAoB,EAAK,qCAAqC,EAErF,OAAO,CACT,CACA,SAAS,EAAwB,EAA2B,EAAkC,CAC5F,OAAO,IAAU,IAAA,GAAY,IAAA,GAAY,EAAgB,EAAO,CAAI,CACtE,CACA,SAAS,EAA2B,EAA2B,EAAkC,CAC/F,OAAO,IAAU,IAAA,GAAY,IAAA,GAAY,EAAmB,EAAO,CAAI,CACzE,CACA,SAAS,EAAiB,EAA2B,EAAkC,CACrF,GAAI,IAAU,IAAA,IAAa,EAAM,KAAK,CAAC,CAAC,SAAW,EACjD,MAAU,UAAU,oBAAoB,EAAK,mBAAmB,EAElE,OAAO,CACT"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import { TokenUsage } from "../../stream/chunk.js";
|
|
2
|
+
import { Message } from "../../message/message.js";
|
|
3
|
+
import { ModelToolSchema } from "../../contract/tool.js";
|
|
4
|
+
import { CallConfig } from "../../contract/call-config.js";
|
|
5
|
+
import { CompactionBackoffReason } from "../history/types.js";
|
|
6
|
+
import { History } from "../history/history.js";
|
|
7
|
+
import { BeforeStepContext, CompactionTrigger, RequestErrorContext } from "../loop/events.js";
|
|
8
|
+
import { ModelRegistry } from "../../runtime/registry.js";
|
|
9
|
+
import { AgentCompactionConfig } from "./compaction-config.js";
|
|
10
|
+
import { RunReport } from "../accounting/delivery-types.js";
|
|
11
|
+
//#region src/agent/memory/compaction.d.ts
|
|
12
|
+
interface CompactionResult {
|
|
13
|
+
readonly compactionId: string;
|
|
14
|
+
readonly trigger: CompactionTrigger;
|
|
15
|
+
readonly summary: string;
|
|
16
|
+
readonly shadowedSeqs: readonly number[];
|
|
17
|
+
readonly estimatedTokensBefore: number;
|
|
18
|
+
readonly estimatedTokensAfter: number;
|
|
19
|
+
readonly thresholdTokens?: number;
|
|
20
|
+
readonly estimatedNonCompactableTokens: number;
|
|
21
|
+
readonly backoffReason?: CompactionBackoffReason;
|
|
22
|
+
readonly cooldownSteps?: number;
|
|
23
|
+
readonly provider: string;
|
|
24
|
+
readonly model: string;
|
|
25
|
+
readonly usage?: TokenUsage;
|
|
26
|
+
/** Additive runtime projection; absent on the preserved low-level compactor path. */
|
|
27
|
+
readonly status?: 'completed';
|
|
28
|
+
readonly report?: RunReport;
|
|
29
|
+
}
|
|
30
|
+
interface ContextCompactorOptions {
|
|
31
|
+
readonly registry: ModelRegistry;
|
|
32
|
+
readonly config: CallConfig;
|
|
33
|
+
readonly history: () => History;
|
|
34
|
+
readonly system: () => string;
|
|
35
|
+
readonly pinnedMessages?: () => readonly Message[];
|
|
36
|
+
readonly tools: () => readonly ModelToolSchema[];
|
|
37
|
+
readonly policy: AgentCompactionConfig;
|
|
38
|
+
}
|
|
39
|
+
declare const COMPACTION_INSTRUCTION: string;
|
|
40
|
+
declare class ContextCompactor {
|
|
41
|
+
private readonly input;
|
|
42
|
+
private active;
|
|
43
|
+
private overflowTurn;
|
|
44
|
+
private overflowRetries;
|
|
45
|
+
private recoveringOverflow;
|
|
46
|
+
private modelBudget;
|
|
47
|
+
private pressureCooldown;
|
|
48
|
+
constructor(input: ContextCompactorOptions);
|
|
49
|
+
/** Fail-open pressure maintenance for a pre-step hook. */
|
|
50
|
+
beforeStep(context: BeforeStepContext): Promise<void>;
|
|
51
|
+
/** Compact and retry only when a provider confirmed context overflow. */
|
|
52
|
+
onRequestError(context: RequestErrorContext): Promise<'retry' | undefined>;
|
|
53
|
+
/** Explicit idle-session checkpoint even below automatic pressure. */
|
|
54
|
+
compactNow(signal?: AbortSignal): Promise<CompactionResult | null>;
|
|
55
|
+
private compactIfNeeded;
|
|
56
|
+
private resolveBudget;
|
|
57
|
+
private emitObserver;
|
|
58
|
+
private summarize;
|
|
59
|
+
}
|
|
60
|
+
//#endregion
|
|
61
|
+
export { COMPACTION_INSTRUCTION, CompactionResult, ContextCompactor, ContextCompactorOptions };
|
|
62
|
+
//# sourceMappingURL=compaction.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"compaction.d.ts","names":[],"sources":["../../../src/agent/memory/compaction.ts"],"mappings":";;;;;;;;;;;UAuBiB;WACN;WACA,SAAS;WACT;WACA;WACA;WACA;WACA;WACA;WACA,gBAAgB;WAChB;WACA;WACA;WACA,QAAQ;;WAER;WACA,SAAS;;UAGH;WACN,UAAU;WACV,QAAQ;WACR,eAAe;WACf;WACA,gCAAgC;WAChC,sBAAsB;WACtB,QAAQ;;cAiBN;cAyBA;mBACM;UACT;UACA;UACA;UACA;UACA;UAIA;EAER,YAAY,OAAO;;EAKb,WAAW,SAAS,oBAAoB;;EA2CxC,eAAe,SAAS,sBAAsB;;EAmB9C,WAAW,SAAS,cAAc,QAAQ;UAOlC;UA8JA;UA4CA;UASA"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import{ReasoningEffortId as e}from"../../primitives/brand.js";import{waitForSettlement as t}from"../../async/settlement.js";import{systemRandomId as n}from"../../platform/adapter.js";import{createMessage as r,createUserMessage as i}from"../../message/message.js";import{BlockAssembler as a}from"../../stream/assembler.js";import{normalizeToolPairing as o}from"../history/normalize.js";import{compactionAccounting as s}from"./accounting-binding.js";import{estimateContextTokens as c,estimateMessageTokens as l}from"./token-estimator.js";import{pruneToolResults as u,selectCompactablePrefix as d}from"./surface-compaction.js";const f=[`You are performing a CONTEXT CHECKPOINT COMPACTION for a long-running AI agent task.`,`Condense the conversation above into a handoff that lets another model continue without forgetting the original purpose.`,``,`Output exactly these Markdown sections, in order, using terse bullets. Write "(none)" for an empty section.`,`## Primary Request and Intent`,`## Progress and Completed Work`,`## Decisions and Rationale`,`## Constraints and User Preferences`,`## Important Files, Symbols, and Evidence`,`## Errors and Failed Approaches`,`## Pending Work`,`## Current Work`,`## Next Step`,`## Critical Context`,``,`Preserve exact paths, identifiers, commands, error strings, numeric limits, and user corrections when they matter.`,`Under Important Files, mark relevant files as inspected or modified and preserve the exact declarations or findings needed next.`,`Under Current Work, record the last successful tool action, the latest verification result, and whether any edit is still partial.`,`Under Next Step, name one direct edit or command. Do not recommend rereading an unchanged file whose relevant contents are already recorded.`,`Do not reveal hidden chain-of-thought. Record only public progress, observed evidence, decisions, and actionable context.`,`If an earlier <compacted-summary> exists, merge still-valid facts with newer information and drop stale facts.`,`Output only the checkpoint. Do not call tools and do not acknowledge the compaction.`].join(`
|
|
2
|
+
`);var p=class{input;active=!1;overflowTurn=-1;overflowRetries=0;recoveringOverflow=!1;modelBudget;pressureCooldown=0;constructor(e){this.input=e}async beforeStep(e){if(!(!this.input.policy.auto||e.signal.aborted)){if(this.pressureCooldown>0){this.pressureCooldown--;return}this.overflowTurn===e.turn?this.recoveringOverflow||(this.overflowRetries=0):(this.overflowTurn=e.turn,this.overflowRetries=0),this.recoveringOverflow=!1;try{let t;for(let n=0;n<=this.input.policy.compactionRetries;n++){let n=await this.compactIfNeeded(`pressure`,e.signal,e.emit);if(n===null)break;if(t=n,n.backoffReason!==void 0){this.pressureCooldown=n.cooldownSteps??4;break}}t!==void 0&&t.thresholdTokens!==void 0&&t.estimatedTokensAfter>=t.thresholdTokens&&(this.pressureCooldown=Math.max(this.pressureCooldown,4))}catch{this.pressureCooldown=2}}}async onRequestError(e){if(!(e.failure.code!==`CONTEXT_WINDOW_EXCEEDED`||e.signal.aborted)&&(this.overflowTurn!==e.turn&&(this.overflowTurn=e.turn,this.overflowRetries=0),!(this.overflowRetries>=this.input.policy.maxOverflowRetries)))try{return await this.compactIfNeeded(`context-overflow`,e.signal,e.emit)===null||e.signal.aborted?void 0:(this.overflowRetries++,this.recoveringOverflow=!0,`retry`)}catch{return}}async compactNow(e){let t=e===void 0?new AbortController:void 0,n=e??t?.signal;if(n===void 0)throw Error(`failed to create compaction signal`);return this.compactIfNeeded(`manual`,n)}async compactIfNeeded(e,t,n){if(this.active)return null;let r=AbortSignal.timeout(this.input.policy.summaryTimeoutMs),a=AbortSignal.any([t,r]);a.throwIfAborted(),this.active=!0;try{let o=this.input.history(),s=o.surface();if(s.length<2)return null;let f=this.input.tools(),p=this.input.system(),m=this.input.pinnedMessages?.()??[],h=c({system:p,messages:[...m,...s.map(e=>e.message)],tools:f}),g=await this.resolveBudget(h,a);if(a.throwIfAborted(),e===`pressure`&&(g===null||h<g.thresholdTokens))return null;if(u(o,s,this.input.policy.maxToolResultChars)>0){if(s=o.surface(),h=c({system:p,messages:[...m,...s.map(e=>e.message)],tools:f}),e===`pressure`&&g!==null&&h<g.thresholdTokens)return null;g=await this.resolveBudget(h,a),a.throwIfAborted()}let _=e===`context-overflow`?Math.max(1,l(s.at(-1)?.message)):g?.retainTokens??Math.max(1,Math.floor(h*.25)),v=d(s,_);if(v.length===0)return null;let y=new Set(v.map(e=>e.seq)),C=c({system:p,messages:[...m,...s.filter(e=>!y.has(e.seq)).map(e=>e.message)],tools:f}),w=b(),T=new Date().toISOString();o.append({kind:`compaction-start`,compactionId:w,trigger:e,at:T});try{await this.emitObserver(n,{type:`compaction-start`,compactionId:w,trigger:e,estimatedInputTokens:h});let t=await this.summarize([...m,...v.map(e=>e.message)],p,f,a);a.throwIfAborted();let r=i({source:{kind:`app`,producer:`agent-compaction:${w}`},content:[{type:`text`,text:`This is an automatically generated checkpoint of earlier conversation context. Treat it as established background, preserve the original objective and constraints, and continue directly from the messages that follow.\n\n<compacted-summary>\n${t.summary}\n</compacted-summary>`}]}),s=v.reduce((e,t)=>e+l(t.message),0),c=l(r);if(c>=s)throw Error(`compaction summary did not shrink selected context (${c} >= ${s} estimated tokens)`);let u=Object.freeze(v.map(e=>e.seq)),d=Math.max(0,h-s+c),_=g?.thresholdTokens,y=O({trigger:e,thresholdTokens:_,estimatedTokensBefore:h,estimatedTokensAfter:d,estimatedNonCompactableTokens:C});o.appendBatch([{event:{kind:`compaction-summary`,compactionId:w,summary:t.summary,shadowedSeqs:u,estimatedTokensBefore:h,estimatedTokensAfter:d,provider:t.provider,model:t.model,...t.usage===void 0?{}:{usage:t.usage}}},{event:{kind:`user`,message:r},surfaceOp:{op:`replace`,from:Math.min(...u),to:Math.max(...u),targets:u}},{event:{kind:`compaction-end`,compactionId:w,status:`completed`,at:new Date().toISOString(),..._===void 0?{}:{thresholdTokens:_},estimatedNonCompactableTokens:C,...y===void 0?{}:{backoffReason:y,cooldownSteps:4}}}]);let b=Object.freeze({compactionId:w,trigger:e,summary:t.summary,shadowedSeqs:u,estimatedTokensBefore:h,estimatedTokensAfter:d,..._===void 0?{}:{thresholdTokens:_},estimatedNonCompactableTokens:C,...y===void 0?{}:{backoffReason:y,cooldownSteps:4},provider:t.provider,model:t.model,...t.usage===void 0?{}:{usage:t.usage}});return await this.emitObserver(n,{type:`compaction-end`,compactionId:w,trigger:e,status:`completed`,shadowedSeqs:u,estimatedTokensBefore:h,estimatedTokensAfter:d,summary:t.summary,..._===void 0?{}:{thresholdTokens:_},estimatedNonCompactableTokens:C,...y===void 0?{}:{backoffReason:y,cooldownSteps:4},...t.usage===void 0?{}:{usage:t.usage}}),b}catch(i){let a=r.aborted&&!t.aborted&&S(i)!==`MODEL_TEARDOWN_TIMEOUT`?E(this.input.policy.summaryTimeoutMs,i):i,s=x(a);try{o.append({kind:`compaction-end`,compactionId:w,status:`failed`,at:new Date().toISOString(),error:s})}catch{}throw await this.emitObserver(n,{type:`compaction-end`,compactionId:w,trigger:e,status:`failed`,shadowedSeqs:[],estimatedTokensBefore:h,estimatedTokensAfter:h,error:s}),a}}finally{this.active=!1}}async resolveBudget(e,t){let n=this.input.policy;if(this.modelBudget===void 0)try{let e=await D(this.input.registry.resolveModelInfo(this.input.config.provider,this.input.config.model,t),t),n=e.context?.contextWindow;this.modelBudget=n===void 0?null:{contextWindow:n,outputReserve:this.input.config.maxTokens??e.defaultMaxTokens??e.maxOutputTokens??0}}catch{if(n.maxInputTokens===void 0)return null;this.modelBudget=null}let r=this.modelBudget?.contextWindow,i=r===void 0?void 0:Math.max(1,r-(this.modelBudget?.outputReserve??0)),a=r===void 0?void 0:Math.floor(r*n.thresholdRatio),o=i===void 0||a===void 0?void 0:Math.min(i,a),s=n.maxInputTokens===void 0?o:i===void 0?n.maxInputTokens:Math.min(n.maxInputTokens,i);if(s===void 0)return null;let c=i??Math.max(e,Math.ceil(s/n.thresholdRatio)),l=n.retainTokens??Math.floor(c*(n.retainRatio??.2));return{thresholdTokens:s,retainTokens:Math.max(1,l)}}async emitObserver(e,n){if(e===void 0)return;let r=Promise.resolve().then(()=>e(n));await t(r,this.input.policy.teardownTimeoutMs)}async summarize(n,r,c,l){let u=this.input.policy,d=u.summarizationProvider??this.input.config.provider,p=u.summarizationModel??this.input.config.model,h=s(this);w(h);let g=await D(this.input.registry.resolveModelInfo(d,p,l),l),_=Math.min(u.maxSummaryTokens,g.maxOutputTokens??2**53-1,g.context===void 0?2**53-1:Math.max(1,g.context.contextWindow-1)),v=await D(this.input.registry.prepareCall({provider:d,model:p,...u.summarizationEffort===void 0?{}:{reasoningEffort:e(u.summarizationEffort)},maxTokens:_},l,h?.modelInvocation),l),y={remaining:u.maxSummaryRequestChars},b=o(n).map(e=>m(e,u.maxSummaryInputChars,y)),x=i({source:{kind:`app`,producer:`agent-compaction`},content:[{type:`text`,text:f}]}),S=new a,E={...v.config,messages:[...b,x],...r.length===0?{}:{system:r},...c.length===0?{}:{tools:c},toolChoice:`none`,signal:l},{signal:O,...k}=E;if(C(k)>u.maxSummaryRequestBytes)throw T(`compaction summary request exceeds the ${u.maxSummaryRequestBytes}-byte limit`,`MODEL_REQUEST_TOO_LARGE`);w(h);let A=v.stream(E,h?.modelInvocation),j=A[Symbol.asyncIterator](),M=!1,N=0,P=0,F=!1,I;try{for(;;){let e=await D(j.next(),l);if(e.done===!0){M=!0;break}if(N++,P+=C(e.value),N>u.maxSummaryStreamEvents||P>u.maxSummaryResponseBytes)throw T(`compaction summary response exceeded its resource limit`,`MODEL_RESPONSE_TOO_LARGE`);if(F)throw T(`compaction summarizer emitted data after its terminal finish chunk`,`INVALID_MODEL_STREAM`);S.push(e.value),e.value.type===`finish`&&(F=!0)}}catch(e){I=e}finally{if(!M){let e=j.return?.bind(j);if(e!==void 0)try{let n=Promise.resolve().then(async()=>{await e()});await t(n,u.teardownTimeoutMs)||(I=T(`compaction model stream ignored cancellation for more than ${u.teardownTimeoutMs}ms`,`MODEL_TEARDOWN_TIMEOUT`))}catch(e){I??=e}}}try{let e=await A.report,t=await h?.recordModelCall(e,E);t?.usageRequired===!0&&(I??=T(`compaction model usage is required by the configured run policy`,`USAGE_REQUIRED`)),t?.usageUnavailable===!0&&(I??=T(`compaction model usage is unavailable for the configured budget`,`USAGE_UNAVAILABLE`))}catch(e){I??=e}if(I!==void 0)throw I;let L=S.finish;if(L.kind===`error`||L.kind===`aborted`){let e=Error(L.failure.message);throw e.code=L.failure.code,e}if(L.kind===`max-tokens`)throw Error(`compaction summary was truncated at maxSummaryTokens`);if(L.kind===`tool-calls`)throw Error(`compaction summarizer attempted a tool call`);let R=S.blocks().flatMap(e=>e.type===`text`?[e.text]:[]).join(`
|
|
3
|
+
`).trim();if(R.length===0)throw Error(`compaction summarizer produced no text`);return{summary:R,provider:d,model:p,...S.usage===void 0?{}:{usage:S.usage}}}};function m(e,t,n){let i=e.content.flatMap(e=>h(e,t,n)),a=e.source.kind===`model`?{kind:`model`,provider:e.source.provider,model:e.source.model}:e.source;return r({role:e.role,source:a,content:i})}function h(e,t,n){switch(e.type){case`text`:return[{type:`text`,text:g(e.text,t,n)}];case`reasoning`:return e.text.length===0?[]:[{type:`text`,text:g(`[Reasoning summary] ${e.text}`,t,n)}];case`image`:return[{type:`text`,text:g(`[Image input: ${e.source.kind}]`,t,n)}];case`tool-call`:return[{...e,arguments:_(e.arguments,t,n)}];case`tool-result`:return[{...e,content:e.content.flatMap(e=>h(e,t,n))}];case`native-tool-call`:return[{type:`text`,text:g(`[Native tool ${e.name} (${e.status??`unknown`})] ${v(e.arguments??{})}`,t,n)}];default:return[{type:`text`,text:g(`[Unsupported content block: ${v(e)}]`,t,n)}]}}function g(e,t,n){let r=y(e,Math.max(0,Math.min(t,n.remaining)));return n.remaining-=r.length,r}function _(e,t,n){let r=Math.max(0,Math.min(t,n.remaining));return e.length<=r?(n.remaining-=e.length,e):19<=r?(n.remaining-=19,`{"_compacted":true}`):`{}`}function v(e){try{return JSON.stringify(e)??``}catch{return String(e)}}function y(e,t){if(e.length<=t)return e;if(t<=30)return e.slice(0,t);let n=Math.ceil((t-30)/2),r=Math.floor((t-30)/2);return e.slice(0,n)+`
|
|
4
|
+
…[truncated for compaction]…
|
|
5
|
+
`+e.slice(e.length-r)}function b(){return n()}function x(e){return e instanceof Error?e.message:String(e)}function S(e){return typeof e==`object`&&e&&`code`in e&&typeof e.code==`string`?e.code:void 0}function C(e){let t=JSON.stringify(e);if(t===void 0)throw TypeError(`compaction model payload is not JSON serializable`);return new TextEncoder().encode(t).byteLength}function w(e){let t=e?.usageStop;if(t!==void 0)throw T(`compaction cannot dispatch after a mandatory usage stop`,t.usageRequired?`USAGE_REQUIRED`:`USAGE_UNAVAILABLE`)}function T(e,t,n){let r=Error(e,n===void 0?void 0:{cause:n});return r.code=t,r}function E(e,t){return T(`compaction model operation exceeded ${e}ms`,`MODEL_TIMEOUT`,t)}async function D(e,t){if(t.aborted)throw e.catch(()=>void 0),t.reason??Error(`operation aborted`);return await new Promise((n,r)=>{let i=()=>{t.removeEventListener(`abort`,i),r(t.reason??Error(`operation aborted`))};t.addEventListener(`abort`,i,{once:!0}),e.then(e=>{t.removeEventListener(`abort`,i),n(e)},e=>{t.removeEventListener(`abort`,i),r(e)})})}function O(e){if(!(e.trigger!==`pressure`||e.thresholdTokens===void 0||e.estimatedTokensAfter<e.thresholdTokens))return e.estimatedNonCompactableTokens>=e.thresholdTokens?`unreachable-threshold`:e.estimatedTokensBefore-e.estimatedTokensAfter<Math.max(256,Math.ceil(e.estimatedTokensBefore*.01))?`low-savings`:void 0}export{f as COMPACTION_INSTRUCTION,p as ContextCompactor};
|
|
6
|
+
//# sourceMappingURL=compaction.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"compaction.js","names":[],"sources":["../../../src/agent/memory/compaction.ts"],"sourcesContent":["import { systemRandomId } from '../../platform/adapter.ts'\n/** Context-pressure compaction inspired by Codex checkpoints and deepseek-harness surface replacement. */\n\nimport type { CallConfig } from '../../contract/index.ts'\nimport type { ModelToolSchema } from '../../contract/index.ts'\nimport type { ContentBlock, ToolCallBlock, ToolResultBlock } from '../../message/index.ts'\nimport { createMessage, createUserMessage, type Message } from '../../message/index.ts'\nimport { ReasoningEffortId } from '../../primitives/index.ts'\nimport type { ModelRegistry } from '../../runtime/index.ts'\nimport { waitForSettlement } from '../../async/index.ts'\nimport { BlockAssembler } from '../../stream/index.ts'\nimport type { TokenUsage } from '../../stream/index.ts'\nimport type { History } from '../history/history.ts'\nimport { normalizeToolPairing } from '../history/normalize.ts'\nimport type {\n AgentMaintenanceEvent, BeforeStepContext, CompactionBackoffReason, CompactionTrigger, RequestErrorContext,\n} from '../loop/events.ts'\nimport type { AgentCompactionConfig } from './compaction-config.ts'\nimport { compactionAccounting } from './accounting-binding.ts'\nimport type { RunReport } from '../accounting/delivery-types.ts'\nimport { pruneToolResults, selectCompactablePrefix } from './surface-compaction.ts'\nimport { estimateContextTokens, estimateMessageTokens } from './token-estimator.ts'\n\nexport interface CompactionResult {\n readonly compactionId: string\n readonly trigger: CompactionTrigger\n readonly summary: string\n readonly shadowedSeqs: readonly number[]\n readonly estimatedTokensBefore: number\n readonly estimatedTokensAfter: number\n readonly thresholdTokens?: number\n readonly estimatedNonCompactableTokens: number\n readonly backoffReason?: CompactionBackoffReason\n readonly cooldownSteps?: number\n readonly provider: string\n readonly model: string\n readonly usage?: TokenUsage\n /** Additive runtime projection; absent on the preserved low-level compactor path. */\n readonly status?: 'completed'\n readonly report?: RunReport\n}\n\nexport interface ContextCompactorOptions {\n readonly registry: ModelRegistry\n readonly config: CallConfig\n readonly history: () => History\n readonly system: () => string\n readonly pinnedMessages?: () => readonly Message[]\n readonly tools: () => readonly ModelToolSchema[]\n readonly policy: AgentCompactionConfig\n}\n\ninterface ResolvedBudget {\n readonly thresholdTokens: number\n readonly retainTokens: number\n}\n\ninterface CharacterBudget { remaining: number }\n\nconst CHECKPOINT_PREAMBLE =\n 'This is an automatically generated checkpoint of earlier conversation context. Treat it as established background, preserve the original objective and constraints, and continue directly from the messages that follow.'\n\nconst MIN_PRESSURE_SAVINGS_TOKENS = 256\nconst MIN_PRESSURE_SAVINGS_RATIO = 0.01\nconst PRESSURE_BACKOFF_STEPS = 4\n\nexport const COMPACTION_INSTRUCTION = [\n 'You are performing a CONTEXT CHECKPOINT COMPACTION for a long-running AI agent task.',\n 'Condense the conversation above into a handoff that lets another model continue without forgetting the original purpose.',\n '',\n 'Output exactly these Markdown sections, in order, using terse bullets. Write \"(none)\" for an empty section.',\n '## Primary Request and Intent',\n '## Progress and Completed Work',\n '## Decisions and Rationale',\n '## Constraints and User Preferences',\n '## Important Files, Symbols, and Evidence',\n '## Errors and Failed Approaches',\n '## Pending Work',\n '## Current Work',\n '## Next Step',\n '## Critical Context',\n '',\n 'Preserve exact paths, identifiers, commands, error strings, numeric limits, and user corrections when they matter.',\n 'Under Important Files, mark relevant files as inspected or modified and preserve the exact declarations or findings needed next.',\n 'Under Current Work, record the last successful tool action, the latest verification result, and whether any edit is still partial.',\n 'Under Next Step, name one direct edit or command. Do not recommend rereading an unchanged file whose relevant contents are already recorded.',\n 'Do not reveal hidden chain-of-thought. Record only public progress, observed evidence, decisions, and actionable context.',\n 'If an earlier <compacted-summary> exists, merge still-valid facts with newer information and drop stale facts.',\n 'Output only the checkpoint. Do not call tools and do not acknowledge the compaction.',\n].join('\\n')\n\nexport class ContextCompactor {\n private readonly input: ContextCompactorOptions\n private active = false\n private overflowTurn = -1\n private overflowRetries = 0\n private recoveringOverflow = false\n private modelBudget: {\n readonly contextWindow: number\n readonly outputReserve: number\n } | null | undefined\n private pressureCooldown = 0\n\n constructor(input: ContextCompactorOptions) {\n this.input = input\n }\n\n /** Fail-open pressure maintenance for a pre-step hook. */\n async beforeStep(context: BeforeStepContext): Promise<void> {\n if (!this.input.policy.auto || context.signal.aborted) return\n if (this.pressureCooldown > 0) {\n this.pressureCooldown--\n return\n }\n if (this.overflowTurn !== context.turn) {\n this.overflowTurn = context.turn\n this.overflowRetries = 0\n } else if (!this.recoveringOverflow) {\n this.overflowRetries = 0\n }\n this.recoveringOverflow = false\n try {\n let lastResult: CompactionResult | undefined\n for (let attempt = 0; attempt <= this.input.policy.compactionRetries; attempt++) {\n const result = await this.compactIfNeeded('pressure', context.signal, context.emit)\n if (result === null) break\n lastResult = result\n if (result.backoffReason !== undefined) {\n this.pressureCooldown = result.cooldownSteps ?? PRESSURE_BACKOFF_STEPS\n break\n }\n }\n if (lastResult !== undefined\n && lastResult.thresholdTokens !== undefined\n && lastResult.estimatedTokensAfter >= lastResult.thresholdTokens) {\n this.pressureCooldown = Math.max(\n this.pressureCooldown,\n PRESSURE_BACKOFF_STEPS,\n )\n }\n } catch {\n // Pressure maintenance is fail-open; the provider's canonical overflow\n // error still gets one forced recovery path below. Avoid retrying the same\n // broken maintenance request on every tool step and flooding logs/traces.\n // Mandatory usage decisions stay latched in the owning ledger and are\n // checked by modelRound after this hook, before any main dispatch.\n this.pressureCooldown = 2\n }\n }\n\n /** Compact and retry only when a provider confirmed context overflow. */\n async onRequestError(context: RequestErrorContext): Promise<'retry' | undefined> {\n if (context.failure.code !== 'CONTEXT_WINDOW_EXCEEDED' || context.signal.aborted) return undefined\n if (this.overflowTurn !== context.turn) {\n this.overflowTurn = context.turn\n this.overflowRetries = 0\n }\n if (this.overflowRetries >= this.input.policy.maxOverflowRetries) return undefined\n try {\n const result = await this.compactIfNeeded('context-overflow', context.signal, context.emit)\n if (result === null || context.signal.aborted) return undefined\n this.overflowRetries++\n this.recoveringOverflow = true\n return 'retry'\n } catch {\n return undefined\n }\n }\n\n /** Explicit idle-session checkpoint even below automatic pressure. */\n async compactNow(signal?: AbortSignal): Promise<CompactionResult | null> {\n const controller = signal === undefined ? new AbortController() : undefined\n const effectiveSignal = signal ?? controller?.signal\n if (effectiveSignal === undefined) throw new Error('failed to create compaction signal')\n return this.compactIfNeeded('manual', effectiveSignal)\n }\n\n private async compactIfNeeded(\n trigger: CompactionTrigger,\n signal: AbortSignal,\n emit?: (event: AgentMaintenanceEvent) => Promise<void>,\n ): Promise<CompactionResult | null> {\n if (this.active) return null\n const deadline = AbortSignal.timeout(this.input.policy.summaryTimeoutMs)\n const operationSignal = AbortSignal.any([signal, deadline])\n operationSignal.throwIfAborted()\n this.active = true\n try {\n const history = this.input.history()\n let surface = history.surface()\n if (surface.length < 2) return null\n const tools = this.input.tools()\n const system = this.input.system()\n const pinned = this.input.pinnedMessages?.() ?? []\n let totalBefore = estimateContextTokens({\n system, messages: [...pinned, ...surface.map(node => node.message)], tools,\n })\n let budget = await this.resolveBudget(totalBefore, operationSignal)\n operationSignal.throwIfAborted()\n if (trigger === 'pressure' && (budget === null || totalBefore < budget.thresholdTokens)) return null\n const pruned = pruneToolResults(history, surface, this.input.policy.maxToolResultChars)\n if (pruned > 0) {\n surface = history.surface()\n totalBefore = estimateContextTokens({\n system, messages: [...pinned, ...surface.map(node => node.message)], tools,\n })\n if (trigger === 'pressure' && budget !== null && totalBefore < budget.thresholdTokens) return null\n // With an absolute threshold and no provider context metadata, retainRatio\n // is inferred from the measured request. Pruning can change that request\n // by orders of magnitude, so selection must use the post-prune budget.\n budget = await this.resolveBudget(totalBefore, operationSignal)\n operationSignal.throwIfAborted()\n }\n const retainTokens = trigger === 'context-overflow'\n ? Math.max(1, estimateMessageTokens(surface.at(-1)?.message))\n : budget?.retainTokens ?? Math.max(1, Math.floor(totalBefore * 0.25))\n const selected = selectCompactablePrefix(surface, retainTokens)\n if (selected.length === 0) return null\n const selectedSeqs = new Set(selected.map(node => node.seq))\n const estimatedNonCompactableTokens = estimateContextTokens({\n system,\n messages: [\n ...pinned,\n ...surface.filter(node => !selectedSeqs.has(node.seq)).map(node => node.message),\n ],\n tools,\n })\n const compactionId = newCompactionId()\n const startedAt = new Date().toISOString()\n history.append({ kind: 'compaction-start', compactionId, trigger, at: startedAt })\n try {\n await this.emitObserver(emit, {\n type: 'compaction-start', compactionId, trigger, estimatedInputTokens: totalBefore,\n })\n const summarized = await this.summarize(\n [...pinned, ...selected.map(node => node.message)], system, tools, operationSignal,\n )\n // Adapters are contractually expected to honor cancellation, but the\n // compactor must not commit stale maintenance if one fails to do so.\n operationSignal.throwIfAborted()\n const checkpoint = createUserMessage({\n source: { kind: 'app', producer: `agent-compaction:${compactionId}` },\n content: [{\n type: 'text',\n text: `${CHECKPOINT_PREAMBLE}\\n\\n<compacted-summary>\\n${summarized.summary}\\n</compacted-summary>`,\n }],\n })\n const shadowedTokens = selected.reduce((total, node) => total + estimateMessageTokens(node.message), 0)\n const checkpointTokens = estimateMessageTokens(checkpoint)\n if (checkpointTokens >= shadowedTokens) {\n throw new Error(\n `compaction summary did not shrink selected context (${checkpointTokens} >= ${shadowedTokens} estimated tokens)`,\n )\n }\n const shadowedSeqs = Object.freeze(selected.map(node => node.seq))\n const estimatedTokensAfter = Math.max(0, totalBefore - shadowedTokens + checkpointTokens)\n const thresholdTokens = budget?.thresholdTokens\n const pressureBackoff = pressureBackoffReason({\n trigger,\n thresholdTokens,\n estimatedTokensBefore: totalBefore,\n estimatedTokensAfter,\n estimatedNonCompactableTokens,\n })\n history.appendBatch([\n { event: {\n kind: 'compaction-summary', compactionId, summary: summarized.summary, shadowedSeqs,\n estimatedTokensBefore: totalBefore, estimatedTokensAfter,\n provider: summarized.provider, model: summarized.model,\n ...(summarized.usage === undefined ? {} : { usage: summarized.usage }),\n } },\n { event: { kind: 'user', message: checkpoint }, surfaceOp: {\n op: 'replace',\n from: Math.min(...shadowedSeqs),\n to: Math.max(...shadowedSeqs),\n targets: shadowedSeqs,\n } },\n { event: {\n kind: 'compaction-end', compactionId, status: 'completed', at: new Date().toISOString(),\n ...(thresholdTokens === undefined ? {} : { thresholdTokens }),\n estimatedNonCompactableTokens,\n ...(pressureBackoff === undefined ? {} : {\n backoffReason: pressureBackoff,\n cooldownSteps: PRESSURE_BACKOFF_STEPS,\n }),\n } },\n ])\n const result: CompactionResult = Object.freeze({\n compactionId, trigger, summary: summarized.summary, shadowedSeqs,\n estimatedTokensBefore: totalBefore, estimatedTokensAfter,\n ...(thresholdTokens === undefined ? {} : { thresholdTokens }),\n estimatedNonCompactableTokens,\n ...(pressureBackoff === undefined ? {} : {\n backoffReason: pressureBackoff,\n cooldownSteps: PRESSURE_BACKOFF_STEPS,\n }),\n provider: summarized.provider, model: summarized.model,\n ...(summarized.usage === undefined ? {} : { usage: summarized.usage }),\n })\n await this.emitObserver(emit, {\n type: 'compaction-end', compactionId, trigger, status: 'completed', shadowedSeqs,\n estimatedTokensBefore: totalBefore, estimatedTokensAfter, summary: summarized.summary,\n ...(thresholdTokens === undefined ? {} : { thresholdTokens }),\n estimatedNonCompactableTokens,\n ...(pressureBackoff === undefined ? {} : {\n backoffReason: pressureBackoff,\n cooldownSteps: PRESSURE_BACKOFF_STEPS,\n }),\n ...(summarized.usage === undefined ? {} : { usage: summarized.usage }),\n })\n return result\n } catch (error: unknown) {\n const failure = deadline.aborted && !signal.aborted && errorCode(error) !== 'MODEL_TEARDOWN_TIMEOUT'\n ? modelTimeoutError(this.input.policy.summaryTimeoutMs, error)\n : error\n const message = errorMessage(failure)\n try {\n history.append({\n kind: 'compaction-end', compactionId, status: 'failed', at: new Date().toISOString(), error: message,\n })\n } catch {\n // Preserve the original compaction failure when the append-only history\n // has no remaining capacity for the diagnostic end marker.\n }\n await this.emitObserver(emit, {\n type: 'compaction-end', compactionId, trigger, status: 'failed', shadowedSeqs: [],\n estimatedTokensBefore: totalBefore, estimatedTokensAfter: totalBefore, error: message,\n })\n throw failure\n }\n } finally {\n this.active = false\n }\n }\n\n private async resolveBudget(totalTokens: number, signal: AbortSignal): Promise<ResolvedBudget | null> {\n const policy = this.input.policy\n if (this.modelBudget === undefined) {\n try {\n const info = await raceWithSignal(this.input.registry.resolveModelInfo(\n this.input.config.provider, this.input.config.model, signal,\n ), signal)\n const contextWindow = info.context?.contextWindow\n this.modelBudget = contextWindow === undefined\n ? null\n : {\n contextWindow,\n outputReserve: this.input.config.maxTokens\n ?? info.defaultMaxTokens\n ?? info.maxOutputTokens\n ?? 0,\n }\n } catch {\n if (policy.maxInputTokens === undefined) return null\n this.modelBudget = null\n }\n }\n const contextWindow = this.modelBudget?.contextWindow\n const inputWindow = contextWindow === undefined\n ? undefined\n : Math.max(1, contextWindow - (this.modelBudget?.outputReserve ?? 0))\n const ratioThreshold = contextWindow === undefined\n ? undefined\n : Math.floor(contextWindow * policy.thresholdRatio)\n const safeThreshold = inputWindow === undefined || ratioThreshold === undefined\n ? undefined\n : Math.min(inputWindow, ratioThreshold)\n const thresholdTokens = policy.maxInputTokens === undefined\n ? safeThreshold\n : inputWindow === undefined\n ? policy.maxInputTokens\n : Math.min(policy.maxInputTokens, inputWindow)\n if (thresholdTokens === undefined) return null\n const inferredWindow = inputWindow ?? Math.max(totalTokens, Math.ceil(thresholdTokens / policy.thresholdRatio))\n const retainTokens = policy.retainTokens\n ?? Math.floor(inferredWindow * (policy.retainRatio ?? 0.2))\n return { thresholdTokens, retainTokens: Math.max(1, retainTokens) }\n }\n\n private async emitObserver(\n emit: ((event: AgentMaintenanceEvent) => Promise<void>) | undefined,\n event: AgentMaintenanceEvent,\n ): Promise<void> {\n if (emit === undefined) return\n const pending = Promise.resolve().then(() => emit(event))\n await waitForSettlement(pending, this.input.policy.teardownTimeoutMs)\n }\n\n private async summarize(\n messages: readonly Message[],\n system: string,\n tools: readonly ModelToolSchema[],\n signal: AbortSignal,\n ): Promise<{ summary: string; provider: string; model: string; usage?: TokenUsage }> {\n const policy = this.input.policy\n const provider = policy.summarizationProvider ?? this.input.config.provider\n const model = policy.summarizationModel ?? this.input.config.model\n const accounting = compactionAccounting(this)\n assertUsageAdmission(accounting)\n const summaryInfo = await raceWithSignal(\n this.input.registry.resolveModelInfo(provider, model, signal),\n signal,\n )\n const maxSummaryTokens = Math.min(\n policy.maxSummaryTokens,\n summaryInfo.maxOutputTokens ?? Number.MAX_SAFE_INTEGER,\n summaryInfo.context === undefined\n ? Number.MAX_SAFE_INTEGER\n : Math.max(1, summaryInfo.context.contextWindow - 1),\n )\n const prepared = await raceWithSignal(this.input.registry.prepareCall({\n provider,\n model,\n ...(policy.summarizationEffort === undefined\n ? {}\n : { reasoningEffort: ReasoningEffortId(policy.summarizationEffort) }),\n maxTokens: maxSummaryTokens,\n }, signal, accounting?.modelInvocation), signal)\n // Compaction can encounter history written by an older runtime or a process\n // interrupted between a tool call and its result. Repair the replay just as\n // normal model requests do so a maintenance request cannot be provider-invalid.\n const characterBudget: CharacterBudget = { remaining: policy.maxSummaryRequestChars }\n const replay = normalizeToolPairing(messages)\n .map(message => sanitizeForSummary(message, policy.maxSummaryInputChars, characterBudget))\n const instruction = createUserMessage({\n source: { kind: 'app', producer: 'agent-compaction' },\n content: [{ type: 'text', text: COMPACTION_INSTRUCTION }],\n })\n const assembler = new BlockAssembler()\n const request = {\n ...prepared.config,\n messages: [...replay, instruction],\n ...(system.length === 0 ? {} : { system }),\n ...(tools.length === 0 ? {} : { tools }),\n toolChoice: 'none',\n signal,\n } as const\n const { signal: _signal, ...serializableRequest } = request\n if (serializedBytes(serializableRequest) > policy.maxSummaryRequestBytes) {\n throw codedError(\n `compaction summary request exceeds the ${policy.maxSummaryRequestBytes}-byte limit`,\n 'MODEL_REQUEST_TOO_LARGE',\n )\n }\n assertUsageAdmission(accounting)\n const handle = prepared.stream(request, accounting?.modelInvocation)\n const iterator = handle[Symbol.asyncIterator]()\n let exhausted = false\n let events = 0\n let responseBytes = 0\n let sawFinish = false\n let failure: unknown\n try {\n while (true) {\n const next = await raceWithSignal(iterator.next(), signal)\n if (next.done === true) {\n exhausted = true\n break\n }\n events++\n responseBytes += serializedBytes(next.value)\n if (events > policy.maxSummaryStreamEvents\n || responseBytes > policy.maxSummaryResponseBytes) {\n throw codedError('compaction summary response exceeded its resource limit', 'MODEL_RESPONSE_TOO_LARGE')\n }\n if (sawFinish) {\n throw codedError('compaction summarizer emitted data after its terminal finish chunk', 'INVALID_MODEL_STREAM')\n }\n assembler.push(next.value)\n if (next.value.type === 'finish') sawFinish = true\n }\n } catch (error: unknown) {\n failure = error\n } finally {\n if (!exhausted) {\n const close = iterator.return?.bind(iterator)\n if (close !== undefined) {\n try {\n const closing = Promise.resolve().then(async () => { await close() })\n if (!await waitForSettlement(closing, policy.teardownTimeoutMs)) failure = codedError(\n `compaction model stream ignored cancellation for more than ${policy.teardownTimeoutMs}ms`,\n 'MODEL_TEARDOWN_TIMEOUT',\n )\n } catch (error: unknown) { failure ??= error }\n }\n }\n }\n try {\n const report = await handle.report\n const decision = await accounting?.recordModelCall(report, request)\n if (decision?.usageRequired === true) {\n failure ??= codedError('compaction model usage is required by the configured run policy', 'USAGE_REQUIRED')\n }\n if (decision?.usageUnavailable === true) {\n failure ??= codedError('compaction model usage is unavailable for the configured budget', 'USAGE_UNAVAILABLE')\n }\n } catch (error: unknown) { failure ??= error }\n if (failure !== undefined) throw failure\n const finish = assembler.finish\n if (finish.kind === 'error' || finish.kind === 'aborted') {\n const error = new Error(finish.failure.message) as Error & { code?: string }\n error.code = finish.failure.code\n throw error\n }\n if (finish.kind === 'max-tokens') throw new Error('compaction summary was truncated at maxSummaryTokens')\n if (finish.kind === 'tool-calls') throw new Error('compaction summarizer attempted a tool call')\n const summary = assembler.blocks().flatMap(block => block.type === 'text' ? [block.text] : []).join('\\n').trim()\n if (summary.length === 0) throw new Error('compaction summarizer produced no text')\n return {\n summary, provider, model,\n ...(assembler.usage === undefined ? {} : { usage: assembler.usage }),\n }\n }\n}\n\nfunction sanitizeForSummary(\n message: Message,\n maxChars: number,\n budget: CharacterBudget,\n): Message {\n const content = message.content.flatMap(block => sanitizeBlock(block, maxChars, budget))\n const source = message.source.kind === 'model'\n ? { kind: 'model' as const, provider: message.source.provider, model: message.source.model }\n : message.source\n return createMessage({ role: message.role, source, content })\n}\n\nfunction sanitizeBlock(\n block: ContentBlock,\n maxChars: number,\n budget: CharacterBudget,\n): ContentBlock[] {\n switch (block.type) {\n case 'text': return [{ type: 'text', text: boundedText(block.text, maxChars, budget) }]\n case 'reasoning': return block.text.length === 0 ? [] : [{\n type: 'text', text: boundedText(`[Reasoning summary] ${block.text}`, maxChars, budget),\n }]\n case 'image': return [{ type: 'text', text: boundedText(`[Image input: ${block.source.kind}]`, maxChars, budget) }]\n case 'tool-call': return [{\n ...block, arguments: boundedToolArguments(block.arguments, maxChars, budget),\n } satisfies ToolCallBlock]\n case 'tool-result': return [{\n ...block,\n content: block.content.flatMap(child => sanitizeBlock(child, maxChars, budget)),\n } satisfies ToolResultBlock]\n case 'native-tool-call': return [{\n type: 'text',\n text: boundedText(\n `[Native tool ${block.name} (${block.status ?? 'unknown'})] ${safeJson(block.arguments ?? {})}`,\n maxChars,\n budget,\n ),\n }]\n default: return [{\n type: 'text', text: boundedText(`[Unsupported content block: ${safeJson(block)}]`, maxChars, budget),\n }]\n }\n}\n\nfunction boundedText(value: string, maxChars: number, budget: CharacterBudget): string {\n const allowed = Math.max(0, Math.min(maxChars, budget.remaining))\n const result = truncateMiddle(value, allowed)\n budget.remaining -= result.length\n return result\n}\n\nfunction boundedToolArguments(value: string, maxChars: number, budget: CharacterBudget): string {\n const allowed = Math.max(0, Math.min(maxChars, budget.remaining))\n if (value.length <= allowed) {\n budget.remaining -= value.length\n return value\n }\n const placeholder = '{\"_compacted\":true}'\n if (placeholder.length <= allowed) {\n budget.remaining -= placeholder.length\n return placeholder\n }\n return '{}'\n}\n\nfunction safeJson(value: unknown): string {\n try { return JSON.stringify(value) ?? '' } catch { return String(value) }\n}\nfunction truncateMiddle(value: string, maxChars: number): string {\n if (value.length <= maxChars) return value\n const marker = '\\n…[truncated for compaction]…\\n'\n if (maxChars <= marker.length) return value.slice(0, maxChars)\n const head = Math.ceil((maxChars - marker.length) / 2)\n const tail = Math.floor((maxChars - marker.length) / 2)\n return value.slice(0, head) + marker + value.slice(value.length - tail)\n}\nfunction newCompactionId(): string {\n return systemRandomId()\n}\nfunction errorMessage(error: unknown): string { return error instanceof Error ? error.message : String(error) }\nfunction errorCode(error: unknown): string | undefined {\n return typeof error === 'object' && error !== null && 'code' in error && typeof error.code === 'string'\n ? error.code\n : undefined\n}\n\nfunction serializedBytes(value: unknown): number {\n const serialized = JSON.stringify(value)\n if (serialized === undefined) throw new TypeError('compaction model payload is not JSON serializable')\n return new TextEncoder().encode(serialized).byteLength\n}\n\nfunction assertUsageAdmission(accounting: ReturnType<typeof compactionAccounting>): void {\n const stop = accounting?.usageStop\n if (stop !== undefined) throw codedError(\n 'compaction cannot dispatch after a mandatory usage stop',\n stop.usageRequired ? 'USAGE_REQUIRED' : 'USAGE_UNAVAILABLE',\n )\n}\n\nfunction codedError(message: string, code: string, cause?: unknown): Error & { code: string } {\n const error = new Error(message, cause === undefined ? undefined : { cause }) as Error & { code: string }\n error.code = code\n return error\n}\n\nfunction modelTimeoutError(timeoutMs: number, cause: unknown): Error & { code: string } {\n return codedError(`compaction model operation exceeded ${timeoutMs}ms`, 'MODEL_TIMEOUT', cause)\n}\n\nasync function raceWithSignal<T>(pending: Promise<T>, signal: AbortSignal): Promise<T> {\n if (signal.aborted) {\n void pending.catch(() => undefined)\n throw signal.reason ?? new Error('operation aborted')\n }\n return await new Promise<T>((resolve, reject) => {\n const onAbort = () => {\n signal.removeEventListener('abort', onAbort)\n reject(signal.reason ?? new Error('operation aborted'))\n }\n signal.addEventListener('abort', onAbort, { once: true })\n void pending.then(\n value => {\n signal.removeEventListener('abort', onAbort)\n resolve(value)\n },\n error => {\n signal.removeEventListener('abort', onAbort)\n reject(error)\n },\n )\n })\n}\n\nfunction pressureBackoffReason(input: {\n readonly trigger: CompactionTrigger\n readonly thresholdTokens: number | undefined\n readonly estimatedTokensBefore: number\n readonly estimatedTokensAfter: number\n readonly estimatedNonCompactableTokens: number\n}): CompactionBackoffReason | undefined {\n if (input.trigger !== 'pressure' || input.thresholdTokens === undefined\n || input.estimatedTokensAfter < input.thresholdTokens) return undefined\n if (input.estimatedNonCompactableTokens >= input.thresholdTokens) {\n return 'unreachable-threshold'\n }\n const savings = input.estimatedTokensBefore - input.estimatedTokensAfter\n const minimum = Math.max(\n MIN_PRESSURE_SAVINGS_TOKENS,\n Math.ceil(input.estimatedTokensBefore * MIN_PRESSURE_SAVINGS_RATIO),\n )\n return savings < minimum ? 'low-savings' : undefined\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import { UserMessage } from "../../message/message.js";
|
|
2
|
+
//#region src/agent/memory/memory.d.ts
|
|
3
|
+
type AgentMemoryKind = 'objective' | 'constraint' | 'decision' | 'fact' | 'progress' | 'next-step';
|
|
4
|
+
interface AgentMemorySeed {
|
|
5
|
+
readonly id?: string;
|
|
6
|
+
readonly kind: AgentMemoryKind;
|
|
7
|
+
readonly content: string;
|
|
8
|
+
}
|
|
9
|
+
interface AgentMemoryItem {
|
|
10
|
+
readonly id: string;
|
|
11
|
+
readonly kind: AgentMemoryKind;
|
|
12
|
+
readonly content: string;
|
|
13
|
+
readonly createdAt: string;
|
|
14
|
+
readonly updatedAt: string;
|
|
15
|
+
}
|
|
16
|
+
interface AgentMemorySnapshot {
|
|
17
|
+
readonly version: 1;
|
|
18
|
+
readonly items: readonly AgentMemoryItem[];
|
|
19
|
+
}
|
|
20
|
+
interface AgentMemoryConfigInput {
|
|
21
|
+
/** Pin the first real user message as the original objective. Defaults to true. */
|
|
22
|
+
readonly autoCaptureObjective?: boolean;
|
|
23
|
+
/** Maximum rendered memory characters injected into every model request. Defaults to 12,000. */
|
|
24
|
+
readonly maxInjectedChars?: number;
|
|
25
|
+
/** Maximum retained memory records. Defaults to 1,024. */
|
|
26
|
+
readonly maxItems?: number;
|
|
27
|
+
/** Maximum characters retained by one record. Defaults to 65,536. */
|
|
28
|
+
readonly maxItemChars?: number;
|
|
29
|
+
/** Maximum cumulative retained content characters. Defaults to 1 MiB. */
|
|
30
|
+
readonly maxStoredChars?: number;
|
|
31
|
+
readonly seed?: readonly AgentMemorySeed[];
|
|
32
|
+
}
|
|
33
|
+
interface AgentMemoryConfig {
|
|
34
|
+
readonly autoCaptureObjective: boolean;
|
|
35
|
+
readonly maxInjectedChars: number;
|
|
36
|
+
readonly maxItems: number;
|
|
37
|
+
readonly maxItemChars: number;
|
|
38
|
+
readonly maxStoredChars: number;
|
|
39
|
+
readonly seed: readonly AgentMemorySeed[];
|
|
40
|
+
}
|
|
41
|
+
declare class AgentMemory {
|
|
42
|
+
private readonly records;
|
|
43
|
+
private readonly limits;
|
|
44
|
+
private nextId;
|
|
45
|
+
private storedChars;
|
|
46
|
+
constructor(seed?: readonly AgentMemorySeed[], limits?: Partial<Pick<AgentMemoryConfig, 'maxItems' | 'maxItemChars' | 'maxStoredChars'>>);
|
|
47
|
+
static fromSnapshot(snapshot: AgentMemorySnapshot, limits?: Partial<Pick<AgentMemoryConfig, 'maxItems' | 'maxItemChars' | 'maxStoredChars'>>): AgentMemory;
|
|
48
|
+
/** Add or update one stable memory item. Supplying the same id is an upsert. */
|
|
49
|
+
remember(input: AgentMemorySeed): AgentMemoryItem;
|
|
50
|
+
forget(id: string): boolean;
|
|
51
|
+
items(): readonly AgentMemoryItem[];
|
|
52
|
+
snapshot(): AgentMemorySnapshot;
|
|
53
|
+
/** Capture the first user request verbatim enough to survive every later compaction. */
|
|
54
|
+
captureOriginalObjective(message: UserMessage): AgentMemoryItem | undefined;
|
|
55
|
+
/** Render bounded pinned context, ordered by importance rather than insertion accident. */
|
|
56
|
+
render(maxChars?: number): string;
|
|
57
|
+
}
|
|
58
|
+
declare function resolveMemoryConfig(input: AgentMemoryConfigInput | undefined): AgentMemoryConfig;
|
|
59
|
+
//#endregion
|
|
60
|
+
export { AgentMemory, AgentMemoryConfig, AgentMemoryConfigInput, AgentMemoryItem, AgentMemoryKind, AgentMemorySeed, AgentMemorySnapshot, resolveMemoryConfig };
|
|
61
|
+
//# sourceMappingURL=memory.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"memory.d.ts","names":[],"sources":["../../../src/agent/memory/memory.ts"],"mappings":";;KAIY;UAQK;WACN;WACA,MAAM;WACN;;UAGM;WACN;WACA,MAAM;WACN;WACA;WACA;;UAGM;WACN;WACA,gBAAgB;;UAGV;;WAEN;;WAEA;;WAEA;;WAEA;;WAEA;WACA,gBAAgB;;UAGV;WACN;WACA;WACA;WACA;WACA;WACA,eAAe;;cAYb;mBACM;mBACA;UACT;UACA;EAER,YACE,gBAAe,mBACf,SAAQ,QAAQ,KAAK;SAMhB,aACL,UAAU,qBACV,SAAQ,QAAQ,KAAK,sEACpB;;EAiCH,SAAS,OAAO,kBAAkB;EA8BlC,OAAO;EAQP,kBAAkB;EAIlB,YAAY;;EAQZ,yBAAyB,SAAS,cAAc;;EAWhD,OAAO;;iBA2BO,oBAAoB,OAAO,qCAAqC"}
|