sliccy 6.112.6 → 6.113.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/README.md +1 -1
- package/dist/node-server/hostfs.d.ts +1 -1
- package/dist/node-server/hostfs.js +32 -3
- package/dist/ui/.vite/manifest.json +141 -141
- package/dist/ui/assets/{SKILL-D4YtbN6n.js → SKILL-BPuaCaUr.js} +1 -1
- package/dist/ui/assets/{account-store-yyvxS08-.js → account-store-BoblUQxS.js} +1 -1
- package/dist/ui/assets/{account-store-1jHrkitr.js → account-store-CAFlX5K_.js} +1 -1
- package/dist/ui/assets/{adobe-cyqThTLM.js → adobe-CQJHG1Ks.js} +1 -1
- package/dist/ui/assets/{adobe-C6Ak2LWa.js → adobe-EObT5Qia.js} +1 -1
- package/dist/ui/assets/{agent-bridge-AAfpu4bW.js → agent-bridge-B-OH7VjH.js} +1 -1
- package/dist/ui/assets/{agent-panels-YPIVBeEc.js → agent-panels-B66yFH2Q.js} +1 -1
- package/dist/ui/assets/{apply-layout-Cmqkui7H.js → apply-layout-ERanJD1f.js} +1 -1
- package/dist/ui/assets/{apps-D_K9az00.js → apps-C_f4tfHb.js} +1 -1
- package/dist/ui/assets/{auto-mount-table-BhFTO0Bn.js → auto-mount-table-DnB3cBQZ.js} +1 -1
- package/dist/ui/assets/{azure-openai-BAZHGshY.js → azure-openai-CzFN-Ym3.js} +1 -1
- package/dist/ui/assets/{azure-openai-DHiy6rJ1.js → azure-openai-OwuWxaII.js} +1 -1
- package/dist/ui/assets/backend-hostfs-67ZrRvDd.js +1 -0
- package/dist/ui/assets/backend-hostfs-BRPUUyZC.js +1 -0
- package/dist/ui/assets/{cerebras-CsLqCFVZ.js → cerebras-BKPx5Ryi.js} +1 -1
- package/dist/ui/assets/{cerebras-BLGqA_gt.js → cerebras-De-br_MV.js} +1 -1
- package/dist/ui/assets/{connect-surface-BDPFxWKQ.js → connect-surface-Dgfo_X4g.js} +1 -1
- package/dist/ui/assets/{directed-approval-BBEtrnVX.js → directed-approval-c9i6VVva.js} +1 -1
- package/dist/ui/assets/{fs-B1pXkOnM.js → fs-BLoZrnh-.js} +1 -1
- package/dist/ui/assets/{fs-Ci9jn8-T.js → fs-_hKUzpR2.js} +2 -2
- package/dist/ui/assets/{github-D-U4rb-W.js → github-53EdSP8-.js} +1 -1
- package/dist/ui/assets/{github-C-Av-0iP.js → github-BC2fGb-J.js} +2 -2
- package/dist/ui/assets/{github-copilot-BpV7MG9i.js → github-copilot-7zW_nQIc.js} +1 -1
- package/dist/ui/assets/{github-copilot-CAbnrkuq.js → github-copilot-BmYiP20H.js} +1 -1
- package/dist/ui/assets/{github-install-D0ytYYbu.js → github-install-h-E9PifB.js} +1 -1
- package/dist/ui/assets/{github-zip-DZbr3qWX.js → github-zip-D1RV4xtg.js} +1 -1
- package/dist/ui/assets/{js-realm-worker-DlWEsScS.js → js-realm-worker-BtMgjF6F.js} +1 -1
- package/dist/ui/assets/{kernel-worker-DWGg_sxz.js → kernel-worker-DzGFoiBE.js} +644 -643
- package/dist/ui/assets/{legacy-styles-DcRu2WCJ.js → legacy-styles-5GUwx9VK.js} +1 -1
- package/dist/ui/assets/{local-llm-DvAmncyT.js → local-llm-BDzhcvLn.js} +1 -1
- package/dist/ui/assets/{local-llm-BU7S-AVF.js → local-llm-CzODHEnR.js} +1 -1
- package/dist/ui/assets/{main-u8HY3_-C.js → main-BN-GF8sT.js} +3 -3
- package/dist/ui/assets/{mount-i111XTmz.js → mount--B_IpEAt.js} +1 -1
- package/dist/ui/assets/{mount-DPKD0kyn.js → mount-B_1Rpl0T.js} +3 -3
- package/dist/ui/assets/{mount-recovery-D8egEvQB.js → mount-recovery-DGsvxx4J.js} +1 -1
- package/dist/ui/assets/{new-session-Ds3amI7B.js → new-session-BE8-Kpxb.js} +2 -2
- package/dist/ui/assets/{oauth-bootstrap-CnqTURKj.js → oauth-bootstrap-AgooOsML.js} +2 -2
- package/dist/ui/assets/{openai-codex-CZ6BCC2H.js → openai-codex-DksEQbF6.js} +1 -1
- package/dist/ui/assets/{openai-codex-BrybEwLX.js → openai-codex-NrHIPSuJ.js} +1 -1
- package/dist/ui/assets/{openrouter-Blcz-X3E.js → openrouter-BLxZ_YfE.js} +1 -1
- package/dist/ui/assets/{openrouter-COyFG8jP.js → openrouter-CpPMXp49.js} +1 -1
- package/dist/ui/assets/{openrouter-oauth-BNrHFJJ3.js → openrouter-oauth-BoFHeAvY.js} +1 -1
- package/dist/ui/assets/{openrouter-oauth-ZPlHUd1U.js → openrouter-oauth-BwhMnbQ-.js} +1 -1
- package/dist/ui/assets/{panel-rpc-handlers-CWWZNkBG.js → panel-rpc-handlers-DQHXjMwb.js} +2 -2
- package/dist/ui/assets/{panelize-shell-BKRcYmaD.js → panelize-shell-JhGehB2n.js} +1 -1
- package/dist/ui/assets/{provider-l8PeSdKi.js → provider-C96QYEUu.js} +2 -2
- package/dist/ui/assets/{provider-settings-CFYVC9dl.js → provider-settings-C6RMFf8c.js} +1 -1
- package/dist/ui/assets/{provider-settings-DJmsw9lZ.js → provider-settings-CPEsmE27.js} +1 -1
- package/dist/ui/assets/provider-store-access-CchLvU6E.js +1 -0
- package/dist/ui/assets/{provider-store-access-lAE2ULA-.js → provider-store-access-sHV0u0_Z.js} +2 -2
- package/dist/ui/assets/{provider-Cg1bP565.js → provider-zINM--yg.js} +1 -1
- package/dist/ui/assets/{providers-BKaQ7cr_.js → providers-DFcXy4_v.js} +2 -2
- package/dist/ui/assets/{providers-DERBWQMz.js → providers-I8fLlE1F.js} +1 -1
- package/dist/ui/assets/{quick-llm-CWShBYyo.js → quick-llm-lc--g_uQ.js} +1 -1
- package/dist/ui/assets/{recovery-screen-D_DG7koi.js → recovery-screen-BnxVYjcD.js} +1 -1
- package/dist/ui/assets/{run-BTvgQczm.js → run-DLMvI-Vw.js} +2 -2
- package/dist/ui/assets/{run-1LYrXYmz.js → run-czitDqud.js} +1 -1
- package/dist/ui/assets/{session-freezer-CcmV_y6V.js → session-freezer-Cg8JbMxX.js} +3 -3
- package/dist/ui/assets/{setup-feature-flags-remote-BUVzW-8N.js → setup-feature-flags-remote-B_hTnn3Q.js} +1 -1
- package/dist/ui/assets/{setup-standalone-prelude-OwqR_Yuo.js → setup-standalone-prelude-CWEAAw7h.js} +1 -1
- package/dist/ui/assets/{setup-sudo-Baouj9Bk.js → setup-sudo-ZkvaRNmm.js} +2 -2
- package/dist/ui/assets/{skills-CQj4SPDp.js → skills-Bcw1p2tI.js} +1 -1
- package/dist/ui/assets/slicc-version-BZefq3Mk.js +1 -0
- package/dist/ui/assets/sprinkle-components-CnBwNM6o.css +1 -0
- package/dist/ui/assets/{state-CghWg_Kw.js → state-LDqsPBxJ.js} +1 -1
- package/dist/ui/assets/{store-Dl-OYaSV.js → store-DkIaF7uq.js} +1 -1
- package/dist/ui/assets/{store-gvOC7Lmj.js → store-n4nzO2R4.js} +1 -1
- package/dist/ui/assets/{style-guide-Bgzsk7bf.js → style-guide-BXma5vDN.js} +2 -0
- package/dist/ui/assets/{sudo-BHrJ0pDh.js → sudo-D_A1VAiv.js} +1 -1
- package/dist/ui/assets/{tokens-Drbn7djl.css → tokens-FjEJwUyJ.css} +1 -1
- package/dist/ui/assets/{upgrade-detection-CiGs_jPp.js → upgrade-detection-Cc_AO_g_.js} +1 -1
- package/dist/ui/assets/{wc-attach-BTwhdveb.js → wc-attach-CJi8w0io.js} +2 -2
- package/dist/ui/assets/{wc-extension-BfUkz-HX.js → wc-extension-BCgMujQH.js} +2 -2
- package/dist/ui/assets/{wc-float-label-D8jbiKPt.js → wc-float-label-Y_qKBmxa.js} +1 -1
- package/dist/ui/assets/{wc-floatbar-online-CEXclrfN.js → wc-floatbar-online-DnS44ghj.js} +1 -1
- package/dist/ui/assets/{wc-follower-oauth-DAzZYGjh.js → wc-follower-oauth-sOkPkY_L.js} +1 -1
- package/dist/ui/assets/{wc-follower-C-Ejb2MU.js → wc-follower-rs3oFOdy.js} +3 -3
- package/dist/ui/assets/{wc-live-CJTVhCzY.js → wc-live-DkVXbTow.js} +4 -4
- package/dist/ui/assets/{wc-nav-nf4MwQVm.js → wc-nav-Ca4YwbPX.js} +2 -2
- package/dist/ui/assets/{wc-onboarding-Bi2JZ0qd.js → wc-onboarding-AKfdCWlj.js} +2 -2
- package/dist/ui/assets/{wc-placeholder-CNr8ACxD.js → wc-placeholder-BHwcaeI6.js} +2 -2
- package/dist/ui/assets/{wc-settings-C07YcGBL.js → wc-settings-B_DygKjz.js} +2 -2
- package/dist/ui/assets/{wc-shell-CO135SLj.js → wc-shell-CLWeEjhz.js} +10 -3
- package/dist/ui/assets/{wc-shortcut-config-BqJ_oRIq.js → wc-shortcut-config-Dv1Q-J84.js} +1 -1
- package/dist/ui/assets/{wc-sprinkles-D8kYOeh_.js → wc-sprinkles-CmAZfPmr.js} +2 -2
- package/dist/ui/assets/{wc-tray-BHQm7jst.js → wc-tray-wPUoPcs2.js} +4 -4
- package/dist/ui/assets/{xai-grok-BeET6lOL.js → xai-grok-oOuoY7Mj.js} +1 -1
- package/dist/ui/assets/{xai-grok-B1G96fYR.js → xai-grok-xHaLFJXt.js} +1 -1
- package/dist/ui/index.html +6 -6
- package/dist/ui/packages/webapp/index.html +6 -6
- package/package.json +1 -1
- package/dist/ui/assets/backend-hostfs-CciGcalA.js +0 -1
- package/dist/ui/assets/backend-hostfs-In96W2M8.js +0 -1
- package/dist/ui/assets/provider-store-access-DGPvTOHA.js +0 -1
- package/dist/ui/assets/slicc-version-CRzt7Voe.js +0 -1
- package/dist/ui/assets/sprinkle-components-Bqvrxol0.css +0 -1
package/README.md
CHANGED
|
@@ -81,7 +81,7 @@ SLICC is for you if:
|
|
|
81
81
|
- **Boot full x86 virtual machines in the browser.** `v86 start` runs real operating systems (Alpine, FreeDOS, KolibriOS, ...) on the wasm-based [v86](https://github.com/copy/v86) emulator, entirely client-side. The agent drives the guest from the shell — type, click, screenshot, stream the screen live, save/restore state — and `-net <model>,relay=fetch` gives the guest HTTP access through SLICC's fetch proxy. Install with `ipk add -g v86`.
|
|
82
82
|
- **Delegate parallel work to scoops.** Split tasks into isolated sub-agents with their own sandboxes and context, then let the main agent coordinate the results.
|
|
83
83
|
- **Turn one-off wins into reusable workflows.** Package behavior as skills, build interactive sprinkles, and react to external events with webhooks and cron-driven licks.
|
|
84
|
-
- **Mount your local file system.** By default, SLICC is confined to your browser. But you can ask it to mount folders from your local file system, so it can read and write from there. Mount into an empty path such as `/mnt/myproject` so you do not hide existing skills or scripts. Picker mounts ask again after a page reload; for folders you always want available, map them in the launcher's mount table (`npx slicc --mount=~/Projects/foo:/mnt/foo`, or Settings → Mounts in Sliccstart.app) and they are mounted automatically on every launch, with no picker or permission prompt — see [Auto-mounted host folders](docs/mounts.md#auto-mounted-host-folders-the-mount-table).
|
|
84
|
+
- **Mount your local file system.** By default, SLICC is confined to your browser. But you can ask it to mount folders from your local file system, so it can read and write from there. Mount into an empty path such as `/mnt/myproject` so you do not hide existing skills or scripts. Tear one down with `umount /mnt/myproject` (or the longer `mount unmount /mnt/myproject`). Picker mounts ask again after a page reload; for folders you always want available, map them in the launcher's mount table (`npx slicc --mount=~/Projects/foo:/mnt/foo`, or Settings → Mounts in Sliccstart.app) and they are mounted automatically on every launch, with no picker or permission prompt — see [Auto-mounted host folders](docs/mounts.md#auto-mounted-host-folders-the-mount-table).
|
|
85
85
|
- **Mount remote storage as if it were local.** Beyond local folders, `mount --source` bridges S3 buckets, S3-compatible services like Cloudflare R2 and MinIO, and Adobe authoring content — both da.live repositories and Helix 6 sites on the AEM Source Bus — into the same VFS surface. Reads use TTL+ETag caching with conditional revalidation; writes use ETag-conditional PUTs that surface concurrent-edit conflicts as `EBUSY`. Credentials live server-side (`~/.slicc/secrets.env` in CLI, `chrome.storage.local` in the extension via the **Extension options** page) and never reach the agent. After setup: `mount --source s3://my-bucket --profile r2 /mnt/r2`, `mount --source da://my-org/my-repo /mnt/da`, or `mount --source aem://my-org/my-site /mnt/aem`. A `da://` source checks the site config first and re-routes to the Source Bus when the site has been upgraded to Helix 6, rather than quietly mounting a store that no longer holds its content. See [docs/mounts.md](docs/mounts.md) for the full guide.
|
|
86
86
|
|
|
87
87
|
## Getting started
|
|
@@ -89,7 +89,7 @@ export declare function isHostFsStableBodyRequest(req: {
|
|
|
89
89
|
*
|
|
90
90
|
* POST /api/hostfs ← { op, mount, path, to?, recursive? }
|
|
91
91
|
* GET /api/hostfs/list?mount=&path= → { entries: [...] }
|
|
92
|
-
* GET /api/hostfs/stat?mount=&path= → { kind, size, mtime }
|
|
92
|
+
* GET /api/hostfs/stat?mount=&path= → { kind, size, mtime, ctime, ino, uid, gid, mode }
|
|
93
93
|
* GET /api/hostfs/read?mount=&path= → octet-stream body
|
|
94
94
|
* PUT /api/hostfs/write?mount=&path= ← octet-stream body
|
|
95
95
|
* POST /api/hostfs/mkdir?mount=&path=
|
|
@@ -114,11 +114,38 @@ export async function resolveWithinRoot(root, relPath) {
|
|
|
114
114
|
}
|
|
115
115
|
return target;
|
|
116
116
|
}
|
|
117
|
+
/**
|
|
118
|
+
* Identity/permission fields of a host `fs.Stats`, as the webapp needs them.
|
|
119
|
+
*
|
|
120
|
+
* isomorphic-git's `compareStats` decides whether a working-tree file is
|
|
121
|
+
* still the one the index recorded by comparing mode, mtime, ctime, uid,
|
|
122
|
+
* gid, ino and size. The bridge used to report only `{kind,size,mtime}`, so
|
|
123
|
+
* the comparison was stale for EVERY file — every read-only git command
|
|
124
|
+
* re-hashed the whole tree and rewrote `.git/index` once per file
|
|
125
|
+
* (issue #2708). `mode` is the full `st_mode` (type bits included), so the
|
|
126
|
+
* executable bit survives instead of being flattened to `100644`.
|
|
127
|
+
*
|
|
128
|
+
* Timestamps go over the wire UNROUNDED. isomorphic-git derives the seconds
|
|
129
|
+
* it compares with `Math.floor(ms / 1000)`, so rounding a `.9996 s` stat up
|
|
130
|
+
* lands it in the NEXT second, disagrees with the seconds native git wrote,
|
|
131
|
+
* and makes that one file stale on every single walk. Never round up; JSON
|
|
132
|
+
* carries the fractional double fine.
|
|
133
|
+
*/
|
|
134
|
+
function statIdentity(s) {
|
|
135
|
+
return {
|
|
136
|
+
ctime: s.ctimeMs,
|
|
137
|
+
ino: Number(s.ino),
|
|
138
|
+
uid: s.uid,
|
|
139
|
+
gid: s.gid,
|
|
140
|
+
mode: s.mode,
|
|
141
|
+
};
|
|
142
|
+
}
|
|
117
143
|
function statPayload(s) {
|
|
118
144
|
return {
|
|
119
145
|
kind: s.isDirectory() ? 'directory' : 'file',
|
|
120
146
|
size: s.isDirectory() ? 0 : s.size,
|
|
121
|
-
mtime:
|
|
147
|
+
mtime: s.mtimeMs,
|
|
148
|
+
...statIdentity(s),
|
|
122
149
|
};
|
|
123
150
|
}
|
|
124
151
|
/**
|
|
@@ -227,7 +254,8 @@ async function listOp(target) {
|
|
|
227
254
|
name: d.name,
|
|
228
255
|
kind: 'file',
|
|
229
256
|
size: s.size,
|
|
230
|
-
lastModified:
|
|
257
|
+
lastModified: s.mtimeMs,
|
|
258
|
+
...statIdentity(s),
|
|
231
259
|
};
|
|
232
260
|
}
|
|
233
261
|
catch {
|
|
@@ -237,6 +265,7 @@ async function listOp(target) {
|
|
|
237
265
|
}));
|
|
238
266
|
return { entries };
|
|
239
267
|
}
|
|
268
|
+
/** Shared by the stable dispatcher and `GET /api/hostfs/stat` — same payload. */
|
|
240
269
|
async function statOp(target) {
|
|
241
270
|
return statPayload(await stat(target));
|
|
242
271
|
}
|
|
@@ -261,7 +290,7 @@ async function removeOp(target, recursive, roots) {
|
|
|
261
290
|
*
|
|
262
291
|
* POST /api/hostfs ← { op, mount, path, to?, recursive? }
|
|
263
292
|
* GET /api/hostfs/list?mount=&path= → { entries: [...] }
|
|
264
|
-
* GET /api/hostfs/stat?mount=&path= → { kind, size, mtime }
|
|
293
|
+
* GET /api/hostfs/stat?mount=&path= → { kind, size, mtime, ctime, ino, uid, gid, mode }
|
|
265
294
|
* GET /api/hostfs/read?mount=&path= → octet-stream body
|
|
266
295
|
* PUT /api/hostfs/write?mount=&path= ← octet-stream body
|
|
267
296
|
* POST /api/hostfs/mkdir?mount=&path=
|