@inbrowser/agent 0.1.0 → 0.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.
Files changed (90) hide show
  1. package/LICENSE +21 -0
  2. package/dist/diagnostics/index.d.ts +5 -0
  3. package/dist/diagnostics/index.d.ts.map +1 -0
  4. package/dist/diagnostics/index.js +3 -0
  5. package/dist/diagnostics/index.js.map +1 -0
  6. package/dist/diagnostics/timing.d.ts +48 -0
  7. package/dist/diagnostics/timing.d.ts.map +1 -0
  8. package/dist/diagnostics/timing.js +85 -0
  9. package/dist/diagnostics/timing.js.map +1 -0
  10. package/dist/diagnostics/truthfulness.d.ts +36 -0
  11. package/dist/diagnostics/truthfulness.d.ts.map +1 -0
  12. package/dist/diagnostics/truthfulness.js +180 -0
  13. package/dist/diagnostics/truthfulness.js.map +1 -0
  14. package/dist/dispatch-memoization.d.ts +84 -0
  15. package/dist/dispatch-memoization.d.ts.map +1 -0
  16. package/dist/dispatch-memoization.js +197 -0
  17. package/dist/dispatch-memoization.js.map +1 -0
  18. package/dist/eval/comparison-report.d.ts +164 -0
  19. package/dist/eval/comparison-report.d.ts.map +1 -0
  20. package/dist/eval/comparison-report.js +316 -0
  21. package/dist/eval/comparison-report.js.map +1 -0
  22. package/dist/eval/fixture.d.ts +74 -0
  23. package/dist/eval/fixture.d.ts.map +1 -0
  24. package/dist/eval/fixture.js +217 -0
  25. package/dist/eval/fixture.js.map +1 -0
  26. package/dist/eval/index.d.ts +13 -0
  27. package/dist/eval/index.d.ts.map +1 -0
  28. package/dist/eval/index.js +7 -0
  29. package/dist/eval/index.js.map +1 -0
  30. package/dist/eval/load-node.d.ts +16 -0
  31. package/dist/eval/load-node.d.ts.map +1 -0
  32. package/dist/eval/load-node.js +58 -0
  33. package/dist/eval/load-node.js.map +1 -0
  34. package/dist/eval/metric-collector.d.ts +209 -0
  35. package/dist/eval/metric-collector.d.ts.map +1 -0
  36. package/dist/eval/metric-collector.js +293 -0
  37. package/dist/eval/metric-collector.js.map +1 -0
  38. package/dist/eval/run-record.d.ts +76 -0
  39. package/dist/eval/run-record.d.ts.map +1 -0
  40. package/dist/eval/run-record.js +32 -0
  41. package/dist/eval/run-record.js.map +1 -0
  42. package/dist/eval/runner.d.ts +140 -0
  43. package/dist/eval/runner.d.ts.map +1 -0
  44. package/dist/eval/runner.js +310 -0
  45. package/dist/eval/runner.js.map +1 -0
  46. package/dist/eval/spec-framework.d.ts +113 -0
  47. package/dist/eval/spec-framework.d.ts.map +1 -0
  48. package/dist/eval/spec-framework.js +100 -0
  49. package/dist/eval/spec-framework.js.map +1 -0
  50. package/dist/eval/spec-helpers.d.ts +245 -0
  51. package/dist/eval/spec-helpers.d.ts.map +1 -0
  52. package/dist/eval/spec-helpers.js +605 -0
  53. package/dist/eval/spec-helpers.js.map +1 -0
  54. package/dist/index.d.ts +24 -3
  55. package/dist/index.d.ts.map +1 -1
  56. package/dist/index.js +11 -1
  57. package/dist/index.js.map +1 -1
  58. package/dist/node.d.ts +1 -0
  59. package/dist/node.d.ts.map +1 -1
  60. package/dist/node.js +1 -0
  61. package/dist/node.js.map +1 -1
  62. package/dist/planner-executor.d.ts +132 -0
  63. package/dist/planner-executor.d.ts.map +1 -0
  64. package/dist/planner-executor.js +274 -0
  65. package/dist/planner-executor.js.map +1 -0
  66. package/dist/skill-catalog.d.ts +81 -0
  67. package/dist/skill-catalog.d.ts.map +1 -0
  68. package/dist/skill-catalog.js +388 -0
  69. package/dist/skill-catalog.js.map +1 -0
  70. package/dist/skill-router.d.ts +95 -0
  71. package/dist/skill-router.d.ts.map +1 -0
  72. package/dist/skill-router.js +130 -0
  73. package/dist/skill-router.js.map +1 -0
  74. package/dist/strategy.d.ts +20 -1
  75. package/dist/strategy.d.ts.map +1 -1
  76. package/dist/strategy.js +333 -13
  77. package/dist/strategy.js.map +1 -1
  78. package/dist/tools.d.ts +15 -1
  79. package/dist/tools.d.ts.map +1 -1
  80. package/dist/tools.js +18 -0
  81. package/dist/tools.js.map +1 -1
  82. package/dist/types/strategy.d.ts +48 -0
  83. package/dist/types/strategy.d.ts.map +1 -1
  84. package/dist/types/tools.d.ts +18 -0
  85. package/dist/types/tools.d.ts.map +1 -1
  86. package/dist/types/trace.d.ts +59 -9
  87. package/dist/types/trace.d.ts.map +1 -1
  88. package/dist/types/trace.js +5 -3
  89. package/dist/types/trace.js.map +1 -1
  90. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"strategy.d.ts","sourceRoot":"","sources":["../src/strategy.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAIH,OAAO,KAAK,EAAE,aAAa,EAAmC,MAAM,qBAAqB,CAAC;AAG1F,UAAU,gBAAgB;IACxB,+EAA+E;IAC/E,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,wBAAgB,uBAAuB,CAAC,OAAO,GAAE,gBAAqB,GAAG,aAAa,CAoIrF"}
1
+ {"version":3,"file":"strategy.d.ts","sourceRoot":"","sources":["../src/strategy.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAKH,OAAO,KAAK,EACV,aAAa,EACb,eAAe,EAGhB,MAAM,qBAAqB,CAAC;AAG7B,UAAU,gBAAgB;IACxB,+EAA+E;IAC/E,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB;;;;;;;;;;OAUG;IACH,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B;;;;;OAKG;IACH,SAAS,CAAC,EAAE,eAAe,CAAC;CAC7B;AAKD,wBAAgB,uBAAuB,CAAC,OAAO,GAAE,gBAAqB,GAAG,aAAa,CAuarF"}
package/dist/strategy.js CHANGED
@@ -16,12 +16,23 @@
16
16
  * parallel-branch ensembling) sit alongside this one — same
17
17
  * `AgentStrategy` interface, different control flow.
18
18
  */
19
+ import { isParallelSafe } from './tools.js';
20
+ const DEFAULT_CRITIQUE_SYSTEM_PROMPT = 'You are reviewing the assistant\'s most recent reply for consistency with the tool results visible earlier in this conversation. Reply with a single JSON object of the form {"ok": boolean, "feedback"?: string}. Set ok=true when the reply is supported by the tool results and follows the user\'s request. Set ok=false and supply a one-sentence feedback string when the reply contains a claim not grounded in the prior tool results, contradicts a prior tool result, or fails to answer the user\'s request. Do not include any other prose.';
19
21
  export function createReactLoopStrategy(options = {}) {
20
22
  const maxTurns = options.maxTurns ?? 24;
23
+ const parallelDispatch = options.parallelDispatch === true;
24
+ const reflexionEnabled = options.reflexion?.enabled === true;
25
+ const reflexionMaxRetries = Math.max(0, options.reflexion?.maxRetries ?? 1);
26
+ const critiqueSystemPrompt = options.reflexion?.critiqueSystemPrompt ?? DEFAULT_CRITIQUE_SYSTEM_PROMPT;
21
27
  return {
22
28
  id: 'react-loop',
23
29
  async *run(input, signal) {
24
30
  const messages = buildMessages(input);
31
+ // Per-call retry budget for the critique-and-retry pass. Only
32
+ // consulted when `reflexionEnabled` is true; otherwise the
33
+ // critique branch is skipped entirely and the strategy returns
34
+ // on the first no-tool-calls turn exactly as before.
35
+ let reflexionRetriesRemaining = reflexionMaxRetries;
25
36
  for (let turn = 0; turn < maxTurns; turn++) {
26
37
  if (signal.aborted) {
27
38
  yield { kind: 'error', message: 'aborted' };
@@ -43,12 +54,13 @@ export function createReactLoopStrategy(options = {}) {
43
54
  // when the session passed a `turnId`; otherwise we synthesize
44
55
  // a per-iteration id so the trace stays consistent for
45
56
  // standalone strategy callers (CLI, eval harness).
57
+ const turnIdForReq = input.turnId ?? 'turn-anon';
58
+ const requestId = `${turnIdForReq}#${turn}`;
46
59
  if (input.tracer) {
47
- const turnIdForReq = input.turnId ?? 'turn-anon';
48
60
  input.tracer.emit({
49
61
  kind: 'llm_request',
50
62
  data: {
51
- requestId: `${turnIdForReq}#${turn}`,
63
+ requestId,
52
64
  turnId: turnIdForReq,
53
65
  iteration: turn,
54
66
  ts: Date.now(),
@@ -67,6 +79,7 @@ export function createReactLoopStrategy(options = {}) {
67
79
  let turnUsage;
68
80
  let turnDetails;
69
81
  let assistantText = '';
82
+ let assistantThinking = '';
70
83
  // Stream the model's reply.
71
84
  for await (const ev of input.llm.chat(chatRequest, signal)) {
72
85
  if (ev.kind === 'text') {
@@ -74,6 +87,7 @@ export function createReactLoopStrategy(options = {}) {
74
87
  yield { kind: 'text', chunk: ev.chunk };
75
88
  }
76
89
  else if (ev.kind === 'thinking') {
90
+ assistantThinking += ev.chunk;
77
91
  yield { kind: 'thinking', chunk: ev.chunk };
78
92
  }
79
93
  else if (ev.kind === 'tool_call') {
@@ -100,12 +114,195 @@ export function createReactLoopStrategy(options = {}) {
100
114
  return;
101
115
  }
102
116
  }
103
- // No tool calls final assistant turn, emit turn_complete + done.
117
+ // Pair with the `llm_request` emitted above. Captures the
118
+ // moment the chat() iterator drained — the closing endpoint
119
+ // of this iteration's language-model wall-clock segment.
120
+ if (input.tracer) {
121
+ input.tracer.emit({
122
+ kind: 'llm_response',
123
+ data: {
124
+ requestId,
125
+ ts: Date.now(),
126
+ text: assistantText,
127
+ thinking: assistantThinking,
128
+ toolCalls: pendingToolCalls.map((tc) => ({
129
+ id: tc.id,
130
+ name: tc.name,
131
+ args: tc.args,
132
+ ...(tc.signature ? { signature: tc.signature } : {}),
133
+ })),
134
+ ...(turnUsage
135
+ ? {
136
+ usage: {
137
+ promptTokens: turnUsage.promptTokens,
138
+ outputTokens: turnUsage.completionTokens,
139
+ ...(turnUsage.cachedTokens !== undefined
140
+ ? { cachedTokens: turnUsage.cachedTokens }
141
+ : {}),
142
+ },
143
+ }
144
+ : {}),
145
+ },
146
+ });
147
+ }
148
+ // No tool calls → final assistant turn. Without reflexion we
149
+ // emit turn_complete and return immediately. With reflexion
150
+ // enabled we issue a critique call against the model, parse a
151
+ // verdict, and either return (ok / exhausted) or inject the
152
+ // critique feedback as a synthetic user message and loop into
153
+ // a fresh ReAct iteration.
104
154
  if (pendingToolCalls.length === 0) {
155
+ if (!reflexionEnabled) {
156
+ if (turnUsage && turnDetails) {
157
+ yield { kind: 'turn_complete', usage: turnUsage, details: turnDetails };
158
+ }
159
+ return;
160
+ }
161
+ // Append the candidate final-answer assistant turn to the
162
+ // conversation so the critique call (and any retry) sees it.
163
+ // We only do this when reflexion is enabled — the
164
+ // pre-reflexion path returns without ever appending the
165
+ // final assistant turn, and we must not change that byte for
166
+ // byte when reflexion is disabled.
167
+ messages.push({ role: 'assistant', text: assistantText });
168
+ const critiqueMessages = [
169
+ { role: 'system', text: critiqueSystemPrompt },
170
+ // Skip the original system prompt — the critique system
171
+ // prompt replaces it. Everything else (history + user
172
+ // prompt + assistant turns + tool results) is included so
173
+ // the critic can evaluate the reply in context.
174
+ ...messages.filter((m) => m.role !== 'system'),
175
+ {
176
+ role: 'user',
177
+ text: "Evaluate the assistant's most recent reply. Reply with the JSON verdict only.",
178
+ },
179
+ ];
180
+ const critiqueRequest = {
181
+ messages: critiqueMessages,
182
+ tools: [],
183
+ toolUseEnabled: false,
184
+ };
185
+ const critiqueRequestId = `${requestId}#critique`;
186
+ if (input.tracer) {
187
+ input.tracer.emit({
188
+ kind: 'llm_request',
189
+ data: {
190
+ requestId: critiqueRequestId,
191
+ turnId: turnIdForReq,
192
+ iteration: turn,
193
+ ts: Date.now(),
194
+ systemPrompt: critiqueSystemPrompt,
195
+ messages: critiqueMessages.map((m) => ({ ...m })),
196
+ tools: [],
197
+ llm: { id: input.llm.id, supportsTools: input.llm.supportsTools },
198
+ },
199
+ });
200
+ }
201
+ let critiqueText = '';
202
+ let critiqueUsage;
203
+ for await (const ev of input.llm.chat(critiqueRequest, signal)) {
204
+ if (ev.kind === 'text') {
205
+ critiqueText += ev.chunk;
206
+ }
207
+ else if (ev.kind === 'turn_complete') {
208
+ critiqueUsage = ev.usage;
209
+ }
210
+ else if (ev.kind === 'error') {
211
+ // Critique errored — fail open, return the candidate
212
+ // final-answer turn as-is. Never block completion on a
213
+ // critique failure.
214
+ if (input.tracer) {
215
+ input.tracer.emit({
216
+ kind: 'llm_response',
217
+ data: {
218
+ requestId: critiqueRequestId,
219
+ ts: Date.now(),
220
+ text: critiqueText,
221
+ thinking: '',
222
+ toolCalls: [],
223
+ },
224
+ });
225
+ }
226
+ if (turnUsage && turnDetails) {
227
+ yield { kind: 'turn_complete', usage: turnUsage, details: turnDetails };
228
+ }
229
+ return;
230
+ }
231
+ // Tool calls / thinking events on the critique call are
232
+ // ignored — the critique request sets toolUseEnabled:false
233
+ // and asks for a JSON reply, so a well-behaved stub never
234
+ // emits them. Real providers may still stream thinking;
235
+ // we do not surface it to the caller.
236
+ }
237
+ if (input.tracer) {
238
+ input.tracer.emit({
239
+ kind: 'llm_response',
240
+ data: {
241
+ requestId: critiqueRequestId,
242
+ ts: Date.now(),
243
+ text: critiqueText,
244
+ thinking: '',
245
+ toolCalls: [],
246
+ ...(critiqueUsage
247
+ ? {
248
+ usage: {
249
+ promptTokens: critiqueUsage.promptTokens,
250
+ outputTokens: critiqueUsage.completionTokens,
251
+ ...(critiqueUsage.cachedTokens !== undefined
252
+ ? { cachedTokens: critiqueUsage.cachedTokens }
253
+ : {}),
254
+ },
255
+ }
256
+ : {}),
257
+ },
258
+ });
259
+ }
260
+ const verdict = parseCritiqueVerdict(critiqueText);
261
+ if (verdict.ok) {
262
+ yield {
263
+ kind: 'custom',
264
+ name: 'reflexion_critique',
265
+ data: { verdict: 'ok', text: critiqueText },
266
+ };
267
+ if (turnUsage && turnDetails) {
268
+ yield { kind: 'turn_complete', usage: turnUsage, details: turnDetails };
269
+ }
270
+ return;
271
+ }
272
+ if (reflexionRetriesRemaining <= 0) {
273
+ yield {
274
+ kind: 'custom',
275
+ name: 'reflexion_critique',
276
+ data: {
277
+ verdict: 'exhausted',
278
+ text: critiqueText,
279
+ ...(verdict.feedback ? { feedback: verdict.feedback } : {}),
280
+ },
281
+ };
282
+ if (turnUsage && turnDetails) {
283
+ yield { kind: 'turn_complete', usage: turnUsage, details: turnDetails };
284
+ }
285
+ return;
286
+ }
287
+ yield {
288
+ kind: 'custom',
289
+ name: 'reflexion_critique',
290
+ data: {
291
+ verdict: 'retry',
292
+ text: critiqueText,
293
+ ...(verdict.feedback ? { feedback: verdict.feedback } : {}),
294
+ },
295
+ };
105
296
  if (turnUsage && turnDetails) {
106
297
  yield { kind: 'turn_complete', usage: turnUsage, details: turnDetails };
107
298
  }
108
- return;
299
+ const feedback = verdict.feedback ?? 'Your previous response needs revision.';
300
+ messages.push({
301
+ role: 'user',
302
+ text: `Reviewer feedback: ${feedback}. Please revise your response.`,
303
+ });
304
+ reflexionRetriesRemaining -= 1;
305
+ continue;
109
306
  }
110
307
  // Tool calls → run each, append result message, loop.
111
308
  messages.push({
@@ -118,15 +315,90 @@ export function createReactLoopStrategy(options = {}) {
118
315
  ...(tc.signature ? { signature: tc.signature } : {}),
119
316
  })),
120
317
  });
121
- for (const call of pendingToolCalls) {
122
- const result = await input.tools.execute({ id: call.id, name: call.name, args: call.args }, input.toolContext());
123
- yield { kind: 'tool_result', id: call.id, result };
124
- messages.push({
125
- role: 'tool',
126
- callId: call.id,
127
- name: call.name,
128
- resultJson: JSON.stringify(safeSerializable(result)),
129
- text: '',
318
+ if (parallelDispatch) {
319
+ // Resolve each call's handler so we can ask `isParallelSafe`.
320
+ // Missing handler (defensive — shouldn't happen) treated as
321
+ // not parallel-safe, so it falls into the sequential group.
322
+ const handlersByName = new Map();
323
+ for (const h of input.toolList)
324
+ handlersByName.set(h.name, h);
325
+ const parallelIndices = [];
326
+ const sequentialIndices = [];
327
+ for (let i = 0; i < pendingToolCalls.length; i++) {
328
+ const c = pendingToolCalls[i];
329
+ const h = handlersByName.get(c.name);
330
+ if (h && isParallelSafe(h))
331
+ parallelIndices.push(i);
332
+ else
333
+ sequentialIndices.push(i);
334
+ }
335
+ // Pre-allocate result slots so even when the parallel group
336
+ // settles out of order, we yield + push messages in the
337
+ // original input order. The trace and next-turn prompt must
338
+ // be identical to the sequential mode — only wall-clock
339
+ // differs.
340
+ const results = new Array(pendingToolCalls.length);
341
+ // Parallel-safe group: run concurrently. Handler errors are
342
+ // already normalised into `{ ok: false }` results by the
343
+ // dispatch layer, so Promise.all never rejects in practice.
344
+ if (parallelIndices.length > 0) {
345
+ await Promise.all(parallelIndices.map(async (i) => {
346
+ const call = pendingToolCalls[i];
347
+ results[i] = await input.tools.execute({ id: call.id, name: call.name, args: call.args }, input.toolContext());
348
+ }));
349
+ }
350
+ // Mutation group: still sequential, in original relative order.
351
+ for (const i of sequentialIndices) {
352
+ if (signal.aborted) {
353
+ yield { kind: 'error', message: 'aborted' };
354
+ return;
355
+ }
356
+ const call = pendingToolCalls[i];
357
+ results[i] = await input.tools.execute({ id: call.id, name: call.name, args: call.args }, input.toolContext());
358
+ }
359
+ // Yield + append in original input order.
360
+ for (let i = 0; i < pendingToolCalls.length; i++) {
361
+ const call = pendingToolCalls[i];
362
+ const result = results[i];
363
+ yield { kind: 'tool_result', id: call.id, result };
364
+ messages.push({
365
+ role: 'tool',
366
+ callId: call.id,
367
+ name: call.name,
368
+ resultJson: JSON.stringify(safeSerializable(result)),
369
+ text: '',
370
+ });
371
+ }
372
+ }
373
+ else {
374
+ // Default behavior: byte-for-byte identical to the pre-change
375
+ // sequential loop — dispatch, yield, push, in order, one at a
376
+ // time.
377
+ for (const call of pendingToolCalls) {
378
+ const result = await input.tools.execute({ id: call.id, name: call.name, args: call.args }, input.toolContext());
379
+ yield { kind: 'tool_result', id: call.id, result };
380
+ messages.push({
381
+ role: 'tool',
382
+ callId: call.id,
383
+ name: call.name,
384
+ resultJson: JSON.stringify(safeSerializable(result)),
385
+ text: '',
386
+ });
387
+ }
388
+ }
389
+ // Close the tool-dispatch segment for this iteration. Pair
390
+ // with the `llm_response` emitted above; `ts` delta is the
391
+ // dispatch wall-clock the eval harness consumes.
392
+ if (input.tracer) {
393
+ input.tracer.emit({
394
+ kind: 'turn_dispatch_complete',
395
+ data: {
396
+ requestId,
397
+ turnId: turnIdForReq,
398
+ iteration: turn,
399
+ ts: Date.now(),
400
+ toolCallCount: pendingToolCalls.length,
401
+ },
130
402
  });
131
403
  }
132
404
  // Loop to next turn.
@@ -197,4 +469,52 @@ function safeSerializable(value) {
197
469
  return { ok: value.ok, summary: value.summary };
198
470
  }
199
471
  }
472
+ /**
473
+ * Extract the reflexion verdict from a critique LLM reply. Returns
474
+ * `{ ok: true }` on any parse failure (fail-open: the strategy must
475
+ * not block completion on a malformed critique). Handles three shapes
476
+ * the model commonly emits:
477
+ *
478
+ * - a bare JSON object: `{"ok": false, "feedback": "..."}`
479
+ * - a JSON object inside a ```json fenced code block
480
+ * - a JSON object embedded in prose; we regex-extract the first
481
+ * `{...}` substring and try to parse it
482
+ *
483
+ * Anything else — no braces, broken JSON, JSON missing the `ok`
484
+ * field — falls open.
485
+ */
486
+ function parseCritiqueVerdict(text) {
487
+ if (!text || typeof text !== 'string')
488
+ return { ok: true };
489
+ // Strip ```json ... ``` fences (and bare ``` fences) before regex
490
+ // hunting for the JSON object. Models often wrap the verdict in a
491
+ // fence even when asked not to.
492
+ let candidate = text.trim();
493
+ const fenceMatch = candidate.match(/```(?:json)?\s*([\s\S]*?)```/i);
494
+ if (fenceMatch?.[1]) {
495
+ candidate = fenceMatch[1].trim();
496
+ }
497
+ // Greedy match: take everything from the first `{` to the last `}`
498
+ // so nested braces survive. JSON.parse will reject malformed input.
499
+ const objectMatch = candidate.match(/\{[\s\S]*\}/);
500
+ if (!objectMatch)
501
+ return { ok: true };
502
+ let parsed;
503
+ try {
504
+ parsed = JSON.parse(objectMatch[0]);
505
+ }
506
+ catch {
507
+ return { ok: true };
508
+ }
509
+ if (!parsed || typeof parsed !== 'object')
510
+ return { ok: true };
511
+ const obj = parsed;
512
+ if (typeof obj.ok !== 'boolean')
513
+ return { ok: true };
514
+ const out = { ok: obj.ok };
515
+ if (typeof obj.feedback === 'string' && obj.feedback.length > 0) {
516
+ out.feedback = obj.feedback;
517
+ }
518
+ return out;
519
+ }
200
520
  //# sourceMappingURL=strategy.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"strategy.js","sourceRoot":"","sources":["../src/strategy.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"strategy.js","sourceRoot":"","sources":["../src/strategy.ts"],"names":[],"mappings":"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"}
package/dist/tools.d.ts CHANGED
@@ -10,7 +10,7 @@
10
10
  *
11
11
  * Both are pure-TS — no React, no stores, no localStorage.
12
12
  */
13
- import type { ToolDispatch, ToolRegistry } from './types/tools.js';
13
+ import type { ToolDispatch, ToolHandler, ToolRegistry } from './types/tools.js';
14
14
  export declare function createToolRegistry(): ToolRegistry;
15
15
  /**
16
16
  * Create a stateless dispatcher over a registry. The dispatcher
@@ -23,4 +23,18 @@ export declare function createToolRegistry(): ToolRegistry;
23
23
  * stringified into the summary.
24
24
  */
25
25
  export declare function createDispatch(registry: ToolRegistry): ToolDispatch;
26
+ /**
27
+ * Read `handler.parallelSafe` with the conservative default. The default
28
+ * when the field is absent or `false` is `false` — callers must opt in
29
+ * explicitly. Centralised so parallel-dispatch and any future scheduler
30
+ * apply the same rule.
31
+ */
32
+ export declare function isParallelSafe(handler: ToolHandler): boolean;
33
+ /**
34
+ * Read `handler.pure` with the conservative default. The default when
35
+ * the field is absent or `false` is `false` — callers must opt in. The
36
+ * memoization layer reads this through here so a future change to the
37
+ * default (not in this branch) lands in a single spot.
38
+ */
39
+ export declare function isPure(handler: ToolHandler): boolean;
26
40
  //# sourceMappingURL=tools.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../src/tools.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAGH,OAAO,KAAK,EAGV,YAAY,EAEZ,YAAY,EAEb,MAAM,kBAAkB,CAAC;AAE1B,wBAAgB,kBAAkB,IAAI,YAAY,CA8DjD;AAED;;;;;;;;;GASG;AACH,wBAAgB,cAAc,CAAC,QAAQ,EAAE,YAAY,GAAG,YAAY,CA0BnE"}
1
+ {"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../src/tools.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAGH,OAAO,KAAK,EAGV,YAAY,EACZ,WAAW,EACX,YAAY,EAEb,MAAM,kBAAkB,CAAC;AAE1B,wBAAgB,kBAAkB,IAAI,YAAY,CA8DjD;AAED;;;;;;;;;GASG;AACH,wBAAgB,cAAc,CAAC,QAAQ,EAAE,YAAY,GAAG,YAAY,CA0BnE;AAgBD;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAE5D;AAED;;;;;GAKG;AACH,wBAAgB,MAAM,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAEpD"}
package/dist/tools.js CHANGED
@@ -122,6 +122,24 @@ function findByName(registry, name) {
122
122
  const all = registry.list();
123
123
  return all.find((h) => h.name === name);
124
124
  }
125
+ /**
126
+ * Read `handler.parallelSafe` with the conservative default. The default
127
+ * when the field is absent or `false` is `false` — callers must opt in
128
+ * explicitly. Centralised so parallel-dispatch and any future scheduler
129
+ * apply the same rule.
130
+ */
131
+ export function isParallelSafe(handler) {
132
+ return handler.parallelSafe === true;
133
+ }
134
+ /**
135
+ * Read `handler.pure` with the conservative default. The default when
136
+ * the field is absent or `false` is `false` — callers must opt in. The
137
+ * memoization layer reads this through here so a future change to the
138
+ * default (not in this branch) lands in a single spot.
139
+ */
140
+ export function isPure(handler) {
141
+ return handler.pure === true;
142
+ }
125
143
  /** Trim a string to `max` chars with an ellipsis marker. */
126
144
  function truncate(s, max) {
127
145
  return s.length <= max ? s : `${s.slice(0, max)}…`;
package/dist/tools.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"tools.js","sourceRoot":"","sources":["../src/tools.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"tools.js","sourceRoot":"","sources":["../src/tools.ts"],"names":[],"mappings":"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"}
@@ -73,4 +73,52 @@ export type StrategyEvent = {
73
73
  name: string;
74
74
  data?: unknown;
75
75
  };
76
+ /**
77
+ * Opt-in critique-and-retry pass after a candidate final-answer turn.
78
+ *
79
+ * When `enabled === true`, the ReAct loop runs as usual, but instead of
80
+ * returning immediately on a turn that produced no tool calls the
81
+ * strategy issues a second chat call asking the model to evaluate its
82
+ * own last response against the prior tool results visible in the
83
+ * conversation. The evaluation returns a JSON verdict of the shape
84
+ * `{ "ok": boolean, "feedback"?: string }`. When the verdict is `ok`
85
+ * the original answer stands. When the verdict flags problems and the
86
+ * retry budget has not been exhausted, the strategy injects the
87
+ * feedback as a synthetic user message and loops back into the next
88
+ * ReAct iteration. When the retry budget is exhausted the strategy
89
+ * returns the most recent final-answer turn as-is — reflexion never
90
+ * blocks completion.
91
+ *
92
+ * A malformed verdict (non-JSON critique text, or JSON missing the
93
+ * `ok` field) is treated as `{ ok: true }`: fail-open, never block on a
94
+ * critique the strategy could not parse.
95
+ *
96
+ * The critique runs through the same `LlmClient` as the main loop; the
97
+ * trace emits an additional `llm_request` for the critique call with a
98
+ * `requestId` suffixed `#critique`, so trace consumers can distinguish
99
+ * critique requests from main-loop requests. The strategy emits a
100
+ * `custom` `StrategyEvent` named `'reflexion_critique'` with a
101
+ * `{ verdict, text, feedback? }` payload at every critique decision.
102
+ *
103
+ * Defaults: `maxRetries: 1`. When `enabled === false` (or the option
104
+ * is absent) the strategy's behavior is byte-for-byte identical to the
105
+ * pre-reflexion loop.
106
+ */
107
+ export interface ReflexionConfig {
108
+ /** Opt-in switch. */
109
+ enabled: boolean;
110
+ /**
111
+ * Maximum retries after the critique flags problems. Defaults to 1.
112
+ * Setting to 0 disables retries entirely (the critique runs and its
113
+ * verdict is emitted, but no retry is attempted on `ok: false`).
114
+ */
115
+ maxRetries?: number;
116
+ /**
117
+ * System prompt used for the critique call. Defaults to a neutral
118
+ * prompt that asks the model to evaluate consistency with prior
119
+ * tool results and reply with `{"ok": boolean, "feedback"?: string}`
120
+ * JSON. Override when a skill needs a tighter verifier rubric.
121
+ */
122
+ critiqueSystemPrompt?: string;
123
+ }
76
124
  //# sourceMappingURL=strategy.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"strategy.d.ts","sourceRoot":"","sources":["../../src/types/strategy.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAC1D,OAAO,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AACpD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AACjD,OAAO,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AACrF,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AACzC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAEhD,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB;;;OAGG;IACH,GAAG,CAAC,KAAK,EAAE,gBAAgB,EAAE,MAAM,EAAE,WAAW,GAAG,aAAa,CAAC,aAAa,CAAC,CAAC;CACjF;AAED,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,WAAW,EAAE,CAAC;IACvB,SAAS,EAAE,SAAS,CAAC;IACrB,OAAO,EAAE,YAAY,CAAC;IACtB,GAAG,EAAE,SAAS,CAAC;IACf,KAAK,EAAE,YAAY,CAAC;IACpB,mDAAmD;IACnD,QAAQ,EAAE,WAAW,EAAE,CAAC;IACxB,6EAA6E;IAC7E,WAAW,IAAI,WAAW,CAAC;IAC3B,kEAAkE;IAClE,YAAY,EAAE,MAAM,CAAC;IACrB;;sEAEkE;IAClE,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB;;sEAEkE;IAClE,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,MAAM,aAAa,GACrB;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GAC/B;IAAE,IAAI,EAAE,UAAU,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GACnC;IAAE,IAAI,EAAE,WAAW,CAAC;IAAC,EAAE,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,OAAO,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,GAClF;IAAE,IAAI,EAAE,aAAa,CAAC;IAAC,EAAE,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,UAAU,CAAA;CAAE,GACvD;IAAE,IAAI,EAAE,eAAe,CAAC;IAAC,KAAK,EAAE,QAAQ,CAAC;IAAC,OAAO,EAAE,WAAW,CAAA;CAAE,GAChE;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE;AACpC;4DAC4D;GAC1D;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,OAAO,CAAA;CAAE,CAAC"}
1
+ {"version":3,"file":"strategy.d.ts","sourceRoot":"","sources":["../../src/types/strategy.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAC1D,OAAO,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AACpD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AACjD,OAAO,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AACrF,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AACzC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAEhD,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB;;;OAGG;IACH,GAAG,CAAC,KAAK,EAAE,gBAAgB,EAAE,MAAM,EAAE,WAAW,GAAG,aAAa,CAAC,aAAa,CAAC,CAAC;CACjF;AAED,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,WAAW,EAAE,CAAC;IACvB,SAAS,EAAE,SAAS,CAAC;IACrB,OAAO,EAAE,YAAY,CAAC;IACtB,GAAG,EAAE,SAAS,CAAC;IACf,KAAK,EAAE,YAAY,CAAC;IACpB,mDAAmD;IACnD,QAAQ,EAAE,WAAW,EAAE,CAAC;IACxB,6EAA6E;IAC7E,WAAW,IAAI,WAAW,CAAC;IAC3B,kEAAkE;IAClE,YAAY,EAAE,MAAM,CAAC;IACrB;;sEAEkE;IAClE,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB;;sEAEkE;IAClE,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,MAAM,aAAa,GACrB;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GAC/B;IAAE,IAAI,EAAE,UAAU,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GACnC;IAAE,IAAI,EAAE,WAAW,CAAC;IAAC,EAAE,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,OAAO,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,GAClF;IAAE,IAAI,EAAE,aAAa,CAAC;IAAC,EAAE,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,UAAU,CAAA;CAAE,GACvD;IAAE,IAAI,EAAE,eAAe,CAAC;IAAC,KAAK,EAAE,QAAQ,CAAC;IAAC,OAAO,EAAE,WAAW,CAAA;CAAE,GAChE;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE;AACpC;4DAC4D;GAC1D;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,OAAO,CAAA;CAAE,CAAC;AAErD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,MAAM,WAAW,eAAe;IAC9B,qBAAqB;IACrB,OAAO,EAAE,OAAO,CAAC;IACjB;;;;OAIG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB;;;;;OAKG;IACH,oBAAoB,CAAC,EAAE,MAAM,CAAC;CAC/B"}
@@ -17,6 +17,24 @@ export interface ToolHandler<A = unknown, D = unknown> {
17
17
  parameters: JsonSchema;
18
18
  /** Capability gate — handler is excluded from `list()` when this returns false. */
19
19
  available?(capabilities: Capabilities): boolean;
20
+ /**
21
+ * Opt-in: the dispatcher is allowed to run this tool concurrently with
22
+ * other `parallelSafe` tools issued in the same turn. Absent or `false`
23
+ * means the conservative default — the dispatcher treats it as not safe
24
+ * to parallelize. Read this field via {@link isParallelSafe} so the
25
+ * default is applied uniformly. Pure-tool dispatchers (parallel
26
+ * scheduling) consume this; tag-only branches do not change runtime
27
+ * behavior.
28
+ */
29
+ parallelSafe?: boolean;
30
+ /**
31
+ * Opt-in: calling this tool with the same arguments against the same
32
+ * workspace state always produces the same result, so a content-addressed
33
+ * cache may serve repeat calls. Absent or `false` means the conservative
34
+ * default — the dispatch layer must execute the handler every call. Read
35
+ * this field via {@link isPure} so the default is applied uniformly.
36
+ */
37
+ pure?: boolean;
20
38
  execute(args: A, ctx: ToolContext): Promise<ToolResult<D>>;
21
39
  }
22
40
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../../src/types/tools.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAC3C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AACjD,OAAO,KAAK,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAE/D,MAAM,WAAW,WAAW,CAAC,CAAC,GAAG,OAAO,EAAE,CAAC,GAAG,OAAO;IACnD,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,UAAU,CAAC;IACvB,mFAAmF;IACnF,SAAS,CAAC,CAAC,YAAY,EAAE,YAAY,GAAG,OAAO,CAAC;IAChD,OAAO,CAAC,IAAI,EAAE,CAAC,EAAE,GAAG,EAAE,WAAW,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;CAC5D;AAED;;;;;;;;;GASG;AACH,MAAM,WAAW,WAAW;IAC1B,0EAA0E;IAC1E,MAAM,EAAE,WAAW,CAAC;IACpB,qEAAqE;IACrE,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,mEAAmE;IACnE,OAAO,CAAC,EAAE,YAAY,CAAC;IACvB,yDAAyD;IACzD,OAAO,CAAC,EAAE,aAAa,CAAC;IACxB,oDAAoD;IACpD,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,mEAAmE;IACnE,MAAM,CAAC,EAAE,YAAY,CAAC;CACvB;AAED;;;;GAIG;AACH,MAAM,WAAW,aAAa;IAC5B,GAAG,CACD,IAAI,EAAE,MAAM,EACZ,MAAM,CAAC,EAAE,WAAW,GACnB,OAAO,CAAC;QACT,EAAE,EAAE,OAAO,CAAC;QACZ,UAAU,EAAE,MAAM,CAAC;QACnB,WAAW,EAAE,MAAM,CAAC;QACpB,MAAM,EAAE,MAAM,CAAC;QACf,OAAO,EAAE,OAAO,EAAE,CAAC;KACpB,CAAC,CAAC;IACH,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC;QACnC,EAAE,EAAE,OAAO,CAAC;QACZ,QAAQ,EAAE;YACR,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;YACpC,IAAI,EAAE,MAAM,CAAC;YACb,IAAI,CAAC,EAAE,MAAM,CAAC;YACd,MAAM,CAAC,EAAE,MAAM,CAAC;SACjB,EAAE,CAAC;KACL,CAAC,CAAC;IACH,SAAS,CAAC,IAAI,CAAC,EAAE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IACzE,MAAM,CAAC,IAAI,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;IACzC,OAAO,IAAI,IAAI,CAAC;CACjB;AAED,MAAM,MAAM,MAAM,GAAG,CAAC,MAAM,EAAE,MAAM,KAAK;IAAE,QAAQ,EAAE,WAAW,EAAE,CAAA;CAAE,CAAC;AACrE,MAAM,WAAW,WAAW;IAC1B,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;IACpC,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,+EAA+E;AAC/E,MAAM,WAAW,YAAY;IAC3B,MAAM,IAAI,OAAO,CAAC;IAClB,OAAO,IAAI,aAAa,CAAC;CAC1B;AAED,MAAM,WAAW,UAAU,CAAC,CAAC,GAAG,OAAO;IACrC,EAAE,EAAE,OAAO,CAAC;IACZ,gEAAgE;IAChE,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,CAAC,CAAC;IACT,uDAAuD;IACvD,cAAc,CAAC,EAAE,OAAO,CAAC,SAAS,CAAC,CAAC;IACpC,YAAY,CAAC,EAAE,OAAO,CAAC,YAAY,CAAC,CAAC;CACtC;AAED,MAAM,WAAW,QAAQ;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,OAAO,CAAC;CACf;AAED,MAAM,WAAW,YAAY;IAC3B;;;;;OAKG;IACH,QAAQ,CAAC,OAAO,EAAE,WAAW,GAAG,IAAI,CAAC;IACrC;;;;;;;;;;OAUG;IACH,OAAO,CAAC,OAAO,EAAE,WAAW,GAAG,IAAI,CAAC;IACpC,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC;IAClC,IAAI,CAAC,IAAI,CAAC,EAAE;QAAE,YAAY,CAAC,EAAE,YAAY,CAAA;KAAE,GAAG,WAAW,EAAE,CAAC;IAC5D,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC;IAC3B,4DAA4D;IAC5D,IAAI,IAAI,YAAY,CAAC;CACtB;AAED,MAAM,WAAW,YAAY;IAC3B,OAAO,CAAC,IAAI,EAAE,QAAQ,EAAE,GAAG,EAAE,WAAW,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;CAChE"}
1
+ {"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../../src/types/tools.ts"],"names":[],"mappings":"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"}