@sagmans/dsh-tui 0.7.0 → 0.9.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.agents/skills/dsh-tui-dogfood/SKILL.md +5 -1
- package/.agents/skills/dsh-tui-dogfood/scripts/run-plugin-from-worktree.sh +26 -2
- package/.agents/skills/dsh-tui-update-models/SKILL.md +95 -17
- package/.agents/skills/dsh-tui-update-models/references/model-wiring.md +158 -28
- package/.agents/skills/dsh-tui-update-models/scripts/dump-model-catalog.mjs +152 -16
- package/README.md +117 -53
- package/lib/agent/history.d.ts +0 -2
- package/lib/agent/history.d.ts.map +1 -1
- package/lib/agent/history.js +1 -1
- package/lib/agent/history.js.map +1 -1
- package/lib/agent/host.d.ts +0 -25
- package/lib/agent/host.d.ts.map +1 -1
- package/lib/agent/host.js +2 -2
- package/lib/agent/host.js.map +1 -1
- package/lib/agent/model.d.ts +38 -6
- package/lib/agent/model.d.ts.map +1 -1
- package/lib/agent/model.js +38 -14
- package/lib/agent/model.js.map +1 -1
- package/lib/agent/prompt-history.d.ts +7 -12
- package/lib/agent/prompt-history.d.ts.map +1 -1
- package/lib/agent/prompt-history.js +10 -31
- package/lib/agent/prompt-history.js.map +1 -1
- package/lib/cards/composition.d.ts +1 -1
- package/lib/cards/composition.d.ts.map +1 -1
- package/lib/cards/composition.js +7 -0
- package/lib/cards/composition.js.map +1 -1
- package/lib/cards/presenter.d.ts.map +1 -1
- package/lib/cards/presenter.js +32 -2
- package/lib/cards/presenter.js.map +1 -1
- package/lib/cards.d.ts +27 -2
- package/lib/cards.d.ts.map +1 -1
- package/lib/cards.js +17 -3
- package/lib/cards.js.map +1 -1
- package/lib/compat/probe.js +1 -1
- package/lib/compat/probe.js.map +1 -1
- package/lib/config.d.ts +10 -0
- package/lib/config.d.ts.map +1 -1
- package/lib/config.js +18 -0
- package/lib/config.js.map +1 -1
- package/lib/contracts.d.ts +2 -0
- package/lib/contracts.d.ts.map +1 -1
- package/lib/export.d.ts +12 -0
- package/lib/export.d.ts.map +1 -1
- package/lib/export.js +34 -3
- package/lib/export.js.map +1 -1
- package/lib/herdr/client.d.ts +8 -9
- package/lib/herdr/client.d.ts.map +1 -1
- package/lib/herdr/client.js +14 -2
- package/lib/herdr/client.js.map +1 -1
- package/lib/herdr/constants.d.ts +18 -0
- package/lib/herdr/constants.d.ts.map +1 -1
- package/lib/herdr/constants.js +18 -0
- package/lib/herdr/constants.js.map +1 -1
- package/lib/herdr/reporter.d.ts +20 -4
- package/lib/herdr/reporter.d.ts.map +1 -1
- package/lib/herdr/reporter.js +70 -20
- package/lib/herdr/reporter.js.map +1 -1
- package/lib/herdr/state.d.ts +10 -10
- package/lib/herdr/state.d.ts.map +1 -1
- package/lib/herdr/state.js +22 -5
- package/lib/herdr/state.js.map +1 -1
- package/lib/identity.d.ts +0 -2
- package/lib/identity.d.ts.map +1 -1
- package/lib/identity.js +0 -1
- package/lib/identity.js.map +1 -1
- package/lib/index.d.ts +1 -4
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +15 -5
- package/lib/index.js.map +1 -1
- package/lib/input/keymap.d.ts +1 -7
- package/lib/input/keymap.d.ts.map +1 -1
- package/lib/input/keymap.js +3 -11
- package/lib/input/keymap.js.map +1 -1
- package/lib/input/submission.js +2 -2
- package/lib/input/submission.js.map +1 -1
- package/lib/install-skills.d.ts +20 -1
- package/lib/install-skills.d.ts.map +1 -1
- package/lib/install-skills.js +84 -9
- package/lib/install-skills.js.map +1 -1
- package/lib/model-list.d.ts.map +1 -1
- package/lib/model-list.js +17 -5
- package/lib/model-list.js.map +1 -1
- package/lib/queue.d.ts +0 -2
- package/lib/queue.d.ts.map +1 -1
- package/lib/queue.js +1 -1
- package/lib/queue.js.map +1 -1
- package/lib/settings-notice.d.ts +10 -1
- package/lib/settings-notice.d.ts.map +1 -1
- package/lib/settings-notice.js +17 -7
- package/lib/settings-notice.js.map +1 -1
- package/lib/spacing.d.ts +40 -0
- package/lib/spacing.d.ts.map +1 -0
- package/lib/spacing.js +54 -0
- package/lib/spacing.js.map +1 -0
- package/lib/stash/paths.d.ts +19 -10
- package/lib/stash/paths.d.ts.map +1 -1
- package/lib/stash/paths.js +52 -23
- package/lib/stash/paths.js.map +1 -1
- package/lib/stash/schema.d.ts +13 -12
- package/lib/stash/schema.d.ts.map +1 -1
- package/lib/stash/schema.js +11 -9
- package/lib/stash/schema.js.map +1 -1
- package/lib/stash/store.d.ts.map +1 -1
- package/lib/stash/store.js +9 -19
- package/lib/stash/store.js.map +1 -1
- package/lib/stash.d.ts +17 -10
- package/lib/stash.d.ts.map +1 -1
- package/lib/stash.js +31 -20
- package/lib/stash.js.map +1 -1
- package/lib/subagents.d.ts +0 -4
- package/lib/subagents.d.ts.map +1 -1
- package/lib/subagents.js +2 -2
- package/lib/subagents.js.map +1 -1
- package/lib/surface/appearance.d.ts +3 -0
- package/lib/surface/appearance.d.ts.map +1 -1
- package/lib/surface/appearance.js +5 -0
- package/lib/surface/appearance.js.map +1 -1
- package/lib/surface/background-work.d.ts +2 -0
- package/lib/surface/background-work.d.ts.map +1 -1
- package/lib/surface/background-work.js +45 -3
- package/lib/surface/background-work.js.map +1 -1
- package/lib/surface/commands.d.ts +2 -0
- package/lib/surface/commands.d.ts.map +1 -1
- package/lib/surface/commands.js +32 -6
- package/lib/surface/commands.js.map +1 -1
- package/lib/surface/modal-input.d.ts +3 -2
- package/lib/surface/modal-input.d.ts.map +1 -1
- package/lib/surface/modal-input.js +25 -8
- package/lib/surface/modal-input.js.map +1 -1
- package/lib/surface/model-choice.d.ts.map +1 -1
- package/lib/surface/model-choice.js +18 -18
- package/lib/surface/model-choice.js.map +1 -1
- package/lib/surface/preset-choice.d.ts.map +1 -1
- package/lib/surface/preset-choice.js +18 -10
- package/lib/surface/preset-choice.js.map +1 -1
- package/lib/surface/prompt-memory.d.ts +3 -1
- package/lib/surface/prompt-memory.d.ts.map +1 -1
- package/lib/surface/prompt-memory.js +10 -11
- package/lib/surface/prompt-memory.js.map +1 -1
- package/lib/surface/session-lifecycle.d.ts +6 -1
- package/lib/surface/session-lifecycle.d.ts.map +1 -1
- package/lib/surface/session-lifecycle.js +30 -8
- package/lib/surface/session-lifecycle.js.map +1 -1
- package/lib/surface/session-view.d.ts.map +1 -1
- package/lib/surface/session-view.js +1 -3
- package/lib/surface/session-view.js.map +1 -1
- package/lib/surface/staged-turns.d.ts +0 -2
- package/lib/surface/staged-turns.d.ts.map +1 -1
- package/lib/surface/staged-turns.js +37 -6
- package/lib/surface/staged-turns.js.map +1 -1
- package/lib/terminal/external-editor.d.ts +16 -0
- package/lib/terminal/external-editor.d.ts.map +1 -1
- package/lib/terminal/external-editor.js +38 -6
- package/lib/terminal/external-editor.js.map +1 -1
- package/lib/terminal/host-writes.d.ts +15 -2
- package/lib/terminal/host-writes.d.ts.map +1 -1
- package/lib/terminal/host-writes.js +10 -1
- package/lib/terminal/host-writes.js.map +1 -1
- package/lib/terminal/restore.d.ts +1 -2
- package/lib/terminal/restore.d.ts.map +1 -1
- package/lib/terminal/restore.js +1 -9
- package/lib/terminal/restore.js.map +1 -1
- package/lib/terminal/signals.d.ts +0 -1
- package/lib/terminal/signals.d.ts.map +1 -1
- package/lib/terminal/signals.js +1 -1
- package/lib/terminal/signals.js.map +1 -1
- package/lib/terminal/title.d.ts.map +1 -1
- package/lib/terminal/title.js +14 -3
- package/lib/terminal/title.js.map +1 -1
- package/lib/terminal/warning-screen.d.ts.map +1 -1
- package/lib/terminal/warning-screen.js +12 -1
- package/lib/terminal/warning-screen.js.map +1 -1
- package/lib/theme-capability.d.ts +0 -2
- package/lib/theme-capability.d.ts.map +1 -1
- package/lib/theme-capability.js +1 -1
- package/lib/theme-capability.js.map +1 -1
- package/lib/theme-defaults.d.ts.map +1 -1
- package/lib/theme-defaults.js +7 -0
- package/lib/theme-defaults.js.map +1 -1
- package/lib/theme-files.d.ts +1 -1
- package/lib/theme-files.d.ts.map +1 -1
- package/lib/theme-files.js +1 -1
- package/lib/theme-files.js.map +1 -1
- package/lib/theme-schema.d.ts +6 -6
- package/lib/theme-settings.d.ts +13 -8
- package/lib/theme-settings.d.ts.map +1 -1
- package/lib/theme-settings.js +17 -3
- package/lib/theme-settings.js.map +1 -1
- package/lib/theme-tokens.d.ts +1 -1
- package/lib/theme-tokens.d.ts.map +1 -1
- package/lib/theme-tokens.js +7 -2
- package/lib/theme-tokens.js.map +1 -1
- package/lib/transcript.d.ts +2 -2
- package/lib/transcript.d.ts.map +1 -1
- package/lib/transcript.js +9 -4
- package/lib/transcript.js.map +1 -1
- package/lib/ui/dock.d.ts +2 -0
- package/lib/ui/dock.d.ts.map +1 -1
- package/lib/ui/dock.js +18 -3
- package/lib/ui/dock.js.map +1 -1
- package/lib/ui/gap.d.ts +28 -0
- package/lib/ui/gap.d.ts.map +1 -0
- package/lib/ui/gap.js +47 -0
- package/lib/ui/gap.js.map +1 -0
- package/lib/ui/gutter.d.ts +25 -0
- package/lib/ui/gutter.d.ts.map +1 -0
- package/lib/ui/gutter.js +31 -0
- package/lib/ui/gutter.js.map +1 -0
- package/lib/ui/layout.d.ts +13 -1
- package/lib/ui/layout.d.ts.map +1 -1
- package/lib/ui/layout.js +32 -6
- package/lib/ui/layout.js.map +1 -1
- package/lib/ui/queue.d.ts +0 -4
- package/lib/ui/queue.d.ts.map +1 -1
- package/lib/ui/queue.js +2 -2
- package/lib/ui/queue.js.map +1 -1
- package/lib/ui/rows.d.ts +0 -8
- package/lib/ui/rows.d.ts.map +1 -1
- package/lib/ui/rows.js +1 -9
- package/lib/ui/rows.js.map +1 -1
- package/lib/ui/stash-picker.d.ts +2 -2
- package/lib/ui/stash-picker.d.ts.map +1 -1
- package/lib/ui/stash-picker.js +3 -3
- package/lib/ui/stash-picker.js.map +1 -1
- package/lib/ui/view/gate-card.d.ts.map +1 -1
- package/lib/ui/view/gate-card.js +4 -1
- package/lib/ui/view/gate-card.js.map +1 -1
- package/lib/ui/view/tool-card.d.ts +17 -2
- package/lib/ui/view/tool-card.d.ts.map +1 -1
- package/lib/ui/view/tool-card.js +40 -8
- package/lib/ui/view/tool-card.js.map +1 -1
- package/lib/ui/view/transcript-message.d.ts +3 -0
- package/lib/ui/view/transcript-message.d.ts.map +1 -1
- package/lib/ui/view/transcript-message.js +8 -1
- package/lib/ui/view/transcript-message.js.map +1 -1
- package/lib/ui/view.d.ts +36 -9
- package/lib/ui/view.d.ts.map +1 -1
- package/lib/ui/view.js +90 -32
- package/lib/ui/view.js.map +1 -1
- package/package.json +3 -1
- package/themes/deepseek-blue.yaml +3 -0
- package/themes/violet-orbit.yaml +16 -9
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session-lifecycle.d.ts","sourceRoot":"","sources":["../../src/surface/session-lifecycle.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"session-lifecycle.d.ts","sourceRoot":"","sources":["../../src/surface/session-lifecycle.ts"],"names":[],"mappings":"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"}
|
|
@@ -65,6 +65,13 @@ export function createSessionLifecycle(ctx, ports) {
|
|
|
65
65
|
// Settled before the transcript is touched, so a refusal leaves neither a
|
|
66
66
|
// half-replayed session nor a half-composed agent behind.
|
|
67
67
|
const preset = await ports.presetFor(id, resume, fork);
|
|
68
|
+
// A session already in service still owns its write handle, and the host refuses
|
|
69
|
+
// a second one: reopening the very session the reader is driving — a reload, or a
|
|
70
|
+
// pick of the session already on screen — has to let that agent go before its
|
|
71
|
+
// replacement is asked for. Every other open settles first, which is what keeps a
|
|
72
|
+
// refusal from taking the reader's agent away with it.
|
|
73
|
+
if (agent !== undefined && agent.sessionId === id)
|
|
74
|
+
await disposeOutgoing();
|
|
68
75
|
const handle = await startAgent(ctx, {
|
|
69
76
|
sessionId: id,
|
|
70
77
|
resume,
|
|
@@ -79,10 +86,20 @@ export function createSessionLifecycle(ctx, ports) {
|
|
|
79
86
|
},
|
|
80
87
|
...(fork === undefined ? {} : { fork }),
|
|
81
88
|
});
|
|
89
|
+
// The new session's agent is accepted before the outgoing one is let go:
|
|
90
|
+
// the settled questions above are where an open is refused, and a refusal
|
|
91
|
+
// has to find the reader's own agent still driving an untouched screen.
|
|
92
|
+
// The paths that already let it go — /new, /fork, a staged branch — arrive
|
|
93
|
+
// with none installed.
|
|
94
|
+
if (agent !== undefined)
|
|
95
|
+
await disposeOutgoing();
|
|
82
96
|
sessionOpened = true;
|
|
83
97
|
activeSession = id;
|
|
84
98
|
ports.setViewed(id);
|
|
85
99
|
agent = handle;
|
|
100
|
+
// A resumed agent can already own live jobs, so the pane must know about
|
|
101
|
+
// them before its driver's phase is reported as idle.
|
|
102
|
+
ports.refreshJobs();
|
|
86
103
|
// A cursor counts the turns of one log; the session just opened has its own.
|
|
87
104
|
ports.stagedSessionOpened(id);
|
|
88
105
|
ports.promptMemorySessionOpened();
|
|
@@ -125,7 +142,8 @@ export function createSessionLifecycle(ctx, ports) {
|
|
|
125
142
|
return handle;
|
|
126
143
|
};
|
|
127
144
|
const switchSession = async (id) => {
|
|
128
|
-
|
|
145
|
+
// The open owns the handover: settling the new session first is what keeps
|
|
146
|
+
// a refused switch from taking the reader's agent away with it.
|
|
129
147
|
await openAgent(id, true);
|
|
130
148
|
};
|
|
131
149
|
const runNewCommand = (title) => {
|
|
@@ -135,9 +153,10 @@ export function createSessionLifecycle(ctx, ports) {
|
|
|
135
153
|
return;
|
|
136
154
|
}
|
|
137
155
|
void (async () => {
|
|
156
|
+
// The `agent === undefined` return above is the only way in without a
|
|
157
|
+
// handle, so the one this transition lets go of is always there to stop.
|
|
138
158
|
const previous = letGoOfOutgoing(false);
|
|
139
|
-
|
|
140
|
-
await previous.dispose();
|
|
159
|
+
await previous.dispose();
|
|
141
160
|
await openAgent(SessionId(`tui-session-${randomUUID()}`), false);
|
|
142
161
|
if (title !== '')
|
|
143
162
|
runRenameCommand(title);
|
|
@@ -155,9 +174,11 @@ export function createSessionLifecycle(ctx, ports) {
|
|
|
155
174
|
* the reader keeps the conversation they were reading.
|
|
156
175
|
*/
|
|
157
176
|
const runReloadCommand = () => {
|
|
158
|
-
// A failed reload
|
|
159
|
-
//
|
|
160
|
-
//
|
|
177
|
+
// A failed reload keeps the outgoing agent driving, and a failed /new or
|
|
178
|
+
// /fork is the case that leaves none: the command has to stay usable in
|
|
179
|
+
// both, because the retry is what makes a broken composition file
|
|
180
|
+
// recoverable, while a surface that has opened no session yet is still
|
|
181
|
+
// starting.
|
|
161
182
|
if (agent === undefined && !sessionOpened) {
|
|
162
183
|
ports.notice('the agent is still starting; try again in a moment');
|
|
163
184
|
ports.render();
|
|
@@ -204,9 +225,10 @@ export function createSessionLifecycle(ctx, ports) {
|
|
|
204
225
|
return;
|
|
205
226
|
}
|
|
206
227
|
const childId = SessionId(`tui-session-${randomUUID()}`);
|
|
228
|
+
// The driven session's log is read from memory, so no other command can
|
|
229
|
+
// have let the outgoing agent go since the guard that refused an absent one.
|
|
207
230
|
const previous = letGoOfOutgoing(false);
|
|
208
|
-
|
|
209
|
-
await previous.dispose();
|
|
231
|
+
await previous.dispose();
|
|
210
232
|
await openAgent(childId, false, { from: source, events: events.slice(0, point.inheritedEvents) });
|
|
211
233
|
if (title !== '')
|
|
212
234
|
runRenameCommand(title);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session-lifecycle.js","sourceRoot":"","sources":["../../src/surface/session-lifecycle.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AAGxC,OAAO,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAA;AACpD,OAAO,EAAE,SAAS,EAAkB,MAAM,kBAAkB,CAAA;AAC5D,OAAO,EAAE,UAAU,EAAuC,MAAM,kBAAkB,CAAA;AAElF,OAAO,EAAE,eAAe,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAA;AACvE,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AAC5C,OAAO,EAAE,IAAI,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAA;AAC1D,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAA;AAElD;;;;;GAKG;AAEH,uEAAuE;AACvE,MAAM,cAAc,GAAG,IAAI,CAAA;
|
|
1
|
+
{"version":3,"file":"session-lifecycle.js","sourceRoot":"","sources":["../../src/surface/session-lifecycle.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session-view.d.ts","sourceRoot":"","sources":["../../src/surface/session-view.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAA;AAClD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,wBAAwB,CAAA;AACnD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAA;AACzD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAA;AAIjD,OAAO,EAAY,KAAK,MAAM,EAAE,MAAM,qBAAqB,CAAA;AAC3D,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAA;AAClD,OAAO,EAAY,KAAK,SAAS,EAAE,MAAM,YAAY,CAAA;
|
|
1
|
+
{"version":3,"file":"session-view.d.ts","sourceRoot":"","sources":["../../src/surface/session-view.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,10 +4,8 @@ import { FoldCursor, ViewGeneration, replayIfCurrent } from "../fold-cursor.js";
|
|
|
4
4
|
import { hintKeys } from "../input/actions.js";
|
|
5
5
|
import { TranscriptModel } from "../transcript.js";
|
|
6
6
|
import { WorkFold } from "../work.js";
|
|
7
|
-
/** What the back hint names when the reader has unbound the key it would advertise. */
|
|
8
|
-
const BACK_HINT_FALLBACK = 'ctrl+b';
|
|
9
7
|
/** What the reader presses to leave a view they did not open. */
|
|
10
|
-
export const backHint = (map) => `${hintKeys(map, 'surface.back')
|
|
8
|
+
export const backHint = (map) => `${hintKeys(map, 'surface.back')} returns to this session`;
|
|
11
9
|
/**
|
|
12
10
|
* The transcript on screen: what is drawn, and never which agent is driven.
|
|
13
11
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session-view.js","sourceRoot":"","sources":["../../src/surface/session-view.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAA;AAC1D,OAAO,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAA;AACzD,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAA;AAC/E,OAAO,EAAE,QAAQ,EAAe,MAAM,qBAAqB,CAAA;AAC3D,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAA;AAClD,OAAO,EAAE,QAAQ,EAAkB,MAAM,YAAY,CAAA;AAErD,
|
|
1
|
+
{"version":3,"file":"session-view.js","sourceRoot":"","sources":["../../src/surface/session-view.ts"],"names":[],"mappings":"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"}
|
|
@@ -60,8 +60,6 @@ export interface StagedTurns {
|
|
|
60
60
|
readonly stagedCutoff: () => number | undefined;
|
|
61
61
|
/** The cursor over this session's closed turns. */
|
|
62
62
|
readonly cursor: () => UndoState;
|
|
63
|
-
/** Whether an undo is settling an interrupt, so a second press cannot race it. */
|
|
64
|
-
readonly pending: () => boolean;
|
|
65
63
|
/**
|
|
66
64
|
* The cursor at the tip of the session just opened.
|
|
67
65
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"staged-turns.d.ts","sourceRoot":"","sources":["../../src/surface/staged-turns.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAA;AACpD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAA;AACjD,OAAO,KAAK,EAAE,eAAe,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAA;AACjE,OAAO,EASL,KAAK,SAAS,EACf,MAAM,kBAAkB,CAAA;AAEzB;;;;;;;;;GASG;AAEH;;;;;;GAMG;AACH,MAAM,WAAW,eAAe;IAC9B,2EAA2E;IAC3E,QAAQ,CAAC,YAAY,EAAE,MAAM,OAAO,CAAA;IACpC,iFAAiF;IACjF,QAAQ,CAAC,aAAa,EAAE,MAAM,SAAS,CAAA;IACvC,0EAA0E;IAC1E,QAAQ,CAAC,aAAa,EAAE,CAAC,EAAE,EAAE,SAAS,KAAK,OAAO,CAAC,SAAS,SAAS,EAAE,CAAC,CAAA;IACxE,wEAAwE;IACxE,QAAQ,CAAC,eAAe,EAAE,MAAM,IAAI,CAAA;IACpC,+EAA+E;IAC/E,QAAQ,CAAC,cAAc,EAAE,CAAC,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,GAAG,SAAS,KAAK,OAAO,CAAC,OAAO,CAAC,CAAA;IACxF,qFAAqF;IACrF,QAAQ,CAAC,YAAY,EAAE,MAAM,QAAQ,GAAG,SAAS,CAAA;IACjD;;;OAGG;IACH,QAAQ,CAAC,eAAe,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;IAC7C,wEAAwE;IACxE,QAAQ,CAAC,WAAW,EAAE,CAAC,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE,eAAe,KAAK,OAAO,CAAC,QAAQ,CAAC,CAAA;IACnG,6EAA6E;IAC7E,QAAQ,CAAC,aAAa,EAAE,MAAM,SAAS,MAAM,EAAE,CAAA;IAC/C,mFAAmF;IACnF,QAAQ,CAAC,OAAO,EAAE,MAAM,OAAO,CAAA;IAC/B,4DAA4D;IAC5D,QAAQ,CAAC,UAAU,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;IACpD,qEAAqE;IACrE,QAAQ,CAAC,WAAW,EAAE,MAAM,OAAO,CAAA;IACnC,sFAAsF;IACtF,QAAQ,CAAC,KAAK,EAAE,MAAM,MAAM,CAAA;IAC5B,gCAAgC;IAChC,QAAQ,CAAC,UAAU,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAA;IAC3C,QAAQ,CAAC,MAAM,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAA;IAC1C,QAAQ,CAAC,MAAM,EAAE,MAAM,IAAI,CAAA;CAC5B;AAED,gFAAgF;AAChF,MAAM,WAAW,WAAW;IAC1B,4EAA4E;IAC5E,QAAQ,CAAC,YAAY,EAAE,MAAM,MAAM,GAAG,SAAS,CAAA;IAC/C,mDAAmD;IACnD,QAAQ,CAAC,MAAM,EAAE,MAAM,SAAS,CAAA;IAChC
|
|
1
|
+
{"version":3,"file":"staged-turns.d.ts","sourceRoot":"","sources":["../../src/surface/staged-turns.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAA;AACpD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAA;AACjD,OAAO,KAAK,EAAE,eAAe,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAA;AACjE,OAAO,EASL,KAAK,SAAS,EACf,MAAM,kBAAkB,CAAA;AAEzB;;;;;;;;;GASG;AAEH;;;;;;GAMG;AACH,MAAM,WAAW,eAAe;IAC9B,2EAA2E;IAC3E,QAAQ,CAAC,YAAY,EAAE,MAAM,OAAO,CAAA;IACpC,iFAAiF;IACjF,QAAQ,CAAC,aAAa,EAAE,MAAM,SAAS,CAAA;IACvC,0EAA0E;IAC1E,QAAQ,CAAC,aAAa,EAAE,CAAC,EAAE,EAAE,SAAS,KAAK,OAAO,CAAC,SAAS,SAAS,EAAE,CAAC,CAAA;IACxE,wEAAwE;IACxE,QAAQ,CAAC,eAAe,EAAE,MAAM,IAAI,CAAA;IACpC,+EAA+E;IAC/E,QAAQ,CAAC,cAAc,EAAE,CAAC,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,GAAG,SAAS,KAAK,OAAO,CAAC,OAAO,CAAC,CAAA;IACxF,qFAAqF;IACrF,QAAQ,CAAC,YAAY,EAAE,MAAM,QAAQ,GAAG,SAAS,CAAA;IACjD;;;OAGG;IACH,QAAQ,CAAC,eAAe,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;IAC7C,wEAAwE;IACxE,QAAQ,CAAC,WAAW,EAAE,CAAC,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE,eAAe,KAAK,OAAO,CAAC,QAAQ,CAAC,CAAA;IACnG,6EAA6E;IAC7E,QAAQ,CAAC,aAAa,EAAE,MAAM,SAAS,MAAM,EAAE,CAAA;IAC/C,mFAAmF;IACnF,QAAQ,CAAC,OAAO,EAAE,MAAM,OAAO,CAAA;IAC/B,4DAA4D;IAC5D,QAAQ,CAAC,UAAU,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;IACpD,qEAAqE;IACrE,QAAQ,CAAC,WAAW,EAAE,MAAM,OAAO,CAAA;IACnC,sFAAsF;IACtF,QAAQ,CAAC,KAAK,EAAE,MAAM,MAAM,CAAA;IAC5B,gCAAgC;IAChC,QAAQ,CAAC,UAAU,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAA;IAC3C,QAAQ,CAAC,MAAM,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAA;IAC1C,QAAQ,CAAC,MAAM,EAAE,MAAM,IAAI,CAAA;CAC5B;AAED,gFAAgF;AAChF,MAAM,WAAW,WAAW;IAC1B,4EAA4E;IAC5E,QAAQ,CAAC,YAAY,EAAE,MAAM,MAAM,GAAG,SAAS,CAAA;IAC/C,mDAAmD;IACnD,QAAQ,CAAC,MAAM,EAAE,MAAM,SAAS,CAAA;IAChC;;;;;;OAMG;IACH,QAAQ,CAAC,aAAa,EAAE,CAAC,EAAE,EAAE,SAAS,KAAK,IAAI,CAAA;IAC/C,QAAQ,CAAC,IAAI,EAAE,MAAM,IAAI,CAAA;IACzB,QAAQ,CAAC,IAAI,EAAE,MAAM,IAAI,CAAA;IACzB,uEAAuE;IACvE,QAAQ,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;IAC9C,sFAAsF;IACtF,QAAQ,CAAC,WAAW,EAAE,MAAM,IAAI,CAAA;CACjC;AAED,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,eAAe,GAAG,WAAW,CAsOrE"}
|
|
@@ -39,8 +39,9 @@ export function createStagedTurns(ports) {
|
|
|
39
39
|
* turn/end; queued prompts are parked first because cancelling drops them.
|
|
40
40
|
*
|
|
41
41
|
* Returns undefined when the reader's words cannot be kept: a queue with no
|
|
42
|
-
* bank to park it in, or a turn that will not close.
|
|
43
|
-
* untouched, so the transcript keeps showing what the model
|
|
42
|
+
* bank to park it in, a park that fails, or a turn that will not close. All
|
|
43
|
+
* leave the cursor untouched, so the transcript keeps showing what the model
|
|
44
|
+
* actually saw; a
|
|
44
45
|
* number is how many queued prompts were parked before the turn was stopped.
|
|
45
46
|
*/
|
|
46
47
|
const settleForUndo = async () => {
|
|
@@ -52,9 +53,19 @@ export function createStagedTurns(ports) {
|
|
|
52
53
|
ports.render();
|
|
53
54
|
return undefined;
|
|
54
55
|
}
|
|
56
|
+
// Park before the interrupt: cancelling the turn drops the queue, so a
|
|
57
|
+
// park that fails must refuse the undo while the words are still queued.
|
|
58
|
+
if (queued.length > 0) {
|
|
59
|
+
try {
|
|
60
|
+
await parkQueued(queued);
|
|
61
|
+
}
|
|
62
|
+
catch {
|
|
63
|
+
ports.notice('could not park the queued prompts; undo cancelled');
|
|
64
|
+
ports.render();
|
|
65
|
+
return undefined;
|
|
66
|
+
}
|
|
67
|
+
}
|
|
55
68
|
ports.drivingAgent()?.interrupt();
|
|
56
|
-
if (queued.length > 0)
|
|
57
|
-
await parkQueued(queued);
|
|
58
69
|
if (ports.turnRunning() && !(await waitForTurnEnd(UNDO_TURN_SETTLE_MS))) {
|
|
59
70
|
ports.notice('could not stop the turn; undo cancelled');
|
|
60
71
|
ports.render();
|
|
@@ -66,6 +77,10 @@ export function createStagedTurns(ports) {
|
|
|
66
77
|
if (pending)
|
|
67
78
|
return;
|
|
68
79
|
pending = true;
|
|
80
|
+
// A cursor counts one session's turns, so an undo that outlives a session
|
|
81
|
+
// switch must not write the old session's step into the new session's bar.
|
|
82
|
+
const pressedFor = ports.activeSession();
|
|
83
|
+
const overtaken = () => ports.activeSession() !== pressedFor;
|
|
69
84
|
void (async () => {
|
|
70
85
|
if (ports.viewingChild()) {
|
|
71
86
|
ports.notice('undo works on the session this terminal drives · ctrl+b comes back');
|
|
@@ -73,6 +88,8 @@ export function createStagedTurns(ports) {
|
|
|
73
88
|
return;
|
|
74
89
|
}
|
|
75
90
|
const turns = await currentTurns();
|
|
91
|
+
if (overtaken())
|
|
92
|
+
return;
|
|
76
93
|
if (cursor.hidden >= turns.length && !ports.turnRunning()) {
|
|
77
94
|
ports.notice('nothing to undo');
|
|
78
95
|
ports.render();
|
|
@@ -90,7 +107,11 @@ export function createStagedTurns(ports) {
|
|
|
90
107
|
const parked = await settleForUndo();
|
|
91
108
|
if (parked === undefined)
|
|
92
109
|
return;
|
|
110
|
+
if (overtaken())
|
|
111
|
+
return;
|
|
93
112
|
const settledTurns = await currentTurns();
|
|
113
|
+
if (overtaken())
|
|
114
|
+
return;
|
|
94
115
|
const next = undoStep(cursor, settledTurns);
|
|
95
116
|
if (next === undefined) {
|
|
96
117
|
ports.notice('nothing to undo');
|
|
@@ -99,11 +120,15 @@ export function createStagedTurns(ports) {
|
|
|
99
120
|
}
|
|
100
121
|
if (holdsDraft) {
|
|
101
122
|
await ports.parkPrompt(draft);
|
|
123
|
+
if (overtaken())
|
|
124
|
+
return;
|
|
102
125
|
ports.notice('the draft in the bar was parked in the stash');
|
|
103
126
|
}
|
|
104
127
|
cursor = next;
|
|
105
128
|
cut = hiddenTail(next, settledTurns)?.seedCount;
|
|
106
129
|
await redrawStaged();
|
|
130
|
+
if (overtaken())
|
|
131
|
+
return;
|
|
107
132
|
ports.writeDraft(next.lastRestored);
|
|
108
133
|
// The parking count rides the undo notice: a notice of its own would be
|
|
109
134
|
// replaced before the frame could show it.
|
|
@@ -120,6 +145,11 @@ export function createStagedTurns(ports) {
|
|
|
120
145
|
});
|
|
121
146
|
};
|
|
122
147
|
const runRedoCommand = () => {
|
|
148
|
+
// An undo that is still settling owns the cursor; a redo now would step
|
|
149
|
+
// the state that undo is about to replace, so it is dropped like a second
|
|
150
|
+
// undo press.
|
|
151
|
+
if (pending)
|
|
152
|
+
return;
|
|
123
153
|
void (async () => {
|
|
124
154
|
if (ports.viewingChild()) {
|
|
125
155
|
ports.notice('redo works on the session this terminal drives · ctrl+b comes back');
|
|
@@ -173,8 +203,10 @@ export function createStagedTurns(ports) {
|
|
|
173
203
|
const source = ports.activeSession();
|
|
174
204
|
const events = await ports.sessionEvents(source);
|
|
175
205
|
const turns = turnsOf(events);
|
|
206
|
+
// hidden > 0 was settled above, and the driven session's log is read from
|
|
207
|
+
// memory, so the cursor still names a turn this list holds.
|
|
176
208
|
const tail = hiddenTail(cursor, turns);
|
|
177
|
-
const seed =
|
|
209
|
+
const seed = events.slice(0, tail.seedCount);
|
|
178
210
|
const childId = SessionId(`tui-session-${randomUUID()}`);
|
|
179
211
|
await ports.disposeOutgoing();
|
|
180
212
|
const opened = await ports.openSession(childId, false, seed.length === 0 ? undefined : { from: source, events: seed });
|
|
@@ -189,7 +221,6 @@ export function createStagedTurns(ports) {
|
|
|
189
221
|
return {
|
|
190
222
|
stagedCutoff: () => cut,
|
|
191
223
|
cursor: () => cursor,
|
|
192
|
-
pending: () => pending,
|
|
193
224
|
sessionOpened: id => {
|
|
194
225
|
cursor = resetUndo(id);
|
|
195
226
|
cut = undefined;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"staged-turns.js","sourceRoot":"","sources":["../../src/surface/staged-turns.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AACxC,OAAO,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAA;AAGpD,OAAO,EACL,UAAU,EACV,OAAO,EACP,QAAQ,EACR,SAAS,EACT,OAAO,EACP,mBAAmB,EACnB,QAAQ,GAGT,MAAM,kBAAkB,CAAA;
|
|
1
|
+
{"version":3,"file":"staged-turns.js","sourceRoot":"","sources":["../../src/surface/staged-turns.ts"],"names":[],"mappings":"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"}
|
|
@@ -8,6 +8,16 @@
|
|
|
8
8
|
export declare const EDITOR_ENV_KEYS: readonly ["VISUAL", "EDITOR"];
|
|
9
9
|
/** A draft larger than this is left where it is rather than handed to the bar. */
|
|
10
10
|
export declare const MAX_DRAFT_BYTES = 1048576;
|
|
11
|
+
/**
|
|
12
|
+
* How long the reader's editor may hold the terminal before it is stopped.
|
|
13
|
+
*
|
|
14
|
+
* A child that never exits is the one failure this handoff cannot report its way
|
|
15
|
+
* out of: the screen is already given up, so nothing can draw, no key is read,
|
|
16
|
+
* and the session ends with the terminal left in the editor's state. Thirty
|
|
17
|
+
* minutes is far past a draft anyone is still writing and firmly inside a
|
|
18
|
+
* morning, which is the line between a slow reader and a stuck process.
|
|
19
|
+
*/
|
|
20
|
+
export declare const EDITOR_TIMEOUT_MS: number;
|
|
11
21
|
/**
|
|
12
22
|
* One configured command line as argv, or undefined when it names nothing.
|
|
13
23
|
*
|
|
@@ -38,6 +48,7 @@ export interface EditorTerminalHost {
|
|
|
38
48
|
export interface EditorChild {
|
|
39
49
|
on(event: 'error', listener: (error: Error) => void): void;
|
|
40
50
|
on(event: 'exit', listener: (code: number | null, signal: string | null) => void): void;
|
|
51
|
+
kill(signal?: NodeJS.Signals): boolean;
|
|
41
52
|
}
|
|
42
53
|
export interface EditorSpawnOptions {
|
|
43
54
|
readonly stdio: 'inherit';
|
|
@@ -87,6 +98,11 @@ export declare class ExternalEditor {
|
|
|
87
98
|
* already told the reader why, and whatever it did save is what they meant to
|
|
88
99
|
* keep. A child that never started emits `error` and no `exit`, so either one
|
|
89
100
|
* settling the wait is the answer.
|
|
101
|
+
*
|
|
102
|
+
* A child that never exits is stopped at the timeout and reported through the
|
|
103
|
+
* host, because it cannot report for itself; its exit still settles this wait,
|
|
104
|
+
* so the draft it left on disk is read back exactly as an editor's own bad
|
|
105
|
+
* exit is — a stuck editor must not become a way to lose the draft.
|
|
90
106
|
*/
|
|
91
107
|
private run;
|
|
92
108
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"external-editor.d.ts","sourceRoot":"","sources":["../../src/terminal/external-editor.ts"],"names":[],"mappings":"AAmBA;;;;;;GAMG;AACH,eAAO,MAAM,eAAe,+BAAgC,CAAA;AAS5D,kFAAkF;AAClF,eAAO,MAAM,eAAe,UAAY,CAAA;
|
|
1
|
+
{"version":3,"file":"external-editor.d.ts","sourceRoot":"","sources":["../../src/terminal/external-editor.ts"],"names":[],"mappings":"AAmBA;;;;;;GAMG;AACH,eAAO,MAAM,eAAe,+BAAgC,CAAA;AAS5D,kFAAkF;AAClF,eAAO,MAAM,eAAe,UAAY,CAAA;AAQxC;;;;;;;;GAQG;AACH,eAAO,MAAM,iBAAiB,QAAiB,CAAA;AAwB/C;;;;;;;;;GASG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,MAAM,EAAE,GAAG,SAAS,CA2B/E;AAED,gFAAgF;AAChF,wBAAgB,oBAAoB,CAAC,GAAG,GAAE,MAAM,CAAC,UAAwB,GAAG,SAAS,MAAM,EAAE,GAAG,SAAS,CAQxG;AAED;;;;;;;GAOG;AACH,MAAM,WAAW,kBAAkB;IACjC,OAAO,IAAI,IAAI,CAAA;IACf,MAAM,IAAI,IAAI,CAAA;IACd,MAAM,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAA;CAC9B;AAED,yDAAyD;AACzD,MAAM,WAAW,WAAW;IAC1B,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,GAAG,IAAI,CAAA;IAC1D,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,KAAK,IAAI,GAAG,IAAI,CAAA;IACvF,IAAI,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,OAAO,GAAG,OAAO,CAAA;CACvC;AAED,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,KAAK,EAAE,SAAS,CAAA;IACzB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAA;IACpB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC,UAAU,CAAA;CAChC;AAED,yFAAyF;AACzF,MAAM,MAAM,WAAW,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,MAAM,EAAE,EAAE,OAAO,EAAE,kBAAkB,KAAK,WAAW,CAAA;AAiB7G,2FAA2F;AAC3F,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,GAAG,SAAS,CAAA;IAC5C,qFAAqF;IACrF,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IACtC,QAAQ,CAAC,KAAK,CAAC,EAAE,WAAW,GAAG,SAAS,CAAA;CACzC;AAED;;;;;;GAMG;AACH,qBAAa,cAAc;IAQvB,OAAO,CAAC,QAAQ,CAAC,IAAI;IAPvB,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAmB;IACvC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAQ;IACjC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAa;IACnC,gFAAgF;IAChF,OAAO,CAAC,OAAO,CAAQ;gBAGJ,IAAI,EAAE,kBAAkB,EACzC,OAAO,GAAE,qBAA0B;IAOrC,mGAAmG;IAC7F,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC;IA0ErD;;;;;;;;OAQG;YACW,SAAS;IAkBvB;;;;;;;;;;;;OAYG;IACH,OAAO,CAAC,GAAG;CA4BZ"}
|
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
// and nothing in this surface writes to the tty while the child owns it.
|
|
12
12
|
import { spawn } from 'node:child_process';
|
|
13
13
|
import { constants } from 'node:fs';
|
|
14
|
-
import { chmod, mkdtemp, open, rm, writeFile } from 'node:fs/promises';
|
|
14
|
+
import { chmod, lstat, mkdtemp, open, rm, writeFile } from 'node:fs/promises';
|
|
15
15
|
import { tmpdir } from 'node:os';
|
|
16
16
|
import { join } from 'node:path';
|
|
17
17
|
import { stripControlCharacters } from "../text.js";
|
|
@@ -33,13 +33,27 @@ const DRAFT_DIR_PREFIX = 'dsh-tui-draft-';
|
|
|
33
33
|
export const MAX_DRAFT_BYTES = 1_048_576;
|
|
34
34
|
/** The same budget as a word, so the notice reads as a size and cannot drift from it. */
|
|
35
35
|
const MAX_DRAFT_LABEL = `${Math.round(MAX_DRAFT_BYTES / 1024 / 1024)} MiB`;
|
|
36
|
+
const SECOND_MS = 1000;
|
|
37
|
+
const MINUTE_MS = 60 * SECOND_MS;
|
|
38
|
+
/**
|
|
39
|
+
* How long the reader's editor may hold the terminal before it is stopped.
|
|
40
|
+
*
|
|
41
|
+
* A child that never exits is the one failure this handoff cannot report its way
|
|
42
|
+
* out of: the screen is already given up, so nothing can draw, no key is read,
|
|
43
|
+
* and the session ends with the terminal left in the editor's state. Thirty
|
|
44
|
+
* minutes is far past a draft anyone is still writing and firmly inside a
|
|
45
|
+
* morning, which is the line between a slow reader and a stuck process.
|
|
46
|
+
*/
|
|
47
|
+
export const EDITOR_TIMEOUT_MS = 30 * MINUTE_MS;
|
|
36
48
|
const NO_EDITOR_MESSAGE = 'no editor configured: set $VISUAL or $EDITOR to open the draft in one';
|
|
37
49
|
const launchFailureMessage = (command, error) => `could not start ${command}: ${error.message}`;
|
|
38
50
|
const useFailureMessage = (error) => `could not use the edited draft: ${error instanceof Error ? error.message : 'unknown error'}`;
|
|
39
51
|
const tooLargeMessage = (file) => `the edited draft is larger than ${MAX_DRAFT_LABEL}; it was left at ${file}`;
|
|
40
52
|
const NOT_A_FILE_MESSAGE = 'the edited draft is no longer a plain file; nothing was taken back';
|
|
41
|
-
const retainedMessage = (
|
|
53
|
+
const retainedMessage = (file) => `could not remove the scratch directory; the draft is still at ${file}`;
|
|
54
|
+
const uncertainCleanupMessage = (directory) => `could not remove the scratch directory; check ${directory} for anything left behind`;
|
|
42
55
|
const resumeFailureMessage = (error) => `the screen did not come back cleanly: ${error instanceof Error ? error.message : 'unknown error'}`;
|
|
56
|
+
const timeoutMessage = (command) => `${command} held the terminal past the editor timeout and was stopped; the draft was taken back`;
|
|
43
57
|
/** The quote a command line is currently inside, if any. */
|
|
44
58
|
const QUOTES = new Set(["'", '"']);
|
|
45
59
|
/** Whitespace that separates one argument from the next. */
|
|
@@ -184,10 +198,12 @@ export class ExternalEditor {
|
|
|
184
198
|
finally {
|
|
185
199
|
const scratch = directory;
|
|
186
200
|
if (scratch !== undefined && !keepDirectory) {
|
|
187
|
-
//
|
|
188
|
-
//
|
|
189
|
-
await rm(scratch, { recursive: true, force: true }).catch(() => {
|
|
190
|
-
|
|
201
|
+
// Recursive removal may delete the draft before failing on another child,
|
|
202
|
+
// so only promise a recovery path when that plain file still exists.
|
|
203
|
+
await rm(scratch, { recursive: true, force: true }).catch(async () => {
|
|
204
|
+
const file = join(scratch, DRAFT_FILE_NAME);
|
|
205
|
+
const retained = await lstat(file).then(info => info.isFile()).catch(() => false);
|
|
206
|
+
this.host.notice(retained ? retainedMessage(file) : uncertainCleanupMessage(scratch));
|
|
191
207
|
});
|
|
192
208
|
}
|
|
193
209
|
// Cleared before the screen comes back, so a `resume` that throws cannot
|
|
@@ -240,6 +256,11 @@ export class ExternalEditor {
|
|
|
240
256
|
* already told the reader why, and whatever it did save is what they meant to
|
|
241
257
|
* keep. A child that never started emits `error` and no `exit`, so either one
|
|
242
258
|
* settling the wait is the answer.
|
|
259
|
+
*
|
|
260
|
+
* A child that never exits is stopped at the timeout and reported through the
|
|
261
|
+
* host, because it cannot report for itself; its exit still settles this wait,
|
|
262
|
+
* so the draft it left on disk is read back exactly as an editor's own bad
|
|
263
|
+
* exit is — a stuck editor must not become a way to lose the draft.
|
|
243
264
|
*/
|
|
244
265
|
run(command, args, file) {
|
|
245
266
|
return new Promise(resolve => {
|
|
@@ -248,11 +269,22 @@ export class ExternalEditor {
|
|
|
248
269
|
cwd: process.cwd(),
|
|
249
270
|
env: this.env,
|
|
250
271
|
});
|
|
272
|
+
// Armed before the wait so no exit can slip past between the two, and
|
|
273
|
+
// cleared by whichever event settles it, because a pending timer would
|
|
274
|
+
// hold the process open long after the editor is gone.
|
|
275
|
+
const expiry = setTimeout(() => {
|
|
276
|
+
this.host.notice(timeoutMessage(command));
|
|
277
|
+
// SIGKILL, the one signal an editor cannot install a handler for: the
|
|
278
|
+
// exit this promise still waits on is what keeps the terminal from
|
|
279
|
+
// being restored while a child could still be drawing on it.
|
|
280
|
+
child.kill('SIGKILL');
|
|
281
|
+
}, EDITOR_TIMEOUT_MS);
|
|
251
282
|
let settled = false;
|
|
252
283
|
const settle = (error) => {
|
|
253
284
|
if (settled)
|
|
254
285
|
return;
|
|
255
286
|
settled = true;
|
|
287
|
+
clearTimeout(expiry);
|
|
256
288
|
resolve(error);
|
|
257
289
|
};
|
|
258
290
|
child.on('error', error => settle(error));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"external-editor.js","sourceRoot":"","sources":["../../src/terminal/external-editor.ts"],"names":[],"mappings":"AAAA,oDAAoD;AACpD,EAAE;AACF,4EAA4E;AAC5E,4EAA4E;AAC5E,2EAA2E;AAC3E,+EAA+E;AAC/E,yDAAyD;AACzD,EAAE;AACF,gFAAgF;AAChF,iFAAiF;AACjF,yEAAyE;AAEzE,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAA;AAC1C,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,CAAA;AACnC,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAA;
|
|
1
|
+
{"version":3,"file":"external-editor.js","sourceRoot":"","sources":["../../src/terminal/external-editor.ts"],"names":[],"mappings":"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"}
|
|
@@ -12,12 +12,25 @@
|
|
|
12
12
|
*
|
|
13
13
|
* The surface's own drawing goes through the terminal object, which is wrapped
|
|
14
14
|
* here: a write made inside that call passes through, and everything else waits.
|
|
15
|
+
*
|
|
16
|
+
* What waits is bounded in whole writes, not in bytes: once a stream holds more
|
|
17
|
+
* than its budget the oldest writes are dropped, and the newest write is never
|
|
18
|
+
* cut or given up, so the hold ends at whichever is larger — the budget, or that
|
|
19
|
+
* one write. A write larger than the budget is therefore held whole, because
|
|
20
|
+
* this is the reader's own program's output and half a line is corruption where
|
|
21
|
+
* a bigger hold is only memory.
|
|
15
22
|
*/
|
|
16
23
|
/** One stream a host may write to without asking the surface. */
|
|
17
24
|
export interface HostWritable {
|
|
18
25
|
write(...args: unknown[]): unknown;
|
|
19
26
|
}
|
|
20
|
-
/**
|
|
27
|
+
/**
|
|
28
|
+
* The hold budget one stream trims back to.
|
|
29
|
+
*
|
|
30
|
+
* Trimming counts whole writes, so this is the point the oldest write is given
|
|
31
|
+
* up at rather than a ceiling on the bytes a stream holds; the header says what
|
|
32
|
+
* the newest write does to it.
|
|
33
|
+
*/
|
|
21
34
|
export declare const HOST_WRITE_LIMIT: number;
|
|
22
35
|
/** What a reader is told when the held text had to be trimmed. */
|
|
23
36
|
export declare const HOST_WRITE_DROPPED = "\u2026 host output dropped";
|
|
@@ -32,7 +45,7 @@ export interface HostWriteOptions {
|
|
|
32
45
|
terminal: HostWritable;
|
|
33
46
|
/** The streams the host writes to directly. */
|
|
34
47
|
targets: readonly HostWritable[];
|
|
35
|
-
/** Per-stream hold budget; the oldest
|
|
48
|
+
/** Per-stream hold budget; the oldest whole write is dropped past it. */
|
|
36
49
|
limit?: number;
|
|
37
50
|
}
|
|
38
51
|
export declare function holdHostWrites(options: HostWriteOptions): HostWriteGuard;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"host-writes.d.ts","sourceRoot":"","sources":["../../src/terminal/host-writes.ts"],"names":[],"mappings":"AAEA
|
|
1
|
+
{"version":3,"file":"host-writes.d.ts","sourceRoot":"","sources":["../../src/terminal/host-writes.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,iEAAiE;AACjE,MAAM,WAAW,YAAY;IAC3B,KAAK,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,OAAO,CAAA;CACnC;AAED;;;;;;GAMG;AACH,eAAO,MAAM,gBAAgB,QAAY,CAAA;AAEzC,kEAAkE;AAClE,eAAO,MAAM,kBAAkB,+BAA0B,CAAA;AAEzD,gFAAgF;AAChF,eAAO,MAAM,kBAAkB,EAAE,SAAS,YAAY,EAAqC,CAAA;AAE3F,MAAM,WAAW,cAAc;IAC7B,2EAA2E;IAC3E,OAAO,IAAI,IAAI,CAAA;CAChB;AAED,MAAM,WAAW,gBAAgB;IAC/B,kFAAkF;IAClF,QAAQ,EAAE,YAAY,CAAA;IACtB,+CAA+C;IAC/C,OAAO,EAAE,SAAS,YAAY,EAAE,CAAA;IAChC,yEAAyE;IACzE,KAAK,CAAC,EAAE,MAAM,CAAA;CACf;AA+GD,wBAAgB,cAAc,CAAC,OAAO,EAAE,gBAAgB,GAAG,cAAc,CAyBxE"}
|