@parall/codex-agent 1.44.0 → 1.46.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.
Files changed (43) hide show
  1. package/dist/app-server-process.d.ts +9 -0
  2. package/dist/app-server-process.d.ts.map +1 -0
  3. package/dist/app-server-process.js +58 -0
  4. package/dist/app-server-protocol.d.ts +19 -0
  5. package/dist/app-server-protocol.d.ts.map +1 -0
  6. package/dist/app-server-protocol.js +42 -0
  7. package/dist/dispatch.d.ts +88 -5
  8. package/dist/dispatch.d.ts.map +1 -1
  9. package/dist/dispatch.js +364 -196
  10. package/dist/index.js +27 -11
  11. package/dist/instructions-refresh.d.ts +136 -0
  12. package/dist/instructions-refresh.d.ts.map +1 -0
  13. package/dist/instructions-refresh.js +244 -0
  14. package/dist/jsonrpc-client.d.ts +49 -1
  15. package/dist/jsonrpc-client.d.ts.map +1 -1
  16. package/dist/jsonrpc-client.js +77 -5
  17. package/dist/legacy-workspace-config-migration.d.ts +112 -0
  18. package/dist/legacy-workspace-config-migration.d.ts.map +1 -0
  19. package/dist/legacy-workspace-config-migration.js +229 -0
  20. package/dist/server-requests.d.ts +10 -0
  21. package/dist/server-requests.d.ts.map +1 -0
  22. package/dist/server-requests.js +39 -0
  23. package/dist/session-manager.d.ts +12 -0
  24. package/dist/session-manager.d.ts.map +1 -1
  25. package/dist/session-manager.js +53 -3
  26. package/dist/turn-sink.d.ts +26 -0
  27. package/dist/turn-sink.d.ts.map +1 -0
  28. package/dist/turn-sink.js +45 -0
  29. package/dist/workspace.d.ts +23 -25
  30. package/dist/workspace.d.ts.map +1 -1
  31. package/dist/workspace.js +138 -138
  32. package/package.json +5 -5
  33. package/src/app-server-process.ts +59 -0
  34. package/src/app-server-protocol.ts +46 -0
  35. package/src/dispatch.ts +426 -204
  36. package/src/index.ts +35 -10
  37. package/src/instructions-refresh.ts +367 -0
  38. package/src/jsonrpc-client.ts +109 -7
  39. package/src/legacy-workspace-config-migration.ts +296 -0
  40. package/src/server-requests.ts +40 -0
  41. package/src/session-manager.ts +74 -6
  42. package/src/turn-sink.ts +54 -0
  43. package/src/workspace.ts +155 -155
@@ -0,0 +1,9 @@
1
+ /**
2
+ * OS-level plumbing for the `codex app-server` child process: the cwd invariant
3
+ * it requires (a git repo), and the Windows spawn/kill quirks.
4
+ */
5
+ export declare const IS_WIN32: boolean;
6
+ export declare function quoteWin32Arg(arg: string): string;
7
+ export declare function killWin32Tree(pid: number): boolean;
8
+ export declare function ensureGitRepo(workingDirectory: string): void;
9
+ //# sourceMappingURL=app-server-process.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"app-server-process.d.ts","sourceRoot":"","sources":["../src/app-server-process.ts"],"names":[],"mappings":"AAIA;;;GAGG;AAEH,eAAO,MAAM,QAAQ,SAA+B,CAAC;AAErD,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAGjD;AAED,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAOlD;AAED,wBAAgB,aAAa,CAAC,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAiC5D"}
@@ -0,0 +1,58 @@
1
+ import { execSync } from 'node:child_process';
2
+ import * as fs from 'node:fs';
3
+ import { ensureLocalAttachmentGitExclude } from '@parall/agent-core/internal/attachment-input';
4
+ /**
5
+ * OS-level plumbing for the `codex app-server` child process: the cwd invariant
6
+ * it requires (a git repo), and the Windows spawn/kill quirks.
7
+ */
8
+ export const IS_WIN32 = process.platform === 'win32';
9
+ export function quoteWin32Arg(arg) {
10
+ if (!/[\s"&|^<>()]/.test(arg))
11
+ return arg;
12
+ return `"${arg.replace(/"/g, '""')}"`;
13
+ }
14
+ export function killWin32Tree(pid) {
15
+ try {
16
+ execSync(`taskkill /T /F /PID ${pid}`, { windowsHide: true, stdio: 'ignore' });
17
+ return true;
18
+ }
19
+ catch {
20
+ return false;
21
+ }
22
+ }
23
+ export function ensureGitRepo(workingDirectory) {
24
+ fs.mkdirSync(workingDirectory, { recursive: true });
25
+ // Only `git init` if the workspace isn't already inside any git repo. A
26
+ // bare existsSync(.git) check would miss the common case of a user pointing
27
+ // PRLL_WORKSPACE_DIR at a subdirectory of their existing project,
28
+ // and silently creating a nested repo there would mangle their layout.
29
+ //
30
+ // The exclude write sits inside this try, so in principle its failure would
31
+ // read as "not a repo" and fall through to `git init` in the user's existing
32
+ // repository. It cannot: the helper swallows its own errors. Deliberately left
33
+ // as-is rather than fixed under review — latent, not live, and out of this
34
+ // PR's scope: docs/tech-debt/codex-ensure-git-repo-exclude-coupling.md.
35
+ try {
36
+ execSync('git rev-parse --is-inside-work-tree', { cwd: workingDirectory, stdio: 'pipe' });
37
+ ensureLocalAttachmentGitExclude(workingDirectory);
38
+ return;
39
+ }
40
+ catch {
41
+ // Not inside a repo — fall through to init.
42
+ }
43
+ const env = {
44
+ ...process.env,
45
+ GIT_AUTHOR_NAME: 'parall-codex-agent',
46
+ GIT_AUTHOR_EMAIL: 'agent@parall.local',
47
+ GIT_COMMITTER_NAME: 'parall-codex-agent',
48
+ GIT_COMMITTER_EMAIL: 'agent@parall.local',
49
+ };
50
+ try {
51
+ execSync('git init', { cwd: workingDirectory, stdio: 'pipe', env });
52
+ execSync('git commit --allow-empty -m init', { cwd: workingDirectory, stdio: 'pipe', env });
53
+ ensureLocalAttachmentGitExclude(workingDirectory);
54
+ }
55
+ catch {
56
+ // Non-fatal: codex app-server may still accept a bare directory. Let it raise at turn time.
57
+ }
58
+ }
@@ -0,0 +1,19 @@
1
+ import type { PreparedLocalImage } from '@parall/agent-core/internal/attachment-input';
2
+ /**
3
+ * Wire shapes of the `codex app-server` JSON-RPC payloads: what we send as turn
4
+ * input, and how we read ids back out of responses and notifications. The
5
+ * protocol has shifted between CLI versions, so the tolerant field probing lives
6
+ * here rather than being spread through the adapter.
7
+ */
8
+ export type CodexTurnInput = {
9
+ type: 'text';
10
+ text: string;
11
+ } | {
12
+ type: 'localImage';
13
+ path: string;
14
+ };
15
+ export declare function buildTurnInput(body: string, images: PreparedLocalImage[]): CodexTurnInput[];
16
+ export declare function extractThreadId(result: unknown): string | undefined;
17
+ export declare function extractTurnId(result: unknown): string | undefined;
18
+ export declare function extractThreadIdFromNotification(params: unknown): string | undefined;
19
+ //# sourceMappingURL=app-server-protocol.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"app-server-protocol.d.ts","sourceRoot":"","sources":["../src/app-server-protocol.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,8CAA8C,CAAC;AAEvF;;;;;GAKG;AAEH,MAAM,MAAM,cAAc,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAAG;IAAE,IAAI,EAAE,YAAY,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC;AAEnG,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,kBAAkB,EAAE,GAAG,cAAc,EAAE,CAK3F;AAED,wBAAgB,eAAe,CAAC,MAAM,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAOnE;AAED,wBAAgB,aAAa,CAAC,MAAM,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAOjE;AAED,wBAAgB,+BAA+B,CAAC,MAAM,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CASnF"}
@@ -0,0 +1,42 @@
1
+ export function buildTurnInput(body, images) {
2
+ return [
3
+ { type: 'text', text: body },
4
+ ...images.map((image) => ({ type: 'localImage', path: image.localPath })),
5
+ ];
6
+ }
7
+ export function extractThreadId(result) {
8
+ if (!result || typeof result !== 'object')
9
+ return undefined;
10
+ const r = result;
11
+ if (typeof r.threadId === 'string')
12
+ return r.threadId;
13
+ const thread = r.thread;
14
+ if (thread && typeof thread.id === 'string')
15
+ return thread.id;
16
+ return undefined;
17
+ }
18
+ export function extractTurnId(result) {
19
+ if (!result || typeof result !== 'object')
20
+ return undefined;
21
+ const r = result;
22
+ if (typeof r.turnId === 'string')
23
+ return r.turnId;
24
+ const turn = r.turn;
25
+ if (turn && typeof turn.id === 'string')
26
+ return turn.id;
27
+ return undefined;
28
+ }
29
+ export function extractThreadIdFromNotification(params) {
30
+ if (!params || typeof params !== 'object')
31
+ return undefined;
32
+ const p = params;
33
+ if (typeof p.threadId === 'string')
34
+ return p.threadId;
35
+ const thread = p.thread;
36
+ if (thread && typeof thread.id === 'string')
37
+ return thread.id;
38
+ const meta = (p._meta ?? p.meta);
39
+ if (meta && typeof meta.threadId === 'string')
40
+ return meta.threadId;
41
+ return undefined;
42
+ }
@@ -1,5 +1,6 @@
1
1
  import type { CleanupForkOpts, DispatchAdapter, DispatchOpts, ForkOpts, ForkSessionHandle, GatewayLogger, RuntimeEvent } from '@parall/agent-core';
2
2
  import type { CodexAgentConfig } from './config.js';
3
+ import { type NotificationTap } from './instructions-refresh.js';
3
4
  import type { CodexSessionManager } from './session-manager.js';
4
5
  type CodexAppServerAdapterOptions = Pick<CodexAgentConfig, 'approvalPolicy' | 'codexBin' | 'codexHome' | 'model' | 'reasoningEffort' | 'sandbox' | 'workspaceDir'> & {
5
6
  sessionManager: CodexSessionManager;
@@ -15,7 +16,44 @@ type CodexAppServerAdapterOptions = Pick<CodexAgentConfig, 'approvalPolicy' | 'c
15
16
  * on its next shell command — no respawn needed.
16
17
  */
17
18
  capabilityBinDir?: string;
19
+ /**
20
+ * Platform system prompt, delivered per-thread via the app-server's typed
21
+ * top-level `developerInstructions` param — the ONLY delivery channel. It
22
+ * replaces the legacy workspace `.codex/config.toml` + global trust entry,
23
+ * which coupled the prompt to codex's interactive workspace-trust concept
24
+ * and made the bridge write into the operator's own config on shared homes.
25
+ *
26
+ * Where it lands on 0.144.1: `thread/start` bakes it in (canonical AND
27
+ * model-visible at once); a fresh-process `thread/resume` updates only the
28
+ * thread's CANONICAL configuration (a resume of a still-running thread
29
+ * ignores every override); `thread/fork` inherits the parent's; compaction
30
+ * rebuilds the model-visible context from the canonical configuration.
31
+ *
32
+ * Consequence: updateConfig() changes what the NEXT thread open sends; for
33
+ * the persisted main thread, the lazy restart's fresh-process resume plus
34
+ * one explicit compaction converge both planes before the next turn — the
35
+ * full two-plane semantics and evidence live in instructions-refresh.ts.
36
+ */
37
+ developerInstructions?: string;
38
+ /** Override the compaction wait budget for the instructions refresh (tests). */
39
+ instructionsCompactTimeoutMs?: number;
40
+ /** Override the post-interrupt grace for the instructions refresh (tests). */
41
+ instructionsInterruptGraceMs?: number;
18
42
  };
43
+ /**
44
+ * Bridge driver backed by `codex app-server --listen stdio://`.
45
+ *
46
+ * Lifecycle:
47
+ * - bridge startup: spawn one `codex app-server` subprocess, do the
48
+ * `initialize` / `initialized` handshake once, keep the pipe open
49
+ * - per Parall dispatch: `thread/start` (first time) or `thread/resume`,
50
+ * then `turn/start`; forward server notifications until `turn/completed`
51
+ * - fork-on-busy: `thread/fork` creates a disposable sibling thread
52
+ *
53
+ * Concurrency: agent-core routes one dispatch per sessionKey at a time, so
54
+ * main + fork can interleave turns on the same stdio pipe. We route
55
+ * notifications by threadId the server stamps on every item/turn event.
56
+ */
19
57
  export declare class CodexAppServerAdapter implements DispatchAdapter {
20
58
  private readonly opts;
21
59
  private client;
@@ -26,7 +64,22 @@ export declare class CodexAppServerAdapter implements DispatchAdapter {
26
64
  private readonly activeTurnIds;
27
65
  private readonly pendingInjections;
28
66
  private readonly resumedThreadIds;
67
+ /** Threads whose reconcile compaction is in flight — tap-only traffic. */
68
+ private readonly reconcilingThreadIds;
69
+ /**
70
+ * Set when a stalled compaction left (possibly) a zombie turn on the main
71
+ * thread. Until the subprocess ACTUALLY restarts, main-lane redrives must
72
+ * not open/compact/turn-start the thread: re-entering the zombie process
73
+ * lets a second compaction's watcher misattribute the zombie's close as a
74
+ * plain failure, dropping the stalled marker and re-arming the
75
+ * fresh-thread rotation this state exists to prevent. Cleared where the
76
+ * zombie dies: subprocess teardown.
77
+ */
78
+ private mainLaneQuarantined;
79
+ private readonly notificationTaps;
80
+ private readonly instructionsRefresher;
29
81
  private stopping;
82
+ private lastUnroutedNotificationWarnAt;
30
83
  /**
31
84
  * Store an active turn sink keyed by threadId. If a sink already exists for
32
85
  * the same threadId, log a warning and fail the existing sink — this
@@ -37,27 +90,57 @@ export declare class CodexAppServerAdapter implements DispatchAdapter {
37
90
  */
38
91
  private setActiveTurn;
39
92
  constructor(opts: CodexAppServerAdapterOptions);
93
+ /** Register a listener for every server notification; returns unregister. */
94
+ addNotificationTap(tap: NotificationTap): () => void;
95
+ /**
96
+ * Tell tap waiters the subprocess is gone so they abort immediately —
97
+ * no further notifications will ever arrive, and a waiter left to its
98
+ * own timeout would stall its dispatch for the full compaction budget.
99
+ * Mirrors the global-error broadcast routeNotification does for sinks.
100
+ */
101
+ private notifyTapsDisposed;
40
102
  updateConfig(config: {
41
103
  model?: string | null;
42
104
  reasoningEffort?: string | null;
105
+ developerInstructions?: string | null;
43
106
  }): void;
44
107
  enqueueDuringDispatch(sessionKey: string, body: string): Promise<boolean>;
45
108
  abortDispatch(sessionKey: string): void;
46
109
  hasPendingInjections(sessionKey: string): boolean;
47
110
  dispatch({ event, bodyForAgent, sessionKey, context, }: DispatchOpts): AsyncIterable<RuntimeEvent>;
111
+ /**
112
+ * Bring the app-server up and open (start or resume) the thread for this
113
+ * dispatch, then reconcile the main thread's EFFECTIVE instructions plane.
114
+ * Extracted from dispatch() so the convergence re-check there can loop back
115
+ * through the restart path without duplicating the open logic. Errors are
116
+ * returned, not thrown — the generator yields them as runtime events.
117
+ */
118
+ private openDispatchTarget;
48
119
  getBranchPoint(_sessionKey: string): string | undefined;
49
120
  forkSession({ sessionKey: parentSessionKey }: ForkOpts): Promise<ForkSessionHandle | null>;
50
121
  cleanupFork({ fork }: CleanupForkOpts): void;
51
122
  private logForkFailure;
52
123
  /**
53
- * Lazily restart the app-server before the NEXT turn: the workspace
54
- * config.toml (developer_instructions, carrying capability fragments) is
55
- * loaded at process start, so a changed fragment set needs a respawn to
56
- * reach the prompt. Deferred to the next dispatch with no active turns —
57
- * never kills an in-flight turn; thread state survives via thread/resume.
124
+ * Lazily restart the app-server before the NEXT turn, so a subprocess that
125
+ * has been running since before a capability change starts clean. Deferred
126
+ * to the next dispatch with no active turns never kills an in-flight turn;
127
+ * thread state survives via thread/resume.
128
+ *
129
+ * For the persisted main thread this restart is also the CANONICAL half of
130
+ * the instructions refresh: only a fresh-process thread/resume applies the
131
+ * updated developerInstructions to the thread's configuration (a resume of
132
+ * a still-running thread ignores it). The EFFECTIVE half is the explicit
133
+ * compaction in instructions-refresh.ts. The capability shim dir on PATH is
134
+ * what makes a grant/revocation's TOOLS effective immediately.
58
135
  */
59
136
  requestProcessRestart(): void;
60
137
  private restartRequested;
138
+ /**
139
+ * Dispatches currently inside their open/reconcile phase — real work on
140
+ * the subprocess (thread open, possibly a compaction turn) that predates
141
+ * any TurnSink registration, so activeTurns alone cannot gate the restart.
142
+ */
143
+ private openingDispatches;
61
144
  private applyPendingRestart;
62
145
  stop(): Promise<void>;
63
146
  private ensureStarted;
@@ -1 +1 @@
1
- {"version":3,"file":"dispatch.d.ts","sourceRoot":"","sources":["../src/dispatch.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EACV,eAAe,EACf,eAAe,EACf,YAAY,EACZ,QAAQ,EACR,iBAAiB,EACjB,aAAa,EACb,YAAY,EACb,MAAM,oBAAoB,CAAC;AAC5B,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAIpD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAEhE,KAAK,4BAA4B,GAAG,IAAI,CACtC,gBAAgB,EACd,gBAAgB,GAChB,UAAU,GACV,WAAW,GACX,OAAO,GACP,iBAAiB,GACjB,SAAS,GACT,cAAc,CACjB,GAAG;IACF,cAAc,EAAE,mBAAmB,CAAC;IACpC,GAAG,CAAC,EAAE,aAAa,CAAC;IACpB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B;;;;;;OAMG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B,CAAC;AAqCF,qBAAa,qBAAsB,YAAW,eAAe;IA+B/C,OAAO,CAAC,QAAQ,CAAC,IAAI;IA9BjC,OAAO,CAAC,MAAM,CAAmC;IACjD,OAAO,CAAC,IAAI,CAA+C;IAC3D,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,YAAY,CAA8B;IAClD,OAAO,CAAC,QAAQ,CAAC,WAAW,CAA+B;IAC3D,OAAO,CAAC,QAAQ,CAAC,aAAa,CAA6B;IAC3D,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAA6B;IAC/D,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAqB;IACtD,OAAO,CAAC,QAAQ,CAAS;IAEzB;;;;;;;OAOG;IACH,OAAO,CAAC,aAAa;gBAYQ,IAAI,EAAE,4BAA4B;IAE/D,YAAY,CAAC,MAAM,EAAE;QAAE,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;QAAC,eAAe,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,GAAG,IAAI;IAMhF,qBAAqB,CAAC,UAAU,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAqB/E,aAAa,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI;IAUvC,oBAAoB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO;IAI1C,QAAQ,CAAC,EACd,KAAK,EACL,YAAY,EACZ,UAAU,EACV,OAAO,GACR,EAAE,YAAY,GAAG,aAAa,CAAC,YAAY,CAAC;IA8P7C,cAAc,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAMjD,WAAW,CAAC,EAAE,UAAU,EAAE,gBAAgB,EAAE,EAAE,QAAQ,GAAG,OAAO,CAAC,iBAAiB,GAAG,IAAI,CAAC;IAgChG,WAAW,CAAC,EAAE,IAAI,EAAE,EAAE,eAAe;IAIrC,OAAO,CAAC,cAAc;IAKtB;;;;;;OAMG;IACH,qBAAqB,IAAI,IAAI;IAI7B,OAAO,CAAC,gBAAgB,CAAS;YAEnB,mBAAmB;IAS3B,IAAI;YAuBI,aAAa;YA2Bb,OAAO;IAuGrB,OAAO,CAAC,qBAAqB;YAmCf,UAAU;IA6CxB,OAAO,CAAC,iBAAiB;CA2B1B"}
1
+ {"version":3,"file":"dispatch.d.ts","sourceRoot":"","sources":["../src/dispatch.ts"],"names":[],"mappings":"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"}