@aragon-agent/cli 0.6.47 → 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 +13 -0
- package/README.md +27 -6
- package/dist/agent/coalesce.d.ts +1 -1
- package/dist/agent/controller.d.ts +21 -21
- package/dist/agent/controller.js +13 -13
- 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/{ui → app}/App.d.ts +9 -9
- package/dist/{ui → app}/App.js +79 -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 +29 -29
- 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 +6 -6
- 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 +1 -1
- package/dist/proc/readiness.js +1 -1
- package/dist/proc/supervisor.d.ts +1 -1
- package/dist/proc/supervisor.js +3 -3
- package/dist/proc/wait.d.ts +1 -1
- package/dist/proc/wait.js +1 -1
- 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/clear-archive.d.ts +2 -2
- package/dist/session/persist.d.ts +2 -2
- package/dist/session/persist.js +1 -1
- package/dist/session/startup-session.d.ts +2 -2
- package/dist/session/validate-session.js +3 -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 +2 -2
- package/dist/tools/job-tools.js +4 -4
- 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 -857
- package/dist/agent/reducer.js +0 -1646
- 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 -1383
- 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 -214
- package/dist/proc/limits.js +0 -221
- package/dist/proc/progress.d.ts +0 -47
- package/dist/proc/progress.js +0 -163
- package/dist/proc/types.d.ts +0 -269
- package/dist/proc/types.js +0 -15
- package/dist/proc/wait-view.d.ts +0 -65
- package/dist/proc/wait-view.js +0 -66
- 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 -51
- 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 -130
- 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 -258
- 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 -169
- 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/entries/WaitCard.d.ts +0 -37
- package/dist/ui/entries/WaitCard.js +0 -92
- 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 -84
- package/dist/ui/interaction-copy.js +0 -41
- 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 -140
- package/dist/ui/layout/status-layout.js +0 -262
- 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 -494
- package/dist/ui/layout/wait-bar.d.ts +0 -34
- package/dist/ui/layout/wait-bar.js +0 -48
- 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 -63
- 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 -130
- 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
|
@@ -1,199 +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 { CONTEXT_SAFETY_MARGIN_TOKENS, THINKING_HEADROOM_TOKENS, estimatePromptTokens, } from '@aragon-agent/core';
|
|
11
|
-
/**
|
|
12
|
-
* How much of the window the conversation occupies, from ONE reported usage.
|
|
13
|
-
*
|
|
14
|
-
* THE CACHE TERMS ARE NOT DECORATION. Anthropic's `message_start` reports
|
|
15
|
-
* `input_tokens` EXCLUDING cached tokens and puts them in
|
|
16
|
-
* `cache_read_input_tokens` / `cache_creation_input_tokens`. This CLI never sends
|
|
17
|
-
* `cache_control`, so on a direct connection they are absent and the sum is
|
|
18
|
-
* unchanged - but any gateway or proxy that caches on the user's behalf makes
|
|
19
|
-
* them non-zero, and the status bar's old formula
|
|
20
|
-
* (`usage.inputTokens + usage.outputTokens`) silently UNDER-reports occupancy for
|
|
21
|
-
* exactly those users. That is a live, pre-existing defect in the number this
|
|
22
|
-
* feature triggers on.
|
|
23
|
-
*
|
|
24
|
-
* THIS SUM IS ONLY VALID FOR *ADDITIVE* CACHE FIELDS, AND THAT IS A PROVIDER-SIDE
|
|
25
|
-
* INVARIANT RATHER THAN A PROPERTY OF `TokenUsage` (C-14 / P1-10). It holds today
|
|
26
|
-
* because exactly one adapter writes those fields: `openai.ts` sets
|
|
27
|
-
* `inputTokens = prompt_tokens` and `google.ts` sets it from `promptTokenCount`,
|
|
28
|
-
* and NEITHER ever mentions `cacheReadTokens` / `cacheWriteTokens`. OpenAI's
|
|
29
|
-
* `prompt_tokens` ALREADY INCLUDES cached tokens, so mapping
|
|
30
|
-
* `prompt_tokens_details.cached_tokens` onto the existing field - a change that
|
|
31
|
-
* reads as a pure improvement and would sail through review - turns this into a
|
|
32
|
-
* double-count and fires compaction early on every OpenAI session, with the gauge
|
|
33
|
-
* agreeing with it and nothing reporting a fault. A provider that reports an
|
|
34
|
-
* INCLUSIVE total must add a DIFFERENTLY NAMED field. `compaction-pressure.test.ts`
|
|
35
|
-
* scans the adapters so the trap fails loudly at the moment someone opens it.
|
|
36
|
-
*
|
|
37
|
-
* THE GAUGE AND THE TRIGGER MUST READ THIS SAME FUNCTION (R-11 / AC-3). If they
|
|
38
|
-
* diverge, a user watching 78 % on the status bar sees compaction fire, concludes
|
|
39
|
-
* the feature is broken, and turns it off.
|
|
40
|
-
*/
|
|
41
|
-
export function occupiedTokens(usage) {
|
|
42
|
-
return (usage.inputTokens +
|
|
43
|
-
(usage.cacheReadTokens ?? 0) +
|
|
44
|
-
(usage.cacheWriteTokens ?? 0) +
|
|
45
|
-
usage.outputTokens);
|
|
46
|
-
}
|
|
47
|
-
/**
|
|
48
|
-
* Whether a usage measured ANYTHING on the input side
|
|
49
|
-
* (context-usage-zero-input-tokens B).
|
|
50
|
-
*
|
|
51
|
-
* THE EMPTY MEASUREMENT THIS EXISTS FOR. A turn that billed output tokens
|
|
52
|
-
* while reporting inputTokens 0 AND no cache terms did not measure the
|
|
53
|
-
* request - no real request is free of input. Anthropic-COMPATIBLE relays
|
|
54
|
-
* emit exactly this shape (bigmodel on every turn, Kimi intermittently),
|
|
55
|
-
* and the meter used to arm its measured branch with it: occupancy collapsed
|
|
56
|
-
* to the turn's own outputTokens, the `~` honesty marker vanished with
|
|
57
|
-
* `source: 'usage'`, and the trigger - which reads the same number - never
|
|
58
|
-
* fired. The defense is to not trust such a usage as a measurement.
|
|
59
|
-
*
|
|
60
|
-
* THE CACHE TERMS ARE PART OF THE INPUT SIDE, DELIBERATELY. Anthropic's real
|
|
61
|
-
* `input_tokens` EXCLUDES cached tokens, so a deeply cached turn reports a
|
|
62
|
-
* tiny `input_tokens` next to a huge `cache_read_input_tokens`. That IS a
|
|
63
|
-
* valid measurement (C-14), and judging on `inputTokens === 0` alone would
|
|
64
|
-
* reject it and strand a correct gauge on the estimator.
|
|
65
|
-
*
|
|
66
|
-
* `outputTokens > 0` separates "the stream ran, billed output, and disclosed
|
|
67
|
-
* no input" from a degenerate all-zero usage, which the reviewed predicate
|
|
68
|
-
* deliberately does not speak for.
|
|
69
|
-
*
|
|
70
|
-
* SINGLE AUTHORITY. The meter consumes this, and any future observability
|
|
71
|
-
* hint (fix C) must too: two inline copies of "did the gateway disclose
|
|
72
|
-
* input" would drift apart exactly the way the gauge and the trigger once
|
|
73
|
-
* could (R-11).
|
|
74
|
-
*/
|
|
75
|
-
export function isInputSideUnmeasured(usage) {
|
|
76
|
-
const inputSide = usage.inputTokens + (usage.cacheReadTokens ?? 0) + (usage.cacheWriteTokens ?? 0);
|
|
77
|
-
return inputSide === 0 && usage.outputTokens > 0;
|
|
78
|
-
}
|
|
79
|
-
/**
|
|
80
|
-
* The calibration offset for this turn (D-23 / P1-11).
|
|
81
|
-
*
|
|
82
|
-
* Clamped at 0: a NEGATIVE offset would mean the estimator over-counted, which
|
|
83
|
-
* is possible for a tool-free session on a verbose model, and applying it would
|
|
84
|
-
* make the fallback read LOWER than the raw estimate - moving the one number
|
|
85
|
-
* that is already biased low further in the wrong direction.
|
|
86
|
-
*/
|
|
87
|
-
export function computeEstimateOffset(usage, messages, systemPrompt) {
|
|
88
|
-
const measured = occupiedTokens(usage);
|
|
89
|
-
const estimated = estimatePromptTokens(messages, systemPrompt);
|
|
90
|
-
return Math.max(0, measured - estimated);
|
|
91
|
-
}
|
|
92
|
-
/**
|
|
93
|
-
* Tokens appended to the history since the measurement that produced `lastUsage`
|
|
94
|
-
* (context-auto-compaction-hardening §3.2.2 / W1).
|
|
95
|
-
*
|
|
96
|
-
* `+ 1` SKIPS THE ASSISTANT MESSAGE, and that is not an off-by-one to tidy away:
|
|
97
|
-
* `turn_end` is emitted BEFORE the push (`agent-loop.ts:478` / `:497`, and
|
|
98
|
-
* `Agent.emit` is synchronous), so the message at index `measuredPrefixLength` is
|
|
99
|
-
* the assistant turn whose cost is ALREADY inside `usage.outputTokens`. Counting
|
|
100
|
-
* it again double-charges every turn.
|
|
101
|
-
*
|
|
102
|
-
* NO `estimateOffset` IS APPLIED HERE. That offset is the systematic difference
|
|
103
|
-
* between what `estimatePromptTokens` counts and what the provider bills for a
|
|
104
|
-
* WHOLE REQUEST - chiefly the tool schemas, which are sent once per request and
|
|
105
|
-
* are already inside the measured base. It is a per-request constant, not a
|
|
106
|
-
* per-message rate; adding it to a slice would inflate occupancy by several
|
|
107
|
-
* thousand tokens on every turn and fire compaction early on short
|
|
108
|
-
* conversations.
|
|
109
|
-
*
|
|
110
|
-
* BOUNDS-CHECKED RATHER THAN TRUSTED. If the recorded prefix no longer indexes
|
|
111
|
-
* this array - a `/clear`, a `/resume`, a splice whose invalidation call was
|
|
112
|
-
* missed - the delta is 0 and the function degrades to round 1's number.
|
|
113
|
-
*/
|
|
114
|
-
export function estimateAppendedTokens(messages, measuredPrefixLength) {
|
|
115
|
-
if (measuredPrefixLength === undefined)
|
|
116
|
-
return 0;
|
|
117
|
-
const start = measuredPrefixLength + 1;
|
|
118
|
-
if (start < 0 || start >= messages.length)
|
|
119
|
-
return 0;
|
|
120
|
-
return estimatePromptTokens(messages.slice(start));
|
|
121
|
-
}
|
|
122
|
-
/**
|
|
123
|
-
* THE ONE RULE FOR "PART OF THIS NUMBER IS A GUESS" (§6.3).
|
|
124
|
-
*
|
|
125
|
-
* `Pressure.source` deliberately keeps two members: it answers "where did the
|
|
126
|
-
* BASE come from", and a third member would force every existing consumer of the
|
|
127
|
-
* union to be revisited for a distinction none of them acts on. The `~` question
|
|
128
|
-
* is this function, and it has one test.
|
|
129
|
-
*/
|
|
130
|
-
export function isApproximate(p) {
|
|
131
|
-
return p.source === 'estimate' || p.deltaTokens > 0;
|
|
132
|
-
}
|
|
133
|
-
/**
|
|
134
|
-
* Occupancy right now, measured when there is a measurement and calibrated when
|
|
135
|
-
* there is not.
|
|
136
|
-
*
|
|
137
|
-
* `source` is CARRIED, never re-derived, and it reaches the UI: the status bar
|
|
138
|
-
* already renders a leading `~` when the window is unknown, and this widens that
|
|
139
|
-
* to "the NUMBER is approximate too". Honesty about a guess is cheaper than a
|
|
140
|
-
* support thread about a wrong percentage.
|
|
141
|
-
*/
|
|
142
|
-
export function computePressure(input) {
|
|
143
|
-
const window = input.contextWindow > 0 ? input.contextWindow : 0;
|
|
144
|
-
let occupied;
|
|
145
|
-
let source;
|
|
146
|
-
let deltaTokens = 0;
|
|
147
|
-
if (input.lastUsage) {
|
|
148
|
-
// THE MEASURED FIGURE STAYS AUTHORITATIVE FOR WHAT IT COVERS, and only the
|
|
149
|
-
// messages appended since are estimated (W1 / DH-1). Mixing two units is the
|
|
150
|
-
// trap D-23 warned about; this does not mix them, it adds a second term for
|
|
151
|
-
// a range the first one demonstrably does not describe.
|
|
152
|
-
const base = occupiedTokens(input.lastUsage);
|
|
153
|
-
deltaTokens = estimateAppendedTokens(input.messages, input.measuredPrefixLength);
|
|
154
|
-
occupied = base + deltaTokens;
|
|
155
|
-
source = 'usage';
|
|
156
|
-
}
|
|
157
|
-
else {
|
|
158
|
-
// Before the first turn_end there is no calibration. Keep the estimate
|
|
159
|
-
// explicit: output reservations never authorize automatic compaction.
|
|
160
|
-
const raw = estimatePromptTokens(input.messages, input.systemPrompt);
|
|
161
|
-
occupied = raw + (input.estimateOffset ?? 0);
|
|
162
|
-
source = 'estimate';
|
|
163
|
-
}
|
|
164
|
-
const ratio = window > 0 ? Math.max(0, Math.min(1, occupied / window)) : 0;
|
|
165
|
-
return {
|
|
166
|
-
occupied,
|
|
167
|
-
...(input.windowSource ? { windowSource: input.windowSource } : {}),
|
|
168
|
-
contextWindow: window,
|
|
169
|
-
ratio,
|
|
170
|
-
headroom: Math.max(0, window - occupied),
|
|
171
|
-
source,
|
|
172
|
-
windowKnown: input.windowKnown,
|
|
173
|
-
// PURE PASS-THROUGH. This function's arithmetic is unchanged by
|
|
174
|
-
// context-usage-gauge-accuracy; the flag only travels with the number so
|
|
175
|
-
// `/context` can name the denominator's source (I-6).
|
|
176
|
-
windowOverridden: input.windowOverridden ?? false,
|
|
177
|
-
// CONDITIONAL SPREAD: with no origin there is no KEY, keeping a
|
|
178
|
-
// feature-off Pressure byte-identical to the pre-feature one (I-6).
|
|
179
|
-
...(input.windowOverrideOrigin !== undefined
|
|
180
|
-
? { windowOverrideOrigin: input.windowOverrideOrigin }
|
|
181
|
-
: {}),
|
|
182
|
-
...(input.estimateOffset !== undefined ? { estimateOffset: input.estimateOffset } : {}),
|
|
183
|
-
deltaTokens,
|
|
184
|
-
};
|
|
185
|
-
}
|
|
186
|
-
/** Only actual occupancy authorizes automatic compaction. */
|
|
187
|
-
export function shouldCompactAt(p, threshold) {
|
|
188
|
-
if (!Number.isFinite(p.occupied) || p.occupied < 0)
|
|
189
|
-
return false;
|
|
190
|
-
if (!Number.isFinite(p.contextWindow) || p.contextWindow <= 0)
|
|
191
|
-
return false;
|
|
192
|
-
if (!Number.isFinite(threshold) || threshold < 0.5 || threshold > 0.95)
|
|
193
|
-
return false;
|
|
194
|
-
return p.occupied / p.contextWindow >= threshold;
|
|
195
|
-
}
|
|
196
|
-
/** Capacity helper retained for the standalone tail-budget API, never a trigger. */
|
|
197
|
-
export function requiredHeadroom(req) {
|
|
198
|
-
return req.maxOutputTokens + THINKING_HEADROOM_TOKENS + CONTEXT_SAFETY_MARGIN_TOKENS;
|
|
199
|
-
}
|
|
@@ -1,36 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Human wording for compaction outcomes (context-compaction-never-fires C).
|
|
3
|
-
*
|
|
4
|
-
* ASCII ONLY: `src/compaction/**` is inside the glyph scanner's scope
|
|
5
|
-
* (`glyphs.test.ts::inScope`), so every glyph the card draws comes from
|
|
6
|
-
* `pickGlyphs` and nothing here may carry a non-ASCII byte.
|
|
7
|
-
*
|
|
8
|
-
* WHY THIS MODULE EXISTS AT ALL. The card used to print the raw rejection code
|
|
9
|
-
* (`context not compacted #4: digest_budget_exceeded: $.digest`), which names the
|
|
10
|
-
* internal gate and tells the user nothing they can act on. A decline is a
|
|
11
|
-
* QUESTION ("why, and what do I do now"), so each code gets one phrase and - for
|
|
12
|
-
* the ones a user can act on - one remedy.
|
|
13
|
-
*
|
|
14
|
-
* IT IS ALSO THE SELF-DISABLE NOTICE'S SOURCE. The one line that says
|
|
15
|
-
* auto-compaction has paused reads the same phrase, so the card and the toast
|
|
16
|
-
* cannot describe one failure two ways.
|
|
17
|
-
*/
|
|
18
|
-
import type { CompactionPhase } from './types.js';
|
|
19
|
-
/** One phrase plus, where it helps, the thing the user can do about it. */
|
|
20
|
-
export interface ReasonText {
|
|
21
|
-
/** What happened, in one clause. Never contains the raw code. */
|
|
22
|
-
text: string;
|
|
23
|
-
/** The remedy, or `undefined` when there is nothing to offer. */
|
|
24
|
-
action?: string;
|
|
25
|
-
}
|
|
26
|
-
/**
|
|
27
|
-
* A phrase for a rejection code, falling back to the code itself.
|
|
28
|
-
*
|
|
29
|
-
* THE FALLBACK IS THE RAW CODE, deliberately: a new gate nobody wrote wording for
|
|
30
|
-
* must still say SOMETHING specific on the card, and an invented sentence would
|
|
31
|
-
* be worse than a code the next reviewer can grep.
|
|
32
|
-
*/
|
|
33
|
-
export declare function describeCompactionReason(reason: string): ReasonText;
|
|
34
|
-
/** The card's one-line reason, with the remedy appended when there is one. */
|
|
35
|
-
export declare function compactionReasonLine(reason: string): string;
|
|
36
|
-
export declare function compactionPhaseLabel(phase: CompactionPhase): string;
|
|
@@ -1,78 +0,0 @@
|
|
|
1
|
-
const REASONS = {
|
|
2
|
-
nothing_to_drop: {
|
|
3
|
-
text: 'no safe cut - this run has too few user turns to keep',
|
|
4
|
-
action: 'keep talking, or lower /compact keep',
|
|
5
|
-
},
|
|
6
|
-
digest_budget_exceeded: {
|
|
7
|
-
text: 'the summary input was too large for one call',
|
|
8
|
-
action: 'retry - the middle is elided now',
|
|
9
|
-
},
|
|
10
|
-
summarizer_window_exceeded: {
|
|
11
|
-
text: 'the summary request does not fit the summarizer window',
|
|
12
|
-
action: 'pick a summarizer with a larger window',
|
|
13
|
-
},
|
|
14
|
-
protected_memory_too_large: {
|
|
15
|
-
text: 'the task memory does not fit its protection budget',
|
|
16
|
-
action: 'start a fresh conversation',
|
|
17
|
-
},
|
|
18
|
-
invalid_memory_delta: {
|
|
19
|
-
text: 'the summarizer returned an unusable memory delta',
|
|
20
|
-
action: 'retry',
|
|
21
|
-
},
|
|
22
|
-
empty_memory_delta: {
|
|
23
|
-
text: 'the summarizer returned an empty memory delta',
|
|
24
|
-
action: 'retry',
|
|
25
|
-
},
|
|
26
|
-
no_token_reclaim: {
|
|
27
|
-
text: 'the summary would not have reclaimed any tokens',
|
|
28
|
-
},
|
|
29
|
-
timeout: { text: 'the summarizer timed out', action: 'retry' },
|
|
30
|
-
no_summarizer_model: {
|
|
31
|
-
text: 'no summarizer model resolves',
|
|
32
|
-
action: 'set a model or add a provider key',
|
|
33
|
-
},
|
|
34
|
-
no_api_key: { text: 'the summarizer provider has no API key' },
|
|
35
|
-
already_running: { text: 'another compaction is already running' },
|
|
36
|
-
invalid_prior_memory: {
|
|
37
|
-
text: 'the existing task memory does not match this history',
|
|
38
|
-
action: 'start a fresh conversation',
|
|
39
|
-
},
|
|
40
|
-
invalid_history: { text: 'this history cannot be split safely' },
|
|
41
|
-
protected_multimodal_tail: {
|
|
42
|
-
text: 'an image in the middle of this history would have to be dropped',
|
|
43
|
-
},
|
|
44
|
-
insufficient_reclaim: {
|
|
45
|
-
text: 'the splice freed too little to stay below the threshold',
|
|
46
|
-
},
|
|
47
|
-
disabled: { text: 'auto-compaction is off for this session', action: '/compact on' },
|
|
48
|
-
cancelled: { text: 'cancelled' },
|
|
49
|
-
aborted: { text: 'cancelled' },
|
|
50
|
-
stale_history: { text: 'the history changed while the summary was running' },
|
|
51
|
-
adoption_failed: { text: 'the compacted history could not be adopted' },
|
|
52
|
-
};
|
|
53
|
-
/**
|
|
54
|
-
* A phrase for a rejection code, falling back to the code itself.
|
|
55
|
-
*
|
|
56
|
-
* THE FALLBACK IS THE RAW CODE, deliberately: a new gate nobody wrote wording for
|
|
57
|
-
* must still say SOMETHING specific on the card, and an invented sentence would
|
|
58
|
-
* be worse than a code the next reviewer can grep.
|
|
59
|
-
*/
|
|
60
|
-
export function describeCompactionReason(reason) {
|
|
61
|
-
const code = reason.split(':', 1)[0].trim();
|
|
62
|
-
return REASONS[code] ?? { text: reason };
|
|
63
|
-
}
|
|
64
|
-
/** The card's one-line reason, with the remedy appended when there is one. */
|
|
65
|
-
export function compactionReasonLine(reason) {
|
|
66
|
-
const { text, action } = describeCompactionReason(reason);
|
|
67
|
-
return action ? `${text} (${action})` : text;
|
|
68
|
-
}
|
|
69
|
-
const PHASES = {
|
|
70
|
-
planning: 'planning the cut',
|
|
71
|
-
digesting: 'building the digest',
|
|
72
|
-
summarizing: 'summarizing',
|
|
73
|
-
validating: 'validating the summary',
|
|
74
|
-
applying: 'applying',
|
|
75
|
-
};
|
|
76
|
-
export function compactionPhaseLabel(phase) {
|
|
77
|
-
return PHASES[phase];
|
|
78
|
-
}
|
|
@@ -1,360 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* CLI-local compaction shapes (context-auto-compaction §5.2 / §3.4.2).
|
|
3
|
-
*
|
|
4
|
-
* ASCII ONLY: `src/compaction/**` is inside the glyph scanner's scope.
|
|
5
|
-
*
|
|
6
|
-
* A CLI-LOCAL EVENT STREAM, like `FastEvent` / `TeamEvent` / `TodoEvent`, for
|
|
7
|
-
* the reason each of those records: core's `AgentEvent` union is a public
|
|
8
|
-
* contract and must not learn host shapes.
|
|
9
|
-
*
|
|
10
|
-
* NOTE THE ASYMMETRY WITH CORE. Core emits the two ENGINE events because the
|
|
11
|
-
* engine is what performs the splice and decides `applied`; the CLI emits the
|
|
12
|
-
* richer ones because only the CLI knows the model name, the price and the
|
|
13
|
-
* session totals.
|
|
14
|
-
*
|
|
15
|
-
* THIS STREAM IS THE SOLE SOURCE OF REDUCER ACTIONS (D-20 / P1-6), and
|
|
16
|
-
* `reduceEvent` gains NO cases for `compaction_start` / `compaction_end`. One
|
|
17
|
-
* compaction arriving through two channels is two transcript cards and a doubled
|
|
18
|
-
* `tokensReclaimed`; `reduceEvent`'s `default: return []` is already exactly
|
|
19
|
-
* right for the two core events, which makes "one authority" also the smallest
|
|
20
|
-
* possible change.
|
|
21
|
-
*/
|
|
22
|
-
import type { ModelRef, TokenUsage } from '@aragon-agent/core';
|
|
23
|
-
import type { ContextWindowOrigin } from '../config/schema.js';
|
|
24
|
-
/** Billing belongs to the actual call, including fallback and late responses. */
|
|
25
|
-
export interface CompactionBilling {
|
|
26
|
-
modelRef?: ModelRef;
|
|
27
|
-
costUsd?: number;
|
|
28
|
-
pricingUnknown?: boolean;
|
|
29
|
-
}
|
|
30
|
-
/**
|
|
31
|
-
* `relieved` MEANS THE TAIL WAS CLIPPED AND NOTHING WAS DROPPED (hardening
|
|
32
|
-
* RV-5) — the `plan === null` recovery of §3.3.3.
|
|
33
|
-
*
|
|
34
|
-
* IT EXISTS ONLY HERE. The port still reports `'truncated'` for it (DH-5),
|
|
35
|
-
* because the engine's question is narrower: "was this history reduced without a
|
|
36
|
-
* summary", and the answer is yes.
|
|
37
|
-
*
|
|
38
|
-
* WITHOUT IT THE CARD LIES. `detailLine` renders
|
|
39
|
-
* `summarized ${before - after} messages with ${model}` for `'summarized'`, and
|
|
40
|
-
* relief drops NO messages — so a compaction in which no model was called would
|
|
41
|
-
* render "summarized 0 messages with claude-haiku-4-5", in the rare and alarming
|
|
42
|
-
* case the user most needs to read correctly.
|
|
43
|
-
*
|
|
44
|
-
* ANY NEW `switch` ON THIS UNION MUST PAIR ITS BRANCHES. TypeScript finds the
|
|
45
|
-
* exhaustive switches; it does not find an `else` that meant `'summarized'`.
|
|
46
|
-
*/
|
|
47
|
-
export type CompactionMode = 'summarized' | 'truncated' | 'relieved' | 'none';
|
|
48
|
-
/**
|
|
49
|
-
* `manual` exists ONLY here, never in core.
|
|
50
|
-
*
|
|
51
|
-
* The engine's `CompactionTrigger` is `pressure | overflow`, because those are
|
|
52
|
-
* the two the LOOP can originate. A `/compact` while running is queued and then
|
|
53
|
-
* arrives at the loop as an ordinary `pressure` checkpoint, so the distinction
|
|
54
|
-
* is a host-side fact about WHY the flag was set - which is exactly the kind of
|
|
55
|
-
* thing a CLI-local type is for.
|
|
56
|
-
*/
|
|
57
|
-
export type CompactionUiTrigger = 'pressure' | 'overflow' | 'manual';
|
|
58
|
-
/**
|
|
59
|
-
* Where one attempt currently is, so "compacting context" can also say WHAT it is
|
|
60
|
-
* doing for the forty-five seconds it is on screen.
|
|
61
|
-
*
|
|
62
|
-
* IT EXISTS BECAUSE THE GATES WERE INVISIBLE (context-compaction-never-fires
|
|
63
|
-
* RC-3). Planning and digesting both run BEFORE any model call, and both used to
|
|
64
|
-
* be able to reject while the only surface said `Context 95%` and nothing else.
|
|
65
|
-
* A phase is the CLI's answer to "is this stuck, or merely slow", and it is
|
|
66
|
-
* CLI-LOCAL for the reason the whole stream is: the engine has no phases, only a
|
|
67
|
-
* splice.
|
|
68
|
-
*
|
|
69
|
-
* THERE IS NO `settled` MEMBER, deliberately: the settle is already the
|
|
70
|
-
* `compaction_end` record. A phase restating it would give the card two ways to
|
|
71
|
-
* learn one fact, and the extra phase would race the record whenever the engine's
|
|
72
|
-
* verdict comes back first.
|
|
73
|
-
*/
|
|
74
|
-
export type CompactionPhase = 'planning' | 'digesting' | 'summarizing' | 'validating' | 'applying';
|
|
75
|
-
/** Whether a figure was measured by the provider or estimated by us. */
|
|
76
|
-
export type PressureSource = 'usage' | 'estimate';
|
|
77
|
-
/** The exact occupancy evidence at the compaction checkpoint. */
|
|
78
|
-
export interface CompactionDecision {
|
|
79
|
-
occupied: number;
|
|
80
|
-
contextWindow: number;
|
|
81
|
-
threshold: number;
|
|
82
|
-
source: PressureSource;
|
|
83
|
-
deltaTokens: number;
|
|
84
|
-
}
|
|
85
|
-
export interface Pressure {
|
|
86
|
-
/**
|
|
87
|
-
* `user` means the CLI's model-windows.json supplied the denominator - a
|
|
88
|
-
* hand-typed window for a model no table knows. It outranks `api` and
|
|
89
|
-
* `catalog` in `getModelInfoFor` precisely because the user asserted it.
|
|
90
|
-
*/
|
|
91
|
-
windowSource?: 'api' | 'catalog' | 'fallback' | 'user';
|
|
92
|
-
occupied: number;
|
|
93
|
-
contextWindow: number;
|
|
94
|
-
/** `occupied / contextWindow`, clamped to [0, 1]. */
|
|
95
|
-
ratio: number;
|
|
96
|
-
/** `contextWindow - occupied`, floored at 0. */
|
|
97
|
-
headroom: number;
|
|
98
|
-
source: PressureSource;
|
|
99
|
-
/** False when the window came from `buildRuntimeModel`'s 128k placeholder. */
|
|
100
|
-
windowKnown: boolean;
|
|
101
|
-
/**
|
|
102
|
-
* Whether the denominator came from the user's `contextWindow` override
|
|
103
|
-
* (context-usage-gauge-accuracy I-6).
|
|
104
|
-
*
|
|
105
|
-
* SEPARATE FROM `windowKnown` RATHER THAN FOLDED INTO IT. An override makes
|
|
106
|
-
* the window KNOWN - the user asserted it, so the `~` has no business staying
|
|
107
|
-
* on the percentage - but `/context` still has to be able to say WHO supplied
|
|
108
|
-
* the number. Collapsing the two into one boolean makes "found in the model
|
|
109
|
-
* table" and "typed by hand" indistinguishable in the report, and the second
|
|
110
|
-
* one being wrong is exactly the case that most needs to be visible.
|
|
111
|
-
*/
|
|
112
|
-
windowOverridden: boolean;
|
|
113
|
-
/**
|
|
114
|
-
* WHICH override surface supplied the denominator (profile-context-window
|
|
115
|
-
* §5.2): env / legacy top-level key / the profile bound as Main. Optional
|
|
116
|
-
* and PURE PASS-THROUGH - present only when `windowOverridden` is true, and
|
|
117
|
-
* `undefined` there means "config", the pre-feature answer. The arithmetic
|
|
118
|
-
* never reads it; only `/context`'s window line does.
|
|
119
|
-
*/
|
|
120
|
-
windowOverrideOrigin?: ContextWindowOrigin;
|
|
121
|
-
/**
|
|
122
|
-
* `occupiedTokens(lastUsage) - estimateOf(the history that produced it)`,
|
|
123
|
-
* clamped to `>= 0`, or `undefined` before the first `turn_end`.
|
|
124
|
-
*
|
|
125
|
-
* THE SYSTEMATIC PART OF THE ESTIMATOR'S ERROR (D-23 / P1-11), chiefly the
|
|
126
|
-
* TOOL SCHEMAS. `estimatePromptTokens` counts the system prompt and the message
|
|
127
|
-
* bodies and NOTHING ELSE, while the loop also sends `tools: toolDefs` and the
|
|
128
|
-
* provider's `input_tokens` includes them - several thousand tokens for this
|
|
129
|
-
* CLI's toolset. So the estimate is biased LOW, always, in the one direction
|
|
130
|
-
* that hurts: the resumed 180k-token session is exactly where the estimate is
|
|
131
|
-
* used, and it reads lower than the truth.
|
|
132
|
-
*
|
|
133
|
-
* One shared FUNCTION is not the same as one shared UNIT. Everywhere an
|
|
134
|
-
* estimated figure is compared against a threshold or shown to a user it is
|
|
135
|
-
* `estimate + (estimateOffset ?? 0)`.
|
|
136
|
-
*/
|
|
137
|
-
estimateOffset?: number;
|
|
138
|
-
/**
|
|
139
|
-
* Tokens estimated for messages APPENDED AFTER the measurement in `lastUsage`
|
|
140
|
-
* (hardening §3.2 / W1). `0` on the estimate branch, and `0` whenever the
|
|
141
|
-
* recorded prefix is unusable.
|
|
142
|
-
*
|
|
143
|
-
* ALWAYS PRESENT, never optional, so `isApproximate` is a total function and a
|
|
144
|
-
* consumer cannot forget the `?? 0`. `> 0` is what makes the measured branch
|
|
145
|
-
* approximate: the base is the provider's own number for a request that really
|
|
146
|
-
* happened, and this is a guess about messages no request has yet carried.
|
|
147
|
-
*/
|
|
148
|
-
deltaTokens: number;
|
|
149
|
-
}
|
|
150
|
-
/**
|
|
151
|
-
* The ONE occupancy projection the status bar and `/context` read
|
|
152
|
-
* (context-usage-gauge-accuracy §4.1).
|
|
153
|
-
*
|
|
154
|
-
* DELIBERATELY CARRIES NO TIMESTAMP. Its only consumer is the reducer's identity
|
|
155
|
-
* short-circuit (§5.2), and a field that changes on every tick would make that
|
|
156
|
-
* short-circuit never hold - turning a permanently visible row into a 2.5 Hz
|
|
157
|
-
* re-render source and pushing the render governor up its ladder for nothing.
|
|
158
|
-
*
|
|
159
|
-
* `Pressure` is the compaction subsystem's shape and carries a headroom and a
|
|
160
|
-
* ratio the UI does not want; this is the projection of it that crosses into
|
|
161
|
-
* view state, and `toContextUsage` in `meter.ts` is the ONLY converter.
|
|
162
|
-
*/
|
|
163
|
-
export interface ContextUsageSnapshot {
|
|
164
|
-
windowSource?: Pressure['windowSource'];
|
|
165
|
-
/** Occupied tokens (measured, plus an estimate of anything appended since). */
|
|
166
|
-
occupied: number;
|
|
167
|
-
/** The denominator actually used. */
|
|
168
|
-
window: number;
|
|
169
|
-
/** `occupied / window` as a percentage, clamped to [0, 100] and rounded. */
|
|
170
|
-
pct: number;
|
|
171
|
-
/** Where the BASE came from. */
|
|
172
|
-
source: PressureSource;
|
|
173
|
-
/** How much of `occupied` is an estimate of appended messages; `> 0` means approximate. */
|
|
174
|
-
deltaTokens: number;
|
|
175
|
-
/** Whether the denominator is trustworthy (in the model table, or overridden). */
|
|
176
|
-
windowKnown: boolean;
|
|
177
|
-
/** Whether the denominator came from the user's `contextWindow` (I-6). */
|
|
178
|
-
windowOverridden: boolean;
|
|
179
|
-
/** Which override surface named the denominator; see `Pressure` (pass-through). */
|
|
180
|
-
windowOverrideOrigin?: ContextWindowOrigin;
|
|
181
|
-
}
|
|
182
|
-
/** One compaction, in whatever state it reached. Rendered by `CompactionCard`. */
|
|
183
|
-
export interface CompactionRecord {
|
|
184
|
-
decision?: CompactionDecision;
|
|
185
|
-
memoryVersion?: 2;
|
|
186
|
-
/** 1-based within the session, so the card can name itself. */
|
|
187
|
-
index: number;
|
|
188
|
-
trigger: CompactionUiTrigger;
|
|
189
|
-
mode: CompactionMode;
|
|
190
|
-
applied: boolean;
|
|
191
|
-
reason?: string;
|
|
192
|
-
messagesBefore: number;
|
|
193
|
-
messagesAfter: number;
|
|
194
|
-
tokensBefore: number;
|
|
195
|
-
tokensAfter: number;
|
|
196
|
-
summary?: string;
|
|
197
|
-
model: string;
|
|
198
|
-
durationMs: number;
|
|
199
|
-
/** What the summarization call itself spent. */
|
|
200
|
-
usage?: TokenUsage;
|
|
201
|
-
/** Set when an overflow attempt halved `keepRecentTurns` for itself (D-24). */
|
|
202
|
-
keepRecentTurnsUsed?: number;
|
|
203
|
-
/**
|
|
204
|
-
* Set when `planCompaction` had to relax `keepRecentTurns` to find a cut
|
|
205
|
-
* (context-compaction-never-fires B).
|
|
206
|
-
*
|
|
207
|
-
* DISCLOSED ON THE CARD, never silent: the relaxation trades "the last N turns
|
|
208
|
-
* are verbatim" for "compaction happens at all", and a user who is not told
|
|
209
|
-
* which side they got cannot tell a lossless compaction from a lossy one.
|
|
210
|
-
* `retainedTurns` and `retainedMessages` are what actually survived, so the card
|
|
211
|
-
* can state all three numbers instead of implying one.
|
|
212
|
-
*/
|
|
213
|
-
keepRelaxed?: boolean;
|
|
214
|
-
retainedTurns?: number;
|
|
215
|
-
/**
|
|
216
|
-
* How many MESSAGES the relaxed cut left verbatim.
|
|
217
|
-
*
|
|
218
|
-
* `retainedTurns` COUNTS USER TURNS, and in the sessions this fix exists for - one
|
|
219
|
-
* prompt followed by a hundred tool calls - that number is zero even though forty
|
|
220
|
-
* messages survived word for word. A card reading "kept 0 recent turns" at that
|
|
221
|
-
* moment says the opposite of what happened, so both numbers are recorded.
|
|
222
|
-
*/
|
|
223
|
-
retainedMessages?: number;
|
|
224
|
-
/**
|
|
225
|
-
* Messages left OUT of the digest text and therefore not quotable by the
|
|
226
|
-
* summarizer (context-compaction-never-fires A1).
|
|
227
|
-
*
|
|
228
|
-
* The elision is LOUD in three places: the digest text itself carries an
|
|
229
|
-
* `[elided ...]` marker, this field puts the count on the card, and the elided
|
|
230
|
-
* ids never enter the source map, so a delta citing one is rejected.
|
|
231
|
-
*/
|
|
232
|
-
elidedMessages?: number;
|
|
233
|
-
/**
|
|
234
|
-
* Present ONLY when tail relief fired (hardening §3.3.4 / W2).
|
|
235
|
-
*
|
|
236
|
-
* A bounded, ANNOUNCED data loss inside the turns the run is about to continue
|
|
237
|
-
* from, so it is disclosed on the card, in `/compact status`, on the JSON
|
|
238
|
-
* stream and in the archive — the honesty rule `truncated` already follows.
|
|
239
|
-
*/
|
|
240
|
-
tailRelief?: {
|
|
241
|
-
messages: number;
|
|
242
|
-
charsRemoved: number;
|
|
243
|
-
};
|
|
244
|
-
/**
|
|
245
|
-
* The archive file this compaction was written to, for `/compact show`
|
|
246
|
-
* (hardening §3.5 / W4). Absent when `compaction.archive` is off, and absent
|
|
247
|
-
* when the write failed — a best-effort artefact never claims to exist.
|
|
248
|
-
*/
|
|
249
|
-
archivePath?: string;
|
|
250
|
-
}
|
|
251
|
-
/**
|
|
252
|
-
* WHAT DELIBERATELY DOES NOT LIVE ON `CompactionRecord` (hardening RV-3): the
|
|
253
|
-
* dropped `Message[]`.
|
|
254
|
-
*
|
|
255
|
-
* This record is dispatched into the reducer (`App.tsx`'s `compaction_end` case)
|
|
256
|
-
* and retained in view state for the transcript card's lifetime. Hanging a
|
|
257
|
-
* megabyte-scale array off it would park the compacted history in React state
|
|
258
|
-
* and drag it through every subsequent render — an archive feature that creates
|
|
259
|
-
* the leak it audits. The messages travel on `Compactor.takeLastDropped()`
|
|
260
|
-
* instead, which never enters the event stream.
|
|
261
|
-
*/
|
|
262
|
-
/** Everything `/compact status`, the chip and the settings row read. */
|
|
263
|
-
export interface CompactionSnapshot {
|
|
264
|
-
/** Sum of known per-call costs; never reprice accumulated usage with a new model. */
|
|
265
|
-
costUsd?: number;
|
|
266
|
-
/** Registered AND enabled AND a summarizer model resolves. */
|
|
267
|
-
live: boolean;
|
|
268
|
-
/** The summarizer's model id, or `''`. */
|
|
269
|
-
model: string;
|
|
270
|
-
/**
|
|
271
|
-
* How many compactions ANNOUNCED themselves, i.e. how many cards the user saw.
|
|
272
|
-
*
|
|
273
|
-
* IT COUNTS ATTEMPTS, NOT SPLICES (context-compaction-never-fires C). Before
|
|
274
|
-
* this change only attempts that committed to work announced, so this was
|
|
275
|
-
* "compactions that ran"; now every attempt opens a card - including the ones
|
|
276
|
-
* that decline at the planner or the digest - because a silent decline is
|
|
277
|
-
* indistinguishable from a dead feature, which is the bug this feature shipped
|
|
278
|
-
* with. `applied` below is the other half, and `/compact status` prints both.
|
|
279
|
-
*/
|
|
280
|
-
compactions: number;
|
|
281
|
-
/**
|
|
282
|
-
* How many of those attempts actually replaced the history.
|
|
283
|
-
*
|
|
284
|
-
* OPTIONAL SO EVERY EXISTING CONSTRUCTION SITE STAYS UNTOUCHED. Absent means
|
|
285
|
-
* "not reported", which `/compact status` renders exactly as the pre-change
|
|
286
|
-
* wording did.
|
|
287
|
-
*/
|
|
288
|
-
applied?: number;
|
|
289
|
-
/**
|
|
290
|
-
* How many `pressure` checkpoints declined BEFORE committing to any work
|
|
291
|
-
* (quiet-noop D-9 / P1-2).
|
|
292
|
-
*
|
|
293
|
-
* OPTIONAL SO EVERY EXISTING CONSTRUCTION SITE STAYS UNTOUCHED, and rendered
|
|
294
|
-
* by `/compact status` only when non-zero — a healthy session must not read
|
|
295
|
-
* `(0 checkpoints declined)`. This is the one human surface that still speaks
|
|
296
|
-
* about a decline after the transcript went quiet, which is what keeps
|
|
297
|
-
* `context-auto-compaction` §6.5's "guaranteed reporting surface" promise true.
|
|
298
|
-
*/
|
|
299
|
-
declined?: number;
|
|
300
|
-
/** Sum of `(tokensBefore - tokensAfter)` over applied compactions. */
|
|
301
|
-
tokensReclaimed: number;
|
|
302
|
-
/** What compaction itself has spent this session. */
|
|
303
|
-
usage: TokenUsage;
|
|
304
|
-
/**
|
|
305
|
-
* CARRIED, NEVER RE-DERIVED (the C-11 / RV-4 lesson from `fast-model-tier`).
|
|
306
|
-
* An unknown model priced at `$0.00` would make the feature look free while it
|
|
307
|
-
* spends money - and here the DEFAULT summarizer is the session's own model.
|
|
308
|
-
*/
|
|
309
|
-
pricingUnknown: boolean;
|
|
310
|
-
inFlight: boolean;
|
|
311
|
-
selfDisabled: boolean;
|
|
312
|
-
selfDisabledReason?: string;
|
|
313
|
-
/** How many times this history has been compacted, from the block's `generation`. */
|
|
314
|
-
generation: number;
|
|
315
|
-
pressure: Pressure;
|
|
316
|
-
}
|
|
317
|
-
/**
|
|
318
|
-
* THE COMPACTION EVENT STREAM.
|
|
319
|
-
*
|
|
320
|
-
* EVERY ATTEMPT ANNOUNCES ITSELF (context-compaction-never-fires C, which
|
|
321
|
-
* REVERSES quiet-noop §3.1). A `pressure` compaction used to reach
|
|
322
|
-
* `compaction_start` only after it committed to paid work, so an attempt that
|
|
323
|
-
* declined at the planner (`nothing_to_drop`) or at the digest budget produced
|
|
324
|
-
* no card at all - and a user sitting at 95 % with a dead auto-compaction had no
|
|
325
|
-
* way to learn that the feature was trying and failing 96 times. The card is now
|
|
326
|
-
* opened at the entry of `compact()` and ALWAYS settled, so `#N` counts attempts
|
|
327
|
-
* and the transcript carries one line per attempt, applied or not.
|
|
328
|
-
*
|
|
329
|
-
* WHY THE OLD DESIGN WAS DEFENSIBLE AND IS STILL WRONG. Its stated worry was a
|
|
330
|
-
* red `context not compacted` card every two turns flooding the transcript. The
|
|
331
|
-
* guards bound that to `stuckLimit` declines per run (`limits.ts`), and after
|
|
332
|
-
* them the auto path self-disables and says so once - so the flood never
|
|
333
|
-
* happens, while the silence happened every time.
|
|
334
|
-
*
|
|
335
|
-
* The pair is still BALANCED: every `compaction_start` is followed by exactly
|
|
336
|
-
* one `compaction_end` (a `finally` in the engine guarantees the verdict, and
|
|
337
|
-
* `settlePending` synthesizes a skeleton record when the compactor's own has not
|
|
338
|
-
* arrived). `phase` events land BETWEEN them, in order, and only for the live
|
|
339
|
-
* card.
|
|
340
|
-
*/
|
|
341
|
-
export type CompactionEvent = {
|
|
342
|
-
type: 'compaction_start';
|
|
343
|
-
index: number;
|
|
344
|
-
trigger: CompactionUiTrigger;
|
|
345
|
-
model: string;
|
|
346
|
-
} | {
|
|
347
|
-
type: 'compaction_end';
|
|
348
|
-
record: CompactionRecord;
|
|
349
|
-
} | {
|
|
350
|
-
type: 'phase';
|
|
351
|
-
index: number;
|
|
352
|
-
phase: CompactionPhase;
|
|
353
|
-
} | ({
|
|
354
|
-
type: 'usage';
|
|
355
|
-
usage: TokenUsage;
|
|
356
|
-
} & CompactionBilling) | {
|
|
357
|
-
type: 'snapshot';
|
|
358
|
-
snapshot: CompactionSnapshot;
|
|
359
|
-
};
|
|
360
|
-
export type CompactionEventListener = (event: CompactionEvent) => void;
|