@zeph-to/cli 2.1.1 → 2.3.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/README.md +44 -16
- package/dist/ask.d.ts +52 -0
- package/dist/ask.d.ts.map +1 -0
- package/dist/ask.js +165 -0
- package/dist/cli.js +7 -0
- package/dist/gate.d.ts +21 -0
- package/dist/gate.d.ts.map +1 -1
- package/dist/gate.js +75 -1
- package/dist/listener.d.ts +262 -4
- package/dist/listener.d.ts.map +1 -1
- package/dist/listener.js +0 -0
- package/dist/remote-agents.d.ts +12 -0
- package/dist/remote-agents.d.ts.map +1 -1
- package/dist/remote-agents.js +1 -0
- package/dist/remote-hook.d.ts.map +1 -1
- package/dist/remote-hook.js +61 -21
- package/dist/session-registry.d.ts +63 -0
- package/dist/session-registry.d.ts.map +1 -0
- package/dist/session-registry.js +110 -0
- package/dist/test-setup.d.ts +22 -0
- package/dist/test-setup.d.ts.map +1 -0
- package/dist/test-setup.js +29 -0
- package/dist/zeph-core.generated.d.ts +3 -3
- package/dist/zeph-core.generated.d.ts.map +1 -1
- package/dist/zeph-core.generated.js +3 -3
- package/package.json +1 -1
package/dist/listener.d.ts
CHANGED
|
@@ -51,12 +51,46 @@ interface AgentSession {
|
|
|
51
51
|
* client-side skip can never suppress a report the server would have
|
|
52
52
|
* treated as a change. Keep the field list in sync with the server.
|
|
53
53
|
*/
|
|
54
|
+
/**
|
|
55
|
+
* Sessions this machine has run and is not running now, as the phone's "past
|
|
56
|
+
* sessions" list.
|
|
57
|
+
*
|
|
58
|
+
* The list used to be derived on the phone from a page of recent pushes, which
|
|
59
|
+
* answered a different question than the one being asked: not "which sessions
|
|
60
|
+
* existed on this machine" but "what is in the newest fifty pushes". A busy day
|
|
61
|
+
* pushed real sessions out of that window while sessions the daemon had never
|
|
62
|
+
* recorded stayed in it — so the list and the resume button disagreed in both
|
|
63
|
+
* directions, offering rows that could not start and hiding rows that could.
|
|
64
|
+
*
|
|
65
|
+
* The registry is the machine's own answer to that question, and the same
|
|
66
|
+
* record resume reads, so a row that appears here is a row that can start.
|
|
67
|
+
*
|
|
68
|
+
* `cwd` is deliberately left behind. The registry keeps it because resume needs
|
|
69
|
+
* somewhere to start the agent; nothing off this machine needs a filesystem
|
|
70
|
+
* path, and sending one would hand the relay a map of the user's disk for no
|
|
71
|
+
* behaviour in return.
|
|
72
|
+
*
|
|
73
|
+
* Live sessions are excluded, which the phone would do anyway — but doing it
|
|
74
|
+
* here also keeps the payload still. Their `lastSeenAt` moves every sweep, and
|
|
75
|
+
* a field that changes every five seconds would defeat the report's
|
|
76
|
+
* unchanged-inventory gate and write to the device record all day.
|
|
77
|
+
*/
|
|
78
|
+
export declare const KNOWN_SESSIONS_REPORTED = 30;
|
|
79
|
+
export interface ReportedKnownSession {
|
|
80
|
+
name: string;
|
|
81
|
+
agentKind: string;
|
|
82
|
+
project?: string;
|
|
83
|
+
label?: string;
|
|
84
|
+
lastSeenAt: string;
|
|
85
|
+
}
|
|
86
|
+
export declare const knownSessionsToReport: (live: readonly AgentSession[], now?: number) => ReportedKnownSession[];
|
|
87
|
+
export declare const knownSessionsFingerprint: (known: ReportedKnownSession[]) => string;
|
|
54
88
|
export declare const sessionsFingerprint: (sessions: AgentSession[]) => string;
|
|
55
89
|
/** True when this cycle's inventory must be sent: it changed, or the
|
|
56
90
|
* idle heartbeat is due. */
|
|
57
91
|
export declare const sessionsReportDue: (fingerprint: string, lastSentFingerprint: string | null, lastSentAtMs: number, nowMs: number) => boolean;
|
|
58
92
|
export declare const AUTH_FAILURE_CODES: ReadonlySet<number>;
|
|
59
|
-
export declare const checkRateLimit: (session: string, now?: number) => boolean;
|
|
93
|
+
export declare const checkRateLimit: (session: string, now?: number, cost?: number) => boolean;
|
|
60
94
|
/** Read the foreground command in the named tmux session's active pane. */
|
|
61
95
|
export declare const paneCurrentCommand: (session: string) => string | null;
|
|
62
96
|
/**
|
|
@@ -159,6 +193,188 @@ export interface ScreenSnapshot {
|
|
|
159
193
|
* token bucket as command injection.
|
|
160
194
|
*/
|
|
161
195
|
export declare const handleScreenRequest: (req: ScreenRequest) => ScreenSnapshot | null;
|
|
196
|
+
/** Ceiling on one page of patch text. Shares the frame budget the pane
|
|
197
|
+
* snapshots use: a diff is routinely megabytes, so paging is in the contract
|
|
198
|
+
* from the start rather than bolted on later. */
|
|
199
|
+
export declare const DIFF_PAGE_MAX_BYTES: number;
|
|
200
|
+
export interface DiffFilesRequest {
|
|
201
|
+
subtype?: string;
|
|
202
|
+
targetDeviceId?: string;
|
|
203
|
+
sessionName?: string;
|
|
204
|
+
requestId?: string;
|
|
205
|
+
/** Seals the answer for this key when present, exactly as a stream frame is
|
|
206
|
+
* sealed for its subscriber. Absent = the caller has no device key. */
|
|
207
|
+
subscriberPublicKey?: string;
|
|
208
|
+
}
|
|
209
|
+
export interface DiffFileRequest extends DiffFilesRequest {
|
|
210
|
+
/** Repo-relative path of the file to read. The only caller-supplied value
|
|
211
|
+
* that reaches git, and only after the checks in resolveInRepo. */
|
|
212
|
+
path?: string;
|
|
213
|
+
/** Byte offset into this file's patch — paging, since one patch can dwarf
|
|
214
|
+
* the frame limit on its own. */
|
|
215
|
+
offset?: number;
|
|
216
|
+
}
|
|
217
|
+
export interface DiffFileEntry {
|
|
218
|
+
path: string;
|
|
219
|
+
/** Porcelain status letter: M, A, D, R, ? for untracked. */
|
|
220
|
+
status: string;
|
|
221
|
+
added: number;
|
|
222
|
+
removed: number;
|
|
223
|
+
}
|
|
224
|
+
/**
|
|
225
|
+
* Answer "what changed in this session's repo".
|
|
226
|
+
*
|
|
227
|
+
* Every argument is constant: the request contributes a session name, which
|
|
228
|
+
* selects a directory from the registry, and nothing else reaches git.
|
|
229
|
+
*/
|
|
230
|
+
export declare const handleDiffFilesRequest: (req: DiffFilesRequest, send: (data: Record<string, unknown>) => void) => boolean;
|
|
231
|
+
/**
|
|
232
|
+
* Answer one file's patch, one page at a time.
|
|
233
|
+
*
|
|
234
|
+
* The path is the only caller-supplied value that reaches git, and it reaches
|
|
235
|
+
* it as its own argv entry after `--`, having been resolved against the repo
|
|
236
|
+
* root and checked through symlinks first.
|
|
237
|
+
*/
|
|
238
|
+
export declare const handleDiffFileRequest: (req: DiffFileRequest, send: (data: Record<string, unknown>) => void) => boolean;
|
|
239
|
+
export interface SessionResumeRequest {
|
|
240
|
+
subtype?: string;
|
|
241
|
+
targetDeviceId?: string;
|
|
242
|
+
sessionName?: string;
|
|
243
|
+
requestId?: string;
|
|
244
|
+
}
|
|
245
|
+
export interface SessionResumeResult {
|
|
246
|
+
subtype: 'agent.session.resume.result';
|
|
247
|
+
requestId: string;
|
|
248
|
+
sessionName: string;
|
|
249
|
+
resumed?: true;
|
|
250
|
+
error?: string;
|
|
251
|
+
at: string;
|
|
252
|
+
}
|
|
253
|
+
/**
|
|
254
|
+
* Start a remembered session again, detached, and tell the phone what happened.
|
|
255
|
+
* Returns true when the message was ours to answer.
|
|
256
|
+
*
|
|
257
|
+
* The refusals are the design. Unknown name: not in the registry, so there is
|
|
258
|
+
* nothing to start and nothing to guess from. Missing directory: the project
|
|
259
|
+
* moved or was deleted, and starting an agent in the wrong place is worse than
|
|
260
|
+
* not starting one. Unknown agent kind: the record names an agent this build
|
|
261
|
+
* has no binary for — a wire enum outlives installs, and a guess here would be
|
|
262
|
+
* a command nobody chose. Already running: the session is live and the phone
|
|
263
|
+
* should be watching it, not replacing it.
|
|
264
|
+
*/
|
|
265
|
+
export declare const handleSessionResumeRequest: (req: SessionResumeRequest, send: (data: Record<string, unknown>) => void) => boolean;
|
|
266
|
+
export interface SessionExitRequest {
|
|
267
|
+
subtype?: string;
|
|
268
|
+
targetDeviceId?: string;
|
|
269
|
+
sessionName?: string;
|
|
270
|
+
requestId?: string;
|
|
271
|
+
}
|
|
272
|
+
export interface SessionExitResult {
|
|
273
|
+
subtype: 'agent.session.exit.result';
|
|
274
|
+
requestId: string;
|
|
275
|
+
sessionName: string;
|
|
276
|
+
exited?: true;
|
|
277
|
+
error?: string;
|
|
278
|
+
at: string;
|
|
279
|
+
}
|
|
280
|
+
/** Time given to each signal before the next one is tried. */
|
|
281
|
+
export declare const SESSION_EXIT_STEP_MS = 1500;
|
|
282
|
+
/**
|
|
283
|
+
* Ask a session to end, and report whether it did.
|
|
284
|
+
*
|
|
285
|
+
* Answers late on purpose: the whole point is to let the agent wind itself
|
|
286
|
+
* down, so the reply has to wait long enough to know whether it did. A session
|
|
287
|
+
* that is still there when the signals run out is reported as still there
|
|
288
|
+
* rather than forced — "I asked and it refused" is a true answer, and a phone
|
|
289
|
+
* that can silently destroy a working agent is a worse thing to have built.
|
|
290
|
+
*/
|
|
291
|
+
export declare const handleSessionExitRequest: (req: SessionExitRequest, send: (data: Record<string, unknown>) => void) => boolean;
|
|
292
|
+
/** Ceiling on one page. A page past the frame limit arrives truncated anyway,
|
|
293
|
+
* so let the caller ask for less rather than pay for a capture we discard. */
|
|
294
|
+
export declare const SCREEN_HISTORY_MAX_LINES = 200;
|
|
295
|
+
export interface ScreenHistoryRequest {
|
|
296
|
+
subtype?: string;
|
|
297
|
+
targetDeviceId?: string;
|
|
298
|
+
sessionName?: string;
|
|
299
|
+
requestId?: string;
|
|
300
|
+
/**
|
|
301
|
+
* How many lines of scrollback the caller already holds above the visible
|
|
302
|
+
* pane — the `historyLines` of its newest frame plus every history line it
|
|
303
|
+
* has pulled since. 0 asks for the page directly above the visible pane.
|
|
304
|
+
*
|
|
305
|
+
* The caller says this rather than the daemon assuming STREAM_CAPTURE_LINES,
|
|
306
|
+
* because the byte cap trims frames from the top and a caller holding fewer
|
|
307
|
+
* lines than the capture asked for would otherwise be handed a page that
|
|
308
|
+
* starts above its own content, with the gap unreachable forever after.
|
|
309
|
+
* Absent falls back to the constant — the untruncated case.
|
|
310
|
+
*/
|
|
311
|
+
before?: number;
|
|
312
|
+
/** Page size. Clamped to SCREEN_HISTORY_MAX_LINES. */
|
|
313
|
+
lines?: number;
|
|
314
|
+
}
|
|
315
|
+
export interface ScreenHistorySnapshot {
|
|
316
|
+
subtype: 'agent.screen.history.snapshot';
|
|
317
|
+
requestId: string;
|
|
318
|
+
sessionName: string;
|
|
319
|
+
content?: string;
|
|
320
|
+
/** Echo of the request's offset, so a caller with several pages in flight
|
|
321
|
+
* can tell which one this is. */
|
|
322
|
+
before?: number;
|
|
323
|
+
/** Lines actually returned — what the caller adds to `before` for the next
|
|
324
|
+
* page. Smaller than asked when the payload cap trimmed the page. */
|
|
325
|
+
lines?: number;
|
|
326
|
+
/** Whether older lines still exist above this page. */
|
|
327
|
+
hasMore?: boolean;
|
|
328
|
+
truncated?: boolean;
|
|
329
|
+
/** The page sealed for the stream's subscriber — present INSTEAD of
|
|
330
|
+
* `content` whenever the stream it belongs to is encrypted. */
|
|
331
|
+
encrypted?: EncryptedEphemeralPayload;
|
|
332
|
+
error?: string;
|
|
333
|
+
capturedAt: string;
|
|
334
|
+
}
|
|
335
|
+
/**
|
|
336
|
+
* Answer a phone's request for one page of scrollback above the live window.
|
|
337
|
+
* Returns true when the message was ours to answer, so the caller stops routing
|
|
338
|
+
* it; the reply goes out through `send`, after the seal when there is one.
|
|
339
|
+
*
|
|
340
|
+
* Same security posture as the one-shot peek it sits beside — addressed to this
|
|
341
|
+
* machine, only for sessions the inventory already exposes, charged to the same
|
|
342
|
+
* per-session token bucket, and reading the pane through tmux and nothing else —
|
|
343
|
+
* plus one the peek does not have: it answers ONLY under a live stream lease.
|
|
344
|
+
* That is what makes E2EE possible here. History is the same pane text the
|
|
345
|
+
* frames carry, so on an encrypted stream it is sealed for the same subscriber
|
|
346
|
+
* key and never falls back to plaintext; without a lease there is no key to
|
|
347
|
+
* seal for, and a pull that answered anyway would be the downgrade the stream
|
|
348
|
+
* half refuses.
|
|
349
|
+
*/
|
|
350
|
+
export declare const handleScreenHistoryRequest: (req: ScreenHistoryRequest, send: (data: Record<string, unknown>) => void) => boolean;
|
|
351
|
+
/**
|
|
352
|
+
* Translate the cursor into an index into the lines the frame carries.
|
|
353
|
+
*
|
|
354
|
+
* The visible pane is the tail of the capture, so the cursor's row counts back
|
|
355
|
+
* from the end — which also makes this correct after the byte cap has cut lines
|
|
356
|
+
* off the top. A cursor that falls outside what the frame carries returns null
|
|
357
|
+
* and simply is not drawn.
|
|
358
|
+
*/
|
|
359
|
+
export declare const cursorLineFor: (content: string, cursor: {
|
|
360
|
+
x: number;
|
|
361
|
+
y: number;
|
|
362
|
+
height: number;
|
|
363
|
+
}) => {
|
|
364
|
+
line: number;
|
|
365
|
+
col: number;
|
|
366
|
+
} | null;
|
|
367
|
+
/**
|
|
368
|
+
* How many of a frame's lines are scrollback rather than the visible pane.
|
|
369
|
+
*
|
|
370
|
+
* This is the number the viewer hands back as `before` when it asks for
|
|
371
|
+
* history. STREAM_CAPTURE_LINES is only what the capture ASKED for: the byte
|
|
372
|
+
* cap trims from the top, and a coloured TUI pane hits that cap routinely, so
|
|
373
|
+
* assuming the viewer holds the full window would start the first history page
|
|
374
|
+
* above what it actually has — leaving a gap no later page can reach, since
|
|
375
|
+
* every later page walks further up.
|
|
376
|
+
*/
|
|
377
|
+
export declare const historyLinesIn: (content: string, paneHeight: number) => number;
|
|
162
378
|
/**
|
|
163
379
|
* After the phone injects keys, push fresh frames instead of waiting for its
|
|
164
380
|
* next screen request — the phone's post-tap re-pull raced the key landing
|
|
@@ -182,6 +398,7 @@ export interface StreamControl {
|
|
|
182
398
|
*/
|
|
183
399
|
renew?: boolean;
|
|
184
400
|
}
|
|
401
|
+
export declare const STREAM_CAPTURE_LINES = 200;
|
|
185
402
|
export declare const STREAM_INTERVAL_MS = 400;
|
|
186
403
|
export declare const BURST_INTERVAL_MS = 120;
|
|
187
404
|
export declare const BURST_WINDOW_MS = 2500;
|
|
@@ -224,6 +441,23 @@ export type StreamFramePayload = {
|
|
|
224
441
|
/** Stream incarnation (stats.startedAt) — lets the receiver reset its
|
|
225
442
|
* seq high-water mark when the daemon restarts the stream. */
|
|
226
443
|
epoch?: number;
|
|
444
|
+
/** Where to draw the cursor: a 0-based index into the lines this frame
|
|
445
|
+
* carries, and a 0-based CELL column (not a string index — a wide glyph
|
|
446
|
+
* spans two cells, which is what the viewer positions by). Absent when the
|
|
447
|
+
* cursor is outside the captured region. Deliberately outside the E2EE
|
|
448
|
+
* envelope, like sessionName and seq: a coordinate without the text it
|
|
449
|
+
* points into says nothing, and keeping it in the clear means the viewer
|
|
450
|
+
* can place the cursor before the pane content finishes decrypting. */
|
|
451
|
+
cursorLine?: number;
|
|
452
|
+
cursorCol?: number;
|
|
453
|
+
/** How many of this frame's lines are scrollback rather than the visible
|
|
454
|
+
* pane — what the viewer sends back as `before` when it pulls history.
|
|
455
|
+
* Fewer than STREAM_CAPTURE_LINES whenever the byte cap trimmed the frame,
|
|
456
|
+
* which is exactly the case a constant would get wrong. Absent when the
|
|
457
|
+
* pane geometry could not be read; the viewer then falls back to the
|
|
458
|
+
* constant. Plaintext for the same reason the cursor is: a line count
|
|
459
|
+
* without the lines says nothing. */
|
|
460
|
+
historyLines?: number;
|
|
227
461
|
/** Plaintext pane content — only on unencrypted streams. */
|
|
228
462
|
content?: string;
|
|
229
463
|
/** E2EE envelope — replaces `content` on encrypted streams. */
|
|
@@ -261,7 +495,13 @@ export declare const isStreamCapReached: (activeCount: number) => boolean;
|
|
|
261
495
|
export declare const buildStreamFrame: (captured: {
|
|
262
496
|
content: string;
|
|
263
497
|
truncated: boolean;
|
|
264
|
-
}, sessionName: string, subscriberPublicKey?: string
|
|
498
|
+
}, sessionName: string, subscriberPublicKey?: string, meta?: {
|
|
499
|
+
cursor?: {
|
|
500
|
+
line: number;
|
|
501
|
+
col: number;
|
|
502
|
+
} | null;
|
|
503
|
+
historyLines?: number;
|
|
504
|
+
}) => Promise<StreamFramePayload | null>;
|
|
265
505
|
/**
|
|
266
506
|
* Handle agent.stream.start / agent.stream.stop. Returns true when the message
|
|
267
507
|
* was a stream-control message (so the caller skips the one-shot screen-peek
|
|
@@ -282,10 +522,20 @@ export interface AgentCommandInput {
|
|
|
282
522
|
* Treat it as an ordering namespace, never as authentication — the worst
|
|
283
523
|
* a forged id buys is a different reorder lane for its own keystrokes. */
|
|
284
524
|
deviceId?: string;
|
|
285
|
-
/** Named keys, ALLOWED_KEYS-validated. Mutually exclusive with `body`. */
|
|
525
|
+
/** Named keys, ALLOWED_KEYS-validated. Mutually exclusive with `body`/`insert`. */
|
|
286
526
|
keys?: string[];
|
|
287
527
|
/** Literal text; the injector appends the Enter, as on the REST path. */
|
|
288
528
|
body?: string;
|
|
529
|
+
/**
|
|
530
|
+
* Literal text delivered WITHOUT the submitting Enter — the phone
|
|
531
|
+
* answering a y/n prompt, or typing half a command so a TUI menu opens.
|
|
532
|
+
*
|
|
533
|
+
* A separate field rather than a `submit: false` flag on `body`, and that
|
|
534
|
+
* is the whole point: a daemon too old to know this field sees no `body`
|
|
535
|
+
* either, so it injects nothing. The flag spelling would have had the old
|
|
536
|
+
* daemon submit text the user never meant to send.
|
|
537
|
+
*/
|
|
538
|
+
insert?: string;
|
|
289
539
|
/** Sender's monotonic counter, and the incarnation it counts within. */
|
|
290
540
|
seq?: number;
|
|
291
541
|
epoch?: number;
|
|
@@ -316,6 +566,9 @@ type ValidatedInput = SequencedInput & {
|
|
|
316
566
|
/** Exactly one of these is set. */
|
|
317
567
|
tokens: string[] | null;
|
|
318
568
|
text: string | null;
|
|
569
|
+
/** Whether `text` carries its own submit. False for `insert` (and, vacuously,
|
|
570
|
+
* for a key batch — the keys say for themselves what they are). */
|
|
571
|
+
submit: boolean;
|
|
319
572
|
};
|
|
320
573
|
type InputCheck = {
|
|
321
574
|
ok: true;
|
|
@@ -400,14 +653,19 @@ interface PushItem {
|
|
|
400
653
|
/** Named keys (Esc/arrows/Enter) to inject instead of body text —
|
|
401
654
|
* drives full-screen modals the phone can't escape with text. */
|
|
402
655
|
keys?: string[];
|
|
656
|
+
/** Literal text delivered WITHOUT the submitting Enter (see the same field
|
|
657
|
+
* on AgentCommandInput for why it is a field and not a flag). */
|
|
658
|
+
insert?: string;
|
|
403
659
|
/** Optional image/file attachments (agent.command only, plaintext). */
|
|
404
660
|
files?: PushFileAttachment[];
|
|
405
661
|
}
|
|
406
662
|
interface HandlePushDeps {
|
|
407
663
|
paneCommand?: (session: string) => string | null;
|
|
408
664
|
inject?: (session: string, text: string) => boolean;
|
|
665
|
+
/** Paste-only sibling of `inject` — text without the submitting Enter. */
|
|
666
|
+
insertText?: (session: string, text: string) => boolean;
|
|
409
667
|
sendKeys?: (session: string, tokens: string[]) => boolean;
|
|
410
|
-
rateLimit?: (session: string) => boolean;
|
|
668
|
+
rateLimit?: (session: string, now?: number, cost?: number) => boolean;
|
|
411
669
|
now?: () => number;
|
|
412
670
|
/** Injectable for tests; defaults to the REST-backed downloader. */
|
|
413
671
|
downloadAttachments?: (pushId: string, files: PushFileAttachment[]) => Promise<string[]>;
|
package/dist/listener.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"listener.d.ts","sourceRoot":"","sources":["../src/listener.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAoBH,OAAO,EAA2B,KAAK,SAAS,EAAE,KAAK,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AACzG,OAAO,EAAiD,KAAK,UAAU,EAA4C,MAAM,kBAAkB,CAAC;AAE5I,OAAO,EAA4E,KAAK,yBAAyB,EAAE,MAAM,aAAa,CAAC;AACvI,OAAO,EAA6C,KAAK,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAmCtG,eAAO,MAAM,2BAA2B,QAAS,CAAC;AAElD,UAAU,YAAY;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,OAAO,CAAC;IAClB,SAAS,EAAE,SAAS,CAAC;IACrB,cAAc,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB;;;;;OAKG;IACH,KAAK,CAAC,EAAE,UAAU,CAAC;IACnB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,WAAW,CAAC,EAAE,MAAM,CAAC;CACxB;AAED;;;;;;GAMG;AACH,eAAO,MAAM,mBAAmB,GAAI,UAAU,YAAY,EAAE,KAAG,MAS7C,CAAC;AAEnB;6BAC6B;AAC7B,eAAO,MAAM,iBAAiB,GAC1B,aAAa,MAAM,EACnB,qBAAqB,MAAM,GAAG,IAAI,EAClC,cAAc,MAAM,EACpB,OAAO,MAAM,KACd,OAEoD,CAAC;AAYxD,eAAO,MAAM,kBAAkB,EAAE,WAAW,CAAC,MAAM,CAA+B,CAAC;AAenF,eAAO,MAAM,cAAc,GAAI,SAAS,MAAM,EAAE,MAAK,MAAmB,KAAG,OAgB1E,CAAC;AAEF,2EAA2E;AAC3E,eAAO,MAAM,kBAAkB,GAAI,SAAS,MAAM,KAAG,MAAM,GAAG,IAO7D,CAAC;AAyCF;;;;;GAKG;AACH,eAAO,MAAM,WAAW,GAAI,MAAM,MAAM,EAAE,KAAG,MAAM,EAAE,GAAG,IAQvD,CAAC;AA0CF;;;;;;;GAOG;AACH,eAAO,MAAM,yBAAyB,QAAO,IAG5C,CAAC;AA8NF;;;;;;GAMG;AACH,eAAO,MAAM,gBAAgB,GAAI,MAAM,MAAM,KAAG;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,GAAG,IAK3F,CAAC;AAEF,UAAU,QAAQ;IACd,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;CAC1B;AAiDD;;;;;;;;;GASG;AACH,eAAO,MAAM,iBAAiB,GAAI,MAAM,QAAQ,KAAG,qBAAqB,GAAG,IAGhE,CAAC;AA0BZ,iBAAiB;AACjB,eAAO,MAAM,kBAAkB,QAAO,IAErC,CAAC;AAWF;;;;;;;;GAQG;AACH,eAAO,MAAM,kBAAkB,GAC3B,MAAM,MAAM,EACZ,WAAW,SAAS,EACpB,UAAU,MAAM,GAAG,IAAI,EACvB,MAAK,MAAmB,KACzB,IAAI,CAAC,YAAY,EAAE,OAAO,GAAG,gBAAgB,GAAG,aAAa,CAmB/D,CAAC;AAWF,MAAM,WAAW,YAAY;IACzB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;CACnB;AASD,8EAA8E;AAC9E,eAAO,MAAM,iBAAiB,GAAI,KAAK,OAAO,KAAG,IAWhD,CAAC;AAEF,iBAAiB;AACjB,eAAO,MAAM,mBAAmB,QAAO,IAGtC,CAAC;AAEF,MAAM,WAAW,QAAQ;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;CACvB;AAED;;;GAGG;AACH,eAAO,MAAM,gBAAgB,GACzB,WAAW,WAAW,CAAC,MAAM,CAAC,EAC9B,UAAS,CAAC,OAAO,EAAE,MAAM,KAAK,MAAM,GAAG,IAAsB,KAC9D,QAAQ,EAgBV,CAAC;AAWF,MAAM,WAAW,aAAa;IAC1B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,cAAc;IAC3B,OAAO,EAAE,uBAAuB,CAAC;IACjC,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;CACtB;AAED;;;;;;;;;GASG;AACH,eAAO,MAAM,mBAAmB,GAAI,KAAK,aAAa,KAAG,cAAc,GAAG,IAmBzE,CAAC;AAyCF;;;;;;;;GAQG;AACH,eAAO,MAAM,uBAAuB,GAChC,aAAa,MAAM,EACnB,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,EAC7C,SAAQ,MAAM,EAA8B,KAC7C,IAuBF,CAAC;AAcF,MAAM,WAAW,aAAa;IAC1B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,6EAA6E;IAC7E,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B;;;;OAIG;IACH,KAAK,CAAC,EAAE,OAAO,CAAC;CACnB;AASD,eAAO,MAAM,kBAAkB,MAAM,CAAC;AAKtC,eAAO,MAAM,iBAAiB,MAAM,CAAC;AACrC,eAAO,MAAM,eAAe,OAAQ,CAAC;AAOrC,eAAO,MAAM,kBAAkB,IAAI,CAAC;AAEpC;;;;;;GAMG;AACH,eAAO,MAAM,aAAa,GAAI,aAAa,MAAM,GAAG,IAAI,EAAE,KAAK,MAAM,KAAG,MACgC,CAAC;AAEzG,0DAA0D;AAC1D,MAAM,WAAW,WAAW;IACxB,eAAe,EAAE,MAAM,CAAC;IACxB,IAAI,EAAE,MAAM,CAAC;CAChB;AAED;;;;GAIG;AACH;;gEAEgE;AAChE,eAAO,MAAM,cAAc,GAAI,QAAQ,WAAW,EAAE,KAAK,MAAM,KAAG,OAGxB,CAAC;AAE3C,eAAO,MAAM,cAAc,GAAI,QAAQ,WAAW,EAAE,KAAK,MAAM,KAAG,OAYjE,CAAC;AAqBF,eAAO,MAAM,eAAe,QAAS,CAAC;AAMtC,eAAO,MAAM,sBAAsB,IAAI,CAAC;AA6GxC,eAAO,MAAM,UAAU,GAAI,aAAa,MAAM,KAAG,IAuBhD,CAAC;AAEF,eAAO,MAAM,cAAc,QAAO,IAGjC,CAAC;AAEF,oFAAoF;AACpF,MAAM,MAAM,kBAAkB,GAAG;IAC7B,OAAO,EAAE,oBAAoB,CAAC;IAC9B,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,OAAO,CAAC;IACnB,4EAA4E;IAC5E,GAAG,CAAC,EAAE,MAAM,CAAC;IACb;mEAC+D;IAC/D,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,4DAA4D;IAC5D,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,+DAA+D;IAC/D,SAAS,CAAC,EAAE,yBAAyB,CAAC;CACzC,CAAC;AAEF;;;gDAGgD;AAChD,MAAM,MAAM,gBAAgB,GAAG;IAC3B,OAAO,EAAE,oBAAoB,CAAC;IAC9B,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,iBAAiB,GAAG,kBAAkB,GAAG,gBAAgB,GAAG,cAAc,GAAG,aAAa,GAAG,gBAAgB,CAAC;IACrH;;+EAE2E;IAC3E,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;;sEAEkE;IAClE,aAAa,CAAC,EAAE,MAAM,CAAC;CAC1B,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,kBAAkB,GAAI,aAAa,MAAM,KAAG,OAChB,CAAC;AAqC1C;;;;;GAKG;AACH,eAAO,MAAM,gBAAgB,GACzB,UAAU;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,OAAO,CAAA;CAAE,EACjD,aAAa,MAAM,EACnB,sBAAsB,MAAM,KAC7B,OAAO,CAAC,kBAAkB,GAAG,IAAI,CAenC,CAAC;AAEF;;;;GAIG;AASH,eAAO,MAAM,mBAAmB,GAC5B,KAAK,aAAa,EAClB,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,KAC9C,OA8NF,CAAC;AAWF;;;uBAGuB;AACvB,MAAM,WAAW,iBAAiB;IAC9B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;;;+EAI2E;IAC3E,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,0EAA0E;IAC1E,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,yEAAyE;IACzE,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,wEAAwE;IACxE,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;;;;;kFAK8E;IAC9E,SAAS,CAAC,EAAE,OAAO,CAAC;CACvB;AAED;;8DAE8D;AAC9D,eAAO,MAAM,cAAc,KAAK,CAAC;AACjC;;uDAEuD;AACvD,eAAO,MAAM,oBAAoB,OAAO,CAAC;AAEzC,kFAAkF;AAClF,KAAK,aAAa,GAAG,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,CAAC;AAE7D,+BAA+B;AAC/B,KAAK,cAAc,GAAG,cAAc,GAAG;IACnC,WAAW,EAAE,MAAM,CAAC;IACpB;kEAC8D;IAC9D,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,mCAAmC;IACnC,MAAM,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;IACxB,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;CACvB,CAAC;AAOF,KAAK,UAAU,GAAG;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,KAAK,EAAE,cAAc,CAAA;CAAE,GAAG;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAuCtF;;;GAGG;AACH,eAAO,MAAM,oBAAoB,GAAI,KAAK,iBAAiB,KAAG,UA4B7D,CAAC;AAoBF;;;6DAG6D;AAC7D,eAAO,MAAM,eAAe,KAAK,CAAC;AA6ClC;;;;sDAIsD;AACtD,eAAO,MAAM,oBAAoB,KAAK,CAAC;AAEvC,2EAA2E;AAC3E,eAAO,MAAM,oBAAoB,QAAO,OAAO,CAAC,IAAI,CAAsB,CAAC;AA4G3E;;;;;GAKG;AACH,eAAO,MAAM,kBAAkB,GAC3B,KAAK,iBAAiB,EACtB,MAAM,aAAa,KACpB,OAqCF,CAAC;AAEF,MAAM,WAAW,aAAa;IAC1B,QAAQ,EAAE,YAAY,EAAE,CAAC;IACzB,0EAA0E;IAC1E,QAAQ,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CACrD;AAED;;;;;GAKG;AACH,eAAO,MAAM,sBAAsB,QAAO,aAiEzC,CAAC;AAEF;;;;;;;;GAQG;AACH,eAAO,MAAM,eAAe,QAAO,YAAY,EAAuC,CAAC;AAIvF;;;;;GAKG;AACH,UAAU,kBAAkB;IACxB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,YAAY,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,UAAU,QAAQ;IACd,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,wEAAwE;IACxE,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B;sEACkE;IAClE,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,uEAAuE;IACvE,KAAK,CAAC,EAAE,kBAAkB,EAAE,CAAC;CAChC;AAED,UAAU,cAAc;IACpB,WAAW,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,MAAM,GAAG,IAAI,CAAC;IACjD,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC;IACpD,QAAQ,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,OAAO,CAAC;IAC1D,SAAS,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC;IACzC,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;IACnB,oEAAoE;IACpE,mBAAmB,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,kBAAkB,EAAE,KAAK,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IACzF,+DAA+D;IAC/D,OAAO,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,MAAM,GAAG,IAAI,CAAC;IAC7C;sEACkE;IAClE,cAAc,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;CAC9C;AA2BD;;;;;;;GAOG;AACH,eAAO,MAAM,iBAAiB,GAC1B,SAAS,MAAM,EACf,MAAM,MAAM,EACZ,MAAK,MAAM,MAAiB,KAC7B,OAUF,CAAC;AA0CF,eAAO,MAAM,oBAAoB,GAAI,KAAK;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,KAAG,IAE/E,CAAC;AA2FF;;;;GAIG;AACH,eAAO,MAAM,aAAa,GACtB,MAAK,MAAmB,EACxB,MAAK,MAAwB,EAC7B,MAAK,MAA0B,KAChC,MAaF,CAAC;AAEF;;;;;;;;GAQG;AACH,eAAO,MAAM,UAAU,GACnB,MAAM,QAAQ,EACd,OAAM,cAAmB,KAC1B,OAAO,CAAC,OAAO,CAoCjB,CAAC;AAcF,eAAO,MAAM,cAAc,GAAI,SAAS,MAAM,KAAG,MAIhD,CAAC;AA4DF,eAAO,MAAM,uBAAuB,GAAI,OAAO,MAAM,KAAG,MA2BvD,CAAC;AAsPF;;;;;;;GAOG;AACH,eAAO,MAAM,YAAY,GACrB,MAAM,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,EACtC,QAAQ;IAAE,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,EAC1B,SAAS,MAAM,KAChB,MAAM,GAAG,IAIX,CAAC;AA0DF,eAAO,MAAM,cAAc,GAAU,MAAM,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,KAAG,OAAO,CAAC,MAAM,CAsI3F,CAAC"}
|
|
1
|
+
{"version":3,"file":"listener.d.ts","sourceRoot":"","sources":["../src/listener.ts"],"names":[],"mappings":"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"}
|
package/dist/listener.js
CHANGED
|
Binary file
|
package/dist/remote-agents.d.ts
CHANGED
|
@@ -7,6 +7,17 @@ export interface RemoteAgent {
|
|
|
7
7
|
binary: string;
|
|
8
8
|
/** `zeph <subcommand>` aliases that launch this agent. */
|
|
9
9
|
subcommands: readonly string[];
|
|
10
|
+
/**
|
|
11
|
+
* What this agent is typed to make it quit, if it has such a command.
|
|
12
|
+
*
|
|
13
|
+
* Signals are not enough on their own: Claude Code holds its prompt
|
|
14
|
+
* through both `C-c` and `C-d`, so a remote "end this session" built only
|
|
15
|
+
* out of key presses reports failure against the agent people actually
|
|
16
|
+
* run. Omitted where the command has not been verified against the real
|
|
17
|
+
* binary — sending a guess into a live pane types it at whatever prompt
|
|
18
|
+
* is there.
|
|
19
|
+
*/
|
|
20
|
+
quitCommand?: string;
|
|
10
21
|
/** Extra pane_command basenames accepted as this agent (beyond binary). */
|
|
11
22
|
paneMatchAliases?: readonly string[];
|
|
12
23
|
/**
|
|
@@ -48,6 +59,7 @@ declare const REMOTE_AGENT_TABLE: readonly [{
|
|
|
48
59
|
readonly displayName: "Claude Code";
|
|
49
60
|
readonly binary: "claude";
|
|
50
61
|
readonly subcommands: readonly ["cc", "claude"];
|
|
62
|
+
readonly quitCommand: "/exit";
|
|
51
63
|
readonly resolveSessionId: (paneCwd: string, panePid: number | undefined) => string | null;
|
|
52
64
|
}, {
|
|
53
65
|
readonly kind: "codex";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"remote-agents.d.ts","sourceRoot":"","sources":["../src/remote-agents.ts"],"names":[],"mappings":"AAoBA,MAAM,WAAW,WAAW;IACxB,qEAAqE;IACrE,IAAI,EAAE,MAAM,CAAC;IACb,kCAAkC;IAClC,WAAW,EAAE,MAAM,CAAC;IACpB,2EAA2E;IAC3E,MAAM,EAAE,MAAM,CAAC;IACf,0DAA0D;IAC1D,WAAW,EAAE,SAAS,MAAM,EAAE,CAAC;IAC/B,2EAA2E;IAC3E,gBAAgB,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACrC;;;;;OAKG;IACH,gBAAgB,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,KAAK,MAAM,GAAG,IAAI,CAAC;CAC3E;AAyCD;;;;;;;GAOG;AACH,eAAO,MAAM,qBAAqB,GAAI,KAAK,MAAM,KAAG,MAAM,GAAG,IAiB5D,CAAC;AAaF,UAAU,gBAAgB;IACtB,GAAG,EAAE,MAAM,CAAC;IACZ,SAAS,EAAE,MAAM,CAAC;IAClB,GAAG,EAAE,MAAM,CAAC;CACf;AA4ED,4CAA4C;AAC5C,MAAM,WAAW,cAAc;IAC3B,OAAO,CAAC,EAAE,gBAAgB,EAAE,CAAC;IAC7B,WAAW,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;CAC7B;AAED;;;;;GAKG;AACH,eAAO,MAAM,0BAA0B,GACnC,SAAS,MAAM,EACf,SAAS,MAAM,GAAG,IAAI,EACtB,OAAM,cAAmB,KAC1B,MAAM,GAAG,IAOX,CAAC;AAIF,QAAA,MAAM,kBAAkB
|
|
1
|
+
{"version":3,"file":"remote-agents.d.ts","sourceRoot":"","sources":["../src/remote-agents.ts"],"names":[],"mappings":"AAoBA,MAAM,WAAW,WAAW;IACxB,qEAAqE;IACrE,IAAI,EAAE,MAAM,CAAC;IACb,kCAAkC;IAClC,WAAW,EAAE,MAAM,CAAC;IACpB,2EAA2E;IAC3E,MAAM,EAAE,MAAM,CAAC;IACf,0DAA0D;IAC1D,WAAW,EAAE,SAAS,MAAM,EAAE,CAAC;IAC/B;;;;;;;;;OASG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,2EAA2E;IAC3E,gBAAgB,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACrC;;;;;OAKG;IACH,gBAAgB,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,KAAK,MAAM,GAAG,IAAI,CAAC;CAC3E;AAyCD;;;;;;;GAOG;AACH,eAAO,MAAM,qBAAqB,GAAI,KAAK,MAAM,KAAG,MAAM,GAAG,IAiB5D,CAAC;AAaF,UAAU,gBAAgB;IACtB,GAAG,EAAE,MAAM,CAAC;IACZ,SAAS,EAAE,MAAM,CAAC;IAClB,GAAG,EAAE,MAAM,CAAC;CACf;AA4ED,4CAA4C;AAC5C,MAAM,WAAW,cAAc;IAC3B,OAAO,CAAC,EAAE,gBAAgB,EAAE,CAAC;IAC7B,WAAW,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;CAC7B;AAED;;;;;GAKG;AACH,eAAO,MAAM,0BAA0B,GACnC,SAAS,MAAM,EACf,SAAS,MAAM,GAAG,IAAI,EACtB,OAAM,cAAmB,KAC1B,MAAM,GAAG,IAOX,CAAC;AAIF,QAAA,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;;;;;EAmCmB,CAAC;AAE5C,kGAAkG;AAClG,MAAM,MAAM,SAAS,GAAG,CAAC,OAAO,kBAAkB,CAAC,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC;AAEpE,8FAA8F;AAC9F,MAAM,MAAM,qBAAqB,GAAG,WAAW,GAAG;IAAE,IAAI,EAAE,SAAS,CAAA;CAAE,CAAC;AAEtE,eAAO,MAAM,aAAa,EAAE,SAAS,qBAAqB,EAAuB,CAAC;AAElF,eAAO,MAAM,qBAAqB,GAAI,KAAK,MAAM,KAAG,qBAAqB,GAAG,SAClB,CAAC;AAE3D,eAAO,MAAM,uBAAuB,GAAI,MAAM,MAAM,KAAG,qBAAqB,GAAG,SAG9E,CAAC"}
|
package/dist/remote-agents.js
CHANGED
|
@@ -189,6 +189,7 @@ const REMOTE_AGENT_TABLE = [
|
|
|
189
189
|
displayName: 'Claude Code',
|
|
190
190
|
binary: 'claude',
|
|
191
191
|
subcommands: ['cc', 'claude'],
|
|
192
|
+
quitCommand: '/exit',
|
|
192
193
|
// Exact pid-tree match first; mtime heuristic only as fallback
|
|
193
194
|
// (older CC without ~/.claude/sessions, or ps failure).
|
|
194
195
|
resolveSessionId: (paneCwd, panePid) => (panePid !== undefined ? (0, exports.detectClaudeSessionIdByPid)(panePid, paneCwd) : null)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"remote-hook.d.ts","sourceRoot":"","sources":["../src/remote-hook.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"remote-hook.d.ts","sourceRoot":"","sources":["../src/remote-hook.ts"],"names":[],"mappings":"AAqCA;wEACwE;AACxE,eAAO,MAAM,kBAAkB,8BAA+B,CAAC;AAC/D,MAAM,MAAM,eAAe,GAAG,CAAC,OAAO,kBAAkB,CAAC,CAAC,MAAM,CAAC,CAAC;AAoClE,eAAO,MAAM,iBAAiB,GAAI,KAAK,MAAM,KAAG,GAAG,IAAI,eACE,CAAC;AAE1D;;;GAGG;AACH,eAAO,MAAM,aAAa,GACxB,OAAO,eAAe,EACtB,OAAO,MAAM,EACb,MAAK,MAAM,CAAC,UAAwB,EACpC,MAAK,MAAM,MAAiB,KAC3B,MAAM,GAAG,IAoCX,CAAC"}
|
package/dist/remote-hook.js
CHANGED
|
@@ -16,10 +16,17 @@ exports.runRemoteHook = exports.isRemoteHookAgent = exports.REMOTE_HOOK_AGENTS =
|
|
|
16
16
|
* sticky REMOTE mode (Rule 9).
|
|
17
17
|
*
|
|
18
18
|
* Detection is exact: a terminal keystroke racing a phone message can
|
|
19
|
-
* never false-match.
|
|
20
|
-
*
|
|
21
|
-
*
|
|
22
|
-
*
|
|
19
|
+
* never false-match. Parity with the writer (listener.ts writeRemoteMarker)
|
|
20
|
+
* is by construction — both sides share gate.ts remoteDigest/remoteMarkerPath.
|
|
21
|
+
*
|
|
22
|
+
* The marker is one-shot, but REMOTE is not. A user who answers from the
|
|
23
|
+
* phone and then types at the terminal produces turns with no marker and no
|
|
24
|
+
* zeph_ask result, and that is exactly where the mode used to run out of
|
|
25
|
+
* evidence. So entry also records the mode (gate.ts touchRemoteActive) and
|
|
26
|
+
* every later prompt re-reads it and re-states it in one sentence.
|
|
27
|
+
*
|
|
28
|
+
* No marker and no live state → null (silent no-op); this hook only ever adds
|
|
29
|
+
* context and must never block a prompt.
|
|
23
30
|
*/
|
|
24
31
|
const fs_1 = require("fs");
|
|
25
32
|
const gate_js_1 = require("./gate.js");
|
|
@@ -46,6 +53,15 @@ This user message arrived from the user's phone via Zeph agent chat (verified by
|
|
|
46
53
|
const ONE_WAY_CONTEXT = `# System note (Zeph remote-origin detect)
|
|
47
54
|
|
|
48
55
|
This user message arrived from the user's phone via Zeph agent chat (verified by the listener — exact text match), but ZEPH_HOOK_ID is not set, so two-way tools (zeph_ask/zeph_prompt/zeph_input) are unavailable. Make your final message self-contained — the completion push is the user's only feedback channel. If you have not already mentioned it this session, tell the user once that running \`npx @zeph-to/cli setup\` upgrades this into a two-way remote session (buttons + text replies from the phone).`;
|
|
56
|
+
/**
|
|
57
|
+
* Every later turn of a session already in REMOTE. Deliberately one sentence:
|
|
58
|
+
* this goes out on EVERY prompt of a remote session, so anything longer would
|
|
59
|
+
* spend per-turn what the rule text spends once. Kept in step with the wording
|
|
60
|
+
* in plugin/hooks/zeph-remote.sh.
|
|
61
|
+
*/
|
|
62
|
+
const STICKY_CONTEXT = `# System note (Zeph)
|
|
63
|
+
|
|
64
|
+
This session is still in sticky REMOTE mode — the user has been driving it from their phone and may not be at the terminal to read this. End this response with \`zeph_ask\` (CORE_RULES Rule 9).`;
|
|
49
65
|
const isRemoteHookAgent = (raw) => exports.REMOTE_HOOK_AGENTS.includes(raw);
|
|
50
66
|
exports.isRemoteHookAgent = isRemoteHookAgent;
|
|
51
67
|
/**
|
|
@@ -63,27 +79,57 @@ const runRemoteHook = (agent, stdin, env = process.env, now = Date.now) => {
|
|
|
63
79
|
catch {
|
|
64
80
|
return null;
|
|
65
81
|
}
|
|
66
|
-
|
|
82
|
+
// `prompt` is only needed to match a marker; a session already in REMOTE
|
|
83
|
+
// gets its reminder either way. `cwd` keys every state file, so without it
|
|
84
|
+
// there is nothing to look up.
|
|
85
|
+
if (!cwd)
|
|
67
86
|
return null;
|
|
68
|
-
// Mute outranks everything (Rule 12) — stay silent and leave the marker
|
|
69
|
-
//
|
|
87
|
+
// Mute outranks everything (Rule 12) — stay silent and leave both the marker
|
|
88
|
+
// and the state untouched (the next inject overwrites the marker anyway).
|
|
70
89
|
if ((0, gate_js_1.isMuted)(cwd))
|
|
71
90
|
return null;
|
|
91
|
+
const emit = (additionalContext) => JSON.stringify({
|
|
92
|
+
hookSpecificOutput: { hookEventName: HOOK_EVENT_NAME[agent], additionalContext },
|
|
93
|
+
});
|
|
94
|
+
// Exactly one additionalContext per invocation: entry wins over the
|
|
95
|
+
// reminder, because on the entry turn the reminder would say strictly less.
|
|
96
|
+
if (matchesRemoteMarker(prompt, cwd, now)) {
|
|
97
|
+
if (!env.ZEPH_HOOK_ID)
|
|
98
|
+
return emit(ONE_WAY_CONTEXT);
|
|
99
|
+
// Only a two-way session has a mode to stay in — without zeph_ask there is
|
|
100
|
+
// nothing for a later turn to be reminded of, so no state is recorded.
|
|
101
|
+
(0, gate_js_1.touchRemoteActive)(cwd, now);
|
|
102
|
+
return emit(TWO_WAY_CONTEXT);
|
|
103
|
+
}
|
|
104
|
+
if (env.ZEPH_HOOK_ID && (0, gate_js_1.isRemoteActive)(cwd, now))
|
|
105
|
+
return emit(STICKY_CONTEXT);
|
|
106
|
+
return null;
|
|
107
|
+
};
|
|
108
|
+
exports.runRemoteHook = runRemoteHook;
|
|
109
|
+
/**
|
|
110
|
+
* True when this prompt is the phone injection the listener recorded.
|
|
111
|
+
* Consumes the marker on a match, deletes it once stale, and otherwise leaves
|
|
112
|
+
* it in place so a prompt that simply isn't the injected one can still match
|
|
113
|
+
* on a later turn.
|
|
114
|
+
*/
|
|
115
|
+
const matchesRemoteMarker = (prompt, cwd, now) => {
|
|
116
|
+
if (!prompt)
|
|
117
|
+
return false;
|
|
72
118
|
const hash = (0, gate_js_1.projectHash)(cwd);
|
|
73
119
|
if (!hash)
|
|
74
|
-
return
|
|
120
|
+
return false;
|
|
75
121
|
const marker = (0, gate_js_1.remoteMarkerPath)(hash);
|
|
76
122
|
let content;
|
|
77
123
|
try {
|
|
78
124
|
content = (0, fs_1.readFileSync)(marker, 'utf-8');
|
|
79
125
|
}
|
|
80
126
|
catch {
|
|
81
|
-
return
|
|
127
|
+
return false;
|
|
82
128
|
}
|
|
83
129
|
// Marker format: "<epochSec> <sha256hex>\n" (listener.ts writeRemoteMarker).
|
|
84
130
|
const record = content.match(/^(\d+) ([0-9a-f]{64})\n?$/);
|
|
85
131
|
if (!record)
|
|
86
|
-
return
|
|
132
|
+
return false;
|
|
87
133
|
if (Math.floor(now() / 1000) - Number(record[1]) > FRESH_WINDOW_SEC) {
|
|
88
134
|
// Stale markers are dead weight (can never flag) — delete on sight.
|
|
89
135
|
try {
|
|
@@ -92,24 +138,18 @@ const runRemoteHook = (agent, stdin, env = process.env, now = Date.now) => {
|
|
|
92
138
|
catch {
|
|
93
139
|
/* best-effort housekeeping */
|
|
94
140
|
}
|
|
95
|
-
return
|
|
141
|
+
return false;
|
|
96
142
|
}
|
|
97
143
|
if ((0, gate_js_1.remoteDigest)(prompt) !== record[2])
|
|
98
|
-
return
|
|
144
|
+
return false;
|
|
99
145
|
// Matched — consume the marker so an identical later prompt (e.g. typed
|
|
100
|
-
// at the terminal) can't re-flag.
|
|
146
|
+
// at the terminal) can't re-flag. Housekeeping is not the verdict: the
|
|
147
|
+
// match is valid whether or not the delete lands.
|
|
101
148
|
try {
|
|
102
149
|
(0, fs_1.unlinkSync)(marker);
|
|
103
150
|
}
|
|
104
151
|
catch {
|
|
105
152
|
/* emit anyway — the match itself is valid */
|
|
106
153
|
}
|
|
107
|
-
|
|
108
|
-
return JSON.stringify({
|
|
109
|
-
hookSpecificOutput: {
|
|
110
|
-
hookEventName: HOOK_EVENT_NAME[agent],
|
|
111
|
-
additionalContext: ctx,
|
|
112
|
-
},
|
|
113
|
-
});
|
|
154
|
+
return true;
|
|
114
155
|
};
|
|
115
|
-
exports.runRemoteHook = runRemoteHook;
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* What a session WAS, kept so it can be started again.
|
|
3
|
+
*
|
|
4
|
+
* tmux is the only record of a live session, and it forgets one the moment it
|
|
5
|
+
* ends — which is exactly when the phone wants it back. So the listener writes
|
|
6
|
+
* down what it saw while the session was alive: where it ran and which agent it
|
|
7
|
+
* ran, keyed by the tmux name the phone already addresses it by.
|
|
8
|
+
*
|
|
9
|
+
* This file is the whitelist that makes remote resume safe. A resume request
|
|
10
|
+
* carries a session NAME and nothing else; the directory and the binary come
|
|
11
|
+
* from here, from what this machine observed itself. Nothing a phone (or a
|
|
12
|
+
* relay posing as one) sends can point the daemon at another directory or
|
|
13
|
+
* another program.
|
|
14
|
+
*/
|
|
15
|
+
export interface KnownSession {
|
|
16
|
+
/** tmux session name — the key the phone addresses. */
|
|
17
|
+
name: string;
|
|
18
|
+
/** Pane cwd while it was alive. Where a resume starts the agent again. */
|
|
19
|
+
cwd: string;
|
|
20
|
+
/** RemoteAgent `kind` (claude/codex/…), resolved to a binary at resume time. */
|
|
21
|
+
agentKind: string;
|
|
22
|
+
project?: string;
|
|
23
|
+
label?: string;
|
|
24
|
+
/** Last time this machine saw the session running. */
|
|
25
|
+
lastSeenAt: string;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Ceiling on remembered sessions. tmux names come from a small reused pool
|
|
29
|
+
* (`zeph-<project>`, `-2`, …), so this holds far more distinct projects than it
|
|
30
|
+
* looks; the cap only stops the file from growing without bound on a machine
|
|
31
|
+
* that has run agents for years.
|
|
32
|
+
*/
|
|
33
|
+
export declare const MAX_KNOWN_SESSIONS = 100;
|
|
34
|
+
/** Forgotten after this long unseen — a directory from months ago is more
|
|
35
|
+
* likely to have moved than to be what the user meant. */
|
|
36
|
+
export declare const KNOWN_SESSION_TTL_MS: number;
|
|
37
|
+
/** Sessions this machine has seen, newest first, expired ones dropped. */
|
|
38
|
+
export declare const knownSessions: (now?: number) => KnownSession[];
|
|
39
|
+
/** One remembered session, or null when this machine never saw that name. */
|
|
40
|
+
export declare const recallSession: (name: string, now?: number) => KnownSession | null;
|
|
41
|
+
/**
|
|
42
|
+
* Write down the sessions running right now, replacing what was known about
|
|
43
|
+
* each. Called from the inventory sweep, so the record follows a session that
|
|
44
|
+
* moves directory or changes agent rather than pinning its first sighting.
|
|
45
|
+
*
|
|
46
|
+
* A session with no readable cwd is skipped rather than remembered without
|
|
47
|
+
* one: an entry that cannot say where to start the agent is not a resume
|
|
48
|
+
* target, only a row that would fail when tapped.
|
|
49
|
+
*/
|
|
50
|
+
export declare const rememberSessions: (live: Array<{
|
|
51
|
+
name: string;
|
|
52
|
+
cwd: string | null;
|
|
53
|
+
agentKind: string;
|
|
54
|
+
project?: string | null;
|
|
55
|
+
label?: string | null;
|
|
56
|
+
}>, now?: number) => void;
|
|
57
|
+
/** Whether the registry knows this name — the resume whitelist check. */
|
|
58
|
+
export declare const isKnownSession: (name: string, now?: number) => boolean;
|
|
59
|
+
/** Test seam: the file this module reads and writes. */
|
|
60
|
+
export declare const knownSessionsPath: () => string;
|
|
61
|
+
/** True when the recorded directory still exists to start an agent in. */
|
|
62
|
+
export declare const sessionDirectoryExists: (entry: KnownSession) => boolean;
|
|
63
|
+
//# sourceMappingURL=session-registry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session-registry.d.ts","sourceRoot":"","sources":["../src/session-registry.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAMH,MAAM,WAAW,YAAY;IACzB,uDAAuD;IACvD,IAAI,EAAE,MAAM,CAAC;IACb,0EAA0E;IAC1E,GAAG,EAAE,MAAM,CAAC;IACZ,gFAAgF;IAChF,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,sDAAsD;IACtD,UAAU,EAAE,MAAM,CAAC;CACtB;AAED;;;;;GAKG;AACH,eAAO,MAAM,kBAAkB,MAAM,CAAC;AACtC;2DAC2D;AAC3D,eAAO,MAAM,oBAAoB,QAA2B,CAAC;AAsC7D,0EAA0E;AAC1E,eAAO,MAAM,aAAa,GAAI,MAAK,MAAmB,KAAG,YAAY,EAGJ,CAAC;AAElE,6EAA6E;AAC7E,eAAO,MAAM,aAAa,GAAI,MAAM,MAAM,EAAE,MAAK,MAAmB,KAAG,YAAY,GAAG,IAC3B,CAAC;AAE5D;;;;;;;;GAQG;AACH,eAAO,MAAM,gBAAgB,GACzB,MAAM,KAAK,CAAC;IACR,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACzB,CAAC,EACF,MAAK,MAAmB,KACzB,IAmBF,CAAC;AAEF,yEAAyE;AACzE,eAAO,MAAM,cAAc,GAAI,MAAM,MAAM,EAAE,MAAK,MAAmB,KAAG,OACnC,CAAC;AAEtC,wDAAwD;AACxD,eAAO,MAAM,iBAAiB,QA1FL,MA0FoB,CAAC;AAE9C,0EAA0E;AAC1E,eAAO,MAAM,sBAAsB,GAAI,OAAO,YAAY,KAAG,OAAgC,CAAC"}
|