@framers/agentos 0.10.40 → 0.11.1

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 (144) hide show
  1. package/README.md +1 -1
  2. package/dist/api/agency.d.ts.map +1 -1
  3. package/dist/api/agency.js +140 -114
  4. package/dist/api/agency.js.map +1 -1
  5. package/dist/api/agent.d.ts +9 -5
  6. package/dist/api/agent.d.ts.map +1 -1
  7. package/dist/api/agent.js +7 -5
  8. package/dist/api/agent.js.map +1 -1
  9. package/dist/api/agentExport.d.ts +60 -21
  10. package/dist/api/agentExport.d.ts.map +1 -1
  11. package/dist/api/agentExport.js +240 -41
  12. package/dist/api/agentExport.js.map +1 -1
  13. package/dist/api/agentExportCore.d.ts +44 -6
  14. package/dist/api/agentExportCore.d.ts.map +1 -1
  15. package/dist/api/agentExportCore.js +43 -8
  16. package/dist/api/agentExportCore.js.map +1 -1
  17. package/dist/api/agentExportRedact.d.ts +58 -0
  18. package/dist/api/agentExportRedact.d.ts.map +1 -0
  19. package/dist/api/agentExportRedact.js +219 -0
  20. package/dist/api/agentExportRedact.js.map +1 -0
  21. package/dist/api/generateText.d.ts +11 -0
  22. package/dist/api/generateText.d.ts.map +1 -1
  23. package/dist/api/generateText.js +27 -0
  24. package/dist/api/generateText.js.map +1 -1
  25. package/dist/api/model.d.ts +44 -5
  26. package/dist/api/model.d.ts.map +1 -1
  27. package/dist/api/model.js +84 -8
  28. package/dist/api/model.js.map +1 -1
  29. package/dist/api/runtime/approval-gate.d.ts +92 -0
  30. package/dist/api/runtime/approval-gate.d.ts.map +1 -0
  31. package/dist/api/runtime/approval-gate.js +182 -0
  32. package/dist/api/runtime/approval-gate.js.map +1 -0
  33. package/dist/api/runtime/strategies/shared.d.ts.map +1 -1
  34. package/dist/api/runtime/strategies/shared.js +21 -4
  35. package/dist/api/runtime/strategies/shared.js.map +1 -1
  36. package/dist/api/runtime/tool-emulation/loop.d.ts +16 -0
  37. package/dist/api/runtime/tool-emulation/loop.d.ts.map +1 -1
  38. package/dist/api/runtime/tool-emulation/loop.js +25 -3
  39. package/dist/api/runtime/tool-emulation/loop.js.map +1 -1
  40. package/dist/api/streamText.d.ts.map +1 -1
  41. package/dist/api/streamText.js +33 -0
  42. package/dist/api/streamText.js.map +1 -1
  43. package/dist/api/types.d.ts +23 -4
  44. package/dist/api/types.d.ts.map +1 -1
  45. package/dist/api/types.js.map +1 -1
  46. package/dist/cognition/emergent/EmergentCapabilityEngine.d.ts +120 -32
  47. package/dist/cognition/emergent/EmergentCapabilityEngine.d.ts.map +1 -1
  48. package/dist/cognition/emergent/EmergentCapabilityEngine.js +602 -19
  49. package/dist/cognition/emergent/EmergentCapabilityEngine.js.map +1 -1
  50. package/dist/cognition/emergent/EmergentToolRegistry.d.ts +180 -38
  51. package/dist/cognition/emergent/EmergentToolRegistry.d.ts.map +1 -1
  52. package/dist/cognition/emergent/EmergentToolRegistry.js +645 -96
  53. package/dist/cognition/emergent/EmergentToolRegistry.js.map +1 -1
  54. package/dist/cognition/emergent/ForgeToolMetaTool.js +5 -5
  55. package/dist/cognition/emergent/ForgeToolMetaTool.js.map +1 -1
  56. package/dist/cognition/emergent/capabilities.d.ts +27 -0
  57. package/dist/cognition/emergent/capabilities.d.ts.map +1 -0
  58. package/dist/cognition/emergent/capabilities.js +50 -0
  59. package/dist/cognition/emergent/capabilities.js.map +1 -0
  60. package/dist/cognition/emergent/index.d.ts +4 -1
  61. package/dist/cognition/emergent/index.d.ts.map +1 -1
  62. package/dist/cognition/emergent/index.js +2 -0
  63. package/dist/cognition/emergent/index.js.map +1 -1
  64. package/dist/cognition/emergent/persisted-source.d.ts +106 -0
  65. package/dist/cognition/emergent/persisted-source.d.ts.map +1 -0
  66. package/dist/cognition/emergent/persisted-source.js +370 -0
  67. package/dist/cognition/emergent/persisted-source.js.map +1 -0
  68. package/dist/cognition/emergent/types.d.ts +91 -1
  69. package/dist/cognition/emergent/types.d.ts.map +1 -1
  70. package/dist/cognition/emergent/types.js.map +1 -1
  71. package/dist/cognition/emergent/wrapForgeTool.d.ts +4 -1
  72. package/dist/cognition/emergent/wrapForgeTool.d.ts.map +1 -1
  73. package/dist/cognition/emergent/wrapForgeTool.js +3 -0
  74. package/dist/cognition/emergent/wrapForgeTool.js.map +1 -1
  75. package/dist/cognition/rag/multimodal/createMultimodalIndexerFromResolver.d.ts +5 -3
  76. package/dist/cognition/rag/multimodal/createMultimodalIndexerFromResolver.d.ts.map +1 -1
  77. package/dist/cognition/rag/multimodal/createMultimodalIndexerFromResolver.js +5 -3
  78. package/dist/cognition/rag/multimodal/createMultimodalIndexerFromResolver.js.map +1 -1
  79. package/dist/core/llm/providers/implementations/OpenRouterProvider.js +1 -1
  80. package/dist/core/llm/providers/implementations/OpenRouterProvider.js.map +1 -1
  81. package/dist/core/llm/providers/url-secrets.d.ts +21 -0
  82. package/dist/core/llm/providers/url-secrets.d.ts.map +1 -1
  83. package/dist/core/llm/providers/url-secrets.js +72 -0
  84. package/dist/core/llm/providers/url-secrets.js.map +1 -1
  85. package/dist/core/tools/ToolOrchestrator.d.ts +2 -0
  86. package/dist/core/tools/ToolOrchestrator.d.ts.map +1 -1
  87. package/dist/core/tools/ToolOrchestrator.js +25 -2
  88. package/dist/core/tools/ToolOrchestrator.js.map +1 -1
  89. package/dist/index.d.ts +1 -1
  90. package/dist/index.d.ts.map +1 -1
  91. package/dist/index.js.map +1 -1
  92. package/dist/io/hearing/providers/DeepgramBatchSTTProvider.d.ts +13 -5
  93. package/dist/io/hearing/providers/DeepgramBatchSTTProvider.d.ts.map +1 -1
  94. package/dist/io/hearing/providers/DeepgramBatchSTTProvider.js +4 -3
  95. package/dist/io/hearing/providers/DeepgramBatchSTTProvider.js.map +1 -1
  96. package/dist/io/hearing/providers/OpenAIWhisperSpeechToTextProvider.d.ts +40 -14
  97. package/dist/io/hearing/providers/OpenAIWhisperSpeechToTextProvider.d.ts.map +1 -1
  98. package/dist/io/hearing/providers/OpenAIWhisperSpeechToTextProvider.js +108 -18
  99. package/dist/io/hearing/providers/OpenAIWhisperSpeechToTextProvider.js.map +1 -1
  100. package/dist/io/media/images/imageToBuffer.d.ts +10 -4
  101. package/dist/io/media/images/imageToBuffer.d.ts.map +1 -1
  102. package/dist/io/media/images/imageToBuffer.js +62 -5
  103. package/dist/io/media/images/imageToBuffer.js.map +1 -1
  104. package/dist/io/media/video/VideoAnalyzer.d.ts.map +1 -1
  105. package/dist/io/media/video/VideoAnalyzer.js +4 -1
  106. package/dist/io/media/video/VideoAnalyzer.js.map +1 -1
  107. package/dist/io/speech/SpeechProviderResolver.d.ts +11 -9
  108. package/dist/io/speech/SpeechProviderResolver.d.ts.map +1 -1
  109. package/dist/io/speech/SpeechProviderResolver.js +18 -12
  110. package/dist/io/speech/SpeechProviderResolver.js.map +1 -1
  111. package/dist/io/speech/SpeechRuntime.d.ts.map +1 -1
  112. package/dist/io/speech/SpeechRuntime.js +9 -1
  113. package/dist/io/speech/SpeechRuntime.js.map +1 -1
  114. package/dist/io/speech/providerCatalog.d.ts.map +1 -1
  115. package/dist/io/speech/providerCatalog.js +6 -2
  116. package/dist/io/speech/providerCatalog.js.map +1 -1
  117. package/dist/io/speech/providers/OpenAITextToSpeechProvider.d.ts +5 -0
  118. package/dist/io/speech/providers/OpenAITextToSpeechProvider.d.ts.map +1 -1
  119. package/dist/io/speech/providers/OpenAITextToSpeechProvider.js.map +1 -1
  120. package/dist/io/voice-pipeline/providers/CartesiaBatchTTS.d.ts +11 -3
  121. package/dist/io/voice-pipeline/providers/CartesiaBatchTTS.d.ts.map +1 -1
  122. package/dist/io/voice-pipeline/providers/CartesiaBatchTTS.js +11 -3
  123. package/dist/io/voice-pipeline/providers/CartesiaBatchTTS.js.map +1 -1
  124. package/dist/io/voice-pipeline/providers/CartesiaStreamingTTS.d.ts +1 -1
  125. package/dist/io/voice-pipeline/providers/CartesiaStreamingTTS.d.ts.map +1 -1
  126. package/dist/io/voice-pipeline/providers/CartesiaStreamingTTS.js +2 -2
  127. package/dist/io/voice-pipeline/providers/CartesiaStreamingTTS.js.map +1 -1
  128. package/dist/io/voice-pipeline/providers/DeepgramPreRecordedBatchSTT.d.ts +8 -0
  129. package/dist/io/voice-pipeline/providers/DeepgramPreRecordedBatchSTT.d.ts.map +1 -1
  130. package/dist/io/voice-pipeline/providers/DeepgramPreRecordedBatchSTT.js +3 -0
  131. package/dist/io/voice-pipeline/providers/DeepgramPreRecordedBatchSTT.js.map +1 -1
  132. package/dist/io/voice-pipeline/providers/DeepgramStreamingSTT.d.ts +11 -3
  133. package/dist/io/voice-pipeline/providers/DeepgramStreamingSTT.d.ts.map +1 -1
  134. package/dist/io/voice-pipeline/providers/DeepgramStreamingSTT.js +22 -3
  135. package/dist/io/voice-pipeline/providers/DeepgramStreamingSTT.js.map +1 -1
  136. package/dist/io/voice-pipeline/providers/ElevenLabsStreamingSTT.d.ts +3 -2
  137. package/dist/io/voice-pipeline/providers/ElevenLabsStreamingSTT.d.ts.map +1 -1
  138. package/dist/io/voice-pipeline/providers/ElevenLabsStreamingSTT.js +7 -4
  139. package/dist/io/voice-pipeline/providers/ElevenLabsStreamingSTT.js.map +1 -1
  140. package/dist/io/voice-pipeline/providers/OpenAIWhisperBatchSTT.d.ts +5 -3
  141. package/dist/io/voice-pipeline/providers/OpenAIWhisperBatchSTT.d.ts.map +1 -1
  142. package/dist/io/voice-pipeline/providers/OpenAIWhisperBatchSTT.js +24 -6
  143. package/dist/io/voice-pipeline/providers/OpenAIWhisperBatchSTT.js.map +1 -1
  144. package/package.json +1 -1
@@ -0,0 +1,92 @@
1
+ /**
2
+ * @file approval-gate.ts
3
+ * The tool-approval gate `agency()` installs when `hitl.approvals.beforeTool`
4
+ * is listed. It rides the per-call options as `__approvalGate`; the native
5
+ * tool loops of `generateText` and `streamText` and the prompt-tool shim call
6
+ * it after `onBeforeToolExecution`, on the arguments that hook left. It never
7
+ * throws: a rejection, a handler error, a timeout, a guardrail block and a
8
+ * received gate that threw all skip the tool. A handler error or an
9
+ * `onTimeout: 'error'` timeout is stored in the owner's slot, which `agency()`
10
+ * checks when its strategy settles.
11
+ */
12
+ import type { AgencyOptions, ApprovalDecision, ApprovalRequest } from '../types.js';
13
+ /**
14
+ * The only value that approves a tool call. A registered symbol, so a gate
15
+ * received from a parent agency loaded from another copy of this module
16
+ * compares equal.
17
+ */
18
+ export declare const APPROVAL_GRANTED: unique symbol;
19
+ /** What a gate receives: the tool call as the hook left it. */
20
+ export interface ApprovalGateInfo {
21
+ /** Tool name. */
22
+ name: string;
23
+ /** Arguments the tool will run with. */
24
+ args: Record<string, unknown>;
25
+ /** Tool call ID from the model (`''` on the prompt-tool path). */
26
+ id: string;
27
+ /** Current step index of the tool loop. */
28
+ step: number;
29
+ }
30
+ /** A refusal: the tool is skipped and the model is told why. */
31
+ export interface ApprovalRefusal {
32
+ skipped: true;
33
+ reason: string;
34
+ }
35
+ /** The per-call gate function. */
36
+ export type ApprovalGateFn = (info: ApprovalGateInfo) => Promise<typeof APPROVAL_GRANTED | ApprovalRefusal>;
37
+ /** The first handler error or `'error'` timeout of a call, a seat or a chair, and whether its owner settled. */
38
+ export interface ApprovalSlot {
39
+ error?: unknown;
40
+ settled: boolean;
41
+ }
42
+ /** Creates an empty slot for one call, seat or chair. */
43
+ export declare function createApprovalSlot(): ApprovalSlot;
44
+ /**
45
+ * The gate a call received from a parent agency: `undefined` when none was
46
+ * passed (the key absent or holding `undefined`, which a forwarding strategy
47
+ * may pass); the function when one was; and, for a value that is present but
48
+ * not a function, a gate that refuses every tool and asks no handler. Fail
49
+ * closed: a forwarded gate can only skip tools, never approve one.
50
+ */
51
+ export declare function composeReceivedGate(value: unknown): ApprovalGateFn | undefined;
52
+ /**
53
+ * Applies `timeoutMs` and `onTimeout` to the HITL handler: resolves with the
54
+ * handler's decision, with an auto-decision on `'approve'` / `'reject'`
55
+ * timeouts, and rejects on `'error'` timeouts or when the handler throws.
56
+ */
57
+ export declare function resolveApprovalDecision(hitlConfig: NonNullable<AgencyOptions['hitl']>, request: ApprovalRequest): Promise<ApprovalDecision>;
58
+ /** Options of {@link createApprovalGate}. */
59
+ export interface CreateApprovalGateOptions {
60
+ /** The agency's HITL config; `approvals.beforeTool` lists the tools it covers. */
61
+ hitl: NonNullable<AgencyOptions['hitl']>;
62
+ /** The name the approval request carries as `agent` (the agency, or a panel seat). */
63
+ agentName: string;
64
+ /** The agency's callbacks; a callback that throws is logged. */
65
+ on: AgencyOptions['on'];
66
+ /** The slot of the call, seat or chair that owns this gate. */
67
+ slot: ApprovalSlot;
68
+ /** A parent agency's gate: it decides first; its refusal is final and its handler is asked first. */
69
+ received?: ApprovalGateFn;
70
+ }
71
+ /**
72
+ * Builds the gate for one call (or one panel seat or chair). The received
73
+ * gate, if any, decides first; only its exact {@link APPROVAL_GRANTED}
74
+ * approves, anything else (a throw, a refusal, a string) is a refusal and
75
+ * nothing is stored in this slot. Then, for a tool listed in `beforeTool`
76
+ * (or every tool, for `'*'`), the handler is asked through
77
+ * {@link resolveApprovalDecision}; an approved decision runs the post-approval
78
+ * guardrails over the arguments unless `hitl.guardrailOverride` is `false`.
79
+ * A `modifications.toolArgs` on the decision is not applied: argument
80
+ * rewriting belongs to `onBeforeToolExecution`, which ran first. Once the
81
+ * slot holds an error (the call will reject) or its owner has settled, the
82
+ * gate skips every tool without asking the handler or firing approval
83
+ * events; after settlement it also drops any later error.
84
+ */
85
+ export declare function createApprovalGate(o: CreateApprovalGateOptions): ApprovalGateFn;
86
+ /**
87
+ * Calls a gate from a tool loop. A gate that throws is a refusal, never a
88
+ * rejected call, and any result but the exact approval is a refusal with a
89
+ * string reason, so a gate passed through unchanged cannot break the loop.
90
+ */
91
+ export declare function askApprovalGate(gate: ApprovalGateFn, info: ApprovalGateInfo): Promise<typeof APPROVAL_GRANTED | ApprovalRefusal>;
92
+ //# sourceMappingURL=approval-gate.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"approval-gate.d.ts","sourceRoot":"","sources":["../../../src/api/runtime/approval-gate.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,OAAO,KAAK,EAAE,aAAa,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAGpF;;;;GAIG;AACH,eAAO,MAAM,gBAAgB,EAAE,OAAO,MAAoD,CAAC;AAE3F,+DAA+D;AAC/D,MAAM,WAAW,gBAAgB;IAC/B,iBAAiB;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,wCAAwC;IACxC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC9B,kEAAkE;IAClE,EAAE,EAAE,MAAM,CAAC;IACX,2CAA2C;IAC3C,IAAI,EAAE,MAAM,CAAC;CACd;AAED,gEAAgE;AAChE,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,IAAI,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,kCAAkC;AAClC,MAAM,MAAM,cAAc,GAAG,CAAC,IAAI,EAAE,gBAAgB,KAAK,OAAO,CAAC,OAAO,gBAAgB,GAAG,eAAe,CAAC,CAAC;AAE5G,gHAAgH;AAChH,MAAM,WAAW,YAAY;IAC3B,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,yDAAyD;AACzD,wBAAgB,kBAAkB,IAAI,YAAY,CAEjD;AAED;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,OAAO,GAAG,cAAc,GAAG,SAAS,CAI9E;AAqBD;;;;GAIG;AACH,wBAAsB,uBAAuB,CAC3C,UAAU,EAAE,WAAW,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,EAC9C,OAAO,EAAE,eAAe,GACvB,OAAO,CAAC,gBAAgB,CAAC,CA4B3B;AAED,6CAA6C;AAC7C,MAAM,WAAW,yBAAyB;IACxC,kFAAkF;IAClF,IAAI,EAAE,WAAW,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC;IACzC,sFAAsF;IACtF,SAAS,EAAE,MAAM,CAAC;IAClB,gEAAgE;IAChE,EAAE,EAAE,aAAa,CAAC,IAAI,CAAC,CAAC;IACxB,+DAA+D;IAC/D,IAAI,EAAE,YAAY,CAAC;IACnB,qGAAqG;IACrG,QAAQ,CAAC,EAAE,cAAc,CAAC;CAC3B;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,kBAAkB,CAAC,CAAC,EAAE,yBAAyB,GAAG,cAAc,CAqE/E;AAED;;;;GAIG;AACH,wBAAsB,eAAe,CAAC,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE,gBAAgB,GAAG,OAAO,CAAC,OAAO,gBAAgB,GAAG,eAAe,CAAC,CAOtI"}
@@ -0,0 +1,182 @@
1
+ import { AgencyConfigError } from '../types.js';
2
+ /**
3
+ * The only value that approves a tool call. A registered symbol, so a gate
4
+ * received from a parent agency loaded from another copy of this module
5
+ * compares equal.
6
+ */
7
+ export const APPROVAL_GRANTED = Symbol.for('agentos.approvalGate.approved');
8
+ /** Creates an empty slot for one call, seat or chair. */
9
+ export function createApprovalSlot() {
10
+ return { settled: false };
11
+ }
12
+ /**
13
+ * The gate a call received from a parent agency: `undefined` when none was
14
+ * passed (the key absent or holding `undefined`, which a forwarding strategy
15
+ * may pass); the function when one was; and, for a value that is present but
16
+ * not a function, a gate that refuses every tool and asks no handler. Fail
17
+ * closed: a forwarded gate can only skip tools, never approve one.
18
+ */
19
+ export function composeReceivedGate(value) {
20
+ if (value === undefined)
21
+ return undefined;
22
+ if (typeof value === 'function')
23
+ return value;
24
+ return async () => refusal('the received approval gate is not a function');
25
+ }
26
+ const refusal = (reason) => ({ skipped: true, reason });
27
+ /** Anything but the exact approval is a refusal; a refusal keeps its own string reason. */
28
+ function asVerdict(verdict, fallback) {
29
+ if (verdict === APPROVAL_GRANTED)
30
+ return APPROVAL_GRANTED;
31
+ const reason = verdict !== null && typeof verdict === 'object' && typeof verdict.reason === 'string'
32
+ ? verdict.reason
33
+ : fallback;
34
+ return refusal(reason);
35
+ }
36
+ function safeCall(fn, event) {
37
+ try {
38
+ fn?.(event);
39
+ }
40
+ catch (err) {
41
+ console.warn('[agentos] agency callback threw:', err);
42
+ }
43
+ }
44
+ /**
45
+ * Applies `timeoutMs` and `onTimeout` to the HITL handler: resolves with the
46
+ * handler's decision, with an auto-decision on `'approve'` / `'reject'`
47
+ * timeouts, and rejects on `'error'` timeouts or when the handler throws.
48
+ */
49
+ export async function resolveApprovalDecision(hitlConfig, request) {
50
+ const timeoutMs = hitlConfig.timeoutMs ?? 30000;
51
+ const onTimeout = hitlConfig.onTimeout ?? 'reject';
52
+ return await new Promise((resolve, reject) => {
53
+ const timer = setTimeout(() => {
54
+ if (onTimeout === 'approve') {
55
+ resolve({ approved: true, reason: 'Auto-approved after HITL timeout' });
56
+ return;
57
+ }
58
+ if (onTimeout === 'error') {
59
+ reject(new AgencyConfigError('HITL approval timed out'));
60
+ return;
61
+ }
62
+ resolve({ approved: false, reason: 'Auto-rejected after HITL timeout' });
63
+ }, timeoutMs);
64
+ // A handler that throws before returning a promise rejects here too, and
65
+ // the timer is cleared either way.
66
+ Promise.resolve()
67
+ .then(() => hitlConfig.handler(request))
68
+ .then((decision) => {
69
+ clearTimeout(timer);
70
+ resolve(decision);
71
+ })
72
+ .catch((error) => {
73
+ clearTimeout(timer);
74
+ reject(error);
75
+ });
76
+ });
77
+ }
78
+ /**
79
+ * Builds the gate for one call (or one panel seat or chair). The received
80
+ * gate, if any, decides first; only its exact {@link APPROVAL_GRANTED}
81
+ * approves, anything else (a throw, a refusal, a string) is a refusal and
82
+ * nothing is stored in this slot. Then, for a tool listed in `beforeTool`
83
+ * (or every tool, for `'*'`), the handler is asked through
84
+ * {@link resolveApprovalDecision}; an approved decision runs the post-approval
85
+ * guardrails over the arguments unless `hitl.guardrailOverride` is `false`.
86
+ * A `modifications.toolArgs` on the decision is not applied: argument
87
+ * rewriting belongs to `onBeforeToolExecution`, which ran first. Once the
88
+ * slot holds an error (the call will reject) or its owner has settled, the
89
+ * gate skips every tool without asking the handler or firing approval
90
+ * events; after settlement it also drops any later error.
91
+ */
92
+ export function createApprovalGate(o) {
93
+ const listed = o.hitl.approvals?.beforeTool ?? [];
94
+ const covers = (name) => listed.includes('*') || listed.includes(name);
95
+ /** The refusal of a gate whose call is over: its owner settled, or an earlier approval failed. */
96
+ const stopped = () => {
97
+ if (o.slot.settled)
98
+ return refusal('the run has settled');
99
+ if (o.slot.error !== undefined)
100
+ return refusal('an earlier tool approval failed');
101
+ return undefined;
102
+ };
103
+ return async (info) => {
104
+ const early = stopped();
105
+ if (early)
106
+ return early;
107
+ if (o.received) {
108
+ let verdict;
109
+ try {
110
+ verdict = await o.received(info);
111
+ }
112
+ catch (err) {
113
+ console.warn('[agentos] the approval gate received from the parent agency threw:', err);
114
+ return refusal('not approved by the parent agency');
115
+ }
116
+ const parent = asVerdict(verdict, 'not approved by the parent agency');
117
+ if (parent !== APPROVAL_GRANTED)
118
+ return parent;
119
+ }
120
+ if (!covers(info.name))
121
+ return APPROVAL_GRANTED;
122
+ const request = {
123
+ id: crypto.randomUUID(),
124
+ type: 'tool',
125
+ agent: o.agentName,
126
+ action: info.name,
127
+ description: `Tool "${info.name}" is about to run`,
128
+ details: { tool: info.name, args: info.args, step: info.step, callId: info.id },
129
+ context: { agentCalls: [], totalTokens: 0, totalCostUSD: 0, elapsedMs: 0 },
130
+ };
131
+ safeCall(o.on?.approvalRequested, request);
132
+ let decision;
133
+ try {
134
+ decision = await resolveApprovalDecision(o.hitl, request);
135
+ }
136
+ catch (err) {
137
+ if (!o.slot.settled) {
138
+ // A rejection with no reason still fails the call.
139
+ if (o.slot.error === undefined)
140
+ o.slot.error = err === undefined ? new AgencyConfigError('HITL approval failed') : err;
141
+ safeCall(o.on?.error, { agent: o.agentName, error: err instanceof Error ? err : new Error(String(err)), timestamp: Date.now() });
142
+ }
143
+ return refusal(err instanceof Error ? err.message : 'approval failed');
144
+ }
145
+ // A decision that arrives after the call ended (a concurrent approval
146
+ // failed, or the owner settled) fires nothing and runs nothing.
147
+ const late = stopped();
148
+ if (late)
149
+ return late;
150
+ safeCall(o.on?.approvalDecided, decision);
151
+ if (!decision.approved)
152
+ return refusal(decision.reason ?? 'rejected by the approval handler');
153
+ if (o.hitl.guardrailOverride !== false) {
154
+ const { runPostApprovalGuardrails } = await import('../agency.js');
155
+ const result = await runPostApprovalGuardrails(info.name, info.args, o.hitl.postApprovalGuardrails ?? ['pii-redaction', 'code-safety'], o.on);
156
+ // The guardrail check is awaited: a call that ended meanwhile fires nothing.
157
+ const afterGuardrails = stopped();
158
+ if (afterGuardrails)
159
+ return afterGuardrails;
160
+ if (!result.passed) {
161
+ safeCall(o.on?.guardrailHitlOverride, { guardrailId: result.guardrailId, reason: result.reason, toolName: info.name, timestamp: Date.now() });
162
+ return refusal(`guardrail ${result.guardrailId}: ${result.reason}`);
163
+ }
164
+ }
165
+ return stopped() ?? APPROVAL_GRANTED;
166
+ };
167
+ }
168
+ /**
169
+ * Calls a gate from a tool loop. A gate that throws is a refusal, never a
170
+ * rejected call, and any result but the exact approval is a refusal with a
171
+ * string reason, so a gate passed through unchanged cannot break the loop.
172
+ */
173
+ export async function askApprovalGate(gate, info) {
174
+ try {
175
+ return asVerdict(await gate(info), 'not approved by the approval gate');
176
+ }
177
+ catch (err) {
178
+ console.warn('[agentos] approval gate threw:', err);
179
+ return refusal('the approval gate threw');
180
+ }
181
+ }
182
+ //# sourceMappingURL=approval-gate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"approval-gate.js","sourceRoot":"","sources":["../../../src/api/runtime/approval-gate.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"shared.d.ts","sourceRoot":"","sources":["../../../../src/api/runtime/strategies/shared.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"shared.d.ts","sourceRoot":"","sources":["../../../../src/api/runtime/strategies/shared.ts"],"names":[],"mappings":"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"}
@@ -12,6 +12,7 @@
12
12
  */
13
13
  import { agent as createAgent } from '../agent.js';
14
14
  import { mergeAdaptableTools } from '../toolAdapter.js';
15
+ import { knownProviderPrefixOf, routedProviderOf } from '../../model.js';
15
16
  import { AgencyQuorumError } from '../types.js';
16
17
  /**
17
18
  * Type guard that checks whether a value is a pre-built {@link Agent} instance
@@ -161,14 +162,30 @@ export function buildAgentCallUsage(resultUsage) {
161
162
  * @see {@link resolveAgent} -- calls this internally before creating an agent.
162
163
  */
163
164
  export function mergeDefaults(agentConfig, agencyConfig) {
165
+ // A seat whose own model names a provider (`anthropic:claude-opus-5-5`) does
166
+ // not inherit the agency's provider, so the prefix never meets an inherited
167
+ // `ollama`, under which a colon is never split.
168
+ const seatPrefix = agentConfig.provider === 'ollama' ? undefined : knownProviderPrefixOf(agentConfig.model);
169
+ const model = agentConfig.model ?? agencyConfig.model;
170
+ const provider = agentConfig.provider ?? (seatPrefix !== undefined ? undefined : agencyConfig.provider);
171
+ // The agency's key and URL belong to the provider the agency's own calls go
172
+ // to. A seat inherits them only when its calls go to that same provider: a
173
+ // seat whose calls go to another provider (named by a model prefix in either
174
+ // form, or by its own `provider`), or to auto-detection, which may pick any
175
+ // vendor, does not, since sending them there would leak the key to another
176
+ // vendor. When the agency's provider comes from auto-detection, it is
177
+ // unknown and the seat inherits them.
178
+ const seatRouted = routedProviderOf({ provider, model });
179
+ const agencyRouted = routedProviderOf(agencyConfig);
180
+ const otherVendor = agencyRouted !== undefined && seatRouted !== agencyRouted;
164
181
  return {
165
182
  // Agency-level model/provider/apiKey/baseUrl serve as defaults.
166
183
  // They are placed BEFORE the spread of agentConfig so that agent-level
167
184
  // values override them when present.
168
- model: agentConfig.model ?? agencyConfig.model,
169
- provider: agentConfig.provider ?? agencyConfig.provider,
170
- apiKey: agentConfig.apiKey ?? agencyConfig.apiKey,
171
- baseUrl: agentConfig.baseUrl ?? agencyConfig.baseUrl,
185
+ model,
186
+ provider,
187
+ apiKey: agentConfig.apiKey ?? (otherVendor ? undefined : agencyConfig.apiKey),
188
+ baseUrl: agentConfig.baseUrl ?? (otherVendor ? undefined : agencyConfig.baseUrl),
172
189
  ...agentConfig,
173
190
  // Tools are merged separately because we want additive merging
174
191
  // (agency tools + agent tools) rather than wholesale replacement.
@@ -1 +1 @@
1
- {"version":3,"file":"shared.js","sourceRoot":"","sources":["../../../../src/api/runtime/strategies/shared.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"shared.js","sourceRoot":"","sources":["../../../../src/api/runtime/strategies/shared.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,5 @@
1
1
  import type { ITool, ToolExecutionContext } from '../../../core/tools/ITool';
2
+ import { type ApprovalGateFn } from '../approval-gate';
2
3
  export interface EmulatedLoopMessage {
3
4
  role: string;
4
5
  content: string;
@@ -27,6 +28,21 @@ export interface RunEmulatedToolLoopOptions {
27
28
  * refuse a failover that would run the call again.
28
29
  */
29
30
  onToolExecute?: (toolName: string) => void;
31
+ /**
32
+ * Called before each parsed call runs, on `{ name, args, id: '', step }`.
33
+ * The returned `args` replace the call's; `null` skips the tool. A hook
34
+ * that throws is logged and the tool runs.
35
+ */
36
+ onBeforeToolExecution?: (info: {
37
+ name: string;
38
+ args: Record<string, unknown>;
39
+ id: string;
40
+ step: number;
41
+ }) => Promise<{
42
+ args: Record<string, unknown>;
43
+ } | null>;
44
+ /** The agency approval gate, called after the hook: anything but its exact approval skips the tool. */
45
+ approvalGate?: ApprovalGateFn;
30
46
  }
31
47
  export interface EmulatedToolLoopResult {
32
48
  text: string;
@@ -1 +1 @@
1
- {"version":3,"file":"loop.d.ts","sourceRoot":"","sources":["../../../../src/api/runtime/tool-emulation/loop.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AAK7E,MAAM,WAAW,mBAAmB;IAAG,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;CAAE;AAEvE,MAAM,WAAW,sBAAsB;IAAG,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAC;CAAE;AAExG,MAAM,WAAW,0BAA0B;IACzC,KAAK,EAAE,KAAK,EAAE,CAAC;IACf,QAAQ,EAAE,mBAAmB,EAAE,CAAC;IAChC,oEAAoE;IACpE,SAAS,EAAE,CAAC,QAAQ,EAAE,mBAAmB,EAAE,KAAK,OAAO,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE;YAAE,WAAW,CAAC,EAAE,MAAM,CAAA;SAAE,CAAA;KAAE,CAAC,CAAC;IAC5G,aAAa,EAAE,MAAM,CAAC;IACtB,uDAAuD;IACvD,WAAW,CAAC,EAAE,oBAAoB,CAAC;IACnC;;;;OAIG;IACH,aAAa,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC;CAC5C;AAED,MAAM,WAAW,sBAAsB;IACrC,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,sBAAsB,EAAE,CAAC;IACpC,YAAY,EAAE,MAAM,GAAG,YAAY,CAAC;IACpC,WAAW,EAAE,MAAM,CAAC;CACrB;AAED;;;;;GAKG;AACH,wBAAsB,mBAAmB,CACvC,IAAI,EAAE,0BAA0B,GAC/B,OAAO,CAAC,sBAAsB,CAAC,CAiDjC"}
1
+ {"version":3,"file":"loop.d.ts","sourceRoot":"","sources":["../../../../src/api/runtime/tool-emulation/loop.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AAC7E,OAAO,EAAqC,KAAK,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAK1F,MAAM,WAAW,mBAAmB;IAAG,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;CAAE;AAEvE,MAAM,WAAW,sBAAsB;IAAG,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAC;CAAE;AAExG,MAAM,WAAW,0BAA0B;IACzC,KAAK,EAAE,KAAK,EAAE,CAAC;IACf,QAAQ,EAAE,mBAAmB,EAAE,CAAC;IAChC,oEAAoE;IACpE,SAAS,EAAE,CAAC,QAAQ,EAAE,mBAAmB,EAAE,KAAK,OAAO,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE;YAAE,WAAW,CAAC,EAAE,MAAM,CAAA;SAAE,CAAA;KAAE,CAAC,CAAC;IAC5G,aAAa,EAAE,MAAM,CAAC;IACtB,uDAAuD;IACvD,WAAW,CAAC,EAAE,oBAAoB,CAAC;IACnC;;;;OAIG;IACH,aAAa,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC;IAC3C;;;;OAIG;IACH,qBAAqB,CAAC,EAAE,CAAC,IAAI,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAAC,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,KAAK,OAAO,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KAAE,GAAG,IAAI,CAAC,CAAC;IAC/J,uGAAuG;IACvG,YAAY,CAAC,EAAE,cAAc,CAAC;CAC/B;AAED,MAAM,WAAW,sBAAsB;IACrC,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,sBAAsB,EAAE,CAAC;IACpC,YAAY,EAAE,MAAM,GAAG,YAAY,CAAC;IACpC,WAAW,EAAE,MAAM,CAAC;CACrB;AAED;;;;;GAKG;AACH,wBAAsB,mBAAmB,CACvC,IAAI,EAAE,0BAA0B,GAC/B,OAAO,CAAC,sBAAsB,CAAC,CAqEjC"}
@@ -1,3 +1,4 @@
1
+ import { APPROVAL_GRANTED, askApprovalGate } from '../approval-gate.js';
1
2
  import { renderToolSystemBlock } from './renderer.js';
2
3
  import { parseToolCalls } from './parser.js';
3
4
  import { formatToolResponse } from './activation.js';
@@ -33,14 +34,35 @@ export async function runEmulatedToolLoop(opts) {
33
34
  if (!tool) {
34
35
  return formatToolResponse(call.name, { success: false, error: `unknown tool "${call.name}"` });
35
36
  }
37
+ let args = call.arguments;
38
+ if (opts.onBeforeToolExecution) {
39
+ try {
40
+ const hooked = await opts.onBeforeToolExecution({ name: call.name, args, id: '', step });
41
+ if (hooked === null) {
42
+ toolCalls.push({ name: call.name, args, error: 'Skipped by onBeforeToolExecution hook' });
43
+ return formatToolResponse(call.name, { success: false, error: 'skipped by onBeforeToolExecution hook' });
44
+ }
45
+ args = hooked.args;
46
+ }
47
+ catch (hookErr) {
48
+ console.warn('[agentos] onBeforeToolExecution hook error:', hookErr);
49
+ }
50
+ }
51
+ if (opts.approvalGate) {
52
+ const verdict = await askApprovalGate(opts.approvalGate, { name: call.name, args: args ?? {}, id: '', step });
53
+ if (verdict !== APPROVAL_GRANTED) {
54
+ toolCalls.push({ name: call.name, args, error: `Skipped: ${verdict.reason}` });
55
+ return formatToolResponse(call.name, { success: false, error: `skipped: ${verdict.reason}` });
56
+ }
57
+ }
36
58
  try {
37
59
  opts.onToolExecute?.(call.name);
38
- const result = await tool.execute(call.arguments, opts.toolContext);
39
- toolCalls.push({ name: call.name, args: call.arguments });
60
+ const result = await tool.execute(args, opts.toolContext);
61
+ toolCalls.push({ name: call.name, args });
40
62
  return formatToolResponse(call.name, result);
41
63
  }
42
64
  catch (err) {
43
- toolCalls.push({ name: call.name, args: call.arguments, error: String(err) });
65
+ toolCalls.push({ name: call.name, args, error: String(err) });
44
66
  return formatToolResponse(call.name, { success: false, error: String(err) });
45
67
  }
46
68
  }));
@@ -1 +1 @@
1
- {"version":3,"file":"loop.js","sourceRoot":"","sources":["../../../../src/api/runtime/tool-emulation/loop.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"loop.js","sourceRoot":"","sources":["../../../../src/api/runtime/tool-emulation/loop.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"streamText.d.ts","sourceRoot":"","sources":["../../src/api/streamText.ts"],"names":[],"mappings":"AAgBA,OAAO,EAaL,KAAK,mBAAmB,EAIxB,KAAK,UAAU,EAEf,KAAK,cAAc,EACpB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,oCAAoC,CAAC;AAwE3E;;;;;;;;GAQG;AACH,MAAM,MAAM,UAAU,GAClB;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAC9B;IAAE,IAAI,EAAE,WAAW,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,OAAO,CAAA;CAAE,GACtD;IAAE,IAAI,EAAE,aAAa,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,OAAO,CAAA;CAAE,GAC1D;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,KAAK,EAAE,KAAK,CAAA;CAAE,CAAC;AAEpC;;;;GAIG;AACH,MAAM,MAAM,kBAAkB,GAAG,MAAM,GAAG,QAAQ,GAAG,YAAY,GAAG,OAAO,CAAC;AAE5E;;;;;;;;;;;GAWG;AACH,wBAAgB,2BAA2B,CACzC,GAAG,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAC7B,kBAAkB,CAiBpB;AAED;;;;;;GAMG;AACH,MAAM,WAAW,gBAAgB;IAC/B,2FAA2F;IAC3F,UAAU,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC;IAClC,yEAAyE;IACzE,UAAU,EAAE,aAAa,CAAC,UAAU,CAAC,CAAC;IACtC;;;;;OAKG;IACH,IAAI,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;IACtB,2EAA2E;IAC3E,KAAK,EAAE,OAAO,CAAC,UAAU,CAAC,CAAC;IAC3B;;;;;;OAMG;IACH,aAAa,EAAE,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC;IAC3C;;;;OAIG;IACH,WAAW,EAAE,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC;IACzC,yFAAyF;IACzF,SAAS,EAAE,OAAO,CAAC,cAAc,EAAE,CAAC,CAAC;IACrC;;;;;;;;;OASG;IACH,QAAQ,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;IAC1B,qEAAqE;IACrE,KAAK,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;IACvB;;;;;;;;;;;;;;;;;;;;;;OAsBG;IACH,YAAY,EAAE,OAAO,CAAC,kBAAkB,CAAC,CAAC;IAC1C;;;;;;;OAOG;IACH,gBAAgB,EAAE,OAAO,CAAC,gBAAgB,GAAG,IAAI,CAAC,CAAC;IACnD;;;;;;OAMG;IACH,iBAAiB,EAAE,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;CAC3C;AAgCD;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,mBAAmB,GAAG,gBAAgB,CAs0CtE"}
1
+ {"version":3,"file":"streamText.d.ts","sourceRoot":"","sources":["../../src/api/streamText.ts"],"names":[],"mappings":"AAiBA,OAAO,EAaL,KAAK,mBAAmB,EAIxB,KAAK,UAAU,EAEf,KAAK,cAAc,EACpB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,oCAAoC,CAAC;AAwE3E;;;;;;;;GAQG;AACH,MAAM,MAAM,UAAU,GAClB;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAC9B;IAAE,IAAI,EAAE,WAAW,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,OAAO,CAAA;CAAE,GACtD;IAAE,IAAI,EAAE,aAAa,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,OAAO,CAAA;CAAE,GAC1D;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,KAAK,EAAE,KAAK,CAAA;CAAE,CAAC;AAEpC;;;;GAIG;AACH,MAAM,MAAM,kBAAkB,GAAG,MAAM,GAAG,QAAQ,GAAG,YAAY,GAAG,OAAO,CAAC;AAE5E;;;;;;;;;;;GAWG;AACH,wBAAgB,2BAA2B,CACzC,GAAG,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAC7B,kBAAkB,CAiBpB;AAED;;;;;;GAMG;AACH,MAAM,WAAW,gBAAgB;IAC/B,2FAA2F;IAC3F,UAAU,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC;IAClC,yEAAyE;IACzE,UAAU,EAAE,aAAa,CAAC,UAAU,CAAC,CAAC;IACtC;;;;;OAKG;IACH,IAAI,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;IACtB,2EAA2E;IAC3E,KAAK,EAAE,OAAO,CAAC,UAAU,CAAC,CAAC;IAC3B;;;;;;OAMG;IACH,aAAa,EAAE,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC;IAC3C;;;;OAIG;IACH,WAAW,EAAE,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC;IACzC,yFAAyF;IACzF,SAAS,EAAE,OAAO,CAAC,cAAc,EAAE,CAAC,CAAC;IACrC;;;;;;;;;OASG;IACH,QAAQ,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;IAC1B,qEAAqE;IACrE,KAAK,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;IACvB;;;;;;;;;;;;;;;;;;;;;;OAsBG;IACH,YAAY,EAAE,OAAO,CAAC,kBAAkB,CAAC,CAAC;IAC1C;;;;;;;OAOG;IACH,gBAAgB,EAAE,OAAO,CAAC,gBAAgB,GAAG,IAAI,CAAC,CAAC;IACnD;;;;;;OAMG;IACH,iBAAiB,EAAE,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;CAC3C;AAgCD;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,mBAAmB,GAAG,gBAAgB,CAu2CtE"}
@@ -14,6 +14,7 @@ import { fireLlmUsageObserver } from './observers.js';
14
14
  import { hostPolicyToRouteParams, mergeRequiredCapabilities } from './runtime/hostPolicy.js';
15
15
  import { adaptTools } from './runtime/toolAdapter.js';
16
16
  import { runEmulatedToolLoop, toShimMessages } from './runtime/tool-emulation/index.js';
17
+ import { APPROVAL_GRANTED, askApprovalGate } from './runtime/approval-gate.js';
17
18
  import { buildPolicyAwareFallbackChain, createPlan, fallbackHopOverrides, addModelUsage, hasBillableUsage, isRetryableError, markChainWalked, markToolsRan, chainWalkedBefore, toolsRanBefore, usageOfError, resolveChainOfThought, } from './generateText.js';
18
19
  import { toProviderReplayMessage } from './sessionTranscript.js';
19
20
  import { resolveDynamicToolCalls } from './runtime/dynamicToolCalling.js';
@@ -423,6 +424,10 @@ export function streamText(opts) {
423
424
  onToolExecute: () => {
424
425
  shimRanTool = true;
425
426
  },
427
+ // The hook, then the approval gate, before each parsed call runs,
428
+ // as on the native loop below.
429
+ onBeforeToolExecution: opts.onBeforeToolExecution,
430
+ approvalGate: opts.__approvalGate,
426
431
  // Native tool turns in the history become the shim's own
427
432
  // <tool_call> / <tool_response> text.
428
433
  messages: toShimMessages(messages),
@@ -931,6 +936,34 @@ export function streamText(opts) {
931
936
  console.warn('[agentos] onBeforeToolExecution hook error:', hookErr);
932
937
  }
933
938
  }
939
+ // --- approval gate (agency hitl.approvals.beforeTool) ---
940
+ // Runs after the hook, on the arguments the hook left. Anything but
941
+ // the exact approval skips the tool and tells the model.
942
+ if (opts.__approvalGate) {
943
+ const verdict = await askApprovalGate(opts.__approvalGate, {
944
+ name: fnName,
945
+ args: (parsedArgs ?? {}),
946
+ id: toolCallId || '',
947
+ step,
948
+ });
949
+ if (verdict !== APPROVAL_GRANTED) {
950
+ toolCallRecord.error = `Skipped: ${verdict.reason}`;
951
+ const resultPart = {
952
+ type: 'tool-result',
953
+ toolName: fnName,
954
+ result: { skipped: true, reason: verdict.reason },
955
+ };
956
+ parts.push(resultPart);
957
+ yield resultPart;
958
+ messages.push({
959
+ role: 'tool',
960
+ tool_call_id: toolCallId,
961
+ content: JSON.stringify({ skipped: true, reason: verdict.reason }),
962
+ });
963
+ allToolCalls.push(toolCallRecord);
964
+ continue;
965
+ }
966
+ }
934
967
  try {
935
968
  const result = await tool.execute(parsedArgs, buildHelperToolExecutionContext('streamText', helperToolRunId, step, toolCallId || undefined));
936
969
  toolCallRecord.result = result.output;