@parall/agent-core 1.30.0 → 1.31.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/gateway-base.d.ts +1 -0
- package/dist/gateway-base.d.ts.map +1 -1
- package/dist/gateway-base.js +13 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/provider-config.d.ts +11 -0
- package/dist/provider-config.d.ts.map +1 -0
- package/dist/provider-config.js +30 -0
- package/package.json +2 -2
- package/src/gateway-base.ts +13 -0
- package/src/index.ts +1 -0
- package/src/provider-config.ts +39 -0
package/dist/gateway-base.d.ts
CHANGED
|
@@ -36,6 +36,7 @@ export type ParallGatewayOptions = {
|
|
|
36
36
|
}) => Promise<void> | void;
|
|
37
37
|
onBeforeDisconnect?: () => Promise<void> | void;
|
|
38
38
|
onNewSession?: (previousSessionId: string) => Promise<void> | void;
|
|
39
|
+
onSessionStale?: (sessionKey: string) => Promise<void> | void;
|
|
39
40
|
};
|
|
40
41
|
export declare function parseShutdownDeadlineMs(raw: string | undefined): number | undefined;
|
|
41
42
|
export declare class ParallAgentGateway {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gateway-base.d.ts","sourceRoot":"","sources":["../src/gateway-base.ts"],"names":[],"mappings":"AAGA,OAAO,EAAuB,YAAY,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAC1E,OAAO,KAAK,EACV,qBAAqB,EAetB,MAAM,aAAa,CAAC;AAErB,OAAO,KAAK,EAEV,eAAe,EAGf,aAAa,EAEd,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"gateway-base.d.ts","sourceRoot":"","sources":["../src/gateway-base.ts"],"names":[],"mappings":"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"}
|
package/dist/gateway-base.js
CHANGED
|
@@ -5,6 +5,7 @@ import { MENTION_ALL_USER_ID } from "@parall/sdk";
|
|
|
5
5
|
import { buildEventBody, buildEventBodyForForkResult, buildForkResultPrefix, buildForkScopePrefix } from "./event-format.js";
|
|
6
6
|
import { routeTrigger } from "./routing.js";
|
|
7
7
|
import { clearDispatchMessageId, clearDispatchNoReply, clearSessionMessageId, setDispatchMessageId, setDispatchNoReply, setSessionChatId, setSessionMessageId, } from "./session-state.js";
|
|
8
|
+
const LIVE_SESSION_STATUSES = new Set(["open", "active", "idle"]);
|
|
8
9
|
// Parse PRLL_SHUTDOWN_DEADLINE_MS (or any string env value) into a positive
|
|
9
10
|
// integer milliseconds value, or undefined if unset/invalid. Runtimes pass
|
|
10
11
|
// the result into ParallGatewayOptions.shutdownDeadlineMs; leaving it
|
|
@@ -524,6 +525,18 @@ export class ParallAgentGateway {
|
|
|
524
525
|
parent_session_id: parentSessionId,
|
|
525
526
|
runtime_ref: Object.keys(runtimeRef).length > 0 ? runtimeRef : undefined,
|
|
526
527
|
});
|
|
528
|
+
if (!LIVE_SESSION_STATUSES.has(session.status)) {
|
|
529
|
+
this.opts.log?.warn?.(`createAgentSession returned terminal session ${session.id} (${session.status}), resetting runtime for ${sessionKey}`);
|
|
530
|
+
this.sessionBindings.delete(sessionKey);
|
|
531
|
+
try {
|
|
532
|
+
await this.opts.onSessionStale?.(sessionKey);
|
|
533
|
+
}
|
|
534
|
+
catch (e) {
|
|
535
|
+
this.opts.log?.warn?.(`onSessionStale failed: ${e}`);
|
|
536
|
+
}
|
|
537
|
+
this.opts.log?.info?.(`stale session self-heal complete for ${sessionKey} — next dispatch will create a fresh session`);
|
|
538
|
+
throw new Error(`Agent session ${session.id} is terminal (${session.status})`);
|
|
539
|
+
}
|
|
527
540
|
const binding = {
|
|
528
541
|
sessionKey,
|
|
529
542
|
agentSessionId: session.id,
|
package/dist/index.d.ts
CHANGED
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,cAAc,oBAAoB,CAAC;AACnC,cAAc,cAAc,CAAC;AAC7B,cAAc,mBAAmB,CAAC;AAClC,cAAc,uBAAuB,CAAC;AACtC,cAAc,uBAAuB,CAAC;AACtC,cAAc,uBAAuB,CAAC;AACtC,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AACxD,cAAc,mBAAmB,CAAC;AAClC,cAAc,sBAAsB,CAAC;AACrC,OAAO,EAAE,eAAe,EAAE,oBAAoB,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAClF,YAAY,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,sBAAsB,CAAC;AACrC,cAAc,YAAY,CAAC;AAC3B,cAAc,oBAAoB,CAAC;AACnC,cAAc,cAAc,CAAC;AAC7B,cAAc,mBAAmB,CAAC;AAClC,cAAc,uBAAuB,CAAC;AACtC,cAAc,uBAAuB,CAAC;AACtC,cAAc,uBAAuB,CAAC;AACtC,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AACxD,cAAc,mBAAmB,CAAC;AAClC,cAAc,sBAAsB,CAAC;AACrC,OAAO,EAAE,eAAe,EAAE,oBAAoB,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAClF,YAAY,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export interface ProviderConfig {
|
|
2
|
+
llm_source?: string;
|
|
3
|
+
openai_api_key?: string;
|
|
4
|
+
openai_base_url?: string;
|
|
5
|
+
anthropic_auth_token?: string;
|
|
6
|
+
anthropic_base_url?: string;
|
|
7
|
+
}
|
|
8
|
+
export declare function llmSource(pc?: ProviderConfig): string;
|
|
9
|
+
export declare function clearAllProviderCreds(env: NodeJS.ProcessEnv): void;
|
|
10
|
+
export declare function parseProviderConfig(env: NodeJS.ProcessEnv): ProviderConfig | undefined;
|
|
11
|
+
//# sourceMappingURL=provider-config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"provider-config.d.ts","sourceRoot":"","sources":["../src/provider-config.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,cAAc;IAC7B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,kBAAkB,CAAC,EAAE,MAAM,CAAC;CAC7B;AAED,wBAAgB,SAAS,CAAC,EAAE,CAAC,EAAE,cAAc,GAAG,MAAM,CAWrD;AAED,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,MAAM,CAAC,UAAU,GAAG,IAAI,CAOlE;AAED,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,MAAM,CAAC,UAAU,GAAG,cAAc,GAAG,SAAS,CAQtF"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
export function llmSource(pc) {
|
|
2
|
+
if (pc?.llm_source)
|
|
3
|
+
return pc.llm_source;
|
|
4
|
+
if (pc?.openai_api_key ||
|
|
5
|
+
pc?.openai_base_url ||
|
|
6
|
+
pc?.anthropic_auth_token ||
|
|
7
|
+
pc?.anthropic_base_url) {
|
|
8
|
+
return "custom";
|
|
9
|
+
}
|
|
10
|
+
return "parall";
|
|
11
|
+
}
|
|
12
|
+
export function clearAllProviderCreds(env) {
|
|
13
|
+
delete env.ANTHROPIC_AUTH_TOKEN;
|
|
14
|
+
delete env.ANTHROPIC_BASE_URL;
|
|
15
|
+
delete env.ANTHROPIC_API_KEY;
|
|
16
|
+
delete env.OPENAI_API_KEY;
|
|
17
|
+
delete env.OPENAI_BASE_URL;
|
|
18
|
+
delete env.PRLL_CLAUDE_ALLOW_API_KEY;
|
|
19
|
+
}
|
|
20
|
+
export function parseProviderConfig(env) {
|
|
21
|
+
const raw = env.PRLL_PROVIDER_CONFIG?.trim();
|
|
22
|
+
if (!raw)
|
|
23
|
+
return undefined;
|
|
24
|
+
try {
|
|
25
|
+
return JSON.parse(raw);
|
|
26
|
+
}
|
|
27
|
+
catch (err) {
|
|
28
|
+
throw new Error(`Invalid PRLL_PROVIDER_CONFIG JSON: ${String(err)}`);
|
|
29
|
+
}
|
|
30
|
+
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@parall/agent-core",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.31.0",
|
|
4
4
|
"description": "Shared agent runtime orchestration helpers for Parall",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"repository": {
|
|
@@ -26,7 +26,7 @@
|
|
|
26
26
|
"src"
|
|
27
27
|
],
|
|
28
28
|
"dependencies": {
|
|
29
|
-
"@parall/sdk": "1.
|
|
29
|
+
"@parall/sdk": "1.31.0"
|
|
30
30
|
},
|
|
31
31
|
"devDependencies": {
|
|
32
32
|
"@types/node": "^22.0.0",
|
package/src/gateway-base.ts
CHANGED
|
@@ -40,6 +40,8 @@ import {
|
|
|
40
40
|
} from "./session-state.js";
|
|
41
41
|
import type { DispatchState, ParallEvent } from "./types.js";
|
|
42
42
|
|
|
43
|
+
const LIVE_SESSION_STATUSES = new Set(["open", "active", "idle"]);
|
|
44
|
+
|
|
43
45
|
type ChatInfo = {
|
|
44
46
|
type: Chat["type"];
|
|
45
47
|
name: string | null;
|
|
@@ -109,6 +111,7 @@ export type ParallGatewayOptions = {
|
|
|
109
111
|
onSessionBinding?: (state: { sessionKey: string; agentSessionId: string; runtimeSessionId: string; runtimeLaneKey: string }) => Promise<void> | void;
|
|
110
112
|
onBeforeDisconnect?: () => Promise<void> | void;
|
|
111
113
|
onNewSession?: (previousSessionId: string) => Promise<void> | void;
|
|
114
|
+
onSessionStale?: (sessionKey: string) => Promise<void> | void;
|
|
112
115
|
};
|
|
113
116
|
|
|
114
117
|
type AgentSessionBinding = {
|
|
@@ -659,6 +662,16 @@ export class ParallAgentGateway {
|
|
|
659
662
|
parent_session_id: parentSessionId,
|
|
660
663
|
runtime_ref: Object.keys(runtimeRef).length > 0 ? runtimeRef : undefined,
|
|
661
664
|
});
|
|
665
|
+
if (!LIVE_SESSION_STATUSES.has(session.status)) {
|
|
666
|
+
this.opts.log?.warn?.(
|
|
667
|
+
`createAgentSession returned terminal session ${session.id} (${session.status}), resetting runtime for ${sessionKey}`,
|
|
668
|
+
);
|
|
669
|
+
this.sessionBindings.delete(sessionKey);
|
|
670
|
+
try { await this.opts.onSessionStale?.(sessionKey); } catch (e) { this.opts.log?.warn?.(`onSessionStale failed: ${e}`); }
|
|
671
|
+
this.opts.log?.info?.(`stale session self-heal complete for ${sessionKey} — next dispatch will create a fresh session`);
|
|
672
|
+
throw new Error(`Agent session ${session.id} is terminal (${session.status})`);
|
|
673
|
+
}
|
|
674
|
+
|
|
662
675
|
const binding: AgentSessionBinding = {
|
|
663
676
|
sessionKey,
|
|
664
677
|
agentSessionId: session.id,
|
package/src/index.ts
CHANGED
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
export interface ProviderConfig {
|
|
2
|
+
llm_source?: string;
|
|
3
|
+
openai_api_key?: string;
|
|
4
|
+
openai_base_url?: string;
|
|
5
|
+
anthropic_auth_token?: string;
|
|
6
|
+
anthropic_base_url?: string;
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
export function llmSource(pc?: ProviderConfig): string {
|
|
10
|
+
if (pc?.llm_source) return pc.llm_source;
|
|
11
|
+
if (
|
|
12
|
+
pc?.openai_api_key ||
|
|
13
|
+
pc?.openai_base_url ||
|
|
14
|
+
pc?.anthropic_auth_token ||
|
|
15
|
+
pc?.anthropic_base_url
|
|
16
|
+
) {
|
|
17
|
+
return "custom";
|
|
18
|
+
}
|
|
19
|
+
return "parall";
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
export function clearAllProviderCreds(env: NodeJS.ProcessEnv): void {
|
|
23
|
+
delete env.ANTHROPIC_AUTH_TOKEN;
|
|
24
|
+
delete env.ANTHROPIC_BASE_URL;
|
|
25
|
+
delete env.ANTHROPIC_API_KEY;
|
|
26
|
+
delete env.OPENAI_API_KEY;
|
|
27
|
+
delete env.OPENAI_BASE_URL;
|
|
28
|
+
delete env.PRLL_CLAUDE_ALLOW_API_KEY;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
export function parseProviderConfig(env: NodeJS.ProcessEnv): ProviderConfig | undefined {
|
|
32
|
+
const raw = env.PRLL_PROVIDER_CONFIG?.trim();
|
|
33
|
+
if (!raw) return undefined;
|
|
34
|
+
try {
|
|
35
|
+
return JSON.parse(raw) as ProviderConfig;
|
|
36
|
+
} catch (err) {
|
|
37
|
+
throw new Error(`Invalid PRLL_PROVIDER_CONFIG JSON: ${String(err)}`);
|
|
38
|
+
}
|
|
39
|
+
}
|