@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":"radius-relay.js","sourceRoot":"","sources":["../../src/experimental/radius-relay.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,wBAAwB,EAAiB,MAAM,6BAA6B,CAAC;AAEtF,OAAO,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AAGnC,MAAM,CAAC,MAAM,6BAA6B,GAAG,0BAA0B,CAAC;AACxE,MAAM,CAAC,MAAM,+BAA+B,GAAG,4BAA4B,CAAC;AAE5E,MAAM,uBAAuB,GAAG,EAAE,CAAC;AACnC,MAAM,wBAAwB,GAAG,CAAC,CAAC;AACnC,MAAM,qBAAqB,GAAG,CAAC,CAAC;AAChC,MAAM,qBAAqB,GAAG,wEAAwE,CAAC;AACvG,MAAM,iBAAiB,GAAG,wBAAwB,GAAG,CAAC,CAAC;AACvD,MAAM,qBAAqB,GAAG,IAAI,GAAG,IAAI,CAAC;AAC1C,MAAM,qBAAqB,GAAG,KAAK,CAAC;AACpC,MAAM,iBAAiB,GAAG,MAAM,CAAC;AACjC,MAAM,qBAAqB,GAAG,MAAM,CAAC;AACrC,MAAM,uBAAuB,GAAG,KAAK,CAAC;AACtC,MAAM,mBAAmB,GAAG,MAAM,CAAC;AACnC,6EAA6E;AAC7E,2EAA2E;AAC3E,+EAA+E;AAC/E,MAAM,+BAA+B,GAAG,IAAI,CAAC;AAC7C,MAAM,gCAAgC,GAAG,IAAI,CAAC;AA8E9C,4FAA4F;AAC5F,MAAM,OAAO,eAAe;IAClB,QAAQ,CAAyB;IACjC,gBAAgB,GAAG,IAAI,eAAe,EAAE,CAAC;IACzC,YAAY,GAAG,IAAI,GAAG,EAG5B,CAAC;IACJ,OAAO,CAAmC;IAC1C,OAAO,CAAqC;IAC5C,KAAK,CAA4B;IACjC,OAAO,GAAG,KAAK,CAAC;IAEhB,YAAY,OAA+B;QAC1C,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC;IACzB,CAAC;IAED,KAAK;QACJ,IAAI,IAAI,CAAC,KAAK,KAAK,SAAS;YAAE,OAAO;QACrC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;IAC1B,CAAC;IAED,KAAK,CAAC,KAAK;QACV,IAAI,IAAI,CAAC,OAAO;YAAE,OAAO;QACzB,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;QACpB,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE,CAAC;QAC9B,IAAI,CAAC,OAAO,EAAE,KAAK,EAAE,CAAC;QACtB,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,IAAI,EAAE,mBAAmB,CAAC,CAAC;QAC/C,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACxB,MAAM,IAAI,CAAC,KAAK,CAAC;IAClB,CAAC;IAED,KAAK,CAAC,IAAI;QACT,IAAI,OAAO,GAAG,qBAAqB,CAAC;QACpC,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;YACtB,IAAI,CAAC;gBACJ,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC;oBAC7C,QAAQ,EAAE,KAAK;oBACf,MAAM,EAAE,IAAI,CAAC,gBAAgB,CAAC,MAAM;iBACpC,CAAC,CAAC;gBACH,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;oBACxB,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC,EAAE,MAAM,EAAE,mBAAmB,EAAE,CAAC,CAAC;oBAC1D,MAAM,KAAK,CAAC,qBAAqB,EAAE,IAAI,CAAC,gBAAgB,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;oBACvE,SAAS;gBACV,CAAC;gBAED,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC,EAAE,MAAM,EAAE,YAAY,EAAE,CAAC,CAAC;gBACnD,MAAM,MAAM,GAAG,MAAM,wBAAwB,CAC5C,iBAAiB,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,EACvD,6BAA6B,EAC7B,IAAI,CAAC,KAAK,EACV,IAAI,CAAC,QAAQ,CAAC,gBAAgB,IAAI,uBAAuB,EACzD,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAC5B,CAAC;gBACF,OAAO,GAAG,qBAAqB,CAAC;gBAChC,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC,CAAC;gBAClD,MAAM,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;gBAC1B,IAAI,CAAC,IAAI,CAAC,OAAO;oBAAE,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAC;YACtE,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBAChB,IAAI,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,OAAO;oBAAE,MAAM;gBAChE,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC,EAAE,MAAM,EAAE,UAAU,EAAE,KAAK,EAAE,YAAY,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;gBAC7E,IAAI,CAAC;oBACJ,MAAM,KAAK,CAAC,OAAO,EAAE,IAAI,CAAC,gBAAgB,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;gBAC1D,CAAC;gBAAC,MAAM,CAAC;oBACR,MAAM;gBACP,CAAC;gBACD,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,GAAG,CAAC,EAAE,iBAAiB,CAAC,CAAC;YACpD,CAAC;QACF,CAAC;IACF,CAAC;IAED,MAAM,CAAC,MAA4B;QAClC,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;QACtB,IAAI,CAAC,OAAO,GAAG,IAAI,sBAAsB,CAAC,MAAM,CAAC,CAAC;QAClD,OAAO,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YAC5C,IAAI,QAAQ,GAAG,KAAK,CAAC;YACrB,MAAM,OAAO,GAAG,GAAS,EAAE;gBAC1B,MAAM,CAAC,mBAAmB,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;gBACjD,MAAM,CAAC,mBAAmB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;gBAC7C,MAAM,CAAC,mBAAmB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;gBAC7C,IAAI,CAAC,OAAO,EAAE,KAAK,EAAE,CAAC;gBACtB,IAAI,IAAI,CAAC,OAAO,KAAK,MAAM,EAAE,CAAC;oBAC7B,IAAI,CAAC,OAAO,GAAG,SAAS,CAAC;oBACzB,IAAI,CAAC,OAAO,GAAG,SAAS,CAAC;gBAC1B,CAAC;YACF,CAAC,CAAC;YACF,MAAM,MAAM,GAAG,CAAC,KAAa,EAAQ,EAAE;gBACtC,IAAI,QAAQ;oBAAE,OAAO;gBACrB,QAAQ,GAAG,IAAI,CAAC;gBAChB,OAAO,EAAE,CAAC;gBACV,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC;gBAC7B,IAAI,KAAK;oBAAE,MAAM,CAAC,KAAK,CAAC,CAAC;;oBACpB,OAAO,EAAE,CAAC;YAChB,CAAC,CAAC;YACF,MAAM,SAAS,GAAG,CAAC,KAA8B,EAAQ,EAAE;gBAC1D,IAAI,CAAC;oBACJ,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;gBACrC,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBAChB,cAAc,CAAC,MAAM,EAAE,+BAA+B,EAAE,6BAA6B,CAAC,CAAC;oBACvF,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC;gBACxB,CAAC;YACF,CAAC,CAAC;YACF,MAAM,OAAO,GAAG,CAAC,KAA4B,EAAQ,EAAE;gBACtD,MAAM,CACL,KAAK,CAAC,IAAI,KAAK,IAAI;oBAClB,CAAC,CAAC,SAAS;oBACX,CAAC,CAAC,IAAI,KAAK,CAAC,6BAA6B,KAAK,CAAC,IAAI,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAClG,CAAC;YACH,CAAC,CAAC;YACF,MAAM,OAAO,GAAG,CAAC,KAA4B,EAAQ,EAAE,CAAC,MAAM,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC,CAAC;YACtF,MAAM,CAAC,gBAAgB,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;YAC9C,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;YAC1C,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QAC3C,CAAC,CAAC,CAAC;IACJ,CAAC;IAED,kBAAkB,CAAC,KAAc;QAChC,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;YAC/B,MAAM,OAAO,GAAG,uBAAuB,CAAC,KAAK,CAAC,CAAC;YAC/C,QAAQ,OAAO,CAAC,IAAI,EAAE,CAAC;gBACtB,KAAK,MAAM;oBACV,KAAK,IAAI,CAAC,YAAY,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE;wBAC/D,IAAI,IAAI,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;4BAChC,cAAc,CAAC,IAAI,CAAC,OAAO,EAAE,gCAAgC,EAAE,0BAA0B,CAAC,CAAC;wBAC5F,CAAC;oBACF,CAAC,CAAC,CAAC;oBACH,OAAO;gBACR,KAAK,MAAM;oBACV,OAAO;gBACR,KAAK,iBAAiB;oBACrB,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;oBAC5C,OAAO;gBACR,KAAK,kBAAkB;oBACtB,IAAI,CAAC,sBAAsB,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;oBACnD,OAAO;YACT,CAAC;QACF,CAAC;QACD,IAAI,CAAC,CAAC,KAAK,YAAY,WAAW,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,0CAA0C,CAAC,CAAC;QACjG,MAAM,KAAK,GAAG,mBAAmB,CAAC,KAAK,CAAC,CAAC;QACzC,IAAI,CAAC,KAAK;YAAE,MAAM,IAAI,KAAK,CAAC,iCAAiC,CAAC,CAAC;QAC/D,MAAM,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;QACzD,IAAI,CAAC,MAAM,EAAE,CAAC;YACb,KAAK,IAAI,CAAC,YAAY,CAAC;gBACtB,OAAO,EAAE,CAAC;gBACV,IAAI,EAAE,kBAAkB;gBACxB,aAAa,EAAE,KAAK,CAAC,YAAY;gBACjC,IAAI,EAAE,IAAI;aACV,CAAC,CAAC;YACH,OAAO;QACR,CAAC;QACD,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,UAAU,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;IACtD,CAAC;IAED,eAAe,CAAC,YAAoB;QACnC,IAAI,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,YAAY,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,qCAAqC,CAAC,CAAC;QAChG,MAAM,UAAU,GAAG,IAAI,yBAAyB,CAC/C,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,YAAY,EAAE,KAAK,CAAC,EAC9C,CAAC,UAAU,EAAE,EAAE,CAAC,IAAI,CAAC,sBAAsB,CAAC,YAAY,EAAE,UAAU,CAAC,CACrE,CAAC;QACF,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;QACxD,IAAI,UAAU,CAAC,MAAM,EAAE,CAAC;YACvB,KAAK,IAAI,CAAC,YAAY,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,kBAAkB,EAAE,aAAa,EAAE,YAAY,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;QAC3G,CAAC;aAAM,CAAC;YACP,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,YAAY,EAAE,EAAE,UAAU,EAAE,OAAO,EAAE,CAAC,CAAC;QAC9D,CAAC;IACF,CAAC;IAED,sBAAsB,CAAC,YAAoB;QAC1C,MAAM,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;QACnD,IAAI,CAAC,MAAM;YAAE,OAAO;QACpB,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;QACvC,MAAM,CAAC,UAAU,CAAC,UAAU,EAAE,CAAC;QAC/B,MAAM,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;IAC1B,CAAC;IAED,KAAK,CAAC,sBAAsB,CAAC,YAAoB,EAAE,UAAuB;QACzE,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,YAAY,CAAC;YAAE,OAAO;QACpD,IAAI,UAAU,KAAK,SAAS;YAAE,MAAM,IAAI,CAAC,cAAc,EAAE,CAAC,IAAI,CAAC,oBAAoB,CAAC,YAAY,EAAE,UAAU,CAAC,CAAC,CAAC;QAC/G,MAAM,IAAI,CAAC,YAAY,CAAC;YACvB,OAAO,EAAE,CAAC;YACV,IAAI,EAAE,kBAAkB;YACxB,aAAa,EAAE,YAAY;YAC3B,IAAI,EAAE,IAAI;SACV,CAAC,CAAC;IACJ,CAAC;IAED,SAAS,CAAC,YAAoB,EAAE,KAAiB;QAChD,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,YAAY,CAAC;YAAE,OAAO,OAAO,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,mCAAmC,CAAC,CAAC,CAAC;QAChH,OAAO,IAAI,CAAC,cAAc,EAAE,CAAC,IAAI,CAAC,oBAAoB,CAAC,YAAY,EAAE,KAAK,CAAC,CAAC,CAAC;IAC9E,CAAC;IAED,YAAY,CAAC,OAAiC;QAC7C,OAAO,IAAI,CAAC,cAAc,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC;IAC5D,CAAC;IAED,cAAc;QACb,IAAI,CAAC,IAAI,CAAC,OAAO;YAAE,MAAM,IAAI,KAAK,CAAC,mCAAmC,CAAC,CAAC;QACxE,OAAO,IAAI,CAAC,OAAO,CAAC;IACrB,CAAC;IAED,gBAAgB,CAAC,KAAa;QAC7B,MAAM,WAAW,GAAG,CAAC,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,CAAC,CAAC;QACpD,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,CAAC;QAC1B,KAAK,MAAM,MAAM,IAAI,WAAW,EAAE,CAAC;YAClC,MAAM,CAAC,UAAU,CAAC,UAAU,EAAE,CAAC;YAC/B,IAAI,KAAK;gBAAE,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;;gBACpC,MAAM,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;QAC/B,CAAC;IACF,CAAC;CACD;AAED,MAAM,UAAU,kCAAkC,CAAC,OAIlD;IACA,OAAO,KAAK,EAAE,QAAQ,EAAE,EAAE;QACzB,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;QAC5D,IAAI,CAAC,IAAI;YAAE,MAAM,IAAI,KAAK,CAAC,mCAAmC,CAAC,CAAC;QAChE,MAAM,MAAM,GAAG,MAAM,wBAAwB,CAC5C,iBAAiB,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,QAAQ,CAAC,EACjD,+BAA+B,EAC/B,IAAI,CAAC,KAAK,EACV,OAAO,CAAC,gBAAgB,IAAI,uBAAuB,CACnD,CAAC;QACF,OAAO,IAAI,yBAAyB,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;IACxD,CAAC,CAAC;AACH,CAAC;AAaD,qFAAqF;AACrF,MAAM,OAAO,qBAAqB;IACxB,OAAO,CAAwB;IAC/B,SAAS,CAAuC;IAChD,gBAAgB,GAAG,IAAI,eAAe,EAAE,CAAC;IACzC,yBAAyB,CAAa;IACtC,yBAAyB,CAAa;IAC/C,iBAAiB,CAAqB;IACtC,aAAa,CAA4B;IACzC,SAAS,GAAG,KAAK,CAAC;IAElB,YAAY,MAA6B,EAAE,QAA8C;QACxF,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;QACtB,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAC;QAC1B,IAAI,CAAC,iBAAiB,GAAG,MAAM,CAAC,UAAU,EAAE,SAAS,CAAC;QACtD,IAAI,CAAC,yBAAyB,GAAG,MAAM,CAAC,kBAAkB,CAAC,CAAC,UAAU,EAAE,EAAE;YACzE,IAAI,UAAU,KAAK,SAAS;gBAAE,IAAI,CAAC,iBAAiB,GAAG,UAAU,CAAC,SAAS,CAAC;iBACvE,IAAI,MAAM,CAAC,SAAS;gBAAE,IAAI,CAAC,iBAAiB,GAAG,SAAS,CAAC;QAC/D,CAAC,CAAC,CAAC;QACH,IAAI,CAAC,yBAAyB,GAAG,MAAM,CAAC,uBAAuB,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE;YAC7E,IAAI,KAAK,KAAK,cAAc,IAAI,CAAC,IAAI,CAAC,SAAS;gBAAE,IAAI,CAAC,eAAe,EAAE,CAAC;QACzE,CAAC,CAAC,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,OAAO;QACZ,IAAI,IAAI,CAAC,SAAS;YAAE,OAAO;QAC3B,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;QACtB,IAAI,CAAC,yBAAyB,EAAE,CAAC;QACjC,IAAI,CAAC,yBAAyB,EAAE,CAAC;QACjC,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE,CAAC;QAC9B,IAAI,IAAI,CAAC,OAAO,CAAC,eAAe,KAAK,cAAc,EAAE,CAAC;YACrD,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,0BAA0B,CAAC,CAAC;QACrD,CAAC;QACD,MAAM,IAAI,CAAC,aAAa,CAAC;IAC1B,CAAC;IAED,eAAe;QACd,IAAI,IAAI,CAAC,aAAa,KAAK,SAAS;YAAE,OAAO;QAC7C,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE;YACtD,IAAI,CAAC,aAAa,GAAG,SAAS,CAAC;QAChC,CAAC,CAAC,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,aAAa;QAClB,IAAI,OAAO,GAAG,uBAAuB,CAAC;QACtC,OAAO,CAAC,IAAI,CAAC,SAAS,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC;YACnD,IAAI,CAAC;gBACJ,MAAM,KAAK,CAAC,OAAO,EAAE,IAAI,CAAC,gBAAgB,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;gBAC1D,MAAM,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC;gBAC/B,MAAM,SAAS,GAAG,IAAI,CAAC,iBAAiB,CAAC;gBACzC,IAAI,SAAS,KAAK,SAAS;oBAAE,MAAM,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;gBAC7D,OAAO;YACR,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBAChB,IAAI,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,OAAO;oBAAE,OAAO;gBACnE,IAAI,IAAI,CAAC,OAAO,CAAC,SAAS;oBAAE,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC;gBACzE,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,GAAG,CAAC,EAAE,mBAAmB,CAAC,CAAC;YACtD,CAAC;QACF,CAAC;IACF,CAAC;CACD;AAED,MAAM,yBAAyB;IACrB,UAAU,CAAuC;IACjD,gBAAgB,CAA6C;IACtE,OAAO,GAAG,KAAK,CAAC;IAEhB,YACC,SAA+C,EAC/C,eAA2D;QAE3D,IAAI,CAAC,UAAU,GAAG,SAAS,CAAC;QAC5B,IAAI,CAAC,gBAAgB,GAAG,eAAe,CAAC;IACzC,CAAC;IAED,IAAI,MAAM;QACT,OAAO,IAAI,CAAC,OAAO,CAAC;IACrB,CAAC;IAED,IAAI,CAAC,KAAiB;QACrB,IAAI,IAAI,CAAC,OAAO;YAAE,OAAO,OAAO,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,mCAAmC,CAAC,CAAC,CAAC;QACxF,OAAO,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;IAC/B,CAAC;IAED,KAAK,CAAC,KAAK,CAAC,UAAuB;QAClC,IAAI,IAAI,CAAC,OAAO;YAAE,OAAO;QACzB,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;QACpB,MAAM,IAAI,CAAC,gBAAgB,CAAC,UAAU,CAAC,CAAC;IACzC,CAAC;IAED,UAAU;QACT,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;IACrB,CAAC;CACD;AAED,MAAM,yBAAyB;IACrB,OAAO,CAAuB;IAC9B,SAAS,CAAwB;IACjC,OAAO,CAAyB;IAChC,UAAU,CAA2C;IACrD,QAAQ,CAAyC;IACjD,QAAQ,CAAyC;IAC1D,OAAO,GAAG,KAAK,CAAC;IAEhB,YAAY,MAA4B,EAAE,QAA+B;QACxE,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;QACtB,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAC;QAC1B,IAAI,CAAC,OAAO,GAAG,IAAI,sBAAsB,CAAC,MAAM,CAAC,CAAC;QAClD,IAAI,CAAC,UAAU,GAAG,CAAC,KAAK,EAAE,EAAE;YAC3B,IAAI,IAAI,CAAC,OAAO;gBAAE,OAAO;YACzB,IAAI,CAAC,CAAC,KAAK,CAAC,IAAI,YAAY,WAAW,CAAC,EAAE,CAAC;gBAC1C,IAAI,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,mDAAmD,CAAC,CAAC,CAAC;gBAC3E,OAAO;YACR,CAAC;YACD,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;QACnD,CAAC,CAAC;QACF,IAAI,CAAC,QAAQ,GAAG,GAAG,EAAE;YACpB,IAAI,IAAI,CAAC,WAAW,EAAE;gBAAE,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC;QAClD,CAAC,CAAC;QACF,IAAI,CAAC,QAAQ,GAAG,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC,CAAC;QAC7D,MAAM,CAAC,gBAAgB,CAAC,SAAS,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;QACpD,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;QAChD,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;IACjD,CAAC;IAED,IAAI,CAAC,KAAiB;QACrB,IAAI,CAAC,CAAC,KAAK,YAAY,UAAU,CAAC;YACjC,OAAO,OAAO,CAAC,MAAM,CAAC,IAAI,SAAS,CAAC,wCAAwC,CAAC,CAAC,CAAC;QAChF,IAAI,IAAI,CAAC,OAAO;YAAE,OAAO,OAAO,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,+BAA+B,CAAC,CAAC,CAAC;QACpF,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,MAAM,CAAC,CAAC;IAChD,CAAC;IAED,KAAK;QACJ,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE;YAAE,OAAO;QAChC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,EAAE,kBAAkB,CAAC,CAAC;IAC9C,CAAC;IAED,KAAK,CAAC,KAAY;QACjB,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE;YAAE,OAAO;QAChC,cAAc,CAAC,IAAI,CAAC,OAAO,EAAE,gCAAgC,EAAE,8BAA8B,CAAC,CAAC;QAC/F,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IAC/B,CAAC;IAED,WAAW;QACV,IAAI,IAAI,CAAC,OAAO;YAAE,OAAO,KAAK,CAAC;QAC/B,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;QACpB,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;QACrB,IAAI,CAAC,OAAO,CAAC,mBAAmB,CAAC,SAAS,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;QAC7D,IAAI,CAAC,OAAO,CAAC,mBAAmB,CAAC,OAAO,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;QACzD,IAAI,CAAC,OAAO,CAAC,mBAAmB,CAAC,OAAO,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;QACzD,OAAO,IAAI,CAAC;IACb,CAAC;CACD;AAED,MAAM,sBAAsB;IAClB,OAAO,CAAuB;IACvC,KAAK,GAAkB,OAAO,CAAC,OAAO,EAAE,CAAC;IACzC,aAAa,GAAG,CAAC,CAAC;IAClB,OAAO,GAAG,KAAK,CAAC;IAEhB,YAAY,MAA4B;QACvC,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;IACvB,CAAC;IAED,IAAI,CAAC,KAA2B;QAC/B,IAAI,IAAI,CAAC,OAAO;YAAE,OAAO,OAAO,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,kCAAkC,CAAC,CAAC,CAAC;QACvF,MAAM,MAAM,GAAG,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QAClE,MAAM,UAAU,GAAG,OAAO,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC;QAC9F,IAAI,IAAI,CAAC,aAAa,GAAG,UAAU,GAAG,iBAAiB,EAAE,CAAC;YACzD,OAAO,OAAO,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,8CAA8C,CAAC,CAAC,CAAC;QAClF,CAAC;QACD,IAAI,CAAC,aAAa,IAAI,UAAU,CAAC;QACjC,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE;YAC5C,IAAI,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC,UAAU,KAAK,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;gBACnE,MAAM,IAAI,KAAK,CAAC,kCAAkC,CAAC,CAAC;YACrD,CAAC;YACD,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YAC1B,OAAO,IAAI,CAAC,OAAO,CAAC,cAAc,GAAG,qBAAqB,EAAE,CAAC;gBAC5D,IAAI,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC,UAAU,KAAK,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;oBACnE,MAAM,IAAI,KAAK,CAAC,4CAA4C,CAAC,CAAC;gBAC/D,CAAC;gBACD,MAAM,KAAK,CAAC,CAAC,EAAE,SAAS,EAAE,KAAK,CAAC,CAAC;YAClC,CAAC;QACF,CAAC,CAAC,CAAC;QACH,MAAM,OAAO,GAAG,SAAS,CAAC,OAAO,CAAC,GAAG,EAAE;YACtC,IAAI,CAAC,aAAa,IAAI,UAAU,CAAC;QAClC,CAAC,CAAC,CAAC;QACH,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;QACrC,OAAO,OAAO,CAAC;IAChB,CAAC;IAED,KAAK;QACJ,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;IACrB,CAAC;CACD;AAqBD,SAAS,uBAAuB,CAAC,KAAa;IAC7C,IAAI,MAAe,CAAC;IACpB,IAAI,CAAC;QACJ,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IAC5B,CAAC;IAAC,MAAM,CAAC;QACR,MAAM,IAAI,KAAK,CAAC,sCAAsC,CAAC,CAAC;IACzD,CAAC;IACD,IAAI,CAAC,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;QACpE,MAAM,IAAI,KAAK,CAAC,sCAAsC,CAAC,CAAC;IACzD,CAAC;IACD,MAAM,OAAO,GAAG,MAAwF,CAAC;IACzG,IAAI,OAAO,CAAC,OAAO,KAAK,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,0CAA0C,CAAC,CAAC;IACvF,IAAI,OAAO,CAAC,IAAI,KAAK,MAAM,IAAI,OAAO,CAAC,IAAI,KAAK,MAAM;QAAE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,CAAC;IAClG,IACC,CAAC,OAAO,CAAC,IAAI,KAAK,iBAAiB,IAAI,OAAO,CAAC,IAAI,KAAK,kBAAkB,CAAC;QAC3E,OAAO,OAAO,CAAC,aAAa,KAAK,QAAQ;QACzC,qBAAqB,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC;QACjD,CAAC,OAAO,CAAC,IAAI,KAAK,SAAS;YAC1B,CAAC,OAAO,OAAO,CAAC,IAAI,KAAK,QAAQ;gBAChC,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC;gBAC9B,OAAO,CAAC,IAAI,IAAI,IAAI;gBACpB,OAAO,CAAC,IAAI,IAAI,IAAI,CAAC,CAAC,EACvB,CAAC;QACF,OAAO,OAAO,CAAC,IAAI,KAAK,iBAAiB;YACxC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,iBAAiB,EAAE,aAAa,EAAE,OAAO,CAAC,aAAa,EAAE;YAC/E,CAAC,CAAC;gBACA,OAAO,EAAE,CAAC;gBACV,IAAI,EAAE,kBAAkB;gBACxB,aAAa,EAAE,OAAO,CAAC,aAAa;gBACpC,GAAG,CAAC,OAAO,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,CAAC;aAC7D,CAAC;IACL,CAAC;IACD,MAAM,IAAI,KAAK,CAAC,sCAAsC,CAAC,CAAC;AACzD,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,YAAoB,EAAE,OAAmB;IAC7E,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,YAAY,CAAC;QAAE,MAAM,IAAI,SAAS,CAAC,oCAAoC,CAAC,CAAC;IACzG,MAAM,KAAK,GAAG,IAAI,UAAU,CAAC,uBAAuB,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;IAC3E,KAAK,CAAC,CAAC,CAAC,GAAG,wBAAwB,CAAC;IACpC,KAAK,CAAC,CAAC,CAAC,GAAG,qBAAqB,CAAC;IACjC,MAAM,GAAG,GAAG,YAAY,CAAC,UAAU,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;IAC7C,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,EAAE,EAAE,KAAK,EAAE,EAAE,CAAC;QACzC,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IAC7E,CAAC;IACD,KAAK,CAAC,GAAG,CAAC,OAAO,EAAE,uBAAuB,CAAC,CAAC;IAC5C,OAAO,KAAK,CAAC,MAAM,CAAC;AACrB,CAAC;AAED,MAAM,UAAU,mBAAmB,CAClC,KAAkB;IAElB,IAAI,KAAK,CAAC,UAAU,GAAG,uBAAuB;QAAE,OAAO,SAAS,CAAC;IACjE,MAAM,KAAK,GAAG,IAAI,UAAU,CAAC,KAAK,CAAC,CAAC;IACpC,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,wBAAwB,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,qBAAqB;QAAE,OAAO,SAAS,CAAC;IAClG,IAAI,GAAG,GAAG,EAAE,CAAC;IACb,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,QAAQ,CAAC,CAAC,EAAE,uBAAuB,CAAC;QAAE,GAAG,IAAI,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IACzG,MAAM,YAAY,GAAG,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,GAAG,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC,IAAI,GAAG,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC,IAAI,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC;IACzH,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,YAAY,CAAC;QAAE,OAAO,SAAS,CAAC;IAChE,OAAO,EAAE,YAAY,EAAE,OAAO,EAAE,KAAK,CAAC,KAAK,CAAC,uBAAuB,CAAC,EAAE,CAAC;AACxE,CAAC;AAED,SAAS,iBAAiB,CAAC,OAAe,EAAE,QAAkB;IAC7D,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,sBAAsB,QAAQ,UAAU,EAAE,OAAO,CAAC,CAAC;IACvE,IAAI,GAAG,CAAC,QAAQ,KAAK,QAAQ;QAAE,GAAG,CAAC,QAAQ,GAAG,MAAM,CAAC;SAChD,IAAI,GAAG,CAAC,QAAQ,KAAK,OAAO;QAAE,GAAG,CAAC,QAAQ,GAAG,KAAK,CAAC;;QACnD,MAAM,IAAI,KAAK,CAAC,wCAAwC,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC;IAC7E,OAAO,GAAG,CAAC,QAAQ,EAAE,CAAC;AACvB,CAAC;AAED,SAAS,uBAAuB,CAAC,OAIhC;IACA,OAAO,IAAI,SAAS,CAAC,OAAO,CAAC,GAAG,EAAE;QACjC,SAAS,EAAE,CAAC,OAAO,CAAC,QAAQ,CAAC;QAC7B,OAAO,EAAE,EAAE,aAAa,EAAE,OAAO,CAAC,aAAa,EAAE;KACjD,CAAoC,CAAC;AACvC,CAAC;AAED,SAAS,wBAAwB,CAChC,GAAW,EACX,QAAgB,EAChB,KAAa,EACb,OAAoC,EACpC,MAAoB;IAEpB,MAAM,EAAE,cAAc,EAAE,CAAC;IACzB,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACtC,MAAM,MAAM,GAAG,OAAO,CAAC,EAAE,GAAG,EAAE,QAAQ,EAAE,aAAa,EAAE,UAAU,KAAK,EAAE,EAAE,CAAC,CAAC;QAC5E,MAAM,CAAC,UAAU,GAAG,aAAa,CAAC;QAClC,IAAI,OAAO,GAAG,KAAK,CAAC;QACpB,MAAM,OAAO,GAAG,GAAS,EAAE;YAC1B,MAAM,CAAC,mBAAmB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;YAC3C,MAAM,CAAC,mBAAmB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;YAC7C,MAAM,CAAC,mBAAmB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;YAC7C,MAAM,EAAE,mBAAmB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QAC/C,CAAC,CAAC;QACF,MAAM,IAAI,GAAG,CAAC,KAAY,EAAQ,EAAE;YACnC,IAAI,OAAO;gBAAE,OAAO;YACpB,OAAO,GAAG,IAAI,CAAC;YACf,OAAO,EAAE,CAAC;YACV,cAAc,CAAC,MAAM,EAAE,IAAI,EAAE,gCAAgC,CAAC,CAAC;YAC/D,MAAM,CAAC,KAAK,CAAC,CAAC;QACf,CAAC,CAAC;QACF,MAAM,MAAM,GAAG,GAAS,EAAE;YACzB,IAAI,OAAO;gBAAE,OAAO;YACpB,IAAI,MAAM,CAAC,QAAQ,KAAK,QAAQ,EAAE,CAAC;gBAClC,IAAI,CAAC,IAAI,KAAK,CAAC,uDAAuD,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC;gBAC1G,OAAO;YACR,CAAC;YACD,OAAO,GAAG,IAAI,CAAC;YACf,OAAO,EAAE,CAAC;YACV,OAAO,CAAC,MAAM,CAAC,CAAC;QACjB,CAAC,CAAC;QACF,MAAM,OAAO,GAAG,CAAC,KAA4B,EAAQ,EAAE,CACtD,IAAI,CAAC,IAAI,KAAK,CAAC,0CAA0C,KAAK,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC;QAC1E,MAAM,OAAO,GAAG,CAAC,KAA4B,EAAQ,EAAE,CAAC,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC,CAAC;QACpF,MAAM,OAAO,GAAG,GAAS,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,mCAAmC,CAAC,CAAC,CAAC;QACjF,MAAM,CAAC,gBAAgB,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;QACxD,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;QAC1D,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;QAC1D,MAAM,EAAE,gBAAgB,CAAC,OAAO,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;IAC5D,CAAC,CAAC,CAAC;AACJ,CAAC;AAED,SAAS,cAAc,CAAC,MAA4B,EAAE,IAAY,EAAE,MAAc;IACjF,IAAI,CAAC;QACJ,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IAC5B,CAAC;IAAC,MAAM,CAAC;QACR,+EAA+E;IAChF,CAAC;AACF,CAAC;AAED,SAAS,cAAc,CAAC,KAA4B;IACnD,IAAI,KAAK,CAAC,KAAK,YAAY,KAAK,IAAI,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC;QAAE,OAAO,KAAK,CAAC,KAAK,CAAC;IAC9F,OAAO,IAAI,KAAK,CAAC,KAAK,CAAC,OAAO,EAAE,IAAI,EAAE,IAAI,oCAAoC,CAAC,CAAC;AACjF,CAAC;AAED,SAAS,KAAK,CAAC,YAAoB,EAAE,MAA+B,EAAE,KAAc;IACnF,MAAM,EAAE,cAAc,EAAE,CAAC;IACzB,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACtC,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE;YAC7B,OAAO,EAAE,CAAC;YACV,OAAO,EAAE,CAAC;QACX,CAAC,EAAE,YAAY,CAAC,CAAC;QACjB,IAAI,KAAK;YAAE,KAAK,CAAC,KAAK,EAAE,CAAC;QACzB,MAAM,OAAO,GAAG,GAAS,EAAE;YAC1B,YAAY,CAAC,KAAK,CAAC,CAAC;YACpB,OAAO,EAAE,CAAC;YACV,IAAI,CAAC;gBACJ,MAAM,EAAE,cAAc,EAAE,CAAC;YAC1B,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBAChB,MAAM,CAAC,KAAK,CAAC,CAAC;YACf,CAAC;QACF,CAAC,CAAC;QACF,MAAM,OAAO,GAAG,GAAS,EAAE,CAAC,MAAM,EAAE,mBAAmB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QAC1E,MAAM,EAAE,gBAAgB,CAAC,OAAO,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;IAC5D,CAAC,CAAC,CAAC;AACJ,CAAC;AAED,SAAS,OAAO,CAAC,KAAc;IAC9B,OAAO,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;AAClE,CAAC;AAED,SAAS,YAAY,CAAC,KAAc;IACnC,OAAO,OAAO,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC;AAC/B,CAAC","sourcesContent":["import type { ByteTransport, ByteTransportFactory, ByteTransportHandlers, Client } from \"@earendil-works/pi-client\";\nimport { DEFAULT_MAX_FRAME_LENGTH, type ServerId } from \"@earendil-works/pi-protocol\";\nimport type { Server } from \"@earendil-works/pi-server\";\nimport { WebSocket } from \"undici\";\nimport type { RadiusRelayAuthResolver } from \"./radius-auth.ts\";\n\nexport const RADIUS_RELAY_HOST_SUBPROTOCOL = \"pi-session-relay.host.v1\";\nexport const RADIUS_RELAY_CLIENT_SUBPROTOCOL = \"pi-session-relay.client.v1\";\n\nconst RELAY_DATA_HEADER_BYTES = 18;\nconst RELAY_DATA_FRAME_VERSION = 1;\nconst RELAY_DATA_FRAME_TYPE = 1;\nconst CONNECTION_ID_PATTERN = /^[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/u;\nconst MAX_PENDING_BYTES = DEFAULT_MAX_FRAME_LENGTH * 4;\nconst DRAIN_THRESHOLD_BYTES = 1024 * 1024;\nconst HOST_RETRY_INITIAL_MS = 1_000;\nconst HOST_RETRY_MAX_MS = 30_000;\nconst MISSING_AUTH_RETRY_MS = 30_000;\nconst CLIENT_RETRY_INITIAL_MS = 1_000;\nconst CLIENT_RETRY_MAX_MS = 30_000;\n// Undici implements the browser WebSocket API, which permits callers to send\n// only code 1000 or application codes from 3000 through 4999. RFC protocol\n// codes such as 1002 and 1011 may be received but cannot be passed to close().\nconst LOCAL_PROTOCOL_ERROR_CLOSE_CODE = 4000;\nconst LOCAL_TRANSPORT_ERROR_CLOSE_CODE = 4001;\n\ninterface RadiusRelayMessageEvent extends Event {\n\treadonly data: unknown;\n}\n\ninterface RadiusRelayCloseEvent extends Event {\n\treadonly code: number;\n\treadonly reason: string;\n}\n\ninterface RadiusRelayErrorEvent extends Event {\n\treadonly error?: unknown;\n\treadonly message?: string;\n}\n\nexport interface RadiusRelayWebSocket {\n\tbinaryType: \"arraybuffer\" | \"blob\";\n\treadonly bufferedAmount: number;\n\treadonly protocol: string;\n\treadonly readyState: number;\n\treadonly OPEN: number;\n\tsend(data: string | ArrayBuffer): void;\n\tclose(code?: number, reason?: string): void;\n\taddEventListener(type: \"open\", listener: (event: Event) => void, options?: { once?: boolean }): void;\n\taddEventListener(\n\t\ttype: \"message\",\n\t\tlistener: (event: RadiusRelayMessageEvent) => void,\n\t\toptions?: { once?: boolean },\n\t): void;\n\taddEventListener(\n\t\ttype: \"close\",\n\t\tlistener: (event: RadiusRelayCloseEvent) => void,\n\t\toptions?: { once?: boolean },\n\t): void;\n\taddEventListener(\n\t\ttype: \"error\",\n\t\tlistener: (event: RadiusRelayErrorEvent) => void,\n\t\toptions?: { once?: boolean },\n\t): void;\n\tremoveEventListener(type: \"open\", listener: (event: Event) => void): void;\n\tremoveEventListener(type: \"message\", listener: (event: RadiusRelayMessageEvent) => void): void;\n\tremoveEventListener(type: \"close\", listener: (event: RadiusRelayCloseEvent) => void): void;\n\tremoveEventListener(type: \"error\", listener: (event: RadiusRelayErrorEvent) => void): void;\n}\n\nexport type RadiusRelayWebSocketFactory = (options: {\n\treadonly url: string;\n\treadonly protocol: string;\n\treadonly authorization: string;\n}) => RadiusRelayWebSocket;\n\ninterface RelayByteConnection {\n\treadonly closed: boolean;\n\tsend(chunk: Uint8Array): Promise<void>;\n\tclose(finalChunk?: Uint8Array): Promise<void>;\n}\n\ninterface RelayByteConnectionHandler {\n\tonData(chunk: Uint8Array): void;\n\tonClose(): void;\n\tonError(error: Error): void;\n}\n\nexport type RadiusRelayHostStatus =\n\t| { readonly status: \"not_authenticated\" }\n\t| { readonly status: \"connecting\" }\n\t| { readonly status: \"connected\" }\n\t| { readonly status: \"retrying\"; readonly error: string };\n\nexport interface RadiusRelayHostOptions {\n\treadonly serverId: ServerId;\n\treadonly server: Pick<Server, \"accept\">;\n\treadonly auth: RadiusRelayAuthResolver;\n\treadonly webSocketFactory?: RadiusRelayWebSocketFactory;\n\treadonly onStatus?: (status: RadiusRelayHostStatus) => void;\n}\n\n/** Maintain the experimental server's multiplexed, authenticated Radius host connection. */\nexport class RadiusRelayHost {\n\treadonly #options: RadiusRelayHostOptions;\n\treadonly #abortController = new AbortController();\n\treadonly #connections = new Map<\n\t\tstring,\n\t\t{ connection: RelayServerByteConnection; handler: RelayByteConnectionHandler }\n\t>();\n\t#socket: RadiusRelayWebSocket | undefined;\n\t#writer: OrderedWebSocketWriter | undefined;\n\t#loop: Promise<void> | undefined;\n\t#closed = false;\n\n\tconstructor(options: RadiusRelayHostOptions) {\n\t\tthis.#options = options;\n\t}\n\n\tstart(): void {\n\t\tif (this.#loop !== undefined) return;\n\t\tthis.#loop = this.#run();\n\t}\n\n\tasync close(): Promise<void> {\n\t\tif (this.#closed) return;\n\t\tthis.#closed = true;\n\t\tthis.#abortController.abort();\n\t\tthis.#writer?.close();\n\t\tthis.#socket?.close(1000, \"Pi server stopped\");\n\t\tthis.#dropConnections();\n\t\tawait this.#loop;\n\t}\n\n\tasync #run(): Promise<void> {\n\t\tlet retryMs = HOST_RETRY_INITIAL_MS;\n\t\twhile (!this.#closed) {\n\t\t\ttry {\n\t\t\t\tconst auth = await this.#options.auth.resolve({\n\t\t\t\t\trequired: false,\n\t\t\t\t\tsignal: this.#abortController.signal,\n\t\t\t\t});\n\t\t\t\tif (auth === undefined) {\n\t\t\t\t\tthis.#options.onStatus?.({ status: \"not_authenticated\" });\n\t\t\t\t\tawait delay(MISSING_AUTH_RETRY_MS, this.#abortController.signal, true);\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tthis.#options.onStatus?.({ status: \"connecting\" });\n\t\t\t\tconst socket = await openRadiusRelayWebSocket(\n\t\t\t\t\trelayWebSocketUrl(auth.gateway, this.#options.serverId),\n\t\t\t\t\tRADIUS_RELAY_HOST_SUBPROTOCOL,\n\t\t\t\t\tauth.token,\n\t\t\t\t\tthis.#options.webSocketFactory ?? defaultWebSocketFactory,\n\t\t\t\t\tthis.#abortController.signal,\n\t\t\t\t);\n\t\t\t\tretryMs = HOST_RETRY_INITIAL_MS;\n\t\t\t\tthis.#options.onStatus?.({ status: \"connected\" });\n\t\t\t\tawait this.#serve(socket);\n\t\t\t\tif (!this.#closed) throw new Error(\"Radius relay host disconnected\");\n\t\t\t} catch (error) {\n\t\t\t\tif (this.#closed || this.#abortController.signal.aborted) break;\n\t\t\t\tthis.#options.onStatus?.({ status: \"retrying\", error: errorMessage(error) });\n\t\t\t\ttry {\n\t\t\t\t\tawait delay(retryMs, this.#abortController.signal, true);\n\t\t\t\t} catch {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tretryMs = Math.min(retryMs * 2, HOST_RETRY_MAX_MS);\n\t\t\t}\n\t\t}\n\t}\n\n\t#serve(socket: RadiusRelayWebSocket): Promise<void> {\n\t\tthis.#socket = socket;\n\t\tthis.#writer = new OrderedWebSocketWriter(socket);\n\t\treturn new Promise<void>((resolve, reject) => {\n\t\t\tlet terminal = false;\n\t\t\tconst cleanup = (): void => {\n\t\t\t\tsocket.removeEventListener(\"message\", onMessage);\n\t\t\t\tsocket.removeEventListener(\"close\", onClose);\n\t\t\t\tsocket.removeEventListener(\"error\", onError);\n\t\t\t\tthis.#writer?.close();\n\t\t\t\tif (this.#socket === socket) {\n\t\t\t\t\tthis.#socket = undefined;\n\t\t\t\t\tthis.#writer = undefined;\n\t\t\t\t}\n\t\t\t};\n\t\t\tconst finish = (error?: Error): void => {\n\t\t\t\tif (terminal) return;\n\t\t\t\tterminal = true;\n\t\t\t\tcleanup();\n\t\t\t\tthis.#dropConnections(error);\n\t\t\t\tif (error) reject(error);\n\t\t\t\telse resolve();\n\t\t\t};\n\t\t\tconst onMessage = (event: RadiusRelayMessageEvent): void => {\n\t\t\t\ttry {\n\t\t\t\t\tthis.#handleHostMessage(event.data);\n\t\t\t\t} catch (error) {\n\t\t\t\t\tcloseWebSocket(socket, LOCAL_PROTOCOL_ERROR_CLOSE_CODE, \"Radius relay protocol error\");\n\t\t\t\t\tfinish(toError(error));\n\t\t\t\t}\n\t\t\t};\n\t\t\tconst onClose = (event: RadiusRelayCloseEvent): void => {\n\t\t\t\tfinish(\n\t\t\t\t\tevent.code === 1000\n\t\t\t\t\t\t? undefined\n\t\t\t\t\t\t: new Error(`Radius relay host closed (${event.code}${event.reason ? `: ${event.reason}` : \"\"})`),\n\t\t\t\t);\n\t\t\t};\n\t\t\tconst onError = (event: RadiusRelayErrorEvent): void => finish(webSocketError(event));\n\t\t\tsocket.addEventListener(\"message\", onMessage);\n\t\t\tsocket.addEventListener(\"close\", onClose);\n\t\t\tsocket.addEventListener(\"error\", onError);\n\t\t});\n\t}\n\n\t#handleHostMessage(value: unknown): void {\n\t\tif (typeof value === \"string\") {\n\t\t\tconst control = parseHostControlMessage(value);\n\t\t\tswitch (control.type) {\n\t\t\t\tcase \"ping\":\n\t\t\t\t\tvoid this.#sendControl({ version: 1, type: \"pong\" }).catch(() => {\n\t\t\t\t\t\tif (this.#socket !== undefined) {\n\t\t\t\t\t\t\tcloseWebSocket(this.#socket, LOCAL_TRANSPORT_ERROR_CLOSE_CODE, \"Radius relay send failed\");\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t\treturn;\n\t\t\t\tcase \"pong\":\n\t\t\t\t\treturn;\n\t\t\t\tcase \"connection_open\":\n\t\t\t\t\tthis.#openConnection(control.connection_id);\n\t\t\t\t\treturn;\n\t\t\t\tcase \"connection_close\":\n\t\t\t\t\tthis.#remoteCloseConnection(control.connection_id);\n\t\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\t\tif (!(value instanceof ArrayBuffer)) throw new Error(\"Radius relay data message must be binary\");\n\t\tconst frame = parseRelayDataFrame(value);\n\t\tif (!frame) throw new Error(\"Invalid Radius relay data frame\");\n\t\tconst active = this.#connections.get(frame.connectionId);\n\t\tif (!active) {\n\t\t\tvoid this.#sendControl({\n\t\t\t\tversion: 1,\n\t\t\t\ttype: \"connection_close\",\n\t\t\t\tconnection_id: frame.connectionId,\n\t\t\t\tcode: 1000,\n\t\t\t});\n\t\t\treturn;\n\t\t}\n\t\tactive.handler.onData(new Uint8Array(frame.payload));\n\t}\n\n\t#openConnection(connectionId: string): void {\n\t\tif (this.#connections.has(connectionId)) throw new Error(\"Radius relay reused a connection ID\");\n\t\tconst connection = new RelayServerByteConnection(\n\t\t\t(chunk) => this.#sendData(connectionId, chunk),\n\t\t\t(finalChunk) => this.#serverCloseConnection(connectionId, finalChunk),\n\t\t);\n\t\tconst handler = this.#options.server.accept(connection);\n\t\tif (connection.closed) {\n\t\t\tvoid this.#sendControl({ version: 1, type: \"connection_close\", connection_id: connectionId, code: 1012 });\n\t\t} else {\n\t\t\tthis.#connections.set(connectionId, { connection, handler });\n\t\t}\n\t}\n\n\t#remoteCloseConnection(connectionId: string): void {\n\t\tconst active = this.#connections.get(connectionId);\n\t\tif (!active) return;\n\t\tthis.#connections.delete(connectionId);\n\t\tactive.connection.markClosed();\n\t\tactive.handler.onClose();\n\t}\n\n\tasync #serverCloseConnection(connectionId: string, finalChunk?: Uint8Array): Promise<void> {\n\t\tif (!this.#connections.delete(connectionId)) return;\n\t\tif (finalChunk !== undefined) await this.#requireWriter().send(encodeRelayDataFrame(connectionId, finalChunk));\n\t\tawait this.#sendControl({\n\t\t\tversion: 1,\n\t\t\ttype: \"connection_close\",\n\t\t\tconnection_id: connectionId,\n\t\t\tcode: 1000,\n\t\t});\n\t}\n\n\t#sendData(connectionId: string, chunk: Uint8Array): Promise<void> {\n\t\tif (!this.#connections.has(connectionId)) return Promise.reject(new Error(\"Radius relay connection is closed\"));\n\t\treturn this.#requireWriter().send(encodeRelayDataFrame(connectionId, chunk));\n\t}\n\n\t#sendControl(message: HostOutputControlMessage): Promise<void> {\n\t\treturn this.#requireWriter().send(JSON.stringify(message));\n\t}\n\n\t#requireWriter(): OrderedWebSocketWriter {\n\t\tif (!this.#writer) throw new Error(\"Radius relay host is disconnected\");\n\t\treturn this.#writer;\n\t}\n\n\t#dropConnections(error?: Error): void {\n\t\tconst connections = [...this.#connections.values()];\n\t\tthis.#connections.clear();\n\t\tfor (const active of connections) {\n\t\t\tactive.connection.markClosed();\n\t\t\tif (error) active.handler.onError(error);\n\t\t\telse active.handler.onClose();\n\t\t}\n\t}\n}\n\nexport function createRadiusClientTransportFactory(options: {\n\treadonly serverId: ServerId;\n\treadonly auth: RadiusRelayAuthResolver;\n\treadonly webSocketFactory?: RadiusRelayWebSocketFactory;\n}): ByteTransportFactory {\n\treturn async (handlers) => {\n\t\tconst auth = await options.auth.resolve({ required: true });\n\t\tif (!auth) throw new Error(\"Radius authentication is required\");\n\t\tconst socket = await openRadiusRelayWebSocket(\n\t\t\trelayWebSocketUrl(auth.gateway, options.serverId),\n\t\t\tRADIUS_RELAY_CLIENT_SUBPROTOCOL,\n\t\t\tauth.token,\n\t\t\toptions.webSocketFactory ?? defaultWebSocketFactory,\n\t\t);\n\t\treturn new RadiusClientByteTransport(socket, handlers);\n\t};\n}\n\ntype RadiusReconnectClient = Pick<\n\tClient,\n\t| \"attachment\"\n\t| \"connected\"\n\t| \"connectionState\"\n\t| \"disconnect\"\n\t| \"onAttachmentChange\"\n\t| \"onConnectionStateChange\"\n\t| \"reconnect\"\n>;\n\n/** Reconnect one established Radius client and restore its last selected Session. */\nexport class RadiusClientReconnect {\n\treadonly #client: RadiusReconnectClient;\n\treadonly #reattach: (sessionId: string) => Promise<void>;\n\treadonly #abortController = new AbortController();\n\treadonly #removeConnectionListener: () => void;\n\treadonly #removeAttachmentListener: () => void;\n\t#desiredSessionId: string | undefined;\n\t#reconnecting: Promise<void> | undefined;\n\t#disposed = false;\n\n\tconstructor(client: RadiusReconnectClient, reattach: (sessionId: string) => Promise<void>) {\n\t\tthis.#client = client;\n\t\tthis.#reattach = reattach;\n\t\tthis.#desiredSessionId = client.attachment?.sessionId;\n\t\tthis.#removeAttachmentListener = client.onAttachmentChange((attachment) => {\n\t\t\tif (attachment !== undefined) this.#desiredSessionId = attachment.sessionId;\n\t\t\telse if (client.connected) this.#desiredSessionId = undefined;\n\t\t});\n\t\tthis.#removeConnectionListener = client.onConnectionStateChange(({ state }) => {\n\t\t\tif (state === \"disconnected\" && !this.#disposed) this.#startReconnect();\n\t\t});\n\t}\n\n\tasync dispose(): Promise<void> {\n\t\tif (this.#disposed) return;\n\t\tthis.#disposed = true;\n\t\tthis.#removeConnectionListener();\n\t\tthis.#removeAttachmentListener();\n\t\tthis.#abortController.abort();\n\t\tif (this.#client.connectionState !== \"disconnected\") {\n\t\t\tthis.#client.disconnect(\"Radius reconnect stopped\");\n\t\t}\n\t\tawait this.#reconnecting;\n\t}\n\n\t#startReconnect(): void {\n\t\tif (this.#reconnecting !== undefined) return;\n\t\tthis.#reconnecting = this.#runReconnect().finally(() => {\n\t\t\tthis.#reconnecting = undefined;\n\t\t});\n\t}\n\n\tasync #runReconnect(): Promise<void> {\n\t\tlet retryMs = CLIENT_RETRY_INITIAL_MS;\n\t\twhile (!this.#disposed && !this.#client.connected) {\n\t\t\ttry {\n\t\t\t\tawait delay(retryMs, this.#abortController.signal, false);\n\t\t\t\tawait this.#client.reconnect();\n\t\t\t\tconst sessionId = this.#desiredSessionId;\n\t\t\t\tif (sessionId !== undefined) await this.#reattach(sessionId);\n\t\t\t\treturn;\n\t\t\t} catch (error) {\n\t\t\t\tif (this.#disposed || this.#abortController.signal.aborted) return;\n\t\t\t\tif (this.#client.connected) this.#client.disconnect(errorMessage(error));\n\t\t\t\tretryMs = Math.min(retryMs * 2, CLIENT_RETRY_MAX_MS);\n\t\t\t}\n\t\t}\n\t}\n}\n\nclass RelayServerByteConnection implements RelayByteConnection {\n\treadonly #sendChunk: (chunk: Uint8Array) => Promise<void>;\n\treadonly #closeConnection: (finalChunk?: Uint8Array) => Promise<void>;\n\t#closed = false;\n\n\tconstructor(\n\t\tsendChunk: (chunk: Uint8Array) => Promise<void>,\n\t\tcloseConnection: (finalChunk?: Uint8Array) => Promise<void>,\n\t) {\n\t\tthis.#sendChunk = sendChunk;\n\t\tthis.#closeConnection = closeConnection;\n\t}\n\n\tget closed(): boolean {\n\t\treturn this.#closed;\n\t}\n\n\tsend(chunk: Uint8Array): Promise<void> {\n\t\tif (this.#closed) return Promise.reject(new Error(\"Radius relay connection is closed\"));\n\t\treturn this.#sendChunk(chunk);\n\t}\n\n\tasync close(finalChunk?: Uint8Array): Promise<void> {\n\t\tif (this.#closed) return;\n\t\tthis.#closed = true;\n\t\tawait this.#closeConnection(finalChunk);\n\t}\n\n\tmarkClosed(): void {\n\t\tthis.#closed = true;\n\t}\n}\n\nclass RadiusClientByteTransport implements ByteTransport {\n\treadonly #socket: RadiusRelayWebSocket;\n\treadonly #handlers: ByteTransportHandlers;\n\treadonly #writer: OrderedWebSocketWriter;\n\treadonly #onMessage: (event: RadiusRelayMessageEvent) => void;\n\treadonly #onClose: (event: RadiusRelayCloseEvent) => void;\n\treadonly #onError: (event: RadiusRelayErrorEvent) => void;\n\t#closed = false;\n\n\tconstructor(socket: RadiusRelayWebSocket, handlers: ByteTransportHandlers) {\n\t\tthis.#socket = socket;\n\t\tthis.#handlers = handlers;\n\t\tthis.#writer = new OrderedWebSocketWriter(socket);\n\t\tthis.#onMessage = (event) => {\n\t\t\tif (this.#closed) return;\n\t\t\tif (!(event.data instanceof ArrayBuffer)) {\n\t\t\t\tthis.#fail(new Error(\"Radius relay client received a non-binary message\"));\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tthis.#handlers.onData(new Uint8Array(event.data));\n\t\t};\n\t\tthis.#onClose = () => {\n\t\t\tif (this.#markClosed()) this.#handlers.onClose();\n\t\t};\n\t\tthis.#onError = (event) => this.#fail(webSocketError(event));\n\t\tsocket.addEventListener(\"message\", this.#onMessage);\n\t\tsocket.addEventListener(\"close\", this.#onClose);\n\t\tsocket.addEventListener(\"error\", this.#onError);\n\t}\n\n\tsend(chunk: Uint8Array): Promise<void> {\n\t\tif (!(chunk instanceof Uint8Array))\n\t\t\treturn Promise.reject(new TypeError(\"Radius relay chunks must be Uint8Array\"));\n\t\tif (this.#closed) return Promise.reject(new Error(\"Radius relay client is closed\"));\n\t\treturn this.#writer.send(chunk.slice().buffer);\n\t}\n\n\tclose(): void {\n\t\tif (!this.#markClosed()) return;\n\t\tthis.#socket.close(1000, \"Pi client closed\");\n\t}\n\n\t#fail(error: Error): void {\n\t\tif (!this.#markClosed()) return;\n\t\tcloseWebSocket(this.#socket, LOCAL_TRANSPORT_ERROR_CLOSE_CODE, \"Radius relay transport error\");\n\t\tthis.#handlers.onError(error);\n\t}\n\n\t#markClosed(): boolean {\n\t\tif (this.#closed) return false;\n\t\tthis.#closed = true;\n\t\tthis.#writer.close();\n\t\tthis.#socket.removeEventListener(\"message\", this.#onMessage);\n\t\tthis.#socket.removeEventListener(\"close\", this.#onClose);\n\t\tthis.#socket.removeEventListener(\"error\", this.#onError);\n\t\treturn true;\n\t}\n}\n\nclass OrderedWebSocketWriter {\n\treadonly #socket: RadiusRelayWebSocket;\n\t#tail: Promise<void> = Promise.resolve();\n\t#pendingBytes = 0;\n\t#closed = false;\n\n\tconstructor(socket: RadiusRelayWebSocket) {\n\t\tthis.#socket = socket;\n\t}\n\n\tsend(value: string | ArrayBuffer): Promise<void> {\n\t\tif (this.#closed) return Promise.reject(new Error(\"Radius relay WebSocket is closed\"));\n\t\tconst copied = typeof value === \"string\" ? value : value.slice(0);\n\t\tconst byteLength = typeof copied === \"string\" ? Buffer.byteLength(copied) : copied.byteLength;\n\t\tif (this.#pendingBytes + byteLength > MAX_PENDING_BYTES) {\n\t\t\treturn Promise.reject(new Error(\"Radius relay exceeded its pending byte limit\"));\n\t\t}\n\t\tthis.#pendingBytes += byteLength;\n\t\tconst operation = this.#tail.then(async () => {\n\t\t\tif (this.#closed || this.#socket.readyState !== this.#socket.OPEN) {\n\t\t\t\tthrow new Error(\"Radius relay WebSocket is closed\");\n\t\t\t}\n\t\t\tthis.#socket.send(copied);\n\t\t\twhile (this.#socket.bufferedAmount > DRAIN_THRESHOLD_BYTES) {\n\t\t\t\tif (this.#closed || this.#socket.readyState !== this.#socket.OPEN) {\n\t\t\t\t\tthrow new Error(\"Radius relay WebSocket closed during write\");\n\t\t\t\t}\n\t\t\t\tawait delay(5, undefined, false);\n\t\t\t}\n\t\t});\n\t\tconst tracked = operation.finally(() => {\n\t\t\tthis.#pendingBytes -= byteLength;\n\t\t});\n\t\tthis.#tail = tracked.catch(() => {});\n\t\treturn tracked;\n\t}\n\n\tclose(): void {\n\t\tthis.#closed = true;\n\t}\n}\n\ntype HostInputControlMessage =\n\t| { readonly version: 1; readonly type: \"ping\" | \"pong\" }\n\t| { readonly version: 1; readonly type: \"connection_open\"; readonly connection_id: string }\n\t| {\n\t\t\treadonly version: 1;\n\t\t\treadonly type: \"connection_close\";\n\t\t\treadonly connection_id: string;\n\t\t\treadonly code?: number;\n\t };\n\ntype HostOutputControlMessage =\n\t| { readonly version: 1; readonly type: \"pong\" }\n\t| {\n\t\t\treadonly version: 1;\n\t\t\treadonly type: \"connection_close\";\n\t\t\treadonly connection_id: string;\n\t\t\treadonly code?: number;\n\t };\n\nfunction parseHostControlMessage(value: string): HostInputControlMessage {\n\tlet parsed: unknown;\n\ttry {\n\t\tparsed = JSON.parse(value);\n\t} catch {\n\t\tthrow new Error(\"Invalid Radius relay control message\");\n\t}\n\tif (!parsed || typeof parsed !== \"object\" || Array.isArray(parsed)) {\n\t\tthrow new Error(\"Invalid Radius relay control message\");\n\t}\n\tconst message = parsed as { version?: unknown; type?: unknown; connection_id?: unknown; code?: unknown };\n\tif (message.version !== 1) throw new Error(\"Unsupported Radius relay control version\");\n\tif (message.type === \"ping\" || message.type === \"pong\") return { version: 1, type: message.type };\n\tif (\n\t\t(message.type === \"connection_open\" || message.type === \"connection_close\") &&\n\t\ttypeof message.connection_id === \"string\" &&\n\t\tCONNECTION_ID_PATTERN.test(message.connection_id) &&\n\t\t(message.code === undefined ||\n\t\t\t(typeof message.code === \"number\" &&\n\t\t\t\tNumber.isInteger(message.code) &&\n\t\t\t\tmessage.code >= 1000 &&\n\t\t\t\tmessage.code <= 4999))\n\t) {\n\t\treturn message.type === \"connection_open\"\n\t\t\t? { version: 1, type: \"connection_open\", connection_id: message.connection_id }\n\t\t\t: {\n\t\t\t\t\tversion: 1,\n\t\t\t\t\ttype: \"connection_close\",\n\t\t\t\t\tconnection_id: message.connection_id,\n\t\t\t\t\t...(message.code === undefined ? {} : { code: message.code }),\n\t\t\t\t};\n\t}\n\tthrow new Error(\"Invalid Radius relay control message\");\n}\n\nexport function encodeRelayDataFrame(connectionId: string, payload: Uint8Array): ArrayBuffer {\n\tif (!CONNECTION_ID_PATTERN.test(connectionId)) throw new TypeError(\"Invalid Radius relay connection ID\");\n\tconst frame = new Uint8Array(RELAY_DATA_HEADER_BYTES + payload.byteLength);\n\tframe[0] = RELAY_DATA_FRAME_VERSION;\n\tframe[1] = RELAY_DATA_FRAME_TYPE;\n\tconst hex = connectionId.replaceAll(\"-\", \"\");\n\tfor (let index = 0; index < 16; index++) {\n\t\tframe[index + 2] = Number.parseInt(hex.slice(index * 2, index * 2 + 2), 16);\n\t}\n\tframe.set(payload, RELAY_DATA_HEADER_BYTES);\n\treturn frame.buffer;\n}\n\nexport function parseRelayDataFrame(\n\tframe: ArrayBuffer,\n): { readonly connectionId: string; readonly payload: ArrayBuffer } | undefined {\n\tif (frame.byteLength < RELAY_DATA_HEADER_BYTES) return undefined;\n\tconst bytes = new Uint8Array(frame);\n\tif (bytes[0] !== RELAY_DATA_FRAME_VERSION || bytes[1] !== RELAY_DATA_FRAME_TYPE) return undefined;\n\tlet hex = \"\";\n\tfor (const byte of bytes.subarray(2, RELAY_DATA_HEADER_BYTES)) hex += byte.toString(16).padStart(2, \"0\");\n\tconst connectionId = `${hex.slice(0, 8)}-${hex.slice(8, 12)}-${hex.slice(12, 16)}-${hex.slice(16, 20)}-${hex.slice(20)}`;\n\tif (!CONNECTION_ID_PATTERN.test(connectionId)) return undefined;\n\treturn { connectionId, payload: frame.slice(RELAY_DATA_HEADER_BYTES) };\n}\n\nfunction relayWebSocketUrl(gateway: string, serverId: ServerId): string {\n\tconst url = new URL(`/v1/session-relays/${serverId}/connect`, gateway);\n\tif (url.protocol === \"https:\") url.protocol = \"wss:\";\n\telse if (url.protocol === \"http:\") url.protocol = \"ws:\";\n\telse throw new Error(`Unsupported Radius gateway protocol: ${url.protocol}`);\n\treturn url.toString();\n}\n\nfunction defaultWebSocketFactory(options: {\n\treadonly url: string;\n\treadonly protocol: string;\n\treadonly authorization: string;\n}): RadiusRelayWebSocket {\n\treturn new WebSocket(options.url, {\n\t\tprotocols: [options.protocol],\n\t\theaders: { authorization: options.authorization },\n\t}) as unknown as RadiusRelayWebSocket;\n}\n\nfunction openRadiusRelayWebSocket(\n\turl: string,\n\tprotocol: string,\n\ttoken: string,\n\tfactory: RadiusRelayWebSocketFactory,\n\tsignal?: AbortSignal,\n): Promise<RadiusRelayWebSocket> {\n\tsignal?.throwIfAborted();\n\treturn new Promise((resolve, reject) => {\n\t\tconst socket = factory({ url, protocol, authorization: `Bearer ${token}` });\n\t\tsocket.binaryType = \"arraybuffer\";\n\t\tlet settled = false;\n\t\tconst cleanup = (): void => {\n\t\t\tsocket.removeEventListener(\"open\", onOpen);\n\t\t\tsocket.removeEventListener(\"close\", onClose);\n\t\t\tsocket.removeEventListener(\"error\", onError);\n\t\t\tsignal?.removeEventListener(\"abort\", onAbort);\n\t\t};\n\t\tconst fail = (error: Error): void => {\n\t\t\tif (settled) return;\n\t\t\tsettled = true;\n\t\t\tcleanup();\n\t\t\tcloseWebSocket(socket, 1000, \"Radius relay connection failed\");\n\t\t\treject(error);\n\t\t};\n\t\tconst onOpen = (): void => {\n\t\t\tif (settled) return;\n\t\t\tif (socket.protocol !== protocol) {\n\t\t\t\tfail(new Error(`Radius relay selected unexpected WebSocket protocol ${JSON.stringify(socket.protocol)}`));\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tsettled = true;\n\t\t\tcleanup();\n\t\t\tresolve(socket);\n\t\t};\n\t\tconst onClose = (event: RadiusRelayCloseEvent): void =>\n\t\t\tfail(new Error(`Radius relay closed before connecting (${event.code})`));\n\t\tconst onError = (event: RadiusRelayErrorEvent): void => fail(webSocketError(event));\n\t\tconst onAbort = (): void => fail(new Error(\"Radius relay connection cancelled\"));\n\t\tsocket.addEventListener(\"open\", onOpen, { once: true });\n\t\tsocket.addEventListener(\"close\", onClose, { once: true });\n\t\tsocket.addEventListener(\"error\", onError, { once: true });\n\t\tsignal?.addEventListener(\"abort\", onAbort, { once: true });\n\t});\n}\n\nfunction closeWebSocket(socket: RadiusRelayWebSocket, code: number, reason: string): void {\n\ttry {\n\t\tsocket.close(code, reason);\n\t} catch {\n\t\t// A WebSocket can reject close() while its opening handshake is still pending.\n\t}\n}\n\nfunction webSocketError(event: RadiusRelayErrorEvent): Error {\n\tif (event.error instanceof Error && event.error.message.trim().length > 0) return event.error;\n\treturn new Error(event.message?.trim() || \"Radius WebSocket connection failed\");\n}\n\nfunction delay(milliseconds: number, signal: AbortSignal | undefined, unref: boolean): Promise<void> {\n\tsignal?.throwIfAborted();\n\treturn new Promise((resolve, reject) => {\n\t\tconst timer = setTimeout(() => {\n\t\t\tcleanup();\n\t\t\tresolve();\n\t\t}, milliseconds);\n\t\tif (unref) timer.unref();\n\t\tconst onAbort = (): void => {\n\t\t\tclearTimeout(timer);\n\t\t\tcleanup();\n\t\t\ttry {\n\t\t\t\tsignal?.throwIfAborted();\n\t\t\t} catch (error) {\n\t\t\t\treject(error);\n\t\t\t}\n\t\t};\n\t\tconst cleanup = (): void => signal?.removeEventListener(\"abort\", onAbort);\n\t\tsignal?.addEventListener(\"abort\", onAbort, { once: true });\n\t});\n}\n\nfunction toError(error: unknown): Error {\n\treturn error instanceof Error ? error : new Error(String(error));\n}\n\nfunction errorMessage(error: unknown): string {\n\treturn toError(error).message;\n}\n"]}
@@ -0,0 +1,75 @@
1
+ import { Client } from "@earendil-works/pi-client";
2
+ import { type UnixServerRoute } from "@earendil-works/pi-client/unix";
3
+ import { type ServerId } from "@earendil-works/pi-protocol";
4
+ import { type Server } from "@earendil-works/pi-server";
5
+ import type { AuthInput } from "../cli/experimental/command-options.ts";
6
+ import { type RadiusRelayHostStatus } from "./radius-relay.ts";
7
+ export declare const ENV_SERVER_DIR = "PI_SERVER_DIR";
8
+ export declare const ENV_SERVER_ID = "PI_SERVER_ID";
9
+ export declare function resolveServerDirectory(directory?: string): string;
10
+ export declare function ensurePrivateServerDirectory(directory: string): Promise<void>;
11
+ export declare function resolveSessionDirectory(sessionDir?: string): string;
12
+ export interface ServerProfile {
13
+ readonly serverId: ServerId;
14
+ release(): Promise<void>;
15
+ }
16
+ /** Lock one logical server ID in a shared experimental server directory. */
17
+ export declare function acquireServerProfile(directory: string, requestedServerId?: string): Promise<ServerProfile>;
18
+ export interface ActivatedServer {
19
+ readonly client: Client;
20
+ readonly route: UnixServerRoute;
21
+ }
22
+ export interface ActivateServerOptions {
23
+ readonly directory: string;
24
+ readonly requestedServerId?: ServerId | string;
25
+ readonly sessionDir: string;
26
+ readonly provider?: string;
27
+ readonly model?: string;
28
+ }
29
+ /** Ensure the selected logical server is reachable, launching the current Pi installation if needed. */
30
+ export declare function activateServer(options: ActivateServerOptions): Promise<ActivatedServer>;
31
+ export declare function acquireServerActivation(directory: string, serverId: ServerId): Promise<() => Promise<void>>;
32
+ /** Reconcile operator, startup, client, and worker holds for one server generation. */
33
+ export declare class ServerLifetime {
34
+ #private;
35
+ constructor(keepAlive: boolean);
36
+ start(retire: () => void): void;
37
+ setConnectionCount(count: number): void;
38
+ setWorkerCount(count: number): void;
39
+ stop(): void;
40
+ }
41
+ export interface RunningServer {
42
+ readonly serverId: string;
43
+ readonly sessionDir: string;
44
+ readonly socketPath: string;
45
+ readonly server: Server;
46
+ readonly workerPids: ReadonlyMap<string, number>;
47
+ readonly closed: Promise<void>;
48
+ close(): Promise<void>;
49
+ }
50
+ export interface StartServerOptions {
51
+ /** Server profile and socket directory. Defaults to PI_SERVER_DIR or ~/.pi/server. */
52
+ readonly directory?: string;
53
+ /** Logical service ID. Defaults to PI_SERVER_ID or the directory's default-server-id. */
54
+ readonly serverId?: ServerId;
55
+ /** Durable session directory. Defaults to the experimental directory under the configured agent directory. */
56
+ readonly sessionDir?: string;
57
+ /** Optional provider for an explicitly selected Session worker model. */
58
+ readonly provider?: string;
59
+ /** Optional model override for newly started Session workers. */
60
+ readonly model?: string;
61
+ /** Hold the server open without client or Session demand. Defaults to true for foreground servers. */
62
+ readonly keepAlive?: boolean;
63
+ /** Optional explicit Radius credential. Stored Radius auth is used when omitted. */
64
+ readonly relayAuth?: AuthInput;
65
+ /** Explicit plugin packages. Undefined restores the logical server profile; an empty list clears it. */
66
+ readonly pluginPackages?: readonly string[];
67
+ readonly onRelayStatus?: (status: RadiusRelayHostStatus) => void;
68
+ }
69
+ /** Start a replaceable experimental server behind the stable coordinator endpoint. */
70
+ export declare function startServer(options?: StartServerOptions): Promise<RunningServer>;
71
+ /** Start an operator-held server while serializing against automatic cold activation. */
72
+ export declare function startForegroundServer(options?: Omit<StartServerOptions, "keepAlive">): Promise<RunningServer>;
73
+ /** Run an automatically activated server until its client and Session demand disappears. */
74
+ export declare function runServerProcess(args: readonly string[]): Promise<void>;
75
+ //# sourceMappingURL=server.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/experimental/server.ts"],"names":[],"mappings":"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"}