@puddle-code/cli 0.3.2 → 0.3.4
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 +9 -7
- package/dist/host-control.mjs +67 -6
- package/dist/index.js +191 -31
- package/dist/public/assets/App-CwV0Dizo.js +2 -0
- package/dist/public/assets/Dashboard-fA7E3Mr1.js +1 -0
- package/dist/public/assets/EditorTabClose-DNWGZZN8.js +1 -0
- package/dist/public/assets/FindWidget-BSK2PIfO.js +1 -0
- package/dist/public/assets/LazyTerminal-CAvxgexS.js +2 -0
- package/dist/public/assets/{ModelRefcount-Dkp1avzM.js → ModelRefcount-CJK-g5rf.js} +1 -1
- package/dist/public/assets/NewProjectDialog-eDAOcbIM.js +1 -0
- package/dist/public/assets/PaneEditorBody-Cxn0s84L.js +302 -0
- package/dist/public/assets/PdfViewer-BY5xRKk1.js +2 -0
- package/dist/public/assets/SettingsDialog-Sd6i7Plz.js +8 -0
- package/dist/public/assets/Terminal-CqjwbNAI.js +66 -0
- package/dist/public/assets/Workspace-C-M1AjMn.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-cjbSLnao.js +73 -0
- package/dist/public/assets/{blockDiagram-I7D4REHJ-NHlOsaCN.js → blockDiagram-I7D4REHJ-TUFuv4qI.js} +1 -1
- package/dist/public/assets/buffer-store-BAQjeFXg.js +16 -0
- package/dist/public/assets/button-Chvl9hcE.js +1 -0
- package/dist/public/assets/{c4Diagram-7LVT6UL2-ZLfrwKT4.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-Brp_wxZT.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-9vLeKuoB.js → chunk-75Z2AOVW-CYC6lmPG.js} +1 -1
- package/dist/public/assets/{chunk-CLGD4ZFX-B8Oa13vy.js → chunk-CLGD4ZFX-85mvsF4F.js} +1 -1
- package/dist/public/assets/chunk-DU6HZSFF-1ZoT19aa.js +125 -0
- package/dist/public/assets/{chunk-F27PBJKO-I29_mrbz.js → chunk-F27PBJKO-DM71futS.js} +1 -1
- package/dist/public/assets/{chunk-GMAD6QVW-ZzqGXNRY.js → chunk-GMAD6QVW-BzDEhlK8.js} +1 -1
- package/dist/public/assets/{chunk-GVQU2GXP-DiJctosx.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-yuPnJltA.js → chunk-IMKFNOWR-CLsPi8Op.js} +1 -1
- package/dist/public/assets/chunk-KI3K4JFJ-v5_17D28.js +1 -0
- package/dist/public/assets/{chunk-L3NEJ4N5-DB3LOw2c.js → chunk-L3NEJ4N5-BW3s5_r9.js} +1 -1
- package/dist/public/assets/{chunk-OSK3NFVY-ygO9ccvX.js → chunk-OSK3NFVY-Cs_K17E_.js} +1 -1
- package/dist/public/assets/chunk-OUJLGHUK-FHDQe81Z.js +2 -0
- package/dist/public/assets/{chunk-P2QGCYS3-CaO30dnF.js → chunk-P2QGCYS3-C5-f0Lvg.js} +1 -1
- package/dist/public/assets/{chunk-POPQ4Y6H-BS_wlBQ7.js → chunk-POPQ4Y6H-gkafJx1Z.js} +1 -1
- package/dist/public/assets/{chunk-PWAF6VOD-BYtVJDwT.js → chunk-PWAF6VOD-CTSTb7zN.js} +1 -1
- package/dist/public/assets/{chunk-SHT3W25Y-DbWwFCez.js → chunk-SHT3W25Y-Cg6sVFNA.js} +1 -1
- package/dist/public/assets/{chunk-SVP7TREG-DLDU3lFF.js → chunk-SVP7TREG-DRUnItYx.js} +1 -1
- package/dist/public/assets/{chunk-TICWLB2K-Bo_jKuAY.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-DVUv5Z6a.js +1 -0
- package/dist/public/assets/copy-Df7qIcX6.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-DJ40uVpF.js → dagre-GXQ25YYZ-BjnR_o63.js} +1 -1
- package/dist/public/assets/{diagram-S7CK7UJ4-CakLFIEW.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-VJip2Tpi.js → diagram-VX7I27RA-DYP31PbY.js} +2 -2
- package/dist/public/assets/{diagram-Z3DM3KII-CPQuWy39.js → diagram-Z3DM3KII-C-mC8cmq.js} +1 -1
- package/dist/public/assets/dialog-Bnex_wlx.js +1 -0
- package/dist/public/assets/disclosure-C2uTs3Vm.js +1 -0
- package/dist/public/assets/dist-B67qxih2.js +1 -0
- package/dist/public/assets/dist-BCwJL3w9.js +1 -0
- package/dist/public/assets/dist-Cl5AP2As.js +1 -0
- package/dist/public/assets/dist-DmyIHyF9.js +1 -0
- package/dist/public/assets/ebnfDiagram-PWID7BFC-CnSa44Tb.js +1 -0
- package/dist/public/assets/{erDiagram-RLTQ6QDP-DqwnnH7t.js → erDiagram-RLTQ6QDP-ZmDlrO9k.js} +1 -1
- package/dist/public/assets/{errors-BkbAF9Bu.js → errors-BiS6nBXL.js} +1 -1
- package/dist/public/assets/es2015-CrC2hHeB.js +41 -0
- 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-BvWbPqg4.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-CW1P_8TN.js +10 -0
- package/dist/public/assets/index-XBWIhnuP.css +2 -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-Bq13tOFJ.js → ishikawaDiagram-5VMMS53U-DCFnvrdr.js} +1 -1
- package/dist/public/assets/{journeyDiagram-3NMN7TZE-7GJvjukT.js → journeyDiagram-3NMN7TZE-6o4KvbhJ.js} +1 -1
- package/dist/public/assets/{jsonMode-C6jAdn8r.js → jsonMode-BijgXT6I.js} +1 -1
- package/dist/public/assets/jsx-runtime-ffCh33zF.js +1 -0
- package/dist/public/assets/{kanban-definition-UXKFOSKX-BIFvSwV9.js → kanban-definition-UXKFOSKX-CQKuhkFV.js} +1 -1
- package/dist/public/assets/{line-BjlS8UJs.js → line-D4r_bmlv.js} +1 -1
- package/dist/public/assets/markdown-mermaid-JPAETK2Y.js +2 -0
- package/dist/public/assets/{math-BNNuKpUP.js → math-CSw6sgCC.js} +2 -2
- package/dist/public/assets/math-delimiters-BCnTi7Ii.js +1 -0
- package/dist/public/assets/media-refresh-store-CHnqDJWI.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-Cy4SIHHe.js → mindmap-definition-YA3MSWOX-DAB8mHOv.js} +1 -1
- package/dist/public/assets/monaco.contribution-C0TYpF88.js +2 -0
- package/dist/public/assets/notification-delivery-Lz-hnQG7.js +1 -0
- package/dist/public/assets/packet-AYTQ26CC-Cw5JteoC.js +1 -0
- package/dist/public/assets/{pdf-Cnp8bCq1.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/popover-C-BfSLgw.js +1 -0
- package/dist/public/assets/preload-helper-Czpn1I53.js +1 -0
- package/dist/public/assets/preview-kind-CJ9RTgbs.js +1 -0
- package/dist/public/assets/project-abbrev-Bz8ZEwrb.js +1 -0
- package/dist/public/assets/protocol-support-CJIxbQCB.js +1 -0
- package/dist/public/assets/{quadrantDiagram-AXDQQJYC-2BigfRRK.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/recipes-K5GH3Kht.js +1 -0
- package/dist/public/assets/{requirementDiagram-BXWQKSXE-BfBBVeo_.js → requirementDiagram-BXWQKSXE-BtGNZ92J.js} +1 -1
- package/dist/public/assets/rotate-ccw-CNjR2LSi.js +1 -0
- package/dist/public/assets/{sankeyDiagram-P5KCCOFB-BHy22mhl.js → sankeyDiagram-P5KCCOFB-XgIIrsbe.js} +1 -1
- package/dist/public/assets/scroll-restoration-r--43sOx.js +1 -0
- package/dist/public/assets/select-YFIOZ3zx.js +1 -0
- package/dist/public/assets/selection-actions-C2udLSyj.js +1 -0
- package/dist/public/assets/{sequenceDiagram-WJ2MYXX4-Dhgnxvrt.js → sequenceDiagram-WJ2MYXX4-CVIIE7ze.js} +1 -1
- package/dist/public/assets/{stateDiagram-D77RDMKH-CPWwa5Aj.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-DsqTASlp.js → swimlanes-42K2YHIH-BY2JV_Jb.js} +1 -1
- package/dist/public/assets/swimlanesDiagram-VR7AAH4N-BCiIa4tX.js +8 -0
- package/dist/public/assets/switch-DwMO1AUH.js +1 -0
- package/dist/public/assets/{timeline-definition-24CTP7MA-B7hjD0KJ.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-CillYPbz.js → tsMode-B7q3gz7a.js} +1 -1
- package/dist/public/assets/use-ui-state-Crvfdw4F.js +1 -0
- package/dist/public/assets/{vennDiagram-4TSXK5OY-BvS0i65j.js → vennDiagram-4TSXK5OY-CU1Q7iGV.js} +1 -1
- package/dist/public/assets/wardley-WFR3VGLG-CWb_ROLo.js +1 -0
- package/dist/public/assets/{wardleyDiagram-VM6X3IG4-CxconmGB.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-B1kcYo2j.js +1 -0
- package/dist/public/assets/x-DCpy1q13.js +1 -0
- package/dist/public/assets/{xychartDiagram-S5SC5T6Z-DSJMW0r7.js → xychartDiagram-S5SC5T6Z-xhQ4tT_S.js} +1 -1
- package/dist/public/index.html +6 -2
- package/dist/pudl.js +68 -7
- package/package.json +1 -1
- package/dist/public/assets/App-D_YTB3jH.js +0 -2
- package/dist/public/assets/Dashboard-Djw9nPV_.js +0 -1
- package/dist/public/assets/EditorTabClose-BCunnuEj.js +0 -1
- package/dist/public/assets/FindWidget-Ch-y_4eH.js +0 -1
- package/dist/public/assets/LazyTerminal-BN3rEDcD.js +0 -2
- package/dist/public/assets/NewProjectDialog-BK_gfWmL.js +0 -1
- package/dist/public/assets/PaneEditorBody-ClWRSuGV.js +0 -299
- package/dist/public/assets/PdfViewer-CbC1KAkq.js +0 -2
- package/dist/public/assets/SettingsDialog-DsmyHhQB.js +0 -8
- package/dist/public/assets/Terminal-CDnGRsgd.js +0 -66
- package/dist/public/assets/Workspace-CmclLFK3.js +0 -20
- package/dist/public/assets/abnfDiagram-VCTEODGH-Aa5uAdnV.js +0 -1
- package/dist/public/assets/architecture-7GRP2DOG-D3814jvH.js +0 -1
- package/dist/public/assets/architectureDiagram-5GKGNRK7-B0d475xG.js +0 -36
- package/dist/public/assets/buffer-store-BtRP7zZm.js +0 -16
- package/dist/public/assets/button-D3DTuFk3.js +0 -1
- package/dist/public/assets/channel-C6g1aWXR.js +0 -1
- package/dist/public/assets/chunk-2E4U76K2-DyVxGuz5.js +0 -2
- package/dist/public/assets/chunk-DU6HZSFF-ziCxw8j9.js +0 -125
- package/dist/public/assets/chunk-TLUHSLCS-BGFLoTUj.js +0 -2
- package/dist/public/assets/classDiagram-ZZMXUADV-BiQrxRCS.js +0 -1
- package/dist/public/assets/classDiagram-v2-VYDZK3BY-BiQrxRCS.js +0 -1
- package/dist/public/assets/context-menu-CwR-PGrS.js +0 -1
- package/dist/public/assets/copy-ZzKoF5dj.js +0 -1
- package/dist/public/assets/cssMode-DBrJeag9.js +0 -1
- package/dist/public/assets/cynefin-OW5HDTMX-DsXo9hDP.js +0 -1
- package/dist/public/assets/cynefinDiagram-5FMLGOSQ-CNr5UISm.js +0 -62
- package/dist/public/assets/diagram-UQ7AKVKN-Blm9jWHJ.js +0 -41
- package/dist/public/assets/diagram-VSXAHHWV-BzXCydDQ.js +0 -3
- package/dist/public/assets/dialog-BoaHxScl.js +0 -41
- package/dist/public/assets/disclosure-DNbP2Rp4.js +0 -1
- package/dist/public/assets/dist-CQZ_zg-s.js +0 -1
- package/dist/public/assets/dist-DUfD4S2p.js +0 -1
- package/dist/public/assets/ebnfDiagram-PWID7BFC-x8Hm-8FP.js +0 -1
- package/dist/public/assets/eventmodeling-NTZA5JFV-DE-zSV6F.js +0 -1
- package/dist/public/assets/flowDiagram-HODETNUW-Cn9XuALP.js +0 -1
- package/dist/public/assets/gitGraph-4MIJSDKK-DKeR8Wjx.js +0 -1
- package/dist/public/assets/gitGraphDiagram-WWUBYQGX-CPJ482wi.js +0 -106
- package/dist/public/assets/htmlMode-CKCaIwmL.js +0 -1
- package/dist/public/assets/index-CAvJOpdz.css +0 -2
- package/dist/public/assets/index-CPKHBs7z.js +0 -82
- package/dist/public/assets/info-A6RAGUB7-CYKUxPau.js +0 -1
- package/dist/public/assets/infoDiagram-27XIBGKW-5qHuu76B.js +0 -2
- package/dist/public/assets/markdown-mermaid-B_y_6yBe.js +0 -2
- package/dist/public/assets/media-refresh-store-BnZNW8xS.js +0 -1
- package/dist/public/assets/mermaid-parser.core-BwJKOdFv.js +0 -7
- package/dist/public/assets/mermaid.core-Cii531li.js +0 -11
- package/dist/public/assets/notification-delivery-Cn-YcMec.js +0 -1
- package/dist/public/assets/packet-AYTQ26CC-y8aHtpCT.js +0 -1
- package/dist/public/assets/pegDiagram-XKGWAZYB-yIL7Oty_.js +0 -1
- package/dist/public/assets/pie-WAS4IAKB-DNZ4gYKN.js +0 -1
- package/dist/public/assets/pieDiagram-E7YTZNPT-CUwYqrWF.js +0 -39
- package/dist/public/assets/preview-kind-QJSMKfUN.js +0 -1
- package/dist/public/assets/project-abbrev-B5CMO00I.js +0 -1
- package/dist/public/assets/protocol-support-hVrRUHAd.js +0 -1
- package/dist/public/assets/radar-RG4KPBEZ-DCE8-Z-G.js +0 -1
- package/dist/public/assets/railroad-74A4TZTK-BfnC2It7.js +0 -1
- package/dist/public/assets/railroad-abnf-HS5TGJTU-C8QChwRk.js +0 -1
- package/dist/public/assets/railroad-ebnf-LZEXJU2U-DN6nLE-f.js +0 -1
- package/dist/public/assets/railroad-peg-WCYAUIDC-emPIg_g-.js +0 -1
- package/dist/public/assets/railroadDiagram-O6MQD6OU-DpX2WbJ5.js +0 -1
- package/dist/public/assets/scroll-restoration-rhyw8Ck0.js +0 -1
- package/dist/public/assets/selection-actions-BDJnKwuj.js +0 -1
- package/dist/public/assets/stateDiagram-v2-MP3YSRHH-CmGYleZg.js +0 -1
- package/dist/public/assets/swimlanesDiagram-VR7AAH4N-CUahIPDv.js +0 -8
- package/dist/public/assets/switch-DGZtVofo.js +0 -1
- package/dist/public/assets/treeView-Q6P3EWNA-WU6eWUi6.js +0 -1
- package/dist/public/assets/treemap-WGGIJYW6-BNZcLwqI.js +0 -1
- package/dist/public/assets/use-ui-state-BZeOd2de.js +0 -1
- package/dist/public/assets/view-state-store-BEl9Q1Jm.js +0 -1
- package/dist/public/assets/wardley-WFR3VGLG-ChvHhLGz.js +0 -1
- package/dist/public/assets/ws-B6RLTvWI.js +0 -1
- package/dist/public/assets/x-CZCUod6A.js +0 -1
package/CHANGELOG.md
CHANGED
|
@@ -4,16 +4,18 @@ Archived release changelog. Governance lives in CLAUDE.md §"Changelog disciplin
|
|
|
4
4
|
|
|
5
5
|
# Changelog
|
|
6
6
|
|
|
7
|
-
## [0.3.
|
|
7
|
+
## [0.3.4] — 2026-10-23
|
|
8
8
|
|
|
9
9
|
### Added
|
|
10
10
|
|
|
11
|
-
-
|
|
11
|
+
- Keep notebook kernels alive across runs and browser reconnects; add notebook header controls for cells, Run All, clearing output, outline navigation, kernel selection, interruption, restart and shutdown.
|
|
12
|
+
- Add language-selectable compilation and execution defaults under Settings → Editor, sharing command controls with per-file overrides.
|
|
13
|
+
- Choose project name colours from the profile palette when creating or editing a project, or from either sidebar's project context menu; retain colours across dashboard cards and project navigation.
|
|
14
|
+
- Add editable `.ipynb` notebook views with saved rich output, a JSON source toggle, and explicit whole-notebook execution through host-installed Jupyter.
|
|
15
|
+
- Run Python, JavaScript, TypeScript, C, C++, Rust, Go, Ruby, Perl, R and shell files with detected host tools, per-file command overrides, bounded output and managed result tabs; keep code execution manual.
|
|
12
16
|
|
|
13
17
|
### Changed
|
|
14
18
|
|
|
15
|
-
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
- Include the Puddlang runner and its imports in standalone daemon archives, with a release smoke test that executes a TypeScript programme using both `puddlang` and `zod`.
|
|
19
|
+
- Advance the daemon/cockpit protocol to 24.6 for host kernel discovery, status and explicit notebook lifecycle actions.
|
|
20
|
+
- Advance the daemon/cockpit protocol to 24.5 for optional project colours; hide colour controls on older hosts and preserve existing project styling by default.
|
|
21
|
+
- Advance the daemon/cockpit protocol to 24.4 for profile language command defaults, inherited file commands and an optional compilation-provider action label; retain LaTeX eager controls only for providers that advertise eager support.
|
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();
|
|
@@ -14689,6 +14690,15 @@ ${RULES_TOKEN}
|
|
|
14689
14690
|
4. If the user states a standing rule for all future worktrees ("always\u2026", "never\u2026", "from now on\u2026"), write the complete updated rules to \`.puddle/onboarding-notes.md\` in this worktree \u2014 full replacement, user-owned prose; record their decision, don't invent policy.
|
|
14690
14691
|
|
|
14691
14692
|
Then proceed with the task below (or await instructions if none is given).`;
|
|
14693
|
+
var PROFILE_ICON_COLOURS = [
|
|
14694
|
+
"navy",
|
|
14695
|
+
"gold",
|
|
14696
|
+
"blue",
|
|
14697
|
+
"green",
|
|
14698
|
+
"red",
|
|
14699
|
+
"violet",
|
|
14700
|
+
"cyan"
|
|
14701
|
+
];
|
|
14692
14702
|
var profileSchema = external_exports.object({
|
|
14693
14703
|
id: profileId,
|
|
14694
14704
|
name: fsSafeName,
|
|
@@ -15110,13 +15120,15 @@ var archiveRequestSchema = external_exports.object({
|
|
|
15110
15120
|
});
|
|
15111
15121
|
|
|
15112
15122
|
// ../shared/src/api/projects.ts
|
|
15113
|
-
var
|
|
15123
|
+
var projectAbbrev2 = external_exports.string().min(1).max(5);
|
|
15124
|
+
var projectColourSchema = external_exports.enum(PROFILE_ICON_COLOURS);
|
|
15114
15125
|
var projectSchema = external_exports.object({
|
|
15115
15126
|
id: projectId,
|
|
15116
15127
|
profile_id: profileId,
|
|
15117
15128
|
repo_id: rowId,
|
|
15118
15129
|
name: external_exports.string(),
|
|
15119
|
-
abbrev:
|
|
15130
|
+
abbrev: projectAbbrev2.nullable().default(null),
|
|
15131
|
+
colour: projectColourSchema.nullable().optional(),
|
|
15120
15132
|
/**
|
|
15121
15133
|
* Hidden from the homescreen but never deleted — every session, worktree, and
|
|
15122
15134
|
* bit of data is retained, and un-archiving restores it all (SPEC §11).
|
|
@@ -15130,11 +15142,13 @@ var createProjectRequestSchema = external_exports.object({
|
|
|
15130
15142
|
profile_id: profileId,
|
|
15131
15143
|
repo_id: rowId,
|
|
15132
15144
|
name: external_exports.string().min(1).max(100),
|
|
15133
|
-
abbrev:
|
|
15145
|
+
abbrev: projectAbbrev2.optional(),
|
|
15146
|
+
colour: projectColourSchema.nullable().optional()
|
|
15134
15147
|
});
|
|
15135
15148
|
var patchProjectRequestSchema = external_exports.object({
|
|
15136
15149
|
name: external_exports.string().min(1).max(100).optional(),
|
|
15137
|
-
abbrev:
|
|
15150
|
+
abbrev: projectAbbrev2.optional(),
|
|
15151
|
+
colour: projectColourSchema.nullable().optional(),
|
|
15138
15152
|
archived: external_exports.boolean().optional()
|
|
15139
15153
|
});
|
|
15140
15154
|
var projectDetailSchema = external_exports.object({
|
|
@@ -15195,7 +15209,9 @@ var compilationProviderSchema = external_exports.object({
|
|
|
15195
15209
|
available: external_exports.boolean(),
|
|
15196
15210
|
/** The preferred host executable when available, for honest capability UI. */
|
|
15197
15211
|
executor: external_exports.string().min(1).nullable(),
|
|
15198
|
-
eager: external_exports.boolean()
|
|
15212
|
+
eager: external_exports.boolean(),
|
|
15213
|
+
/** Omitted by older providers, whose action remains compilation. */
|
|
15214
|
+
action: external_exports.enum(["compile", "run"]).optional()
|
|
15199
15215
|
});
|
|
15200
15216
|
var compilationCapabilitiesResponseSchema = external_exports.object({
|
|
15201
15217
|
providers: external_exports.array(compilationProviderSchema)
|
|
@@ -15264,7 +15280,9 @@ var compilationCommandSlotSchema = external_exports.object({
|
|
|
15264
15280
|
/** Stable trigger copy lets a generic dialog explain exactly when this slot runs. */
|
|
15265
15281
|
run_when: external_exports.enum(["when_clicked", "upon_file_change"]),
|
|
15266
15282
|
default_command: external_exports.string().min(1).nullable(),
|
|
15267
|
-
override_command: external_exports.string().min(1).nullable()
|
|
15283
|
+
override_command: external_exports.string().min(1).nullable(),
|
|
15284
|
+
/** Profile language default inherited by this file (24.4); null uses the provider. */
|
|
15285
|
+
inherited_command: external_exports.string().min(1).nullable().optional()
|
|
15268
15286
|
});
|
|
15269
15287
|
var compilationSettingsRequestSchema = compilationTargetRequestSchema.extend({
|
|
15270
15288
|
profile_id: profileId,
|
|
@@ -15284,6 +15302,18 @@ var updateCompilationSettingsRequestSchema = compilationSettingsRequestSchema.ex
|
|
|
15284
15302
|
mode: compilationModeSchema,
|
|
15285
15303
|
command: external_exports.string().trim().min(1).max(16384).nullable()
|
|
15286
15304
|
});
|
|
15305
|
+
var compilationDefaultsRequestSchema = external_exports.object({
|
|
15306
|
+
profile_id: profileId,
|
|
15307
|
+
provider: compilationProviderIdSchema
|
|
15308
|
+
});
|
|
15309
|
+
var compilationDefaultsResponseSchema = compilationSettingsResponseSchema.omit({
|
|
15310
|
+
file_type: true,
|
|
15311
|
+
file_path: true
|
|
15312
|
+
});
|
|
15313
|
+
var updateCompilationDefaultsRequestSchema = compilationDefaultsRequestSchema.extend({
|
|
15314
|
+
mode: compilationModeSchema,
|
|
15315
|
+
command: updateCompilationSettingsRequestSchema.shape.command
|
|
15316
|
+
});
|
|
15287
15317
|
|
|
15288
15318
|
// ../shared/src/api/ui-state.ts
|
|
15289
15319
|
var editorTabRefSchema = external_exports.object({
|
|
@@ -15450,6 +15480,31 @@ var patchLayoutRequestSchema = external_exports.object({
|
|
|
15450
15480
|
active_session: sessionId.nullable().optional()
|
|
15451
15481
|
});
|
|
15452
15482
|
|
|
15483
|
+
// ../shared/src/api/notebooks.ts
|
|
15484
|
+
var notebookKernelSpecSchema = external_exports.object({
|
|
15485
|
+
name: external_exports.string().min(1),
|
|
15486
|
+
display_name: external_exports.string().min(1),
|
|
15487
|
+
language: external_exports.string()
|
|
15488
|
+
});
|
|
15489
|
+
var notebookKernelsResponseSchema = external_exports.object({
|
|
15490
|
+
available: external_exports.boolean(),
|
|
15491
|
+
kernels: external_exports.array(notebookKernelSpecSchema),
|
|
15492
|
+
error: external_exports.string().optional()
|
|
15493
|
+
});
|
|
15494
|
+
var notebookKernelRequestSchema = external_exports.object({ source: compilationFileTargetSchema });
|
|
15495
|
+
var notebookKernelStatusSchema = external_exports.object({
|
|
15496
|
+
state: external_exports.enum(["stopped", "starting", "idle", "busy", "dead"]),
|
|
15497
|
+
kernel: external_exports.string().nullable(),
|
|
15498
|
+
error: external_exports.string().optional()
|
|
15499
|
+
});
|
|
15500
|
+
var notebookKernelActionSchema = external_exports.discriminatedUnion("action", [
|
|
15501
|
+
notebookKernelRequestSchema.extend({
|
|
15502
|
+
action: external_exports.literal("select"),
|
|
15503
|
+
kernel: external_exports.string().min(1).max(256)
|
|
15504
|
+
}),
|
|
15505
|
+
notebookKernelRequestSchema.extend({ action: external_exports.enum(["interrupt", "restart", "shutdown"]) })
|
|
15506
|
+
]);
|
|
15507
|
+
|
|
15453
15508
|
// ../shared/src/api/latex.ts
|
|
15454
15509
|
var latexSynctexRequestSchema = compilationFileTargetSchema.extend({
|
|
15455
15510
|
root: external_exports.string().min(1),
|
|
@@ -15749,6 +15804,12 @@ var cockpitRefreshResponseSchema = external_exports.object({
|
|
|
15749
15804
|
refreshId: external_exports.string().uuid(),
|
|
15750
15805
|
instance: external_exports.string().uuid()
|
|
15751
15806
|
});
|
|
15807
|
+
var cockpitFileManagerSchema = external_exports.object({
|
|
15808
|
+
name: external_exports.enum(["Finder", "File Explorer", "File Manager"]).nullable()
|
|
15809
|
+
});
|
|
15810
|
+
var cockpitRevealRequestSchema = external_exports.object({
|
|
15811
|
+
path: external_exports.string().min(1).max(4096).refine((path) => !path.includes("\0"))
|
|
15812
|
+
}).strict();
|
|
15752
15813
|
|
|
15753
15814
|
// ../shared/src/ws/messages.ts
|
|
15754
15815
|
var termId = external_exports.string().regex(/^(agent|shell-[0-9]+)$/);
|
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: 24, minor:
|
|
3928
|
+
var PROTOCOL_VERSION = { major: 24, minor: 6 };
|
|
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();
|
|
@@ -18609,6 +18610,15 @@ ${RULES_TOKEN}
|
|
|
18609
18610
|
4. If the user states a standing rule for all future worktrees ("always\u2026", "never\u2026", "from now on\u2026"), write the complete updated rules to \`.puddle/onboarding-notes.md\` in this worktree \u2014 full replacement, user-owned prose; record their decision, don't invent policy.
|
|
18610
18611
|
|
|
18611
18612
|
Then proceed with the task below (or await instructions if none is given).`;
|
|
18613
|
+
var PROFILE_ICON_COLOURS = [
|
|
18614
|
+
"navy",
|
|
18615
|
+
"gold",
|
|
18616
|
+
"blue",
|
|
18617
|
+
"green",
|
|
18618
|
+
"red",
|
|
18619
|
+
"violet",
|
|
18620
|
+
"cyan"
|
|
18621
|
+
];
|
|
18612
18622
|
var profileSchema = external_exports.object({
|
|
18613
18623
|
id: profileId,
|
|
18614
18624
|
name: fsSafeName,
|
|
@@ -19030,13 +19040,15 @@ var archiveRequestSchema = external_exports.object({
|
|
|
19030
19040
|
});
|
|
19031
19041
|
|
|
19032
19042
|
// ../shared/src/api/projects.ts
|
|
19033
|
-
var
|
|
19043
|
+
var projectAbbrev2 = external_exports.string().min(1).max(5);
|
|
19044
|
+
var projectColourSchema = external_exports.enum(PROFILE_ICON_COLOURS);
|
|
19034
19045
|
var projectSchema = external_exports.object({
|
|
19035
19046
|
id: projectId,
|
|
19036
19047
|
profile_id: profileId,
|
|
19037
19048
|
repo_id: rowId,
|
|
19038
19049
|
name: external_exports.string(),
|
|
19039
|
-
abbrev:
|
|
19050
|
+
abbrev: projectAbbrev2.nullable().default(null),
|
|
19051
|
+
colour: projectColourSchema.nullable().optional(),
|
|
19040
19052
|
/**
|
|
19041
19053
|
* Hidden from the homescreen but never deleted — every session, worktree, and
|
|
19042
19054
|
* bit of data is retained, and un-archiving restores it all (SPEC §11).
|
|
@@ -19050,11 +19062,13 @@ var createProjectRequestSchema = external_exports.object({
|
|
|
19050
19062
|
profile_id: profileId,
|
|
19051
19063
|
repo_id: rowId,
|
|
19052
19064
|
name: external_exports.string().min(1).max(100),
|
|
19053
|
-
abbrev:
|
|
19065
|
+
abbrev: projectAbbrev2.optional(),
|
|
19066
|
+
colour: projectColourSchema.nullable().optional()
|
|
19054
19067
|
});
|
|
19055
19068
|
var patchProjectRequestSchema = external_exports.object({
|
|
19056
19069
|
name: external_exports.string().min(1).max(100).optional(),
|
|
19057
|
-
abbrev:
|
|
19070
|
+
abbrev: projectAbbrev2.optional(),
|
|
19071
|
+
colour: projectColourSchema.nullable().optional(),
|
|
19058
19072
|
archived: external_exports.boolean().optional()
|
|
19059
19073
|
});
|
|
19060
19074
|
var projectDetailSchema = external_exports.object({
|
|
@@ -19115,7 +19129,9 @@ var compilationProviderSchema = external_exports.object({
|
|
|
19115
19129
|
available: external_exports.boolean(),
|
|
19116
19130
|
/** The preferred host executable when available, for honest capability UI. */
|
|
19117
19131
|
executor: external_exports.string().min(1).nullable(),
|
|
19118
|
-
eager: external_exports.boolean()
|
|
19132
|
+
eager: external_exports.boolean(),
|
|
19133
|
+
/** Omitted by older providers, whose action remains compilation. */
|
|
19134
|
+
action: external_exports.enum(["compile", "run"]).optional()
|
|
19119
19135
|
});
|
|
19120
19136
|
var compilationCapabilitiesResponseSchema = external_exports.object({
|
|
19121
19137
|
providers: external_exports.array(compilationProviderSchema)
|
|
@@ -19184,7 +19200,9 @@ var compilationCommandSlotSchema = external_exports.object({
|
|
|
19184
19200
|
/** Stable trigger copy lets a generic dialog explain exactly when this slot runs. */
|
|
19185
19201
|
run_when: external_exports.enum(["when_clicked", "upon_file_change"]),
|
|
19186
19202
|
default_command: external_exports.string().min(1).nullable(),
|
|
19187
|
-
override_command: external_exports.string().min(1).nullable()
|
|
19203
|
+
override_command: external_exports.string().min(1).nullable(),
|
|
19204
|
+
/** Profile language default inherited by this file (24.4); null uses the provider. */
|
|
19205
|
+
inherited_command: external_exports.string().min(1).nullable().optional()
|
|
19188
19206
|
});
|
|
19189
19207
|
var compilationSettingsRequestSchema = compilationTargetRequestSchema.extend({
|
|
19190
19208
|
profile_id: profileId,
|
|
@@ -19204,6 +19222,18 @@ var updateCompilationSettingsRequestSchema = compilationSettingsRequestSchema.ex
|
|
|
19204
19222
|
mode: compilationModeSchema,
|
|
19205
19223
|
command: external_exports.string().trim().min(1).max(16384).nullable()
|
|
19206
19224
|
});
|
|
19225
|
+
var compilationDefaultsRequestSchema = external_exports.object({
|
|
19226
|
+
profile_id: profileId,
|
|
19227
|
+
provider: compilationProviderIdSchema
|
|
19228
|
+
});
|
|
19229
|
+
var compilationDefaultsResponseSchema = compilationSettingsResponseSchema.omit({
|
|
19230
|
+
file_type: true,
|
|
19231
|
+
file_path: true
|
|
19232
|
+
});
|
|
19233
|
+
var updateCompilationDefaultsRequestSchema = compilationDefaultsRequestSchema.extend({
|
|
19234
|
+
mode: compilationModeSchema,
|
|
19235
|
+
command: updateCompilationSettingsRequestSchema.shape.command
|
|
19236
|
+
});
|
|
19207
19237
|
|
|
19208
19238
|
// ../shared/src/api/ui-state.ts
|
|
19209
19239
|
var editorTabRefSchema = external_exports.object({
|
|
@@ -19370,6 +19400,31 @@ var patchLayoutRequestSchema = external_exports.object({
|
|
|
19370
19400
|
active_session: sessionId.nullable().optional()
|
|
19371
19401
|
});
|
|
19372
19402
|
|
|
19403
|
+
// ../shared/src/api/notebooks.ts
|
|
19404
|
+
var notebookKernelSpecSchema = external_exports.object({
|
|
19405
|
+
name: external_exports.string().min(1),
|
|
19406
|
+
display_name: external_exports.string().min(1),
|
|
19407
|
+
language: external_exports.string()
|
|
19408
|
+
});
|
|
19409
|
+
var notebookKernelsResponseSchema = external_exports.object({
|
|
19410
|
+
available: external_exports.boolean(),
|
|
19411
|
+
kernels: external_exports.array(notebookKernelSpecSchema),
|
|
19412
|
+
error: external_exports.string().optional()
|
|
19413
|
+
});
|
|
19414
|
+
var notebookKernelRequestSchema = external_exports.object({ source: compilationFileTargetSchema });
|
|
19415
|
+
var notebookKernelStatusSchema = external_exports.object({
|
|
19416
|
+
state: external_exports.enum(["stopped", "starting", "idle", "busy", "dead"]),
|
|
19417
|
+
kernel: external_exports.string().nullable(),
|
|
19418
|
+
error: external_exports.string().optional()
|
|
19419
|
+
});
|
|
19420
|
+
var notebookKernelActionSchema = external_exports.discriminatedUnion("action", [
|
|
19421
|
+
notebookKernelRequestSchema.extend({
|
|
19422
|
+
action: external_exports.literal("select"),
|
|
19423
|
+
kernel: external_exports.string().min(1).max(256)
|
|
19424
|
+
}),
|
|
19425
|
+
notebookKernelRequestSchema.extend({ action: external_exports.enum(["interrupt", "restart", "shutdown"]) })
|
|
19426
|
+
]);
|
|
19427
|
+
|
|
19373
19428
|
// ../shared/src/api/latex.ts
|
|
19374
19429
|
var latexSynctexRequestSchema = compilationFileTargetSchema.extend({
|
|
19375
19430
|
root: external_exports.string().min(1),
|
|
@@ -19669,6 +19724,12 @@ var cockpitRefreshResponseSchema = external_exports.object({
|
|
|
19669
19724
|
refreshId: external_exports.string().uuid(),
|
|
19670
19725
|
instance: external_exports.string().uuid()
|
|
19671
19726
|
});
|
|
19727
|
+
var cockpitFileManagerSchema = external_exports.object({
|
|
19728
|
+
name: external_exports.enum(["Finder", "File Explorer", "File Manager"]).nullable()
|
|
19729
|
+
});
|
|
19730
|
+
var cockpitRevealRequestSchema = external_exports.object({
|
|
19731
|
+
path: external_exports.string().min(1).max(4096).refine((path) => !path.includes("\0"))
|
|
19732
|
+
}).strict();
|
|
19672
19733
|
|
|
19673
19734
|
// ../shared/src/ws/messages.ts
|
|
19674
19735
|
var termId = external_exports.string().regex(/^(agent|shell-[0-9]+)$/);
|
|
@@ -21773,7 +21834,7 @@ async function acquireAuthority(transport) {
|
|
|
21773
21834
|
// src/cli/run.ts
|
|
21774
21835
|
init_attach();
|
|
21775
21836
|
import { existsSync as existsSync7 } from "node:fs";
|
|
21776
|
-
import { dirname as
|
|
21837
|
+
import { dirname as dirname13, join as join17 } from "node:path";
|
|
21777
21838
|
import { fileURLToPath as fileURLToPath5 } from "node:url";
|
|
21778
21839
|
|
|
21779
21840
|
// src/lib/browser.ts
|
|
@@ -21817,7 +21878,7 @@ import { readFileSync as readFileSync4 } from "node:fs";
|
|
|
21817
21878
|
import { dirname as dirname4, join as join5 } from "node:path";
|
|
21818
21879
|
import { fileURLToPath as fileURLToPath2 } from "node:url";
|
|
21819
21880
|
function cliVersion() {
|
|
21820
|
-
if (true) return "0.3.
|
|
21881
|
+
if (true) return "0.3.4";
|
|
21821
21882
|
const here = dirname4(fileURLToPath2(import.meta.url));
|
|
21822
21883
|
for (const candidate of [
|
|
21823
21884
|
join5(here, "..", "..", "package.json"),
|
|
@@ -22217,7 +22278,9 @@ var RELEASE_PROTOCOLS = {
|
|
|
22217
22278
|
"0.2.24": { major: 22, minor: 5 },
|
|
22218
22279
|
"0.3.0": { major: 23, minor: 0 },
|
|
22219
22280
|
"0.3.1": { major: 23, minor: 0 },
|
|
22220
|
-
"0.3.2": { major: 24, minor: 0 }
|
|
22281
|
+
"0.3.2": { major: 24, minor: 0 },
|
|
22282
|
+
"0.3.3": { major: 24, minor: 2 },
|
|
22283
|
+
"0.3.4": { major: 24, minor: 6 }
|
|
22221
22284
|
};
|
|
22222
22285
|
function validProtocol(value) {
|
|
22223
22286
|
if (typeof value !== "object" || value === null) return false;
|
|
@@ -23663,6 +23726,34 @@ async function checkRemoteRegistration(req, res, authorised) {
|
|
|
23663
23726
|
}
|
|
23664
23727
|
}
|
|
23665
23728
|
|
|
23729
|
+
// src/lib/serve/file-manager.ts
|
|
23730
|
+
function fileManagerHandler(manager) {
|
|
23731
|
+
let busy = false;
|
|
23732
|
+
return async (req, res, authorised) => {
|
|
23733
|
+
if (req.method === "GET") return json2(res, 200, { name: manager?.name ?? null });
|
|
23734
|
+
if (req.method !== "POST") return fail(res, 405, "method_not_allowed");
|
|
23735
|
+
if (!manager) return fail(res, 404, "file_manager_unavailable");
|
|
23736
|
+
const request = cockpitRevealRequestSchema.parse(await readJson(req));
|
|
23737
|
+
if (!authorised()) return fail(res, 401, "browser_rejected");
|
|
23738
|
+
if (busy) return fail(res, 409, "file_manager_busy", "A folder is already being revealed.");
|
|
23739
|
+
busy = true;
|
|
23740
|
+
try {
|
|
23741
|
+
await manager.reveal(request.path, authorised);
|
|
23742
|
+
res.writeHead(204);
|
|
23743
|
+
res.end();
|
|
23744
|
+
} catch (error51) {
|
|
23745
|
+
fail(
|
|
23746
|
+
res,
|
|
23747
|
+
400,
|
|
23748
|
+
"reveal_failed",
|
|
23749
|
+
error51 instanceof Error ? error51.message : "Could not reveal this path."
|
|
23750
|
+
);
|
|
23751
|
+
} finally {
|
|
23752
|
+
busy = false;
|
|
23753
|
+
}
|
|
23754
|
+
};
|
|
23755
|
+
}
|
|
23756
|
+
|
|
23666
23757
|
// src/lib/serve/ui-server.ts
|
|
23667
23758
|
var DEFAULT_UI_PORT = 7433;
|
|
23668
23759
|
var MAX_PORT_PROBES = 50;
|
|
@@ -23672,6 +23763,9 @@ async function startUiServer(opts) {
|
|
|
23672
23763
|
const tracker = new ProxySocketTracker();
|
|
23673
23764
|
const serveStatic = createStaticHandler(opts.assetsDir);
|
|
23674
23765
|
const handleRemoteAccess = remoteAccessHandler(opts.remoteAccess);
|
|
23766
|
+
const handleFileManager = fileManagerHandler(
|
|
23767
|
+
opts.identity === "local" ? opts.fileManager : void 0
|
|
23768
|
+
);
|
|
23675
23769
|
const nonce = randomUUID3();
|
|
23676
23770
|
let origin = "";
|
|
23677
23771
|
let proxyOrigin = "";
|
|
@@ -23720,6 +23814,8 @@ async function startUiServer(opts) {
|
|
|
23720
23814
|
}
|
|
23721
23815
|
if (url2.pathname === "/cockpit/local-sync")
|
|
23722
23816
|
return handleLocalSync(req, res, opts.localSync, () => browsers.valid(browser));
|
|
23817
|
+
if (url2.pathname === "/cockpit/file-manager")
|
|
23818
|
+
return handleFileManager(req, res, () => browsers.valid(browser));
|
|
23723
23819
|
if (url2.pathname === "/cockpit/remote")
|
|
23724
23820
|
return handleRemoteAccess(req, res, () => browsers.valid(browser));
|
|
23725
23821
|
if (url2.pathname === "/cockpit/remote/registration") {
|
|
@@ -24383,6 +24479,69 @@ function sanitise(record2) {
|
|
|
24383
24479
|
// src/lib/start.ts
|
|
24384
24480
|
import { join as join14 } from "node:path";
|
|
24385
24481
|
init_types();
|
|
24482
|
+
|
|
24483
|
+
// src/lib/file-manager.ts
|
|
24484
|
+
import { execFile, spawn as spawn6 } from "node:child_process";
|
|
24485
|
+
import { lstat, stat } from "node:fs/promises";
|
|
24486
|
+
import { dirname as dirname9, isAbsolute, win32 } from "node:path";
|
|
24487
|
+
import { pathToFileURL } from "node:url";
|
|
24488
|
+
import { promisify } from "node:util";
|
|
24489
|
+
var execute = promisify(execFile);
|
|
24490
|
+
function localFileManager(platform = process.platform) {
|
|
24491
|
+
const name = platform === "darwin" ? "Finder" : platform === "win32" ? "File Explorer" : platform === "linux" ? "File Manager" : null;
|
|
24492
|
+
if (!name) return;
|
|
24493
|
+
return {
|
|
24494
|
+
name,
|
|
24495
|
+
async reveal(path, authorised) {
|
|
24496
|
+
if (!(platform === "win32" ? win32.isAbsolute(path) : isAbsolute(path)) || path.includes("\0"))
|
|
24497
|
+
throw new Error("Expected an absolute local path.");
|
|
24498
|
+
const entry = await lstat(path);
|
|
24499
|
+
const directory = entry.isDirectory() || entry.isSymbolicLink() && await stat(path).then(
|
|
24500
|
+
(target) => target.isDirectory(),
|
|
24501
|
+
() => false
|
|
24502
|
+
);
|
|
24503
|
+
const run3 = async (command, args, detached = false) => {
|
|
24504
|
+
if (!authorised()) throw new Error("Browser authorisation expired.");
|
|
24505
|
+
if (detached) {
|
|
24506
|
+
await new Promise((resolve6, reject) => {
|
|
24507
|
+
const child = spawn6(command, args, { stdio: "ignore", detached: true });
|
|
24508
|
+
child.once("error", reject);
|
|
24509
|
+
child.once("spawn", () => {
|
|
24510
|
+
child.unref();
|
|
24511
|
+
resolve6();
|
|
24512
|
+
});
|
|
24513
|
+
});
|
|
24514
|
+
return;
|
|
24515
|
+
}
|
|
24516
|
+
await execute(command, args, { timeout: 1e4, maxBuffer: 16384, windowsHide: true });
|
|
24517
|
+
};
|
|
24518
|
+
if (platform === "darwin") {
|
|
24519
|
+
await run3("/usr/bin/open", directory ? ["-a", "Finder", "--", path] : ["-R", "--", path]);
|
|
24520
|
+
} else if (platform === "win32") {
|
|
24521
|
+
await run3("explorer.exe", directory ? [path] : ["/select,", path], true);
|
|
24522
|
+
} else {
|
|
24523
|
+
try {
|
|
24524
|
+
await run3("gdbus", [
|
|
24525
|
+
"call",
|
|
24526
|
+
"--session",
|
|
24527
|
+
"--dest",
|
|
24528
|
+
"org.freedesktop.FileManager1",
|
|
24529
|
+
"--object-path",
|
|
24530
|
+
"/org/freedesktop/FileManager1",
|
|
24531
|
+
"--method",
|
|
24532
|
+
`org.freedesktop.FileManager1.${directory ? "ShowFolders" : "ShowItems"}`,
|
|
24533
|
+
JSON.stringify([pathToFileURL(path).href]),
|
|
24534
|
+
""
|
|
24535
|
+
]);
|
|
24536
|
+
} catch {
|
|
24537
|
+
await run3("xdg-open", [directory ? path : dirname9(path)], true);
|
|
24538
|
+
}
|
|
24539
|
+
}
|
|
24540
|
+
}
|
|
24541
|
+
};
|
|
24542
|
+
}
|
|
24543
|
+
|
|
24544
|
+
// src/lib/start.ts
|
|
24386
24545
|
async function startLocal(opts) {
|
|
24387
24546
|
const logger = opts.logger ?? silentLogger;
|
|
24388
24547
|
const transport = new LocalTransport();
|
|
@@ -24417,6 +24576,7 @@ async function startLocal(opts) {
|
|
|
24417
24576
|
target: { host: "127.0.0.1", port: endpoint.port },
|
|
24418
24577
|
...opts.onRefreshRequest !== void 0 ? { control: { onRefresh: opts.onRefreshRequest } } : {},
|
|
24419
24578
|
localSync: { file: join14(clientHome(), "local-sync.json") },
|
|
24579
|
+
fileManager: localFileManager(),
|
|
24420
24580
|
remoteAccess: new RemoteAccessControl(transport)
|
|
24421
24581
|
});
|
|
24422
24582
|
currentUi = ui;
|
|
@@ -24471,23 +24631,23 @@ init_types();
|
|
|
24471
24631
|
|
|
24472
24632
|
// src/cli/manage-cli.ts
|
|
24473
24633
|
init_types();
|
|
24474
|
-
import { spawn as
|
|
24475
|
-
import { dirname as
|
|
24634
|
+
import { spawn as spawn8 } from "node:child_process";
|
|
24635
|
+
import { dirname as dirname11 } from "node:path";
|
|
24476
24636
|
|
|
24477
24637
|
// src/lib/standalone-cli.ts
|
|
24478
24638
|
init_types();
|
|
24479
|
-
import { spawn as
|
|
24639
|
+
import { spawn as spawn7 } from "node:child_process";
|
|
24480
24640
|
import { existsSync as existsSync5, lstatSync as lstatSync2, readFileSync as readFileSync9, realpathSync as realpathSync2 } from "node:fs";
|
|
24481
24641
|
import { mkdir as mkdir2, readFile as readFile2, rm as rm2, unlink } from "node:fs/promises";
|
|
24482
|
-
import { basename, dirname as
|
|
24642
|
+
import { basename, dirname as dirname10, isAbsolute as isAbsolute2, join as join15, resolve as resolve5 } from "node:path";
|
|
24483
24643
|
import { fileURLToPath as fileURLToPath4 } from "node:url";
|
|
24484
24644
|
function standaloneInstallation(entryFile = fileURLToPath4(import.meta.url), execPath = process.execPath) {
|
|
24485
|
-
const release = resolve5(
|
|
24645
|
+
const release = resolve5(dirname10(entryFile), "..");
|
|
24486
24646
|
if (!existsSync5(join15(release, "STANDALONE"))) return null;
|
|
24487
24647
|
try {
|
|
24488
24648
|
const root = resolve5(release, "..", "..");
|
|
24489
24649
|
const record2 = JSON.parse(readFileSync9(join15(root, "installation.json"), "utf8"));
|
|
24490
|
-
if (readFileSync9(join15(release, "STANDALONE"), "utf8").trim() !== "puddle-cli" || readFileSync9(join15(root, "INSTALLATION"), "utf8").trim() !== "puddle-cli" ||
|
|
24650
|
+
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"))
|
|
24491
24651
|
throw new Error("Installation metadata does not match this CLI");
|
|
24492
24652
|
return {
|
|
24493
24653
|
root,
|
|
@@ -24511,12 +24671,12 @@ function upgradeStandaloneCli(installation, version2, repo) {
|
|
|
24511
24671
|
"--prefix",
|
|
24512
24672
|
installation.root,
|
|
24513
24673
|
"--bin-dir",
|
|
24514
|
-
|
|
24674
|
+
dirname10(installation.launcher)
|
|
24515
24675
|
];
|
|
24516
24676
|
if (version2 !== void 0) args.push("--version", version2);
|
|
24517
24677
|
if (repo !== void 0) args.push("--repo", repo);
|
|
24518
24678
|
return new Promise((resolve6, reject) => {
|
|
24519
|
-
const child =
|
|
24679
|
+
const child = spawn7("sh", args, { stdio: ["pipe", "inherit", "inherit"] });
|
|
24520
24680
|
child.on("error", reject);
|
|
24521
24681
|
child.stdin.on("error", (error51) => {
|
|
24522
24682
|
if (error51.code !== "EPIPE") reject(error51);
|
|
@@ -24571,7 +24731,7 @@ function upgradeCli(version2, logger) {
|
|
|
24571
24731
|
const spec = `@puddle-code/cli@${version2 ?? "latest"}`;
|
|
24572
24732
|
logger.info(`puddle CLI ${cliVersion()} \u2014 asking npm for ${version2 ?? "the latest release"}`);
|
|
24573
24733
|
return new Promise((resolve6, reject) => {
|
|
24574
|
-
const child =
|
|
24734
|
+
const child = spawn8("npm", ["install", "-g", spec], { stdio: "inherit" });
|
|
24575
24735
|
child.on(
|
|
24576
24736
|
"error",
|
|
24577
24737
|
() => reject(
|
|
@@ -24596,7 +24756,7 @@ async function removeCli(yes, logger) {
|
|
|
24596
24756
|
const standalone = standaloneInstallation();
|
|
24597
24757
|
if (standalone) {
|
|
24598
24758
|
const proceed2 = await confirm(
|
|
24599
|
-
`Remove the standalone CLI at ${standalone.root} and its launcher in ${
|
|
24759
|
+
`Remove the standalone CLI at ${standalone.root} and its launcher in ${dirname11(standalone.launcher)}? Close its cockpits first; daemons and their sessions are untouched.`,
|
|
24600
24760
|
{ skip: yes }
|
|
24601
24761
|
);
|
|
24602
24762
|
if (!proceed2) {
|
|
@@ -24608,7 +24768,7 @@ async function removeCli(yes, logger) {
|
|
|
24608
24768
|
return 0;
|
|
24609
24769
|
}
|
|
24610
24770
|
const managed = await new Promise((resolve6) => {
|
|
24611
|
-
const child =
|
|
24771
|
+
const child = spawn8("npm", ["ls", "-g", "@puddle-code/cli", "--depth=0"], { stdio: "ignore" });
|
|
24612
24772
|
child.on("error", () => resolve6(false));
|
|
24613
24773
|
child.on("exit", (code) => resolve6(code === 0));
|
|
24614
24774
|
});
|
|
@@ -24628,7 +24788,7 @@ async function removeCli(yes, logger) {
|
|
|
24628
24788
|
return 0;
|
|
24629
24789
|
}
|
|
24630
24790
|
return new Promise((resolve6, reject) => {
|
|
24631
|
-
const child =
|
|
24791
|
+
const child = spawn8("npm", ["uninstall", "-g", "@puddle-code/cli"], { stdio: "inherit" });
|
|
24632
24792
|
child.on("error", () => reject(new CliError("not_installed", "npm is not on PATH")));
|
|
24633
24793
|
child.on("exit", (code) => {
|
|
24634
24794
|
if (code === 0) {
|
|
@@ -24642,7 +24802,7 @@ async function removeCli(yes, logger) {
|
|
|
24642
24802
|
}
|
|
24643
24803
|
|
|
24644
24804
|
// src/cli/manage.ts
|
|
24645
|
-
import { spawn as
|
|
24805
|
+
import { spawn as spawn10 } from "node:child_process";
|
|
24646
24806
|
import { existsSync as existsSync6 } from "node:fs";
|
|
24647
24807
|
import { chmod as chmod2, copyFile, mkdir as mkdir3, rename, rm as rm3 } from "node:fs/promises";
|
|
24648
24808
|
import { homedir as homedir2 } from "node:os";
|
|
@@ -24783,9 +24943,9 @@ async function upgradeDaemon(transport, opts = {}) {
|
|
|
24783
24943
|
}
|
|
24784
24944
|
|
|
24785
24945
|
// src/cli/detach.ts
|
|
24786
|
-
import { spawn as
|
|
24946
|
+
import { spawn as spawn9 } from "node:child_process";
|
|
24787
24947
|
import { closeSync as closeSync2, mkdirSync as mkdirSync6, openSync as openSync2, readFileSync as readFileSync10 } from "node:fs";
|
|
24788
|
-
import { dirname as
|
|
24948
|
+
import { dirname as dirname12 } from "node:path";
|
|
24789
24949
|
init_types();
|
|
24790
24950
|
var COCKPIT_CHILD_ENV = "PUDDLE_COCKPIT_CHILD";
|
|
24791
24951
|
var READY_TIMEOUT_MS = 3e5;
|
|
@@ -24824,10 +24984,10 @@ async function launchDetached(opts) {
|
|
|
24824
24984
|
}
|
|
24825
24985
|
if (target !== "local") await new SshTransport(target).open();
|
|
24826
24986
|
const logFile = cockpitLogPath(target);
|
|
24827
|
-
mkdirSync6(
|
|
24987
|
+
mkdirSync6(dirname12(logFile), { recursive: true });
|
|
24828
24988
|
const fd = openSync2(logFile, "w");
|
|
24829
24989
|
const argv = opts.argv ?? process.argv.slice(2);
|
|
24830
|
-
const child =
|
|
24990
|
+
const child = spawn9(process.execPath, [process.argv[1] ?? "", ...argv], {
|
|
24831
24991
|
detached: true,
|
|
24832
24992
|
stdio: ["ignore", fd, fd, "ipc"],
|
|
24833
24993
|
env: { ...process.env, [COCKPIT_CHILD_ENV]: "1" }
|
|
@@ -24892,7 +25052,7 @@ async function followStartup(target, childPid, logFile) {
|
|
|
24892
25052
|
}
|
|
24893
25053
|
function spawnDetachedRefresh(target, argv, refreshId) {
|
|
24894
25054
|
const logFile = cockpitLogPath(target);
|
|
24895
|
-
mkdirSync6(
|
|
25055
|
+
mkdirSync6(dirname12(logFile), { recursive: true });
|
|
24896
25056
|
const fd = openSync2(logFile, "a");
|
|
24897
25057
|
const env = {
|
|
24898
25058
|
...process.env,
|
|
@@ -24900,7 +25060,7 @@ function spawnDetachedRefresh(target, argv, refreshId) {
|
|
|
24900
25060
|
PUDDLE_INTERNAL_REFRESH: "1"
|
|
24901
25061
|
};
|
|
24902
25062
|
delete env[COCKPIT_CHILD_ENV];
|
|
24903
|
-
const child =
|
|
25063
|
+
const child = spawn9(process.execPath, [process.argv[1] ?? "", ...argv], {
|
|
24904
25064
|
detached: true,
|
|
24905
25065
|
stdio: ["ignore", fd, fd],
|
|
24906
25066
|
env
|
|
@@ -25135,7 +25295,7 @@ async function installDesktopAppImage(version2, logger) {
|
|
|
25135
25295
|
...protocol ? { protocol } : {}
|
|
25136
25296
|
});
|
|
25137
25297
|
logger.info(`installed \u2014 run it directly (${target}) or add it to your launcher`);
|
|
25138
|
-
const opener =
|
|
25298
|
+
const opener = spawn10("xdg-open", [dir], { stdio: "ignore", detached: true });
|
|
25139
25299
|
opener.on("error", () => void 0);
|
|
25140
25300
|
opener.unref();
|
|
25141
25301
|
return 0;
|
|
@@ -25302,7 +25462,7 @@ function timestampedLogger() {
|
|
|
25302
25462
|
|
|
25303
25463
|
// src/cli/run.ts
|
|
25304
25464
|
function assetsDir() {
|
|
25305
|
-
const here =
|
|
25465
|
+
const here = dirname13(fileURLToPath5(import.meta.url));
|
|
25306
25466
|
for (const candidate of [join17(here, "public"), join17(here, "..", "..", "dist", "public")]) {
|
|
25307
25467
|
if (existsSync7(join17(candidate, "index.html"))) return candidate;
|
|
25308
25468
|
}
|