@puddle-code/cli 0.1.12 → 0.2.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 (159) hide show
  1. package/CHANGELOG.md +27 -4
  2. package/README.md +8 -1
  3. package/dist/host-control.mjs +16268 -0
  4. package/dist/index.js +3189 -1433
  5. package/dist/install.sh +8 -0
  6. package/dist/public/assets/App-4wHC7AhU.js +2 -0
  7. package/dist/public/assets/Dashboard-BTqiSGSr.js +1 -0
  8. package/dist/public/assets/EditorTabClose-Dxz8ZjM9.js +1 -0
  9. package/dist/public/assets/LazyTerminal-CvkHRHQo.js +2 -0
  10. package/dist/public/assets/{ModelRefcount-C8AaAjdS.js → ModelRefcount-C0ZeHnBJ.js} +1 -1
  11. package/dist/public/assets/NewProjectDialog-CHQ7EJYr.js +1 -0
  12. package/dist/public/assets/{PaneEditorBody-H5C70EA-.js → PaneEditorBody-Bco44A9M.js} +8 -8
  13. package/dist/public/assets/PdfViewer-Xg7NGubF.js +2 -0
  14. package/dist/public/assets/SettingsDialog-BbqSqnMS.js +8 -0
  15. package/dist/public/assets/Terminal-DEVWotwh.js +60 -0
  16. package/dist/public/assets/Workspace-9Ke8tXhO.css +1 -0
  17. package/dist/public/assets/Workspace-D0vmiCsp.js +20 -0
  18. package/dist/public/assets/{abnfDiagram-VCTEODGH-DrU7IXaw.js → abnfDiagram-VCTEODGH-B9xm0g0V.js} +1 -1
  19. package/dist/public/assets/architecture-7GRP2DOG-B8geJhni.js +1 -0
  20. package/dist/public/assets/{architectureDiagram-5GKGNRK7-t9ELRICA.js → architectureDiagram-5GKGNRK7-DrrWczea.js} +1 -1
  21. package/dist/public/assets/{blockDiagram-I7D4REHJ-YdSPz_k5.js → blockDiagram-I7D4REHJ-CYEP6Dnn.js} +1 -1
  22. package/dist/public/assets/{buffer-store-7XJyeYTl.js → buffer-store-pvgusTv-.js} +3 -3
  23. package/dist/public/assets/{c4Diagram-7LVT6UL2-CUOQ2rbu.js → c4Diagram-7LVT6UL2-BAkFUfYR.js} +1 -1
  24. package/dist/public/assets/channel-B2boMkNJ.js +1 -0
  25. package/dist/public/assets/{chevron-down-DPOlcAF_.js → chevron-down--sjpQEHH.js} +1 -1
  26. package/dist/public/assets/chunk-2E4U76K2-sXcn0WDZ.js +2 -0
  27. package/dist/public/assets/{chunk-4HAMMTFA-BZ51_p7P.js → chunk-4HAMMTFA-CPPsfbHS.js} +1 -1
  28. package/dist/public/assets/{chunk-75Z2AOVW-kxCDxh6q.js → chunk-75Z2AOVW-Cp3T9-mM.js} +1 -1
  29. package/dist/public/assets/{chunk-CLGD4ZFX-pSu1f4n0.js → chunk-CLGD4ZFX-aqUnXBfy.js} +1 -1
  30. package/dist/public/assets/chunk-DU6HZSFF-BKPHVNGu.js +125 -0
  31. package/dist/public/assets/{chunk-F27PBJKO-Cmu9YLxN.js → chunk-F27PBJKO-IqOkPRK3.js} +1 -1
  32. package/dist/public/assets/{chunk-GMAD6QVW-CYrdWVZ3.js → chunk-GMAD6QVW-c9P8ntLy.js} +1 -1
  33. package/dist/public/assets/{chunk-GVQU2GXP-eDWbw8E-.js → chunk-GVQU2GXP-DmZAhaXk.js} +1 -1
  34. package/dist/public/assets/{chunk-IMKFNOWR-BGpQKF0M.js → chunk-IMKFNOWR-CXrrJ9cb.js} +1 -1
  35. package/dist/public/assets/{chunk-L3NEJ4N5-BWoXa-mv.js → chunk-L3NEJ4N5-Pn0OM8Or.js} +1 -1
  36. package/dist/public/assets/{chunk-OSK3NFVY-DgJh1Aoq.js → chunk-OSK3NFVY-CSxO-Bhw.js} +1 -1
  37. package/dist/public/assets/{chunk-P2QGCYS3-CkK7MDIt.js → chunk-P2QGCYS3-DpTPoZQU.js} +1 -1
  38. package/dist/public/assets/{chunk-POPQ4Y6H-CgNwSzsJ.js → chunk-POPQ4Y6H-V45h95Rz.js} +1 -1
  39. package/dist/public/assets/{chunk-PWAF6VOD-D1QREJv6.js → chunk-PWAF6VOD-aG71yphl.js} +1 -1
  40. package/dist/public/assets/{chunk-SHT3W25Y-CW83WuuF.js → chunk-SHT3W25Y-8X6FPG54.js} +1 -1
  41. package/dist/public/assets/{chunk-SVP7TREG-D70EFjSd.js → chunk-SVP7TREG-x6ifISIm.js} +1 -1
  42. package/dist/public/assets/{chunk-TICWLB2K-BdLyZiK8.js → chunk-TICWLB2K-D9KB9pY5.js} +1 -1
  43. package/dist/public/assets/chunk-TLUHSLCS-GPGNxyxD.js +2 -0
  44. package/dist/public/assets/classDiagram-ZZMXUADV-D8W4ja-y.js +1 -0
  45. package/dist/public/assets/classDiagram-v2-VYDZK3BY-D8W4ja-y.js +1 -0
  46. package/dist/public/assets/context-menu-Dt7h9y20.js +1 -0
  47. package/dist/public/assets/createLucideIcon-DyMAgLa3.js +1 -0
  48. package/dist/public/assets/{cssMode-Ba1MkL7V.js → cssMode-F3TrjQ2Y.js} +1 -1
  49. package/dist/public/assets/{cynefin-OW5HDTMX-CVPxUP3o.js → cynefin-OW5HDTMX-BCcHZD-7.js} +1 -1
  50. package/dist/public/assets/{cynefinDiagram-5FMLGOSQ-Eoj-svLE.js → cynefinDiagram-5FMLGOSQ-hEFQTinv.js} +1 -1
  51. package/dist/public/assets/{dagre-GXQ25YYZ-B05PrdkZ.js → dagre-GXQ25YYZ-Dj7c-z9-.js} +1 -1
  52. package/dist/public/assets/debounce-B9DrqirV.js +1 -0
  53. package/dist/public/assets/{diagram-S7CK7UJ4-DcxmHlO1.js → diagram-S7CK7UJ4-i3ABTGXD.js} +1 -1
  54. package/dist/public/assets/{diagram-UQ7AKVKN-DmVSn0-1.js → diagram-UQ7AKVKN-BClHr071.js} +1 -1
  55. package/dist/public/assets/{diagram-VSXAHHWV-BGultN_5.js → diagram-VSXAHHWV-_NoikNWl.js} +1 -1
  56. package/dist/public/assets/{diagram-VX7I27RA-i6gsnYil.js → diagram-VX7I27RA-BxznNmgf.js} +1 -1
  57. package/dist/public/assets/{diagram-Z3DM3KII-Dk2VW9nr.js → diagram-Z3DM3KII-Dp_Elrik.js} +1 -1
  58. package/dist/public/assets/dialog-GYBse2vm.js +41 -0
  59. package/dist/public/assets/dist-BB_jCiks.js +1 -0
  60. package/dist/public/assets/dist-Dd_gMYta.js +1 -0
  61. package/dist/public/assets/drafts-B_tChlzR.js +1 -0
  62. package/dist/public/assets/{ebnfDiagram-PWID7BFC-ZRpPOgCS.js → ebnfDiagram-PWID7BFC-BrhXAUqf.js} +1 -1
  63. package/dist/public/assets/{erDiagram-RLTQ6QDP-C_a1ewl3.js → erDiagram-RLTQ6QDP-DpvzwcpF.js} +1 -1
  64. package/dist/public/assets/eventmodeling-NTZA5JFV-DpPAlVka.js +1 -0
  65. package/dist/public/assets/flowDiagram-HODETNUW-emcn6VnU.js +1 -0
  66. package/dist/public/assets/{ganttDiagram-EL5Y4UJY-BQSJiQPw.js → ganttDiagram-EL5Y4UJY-MwZQW2Ab.js} +1 -1
  67. package/dist/public/assets/{gitGraph-4MIJSDKK-DnzqjUZ8.js → gitGraph-4MIJSDKK-wD3tQrBr.js} +1 -1
  68. package/dist/public/assets/{gitGraphDiagram-WWUBYQGX-DqIRXgnV.js → gitGraphDiagram-WWUBYQGX-RZqAMYtF.js} +1 -1
  69. package/dist/public/assets/hotkeys-Bpeih0PX.js +1 -0
  70. package/dist/public/assets/{htmlMode-Br4Vhh_e.js → htmlMode-BQanlpBa.js} +1 -1
  71. package/dist/public/assets/index-BsSnxNPl.css +2 -0
  72. package/dist/public/assets/index-D96JjECU.js +82 -0
  73. package/dist/public/assets/{info-A6RAGUB7-D-Rg6JUN.js → info-A6RAGUB7-ie0E4iIr.js} +1 -1
  74. package/dist/public/assets/{infoDiagram-27XIBGKW-D2WlI0b3.js → infoDiagram-27XIBGKW-u5u8byqk.js} +1 -1
  75. package/dist/public/assets/input-AzsFYZ3g.js +1 -0
  76. package/dist/public/assets/{ishikawaDiagram-5VMMS53U-DrJpdpRY.js → ishikawaDiagram-5VMMS53U-4GHMY6KJ.js} +1 -1
  77. package/dist/public/assets/{journeyDiagram-3NMN7TZE-DbbEx7ZS.js → journeyDiagram-3NMN7TZE-Cwe5PRBP.js} +1 -1
  78. package/dist/public/assets/{jsonMode-Cjygy0Yx.js → jsonMode-CRZXV6U_.js} +1 -1
  79. package/dist/public/assets/{kanban-definition-UXKFOSKX-CjQ2Pird.js → kanban-definition-UXKFOSKX-CS-A9ZNT.js} +1 -1
  80. package/dist/public/assets/{line-Y9535-xV.js → line-kZmQKU6y.js} +1 -1
  81. package/dist/public/assets/media-refresh-store-B_VyvYfl.js +1 -0
  82. package/dist/public/assets/{mermaid-parser.core-CHfO7_QP.js → mermaid-parser.core-BEcx5De7.js} +3 -3
  83. package/dist/public/assets/mermaid.core-ZFBf3aP8.js +11 -0
  84. package/dist/public/assets/{mindmap-definition-YA3MSWOX-192tJvHd.js → mindmap-definition-YA3MSWOX-ti5sUvQf.js} +1 -1
  85. package/dist/public/assets/notification-permission-Car54v17.js +1 -0
  86. package/dist/public/assets/{packet-AYTQ26CC-CTuDVT1l.js → packet-AYTQ26CC-BFLiDvUG.js} +1 -1
  87. package/dist/public/assets/{pdf-EQHMWEbX.js → pdf-CDunFg56.js} +1 -1
  88. package/dist/public/assets/{pegDiagram-XKGWAZYB-DKWuJLBr.js → pegDiagram-XKGWAZYB-L1VUrE59.js} +1 -1
  89. package/dist/public/assets/{pie-WAS4IAKB-hKIvAklj.js → pie-WAS4IAKB-BxBZGMsV.js} +1 -1
  90. package/dist/public/assets/{pieDiagram-E7YTZNPT-CNnu3Gqt.js → pieDiagram-E7YTZNPT-D_z8Ah38.js} +1 -1
  91. package/dist/public/assets/preview-kind-QJSMKfUN.js +1 -0
  92. package/dist/public/assets/project-abbrev-B7pHIhbk.js +1 -0
  93. package/dist/public/assets/protocol-support-C1NCVjbV.js +1 -0
  94. package/dist/public/assets/{quadrantDiagram-AXDQQJYC-BDfukVAC.js → quadrantDiagram-AXDQQJYC-DEU0wyvb.js} +1 -1
  95. package/dist/public/assets/{radar-RG4KPBEZ-znNmLflQ.js → radar-RG4KPBEZ-C7ijJa3G.js} +1 -1
  96. package/dist/public/assets/{railroad-74A4TZTK-B4mnaNAW.js → railroad-74A4TZTK-BR2-uhMp.js} +1 -1
  97. package/dist/public/assets/railroad-abnf-HS5TGJTU-Q_zhOWAR.js +1 -0
  98. package/dist/public/assets/railroad-ebnf-LZEXJU2U-BNV11-bx.js +1 -0
  99. package/dist/public/assets/railroad-peg-WCYAUIDC-D1whgDil.js +1 -0
  100. package/dist/public/assets/{railroadDiagram-O6MQD6OU-BjW5Goxg.js → railroadDiagram-O6MQD6OU-BO2RgHB_.js} +1 -1
  101. package/dist/public/assets/{requirementDiagram-BXWQKSXE-WZ7qYbwG.js → requirementDiagram-BXWQKSXE-DedAgdgA.js} +1 -1
  102. package/dist/public/assets/{sankeyDiagram-P5KCCOFB-xfsRJbYV.js → sankeyDiagram-P5KCCOFB-XS4y44C-.js} +1 -1
  103. package/dist/public/assets/{sequenceDiagram-WJ2MYXX4-CnXOIvsD.js → sequenceDiagram-WJ2MYXX4-BgGPuhmx.js} +1 -1
  104. package/dist/public/assets/session-seed-exhI-dnY.js +1 -0
  105. package/dist/public/assets/{stateDiagram-D77RDMKH-BC-kRyi8.js → stateDiagram-D77RDMKH-t92luW0k.js} +1 -1
  106. package/dist/public/assets/stateDiagram-v2-MP3YSRHH-BVx0pqBn.js +1 -0
  107. package/dist/public/assets/{swimlanes-42K2YHIH-DImnagTG.js → swimlanes-42K2YHIH-BTLMw_Zs.js} +1 -1
  108. package/dist/public/assets/swimlanesDiagram-VR7AAH4N-BaHPNnEm.js +8 -0
  109. package/dist/public/assets/switch-DFcV6j9m.js +1 -0
  110. package/dist/public/assets/{timeline-definition-24CTP7MA-DxXJ2EnM.js → timeline-definition-24CTP7MA-Buej45ei.js} +1 -1
  111. package/dist/public/assets/{treeView-Q6P3EWNA-BWIPDCZv.js → treeView-Q6P3EWNA-CsmFV7PP.js} +1 -1
  112. package/dist/public/assets/{treemap-WGGIJYW6-BcfuZ8Jf.js → treemap-WGGIJYW6-C7p2D31t.js} +1 -1
  113. package/dist/public/assets/{tsMode-B6BOKeVT.js → tsMode-CkssN7v1.js} +1 -1
  114. package/dist/public/assets/use-debounced-value-C86N-mOK.js +1 -0
  115. package/dist/public/assets/use-find-controls-o8dHk3Ai.js +1 -0
  116. package/dist/public/assets/use-ui-state-GQIbFm75.js +1 -0
  117. package/dist/public/assets/{vennDiagram-4TSXK5OY-CObuiC8v.js → vennDiagram-4TSXK5OY-CabgcJgI.js} +1 -1
  118. package/dist/public/assets/{wardley-WFR3VGLG-M4SNYgeF.js → wardley-WFR3VGLG-nDvUESM8.js} +1 -1
  119. package/dist/public/assets/{wardleyDiagram-VM6X3IG4-CijOXrVJ.js → wardleyDiagram-VM6X3IG4-lH7COUmu.js} +1 -1
  120. package/dist/public/assets/ws-CvBEQDJB.js +1 -0
  121. package/dist/public/assets/{x-C-HTKvar.js → x-CZCUod6A.js} +1 -1
  122. package/dist/public/assets/{xychartDiagram-S5SC5T6Z-DYuJKDDP.js → xychartDiagram-S5SC5T6Z-c7fu3ePF.js} +1 -1
  123. package/dist/public/index.html +6 -9
  124. package/package.json +1 -1
  125. package/dist/public/assets/Dashboard-cH617BN6.js +0 -1
  126. package/dist/public/assets/EditorTabClose-74lvYANq.js +0 -1
  127. package/dist/public/assets/LazyTerminal-bbmj7YnL.js +0 -2
  128. package/dist/public/assets/PdfViewer-BJyMmihS.js +0 -2
  129. package/dist/public/assets/SettingsDialog-C12Ulc04.js +0 -1
  130. package/dist/public/assets/Terminal-BzDAcHMO.js +0 -60
  131. package/dist/public/assets/Workspace-CrbIuaBO.js +0 -8
  132. package/dist/public/assets/api-BBFo3oc-.js +0 -73
  133. package/dist/public/assets/architecture-7GRP2DOG-D_jntaTV.js +0 -1
  134. package/dist/public/assets/channel-VzmaFbZX.js +0 -1
  135. package/dist/public/assets/chunk-2E4U76K2-Co6b1Y97.js +0 -2
  136. package/dist/public/assets/chunk-DU6HZSFF-CCNUFaQT.js +0 -125
  137. package/dist/public/assets/chunk-TLUHSLCS-B7jq2TOO.js +0 -2
  138. package/dist/public/assets/classDiagram-ZZMXUADV-CYpW3ppG.js +0 -1
  139. package/dist/public/assets/classDiagram-v2-VYDZK3BY-CYpW3ppG.js +0 -1
  140. package/dist/public/assets/context-menu-BQLwy3k3.js +0 -1
  141. package/dist/public/assets/createLucideIcon-C6JENrH3.js +0 -1
  142. package/dist/public/assets/dialog-DI1-uj7G.js +0 -41
  143. package/dist/public/assets/dist-CKuo36qW.js +0 -1
  144. package/dist/public/assets/drafts-BJXURaei.js +0 -1
  145. package/dist/public/assets/eventmodeling-NTZA5JFV-B1CPh3nL.js +0 -1
  146. package/dist/public/assets/file-links-CZ2K_lr6.js +0 -1
  147. package/dist/public/assets/flowDiagram-HODETNUW-B4hsNbjc.js +0 -1
  148. package/dist/public/assets/index-CvsABxea.css +0 -2
  149. package/dist/public/assets/index-DzKOX38n.js +0 -10
  150. package/dist/public/assets/media-refresh-store-PUCHJ25x.js +0 -1
  151. package/dist/public/assets/mermaid.core-Czw_C2pz.js +0 -11
  152. package/dist/public/assets/preload-helper-Czpn1I53.js +0 -1
  153. package/dist/public/assets/railroad-abnf-HS5TGJTU-CfsGG-fR.js +0 -1
  154. package/dist/public/assets/railroad-ebnf-LZEXJU2U-BmUL54vf.js +0 -1
  155. package/dist/public/assets/railroad-peg-WCYAUIDC-BNoPIdtK.js +0 -1
  156. package/dist/public/assets/session-seed-DjANSMsS.js +0 -1
  157. package/dist/public/assets/stateDiagram-v2-MP3YSRHH-3Xfb1SN8.js +0 -1
  158. package/dist/public/assets/swimlanesDiagram-VR7AAH4N-isFys79B.js +0 -8
  159. package/dist/public/assets/use-find-controls-Bl_efA6K.js +0 -1
package/CHANGELOG.md CHANGED
@@ -7,10 +7,33 @@ Past releases: see docs/changelogs/.
7
7
 
8
8
  # Changelog
9
9
 
10
- ## [0.1.12] — 2026-09-09
10
+ ## [0.2.0] — 2026-09-21
11
+
12
+ ### Added
13
+
14
+ - Add Settings → Remote access in local and SSH desktop cockpits for enablement, status, QR/link pairing, browser approval/revocation, disablement and host identity recovery; add authenticated cockpit controls in protocol 18.1.
15
+ - Add self-hosted mobile access with Google/GitHub login, optional authenticator MFA, independently supervised host connectors and QR/link browser pairing.
16
+ - Add a single-terminal phone view, native multiline prompt composer, visible terminal keys and read-only text/change review without rewriting desktop layouts.
17
+ - Add remote administration and recovery commands, deployment images and isolated relay/browser acceptance suites.
18
+ - Add lightweight built-process and loopback OpenSSH authentication suites, with separate manual browser and desktop acceptance.
19
+
20
+ ### Changed
21
+
22
+ - Open remote account registration to every verified Google/GitHub identity; remove the signup allowlist and registration switch while retaining account isolation and explicit host approval.
23
+
24
+ ### Removed
25
+
26
+ - Remove the TLS contact email setting from the Caddy deployment and environment example.
27
+ - Remove email/password login, verification/reset email delivery, SMTP configuration and Nodemailer; require Google and/or GitHub OAuth, retain verified-email admission and optional authenticator MFA, and retire legacy passwords/sessions. Bump remote protocol to 2 and daemon/cockpit protocol to 19.0 for the changed pairing contract.
11
28
 
12
29
  ### Fixed
13
30
 
14
- - Paste clipboard images into the focused file-tree directory with timestamped screenshot names.
15
- - Keep session shell history on its private file when directory, environment, or prompt hooks repoint `HISTFILE` at runtime.
16
- - Make Option+Left/Right move by word in macOS terminals instead of inserting the unrecognised xterm sequence tail.
31
+ - Reject incomplete remote-origin input without throwing during registration form rendering.
32
+ - Preserve browser login, terminal snapshots and refresh correlation across cockpit replacement and upstream recovery; retain desktop routes when the origin moves.
33
+
34
+ ### Security
35
+
36
+ - Require exact browser approval at the host, pinned Noise XX transport, bounded forwarding and fresh browser participation in the existing host leases; keep remote protocol 2 independent of the protocol-18 host lease foundation.
37
+ - Persist device revocation and offline remote disable, isolate application delivery from the relay origin, and deny unreviewed remote routes and executable previews.
38
+ - Replace distributed master credentials with private host control, short-lived renewable connection leases and single-use browser invitations; migrate to protocol 18.0 and require existing tabs to run `puddle launch` once.
39
+ - Isolate forwarded applications on a separate loopback origin, bind proxy grants to browser authorisation and revoke active streams when their authority expires.
package/README.md CHANGED
@@ -34,6 +34,13 @@ puddle launch <user>@<host>
34
34
 
35
35
  This connects Puddle to the remote host over SSH, bootstrapping the Puddle daemon on first contact and enabling you to begin development.
36
36
 
37
+ **To connect from a phone or another browser over the internet:** deploy your own
38
+ [mobile access service and trusted web application](docs/mobile-access.md), then
39
+ use `puddle remote enable` and `puddle remote pair`. The host connects outward;
40
+ there is no public daemon port or VPN requirement. Each browser needs explicit
41
+ host approval. The phone view provides live terminals, prompt input and read-only
42
+ text/diff review over a pinned Noise connection through the relay.
43
+
37
44
  Puddle works using your system `ssh`, so `~/.ssh/config`, agents, and jump hosts apply.
38
45
 
39
46
  **For development on your own machine:**
@@ -106,7 +113,7 @@ auth prompts unless you use a key).
106
113
  └───────────────────────────────────┘
107
114
  ```
108
115
 
109
- The CLI serves the UI at a stable local origin and reverse-proxies the API to the daemon, directly in local mode, through the tunnel in SSH mode. The daemon is headless and host-agnostic on `127.0.0.1:7434`. UI updates ship with the CLI (`npm update -g @puddle-code/cli` refreshes the cockpit for every host); the daemon only has to update when the versioned protocol breaks, and the CLI does that automatically. A mandatory bearer token plus Host/Origin validation guard the localhost API against malicious web pages.
116
+ The CLI serves the UI at a stable local origin and reverse-proxies the API to the daemon, directly in local mode, through the tunnel in SSH mode. The daemon is headless and host-agnostic on `127.0.0.1:7434`. UI updates ship with the CLI (`npm update -g @puddle-code/cli` refreshes the cockpit for every host); the daemon only has to update when the versioned protocol breaks, and the CLI does that automatically. Short-lived host connection leases, separate browser authorisation and exact cockpit Host/Origin checks guard local access. Launch invitations are single-use; browser login survives cockpit restarts, while forwarded applications use a separate loopback origin. After upgrading from the old token flow, run `puddle launch` once to authorise existing tabs.
110
117
 
111
118
  Everything lives under `~/.puddle` on the host, installed without sudo — and `puddle remove daemon` takes it apart again.
112
119