@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
package/dist/ui/paste-frames.js
DELETED
|
@@ -1,117 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Reading paste frames back out of an Ink `input` string
|
|
3
|
-
* (tui-paste-handling section 5.4) -- pure.
|
|
4
|
-
*
|
|
5
|
-
* The stdin filter writes `PASTE_OPEN + payload + PASTE_CLOSE` inline, in stream
|
|
6
|
-
* order (I-5). This module is the only place that takes those markers apart.
|
|
7
|
-
*/
|
|
8
|
-
import { PASTE_CLOSE, PASTE_OPEN } from '../input/limits.js';
|
|
9
|
-
import { sanitisePaste } from '../input/paste-parse.js';
|
|
10
|
-
import { stripControlSequences } from '../input/control-sequences.js';
|
|
11
|
-
/**
|
|
12
|
-
* Remove every C0 byte, DEL and C1 byte from text that arrived OUTSIDE a frame
|
|
13
|
-
* (I-14). NO CR -> LF conversion, and that omission is the point.
|
|
14
|
-
*
|
|
15
|
-
* WHY THIS IS NOT OPTIONAL. Ink drains its whole buffer in one size-less
|
|
16
|
-
* `read()` (`App.js:135`), so the `input` string carrying a frame can also carry
|
|
17
|
-
* the keystroke bytes that arrived beside it -- most often the `\r` of a user who
|
|
18
|
-
* pastes and immediately presses Enter, since Ink's 32 ms render throttle and a
|
|
19
|
-
* large transcript's Yoga pass both outlast the filter's 15 ms burst window.
|
|
20
|
-
* Splicing that run in verbatim puts a raw CR back into the draft and re-opens
|
|
21
|
-
* the corruption this whole feature exists to remove.
|
|
22
|
-
*
|
|
23
|
-
* Note what it does NOT do. It does not turn a coalesced `\r` into a newline and
|
|
24
|
-
* it does not submit: a keystroke that merged with a frame has already lost its
|
|
25
|
-
* identity as a key (`parseKeypress` saw the concatenation, not the key), so the
|
|
26
|
-
* only two honest options are "insert something wrong" and "drop it". Dropping is
|
|
27
|
-
* recoverable and benign -- the user presses Enter again -- while inserting a
|
|
28
|
-
* control byte is not. Printable characters survive untouched.
|
|
29
|
-
*/
|
|
30
|
-
export function sanitiseTyped(text) {
|
|
31
|
-
return text.replace(/[\u0000-\u001F\u007F-\u009F]/g, '');
|
|
32
|
-
}
|
|
33
|
-
/**
|
|
34
|
-
* Split an `input` string into ordered text runs and paste runs.
|
|
35
|
-
*
|
|
36
|
-
* Text runs are returned already through `sanitiseTyped` (I-14); paste runs are
|
|
37
|
-
* returned through `sanitisePaste`, which keeps TAB and `\n` because they are
|
|
38
|
-
* content inside a payload.
|
|
39
|
-
*
|
|
40
|
-
* RE-SANITISING THE PAYLOAD IS DEFENCE IN DEPTH, NOT A SECOND OPINION. The
|
|
41
|
-
* filter already ran `sanitisePaste` and it is idempotent, so the normal path is
|
|
42
|
-
* byte-identical. What it buys is that G2 ("no pasted byte is ever executed as a
|
|
43
|
-
* terminal control") becomes a property of the COMPOSER rather than a property
|
|
44
|
-
* of whoever produced the frame -- which matters for the branch below, where an
|
|
45
|
-
* unmatched `PASTE_OPEN` turns arbitrary trailing bytes into a paste segment.
|
|
46
|
-
*
|
|
47
|
-
* An unmatched `PASTE_OPEN` -- impossible from our own filter, but cheap to
|
|
48
|
-
* survive -- yields its remainder as a paste segment rather than leaking NULs.
|
|
49
|
-
*/
|
|
50
|
-
export function splitPasteFrames(input) {
|
|
51
|
-
const segments = [];
|
|
52
|
-
const pushText = (raw) => {
|
|
53
|
-
const text = sanitiseTyped(raw);
|
|
54
|
-
if (text.length > 0)
|
|
55
|
-
segments.push({ kind: 'text', text });
|
|
56
|
-
};
|
|
57
|
-
const pushPaste = (raw) => {
|
|
58
|
-
const text = sanitisePaste(raw);
|
|
59
|
-
if (text.length > 0)
|
|
60
|
-
segments.push({ kind: 'paste', text });
|
|
61
|
-
};
|
|
62
|
-
let i = 0;
|
|
63
|
-
while (i < input.length) {
|
|
64
|
-
const open = input.indexOf(PASTE_OPEN, i);
|
|
65
|
-
if (open === -1) {
|
|
66
|
-
pushText(input.slice(i));
|
|
67
|
-
break;
|
|
68
|
-
}
|
|
69
|
-
pushText(input.slice(i, open));
|
|
70
|
-
const bodyStart = open + PASTE_OPEN.length;
|
|
71
|
-
const close = input.indexOf(PASTE_CLOSE, bodyStart);
|
|
72
|
-
if (close === -1) {
|
|
73
|
-
pushPaste(input.slice(bodyStart));
|
|
74
|
-
break;
|
|
75
|
-
}
|
|
76
|
-
pushPaste(input.slice(bodyStart, close));
|
|
77
|
-
i = close + PASTE_CLOSE.length;
|
|
78
|
-
}
|
|
79
|
-
return segments;
|
|
80
|
-
}
|
|
81
|
-
/** True when this `input` carries at least one frame -- the branch guard. */
|
|
82
|
-
export function hasPasteFrame(input) {
|
|
83
|
-
return input.includes(PASTE_OPEN);
|
|
84
|
-
}
|
|
85
|
-
/**
|
|
86
|
-
* Turn a possibly-framed `input` into plain text for a consumer that has no
|
|
87
|
-
* paste model of its own: unwrap the frames, keep the payload, drop the markers,
|
|
88
|
-
* and run BOTH halves through `sanitiseTyped`.
|
|
89
|
-
*
|
|
90
|
-
* ANY `useInput` CONSUMER THAT APPENDS `input` TO A STRING MUST CALL THIS (I-12),
|
|
91
|
-
* and the list is pinned by a source scan rather than by review discipline
|
|
92
|
-
* because the failure is invisible: NUL renders as nothing.
|
|
93
|
-
*
|
|
94
|
-
* `useInput` is a BROADCAST -- `use-input.js` re-emits every chunk to every
|
|
95
|
-
* mounted handler -- so `SettingsScreen` and `QuestionOverlay` see the frame the
|
|
96
|
-
* composer was sent. An API key is ~100 characters with no line break, which trips
|
|
97
|
-
* Tier 2's burst rule and gets framed; nothing downstream removes the NULs
|
|
98
|
-
* (`String.prototype.trim()` does not treat U+0000 as whitespace), the field is
|
|
99
|
-
* rendered through `maskDot` so the damage is invisible, and the value is handed
|
|
100
|
-
* to `registerSecret()` and `controller.setApiKey()`. The user is told the
|
|
101
|
-
* settings were saved and every request afterwards fails to authenticate with
|
|
102
|
-
* nothing on screen to explain it.
|
|
103
|
-
*
|
|
104
|
-
* This is strictly better than v0.6.3 for both consumers: a pasted key carrying a
|
|
105
|
-
* stray CR or an ANSI sequence is now cleaned rather than stored raw. The
|
|
106
|
-
* unframed branch strips escape SEQUENCES before the control sweep, because
|
|
107
|
-
* deleting only the introducer left `[0m` in the stored value -- and in a
|
|
108
|
-
* settings field that residue is invisible behind `maskDot` while the value
|
|
109
|
-
* handed to `registerSecret()` is silently wrong.
|
|
110
|
-
*/
|
|
111
|
-
export function stripPasteFrames(input) {
|
|
112
|
-
if (!hasPasteFrame(input))
|
|
113
|
-
return sanitiseTyped(stripControlSequences(input));
|
|
114
|
-
return splitPasteFrames(input)
|
|
115
|
-
.map((segment) => (segment.kind === 'paste' ? sanitiseTyped(segment.text) : segment.text))
|
|
116
|
-
.join('');
|
|
117
|
-
}
|
|
@@ -1,90 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* The paste token vocabulary (tui-paste-handling section 5.3) -- pure. No Ink,
|
|
3
|
-
* no React, no I/O.
|
|
4
|
-
*
|
|
5
|
-
* A large paste is replaced IN THE BUFFER by a display token,
|
|
6
|
-
* `[Pasted text #1 +15 lines]`, and its payload is held beside the buffer in the
|
|
7
|
-
* editor's `pastes` map until the message is sent (D-7). An inline token rather
|
|
8
|
-
* than an out-of-band attachment is what lets the user place a paste relative to
|
|
9
|
-
* their own words -- "explain this: [Pasted text #1 +218 lines] -- why does it
|
|
10
|
-
* retry?" -- which is also the shape the requirement's example asks for.
|
|
11
|
-
*
|
|
12
|
-
* The token is ATOMIC FOR EDITING and NOT for cursor movement (D-8). Delete and
|
|
13
|
-
* kill ranges snap outward to cover a whole token and the caret snaps out before
|
|
14
|
-
* an insert, which removes every realistic way to corrupt one; arrows still step
|
|
15
|
-
* by character, because re-deriving `moveVertical`, `home`/`end` and word jumps
|
|
16
|
-
* around a synthetic unit buys a correctness the user cannot notice.
|
|
17
|
-
*/
|
|
18
|
-
export interface PasteRecord {
|
|
19
|
-
readonly id: number;
|
|
20
|
-
/** The sanitised payload, byte-for-byte what `expandPastes` sends. */
|
|
21
|
-
readonly text: string;
|
|
22
|
-
readonly lines: number;
|
|
23
|
-
readonly chars: number;
|
|
24
|
-
}
|
|
25
|
-
/**
|
|
26
|
-
* A FACTORY, NOT A SHARED CONSTANT (P2-2).
|
|
27
|
-
*
|
|
28
|
-
* A module-level `/g` RegExp carries `lastIndex` between calls, so `re.test(x)`
|
|
29
|
-
* returns false on every second call with the same input -- a bug that presents
|
|
30
|
-
* as "token detection works, then randomly does not". Callers must use
|
|
31
|
-
* `matchAll` or `replace` (both safe) on a FRESH instance; nothing in this module
|
|
32
|
-
* may call `.test()` or `.exec()` on a `/g` regex it did not just create.
|
|
33
|
-
*
|
|
34
|
-
* Strict, anchored to its own literal shape, ASCII-only. Group 1 is the id.
|
|
35
|
-
*/
|
|
36
|
-
export declare function pasteTokenRe(): RegExp;
|
|
37
|
-
export declare function allocatePasteId(): number;
|
|
38
|
-
/** Test-only reset. Never called from application code. */
|
|
39
|
-
export declare function resetPasteIdsForTest(): void;
|
|
40
|
-
export declare function makePasteRecord(id: number, text: string): PasteRecord;
|
|
41
|
-
/**
|
|
42
|
-
* `[Pasted text #3 +218 lines]`, or `[Pasted text #4 +1204 chars]` for a paste
|
|
43
|
-
* that is one very long line.
|
|
44
|
-
*
|
|
45
|
-
* "+1 lines" is not a sentence, and for a one-liner the number the user cares
|
|
46
|
-
* about is its length rather than its line count.
|
|
47
|
-
*/
|
|
48
|
-
export declare function formatPasteToken(record: PasteRecord): string;
|
|
49
|
-
/** Above EITHER inline bound the paste is collapsed into a token (G3 / G4). */
|
|
50
|
-
export declare function shouldCollapse(text: string): boolean;
|
|
51
|
-
interface TokenSpan {
|
|
52
|
-
readonly start: number;
|
|
53
|
-
readonly end: number;
|
|
54
|
-
readonly id: number;
|
|
55
|
-
}
|
|
56
|
-
/** Every token in the buffer, in order. */
|
|
57
|
-
export declare function tokenSpans(buffer: string): TokenSpan[];
|
|
58
|
-
/** The token containing or touching `index`, or `null`. */
|
|
59
|
-
export declare function tokenAt(buffer: string, index: number): TokenSpan | null;
|
|
60
|
-
/**
|
|
61
|
-
* Move a caret that landed STRICTLY INSIDE a token to its nearer edge (D-8).
|
|
62
|
-
*
|
|
63
|
-
* An index at either edge, or outside every token, is returned unchanged -- so
|
|
64
|
-
* this is a no-op on a buffer with no tokens, which is every buffer today.
|
|
65
|
-
*/
|
|
66
|
-
export declare function snapOutOfToken(buffer: string, cursor: number): number;
|
|
67
|
-
/**
|
|
68
|
-
* Grow `[from, to)` so it covers every token it partially overlaps (G5).
|
|
69
|
-
*
|
|
70
|
-
* This is what makes `Backspace` immediately after `...lines]` remove the whole
|
|
71
|
-
* token in ONE keystroke, and what stops `Ctrl+W` / `Ctrl+U` / `Ctrl+K` leaving
|
|
72
|
-
* half a token -- and therefore an unparseable label -- behind.
|
|
73
|
-
*/
|
|
74
|
-
export declare function expandRangeOverTokens(buffer: string, from: number, to: number): {
|
|
75
|
-
from: number;
|
|
76
|
-
to: number;
|
|
77
|
-
};
|
|
78
|
-
/**
|
|
79
|
-
* Replace every token whose id is present in `pastes`; leave the rest verbatim.
|
|
80
|
-
*
|
|
81
|
-
* A user who literally TYPES `[Pasted text #3 +9 lines]` while paste #3 exists in
|
|
82
|
-
* the same draft will have it expanded. That is bounded (ids are per process, the
|
|
83
|
-
* map is per draft) and harmless (they get text that is already in their own
|
|
84
|
-
* draft), and the alternative -- an unguessable nonce in the label -- would trade
|
|
85
|
-
* a case nobody hits for a label nobody can read.
|
|
86
|
-
*/
|
|
87
|
-
export declare function expandPastes(buffer: string, pastes: ReadonlyMap<number, PasteRecord>): string;
|
|
88
|
-
/** Ids still referenced by the buffer -- the input to I-7's prune. */
|
|
89
|
-
export declare function referencedIds(buffer: string): Set<number>;
|
|
90
|
-
export {};
|
package/dist/ui/paste-tokens.js
DELETED
|
@@ -1,147 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* The paste token vocabulary (tui-paste-handling section 5.3) -- pure. No Ink,
|
|
3
|
-
* no React, no I/O.
|
|
4
|
-
*
|
|
5
|
-
* A large paste is replaced IN THE BUFFER by a display token,
|
|
6
|
-
* `[Pasted text #1 +15 lines]`, and its payload is held beside the buffer in the
|
|
7
|
-
* editor's `pastes` map until the message is sent (D-7). An inline token rather
|
|
8
|
-
* than an out-of-band attachment is what lets the user place a paste relative to
|
|
9
|
-
* their own words -- "explain this: [Pasted text #1 +218 lines] -- why does it
|
|
10
|
-
* retry?" -- which is also the shape the requirement's example asks for.
|
|
11
|
-
*
|
|
12
|
-
* The token is ATOMIC FOR EDITING and NOT for cursor movement (D-8). Delete and
|
|
13
|
-
* kill ranges snap outward to cover a whole token and the caret snaps out before
|
|
14
|
-
* an insert, which removes every realistic way to corrupt one; arrows still step
|
|
15
|
-
* by character, because re-deriving `moveVertical`, `home`/`end` and word jumps
|
|
16
|
-
* around a synthetic unit buys a correctness the user cannot notice.
|
|
17
|
-
*/
|
|
18
|
-
import { PASTE_INLINE_MAX_CHARS, PASTE_INLINE_MAX_LINES } from './composer-limits.js';
|
|
19
|
-
/**
|
|
20
|
-
* A FACTORY, NOT A SHARED CONSTANT (P2-2).
|
|
21
|
-
*
|
|
22
|
-
* A module-level `/g` RegExp carries `lastIndex` between calls, so `re.test(x)`
|
|
23
|
-
* returns false on every second call with the same input -- a bug that presents
|
|
24
|
-
* as "token detection works, then randomly does not". Callers must use
|
|
25
|
-
* `matchAll` or `replace` (both safe) on a FRESH instance; nothing in this module
|
|
26
|
-
* may call `.test()` or `.exec()` on a `/g` regex it did not just create.
|
|
27
|
-
*
|
|
28
|
-
* Strict, anchored to its own literal shape, ASCII-only. Group 1 is the id.
|
|
29
|
-
*/
|
|
30
|
-
export function pasteTokenRe() {
|
|
31
|
-
return /\[Pasted text #(\d+) \+\d+ (?:lines|chars)\]/g;
|
|
32
|
-
}
|
|
33
|
-
/**
|
|
34
|
-
* The process-monotonic id counter (D-14).
|
|
35
|
-
*
|
|
36
|
-
* CALLED FROM THE COMPONENT, NEVER FROM THE REDUCER (P1-5). React is explicitly
|
|
37
|
-
* allowed to run a reducer more than once for one action -- eager evaluation in
|
|
38
|
-
* `dispatchSetState`, base-queue replay after a bailout, StrictMode double
|
|
39
|
-
* invocation -- and a counter mutated inside one would skip ids and produce two
|
|
40
|
-
* states that differ in the token TEXT, not merely in identity. Allocating in the
|
|
41
|
-
* handler also makes the rendered token deterministic for a unit test.
|
|
42
|
-
*
|
|
43
|
-
* Monotonic for the PROCESS rather than per draft, so two drafts never show `#1`
|
|
44
|
-
* for different content in one session.
|
|
45
|
-
*/
|
|
46
|
-
let nextPasteId = 1;
|
|
47
|
-
export function allocatePasteId() {
|
|
48
|
-
const id = nextPasteId;
|
|
49
|
-
nextPasteId += 1;
|
|
50
|
-
return id;
|
|
51
|
-
}
|
|
52
|
-
/** Test-only reset. Never called from application code. */
|
|
53
|
-
export function resetPasteIdsForTest() {
|
|
54
|
-
nextPasteId = 1;
|
|
55
|
-
}
|
|
56
|
-
export function makePasteRecord(id, text) {
|
|
57
|
-
return { id, text, lines: text.split('\n').length, chars: [...text].length };
|
|
58
|
-
}
|
|
59
|
-
/**
|
|
60
|
-
* `[Pasted text #3 +218 lines]`, or `[Pasted text #4 +1204 chars]` for a paste
|
|
61
|
-
* that is one very long line.
|
|
62
|
-
*
|
|
63
|
-
* "+1 lines" is not a sentence, and for a one-liner the number the user cares
|
|
64
|
-
* about is its length rather than its line count.
|
|
65
|
-
*/
|
|
66
|
-
export function formatPasteToken(record) {
|
|
67
|
-
return record.lines > 1
|
|
68
|
-
? `[Pasted text #${record.id} +${record.lines} lines]`
|
|
69
|
-
: `[Pasted text #${record.id} +${record.chars} chars]`;
|
|
70
|
-
}
|
|
71
|
-
/** Above EITHER inline bound the paste is collapsed into a token (G3 / G4). */
|
|
72
|
-
export function shouldCollapse(text) {
|
|
73
|
-
return text.split('\n').length > PASTE_INLINE_MAX_LINES || [...text].length > PASTE_INLINE_MAX_CHARS;
|
|
74
|
-
}
|
|
75
|
-
/** Every token in the buffer, in order. */
|
|
76
|
-
export function tokenSpans(buffer) {
|
|
77
|
-
const spans = [];
|
|
78
|
-
for (const m of buffer.matchAll(pasteTokenRe())) {
|
|
79
|
-
const start = m.index ?? 0;
|
|
80
|
-
spans.push({ start, end: start + m[0].length, id: Number(m[1]) });
|
|
81
|
-
}
|
|
82
|
-
return spans;
|
|
83
|
-
}
|
|
84
|
-
/** The token containing or touching `index`, or `null`. */
|
|
85
|
-
export function tokenAt(buffer, index) {
|
|
86
|
-
for (const span of tokenSpans(buffer)) {
|
|
87
|
-
if (index >= span.start && index <= span.end)
|
|
88
|
-
return span;
|
|
89
|
-
}
|
|
90
|
-
return null;
|
|
91
|
-
}
|
|
92
|
-
/**
|
|
93
|
-
* Move a caret that landed STRICTLY INSIDE a token to its nearer edge (D-8).
|
|
94
|
-
*
|
|
95
|
-
* An index at either edge, or outside every token, is returned unchanged -- so
|
|
96
|
-
* this is a no-op on a buffer with no tokens, which is every buffer today.
|
|
97
|
-
*/
|
|
98
|
-
export function snapOutOfToken(buffer, cursor) {
|
|
99
|
-
for (const span of tokenSpans(buffer)) {
|
|
100
|
-
if (cursor <= span.start || cursor >= span.end)
|
|
101
|
-
continue;
|
|
102
|
-
return cursor - span.start <= span.end - cursor ? span.start : span.end;
|
|
103
|
-
}
|
|
104
|
-
return cursor;
|
|
105
|
-
}
|
|
106
|
-
/**
|
|
107
|
-
* Grow `[from, to)` so it covers every token it partially overlaps (G5).
|
|
108
|
-
*
|
|
109
|
-
* This is what makes `Backspace` immediately after `...lines]` remove the whole
|
|
110
|
-
* token in ONE keystroke, and what stops `Ctrl+W` / `Ctrl+U` / `Ctrl+K` leaving
|
|
111
|
-
* half a token -- and therefore an unparseable label -- behind.
|
|
112
|
-
*/
|
|
113
|
-
export function expandRangeOverTokens(buffer, from, to) {
|
|
114
|
-
let lo = Math.min(from, to);
|
|
115
|
-
let hi = Math.max(from, to);
|
|
116
|
-
for (const span of tokenSpans(buffer)) {
|
|
117
|
-
if (span.start < hi && lo < span.end) {
|
|
118
|
-
lo = Math.min(lo, span.start);
|
|
119
|
-
hi = Math.max(hi, span.end);
|
|
120
|
-
}
|
|
121
|
-
}
|
|
122
|
-
return { from: lo, to: hi };
|
|
123
|
-
}
|
|
124
|
-
/**
|
|
125
|
-
* Replace every token whose id is present in `pastes`; leave the rest verbatim.
|
|
126
|
-
*
|
|
127
|
-
* A user who literally TYPES `[Pasted text #3 +9 lines]` while paste #3 exists in
|
|
128
|
-
* the same draft will have it expanded. That is bounded (ids are per process, the
|
|
129
|
-
* map is per draft) and harmless (they get text that is already in their own
|
|
130
|
-
* draft), and the alternative -- an unguessable nonce in the label -- would trade
|
|
131
|
-
* a case nobody hits for a label nobody can read.
|
|
132
|
-
*/
|
|
133
|
-
export function expandPastes(buffer, pastes) {
|
|
134
|
-
if (pastes.size === 0)
|
|
135
|
-
return buffer;
|
|
136
|
-
return buffer.replace(pasteTokenRe(), (match, idText) => {
|
|
137
|
-
const record = pastes.get(Number(idText));
|
|
138
|
-
return record ? record.text : match;
|
|
139
|
-
});
|
|
140
|
-
}
|
|
141
|
-
/** Ids still referenced by the buffer -- the input to I-7's prune. */
|
|
142
|
-
export function referencedIds(buffer) {
|
|
143
|
-
const ids = new Set();
|
|
144
|
-
for (const m of buffer.matchAll(pasteTokenRe()))
|
|
145
|
-
ids.add(Number(m[1]));
|
|
146
|
-
return ids;
|
|
147
|
-
}
|
|
@@ -1,81 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Render caches (tui-render-performance L2 / R2 + R3).
|
|
3
|
-
*
|
|
4
|
-
* Ink has no output caching: every frame re-walks the whole mounted tree,
|
|
5
|
-
* re-measures every text node and re-serialises the frame. The two most
|
|
6
|
-
* expensive PURE computations in that walk were being redone from scratch on
|
|
7
|
-
* every one of them:
|
|
8
|
-
*
|
|
9
|
-
* - `cli-highlight`'s `highlight()` ran INSIDE `CodeBlock`'s render body, so a
|
|
10
|
-
* 200-line fenced block was a complete highlight.js tokenise, 30 times a
|
|
11
|
-
* second, for as long as it stayed mounted;
|
|
12
|
-
* - `Markdown` re-split and re-regexed the whole answer into one React element
|
|
13
|
-
* per line on every render.
|
|
14
|
-
*
|
|
15
|
-
* Cached text depends on its input and, for highlighting, the color level. Theme and
|
|
16
|
-
* glyphs are applied at render time and are never cached, because a themed
|
|
17
|
-
* React element in a cache makes `/theme` a no-op until the entry evicts (K-5) —
|
|
18
|
-
* exactly the class of silent bug this package writes comments to avoid.
|
|
19
|
-
*
|
|
20
|
-
* Caches are MODULE-LEVEL on purpose: settled transcript text is identical
|
|
21
|
-
* across component instances and across mount/unmount cycles, so per-instance
|
|
22
|
-
* caches would miss precisely when a scroll brings an old entry back.
|
|
23
|
-
*/
|
|
24
|
-
import { type MdBlock } from './markdown-blocks.js';
|
|
25
|
-
import { type Glyphs } from './glyphs.js';
|
|
26
|
-
import type { TermCapabilities } from './capabilities.js';
|
|
27
|
-
export declare const RENDER_CACHE_LIMITS: {
|
|
28
|
-
readonly highlightEntries: 128;
|
|
29
|
-
readonly highlightBytes: number;
|
|
30
|
-
/**
|
|
31
|
-
* Above this, skip highlighting entirely.
|
|
32
|
-
*
|
|
33
|
-
* highlight.js is superlinear in the length of a single block, and a
|
|
34
|
-
* multi-megabyte "code block" is almost always a pasted log rather than
|
|
35
|
-
* source. Rendering it plain costs the user nothing they would have been able
|
|
36
|
-
* to read; tokenising it costs the whole frame budget.
|
|
37
|
-
*/
|
|
38
|
-
readonly highlightMaxChars: 20000;
|
|
39
|
-
readonly markdownEntries: 256;
|
|
40
|
-
readonly markdownBytes: number;
|
|
41
|
-
readonly linesEntries: 512;
|
|
42
|
-
};
|
|
43
|
-
export interface RenderCacheStats {
|
|
44
|
-
markdownEntries: number;
|
|
45
|
-
markdownBytes: number;
|
|
46
|
-
highlightEntries: number;
|
|
47
|
-
highlightBytes: number;
|
|
48
|
-
lineEntries: number;
|
|
49
|
-
hits: number;
|
|
50
|
-
misses: number;
|
|
51
|
-
}
|
|
52
|
-
/**
|
|
53
|
-
* Syntax-highlight `code`, memoised on `(colorLevel, lang, code)`.
|
|
54
|
-
*
|
|
55
|
-
* `cli-highlight` emits chalk-level ANSI that does not depend on `theme.*`, so
|
|
56
|
-
* unlike a rendered element this string IS safe to cache across a `/theme`
|
|
57
|
-
* switch — the same property it has had since before this cache existed.
|
|
58
|
-
*/
|
|
59
|
-
export declare function highlightCached(code: string, lang: string): string;
|
|
60
|
-
/** Parse a markdown document into blocks, memoised on the whole text. */
|
|
61
|
-
export declare function parseMarkdownCached(text: string): MdBlock[];
|
|
62
|
-
/**
|
|
63
|
-
* `text.split('\n')`, memoised.
|
|
64
|
-
*
|
|
65
|
-
* READ-ONLY BY CONTRACT. The returned array is shared with every other holder of
|
|
66
|
-
* the same string, so a caller that sorts or splices it in place corrupts an
|
|
67
|
-
* unrelated card. The `readonly string[]` return type is the enforcement.
|
|
68
|
-
*/
|
|
69
|
-
export declare function splitLinesCached(text: string): readonly string[];
|
|
70
|
-
/**
|
|
71
|
-
* The glyph set for a terminal.
|
|
72
|
-
*
|
|
73
|
-
* `pickGlyphs` already returns one of two module constants, so this adds no
|
|
74
|
-
* caching of its own — it exists so that every render-layer memoisation the
|
|
75
|
-
* transcript depends on is reachable from one module, and so the components can
|
|
76
|
-
* stop calling `pickGlyphs` once per entry per frame through six import paths.
|
|
77
|
-
*/
|
|
78
|
-
export declare function glyphsFor(caps: TermCapabilities): Glyphs;
|
|
79
|
-
/** Drop everything. `/perf reset`, and the test suite between cases. */
|
|
80
|
-
export declare function clearRenderCaches(): void;
|
|
81
|
-
export declare function renderCacheStats(): RenderCacheStats;
|
package/dist/ui/render-cache.js
DELETED
|
@@ -1,196 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Render caches (tui-render-performance L2 / R2 + R3).
|
|
3
|
-
*
|
|
4
|
-
* Ink has no output caching: every frame re-walks the whole mounted tree,
|
|
5
|
-
* re-measures every text node and re-serialises the frame. The two most
|
|
6
|
-
* expensive PURE computations in that walk were being redone from scratch on
|
|
7
|
-
* every one of them:
|
|
8
|
-
*
|
|
9
|
-
* - `cli-highlight`'s `highlight()` ran INSIDE `CodeBlock`'s render body, so a
|
|
10
|
-
* 200-line fenced block was a complete highlight.js tokenise, 30 times a
|
|
11
|
-
* second, for as long as it stayed mounted;
|
|
12
|
-
* - `Markdown` re-split and re-regexed the whole answer into one React element
|
|
13
|
-
* per line on every render.
|
|
14
|
-
*
|
|
15
|
-
* Cached text depends on its input and, for highlighting, the color level. Theme and
|
|
16
|
-
* glyphs are applied at render time and are never cached, because a themed
|
|
17
|
-
* React element in a cache makes `/theme` a no-op until the entry evicts (K-5) —
|
|
18
|
-
* exactly the class of silent bug this package writes comments to avoid.
|
|
19
|
-
*
|
|
20
|
-
* Caches are MODULE-LEVEL on purpose: settled transcript text is identical
|
|
21
|
-
* across component instances and across mount/unmount cycles, so per-instance
|
|
22
|
-
* caches would miss precisely when a scroll brings an old entry back.
|
|
23
|
-
*/
|
|
24
|
-
import { highlight } from 'cli-highlight';
|
|
25
|
-
import { syntaxColorLevel } from './color-runtime.js';
|
|
26
|
-
import { parseMarkdownBlocks } from './markdown-blocks.js';
|
|
27
|
-
import { pickGlyphs } from './glyphs.js';
|
|
28
|
-
export const RENDER_CACHE_LIMITS = {
|
|
29
|
-
highlightEntries: 128,
|
|
30
|
-
highlightBytes: 2 * 1024 * 1024,
|
|
31
|
-
/**
|
|
32
|
-
* Above this, skip highlighting entirely.
|
|
33
|
-
*
|
|
34
|
-
* highlight.js is superlinear in the length of a single block, and a
|
|
35
|
-
* multi-megabyte "code block" is almost always a pasted log rather than
|
|
36
|
-
* source. Rendering it plain costs the user nothing they would have been able
|
|
37
|
-
* to read; tokenising it costs the whole frame budget.
|
|
38
|
-
*/
|
|
39
|
-
highlightMaxChars: 20_000,
|
|
40
|
-
markdownEntries: 256,
|
|
41
|
-
markdownBytes: 4 * 1024 * 1024,
|
|
42
|
-
linesEntries: 512,
|
|
43
|
-
};
|
|
44
|
-
/**
|
|
45
|
-
* Insertion-ordered LRU with both an entry-count and an approximate byte budget.
|
|
46
|
-
*
|
|
47
|
-
* TWO BUDGETS, NOT ONE. An entry count alone is unbounded in memory (one 5 MB
|
|
48
|
-
* answer), and a byte budget alone is unbounded in Map overhead (a hundred
|
|
49
|
-
* thousand one-character keys). Every cache here can be fed by the model, so
|
|
50
|
-
* both directions have to be closed.
|
|
51
|
-
*/
|
|
52
|
-
class LruCache {
|
|
53
|
-
maxEntries;
|
|
54
|
-
maxBytes;
|
|
55
|
-
map = new Map();
|
|
56
|
-
total = 0;
|
|
57
|
-
hits = 0;
|
|
58
|
-
misses = 0;
|
|
59
|
-
constructor(maxEntries, maxBytes) {
|
|
60
|
-
this.maxEntries = maxEntries;
|
|
61
|
-
this.maxBytes = maxBytes;
|
|
62
|
-
}
|
|
63
|
-
get(key) {
|
|
64
|
-
const hit = this.map.get(key);
|
|
65
|
-
if (hit === undefined) {
|
|
66
|
-
this.misses += 1;
|
|
67
|
-
return undefined;
|
|
68
|
-
}
|
|
69
|
-
// Re-insert to move the key to the young end of the insertion order.
|
|
70
|
-
this.map.delete(key);
|
|
71
|
-
this.map.set(key, hit);
|
|
72
|
-
this.hits += 1;
|
|
73
|
-
return hit.value;
|
|
74
|
-
}
|
|
75
|
-
set(key, value, bytes) {
|
|
76
|
-
const existing = this.map.get(key);
|
|
77
|
-
if (existing)
|
|
78
|
-
this.total -= existing.bytes;
|
|
79
|
-
this.map.delete(key);
|
|
80
|
-
this.map.set(key, { value, bytes });
|
|
81
|
-
this.total += bytes;
|
|
82
|
-
while (this.map.size > this.maxEntries || this.total > this.maxBytes) {
|
|
83
|
-
const oldest = this.map.keys().next();
|
|
84
|
-
if (oldest.done)
|
|
85
|
-
break;
|
|
86
|
-
const entry = this.map.get(oldest.value);
|
|
87
|
-
if (entry)
|
|
88
|
-
this.total -= entry.bytes;
|
|
89
|
-
this.map.delete(oldest.value);
|
|
90
|
-
}
|
|
91
|
-
return value;
|
|
92
|
-
}
|
|
93
|
-
clear() {
|
|
94
|
-
this.map.clear();
|
|
95
|
-
this.total = 0;
|
|
96
|
-
this.hits = 0;
|
|
97
|
-
this.misses = 0;
|
|
98
|
-
}
|
|
99
|
-
get size() {
|
|
100
|
-
return this.map.size;
|
|
101
|
-
}
|
|
102
|
-
get bytes() {
|
|
103
|
-
return this.total;
|
|
104
|
-
}
|
|
105
|
-
}
|
|
106
|
-
const highlightCache = new LruCache(RENDER_CACHE_LIMITS.highlightEntries, RENDER_CACHE_LIMITS.highlightBytes);
|
|
107
|
-
const markdownCache = new LruCache(RENDER_CACHE_LIMITS.markdownEntries, RENDER_CACHE_LIMITS.markdownBytes);
|
|
108
|
-
/**
|
|
109
|
-
* `text.split('\n')` results.
|
|
110
|
-
*
|
|
111
|
-
* Bounded by ENTRY COUNT ONLY, and the byte budget is set to the markdown one
|
|
112
|
-
* because the arrays are views over strings the transcript already holds — they
|
|
113
|
-
* add pointer overhead, not a second copy of the text.
|
|
114
|
-
*/
|
|
115
|
-
const lineCache = new LruCache(RENDER_CACHE_LIMITS.linesEntries, RENDER_CACHE_LIMITS.markdownBytes);
|
|
116
|
-
/**
|
|
117
|
-
* Syntax-highlight `code`, memoised on `(colorLevel, lang, code)`.
|
|
118
|
-
*
|
|
119
|
-
* `cli-highlight` emits chalk-level ANSI that does not depend on `theme.*`, so
|
|
120
|
-
* unlike a rendered element this string IS safe to cache across a `/theme`
|
|
121
|
-
* switch — the same property it has had since before this cache existed.
|
|
122
|
-
*/
|
|
123
|
-
export function highlightCached(code, lang) {
|
|
124
|
-
if (code.length === 0)
|
|
125
|
-
return code;
|
|
126
|
-
if (code.length > RENDER_CACHE_LIMITS.highlightMaxChars)
|
|
127
|
-
return code;
|
|
128
|
-
// The delimiter is written as an ESCAPE and never as a literal control
|
|
129
|
-
// character: a raw NUL byte makes the whole file "binary" to grep and
|
|
130
|
-
// ripgrep, which silently hides every definition in it from the tool this
|
|
131
|
-
// codebase navigates itself with. NUL rather than a space because a space
|
|
132
|
-
// still lets ("a b", "ts") and ("b", "ts a") collide on one key.
|
|
133
|
-
const key = `${syntaxColorLevel()}\u0000${lang}\u0000${code}`;
|
|
134
|
-
const hit = highlightCache.get(key);
|
|
135
|
-
if (hit !== undefined)
|
|
136
|
-
return hit;
|
|
137
|
-
let rendered = code;
|
|
138
|
-
try {
|
|
139
|
-
rendered = highlight(code, { language: lang || undefined, ignoreIllegals: true });
|
|
140
|
-
}
|
|
141
|
-
catch {
|
|
142
|
-
rendered = code;
|
|
143
|
-
}
|
|
144
|
-
return highlightCache.set(key, rendered, key.length + rendered.length);
|
|
145
|
-
}
|
|
146
|
-
/** Parse a markdown document into blocks, memoised on the whole text. */
|
|
147
|
-
export function parseMarkdownCached(text) {
|
|
148
|
-
const hit = markdownCache.get(text);
|
|
149
|
-
if (hit !== undefined)
|
|
150
|
-
return hit;
|
|
151
|
-
return markdownCache.set(text, parseMarkdownBlocks(text), text.length * 2);
|
|
152
|
-
}
|
|
153
|
-
/**
|
|
154
|
-
* `text.split('\n')`, memoised.
|
|
155
|
-
*
|
|
156
|
-
* READ-ONLY BY CONTRACT. The returned array is shared with every other holder of
|
|
157
|
-
* the same string, so a caller that sorts or splices it in place corrupts an
|
|
158
|
-
* unrelated card. The `readonly string[]` return type is the enforcement.
|
|
159
|
-
*/
|
|
160
|
-
export function splitLinesCached(text) {
|
|
161
|
-
if (text.length === 0)
|
|
162
|
-
return EMPTY_LINES;
|
|
163
|
-
const hit = lineCache.get(text);
|
|
164
|
-
if (hit !== undefined)
|
|
165
|
-
return hit;
|
|
166
|
-
return lineCache.set(text, text.split('\n'), text.length);
|
|
167
|
-
}
|
|
168
|
-
const EMPTY_LINES = [];
|
|
169
|
-
/**
|
|
170
|
-
* The glyph set for a terminal.
|
|
171
|
-
*
|
|
172
|
-
* `pickGlyphs` already returns one of two module constants, so this adds no
|
|
173
|
-
* caching of its own — it exists so that every render-layer memoisation the
|
|
174
|
-
* transcript depends on is reachable from one module, and so the components can
|
|
175
|
-
* stop calling `pickGlyphs` once per entry per frame through six import paths.
|
|
176
|
-
*/
|
|
177
|
-
export function glyphsFor(caps) {
|
|
178
|
-
return pickGlyphs(caps);
|
|
179
|
-
}
|
|
180
|
-
/** Drop everything. `/perf reset`, and the test suite between cases. */
|
|
181
|
-
export function clearRenderCaches() {
|
|
182
|
-
highlightCache.clear();
|
|
183
|
-
markdownCache.clear();
|
|
184
|
-
lineCache.clear();
|
|
185
|
-
}
|
|
186
|
-
export function renderCacheStats() {
|
|
187
|
-
return {
|
|
188
|
-
markdownEntries: markdownCache.size,
|
|
189
|
-
markdownBytes: markdownCache.bytes,
|
|
190
|
-
highlightEntries: highlightCache.size,
|
|
191
|
-
highlightBytes: highlightCache.bytes,
|
|
192
|
-
lineEntries: lineCache.size,
|
|
193
|
-
hits: markdownCache.hits + highlightCache.hits + lineCache.hits,
|
|
194
|
-
misses: markdownCache.misses + highlightCache.misses + lineCache.misses,
|
|
195
|
-
};
|
|
196
|
-
}
|
|
@@ -1,54 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Adaptive render governor (tui-render-performance L4 / R7). Pure, React-free.
|
|
3
|
-
*
|
|
4
|
-
* Neither the streaming coalescer nor Ink adapts when a frame overruns its
|
|
5
|
-
* budget: the coalescer keeps its 33 ms timer, Ink keeps its 32 ms throttle, and
|
|
6
|
-
* the event loop saturates. Renders then queue behind each other on Node's
|
|
7
|
-
* single thread and KEYSTROKES QUEUE BEHIND THE RENDERS — which is what turns a
|
|
8
|
-
* slow frame into an unresponsive terminal.
|
|
9
|
-
*
|
|
10
|
-
* The ladder is the safety net under L1/L2/L3, not a substitute for them: it
|
|
11
|
-
* cannot make a frame cheaper, only rarer. Its job is to turn any residual
|
|
12
|
-
* pathology from a freeze into a visibly slower but still interactive UI.
|
|
13
|
-
*
|
|
14
|
-
* I-L4-1 — the governor changes only HOW OFTEN the view updates. Never what is
|
|
15
|
-
* dispatched, never the order, never the final state. `mergeDeltas` already
|
|
16
|
-
* guarantees that a longer window is simply a larger merge and that any
|
|
17
|
-
* non-delta action flushes the pending run first, so the same event sequence
|
|
18
|
-
* must produce the same final `ViewState` at every rung
|
|
19
|
-
* (`render-governor.test.ts`).
|
|
20
|
-
*/
|
|
21
|
-
/** Coalescing intervals, in ms. Rung 0 is the pre-feature `COALESCE_MS`. */
|
|
22
|
-
export declare const GOVERNOR_LADDER: readonly [33, 50, 80, 125, 200, 320];
|
|
23
|
-
/** Step up when a commit costs more than this fraction of the current interval. */
|
|
24
|
-
export declare const GOVERNOR_UP_RATIO = 0.7;
|
|
25
|
-
/**
|
|
26
|
-
* Consecutive cheap frames required before stepping back down.
|
|
27
|
-
*
|
|
28
|
-
* Hysteresis, and it has to be asymmetric: stepping up on one expensive frame
|
|
29
|
-
* and down on one cheap one would oscillate through the whole ladder while a
|
|
30
|
-
* long answer streams past a couple of code blocks.
|
|
31
|
-
*/
|
|
32
|
-
export declare const GOVERNOR_DOWN_STREAK = 8;
|
|
33
|
-
export interface GovernorState {
|
|
34
|
-
rung: number;
|
|
35
|
-
cheapStreak: number;
|
|
36
|
-
}
|
|
37
|
-
export declare function initialGovernor(): GovernorState;
|
|
38
|
-
/**
|
|
39
|
-
* The coalescing interval for a state.
|
|
40
|
-
*
|
|
41
|
-
* Clamped to `maxIntervalMs` in BOTH directions: `maxRenderIntervalMs = 33`
|
|
42
|
-
* flattens the ladder to one rung, which is the documented way to get the
|
|
43
|
-
* pre-feature cadence without reaching for the kill switch.
|
|
44
|
-
*/
|
|
45
|
-
export declare function intervalOf(state: GovernorState, maxIntervalMs: number): number;
|
|
46
|
-
/**
|
|
47
|
-
* Fold one commit's cost into the ladder.
|
|
48
|
-
*
|
|
49
|
-
* `lastCommitMs` covers React reconciliation AND Ink's yoga layout, because Ink
|
|
50
|
-
* computes layout in `onRender`, which React runs before layout effects. It does
|
|
51
|
-
* NOT cover Ink's serialisation and the stdout write, which happen after. In
|
|
52
|
-
* practice layout dominates, and the ladder's job is DIRECTION, not accuracy.
|
|
53
|
-
*/
|
|
54
|
-
export declare function stepGovernor(state: GovernorState, lastCommitMs: number, maxIntervalMs: number): GovernorState;
|