@animalabs/agent-framework 0.7.4 → 0.9.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 (237) hide show
  1. package/dist/src/agent.d.ts +10 -0
  2. package/dist/src/agent.d.ts.map +1 -1
  3. package/dist/src/agent.js +33 -3
  4. package/dist/src/agent.js.map +1 -1
  5. package/dist/src/code-execution/index.d.ts +1 -1
  6. package/dist/src/code-execution/index.d.ts.map +1 -1
  7. package/dist/src/code-execution/index.js.map +1 -1
  8. package/dist/src/code-execution/py-runner.d.ts +23 -1
  9. package/dist/src/code-execution/py-runner.d.ts.map +1 -1
  10. package/dist/src/code-execution/py-runner.js +40 -4
  11. package/dist/src/code-execution/py-runner.js.map +1 -1
  12. package/dist/src/code-execution/runtime-py.d.ts +15 -2
  13. package/dist/src/code-execution/runtime-py.d.ts.map +1 -1
  14. package/dist/src/code-execution/runtime-py.js +156 -7
  15. package/dist/src/code-execution/runtime-py.js.map +1 -1
  16. package/dist/src/code-execution/tool-definition.d.ts.map +1 -1
  17. package/dist/src/code-execution/tool-definition.js +27 -2
  18. package/dist/src/code-execution/tool-definition.js.map +1 -1
  19. package/dist/src/framework.d.ts +234 -5
  20. package/dist/src/framework.d.ts.map +1 -1
  21. package/dist/src/framework.js +1818 -188
  22. package/dist/src/framework.js.map +1 -1
  23. package/dist/src/gate/event-gate.d.ts +11 -0
  24. package/dist/src/gate/event-gate.d.ts.map +1 -1
  25. package/dist/src/gate/event-gate.js +66 -0
  26. package/dist/src/gate/event-gate.js.map +1 -1
  27. package/dist/src/index.d.ts +1 -0
  28. package/dist/src/index.d.ts.map +1 -1
  29. package/dist/src/index.js +1 -0
  30. package/dist/src/index.js.map +1 -1
  31. package/dist/src/mcpl/capability-grant.d.ts +115 -0
  32. package/dist/src/mcpl/capability-grant.d.ts.map +1 -0
  33. package/dist/src/mcpl/capability-grant.js +291 -0
  34. package/dist/src/mcpl/capability-grant.js.map +1 -0
  35. package/dist/src/mcpl/capability-mask.d.ts +51 -0
  36. package/dist/src/mcpl/capability-mask.d.ts.map +1 -0
  37. package/dist/src/mcpl/capability-mask.js +190 -0
  38. package/dist/src/mcpl/capability-mask.js.map +1 -0
  39. package/dist/src/mcpl/channel-registry.d.ts +30 -2
  40. package/dist/src/mcpl/channel-registry.d.ts.map +1 -1
  41. package/dist/src/mcpl/channel-registry.js +216 -43
  42. package/dist/src/mcpl/channel-registry.js.map +1 -1
  43. package/dist/src/mcpl/checkpoint-manager.d.ts +8 -3
  44. package/dist/src/mcpl/checkpoint-manager.d.ts.map +1 -1
  45. package/dist/src/mcpl/checkpoint-manager.js +28 -8
  46. package/dist/src/mcpl/checkpoint-manager.js.map +1 -1
  47. package/dist/src/mcpl/errors.d.ts +6 -0
  48. package/dist/src/mcpl/errors.d.ts.map +1 -1
  49. package/dist/src/mcpl/errors.js +6 -0
  50. package/dist/src/mcpl/errors.js.map +1 -1
  51. package/dist/src/mcpl/feature-set-manager.d.ts +10 -1
  52. package/dist/src/mcpl/feature-set-manager.d.ts.map +1 -1
  53. package/dist/src/mcpl/feature-set-manager.js +45 -4
  54. package/dist/src/mcpl/feature-set-manager.js.map +1 -1
  55. package/dist/src/mcpl/hook-orchestrator.d.ts +10 -14
  56. package/dist/src/mcpl/hook-orchestrator.d.ts.map +1 -1
  57. package/dist/src/mcpl/hook-orchestrator.js +58 -67
  58. package/dist/src/mcpl/hook-orchestrator.js.map +1 -1
  59. package/dist/src/mcpl/index.d.ts +1 -1
  60. package/dist/src/mcpl/index.d.ts.map +1 -1
  61. package/dist/src/mcpl/index.js.map +1 -1
  62. package/dist/src/mcpl/prose-stream-router.d.ts +9 -0
  63. package/dist/src/mcpl/prose-stream-router.d.ts.map +1 -1
  64. package/dist/src/mcpl/prose-stream-router.js +16 -0
  65. package/dist/src/mcpl/prose-stream-router.js.map +1 -1
  66. package/dist/src/mcpl/push-handler.d.ts.map +1 -1
  67. package/dist/src/mcpl/push-handler.js +20 -2
  68. package/dist/src/mcpl/push-handler.js.map +1 -1
  69. package/dist/src/mcpl/server-connection.d.ts +93 -9
  70. package/dist/src/mcpl/server-connection.d.ts.map +1 -1
  71. package/dist/src/mcpl/server-connection.js +231 -32
  72. package/dist/src/mcpl/server-connection.js.map +1 -1
  73. package/dist/src/mcpl/server-registry.d.ts.map +1 -1
  74. package/dist/src/mcpl/server-registry.js +4 -3
  75. package/dist/src/mcpl/server-registry.js.map +1 -1
  76. package/dist/src/mcpl/tags.d.ts +24 -0
  77. package/dist/src/mcpl/tags.d.ts.map +1 -0
  78. package/dist/src/mcpl/tags.js +52 -0
  79. package/dist/src/mcpl/tags.js.map +1 -0
  80. package/dist/src/mcpl/transport.d.ts +1 -1
  81. package/dist/src/mcpl/transport.d.ts.map +1 -1
  82. package/dist/src/mcpl/transport.js +35 -7
  83. package/dist/src/mcpl/transport.js.map +1 -1
  84. package/dist/src/mcpl/types.d.ts +169 -64
  85. package/dist/src/mcpl/types.d.ts.map +1 -1
  86. package/dist/src/mcpl/types.js +16 -2
  87. package/dist/src/mcpl/types.js.map +1 -1
  88. package/dist/src/module-registry.d.ts +12 -0
  89. package/dist/src/module-registry.d.ts.map +1 -1
  90. package/dist/src/module-registry.js +26 -0
  91. package/dist/src/module-registry.js.map +1 -1
  92. package/dist/src/modules/workspace/index.d.ts +20 -0
  93. package/dist/src/modules/workspace/index.d.ts.map +1 -1
  94. package/dist/src/modules/workspace/index.js +48 -15
  95. package/dist/src/modules/workspace/index.js.map +1 -1
  96. package/dist/src/modules/workspace/sync.d.ts +4 -0
  97. package/dist/src/modules/workspace/sync.d.ts.map +1 -1
  98. package/dist/src/modules/workspace/sync.js +1 -1
  99. package/dist/src/modules/workspace/sync.js.map +1 -1
  100. package/dist/src/refusal-reactions.d.ts +27 -0
  101. package/dist/src/refusal-reactions.d.ts.map +1 -0
  102. package/dist/src/refusal-reactions.js +35 -0
  103. package/dist/src/refusal-reactions.js.map +1 -0
  104. package/dist/src/tool-result-history.d.ts +10 -0
  105. package/dist/src/tool-result-history.d.ts.map +1 -1
  106. package/dist/src/tool-result-history.js +16 -5
  107. package/dist/src/tool-result-history.js.map +1 -1
  108. package/dist/src/types/agent.d.ts +35 -0
  109. package/dist/src/types/agent.d.ts.map +1 -1
  110. package/dist/src/types/framework.d.ts +26 -0
  111. package/dist/src/types/framework.d.ts.map +1 -1
  112. package/dist/src/types/module.d.ts +22 -0
  113. package/dist/src/types/module.d.ts.map +1 -1
  114. package/dist/src/types/trace.d.ts +24 -0
  115. package/dist/src/types/trace.d.ts.map +1 -1
  116. package/dist/test/busy-agent-scheduler.test.js +1 -0
  117. package/dist/test/busy-agent-scheduler.test.js.map +1 -1
  118. package/dist/test/channel-registry-routing.test.js +38 -10
  119. package/dist/test/channel-registry-routing.test.js.map +1 -1
  120. package/dist/test/channel-registry-typing.test.js +10 -1
  121. package/dist/test/channel-registry-typing.test.js.map +1 -1
  122. package/dist/test/checkpoint-attribution.test.js +168 -8
  123. package/dist/test/checkpoint-attribution.test.js.map +1 -1
  124. package/dist/test/code-execution.test.js +327 -1
  125. package/dist/test/code-execution.test.js.map +1 -1
  126. package/dist/test/conversation-fork-injection-scoping.test.js +8 -3
  127. package/dist/test/conversation-fork-injection-scoping.test.js.map +1 -1
  128. package/dist/test/deferred-wake-integrity.test.d.ts +29 -0
  129. package/dist/test/deferred-wake-integrity.test.d.ts.map +1 -0
  130. package/dist/test/deferred-wake-integrity.test.js +320 -0
  131. package/dist/test/deferred-wake-integrity.test.js.map +1 -0
  132. package/dist/test/event-gate-selfwake.test.d.ts +15 -0
  133. package/dist/test/event-gate-selfwake.test.d.ts.map +1 -0
  134. package/dist/test/event-gate-selfwake.test.js +125 -0
  135. package/dist/test/event-gate-selfwake.test.js.map +1 -0
  136. package/dist/test/machine-close-provenance.test.d.ts +2 -0
  137. package/dist/test/machine-close-provenance.test.d.ts.map +1 -0
  138. package/dist/test/machine-close-provenance.test.js +116 -0
  139. package/dist/test/machine-close-provenance.test.js.map +1 -0
  140. package/dist/test/mcpl-access-provider.test.d.ts +2 -0
  141. package/dist/test/mcpl-access-provider.test.d.ts.map +1 -0
  142. package/dist/test/mcpl-access-provider.test.js +20 -0
  143. package/dist/test/mcpl-access-provider.test.js.map +1 -0
  144. package/dist/test/mcpl-awareness-barrier.test.js +10 -0
  145. package/dist/test/mcpl-awareness-barrier.test.js.map +1 -1
  146. package/dist/test/mcpl-capability-grant.test.d.ts +10 -0
  147. package/dist/test/mcpl-capability-grant.test.d.ts.map +1 -0
  148. package/dist/test/mcpl-capability-grant.test.js +109 -0
  149. package/dist/test/mcpl-capability-grant.test.js.map +1 -0
  150. package/dist/test/mcpl-capability-scoping.test.d.ts +2 -0
  151. package/dist/test/mcpl-capability-scoping.test.d.ts.map +1 -0
  152. package/dist/test/mcpl-capability-scoping.test.js +266 -0
  153. package/dist/test/mcpl-capability-scoping.test.js.map +1 -0
  154. package/dist/test/mcpl-gate-roundtrip.test.js +13 -0
  155. package/dist/test/mcpl-gate-roundtrip.test.js.map +1 -1
  156. package/dist/test/mcpl-list-status.test.d.ts +2 -0
  157. package/dist/test/mcpl-list-status.test.d.ts.map +1 -0
  158. package/dist/test/mcpl-list-status.test.js +78 -0
  159. package/dist/test/mcpl-list-status.test.js.map +1 -0
  160. package/dist/test/mcpl-manifest-changed.test.d.ts +2 -0
  161. package/dist/test/mcpl-manifest-changed.test.d.ts.map +1 -0
  162. package/dist/test/mcpl-manifest-changed.test.js +177 -0
  163. package/dist/test/mcpl-manifest-changed.test.js.map +1 -0
  164. package/dist/test/mcpl-reconnect-events.test.js +27 -2
  165. package/dist/test/mcpl-reconnect-events.test.js.map +1 -1
  166. package/dist/test/mcpl-reconnect-reregistration.test.js +53 -17
  167. package/dist/test/mcpl-reconnect-reregistration.test.js.map +1 -1
  168. package/dist/test/mcpl-request-timeout.test.js +1 -1
  169. package/dist/test/mcpl-request-timeout.test.js.map +1 -1
  170. package/dist/test/module-context-integration.test.d.ts +18 -0
  171. package/dist/test/module-context-integration.test.d.ts.map +1 -0
  172. package/dist/test/module-context-integration.test.js +181 -0
  173. package/dist/test/module-context-integration.test.js.map +1 -0
  174. package/dist/test/physical-window-restart.test.d.ts +14 -0
  175. package/dist/test/physical-window-restart.test.d.ts.map +1 -0
  176. package/dist/test/physical-window-restart.test.js +222 -0
  177. package/dist/test/physical-window-restart.test.js.map +1 -0
  178. package/dist/test/present-while-acting.test.js +270 -0
  179. package/dist/test/present-while-acting.test.js.map +1 -1
  180. package/dist/test/refusal-reaction-baseline.test.d.ts +2 -0
  181. package/dist/test/refusal-reaction-baseline.test.d.ts.map +1 -0
  182. package/dist/test/refusal-reaction-baseline.test.js +74 -0
  183. package/dist/test/refusal-reaction-baseline.test.js.map +1 -0
  184. package/dist/test/state-scaling-e2e.test.js +7 -1
  185. package/dist/test/state-scaling-e2e.test.js.map +1 -1
  186. package/dist/test/state-scaling.test.js +9 -1
  187. package/dist/test/state-scaling.test.js.map +1 -1
  188. package/dist/test/tool-result-spill.test.d.ts +13 -0
  189. package/dist/test/tool-result-spill.test.d.ts.map +1 -0
  190. package/dist/test/tool-result-spill.test.js +463 -0
  191. package/dist/test/tool-result-spill.test.js.map +1 -0
  192. package/dist/test/trunk-channel-routing.test.js +45 -0
  193. package/dist/test/trunk-channel-routing.test.js.map +1 -1
  194. package/dist/test/utils-surface.test.d.ts +2 -0
  195. package/dist/test/utils-surface.test.d.ts.map +1 -0
  196. package/dist/test/utils-surface.test.js +145 -0
  197. package/dist/test/utils-surface.test.js.map +1 -0
  198. package/dist/test/workspace-read-image.test.js +71 -0
  199. package/dist/test/workspace-read-image.test.js.map +1 -1
  200. package/dist/test/workspace-restore-order.test.d.ts +16 -0
  201. package/dist/test/workspace-restore-order.test.d.ts.map +1 -0
  202. package/dist/test/workspace-restore-order.test.js +140 -0
  203. package/dist/test/workspace-restore-order.test.js.map +1 -0
  204. package/dist/tsconfig.tsbuildinfo +1 -1
  205. package/package.json +4 -4
  206. package/src/agent.ts +37 -3
  207. package/src/code-execution/index.ts +1 -0
  208. package/src/code-execution/py-runner.ts +56 -4
  209. package/src/code-execution/runtime-py.ts +156 -7
  210. package/src/code-execution/tool-definition.ts +27 -2
  211. package/src/framework.ts +2080 -203
  212. package/src/gate/event-gate.ts +72 -0
  213. package/src/index.ts +1 -0
  214. package/src/mcpl/capability-grant.ts +319 -0
  215. package/src/mcpl/capability-mask.ts +228 -0
  216. package/src/mcpl/channel-registry.ts +265 -43
  217. package/src/mcpl/checkpoint-manager.ts +28 -8
  218. package/src/mcpl/errors.ts +7 -0
  219. package/src/mcpl/feature-set-manager.ts +50 -5
  220. package/src/mcpl/hook-orchestrator.ts +64 -86
  221. package/src/mcpl/index.ts +0 -2
  222. package/src/mcpl/prose-stream-router.ts +17 -0
  223. package/src/mcpl/push-handler.ts +18 -2
  224. package/src/mcpl/server-connection.ts +262 -34
  225. package/src/mcpl/server-registry.ts +4 -3
  226. package/src/mcpl/tags.ts +50 -0
  227. package/src/mcpl/transport.ts +37 -7
  228. package/src/mcpl/types.ts +187 -78
  229. package/src/module-registry.ts +34 -0
  230. package/src/modules/workspace/index.ts +49 -15
  231. package/src/modules/workspace/sync.ts +1 -1
  232. package/src/refusal-reactions.ts +37 -0
  233. package/src/tool-result-history.ts +17 -5
  234. package/src/types/agent.ts +36 -0
  235. package/src/types/framework.ts +27 -0
  236. package/src/types/module.ts +24 -0
  237. package/src/types/trace.ts +22 -0
@@ -0,0 +1,463 @@
1
+ /**
2
+ * Oversized tool-result spill — completion coverage for issue #89.
3
+ *
4
+ * The mechanism (spill to workspace file + bounded preview) landed in
5
+ * f231bbf; these tests pin the completion semantics: the house-safe 5000
6
+ * default (no more 42k accidental ingests), the durable
7
+ * FrameworkConfig.toolResultInlineMaxChars cap, hot-override provenance and
8
+ * restart behavior, error results under the same policy, the explicit
9
+ * no-writable-workspace fallback, history/wire byte-identity, and native
10
+ * image blocks surviving next to a spilled text payload.
11
+ */
12
+ import { describe, it } from 'node:test';
13
+ import assert from 'node:assert';
14
+ import { mkdtempSync, mkdirSync, rmSync } from 'node:fs';
15
+ import { tmpdir } from 'node:os';
16
+ import { join } from 'node:path';
17
+ import { AgentFramework, PassthroughStrategy } from '../src/index.js';
18
+ import { WorkspaceModule } from '../src/modules/workspace/index.js';
19
+ import { createMockResponse, MockMembrane } from './helpers/mock-membrane.js';
20
+ class CappedPassthroughStrategy extends PassthroughStrategy {
21
+ maxMessageTokens = 1000;
22
+ }
23
+ function tempStorePath(prefix) {
24
+ const tempDir = mkdtempSync(join(tmpdir(), prefix));
25
+ return { tempDir, storePath: join(tempDir, 'store') };
26
+ }
27
+ /** Module returning one canned result for its single `fetch` tool. */
28
+ class CannedToolModule {
29
+ result;
30
+ name = 'canned';
31
+ constructor(result) {
32
+ this.result = result;
33
+ }
34
+ async start() { }
35
+ async stop() { }
36
+ getTools() {
37
+ return [{
38
+ name: 'fetch',
39
+ description: 'Returns the canned payload.',
40
+ inputSchema: { type: 'object', properties: {} },
41
+ }];
42
+ }
43
+ async handleToolCall() {
44
+ return this.result;
45
+ }
46
+ async onProcess(event) {
47
+ if (event.type === 'external-message') {
48
+ return {
49
+ addMessages: [{ participant: 'User', content: event.content }],
50
+ requestInference: true,
51
+ };
52
+ }
53
+ return {};
54
+ }
55
+ }
56
+ async function startSpillTurn(opts) {
57
+ const { tempDir, storePath } = opts.storePath && opts.tempDir
58
+ ? { tempDir: opts.tempDir, storePath: opts.storePath }
59
+ : tempStorePath(opts.prefix);
60
+ const membrane = new MockMembrane();
61
+ membrane.pushResponse(createMockResponse([
62
+ { type: 'text', text: 'Fetching.' },
63
+ { type: 'tool_use', id: 'call_fetch', name: 'canned--fetch', input: {} },
64
+ ], 'tool_use'));
65
+ membrane.pushResponse(createMockResponse([{ type: 'text', text: 'Handled.' }]));
66
+ let workspace = null;
67
+ const modules = [new CannedToolModule(opts.result)];
68
+ if (opts.withWorkspace) {
69
+ const mountDir = join(tempDir, 'mount');
70
+ mkdirSync(mountDir, { recursive: true });
71
+ workspace = new WorkspaceModule({
72
+ mounts: [{
73
+ name: 'files',
74
+ path: mountDir,
75
+ mode: 'read-write',
76
+ watch: 'never',
77
+ ...(opts.workspaceMaxFileSize !== undefined
78
+ ? { maxFileSize: opts.workspaceMaxFileSize }
79
+ : {}),
80
+ }],
81
+ });
82
+ modules.push(workspace);
83
+ }
84
+ const framework = await AgentFramework.create({
85
+ storePath,
86
+ membrane: membrane.asMembrane(),
87
+ agents: [{
88
+ name: 'prime',
89
+ model: 'test-model',
90
+ systemPrompt: 'You are prime.',
91
+ allowedTools: 'all',
92
+ ...(opts.cappedStrategy ? { strategy: new CappedPassthroughStrategy() } : {}),
93
+ }],
94
+ modules,
95
+ syncIntervalMs: 0,
96
+ ...(opts.toolResultInlineMaxChars !== undefined
97
+ ? { toolResultInlineMaxChars: opts.toolResultInlineMaxChars }
98
+ : {}),
99
+ });
100
+ workspace?.initStore(framework.getStore());
101
+ framework.start();
102
+ framework.pushEvent({
103
+ type: 'external-message',
104
+ source: 'test',
105
+ content: [{ type: 'text', text: 'fetch it' }],
106
+ metadata: {},
107
+ triggerInference: true,
108
+ });
109
+ return { framework, membrane, workspace, tempDir, storePath };
110
+ }
111
+ /** Poll the agent's stored context for the first tool_result block. */
112
+ async function waitForStoredToolResult(framework, timeoutMs = 20_000) {
113
+ const deadline = Date.now() + timeoutMs;
114
+ while (Date.now() < deadline) {
115
+ await new Promise((r) => setTimeout(r, 100));
116
+ const cm = framework.getAgent('prime')?.getContextManager();
117
+ const msgs = (cm?.queryMessages({}).messages ?? []);
118
+ for (const m of msgs) {
119
+ for (const b of m.content ?? []) {
120
+ if (b.type === 'tool_result') {
121
+ return { content: b.content, isError: b.isError === true };
122
+ }
123
+ }
124
+ }
125
+ }
126
+ return null;
127
+ }
128
+ /** Effective-cap provenance through the framework's own settings extension. */
129
+ function capProvenance(framework) {
130
+ const extensions = framework.collectAgentSettingsExtensions();
131
+ return extensions.get('_framework').get('prime');
132
+ }
133
+ function frameworkExtension(framework) {
134
+ const extensions = framework.collectAgentSettingsExtensions();
135
+ return extensions.get('_framework');
136
+ }
137
+ describe('tool-result spill completion (issue #89)', () => {
138
+ it('caps at the house default 5000 with no config and no strategy bound', async () => {
139
+ // Pre-#89 behavior: PassthroughStrategy has no maxMessageTokens, so the
140
+ // cap was undefined and a 42k result went inline whole. This pins the fix.
141
+ const h = await startSpillTurn({
142
+ prefix: 'spill-default-',
143
+ result: { success: true, data: { blob: 'x'.repeat(42_000) } },
144
+ withWorkspace: true,
145
+ });
146
+ try {
147
+ const stored = await waitForStoredToolResult(h.framework);
148
+ assert.ok(stored, 'tool result should be stored');
149
+ assert.ok(stored.content.length < 6_000, `inline copy must be near the 5000 cap, got ${stored.content.length}`);
150
+ assert.match(stored.content, /showing 5000 of \d+ chars; full content: workspace file files\/tool-results\//);
151
+ const prov = capProvenance(h.framework);
152
+ assert.strictEqual(prov.tool_result_inline_max_chars, null);
153
+ assert.strictEqual(prov.tool_result_inline_max_chars_effective, 5000);
154
+ assert.strictEqual(prov.tool_result_inline_max_chars_source, 'default');
155
+ // Full content is recoverable from the spill file.
156
+ const refMatch = stored.content.match(/workspace file (files\/tool-results\/\S+\.txt)/);
157
+ assert.ok(refMatch, 'reference should name the spill file');
158
+ const file = await h.workspace.readBinary(refMatch[1]);
159
+ assert.ok('data' in file, `spill file should be readable: ${JSON.stringify(file)}`);
160
+ assert.ok(file.data.byteLength >= 42_000, 'full content in file');
161
+ }
162
+ finally {
163
+ await h.framework.stop();
164
+ rmSync(h.tempDir, { recursive: true, force: true });
165
+ }
166
+ });
167
+ it('honors the durable FrameworkConfig cap and reports framework-config provenance', async () => {
168
+ const h = await startSpillTurn({
169
+ prefix: 'spill-config-',
170
+ result: { success: true, data: { blob: 'x'.repeat(42_000) } },
171
+ withWorkspace: true,
172
+ toolResultInlineMaxChars: 12_000,
173
+ });
174
+ try {
175
+ const stored = await waitForStoredToolResult(h.framework);
176
+ assert.ok(stored, 'tool result should be stored');
177
+ assert.match(stored.content, /showing 12000 of \d+ chars/);
178
+ const prov = capProvenance(h.framework);
179
+ assert.strictEqual(prov.tool_result_inline_max_chars_effective, 12_000);
180
+ assert.strictEqual(prov.tool_result_inline_max_chars_source, 'framework-config');
181
+ }
182
+ finally {
183
+ await h.framework.stop();
184
+ rmSync(h.tempDir, { recursive: true, force: true });
185
+ }
186
+ });
187
+ it('hot override wins over config; reset restores the durable cap', async () => {
188
+ const h = await startSpillTurn({
189
+ prefix: 'spill-override-',
190
+ result: { success: true, data: { small: true } },
191
+ withWorkspace: true,
192
+ toolResultInlineMaxChars: 12_000,
193
+ });
194
+ try {
195
+ const ext = frameworkExtension(h.framework);
196
+ ext.update('prime', { tool_result_inline_max_chars: 50_000 });
197
+ let prov = capProvenance(h.framework);
198
+ assert.strictEqual(prov.tool_result_inline_max_chars, 50_000);
199
+ assert.strictEqual(prov.tool_result_inline_max_chars_effective, 50_000);
200
+ assert.strictEqual(prov.tool_result_inline_max_chars_source, 'agent-settings-override');
201
+ ext.reset('prime');
202
+ prov = capProvenance(h.framework);
203
+ assert.strictEqual(prov.tool_result_inline_max_chars, null);
204
+ assert.strictEqual(prov.tool_result_inline_max_chars_effective, 12_000);
205
+ assert.strictEqual(prov.tool_result_inline_max_chars_source, 'framework-config');
206
+ }
207
+ finally {
208
+ await h.framework.stop();
209
+ rmSync(h.tempDir, { recursive: true, force: true });
210
+ }
211
+ });
212
+ it('spills giant ERROR results under the same policy, preserving isError', async () => {
213
+ const h = await startSpillTurn({
214
+ prefix: 'spill-error-',
215
+ result: { success: false, error: 'E'.repeat(42_000), isError: true },
216
+ withWorkspace: true,
217
+ });
218
+ try {
219
+ const stored = await waitForStoredToolResult(h.framework);
220
+ assert.ok(stored, 'error tool result should be stored');
221
+ assert.strictEqual(stored.isError, true);
222
+ assert.ok(stored.content.length < 6_000, `inline error copy must be capped, got ${stored.content.length}`);
223
+ assert.match(stored.content, /full content: workspace file files\/tool-results\//);
224
+ // Wire copy byte-matches the stored copy.
225
+ const wire = h.membrane.lastStream?.receivedToolResults[0];
226
+ assert.ok(wire && wire.length === 1, 'one wire tool result expected');
227
+ assert.strictEqual(wire[0].isError, true);
228
+ assert.strictEqual(wire[0].content, stored.content, 'history and live wire must be byte-identical');
229
+ }
230
+ finally {
231
+ await h.framework.stop();
232
+ rmSync(h.tempDir, { recursive: true, force: true });
233
+ }
234
+ });
235
+ it('keeps history and live wire byte-identical for spilled successes', async () => {
236
+ const h = await startSpillTurn({
237
+ prefix: 'spill-identity-',
238
+ result: { success: true, data: { blob: 'y'.repeat(42_000) } },
239
+ withWorkspace: true,
240
+ });
241
+ try {
242
+ const stored = await waitForStoredToolResult(h.framework);
243
+ assert.ok(stored, 'tool result should be stored');
244
+ const wire = h.membrane.lastStream?.receivedToolResults[0];
245
+ assert.ok(wire && wire.length === 1, 'one wire tool result expected');
246
+ assert.strictEqual(wire[0].content, stored.content, 'history and live wire must be byte-identical');
247
+ }
248
+ finally {
249
+ await h.framework.stop();
250
+ rmSync(h.tempDir, { recursive: true, force: true });
251
+ }
252
+ });
253
+ it('falls back to EXPLICIT plain truncation with no writable workspace', async () => {
254
+ const h = await startSpillTurn({
255
+ prefix: 'spill-nows-',
256
+ result: { success: true, data: { blob: 'z'.repeat(42_000) } },
257
+ withWorkspace: false,
258
+ });
259
+ try {
260
+ const stored = await waitForStoredToolResult(h.framework);
261
+ assert.ok(stored, 'tool result should be stored');
262
+ assert.ok(stored.content.length < 6_000, 'inline copy must be capped');
263
+ assert.match(stored.content, /no writable workspace, full content not retained/);
264
+ assert.doesNotMatch(stored.content, /workspace file/);
265
+ }
266
+ finally {
267
+ await h.framework.stop();
268
+ rmSync(h.tempDir, { recursive: true, force: true });
269
+ }
270
+ });
271
+ it('preserves native image blocks and references the spill file from the wire text block', async () => {
272
+ // 1x1 transparent PNG.
273
+ const png = 'iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mNkYPhfDwAChwGA60e6kgAAAABJRU5ErkJggg==';
274
+ const h = await startSpillTurn({
275
+ prefix: 'spill-image-',
276
+ result: {
277
+ success: true,
278
+ data: [
279
+ { type: 'text', text: 'T'.repeat(42_000) },
280
+ { type: 'image', data: png, mimeType: 'image/png' },
281
+ ],
282
+ },
283
+ withWorkspace: true,
284
+ });
285
+ try {
286
+ const stored = await waitForStoredToolResult(h.framework);
287
+ assert.ok(stored, 'tool result should be stored');
288
+ // History copy: text spilled; the image placeholder sits past the
289
+ // preview boundary, so it lives in the spill file, never as base64.
290
+ assert.match(stored.content, /full content: workspace file/);
291
+ assert.doesNotMatch(stored.content, new RegExp(png.slice(0, 24)));
292
+ const refMatch = stored.content.match(/workspace file (files\/tool-results\/\S+\.txt)/);
293
+ assert.ok(refMatch, 'reference should name the spill file');
294
+ const file = await h.workspace.readBinary(refMatch[1]);
295
+ assert.ok('data' in file, 'spill file should be readable');
296
+ const full = file.data.toString('utf8');
297
+ assert.match(full, /\[image: image\/png/, 'spill file keeps the image placeholder, not base64');
298
+ // Wire copy: native blocks — image bytes intact, text bounded with a
299
+ // pointer at the same spill file.
300
+ const wire = h.membrane.lastStream?.receivedToolResults[0];
301
+ assert.ok(wire && wire.length === 1, 'one wire tool result expected');
302
+ const blocks = wire[0].content;
303
+ assert.ok(Array.isArray(blocks), 'wire content should be native blocks');
304
+ const image = blocks.find((b) => b.type === 'image');
305
+ assert.ok(image, 'image block must survive');
306
+ assert.strictEqual(image.source?.data, png, 'base64 must be byte-intact');
307
+ const text = blocks.find((b) => b.type === 'text');
308
+ assert.ok(text?.text, 'text block expected');
309
+ assert.ok(text.text.length < 6_000, 'text block must be capped');
310
+ assert.match(text.text, /full serialized result: workspace file files\/tool-results\//);
311
+ }
312
+ finally {
313
+ await h.framework.stop();
314
+ rmSync(h.tempDir, { recursive: true, force: true });
315
+ }
316
+ });
317
+ it('reports a FAILED spill write distinctly from having no workspace, with a trace', async () => {
318
+ // A writable mount exists but refuses the write (size cap). The agent
319
+ // must NOT be told "no writable workspace" — that teaches them their
320
+ // residence lacks a capability it actually has (opus-rev finding #1).
321
+ const h = await startSpillTurn({
322
+ prefix: 'spill-wfail-',
323
+ result: { success: true, data: { blob: 'w'.repeat(60_000) } },
324
+ withWorkspace: true,
325
+ workspaceMaxFileSize: 20_000,
326
+ });
327
+ const traces = [];
328
+ h.framework.onTrace((e) => {
329
+ if (e.type === 'tool:spill_failed') {
330
+ traces.push(e);
331
+ }
332
+ });
333
+ try {
334
+ const stored = await waitForStoredToolResult(h.framework);
335
+ assert.ok(stored, 'tool result should be stored');
336
+ assert.match(stored.content, /spill to workspace file files\/tool-results\/\S+\.txt FAILED \(/);
337
+ assert.match(stored.content, /content over the cap was not retained/);
338
+ assert.doesNotMatch(stored.content, /no writable workspace/);
339
+ assert.strictEqual(traces.length, 1, 'exactly one tool:spill_failed trace expected');
340
+ assert.strictEqual(traces[0].contentLength, 60_011);
341
+ assert.match(String(traces[0].path), /files\/tool-results\//);
342
+ assert.ok(String(traces[0].error).length > 0, 'trace should carry the failure reason');
343
+ }
344
+ finally {
345
+ await h.framework.stop();
346
+ rmSync(h.tempDir, { recursive: true, force: true });
347
+ }
348
+ });
349
+ it('clamps the default down to the strategy bound and reports it', async () => {
350
+ // maxMessageTokens=1000 → strategy bound 4000 < default 5000. This branch
351
+ // decides the cap for every resident on a bounded strategy — pin it.
352
+ const h = await startSpillTurn({
353
+ prefix: 'spill-clamp-',
354
+ result: { success: true, data: { blob: 'c'.repeat(42_000) } },
355
+ withWorkspace: true,
356
+ cappedStrategy: true,
357
+ });
358
+ try {
359
+ const stored = await waitForStoredToolResult(h.framework);
360
+ assert.ok(stored, 'tool result should be stored');
361
+ assert.match(stored.content, /showing 4000 of \d+ chars/);
362
+ const prov = capProvenance(h.framework);
363
+ assert.strictEqual(prov.tool_result_inline_max_chars_effective, 4000);
364
+ assert.strictEqual(prov.tool_result_inline_max_chars_source, 'default');
365
+ assert.strictEqual(prov.tool_result_inline_max_chars_clamped_by, 'strategy-bound');
366
+ }
367
+ finally {
368
+ await h.framework.stop();
369
+ rmSync(h.tempDir, { recursive: true, force: true });
370
+ }
371
+ });
372
+ it('restart keeps BOTH the configured cap and the resident-set value; reset returns to config', async () => {
373
+ // The resident's agent_settings value is durable (antra + Sol, 08-06):
374
+ // it persists in framework state like the core runtime settings.
375
+ const { tempDir, storePath } = tempStorePath('spill-restart-');
376
+ const boot = () => startSpillTurn({
377
+ prefix: 'unused-',
378
+ result: { success: true, data: { small: true } },
379
+ withWorkspace: true,
380
+ toolResultInlineMaxChars: 8_000,
381
+ tempDir,
382
+ storePath,
383
+ });
384
+ const first = await boot();
385
+ try {
386
+ frameworkExtension(first.framework).update('prime', { tool_result_inline_max_chars: 60_000 });
387
+ assert.strictEqual(capProvenance(first.framework).tool_result_inline_max_chars_effective, 60_000);
388
+ }
389
+ finally {
390
+ await first.framework.stop();
391
+ }
392
+ const second = await boot();
393
+ try {
394
+ const prov = capProvenance(second.framework);
395
+ assert.strictEqual(prov.tool_result_inline_max_chars, 60_000, 'resident value must survive restart');
396
+ assert.strictEqual(prov.tool_result_inline_max_chars_effective, 60_000);
397
+ assert.strictEqual(prov.tool_result_inline_max_chars_source, 'agent-settings-override');
398
+ frameworkExtension(second.framework).reset('prime');
399
+ const afterReset = capProvenance(second.framework);
400
+ assert.strictEqual(afterReset.tool_result_inline_max_chars_effective, 8_000, 'reset returns to the residence config');
401
+ assert.strictEqual(afterReset.tool_result_inline_max_chars_source, 'framework-config');
402
+ }
403
+ finally {
404
+ await second.framework.stop();
405
+ }
406
+ const third = await boot();
407
+ try {
408
+ const prov = capProvenance(third.framework);
409
+ assert.strictEqual(prov.tool_result_inline_max_chars, null, 'reset must also survive restart');
410
+ assert.strictEqual(prov.tool_result_inline_max_chars_effective, 8_000);
411
+ assert.strictEqual(prov.tool_result_inline_max_chars_source, 'framework-config');
412
+ }
413
+ finally {
414
+ await third.framework.stop();
415
+ rmSync(tempDir, { recursive: true, force: true });
416
+ }
417
+ });
418
+ it('hard-clamps a resident value above the strategy bound, reporting desired AND effective', async () => {
419
+ // Sol's #94 ruling: persist the desired cap, but the effective inline
420
+ // cap is min(desired, strategy bound) — durable preference must not be a
421
+ // durable path past the per-message safety limit.
422
+ const h = await startSpillTurn({
423
+ prefix: 'spill-exceeds-',
424
+ result: { success: true, data: { blob: 'q'.repeat(42_000) } },
425
+ withWorkspace: true,
426
+ cappedStrategy: true, // strategy bound 4000
427
+ });
428
+ try {
429
+ frameworkExtension(h.framework).update('prime', { tool_result_inline_max_chars: 50_000 });
430
+ const prov = capProvenance(h.framework);
431
+ assert.strictEqual(prov.tool_result_inline_max_chars, 50_000, 'desired value is preserved');
432
+ assert.strictEqual(prov.tool_result_inline_max_chars_effective, 4_000, 'effective is hard-clamped');
433
+ assert.strictEqual(prov.tool_result_inline_max_chars_source, 'agent-settings-override');
434
+ assert.strictEqual(prov.tool_result_inline_max_chars_clamped_by, 'strategy-bound');
435
+ // The clamp is enforced on the wire, not just reported.
436
+ const stored = await waitForStoredToolResult(h.framework);
437
+ assert.ok(stored, 'tool result should be stored');
438
+ assert.match(stored.content, /showing 4000 of \d+ chars/);
439
+ }
440
+ finally {
441
+ await h.framework.stop();
442
+ rmSync(h.tempDir, { recursive: true, force: true });
443
+ }
444
+ });
445
+ it('rejects an invalid configured cap at create()', async () => {
446
+ const { tempDir, storePath } = tempStorePath('spill-invalid-');
447
+ const membrane = new MockMembrane();
448
+ try {
449
+ await assert.rejects(AgentFramework.create({
450
+ storePath,
451
+ membrane: membrane.asMembrane(),
452
+ agents: [{ name: 'prime', model: 'test-model', systemPrompt: 'p', allowedTools: 'all' }],
453
+ modules: [],
454
+ syncIntervalMs: 0,
455
+ toolResultInlineMaxChars: 500,
456
+ }), /toolResultInlineMaxChars must be a number >= 1000/);
457
+ }
458
+ finally {
459
+ rmSync(tempDir, { recursive: true, force: true });
460
+ }
461
+ });
462
+ });
463
+ //# sourceMappingURL=tool-result-spill.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tool-result-spill.test.js","sourceRoot":"","sources":["../../test/tool-result-spill.test.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,MAAM,MAAM,aAAa,CAAC;AACjC,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACzD,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACjC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAQjC,OAAO,EAAE,cAAc,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AACtE,OAAO,EAAE,eAAe,EAAE,MAAM,mCAAmC,CAAC;AACpE,OAAO,EAAE,kBAAkB,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAE9E,MAAM,yBAA0B,SAAQ,mBAAmB;IAChD,gBAAgB,GAAG,IAAI,CAAC;CAClC;AAED,SAAS,aAAa,CAAC,MAAc;IACnC,MAAM,OAAO,GAAG,WAAW,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,MAAM,CAAC,CAAC,CAAC;IACpD,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,EAAE,CAAC;AACxD,CAAC;AAED,sEAAsE;AACtE,MAAM,gBAAgB;IAEA;IADX,IAAI,GAAG,QAAQ,CAAC;IACzB,YAAoB,MAAkB;QAAlB,WAAM,GAAN,MAAM,CAAY;IAAG,CAAC;IAC1C,KAAK,CAAC,KAAK,KAAmB,CAAC;IAC/B,KAAK,CAAC,IAAI,KAAmB,CAAC;IAC9B,QAAQ;QACN,OAAO,CAAC;gBACN,IAAI,EAAE,OAAO;gBACb,WAAW,EAAE,6BAA6B;gBAC1C,WAAW,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,UAAU,EAAE,EAAE,EAAE;aAChD,CAAC,CAAC;IACL,CAAC;IACD,KAAK,CAAC,cAAc;QAClB,OAAO,IAAI,CAAC,MAAM,CAAC;IACrB,CAAC;IACD,KAAK,CAAC,SAAS,CAAC,KAAmB;QACjC,IAAI,KAAK,CAAC,IAAI,KAAK,kBAAkB,EAAE,CAAC;YACtC,OAAO;gBACL,WAAW,EAAE,CAAC,EAAE,WAAW,EAAE,MAAM,EAAE,OAAO,EAAG,KAA8B,CAAC,OAAgB,EAAE,CAAC;gBACjG,gBAAgB,EAAE,IAAI;aACvB,CAAC;QACJ,CAAC;QACD,OAAO,EAAE,CAAC;IACZ,CAAC;CACF;AAUD,KAAK,UAAU,cAAc,CAAC,IAS7B;IACC,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,GAAG,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,OAAO;QAC3D,CAAC,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE;QACtD,CAAC,CAAC,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAC/B,MAAM,QAAQ,GAAG,IAAI,YAAY,EAAE,CAAC;IACpC,QAAQ,CAAC,YAAY,CAAC,kBAAkB,CAAC;QACvC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,WAAW,EAAE;QACnC,EAAE,IAAI,EAAE,UAAU,EAAE,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE,eAAe,EAAE,KAAK,EAAE,EAAE,EAAE;KACzE,EAAE,UAAU,CAAC,CAAC,CAAC;IAChB,QAAQ,CAAC,YAAY,CAAC,kBAAkB,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC,CAAC,CAAC,CAAC;IAEhF,IAAI,SAAS,GAA2B,IAAI,CAAC;IAC7C,MAAM,OAAO,GAAa,CAAC,IAAI,gBAAgB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;IAC9D,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;QACvB,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QACxC,SAAS,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACzC,SAAS,GAAG,IAAI,eAAe,CAAC;YAC9B,MAAM,EAAE,CAAC;oBACP,IAAI,EAAE,OAAO;oBACb,IAAI,EAAE,QAAQ;oBACd,IAAI,EAAE,YAAY;oBAClB,KAAK,EAAE,OAAO;oBACd,GAAG,CAAC,IAAI,CAAC,oBAAoB,KAAK,SAAS;wBACzC,CAAC,CAAC,EAAE,WAAW,EAAE,IAAI,CAAC,oBAAoB,EAAE;wBAC5C,CAAC,CAAC,EAAE,CAAC;iBACR,CAAC;SACH,CAAC,CAAC;QACH,OAAO,CAAC,IAAI,CAAC,SAA8B,CAAC,CAAC;IAC/C,CAAC;IAED,MAAM,SAAS,GAAG,MAAM,cAAc,CAAC,MAAM,CAAC;QAC5C,SAAS;QACT,QAAQ,EAAE,QAAQ,CAAC,UAAU,EAAE;QAC/B,MAAM,EAAE,CAAC;gBACP,IAAI,EAAE,OAAO;gBACb,KAAK,EAAE,YAAY;gBACnB,YAAY,EAAE,gBAAgB;gBAC9B,YAAY,EAAE,KAAK;gBACnB,GAAG,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,IAAI,yBAAyB,EAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aACvF,CAAC;QACF,OAAO;QACP,cAAc,EAAE,CAAC;QACjB,GAAG,CAAC,IAAI,CAAC,wBAAwB,KAAK,SAAS;YAC7C,CAAC,CAAC,EAAE,wBAAwB,EAAE,IAAI,CAAC,wBAAwB,EAAE;YAC7D,CAAC,CAAC,EAAE,CAAC;KACR,CAAC,CAAC;IACH,SAAS,EAAE,SAAS,CAAC,SAAS,CAAC,QAAQ,EAAE,CAAC,CAAC;IAC3C,SAAS,CAAC,KAAK,EAAE,CAAC;IAClB,SAAS,CAAC,SAAS,CAAC;QAClB,IAAI,EAAE,kBAAkB;QACxB,MAAM,EAAE,MAAM;QACd,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC;QAC7C,QAAQ,EAAE,EAAE;QACZ,gBAAgB,EAAE,IAAI;KACI,CAAC,CAAC;IAC9B,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,SAAS,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC;AAChE,CAAC;AAED,uEAAuE;AACvE,KAAK,UAAU,uBAAuB,CACpC,SAAyB,EACzB,SAAS,GAAG,MAAM;IAElB,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC;IACxC,OAAO,IAAI,CAAC,GAAG,EAAE,GAAG,QAAQ,EAAE,CAAC;QAC7B,MAAM,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;QAC7C,MAAM,EAAE,GAAG,SAAS,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,iBAAiB,EAAE,CAAC;QAC5D,MAAM,IAAI,GAAG,CAAC,EAAE,EAAE,aAAa,CAAC,EAAE,CAAC,CAAC,QAAQ,IAAI,EAAE,CAEhD,CAAC;QACH,KAAK,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC;YACrB,KAAK,MAAM,CAAC,IAAI,CAAC,CAAC,OAAO,IAAI,EAAE,EAAE,CAAC;gBAChC,IAAI,CAAC,CAAC,IAAI,KAAK,aAAa,EAAE,CAAC;oBAC7B,OAAO,EAAE,OAAO,EAAE,CAAC,CAAC,OAAiB,EAAE,OAAO,EAAE,CAAC,CAAC,OAAO,KAAK,IAAI,EAAE,CAAC;gBACvE,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,+EAA+E;AAC/E,SAAS,aAAa,CAAC,SAAyB;IAC9C,MAAM,UAAU,GAAI,SAElB,CAAC,8BAA8B,EAAE,CAAC;IACpC,OAAO,UAAU,CAAC,GAAG,CAAC,YAAY,CAAE,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;AACpD,CAAC;AAED,SAAS,kBAAkB,CAAC,SAAyB;IAInD,MAAM,UAAU,GAAI,SAElB,CAAC,8BAA8B,EAAE,CAAC;IACpC,OAAO,UAAU,CAAC,GAAG,CAAC,YAAY,CAA0C,CAAC;AAC/E,CAAC;AAED,QAAQ,CAAC,0CAA0C,EAAE,GAAG,EAAE;IACxD,EAAE,CAAC,qEAAqE,EAAE,KAAK,IAAI,EAAE;QACnF,wEAAwE;QACxE,2EAA2E;QAC3E,MAAM,CAAC,GAAG,MAAM,cAAc,CAAC;YAC7B,MAAM,EAAE,gBAAgB;YACxB,MAAM,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE;YAC7D,aAAa,EAAE,IAAI;SACpB,CAAC,CAAC;QACH,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,uBAAuB,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;YAC1D,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,8BAA8B,CAAC,CAAC;YAClD,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,GAAG,KAAK,EAAE,8CAA8C,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;YAChH,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,EAAE,+EAA+E,CAAC,CAAC;YAC9G,MAAM,IAAI,GAAG,aAAa,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;YACxC,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,4BAA4B,EAAE,IAAI,CAAC,CAAC;YAC5D,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,sCAAsC,EAAE,IAAI,CAAC,CAAC;YACtE,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,mCAAmC,EAAE,SAAS,CAAC,CAAC;YACxE,mDAAmD;YACnD,MAAM,QAAQ,GAAG,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,gDAAgD,CAAC,CAAC;YACxF,MAAM,CAAC,EAAE,CAAC,QAAQ,EAAE,sCAAsC,CAAC,CAAC;YAC5D,MAAM,IAAI,GAAG,MAAM,CAAC,CAAC,SAAU,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;YACxD,MAAM,CAAC,EAAE,CAAC,MAAM,IAAI,IAAI,EAAE,kCAAkC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACpF,MAAM,CAAC,EAAE,CAAE,IAAyB,CAAC,IAAI,CAAC,UAAU,IAAI,MAAM,EAAE,sBAAsB,CAAC,CAAC;QAC1F,CAAC;gBAAS,CAAC;YACT,MAAM,CAAC,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC;YACzB,MAAM,CAAC,CAAC,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QACtD,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,gFAAgF,EAAE,KAAK,IAAI,EAAE;QAC9F,MAAM,CAAC,GAAG,MAAM,cAAc,CAAC;YAC7B,MAAM,EAAE,eAAe;YACvB,MAAM,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE;YAC7D,aAAa,EAAE,IAAI;YACnB,wBAAwB,EAAE,MAAM;SACjC,CAAC,CAAC;QACH,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,uBAAuB,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;YAC1D,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,8BAA8B,CAAC,CAAC;YAClD,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,EAAE,4BAA4B,CAAC,CAAC;YAC3D,MAAM,IAAI,GAAG,aAAa,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;YACxC,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,sCAAsC,EAAE,MAAM,CAAC,CAAC;YACxE,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,mCAAmC,EAAE,kBAAkB,CAAC,CAAC;QACnF,CAAC;gBAAS,CAAC;YACT,MAAM,CAAC,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC;YACzB,MAAM,CAAC,CAAC,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QACtD,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,+DAA+D,EAAE,KAAK,IAAI,EAAE;QAC7E,MAAM,CAAC,GAAG,MAAM,cAAc,CAAC;YAC7B,MAAM,EAAE,iBAAiB;YACzB,MAAM,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;YAChD,aAAa,EAAE,IAAI;YACnB,wBAAwB,EAAE,MAAM;SACjC,CAAC,CAAC;QACH,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,kBAAkB,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;YAC5C,GAAG,CAAC,MAAM,CAAC,OAAO,EAAE,EAAE,4BAA4B,EAAE,MAAM,EAAE,CAAC,CAAC;YAC9D,IAAI,IAAI,GAAG,aAAa,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;YACtC,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,4BAA4B,EAAE,MAAM,CAAC,CAAC;YAC9D,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,sCAAsC,EAAE,MAAM,CAAC,CAAC;YACxE,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,mCAAmC,EAAE,yBAAyB,CAAC,CAAC;YACxF,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YACnB,IAAI,GAAG,aAAa,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;YAClC,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,4BAA4B,EAAE,IAAI,CAAC,CAAC;YAC5D,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,sCAAsC,EAAE,MAAM,CAAC,CAAC;YACxE,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,mCAAmC,EAAE,kBAAkB,CAAC,CAAC;QACnF,CAAC;gBAAS,CAAC;YACT,MAAM,CAAC,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC;YACzB,MAAM,CAAC,CAAC,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QACtD,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,sEAAsE,EAAE,KAAK,IAAI,EAAE;QACpF,MAAM,CAAC,GAAG,MAAM,cAAc,CAAC;YAC7B,MAAM,EAAE,cAAc;YACtB,MAAM,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE;YACpE,aAAa,EAAE,IAAI;SACpB,CAAC,CAAC;QACH,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,uBAAuB,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;YAC1D,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,oCAAoC,CAAC,CAAC;YACxD,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;YACzC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,GAAG,KAAK,EAAE,yCAAyC,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;YAC3G,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,EAAE,oDAAoD,CAAC,CAAC;YACnF,0CAA0C;YAC1C,MAAM,IAAI,GAAG,CAAC,CAAC,QAAQ,CAAC,UAAU,EAAE,mBAAmB,CAAC,CAAC,CACG,CAAC;YAC7D,MAAM,CAAC,EAAE,CAAC,IAAI,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,+BAA+B,CAAC,CAAC;YACtE,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;YAC1C,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,8CAA8C,CAAC,CAAC;QACtG,CAAC;gBAAS,CAAC;YACT,MAAM,CAAC,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC;YACzB,MAAM,CAAC,CAAC,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QACtD,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,kEAAkE,EAAE,KAAK,IAAI,EAAE;QAChF,MAAM,CAAC,GAAG,MAAM,cAAc,CAAC;YAC7B,MAAM,EAAE,iBAAiB;YACzB,MAAM,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE;YAC7D,aAAa,EAAE,IAAI;SACpB,CAAC,CAAC;QACH,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,uBAAuB,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;YAC1D,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,8BAA8B,CAAC,CAAC;YAClD,MAAM,IAAI,GAAG,CAAC,CAAC,QAAQ,CAAC,UAAU,EAAE,mBAAmB,CAAC,CAAC,CAChB,CAAC;YAC1C,MAAM,CAAC,EAAE,CAAC,IAAI,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,+BAA+B,CAAC,CAAC;YACtE,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,8CAA8C,CAAC,CAAC;QACtG,CAAC;gBAAS,CAAC;YACT,MAAM,CAAC,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC;YACzB,MAAM,CAAC,CAAC,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QACtD,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,oEAAoE,EAAE,KAAK,IAAI,EAAE;QAClF,MAAM,CAAC,GAAG,MAAM,cAAc,CAAC;YAC7B,MAAM,EAAE,aAAa;YACrB,MAAM,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE;YAC7D,aAAa,EAAE,KAAK;SACrB,CAAC,CAAC;QACH,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,uBAAuB,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;YAC1D,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,8BAA8B,CAAC,CAAC;YAClD,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,GAAG,KAAK,EAAE,4BAA4B,CAAC,CAAC;YACvE,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,EAAE,kDAAkD,CAAC,CAAC;YACjF,MAAM,CAAC,YAAY,CAAC,MAAM,CAAC,OAAO,EAAE,gBAAgB,CAAC,CAAC;QACxD,CAAC;gBAAS,CAAC;YACT,MAAM,CAAC,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC;YACzB,MAAM,CAAC,CAAC,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QACtD,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,sFAAsF,EAAE,KAAK,IAAI,EAAE;QACpG,uBAAuB;QACvB,MAAM,GAAG,GACP,kGAAkG,CAAC;QACrG,MAAM,CAAC,GAAG,MAAM,cAAc,CAAC;YAC7B,MAAM,EAAE,cAAc;YACtB,MAAM,EAAE;gBACN,OAAO,EAAE,IAAI;gBACb,IAAI,EAAE;oBACJ,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE;oBAC1C,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,QAAQ,EAAE,WAAW,EAAE;iBACpD;aACF;YACD,aAAa,EAAE,IAAI;SACpB,CAAC,CAAC;QACH,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,uBAAuB,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;YAC1D,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,8BAA8B,CAAC,CAAC;YAClD,kEAAkE;YAClE,oEAAoE;YACpE,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,EAAE,8BAA8B,CAAC,CAAC;YAC7D,MAAM,CAAC,YAAY,CAAC,MAAM,CAAC,OAAO,EAAE,IAAI,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;YAClE,MAAM,QAAQ,GAAG,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,gDAAgD,CAAC,CAAC;YACxF,MAAM,CAAC,EAAE,CAAC,QAAQ,EAAE,sCAAsC,CAAC,CAAC;YAC5D,MAAM,IAAI,GAAG,MAAM,CAAC,CAAC,SAAU,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;YACxD,MAAM,CAAC,EAAE,CAAC,MAAM,IAAI,IAAI,EAAE,+BAA+B,CAAC,CAAC;YAC3D,MAAM,IAAI,GAAI,IAAyB,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;YAC9D,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,qBAAqB,EAAE,oDAAoD,CAAC,CAAC;YAChG,qEAAqE;YACrE,kCAAkC;YAClC,MAAM,IAAI,GAAG,CAAC,CAAC,QAAQ,CAAC,UAAU,EAAE,mBAAmB,CAAC,CAAC,CAChB,CAAC;YAC1C,MAAM,CAAC,EAAE,CAAC,IAAI,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,+BAA+B,CAAC,CAAC;YACtE,MAAM,MAAM,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,OAEtB,CAAC;YACF,MAAM,CAAC,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,sCAAsC,CAAC,CAAC;YACzE,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,OAAO,CAAC,CAAC;YACrD,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,0BAA0B,CAAC,CAAC;YAC7C,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,4BAA4B,CAAC,CAAC;YAC1E,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC;YACnD,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,qBAAqB,CAAC,CAAC;YAC7C,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,KAAK,EAAE,2BAA2B,CAAC,CAAC;YACjE,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,8DAA8D,CAAC,CAAC;QAC1F,CAAC;gBAAS,CAAC;YACT,MAAM,CAAC,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC;YACzB,MAAM,CAAC,CAAC,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QACtD,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,gFAAgF,EAAE,KAAK,IAAI,EAAE;QAC9F,sEAAsE;QACtE,qEAAqE;QACrE,sEAAsE;QACtE,MAAM,CAAC,GAAG,MAAM,cAAc,CAAC;YAC7B,MAAM,EAAE,cAAc;YACtB,MAAM,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE;YAC7D,aAAa,EAAE,IAAI;YACnB,oBAAoB,EAAE,MAAM;SAC7B,CAAC,CAAC;QACH,MAAM,MAAM,GAAmC,EAAE,CAAC;QAClD,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE;YACxB,IAAK,CAAsB,CAAC,IAAI,KAAK,mBAAmB,EAAE,CAAC;gBACzD,MAAM,CAAC,IAAI,CAAC,CAAuC,CAAC,CAAC;YACvD,CAAC;QACH,CAAC,CAAC,CAAC;QACH,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,uBAAuB,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;YAC1D,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,8BAA8B,CAAC,CAAC;YAClD,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,EAAE,iEAAiE,CAAC,CAAC;YAChG,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,EAAE,uCAAuC,CAAC,CAAC;YACtE,MAAM,CAAC,YAAY,CAAC,MAAM,CAAC,OAAO,EAAE,uBAAuB,CAAC,CAAC;YAC7D,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,8CAA8C,CAAC,CAAC;YACrF,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,aAAa,EAAE,MAAM,CAAC,CAAC;YACpD,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,uBAAuB,CAAC,CAAC;YAC9D,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,uCAAuC,CAAC,CAAC;QACzF,CAAC;gBAAS,CAAC;YACT,MAAM,CAAC,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC;YACzB,MAAM,CAAC,CAAC,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QACtD,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,8DAA8D,EAAE,KAAK,IAAI,EAAE;QAC5E,0EAA0E;QAC1E,qEAAqE;QACrE,MAAM,CAAC,GAAG,MAAM,cAAc,CAAC;YAC7B,MAAM,EAAE,cAAc;YACtB,MAAM,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE;YAC7D,aAAa,EAAE,IAAI;YACnB,cAAc,EAAE,IAAI;SACrB,CAAC,CAAC;QACH,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,uBAAuB,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;YAC1D,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,8BAA8B,CAAC,CAAC;YAClD,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,EAAE,2BAA2B,CAAC,CAAC;YAC1D,MAAM,IAAI,GAAG,aAAa,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;YACxC,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,sCAAsC,EAAE,IAAI,CAAC,CAAC;YACtE,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,mCAAmC,EAAE,SAAS,CAAC,CAAC;YACxE,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,uCAAuC,EAAE,gBAAgB,CAAC,CAAC;QACrF,CAAC;gBAAS,CAAC;YACT,MAAM,CAAC,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC;YACzB,MAAM,CAAC,CAAC,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QACtD,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,2FAA2F,EAAE,KAAK,IAAI,EAAE;QACzG,uEAAuE;QACvE,iEAAiE;QACjE,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,GAAG,aAAa,CAAC,gBAAgB,CAAC,CAAC;QAC/D,MAAM,IAAI,GAAG,GAAG,EAAE,CAAC,cAAc,CAAC;YAChC,MAAM,EAAE,SAAS;YACjB,MAAM,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;YAChD,aAAa,EAAE,IAAI;YACnB,wBAAwB,EAAE,KAAK;YAC/B,OAAO;YACP,SAAS;SACV,CAAC,CAAC;QAEH,MAAM,KAAK,GAAG,MAAM,IAAI,EAAE,CAAC;QAC3B,IAAI,CAAC;YACH,kBAAkB,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,OAAO,EAAE,EAAE,4BAA4B,EAAE,MAAM,EAAE,CAAC,CAAC;YAC9F,MAAM,CAAC,WAAW,CAAC,aAAa,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,sCAAsC,EAAE,MAAM,CAAC,CAAC;QACpG,CAAC;gBAAS,CAAC;YACT,MAAM,KAAK,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC;QAC/B,CAAC;QAED,MAAM,MAAM,GAAG,MAAM,IAAI,EAAE,CAAC;QAC5B,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,aAAa,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;YAC7C,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,4BAA4B,EAAE,MAAM,EAAE,qCAAqC,CAAC,CAAC;YACrG,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,sCAAsC,EAAE,MAAM,CAAC,CAAC;YACxE,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,mCAAmC,EAAE,yBAAyB,CAAC,CAAC;YACxF,kBAAkB,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YACpD,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;YACnD,MAAM,CAAC,WAAW,CAAC,UAAU,CAAC,sCAAsC,EAAE,KAAK,EAAE,uCAAuC,CAAC,CAAC;YACtH,MAAM,CAAC,WAAW,CAAC,UAAU,CAAC,mCAAmC,EAAE,kBAAkB,CAAC,CAAC;QACzF,CAAC;gBAAS,CAAC;YACT,MAAM,MAAM,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC;QAChC,CAAC;QAED,MAAM,KAAK,GAAG,MAAM,IAAI,EAAE,CAAC;QAC3B,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,aAAa,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;YAC5C,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,4BAA4B,EAAE,IAAI,EAAE,iCAAiC,CAAC,CAAC;YAC/F,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,sCAAsC,EAAE,KAAK,CAAC,CAAC;YACvE,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,mCAAmC,EAAE,kBAAkB,CAAC,CAAC;QACnF,CAAC;gBAAS,CAAC;YACT,MAAM,KAAK,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC;YAC7B,MAAM,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QACpD,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,wFAAwF,EAAE,KAAK,IAAI,EAAE;QACtG,sEAAsE;QACtE,yEAAyE;QACzE,kDAAkD;QAClD,MAAM,CAAC,GAAG,MAAM,cAAc,CAAC;YAC7B,MAAM,EAAE,gBAAgB;YACxB,MAAM,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE;YAC7D,aAAa,EAAE,IAAI;YACnB,cAAc,EAAE,IAAI,EAAE,sBAAsB;SAC7C,CAAC,CAAC;QACH,IAAI,CAAC;YACH,kBAAkB,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,OAAO,EAAE,EAAE,4BAA4B,EAAE,MAAM,EAAE,CAAC,CAAC;YAC1F,MAAM,IAAI,GAAG,aAAa,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;YACxC,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,4BAA4B,EAAE,MAAM,EAAE,4BAA4B,CAAC,CAAC;YAC5F,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,sCAAsC,EAAE,KAAK,EAAE,2BAA2B,CAAC,CAAC;YACpG,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,mCAAmC,EAAE,yBAAyB,CAAC,CAAC;YACxF,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,uCAAuC,EAAE,gBAAgB,CAAC,CAAC;YACnF,wDAAwD;YACxD,MAAM,MAAM,GAAG,MAAM,uBAAuB,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;YAC1D,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,8BAA8B,CAAC,CAAC;YAClD,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,EAAE,2BAA2B,CAAC,CAAC;QAC5D,CAAC;gBAAS,CAAC;YACT,MAAM,CAAC,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC;YACzB,MAAM,CAAC,CAAC,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QACtD,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,+CAA+C,EAAE,KAAK,IAAI,EAAE;QAC7D,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,GAAG,aAAa,CAAC,gBAAgB,CAAC,CAAC;QAC/D,MAAM,QAAQ,GAAG,IAAI,YAAY,EAAE,CAAC;QACpC,IAAI,CAAC;YACH,MAAM,MAAM,CAAC,OAAO,CAClB,cAAc,CAAC,MAAM,CAAC;gBACpB,SAAS;gBACT,QAAQ,EAAE,QAAQ,CAAC,UAAU,EAAE;gBAC/B,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,YAAY,EAAE,YAAY,EAAE,GAAG,EAAE,YAAY,EAAE,KAAK,EAAE,CAAC;gBACxF,OAAO,EAAE,EAAE;gBACX,cAAc,EAAE,CAAC;gBACjB,wBAAwB,EAAE,GAAG;aAC9B,CAAC,EACF,mDAAmD,CACpD,CAAC;QACJ,CAAC;gBAAS,CAAC;YACT,MAAM,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QACpD,CAAC;IACH,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -158,6 +158,51 @@ describe('Trunk channel routing (item-3 redux)', () => {
158
158
  assert.match(text, /channel_decline/);
159
159
  assert.match(text, /optionally set acknowledge/);
160
160
  assert.match(text, /Doing nothing is also fine\./);
161
+ // 2026-08-05 accuracy pass: the delivery model must be stated correctly —
162
+ // direct addresses still arrive; un-@'d follow-ups to a reply do not.
163
+ assert.match(text, /address you directly/);
164
+ assert.match(text, /follow-ups to your reply will NOT reach you/);
165
+ // No surface-tracked tally on this event → no missed-count sentence.
166
+ assert.doesNotMatch(text, /passed there without you/);
167
+ await framework.stop();
168
+ });
169
+ it('surfaces the missed-ambient tally in the closed-channel invitation', async () => {
170
+ const framework = await makeFramework();
171
+ const i = internals(framework);
172
+ i.channelRegistry = {
173
+ ensureChannelRegistered: () => { },
174
+ isChannelOpen: () => false,
175
+ getDescriptor: () => ({ capabilities: { history: { maxMessages: 80 } } }),
176
+ stopAll: () => { },
177
+ };
178
+ i.handleMcplPushEvent({
179
+ type: 'mcpl:push-event',
180
+ serverId: 'discord',
181
+ featureSet: 'discord.messaging',
182
+ eventId: 'discord_msg_m2',
183
+ content: [{ type: 'text', text: 'Antra: still there?' }],
184
+ origin: {
185
+ source: 'discord',
186
+ messageId: 'm2',
187
+ mcplChannelId: 'discord:G1:C7',
188
+ channelName: 'portables',
189
+ // discord-mcpl attaches the missed-ambient tally for closed, tracked
190
+ // channels so the agent sees the cost of staying out at decision time.
191
+ missedMessages: 3,
192
+ missedCharacters: 2729,
193
+ },
194
+ tags: ['chat:mention', 'chat:addressed'],
195
+ timestamp: new Date().toISOString(),
196
+ inferenceId: 'i2',
197
+ triggerInference: false,
198
+ });
199
+ const messages = framework.getAgent('scout').getContextManager().queryMessages({}).messages;
200
+ const text = messages.at(-1)?.content
201
+ .filter((block) => block.type === 'text')
202
+ .map((block) => block.text)
203
+ .join('\n') ?? '';
204
+ assert.match(text, /Channel invitation/);
205
+ assert.match(text, /While closed, 3 messages \(~2729 chars\) have passed there without you\./);
161
206
  await framework.stop();
162
207
  });
163
208
  it('a channel-incoming trunk turn records its triggering channel', async () => {
@@ -1 +1 @@
1
- {"version":3,"file":"trunk-channel-routing.test.js","sourceRoot":"","sources":["../../test/trunk-channel-routing.test.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAChE,OAAO,MAAM,MAAM,oBAAoB,CAAC;AACxC,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACjC,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAC9C,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAEjD,OAAO,EAAE,YAAY,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAE9E,oFAAoF;AACpF,SAAS,SAAS,CAAC,SAAyB;IAC1C,OAAO,SAQN,CAAC;AACJ,CAAC;AAED,SAAS,eAAe,CAAC,SAAiB,EAAE,IAAY;IACtD,OAAO;QACL,IAAI,EAAE,uBAAuB;QAC7B,QAAQ,EAAE,SAAS;QACnB,SAAS;QACT,SAAS,EAAE,KAAK,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE;QACrD,MAAM,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE;QACnC,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;QACjC,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;QACnC,QAAQ,EAAE,EAAE;QACZ,gBAAgB,EAAE,IAAI;KACI,CAAC;AAC/B,CAAC;AAED;8EAC8E;AAC9E,SAAS,WAAW,CAAC,YAAoB,EAAE,IAAY;IACrD,OAAO;QACL,IAAI,EAAE,iBAAiB;QACvB,QAAQ,EAAE,SAAS;QACnB,UAAU,EAAE,mBAAmB;QAC/B,OAAO,EAAE,eAAe,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE;QAC7D,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;QACjC,MAAM,EAAE;YACN,MAAM,EAAE,SAAS;YACjB,SAAS,EAAE,YAAY;YACvB,OAAO,EAAE,IAAI;YACb,WAAW,EAAE,SAAS;YACtB,IAAI,EAAE,IAAI;SACX;QACD,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;QACnC,WAAW,EAAE,OAAO,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE;QACzD,gBAAgB,EAAE,IAAI;KACI,CAAC;AAC/B,CAAC;AAED,QAAQ,CAAC,sCAAsC,EAAE,GAAG,EAAE;IACpD,IAAI,OAAe,CAAC;IACpB,IAAI,QAAsB,CAAC;IAE3B,UAAU,CAAC,GAAG,EAAE;QACd,OAAO,GAAG,WAAW,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,qBAAqB,CAAC,CAAC,CAAC;QAC7D,QAAQ,GAAG,IAAI,YAAY,EAAE,CAAC;IAChC,CAAC,CAAC,CAAC;IAEH,SAAS,CAAC,GAAG,EAAE;QACb,MAAM,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;IACpD,CAAC,CAAC,CAAC;IAEH,KAAK,UAAU,aAAa;QAC1B,oEAAoE;QACpE,OAAO,cAAc,CAAC,MAAM,CAAC;YAC3B,SAAS,EAAE,IAAI,CAAC,OAAO,EAAE,gBAAgB,CAAC;YAC1C,QAAQ,EAAE,QAAQ,CAAC,UAAU,EAAE;YAC/B,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,YAAY,EAAE,YAAY,EAAE,gBAAgB,EAAE,CAAC;YAChF,OAAO,EAAE,EAAE;SACZ,CAAC,CAAC;IACL,CAAC;IAED,EAAE,CAAC,iEAAiE,EAAE,KAAK,IAAI,EAAE;QAC/E,MAAM,SAAS,GAAG,MAAM,aAAa,EAAE,CAAC;QACxC,MAAM,GAAG,GAAG,SAAS,CAAC,SAAS,CAAC,CAAC,sBAAsB,CAAC;YACtD,MAAM,EAAE,SAAS;YACjB,aAAa,EAAE,gBAAgB;YAC/B,WAAW,EAAE,eAAe;YAC5B,SAAS,EAAE,KAAK;SACjB,CAAC,CAAC;QACH,MAAM,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,gBAAgB,EAAE,KAAK,EAAE,eAAe,EAAE,CAAC,CAAC;QAC/E,MAAM,SAAS,CAAC,IAAI,EAAE,CAAC;IACzB,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,iFAAiF,EAAE,KAAK,IAAI,EAAE;QAC/F,MAAM,SAAS,GAAG,MAAM,aAAa,EAAE,CAAC;QACxC,MAAM,GAAG,GAAG,SAAS,CAAC,SAAS,CAAC,CAAC,sBAAsB,CAAC;YACtD,MAAM,EAAE,SAAS;YACjB,SAAS,EAAE,IAAI;YACf,OAAO,EAAE,IAAI;YACb,IAAI,EAAE,IAAI;SACX,CAAC,CAAC;QACH,MAAM,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,eAAe,EAAE,CAAC,CAAC;QACtD,MAAM,SAAS,CAAC,IAAI,EAAE,CAAC;IACzB,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,wEAAwE,EAAE,KAAK,IAAI,EAAE;QACtF,MAAM,SAAS,GAAG,MAAM,aAAa,EAAE,CAAC;QACxC,MAAM,GAAG,GAAG,SAAS,CAAC,SAAS,CAAC,CAAC,sBAAsB,CAAC;YACtD,MAAM,EAAE,SAAS;YACjB,SAAS,EAAE,IAAI;YACf,OAAO,EAAE,IAAI;SACd,CAAC,CAAC;QACH,MAAM,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,eAAe,EAAE,CAAC,CAAC;QACtD,MAAM,SAAS,CAAC,IAAI,EAAE,CAAC;IACzB,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,8EAA8E,EAAE,KAAK,IAAI,EAAE;QAC5F,MAAM,SAAS,GAAG,MAAM,aAAa,EAAE,CAAC;QACxC,MAAM,CAAC,GAAG,SAAS,CAAC,SAAS,CAAC,CAAC;QAC/B,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,sBAAsB,CAAC,SAAS,CAAC,EAAE,SAAS,CAAC,CAAC;QAC7D,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,sBAAsB,CAAC,EAAE,MAAM,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,EAAE,SAAS,CAAC,CAAC;QACzF,MAAM,SAAS,CAAC,IAAI,EAAE,CAAC;IACzB,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,kEAAkE,EAAE,KAAK,IAAI,EAAE;QAChF,MAAM,SAAS,GAAG,MAAM,aAAa,EAAE,CAAC;QACxC,MAAM,CAAC,GAAG,SAAS,CAAC,SAAS,CAAC,CAAC;QAC/B,CAAC,CAAC,eAAe,GAAG;YAClB,uBAAuB,EAAE,GAAG,EAAE,GAAE,CAAC;YACjC,aAAa,EAAE,GAAG,EAAE,CAAC,KAAK;YAC1B,aAAa,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,YAAY,EAAE,EAAE,OAAO,EAAE,EAAE,WAAW,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC;YACzE,OAAO,EAAE,GAAG,EAAE,GAAE,CAAC;SAClB,CAAC;QAEF,CAAC,CAAC,mBAAmB,CAAC;YACpB,IAAI,EAAE,iBAAiB;YACvB,QAAQ,EAAE,SAAS;YACnB,UAAU,EAAE,mBAAmB;YAC/B,OAAO,EAAE,gBAAgB;YACzB,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,8BAA8B,EAAE,CAAC;YACjE,MAAM,EAAE;gBACN,MAAM,EAAE,SAAS;gBACjB,SAAS,EAAE,IAAI;gBACf,aAAa,EAAE,eAAe;gBAC9B,WAAW,EAAE,WAAW;aACzB;YACD,IAAI,EAAE,CAAC,cAAc,EAAE,gBAAgB,CAAC;YACxC,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;YACnC,WAAW,EAAE,IAAI;YACjB,gBAAgB,EAAE,KAAK;SACxB,CAAC,CAAC;QAEH,MAAM,QAAQ,GAAG,SAAS,CAAC,QAAQ,CAAC,OAAO,CAAE,CAAC,iBAAiB,EAAE,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC;QAC7F,MAAM,IAAI,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,OAAO;aAClC,MAAM,CAAC,CAAC,KAAK,EAA2C,EAAE,CAAC,KAAK,CAAC,IAAI,KAAK,MAAM,CAAC;aACjF,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC;aAC1B,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;QACpB,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,oBAAoB,CAAC,CAAC;QACzC,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,cAAc,CAAC,CAAC;QACnC,wEAAwE;QACxE,oEAAoE;QACpE,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC;QACjC,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,kCAAkC,CAAC,CAAC;QACvD,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,iBAAiB,CAAC,CAAC;QACtC,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,4BAA4B,CAAC,CAAC;QACjD,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,8BAA8B,CAAC,CAAC;QACnD,MAAM,SAAS,CAAC,IAAI,EAAE,CAAC;IACzB,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,8DAA8D,EAAE,KAAK,IAAI,EAAE;QAC5E,QAAQ,CAAC,YAAY,CAAC,kBAAkB,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,iBAAiB,EAAE,CAAC,CAAC,CAAC,CAAC;QACvF,MAAM,SAAS,GAAG,MAAM,aAAa,EAAE,CAAC;QAExC,SAAS,CAAC,SAAS,CAAC,eAAe,CAAC,qBAAqB,EAAE,kBAAkB,CAAC,CAAC,CAAC;QAChF,MAAM,SAAS,CAAC,YAAY,EAAE,CAAC;QAE/B,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,oCAAoC,CAAC,CAAC;QAC7E,MAAM,CAAC,KAAK,CACV,SAAS,CAAC,SAAS,CAAC,CAAC,qBAAqB,CAAC,GAAG,CAAC,OAAO,CAAC,EACvD,qBAAqB,EACrB,0DAA0D,CAC3D,CAAC;QACF,MAAM,SAAS,CAAC,IAAI,EAAE,CAAC;IACzB,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,sFAAsF,EAAE,KAAK,IAAI,EAAE;QACpG,QAAQ,CAAC,YAAY,CAAC,kBAAkB,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,cAAc,EAAE,CAAC,CAAC,CAAC,CAAC;QACpF,MAAM,SAAS,GAAG,MAAM,aAAa,EAAE,CAAC;QAExC,SAAS,CAAC,SAAS,CAAC,WAAW,CAAC,IAAI,EAAE,iBAAiB,CAAC,CAAC,CAAC;QAC1D,MAAM,SAAS,CAAC,YAAY,EAAE,CAAC;QAE/B,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,kCAAkC,CAAC,CAAC;QAC3E,MAAM,CAAC,KAAK,CACV,SAAS,CAAC,SAAS,CAAC,CAAC,qBAAqB,CAAC,GAAG,CAAC,OAAO,CAAC,EACvD,eAAe,EACf,iEAAiE,CAClE,CAAC;QACF,MAAM,SAAS,CAAC,IAAI,EAAE,CAAC;IACzB,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,mEAAmE,EAAE,KAAK,IAAI,EAAE;QACjF,MAAM,SAAS,GAAG,MAAM,aAAa,EAAE,CAAC;QACxC,MAAM,CAAC,GAAG,SAAS,CAAC,SAAS,CAAC,CAAC;QAE/B,8EAA8E;QAC9E,2EAA2E;QAC3E,QAAQ,CAAC,YAAY,CAAC,kBAAkB,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC;QAC7E,SAAS,CAAC,SAAS,CAAC,eAAe,CAAC,qBAAqB,EAAE,OAAO,CAAC,CAAC,CAAC;QACrE,MAAM,SAAS,CAAC,YAAY,EAAE,CAAC;QAC/B,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,qBAAqB,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,qBAAqB,CAAC,CAAC;QAE1E,6EAA6E;QAC7E,yEAAyE;QACzE,QAAQ,CAAC,YAAY,CAAC,kBAAkB,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,CAAC;QAC9E,SAAS,CAAC,SAAS,CAAC,WAAW,CAAC,IAAI,EAAE,aAAa,CAAC,CAAC,CAAC;QACtD,MAAM,SAAS,CAAC,YAAY,EAAE,CAAC;QAC/B,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,4BAA4B,CAAC,CAAC;QACrE,MAAM,CAAC,KAAK,CACV,CAAC,CAAC,qBAAqB,CAAC,GAAG,CAAC,OAAO,CAAC,EACpC,eAAe,EACf,4DAA4D,CAC7D,CAAC;QACF,MAAM,SAAS,CAAC,IAAI,EAAE,CAAC;IACzB,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,kFAAkF,EAAE,KAAK,IAAI,EAAE;QAChG,QAAQ,CAAC,YAAY,CAAC,kBAAkB,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC;QAC5E,MAAM,SAAS,GAAG,MAAM,aAAa,EAAE,CAAC;QACxC,MAAM,CAAC,GAAG,SAAS,CAAC,SAAS,CAAC,CAAC;QAE/B,4EAA4E;QAC5E,4EAA4E;QAC5E,0EAA0E;QAC1E,oCAAoC;QACpC,CAAC,CAAC,qBAAqB,CAAC,GAAG,CAAC,OAAO,EAAE,qBAAqB,CAAC,CAAC;QAC5D,MAAM,KAAK,GAAG,SAAS,CAAC,QAAQ,CAAC,OAAO,CAAE,CAAC;QAC3C,MAAO,SAEL,CAAC,gBAAgB,CAAC,KAAK,EAAE;YACzB,SAAS,EAAE,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;SAChF,CAAC,CAAC;QACH,MAAM,SAAS,CAAC,YAAY,EAAE,CAAC;QAE/B,MAAM,CAAC,KAAK,CACV,CAAC,CAAC,qBAAqB,CAAC,GAAG,CAAC,OAAO,CAAC,EACpC,KAAK,EACL,2DAA2D,CAC5D,CAAC;QACF,MAAM,SAAS,CAAC,IAAI,EAAE,CAAC;IACzB,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"trunk-channel-routing.test.js","sourceRoot":"","sources":["../../test/trunk-channel-routing.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=utils-surface.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils-surface.test.d.ts","sourceRoot":"","sources":["../../test/utils-surface.test.ts"],"names":[],"mappings":""}