@parall/codex-agent 1.31.0 → 1.32.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/dist/config.d.ts.map +1 -1
- package/dist/config.js +34 -35
- package/dist/dispatch.d.ts +6 -5
- package/dist/dispatch.d.ts.map +1 -1
- package/dist/dispatch.js +101 -81
- package/dist/event-mapping.d.ts +1 -1
- package/dist/event-mapping.d.ts.map +1 -1
- package/dist/event-mapping.js +102 -82
- package/dist/index.js +154 -118
- package/dist/jsonrpc-client.d.ts +4 -4
- package/dist/jsonrpc-client.d.ts.map +1 -1
- package/dist/jsonrpc-client.js +15 -15
- package/dist/session-manager.d.ts +1 -1
- package/dist/session-manager.d.ts.map +1 -1
- package/dist/session-manager.js +7 -5
- package/dist/workspace.d.ts +1 -1
- package/dist/workspace.d.ts.map +1 -1
- package/dist/workspace.js +40 -39
- package/package.json +4 -4
- package/src/config.ts +41 -36
- package/src/dispatch.ts +139 -109
- package/src/event-mapping.ts +135 -109
- package/src/index.ts +187 -121
- package/src/jsonrpc-client.ts +22 -20
- package/src/session-manager.ts +10 -6
- package/src/workspace.ts +50 -43
package/dist/config.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAGA,MAAM,MAAM,gBAAgB,GAAG;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB;;;;;;;OAOG;IACH,OAAO,EAAE,MAAM,CAAC;IAChB;;;;;OAKG;IACH,cAAc,EAAE,MAAM,CAAC;IACvB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB,CAAC;AAcF,wBAAgB,uBAAuB,CAAC,GAAG,GAAE,MAAM,CAAC,UAAwB,GAAG,gBAAgB,
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAGA,MAAM,MAAM,gBAAgB,GAAG;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB;;;;;;;OAOG;IACH,OAAO,EAAE,MAAM,CAAC;IAChB;;;;;OAKG;IACH,cAAc,EAAE,MAAM,CAAC;IACvB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB,CAAC;AAcF,wBAAgB,uBAAuB,CAAC,GAAG,GAAE,MAAM,CAAC,UAAwB,GAAG,gBAAgB,CAyC9F;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAUtD;AAED;;;;;GAKG;AACH,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAW7D;AAED,wBAAgB,YAAY,CAC1B,MAAM,EAAE,MAAM,EACd,aAAa,CAAC,EAAE,MAAM,EACtB,YAAY,CAAC,EAAE,MAAM,GACpB,MAAM,CAMR;AAED,wBAAgB,oBAAoB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAEhE;AAED,wBAAgB,8BAA8B,CAAC,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM,CAG3F;AAED,wBAAgB,yBAAyB,CAAC,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM,CAGtF;AAED,wBAAgB,wBAAwB,CAAC,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM,CAGrF"}
|
package/dist/config.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import * as os from
|
|
2
|
-
import * as path from
|
|
1
|
+
import * as os from 'node:os';
|
|
2
|
+
import * as path from 'node:path';
|
|
3
3
|
function requireEnv(env, name) {
|
|
4
4
|
const value = env[name]?.trim();
|
|
5
5
|
if (!value) {
|
|
@@ -11,9 +11,9 @@ function resolvePath(value) {
|
|
|
11
11
|
return path.isAbsolute(value) ? value : path.resolve(process.cwd(), value);
|
|
12
12
|
}
|
|
13
13
|
export function resolveCodexAgentConfig(env = process.env) {
|
|
14
|
-
const apiUrl = requireEnv(env,
|
|
15
|
-
const apiKey = requireEnv(env,
|
|
16
|
-
const orgId = requireEnv(env,
|
|
14
|
+
const apiUrl = requireEnv(env, 'PRLL_API_URL');
|
|
15
|
+
const apiKey = requireEnv(env, 'PRLL_API_KEY');
|
|
16
|
+
const orgId = requireEnv(env, 'PRLL_ORG_ID');
|
|
17
17
|
// CODEX_HOME is where codex looks for `auth.json` / `config.toml`. Its
|
|
18
18
|
// own default is `$HOME/.codex`; falling back to `$HOME` here was wrong
|
|
19
19
|
// — it made the spawned app-server subprocess look for
|
|
@@ -21,28 +21,27 @@ export function resolveCodexAgentConfig(env = process.env) {
|
|
|
21
21
|
// `thread/start` failed with `401 Unauthorized` against the OpenAI
|
|
22
22
|
// WebSocket endpoint. Default to `$HOME/.codex` so `codex login`'s
|
|
23
23
|
// credentials are picked up transparently.
|
|
24
|
-
const codexHome = resolvePath(env.PRLL_CODEX_HOME?.trim()
|
|
25
|
-
|
|
26
|
-
|
|
24
|
+
const codexHome = resolvePath(env.PRLL_CODEX_HOME?.trim() ||
|
|
25
|
+
env.CODEX_HOME?.trim() ||
|
|
26
|
+
path.join(env.HOME || os.homedir(), '.codex'));
|
|
27
27
|
// Bridge state lives outside CODEX_HOME to avoid polluting codex's own
|
|
28
28
|
// directory with non-codex files.
|
|
29
|
-
const stateDir = resolvePath(env.PRLL_STATE_DIR?.trim()
|
|
30
|
-
|
|
31
|
-
const workspaceDir = resolvePath(env.PRLL_WORKSPACE_DIR?.trim() || path.join(stateDir, "workspace"));
|
|
29
|
+
const stateDir = resolvePath(env.PRLL_STATE_DIR?.trim() || path.join(env.HOME || os.homedir(), '.parall-agent'));
|
|
30
|
+
const workspaceDir = resolvePath(env.PRLL_WORKSPACE_DIR?.trim() || path.join(stateDir, 'workspace'));
|
|
32
31
|
return {
|
|
33
32
|
apiUrl,
|
|
34
33
|
apiKey,
|
|
35
34
|
orgId,
|
|
36
35
|
wsUrl: env.PRLL_WS_URL?.trim() || undefined,
|
|
37
36
|
swimlaneName: env.PRLL_SWIMLANE_NAME?.trim() || undefined,
|
|
38
|
-
codexBin: env.PRLL_CODEX_BIN?.trim() ||
|
|
37
|
+
codexBin: env.PRLL_CODEX_BIN?.trim() || 'codex',
|
|
39
38
|
codexHome,
|
|
40
39
|
stateDir,
|
|
41
40
|
workspaceDir,
|
|
42
41
|
model: env.PRLL_CODEX_MODEL?.trim() || undefined,
|
|
43
42
|
reasoningEffort: env.PRLL_CODEX_REASONING_EFFORT?.trim() || undefined,
|
|
44
|
-
sandbox: env.PRLL_CODEX_SANDBOX?.trim() ||
|
|
45
|
-
approvalPolicy: env.PRLL_CODEX_APPROVAL?.trim() ||
|
|
43
|
+
sandbox: env.PRLL_CODEX_SANDBOX?.trim() || 'danger-full-access',
|
|
44
|
+
approvalPolicy: env.PRLL_CODEX_APPROVAL?.trim() || 'never',
|
|
46
45
|
runtimeKey: env.PRLL_CODEX_RUNTIME_KEY?.trim() || undefined,
|
|
47
46
|
};
|
|
48
47
|
}
|
|
@@ -59,12 +58,12 @@ export function resolveCodexAgentConfig(env = process.env) {
|
|
|
59
58
|
*/
|
|
60
59
|
export function normalizeSandbox(value) {
|
|
61
60
|
const map = {
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
61
|
+
'workspace-write': 'workspace-write',
|
|
62
|
+
workspacewrite: 'workspace-write',
|
|
63
|
+
'danger-full-access': 'danger-full-access',
|
|
64
|
+
dangerfullaccess: 'danger-full-access',
|
|
65
|
+
'read-only': 'read-only',
|
|
66
|
+
readonly: 'read-only',
|
|
68
67
|
};
|
|
69
68
|
return map[value.toLowerCase()] ?? value;
|
|
70
69
|
}
|
|
@@ -76,36 +75,36 @@ export function normalizeSandbox(value) {
|
|
|
76
75
|
*/
|
|
77
76
|
export function normalizeApprovalPolicy(value) {
|
|
78
77
|
const map = {
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
78
|
+
never: 'never',
|
|
79
|
+
'on-request': 'on-request',
|
|
80
|
+
onrequest: 'on-request',
|
|
81
|
+
'unless-trusted': 'unless-trusted',
|
|
82
|
+
unlesstrusted: 'unless-trusted',
|
|
83
|
+
'on-failure': 'on-failure',
|
|
84
|
+
onfailure: 'on-failure',
|
|
86
85
|
};
|
|
87
86
|
return map[value.toLowerCase()] ?? value;
|
|
88
87
|
}
|
|
89
88
|
export function resolveWsUrl(apiUrl, explicitWsUrl, swimlaneName) {
|
|
90
|
-
const base = explicitWsUrl || `${apiUrl.replace(/\/$/,
|
|
89
|
+
const base = explicitWsUrl || `${apiUrl.replace(/\/$/, '').replace(/^http/, 'ws')}/ws`;
|
|
91
90
|
if (!swimlaneName)
|
|
92
91
|
return base;
|
|
93
92
|
const url = new URL(base);
|
|
94
|
-
url.searchParams.set(
|
|
93
|
+
url.searchParams.set('swimlane', swimlaneName);
|
|
95
94
|
return url.toString();
|
|
96
95
|
}
|
|
97
96
|
export function buildCodexRuntimeKey(agentUserId) {
|
|
98
97
|
return `agent:main:codex:${agentUserId}:orchestrator`;
|
|
99
98
|
}
|
|
100
99
|
export function sessionStateFilePathForRuntime(stateDir, runtimeKey) {
|
|
101
|
-
const fileName = Buffer.from(runtimeKey).toString(
|
|
102
|
-
return path.join(stateDir,
|
|
100
|
+
const fileName = Buffer.from(runtimeKey).toString('base64url');
|
|
101
|
+
return path.join(stateDir, 'threads', `${fileName}.json`);
|
|
103
102
|
}
|
|
104
103
|
export function contextFilePathForSession(stateDir, sessionKey) {
|
|
105
|
-
const fileName = Buffer.from(sessionKey).toString(
|
|
106
|
-
return path.join(stateDir,
|
|
104
|
+
const fileName = Buffer.from(sessionKey).toString('base64url');
|
|
105
|
+
return path.join(stateDir, 'dispatch-context', `${fileName}.json`);
|
|
107
106
|
}
|
|
108
107
|
export function stepIdFilePathForSession(stateDir, sessionKey) {
|
|
109
|
-
const fileName = Buffer.from(sessionKey).toString(
|
|
110
|
-
return path.join(stateDir,
|
|
108
|
+
const fileName = Buffer.from(sessionKey).toString('base64url');
|
|
109
|
+
return path.join(stateDir, 'step-ids', `${fileName}.txt`);
|
|
111
110
|
}
|
package/dist/dispatch.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import type { CleanupForkOpts, DispatchAdapter, DispatchOpts, ForkOpts, ForkSessionHandle, GatewayLogger, RuntimeEvent } from
|
|
2
|
-
import type { CodexAgentConfig } from
|
|
3
|
-
import type { CodexSessionManager } from
|
|
4
|
-
type CodexAppServerAdapterOptions = Pick<CodexAgentConfig,
|
|
1
|
+
import type { CleanupForkOpts, DispatchAdapter, DispatchOpts, ForkOpts, ForkSessionHandle, GatewayLogger, RuntimeEvent } from '@parall/agent-core';
|
|
2
|
+
import type { CodexAgentConfig } from './config.js';
|
|
3
|
+
import type { CodexSessionManager } from './session-manager.js';
|
|
4
|
+
type CodexAppServerAdapterOptions = Pick<CodexAgentConfig, 'approvalPolicy' | 'codexBin' | 'codexHome' | 'model' | 'reasoningEffort' | 'sandbox' | 'workspaceDir'> & {
|
|
5
5
|
sessionManager: CodexSessionManager;
|
|
6
6
|
log?: GatewayLogger;
|
|
7
7
|
contextFilePath?: string;
|
|
@@ -33,8 +33,9 @@ export declare class CodexAppServerAdapter implements DispatchAdapter {
|
|
|
33
33
|
reasoningEffort?: string | null;
|
|
34
34
|
}): void;
|
|
35
35
|
enqueueDuringDispatch(sessionKey: string, body: string): Promise<boolean>;
|
|
36
|
+
abortDispatch(sessionKey: string): void;
|
|
36
37
|
hasPendingInjections(sessionKey: string): boolean;
|
|
37
|
-
dispatch({ event, bodyForAgent, sessionKey, context }: DispatchOpts): AsyncIterable<RuntimeEvent>;
|
|
38
|
+
dispatch({ event, bodyForAgent, sessionKey, context, }: DispatchOpts): AsyncIterable<RuntimeEvent>;
|
|
38
39
|
getBranchPoint(_sessionKey: string): string | undefined;
|
|
39
40
|
forkSession({ sessionKey: parentSessionKey }: ForkOpts): Promise<ForkSessionHandle | null>;
|
|
40
41
|
cleanupFork({ fork }: CleanupForkOpts): void;
|
package/dist/dispatch.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dispatch.d.ts","sourceRoot":"","sources":["../src/dispatch.ts"],"names":[],"mappings":"AASA,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,iBAAiB,CAAC,EAAE,OAAO,CAAC;CAC7B,CAAC;
|
|
1
|
+
{"version":3,"file":"dispatch.d.ts","sourceRoot":"","sources":["../src/dispatch.ts"],"names":[],"mappings":"AASA,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,iBAAiB,CAAC,EAAE,OAAO,CAAC;CAC7B,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;IA0O7C,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;IA+BhG,WAAW,CAAC,EAAE,IAAI,EAAE,EAAE,eAAe;IAIrC,OAAO,CAAC,cAAc;IAKhB,IAAI;YAiBI,aAAa;YA2Bb,OAAO;IA2ErB,OAAO,CAAC,qBAAqB;YAmCf,UAAU;IA2CxB,OAAO,CAAC,iBAAiB;CA2B1B"}
|