@sensigo/realm-cli 0.15.0 → 0.17.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/agent/gate/slack-gate-notifier.d.ts +0 -8
- package/dist/agent/gate/slack-gate-notifier.d.ts.map +1 -1
- package/dist/agent/gate/slack-gate-notifier.js +66 -11
- package/dist/agent/gate/slack-gate-notifier.js.map +1 -1
- package/dist/agent/providers/agent-utils.d.ts +22 -4
- package/dist/agent/providers/agent-utils.d.ts.map +1 -1
- package/dist/agent/providers/agent-utils.js +106 -13
- package/dist/agent/providers/agent-utils.js.map +1 -1
- package/dist/agent/providers/anthropic-provider.d.ts.map +1 -1
- package/dist/agent/providers/anthropic-provider.js +93 -35
- package/dist/agent/providers/anthropic-provider.js.map +1 -1
- package/dist/agent/providers/openai-provider.d.ts.map +1 -1
- package/dist/agent/providers/openai-provider.js +20 -24
- package/dist/agent/providers/openai-provider.js.map +1 -1
- package/dist/agent/providers/openai-reasoning-provider.d.ts.map +1 -1
- package/dist/agent/providers/openai-reasoning-provider.js +18 -22
- package/dist/agent/providers/openai-reasoning-provider.js.map +1 -1
- package/dist/agent/run-agent.d.ts.map +1 -1
- package/dist/agent/run-agent.js +58 -6
- package/dist/agent/run-agent.js.map +1 -1
- package/dist/commands/list.d.ts.map +1 -1
- package/dist/commands/list.js +45 -2
- package/dist/commands/list.js.map +1 -1
- package/dist/commands/migrate.d.ts.map +1 -1
- package/dist/commands/migrate.js +4 -3
- package/dist/commands/migrate.js.map +1 -1
- package/dist/commands/reclaim.d.ts +23 -0
- package/dist/commands/reclaim.d.ts.map +1 -0
- package/dist/commands/reclaim.js +224 -0
- package/dist/commands/reclaim.js.map +1 -0
- package/dist/commands/run.d.ts.map +1 -1
- package/dist/commands/run.js +7 -1
- package/dist/commands/run.js.map +1 -1
- package/dist/commands/validate.d.ts.map +1 -1
- package/dist/commands/validate.js +29 -3
- package/dist/commands/validate.js.map +1 -1
- package/dist/commands-registry.d.ts.map +1 -1
- package/dist/commands-registry.js +2 -0
- package/dist/commands-registry.js.map +1 -1
- package/dist/index.js +1 -1
- package/package.json +4 -4
|
@@ -54,14 +54,6 @@ export interface BidirectionalGateParams {
|
|
|
54
54
|
*/
|
|
55
55
|
registry?: ExtensionRegistry;
|
|
56
56
|
}
|
|
57
|
-
/**
|
|
58
|
-
* Handles a gate using Slack bidirectional resolution:
|
|
59
|
-
* - Events API (when signing secret is present) or Socket Mode (when app token is present)
|
|
60
|
-
* - LLM intent interpretation of Slack replies
|
|
61
|
-
* - Reminder and escalation timers
|
|
62
|
-
* - Falls back to store polling for terminal-command gate resolution
|
|
63
|
-
* Exported for testing.
|
|
64
|
-
*/
|
|
65
57
|
export declare function handleBidirectionalGate(params: BidirectionalGateParams): Promise<void>;
|
|
66
58
|
export interface SlackGateHandlerConfig {
|
|
67
59
|
store: RunStore;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"slack-gate-notifier.d.ts","sourceRoot":"","sources":["../../../src/agent/gate/slack-gate-notifier.ts"],"names":[],"mappings":"AAIA,OAAO,EAEL,KAAK,QAAQ,EACb,KAAK,kBAAkB,EACvB,KAAK,WAAW,EAChB,KAAK,iBAAiB,EACvB,MAAM,gBAAgB,CAAC;AACxB,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAC;AAIhE;;;;GAIG;AACH,wBAAgB,yBAAyB,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAgBlF;AAED;;;;GAIG;AACH,wBAAsB,2BAA2B,CAC/C,UAAU,EAAE,MAAM,EAClB,IAAI,EAAE,WAAW,EACjB,KAAK,EAAE,MAAM,GACZ,OAAO,CAAC,IAAI,CAAC,CAiCf;AAED;;;;GAIG;AACH,wBAAsB,cAAc,CAClC,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,WAAW,EACjB,KAAK,EAAE,MAAM,GACZ,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAgC7B;AAED;;;;GAIG;AACH,wBAAsB,cAAc,CAClC,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,MAAM,GACX,OAAO,CAAC,IAAI,CAAC,CAaf;AAED;;;;GAIG;AACH,wBAAgB,uBAAuB,CACrC,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,WAAW,EACjB,kBAAkB,EAAE,MAAM,EAC1B,qBAAqB,EAAE,MAAM,GAC5B,MAAM,IAAI,CAyBZ;AAED,2EAA2E;AAC3E,MAAM,WAAW,uBAAuB;IACtC,IAAI,EAAE,WAAW,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,kBAAkB,CAAC;IAC/B,KAAK,EAAE,QAAQ,CAAC;IAChB,QAAQ,EAAE,WAAW,CAAC;IACtB,aAAa,EAAE,MAAM,CAAC;IACtB,cAAc,EAAE,MAAM,CAAC;IACvB,YAAY,EAAE,MAAM,GAAG,SAAS,CAAC;IACjC,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,eAAe,EAAE,MAAM,CAAC;IACxB,0GAA0G;IAC1G,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,sBAAsB,EAAE,MAAM,CAAC;IAC/B,yBAAyB,EAAE,MAAM,CAAC;IAClC,cAAc,EAAE,MAAM,CAAC;IACvB;;;;OAIG;IACH,QAAQ,CAAC,EAAE,iBAAiB,CAAC;CAC9B;
|
|
1
|
+
{"version":3,"file":"slack-gate-notifier.d.ts","sourceRoot":"","sources":["../../../src/agent/gate/slack-gate-notifier.ts"],"names":[],"mappings":"AAIA,OAAO,EAEL,KAAK,QAAQ,EACb,KAAK,kBAAkB,EACvB,KAAK,WAAW,EAChB,KAAK,iBAAiB,EACvB,MAAM,gBAAgB,CAAC;AACxB,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAC;AAIhE;;;;GAIG;AACH,wBAAgB,yBAAyB,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAgBlF;AAED;;;;GAIG;AACH,wBAAsB,2BAA2B,CAC/C,UAAU,EAAE,MAAM,EAClB,IAAI,EAAE,WAAW,EACjB,KAAK,EAAE,MAAM,GACZ,OAAO,CAAC,IAAI,CAAC,CAiCf;AAED;;;;GAIG;AACH,wBAAsB,cAAc,CAClC,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,WAAW,EACjB,KAAK,EAAE,MAAM,GACZ,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAgC7B;AAED;;;;GAIG;AACH,wBAAsB,cAAc,CAClC,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,MAAM,GACX,OAAO,CAAC,IAAI,CAAC,CAaf;AAED;;;;GAIG;AACH,wBAAgB,uBAAuB,CACrC,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,WAAW,EACjB,kBAAkB,EAAE,MAAM,EAC1B,qBAAqB,EAAE,MAAM,GAC5B,MAAM,IAAI,CAyBZ;AAED,2EAA2E;AAC3E,MAAM,WAAW,uBAAuB;IACtC,IAAI,EAAE,WAAW,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,kBAAkB,CAAC;IAC/B,KAAK,EAAE,QAAQ,CAAC;IAChB,QAAQ,EAAE,WAAW,CAAC;IACtB,aAAa,EAAE,MAAM,CAAC;IACtB,cAAc,EAAE,MAAM,CAAC;IACvB,YAAY,EAAE,MAAM,GAAG,SAAS,CAAC;IACjC,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,eAAe,EAAE,MAAM,CAAC;IACxB,0GAA0G;IAC1G,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,sBAAsB,EAAE,MAAM,CAAC;IAC/B,yBAAyB,EAAE,MAAM,CAAC;IAClC,cAAc,EAAE,MAAM,CAAC;IACvB;;;;OAIG;IACH,QAAQ,CAAC,EAAE,iBAAiB,CAAC;CAC9B;AAmBD,wBAAsB,uBAAuB,CAAC,MAAM,EAAE,uBAAuB,GAAG,OAAO,CAAC,IAAI,CAAC,CA2L5F;AAiCD,MAAM,WAAW,sBAAsB;IACrC,KAAK,EAAE,QAAQ,CAAC;IAChB,UAAU,EAAE,kBAAkB,CAAC;IAC/B,kEAAkE;IAClE,QAAQ,EAAE,WAAW,CAAC;IACtB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,gGAAgG;IAChG,QAAQ,CAAC,EAAE,iBAAiB,CAAC;CAC9B;AAED;;;GAGG;AACH,wBAAgB,sBAAsB,CACpC,MAAM,EAAE,sBAAsB,GAC7B,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,WAAW,KAAK,OAAO,CAAC,IAAI,CAAC,CAmCrD"}
|
|
@@ -151,10 +151,28 @@ export function startGateReminderTimers(botToken, channelId, threadTs, gate, rem
|
|
|
151
151
|
* - Falls back to store polling for terminal-command gate resolution
|
|
152
152
|
* Exported for testing.
|
|
153
153
|
*/
|
|
154
|
+
/**
|
|
155
|
+
* Bounded ceiling for the in-flight candidate drain in {@link handleBidirectionalGate}'s finally.
|
|
156
|
+
* `postSlackReply`'s fetch has no signal/timeout, so an unbounded drain would stall runAgent on a
|
|
157
|
+
* hung Slack. 2s comfortably covers a healthy postSlackReply flush (~100-300ms); on a hung Slack +
|
|
158
|
+
* run-completing gate it exits after 2s with the same reply drop as today (the drop is unchanged,
|
|
159
|
+
* only the latency ceiling is added — never a stall).
|
|
160
|
+
*/
|
|
161
|
+
const DRAIN_TIMEOUT_MS = 2000;
|
|
154
162
|
export async function handleBidirectionalGate(params) {
|
|
155
163
|
const { gate, runId, definition, store, provider: _provider, slackBotToken, slackChannelId, gateThreadTs, slackSigningSecret, slackEventsPort, slackAppToken, gateReminderIntervalMs, gateEscalationThresholdMs, pollIntervalMs, registry, } = params;
|
|
156
164
|
let clarificationCount = 0;
|
|
165
|
+
// Posted at most once per gate — a repeatedly-failing submit must not hammer Slack.
|
|
166
|
+
let submitErrorPosted = false;
|
|
157
167
|
const abortController = new AbortController();
|
|
168
|
+
// Track in-flight candidate processing so the finally can drain it (bounded) before returning —
|
|
169
|
+
// otherwise a run-completing gate can process.exit() and truncate the confirmation reply that is
|
|
170
|
+
// still in flight inside the un-awaited processCandidate chain.
|
|
171
|
+
const inFlight = new Set();
|
|
172
|
+
const track = (p) => {
|
|
173
|
+
inFlight.add(p);
|
|
174
|
+
void p.finally(() => inFlight.delete(p));
|
|
175
|
+
};
|
|
158
176
|
const processCandidate = async (text) => {
|
|
159
177
|
if (abortController.signal.aborted)
|
|
160
178
|
return;
|
|
@@ -163,22 +181,42 @@ export async function handleBidirectionalGate(params) {
|
|
|
163
181
|
const normalised = text.trim().toLowerCase();
|
|
164
182
|
const exactMatch = gate.choices.find((c) => c.toLowerCase() === normalised);
|
|
165
183
|
if (exactMatch !== undefined) {
|
|
184
|
+
// Surface a submit failure to the operator ONCE. Deliberately does NOT abort()/resolve — the
|
|
185
|
+
// gate stays open so the poll loop keeps waiting and the operator can retry or use the terminal
|
|
186
|
+
// fallback. Runs inside processCandidate → tracked + drained (§track), so it is guaranteed sent
|
|
187
|
+
// before handleBidirectionalGate returns.
|
|
188
|
+
const postSubmitError = async (detail) => {
|
|
189
|
+
console.warn(`Gate response submission failed: ${detail}`);
|
|
190
|
+
if (gateThreadTs !== undefined && !submitErrorPosted) {
|
|
191
|
+
submitErrorPosted = true;
|
|
192
|
+
await postSlackReply(slackBotToken, slackChannelId, gateThreadTs, `⚠️ Couldn't record your response (\`${detail}\`). Try again, or use the terminal command shown above.`);
|
|
193
|
+
}
|
|
194
|
+
};
|
|
166
195
|
try {
|
|
167
|
-
|
|
196
|
+
// submitHumanResponse signals failure by RETURNING an error envelope (it does not throw);
|
|
197
|
+
// gate on that status so we never post a false confirmation or abort on a failed submit.
|
|
198
|
+
// (The catch below still handles an unexpected throw identically.)
|
|
199
|
+
const result = await submitHumanResponse(store, definition, {
|
|
168
200
|
runId,
|
|
169
201
|
gateId: gate.gate_id,
|
|
170
202
|
choice: exactMatch,
|
|
171
203
|
...(registry !== undefined ? { registry } : {}),
|
|
172
204
|
});
|
|
173
|
-
if (
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
205
|
+
if (result.status === 'error') {
|
|
206
|
+
await postSubmitError(result.errors[0] ?? result.context_hint ?? 'unknown error');
|
|
207
|
+
}
|
|
208
|
+
else {
|
|
209
|
+
// Success — resolution IS the store write inside submitHumanResponse. Confirm + stop.
|
|
210
|
+
if (gateThreadTs !== undefined) {
|
|
211
|
+
const confirmationText = gate.resolution_messages?.[exactMatch] ??
|
|
212
|
+
`✅ Gate resolved: \`${exactMatch}\` — run continuing.`;
|
|
213
|
+
await postSlackReply(slackBotToken, slackChannelId, gateThreadTs, confirmationText);
|
|
214
|
+
}
|
|
215
|
+
abortController.abort();
|
|
177
216
|
}
|
|
178
|
-
abortController.abort();
|
|
179
217
|
}
|
|
180
218
|
catch (err) {
|
|
181
|
-
|
|
219
|
+
await postSubmitError(err instanceof Error ? err.message : String(err));
|
|
182
220
|
}
|
|
183
221
|
}
|
|
184
222
|
else if (clarificationCount < 2 && gateThreadTs !== undefined) {
|
|
@@ -200,9 +238,9 @@ export async function handleBidirectionalGate(params) {
|
|
|
200
238
|
if (seenEventIds.has(event.event_id))
|
|
201
239
|
return;
|
|
202
240
|
seenEventIds.add(event.event_id);
|
|
203
|
-
processCandidate(event.text).catch((err) => {
|
|
241
|
+
track(processCandidate(event.text).catch((err) => {
|
|
204
242
|
console.warn(`Candidate processing failed: ${err instanceof Error ? err.message : String(err)}`);
|
|
205
|
-
});
|
|
243
|
+
}));
|
|
206
244
|
},
|
|
207
245
|
signal: abortController.signal,
|
|
208
246
|
});
|
|
@@ -218,9 +256,9 @@ export async function handleBidirectionalGate(params) {
|
|
|
218
256
|
seenEventIds.add(event.event_id);
|
|
219
257
|
if (event.thread_ts !== gateThreadTs)
|
|
220
258
|
return;
|
|
221
|
-
processCandidate(event.text).catch((err) => {
|
|
259
|
+
track(processCandidate(event.text).catch((err) => {
|
|
222
260
|
console.warn(`Candidate processing failed: ${err instanceof Error ? err.message : String(err)}`);
|
|
223
|
-
});
|
|
261
|
+
}));
|
|
224
262
|
},
|
|
225
263
|
});
|
|
226
264
|
}
|
|
@@ -245,6 +283,23 @@ export async function handleBidirectionalGate(params) {
|
|
|
245
283
|
abortController.abort();
|
|
246
284
|
clearTimers();
|
|
247
285
|
serverHandle?.close();
|
|
286
|
+
// Let the resolving candidate's confirmation (or submit-error) reply flush before process.exit()
|
|
287
|
+
// can truncate it on a run-completing gate. BOUNDED by DRAIN_TIMEOUT_MS so a hung Slack can't
|
|
288
|
+
// stall run progress; the timer is CLEARED so it never leaks a pending handle (this is a
|
|
289
|
+
// de-flake change). ~instant on the common single-exact-match path (the resolving
|
|
290
|
+
// processCandidate calls abort() only AFTER awaiting postSlackReply, so by the time the poll
|
|
291
|
+
// loop breaks the reply has flushed); it waits (≤2s) only when a reply is genuinely still in
|
|
292
|
+
// flight. Candidate-scoped: reminder/escalation replies stay best-effort (cleared on resolve).
|
|
293
|
+
let drainTimer;
|
|
294
|
+
const bound = new Promise((resolve) => {
|
|
295
|
+
drainTimer = setTimeout(resolve, DRAIN_TIMEOUT_MS);
|
|
296
|
+
});
|
|
297
|
+
try {
|
|
298
|
+
await Promise.race([Promise.allSettled([...inFlight]).then(() => undefined), bound]);
|
|
299
|
+
}
|
|
300
|
+
finally {
|
|
301
|
+
clearTimeout(drainTimer);
|
|
302
|
+
}
|
|
248
303
|
}
|
|
249
304
|
}
|
|
250
305
|
/** Polls the store until the gate is resolved or the run reaches a terminal state. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"slack-gate-notifier.js","sourceRoot":"","sources":["../../../src/agent/gate/slack-gate-notifier.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"slack-gate-notifier.js","sourceRoot":"","sources":["../../../src/agent/gate/slack-gate-notifier.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,12 @@
|
|
|
1
|
-
/**
|
|
2
|
-
|
|
1
|
+
/**
|
|
2
|
+
* Builds the system prompt for an agent step, optionally prepending an agent profile and/or
|
|
3
|
+
* including the output schema.
|
|
4
|
+
*
|
|
5
|
+
* @param structuredToolOffered When true, the JSON-only line is replaced to mention the
|
|
6
|
+
* `__realm_submit__` tool. Pass true ONLY when a call actually offers that tool (never true
|
|
7
|
+
* just because a schema is present) — the default/absent path is byte-identical to before.
|
|
8
|
+
*/
|
|
9
|
+
export declare function buildSystemPrompt(inputSchema?: Record<string, unknown>, agentProfileInstructions?: string, structuredToolOffered?: boolean): string;
|
|
3
10
|
/** Sets the manifest-secret values redacted alongside process.env values. */
|
|
4
11
|
export declare function setAdditionalRedactionValues(values: readonly string[]): void;
|
|
5
12
|
/**
|
|
@@ -20,8 +27,19 @@ export declare function parseNamespacedId(id: string): {
|
|
|
20
27
|
serverId: string;
|
|
21
28
|
toolName: string;
|
|
22
29
|
};
|
|
23
|
-
/**
|
|
24
|
-
|
|
30
|
+
/**
|
|
31
|
+
* Extracts a single JSON object from LLM output text — the robust fallback for a model that
|
|
32
|
+
* ignores "respond with JSON only" and instead wraps its answer in a fenced code block, a
|
|
33
|
+
* preamble/postamble, or an illustrative example before the real answer. Object-only: a bare
|
|
34
|
+
* top-level array or scalar is rejected (returns null).
|
|
35
|
+
*
|
|
36
|
+
* Algorithm: prefer the content of ```-fenced code blocks, if any are present (falling back to
|
|
37
|
+
* the raw text if fences yield no usable object); scan for top-level balanced `{...}` substrings
|
|
38
|
+
* (string/escape-aware); return the LAST candidate that parses to a plain object. Preferring the
|
|
39
|
+
* last candidate — not the first — defeats the "For example {...}. Answer: {...}" preamble trap,
|
|
40
|
+
* where an earlier illustrative example must not be mistaken for the real answer.
|
|
41
|
+
*/
|
|
42
|
+
export declare function extractJsonObject(text: string): Record<string, unknown> | null;
|
|
25
43
|
/**
|
|
26
44
|
* Returns true if all required properties from the schema are present in the parsed object.
|
|
27
45
|
* Returns true when no schema is provided.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent-utils.d.ts","sourceRoot":"","sources":["../../../src/agent/providers/agent-utils.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"agent-utils.d.ts","sourceRoot":"","sources":["../../../src/agent/providers/agent-utils.ts"],"names":[],"mappings":"AAcA;;;;;;;GAOG;AACH,wBAAgB,iBAAiB,CAC/B,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACrC,wBAAwB,CAAC,EAAE,MAAM,EACjC,qBAAqB,CAAC,EAAE,OAAO,GAC9B,MAAM,CASR;AAUD,6EAA6E;AAC7E,wBAAgB,4BAA4B,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,GAAG,IAAI,CAE5E;AAED;;;;;;GAMG;AACH,wBAAgB,aAAa,CAAC,GAAG,EAAE,OAAO,GAAG,MAAM,CAqBlD;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,OAAO,GAAG,MAAM,CAG3D;AAED,yFAAyF;AACzF,wBAAgB,iBAAiB,CAAC,EAAE,EAAE,MAAM,GAAG;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,CAMpF;AAqED;;;;;;;;;;;GAWG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAQ9E;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAC5B,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC/B,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC/B,OAAO,CAKT;AAED,mFAAmF;AACnF,wBAAgB,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC,CAItD"}
|
|
@@ -1,11 +1,25 @@
|
|
|
1
1
|
// agent-utils.ts — Shared utility functions for LLM provider agentic loops.
|
|
2
2
|
const SYSTEM_PROMPT_BASE = 'You are an AI agent executing a step in a structured workflow.\n' +
|
|
3
3
|
'Your task is described below. Respond with a JSON object only — no markdown, no explanation.';
|
|
4
|
-
|
|
5
|
-
|
|
4
|
+
// Used only when a `__realm_submit__` tool is actually offered on the call this prompt accompanies
|
|
5
|
+
// (anthropic-provider.ts callStep) — the JSON-only line is replaced with a call-the-tool-or-answer
|
|
6
|
+
// line so the model knows the tool exists. Otherwise output is byte-unchanged (see structuredToolOffered).
|
|
7
|
+
const SYSTEM_PROMPT_BASE_WITH_TOOL = 'You are an AI agent executing a step in a structured workflow.\n' +
|
|
8
|
+
'Your task is described below. Call the `__realm_submit__` tool with your result, or respond ' +
|
|
9
|
+
'with a JSON object only — no markdown, no explanation.';
|
|
10
|
+
/**
|
|
11
|
+
* Builds the system prompt for an agent step, optionally prepending an agent profile and/or
|
|
12
|
+
* including the output schema.
|
|
13
|
+
*
|
|
14
|
+
* @param structuredToolOffered When true, the JSON-only line is replaced to mention the
|
|
15
|
+
* `__realm_submit__` tool. Pass true ONLY when a call actually offers that tool (never true
|
|
16
|
+
* just because a schema is present) — the default/absent path is byte-identical to before.
|
|
17
|
+
*/
|
|
18
|
+
export function buildSystemPrompt(inputSchema, agentProfileInstructions, structuredToolOffered) {
|
|
19
|
+
const basePrompt = structuredToolOffered === true ? SYSTEM_PROMPT_BASE_WITH_TOOL : SYSTEM_PROMPT_BASE;
|
|
6
20
|
const base = agentProfileInstructions !== undefined
|
|
7
|
-
? `${agentProfileInstructions}\n\n${
|
|
8
|
-
:
|
|
21
|
+
? `${agentProfileInstructions}\n\n${basePrompt}`
|
|
22
|
+
: basePrompt;
|
|
9
23
|
if (inputSchema === undefined)
|
|
10
24
|
return base;
|
|
11
25
|
return `${base}\nThe JSON must conform to this schema: ${JSON.stringify(inputSchema)}`;
|
|
@@ -64,18 +78,97 @@ export function parseNamespacedId(id) {
|
|
|
64
78
|
}
|
|
65
79
|
return { serverId: id.slice(0, colonIdx), toolName: id.slice(colonIdx + 1) };
|
|
66
80
|
}
|
|
67
|
-
/**
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
81
|
+
/** Returns the text of every ```-fenced code block (language tag optional), in document order. */
|
|
82
|
+
function extractFencedBlocks(text) {
|
|
83
|
+
const blocks = [];
|
|
84
|
+
const fenceRe = /```[^\n`]*\n?([\s\S]*?)```/g;
|
|
85
|
+
let match;
|
|
86
|
+
while ((match = fenceRe.exec(text)) !== null) {
|
|
87
|
+
blocks.push(match[1] ?? '');
|
|
88
|
+
}
|
|
89
|
+
return blocks;
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* Scans text for top-level (depth-0) balanced `{...}` substrings, left to right. A `{`/`}`
|
|
93
|
+
* inside a string literal — including an escaped quote `\"` or escaped backslash `\\` — never
|
|
94
|
+
* affects brace depth, so a value like `{"a":"}"}` is captured whole rather than truncated at
|
|
95
|
+
* the brace inside the string.
|
|
96
|
+
*/
|
|
97
|
+
function findBalancedObjectCandidates(text) {
|
|
98
|
+
const candidates = [];
|
|
99
|
+
let depth = 0;
|
|
100
|
+
let start = -1;
|
|
101
|
+
let inString = false;
|
|
102
|
+
let escapeNext = false;
|
|
103
|
+
for (let i = 0; i < text.length; i++) {
|
|
104
|
+
const ch = text[i];
|
|
105
|
+
if (inString) {
|
|
106
|
+
if (escapeNext) {
|
|
107
|
+
escapeNext = false;
|
|
108
|
+
}
|
|
109
|
+
else if (ch === '\\') {
|
|
110
|
+
escapeNext = true;
|
|
111
|
+
}
|
|
112
|
+
else if (ch === '"') {
|
|
113
|
+
inString = false;
|
|
114
|
+
}
|
|
115
|
+
continue;
|
|
116
|
+
}
|
|
117
|
+
if (ch === '"') {
|
|
118
|
+
inString = true;
|
|
119
|
+
}
|
|
120
|
+
else if (ch === '{') {
|
|
121
|
+
if (depth === 0)
|
|
122
|
+
start = i;
|
|
123
|
+
depth++;
|
|
124
|
+
}
|
|
125
|
+
else if (ch === '}' && depth > 0) {
|
|
126
|
+
depth--;
|
|
127
|
+
if (depth === 0 && start !== -1) {
|
|
128
|
+
candidates.push(text.slice(start, i + 1));
|
|
129
|
+
start = -1;
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
return candidates;
|
|
134
|
+
}
|
|
135
|
+
/** Parses each candidate; returns the LAST one that is a plain object, or null if none are. */
|
|
136
|
+
function lastParsedObject(candidates) {
|
|
137
|
+
let result = null;
|
|
138
|
+
for (const candidate of candidates) {
|
|
139
|
+
try {
|
|
140
|
+
const parsed = JSON.parse(candidate);
|
|
141
|
+
if (typeof parsed === 'object' && parsed !== null && !Array.isArray(parsed)) {
|
|
142
|
+
result = parsed;
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
catch {
|
|
146
|
+
// A brace-balanced substring is not necessarily valid JSON on its own — skip and keep scanning.
|
|
73
147
|
}
|
|
74
|
-
return null;
|
|
75
148
|
}
|
|
76
|
-
|
|
77
|
-
|
|
149
|
+
return result;
|
|
150
|
+
}
|
|
151
|
+
/**
|
|
152
|
+
* Extracts a single JSON object from LLM output text — the robust fallback for a model that
|
|
153
|
+
* ignores "respond with JSON only" and instead wraps its answer in a fenced code block, a
|
|
154
|
+
* preamble/postamble, or an illustrative example before the real answer. Object-only: a bare
|
|
155
|
+
* top-level array or scalar is rejected (returns null).
|
|
156
|
+
*
|
|
157
|
+
* Algorithm: prefer the content of ```-fenced code blocks, if any are present (falling back to
|
|
158
|
+
* the raw text if fences yield no usable object); scan for top-level balanced `{...}` substrings
|
|
159
|
+
* (string/escape-aware); return the LAST candidate that parses to a plain object. Preferring the
|
|
160
|
+
* last candidate — not the first — defeats the "For example {...}. Answer: {...}" preamble trap,
|
|
161
|
+
* where an earlier illustrative example must not be mistaken for the real answer.
|
|
162
|
+
*/
|
|
163
|
+
export function extractJsonObject(text) {
|
|
164
|
+
const fenced = extractFencedBlocks(text);
|
|
165
|
+
if (fenced.length > 0) {
|
|
166
|
+
const fromFences = lastParsedObject(findBalancedObjectCandidates(fenced.join('\n')));
|
|
167
|
+
if (fromFences !== null)
|
|
168
|
+
return fromFences;
|
|
169
|
+
// Fences present but didn't contain a usable object — fall back to the full raw text.
|
|
78
170
|
}
|
|
171
|
+
return lastParsedObject(findBalancedObjectCandidates(text));
|
|
79
172
|
}
|
|
80
173
|
/**
|
|
81
174
|
* Returns true if all required properties from the schema are present in the parsed object.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent-utils.js","sourceRoot":"","sources":["../../../src/agent/providers/agent-utils.ts"],"names":[],"mappings":"AAAA,4EAA4E;AAE5E,MAAM,kBAAkB,GACtB,kEAAkE;IAClE,8FAA8F,CAAC;AAEjG,
|
|
1
|
+
{"version":3,"file":"agent-utils.js","sourceRoot":"","sources":["../../../src/agent/providers/agent-utils.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"anthropic-provider.d.ts","sourceRoot":"","sources":["../../../src/agent/providers/anthropic-provider.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,sBAAsB,EAAE,MAAM,mBAAmB,CAAC;AAC3D,OAAO,KAAK,EAEV,cAAc,EACd,YAAY,EACZ,mBAAmB,EACpB,MAAM,0BAA0B,CAAC;
|
|
1
|
+
{"version":3,"file":"anthropic-provider.d.ts","sourceRoot":"","sources":["../../../src/agent/providers/anthropic-provider.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,sBAAsB,EAAE,MAAM,mBAAmB,CAAC;AAC3D,OAAO,KAAK,EAEV,cAAc,EACd,YAAY,EACZ,mBAAmB,EACpB,MAAM,0BAA0B,CAAC;AA2ClC;;;;GAIG;AACH,qBAAa,iBAAkB,SAAQ,sBAAsB;IAC/C,OAAO,CAAC,QAAQ,CAAC,KAAK;gBAAL,KAAK,EAAE,MAAM;IAIpC,QAAQ,CACZ,MAAM,EAAE,MAAM,EACd,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACrC,wBAAwB,CAAC,EAAE,MAAM,GAChC,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAiGnC;;;;OAIG;IACG,iBAAiB,CACrB,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,cAAc,EAAE,EACvB,QAAQ,EAAE,YAAY,EACtB,OAAO,EAAE;QACP,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QACtC,YAAY,CAAC,EAAE,MAAM,CAAC;QACtB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,aAAa,CAAC,EAAE,MAAM,CAAC;QACvB,wBAAwB,CAAC,EAAE,MAAM,CAAC;KACnC,GACA,OAAO,CAAC,mBAAmB,CAAC;CA4PhC"}
|
|
@@ -2,7 +2,21 @@
|
|
|
2
2
|
// Requires @anthropic-ai/sdk >= 0.20.0 as an optional peer dependency (npm install @anthropic-ai/sdk).
|
|
3
3
|
import { WorkflowError } from '@sensigo/realm';
|
|
4
4
|
import { ToolCapableLlmProvider } from './llm-provider.js';
|
|
5
|
-
import { sanitizeError, serializeToolResult, parseNamespacedId,
|
|
5
|
+
import { sanitizeError, serializeToolResult, parseNamespacedId, extractJsonObject, validateSchema, rejectAfter, buildSystemPrompt, } from './agent-utils.js';
|
|
6
|
+
/** The tool offered at `tool_choice:'auto'` so the model can return structured output directly —
|
|
7
|
+
* `tool_use.input` arrives pre-parsed, eliminating the fenced/prefaced-JSON parse-failure class by
|
|
8
|
+
* construction. `auto` (never forced) preserves reason-then-answer: a workflow whose output schema
|
|
9
|
+
* declares a reasoning field LAST must not have the model rationalize post-hoc (see the design
|
|
10
|
+
* decision in prompts/robust-anthropic-provider.md). Not pushed into tool_call_records anywhere it's
|
|
11
|
+
* used — it's an extraction mechanism, not an agent-chosen tool. */
|
|
12
|
+
const SUBMIT_TOOL_NAME = '__realm_submit__';
|
|
13
|
+
function buildSubmitTool(schema) {
|
|
14
|
+
return {
|
|
15
|
+
name: SUBMIT_TOOL_NAME,
|
|
16
|
+
description: 'Return your final result for this step as structured data.',
|
|
17
|
+
input_schema: schema,
|
|
18
|
+
};
|
|
19
|
+
}
|
|
6
20
|
/**
|
|
7
21
|
* Returns the maximum output tokens for the given Anthropic model.
|
|
8
22
|
* The Anthropic Messages API requires max_tokens — this must always produce a valid value.
|
|
@@ -43,35 +57,55 @@ export class AnthropicProvider extends ToolCapableLlmProvider {
|
|
|
43
57
|
const client = new mod.default({
|
|
44
58
|
apiKey: process.env['ANTHROPIC_API_KEY'],
|
|
45
59
|
});
|
|
46
|
-
|
|
60
|
+
// P0: offer a schema-typed __realm_submit__ tool at tool_choice:'auto' (never forced — see the
|
|
61
|
+
// module-level SUBMIT_TOOL_NAME comment) when a schema is available; a tool_use.input arrives
|
|
62
|
+
// pre-parsed, so this eliminates the fenced/prefaced-JSON parse-failure class by construction.
|
|
63
|
+
// Without a schema there is nothing to type the tool with, so no tool is offered — falls straight
|
|
64
|
+
// to the P1 extractor below.
|
|
65
|
+
const submitTool = inputSchema !== undefined ? buildSubmitTool(inputSchema) : undefined;
|
|
66
|
+
const systemPrompt = buildSystemPrompt(inputSchema, agentProfileInstructions,
|
|
67
|
+
/* structuredToolOffered */ submitTool !== undefined);
|
|
47
68
|
const makeRequest = async (userContent) => {
|
|
48
|
-
const
|
|
49
|
-
client.messages.create({
|
|
69
|
+
const opts = {
|
|
50
70
|
model: this.model,
|
|
51
71
|
max_tokens: resolveMaxTokens(this.model),
|
|
52
72
|
system: systemPrompt,
|
|
53
73
|
messages: [{ role: 'user', content: userContent }],
|
|
54
|
-
}
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
return block?.text ?? '';
|
|
59
|
-
};
|
|
60
|
-
const content = await makeRequest(prompt);
|
|
61
|
-
try {
|
|
62
|
-
return JSON.parse(content);
|
|
63
|
-
}
|
|
64
|
-
catch {
|
|
65
|
-
// Retry once with an explicit reminder to return JSON.
|
|
66
|
-
const retryPrompt = `${prompt}\n\nYour previous response was not valid JSON. Respond with a JSON object only.`;
|
|
67
|
-
const retry = await makeRequest(retryPrompt);
|
|
68
|
-
try {
|
|
69
|
-
return JSON.parse(retry);
|
|
70
|
-
}
|
|
71
|
-
catch {
|
|
72
|
-
throw new Error(`Anthropic returned non-JSON content after retry: ${retry.slice(0, 200)}`);
|
|
74
|
+
};
|
|
75
|
+
if (submitTool !== undefined) {
|
|
76
|
+
opts['tools'] = [submitTool];
|
|
77
|
+
opts['tool_choice'] = { type: 'auto' };
|
|
73
78
|
}
|
|
79
|
+
const response = await // eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
80
|
+
client.messages.create(opts);
|
|
81
|
+
const blocks = response.content;
|
|
82
|
+
const toolUse = blocks.find((b) => b.type === 'tool_use' && b.name === SUBMIT_TOOL_NAME);
|
|
83
|
+
const textBlock = blocks.find((b) => b.type === 'text');
|
|
84
|
+
return {
|
|
85
|
+
...(toolUse !== undefined ? { toolInput: toolUse.input } : {}),
|
|
86
|
+
text: textBlock?.text ?? '',
|
|
87
|
+
...(typeof response.stop_reason === 'string' ? { stopReason: response.stop_reason } : {}),
|
|
88
|
+
};
|
|
89
|
+
};
|
|
90
|
+
// If the model called the tool, its input is ALREADY a parsed object — no parse step, done.
|
|
91
|
+
// Otherwise fall back to the robust extractor (P1) on the text answer.
|
|
92
|
+
const extract = (result) => result.toolInput ?? extractJsonObject(result.text);
|
|
93
|
+
const first = await makeRequest(prompt);
|
|
94
|
+
const firstParsed = extract(first);
|
|
95
|
+
if (firstParsed !== null)
|
|
96
|
+
return firstParsed;
|
|
97
|
+
// Retry once with an explicit reminder to return JSON (preserves today's retry shape).
|
|
98
|
+
const retryPrompt = `${prompt}\n\nYour previous response was not valid JSON. Respond with a JSON object only.`;
|
|
99
|
+
const retry = await makeRequest(retryPrompt);
|
|
100
|
+
const retryParsed = extract(retry);
|
|
101
|
+
if (retryParsed !== null)
|
|
102
|
+
return retryParsed;
|
|
103
|
+
// Guard: a response cut short by the token budget must never silently return a partial object —
|
|
104
|
+
// give a clear, distinct error rather than the generic "non-JSON content" message.
|
|
105
|
+
if (retry.stopReason === 'max_tokens') {
|
|
106
|
+
throw new WorkflowError(sanitizeError('Anthropic response was truncated (max_tokens) before a usable JSON object was produced.'), { code: 'ENGINE_STEP_FAILED', category: 'ENGINE', agentAction: 'stop', retryable: false });
|
|
74
107
|
}
|
|
108
|
+
throw new WorkflowError(sanitizeError(`Anthropic returned non-JSON content after retry: ${retry.text.slice(0, 200)}`), { code: 'ENGINE_STEP_FAILED', category: 'ENGINE', agentAction: 'stop', retryable: false });
|
|
75
109
|
}
|
|
76
110
|
/**
|
|
77
111
|
* Agentic loop for tool-capable steps. Executes tool calls serially (V1 constraint).
|
|
@@ -128,26 +162,48 @@ export class AnthropicProvider extends ToolCapableLlmProvider {
|
|
|
128
162
|
opts['tools'] = anthropicTools;
|
|
129
163
|
return opts;
|
|
130
164
|
};
|
|
131
|
-
//
|
|
132
|
-
//
|
|
165
|
+
// Forces a final answer: offers the __realm_submit__ tool at tool_choice:'auto' when a schema is
|
|
166
|
+
// available (mirrors callStep's P0 mechanism — tool_use.input arrives pre-parsed, no parse step);
|
|
167
|
+
// otherwise forces a plain text answer (tool_choice:'none', no tools array — can't type a tool
|
|
168
|
+
// without a schema) and falls to the P1 extractor. Does NOT push to history — callers must ensure
|
|
169
|
+
// history ends with a valid user turn. NOT restructuring the agentic loop / MCP tools array —
|
|
170
|
+
// this synthetic tool only ever appears on this ONE isolated extraction call.
|
|
133
171
|
const performFinalExtraction = async () => {
|
|
134
|
-
const
|
|
135
|
-
|
|
172
|
+
const finalSubmitTool = options.inputSchema !== undefined ? buildSubmitTool(options.inputSchema) : undefined;
|
|
173
|
+
const finalOpts = {
|
|
136
174
|
model: this.model,
|
|
137
175
|
max_tokens: resolveMaxTokens(this.model),
|
|
138
176
|
system,
|
|
139
177
|
messages: history,
|
|
140
|
-
|
|
178
|
+
};
|
|
179
|
+
if (finalSubmitTool !== undefined) {
|
|
180
|
+
finalOpts['tools'] = [finalSubmitTool];
|
|
181
|
+
finalOpts['tool_choice'] = { type: 'auto' };
|
|
182
|
+
}
|
|
183
|
+
else {
|
|
184
|
+
finalOpts['tool_choice'] = { type: 'none' };
|
|
141
185
|
// NO tools array — enforces text-only response
|
|
142
186
|
// NO response_format — not a valid Anthropic parameter
|
|
143
|
-
}
|
|
144
|
-
const
|
|
187
|
+
}
|
|
188
|
+
const final = await // eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
189
|
+
client.messages.create(finalOpts);
|
|
190
|
+
const blocks = final.content;
|
|
191
|
+
// Extraction mechanism, not an agent-chosen tool — deliberately NOT pushed into
|
|
192
|
+
// tool_call_records (would pollute stepMeta.toolCalls, run-agent.ts:487).
|
|
193
|
+
const toolUse = blocks.find((b) => b.type === 'tool_use' && b.name === SUBMIT_TOOL_NAME);
|
|
194
|
+
if (toolUse !== undefined) {
|
|
195
|
+
return {
|
|
196
|
+
output: toolUse.input,
|
|
197
|
+
toolCalls: tool_call_records,
|
|
198
|
+
};
|
|
199
|
+
}
|
|
200
|
+
const textBlock = blocks.find((b) => b.type === 'text');
|
|
145
201
|
const text = textBlock?.text ?? '';
|
|
146
|
-
const parsed =
|
|
147
|
-
if (parsed
|
|
202
|
+
const parsed = extractJsonObject(text);
|
|
203
|
+
if (parsed !== null) {
|
|
148
204
|
return { output: parsed, toolCalls: tool_call_records };
|
|
149
205
|
}
|
|
150
|
-
throw new WorkflowError(
|
|
206
|
+
throw new WorkflowError(sanitizeError(`max_tool_calls reached; final extraction failed: ${text.slice(0, 200)}`), {
|
|
151
207
|
code: 'ENGINE_STEP_FAILED',
|
|
152
208
|
category: 'ENGINE',
|
|
153
209
|
agentAction: 'stop',
|
|
@@ -244,10 +300,12 @@ export class AnthropicProvider extends ToolCapableLlmProvider {
|
|
|
244
300
|
history.push({ role: 'user', content: anthropic_result_blocks });
|
|
245
301
|
}
|
|
246
302
|
else {
|
|
247
|
-
// No tool calls — attempt to parse the final answer.
|
|
303
|
+
// No tool calls — attempt to parse the final answer. extractJsonObject (P1) parses a fenced
|
|
304
|
+
// text answer immediately instead of nudging the model up to maxCalls; validateSchema stays
|
|
305
|
+
// the cheap required-keys pre-check for this correction loop (NOT the engine's Ajv validator).
|
|
248
306
|
const textBlock = response.content.find((b) => b.type === 'text');
|
|
249
307
|
const text = textBlock?.text ?? '';
|
|
250
|
-
const parsed =
|
|
308
|
+
const parsed = extractJsonObject(text);
|
|
251
309
|
if (parsed && validateSchema(parsed, options.inputSchema)) {
|
|
252
310
|
return { output: parsed, toolCalls: tool_call_records };
|
|
253
311
|
}
|