@parall/agent-core 1.45.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.
- package/dist/channel-capability.d.ts +2 -0
- package/dist/channel-capability.d.ts.map +1 -1
- package/dist/channel-capability.js +15 -0
- package/dist/dispatch-adapter.d.ts +9 -0
- package/dist/dispatch-adapter.d.ts.map +1 -1
- package/dist/event-format.d.ts.map +1 -1
- package/dist/event-format.js +27 -7
- package/dist/fork-session-finalizer.d.ts +65 -0
- package/dist/fork-session-finalizer.d.ts.map +1 -0
- package/dist/fork-session-finalizer.js +70 -0
- package/dist/gateway-base.d.ts +47 -0
- package/dist/gateway-base.d.ts.map +1 -1
- package/dist/gateway-base.js +457 -200
- package/dist/gateway-lane-flow.d.ts.map +1 -1
- package/dist/gateway-lane-flow.js +13 -7
- package/dist/http-keepalive.d.ts +4 -0
- package/dist/http-keepalive.d.ts.map +1 -0
- package/dist/http-keepalive.js +33 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +6 -0
- package/dist/session-lifecycle.d.ts +198 -0
- package/dist/session-lifecycle.d.ts.map +1 -0
- package/dist/session-lifecycle.js +446 -0
- package/dist/skills/parall-clips.d.ts +1 -1
- package/dist/skills/parall-clips.d.ts.map +1 -1
- package/dist/skills/parall-clips.js +3 -0
- package/dist/step-persister.d.ts +66 -0
- package/dist/step-persister.d.ts.map +1 -0
- package/dist/step-persister.js +116 -0
- package/dist/step-retry-queue.d.ts +91 -0
- package/dist/step-retry-queue.d.ts.map +1 -0
- package/dist/step-retry-queue.js +259 -0
- package/package.json +3 -2
- package/src/channel-capability.ts +16 -0
- package/src/dispatch-adapter.ts +10 -0
- package/src/event-format.ts +27 -7
- package/src/fork-session-finalizer.ts +122 -0
- package/src/gateway-base.ts +487 -255
- package/src/gateway-lane-flow.ts +12 -7
- package/src/http-keepalive.ts +36 -0
- package/src/index.ts +6 -0
- package/src/session-lifecycle.ts +552 -0
- package/src/skills/parall-clips.ts +3 -0
- package/src/step-persister.ts +161 -0
- package/src/step-retry-queue.ts +296 -0
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import type { GatewayLogger } from './dispatch-adapter.js';
|
|
2
2
|
import type { AgentCapability } from './platform-config.js';
|
|
3
3
|
export declare const CAPABILITY_FEISHU_CLI = "feishu-cli";
|
|
4
|
+
export declare const CAPABILITY_SLACK_SEND = "slack-send";
|
|
5
|
+
export declare function channelCapabilityKeyFor(provider: string): string;
|
|
4
6
|
export declare const CHANNEL_POINTER_MAGIC = "parall channel capability pointer";
|
|
5
7
|
export declare function capabilityBinDir(stateDir: string): string;
|
|
6
8
|
export declare function channelExecEntryPath(): string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"channel-capability.d.ts","sourceRoot":"","sources":["../src/channel-capability.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAC3D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAoB5D,eAAO,MAAM,qBAAqB,eAAe,CAAC;AAMlD,eAAO,MAAM,qBAAqB,sCAAsC,CAAC;AAMzE,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAEzD;AAcD,wBAAgB,oBAAoB,IAAI,MAAM,CAK7C;AAED;;;;;GAKG;AACH,wBAAgB,8BAA8B,CAC5C,QAAQ,EAAE,MAAM,EAChB,YAAY,EAAE,eAAe,EAAE,EAC/B,GAAG,CAAC,EAAE,aAAa,GAClB,IAAI,CAMN;AAuED,wBAAgB,kBAAkB,CAChC,YAAY,EAAE,MAAM,EACpB,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,MAAM,GACd,MAAM,CAkBR;AAED,wBAAgB,gBAAgB,CAC9B,YAAY,EAAE,MAAM,EACpB,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,MAAM,GACd,MAAM,CAUR"}
|
|
1
|
+
{"version":3,"file":"channel-capability.d.ts","sourceRoot":"","sources":["../src/channel-capability.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAC3D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAoB5D,eAAO,MAAM,qBAAqB,eAAe,CAAC;AAOlD,eAAO,MAAM,qBAAqB,eAAe,CAAC;AAMlD,wBAAgB,uBAAuB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAGhE;AAMD,eAAO,MAAM,qBAAqB,sCAAsC,CAAC;AAMzE,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAEzD;AAcD,wBAAgB,oBAAoB,IAAI,MAAM,CAK7C;AAED;;;;;GAKG;AACH,wBAAgB,8BAA8B,CAC5C,QAAQ,EAAE,MAAM,EAChB,YAAY,EAAE,eAAe,EAAE,EAC/B,GAAG,CAAC,EAAE,aAAa,GAClB,IAAI,CAMN;AAuED,wBAAgB,kBAAkB,CAChC,YAAY,EAAE,MAAM,EACpB,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,MAAM,GACd,MAAM,CAkBR;AAED,wBAAgB,gBAAgB,CAC9B,YAAY,EAAE,MAAM,EACpB,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,MAAM,GACd,MAAM,CAUR"}
|
|
@@ -19,6 +19,21 @@ import { fileURLToPath } from 'node:url';
|
|
|
19
19
|
// to prevent; a constant pointer prevents it structurally.
|
|
20
20
|
// Design: docs/engineering-design/agent-capability-fragments-design.md §5.1.
|
|
21
21
|
export const CAPABILITY_FEISHU_CLI = 'feishu-cli';
|
|
22
|
+
// Slack's channel capability key (tier B): the affordance is the platform
|
|
23
|
+
// verb `parall slack send`, not a vendor CLI — there is no `slack-cli` and
|
|
24
|
+
// no PATH shim to reconcile. The key exists here so event-hint routing
|
|
25
|
+
// (gateway-base) can map provider → capability without pattern-matching on
|
|
26
|
+
// a `-cli` suffix slack will never have.
|
|
27
|
+
export const CAPABILITY_SLACK_SEND = 'slack-send';
|
|
28
|
+
// channelCapabilityKeyFor maps a channel provider to the capability key the
|
|
29
|
+
// server declares for it in agents.capabilities[] — the SSOT for the
|
|
30
|
+
// per-provider reply-affordance lookup. Unknown providers fall back to the
|
|
31
|
+
// `<provider>-cli` convention (the tier-A shape).
|
|
32
|
+
export function channelCapabilityKeyFor(provider) {
|
|
33
|
+
if (provider === 'slack')
|
|
34
|
+
return CAPABILITY_SLACK_SEND;
|
|
35
|
+
return `${provider}-cli`;
|
|
36
|
+
}
|
|
22
37
|
// Marker embedded in every generated pointer. channel-exec skips any PATH
|
|
23
38
|
// candidate whose head carries it, so a pointer (or a stray copy of one) can
|
|
24
39
|
// never be mistaken for the real vendor binary — self-recursion is
|
|
@@ -99,6 +99,15 @@ export type CleanupForkOpts = {
|
|
|
99
99
|
export interface DispatchAdapter {
|
|
100
100
|
/** Dispatch a Parall event to the runtime and emit normalized runtime events. */
|
|
101
101
|
dispatch(opts: DispatchOpts): AsyncIterable<RuntimeEvent>;
|
|
102
|
+
/**
|
|
103
|
+
* True when dispatch() presents `earlierEvents` to the model itself (e.g.
|
|
104
|
+
* OpenClaw maps them into native InboundHistory). The gateway then must
|
|
105
|
+
* NOT concatenate a buffered typed group's earlier bodies into
|
|
106
|
+
* bodyForAgent — the model would see every earlier member twice. Adapters
|
|
107
|
+
* without this flag (claude/codex) only persist earlier events as input
|
|
108
|
+
* steps, so the concatenated body is the model's only route to them.
|
|
109
|
+
*/
|
|
110
|
+
earlierEventsInPrompt?: boolean;
|
|
102
111
|
/**
|
|
103
112
|
* Inject a user message into the running runtime mid-turn so it steers
|
|
104
113
|
* immediately, rather than waiting for the current turn to complete.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dispatch-adapter.d.ts","sourceRoot":"","sources":["../src/dispatch-adapter.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"dispatch-adapter.d.ts","sourceRoot":"","sources":["../src/dispatch-adapter.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"event-format.d.ts","sourceRoot":"","sources":["../src/event-format.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAS1D,wBAAgB,cAAc,CAAC,KAAK,EAAE,WAAW,GAAG,MAAM,CAkIzD;AAED,wBAAgB,2BAA2B,CAAC,KAAK,EAAE,WAAW,GAAG,MAAM,CAEtE;
|
|
1
|
+
{"version":3,"file":"event-format.d.ts","sourceRoot":"","sources":["../src/event-format.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAS1D,wBAAgB,cAAc,CAAC,KAAK,EAAE,WAAW,GAAG,MAAM,CAkIzD;AAED,wBAAgB,2BAA2B,CAAC,KAAK,EAAE,WAAW,GAAG,MAAM,CAEtE;AAoFD,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,WAAW,GAAG,MAAM,CAK/D;AAED,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,UAAU,EAAE,GAAG,MAAM,CAkBnE"}
|
package/dist/event-format.js
CHANGED
|
@@ -174,14 +174,34 @@ function buildSendMessageHint(event) {
|
|
|
174
174
|
return `\n<system-reminder>To communicate, use the CLI: \`parall messages send\` / \`parall dm\`. Your plain text output is not delivered.</system-reminder>`;
|
|
175
175
|
}
|
|
176
176
|
if (event.type === 'channel_message') {
|
|
177
|
-
// Single-path routing (multi-channel-architecture-design §6): with
|
|
178
|
-
//
|
|
179
|
-
// reply path
|
|
180
|
-
//
|
|
181
|
-
//
|
|
182
|
-
// live grant implies Feishu even when the cosmetic provider-label lookup
|
|
183
|
-
// failed (event.channelProvider undefined).
|
|
177
|
+
// Single-path routing (multi-channel-architecture-design §6/§8.2): with
|
|
178
|
+
// the channel capability granted, that provider's affordance is THE
|
|
179
|
+
// reply path — feishu (tier A) = the vendor CLI on PATH, slack (tier B)
|
|
180
|
+
// = the `parall slack send` platform verb; without a grant there is no
|
|
181
|
+
// outbound path at all — say so instead of pointing at a retired clip.
|
|
184
182
|
if (event.channelCliCapable) {
|
|
183
|
+
if (event.channelProvider === 'slack') {
|
|
184
|
+
const channelArg = event.channelExternalConversationId
|
|
185
|
+
? ` --channel "${event.channelExternalConversationId}"`
|
|
186
|
+
: ' --channel <conversation id from this event>';
|
|
187
|
+
// Anchor the reply onto THIS inbound message whenever its id is
|
|
188
|
+
// known: in channels --reply-to is REQUIRED (the send lands in that
|
|
189
|
+
// message's thread), in DMs it is accepted and harmless (linear).
|
|
190
|
+
const replyTo = event.channelExternalMessageId
|
|
191
|
+
? ` --reply-to "${event.channelExternalMessageId}"`
|
|
192
|
+
: '';
|
|
193
|
+
return `\n<system-reminder>To reply, use the platform verb: \`parall slack send${channelArg}${replyTo} --text <your reply>\`. In channels --reply-to is REQUIRED (the reply lands in that message's thread); in DMs it is optional (DMs are linear). \`parall slack send\` is the ONLY outbound path — your plain text output is NOT delivered to the external conversation.</system-reminder>`;
|
|
194
|
+
}
|
|
195
|
+
if (!event.channelProvider) {
|
|
196
|
+
// Cosmetic provider-label miss (the connection lookup transiently
|
|
197
|
+
// failed): a live grant means outbound IS available, but naming one
|
|
198
|
+
// vendor's command here could point a Slack conversation at
|
|
199
|
+
// lark-cli (or vice versa). Stay vendor-neutral and defer to the
|
|
200
|
+
// capability declaration already in the system prompt.
|
|
201
|
+
return `\n<system-reminder>To reply, use the channel capability granted in your system prompt — for Feishu conversations that is \`lark-cli im\`, for Slack it is \`parall slack send\` (pass the message id from this event as --reply-to). That capability is the ONLY outbound path — your plain text output is NOT delivered to the external conversation.</system-reminder>`;
|
|
202
|
+
}
|
|
203
|
+
// Known non-slack provider → the tier-A vendor-CLI shape (feishu is
|
|
204
|
+
// the only tier-A channel today).
|
|
185
205
|
const convRef = event.channelExternalConversationId
|
|
186
206
|
? `chat_id "${event.channelExternalConversationId}"`
|
|
187
207
|
: 'the conversation id named in this event';
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import type { SessionCloseOutcome, SessionCloseResult } from './session-lifecycle.js';
|
|
2
|
+
import type { StepDrainOutcome } from './step-retry-queue.js';
|
|
3
|
+
/**
|
|
4
|
+
* ForkSessionFinalizer — the application use case for NORMAL fork teardown.
|
|
5
|
+
*
|
|
6
|
+
* The gateway used to inline this as `dropSession() + closeSession() +
|
|
7
|
+
* delete binding`, which destroyed steps parked for retry (dropSession) and
|
|
8
|
+
* released ownership after one close attempt regardless of whether the close
|
|
9
|
+
* actually landed. The finalizer owns the ordered sequence instead:
|
|
10
|
+
*
|
|
11
|
+
* seal step writes (no new steps once finalization begins)
|
|
12
|
+
* → drain pending/in-flight step writes (every parked step ACKed —
|
|
13
|
+
* or settled by the queue's loud age/cap policy — before close)
|
|
14
|
+
* → close the server session (structured outcome; ownership held
|
|
15
|
+
* through `retrying` until the close reaches a terminal fate)
|
|
16
|
+
* → release the session binding (the caller-supplied `release`)
|
|
17
|
+
*
|
|
18
|
+
* Invariants: normal finalization NEVER calls the destructive dropSession on
|
|
19
|
+
* the step queue; `closed` is never sent while step writes are pending; the
|
|
20
|
+
* binding is released only after the close reached a terminal fate. A
|
|
21
|
+
* server-terminal signal during drain or close (`stale`) means the session
|
|
22
|
+
* is already dead server-side: local state is cleaned and released without a
|
|
23
|
+
* close write. A permanent close failure is released too — but LOUDLY: the
|
|
24
|
+
* server-side session may remain non-closed until superseded; a durable fix
|
|
25
|
+
* is the #1879 outbox/turn-fence work, not silent retries here.
|
|
26
|
+
*
|
|
27
|
+
* `agent.new_session` is NOT this use case — the server has already closed
|
|
28
|
+
* every session, so the gateway's dropAllSessions() forced-reset semantics
|
|
29
|
+
* are correct there.
|
|
30
|
+
*
|
|
31
|
+
* Process-local, best-effort scope (same as the retry queue): a process exit
|
|
32
|
+
* mid-finalization loses whatever is still parked.
|
|
33
|
+
*/
|
|
34
|
+
export type ForkFinalizeOutcome = SessionCloseOutcome;
|
|
35
|
+
export type ForkSessionFinalizerOpts = {
|
|
36
|
+
steps: {
|
|
37
|
+
seal(sessionId: string): void;
|
|
38
|
+
unseal(sessionId: string): void;
|
|
39
|
+
drainSession(sessionId: string): Promise<StepDrainOutcome>;
|
|
40
|
+
};
|
|
41
|
+
lifecycle: {
|
|
42
|
+
closeSession(sessionId: string): Promise<SessionCloseResult>;
|
|
43
|
+
dropSession(sessionId: string): void;
|
|
44
|
+
};
|
|
45
|
+
log?: {
|
|
46
|
+
warn: (msg: string) => void;
|
|
47
|
+
error?: (msg: string) => void;
|
|
48
|
+
};
|
|
49
|
+
};
|
|
50
|
+
export declare class ForkSessionFinalizer {
|
|
51
|
+
private readonly opts;
|
|
52
|
+
private readonly active;
|
|
53
|
+
constructor(opts: ForkSessionFinalizerOpts);
|
|
54
|
+
/** True while this finalizer still owns the session's teardown. */
|
|
55
|
+
isFinalizing(sessionId: string): boolean;
|
|
56
|
+
activeCount(): number;
|
|
57
|
+
/**
|
|
58
|
+
* Run the ordered teardown for one fork session. `release` is invoked
|
|
59
|
+
* exactly once, only when finalization reaches a terminal state — never
|
|
60
|
+
* while step writes are pending or a close retry is still owned here.
|
|
61
|
+
*/
|
|
62
|
+
finalize(sessionId: string, release: () => void): Promise<ForkFinalizeOutcome>;
|
|
63
|
+
private run;
|
|
64
|
+
}
|
|
65
|
+
//# sourceMappingURL=fork-session-finalizer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fork-session-finalizer.d.ts","sourceRoot":"","sources":["../src/fork-session-finalizer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AACtF,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAE9D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AAEH,MAAM,MAAM,mBAAmB,GAAG,mBAAmB,CAAC;AAEtD,MAAM,MAAM,wBAAwB,GAAG;IACrC,KAAK,EAAE;QACL,IAAI,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;QAC9B,MAAM,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;QAChC,YAAY,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAAC;KAC5D,CAAC;IACF,SAAS,EAAE;QACT,YAAY,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAAC;QAC7D,WAAW,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;KACtC,CAAC;IACF,GAAG,CAAC,EAAE;QAAE,IAAI,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;QAAC,KAAK,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAA;KAAE,CAAC;CACtE,CAAC;AAEF,qBAAa,oBAAoB;IAKnB,OAAO,CAAC,QAAQ,CAAC,IAAI;IAFjC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAmD;gBAE7C,IAAI,EAAE,wBAAwB;IAE3D,mEAAmE;IACnE,YAAY,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO;IAIxC,WAAW,IAAI,MAAM;IAIrB;;;;OAIG;IACH,QAAQ,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,IAAI,GAAG,OAAO,CAAC,mBAAmB,CAAC;YAUhE,GAAG;CAwClB"}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
export class ForkSessionFinalizer {
|
|
2
|
+
opts;
|
|
3
|
+
// Ownership ledger: a session being finalized has exactly one finalization
|
|
4
|
+
// in flight; a duplicate finalize() joins it (cleanupFork-style idempotence).
|
|
5
|
+
active = new Map();
|
|
6
|
+
constructor(opts) {
|
|
7
|
+
this.opts = opts;
|
|
8
|
+
}
|
|
9
|
+
/** True while this finalizer still owns the session's teardown. */
|
|
10
|
+
isFinalizing(sessionId) {
|
|
11
|
+
return this.active.has(sessionId);
|
|
12
|
+
}
|
|
13
|
+
activeCount() {
|
|
14
|
+
return this.active.size;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Run the ordered teardown for one fork session. `release` is invoked
|
|
18
|
+
* exactly once, only when finalization reaches a terminal state — never
|
|
19
|
+
* while step writes are pending or a close retry is still owned here.
|
|
20
|
+
*/
|
|
21
|
+
finalize(sessionId, release) {
|
|
22
|
+
const existing = this.active.get(sessionId);
|
|
23
|
+
if (existing)
|
|
24
|
+
return existing;
|
|
25
|
+
const run = this.run(sessionId, release).finally(() => {
|
|
26
|
+
this.active.delete(sessionId);
|
|
27
|
+
});
|
|
28
|
+
this.active.set(sessionId, run);
|
|
29
|
+
return run;
|
|
30
|
+
}
|
|
31
|
+
async run(sessionId, release) {
|
|
32
|
+
this.opts.steps.seal(sessionId);
|
|
33
|
+
try {
|
|
34
|
+
const drained = await this.opts.steps.drainSession(sessionId);
|
|
35
|
+
if (drained === 'dropped') {
|
|
36
|
+
// Server-terminal (stale 409 / new_session) — the session is already
|
|
37
|
+
// dead server-side; a close write would only 409. Clean up locally.
|
|
38
|
+
this.opts.lifecycle.dropSession(sessionId);
|
|
39
|
+
release();
|
|
40
|
+
return 'stale';
|
|
41
|
+
}
|
|
42
|
+
if (drained === 'disposed') {
|
|
43
|
+
// Shutdown raced the finalization; the gateway's flush/dispose path
|
|
44
|
+
// owns whatever remains.
|
|
45
|
+
release();
|
|
46
|
+
return 'disposed';
|
|
47
|
+
}
|
|
48
|
+
const close = await this.opts.lifecycle.closeSession(sessionId);
|
|
49
|
+
const terminal = close.outcome === 'retrying' ? await close.terminal : close.outcome;
|
|
50
|
+
if (terminal === 'permanent_failure') {
|
|
51
|
+
// Explicit failure policy: release local ownership, but never
|
|
52
|
+
// silently — the server-side session may sit non-closed until a new
|
|
53
|
+
// session supersedes it. Process-local retries are exhausted; the
|
|
54
|
+
// durable answer is the #1879 outbox/turn-fence work.
|
|
55
|
+
const msg = `fork session ${sessionId} close failed permanently after retries; ` +
|
|
56
|
+
'releasing local ownership — the server-side session may remain ' +
|
|
57
|
+
'non-closed until superseded (tracked structurally in #1879)';
|
|
58
|
+
(this.opts.log?.error ?? this.opts.log?.warn)?.(msg);
|
|
59
|
+
}
|
|
60
|
+
release();
|
|
61
|
+
return terminal;
|
|
62
|
+
}
|
|
63
|
+
finally {
|
|
64
|
+
// Reclaim the seal in every exit path — the sealed set must not grow
|
|
65
|
+
// on a daemon churning fork sessions. Late writes against the (now
|
|
66
|
+
// closed/stale) session are rejected server-side with a 409.
|
|
67
|
+
this.opts.steps.unseal(sessionId);
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
}
|
package/dist/gateway-base.d.ts
CHANGED
|
@@ -51,6 +51,10 @@ export type ParallGatewayOptions = {
|
|
|
51
51
|
shutdownDeadlineMs?: number;
|
|
52
52
|
forkDeadlineMs?: number;
|
|
53
53
|
dispatchDeadlineMs?: number;
|
|
54
|
+
/** Test port: step retry-queue backoff override (StepRetryQueue schedule). */
|
|
55
|
+
stepRetryDelaysMs?: number[];
|
|
56
|
+
/** Test port: session lifecycle reconcile backoff override. */
|
|
57
|
+
lifecycleRetryDelaysMs?: number[];
|
|
54
58
|
contextFilePathForSession?: (sessionKey: string) => string | undefined;
|
|
55
59
|
/** @deprecated Use contextFilePathForSession. Kept for runtimes that haven't migrated. */
|
|
56
60
|
stepIdFilePathForSession?: (sessionKey: string) => string | undefined;
|
|
@@ -88,6 +92,27 @@ export type ParallGatewayOptions = {
|
|
|
88
92
|
export declare function parseShutdownDeadlineMs(raw: string | undefined): number | undefined;
|
|
89
93
|
export declare function parseForkDeadlineMs(raw: string | undefined): number | undefined;
|
|
90
94
|
export declare function parseDispatchDeadlineMs(raw: string | undefined): number | undefined;
|
|
95
|
+
/**
|
|
96
|
+
* Stable input-step idempotency key: a re-delivered event (catch-up replay,
|
|
97
|
+
* lane re-drive) replays to the same row instead of duplicating it.
|
|
98
|
+
*
|
|
99
|
+
* Message-shaped events key on the message id — it is the logical identity
|
|
100
|
+
* and stays stable across delivery paths (a live WS delivery carries no
|
|
101
|
+
* dispatchEventId; its catch-up replay does — keying on the WorkItem there
|
|
102
|
+
* would split the two into different keys and duplicate the input step).
|
|
103
|
+
*
|
|
104
|
+
* Typed events key on the WorkItem id instead: their messageId can be
|
|
105
|
+
* REUSED across distinct work items — task events carry the task id for
|
|
106
|
+
* both task_assign and a later task_update, so keying on messageId would
|
|
107
|
+
* silently dedupe the second, legitimate, input step away. For the same
|
|
108
|
+
* reason a typed event WITHOUT a WorkItem id (legacy server) must NOT fall
|
|
109
|
+
* back to messageId — it gets a random UUID per logical step instead. The
|
|
110
|
+
* key rides the CreateAgentStepRequest object, so the same UUID is reused
|
|
111
|
+
* across that step's HTTP retries and queue redrives (replay-safe), while
|
|
112
|
+
* a redelivered legacy event writes a fresh row (rare duplicate beats
|
|
113
|
+
* silently losing a legitimate step). See protocol-vectors/agent-steps.json.
|
|
114
|
+
*/
|
|
115
|
+
export declare function inputStepIdempotencyKey(event: Pick<ParallEvent, 'type' | 'dispatchEventId' | 'messageId'>): string;
|
|
91
116
|
export declare class ParallAgentGateway {
|
|
92
117
|
private readonly opts;
|
|
93
118
|
private readonly chatInfoMap;
|
|
@@ -106,11 +131,21 @@ export declare class ParallAgentGateway {
|
|
|
106
131
|
private heartbeatTimer;
|
|
107
132
|
private lastHeartbeatAt;
|
|
108
133
|
private draining;
|
|
134
|
+
/**
|
|
135
|
+
* Typed WorkItem ids whose drain group left the buffer but has not settled
|
|
136
|
+
* yet. isBufferedTypedWorkItem treats them as still buffered — a re-drive
|
|
137
|
+
* claim taken inside this window would turn the drain's fence-less close
|
|
138
|
+
* stale (its dedupe cleared, its release re-driving handled work) (#1149).
|
|
139
|
+
*/
|
|
140
|
+
private drainingTypedIds;
|
|
109
141
|
private shuttingDown;
|
|
110
142
|
private inFlightDispatches;
|
|
111
143
|
private drainResolvers;
|
|
112
144
|
private pendingRestartNotification;
|
|
113
145
|
private readonly laneLedger?;
|
|
146
|
+
private readonly stepPersister;
|
|
147
|
+
private readonly sessionLifecycle;
|
|
148
|
+
private readonly forkFinalizer;
|
|
114
149
|
private ledgerDisabled;
|
|
115
150
|
private mainCurrentGroupKey?;
|
|
116
151
|
private readonly DISPATCHED_MESSAGES_CAP;
|
|
@@ -168,6 +203,18 @@ export declare class ParallAgentGateway {
|
|
|
168
203
|
private dispatchLaneGroup;
|
|
169
204
|
private consumeTypedDispatch;
|
|
170
205
|
private ackDispatchEvent;
|
|
206
|
+
/**
|
|
207
|
+
* True while a typed WorkItem's event copy sits in the main buffer waiting
|
|
208
|
+
* for the drain. A buffered copy keeps its hot-path dedupe claim: the drain
|
|
209
|
+
* owns its settlement, and the released row's re-drive must short-circuit
|
|
210
|
+
* BEFORE claiming (a duplicate claim opens a lane that races the drain's
|
|
211
|
+
* fence-less by-id close — 409 STALE, and the claimant's release would
|
|
212
|
+
* re-drive already-handled work) (#1149). The claim's lifetime equals the
|
|
213
|
+
* buffer stay: settlement clears it on every drain outcome — success,
|
|
214
|
+
* failure, or a thrown turn.
|
|
215
|
+
*/
|
|
216
|
+
private isBufferedTypedWorkItem;
|
|
217
|
+
private isTypedEventBuffered;
|
|
171
218
|
private clearTypedDispatchDedupe;
|
|
172
219
|
private buildDispatchContext;
|
|
173
220
|
private isSessionNotLiveError;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gateway-base.d.ts","sourceRoot":"","sources":["../src/gateway-base.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"gateway-base.d.ts","sourceRoot":"","sources":["../src/gateway-base.ts"],"names":[],"mappings":"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"}
|