@astralyn/pi 0.84.15 → 0.85.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 (437) hide show
  1. package/CHANGELOG.md +14 -0
  2. package/dist/bun/cli.js +10 -7
  3. package/dist/bun/cli.js.map +1 -1
  4. package/dist/bun/runtime-setup.d.ts +2 -0
  5. package/dist/bun/runtime-setup.d.ts.map +1 -0
  6. package/dist/bun/runtime-setup.js +9 -0
  7. package/dist/bun/runtime-setup.js.map +1 -0
  8. package/dist/cli/args.d.ts.map +1 -1
  9. package/dist/cli/args.js +2 -0
  10. package/dist/cli/args.js.map +1 -1
  11. package/dist/cli/config-selector.d.ts.map +1 -1
  12. package/dist/cli/config-selector.js +2 -1
  13. package/dist/cli/config-selector.js.map +1 -1
  14. package/dist/cli/experimental/cli.d.ts +7 -3
  15. package/dist/cli/experimental/cli.d.ts.map +1 -1
  16. package/dist/cli/experimental/cli.js +6 -2
  17. package/dist/cli/experimental/cli.js.map +1 -1
  18. package/dist/cli/experimental/command-options.d.ts +23 -12
  19. package/dist/cli/experimental/command-options.d.ts.map +1 -1
  20. package/dist/cli/experimental/command-options.js +69 -20
  21. package/dist/cli/experimental/command-options.js.map +1 -1
  22. package/dist/cli/experimental/command.d.ts +10 -3
  23. package/dist/cli/experimental/command.d.ts.map +1 -1
  24. package/dist/cli/experimental/command.js +28 -14
  25. package/dist/cli/experimental/command.js.map +1 -1
  26. package/dist/cli/experimental/commands/client.d.ts +8 -2
  27. package/dist/cli/experimental/commands/client.d.ts.map +1 -1
  28. package/dist/cli/experimental/commands/client.js +43 -5
  29. package/dist/cli/experimental/commands/client.js.map +1 -1
  30. package/dist/cli/experimental/commands/server.d.ts +7 -3
  31. package/dist/cli/experimental/commands/server.d.ts.map +1 -1
  32. package/dist/cli/experimental/commands/server.js +27 -8
  33. package/dist/cli/experimental/commands/server.js.map +1 -1
  34. package/dist/cli.js +2541 -18
  35. package/dist/cli.js.map +1 -1
  36. package/dist/client/index.d.ts +1 -2
  37. package/dist/client/index.d.ts.map +1 -1
  38. package/dist/client/index.js +1 -2
  39. package/dist/client/index.js.map +1 -1
  40. package/dist/config.d.ts +1 -0
  41. package/dist/config.d.ts.map +1 -1
  42. package/dist/config.js +1 -0
  43. package/dist/config.js.map +1 -1
  44. package/dist/core/agent-session-runtime.d.ts.map +1 -1
  45. package/dist/core/agent-session-runtime.js +15 -7
  46. package/dist/core/agent-session-runtime.js.map +1 -1
  47. package/dist/core/agent-session.d.ts +2 -6
  48. package/dist/core/agent-session.d.ts.map +1 -1
  49. package/dist/core/agent-session.js +14 -6
  50. package/dist/core/agent-session.js.map +1 -1
  51. package/dist/core/compaction/branch-summarization.d.ts +1 -1
  52. package/dist/core/compaction/branch-summarization.d.ts.map +1 -1
  53. package/dist/core/compaction/branch-summarization.js +2 -1
  54. package/dist/core/compaction/branch-summarization.js.map +1 -1
  55. package/dist/core/extensions/loader.d.ts.map +1 -1
  56. package/dist/core/extensions/loader.js +1 -2
  57. package/dist/core/extensions/loader.js.map +1 -1
  58. package/dist/core/extensions/types.d.ts +8 -2
  59. package/dist/core/extensions/types.d.ts.map +1 -1
  60. package/dist/core/extensions/types.js.map +1 -1
  61. package/dist/core/http-dispatcher.d.ts.map +1 -1
  62. package/dist/core/http-dispatcher.js +2 -0
  63. package/dist/core/http-dispatcher.js.map +1 -1
  64. package/dist/core/messages.d.ts +1 -1
  65. package/dist/core/messages.d.ts.map +1 -1
  66. package/dist/core/messages.js.map +1 -1
  67. package/dist/core/model-config.d.ts +15 -0
  68. package/dist/core/model-config.d.ts.map +1 -1
  69. package/dist/core/model-config.js +3 -0
  70. package/dist/core/model-config.js.map +1 -1
  71. package/dist/core/model-runtime.d.ts +1 -0
  72. package/dist/core/model-runtime.d.ts.map +1 -1
  73. package/dist/core/model-runtime.js +5 -2
  74. package/dist/core/model-runtime.js.map +1 -1
  75. package/dist/core/provider-composer.d.ts.map +1 -1
  76. package/dist/core/provider-composer.js +8 -2
  77. package/dist/core/provider-composer.js.map +1 -1
  78. package/dist/core/session-manager.d.ts +3 -2
  79. package/dist/core/session-manager.d.ts.map +1 -1
  80. package/dist/core/session-manager.js +40 -13
  81. package/dist/core/session-manager.js.map +1 -1
  82. package/dist/core/settings-manager.js.map +1 -1
  83. package/dist/core/skills.d.ts +1 -1
  84. package/dist/core/skills.d.ts.map +1 -1
  85. package/dist/core/skills.js +4 -2
  86. package/dist/core/skills.js.map +1 -1
  87. package/dist/core/system-prompt.d.ts.map +1 -1
  88. package/dist/core/system-prompt.js +8 -9
  89. package/dist/core/system-prompt.js.map +1 -1
  90. package/dist/core/tools/bash.d.ts.map +1 -1
  91. package/dist/core/tools/bash.js +3 -161
  92. package/dist/core/tools/bash.js.map +1 -1
  93. package/dist/core/tools/edit.d.ts +1 -11
  94. package/dist/core/tools/edit.d.ts.map +1 -1
  95. package/dist/core/tools/edit.js +5 -173
  96. package/dist/core/tools/edit.js.map +1 -1
  97. package/dist/core/tools/find.d.ts.map +1 -1
  98. package/dist/core/tools/find.js +4 -54
  99. package/dist/core/tools/find.js.map +1 -1
  100. package/dist/core/tools/grep.d.ts.map +1 -1
  101. package/dist/core/tools/grep.js +4 -68
  102. package/dist/core/tools/grep.js.map +1 -1
  103. package/dist/core/tools/ls.d.ts.map +1 -1
  104. package/dist/core/tools/ls.js +4 -48
  105. package/dist/core/tools/ls.js.map +1 -1
  106. package/dist/core/tools/read.d.ts.map +1 -1
  107. package/dist/core/tools/read.js +5 -121
  108. package/dist/core/tools/read.js.map +1 -1
  109. package/dist/core/tools/renderers/bash.d.ts +13 -0
  110. package/dist/core/tools/renderers/bash.d.ts.map +1 -0
  111. package/dist/core/tools/renderers/bash.js +174 -0
  112. package/dist/core/tools/renderers/bash.js.map +1 -0
  113. package/dist/core/tools/renderers/edit.d.ts +22 -0
  114. package/dist/core/tools/renderers/edit.d.ts.map +1 -0
  115. package/dist/core/tools/renderers/edit.js +177 -0
  116. package/dist/core/tools/renderers/edit.js.map +1 -0
  117. package/dist/core/tools/renderers/find.d.ts +10 -0
  118. package/dist/core/tools/renderers/find.d.ts.map +1 -0
  119. package/dist/core/tools/renderers/find.js +63 -0
  120. package/dist/core/tools/renderers/find.js.map +1 -0
  121. package/dist/core/tools/renderers/grep.d.ts +10 -0
  122. package/dist/core/tools/renderers/grep.d.ts.map +1 -0
  123. package/dist/core/tools/renderers/grep.js +77 -0
  124. package/dist/core/tools/renderers/grep.js.map +1 -0
  125. package/dist/core/tools/renderers/index.d.ts +28 -0
  126. package/dist/core/tools/renderers/index.d.ts.map +1 -0
  127. package/dist/core/tools/renderers/index.js +47 -0
  128. package/dist/core/tools/renderers/index.js.map +1 -0
  129. package/dist/core/tools/renderers/ls.d.ts +10 -0
  130. package/dist/core/tools/renderers/ls.d.ts.map +1 -0
  131. package/dist/core/tools/renderers/ls.js +57 -0
  132. package/dist/core/tools/renderers/ls.js.map +1 -0
  133. package/dist/core/tools/renderers/read.d.ts +11 -0
  134. package/dist/core/tools/renderers/read.d.ts.map +1 -0
  135. package/dist/core/tools/renderers/read.js +131 -0
  136. package/dist/core/tools/renderers/read.js.map +1 -0
  137. package/dist/core/tools/renderers/write.d.ts +10 -0
  138. package/dist/core/tools/renderers/write.d.ts.map +1 -0
  139. package/dist/core/tools/renderers/write.js +151 -0
  140. package/dist/core/tools/renderers/write.js.map +1 -0
  141. package/dist/core/tools/write.d.ts.map +1 -1
  142. package/dist/core/tools/write.js +5 -144
  143. package/dist/core/tools/write.js.map +1 -1
  144. package/dist/experimental/client-runtime.d.ts +43 -0
  145. package/dist/experimental/client-runtime.d.ts.map +1 -0
  146. package/dist/experimental/client-runtime.js +183 -0
  147. package/dist/experimental/client-runtime.js.map +1 -0
  148. package/dist/experimental/client-tui-chat.d.ts +14 -0
  149. package/dist/experimental/client-tui-chat.d.ts.map +1 -0
  150. package/dist/experimental/client-tui-chat.js +176 -0
  151. package/dist/experimental/client-tui-chat.js.map +1 -0
  152. package/dist/experimental/client-tui.d.ts +37 -0
  153. package/dist/experimental/client-tui.d.ts.map +1 -0
  154. package/dist/experimental/client-tui.js +702 -0
  155. package/dist/experimental/client-tui.js.map +1 -0
  156. package/dist/experimental/client.d.ts +25 -0
  157. package/dist/experimental/client.d.ts.map +1 -0
  158. package/dist/experimental/client.js +99 -0
  159. package/dist/experimental/client.js.map +1 -0
  160. package/dist/experimental/coordinator-entry.d.ts +3 -0
  161. package/dist/experimental/coordinator-entry.d.ts.map +1 -0
  162. package/dist/experimental/coordinator-entry.js +11 -0
  163. package/dist/experimental/coordinator-entry.js.map +1 -0
  164. package/dist/experimental/coordinator.d.ts +38 -0
  165. package/dist/experimental/coordinator.d.ts.map +1 -0
  166. package/dist/experimental/coordinator.js +572 -0
  167. package/dist/experimental/coordinator.js.map +1 -0
  168. package/dist/experimental/mini/main.d.ts +7 -0
  169. package/dist/experimental/mini/main.d.ts.map +1 -0
  170. package/dist/experimental/mini/main.js +21 -0
  171. package/dist/experimental/mini/main.js.map +1 -0
  172. package/dist/experimental/mini/server/entry.d.ts +3 -0
  173. package/dist/experimental/mini/server/entry.d.ts.map +1 -0
  174. package/dist/experimental/mini/server/entry.js +11 -0
  175. package/dist/experimental/mini/server/entry.js.map +1 -0
  176. package/dist/experimental/mini/server/run.d.ts +13 -0
  177. package/dist/experimental/mini/server/run.d.ts.map +1 -0
  178. package/dist/experimental/mini/server/run.js +150 -0
  179. package/dist/experimental/mini/server/run.js.map +1 -0
  180. package/dist/experimental/mini/shared/protocol.d.ts +127 -0
  181. package/dist/experimental/mini/shared/protocol.d.ts.map +1 -0
  182. package/dist/experimental/mini/shared/protocol.js +13 -0
  183. package/dist/experimental/mini/shared/protocol.js.map +1 -0
  184. package/dist/experimental/mini/shared/rpc.d.ts +49 -0
  185. package/dist/experimental/mini/shared/rpc.d.ts.map +1 -0
  186. package/dist/experimental/mini/shared/rpc.js +171 -0
  187. package/dist/experimental/mini/shared/rpc.js.map +1 -0
  188. package/dist/experimental/mini/shared/transport.d.ts +35 -0
  189. package/dist/experimental/mini/shared/transport.d.ts.map +1 -0
  190. package/dist/experimental/mini/shared/transport.js +94 -0
  191. package/dist/experimental/mini/shared/transport.js.map +1 -0
  192. package/dist/experimental/mini/tui/run.d.ts +9 -0
  193. package/dist/experimental/mini/tui/run.d.ts.map +1 -0
  194. package/dist/experimental/mini/tui/run.js +62 -0
  195. package/dist/experimental/mini/tui/run.js.map +1 -0
  196. package/dist/experimental/mini/tui/session.d.ts +26 -0
  197. package/dist/experimental/mini/tui/session.d.ts.map +1 -0
  198. package/dist/experimental/mini/tui/session.js +94 -0
  199. package/dist/experimental/mini/tui/session.js.map +1 -0
  200. package/dist/experimental/mini/tui/view.d.ts +10 -0
  201. package/dist/experimental/mini/tui/view.d.ts.map +1 -0
  202. package/dist/experimental/mini/tui/view.js +461 -0
  203. package/dist/experimental/mini/tui/view.js.map +1 -0
  204. package/dist/experimental/mini/worker/entry.d.ts +3 -0
  205. package/dist/experimental/mini/worker/entry.d.ts.map +1 -0
  206. package/dist/experimental/mini/worker/entry.js +10 -0
  207. package/dist/experimental/mini/worker/entry.js.map +1 -0
  208. package/dist/experimental/mini/worker/lane-service.d.ts +44 -0
  209. package/dist/experimental/mini/worker/lane-service.d.ts.map +1 -0
  210. package/dist/experimental/mini/worker/lane-service.js +97 -0
  211. package/dist/experimental/mini/worker/lane-service.js.map +1 -0
  212. package/dist/experimental/mini/worker/models-service.d.ts +19 -0
  213. package/dist/experimental/mini/worker/models-service.d.ts.map +1 -0
  214. package/dist/experimental/mini/worker/models-service.js +136 -0
  215. package/dist/experimental/mini/worker/models-service.js.map +1 -0
  216. package/dist/experimental/mini/worker/run.d.ts +14 -0
  217. package/dist/experimental/mini/worker/run.d.ts.map +1 -0
  218. package/dist/experimental/mini/worker/run.js +88 -0
  219. package/dist/experimental/mini/worker/run.js.map +1 -0
  220. package/dist/experimental/plugin.d.ts +4 -0
  221. package/dist/experimental/plugin.d.ts.map +1 -0
  222. package/dist/experimental/plugin.js +4 -0
  223. package/dist/experimental/plugin.js.map +1 -0
  224. package/dist/experimental/plugins/bundled.d.ts +7 -0
  225. package/dist/experimental/plugins/bundled.d.ts.map +1 -0
  226. package/dist/experimental/plugins/bundled.js +51 -0
  227. package/dist/experimental/plugins/bundled.js.map +1 -0
  228. package/dist/experimental/plugins/package.d.ts +18 -0
  229. package/dist/experimental/plugins/package.d.ts.map +1 -0
  230. package/dist/experimental/plugins/package.js +113 -0
  231. package/dist/experimental/plugins/package.js.map +1 -0
  232. package/dist/experimental/process.d.ts +20 -0
  233. package/dist/experimental/process.d.ts.map +1 -0
  234. package/dist/experimental/process.js +85 -0
  235. package/dist/experimental/process.js.map +1 -0
  236. package/dist/experimental/radius-auth.d.ts +17 -0
  237. package/dist/experimental/radius-auth.d.ts.map +1 -0
  238. package/dist/experimental/radius-auth.js +52 -0
  239. package/dist/experimental/radius-auth.js.map +1 -0
  240. package/dist/experimental/radius-relay.d.ts +90 -0
  241. package/dist/experimental/radius-relay.d.ts.map +1 -0
  242. package/dist/experimental/radius-relay.js +582 -0
  243. package/dist/experimental/radius-relay.js.map +1 -0
  244. package/dist/experimental/server.d.ts +75 -0
  245. package/dist/experimental/server.d.ts.map +1 -0
  246. package/dist/experimental/server.js +682 -0
  247. package/dist/experimental/server.js.map +1 -0
  248. package/dist/experimental/services/agent-controller-provider.d.ts +4 -0
  249. package/dist/experimental/services/agent-controller-provider.d.ts.map +1 -0
  250. package/dist/experimental/services/agent-controller-provider.js +84 -0
  251. package/dist/experimental/services/agent-controller-provider.js.map +1 -0
  252. package/dist/experimental/services/agent-controller.d.ts +57 -0
  253. package/dist/experimental/services/agent-controller.d.ts.map +1 -0
  254. package/dist/experimental/services/agent-controller.js +3 -0
  255. package/dist/experimental/services/agent-controller.js.map +1 -0
  256. package/dist/experimental/services/connection.d.ts +40 -0
  257. package/dist/experimental/services/connection.d.ts.map +1 -0
  258. package/dist/experimental/services/connection.js +301 -0
  259. package/dist/experimental/services/connection.js.map +1 -0
  260. package/dist/experimental/services/models-provider.d.ts +16 -0
  261. package/dist/experimental/services/models-provider.d.ts.map +1 -0
  262. package/dist/experimental/services/models-provider.js +116 -0
  263. package/dist/experimental/services/models-provider.js.map +1 -0
  264. package/dist/experimental/services/models.d.ts +36 -0
  265. package/dist/experimental/services/models.d.ts.map +1 -0
  266. package/dist/experimental/services/models.js +3 -0
  267. package/dist/experimental/services/models.js.map +1 -0
  268. package/dist/experimental/services/plugins.d.ts +16 -0
  269. package/dist/experimental/services/plugins.d.ts.map +1 -0
  270. package/dist/experimental/services/plugins.js +4 -0
  271. package/dist/experimental/services/plugins.js.map +1 -0
  272. package/dist/experimental/services/presentation-ui.d.ts +13 -0
  273. package/dist/experimental/services/presentation-ui.d.ts.map +1 -0
  274. package/dist/experimental/services/presentation-ui.js +3 -0
  275. package/dist/experimental/services/presentation-ui.js.map +1 -0
  276. package/dist/experimental/services/server.d.ts +19 -0
  277. package/dist/experimental/services/server.d.ts.map +1 -0
  278. package/dist/experimental/services/server.js +104 -0
  279. package/dist/experimental/services/server.js.map +1 -0
  280. package/dist/experimental/services/sessions.d.ts +28 -0
  281. package/dist/experimental/services/sessions.d.ts.map +1 -0
  282. package/dist/experimental/services/sessions.js +4 -0
  283. package/dist/experimental/services/sessions.js.map +1 -0
  284. package/dist/experimental/services/slash-commands-provider.d.ts +14 -0
  285. package/dist/experimental/services/slash-commands-provider.d.ts.map +1 -0
  286. package/dist/experimental/services/slash-commands-provider.js +200 -0
  287. package/dist/experimental/services/slash-commands-provider.js.map +1 -0
  288. package/dist/experimental/services/slash-commands.d.ts +24 -0
  289. package/dist/experimental/services/slash-commands.d.ts.map +1 -0
  290. package/dist/experimental/services/slash-commands.js +3 -0
  291. package/dist/experimental/services/slash-commands.js.map +1 -0
  292. package/dist/experimental/services/transcript-provider.d.ts +12 -0
  293. package/dist/experimental/services/transcript-provider.d.ts.map +1 -0
  294. package/dist/experimental/services/transcript-provider.js +109 -0
  295. package/dist/experimental/services/transcript-provider.js.map +1 -0
  296. package/dist/experimental/services/transcript.d.ts +13 -0
  297. package/dist/experimental/services/transcript.d.ts.map +1 -0
  298. package/dist/experimental/services/transcript.js +3 -0
  299. package/dist/experimental/services/transcript.js.map +1 -0
  300. package/dist/experimental/services/worker.d.ts +28 -0
  301. package/dist/experimental/services/worker.d.ts.map +1 -0
  302. package/dist/experimental/services/worker.js +107 -0
  303. package/dist/experimental/services/worker.js.map +1 -0
  304. package/dist/experimental/session-worker-manager.d.ts +24 -0
  305. package/dist/experimental/session-worker-manager.d.ts.map +1 -0
  306. package/dist/experimental/session-worker-manager.js +699 -0
  307. package/dist/experimental/session-worker-manager.js.map +1 -0
  308. package/dist/experimental/session-worker.d.ts +188 -0
  309. package/dist/experimental/session-worker.d.ts.map +1 -0
  310. package/dist/experimental/session-worker.js +785 -0
  311. package/dist/experimental/session-worker.js.map +1 -0
  312. package/dist/experimental/source-resolver.d.ts +2 -0
  313. package/dist/experimental/source-resolver.d.ts.map +1 -0
  314. package/dist/experimental/source-resolver.js +71 -0
  315. package/dist/experimental/source-resolver.js.map +1 -0
  316. package/dist/extensions/background/index.d.ts +5 -4
  317. package/dist/extensions/background/index.d.ts.map +1 -1
  318. package/dist/extensions/background/index.js +9 -5
  319. package/dist/extensions/background/index.js.map +1 -1
  320. package/dist/extensions/subagent/render.d.ts.map +1 -1
  321. package/dist/extensions/subagent/render.js +9 -2
  322. package/dist/extensions/subagent/render.js.map +1 -1
  323. package/dist/image-resize-worker.js +2 -0
  324. package/dist/index.d.ts +1 -1
  325. package/dist/index.d.ts.map +1 -1
  326. package/dist/index.js.map +1 -1
  327. package/dist/main.d.ts.map +1 -1
  328. package/dist/main.js +126 -1
  329. package/dist/main.js.map +1 -1
  330. package/dist/modes/interactive/chat-viewport.d.ts +20 -0
  331. package/dist/modes/interactive/chat-viewport.d.ts.map +1 -0
  332. package/dist/modes/interactive/chat-viewport.js +28 -0
  333. package/dist/modes/interactive/chat-viewport.js.map +1 -0
  334. package/dist/modes/interactive/components/assistant-message.d.ts +1 -0
  335. package/dist/modes/interactive/components/assistant-message.d.ts.map +1 -1
  336. package/dist/modes/interactive/components/assistant-message.js +18 -10
  337. package/dist/modes/interactive/components/assistant-message.js.map +1 -1
  338. package/dist/modes/interactive/components/custom-editor.d.ts +10 -1
  339. package/dist/modes/interactive/components/custom-editor.d.ts.map +1 -1
  340. package/dist/modes/interactive/components/custom-editor.js +37 -1
  341. package/dist/modes/interactive/components/custom-editor.js.map +1 -1
  342. package/dist/modes/interactive/components/index.d.ts +1 -1
  343. package/dist/modes/interactive/components/index.d.ts.map +1 -1
  344. package/dist/modes/interactive/components/index.js.map +1 -1
  345. package/dist/modes/interactive/components/model-selector.d.ts.map +1 -1
  346. package/dist/modes/interactive/components/model-selector.js +5 -14
  347. package/dist/modes/interactive/components/model-selector.js.map +1 -1
  348. package/dist/modes/interactive/components/scoped-models-selector.d.ts.map +1 -1
  349. package/dist/modes/interactive/components/scoped-models-selector.js +13 -15
  350. package/dist/modes/interactive/components/scoped-models-selector.js.map +1 -1
  351. package/dist/modes/interactive/components/settings-selector.d.ts.map +1 -1
  352. package/dist/modes/interactive/components/settings-selector.js +14 -10
  353. package/dist/modes/interactive/components/settings-selector.js.map +1 -1
  354. package/dist/modes/interactive/components/status-indicator.d.ts +3 -1
  355. package/dist/modes/interactive/components/status-indicator.d.ts.map +1 -1
  356. package/dist/modes/interactive/components/status-indicator.js +10 -3
  357. package/dist/modes/interactive/components/status-indicator.js.map +1 -1
  358. package/dist/modes/interactive/components/thinking-selector.js +2 -2
  359. package/dist/modes/interactive/components/thinking-selector.js.map +1 -1
  360. package/dist/modes/interactive/components/tool-execution.d.ts +22 -4
  361. package/dist/modes/interactive/components/tool-execution.d.ts.map +1 -1
  362. package/dist/modes/interactive/components/tool-execution.js +31 -30
  363. package/dist/modes/interactive/components/tool-execution.js.map +1 -1
  364. package/dist/modes/interactive/components/trust-selector.js +2 -2
  365. package/dist/modes/interactive/components/trust-selector.js.map +1 -1
  366. package/dist/modes/interactive/interactive-mode.d.ts +8 -15
  367. package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
  368. package/dist/modes/interactive/interactive-mode.js +95 -80
  369. package/dist/modes/interactive/interactive-mode.js.map +1 -1
  370. package/dist/modes/interactive/session-share.d.ts.map +1 -1
  371. package/dist/modes/interactive/session-share.js +8 -12
  372. package/dist/modes/interactive/session-share.js.map +1 -1
  373. package/dist/modes/interactive/theme/dark.json +2 -1
  374. package/dist/modes/interactive/theme/light.json +2 -1
  375. package/dist/modes/interactive/theme/theme-controller.d.ts +1 -0
  376. package/dist/modes/interactive/theme/theme-controller.d.ts.map +1 -1
  377. package/dist/modes/interactive/theme/theme-controller.js +5 -0
  378. package/dist/modes/interactive/theme/theme-controller.js.map +1 -1
  379. package/dist/modes/interactive/theme/theme-json.d.ts +84 -0
  380. package/dist/modes/interactive/theme/theme-json.d.ts.map +1 -0
  381. package/dist/modes/interactive/theme/theme-json.js +130 -0
  382. package/dist/modes/interactive/theme/theme-json.js.map +1 -0
  383. package/dist/modes/interactive/theme/theme-schema.json +6 -2
  384. package/dist/modes/interactive/theme/theme.d.ts +14 -5
  385. package/dist/modes/interactive/theme/theme.d.ts.map +1 -1
  386. package/dist/modes/interactive/theme/theme.js +18 -119
  387. package/dist/modes/interactive/theme/theme.js.map +1 -1
  388. package/dist/modes/interactive/tui-renderer.d.ts +21 -0
  389. package/dist/modes/interactive/tui-renderer.d.ts.map +1 -0
  390. package/dist/modes/interactive/tui-renderer.js +66 -0
  391. package/dist/modes/interactive/tui-renderer.js.map +1 -0
  392. package/dist/rpc-entry.js +2541 -10
  393. package/dist/utils/exif-orientation.d.ts.map +1 -1
  394. package/dist/utils/exif-orientation.js +2 -3
  395. package/dist/utils/exif-orientation.js.map +1 -1
  396. package/dist/utils/tools-manager.d.ts +1 -0
  397. package/dist/utils/tools-manager.d.ts.map +1 -1
  398. package/dist/utils/tools-manager.js +41 -19
  399. package/dist/utils/tools-manager.js.map +1 -1
  400. package/docs/bundled/extensions/background.md +2 -2
  401. package/docs/bundled/extensions/subagent.md +1 -1
  402. package/docs/development.md +1 -1
  403. package/examples/plugins/pi-example-plugin/README.md +38 -0
  404. package/examples/plugins/pi-example-plugin/package.json +10 -0
  405. package/examples/plugins/pi-example-plugin/src/contract.ts +13 -0
  406. package/examples/plugins/pi-example-plugin/src/session.ts +23 -0
  407. package/examples/plugins/pi-example-plugin/src/tui.ts +31 -0
  408. package/npm-shrinkwrap.json +724 -212
  409. package/package.json +15 -7
  410. package/dist/bun/register-bedrock.d.ts +0 -2
  411. package/dist/bun/register-bedrock.d.ts.map +0 -1
  412. package/dist/bun/register-bedrock.js +0 -4
  413. package/dist/bun/register-bedrock.js.map +0 -1
  414. package/dist/cli/experimental/auth.d.ts +0 -16
  415. package/dist/cli/experimental/auth.d.ts.map +0 -1
  416. package/dist/cli/experimental/auth.js +0 -13
  417. package/dist/cli/experimental/auth.js.map +0 -1
  418. package/dist/cli/experimental/commands/pi.d.ts +0 -15
  419. package/dist/cli/experimental/commands/pi.d.ts.map +0 -1
  420. package/dist/cli/experimental/commands/pi.js +0 -28
  421. package/dist/cli/experimental/commands/pi.js.map +0 -1
  422. package/dist/cli/experimental/transport-address.d.ts +0 -10
  423. package/dist/cli/experimental/transport-address.d.ts.map +0 -1
  424. package/dist/cli/experimental/transport-address.js +0 -38
  425. package/dist/cli/experimental/transport-address.js.map +0 -1
  426. package/dist/client/remote-session.d.ts +0 -53
  427. package/dist/client/remote-session.d.ts.map +0 -1
  428. package/dist/client/remote-session.js +0 -340
  429. package/dist/client/remote-session.js.map +0 -1
  430. package/dist/client/transcript.d.ts +0 -12
  431. package/dist/client/transcript.d.ts.map +0 -1
  432. package/dist/client/transcript.js +0 -98
  433. package/dist/client/transcript.js.map +0 -1
  434. package/dist/server/create-harness.d.ts +0 -26
  435. package/dist/server/create-harness.d.ts.map +0 -1
  436. package/dist/server/create-harness.js +0 -106
  437. package/dist/server/create-harness.js.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session-worker.js","sourceRoot":"","sources":["../../src/experimental/session-worker.ts"],"names":[],"mappings":"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","sourcesContent":["import { createConnection, type Socket } from \"node:net\";\nimport { isAbsolute } from \"node:path\";\nimport {\n\tisJsonValue,\n\ttype JsonValue,\n\tparseServiceProviderUpdate,\n\tREMOTE_SERVICE_ERROR_CODES,\n\tRemoteServiceError,\n\ttype RemoteServiceErrorCode,\n\ttype ServiceCall,\n\ttype ServiceProviderUpdate,\n} from \"@earendil-works/chord\";\nimport {\n\tAgentHarness,\n\ttype AgentHarness as AgentHarnessInstance,\n\ttype AgentLane,\n\tBACKGROUND_CONTEXT,\n\tcreateBashTool,\n\tcreateReadTool,\n\tcreateWriteTool,\n\ttype JsonlSessionMetadata,\n\tJsonlSessionRepo,\n\ttype Session,\n\tTODO_CONTEXT,\n\twithCancel,\n} from \"@earendil-works/pi-agent-core\";\nimport { NodeExecutionEnv } from \"@earendil-works/pi-agent-core/node\";\nimport lockfile from \"proper-lockfile\";\nimport Type, { type Static } from \"typebox\";\nimport { Check } from \"typebox/value\";\nimport { findInitialModel, resolveCliModel } from \"../core/model-resolver.ts\";\nimport { ModelRuntime } from \"../core/model-runtime.ts\";\nimport { SettingsManager } from \"../core/settings-manager.ts\";\nimport { COORDINATOR_PROTOCOL_VERSION } from \"./coordinator.ts\";\nimport { createSessionPluginFacetLoader } from \"./plugins/bundled.ts\";\nimport {\n\tconsumeInternalProcessRole,\n\tencodeControlLine,\n\tisDirectInternalProcessEntry,\n\tMAX_CONTROL_LINE_BYTES,\n} from \"./process.ts\";\nimport {\n\tcreateSessionWorkerServices,\n\ttype SessionWorkerRuntime,\n\ttype SessionWorkerServices,\n\ttype WorkerServiceScope,\n} from \"./services/worker.ts\";\n\nexport type { SessionWorkerRuntime } from \"./services/worker.ts\";\n\nconst StrictObject = <const T extends Parameters<typeof Type.Object>[0]>(properties: T) =>\n\tType.Object(properties, { additionalProperties: false });\nconst OpaqueJsonValueSchema = Type.Unsafe<JsonValue>(Type.Unknown());\nconst ServiceCallSchema = Type.Unsafe<ServiceCall>(\n\tStrictObject({\n\t\tserviceId: Type.String({ minLength: 1 }),\n\t\tinstance: Type.Optional(\n\t\t\tStrictObject({ key: Type.String({ minLength: 1 }), generation: Type.Integer({ minimum: 1 }) }),\n\t\t),\n\t\tmember: Type.String({ minLength: 1 }),\n\t\targs: Type.Array(Type.Unknown()),\n\t}),\n);\nconst RemoteServiceErrorCodeSchema = Type.Unsafe<RemoteServiceErrorCode>(\n\tType.String({ pattern: `^(?:${REMOTE_SERVICE_ERROR_CODES.join(\"|\")})$` }),\n);\n\nexport const SESSION_WORKER_CONTROL_ADDRESS_ENV = \"PI_SESSION_WORKER_CONTROL_ADDRESS\";\nexport const SESSION_WORKER_CONTROL_TOKEN_ENV = \"PI_SESSION_WORKER_CONTROL_TOKEN\";\nexport const SESSION_WORKER_SESSION_KEY_ENV = \"PI_SESSION_WORKER_SESSION_KEY_BASE64\";\nexport const SESSION_WORKER_PEER_ID_ENV = \"PI_SESSION_WORKER_PEER_ID\";\n\nexport const SessionWorkerMetadataSchema = StrictObject({\n\tid: Type.String({ minLength: 1 }),\n\tcreatedAt: Type.Integer(),\n\tstorageVersion: Type.Integer(),\n\tcwd: Type.String(),\n\tpath: Type.String(),\n\tmodifiedAt: Type.Number(),\n\tparentSessionId: Type.Optional(Type.String()),\n});\n\nexport const SessionWorkerOptionsSchema = StrictObject({\n\tsessionDir: Type.String({ minLength: 1 }),\n\tmetadata: SessionWorkerMetadataSchema,\n\tprovider: Type.Optional(Type.String({ minLength: 1 })),\n\tmodel: Type.Optional(Type.String({ minLength: 1 })),\n\tpluginManifestPaths: Type.Array(Type.String({ minLength: 1 })),\n});\nexport type SessionWorkerOptions = Static<typeof SessionWorkerOptionsSchema>;\n\nexport const WorkerOperationScopeSchema = StrictObject({\n\tserverConnectionId: Type.String(),\n\tattachmentId: Type.String(),\n});\nexport type WorkerOperationScope = WorkerServiceScope;\n\nexport const WorkerOperationRequestSchema = StrictObject({\n\ttype: Type.Literal(\"operation\"),\n\trequestId: Type.String({ minLength: 1 }),\n\tscope: WorkerOperationScopeSchema,\n\tcall: ServiceCallSchema,\n});\nexport type WorkerOperationRequest = Static<typeof WorkerOperationRequestSchema>;\n\nexport const WorkerOperationResponseSchema = Type.Union([\n\tStrictObject({\n\t\ttype: Type.Literal(\"operation_result\"),\n\t\trequestId: Type.String({ minLength: 1 }),\n\t\tscope: WorkerOperationScopeSchema,\n\t\tresult: Type.Optional(OpaqueJsonValueSchema),\n\t}),\n\tStrictObject({\n\t\ttype: Type.Literal(\"operation_error\"),\n\t\trequestId: Type.String({ minLength: 1 }),\n\t\tscope: WorkerOperationScopeSchema,\n\t\tcode: Type.Optional(RemoteServiceErrorCodeSchema),\n\t\tmessage: Type.String(),\n\t}),\n]);\nexport type WorkerOperationResponse = Static<typeof WorkerOperationResponseSchema>;\n\nexport const SessionWorkerCommandSchema = Type.Union([\n\tType.Object({ type: Type.Literal(\"shutdown\") }),\n\tType.Object({ type: Type.Literal(\"discover_workers\") }),\n\tType.Object({\n\t\ttype: Type.Literal(\"session_demand\"),\n\t\tserverConnectionId: Type.String(),\n\t\trequestId: Type.String(),\n\t\tattachmentId: Type.String(),\n\t\tattached: Type.Boolean(),\n\t}),\n\tWorkerOperationRequestSchema,\n\tStrictObject({\n\t\ttype: Type.Literal(\"operation_cancel\"),\n\t\trequestId: Type.String({ minLength: 1 }),\n\t\tscope: WorkerOperationScopeSchema,\n\t}),\n]);\nexport type SessionWorkerCommand = Static<typeof SessionWorkerCommandSchema>;\n\nexport const SessionWorkerEventSchema = Type.Union([\n\tType.Object({\n\t\ttype: Type.Literal(\"worker_ready\"),\n\t\ttoken: Type.String(),\n\t\tsessionKey: Type.String(),\n\t\tsessionId: Type.String(),\n\t\tpid: Type.Integer({ minimum: 1 }),\n\t\tmetadata: SessionWorkerMetadataSchema,\n\t\tpluginManifestPaths: Type.Array(Type.String({ minLength: 1 })),\n\t}),\n\tType.Object({\n\t\ttype: Type.Literal(\"worker_failed\"),\n\t\ttoken: Type.String(),\n\t\tsessionKey: Type.String(),\n\t\tmessage: Type.String(),\n\t}),\n\tType.Object({\n\t\ttype: Type.Literal(\"demand_applied\"),\n\t\ttoken: Type.String(),\n\t\tsessionKey: Type.String(),\n\t\trequestId: Type.String(),\n\t\tattachmentId: Type.String(),\n\t\tattached: Type.Boolean(),\n\t}),\n\tType.Object({\n\t\ttype: Type.Literal(\"demand_rejected\"),\n\t\ttoken: Type.String(),\n\t\tsessionKey: Type.String(),\n\t\trequestId: Type.String(),\n\t\tmessage: Type.String(),\n\t}),\n\tType.Object({\n\t\ttype: Type.Literal(\"operation_response\"),\n\t\ttoken: Type.String(),\n\t\tsessionKey: Type.String(),\n\t\tresponse: WorkerOperationResponseSchema,\n\t}),\n\tType.Object({\n\t\ttype: Type.Literal(\"service_update\"),\n\t\ttoken: Type.String(),\n\t\tsessionKey: Type.String(),\n\t\tscope: WorkerOperationScopeSchema,\n\t\tsubscriptionId: Type.String({ minLength: 1 }),\n\t\tupdate: Type.Unknown(),\n\t}),\n]);\nexport type SessionWorkerEvent = Static<typeof SessionWorkerEventSchema>;\n\n/** Worker-local reconciliation of server-generation demand and Harness activity. */\nexport class WorkerLifecycle {\n\treadonly #initialDemandGraceMs: number;\n\treadonly #orphanDemandGraceMs: number;\n\treadonly #onRetire: () => void;\n\treadonly #demands = new Map<string, { serverConnectionId: string; attachmentId: string; timer?: NodeJS.Timeout }>();\n\treadonly #activeOperations = new Set<string>();\n\t#currentServerConnectionId: string | undefined;\n\t#initialTimer: NodeJS.Timeout | undefined;\n\t#demandInitialized: boolean;\n\t#retirementHolds = 0;\n\t#retiring = false;\n\n\tconstructor(options: {\n\t\tinitialServerConnectionId?: string;\n\t\tinitialDemandGraceMs: number;\n\t\torphanDemandGraceMs: number;\n\t\tonRetire(): void;\n\t}) {\n\t\tthis.#currentServerConnectionId = options.initialServerConnectionId;\n\t\tthis.#initialDemandGraceMs = options.initialDemandGraceMs;\n\t\tthis.#orphanDemandGraceMs = options.orphanDemandGraceMs;\n\t\tthis.#onRetire = options.onRetire;\n\t\tthis.#demandInitialized = false;\n\t\tthis.#initialTimer = setTimeout(() => {\n\t\t\tthis.#initialTimer = undefined;\n\t\t\tthis.#demandInitialized = true;\n\t\t\tthis.#reconcile();\n\t\t}, this.#initialDemandGraceMs);\n\t\tthis.#initialTimer.unref();\n\t}\n\n\tserverConnected(serverConnectionId: string): void {\n\t\tthis.#currentServerConnectionId = serverConnectionId;\n\t\tfor (const demand of this.#demands.values()) {\n\t\t\tif (demand.serverConnectionId !== serverConnectionId || !demand.timer) continue;\n\t\t\tclearTimeout(demand.timer);\n\t\t\tdelete demand.timer;\n\t\t}\n\t}\n\n\tserverDisconnected(serverConnectionId: string): void {\n\t\tif (this.#currentServerConnectionId === serverConnectionId) this.#currentServerConnectionId = undefined;\n\t\tfor (const [key, demand] of this.#demands) {\n\t\t\tif (demand.serverConnectionId !== serverConnectionId || demand.timer) continue;\n\t\t\tdemand.timer = setTimeout(() => {\n\t\t\t\tif (this.#demands.get(key) !== demand) return;\n\t\t\t\tthis.#demands.delete(key);\n\t\t\t\tthis.#reconcile();\n\t\t\t}, this.#orphanDemandGraceMs);\n\t\t\tdemand.timer.unref();\n\t\t}\n\t}\n\n\tbeginRequest(serverConnectionId: string, attachmentId: string): () => void {\n\t\tif (this.#retiring) throw new Error(\"Session worker is retiring\");\n\t\tif (serverConnectionId !== this.#currentServerConnectionId) {\n\t\t\tthrow new Error(\"Session worker received a request from a stale server generation\");\n\t\t}\n\t\tconst demand = this.#demands.get(demandKey(serverConnectionId, attachmentId));\n\t\tif (!demand || demand.timer) {\n\t\t\tthrow new Error(\"Session worker request does not match the active attachment\");\n\t\t}\n\t\treturn this.holdRetirement();\n\t}\n\n\tholdRetirement(): () => void {\n\t\tthis.#retirementHolds += 1;\n\t\tlet released = false;\n\t\treturn () => {\n\t\t\tif (released) return;\n\t\t\treleased = true;\n\t\t\tthis.#retirementHolds -= 1;\n\t\t\tthis.#reconcile();\n\t\t};\n\t}\n\n\tsetDemand(serverConnectionId: string, attachmentId: string, attached: boolean): void {\n\t\tif (this.#retiring) throw new Error(\"Session worker is retiring\");\n\t\tif (serverConnectionId !== this.#currentServerConnectionId) {\n\t\t\tthrow new Error(\"Session worker received demand from a stale server generation\");\n\t\t}\n\t\tthis.#demandInitialized = true;\n\t\tif (this.#initialTimer) {\n\t\t\tclearTimeout(this.#initialTimer);\n\t\t\tthis.#initialTimer = undefined;\n\t\t}\n\t\tconst key = demandKey(serverConnectionId, attachmentId);\n\t\tconst previous = this.#demands.get(key);\n\t\tif (previous?.timer) clearTimeout(previous.timer);\n\t\tif (attached) this.#demands.set(key, { serverConnectionId, attachmentId });\n\t\telse this.#demands.delete(key);\n\t\tthis.#reconcile();\n\t}\n\n\toperationStarted(kind: \"run\" | \"compaction\" | \"navigation\", lane: string, operationId: string): void {\n\t\tthis.#activeOperations.add(`${kind}\\0${lane}\\0${operationId}`);\n\t}\n\n\toperationStopped(kind: \"run\" | \"compaction\" | \"navigation\", lane: string, operationId: string): void {\n\t\tthis.#activeOperations.delete(`${kind}\\0${lane}\\0${operationId}`);\n\t\tthis.#reconcile();\n\t}\n\n\tclose(): void {\n\t\tif (this.#initialTimer) clearTimeout(this.#initialTimer);\n\t\tfor (const demand of this.#demands.values()) {\n\t\t\tif (demand.timer) clearTimeout(demand.timer);\n\t\t}\n\t\tthis.#demands.clear();\n\t}\n\n\t#reconcile(): void {\n\t\tif (\n\t\t\tthis.#retiring ||\n\t\t\t!this.#demandInitialized ||\n\t\t\tthis.#retirementHolds !== 0 ||\n\t\t\tthis.#activeOperations.size !== 0 ||\n\t\t\tthis.#demands.size !== 0\n\t\t) {\n\t\t\treturn;\n\t\t}\n\t\tthis.#retiring = true;\n\t\tthis.#onRetire();\n\t}\n}\n\nconst DEFAULT_INITIAL_DEMAND_GRACE_MS = 10_000;\nconst DEFAULT_ORPHAN_DEMAND_GRACE_MS = 30_000;\nexport const SESSION_WORKER_INITIAL_DEMAND_GRACE_ENV = \"__PI_SESSION_WORKER_INITIAL_DEMAND_GRACE_MS\";\nexport const SESSION_WORKER_ORPHAN_DEMAND_GRACE_ENV = \"__PI_SESSION_WORKER_ORPHAN_DEMAND_GRACE_MS\";\n\nconst CoordinatorInputSchema = Type.Union([\n\tType.Object({\n\t\ttype: Type.Literal(\"peer_registered\"),\n\t\tpeerId: Type.String(),\n\t\tserverConnectionId: Type.Optional(Type.String()),\n\t}),\n\tType.Object({ type: Type.Literal(\"server_connected\"), serverConnectionId: Type.String() }),\n\tType.Object({ type: Type.Literal(\"server_disconnected\"), serverConnectionId: Type.String() }),\n\tType.Object({ type: Type.Literal(\"message\"), from: Type.Literal(\"server\"), payload: Type.Unknown() }),\n]);\ntype CoordinatorInput = Static<typeof CoordinatorInputSchema>;\n\ninterface WorkerControl {\n\treadonly initialServerConnectionId?: string;\n\treadonly messages: AsyncIterable<unknown>;\n\treadonly socket: Socket;\n\tsend(event: SessionWorkerEvent): Promise<void>;\n}\n\nlet failureControl: WorkerControl | undefined;\n\nasync function connectControl(): Promise<WorkerControl> {\n\tconst address = process.env[SESSION_WORKER_CONTROL_ADDRESS_ENV];\n\tconst token = process.env[SESSION_WORKER_CONTROL_TOKEN_ENV];\n\tconst encodedSessionKey = process.env[SESSION_WORKER_SESSION_KEY_ENV];\n\tif (!address || !token || !encodedSessionKey) throw new Error(\"Session worker requires a control address\");\n\tconst peerId = process.env[SESSION_WORKER_PEER_ID_ENV];\n\tif (!peerId) throw new Error(\"Session worker requires a peer ID\");\n\tconst socket = createConnection(address);\n\tawait new Promise<void>((resolve, reject) => {\n\t\tsocket.once(\"connect\", resolve);\n\t\tsocket.once(\"error\", reject);\n\t});\n\tconst messages = createJsonLineMessages(socket);\n\tawait writeJsonLine(socket, { type: \"register_peer\", protocol: COORDINATOR_PROTOCOL_VERSION, peerId });\n\tconst registered = await messages[Symbol.asyncIterator]().next();\n\tif (\n\t\tregistered.done ||\n\t\t!Check(CoordinatorInputSchema, registered.value) ||\n\t\tregistered.value.type !== \"peer_registered\"\n\t) {\n\t\tthrow new Error(\"Coordinator rejected the session worker registration\");\n\t}\n\treturn {\n\t\t...(registered.value.serverConnectionId === undefined\n\t\t\t? {}\n\t\t\t: { initialServerConnectionId: registered.value.serverConnectionId }),\n\t\tmessages,\n\t\tsocket,\n\t\tsend: (event) => writeJsonLine(socket, { type: \"send\", to: \"server\", payload: event }),\n\t};\n}\n\nasync function readCommands(\n\tcontrol: WorkerControl,\n\thandlers: {\n\t\tonShutdown(): void;\n\t\tonDiscovery(): void;\n\t\tonDemand(command: Extract<SessionWorkerCommand, { type: \"session_demand\" }>): Promise<void>;\n\t\tonOperation(command: WorkerOperationRequest): void;\n\t\tonOperationCancel(command: Extract<SessionWorkerCommand, { type: \"operation_cancel\" }>): void;\n\t\tonServerConnected(serverConnectionId: string): void;\n\t\tonServerDisconnected(serverConnectionId: string): void;\n\t},\n): Promise<void> {\n\tfor await (const value of control.messages) {\n\t\tif (!Check(CoordinatorInputSchema, value)) {\n\t\t\tcontrol.socket.destroy(new Error(\"Coordinator sent an invalid worker message\"));\n\t\t\treturn;\n\t\t}\n\t\tconst message: CoordinatorInput = value;\n\t\tif (message.type === \"server_connected\") {\n\t\t\thandlers.onServerConnected(message.serverConnectionId);\n\t\t\tcontinue;\n\t\t}\n\t\tif (message.type === \"server_disconnected\") {\n\t\t\thandlers.onServerDisconnected(message.serverConnectionId);\n\t\t\tcontinue;\n\t\t}\n\t\tif (message.type !== \"message\" || !Check(SessionWorkerCommandSchema, message.payload)) continue;\n\t\tconst command: SessionWorkerCommand = message.payload;\n\t\tif (command.type === \"shutdown\") handlers.onShutdown();\n\t\telse if (command.type === \"discover_workers\") handlers.onDiscovery();\n\t\telse if (command.type === \"session_demand\") await handlers.onDemand(command);\n\t\telse if (command.type === \"operation_cancel\") handlers.onOperationCancel(command);\n\t\telse handlers.onOperation(command);\n\t}\n}\n\nfunction createJsonLineMessages(socket: Socket): AsyncIterable<unknown> {\n\tconst queued: unknown[] = [];\n\tconst waiters: ((value: unknown) => void)[] = [];\n\tlet buffered = \"\";\n\tsocket.setEncoding(\"utf8\");\n\tsocket.on(\"data\", (chunk: string) => {\n\t\tbuffered += chunk;\n\t\tif (Buffer.byteLength(buffered) > MAX_CONTROL_LINE_BYTES) {\n\t\t\tsocket.destroy(new Error(\"Session worker control message is too large\"));\n\t\t\treturn;\n\t\t}\n\t\twhile (true) {\n\t\t\tconst newline = buffered.indexOf(\"\\n\");\n\t\t\tif (newline === -1) return;\n\t\t\tconst line = buffered.slice(0, newline);\n\t\t\tbuffered = buffered.slice(newline + 1);\n\t\t\ttry {\n\t\t\t\tconst value: unknown = JSON.parse(line);\n\t\t\t\tconst waiter = waiters.shift();\n\t\t\t\tif (waiter) waiter(value);\n\t\t\t\telse queued.push(value);\n\t\t\t} catch {\n\t\t\t\tsocket.destroy(new Error(\"Session worker received invalid control JSON\"));\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\t});\n\treturn {\n\t\t[Symbol.asyncIterator]() {\n\t\t\treturn {\n\t\t\t\tnext: async () => {\n\t\t\t\t\tconst value = queued.shift() ?? (await new Promise<unknown>((resolve) => waiters.push(resolve)));\n\t\t\t\t\treturn { done: false as const, value };\n\t\t\t\t},\n\t\t\t};\n\t\t},\n\t};\n}\n\nfunction writeJsonLine(socket: Socket, message: unknown): Promise<void> {\n\treturn new Promise((resolve, reject) => {\n\t\tsocket.write(encodeControlLine(message), (error) => {\n\t\t\tif (error) reject(error);\n\t\t\telse resolve();\n\t\t});\n\t});\n}\n\nfunction toWorkerServiceUpdate(update: ServiceProviderUpdate): ServiceProviderUpdate {\n\tif (!isJsonValue(update)) throw new Error(\"Service produced a non-JSON update\");\n\treturn parseServiceProviderUpdate(update);\n}\n\nfunction demandKey(serverConnectionId: string, attachmentId: string): string {\n\treturn `${serverConnectionId}\\0${attachmentId}`;\n}\n\nfunction sameScope(left: WorkerOperationScope, right: WorkerOperationScope): boolean {\n\treturn left.serverConnectionId === right.serverConnectionId && left.attachmentId === right.attachmentId;\n}\n\nfunction lifecycleDelay(name: string, fallback: number): number {\n\tconst value = process.env[name];\n\tif (value === undefined) return fallback;\n\tconst parsed = Number(value);\n\tif (!Number.isSafeInteger(parsed) || parsed < 0) throw new Error(`${name} must be a non-negative safe integer`);\n\treturn parsed;\n}\n\nasync function closeResources(resources: {\n\tharness?: AgentHarnessInstance;\n\tservices?: SessionWorkerServices;\n\tsession?: Session<JsonlSessionMetadata>;\n\trepo: JsonlSessionRepo;\n\texecutionEnv: NodeExecutionEnv;\n\treleaseOwnership: () => Promise<void>;\n}): Promise<void> {\n\tconst errors: unknown[] = [];\n\ttry {\n\t\tawait resources.services?.dispose();\n\t} catch (error) {\n\t\terrors.push(error);\n\t}\n\ttry {\n\t\tif (resources.harness) await resources.harness.close(TODO_CONTEXT);\n\t\telse await resources.session?.close(TODO_CONTEXT);\n\t} catch (error) {\n\t\terrors.push(error);\n\t}\n\ttry {\n\t\tawait resources.repo.close(TODO_CONTEXT);\n\t} catch (error) {\n\t\terrors.push(error);\n\t}\n\ttry {\n\t\tawait resources.executionEnv.cleanup(TODO_CONTEXT);\n\t} catch (error) {\n\t\terrors.push(error);\n\t}\n\ttry {\n\t\tawait resources.releaseOwnership();\n\t} catch (error) {\n\t\terrors.push(error);\n\t}\n\tif (errors.length === 1) throw errors[0];\n\tif (errors.length > 1) throw new AggregateError(errors, \"Session worker cleanup failed\");\n}\n\nexport type CreateSessionWorkerHarness = (\n\tsession: Session<JsonlSessionMetadata>,\n\toptions: SessionWorkerOptions,\n\texecutionEnv: NodeExecutionEnv,\n) => Promise<SessionWorkerRuntime>;\n\nasync function run(options: SessionWorkerOptions, createHarness: CreateSessionWorkerHarness): Promise<void> {\n\tconst { sessionDir, metadata } = options;\n\tconst sessionId = metadata.id;\n\tconst control = await connectControl();\n\tconst token = process.env[SESSION_WORKER_CONTROL_TOKEN_ENV]!;\n\tconst sessionKey = Buffer.from(process.env[SESSION_WORKER_SESSION_KEY_ENV]!, \"base64url\").toString();\n\tfailureControl = control;\n\tconst pluginManifestPaths = options.pluginManifestPaths;\n\tconst releaseOwnership = await lockfile.lock(metadata.path, {\n\t\trealpath: true,\n\t\tstale: 2_000,\n\t\tupdate: 1_000,\n\t\tretries: { retries: 320, factor: 1, minTimeout: 25, maxTimeout: 25, maxRetryTime: 8_000 },\n\t});\n\tconst executionEnv = new NodeExecutionEnv({ cwd: metadata.cwd });\n\tconst repo = new JsonlSessionRepo({ fileSystem: executionEnv, sessionsRoot: sessionDir });\n\tlet session: Session<JsonlSessionMetadata> | undefined;\n\tlet harness: AgentHarnessInstance | undefined;\n\tlet lane: AgentLane | undefined;\n\tlet services: SessionWorkerServices | undefined;\n\ttry {\n\t\tsession = await repo.open(metadata, TODO_CONTEXT);\n\t\tconst runtime = await createHarness(session, options, executionEnv);\n\t\tharness = runtime.harness;\n\t\tlane = runtime.lane ?? (await harness.lane(\"main\", TODO_CONTEXT));\n\t\tservices = await createSessionWorkerServices({\n\t\t\tlane,\n\t\t\tmodelRuntime: runtime.modelRuntime,\n\t\t\tsettingsManager: runtime.settingsManager,\n\t\t\tfacetLoader: runtime.facetLoader,\n\t\t\tpublish: (scope, subscriptionId, update) =>\n\t\t\t\tcontrol.send({\n\t\t\t\t\ttype: \"service_update\",\n\t\t\t\t\ttoken,\n\t\t\t\t\tsessionKey,\n\t\t\t\t\tscope,\n\t\t\t\t\tsubscriptionId,\n\t\t\t\t\tupdate: toWorkerServiceUpdate(update),\n\t\t\t\t}),\n\t\t});\n\t} catch (error) {\n\t\ttry {\n\t\t\tawait closeResources({ harness, services, session, repo, executionEnv, releaseOwnership });\n\t\t} catch (cleanupError) {\n\t\t\tthrow new AggregateError([error, cleanupError], \"Session worker startup and cleanup failed\");\n\t\t}\n\t\tthrow error;\n\t}\n\n\tconst activeRequests = new Map<\n\t\tstring,\n\t\t{ readonly scope: WorkerOperationScope; readonly cancel: (reason?: unknown) => void }\n\t>();\n\tlet lifecycle: WorkerLifecycle | undefined;\n\tlet removeLifecycleListeners: (() => void)[] = [];\n\tlet closing: Promise<void> | undefined;\n\tconst close = (): Promise<void> => {\n\t\tif (closing) return closing;\n\t\tlifecycle?.close();\n\t\tservices.removeSubscriptions(() => true);\n\t\tfor (const request of activeRequests.values()) request.cancel(new Error(\"Session worker is closing\"));\n\t\tactiveRequests.clear();\n\t\tfor (const remove of removeLifecycleListeners) remove();\n\t\tremoveLifecycleListeners = [];\n\t\tclosing = closeResources({ harness, services, repo, executionEnv, releaseOwnership });\n\t\treturn closing;\n\t};\n\tconst closeAndExit = (): void => {\n\t\tvoid close().then(\n\t\t\t() => process.exit(0),\n\t\t\t(error: unknown) => {\n\t\t\t\tconsole.error(error);\n\t\t\t\tprocess.exit(1);\n\t\t\t},\n\t\t);\n\t};\n\n\tlifecycle = new WorkerLifecycle({\n\t\tinitialServerConnectionId: control.initialServerConnectionId,\n\t\tinitialDemandGraceMs: lifecycleDelay(SESSION_WORKER_INITIAL_DEMAND_GRACE_ENV, DEFAULT_INITIAL_DEMAND_GRACE_MS),\n\t\torphanDemandGraceMs: lifecycleDelay(SESSION_WORKER_ORPHAN_DEMAND_GRACE_ENV, DEFAULT_ORPHAN_DEMAND_GRACE_MS),\n\t\tonRetire: closeAndExit,\n\t});\n\tremoveLifecycleListeners = [\n\t\tharness.events.on(\"run_start\", (event) => lifecycle?.operationStarted(\"run\", event.lane, event.runId)),\n\t\tharness.events.on(\"run_resume\", (event) => lifecycle?.operationStarted(\"run\", event.lane, event.runId)),\n\t\tharness.events.on(\"run_suspend\", (event) => lifecycle?.operationStopped(\"run\", event.lane, event.runId)),\n\t\tharness.events.on(\"run_end\", (event) => lifecycle?.operationStopped(\"run\", event.lane, event.runId)),\n\t\tharness.events.on(\"compaction_start\", (event) =>\n\t\t\tlifecycle?.operationStarted(\"compaction\", event.lane, event.runId),\n\t\t),\n\t\tharness.events.on(\"compaction_end\", (event) =>\n\t\t\tlifecycle?.operationStopped(\"compaction\", event.lane, event.runId),\n\t\t),\n\t\tharness.events.on(\"navigation_start\", (event) =>\n\t\t\tlifecycle?.operationStarted(\"navigation\", event.lane, event.runId),\n\t\t),\n\t\tharness.events.on(\"navigation_end\", (event) =>\n\t\t\tlifecycle?.operationStopped(\"navigation\", event.lane, event.runId),\n\t\t),\n\t\tharness.events.on(\"fault\", closeAndExit),\n\t];\n\n\tconst handleOperation = async (request: WorkerOperationRequest): Promise<void> => {\n\t\tlet releaseRequest = (): void => {};\n\t\tconst cancellable = withCancel(BACKGROUND_CONTEXT);\n\t\ttry {\n\t\t\treleaseRequest = lifecycle!.beginRequest(request.scope.serverConnectionId, request.scope.attachmentId);\n\t\t\tactiveRequests.set(request.requestId, { scope: request.scope, cancel: cancellable.cancel });\n\t\t\tconst result = await services.invoke(request.call, request.scope, cancellable.context);\n\t\t\tif (result !== undefined && !isJsonValue(result)) throw new Error(\"Service produced a non-JSON result\");\n\t\t\tawait control.send({\n\t\t\t\ttype: \"operation_response\",\n\t\t\t\ttoken,\n\t\t\t\tsessionKey,\n\t\t\t\tresponse: {\n\t\t\t\t\ttype: \"operation_result\",\n\t\t\t\t\trequestId: request.requestId,\n\t\t\t\t\tscope: request.scope,\n\t\t\t\t\t...(result === undefined ? {} : { result }),\n\t\t\t\t},\n\t\t\t});\n\t\t} catch (error) {\n\t\t\tlet code: RemoteServiceErrorCode | undefined;\n\t\t\tif (error instanceof RemoteServiceError) {\n\t\t\t\tcode = error.code;\n\t\t\t} else if (error instanceof Error && \"code\" in error) {\n\t\t\t\tconst candidate = error.code;\n\t\t\t\tif (Check(RemoteServiceErrorCodeSchema, candidate)) code = candidate;\n\t\t\t}\n\t\t\tawait control.send({\n\t\t\t\ttype: \"operation_response\",\n\t\t\t\ttoken,\n\t\t\t\tsessionKey,\n\t\t\t\tresponse: {\n\t\t\t\t\ttype: \"operation_error\",\n\t\t\t\t\trequestId: request.requestId,\n\t\t\t\t\tscope: request.scope,\n\t\t\t\t\t...(code === undefined ? {} : { code }),\n\t\t\t\t\tmessage: error instanceof Error ? error.message : String(error),\n\t\t\t\t},\n\t\t\t});\n\t\t} finally {\n\t\t\tif (activeRequests.get(request.requestId)?.cancel === cancellable.cancel) {\n\t\t\t\tactiveRequests.delete(request.requestId);\n\t\t\t}\n\t\t\treleaseRequest();\n\t\t}\n\t};\n\n\tlet ready = false;\n\tconst announce = (): void => {\n\t\tif (!ready) return;\n\t\tvoid control\n\t\t\t.send({\n\t\t\t\ttype: \"worker_ready\",\n\t\t\t\ttoken,\n\t\t\t\tsessionKey,\n\t\t\t\tsessionId,\n\t\t\t\tpid: process.pid,\n\t\t\t\tmetadata,\n\t\t\t\tpluginManifestPaths: [...pluginManifestPaths],\n\t\t\t})\n\t\t\t.catch(() => closeAndExit());\n\t};\n\tvoid readCommands(control, {\n\t\tonShutdown: closeAndExit,\n\t\tonDiscovery: announce,\n\t\tonDemand: async (command) => {\n\t\t\tconst releaseRetirement = lifecycle?.holdRetirement() ?? (() => {});\n\t\t\ttry {\n\t\t\t\ttry {\n\t\t\t\t\tif (!command.attached) {\n\t\t\t\t\t\tconst matches = (scope: WorkerOperationScope): boolean =>\n\t\t\t\t\t\t\tscope.serverConnectionId === command.serverConnectionId &&\n\t\t\t\t\t\t\tscope.attachmentId === command.attachmentId;\n\t\t\t\t\t\tservices.removeSubscriptions(matches);\n\t\t\t\t\t}\n\t\t\t\t\tlifecycle?.setDemand(command.serverConnectionId, command.attachmentId, command.attached);\n\t\t\t\t} catch (error) {\n\t\t\t\t\tawait control.send({\n\t\t\t\t\t\ttype: \"demand_rejected\",\n\t\t\t\t\t\ttoken,\n\t\t\t\t\t\tsessionKey,\n\t\t\t\t\t\trequestId: command.requestId,\n\t\t\t\t\t\tmessage: error instanceof Error ? error.message : String(error),\n\t\t\t\t\t});\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tawait control.send({\n\t\t\t\t\ttype: \"demand_applied\",\n\t\t\t\t\ttoken,\n\t\t\t\t\tsessionKey,\n\t\t\t\t\trequestId: command.requestId,\n\t\t\t\t\tattachmentId: command.attachmentId,\n\t\t\t\t\tattached: command.attached,\n\t\t\t\t});\n\t\t\t} finally {\n\t\t\t\treleaseRetirement();\n\t\t\t}\n\t\t},\n\t\tonOperation: (request) => {\n\t\t\tvoid handleOperation(request).catch(() => closeAndExit());\n\t\t},\n\t\tonOperationCancel: (command) => {\n\t\t\tconst active = activeRequests.get(command.requestId);\n\t\t\tif (active !== undefined && sameScope(active.scope, command.scope)) {\n\t\t\t\tactive.cancel(new DOMException(\"Service operation cancelled\", \"AbortError\"));\n\t\t\t}\n\t\t},\n\t\tonServerConnected: (serverConnectionId) => lifecycle?.serverConnected(serverConnectionId),\n\t\tonServerDisconnected: (serverConnectionId) => {\n\t\t\tconst matches = (scope: WorkerOperationScope): boolean => scope.serverConnectionId === serverConnectionId;\n\t\t\tservices.removeSubscriptions(matches);\n\t\t\tfor (const request of activeRequests.values()) {\n\t\t\t\tif (matches(request.scope)) request.cancel(new Error(\"Server disconnected\"));\n\t\t\t}\n\t\t\tlifecycle?.serverDisconnected(serverConnectionId);\n\t\t},\n\t}).catch(() => closeAndExit());\n\tcontrol.socket.once(\"close\", closeAndExit);\n\tcontrol.socket.once(\"error\", () => closeAndExit());\n\tprocess.once(\"SIGTERM\", closeAndExit);\n\tprocess.once(\"SIGINT\", closeAndExit);\n\n\ttry {\n\t\tready = true;\n\t\tawait control.send({\n\t\t\ttype: \"worker_ready\",\n\t\t\ttoken,\n\t\t\tsessionKey,\n\t\t\tsessionId,\n\t\t\tpid: process.pid,\n\t\t\tmetadata,\n\t\t\tpluginManifestPaths: [...pluginManifestPaths],\n\t\t});\n\t} catch (error) {\n\t\ttry {\n\t\t\tawait close();\n\t\t} catch (cleanupError) {\n\t\t\tthrow new AggregateError([error, cleanupError], \"Session worker readiness and cleanup failed\");\n\t\t}\n\t\tthrow error;\n\t}\n}\n\nexport async function runSessionWorkerWithHarness(\n\targs: readonly string[],\n\tcreateHarness: CreateSessionWorkerHarness,\n): Promise<void> {\n\ttry {\n\t\tif (args.length !== 1) throw new Error(\"Session worker requires one options argument\");\n\t\tlet options: unknown;\n\t\ttry {\n\t\t\toptions = JSON.parse(args[0]!);\n\t\t} catch (error) {\n\t\t\tthrow new Error(\"Session worker received invalid options\", { cause: error });\n\t\t}\n\t\tif (\n\t\t\t!Check(SessionWorkerOptionsSchema, options) ||\n\t\t\t!isAbsolute(options.sessionDir) ||\n\t\t\t!isAbsolute(options.metadata.cwd) ||\n\t\t\t!isAbsolute(options.metadata.path) ||\n\t\t\t(options.provider !== undefined && options.model === undefined)\n\t\t) {\n\t\t\tthrow new Error(\"Session worker received invalid options\");\n\t\t}\n\t\tawait run(options, createHarness);\n\t} catch (error) {\n\t\tconst message = error instanceof Error ? error.message : String(error);\n\t\tconst token = process.env[SESSION_WORKER_CONTROL_TOKEN_ENV];\n\t\tconst encodedSessionKey = process.env[SESSION_WORKER_SESSION_KEY_ENV];\n\t\tif (token && encodedSessionKey) {\n\t\t\tconst sessionKey = Buffer.from(encodedSessionKey, \"base64url\").toString();\n\t\t\tawait failureControl?.send({ type: \"worker_failed\", token, sessionKey, message }).catch(() => {});\n\t\t}\n\t\tthrow error;\n\t}\n}\n\nasync function createCodingAgentHarness(\n\tsession: Session<JsonlSessionMetadata>,\n\toptions: SessionWorkerOptions,\n\texecutionEnv: NodeExecutionEnv,\n): Promise<SessionWorkerRuntime> {\n\tconst modelRuntime = await ModelRuntime.create();\n\tconst settingsManager = SettingsManager.create(session.metadata.cwd);\n\tlet resolved: Awaited<ReturnType<typeof findInitialModel>> | ReturnType<typeof resolveCliModel>;\n\tif (options.model === undefined) {\n\t\tresolved = await findInitialModel({\n\t\t\tscopedModels: [],\n\t\t\tisContinuing: true,\n\t\t\tdefaultProvider: settingsManager.getDefaultProvider(),\n\t\t\tdefaultModelId: settingsManager.getDefaultModel(),\n\t\t\tdefaultThinkingLevel: settingsManager.getDefaultThinkingLevel(),\n\t\t\tmodelRuntime,\n\t\t});\n\t} else {\n\t\tresolved = resolveCliModel({\n\t\t\tcliProvider: options.provider,\n\t\t\tcliModel: options.model,\n\t\t\tmodelRuntime,\n\t\t});\n\t\tif (resolved.error) throw new Error(`Session worker could not resolve model: ${resolved.error}`);\n\t}\n\tif (!resolved.model) throw new Error(\"Session worker could not resolve a model\");\n\tconst tools = [createReadTool(), createWriteTool(), createBashTool()];\n\tconst activeToolNames = tools.map((tool) => tool.name);\n\tconst harness = (\n\t\tawait AgentHarness.create(\n\t\t\t{\n\t\t\t\tsession,\n\t\t\t\tmodels: modelRuntime,\n\t\t\t\tmodel: resolved.model,\n\t\t\t\tthinkingLevel: resolved.thinkingLevel,\n\t\t\t\ttools,\n\t\t\t\tactiveToolNames,\n\t\t\t\ttoolContext: { env: executionEnv },\n\t\t\t\tresources: {},\n\t\t\t},\n\t\t\tTODO_CONTEXT,\n\t\t)\n\t).harness;\n\ttry {\n\t\tconst lane = await harness.lane(\"main\", TODO_CONTEXT);\n\t\tconst currentActiveToolNames = await lane.getActiveTools(TODO_CONTEXT);\n\t\tif (\n\t\t\tcurrentActiveToolNames.length !== activeToolNames.length ||\n\t\t\tcurrentActiveToolNames.some((name, index) => name !== activeToolNames[index])\n\t\t) {\n\t\t\tawait lane.setActiveTools(activeToolNames, TODO_CONTEXT);\n\t\t}\n\t\treturn {\n\t\t\tharness,\n\t\t\tlane,\n\t\t\tmodelRuntime,\n\t\t\tsettingsManager,\n\t\t\tfacetLoader: createSessionPluginFacetLoader(options.pluginManifestPaths),\n\t\t};\n\t} catch (error) {\n\t\ttry {\n\t\t\tawait harness.close(TODO_CONTEXT);\n\t\t} catch (cleanupError) {\n\t\t\tthrow new AggregateError([error, cleanupError], \"Session worker model selection and cleanup failed\");\n\t\t}\n\t\tthrow error;\n\t}\n}\n\nexport function runSessionWorkerProcess(args: readonly string[]): Promise<void> {\n\treturn runSessionWorkerWithHarness(args, createCodingAgentHarness);\n}\n\nif (isDirectInternalProcessEntry(import.meta.url)) {\n\tconst role = consumeInternalProcessRole();\n\tif (role !== \"session-worker\") {\n\t\tthrow new Error(\"Session worker entrypoint requires an internal session-worker invocation\");\n\t}\n\tvoid runSessionWorkerProcess(process.argv.slice(2)).catch(() => process.exit(1));\n}\n"]}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=source-resolver.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"source-resolver.d.ts","sourceRoot":"","sources":["../../src/experimental/source-resolver.ts"],"names":[],"mappings":""}
@@ -0,0 +1,71 @@
1
+ import { existsSync, readFileSync, statSync } from "node:fs";
2
+ import { registerHooks } from "node:module";
3
+ import { extname, resolve, sep } from "node:path";
4
+ import { fileURLToPath, pathToFileURL } from "node:url";
5
+ const repositoryRoot = fileURLToPath(new URL("../..", import.meta.url));
6
+ const tsconfigPath = resolve(repositoryRoot, "tsconfig.json");
7
+ const tsconfig = JSON.parse(readFileSync(tsconfigPath, "utf8"));
8
+ const paths = tsconfig.compilerOptions?.paths;
9
+ if (!paths)
10
+ throw new Error(`Source runtime requires compilerOptions.paths in ${tsconfigPath}`);
11
+ const aliases = Object.entries(paths)
12
+ .filter(([pattern]) => pattern.startsWith("@earendil-works/"))
13
+ .map(([pattern, replacements]) => {
14
+ const wildcard = pattern.indexOf("*");
15
+ if (wildcard !== -1 && pattern.indexOf("*", wildcard + 1) !== -1) {
16
+ throw new Error(`Source runtime does not support multiple wildcards in ${pattern}`);
17
+ }
18
+ return {
19
+ pattern,
20
+ prefix: wildcard === -1 ? pattern : pattern.slice(0, wildcard),
21
+ suffix: wildcard === -1 ? "" : pattern.slice(wildcard + 1),
22
+ replacements,
23
+ };
24
+ })
25
+ .sort((left, right) => right.pattern.length - left.pattern.length);
26
+ registerHooks({
27
+ resolve(specifier, context, nextResolve) {
28
+ let matchedPattern;
29
+ for (const alias of aliases) {
30
+ const wildcard = matchAlias(alias, specifier);
31
+ if (wildcard === undefined)
32
+ continue;
33
+ matchedPattern ??= alias.pattern;
34
+ for (const replacement of alias.replacements) {
35
+ const resolved = resolveSourcePath(replacement.replace("*", wildcard));
36
+ if (resolved)
37
+ return { url: pathToFileURL(resolved).href, shortCircuit: true };
38
+ }
39
+ }
40
+ if (matchedPattern) {
41
+ throw new Error(`Source runtime could not resolve ${specifier} through tsconfig path ${matchedPattern}`);
42
+ }
43
+ return nextResolve(specifier, context);
44
+ },
45
+ });
46
+ function matchAlias(alias, specifier) {
47
+ if (!alias.pattern.includes("*"))
48
+ return specifier === alias.pattern ? "" : undefined;
49
+ if (!specifier.startsWith(alias.prefix) || !specifier.endsWith(alias.suffix))
50
+ return undefined;
51
+ return specifier.slice(alias.prefix.length, specifier.length - alias.suffix.length);
52
+ }
53
+ function resolveSourcePath(replacement) {
54
+ const basePath = resolve(repositoryRoot, replacement);
55
+ const rootPrefix = repositoryRoot.endsWith(sep) ? repositoryRoot : `${repositoryRoot}${sep}`;
56
+ if (!basePath.startsWith(rootPrefix))
57
+ return undefined;
58
+ const extension = extname(basePath);
59
+ const sourceExtension = extension === ".js" ? ".ts" : extension === ".mjs" ? ".mts" : extension === ".cjs" ? ".cts" : undefined;
60
+ const candidates = sourceExtension
61
+ ? [basePath, `${basePath.slice(0, -extension.length)}${sourceExtension}`]
62
+ : extension === ".ts" || extension === ".mts" || extension === ".cts" || extension === ".json"
63
+ ? [basePath]
64
+ : [basePath, `${basePath}.ts`, resolve(basePath, "index.ts")];
65
+ for (const candidate of candidates) {
66
+ if (existsSync(candidate) && statSync(candidate).isFile())
67
+ return candidate;
68
+ }
69
+ return undefined;
70
+ }
71
+ //# sourceMappingURL=source-resolver.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"source-resolver.js","sourceRoot":"","sources":["../../src/experimental/source-resolver.ts"],"names":[],"mappings":"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","sourcesContent":["import { existsSync, readFileSync, statSync } from \"node:fs\";\nimport { registerHooks } from \"node:module\";\nimport { extname, resolve, sep } from \"node:path\";\nimport { fileURLToPath, pathToFileURL } from \"node:url\";\n\n// Node strips TypeScript natively, but it does not apply the workspace source\n// aliases from tsconfig.json. Internal source processes preload this resolver so\n// they cannot silently fall through to stale package dist files.\n\ninterface TsConfig {\n\treadonly compilerOptions?: {\n\t\treadonly paths?: Readonly<Record<string, readonly string[]>>;\n\t};\n}\n\ninterface SourceAlias {\n\treadonly pattern: string;\n\treadonly prefix: string;\n\treadonly suffix: string;\n\treadonly replacements: readonly string[];\n}\n\nconst repositoryRoot = fileURLToPath(new URL(\"../..\", import.meta.url));\nconst tsconfigPath = resolve(repositoryRoot, \"tsconfig.json\");\nconst tsconfig = JSON.parse(readFileSync(tsconfigPath, \"utf8\")) as TsConfig;\nconst paths = tsconfig.compilerOptions?.paths;\nif (!paths) throw new Error(`Source runtime requires compilerOptions.paths in ${tsconfigPath}`);\n\nconst aliases: SourceAlias[] = Object.entries(paths)\n\t.filter(([pattern]) => pattern.startsWith(\"@earendil-works/\"))\n\t.map(([pattern, replacements]) => {\n\t\tconst wildcard = pattern.indexOf(\"*\");\n\t\tif (wildcard !== -1 && pattern.indexOf(\"*\", wildcard + 1) !== -1) {\n\t\t\tthrow new Error(`Source runtime does not support multiple wildcards in ${pattern}`);\n\t\t}\n\t\treturn {\n\t\t\tpattern,\n\t\t\tprefix: wildcard === -1 ? pattern : pattern.slice(0, wildcard),\n\t\t\tsuffix: wildcard === -1 ? \"\" : pattern.slice(wildcard + 1),\n\t\t\treplacements,\n\t\t};\n\t})\n\t.sort((left, right) => right.pattern.length - left.pattern.length);\n\nregisterHooks({\n\tresolve(specifier, context, nextResolve) {\n\t\tlet matchedPattern: string | undefined;\n\t\tfor (const alias of aliases) {\n\t\t\tconst wildcard = matchAlias(alias, specifier);\n\t\t\tif (wildcard === undefined) continue;\n\t\t\tmatchedPattern ??= alias.pattern;\n\t\t\tfor (const replacement of alias.replacements) {\n\t\t\t\tconst resolved = resolveSourcePath(replacement.replace(\"*\", wildcard));\n\t\t\t\tif (resolved) return { url: pathToFileURL(resolved).href, shortCircuit: true };\n\t\t\t}\n\t\t}\n\t\tif (matchedPattern) {\n\t\t\tthrow new Error(`Source runtime could not resolve ${specifier} through tsconfig path ${matchedPattern}`);\n\t\t}\n\t\treturn nextResolve(specifier, context);\n\t},\n});\n\nfunction matchAlias(alias: SourceAlias, specifier: string): string | undefined {\n\tif (!alias.pattern.includes(\"*\")) return specifier === alias.pattern ? \"\" : undefined;\n\tif (!specifier.startsWith(alias.prefix) || !specifier.endsWith(alias.suffix)) return undefined;\n\treturn specifier.slice(alias.prefix.length, specifier.length - alias.suffix.length);\n}\n\nfunction resolveSourcePath(replacement: string): string | undefined {\n\tconst basePath = resolve(repositoryRoot, replacement);\n\tconst rootPrefix = repositoryRoot.endsWith(sep) ? repositoryRoot : `${repositoryRoot}${sep}`;\n\tif (!basePath.startsWith(rootPrefix)) return undefined;\n\tconst extension = extname(basePath);\n\tconst sourceExtension =\n\t\textension === \".js\" ? \".ts\" : extension === \".mjs\" ? \".mts\" : extension === \".cjs\" ? \".cts\" : undefined;\n\tconst candidates = sourceExtension\n\t\t? [basePath, `${basePath.slice(0, -extension.length)}${sourceExtension}`]\n\t\t: extension === \".ts\" || extension === \".mts\" || extension === \".cts\" || extension === \".json\"\n\t\t\t? [basePath]\n\t\t\t: [basePath, `${basePath}.ts`, resolve(basePath, \"index.ts\")];\n\tfor (const candidate of candidates) {\n\t\tif (existsSync(candidate) && statSync(candidate).isFile()) return candidate;\n\t}\n\treturn undefined;\n}\n"]}
@@ -3,10 +3,11 @@
3
3
  *
4
4
  * Tools: a single `bg` tool with five actions. create starts a task and
5
5
  * returns immediately; the result arrives as a <background-task> notification
6
- * (queued behind the current run while streaming, waking the agent when
7
- * idle). read returns a bounded slice of a task's output file; wait blocks
8
- * (bounded) for a task's completion and delivers it inline — the followUp
9
- * notification is suppressed so the completion is delivered exactly once;
6
+ * (steered into the run at the next turn boundary while streaming, waking the
7
+ * agent when idle). read returns a bounded slice of a task's output file;
8
+ * wait blocks (bounded) for a task's completion and delivers it inline — the
9
+ * completion notification is suppressed so the completion is delivered exactly
10
+ * once;
10
11
  * kill stops a single task; list enumerates known tasks. /bg opens the
11
12
  * interactive task manager. Running counts surface in the footer via
12
13
  * ctx.ui.setStatus.
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/extensions/background/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAGH,OAAO,KAAK,EAEX,YAAY,EAGZ,MAAM,gCAAgC,CAAC;AAExC,OAAO,EAAE,KAAK,cAAc,EAA6B,MAAM,0BAA0B,CAAC;AAqB1F;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,UAAU,EAAE,cAAc,EAAE,MAAM,EAAE,MAAM,GAAG,SAAS,GAAG,cAAc,CAK3G;AAcD,MAAM,WAAW,4BAA4B;IAC5C,UAAU,CAAC,EAAE,cAAc,CAAC;IAC5B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,yGAAyG;IACzG,KAAK,CAAC,EAAE;QAAE,cAAc,CAAC,EAAE,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,KAAK,CAAC;CACtF;AAED,0FAA0F;AAC1F,wBAAgB,yBAAyB,CAAC,SAAS,CAAC,EAAE,4BAA4B,GAAG,CAAC,EAAE,EAAE,YAAY,KAAK,IAAI,CAgH9G;6BAhHyF,YAAY,KAAK,IAAI;AAoI/G,wBAA2C"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/extensions/background/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAGH,OAAO,KAAK,EAEX,YAAY,EAGZ,MAAM,gCAAgC,CAAC;AAExC,OAAO,EAAE,KAAK,cAAc,EAA6B,MAAM,0BAA0B,CAAC;AAqB1F;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,UAAU,EAAE,cAAc,EAAE,MAAM,EAAE,MAAM,GAAG,SAAS,GAAG,cAAc,CAK3G;AAcD,MAAM,WAAW,4BAA4B;IAC5C,UAAU,CAAC,EAAE,cAAc,CAAC;IAC5B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,yGAAyG;IACzG,KAAK,CAAC,EAAE;QAAE,cAAc,CAAC,EAAE,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,KAAK,CAAC;CACtF;AAED,0FAA0F;AAC1F,wBAAgB,yBAAyB,CAAC,SAAS,CAAC,EAAE,4BAA4B,GAAG,CAAC,EAAE,EAAE,YAAY,KAAK,IAAI,CAkH9G;6BAlHyF,YAAY,KAAK,IAAI;AAsI/G,wBAA2C"}
@@ -3,10 +3,11 @@
3
3
  *
4
4
  * Tools: a single `bg` tool with five actions. create starts a task and
5
5
  * returns immediately; the result arrives as a <background-task> notification
6
- * (queued behind the current run while streaming, waking the agent when
7
- * idle). read returns a bounded slice of a task's output file; wait blocks
8
- * (bounded) for a task's completion and delivers it inline — the followUp
9
- * notification is suppressed so the completion is delivered exactly once;
6
+ * (steered into the run at the next turn boundary while streaming, waking the
7
+ * agent when idle). read returns a bounded slice of a task's output file;
8
+ * wait blocks (bounded) for a task's completion and delivers it inline — the
9
+ * completion notification is suppressed so the completion is delivered exactly
10
+ * once;
10
11
  * kill stops a single task; list enumerates known tasks. /bg opens the
11
12
  * interactive task manager. Running counts surface in the footer via
12
13
  * ctx.ui.setStatus.
@@ -88,7 +89,10 @@ export function createBackgroundExtension(overrides) {
88
89
  content: buildNotificationContent(notification),
89
90
  display: true,
90
91
  details: toNotificationDetails(notification),
91
- }, { deliverAs: "followUp", triggerTurn: true }),
92
+ },
93
+ // steer, not followUp: a task that finishes mid-run must reach the
94
+ // model at the next turn boundary, not after the whole run ends.
95
+ { deliverAs: "steer", triggerTurn: true }),
92
96
  onChange: updateStatus,
93
97
  });
94
98
  updateStatus();
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/extensions/background/index.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * background — run bash commands in the background.\n *\n * Tools: a single `bg` tool with five actions. create starts a task and\n * returns immediately; the result arrives as a <background-task> notification\n * (queued behind the current run while streaming, waking the agent when\n * idle). read returns a bounded slice of a task's output file; wait blocks\n * (bounded) for a task's completion and delivers it inline — the followUp\n * notification is suppressed so the completion is delivered exactly once;\n * kill stops a single task; list enumerates known tasks. /bg opens the\n * interactive task manager. Running counts surface in the footer via\n * ctx.ui.setStatus.\n *\n * This file is wiring only: the actions live in actions.ts, the notification\n * in notify.ts, the transcript rows in render.ts, and the menu in manager.ts.\n */\n\nimport { getAgentDir } from \"../../config.ts\";\nimport type {\n\tAgentToolResult,\n\tExtensionAPI,\n\tExtensionCommandContext,\n\tExtensionContext,\n} from \"../../core/extensions/types.ts\";\nimport { SettingsManager } from \"../../core/settings-manager.ts\";\nimport { type BashOperations, createLocalBashOperations } from \"../../core/tools/bash.ts\";\nimport { describeTaskLine, runCreate, runKill, runList, runRead, runWait } from \"./actions.ts\";\nimport { BG_NOTIFICATION_TYPE } from \"./constants.ts\";\nimport { BackgroundTasksMenu } from \"./manager.ts\";\nimport { buildNotificationContent, toNotificationDetails } from \"./notify.ts\";\nimport { readOutputSlice } from \"./output-file.ts\";\nimport { BackgroundTaskRegistry } from \"./registry.ts\";\nimport {\n\ttype BgRenderState,\n\trenderBackgroundNotification,\n\trenderBgCall,\n\trenderBgResult,\n\ttype WaitLiveProbe,\n} from \"./render.ts\";\nimport { BG_PROMPT_GUIDELINES, BG_PROMPT_SNIPPET, BG_TOOL_DESCRIPTION, bgSchema } from \"./schema.ts\";\nimport { formatStatusline } from \"./task-view.ts\";\nimport type { BgDetails, BgNotificationDetails } from \"./types.ts\";\n\n/** Tasks shown by the non-TUI `/bg` fallback summary. */\nconst BG_COMMAND_SUMMARY_SHOWN = 10;\n\n/**\n * Wrap operations so every executed command carries the prefix, mirroring the\n * built-in bash tool. The prefix never reaches task labels or notifications:\n * `BgTask.command` stays the user's original input.\n */\nexport function prependCommandPrefix(operations: BashOperations, prefix: string | undefined): BashOperations {\n\tif (!prefix) return operations;\n\treturn {\n\t\texec: (command, cwd, options) => operations.exec(`${prefix}\\n${command}`, cwd, options),\n\t};\n}\n\n/** Hosts without getShellSettings (older SDK hosts): read what the session was configured with. */\nfunction readDiskShellSettings(ctx: ExtensionContext): { shellPath?: string; commandPrefix?: string } {\n\tconst settings = SettingsManager.create(ctx.cwd, getAgentDir(), { projectTrusted: ctx.isProjectTrusted() });\n\treturn { shellPath: settings.getShellPath(), commandPrefix: settings.getShellCommandPrefix() };\n}\n\n/** Local shell operations honoring the session's shell settings (shellPath, commandPrefix). */\nfunction createSessionBashOperations(ctx: ExtensionContext): BashOperations {\n\tconst shell = ctx.getShellSettings?.() ?? readDiskShellSettings(ctx);\n\treturn prependCommandPrefix(createLocalBashOperations({ shellPath: shell.shellPath }), shell.commandPrefix);\n}\n\nexport interface BackgroundExtensionOverrides {\n\toperations?: BashOperations;\n\toutputDir?: string;\n\tmaxOutputBytes?: number;\n\t/** Stall watchdog tuning, or false to disable it; defaults follow Claude Code's CC-1175 (5s/45s/1KB). */\n\tstall?: { pollIntervalMs?: number; thresholdMs?: number; tailBytes?: number } | false;\n}\n\n/** Factory with injectable seams for tests; the default export uses production wiring. */\nexport function createBackgroundExtension(overrides?: BackgroundExtensionOverrides): (pi: ExtensionAPI) => void {\n\treturn (pi: ExtensionAPI) => {\n\t\tlet registry: BackgroundTaskRegistry | undefined;\n\t\tlet sessionCtx: ExtensionContext | undefined;\n\n\t\tconst requireRegistry = (): BackgroundTaskRegistry => {\n\t\t\tif (!registry) throw new Error(\"Background tasks are not available yet (no active session).\");\n\t\t\treturn registry;\n\t\t};\n\n\t\t/** Read-only live peek for the pending wait renderer; never throws. */\n\t\tconst waitLiveProbe: WaitLiveProbe = (taskId) => {\n\t\t\tif (!registry) return undefined;\n\t\t\tconst resolved = registry.resolveTask(taskId);\n\t\t\treturn resolved.ok ? { status: resolved.task.status, outputBytes: resolved.task.outputBytes } : undefined;\n\t\t};\n\n\t\tconst updateStatus = () => {\n\t\t\tif (!registry || registry.isShuttingDown) return;\n\t\t\tsessionCtx?.ui.setStatus(\"background\", formatStatusline(registry.counts()));\n\t\t};\n\n\t\tpi.on(\"session_start\", (_event, ctx) => {\n\t\t\tsessionCtx = ctx;\n\t\t\t// Defensive: a leftover registry (session_shutdown not seen) must not leak processes.\n\t\t\tif (registry) void registry.shutdown();\n\t\t\tregistry = new BackgroundTaskRegistry({\n\t\t\t\toperations: overrides?.operations ?? createSessionBashOperations(ctx),\n\t\t\t\toutputDir: overrides?.outputDir,\n\t\t\t\tmaxOutputBytes: overrides?.maxOutputBytes,\n\t\t\t\tstall: overrides?.stall,\n\t\t\t\t// Completion and stall reach the model the same way; that choice lives here only.\n\t\t\t\tonNotify: (notification) =>\n\t\t\t\t\tpi.sendMessage(\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tcustomType: BG_NOTIFICATION_TYPE,\n\t\t\t\t\t\t\tcontent: buildNotificationContent(notification),\n\t\t\t\t\t\t\tdisplay: true,\n\t\t\t\t\t\t\tdetails: toNotificationDetails(notification),\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{ deliverAs: \"followUp\", triggerTurn: true },\n\t\t\t\t\t),\n\t\t\t\tonChange: updateStatus,\n\t\t\t});\n\t\t\tupdateStatus();\n\t\t});\n\n\t\tpi.on(\"session_shutdown\", async (_event, ctx) => {\n\t\t\tctx.ui.setStatus(\"background\", undefined);\n\t\t\tsessionCtx = undefined;\n\t\t\tconst active = registry;\n\t\t\tregistry = undefined;\n\t\t\tawait active?.shutdown();\n\t\t});\n\n\t\tpi.registerTool<typeof bgSchema, BgDetails, BgRenderState>({\n\t\t\tname: \"bg\",\n\t\t\tlabel: \"bg\",\n\t\t\tdescription: BG_TOOL_DESCRIPTION,\n\t\t\tpromptSnippet: BG_PROMPT_SNIPPET,\n\t\t\tpromptGuidelines: BG_PROMPT_GUIDELINES,\n\t\t\tparameters: bgSchema,\n\t\t\tasync execute(_toolCallId, params, signal, _onUpdate, ctx): Promise<AgentToolResult<BgDetails>> {\n\t\t\t\tconst active = requireRegistry();\n\t\t\t\tswitch (params.action) {\n\t\t\t\t\tcase \"create\":\n\t\t\t\t\t\treturn runCreate(active, params, ctx);\n\t\t\t\t\tcase \"read\":\n\t\t\t\t\t\treturn runRead(active, params);\n\t\t\t\t\tcase \"wait\":\n\t\t\t\t\t\treturn runWait(active, params, signal);\n\t\t\t\t\tcase \"kill\":\n\t\t\t\t\t\treturn runKill(active, params);\n\t\t\t\t\tcase \"list\":\n\t\t\t\t\t\treturn runList(active);\n\t\t\t\t}\n\t\t\t},\n\t\t\trenderCall(args, theme, context) {\n\t\t\t\treturn renderBgCall(args, theme, context, waitLiveProbe);\n\t\t\t},\n\t\t\trenderResult(result, options, theme, context) {\n\t\t\t\treturn renderBgResult(result, options, theme, context);\n\t\t\t},\n\t\t});\n\n\t\tpi.registerMessageRenderer<BgNotificationDetails>(BG_NOTIFICATION_TYPE, renderBackgroundNotification);\n\n\t\tpi.registerCommand(\"bg\", {\n\t\t\tdescription: \"View and manage background tasks\",\n\t\t\thandler: async (_args, ctx: ExtensionCommandContext) => {\n\t\t\t\tconst active = registry;\n\t\t\t\tif (!active || active.counts().total === 0) {\n\t\t\t\t\tctx.ui.notify(\"No background tasks.\", \"info\");\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tif (ctx.mode !== \"tui\") {\n\t\t\t\t\t// RPC/print: ctx.ui.custom is unavailable — show a bounded summary.\n\t\t\t\t\tconst now = Date.now();\n\t\t\t\t\tconst lines = active\n\t\t\t\t\t\t.listTasks()\n\t\t\t\t\t\t.slice(0, BG_COMMAND_SUMMARY_SHOWN)\n\t\t\t\t\t\t.map((task) => describeTaskLine(task, now));\n\t\t\t\t\tctx.ui.notify(\n\t\t\t\t\t\t`Background tasks:\\n${lines.join(\"\\n\")}\\nUse the bg tool (action kill) to stop a task.`,\n\t\t\t\t\t\t\"info\",\n\t\t\t\t\t);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tawait showBackgroundManager(ctx, active);\n\t\t\t},\n\t\t});\n\t};\n}\n\nasync function showBackgroundManager(ctx: ExtensionCommandContext, registry: BackgroundTaskRegistry): Promise<void> {\n\t// No overlay options: the component mounts inline in the editor slot, like /model.\n\tawait ctx.ui.custom(\n\t\t(tui, theme, keybindings, done) =>\n\t\t\tnew BackgroundTasksMenu({\n\t\t\t\ttui,\n\t\t\t\ttheme,\n\t\t\t\tkeybindings,\n\t\t\t\thost: {\n\t\t\t\t\tlistTasks: () => registry.listTasks(),\n\t\t\t\t\tkillTask: (id) => registry.killTask(id),\n\t\t\t\t\treadSlice: (filePath, options) => readOutputSlice(filePath, options),\n\t\t\t\t},\n\t\t\t\tonClose: () => done(undefined),\n\t\t\t}),\n\t);\n}\n\nexport default createBackgroundExtension();\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/extensions/background/index.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * background — run bash commands in the background.\n *\n * Tools: a single `bg` tool with five actions. create starts a task and\n * returns immediately; the result arrives as a <background-task> notification\n * (steered into the run at the next turn boundary while streaming, waking the\n * agent when idle). read returns a bounded slice of a task's output file;\n * wait blocks (bounded) for a task's completion and delivers it inline — the\n * completion notification is suppressed so the completion is delivered exactly\n * once;\n * kill stops a single task; list enumerates known tasks. /bg opens the\n * interactive task manager. Running counts surface in the footer via\n * ctx.ui.setStatus.\n *\n * This file is wiring only: the actions live in actions.ts, the notification\n * in notify.ts, the transcript rows in render.ts, and the menu in manager.ts.\n */\n\nimport { getAgentDir } from \"../../config.ts\";\nimport type {\n\tAgentToolResult,\n\tExtensionAPI,\n\tExtensionCommandContext,\n\tExtensionContext,\n} from \"../../core/extensions/types.ts\";\nimport { SettingsManager } from \"../../core/settings-manager.ts\";\nimport { type BashOperations, createLocalBashOperations } from \"../../core/tools/bash.ts\";\nimport { describeTaskLine, runCreate, runKill, runList, runRead, runWait } from \"./actions.ts\";\nimport { BG_NOTIFICATION_TYPE } from \"./constants.ts\";\nimport { BackgroundTasksMenu } from \"./manager.ts\";\nimport { buildNotificationContent, toNotificationDetails } from \"./notify.ts\";\nimport { readOutputSlice } from \"./output-file.ts\";\nimport { BackgroundTaskRegistry } from \"./registry.ts\";\nimport {\n\ttype BgRenderState,\n\trenderBackgroundNotification,\n\trenderBgCall,\n\trenderBgResult,\n\ttype WaitLiveProbe,\n} from \"./render.ts\";\nimport { BG_PROMPT_GUIDELINES, BG_PROMPT_SNIPPET, BG_TOOL_DESCRIPTION, bgSchema } from \"./schema.ts\";\nimport { formatStatusline } from \"./task-view.ts\";\nimport type { BgDetails, BgNotificationDetails } from \"./types.ts\";\n\n/** Tasks shown by the non-TUI `/bg` fallback summary. */\nconst BG_COMMAND_SUMMARY_SHOWN = 10;\n\n/**\n * Wrap operations so every executed command carries the prefix, mirroring the\n * built-in bash tool. The prefix never reaches task labels or notifications:\n * `BgTask.command` stays the user's original input.\n */\nexport function prependCommandPrefix(operations: BashOperations, prefix: string | undefined): BashOperations {\n\tif (!prefix) return operations;\n\treturn {\n\t\texec: (command, cwd, options) => operations.exec(`${prefix}\\n${command}`, cwd, options),\n\t};\n}\n\n/** Hosts without getShellSettings (older SDK hosts): read what the session was configured with. */\nfunction readDiskShellSettings(ctx: ExtensionContext): { shellPath?: string; commandPrefix?: string } {\n\tconst settings = SettingsManager.create(ctx.cwd, getAgentDir(), { projectTrusted: ctx.isProjectTrusted() });\n\treturn { shellPath: settings.getShellPath(), commandPrefix: settings.getShellCommandPrefix() };\n}\n\n/** Local shell operations honoring the session's shell settings (shellPath, commandPrefix). */\nfunction createSessionBashOperations(ctx: ExtensionContext): BashOperations {\n\tconst shell = ctx.getShellSettings?.() ?? readDiskShellSettings(ctx);\n\treturn prependCommandPrefix(createLocalBashOperations({ shellPath: shell.shellPath }), shell.commandPrefix);\n}\n\nexport interface BackgroundExtensionOverrides {\n\toperations?: BashOperations;\n\toutputDir?: string;\n\tmaxOutputBytes?: number;\n\t/** Stall watchdog tuning, or false to disable it; defaults follow Claude Code's CC-1175 (5s/45s/1KB). */\n\tstall?: { pollIntervalMs?: number; thresholdMs?: number; tailBytes?: number } | false;\n}\n\n/** Factory with injectable seams for tests; the default export uses production wiring. */\nexport function createBackgroundExtension(overrides?: BackgroundExtensionOverrides): (pi: ExtensionAPI) => void {\n\treturn (pi: ExtensionAPI) => {\n\t\tlet registry: BackgroundTaskRegistry | undefined;\n\t\tlet sessionCtx: ExtensionContext | undefined;\n\n\t\tconst requireRegistry = (): BackgroundTaskRegistry => {\n\t\t\tif (!registry) throw new Error(\"Background tasks are not available yet (no active session).\");\n\t\t\treturn registry;\n\t\t};\n\n\t\t/** Read-only live peek for the pending wait renderer; never throws. */\n\t\tconst waitLiveProbe: WaitLiveProbe = (taskId) => {\n\t\t\tif (!registry) return undefined;\n\t\t\tconst resolved = registry.resolveTask(taskId);\n\t\t\treturn resolved.ok ? { status: resolved.task.status, outputBytes: resolved.task.outputBytes } : undefined;\n\t\t};\n\n\t\tconst updateStatus = () => {\n\t\t\tif (!registry || registry.isShuttingDown) return;\n\t\t\tsessionCtx?.ui.setStatus(\"background\", formatStatusline(registry.counts()));\n\t\t};\n\n\t\tpi.on(\"session_start\", (_event, ctx) => {\n\t\t\tsessionCtx = ctx;\n\t\t\t// Defensive: a leftover registry (session_shutdown not seen) must not leak processes.\n\t\t\tif (registry) void registry.shutdown();\n\t\t\tregistry = new BackgroundTaskRegistry({\n\t\t\t\toperations: overrides?.operations ?? createSessionBashOperations(ctx),\n\t\t\t\toutputDir: overrides?.outputDir,\n\t\t\t\tmaxOutputBytes: overrides?.maxOutputBytes,\n\t\t\t\tstall: overrides?.stall,\n\t\t\t\t// Completion and stall reach the model the same way; that choice lives here only.\n\t\t\t\tonNotify: (notification) =>\n\t\t\t\t\tpi.sendMessage(\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tcustomType: BG_NOTIFICATION_TYPE,\n\t\t\t\t\t\t\tcontent: buildNotificationContent(notification),\n\t\t\t\t\t\t\tdisplay: true,\n\t\t\t\t\t\t\tdetails: toNotificationDetails(notification),\n\t\t\t\t\t\t},\n\t\t\t\t\t\t// steer, not followUp: a task that finishes mid-run must reach the\n\t\t\t\t\t\t// model at the next turn boundary, not after the whole run ends.\n\t\t\t\t\t\t{ deliverAs: \"steer\", triggerTurn: true },\n\t\t\t\t\t),\n\t\t\t\tonChange: updateStatus,\n\t\t\t});\n\t\t\tupdateStatus();\n\t\t});\n\n\t\tpi.on(\"session_shutdown\", async (_event, ctx) => {\n\t\t\tctx.ui.setStatus(\"background\", undefined);\n\t\t\tsessionCtx = undefined;\n\t\t\tconst active = registry;\n\t\t\tregistry = undefined;\n\t\t\tawait active?.shutdown();\n\t\t});\n\n\t\tpi.registerTool<typeof bgSchema, BgDetails, BgRenderState>({\n\t\t\tname: \"bg\",\n\t\t\tlabel: \"bg\",\n\t\t\tdescription: BG_TOOL_DESCRIPTION,\n\t\t\tpromptSnippet: BG_PROMPT_SNIPPET,\n\t\t\tpromptGuidelines: BG_PROMPT_GUIDELINES,\n\t\t\tparameters: bgSchema,\n\t\t\tasync execute(_toolCallId, params, signal, _onUpdate, ctx): Promise<AgentToolResult<BgDetails>> {\n\t\t\t\tconst active = requireRegistry();\n\t\t\t\tswitch (params.action) {\n\t\t\t\t\tcase \"create\":\n\t\t\t\t\t\treturn runCreate(active, params, ctx);\n\t\t\t\t\tcase \"read\":\n\t\t\t\t\t\treturn runRead(active, params);\n\t\t\t\t\tcase \"wait\":\n\t\t\t\t\t\treturn runWait(active, params, signal);\n\t\t\t\t\tcase \"kill\":\n\t\t\t\t\t\treturn runKill(active, params);\n\t\t\t\t\tcase \"list\":\n\t\t\t\t\t\treturn runList(active);\n\t\t\t\t}\n\t\t\t},\n\t\t\trenderCall(args, theme, context) {\n\t\t\t\treturn renderBgCall(args, theme, context, waitLiveProbe);\n\t\t\t},\n\t\t\trenderResult(result, options, theme, context) {\n\t\t\t\treturn renderBgResult(result, options, theme, context);\n\t\t\t},\n\t\t});\n\n\t\tpi.registerMessageRenderer<BgNotificationDetails>(BG_NOTIFICATION_TYPE, renderBackgroundNotification);\n\n\t\tpi.registerCommand(\"bg\", {\n\t\t\tdescription: \"View and manage background tasks\",\n\t\t\thandler: async (_args, ctx: ExtensionCommandContext) => {\n\t\t\t\tconst active = registry;\n\t\t\t\tif (!active || active.counts().total === 0) {\n\t\t\t\t\tctx.ui.notify(\"No background tasks.\", \"info\");\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tif (ctx.mode !== \"tui\") {\n\t\t\t\t\t// RPC/print: ctx.ui.custom is unavailable — show a bounded summary.\n\t\t\t\t\tconst now = Date.now();\n\t\t\t\t\tconst lines = active\n\t\t\t\t\t\t.listTasks()\n\t\t\t\t\t\t.slice(0, BG_COMMAND_SUMMARY_SHOWN)\n\t\t\t\t\t\t.map((task) => describeTaskLine(task, now));\n\t\t\t\t\tctx.ui.notify(\n\t\t\t\t\t\t`Background tasks:\\n${lines.join(\"\\n\")}\\nUse the bg tool (action kill) to stop a task.`,\n\t\t\t\t\t\t\"info\",\n\t\t\t\t\t);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tawait showBackgroundManager(ctx, active);\n\t\t\t},\n\t\t});\n\t};\n}\n\nasync function showBackgroundManager(ctx: ExtensionCommandContext, registry: BackgroundTaskRegistry): Promise<void> {\n\t// No overlay options: the component mounts inline in the editor slot, like /model.\n\tawait ctx.ui.custom(\n\t\t(tui, theme, keybindings, done) =>\n\t\t\tnew BackgroundTasksMenu({\n\t\t\t\ttui,\n\t\t\t\ttheme,\n\t\t\t\tkeybindings,\n\t\t\t\thost: {\n\t\t\t\t\tlistTasks: () => registry.listTasks(),\n\t\t\t\t\tkillTask: (id) => registry.killTask(id),\n\t\t\t\t\treadSlice: (filePath, options) => readOutputSlice(filePath, options),\n\t\t\t\t},\n\t\t\t\tonClose: () => done(undefined),\n\t\t\t}),\n\t);\n}\n\nexport default createBackgroundExtension();\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"render.d.ts","sourceRoot":"","sources":["../../../src/extensions/subagent/render.ts"],"names":[],"mappings":"AAAA,OAAO,EACN,KAAK,SAAS,EAOd,MAAM,wBAAwB,CAAC;AAChC,OAAO,KAAK,EAAE,eAAe,EAAE,iBAAiB,EAAE,uBAAuB,EAAE,MAAM,gCAAgC,CAAC;AAClH,OAAO,EAAoB,KAAK,KAAK,EAAmB,MAAM,wCAAwC,CAAC;AAIvG,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAGlD,OAAO,KAAK,EAAE,eAAe,EAAE,kBAAkB,EAAmC,MAAM,YAAY,CAAC;AA6TvG,yEAAyE;AACzE,MAAM,WAAW,mBAAmB;IACnC,YAAY,CAAC,EAAE,UAAU,CAAC,OAAO,UAAU,CAAC,CAAC;IAC7C,0EAA0E;IAC1E,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,+DAA+D;IAC/D,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;CACrB;AAED,KAAK,yBAAyB,GAAG,iBAAiB,CAAC,mBAAmB,EAAE,cAAc,EAAE,eAAe,CAAC,CAAC;AAEzG,wFAAwF;AACxF,wBAAgB,sBAAsB,CACrC,IAAI,EAAE,SAAS,kBAAkB,EAAE,EACnC,OAAO,EAAE;IAAE,SAAS,EAAE,OAAO,CAAC;IAAC,QAAQ,EAAE,OAAO,CAAA;CAAE,GAChD,MAAM,GAAG,SAAS,CAQpB;AAWD,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,yBAAyB,EAAE,SAAS,EAAE,OAAO,GAAG,IAAI,CAwBhG;AAED,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,cAAc,EAAE,KAAK,EAAE,KAAK,GAAG,SAAS,CAIhF;AAED,wBAAgB,oBAAoB,CACnC,MAAM,EAAE,eAAe,CAAC,eAAe,CAAC,EACxC,OAAO,EAAE,uBAAuB,EAChC,KAAK,EAAE,KAAK,EACZ,IAAI,EAAE,cAAc,EACpB,OAAO,EAAE,OAAO,GACd,SAAS,CAiBX"}
1
+ {"version":3,"file":"render.d.ts","sourceRoot":"","sources":["../../../src/extensions/subagent/render.ts"],"names":[],"mappings":"AAAA,OAAO,EACN,KAAK,SAAS,EAOd,MAAM,wBAAwB,CAAC;AAChC,OAAO,KAAK,EAAE,eAAe,EAAE,iBAAiB,EAAE,uBAAuB,EAAE,MAAM,gCAAgC,CAAC;AAClH,OAAO,EAAoB,KAAK,KAAK,EAAmB,MAAM,wCAAwC,CAAC;AAIvG,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAGlD,OAAO,KAAK,EAAE,eAAe,EAAE,kBAAkB,EAAmC,MAAM,YAAY,CAAC;AAiUvG,yEAAyE;AACzE,MAAM,WAAW,mBAAmB;IACnC,YAAY,CAAC,EAAE,UAAU,CAAC,OAAO,UAAU,CAAC,CAAC;IAC7C,0EAA0E;IAC1E,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,+DAA+D;IAC/D,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;CACrB;AAED,KAAK,yBAAyB,GAAG,iBAAiB,CAAC,mBAAmB,EAAE,cAAc,EAAE,eAAe,CAAC,CAAC;AAEzG,wFAAwF;AACxF,wBAAgB,sBAAsB,CACrC,IAAI,EAAE,SAAS,kBAAkB,EAAE,EACnC,OAAO,EAAE;IAAE,SAAS,EAAE,OAAO,CAAC;IAAC,QAAQ,EAAE,OAAO,CAAA;CAAE,GAChD,MAAM,GAAG,SAAS,CAQpB;AAWD,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,yBAAyB,EAAE,SAAS,EAAE,OAAO,GAAG,IAAI,CAwBhG;AAED,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,cAAc,EAAE,KAAK,EAAE,KAAK,GAAG,SAAS,CAIhF;AAED,wBAAgB,oBAAoB,CACnC,MAAM,EAAE,eAAe,CAAC,eAAe,CAAC,EACxC,OAAO,EAAE,uBAAuB,EAChC,KAAK,EAAE,KAAK,EACZ,IAAI,EAAE,cAAc,EACpB,OAAO,EAAE,OAAO,GACd,SAAS,CAiBX"}
@@ -187,8 +187,15 @@ function activityTitleSuffix(total, shown) {
187
187
  return toolCallLabel(total);
188
188
  }
189
189
  function activityLine(activity, theme) {
190
- const color = activity.status === "failed" ? "error" : activity.status === "running" ? "accent" : "toolOutput";
191
- return ` ${theme.fg(color, activityCallText(activity))}`;
190
+ // State color stays on the two-column status marker; the call text itself
191
+ // keeps the quiet toolOutput color so a running row does not flash a whole
192
+ // accent-colored command line on every refresh.
193
+ const text = theme.fg("toolOutput", activityCallText(activity));
194
+ if (activity.status === "failed")
195
+ return `${theme.fg("error", "×")} ${text}`;
196
+ if (activity.status === "running")
197
+ return `${theme.fg("accent", "›")} ${text}`;
198
+ return ` ${text}`;
192
199
  }
193
200
  function addPrompt(container, run, index, args, theme) {
194
201
  container.addChild(new Text(sectionTitle("Prompt", theme, "toolTitle"), 0, 0));
@@ -1 +1 @@
1
- {"version":3,"file":"render.js","sourceRoot":"","sources":["../../../src/extensions/subagent/render.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n\ttype Component,\n\tContainer,\n\tMarkdown,\n\tSpacer,\n\tText,\n\ttruncateToWidth,\n\tvisibleWidth,\n} from \"@earendil-works/pi-tui\";\nimport type { AgentToolResult, ToolRenderContext, ToolRenderResultOptions } from \"../../core/extensions/types.ts\";\nimport { getMarkdownTheme, type Theme, type ThemeColor } from \"../../modes/interactive/theme/theme.ts\";\nimport { activityCallText, isDisplayableActivity } from \"./activity.ts\";\nimport { AGENT_PROFILE_LABELS } from \"./agents.ts\";\nimport { COMPACTION_ACTIVITY_ID, DISPLAY_ACTIVITY_LIMIT, type SubagentAgentName } from \"./constants.ts\";\nimport type { SubagentParams } from \"./schema.ts\";\nimport { getSubagentRetryView } from \"./state.ts\";\nimport { plainLine, truncate } from \"./text.ts\";\nimport type { SubagentDetails, SubagentRunDetails, SubagentRunStatus, ToolActivity } from \"./types.ts\";\n\nconst RETRY_ERROR_LIMIT = 160;\nconst FALLBACK_OUTPUT_LIMIT = 4_000;\nconst OUTPUT_TRUNCATION_NOTICE_PATTERN = /\\s*\\[Output truncated(?:: \\d+ bytes omitted)?\\.\\]\\s*$/u;\n\n// A breathing dot-to-star bloom: the sequence plays forward to full bloom\n// and back, holding each extreme for two ticks. The mid frame uses ✼ rather\n// than the more common ✳ because U+2733 carries the Unicode Emoji property\n// and some terminals render it as a double-width color emoji.\nconst SPINNER_BLOOM = [\"·\", \"✢\", \"✼\", \"✶\", \"✻\", \"✽\"];\nconst SPINNER_FRAMES = [...SPINNER_BLOOM, ...[...SPINNER_BLOOM].reverse()];\nconst SPINNER_INTERVAL_MS = 120;\nconst ELAPSED_REFRESH_INTERVAL_MS = 1_000;\nconst FLOW_SEPARATOR = \" · \";\nconst FLOW_SEPARATOR_WIDTH = 3;\n\n/** Width-aware single-line text for compact rows and section headers. */\nclass SingleLineText implements Component {\n\tprivate readonly text: string;\n\n\tconstructor(text: string) {\n\t\tthis.text = text;\n\t}\n\n\trender(width: number): string[] {\n\t\treturn [truncateToWidth(this.text, Math.max(1, width), \"...\")];\n\t}\n\n\tinvalidate(): void {}\n}\n\nfunction taskPrompt(args: SubagentParams, index: number, run: SubagentRunDetails): string {\n\t// Tool calls restored from before the tasks-array shape carry a legacy\n\t// args object without `tasks`; those sections fall back to the description.\n\tconst tasks = (args as Partial<SubagentParams>).tasks;\n\treturn tasks?.[index]?.prompt ?? run.description;\n}\n\nfunction profileLabel(agent: string): string {\n\treturn AGENT_PROFILE_LABELS[agent as SubagentAgentName] ?? agent;\n}\n\nfunction formatDuration(seconds: number): string {\n\tconst roundedSeconds = Math.round(seconds);\n\tif (roundedSeconds >= 60) return `${Math.floor(roundedSeconds / 60)}m ${roundedSeconds % 60}s`;\n\treturn `${seconds.toFixed(seconds < 10 ? 1 : 0)}s`;\n}\n\nfunction elapsed(startedAt: number | undefined, endedAt?: number): string | undefined {\n\tif (startedAt === undefined) return undefined;\n\treturn formatDuration(Math.max(0, ((endedAt ?? Date.now()) - startedAt) / 1_000));\n}\n\nfunction statusColor(status: SubagentRunStatus): \"success\" | \"error\" | \"warning\" | \"accent\" | \"muted\" {\n\tswitch (status) {\n\t\tcase \"completed\":\n\t\t\treturn \"success\";\n\t\tcase \"failed\":\n\t\t\treturn \"error\";\n\t\tcase \"aborted\":\n\t\t\treturn \"warning\";\n\t\tcase \"running\":\n\t\t\treturn \"accent\";\n\t\tdefault:\n\t\t\treturn \"muted\";\n\t}\n}\n\nfunction statusMarker(status: SubagentRunStatus, theme: Theme): string {\n\tconst glyph =\n\t\tstatus === \"completed\"\n\t\t\t? \"✓\"\n\t\t\t: status === \"failed\"\n\t\t\t\t? \"×\"\n\t\t\t\t: status === \"aborted\"\n\t\t\t\t\t? \"■\"\n\t\t\t\t\t: status === \"running\"\n\t\t\t\t\t\t? \"›\"\n\t\t\t\t\t\t: \"○\";\n\treturn theme.fg(statusColor(status), glyph);\n}\n\nfunction displayLine(text: string): string {\n\treturn plainLine(text).replace(OUTPUT_TRUNCATION_NOTICE_PATTERN, \"...\").trim();\n}\n\nfunction retryText(run: SubagentRunDetails): string | undefined {\n\tconst retry = getSubagentRetryView(run);\n\tif (!retry) return undefined;\n\tconst state =\n\t\tretry.remainingSeconds > 0\n\t\t\t? `Retrying (${retry.attempt}/${retry.maxAttempts}) in ${retry.remainingSeconds}s`\n\t\t\t: `Retrying (${retry.attempt}/${retry.maxAttempts}) now...`;\n\tconst error = truncate(displayLine(retry.error), RETRY_ERROR_LIMIT);\n\treturn error ? `${state} · ${error}` : state;\n}\n\nfunction latestRunningActivity(run: SubagentRunDetails, toolName: string): ToolActivity | undefined {\n\tfor (let index = run.activities.length - 1; index >= 0; index--) {\n\t\tconst activity = run.activities[index];\n\t\tif (activity?.status === \"running\" && activity.toolName === toolName) return activity;\n\t}\n\treturn undefined;\n}\n\nfunction formatTotalTokens(value: number): string {\n\tconst count = Number.isFinite(value) ? Math.max(0, Math.round(value)) : 0;\n\tif (count < 1_000) return String(count);\n\tconst divisor = count < 999_950 ? 1_000 : 1_000_000;\n\tconst suffix = divisor === 1_000 ? \"k\" : \"M\";\n\tconst rounded = Math.round((count / divisor) * 10) / 10;\n\treturn `${Number.isInteger(rounded) ? rounded.toFixed(0) : rounded.toFixed(1)}${suffix}`;\n}\n\nfunction spinnerGlyph(now: number): string {\n\tconst frame = Math.floor(now / SPINNER_INTERVAL_MS) % SPINNER_FRAMES.length;\n\treturn SPINNER_FRAMES[frame] ?? SPINNER_FRAMES[0] ?? \"\";\n}\n\n// All spinner and status glyphs are single-width characters; this constant\n// documents the expectation and guards against accidental double-width\n// substitutions causing layout flicker in the collapsed flow.\nconst MARKER_WIDTH = 1;\n\n/** One collapsed cell: status glyph, ordinal, and profile label only. */\nfunction flowSegment(run: SubagentRunDetails, index: number, theme: Theme, now: number): string {\n\tlet marker: string;\n\tif (run.status === \"running\") {\n\t\tconst glyph = spinnerGlyph(now);\n\t\t// Pad to MARKER_WIDTH so cellWidth stays stable across frames even if\n\t\t// a glyph measures wider on some terminal/font combinations.\n\t\tconst pad = Math.max(0, MARKER_WIDTH - visibleWidth(glyph));\n\t\tmarker = theme.fg(\"accent\", glyph) + (pad > 0 ? \" \".repeat(pad) : \"\");\n\t} else {\n\t\tmarker = statusMarker(run.status, theme);\n\t}\n\treturn `${marker} ${theme.fg(\"dim\", `#${index + 1}`)} ${theme.fg(\"accent\", profileLabel(run.agent))}`;\n}\n\n/** Collapsed batch flow: one cell per run, wrapped at cell boundaries with\n * uniform cell widths so continuation rows keep their columns aligned. */\nclass CollapsedFlow implements Component {\n\tprivate readonly segments: string[];\n\tprivate readonly cellWidth: number;\n\n\tconstructor(segments: string[]) {\n\t\tthis.segments = segments;\n\t\tthis.cellWidth = segments.reduce((max, segment) => Math.max(max, visibleWidth(segment)), 1);\n\t}\n\n\trender(width: number): string[] {\n\t\tconst usable = Math.max(1, width);\n\t\tconst joined = this.segments.join(FLOW_SEPARATOR);\n\t\tconst packed = visibleWidth(joined);\n\t\tif (packed <= usable) return [joined];\n\t\tif (this.cellWidth > usable) {\n\t\t\treturn this.segments.map((segment) => truncateToWidth(segment, usable, \"...\"));\n\t\t}\n\t\tconst columnCount = Math.max(\n\t\t\t1,\n\t\t\tMath.floor((usable + FLOW_SEPARATOR_WIDTH) / (this.cellWidth + FLOW_SEPARATOR_WIDTH)),\n\t\t);\n\t\tconst lines: string[] = [];\n\t\tfor (let start = 0; start < this.segments.length; start += columnCount) {\n\t\t\tconst row = this.segments.slice(start, start + columnCount);\n\t\t\tlines.push(\n\t\t\t\trow\n\t\t\t\t\t.map((segment, index) => {\n\t\t\t\t\t\tif (index === row.length - 1) return segment;\n\t\t\t\t\t\tconst padding = Math.max(0, this.cellWidth - visibleWidth(segment));\n\t\t\t\t\t\treturn `${segment}${padding > 0 ? \" \".repeat(padding) : \"\"}${FLOW_SEPARATOR}`;\n\t\t\t\t\t})\n\t\t\t\t\t.join(\"\"),\n\t\t\t);\n\t\t}\n\t\treturn lines;\n\t}\n\n\tinvalidate(): void {}\n}\n\nfunction toolCallLabel(count: number): string {\n\treturn `${count} tool call${count === 1 ? \"\" : \"s\"}`;\n}\n\nfunction runHeader(run: SubagentRunDetails, index: number, theme: Theme): string {\n\tconst separator = theme.fg(\"dim\", \" · \");\n\tconst duration = elapsed(run.startedAt, run.endedAt) ?? \"0.0s\";\n\tconst metrics = [\n\t\trun.model,\n\t\trun.thinking,\n\t\t`${formatTotalTokens(run.usage.totalTokens)} tok`,\n\t\ttoolCallLabel(run.usage.toolUses),\n\t\tduration,\n\t].map((metric) => theme.fg(\"muted\", metric));\n\treturn [theme.fg(\"accent\", theme.bold(`#${index + 1} ${profileLabel(run.agent)}`)), ...metrics].join(separator);\n}\n\nfunction sectionTitle(title: string, theme: Theme, color: ThemeColor, suffix?: string): string {\n\tconst heading = theme.fg(color, theme.bold(title));\n\treturn suffix ? `${heading}${theme.fg(\"dim\", ` · ${suffix}`)}` : heading;\n}\n\nfunction activityTitleSuffix(total: number, shown: number): string {\n\tif (total <= DISPLAY_ACTIVITY_LIMIT && shown >= total) return toolCallLabel(total);\n\tif (shown > 0) return `last ${shown} of ${total} tool calls`;\n\treturn toolCallLabel(total);\n}\n\nfunction activityLine(activity: ToolActivity, theme: Theme): string {\n\tconst color: ThemeColor =\n\t\tactivity.status === \"failed\" ? \"error\" : activity.status === \"running\" ? \"accent\" : \"toolOutput\";\n\treturn ` ${theme.fg(color, activityCallText(activity))}`;\n}\n\nfunction addPrompt(\n\tcontainer: Container,\n\trun: SubagentRunDetails,\n\tindex: number,\n\targs: SubagentParams,\n\ttheme: Theme,\n): void {\n\tcontainer.addChild(new Text(sectionTitle(\"Prompt\", theme, \"toolTitle\"), 0, 0));\n\tcontainer.addChild(new Text(theme.fg(\"toolOutput\", taskPrompt(args, index, run)), 2, 0));\n}\n\nfunction addActivity(container: Container, run: SubagentRunDetails, theme: Theme): void {\n\tconst toolCalls = run.activities.filter(isDisplayableActivity);\n\tconst shown = toolCalls.slice(-DISPLAY_ACTIVITY_LIMIT);\n\tconst total = Math.max(run.usage.toolUses, toolCalls.length);\n\tcontainer.addChild(\n\t\tnew Text(sectionTitle(\"Activity\", theme, \"toolTitle\", activityTitleSuffix(total, shown.length)), 0, 0),\n\t);\n\tif (shown.length === 0) {\n\t\tconst empty = total === 0 ? \"No tool calls yet.\" : \"Activity unavailable.\";\n\t\tcontainer.addChild(new Text(theme.fg(\"muted\", empty), 2, 0));\n\t\treturn;\n\t}\n\tfor (const activity of shown) container.addChild(new SingleLineText(activityLine(activity, theme)));\n}\n\nfunction outcomeColor(status: SubagentRunStatus): ThemeColor {\n\tif (status === \"completed\") return \"success\";\n\tif (status === \"failed\") return \"error\";\n\tif (status === \"aborted\") return \"warning\";\n\treturn \"accent\";\n}\n\nfunction outcomeReport(run: SubagentRunDetails): string {\n\tif (typeof run.report === \"string\") return run.report;\n\tconst legacyOutput = (run as SubagentRunDetails & { finalOutput?: unknown }).finalOutput;\n\treturn typeof legacyOutput === \"string\" ? legacyOutput : \"\";\n}\n\nfunction hasOutcome(report: string): boolean {\n\treturn report.trim().length > 0;\n}\n\nfunction addOutcomeMarkdown(container: Container, report: string, theme: Theme): void {\n\tcontainer.addChild(\n\t\tnew Markdown(report, 2, 0, getMarkdownTheme(), {\n\t\t\tcolor: (text) => theme.fg(\"toolOutput\", text),\n\t\t}),\n\t);\n}\n\nfunction addOutcome(container: Container, run: SubagentRunDetails, theme: Theme): void {\n\tconst color = outcomeColor(run.status);\n\tconst report = outcomeReport(run);\n\tcontainer.addChild(new Text(sectionTitle(\"Outcome\", theme, color), 0, 0));\n\n\tif (run.status === \"queued\" || run.status === \"running\") {\n\t\tcontainer.addChild(new Text(theme.fg(\"muted\", \"Still running...\"), 2, 0));\n\t\tconst retry = retryText(run);\n\t\tif (retry) {\n\t\t\tcontainer.addChild(new Text(theme.fg(\"warning\", retry), 2, 0));\n\t\t} else if (latestRunningActivity(run, COMPACTION_ACTIVITY_ID)) {\n\t\t\tcontainer.addChild(new Text(theme.fg(\"accent\", \"Compacting context...\"), 2, 0));\n\t\t}\n\t\treturn;\n\t}\n\n\tif (run.status === \"completed\") {\n\t\tif (hasOutcome(report)) addOutcomeMarkdown(container, report, theme);\n\t\telse container.addChild(new Text(theme.fg(\"muted\", \"No outcome returned.\"), 2, 0));\n\t\treturn;\n\t}\n\n\tconst verdict = run.status === \"failed\" ? \"Failed\" : \"Aborted\";\n\tconst reason = run.error ? `${verdict}: ${run.error}` : `${verdict}.`;\n\tcontainer.addChild(new Text(theme.fg(color, reason), 2, 0));\n\tif (hasOutcome(report)) {\n\t\tcontainer.addChild(new Spacer(1));\n\t\tcontainer.addChild(new Text(theme.fg(\"muted\", \"Partial outcome:\"), 2, 0));\n\t\taddOutcomeMarkdown(container, report, theme);\n\t}\n}\n\nfunction renderRun(run: SubagentRunDetails, index: number, args: SubagentParams, theme: Theme): Component {\n\tconst container = new Container();\n\tcontainer.addChild(new SingleLineText(runHeader(run, index, theme)));\n\tcontainer.addChild(new Spacer(1));\n\taddPrompt(container, run, index, args, theme);\n\tcontainer.addChild(new Spacer(1));\n\taddActivity(container, run, theme);\n\tcontainer.addChild(new Spacer(1));\n\taddOutcome(container, run, theme);\n\treturn container;\n}\n\nfunction fallbackResult(result: AgentToolResult<SubagentDetails>, theme: Theme, isError: boolean): Component {\n\tconst text = result.content.find((part) => part.type === \"text\");\n\tconst value = text?.type === \"text\" ? truncate(text.text, FALLBACK_OUTPUT_LIMIT) : \"(no output)\";\n\treturn new Text(theme.fg(isError ? \"error\" : \"muted\", value), 0, 0);\n}\n\n/** Per-result live-refresh state owned by the shell's render context. */\nexport interface SubagentRenderState {\n\trefreshTimer?: ReturnType<typeof setTimeout>;\n\t/** Cadence the current timer was created with, used to detect changes. */\n\trefreshInterval?: number;\n\t/** Called by the shell when the transcript row is disposed. */\n\tdispose?: () => void;\n}\n\ntype SubagentToolRenderContext = ToolRenderContext<SubagentRenderState, SubagentParams, SubagentDetails>;\n\n/** Pure refresh policy: schedule only while the current view contains changing text. */\nexport function desiredRefreshInterval(\n\truns: readonly SubagentRunDetails[],\n\toptions: { isPartial: boolean; expanded: boolean },\n): number | undefined {\n\tif (!options.isPartial) return undefined;\n\tif (!options.expanded) {\n\t\treturn runs.some((run) => run.status === \"running\") ? SPINNER_INTERVAL_MS : undefined;\n\t}\n\treturn runs.some((run) => run.status === \"running\" || run.retry !== undefined)\n\t\t? ELAPSED_REFRESH_INTERVAL_MS\n\t\t: undefined;\n}\n\nfunction clearLiveRefresh(state: SubagentRenderState): void {\n\tif (state.refreshTimer !== undefined) clearTimeout(state.refreshTimer);\n\tstate.refreshTimer = undefined;\n\tstate.refreshInterval = undefined;\n}\n\n// One one-shot timer per row. A paint with the same cadence keeps the existing\n// deadline; expansion, settlement, or loss of dynamic content clears or\n// reschedules immediately.\nexport function scheduleLiveRefresh(context: SubagentToolRenderContext, isPartial: boolean): void {\n\tconst state = context.state;\n\tstate.dispose ??= () => clearLiveRefresh(state);\n\tconst interval = desiredRefreshInterval(context.result?.details?.runs ?? [], {\n\t\tisPartial,\n\t\texpanded: context.expanded,\n\t});\n\tif (interval === undefined) {\n\t\tclearLiveRefresh(state);\n\t\treturn;\n\t}\n\tif (state.refreshTimer !== undefined) {\n\t\t// Keep a matching timer so unrelated re-renders cannot postpone the\n\t\t// next tick; only reschedule when the desired cadence changes.\n\t\tif (state.refreshInterval === interval) return;\n\t\tclearTimeout(state.refreshTimer);\n\t}\n\tstate.refreshInterval = interval;\n\tstate.refreshTimer = setTimeout(() => {\n\t\tstate.refreshTimer = undefined;\n\t\tstate.refreshInterval = undefined;\n\t\tcontext.invalidate();\n\t}, interval);\n\tstate.refreshTimer.unref?.();\n}\n\nexport function renderSubagentCall(args: SubagentParams, theme: Theme): Component {\n\tconst count = Array.isArray(args.tasks) ? args.tasks.length : 0;\n\tconst title = theme.fg(count > 0 ? \"toolTitle\" : \"error\", theme.bold(\"Subagent\"));\n\treturn new Text(title, 0, 0);\n}\n\nexport function renderSubagentResult(\n\tresult: AgentToolResult<SubagentDetails>,\n\toptions: ToolRenderResultOptions,\n\ttheme: Theme,\n\targs: SubagentParams,\n\tisError: boolean,\n): Component {\n\tconst details = result.details;\n\tif (!details || !Array.isArray(details.runs)) return fallbackResult(result, theme, isError);\n\tif (details.runs.length === 0) return new Text(theme.fg(\"muted\", \"Starting...\"), 0, 0);\n\n\tconst container = new Container();\n\tif (!options.expanded) {\n\t\tconst now = Date.now();\n\t\tcontainer.addChild(new CollapsedFlow(details.runs.map((run, index) => flowSegment(run, index, theme, now))));\n\t\treturn container;\n\t}\n\n\tfor (const [index, run] of details.runs.entries()) {\n\t\tif (index > 0) container.addChild(new Spacer(1));\n\t\tcontainer.addChild(renderRun(run, index, args, theme));\n\t}\n\treturn container;\n}\n"]}
1
+ {"version":3,"file":"render.js","sourceRoot":"","sources":["../../../src/extensions/subagent/render.ts"],"names":[],"mappings":"AAAA,OAAO,EAEN,SAAS,EACT,QAAQ,EACR,MAAM,EACN,IAAI,EACJ,eAAe,EACf,YAAY,GACZ,MAAM,wBAAwB,CAAC;AAEhC,OAAO,EAAE,gBAAgB,EAA+B,MAAM,wCAAwC,CAAC;AACvG,OAAO,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AACxE,OAAO,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AACnD,OAAO,EAAE,sBAAsB,EAAE,sBAAsB,EAA0B,MAAM,gBAAgB,CAAC;AAExG,OAAO,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAClD,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAGhD,MAAM,iBAAiB,GAAG,GAAG,CAAC;AAC9B,MAAM,qBAAqB,GAAG,KAAK,CAAC;AACpC,MAAM,gCAAgC,GAAG,wDAAwD,CAAC;AAElG,0EAA0E;AAC1E,4EAA4E;AAC5E,2EAA2E;AAC3E,8DAA8D;AAC9D,MAAM,aAAa,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;AACrD,MAAM,cAAc,GAAG,CAAC,GAAG,aAAa,EAAE,GAAG,CAAC,GAAG,aAAa,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;AAC3E,MAAM,mBAAmB,GAAG,GAAG,CAAC;AAChC,MAAM,2BAA2B,GAAG,KAAK,CAAC;AAC1C,MAAM,cAAc,GAAG,KAAK,CAAC;AAC7B,MAAM,oBAAoB,GAAG,CAAC,CAAC;AAE/B,yEAAyE;AACzE,MAAM,cAAc;IAGnB,YAAY,IAAY;QACvB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IAClB,CAAC;IAED,MAAM,CAAC,KAAa;QACnB,OAAO,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC;IAChE,CAAC;IAED,UAAU,KAAU,CAAC;CACrB;AAED,SAAS,UAAU,CAAC,IAAoB,EAAE,KAAa,EAAE,GAAuB;IAC/E,uEAAuE;IACvE,4EAA4E;IAC5E,MAAM,KAAK,GAAI,IAAgC,CAAC,KAAK,CAAC;IACtD,OAAO,KAAK,EAAE,CAAC,KAAK,CAAC,EAAE,MAAM,IAAI,GAAG,CAAC,WAAW,CAAC;AAClD,CAAC;AAED,SAAS,YAAY,CAAC,KAAa;IAClC,OAAO,oBAAoB,CAAC,KAA0B,CAAC,IAAI,KAAK,CAAC;AAClE,CAAC;AAED,SAAS,cAAc,CAAC,OAAe;IACtC,MAAM,cAAc,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IAC3C,IAAI,cAAc,IAAI,EAAE;QAAE,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,cAAc,GAAG,EAAE,CAAC,KAAK,cAAc,GAAG,EAAE,GAAG,CAAC;IAC/F,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,OAAO,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;AACpD,CAAC;AAED,SAAS,OAAO,CAAC,SAA6B,EAAE,OAAgB;IAC/D,IAAI,SAAS,KAAK,SAAS;QAAE,OAAO,SAAS,CAAC;IAC9C,OAAO,cAAc,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,OAAO,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC,GAAG,SAAS,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;AACnF,CAAC;AAED,SAAS,WAAW,CAAC,MAAyB;IAC7C,QAAQ,MAAM,EAAE,CAAC;QAChB,KAAK,WAAW;YACf,OAAO,SAAS,CAAC;QAClB,KAAK,QAAQ;YACZ,OAAO,OAAO,CAAC;QAChB,KAAK,SAAS;YACb,OAAO,SAAS,CAAC;QAClB,KAAK,SAAS;YACb,OAAO,QAAQ,CAAC;QACjB;YACC,OAAO,OAAO,CAAC;IACjB,CAAC;AACF,CAAC;AAED,SAAS,YAAY,CAAC,MAAyB,EAAE,KAAY;IAC5D,MAAM,KAAK,GACV,MAAM,KAAK,WAAW;QACrB,CAAC,CAAC,GAAG;QACL,CAAC,CAAC,MAAM,KAAK,QAAQ;YACpB,CAAC,CAAC,GAAG;YACL,CAAC,CAAC,MAAM,KAAK,SAAS;gBACrB,CAAC,CAAC,GAAG;gBACL,CAAC,CAAC,MAAM,KAAK,SAAS;oBACrB,CAAC,CAAC,GAAG;oBACL,CAAC,CAAC,GAAG,CAAC;IACX,OAAO,KAAK,CAAC,EAAE,CAAC,WAAW,CAAC,MAAM,CAAC,EAAE,KAAK,CAAC,CAAC;AAC7C,CAAC;AAED,SAAS,WAAW,CAAC,IAAY;IAChC,OAAO,SAAS,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,gCAAgC,EAAE,KAAK,CAAC,CAAC,IAAI,EAAE,CAAC;AAChF,CAAC;AAED,SAAS,SAAS,CAAC,GAAuB;IACzC,MAAM,KAAK,GAAG,oBAAoB,CAAC,GAAG,CAAC,CAAC;IACxC,IAAI,CAAC,KAAK;QAAE,OAAO,SAAS,CAAC;IAC7B,MAAM,KAAK,GACV,KAAK,CAAC,gBAAgB,GAAG,CAAC;QACzB,CAAC,CAAC,aAAa,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,WAAW,QAAQ,KAAK,CAAC,gBAAgB,GAAG;QAClF,CAAC,CAAC,aAAa,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,WAAW,UAAU,CAAC;IAC9D,MAAM,KAAK,GAAG,QAAQ,CAAC,WAAW,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,iBAAiB,CAAC,CAAC;IACpE,OAAO,KAAK,CAAC,CAAC,CAAC,GAAG,KAAK,MAAM,KAAK,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC;AAC9C,CAAC;AAED,SAAS,qBAAqB,CAAC,GAAuB,EAAE,QAAgB;IACvE,KAAK,IAAI,KAAK,GAAG,GAAG,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE,KAAK,EAAE,EAAE,CAAC;QACjE,MAAM,QAAQ,GAAG,GAAG,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;QACvC,IAAI,QAAQ,EAAE,MAAM,KAAK,SAAS,IAAI,QAAQ,CAAC,QAAQ,KAAK,QAAQ;YAAE,OAAO,QAAQ,CAAC;IACvF,CAAC;IACD,OAAO,SAAS,CAAC;AAClB,CAAC;AAED,SAAS,iBAAiB,CAAC,KAAa;IACvC,MAAM,KAAK,GAAG,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC1E,IAAI,KAAK,GAAG,KAAK;QAAE,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;IACxC,MAAM,OAAO,GAAG,KAAK,GAAG,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;IACpD,MAAM,MAAM,GAAG,OAAO,KAAK,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;IAC7C,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,KAAK,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,CAAC;IACxD,OAAO,GAAG,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,MAAM,EAAE,CAAC;AAC1F,CAAC;AAED,SAAS,YAAY,CAAC,GAAW;IAChC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,GAAG,mBAAmB,CAAC,GAAG,cAAc,CAAC,MAAM,CAAC;IAC5E,OAAO,cAAc,CAAC,KAAK,CAAC,IAAI,cAAc,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;AACzD,CAAC;AAED,2EAA2E;AAC3E,uEAAuE;AACvE,8DAA8D;AAC9D,MAAM,YAAY,GAAG,CAAC,CAAC;AAEvB,yEAAyE;AACzE,SAAS,WAAW,CAAC,GAAuB,EAAE,KAAa,EAAE,KAAY,EAAE,GAAW;IACrF,IAAI,MAAc,CAAC;IACnB,IAAI,GAAG,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;QAC9B,MAAM,KAAK,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC;QAChC,sEAAsE;QACtE,6DAA6D;QAC7D,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,YAAY,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC;QAC5D,MAAM,GAAG,KAAK,CAAC,EAAE,CAAC,QAAQ,EAAE,KAAK,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IACvE,CAAC;SAAM,CAAC;QACP,MAAM,GAAG,YAAY,CAAC,GAAG,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IAC1C,CAAC;IACD,OAAO,GAAG,MAAM,IAAI,KAAK,CAAC,EAAE,CAAC,KAAK,EAAE,IAAI,KAAK,GAAG,CAAC,EAAE,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC,QAAQ,EAAE,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC;AACvG,CAAC;AAED;0EAC0E;AAC1E,MAAM,aAAa;IAIlB,YAAY,QAAkB;QAC7B,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACzB,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,OAAO,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,YAAY,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAC7F,CAAC;IAED,MAAM,CAAC,KAAa;QACnB,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;QAClC,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;QAClD,MAAM,MAAM,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC;QACpC,IAAI,MAAM,IAAI,MAAM;YAAE,OAAO,CAAC,MAAM,CAAC,CAAC;QACtC,IAAI,IAAI,CAAC,SAAS,GAAG,MAAM,EAAE,CAAC;YAC7B,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,eAAe,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC;QAChF,CAAC;QACD,MAAM,WAAW,GAAG,IAAI,CAAC,GAAG,CAC3B,CAAC,EACD,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,GAAG,oBAAoB,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,GAAG,oBAAoB,CAAC,CAAC,CACrF,CAAC;QACF,MAAM,KAAK,GAAa,EAAE,CAAC;QAC3B,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,KAAK,IAAI,WAAW,EAAE,CAAC;YACxE,MAAM,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,GAAG,WAAW,CAAC,CAAC;YAC5D,KAAK,CAAC,IAAI,CACT,GAAG;iBACD,GAAG,CAAC,CAAC,OAAO,EAAE,KAAK,EAAE,EAAE;gBACvB,IAAI,KAAK,KAAK,GAAG,CAAC,MAAM,GAAG,CAAC;oBAAE,OAAO,OAAO,CAAC;gBAC7C,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,SAAS,GAAG,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC;gBACpE,OAAO,GAAG,OAAO,GAAG,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,cAAc,EAAE,CAAC;YAC/E,CAAC,CAAC;iBACD,IAAI,CAAC,EAAE,CAAC,CACV,CAAC;QACH,CAAC;QACD,OAAO,KAAK,CAAC;IACd,CAAC;IAED,UAAU,KAAU,CAAC;CACrB;AAED,SAAS,aAAa,CAAC,KAAa;IACnC,OAAO,GAAG,KAAK,aAAa,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;AACtD,CAAC;AAED,SAAS,SAAS,CAAC,GAAuB,EAAE,KAAa,EAAE,KAAY;IACtE,MAAM,SAAS,GAAG,KAAK,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;IACzC,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,SAAS,EAAE,GAAG,CAAC,OAAO,CAAC,IAAI,MAAM,CAAC;IAC/D,MAAM,OAAO,GAAG;QACf,GAAG,CAAC,KAAK;QACT,GAAG,CAAC,QAAQ;QACZ,GAAG,iBAAiB,CAAC,GAAG,CAAC,KAAK,CAAC,WAAW,CAAC,MAAM;QACjD,aAAa,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC;QACjC,QAAQ;KACR,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC;IAC7C,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,QAAQ,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,KAAK,GAAG,CAAC,IAAI,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,EAAE,GAAG,OAAO,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;AACjH,CAAC;AAED,SAAS,YAAY,CAAC,KAAa,EAAE,KAAY,EAAE,KAAiB,EAAE,MAAe;IACpF,MAAM,OAAO,GAAG,KAAK,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;IACnD,OAAO,MAAM,CAAC,CAAC,CAAC,GAAG,OAAO,GAAG,KAAK,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC;AAC1E,CAAC;AAED,SAAS,mBAAmB,CAAC,KAAa,EAAE,KAAa;IACxD,IAAI,KAAK,IAAI,sBAAsB,IAAI,KAAK,IAAI,KAAK;QAAE,OAAO,aAAa,CAAC,KAAK,CAAC,CAAC;IACnF,IAAI,KAAK,GAAG,CAAC;QAAE,OAAO,QAAQ,KAAK,OAAO,KAAK,aAAa,CAAC;IAC7D,OAAO,aAAa,CAAC,KAAK,CAAC,CAAC;AAC7B,CAAC;AAED,SAAS,YAAY,CAAC,QAAsB,EAAE,KAAY;IACzD,0EAA0E;IAC1E,2EAA2E;IAC3E,gDAAgD;IAChD,MAAM,IAAI,GAAG,KAAK,CAAC,EAAE,CAAC,YAAY,EAAE,gBAAgB,CAAC,QAAQ,CAAC,CAAC,CAAC;IAChE,IAAI,QAAQ,CAAC,MAAM,KAAK,QAAQ;QAAE,OAAO,GAAG,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC;IAC7E,IAAI,QAAQ,CAAC,MAAM,KAAK,SAAS;QAAE,OAAO,GAAG,KAAK,CAAC,EAAE,CAAC,QAAQ,EAAE,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC;IAC/E,OAAO,KAAK,IAAI,EAAE,CAAC;AACpB,CAAC;AAED,SAAS,SAAS,CACjB,SAAoB,EACpB,GAAuB,EACvB,KAAa,EACb,IAAoB,EACpB,KAAY;IAEZ,SAAS,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE,KAAK,EAAE,WAAW,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IAC/E,SAAS,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,EAAE,UAAU,CAAC,IAAI,EAAE,KAAK,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;AAC1F,CAAC;AAED,SAAS,WAAW,CAAC,SAAoB,EAAE,GAAuB,EAAE,KAAY;IAC/E,MAAM,SAAS,GAAG,GAAG,CAAC,UAAU,CAAC,MAAM,CAAC,qBAAqB,CAAC,CAAC;IAC/D,MAAM,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC,sBAAsB,CAAC,CAAC;IACvD,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC;IAC7D,SAAS,CAAC,QAAQ,CACjB,IAAI,IAAI,CAAC,YAAY,CAAC,UAAU,EAAE,KAAK,EAAE,WAAW,EAAE,mBAAmB,CAAC,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CACtG,CAAC;IACF,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACxB,MAAM,KAAK,GAAG,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,oBAAoB,CAAC,CAAC,CAAC,uBAAuB,CAAC;QAC3E,SAAS,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QAC7D,OAAO;IACR,CAAC;IACD,KAAK,MAAM,QAAQ,IAAI,KAAK;QAAE,SAAS,CAAC,QAAQ,CAAC,IAAI,cAAc,CAAC,YAAY,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;AACrG,CAAC;AAED,SAAS,YAAY,CAAC,MAAyB;IAC9C,IAAI,MAAM,KAAK,WAAW;QAAE,OAAO,SAAS,CAAC;IAC7C,IAAI,MAAM,KAAK,QAAQ;QAAE,OAAO,OAAO,CAAC;IACxC,IAAI,MAAM,KAAK,SAAS;QAAE,OAAO,SAAS,CAAC;IAC3C,OAAO,QAAQ,CAAC;AACjB,CAAC;AAED,SAAS,aAAa,CAAC,GAAuB;IAC7C,IAAI,OAAO,GAAG,CAAC,MAAM,KAAK,QAAQ;QAAE,OAAO,GAAG,CAAC,MAAM,CAAC;IACtD,MAAM,YAAY,GAAI,GAAsD,CAAC,WAAW,CAAC;IACzF,OAAO,OAAO,YAAY,KAAK,QAAQ,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC;AAC7D,CAAC;AAED,SAAS,UAAU,CAAC,MAAc;IACjC,OAAO,MAAM,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC;AACjC,CAAC;AAED,SAAS,kBAAkB,CAAC,SAAoB,EAAE,MAAc,EAAE,KAAY;IAC7E,SAAS,CAAC,QAAQ,CACjB,IAAI,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,gBAAgB,EAAE,EAAE;QAC9C,KAAK,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,EAAE,IAAI,CAAC;KAC7C,CAAC,CACF,CAAC;AACH,CAAC;AAED,SAAS,UAAU,CAAC,SAAoB,EAAE,GAAuB,EAAE,KAAY;IAC9E,MAAM,KAAK,GAAG,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IACvC,MAAM,MAAM,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC;IAClC,SAAS,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,YAAY,CAAC,SAAS,EAAE,KAAK,EAAE,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IAE1E,IAAI,GAAG,CAAC,MAAM,KAAK,QAAQ,IAAI,GAAG,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;QACzD,SAAS,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,kBAAkB,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QAC1E,MAAM,KAAK,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC;QAC7B,IAAI,KAAK,EAAE,CAAC;YACX,SAAS,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,SAAS,EAAE,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QAChE,CAAC;aAAM,IAAI,qBAAqB,CAAC,GAAG,EAAE,sBAAsB,CAAC,EAAE,CAAC;YAC/D,SAAS,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,QAAQ,EAAE,uBAAuB,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QACjF,CAAC;QACD,OAAO;IACR,CAAC;IAED,IAAI,GAAG,CAAC,MAAM,KAAK,WAAW,EAAE,CAAC;QAChC,IAAI,UAAU,CAAC,MAAM,CAAC;YAAE,kBAAkB,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC;;YAChE,SAAS,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,sBAAsB,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QACnF,OAAO;IACR,CAAC;IAED,MAAM,OAAO,GAAG,GAAG,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC;IAC/D,MAAM,MAAM,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,OAAO,KAAK,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,GAAG,OAAO,GAAG,CAAC;IACtE,SAAS,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IAC5D,IAAI,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;QACxB,SAAS,CAAC,QAAQ,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;QAClC,SAAS,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,kBAAkB,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QAC1E,kBAAkB,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC;IAC9C,CAAC;AACF,CAAC;AAED,SAAS,SAAS,CAAC,GAAuB,EAAE,KAAa,EAAE,IAAoB,EAAE,KAAY;IAC5F,MAAM,SAAS,GAAG,IAAI,SAAS,EAAE,CAAC;IAClC,SAAS,CAAC,QAAQ,CAAC,IAAI,cAAc,CAAC,SAAS,CAAC,GAAG,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;IACrE,SAAS,CAAC,QAAQ,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;IAClC,SAAS,CAAC,SAAS,EAAE,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;IAC9C,SAAS,CAAC,QAAQ,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;IAClC,WAAW,CAAC,SAAS,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC;IACnC,SAAS,CAAC,QAAQ,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;IAClC,UAAU,CAAC,SAAS,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC;IAClC,OAAO,SAAS,CAAC;AAClB,CAAC;AAED,SAAS,cAAc,CAAC,MAAwC,EAAE,KAAY,EAAE,OAAgB;IAC/F,MAAM,IAAI,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC;IACjE,MAAM,KAAK,GAAG,IAAI,EAAE,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,qBAAqB,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC;IACjG,OAAO,IAAI,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,EAAE,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;AACrE,CAAC;AAaD,wFAAwF;AACxF,MAAM,UAAU,sBAAsB,CACrC,IAAmC,EACnC,OAAkD;IAElD,IAAI,CAAC,OAAO,CAAC,SAAS;QAAE,OAAO,SAAS,CAAC;IACzC,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC;QACvB,OAAO,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,SAAS,CAAC;IACvF,CAAC;IACD,OAAO,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,MAAM,KAAK,SAAS,IAAI,GAAG,CAAC,KAAK,KAAK,SAAS,CAAC;QAC7E,CAAC,CAAC,2BAA2B;QAC7B,CAAC,CAAC,SAAS,CAAC;AACd,CAAC;AAED,SAAS,gBAAgB,CAAC,KAA0B;IACnD,IAAI,KAAK,CAAC,YAAY,KAAK,SAAS;QAAE,YAAY,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;IACvE,KAAK,CAAC,YAAY,GAAG,SAAS,CAAC;IAC/B,KAAK,CAAC,eAAe,GAAG,SAAS,CAAC;AACnC,CAAC;AAED,+EAA+E;AAC/E,wEAAwE;AACxE,2BAA2B;AAC3B,MAAM,UAAU,mBAAmB,CAAC,OAAkC,EAAE,SAAkB;IACzF,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC;IAC5B,KAAK,CAAC,OAAO,KAAK,GAAG,EAAE,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC;IAChD,MAAM,QAAQ,GAAG,sBAAsB,CAAC,OAAO,CAAC,MAAM,EAAE,OAAO,EAAE,IAAI,IAAI,EAAE,EAAE;QAC5E,SAAS;QACT,QAAQ,EAAE,OAAO,CAAC,QAAQ;KAC1B,CAAC,CAAC;IACH,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;QAC5B,gBAAgB,CAAC,KAAK,CAAC,CAAC;QACxB,OAAO;IACR,CAAC;IACD,IAAI,KAAK,CAAC,YAAY,KAAK,SAAS,EAAE,CAAC;QACtC,oEAAoE;QACpE,+DAA+D;QAC/D,IAAI,KAAK,CAAC,eAAe,KAAK,QAAQ;YAAE,OAAO;QAC/C,YAAY,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;IAClC,CAAC;IACD,KAAK,CAAC,eAAe,GAAG,QAAQ,CAAC;IACjC,KAAK,CAAC,YAAY,GAAG,UAAU,CAAC,GAAG,EAAE;QACpC,KAAK,CAAC,YAAY,GAAG,SAAS,CAAC;QAC/B,KAAK,CAAC,eAAe,GAAG,SAAS,CAAC;QAClC,OAAO,CAAC,UAAU,EAAE,CAAC;IACtB,CAAC,EAAE,QAAQ,CAAC,CAAC;IACb,KAAK,CAAC,YAAY,CAAC,KAAK,EAAE,EAAE,CAAC;AAC9B,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,IAAoB,EAAE,KAAY;IACpE,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;IAChE,MAAM,KAAK,GAAG,KAAK,CAAC,EAAE,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,OAAO,EAAE,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC;IAClF,OAAO,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;AAC9B,CAAC;AAED,MAAM,UAAU,oBAAoB,CACnC,MAAwC,EACxC,OAAgC,EAChC,KAAY,EACZ,IAAoB,EACpB,OAAgB;IAEhB,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC;IAC/B,IAAI,CAAC,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC;QAAE,OAAO,cAAc,CAAC,MAAM,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;IAC5F,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,aAAa,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IAEvF,MAAM,SAAS,GAAG,IAAI,SAAS,EAAE,CAAC;IAClC,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC;QACvB,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACvB,SAAS,CAAC,QAAQ,CAAC,IAAI,aAAa,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE,CAAC,WAAW,CAAC,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QAC7G,OAAO,SAAS,CAAC;IAClB,CAAC;IAED,KAAK,MAAM,CAAC,KAAK,EAAE,GAAG,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,CAAC;QACnD,IAAI,KAAK,GAAG,CAAC;YAAE,SAAS,CAAC,QAAQ,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;QACjD,SAAS,CAAC,QAAQ,CAAC,SAAS,CAAC,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC;IACxD,CAAC;IACD,OAAO,SAAS,CAAC;AAClB,CAAC","sourcesContent":["import {\n\ttype Component,\n\tContainer,\n\tMarkdown,\n\tSpacer,\n\tText,\n\ttruncateToWidth,\n\tvisibleWidth,\n} from \"@earendil-works/pi-tui\";\nimport type { AgentToolResult, ToolRenderContext, ToolRenderResultOptions } from \"../../core/extensions/types.ts\";\nimport { getMarkdownTheme, type Theme, type ThemeColor } from \"../../modes/interactive/theme/theme.ts\";\nimport { activityCallText, isDisplayableActivity } from \"./activity.ts\";\nimport { AGENT_PROFILE_LABELS } from \"./agents.ts\";\nimport { COMPACTION_ACTIVITY_ID, DISPLAY_ACTIVITY_LIMIT, type SubagentAgentName } from \"./constants.ts\";\nimport type { SubagentParams } from \"./schema.ts\";\nimport { getSubagentRetryView } from \"./state.ts\";\nimport { plainLine, truncate } from \"./text.ts\";\nimport type { SubagentDetails, SubagentRunDetails, SubagentRunStatus, ToolActivity } from \"./types.ts\";\n\nconst RETRY_ERROR_LIMIT = 160;\nconst FALLBACK_OUTPUT_LIMIT = 4_000;\nconst OUTPUT_TRUNCATION_NOTICE_PATTERN = /\\s*\\[Output truncated(?:: \\d+ bytes omitted)?\\.\\]\\s*$/u;\n\n// A breathing dot-to-star bloom: the sequence plays forward to full bloom\n// and back, holding each extreme for two ticks. The mid frame uses ✼ rather\n// than the more common ✳ because U+2733 carries the Unicode Emoji property\n// and some terminals render it as a double-width color emoji.\nconst SPINNER_BLOOM = [\"·\", \"✢\", \"✼\", \"✶\", \"✻\", \"✽\"];\nconst SPINNER_FRAMES = [...SPINNER_BLOOM, ...[...SPINNER_BLOOM].reverse()];\nconst SPINNER_INTERVAL_MS = 120;\nconst ELAPSED_REFRESH_INTERVAL_MS = 1_000;\nconst FLOW_SEPARATOR = \" · \";\nconst FLOW_SEPARATOR_WIDTH = 3;\n\n/** Width-aware single-line text for compact rows and section headers. */\nclass SingleLineText implements Component {\n\tprivate readonly text: string;\n\n\tconstructor(text: string) {\n\t\tthis.text = text;\n\t}\n\n\trender(width: number): string[] {\n\t\treturn [truncateToWidth(this.text, Math.max(1, width), \"...\")];\n\t}\n\n\tinvalidate(): void {}\n}\n\nfunction taskPrompt(args: SubagentParams, index: number, run: SubagentRunDetails): string {\n\t// Tool calls restored from before the tasks-array shape carry a legacy\n\t// args object without `tasks`; those sections fall back to the description.\n\tconst tasks = (args as Partial<SubagentParams>).tasks;\n\treturn tasks?.[index]?.prompt ?? run.description;\n}\n\nfunction profileLabel(agent: string): string {\n\treturn AGENT_PROFILE_LABELS[agent as SubagentAgentName] ?? agent;\n}\n\nfunction formatDuration(seconds: number): string {\n\tconst roundedSeconds = Math.round(seconds);\n\tif (roundedSeconds >= 60) return `${Math.floor(roundedSeconds / 60)}m ${roundedSeconds % 60}s`;\n\treturn `${seconds.toFixed(seconds < 10 ? 1 : 0)}s`;\n}\n\nfunction elapsed(startedAt: number | undefined, endedAt?: number): string | undefined {\n\tif (startedAt === undefined) return undefined;\n\treturn formatDuration(Math.max(0, ((endedAt ?? Date.now()) - startedAt) / 1_000));\n}\n\nfunction statusColor(status: SubagentRunStatus): \"success\" | \"error\" | \"warning\" | \"accent\" | \"muted\" {\n\tswitch (status) {\n\t\tcase \"completed\":\n\t\t\treturn \"success\";\n\t\tcase \"failed\":\n\t\t\treturn \"error\";\n\t\tcase \"aborted\":\n\t\t\treturn \"warning\";\n\t\tcase \"running\":\n\t\t\treturn \"accent\";\n\t\tdefault:\n\t\t\treturn \"muted\";\n\t}\n}\n\nfunction statusMarker(status: SubagentRunStatus, theme: Theme): string {\n\tconst glyph =\n\t\tstatus === \"completed\"\n\t\t\t? \"✓\"\n\t\t\t: status === \"failed\"\n\t\t\t\t? \"×\"\n\t\t\t\t: status === \"aborted\"\n\t\t\t\t\t? \"■\"\n\t\t\t\t\t: status === \"running\"\n\t\t\t\t\t\t? \"›\"\n\t\t\t\t\t\t: \"○\";\n\treturn theme.fg(statusColor(status), glyph);\n}\n\nfunction displayLine(text: string): string {\n\treturn plainLine(text).replace(OUTPUT_TRUNCATION_NOTICE_PATTERN, \"...\").trim();\n}\n\nfunction retryText(run: SubagentRunDetails): string | undefined {\n\tconst retry = getSubagentRetryView(run);\n\tif (!retry) return undefined;\n\tconst state =\n\t\tretry.remainingSeconds > 0\n\t\t\t? `Retrying (${retry.attempt}/${retry.maxAttempts}) in ${retry.remainingSeconds}s`\n\t\t\t: `Retrying (${retry.attempt}/${retry.maxAttempts}) now...`;\n\tconst error = truncate(displayLine(retry.error), RETRY_ERROR_LIMIT);\n\treturn error ? `${state} · ${error}` : state;\n}\n\nfunction latestRunningActivity(run: SubagentRunDetails, toolName: string): ToolActivity | undefined {\n\tfor (let index = run.activities.length - 1; index >= 0; index--) {\n\t\tconst activity = run.activities[index];\n\t\tif (activity?.status === \"running\" && activity.toolName === toolName) return activity;\n\t}\n\treturn undefined;\n}\n\nfunction formatTotalTokens(value: number): string {\n\tconst count = Number.isFinite(value) ? Math.max(0, Math.round(value)) : 0;\n\tif (count < 1_000) return String(count);\n\tconst divisor = count < 999_950 ? 1_000 : 1_000_000;\n\tconst suffix = divisor === 1_000 ? \"k\" : \"M\";\n\tconst rounded = Math.round((count / divisor) * 10) / 10;\n\treturn `${Number.isInteger(rounded) ? rounded.toFixed(0) : rounded.toFixed(1)}${suffix}`;\n}\n\nfunction spinnerGlyph(now: number): string {\n\tconst frame = Math.floor(now / SPINNER_INTERVAL_MS) % SPINNER_FRAMES.length;\n\treturn SPINNER_FRAMES[frame] ?? SPINNER_FRAMES[0] ?? \"\";\n}\n\n// All spinner and status glyphs are single-width characters; this constant\n// documents the expectation and guards against accidental double-width\n// substitutions causing layout flicker in the collapsed flow.\nconst MARKER_WIDTH = 1;\n\n/** One collapsed cell: status glyph, ordinal, and profile label only. */\nfunction flowSegment(run: SubagentRunDetails, index: number, theme: Theme, now: number): string {\n\tlet marker: string;\n\tif (run.status === \"running\") {\n\t\tconst glyph = spinnerGlyph(now);\n\t\t// Pad to MARKER_WIDTH so cellWidth stays stable across frames even if\n\t\t// a glyph measures wider on some terminal/font combinations.\n\t\tconst pad = Math.max(0, MARKER_WIDTH - visibleWidth(glyph));\n\t\tmarker = theme.fg(\"accent\", glyph) + (pad > 0 ? \" \".repeat(pad) : \"\");\n\t} else {\n\t\tmarker = statusMarker(run.status, theme);\n\t}\n\treturn `${marker} ${theme.fg(\"dim\", `#${index + 1}`)} ${theme.fg(\"accent\", profileLabel(run.agent))}`;\n}\n\n/** Collapsed batch flow: one cell per run, wrapped at cell boundaries with\n * uniform cell widths so continuation rows keep their columns aligned. */\nclass CollapsedFlow implements Component {\n\tprivate readonly segments: string[];\n\tprivate readonly cellWidth: number;\n\n\tconstructor(segments: string[]) {\n\t\tthis.segments = segments;\n\t\tthis.cellWidth = segments.reduce((max, segment) => Math.max(max, visibleWidth(segment)), 1);\n\t}\n\n\trender(width: number): string[] {\n\t\tconst usable = Math.max(1, width);\n\t\tconst joined = this.segments.join(FLOW_SEPARATOR);\n\t\tconst packed = visibleWidth(joined);\n\t\tif (packed <= usable) return [joined];\n\t\tif (this.cellWidth > usable) {\n\t\t\treturn this.segments.map((segment) => truncateToWidth(segment, usable, \"...\"));\n\t\t}\n\t\tconst columnCount = Math.max(\n\t\t\t1,\n\t\t\tMath.floor((usable + FLOW_SEPARATOR_WIDTH) / (this.cellWidth + FLOW_SEPARATOR_WIDTH)),\n\t\t);\n\t\tconst lines: string[] = [];\n\t\tfor (let start = 0; start < this.segments.length; start += columnCount) {\n\t\t\tconst row = this.segments.slice(start, start + columnCount);\n\t\t\tlines.push(\n\t\t\t\trow\n\t\t\t\t\t.map((segment, index) => {\n\t\t\t\t\t\tif (index === row.length - 1) return segment;\n\t\t\t\t\t\tconst padding = Math.max(0, this.cellWidth - visibleWidth(segment));\n\t\t\t\t\t\treturn `${segment}${padding > 0 ? \" \".repeat(padding) : \"\"}${FLOW_SEPARATOR}`;\n\t\t\t\t\t})\n\t\t\t\t\t.join(\"\"),\n\t\t\t);\n\t\t}\n\t\treturn lines;\n\t}\n\n\tinvalidate(): void {}\n}\n\nfunction toolCallLabel(count: number): string {\n\treturn `${count} tool call${count === 1 ? \"\" : \"s\"}`;\n}\n\nfunction runHeader(run: SubagentRunDetails, index: number, theme: Theme): string {\n\tconst separator = theme.fg(\"dim\", \" · \");\n\tconst duration = elapsed(run.startedAt, run.endedAt) ?? \"0.0s\";\n\tconst metrics = [\n\t\trun.model,\n\t\trun.thinking,\n\t\t`${formatTotalTokens(run.usage.totalTokens)} tok`,\n\t\ttoolCallLabel(run.usage.toolUses),\n\t\tduration,\n\t].map((metric) => theme.fg(\"muted\", metric));\n\treturn [theme.fg(\"accent\", theme.bold(`#${index + 1} ${profileLabel(run.agent)}`)), ...metrics].join(separator);\n}\n\nfunction sectionTitle(title: string, theme: Theme, color: ThemeColor, suffix?: string): string {\n\tconst heading = theme.fg(color, theme.bold(title));\n\treturn suffix ? `${heading}${theme.fg(\"dim\", ` · ${suffix}`)}` : heading;\n}\n\nfunction activityTitleSuffix(total: number, shown: number): string {\n\tif (total <= DISPLAY_ACTIVITY_LIMIT && shown >= total) return toolCallLabel(total);\n\tif (shown > 0) return `last ${shown} of ${total} tool calls`;\n\treturn toolCallLabel(total);\n}\n\nfunction activityLine(activity: ToolActivity, theme: Theme): string {\n\t// State color stays on the two-column status marker; the call text itself\n\t// keeps the quiet toolOutput color so a running row does not flash a whole\n\t// accent-colored command line on every refresh.\n\tconst text = theme.fg(\"toolOutput\", activityCallText(activity));\n\tif (activity.status === \"failed\") return `${theme.fg(\"error\", \"×\")} ${text}`;\n\tif (activity.status === \"running\") return `${theme.fg(\"accent\", \"›\")} ${text}`;\n\treturn ` ${text}`;\n}\n\nfunction addPrompt(\n\tcontainer: Container,\n\trun: SubagentRunDetails,\n\tindex: number,\n\targs: SubagentParams,\n\ttheme: Theme,\n): void {\n\tcontainer.addChild(new Text(sectionTitle(\"Prompt\", theme, \"toolTitle\"), 0, 0));\n\tcontainer.addChild(new Text(theme.fg(\"toolOutput\", taskPrompt(args, index, run)), 2, 0));\n}\n\nfunction addActivity(container: Container, run: SubagentRunDetails, theme: Theme): void {\n\tconst toolCalls = run.activities.filter(isDisplayableActivity);\n\tconst shown = toolCalls.slice(-DISPLAY_ACTIVITY_LIMIT);\n\tconst total = Math.max(run.usage.toolUses, toolCalls.length);\n\tcontainer.addChild(\n\t\tnew Text(sectionTitle(\"Activity\", theme, \"toolTitle\", activityTitleSuffix(total, shown.length)), 0, 0),\n\t);\n\tif (shown.length === 0) {\n\t\tconst empty = total === 0 ? \"No tool calls yet.\" : \"Activity unavailable.\";\n\t\tcontainer.addChild(new Text(theme.fg(\"muted\", empty), 2, 0));\n\t\treturn;\n\t}\n\tfor (const activity of shown) container.addChild(new SingleLineText(activityLine(activity, theme)));\n}\n\nfunction outcomeColor(status: SubagentRunStatus): ThemeColor {\n\tif (status === \"completed\") return \"success\";\n\tif (status === \"failed\") return \"error\";\n\tif (status === \"aborted\") return \"warning\";\n\treturn \"accent\";\n}\n\nfunction outcomeReport(run: SubagentRunDetails): string {\n\tif (typeof run.report === \"string\") return run.report;\n\tconst legacyOutput = (run as SubagentRunDetails & { finalOutput?: unknown }).finalOutput;\n\treturn typeof legacyOutput === \"string\" ? legacyOutput : \"\";\n}\n\nfunction hasOutcome(report: string): boolean {\n\treturn report.trim().length > 0;\n}\n\nfunction addOutcomeMarkdown(container: Container, report: string, theme: Theme): void {\n\tcontainer.addChild(\n\t\tnew Markdown(report, 2, 0, getMarkdownTheme(), {\n\t\t\tcolor: (text) => theme.fg(\"toolOutput\", text),\n\t\t}),\n\t);\n}\n\nfunction addOutcome(container: Container, run: SubagentRunDetails, theme: Theme): void {\n\tconst color = outcomeColor(run.status);\n\tconst report = outcomeReport(run);\n\tcontainer.addChild(new Text(sectionTitle(\"Outcome\", theme, color), 0, 0));\n\n\tif (run.status === \"queued\" || run.status === \"running\") {\n\t\tcontainer.addChild(new Text(theme.fg(\"muted\", \"Still running...\"), 2, 0));\n\t\tconst retry = retryText(run);\n\t\tif (retry) {\n\t\t\tcontainer.addChild(new Text(theme.fg(\"warning\", retry), 2, 0));\n\t\t} else if (latestRunningActivity(run, COMPACTION_ACTIVITY_ID)) {\n\t\t\tcontainer.addChild(new Text(theme.fg(\"accent\", \"Compacting context...\"), 2, 0));\n\t\t}\n\t\treturn;\n\t}\n\n\tif (run.status === \"completed\") {\n\t\tif (hasOutcome(report)) addOutcomeMarkdown(container, report, theme);\n\t\telse container.addChild(new Text(theme.fg(\"muted\", \"No outcome returned.\"), 2, 0));\n\t\treturn;\n\t}\n\n\tconst verdict = run.status === \"failed\" ? \"Failed\" : \"Aborted\";\n\tconst reason = run.error ? `${verdict}: ${run.error}` : `${verdict}.`;\n\tcontainer.addChild(new Text(theme.fg(color, reason), 2, 0));\n\tif (hasOutcome(report)) {\n\t\tcontainer.addChild(new Spacer(1));\n\t\tcontainer.addChild(new Text(theme.fg(\"muted\", \"Partial outcome:\"), 2, 0));\n\t\taddOutcomeMarkdown(container, report, theme);\n\t}\n}\n\nfunction renderRun(run: SubagentRunDetails, index: number, args: SubagentParams, theme: Theme): Component {\n\tconst container = new Container();\n\tcontainer.addChild(new SingleLineText(runHeader(run, index, theme)));\n\tcontainer.addChild(new Spacer(1));\n\taddPrompt(container, run, index, args, theme);\n\tcontainer.addChild(new Spacer(1));\n\taddActivity(container, run, theme);\n\tcontainer.addChild(new Spacer(1));\n\taddOutcome(container, run, theme);\n\treturn container;\n}\n\nfunction fallbackResult(result: AgentToolResult<SubagentDetails>, theme: Theme, isError: boolean): Component {\n\tconst text = result.content.find((part) => part.type === \"text\");\n\tconst value = text?.type === \"text\" ? truncate(text.text, FALLBACK_OUTPUT_LIMIT) : \"(no output)\";\n\treturn new Text(theme.fg(isError ? \"error\" : \"muted\", value), 0, 0);\n}\n\n/** Per-result live-refresh state owned by the shell's render context. */\nexport interface SubagentRenderState {\n\trefreshTimer?: ReturnType<typeof setTimeout>;\n\t/** Cadence the current timer was created with, used to detect changes. */\n\trefreshInterval?: number;\n\t/** Called by the shell when the transcript row is disposed. */\n\tdispose?: () => void;\n}\n\ntype SubagentToolRenderContext = ToolRenderContext<SubagentRenderState, SubagentParams, SubagentDetails>;\n\n/** Pure refresh policy: schedule only while the current view contains changing text. */\nexport function desiredRefreshInterval(\n\truns: readonly SubagentRunDetails[],\n\toptions: { isPartial: boolean; expanded: boolean },\n): number | undefined {\n\tif (!options.isPartial) return undefined;\n\tif (!options.expanded) {\n\t\treturn runs.some((run) => run.status === \"running\") ? SPINNER_INTERVAL_MS : undefined;\n\t}\n\treturn runs.some((run) => run.status === \"running\" || run.retry !== undefined)\n\t\t? ELAPSED_REFRESH_INTERVAL_MS\n\t\t: undefined;\n}\n\nfunction clearLiveRefresh(state: SubagentRenderState): void {\n\tif (state.refreshTimer !== undefined) clearTimeout(state.refreshTimer);\n\tstate.refreshTimer = undefined;\n\tstate.refreshInterval = undefined;\n}\n\n// One one-shot timer per row. A paint with the same cadence keeps the existing\n// deadline; expansion, settlement, or loss of dynamic content clears or\n// reschedules immediately.\nexport function scheduleLiveRefresh(context: SubagentToolRenderContext, isPartial: boolean): void {\n\tconst state = context.state;\n\tstate.dispose ??= () => clearLiveRefresh(state);\n\tconst interval = desiredRefreshInterval(context.result?.details?.runs ?? [], {\n\t\tisPartial,\n\t\texpanded: context.expanded,\n\t});\n\tif (interval === undefined) {\n\t\tclearLiveRefresh(state);\n\t\treturn;\n\t}\n\tif (state.refreshTimer !== undefined) {\n\t\t// Keep a matching timer so unrelated re-renders cannot postpone the\n\t\t// next tick; only reschedule when the desired cadence changes.\n\t\tif (state.refreshInterval === interval) return;\n\t\tclearTimeout(state.refreshTimer);\n\t}\n\tstate.refreshInterval = interval;\n\tstate.refreshTimer = setTimeout(() => {\n\t\tstate.refreshTimer = undefined;\n\t\tstate.refreshInterval = undefined;\n\t\tcontext.invalidate();\n\t}, interval);\n\tstate.refreshTimer.unref?.();\n}\n\nexport function renderSubagentCall(args: SubagentParams, theme: Theme): Component {\n\tconst count = Array.isArray(args.tasks) ? args.tasks.length : 0;\n\tconst title = theme.fg(count > 0 ? \"toolTitle\" : \"error\", theme.bold(\"Subagent\"));\n\treturn new Text(title, 0, 0);\n}\n\nexport function renderSubagentResult(\n\tresult: AgentToolResult<SubagentDetails>,\n\toptions: ToolRenderResultOptions,\n\ttheme: Theme,\n\targs: SubagentParams,\n\tisError: boolean,\n): Component {\n\tconst details = result.details;\n\tif (!details || !Array.isArray(details.runs)) return fallbackResult(result, theme, isError);\n\tif (details.runs.length === 0) return new Text(theme.fg(\"muted\", \"Starting...\"), 0, 0);\n\n\tconst container = new Container();\n\tif (!options.expanded) {\n\t\tconst now = Date.now();\n\t\tcontainer.addChild(new CollapsedFlow(details.runs.map((run, index) => flowSegment(run, index, theme, now))));\n\t\treturn container;\n\t}\n\n\tfor (const [index, run] of details.runs.entries()) {\n\t\tif (index > 0) container.addChild(new Spacer(1));\n\t\tcontainer.addChild(renderRun(run, index, args, theme));\n\t}\n\treturn container;\n}\n"]}
@@ -0,0 +1,2 @@
1
+ import { createRequire as __piCreateRequire } from "node:module"; const require = __piCreateRequire(import.meta.url);
2
+ var __defProp=Object.defineProperty;var __name=(target,value)=>__defProp(target,"name",{value,configurable:!0});import{parentPort}from"node:worker_threads";function readOrientationFromTiff(bytes,tiffStart){if(tiffStart+8>bytes.length)return 1;let le=(bytes[tiffStart]<<8|bytes[tiffStart+1])===18761,read16=__name(pos=>le?bytes[pos]|bytes[pos+1]<<8:bytes[pos]<<8|bytes[pos+1],"read16"),ifdOffset=__name(pos=>le?bytes[pos]|bytes[pos+1]<<8|bytes[pos+2]<<16|bytes[pos+3]<<24:(bytes[pos]<<24|bytes[pos+1]<<16|bytes[pos+2]<<8|bytes[pos+3])>>>0,"read32")(tiffStart+4),ifdStart=tiffStart+ifdOffset;if(ifdStart+2>bytes.length)return 1;let entryCount=read16(ifdStart);for(let i=0;i<entryCount;i++){let entryPos=ifdStart+2+i*12;if(entryPos+12>bytes.length)return 1;if(read16(entryPos)===274){let value=read16(entryPos+8);return value>=1&&value<=8?value:1}}return 1}__name(readOrientationFromTiff,"readOrientationFromTiff");function findJpegTiffOffset(bytes){let offset=2;for(;offset<bytes.length-1;){if(bytes[offset]!==255)return-1;let marker=bytes[offset+1];if(marker===255){offset++;continue}if(marker===225){if(offset+4>=bytes.length)return-1;let segmentStart=offset+4;if(segmentStart+6>bytes.length)return-1;if(hasExifHeader(bytes,segmentStart))return segmentStart+6}if(offset+4>bytes.length)return-1;let length=bytes[offset+2]<<8|bytes[offset+3];offset+=2+length}return-1}__name(findJpegTiffOffset,"findJpegTiffOffset");function findWebpTiffOffset(bytes){let offset=12;for(;offset+8<=bytes.length;){let chunkId=String.fromCharCode(bytes[offset],bytes[offset+1],bytes[offset+2],bytes[offset+3]),chunkSize=bytes[offset+4]|bytes[offset+5]<<8|bytes[offset+6]<<16|bytes[offset+7]<<24,dataStart=offset+8;if(chunkId==="EXIF")return dataStart+chunkSize>bytes.length?-1:chunkSize>=6&&hasExifHeader(bytes,dataStart)?dataStart+6:dataStart;offset=dataStart+chunkSize+chunkSize%2}return-1}__name(findWebpTiffOffset,"findWebpTiffOffset");function hasExifHeader(bytes,offset){return bytes[offset]===69&&bytes[offset+1]===120&&bytes[offset+2]===105&&bytes[offset+3]===102&&bytes[offset+4]===0&&bytes[offset+5]===0}__name(hasExifHeader,"hasExifHeader");function getExifOrientation(bytes){let tiffOffset=-1;return bytes.length>=2&&bytes[0]===255&&bytes[1]===216?tiffOffset=findJpegTiffOffset(bytes):bytes.length>=12&&bytes[0]===82&&bytes[1]===73&&bytes[2]===70&&bytes[3]===70&&bytes[8]===87&&bytes[9]===69&&bytes[10]===66&&bytes[11]===80&&(tiffOffset=findWebpTiffOffset(bytes)),tiffOffset===-1?1:readOrientationFromTiff(bytes,tiffOffset)}__name(getExifOrientation,"getExifOrientation");function rotate90(photon,image,dstIndex){let w=image.get_width(),h=image.get_height(),src=image.get_raw_pixels(),dst=new Uint8Array(src.length);for(let y=0;y<h;y++)for(let x=0;x<w;x++){let srcIdx=(y*w+x)*4,dstIdx=dstIndex(x,y,w,h)*4;dst[dstIdx]=src[srcIdx],dst[dstIdx+1]=src[srcIdx+1],dst[dstIdx+2]=src[srcIdx+2],dst[dstIdx+3]=src[srcIdx+3]}return new photon.PhotonImage(dst,h,w)}__name(rotate90,"rotate90");function applyExifOrientation(photon,image,originalBytes){let orientation=getExifOrientation(originalBytes);if(orientation===1)return image;switch(orientation){case 2:return photon.fliph(image),image;case 3:return photon.fliph(image),photon.flipv(image),image;case 4:return photon.flipv(image),image;case 5:{let rotated=rotate90(photon,image,(x,y,_w,h)=>x*h+(h-1-y));return photon.fliph(rotated),rotated}case 6:return rotate90(photon,image,(x,y,_w,h)=>x*h+(h-1-y));case 7:{let rotated=rotate90(photon,image,(x,y,w,h)=>(w-1-x)*h+y);return photon.fliph(rotated),rotated}case 8:return rotate90(photon,image,(x,y,w,h)=>(w-1-x)*h+y);default:return image}}__name(applyExifOrientation,"applyExifOrientation");import{createRequire}from"module";import*as path from"path";import{fileURLToPath}from"url";var require2=createRequire(import.meta.url),fs=require2("fs"),WASM_FILENAME="photon_rs_bg.wasm",photonModule=null,loadPromise=null;function pathOrNull(file){return typeof file=="string"?file:file instanceof URL?fileURLToPath(file):null}__name(pathOrNull,"pathOrNull");function getFallbackWasmPaths(){let execDir=path.dirname(process.execPath);return[path.join(execDir,WASM_FILENAME),path.join(execDir,"photon",WASM_FILENAME),path.join(process.cwd(),WASM_FILENAME)]}__name(getFallbackWasmPaths,"getFallbackWasmPaths");function patchPhotonWasmRead(){let originalReadFileSync=fs.readFileSync.bind(fs),fallbackPaths=getFallbackWasmPaths(),mutableFs=fs,patchedReadFileSync=__name(((...args)=>{let[file,options]=args;if(pathOrNull(file)?.endsWith(WASM_FILENAME))try{return originalReadFileSync(...args)}catch(error){let err=error;if(err?.code&&err.code!=="ENOENT")throw error;for(let fallbackPath of fallbackPaths)if(fs.existsSync(fallbackPath))return options===void 0?originalReadFileSync(fallbackPath):originalReadFileSync(fallbackPath,options);throw error}return originalReadFileSync(...args)}),"patchedReadFileSync");try{mutableFs.readFileSync=patchedReadFileSync}catch{Object.defineProperty(fs,"readFileSync",{value:patchedReadFileSync,writable:!0,configurable:!0})}return()=>{try{mutableFs.readFileSync=originalReadFileSync}catch{Object.defineProperty(fs,"readFileSync",{value:originalReadFileSync,writable:!0,configurable:!0})}}}__name(patchPhotonWasmRead,"patchPhotonWasmRead");async function loadPhoton(){return photonModule||loadPromise||(loadPromise=(async()=>{let restoreReadFileSync=patchPhotonWasmRead();try{return photonModule=await import("@silvia-odwyer/photon-node"),photonModule}catch{return photonModule=null,photonModule}finally{restoreReadFileSync()}})(),loadPromise)}__name(loadPhoton,"loadPhoton");var DEFAULT_MAX_BYTES=4.5*1024*1024,DEFAULT_OPTIONS={maxWidth:2e3,maxHeight:2e3,maxBytes:DEFAULT_MAX_BYTES,jpegQuality:80};function encodeCandidate(buffer,mimeType){let data=Buffer.from(buffer).toString("base64");return{data,encodedSize:Buffer.byteLength(data,"utf-8"),mimeType}}__name(encodeCandidate,"encodeCandidate");async function resizeImageInProcess(inputBytes,mimeType,options){let opts={...DEFAULT_OPTIONS,...options},inputBase64Size=Math.ceil(inputBytes.byteLength/3)*4,photon=await loadPhoton();if(!photon)return null;let image;try{let tryEncodings2=function(width,height,jpegQualities){let resized=photon.resize(image,width,height,photon.SamplingFilter.Lanczos3);try{let candidates=[encodeCandidate(resized.get_bytes(),"image/png")];for(let quality of jpegQualities)candidates.push(encodeCandidate(resized.get_bytes_jpeg(quality),"image/jpeg"));return candidates}finally{resized.free()}};var tryEncodings=tryEncodings2;__name(tryEncodings2,"tryEncodings");let rawImage=photon.PhotonImage.new_from_byteslice(inputBytes);image=applyExifOrientation(photon,rawImage,inputBytes),image!==rawImage&&rawImage.free();let originalWidth=image.get_width(),originalHeight=image.get_height(),format=mimeType.split("/")[1]??"png";if(originalWidth<=opts.maxWidth&&originalHeight<=opts.maxHeight&&inputBase64Size<opts.maxBytes)return{data:Buffer.from(inputBytes).toString("base64"),mimeType:mimeType||`image/${format}`,originalWidth,originalHeight,width:originalWidth,height:originalHeight,wasResized:!1};let targetWidth=originalWidth,targetHeight=originalHeight;targetWidth>opts.maxWidth&&(targetHeight=Math.round(targetHeight*opts.maxWidth/targetWidth),targetWidth=opts.maxWidth),targetHeight>opts.maxHeight&&(targetWidth=Math.round(targetWidth*opts.maxHeight/targetHeight),targetHeight=opts.maxHeight);let qualitySteps=Array.from(new Set([opts.jpegQuality,85,70,55,40])),currentWidth=targetWidth,currentHeight=targetHeight;for(;;){let candidates=tryEncodings2(currentWidth,currentHeight,qualitySteps);for(let candidate of candidates)if(candidate.encodedSize<opts.maxBytes)return{data:candidate.data,mimeType:candidate.mimeType,originalWidth,originalHeight,width:currentWidth,height:currentHeight,wasResized:!0};if(currentWidth===1&&currentHeight===1)break;let nextWidth=currentWidth===1?1:Math.max(1,Math.floor(currentWidth*.75)),nextHeight=currentHeight===1?1:Math.max(1,Math.floor(currentHeight*.75));if(nextWidth===currentWidth&&nextHeight===currentHeight)break;currentWidth=nextWidth,currentHeight=nextHeight}return null}catch{return null}finally{image&&image.free()}}__name(resizeImageInProcess,"resizeImageInProcess");function isResizeImageWorkerRequest(value){if(!value||typeof value!="object")return!1;let record=value;return record.inputBytes instanceof Uint8Array&&typeof record.mimeType=="string"}__name(isResizeImageWorkerRequest,"isResizeImageWorkerRequest");var port=parentPort;if(!port)throw new Error("image resize worker requires parentPort");port.once("message",message=>{(async()=>{try{if(!isResizeImageWorkerRequest(message))throw new Error("Invalid image resize worker request");let response={result:await resizeImageInProcess(message.inputBytes,message.mimeType,message.options)};port.postMessage(response)}catch(error){let response={error:error instanceof Error?error.message:String(error)};port.postMessage(response)}})()});