sliccy 6.154.5 → 6.154.7
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/ui/.vite/manifest.json +174 -174
- package/dist/ui/assets/{CLAUDE-CWMPcWVI.js → CLAUDE-C4hj5z8T.js} +1 -1
- package/dist/ui/assets/GELATIERE-CRe0rWjK.js +1 -0
- package/dist/ui/assets/{MEMORY-1jIGxLn4.js → MEMORY-BJp9Ffsq.js} +1 -1
- package/dist/ui/assets/{SKILL-Cc0Ep86w.js → SKILL-C3909YTo.js} +1 -1
- package/dist/ui/assets/SKILL-CLKK9YsR.js +1 -0
- package/dist/ui/assets/{account-store-QrRg1uSN.js → account-store-Bv7LV6_A.js} +1 -1
- package/dist/ui/assets/{account-store-DqTfhn2_.js → account-store-CuTDBQ6V.js} +1 -1
- package/dist/ui/assets/{adobe-Bea7fu-T.js → adobe-Bld04yf4.js} +1 -1
- package/dist/ui/assets/{adobe-B6cbOIZR.js → adobe-yrm9KfZU.js} +1 -1
- package/dist/ui/assets/{agent-bridge-CLbiuQFp.js → agent-bridge-BOK0bK1-.js} +1 -1
- package/dist/ui/assets/{agent-panels-CrHaxcfP.js → agent-panels-JSKGPWny.js} +1 -1
- package/dist/ui/assets/{apply-layout-CUdgM9hY.js → apply-layout-Dol4QpYX.js} +1 -1
- package/dist/ui/assets/{approver-agent-BA3dC9Lg.js → approver-agent-CCkU0PVa.js} +1 -1
- package/dist/ui/assets/{apps-CmhTAbmY.js → apps-DdAoo50J.js} +1 -1
- package/dist/ui/assets/{azure-openai-DQvD4JfK.js → azure-openai-CROWb3eo.js} +1 -1
- package/dist/ui/assets/{azure-openai-oNkAJEH9.js → azure-openai-D16OgVVX.js} +1 -1
- package/dist/ui/assets/{budget-usage-source-DMq3fdAk.js → budget-usage-source-CiFTPdLG.js} +1 -1
- package/dist/ui/assets/{cdp-CyYrl-r3.js → cdp-ChTjN36Y.js} +1 -1
- package/dist/ui/assets/{cerebras-i6LmJBOw.js → cerebras-BGd53Y6O.js} +1 -1
- package/dist/ui/assets/{cerebras-CLMg0uuV.js → cerebras-DEjugWgo.js} +1 -1
- package/dist/ui/assets/{composer-speech-9Zo81K0N.js → composer-speech-BvDGMHRN.js} +1 -1
- package/dist/ui/assets/{connect-surface-BfXSOspJ.js → connect-surface-BxeM6wzG.js} +1 -1
- package/dist/ui/assets/{directed-approval-Df9ytmfk.js → directed-approval-DAIXE0nO.js} +1 -1
- package/dist/ui/assets/{fs-CtNDvIlo.js → fs-BEbWmRDq.js} +2 -2
- package/dist/ui/assets/{fs-BiGByget.js → fs-CjgMvwqK.js} +1 -1
- package/dist/ui/assets/gelatiere-store-DA2wk9nw.js +1 -0
- package/dist/ui/assets/{gelatiere-unit-Dem3bPJm.js → gelatiere-unit-DnbLwJqw.js} +1 -1
- package/dist/ui/assets/{github-BNNfDsCz.js → github-Bc1z9Z3b.js} +1 -1
- package/dist/ui/assets/{github-D753Gf5v.js → github-D6e0X_mv.js} +2 -2
- package/dist/ui/assets/{github-auth-Dah4Bvbq.js → github-auth-BPlvszS_.js} +1 -1
- package/dist/ui/assets/{github-copilot-BFeyn-UC.js → github-copilot-BQU9xIRH.js} +1 -1
- package/dist/ui/assets/{github-copilot-B1Ax8Lk3.js → github-copilot-CtFddSBT.js} +1 -1
- package/dist/ui/assets/{github-install-NhZ0wUHD.js → github-install-BUmd5jOm.js} +1 -1
- package/dist/ui/assets/{github-zip-Dl9WuPaB.js → github-zip-BbIUjzA4.js} +1 -1
- package/dist/ui/assets/{hear-Ctqu4qhx.js → hear-CYy8tVN1.js} +1 -1
- package/dist/ui/assets/{help-Bw8UwEZ2.js → help-C1vcRsvu.js} +1 -1
- package/dist/ui/assets/icons-Ce7Vz89o.js +1 -0
- package/dist/ui/assets/{js-realm-worker-w_3ye_7l.js → js-realm-worker-JtICkZ9q.js} +1 -1
- package/dist/ui/assets/{kernel-worker-Bort6gFm.js → kernel-worker-JOBY7Wxs.js} +587 -584
- package/dist/ui/assets/{local-llm-BB5kQEa2.js → local-llm-CJWLILc_.js} +1 -1
- package/dist/ui/assets/{local-llm-InWZD5_6.js → local-llm-_OhXJtNu.js} +1 -1
- package/dist/ui/assets/{main-CpFTnqJu.js → main-CpKPiVl7.js} +3 -3
- package/dist/ui/assets/{main-cherry-C00FP5cd.js → main-cherry-D8WCpwBV.js} +1 -1
- package/dist/ui/assets/{memory-curation-seam-UdyrM1Mx.js → memory-curation-seam-BxXS_BMa.js} +1 -1
- package/dist/ui/assets/migrate-scoop-sudoers-PBnz9AA3.js +1 -0
- package/dist/ui/assets/{mount-CNl3JQQP.js → mount-B-qjx7RD.js} +1 -1
- package/dist/ui/assets/{mount-omsLg2iT.js → mount-CIGA8r4q.js} +3 -3
- package/dist/ui/assets/{mount-recovery-B9S80wQd.js → mount-recovery-DNUbi0Ni.js} +1 -1
- package/dist/ui/assets/{new-session-DzHUS_-O.js → new-session-Bat4OTXx.js} +2 -2
- package/dist/ui/assets/{oauth-bootstrap-EjnDaNLY.js → oauth-bootstrap-D2j6OHaC.js} +2 -2
- package/dist/ui/assets/{onboarding-orchestrator-CasEZ5Ti.js → onboarding-orchestrator-Za4dEXZ8.js} +1 -1
- package/dist/ui/assets/{openai-codex-MngNy3OL.js → openai-codex-CcJ89ggy.js} +1 -1
- package/dist/ui/assets/{openai-codex-c9FzyJSx.js → openai-codex-f1f3Poo1.js} +1 -1
- package/dist/ui/assets/{openrouter-CTU-VUZU.js → openrouter-B52C9XuH.js} +1 -1
- package/dist/ui/assets/{openrouter-58brdWIl.js → openrouter-DN9cM8UA.js} +1 -1
- package/dist/ui/assets/{openrouter-free-B1pQjdc9.js → openrouter-free--eNgGfax.js} +1 -1
- package/dist/ui/assets/{openrouter-free-Cw45OIqu.js → openrouter-free-CiLvReDo.js} +1 -1
- package/dist/ui/assets/{openrouter-oauth-S-co-_BE.js → openrouter-oauth-DOQfi9TX.js} +1 -1
- package/dist/ui/assets/{openrouter-oauth-BVyZ9RG4.js → openrouter-oauth-Iv8iz92e.js} +1 -1
- package/dist/ui/assets/{panel-rpc-handlers-D_G7IsL-.js → panel-rpc-handlers-DtxsALXP.js} +2 -2
- package/dist/ui/assets/{panelize-shell-dRR-gQQ4.js → panelize-shell-Dk8A0fzt.js} +1 -1
- package/dist/ui/assets/{pi-edit-execution-DzlJRvzD.js → pi-edit-execution-BVNON_7G.js} +1 -1
- package/dist/ui/assets/{provider-D-5WiTrV.js → provider-BEV4Nyb0.js} +2 -2
- package/dist/ui/assets/{provider-CeNevkik.js → provider-jRSVQQyi.js} +1 -1
- package/dist/ui/assets/provider-settings-Dc0Uksht.js +1 -0
- package/dist/ui/assets/provider-store-access-BYCBOZrX.js +1 -0
- package/dist/ui/assets/provider-store-access-CcCQNG5q.js +1 -0
- package/dist/ui/assets/{providers-JVYHxTrW.js → providers-CkE3X7zj.js} +2 -2
- package/dist/ui/assets/{providers-CZoy8wMj.js → providers-DsDlOFZz.js} +1 -1
- package/dist/ui/assets/{quick-llm-BrhzKZyf.js → quick-llm-hedJ8LEL.js} +1 -1
- package/dist/ui/assets/{recovery-screen-Dm_Ys4T5.js → recovery-screen-DU8WFnpT.js} +1 -1
- package/dist/ui/assets/{run-D-ptdMRR.js → run-C-InHvWx.js} +2 -2
- package/dist/ui/assets/run-CuXkU2qx.js +3 -0
- package/dist/ui/assets/{run-CfuM1xwa.js → run-DTXbRzQ6.js} +1 -1
- package/dist/ui/assets/run-FqXwpBiQ.js +54 -0
- package/dist/ui/assets/{run-Da4WIBP4.js → run-dk5KyxT2.js} +1 -1
- package/dist/ui/assets/{session-jsonl-Be97cQdP.js → session-jsonl-CpQqgq2a.js} +1 -1
- package/dist/ui/assets/{setup-feature-flags-remote-D47pV_MM.js → setup-feature-flags-remote-DJTSDAP-.js} +1 -1
- package/dist/ui/assets/sidecar-repair-CPDaW6WS.js +1 -0
- package/dist/ui/assets/{silent-renew-backoff-Cynzp3bE.js → silent-renew-backoff-pEjTpf6Y.js} +1 -1
- package/dist/ui/assets/skills-D1r_dXXN.js +5 -0
- package/dist/ui/assets/slicc-version-Do_Qzxe9.js +1 -0
- package/dist/ui/assets/{snapshot-features-DVyd7MCD.js → snapshot-features-Bn7BtW7K.js} +1 -1
- package/dist/ui/assets/{snapshot-DZQ1apX-.js → snapshot-jBfySyLF.js} +1 -1
- package/dist/ui/assets/{soundscape-BMwJ3NUw.js → soundscape-gtJZ30qF.js} +1 -1
- package/dist/ui/assets/{speak-1sadgIHv.js → speak-D6N7JGfl.js} +1 -1
- package/dist/ui/assets/{sprinkle-manager-D6Qrwdww.js → sprinkle-manager-Bgirnz_O.js} +1 -1
- package/dist/ui/assets/{sprinkle-renderer-Pg2SqEAJ.js → sprinkle-renderer-CpbS9Pze.js} +1 -1
- package/dist/ui/assets/{state-DA5Ppyx-.js → state-gI8eLPCJ.js} +1 -1
- package/dist/ui/assets/{store-JtuNg-ld.js → store-CJoMqbUo.js} +1 -1
- package/dist/ui/assets/{store-BIDY4hVD.js → store-CoFkhkC_.js} +1 -1
- package/dist/ui/assets/{sudo-BAvTUS5b.js → sudo-CdUi7Bt1.js} +1 -1
- package/dist/ui/assets/sudoers-BdBYQPUn.js +3 -0
- package/dist/ui/assets/{suggestions-CFQTt8oo.js → suggestions-B34zKgsF.js} +151 -33
- package/dist/ui/assets/{sync-dialog-B22MjR-Y.js → sync-dialog-uCJmhtr8.js} +1 -1
- package/dist/ui/assets/{transformers-env-Dbzm2zOd.js → transformers-env-GrfzOgRv.js} +1 -1
- package/dist/ui/assets/{tray-sidecar-DfQxtpAU.js → tray-sidecar-B_1w3n4t.js} +1 -1
- package/dist/ui/assets/{upgrade-detection-B0CnEfsD.js → upgrade-detection-L60JNTNb.js} +1 -1
- package/dist/ui/assets/{upskill-lick-skip-Dkrc8SQj.js → upskill-lick-skip-Jcllnh6l.js} +1 -1
- package/dist/ui/assets/{voice-reply-hxJpzo4Z.js → voice-reply-DqNiHN6M.js} +1 -1
- package/dist/ui/assets/{wc-attach-B-RwMKh4.js → wc-attach-8_xsR0qy.js} +2 -2
- package/dist/ui/assets/{wc-extension-BzgY7Ay5.js → wc-extension-oYf2HrE6.js} +2 -2
- package/dist/ui/assets/{wc-follower-RmDJj3vx.js → wc-follower-BYsj_5x0.js} +3 -3
- package/dist/ui/assets/{wc-follower-oauth-CzL_YM3W.js → wc-follower-oauth-CljtR185.js} +1 -1
- package/dist/ui/assets/{wc-gelatiere-DMO16qkW.js → wc-gelatiere-CP4serB8.js} +1 -1
- package/dist/ui/assets/{wc-live-C1fkW0oh.js → wc-live-CkxSC9Ez.js} +6 -6
- package/dist/ui/assets/{wc-nav-EBobpmc0.js → wc-nav-XvRTYo98.js} +2 -2
- package/dist/ui/assets/{wc-onboarding-sry3pJ3v.js → wc-onboarding-iCoaOIma.js} +2 -2
- package/dist/ui/assets/{wc-placeholder-yiwnKVQh.js → wc-placeholder-em6OiHpb.js} +3 -3
- package/dist/ui/assets/{wc-secret-request-DR5a7SVR.js → wc-secret-request-BjM8NPKG.js} +1 -1
- package/dist/ui/assets/{wc-settings-BB5MYHf5.js → wc-settings-BtBwNeN8.js} +3 -3
- package/dist/ui/assets/{wc-shell-DMzpB1X4.js → wc-shell-DC9WMYcH.js} +3 -3
- package/dist/ui/assets/{wc-shortcut-config-CutoJlLo.js → wc-shortcut-config-BEsAGNLx.js} +1 -1
- package/dist/ui/assets/{wc-shortcuts-Db5RFxfY.js → wc-shortcuts-CETptwt9.js} +172 -172
- package/dist/ui/assets/{wc-sprinkles-CyZsTtq7.js → wc-sprinkles-DLNH0Ist.js} +2 -2
- package/dist/ui/assets/{wc-transcript-export-Bkn8aEFu.js → wc-transcript-export-CidB32Dc.js} +2 -2
- package/dist/ui/assets/{wc-tray-6uck1DGP.js → wc-tray-BbFFd7U-.js} +4 -4
- package/dist/ui/assets/welcome-detection-DW2ROqam.js +1 -0
- package/dist/ui/assets/{whisper-session-BNYJek9P.js → whisper-session-BvALr1gE.js} +2 -2
- package/dist/ui/assets/{xai-grok-DcM2TX44.js → xai-grok-DWDEwZSo.js} +1 -1
- package/dist/ui/assets/{xai-grok-CaMqKb8o.js → xai-grok-Ht4qQwUs.js} +1 -1
- package/dist/ui/index.html +3 -3
- package/dist/ui/lucide-icons.js +182 -179
- package/dist/ui/packages/webapp/index.html +3 -3
- package/package.json +1 -1
- package/dist/ui/assets/GELATIERE-CDj3aVTD.js +0 -1
- package/dist/ui/assets/SKILL-DvHAkJSI.js +0 -117
- package/dist/ui/assets/gelatiere-store-CcLPnD5F.js +0 -1
- package/dist/ui/assets/icons-D5_bMrnB.js +0 -1
- package/dist/ui/assets/provider-settings-CseKsTkN.js +0 -1
- package/dist/ui/assets/provider-store-access-B8K7spUZ.js +0 -1
- package/dist/ui/assets/provider-store-access-Cr4NjO-D.js +0 -1
- package/dist/ui/assets/run-CHF9lHjk.js +0 -46
- package/dist/ui/assets/sidecar-repair-9M_U9-Iy.js +0 -1
- package/dist/ui/assets/skills-DoZg-ojy.js +0 -5
- package/dist/ui/assets/slicc-version-7PkoDMIu.js +0 -1
- package/dist/ui/assets/sudoers-KgJRnN4b.js +0 -3
- package/dist/ui/assets/welcome-detection-DsUV5zMq.js +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{t as e}from"./logger-LESFN7Hj.js";import"./account-store-QrRg1uSN.js";import"./core-DP-MJcag.js";import"./tray-runtime-config-CRZxBChd.js";e(`provider-settings`);
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{t as e}from"./store-JtuNg-ld.js";export{e as readMcpAuthEntries};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{t as e}from"./provider-D-5WiTrV.js";export{e as readMcpAuthEntries};
|
|
@@ -1,46 +0,0 @@
|
|
|
1
|
-
import{t as e}from"./subcommand-flags-BZi7j78Q.js";import{t}from"./subcommand-help-CgO7wRS5.js";import{n}from"./lick-target-env-8JxfVcIV.js";const r=`usage: gelatiere <command> [options]
|
|
2
|
-
|
|
3
|
-
The gelatiere is SLICC's resident advisor: a persistent unit no cone owns that
|
|
4
|
-
reviews your archived sessions — nightly, and after a chat ends — and suggests
|
|
5
|
-
skills to install, use cases to try, and habits to change. Suggestions show up
|
|
6
|
-
as cards in the suggestions sprinkle and every cone gets a lick.
|
|
7
|
-
|
|
8
|
-
Commands:
|
|
9
|
-
init [--reset] Create the gelatiere unit and its nightly crontask (idempotent);
|
|
10
|
-
--reset first drops every unit the gelatiere owner holds
|
|
11
|
-
run Ask the gelatiere for a pass right now
|
|
12
|
-
suggest <file> Fold a pass's candidates (JSON) into the store — the gelatiere's own step
|
|
13
|
-
deliver [options] Lick every other cone with the open suggestions — the gelatiere's other step
|
|
14
|
-
list [--all|--json] Show open suggestions (--all includes taken and dismissed)
|
|
15
|
-
dismiss <id> Wave a suggestion away so it is not shown again
|
|
16
|
-
status Unit, nightly schedule, last pass, last delivery, counts
|
|
17
|
-
catalog The skill catalog (JSON) from www.sliccy.com
|
|
18
|
-
commands Every shell command SLICC ships, from the sitemap
|
|
19
|
-
man <command> One man page, plain text
|
|
20
|
-
|
|
21
|
-
deliver options:
|
|
22
|
-
--scoop <target> One cone (folder, name or jid) instead of every cone; does not
|
|
23
|
-
advance the delivery watermark, so the others still get theirs
|
|
24
|
-
--force Send even when nothing is new since the last delivery
|
|
25
|
-
|
|
26
|
-
Files:
|
|
27
|
-
/shared/GELATIERE.md Pass instructions + config (intervalHours, nightly, maxSuggestions,
|
|
28
|
-
allowedCommands — extra shell commands a pass may run unattended)
|
|
29
|
-
/shared/.gelatiere/suggestions.json Every suggestion; takenAt when acted on, dismissedAt when waved away
|
|
30
|
-
/shared/.gelatiere/state.json Pass and delivery ledger
|
|
31
|
-
|
|
32
|
-
Examples:
|
|
33
|
-
gelatiere init
|
|
34
|
-
gelatiere run
|
|
35
|
-
gelatiere suggest "$TMPDIR/candidates.json" && gelatiere deliver
|
|
36
|
-
gelatiere dismiss skill-github
|
|
37
|
-
`,i=[`--scoop`];function a(e){return{stdout:e,stderr:``,exitCode:0}}function o(e){return{stdout:``,stderr:`gelatiere: ${e}\n`,exitCode:1}}const s=`kernel host has not booted yet — try again in a moment`;function c(){let e=globalThis.__slicc_gelatiere;return e&&typeof e.roots==`function`?e:null}function l(){return import(`./gelatiere-store-CcLPnD5F.js`)}async function u(t,n){let r=e(t,{bool:[`--reset`]});if(`error`in r)return o(r.error);let i=c();if(!i)return o(s);let u=await(await l()).loadGelatiereConfig(n),f=``;if(r.bools.has(`--reset`)){let e=await i.unregisterOwned();f=e.length?`Dropped ${e.length} gelatiere unit(s): ${e.join(`, `)}\n`:``}let p;try{p=await i.ensureUnit(u.allowedCommands)}catch(e){return o(e instanceof Error?e.message:String(e))}let m=await i.ensureNightly(u.nightly);return a(f+`${p.created?`Created`:`Found`} the gelatiere (${p.jid}, folder ${p.folder})\n`+d(p.allowList)+`${m.created?`Registered`:`Found`} nightly pass: cron "${m.cron}" (${m.id})\nSuggestions render in the suggestions card; \`gelatiere run\` asks for a pass now.
|
|
38
|
-
`)}function d(e){return e===`updated`?`Updated its command allow-list from GELATIERE.md
|
|
39
|
-
`:e===`deferred`?`Left its command allow-list alone: the gelatiere is mid-pass and applying it would
|
|
40
|
-
cancel the pass — run \`gelatiere init\` again once it is idle
|
|
41
|
-
`:``}async function f(e){let t=c();if(!t)return o(s);let r;try{r=await t.ensureUnit()}catch(e){return o(e instanceof Error?e.message:String(e))}let i=n(void 0,e)??`the default cone`;return t.lick(r.folder,{action:`run`,data:{reason:`manual`,requestedBy:i}}),a(`Asked the gelatiere (${r.jid}) for a pass. Suggestions land in the suggestions card.\n`)}async function p(e,t){let n=e[0];if(!n)return o(`suggest requires a JSON file: gelatiere suggest <file>`);let r=await l(),i;try{let e=await t.readFile(n,{encoding:`utf-8`});i=JSON.parse(typeof e==`string`?e:new TextDecoder().decode(e))}catch(e){return o(`cannot read ${n}: ${e instanceof Error?e.message:String(e)}`)}let{added:s,open:c}=await r.recordPass(t,i),u=`Pass recorded: ${s.length} new, ${c.length} open\n`;for(let e of s)u+=` + ${e.id} [${e.kind}] ${e.title}\n`;return s.length===0&&(u+=`Nothing new (every candidate was already known or invalid).
|
|
42
|
-
`),a(u)}async function m(t,n){let r=e(t,{value:i,bool:[`--force`]});if(`error`in r)return o(r.error);let u=c();if(!u)return o(s);let d=await l(),f=await d.readGelatiereSuggestions(n),p=d.openSuggestions(f),m=await d.readGelatiereState(n),h=d.suggestionsSince(f,m.lastDeliveredAt);if(h.length===0&&!r.bools.has(`--force`))return a(`Nothing new since the last delivery; no lick sent (use --force to resend).
|
|
43
|
-
`);let g=u.roots(),_=r.values.get(`--scoop`);if(_&&!g.some(e=>e.folder===_||e.name===_||e.jid===_))return o(`unknown delivery target "${_}" (cones: ${g.map(e=>e.folder).join(`, `)||`none running`})`);let v=_?[_]:g.map(e=>e.folder);if(v.length===0)return o(`no cone is running to deliver to`);let y=d.buildGelatiereLickBody(h,p);for(let e of v)u.lick(e,y);_||await d.writeGelatiereState(n,{...m,lastDeliveredAt:new Date().toISOString()});let b=_?` (targeted; the delivery watermark is unchanged)`:``;return a(`Delivered ${h.length} new (${p.length} open) to ${v.length} cone(s): ${v.join(`, `)}${b}\n`)}async function h(t,n){let r=e(t,{bool:[`--all`,`--json`]});if(`error`in r)return o(r.error);let i=await l(),s=await i.readGelatiereSuggestions(n),c=r.bools.has(`--all`)?s:i.openSuggestions(s);if(r.bools.has(`--json`))return a(`${JSON.stringify(c,null,2)}\n`);if(c.length===0)return a(s.length===0?"No suggestions yet. `gelatiere run` asks for a pass now.\n":"No open suggestions (every one has been taken or dismissed; `--all` lists them).\n");let u=``;for(let e of c){let t=e.dismissedAt?` (dismissed)`:e.takenAt?` (taken)`:``;u+=`${e.id} [${e.kind}]${t}\n ${e.title}\n`,e.install&&(u+=` install: ${e.install}\n`),e.prompt&&(u+=` try: ${e.prompt}\n`)}return a(u)}async function g(e,t){let n=e[0];return n?await(await l()).dismissGelatiereSuggestion(t,n)?a(`Dismissed ${n}.\n`):o(`no open suggestion with id "${n}"`):o("dismiss requires a suggestion id (see `gelatiere list`)")}const _=512e3,v=/^[a-z0-9][a-z0-9-]*$/;async function y(e,t){let n=await fetch(`https://www.sliccy.com${e}`,{signal:AbortSignal.timeout(15e3)});if(!n.ok)throw Error(`${e}: HTTP ${n.status}`);let r=await n.text();return r.length>t?r.slice(0,t):r}async function b(){try{let e=await y(`/skills/catalog.json`,_);return a(e.endsWith(`
|
|
44
|
-
`)?e:`${e}\n`)}catch(e){return o(`catalog fetch failed: ${e instanceof Error?e.message:String(e)}`)}}async function x(){try{let e=[...(await y(`/sitemap.xml`,_)).matchAll(/<loc>[^<]*\/man\/([a-z0-9-]+)(?:\.html)?<\/loc>/g)].map(e=>e[1]).sort();return e.length===0?o(`no man pages found in the sitemap`):a(`${[...new Set(e)].join(` `)}\n`)}catch(e){return o(`sitemap fetch failed: ${e instanceof Error?e.message:String(e)}`)}}async function S(e){let t=e[0];if(!t)return o(`man requires a command name: gelatiere man <command>`);if(!v.test(t))return o(`not a command name: "${t}"`);try{let e=await y(`/man/${t}.plain.html`,16e3);return a(e.endsWith(`
|
|
45
|
-
`)?e:`${e}\n`)}catch(e){return o(`man fetch failed: ${e instanceof Error?e.message:String(e)}`)}}async function C(e){let t=await l(),n=c(),r=n?.unit(),i=await t.loadGelatiereConfig(e),o=await t.readGelatiereState(e),s=await t.readGelatiereSuggestions(e),u=``,{isMemoryV2Enabled:d}=await import(`./memory-v2-flag-Aq5sA4Gq.js`);d()||(u+=`Memory v2: OFF — the nightly is unscheduled and session ends do not trigger passes
|
|
46
|
-
`),u+=`Unit: ${r?`${r.jid} (folder ${r.folder})`:"not created — run `gelatiere init`"}\n`;let f=n?.nightly();return u+=`Nightly: ${f?`registered, cron "${f.cron}" (${f.id})`:`not registered — run \`gelatiere init\` (cron "${i.nightly}")`}\n`,u+=`Interval: ${i.intervalHours}h between session-end passes\n`,u+=w(i.allowedCommands,n?.unitAllowedCommands(),t),u+=`Passes: ${o.passes}\n`,u+=`Last pass: ${o.lastPassAt??`never`}\n`,u+=`Last trigger: ${o.lastTriggeredAt??`never`}\n`,u+=`Last delivery: ${o.lastDeliveredAt??`never`}\n`,u+=`Suggestions: ${t.openSuggestions(s).length} open, ${t.takenSuggestions(s).length} taken, ${s.length} total\n`,a(u)}function w(e,t,n){let r=e=>{let t=e.filter(e=>!n.GELATIERE_BASE_ALLOWED_COMMANDS.includes(e));return t.length?` (+${t.join(`, `)} from GELATIERE.md)`:``};return t?t.length===e.length&&t.every((t,n)=>t===e[n])?`Commands: ${t.length} allowed without approval${r(t)}\n`:`Commands: ${t.length} in force${r(t)}; GELATIERE.md asks for ${e.length}${r(e)} — run \`gelatiere init\`\n`:`Commands: ${e.length} configured${r(e)}, pending — run \`gelatiere init\`\n`}async function T(e,n,s){let c=e[0];if(!c||t(e,{valueFlags:i}))return a(r);let l=e.slice(1);switch(c){case`init`:return u(l,s.fs);case`run`:return f(n.env);case`suggest`:return p(l,s.fs);case`deliver`:return m(l,s.fs);case`list`:return h(l,s.fs);case`dismiss`:return g(l,s.fs);case`status`:return C(s.fs);case`catalog`:return b();case`commands`:return x();case`man`:return S(l);default:return o(`unknown command: ${c}\n${r}`)}}export{T as runGelatiere};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{i as e,n as t}from"./fs-CtNDvIlo.js";export{t as repairOpfsMetadataSidecar,e as resolveWithSidecarRepair};
|
|
@@ -1,5 +0,0 @@
|
|
|
1
|
-
import{n as e}from"./rolldown-runtime-Dd_uD5pT.js";import{t}from"./logger-LESFN7Hj.js";import{a as n,n as r,r as i,t as a}from"./path-utils-DNJG-zQf.js";import{t as o}from"./types-Dgm4REV3.js";import"./fs-BiGByget.js";import{d as s,i as c,m as l,n as u}from"./sudoers-KgJRnN4b.js";import{r as d}from"./browser-2rCVqcqy.js";const f=t(`sudo:timeout`),p={"user-timeout":`no response from the user within 5 minutes. This is a TIMEOUT, not a denial — the user was not there to answer. Do not retry this action; report that the approval request went unanswered and wait for the user before trying again.`,"cone-timeout":`no response from the cone agent within 5 minutes. This is a TIMEOUT, not a denial — no human was ever prompted, the cone simply never resolved the request. Do not retry this action; report that the escalation went unanswered and continue with work that does not need it.`};function m(e){return p[e]}function h(e=`user-timeout`){return{decision:`deny`,reason:e}}function g(e,t){let n=t.decision===`deny`?t.reason:void 0;return n?`${e}: approval request timed out — ${m(n)}`:`${e}: approval denied`}function _(e,t={}){let n=t.timeoutMs??3e5;if(!Number.isFinite(n)||n<=0)return e;let r=t.setTimer??((e,t)=>setTimeout(e,t)),i=t.clearTimer??(e=>clearTimeout(e));return{requestApproval(t,a){return new Promise(o=>{let s=new AbortController,c=()=>s.abort();a?.signal?.addEventListener(`abort`,c,{once:!0});let l=!1,u=e=>{l=!0,a?.signal?.removeEventListener(`abort`,c),o(e)},d=r(()=>{l||(f.warn(`sudo approval timed out — failing closed`,{kind:t.kind,detail:t.detail,timeoutMs:n}),s.abort(),u(h(`user-timeout`)))},n),p=e=>{if(l){f.warn(`sudo decision arrived after timeout — discarded`,{kind:t.kind,detail:t.detail,decision:e.decision});return}i(d),u(e)};e.requestApproval(t,{signal:s.signal}).then(p,e=>{f.warn(`sudo broker threw — denying`,{error:e instanceof Error?e.message:String(e)}),p({decision:`deny`})})})}}}const v=t(`sudo:fs`),y=Symbol.for(`slicc.fs.monkeypatchUnsafe`),b=`${u}/granted`;function x(e){return g(`sudo`,e)}const ee=[`readFile`,`readFileRange`,`getNativeFile`,`readTextFile`,`readDir`,`exists`,`stat`],S=[`writeFile`],C=[`mkdir`,`rm`];async function w(e,t,n,r){let a=l(r);if(!a)return;let s=t(),c={pattern:a,nopasswd:!0,regex:i(a)};(n===`read`?s.read:s.write).push(c);let d=`NOPASSWD ${n===`read`?`Read`:`Write`} ${a}\n`;try{await e.mkdir(u,{recursive:!0});let t=``;try{t=await e.readFile(b,{encoding:`utf-8`})}catch(e){if(!(e instanceof o&&e.code===`ENOENT`))throw e}let n=t.length>0&&!t.endsWith(`
|
|
2
|
-
`)?`
|
|
3
|
-
`:``;await e.writeFile(b,t+n+d)}catch(e){v.warn(`Failed to persist NOPASSWD grant; effective in-session only`,{error:e instanceof Error?e.message:String(e)})}}function T(e,t){let{broker:n,getPolicy:i}=t,a=t.defaultDisposition??`allow`,l=t.onGrant?t.onGrant:(t,n)=>w(e,i,t,n);async function u(e,t,u=!1){let d=r(t),f=s(i(),e,d,{isContentWrite:u});if((e===`write`?c(f,a):f)!==`require-approval`)return;let p=e,m=await n.requestApproval({kind:p,detail:d});if(m.decision===`deny`)throw new o(`EACCES`,x(m),d);m.decision===`always`&&await l(e,m.pattern?.trim()||d)}function d(e){return s(i(),`read`,r(e))!==`require-approval`}let f=t=>typeof e[t]==`function`,p={};for(let t of ee)f(t)&&(p[t]=async(n,...r)=>(await u(`read`,n),e[t](n,...r)));for(let t of S)f(t)&&(p[t]=async(n,...r)=>(await u(`write`,n,!0),e[t](n,...r)));for(let t of C)f(t)&&(p[t]=async(n,...r)=>(await u(`write`,n),e[t](n,...r)));return f(`walk`)&&(p.walk=async function*(t,...n){await u(`read`,t),yield*e.walk(t,...n)}),f(`symlink`)&&(p.symlink=async(t,n)=>(await u(`write`,n),e.symlink(t,n))),f(`rename`)&&(p.rename=async(t,n)=>(await u(`read`,t),await u(`write`,t),await u(`write`,n),e.rename(t,n))),f(`copyFile`)&&(p.copyFile=async(t,n)=>(await u(`read`,t),await u(`write`,n),e.copyFile(t,n))),f(`mount`)&&(p.mount=async(t,...n)=>(await u(`write`,t),e.mount(t,...n))),f(`unmount`)&&(p.unmount=async t=>(await u(`write`,t),e.unmount(t))),f(`refreshMount`)&&(p.refreshMount=async(t,...n)=>(await u(`write`,t),e.refreshMount(t,...n))),f(`statSync`)&&(p.statSync=t=>d(t)?e.statSync(t):null),f(`readDirSync`)&&(p.readDirSync=t=>d(t)?e.readDirSync(t):null),new Proxy(e,{get(e,t,n){if(t===y)return!0;if(typeof t==`string`&&t in p)return p[t];let r=Reflect.get(e,t,n);return typeof r==`function`?r.bind(e):r}})}const E=`.skill`,D=`/workspace/skills`,O=`SKILL.md`,k=t(`skills-discovery`),A=[`native`,`agents`,`claude`,`marketplace`,`plugin`],j=new Map([[`.agents`,`agents`],[`.claude`,`claude`]]),te=new Set([`.git`,`.slicc`,`node_modules`]),M=2e4,ne=[`mkdir`,`mount`,`rename`,`rm`,`unmount`,`writeFile`],N=new WeakMap,P=new WeakSet;async function F(e,t=D){let n=await B(e,t),r=await L(e),i=await I(e);return[...A.flatMap(e=>(e===`native`?n:e===`plugin`?i:r.filter(t=>t.source===e)).sort((e,t)=>e.path.localeCompare(t.path)))]}async function I(e){let t;try{let n=await e.readTextFile(`/workspace/.plugins/plugins.json`),r=JSON.parse(n);if(!r||typeof r!=`object`||!r.plugins)return[];t=Object.values(r.plugins).map(e=>e?.root).filter(e=>typeof e==`string`)}catch{return[]}let n=[];for(let r of t){let t=`${r}/skills`,i=await q(e,t);for(let r of i){if(r.type!==`directory`)continue;let i=`${t}/${r.name}`,a=`${i}/${O}`;await K(e,a)&&n.push({source:`plugin`,sourceRoot:t,path:i,skillFilePath:a})}}return n}async function L(e){if(R(e))return(await W(e)).map(e=>({...e}));G(e);let t=e,n=N.get(t);if(n)return n.map(e=>({...e}));let r=await W(e);return N.set(t,r),r.map(e=>({...e}))}function R(e){try{return e[y]===!0}catch{return!1}}function z(e,t){let n=new Map,r=new Map;for(let i of e){let e=t(i);if(!n.has(e)){n.set(e,i);continue}let a=r.get(e)??{name:e,winner:n.get(e),shadowed:[]};a.shadowed.push(i),r.set(e,a)}return{winners:Array.from(n.values()),collisions:Array.from(r.values())}}async function B(e,t){let n=await q(e,t),r=[];for(let i of n){if(i.type!==`directory`)continue;let n=`${t}/${i.name}`,a=`${n}/${O}`;await K(e,a)&&r.push({source:`native`,sourceRoot:t,path:n,skillFilePath:a})}return r}async function V(e,t){let n;try{n=await e.readTextFile(t)}catch{return[]}let r;try{r=JSON.parse(n)}catch{return[]}if(typeof r!=`object`||!r)return[];let i=r.plugins;if(!Array.isArray(i))return[];let a=t.replace(/\/[^/]+$/,``).replace(/\/.claude-plugin$/,``),o=[];for(let e of i){if(typeof e!=`object`||!e)continue;let t=e.source;if(typeof t!=`string`||t.startsWith(`/`)||t.split(`/`).includes(`..`))continue;let n=t.replace(/^\.\//,``).replace(/\/$/,``).replace(/^\.$/,``);o.push(n?`${a}/${n}`:a)}return o}async function H(e,t,n){let r=await V(e,`${t}/marketplace.json`),i=[];for(let t of r){let r=`${t}/skills`,a=await q(e,r);for(let t of a){if(t.type!==`directory`)continue;let a=`${r}/${t.name}`,o=`${a}/${O}`;!await K(e,o)||n.has(a)||(n.add(a),i.push({source:`marketplace`,sourceRoot:r,path:a,skillFilePath:o}))}}return i}async function U(e,t,n,r){let i=`${t}/skills`,a=await q(e,i),o=[];for(let t of a){if(t.type!==`directory`)continue;let a=`${i}/${t.name}`,s=`${a}/${O}`;!await K(e,s)||r.has(a)||(r.add(a),o.push({source:n,sourceRoot:i,path:a,skillFilePath:s}))}return o}async function W(e){let t=[],n=new Set,r=new Set([`/`]),i=[{path:`/`,depth:0}];for(let a=0;a<i.length;a+=1){if(a>=M){k.warn(`skills discovery: directory budget exhausted; walk truncated`,{budget:M});break}let{path:o,depth:s}=i[a],c=await q(e,o);for(let a of c){if(a.type!==`directory`||a.name===`.`||a.name===`..`)continue;let c=o===`/`?`/${a.name}`:`${o}/${a.name}`,l=j.get(a.name);if(l){let r=await U(e,c,l,n);t.push(...r)}if(a.name===`.claude-plugin`){let r=await H(e,c,n);t.push(...r);continue}!te.has(a.name)&&s<24&&!r.has(c)&&(r.add(c),i.push({path:c,depth:s+1}))}}return t}function G(e){if(R(e))return;let t=e;if(P.has(t))return;P.add(t);let n=e;for(let r of ne){let i=n[r];if(typeof i==`function`)try{n[r]=async(...n)=>{let r=await i.apply(e,n);return N.delete(t),r}}catch{}}}async function K(e,t){try{return await e.stat(t),!0}catch{return!1}}async function q(e,t){try{return[...await e.readDir(t)].sort((e,t)=>e.name.localeCompare(t.name))}catch{return[]}}async function J(e,t=`/workspace/skills`){let n=await F(e,t),r=[];for(let t of n){let n=t.path.split(`/`).pop()??t.path,i=``;if(t.skillFilePath)try{i=Z(await e.readTextFile(t.skillFilePath))??``}catch{}r.push({name:n,source:t.source,sourceRoot:t.sourceRoot,path:t.path,skillFilePath:t.skillFilePath,description:i})}let{winners:i,collisions:a}=z(r,e=>e.name),o=new Map(a.map(e=>[e.winner.path,e.shadowed.map(e=>e.path)]));return i.map(e=>({...e,shadowedPaths:o.get(e.path)}))}async function Y(e,t,n=`/workspace/skills`){return(await J(e,n)).find(e=>e.name===t)||null}async function X(e,t,n=`/workspace/skills`){let r=await Y(e,t,n);if(!r?.skillFilePath)return null;try{return await e.readTextFile(r.skillFilePath)}catch{return null}}function Z(e){let t=e.replace(/^\uFEFF/,``).replace(/\r\n?/g,`
|
|
4
|
-
`).trimStart().match(/^---\s*\n([\s\S]*?)\n---/);if(!t)return null;for(let e of t[1].split(`
|
|
5
|
-
`)){let t=e.match(/^description:\s*(.*)$/);if(t)return t[1].trim()}return null}const re=/^[A-Za-z0-9][A-Za-z0-9._-]*$/;function ie(e){if(e===`__MACOSX`||e.startsWith(`__MACOSX/`))return!0;let t=e.includes(`/`)?e.slice(e.lastIndexOf(`/`)+1):e;return!!(t===`.DS_Store`||t===`Thumbs.db`||t===`desktop.ini`||t.startsWith(`._`))}var Q=class extends Error{};function ae(e){let t=e.replace(/\\/g,`/`);if(!t||t.endsWith(`/`))return null;if(t.startsWith(`/`)||/^[A-Za-z]:\//.test(t))throw Error(`Blocked suspicious path "${e}".`);let n=t.split(`/`);if(n.some(e=>e===``||e===`.`||e===`..`))throw Error(`Blocked suspicious path "${e}".`);return n.join(`/`)}function oe(e){if(!re.test(e))throw Error(`Invalid skill: skill name "${e}" must be a simple directory name.`)}function se(e){let t=[];for(let[n,r]of Object.entries(e)){let e=ae(n);e&&(ie(e)||t.push({originalPath:n,path:e,bytes:r}))}return t}function ce(e){let t=e.filter(e=>e.path===`SKILL.md`||e.path.endsWith(`/SKILL.md`));if(t.length===0)throw Error(`Skill archive is missing ${O}.`);if(t.length>1)throw Error(`Skill archive contains multiple ${O} files.`);return t[0]}function le(e){let t=0,n=0;return d(e,{filter(e){if(t++,t>1e3)throw new Q(`Skill archives may contain at most 1000 entries.`);if(n+=e.originalSize,n>52428800)throw new Q(`Skill archives must expand to 50 MB or smaller after extraction.`);return!0}})}function ue(e){let t=`${Date.now()}-${Math.random().toString(16).slice(2,8)}`;return a(D,`.${e}.tmp-${t}`)}function de(e,t){return t===`SKILL.md`?e.replace(/\.skill$/i,``):t.slice(0,-9).split(`/`).pop()??``}function fe(e){if(!e.name.toLowerCase().endsWith(`.skill`))throw Error(`Only ${E} archives can be installed with drag and drop.`);if(e.size>52428800)throw Error(`Skill archives must be 50 MB or smaller.`)}async function pe(e){try{return le(new Uint8Array(await e.arrayBuffer()))}catch(e){if(e instanceof Q)throw e;let t=e instanceof Error?e.message:String(e);throw Error(`Invalid .skill archive: ${t}`)}}function $(e){return e.path===`SKILL.md`?``:e.path.slice(0,-9)}function me(e,t){return t&&(e===t||!e.startsWith(`${t}/`))?null:(t?e.slice(t.length+1):e)||null}async function he(e,t,r,i){let o=a(t,r),{dir:s}=n(o);s!==`/`&&await e.mkdir(s,{recursive:!0}),await e.writeFile(o,i)}async function ge(e,t,n,r){let i=0;for(let a of t){let t=me(a.path,n);t&&(await he(e,r,t,a.bytes),i++)}return i}async function _e(e,t){await e.exists(t)&&await e.rm(t,{recursive:!0})}async function ve(e,t){let n=a(D,t);if(await e.exists(n))throw Error(`Skill "${t}" already exists at ${n}.`);return n}async function ye(e,t){fe(t);let n=se(await pe(t)),r=ce(n),i=de(t.name,r.path);oe(i);let a=await ve(e,i),o=ue(i),s=$(r);await e.mkdir(o,{recursive:!0});try{let t=await ge(e,n,s,o);return await e.rename(o,a),{skillName:i,destinationPath:a,fileCount:t}}catch(t){throw await _e(e,o),t}}var be=e({MAX_SKILL_ARCHIVE_SIZE_BYTES:()=>52428800,SKILLS_DIR:()=>`skills`,SKILL_ARCHIVE_EXTENSION:()=>E,SKILL_FILE:()=>O,WORKSPACE_SKILLS_PATH:()=>D,discoverSkillCandidates:()=>F,discoverSkills:()=>J,getSkillInfo:()=>Y,installSkillFromDrop:()=>ye,readSkillInstructions:()=>X,resolveSkillNameCollisions:()=>z});export{g as a,T as i,J as n,h as o,b as r,_ as s,be as t};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
function e(){return{version:`6.154.5`,releasedAt:`2026-09-15T10:26:31Z`,buildId:`6.154.5-mu2j1goz`}}let t=null;function n(e){t=e}function r(){return t}export{e as n,n as r,r as t};
|
|
@@ -1,3 +0,0 @@
|
|
|
1
|
-
import{t as e}from"./logger-LESFN7Hj.js";import{n as t,r as n}from"./path-utils-DNJG-zQf.js";import{n as r,r as i}from"./virtual-device-paths-CS5o4QVz.js";const a=e(`sudo:sudoers`),o=`/etc/sudoers`,s=`/etc/sudoers.d`,c=`/etc/APPROVALS.md`,l=/^\/scoops\/[^/]+\/etc\/sudoers$/;function u(e){return`/scoops/${e}/etc/sudoers`}function d(e,t){return e===`no-match`?t===`require-approval`?`require-approval`:`no-match`:e}function f(){return{cmnd:[],read:[],write:[],export:[]}}function p(e){return`.+^$()[]|\\{}`.includes(e)?`\\${e}`:e}function m(e){let t=``,n=0;for(;n<e.length;){let r=e[n];r===`*`?(t+=`.*`,n+=e[n+1]===`*`?2:1):r===`?`?(t+=`.`,n+=1):(t+=p(r),n+=1)}return RegExp(`^${t}$`,`s`)}function h(e){return e.split(/\r?\n/,1)[0]?.trim()??``}const g=new Set([`Cmnd`,`Read`,`Write`,`Export`]);function _(e){switch(e){case`read`:return`Read`;case`write`:return`Write`;case`export`:return`Export`;default:return`Cmnd`}}function v(e){let t=e.trim(),n=!1,r=t.search(/\s/);(r===-1?t:t.slice(0,r))===`NOPASSWD`&&(n=!0,t=r===-1?``:t.slice(r).trimStart());let i=t.search(/\s/),a=i===-1?t:t.slice(0,i);if(!g.has(a))return null;let o=i===-1?``:t.slice(i).trim();return o?{directive:a,nopasswd:n,pattern:o}:null}function y(e){let t=f();try{if(typeof e!=`string`)return t;for(let r of e.split(`
|
|
2
|
-
`)){let e=r.trim();if(!e||e.startsWith(`#`))continue;let i=v(e);if(!i){a.warn(`Skipping unrecognized sudoers line`,{line:e});continue}let o=i.directive===`Cmnd`||i.directive===`Export`?m:n,s={pattern:i.pattern,nopasswd:i.nopasswd,regex:o(i.pattern)};i.directive===`Cmnd`?t.cmnd.push(s):i.directive===`Read`?t.read.push(s):i.directive===`Export`?t.export.push(s):t.write.push(s)}return t}catch(e){return a.error(`Failed to parse sudoers; falling back to self-protection only`,{err:e}),f()}}const b=[`NOPASSWD Read /tmp`,`NOPASSWD Read /tmp/**`,`NOPASSWD Write /tmp`,`NOPASSWD Write /tmp/**`].join(`
|
|
3
|
-
`);let x=null;function S(){return x??=y(b),x}function C(...e){let t=f();for(let n of e)n&&(t.cmnd.push(...n.cmnd),t.read.push(...n.read),t.write.push(...n.write),t.export.push(...n.export??[]));return t}function w(e,t){let n=!1;for(let r of e)if(r.regex.test(t)){if(r.nopasswd)return`nopasswd-allow`;n=!0}return n?`require-approval`:`no-match`}function T(e,t){return w(e.export??[],t)===`nopasswd-allow`?`nopasswd-allow`:`require-approval`}function E(e,t){return w(e.cmnd,t.trim())}function D(e){return e===`/etc/sudoers`||e===`/etc/APPROVALS.md`||e===`/etc/sudoers.d`||e.startsWith(`/etc/sudoers.d/`)||l.test(e)||e===`/etc/slicc/layouts`||e.startsWith(`/etc/slicc/layouts/`)}function O(e,n,a,o){let s=t(a);if(n===`write`){if(D(s))return`require-approval`;if(o?.isContentWrite&&i(s))return`nopasswd-allow`}return r(s)?`nopasswd-allow`:w(n===`read`?e.read:e.write,s)}export{S as a,f as c,O as d,C as f,u as h,d as i,E as l,h as m,s as n,m as o,y as p,o as r,_ as s,c as t,T as u};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{n as e}from"./wc-onboarding-sry3pJ3v.js";export{e as hasOnboardingFinalLickInHistory};
|