parasor 0.1.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 (633) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +208 -0
  3. package/THIRD-PARTY-NOTICES.md +138 -0
  4. package/bin/parasor.mjs +3 -0
  5. package/node_modules/@parasor/shared/dist/client.d.ts +8 -0
  6. package/node_modules/@parasor/shared/dist/client.d.ts.map +1 -0
  7. package/node_modules/@parasor/shared/dist/client.js +2 -0
  8. package/node_modules/@parasor/shared/dist/client.js.map +1 -0
  9. package/node_modules/@parasor/shared/dist/drops.d.ts +24 -0
  10. package/node_modules/@parasor/shared/dist/drops.d.ts.map +1 -0
  11. package/node_modules/@parasor/shared/dist/drops.js +2 -0
  12. package/node_modules/@parasor/shared/dist/drops.js.map +1 -0
  13. package/node_modules/@parasor/shared/dist/file-uploads.d.ts +56 -0
  14. package/node_modules/@parasor/shared/dist/file-uploads.d.ts.map +1 -0
  15. package/node_modules/@parasor/shared/dist/file-uploads.js +13 -0
  16. package/node_modules/@parasor/shared/dist/file-uploads.js.map +1 -0
  17. package/node_modules/@parasor/shared/dist/ide-commands.d.ts +8 -0
  18. package/node_modules/@parasor/shared/dist/ide-commands.d.ts.map +1 -0
  19. package/node_modules/@parasor/shared/dist/ide-commands.js +59 -0
  20. package/node_modules/@parasor/shared/dist/ide-commands.js.map +1 -0
  21. package/node_modules/@parasor/shared/dist/pane-commands.d.ts +7 -0
  22. package/node_modules/@parasor/shared/dist/pane-commands.d.ts.map +1 -0
  23. package/node_modules/@parasor/shared/dist/pane-commands.js +47 -0
  24. package/node_modules/@parasor/shared/dist/pane-commands.js.map +1 -0
  25. package/node_modules/@parasor/shared/dist/pane-model.d.ts +63 -0
  26. package/node_modules/@parasor/shared/dist/pane-model.d.ts.map +1 -0
  27. package/node_modules/@parasor/shared/dist/pane-model.js +89 -0
  28. package/node_modules/@parasor/shared/dist/pane-model.js.map +1 -0
  29. package/node_modules/@parasor/shared/dist/panes.d.ts +33 -0
  30. package/node_modules/@parasor/shared/dist/panes.d.ts.map +1 -0
  31. package/node_modules/@parasor/shared/dist/panes.js +2 -0
  32. package/node_modules/@parasor/shared/dist/panes.js.map +1 -0
  33. package/node_modules/@parasor/shared/dist/runtime.d.ts +180 -0
  34. package/node_modules/@parasor/shared/dist/runtime.d.ts.map +1 -0
  35. package/node_modules/@parasor/shared/dist/runtime.js +2 -0
  36. package/node_modules/@parasor/shared/dist/runtime.js.map +1 -0
  37. package/node_modules/@parasor/shared/dist/state.d.ts +192 -0
  38. package/node_modules/@parasor/shared/dist/state.d.ts.map +1 -0
  39. package/node_modules/@parasor/shared/dist/state.js +10 -0
  40. package/node_modules/@parasor/shared/dist/state.js.map +1 -0
  41. package/node_modules/@parasor/shared/dist/terminal.d.ts +191 -0
  42. package/node_modules/@parasor/shared/dist/terminal.d.ts.map +1 -0
  43. package/node_modules/@parasor/shared/dist/terminal.js +174 -0
  44. package/node_modules/@parasor/shared/dist/terminal.js.map +1 -0
  45. package/node_modules/@parasor/shared/dist/types.d.ts +13 -0
  46. package/node_modules/@parasor/shared/dist/types.d.ts.map +1 -0
  47. package/node_modules/@parasor/shared/dist/types.js +13 -0
  48. package/node_modules/@parasor/shared/dist/types.js.map +1 -0
  49. package/node_modules/@parasor/shared/dist/worktree-local-files.d.ts +14 -0
  50. package/node_modules/@parasor/shared/dist/worktree-local-files.d.ts.map +1 -0
  51. package/node_modules/@parasor/shared/dist/worktree-local-files.js +41 -0
  52. package/node_modules/@parasor/shared/dist/worktree-local-files.js.map +1 -0
  53. package/node_modules/@parasor/shared/dist/ws-events.d.ts +152 -0
  54. package/node_modules/@parasor/shared/dist/ws-events.d.ts.map +1 -0
  55. package/node_modules/@parasor/shared/dist/ws-events.js +2 -0
  56. package/node_modules/@parasor/shared/dist/ws-events.js.map +1 -0
  57. package/node_modules/@parasor/shared/package.json +13 -0
  58. package/package.json +61 -0
  59. package/server/agent-detector/agent-state-store.d.ts +23 -0
  60. package/server/agent-detector/agent-state-store.d.ts.map +1 -0
  61. package/server/agent-detector/agent-state-store.js +110 -0
  62. package/server/agent-detector/agent-state-store.js.map +1 -0
  63. package/server/agent-detector/detector.d.ts +80 -0
  64. package/server/agent-detector/detector.d.ts.map +1 -0
  65. package/server/agent-detector/detector.js +219 -0
  66. package/server/agent-detector/detector.js.map +1 -0
  67. package/server/agent-detector/event-map.d.ts +25 -0
  68. package/server/agent-detector/event-map.d.ts.map +1 -0
  69. package/server/agent-detector/event-map.js +136 -0
  70. package/server/agent-detector/event-map.js.map +1 -0
  71. package/server/agent-detector/manual-agent-tracker.d.ts +19 -0
  72. package/server/agent-detector/manual-agent-tracker.d.ts.map +1 -0
  73. package/server/agent-detector/manual-agent-tracker.js +123 -0
  74. package/server/agent-detector/manual-agent-tracker.js.map +1 -0
  75. package/server/agent-detector/output-eligibility.d.ts +3 -0
  76. package/server/agent-detector/output-eligibility.d.ts.map +1 -0
  77. package/server/agent-detector/output-eligibility.js +39 -0
  78. package/server/agent-detector/output-eligibility.js.map +1 -0
  79. package/server/application/files/errors.d.ts +28 -0
  80. package/server/application/files/errors.d.ts.map +1 -0
  81. package/server/application/files/errors.js +55 -0
  82. package/server/application/files/errors.js.map +1 -0
  83. package/server/application/files/local-filesystem.d.ts +36 -0
  84. package/server/application/files/local-filesystem.d.ts.map +1 -0
  85. package/server/application/files/local-filesystem.js +171 -0
  86. package/server/application/files/local-filesystem.js.map +1 -0
  87. package/server/application/files/project-file-queries.d.ts +16 -0
  88. package/server/application/files/project-file-queries.d.ts.map +1 -0
  89. package/server/application/files/project-file-queries.js +126 -0
  90. package/server/application/files/project-file-queries.js.map +1 -0
  91. package/server/application/integrations/errors.d.ts +16 -0
  92. package/server/application/integrations/errors.d.ts.map +1 -0
  93. package/server/application/integrations/errors.js +31 -0
  94. package/server/application/integrations/errors.js.map +1 -0
  95. package/server/application/integrations/hook-notify.d.ts +32 -0
  96. package/server/application/integrations/hook-notify.d.ts.map +1 -0
  97. package/server/application/integrations/hook-notify.js +118 -0
  98. package/server/application/integrations/hook-notify.js.map +1 -0
  99. package/server/application/integrations/open-url.d.ts +11 -0
  100. package/server/application/integrations/open-url.d.ts.map +1 -0
  101. package/server/application/integrations/open-url.js +23 -0
  102. package/server/application/integrations/open-url.js.map +1 -0
  103. package/server/application/ports.d.ts +11 -0
  104. package/server/application/ports.d.ts.map +1 -0
  105. package/server/application/ports.js +2 -0
  106. package/server/application/ports.js.map +1 -0
  107. package/server/application/workspace/errors.d.ts +21 -0
  108. package/server/application/workspace/errors.d.ts.map +1 -0
  109. package/server/application/workspace/errors.js +21 -0
  110. package/server/application/workspace/errors.js.map +1 -0
  111. package/server/application/workspace/pane-commands.d.ts +47 -0
  112. package/server/application/workspace/pane-commands.d.ts.map +1 -0
  113. package/server/application/workspace/pane-commands.js +193 -0
  114. package/server/application/workspace/pane-commands.js.map +1 -0
  115. package/server/application/workspace/project-commands.d.ts +34 -0
  116. package/server/application/workspace/project-commands.d.ts.map +1 -0
  117. package/server/application/workspace/project-commands.js +81 -0
  118. package/server/application/workspace/project-commands.js.map +1 -0
  119. package/server/application/workspace/project-queries.d.ts +21 -0
  120. package/server/application/workspace/project-queries.d.ts.map +1 -0
  121. package/server/application/workspace/project-queries.js +216 -0
  122. package/server/application/workspace/project-queries.js.map +1 -0
  123. package/server/application/workspace/session-commands.d.ts +24 -0
  124. package/server/application/workspace/session-commands.d.ts.map +1 -0
  125. package/server/application/workspace/session-commands.js +123 -0
  126. package/server/application/workspace/session-commands.js.map +1 -0
  127. package/server/application/workspace/session-queries.d.ts +14 -0
  128. package/server/application/workspace/session-queries.d.ts.map +1 -0
  129. package/server/application/workspace/session-queries.js +47 -0
  130. package/server/application/workspace/session-queries.js.map +1 -0
  131. package/server/application/workspace/worktree-commands.d.ts +98 -0
  132. package/server/application/workspace/worktree-commands.d.ts.map +1 -0
  133. package/server/application/workspace/worktree-commands.js +323 -0
  134. package/server/application/workspace/worktree-commands.js.map +1 -0
  135. package/server/application/workspace/worktree-local-files.d.ts +11 -0
  136. package/server/application/workspace/worktree-local-files.d.ts.map +1 -0
  137. package/server/application/workspace/worktree-local-files.js +223 -0
  138. package/server/application/workspace/worktree-local-files.js.map +1 -0
  139. package/server/application/workspace/worktree-reconcile.d.ts +21 -0
  140. package/server/application/workspace/worktree-reconcile.d.ts.map +1 -0
  141. package/server/application/workspace/worktree-reconcile.js +49 -0
  142. package/server/application/workspace/worktree-reconcile.js.map +1 -0
  143. package/server/auth/origin.d.ts +17 -0
  144. package/server/auth/origin.d.ts.map +1 -0
  145. package/server/auth/origin.js +93 -0
  146. package/server/auth/origin.js.map +1 -0
  147. package/server/auth/pairing-token.d.ts +28 -0
  148. package/server/auth/pairing-token.d.ts.map +1 -0
  149. package/server/auth/pairing-token.js +46 -0
  150. package/server/auth/pairing-token.js.map +1 -0
  151. package/server/auth/token-exchange.d.ts +11 -0
  152. package/server/auth/token-exchange.d.ts.map +1 -0
  153. package/server/auth/token-exchange.js +27 -0
  154. package/server/auth/token-exchange.js.map +1 -0
  155. package/server/auth/token.d.ts +18 -0
  156. package/server/auth/token.d.ts.map +1 -0
  157. package/server/auth/token.js +115 -0
  158. package/server/auth/token.js.map +1 -0
  159. package/server/bootstrap/create-app-server.d.ts +49 -0
  160. package/server/bootstrap/create-app-server.d.ts.map +1 -0
  161. package/server/bootstrap/create-app-server.js +154 -0
  162. package/server/bootstrap/create-app-server.js.map +1 -0
  163. package/server/bootstrap/project-runtime.d.ts +29 -0
  164. package/server/bootstrap/project-runtime.d.ts.map +1 -0
  165. package/server/bootstrap/project-runtime.js +253 -0
  166. package/server/bootstrap/project-runtime.js.map +1 -0
  167. package/server/bootstrap/pty-env.d.ts +3 -0
  168. package/server/bootstrap/pty-env.d.ts.map +1 -0
  169. package/server/bootstrap/pty-env.js +15 -0
  170. package/server/bootstrap/pty-env.js.map +1 -0
  171. package/server/bootstrap/reconcile-state.d.ts +16 -0
  172. package/server/bootstrap/reconcile-state.d.ts.map +1 -0
  173. package/server/bootstrap/reconcile-state.js +73 -0
  174. package/server/bootstrap/reconcile-state.js.map +1 -0
  175. package/server/bootstrap/runtime-loops.d.ts +51 -0
  176. package/server/bootstrap/runtime-loops.d.ts.map +1 -0
  177. package/server/bootstrap/runtime-loops.js +189 -0
  178. package/server/bootstrap/runtime-loops.js.map +1 -0
  179. package/server/bootstrap/runtime-port.d.ts +4 -0
  180. package/server/bootstrap/runtime-port.d.ts.map +1 -0
  181. package/server/bootstrap/runtime-port.js +52 -0
  182. package/server/bootstrap/runtime-port.js.map +1 -0
  183. package/server/bootstrap/safety-gate.d.ts +22 -0
  184. package/server/bootstrap/safety-gate.d.ts.map +1 -0
  185. package/server/bootstrap/safety-gate.js +43 -0
  186. package/server/bootstrap/safety-gate.js.map +1 -0
  187. package/server/bootstrap/shutdown-marker.d.ts +35 -0
  188. package/server/bootstrap/shutdown-marker.d.ts.map +1 -0
  189. package/server/bootstrap/shutdown-marker.js +100 -0
  190. package/server/bootstrap/shutdown-marker.js.map +1 -0
  191. package/server/bootstrap/shutdown-runtime.d.ts +62 -0
  192. package/server/bootstrap/shutdown-runtime.d.ts.map +1 -0
  193. package/server/bootstrap/shutdown-runtime.js +66 -0
  194. package/server/bootstrap/shutdown-runtime.js.map +1 -0
  195. package/server/bootstrap/startup-banner.d.ts +34 -0
  196. package/server/bootstrap/startup-banner.d.ts.map +1 -0
  197. package/server/bootstrap/startup-banner.js +114 -0
  198. package/server/bootstrap/startup-banner.js.map +1 -0
  199. package/server/bootstrap/wire-runtime.d.ts +42 -0
  200. package/server/bootstrap/wire-runtime.d.ts.map +1 -0
  201. package/server/bootstrap/wire-runtime.js +205 -0
  202. package/server/bootstrap/wire-runtime.js.map +1 -0
  203. package/server/cli/help.d.ts +3 -0
  204. package/server/cli/help.d.ts.map +1 -0
  205. package/server/cli/help.js +39 -0
  206. package/server/cli/help.js.map +1 -0
  207. package/server/cli/hook-client.d.ts +12 -0
  208. package/server/cli/hook-client.d.ts.map +1 -0
  209. package/server/cli/hook-client.js +81 -0
  210. package/server/cli/hook-client.js.map +1 -0
  211. package/server/cli/hook.d.ts +3 -0
  212. package/server/cli/hook.d.ts.map +1 -0
  213. package/server/cli/hook.js +152 -0
  214. package/server/cli/hook.js.map +1 -0
  215. package/server/cli/main.d.ts +2 -0
  216. package/server/cli/main.d.ts.map +1 -0
  217. package/server/cli/main.js +133 -0
  218. package/server/cli/main.js.map +1 -0
  219. package/server/cli/notify.d.ts +19 -0
  220. package/server/cli/notify.d.ts.map +1 -0
  221. package/server/cli/notify.js +77 -0
  222. package/server/cli/notify.js.map +1 -0
  223. package/server/cli/open.d.ts +2 -0
  224. package/server/cli/open.d.ts.map +1 -0
  225. package/server/cli/open.js +47 -0
  226. package/server/cli/open.js.map +1 -0
  227. package/server/cli/probe-daemon-version.d.ts +46 -0
  228. package/server/cli/probe-daemon-version.d.ts.map +1 -0
  229. package/server/cli/probe-daemon-version.js +167 -0
  230. package/server/cli/probe-daemon-version.js.map +1 -0
  231. package/server/cli/pty-host.d.ts +36 -0
  232. package/server/cli/pty-host.d.ts.map +1 -0
  233. package/server/cli/pty-host.js +390 -0
  234. package/server/cli/pty-host.js.map +1 -0
  235. package/server/cli/qr.d.ts +2 -0
  236. package/server/cli/qr.d.ts.map +1 -0
  237. package/server/cli/qr.js +70 -0
  238. package/server/cli/qr.js.map +1 -0
  239. package/server/cli/restart-confirm.d.ts +33 -0
  240. package/server/cli/restart-confirm.d.ts.map +1 -0
  241. package/server/cli/restart-confirm.js +107 -0
  242. package/server/cli/restart-confirm.js.map +1 -0
  243. package/server/cli/restart.d.ts +17 -0
  244. package/server/cli/restart.d.ts.map +1 -0
  245. package/server/cli/restart.js +145 -0
  246. package/server/cli/restart.js.map +1 -0
  247. package/server/cli/service-darwin.d.ts +70 -0
  248. package/server/cli/service-darwin.d.ts.map +1 -0
  249. package/server/cli/service-darwin.js +562 -0
  250. package/server/cli/service-darwin.js.map +1 -0
  251. package/server/cli/service-linux.d.ts +81 -0
  252. package/server/cli/service-linux.d.ts.map +1 -0
  253. package/server/cli/service-linux.js +412 -0
  254. package/server/cli/service-linux.js.map +1 -0
  255. package/server/cli/service.d.ts +33 -0
  256. package/server/cli/service.d.ts.map +1 -0
  257. package/server/cli/service.js +133 -0
  258. package/server/cli/service.js.map +1 -0
  259. package/server/cli/shim-installer.d.ts +35 -0
  260. package/server/cli/shim-installer.d.ts.map +1 -0
  261. package/server/cli/shim-installer.js +662 -0
  262. package/server/cli/shim-installer.js.map +1 -0
  263. package/server/cli/shim-open.d.ts +2 -0
  264. package/server/cli/shim-open.d.ts.map +1 -0
  265. package/server/cli/shim-open.js +128 -0
  266. package/server/cli/shim-open.js.map +1 -0
  267. package/server/cli/shutdown-deps.d.ts +41 -0
  268. package/server/cli/shutdown-deps.d.ts.map +1 -0
  269. package/server/cli/shutdown-deps.js +158 -0
  270. package/server/cli/shutdown-deps.js.map +1 -0
  271. package/server/cli/stop.d.ts +11 -0
  272. package/server/cli/stop.d.ts.map +1 -0
  273. package/server/cli/stop.js +123 -0
  274. package/server/cli/stop.js.map +1 -0
  275. package/server/cli/unknown-command.d.ts +8 -0
  276. package/server/cli/unknown-command.d.ts.map +1 -0
  277. package/server/cli/unknown-command.js +14 -0
  278. package/server/cli/unknown-command.js.map +1 -0
  279. package/server/debug/agent-status-recorder.d.ts +57 -0
  280. package/server/debug/agent-status-recorder.d.ts.map +1 -0
  281. package/server/debug/agent-status-recorder.js +209 -0
  282. package/server/debug/agent-status-recorder.js.map +1 -0
  283. package/server/debug/terminal-trace-recorder.d.ts +41 -0
  284. package/server/debug/terminal-trace-recorder.d.ts.map +1 -0
  285. package/server/debug/terminal-trace-recorder.js +112 -0
  286. package/server/debug/terminal-trace-recorder.js.map +1 -0
  287. package/server/fonts/catalog.d.ts +35 -0
  288. package/server/fonts/catalog.d.ts.map +1 -0
  289. package/server/fonts/catalog.js +76 -0
  290. package/server/fonts/catalog.js.map +1 -0
  291. package/server/fonts/installer.d.ts +45 -0
  292. package/server/fonts/installer.d.ts.map +1 -0
  293. package/server/fonts/installer.js +201 -0
  294. package/server/fonts/installer.js.map +1 -0
  295. package/server/fonts/routes.d.ts +4 -0
  296. package/server/fonts/routes.d.ts.map +1 -0
  297. package/server/fonts/routes.js +91 -0
  298. package/server/fonts/routes.js.map +1 -0
  299. package/server/fs/drops.d.ts +50 -0
  300. package/server/fs/drops.d.ts.map +1 -0
  301. package/server/fs/drops.js +137 -0
  302. package/server/fs/drops.js.map +1 -0
  303. package/server/fs/file-uploads.d.ts +57 -0
  304. package/server/fs/file-uploads.d.ts.map +1 -0
  305. package/server/fs/file-uploads.js +214 -0
  306. package/server/fs/file-uploads.js.map +1 -0
  307. package/server/fs/file-watcher.d.ts +22 -0
  308. package/server/fs/file-watcher.d.ts.map +1 -0
  309. package/server/fs/file-watcher.js +105 -0
  310. package/server/fs/file-watcher.js.map +1 -0
  311. package/server/fs/git-watcher.d.ts +76 -0
  312. package/server/fs/git-watcher.d.ts.map +1 -0
  313. package/server/fs/git-watcher.js +356 -0
  314. package/server/fs/git-watcher.js.map +1 -0
  315. package/server/fs/media.d.ts +35 -0
  316. package/server/fs/media.d.ts.map +1 -0
  317. package/server/fs/media.js +271 -0
  318. package/server/fs/media.js.map +1 -0
  319. package/server/fs/service.d.ts +97 -0
  320. package/server/fs/service.d.ts.map +1 -0
  321. package/server/fs/service.js +306 -0
  322. package/server/fs/service.js.map +1 -0
  323. package/server/fs/upload-staging.d.ts +76 -0
  324. package/server/fs/upload-staging.d.ts.map +1 -0
  325. package/server/fs/upload-staging.js +283 -0
  326. package/server/fs/upload-staging.js.map +1 -0
  327. package/server/fs/watcher-lifecycle.d.ts +24 -0
  328. package/server/fs/watcher-lifecycle.d.ts.map +1 -0
  329. package/server/fs/watcher-lifecycle.js +105 -0
  330. package/server/fs/watcher-lifecycle.js.map +1 -0
  331. package/server/index.d.ts +17 -0
  332. package/server/index.d.ts.map +1 -0
  333. package/server/index.js +510 -0
  334. package/server/index.js.map +1 -0
  335. package/server/ipc/socket-server.d.ts +28 -0
  336. package/server/ipc/socket-server.d.ts.map +1 -0
  337. package/server/ipc/socket-server.js +206 -0
  338. package/server/ipc/socket-server.js.map +1 -0
  339. package/server/lib/git-exec.d.ts +38 -0
  340. package/server/lib/git-exec.d.ts.map +1 -0
  341. package/server/lib/git-exec.js +96 -0
  342. package/server/lib/git-exec.js.map +1 -0
  343. package/server/lib/open-in-ide.d.ts +22 -0
  344. package/server/lib/open-in-ide.d.ts.map +1 -0
  345. package/server/lib/open-in-ide.js +90 -0
  346. package/server/lib/open-in-ide.js.map +1 -0
  347. package/server/lib/open-in-os.d.ts +20 -0
  348. package/server/lib/open-in-os.d.ts.map +1 -0
  349. package/server/lib/open-in-os.js +51 -0
  350. package/server/lib/open-in-os.js.map +1 -0
  351. package/server/lib/path.d.ts +2 -0
  352. package/server/lib/path.d.ts.map +1 -0
  353. package/server/lib/path.js +10 -0
  354. package/server/lib/path.js.map +1 -0
  355. package/server/lib/promise-mutex.d.ts +7 -0
  356. package/server/lib/promise-mutex.d.ts.map +1 -0
  357. package/server/lib/promise-mutex.js +26 -0
  358. package/server/lib/promise-mutex.js.map +1 -0
  359. package/server/lib/sd-notify.d.ts +8 -0
  360. package/server/lib/sd-notify.d.ts.map +1 -0
  361. package/server/lib/sd-notify.js +27 -0
  362. package/server/lib/sd-notify.js.map +1 -0
  363. package/server/net/local-machine.d.ts +7 -0
  364. package/server/net/local-machine.d.ts.map +1 -0
  365. package/server/net/local-machine.js +79 -0
  366. package/server/net/local-machine.js.map +1 -0
  367. package/server/net/reachable-host.d.ts +12 -0
  368. package/server/net/reachable-host.d.ts.map +1 -0
  369. package/server/net/reachable-host.js +25 -0
  370. package/server/net/reachable-host.js.map +1 -0
  371. package/server/network/endpoints.d.ts +14 -0
  372. package/server/network/endpoints.d.ts.map +1 -0
  373. package/server/network/endpoints.js +104 -0
  374. package/server/network/endpoints.js.map +1 -0
  375. package/server/network/qr.d.ts +16 -0
  376. package/server/network/qr.d.ts.map +1 -0
  377. package/server/network/qr.js +89 -0
  378. package/server/network/qr.js.map +1 -0
  379. package/server/port-forwarder/forwarder.d.ts +47 -0
  380. package/server/port-forwarder/forwarder.d.ts.map +1 -0
  381. package/server/port-forwarder/forwarder.js +159 -0
  382. package/server/port-forwarder/forwarder.js.map +1 -0
  383. package/server/port-scanner/scanner.d.ts +24 -0
  384. package/server/port-scanner/scanner.d.ts.map +1 -0
  385. package/server/port-scanner/scanner.js +193 -0
  386. package/server/port-scanner/scanner.js.map +1 -0
  387. package/server/pty/connection-lifecycle.d.ts +50 -0
  388. package/server/pty/connection-lifecycle.d.ts.map +1 -0
  389. package/server/pty/connection-lifecycle.js +113 -0
  390. package/server/pty/connection-lifecycle.js.map +1 -0
  391. package/server/pty/daemon-connect.d.ts +52 -0
  392. package/server/pty/daemon-connect.d.ts.map +1 -0
  393. package/server/pty/daemon-connect.js +62 -0
  394. package/server/pty/daemon-connect.js.map +1 -0
  395. package/server/pty/handshake-timeout-race.d.ts +22 -0
  396. package/server/pty/handshake-timeout-race.d.ts.map +1 -0
  397. package/server/pty/handshake-timeout-race.js +23 -0
  398. package/server/pty/handshake-timeout-race.js.map +1 -0
  399. package/server/pty/headless-replay-snapshot.d.ts +28 -0
  400. package/server/pty/headless-replay-snapshot.d.ts.map +1 -0
  401. package/server/pty/headless-replay-snapshot.js +285 -0
  402. package/server/pty/headless-replay-snapshot.js.map +1 -0
  403. package/server/pty/headless-terminal-state-cache.d.ts +31 -0
  404. package/server/pty/headless-terminal-state-cache.d.ts.map +1 -0
  405. package/server/pty/headless-terminal-state-cache.js +119 -0
  406. package/server/pty/headless-terminal-state-cache.js.map +1 -0
  407. package/server/pty/hello-ack-validator.d.ts +15 -0
  408. package/server/pty/hello-ack-validator.d.ts.map +1 -0
  409. package/server/pty/hello-ack-validator.js +30 -0
  410. package/server/pty/hello-ack-validator.js.map +1 -0
  411. package/server/pty/host-daemon/bootstrap.d.ts +100 -0
  412. package/server/pty/host-daemon/bootstrap.d.ts.map +1 -0
  413. package/server/pty/host-daemon/bootstrap.js +611 -0
  414. package/server/pty/host-daemon/bootstrap.js.map +1 -0
  415. package/server/pty/host-daemon/daemon.d.ts +111 -0
  416. package/server/pty/host-daemon/daemon.d.ts.map +1 -0
  417. package/server/pty/host-daemon/daemon.js +648 -0
  418. package/server/pty/host-daemon/daemon.js.map +1 -0
  419. package/server/pty/host-daemon/entry.d.ts +3 -0
  420. package/server/pty/host-daemon/entry.d.ts.map +1 -0
  421. package/server/pty/host-daemon/entry.js +72 -0
  422. package/server/pty/host-daemon/entry.js.map +1 -0
  423. package/server/pty/host-daemon/lockfile.d.ts +12 -0
  424. package/server/pty/host-daemon/lockfile.d.ts.map +1 -0
  425. package/server/pty/host-daemon/lockfile.js +120 -0
  426. package/server/pty/host-daemon/lockfile.js.map +1 -0
  427. package/server/pty/host-daemon/mode-marker.d.ts +77 -0
  428. package/server/pty/host-daemon/mode-marker.d.ts.map +1 -0
  429. package/server/pty/host-daemon/mode-marker.js +228 -0
  430. package/server/pty/host-daemon/mode-marker.js.map +1 -0
  431. package/server/pty/host-daemon/orphan-cleanup.d.ts +42 -0
  432. package/server/pty/host-daemon/orphan-cleanup.d.ts.map +1 -0
  433. package/server/pty/host-daemon/orphan-cleanup.js +84 -0
  434. package/server/pty/host-daemon/orphan-cleanup.js.map +1 -0
  435. package/server/pty/host-daemon/paths.d.ts +10 -0
  436. package/server/pty/host-daemon/paths.d.ts.map +1 -0
  437. package/server/pty/host-daemon/paths.js +56 -0
  438. package/server/pty/host-daemon/paths.js.map +1 -0
  439. package/server/pty/host-daemon/server-connection.d.ts +44 -0
  440. package/server/pty/host-daemon/server-connection.d.ts.map +1 -0
  441. package/server/pty/host-daemon/server-connection.js +100 -0
  442. package/server/pty/host-daemon/server-connection.js.map +1 -0
  443. package/server/pty/host-daemon/service-detection.d.ts +24 -0
  444. package/server/pty/host-daemon/service-detection.d.ts.map +1 -0
  445. package/server/pty/host-daemon/service-detection.js +16 -0
  446. package/server/pty/host-daemon/service-detection.js.map +1 -0
  447. package/server/pty/host-daemon/socket-ready.d.ts +22 -0
  448. package/server/pty/host-daemon/socket-ready.d.ts.map +1 -0
  449. package/server/pty/host-daemon/socket-ready.js +33 -0
  450. package/server/pty/host-daemon/socket-ready.js.map +1 -0
  451. package/server/pty/host-daemon/spawn-daemon.d.ts +45 -0
  452. package/server/pty/host-daemon/spawn-daemon.d.ts.map +1 -0
  453. package/server/pty/host-daemon/spawn-daemon.js +155 -0
  454. package/server/pty/host-daemon/spawn-daemon.js.map +1 -0
  455. package/server/pty/host-daemon/terminate-daemon.d.ts +16 -0
  456. package/server/pty/host-daemon/terminate-daemon.d.ts.map +1 -0
  457. package/server/pty/host-daemon/terminate-daemon.js +128 -0
  458. package/server/pty/host-daemon/terminate-daemon.js.map +1 -0
  459. package/server/pty/host-protocol/frames.d.ts +110 -0
  460. package/server/pty/host-protocol/frames.d.ts.map +1 -0
  461. package/server/pty/host-protocol/frames.js +255 -0
  462. package/server/pty/host-protocol/frames.js.map +1 -0
  463. package/server/pty/host-protocol/messages.d.ts +140 -0
  464. package/server/pty/host-protocol/messages.d.ts.map +1 -0
  465. package/server/pty/host-protocol/messages.js +117 -0
  466. package/server/pty/host-protocol/messages.js.map +1 -0
  467. package/server/pty/host.d.ts +273 -0
  468. package/server/pty/host.d.ts.map +1 -0
  469. package/server/pty/host.js +184 -0
  470. package/server/pty/host.js.map +1 -0
  471. package/server/pty/in-process-host.d.ts +224 -0
  472. package/server/pty/in-process-host.d.ts.map +1 -0
  473. package/server/pty/in-process-host.js +1183 -0
  474. package/server/pty/in-process-host.js.map +1 -0
  475. package/server/pty/osc7-lifecycle.d.ts +8 -0
  476. package/server/pty/osc7-lifecycle.d.ts.map +1 -0
  477. package/server/pty/osc7-lifecycle.js +22 -0
  478. package/server/pty/osc7-lifecycle.js.map +1 -0
  479. package/server/pty/osc7-parser.d.ts +23 -0
  480. package/server/pty/osc7-parser.d.ts.map +1 -0
  481. package/server/pty/osc7-parser.js +91 -0
  482. package/server/pty/osc7-parser.js.map +1 -0
  483. package/server/pty/remote-host.d.ts +188 -0
  484. package/server/pty/remote-host.d.ts.map +1 -0
  485. package/server/pty/remote-host.js +810 -0
  486. package/server/pty/remote-host.js.map +1 -0
  487. package/server/pty/request-correlator.d.ts +59 -0
  488. package/server/pty/request-correlator.d.ts.map +1 -0
  489. package/server/pty/request-correlator.js +75 -0
  490. package/server/pty/request-correlator.js.map +1 -0
  491. package/server/pty/scrollback-log.d.ts +130 -0
  492. package/server/pty/scrollback-log.d.ts.map +1 -0
  493. package/server/pty/scrollback-log.js +344 -0
  494. package/server/pty/scrollback-log.js.map +1 -0
  495. package/server/pty/scrollback-sanitize.d.ts +2 -0
  496. package/server/pty/scrollback-sanitize.d.ts.map +1 -0
  497. package/server/pty/scrollback-sanitize.js +54 -0
  498. package/server/pty/scrollback-sanitize.js.map +1 -0
  499. package/server/pty/session-mirror.d.ts +67 -0
  500. package/server/pty/session-mirror.d.ts.map +1 -0
  501. package/server/pty/session-mirror.js +112 -0
  502. package/server/pty/session-mirror.js.map +1 -0
  503. package/server/pty/session-policy.d.ts +85 -0
  504. package/server/pty/session-policy.d.ts.map +1 -0
  505. package/server/pty/session-policy.js +186 -0
  506. package/server/pty/session-policy.js.map +1 -0
  507. package/server/pty/version-mismatch-recovery.d.ts +71 -0
  508. package/server/pty/version-mismatch-recovery.d.ts.map +1 -0
  509. package/server/pty/version-mismatch-recovery.js +63 -0
  510. package/server/pty/version-mismatch-recovery.js.map +1 -0
  511. package/server/routes/debug-agent-status.d.ts +5 -0
  512. package/server/routes/debug-agent-status.d.ts.map +1 -0
  513. package/server/routes/debug-agent-status.js +22 -0
  514. package/server/routes/debug-agent-status.js.map +1 -0
  515. package/server/routes/debug-diagnostics.d.ts +8 -0
  516. package/server/routes/debug-diagnostics.d.ts.map +1 -0
  517. package/server/routes/debug-diagnostics.js +34 -0
  518. package/server/routes/debug-diagnostics.js.map +1 -0
  519. package/server/routes/debug-terminal-trace.d.ts +16 -0
  520. package/server/routes/debug-terminal-trace.d.ts.map +1 -0
  521. package/server/routes/debug-terminal-trace.js +545 -0
  522. package/server/routes/debug-terminal-trace.js.map +1 -0
  523. package/server/routes/drops.d.ts +13 -0
  524. package/server/routes/drops.d.ts.map +1 -0
  525. package/server/routes/drops.js +126 -0
  526. package/server/routes/drops.js.map +1 -0
  527. package/server/routes/file-uploads.d.ts +9 -0
  528. package/server/routes/file-uploads.d.ts.map +1 -0
  529. package/server/routes/file-uploads.js +119 -0
  530. package/server/routes/file-uploads.js.map +1 -0
  531. package/server/routes/files.d.ts +9 -0
  532. package/server/routes/files.d.ts.map +1 -0
  533. package/server/routes/files.js +441 -0
  534. package/server/routes/files.js.map +1 -0
  535. package/server/routes/filesystem.d.ts +6 -0
  536. package/server/routes/filesystem.d.ts.map +1 -0
  537. package/server/routes/filesystem.js +76 -0
  538. package/server/routes/filesystem.js.map +1 -0
  539. package/server/routes/git.d.ts +38 -0
  540. package/server/routes/git.d.ts.map +1 -0
  541. package/server/routes/git.js +585 -0
  542. package/server/routes/git.js.map +1 -0
  543. package/server/routes/healthz.d.ts +8 -0
  544. package/server/routes/healthz.d.ts.map +1 -0
  545. package/server/routes/healthz.js +24 -0
  546. package/server/routes/healthz.js.map +1 -0
  547. package/server/routes/hook.d.ts +14 -0
  548. package/server/routes/hook.d.ts.map +1 -0
  549. package/server/routes/hook.js +86 -0
  550. package/server/routes/hook.js.map +1 -0
  551. package/server/routes/ide-commands.d.ts +9 -0
  552. package/server/routes/ide-commands.d.ts.map +1 -0
  553. package/server/routes/ide-commands.js +23 -0
  554. package/server/routes/ide-commands.js.map +1 -0
  555. package/server/routes/lib/resolve-worktree.d.ts +30 -0
  556. package/server/routes/lib/resolve-worktree.d.ts.map +1 -0
  557. package/server/routes/lib/resolve-worktree.js +35 -0
  558. package/server/routes/lib/resolve-worktree.js.map +1 -0
  559. package/server/routes/open.d.ts +4 -0
  560. package/server/routes/open.d.ts.map +1 -0
  561. package/server/routes/open.js +21 -0
  562. package/server/routes/open.js.map +1 -0
  563. package/server/routes/pane-commands.d.ts +9 -0
  564. package/server/routes/pane-commands.d.ts.map +1 -0
  565. package/server/routes/pane-commands.js +23 -0
  566. package/server/routes/pane-commands.js.map +1 -0
  567. package/server/routes/projects.d.ts +15 -0
  568. package/server/routes/projects.d.ts.map +1 -0
  569. package/server/routes/projects.js +363 -0
  570. package/server/routes/projects.js.map +1 -0
  571. package/server/routes/server-notices.d.ts +4 -0
  572. package/server/routes/server-notices.d.ts.map +1 -0
  573. package/server/routes/server-notices.js +29 -0
  574. package/server/routes/server-notices.js.map +1 -0
  575. package/server/routes/service-config.d.ts +11 -0
  576. package/server/routes/service-config.d.ts.map +1 -0
  577. package/server/routes/service-config.js +64 -0
  578. package/server/routes/service-config.js.map +1 -0
  579. package/server/routes/sessions.d.ts +7 -0
  580. package/server/routes/sessions.d.ts.map +1 -0
  581. package/server/routes/sessions.js +218 -0
  582. package/server/routes/sessions.js.map +1 -0
  583. package/server/service/caffeinate.d.ts +33 -0
  584. package/server/service/caffeinate.d.ts.map +1 -0
  585. package/server/service/caffeinate.js +72 -0
  586. package/server/service/caffeinate.js.map +1 -0
  587. package/server/state/app-state.d.ts +167 -0
  588. package/server/state/app-state.d.ts.map +1 -0
  589. package/server/state/app-state.js +335 -0
  590. package/server/state/app-state.js.map +1 -0
  591. package/server/state/project-manager.d.ts +30 -0
  592. package/server/state/project-manager.d.ts.map +1 -0
  593. package/server/state/project-manager.js +128 -0
  594. package/server/state/project-manager.js.map +1 -0
  595. package/server/state/server-notices.d.ts +12 -0
  596. package/server/state/server-notices.d.ts.map +1 -0
  597. package/server/state/server-notices.js +32 -0
  598. package/server/state/server-notices.js.map +1 -0
  599. package/server/state/worktree-cache.d.ts +25 -0
  600. package/server/state/worktree-cache.d.ts.map +1 -0
  601. package/server/state/worktree-cache.js +53 -0
  602. package/server/state/worktree-cache.js.map +1 -0
  603. package/server/ws/events.d.ts +45 -0
  604. package/server/ws/events.d.ts.map +1 -0
  605. package/server/ws/events.js +134 -0
  606. package/server/ws/events.js.map +1 -0
  607. package/server/ws/keepalive.d.ts +27 -0
  608. package/server/ws/keepalive.d.ts.map +1 -0
  609. package/server/ws/keepalive.js +63 -0
  610. package/server/ws/keepalive.js.map +1 -0
  611. package/server/ws/terminal-attach.d.ts +13 -0
  612. package/server/ws/terminal-attach.d.ts.map +1 -0
  613. package/server/ws/terminal-attach.js +233 -0
  614. package/server/ws/terminal-attach.js.map +1 -0
  615. package/server/ws/terminal-flow.d.ts +17 -0
  616. package/server/ws/terminal-flow.d.ts.map +1 -0
  617. package/server/ws/terminal-flow.js +64 -0
  618. package/server/ws/terminal-flow.js.map +1 -0
  619. package/server/ws/terminal.d.ts +69 -0
  620. package/server/ws/terminal.d.ts.map +1 -0
  621. package/server/ws/terminal.js +311 -0
  622. package/server/ws/terminal.js.map +1 -0
  623. package/web/assets/EditorPane-CzzT3iYY.js +123 -0
  624. package/web/assets/SymbolsNerdFontMono-Regular-CwEZqMeU.woff2 +0 -0
  625. package/web/assets/TerminalPane-CjbYzePr.js +68 -0
  626. package/web/assets/TerminalPane-DkTCHfhq.css +1 -0
  627. package/web/assets/file-icons-JBi09j0r.js +6 -0
  628. package/web/assets/index-CTTkRpnn.css +2 -0
  629. package/web/assets/index-CmhewzMp.js +34 -0
  630. package/web/assets/session-resume-7f-tB-ZU.js +2 -0
  631. package/web/assets/terminal-trace-PuuFRybC.js +2803 -0
  632. package/web/assets/useVirtualKeyboard-DgJb9u9d.js +1 -0
  633. package/web/index.html +52 -0
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 akibe
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,208 @@
1
+ # parasor
2
+
3
+ > AI-first coding workspace for continuing your desktop development flow from
4
+ > anywhere.
5
+
6
+ parasor runs on your development machine and brings the same AI-driven coding
7
+ workflow to your desk, phone, or another trusted device. Use a browser to work
8
+ with your agents, terminals, Git state, files, and localhost dev servers
9
+ without changing the project environment on the host machine.
10
+
11
+ ## Highlights
12
+
13
+ - **Multi-agent parallel panes** - split the workspace into terminal, file
14
+ tree, editor, diff, and browser views while several agents run at once.
15
+ - **Desk-to-mobile workflow** - startup QR seeds the session cookie, mobile
16
+ controls cover common terminal keys, and clipboard/file upload works in the
17
+ on-page terminal.
18
+ - **Persistent PTYs** - the user-scope service installs a PTY host daemon so
19
+ scrollback and sessions survive server restarts.
20
+ - **Project-scoped file ops** - browse files, edit in CodeMirror, open diffs,
21
+ drag files into terminals, and paste images into an upload directory.
22
+ - **Agent-aware shims** - Claude Code and Codex wrappers add runtime integration
23
+ hooks without editing user agent configuration files.
24
+ - **Network port center** - detected localhost dev servers can be opened from
25
+ mobile through parasor-managed reachable URLs when needed.
26
+ - **Token auth + Origin allowlist** - high-entropy URL token and browser
27
+ Origin checks are enabled by default.
28
+ - **macOS / Linux primary** - user-scope install and service management, no
29
+ sudo required. WSL is expected to work for foreground use, with service mode
30
+ depending on systemd-enabled WSL. Native Windows is not currently supported.
31
+
32
+ ## Quick Start
33
+
34
+ Node.js 22+:
35
+
36
+ ```bash
37
+ pnpm dlx parasor
38
+ # or: npm exec -y parasor
39
+ ```
40
+
41
+ parasor listens on every IPv4 interface (`0.0.0.0`) at port `7681` by default,
42
+ matching common local-dev tools such as ttyd, gotty, Vite `--host`, and Next.js
43
+ dev. The startup banner prints reachable access URLs for loopback, LAN, and
44
+ Tailscale endpoints, followed by a QR code for phone access.
45
+
46
+ Token auth and WebSocket Origin checks are the primary defense. Use
47
+ `--host 127.0.0.1` or `HOST=127.0.0.1` for loopback-only access.
48
+
49
+ ```bash
50
+ parasor --help # user-facing subcommands
51
+ parasor --help-all # also list advanced/internal bridges
52
+ parasor qr # re-render QR + access URLs over the IPC socket
53
+ parasor qr --iface=en0 # prefer a specific network interface
54
+ ```
55
+
56
+ The auth token is persisted at `~/.config/parasor/token` (user-scope, plain
57
+ text) if you need to assemble the URL by hand.
58
+
59
+ ## Background Service
60
+
61
+ Keep parasor up after login. On macOS, the LaunchAgent also starts at user
62
+ login after reboot. On Linux, the systemd user unit starts with the user
63
+ session; start-before-login behavior depends on whether lingering is enabled
64
+ for that account.
65
+
66
+ ```bash
67
+ parasor service install # LaunchAgent on macOS, systemd user unit on Linux
68
+ parasor service status # installed / running / pid / uptime
69
+ parasor service restart # restart the service
70
+ parasor service logs -f # tail the service log
71
+ parasor service uninstall # stop + unregister
72
+ ```
73
+
74
+ The service is user-scope only and does not require sudo. The supervisor
75
+ restarts the server if it crashes, and the PTY host daemon keeps PTY sessions
76
+ available across server restarts. The server also exposes a loopback-only
77
+ `GET /healthz` probe for watchdogs.
78
+
79
+ ## Agent PATH Shims
80
+
81
+ On startup, parasor installs user-scope shims under `~/.config/parasor` (or
82
+ `$PARASOR_CONFIG_DIR` when set) and prepends them only to PTYs spawned by
83
+ parasor. There is no `postinstall` hook, no sudo path, and no write to global
84
+ shell startup files.
85
+
86
+ Files written by the shim installer:
87
+
88
+ | Path | Purpose |
89
+ |---|---|
90
+ | `~/.config/parasor/bin/claude` | Wrapper for Claude Code |
91
+ | `~/.config/parasor/bin/codex` | Wrapper for Codex |
92
+ | `~/.config/parasor/bin/open` | macOS `open` shim, only when a real `open` is found |
93
+ | `~/.config/parasor/bin/xdg-open` | Linux `xdg-open` shim, only when a real `xdg-open` is found |
94
+ | `~/.config/parasor/shell/zsh/.zshenv` and `.zshrc` | zsh overlay that sources normal zsh files, then reasserts the parasor shim path |
95
+ | `~/.config/parasor/shell/bash/.bashrc` | bash overlay that sources normal `.bashrc`, then reasserts the parasor shim path |
96
+
97
+ The Claude wrapper runs the real `claude` binary after injecting runtime hooks
98
+ for the current invocation. The hooks call back to the local parasor server so
99
+ the UI can show agent running, waiting, and completed states. When file drops
100
+ are available, the wrapper also adds the session upload directory through
101
+ Claude's CLI flags. It does not edit `~/.claude/settings.json`.
102
+
103
+ The Codex wrapper runs the real `codex` binary with a per-process notification
104
+ setting, records the Codex TUI session log, and mirrors task and approval
105
+ events back to parasor. It does not edit `~/.codex` config or change
106
+ `CODEX_HOME`.
107
+
108
+ The `open` and `xdg-open` shims route explicit terminal URL opens through
109
+ parasor's browser deep-link path when the command is run inside a parasor PTY.
110
+ Outside a live parasor session, the wrappers resolve and exec the real
111
+ binaries.
112
+
113
+ ## Remote Access
114
+
115
+ parasor itself does not ship a tunnel. The expected mobile flow is: parasor
116
+ runs on your dev machine, and the phone reaches it over a trusted network.
117
+
118
+ - **Same LAN.** Default bind already covers it. Scan the QR from a phone on the
119
+ same Wi-Fi.
120
+ - **Tailscale.** With Tailscale running on both ends, the Tailnet IP and
121
+ MagicDNS hostname are reachable on the default bind.
122
+ - **Cloudflare Tunnel + Access, or equivalent identity-aware proxy.** Use this
123
+ when you need a stable public URL with SSO or device posture enforced before
124
+ any request reaches parasor.
125
+ - **SSH port-forward.** Run `parasor --host 127.0.0.1` on the remote side and
126
+ connect with `ssh -L 7681:127.0.0.1:7681 user@host`.
127
+
128
+ Direct exposure on a public IP, such as binding `0.0.0.0` on a VPS without an
129
+ overlay or identity-aware proxy in front, is out of scope. See
130
+ [SECURITY.md](./SECURITY.md) for the threat model.
131
+
132
+ `PARASOR_AUTH=none` refuses to start on a non-loopback bind.
133
+ `PARASOR_ALLOWED_ORIGINS` adds extra browser origins for custom hostnames and
134
+ reverse proxies.
135
+
136
+ ## Opening Localhost Dev Servers From Mobile
137
+
138
+ When a terminal prints a loopback URL such as `http://localhost:5173`, opening
139
+ that URL on a phone would normally target the phone's own localhost. parasor
140
+ rewrites terminal and port-center open actions for detected loopback ports to a
141
+ reachable address on the parasor host, using a per-port TCP forwarder when the
142
+ dev server is bound to loopback only.
143
+
144
+ This is different from opening the app's port directly over Tailscale or LAN:
145
+ `http://<dev-machine-tailnet-name>:5173` only works if that app is listening on
146
+ a non-loopback interface. For Vite, that usually means `vite --host 0.0.0.0`
147
+ or `server.host = "0.0.0.0"`.
148
+
149
+ Security note: most dev servers do not have parasor's token auth. Use direct
150
+ `--host 0.0.0.0` dev-server exposure only on a trusted LAN or Tailnet. If you
151
+ only need to open the app from parasor, leaving the dev server loopback-bound
152
+ and using parasor's generated forwarder URL keeps exposure aligned with
153
+ parasor's own network surface.
154
+
155
+ ## Configuration
156
+
157
+ | Variable | Default | Purpose |
158
+ |---|---|---|
159
+ | `PORT` | `7681` | HTTP listen port |
160
+ | `HOST` | `0.0.0.0` | Bind address; set `127.0.0.1` for loopback-only |
161
+ | `PARASOR_AUTH` | `token` | `token` or `none`; `none` is allowed only on loopback binds |
162
+ | `PARASOR_CONFIG_DIR` | `~/.config/parasor` | Persistent state directory |
163
+ | `PARASOR_ALLOWED_ORIGINS` | empty | Extra browser origins for WebSocket allowlist |
164
+
165
+ ## Development
166
+
167
+ ```bash
168
+ pnpm install
169
+ pnpm dev # backend on :7682, Vite on :7683
170
+ pnpm test # all workspaces
171
+ pnpm typecheck # TypeScript checks across packages
172
+ pnpm lint # Biome + layer boundary checks
173
+ pnpm lint:fix # apply Biome fixes
174
+ pnpm build # TypeScript + Vite build
175
+ pnpm package # assemble publishable dist/
176
+ pnpm clean # remove build outputs
177
+ pnpm clean:dev # stop dev leftovers and clear dev lockfiles
178
+ ```
179
+
180
+ For local CLI install after source changes:
181
+
182
+ ```bash
183
+ pnpm install:local
184
+ pnpm uninstall:local
185
+ ```
186
+
187
+ Dev mode isolates itself from a running production parasor: backend port
188
+ defaults to `7682`, the Vite dev server defaults to `7683`, and
189
+ `PARASOR_CONFIG_DIR` defaults to `/tmp/parasor-dev`.
190
+
191
+ Requires Node.js 22+ and pnpm. macOS and Linux are primary. WSL is expected to
192
+ work for foreground use, but service mode requires systemd-enabled WSL. Native
193
+ Windows is not currently supported.
194
+
195
+ ## Status
196
+
197
+ Pre-1.0. Configuration shape and CLI surface may change before `1.0.0`.
198
+
199
+ ## License
200
+
201
+ MIT - see [LICENSE](./LICENSE).
202
+
203
+ ## Acknowledgements
204
+
205
+ Built with [Hono](https://hono.dev), [node-pty](https://github.com/microsoft/node-pty),
206
+ [xterm.js](https://xtermjs.org), [React](https://react.dev),
207
+ [Vite](https://vitejs.dev), [Tailwind CSS](https://tailwindcss.com), and
208
+ [CodeMirror](https://codemirror.net).
@@ -0,0 +1,138 @@
1
+ # Third-Party Notices
2
+
3
+ This product bundles the following third-party assets or copied code snippets.
4
+ Each is used under the terms of its respective license as described below.
5
+
6
+ ---
7
+
8
+ ## Symbols Nerd Font
9
+
10
+ - **File**: `packages/web/src/assets/fonts/SymbolsNerdFontMono-Regular.woff2`
11
+ - **Version**: Nerd Fonts v3.2.1 (`patched-fonts/NerdFontsSymbolsOnly`)
12
+ - **Source**: <https://github.com/ryanoasis/nerd-fonts>
13
+ - **License**: MIT License -- Copyright (c) 2014 Ryan L McIntyre
14
+ - **License file**: `packages/web/src/assets/fonts/LICENSE-SymbolsNerdFont.txt`
15
+
16
+ Symbols Nerd Font is a compilation of glyph sets from multiple upstream icon
17
+ font projects. The glyphs included are aggregated and redistributed by the
18
+ Nerd Fonts project under the MIT license. Notable upstream sources include:
19
+
20
+ | Source | Original license |
21
+ | --- | --- |
22
+ | [Powerline Symbols](https://github.com/powerline/powerline) | MIT |
23
+ | [Font Awesome](https://github.com/FortAwesome/Font-Awesome) | OFL-1.1 / MIT |
24
+ | [Devicons](https://github.com/vorillaz/devicons) | MIT |
25
+ | [Octicons](https://github.com/primer/octicons) | MIT |
26
+ | [Codicons](https://github.com/microsoft/vscode-codicons) | CC-BY-4.0 |
27
+ | [Font Logos](https://github.com/Lukas-W/font-logos) | MIT |
28
+ | [Material Design Icons](https://github.com/Templarian/MaterialDesign) | Apache-2.0 |
29
+ | [Weather Icons](https://github.com/erikflowers/weather-icons) | OFL-1.1 |
30
+ | [Pomicons](https://github.com/gabrielelana/pomicons) | MIT |
31
+ | [Seti-UI + Custom](https://github.com/jesseweed/seti-ui) | MIT |
32
+ | [IEC Power Symbols](https://unicodepowersymbol.com/) | OFL-1.1 |
33
+
34
+ All upstream licenses permit redistribution as part of a bundled application
35
+ when the applicable copyright notices and license terms are preserved. The
36
+ MIT license text that governs the `NerdFontsSymbolsOnly` package is included
37
+ in full alongside the font file.
38
+
39
+ ---
40
+
41
+ ## Vendored color themes
42
+
43
+ - **Files**:
44
+ - `packages/web/src/vendor/themes/tokyo-night.json`
45
+ - `packages/web/src/vendor/themes/solarized-light.json`
46
+ - `packages/web/src/vendor/themes/monokai.json`
47
+ - **Sources**:
48
+ - Tokyo Night: <https://github.com/tokyo-night/tokyo-night-vscode-theme>
49
+ - Microsoft VS Code built-in themes: <https://github.com/microsoft/vscode>
50
+ - **License**: MIT
51
+ - **License file**: `packages/web/src/vendor/themes/LICENSE`
52
+
53
+ The vendored theme JSON files are distributed under the MIT License. The
54
+ aggregated upstream notices are kept in
55
+ `packages/web/src/vendor/themes/LICENSE`.
56
+
57
+ ---
58
+
59
+ ## Symbols (FileTree icons)
60
+
61
+ - **Package**: `@react-symbols/icons`
62
+ - **Source**: <https://github.com/pheralb/react-symbols>
63
+ - **License**: MIT -- Copyright (c) pheralb
64
+ - **Origin**: React port of the [Symbols VSCode icon theme](https://marketplace.visualstudio.com/items?itemName=miguelsolorio.symbols) by Miguel Solorio (MIT). Used for file-type and folder icons in the FileTree pane.
65
+
66
+ The package ships individually-importable React SVG components, so parasor
67
+ only bundles the subset of icons it actually references in
68
+ `packages/web/src/lib/file-icons.tsx`.
69
+
70
+ ---
71
+
72
+ ## Lucide icons
73
+
74
+ - **Source**: <https://github.com/lucide-icons/lucide>
75
+ - **License**: ISC -- Copyright (c) 2026 Lucide Icons and Contributors
76
+ - **Origin files**:
77
+ - `packages/web/src/components/primitives/PaGlyph.tsx`
78
+ - `packages/web/src/components/mobile/MobileKeyBar.tsx`
79
+
80
+ The icon paths in the listed files are adapted from individual Lucide SVG
81
+ files. Lucide is a community-maintained fork of Feather Icons; some glyphs
82
+ trace back to Feather (MIT, Copyright (c) 2013-present Cole Bemis). Both
83
+ upstream licenses permit redistribution with the copyright notices preserved.
84
+
85
+ ```
86
+ ISC License
87
+
88
+ Copyright (c) 2026 Lucide Icons and Contributors
89
+
90
+ Permission to use, copy, modify, and/or distribute this software for any
91
+ purpose with or without fee is hereby granted, provided that the above
92
+ copyright notice and this permission notice appear in all copies.
93
+
94
+ THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
95
+ WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
96
+ MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
97
+ ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
98
+ WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
99
+ ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
100
+ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
101
+ ```
102
+
103
+ Glyphs in `PaGlyph.tsx` derived from icons originally introduced by Feather
104
+ also fall under the Feather MIT terms:
105
+
106
+ ```
107
+ The MIT License (MIT)
108
+
109
+ Copyright (c) 2013-present Cole Bemis
110
+
111
+ Permission is hereby granted, free of charge, to any person obtaining a
112
+ copy of this software and associated documentation files (the "Software"),
113
+ to deal in the Software without restriction, including without limitation
114
+ the rights to use, copy, modify, merge, publish, distribute, sublicense,
115
+ and/or sell copies of the Software, and to permit persons to whom the
116
+ Software is furnished to do so, subject to the following conditions:
117
+
118
+ The above copyright notice and this permission notice shall be included
119
+ in all copies or substantial portions of the Software.
120
+
121
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
122
+ OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
123
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
124
+ THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
125
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
126
+ FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
127
+ DEALINGS IN THE SOFTWARE.
128
+ ```
129
+
130
+ ---
131
+
132
+ ## Runtime-downloaded font presets
133
+
134
+ The settings UI can download optional monospace font presets from upstream
135
+ GitHub Releases at user request. Those preset font files are not bundled in
136
+ the parasor source tree or npm package; parasor only stores a whitelist of
137
+ approved release asset URLs and extracts one Regular TTF into the user's local
138
+ font cache after the user starts the download.
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ import { runCli } from "../server/cli/main.js";
3
+ await runCli(process.argv.slice(2));
@@ -0,0 +1,8 @@
1
+ export interface ClientPreferences {
2
+ clientId: string;
3
+ focusedProjectId: string | null;
4
+ focusedPaneId: string | null;
5
+ mobileFocusedPaneId: string | null;
6
+ sidebarOpen: boolean;
7
+ }
8
+ //# sourceMappingURL=client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,iBAAiB;IAChC,QAAQ,EAAE,MAAM,CAAC;IACjB,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,mBAAmB,EAAE,MAAM,GAAG,IAAI,CAAC;IACnC,WAAW,EAAE,OAAO,CAAC;CACtB"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":""}
@@ -0,0 +1,24 @@
1
+ /**
2
+ * Success payload returned by `POST /api/projects/:id/drops?sessionId=...`.
3
+ * Absolute paths are server-resolved under the per-session staging dir
4
+ * (`<PARASOR_UPLOAD_DIR>/<sessionId>-<ms>/`), which lives outside the
5
+ * project tree (upload staging isolation). The 3-layer GC owns lifetime: L1 on PTY
6
+ * exit, L2 at server boot, L3 every 60 minutes.
7
+ */
8
+ export interface DropResponse {
9
+ paths: string[];
10
+ }
11
+ export type DropRejectReason = "path-traversal" | "control-char" | "too-long" | "empty" | "reserved";
12
+ export interface DropErrorTooLarge {
13
+ error: "too-large";
14
+ limit: number;
15
+ }
16
+ export interface DropErrorInvalidFilename {
17
+ error: "invalid-filename";
18
+ reason: DropRejectReason;
19
+ }
20
+ export interface DropErrorIo {
21
+ error: "io-error";
22
+ }
23
+ export type DropErrorResponse = DropErrorTooLarge | DropErrorInvalidFilename | DropErrorIo;
24
+ //# sourceMappingURL=drops.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"drops.d.ts","sourceRoot":"","sources":["../src/drops.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,MAAM,EAAE,CAAC;CACjB;AAED,MAAM,MAAM,gBAAgB,GACxB,gBAAgB,GAChB,cAAc,GACd,UAAU,GACV,OAAO,GACP,UAAU,CAAC;AAEf,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,WAAW,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,wBAAwB;IACvC,KAAK,EAAE,kBAAkB,CAAC;IAC1B,MAAM,EAAE,gBAAgB,CAAC;CAC1B;AAED,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,UAAU,CAAC;CACnB;AAED,MAAM,MAAM,iBAAiB,GACzB,iBAAiB,GACjB,wBAAwB,GACxB,WAAW,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=drops.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"drops.js","sourceRoot":"","sources":["../src/drops.ts"],"names":[],"mappings":""}
@@ -0,0 +1,56 @@
1
+ /**
2
+ * File-tree upload protocol (file-tree upload).
3
+ *
4
+ * Distinct from `/drops` (terminal pane) which lands files under
5
+ * `.parasor/drops/<timestamp>_<name>` for shell paste. This endpoint
6
+ * writes directly into the user's project tree at a target subdirectory.
7
+ *
8
+ * Conflict semantics are decided per request via `disposition`. The
9
+ * client surfaces a "Replace / Keep both / Skip" modal once per batch
10
+ * and applies the chosen mode to every file in the request.
11
+ */
12
+ export type FileUploadDisposition = "replace" | "keep-both" | "skip";
13
+ export interface FileUploadResultEntry {
14
+ /** Filename as supplied by the client. */
15
+ originalName: string;
16
+ /** What ended up happening on disk. */
17
+ status: "written" | "renamed" | "skipped";
18
+ /** Final basename written (only when `status !== "skipped"`). */
19
+ finalName?: string;
20
+ /** Server-resolved absolute path (only when `status !== "skipped"`). */
21
+ finalPath?: string;
22
+ }
23
+ export interface FileUploadResponse {
24
+ files: FileUploadResultEntry[];
25
+ }
26
+ export type FileUploadRejectReason = "path-traversal" | "control-char" | "too-long" | "empty" | "reserved";
27
+ export interface FileUploadErrorTooLarge {
28
+ error: "too-large";
29
+ limit: number;
30
+ }
31
+ export interface FileUploadErrorInvalidFilename {
32
+ error: "invalid-filename";
33
+ reason: FileUploadRejectReason;
34
+ }
35
+ export interface FileUploadErrorInvalidTarget {
36
+ error: "invalid-target";
37
+ /**
38
+ * `path-traversal` -- `targetDir` resolves outside the project root.
39
+ * `not-a-dir` -- `targetDir` exists but is a file (or symlink to one).
40
+ * `missing` -- `targetDir` does not exist on disk.
41
+ */
42
+ reason: "path-traversal" | "not-a-dir" | "missing";
43
+ }
44
+ export interface FileUploadErrorReadOnly {
45
+ error: "read-only";
46
+ }
47
+ export interface FileUploadErrorIo {
48
+ error: "io-error";
49
+ }
50
+ export interface FileUploadErrorConflict {
51
+ error: "conflict";
52
+ /** Existing filenames that prevented the write under `disposition: "skip"`. */
53
+ conflicts: string[];
54
+ }
55
+ export type FileUploadErrorResponse = FileUploadErrorTooLarge | FileUploadErrorInvalidFilename | FileUploadErrorInvalidTarget | FileUploadErrorReadOnly | FileUploadErrorIo | FileUploadErrorConflict;
56
+ //# sourceMappingURL=file-uploads.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"file-uploads.d.ts","sourceRoot":"","sources":["../src/file-uploads.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,MAAM,MAAM,qBAAqB,GAAG,SAAS,GAAG,WAAW,GAAG,MAAM,CAAC;AAErE,MAAM,WAAW,qBAAqB;IACpC,0CAA0C;IAC1C,YAAY,EAAE,MAAM,CAAC;IACrB,uCAAuC;IACvC,MAAM,EAAE,SAAS,GAAG,SAAS,GAAG,SAAS,CAAC;IAC1C,iEAAiE;IACjE,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,wEAAwE;IACxE,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,kBAAkB;IACjC,KAAK,EAAE,qBAAqB,EAAE,CAAC;CAChC;AAED,MAAM,MAAM,sBAAsB,GAC9B,gBAAgB,GAChB,cAAc,GACd,UAAU,GACV,OAAO,GACP,UAAU,CAAC;AAEf,MAAM,WAAW,uBAAuB;IACtC,KAAK,EAAE,WAAW,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,8BAA8B;IAC7C,KAAK,EAAE,kBAAkB,CAAC;IAC1B,MAAM,EAAE,sBAAsB,CAAC;CAChC;AAED,MAAM,WAAW,4BAA4B;IAC3C,KAAK,EAAE,gBAAgB,CAAC;IACxB;;;;OAIG;IACH,MAAM,EAAE,gBAAgB,GAAG,WAAW,GAAG,SAAS,CAAC;CACpD;AAED,MAAM,WAAW,uBAAuB;IACtC,KAAK,EAAE,WAAW,CAAC;CACpB;AAED,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,UAAU,CAAC;CACnB;AAED,MAAM,WAAW,uBAAuB;IACtC,KAAK,EAAE,UAAU,CAAC;IAClB,+EAA+E;IAC/E,SAAS,EAAE,MAAM,EAAE,CAAC;CACrB;AAED,MAAM,MAAM,uBAAuB,GAC/B,uBAAuB,GACvB,8BAA8B,GAC9B,4BAA4B,GAC5B,uBAAuB,GACvB,iBAAiB,GACjB,uBAAuB,CAAC"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * File-tree upload protocol (file-tree upload).
3
+ *
4
+ * Distinct from `/drops` (terminal pane) which lands files under
5
+ * `.parasor/drops/<timestamp>_<name>` for shell paste. This endpoint
6
+ * writes directly into the user's project tree at a target subdirectory.
7
+ *
8
+ * Conflict semantics are decided per request via `disposition`. The
9
+ * client surfaces a "Replace / Keep both / Skip" modal once per batch
10
+ * and applies the chosen mode to every file in the request.
11
+ */
12
+ export {};
13
+ //# sourceMappingURL=file-uploads.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"file-uploads.js","sourceRoot":"","sources":["../src/file-uploads.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG"}
@@ -0,0 +1,8 @@
1
+ export interface IdeCommandConfig {
2
+ id: string;
3
+ label: string;
4
+ command: string;
5
+ args: string[];
6
+ }
7
+ export declare function normalizeIdeCommands(value: unknown): IdeCommandConfig[];
8
+ //# sourceMappingURL=ide-commands.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ide-commands.d.ts","sourceRoot":"","sources":["../src/ide-commands.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,gBAAgB;IAC/B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,EAAE,CAAC;CAChB;AAUD,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,OAAO,GAAG,gBAAgB,EAAE,CAiDvE"}
@@ -0,0 +1,59 @@
1
+ const MAX_COMMANDS = 50;
2
+ const MAX_ID_LENGTH = 128;
3
+ const MAX_LABEL_LENGTH = 200;
4
+ const MAX_COMMAND_LENGTH = 1000;
5
+ const MAX_ARGS = 50;
6
+ const MAX_ARG_LENGTH = 1000;
7
+ const RESERVED_IDS = new Set(["cursor", "vscode"]);
8
+ export function normalizeIdeCommands(value) {
9
+ if (!Array.isArray(value))
10
+ return [];
11
+ const out = [];
12
+ const seen = new Set();
13
+ for (const item of value) {
14
+ if (!isPlainObject(item))
15
+ continue;
16
+ const id = item.id;
17
+ const label = item.label;
18
+ const command = item.command;
19
+ const args = item.args;
20
+ if (typeof id !== "string" ||
21
+ typeof label !== "string" ||
22
+ typeof command !== "string" ||
23
+ !Array.isArray(args) ||
24
+ id.length > MAX_ID_LENGTH) {
25
+ continue;
26
+ }
27
+ const normalizedId = id.trim();
28
+ const normalizedLabel = label.trim();
29
+ const normalizedCommand = command.trim();
30
+ const normalizedArgs = args
31
+ .filter((arg) => typeof arg === "string")
32
+ .map((arg) => arg.trim())
33
+ .filter((arg) => arg.length > 0 && arg.length <= MAX_ARG_LENGTH)
34
+ .slice(0, MAX_ARGS);
35
+ if (!normalizedId ||
36
+ RESERVED_IDS.has(normalizedId) ||
37
+ seen.has(normalizedId) ||
38
+ !normalizedLabel ||
39
+ normalizedLabel.length > MAX_LABEL_LENGTH ||
40
+ !normalizedCommand ||
41
+ normalizedCommand.length > MAX_COMMAND_LENGTH) {
42
+ continue;
43
+ }
44
+ seen.add(normalizedId);
45
+ out.push({
46
+ id: normalizedId,
47
+ label: normalizedLabel,
48
+ command: normalizedCommand,
49
+ args: normalizedArgs,
50
+ });
51
+ if (out.length >= MAX_COMMANDS)
52
+ break;
53
+ }
54
+ return out;
55
+ }
56
+ function isPlainObject(value) {
57
+ return typeof value === "object" && value !== null && !Array.isArray(value);
58
+ }
59
+ //# sourceMappingURL=ide-commands.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ide-commands.js","sourceRoot":"","sources":["../src/ide-commands.ts"],"names":[],"mappings":"AAOA,MAAM,YAAY,GAAG,EAAE,CAAC;AACxB,MAAM,aAAa,GAAG,GAAG,CAAC;AAC1B,MAAM,gBAAgB,GAAG,GAAG,CAAC;AAC7B,MAAM,kBAAkB,GAAG,IAAI,CAAC;AAChC,MAAM,QAAQ,GAAG,EAAE,CAAC;AACpB,MAAM,cAAc,GAAG,IAAI,CAAC;AAC5B,MAAM,YAAY,GAAG,IAAI,GAAG,CAAC,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC;AAEnD,MAAM,UAAU,oBAAoB,CAAC,KAAc;IACjD,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IAErC,MAAM,GAAG,GAAuB,EAAE,CAAC;IACnC,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAC/B,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC;YAAE,SAAS;QACnC,MAAM,EAAE,GAAG,IAAI,CAAC,EAAE,CAAC;QACnB,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;QACzB,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;QAC7B,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;QACvB,IACE,OAAO,EAAE,KAAK,QAAQ;YACtB,OAAO,KAAK,KAAK,QAAQ;YACzB,OAAO,OAAO,KAAK,QAAQ;YAC3B,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC;YACpB,EAAE,CAAC,MAAM,GAAG,aAAa,EACzB,CAAC;YACD,SAAS;QACX,CAAC;QACD,MAAM,YAAY,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC;QAC/B,MAAM,eAAe,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;QACrC,MAAM,iBAAiB,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC;QACzC,MAAM,cAAc,GAAG,IAAI;aACxB,MAAM,CAAC,CAAC,GAAG,EAAiB,EAAE,CAAC,OAAO,GAAG,KAAK,QAAQ,CAAC;aACvD,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;aACxB,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,IAAI,GAAG,CAAC,MAAM,IAAI,cAAc,CAAC;aAC/D,KAAK,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC;QACtB,IACE,CAAC,YAAY;YACb,YAAY,CAAC,GAAG,CAAC,YAAY,CAAC;YAC9B,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC;YACtB,CAAC,eAAe;YAChB,eAAe,CAAC,MAAM,GAAG,gBAAgB;YACzC,CAAC,iBAAiB;YAClB,iBAAiB,CAAC,MAAM,GAAG,kBAAkB,EAC7C,CAAC;YACD,SAAS;QACX,CAAC;QACD,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;QACvB,GAAG,CAAC,IAAI,CAAC;YACP,EAAE,EAAE,YAAY;YAChB,KAAK,EAAE,eAAe;YACtB,OAAO,EAAE,iBAAiB;YAC1B,IAAI,EAAE,cAAc;SACrB,CAAC,CAAC;QACH,IAAI,GAAG,CAAC,MAAM,IAAI,YAAY;YAAE,MAAM;IACxC,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,SAAS,aAAa,CAAC,KAAc;IACnC,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAC9E,CAAC"}
@@ -0,0 +1,7 @@
1
+ export interface PaneCommandConfig {
2
+ id: string;
3
+ label: string;
4
+ initialInput: string;
5
+ }
6
+ export declare function normalizePaneCommands(value: unknown): PaneCommandConfig[];
7
+ //# sourceMappingURL=pane-commands.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pane-commands.d.ts","sourceRoot":"","sources":["../src/pane-commands.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,iBAAiB;IAChC,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,EAAE,MAAM,CAAC;CACtB;AAOD,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,OAAO,GAAG,iBAAiB,EAAE,CAwCzE"}
@@ -0,0 +1,47 @@
1
+ const MAX_COMMANDS = 100;
2
+ const MAX_ID_LENGTH = 128;
3
+ const MAX_LABEL_LENGTH = 200;
4
+ const MAX_INITIAL_INPUT_LENGTH = 4000;
5
+ export function normalizePaneCommands(value) {
6
+ if (!Array.isArray(value))
7
+ return [];
8
+ const out = [];
9
+ const seen = new Set();
10
+ for (const item of value) {
11
+ if (!isPlainObject(item))
12
+ continue;
13
+ const id = item.id;
14
+ const label = item.label;
15
+ const initialInput = item.initialInput;
16
+ if (typeof id !== "string" ||
17
+ typeof label !== "string" ||
18
+ typeof initialInput !== "string" ||
19
+ id.length > MAX_ID_LENGTH ||
20
+ initialInput.length > MAX_INITIAL_INPUT_LENGTH) {
21
+ continue;
22
+ }
23
+ const normalizedLabel = label.trim();
24
+ const normalizedInput = initialInput.trim();
25
+ if (!id ||
26
+ id.startsWith("builtin:") ||
27
+ seen.has(id) ||
28
+ !normalizedLabel ||
29
+ normalizedLabel.length > MAX_LABEL_LENGTH ||
30
+ !normalizedInput) {
31
+ continue;
32
+ }
33
+ seen.add(id);
34
+ out.push({
35
+ id,
36
+ label: normalizedLabel,
37
+ initialInput: normalizedInput,
38
+ });
39
+ if (out.length >= MAX_COMMANDS)
40
+ break;
41
+ }
42
+ return out;
43
+ }
44
+ function isPlainObject(value) {
45
+ return typeof value === "object" && value !== null && !Array.isArray(value);
46
+ }
47
+ //# sourceMappingURL=pane-commands.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pane-commands.js","sourceRoot":"","sources":["../src/pane-commands.ts"],"names":[],"mappings":"AAMA,MAAM,YAAY,GAAG,GAAG,CAAC;AACzB,MAAM,aAAa,GAAG,GAAG,CAAC;AAC1B,MAAM,gBAAgB,GAAG,GAAG,CAAC;AAC7B,MAAM,wBAAwB,GAAG,IAAI,CAAC;AAEtC,MAAM,UAAU,qBAAqB,CAAC,KAAc;IAClD,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IAErC,MAAM,GAAG,GAAwB,EAAE,CAAC;IACpC,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAC/B,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC;YAAE,SAAS;QACnC,MAAM,EAAE,GAAG,IAAI,CAAC,EAAE,CAAC;QACnB,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;QACzB,MAAM,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC;QACvC,IACE,OAAO,EAAE,KAAK,QAAQ;YACtB,OAAO,KAAK,KAAK,QAAQ;YACzB,OAAO,YAAY,KAAK,QAAQ;YAChC,EAAE,CAAC,MAAM,GAAG,aAAa;YACzB,YAAY,CAAC,MAAM,GAAG,wBAAwB,EAC9C,CAAC;YACD,SAAS;QACX,CAAC;QACD,MAAM,eAAe,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;QACrC,MAAM,eAAe,GAAG,YAAY,CAAC,IAAI,EAAE,CAAC;QAC5C,IACE,CAAC,EAAE;YACH,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC;YACzB,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;YACZ,CAAC,eAAe;YAChB,eAAe,CAAC,MAAM,GAAG,gBAAgB;YACzC,CAAC,eAAe,EAChB,CAAC;YACD,SAAS;QACX,CAAC;QACD,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACb,GAAG,CAAC,IAAI,CAAC;YACP,EAAE;YACF,KAAK,EAAE,eAAe;YACtB,YAAY,EAAE,eAAe;SAC9B,CAAC,CAAC;QACH,IAAI,GAAG,CAAC,MAAM,IAAI,YAAY;YAAE,MAAM;IACxC,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,SAAS,aAAa,CAAC,KAAc;IACnC,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAC9E,CAAC"}