openhorse 0.2.18 → 0.2.21

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 (337) hide show
  1. package/dist/agents/coordinator.d.ts.map +1 -1
  2. package/dist/agents/fork.d.ts.map +1 -1
  3. package/dist/agents/fork.js +0 -1
  4. package/dist/agents/fork.js.map +1 -1
  5. package/dist/agents/worker-pool.d.ts.map +1 -1
  6. package/dist/agents/worker-pool.js +3 -1
  7. package/dist/agents/worker-pool.js.map +1 -1
  8. package/dist/cli.js +3 -3
  9. package/dist/cli.js.map +1 -1
  10. package/dist/commands/index.d.ts.map +1 -1
  11. package/dist/commands/index.js +13 -28
  12. package/dist/commands/index.js.map +1 -1
  13. package/dist/core/checkpoint.d.ts.map +1 -1
  14. package/dist/core/checkpoint.js +3 -0
  15. package/dist/core/checkpoint.js.map +1 -1
  16. package/dist/framework/prompt.d.ts.map +1 -1
  17. package/dist/framework/prompt.js +16 -0
  18. package/dist/framework/prompt.js.map +1 -1
  19. package/dist/framework/query.d.ts.map +1 -1
  20. package/dist/framework/query.js +0 -7
  21. package/dist/framework/query.js.map +1 -1
  22. package/dist/harness/context-harness.d.ts.map +1 -1
  23. package/dist/harness/context-harness.js +6 -1
  24. package/dist/harness/context-harness.js.map +1 -1
  25. package/dist/harness/ledger.d.ts +1 -0
  26. package/dist/harness/ledger.d.ts.map +1 -1
  27. package/dist/harness/ledger.js +8 -0
  28. package/dist/harness/ledger.js.map +1 -1
  29. package/dist/harness/safety.d.ts +2 -0
  30. package/dist/harness/safety.d.ts.map +1 -1
  31. package/dist/harness/safety.js +27 -3
  32. package/dist/harness/safety.js.map +1 -1
  33. package/dist/init.d.ts +1 -1
  34. package/dist/init.d.ts.map +1 -1
  35. package/dist/init.js +1 -1
  36. package/dist/init.js.map +1 -1
  37. package/dist/ink-ui/components/Markdown.d.ts +1 -1
  38. package/dist/ink-ui/components/Markdown.d.ts.map +1 -1
  39. package/dist/ink-ui/components/Markdown.js +1 -1
  40. package/dist/ink-ui/components/Markdown.js.map +1 -1
  41. package/dist/ink-ui/runtime/grapheme.d.ts +9 -8
  42. package/dist/ink-ui/runtime/grapheme.d.ts.map +1 -1
  43. package/dist/ink-ui/runtime/grapheme.js +14 -60
  44. package/dist/ink-ui/runtime/grapheme.js.map +1 -1
  45. package/dist/ink-ui/runtime/input-buffer.d.ts +9 -31
  46. package/dist/ink-ui/runtime/input-buffer.d.ts.map +1 -1
  47. package/dist/ink-ui/runtime/input-buffer.js +15 -162
  48. package/dist/ink-ui/runtime/input-buffer.js.map +1 -1
  49. package/dist/ink-ui/runtime/native-cursor.js +0 -25
  50. package/dist/ink-ui/runtime/native-cursor.js.map +1 -1
  51. package/dist/ink-ui/runtime/prompt-layout.d.ts +9 -29
  52. package/dist/ink-ui/runtime/prompt-layout.d.ts.map +1 -1
  53. package/dist/ink-ui/runtime/prompt-layout.js +18 -166
  54. package/dist/ink-ui/runtime/prompt-layout.js.map +1 -1
  55. package/dist/ink-ui/runtime/transcript-state.d.ts.map +1 -1
  56. package/dist/ink-ui/runtime/transcript-state.js +2 -0
  57. package/dist/ink-ui/runtime/transcript-state.js.map +1 -1
  58. package/dist/ink-ui/screens/ReplScreen.d.ts.map +1 -1
  59. package/dist/ink-ui/screens/ReplScreen.js +11 -0
  60. package/dist/ink-ui/screens/ReplScreen.js.map +1 -1
  61. package/dist/memory/entrypoint.js +1 -1
  62. package/dist/memory/entrypoint.js.map +1 -1
  63. package/dist/memory/storage.js +1 -1
  64. package/dist/memory/storage.js.map +1 -1
  65. package/dist/memory/store.d.ts +1 -0
  66. package/dist/memory/store.d.ts.map +1 -1
  67. package/dist/memory/store.js +9 -0
  68. package/dist/memory/store.js.map +1 -1
  69. package/dist/runtime/agent-runtime-controller.d.ts.map +1 -1
  70. package/dist/runtime/agent-runtime-controller.js +15 -0
  71. package/dist/runtime/agent-runtime-controller.js.map +1 -1
  72. package/dist/runtime/agent-runtime-protocol.d.ts +4 -1
  73. package/dist/runtime/agent-runtime-protocol.d.ts.map +1 -1
  74. package/dist/runtime/agent-runtime-protocol.js +6 -0
  75. package/dist/runtime/agent-runtime-protocol.js.map +1 -1
  76. package/dist/runtime/chat-controller.d.ts +27 -0
  77. package/dist/runtime/chat-controller.d.ts.map +1 -1
  78. package/dist/runtime/chat-controller.js +148 -5
  79. package/dist/runtime/chat-controller.js.map +1 -1
  80. package/dist/runtime/composer/buffer.d.ts +43 -0
  81. package/dist/runtime/composer/buffer.d.ts.map +1 -0
  82. package/dist/runtime/composer/buffer.js +176 -0
  83. package/dist/runtime/composer/buffer.js.map +1 -0
  84. package/dist/runtime/composer/grapheme.d.ts +19 -0
  85. package/dist/runtime/composer/grapheme.d.ts.map +1 -0
  86. package/dist/runtime/composer/grapheme.js +73 -0
  87. package/dist/runtime/composer/grapheme.js.map +1 -0
  88. package/dist/runtime/composer/history.d.ts +39 -0
  89. package/dist/runtime/composer/history.d.ts.map +1 -0
  90. package/dist/runtime/composer/history.js +91 -0
  91. package/dist/runtime/composer/history.js.map +1 -0
  92. package/dist/runtime/composer/layout.d.ts +40 -0
  93. package/dist/runtime/composer/layout.d.ts.map +1 -0
  94. package/dist/runtime/composer/layout.js +174 -0
  95. package/dist/runtime/composer/layout.js.map +1 -0
  96. package/dist/runtime/rich-text/ansi-parser.d.ts +31 -0
  97. package/dist/runtime/rich-text/ansi-parser.d.ts.map +1 -0
  98. package/dist/runtime/rich-text/ansi-parser.js +272 -0
  99. package/dist/runtime/rich-text/ansi-parser.js.map +1 -0
  100. package/dist/runtime/rich-text/layout.d.ts +21 -0
  101. package/dist/runtime/rich-text/layout.d.ts.map +1 -0
  102. package/dist/runtime/rich-text/layout.js +327 -0
  103. package/dist/runtime/rich-text/layout.js.map +1 -0
  104. package/dist/runtime/rich-text/markdown-parser.d.ts +17 -0
  105. package/dist/runtime/rich-text/markdown-parser.d.ts.map +1 -0
  106. package/dist/runtime/rich-text/markdown-parser.js +211 -0
  107. package/dist/runtime/rich-text/markdown-parser.js.map +1 -0
  108. package/dist/runtime/rich-text/sanitizer.d.ts +18 -0
  109. package/dist/runtime/rich-text/sanitizer.d.ts.map +1 -0
  110. package/dist/runtime/rich-text/sanitizer.js +32 -0
  111. package/dist/runtime/rich-text/sanitizer.js.map +1 -0
  112. package/dist/runtime/rich-text/types.d.ts +59 -0
  113. package/dist/runtime/rich-text/types.d.ts.map +1 -0
  114. package/dist/runtime/rich-text/types.js +17 -0
  115. package/dist/runtime/rich-text/types.js.map +1 -0
  116. package/dist/runtime/subagents/budget.d.ts +118 -0
  117. package/dist/runtime/subagents/budget.d.ts.map +1 -0
  118. package/dist/runtime/subagents/budget.js +173 -0
  119. package/dist/runtime/subagents/budget.js.map +1 -0
  120. package/dist/runtime/subagents/child-executor-guard.d.ts +60 -0
  121. package/dist/runtime/subagents/child-executor-guard.d.ts.map +1 -0
  122. package/dist/runtime/subagents/child-executor-guard.js +219 -0
  123. package/dist/runtime/subagents/child-executor-guard.js.map +1 -0
  124. package/dist/runtime/subagents/context-builder.d.ts +34 -0
  125. package/dist/runtime/subagents/context-builder.d.ts.map +1 -0
  126. package/dist/runtime/subagents/context-builder.js +99 -0
  127. package/dist/runtime/subagents/context-builder.js.map +1 -0
  128. package/dist/runtime/subagents/index.d.ts +21 -0
  129. package/dist/runtime/subagents/index.d.ts.map +1 -0
  130. package/dist/runtime/subagents/index.js +62 -0
  131. package/dist/runtime/subagents/index.js.map +1 -0
  132. package/dist/runtime/subagents/policy.d.ts +68 -0
  133. package/dist/runtime/subagents/policy.d.ts.map +1 -0
  134. package/dist/runtime/subagents/policy.js +230 -0
  135. package/dist/runtime/subagents/policy.js.map +1 -0
  136. package/dist/runtime/subagents/presets.d.ts +44 -0
  137. package/dist/runtime/subagents/presets.d.ts.map +1 -0
  138. package/dist/runtime/subagents/presets.js +148 -0
  139. package/dist/runtime/subagents/presets.js.map +1 -0
  140. package/dist/runtime/subagents/production.d.ts +44 -0
  141. package/dist/runtime/subagents/production.d.ts.map +1 -0
  142. package/dist/runtime/subagents/production.js +118 -0
  143. package/dist/runtime/subagents/production.js.map +1 -0
  144. package/dist/runtime/subagents/provider-gate.d.ts +99 -0
  145. package/dist/runtime/subagents/provider-gate.d.ts.map +1 -0
  146. package/dist/runtime/subagents/provider-gate.js +186 -0
  147. package/dist/runtime/subagents/provider-gate.js.map +1 -0
  148. package/dist/runtime/subagents/result-parser.d.ts +40 -0
  149. package/dist/runtime/subagents/result-parser.d.ts.map +1 -0
  150. package/dist/runtime/subagents/result-parser.js +226 -0
  151. package/dist/runtime/subagents/result-parser.js.map +1 -0
  152. package/dist/runtime/subagents/runner.d.ts +53 -0
  153. package/dist/runtime/subagents/runner.d.ts.map +1 -0
  154. package/dist/runtime/subagents/runner.js +172 -0
  155. package/dist/runtime/subagents/runner.js.map +1 -0
  156. package/dist/runtime/subagents/runtime-integration.d.ts +73 -0
  157. package/dist/runtime/subagents/runtime-integration.d.ts.map +1 -0
  158. package/dist/runtime/subagents/runtime-integration.js +148 -0
  159. package/dist/runtime/subagents/runtime-integration.js.map +1 -0
  160. package/dist/runtime/subagents/supervisor.d.ts +79 -0
  161. package/dist/runtime/subagents/supervisor.d.ts.map +1 -0
  162. package/dist/runtime/subagents/supervisor.js +301 -0
  163. package/dist/runtime/subagents/supervisor.js.map +1 -0
  164. package/dist/runtime/subagents/tool.d.ts +38 -0
  165. package/dist/runtime/subagents/tool.d.ts.map +1 -0
  166. package/dist/runtime/subagents/tool.js +171 -0
  167. package/dist/runtime/subagents/tool.js.map +1 -0
  168. package/dist/runtime/subagents/types.d.ts +150 -0
  169. package/dist/runtime/subagents/types.d.ts.map +1 -0
  170. package/dist/runtime/subagents/types.js +52 -0
  171. package/dist/runtime/subagents/types.js.map +1 -0
  172. package/dist/runtime/ui-events.d.ts +5 -0
  173. package/dist/runtime/ui-events.d.ts.map +1 -1
  174. package/dist/runtime/ui-events.js.map +1 -1
  175. package/dist/runtime/ui-view-model.d.ts +35 -1
  176. package/dist/runtime/ui-view-model.d.ts.map +1 -1
  177. package/dist/runtime/ui-view-model.js +32 -1
  178. package/dist/runtime/ui-view-model.js.map +1 -1
  179. package/dist/sdk/query.d.ts.map +1 -1
  180. package/dist/sdk/query.js +0 -1
  181. package/dist/sdk/query.js.map +1 -1
  182. package/dist/services/auto-fix/autoFixHook.d.ts.map +1 -1
  183. package/dist/services/auto-fix/autoFixHook.js +3 -2
  184. package/dist/services/auto-fix/autoFixHook.js.map +1 -1
  185. package/dist/services/auto-fix/autoFixRunner.d.ts +2 -2
  186. package/dist/services/auto-fix/autoFixRunner.d.ts.map +1 -1
  187. package/dist/services/auto-fix/autoFixRunner.js +2 -2
  188. package/dist/services/auto-fix/autoFixRunner.js.map +1 -1
  189. package/dist/services/compact/auto-compact.js +3 -3
  190. package/dist/services/compact/auto-compact.js.map +1 -1
  191. package/dist/services/compact/summary-generator.d.ts.map +1 -1
  192. package/dist/services/compact/summary-generator.js +0 -1
  193. package/dist/services/compact/summary-generator.js.map +1 -1
  194. package/dist/services/concurrent-sessions.d.ts.map +1 -1
  195. package/dist/services/concurrent-sessions.js +3 -0
  196. package/dist/services/concurrent-sessions.js.map +1 -1
  197. package/dist/services/config.d.ts +11 -4
  198. package/dist/services/config.d.ts.map +1 -1
  199. package/dist/services/config.js +45 -4
  200. package/dist/services/config.js.map +1 -1
  201. package/dist/services/doctor.d.ts.map +1 -1
  202. package/dist/services/doctor.js +1 -1
  203. package/dist/services/doctor.js.map +1 -1
  204. package/dist/services/global-config.d.ts +23 -1
  205. package/dist/services/global-config.d.ts.map +1 -1
  206. package/dist/services/global-config.js +3 -0
  207. package/dist/services/global-config.js.map +1 -1
  208. package/dist/services/llm.d.ts.map +1 -1
  209. package/dist/services/llm.js +9 -1
  210. package/dist/services/llm.js.map +1 -1
  211. package/dist/services/mcp/transports.d.ts +2 -0
  212. package/dist/services/mcp/transports.d.ts.map +1 -1
  213. package/dist/services/mcp/transports.js +23 -2
  214. package/dist/services/mcp/transports.js.map +1 -1
  215. package/dist/services/memory.d.ts.map +1 -1
  216. package/dist/services/memory.js.map +1 -1
  217. package/dist/services/model-context.d.ts.map +1 -1
  218. package/dist/services/model-context.js +7 -1
  219. package/dist/services/model-context.js.map +1 -1
  220. package/dist/services/session-memory/sessionMemory.js +1 -1
  221. package/dist/services/session-memory/sessionMemory.js.map +1 -1
  222. package/dist/services/session-storage.d.ts +1 -1
  223. package/dist/services/session-storage.d.ts.map +1 -1
  224. package/dist/services/session-storage.js +49 -5
  225. package/dist/services/session-storage.js.map +1 -1
  226. package/dist/services/task-manager.d.ts +2 -0
  227. package/dist/services/task-manager.d.ts.map +1 -1
  228. package/dist/services/task-manager.js +13 -0
  229. package/dist/services/task-manager.js.map +1 -1
  230. package/dist/services/usage-state.d.ts.map +1 -1
  231. package/dist/services/usage-state.js +3 -0
  232. package/dist/services/usage-state.js.map +1 -1
  233. package/dist/skills/loader.d.ts +1 -1
  234. package/dist/skills/loader.d.ts.map +1 -1
  235. package/dist/skills/loader.js +1 -1
  236. package/dist/skills/loader.js.map +1 -1
  237. package/dist/skills/registry.d.ts +1 -1
  238. package/dist/skills/registry.d.ts.map +1 -1
  239. package/dist/skills/registry.js +1 -1
  240. package/dist/skills/registry.js.map +1 -1
  241. package/dist/terminal-ui/launch.d.ts +18 -3
  242. package/dist/terminal-ui/launch.d.ts.map +1 -1
  243. package/dist/terminal-ui/launch.js +21 -4
  244. package/dist/terminal-ui/launch.js.map +1 -1
  245. package/dist/tools/index.d.ts.map +1 -1
  246. package/dist/tools/index.js +3 -4
  247. package/dist/tools/index.js.map +1 -1
  248. package/dist/tools/lsp.js.map +1 -1
  249. package/dist/tools/mcp.d.ts +1 -0
  250. package/dist/tools/mcp.d.ts.map +1 -1
  251. package/dist/tools/mcp.js +19 -4
  252. package/dist/tools/mcp.js.map +1 -1
  253. package/dist/tools/web.js +3 -3
  254. package/dist/tools/web.js.map +1 -1
  255. package/dist/tui-core/frame.d.ts +13 -1
  256. package/dist/tui-core/frame.d.ts.map +1 -1
  257. package/dist/tui-core/frame.js +61 -8
  258. package/dist/tui-core/frame.js.map +1 -1
  259. package/dist/tui-core/style.d.ts +87 -0
  260. package/dist/tui-core/style.d.ts.map +1 -0
  261. package/dist/tui-core/style.js +248 -0
  262. package/dist/tui-core/style.js.map +1 -0
  263. package/dist/tui-core/terminal-writer.d.ts.map +1 -1
  264. package/dist/tui-core/terminal-writer.js +16 -3
  265. package/dist/tui-core/terminal-writer.js.map +1 -1
  266. package/dist/tui-ui/inline-surface.d.ts +134 -0
  267. package/dist/tui-ui/inline-surface.d.ts.map +1 -0
  268. package/dist/tui-ui/inline-surface.js +364 -0
  269. package/dist/tui-ui/inline-surface.js.map +1 -0
  270. package/dist/tui-ui/launch.d.ts.map +1 -1
  271. package/dist/tui-ui/launch.js +251 -64
  272. package/dist/tui-ui/launch.js.map +1 -1
  273. package/dist/tui-ui/layout.js +31 -2
  274. package/dist/tui-ui/layout.js.map +1 -1
  275. package/dist/tui-ui/render-scheduler.d.ts +37 -0
  276. package/dist/tui-ui/render-scheduler.d.ts.map +1 -0
  277. package/dist/tui-ui/render-scheduler.js +118 -0
  278. package/dist/tui-ui/render-scheduler.js.map +1 -0
  279. package/dist/tui-ui/runner.d.ts +13 -0
  280. package/dist/tui-ui/runner.d.ts.map +1 -1
  281. package/dist/tui-ui/runner.js +60 -11
  282. package/dist/tui-ui/runner.js.map +1 -1
  283. package/dist/tui-ui/state.d.ts +33 -3
  284. package/dist/tui-ui/state.d.ts.map +1 -1
  285. package/dist/tui-ui/state.js +138 -25
  286. package/dist/tui-ui/state.js.map +1 -1
  287. package/dist/tui-ui/transcript-cache.d.ts +33 -0
  288. package/dist/tui-ui/transcript-cache.d.ts.map +1 -0
  289. package/dist/tui-ui/transcript-cache.js +67 -0
  290. package/dist/tui-ui/transcript-cache.js.map +1 -0
  291. package/dist/ui/box.d.ts.map +1 -1
  292. package/dist/ui/box.js +0 -11
  293. package/dist/ui/box.js.map +1 -1
  294. package/dist/ui/command-panel.d.ts.map +1 -1
  295. package/dist/ui/command-panel.js +1 -3
  296. package/dist/ui/command-panel.js.map +1 -1
  297. package/dist/ui/file-completion.js +1 -1
  298. package/dist/ui/file-completion.js.map +1 -1
  299. package/dist/ui/markdown.d.ts.map +1 -1
  300. package/dist/ui/markdown.js +1 -2
  301. package/dist/ui/markdown.js.map +1 -1
  302. package/dist/ui/multiline-input.d.ts.map +1 -1
  303. package/dist/ui/multiline-input.js +1 -2
  304. package/dist/ui/multiline-input.js.map +1 -1
  305. package/dist/ui/progress.d.ts.map +1 -1
  306. package/dist/ui/progress.js +0 -3
  307. package/dist/ui/progress.js.map +1 -1
  308. package/dist/ui/status-bar.d.ts.map +1 -1
  309. package/dist/ui/status-bar.js +0 -1
  310. package/dist/ui/status-bar.js.map +1 -1
  311. package/dist/ui/stream-markdown.d.ts +3 -0
  312. package/dist/ui/stream-markdown.d.ts.map +1 -1
  313. package/dist/ui/stream-markdown.js +0 -6
  314. package/dist/ui/stream-markdown.js.map +1 -1
  315. package/dist/ui/tool-preview.d.ts.map +1 -1
  316. package/dist/ui/tool-preview.js +0 -1
  317. package/dist/ui/tool-preview.js.map +1 -1
  318. package/package.json +1 -1
  319. package/dist/cli-dbg.js +0 -717
  320. package/dist/cli-debug.d.ts +0 -7
  321. package/dist/cli-debug.d.ts.map +0 -1
  322. package/dist/cli-debug.js +0 -717
  323. package/dist/cli-debug.js.map +0 -1
  324. package/dist/cli-debug2.d.ts +0 -7
  325. package/dist/cli-debug2.d.ts.map +0 -1
  326. package/dist/cli-debug2.js +0 -717
  327. package/dist/cli-debug2.js.map +0 -1
  328. package/dist/cli-debug3.d.ts +0 -7
  329. package/dist/cli-debug3.d.ts.map +0 -1
  330. package/dist/cli-debug3.js +0 -719
  331. package/dist/cli-debug3.js.map +0 -1
  332. package/dist/cli-ink.d.ts +0 -8
  333. package/dist/cli-ink.d.ts.map +0 -1
  334. package/dist/cli-ink.js +0 -32
  335. package/dist/cli-ink.js.map +0 -1
  336. package/dist/cli-patch.js +0 -716
  337. package/dist/cli-test.js +0 -726
@@ -0,0 +1,226 @@
1
+ "use strict";
2
+ /**
3
+ * SubagentResultParser: normalize a child's final text into a fixed schema.
4
+ *
5
+ * Children are instructed to emit a single JSON object. In practice they may
6
+ * wrap it in prose, emit invalid JSON, or omit fields. This parser is the
7
+ * single chokepoint that produces a well-typed {@link SubtaskResult} regardless
8
+ * of provider quirks, so the root Agent only ever sees structured data.
9
+ */
10
+ Object.defineProperty(exports, "__esModule", { value: true });
11
+ exports.extractJsonObject = extractJsonObject;
12
+ exports.parseSubtaskResult = parseSubtaskResult;
13
+ const types_1 = require("./types");
14
+ const MAX_FINDINGS = 20;
15
+ const MAX_FILES = 50;
16
+ const MAX_COMMANDS = 20;
17
+ const MAX_VERIFICATION = 10;
18
+ const MAX_RISKS = 10;
19
+ const MAX_FIELD_LEN = 2000;
20
+ /**
21
+ * Extract the first balanced JSON object from text that may contain prose
22
+ * around it. Returns the parsed object or null if none is found / invalid.
23
+ */
24
+ function extractJsonObject(text) {
25
+ if (!text)
26
+ return null;
27
+ const start = text.indexOf('{');
28
+ if (start === -1)
29
+ return null;
30
+ // Scan for the matching closing brace, respecting nested objects and strings.
31
+ let depth = 0;
32
+ let inString = false;
33
+ let escaped = false;
34
+ for (let i = start; i < text.length; i++) {
35
+ const ch = text[i];
36
+ if (inString) {
37
+ if (escaped) {
38
+ escaped = false;
39
+ continue;
40
+ }
41
+ if (ch === '\\') {
42
+ escaped = true;
43
+ continue;
44
+ }
45
+ if (ch === '"')
46
+ inString = false;
47
+ continue;
48
+ }
49
+ if (ch === '"') {
50
+ inString = true;
51
+ continue;
52
+ }
53
+ if (ch === '{')
54
+ depth++;
55
+ else if (ch === '}') {
56
+ depth--;
57
+ if (depth === 0) {
58
+ const candidate = text.slice(start, i + 1);
59
+ try {
60
+ return JSON.parse(candidate);
61
+ }
62
+ catch {
63
+ return null;
64
+ }
65
+ }
66
+ }
67
+ }
68
+ // Unbalanced; try a last-ditch parse of the tail.
69
+ try {
70
+ return JSON.parse(text.slice(start));
71
+ }
72
+ catch {
73
+ return null;
74
+ }
75
+ }
76
+ function str(value, max = MAX_FIELD_LEN) {
77
+ if (typeof value === 'string')
78
+ return truncate(value.trim(), max);
79
+ if (typeof value === 'number' || typeof value === 'boolean')
80
+ return String(value);
81
+ return '';
82
+ }
83
+ function truncate(s, max) {
84
+ return s.length <= max ? s : `${s.slice(0, max - 1)}…`;
85
+ }
86
+ function parseFindings(raw) {
87
+ if (!Array.isArray(raw))
88
+ return [];
89
+ const out = [];
90
+ for (const item of raw) {
91
+ if (!item || typeof item !== 'object')
92
+ continue;
93
+ const obj = item;
94
+ const title = str(obj.title, 200);
95
+ if (!title)
96
+ continue;
97
+ out.push({
98
+ title,
99
+ severity: parseSeverity(obj.severity),
100
+ evidence: str(obj.evidence, 1500),
101
+ file: obj.file != null ? str(obj.file, 500) : undefined,
102
+ line: typeof obj.line === 'number' && Number.isFinite(obj.line) ? Math.max(0, Math.floor(obj.line)) : undefined,
103
+ });
104
+ if (out.length >= MAX_FINDINGS)
105
+ break;
106
+ }
107
+ return out;
108
+ }
109
+ function parseSeverity(value) {
110
+ if (value === 'critical' || value === 'high' || value === 'medium' || value === 'low' || value === 'info') {
111
+ return value;
112
+ }
113
+ return undefined;
114
+ }
115
+ function parseStringArray(raw, max) {
116
+ if (!Array.isArray(raw))
117
+ return [];
118
+ const out = [];
119
+ for (const item of raw) {
120
+ const s = str(item, 500);
121
+ if (s)
122
+ out.push(s);
123
+ if (out.length >= max)
124
+ break;
125
+ }
126
+ return out;
127
+ }
128
+ function parseCommands(raw) {
129
+ if (!Array.isArray(raw))
130
+ return [];
131
+ const out = [];
132
+ for (const item of raw) {
133
+ if (!item || typeof item !== 'object')
134
+ continue;
135
+ const obj = item;
136
+ const command = str(obj.command, 500);
137
+ if (!command)
138
+ continue;
139
+ out.push({ command, purpose: str(obj.purpose, 500), executed: false });
140
+ if (out.length >= MAX_COMMANDS)
141
+ break;
142
+ }
143
+ return out;
144
+ }
145
+ /**
146
+ * Parse a child's final text into a {@link SubtaskResult}.
147
+ *
148
+ * @param id Runtime-generated task id.
149
+ * @param role The role the child ran as.
150
+ * @param content The child's final assistant text (may contain prose + JSON).
151
+ * @param status Terminal status. `completed` requires parseable JSON;
152
+ * otherwise the summary records the failure mode.
153
+ * @param usage Observed usage; defaults to empty.
154
+ */
155
+ function parseSubtaskResult(args) {
156
+ const { id, role, content, status } = args;
157
+ const usage = args.usage ?? types_1.EMPTY_SUBTASK_USAGE;
158
+ if (status !== 'completed') {
159
+ return {
160
+ id,
161
+ role,
162
+ status,
163
+ summary: summarizeFailure(status, content),
164
+ findings: [],
165
+ files: [],
166
+ commands: [],
167
+ verification: [],
168
+ risks: [`child did not complete: ${status}`],
169
+ usage,
170
+ };
171
+ }
172
+ const parsed = extractJsonObject(content);
173
+ if (!parsed || typeof parsed !== 'object') {
174
+ return {
175
+ id,
176
+ role,
177
+ status: 'failed',
178
+ summary: truncate(content.trim() || '(no output)', MAX_FIELD_LEN),
179
+ findings: [],
180
+ files: [],
181
+ commands: [],
182
+ verification: [],
183
+ risks: ['child returned non-JSON output'],
184
+ usage,
185
+ };
186
+ }
187
+ const payload = parsed;
188
+ const summary = str(payload.summary, MAX_FIELD_LEN);
189
+ if (!summary) {
190
+ return {
191
+ id,
192
+ role,
193
+ status: 'failed',
194
+ summary: truncate(content.trim().slice(0, MAX_FIELD_LEN), MAX_FIELD_LEN),
195
+ findings: parseFindings(payload.findings),
196
+ files: [],
197
+ commands: [],
198
+ verification: [],
199
+ risks: ['child output missing required "summary" field'],
200
+ usage,
201
+ };
202
+ }
203
+ return {
204
+ id,
205
+ role,
206
+ status: 'completed',
207
+ summary,
208
+ findings: parseFindings(payload.findings),
209
+ files: parseStringArray(payload.files, MAX_FILES),
210
+ commands: parseCommands(payload.commands),
211
+ verification: parseStringArray(payload.verification, MAX_VERIFICATION),
212
+ risks: parseStringArray(payload.risks, MAX_RISKS),
213
+ usage,
214
+ };
215
+ }
216
+ function summarizeFailure(status, content) {
217
+ const tail = truncate(content.trim(), 300);
218
+ switch (status) {
219
+ case 'timed_out': return `Child timed out. Partial output: ${tail || '(none)'}`;
220
+ case 'cancelled': return `Child was cancelled. Partial output: ${tail || '(none)'}`;
221
+ case 'failed': return `Child failed. Output: ${tail || '(none)'}`;
222
+ case 'rejected': return `Child was rejected by policy before running.`;
223
+ default: return tail || '(no output)';
224
+ }
225
+ }
226
+ //# sourceMappingURL=result-parser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"result-parser.js","sourceRoot":"","sources":["../../../src/runtime/subagents/result-parser.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,53 @@
1
+ /**
2
+ * SubagentRunner: runs a single child agent to completion and parses its result.
3
+ *
4
+ * The runner is the boundary between the Supervisor and the shared `query()`
5
+ * loop. It is deliberately thin: it derives a child abort signal from the
6
+ * parent, applies a per-child timeout, invokes an injectable `executeQuery`,
7
+ * and normalizes the outcome through {@link parseSubtaskResult}.
8
+ *
9
+ * `executeQuery` is injected so the runner can be tested without a live LLM;
10
+ * the production binding wraps `query()` with a per-child LLMService.
11
+ */
12
+ import { buildChildMessages } from './context-builder';
13
+ import type { SubtaskPacket, SubtaskResult, SubtaskUsage } from './types';
14
+ /** A filtered, child-safe tool list with its executor. */
15
+ export interface ChildToolSet {
16
+ /** Resolved tool definitions the child may call. */
17
+ tools: unknown[];
18
+ /** Tool name -> executor. */
19
+ toolExecutor: (name: string, args: Record<string, unknown>, abortSignal?: AbortSignal) => Promise<string>;
20
+ }
21
+ /** Injectable child query function. Returns the final assistant text + usage. */
22
+ export type ExecuteChildQuery = (messages: ReturnType<typeof buildChildMessages>, toolSet: ChildToolSet, abortSignal: AbortSignal) => Promise<{
23
+ content: string;
24
+ usage: SubtaskUsage;
25
+ }>;
26
+ export interface SubagentRunnerDeps {
27
+ /** Canonical project root. */
28
+ cwd: string;
29
+ /** Canonical scope paths (already validated). */
30
+ canonicalScopePaths?: string[];
31
+ /** Filtered child tools + executor. */
32
+ toolSet: ChildToolSet;
33
+ /** Injectable query binding (production wraps query(); tests mock it). */
34
+ executeQuery: ExecuteChildQuery;
35
+ /** Per-child wall-clock timeout. */
36
+ timeoutMs: number;
37
+ /** Parent abort signal; child abort is derived from it. */
38
+ parentAbortSignal?: AbortSignal;
39
+ /** Optional read-only context inputs forwarded to the context builder. */
40
+ rootObjectiveSummary?: string;
41
+ modelLabel?: string;
42
+ }
43
+ export interface RunSubtaskOutcome {
44
+ result: SubtaskResult;
45
+ /** Whether the child was aborted by the parent (vs its own timeout). */
46
+ parentCancelled: boolean;
47
+ }
48
+ /**
49
+ * Run one child subtask to a terminal state. Never throws: every failure mode
50
+ * (timeout, cancel, error, non-JSON output) is normalized into a SubtaskResult.
51
+ */
52
+ export declare function runSubtask(packet: SubtaskPacket, deps: SubagentRunnerDeps, taskId: string): Promise<RunSubtaskOutcome>;
53
+ //# sourceMappingURL=runner.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runner.d.ts","sourceRoot":"","sources":["../../../src/runtime/subagents/runner.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAEvD,OAAO,KAAK,EACV,aAAa,EACb,aAAa,EAEb,YAAY,EACb,MAAM,SAAS,CAAC;AA4BjB,0DAA0D;AAC1D,MAAM,WAAW,YAAY;IAC3B,oDAAoD;IACpD,KAAK,EAAE,OAAO,EAAE,CAAC;IACjB,6BAA6B;IAC7B,YAAY,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,WAAW,CAAC,EAAE,WAAW,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;CAC3G;AAED,iFAAiF;AACjF,MAAM,MAAM,iBAAiB,GAAG,CAC9B,QAAQ,EAAE,UAAU,CAAC,OAAO,kBAAkB,CAAC,EAC/C,OAAO,EAAE,YAAY,EACrB,WAAW,EAAE,WAAW,KACrB,OAAO,CAAC;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,YAAY,CAAA;CAAE,CAAC,CAAC;AAEvD,MAAM,WAAW,kBAAkB;IACjC,8BAA8B;IAC9B,GAAG,EAAE,MAAM,CAAC;IACZ,iDAAiD;IACjD,mBAAmB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC/B,uCAAuC;IACvC,OAAO,EAAE,YAAY,CAAC;IACtB,0EAA0E;IAC1E,YAAY,EAAE,iBAAiB,CAAC;IAChC,oCAAoC;IACpC,SAAS,EAAE,MAAM,CAAC;IAClB,2DAA2D;IAC3D,iBAAiB,CAAC,EAAE,WAAW,CAAC;IAChC,0EAA0E;IAC1E,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,aAAa,CAAC;IACtB,wEAAwE;IACxE,eAAe,EAAE,OAAO,CAAC;CAC1B;AAED;;;GAGG;AACH,wBAAsB,UAAU,CAC9B,MAAM,EAAE,aAAa,EACrB,IAAI,EAAE,kBAAkB,EACxB,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,iBAAiB,CAAC,CA6H5B"}
@@ -0,0 +1,172 @@
1
+ "use strict";
2
+ /**
3
+ * SubagentRunner: runs a single child agent to completion and parses its result.
4
+ *
5
+ * The runner is the boundary between the Supervisor and the shared `query()`
6
+ * loop. It is deliberately thin: it derives a child abort signal from the
7
+ * parent, applies a per-child timeout, invokes an injectable `executeQuery`,
8
+ * and normalizes the outcome through {@link parseSubtaskResult}.
9
+ *
10
+ * `executeQuery` is injected so the runner can be tested without a live LLM;
11
+ * the production binding wraps `query()` with a per-child LLMService.
12
+ */
13
+ Object.defineProperty(exports, "__esModule", { value: true });
14
+ exports.runSubtask = runSubtask;
15
+ const context_builder_1 = require("./context-builder");
16
+ const result_parser_1 = require("./result-parser");
17
+ const types_1 = require("./types");
18
+ /**
19
+ * R5: bounded grace period to let a child query settle after it was aborted
20
+ * (timeout or parent cancel). The abort signal has fired; a cooperative
21
+ * executor stops promptly. An uncooperative executor is abandoned after this
22
+ * window so a stuck child cannot hold the provider slot indefinitely. The
23
+ * abandon is observable: the promise is caught and the (now unobserved)
24
+ * late resolution cannot flip the already-decided terminal status.
25
+ */
26
+ const CHILD_SHUTDOWN_GRACE_MS = 2000;
27
+ async function settleWithGrace(queryPromise, graceMs) {
28
+ let timer;
29
+ try {
30
+ await Promise.race([
31
+ queryPromise.catch(() => undefined),
32
+ new Promise(resolve => {
33
+ timer = setTimeout(() => resolve(), graceMs);
34
+ timer.unref?.();
35
+ }),
36
+ ]);
37
+ }
38
+ finally {
39
+ if (timer)
40
+ clearTimeout(timer);
41
+ }
42
+ }
43
+ /**
44
+ * Run one child subtask to a terminal state. Never throws: every failure mode
45
+ * (timeout, cancel, error, non-JSON output) is normalized into a SubtaskResult.
46
+ */
47
+ async function runSubtask(packet, deps, taskId) {
48
+ const messages = (0, context_builder_1.buildChildMessages)({
49
+ cwd: deps.cwd,
50
+ packet,
51
+ canonicalScopePaths: deps.canonicalScopePaths,
52
+ rootObjectiveSummary: deps.rootObjectiveSummary,
53
+ modelLabel: deps.modelLabel,
54
+ });
55
+ const childController = new AbortController();
56
+ let parentAborted = false;
57
+ const onParentAbort = () => {
58
+ parentAborted = true;
59
+ childController.abort();
60
+ };
61
+ if (deps.parentAbortSignal) {
62
+ if (deps.parentAbortSignal.aborted) {
63
+ parentAborted = true;
64
+ childController.abort();
65
+ }
66
+ else {
67
+ deps.parentAbortSignal.addEventListener('abort', onParentAbort, { once: true });
68
+ }
69
+ }
70
+ let timeoutHandle;
71
+ let timedOut = false;
72
+ const timeoutPromise = new Promise(resolve => {
73
+ timeoutHandle = setTimeout(() => {
74
+ timedOut = true;
75
+ childController.abort();
76
+ resolve({ kind: 'timeout' });
77
+ }, deps.timeoutMs);
78
+ });
79
+ // R5: parent abort is a distinct terminal outcome that wins the race even
80
+ // if the query subsequently resolves. Without this, a query that resolves
81
+ // just after the abort fires would flip the result to 'completed'.
82
+ // N15: store reference to the second abort listener so it can be cleaned up
83
+ // in the finally block alongside the first.
84
+ let onParentAbortForRace;
85
+ const parentAbortPromise = new Promise(resolve => {
86
+ if (parentAborted) {
87
+ resolve({ kind: 'parent_abort' });
88
+ return;
89
+ }
90
+ if (deps.parentAbortSignal) {
91
+ const handler = () => resolve({ kind: 'parent_abort' });
92
+ onParentAbortForRace = handler;
93
+ deps.parentAbortSignal.addEventListener('abort', handler, { once: true });
94
+ }
95
+ });
96
+ const queryPromise = deps
97
+ .executeQuery(messages, deps.toolSet, childController.signal)
98
+ .then(content => ({ kind: 'done', content }))
99
+ .catch(err => ({
100
+ kind: 'error',
101
+ message: err instanceof Error ? err.message : String(err),
102
+ }));
103
+ let status;
104
+ let content = '';
105
+ let usage = types_1.EMPTY_SUBTASK_USAGE;
106
+ let parentCancelled = false;
107
+ try {
108
+ const outcome = await Promise.race([parentAbortPromise, queryPromise, timeoutPromise]);
109
+ if (outcome.kind === 'parent_abort') {
110
+ // Parent abort wins regardless of whether the query resolves later.
111
+ status = 'cancelled';
112
+ parentCancelled = true;
113
+ }
114
+ else if (outcome.kind === 'timeout') {
115
+ status = 'timed_out';
116
+ }
117
+ else if (outcome.kind === 'error') {
118
+ // If the parent aborted, treat as cancel; otherwise a failure.
119
+ if (parentAborted && !timedOut) {
120
+ status = 'cancelled';
121
+ parentCancelled = true;
122
+ }
123
+ else {
124
+ status = 'failed';
125
+ content = outcome.message;
126
+ }
127
+ }
128
+ else {
129
+ // R5: even on 'done', if the parent aborted before this resolved, the
130
+ // terminal state must remain cancelled - a late resolve cannot flip it.
131
+ if (parentAborted && !timedOut) {
132
+ status = 'cancelled';
133
+ parentCancelled = true;
134
+ }
135
+ else {
136
+ status = 'completed';
137
+ content = outcome.content.content;
138
+ usage = outcome.content.usage;
139
+ }
140
+ }
141
+ }
142
+ finally {
143
+ if (timeoutHandle)
144
+ clearTimeout(timeoutHandle);
145
+ if (deps.parentAbortSignal) {
146
+ deps.parentAbortSignal.removeEventListener('abort', onParentAbort);
147
+ if (onParentAbortForRace) {
148
+ deps.parentAbortSignal.removeEventListener('abort', onParentAbortForRace);
149
+ }
150
+ }
151
+ }
152
+ // R5: on timeout/abort the query promise may still be running in the
153
+ // background (model request or tool call in flight). The provider slot
154
+ // must not be released while the child can still issue requests, and we
155
+ // must not leave an unobserved promise that could fire late side effects.
156
+ // Wait a bounded grace period for the query to settle after the abort
157
+ // signal fired. An uncooperative executor that ignores the signal is
158
+ // logged via the result; the slot is still released after the grace so a
159
+ // stuck child cannot hang the whole turn forever.
160
+ if (status === 'timed_out' || status === 'cancelled') {
161
+ await settleWithGrace(queryPromise, CHILD_SHUTDOWN_GRACE_MS);
162
+ }
163
+ const result = (0, result_parser_1.parseSubtaskResult)({
164
+ id: taskId,
165
+ role: packet.role,
166
+ content,
167
+ status,
168
+ usage,
169
+ });
170
+ return { result, parentCancelled };
171
+ }
172
+ //# sourceMappingURL=runner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runner.js","sourceRoot":"","sources":["../../../src/runtime/subagents/runner.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,73 @@
1
+ /**
2
+ * Turn-level integration: build the runtime-bound `subtask` tool for a root turn.
3
+ *
4
+ * This is the bridge between {@link AgentChatController} and the subagent
5
+ * runtime. It resolves the child tool set from the global runtime tools, builds
6
+ * the production executeQuery, the budget ledger, the provider gate and the
7
+ * Supervisor, and returns the `subtask` OpenHorseTool to merge into the root
8
+ * turn's tool list. Returns null when subagents are off or the LLM is absent,
9
+ * so the root loop is unchanged.
10
+ */
11
+ import type { OpenHorseTool } from '../../framework/tool';
12
+ import { runSubtaskBatch } from './supervisor';
13
+ import type { RuntimeSubtaskEvent, SubagentConfig, SubtaskUsage } from './types';
14
+ import type { LLMConfig } from '../../services/llm';
15
+ import type { OpenHorseCLIConfig } from '../../services/config';
16
+ export interface SubagentTurnInputs {
17
+ /** Resolved subagent config (from runtime.config.subagents). */
18
+ config: SubagentConfig;
19
+ /** Canonical project root. */
20
+ cwd: string;
21
+ /** Root LLM config derived from runtime config (apiKey, baseUrl, model, ...). */
22
+ rootLlmConfig: Pick<LLMConfig, 'apiKey' | 'baseUrl' | 'model' | 'fallbackModel'>;
23
+ /** Model label shown to children. */
24
+ modelLabel?: string;
25
+ /** Root objective summary forwarded to children. */
26
+ rootObjectiveSummary?: string;
27
+ /** Root turn abort signal; propagated to every child. */
28
+ abortSignal?: AbortSignal;
29
+ /** Lifecycle event sink (runtime event + trace). */
30
+ onSubtaskEvent?: (event: RuntimeSubtaskEvent) => void;
31
+ /** Called once per finished task with its structured result, for artifact persistence. */
32
+ onSubtaskResult?: (result: import('./types').SubtaskResult, batchId: string) => void;
33
+ /**
34
+ * R6: live permission state from the root runtime. Returns true when a
35
+ * permission request is awaiting user decision. When provided, the policy
36
+ * gate uses it instead of a hardcoded false, preventing background
37
+ * delegation while the user is deciding a permission.
38
+ */
39
+ hasPendingPermission?: () => boolean;
40
+ /**
41
+ * R6: called with each child's observed usage so the root loop can record
42
+ * it into its shared CostTracker. The observed values are never clamped;
43
+ * `/cost` and telemetry must reflect the truth.
44
+ */
45
+ onChildUsage?: (taskId: string, role: import('./types').SubagentRole, usage: import('./types').SubtaskUsage, modelLabel?: string) => void;
46
+ }
47
+ /**
48
+ * Build the `subtask` tool for a root turn, or null if disabled.
49
+ *
50
+ * Returns a bundle: the tool to merge into the root turn's tool list, plus an
51
+ * accessor for the aggregate child usage so the root loop can fold child cost
52
+ * into its loop stats and `/cost`. The bundle is null when subagents are off.
53
+ */
54
+ export declare function createSubagentBundleForTurn(inputs: SubagentTurnInputs): SubagentTurnBundle | null;
55
+ /**
56
+ * Backwards-compatible wrapper returning only the tool. Prefer
57
+ * {@link createSubagentBundleForTurn} when the root loop needs to fold child
58
+ * usage into its stats.
59
+ */
60
+ export declare function createSubagentToolForTurn(inputs: SubagentTurnInputs): OpenHorseTool | null;
61
+ /** A subtask turn bundle: the tool plus usage accessors for the root loop. */
62
+ export interface SubagentTurnBundle {
63
+ tool: OpenHorseTool;
64
+ /** Reconciled aggregate usage across all children that ran this turn. */
65
+ getAggregateUsage: () => SubtaskUsage;
66
+ /** Best-effort count of subtasks that ran this turn. */
67
+ getSubtaskCount: () => number;
68
+ }
69
+ /** Derive the root LLM config slice from the runtime config. */
70
+ export declare function deriveRootLlmConfig(config: OpenHorseCLIConfig): Pick<LLMConfig, 'apiKey' | 'baseUrl' | 'model' | 'fallbackModel'>;
71
+ /** Re-exported for the root loop to read aggregate usage after a turn. */
72
+ export { runSubtaskBatch };
73
+ //# sourceMappingURL=runtime-integration.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runtime-integration.d.ts","sourceRoot":"","sources":["../../../src/runtime/subagents/runtime-integration.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAe,MAAM,sBAAsB,CAAC;AAIvE,OAAO,EAAE,eAAe,EAA+B,MAAM,cAAc,CAAC;AAI5E,OAAO,KAAK,EAAE,mBAAmB,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACjF,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AACpD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAiBhE,MAAM,WAAW,kBAAkB;IACjC,gEAAgE;IAChE,MAAM,EAAE,cAAc,CAAC;IACvB,8BAA8B;IAC9B,GAAG,EAAE,MAAM,CAAC;IACZ,iFAAiF;IACjF,aAAa,EAAE,IAAI,CAAC,SAAS,EAAE,QAAQ,GAAG,SAAS,GAAG,OAAO,GAAG,eAAe,CAAC,CAAC;IACjF,qCAAqC;IACrC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,oDAAoD;IACpD,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,yDAAyD;IACzD,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,oDAAoD;IACpD,cAAc,CAAC,EAAE,CAAC,KAAK,EAAE,mBAAmB,KAAK,IAAI,CAAC;IACtD,0FAA0F;IAC1F,eAAe,CAAC,EAAE,CAAC,MAAM,EAAE,OAAO,SAAS,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IACrF;;;;;OAKG;IACH,oBAAoB,CAAC,EAAE,MAAM,OAAO,CAAC;IACrC;;;;OAIG;IACH,YAAY,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,SAAS,EAAE,YAAY,EAAE,KAAK,EAAE,OAAO,SAAS,EAAE,YAAY,EAAE,UAAU,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;CAC3I;AAED;;;;;;GAMG;AACH,wBAAgB,2BAA2B,CAAC,MAAM,EAAE,kBAAkB,GAAG,kBAAkB,GAAG,IAAI,CAyFjG;AAED;;;;GAIG;AACH,wBAAgB,yBAAyB,CAAC,MAAM,EAAE,kBAAkB,GAAG,aAAa,GAAG,IAAI,CAG1F;AAED,8EAA8E;AAC9E,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,aAAa,CAAC;IACpB,yEAAyE;IACzE,iBAAiB,EAAE,MAAM,YAAY,CAAC;IACtC,wDAAwD;IACxD,eAAe,EAAE,MAAM,MAAM,CAAC;CAC/B;AAED,gEAAgE;AAChE,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,kBAAkB,GAAG,IAAI,CAAC,SAAS,EAAE,QAAQ,GAAG,SAAS,GAAG,OAAO,GAAG,eAAe,CAAC,CAOjI;AAED,0EAA0E;AAC1E,OAAO,EAAE,eAAe,EAAE,CAAC"}