codedeck 0.7.0 → 0.7.2
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/README.md +49 -34
- package/dist/cli/commands/claims.js +3 -2
- package/dist/cli/commands/claims.js.map +1 -1
- package/dist/cli/commands/doctor.js +8 -40
- package/dist/cli/commands/doctor.js.map +1 -1
- package/dist/cli/commands/logs.js +2 -2
- package/dist/cli/commands/logs.js.map +1 -1
- package/dist/cli/commands/open.js +8 -9
- package/dist/cli/commands/open.js.map +1 -1
- package/dist/cli/commands/ps.js +6 -6
- package/dist/cli/commands/ps.js.map +1 -1
- package/dist/cli/commands/review.js +36 -58
- package/dist/cli/commands/review.js.map +1 -1
- package/dist/cli/commands/run.js +27 -27
- package/dist/cli/commands/run.js.map +1 -1
- package/dist/cli/commands/setup.js +96 -314
- package/dist/cli/commands/setup.js.map +1 -1
- package/dist/cli/commands/show.js +2 -1
- package/dist/cli/commands/show.js.map +1 -1
- package/dist/cli/commands/ui.js +61 -0
- package/dist/cli/commands/ui.js.map +1 -0
- package/dist/cli/commands/usage.js +65 -42
- package/dist/cli/commands/usage.js.map +1 -1
- package/dist/cli/commands/wait.js +3 -2
- package/dist/cli/commands/wait.js.map +1 -1
- package/dist/cli/index.js +55 -39
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/web-launch.js +126 -0
- package/dist/cli/web-launch.js.map +1 -0
- package/dist/config/config.js +0 -70
- package/dist/config/config.js.map +1 -1
- package/dist/config/paths.js +1 -0
- package/dist/config/paths.js.map +1 -1
- package/dist/config/setup.js +248 -0
- package/dist/config/setup.js.map +1 -0
- package/dist/config/web-host.js +31 -0
- package/dist/config/web-host.js.map +1 -0
- package/dist/config/web-port.js +24 -0
- package/dist/config/web-port.js.map +1 -0
- package/dist/core/claude-transcript.js +87 -0
- package/dist/core/claude-transcript.js.map +1 -1
- package/dist/core/errors.js +19 -39
- package/dist/core/errors.js.map +1 -1
- package/dist/core/models.js +4 -1
- package/dist/core/models.js.map +1 -1
- package/dist/core/pricing.js +73 -50
- package/dist/core/pricing.js.map +1 -1
- package/dist/core/roles.js +6 -5
- package/dist/core/roles.js.map +1 -1
- package/dist/core/run-skills.js +114 -0
- package/dist/core/run-skills.js.map +1 -0
- package/dist/core/run-usage.js +4 -1
- package/dist/core/run-usage.js.map +1 -1
- package/dist/core/session.js +6 -16
- package/dist/core/session.js.map +1 -1
- package/dist/core/usage-query.js +41 -0
- package/dist/core/usage-query.js.map +1 -0
- package/dist/daemon/build-id.js +30 -0
- package/dist/daemon/build-id.js.map +1 -0
- package/dist/daemon/daemon.js +1113 -799
- package/dist/daemon/daemon.js.map +1 -1
- package/dist/daemon/instance-lock.js +48 -0
- package/dist/daemon/instance-lock.js.map +1 -0
- package/dist/daemon/web-supervisor.js +251 -0
- package/dist/daemon/web-supervisor.js.map +1 -0
- package/dist/drivers/antigravity/parser.js +7 -10
- package/dist/drivers/antigravity/parser.js.map +1 -1
- package/dist/drivers/claude/driver.js +1 -0
- package/dist/drivers/claude/driver.js.map +1 -1
- package/dist/drivers/codex/driver.js +14 -3
- package/dist/drivers/codex/driver.js.map +1 -1
- package/dist/drivers/codex/host-skills.js +57 -0
- package/dist/drivers/codex/host-skills.js.map +1 -0
- package/dist/drivers/opencode/driver.js +6 -2
- package/dist/drivers/opencode/driver.js.map +1 -1
- package/dist/drivers/session-runtime.js +2 -0
- package/dist/drivers/session-runtime.js.map +1 -1
- package/dist/drivers/terminal.js +15 -0
- package/dist/drivers/terminal.js.map +1 -1
- package/dist/git/diff.js +29 -4
- package/dist/git/diff.js.map +1 -1
- package/dist/git/repository.js +0 -20
- package/dist/git/repository.js.map +1 -1
- package/dist/git/worktree.js +0 -14
- package/dist/git/worktree.js.map +1 -1
- package/dist/open/contract.js.map +1 -1
- package/dist/open/pty.js +330 -5
- package/dist/open/pty.js.map +1 -1
- package/dist/plugin/agents/general.md +33 -6
- package/dist/plugin/hooks/pane-ticker.ts +102 -0
- package/dist/plugin/hooks/register.tsx +33 -8
- package/dist/plugin/mods/agents/pane.ts +259 -136
- package/dist/plugin/mods/agents/types.ts +19 -3
- package/dist/plugin/statusline.sh +22 -34
- package/dist/store/database.js +5 -7
- package/dist/store/database.js.map +1 -1
- package/dist/store/sessions.js +114 -81
- package/dist/store/sessions.js.map +1 -1
- package/dist/utils/process.js +2 -49
- package/dist/utils/process.js.map +1 -1
- package/dist/web/brand.js +59 -0
- package/dist/web/brand.js.map +1 -0
- package/dist/web/child.js +67 -0
- package/dist/web/child.js.map +1 -0
- package/dist/web/home-page.js +48 -0
- package/dist/web/home-page.js.map +1 -0
- package/dist/web/review-page.js +12 -5
- package/dist/web/review-page.js.map +1 -1
- package/dist/web/security.js +170 -0
- package/dist/web/security.js.map +1 -0
- package/dist/web/server.js +198 -0
- package/dist/web/server.js.map +1 -0
- package/dist/web/setup-icons.js +37 -0
- package/dist/web/setup-icons.js.map +1 -0
- package/dist/web/setup-page.js +1795 -0
- package/dist/web/setup-page.js.map +1 -0
- package/dist/web/setup-routes.js +475 -0
- package/dist/web/setup-routes.js.map +1 -0
- package/dist/web/usage-page.js +609 -0
- package/dist/web/usage-page.js.map +1 -0
- package/dist/web/usage-routes.js +88 -0
- package/dist/web/usage-routes.js.map +1 -0
- package/dist/web/web-token.js +56 -0
- package/dist/web/web-token.js.map +1 -0
- package/package.json +1 -1
- package/dist/plugin/prompts/_partials/commit.md +0 -145
- package/dist/plugin/prompts/_partials/pr-writer.md +0 -186
package/dist/open/pty.js
CHANGED
|
@@ -30,6 +30,268 @@ const NAME_SUFFIX = ".name";
|
|
|
30
30
|
const INTERRUPT_KEY = 0x03;
|
|
31
31
|
const FALLBACK_ROWS = 24;
|
|
32
32
|
const FALLBACK_COLUMNS = 80;
|
|
33
|
+
const QUIET_MS = 300;
|
|
34
|
+
const BRACKETED_PASTE_START = "\u001b[200~";
|
|
35
|
+
const BRACKETED_PASTE_END = "\u001b[201~";
|
|
36
|
+
const KITTY_ESC = "\u001b[27u";
|
|
37
|
+
const SGR_MOUSE_START = "\u001b[<";
|
|
38
|
+
const SGR_MOUSE_REPORT = /^\u001b\[<[0-9]+;[0-9]+;[0-9]+[Mm]$/;
|
|
39
|
+
// Matching terminal replies needs ESC and BEL in the pattern.
|
|
40
|
+
const TERMINAL_REPLY = /^(?:(?:\u001bP[^\u001b]*\u001b\\)|(?:\u001b\][^\u001b\u0007]*(?:\u0007|\u001b\\))|(?:\u001b\[[?>][0-?]*[ -/]*(?:c|\$y|u|R|n)))+$/; // NOSONAR
|
|
41
|
+
/**
|
|
42
|
+
* Claude Code shares its input line between user keys and `/rename`. The name
|
|
43
|
+
* can arrive while someone is typing, turning "Bora tamb" into
|
|
44
|
+
* "Bora tamb/rename XPto xyz" and submitting both as one prompt. Hold the
|
|
45
|
+
* rename until the input is clean and the user has been quiet for 300 ms.
|
|
46
|
+
* Tracing is on by default under `sessionsDir()`. Set `CODEDECK_PTY_DEBUG` to
|
|
47
|
+
* an absolute path to choose another file, or to `off` or `0` to disable it.
|
|
48
|
+
*/
|
|
49
|
+
export function createInputGate(options) {
|
|
50
|
+
const schedule = options.setTimeout ?? globalThis.setTimeout;
|
|
51
|
+
const cancel = options.clearTimeout ?? globalThis.clearTimeout;
|
|
52
|
+
const now = options.now ?? Date.now;
|
|
53
|
+
const record = options.trace
|
|
54
|
+
? (event) => {
|
|
55
|
+
try {
|
|
56
|
+
options.trace?.(event);
|
|
57
|
+
}
|
|
58
|
+
catch { }
|
|
59
|
+
}
|
|
60
|
+
: undefined;
|
|
61
|
+
let dirty = false;
|
|
62
|
+
let pending;
|
|
63
|
+
let used = false;
|
|
64
|
+
let disposed = false;
|
|
65
|
+
let inPaste = false;
|
|
66
|
+
let escapeCandidate = "";
|
|
67
|
+
let sgrMouseCandidate = false;
|
|
68
|
+
let dirtyBeforeEscape = false;
|
|
69
|
+
let previousByteBeforeEscape;
|
|
70
|
+
let guardNextEnter = false;
|
|
71
|
+
let previousInputWasKittyEsc = false;
|
|
72
|
+
let previousByte;
|
|
73
|
+
let lastActivity = now();
|
|
74
|
+
let timer;
|
|
75
|
+
const state = () => ({
|
|
76
|
+
dirty,
|
|
77
|
+
guard: guardNextEnter,
|
|
78
|
+
pending: pending !== undefined,
|
|
79
|
+
used,
|
|
80
|
+
});
|
|
81
|
+
const recordState = (kind, extra = {}) => {
|
|
82
|
+
if (!record)
|
|
83
|
+
return;
|
|
84
|
+
record({ kind, ...state(), ...extra });
|
|
85
|
+
};
|
|
86
|
+
const recordInput = (chunk, ignored) => {
|
|
87
|
+
if (!record)
|
|
88
|
+
return;
|
|
89
|
+
record({ kind: "input", chunk: chunk.toString("hex"), ignored, ...state() });
|
|
90
|
+
};
|
|
91
|
+
const clearTimer = () => {
|
|
92
|
+
if (timer !== undefined)
|
|
93
|
+
cancel(timer);
|
|
94
|
+
timer = undefined;
|
|
95
|
+
};
|
|
96
|
+
const tryInject = () => {
|
|
97
|
+
timer = undefined;
|
|
98
|
+
if (used) {
|
|
99
|
+
recordState("hold", { reason: "used" });
|
|
100
|
+
return;
|
|
101
|
+
}
|
|
102
|
+
if (pending === undefined) {
|
|
103
|
+
recordState("hold", { reason: "no-pending" });
|
|
104
|
+
return;
|
|
105
|
+
}
|
|
106
|
+
if (dirty) {
|
|
107
|
+
recordState("hold", { reason: "dirty" });
|
|
108
|
+
return;
|
|
109
|
+
}
|
|
110
|
+
used = true;
|
|
111
|
+
const keystrokes = pending;
|
|
112
|
+
pending = undefined;
|
|
113
|
+
options.inject(keystrokes);
|
|
114
|
+
recordState("inject");
|
|
115
|
+
};
|
|
116
|
+
const scheduleQuiet = () => {
|
|
117
|
+
clearTimer();
|
|
118
|
+
const remaining = Math.max(0, QUIET_MS - (now() - lastActivity));
|
|
119
|
+
if (remaining === 0)
|
|
120
|
+
tryInject();
|
|
121
|
+
else
|
|
122
|
+
timer = schedule(tryInject, remaining);
|
|
123
|
+
};
|
|
124
|
+
const markDirty = () => {
|
|
125
|
+
dirty = true;
|
|
126
|
+
};
|
|
127
|
+
const isSubmit = (byte, previousByte, inPaste) => byte === 0x0d && !inPaste && previousByte !== 0x5c && previousByte !== 0x1b;
|
|
128
|
+
const observeEnter = () => {
|
|
129
|
+
dirty = guardNextEnter;
|
|
130
|
+
guardNextEnter = false;
|
|
131
|
+
};
|
|
132
|
+
const isSgrMousePrefix = (candidate) => {
|
|
133
|
+
if (!candidate.startsWith(SGR_MOUSE_START))
|
|
134
|
+
return false;
|
|
135
|
+
const body = candidate.slice(SGR_MOUSE_START.length);
|
|
136
|
+
if (SGR_MOUSE_REPORT.test(candidate))
|
|
137
|
+
return true;
|
|
138
|
+
if (!/^[0-9;]*$/.test(body))
|
|
139
|
+
return false;
|
|
140
|
+
const fields = body.split(";");
|
|
141
|
+
return fields.length <= 3 && fields.slice(0, -1).every(Boolean);
|
|
142
|
+
};
|
|
143
|
+
const flushUnknownEscape = (byte, chunkState) => {
|
|
144
|
+
// Unrecognised escape sequences can edit earlier text, so guard the next Enter.
|
|
145
|
+
if (escapeCandidate !== "\u001b\r")
|
|
146
|
+
guardNextEnter = true;
|
|
147
|
+
previousInputWasKittyEsc = false;
|
|
148
|
+
const candidate = Buffer.from(escapeCandidate);
|
|
149
|
+
const retryEscape = byte === 0x1b;
|
|
150
|
+
const flush = retryEscape ? candidate.subarray(0, -1) : candidate;
|
|
151
|
+
for (const candidateByte of flush) {
|
|
152
|
+
if (isSubmit(candidateByte, previousByte, inPaste))
|
|
153
|
+
observeEnter();
|
|
154
|
+
else
|
|
155
|
+
markDirty();
|
|
156
|
+
previousByte = candidateByte;
|
|
157
|
+
}
|
|
158
|
+
escapeCandidate = retryEscape ? String.fromCharCode(byte) : "";
|
|
159
|
+
sgrMouseCandidate = false;
|
|
160
|
+
if (retryEscape) {
|
|
161
|
+
dirtyBeforeEscape = dirty;
|
|
162
|
+
previousByteBeforeEscape = previousByte;
|
|
163
|
+
chunkState.escapeStartedInChunk = true;
|
|
164
|
+
}
|
|
165
|
+
};
|
|
166
|
+
const observeByte = (byte, chunkState) => {
|
|
167
|
+
const char = String.fromCharCode(byte);
|
|
168
|
+
if (escapeCandidate !== "") {
|
|
169
|
+
escapeCandidate += char;
|
|
170
|
+
const isStart = BRACKETED_PASTE_START.startsWith(escapeCandidate);
|
|
171
|
+
const isEnd = BRACKETED_PASTE_END.startsWith(escapeCandidate);
|
|
172
|
+
const isKittyEsc = KITTY_ESC.startsWith(escapeCandidate);
|
|
173
|
+
if (escapeCandidate === "\u001b[I" || escapeCandidate === "\u001b[O") {
|
|
174
|
+
if (chunkState.escapeStartedInChunk) {
|
|
175
|
+
escapeCandidate = "";
|
|
176
|
+
dirty = dirtyBeforeEscape;
|
|
177
|
+
previousByte = previousByteBeforeEscape;
|
|
178
|
+
return false;
|
|
179
|
+
}
|
|
180
|
+
flushUnknownEscape(byte, chunkState);
|
|
181
|
+
previousByte = byte;
|
|
182
|
+
return true;
|
|
183
|
+
}
|
|
184
|
+
else if (escapeCandidate === BRACKETED_PASTE_START) {
|
|
185
|
+
inPaste = true;
|
|
186
|
+
escapeCandidate = "";
|
|
187
|
+
previousInputWasKittyEsc = false;
|
|
188
|
+
markDirty();
|
|
189
|
+
return true;
|
|
190
|
+
}
|
|
191
|
+
else if (escapeCandidate === BRACKETED_PASTE_END) {
|
|
192
|
+
inPaste = false;
|
|
193
|
+
escapeCandidate = "";
|
|
194
|
+
previousInputWasKittyEsc = false;
|
|
195
|
+
markDirty();
|
|
196
|
+
return true;
|
|
197
|
+
}
|
|
198
|
+
else if (escapeCandidate === KITTY_ESC) {
|
|
199
|
+
escapeCandidate = "";
|
|
200
|
+
if (previousInputWasKittyEsc)
|
|
201
|
+
guardNextEnter = true;
|
|
202
|
+
previousInputWasKittyEsc = !previousInputWasKittyEsc;
|
|
203
|
+
markDirty();
|
|
204
|
+
return true;
|
|
205
|
+
}
|
|
206
|
+
else if (escapeCandidate === SGR_MOUSE_START && !inPaste) {
|
|
207
|
+
sgrMouseCandidate = true;
|
|
208
|
+
}
|
|
209
|
+
else if (sgrMouseCandidate) {
|
|
210
|
+
if (SGR_MOUSE_REPORT.test(escapeCandidate)) {
|
|
211
|
+
escapeCandidate = "";
|
|
212
|
+
sgrMouseCandidate = false;
|
|
213
|
+
dirty = dirtyBeforeEscape;
|
|
214
|
+
previousByte = previousByteBeforeEscape;
|
|
215
|
+
return false;
|
|
216
|
+
}
|
|
217
|
+
if (isSgrMousePrefix(escapeCandidate)) {
|
|
218
|
+
previousByte = byte;
|
|
219
|
+
return false;
|
|
220
|
+
}
|
|
221
|
+
flushUnknownEscape(byte, chunkState);
|
|
222
|
+
previousByte = byte;
|
|
223
|
+
return true;
|
|
224
|
+
}
|
|
225
|
+
else if (!isStart && !isEnd && !isKittyEsc) {
|
|
226
|
+
flushUnknownEscape(byte, chunkState);
|
|
227
|
+
previousByte = byte;
|
|
228
|
+
return true;
|
|
229
|
+
}
|
|
230
|
+
previousByte = byte;
|
|
231
|
+
return false;
|
|
232
|
+
}
|
|
233
|
+
if (byte === 0x1b) {
|
|
234
|
+
dirtyBeforeEscape = dirty;
|
|
235
|
+
previousByteBeforeEscape = previousByte;
|
|
236
|
+
escapeCandidate = char;
|
|
237
|
+
chunkState.escapeStartedInChunk = true;
|
|
238
|
+
markDirty();
|
|
239
|
+
previousByte = byte;
|
|
240
|
+
return false;
|
|
241
|
+
}
|
|
242
|
+
if (isSubmit(byte, previousByte, inPaste)) {
|
|
243
|
+
previousInputWasKittyEsc = false;
|
|
244
|
+
observeEnter();
|
|
245
|
+
}
|
|
246
|
+
else {
|
|
247
|
+
previousInputWasKittyEsc = false;
|
|
248
|
+
markDirty();
|
|
249
|
+
if (byte < 0x20 && byte !== 0x08 && byte !== 0x09 && byte !== 0x0a && byte !== 0x0d) {
|
|
250
|
+
// An unknown control may drive a suggestion menu, so treat it like an unknown escape.
|
|
251
|
+
guardNextEnter = true;
|
|
252
|
+
}
|
|
253
|
+
}
|
|
254
|
+
previousByte = byte;
|
|
255
|
+
return true;
|
|
256
|
+
};
|
|
257
|
+
return {
|
|
258
|
+
observe(chunk) {
|
|
259
|
+
if (disposed)
|
|
260
|
+
return;
|
|
261
|
+
if (chunk.equals(Buffer.from("\u001b[I")) || chunk.equals(Buffer.from("\u001b[O"))) {
|
|
262
|
+
recordInput(chunk, "focus");
|
|
263
|
+
return;
|
|
264
|
+
}
|
|
265
|
+
if (TERMINAL_REPLY.test(chunk.toString("latin1"))) {
|
|
266
|
+
recordInput(chunk, "reply");
|
|
267
|
+
return;
|
|
268
|
+
}
|
|
269
|
+
const observedAt = now();
|
|
270
|
+
const chunkState = { escapeStartedInChunk: false };
|
|
271
|
+
let hasActivity = false;
|
|
272
|
+
for (const byte of chunk)
|
|
273
|
+
hasActivity = observeByte(byte, chunkState) || hasActivity;
|
|
274
|
+
if (hasActivity)
|
|
275
|
+
lastActivity = observedAt;
|
|
276
|
+
recordInput(chunk, null);
|
|
277
|
+
scheduleQuiet();
|
|
278
|
+
},
|
|
279
|
+
offer(keystrokes) {
|
|
280
|
+
if (disposed || used || pending !== undefined) {
|
|
281
|
+
recordState("offer", { accepted: false });
|
|
282
|
+
return;
|
|
283
|
+
}
|
|
284
|
+
pending = keystrokes;
|
|
285
|
+
recordState("offer", { accepted: true });
|
|
286
|
+
scheduleQuiet();
|
|
287
|
+
},
|
|
288
|
+
dispose() {
|
|
289
|
+
disposed = true;
|
|
290
|
+
pending = undefined;
|
|
291
|
+
clearTimer();
|
|
292
|
+
},
|
|
293
|
+
};
|
|
294
|
+
}
|
|
33
295
|
export function ptyShimPath(pluginDir) {
|
|
34
296
|
return path.join(pluginDir, SHIM_FILE);
|
|
35
297
|
}
|
|
@@ -175,12 +437,29 @@ export function watchNameSidecar(sessionFile, onName) {
|
|
|
175
437
|
};
|
|
176
438
|
}
|
|
177
439
|
export function startPtySession(options) {
|
|
440
|
+
const startedAt = process.hrtime.bigint();
|
|
441
|
+
const traceSetting = options.debugFile ?? process.env.CODEDECK_PTY_DEBUG;
|
|
442
|
+
const sessions = sessionsDir();
|
|
443
|
+
const traceEnabled = traceSetting !== "off" && traceSetting !== "0";
|
|
444
|
+
const debugFile = traceSetting === undefined || traceSetting === ""
|
|
445
|
+
? path.join(sessions, `pty-trace-${process.pid}-${Date.now().toString(36)}.ndjson`)
|
|
446
|
+
: traceSetting;
|
|
447
|
+
let traceFd;
|
|
448
|
+
const closeTrace = () => {
|
|
449
|
+
if (traceFd === undefined)
|
|
450
|
+
return;
|
|
451
|
+
try {
|
|
452
|
+
fs.closeSync(traceFd);
|
|
453
|
+
}
|
|
454
|
+
catch { }
|
|
455
|
+
traceFd = undefined;
|
|
456
|
+
};
|
|
178
457
|
const spawnChild = options.spawnChild ?? nodeSpawn;
|
|
179
458
|
const stdin = options.stdin ?? process.stdin;
|
|
180
459
|
const stdout = options.stdout ?? process.stdout;
|
|
181
460
|
// In the private directory rather than the shared one: a peer that can
|
|
182
461
|
// connect to this socket can resize the session's terminal.
|
|
183
|
-
const control = path.join(
|
|
462
|
+
const control = path.join(sessions, `codedeck-pty-${process.pid}-${Date.now().toString(36)}.sock`);
|
|
184
463
|
// A terminal that reports 0 is a terminal whose size nobody set: passing the
|
|
185
464
|
// zero down would leave the inner pty exactly as unusable as script leaves it.
|
|
186
465
|
const rows = stdout.rows || FALLBACK_ROWS;
|
|
@@ -200,6 +479,32 @@ export function startPtySession(options) {
|
|
|
200
479
|
detached: false,
|
|
201
480
|
stdio: ["pipe", "pipe", "pipe"],
|
|
202
481
|
});
|
|
482
|
+
if (traceEnabled && debugFile && path.isAbsolute(debugFile)) {
|
|
483
|
+
try {
|
|
484
|
+
prunePtyTraces(sessions);
|
|
485
|
+
traceFd = fs.openSync(debugFile, fs.constants.O_WRONLY | fs.constants.O_CREAT | fs.constants.O_APPEND | fs.constants.O_NONBLOCK, 0o600);
|
|
486
|
+
if (!fs.fstatSync(traceFd).isFile())
|
|
487
|
+
closeTrace();
|
|
488
|
+
else
|
|
489
|
+
fs.fchmodSync(traceFd, 0o600);
|
|
490
|
+
}
|
|
491
|
+
catch {
|
|
492
|
+
closeTrace();
|
|
493
|
+
}
|
|
494
|
+
}
|
|
495
|
+
const trace = traceFd === undefined
|
|
496
|
+
? undefined
|
|
497
|
+
: (event) => {
|
|
498
|
+
if (traceFd === undefined)
|
|
499
|
+
return;
|
|
500
|
+
try {
|
|
501
|
+
const t = Number((process.hrtime.bigint() - startedAt) / 1000000n);
|
|
502
|
+
fs.writeSync(traceFd, `${JSON.stringify({ ...event, t })}\n`);
|
|
503
|
+
}
|
|
504
|
+
catch {
|
|
505
|
+
closeTrace();
|
|
506
|
+
}
|
|
507
|
+
};
|
|
203
508
|
// Raw mode makes the parent a transparent wire: Ctrl+C stops being a signal
|
|
204
509
|
// here and becomes the byte the inner pty's line discipline interprets,
|
|
205
510
|
// exactly as it would in a terminal talking to Claude Code directly.
|
|
@@ -217,7 +522,12 @@ export function startPtySession(options) {
|
|
|
217
522
|
return;
|
|
218
523
|
child.stdin.write(chunk);
|
|
219
524
|
};
|
|
525
|
+
const inject = (keystrokes) => {
|
|
526
|
+
write(keystrokes);
|
|
527
|
+
};
|
|
528
|
+
const gate = createInputGate({ inject, trace });
|
|
220
529
|
const forward = (chunk) => {
|
|
530
|
+
gate.observe(chunk);
|
|
221
531
|
if (options.onInterrupt && chunk.includes(INTERRUPT_KEY))
|
|
222
532
|
options.onInterrupt();
|
|
223
533
|
write(chunk);
|
|
@@ -251,19 +561,18 @@ export function startPtySession(options) {
|
|
|
251
561
|
});
|
|
252
562
|
};
|
|
253
563
|
connect();
|
|
254
|
-
const inject = (keystrokes) => {
|
|
255
|
-
write(keystrokes);
|
|
256
|
-
};
|
|
257
564
|
const keystrokesForName = options.launch.keystrokesForName;
|
|
258
565
|
const stopWatching = keystrokesForName
|
|
259
566
|
? watchNameSidecar(options.launch.sessionFile, (name) => {
|
|
567
|
+
trace?.({ kind: "sidecar", name });
|
|
260
568
|
const keystrokes = keystrokesForName(name);
|
|
261
569
|
if (keystrokes)
|
|
262
|
-
|
|
570
|
+
gate.offer(keystrokes);
|
|
263
571
|
})
|
|
264
572
|
: () => { };
|
|
265
573
|
const dispose = () => {
|
|
266
574
|
connecting = false;
|
|
575
|
+
gate.dispose();
|
|
267
576
|
stopWatching();
|
|
268
577
|
stdout.off("resize", sendResize);
|
|
269
578
|
stdin.off("data", forward);
|
|
@@ -271,6 +580,7 @@ export function startPtySession(options) {
|
|
|
271
580
|
stdin.setRawMode(wasRaw);
|
|
272
581
|
stdin.pause();
|
|
273
582
|
connection?.destroy();
|
|
583
|
+
closeTrace();
|
|
274
584
|
try {
|
|
275
585
|
fs.rmSync(control, { force: true });
|
|
276
586
|
}
|
|
@@ -278,4 +588,19 @@ export function startPtySession(options) {
|
|
|
278
588
|
};
|
|
279
589
|
return { child, inject, dispose };
|
|
280
590
|
}
|
|
591
|
+
function prunePtyTraces(directory) {
|
|
592
|
+
try {
|
|
593
|
+
const traces = fs.readdirSync(directory, { withFileTypes: true })
|
|
594
|
+
.filter((file) => file.isFile() && /^pty-trace-.*\.ndjson$/.test(file.name))
|
|
595
|
+
.map((file) => ({
|
|
596
|
+
tracePath: path.join(directory, file.name),
|
|
597
|
+
mtimeMs: fs.statSync(path.join(directory, file.name)).mtimeMs,
|
|
598
|
+
}))
|
|
599
|
+
.sort((a, b) => b.mtimeMs - a.mtimeMs)
|
|
600
|
+
.slice(9);
|
|
601
|
+
for (const { tracePath } of traces)
|
|
602
|
+
fs.rmSync(tracePath, { force: true });
|
|
603
|
+
}
|
|
604
|
+
catch { }
|
|
605
|
+
}
|
|
281
606
|
//# sourceMappingURL=pty.js.map
|
package/dist/open/pty.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pty.js","sourceRoot":"","sources":["../../src/open/pty.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"pty.js","sourceRoot":"","sources":["../../src/open/pty.ts"],"names":[],"mappings":"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"}
|
|
@@ -26,7 +26,7 @@ description: Do CodeDeck work directly in the current workspace, with evidence.
|
|
|
26
26
|
|
|
27
27
|
- Once the task is clear in a `codedeck run` worker, rename your session with `codedeck rename "$CODEDECK_SESSION_ID" <short-task-slug>`.
|
|
28
28
|
|
|
29
|
-
<!--
|
|
29
|
+
<!-- Generated from skills/commit/SKILL.md by scripts/copy-plugin.mjs. Edit the skill, not the agent file. -->
|
|
30
30
|
|
|
31
31
|
## Commits
|
|
32
32
|
|
|
@@ -172,7 +172,7 @@ Reason: Caused performance regression in production.
|
|
|
172
172
|
|
|
173
173
|
- [Sentry Commit Messages](https://develop.sentry.dev/engineering-practices/commit-messages/)
|
|
174
174
|
|
|
175
|
-
<!--
|
|
175
|
+
<!-- Generated from skills/pr-writer/SKILL.md by scripts/copy-plugin.mjs. Edit the skill, not the agent file. -->
|
|
176
176
|
|
|
177
177
|
## Pull requests
|
|
178
178
|
|
|
@@ -251,6 +251,7 @@ Use this structure for PR descriptions (ignoring any repository PR templates):
|
|
|
251
251
|
- Links to relevant issues or tickets
|
|
252
252
|
- Context that isn't obvious from the code
|
|
253
253
|
- Notes on specific areas that need careful review
|
|
254
|
+
- Visual evidence when it passes the gate in Visual Evidence below
|
|
254
255
|
|
|
255
256
|
### Step 4: Create the PR
|
|
256
257
|
|
|
@@ -321,6 +322,36 @@ Reference issues in the PR body:
|
|
|
321
322
|
| `Refs GH-1234` | Links without closing |
|
|
322
323
|
| `Refs LINEAR-ABC-123` | Links Linear issue |
|
|
323
324
|
|
|
325
|
+
## Visual Evidence
|
|
326
|
+
|
|
327
|
+
Default to none. Add a visual only when a reviewer would otherwise have to check out the branch to see the change, or when the text needs a paragraph to describe what one picture shows. One visual per PR is the norm; never add one to fill space.
|
|
328
|
+
|
|
329
|
+
| Change | Evidence |
|
|
330
|
+
|--------|----------|
|
|
331
|
+
| UI layout or styling | Screenshot, before/after when it changes existing UI |
|
|
332
|
+
| Interaction or animation | GIF, 15s or less |
|
|
333
|
+
| CLI/TUI output | Fenced text block with the real output, not a screenshot |
|
|
334
|
+
| New flow across 3+ components, or a changed state machine | Mermaid diagram |
|
|
335
|
+
| Refactor, config, deps, internal bug fix, tests | None |
|
|
336
|
+
|
|
337
|
+
Rules:
|
|
338
|
+
- Capture from the running app (Playwright for web, `ffmpeg` to turn a recording into a GIF). Never mock, edit or stage a screenshot.
|
|
339
|
+
- A Mermaid diagram shows the mechanism the PR adds or changes, not the whole system. GitHub renders ` ```mermaid ` blocks natively.
|
|
340
|
+
- Put each visual under the sentence it supports, with a one-line caption.
|
|
341
|
+
|
|
342
|
+
Hosting images: `gh` cannot upload attachments, so push them to an orphan `pr-assets` branch and link them. Never commit them to the PR branch.
|
|
343
|
+
|
|
344
|
+
```bash
|
|
345
|
+
B=$(git branch --show-current)
|
|
346
|
+
git fetch -q origin pr-assets:pr-assets 2>/dev/null || git branch pr-assets "$(git commit-tree "$(git mktree </dev/null)" -m 'chore: Start PR assets')"
|
|
347
|
+
d=$(mktemp -d); git worktree add -q "$d" pr-assets
|
|
348
|
+
mkdir -p "$d/$B"; cp shot.png "$d/$B/"
|
|
349
|
+
git -C "$d" add -A && git -C "$d" commit -qm "chore: Add PR assets for $B" && git -C "$d" push -q origin pr-assets
|
|
350
|
+
git worktree remove "$d"
|
|
351
|
+
```
|
|
352
|
+
|
|
353
|
+
Link as ``. This form also renders on private repos. For a video that must stay a video, leave the file path in your report and say the user has to drag it into the PR on GitHub.
|
|
354
|
+
|
|
324
355
|
## Guidelines
|
|
325
356
|
|
|
326
357
|
- **One PR per feature/fix** - Don't bundle unrelated changes
|
|
@@ -338,14 +369,10 @@ gh api -X PATCH repos/{owner}/{repo}/pulls/PR_NUMBER -f body="$(cat <<'EOF'
|
|
|
338
369
|
Updated description here
|
|
339
370
|
EOF
|
|
340
371
|
)"
|
|
341
|
-
```
|
|
342
372
|
|
|
343
|
-
```bash
|
|
344
373
|
# Update PR title
|
|
345
374
|
gh api -X PATCH repos/{owner}/{repo}/pulls/PR_NUMBER -f title='new: Title here'
|
|
346
|
-
```
|
|
347
375
|
|
|
348
|
-
```bash
|
|
349
376
|
# Update both
|
|
350
377
|
gh api -X PATCH repos/{owner}/{repo}/pulls/PR_NUMBER \
|
|
351
378
|
-f title='new: Title' \
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
import type { PaneSnapshot } from "../mods/agents/types.js";
|
|
2
|
+
|
|
3
|
+
const TICK_INTERVAL_MS = 1000;
|
|
4
|
+
const REFRESH_INTERVAL_MS = 5000;
|
|
5
|
+
const LIVE_STATUSES = new Set(["working", "starting", "needs_input"]);
|
|
6
|
+
|
|
7
|
+
export interface PaneTickerOptions {
|
|
8
|
+
now: () => number;
|
|
9
|
+
setInterval: (callback: () => void, milliseconds: number) => unknown;
|
|
10
|
+
clearInterval: (handle: unknown) => void;
|
|
11
|
+
invalidate: () => unknown;
|
|
12
|
+
refresh: () => unknown;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
export interface PaneTicker {
|
|
16
|
+
update(paneOpen: boolean, snapshot: PaneSnapshot | undefined): void;
|
|
17
|
+
refreshed(): void;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
/** Schedules pane redraws and refresh requests while any worker card is live. */
|
|
21
|
+
export function createPaneTicker(options: PaneTickerOptions): PaneTicker {
|
|
22
|
+
let running = false;
|
|
23
|
+
let handle: unknown;
|
|
24
|
+
let lastRefreshAt = 0;
|
|
25
|
+
|
|
26
|
+
const invoke = (action: () => unknown) => {
|
|
27
|
+
try {
|
|
28
|
+
void Promise.resolve(action()).catch(() => {});
|
|
29
|
+
} catch {
|
|
30
|
+
// Hook failures drop the drawing, so timer work must stay contained.
|
|
31
|
+
}
|
|
32
|
+
};
|
|
33
|
+
|
|
34
|
+
const tick = () => {
|
|
35
|
+
if (!running) return;
|
|
36
|
+
try {
|
|
37
|
+
invoke(options.invalidate);
|
|
38
|
+
const now = options.now();
|
|
39
|
+
if (!Number.isFinite(now) || now - lastRefreshAt < REFRESH_INTERVAL_MS) return;
|
|
40
|
+
lastRefreshAt = now;
|
|
41
|
+
invoke(options.refresh);
|
|
42
|
+
} catch {
|
|
43
|
+
// A failed timer callback must not escape into the hooks runtime.
|
|
44
|
+
}
|
|
45
|
+
};
|
|
46
|
+
|
|
47
|
+
const stop = () => {
|
|
48
|
+
if (!running) return;
|
|
49
|
+
running = false;
|
|
50
|
+
const currentHandle = handle;
|
|
51
|
+
handle = undefined;
|
|
52
|
+
try {
|
|
53
|
+
options.clearInterval(currentHandle);
|
|
54
|
+
} catch {
|
|
55
|
+
// Keep the module alive even if the timer host refuses a clear.
|
|
56
|
+
}
|
|
57
|
+
};
|
|
58
|
+
|
|
59
|
+
const start = () => {
|
|
60
|
+
if (running) return;
|
|
61
|
+
try {
|
|
62
|
+
const now = options.now();
|
|
63
|
+
if (!Number.isFinite(now)) return;
|
|
64
|
+
lastRefreshAt = now;
|
|
65
|
+
running = true;
|
|
66
|
+
handle = options.setInterval(tick, TICK_INTERVAL_MS);
|
|
67
|
+
} catch {
|
|
68
|
+
running = false;
|
|
69
|
+
handle = undefined;
|
|
70
|
+
}
|
|
71
|
+
};
|
|
72
|
+
|
|
73
|
+
const hasLiveRow = (snapshot: PaneSnapshot | undefined): boolean => {
|
|
74
|
+
try {
|
|
75
|
+
return (
|
|
76
|
+
snapshot !== undefined &&
|
|
77
|
+
Array.isArray(snapshot.rows) &&
|
|
78
|
+
snapshot.rows.some((row) => row != null && LIVE_STATUSES.has(row.status))
|
|
79
|
+
);
|
|
80
|
+
} catch {
|
|
81
|
+
return false;
|
|
82
|
+
}
|
|
83
|
+
};
|
|
84
|
+
|
|
85
|
+
return {
|
|
86
|
+
update(paneOpen, snapshot) {
|
|
87
|
+
if (paneOpen && hasLiveRow(snapshot)) {
|
|
88
|
+
start();
|
|
89
|
+
return;
|
|
90
|
+
}
|
|
91
|
+
stop();
|
|
92
|
+
},
|
|
93
|
+
refreshed() {
|
|
94
|
+
try {
|
|
95
|
+
const now = options.now();
|
|
96
|
+
if (Number.isFinite(now)) lastRefreshAt = now;
|
|
97
|
+
} catch {
|
|
98
|
+
// Keep the prior cadence if the injected clock fails.
|
|
99
|
+
}
|
|
100
|
+
},
|
|
101
|
+
};
|
|
102
|
+
}
|