sliccy 6.155.0 → 6.156.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (152) hide show
  1. package/README.md +4 -0
  2. package/dist/node-server/hostfs.d.ts +6 -1
  3. package/dist/node-server/hostfs.js +32 -0
  4. package/dist/ui/.vite/manifest.json +189 -183
  5. package/dist/ui/assets/{SKILL-C947OHCv.js → SKILL-CkA461kX.js} +1 -1
  6. package/dist/ui/assets/{account-store-FUhuBOfI.js → account-store-dtzxuWeC.js} +1 -1
  7. package/dist/ui/assets/{account-store-BL68LrFT.js → account-store-kmVkSbCR.js} +1 -1
  8. package/dist/ui/assets/{adobe-DNHcSDh3.js → adobe-CnRG7JPQ.js} +1 -1
  9. package/dist/ui/assets/{adobe-BaHLL9uH.js → adobe-lTfW3SWI.js} +1 -1
  10. package/dist/ui/assets/{agent-bridge-Vz3IOG0A.js → agent-bridge-C_Nj4jdv.js} +1 -1
  11. package/dist/ui/assets/{agent-panels-CPSe8uIz.js → agent-panels-CuPOC-fc.js} +1 -1
  12. package/dist/ui/assets/{apply-layout-G6vw7FBS.js → apply-layout-6vcopgzZ.js} +1 -1
  13. package/dist/ui/assets/{apps-CLm3AutR.js → apps-Dikr6XSa.js} +1 -1
  14. package/dist/ui/assets/{auto-mount-table-BDyGIOIb.js → auto-mount-table-Bj59hmjV.js} +1 -1
  15. package/dist/ui/assets/{azure-openai--n3vcQWx.js → azure-openai-BTFDrrWf.js} +1 -1
  16. package/dist/ui/assets/{azure-openai-N9FaZSuP.js → azure-openai-BzpXFJz8.js} +1 -1
  17. package/dist/ui/assets/backend-hostfs-De2Zrx7a.js +1 -0
  18. package/dist/ui/assets/backend-hostfs-n_0O1LVt.js +1 -0
  19. package/dist/ui/assets/{budget-usage-source-C6vq4Afr.js → budget-usage-source-BBJSsrkZ.js} +1 -1
  20. package/dist/ui/assets/{cdp-C7C40sWI.js → cdp-Be4w4xKY.js} +1 -1
  21. package/dist/ui/assets/{cerebras-BecGzlaM.js → cerebras-DIJe1DYg.js} +1 -1
  22. package/dist/ui/assets/{cerebras-B4z1b7WX.js → cerebras-DRFKeC8d.js} +1 -1
  23. package/dist/ui/assets/{composer-speech-uDoOk80y.js → composer-speech-Bm0dHfES.js} +1 -1
  24. package/dist/ui/assets/{connect-surface-CkYbO0v8.js → connect-surface-R4sCU4sU.js} +1 -1
  25. package/dist/ui/assets/{directed-approval-DdGH8Fat.js → directed-approval--OxXt3UP.js} +1 -1
  26. package/dist/ui/assets/{extension-ops-B05mAXsq.js → extension-ops-DcLzcAwt.js} +1 -1
  27. package/dist/ui/assets/{frozen-archive-writer--a4fMghf.js → frozen-archive-writer-Df5805od.js} +1 -1
  28. package/dist/ui/assets/fs-CETHxfDK.js +1 -0
  29. package/dist/ui/assets/fs-tGax5N7s.js +2 -0
  30. package/dist/ui/assets/{github-FRM6nHar.js → github-BAAXjX_F.js} +1 -1
  31. package/dist/ui/assets/github-DVm0U0mK.js +2 -0
  32. package/dist/ui/assets/{github-auth-DgdBb7y7.js → github-auth-DmHyyx5B.js} +1 -1
  33. package/dist/ui/assets/{github-copilot-CNY2SweM.js → github-copilot-0y8bGZg_.js} +1 -1
  34. package/dist/ui/assets/{github-copilot-D6XJxicV.js → github-copilot-C-nezZQy.js} +1 -1
  35. package/dist/ui/assets/{github-install-PNSinMst.js → github-install--Sj58Qzh.js} +1 -1
  36. package/dist/ui/assets/{github-zip-BCXSTlT0.js → github-zip-CXiagkZF.js} +1 -1
  37. package/dist/ui/assets/{hear-DAaE31Ez.js → hear-CI9hCYc0.js} +1 -1
  38. package/dist/ui/assets/{help-HkZtBCNF.js → help-BNaovbY_.js} +1 -1
  39. package/dist/ui/assets/isomorphic-git-DRUhmZ5u.js +84 -0
  40. package/dist/ui/assets/{js-realm-worker-Bp1ohy2N.js → js-realm-worker-BMCyKyav.js} +1 -1
  41. package/dist/ui/assets/kernel-worker-8NClboR3.js +4948 -0
  42. package/dist/ui/assets/{live-session-snapshot-CpwRZg6K.js → live-session-snapshot-BP6rxBrE.js} +1 -1
  43. package/dist/ui/assets/{local-llm-BKrrjR68.js → local-llm-C9Pn8yB9.js} +1 -1
  44. package/dist/ui/assets/{local-llm-BL_WYiZZ.js → local-llm-DXYnLBn-.js} +1 -1
  45. package/dist/ui/assets/{main-DW-YS69h.js → main-BsKv75d6.js} +3 -3
  46. package/dist/ui/assets/{main-cherry-B0AQVdvI.js → main-cherry-K2rdb2tR.js} +1 -1
  47. package/dist/ui/assets/{memory-curation-seam-CD-ZRKzr.js → memory-curation-seam-Da8y7PL1.js} +1 -1
  48. package/dist/ui/assets/{mount-DlOEB7Cf.js → mount-BnqsJz07.js} +2 -2
  49. package/dist/ui/assets/{mount-igEB5Saa.js → mount-Bvhkqfvq.js} +3 -3
  50. package/dist/ui/assets/{mount-bridge-client-DQaM1wCj.js → mount-bridge-client-DphjpUJQ.js} +1 -1
  51. package/dist/ui/assets/{mount-bridge-client-DWY67yip.js → mount-bridge-client-wfM0sGs5.js} +1 -1
  52. package/dist/ui/assets/{mount-index-D9w_zMSm.js → mount-index-DLLlduW0.js} +1 -1
  53. package/dist/ui/assets/{mount-recovery-WObwrrJB.js → mount-recovery-TMd9CRjk.js} +1 -1
  54. package/dist/ui/assets/mv-DUh51uEl.js +2 -0
  55. package/dist/ui/assets/{new-session-BlbJzLQE.js → new-session-Cio_KBeZ.js} +2 -2
  56. package/dist/ui/assets/{oauth-bootstrap-DHGSi_vM.js → oauth-bootstrap-VrNUDJjU.js} +2 -2
  57. package/dist/ui/assets/{onboarding-orchestrator-ILCQMWeH.js → onboarding-orchestrator-BB1zNdKC.js} +1 -1
  58. package/dist/ui/assets/{openai-codex-ByOwob9t.js → openai-codex-BT5FTBS6.js} +1 -1
  59. package/dist/ui/assets/{openai-codex-zHgcCFMl.js → openai-codex-BgqTW2m7.js} +1 -1
  60. package/dist/ui/assets/{openrouter-CvwSbwg3.js → openrouter-C_K6V7Gb.js} +1 -1
  61. package/dist/ui/assets/{openrouter-ooroqv_7.js → openrouter-DRW30NNq.js} +1 -1
  62. package/dist/ui/assets/{openrouter-free-Bw5mRfKy.js → openrouter-free-BuW6IASB.js} +1 -1
  63. package/dist/ui/assets/{openrouter-free-DAXjSSCv.js → openrouter-free-pIEnU1rf.js} +1 -1
  64. package/dist/ui/assets/{openrouter-oauth-DKr2TOOt.js → openrouter-oauth-B2EDW69J.js} +1 -1
  65. package/dist/ui/assets/{openrouter-oauth-CsQP_eqX.js → openrouter-oauth-CIKXwi1m.js} +1 -1
  66. package/dist/ui/assets/{panel-rpc-handlers-g22Ng2gw.js → panel-rpc-handlers-BWB6oIBZ.js} +2 -2
  67. package/dist/ui/assets/{panelize-shell-25ZtCwHW.js → panelize-shell-D_vKNVde.js} +1 -1
  68. package/dist/ui/assets/{pi-edit-execution-jG5wiCuj.js → pi-edit-execution-CotHks9m.js} +1 -1
  69. package/dist/ui/assets/{probe-info-B9GqJE41.js → probe-info-CjsoArwT.js} +1 -1
  70. package/dist/ui/assets/{provider-iX6700HG.js → provider-XTsGHN9L.js} +1 -1
  71. package/dist/ui/assets/provider-hpokNxOX.js +2 -0
  72. package/dist/ui/assets/provider-settings-Bb94woDn.js +1 -0
  73. package/dist/ui/assets/provider-store-access-C6h1lyTo.js +1 -0
  74. package/dist/ui/assets/provider-store-access-Caku0E5t.js +1 -0
  75. package/dist/ui/assets/{providers-DjUwvFlY.js → providers-76aUL-6g.js} +2 -2
  76. package/dist/ui/assets/{providers-DAeL97z_.js → providers-C4pBG_9R.js} +1 -1
  77. package/dist/ui/assets/{quick-llm-CM0bq0Rp.js → quick-llm-B4_UPPHO.js} +1 -1
  78. package/dist/ui/assets/{recovery-screen-C2-cTzHe.js → recovery-screen-dOYd3v8f.js} +1 -1
  79. package/dist/ui/assets/{remote-sprinkle-vfs-BY9A-xsx.js → remote-sprinkle-vfs-C_-TfGu3.js} +1 -1
  80. package/dist/ui/assets/{remote-vfs-client-Dt3CesOI.js → remote-vfs-client-BvSUDbgj.js} +1 -1
  81. package/dist/ui/assets/rename-via-fs-ckVY1Ljv.js +1 -0
  82. package/dist/ui/assets/{run-wZKGk8f1.js → run-4b9___NI.js} +1 -1
  83. package/dist/ui/assets/{run-BZq150_-.js → run-9EqZ2jqr.js} +2 -2
  84. package/dist/ui/assets/{run-2dG-kPkW.js → run-T3Ym76it.js} +1 -1
  85. package/dist/ui/assets/same-file-identity-C_JKwIh_.js +1 -0
  86. package/dist/ui/assets/{session-command-memory-CkF1Wu0O.js → session-command-memory-CzJDf01Z.js} +2 -2
  87. package/dist/ui/assets/{session-jsonl-eMNv3Qki.js → session-jsonl-BwqaD3jQ.js} +1 -1
  88. package/dist/ui/assets/{session-jsonl-BUM105sQ.js → session-jsonl-CRmpR-ZS.js} +1 -1
  89. package/dist/ui/assets/{session-search-index-D2VtAM_Q.js → session-search-index-D6zcG95Z.js} +1 -1
  90. package/dist/ui/assets/{setup-feature-flags-remote-CYaTMUGI.js → setup-feature-flags-remote-FiSp3Nvm.js} +1 -1
  91. package/dist/ui/assets/sidecar-repair-DRdpqqyR.js +1 -0
  92. package/dist/ui/assets/{silent-renew-backoff-CMcARSwp.js → silent-renew-backoff-47RpYn6p.js} +1 -1
  93. package/dist/ui/assets/{skills-BpO1a28c.js → skills-BDuUK1WA.js} +1 -1
  94. package/dist/ui/assets/slicc-version-BYYOm54y.js +1 -0
  95. package/dist/ui/assets/{snapshot-CUbnB6HL.js → snapshot-YCnvgdlH.js} +1 -1
  96. package/dist/ui/assets/{snapshot-features-j6dx6n8x.js → snapshot-features-nRfZ6d0i.js} +1 -1
  97. package/dist/ui/assets/{soundscape-BswqsuUI.js → soundscape-Bc7wltLS.js} +1 -1
  98. package/dist/ui/assets/{speak-BjUpeuE_.js → speak-BCp379KY.js} +1 -1
  99. package/dist/ui/assets/{sprinkle-manager--VjyaGhT.js → sprinkle-manager-CS0dEr4q.js} +1 -1
  100. package/dist/ui/assets/{sprinkle-renderer-DST9wDsJ.js → sprinkle-renderer-iBSrfvqA.js} +1 -1
  101. package/dist/ui/assets/{state-D4U_z-EK.js → state-C8-iGrWm.js} +5 -5
  102. package/dist/ui/assets/{store-DChdcXsg.js → store-BxfsyfVG.js} +1 -1
  103. package/dist/ui/assets/{store-B8MYU0Oj.js → store-DJgYFIn0.js} +1 -1
  104. package/dist/ui/assets/{sudo-Zjjvq0o1.js → sudo-Bc7aWsHw.js} +1 -1
  105. package/dist/ui/assets/{sync-dialog-CQpxesIG.js → sync-dialog-XvRaTsTt.js} +1 -1
  106. package/dist/ui/assets/{transformers-env-Bfs2yK-G.js → transformers-env-Bv-23qhN.js} +1 -1
  107. package/dist/ui/assets/{tray-sidecar-DoJ0KYqF.js → tray-sidecar-DR8GUSFa.js} +1 -1
  108. package/dist/ui/assets/types-Bgy4zvr3.js +1 -0
  109. package/dist/ui/assets/{upgrade-detection-BJO1N35I.js → upgrade-detection-CG7k5pse.js} +1 -1
  110. package/dist/ui/assets/{upskill-lick-skip-ETmK7gKp.js → upskill-lick-skip-DFarl0_a.js} +1 -1
  111. package/dist/ui/assets/{voice-reply-CxLeD2UU.js → voice-reply-BPgcJXai.js} +1 -1
  112. package/dist/ui/assets/{wc-attach-BqTZtL4F.js → wc-attach-CyWVu1te.js} +2 -2
  113. package/dist/ui/assets/{wc-extension-C_P8Z5_f.js → wc-extension-BH735oQw.js} +2 -2
  114. package/dist/ui/assets/wc-follower-C0Smt7ns.js +17 -0
  115. package/dist/ui/assets/{wc-follower-oauth-CqVmKcTQ.js → wc-follower-oauth-ZRjgkmat.js} +1 -1
  116. package/dist/ui/assets/{wc-gelatiere-ErLykEqr.js → wc-gelatiere-CBgXShc6.js} +1 -1
  117. package/dist/ui/assets/{wc-live-Kx0jpvxz.js → wc-live-TIbmNyZ5.js} +5 -5
  118. package/dist/ui/assets/{wc-nav-DMxSQWF8.js → wc-nav-D2xv4g-l.js} +2 -2
  119. package/dist/ui/assets/{wc-onboarding-W0FpgTat.js → wc-onboarding-Biz5eTLA.js} +2 -2
  120. package/dist/ui/assets/{wc-placeholder-CI7UKO4Z.js → wc-placeholder-D9hDHuFw.js} +3 -3
  121. package/dist/ui/assets/{wc-secret-request-DaAszAFd.js → wc-secret-request-Gvt5KV_e.js} +1 -1
  122. package/dist/ui/assets/{wc-settings-B-FsPgww.js → wc-settings-C5HGZFjz.js} +3 -3
  123. package/dist/ui/assets/wc-shell-D5oHtJzq.js +125 -0
  124. package/dist/ui/assets/{wc-shortcut-config-B5nHTfK6.js → wc-shortcut-config-CXSWzus2.js} +1 -1
  125. package/dist/ui/assets/{wc-shortcuts-Cbk5hDbX.js → wc-shortcuts-CXTn5ep9.js} +1 -1
  126. package/dist/ui/assets/{wc-sprinkles-DnBxgn1Q.js → wc-sprinkles-Dj4XOXZd.js} +2 -2
  127. package/dist/ui/assets/{wc-transcript-export-7tvwdvKC.js → wc-transcript-export-qh3DWzfR.js} +2 -2
  128. package/dist/ui/assets/{wc-tray-DwUCXdrJ.js → wc-tray-C2HCJKvD.js} +4 -4
  129. package/dist/ui/assets/welcome-detection-DkZYug9E.js +1 -0
  130. package/dist/ui/assets/{whisper-session-DoxUb6hK.js → whisper-session-CX7d_-d1.js} +2 -2
  131. package/dist/ui/assets/{writable-vfs-client-C4pTXDFX.js → writable-vfs-client-CzJBYzhR.js} +1 -1
  132. package/dist/ui/assets/{xai-grok-CIVOagKi.js → xai-grok-C1jqSoQB.js} +1 -1
  133. package/dist/ui/assets/{xai-grok-BHDMfFJ3.js → xai-grok-CsF-8ZL7.js} +1 -1
  134. package/dist/ui/index.html +3 -3
  135. package/dist/ui/packages/webapp/index.html +3 -3
  136. package/package.json +1 -1
  137. package/dist/ui/assets/backend-hostfs-BH8uwRZG.js +0 -1
  138. package/dist/ui/assets/backend-hostfs-BJU2QL9q.js +0 -1
  139. package/dist/ui/assets/fs-BOdMXcsi.js +0 -2
  140. package/dist/ui/assets/fs-CL93DUyC.js +0 -1
  141. package/dist/ui/assets/github-CQwdOEdJ.js +0 -2
  142. package/dist/ui/assets/kernel-worker-dGdJLKhc.js +0 -5022
  143. package/dist/ui/assets/provider-B0ZPEVNo.js +0 -2
  144. package/dist/ui/assets/provider-settings-jhJRRTGA.js +0 -1
  145. package/dist/ui/assets/provider-store-access-BtES6Ln2.js +0 -1
  146. package/dist/ui/assets/provider-store-access-z34_fP_u.js +0 -1
  147. package/dist/ui/assets/sidecar-repair-Dyo_uNW9.js +0 -1
  148. package/dist/ui/assets/slicc-version-pkH5Cy8d.js +0 -1
  149. package/dist/ui/assets/types-Dgm4REV3.js +0 -1
  150. package/dist/ui/assets/wc-follower-w1PZlnC3.js +0 -17
  151. package/dist/ui/assets/wc-shell-Bqj2G2_K.js +0 -125
  152. package/dist/ui/assets/welcome-detection-BePZ1gj8.js +0 -1
package/README.md CHANGED
@@ -42,6 +42,10 @@ Once you're in, you can:
42
42
 
43
43
  > Status: active working prototype. The macOS app is the easiest way in today; the extension has been submitted to the Chrome Web Store.
44
44
 
45
+ Scoop shells bound supported filesystem traversals and command buffers. See the
46
+ [shell work limits](docs/shell-reference.md#scoop-filesystem-work-limits) for limits
47
+ and command coverage.
48
+
45
49
  ## Why SLICC is different
46
50
 
47
51
  - **Browser-native, not browser-adjacent.** The agent runtime lives in the browser, and the agent can act on the same browser it lives in. A great mix of power and containment. If you don't like what the AI does, close the browser tab and it's over.
@@ -57,7 +57,7 @@
57
57
  * HTML and the webapp cannot rethrow a faithful `FsError`.
58
58
  */
59
59
  import type { ErrorRequestHandler, Express, Response } from 'express';
60
- import { createReadStream } from 'fs';
60
+ import { createReadStream, type Stats } from 'fs';
61
61
  import type { HostMountMapping } from './runtime-flags.js';
62
62
  /**
63
63
  * Cap on a WHOLE-FILE `GET /api/hostfs/read` (and on `PUT /write`). It exists
@@ -174,6 +174,11 @@ export declare function isHostFsStableBodyRequest(req: {
174
174
  * passed through untouched.
175
175
  */
176
176
  export declare const hostFsBodyErrorHandler: ErrorRequestHandler;
177
+ /**
178
+ * True when `a` and `b` are the same file (device + inode), not merely
179
+ * similar strings. Path comparison misses the APFS case / NFC-NFD collision.
180
+ */
181
+ export declare function sameHostFileIdentity(a: Stats, b: Stats): boolean;
177
182
  /**
178
183
  * Register the /api/hostfs routes for the resolved mount roots. The route
179
184
  * surface mirrors `MountBackend` 1:1 (webapp `backend-hostfs.ts`):
@@ -307,6 +307,7 @@ function statIdentity(s) {
307
307
  return {
308
308
  ctime: s.ctimeMs,
309
309
  ino: Number(s.ino),
310
+ dev: Number(s.dev),
310
311
  uid: s.uid,
311
312
  gid: s.gid,
312
313
  mode: s.mode,
@@ -515,7 +516,34 @@ async function mkdirOp(target) {
515
516
  await mkdir(target, { recursive: true });
516
517
  return { ok: true };
517
518
  }
519
+ /**
520
+ * True when `a` and `b` are the same file (device + inode), not merely
521
+ * similar strings. Path comparison misses the APFS case / NFC-NFD collision.
522
+ */
523
+ export function sameHostFileIdentity(a, b) {
524
+ return BigInt(a.dev) === BigInt(b.dev) && BigInt(a.ino) === BigInt(b.ino);
525
+ }
526
+ /**
527
+ * POSIX `rename(2)`: if both operands name the same directory entry (or
528
+ * hard links to the same inode), succeed and do nothing.
529
+ *
530
+ * Node's `fs.rename` on APFS is not that no-op — a case-only or NFD→NFC
531
+ * rename rewrites the catalog name. A copy-then-unlink rename is worse:
532
+ * `open(dest, O_TRUNC)` zeros the only inode, then the subsequent read of
533
+ * source copies 0 bytes, and `readdir` still shows the original name
534
+ * (#3107). Compare identity before calling `rename`.
535
+ */
518
536
  async function renameOp(from, to) {
537
+ try {
538
+ const fromStat = await lstat(from);
539
+ const toStat = await lstat(to);
540
+ if (sameHostFileIdentity(fromStat, toStat))
541
+ return { ok: true, noop: true };
542
+ }
543
+ catch (err) {
544
+ if (errnoCode(err) !== 'ENOENT')
545
+ throw err;
546
+ }
519
547
  await rename(from, to);
520
548
  return { ok: true };
521
549
  }
@@ -644,6 +672,10 @@ export function registerHostFsRoutes(app, roots) {
644
672
  }
645
673
  await mkdir(dirname(target), { recursive: true });
646
674
  const body = Buffer.isBuffer(req.body) ? req.body : Buffer.alloc(0);
675
+ // The body is fully buffered before this open. `createWriteStream`
676
+ // would O_TRUNC dest on open, before any byte arrived — the
677
+ // copy-then-unlink truncation in #3107. writeFile also truncates,
678
+ // but only with the complete payload already in hand.
647
679
  // Write-then-rename would break hardlinks and xattrs on user files;
648
680
  // plain writeFile matches what local tools do.
649
681
  await writeFile(target, body);