sessionpipe 0.6.1 → 0.7.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.
@@ -0,0 +1,15 @@
1
+ export interface Alias {
2
+ /** The harness's own session id. */
3
+ id: string;
4
+ /** The folder the session runs in (the start's). */
5
+ cwd: string;
6
+ at: string;
7
+ }
8
+ export type Aliases = Record<string, Alias>;
9
+ export declare const aliasFile: (controlDir: string) => string;
10
+ export declare function readAliases(file: string): Aliases;
11
+ /** Written whole and renamed into place, 0600 in a 0700 folder. */
12
+ export declare function writeAliases(file: string, all: Aliases): void;
13
+ /** The command's id a harness's own session goes by, or null when it was never renamed. */
14
+ export declare function receiverIdOf(all: Aliases, harness: string, id: string): string | null;
15
+ //# sourceMappingURL=aliases.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"aliases.d.ts","sourceRoot":"","sources":["../../src/control/aliases.ts"],"names":[],"mappings":"AAeA,MAAM,WAAW,KAAK;IACpB,oCAAoC;IACpC,EAAE,EAAE,MAAM,CAAC;IACX,oDAAoD;IACpD,GAAG,EAAE,MAAM,CAAC;IACZ,EAAE,EAAE,MAAM,CAAC;CACZ;AACD,MAAM,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;AAE5C,eAAO,MAAM,SAAS,GAAI,YAAY,MAAM,KAAG,MAA+C,CAAC;AAE/F,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAcjD;AAED,mEAAmE;AACnE,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,GAAG,IAAI,CAQ7D;AAED,2FAA2F;AAC3F,wBAAgB,YAAY,CAAC,GAAG,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAIrF"}
@@ -1 +1 @@
1
- {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../../src/control/cli.ts"],"names":[],"mappings":"AAKA,OAAO,EAA2D,KAAK,IAAI,EAAe,MAAM,mBAAmB,CAAC;AAiBpH,eAAO,MAAM,YAAY,2YAGkE,CAAC;AA+B5F,wBAAsB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,MAAM,KAAK,IAAI,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CA2H3G;AAED,2EAA2E;AAC3E,wBAAgB,gBAAgB,CAAC,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE;IAAE,OAAO,CAAC,EAAE,OAAO,CAAA;CAAE,CAAC,GAAG,MAAM,EAAE,CAK3F;AA2GD,wBAAsB,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,MAAM,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CASvF;AAED;;oCAEoC;AACpC,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,QAAQ,GAAG,OAAO,CASjH"}
1
+ {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../../src/control/cli.ts"],"names":[],"mappings":"AAKA,OAAO,EASL,KAAK,IAAI,EAEV,MAAM,mBAAmB,CAAC;AAiB3B,eAAO,MAAM,YAAY,2YAGkE,CAAC;AAiC5F,wBAAsB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,MAAM,KAAK,IAAI,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CA2H3G;AAED,2EAA2E;AAC3E,wBAAgB,gBAAgB,CAAC,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE;IAAE,OAAO,CAAC,EAAE,OAAO,CAAA;CAAE,CAAC,GAAG,MAAM,EAAE,CAK3F;AA+GD,wBAAsB,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,MAAM,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CASvF;AAED;;oCAEoC;AACpC,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,QAAQ,GAAG,OAAO,CASjH"}
@@ -1,8 +1,6 @@
1
- import { claudeControl } from "@sessionpipe/core";
1
+ import { claudeControl, type Login, type RunOptions, type RunResult } from "@sessionpipe/core";
2
2
  import { type ControlConfig, type PairedReceiver } from "./store.js";
3
3
  type Caps = claudeControl.Caps;
4
- type RunResult = claudeControl.RunResult;
5
- type Login = claudeControl.Login;
6
4
  /** The message as the receiver carried it (control.json). */
7
5
  export interface Carried {
8
6
  id: string;
@@ -54,12 +52,16 @@ export interface DaemonDeps {
54
52
  bin: string;
55
53
  caps: Caps;
56
54
  } | null;
57
- run: (bin: string, args: string[], o: {
58
- cwd: string;
59
- env: NodeJS.ProcessEnv;
60
- timeoutMs?: number;
61
- onLine?: (line: string) => void;
62
- }) => Promise<RunResult>;
55
+ /** Codex CLI's `codex` and Antigravity's `agy` on this machine (null: not installed).
56
+ * Absent: this daemon doesn't drive that harness. */
57
+ codex?: () => string | null;
58
+ agy?: () => string | null;
59
+ /** Is Codex signed in as this process sees it? Asked before a run. */
60
+ codexLogin?: (bin: string) => Promise<Login>;
61
+ /** The harnesses every hello advertises (core's drivableHarnesses); by default, the
62
+ * ones the finders above find. */
63
+ harnesses?: () => string[];
64
+ run: (bin: string, args: string[], o: RunOptions) => Promise<RunResult>;
63
65
  sdk?: SdkHost | null;
64
66
  /** How long to follow a live session's turn for an in-place answer (tests shorten it). */
65
67
  answerWaitMs?: number;
@@ -177,6 +179,12 @@ export declare class ControlDaemon {
177
179
  /** Every open local connection: stop() ends them, or the server's close would wait
178
180
  * on a client that never says anything. */
179
181
  private readonly conns;
182
+ /** Codex and Antigravity sessions the daemon started, under the start's id (aliases.ts). */
183
+ private aliases;
184
+ /** Starts in hand, by the session they name, from the moment they arrive: a prompt
185
+ * for that session that came in the same poll waits for its start rather than
186
+ * finding no session (2026-10-04: a start and a prompt queued back to back). */
187
+ private readonly startsPending;
180
188
  constructor(cfg: ControlConfig, dir: string, sock: string, deps: DaemonDeps);
181
189
  start(): Promise<void>;
182
190
  /** `leaveSocket`: the socket path is another daemon's now. Closing a Unix-socket
@@ -221,9 +229,26 @@ export declare class ControlDaemon {
221
229
  private flushing;
222
230
  private flushAcks;
223
231
  handle(r: PairedReceiver, m: Carried): Promise<void>;
232
+ private handleVerified;
224
233
  /** Where the session lives, and whether its folder is allowed — read from the
225
- * session's own transcript (Claude Code) or the hooks' cwd, never the command. */
234
+ * session's own transcript (Claude Code, Codex), the folder its start recorded, or
235
+ * the hooks' cwd, never the command. */
226
236
  private place;
237
+ /** A Codex or Antigravity session: one the daemon started is its alias (the harness's
238
+ * id and the start's folder); one the hooks reported is Codex's rollout (its
239
+ * `session_meta` cwd) or, for Antigravity, the folder its hooks gave. */
240
+ private placeDriven;
241
+ /** The folder the worker recorded for a session from its hooks (run.ts, facts). */
242
+ private factsCwd;
243
+ private aliasOf;
244
+ /** The harness revealed its own id for a session the command named: from now on that
245
+ * is where the command's id leads (aliases.ts). Written before anything else reads it. */
246
+ private setAlias;
247
+ /** `<harness>:<harness's id>` → `<harness>:<the start's id>` for a session the daemon named. */
248
+ private named;
249
+ private driver;
250
+ /** The harnesses this machine can run a message in, for hello. */
251
+ private harnesses;
227
252
  private allowed;
228
253
  private permission;
229
254
  private cancel;
@@ -236,6 +261,18 @@ export declare class ControlDaemon {
236
261
  /** Null when Claude Code is signed in for this account (or can't say); otherwise what
237
262
  * to tell the person. */
238
263
  private loginProblem;
264
+ /** One harness account's login, asked at most every 10 minutes (30 s after a no). */
265
+ private signedIn;
266
+ /** Null when a Codex or Antigravity run may go ahead; otherwise what to tell the person. */
267
+ private drivenProblem;
268
+ /** A Codex or Antigravity session's next message: a headless turn resumed under the
269
+ * harness's own id, after any run of the daemon's own that holds it. */
270
+ private resumeDriven;
271
+ /** Run one Codex or Antigravity turn and ack it: `progress` as its answer grows, then
272
+ * `delivered` (mode `resume`) with the reply. The moment the harness names the session
273
+ * — a start's new one, or a fresh one for an id it didn't know — the command's id
274
+ * becomes its alias, so the next message resumes it. */
275
+ private drive;
239
276
  private headless;
240
277
  private outcome;
241
278
  private addKey;
@@ -258,6 +295,9 @@ export declare class ControlDaemon {
258
295
  private slot;
259
296
  private startSession;
260
297
  private startOne;
298
+ /** A new Codex or Antigravity session: the harness picks its id, and the start's id
299
+ * becomes its name (aliases.ts) as soon as the run says what it picked. */
300
+ private startDriven;
261
301
  private closeIdleSdk;
262
302
  }
263
303
  export {};
@@ -1 +1 @@
1
- {"version":3,"file":"daemon.d.ts","sourceRoot":"","sources":["../../src/control/daemon.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"daemon.d.ts","sourceRoot":"","sources":["../../src/control/daemon.ts"],"names":[],"mappings":"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"}
@@ -14,6 +14,8 @@ export interface PairOptions {
14
14
  env?: NodeJS.ProcessEnv;
15
15
  /** Called with a sessions key the receiver handed over at pairing. */
16
16
  addSink?: (token: string) => void;
17
+ /** The harnesses this machine can run a message in (default: those installed here). */
18
+ harnesses?: string[];
17
19
  }
18
20
  export declare function discover(url: string, f: typeof fetch): Promise<{
19
21
  control: string;
@@ -1 +1 @@
1
- {"version":3,"file":"pair.d.ts","sourceRoot":"","sources":["../../src/control/pair.ts"],"names":[],"mappings":"AAYA,OAAO,EACL,KAAK,aAAa,EAMnB,MAAM,YAAY,CAAC;AAKpB,MAAM,WAAW,WAAW;IAC1B,GAAG,EAAE,MAAM,CAAC;IACZ;;8CAE0C;IAC1C,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IACzB,KAAK,CAAC,EAAE,OAAO,KAAK,CAAC;IACrB,KAAK,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACtC,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;IACxB,sEAAsE;IACtE,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;CACnC;AAUD,wBAAsB,QAAQ,CAC5B,GAAG,EAAE,MAAM,EACX,CAAC,EAAE,OAAO,KAAK,GACd,OAAO,CAAC;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,CAAC,CAkBlF;AAED,uFAAuF;AACvF,wBAAsB,IAAI,CAAC,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,aAAa,CAAC,CA+FjE;AAED,gFAAgF;AAChF,wBAAsB,GAAG,CAAC,CAAC,EAAE;IAC3B,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IACzB,KAAK,CAAC,EAAE,OAAO,KAAK,CAAC;IACrB,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;CACzB,iCAaA;AAED,wBAAgB,SAAS,CAAC,EAAE,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,GAAG,MAAM,CAWrE;AAOD;;qFAEqF;AACrF,wBAAgB,YAAY,CAAC,CAAC,EAAE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE;;;;;;;;;EAsC3F;AAED,MAAM,MAAM,IAAI,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,MAAM,CAAC;AAI3D;;;uEAGuE;AACvE,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,GAAE,IAAgB,GAAG;IAAE,EAAE,EAAE,OAAO,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAiBhG;AAED,oFAAoF;AACpF,wBAAgB,cAAc,CAAC,CAAC,EAAE;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;IACxB,IAAI,CAAC,EAAE,IAAI,CAAC;IACZ,QAAQ,CAAC,EAAE,MAAM,CAAC,QAAQ,CAAC;CAC5B,GAAG,MAAM,CAqCT;AAED,wBAAgB,gBAAgB,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,GAAG,IAAI,CAiB9D"}
1
+ {"version":3,"file":"pair.d.ts","sourceRoot":"","sources":["../../src/control/pair.ts"],"names":[],"mappings":"AAaA,OAAO,EACL,KAAK,aAAa,EAMnB,MAAM,YAAY,CAAC;AAKpB,MAAM,WAAW,WAAW;IAC1B,GAAG,EAAE,MAAM,CAAC;IACZ;;8CAE0C;IAC1C,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IACzB,KAAK,CAAC,EAAE,OAAO,KAAK,CAAC;IACrB,KAAK,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACtC,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;IACxB,sEAAsE;IACtE,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,uFAAuF;IACvF,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;CACtB;AAUD,wBAAsB,QAAQ,CAC5B,GAAG,EAAE,MAAM,EACX,CAAC,EAAE,OAAO,KAAK,GACd,OAAO,CAAC;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,CAAC,CAkBlF;AAED,uFAAuF;AACvF,wBAAsB,IAAI,CAAC,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,aAAa,CAAC,CA+FjE;AAED,gFAAgF;AAChF,wBAAsB,GAAG,CAAC,CAAC,EAAE;IAC3B,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IACzB,KAAK,CAAC,EAAE,OAAO,KAAK,CAAC;IACrB,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;CACzB,iCAaA;AAED,wBAAgB,SAAS,CAAC,EAAE,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,GAAG,MAAM,CAWrE;AAOD;;qFAEqF;AACrF,wBAAgB,YAAY,CAAC,CAAC,EAAE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE;;;;;;;;;EAsC3F;AAED,MAAM,MAAM,IAAI,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,MAAM,CAAC;AAI3D;;;uEAGuE;AACvE,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,GAAE,IAAgB,GAAG;IAAE,EAAE,EAAE,OAAO,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAiBhG;AAED,oFAAoF;AACpF,wBAAgB,cAAc,CAAC,CAAC,EAAE;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;IACxB,IAAI,CAAC,EAAE,IAAI,CAAC;IACZ,QAAQ,CAAC,EAAE,MAAM,CAAC,QAAQ,CAAC;CAC5B,GAAG,MAAM,CAqCT;AAED,wBAAgB,gBAAgB,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,GAAG,IAAI,CAiB9D"}
@@ -10,9 +10,9 @@ export interface SessionView {
10
10
  midTurn: boolean;
11
11
  /** A live process holds the session (registry entry or a fresh transcript write). */
12
12
  live: boolean;
13
- /** The transcript exists on this machine. */
13
+ /** The transcript exists on this machine (Codex, Antigravity: the session was placed). */
14
14
  known: boolean;
15
- /** This Claude Code can copy a session (`--fork-session`). */
15
+ /** This Claude Code can copy a session (`--fork-session`); no other harness can. */
16
16
  canFork: boolean;
17
17
  /** The harness has an input API (OpenCode, Codex app-server) — none is wired yet. */
18
18
  api: boolean;
@@ -24,6 +24,9 @@ export type Route = {
24
24
  } | {
25
25
  refused: "no_session";
26
26
  };
27
+ /** The harnesses the daemon can run a turn of by itself: resume an idle session, start a
28
+ * new one (`claude -p`, `codex exec`, `agy -p`). */
29
+ export declare const HEADLESS: Set<string>;
27
30
  /** Where a prompt (or a start) goes. Never two writers on one transcript: a live
28
31
  * session gets a fork, never a resume. */
29
32
  export declare function routePrompt(s: SessionView): Route;
@@ -1 +1 @@
1
- {"version":3,"file":"route.d.ts","sourceRoot":"","sources":["../../src/control/route.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AAE7D,MAAM,MAAM,YAAY,GAAG,KAAK,GAAG,QAAQ,GAAG,MAAM,GAAG,KAAK,GAAG,QAAQ,GAAG,MAAM,CAAC;AAEjF,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,qEAAqE;IACrE,GAAG,EAAE,OAAO,CAAC;IACb,2DAA2D;IAC3D,MAAM,EAAE,OAAO,CAAC;IAChB,oEAAoE;IACpE,OAAO,EAAE,OAAO,CAAC;IACjB,qFAAqF;IACrF,IAAI,EAAE,OAAO,CAAC;IACd,6CAA6C;IAC7C,KAAK,EAAE,OAAO,CAAC;IACf,8DAA8D;IAC9D,OAAO,EAAE,OAAO,CAAC;IACjB,qFAAqF;IACrF,GAAG,EAAE,OAAO,CAAC;CACd;AAED,MAAM,MAAM,KAAK,GAAG;IAAE,IAAI,EAAE,YAAY,CAAA;CAAE,GAAG;IAAE,WAAW,EAAE,MAAM,CAAA;CAAE,GAAG;IAAE,OAAO,EAAE,YAAY,CAAA;CAAE,CAAC;AAEjG;2CAC2C;AAC3C,wBAAgB,WAAW,CAAC,CAAC,EAAE,WAAW,GAAG,KAAK,CAUjD;AAED,2EAA2E;AAC3E,wBAAgB,QAAQ,CACtB,IAAI,EAAE,WAAW,EACjB,OAAO,EAAE,MAAM,GACd,QAAQ,GAAG,YAAY,GAAG,QAAQ,GAAG,OAAO,GAAG;IAAE,WAAW,EAAE,MAAM,CAAA;CAAE,CAaxE;AAED;+BAC+B;AAC/B;;qFAEqF;AACrF,eAAO,MAAM,eAAe,6KACgJ,CAAC;AAE7K,wBAAgB,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAM5D;AAED;;;;mDAImD;AACnD,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAMjE"}
1
+ {"version":3,"file":"route.d.ts","sourceRoot":"","sources":["../../src/control/route.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AAE7D,MAAM,MAAM,YAAY,GAAG,KAAK,GAAG,QAAQ,GAAG,MAAM,GAAG,KAAK,GAAG,QAAQ,GAAG,MAAM,CAAC;AAEjF,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,qEAAqE;IACrE,GAAG,EAAE,OAAO,CAAC;IACb,2DAA2D;IAC3D,MAAM,EAAE,OAAO,CAAC;IAChB,oEAAoE;IACpE,OAAO,EAAE,OAAO,CAAC;IACjB,qFAAqF;IACrF,IAAI,EAAE,OAAO,CAAC;IACd,0FAA0F;IAC1F,KAAK,EAAE,OAAO,CAAC;IACf,oFAAoF;IACpF,OAAO,EAAE,OAAO,CAAC;IACjB,qFAAqF;IACrF,GAAG,EAAE,OAAO,CAAC;CACd;AAED,MAAM,MAAM,KAAK,GAAG;IAAE,IAAI,EAAE,YAAY,CAAA;CAAE,GAAG;IAAE,WAAW,EAAE,MAAM,CAAA;CAAE,GAAG;IAAE,OAAO,EAAE,YAAY,CAAA;CAAE,CAAC;AAEjG;qDACqD;AACrD,eAAO,MAAM,QAAQ,aAAmD,CAAC;AAEzE;2CAC2C;AAC3C,wBAAgB,WAAW,CAAC,CAAC,EAAE,WAAW,GAAG,KAAK,CAejD;AAED,2EAA2E;AAC3E,wBAAgB,QAAQ,CACtB,IAAI,EAAE,WAAW,EACjB,OAAO,EAAE,MAAM,GACd,QAAQ,GAAG,YAAY,GAAG,QAAQ,GAAG,OAAO,GAAG;IAAE,WAAW,EAAE,MAAM,CAAA;CAAE,CAaxE;AAED;+BAC+B;AAC/B;;qFAEqF;AACrF,eAAO,MAAM,eAAe,6KACgJ,CAAC;AAE7K,wBAAgB,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAM5D;AAED;;;;mDAImD;AACnD,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAMjE"}
package/dist/hook.js CHANGED
@@ -1,5 +1,5 @@
1
1
  #!/usr/bin/env node
2
- // sessionpipe 0.6.1 · Apache-2.0 · https://sessionpipe.org
2
+ // sessionpipe 0.7.0 · Apache-2.0 · https://sessionpipe.org
3
3
 
4
4
  // src/hook.ts
5
5
  import { spawn } from "node:child_process";
package/dist/index.js CHANGED
@@ -1,4 +1,4 @@
1
- // sessionpipe 0.6.1 · Apache-2.0 · https://sessionpipe.org
1
+ // sessionpipe 0.7.0 · Apache-2.0 · https://sessionpipe.org
2
2
 
3
3
  // src/http-sink.ts
4
4
  import { createHash, createHmac } from "node:crypto";
@@ -92,16 +92,16 @@ var HttpSink = class {
92
92
  import {
93
93
  appendFileSync as appendFileSync3,
94
94
  existsSync as existsSync8,
95
- mkdirSync as mkdirSync7,
95
+ mkdirSync as mkdirSync8,
96
96
  readdirSync as readdirSync6,
97
- readFileSync as readFileSync8,
98
- renameSync as renameSync2,
97
+ readFileSync as readFileSync9,
98
+ renameSync as renameSync3,
99
99
  statSync as statSync5,
100
100
  unlinkSync as unlinkSync4,
101
- writeFileSync as writeFileSync6
101
+ writeFileSync as writeFileSync7
102
102
  } from "node:fs";
103
103
  import os3 from "node:os";
104
- import path12 from "node:path";
104
+ import path13 from "node:path";
105
105
 
106
106
  // ../core/src/adapters/antigravity.ts
107
107
  import {
@@ -289,6 +289,9 @@ function readClaude(lines, from) {
289
289
  }
290
290
  return pairTurns(msgs, endOf(lines));
291
291
  }
292
+ function codexInjected(text) {
293
+ return /^<[a-z_-]+>/i.test(text) || /^# AGENTS\.md instructions\b/i.test(text);
294
+ }
292
295
  function readCodex(lines, from) {
293
296
  const msgs = [];
294
297
  for (let i = from; i < lines.length; i++) {
@@ -300,7 +303,7 @@ function readCodex(lines, from) {
300
303
  const text = textParts(p.content, ["input_text", "output_text"]).trim();
301
304
  if (!text) continue;
302
305
  if (p.role === "user") {
303
- if (/^<[a-z_-]+>/i.test(text)) continue;
306
+ if (codexInjected(text)) continue;
304
307
  msgs.push({ role: "user", text, at, line: i });
305
308
  } else if (p.role === "assistant") msgs.push({ role: "assistant", text, at, line: i });
306
309
  }
@@ -1538,7 +1541,8 @@ function uninstallNotify(env) {
1538
1541
  }
1539
1542
  return { file, changed: false };
1540
1543
  }
1541
- function findRollout(threadId, env) {
1544
+ function findRollout(threadId, env = process.env) {
1545
+ if (!/^[A-Za-z0-9-]{8,128}$/.test(threadId)) return null;
1542
1546
  let best = null;
1543
1547
  const walk = (dir, depth) => {
1544
1548
  let names = [];
@@ -1549,7 +1553,7 @@ function findRollout(threadId, env) {
1549
1553
  }
1550
1554
  for (const n of names.sort().reverse()) {
1551
1555
  const p = path6.join(dir, n);
1552
- if (n.endsWith(".jsonl") && n.includes(threadId)) {
1556
+ if (n.endsWith(`-${threadId}.jsonl`)) {
1553
1557
  best = p;
1554
1558
  return;
1555
1559
  }
@@ -1754,7 +1758,7 @@ function codexFacts(file) {
1754
1758
  const p = j.payload;
1755
1759
  if (j.type !== "response_item" || !p || p.type !== "message" || p.role !== "user") continue;
1756
1760
  const text = (p.content ?? []).filter((b) => b && b.type === "input_text" && typeof b.text === "string").map((b) => b.text).join("\n").trim();
1757
- if (!text || /^<[a-z_-]+>/i.test(text)) continue;
1761
+ if (!text || codexInjected(text)) continue;
1758
1762
  const line = text.split("\n").find((l) => l.trim()) ?? "";
1759
1763
  out.title = line.length > 80 ? `${line.slice(0, 80).replace(/\s+\S*$/, "")}\u2026` : line;
1760
1764
  out.title_source = "first-ask";
@@ -2576,14 +2580,39 @@ var StdoutSink = class {
2576
2580
  }
2577
2581
  };
2578
2582
 
2583
+ // src/control/aliases.ts
2584
+ import { chmodSync as chmodSync2, mkdirSync as mkdirSync7, readFileSync as readFileSync8, renameSync as renameSync2, writeFileSync as writeFileSync6 } from "node:fs";
2585
+ import path11 from "node:path";
2586
+ var aliasFile = (controlDir) => path11.join(controlDir, "aliases.json");
2587
+ function readAliases(file) {
2588
+ try {
2589
+ const j = JSON.parse(readFileSync8(file, "utf8"));
2590
+ if (!j || typeof j !== "object" || Array.isArray(j)) return {};
2591
+ const out = {};
2592
+ for (const [k, v] of Object.entries(j)) {
2593
+ const a = v;
2594
+ if (a && typeof a.id === "string" && a.id && typeof a.cwd === "string")
2595
+ out[k] = { id: a.id, cwd: a.cwd, at: typeof a.at === "string" ? a.at : "" };
2596
+ }
2597
+ return out;
2598
+ } catch {
2599
+ return {};
2600
+ }
2601
+ }
2602
+ function receiverIdOf(all, harness, id) {
2603
+ const prefix = `${harness}:`;
2604
+ for (const [k, a] of Object.entries(all)) if (a.id === id && k.startsWith(prefix)) return k.slice(prefix.length);
2605
+ return null;
2606
+ }
2607
+
2579
2608
  // src/control/local.ts
2580
2609
  import net from "node:net";
2581
2610
  import os2 from "node:os";
2582
- import path11 from "node:path";
2611
+ import path12 from "node:path";
2583
2612
  function socketPath(state, env = process.env) {
2584
2613
  if (env.SESSIONPIPE_SOCKET) return env.SESSIONPIPE_SOCKET;
2585
2614
  if (process.platform === "win32") return `\\\\.\\pipe\\sessionpipe-control-${os2.userInfo().username}`;
2586
- return path11.join(state, "control.sock");
2615
+ return path12.join(state, "control.sock");
2587
2616
  }
2588
2617
  function ask(sock, req, timeoutMs) {
2589
2618
  return new Promise((resolve) => {
@@ -2647,16 +2676,16 @@ function sinkWithSecrets(s, run = defaultRunner) {
2647
2676
  }
2648
2677
 
2649
2678
  // src/run.ts
2650
- async function tellDaemon(state, job, session, transcript) {
2679
+ async function tellDaemon(state, job, session, cwd, transcript) {
2651
2680
  const sock = socketPath(state);
2652
2681
  if (process.platform !== "win32" && !existsSync8(sock)) return;
2653
2682
  await ask(
2654
2683
  sock,
2655
2684
  {
2656
2685
  op: "event",
2657
- session: `claude-code:${session}`,
2686
+ session: `${job.harness}:${session}`,
2658
2687
  event: job.event,
2659
- cwd: job.cwd,
2688
+ ...cwd ? { cwd } : {},
2660
2689
  ...transcript ? { transcript } : {}
2661
2690
  },
2662
2691
  300
@@ -2664,17 +2693,17 @@ async function tellDaemon(state, job, session, transcript) {
2664
2693
  }
2665
2694
  function enqueueJob(state, job) {
2666
2695
  const jobs = jobsDir(state);
2667
- mkdirSync7(jobs, { recursive: true, mode: 448 });
2668
- const f = path12.join(jobs, `${Date.now().toString(36)}-${Math.random().toString(36).slice(2, 8)}.json`);
2669
- writeFileSync6(f, JSON.stringify(job), { mode: 384 });
2696
+ mkdirSync8(jobs, { recursive: true, mode: 448 });
2697
+ const f = path13.join(jobs, `${Date.now().toString(36)}-${Math.random().toString(36).slice(2, 8)}.json`);
2698
+ writeFileSync7(f, JSON.stringify(job), { mode: 384 });
2670
2699
  return f;
2671
2700
  }
2672
2701
  function log(state, line) {
2673
2702
  try {
2674
- mkdirSync7(state, { recursive: true, mode: 448 });
2675
- const f = path12.join(state, "log");
2703
+ mkdirSync8(state, { recursive: true, mode: 448 });
2704
+ const f = path13.join(state, "log");
2676
2705
  try {
2677
- if (statSync5(f).size > 1024 * 1024) renameSync2(f, `${f}.1`);
2706
+ if (statSync5(f).size > 1024 * 1024) renameSync3(f, `${f}.1`);
2678
2707
  } catch {
2679
2708
  }
2680
2709
  appendFileSync3(f, `${(/* @__PURE__ */ new Date()).toISOString()} ${line}
@@ -2683,11 +2712,11 @@ function log(state, line) {
2683
2712
  }
2684
2713
  }
2685
2714
  function factsState(state) {
2686
- const file = (h, s) => path12.join(state, "facts", safeId(h), `${safeId(s)}.json`);
2715
+ const file = (h, s) => path13.join(state, "facts", safeId(h), `${safeId(s)}.json`);
2687
2716
  return {
2688
2717
  get(h, s) {
2689
2718
  try {
2690
- return JSON.parse(readFileSync8(file(h, s), "utf8"));
2719
+ return JSON.parse(readFileSync9(file(h, s), "utf8"));
2691
2720
  } catch {
2692
2721
  return {};
2693
2722
  }
@@ -2696,8 +2725,8 @@ function factsState(state) {
2696
2725
  const cur = this.get(h, s);
2697
2726
  const next = { ...cur, ...patch };
2698
2727
  if (JSON.stringify(next) === JSON.stringify(cur)) return;
2699
- mkdirSync7(path12.dirname(file(h, s)), { recursive: true, mode: 448 });
2700
- writeFileSync6(file(h, s), JSON.stringify(next), { mode: 384 });
2728
+ mkdirSync8(path13.dirname(file(h, s)), { recursive: true, mode: 448 });
2729
+ writeFileSync7(file(h, s), JSON.stringify(next), { mode: 384 });
2701
2730
  }
2702
2731
  };
2703
2732
  }
@@ -2725,30 +2754,33 @@ async function runJob(job, opts = {}) {
2725
2754
  if (!adapter) return { events: [], delivered: {} };
2726
2755
  const r = adapter.fromHook({ argv: job.argv, stdin: job.stdin, env: { ...process.env, ...job.env }, cwd: job.cwd });
2727
2756
  if (!r || !r.session.id) return { events: [], delivered: {} };
2728
- if (job.harness === "claude-code") await tellDaemon(state, job, r.session.id, r.transcript);
2757
+ const id = receiverIdOf(readAliases(aliasFile(path13.join(state, "control"))), job.harness, r.session.id) ?? r.session.id;
2758
+ await tellDaemon(state, job, id, r.session.cwd, r.transcript);
2729
2759
  const outbox = new Outbox(state);
2730
- const ref = { harness: job.harness, session: r.session.id };
2760
+ const ref = { harness: job.harness, session: id };
2731
2761
  let release = takeLock(state, ref);
2732
2762
  for (let wait = 50; !release && wait <= 3200; wait *= 2) {
2733
2763
  await new Promise((res) => setTimeout(res, wait));
2734
2764
  release = takeLock(state, ref);
2735
2765
  }
2736
2766
  if (!release) {
2737
- log(state, `${job.harness} ${job.event}: session ${r.session.id} locked for 6 s, re-queued`);
2767
+ log(state, `${job.harness} ${job.event}: session ${id} locked for 6 s, re-queued`);
2738
2768
  enqueueJob(state, job);
2739
2769
  return { events: [], delivered: {} };
2740
2770
  }
2741
2771
  try {
2742
2772
  const facts = factsState(state);
2743
- const mem = facts.get(job.harness, r.session.id);
2773
+ const mem = facts.get(job.harness, id);
2744
2774
  const heavy = !/^(PreToolUse|PostToolUse|PostToolUseFailure|BeforeTool|AfterTool|PostInvocation)$/.test(job.event);
2745
2775
  let learned = {};
2746
2776
  if (heavy) {
2747
2777
  const f = adapter.facts(r.session, r.transcript, r.hints ?? {}, facts);
2748
2778
  const { started_at: _s, last_at: _l, first_ask: _fa, harness_version, ...rest } = f;
2749
2779
  learned = rest;
2750
- if (harness_version) facts.save(job.harness, r.session.id, { harness_version });
2751
- facts.save(job.harness, r.session.id, { session: { ...mem.session, ...learned } });
2780
+ if (harness_version) facts.save(job.harness, id, { harness_version });
2781
+ facts.save(job.harness, id, { session: { ...mem.session, ...learned } });
2782
+ if (job.harness === "antigravity" && r.session.cwd && path13.isAbsolute(r.session.cwd))
2783
+ facts.save(job.harness, id, { cwd: r.session.cwd });
2752
2784
  }
2753
2785
  const known = mem.session ?? {};
2754
2786
  const cwdRaw = learned.cwd ?? r.session.cwd ?? known.cwd;
@@ -2758,13 +2790,13 @@ async function runJob(job, opts = {}) {
2758
2790
  ...learned,
2759
2791
  ...git,
2760
2792
  ...learned.branch ? { branch: learned.branch } : {},
2761
- id: r.session.id,
2793
+ id,
2762
2794
  seq: 0,
2763
2795
  machine: machineName(cfg, os3.hostname()),
2764
2796
  ...cwdRaw ? { cwd: tilde(cwdRaw) } : {},
2765
2797
  ...r.session.model ? { model: r.session.model } : {}
2766
2798
  };
2767
- const version = facts.get(job.harness, r.session.id).harness_version ?? void 0;
2799
+ const version = facts.get(job.harness, id).harness_version ?? void 0;
2768
2800
  const events = [];
2769
2801
  for (const a of r.events) {
2770
2802
  const e = makeEvent(a, {
@@ -2776,7 +2808,7 @@ async function runJob(job, opts = {}) {
2776
2808
  }
2777
2809
  const wantsTranscript = cfg.sinks.some((s) => !s.paused && Math.min(s.tier, s.max_tier ?? 3) >= 2);
2778
2810
  if (wantsTranscript && r.transcript && r.events.some((e) => e.type === "turn.ended" || e.type === "session.ended")) {
2779
- const cur = facts.get(job.harness, r.session.id);
2811
+ const cur = facts.get(job.harness, id);
2780
2812
  const fromLine = Number(cur.transcript_line) || 0;
2781
2813
  let turnNo = Number(cur.transcript_turns) || 0;
2782
2814
  const read = adapter.readTranscript(r.transcript, fromLine);
@@ -2796,17 +2828,13 @@ async function runJob(job, opts = {}) {
2796
2828
  )
2797
2829
  );
2798
2830
  }
2799
- if (read.turns.length)
2800
- facts.save(job.harness, r.session.id, { transcript_line: read.line, transcript_turns: turnNo });
2831
+ if (read.turns.length) facts.save(job.harness, id, { transcript_line: read.line, transcript_turns: turnNo });
2801
2832
  }
2802
2833
  outbox.append(
2803
2834
  ref,
2804
2835
  events.map((e) => ({ ...e, session: redactDeep(e.session), data: redactDeep(e.data) }))
2805
2836
  );
2806
- log(
2807
- state,
2808
- `${job.harness} ${job.event}: ${events.map((e) => e.type).join(",") || "nothing"} (${r.session.id.slice(0, 8)})`
2809
- );
2837
+ log(state, `${job.harness} ${job.event}: ${events.map((e) => e.type).join(",") || "nothing"} (${id.slice(0, 8)})`);
2810
2838
  const delivered = await flush(state, cfg.sinks, outbox, ref);
2811
2839
  if (Math.random() < 0.02) outbox.prune(cfg.keep_days ?? 30);
2812
2840
  return { events, delivered };
@@ -2897,7 +2925,7 @@ function applySinkVerdict(name, res) {
2897
2925
  } catch {
2898
2926
  }
2899
2927
  }
2900
- var jobsDir = (state) => path12.join(state, "jobs");
2928
+ var jobsDir = (state) => path13.join(state, "jobs");
2901
2929
  export {
2902
2930
  HttpSink,
2903
2931
  buildSinks,