@puddle-code/cli 0.3.1 → 0.3.3
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.
- package/CHANGELOG.md +8 -4
- package/dist/host-control.mjs +38 -7
- package/dist/index.js +162 -32
- package/dist/public/assets/App-CkunCEjY.js +2 -0
- package/dist/public/assets/Dashboard-3XQN7EWB.js +1 -0
- package/dist/public/assets/EditorTabClose-CCYbaxcQ.js +1 -0
- package/dist/public/assets/FindWidget-BsFwo-Vf.js +1 -0
- package/dist/public/assets/LazyTerminal-CRonN-zb.js +2 -0
- package/dist/public/assets/{ModelRefcount-DaHZ2vpK.js → ModelRefcount-BdmA-Mgb.js} +1 -1
- package/dist/public/assets/NewProjectDialog-Bsp8NGgY.js +1 -0
- package/dist/public/assets/PaneEditorBody-MSWyifa9.js +299 -0
- package/dist/public/assets/PdfViewer-C3kK31fw.js +2 -0
- package/dist/public/assets/SettingsDialog-CGT3gjKB.js +8 -0
- package/dist/public/assets/Terminal-_KJe85Cp.js +66 -0
- package/dist/public/assets/Workspace-ZdFFHXHa.js +20 -0
- package/dist/public/assets/abnfDiagram-VCTEODGH-CIbaiPRK.js +1 -0
- package/dist/public/assets/architecture-7GRP2DOG-C37y6gLW.js +1 -0
- package/dist/public/assets/architectureDiagram-5GKGNRK7-OE8n13hC.js +36 -0
- package/dist/public/assets/auth-C3Hg0pRq.js +73 -0
- package/dist/public/assets/{blockDiagram-I7D4REHJ-BnnIsbDF.js → blockDiagram-I7D4REHJ-TUFuv4qI.js} +1 -1
- package/dist/public/assets/buffer-store-De6oYRzb.js +16 -0
- package/dist/public/assets/button-DkCgQgIz.js +1 -0
- package/dist/public/assets/{c4Diagram-7LVT6UL2-CSC_Hbql.js → c4Diagram-7LVT6UL2-Cwvhq15S.js} +1 -1
- package/dist/public/assets/channel-Bl1m0NKH.js +1 -0
- package/dist/public/assets/chunk-2E4U76K2-3abpRZU5.js +2 -0
- package/dist/public/assets/chunk-2ZTRR5NV-NvRGlFrK.js +2 -0
- package/dist/public/assets/chunk-3Z5EZCMW-DiR4QWP9.js +1 -0
- package/dist/public/assets/{chunk-4HAMMTFA-CFf6LTHp.js → chunk-4HAMMTFA-eolw8o4c.js} +1 -1
- package/dist/public/assets/chunk-5V3GS4D5-C1iY134n.js +1 -0
- package/dist/public/assets/chunk-6AZGARVD-_0gi5QUW.js +1 -0
- package/dist/public/assets/chunk-6EIED4P4-BxkNo1Kd.js +1 -0
- package/dist/public/assets/chunk-6K3QC6MW-3E45BuBF.js +1 -0
- package/dist/public/assets/chunk-6TQVIW2G-CakkaKNk.js +1 -0
- package/dist/public/assets/chunk-747NJXEK-pfB9pTl1.js +2 -0
- package/dist/public/assets/{chunk-75Z2AOVW-DmsoAjw5.js → chunk-75Z2AOVW-CYC6lmPG.js} +1 -1
- package/dist/public/assets/{chunk-CLGD4ZFX-Dx1fE4HX.js → chunk-CLGD4ZFX-85mvsF4F.js} +1 -1
- package/dist/public/assets/chunk-DU6HZSFF-1ZoT19aa.js +125 -0
- package/dist/public/assets/{chunk-F27PBJKO-BSaAmHi0.js → chunk-F27PBJKO-DM71futS.js} +1 -1
- package/dist/public/assets/{chunk-GMAD6QVW-Dna8BJJq.js → chunk-GMAD6QVW-BzDEhlK8.js} +1 -1
- package/dist/public/assets/{chunk-GVQU2GXP-DOhlGSDl.js → chunk-GVQU2GXP-CZrUjjq3.js} +1 -1
- package/dist/public/assets/chunk-I5DQTOEV-Dcwirj_w.js +1 -0
- package/dist/public/assets/chunk-ICYGCRZG-BJAGKQA9.js +1 -0
- package/dist/public/assets/chunk-IH6LHLGP-BN2I9ljI.js +1 -0
- package/dist/public/assets/{chunk-IMKFNOWR-D65oIwAv.js → chunk-IMKFNOWR-CLsPi8Op.js} +1 -1
- package/dist/public/assets/chunk-KI3K4JFJ-v5_17D28.js +1 -0
- package/dist/public/assets/{chunk-L3NEJ4N5-BwcBPm7M.js → chunk-L3NEJ4N5-BW3s5_r9.js} +1 -1
- package/dist/public/assets/{chunk-OSK3NFVY-82MNmgWe.js → chunk-OSK3NFVY-Cs_K17E_.js} +1 -1
- package/dist/public/assets/chunk-OUJLGHUK-FHDQe81Z.js +2 -0
- package/dist/public/assets/{chunk-P2QGCYS3-CfrZ7JB4.js → chunk-P2QGCYS3-C5-f0Lvg.js} +1 -1
- package/dist/public/assets/{chunk-POPQ4Y6H-CHs8yAQU.js → chunk-POPQ4Y6H-gkafJx1Z.js} +1 -1
- package/dist/public/assets/{chunk-PWAF6VOD-BXxrEmLT.js → chunk-PWAF6VOD-CTSTb7zN.js} +1 -1
- package/dist/public/assets/{chunk-SHT3W25Y-DMUmvTem.js → chunk-SHT3W25Y-Cg6sVFNA.js} +1 -1
- package/dist/public/assets/{chunk-SVP7TREG-CPru3m3o.js → chunk-SVP7TREG-DRUnItYx.js} +1 -1
- package/dist/public/assets/{chunk-TICWLB2K-zN8e4oYt.js → chunk-TICWLB2K-HtG8ibWH.js} +1 -1
- package/dist/public/assets/chunk-TLUHSLCS-CcE5HWjm.js +2 -0
- package/dist/public/assets/chunk-UY3FDG6J-DHD-4eXF.js +1 -0
- package/dist/public/assets/chunk-XHIXRSVI-DRL0dwtI.js +1 -0
- package/dist/public/assets/classDiagram-ZZMXUADV-AgT8hWlv.js +1 -0
- package/dist/public/assets/classDiagram-v2-VYDZK3BY-AgT8hWlv.js +1 -0
- package/dist/public/assets/client-settings-CwqpIric.js +1 -0
- package/dist/public/assets/context-menu-0Tb8cG9E.js +1 -0
- package/dist/public/assets/copy-CKvSfzPk.js +1 -0
- package/dist/public/assets/cssMode-CSjHtANE.js +1 -0
- package/dist/public/assets/cynefin-OW5HDTMX-Dy2ZNO0g.js +1 -0
- package/dist/public/assets/cynefinDiagram-5FMLGOSQ-C2miE5p0.js +62 -0
- package/dist/public/assets/{dagre-GXQ25YYZ-t9AbgVhY.js → dagre-GXQ25YYZ-BjnR_o63.js} +1 -1
- package/dist/public/assets/{diagram-S7CK7UJ4-BldMPLHQ.js → diagram-S7CK7UJ4-CBYedG6v.js} +3 -3
- package/dist/public/assets/diagram-UQ7AKVKN-CUL346-t.js +41 -0
- package/dist/public/assets/diagram-VSXAHHWV-1DKb_UJ5.js +3 -0
- package/dist/public/assets/{diagram-VX7I27RA-DtaAnFuF.js → diagram-VX7I27RA-DYP31PbY.js} +2 -2
- package/dist/public/assets/{diagram-Z3DM3KII-Bu1-SbmM.js → diagram-Z3DM3KII-C-mC8cmq.js} +1 -1
- package/dist/public/assets/dialog-UpZ_vNTE.js +41 -0
- package/dist/public/assets/disclosure-D7vpyXdR.js +1 -0
- package/dist/public/assets/dist-C2WZA469.js +1 -0
- package/dist/public/assets/dist-v3Pwgb3Q.js +1 -0
- package/dist/public/assets/ebnfDiagram-PWID7BFC-CnSa44Tb.js +1 -0
- package/dist/public/assets/{erDiagram-RLTQ6QDP-C359QLoG.js → erDiagram-RLTQ6QDP-ZmDlrO9k.js} +1 -1
- package/dist/public/assets/{errors-1cUzcK5v.js → errors-BH_S68Hd.js} +1 -1
- package/dist/public/assets/eventmodeling-NTZA5JFV-uFnlWNGc.js +1 -0
- package/dist/public/assets/flowDiagram-HODETNUW-CW47qpBT.js +1 -0
- package/dist/public/assets/{ganttDiagram-EL5Y4UJY-xq_Yuf1R.js → ganttDiagram-EL5Y4UJY-raM_gefY.js} +1 -1
- package/dist/public/assets/gitGraph-4MIJSDKK-1PxNX92k.js +1 -0
- package/dist/public/assets/gitGraphDiagram-WWUBYQGX-DnLrgk4s.js +106 -0
- package/dist/public/assets/htmlMode-CIHMS93l.js +1 -0
- package/dist/public/assets/index-xDhpMZgv.js +10 -0
- package/dist/public/assets/info-A6RAGUB7-BZV44TW1.js +1 -0
- package/dist/public/assets/infoDiagram-27XIBGKW-eCv-Vsx8.js +2 -0
- package/dist/public/assets/{ishikawaDiagram-5VMMS53U-Bob975Xt.js → ishikawaDiagram-5VMMS53U-DCFnvrdr.js} +1 -1
- package/dist/public/assets/{journeyDiagram-3NMN7TZE-x9ssExSV.js → journeyDiagram-3NMN7TZE-6o4KvbhJ.js} +1 -1
- package/dist/public/assets/{jsonMode-CmlPrpF1.js → jsonMode-BijgXT6I.js} +1 -1
- package/dist/public/assets/jsx-runtime-ffCh33zF.js +1 -0
- package/dist/public/assets/{kanban-definition-UXKFOSKX-Cy8SkNND.js → kanban-definition-UXKFOSKX-CQKuhkFV.js} +1 -1
- package/dist/public/assets/{line-C0YxHEKk.js → line-D4r_bmlv.js} +1 -1
- package/dist/public/assets/markdown-mermaid-D0nzztEz.js +2 -0
- package/dist/public/assets/{math-B4Pf1FaR.js → math-CSw6sgCC.js} +2 -2
- package/dist/public/assets/math-delimiters-BCnTi7Ii.js +1 -0
- package/dist/public/assets/media-refresh-store-Ddvr6wz1.js +1 -0
- package/dist/public/assets/mermaid-parser.core-CICMKhjq.js +4 -0
- package/dist/public/assets/mermaid.core-D2QzpYEE.js +11 -0
- package/dist/public/assets/{mindmap-definition-YA3MSWOX-B6ghAwaT.js → mindmap-definition-YA3MSWOX-DAB8mHOv.js} +1 -1
- package/dist/public/assets/monaco.contribution-C0TYpF88.js +2 -0
- package/dist/public/assets/notification-delivery-CDu_5PS7.js +1 -0
- package/dist/public/assets/packet-AYTQ26CC-Cw5JteoC.js +1 -0
- package/dist/public/assets/{pdf-C7rjnygQ.js → pdf-EQHMWEbX.js} +1 -1
- package/dist/public/assets/pegDiagram-XKGWAZYB-BE_LYTdh.js +1 -0
- package/dist/public/assets/pie-WAS4IAKB-CnPKaBaN.js +1 -0
- package/dist/public/assets/pieDiagram-E7YTZNPT-BRffiJ1a.js +39 -0
- package/dist/public/assets/preload-helper-Czpn1I53.js +1 -0
- package/dist/public/assets/project-abbrev-Br6sQqPh.js +1 -0
- package/dist/public/assets/protocol-support-CLMCHX8i.js +1 -0
- package/dist/public/assets/{quadrantDiagram-AXDQQJYC-DRGzxdVf.js → quadrantDiagram-AXDQQJYC-DYWp1Jjq.js} +1 -1
- package/dist/public/assets/radar-RG4KPBEZ-Dqx79rlE.js +1 -0
- package/dist/public/assets/railroad-74A4TZTK-BkDQqaz7.js +1 -0
- package/dist/public/assets/railroad-abnf-HS5TGJTU-kgqWL-Ba.js +1 -0
- package/dist/public/assets/railroad-ebnf-LZEXJU2U-GspfOzjs.js +1 -0
- package/dist/public/assets/railroad-peg-WCYAUIDC-qO23KZap.js +1 -0
- package/dist/public/assets/railroadDiagram-O6MQD6OU-wuPYUWJ2.js +1 -0
- package/dist/public/assets/{requirementDiagram-BXWQKSXE-CSioB-S4.js → requirementDiagram-BXWQKSXE-BtGNZ92J.js} +1 -1
- package/dist/public/assets/{sankeyDiagram-P5KCCOFB-Be_RNG6h.js → sankeyDiagram-P5KCCOFB-XgIIrsbe.js} +1 -1
- package/dist/public/assets/{scroll-restoration-C6CrXFrx.js → scroll-restoration-hNqYmCAE.js} +1 -1
- package/dist/public/assets/selection-actions-Bh9Fkkqv.js +1 -0
- package/dist/public/assets/{sequenceDiagram-WJ2MYXX4-QO7Ba1BQ.js → sequenceDiagram-WJ2MYXX4-CVIIE7ze.js} +1 -1
- package/dist/public/assets/{stateDiagram-D77RDMKH-B52l08Ki.js → stateDiagram-D77RDMKH-0kIDexDQ.js} +1 -1
- package/dist/public/assets/stateDiagram-v2-MP3YSRHH-DdU6a-zG.js +1 -0
- package/dist/public/assets/{swimlanes-42K2YHIH-CEkCp-cn.js → swimlanes-42K2YHIH-BY2JV_Jb.js} +1 -1
- package/dist/public/assets/swimlanesDiagram-VR7AAH4N-BCiIa4tX.js +8 -0
- package/dist/public/assets/switch-SW6BMps1.js +1 -0
- package/dist/public/assets/{timeline-definition-24CTP7MA-0rICk4bz.js → timeline-definition-24CTP7MA-CPRUSXUS.js} +1 -1
- package/dist/public/assets/treeView-Q6P3EWNA-CiZNqz_z.js +1 -0
- package/dist/public/assets/treemap-WGGIJYW6-5hDYDC6e.js +1 -0
- package/dist/public/assets/{tsMode-iBk8vwDB.js → tsMode-B7q3gz7a.js} +1 -1
- package/dist/public/assets/use-ui-state-BiAROr3D.js +1 -0
- package/dist/public/assets/{vennDiagram-4TSXK5OY-B1JUHS0H.js → vennDiagram-4TSXK5OY-CU1Q7iGV.js} +1 -1
- package/dist/public/assets/view-state-store-C6OmciCC.js +1 -0
- package/dist/public/assets/wardley-WFR3VGLG-CWb_ROLo.js +1 -0
- package/dist/public/assets/{wardleyDiagram-VM6X3IG4-WNi3mtNy.js → wardleyDiagram-VM6X3IG4-B2Pn7CDF.js} +3 -3
- package/dist/public/assets/whole-word-2m2pmAFT.js +1 -0
- package/dist/public/assets/workers-Ck67TJT4.js +1 -0
- package/dist/public/assets/ws-DNNH0sEH.js +1 -0
- package/dist/public/assets/{xychartDiagram-S5SC5T6Z-CbKt4_V3.js → xychartDiagram-S5SC5T6Z-xhQ4tT_S.js} +1 -1
- package/dist/public/index.html +5 -1
- package/dist/pudl.js +45 -13
- package/package.json +1 -1
- package/dist/public/assets/App-CNmIJjl_.js +0 -2
- package/dist/public/assets/Dashboard-CXo8Im5Y.js +0 -1
- package/dist/public/assets/EditorTabClose--kyKHSwZ.js +0 -1
- package/dist/public/assets/FindWidget-PycvFKIo.js +0 -1
- package/dist/public/assets/LazyTerminal-CAhb0T8p.js +0 -2
- package/dist/public/assets/NewProjectDialog-BWkhYVKJ.js +0 -1
- package/dist/public/assets/PaneEditorBody-DKpaey4n.js +0 -299
- package/dist/public/assets/PdfViewer-B-O3C5Fb.js +0 -2
- package/dist/public/assets/SettingsDialog-DxI5UQty.js +0 -8
- package/dist/public/assets/Terminal-DE7QO3Lv.js +0 -66
- package/dist/public/assets/Workspace-CcPBZYc6.js +0 -20
- package/dist/public/assets/abnfDiagram-VCTEODGH-Bn8NH7EO.js +0 -1
- package/dist/public/assets/architecture-7GRP2DOG-Di8Z0gNN.js +0 -1
- package/dist/public/assets/architectureDiagram-5GKGNRK7-rXpMU6RM.js +0 -36
- package/dist/public/assets/buffer-store-B24QspY2.js +0 -16
- package/dist/public/assets/button-CcKBhdZO.js +0 -1
- package/dist/public/assets/channel-BpgRfG_m.js +0 -1
- package/dist/public/assets/chunk-2E4U76K2-BBFx22L7.js +0 -2
- package/dist/public/assets/chunk-DU6HZSFF-p5k9qXhh.js +0 -125
- package/dist/public/assets/chunk-TLUHSLCS-D9SadBk_.js +0 -2
- package/dist/public/assets/classDiagram-ZZMXUADV-Cvjt82YE.js +0 -1
- package/dist/public/assets/classDiagram-v2-VYDZK3BY-Cvjt82YE.js +0 -1
- package/dist/public/assets/context-menu-DeidX0Pi.js +0 -1
- package/dist/public/assets/copy-DWjBcRsB.js +0 -1
- package/dist/public/assets/cssMode-CZGyU_SG.js +0 -1
- package/dist/public/assets/cynefin-OW5HDTMX-DWHI9hMS.js +0 -1
- package/dist/public/assets/cynefinDiagram-5FMLGOSQ-D6ufz00C.js +0 -62
- package/dist/public/assets/diagram-UQ7AKVKN-D9T4tJbc.js +0 -41
- package/dist/public/assets/diagram-VSXAHHWV-Dh7CRewi.js +0 -3
- package/dist/public/assets/dialog-CxBgPsab.js +0 -41
- package/dist/public/assets/disclosure-BH-wuD_D.js +0 -1
- package/dist/public/assets/dist-D5t_kbYW.js +0 -1
- package/dist/public/assets/dist-qyIRFVt1.js +0 -1
- package/dist/public/assets/ebnfDiagram-PWID7BFC-DInnl0wx.js +0 -1
- package/dist/public/assets/eventmodeling-NTZA5JFV-BQVYxt7A.js +0 -1
- package/dist/public/assets/flowDiagram-HODETNUW--HTl_4V1.js +0 -1
- package/dist/public/assets/gitGraph-4MIJSDKK-U5qKRzrG.js +0 -1
- package/dist/public/assets/gitGraphDiagram-WWUBYQGX-BcXQM8eP.js +0 -106
- package/dist/public/assets/htmlMode-23yFfFGb.js +0 -1
- package/dist/public/assets/index-CPDXsNn7.js +0 -82
- package/dist/public/assets/info-A6RAGUB7-BXjSF_iH.js +0 -1
- package/dist/public/assets/infoDiagram-27XIBGKW-BIJ52Gpm.js +0 -2
- package/dist/public/assets/markdown-mermaid-wVNP7t8F.js +0 -2
- package/dist/public/assets/media-refresh-store-CcMOJ-U-.js +0 -1
- package/dist/public/assets/mermaid-parser.core-Cy8AG-qQ.js +0 -7
- package/dist/public/assets/mermaid.core-DoDuR-5f.js +0 -11
- package/dist/public/assets/notification-delivery-0LhR-ShC.js +0 -1
- package/dist/public/assets/packet-AYTQ26CC-BpWwI2oX.js +0 -1
- package/dist/public/assets/pegDiagram-XKGWAZYB-yj3GPtMG.js +0 -1
- package/dist/public/assets/pie-WAS4IAKB-DvE_icUX.js +0 -1
- package/dist/public/assets/pieDiagram-E7YTZNPT-DdwpR7qt.js +0 -39
- package/dist/public/assets/project-abbrev-DUQCetLc.js +0 -1
- package/dist/public/assets/protocol-support-DWTHwckn.js +0 -1
- package/dist/public/assets/radar-RG4KPBEZ-BMUoktqq.js +0 -1
- package/dist/public/assets/railroad-74A4TZTK-CRCU-hfz.js +0 -1
- package/dist/public/assets/railroad-abnf-HS5TGJTU-DgF_7Rby.js +0 -1
- package/dist/public/assets/railroad-ebnf-LZEXJU2U-yoQjOTe4.js +0 -1
- package/dist/public/assets/railroad-peg-WCYAUIDC-Bi2UnAcg.js +0 -1
- package/dist/public/assets/railroadDiagram-O6MQD6OU-DoYXFCYn.js +0 -1
- package/dist/public/assets/selection-actions-BuV-nTRE.js +0 -1
- package/dist/public/assets/stateDiagram-v2-MP3YSRHH-DyfZNcXp.js +0 -1
- package/dist/public/assets/swimlanesDiagram-VR7AAH4N-9I9MU74C.js +0 -8
- package/dist/public/assets/switch-B5sIV745.js +0 -1
- package/dist/public/assets/treeView-Q6P3EWNA-UwjA1jwm.js +0 -1
- package/dist/public/assets/treemap-WGGIJYW6-BWpfnhSW.js +0 -1
- package/dist/public/assets/use-ui-state-Bxj6PnLE.js +0 -1
- package/dist/public/assets/view-state-store-B5KgrWCh.js +0 -1
- package/dist/public/assets/wardley-WFR3VGLG-DGkljHJE.js +0 -1
- package/dist/public/assets/ws-D9g0r8Jb.js +0 -1
package/CHANGELOG.md
CHANGED
|
@@ -4,13 +4,17 @@ Archived release changelog. Governance lives in CLAUDE.md §"Changelog disciplin
|
|
|
4
4
|
|
|
5
5
|
# Changelog
|
|
6
6
|
|
|
7
|
-
## [0.3.
|
|
7
|
+
## [0.3.3] — 2026-10-15
|
|
8
|
+
|
|
9
|
+
### Added
|
|
10
|
+
|
|
11
|
+
- Reveal local files and folders in Finder, File Explorer or the system file manager from file-tree and editor-tab menus, including locally served browser cockpits; SSH and remote hosts omit the action (protocol 24.2).
|
|
8
12
|
|
|
9
13
|
### Changed
|
|
10
14
|
|
|
11
|
-
-
|
|
12
|
-
-
|
|
15
|
+
- Show desktop notifications with host/project, session title and message preview in that order: native text fields on macOS and Windows, and a separate session line above the preview on Linux (protocol 24.1).
|
|
16
|
+
- Prefix web/mobile notification titles with the project abbreviation (`[ABBRV] Session title`) for both live alerts and encrypted background push.
|
|
13
17
|
|
|
14
18
|
### Fixed
|
|
15
19
|
|
|
16
|
-
-
|
|
20
|
+
- Attach desktop SSH authentication prompts to their host's window, display the target explicitly, and discard pending and late requests when that host closes while retaining at most one request per host.
|
package/dist/host-control.mjs
CHANGED
|
@@ -14557,6 +14557,7 @@ var notificationContentSchema = external_exports.object({
|
|
|
14557
14557
|
var desktopNotificationRequestSchema = external_exports.object({
|
|
14558
14558
|
id: external_exports.string().min(1).max(128),
|
|
14559
14559
|
title: external_exports.string().min(1).max(160),
|
|
14560
|
+
subtitle: external_exports.string().min(1).max(160).optional(),
|
|
14560
14561
|
body: external_exports.string().min(1).max(256),
|
|
14561
14562
|
target: notificationTargetSchema.optional()
|
|
14562
14563
|
}).strict();
|
|
@@ -14602,7 +14603,20 @@ var agentLifecycleSignalSchema = external_exports.object({
|
|
|
14602
14603
|
native_created_at: external_exports.iso.datetime({ offset: true }).optional(),
|
|
14603
14604
|
native_updated_at: external_exports.iso.datetime({ offset: true }).optional()
|
|
14604
14605
|
});
|
|
14605
|
-
var
|
|
14606
|
+
var agentTurnSignalSchema = external_exports.object({
|
|
14607
|
+
nonce: external_exports.string().min(16).max(200),
|
|
14608
|
+
event: external_exports.enum(["turn_start", "turn_complete", "turn_failed"]),
|
|
14609
|
+
agent_session_ref: external_exports.string().min(1).max(200),
|
|
14610
|
+
turn_id: external_exports.string().min(1).max(200),
|
|
14611
|
+
prompt_hash: external_exports.string().regex(/^[a-f0-9]{64}$/).optional(),
|
|
14612
|
+
reply: external_exports.string().max(256 * 1024).refine((value) => new TextEncoder().encode(value).length <= 256 * 1024).optional(),
|
|
14613
|
+
error: external_exports.string().max(4096).optional()
|
|
14614
|
+
});
|
|
14615
|
+
var agentSignalRequestSchema = external_exports.union([
|
|
14616
|
+
statusSignalSchema,
|
|
14617
|
+
agentLifecycleSignalSchema,
|
|
14618
|
+
agentTurnSignalSchema
|
|
14619
|
+
]);
|
|
14606
14620
|
|
|
14607
14621
|
// ../shared/src/api/config.ts
|
|
14608
14622
|
var fields = {
|
|
@@ -14941,6 +14955,7 @@ var sessionStatusSchema = external_exports.enum([
|
|
|
14941
14955
|
"archived"
|
|
14942
14956
|
]);
|
|
14943
14957
|
var sessionKindSchema = external_exports.enum(["agent", "terminal"]);
|
|
14958
|
+
var agentModeSchema = external_exports.enum(["interactive", "headless"]);
|
|
14944
14959
|
var sessionSchema = external_exports.object({
|
|
14945
14960
|
id: sessionId,
|
|
14946
14961
|
project_id: projectId,
|
|
@@ -14954,6 +14969,8 @@ var sessionSchema = external_exports.object({
|
|
|
14954
14969
|
kind: sessionKindSchema,
|
|
14955
14970
|
/** Null for terminal sessions, which run a plain shell rather than an agent. */
|
|
14956
14971
|
agent_type: external_exports.string().nullable(),
|
|
14972
|
+
/** Native TUI or structured CLI execution with a terminal transcript. */
|
|
14973
|
+
agent_mode: agentModeSchema.optional(),
|
|
14957
14974
|
/** Live foreground agent in a terminal session; icon hint only, never persisted. */
|
|
14958
14975
|
detected_agent_type: external_exports.string().nullable().optional(),
|
|
14959
14976
|
agent_session_ref: external_exports.string().nullable(),
|
|
@@ -15094,13 +15111,13 @@ var archiveRequestSchema = external_exports.object({
|
|
|
15094
15111
|
});
|
|
15095
15112
|
|
|
15096
15113
|
// ../shared/src/api/projects.ts
|
|
15097
|
-
var
|
|
15114
|
+
var projectAbbrev2 = external_exports.string().min(1).max(5);
|
|
15098
15115
|
var projectSchema = external_exports.object({
|
|
15099
15116
|
id: projectId,
|
|
15100
15117
|
profile_id: profileId,
|
|
15101
15118
|
repo_id: rowId,
|
|
15102
15119
|
name: external_exports.string(),
|
|
15103
|
-
abbrev:
|
|
15120
|
+
abbrev: projectAbbrev2.nullable().default(null),
|
|
15104
15121
|
/**
|
|
15105
15122
|
* Hidden from the homescreen but never deleted — every session, worktree, and
|
|
15106
15123
|
* bit of data is retained, and un-archiving restores it all (SPEC §11).
|
|
@@ -15114,11 +15131,11 @@ var createProjectRequestSchema = external_exports.object({
|
|
|
15114
15131
|
profile_id: profileId,
|
|
15115
15132
|
repo_id: rowId,
|
|
15116
15133
|
name: external_exports.string().min(1).max(100),
|
|
15117
|
-
abbrev:
|
|
15134
|
+
abbrev: projectAbbrev2.optional()
|
|
15118
15135
|
});
|
|
15119
15136
|
var patchProjectRequestSchema = external_exports.object({
|
|
15120
15137
|
name: external_exports.string().min(1).max(100).optional(),
|
|
15121
|
-
abbrev:
|
|
15138
|
+
abbrev: projectAbbrev2.optional(),
|
|
15122
15139
|
archived: external_exports.boolean().optional()
|
|
15123
15140
|
});
|
|
15124
15141
|
var projectDetailSchema = external_exports.object({
|
|
@@ -15733,6 +15750,12 @@ var cockpitRefreshResponseSchema = external_exports.object({
|
|
|
15733
15750
|
refreshId: external_exports.string().uuid(),
|
|
15734
15751
|
instance: external_exports.string().uuid()
|
|
15735
15752
|
});
|
|
15753
|
+
var cockpitFileManagerSchema = external_exports.object({
|
|
15754
|
+
name: external_exports.enum(["Finder", "File Explorer", "File Manager"]).nullable()
|
|
15755
|
+
});
|
|
15756
|
+
var cockpitRevealRequestSchema = external_exports.object({
|
|
15757
|
+
path: external_exports.string().min(1).max(4096).refine((path) => !path.includes("\0"))
|
|
15758
|
+
}).strict();
|
|
15736
15759
|
|
|
15737
15760
|
// ../shared/src/ws/messages.ts
|
|
15738
15761
|
var termId = external_exports.string().regex(/^(agent|shell-[0-9]+)$/);
|
|
@@ -15816,7 +15839,7 @@ var wsServerMessageSchema = external_exports.discriminatedUnion("t", [
|
|
|
15816
15839
|
]);
|
|
15817
15840
|
|
|
15818
15841
|
// ../shared/src/remote/protocol.ts
|
|
15819
|
-
var REMOTE_PROTOCOL_VERSION =
|
|
15842
|
+
var REMOTE_PROTOCOL_VERSION = 4;
|
|
15820
15843
|
var REMOTE_POLICY = {
|
|
15821
15844
|
chunkBytes: 32 * 1024,
|
|
15822
15845
|
frameBytes: 48 * 1024,
|
|
@@ -16196,6 +16219,7 @@ var sourceSchema = external_exports.string().min(1).max(PUDDLANG_MAX_SOURCE).ref
|
|
|
16196
16219
|
);
|
|
16197
16220
|
var puddlangSpawnSchema = external_exports.object({
|
|
16198
16221
|
agent: external_exports.string().min(1).max(100),
|
|
16222
|
+
mode: agentModeSchema.optional(),
|
|
16199
16223
|
account: external_exports.union([external_exports.string().min(1).max(100), external_exports.number().int().positive()]).optional(),
|
|
16200
16224
|
project: external_exports.string().min(1).max(200).optional(),
|
|
16201
16225
|
worktree: external_exports.string().min(1).max(4096).optional(),
|
|
@@ -16271,7 +16295,14 @@ var puddlangContextSchema = external_exports.object({
|
|
|
16271
16295
|
accounts: external_exports.array(
|
|
16272
16296
|
external_exports.object({ id: external_exports.number(), label: external_exports.string(), agent: external_exports.string(), logged_in: external_exports.boolean() })
|
|
16273
16297
|
),
|
|
16274
|
-
agents: external_exports.array(
|
|
16298
|
+
agents: external_exports.array(
|
|
16299
|
+
external_exports.object({
|
|
16300
|
+
id: external_exports.string(),
|
|
16301
|
+
/** Automated turn support in either mode; this is not a mode name. */
|
|
16302
|
+
scripted_turns: external_exports.boolean(),
|
|
16303
|
+
modes: external_exports.array(agentModeSchema).optional()
|
|
16304
|
+
})
|
|
16305
|
+
)
|
|
16275
16306
|
});
|
|
16276
16307
|
|
|
16277
16308
|
// ../shared/src/api/puddlang-mcp.ts
|
package/dist/index.js
CHANGED
|
@@ -3925,7 +3925,7 @@ import { createInterface } from "node:readline";
|
|
|
3925
3925
|
import { Writable } from "node:stream";
|
|
3926
3926
|
|
|
3927
3927
|
// ../shared/src/protocol.ts
|
|
3928
|
-
var PROTOCOL_VERSION = { major:
|
|
3928
|
+
var PROTOCOL_VERSION = { major: 24, minor: 2 };
|
|
3929
3929
|
|
|
3930
3930
|
// ../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/classic/external.js
|
|
3931
3931
|
var external_exports = {};
|
|
@@ -18477,6 +18477,7 @@ var notificationContentSchema = external_exports.object({
|
|
|
18477
18477
|
var desktopNotificationRequestSchema = external_exports.object({
|
|
18478
18478
|
id: external_exports.string().min(1).max(128),
|
|
18479
18479
|
title: external_exports.string().min(1).max(160),
|
|
18480
|
+
subtitle: external_exports.string().min(1).max(160).optional(),
|
|
18480
18481
|
body: external_exports.string().min(1).max(256),
|
|
18481
18482
|
target: notificationTargetSchema.optional()
|
|
18482
18483
|
}).strict();
|
|
@@ -18522,7 +18523,20 @@ var agentLifecycleSignalSchema = external_exports.object({
|
|
|
18522
18523
|
native_created_at: external_exports.iso.datetime({ offset: true }).optional(),
|
|
18523
18524
|
native_updated_at: external_exports.iso.datetime({ offset: true }).optional()
|
|
18524
18525
|
});
|
|
18525
|
-
var
|
|
18526
|
+
var agentTurnSignalSchema = external_exports.object({
|
|
18527
|
+
nonce: external_exports.string().min(16).max(200),
|
|
18528
|
+
event: external_exports.enum(["turn_start", "turn_complete", "turn_failed"]),
|
|
18529
|
+
agent_session_ref: external_exports.string().min(1).max(200),
|
|
18530
|
+
turn_id: external_exports.string().min(1).max(200),
|
|
18531
|
+
prompt_hash: external_exports.string().regex(/^[a-f0-9]{64}$/).optional(),
|
|
18532
|
+
reply: external_exports.string().max(256 * 1024).refine((value) => new TextEncoder().encode(value).length <= 256 * 1024).optional(),
|
|
18533
|
+
error: external_exports.string().max(4096).optional()
|
|
18534
|
+
});
|
|
18535
|
+
var agentSignalRequestSchema = external_exports.union([
|
|
18536
|
+
statusSignalSchema,
|
|
18537
|
+
agentLifecycleSignalSchema,
|
|
18538
|
+
agentTurnSignalSchema
|
|
18539
|
+
]);
|
|
18526
18540
|
|
|
18527
18541
|
// ../shared/src/api/config.ts
|
|
18528
18542
|
var fields = {
|
|
@@ -18861,6 +18875,7 @@ var sessionStatusSchema = external_exports.enum([
|
|
|
18861
18875
|
"archived"
|
|
18862
18876
|
]);
|
|
18863
18877
|
var sessionKindSchema = external_exports.enum(["agent", "terminal"]);
|
|
18878
|
+
var agentModeSchema = external_exports.enum(["interactive", "headless"]);
|
|
18864
18879
|
var sessionSchema = external_exports.object({
|
|
18865
18880
|
id: sessionId,
|
|
18866
18881
|
project_id: projectId,
|
|
@@ -18874,6 +18889,8 @@ var sessionSchema = external_exports.object({
|
|
|
18874
18889
|
kind: sessionKindSchema,
|
|
18875
18890
|
/** Null for terminal sessions, which run a plain shell rather than an agent. */
|
|
18876
18891
|
agent_type: external_exports.string().nullable(),
|
|
18892
|
+
/** Native TUI or structured CLI execution with a terminal transcript. */
|
|
18893
|
+
agent_mode: agentModeSchema.optional(),
|
|
18877
18894
|
/** Live foreground agent in a terminal session; icon hint only, never persisted. */
|
|
18878
18895
|
detected_agent_type: external_exports.string().nullable().optional(),
|
|
18879
18896
|
agent_session_ref: external_exports.string().nullable(),
|
|
@@ -19014,13 +19031,13 @@ var archiveRequestSchema = external_exports.object({
|
|
|
19014
19031
|
});
|
|
19015
19032
|
|
|
19016
19033
|
// ../shared/src/api/projects.ts
|
|
19017
|
-
var
|
|
19034
|
+
var projectAbbrev2 = external_exports.string().min(1).max(5);
|
|
19018
19035
|
var projectSchema = external_exports.object({
|
|
19019
19036
|
id: projectId,
|
|
19020
19037
|
profile_id: profileId,
|
|
19021
19038
|
repo_id: rowId,
|
|
19022
19039
|
name: external_exports.string(),
|
|
19023
|
-
abbrev:
|
|
19040
|
+
abbrev: projectAbbrev2.nullable().default(null),
|
|
19024
19041
|
/**
|
|
19025
19042
|
* Hidden from the homescreen but never deleted — every session, worktree, and
|
|
19026
19043
|
* bit of data is retained, and un-archiving restores it all (SPEC §11).
|
|
@@ -19034,11 +19051,11 @@ var createProjectRequestSchema = external_exports.object({
|
|
|
19034
19051
|
profile_id: profileId,
|
|
19035
19052
|
repo_id: rowId,
|
|
19036
19053
|
name: external_exports.string().min(1).max(100),
|
|
19037
|
-
abbrev:
|
|
19054
|
+
abbrev: projectAbbrev2.optional()
|
|
19038
19055
|
});
|
|
19039
19056
|
var patchProjectRequestSchema = external_exports.object({
|
|
19040
19057
|
name: external_exports.string().min(1).max(100).optional(),
|
|
19041
|
-
abbrev:
|
|
19058
|
+
abbrev: projectAbbrev2.optional(),
|
|
19042
19059
|
archived: external_exports.boolean().optional()
|
|
19043
19060
|
});
|
|
19044
19061
|
var projectDetailSchema = external_exports.object({
|
|
@@ -19653,6 +19670,12 @@ var cockpitRefreshResponseSchema = external_exports.object({
|
|
|
19653
19670
|
refreshId: external_exports.string().uuid(),
|
|
19654
19671
|
instance: external_exports.string().uuid()
|
|
19655
19672
|
});
|
|
19673
|
+
var cockpitFileManagerSchema = external_exports.object({
|
|
19674
|
+
name: external_exports.enum(["Finder", "File Explorer", "File Manager"]).nullable()
|
|
19675
|
+
});
|
|
19676
|
+
var cockpitRevealRequestSchema = external_exports.object({
|
|
19677
|
+
path: external_exports.string().min(1).max(4096).refine((path) => !path.includes("\0"))
|
|
19678
|
+
}).strict();
|
|
19656
19679
|
|
|
19657
19680
|
// ../shared/src/ws/messages.ts
|
|
19658
19681
|
var termId = external_exports.string().regex(/^(agent|shell-[0-9]+)$/);
|
|
@@ -19736,7 +19759,7 @@ var wsServerMessageSchema = external_exports.discriminatedUnion("t", [
|
|
|
19736
19759
|
]);
|
|
19737
19760
|
|
|
19738
19761
|
// ../shared/src/remote/protocol.ts
|
|
19739
|
-
var REMOTE_PROTOCOL_VERSION =
|
|
19762
|
+
var REMOTE_PROTOCOL_VERSION = 4;
|
|
19740
19763
|
var REMOTE_POLICY = {
|
|
19741
19764
|
chunkBytes: 32 * 1024,
|
|
19742
19765
|
frameBytes: 48 * 1024,
|
|
@@ -20116,6 +20139,7 @@ var sourceSchema = external_exports.string().min(1).max(PUDDLANG_MAX_SOURCE).ref
|
|
|
20116
20139
|
);
|
|
20117
20140
|
var puddlangSpawnSchema = external_exports.object({
|
|
20118
20141
|
agent: external_exports.string().min(1).max(100),
|
|
20142
|
+
mode: agentModeSchema.optional(),
|
|
20119
20143
|
account: external_exports.union([external_exports.string().min(1).max(100), external_exports.number().int().positive()]).optional(),
|
|
20120
20144
|
project: external_exports.string().min(1).max(200).optional(),
|
|
20121
20145
|
worktree: external_exports.string().min(1).max(4096).optional(),
|
|
@@ -20191,7 +20215,14 @@ var puddlangContextSchema = external_exports.object({
|
|
|
20191
20215
|
accounts: external_exports.array(
|
|
20192
20216
|
external_exports.object({ id: external_exports.number(), label: external_exports.string(), agent: external_exports.string(), logged_in: external_exports.boolean() })
|
|
20193
20217
|
),
|
|
20194
|
-
agents: external_exports.array(
|
|
20218
|
+
agents: external_exports.array(
|
|
20219
|
+
external_exports.object({
|
|
20220
|
+
id: external_exports.string(),
|
|
20221
|
+
/** Automated turn support in either mode; this is not a mode name. */
|
|
20222
|
+
scripted_turns: external_exports.boolean(),
|
|
20223
|
+
modes: external_exports.array(agentModeSchema).optional()
|
|
20224
|
+
})
|
|
20225
|
+
)
|
|
20195
20226
|
});
|
|
20196
20227
|
|
|
20197
20228
|
// ../shared/src/api/puddlang-mcp.ts
|
|
@@ -21749,7 +21780,7 @@ async function acquireAuthority(transport) {
|
|
|
21749
21780
|
// src/cli/run.ts
|
|
21750
21781
|
init_attach();
|
|
21751
21782
|
import { existsSync as existsSync7 } from "node:fs";
|
|
21752
|
-
import { dirname as
|
|
21783
|
+
import { dirname as dirname13, join as join17 } from "node:path";
|
|
21753
21784
|
import { fileURLToPath as fileURLToPath5 } from "node:url";
|
|
21754
21785
|
|
|
21755
21786
|
// src/lib/browser.ts
|
|
@@ -21793,7 +21824,7 @@ import { readFileSync as readFileSync4 } from "node:fs";
|
|
|
21793
21824
|
import { dirname as dirname4, join as join5 } from "node:path";
|
|
21794
21825
|
import { fileURLToPath as fileURLToPath2 } from "node:url";
|
|
21795
21826
|
function cliVersion() {
|
|
21796
|
-
if (true) return "0.3.
|
|
21827
|
+
if (true) return "0.3.3";
|
|
21797
21828
|
const here = dirname4(fileURLToPath2(import.meta.url));
|
|
21798
21829
|
for (const candidate of [
|
|
21799
21830
|
join5(here, "..", "..", "package.json"),
|
|
@@ -22192,7 +22223,9 @@ var RELEASE_PROTOCOLS = {
|
|
|
22192
22223
|
"0.2.23": { major: 22, minor: 5 },
|
|
22193
22224
|
"0.2.24": { major: 22, minor: 5 },
|
|
22194
22225
|
"0.3.0": { major: 23, minor: 0 },
|
|
22195
|
-
"0.3.1": { major: 23, minor: 0 }
|
|
22226
|
+
"0.3.1": { major: 23, minor: 0 },
|
|
22227
|
+
"0.3.2": { major: 24, minor: 0 },
|
|
22228
|
+
"0.3.3": { major: 24, minor: 2 }
|
|
22196
22229
|
};
|
|
22197
22230
|
function validProtocol(value) {
|
|
22198
22231
|
if (typeof value !== "object" || value === null) return false;
|
|
@@ -23638,6 +23671,34 @@ async function checkRemoteRegistration(req, res, authorised) {
|
|
|
23638
23671
|
}
|
|
23639
23672
|
}
|
|
23640
23673
|
|
|
23674
|
+
// src/lib/serve/file-manager.ts
|
|
23675
|
+
function fileManagerHandler(manager) {
|
|
23676
|
+
let busy = false;
|
|
23677
|
+
return async (req, res, authorised) => {
|
|
23678
|
+
if (req.method === "GET") return json2(res, 200, { name: manager?.name ?? null });
|
|
23679
|
+
if (req.method !== "POST") return fail(res, 405, "method_not_allowed");
|
|
23680
|
+
if (!manager) return fail(res, 404, "file_manager_unavailable");
|
|
23681
|
+
const request = cockpitRevealRequestSchema.parse(await readJson(req));
|
|
23682
|
+
if (!authorised()) return fail(res, 401, "browser_rejected");
|
|
23683
|
+
if (busy) return fail(res, 409, "file_manager_busy", "A folder is already being revealed.");
|
|
23684
|
+
busy = true;
|
|
23685
|
+
try {
|
|
23686
|
+
await manager.reveal(request.path, authorised);
|
|
23687
|
+
res.writeHead(204);
|
|
23688
|
+
res.end();
|
|
23689
|
+
} catch (error51) {
|
|
23690
|
+
fail(
|
|
23691
|
+
res,
|
|
23692
|
+
400,
|
|
23693
|
+
"reveal_failed",
|
|
23694
|
+
error51 instanceof Error ? error51.message : "Could not reveal this path."
|
|
23695
|
+
);
|
|
23696
|
+
} finally {
|
|
23697
|
+
busy = false;
|
|
23698
|
+
}
|
|
23699
|
+
};
|
|
23700
|
+
}
|
|
23701
|
+
|
|
23641
23702
|
// src/lib/serve/ui-server.ts
|
|
23642
23703
|
var DEFAULT_UI_PORT = 7433;
|
|
23643
23704
|
var MAX_PORT_PROBES = 50;
|
|
@@ -23647,6 +23708,9 @@ async function startUiServer(opts) {
|
|
|
23647
23708
|
const tracker = new ProxySocketTracker();
|
|
23648
23709
|
const serveStatic = createStaticHandler(opts.assetsDir);
|
|
23649
23710
|
const handleRemoteAccess = remoteAccessHandler(opts.remoteAccess);
|
|
23711
|
+
const handleFileManager = fileManagerHandler(
|
|
23712
|
+
opts.identity === "local" ? opts.fileManager : void 0
|
|
23713
|
+
);
|
|
23650
23714
|
const nonce = randomUUID3();
|
|
23651
23715
|
let origin = "";
|
|
23652
23716
|
let proxyOrigin = "";
|
|
@@ -23695,6 +23759,8 @@ async function startUiServer(opts) {
|
|
|
23695
23759
|
}
|
|
23696
23760
|
if (url2.pathname === "/cockpit/local-sync")
|
|
23697
23761
|
return handleLocalSync(req, res, opts.localSync, () => browsers.valid(browser));
|
|
23762
|
+
if (url2.pathname === "/cockpit/file-manager")
|
|
23763
|
+
return handleFileManager(req, res, () => browsers.valid(browser));
|
|
23698
23764
|
if (url2.pathname === "/cockpit/remote")
|
|
23699
23765
|
return handleRemoteAccess(req, res, () => browsers.valid(browser));
|
|
23700
23766
|
if (url2.pathname === "/cockpit/remote/registration") {
|
|
@@ -24358,6 +24424,69 @@ function sanitise(record2) {
|
|
|
24358
24424
|
// src/lib/start.ts
|
|
24359
24425
|
import { join as join14 } from "node:path";
|
|
24360
24426
|
init_types();
|
|
24427
|
+
|
|
24428
|
+
// src/lib/file-manager.ts
|
|
24429
|
+
import { execFile, spawn as spawn6 } from "node:child_process";
|
|
24430
|
+
import { lstat, stat } from "node:fs/promises";
|
|
24431
|
+
import { dirname as dirname9, isAbsolute, win32 } from "node:path";
|
|
24432
|
+
import { pathToFileURL } from "node:url";
|
|
24433
|
+
import { promisify } from "node:util";
|
|
24434
|
+
var execute = promisify(execFile);
|
|
24435
|
+
function localFileManager(platform = process.platform) {
|
|
24436
|
+
const name = platform === "darwin" ? "Finder" : platform === "win32" ? "File Explorer" : platform === "linux" ? "File Manager" : null;
|
|
24437
|
+
if (!name) return;
|
|
24438
|
+
return {
|
|
24439
|
+
name,
|
|
24440
|
+
async reveal(path, authorised) {
|
|
24441
|
+
if (!(platform === "win32" ? win32.isAbsolute(path) : isAbsolute(path)) || path.includes("\0"))
|
|
24442
|
+
throw new Error("Expected an absolute local path.");
|
|
24443
|
+
const entry = await lstat(path);
|
|
24444
|
+
const directory = entry.isDirectory() || entry.isSymbolicLink() && await stat(path).then(
|
|
24445
|
+
(target) => target.isDirectory(),
|
|
24446
|
+
() => false
|
|
24447
|
+
);
|
|
24448
|
+
const run3 = async (command, args, detached = false) => {
|
|
24449
|
+
if (!authorised()) throw new Error("Browser authorisation expired.");
|
|
24450
|
+
if (detached) {
|
|
24451
|
+
await new Promise((resolve6, reject) => {
|
|
24452
|
+
const child = spawn6(command, args, { stdio: "ignore", detached: true });
|
|
24453
|
+
child.once("error", reject);
|
|
24454
|
+
child.once("spawn", () => {
|
|
24455
|
+
child.unref();
|
|
24456
|
+
resolve6();
|
|
24457
|
+
});
|
|
24458
|
+
});
|
|
24459
|
+
return;
|
|
24460
|
+
}
|
|
24461
|
+
await execute(command, args, { timeout: 1e4, maxBuffer: 16384, windowsHide: true });
|
|
24462
|
+
};
|
|
24463
|
+
if (platform === "darwin") {
|
|
24464
|
+
await run3("/usr/bin/open", directory ? ["-a", "Finder", "--", path] : ["-R", "--", path]);
|
|
24465
|
+
} else if (platform === "win32") {
|
|
24466
|
+
await run3("explorer.exe", directory ? [path] : ["/select,", path], true);
|
|
24467
|
+
} else {
|
|
24468
|
+
try {
|
|
24469
|
+
await run3("gdbus", [
|
|
24470
|
+
"call",
|
|
24471
|
+
"--session",
|
|
24472
|
+
"--dest",
|
|
24473
|
+
"org.freedesktop.FileManager1",
|
|
24474
|
+
"--object-path",
|
|
24475
|
+
"/org/freedesktop/FileManager1",
|
|
24476
|
+
"--method",
|
|
24477
|
+
`org.freedesktop.FileManager1.${directory ? "ShowFolders" : "ShowItems"}`,
|
|
24478
|
+
JSON.stringify([pathToFileURL(path).href]),
|
|
24479
|
+
""
|
|
24480
|
+
]);
|
|
24481
|
+
} catch {
|
|
24482
|
+
await run3("xdg-open", [directory ? path : dirname9(path)], true);
|
|
24483
|
+
}
|
|
24484
|
+
}
|
|
24485
|
+
}
|
|
24486
|
+
};
|
|
24487
|
+
}
|
|
24488
|
+
|
|
24489
|
+
// src/lib/start.ts
|
|
24361
24490
|
async function startLocal(opts) {
|
|
24362
24491
|
const logger = opts.logger ?? silentLogger;
|
|
24363
24492
|
const transport = new LocalTransport();
|
|
@@ -24392,6 +24521,7 @@ async function startLocal(opts) {
|
|
|
24392
24521
|
target: { host: "127.0.0.1", port: endpoint.port },
|
|
24393
24522
|
...opts.onRefreshRequest !== void 0 ? { control: { onRefresh: opts.onRefreshRequest } } : {},
|
|
24394
24523
|
localSync: { file: join14(clientHome(), "local-sync.json") },
|
|
24524
|
+
fileManager: localFileManager(),
|
|
24395
24525
|
remoteAccess: new RemoteAccessControl(transport)
|
|
24396
24526
|
});
|
|
24397
24527
|
currentUi = ui;
|
|
@@ -24446,23 +24576,23 @@ init_types();
|
|
|
24446
24576
|
|
|
24447
24577
|
// src/cli/manage-cli.ts
|
|
24448
24578
|
init_types();
|
|
24449
|
-
import { spawn as
|
|
24450
|
-
import { dirname as
|
|
24579
|
+
import { spawn as spawn8 } from "node:child_process";
|
|
24580
|
+
import { dirname as dirname11 } from "node:path";
|
|
24451
24581
|
|
|
24452
24582
|
// src/lib/standalone-cli.ts
|
|
24453
24583
|
init_types();
|
|
24454
|
-
import { spawn as
|
|
24584
|
+
import { spawn as spawn7 } from "node:child_process";
|
|
24455
24585
|
import { existsSync as existsSync5, lstatSync as lstatSync2, readFileSync as readFileSync9, realpathSync as realpathSync2 } from "node:fs";
|
|
24456
24586
|
import { mkdir as mkdir2, readFile as readFile2, rm as rm2, unlink } from "node:fs/promises";
|
|
24457
|
-
import { basename, dirname as
|
|
24587
|
+
import { basename, dirname as dirname10, isAbsolute as isAbsolute2, join as join15, resolve as resolve5 } from "node:path";
|
|
24458
24588
|
import { fileURLToPath as fileURLToPath4 } from "node:url";
|
|
24459
24589
|
function standaloneInstallation(entryFile = fileURLToPath4(import.meta.url), execPath = process.execPath) {
|
|
24460
|
-
const release = resolve5(
|
|
24590
|
+
const release = resolve5(dirname10(entryFile), "..");
|
|
24461
24591
|
if (!existsSync5(join15(release, "STANDALONE"))) return null;
|
|
24462
24592
|
try {
|
|
24463
24593
|
const root = resolve5(release, "..", "..");
|
|
24464
24594
|
const record2 = JSON.parse(readFileSync9(join15(root, "installation.json"), "utf8"));
|
|
24465
|
-
if (readFileSync9(join15(release, "STANDALONE"), "utf8").trim() !== "puddle-cli" || readFileSync9(join15(root, "INSTALLATION"), "utf8").trim() !== "puddle-cli" ||
|
|
24595
|
+
if (readFileSync9(join15(release, "STANDALONE"), "utf8").trim() !== "puddle-cli" || readFileSync9(join15(root, "INSTALLATION"), "utf8").trim() !== "puddle-cli" || dirname10(release) !== join15(root, "versions") || realpathSync2(release) !== release || realpathSync2(execPath) !== join15(release, "bin/node") || record2.kind !== "puddle-cli" || typeof record2.launcher !== "string" || !isAbsolute2(record2.launcher) || record2.scriptLauncher !== void 0 && record2.scriptLauncher !== join15(dirname10(record2.launcher), "pudl") && record2.scriptLauncher !== join15(dirname10(record2.launcher), "puddlang"))
|
|
24466
24596
|
throw new Error("Installation metadata does not match this CLI");
|
|
24467
24597
|
return {
|
|
24468
24598
|
root,
|
|
@@ -24486,12 +24616,12 @@ function upgradeStandaloneCli(installation, version2, repo) {
|
|
|
24486
24616
|
"--prefix",
|
|
24487
24617
|
installation.root,
|
|
24488
24618
|
"--bin-dir",
|
|
24489
|
-
|
|
24619
|
+
dirname10(installation.launcher)
|
|
24490
24620
|
];
|
|
24491
24621
|
if (version2 !== void 0) args.push("--version", version2);
|
|
24492
24622
|
if (repo !== void 0) args.push("--repo", repo);
|
|
24493
24623
|
return new Promise((resolve6, reject) => {
|
|
24494
|
-
const child =
|
|
24624
|
+
const child = spawn7("sh", args, { stdio: ["pipe", "inherit", "inherit"] });
|
|
24495
24625
|
child.on("error", reject);
|
|
24496
24626
|
child.stdin.on("error", (error51) => {
|
|
24497
24627
|
if (error51.code !== "EPIPE") reject(error51);
|
|
@@ -24546,7 +24676,7 @@ function upgradeCli(version2, logger) {
|
|
|
24546
24676
|
const spec = `@puddle-code/cli@${version2 ?? "latest"}`;
|
|
24547
24677
|
logger.info(`puddle CLI ${cliVersion()} \u2014 asking npm for ${version2 ?? "the latest release"}`);
|
|
24548
24678
|
return new Promise((resolve6, reject) => {
|
|
24549
|
-
const child =
|
|
24679
|
+
const child = spawn8("npm", ["install", "-g", spec], { stdio: "inherit" });
|
|
24550
24680
|
child.on(
|
|
24551
24681
|
"error",
|
|
24552
24682
|
() => reject(
|
|
@@ -24571,7 +24701,7 @@ async function removeCli(yes, logger) {
|
|
|
24571
24701
|
const standalone = standaloneInstallation();
|
|
24572
24702
|
if (standalone) {
|
|
24573
24703
|
const proceed2 = await confirm(
|
|
24574
|
-
`Remove the standalone CLI at ${standalone.root} and its launcher in ${
|
|
24704
|
+
`Remove the standalone CLI at ${standalone.root} and its launcher in ${dirname11(standalone.launcher)}? Close its cockpits first; daemons and their sessions are untouched.`,
|
|
24575
24705
|
{ skip: yes }
|
|
24576
24706
|
);
|
|
24577
24707
|
if (!proceed2) {
|
|
@@ -24583,7 +24713,7 @@ async function removeCli(yes, logger) {
|
|
|
24583
24713
|
return 0;
|
|
24584
24714
|
}
|
|
24585
24715
|
const managed = await new Promise((resolve6) => {
|
|
24586
|
-
const child =
|
|
24716
|
+
const child = spawn8("npm", ["ls", "-g", "@puddle-code/cli", "--depth=0"], { stdio: "ignore" });
|
|
24587
24717
|
child.on("error", () => resolve6(false));
|
|
24588
24718
|
child.on("exit", (code) => resolve6(code === 0));
|
|
24589
24719
|
});
|
|
@@ -24603,7 +24733,7 @@ async function removeCli(yes, logger) {
|
|
|
24603
24733
|
return 0;
|
|
24604
24734
|
}
|
|
24605
24735
|
return new Promise((resolve6, reject) => {
|
|
24606
|
-
const child =
|
|
24736
|
+
const child = spawn8("npm", ["uninstall", "-g", "@puddle-code/cli"], { stdio: "inherit" });
|
|
24607
24737
|
child.on("error", () => reject(new CliError("not_installed", "npm is not on PATH")));
|
|
24608
24738
|
child.on("exit", (code) => {
|
|
24609
24739
|
if (code === 0) {
|
|
@@ -24617,7 +24747,7 @@ async function removeCli(yes, logger) {
|
|
|
24617
24747
|
}
|
|
24618
24748
|
|
|
24619
24749
|
// src/cli/manage.ts
|
|
24620
|
-
import { spawn as
|
|
24750
|
+
import { spawn as spawn10 } from "node:child_process";
|
|
24621
24751
|
import { existsSync as existsSync6 } from "node:fs";
|
|
24622
24752
|
import { chmod as chmod2, copyFile, mkdir as mkdir3, rename, rm as rm3 } from "node:fs/promises";
|
|
24623
24753
|
import { homedir as homedir2 } from "node:os";
|
|
@@ -24758,9 +24888,9 @@ async function upgradeDaemon(transport, opts = {}) {
|
|
|
24758
24888
|
}
|
|
24759
24889
|
|
|
24760
24890
|
// src/cli/detach.ts
|
|
24761
|
-
import { spawn as
|
|
24891
|
+
import { spawn as spawn9 } from "node:child_process";
|
|
24762
24892
|
import { closeSync as closeSync2, mkdirSync as mkdirSync6, openSync as openSync2, readFileSync as readFileSync10 } from "node:fs";
|
|
24763
|
-
import { dirname as
|
|
24893
|
+
import { dirname as dirname12 } from "node:path";
|
|
24764
24894
|
init_types();
|
|
24765
24895
|
var COCKPIT_CHILD_ENV = "PUDDLE_COCKPIT_CHILD";
|
|
24766
24896
|
var READY_TIMEOUT_MS = 3e5;
|
|
@@ -24799,10 +24929,10 @@ async function launchDetached(opts) {
|
|
|
24799
24929
|
}
|
|
24800
24930
|
if (target !== "local") await new SshTransport(target).open();
|
|
24801
24931
|
const logFile = cockpitLogPath(target);
|
|
24802
|
-
mkdirSync6(
|
|
24932
|
+
mkdirSync6(dirname12(logFile), { recursive: true });
|
|
24803
24933
|
const fd = openSync2(logFile, "w");
|
|
24804
24934
|
const argv = opts.argv ?? process.argv.slice(2);
|
|
24805
|
-
const child =
|
|
24935
|
+
const child = spawn9(process.execPath, [process.argv[1] ?? "", ...argv], {
|
|
24806
24936
|
detached: true,
|
|
24807
24937
|
stdio: ["ignore", fd, fd, "ipc"],
|
|
24808
24938
|
env: { ...process.env, [COCKPIT_CHILD_ENV]: "1" }
|
|
@@ -24867,7 +24997,7 @@ async function followStartup(target, childPid, logFile) {
|
|
|
24867
24997
|
}
|
|
24868
24998
|
function spawnDetachedRefresh(target, argv, refreshId) {
|
|
24869
24999
|
const logFile = cockpitLogPath(target);
|
|
24870
|
-
mkdirSync6(
|
|
25000
|
+
mkdirSync6(dirname12(logFile), { recursive: true });
|
|
24871
25001
|
const fd = openSync2(logFile, "a");
|
|
24872
25002
|
const env = {
|
|
24873
25003
|
...process.env,
|
|
@@ -24875,7 +25005,7 @@ function spawnDetachedRefresh(target, argv, refreshId) {
|
|
|
24875
25005
|
PUDDLE_INTERNAL_REFRESH: "1"
|
|
24876
25006
|
};
|
|
24877
25007
|
delete env[COCKPIT_CHILD_ENV];
|
|
24878
|
-
const child =
|
|
25008
|
+
const child = spawn9(process.execPath, [process.argv[1] ?? "", ...argv], {
|
|
24879
25009
|
detached: true,
|
|
24880
25010
|
stdio: ["ignore", fd, fd],
|
|
24881
25011
|
env
|
|
@@ -25110,7 +25240,7 @@ async function installDesktopAppImage(version2, logger) {
|
|
|
25110
25240
|
...protocol ? { protocol } : {}
|
|
25111
25241
|
});
|
|
25112
25242
|
logger.info(`installed \u2014 run it directly (${target}) or add it to your launcher`);
|
|
25113
|
-
const opener =
|
|
25243
|
+
const opener = spawn10("xdg-open", [dir], { stdio: "ignore", detached: true });
|
|
25114
25244
|
opener.on("error", () => void 0);
|
|
25115
25245
|
opener.unref();
|
|
25116
25246
|
return 0;
|
|
@@ -25277,7 +25407,7 @@ function timestampedLogger() {
|
|
|
25277
25407
|
|
|
25278
25408
|
// src/cli/run.ts
|
|
25279
25409
|
function assetsDir() {
|
|
25280
|
-
const here =
|
|
25410
|
+
const here = dirname13(fileURLToPath5(import.meta.url));
|
|
25281
25411
|
for (const candidate of [join17(here, "public"), join17(here, "..", "..", "dist", "public")]) {
|
|
25282
25412
|
if (existsSync7(join17(candidate, "index.html"))) return candidate;
|
|
25283
25413
|
}
|