@aragon-agent/cli 0.6.46 → 0.6.48
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/CHANGELOG.md +28 -0
- package/README.md +80 -12
- package/dist/agent/coalesce.d.ts +5 -1
- package/dist/agent/coalesce.js +13 -0
- package/dist/agent/controller.d.ts +41 -20
- package/dist/agent/controller.js +68 -15
- package/dist/agent/conversation-reset.d.ts +1 -1
- package/dist/agent/governance-wiring.d.ts +6 -6
- package/dist/agent/governance-wiring.js +4 -4
- package/dist/agent/headless.d.ts +5 -5
- package/dist/agent/headless.js +4 -4
- package/dist/agent/job-notices.d.ts +1 -1
- package/dist/agent/job-notices.js +1 -1
- package/dist/agent/kit-apply.d.ts +3 -3
- package/dist/agent/kit-apply.js +3 -3
- package/dist/agent/model-profile-settings.d.ts +2 -2
- package/dist/agent/model-profile-settings.js +6 -6
- package/dist/agent/prompt-options.d.ts +1 -1
- package/dist/agent/system-prompt.d.ts +1 -1
- package/dist/agent/user-attention.d.ts +17 -0
- package/dist/agent/user-attention.js +32 -0
- package/dist/{ui → app}/App.d.ts +9 -9
- package/dist/{ui → app}/App.js +113 -79
- package/dist/{ui → app}/use-startup-notices.d.ts +1 -1
- package/dist/{ui → app}/use-startup-notices.js +2 -2
- package/dist/cli.js +31 -32
- package/dist/commands/agents-command.js +1 -1
- package/dist/commands/builtins.js +9 -9
- package/dist/commands/governance-command.js +2 -2
- package/dist/commands/governance-runs-table.js +1 -1
- package/dist/commands/kit-command.js +1 -1
- package/dist/commands/perf.d.ts +3 -3
- package/dist/commands/perf.js +1 -1
- package/dist/commands/registry.d.ts +8 -8
- package/dist/commands/skills.js +2 -2
- package/dist/commands/team-command.js +1 -1
- package/dist/compaction/archive.d.ts +1 -1
- package/dist/compaction/archive.js +1 -1
- package/dist/compaction/child.d.ts +3 -3
- package/dist/compaction/child.js +4 -4
- package/dist/compaction/command.js +5 -5
- package/dist/compaction/compactor.d.ts +6 -6
- package/dist/compaction/compactor.js +6 -6
- package/dist/compaction/context-command.js +1 -1
- package/dist/compaction/digest.js +1 -1
- package/dist/compaction/memory-input.js +1 -1
- package/dist/compaction/memory-validation.js +1 -1
- package/dist/compaction/memory.js +1 -1
- package/dist/compaction/summarize-call.js +1 -1
- package/dist/compaction/summary-prompt.js +1 -1
- package/dist/compaction/tail-budget.js +2 -2
- package/dist/compaction/wiring.d.ts +5 -5
- package/dist/compaction/wiring.js +2 -2
- package/dist/config/cli-commands.d.ts +1 -1
- package/dist/config/cli-commands.js +3 -3
- package/dist/config/env.d.ts +1 -1
- package/dist/config/env.js +4 -4
- package/dist/config/load.d.ts +2 -2
- package/dist/config/load.js +10 -31
- package/dist/config/migrate-state-out-of-config.js +1 -1
- package/dist/config/model-profile-store.d.ts +4 -54
- package/dist/config/model-profile-store.js +3 -3
- package/dist/config/prompt-history.js +1 -1
- package/dist/config/store.d.ts +2 -2
- package/dist/config/store.js +3 -3
- package/dist/diagnostics/doctor.js +4 -4
- package/dist/exec/bridge/decisions.d.ts +1 -1
- package/dist/exec/bridge/human-answers.d.ts +1 -1
- package/dist/exec/bridge/human-answers.js +1 -1
- package/dist/exec/bridge/protocol.d.ts +1 -1
- package/dist/exec/bridge/server.js +1 -1
- package/dist/exec/events.d.ts +2 -2
- package/dist/exec/index.d.ts +1 -1
- package/dist/exec/index.js +1 -1
- package/dist/exec/permission.js +1 -1
- package/dist/exec/runner.d.ts +3 -3
- package/dist/exec/runner.js +2 -2
- package/dist/exec/threads/runtime.js +1 -1
- package/dist/fast/digest.d.ts +1 -1
- package/dist/fast/digest.js +1 -1
- package/dist/fast/frames.d.ts +1 -1
- package/dist/fast/frames.js +1 -1
- package/dist/fast/prompt.d.ts +1 -1
- package/dist/fast/prompt.js +1 -1
- package/dist/fast/review-call.js +1 -1
- package/dist/fast/reviewer.d.ts +3 -3
- package/dist/fast/reviewer.js +1 -1
- package/dist/fast/summary-call.d.ts +3 -3
- package/dist/fast/summary-call.js +2 -2
- package/dist/fast/summary-prompt.d.ts +1 -1
- package/dist/fast/summary-prompt.js +1 -1
- package/dist/fast/wiring.d.ts +4 -4
- package/dist/fast/wiring.js +1 -1
- package/dist/governance/card-normalize.d.ts +1 -1
- package/dist/governance/copy.d.ts +1 -1
- package/dist/governance/copy.js +2 -2
- package/dist/governance/engine/artifact-persist.d.ts +1 -1
- package/dist/governance/engine/budget.d.ts +1 -1
- package/dist/governance/engine/budget.js +1 -1
- package/dist/governance/engine/cards.d.ts +1 -1
- package/dist/governance/engine/digest.js +1 -1
- package/dist/governance/engine/engine-core.d.ts +5 -5
- package/dist/governance/engine/engine-core.js +1 -1
- package/dist/governance/engine/engine.d.ts +1 -1
- package/dist/governance/engine/engine.js +1 -1
- package/dist/governance/engine/estimate.d.ts +1 -1
- package/dist/governance/engine/estimate.js +1 -1
- package/dist/governance/engine/inspector.js +2 -2
- package/dist/governance/engine/integration.d.ts +1 -1
- package/dist/governance/engine/lifecycle.d.ts +1 -1
- package/dist/governance/engine/lifecycle.js +1 -1
- package/dist/governance/engine/phase-members.d.ts +1 -1
- package/dist/governance/engine/phase-planner.d.ts +1 -1
- package/dist/governance/engine/phase-planner.js +1 -1
- package/dist/governance/engine/rebuild.d.ts +1 -1
- package/dist/governance/engine/report.d.ts +1 -1
- package/dist/governance/engine/report.js +1 -1
- package/dist/governance/engine/run-digest.d.ts +1 -1
- package/dist/governance/engine/spec-builder.d.ts +2 -2
- package/dist/governance/engine/spec-builder.js +2 -2
- package/dist/governance/engine/stage-runner.js +2 -2
- package/dist/governance/engine/start-input.d.ts +1 -1
- package/dist/governance/engine/start-input.js +1 -1
- package/dist/governance/engine/state-machine.d.ts +1 -1
- package/dist/governance/engine/state-machine.js +3 -3
- package/dist/governance/engine/submission-queries.d.ts +1 -1
- package/dist/governance/engine/submission-render.d.ts +1 -1
- package/dist/governance/engine/submissions.d.ts +1 -1
- package/dist/governance/engine/submissions.js +1 -1
- package/dist/governance/engine/visibility.d.ts +1 -1
- package/dist/governance/engine/visibility.js +1 -1
- package/dist/governance/posture-transition.d.ts +2 -2
- package/dist/governance/posture-transition.js +1 -1
- package/dist/governance/profiles.d.ts +1 -1
- package/dist/governance/prompts/orchestrator-block.d.ts +2 -2
- package/dist/governance/prompts/orchestrator-block.js +2 -2
- package/dist/governance/prompts/plan-addendum.d.ts +1 -1
- package/dist/governance/prompts/plan-addendum.js +1 -1
- package/dist/governance/prompts/role-blocks.d.ts +2 -2
- package/dist/governance/prompts/role-blocks.js +1 -1
- package/dist/governance/report-reader.js +1 -1
- package/dist/governance/roles.d.ts +1 -1
- package/dist/governance/rules/claims.d.ts +1 -1
- package/dist/governance/rules/claims.js +1 -1
- package/dist/governance/rules/elimination.d.ts +1 -1
- package/dist/governance/rules/elimination.js +1 -1
- package/dist/governance/rules/failure-analysis.d.ts +2 -2
- package/dist/governance/rules/failure-analysis.js +1 -1
- package/dist/governance/rules/ledger-replay.d.ts +1 -1
- package/dist/governance/rules/ledger-state.d.ts +1 -1
- package/dist/governance/rules/ledger-state.js +1 -1
- package/dist/governance/rules/ledger.d.ts +2 -2
- package/dist/governance/rules/ledger.js +2 -2
- package/dist/governance/rules/rca.d.ts +1 -1
- package/dist/governance/rules/rca.js +1 -1
- package/dist/governance/rules/settlement.d.ts +2 -2
- package/dist/governance/rules/settlement.js +2 -2
- package/dist/governance/rules/suspicion.d.ts +1 -1
- package/dist/governance/store/artifacts.d.ts +1 -1
- package/dist/governance/store/artifacts.js +1 -1
- package/dist/governance/store/events-log.d.ts +1 -1
- package/dist/governance/store/run-store.d.ts +1 -1
- package/dist/governance/store/run-store.js +1 -1
- package/dist/governance/store/scoreboard-export.d.ts +1 -1
- package/dist/governance/tools/child-tools.d.ts +1 -1
- package/dist/governance/tools/guard.d.ts +1 -1
- package/dist/governance/tools/guard.js +1 -1
- package/dist/governance/tools/inspector-tools.d.ts +2 -2
- package/dist/governance/tools/inspector-tools.js +2 -2
- package/dist/governance/tools/lead-tools.d.ts +1 -1
- package/dist/governance/tools/lead-tools.js +1 -1
- package/dist/governance/tools/normalize-util.js +1 -1
- package/dist/governance/tools/scan-incomplete.js +1 -1
- package/dist/governance/tools/shared-tools.d.ts +1 -1
- package/dist/governance/tools/shared-tools.js +1 -1
- package/dist/governance/tools/submit-normalizers.d.ts +1 -1
- package/dist/governance/tools/submit-normalizers.js +1 -1
- package/dist/governance/tools/submit-tools.d.ts +1 -1
- package/dist/logging/cli-commands.js +1 -1
- package/dist/logging/install.d.ts +1 -1
- package/dist/logging/install.js +3 -3
- package/dist/logging/logger.d.ts +2 -2
- package/dist/logging/logger.js +31 -2
- package/dist/proc/kill-tree.js +1 -1
- package/dist/proc/log-mirror.js +1 -1
- package/dist/proc/log-ring.js +2 -2
- package/dist/proc/notices.d.ts +1 -1
- package/dist/proc/notices.js +2 -2
- package/dist/proc/prompt.d.ts +1 -1
- package/dist/proc/prompt.js +8 -5
- package/dist/proc/readiness.js +1 -1
- package/dist/proc/supervisor.d.ts +1 -1
- package/dist/proc/supervisor.js +10 -4
- package/dist/proc/wait-plan.d.ts +39 -0
- package/dist/proc/wait-plan.js +77 -0
- package/dist/proc/wait.d.ts +37 -4
- package/dist/proc/wait.js +68 -5
- package/dist/prompts/command.d.ts +1 -1
- package/dist/prompts/command.js +1 -1
- package/dist/prompts/normalize.d.ts +1 -1
- package/dist/prompts/normalize.js +1 -1
- package/dist/prompts/resolve.d.ts +1 -1
- package/dist/prompts/store.d.ts +2 -12
- package/dist/prompts/store.js +6 -60
- package/dist/session/checkpoint.d.ts +2 -2
- package/dist/session/checkpoint.js +2 -0
- package/dist/session/clear-archive.d.ts +2 -2
- package/dist/session/persist.d.ts +2 -2
- package/dist/session/persist.js +20 -3
- package/dist/session/startup-session.d.ts +2 -2
- package/dist/session/validate-session.js +6 -3
- package/dist/skills/service.d.ts +2 -2
- package/dist/team/bus.d.ts +1 -1
- package/dist/team/bus.js +1 -1
- package/dist/team/child-reviewer.d.ts +2 -2
- package/dist/team/child-reviewer.js +1 -1
- package/dist/team/comm-tools.js +1 -1
- package/dist/team/dispatch-gate.js +1 -1
- package/dist/team/forced-dispatch.js +1 -1
- package/dist/team/forced-mode.d.ts +1 -1
- package/dist/team/forced-prompt.d.ts +1 -1
- package/dist/team/forced-prompt.js +1 -1
- package/dist/team/normalize.d.ts +1 -1
- package/dist/team/normalize.js +1 -1
- package/dist/team/overseer.d.ts +3 -3
- package/dist/team/overseer.js +3 -3
- package/dist/team/prompt.d.ts +1 -1
- package/dist/team/prompt.js +1 -1
- package/dist/team/report.d.ts +2 -2
- package/dist/team/report.js +2 -2
- package/dist/team/retry.d.ts +1 -1
- package/dist/team/retry.js +1 -1
- package/dist/team/runtime.d.ts +4 -4
- package/dist/team/runtime.js +2 -2
- package/dist/team/settled.d.ts +2 -2
- package/dist/team/subagent.d.ts +4 -4
- package/dist/team/subagent.js +5 -5
- package/dist/team/task-tool.d.ts +1 -1
- package/dist/team/task-tool.js +1 -1
- package/dist/todo/normalize.d.ts +1 -1
- package/dist/todo/normalize.js +1 -1
- package/dist/todo/prompt.d.ts +1 -1
- package/dist/todo/prompt.js +1 -1
- package/dist/todo/store.d.ts +1 -1
- package/dist/todo/store.js +2 -2
- package/dist/todo/todo-tool.d.ts +1 -1
- package/dist/todo/todo-tool.js +2 -2
- package/dist/tools/bash-tool.d.ts +1 -1
- package/dist/tools/bash-tool.js +2 -2
- package/dist/tools/diff.d.ts +1 -1
- package/dist/tools/diff.js +1 -1
- package/dist/tools/file-change-store.d.ts +1 -1
- package/dist/tools/fs-tools.d.ts +2 -2
- package/dist/tools/fs-tools.js +1 -1
- package/dist/tools/index.d.ts +3 -3
- package/dist/tools/index.js +1 -1
- package/dist/tools/job-tools.d.ts +14 -3
- package/dist/tools/job-tools.js +158 -35
- package/dist/tools/plan-tools.d.ts +1 -1
- package/dist/tools/plan-tools.js +1 -1
- package/dist/tools/proc-tools.d.ts +1 -1
- package/dist/tools/proc-tools.js +2 -2
- package/dist/update/classify-failure.d.ts +1 -1
- package/dist/update/install-lock.js +1 -1
- package/dist/update/install-source.d.ts +1 -1
- package/dist/update/installer.js +2 -2
- package/dist/update/npm-view.d.ts +1 -1
- package/dist/update/npm-view.js +1 -1
- package/dist/update/registry.d.ts +1 -1
- package/dist/update/registry.js +1 -1
- package/dist/update/service.d.ts +2 -2
- package/dist/update/service.js +2 -2
- package/package.json +7 -7
- package/dist/agent/agent-mode.d.ts +0 -108
- package/dist/agent/agent-mode.js +0 -121
- package/dist/agent/entry-limits.d.ts +0 -65
- package/dist/agent/entry-limits.js +0 -133
- package/dist/agent/governance-view.d.ts +0 -40
- package/dist/agent/governance-view.js +0 -40
- package/dist/agent/invocation-card.d.ts +0 -77
- package/dist/agent/invocation-card.js +0 -169
- package/dist/agent/model-probe-limits.d.ts +0 -39
- package/dist/agent/model-probe-limits.js +0 -25
- package/dist/agent/model-probe.d.ts +0 -104
- package/dist/agent/model-probe.js +0 -391
- package/dist/agent/queued-messages.d.ts +0 -23
- package/dist/agent/queued-messages.js +0 -49
- package/dist/agent/reducer.d.ts +0 -837
- package/dist/agent/reducer.js +0 -1617
- package/dist/agent/retry-view.d.ts +0 -68
- package/dist/agent/retry-view.js +0 -95
- package/dist/agent/usage.d.ts +0 -47
- package/dist/agent/usage.js +0 -84
- package/dist/compaction/limits.d.ts +0 -61
- package/dist/compaction/limits.js +0 -64
- package/dist/compaction/meter.d.ts +0 -276
- package/dist/compaction/meter.js +0 -512
- package/dist/compaction/pressure.d.ts +0 -163
- package/dist/compaction/pressure.js +0 -199
- package/dist/compaction/reason-text.d.ts +0 -36
- package/dist/compaction/reason-text.js +0 -78
- package/dist/compaction/types.d.ts +0 -360
- package/dist/compaction/types.js +0 -22
- package/dist/config/governance-config.d.ts +0 -125
- package/dist/config/governance-config.js +0 -164
- package/dist/config/kit-resolution.d.ts +0 -93
- package/dist/config/kit-resolution.js +0 -226
- package/dist/config/model-kits.d.ts +0 -225
- package/dist/config/model-kits.js +0 -302
- package/dist/config/model-profile-resolution.d.ts +0 -28
- package/dist/config/model-profile-resolution.js +0 -88
- package/dist/config/model-profiles.d.ts +0 -103
- package/dist/config/model-profiles.js +0 -188
- package/dist/config/schema.d.ts +0 -1645
- package/dist/config/schema.js +0 -1377
- package/dist/fast/limits.d.ts +0 -152
- package/dist/fast/limits.js +0 -152
- package/dist/fast/resolve.d.ts +0 -44
- package/dist/fast/resolve.js +0 -107
- package/dist/fast/task-summary-types.d.ts +0 -66
- package/dist/fast/task-summary-types.js +0 -17
- package/dist/fast/types.d.ts +0 -141
- package/dist/fast/types.js +0 -14
- package/dist/governance/governed-dispatch.d.ts +0 -19
- package/dist/governance/governed-dispatch.js +0 -17
- package/dist/governance/limits.d.ts +0 -107
- package/dist/governance/limits.js +0 -131
- package/dist/governance/posture.d.ts +0 -35
- package/dist/governance/posture.js +0 -59
- package/dist/governance/rules/events-table.d.ts +0 -46
- package/dist/governance/rules/events-table.js +0 -94
- package/dist/governance/types.d.ts +0 -661
- package/dist/governance/types.js +0 -27
- package/dist/input/control-sequences.d.ts +0 -71
- package/dist/input/control-sequences.js +0 -222
- package/dist/input/csiu-keys.d.ts +0 -66
- package/dist/input/csiu-keys.js +0 -181
- package/dist/input/cursor-report.d.ts +0 -61
- package/dist/input/cursor-report.js +0 -97
- package/dist/input/enter-sequences.d.ts +0 -64
- package/dist/input/enter-sequences.js +0 -153
- package/dist/input/interrupt-gesture.d.ts +0 -18
- package/dist/input/interrupt-gesture.js +0 -19
- package/dist/input/keyboard-enhancement.d.ts +0 -42
- package/dist/input/keyboard-enhancement.js +0 -65
- package/dist/input/keymap.d.ts +0 -20
- package/dist/input/keymap.js +0 -99
- package/dist/input/limits.d.ts +0 -118
- package/dist/input/limits.js +0 -109
- package/dist/input/mouse-events.d.ts +0 -87
- package/dist/input/mouse-events.js +0 -212
- package/dist/input/paste-parse.d.ts +0 -83
- package/dist/input/paste-parse.js +0 -107
- package/dist/input/pointer-router.d.ts +0 -11
- package/dist/input/pointer-router.js +0 -14
- package/dist/input/stdin-filter.d.ts +0 -112
- package/dist/input/stdin-filter.js +0 -657
- package/dist/input/win32-input-mode.d.ts +0 -61
- package/dist/input/win32-input-mode.js +0 -269
- package/dist/logging/levels.d.ts +0 -40
- package/dist/logging/levels.js +0 -59
- package/dist/logging/secret-registry.d.ts +0 -32
- package/dist/logging/secret-registry.js +0 -73
- package/dist/proc/limits.d.ts +0 -200
- package/dist/proc/limits.js +0 -207
- package/dist/proc/progress.d.ts +0 -40
- package/dist/proc/progress.js +0 -135
- package/dist/proc/types.d.ts +0 -263
- package/dist/proc/types.js +0 -15
- package/dist/prompts/copy.d.ts +0 -89
- package/dist/prompts/copy.js +0 -131
- package/dist/prompts/fill.d.ts +0 -51
- package/dist/prompts/fill.js +0 -46
- package/dist/prompts/limits.d.ts +0 -53
- package/dist/prompts/limits.js +0 -53
- package/dist/prompts/search.d.ts +0 -58
- package/dist/prompts/search.js +0 -146
- package/dist/prompts/types.d.ts +0 -204
- package/dist/prompts/types.js +0 -13
- package/dist/team/activity.d.ts +0 -67
- package/dist/team/activity.js +0 -130
- package/dist/team/limits.d.ts +0 -308
- package/dist/team/limits.js +0 -330
- package/dist/team/model.d.ts +0 -104
- package/dist/team/model.js +0 -150
- package/dist/team/panel-rows.d.ts +0 -48
- package/dist/team/panel-rows.js +0 -75
- package/dist/team/timeline.d.ts +0 -74
- package/dist/team/timeline.js +0 -101
- package/dist/team/types.d.ts +0 -354
- package/dist/team/types.js +0 -13
- package/dist/todo/acceptance.d.ts +0 -120
- package/dist/todo/acceptance.js +0 -399
- package/dist/todo/follow-through.d.ts +0 -138
- package/dist/todo/follow-through.js +0 -248
- package/dist/todo/limits.d.ts +0 -152
- package/dist/todo/limits.js +0 -152
- package/dist/todo/panel-rows.d.ts +0 -45
- package/dist/todo/panel-rows.js +0 -70
- package/dist/todo/plan-sections.d.ts +0 -60
- package/dist/todo/plan-sections.js +0 -108
- package/dist/todo/row-window.d.ts +0 -51
- package/dist/todo/row-window.js +0 -107
- package/dist/todo/types.d.ts +0 -124
- package/dist/todo/types.js +0 -12
- package/dist/tools/human-input.d.ts +0 -212
- package/dist/tools/human-input.js +0 -265
- package/dist/tools/patch.d.ts +0 -115
- package/dist/tools/patch.js +0 -453
- package/dist/tools/terminal-output.d.ts +0 -115
- package/dist/tools/terminal-output.js +0 -201
- package/dist/tools/tool-output-store.d.ts +0 -68
- package/dist/tools/tool-output-store.js +0 -102
- package/dist/ui/ActivityLine.d.ts +0 -26
- package/dist/ui/ActivityLine.js +0 -48
- package/dist/ui/AutocompletePopup.d.ts +0 -23
- package/dist/ui/AutocompletePopup.js +0 -17
- package/dist/ui/BottomStatusRow.d.ts +0 -10
- package/dist/ui/BottomStatusRow.js +0 -9
- package/dist/ui/Composer.d.ts +0 -115
- package/dist/ui/Composer.js +0 -64
- package/dist/ui/GovernancePanel.d.ts +0 -50
- package/dist/ui/GovernancePanel.js +0 -77
- package/dist/ui/GovernanceRun.d.ts +0 -18
- package/dist/ui/GovernanceRun.js +0 -11
- package/dist/ui/Header.d.ts +0 -48
- package/dist/ui/Header.js +0 -27
- package/dist/ui/Logo.d.ts +0 -32
- package/dist/ui/Logo.js +0 -65
- package/dist/ui/Markdown.d.ts +0 -29
- package/dist/ui/Markdown.js +0 -116
- package/dist/ui/PromptCaret.d.ts +0 -11
- package/dist/ui/PromptCaret.js +0 -31
- package/dist/ui/PromptInput.d.ts +0 -192
- package/dist/ui/PromptInput.js +0 -689
- package/dist/ui/QueuePanel.d.ts +0 -8
- package/dist/ui/QueuePanel.js +0 -9
- package/dist/ui/QueueStatusRow.d.ts +0 -24
- package/dist/ui/QueueStatusRow.js +0 -51
- package/dist/ui/ScrollbackShell.d.ts +0 -132
- package/dist/ui/ScrollbackShell.js +0 -26
- package/dist/ui/SessionOpener.d.ts +0 -30
- package/dist/ui/SessionOpener.js +0 -12
- package/dist/ui/StatusBar.d.ts +0 -129
- package/dist/ui/StatusBar.js +0 -61
- package/dist/ui/TeamPanel.d.ts +0 -76
- package/dist/ui/TeamPanel.js +0 -103
- package/dist/ui/ToastStack.d.ts +0 -8
- package/dist/ui/ToastStack.js +0 -31
- package/dist/ui/TodoPanel.d.ts +0 -52
- package/dist/ui/TodoPanel.js +0 -214
- package/dist/ui/Transcript.d.ts +0 -105
- package/dist/ui/Transcript.js +0 -251
- package/dist/ui/UpdateLine.d.ts +0 -44
- package/dist/ui/UpdateLine.js +0 -129
- package/dist/ui/activity-phrases.d.ts +0 -33
- package/dist/ui/activity-phrases.js +0 -50
- package/dist/ui/capabilities.d.ts +0 -27
- package/dist/ui/capabilities.js +0 -65
- package/dist/ui/clipboard-task.d.ts +0 -29
- package/dist/ui/clipboard-task.js +0 -66
- package/dist/ui/clipboard.d.ts +0 -31
- package/dist/ui/clipboard.js +0 -157
- package/dist/ui/color-runtime.d.ts +0 -5
- package/dist/ui/color-runtime.js +0 -29
- package/dist/ui/composer-input.d.ts +0 -38
- package/dist/ui/composer-input.js +0 -79
- package/dist/ui/composer-limits.d.ts +0 -30
- package/dist/ui/composer-limits.js +0 -45
- package/dist/ui/composer-rows.d.ts +0 -73
- package/dist/ui/composer-rows.js +0 -129
- package/dist/ui/console-bridge.d.ts +0 -19
- package/dist/ui/console-bridge.js +0 -52
- package/dist/ui/density.d.ts +0 -26
- package/dist/ui/density.js +0 -34
- package/dist/ui/display-tab.d.ts +0 -51
- package/dist/ui/display-tab.js +0 -82
- package/dist/ui/editor-navigation.d.ts +0 -55
- package/dist/ui/editor-navigation.js +0 -96
- package/dist/ui/editor-reducer.d.ts +0 -108
- package/dist/ui/editor-reducer.js +0 -187
- package/dist/ui/enter-frames.d.ts +0 -47
- package/dist/ui/enter-frames.js +0 -117
- package/dist/ui/entries/AssistantEntry.d.ts +0 -37
- package/dist/ui/entries/AssistantEntry.js +0 -43
- package/dist/ui/entries/CompactionCard.d.ts +0 -88
- package/dist/ui/entries/CompactionCard.js +0 -222
- package/dist/ui/entries/DiffView.d.ts +0 -61
- package/dist/ui/entries/DiffView.js +0 -103
- package/dist/ui/entries/EntryFrame.d.ts +0 -23
- package/dist/ui/entries/EntryFrame.js +0 -6
- package/dist/ui/entries/FastCard.d.ts +0 -53
- package/dist/ui/entries/FastCard.js +0 -105
- package/dist/ui/entries/GovernanceCard.d.ts +0 -30
- package/dist/ui/entries/GovernanceCard.js +0 -32
- package/dist/ui/entries/InvocationCard.d.ts +0 -20
- package/dist/ui/entries/InvocationCard.js +0 -32
- package/dist/ui/entries/QueuedEntry.d.ts +0 -27
- package/dist/ui/entries/QueuedEntry.js +0 -33
- package/dist/ui/entries/RetryCard.d.ts +0 -56
- package/dist/ui/entries/RetryCard.js +0 -60
- package/dist/ui/entries/ServiceCard.d.ts +0 -82
- package/dist/ui/entries/ServiceCard.js +0 -151
- package/dist/ui/entries/TeamCard.d.ts +0 -55
- package/dist/ui/entries/TeamCard.js +0 -94
- package/dist/ui/entries/TodoCard.d.ts +0 -54
- package/dist/ui/entries/TodoCard.js +0 -98
- package/dist/ui/entries/ToolCard.d.ts +0 -81
- package/dist/ui/entries/ToolCard.js +0 -160
- package/dist/ui/entries/ToolPreview.d.ts +0 -59
- package/dist/ui/entries/ToolPreview.js +0 -208
- package/dist/ui/entries/UserEntry.d.ts +0 -36
- package/dist/ui/entries/UserEntry.js +0 -57
- package/dist/ui/exit-snapshot.d.ts +0 -43
- package/dist/ui/exit-snapshot.js +0 -26
- package/dist/ui/frame-differ.d.ts +0 -166
- package/dist/ui/frame-differ.js +0 -354
- package/dist/ui/frame-observer.d.ts +0 -17
- package/dist/ui/frame-observer.js +0 -94
- package/dist/ui/frame-parser.d.ts +0 -7
- package/dist/ui/frame-parser.js +0 -18
- package/dist/ui/gauge.d.ts +0 -39
- package/dist/ui/gauge.js +0 -55
- package/dist/ui/glyphs.d.ts +0 -178
- package/dist/ui/glyphs.js +0 -165
- package/dist/ui/governance-copy.d.ts +0 -69
- package/dist/ui/governance-copy.js +0 -104
- package/dist/ui/governance-status.d.ts +0 -145
- package/dist/ui/governance-status.js +0 -326
- package/dist/ui/gradient.d.ts +0 -11
- package/dist/ui/gradient.js +0 -50
- package/dist/ui/ink-runtime.d.ts +0 -4
- package/dist/ui/ink-runtime.js +0 -51
- package/dist/ui/interaction-copy.d.ts +0 -82
- package/dist/ui/interaction-copy.js +0 -38
- package/dist/ui/interaction-hints.d.ts +0 -44
- package/dist/ui/interaction-hints.js +0 -97
- package/dist/ui/layout/AppShell.d.ts +0 -17
- package/dist/ui/layout/AppShell.js +0 -6
- package/dist/ui/layout/Gutter.d.ts +0 -67
- package/dist/ui/layout/Gutter.js +0 -42
- package/dist/ui/layout/MeasuredEntry.d.ts +0 -21
- package/dist/ui/layout/MeasuredEntry.js +0 -30
- package/dist/ui/layout/OverlayFrame.d.ts +0 -73
- package/dist/ui/layout/OverlayFrame.js +0 -110
- package/dist/ui/layout/ScrollIndicator.d.ts +0 -32
- package/dist/ui/layout/ScrollIndicator.js +0 -22
- package/dist/ui/layout/ScrollViewport.d.ts +0 -40
- package/dist/ui/layout/ScrollViewport.js +0 -222
- package/dist/ui/layout/agents-board.d.ts +0 -102
- package/dist/ui/layout/agents-board.js +0 -389
- package/dist/ui/layout/autocomplete.d.ts +0 -18
- package/dist/ui/layout/autocomplete.js +0 -26
- package/dist/ui/layout/budget.d.ts +0 -43
- package/dist/ui/layout/budget.js +0 -52
- package/dist/ui/layout/cells.d.ts +0 -61
- package/dist/ui/layout/cells.js +0 -156
- package/dist/ui/layout/document-layout.d.ts +0 -13
- package/dist/ui/layout/document-layout.js +0 -10
- package/dist/ui/layout/follow-state.d.ts +0 -138
- package/dist/ui/layout/follow-state.js +0 -148
- package/dist/ui/layout/frame.d.ts +0 -36
- package/dist/ui/layout/frame.js +0 -39
- package/dist/ui/layout/governance-board.d.ts +0 -121
- package/dist/ui/layout/governance-board.js +0 -382
- package/dist/ui/layout/governance-card.d.ts +0 -53
- package/dist/ui/layout/governance-card.js +0 -134
- package/dist/ui/layout/governance-chip.d.ts +0 -38
- package/dist/ui/layout/governance-chip.js +0 -64
- package/dist/ui/layout/governance-panel.d.ts +0 -85
- package/dist/ui/layout/governance-panel.js +0 -358
- package/dist/ui/layout/governance-roster.d.ts +0 -65
- package/dist/ui/layout/governance-roster.js +0 -275
- package/dist/ui/layout/header-hints.d.ts +0 -90
- package/dist/ui/layout/header-hints.js +0 -110
- package/dist/ui/layout/header-left.d.ts +0 -115
- package/dist/ui/layout/header-left.js +0 -206
- package/dist/ui/layout/invocation-card.d.ts +0 -41
- package/dist/ui/layout/invocation-card.js +0 -91
- package/dist/ui/layout/kit-chip.d.ts +0 -50
- package/dist/ui/layout/kit-chip.js +0 -81
- package/dist/ui/layout/overlay-window.d.ts +0 -43
- package/dist/ui/layout/overlay-window.js +0 -51
- package/dist/ui/layout/queue-layout.d.ts +0 -19
- package/dist/ui/layout/queue-layout.js +0 -26
- package/dist/ui/layout/rail.d.ts +0 -7
- package/dist/ui/layout/rail.js +0 -16
- package/dist/ui/layout/scroll-indicator.d.ts +0 -27
- package/dist/ui/layout/scroll-indicator.js +0 -36
- package/dist/ui/layout/scroll.d.ts +0 -37
- package/dist/ui/layout/scroll.js +0 -99
- package/dist/ui/layout/scrollbar-geometry.d.ts +0 -17
- package/dist/ui/layout/scrollbar-geometry.js +0 -13
- package/dist/ui/layout/session-chip.d.ts +0 -52
- package/dist/ui/layout/session-chip.js +0 -64
- package/dist/ui/layout/shortcut-panel-layout.d.ts +0 -191
- package/dist/ui/layout/shortcut-panel-layout.js +0 -321
- package/dist/ui/layout/status-detail-layout.d.ts +0 -9
- package/dist/ui/layout/status-detail-layout.js +0 -79
- package/dist/ui/layout/status-layout.d.ts +0 -139
- package/dist/ui/layout/status-layout.js +0 -253
- package/dist/ui/layout/task-summary-cell.d.ts +0 -61
- package/dist/ui/layout/task-summary-cell.js +0 -65
- package/dist/ui/layout/team-panel.d.ts +0 -18
- package/dist/ui/layout/team-panel.js +0 -25
- package/dist/ui/layout/team-row.d.ts +0 -139
- package/dist/ui/layout/team-row.js +0 -246
- package/dist/ui/layout/todo-layout.d.ts +0 -62
- package/dist/ui/layout/todo-layout.js +0 -102
- package/dist/ui/layout/useTerminalSize.d.ts +0 -13
- package/dist/ui/layout/useTerminalSize.js +0 -50
- package/dist/ui/layout/viewport-geometry.d.ts +0 -29
- package/dist/ui/layout/viewport-geometry.js +0 -28
- package/dist/ui/layout/virtual-window.d.ts +0 -112
- package/dist/ui/layout/virtual-window.js +0 -488
- package/dist/ui/layout/wrap-rows.d.ts +0 -26
- package/dist/ui/layout/wrap-rows.js +0 -88
- package/dist/ui/live-clamp.d.ts +0 -14
- package/dist/ui/live-clamp.js +0 -46
- package/dist/ui/markdown-blocks.d.ts +0 -107
- package/dist/ui/markdown-blocks.js +0 -240
- package/dist/ui/overlays/AgentsBoardOverlay.d.ts +0 -57
- package/dist/ui/overlays/AgentsBoardOverlay.js +0 -183
- package/dist/ui/overlays/ConfirmDialog.d.ts +0 -31
- package/dist/ui/overlays/ConfirmDialog.js +0 -44
- package/dist/ui/overlays/GovernanceBoardOverlay.d.ts +0 -41
- package/dist/ui/overlays/GovernanceBoardOverlay.js +0 -76
- package/dist/ui/overlays/GovernanceSettingsPage.d.ts +0 -48
- package/dist/ui/overlays/GovernanceSettingsPage.js +0 -93
- package/dist/ui/overlays/HelpOverlay.d.ts +0 -29
- package/dist/ui/overlays/HelpOverlay.js +0 -232
- package/dist/ui/overlays/KitEditor.d.ts +0 -23
- package/dist/ui/overlays/KitEditor.js +0 -101
- package/dist/ui/overlays/KitManager.d.ts +0 -23
- package/dist/ui/overlays/KitManager.js +0 -104
- package/dist/ui/overlays/KitPicker.d.ts +0 -49
- package/dist/ui/overlays/KitPicker.js +0 -58
- package/dist/ui/overlays/ModelDiscoveryList.d.ts +0 -23
- package/dist/ui/overlays/ModelDiscoveryList.js +0 -161
- package/dist/ui/overlays/ModelPicker.d.ts +0 -26
- package/dist/ui/overlays/ModelPicker.js +0 -63
- package/dist/ui/overlays/ModelProfileEditor.d.ts +0 -29
- package/dist/ui/overlays/ModelProfileEditor.js +0 -168
- package/dist/ui/overlays/ModelProfilePicker.d.ts +0 -48
- package/dist/ui/overlays/ModelProfilePicker.js +0 -231
- package/dist/ui/overlays/PlanReviewOverlay.d.ts +0 -51
- package/dist/ui/overlays/PlanReviewOverlay.js +0 -132
- package/dist/ui/overlays/PromptEditorPage.d.ts +0 -48
- package/dist/ui/overlays/PromptEditorPage.js +0 -227
- package/dist/ui/overlays/PromptLibraryOverlay.d.ts +0 -37
- package/dist/ui/overlays/PromptLibraryOverlay.js +0 -191
- package/dist/ui/overlays/PromptPicker.d.ts +0 -36
- package/dist/ui/overlays/PromptPicker.js +0 -129
- package/dist/ui/overlays/PromptTextArea.d.ts +0 -86
- package/dist/ui/overlays/PromptTextArea.js +0 -141
- package/dist/ui/overlays/QuestionOverlay.d.ts +0 -39
- package/dist/ui/overlays/QuestionOverlay.js +0 -258
- package/dist/ui/overlays/QueueOverlay.d.ts +0 -22
- package/dist/ui/overlays/QueueOverlay.js +0 -79
- package/dist/ui/overlays/SettingsScreen.d.ts +0 -228
- package/dist/ui/overlays/SettingsScreen.js +0 -1037
- package/dist/ui/overlays/ShortcutPanel.d.ts +0 -39
- package/dist/ui/overlays/ShortcutPanel.js +0 -106
- package/dist/ui/overlays/TeamFanoutPage.d.ts +0 -51
- package/dist/ui/overlays/TeamFanoutPage.js +0 -90
- package/dist/ui/overlays/governance-settings.d.ts +0 -79
- package/dist/ui/overlays/governance-settings.js +0 -140
- package/dist/ui/overlays/kit-picker-state.d.ts +0 -87
- package/dist/ui/overlays/kit-picker-state.js +0 -136
- package/dist/ui/overlays/kit-settings-state.d.ts +0 -129
- package/dist/ui/overlays/kit-settings-state.js +0 -268
- package/dist/ui/overlays/model-probe-view.d.ts +0 -128
- package/dist/ui/overlays/model-probe-view.js +0 -225
- package/dist/ui/overlays/model-profile-state.d.ts +0 -177
- package/dist/ui/overlays/model-profile-state.js +0 -301
- package/dist/ui/overlays/prompt-library-state.d.ts +0 -162
- package/dist/ui/overlays/prompt-library-state.js +0 -335
- package/dist/ui/overlays/prompt-picker-state.d.ts +0 -71
- package/dist/ui/overlays/prompt-picker-state.js +0 -98
- package/dist/ui/overlays/team-fanout-state.d.ts +0 -106
- package/dist/ui/overlays/team-fanout-state.js +0 -155
- package/dist/ui/overlays/use-model-probe.d.ts +0 -30
- package/dist/ui/overlays/use-model-probe.js +0 -109
- package/dist/ui/palettes.d.ts +0 -112
- package/dist/ui/palettes.js +0 -130
- package/dist/ui/paste-frames.d.ts +0 -91
- package/dist/ui/paste-frames.js +0 -117
- package/dist/ui/paste-tokens.d.ts +0 -90
- package/dist/ui/paste-tokens.js +0 -147
- package/dist/ui/render-cache.d.ts +0 -81
- package/dist/ui/render-cache.js +0 -196
- package/dist/ui/render-governor.d.ts +0 -54
- package/dist/ui/render-governor.js +0 -78
- package/dist/ui/run-metrics.d.ts +0 -23
- package/dist/ui/run-metrics.js +0 -27
- package/dist/ui/run-status-row.d.ts +0 -61
- package/dist/ui/run-status-row.js +0 -54
- package/dist/ui/screen.d.ts +0 -107
- package/dist/ui/screen.js +0 -234
- package/dist/ui/scrollback/LiveTail.d.ts +0 -115
- package/dist/ui/scrollback/LiveTail.js +0 -48
- package/dist/ui/scrollback/band.d.ts +0 -114
- package/dist/ui/scrollback/band.js +0 -143
- package/dist/ui/scrollback/budget.d.ts +0 -90
- package/dist/ui/scrollback/budget.js +0 -100
- package/dist/ui/scrollback/canvas.d.ts +0 -100
- package/dist/ui/scrollback/canvas.js +0 -114
- package/dist/ui/scrollback/cursor-probe.d.ts +0 -71
- package/dist/ui/scrollback/cursor-probe.js +0 -133
- package/dist/ui/scrollback/drain.d.ts +0 -32
- package/dist/ui/scrollback/drain.js +0 -64
- package/dist/ui/scrollback/exit-summary.d.ts +0 -23
- package/dist/ui/scrollback/exit-summary.js +0 -25
- package/dist/ui/scrollback/limits.d.ts +0 -98
- package/dist/ui/scrollback/limits.js +0 -98
- package/dist/ui/scrollback/live-preview.d.ts +0 -34
- package/dist/ui/scrollback/live-preview.js +0 -118
- package/dist/ui/scrollback/overflow-print.d.ts +0 -108
- package/dist/ui/scrollback/overflow-print.js +0 -120
- package/dist/ui/scrollback/renderer.d.ts +0 -48
- package/dist/ui/scrollback/renderer.js +0 -186
- package/dist/ui/scrollback/scrollback-writer.d.ts +0 -174
- package/dist/ui/scrollback/scrollback-writer.js +0 -648
- package/dist/ui/scrollback/settled-boundary.d.ts +0 -42
- package/dist/ui/scrollback/settled-boundary.js +0 -109
- package/dist/ui/scrollback/tail-anchor.d.ts +0 -71
- package/dist/ui/scrollback/tail-anchor.js +0 -79
- package/dist/ui/scrollback/tail-window.d.ts +0 -73
- package/dist/ui/scrollback/tail-window.js +0 -89
- package/dist/ui/scrollback/use-scrollback-view.d.ts +0 -139
- package/dist/ui/scrollback/use-scrollback-view.js +0 -601
- package/dist/ui/scrollback/writer-shapes.d.ts +0 -127
- package/dist/ui/scrollback/writer-shapes.js +0 -159
- package/dist/ui/scrollbar-controller.d.ts +0 -30
- package/dist/ui/scrollbar-controller.js +0 -124
- package/dist/ui/selection/highlight.d.ts +0 -39
- package/dist/ui/selection/highlight.js +0 -64
- package/dist/ui/selection/screen-mirror.d.ts +0 -24
- package/dist/ui/selection/screen-mirror.js +0 -35
- package/dist/ui/selection/selection-controller.d.ts +0 -104
- package/dist/ui/selection/selection-controller.js +0 -372
- package/dist/ui/selection/selection.d.ts +0 -90
- package/dist/ui/selection/selection.js +0 -223
- package/dist/ui/shortcuts.d.ts +0 -81
- package/dist/ui/shortcuts.js +0 -221
- package/dist/ui/status-feedback.d.ts +0 -35
- package/dist/ui/status-feedback.js +0 -38
- package/dist/ui/stdout-frame-writer.d.ts +0 -74
- package/dist/ui/stdout-frame-writer.js +0 -155
- package/dist/ui/team-status.d.ts +0 -166
- package/dist/ui/team-status.js +0 -252
- package/dist/ui/terminal-plan.d.ts +0 -52
- package/dist/ui/terminal-plan.js +0 -49
- package/dist/ui/theme.d.ts +0 -96
- package/dist/ui/theme.js +0 -130
- package/dist/ui/transcript-text.d.ts +0 -41
- package/dist/ui/transcript-text.js +0 -282
- package/dist/ui/use-height-store.d.ts +0 -31
- package/dist/ui/use-height-store.js +0 -76
- package/dist/ui/use-render-governor.d.ts +0 -39
- package/dist/ui/use-render-governor.js +0 -57
- package/dist/ui/use-wheel-routing.d.ts +0 -57
- package/dist/ui/use-wheel-routing.js +0 -152
- package/dist/ui/win-vt-force.d.ts +0 -136
- package/dist/ui/win-vt-force.js +0 -237
- package/dist/ui/win-vt-input.d.ts +0 -57
- package/dist/ui/win-vt-input.js +0 -62
- package/dist/update/limits.d.ts +0 -111
- package/dist/update/limits.js +0 -111
- package/dist/update/semver.d.ts +0 -89
- package/dist/update/semver.js +0 -295
- package/dist/update/types.d.ts +0 -169
- package/dist/update/types.js +0 -68
- /package/dist/{ui → app}/session-bridge.d.ts +0 -0
- /package/dist/{ui → app}/session-bridge.js +0 -0
package/dist/compaction/meter.js
DELETED
|
@@ -1,512 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* `ContextMeter` - the ONE owner of "how full is the context right now"
|
|
3
|
-
* (context-usage-gauge-accuracy §3.2 / W1).
|
|
4
|
-
*
|
|
5
|
-
* ASCII ONLY: `src/compaction/**` is inside the glyph scanner's scope
|
|
6
|
-
* (`glyphs.test.ts::inScope`). If this module is ever moved to a new tree, the
|
|
7
|
-
* scanner's hardcoded directory list must be widened IN THE SAME COMMIT - a
|
|
8
|
-
* scanner that silently stops scanning is worse than no scanner, and this
|
|
9
|
-
* package has paid for that edit eleven times (I-7).
|
|
10
|
-
*
|
|
11
|
-
* IT LIVES HERE BUT IT IS NOT PART OF COMPACTION, and that is deliberate. The
|
|
12
|
-
* whole point of this class is that occupancy is measurable when compaction is
|
|
13
|
-
* OFF: `AgentController` builds a `CompactionWiring` only when
|
|
14
|
-
* `compaction.enabled` is true, so a measurement owned by the compactor is
|
|
15
|
-
* unreachable for exactly the sessions that most need a working gauge. It sits
|
|
16
|
-
* in this directory because `pressure.ts` - the arithmetic it drives - already
|
|
17
|
-
* does, and because moving it would cost a scanner edit for no gain (R-10).
|
|
18
|
-
*
|
|
19
|
-
* THE STATE MACHINE IN ONE PARAGRAPH. Every mutation of the history marks the
|
|
20
|
-
* meter DIRTY; every read that finds it dirty re-measures SYNCHRONOUSLY. That
|
|
21
|
-
* ordering is what removes the subscription-order dependency in the APPEND
|
|
22
|
-
* direction: it does not matter whether this class or the compaction wiring
|
|
23
|
-
* hears `tool_execution_end` first, because whoever reads gets a number that
|
|
24
|
-
* includes the appended message either way (I-2). It does NOT remove the
|
|
25
|
-
* dependency in the REPLACE direction - a splice does not announce itself to a
|
|
26
|
-
* listener that has not run yet - which is why the splice marks this dirty from
|
|
27
|
-
* `CompactionWiring.settlePending`'s own synchronous code (I-9), and why
|
|
28
|
-
* `current()` carries a structural belt for a missed invalidation site.
|
|
29
|
-
*/
|
|
30
|
-
import { getLogger } from '../logging/logger.js';
|
|
31
|
-
import { computeEstimateOffset, computePressure, isInputSideUnmeasured } from './pressure.js';
|
|
32
|
-
/**
|
|
33
|
-
* How long a scheduled publish waits.
|
|
34
|
-
*
|
|
35
|
-
* IT MUST BE A DELAY, NOT ZERO, AND NOT A SYNCHRONOUS MEASUREMENT (I-3). The
|
|
36
|
-
* loop emits `tool_execution_end` BEFORE it pushes the `tool_result` message, so
|
|
37
|
-
* anything that measures inside that event measures a history missing the single
|
|
38
|
-
* largest message of the turn - silently, and every turn. A `setTimeout` is
|
|
39
|
-
* necessarily later than that synchronous push.
|
|
40
|
-
*
|
|
41
|
-
* 400 ms also caps the publish rate at 2.5 Hz, which together with the reducer's
|
|
42
|
-
* identity short-circuit keeps a permanently visible row from becoming a
|
|
43
|
-
* re-render source (R-3).
|
|
44
|
-
*/
|
|
45
|
-
export const CONTEXT_METER_TICK_MS = 400;
|
|
46
|
-
/**
|
|
47
|
-
* The projection `ViewState` and `/context` read (§4.1).
|
|
48
|
-
*
|
|
49
|
-
* THE ONLY CONVERTER between `Pressure` and `ContextUsageSnapshot`. Two of them
|
|
50
|
-
* would eventually round the percentage differently, and "the status bar says 43
|
|
51
|
-
* and `/context` says 44" is the exact class of disagreement this whole feature
|
|
52
|
-
* exists to remove.
|
|
53
|
-
*/
|
|
54
|
-
export function toContextUsage(p) {
|
|
55
|
-
return {
|
|
56
|
-
occupied: p.occupied,
|
|
57
|
-
...(p.windowSource ? { windowSource: p.windowSource } : {}),
|
|
58
|
-
window: p.contextWindow,
|
|
59
|
-
// FROM `ratio`, NOT FROM A SECOND DIVISION. `computePressure` already
|
|
60
|
-
// clamped it to [0, 1] and already decided what a zero window means.
|
|
61
|
-
pct: Math.max(0, Math.min(100, Math.round(p.ratio * 100))),
|
|
62
|
-
source: p.source,
|
|
63
|
-
deltaTokens: p.deltaTokens,
|
|
64
|
-
windowKnown: p.windowKnown,
|
|
65
|
-
windowOverridden: p.windowOverridden,
|
|
66
|
-
...(p.windowOverrideOrigin !== undefined
|
|
67
|
-
? { windowOverrideOrigin: p.windowOverrideOrigin }
|
|
68
|
-
: {}),
|
|
69
|
-
};
|
|
70
|
-
}
|
|
71
|
-
/** The reading a meter with nothing measured yet reports. */
|
|
72
|
-
export function emptyContextUsage() {
|
|
73
|
-
return {
|
|
74
|
-
occupied: 0,
|
|
75
|
-
window: 0,
|
|
76
|
-
pct: 0,
|
|
77
|
-
source: 'estimate',
|
|
78
|
-
deltaTokens: 0,
|
|
79
|
-
windowKnown: false,
|
|
80
|
-
windowOverridden: false,
|
|
81
|
-
};
|
|
82
|
-
}
|
|
83
|
-
export class ContextMeter {
|
|
84
|
-
deps;
|
|
85
|
-
listeners = new Set();
|
|
86
|
-
unsubscribe = null;
|
|
87
|
-
timer = null;
|
|
88
|
-
disposed = false;
|
|
89
|
-
/**
|
|
90
|
-
* The authoritative usage of the last completed turn.
|
|
91
|
-
*
|
|
92
|
-
* Its presence is what selects `computePressure`'s MEASURED branch, so
|
|
93
|
-
* dropping it is how every reset degrades to an estimate rather than to a
|
|
94
|
-
* number describing a history that no longer exists.
|
|
95
|
-
*/
|
|
96
|
-
lastUsage;
|
|
97
|
-
/**
|
|
98
|
-
* The systematic difference between what `estimatePromptTokens` counts and
|
|
99
|
-
* what the provider bills (D-23) - chiefly the tool schemas.
|
|
100
|
-
*
|
|
101
|
-
* SURVIVES A SPLICE AND NOT A SESSION CHANGE (I-8). See `onHistorySpliced`.
|
|
102
|
-
*/
|
|
103
|
-
estimateOffset;
|
|
104
|
-
/** `messages.length` at the `turn_end` that produced `lastUsage`. */
|
|
105
|
-
measuredPrefixLength;
|
|
106
|
-
/** The last pressure PUBLISHED. Never re-derived on read - see `lastPublished`. */
|
|
107
|
-
last = null;
|
|
108
|
-
/** Whether the history has changed since the last measurement. */
|
|
109
|
-
dirty = true;
|
|
110
|
-
/** Whether the one-per-run empty-measurement warning has been spent. */
|
|
111
|
-
hasWarnedUnmeasuredInput = false;
|
|
112
|
-
prefixLast;
|
|
113
|
-
sampledPrompt;
|
|
114
|
-
sampledVersion;
|
|
115
|
-
publishedLength = -1;
|
|
116
|
-
publishedLast;
|
|
117
|
-
publishedPrompt;
|
|
118
|
-
publishedVersion;
|
|
119
|
-
constructor(deps) {
|
|
120
|
-
this.deps = deps;
|
|
121
|
-
}
|
|
122
|
-
// =========================================================================
|
|
123
|
-
// Reading
|
|
124
|
-
// =========================================================================
|
|
125
|
-
/**
|
|
126
|
-
* Occupancy right now. FOR THE SCREEN.
|
|
127
|
-
*
|
|
128
|
-
* Re-measures synchronously when dirty (I-2), and publishes when it does - the
|
|
129
|
-
* gauge has to fall in the SAME FRAME as the compaction that caused it (AC-1),
|
|
130
|
-
* and the caller that triggers this re-measurement is `CompactionWiring`'s own
|
|
131
|
-
* synchronous `snapshot()` inside `settlePending`. Leaving the publish to the
|
|
132
|
-
* scheduled tick instead would be worse than slow: the tick fires only when
|
|
133
|
-
* `dirty`, and this call is what clears it.
|
|
134
|
-
*
|
|
135
|
-
* NEVER THROWS. A meter that can throw is a status bar that can take the
|
|
136
|
-
* process down.
|
|
137
|
-
*/
|
|
138
|
-
current() {
|
|
139
|
-
// THE BELT (I-9), AND IT RUNS EVEN WHEN NOT DIRTY. The case it exists for is
|
|
140
|
-
// a splice that NOBODY announced, and in that case a missing `dirty` flag is
|
|
141
|
-
// precisely the symptom. `estimateAppendedTokens` bounds-checks too, but it
|
|
142
|
-
// only zeroes the DELTA and keeps the wrong measured base, so that belt does
|
|
143
|
-
// not cover this.
|
|
144
|
-
this.refreshValidity();
|
|
145
|
-
if (!this.dirty && this.last)
|
|
146
|
-
return this.last;
|
|
147
|
-
return this.measureAndPublish(this.lastUsage);
|
|
148
|
-
}
|
|
149
|
-
/**
|
|
150
|
-
* The last pressure this meter PUBLISHED. FOR THE BOOKS. Never re-measures.
|
|
151
|
-
*
|
|
152
|
-
* `Compactor.lastMeasured()` forwards here and not to `current()`, and the
|
|
153
|
-
* distinction is load-bearing (I-10): `compactor.ts`'s `tokensBefore` is the
|
|
154
|
-
* sole upstream of `tokensReclaimed`, the card's "reclaimed N tokens" line and
|
|
155
|
-
* `/compact status`'s session total. It wants the occupancy BEFORE the splice.
|
|
156
|
-
* Wired to `current()` it would re-measure the already-spliced history, report
|
|
157
|
-
* `reclaimed 0`, and render that number without a single log line about it.
|
|
158
|
-
*/
|
|
159
|
-
lastPublished() {
|
|
160
|
-
return this.last;
|
|
161
|
-
}
|
|
162
|
-
/** The published projection, or a zeroed one before the first measurement. */
|
|
163
|
-
currentUsage() {
|
|
164
|
-
return toContextUsage(this.current());
|
|
165
|
-
}
|
|
166
|
-
// =========================================================================
|
|
167
|
-
// Writing
|
|
168
|
-
// =========================================================================
|
|
169
|
-
/** Compatibility reads cannot establish or resurrect a provider sample. */
|
|
170
|
-
measureWith(_lastUsage) {
|
|
171
|
-
return this.current();
|
|
172
|
-
}
|
|
173
|
-
/**
|
|
174
|
-
* `turn_end` - the one moment in the whole flow that is FULLY measured.
|
|
175
|
-
*
|
|
176
|
-
* The loop emits it BEFORE pushing the assistant message, so the history right
|
|
177
|
-
* now is exactly the history the reported `usage` was billed for: the offset
|
|
178
|
-
* and the prefix length describe the same array by construction, and
|
|
179
|
-
* `deltaTokens` is 0. Published immediately for that reason - there is no
|
|
180
|
-
* better number to wait for.
|
|
181
|
-
*/
|
|
182
|
-
onTurnEnd(usage) {
|
|
183
|
-
if (isInputSideUnmeasured(usage)) {
|
|
184
|
-
// A usage that discloses NOTHING on the input side is not a
|
|
185
|
-
// measurement of this history (context-usage-zero-input-tokens B):
|
|
186
|
-
// arming the measured branch with it collapses occupancy to the
|
|
187
|
-
// turn's own outputTokens and strips the `~` off the gauge. KEEP
|
|
188
|
-
// WHATEVER IS STILL TRUSTED - an earlier good measurement of a
|
|
189
|
-
// prefix that still exists (the history only grows between splices,
|
|
190
|
-
// so "old good base + appended estimate" stays self-consistent), and
|
|
191
|
-
// the estimate offset it calibrated - and re-measure NOW so the
|
|
192
|
-
// gauge degrades in this frame instead of after the next turn.
|
|
193
|
-
this.warnUnmeasuredInputOnce(usage);
|
|
194
|
-
this.dirty = true;
|
|
195
|
-
this.current();
|
|
196
|
-
return;
|
|
197
|
-
}
|
|
198
|
-
const messages = this.deps.getMessages();
|
|
199
|
-
const systemPrompt = this.readSystemPrompt();
|
|
200
|
-
this.lastUsage = usage;
|
|
201
|
-
this.estimateOffset = computeEstimateOffset(usage, messages, systemPrompt);
|
|
202
|
-
this.measuredPrefixLength = messages.length;
|
|
203
|
-
this.prefixLast = messages[messages.length - 1];
|
|
204
|
-
this.sampledPrompt = systemPrompt;
|
|
205
|
-
this.sampledVersion = this.deps.getRequestVersion?.() ?? 0;
|
|
206
|
-
this.measureAndPublish(usage);
|
|
207
|
-
}
|
|
208
|
-
/**
|
|
209
|
-
* A compaction spliced the history (I-8, the SHALLOW reset).
|
|
210
|
-
*
|
|
211
|
-
* `estimateOffset` IS KEPT, and that is the whole reason this method is not
|
|
212
|
-
* `onHistoryReplaced`. The offset describes "what this toolset costs on this
|
|
213
|
-
* model above what the estimator counts"; a splice changes neither the toolset
|
|
214
|
-
* nor the model, so it is still valid - and it is the only calibration the
|
|
215
|
-
* estimate branch has until the next `turn_end`. Dropping it makes the gauge
|
|
216
|
-
* fall several thousand tokens too far and then visibly climb back on the next
|
|
217
|
-
* turn, for no reason the user can see (I-5).
|
|
218
|
-
*
|
|
219
|
-
* IDEMPOTENT. Both `settlePending` (the authority, I-9) and this meter's own
|
|
220
|
-
* `compaction_end` handler reach it, and the second one must cost nothing.
|
|
221
|
-
*/
|
|
222
|
-
onHistorySpliced() {
|
|
223
|
-
this.lastUsage = undefined;
|
|
224
|
-
this.measuredPrefixLength = undefined;
|
|
225
|
-
this.prefixLast = undefined;
|
|
226
|
-
if (this.dirty)
|
|
227
|
-
return;
|
|
228
|
-
this.dirty = true;
|
|
229
|
-
this.scheduleTick();
|
|
230
|
-
}
|
|
231
|
-
/**
|
|
232
|
-
* The history came from somewhere else entirely (I-8, the DEEP reset):
|
|
233
|
-
* `/clear`, `/reset`, `/resume`.
|
|
234
|
-
*
|
|
235
|
-
* `estimateOffset` GOES TOO, unlike the shallow reset above. `/resume` can
|
|
236
|
-
* change the model in the same breath (`builtins.ts`'s restore path does), and
|
|
237
|
-
* an offset carried across that is a calibration constant applied to something
|
|
238
|
-
* it never calibrated. The first reading afterwards is therefore a bare
|
|
239
|
-
* estimate - biased LOW, and corrected by the very next `turn_end`. Biased low
|
|
240
|
-
* and self-correcting beats biased high and permanent.
|
|
241
|
-
*/
|
|
242
|
-
onHistoryReplaced() {
|
|
243
|
-
this.lastUsage = undefined;
|
|
244
|
-
this.measuredPrefixLength = undefined;
|
|
245
|
-
this.prefixLast = undefined;
|
|
246
|
-
this.estimateOffset = undefined;
|
|
247
|
-
this.sampledPrompt = undefined;
|
|
248
|
-
this.sampledVersion = undefined;
|
|
249
|
-
this.dirty = true;
|
|
250
|
-
this.scheduleTick();
|
|
251
|
-
}
|
|
252
|
-
/**
|
|
253
|
-
* Only the denominator moved (window override or model metadata refresh).
|
|
254
|
-
*
|
|
255
|
-
* DELIBERATELY NOT A RESET. The measured base is still a true statement about
|
|
256
|
-
* the history, so throwing it away would trade a correct numerator for a whole
|
|
257
|
-
* history estimate and produce a visible jump on a common operation. The
|
|
258
|
-
* Changing the model connection or request environment requires the deep
|
|
259
|
-
* invalidation path instead; its measurement is no longer transferable.
|
|
260
|
-
*/
|
|
261
|
-
onWindowChanged() {
|
|
262
|
-
this.dirty = true;
|
|
263
|
-
this.current();
|
|
264
|
-
}
|
|
265
|
-
/**
|
|
266
|
-
* Something was appended. Mark dirty, arrange a throttled publish, MEASURE
|
|
267
|
-
* NOTHING (I-3).
|
|
268
|
-
*/
|
|
269
|
-
scheduleTick() {
|
|
270
|
-
this.dirty = true;
|
|
271
|
-
// NO SUBSCRIBERS, NO TIMER (I-11). `AgentController` is shared with
|
|
272
|
-
// `aragon exec`, where nothing reads this number; a headless run must not
|
|
273
|
-
// pay a timer per tool call, and a pending tick must never be able to hold
|
|
274
|
-
// the process open for an extra 400 ms. `current()` is unaffected - it
|
|
275
|
-
// measures on demand, so `wiring.snapshot()` and `/context` still work in a
|
|
276
|
-
// host with no UI.
|
|
277
|
-
if (this.listeners.size === 0)
|
|
278
|
-
return;
|
|
279
|
-
if (this.timer !== null || this.disposed)
|
|
280
|
-
return;
|
|
281
|
-
const handle = setTimeout(() => {
|
|
282
|
-
this.timer = null;
|
|
283
|
-
if (!this.dirty || this.disposed)
|
|
284
|
-
return;
|
|
285
|
-
this.current();
|
|
286
|
-
}, CONTEXT_METER_TICK_MS);
|
|
287
|
-
// The other half of I-11: an armed tick must not keep the event loop alive.
|
|
288
|
-
const unrefable = handle;
|
|
289
|
-
if (typeof unrefable.unref === 'function')
|
|
290
|
-
unrefable.unref();
|
|
291
|
-
this.timer = handle;
|
|
292
|
-
}
|
|
293
|
-
// =========================================================================
|
|
294
|
-
// Plumbing
|
|
295
|
-
// =========================================================================
|
|
296
|
-
/** Publish to this meter's own subscribers. Returns an unsubscribe function. */
|
|
297
|
-
subscribe(listener) {
|
|
298
|
-
this.listeners.add(listener);
|
|
299
|
-
return () => {
|
|
300
|
-
this.listeners.delete(listener);
|
|
301
|
-
};
|
|
302
|
-
}
|
|
303
|
-
/**
|
|
304
|
-
* Subscribe to the lead agent's stream. IDEMPOTENT.
|
|
305
|
-
*
|
|
306
|
-
* THIS TABLE IS NOT THE SOURCE OF COMPACTION CORRECTNESS (I-9). The splice is
|
|
307
|
-
* marked dirty by `CompactionWiring.settlePending` inside its own synchronous
|
|
308
|
-
* code, BEFORE it emits either event, so a reader is correct regardless of
|
|
309
|
-
* which listener the emitter reaches first. The `compaction_end` row below is
|
|
310
|
-
* a second, idempotent path that serves the manual `/compact` route and any
|
|
311
|
-
* future splicer.
|
|
312
|
-
*/
|
|
313
|
-
attach(subscribe) {
|
|
314
|
-
if (this.unsubscribe)
|
|
315
|
-
return;
|
|
316
|
-
this.unsubscribe = subscribe((event) => this.onAgentEvent(event));
|
|
317
|
-
}
|
|
318
|
-
dispose() {
|
|
319
|
-
this.disposed = true;
|
|
320
|
-
if (this.timer !== null) {
|
|
321
|
-
clearTimeout(this.timer);
|
|
322
|
-
this.timer = null;
|
|
323
|
-
}
|
|
324
|
-
this.unsubscribe?.();
|
|
325
|
-
this.unsubscribe = null;
|
|
326
|
-
this.listeners.clear();
|
|
327
|
-
}
|
|
328
|
-
// =========================================================================
|
|
329
|
-
// Internals
|
|
330
|
-
// =========================================================================
|
|
331
|
-
/**
|
|
332
|
-
* ONE warn per run (context-usage-zero-input-tokens B). A single day of
|
|
333
|
-
* real usage logged 1,973 zero-input turns; a per-turn warning is a flood
|
|
334
|
-
* that teaches whoever reads the file to ignore it.
|
|
335
|
-
*
|
|
336
|
-
* The logger is resolved LAZILY rather than captured at construction:
|
|
337
|
-
* hosts build this class before `installLogging()`, and a child captured
|
|
338
|
-
* then would stay bound to the silent pre-install logger forever.
|
|
339
|
-
*/
|
|
340
|
-
warnUnmeasuredInputOnce(usage) {
|
|
341
|
-
if (this.hasWarnedUnmeasuredInput)
|
|
342
|
-
return;
|
|
343
|
-
this.hasWarnedUnmeasuredInput = true;
|
|
344
|
-
getLogger().warn('compaction', 'context_input_tokens_unreported', { in: usage.inputTokens, out: usage.outputTokens });
|
|
345
|
-
}
|
|
346
|
-
onAgentEvent(event) {
|
|
347
|
-
switch (event.type) {
|
|
348
|
-
case 'turn_end':
|
|
349
|
-
this.onTurnEnd(event.usage);
|
|
350
|
-
return;
|
|
351
|
-
case 'tool_execution_end':
|
|
352
|
-
// DELAYED, NEVER SYNCHRONOUS. See `CONTEXT_METER_TICK_MS` (I-3).
|
|
353
|
-
this.scheduleTick();
|
|
354
|
-
return;
|
|
355
|
-
case 'compaction_end':
|
|
356
|
-
// The engine's verdict. `applied` means the history really was replaced.
|
|
357
|
-
if (event.applied)
|
|
358
|
-
this.onHistorySpliced();
|
|
359
|
-
else
|
|
360
|
-
this.scheduleTick();
|
|
361
|
-
return;
|
|
362
|
-
case 'agent_end':
|
|
363
|
-
this.scheduleTick();
|
|
364
|
-
return;
|
|
365
|
-
default:
|
|
366
|
-
// `message_update` is a STREAM event and is deliberately ignored (N-2):
|
|
367
|
-
// the output tokens of an in-flight reply are not knowable until `done`,
|
|
368
|
-
// and guessing them would add a third approximation to a number that
|
|
369
|
-
// already carries two.
|
|
370
|
-
return;
|
|
371
|
-
}
|
|
372
|
-
}
|
|
373
|
-
/**
|
|
374
|
-
* The structural belt for a missed invalidation site (I-9).
|
|
375
|
-
*
|
|
376
|
-
* A recorded prefix that is LONGER than the history it indexes describes an
|
|
377
|
-
* array that no longer exists. Rather than merely zeroing the delta - which is
|
|
378
|
-
* what `estimateAppendedTokens` does, keeping the wrong measured base - this
|
|
379
|
-
* drops the base too and forces the estimate branch.
|
|
380
|
-
*
|
|
381
|
-
* THE COMPARISON IS STRICT, AND THAT BOUNDARY IS LOAD-BEARING (IF-1). The
|
|
382
|
-
* design document wrote `length <= measuredPrefixLength`, which is off by one:
|
|
383
|
-
* `turn_end` is emitted BEFORE the assistant message is pushed, so the instant
|
|
384
|
-
* `onTurnEnd` records the prefix the history is EXACTLY that long. An
|
|
385
|
-
* inclusive test therefore discards a measurement one statement after taking
|
|
386
|
-
* it - but only when this meter's listener runs before the compaction wiring's,
|
|
387
|
-
* because the wiring's `snapshot()` is what reads in that window. That is a
|
|
388
|
-
* silent, subscription-order-dependent fallback to the estimate branch on
|
|
389
|
-
* every single turn, which is the exact class of bug this feature exists to
|
|
390
|
-
* remove. A measurement taken at length N describes every history of length
|
|
391
|
-
* >= N; only a SHORTER one is impossible.
|
|
392
|
-
*
|
|
393
|
-
* Returns whether anything was discarded.
|
|
394
|
-
*/
|
|
395
|
-
discardStalePrefix() {
|
|
396
|
-
if (this.measuredPrefixLength === undefined)
|
|
397
|
-
return false;
|
|
398
|
-
const messages = this.deps.getMessages();
|
|
399
|
-
if (messages.length >= this.measuredPrefixLength &&
|
|
400
|
-
messages[this.measuredPrefixLength - 1] === this.prefixLast)
|
|
401
|
-
return false;
|
|
402
|
-
this.lastUsage = undefined;
|
|
403
|
-
this.measuredPrefixLength = undefined;
|
|
404
|
-
this.prefixLast = undefined;
|
|
405
|
-
return true;
|
|
406
|
-
}
|
|
407
|
-
/**
|
|
408
|
-
* Measure, cache, clear the dirty flag, publish. The ONE write path.
|
|
409
|
-
*
|
|
410
|
-
* Every public mutator funnels through here so "what was published" and "what
|
|
411
|
-
* is cached" cannot drift, which is what makes `lastPublished()` a meaningful
|
|
412
|
-
* answer rather than a stale one.
|
|
413
|
-
*/
|
|
414
|
-
refreshValidity() {
|
|
415
|
-
const messages = this.deps.getMessages();
|
|
416
|
-
const prompt = this.readSystemPrompt();
|
|
417
|
-
const version = this.deps.getRequestVersion?.() ?? 0;
|
|
418
|
-
if (this.sampledPrompt !== undefined &&
|
|
419
|
-
(prompt !== this.sampledPrompt || version !== this.sampledVersion)) {
|
|
420
|
-
this.onHistoryReplaced();
|
|
421
|
-
}
|
|
422
|
-
if (this.discardStalePrefix())
|
|
423
|
-
this.dirty = true;
|
|
424
|
-
const window = this.resolveWindow();
|
|
425
|
-
const last = this.last;
|
|
426
|
-
if (messages.length !== this.publishedLength ||
|
|
427
|
-
messages[messages.length - 1] !== this.publishedLast ||
|
|
428
|
-
prompt !== this.publishedPrompt || version !== this.publishedVersion ||
|
|
429
|
-
window.contextWindow !== last?.contextWindow ||
|
|
430
|
-
window.windowKnown !== last?.windowKnown ||
|
|
431
|
-
window.windowOverridden !== last?.windowOverridden ||
|
|
432
|
-
// ORIGIN IS PART OF THE DIRTY CHECK: a save that keeps the same number
|
|
433
|
-
// but moves it from the legacy key to the bound profile would otherwise
|
|
434
|
-
// leave `/context` naming the old source until the next measurement.
|
|
435
|
-
window.windowOverrideOrigin !== last?.windowOverrideOrigin ||
|
|
436
|
-
this.deps.getModelInfo().contextWindowSource !== last?.windowSource)
|
|
437
|
-
this.dirty = true;
|
|
438
|
-
}
|
|
439
|
-
measureAndPublish(lastUsage) {
|
|
440
|
-
const pressure = this.compute(lastUsage);
|
|
441
|
-
const messages = this.deps.getMessages();
|
|
442
|
-
this.publishedLength = messages.length;
|
|
443
|
-
this.publishedLast = messages[messages.length - 1];
|
|
444
|
-
this.publishedPrompt = this.readSystemPrompt();
|
|
445
|
-
this.publishedVersion = this.deps.getRequestVersion?.() ?? 0;
|
|
446
|
-
this.last = pressure;
|
|
447
|
-
this.dirty = false;
|
|
448
|
-
this.publish(pressure);
|
|
449
|
-
return pressure;
|
|
450
|
-
}
|
|
451
|
-
compute(lastUsage) {
|
|
452
|
-
const window = this.resolveWindow();
|
|
453
|
-
return computePressure({
|
|
454
|
-
...(lastUsage ? { lastUsage } : {}),
|
|
455
|
-
messages: this.deps.getMessages(),
|
|
456
|
-
systemPrompt: this.readSystemPrompt(),
|
|
457
|
-
contextWindow: window.contextWindow,
|
|
458
|
-
windowSource: this.deps.getModelInfo().contextWindowSource,
|
|
459
|
-
windowKnown: window.windowKnown,
|
|
460
|
-
windowOverridden: window.windowOverridden,
|
|
461
|
-
...(window.windowOverrideOrigin !== undefined
|
|
462
|
-
? { windowOverrideOrigin: window.windowOverrideOrigin }
|
|
463
|
-
: {}),
|
|
464
|
-
...(this.estimateOffset !== undefined ? { estimateOffset: this.estimateOffset } : {}),
|
|
465
|
-
...(this.measuredPrefixLength !== undefined
|
|
466
|
-
? { measuredPrefixLength: this.measuredPrefixLength }
|
|
467
|
-
: {}),
|
|
468
|
-
});
|
|
469
|
-
}
|
|
470
|
-
/**
|
|
471
|
-
* Where the denominator comes from, and whether it can be trusted.
|
|
472
|
-
*
|
|
473
|
-
* AN OVERRIDE MAKES THE WINDOW KNOWN (I-6): the user asserted it, so the `~`
|
|
474
|
-
* that means "this denominator is a guess" has no business staying on the
|
|
475
|
-
* percentage. `windowOverridden` travels separately so `/context` can still
|
|
476
|
-
* name the source - a hand-typed window that is wrong is exactly the case that
|
|
477
|
-
* most needs to be visible.
|
|
478
|
-
*/
|
|
479
|
-
resolveWindow() {
|
|
480
|
-
const override = this.deps.getWindowOverride();
|
|
481
|
-
if (override !== null && Number.isFinite(override) && override > 0) {
|
|
482
|
-
// ORIGIN ONLY RIDES THE OVERRIDE BRANCH: the AUTO branch names its own
|
|
483
|
-
// source through `getModelInfo().contextWindowSource`, and the two must
|
|
484
|
-
// never both claim the denominator (profile-context-window §6.1).
|
|
485
|
-
const origin = this.deps.getWindowOverrideOrigin?.();
|
|
486
|
-
return { contextWindow: override, windowKnown: true, windowOverridden: true,
|
|
487
|
-
...(origin !== undefined ? { windowOverrideOrigin: origin } : {}) };
|
|
488
|
-
}
|
|
489
|
-
return {
|
|
490
|
-
contextWindow: this.deps.getModelInfo().contextWindow,
|
|
491
|
-
windowKnown: this.deps.isWindowKnown(),
|
|
492
|
-
windowOverridden: false,
|
|
493
|
-
};
|
|
494
|
-
}
|
|
495
|
-
readSystemPrompt() {
|
|
496
|
-
return this.deps.getSystemPrompt();
|
|
497
|
-
}
|
|
498
|
-
publish(pressure) {
|
|
499
|
-
if (this.listeners.size === 0)
|
|
500
|
-
return;
|
|
501
|
-
const usage = toContextUsage(pressure);
|
|
502
|
-
for (const listener of [...this.listeners]) {
|
|
503
|
-
try {
|
|
504
|
-
listener(usage);
|
|
505
|
-
}
|
|
506
|
-
catch {
|
|
507
|
-
// One bad subscriber must not take the run down with it - the rule
|
|
508
|
-
// `CompactionWiring.emit` and `TeamRuntime.emit` both already state.
|
|
509
|
-
}
|
|
510
|
-
}
|
|
511
|
-
}
|
|
512
|
-
}
|
|
@@ -1,163 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Context occupancy and the trigger (context-auto-compaction §3.4).
|
|
3
|
-
*
|
|
4
|
-
* ASCII ONLY: `src/compaction/**` is inside the glyph scanner's scope.
|
|
5
|
-
*
|
|
6
|
-
* PURE. No clock, no config read, no I/O - every input arrives as an argument,
|
|
7
|
-
* which is what lets the trigger and the status-bar gauge share one function and
|
|
8
|
-
* be tested without a live session.
|
|
9
|
-
*/
|
|
10
|
-
import { type Message, type TokenUsage } from '@aragon-agent/core';
|
|
11
|
-
import type { Pressure } from './types.js';
|
|
12
|
-
/**
|
|
13
|
-
* How much of the window the conversation occupies, from ONE reported usage.
|
|
14
|
-
*
|
|
15
|
-
* THE CACHE TERMS ARE NOT DECORATION. Anthropic's `message_start` reports
|
|
16
|
-
* `input_tokens` EXCLUDING cached tokens and puts them in
|
|
17
|
-
* `cache_read_input_tokens` / `cache_creation_input_tokens`. This CLI never sends
|
|
18
|
-
* `cache_control`, so on a direct connection they are absent and the sum is
|
|
19
|
-
* unchanged - but any gateway or proxy that caches on the user's behalf makes
|
|
20
|
-
* them non-zero, and the status bar's old formula
|
|
21
|
-
* (`usage.inputTokens + usage.outputTokens`) silently UNDER-reports occupancy for
|
|
22
|
-
* exactly those users. That is a live, pre-existing defect in the number this
|
|
23
|
-
* feature triggers on.
|
|
24
|
-
*
|
|
25
|
-
* THIS SUM IS ONLY VALID FOR *ADDITIVE* CACHE FIELDS, AND THAT IS A PROVIDER-SIDE
|
|
26
|
-
* INVARIANT RATHER THAN A PROPERTY OF `TokenUsage` (C-14 / P1-10). It holds today
|
|
27
|
-
* because exactly one adapter writes those fields: `openai.ts` sets
|
|
28
|
-
* `inputTokens = prompt_tokens` and `google.ts` sets it from `promptTokenCount`,
|
|
29
|
-
* and NEITHER ever mentions `cacheReadTokens` / `cacheWriteTokens`. OpenAI's
|
|
30
|
-
* `prompt_tokens` ALREADY INCLUDES cached tokens, so mapping
|
|
31
|
-
* `prompt_tokens_details.cached_tokens` onto the existing field - a change that
|
|
32
|
-
* reads as a pure improvement and would sail through review - turns this into a
|
|
33
|
-
* double-count and fires compaction early on every OpenAI session, with the gauge
|
|
34
|
-
* agreeing with it and nothing reporting a fault. A provider that reports an
|
|
35
|
-
* INCLUSIVE total must add a DIFFERENTLY NAMED field. `compaction-pressure.test.ts`
|
|
36
|
-
* scans the adapters so the trap fails loudly at the moment someone opens it.
|
|
37
|
-
*
|
|
38
|
-
* THE GAUGE AND THE TRIGGER MUST READ THIS SAME FUNCTION (R-11 / AC-3). If they
|
|
39
|
-
* diverge, a user watching 78 % on the status bar sees compaction fire, concludes
|
|
40
|
-
* the feature is broken, and turns it off.
|
|
41
|
-
*/
|
|
42
|
-
export declare function occupiedTokens(usage: TokenUsage): number;
|
|
43
|
-
/**
|
|
44
|
-
* Whether a usage measured ANYTHING on the input side
|
|
45
|
-
* (context-usage-zero-input-tokens B).
|
|
46
|
-
*
|
|
47
|
-
* THE EMPTY MEASUREMENT THIS EXISTS FOR. A turn that billed output tokens
|
|
48
|
-
* while reporting inputTokens 0 AND no cache terms did not measure the
|
|
49
|
-
* request - no real request is free of input. Anthropic-COMPATIBLE relays
|
|
50
|
-
* emit exactly this shape (bigmodel on every turn, Kimi intermittently),
|
|
51
|
-
* and the meter used to arm its measured branch with it: occupancy collapsed
|
|
52
|
-
* to the turn's own outputTokens, the `~` honesty marker vanished with
|
|
53
|
-
* `source: 'usage'`, and the trigger - which reads the same number - never
|
|
54
|
-
* fired. The defense is to not trust such a usage as a measurement.
|
|
55
|
-
*
|
|
56
|
-
* THE CACHE TERMS ARE PART OF THE INPUT SIDE, DELIBERATELY. Anthropic's real
|
|
57
|
-
* `input_tokens` EXCLUDES cached tokens, so a deeply cached turn reports a
|
|
58
|
-
* tiny `input_tokens` next to a huge `cache_read_input_tokens`. That IS a
|
|
59
|
-
* valid measurement (C-14), and judging on `inputTokens === 0` alone would
|
|
60
|
-
* reject it and strand a correct gauge on the estimator.
|
|
61
|
-
*
|
|
62
|
-
* `outputTokens > 0` separates "the stream ran, billed output, and disclosed
|
|
63
|
-
* no input" from a degenerate all-zero usage, which the reviewed predicate
|
|
64
|
-
* deliberately does not speak for.
|
|
65
|
-
*
|
|
66
|
-
* SINGLE AUTHORITY. The meter consumes this, and any future observability
|
|
67
|
-
* hint (fix C) must too: two inline copies of "did the gateway disclose
|
|
68
|
-
* input" would drift apart exactly the way the gauge and the trigger once
|
|
69
|
-
* could (R-11).
|
|
70
|
-
*/
|
|
71
|
-
export declare function isInputSideUnmeasured(usage: TokenUsage): boolean;
|
|
72
|
-
/**
|
|
73
|
-
* The calibration offset for this turn (D-23 / P1-11).
|
|
74
|
-
*
|
|
75
|
-
* Clamped at 0: a NEGATIVE offset would mean the estimator over-counted, which
|
|
76
|
-
* is possible for a tool-free session on a verbose model, and applying it would
|
|
77
|
-
* make the fallback read LOWER than the raw estimate - moving the one number
|
|
78
|
-
* that is already biased low further in the wrong direction.
|
|
79
|
-
*/
|
|
80
|
-
export declare function computeEstimateOffset(usage: TokenUsage, messages: readonly Message[], systemPrompt: string): number;
|
|
81
|
-
export interface PressureInput {
|
|
82
|
-
windowSource?: Pressure['windowSource'];
|
|
83
|
-
/** Authoritative usage of the last completed turn, or `undefined` (§3.4.2). */
|
|
84
|
-
lastUsage?: TokenUsage;
|
|
85
|
-
messages: readonly Message[];
|
|
86
|
-
systemPrompt: string;
|
|
87
|
-
contextWindow: number;
|
|
88
|
-
/** False when the window is `buildRuntimeModel`'s 128k placeholder. */
|
|
89
|
-
windowKnown: boolean;
|
|
90
|
-
/**
|
|
91
|
-
* Whether `contextWindow` came from the user's `contextWindow` override
|
|
92
|
-
* (context-usage-gauge-accuracy I-6). Defaults to `false`, so every existing
|
|
93
|
-
* construction site is unchanged and the arithmetic below is untouched.
|
|
94
|
-
*/
|
|
95
|
-
windowOverridden?: boolean;
|
|
96
|
-
/**
|
|
97
|
-
* Which override surface supplied `contextWindow` (profile-context-window).
|
|
98
|
-
* PURE PASS-THROUGH like `windowOverridden` - the arithmetic below never
|
|
99
|
-
* reads it; it only travels with the number so `/context` can name the
|
|
100
|
-
* source honestly.
|
|
101
|
-
*/
|
|
102
|
-
windowOverrideOrigin?: Pressure['windowOverrideOrigin'];
|
|
103
|
-
/** Carried from the last `turn_end`; applied to every ESTIMATED figure. */
|
|
104
|
-
estimateOffset?: number;
|
|
105
|
-
/**
|
|
106
|
-
* The history LENGTH the measurement in `lastUsage` covered - i.e.
|
|
107
|
-
* `messages.length` at the `turn_end` that produced it, BEFORE the assistant
|
|
108
|
-
* message was pushed.
|
|
109
|
-
*
|
|
110
|
-
* `undefined` DISABLES THE DELTA ENTIRELY and reproduces round 1's behaviour
|
|
111
|
-
* exactly, which is what makes a missed invalidation cost accuracy rather than
|
|
112
|
-
* correctness.
|
|
113
|
-
*/
|
|
114
|
-
measuredPrefixLength?: number;
|
|
115
|
-
}
|
|
116
|
-
/**
|
|
117
|
-
* Tokens appended to the history since the measurement that produced `lastUsage`
|
|
118
|
-
* (context-auto-compaction-hardening §3.2.2 / W1).
|
|
119
|
-
*
|
|
120
|
-
* `+ 1` SKIPS THE ASSISTANT MESSAGE, and that is not an off-by-one to tidy away:
|
|
121
|
-
* `turn_end` is emitted BEFORE the push (`agent-loop.ts:478` / `:497`, and
|
|
122
|
-
* `Agent.emit` is synchronous), so the message at index `measuredPrefixLength` is
|
|
123
|
-
* the assistant turn whose cost is ALREADY inside `usage.outputTokens`. Counting
|
|
124
|
-
* it again double-charges every turn.
|
|
125
|
-
*
|
|
126
|
-
* NO `estimateOffset` IS APPLIED HERE. That offset is the systematic difference
|
|
127
|
-
* between what `estimatePromptTokens` counts and what the provider bills for a
|
|
128
|
-
* WHOLE REQUEST - chiefly the tool schemas, which are sent once per request and
|
|
129
|
-
* are already inside the measured base. It is a per-request constant, not a
|
|
130
|
-
* per-message rate; adding it to a slice would inflate occupancy by several
|
|
131
|
-
* thousand tokens on every turn and fire compaction early on short
|
|
132
|
-
* conversations.
|
|
133
|
-
*
|
|
134
|
-
* BOUNDS-CHECKED RATHER THAN TRUSTED. If the recorded prefix no longer indexes
|
|
135
|
-
* this array - a `/clear`, a `/resume`, a splice whose invalidation call was
|
|
136
|
-
* missed - the delta is 0 and the function degrades to round 1's number.
|
|
137
|
-
*/
|
|
138
|
-
export declare function estimateAppendedTokens(messages: readonly Message[], measuredPrefixLength: number | undefined): number;
|
|
139
|
-
/**
|
|
140
|
-
* THE ONE RULE FOR "PART OF THIS NUMBER IS A GUESS" (§6.3).
|
|
141
|
-
*
|
|
142
|
-
* `Pressure.source` deliberately keeps two members: it answers "where did the
|
|
143
|
-
* BASE come from", and a third member would force every existing consumer of the
|
|
144
|
-
* union to be revisited for a distinction none of them acts on. The `~` question
|
|
145
|
-
* is this function, and it has one test.
|
|
146
|
-
*/
|
|
147
|
-
export declare function isApproximate(p: Pressure): boolean;
|
|
148
|
-
/**
|
|
149
|
-
* Occupancy right now, measured when there is a measurement and calibrated when
|
|
150
|
-
* there is not.
|
|
151
|
-
*
|
|
152
|
-
* `source` is CARRIED, never re-derived, and it reaches the UI: the status bar
|
|
153
|
-
* already renders a leading `~` when the window is unknown, and this widens that
|
|
154
|
-
* to "the NUMBER is approximate too". Honesty about a guess is cheaper than a
|
|
155
|
-
* support thread about a wrong percentage.
|
|
156
|
-
*/
|
|
157
|
-
export declare function computePressure(input: PressureInput): Pressure;
|
|
158
|
-
/** Only actual occupancy authorizes automatic compaction. */
|
|
159
|
-
export declare function shouldCompactAt(p: Pressure, threshold: number): boolean;
|
|
160
|
-
/** Capacity helper retained for the standalone tail-budget API, never a trigger. */
|
|
161
|
-
export declare function requiredHeadroom(req: {
|
|
162
|
-
maxOutputTokens: number;
|
|
163
|
-
}): number;
|