@puddle-code/cli 0.2.21 → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +7 -4
- package/README.md +4 -0
- package/dist/host-control.mjs +202 -22
- package/dist/index.js +223 -29
- package/dist/install-cli.sh +13 -2
- package/dist/public/assets/App-XpQccO6u.js +2 -0
- package/dist/public/assets/{Dashboard-BhAek_r4.js → Dashboard-DMEBtYwv.js} +1 -1
- package/dist/public/assets/{EditorTabClose-CSKAGWsA.js → EditorTabClose-PbgNs_rN.js} +1 -1
- package/dist/public/assets/{FindWidget-B6dVpkKr.js → FindWidget-ZDHywlX4.js} +1 -1
- package/dist/public/assets/LazyTerminal-DRgaFViU.js +2 -0
- package/dist/public/assets/{ModelRefcount-CrpDNwTn.js → ModelRefcount-CI3cYeQp.js} +1 -1
- package/dist/public/assets/{NewProjectDialog-D-hVQlA4.js → NewProjectDialog-Bhfj_sYl.js} +1 -1
- package/dist/public/assets/{PaneEditorBody--h9jLt1e.js → PaneEditorBody-Bz74yrKU.js} +3 -3
- package/dist/public/assets/{PdfViewer-CNzO040W.js → PdfViewer-73_UlYnM.js} +2 -2
- package/dist/public/assets/{SettingsDialog-DaxYdggs.js → SettingsDialog-DJmvzJHQ.js} +2 -2
- package/dist/public/assets/{Terminal-DQL8GETy.js → Terminal-BwuoWKED.js} +5 -5
- package/dist/public/assets/{Workspace-BDDSmIKE.js → Workspace-DPL1IKA6.js} +4 -4
- package/dist/public/assets/{abnfDiagram-VCTEODGH-Dj6CI3Nv.js → abnfDiagram-VCTEODGH-AawOhIcj.js} +1 -1
- package/dist/public/assets/architecture-7GRP2DOG-BbAArV9u.js +1 -0
- package/dist/public/assets/{architectureDiagram-5GKGNRK7-7n7HJQxV.js → architectureDiagram-5GKGNRK7-D9vP5DO8.js} +1 -1
- package/dist/public/assets/{blockDiagram-I7D4REHJ-Cmsxv8OS.js → blockDiagram-I7D4REHJ-Cm9i3cTT.js} +1 -1
- package/dist/public/assets/{buffer-store-NeRSjzSg.js → buffer-store-BIpSx_-b.js} +2 -2
- package/dist/public/assets/{button-hdghxls7.js → button-CgZcwDne.js} +1 -1
- package/dist/public/assets/{c4Diagram-7LVT6UL2-D23ryIme.js → c4Diagram-7LVT6UL2-BiN1-NKB.js} +1 -1
- package/dist/public/assets/channel-CUWW1WRo.js +1 -0
- package/dist/public/assets/{chunk-2E4U76K2-usroR3SM.js → chunk-2E4U76K2-BxAMvG2q.js} +1 -1
- package/dist/public/assets/{chunk-4HAMMTFA-B4mxD8f1.js → chunk-4HAMMTFA-D4UgoMR5.js} +1 -1
- package/dist/public/assets/{chunk-75Z2AOVW-BSDNHsOk.js → chunk-75Z2AOVW-ViSC5KeO.js} +1 -1
- package/dist/public/assets/{chunk-CLGD4ZFX-DpUm0L6C.js → chunk-CLGD4ZFX-C1obqh7u.js} +1 -1
- package/dist/public/assets/{chunk-DU6HZSFF-Cin9bFEJ.js → chunk-DU6HZSFF-Dd9xUi9L.js} +1 -1
- package/dist/public/assets/{chunk-F27PBJKO-BWPIZmRh.js → chunk-F27PBJKO-S5xJlLKg.js} +1 -1
- package/dist/public/assets/{chunk-GMAD6QVW-eS27qQYi.js → chunk-GMAD6QVW-DXbO7ojE.js} +1 -1
- package/dist/public/assets/{chunk-GVQU2GXP-DvZzuy44.js → chunk-GVQU2GXP-vZ5Z6XwC.js} +1 -1
- package/dist/public/assets/{chunk-IMKFNOWR-CKfEqBn8.js → chunk-IMKFNOWR-BGcGac3f.js} +1 -1
- package/dist/public/assets/{chunk-L3NEJ4N5-Gq2sL0Oq.js → chunk-L3NEJ4N5-BfxBma0T.js} +1 -1
- package/dist/public/assets/{chunk-OSK3NFVY-DSHFDm2K.js → chunk-OSK3NFVY-BaWjSKfn.js} +1 -1
- package/dist/public/assets/{chunk-P2QGCYS3-B0b6PsO0.js → chunk-P2QGCYS3-Ce8Ukv1J.js} +1 -1
- package/dist/public/assets/{chunk-POPQ4Y6H-B_whPWNN.js → chunk-POPQ4Y6H-lrRlaehc.js} +1 -1
- package/dist/public/assets/{chunk-PWAF6VOD-DfdxoQ_F.js → chunk-PWAF6VOD-DcoK5-E2.js} +1 -1
- package/dist/public/assets/{chunk-SHT3W25Y-CHrnqlvt.js → chunk-SHT3W25Y-BWdHabuP.js} +1 -1
- package/dist/public/assets/{chunk-SVP7TREG-keTkvLck.js → chunk-SVP7TREG-CfpAvBiO.js} +1 -1
- package/dist/public/assets/{chunk-TICWLB2K-ZF0XdA5t.js → chunk-TICWLB2K-BnqQqZIp.js} +1 -1
- package/dist/public/assets/{chunk-TLUHSLCS-B3xiw07r.js → chunk-TLUHSLCS-Cd6EShzW.js} +2 -2
- package/dist/public/assets/classDiagram-ZZMXUADV-Cve4a5Gc.js +1 -0
- package/dist/public/assets/classDiagram-v2-VYDZK3BY-Cve4a5Gc.js +1 -0
- package/dist/public/assets/{context-menu-fGutCa7q.js → context-menu-CtKnUzHa.js} +1 -1
- package/dist/public/assets/{copy-B38GDFbv.js → copy-Xz4fK2YI.js} +1 -1
- package/dist/public/assets/{cssMode-BBPxRrZH.js → cssMode-CNBJ-DrN.js} +1 -1
- package/dist/public/assets/{cynefin-OW5HDTMX-BKwXHhp6.js → cynefin-OW5HDTMX-C1-MjjCZ.js} +1 -1
- package/dist/public/assets/{cynefinDiagram-5FMLGOSQ-B59dmX8D.js → cynefinDiagram-5FMLGOSQ-xt5hQJ88.js} +1 -1
- package/dist/public/assets/{dagre-GXQ25YYZ-BysK_yGg.js → dagre-GXQ25YYZ-Bgahh86t.js} +1 -1
- package/dist/public/assets/{diagram-S7CK7UJ4-BTvgOprS.js → diagram-S7CK7UJ4-Djip7YHP.js} +1 -1
- package/dist/public/assets/{diagram-UQ7AKVKN-C1FXQfFT.js → diagram-UQ7AKVKN-StD7DYFa.js} +1 -1
- package/dist/public/assets/{diagram-VSXAHHWV-CTub3LLw.js → diagram-VSXAHHWV-C6W2XMTF.js} +1 -1
- package/dist/public/assets/{diagram-VX7I27RA-C8YSQsst.js → diagram-VX7I27RA-C5rBIjxM.js} +1 -1
- package/dist/public/assets/{diagram-Z3DM3KII-zBY2ZT-7.js → diagram-Z3DM3KII-DDzmZnRU.js} +1 -1
- package/dist/public/assets/dialog-_JRACgt4.js +41 -0
- package/dist/public/assets/disclosure-DBXM9uBm.js +1 -0
- package/dist/public/assets/{dist-DWt3BCrg.js → dist-Bl7vUoam.js} +1 -1
- package/dist/public/assets/{dist-1iWQMdtt.js → dist-CzEdee3K.js} +1 -1
- package/dist/public/assets/{ebnfDiagram-PWID7BFC-DZbYMMq9.js → ebnfDiagram-PWID7BFC-TJlh5Fea.js} +1 -1
- package/dist/public/assets/{erDiagram-RLTQ6QDP-BufFqh6K.js → erDiagram-RLTQ6QDP-BSNVCw_x.js} +1 -1
- package/dist/public/assets/{errors-0CwhraNS.js → errors-BzfxU_Kw.js} +1 -1
- package/dist/public/assets/eventmodeling-NTZA5JFV-DZ8G1RJ1.js +1 -0
- package/dist/public/assets/flowDiagram-HODETNUW-Dd9WpTU6.js +1 -0
- package/dist/public/assets/{ganttDiagram-EL5Y4UJY-CzBnAVfV.js → ganttDiagram-EL5Y4UJY-BGFNgCoM.js} +1 -1
- package/dist/public/assets/{gitGraph-4MIJSDKK-DzkiKDz3.js → gitGraph-4MIJSDKK-Du3WBCxU.js} +1 -1
- package/dist/public/assets/{gitGraphDiagram-WWUBYQGX-Cg5zqV71.js → gitGraphDiagram-WWUBYQGX-Dq_yAVmM.js} +1 -1
- package/dist/public/assets/{htmlMode-HP2zLptL.js → htmlMode-BWm5ayBQ.js} +1 -1
- package/dist/public/assets/index-BP-EF5G2.js +82 -0
- package/dist/public/assets/index-CAvJOpdz.css +2 -0
- package/dist/public/assets/{info-A6RAGUB7-DrzRcVCp.js → info-A6RAGUB7-V0hlAV3d.js} +1 -1
- package/dist/public/assets/{infoDiagram-27XIBGKW-DKhhQ6Mi.js → infoDiagram-27XIBGKW-DZM1jHkq.js} +1 -1
- package/dist/public/assets/{ishikawaDiagram-5VMMS53U-Sxvy6BP4.js → ishikawaDiagram-5VMMS53U-CZlO72MU.js} +1 -1
- package/dist/public/assets/{journeyDiagram-3NMN7TZE-DLCDGlAt.js → journeyDiagram-3NMN7TZE-DZZieltZ.js} +1 -1
- package/dist/public/assets/{jsonMode-3cqCCYan.js → jsonMode-DA3Di61-.js} +1 -1
- package/dist/public/assets/{kanban-definition-UXKFOSKX-BBHezsUK.js → kanban-definition-UXKFOSKX-BAFfgDCD.js} +1 -1
- package/dist/public/assets/{line-CXD0KIW6.js → line-DNRJuk5l.js} +1 -1
- package/dist/public/assets/{markdown-mermaid-gr78oRak.js → markdown-mermaid-zldCuMow.js} +2 -2
- package/dist/public/assets/{math-DD0qgOf_.js → math-Bl0zHVK2.js} +1 -1
- package/dist/public/assets/{media-refresh-store-DTLvGgrw.js → media-refresh-store-BemN_6sc.js} +1 -1
- package/dist/public/assets/{mermaid-parser.core-CQpv25sY.js → mermaid-parser.core-DpOHgT8D.js} +3 -3
- package/dist/public/assets/{mermaid.core-CO3okgIG.js → mermaid.core-DuO1Atct.js} +3 -3
- package/dist/public/assets/{mindmap-definition-YA3MSWOX-DnuqRR1y.js → mindmap-definition-YA3MSWOX-Bbgshnhk.js} +1 -1
- package/dist/public/assets/notification-delivery-DehaYHWS.js +1 -0
- package/dist/public/assets/{packet-AYTQ26CC--9UnHksn.js → packet-AYTQ26CC-H2b8zBMM.js} +1 -1
- package/dist/public/assets/{pdf-DFR5TvGJ.js → pdf-DTc2umrm.js} +1 -1
- package/dist/public/assets/{pegDiagram-XKGWAZYB-m8JdNNtC.js → pegDiagram-XKGWAZYB-BKdl5Qrn.js} +1 -1
- package/dist/public/assets/{pie-WAS4IAKB-GnDinOP5.js → pie-WAS4IAKB-SB8x1Dpp.js} +1 -1
- package/dist/public/assets/{pieDiagram-E7YTZNPT-u-NA8MFl.js → pieDiagram-E7YTZNPT-YXMNp-5O.js} +1 -1
- package/dist/public/assets/{project-abbrev-Ce2YQx3q.js → project-abbrev-D7aa-LGS.js} +1 -1
- package/dist/public/assets/{protocol-support-DM3D3Owq.js → protocol-support-Dm8bEo7Y.js} +1 -1
- package/dist/public/assets/{quadrantDiagram-AXDQQJYC-si_KhMBB.js → quadrantDiagram-AXDQQJYC-B2TAChhA.js} +1 -1
- package/dist/public/assets/{radar-RG4KPBEZ-CnJwODJt.js → radar-RG4KPBEZ-D2xzXNL8.js} +1 -1
- package/dist/public/assets/{railroad-74A4TZTK-Cgg0LWTI.js → railroad-74A4TZTK-CKug6hj8.js} +1 -1
- package/dist/public/assets/railroad-abnf-HS5TGJTU-cj9XZHow.js +1 -0
- package/dist/public/assets/railroad-ebnf-LZEXJU2U-CCIfyLjg.js +1 -0
- package/dist/public/assets/railroad-peg-WCYAUIDC-DkxYDi7O.js +1 -0
- package/dist/public/assets/{railroadDiagram-O6MQD6OU-DuQX8qaE.js → railroadDiagram-O6MQD6OU-Bft2oh-d.js} +1 -1
- package/dist/public/assets/{requirementDiagram-BXWQKSXE-Chwrn5Tf.js → requirementDiagram-BXWQKSXE-e0GCEfhM.js} +1 -1
- package/dist/public/assets/{sankeyDiagram-P5KCCOFB-FpJ30BIQ.js → sankeyDiagram-P5KCCOFB-Csb70YNA.js} +1 -1
- package/dist/public/assets/{scroll-restoration-B3J09_am.js → scroll-restoration-D7f4DDsJ.js} +1 -1
- package/dist/public/assets/{selection-actions-awCJJCSe.js → selection-actions-D5wKfiBu.js} +1 -1
- package/dist/public/assets/{sequenceDiagram-WJ2MYXX4-DVw87Ucm.js → sequenceDiagram-WJ2MYXX4-DcnD8T30.js} +1 -1
- package/dist/public/assets/{stateDiagram-D77RDMKH-qmBcs9VH.js → stateDiagram-D77RDMKH-GnwFUlNg.js} +1 -1
- package/dist/public/assets/stateDiagram-v2-MP3YSRHH-Bktkoy9c.js +1 -0
- package/dist/public/assets/{swimlanes-42K2YHIH-ts5KQGMt.js → swimlanes-42K2YHIH-CPq_eKyi.js} +1 -1
- package/dist/public/assets/swimlanesDiagram-VR7AAH4N-BmjIwfwd.js +8 -0
- package/dist/public/assets/{switch-DMkSxGf3.js → switch-DZbOKnZ0.js} +1 -1
- package/dist/public/assets/{timeline-definition-24CTP7MA-BDL_pzrt.js → timeline-definition-24CTP7MA-DjUPAJJx.js} +1 -1
- package/dist/public/assets/{treeView-Q6P3EWNA-B1vMOTkl.js → treeView-Q6P3EWNA-DBuhlxaq.js} +1 -1
- package/dist/public/assets/{treemap-WGGIJYW6-wi5T0FIb.js → treemap-WGGIJYW6-3TKwSIeh.js} +1 -1
- package/dist/public/assets/{tsMode-CsaS5imR.js → tsMode-BYwFH3pC.js} +1 -1
- package/dist/public/assets/{use-ui-state-2VprViGF.js → use-ui-state-BXROVbIw.js} +1 -1
- package/dist/public/assets/{vennDiagram-4TSXK5OY-Djvp5-2_.js → vennDiagram-4TSXK5OY-oDrGN_Dh.js} +1 -1
- package/dist/public/assets/{view-state-store-rOwEBYKn.js → view-state-store-vUrDt7wu.js} +1 -1
- package/dist/public/assets/{wardley-WFR3VGLG-Di-PFH_i.js → wardley-WFR3VGLG-Br5CacuJ.js} +1 -1
- package/dist/public/assets/{wardleyDiagram-VM6X3IG4-B5Y8UZiL.js → wardleyDiagram-VM6X3IG4-Cw_uOLXA.js} +1 -1
- package/dist/public/assets/{ws-DsytGlkr.js → ws-Ug1Tr2sh.js} +1 -1
- package/dist/public/assets/{xychartDiagram-S5SC5T6Z-d-pvxFe2.js → xychartDiagram-S5SC5T6Z-Cl8gNx_J.js} +1 -1
- package/dist/public/index.html +2 -2
- package/dist/public/notification-worker.js +104 -6
- package/dist/puddlang.js +17578 -0
- package/package.json +3 -2
- package/dist/public/assets/App-NrJUEV9p.js +0 -2
- package/dist/public/assets/LazyTerminal-fxF4IO4o.js +0 -2
- package/dist/public/assets/architecture-7GRP2DOG-CDcS1iVd.js +0 -1
- package/dist/public/assets/channel-B98_B4F2.js +0 -1
- package/dist/public/assets/classDiagram-ZZMXUADV-CalLaxUD.js +0 -1
- package/dist/public/assets/classDiagram-v2-VYDZK3BY-CalLaxUD.js +0 -1
- package/dist/public/assets/dialog-CVAp0B_q.js +0 -41
- package/dist/public/assets/disclosure-CWTUvRKU.js +0 -1
- package/dist/public/assets/eventmodeling-NTZA5JFV-CC5F0fZk.js +0 -1
- package/dist/public/assets/flowDiagram-HODETNUW-Dmt2DAB8.js +0 -1
- package/dist/public/assets/index-Bwl8S5Du.css +0 -2
- package/dist/public/assets/index-W9vnFL1i.js +0 -82
- package/dist/public/assets/notification-delivery-rQp5tkM8.js +0 -1
- package/dist/public/assets/railroad-abnf-HS5TGJTU-DPqD3hz7.js +0 -1
- package/dist/public/assets/railroad-ebnf-LZEXJU2U-9Jxyrh7e.js +0 -1
- package/dist/public/assets/railroad-peg-WCYAUIDC-gr2ZokSI.js +0 -1
- package/dist/public/assets/stateDiagram-v2-MP3YSRHH-TK5UygAI.js +0 -1
- package/dist/public/assets/swimlanesDiagram-VR7AAH4N-BUMN0oZf.js +0 -8
package/CHANGELOG.md
CHANGED
|
@@ -4,9 +4,12 @@ Archived release changelog. Governance lives in CLAUDE.md §"Changelog disciplin
|
|
|
4
4
|
|
|
5
5
|
# Changelog
|
|
6
6
|
|
|
7
|
-
## [0.
|
|
7
|
+
## [0.3.0] — 2026-10-14
|
|
8
8
|
|
|
9
|
-
###
|
|
9
|
+
### Added
|
|
10
10
|
|
|
11
|
-
-
|
|
12
|
-
|
|
11
|
+
- Add puddlang: host-executed TypeScript agent workflows, Codex exact turns and structured replies, profile/account selection, durable run records, cancellation, CLI and stdio MCP access; bundle `puddlang` with existing CLI installers (daemon protocol 23.0, remote protocol unchanged).
|
|
12
|
+
|
|
13
|
+
### Changed
|
|
14
|
+
|
|
15
|
+
- Bump daemon/cockpit protocol to 23.0 for the puddlang rollout; require matching clients and hosts through the existing approved upgrade flow, while retaining remote transport protocol 3.
|
package/README.md
CHANGED
|
@@ -29,6 +29,10 @@ installer (replace the example host):
|
|
|
29
29
|
curl -fsSL https://app.example.com/install.sh | sh
|
|
30
30
|
```
|
|
31
31
|
|
|
32
|
+
The CLI also includes `puddlang`, a TypeScript interface for coder/reviewer loops
|
|
33
|
+
and other agent workflows, available through the shell or stdio MCP. See the
|
|
34
|
+
[puddlang guide](docs/puddlang.md) for setup, examples and initial limitations.
|
|
35
|
+
|
|
32
36
|
This installs the CLI under `~/.local/share/puddle/cli` and its launcher at
|
|
33
37
|
`~/.local/bin/puddle`. Add `~/.local/bin` to your `PATH` if the installer asks.
|
|
34
38
|
The standalone releases support Linux x64/arm64 and macOS arm64. The script and
|
package/dist/host-control.mjs
CHANGED
|
@@ -14521,6 +14521,21 @@ function date4(params) {
|
|
|
14521
14521
|
// ../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/classic/external.js
|
|
14522
14522
|
config(en_default());
|
|
14523
14523
|
|
|
14524
|
+
// ../shared/src/api/common.ts
|
|
14525
|
+
var errorResponseSchema = external_exports.object({
|
|
14526
|
+
error: external_exports.object({
|
|
14527
|
+
code: external_exports.string(),
|
|
14528
|
+
message: external_exports.string(),
|
|
14529
|
+
/** Optional machine-readable context for recoverable conflicts. */
|
|
14530
|
+
details: external_exports.record(external_exports.string(), external_exports.unknown()).optional()
|
|
14531
|
+
})
|
|
14532
|
+
});
|
|
14533
|
+
var isoTimestamp = external_exports.iso.datetime({ offset: true });
|
|
14534
|
+
var rowId = external_exports.number().int().positive();
|
|
14535
|
+
var sessionId = external_exports.uuid();
|
|
14536
|
+
var projectId = external_exports.string().regex(/^[0-9a-f]{10}$/);
|
|
14537
|
+
var profileId = external_exports.string().regex(/^[0-9a-f]{10}$/);
|
|
14538
|
+
|
|
14524
14539
|
// ../shared/src/notifications.ts
|
|
14525
14540
|
var notificationPreferencesSchema = external_exports.object({
|
|
14526
14541
|
desktop: external_exports.boolean().default(true),
|
|
@@ -14528,10 +14543,22 @@ var notificationPreferencesSchema = external_exports.object({
|
|
|
14528
14543
|
when_focused: external_exports.boolean().default(true),
|
|
14529
14544
|
muted_projects: external_exports.array(external_exports.string()).default([])
|
|
14530
14545
|
});
|
|
14546
|
+
var notificationTargetSchema = external_exports.object({
|
|
14547
|
+
project: projectId,
|
|
14548
|
+
session: sessionId,
|
|
14549
|
+
host: external_exports.string().uuid().optional()
|
|
14550
|
+
}).strict();
|
|
14551
|
+
var notificationContentSchema = external_exports.object({
|
|
14552
|
+
title: external_exports.string().min(1).max(160),
|
|
14553
|
+
body: external_exports.string().min(1).max(256),
|
|
14554
|
+
project: projectId,
|
|
14555
|
+
session: sessionId
|
|
14556
|
+
}).strict();
|
|
14531
14557
|
var desktopNotificationRequestSchema = external_exports.object({
|
|
14532
14558
|
id: external_exports.string().min(1).max(128),
|
|
14533
14559
|
title: external_exports.string().min(1).max(160),
|
|
14534
|
-
body: external_exports.string().min(1).max(256)
|
|
14560
|
+
body: external_exports.string().min(1).max(256),
|
|
14561
|
+
target: notificationTargetSchema.optional()
|
|
14535
14562
|
}).strict();
|
|
14536
14563
|
var notificationDeliverySchema = external_exports.object({
|
|
14537
14564
|
state: external_exports.enum(["unverified", "shown", "failed", "unsupported"]),
|
|
@@ -14541,29 +14568,16 @@ var agentNotificationSchema = external_exports.object({
|
|
|
14541
14568
|
t: external_exports.literal("agent-notification"),
|
|
14542
14569
|
id: external_exports.string().uuid(),
|
|
14543
14570
|
session: external_exports.string().uuid(),
|
|
14544
|
-
reason: external_exports.enum(["waiting_input", "exited"])
|
|
14571
|
+
reason: external_exports.enum(["waiting_input", "exited"]),
|
|
14572
|
+
content: notificationContentSchema.optional()
|
|
14545
14573
|
});
|
|
14546
14574
|
|
|
14547
|
-
// ../shared/src/api/common.ts
|
|
14548
|
-
var errorResponseSchema = external_exports.object({
|
|
14549
|
-
error: external_exports.object({
|
|
14550
|
-
code: external_exports.string(),
|
|
14551
|
-
message: external_exports.string(),
|
|
14552
|
-
/** Optional machine-readable context for recoverable conflicts. */
|
|
14553
|
-
details: external_exports.record(external_exports.string(), external_exports.unknown()).optional()
|
|
14554
|
-
})
|
|
14555
|
-
});
|
|
14556
|
-
var isoTimestamp = external_exports.iso.datetime({ offset: true });
|
|
14557
|
-
var rowId = external_exports.number().int().positive();
|
|
14558
|
-
var sessionId = external_exports.uuid();
|
|
14559
|
-
var projectId = external_exports.string().regex(/^[0-9a-f]{10}$/);
|
|
14560
|
-
var profileId = external_exports.string().regex(/^[0-9a-f]{10}$/);
|
|
14561
|
-
|
|
14562
14575
|
// ../shared/src/api/version.ts
|
|
14563
14576
|
var versionResponseSchema = external_exports.object({
|
|
14564
14577
|
version: external_exports.string(),
|
|
14565
14578
|
/** Added by the host connector; absent on direct daemon responses and older connectors. */
|
|
14566
14579
|
remote_notifications: external_exports.boolean().optional(),
|
|
14580
|
+
remote_notification_previews: external_exports.boolean().optional(),
|
|
14567
14581
|
remote_image_uploads: external_exports.boolean().optional(),
|
|
14568
14582
|
protocol: external_exports.object({
|
|
14569
14583
|
major: external_exports.number().int().nonnegative(),
|
|
@@ -15932,6 +15946,7 @@ var remoteHostSchema = external_exports.object({
|
|
|
15932
15946
|
var remoteHostsSchema = external_exports.array(remoteHostSchema);
|
|
15933
15947
|
var remoteServiceInfoSchema = external_exports.object({
|
|
15934
15948
|
push_public_key: external_exports.string().max(100).optional(),
|
|
15949
|
+
push_encrypted_previews: external_exports.boolean().optional(),
|
|
15935
15950
|
providers: external_exports.array(external_exports.enum(["google", "github"])),
|
|
15936
15951
|
protocol: external_exports.literal(REMOTE_PROTOCOL_VERSION)
|
|
15937
15952
|
});
|
|
@@ -16125,6 +16140,12 @@ var imageUploadProgressSchema = external_exports.object({
|
|
|
16125
16140
|
});
|
|
16126
16141
|
|
|
16127
16142
|
// ../shared/src/remote/notifications.ts
|
|
16143
|
+
var notificationPreviewKeySchema = external_exports.object({ id: remoteIdSchema, secret: remoteSecretSchema }).strict();
|
|
16144
|
+
var encryptedNotificationSchema = external_exports.object({
|
|
16145
|
+
key: remoteIdSchema,
|
|
16146
|
+
iv: external_exports.string().regex(/^[a-f0-9]{24}$/),
|
|
16147
|
+
ciphertext: external_exports.string().min(32).max(3072).regex(/^(?:[a-f0-9]{2})+$/)
|
|
16148
|
+
}).strict();
|
|
16128
16149
|
var pushEndpointSchema = external_exports.string().max(2048).url().refine((value) => {
|
|
16129
16150
|
let url2;
|
|
16130
16151
|
try {
|
|
@@ -16143,18 +16164,177 @@ var pushSubscriptionSchema = external_exports.object({
|
|
|
16143
16164
|
auth: external_exports.string().regex(/^[A-Za-z0-9_-]{22}={0,2}$/)
|
|
16144
16165
|
}).strict()
|
|
16145
16166
|
}).strict();
|
|
16146
|
-
var pushPreferenceSchema = external_exports.object({
|
|
16147
|
-
|
|
16167
|
+
var pushPreferenceSchema = external_exports.object({
|
|
16168
|
+
subscription: pushSubscriptionSchema.nullable(),
|
|
16169
|
+
preview_key: notificationPreviewKeySchema.optional()
|
|
16170
|
+
}).strict();
|
|
16171
|
+
var pushRegistrationSchema = pushPreferenceSchema.omit({ preview_key: true }).extend({ credential: remoteSecretSchema, device: remoteIdSchema }).strict();
|
|
16148
16172
|
var pushDispatchSchema = external_exports.object({
|
|
16149
16173
|
credential: remoteSecretSchema,
|
|
16150
16174
|
devices: external_exports.array(remoteIdSchema).min(1).max(64),
|
|
16151
|
-
id: remoteIdSchema
|
|
16175
|
+
id: remoteIdSchema,
|
|
16176
|
+
preview: encryptedNotificationSchema.optional()
|
|
16177
|
+
}).strict();
|
|
16178
|
+
var pushPayloadSchema = external_exports.object({
|
|
16179
|
+
id: remoteIdSchema,
|
|
16180
|
+
host: remoteIdSchema,
|
|
16181
|
+
preview: encryptedNotificationSchema.optional()
|
|
16182
|
+
}).strict();
|
|
16183
|
+
var connectorNotificationSchema = external_exports.object({
|
|
16184
|
+
t: external_exports.literal("notify"),
|
|
16185
|
+
id: remoteIdSchema,
|
|
16186
|
+
content: notificationContentSchema.optional()
|
|
16152
16187
|
}).strict();
|
|
16153
|
-
var pushPayloadSchema = external_exports.object({ id: remoteIdSchema, host: remoteIdSchema }).strict();
|
|
16154
|
-
var connectorNotificationSchema = external_exports.object({ t: external_exports.literal("notify"), id: remoteIdSchema }).strict();
|
|
16155
16188
|
var pushDispatchResultSchema = external_exports.object({ accepted: external_exports.number().int().nonnegative(), failed: external_exports.number().int().nonnegative() }).strict();
|
|
16156
16189
|
var pushPreferenceResultSchema = external_exports.object({ enabled: external_exports.boolean() }).strict();
|
|
16157
16190
|
|
|
16191
|
+
// ../shared/src/api/puddlang.ts
|
|
16192
|
+
var PUDDLANG_MAX_SOURCE = 256 * 1024;
|
|
16193
|
+
var sourceSchema = external_exports.string().min(1).max(PUDDLANG_MAX_SOURCE).refine(
|
|
16194
|
+
(source) => new TextEncoder().encode(source).length <= PUDDLANG_MAX_SOURCE,
|
|
16195
|
+
"Source exceeds 256 KiB"
|
|
16196
|
+
);
|
|
16197
|
+
var puddlangSpawnSchema = external_exports.object({
|
|
16198
|
+
agent: external_exports.string().min(1).max(100),
|
|
16199
|
+
account: external_exports.union([external_exports.string().min(1).max(100), external_exports.number().int().positive()]).optional(),
|
|
16200
|
+
project: external_exports.string().min(1).max(200).optional(),
|
|
16201
|
+
worktree: external_exports.string().min(1).max(4096).optional(),
|
|
16202
|
+
path: external_exports.string().min(1).max(4096).optional(),
|
|
16203
|
+
title: external_exports.string().min(1).max(200).optional()
|
|
16204
|
+
}).refine((v) => Boolean(v.path) !== Boolean(v.project), "Choose path or project").refine((v) => !v.path || !v.worktree, "worktree requires project");
|
|
16205
|
+
var puddlangHandleSchema = external_exports.object({ runtime_id: external_exports.uuid(), session_id: sessionId });
|
|
16206
|
+
var puddlangAskSchema = external_exports.object({
|
|
16207
|
+
prompt: external_exports.string().min(1).max(128 * 1024),
|
|
16208
|
+
output_schema: external_exports.record(external_exports.string(), external_exports.unknown()).optional()
|
|
16209
|
+
});
|
|
16210
|
+
var puddlangStartSchema = external_exports.object({
|
|
16211
|
+
id: external_exports.uuid(),
|
|
16212
|
+
source: sourceSchema,
|
|
16213
|
+
input: external_exports.unknown().optional(),
|
|
16214
|
+
accounts: external_exports.record(external_exports.string(), external_exports.union([external_exports.string(), external_exports.number().int().positive()])).default({}),
|
|
16215
|
+
max_turns: external_exports.number().int().min(1).max(1e3).default(50),
|
|
16216
|
+
max_agents: external_exports.number().int().min(1).max(32).default(8),
|
|
16217
|
+
timeout_ms: external_exports.number().int().min(1e3).max(24 * 60 * 60 * 1e3).default(60 * 60 * 1e3)
|
|
16218
|
+
});
|
|
16219
|
+
var puddlangRunSchema = external_exports.object({
|
|
16220
|
+
id: external_exports.uuid(),
|
|
16221
|
+
profile_id: profileId,
|
|
16222
|
+
source_hash: external_exports.string(),
|
|
16223
|
+
status: external_exports.enum(["running", "completed", "failed", "cancelled", "interrupted"]),
|
|
16224
|
+
result: external_exports.unknown().nullable(),
|
|
16225
|
+
error: external_exports.string().nullable(),
|
|
16226
|
+
created_at: external_exports.string(),
|
|
16227
|
+
updated_at: external_exports.string()
|
|
16228
|
+
});
|
|
16229
|
+
var puddlangEventSchema = external_exports.object({
|
|
16230
|
+
sequence: external_exports.number().int(),
|
|
16231
|
+
run_id: external_exports.uuid(),
|
|
16232
|
+
type: external_exports.string(),
|
|
16233
|
+
data: external_exports.unknown(),
|
|
16234
|
+
created_at: external_exports.string()
|
|
16235
|
+
});
|
|
16236
|
+
var puddlangEventsSchema = external_exports.object({ events: external_exports.array(puddlangEventSchema) });
|
|
16237
|
+
var puddlangOperationSchema = external_exports.discriminatedUnion("op", [
|
|
16238
|
+
external_exports.object({ op: external_exports.literal("spawn"), options: puddlangSpawnSchema }),
|
|
16239
|
+
external_exports.object({ op: external_exports.literal("attach"), reference: external_exports.string().min(1).max(100) }),
|
|
16240
|
+
external_exports.object({ op: external_exports.literal("ask"), handle: puddlangHandleSchema, request: puddlangAskSchema }),
|
|
16241
|
+
external_exports.object({ op: external_exports.literal("stop"), handle: puddlangHandleSchema })
|
|
16242
|
+
]);
|
|
16243
|
+
var puddlangRunnerMessageSchema = external_exports.discriminatedUnion("type", [
|
|
16244
|
+
external_exports.object({
|
|
16245
|
+
type: external_exports.literal("operation"),
|
|
16246
|
+
id: external_exports.number().int(),
|
|
16247
|
+
operation: puddlangOperationSchema
|
|
16248
|
+
}),
|
|
16249
|
+
external_exports.object({
|
|
16250
|
+
type: external_exports.literal("finished"),
|
|
16251
|
+
result: external_exports.unknown().optional(),
|
|
16252
|
+
error: external_exports.string().max(8192).optional()
|
|
16253
|
+
})
|
|
16254
|
+
]);
|
|
16255
|
+
var puddlangRunnerInputSchema = external_exports.discriminatedUnion("type", [
|
|
16256
|
+
external_exports.object({
|
|
16257
|
+
type: external_exports.literal("start"),
|
|
16258
|
+
source: sourceSchema,
|
|
16259
|
+
input: external_exports.unknown().optional()
|
|
16260
|
+
}),
|
|
16261
|
+
external_exports.object({
|
|
16262
|
+
type: external_exports.literal("reply"),
|
|
16263
|
+
id: external_exports.number().int(),
|
|
16264
|
+
value: external_exports.unknown().optional(),
|
|
16265
|
+
error: external_exports.string().optional()
|
|
16266
|
+
})
|
|
16267
|
+
]);
|
|
16268
|
+
var puddlangContextSchema = external_exports.object({
|
|
16269
|
+
profile: external_exports.object({ id: profileId, name: external_exports.string() }),
|
|
16270
|
+
projects: external_exports.array(external_exports.object({ id: external_exports.string(), name: external_exports.string(), path: external_exports.string() })),
|
|
16271
|
+
accounts: external_exports.array(
|
|
16272
|
+
external_exports.object({ id: external_exports.number(), label: external_exports.string(), agent: external_exports.string(), logged_in: external_exports.boolean() })
|
|
16273
|
+
),
|
|
16274
|
+
agents: external_exports.array(external_exports.object({ id: external_exports.string(), scripted_turns: external_exports.boolean() }))
|
|
16275
|
+
});
|
|
16276
|
+
|
|
16277
|
+
// ../shared/src/api/puddlang-mcp.ts
|
|
16278
|
+
var puddlangMcpRequestSchema = external_exports.object({
|
|
16279
|
+
jsonrpc: external_exports.literal("2.0"),
|
|
16280
|
+
id: external_exports.union([external_exports.string(), external_exports.number()]).optional(),
|
|
16281
|
+
method: external_exports.string(),
|
|
16282
|
+
params: external_exports.record(external_exports.string(), external_exports.unknown()).optional()
|
|
16283
|
+
});
|
|
16284
|
+
var puddlangMcpCallSchema = external_exports.object({
|
|
16285
|
+
name: external_exports.string(),
|
|
16286
|
+
arguments: external_exports.unknown().optional()
|
|
16287
|
+
});
|
|
16288
|
+
var puddlangMcpRunSchema = puddlangStartSchema;
|
|
16289
|
+
var puddlangMcpIdSchema = external_exports.object({ id: external_exports.uuid() });
|
|
16290
|
+
var puddlangMcpEventsSchema = puddlangMcpIdSchema.extend({
|
|
16291
|
+
after: external_exports.number().int().nonnegative().default(0)
|
|
16292
|
+
});
|
|
16293
|
+
var puddlangMcpEmptySchema = external_exports.object({}).strict();
|
|
16294
|
+
var definitions = [
|
|
16295
|
+
[
|
|
16296
|
+
"puddlang_context",
|
|
16297
|
+
"List this host profile, projects, accounts and supported agents.",
|
|
16298
|
+
puddlangMcpEmptySchema,
|
|
16299
|
+
true
|
|
16300
|
+
],
|
|
16301
|
+
[
|
|
16302
|
+
"puddlang_run",
|
|
16303
|
+
'Execute a trusted single-file TypeScript programme on the host. Imports: puddlang (spawn, attach, input, z), zod, node: built-ins. Returns immediately with a durable run id; use status/events. Supply a fresh UUID id, or reuse it with identical input to recover an uncertain submission. spawn({agent:"codex",project:"name",account:"label"}); await agent.ask("task"); export default result. Supports structured ask({prompt,input,schema:z.object(...)}) and agent.stop().',
|
|
16304
|
+
puddlangMcpRunSchema,
|
|
16305
|
+
false
|
|
16306
|
+
],
|
|
16307
|
+
[
|
|
16308
|
+
"puddlang_status",
|
|
16309
|
+
"Read a run and its final default export, if finished.",
|
|
16310
|
+
puddlangMcpIdSchema,
|
|
16311
|
+
true
|
|
16312
|
+
],
|
|
16313
|
+
[
|
|
16314
|
+
"puddlang_events",
|
|
16315
|
+
"Read up to 100 events after a sequence; paginate until empty.",
|
|
16316
|
+
puddlangMcpEventsSchema,
|
|
16317
|
+
true
|
|
16318
|
+
],
|
|
16319
|
+
[
|
|
16320
|
+
"puddlang_cancel",
|
|
16321
|
+
"Cancel a run, interrupt its pending asks, and stop agents it created. Attached agents are retained.",
|
|
16322
|
+
puddlangMcpIdSchema,
|
|
16323
|
+
false
|
|
16324
|
+
]
|
|
16325
|
+
];
|
|
16326
|
+
var puddlangMcpTools = definitions.map(([name, description, schema, readOnlyHint]) => ({
|
|
16327
|
+
name,
|
|
16328
|
+
description,
|
|
16329
|
+
inputSchema: external_exports.toJSONSchema(schema, { io: "input" }),
|
|
16330
|
+
annotations: {
|
|
16331
|
+
readOnlyHint,
|
|
16332
|
+
destructiveHint: !readOnlyHint,
|
|
16333
|
+
idempotentHint: true,
|
|
16334
|
+
openWorldHint: !readOnlyHint
|
|
16335
|
+
}
|
|
16336
|
+
}));
|
|
16337
|
+
|
|
16158
16338
|
// ../shared/src/node/security.ts
|
|
16159
16339
|
import { createHash, randomBytes } from "node:crypto";
|
|
16160
16340
|
import {
|
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: 23, minor: 0 };
|
|
3929
3929
|
|
|
3930
3930
|
// ../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/classic/external.js
|
|
3931
3931
|
var external_exports = {};
|
|
@@ -18441,6 +18441,21 @@ function date4(params) {
|
|
|
18441
18441
|
// ../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/classic/external.js
|
|
18442
18442
|
config(en_default());
|
|
18443
18443
|
|
|
18444
|
+
// ../shared/src/api/common.ts
|
|
18445
|
+
var errorResponseSchema = external_exports.object({
|
|
18446
|
+
error: external_exports.object({
|
|
18447
|
+
code: external_exports.string(),
|
|
18448
|
+
message: external_exports.string(),
|
|
18449
|
+
/** Optional machine-readable context for recoverable conflicts. */
|
|
18450
|
+
details: external_exports.record(external_exports.string(), external_exports.unknown()).optional()
|
|
18451
|
+
})
|
|
18452
|
+
});
|
|
18453
|
+
var isoTimestamp = external_exports.iso.datetime({ offset: true });
|
|
18454
|
+
var rowId = external_exports.number().int().positive();
|
|
18455
|
+
var sessionId = external_exports.uuid();
|
|
18456
|
+
var projectId = external_exports.string().regex(/^[0-9a-f]{10}$/);
|
|
18457
|
+
var profileId = external_exports.string().regex(/^[0-9a-f]{10}$/);
|
|
18458
|
+
|
|
18444
18459
|
// ../shared/src/notifications.ts
|
|
18445
18460
|
var notificationPreferencesSchema = external_exports.object({
|
|
18446
18461
|
desktop: external_exports.boolean().default(true),
|
|
@@ -18448,10 +18463,22 @@ var notificationPreferencesSchema = external_exports.object({
|
|
|
18448
18463
|
when_focused: external_exports.boolean().default(true),
|
|
18449
18464
|
muted_projects: external_exports.array(external_exports.string()).default([])
|
|
18450
18465
|
});
|
|
18466
|
+
var notificationTargetSchema = external_exports.object({
|
|
18467
|
+
project: projectId,
|
|
18468
|
+
session: sessionId,
|
|
18469
|
+
host: external_exports.string().uuid().optional()
|
|
18470
|
+
}).strict();
|
|
18471
|
+
var notificationContentSchema = external_exports.object({
|
|
18472
|
+
title: external_exports.string().min(1).max(160),
|
|
18473
|
+
body: external_exports.string().min(1).max(256),
|
|
18474
|
+
project: projectId,
|
|
18475
|
+
session: sessionId
|
|
18476
|
+
}).strict();
|
|
18451
18477
|
var desktopNotificationRequestSchema = external_exports.object({
|
|
18452
18478
|
id: external_exports.string().min(1).max(128),
|
|
18453
18479
|
title: external_exports.string().min(1).max(160),
|
|
18454
|
-
body: external_exports.string().min(1).max(256)
|
|
18480
|
+
body: external_exports.string().min(1).max(256),
|
|
18481
|
+
target: notificationTargetSchema.optional()
|
|
18455
18482
|
}).strict();
|
|
18456
18483
|
var notificationDeliverySchema = external_exports.object({
|
|
18457
18484
|
state: external_exports.enum(["unverified", "shown", "failed", "unsupported"]),
|
|
@@ -18461,29 +18488,16 @@ var agentNotificationSchema = external_exports.object({
|
|
|
18461
18488
|
t: external_exports.literal("agent-notification"),
|
|
18462
18489
|
id: external_exports.string().uuid(),
|
|
18463
18490
|
session: external_exports.string().uuid(),
|
|
18464
|
-
reason: external_exports.enum(["waiting_input", "exited"])
|
|
18491
|
+
reason: external_exports.enum(["waiting_input", "exited"]),
|
|
18492
|
+
content: notificationContentSchema.optional()
|
|
18465
18493
|
});
|
|
18466
18494
|
|
|
18467
|
-
// ../shared/src/api/common.ts
|
|
18468
|
-
var errorResponseSchema = external_exports.object({
|
|
18469
|
-
error: external_exports.object({
|
|
18470
|
-
code: external_exports.string(),
|
|
18471
|
-
message: external_exports.string(),
|
|
18472
|
-
/** Optional machine-readable context for recoverable conflicts. */
|
|
18473
|
-
details: external_exports.record(external_exports.string(), external_exports.unknown()).optional()
|
|
18474
|
-
})
|
|
18475
|
-
});
|
|
18476
|
-
var isoTimestamp = external_exports.iso.datetime({ offset: true });
|
|
18477
|
-
var rowId = external_exports.number().int().positive();
|
|
18478
|
-
var sessionId = external_exports.uuid();
|
|
18479
|
-
var projectId = external_exports.string().regex(/^[0-9a-f]{10}$/);
|
|
18480
|
-
var profileId = external_exports.string().regex(/^[0-9a-f]{10}$/);
|
|
18481
|
-
|
|
18482
18495
|
// ../shared/src/api/version.ts
|
|
18483
18496
|
var versionResponseSchema = external_exports.object({
|
|
18484
18497
|
version: external_exports.string(),
|
|
18485
18498
|
/** Added by the host connector; absent on direct daemon responses and older connectors. */
|
|
18486
18499
|
remote_notifications: external_exports.boolean().optional(),
|
|
18500
|
+
remote_notification_previews: external_exports.boolean().optional(),
|
|
18487
18501
|
remote_image_uploads: external_exports.boolean().optional(),
|
|
18488
18502
|
protocol: external_exports.object({
|
|
18489
18503
|
major: external_exports.number().int().nonnegative(),
|
|
@@ -19852,6 +19866,7 @@ var remoteHostSchema = external_exports.object({
|
|
|
19852
19866
|
var remoteHostsSchema = external_exports.array(remoteHostSchema);
|
|
19853
19867
|
var remoteServiceInfoSchema = external_exports.object({
|
|
19854
19868
|
push_public_key: external_exports.string().max(100).optional(),
|
|
19869
|
+
push_encrypted_previews: external_exports.boolean().optional(),
|
|
19855
19870
|
providers: external_exports.array(external_exports.enum(["google", "github"])),
|
|
19856
19871
|
protocol: external_exports.literal(REMOTE_PROTOCOL_VERSION)
|
|
19857
19872
|
});
|
|
@@ -20045,6 +20060,12 @@ var imageUploadProgressSchema = external_exports.object({
|
|
|
20045
20060
|
});
|
|
20046
20061
|
|
|
20047
20062
|
// ../shared/src/remote/notifications.ts
|
|
20063
|
+
var notificationPreviewKeySchema = external_exports.object({ id: remoteIdSchema, secret: remoteSecretSchema }).strict();
|
|
20064
|
+
var encryptedNotificationSchema = external_exports.object({
|
|
20065
|
+
key: remoteIdSchema,
|
|
20066
|
+
iv: external_exports.string().regex(/^[a-f0-9]{24}$/),
|
|
20067
|
+
ciphertext: external_exports.string().min(32).max(3072).regex(/^(?:[a-f0-9]{2})+$/)
|
|
20068
|
+
}).strict();
|
|
20048
20069
|
var pushEndpointSchema = external_exports.string().max(2048).url().refine((value) => {
|
|
20049
20070
|
let url2;
|
|
20050
20071
|
try {
|
|
@@ -20063,18 +20084,177 @@ var pushSubscriptionSchema = external_exports.object({
|
|
|
20063
20084
|
auth: external_exports.string().regex(/^[A-Za-z0-9_-]{22}={0,2}$/)
|
|
20064
20085
|
}).strict()
|
|
20065
20086
|
}).strict();
|
|
20066
|
-
var pushPreferenceSchema = external_exports.object({
|
|
20067
|
-
|
|
20087
|
+
var pushPreferenceSchema = external_exports.object({
|
|
20088
|
+
subscription: pushSubscriptionSchema.nullable(),
|
|
20089
|
+
preview_key: notificationPreviewKeySchema.optional()
|
|
20090
|
+
}).strict();
|
|
20091
|
+
var pushRegistrationSchema = pushPreferenceSchema.omit({ preview_key: true }).extend({ credential: remoteSecretSchema, device: remoteIdSchema }).strict();
|
|
20068
20092
|
var pushDispatchSchema = external_exports.object({
|
|
20069
20093
|
credential: remoteSecretSchema,
|
|
20070
20094
|
devices: external_exports.array(remoteIdSchema).min(1).max(64),
|
|
20071
|
-
id: remoteIdSchema
|
|
20095
|
+
id: remoteIdSchema,
|
|
20096
|
+
preview: encryptedNotificationSchema.optional()
|
|
20097
|
+
}).strict();
|
|
20098
|
+
var pushPayloadSchema = external_exports.object({
|
|
20099
|
+
id: remoteIdSchema,
|
|
20100
|
+
host: remoteIdSchema,
|
|
20101
|
+
preview: encryptedNotificationSchema.optional()
|
|
20102
|
+
}).strict();
|
|
20103
|
+
var connectorNotificationSchema = external_exports.object({
|
|
20104
|
+
t: external_exports.literal("notify"),
|
|
20105
|
+
id: remoteIdSchema,
|
|
20106
|
+
content: notificationContentSchema.optional()
|
|
20072
20107
|
}).strict();
|
|
20073
|
-
var pushPayloadSchema = external_exports.object({ id: remoteIdSchema, host: remoteIdSchema }).strict();
|
|
20074
|
-
var connectorNotificationSchema = external_exports.object({ t: external_exports.literal("notify"), id: remoteIdSchema }).strict();
|
|
20075
20108
|
var pushDispatchResultSchema = external_exports.object({ accepted: external_exports.number().int().nonnegative(), failed: external_exports.number().int().nonnegative() }).strict();
|
|
20076
20109
|
var pushPreferenceResultSchema = external_exports.object({ enabled: external_exports.boolean() }).strict();
|
|
20077
20110
|
|
|
20111
|
+
// ../shared/src/api/puddlang.ts
|
|
20112
|
+
var PUDDLANG_MAX_SOURCE = 256 * 1024;
|
|
20113
|
+
var sourceSchema = external_exports.string().min(1).max(PUDDLANG_MAX_SOURCE).refine(
|
|
20114
|
+
(source) => new TextEncoder().encode(source).length <= PUDDLANG_MAX_SOURCE,
|
|
20115
|
+
"Source exceeds 256 KiB"
|
|
20116
|
+
);
|
|
20117
|
+
var puddlangSpawnSchema = external_exports.object({
|
|
20118
|
+
agent: external_exports.string().min(1).max(100),
|
|
20119
|
+
account: external_exports.union([external_exports.string().min(1).max(100), external_exports.number().int().positive()]).optional(),
|
|
20120
|
+
project: external_exports.string().min(1).max(200).optional(),
|
|
20121
|
+
worktree: external_exports.string().min(1).max(4096).optional(),
|
|
20122
|
+
path: external_exports.string().min(1).max(4096).optional(),
|
|
20123
|
+
title: external_exports.string().min(1).max(200).optional()
|
|
20124
|
+
}).refine((v) => Boolean(v.path) !== Boolean(v.project), "Choose path or project").refine((v) => !v.path || !v.worktree, "worktree requires project");
|
|
20125
|
+
var puddlangHandleSchema = external_exports.object({ runtime_id: external_exports.uuid(), session_id: sessionId });
|
|
20126
|
+
var puddlangAskSchema = external_exports.object({
|
|
20127
|
+
prompt: external_exports.string().min(1).max(128 * 1024),
|
|
20128
|
+
output_schema: external_exports.record(external_exports.string(), external_exports.unknown()).optional()
|
|
20129
|
+
});
|
|
20130
|
+
var puddlangStartSchema = external_exports.object({
|
|
20131
|
+
id: external_exports.uuid(),
|
|
20132
|
+
source: sourceSchema,
|
|
20133
|
+
input: external_exports.unknown().optional(),
|
|
20134
|
+
accounts: external_exports.record(external_exports.string(), external_exports.union([external_exports.string(), external_exports.number().int().positive()])).default({}),
|
|
20135
|
+
max_turns: external_exports.number().int().min(1).max(1e3).default(50),
|
|
20136
|
+
max_agents: external_exports.number().int().min(1).max(32).default(8),
|
|
20137
|
+
timeout_ms: external_exports.number().int().min(1e3).max(24 * 60 * 60 * 1e3).default(60 * 60 * 1e3)
|
|
20138
|
+
});
|
|
20139
|
+
var puddlangRunSchema = external_exports.object({
|
|
20140
|
+
id: external_exports.uuid(),
|
|
20141
|
+
profile_id: profileId,
|
|
20142
|
+
source_hash: external_exports.string(),
|
|
20143
|
+
status: external_exports.enum(["running", "completed", "failed", "cancelled", "interrupted"]),
|
|
20144
|
+
result: external_exports.unknown().nullable(),
|
|
20145
|
+
error: external_exports.string().nullable(),
|
|
20146
|
+
created_at: external_exports.string(),
|
|
20147
|
+
updated_at: external_exports.string()
|
|
20148
|
+
});
|
|
20149
|
+
var puddlangEventSchema = external_exports.object({
|
|
20150
|
+
sequence: external_exports.number().int(),
|
|
20151
|
+
run_id: external_exports.uuid(),
|
|
20152
|
+
type: external_exports.string(),
|
|
20153
|
+
data: external_exports.unknown(),
|
|
20154
|
+
created_at: external_exports.string()
|
|
20155
|
+
});
|
|
20156
|
+
var puddlangEventsSchema = external_exports.object({ events: external_exports.array(puddlangEventSchema) });
|
|
20157
|
+
var puddlangOperationSchema = external_exports.discriminatedUnion("op", [
|
|
20158
|
+
external_exports.object({ op: external_exports.literal("spawn"), options: puddlangSpawnSchema }),
|
|
20159
|
+
external_exports.object({ op: external_exports.literal("attach"), reference: external_exports.string().min(1).max(100) }),
|
|
20160
|
+
external_exports.object({ op: external_exports.literal("ask"), handle: puddlangHandleSchema, request: puddlangAskSchema }),
|
|
20161
|
+
external_exports.object({ op: external_exports.literal("stop"), handle: puddlangHandleSchema })
|
|
20162
|
+
]);
|
|
20163
|
+
var puddlangRunnerMessageSchema = external_exports.discriminatedUnion("type", [
|
|
20164
|
+
external_exports.object({
|
|
20165
|
+
type: external_exports.literal("operation"),
|
|
20166
|
+
id: external_exports.number().int(),
|
|
20167
|
+
operation: puddlangOperationSchema
|
|
20168
|
+
}),
|
|
20169
|
+
external_exports.object({
|
|
20170
|
+
type: external_exports.literal("finished"),
|
|
20171
|
+
result: external_exports.unknown().optional(),
|
|
20172
|
+
error: external_exports.string().max(8192).optional()
|
|
20173
|
+
})
|
|
20174
|
+
]);
|
|
20175
|
+
var puddlangRunnerInputSchema = external_exports.discriminatedUnion("type", [
|
|
20176
|
+
external_exports.object({
|
|
20177
|
+
type: external_exports.literal("start"),
|
|
20178
|
+
source: sourceSchema,
|
|
20179
|
+
input: external_exports.unknown().optional()
|
|
20180
|
+
}),
|
|
20181
|
+
external_exports.object({
|
|
20182
|
+
type: external_exports.literal("reply"),
|
|
20183
|
+
id: external_exports.number().int(),
|
|
20184
|
+
value: external_exports.unknown().optional(),
|
|
20185
|
+
error: external_exports.string().optional()
|
|
20186
|
+
})
|
|
20187
|
+
]);
|
|
20188
|
+
var puddlangContextSchema = external_exports.object({
|
|
20189
|
+
profile: external_exports.object({ id: profileId, name: external_exports.string() }),
|
|
20190
|
+
projects: external_exports.array(external_exports.object({ id: external_exports.string(), name: external_exports.string(), path: external_exports.string() })),
|
|
20191
|
+
accounts: external_exports.array(
|
|
20192
|
+
external_exports.object({ id: external_exports.number(), label: external_exports.string(), agent: external_exports.string(), logged_in: external_exports.boolean() })
|
|
20193
|
+
),
|
|
20194
|
+
agents: external_exports.array(external_exports.object({ id: external_exports.string(), scripted_turns: external_exports.boolean() }))
|
|
20195
|
+
});
|
|
20196
|
+
|
|
20197
|
+
// ../shared/src/api/puddlang-mcp.ts
|
|
20198
|
+
var puddlangMcpRequestSchema = external_exports.object({
|
|
20199
|
+
jsonrpc: external_exports.literal("2.0"),
|
|
20200
|
+
id: external_exports.union([external_exports.string(), external_exports.number()]).optional(),
|
|
20201
|
+
method: external_exports.string(),
|
|
20202
|
+
params: external_exports.record(external_exports.string(), external_exports.unknown()).optional()
|
|
20203
|
+
});
|
|
20204
|
+
var puddlangMcpCallSchema = external_exports.object({
|
|
20205
|
+
name: external_exports.string(),
|
|
20206
|
+
arguments: external_exports.unknown().optional()
|
|
20207
|
+
});
|
|
20208
|
+
var puddlangMcpRunSchema = puddlangStartSchema;
|
|
20209
|
+
var puddlangMcpIdSchema = external_exports.object({ id: external_exports.uuid() });
|
|
20210
|
+
var puddlangMcpEventsSchema = puddlangMcpIdSchema.extend({
|
|
20211
|
+
after: external_exports.number().int().nonnegative().default(0)
|
|
20212
|
+
});
|
|
20213
|
+
var puddlangMcpEmptySchema = external_exports.object({}).strict();
|
|
20214
|
+
var definitions = [
|
|
20215
|
+
[
|
|
20216
|
+
"puddlang_context",
|
|
20217
|
+
"List this host profile, projects, accounts and supported agents.",
|
|
20218
|
+
puddlangMcpEmptySchema,
|
|
20219
|
+
true
|
|
20220
|
+
],
|
|
20221
|
+
[
|
|
20222
|
+
"puddlang_run",
|
|
20223
|
+
'Execute a trusted single-file TypeScript programme on the host. Imports: puddlang (spawn, attach, input, z), zod, node: built-ins. Returns immediately with a durable run id; use status/events. Supply a fresh UUID id, or reuse it with identical input to recover an uncertain submission. spawn({agent:"codex",project:"name",account:"label"}); await agent.ask("task"); export default result. Supports structured ask({prompt,input,schema:z.object(...)}) and agent.stop().',
|
|
20224
|
+
puddlangMcpRunSchema,
|
|
20225
|
+
false
|
|
20226
|
+
],
|
|
20227
|
+
[
|
|
20228
|
+
"puddlang_status",
|
|
20229
|
+
"Read a run and its final default export, if finished.",
|
|
20230
|
+
puddlangMcpIdSchema,
|
|
20231
|
+
true
|
|
20232
|
+
],
|
|
20233
|
+
[
|
|
20234
|
+
"puddlang_events",
|
|
20235
|
+
"Read up to 100 events after a sequence; paginate until empty.",
|
|
20236
|
+
puddlangMcpEventsSchema,
|
|
20237
|
+
true
|
|
20238
|
+
],
|
|
20239
|
+
[
|
|
20240
|
+
"puddlang_cancel",
|
|
20241
|
+
"Cancel a run, interrupt its pending asks, and stop agents it created. Attached agents are retained.",
|
|
20242
|
+
puddlangMcpIdSchema,
|
|
20243
|
+
false
|
|
20244
|
+
]
|
|
20245
|
+
];
|
|
20246
|
+
var puddlangMcpTools = definitions.map(([name, description, schema, readOnlyHint]) => ({
|
|
20247
|
+
name,
|
|
20248
|
+
description,
|
|
20249
|
+
inputSchema: external_exports.toJSONSchema(schema, { io: "input" }),
|
|
20250
|
+
annotations: {
|
|
20251
|
+
readOnlyHint,
|
|
20252
|
+
destructiveHint: !readOnlyHint,
|
|
20253
|
+
idempotentHint: true,
|
|
20254
|
+
openWorldHint: !readOnlyHint
|
|
20255
|
+
}
|
|
20256
|
+
}));
|
|
20257
|
+
|
|
20078
20258
|
// src/lib/transport/local.ts
|
|
20079
20259
|
import { spawn } from "node:child_process";
|
|
20080
20260
|
import { copyFileSync, mkdirSync, readFileSync } from "node:fs";
|
|
@@ -21613,7 +21793,7 @@ import { readFileSync as readFileSync4 } from "node:fs";
|
|
|
21613
21793
|
import { dirname as dirname4, join as join5 } from "node:path";
|
|
21614
21794
|
import { fileURLToPath as fileURLToPath2 } from "node:url";
|
|
21615
21795
|
function cliVersion() {
|
|
21616
|
-
if (true) return "0.
|
|
21796
|
+
if (true) return "0.3.0";
|
|
21617
21797
|
const here = dirname4(fileURLToPath2(import.meta.url));
|
|
21618
21798
|
for (const candidate of [
|
|
21619
21799
|
join5(here, "..", "..", "package.json"),
|
|
@@ -22007,7 +22187,11 @@ var RELEASE_PROTOCOLS = {
|
|
|
22007
22187
|
"0.2.18": { major: 22, minor: 0 },
|
|
22008
22188
|
"0.2.19": { major: 22, minor: 0 },
|
|
22009
22189
|
"0.2.20": { major: 22, minor: 4 },
|
|
22010
|
-
"0.2.21": { major: 22, minor: 4 }
|
|
22190
|
+
"0.2.21": { major: 22, minor: 4 },
|
|
22191
|
+
"0.2.22": { major: 22, minor: 4 },
|
|
22192
|
+
"0.2.23": { major: 22, minor: 5 },
|
|
22193
|
+
"0.2.24": { major: 22, minor: 5 },
|
|
22194
|
+
"0.3.0": { major: 23, minor: 0 }
|
|
22011
22195
|
};
|
|
22012
22196
|
function validProtocol(value) {
|
|
22013
22197
|
if (typeof value !== "object" || value === null) return false;
|
|
@@ -24277,9 +24461,14 @@ function standaloneInstallation(entryFile = fileURLToPath4(import.meta.url), exe
|
|
|
24277
24461
|
try {
|
|
24278
24462
|
const root = resolve5(release, "..", "..");
|
|
24279
24463
|
const record2 = JSON.parse(readFileSync9(join15(root, "installation.json"), "utf8"));
|
|
24280
|
-
if (readFileSync9(join15(release, "STANDALONE"), "utf8").trim() !== "puddle-cli" || readFileSync9(join15(root, "INSTALLATION"), "utf8").trim() !== "puddle-cli" || dirname9(release) !== join15(root, "versions") || realpathSync2(release) !== release || realpathSync2(execPath) !== join15(release, "bin/node") || record2.kind !== "puddle-cli" || typeof record2.launcher !== "string" || !isAbsolute(record2.launcher))
|
|
24464
|
+
if (readFileSync9(join15(release, "STANDALONE"), "utf8").trim() !== "puddle-cli" || readFileSync9(join15(root, "INSTALLATION"), "utf8").trim() !== "puddle-cli" || dirname9(release) !== join15(root, "versions") || realpathSync2(release) !== release || realpathSync2(execPath) !== join15(release, "bin/node") || record2.kind !== "puddle-cli" || typeof record2.launcher !== "string" || !isAbsolute(record2.launcher) || record2.scriptLauncher !== void 0 && record2.scriptLauncher !== join15(dirname9(record2.launcher), "puddlang"))
|
|
24281
24465
|
throw new Error("Installation metadata does not match this CLI");
|
|
24282
|
-
return {
|
|
24466
|
+
return {
|
|
24467
|
+
root,
|
|
24468
|
+
release,
|
|
24469
|
+
launcher: record2.launcher,
|
|
24470
|
+
...typeof record2.scriptLauncher === "string" ? { scriptLauncher: record2.scriptLauncher } : {}
|
|
24471
|
+
};
|
|
24283
24472
|
} catch {
|
|
24284
24473
|
throw new CliError(
|
|
24285
24474
|
"not_installed",
|
|
@@ -24313,8 +24502,8 @@ function upgradeStandaloneCli(installation, version2, repo) {
|
|
|
24313
24502
|
});
|
|
24314
24503
|
});
|
|
24315
24504
|
}
|
|
24316
|
-
function standaloneLauncher(root) {
|
|
24317
|
-
const quoted = `'${join15(root,
|
|
24505
|
+
function standaloneLauncher(root, command = "puddle") {
|
|
24506
|
+
const quoted = `'${join15(root, `current/${command}`).replaceAll("'", "'\\''")}'`;
|
|
24318
24507
|
return `#!/bin/sh
|
|
24319
24508
|
# puddle standalone launcher
|
|
24320
24509
|
exec ${quoted} "$@"
|
|
@@ -24330,6 +24519,11 @@ async function removeStandaloneCli(installation) {
|
|
|
24330
24519
|
try {
|
|
24331
24520
|
if (lstatSync2(installation.launcher).isSymbolicLink() || await readFile2(installation.launcher, "utf8") !== standaloneLauncher(installation.root))
|
|
24332
24521
|
throw new CliError("not_installed", "the CLI launcher was replaced; refusing removal");
|
|
24522
|
+
if (installation.scriptLauncher && existsSync5(installation.scriptLauncher)) {
|
|
24523
|
+
if (!lstatSync2(installation.scriptLauncher).isFile() || await readFile2(installation.scriptLauncher, "utf8") !== standaloneLauncher(installation.root, "puddlang"))
|
|
24524
|
+
throw new CliError("not_installed", "the puddlang launcher was replaced; refusing removal");
|
|
24525
|
+
await unlink(installation.scriptLauncher);
|
|
24526
|
+
}
|
|
24333
24527
|
await unlink(installation.launcher);
|
|
24334
24528
|
await rm2(installation.root, { recursive: true, force: true });
|
|
24335
24529
|
} finally {
|