whale-code 6.5.5 → 6.5.6

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 (847) hide show
  1. package/README.md +39 -31
  2. package/bin/{swagmanager-mcp.js → whale-code.js} +17 -2
  3. package/dist/cli/app.js +148 -72
  4. package/dist/cli/app.js.map +1 -0
  5. package/dist/cli/chat/AgentSelector.js +105 -10
  6. package/dist/cli/chat/AgentSelector.js.map +1 -0
  7. package/dist/cli/chat/ChatApp.d.ts +31 -0
  8. package/dist/cli/chat/ChatApp.js +539 -286
  9. package/dist/cli/chat/ChatApp.js.map +1 -0
  10. package/dist/cli/chat/ChatInput.js +1088 -770
  11. package/dist/cli/chat/ChatInput.js.map +1 -0
  12. package/dist/cli/chat/MarkdownText.js +39 -14
  13. package/dist/cli/chat/MarkdownText.js.map +1 -0
  14. package/dist/cli/chat/MemoryManager.js +181 -46
  15. package/dist/cli/chat/MemoryManager.js.map +1 -0
  16. package/dist/cli/chat/MessageList.d.ts +2 -3
  17. package/dist/cli/chat/MessageList.js +186 -45
  18. package/dist/cli/chat/MessageList.js.map +1 -0
  19. package/dist/cli/chat/ModelSelector.js +282 -63
  20. package/dist/cli/chat/ModelSelector.js.map +1 -0
  21. package/dist/cli/chat/NodeManager.js +165 -75
  22. package/dist/cli/chat/NodeManager.js.map +1 -0
  23. package/dist/cli/chat/NodeSelector.js +171 -30
  24. package/dist/cli/chat/NodeSelector.js.map +1 -0
  25. package/dist/cli/chat/PlanApproval.js +281 -57
  26. package/dist/cli/chat/PlanApproval.js.map +1 -0
  27. package/dist/cli/chat/RewindViewer.js +559 -144
  28. package/dist/cli/chat/RewindViewer.js.map +1 -0
  29. package/dist/cli/chat/SessionManager.js +137 -30
  30. package/dist/cli/chat/SessionManager.js.map +1 -0
  31. package/dist/cli/chat/SlashMenu.js +293 -164
  32. package/dist/cli/chat/SlashMenu.js.map +1 -0
  33. package/dist/cli/chat/StatusBar.js +172 -9
  34. package/dist/cli/chat/StatusBar.js.map +1 -0
  35. package/dist/cli/chat/StoreSelector.js +147 -18
  36. package/dist/cli/chat/StoreSelector.js.map +1 -0
  37. package/dist/cli/chat/StreamingText.d.ts +1 -5
  38. package/dist/cli/chat/StreamingText.js +22 -7
  39. package/dist/cli/chat/StreamingText.js.map +1 -0
  40. package/dist/cli/chat/SubagentPanel.d.ts +1 -2
  41. package/dist/cli/chat/SubagentPanel.js +612 -72
  42. package/dist/cli/chat/SubagentPanel.js.map +1 -0
  43. package/dist/cli/chat/TeamPanel.d.ts +1 -0
  44. package/dist/cli/chat/TeamPanel.js +230 -30
  45. package/dist/cli/chat/TeamPanel.js.map +1 -0
  46. package/dist/cli/chat/ThemeSelector.js +84 -24
  47. package/dist/cli/chat/ThemeSelector.js.map +1 -0
  48. package/dist/cli/chat/ToolIndicator.js +1476 -371
  49. package/dist/cli/chat/ToolIndicator.js.map +1 -0
  50. package/dist/cli/chat/hooks/useAgentLoop.d.ts +1 -0
  51. package/dist/cli/chat/hooks/useAgentLoop.js +481 -367
  52. package/dist/cli/chat/hooks/useAgentLoop.js.map +1 -0
  53. package/dist/cli/chat/hooks/useSlashCommands.d.ts +3 -14
  54. package/dist/cli/chat/hooks/useSlashCommands.js +744 -572
  55. package/dist/cli/chat/hooks/useSlashCommands.js.map +1 -0
  56. package/dist/cli/commands/config-cmd.js +56 -57
  57. package/dist/cli/commands/config-cmd.js.map +1 -0
  58. package/dist/cli/commands/db.js +184 -169
  59. package/dist/cli/commands/db.js.map +1 -0
  60. package/dist/cli/commands/doctor.js +212 -122
  61. package/dist/cli/commands/doctor.js.map +1 -0
  62. package/dist/cli/commands/init.js +211 -244
  63. package/dist/cli/commands/init.js.map +1 -0
  64. package/dist/cli/commands/mcp.js +127 -122
  65. package/dist/cli/commands/mcp.js.map +1 -0
  66. package/dist/cli/login/LoginApp.js +355 -141
  67. package/dist/cli/login/LoginApp.js.map +1 -0
  68. package/dist/cli/print-mode.js +196 -177
  69. package/dist/cli/print-mode.js.map +1 -0
  70. package/dist/cli/serve-mode.js +615 -530
  71. package/dist/cli/serve-mode.js.map +1 -0
  72. package/dist/cli/services/agent-config.d.ts +5 -1
  73. package/dist/cli/services/agent-config.js +66 -36
  74. package/dist/cli/services/agent-config.js.map +1 -0
  75. package/dist/cli/services/agent-definitions.d.ts +4 -1
  76. package/dist/cli/services/agent-definitions.js +97 -56
  77. package/dist/cli/services/agent-definitions.js.map +1 -0
  78. package/dist/cli/services/agent-events.js +225 -162
  79. package/dist/cli/services/agent-events.js.map +1 -0
  80. package/dist/cli/services/agent-loop.js +976 -688
  81. package/dist/cli/services/agent-loop.js.map +1 -0
  82. package/dist/cli/services/agent-worker-base.d.ts +35 -5
  83. package/dist/cli/services/agent-worker-base.js +337 -153
  84. package/dist/cli/services/agent-worker-base.js.map +1 -0
  85. package/dist/cli/services/api-retry.js +69 -64
  86. package/dist/cli/services/api-retry.js.map +1 -0
  87. package/dist/cli/services/auth-service.d.ts +3 -3
  88. package/dist/cli/services/auth-service.js +209 -132
  89. package/dist/cli/services/auth-service.js.map +1 -0
  90. package/dist/cli/services/background-processes.js +343 -267
  91. package/dist/cli/services/background-processes.js.map +1 -0
  92. package/dist/cli/services/browser-auth.d.ts +2 -2
  93. package/dist/cli/services/browser-auth.js +159 -118
  94. package/dist/cli/services/browser-auth.js.map +1 -0
  95. package/dist/cli/services/claude-md-loader.js +40 -36
  96. package/dist/cli/services/claude-md-loader.js.map +1 -0
  97. package/dist/cli/services/config-store.d.ts +9 -4
  98. package/dist/cli/services/config-store.js +164 -117
  99. package/dist/cli/services/config-store.js.map +1 -0
  100. package/dist/cli/services/debug-log.d.ts +1 -1
  101. package/dist/cli/services/debug-log.js +34 -35
  102. package/dist/cli/services/debug-log.js.map +1 -0
  103. package/dist/cli/services/env-detect.d.ts +7 -0
  104. package/dist/cli/services/env-detect.js +9 -0
  105. package/dist/cli/services/env-detect.js.map +1 -0
  106. package/dist/cli/services/error-logger.js +187 -169
  107. package/dist/cli/services/error-logger.js.map +1 -0
  108. package/dist/cli/services/file-history.d.ts +1 -1
  109. package/dist/cli/services/file-history.js +50 -54
  110. package/dist/cli/services/file-history.js.map +1 -0
  111. package/dist/cli/services/format-server-response.js +332 -372
  112. package/dist/cli/services/format-server-response.js.map +1 -0
  113. package/dist/cli/services/git-context.js +61 -45
  114. package/dist/cli/services/git-context.js.map +1 -0
  115. package/dist/cli/services/hooks.d.ts +2 -2
  116. package/dist/cli/services/hooks.js +195 -180
  117. package/dist/cli/services/hooks.js.map +1 -0
  118. package/dist/cli/services/ink-incremental.d.ts +19 -0
  119. package/dist/cli/services/ink-incremental.js +59 -0
  120. package/dist/cli/services/ink-incremental.js.map +1 -0
  121. package/dist/cli/services/ink-resize-fix.js +54 -44
  122. package/dist/cli/services/ink-resize-fix.js.map +1 -0
  123. package/dist/cli/services/ink-sync-output.d.ts +12 -0
  124. package/dist/cli/services/ink-sync-output.js +16 -0
  125. package/dist/cli/services/ink-sync-output.js.map +1 -0
  126. package/dist/cli/services/interactive-tools.js +268 -212
  127. package/dist/cli/services/interactive-tools.js.map +1 -0
  128. package/dist/cli/services/keybinding-manager.d.ts +11 -1
  129. package/dist/cli/services/keybinding-manager.js +126 -63
  130. package/dist/cli/services/keybinding-manager.js.map +1 -0
  131. package/dist/cli/services/local-tools.d.ts +1 -1
  132. package/dist/cli/services/local-tools.js +939 -656
  133. package/dist/cli/services/local-tools.js.map +1 -0
  134. package/dist/cli/services/lsp-manager.js +757 -594
  135. package/dist/cli/services/lsp-manager.js.map +1 -0
  136. package/dist/cli/services/mcp-client.d.ts +1 -1
  137. package/dist/cli/services/mcp-client.js +173 -134
  138. package/dist/cli/services/mcp-client.js.map +1 -0
  139. package/dist/cli/services/memory-manager.js +53 -40
  140. package/dist/cli/services/memory-manager.js.map +1 -0
  141. package/dist/cli/services/model-manager.js +55 -40
  142. package/dist/cli/services/model-manager.js.map +1 -0
  143. package/dist/cli/services/model-router.js +115 -85
  144. package/dist/cli/services/model-router.js.map +1 -0
  145. package/dist/cli/services/paths.d.ts +30 -0
  146. package/dist/cli/services/paths.js +81 -0
  147. package/dist/cli/services/paths.js.map +1 -0
  148. package/dist/cli/services/permission-modes.js +32 -25
  149. package/dist/cli/services/permission-modes.js.map +1 -0
  150. package/dist/cli/services/rewind.js +182 -168
  151. package/dist/cli/services/rewind.js.map +1 -0
  152. package/dist/cli/services/ripgrep.js +115 -115
  153. package/dist/cli/services/ripgrep.js.map +1 -0
  154. package/dist/cli/services/sandbox.d.ts +1 -1
  155. package/dist/cli/services/sandbox.js +58 -37
  156. package/dist/cli/services/sandbox.js.map +1 -0
  157. package/dist/cli/services/server-tools.js +738 -565
  158. package/dist/cli/services/server-tools.js.map +1 -0
  159. package/dist/cli/services/session-persistence.js +69 -74
  160. package/dist/cli/services/session-persistence.js.map +1 -0
  161. package/dist/cli/services/subagent-worker.js +42 -27
  162. package/dist/cli/services/subagent-worker.js.map +1 -0
  163. package/dist/cli/services/subagent.d.ts +2 -0
  164. package/dist/cli/services/subagent.js +605 -433
  165. package/dist/cli/services/subagent.js.map +1 -0
  166. package/dist/cli/services/system-prompt.js +86 -78
  167. package/dist/cli/services/system-prompt.js.map +1 -0
  168. package/dist/cli/services/task-decomposer.d.ts +1 -1
  169. package/dist/cli/services/task-decomposer.js +172 -139
  170. package/dist/cli/services/task-decomposer.js.map +1 -0
  171. package/dist/cli/services/team-lead.d.ts +2 -2
  172. package/dist/cli/services/team-lead.js +727 -529
  173. package/dist/cli/services/team-lead.js.map +1 -0
  174. package/dist/cli/services/team-state.js +319 -319
  175. package/dist/cli/services/team-state.js.map +1 -0
  176. package/dist/cli/services/teammate.d.ts +8 -2
  177. package/dist/cli/services/teammate.js +857 -569
  178. package/dist/cli/services/teammate.js.map +1 -0
  179. package/dist/cli/services/telemetry.d.ts +6 -1
  180. package/dist/cli/services/telemetry.js +180 -157
  181. package/dist/cli/services/telemetry.js.map +1 -0
  182. package/dist/cli/services/tools/agent-tools.d.ts +3 -3
  183. package/dist/cli/services/tools/agent-tools.js +480 -322
  184. package/dist/cli/services/tools/agent-tools.js.map +1 -0
  185. package/dist/cli/services/tools/file-ops.js +563 -450
  186. package/dist/cli/services/tools/file-ops.js.map +1 -0
  187. package/dist/cli/services/tools/search-tools.js +231 -162
  188. package/dist/cli/services/tools/search-tools.js.map +1 -0
  189. package/dist/cli/services/tools/shell-exec.js +197 -151
  190. package/dist/cli/services/tools/shell-exec.js.map +1 -0
  191. package/dist/cli/services/tools/task-manager.js +206 -173
  192. package/dist/cli/services/tools/task-manager.js.map +1 -0
  193. package/dist/cli/services/tools/web-tools.js +388 -341
  194. package/dist/cli/services/tools/web-tools.js.map +1 -0
  195. package/dist/cli/setup/SetupApp.d.ts +2 -2
  196. package/dist/cli/setup/SetupApp.js +608 -160
  197. package/dist/cli/setup/SetupApp.js.map +1 -0
  198. package/dist/cli/shared/ErrorBoundary.d.ts +22 -0
  199. package/dist/cli/shared/ErrorBoundary.js +73 -0
  200. package/dist/cli/shared/ErrorBoundary.js.map +1 -0
  201. package/dist/cli/shared/MatrixIntro.js +66 -69
  202. package/dist/cli/shared/MatrixIntro.js.map +1 -0
  203. package/dist/cli/shared/SpinnerSlot.d.ts +14 -0
  204. package/dist/cli/shared/SpinnerSlot.js +63 -0
  205. package/dist/cli/shared/SpinnerSlot.js.map +1 -0
  206. package/dist/cli/shared/Theme.d.ts +1 -1
  207. package/dist/cli/shared/Theme.js +136 -92
  208. package/dist/cli/shared/Theme.js.map +1 -0
  209. package/dist/cli/shared/WhaleBanner.js +99 -11
  210. package/dist/cli/shared/WhaleBanner.js.map +1 -0
  211. package/dist/cli/shared/markdown.d.ts +3 -1
  212. package/dist/cli/shared/markdown.js +736 -674
  213. package/dist/cli/shared/markdown.js.map +1 -0
  214. package/dist/cli/shared/marked-terminal.d.js +2 -0
  215. package/dist/cli/shared/marked-terminal.d.js.map +1 -0
  216. package/dist/cli/shared/theme-manager.js +99 -90
  217. package/dist/cli/shared/theme-manager.js.map +1 -0
  218. package/dist/cli/shared/theme-presets.js +256 -254
  219. package/dist/cli/shared/theme-presets.js.map +1 -0
  220. package/dist/cli/status/StatusApp.js +235 -86
  221. package/dist/cli/status/StatusApp.js.map +1 -0
  222. package/dist/cli/stores/StoreApp.js +275 -65
  223. package/dist/cli/stores/StoreApp.js.map +1 -0
  224. package/dist/index.d.ts +2 -2
  225. package/dist/index.js +509 -396
  226. package/dist/index.js.map +1 -0
  227. package/dist/local-agent/connection.d.ts +2 -2
  228. package/dist/local-agent/connection.js +352 -293
  229. package/dist/local-agent/connection.js.map +1 -0
  230. package/dist/local-agent/discovery.js +259 -122
  231. package/dist/local-agent/discovery.js.map +1 -0
  232. package/dist/local-agent/executor.js +216 -193
  233. package/dist/local-agent/executor.js.map +1 -0
  234. package/dist/local-agent/index.d.ts +2 -2
  235. package/dist/local-agent/index.js +156 -156
  236. package/dist/local-agent/index.js.map +1 -0
  237. package/dist/node/adapters/base.js +18 -8
  238. package/dist/node/adapters/base.js.map +1 -0
  239. package/dist/node/adapters/discord.js +286 -275
  240. package/dist/node/adapters/discord.js.map +1 -0
  241. package/dist/node/adapters/email.js +189 -202
  242. package/dist/node/adapters/email.js.map +1 -0
  243. package/dist/node/adapters/imessage.js +145 -142
  244. package/dist/node/adapters/imessage.js.map +1 -0
  245. package/dist/node/adapters/slack.js +237 -236
  246. package/dist/node/adapters/slack.js.map +1 -0
  247. package/dist/node/adapters/sms.js +149 -151
  248. package/dist/node/adapters/sms.js.map +1 -0
  249. package/dist/node/adapters/telegram.js +88 -92
  250. package/dist/node/adapters/telegram.js.map +1 -0
  251. package/dist/node/adapters/webchat.js +160 -136
  252. package/dist/node/adapters/webchat.js.map +1 -0
  253. package/dist/node/adapters/whatsapp.js +212 -215
  254. package/dist/node/adapters/whatsapp.js.map +1 -0
  255. package/dist/node/cli.js +884 -653
  256. package/dist/node/cli.js.map +1 -0
  257. package/dist/node/config.js +20 -18
  258. package/dist/node/config.js.map +1 -0
  259. package/dist/node/gateway-client.js +191 -181
  260. package/dist/node/gateway-client.js.map +1 -0
  261. package/dist/node/portal/clipboard.js +161 -130
  262. package/dist/node/portal/clipboard.js.map +1 -0
  263. package/dist/node/portal/discovery.js +51 -45
  264. package/dist/node/portal/discovery.js.map +1 -0
  265. package/dist/node/portal/forward.js +64 -58
  266. package/dist/node/portal/forward.js.map +1 -0
  267. package/dist/node/portal/index.js +246 -221
  268. package/dist/node/portal/index.js.map +1 -0
  269. package/dist/node/portal/multiplexer.js +192 -182
  270. package/dist/node/portal/multiplexer.js.map +1 -0
  271. package/dist/node/portal/permissions.js +102 -70
  272. package/dist/node/portal/permissions.js.map +1 -0
  273. package/dist/node/portal/protocol.js +153 -116
  274. package/dist/node/portal/protocol.js.map +1 -0
  275. package/dist/node/portal/screen.js +80 -69
  276. package/dist/node/portal/screen.js.map +1 -0
  277. package/dist/node/portal/session.js +124 -117
  278. package/dist/node/portal/session.js.map +1 -0
  279. package/dist/node/portal/shell.js +140 -113
  280. package/dist/node/portal/shell.js.map +1 -0
  281. package/dist/node/portal/stream.js +77 -75
  282. package/dist/node/portal/stream.js.map +1 -0
  283. package/dist/node/portal/transfer.js +190 -167
  284. package/dist/node/portal/transfer.js.map +1 -0
  285. package/dist/node/portal/ui.js +124 -99
  286. package/dist/node/portal/ui.js.map +1 -0
  287. package/dist/node/remote-desktop/compile-helper.js +50 -45
  288. package/dist/node/remote-desktop/compile-helper.js.map +1 -0
  289. package/dist/node/remote-desktop/index.js +215 -187
  290. package/dist/node/remote-desktop/index.js.map +1 -0
  291. package/dist/node/remote-desktop/protocol.js +45 -29
  292. package/dist/node/remote-desktop/protocol.js.map +1 -0
  293. package/dist/node/runtime.js +493 -410
  294. package/dist/node/runtime.js.map +1 -0
  295. package/dist/server/handlers/__test-utils__/test-db.js +39 -89
  296. package/dist/server/handlers/__test-utils__/test-db.js.map +1 -0
  297. package/dist/server/handlers/analytics.js +467 -261
  298. package/dist/server/handlers/analytics.js.map +1 -0
  299. package/dist/server/handlers/api-docs.js +1030 -895
  300. package/dist/server/handlers/api-docs.js.map +1 -0
  301. package/dist/server/handlers/api-keys.js +291 -242
  302. package/dist/server/handlers/api-keys.js.map +1 -0
  303. package/dist/server/handlers/billing.js +330 -239
  304. package/dist/server/handlers/billing.js.map +1 -0
  305. package/dist/server/handlers/browser.js +468 -395
  306. package/dist/server/handlers/browser.js.map +1 -0
  307. package/dist/server/handlers/catalog.js +1377 -978
  308. package/dist/server/handlers/catalog.js.map +1 -0
  309. package/dist/server/handlers/clickhouse.js +157 -109
  310. package/dist/server/handlers/clickhouse.js.map +1 -0
  311. package/dist/server/handlers/comms.js +1439 -984
  312. package/dist/server/handlers/comms.js.map +1 -0
  313. package/dist/server/handlers/creations.js +461 -394
  314. package/dist/server/handlers/creations.js.map +1 -0
  315. package/dist/server/handlers/crm.js +1082 -791
  316. package/dist/server/handlers/crm.js.map +1 -0
  317. package/dist/server/handlers/discovery.js +251 -232
  318. package/dist/server/handlers/discovery.js.map +1 -0
  319. package/dist/server/handlers/embeddings.js +241 -164
  320. package/dist/server/handlers/embeddings.js.map +1 -0
  321. package/dist/server/handlers/enrichment.js +887 -718
  322. package/dist/server/handlers/enrichment.js.map +1 -0
  323. package/dist/server/handlers/image-gen.js +467 -376
  324. package/dist/server/handlers/image-gen.js.map +1 -0
  325. package/dist/server/handlers/inventory.js +797 -424
  326. package/dist/server/handlers/inventory.js.map +1 -0
  327. package/dist/server/handlers/kali.js +272 -230
  328. package/dist/server/handlers/kali.js.map +1 -0
  329. package/dist/server/handlers/llm-providers.js +803 -580
  330. package/dist/server/handlers/llm-providers.js.map +1 -0
  331. package/dist/server/handlers/local-agent.js +133 -105
  332. package/dist/server/handlers/local-agent.js.map +1 -0
  333. package/dist/server/handlers/media.js +1179 -857
  334. package/dist/server/handlers/media.js.map +1 -0
  335. package/dist/server/handlers/meta-ads.js +2669 -2093
  336. package/dist/server/handlers/meta-ads.js.map +1 -0
  337. package/dist/server/handlers/nodes.js +1321 -913
  338. package/dist/server/handlers/nodes.js.map +1 -0
  339. package/dist/server/handlers/operations.js +183 -157
  340. package/dist/server/handlers/operations.js.map +1 -0
  341. package/dist/server/handlers/platform.js +346 -210
  342. package/dist/server/handlers/platform.js.map +1 -0
  343. package/dist/server/handlers/remove-bg.js +118 -86
  344. package/dist/server/handlers/remove-bg.js.map +1 -0
  345. package/dist/server/handlers/storefront.js +586 -446
  346. package/dist/server/handlers/storefront.js.map +1 -0
  347. package/dist/server/handlers/supply-chain.js +546 -326
  348. package/dist/server/handlers/supply-chain.js.map +1 -0
  349. package/dist/server/handlers/transcription.js +106 -97
  350. package/dist/server/handlers/transcription.js.map +1 -0
  351. package/dist/server/handlers/video-gen.js +593 -424
  352. package/dist/server/handlers/video-gen.js.map +1 -0
  353. package/dist/server/handlers/voice.js +1458 -1039
  354. package/dist/server/handlers/voice.js.map +1 -0
  355. package/dist/server/handlers/workflow-steps.js +2837 -2116
  356. package/dist/server/handlers/workflow-steps.js.map +1 -0
  357. package/dist/server/handlers/workflows.js +1630 -933
  358. package/dist/server/handlers/workflows.js.map +1 -0
  359. package/dist/server/index.js +3167 -2422
  360. package/dist/server/index.js.map +1 -0
  361. package/dist/server/lib/batch-client.js +471 -409
  362. package/dist/server/lib/batch-client.js.map +1 -0
  363. package/dist/server/lib/clickhouse-buffer.js +118 -104
  364. package/dist/server/lib/clickhouse-buffer.js.map +1 -0
  365. package/dist/server/lib/clickhouse-client.js +107 -107
  366. package/dist/server/lib/clickhouse-client.js.map +1 -0
  367. package/dist/server/lib/coa-renderer.js +1786 -356
  368. package/dist/server/lib/coa-renderer.js.map +1 -0
  369. package/dist/server/lib/code-worker-pool.js +227 -177
  370. package/dist/server/lib/code-worker-pool.js.map +1 -0
  371. package/dist/server/lib/code-worker.js +174 -164
  372. package/dist/server/lib/code-worker.js.map +1 -0
  373. package/dist/server/lib/compaction-service.d.ts +2 -12
  374. package/dist/server/lib/compaction-service.js +74 -184
  375. package/dist/server/lib/compaction-service.js.map +1 -0
  376. package/dist/server/lib/logger.js +36 -24
  377. package/dist/server/lib/logger.js.map +1 -0
  378. package/dist/server/lib/otel.js +101 -80
  379. package/dist/server/lib/otel.js.map +1 -0
  380. package/dist/server/lib/pdf-renderer.js +952 -788
  381. package/dist/server/lib/pdf-renderer.js.map +1 -0
  382. package/dist/server/lib/prompt-sanitizer.js +188 -108
  383. package/dist/server/lib/prompt-sanitizer.js.map +1 -0
  384. package/dist/server/lib/provider-capabilities.js +136 -138
  385. package/dist/server/lib/provider-capabilities.js.map +1 -0
  386. package/dist/server/lib/provider-failover.js +190 -168
  387. package/dist/server/lib/provider-failover.js.map +1 -0
  388. package/dist/server/lib/rate-limiter.js +186 -117
  389. package/dist/server/lib/rate-limiter.js.map +1 -0
  390. package/dist/server/lib/react-pdf-layout.js +551 -382
  391. package/dist/server/lib/react-pdf-layout.js.map +1 -0
  392. package/dist/server/lib/server-agent-loop.d.ts +4 -1
  393. package/dist/server/lib/server-agent-loop.js +906 -634
  394. package/dist/server/lib/server-agent-loop.js.map +1 -0
  395. package/dist/server/lib/server-subagent.js +260 -164
  396. package/dist/server/lib/server-subagent.js.map +1 -0
  397. package/dist/server/lib/session-checkpoint.js +105 -96
  398. package/dist/server/lib/session-checkpoint.js.map +1 -0
  399. package/dist/server/lib/ssrf-guard.js +193 -184
  400. package/dist/server/lib/ssrf-guard.js.map +1 -0
  401. package/dist/server/lib/supabase-client.js +94 -82
  402. package/dist/server/lib/supabase-client.js.map +1 -0
  403. package/dist/server/lib/template-resolver.js +154 -176
  404. package/dist/server/lib/template-resolver.js.map +1 -0
  405. package/dist/server/lib/utils.js +242 -133
  406. package/dist/server/lib/utils.js.map +1 -0
  407. package/dist/server/local-agent-gateway.d.ts +2 -2
  408. package/dist/server/local-agent-gateway.js +785 -627
  409. package/dist/server/local-agent-gateway.js.map +1 -0
  410. package/dist/server/providers/anthropic.js +250 -172
  411. package/dist/server/providers/anthropic.js.map +1 -0
  412. package/dist/server/providers/bedrock.js +217 -158
  413. package/dist/server/providers/bedrock.js.map +1 -0
  414. package/dist/server/providers/gemini.js +548 -418
  415. package/dist/server/providers/gemini.js.map +1 -0
  416. package/dist/server/providers/openai.js +571 -437
  417. package/dist/server/providers/openai.js.map +1 -0
  418. package/dist/server/providers/registry.js +23 -18
  419. package/dist/server/providers/registry.js.map +1 -0
  420. package/dist/server/providers/shared.js +123 -95
  421. package/dist/server/providers/shared.js.map +1 -0
  422. package/dist/server/providers/types.js +1 -11
  423. package/dist/server/providers/types.js.map +1 -0
  424. package/dist/server/proxy-handlers.js +209 -165
  425. package/dist/server/proxy-handlers.js.map +1 -0
  426. package/dist/server/tool-router.js +959 -599
  427. package/dist/server/tool-router.js.map +1 -0
  428. package/dist/server/validation.js +248 -188
  429. package/dist/server/validation.js.map +1 -0
  430. package/dist/server/worker.js +202 -133
  431. package/dist/server/worker.js.map +1 -0
  432. package/dist/setup.d.ts +2 -2
  433. package/dist/setup.js +151 -147
  434. package/dist/setup.js.map +1 -0
  435. package/dist/shared/agent-core.d.ts +115 -26
  436. package/dist/shared/agent-core.js +956 -522
  437. package/dist/shared/agent-core.js.map +1 -0
  438. package/dist/shared/anthropic-types.js +1 -6
  439. package/dist/shared/anthropic-types.js.map +1 -0
  440. package/dist/shared/api-client.d.ts +16 -9
  441. package/dist/shared/api-client.js +419 -327
  442. package/dist/shared/api-client.js.map +1 -0
  443. package/dist/shared/compaction.d.ts +36 -0
  444. package/dist/shared/compaction.js +138 -0
  445. package/dist/shared/compaction.js.map +1 -0
  446. package/dist/shared/constants.js +67 -64
  447. package/dist/shared/constants.js.map +1 -0
  448. package/dist/shared/sse-parser.js +221 -219
  449. package/dist/shared/sse-parser.js.map +1 -0
  450. package/dist/shared/tool-dispatch.d.ts +4 -0
  451. package/dist/shared/tool-dispatch.js +226 -165
  452. package/dist/shared/tool-dispatch.js.map +1 -0
  453. package/dist/shared/types.js +1 -6
  454. package/dist/shared/types.js.map +1 -0
  455. package/dist/types/cli-highlight.d.js +2 -0
  456. package/dist/types/cli-highlight.d.js.map +1 -0
  457. package/dist/types/diff.d.js +2 -0
  458. package/dist/types/diff.d.js.map +1 -0
  459. package/dist/types/pdf-parse.d.js +2 -0
  460. package/dist/types/pdf-parse.d.js.map +1 -0
  461. package/dist/updater.d.ts +1 -1
  462. package/dist/updater.js +118 -92
  463. package/dist/updater.js.map +1 -0
  464. package/dist/webchat/widget.js +227 -380
  465. package/dist/webchat/widget.js.map +1 -0
  466. package/package.json +22 -10
  467. package/vendor/ink/build/ansi-tokenizer.d.ts +38 -0
  468. package/vendor/ink/build/ansi-tokenizer.js +316 -0
  469. package/vendor/ink/build/ansi-tokenizer.js.map +1 -0
  470. package/vendor/ink/build/apply-styles.js +175 -0
  471. package/vendor/ink/build/build-layout.js +77 -0
  472. package/vendor/ink/build/calculate-wrapped-text.js +53 -0
  473. package/vendor/ink/build/colorize.d.ts +3 -0
  474. package/vendor/ink/build/colorize.js +48 -0
  475. package/vendor/ink/build/colorize.js.map +1 -0
  476. package/vendor/ink/build/components/AccessibilityContext.d.ts +3 -0
  477. package/vendor/ink/build/components/AccessibilityContext.js +5 -0
  478. package/vendor/ink/build/components/AccessibilityContext.js.map +1 -0
  479. package/vendor/ink/build/components/App.d.ts +18 -0
  480. package/vendor/ink/build/components/App.js +351 -0
  481. package/vendor/ink/build/components/App.js.map +1 -0
  482. package/vendor/ink/build/components/AppContext.d.ts +15 -0
  483. package/vendor/ink/build/components/AppContext.js +11 -0
  484. package/vendor/ink/build/components/AppContext.js.map +1 -0
  485. package/vendor/ink/build/components/BackgroundContext.d.ts +4 -0
  486. package/vendor/ink/build/components/BackgroundContext.js +3 -0
  487. package/vendor/ink/build/components/BackgroundContext.js.map +1 -0
  488. package/vendor/ink/build/components/Box.d.ts +117 -0
  489. package/vendor/ink/build/components/Box.js +34 -0
  490. package/vendor/ink/build/components/Box.js.map +1 -0
  491. package/vendor/ink/build/components/Color.js +62 -0
  492. package/vendor/ink/build/components/Cursor.d.ts +83 -0
  493. package/vendor/ink/build/components/Cursor.js +53 -0
  494. package/vendor/ink/build/components/Cursor.js.map +1 -0
  495. package/vendor/ink/build/components/CursorContext.d.ts +11 -0
  496. package/vendor/ink/build/components/CursorContext.js +8 -0
  497. package/vendor/ink/build/components/CursorContext.js.map +1 -0
  498. package/vendor/ink/build/components/ErrorBoundary.d.ts +18 -0
  499. package/vendor/ink/build/components/ErrorBoundary.js +23 -0
  500. package/vendor/ink/build/components/ErrorBoundary.js.map +1 -0
  501. package/vendor/ink/build/components/ErrorOverview.d.ts +6 -0
  502. package/vendor/ink/build/components/ErrorOverview.js +84 -0
  503. package/vendor/ink/build/components/ErrorOverview.js.map +1 -0
  504. package/vendor/ink/build/components/FocusContext.d.ts +16 -0
  505. package/vendor/ink/build/components/FocusContext.js +17 -0
  506. package/vendor/ink/build/components/FocusContext.js.map +1 -0
  507. package/vendor/ink/build/components/Newline.d.ts +13 -0
  508. package/vendor/ink/build/components/Newline.js +8 -0
  509. package/vendor/ink/build/components/Newline.js.map +1 -0
  510. package/vendor/ink/build/components/Spacer.d.ts +7 -0
  511. package/vendor/ink/build/components/Spacer.js +11 -0
  512. package/vendor/ink/build/components/Spacer.js.map +1 -0
  513. package/vendor/ink/build/components/Static.d.ts +24 -0
  514. package/vendor/ink/build/components/Static.js +28 -0
  515. package/vendor/ink/build/components/Static.js.map +1 -0
  516. package/vendor/ink/build/components/StderrContext.d.ts +15 -0
  517. package/vendor/ink/build/components/StderrContext.js +13 -0
  518. package/vendor/ink/build/components/StderrContext.js.map +1 -0
  519. package/vendor/ink/build/components/StdinContext.d.ts +22 -0
  520. package/vendor/ink/build/components/StdinContext.js +19 -0
  521. package/vendor/ink/build/components/StdinContext.js.map +1 -0
  522. package/vendor/ink/build/components/StdoutContext.d.ts +15 -0
  523. package/vendor/ink/build/components/StdoutContext.js +13 -0
  524. package/vendor/ink/build/components/StdoutContext.js.map +1 -0
  525. package/vendor/ink/build/components/Text.d.ts +55 -0
  526. package/vendor/ink/build/components/Text.js +50 -0
  527. package/vendor/ink/build/components/Text.js.map +1 -0
  528. package/vendor/ink/build/components/Transform.d.ts +16 -0
  529. package/vendor/ink/build/components/Transform.js +15 -0
  530. package/vendor/ink/build/components/Transform.js.map +1 -0
  531. package/vendor/ink/build/cursor-helpers.d.ts +38 -0
  532. package/vendor/ink/build/cursor-helpers.js +56 -0
  533. package/vendor/ink/build/cursor-helpers.js.map +1 -0
  534. package/vendor/ink/build/devtools-window-polyfill.d.ts +1 -0
  535. package/vendor/ink/build/devtools-window-polyfill.js +65 -0
  536. package/vendor/ink/build/devtools-window-polyfill.js.map +1 -0
  537. package/vendor/ink/build/devtools.d.ts +1 -0
  538. package/vendor/ink/build/devtools.js +11 -0
  539. package/vendor/ink/build/devtools.js.map +1 -0
  540. package/vendor/ink/build/dom.d.ts +56 -0
  541. package/vendor/ink/build/dom.js +124 -0
  542. package/vendor/ink/build/dom.js.map +1 -0
  543. package/vendor/ink/build/experimental/apply-style.js +140 -0
  544. package/vendor/ink/build/experimental/dom.js +123 -0
  545. package/vendor/ink/build/experimental/output.js +91 -0
  546. package/vendor/ink/build/experimental/reconciler.js +141 -0
  547. package/vendor/ink/build/experimental/renderer.js +81 -0
  548. package/vendor/ink/build/get-max-width.d.ts +3 -0
  549. package/vendor/ink/build/get-max-width.js +10 -0
  550. package/vendor/ink/build/get-max-width.js.map +1 -0
  551. package/vendor/ink/build/hooks/use-app.d.ts +5 -0
  552. package/vendor/ink/build/hooks/use-app.js +8 -0
  553. package/vendor/ink/build/hooks/use-app.js.map +1 -0
  554. package/vendor/ink/build/hooks/use-cursor.d.ts +12 -0
  555. package/vendor/ink/build/hooks/use-cursor.js +29 -0
  556. package/vendor/ink/build/hooks/use-cursor.js.map +1 -0
  557. package/vendor/ink/build/hooks/use-focus-manager.d.ts +28 -0
  558. package/vendor/ink/build/hooks/use-focus-manager.js +17 -0
  559. package/vendor/ink/build/hooks/use-focus-manager.js.map +1 -0
  560. package/vendor/ink/build/hooks/use-focus.d.ts +29 -0
  561. package/vendor/ink/build/hooks/use-focus.js +42 -0
  562. package/vendor/ink/build/hooks/use-focus.js.map +1 -0
  563. package/vendor/ink/build/hooks/use-input.d.ts +131 -0
  564. package/vendor/ink/build/hooks/use-input.js +124 -0
  565. package/vendor/ink/build/hooks/use-input.js.map +1 -0
  566. package/vendor/ink/build/hooks/use-is-screen-reader-enabled.d.ts +5 -0
  567. package/vendor/ink/build/hooks/use-is-screen-reader-enabled.js +11 -0
  568. package/vendor/ink/build/hooks/use-is-screen-reader-enabled.js.map +1 -0
  569. package/vendor/ink/build/hooks/use-stderr.d.ts +5 -0
  570. package/vendor/ink/build/hooks/use-stderr.js +8 -0
  571. package/vendor/ink/build/hooks/use-stderr.js.map +1 -0
  572. package/vendor/ink/build/hooks/use-stdin.d.ts +5 -0
  573. package/vendor/ink/build/hooks/use-stdin.js +8 -0
  574. package/vendor/ink/build/hooks/use-stdin.js.map +1 -0
  575. package/vendor/ink/build/hooks/use-stdout.d.ts +5 -0
  576. package/vendor/ink/build/hooks/use-stdout.js +8 -0
  577. package/vendor/ink/build/hooks/use-stdout.js.map +1 -0
  578. package/vendor/ink/build/hooks/useInput.js +38 -0
  579. package/vendor/ink/build/index.d.ts +34 -0
  580. package/vendor/ink/build/index.js +20 -0
  581. package/vendor/ink/build/index.js.map +1 -0
  582. package/vendor/ink/build/ink.d.ts +90 -0
  583. package/vendor/ink/build/ink.js +654 -0
  584. package/vendor/ink/build/ink.js.map +1 -0
  585. package/vendor/ink/build/input-parser.d.ts +7 -0
  586. package/vendor/ink/build/input-parser.js +154 -0
  587. package/vendor/ink/build/input-parser.js.map +1 -0
  588. package/vendor/ink/build/instance.js +205 -0
  589. package/vendor/ink/build/instances.d.ts +3 -0
  590. package/vendor/ink/build/instances.js +8 -0
  591. package/vendor/ink/build/instances.js.map +1 -0
  592. package/vendor/ink/build/kitty-keyboard.d.ts +23 -0
  593. package/vendor/ink/build/kitty-keyboard.js +32 -0
  594. package/vendor/ink/build/kitty-keyboard.js.map +1 -0
  595. package/vendor/ink/build/layout.d.ts +7 -0
  596. package/vendor/ink/build/layout.js +33 -0
  597. package/vendor/ink/build/layout.js.map +1 -0
  598. package/vendor/ink/build/log-update.d.ts +19 -0
  599. package/vendor/ink/build/log-update.js +243 -0
  600. package/vendor/ink/build/log-update.js.map +1 -0
  601. package/vendor/ink/build/measure-element.d.ts +16 -0
  602. package/vendor/ink/build/measure-element.js +9 -0
  603. package/vendor/ink/build/measure-element.js.map +1 -0
  604. package/vendor/ink/build/measure-text.d.ts +6 -0
  605. package/vendor/ink/build/measure-text.js +21 -0
  606. package/vendor/ink/build/measure-text.js.map +1 -0
  607. package/vendor/ink/build/options.d.ts +52 -0
  608. package/vendor/ink/build/options.js +2 -0
  609. package/vendor/ink/build/options.js.map +1 -0
  610. package/vendor/ink/build/output.d.ts +35 -0
  611. package/vendor/ink/build/output.js +183 -0
  612. package/vendor/ink/build/output.js.map +1 -0
  613. package/vendor/ink/build/parse-keypress.d.ts +22 -0
  614. package/vendor/ink/build/parse-keypress.js +493 -0
  615. package/vendor/ink/build/parse-keypress.js.map +1 -0
  616. package/vendor/ink/build/reconciler.d.ts +4 -0
  617. package/vendor/ink/build/reconciler.js +274 -0
  618. package/vendor/ink/build/reconciler.js.map +1 -0
  619. package/vendor/ink/build/render-background.d.ts +4 -0
  620. package/vendor/ink/build/render-background.js +25 -0
  621. package/vendor/ink/build/render-background.js.map +1 -0
  622. package/vendor/ink/build/render-border.d.ts +4 -0
  623. package/vendor/ink/build/render-border.js +73 -0
  624. package/vendor/ink/build/render-border.js.map +1 -0
  625. package/vendor/ink/build/render-node-to-output.d.ts +14 -0
  626. package/vendor/ink/build/render-node-to-output.js +147 -0
  627. package/vendor/ink/build/render-node-to-output.js.map +1 -0
  628. package/vendor/ink/build/render-to-string.d.ts +38 -0
  629. package/vendor/ink/build/render-to-string.js +115 -0
  630. package/vendor/ink/build/render-to-string.js.map +1 -0
  631. package/vendor/ink/build/render.d.ts +121 -0
  632. package/vendor/ink/build/render.js +55 -0
  633. package/vendor/ink/build/render.js.map +1 -0
  634. package/vendor/ink/build/renderer.d.ts +8 -0
  635. package/vendor/ink/build/renderer.js +55 -0
  636. package/vendor/ink/build/renderer.js.map +1 -0
  637. package/vendor/ink/build/sanitize-ansi.d.ts +2 -0
  638. package/vendor/ink/build/sanitize-ansi.js +27 -0
  639. package/vendor/ink/build/sanitize-ansi.js.map +1 -0
  640. package/vendor/ink/build/screen-reader-update.d.ts +13 -0
  641. package/vendor/ink/build/screen-reader-update.js +38 -0
  642. package/vendor/ink/build/screen-reader-update.js.map +1 -0
  643. package/vendor/ink/build/squash-text-nodes.d.ts +3 -0
  644. package/vendor/ink/build/squash-text-nodes.js +36 -0
  645. package/vendor/ink/build/squash-text-nodes.js.map +1 -0
  646. package/vendor/ink/build/styles.d.ts +240 -0
  647. package/vendor/ink/build/styles.js +232 -0
  648. package/vendor/ink/build/styles.js.map +1 -0
  649. package/vendor/ink/build/utils.d.ts +2 -0
  650. package/vendor/ink/build/utils.js +4 -0
  651. package/vendor/ink/build/utils.js.map +1 -0
  652. package/vendor/ink/build/wrap-text.d.ts +3 -0
  653. package/vendor/ink/build/wrap-text.js +31 -0
  654. package/vendor/ink/build/wrap-text.js.map +1 -0
  655. package/vendor/ink/build/write-synchronized.d.ts +4 -0
  656. package/vendor/ink/build/write-synchronized.js +7 -0
  657. package/vendor/ink/build/write-synchronized.js.map +1 -0
  658. package/vendor/ink/license +10 -0
  659. package/vendor/ink/node_modules/@types/node/LICENSE +21 -0
  660. package/vendor/ink/node_modules/@types/node/README.md +15 -0
  661. package/vendor/ink/node_modules/@types/node/assert/strict.d.ts +105 -0
  662. package/vendor/ink/node_modules/@types/node/assert.d.ts +955 -0
  663. package/vendor/ink/node_modules/@types/node/async_hooks.d.ts +623 -0
  664. package/vendor/ink/node_modules/@types/node/buffer.buffer.d.ts +466 -0
  665. package/vendor/ink/node_modules/@types/node/buffer.d.ts +1810 -0
  666. package/vendor/ink/node_modules/@types/node/child_process.d.ts +1428 -0
  667. package/vendor/ink/node_modules/@types/node/cluster.d.ts +486 -0
  668. package/vendor/ink/node_modules/@types/node/compatibility/iterators.d.ts +21 -0
  669. package/vendor/ink/node_modules/@types/node/console.d.ts +151 -0
  670. package/vendor/ink/node_modules/@types/node/constants.d.ts +20 -0
  671. package/vendor/ink/node_modules/@types/node/crypto.d.ts +4065 -0
  672. package/vendor/ink/node_modules/@types/node/dgram.d.ts +564 -0
  673. package/vendor/ink/node_modules/@types/node/diagnostics_channel.d.ts +576 -0
  674. package/vendor/ink/node_modules/@types/node/dns/promises.d.ts +503 -0
  675. package/vendor/ink/node_modules/@types/node/dns.d.ts +922 -0
  676. package/vendor/ink/node_modules/@types/node/domain.d.ts +166 -0
  677. package/vendor/ink/node_modules/@types/node/events.d.ts +1054 -0
  678. package/vendor/ink/node_modules/@types/node/fs/promises.d.ts +1329 -0
  679. package/vendor/ink/node_modules/@types/node/fs.d.ts +4676 -0
  680. package/vendor/ink/node_modules/@types/node/globals.d.ts +150 -0
  681. package/vendor/ink/node_modules/@types/node/globals.typedarray.d.ts +101 -0
  682. package/vendor/ink/node_modules/@types/node/http.d.ts +2167 -0
  683. package/vendor/ink/node_modules/@types/node/http2.d.ts +2480 -0
  684. package/vendor/ink/node_modules/@types/node/https.d.ts +405 -0
  685. package/vendor/ink/node_modules/@types/node/index.d.ts +115 -0
  686. package/vendor/ink/node_modules/@types/node/inspector/promises.d.ts +41 -0
  687. package/vendor/ink/node_modules/@types/node/inspector.d.ts +224 -0
  688. package/vendor/ink/node_modules/@types/node/inspector.generated.d.ts +4226 -0
  689. package/vendor/ink/node_modules/@types/node/module.d.ts +819 -0
  690. package/vendor/ink/node_modules/@types/node/net.d.ts +933 -0
  691. package/vendor/ink/node_modules/@types/node/os.d.ts +507 -0
  692. package/vendor/ink/node_modules/@types/node/package.json +155 -0
  693. package/vendor/ink/node_modules/@types/node/path/posix.d.ts +8 -0
  694. package/vendor/ink/node_modules/@types/node/path/win32.d.ts +8 -0
  695. package/vendor/ink/node_modules/@types/node/path.d.ts +187 -0
  696. package/vendor/ink/node_modules/@types/node/perf_hooks.d.ts +643 -0
  697. package/vendor/ink/node_modules/@types/node/process.d.ts +2156 -0
  698. package/vendor/ink/node_modules/@types/node/punycode.d.ts +117 -0
  699. package/vendor/ink/node_modules/@types/node/querystring.d.ts +152 -0
  700. package/vendor/ink/node_modules/@types/node/quic.d.ts +910 -0
  701. package/vendor/ink/node_modules/@types/node/readline/promises.d.ts +161 -0
  702. package/vendor/ink/node_modules/@types/node/readline.d.ts +541 -0
  703. package/vendor/ink/node_modules/@types/node/repl.d.ts +415 -0
  704. package/vendor/ink/node_modules/@types/node/sea.d.ts +162 -0
  705. package/vendor/ink/node_modules/@types/node/sqlite.d.ts +955 -0
  706. package/vendor/ink/node_modules/@types/node/stream/consumers.d.ts +38 -0
  707. package/vendor/ink/node_modules/@types/node/stream/promises.d.ts +211 -0
  708. package/vendor/ink/node_modules/@types/node/stream/web.d.ts +296 -0
  709. package/vendor/ink/node_modules/@types/node/stream.d.ts +1760 -0
  710. package/vendor/ink/node_modules/@types/node/string_decoder.d.ts +67 -0
  711. package/vendor/ink/node_modules/@types/node/test/reporters.d.ts +96 -0
  712. package/vendor/ink/node_modules/@types/node/test.d.ts +2240 -0
  713. package/vendor/ink/node_modules/@types/node/timers/promises.d.ts +108 -0
  714. package/vendor/ink/node_modules/@types/node/timers.d.ts +159 -0
  715. package/vendor/ink/node_modules/@types/node/tls.d.ts +1198 -0
  716. package/vendor/ink/node_modules/@types/node/trace_events.d.ts +197 -0
  717. package/vendor/ink/node_modules/@types/node/ts5.6/buffer.buffer.d.ts +462 -0
  718. package/vendor/ink/node_modules/@types/node/ts5.6/compatibility/float16array.d.ts +71 -0
  719. package/vendor/ink/node_modules/@types/node/ts5.6/globals.typedarray.d.ts +36 -0
  720. package/vendor/ink/node_modules/@types/node/ts5.6/index.d.ts +117 -0
  721. package/vendor/ink/node_modules/@types/node/ts5.7/compatibility/float16array.d.ts +72 -0
  722. package/vendor/ink/node_modules/@types/node/ts5.7/index.d.ts +117 -0
  723. package/vendor/ink/node_modules/@types/node/tty.d.ts +250 -0
  724. package/vendor/ink/node_modules/@types/node/url.d.ts +519 -0
  725. package/vendor/ink/node_modules/@types/node/util/types.d.ts +558 -0
  726. package/vendor/ink/node_modules/@types/node/util.d.ts +1662 -0
  727. package/vendor/ink/node_modules/@types/node/v8.d.ts +983 -0
  728. package/vendor/ink/node_modules/@types/node/vm.d.ts +1208 -0
  729. package/vendor/ink/node_modules/@types/node/wasi.d.ts +202 -0
  730. package/vendor/ink/node_modules/@types/node/web-globals/abortcontroller.d.ts +59 -0
  731. package/vendor/ink/node_modules/@types/node/web-globals/blob.d.ts +23 -0
  732. package/vendor/ink/node_modules/@types/node/web-globals/console.d.ts +9 -0
  733. package/vendor/ink/node_modules/@types/node/web-globals/crypto.d.ts +39 -0
  734. package/vendor/ink/node_modules/@types/node/web-globals/domexception.d.ts +68 -0
  735. package/vendor/ink/node_modules/@types/node/web-globals/encoding.d.ts +11 -0
  736. package/vendor/ink/node_modules/@types/node/web-globals/events.d.ts +106 -0
  737. package/vendor/ink/node_modules/@types/node/web-globals/fetch.d.ts +69 -0
  738. package/vendor/ink/node_modules/@types/node/web-globals/importmeta.d.ts +13 -0
  739. package/vendor/ink/node_modules/@types/node/web-globals/messaging.d.ts +23 -0
  740. package/vendor/ink/node_modules/@types/node/web-globals/navigator.d.ts +25 -0
  741. package/vendor/ink/node_modules/@types/node/web-globals/performance.d.ts +45 -0
  742. package/vendor/ink/node_modules/@types/node/web-globals/storage.d.ts +24 -0
  743. package/vendor/ink/node_modules/@types/node/web-globals/streams.d.ts +115 -0
  744. package/vendor/ink/node_modules/@types/node/web-globals/timers.d.ts +44 -0
  745. package/vendor/ink/node_modules/@types/node/web-globals/url.d.ts +24 -0
  746. package/vendor/ink/node_modules/@types/node/worker_threads.d.ts +717 -0
  747. package/vendor/ink/node_modules/@types/node/zlib.d.ts +618 -0
  748. package/vendor/ink/node_modules/node-pty/LICENSE +69 -0
  749. package/vendor/ink/node_modules/node-pty/README.md +164 -0
  750. package/vendor/ink/node_modules/node-pty/binding.gyp +150 -0
  751. package/vendor/ink/node_modules/node-pty/lib/conpty_console_list_agent.js +25 -0
  752. package/vendor/ink/node_modules/node-pty/lib/eventEmitter2.js +47 -0
  753. package/vendor/ink/node_modules/node-pty/lib/index.js +52 -0
  754. package/vendor/ink/node_modules/node-pty/lib/interfaces.js +7 -0
  755. package/vendor/ink/node_modules/node-pty/lib/shared/conout.js +11 -0
  756. package/vendor/ink/node_modules/node-pty/lib/terminal.js +190 -0
  757. package/vendor/ink/node_modules/node-pty/lib/types.js +7 -0
  758. package/vendor/ink/node_modules/node-pty/lib/unixTerminal.js +349 -0
  759. package/vendor/ink/node_modules/node-pty/lib/utils.js +39 -0
  760. package/vendor/ink/node_modules/node-pty/lib/windowsConoutConnection.js +125 -0
  761. package/vendor/ink/node_modules/node-pty/lib/windowsPtyAgent.js +287 -0
  762. package/vendor/ink/node_modules/node-pty/lib/windowsTerminal.js +201 -0
  763. package/vendor/ink/node_modules/node-pty/lib/worker/conoutSocketWorker.js +22 -0
  764. package/vendor/ink/node_modules/node-pty/package.json +65 -0
  765. package/vendor/ink/node_modules/node-pty/prebuilds/darwin-arm64/pty.node +0 -0
  766. package/vendor/ink/node_modules/node-pty/prebuilds/darwin-arm64/spawn-helper +0 -0
  767. package/vendor/ink/node_modules/node-pty/prebuilds/darwin-x64/pty.node +0 -0
  768. package/vendor/ink/node_modules/node-pty/prebuilds/darwin-x64/spawn-helper +0 -0
  769. package/vendor/ink/node_modules/node-pty/prebuilds/linux-arm64/pty.node +0 -0
  770. package/vendor/ink/node_modules/node-pty/prebuilds/linux-x64/pty.node +0 -0
  771. package/vendor/ink/node_modules/node-pty/prebuilds/win32-arm64/conpty/OpenConsole.exe +0 -0
  772. package/vendor/ink/node_modules/node-pty/prebuilds/win32-arm64/conpty/conpty.dll +0 -0
  773. package/vendor/ink/node_modules/node-pty/prebuilds/win32-arm64/conpty.node +0 -0
  774. package/vendor/ink/node_modules/node-pty/prebuilds/win32-arm64/conpty.pdb +0 -0
  775. package/vendor/ink/node_modules/node-pty/prebuilds/win32-arm64/conpty_console_list.node +0 -0
  776. package/vendor/ink/node_modules/node-pty/prebuilds/win32-arm64/conpty_console_list.pdb +0 -0
  777. package/vendor/ink/node_modules/node-pty/prebuilds/win32-x64/conpty/OpenConsole.exe +0 -0
  778. package/vendor/ink/node_modules/node-pty/prebuilds/win32-x64/conpty/conpty.dll +0 -0
  779. package/vendor/ink/node_modules/node-pty/prebuilds/win32-x64/conpty.node +0 -0
  780. package/vendor/ink/node_modules/node-pty/prebuilds/win32-x64/conpty.pdb +0 -0
  781. package/vendor/ink/node_modules/node-pty/prebuilds/win32-x64/conpty_console_list.node +0 -0
  782. package/vendor/ink/node_modules/node-pty/prebuilds/win32-x64/conpty_console_list.pdb +0 -0
  783. package/vendor/ink/node_modules/node-pty/scripts/post-install.js +76 -0
  784. package/vendor/ink/node_modules/node-pty/scripts/prebuild.js +34 -0
  785. package/vendor/ink/node_modules/node-pty/src/unix/pty.cc +875 -0
  786. package/vendor/ink/node_modules/node-pty/src/unix/spawn-helper.cc +23 -0
  787. package/vendor/ink/node_modules/node-pty/src/win/conpty.cc +582 -0
  788. package/vendor/ink/node_modules/node-pty/src/win/conpty.h +41 -0
  789. package/vendor/ink/node_modules/node-pty/src/win/conpty_console_list.cc +44 -0
  790. package/vendor/ink/node_modules/node-pty/src/win/path_util.cc +95 -0
  791. package/vendor/ink/node_modules/node-pty/src/win/path_util.h +26 -0
  792. package/vendor/ink/node_modules/node-pty/third_party/conpty/1.23.251008001/win10-arm64/OpenConsole.exe +0 -0
  793. package/vendor/ink/node_modules/node-pty/third_party/conpty/1.23.251008001/win10-arm64/conpty.dll +0 -0
  794. package/vendor/ink/node_modules/node-pty/third_party/conpty/1.23.251008001/win10-x64/OpenConsole.exe +0 -0
  795. package/vendor/ink/node_modules/node-pty/third_party/conpty/1.23.251008001/win10-x64/conpty.dll +0 -0
  796. package/vendor/ink/node_modules/node-pty/typings/node-pty.d.ts +215 -0
  797. package/vendor/ink/node_modules/undici-types/LICENSE +21 -0
  798. package/vendor/ink/node_modules/undici-types/README.md +6 -0
  799. package/vendor/ink/node_modules/undici-types/agent.d.ts +32 -0
  800. package/vendor/ink/node_modules/undici-types/api.d.ts +43 -0
  801. package/vendor/ink/node_modules/undici-types/balanced-pool.d.ts +30 -0
  802. package/vendor/ink/node_modules/undici-types/cache-interceptor.d.ts +173 -0
  803. package/vendor/ink/node_modules/undici-types/cache.d.ts +36 -0
  804. package/vendor/ink/node_modules/undici-types/client-stats.d.ts +15 -0
  805. package/vendor/ink/node_modules/undici-types/client.d.ts +108 -0
  806. package/vendor/ink/node_modules/undici-types/connector.d.ts +34 -0
  807. package/vendor/ink/node_modules/undici-types/content-type.d.ts +21 -0
  808. package/vendor/ink/node_modules/undici-types/cookies.d.ts +30 -0
  809. package/vendor/ink/node_modules/undici-types/diagnostics-channel.d.ts +74 -0
  810. package/vendor/ink/node_modules/undici-types/dispatcher.d.ts +276 -0
  811. package/vendor/ink/node_modules/undici-types/env-http-proxy-agent.d.ts +22 -0
  812. package/vendor/ink/node_modules/undici-types/errors.d.ts +161 -0
  813. package/vendor/ink/node_modules/undici-types/eventsource.d.ts +66 -0
  814. package/vendor/ink/node_modules/undici-types/fetch.d.ts +211 -0
  815. package/vendor/ink/node_modules/undici-types/formdata.d.ts +108 -0
  816. package/vendor/ink/node_modules/undici-types/global-dispatcher.d.ts +9 -0
  817. package/vendor/ink/node_modules/undici-types/global-origin.d.ts +7 -0
  818. package/vendor/ink/node_modules/undici-types/h2c-client.d.ts +73 -0
  819. package/vendor/ink/node_modules/undici-types/handlers.d.ts +15 -0
  820. package/vendor/ink/node_modules/undici-types/header.d.ts +160 -0
  821. package/vendor/ink/node_modules/undici-types/index.d.ts +88 -0
  822. package/vendor/ink/node_modules/undici-types/interceptors.d.ts +73 -0
  823. package/vendor/ink/node_modules/undici-types/mock-agent.d.ts +68 -0
  824. package/vendor/ink/node_modules/undici-types/mock-call-history.d.ts +111 -0
  825. package/vendor/ink/node_modules/undici-types/mock-client.d.ts +27 -0
  826. package/vendor/ink/node_modules/undici-types/mock-errors.d.ts +12 -0
  827. package/vendor/ink/node_modules/undici-types/mock-interceptor.d.ts +94 -0
  828. package/vendor/ink/node_modules/undici-types/mock-pool.d.ts +27 -0
  829. package/vendor/ink/node_modules/undici-types/package.json +55 -0
  830. package/vendor/ink/node_modules/undici-types/patch.d.ts +29 -0
  831. package/vendor/ink/node_modules/undici-types/pool-stats.d.ts +19 -0
  832. package/vendor/ink/node_modules/undici-types/pool.d.ts +41 -0
  833. package/vendor/ink/node_modules/undici-types/proxy-agent.d.ts +29 -0
  834. package/vendor/ink/node_modules/undici-types/readable.d.ts +68 -0
  835. package/vendor/ink/node_modules/undici-types/retry-agent.d.ts +8 -0
  836. package/vendor/ink/node_modules/undici-types/retry-handler.d.ts +125 -0
  837. package/vendor/ink/node_modules/undici-types/round-robin-pool.d.ts +41 -0
  838. package/vendor/ink/node_modules/undici-types/snapshot-agent.d.ts +109 -0
  839. package/vendor/ink/node_modules/undici-types/util.d.ts +18 -0
  840. package/vendor/ink/node_modules/undici-types/utility.d.ts +7 -0
  841. package/vendor/ink/node_modules/undici-types/webidl.d.ts +341 -0
  842. package/vendor/ink/node_modules/undici-types/websocket.d.ts +186 -0
  843. package/vendor/ink/package.json +201 -0
  844. package/vendor/ink/readme.md +2636 -0
  845. package/bin/swag-agent.js +0 -9
  846. package/dist/server/lib/pg-rate-limiter.d.ts +0 -21
  847. package/dist/server/lib/pg-rate-limiter.js +0 -86
@@ -0,0 +1 @@
1
+ {"version":3,"file":"permissions.js","names":["createInterface","ROLE_CAPABILITIES","admin","member","viewer","approvalCache","Map","approvalTtlMs","setApprovalTtl","minutes","getCacheKey","requesterNodeId","storeId","cacheApproval","capabilities","set","expiresAt","Date","now","getCachedApproval","key","entry","get","delete","clearApprovalCache","clear","getAllowedCapabilities","role","requested","allowed","filter","c","includes","requiresApproval","promptApproval","request","caps","join","from","requester_hostname","requester_node_id","Promise","resolve","rl","input","process","stdin","output","stderr","write","requester_role","timeout","setTimeout","close","once","line","clearTimeout","answer","trim","toLowerCase","checkPermission","autoAcceptAdmins","accepted","length","reason","cached","allCached","every","isTTY","undefined"],"sources":["../../../src/node/portal/permissions.ts"],"sourcesContent":["/**\n * Portal Permissions — role checks, approval prompts, and approval cache.\n *\n * Permission model:\n * Admin → all capabilities, auto-accept\n * Member → shell + file + clipboard, requires first-connect approval\n * Viewer → screen (view only) + file pull, always requires approval\n */\n\nimport { createInterface } from \"node:readline\";\nimport type { ChannelType, PortalRequest } from \"./protocol.js\";\n\n// ============================================================================\n// TYPES\n// ============================================================================\n\nexport type Role = \"admin\" | \"member\" | \"viewer\";\n\ninterface ApprovalCacheEntry {\n requesterNodeId: string;\n capabilities: ChannelType[];\n expiresAt: number;\n}\n\n// ============================================================================\n// CAPABILITY MATRIX\n// ============================================================================\n\nconst ROLE_CAPABILITIES: Record<Role, ChannelType[]> = {\n admin: [\"shell\", \"file\", \"clipboard\", \"forward\", \"screen\"],\n member: [\"shell\", \"file\", \"clipboard\"],\n viewer: [\"screen\", \"file\"], // file = pull only, enforced at channel level\n};\n\n// ============================================================================\n// APPROVAL CACHE\n// ============================================================================\n\nconst approvalCache = new Map<string, ApprovalCacheEntry>();\nlet approvalTtlMs = 60 * 60 * 1000; // default 1 hour\n\nexport function setApprovalTtl(minutes: number): void {\n approvalTtlMs = minutes * 60 * 1000;\n}\n\nfunction getCacheKey(requesterNodeId: string, storeId: string): string {\n return `${storeId}:${requesterNodeId}`;\n}\n\nexport function cacheApproval(requesterNodeId: string, storeId: string, capabilities: ChannelType[]): void {\n approvalCache.set(getCacheKey(requesterNodeId, storeId), {\n requesterNodeId,\n capabilities,\n expiresAt: Date.now() + approvalTtlMs,\n });\n}\n\nexport function getCachedApproval(requesterNodeId: string, storeId: string): ChannelType[] | null {\n const key = getCacheKey(requesterNodeId, storeId);\n const entry = approvalCache.get(key);\n if (!entry) return null;\n if (Date.now() > entry.expiresAt) {\n approvalCache.delete(key);\n return null;\n }\n return entry.capabilities;\n}\n\nexport function clearApprovalCache(): void {\n approvalCache.clear();\n}\n\n// ============================================================================\n// PERMISSION CHECKS\n// ============================================================================\n\n/**\n * Check if a role can access the requested capabilities.\n * Returns the subset of capabilities that are allowed.\n */\nexport function getAllowedCapabilities(role: Role, requested: ChannelType[]): ChannelType[] {\n const allowed = ROLE_CAPABILITIES[role];\n return requested.filter(c => allowed.includes(c));\n}\n\n/**\n * Check if a role requires interactive approval.\n */\nexport function requiresApproval(role: Role): boolean {\n return role !== \"admin\";\n}\n\n// ============================================================================\n// APPROVAL PROMPT\n// ============================================================================\n\n/**\n * Show an interactive approval prompt on the target node's terminal.\n * Returns true if accepted, false if denied.\n */\nexport async function promptApproval(request: PortalRequest): Promise<boolean> {\n const caps = request.capabilities.join(\", \");\n const from = request.requester_hostname || request.requester_node_id;\n\n return new Promise((resolve) => {\n const rl = createInterface({\n input: process.stdin,\n output: process.stderr, // use stderr so it doesn't interfere with stdout piping\n });\n\n process.stderr.write(\n `\\n[portal] Connection request from \"${from}\" (${request.requester_role})\\n` +\n ` Capabilities: ${caps}\\n` +\n ` [A]ccept / [D]eny: `\n );\n\n const timeout = setTimeout(() => {\n process.stderr.write(\"\\n[portal] Approval timed out, denying.\\n\");\n rl.close();\n resolve(false);\n }, 30_000);\n\n rl.once(\"line\", (line) => {\n clearTimeout(timeout);\n rl.close();\n const answer = line.trim().toLowerCase();\n resolve(answer === \"a\" || answer === \"accept\" || answer === \"y\" || answer === \"yes\");\n });\n });\n}\n\n/**\n * Decide whether to accept a portal request.\n * For admins: auto-accept. For others: check cache, then prompt.\n */\nexport async function checkPermission(\n request: PortalRequest,\n storeId: string,\n autoAcceptAdmins: boolean,\n): Promise<{ accepted: boolean; reason?: string }> {\n const role = (request.requester_role || \"member\") as Role;\n\n // Admin auto-accept\n if (role === \"admin\" && autoAcceptAdmins) {\n return { accepted: true };\n }\n\n // Check capability restrictions\n const allowed = getAllowedCapabilities(role, request.capabilities);\n if (allowed.length === 0) {\n return { accepted: false, reason: `Role \"${role}\" has no access to requested capabilities` };\n }\n\n // Check approval cache\n const cached = getCachedApproval(request.requester_node_id, storeId);\n if (cached) {\n const allCached = request.capabilities.every(c => cached.includes(c));\n if (allCached) {\n return { accepted: true };\n }\n }\n\n // Interactive prompt (if terminal available)\n if (process.stdin.isTTY) {\n const accepted = await promptApproval(request);\n if (accepted) {\n cacheApproval(request.requester_node_id, storeId, allowed);\n }\n return { accepted, reason: accepted ? undefined : \"Denied by user\" };\n }\n\n // Headless mode — deny unless cached\n return { accepted: false, reason: \"No interactive terminal for approval (headless mode)\" };\n}\n"],"mappings":"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","ignoreList":[]}
@@ -13,181 +13,218 @@
13
13
  * └──────────┴──────────┴──────────┴──────────┴───────────────┘
14
14
  * Total header: 12 bytes + variable payload (max 1MB per frame)
15
15
  */
16
+
16
17
  // ============================================================================
17
18
  // CONSTANTS
18
19
  // ============================================================================
20
+
19
21
  export const PORTAL_MARKER = 0x01;
20
22
  export const PROTOCOL_VERSION = 0x01;
21
23
  export const HEADER_SIZE = 12;
22
24
  export const MAX_PAYLOAD_SIZE = 1024 * 1024; // 1MB
23
25
  export const SESSION_UUID_SIZE = 16;
24
26
  export const RELAY_HEADER_SIZE = 1 + SESSION_UUID_SIZE; // marker + uuid
27
+
25
28
  // ============================================================================
26
29
  // FRAME TYPES
27
30
  // ============================================================================
28
- export var FrameType;
29
- (function (FrameType) {
30
- FrameType[FrameType["DATA"] = 0] = "DATA";
31
- FrameType[FrameType["SYN"] = 1] = "SYN";
32
- FrameType[FrameType["ACK"] = 2] = "ACK";
33
- FrameType[FrameType["FIN"] = 3] = "FIN";
34
- FrameType[FrameType["RST"] = 4] = "RST";
35
- FrameType[FrameType["PING"] = 5] = "PING";
36
- FrameType[FrameType["PONG"] = 6] = "PONG";
37
- })(FrameType || (FrameType = {}));
31
+
32
+ export let FrameType = /*#__PURE__*/function (FrameType) {
33
+ FrameType[FrameType["DATA"] = 0] = "DATA";
34
+ FrameType[FrameType["SYN"] = 1] = "SYN";
35
+ FrameType[FrameType["ACK"] = 2] = "ACK";
36
+ FrameType[FrameType["FIN"] = 3] = "FIN";
37
+ FrameType[FrameType["RST"] = 4] = "RST";
38
+ FrameType[FrameType["PING"] = 5] = "PING";
39
+ FrameType[FrameType["PONG"] = 6] = "PONG";
40
+ return FrameType;
41
+ }({});
42
+
38
43
  // ============================================================================
39
44
  // FLAGS
40
45
  // ============================================================================
41
- export var FrameFlag;
42
- (function (FrameFlag) {
43
- FrameFlag[FrameFlag["SYN"] = 1] = "SYN";
44
- FrameFlag[FrameFlag["ACK"] = 2] = "ACK";
45
- FrameFlag[FrameFlag["FIN"] = 4] = "FIN";
46
- })(FrameFlag || (FrameFlag = {}));
46
+
47
+ export let FrameFlag = /*#__PURE__*/function (FrameFlag) {
48
+ FrameFlag[FrameFlag["SYN"] = 1] = "SYN";
49
+ FrameFlag[FrameFlag["ACK"] = 2] = "ACK";
50
+ FrameFlag[FrameFlag["FIN"] = 4] = "FIN";
51
+ return FrameFlag;
52
+ }({});
53
+
54
+ // ============================================================================
55
+ // CHANNEL TYPES (for SYN payloads)
56
+ // ============================================================================
57
+
58
+ // ============================================================================
59
+ // FRAME
60
+ // ============================================================================
61
+
62
+ // ============================================================================
63
+ // CONTROL MESSAGES (sent on stream 0 as JSON)
64
+ // ============================================================================
65
+
47
66
  // ============================================================================
48
67
  // ENCODING
49
68
  // ============================================================================
69
+
50
70
  export function encodeFrame(frame) {
51
- const payloadLen = frame.payload.length;
52
- if (payloadLen > MAX_PAYLOAD_SIZE) {
53
- throw new Error(`Payload too large: ${payloadLen} > ${MAX_PAYLOAD_SIZE}`);
54
- }
55
- const buf = Buffer.allocUnsafe(HEADER_SIZE + payloadLen);
56
- buf[0] = frame.version;
57
- buf[1] = frame.type;
58
- buf.writeUInt16BE(frame.flags, 2);
59
- buf.writeUInt32BE(frame.streamId, 4);
60
- buf.writeUInt32BE(payloadLen, 8);
61
- if (payloadLen > 0) {
62
- frame.payload.copy(buf, HEADER_SIZE);
63
- }
64
- return buf;
71
+ const payloadLen = frame.payload.length;
72
+ if (payloadLen > MAX_PAYLOAD_SIZE) {
73
+ throw new Error(`Payload too large: ${payloadLen} > ${MAX_PAYLOAD_SIZE}`);
74
+ }
75
+ const buf = Buffer.allocUnsafe(HEADER_SIZE + payloadLen);
76
+ buf[0] = frame.version;
77
+ buf[1] = frame.type;
78
+ buf.writeUInt16BE(frame.flags, 2);
79
+ buf.writeUInt32BE(frame.streamId, 4);
80
+ buf.writeUInt32BE(payloadLen, 8);
81
+ if (payloadLen > 0) {
82
+ frame.payload.copy(buf, HEADER_SIZE);
83
+ }
84
+ return buf;
65
85
  }
66
86
  export function encodeRelayEnvelope(sessionUuid, innerFrame) {
67
- const buf = Buffer.allocUnsafe(RELAY_HEADER_SIZE + innerFrame.length);
68
- buf[0] = PORTAL_MARKER;
69
- sessionUuid.copy(buf, 1);
70
- innerFrame.copy(buf, RELAY_HEADER_SIZE);
71
- return buf;
87
+ const buf = Buffer.allocUnsafe(RELAY_HEADER_SIZE + innerFrame.length);
88
+ buf[0] = PORTAL_MARKER;
89
+ sessionUuid.copy(buf, 1);
90
+ innerFrame.copy(buf, RELAY_HEADER_SIZE);
91
+ return buf;
72
92
  }
93
+
94
+ // ============================================================================
95
+ // DECODING
96
+ // ============================================================================
97
+
73
98
  /**
74
99
  * Try to decode a frame from the buffer. Returns null if not enough data.
75
100
  */
76
101
  export function decodeFrame(buf, offset = 0) {
77
- const remaining = buf.length - offset;
78
- if (remaining < HEADER_SIZE)
79
- return null;
80
- const version = buf[offset];
81
- const type = buf[offset + 1];
82
- const flags = buf.readUInt16BE(offset + 2);
83
- const streamId = buf.readUInt32BE(offset + 4);
84
- const payloadLen = buf.readUInt32BE(offset + 8);
85
- if (payloadLen > MAX_PAYLOAD_SIZE) {
86
- throw new Error(`Invalid payload length: ${payloadLen}`);
87
- }
88
- const totalLen = HEADER_SIZE + payloadLen;
89
- if (remaining < totalLen)
90
- return null;
91
- const payload = Buffer.allocUnsafe(payloadLen);
92
- buf.copy(payload, 0, offset + HEADER_SIZE, offset + totalLen);
93
- return {
94
- frame: { version, type, flags, streamId, payload },
95
- bytesConsumed: totalLen,
96
- };
102
+ const remaining = buf.length - offset;
103
+ if (remaining < HEADER_SIZE) return null;
104
+ const version = buf[offset];
105
+ const type = buf[offset + 1];
106
+ const flags = buf.readUInt16BE(offset + 2);
107
+ const streamId = buf.readUInt32BE(offset + 4);
108
+ const payloadLen = buf.readUInt32BE(offset + 8);
109
+ if (payloadLen > MAX_PAYLOAD_SIZE) {
110
+ throw new Error(`Invalid payload length: ${payloadLen}`);
111
+ }
112
+ const totalLen = HEADER_SIZE + payloadLen;
113
+ if (remaining < totalLen) return null;
114
+ const payload = Buffer.allocUnsafe(payloadLen);
115
+ buf.copy(payload, 0, offset + HEADER_SIZE, offset + totalLen);
116
+ return {
117
+ frame: {
118
+ version,
119
+ type,
120
+ flags,
121
+ streamId,
122
+ payload
123
+ },
124
+ bytesConsumed: totalLen
125
+ };
97
126
  }
127
+
98
128
  /**
99
129
  * Parse a relay envelope. Returns session UUID and inner frame buffer.
100
130
  */
101
131
  export function decodeRelayEnvelope(buf) {
102
- if (buf.length < RELAY_HEADER_SIZE)
103
- return null;
104
- if (buf[0] !== PORTAL_MARKER)
105
- return null;
106
- const sessionUuid = Buffer.allocUnsafe(SESSION_UUID_SIZE);
107
- buf.copy(sessionUuid, 0, 1, 1 + SESSION_UUID_SIZE);
108
- const innerFrame = Buffer.allocUnsafe(buf.length - RELAY_HEADER_SIZE);
109
- buf.copy(innerFrame, 0, RELAY_HEADER_SIZE);
110
- return { sessionUuid, innerFrame };
132
+ if (buf.length < RELAY_HEADER_SIZE) return null;
133
+ if (buf[0] !== PORTAL_MARKER) return null;
134
+ const sessionUuid = Buffer.allocUnsafe(SESSION_UUID_SIZE);
135
+ buf.copy(sessionUuid, 0, 1, 1 + SESSION_UUID_SIZE);
136
+ const innerFrame = Buffer.allocUnsafe(buf.length - RELAY_HEADER_SIZE);
137
+ buf.copy(innerFrame, 0, RELAY_HEADER_SIZE);
138
+ return {
139
+ sessionUuid,
140
+ innerFrame
141
+ };
111
142
  }
143
+
112
144
  // ============================================================================
113
145
  // UUID HELPERS
114
146
  // ============================================================================
147
+
115
148
  /**
116
149
  * Convert a UUID string (with dashes) to a 16-byte buffer.
117
150
  */
118
151
  export function uuidToBuffer(uuid) {
119
- return Buffer.from(uuid.replace(/-/g, ""), "hex");
152
+ return Buffer.from(uuid.replace(/-/g, ""), "hex");
120
153
  }
154
+
121
155
  /**
122
156
  * Convert a 16-byte buffer to a UUID string (with dashes).
123
157
  */
124
158
  export function bufferToUuid(buf) {
125
- const hex = buf.toString("hex");
126
- return `${hex.slice(0, 8)}-${hex.slice(8, 12)}-${hex.slice(12, 16)}-${hex.slice(16, 20)}-${hex.slice(20)}`;
159
+ const hex = buf.toString("hex");
160
+ return `${hex.slice(0, 8)}-${hex.slice(8, 12)}-${hex.slice(12, 16)}-${hex.slice(16, 20)}-${hex.slice(20)}`;
127
161
  }
162
+
128
163
  // ============================================================================
129
164
  // HELPERS
130
165
  // ============================================================================
166
+
131
167
  export function makeDataFrame(streamId, data) {
132
- return encodeFrame({
133
- version: PROTOCOL_VERSION,
134
- type: FrameType.DATA,
135
- flags: 0,
136
- streamId,
137
- payload: data,
138
- });
168
+ return encodeFrame({
169
+ version: PROTOCOL_VERSION,
170
+ type: FrameType.DATA,
171
+ flags: 0,
172
+ streamId,
173
+ payload: data
174
+ });
139
175
  }
140
176
  export function makeSynFrame(streamId, payload) {
141
- return encodeFrame({
142
- version: PROTOCOL_VERSION,
143
- type: FrameType.SYN,
144
- flags: FrameFlag.SYN,
145
- streamId,
146
- payload: Buffer.from(JSON.stringify(payload)),
147
- });
177
+ return encodeFrame({
178
+ version: PROTOCOL_VERSION,
179
+ type: FrameType.SYN,
180
+ flags: FrameFlag.SYN,
181
+ streamId,
182
+ payload: Buffer.from(JSON.stringify(payload))
183
+ });
148
184
  }
149
185
  export function makeAckFrame(streamId) {
150
- return encodeFrame({
151
- version: PROTOCOL_VERSION,
152
- type: FrameType.ACK,
153
- flags: FrameFlag.ACK,
154
- streamId,
155
- payload: Buffer.alloc(0),
156
- });
186
+ return encodeFrame({
187
+ version: PROTOCOL_VERSION,
188
+ type: FrameType.ACK,
189
+ flags: FrameFlag.ACK,
190
+ streamId,
191
+ payload: Buffer.alloc(0)
192
+ });
157
193
  }
158
194
  export function makeFinFrame(streamId) {
159
- return encodeFrame({
160
- version: PROTOCOL_VERSION,
161
- type: FrameType.FIN,
162
- flags: FrameFlag.FIN,
163
- streamId,
164
- payload: Buffer.alloc(0),
165
- });
195
+ return encodeFrame({
196
+ version: PROTOCOL_VERSION,
197
+ type: FrameType.FIN,
198
+ flags: FrameFlag.FIN,
199
+ streamId,
200
+ payload: Buffer.alloc(0)
201
+ });
166
202
  }
167
203
  export function makeRstFrame(streamId, reason = "") {
168
- return encodeFrame({
169
- version: PROTOCOL_VERSION,
170
- type: FrameType.RST,
171
- flags: 0,
172
- streamId,
173
- payload: reason ? Buffer.from(reason) : Buffer.alloc(0),
174
- });
204
+ return encodeFrame({
205
+ version: PROTOCOL_VERSION,
206
+ type: FrameType.RST,
207
+ flags: 0,
208
+ streamId,
209
+ payload: reason ? Buffer.from(reason) : Buffer.alloc(0)
210
+ });
175
211
  }
176
212
  export function makePingFrame() {
177
- return encodeFrame({
178
- version: PROTOCOL_VERSION,
179
- type: FrameType.PING,
180
- flags: 0,
181
- streamId: 0,
182
- payload: Buffer.alloc(0),
183
- });
213
+ return encodeFrame({
214
+ version: PROTOCOL_VERSION,
215
+ type: FrameType.PING,
216
+ flags: 0,
217
+ streamId: 0,
218
+ payload: Buffer.alloc(0)
219
+ });
184
220
  }
185
221
  export function makePongFrame() {
186
- return encodeFrame({
187
- version: PROTOCOL_VERSION,
188
- type: FrameType.PONG,
189
- flags: 0,
190
- streamId: 0,
191
- payload: Buffer.alloc(0),
192
- });
222
+ return encodeFrame({
223
+ version: PROTOCOL_VERSION,
224
+ type: FrameType.PONG,
225
+ flags: 0,
226
+ streamId: 0,
227
+ payload: Buffer.alloc(0)
228
+ });
193
229
  }
230
+ //# sourceMappingURL=protocol.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"protocol.js","names":["PORTAL_MARKER","PROTOCOL_VERSION","HEADER_SIZE","MAX_PAYLOAD_SIZE","SESSION_UUID_SIZE","RELAY_HEADER_SIZE","FrameType","FrameFlag","encodeFrame","frame","payloadLen","payload","length","Error","buf","Buffer","allocUnsafe","version","type","writeUInt16BE","flags","writeUInt32BE","streamId","copy","encodeRelayEnvelope","sessionUuid","innerFrame","decodeFrame","offset","remaining","readUInt16BE","readUInt32BE","totalLen","bytesConsumed","decodeRelayEnvelope","uuidToBuffer","uuid","from","replace","bufferToUuid","hex","toString","slice","makeDataFrame","data","DATA","makeSynFrame","SYN","JSON","stringify","makeAckFrame","ACK","alloc","makeFinFrame","FIN","makeRstFrame","reason","RST","makePingFrame","PING","makePongFrame","PONG"],"sources":["../../../src/node/portal/protocol.ts"],"sourcesContent":["/**\n * Portal Wire Protocol — frame encoding/decoding for multiplexed portal connections.\n *\n * Relay Envelope (over WebSocket binary):\n * Byte 0: 0x01 (portal frame marker)\n * Bytes 1-16: Session UUID (16 bytes, binary)\n * Bytes 17+: Multiplexed frame (forwarded as-is)\n *\n * Multiplexed Frame (inner protocol, between nodes):\n * ┌──────────┬──────────┬──────────┬──────────┬───────────────┐\n * │ Version │ Type │ Flags │ StreamID │ Length │\n * │ 1 byte │ 1 byte │ 2 bytes │ 4 bytes │ 4 bytes │\n * └──────────┴──────────┴──────────┴──────────┴───────────────┘\n * Total header: 12 bytes + variable payload (max 1MB per frame)\n */\n\n// ============================================================================\n// CONSTANTS\n// ============================================================================\n\nexport const PORTAL_MARKER = 0x01;\nexport const PROTOCOL_VERSION = 0x01;\nexport const HEADER_SIZE = 12;\nexport const MAX_PAYLOAD_SIZE = 1024 * 1024; // 1MB\nexport const SESSION_UUID_SIZE = 16;\nexport const RELAY_HEADER_SIZE = 1 + SESSION_UUID_SIZE; // marker + uuid\n\n// ============================================================================\n// FRAME TYPES\n// ============================================================================\n\nexport enum FrameType {\n DATA = 0x00,\n SYN = 0x01,\n ACK = 0x02,\n FIN = 0x03,\n RST = 0x04,\n PING = 0x05,\n PONG = 0x06,\n}\n\n// ============================================================================\n// FLAGS\n// ============================================================================\n\nexport enum FrameFlag {\n SYN = 0x01,\n ACK = 0x02,\n FIN = 0x04,\n}\n\n// ============================================================================\n// CHANNEL TYPES (for SYN payloads)\n// ============================================================================\n\nexport type ChannelType = \"shell\" | \"file\" | \"forward\" | \"clipboard\" | \"screen\";\n\nexport interface SynShell {\n channel: \"shell\";\n term: string;\n cols: number;\n rows: number;\n cwd?: string;\n command?: string; // single command mode (-c)\n}\n\nexport interface SynFilePush {\n channel: \"file\";\n direction: \"push\";\n name: string;\n size: number;\n mode: number;\n mtime: number;\n isDirectory?: boolean;\n}\n\nexport interface SynFilePull {\n channel: \"file\";\n direction: \"pull\";\n path: string;\n}\n\nexport interface SynForward {\n channel: \"forward\";\n remotePort: number;\n description?: string;\n}\n\nexport interface SynScreen {\n channel: \"screen\";\n control: boolean;\n}\n\nexport interface SynClipboard {\n channel: \"clipboard\";\n mode: \"push\" | \"pull\" | \"sync\";\n}\n\nexport type SynPayload = SynShell | SynFilePush | SynFilePull | SynForward | SynScreen | SynClipboard;\n\n// ============================================================================\n// FRAME\n// ============================================================================\n\nexport interface Frame {\n version: number;\n type: FrameType;\n flags: number;\n streamId: number;\n payload: Buffer;\n}\n\n// ============================================================================\n// CONTROL MESSAGES (sent on stream 0 as JSON)\n// ============================================================================\n\nexport interface PortalRequest {\n type: \"portal_request\";\n session_id: string;\n target_node_id: string;\n capabilities: ChannelType[];\n requester_node_id: string;\n requester_hostname: string;\n requester_role: string;\n}\n\nexport interface PortalAccept {\n type: \"portal_accept\";\n session_id: string;\n hostname: string;\n}\n\nexport interface PortalReject {\n type: \"portal_reject\";\n session_id: string;\n reason: string;\n}\n\nexport interface PortalClose {\n type: \"portal_close\";\n session_id: string;\n}\n\nexport interface ResizeMessage {\n type: \"resize\";\n cols: number;\n rows: number;\n}\n\nexport type ControlMessage = PortalRequest | PortalAccept | PortalReject | PortalClose | ResizeMessage;\n\n// ============================================================================\n// ENCODING\n// ============================================================================\n\nexport function encodeFrame(frame: Frame): Buffer {\n const payloadLen = frame.payload.length;\n if (payloadLen > MAX_PAYLOAD_SIZE) {\n throw new Error(`Payload too large: ${payloadLen} > ${MAX_PAYLOAD_SIZE}`);\n }\n\n const buf = Buffer.allocUnsafe(HEADER_SIZE + payloadLen);\n buf[0] = frame.version;\n buf[1] = frame.type;\n buf.writeUInt16BE(frame.flags, 2);\n buf.writeUInt32BE(frame.streamId, 4);\n buf.writeUInt32BE(payloadLen, 8);\n if (payloadLen > 0) {\n frame.payload.copy(buf, HEADER_SIZE);\n }\n return buf;\n}\n\nexport function encodeRelayEnvelope(sessionUuid: Buffer, innerFrame: Buffer): Buffer {\n const buf = Buffer.allocUnsafe(RELAY_HEADER_SIZE + innerFrame.length);\n buf[0] = PORTAL_MARKER;\n sessionUuid.copy(buf, 1);\n innerFrame.copy(buf, RELAY_HEADER_SIZE);\n return buf;\n}\n\n// ============================================================================\n// DECODING\n// ============================================================================\n\nexport interface DecodeResult {\n frame: Frame;\n bytesConsumed: number;\n}\n\n/**\n * Try to decode a frame from the buffer. Returns null if not enough data.\n */\nexport function decodeFrame(buf: Buffer, offset = 0): DecodeResult | null {\n const remaining = buf.length - offset;\n if (remaining < HEADER_SIZE) return null;\n\n const version = buf[offset];\n const type = buf[offset + 1] as FrameType;\n const flags = buf.readUInt16BE(offset + 2);\n const streamId = buf.readUInt32BE(offset + 4);\n const payloadLen = buf.readUInt32BE(offset + 8);\n\n if (payloadLen > MAX_PAYLOAD_SIZE) {\n throw new Error(`Invalid payload length: ${payloadLen}`);\n }\n\n const totalLen = HEADER_SIZE + payloadLen;\n if (remaining < totalLen) return null;\n\n const payload = Buffer.allocUnsafe(payloadLen);\n buf.copy(payload, 0, offset + HEADER_SIZE, offset + totalLen);\n\n return {\n frame: { version, type, flags, streamId, payload },\n bytesConsumed: totalLen,\n };\n}\n\n/**\n * Parse a relay envelope. Returns session UUID and inner frame buffer.\n */\nexport function decodeRelayEnvelope(buf: Buffer): { sessionUuid: Buffer; innerFrame: Buffer } | null {\n if (buf.length < RELAY_HEADER_SIZE) return null;\n if (buf[0] !== PORTAL_MARKER) return null;\n\n const sessionUuid = Buffer.allocUnsafe(SESSION_UUID_SIZE);\n buf.copy(sessionUuid, 0, 1, 1 + SESSION_UUID_SIZE);\n\n const innerFrame = Buffer.allocUnsafe(buf.length - RELAY_HEADER_SIZE);\n buf.copy(innerFrame, 0, RELAY_HEADER_SIZE);\n\n return { sessionUuid, innerFrame };\n}\n\n// ============================================================================\n// UUID HELPERS\n// ============================================================================\n\n/**\n * Convert a UUID string (with dashes) to a 16-byte buffer.\n */\nexport function uuidToBuffer(uuid: string): Buffer {\n return Buffer.from(uuid.replace(/-/g, \"\"), \"hex\");\n}\n\n/**\n * Convert a 16-byte buffer to a UUID string (with dashes).\n */\nexport function bufferToUuid(buf: Buffer): string {\n const hex = buf.toString(\"hex\");\n return `${hex.slice(0, 8)}-${hex.slice(8, 12)}-${hex.slice(12, 16)}-${hex.slice(16, 20)}-${hex.slice(20)}`;\n}\n\n// ============================================================================\n// HELPERS\n// ============================================================================\n\nexport function makeDataFrame(streamId: number, data: Buffer): Buffer {\n return encodeFrame({\n version: PROTOCOL_VERSION,\n type: FrameType.DATA,\n flags: 0,\n streamId,\n payload: data,\n });\n}\n\nexport function makeSynFrame(streamId: number, payload: SynPayload): Buffer {\n return encodeFrame({\n version: PROTOCOL_VERSION,\n type: FrameType.SYN,\n flags: FrameFlag.SYN,\n streamId,\n payload: Buffer.from(JSON.stringify(payload)),\n });\n}\n\nexport function makeAckFrame(streamId: number): Buffer {\n return encodeFrame({\n version: PROTOCOL_VERSION,\n type: FrameType.ACK,\n flags: FrameFlag.ACK,\n streamId,\n payload: Buffer.alloc(0),\n });\n}\n\nexport function makeFinFrame(streamId: number): Buffer {\n return encodeFrame({\n version: PROTOCOL_VERSION,\n type: FrameType.FIN,\n flags: FrameFlag.FIN,\n streamId,\n payload: Buffer.alloc(0),\n });\n}\n\nexport function makeRstFrame(streamId: number, reason = \"\"): Buffer {\n return encodeFrame({\n version: PROTOCOL_VERSION,\n type: FrameType.RST,\n flags: 0,\n streamId,\n payload: reason ? Buffer.from(reason) : Buffer.alloc(0),\n });\n}\n\nexport function makePingFrame(): Buffer {\n return encodeFrame({\n version: PROTOCOL_VERSION,\n type: FrameType.PING,\n flags: 0,\n streamId: 0,\n payload: Buffer.alloc(0),\n });\n}\n\nexport function makePongFrame(): Buffer {\n return encodeFrame({\n version: PROTOCOL_VERSION,\n type: FrameType.PONG,\n flags: 0,\n streamId: 0,\n payload: Buffer.alloc(0),\n });\n}\n"],"mappings":"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","ignoreList":[]}
@@ -7,87 +7,98 @@
7
7
  *
8
8
  * Initiator side: opens a portal stream and pipes it to the UI.
9
9
  */
10
+
10
11
  // ============================================================================
11
12
  // INITIATOR SIDE — receive screen frames
12
13
  // ============================================================================
14
+
13
15
  export async function openScreen(session, control) {
14
- const stream = session.openStream({
15
- channel: "screen",
16
- control,
16
+ const stream = session.openStream({
17
+ channel: "screen",
18
+ control
19
+ });
20
+ await new Promise((resolve, reject) => {
21
+ const timeout = setTimeout(() => reject(new Error("Screen open timed out")), 10_000);
22
+ session.once("stream:ack", s => {
23
+ if (s.streamId === stream.streamId) {
24
+ clearTimeout(timeout);
25
+ resolve();
26
+ }
17
27
  });
18
- await new Promise((resolve, reject) => {
19
- const timeout = setTimeout(() => reject(new Error("Screen open timed out")), 10_000);
20
- session.once("stream:ack", (s) => {
21
- if (s.streamId === stream.streamId) {
22
- clearTimeout(timeout);
23
- resolve();
24
- }
25
- });
26
- });
27
- const cleanup = () => {
28
- if (!stream.destroyed)
29
- stream.end();
30
- };
31
- return { stream, cleanup };
28
+ });
29
+ const cleanup = () => {
30
+ if (!stream.destroyed) stream.end();
31
+ };
32
+ return {
33
+ stream,
34
+ cleanup
35
+ };
32
36
  }
37
+
33
38
  // ============================================================================
34
39
  // TARGET SIDE — bridge ScreenCaptureService to portal stream
35
40
  // ============================================================================
41
+
36
42
  export function handleScreen(stream, meta, captureService) {
37
- if (!captureService) {
38
- stream.destroy(new Error("Screen capture not available on this node"));
39
- return;
40
- }
41
- // Send SPS/PPS config immediately so remote decoder can initialize
42
- const config = captureService.latestConfig;
43
- if (config) {
44
- stream.write(config);
43
+ if (!captureService) {
44
+ stream.destroy(new Error("Screen capture not available on this node"));
45
+ return;
46
+ }
47
+
48
+ // Send SPS/PPS config immediately so remote decoder can initialize
49
+ const config = captureService.latestConfig;
50
+ if (config) {
51
+ stream.write(config);
52
+ }
53
+
54
+ // Send latest frame for instant first image
55
+ const latest = captureService.latestFrame;
56
+ if (latest) {
57
+ stream.write(latest);
58
+ }
59
+
60
+ // Forward all subsequent frames
61
+ const onFrame = data => {
62
+ if (!stream.destroyed) {
63
+ stream.write(data);
45
64
  }
46
- // Send latest frame for instant first image
47
- const latest = captureService.latestFrame;
48
- if (latest) {
49
- stream.write(latest);
65
+ };
66
+ const onConfig = data => {
67
+ if (!stream.destroyed) {
68
+ stream.write(data);
50
69
  }
51
- // Forward all subsequent frames
52
- const onFrame = (data) => {
53
- if (!stream.destroyed) {
54
- stream.write(data);
70
+ };
71
+ captureService.on("frame", onFrame);
72
+ captureService.on("config", onConfig);
73
+
74
+ // Forward control input from remote viewer → capture service
75
+ if (meta.control) {
76
+ stream.on("data", data => {
77
+ try {
78
+ const msg = JSON.parse(data.toString());
79
+ if (!msg.type) return;
80
+
81
+ // Input events (mouse, keyboard, scroll)
82
+ if (msg.type.startsWith("mouse_") || msg.type.startsWith("key_") || msg.type === "scroll") {
83
+ captureService.injectInput(msg);
55
84
  }
56
- };
57
- const onConfig = (data) => {
58
- if (!stream.destroyed) {
59
- stream.write(data);
85
+ // Control messages (keyframe request, quality adjustment)
86
+ else if (msg.type === "request_keyframe" || msg.type === "quality" || msg.type === "set_fps") {
87
+ captureService.sendControlMessage(msg);
60
88
  }
61
- };
62
- captureService.on("frame", onFrame);
63
- captureService.on("config", onConfig);
64
- // Forward control input from remote viewer → capture service
65
- if (meta.control) {
66
- stream.on("data", (data) => {
67
- try {
68
- const msg = JSON.parse(data.toString());
69
- if (!msg.type)
70
- return;
71
- // Input events (mouse, keyboard, scroll)
72
- if (msg.type.startsWith("mouse_") || msg.type.startsWith("key_") || msg.type === "scroll") {
73
- captureService.injectInput(msg);
74
- }
75
- // Control messages (keyframe request, quality adjustment)
76
- else if (msg.type === "request_keyframe" || msg.type === "quality" || msg.type === "set_fps") {
77
- captureService.sendControlMessage(msg);
78
- }
79
- }
80
- catch {
81
- // Binary frame data flowing the wrong direction, ignore
82
- }
83
- });
84
- }
85
- // Cleanup listeners when stream closes
86
- const cleanup = () => {
87
- captureService.removeListener("frame", onFrame);
88
- captureService.removeListener("config", onConfig);
89
- };
90
- stream.on("end", cleanup);
91
- stream.on("error", cleanup);
92
- stream.on("close", cleanup);
89
+ } catch {
90
+ // Binary frame data flowing the wrong direction, ignore
91
+ }
92
+ });
93
+ }
94
+
95
+ // Cleanup listeners when stream closes
96
+ const cleanup = () => {
97
+ captureService.removeListener("frame", onFrame);
98
+ captureService.removeListener("config", onConfig);
99
+ };
100
+ stream.on("end", cleanup);
101
+ stream.on("error", cleanup);
102
+ stream.on("close", cleanup);
93
103
  }
104
+ //# sourceMappingURL=screen.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"screen.js","names":["openScreen","session","control","stream","openStream","channel","Promise","resolve","reject","timeout","setTimeout","Error","once","s","streamId","clearTimeout","cleanup","destroyed","end","handleScreen","meta","captureService","destroy","config","latestConfig","write","latest","latestFrame","onFrame","data","onConfig","on","msg","JSON","parse","toString","type","startsWith","injectInput","sendControlMessage","removeListener"],"sources":["../../../src/node/portal/screen.ts"],"sourcesContent":["/**\n * ScreenChannel — bridges portal stream to ScreenCaptureService.\n *\n * Target side: subscribes to ScreenCaptureService events, forwards H.264 frames\n * over the portal stream. Sends SPS/PPS config + latest frame immediately so the\n * remote viewer gets an instant first frame.\n *\n * Initiator side: opens a portal stream and pipes it to the UI.\n */\n\nimport type { PortalStream } from \"./stream.js\";\nimport type { SynScreen } from \"./protocol.js\";\nimport type { PortalSession } from \"./session.js\";\nimport type { ScreenCaptureService } from \"../remote-desktop/index.js\";\n\n// ============================================================================\n// INITIATOR SIDE — receive screen frames\n// ============================================================================\n\nexport async function openScreen(\n session: PortalSession,\n control: boolean,\n): Promise<{ stream: PortalStream; cleanup: () => void }> {\n const stream = session.openStream({\n channel: \"screen\",\n control,\n });\n\n await new Promise<void>((resolve, reject) => {\n const timeout = setTimeout(() => reject(new Error(\"Screen open timed out\")), 10_000);\n session.once(\"stream:ack\", (s: PortalStream) => {\n if (s.streamId === stream.streamId) {\n clearTimeout(timeout);\n resolve();\n }\n });\n });\n\n const cleanup = () => {\n if (!stream.destroyed) stream.end();\n };\n\n return { stream, cleanup };\n}\n\n// ============================================================================\n// TARGET SIDE — bridge ScreenCaptureService to portal stream\n// ============================================================================\n\nexport function handleScreen(\n stream: PortalStream,\n meta: SynScreen,\n captureService: ScreenCaptureService | null,\n): void {\n if (!captureService) {\n stream.destroy(new Error(\"Screen capture not available on this node\"));\n return;\n }\n\n // Send SPS/PPS config immediately so remote decoder can initialize\n const config = captureService.latestConfig;\n if (config) {\n stream.write(config);\n }\n\n // Send latest frame for instant first image\n const latest = captureService.latestFrame;\n if (latest) {\n stream.write(latest);\n }\n\n // Forward all subsequent frames\n const onFrame = (data: Buffer) => {\n if (!stream.destroyed) {\n stream.write(data);\n }\n };\n const onConfig = (data: Buffer) => {\n if (!stream.destroyed) {\n stream.write(data);\n }\n };\n\n captureService.on(\"frame\", onFrame);\n captureService.on(\"config\", onConfig);\n\n // Forward control input from remote viewer → capture service\n if (meta.control) {\n stream.on(\"data\", (data: Buffer) => {\n try {\n const msg = JSON.parse(data.toString());\n if (!msg.type) return;\n\n // Input events (mouse, keyboard, scroll)\n if (msg.type.startsWith(\"mouse_\") || msg.type.startsWith(\"key_\") || msg.type === \"scroll\") {\n captureService.injectInput(msg);\n }\n // Control messages (keyframe request, quality adjustment)\n else if (msg.type === \"request_keyframe\" || msg.type === \"quality\" || msg.type === \"set_fps\") {\n captureService.sendControlMessage(msg);\n }\n } catch {\n // Binary frame data flowing the wrong direction, ignore\n }\n });\n }\n\n // Cleanup listeners when stream closes\n const cleanup = () => {\n captureService.removeListener(\"frame\", onFrame);\n captureService.removeListener(\"config\", onConfig);\n };\n stream.on(\"end\", cleanup);\n stream.on(\"error\", cleanup);\n stream.on(\"close\", cleanup);\n}\n"],"mappings":"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","ignoreList":[]}