@animalabs/agent-framework 0.21.0 → 0.22.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 (271) hide show
  1. package/README.md +43 -0
  2. package/dist/src/agent.d.ts +17 -4
  3. package/dist/src/agent.d.ts.map +1 -1
  4. package/dist/src/agent.js +102 -42
  5. package/dist/src/agent.js.map +1 -1
  6. package/dist/src/code-execution/py-runner.d.ts +22 -1
  7. package/dist/src/code-execution/py-runner.d.ts.map +1 -1
  8. package/dist/src/code-execution/py-runner.js +64 -9
  9. package/dist/src/code-execution/py-runner.js.map +1 -1
  10. package/dist/src/code-execution/runtime-py.d.ts +4 -0
  11. package/dist/src/code-execution/runtime-py.d.ts.map +1 -1
  12. package/dist/src/code-execution/runtime-py.js +215 -38
  13. package/dist/src/code-execution/runtime-py.js.map +1 -1
  14. package/dist/src/framework.d.ts +250 -39
  15. package/dist/src/framework.d.ts.map +1 -1
  16. package/dist/src/framework.js +1602 -371
  17. package/dist/src/framework.js.map +1 -1
  18. package/dist/src/gate/event-gate.d.ts +21 -0
  19. package/dist/src/gate/event-gate.d.ts.map +1 -1
  20. package/dist/src/gate/event-gate.js +40 -7
  21. package/dist/src/gate/event-gate.js.map +1 -1
  22. package/dist/src/index.d.ts +5 -0
  23. package/dist/src/index.d.ts.map +1 -1
  24. package/dist/src/index.js +4 -0
  25. package/dist/src/index.js.map +1 -1
  26. package/dist/src/mcpl/channel-registry.d.ts.map +1 -1
  27. package/dist/src/mcpl/channel-registry.js +26 -3
  28. package/dist/src/mcpl/channel-registry.js.map +1 -1
  29. package/dist/src/mcpl/conversation-router.d.ts +28 -1
  30. package/dist/src/mcpl/conversation-router.d.ts.map +1 -1
  31. package/dist/src/mcpl/conversation-router.js +17 -0
  32. package/dist/src/mcpl/conversation-router.js.map +1 -1
  33. package/dist/src/mcpl/feature-set-manager.d.ts +11 -0
  34. package/dist/src/mcpl/feature-set-manager.d.ts.map +1 -1
  35. package/dist/src/mcpl/feature-set-manager.js +31 -7
  36. package/dist/src/mcpl/feature-set-manager.js.map +1 -1
  37. package/dist/src/mcpl/index.d.ts +2 -0
  38. package/dist/src/mcpl/index.d.ts.map +1 -1
  39. package/dist/src/mcpl/index.js +1 -0
  40. package/dist/src/mcpl/index.js.map +1 -1
  41. package/dist/src/mcpl/prose-stream-router.d.ts +27 -6
  42. package/dist/src/mcpl/prose-stream-router.d.ts.map +1 -1
  43. package/dist/src/mcpl/prose-stream-router.js +85 -22
  44. package/dist/src/mcpl/prose-stream-router.js.map +1 -1
  45. package/dist/src/mcpl/push-coalescer.d.ts +32 -4
  46. package/dist/src/mcpl/push-coalescer.d.ts.map +1 -1
  47. package/dist/src/mcpl/push-coalescer.js +46 -13
  48. package/dist/src/mcpl/push-coalescer.js.map +1 -1
  49. package/dist/src/mcpl/push-handler.d.ts +5 -3
  50. package/dist/src/mcpl/push-handler.d.ts.map +1 -1
  51. package/dist/src/mcpl/push-handler.js +41 -11
  52. package/dist/src/mcpl/push-handler.js.map +1 -1
  53. package/dist/src/mcpl/server-connection.d.ts +4 -0
  54. package/dist/src/mcpl/server-connection.d.ts.map +1 -1
  55. package/dist/src/mcpl/server-connection.js +45 -8
  56. package/dist/src/mcpl/server-connection.js.map +1 -1
  57. package/dist/src/mcpl/server-registry.d.ts +5 -2
  58. package/dist/src/mcpl/server-registry.d.ts.map +1 -1
  59. package/dist/src/mcpl/server-registry.js +25 -7
  60. package/dist/src/mcpl/server-registry.js.map +1 -1
  61. package/dist/src/mcpl/tool-lifecycle.d.ts +52 -2
  62. package/dist/src/mcpl/tool-lifecycle.d.ts.map +1 -1
  63. package/dist/src/mcpl/tool-lifecycle.js +47 -1
  64. package/dist/src/mcpl/tool-lifecycle.js.map +1 -1
  65. package/dist/src/mcpl/tool-pattern-check.d.ts +51 -0
  66. package/dist/src/mcpl/tool-pattern-check.d.ts.map +1 -0
  67. package/dist/src/mcpl/tool-pattern-check.js +79 -0
  68. package/dist/src/mcpl/tool-pattern-check.js.map +1 -0
  69. package/dist/src/mcpl/types.d.ts +15 -5
  70. package/dist/src/mcpl/types.d.ts.map +1 -1
  71. package/dist/src/mcpl/types.js.map +1 -1
  72. package/dist/src/mcpl/visible-content.d.ts +39 -0
  73. package/dist/src/mcpl/visible-content.d.ts.map +1 -0
  74. package/dist/src/mcpl/visible-content.js +54 -0
  75. package/dist/src/mcpl/visible-content.js.map +1 -0
  76. package/dist/src/module-registry.d.ts +81 -3
  77. package/dist/src/module-registry.d.ts.map +1 -1
  78. package/dist/src/module-registry.js +257 -16
  79. package/dist/src/module-registry.js.map +1 -1
  80. package/dist/src/modules/workspace/branch-intent.d.ts +72 -0
  81. package/dist/src/modules/workspace/branch-intent.d.ts.map +1 -0
  82. package/dist/src/modules/workspace/branch-intent.js +83 -0
  83. package/dist/src/modules/workspace/branch-intent.js.map +1 -0
  84. package/dist/src/modules/workspace/disk-agreement.d.ts +167 -0
  85. package/dist/src/modules/workspace/disk-agreement.d.ts.map +1 -0
  86. package/dist/src/modules/workspace/disk-agreement.js +259 -0
  87. package/dist/src/modules/workspace/disk-agreement.js.map +1 -0
  88. package/dist/src/modules/workspace/effects.d.ts +84 -0
  89. package/dist/src/modules/workspace/effects.d.ts.map +1 -0
  90. package/dist/src/modules/workspace/effects.js +368 -0
  91. package/dist/src/modules/workspace/effects.js.map +1 -0
  92. package/dist/src/modules/workspace/index.d.ts +155 -17
  93. package/dist/src/modules/workspace/index.d.ts.map +1 -1
  94. package/dist/src/modules/workspace/index.js +1059 -424
  95. package/dist/src/modules/workspace/index.js.map +1 -1
  96. package/dist/src/modules/workspace/observe.d.ts +278 -0
  97. package/dist/src/modules/workspace/observe.d.ts.map +1 -0
  98. package/dist/src/modules/workspace/observe.js +805 -0
  99. package/dist/src/modules/workspace/observe.js.map +1 -0
  100. package/dist/src/modules/workspace/reconcile.d.ts +224 -0
  101. package/dist/src/modules/workspace/reconcile.d.ts.map +1 -0
  102. package/dist/src/modules/workspace/reconcile.js +901 -0
  103. package/dist/src/modules/workspace/reconcile.js.map +1 -0
  104. package/dist/src/modules/workspace/sync.d.ts +6 -59
  105. package/dist/src/modules/workspace/sync.d.ts.map +1 -1
  106. package/dist/src/modules/workspace/sync.js +6 -257
  107. package/dist/src/modules/workspace/sync.js.map +1 -1
  108. package/dist/src/modules/workspace/types.d.ts +77 -10
  109. package/dist/src/modules/workspace/types.d.ts.map +1 -1
  110. package/dist/src/modules/workspace/types.js.map +1 -1
  111. package/dist/src/record-journal.d.ts +127 -0
  112. package/dist/src/record-journal.d.ts.map +1 -0
  113. package/dist/src/record-journal.js +202 -0
  114. package/dist/src/record-journal.js.map +1 -0
  115. package/dist/src/shutdown.d.ts +13 -0
  116. package/dist/src/shutdown.d.ts.map +1 -0
  117. package/dist/src/shutdown.js +46 -0
  118. package/dist/src/shutdown.js.map +1 -0
  119. package/dist/src/silent-heartbeat.d.ts +74 -0
  120. package/dist/src/silent-heartbeat.d.ts.map +1 -0
  121. package/dist/src/silent-heartbeat.js +77 -0
  122. package/dist/src/silent-heartbeat.js.map +1 -0
  123. package/dist/src/tool-presentation.d.ts +50 -0
  124. package/dist/src/tool-presentation.d.ts.map +1 -0
  125. package/dist/src/tool-presentation.js +235 -0
  126. package/dist/src/tool-presentation.js.map +1 -0
  127. package/dist/src/tool-result-guard.d.ts +125 -6
  128. package/dist/src/tool-result-guard.d.ts.map +1 -1
  129. package/dist/src/tool-result-guard.js +310 -35
  130. package/dist/src/tool-result-guard.js.map +1 -1
  131. package/dist/src/tool-result-history.d.ts +13 -0
  132. package/dist/src/tool-result-history.d.ts.map +1 -1
  133. package/dist/src/tool-result-history.js +21 -1
  134. package/dist/src/tool-result-history.js.map +1 -1
  135. package/dist/src/types/agent.d.ts +18 -2
  136. package/dist/src/types/agent.d.ts.map +1 -1
  137. package/dist/src/types/events.d.ts +4 -0
  138. package/dist/src/types/events.d.ts.map +1 -1
  139. package/dist/src/types/framework.d.ts +12 -0
  140. package/dist/src/types/framework.d.ts.map +1 -1
  141. package/dist/src/types/module.d.ts +14 -0
  142. package/dist/src/types/module.d.ts.map +1 -1
  143. package/dist/src/types/trace.d.ts +73 -0
  144. package/dist/src/types/trace.d.ts.map +1 -1
  145. package/dist/test/batched-wake-locus.test.d.ts +2 -0
  146. package/dist/test/batched-wake-locus.test.d.ts.map +1 -0
  147. package/dist/test/batched-wake-locus.test.js +166 -0
  148. package/dist/test/batched-wake-locus.test.js.map +1 -0
  149. package/dist/test/code-execution.test.js +386 -2
  150. package/dist/test/code-execution.test.js.map +1 -1
  151. package/dist/test/component-defaults.test.d.ts +2 -0
  152. package/dist/test/component-defaults.test.d.ts.map +1 -0
  153. package/dist/test/component-defaults.test.js +54 -0
  154. package/dist/test/component-defaults.test.js.map +1 -0
  155. package/dist/test/conversation-routing.test.js +57 -1
  156. package/dist/test/conversation-routing.test.js.map +1 -1
  157. package/dist/test/ephemeral-settle.test.js +3 -0
  158. package/dist/test/ephemeral-settle.test.js.map +1 -1
  159. package/dist/test/event-gate.test.js +118 -0
  160. package/dist/test/event-gate.test.js.map +1 -1
  161. package/dist/test/explicit-prose-routing.test.js +977 -0
  162. package/dist/test/explicit-prose-routing.test.js.map +1 -1
  163. package/dist/test/helpers/pytc-stop-rows.d.ts +11 -0
  164. package/dist/test/helpers/pytc-stop-rows.d.ts.map +1 -0
  165. package/dist/test/helpers/pytc-stop-rows.js +143 -0
  166. package/dist/test/helpers/pytc-stop-rows.js.map +1 -0
  167. package/dist/test/mcpl-coalescing.test.js +19 -6
  168. package/dist/test/mcpl-coalescing.test.js.map +1 -1
  169. package/dist/test/mcpl-config-diagnostics.test.d.ts +2 -0
  170. package/dist/test/mcpl-config-diagnostics.test.d.ts.map +1 -0
  171. package/dist/test/mcpl-config-diagnostics.test.js +449 -0
  172. package/dist/test/mcpl-config-diagnostics.test.js.map +1 -0
  173. package/dist/test/mcpl-empty-content.test.d.ts +2 -0
  174. package/dist/test/mcpl-empty-content.test.d.ts.map +1 -0
  175. package/dist/test/mcpl-empty-content.test.js +368 -0
  176. package/dist/test/mcpl-empty-content.test.js.map +1 -0
  177. package/dist/test/mcpl-tool-lifecycle-emitter.test.js +106 -1
  178. package/dist/test/mcpl-tool-lifecycle-emitter.test.js.map +1 -1
  179. package/dist/test/mcpl-tool-lifecycle-script.test.d.ts +2 -0
  180. package/dist/test/mcpl-tool-lifecycle-script.test.d.ts.map +1 -0
  181. package/dist/test/mcpl-tool-lifecycle-script.test.js +288 -0
  182. package/dist/test/mcpl-tool-lifecycle-script.test.js.map +1 -0
  183. package/dist/test/prose-stream-router.test.js +41 -0
  184. package/dist/test/prose-stream-router.test.js.map +1 -1
  185. package/dist/test/record-journal.test.d.ts +6 -0
  186. package/dist/test/record-journal.test.d.ts.map +1 -0
  187. package/dist/test/record-journal.test.js +269 -0
  188. package/dist/test/record-journal.test.js.map +1 -0
  189. package/dist/test/save-recent-image.test.js +102 -0
  190. package/dist/test/save-recent-image.test.js.map +1 -1
  191. package/dist/test/shutdown-errors.test.d.ts +2 -0
  192. package/dist/test/shutdown-errors.test.d.ts.map +1 -0
  193. package/dist/test/shutdown-errors.test.js +662 -0
  194. package/dist/test/shutdown-errors.test.js.map +1 -0
  195. package/dist/test/silent-heartbeat-rows.test.d.ts +2 -0
  196. package/dist/test/silent-heartbeat-rows.test.d.ts.map +1 -0
  197. package/dist/test/silent-heartbeat-rows.test.js +451 -0
  198. package/dist/test/silent-heartbeat-rows.test.js.map +1 -0
  199. package/dist/test/silent-heartbeat.test.js +49 -38
  200. package/dist/test/silent-heartbeat.test.js.map +1 -1
  201. package/dist/test/stop-with-work-in-flight.test.d.ts +23 -0
  202. package/dist/test/stop-with-work-in-flight.test.d.ts.map +1 -0
  203. package/dist/test/stop-with-work-in-flight.test.js +672 -0
  204. package/dist/test/stop-with-work-in-flight.test.js.map +1 -0
  205. package/dist/test/tool-batch-hook.test.d.ts +8 -0
  206. package/dist/test/tool-batch-hook.test.d.ts.map +1 -0
  207. package/dist/test/tool-batch-hook.test.js +275 -0
  208. package/dist/test/tool-batch-hook.test.js.map +1 -0
  209. package/dist/test/tool-presentation.test.d.ts +2 -0
  210. package/dist/test/tool-presentation.test.d.ts.map +1 -0
  211. package/dist/test/tool-presentation.test.js +268 -0
  212. package/dist/test/tool-presentation.test.js.map +1 -0
  213. package/dist/test/tool-result-guard.test.js +2330 -18
  214. package/dist/test/tool-result-guard.test.js.map +1 -1
  215. package/dist/test/tool-result-history.test.js +2 -1
  216. package/dist/test/tool-result-history.test.js.map +1 -1
  217. package/dist/test/turn-trigger-provenance.test.js +35 -0
  218. package/dist/test/turn-trigger-provenance.test.js.map +1 -1
  219. package/dist/test/unconvertible-tool-result.test.d.ts +2 -0
  220. package/dist/test/unconvertible-tool-result.test.d.ts.map +1 -0
  221. package/dist/test/unconvertible-tool-result.test.js +358 -0
  222. package/dist/test/unconvertible-tool-result.test.js.map +1 -0
  223. package/dist/test/workspace-materialize-freshness.test.d.ts +16 -0
  224. package/dist/test/workspace-materialize-freshness.test.d.ts.map +1 -0
  225. package/dist/test/workspace-materialize-freshness.test.js +252 -0
  226. package/dist/test/workspace-materialize-freshness.test.js.map +1 -0
  227. package/dist/test/workspace-three-way.test.d.ts +12 -0
  228. package/dist/test/workspace-three-way.test.d.ts.map +1 -0
  229. package/dist/test/workspace-three-way.test.js +3079 -0
  230. package/dist/test/workspace-three-way.test.js.map +1 -0
  231. package/dist/tsconfig.tsbuildinfo +1 -1
  232. package/package.json +3 -3
  233. package/src/agent.ts +120 -44
  234. package/src/code-execution/py-runner.ts +66 -9
  235. package/src/code-execution/runtime-py.ts +215 -38
  236. package/src/framework.ts +1661 -363
  237. package/src/gate/event-gate.ts +59 -7
  238. package/src/index.ts +11 -0
  239. package/src/mcpl/channel-registry.ts +24 -3
  240. package/src/mcpl/conversation-router.ts +34 -1
  241. package/src/mcpl/feature-set-manager.ts +36 -11
  242. package/src/mcpl/index.ts +2 -0
  243. package/src/mcpl/prose-stream-router.ts +79 -23
  244. package/src/mcpl/push-coalescer.ts +62 -13
  245. package/src/mcpl/push-handler.ts +41 -12
  246. package/src/mcpl/server-connection.ts +41 -10
  247. package/src/mcpl/server-registry.ts +24 -7
  248. package/src/mcpl/tool-lifecycle.ts +77 -2
  249. package/src/mcpl/tool-pattern-check.ts +106 -0
  250. package/src/mcpl/types.ts +15 -5
  251. package/src/mcpl/visible-content.ts +57 -0
  252. package/src/module-registry.ts +252 -16
  253. package/src/modules/workspace/branch-intent.ts +123 -0
  254. package/src/modules/workspace/disk-agreement.ts +325 -0
  255. package/src/modules/workspace/effects.ts +362 -0
  256. package/src/modules/workspace/index.ts +1058 -446
  257. package/src/modules/workspace/observe.ts +839 -0
  258. package/src/modules/workspace/reconcile.ts +1136 -0
  259. package/src/modules/workspace/sync.ts +6 -336
  260. package/src/modules/workspace/types.ts +75 -10
  261. package/src/record-journal.ts +246 -0
  262. package/src/shutdown.ts +49 -0
  263. package/src/silent-heartbeat.ts +141 -0
  264. package/src/tool-presentation.ts +188 -0
  265. package/src/tool-result-guard.ts +335 -33
  266. package/src/tool-result-history.ts +25 -1
  267. package/src/types/agent.ts +18 -2
  268. package/src/types/events.ts +4 -0
  269. package/src/types/framework.ts +12 -0
  270. package/src/types/module.ts +15 -0
  271. package/src/types/trace.ts +80 -0
@@ -0,0 +1,235 @@
1
+ import { createHash, randomUUID } from 'node:crypto';
2
+ import { fchmodSync, closeSync, fstatSync, lstatSync, openSync, readSync, renameSync, unlinkSync, writeFileSync } from 'node:fs';
3
+ const MAX_BYTES = 256 * 1024;
4
+ const protectedNames = new Set(['set_tool_visibility', 'set_tool_description', 'workspace--read']);
5
+ export const isPresentationTool = (name) => name === 'set_tool_visibility' || name === 'set_tool_description';
6
+ const hash = (value) => createHash('sha256').update(value).digest('hex');
7
+ export function parsePresentation(raw) {
8
+ const doc = JSON.parse(raw);
9
+ if (!doc || doc.version !== 1 || !doc.tools || typeof doc.tools !== 'object' || Array.isArray(doc.tools)
10
+ || Object.keys(doc).some(k => !['version', 'tools'].includes(k)))
11
+ throw new Error('Expected {"version":1,"tools":{...}}');
12
+ for (const [name, value] of Object.entries(doc.tools)) {
13
+ if (!name || !value || typeof value !== 'object' || Array.isArray(value))
14
+ throw new Error(`Invalid override: ${name}`);
15
+ const item = value;
16
+ if (Object.keys(item).some(k => !['description', 'visible'].includes(k))
17
+ || ('description' in item && (typeof item.description !== 'string' || item.description.length > 32768))
18
+ || ('visible' in item && typeof item.visible !== 'boolean'))
19
+ throw new Error(`Invalid description/visibility for ${name}`);
20
+ if (protectedNames.has(name) && item.visible === false)
21
+ throw new Error(`Cannot hide recovery tool ${name}`);
22
+ }
23
+ return doc;
24
+ }
25
+ export function presentationTools(path) {
26
+ const signpost = ` Read the generated catalogue with workspace--read {"path":${JSON.stringify(path)},"limit":140}. Hidden tools remain available; changes affect the next newly compiled request, not an in-flight stream.`;
27
+ return [
28
+ { name: 'set_tool_visibility', description: 'Show or hide a tool definition. Hiding does not revoke permission.' + signpost,
29
+ inputSchema: { type: 'object', properties: { name: { type: 'string' }, visible: { type: 'boolean' } }, required: ['name', 'visible'], additionalProperties: false } },
30
+ { name: 'set_tool_description', description: 'Set a personal tool description; null restores the configured component default, or the installed description when none is configured.' + signpost,
31
+ inputSchema: { type: 'object', properties: { name: { type: 'string' }, description: { type: ['string', 'null'] } }, required: ['name', 'description'], additionalProperties: false } },
32
+ ];
33
+ }
34
+ /** Per-agent presentation; files are the sole persistent source, independent of editor identity. */
35
+ export class ToolPresentation {
36
+ config;
37
+ constructor(config) {
38
+ this.config = config;
39
+ }
40
+ read(path = this.config.path, allowMissing = true) {
41
+ let fd;
42
+ try {
43
+ fd = openSync(path, 'r');
44
+ }
45
+ catch (error) {
46
+ if (allowMissing && error.code === 'ENOENT')
47
+ return '{"version":1,"tools":{}}';
48
+ throw error;
49
+ }
50
+ try {
51
+ const stat = fstatSync(fd);
52
+ if (!stat.isFile() || stat.size > MAX_BYTES)
53
+ throw new Error('Presentation must be a regular file under 256 KiB');
54
+ const data = Buffer.alloc(MAX_BYTES + 1);
55
+ let size = 0, count = 0;
56
+ while (size < data.length && (count = readSync(fd, data, size, data.length - size, null)) > 0)
57
+ size += count;
58
+ if (size > MAX_BYTES)
59
+ throw new Error('Presentation exceeds 256 KiB');
60
+ return data.subarray(0, size).toString('utf8');
61
+ }
62
+ finally {
63
+ closeSync(fd);
64
+ }
65
+ }
66
+ resolve(tools, sources = new Map()) {
67
+ let raw = '', doc = { version: 1, tools: {} }, diagnostics = [];
68
+ try {
69
+ raw = this.read();
70
+ doc = parsePresentation(raw);
71
+ }
72
+ catch (error) {
73
+ diagnostics.push(`Overrides not applied: ${String(error)}. Default visibility and component descriptions retained.`);
74
+ }
75
+ const defaults = new Map();
76
+ const configuredSources = new Set();
77
+ for (const profile of this.config.defaults ?? []) {
78
+ if (configuredSources.has(profile.source)) {
79
+ diagnostics.push(`Duplicate defaults source ignored: ${profile.source}`);
80
+ continue;
81
+ }
82
+ configuredSources.add(profile.source);
83
+ // Absent components contribute neither tools nor missing-file errors.
84
+ if (!tools.some(t => (sources.get(t.name) ?? 'Unattributed') === profile.source))
85
+ continue;
86
+ try {
87
+ const profileDoc = parsePresentation(this.read(profile.path, false));
88
+ if (Object.values(profileDoc.tools).some(item => Object.keys(item).some(k => k !== 'description')))
89
+ throw new Error('Component defaults may contain descriptions only; visibility belongs to the resident');
90
+ for (const tool of tools) {
91
+ if ((sources.get(tool.name) ?? 'Unattributed') !== profile.source)
92
+ continue;
93
+ const item = Object.hasOwn(profileDoc.tools, tool.name) ? profileDoc.tools[tool.name] : undefined;
94
+ if (item?.description !== undefined)
95
+ defaults.set(tool.name, { description: item.description, path: profile.path });
96
+ }
97
+ }
98
+ catch (error) {
99
+ diagnostics.push(`Component defaults not applied (${profile.source}): ${String(error)}`);
100
+ }
101
+ }
102
+ const names = new Set(tools.map(t => t.name));
103
+ for (const name of Object.keys(doc.tools))
104
+ if (!names.has(name))
105
+ diagnostics.push(`Not currently available: ${name}`);
106
+ const entries = tools.map(tool => {
107
+ const override = Object.hasOwn(doc.tools, tool.name) ? doc.tools[tool.name] : undefined;
108
+ // Always retain a usable discovery signpost, even when its wording is overridden.
109
+ const componentDefault = defaults.get(tool.name);
110
+ let description = override?.description ?? componentDefault?.description ?? tool.description;
111
+ const descriptionSource = override?.description !== undefined ? this.config.path : componentDefault?.path ?? "installed component";
112
+ if (isPresentationTool(tool.name) && (override?.description !== undefined || componentDefault !== undefined))
113
+ description += `\nCatalogue: workspace--read {"path":${JSON.stringify(this.config.cataloguePath)},"limit":140}. Changes affect the next newly compiled request.`;
114
+ return { name: tool.name, source: sources.get(tool.name) ?? 'Unattributed', visible: override?.visible ?? true, originalDescription: tool.description, description, descriptionSource, inputSchema: structuredClone(tool.inputSchema) };
115
+ });
116
+ const available = tools.map((tool, i) => ({ ...structuredClone(tool), description: entries[i].description }));
117
+ return { revision: hash(JSON.stringify({ raw, entries, diagnostics })), source: this.config.path, cataloguePath: this.config.cataloguePath, diagnostics, available,
118
+ advertised: available.filter((_, i) => entries[i].visible), entries };
119
+ }
120
+ edit(tool, input, available) {
121
+ const lock = this.config.path + '.lock';
122
+ let fd, tempFd, temp;
123
+ try {
124
+ if (!isPresentationTool(tool))
125
+ throw new Error('Unknown editing tool');
126
+ const value = input;
127
+ const field = tool === 'set_tool_visibility' ? 'visible' : 'description';
128
+ if (!value || typeof value !== 'object' || Array.isArray(value) || typeof value.name !== 'string'
129
+ || Object.keys(value).some(k => !['name', field].includes(k)) || !Object.hasOwn(value, field))
130
+ throw new Error('Invalid editing arguments');
131
+ if (!available.some(t => t.name === value.name))
132
+ throw new Error('Tool is not currently available to this agent');
133
+ if (field === 'visible' ? typeof value.visible !== 'boolean' : value.description !== null && typeof value.description !== 'string')
134
+ throw new Error(`Invalid ${field}`);
135
+ fd = openSync(lock, 'wx', 0o600);
136
+ let mode = 0o600;
137
+ try {
138
+ const stat = lstatSync(this.config.path);
139
+ if (stat.isSymbolicLink())
140
+ throw new Error('Edit the target file directly; tool editing refuses symlinks');
141
+ mode = stat.mode & 0o777;
142
+ }
143
+ catch (error) {
144
+ if (error.code !== 'ENOENT')
145
+ throw error;
146
+ }
147
+ const before = this.read(), doc = parsePresentation(before);
148
+ const old = Object.hasOwn(doc.tools, value.name) ? doc.tools[value.name] : {};
149
+ const updated = { ...old };
150
+ if (field === 'description' && value.description === null)
151
+ delete updated.description;
152
+ else
153
+ Object.assign(updated, { [field]: value[field] });
154
+ Object.defineProperty(doc.tools, value.name, { value: updated, enumerable: true, writable: true, configurable: true });
155
+ const next = JSON.stringify(doc, null, 2) + '\n';
156
+ parsePresentation(next);
157
+ if (Buffer.byteLength(next) > MAX_BYTES)
158
+ throw new Error('Presentation exceeds 256 KiB');
159
+ temp = this.config.path + '.' + randomUUID() + '.tmp';
160
+ tempFd = openSync(temp, 'wx', 0o600);
161
+ writeFileSync(tempFd, next);
162
+ fchmodSync(tempFd, mode); // preserve permissions on the opened inode, never a replacement path
163
+ if (this.read() !== before)
164
+ throw new Error('File changed concurrently; retry after reading it');
165
+ const opened = fstatSync(tempFd), named = lstatSync(temp);
166
+ if (!named.isFile() || named.dev !== opened.dev || named.ino !== opened.ino)
167
+ throw new Error('Temporary file changed concurrently; retry after checking the directory');
168
+ renameSync(temp, this.config.path);
169
+ temp = undefined;
170
+ return { success: true, data: { name: value.name, [field]: value[field], effective: 'next newly compiled request', catalogue: this.config.cataloguePath } };
171
+ }
172
+ catch (error) {
173
+ return { success: false, isError: true, error: String(error) };
174
+ }
175
+ finally {
176
+ if (tempFd !== undefined)
177
+ closeSync(tempFd);
178
+ if (temp)
179
+ try {
180
+ unlinkSync(temp);
181
+ }
182
+ catch { }
183
+ if (fd !== undefined) {
184
+ closeSync(fd);
185
+ unlinkSync(lock);
186
+ }
187
+ }
188
+ }
189
+ }
190
+ export function renderCatalogue(snapshot) {
191
+ const groups = new Map();
192
+ for (const entry of snapshot.entries) {
193
+ const group = groups.get(entry.source) ?? [];
194
+ group.push(entry);
195
+ groups.set(entry.source, group);
196
+ }
197
+ const visible = snapshot.entries.filter(e => e.visible).length;
198
+ const lines = [
199
+ '# Tool catalogue — generated from currently available tools', '',
200
+ `Revision: ${snapshot.revision}`, '',
201
+ `${snapshot.entries.length} tools: ${visible} visible, ${snapshot.entries.length - visible} hidden.`,
202
+ 'Visible = supplied in new requests. Hidden = stored away, still available.',
203
+ 'These are your visibility choices, not fixed primary/secondary rankings.',
204
+ 'Copy exact names from the index; similar-sounding names may not exist.',
205
+ 'Show a hidden tool: set_tool_visibility {"name":"EXACT_NAME","visible":true}.',
206
+ `Read details: workspace--read {"path":${JSON.stringify(snapshot.cataloguePath)},"offset":LINE,"limit":LINES}.`,
207
+ 'Line references below belong to this revision; reread the index after changes.', '',
208
+ ];
209
+ for (const diagnostic of snapshot.diagnostics)
210
+ lines.push('Diagnostic: ' + diagnostic);
211
+ lines.push('## Index by source', '');
212
+ const index = new Map();
213
+ for (const [source, entries] of groups) {
214
+ lines.push(`### ${source} (${entries.length})`);
215
+ for (const entry of entries) {
216
+ index.set(entry.name, lines.length);
217
+ lines.push('');
218
+ }
219
+ lines.push('');
220
+ }
221
+ lines.push('## Full definitions', '');
222
+ for (const [source, entries] of groups) {
223
+ lines.push(`### ${source}`, '');
224
+ for (const entry of entries) {
225
+ const start = lines.length + 1;
226
+ lines.push(`#### ${entry.name} (${entry.visible ? 'visible' : 'hidden'})`, '', ...entry.description.split('\n'), '', `Description from: ${entry.descriptionSource ?? 'installed component'}`, '', `Schema: ${JSON.stringify(entry.inputSchema)}`);
227
+ if (entry.description !== entry.originalDescription)
228
+ lines.push('', 'Original description:', ...entry.originalDescription.split('\n'));
229
+ lines.push('');
230
+ lines[index.get(entry.name)] = `- [${entry.visible ? 'visible' : 'hidden'}] ${entry.name} — details: offset ${start}, limit ${lines.length - start + 1}`;
231
+ }
232
+ }
233
+ return lines.join('\n');
234
+ }
235
+ //# sourceMappingURL=tool-presentation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tool-presentation.js","sourceRoot":"","sources":["../../src/tool-presentation.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACrD,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,QAAQ,EAAE,QAAQ,EAAE,UAAU,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAsBjI,MAAM,SAAS,GAAG,GAAG,GAAG,IAAI,CAAC;AAC7B,MAAM,cAAc,GAAG,IAAI,GAAG,CAAC,CAAC,qBAAqB,EAAE,sBAAsB,EAAE,iBAAiB,CAAC,CAAC,CAAC;AACnG,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,IAAY,EAAW,EAAE,CAAC,IAAI,KAAK,qBAAqB,IAAI,IAAI,KAAK,sBAAsB,CAAC;AAC/H,MAAM,IAAI,GAAG,CAAC,KAAa,EAAU,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AAEzF,MAAM,UAAU,iBAAiB,CAAC,GAAW;IAC3C,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAC5B,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC,OAAO,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,IAAI,OAAO,GAAG,CAAC,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC;WACjG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,sCAAsC,CAAC,CAAC;IAC9H,KAAK,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;QACtD,IAAI,CAAC,IAAI,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,qBAAqB,IAAI,EAAE,CAAC,CAAC;QACvH,MAAM,IAAI,GAAG,KAAgC,CAAC;QAC9C,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,aAAa,EAAE,SAAS,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;eACnE,CAAC,aAAa,IAAI,IAAI,IAAI,CAAC,OAAO,IAAI,CAAC,WAAW,KAAK,QAAQ,IAAI,IAAI,CAAC,WAAW,CAAC,MAAM,GAAG,KAAK,CAAC,CAAC;eACpG,CAAC,SAAS,IAAI,IAAI,IAAI,OAAO,IAAI,CAAC,OAAO,KAAK,SAAS,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,sCAAsC,IAAI,EAAE,CAAC,CAAC;QAC7H,IAAI,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,OAAO,KAAK,KAAK;YAAE,MAAM,IAAI,KAAK,CAAC,6BAA6B,IAAI,EAAE,CAAC,CAAC;IAC/G,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,IAAY;IAC5C,MAAM,QAAQ,GAAG,8DAA8D,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,wHAAwH,CAAC;IAC5N,OAAO;QACL,EAAC,IAAI,EAAC,qBAAqB,EAAE,WAAW,EAAC,oEAAoE,GAAG,QAAQ;YACtH,WAAW,EAAC,EAAC,IAAI,EAAC,QAAQ,EAAC,UAAU,EAAC,EAAC,IAAI,EAAC,EAAC,IAAI,EAAC,QAAQ,EAAC,EAAC,OAAO,EAAC,EAAC,IAAI,EAAC,SAAS,EAAC,EAAC,EAAC,QAAQ,EAAC,CAAC,MAAM,EAAC,SAAS,CAAC,EAAC,oBAAoB,EAAC,KAAK,EAAC,EAAC;QAChJ,EAAC,IAAI,EAAC,sBAAsB,EAAE,WAAW,EAAC,wIAAwI,GAAG,QAAQ;YAC3L,WAAW,EAAC,EAAC,IAAI,EAAC,QAAQ,EAAC,UAAU,EAAC,EAAC,IAAI,EAAC,EAAC,IAAI,EAAC,QAAQ,EAAC,EAAC,WAAW,EAAC,EAAC,IAAI,EAAC,CAAC,QAAQ,EAAC,MAAM,CAAC,EAAC,EAAC,EAAC,QAAQ,EAAC,CAAC,MAAM,EAAC,aAAa,CAAC,EAAC,oBAAoB,EAAC,KAAK,EAAC,EAAC;KAClI,CAAC;AACnC,CAAC;AAED,oGAAoG;AACpG,MAAM,OAAO,gBAAgB;IACN;IAArB,YAAqB,MAA8B;QAA9B,WAAM,GAAN,MAAM,CAAwB;IAAG,CAAC;IAC/C,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,YAAY,GAAG,IAAI;QACvD,IAAI,EAAU,CAAC;QACf,IAAI,CAAC;YAAC,EAAE,GAAG,QAAQ,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;QAAC,CAAC;QACjC,OAAO,KAAK,EAAE,CAAC;YAAC,IAAI,YAAY,IAAK,KAA+B,CAAC,IAAI,KAAK,QAAQ;gBAAE,OAAO,0BAA0B,CAAC;YAAC,MAAM,KAAK,CAAC;QAAC,CAAC;QACzI,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,SAAS,CAAC,EAAE,CAAC,CAAC;YAC3B,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,IAAI,CAAC,IAAI,GAAG,SAAS;gBAAE,MAAM,IAAI,KAAK,CAAC,mDAAmD,CAAC,CAAC;YAClH,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC;YACzC,IAAI,IAAI,GAAG,CAAC,EAAE,KAAK,GAAG,CAAC,CAAC;YACxB,OAAO,IAAI,GAAG,IAAI,CAAC,MAAM,IAAI,CAAC,KAAK,GAAG,QAAQ,CAAC,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,MAAM,GAAG,IAAI,EAAE,IAAI,CAAC,CAAC,GAAG,CAAC;gBAAE,IAAI,IAAI,KAAK,CAAC;YAC7G,IAAI,IAAI,GAAG,SAAS;gBAAE,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAC;YACtE,OAAO,IAAI,CAAC,QAAQ,CAAC,CAAC,EAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;QAChD,CAAC;gBAAS,CAAC;YAAC,SAAS,CAAC,EAAE,CAAC,CAAC;QAAC,CAAC;IAC9B,CAAC;IACD,OAAO,CAAC,KAAuB,EAAE,UAAuC,IAAI,GAAG,EAAE;QAC/E,IAAI,GAAG,GAAG,EAAE,EAAE,GAAG,GAAyB,EAAC,OAAO,EAAC,CAAC,EAAC,KAAK,EAAC,EAAE,EAAC,EAAE,WAAW,GAAa,EAAE,CAAC;QAC3F,IAAI,CAAC;YAAC,GAAG,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;YAAC,GAAG,GAAG,iBAAiB,CAAC,GAAG,CAAC,CAAC;QAAC,CAAC;QACxD,OAAO,KAAK,EAAE,CAAC;YAAC,WAAW,CAAC,IAAI,CAAC,0BAA0B,MAAM,CAAC,KAAK,CAAC,2DAA2D,CAAC,CAAC;QAAC,CAAC;QACvI,MAAM,QAAQ,GAAG,IAAI,GAAG,EAA+C,CAAC;QACxE,MAAM,iBAAiB,GAAG,IAAI,GAAG,EAAU,CAAC;QAC5C,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,MAAM,CAAC,QAAQ,IAAI,EAAE,EAAE,CAAC;YACjD,IAAI,iBAAiB,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;gBAC1C,WAAW,CAAC,IAAI,CAAC,sCAAsC,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;gBAAC,SAAS;YACrF,CAAC;YACD,iBAAiB,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;YACtC,sEAAsE;YACtE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,cAAc,CAAC,KAAK,OAAO,CAAC,MAAM,CAAC;gBAAE,SAAS;YAC3F,IAAI,CAAC;gBACH,MAAM,UAAU,GAAG,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC;gBACrE,IAAI,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,aAAa,CAAC,CAAC;oBAChG,MAAM,IAAI,KAAK,CAAC,sFAAsF,CAAC,CAAC;gBAC1G,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;oBACzB,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,cAAc,CAAC,KAAK,OAAO,CAAC,MAAM;wBAAE,SAAS;oBAC5E,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;oBAClG,IAAI,IAAI,EAAE,WAAW,KAAK,SAAS;wBAAE,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,EAAC,WAAW,EAAC,IAAI,CAAC,WAAW,EAAC,IAAI,EAAC,OAAO,CAAC,IAAI,EAAC,CAAC,CAAC;gBACjH,CAAC;YACH,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBAAC,WAAW,CAAC,IAAI,CAAC,mCAAmC,OAAO,CAAC,MAAM,MAAM,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YAAC,CAAC;QAC/G,CAAC;QACD,MAAM,KAAK,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;QAC9C,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC;YAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC;gBAAE,WAAW,CAAC,IAAI,CAAC,4BAA4B,IAAI,EAAE,CAAC,CAAC;QACtH,MAAM,OAAO,GAAG,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;YAC/B,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;YACxF,kFAAkF;YAClF,MAAM,gBAAgB,GAAG,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACjD,IAAI,WAAW,GAAG,QAAQ,EAAE,WAAW,IAAI,gBAAgB,EAAE,WAAW,IAAI,IAAI,CAAC,WAAW,CAAC;YAC7F,MAAM,iBAAiB,GAAG,QAAQ,EAAE,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,gBAAgB,EAAE,IAAI,IAAI,qBAAqB,CAAC;YACnI,IAAI,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,WAAW,KAAK,SAAS,IAAI,gBAAgB,KAAK,SAAS,CAAC;gBAC1G,WAAW,IAAI,wCAAwC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,gEAAgE,CAAC;YACnK,OAAO,EAAC,IAAI,EAAC,IAAI,CAAC,IAAI,EAAC,MAAM,EAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,cAAc,EAAC,OAAO,EAAC,QAAQ,EAAE,OAAO,IAAI,IAAI,EAAC,mBAAmB,EAAC,IAAI,CAAC,WAAW,EAAC,WAAW,EAAC,iBAAiB,EAAC,WAAW,EAAC,eAAe,CAAC,IAAI,CAAC,WAAW,CAAC,EAAC,CAAC;QAC7N,CAAC,CAAC,CAAC;QACH,MAAM,SAAS,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAC,GAAG,eAAe,CAAC,IAAI,CAAC,EAAC,WAAW,EAAC,OAAO,CAAC,CAAC,CAAC,CAAC,WAAW,EAAC,CAAC,CAAC,CAAC;QACzG,OAAO,EAAC,QAAQ,EAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,EAAC,GAAG,EAAC,OAAO,EAAC,WAAW,EAAC,CAAC,CAAC,EAAC,MAAM,EAAC,IAAI,CAAC,MAAM,CAAC,IAAI,EAAC,aAAa,EAAC,IAAI,CAAC,MAAM,CAAC,aAAa,EAAC,WAAW,EAAC,SAAS;YACpJ,UAAU,EAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAC,CAAC,EAAC,EAAE,CAAA,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,EAAC,OAAO,EAAC,CAAC;IACpE,CAAC;IACD,IAAI,CAAC,IAAY,EAAE,KAAc,EAAE,SAA2B;QAC5D,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,GAAG,OAAO,CAAC;QACxC,IAAI,EAAsB,EAAE,MAA0B,EAAE,IAAwB,CAAC;QACjF,IAAI,CAAC;YACH,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC;gBAAE,MAAM,IAAI,KAAK,CAAC,sBAAsB,CAAC,CAAC;YACvE,MAAM,KAAK,GAAG,KAAgC,CAAC;YAC/C,MAAM,KAAK,GAAG,IAAI,KAAK,qBAAqB,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,aAAa,CAAC;YACzE,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,OAAO,KAAK,CAAC,IAAI,KAAK,QAAQ;mBAC5F,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,CAAA,EAAE,CAAC,CAAC,CAAC,MAAM,EAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,EAAC,KAAK,CAAC;gBAAE,MAAM,IAAI,KAAK,CAAC,2BAA2B,CAAC,CAAC;YAC3I,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAA,EAAE,CAAA,CAAC,CAAC,IAAI,KAAG,KAAK,CAAC,IAAI,CAAC;gBAAE,MAAM,IAAI,KAAK,CAAC,+CAA+C,CAAC,CAAC;YAC9G,IAAI,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,OAAO,KAAK,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,WAAW,KAAK,IAAI,IAAI,OAAO,KAAK,CAAC,WAAW,KAAK,QAAQ;gBAAE,MAAM,IAAI,KAAK,CAAC,WAAW,KAAK,EAAE,CAAC,CAAC;YACxK,EAAE,GAAG,QAAQ,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;YACjC,IAAI,IAAI,GAAG,KAAK,CAAC;YACjB,IAAI,CAAC;gBAAC,MAAM,IAAI,GAAG,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;gBAAC,IAAI,IAAI,CAAC,cAAc,EAAE;oBAAE,MAAM,IAAI,KAAK,CAAC,8DAA8D,CAAC,CAAC;gBAAC,IAAI,GAAG,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC;YAAC,CAAC;YACvL,OAAO,KAAK,EAAE,CAAC;gBAAC,IAAK,KAA+B,CAAC,IAAI,KAAK,QAAQ;oBAAE,MAAM,KAAK,CAAC;YAAC,CAAC;YACtF,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,EAAE,EAAE,GAAG,GAAG,iBAAiB,CAAC,MAAM,CAAC,CAAC;YAC5D,MAAM,GAAG,GAAG,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,EAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YAC7E,MAAM,OAAO,GAAG,EAAC,GAAG,GAAG,EAAC,CAAC;YACzB,IAAI,KAAK,KAAK,aAAa,IAAI,KAAK,CAAC,WAAW,KAAK,IAAI;gBAAE,OAAO,OAAO,CAAC,WAAW,CAAC;;gBACjF,MAAM,CAAC,MAAM,CAAC,OAAO,EAAC,EAAC,CAAC,KAAK,CAAC,EAAC,KAAK,CAAC,KAAK,CAAC,EAAC,CAAC,CAAC;YACnD,MAAM,CAAC,cAAc,CAAC,GAAG,CAAC,KAAK,EAAC,KAAK,CAAC,IAAI,EAAC,EAAC,KAAK,EAAC,OAAO,EAAC,UAAU,EAAC,IAAI,EAAC,QAAQ,EAAC,IAAI,EAAC,YAAY,EAAC,IAAI,EAAC,CAAC,CAAC;YAC5G,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,EAAC,IAAI,EAAC,CAAC,CAAC,GAAC,IAAI,CAAC;YAC7C,iBAAiB,CAAC,IAAI,CAAC,CAAC;YACxB,IAAI,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,GAAC,SAAS;gBAAE,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAC;YACvF,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,GAAG,GAAG,GAAG,UAAU,EAAE,GAAG,MAAM,CAAC;YACtD,MAAM,GAAG,QAAQ,CAAC,IAAI,EAAC,IAAI,EAAC,KAAK,CAAC,CAAC;YACnC,aAAa,CAAC,MAAM,EAAC,IAAI,CAAC,CAAC;YAC3B,UAAU,CAAC,MAAM,EAAC,IAAI,CAAC,CAAC,CAAC,qEAAqE;YAC9F,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,MAAM;gBAAE,MAAM,IAAI,KAAK,CAAC,mDAAmD,CAAC,CAAC;YACjG,MAAM,MAAM,GAAG,SAAS,CAAC,MAAM,CAAC,EAAE,KAAK,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;YAC1D,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,IAAI,KAAK,CAAC,GAAG,KAAK,MAAM,CAAC,GAAG,IAAI,KAAK,CAAC,GAAG,KAAK,MAAM,CAAC,GAAG;gBACzE,MAAM,IAAI,KAAK,CAAC,yEAAyE,CAAC,CAAC;YAC7F,UAAU,CAAC,IAAI,EAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;YAAC,IAAI,GAAC,SAAS,CAAC;YAClD,OAAO,EAAC,OAAO,EAAC,IAAI,EAAC,IAAI,EAAC,EAAC,IAAI,EAAC,KAAK,CAAC,IAAI,EAAC,CAAC,KAAK,CAAC,EAAC,KAAK,CAAC,KAAK,CAAC,EAAC,SAAS,EAAC,6BAA6B,EAAC,SAAS,EAAC,IAAI,CAAC,MAAM,CAAC,aAAa,EAAC,EAAC,CAAC;QAChJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAAC,OAAO,EAAC,OAAO,EAAC,KAAK,EAAC,OAAO,EAAC,IAAI,EAAC,KAAK,EAAC,MAAM,CAAC,KAAK,CAAC,EAAC,CAAC;QAAC,CAAC;gBACpE,CAAC;YAAC,IAAG,MAAM,KAAG,SAAS;gBAAE,SAAS,CAAC,MAAM,CAAC,CAAC;YAAC,IAAG,IAAI;gBAAE,IAAG,CAAC;oBAAA,UAAU,CAAC,IAAI,CAAC,CAAC;gBAAA,CAAC;gBAAA,MAAK,CAAC,CAAA,CAAC;YAAC,IAAG,EAAE,KAAG,SAAS,EAAC,CAAC;gBAAA,SAAS,CAAC,EAAE,CAAC,CAAC;gBAAA,UAAU,CAAC,IAAI,CAAC,CAAC;YAAA,CAAC;QAAC,CAAC;IAClJ,CAAC;CACF;AACD,MAAM,UAAU,eAAe,CAAC,QAA8B;IAC5D,MAAM,MAAM,GAAG,IAAI,GAAG,EAA2C,CAAC;IAClE,KAAK,MAAM,KAAK,IAAI,QAAQ,CAAC,OAAO,EAAE,CAAC;QACrC,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;QAC7C,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IACrD,CAAC;IACD,MAAM,OAAO,GAAG,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC;IAC/D,MAAM,KAAK,GAAa;QACtB,6DAA6D,EAAE,EAAE;QACjE,aAAa,QAAQ,CAAC,QAAQ,EAAE,EAAE,EAAE;QACpC,GAAG,QAAQ,CAAC,OAAO,CAAC,MAAM,WAAW,OAAO,aAAa,QAAQ,CAAC,OAAO,CAAC,MAAM,GAAC,OAAO,UAAU;QAClG,4EAA4E;QAC5E,0EAA0E;QAC1E,wEAAwE;QACxE,+EAA+E;QAC/E,yCAAyC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,aAAa,CAAC,gCAAgC;QAC/G,gFAAgF,EAAE,EAAE;KACrF,CAAC;IACF,KAAK,MAAM,UAAU,IAAI,QAAQ,CAAC,WAAW;QAAE,KAAK,CAAC,IAAI,CAAC,cAAc,GAAC,UAAU,CAAC,CAAC;IACrF,KAAK,CAAC,IAAI,CAAC,oBAAoB,EAAE,EAAE,CAAC,CAAC;IACrC,MAAM,KAAK,GAAG,IAAI,GAAG,EAAkB,CAAC;IACxC,KAAK,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,IAAI,MAAM,EAAE,CAAC;QACvC,KAAK,CAAC,IAAI,CAAC,OAAO,MAAM,KAAK,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC;QAChD,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;YAAA,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,EAAC,KAAK,CAAC,MAAM,CAAC,CAAC;YAAA,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAAA,CAAC;QACjF,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACjB,CAAC;IACD,KAAK,CAAC,IAAI,CAAC,qBAAqB,EAAE,EAAE,CAAC,CAAC;IACtC,KAAK,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,IAAI,MAAM,EAAE,CAAC;QACvC,KAAK,CAAC,IAAI,CAAC,OAAO,MAAM,EAAE,EAAE,EAAE,CAAC,CAAC;QAChC,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;YAC5B,MAAM,KAAK,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;YAC/B,KAAK,CAAC,IAAI,CAAC,QAAQ,KAAK,CAAC,IAAI,KAAK,KAAK,CAAC,OAAO,CAAA,CAAC,CAAA,SAAS,CAAA,CAAC,CAAA,QAAQ,GAAG,EAAE,EAAE,EACvE,GAAG,KAAK,CAAC,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,qBAAqB,KAAK,CAAC,iBAAiB,IAAI,qBAAqB,EAAE,EAAE,EAAE,EAAE,WAAW,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;YACrK,IAAG,KAAK,CAAC,WAAW,KAAG,KAAK,CAAC,mBAAmB;gBAAE,KAAK,CAAC,IAAI,CAAC,EAAE,EAAE,uBAAuB,EAAE,GAAG,KAAK,CAAC,mBAAmB,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;YACpI,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACf,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAE,CAAC,GAAG,MAAM,KAAK,CAAC,OAAO,CAAA,CAAC,CAAA,SAAS,CAAA,CAAC,CAAA,QAAQ,KAAK,KAAK,CAAC,IAAI,sBAAsB,KAAK,WAAW,KAAK,CAAC,MAAM,GAAC,KAAK,GAAC,CAAC,EAAE,CAAC;QACpJ,CAAC;IACH,CAAC;IACD,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC"}
@@ -1,8 +1,64 @@
1
- import type { ContextManager, MessageId } from '@animalabs/context-manager';
1
+ import type { ContextManager, MessageId, MessageMetadata } from '@animalabs/context-manager';
2
2
  import type { ContentBlock, NormalizedMessage, ToolResult } from '@animalabs/membrane';
3
3
  import type { CompletedToolCall } from './types/index.js';
4
4
  export declare const TOOL_RESULT_GUARD_NOTICE = "Tool result withheld by the guard. The tool has already executed.";
5
5
  export declare const TOOL_RESULT_GUARD_AUDIT_STATE = "framework/tool-result-guard";
6
+ /** Where a withheld result's original went: a workspace path; the path a
7
+ * write to it failed at (`error`); the path a write was still under way to
8
+ * when the host stopped waiting for it (`unfinished`); no write, because the
9
+ * workspace isn't answering (`workspace_unanswered`: an earlier write is
10
+ * still under way past the host's deadline) or because the workspace had
11
+ * left the stub's branch when the file would have been committed
12
+ * (`branch_changed`), or because the batch used its deadline before this
13
+ * write could start (`batch_deadline`); or null when no file is written at all (no writable
14
+ * workspace, or the host is stopping). */
15
+ export type WithheldSpill = {
16
+ path: string;
17
+ error?: string;
18
+ unfinished?: true;
19
+ } | {
20
+ skipped: 'workspace_unanswered' | 'branch_changed' | 'batch_deadline';
21
+ } | null;
22
+ /**
23
+ * Writes one withheld original as a workspace file, using what remains of
24
+ * the batch's absolute deadline. A write still running then is unfinished.
25
+ * Once a write reaches that deadline, later spills are workspace_unanswered
26
+ * until all overdue writes settle. Other batches can start before that gate
27
+ * closes. An exhausted batch starts no write (batch_deadline).
28
+ * The tree entry lands on branch or the write is declined (branch_changed).
29
+ * The mount's disk directory is shared across branches.
30
+ */
31
+ export type WithheldSpiller = (label: string, text: string, branch: string, deadline: number) => Promise<WithheldSpill>;
32
+ /** What a host gives a guard for its withheld results: where originals are
33
+ * written, where each annotation is registered, so the host's stop can
34
+ * wait for it even after the agent itself was disposed, and where the
35
+ * guard says whether it has work left. */
36
+ export interface WithheldHost {
37
+ spill: WithheldSpiller;
38
+ /** Absolute deadline for one batch (Date.now() time), taken when the batch is queued. */
39
+ deadline(): number;
40
+ track(annotation: Promise<void>): void;
41
+ /** Whether the guard is idle (see ToolResultGuard.idle), told after each
42
+ * change that can alter it: when an annotation starts or ends, and after
43
+ * each pass over the storage queue. A host keeps a guard that isn't idle
44
+ * within reach for retries, whatever has become of its agent, and lets
45
+ * an idle one go. */
46
+ idle(idle: boolean): void;
47
+ }
48
+ /**
49
+ * The stub a withheld result settles to: #159's neutral notice, then where
50
+ * the original is. It names no refusal and no category (#159 keeps those in
51
+ * operational logs), only the place, so reading it back is the agent's
52
+ * deliberate choice (agent-framework #277). The place holds the result as
53
+ * stored, which for one over the inline cap is its capped text, whose own
54
+ * note names the file with the whole output; so the stub says "its result",
55
+ * not its full result. A failed write's own error text
56
+ * stays in the audit record and the logs, not here. The audit
57
+ * record is said to keep the original only when it was saved: a staged
58
+ * record whose save failed is still queued in memory, and a restart before
59
+ * its retry loses it.
60
+ */
61
+ export declare function withheldResultNotice(spill: WithheldSpill, auditDurable: boolean): string;
6
62
  /**
7
63
  * Admission of newly returned tool output to durable model-facing memory.
8
64
  *
@@ -21,8 +77,43 @@ export declare class ToolResultGuard {
21
77
  private override;
22
78
  /** True until a recovery produces a clean response/new tool round. */
23
79
  recovering: boolean;
80
+ /** Writes withheld originals where the agent can read them; without it,
81
+ * a stub names only the audit record. */
82
+ private host;
83
+ /** Annotations of withheld stubs, chained in settlement order. */
84
+ private annotating;
85
+ /** Annotations started so far, so a read can tell one began during it. */
86
+ private annotationsStarted;
24
87
  constructor(agentName: string, cm: ContextManager, configured?: boolean);
25
88
  get enabled(): boolean;
89
+ setHost(host: WithheldHost | undefined): void;
90
+ /** Settles once every annotation started so far has finished: each of
91
+ * those stubs has been edited to say where its original is, or its edit
92
+ * failed and waits in the storage queue, retried in order until it lands
93
+ * or an operator's change supersedes it (until then the stub is the bare
94
+ * notice, kept out of summaries by its compression hold, and the audit
95
+ * record names the place). It never rejects. Each batch has one deadline
96
+ * for all its workspace writes; queued batches are annotated in order.
97
+ * A request may carry an unfinished-write notice once that deadline passes. */
98
+ whenAnnotated(): Promise<void>;
99
+ /**
100
+ * Runs `read` (a compile of the context) once no withheld stub is still
101
+ * being annotated, and again if an annotation began while it ran, since a
102
+ * settlement can land during the compile's own awaits, such as a previous
103
+ * frame's teardown abandoning its batch. The framework's sent-request
104
+ * compiles go through it: the agent's activations, its direct
105
+ * API calls and their refusal retry, and a conversation fork's seed from its
106
+ * template. A request preview doesn't, so it never waits on a
107
+ * workspace write.
108
+ *
109
+ * Before `read`, a stub edit that failed gets another try with the rest of
110
+ * the storage queue; a store that is still failing then compiles the bare
111
+ * notice, which its hold keeps out of summaries.
112
+ */
113
+ afterAnnotations<T>(read: () => Promise<T>): Promise<T>;
114
+ /** No annotation is running and no storage work is queued: nothing of this
115
+ * guard is left for a host to wait on or retry. */
116
+ get idle(): boolean;
26
117
  setOverride(value: boolean | undefined): void;
27
118
  get settingOverride(): boolean | undefined;
28
119
  get hasPending(): boolean;
@@ -37,15 +128,22 @@ export declare class ToolResultGuard {
37
128
  get pendingWireReserveTokens(): number;
38
129
  /** Ordered storage work, separate from batches awaiting a provider verdict.
39
130
  * A failed acceptance edit retains both the payload and its compression
40
- * hold here; it can never re-arm refusal handling or tool submission. */
131
+ * hold here; it can never re-arm refusal handling or tool submission.
132
+ * Any failed head, including an audit-only record, blocks later queued
133
+ * edits and their holds until that operation succeeds. */
41
134
  private unrecorded;
42
- /** Retry edits and audit writes before a new activation, audit write,
43
- * maintenance pass, or shutdown. A failed operation stays at the head. */
135
+ /** Retry edits and audit writes before a new activation, a compile of a
136
+ * request that is sent (afterAnnotations), an audit write, a maintenance
137
+ * pass, or shutdown. A failed operation stays at the head. */
44
138
  flushUnrecorded(): void;
139
+ /** Make an operation's history edit, if it still has one: once it is made,
140
+ * or superseded by an operator's change, only its record is left to
141
+ * write, and its hold can go. */
142
+ private applyEdit;
45
143
  private append;
46
144
  private write;
47
145
  private archive;
48
- storeResults(content: ContentBlock[], wireResults: ToolResult[], originals: CompletedToolCall[]): MessageId;
146
+ storeResults(content: ContentBlock[], wireResults: ToolResult[], originals: CompletedToolCall[], metadata?: MessageMetadata): MessageId;
49
147
  /** Results for a live continuation (provideToolResults). Marks the batch
50
148
  * submitted and returns the originals only when the audit is durable;
51
149
  * otherwise returns placeholder results and leaves it unsubmitted. */
@@ -74,8 +172,29 @@ export declare class ToolResultGuard {
74
172
  withhold(category: string): string[] | null;
75
173
  /** Transfer ownership from provider admission to an ordered storage job.
76
174
  * Failure retains the accepted payload and its hold until the edit succeeds.
77
- * Withheld content is final already, so audit failures cannot keep it held. */
175
+ * A withheld batch's hold passes to its annotation instead, and from there
176
+ * to its stub's edit, so no summary is made of a stub that doesn't yet say
177
+ * where its original went. */
78
178
  private settle;
179
+ /**
180
+ * Turn a withheld batch's notices into stubs that say where each original
181
+ * is (agent-framework #277): written to the workspace when a writable mount
182
+ * takes it, else kept in the audit record. Its own unedited placeholder is
183
+ * the only thing it edits: an operator's later edit, removal or rollback
184
+ * stands.
185
+ *
186
+ * Where each original went is queued first, on its own ('annotated'), so
187
+ * a stub edit that fails can't take the record of a written file with it.
188
+ * The edit is then made at once, so no storage work queued ahead of it
189
+ * holds it, not even that record if its write is failing, and its record
190
+ * ('stub_updated') is written in order after the others. An
191
+ * edit that fails joins the ordered storage queue like an admission's, with
192
+ * the batch's compression hold: retried before the next activation, compile,
193
+ * maintenance pass or stop until it lands or an operator's change supersedes
194
+ * it. Until then the stub is the bare notice, which the hold keeps out of
195
+ * summaries, and the audit record names the file.
196
+ */
197
+ private annotate;
79
198
  private releaseOperationHold;
80
199
  private releaseHold;
81
200
  }
@@ -1 +1 @@
1
- {"version":3,"file":"tool-result-guard.d.ts","sourceRoot":"","sources":["../../src/tool-result-guard.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,4BAA4B,CAAC;AAC5E,OAAO,KAAK,EAAE,YAAY,EAAE,iBAAiB,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACvF,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAG1D,eAAO,MAAM,wBAAwB,sEAAsE,CAAC;AAC5G,eAAO,MAAM,6BAA6B,gCAAgC,CAAC;AAsB3E;;;;;;;;GAQG;AACH,qBAAa,eAAe;IAQxB,OAAO,CAAC,QAAQ,CAAC,SAAS;IAC1B,OAAO,CAAC,QAAQ,CAAC,EAAE;IACnB,OAAO,CAAC,QAAQ,CAAC,UAAU;IAT7B,OAAO,CAAC,OAAO,CAA2B;IAC1C,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,QAAQ,CAAsB;IACtC,sEAAsE;IACtE,UAAU,UAAS;gBAGA,SAAS,EAAE,MAAM,EACjB,EAAE,EAAE,cAAc,EAClB,UAAU,UAAQ;IAGrC,IAAI,OAAO,IAAI,OAAO,CAA6C;IACnE,WAAW,CAAC,KAAK,EAAE,OAAO,GAAG,SAAS,GAAG,IAAI;IAC7C,IAAI,eAAe,IAAI,OAAO,GAAG,SAAS,CAA0B;IACpE,IAAI,UAAU,IAAI,OAAO,CAAuC;IAChE;;iFAE6E;IAC7E,IAAI,mBAAmB,IAAI,OAAO,CAA6C;IAE/E;;;2EAGuE;IACvE,IAAI,wBAAwB,IAAI,MAAM,CAcrC;IAED;;6EAEyE;IACzE,OAAO,CAAC,UAAU,CAAwB;IAE1C;8EAC0E;IAC1E,eAAe,IAAI,IAAI;IA8BvB,OAAO,CAAC,MAAM;IAMd,OAAO,CAAC,KAAK;IAab,OAAO,CAAC,OAAO;IASf,YAAY,CAAC,OAAO,EAAE,YAAY,EAAE,EAAE,WAAW,EAAE,UAAU,EAAE,EAAE,SAAS,EAAE,iBAAiB,EAAE,GAAG,SAAS;IAmD3G;;0EAEsE;IACtE,iBAAiB,CAAC,OAAO,EAAE,UAAU,EAAE,GAAG,UAAU,EAAE;IAStD;;;iEAG6D;IAC7D,OAAO,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAQ7B;sEACkE;IAClE,cAAc,CAAC,QAAQ,EAAE,iBAAiB,EAAE,EAAE,gBAAgB,UAAQ,GAAG,iBAAiB,EAAE;IAkB5F;;;yEAGqE;IACrE,eAAe,IAAI,IAAI;IAQvB;;;oDAGgD;IAChD,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO;IAO5C,4EAA4E;IAC5E,MAAM,IAAI,IAAI;IAQd,0EAA0E;IAC1E,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,IAAI;IAW3C;;mFAE+E;IAC/E,OAAO,CAAC,MAAM;IAmBd,OAAO,CAAC,oBAAoB;IAO5B,OAAO,CAAC,WAAW;CAGpB"}
1
+ {"version":3,"file":"tool-result-guard.d.ts","sourceRoot":"","sources":["../../src/tool-result-guard.ts"],"names":[],"mappings":"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"}