@sensigo/realm-cli 0.14.1 → 0.16.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 +9 -9
- package/dist/agent/gate/slack-gate-notifier.d.ts.map +1 -1
- package/dist/agent/gate/slack-gate-notifier.js +69 -12
- 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/agent.d.ts +2 -1
- package/dist/commands/agent.d.ts.map +1 -1
- package/dist/commands/agent.js +3 -0
- package/dist/commands/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/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/respond.d.ts +4 -1
- package/dist/commands/respond.d.ts.map +1 -1
- package/dist/commands/respond.js +16 -1
- package/dist/commands/respond.js.map +1 -1
- package/dist/commands/run.d.ts.map +1 -1
- package/dist/commands/run.js +10 -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
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { type RunStore, type WorkflowDefinition, type PendingGate } from '@sensigo/realm';
|
|
1
|
+
import { type RunStore, type WorkflowDefinition, type PendingGate, type ExtensionRegistry } from '@sensigo/realm';
|
|
2
2
|
import type { LlmProvider } from '../providers/llm-provider.js';
|
|
3
3
|
/**
|
|
4
4
|
* Formats a gate preview object as human-readable Slack mrkdwn text.
|
|
@@ -47,15 +47,13 @@ export interface BidirectionalGateParams {
|
|
|
47
47
|
gateReminderIntervalMs: number;
|
|
48
48
|
gateEscalationThresholdMs: number;
|
|
49
49
|
pollIntervalMs: number;
|
|
50
|
+
/**
|
|
51
|
+
* Resolved project registry for the run — threaded into submitHumanResponse so a gate
|
|
52
|
+
* resolution that COMPLETES the run fires its finalizers with project handlers. Undefined
|
|
53
|
+
* falls back to the engine's default (filesystem-only) registry.
|
|
54
|
+
*/
|
|
55
|
+
registry?: ExtensionRegistry;
|
|
50
56
|
}
|
|
51
|
-
/**
|
|
52
|
-
* Handles a gate using Slack bidirectional resolution:
|
|
53
|
-
* - Events API (when signing secret is present) or Socket Mode (when app token is present)
|
|
54
|
-
* - LLM intent interpretation of Slack replies
|
|
55
|
-
* - Reminder and escalation timers
|
|
56
|
-
* - Falls back to store polling for terminal-command gate resolution
|
|
57
|
-
* Exported for testing.
|
|
58
|
-
*/
|
|
59
57
|
export declare function handleBidirectionalGate(params: BidirectionalGateParams): Promise<void>;
|
|
60
58
|
export interface SlackGateHandlerConfig {
|
|
61
59
|
store: RunStore;
|
|
@@ -71,6 +69,8 @@ export interface SlackGateHandlerConfig {
|
|
|
71
69
|
reminderIntervalMs?: number;
|
|
72
70
|
escalationThresholdMs?: number;
|
|
73
71
|
pollIntervalMs?: number;
|
|
72
|
+
/** Resolved project registry for the run — forwarded so gate-completed runs fire finalizers. */
|
|
73
|
+
registry?: ExtensionRegistry;
|
|
74
74
|
}
|
|
75
75
|
/**
|
|
76
76
|
* Creates a gate handler that notifies via Slack and waits for resolution.
|
|
@@ -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,
|
|
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
|
-
const { gate, runId, definition, store, provider: _provider, slackBotToken, slackChannelId, gateThreadTs, slackSigningSecret, slackEventsPort, slackAppToken, gateReminderIntervalMs, gateEscalationThresholdMs, pollIntervalMs, } = params;
|
|
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,21 +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,
|
|
203
|
+
...(registry !== undefined ? { registry } : {}),
|
|
171
204
|
});
|
|
172
|
-
if (
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
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();
|
|
176
216
|
}
|
|
177
|
-
abortController.abort();
|
|
178
217
|
}
|
|
179
218
|
catch (err) {
|
|
180
|
-
|
|
219
|
+
await postSubmitError(err instanceof Error ? err.message : String(err));
|
|
181
220
|
}
|
|
182
221
|
}
|
|
183
222
|
else if (clarificationCount < 2 && gateThreadTs !== undefined) {
|
|
@@ -199,9 +238,9 @@ export async function handleBidirectionalGate(params) {
|
|
|
199
238
|
if (seenEventIds.has(event.event_id))
|
|
200
239
|
return;
|
|
201
240
|
seenEventIds.add(event.event_id);
|
|
202
|
-
processCandidate(event.text).catch((err) => {
|
|
241
|
+
track(processCandidate(event.text).catch((err) => {
|
|
203
242
|
console.warn(`Candidate processing failed: ${err instanceof Error ? err.message : String(err)}`);
|
|
204
|
-
});
|
|
243
|
+
}));
|
|
205
244
|
},
|
|
206
245
|
signal: abortController.signal,
|
|
207
246
|
});
|
|
@@ -217,9 +256,9 @@ export async function handleBidirectionalGate(params) {
|
|
|
217
256
|
seenEventIds.add(event.event_id);
|
|
218
257
|
if (event.thread_ts !== gateThreadTs)
|
|
219
258
|
return;
|
|
220
|
-
processCandidate(event.text).catch((err) => {
|
|
259
|
+
track(processCandidate(event.text).catch((err) => {
|
|
221
260
|
console.warn(`Candidate processing failed: ${err instanceof Error ? err.message : String(err)}`);
|
|
222
|
-
});
|
|
261
|
+
}));
|
|
223
262
|
},
|
|
224
263
|
});
|
|
225
264
|
}
|
|
@@ -244,6 +283,23 @@ export async function handleBidirectionalGate(params) {
|
|
|
244
283
|
abortController.abort();
|
|
245
284
|
clearTimers();
|
|
246
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
|
+
}
|
|
247
303
|
}
|
|
248
304
|
}
|
|
249
305
|
/** Polls the store until the gate is resolved or the run reaches a terminal state. */
|
|
@@ -294,6 +350,7 @@ export function createSlackGateHandler(config) {
|
|
|
294
350
|
gateReminderIntervalMs: config.reminderIntervalMs ?? 600_000,
|
|
295
351
|
gateEscalationThresholdMs: config.escalationThresholdMs ?? 1_800_000,
|
|
296
352
|
pollIntervalMs: config.pollIntervalMs ?? 3000,
|
|
353
|
+
...(config.registry !== undefined ? { registry: config.registry } : {}),
|
|
297
354
|
});
|
|
298
355
|
}
|
|
299
356
|
else if (config.webhookUrl !== undefined) {
|
|
@@ -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
|
}
|