@opengeni/worker-bundle 2.2.0-canary.36855269964001 → 2.2.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/activities/agent-run-admission.d.ts +1 -3
- package/dist/activities/agent-turn/admission.d.ts +3 -24
- package/dist/activities/agent-turn/claude-usage-observer.d.ts +1 -13
- package/dist/activities/agent-turn/run-credentials.d.ts +0 -2
- package/dist/activities/agent-turn/stream-attempt.d.ts +0 -1
- package/dist/activities/agent-turn/turn-context.d.ts +0 -1
- package/dist/activities/goals.d.ts +0 -8
- package/dist/activities/run-credentials.d.ts +2 -4
- package/dist/activities/types.d.ts +1 -1
- package/dist/{activities-control-YKXRDVMB.js → activities-control-MHNA3CYV.js} +66 -28
- package/dist/activities-control-MHNA3CYV.js.map +1 -0
- package/dist/{activities-turn-V37B7CQY.js → activities-turn-FQ5OO2WW.js} +197 -540
- package/dist/activities-turn-FQ5OO2WW.js.map +1 -0
- package/dist/{chunk-ZCCLJK3V.js → chunk-RZAAGRFQ.js} +65 -145
- package/dist/chunk-RZAAGRFQ.js.map +1 -0
- package/dist/index.js +1 -1
- package/dist/workflow-bundle.js +1 -1
- package/package.json +20 -20
- package/src/activities/agent-run-admission.ts +1 -17
- package/src/activities/agent-turn/admission.ts +1 -64
- package/src/activities/agent-turn/claim.ts +14 -56
- package/src/activities/agent-turn/claude-usage-observer.ts +1 -33
- package/src/activities/agent-turn/errors.ts +0 -46
- package/src/activities/agent-turn/failure-settlement.ts +0 -5
- package/src/activities/agent-turn/run-credentials.ts +3 -15
- package/src/activities/agent-turn/run.ts +3 -32
- package/src/activities/agent-turn/stream-attempt.ts +35 -138
- package/src/activities/agent-turn/tool-environment.ts +20 -13
- package/src/activities/agent-turn/turn-context.ts +0 -1
- package/src/activities/capabilities.ts +14 -52
- package/src/activities/goals.ts +78 -38
- package/src/activities/knowledge-indexing.ts +0 -29
- package/src/activities/run-credentials.ts +16 -22
- package/src/activities/scheduled-tasks.ts +0 -1
- package/src/activities/types.ts +0 -1
- package/src/activities/workspace-credential-provider.ts +0 -12
- package/src/sandbox-routing.ts +2 -4
- package/dist/activities/agent-turn/final-reply.d.ts +0 -18
- package/dist/activities/agent-turn/model-call-admission.d.ts +0 -15
- package/dist/activities-control-YKXRDVMB.js.map +0 -1
- package/dist/activities-turn-V37B7CQY.js.map +0 -1
- package/dist/chunk-ZCCLJK3V.js.map +0 -1
- package/src/activities/agent-turn/final-reply.ts +0 -46
- package/src/activities/agent-turn/model-call-admission.ts +0 -94
|
@@ -1,46 +0,0 @@
|
|
|
1
|
-
/** One durable, same-logical-turn handoff, not a retry of model/tool effects. */
|
|
2
|
-
export function finalReplyNudge(turnId: string) {
|
|
3
|
-
return {
|
|
4
|
-
type: "message" as const,
|
|
5
|
-
role: "developer" as const,
|
|
6
|
-
content: [
|
|
7
|
-
{
|
|
8
|
-
type: "input_text" as const,
|
|
9
|
-
text: `[Runtime final-reply handoff for turn ${turnId}]\nYour final user-facing answer was empty. Reply to the user now with the requested deliverable or a concise outcome and its retained artifact link. Goal evidence is a short ledger proof, not the answer, and goal_complete does not deliver a chat reply. Use the completed work and tool results already in history; do not repeat completed tools or restart the task. If this is a late child result after goal completion, integrate material new findings and deliver any still-missing handoff. Do not change the completed goal or invent a result.`,
|
|
10
|
-
},
|
|
11
|
-
],
|
|
12
|
-
};
|
|
13
|
-
}
|
|
14
|
-
|
|
15
|
-
export function hasFinalReplyNudge(history: readonly unknown[], turnId: string): boolean {
|
|
16
|
-
const text = finalReplyNudge(turnId).content[0]!.text;
|
|
17
|
-
return history.some((item) => {
|
|
18
|
-
const message = item as { role?: unknown; content?: unknown } | null;
|
|
19
|
-
return (
|
|
20
|
-
message?.role === "developer" &&
|
|
21
|
-
Array.isArray(message.content) &&
|
|
22
|
-
message.content.some(
|
|
23
|
-
(part: { type?: unknown; text?: unknown }) =>
|
|
24
|
-
part?.type === "input_text" && part.text === text,
|
|
25
|
-
)
|
|
26
|
-
);
|
|
27
|
-
});
|
|
28
|
-
}
|
|
29
|
-
|
|
30
|
-
export function needsFinalReply(input: {
|
|
31
|
-
output: unknown;
|
|
32
|
-
inputWaitYielded: boolean;
|
|
33
|
-
interrupted: boolean;
|
|
34
|
-
maintenance: boolean;
|
|
35
|
-
toolsExecuted: boolean;
|
|
36
|
-
completedGoal: boolean;
|
|
37
|
-
}): boolean {
|
|
38
|
-
return (
|
|
39
|
-
typeof input.output === "string" &&
|
|
40
|
-
input.output.trim().length === 0 &&
|
|
41
|
-
!input.inputWaitYielded &&
|
|
42
|
-
!input.interrupted &&
|
|
43
|
-
!input.maintenance &&
|
|
44
|
-
(input.toolsExecuted || input.completedGoal)
|
|
45
|
-
);
|
|
46
|
-
}
|
|
@@ -1,94 +0,0 @@
|
|
|
1
|
-
import type { StreamEvent } from "@openai/agents";
|
|
2
|
-
|
|
3
|
-
/** SDK producer/consumer rendezvous. Usage stays on the sole consumer writer. */
|
|
4
|
-
export function createModelCallAdmission(input: {
|
|
5
|
-
signal: AbortSignal;
|
|
6
|
-
admit: () => Promise<void>;
|
|
7
|
-
}) {
|
|
8
|
-
type Receipt = {
|
|
9
|
-
promise: Promise<void>;
|
|
10
|
-
resolve: () => void;
|
|
11
|
-
reject: (error: unknown) => void;
|
|
12
|
-
};
|
|
13
|
-
const receipts = new WeakMap<object, Receipt>();
|
|
14
|
-
const responseReceipts = new Map<string, Receipt>();
|
|
15
|
-
const pending = new Set<Receipt>();
|
|
16
|
-
const responseId = (event: unknown): string | null => {
|
|
17
|
-
const id = (event as { response?: { id?: unknown } } | null)?.response?.id;
|
|
18
|
-
return typeof id === "string" && id.length > 0 ? id : null;
|
|
19
|
-
};
|
|
20
|
-
let latest: Promise<void> = Promise.resolve();
|
|
21
|
-
let failure: unknown;
|
|
22
|
-
let failed = false;
|
|
23
|
-
let rejectHalted!: (error: unknown) => void;
|
|
24
|
-
const halted = new Promise<never>((_, reject) => {
|
|
25
|
-
rejectHalted = reject;
|
|
26
|
-
});
|
|
27
|
-
void halted.catch(() => undefined);
|
|
28
|
-
const fail = (error: unknown) => {
|
|
29
|
-
if (failed) return;
|
|
30
|
-
failed = true;
|
|
31
|
-
failure = error;
|
|
32
|
-
rejectHalted(error);
|
|
33
|
-
for (const receipt of pending) receipt.reject(error);
|
|
34
|
-
pending.clear();
|
|
35
|
-
responseReceipts.clear();
|
|
36
|
-
};
|
|
37
|
-
const abort = () => fail(input.signal.reason ?? new Error("Model stream cancelled"));
|
|
38
|
-
input.signal.addEventListener("abort", abort, { once: true });
|
|
39
|
-
if (input.signal.aborted) abort();
|
|
40
|
-
return {
|
|
41
|
-
beforeModelRequest: async () => {
|
|
42
|
-
await Promise.race([latest, halted]);
|
|
43
|
-
if (failed) throw failure;
|
|
44
|
-
// Even a settled predecessor does not grant admission to the next call.
|
|
45
|
-
await Promise.race([input.admit(), halted]);
|
|
46
|
-
if (failed) throw failure;
|
|
47
|
-
},
|
|
48
|
-
onModelResponse: (event: StreamEvent): Promise<void> => {
|
|
49
|
-
if (failed) return Promise.reject(failure);
|
|
50
|
-
const id = responseId(event);
|
|
51
|
-
const existing =
|
|
52
|
-
receipts.get(event) ??
|
|
53
|
-
(id ? responseReceipts.get(id) : undefined) ??
|
|
54
|
-
(!id && pending.size === 1 ? pending.values().next().value : undefined);
|
|
55
|
-
if (existing) return existing.promise;
|
|
56
|
-
let resolve!: () => void;
|
|
57
|
-
let reject!: (error: unknown) => void;
|
|
58
|
-
const promise = new Promise<void>((yes, no) => {
|
|
59
|
-
resolve = yes;
|
|
60
|
-
reject = no;
|
|
61
|
-
});
|
|
62
|
-
// The next model entry awaits this receipt; rejection can happen sooner.
|
|
63
|
-
void promise.catch(() => undefined);
|
|
64
|
-
const receipt = { promise, resolve, reject };
|
|
65
|
-
receipts.set(event, receipt);
|
|
66
|
-
if (id) responseReceipts.set(id, receipt);
|
|
67
|
-
pending.add(receipt);
|
|
68
|
-
latest = promise;
|
|
69
|
-
return promise;
|
|
70
|
-
},
|
|
71
|
-
settle: (event: { type: string; data?: unknown }) => {
|
|
72
|
-
if (event.type !== "raw_model_stream_event" || !event.data || typeof event.data !== "object")
|
|
73
|
-
return;
|
|
74
|
-
if ((event.data as { type?: unknown }).type !== "response_done") return;
|
|
75
|
-
const id = responseId(event.data);
|
|
76
|
-
// Runner retry normalization copies response_done. It cannot create a
|
|
77
|
-
// second response before this receipt permits the next model entry.
|
|
78
|
-
const receipt =
|
|
79
|
-
receipts.get(event.data) ??
|
|
80
|
-
(id ? responseReceipts.get(id) : undefined) ??
|
|
81
|
-
(pending.size === 1 ? pending.values().next().value : undefined);
|
|
82
|
-
if (!receipt) return;
|
|
83
|
-
pending.delete(receipt);
|
|
84
|
-
if (id) responseReceipts.delete(id);
|
|
85
|
-
receipt.resolve();
|
|
86
|
-
},
|
|
87
|
-
fail,
|
|
88
|
-
close: () => {
|
|
89
|
-
input.signal.removeEventListener("abort", abort);
|
|
90
|
-
if (pending.size > 0) fail(new Error("Model stream closed before response settlement"));
|
|
91
|
-
responseReceipts.clear();
|
|
92
|
-
},
|
|
93
|
-
};
|
|
94
|
-
}
|