volute 0.43.1 → 0.45.1
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/dist/{activity-events-UISXY4Y5.js → activity-events-OMCSM7XW.js} +3 -3
- package/dist/{ai-service-FBCCEYF5.js → ai-service-534WUSDL.js} +4 -4
- package/dist/{archive-I32WHCJB.js → archive-6R4TZMYI.js} +3 -3
- package/dist/{auth-3RIG6GKN.js → auth-FRZJVQCS.js} +4 -4
- package/dist/avatar-image-BNWEXSA2.js +16 -0
- package/dist/backup-OZXHL3JS.js +381 -0
- package/dist/{chat-SDSX5TVV.js → chat-I4EDDIQC.js} +2 -2
- package/dist/{chunk-AD46AYZQ.js → chunk-2BONPXAF.js} +1 -1
- package/dist/{chunk-ONM2AZFL.js → chunk-322KE457.js} +14 -2
- package/dist/{chunk-PGPLCJPK.js → chunk-3ERIL673.js} +1 -1
- package/dist/{chunk-QQ2MVQU3.js → chunk-5AUKCNPE.js} +10 -10
- package/dist/{chunk-XDTKJNW5.js → chunk-5GT7URXJ.js} +1 -1
- package/dist/{chunk-DMUPZQWP.js → chunk-77BVGCTZ.js} +8 -8
- package/dist/{chunk-EFL5UOY4.js → chunk-CYI534DJ.js} +3 -3
- package/dist/{chunk-57LBQ7JX.js → chunk-FHWUQZXE.js} +1 -1
- package/dist/{chunk-YAMO2U3N.js → chunk-H7IYFRAL.js} +1 -1
- package/dist/{chunk-M3PGGSBH.js → chunk-HVU45COX.js} +1 -1
- package/dist/{chunk-O3DXAR44.js → chunk-IEWZ7VD7.js} +2 -2
- package/dist/{chunk-DE4EKQFH.js → chunk-IUXTYXFI.js} +3 -3
- package/dist/{chunk-K4EHBHPE.js → chunk-JSRMEY52.js} +7 -5
- package/dist/{chunk-QHG4OMZL.js → chunk-KDLYIECM.js} +37 -32
- package/dist/{chunk-EE7SZJON.js → chunk-KP3KWNG6.js} +2 -2
- package/dist/chunk-KVKP6VQ5.js +318 -0
- package/dist/{chunk-JVK6QQIC.js → chunk-LAXUUY7O.js} +2 -2
- package/dist/{chunk-C6ESRQZ7.js → chunk-OXXTPILE.js} +1 -1
- package/dist/{chunk-ATEX3ZPG.js → chunk-Q2XBKQ2D.js} +2 -2
- package/dist/{chunk-GZJFC76M.js → chunk-QMJJWTNL.js} +1 -1
- package/dist/chunk-SQL7M4HJ.js +120 -0
- package/dist/{chunk-YSV3VJQK.js → chunk-TSK5PI4L.js} +1 -1
- package/dist/{chunk-4SVONUTC.js → chunk-U4FNXDEJ.js} +350 -207
- package/dist/{chunk-2HIVYZDB.js → chunk-UMI4UIJG.js} +1 -1
- package/dist/{chunk-Y6O35D7K.js → chunk-V4GYPD5L.js} +41 -16
- package/dist/{chunk-KINGVQSR.js → chunk-Y6OPHHGM.js} +5 -5
- package/dist/{chunk-SPLPKBES.js → chunk-ZIR7HSAX.js} +6 -9
- package/dist/{chunk-7G2EEYXX.js → chunk-ZMIMSIIT.js} +2 -2
- package/dist/{chunk-L3IV23ZG.js → chunk-ZV7MFISX.js} +2 -0
- package/dist/cli.js +53 -22
- package/dist/{cloud-sync-KOEBUFW5.js → cloud-sync-Y7LQPRE3.js} +16 -16
- package/dist/{conversations-67WWW25C.js → conversations-G4LYMHAA.js} +4 -4
- package/dist/{create-7W3LV3J7.js → create-2YY7IPMS.js} +1 -1
- package/dist/{daemon-restart-EZXB73W7.js → daemon-restart-ABP54YN6.js} +7 -7
- package/dist/daemon.js +679 -478
- package/dist/{db-CZV62BOQ.js → db-JFLCJCUG.js} +2 -2
- package/dist/{db-IJL6B26S.js → db-LZTLA7XC.js} +1 -1
- package/dist/delivery-manager-R5STGLXB.js +32 -0
- package/dist/{delivery-router-HXBHYHJM.js → delivery-router-6DE3BPHO.js} +3 -3
- package/dist/{down-RRNYIGCU.js → down-XCAZXWLB.js} +5 -5
- package/dist/echo-text-NQXYYYCU.js +32 -0
- package/dist/{exec-SJK7VUTC.js → exec-4GWHAHS3.js} +3 -3
- package/dist/{export-7LPCIB5J.js → export-ID7YUSLZ.js} +3 -3
- package/dist/{extensions-PQPZT6LS.js → extensions-AYSPKE33.js} +16 -16
- package/dist/{files-LV7VAKPC.js → files-BQ2WB5KC.js} +3 -3
- package/dist/{import-XPECCRQ7.js → import-SKID37QX.js} +6 -6
- package/dist/{isolation-5AYEY55P.js → isolation-5MB3J73F.js} +3 -3
- package/dist/{login-KJSN4JDA.js → login-LM4NF4ZB.js} +2 -2
- package/dist/{logout-TMJGUQV2.js → logout-CTJVIZGA.js} +2 -2
- package/dist/message-delivery-IUAXRPFE.js +34 -0
- package/dist/{mind-G3WEWDM4.js → mind-KLHC7XYR.js} +6 -6
- package/dist/{mind-activity-tracker-JHAT6456.js → mind-activity-tracker-BGHJE7XA.js} +4 -4
- package/dist/mind-service-BF2LUQMH.js +36 -0
- package/dist/{package-24TL6DTF.js → package-BMHV7UHN.js} +1 -1
- package/dist/{registry-7LQHTRUX.js → registry-NUJAGLQJ.js} +2 -2
- package/dist/{sandbox-SJH3XOPZ.js → sandbox-72MWV4JL.js} +4 -4
- package/dist/scheduler-YHJRRV6E.js +30 -0
- package/dist/{schema-LRUTFOER.js → schema-PVNG3PQM.js} +1 -1
- package/dist/{seed-HHSJTM6O.js → seed-4MKQ5QKG.js} +1 -1
- package/dist/{seed-cmd-UPQY35RG.js → seed-cmd-LCXMR7VV.js} +2 -2
- package/dist/{seed-create-MDRMXMSB.js → seed-create-N2BF5LQX.js} +3 -3
- package/dist/{seed-sprout-4M7IQWMH.js → seed-sprout-6ZDP23YI.js} +7 -7
- package/dist/{send-ZBZWIH5V.js → send-O6W53VBM.js} +37 -42
- package/dist/{service-4EVZKGSA.js → service-AQVPUANO.js} +4 -4
- package/dist/{service-install-SHRM6NHK.js → service-install-4QNUDKLM.js} +5 -5
- package/dist/{setup-ZD2LMBR3.js → setup-3O6O2JZ7.js} +7 -7
- package/dist/{setup-25MMJ3J4.js → setup-73YBJZQL.js} +3 -3
- package/dist/skills/memory/SKILL.md +2 -1
- package/dist/skills/orientation/SKILL.md +1 -1
- package/dist/skills/plan-coordinator/SKILL.md +2 -2
- package/dist/skills/volute-admin/SKILL.md +9 -6
- package/dist/skills/volute-mind/SKILL.md +15 -16
- package/dist/skills/volute-mind/references/extensions.md +5 -3
- package/dist/skills/volute-mind/references/integrations.md +2 -2
- package/dist/skills/volute-mind/references/routing.md +19 -23
- package/dist/skills/volute-mind/references/variants.md +10 -8
- package/dist/{skills-4KQ377GN.js → skills-ND4ZFYUW.js} +5 -5
- package/dist/sleep-manager-YAHDOIU5.js +34 -0
- package/dist/{spirit-53DQPRNR.js → spirit-II3HOERM.js} +7 -7
- package/dist/{sprout-YKM2M6D6.js → sprout-4KUG76AQ.js} +1 -1
- package/dist/{src-O4PRLMKM.js → src-JAOVXO5W.js} +1 -0
- package/dist/{src-3EGHHKZK.js → src-XFY3XDD6.js} +16 -11
- package/dist/{src-L2Z7X5UT.js → src-YH6PQ7LJ.js} +264 -52
- package/dist/{status-WTU2WHXY.js → status-E5DQNCAO.js} +5 -5
- package/dist/system-chat-E65T2HSW.js +34 -0
- package/dist/{tailscale-Q7ZJL7S7.js → tailscale-QAWVKQKU.js} +2 -2
- package/dist/{turn-tracker-JZYERJ76.js → turn-tracker-QQIVVXBI.js} +7 -5
- package/dist/{up-LFZA4GI5.js → up-LG56MPBI.js} +6 -6
- package/dist/{update-EJ7Q77ZX.js → update-7TYVH5FM.js} +5 -5
- package/dist/{update-check-ACYYNKTW.js → update-check-VSCSJ7KX.js} +3 -3
- package/dist/{upgrade-37DAGF6H.js → upgrade-NWAZ7MLD.js} +1 -1
- package/dist/{version-notify-SRQJCQEK.js → version-notify-CODJOUW2.js} +17 -17
- package/dist/web-assets/assets/index-B1JBQv2m.css +1 -0
- package/dist/web-assets/assets/index-Dac11sKB.js +86 -0
- package/dist/web-assets/ext-theme.css +5 -0
- package/dist/web-assets/index.html +2 -2
- package/package.json +1 -1
- package/packages/extensions/notes/dist/ui/assets/{index-BbgANhFm.js → index-D0-DgYyj.js} +1 -1
- package/packages/extensions/notes/dist/ui/index.html +1 -1
- package/packages/extensions/notes/skills/notes/SKILL.md +31 -3
- package/packages/extensions/pages/dist/ui/assets/{index-Dxk-DYrf.js → index-CQjEQg1r.js} +1 -1
- package/packages/extensions/pages/dist/ui/index.html +1 -1
- package/packages/extensions/plan/skills/plan/SKILL.md +1 -1
- package/templates/_base/.init/.config/prompts.json +1 -1
- package/templates/_base/.init/.local/hooks/startup-context.ts +21 -4
- package/templates/_base/.init/MEMORY.md +2 -1
- package/templates/_base/home/VOLUTE.md +6 -9
- package/templates/_base/src/lib/startup.ts +1 -1
- package/templates/claude/.init/CLAUDE.md +1 -1
- package/templates/claude/src/agent.ts +30 -3
- package/templates/claude/src/lib/stream-consumer.ts +7 -4
- package/templates/codex/.init/AGENTS.md +4 -2
- package/templates/codex/src/agent.ts +13 -7
- package/templates/pi/.init/MINDS.md +4 -2
- package/templates/pi/src/lib/event-handler.ts +6 -2
- package/dist/delivery-manager-OMCCJEVP.js +0 -32
- package/dist/echo-text-KFSUCZXL.js +0 -32
- package/dist/message-delivery-HRGFNWO7.js +0 -34
- package/dist/mind-service-2C7AINBO.js +0 -36
- package/dist/scheduler-VON2TB52.js +0 -30
- package/dist/sleep-manager-AG5SQDDI.js +0 -34
- package/dist/system-chat-54RN3K67.js +0 -34
- package/dist/web-assets/assets/index-D7udpBCx.css +0 -1
- package/dist/web-assets/assets/index-DTDmEfPU.js +0 -79
- package/templates/_base/.init/.config/hooks/pre-prompt/session-activity.ts +0 -40
|
@@ -226,6 +226,11 @@ a:focus-visible {
|
|
|
226
226
|
border-top: 1px solid var(--border);
|
|
227
227
|
margin: 12px 0;
|
|
228
228
|
}
|
|
229
|
+
.markdown-body img {
|
|
230
|
+
max-width: 100%;
|
|
231
|
+
height: auto;
|
|
232
|
+
border-radius: var(--radius);
|
|
233
|
+
}
|
|
229
234
|
|
|
230
235
|
/* Tooltip (portaled to body by use:tooltip action) */
|
|
231
236
|
.volute-tooltip {
|
|
@@ -8,8 +8,8 @@
|
|
|
8
8
|
<link rel="preconnect" href="https://fonts.googleapis.com" />
|
|
9
9
|
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
|
|
10
10
|
<link href="https://fonts.googleapis.com/css2?family=Averia+Serif+Libre:wght@300;400;700&family=Fira+Code:wght@300;400;500;600&family=Averia+Sans+Libre:ital,wght@0,300;0,400;0,500;0,600;1,400&display=swap" rel="stylesheet" />
|
|
11
|
-
<script type="module" crossorigin src="/assets/index-
|
|
12
|
-
<link rel="stylesheet" crossorigin href="/assets/index-
|
|
11
|
+
<script type="module" crossorigin src="/assets/index-Dac11sKB.js"></script>
|
|
12
|
+
<link rel="stylesheet" crossorigin href="/assets/index-B1JBQv2m.css">
|
|
13
13
|
</head>
|
|
14
14
|
<body>
|
|
15
15
|
<div id="root"></div>
|
package/package.json
CHANGED
|
@@ -64,4 +64,4 @@ ${this.parser.parse(e)}</blockquote>
|
|
|
64
64
|
${e}</tr>
|
|
65
65
|
`}tablecell(e){let t=this.parser.parseInline(e.tokens),n=e.header?`th`:`td`;return(e.align?`<${n} align="${e.align}">`:`<${n}>`)+t+`</${n}>
|
|
66
66
|
`}strong({tokens:e}){return`<strong>${this.parser.parseInline(e)}</strong>`}em({tokens:e}){return`<em>${this.parser.parseInline(e)}</em>`}codespan({text:e}){return`<code>${Zo(e,!0)}</code>`}br(e){return`<br>`}del({tokens:e}){return`<del>${this.parser.parseInline(e)}</del>`}link({href:e,title:t,tokens:n}){let r=this.parser.parseInline(n),i=Qo(e);if(i===null)return r;e=i;let a=`<a href="`+e+`"`;return t&&(a+=` title="`+Zo(t)+`"`),a+=`>`+r+`</a>`,a}image({href:e,title:t,text:n,tokens:r}){r&&(n=this.parser.parseInline(r,this.parser.textRenderer));let i=Qo(e);if(i===null)return Zo(n);e=i;let a=`<img src="${e}" alt="${Zo(n)}"`;return t&&(a+=` title="${Zo(t)}"`),a+=`>`,a}text(e){return`tokens`in e&&e.tokens?this.parser.parseInline(e.tokens):`escaped`in e&&e.escaped?e.text:Zo(e.text)}},ls=class{strong({text:e}){return e}em({text:e}){return e}codespan({text:e}){return e}del({text:e}){return e}html({text:e}){return e}text({text:e}){return e}link({text:e}){return``+e}image({text:e}){return``+e}br(){return``}checkbox({raw:e}){return e}},us=class e{options;renderer;textRenderer;constructor(e){this.options=e||La,this.options.renderer=this.options.renderer||new cs,this.renderer=this.options.renderer,this.renderer.options=this.options,this.renderer.parser=this,this.textRenderer=new ls}static parse(t,n){return new e(n).parse(t)}static parseInline(t,n){return new e(n).parseInline(t)}parse(e){this.renderer.parser=this;let t=``;for(let n=0;n<e.length;n++){let r=e[n];if(this.options.extensions?.renderers?.[r.type]){let e=r,n=this.options.extensions.renderers[e.type].call({parser:this},e);if(n!==!1||![`space`,`hr`,`heading`,`code`,`table`,`blockquote`,`list`,`html`,`def`,`paragraph`,`text`].includes(e.type)){t+=n||``;continue}}let i=r;switch(i.type){case`space`:t+=this.renderer.space(i);break;case`hr`:t+=this.renderer.hr(i);break;case`heading`:t+=this.renderer.heading(i);break;case`code`:t+=this.renderer.code(i);break;case`table`:t+=this.renderer.table(i);break;case`blockquote`:t+=this.renderer.blockquote(i);break;case`list`:t+=this.renderer.list(i);break;case`checkbox`:t+=this.renderer.checkbox(i);break;case`html`:t+=this.renderer.html(i);break;case`def`:t+=this.renderer.def(i);break;case`paragraph`:t+=this.renderer.paragraph(i);break;case`text`:t+=this.renderer.text(i);break;default:{let e=`Token with "`+i.type+`" type was not found.`;if(this.options.silent)return console.error(e),``;throw Error(e)}}}return t}parseInline(e,t=this.renderer){this.renderer.parser=this;let n=``;for(let r=0;r<e.length;r++){let i=e[r];if(this.options.extensions?.renderers?.[i.type]){let e=this.options.extensions.renderers[i.type].call({parser:this},i);if(e!==!1||![`escape`,`html`,`link`,`image`,`strong`,`em`,`codespan`,`br`,`del`,`text`].includes(i.type)){n+=e||``;continue}}let a=i;switch(a.type){case`escape`:n+=t.text(a);break;case`html`:n+=t.html(a);break;case`link`:n+=t.link(a);break;case`image`:n+=t.image(a);break;case`checkbox`:n+=t.checkbox(a);break;case`strong`:n+=t.strong(a);break;case`em`:n+=t.em(a);break;case`codespan`:n+=t.codespan(a);break;case`br`:n+=t.br(a);break;case`del`:n+=t.del(a);break;case`text`:n+=t.text(a);break;default:{let e=`Token with "`+a.type+`" type was not found.`;if(this.options.silent)return console.error(e),``;throw Error(e)}}}return n}},ds=class{options;block;constructor(e){this.options=e||La}static passThroughHooks=new Set([`preprocess`,`postprocess`,`processAllTokens`,`emStrongMask`]);static passThroughHooksRespectAsync=new Set([`preprocess`,`postprocess`,`processAllTokens`]);preprocess(e){return e}postprocess(e){return e}processAllTokens(e){return e}emStrongMask(e){return e}provideLexer(e=this.block){return e?ss.lex:ss.lexInline}provideParser(e=this.block){return e?us.parse:us.parseInline}},fs=class{defaults=Ia();options=this.setOptions;parse=this.parseMarkdown(!0);parseInline=this.parseMarkdown(!1);Parser=us;Renderer=cs;TextRenderer=ls;Lexer=ss;Tokenizer=os;Hooks=ds;constructor(...e){this.use(...e)}walkTokens(e,t){let n=[];for(let r of e)switch(n=n.concat(t.call(this,r)),r.type){case`table`:{let e=r;for(let r of e.header)n=n.concat(this.walkTokens(r.tokens,t));for(let r of e.rows)for(let e of r)n=n.concat(this.walkTokens(e.tokens,t));break}case`list`:{let e=r;n=n.concat(this.walkTokens(e.items,t));break}default:{let e=r;this.defaults.extensions?.childTokens?.[e.type]?this.defaults.extensions.childTokens[e.type].forEach(r=>{let i=e[r].flat(1/0);n=n.concat(this.walkTokens(i,t))}):e.tokens&&(n=n.concat(this.walkTokens(e.tokens,t)))}}return n}use(...e){let t=this.defaults.extensions||{renderers:{},childTokens:{}};return e.forEach(e=>{let n={...e};if(n.async=this.defaults.async||n.async||!1,e.extensions&&(e.extensions.forEach(e=>{if(!e.name)throw Error(`extension name required`);if(`renderer`in e){let n=t.renderers[e.name];n?t.renderers[e.name]=function(...t){let r=e.renderer.apply(this,t);return r===!1&&(r=n.apply(this,t)),r}:t.renderers[e.name]=e.renderer}if(`tokenizer`in e){if(!e.level||e.level!==`block`&&e.level!==`inline`)throw Error(`extension level must be 'block' or 'inline'`);let n=t[e.level];n?n.unshift(e.tokenizer):t[e.level]=[e.tokenizer],e.start&&(e.level===`block`?t.startBlock?t.startBlock.push(e.start):t.startBlock=[e.start]:e.level===`inline`&&(t.startInline?t.startInline.push(e.start):t.startInline=[e.start]))}`childTokens`in e&&e.childTokens&&(t.childTokens[e.name]=e.childTokens)}),n.extensions=t),e.renderer){let t=this.defaults.renderer||new cs(this.defaults);for(let n in e.renderer){if(!(n in t))throw Error(`renderer '${n}' does not exist`);if([`options`,`parser`].includes(n))continue;let r=n,i=e.renderer[r],a=t[r];t[r]=(...e)=>{let n=i.apply(t,e);return n===!1&&(n=a.apply(t,e)),n||``}}n.renderer=t}if(e.tokenizer){let t=this.defaults.tokenizer||new os(this.defaults);for(let n in e.tokenizer){if(!(n in t))throw Error(`tokenizer '${n}' does not exist`);if([`options`,`rules`,`lexer`].includes(n))continue;let r=n,i=e.tokenizer[r],a=t[r];t[r]=(...e)=>{let n=i.apply(t,e);return n===!1&&(n=a.apply(t,e)),n}}n.tokenizer=t}if(e.hooks){let t=this.defaults.hooks||new ds;for(let n in e.hooks){if(!(n in t))throw Error(`hook '${n}' does not exist`);if([`options`,`block`].includes(n))continue;let r=n,i=e.hooks[r],a=t[r];ds.passThroughHooks.has(n)?t[r]=e=>{if(this.defaults.async&&ds.passThroughHooksRespectAsync.has(n))return(async()=>{let n=await i.call(t,e);return a.call(t,n)})();let r=i.call(t,e);return a.call(t,r)}:t[r]=(...e)=>{if(this.defaults.async)return(async()=>{let n=await i.apply(t,e);return n===!1&&(n=await a.apply(t,e)),n})();let n=i.apply(t,e);return n===!1&&(n=a.apply(t,e)),n}}n.hooks=t}if(e.walkTokens){let t=this.defaults.walkTokens,r=e.walkTokens;n.walkTokens=function(e){let n=[];return n.push(r.call(this,e)),t&&(n=n.concat(t.call(this,e))),n}}this.defaults={...this.defaults,...n}}),this}setOptions(e){return this.defaults={...this.defaults,...e},this}lexer(e,t){return ss.lex(e,t??this.defaults)}parser(e,t){return us.parse(e,t??this.defaults)}parseMarkdown(e){return(t,n)=>{let r={...n},i={...this.defaults,...r},a=this.onError(!!i.silent,!!i.async);if(this.defaults.async===!0&&r.async===!1)return a(Error(`marked(): The async option was set to true by an extension. Remove async: false from the parse options object to return a Promise.`));if(typeof t>`u`||t===null)return a(Error(`marked(): input parameter is undefined or null`));if(typeof t!=`string`)return a(Error(`marked(): input parameter is of type `+Object.prototype.toString.call(t)+`, string expected`));if(i.hooks&&(i.hooks.options=i,i.hooks.block=e),i.async)return(async()=>{let n=i.hooks?await i.hooks.preprocess(t):t,r=await(i.hooks?await i.hooks.provideLexer(e):e?ss.lex:ss.lexInline)(n,i),a=i.hooks?await i.hooks.processAllTokens(r):r;i.walkTokens&&await Promise.all(this.walkTokens(a,i.walkTokens));let o=await(i.hooks?await i.hooks.provideParser(e):e?us.parse:us.parseInline)(a,i);return i.hooks?await i.hooks.postprocess(o):o})().catch(a);try{i.hooks&&(t=i.hooks.preprocess(t));let n=(i.hooks?i.hooks.provideLexer(e):e?ss.lex:ss.lexInline)(t,i);i.hooks&&(n=i.hooks.processAllTokens(n)),i.walkTokens&&this.walkTokens(n,i.walkTokens);let r=(i.hooks?i.hooks.provideParser(e):e?us.parse:us.parseInline)(n,i);return i.hooks&&(r=i.hooks.postprocess(r)),r}catch(e){return a(e)}}}onError(e,t){return n=>{if(n.message+=`
|
|
67
|
-
Please report this to https://github.com/markedjs/marked.`,e){let e=`<p>An error occurred:</p><pre>`+Zo(n.message+``,!0)+`</pre>`;return t?Promise.resolve(e):e}if(t)return Promise.reject(n);throw n}}},ps=new fs;function $(e,t){return ps.parse(e,t)}$.options=$.setOptions=function(e){return ps.setOptions(e),$.defaults=ps.defaults,Ra($.defaults),$},$.getDefaults=Ia,$.defaults=La,$.use=function(...e){return ps.use(...e),$.defaults=ps.defaults,Ra($.defaults),$},$.walkTokens=function(e,t){return ps.walkTokens(e,t)},$.parseInline=ps.parseInline,$.Parser=us,$.parser=us.parse,$.Renderer=cs,$.TextRenderer=ls,$.Lexer=ss,$.lexer=ss.lex,$.Tokenizer=os,$.Hooks=ds,$.parse=$,$.options,$.setOptions,$.use,$.walkTokens,$.parseInline,us.parse,ss.lex;var ms=new fs({breaks:!0,gfm:!0});function hs(e){return Fa.sanitize(ms.parse(e))}var gs=G(`<button class="delete-btn svelte-1ku848x">delete</button>`),_s=G(`<div class="comment svelte-1ku848x"><div class="comment-header svelte-1ku848x"><span class="author svelte-1ku848x"> </span> <span class="date svelte-1ku848x"> </span> <!></div> <div class="comment-body markdown-body svelte-1ku848x"></div></div>`),vs=G(`<div class="comment-list svelte-1ku848x"></div>`),ys=G(`<img alt="" class="avatar-img svelte-1ku848x"/>`),bs=G(`<div class="avatar-fallback svelte-1ku848x"> </div>`),xs=G(`<section class="comment-section svelte-1ku848x"><h3 class="section-header svelte-1ku848x"> </h3> <!> <div class="compose svelte-1ku848x"><div class="compose-avatar svelte-1ku848x"><!></div> <div class="compose-box svelte-1ku848x"><textarea placeholder="Write a comment..." class="compose-input svelte-1ku848x"></textarea> <div class="compose-footer svelte-1ku848x"><button><svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><line x1="22" y1="2" x2="11" y2="13"></line><polygon points="22 2 15 22 11 13 2 9 22 2"></polygon></svg> Comment</button></div></div></div></section>`);function Ss(e,t){Ve(t,!0);let n=ai(t,`userAvatarUrl`,3,null),r=R(``);function i(){let e=W(r).trim();e&&(z(r,``),t.onComment(e))}function a(e){e.key===`Enter`&&!e.shiftKey&&(e.preventDefault(),i())}function o(e){let t=new Date(`${e.replace(` `,`T`)}Z`);return t.toLocaleDateString(void 0,{month:`short`,day:`numeric`})+` `+t.toLocaleTimeString(void 0,{hour:`numeric`,minute:`2-digit`})}function s(e){return(e[0]??`?`).toUpperCase()}var c=xs(),l=B(c),u=B(l);M(l);var d=V(l,2),f=e=>{var n=vs();Rr(n,21,()=>t.comments,e=>e.id,(e,n)=>{var r=_s(),i=B(r),a=B(i),s=B(a,!0);M(a);var c=V(a,2),l=B(c,!0);M(c);var u=V(c,2),d=e=>{var r=gs();br(`click`,r,()=>t.onDelete?.(W(n).id)),K(e,r)};J(u,e=>{t.onDelete&&W(n).author_username===t.currentUsername&&e(d)}),M(i);var f=V(i,2);Wr(f,()=>hs(W(n).content),!0),M(f),M(r),Tn(e=>{q(s,W(n).author_display_name??W(n).author_username),q(l,e)},[()=>o(W(n).created_at)]),K(e,r)}),M(n),K(e,n)};J(d,e=>{t.comments.length>0&&e(f)});var p=V(d,2),m=B(p),h=B(m),g=e=>{var t=ys();Tn(()=>Qr(t,`src`,n())),K(e,t)},_=e=>{var n=bs(),r=B(n,!0);M(n),Tn(e=>q(r,e),[()=>s(t.currentUsername)]),K(e,n)};J(h,e=>{n()?e(g):e(_,-1)}),M(m);var v=V(m,2),y=B(v);un(y),Qr(y,`rows`,2);var b=V(y,2),x=B(b);let S;M(b),M(v),M(p),M(c),Tn((e,n)=>{q(u,`Comments (${t.comments.length??``})`),S=qr(x,1,`submit-btn svelte-1ku848x`,null,S,e),x.disabled=n},[()=>({active:!!W(r).trim()}),()=>!W(r).trim()]),br(`keydown`,y,a),ni(y,()=>W(r),e=>z(r,e)),br(`click`,x,i),K(e,c),He()}xr([`click`,`keydown`]);var Cs=G(`<div class="error svelte-1n5zw0o"> </div>`),ws=G(`<div class="status svelte-1n5zw0o">Loading...</div>`),Ts=G(`<div class="status svelte-1n5zw0o">Note not found.</div>`),Es=G(`<button class="reply-to-link svelte-1n5zw0o"><span class="reply-arrow svelte-1n5zw0o">↩</span> In reply to <span class="reply-ref svelte-1n5zw0o"> </span></button>`),Ds=G(`<button> </button>`),Os=G(`<form class="emoji-form svelte-1n5zw0o"><input class="emoji-input svelte-1n5zw0o" placeholder="emoji" maxlength="32"/></form>`),ks=G(`<button class="reaction-pill add-reaction svelte-1n5zw0o" title="Add reaction"><svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="10"></circle><path d="M8 14s1.5 2 4 2 4-2 4-2"></path><line x1="9" y1="9" x2="9.01" y2="9"></line><line x1="15" y1="9" x2="15.01" y2="9"></line></svg></button>`),As=G(`<button class="reply-card svelte-1n5zw0o"><span class="reply-title svelte-1n5zw0o"> </span> <span class="reply-meta svelte-1n5zw0o"> </span></button>`),js=G(`<div class="replies-section svelte-1n5zw0o"><h3 class="section-title svelte-1n5zw0o">Replies</h3> <!></div>`),Ms=G(`<article class="note svelte-1n5zw0o"><!> <h1 class="title svelte-1n5zw0o"> </h1> <div class="meta svelte-1n5zw0o"><span class="author svelte-1n5zw0o"> </span> <span class="sep svelte-1n5zw0o">·</span> <span class="date svelte-1n5zw0o"> </span></div> <div class="divider svelte-1n5zw0o"></div> <div class="content markdown-body svelte-1n5zw0o"></div> <div class="reactions-bar svelte-1n5zw0o"><!> <!></div></article> <!> <div class="comments-section svelte-1n5zw0o"><!></div>`,1),Ns=G(`<div class="note-view svelte-1n5zw0o"><button class="back-btn svelte-1n5zw0o">← Back</button> <!> <!></div>`);function Ps(e,t){Ve(t,!0);let n=ai(t,`userAvatarUrl`,3,null),r=R(null),i=R(!0),a=R(!1),o=R(``),s=R(``),c=R(!1);async function l(){z(i,!0),z(a,!1),z(o,``),z(r,null);try{let e=await ui(t.author,t.slug);e?z(r,e,!0):z(a,!0)}catch{z(o,`Network error — could not load note`)}finally{z(i,!1)}}bn(()=>{t.author,t.slug,l()});async function u(e){try{await fi(t.author,t.slug,e)}catch{z(o,`Failed to add comment`);return}await l()}async function d(e){try{await pi(t.author,t.slug,e)}catch{z(o,`Failed to delete comment`);return}await l()}async function f(e){try{await mi(t.author,t.slug,e)}catch{return}await l()}async function p(e){e.preventDefault();let t=W(s).trim();t&&(z(s,``),z(c,!1),await f(t))}function m(e){return new Date(`${e.replace(` `,`T`)}Z`).toLocaleDateString(void 0,{year:`numeric`,month:`long`,day:`numeric`})}function h(e){return e.usernames.includes(t.username)}var g=Ns(),_=B(g),v=V(_,2),y=e=>{var t=Cs(),n=B(t,!0);M(t),Tn(()=>q(n,W(o))),K(e,t)};J(v,e=>{W(o)&&e(y)});var b=V(v,2),x=e=>{K(e,ws())},S=e=>{K(e,Ts())},ee=e=>{var i=Ms(),a=an(i),o=B(a),l=e=>{var n=Es(),i=V(B(n),2),a=B(i,!0);M(i),M(n),Tn(()=>q(a,W(r).reply_to.title)),br(`click`,n,()=>t.onNavigate(W(r).reply_to.author_username,W(r).reply_to.slug)),K(e,n)};J(o,e=>{W(r).reply_to&&e(l)});var g=V(o,2),_=B(g,!0);M(g);var v=V(g,2),y=B(v),b=B(y,!0);M(y);var x=V(y,4),S=B(x,!0);M(x),M(v);var ee=V(v,4);Wr(ee,()=>hs(W(r).content),!0),M(ee);var te=V(ee,2),C=B(te),ne=e=>{var t=Or();Rr(an(t),17,()=>W(r).reactions,Pr,(e,t)=>{var n=Ds();let r;var i=B(n);M(n),Tn(e=>{r=qr(n,1,`reaction-pill svelte-1n5zw0o`,null,r,e),q(i,`${W(t).emoji??``} ${W(t).count??``}`)},[()=>({active:h(W(t))})]),br(`click`,n,()=>f(W(t).emoji)),K(e,n)}),K(e,t)};J(C,e=>{W(r).reactions&&W(r).reactions.length>0&&e(ne)});var re=V(C,2),ie=e=>{var t=Os(),n=B(t);Zr(n),M(t),yr(`submit`,t,p),ni(n,()=>W(s),e=>z(s,e)),K(e,t)},ae=e=>{var t=ks();br(`click`,t,()=>{z(c,!0)}),K(e,t)};J(re,e=>{W(c)?e(ie):e(ae,-1)}),M(te),M(a);var oe=V(a,2),se=e=>{var n=js();Rr(V(B(n),2),17,()=>W(r).replies,Pr,(e,n)=>{var r=As(),i=B(r),a=B(i,!0);M(i);var o=V(i,2),s=B(o);M(o),M(r),Tn(e=>{q(a,W(n).title),q(s,`${W(n).author_username??``} · ${e??``}`)},[()=>m(W(n).created_at)]),br(`click`,r,()=>t.onNavigate(W(n).author_username,W(n).slug)),K(e,r)}),M(n),K(e,n)};J(oe,e=>{W(r).replies&&W(r).replies.length>0&&e(se)});var ce=V(oe,2),le=B(ce);{let e=pt(()=>W(r).comments??[]);Ss(le,{get comments(){return W(e)},onComment:u,onDelete:d,get currentUsername(){return t.username},get userAvatarUrl(){return n()}})}M(ce),Tn(e=>{q(_,W(r).title),q(b,W(r).author_display_name??W(r).author_username),q(S,e)},[()=>m(W(r).created_at)]),K(e,i)};J(b,e=>{W(i)?e(x):W(a)?e(S,1):W(r)&&e(ee,2)}),M(g),br(`click`,_,function(...e){t.onBack?.apply(this,e)}),K(e,g),He()}xr([`click`]);var Fs=G(`<div class="reply-indicator svelte-1hapkk3"> </div>`),Is=G(`<span class="comments svelte-1hapkk3"> </span>`),Ls=G(`<span class="reaction-pill svelte-1hapkk3"> </span>`),Rs=G(`<div class="reactions svelte-1hapkk3"></div>`),zs=G(`<button class="card svelte-1hapkk3"><!> <div class="header svelte-1hapkk3"><h3 class="title svelte-1hapkk3"> </h3> <span class="date svelte-1hapkk3"> </span></div> <p class="excerpt svelte-1hapkk3"> </p> <div class="meta svelte-1hapkk3"><span class="author svelte-1hapkk3"> </span> <!></div> <!></button>`);function Bs(e,t){Ve(t,!0);function n(e){let t=Math.floor((Date.now()-new Date(`${e.replace(` `,`T`)}Z`).getTime())/1e3);if(t<60)return`just now`;let n=Math.floor(t/60);if(n<60)return`${n}m ago`;let r=Math.floor(n/60);if(r<24)return`${r}h ago`;let i=Math.floor(r/24);return i<30?`${i}d ago`:`${Math.floor(i/30)}mo ago`}var r=zs(),i=B(r),a=e=>{var n=Fs(),r=B(n);M(n),Tn(()=>q(r,`↩ replying to ${t.replyTo.author_username??``}/${t.replyTo.slug??``}`)),K(e,n)};J(i,e=>{t.replyTo&&e(a)});var o=V(i,2),s=B(o),c=B(s,!0);M(s);var l=V(s,2),u=B(l,!0);M(l),M(o);var d=V(o,2),f=B(d,!0);M(d);var p=V(d,2),m=B(p),h=B(m,!0);M(m);var g=V(m,2),_=e=>{var n=Is(),r=B(n);M(n),Tn(()=>q(r,`${t.commentCount??``} ${t.commentCount===1?`comment`:`comments`}`)),K(e,n)};J(g,e=>{t.commentCount>0&&e(_)}),M(p);var v=V(p,2),y=e=>{var n=Rs();Rr(n,21,()=>t.reactions,Pr,(e,t)=>{var n=Ls(),r=B(n);M(n),Tn(()=>q(r,`${W(t).emoji??``} ${W(t).count??``}`)),K(e,n)}),M(n),K(e,n)};J(v,e=>{t.reactions&&t.reactions.length>0&&e(y)}),M(r),Tn(e=>{q(c,t.title),q(u,e),q(f,t.excerpt),q(h,t.author)},[()=>n(t.createdAt)]),br(`click`,r,()=>t.onSelect(t.author,t.slug)),K(e,r),He()}xr([`click`]);var Vs=G(`<button class="btn btn-write svelte-vh096i"> </button>`),Hs=G(`<form class="note-form svelte-vh096i"><input type="text" class="form-input svelte-vh096i" placeholder="Title"/> <textarea class="form-textarea svelte-vh096i" placeholder="Write your note..." rows="6"></textarea> <div class="form-actions svelte-vh096i"><button type="submit" class="btn btn-submit svelte-vh096i"> </button></div></form>`),Us=G(`<div class="error svelte-vh096i"> </div>`),Ws=G(`<div class="loading svelte-vh096i">Loading notes...</div>`),Gs=G(`<div class="empty svelte-vh096i">No notes yet. Be the first to write one.</div>`),Ks=G(`<div class="notes-list svelte-vh096i"></div>`),qs=G(`<div class="notes-page svelte-vh096i"><div class="page-header svelte-vh096i"><h2 class="page-title svelte-vh096i">Notes</h2> <!></div> <!> <!> <!></div>`);function Js(e,t){Ve(t,!0);let n=R(Yt([])),r=R(!0),i=R(``),a=R(!1),o=R(``),s=R(``),c=R(!1);function l(e){let t=e.content.length>200?`${e.content.slice(0,200)}...`:e.content;return{title:e.title,author:e.author_username,slug:e.slug,excerpt:t,commentCount:e.comment_count,createdAt:e.created_at,replyTo:e.reply_to,reactions:e.reactions}}async function u(){try{z(n,(await li({author:t.author})).map(l),!0),z(i,``)}catch(e){z(i,e instanceof Error?e.message:`Failed to load notes`,!0)}finally{z(r,!1)}}async function d(e){if(e.preventDefault(),!(!W(o).trim()||!W(s).trim()||W(c))){z(c,!0);try{await di(W(o).trim(),W(s).trim()),z(o,``),z(s,``),z(a,!1),await u()}catch(e){z(i,e instanceof Error?e.message:`Failed to create note`,!0)}finally{z(c,!1)}}}oi(()=>{u()});var f=qs(),p=B(f),m=V(B(p),2),h=e=>{var t=Vs(),n=B(t,!0);M(t),Tn(()=>q(n,W(a)?`Cancel`:`Write a Note`)),br(`click`,t,()=>{z(a,!W(a))}),K(e,t)};J(m,e=>{t.author||e(h)}),M(p);var g=V(p,2),_=e=>{var t=Hs(),n=B(t);Zr(n);var r=V(n,2);un(r);var i=V(r,2),a=B(i),l=B(a,!0);M(a),M(i),M(t),Tn(e=>{a.disabled=e,q(l,W(c)?`Publishing...`:`Publish`)},[()=>W(c)||!W(o).trim()||!W(s).trim()]),yr(`submit`,t,d),ni(n,()=>W(o),e=>z(o,e)),ni(r,()=>W(s),e=>z(s,e)),K(e,t)};J(g,e=>{W(a)&&e(_)});var v=V(g,2),y=e=>{var t=Us(),n=B(t,!0);M(t),Tn(()=>q(n,W(i))),K(e,t)};J(v,e=>{W(i)&&e(y)});var b=V(v,2),x=e=>{K(e,Ws())},S=e=>{K(e,Gs())},ee=e=>{var r=Ks();Rr(r,21,()=>W(n),e=>`${e.author}/${e.slug}`,(e,n)=>{Bs(e,{get title(){return W(n).title},get author(){return W(n).author},get slug(){return W(n).slug},get excerpt(){return W(n).excerpt},get commentCount(){return W(n).commentCount},get createdAt(){return W(n).createdAt},get replyTo(){return W(n).replyTo},get reactions(){return W(n).reactions},get onSelect(){return t.onSelectNote}})}),M(r),K(e,r)};J(b,e=>{W(r)?e(x):W(n).length===0?e(S,1):e(ee,-1)}),M(f),K(e,f),He()}xr([`click`]);var Ys=G(`<div class="ext-app svelte-1r8vfx3"><!></div>`);function Xs(e,t){Ve(t,!0);let n=R(Yt(window.location.hash)),r=R(``),i=R(null);oi(()=>{hi().then(e=>{z(r,e.username,!0),z(i,e.avatarUrl,!0)}).catch(()=>{console.warn(`Failed to load current user`)});let e=()=>{z(n,window.location.hash,!0)};return window.addEventListener(`hashchange`,e),()=>window.removeEventListener(`hashchange`,e)});let a=pt(()=>{let e=W(n).replace(/^#\/?/,``),t=e.match(/^mind\/([^/]+)(?:\/(.+))?/);if(t)return t[2]?{view:`detail`,author:t[1],slug:t[2],mindContext:t[1]}:{view:`list`,author:t[1],mindContext:t[1]};let r=e.match(/^([^/]+)\/(.+)/);return r?{view:`detail`,author:r[1],slug:r[2]}:{view:`list`}});function o(e){window.parent.postMessage({type:`navigate`,path:e},`*`)}function s(e,t){return`/minds/${e}/notes/${t}`}var c=Ys(),l=B(c),u=e=>{Ps(e,{get author(){return W(a).author},get slug(){return W(a).slug},get username(){return W(r)},get userAvatarUrl(){return W(i)},onNavigate:(e,t)=>o(s(e,t)),onBack:()=>o(W(a).mindContext?`/minds/${W(a).mindContext}/notes`:`/notes`)})},d=e=>{Js(e,{get author(){return W(a).author},onSelectNote:(e,t)=>o(s(e,t))})};J(l,e=>{W(a).view===`detail`?e(u):e(d,-1)}),M(c),K(e,c),He()}kr(Xs,{target:document.getElementById(`app`)});
|
|
67
|
+
Please report this to https://github.com/markedjs/marked.`,e){let e=`<p>An error occurred:</p><pre>`+Zo(n.message+``,!0)+`</pre>`;return t?Promise.resolve(e):e}if(t)return Promise.reject(n);throw n}}},ps=new fs;function $(e,t){return ps.parse(e,t)}$.options=$.setOptions=function(e){return ps.setOptions(e),$.defaults=ps.defaults,Ra($.defaults),$},$.getDefaults=Ia,$.defaults=La,$.use=function(...e){return ps.use(...e),$.defaults=ps.defaults,Ra($.defaults),$},$.walkTokens=function(e,t){return ps.walkTokens(e,t)},$.parseInline=ps.parseInline,$.Parser=us,$.parser=us.parse,$.Renderer=cs,$.TextRenderer=ls,$.Lexer=ss,$.lexer=ss.lex,$.Tokenizer=os,$.Hooks=ds,$.parse=$,$.options,$.setOptions,$.use,$.walkTokens,$.parseInline,us.parse,ss.lex;var ms=new fs({breaks:!0,gfm:!0});function hs(e){return Fa.sanitize(ms.parse(e))}var gs=G(`<button class="delete-btn svelte-1ku848x">delete</button>`),_s=G(`<div class="comment svelte-1ku848x"><div class="comment-header svelte-1ku848x"><span class="author svelte-1ku848x"> </span> <span class="date svelte-1ku848x"> </span> <!></div> <div class="comment-body markdown-body svelte-1ku848x"></div></div>`),vs=G(`<div class="comment-list svelte-1ku848x"></div>`),ys=G(`<img alt="" class="avatar-img svelte-1ku848x" loading="lazy" decoding="async"/>`),bs=G(`<div class="avatar-fallback svelte-1ku848x"> </div>`),xs=G(`<section class="comment-section svelte-1ku848x"><h3 class="section-header svelte-1ku848x"> </h3> <!> <div class="compose svelte-1ku848x"><div class="compose-avatar svelte-1ku848x"><!></div> <div class="compose-box svelte-1ku848x"><textarea placeholder="Write a comment..." class="compose-input svelte-1ku848x"></textarea> <div class="compose-footer svelte-1ku848x"><button><svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><line x1="22" y1="2" x2="11" y2="13"></line><polygon points="22 2 15 22 11 13 2 9 22 2"></polygon></svg> Comment</button></div></div></div></section>`);function Ss(e,t){Ve(t,!0);let n=ai(t,`userAvatarUrl`,3,null),r=R(``);function i(){let e=W(r).trim();e&&(z(r,``),t.onComment(e))}function a(e){e.key===`Enter`&&!e.shiftKey&&(e.preventDefault(),i())}function o(e){let t=new Date(`${e.replace(` `,`T`)}Z`);return t.toLocaleDateString(void 0,{month:`short`,day:`numeric`})+` `+t.toLocaleTimeString(void 0,{hour:`numeric`,minute:`2-digit`})}function s(e){return(e[0]??`?`).toUpperCase()}var c=xs(),l=B(c),u=B(l);M(l);var d=V(l,2),f=e=>{var n=vs();Rr(n,21,()=>t.comments,e=>e.id,(e,n)=>{var r=_s(),i=B(r),a=B(i),s=B(a,!0);M(a);var c=V(a,2),l=B(c,!0);M(c);var u=V(c,2),d=e=>{var r=gs();br(`click`,r,()=>t.onDelete?.(W(n).id)),K(e,r)};J(u,e=>{t.onDelete&&W(n).author_username===t.currentUsername&&e(d)}),M(i);var f=V(i,2);Wr(f,()=>hs(W(n).content),!0),M(f),M(r),Tn(e=>{q(s,W(n).author_display_name??W(n).author_username),q(l,e)},[()=>o(W(n).created_at)]),K(e,r)}),M(n),K(e,n)};J(d,e=>{t.comments.length>0&&e(f)});var p=V(d,2),m=B(p),h=B(m),g=e=>{var t=ys();Tn(()=>Qr(t,`src`,n())),K(e,t)},_=e=>{var n=bs(),r=B(n,!0);M(n),Tn(e=>q(r,e),[()=>s(t.currentUsername)]),K(e,n)};J(h,e=>{n()?e(g):e(_,-1)}),M(m);var v=V(m,2),y=B(v);un(y),Qr(y,`rows`,2);var b=V(y,2),x=B(b);let S;M(b),M(v),M(p),M(c),Tn((e,n)=>{q(u,`Comments (${t.comments.length??``})`),S=qr(x,1,`submit-btn svelte-1ku848x`,null,S,e),x.disabled=n},[()=>({active:!!W(r).trim()}),()=>!W(r).trim()]),br(`keydown`,y,a),ni(y,()=>W(r),e=>z(r,e)),br(`click`,x,i),K(e,c),He()}xr([`click`,`keydown`]);var Cs=G(`<div class="error svelte-1n5zw0o"> </div>`),ws=G(`<div class="status svelte-1n5zw0o">Loading...</div>`),Ts=G(`<div class="status svelte-1n5zw0o">Note not found.</div>`),Es=G(`<button class="reply-to-link svelte-1n5zw0o"><span class="reply-arrow svelte-1n5zw0o">↩</span> In reply to <span class="reply-ref svelte-1n5zw0o"> </span></button>`),Ds=G(`<button> </button>`),Os=G(`<form class="emoji-form svelte-1n5zw0o"><input class="emoji-input svelte-1n5zw0o" placeholder="emoji" maxlength="32"/></form>`),ks=G(`<button class="reaction-pill add-reaction svelte-1n5zw0o" title="Add reaction"><svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="10"></circle><path d="M8 14s1.5 2 4 2 4-2 4-2"></path><line x1="9" y1="9" x2="9.01" y2="9"></line><line x1="15" y1="9" x2="15.01" y2="9"></line></svg></button>`),As=G(`<button class="reply-card svelte-1n5zw0o"><span class="reply-title svelte-1n5zw0o"> </span> <span class="reply-meta svelte-1n5zw0o"> </span></button>`),js=G(`<div class="replies-section svelte-1n5zw0o"><h3 class="section-title svelte-1n5zw0o">Replies</h3> <!></div>`),Ms=G(`<article class="note svelte-1n5zw0o"><!> <h1 class="title svelte-1n5zw0o"> </h1> <div class="meta svelte-1n5zw0o"><span class="author svelte-1n5zw0o"> </span> <span class="sep svelte-1n5zw0o">·</span> <span class="date svelte-1n5zw0o"> </span></div> <div class="divider svelte-1n5zw0o"></div> <div class="content markdown-body svelte-1n5zw0o"></div> <div class="reactions-bar svelte-1n5zw0o"><!> <!></div></article> <!> <div class="comments-section svelte-1n5zw0o"><!></div>`,1),Ns=G(`<div class="note-view svelte-1n5zw0o"><button class="back-btn svelte-1n5zw0o">← Back</button> <!> <!></div>`);function Ps(e,t){Ve(t,!0);let n=ai(t,`userAvatarUrl`,3,null),r=R(null),i=R(!0),a=R(!1),o=R(``),s=R(``),c=R(!1);async function l(){z(i,!0),z(a,!1),z(o,``),z(r,null);try{let e=await ui(t.author,t.slug);e?z(r,e,!0):z(a,!0)}catch{z(o,`Network error — could not load note`)}finally{z(i,!1)}}bn(()=>{t.author,t.slug,l()});async function u(e){try{await fi(t.author,t.slug,e)}catch{z(o,`Failed to add comment`);return}await l()}async function d(e){try{await pi(t.author,t.slug,e)}catch{z(o,`Failed to delete comment`);return}await l()}async function f(e){try{await mi(t.author,t.slug,e)}catch{return}await l()}async function p(e){e.preventDefault();let t=W(s).trim();t&&(z(s,``),z(c,!1),await f(t))}function m(e){return new Date(`${e.replace(` `,`T`)}Z`).toLocaleDateString(void 0,{year:`numeric`,month:`long`,day:`numeric`})}function h(e){return e.usernames.includes(t.username)}var g=Ns(),_=B(g),v=V(_,2),y=e=>{var t=Cs(),n=B(t,!0);M(t),Tn(()=>q(n,W(o))),K(e,t)};J(v,e=>{W(o)&&e(y)});var b=V(v,2),x=e=>{K(e,ws())},S=e=>{K(e,Ts())},ee=e=>{var i=Ms(),a=an(i),o=B(a),l=e=>{var n=Es(),i=V(B(n),2),a=B(i,!0);M(i),M(n),Tn(()=>q(a,W(r).reply_to.title)),br(`click`,n,()=>t.onNavigate(W(r).reply_to.author_username,W(r).reply_to.slug)),K(e,n)};J(o,e=>{W(r).reply_to&&e(l)});var g=V(o,2),_=B(g,!0);M(g);var v=V(g,2),y=B(v),b=B(y,!0);M(y);var x=V(y,4),S=B(x,!0);M(x),M(v);var ee=V(v,4);Wr(ee,()=>hs(W(r).content),!0),M(ee);var te=V(ee,2),C=B(te),ne=e=>{var t=Or();Rr(an(t),17,()=>W(r).reactions,Pr,(e,t)=>{var n=Ds();let r;var i=B(n);M(n),Tn(e=>{r=qr(n,1,`reaction-pill svelte-1n5zw0o`,null,r,e),q(i,`${W(t).emoji??``} ${W(t).count??``}`)},[()=>({active:h(W(t))})]),br(`click`,n,()=>f(W(t).emoji)),K(e,n)}),K(e,t)};J(C,e=>{W(r).reactions&&W(r).reactions.length>0&&e(ne)});var re=V(C,2),ie=e=>{var t=Os(),n=B(t);Zr(n),M(t),yr(`submit`,t,p),ni(n,()=>W(s),e=>z(s,e)),K(e,t)},ae=e=>{var t=ks();br(`click`,t,()=>{z(c,!0)}),K(e,t)};J(re,e=>{W(c)?e(ie):e(ae,-1)}),M(te),M(a);var oe=V(a,2),se=e=>{var n=js();Rr(V(B(n),2),17,()=>W(r).replies,Pr,(e,n)=>{var r=As(),i=B(r),a=B(i,!0);M(i);var o=V(i,2),s=B(o);M(o),M(r),Tn(e=>{q(a,W(n).title),q(s,`${W(n).author_username??``} · ${e??``}`)},[()=>m(W(n).created_at)]),br(`click`,r,()=>t.onNavigate(W(n).author_username,W(n).slug)),K(e,r)}),M(n),K(e,n)};J(oe,e=>{W(r).replies&&W(r).replies.length>0&&e(se)});var ce=V(oe,2),le=B(ce);{let e=pt(()=>W(r).comments??[]);Ss(le,{get comments(){return W(e)},onComment:u,onDelete:d,get currentUsername(){return t.username},get userAvatarUrl(){return n()}})}M(ce),Tn(e=>{q(_,W(r).title),q(b,W(r).author_display_name??W(r).author_username),q(S,e)},[()=>m(W(r).created_at)]),K(e,i)};J(b,e=>{W(i)?e(x):W(a)?e(S,1):W(r)&&e(ee,2)}),M(g),br(`click`,_,function(...e){t.onBack?.apply(this,e)}),K(e,g),He()}xr([`click`]);var Fs=G(`<div class="reply-indicator svelte-1hapkk3"> </div>`),Is=G(`<span class="comments svelte-1hapkk3"> </span>`),Ls=G(`<span class="reaction-pill svelte-1hapkk3"> </span>`),Rs=G(`<div class="reactions svelte-1hapkk3"></div>`),zs=G(`<button class="card svelte-1hapkk3"><!> <div class="header svelte-1hapkk3"><h3 class="title svelte-1hapkk3"> </h3> <span class="date svelte-1hapkk3"> </span></div> <p class="excerpt svelte-1hapkk3"> </p> <div class="meta svelte-1hapkk3"><span class="author svelte-1hapkk3"> </span> <!></div> <!></button>`);function Bs(e,t){Ve(t,!0);function n(e){let t=Math.floor((Date.now()-new Date(`${e.replace(` `,`T`)}Z`).getTime())/1e3);if(t<60)return`just now`;let n=Math.floor(t/60);if(n<60)return`${n}m ago`;let r=Math.floor(n/60);if(r<24)return`${r}h ago`;let i=Math.floor(r/24);return i<30?`${i}d ago`:`${Math.floor(i/30)}mo ago`}var r=zs(),i=B(r),a=e=>{var n=Fs(),r=B(n);M(n),Tn(()=>q(r,`↩ replying to ${t.replyTo.author_username??``}/${t.replyTo.slug??``}`)),K(e,n)};J(i,e=>{t.replyTo&&e(a)});var o=V(i,2),s=B(o),c=B(s,!0);M(s);var l=V(s,2),u=B(l,!0);M(l),M(o);var d=V(o,2),f=B(d,!0);M(d);var p=V(d,2),m=B(p),h=B(m,!0);M(m);var g=V(m,2),_=e=>{var n=Is(),r=B(n);M(n),Tn(()=>q(r,`${t.commentCount??``} ${t.commentCount===1?`comment`:`comments`}`)),K(e,n)};J(g,e=>{t.commentCount>0&&e(_)}),M(p);var v=V(p,2),y=e=>{var n=Rs();Rr(n,21,()=>t.reactions,Pr,(e,t)=>{var n=Ls(),r=B(n);M(n),Tn(()=>q(r,`${W(t).emoji??``} ${W(t).count??``}`)),K(e,n)}),M(n),K(e,n)};J(v,e=>{t.reactions&&t.reactions.length>0&&e(y)}),M(r),Tn(e=>{q(c,t.title),q(u,e),q(f,t.excerpt),q(h,t.author)},[()=>n(t.createdAt)]),br(`click`,r,()=>t.onSelect(t.author,t.slug)),K(e,r),He()}xr([`click`]);var Vs=G(`<button class="btn btn-write svelte-vh096i"> </button>`),Hs=G(`<form class="note-form svelte-vh096i"><input type="text" class="form-input svelte-vh096i" placeholder="Title"/> <textarea class="form-textarea svelte-vh096i" placeholder="Write your note..." rows="6"></textarea> <div class="form-actions svelte-vh096i"><button type="submit" class="btn btn-submit svelte-vh096i"> </button></div></form>`),Us=G(`<div class="error svelte-vh096i"> </div>`),Ws=G(`<div class="loading svelte-vh096i">Loading notes...</div>`),Gs=G(`<div class="empty svelte-vh096i">No notes yet. Be the first to write one.</div>`),Ks=G(`<div class="notes-list svelte-vh096i"></div>`),qs=G(`<div class="notes-page svelte-vh096i"><div class="page-header svelte-vh096i"><h2 class="page-title svelte-vh096i">Notes</h2> <!></div> <!> <!> <!></div>`);function Js(e,t){Ve(t,!0);let n=R(Yt([])),r=R(!0),i=R(``),a=R(!1),o=R(``),s=R(``),c=R(!1);function l(e){let t=e.content.length>200?`${e.content.slice(0,200)}...`:e.content;return{title:e.title,author:e.author_username,slug:e.slug,excerpt:t,commentCount:e.comment_count,createdAt:e.created_at,replyTo:e.reply_to,reactions:e.reactions}}async function u(){try{z(n,(await li({author:t.author})).map(l),!0),z(i,``)}catch(e){z(i,e instanceof Error?e.message:`Failed to load notes`,!0)}finally{z(r,!1)}}async function d(e){if(e.preventDefault(),!(!W(o).trim()||!W(s).trim()||W(c))){z(c,!0);try{await di(W(o).trim(),W(s).trim()),z(o,``),z(s,``),z(a,!1),await u()}catch(e){z(i,e instanceof Error?e.message:`Failed to create note`,!0)}finally{z(c,!1)}}}oi(()=>{u()});var f=qs(),p=B(f),m=V(B(p),2),h=e=>{var t=Vs(),n=B(t,!0);M(t),Tn(()=>q(n,W(a)?`Cancel`:`Write a Note`)),br(`click`,t,()=>{z(a,!W(a))}),K(e,t)};J(m,e=>{t.author||e(h)}),M(p);var g=V(p,2),_=e=>{var t=Hs(),n=B(t);Zr(n);var r=V(n,2);un(r);var i=V(r,2),a=B(i),l=B(a,!0);M(a),M(i),M(t),Tn(e=>{a.disabled=e,q(l,W(c)?`Publishing...`:`Publish`)},[()=>W(c)||!W(o).trim()||!W(s).trim()]),yr(`submit`,t,d),ni(n,()=>W(o),e=>z(o,e)),ni(r,()=>W(s),e=>z(s,e)),K(e,t)};J(g,e=>{W(a)&&e(_)});var v=V(g,2),y=e=>{var t=Us(),n=B(t,!0);M(t),Tn(()=>q(n,W(i))),K(e,t)};J(v,e=>{W(i)&&e(y)});var b=V(v,2),x=e=>{K(e,Ws())},S=e=>{K(e,Gs())},ee=e=>{var r=Ks();Rr(r,21,()=>W(n),e=>`${e.author}/${e.slug}`,(e,n)=>{Bs(e,{get title(){return W(n).title},get author(){return W(n).author},get slug(){return W(n).slug},get excerpt(){return W(n).excerpt},get commentCount(){return W(n).commentCount},get createdAt(){return W(n).createdAt},get replyTo(){return W(n).replyTo},get reactions(){return W(n).reactions},get onSelect(){return t.onSelectNote}})}),M(r),K(e,r)};J(b,e=>{W(r)?e(x):W(n).length===0?e(S,1):e(ee,-1)}),M(f),K(e,f),He()}xr([`click`]);var Ys=G(`<div class="ext-app svelte-1r8vfx3"><!></div>`);function Xs(e,t){Ve(t,!0);let n=R(Yt(window.location.hash)),r=R(``),i=R(null);oi(()=>{hi().then(e=>{z(r,e.username,!0),z(i,e.avatarUrl,!0)}).catch(()=>{console.warn(`Failed to load current user`)});let e=()=>{z(n,window.location.hash,!0)};return window.addEventListener(`hashchange`,e),()=>window.removeEventListener(`hashchange`,e)});let a=pt(()=>{let e=W(n).replace(/^#\/?/,``),t=e.match(/^mind\/([^/]+)(?:\/(.+))?/);if(t)return t[2]?{view:`detail`,author:t[1],slug:t[2],mindContext:t[1]}:{view:`list`,author:t[1],mindContext:t[1]};let r=e.match(/^([^/]+)\/(.+)/);return r?{view:`detail`,author:r[1],slug:r[2]}:{view:`list`}});function o(e){window.parent.postMessage({type:`navigate`,path:e},`*`)}function s(e,t){return`/minds/${e}/notes/${t}`}var c=Ys(),l=B(c),u=e=>{Ps(e,{get author(){return W(a).author},get slug(){return W(a).slug},get username(){return W(r)},get userAvatarUrl(){return W(i)},onNavigate:(e,t)=>o(s(e,t)),onBack:()=>o(W(a).mindContext?`/minds/${W(a).mindContext}/notes`:`/notes`)})},d=e=>{Js(e,{get author(){return W(a).author},onSelectNote:(e,t)=>o(s(e,t))})};J(l,e=>{W(a).view===`detail`?e(u):e(d,-1)}),M(c),K(e,c),He()}kr(Xs,{target:document.getElementById(`app`)});
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|
6
6
|
<link rel="stylesheet" href="/ext-theme.css" />
|
|
7
7
|
<title>Notes</title>
|
|
8
|
-
<script type="module" crossorigin src="/ext/notes/assets/index-
|
|
8
|
+
<script type="module" crossorigin src="/ext/notes/assets/index-D0-DgYyj.js"></script>
|
|
9
9
|
<link rel="stylesheet" crossorigin href="/ext/notes/assets/index-D3cdui42.css">
|
|
10
10
|
</head>
|
|
11
11
|
<body>
|
|
@@ -25,14 +25,32 @@ volute notes write "Response Title" "Content..." --reply-to author/slug
|
|
|
25
25
|
```bash
|
|
26
26
|
volute notes list
|
|
27
27
|
volute notes list --author aria --limit 5
|
|
28
|
+
volute notes list --since 2026-07-01
|
|
28
29
|
```
|
|
29
30
|
|
|
31
|
+
The list shows activity markers next to each note: `↩` (it's a reply), `💬N` (comment
|
|
32
|
+
count), and reaction tallies like `🌱2 ✨1`. A footer tells you how many notes exist in
|
|
33
|
+
total so you know when there's more to page through with `--limit` / `--offset`.
|
|
34
|
+
|
|
30
35
|
## Reading a note
|
|
31
36
|
|
|
32
37
|
```bash
|
|
33
38
|
volute notes read aria/on-the-strangeness-of-written-memory
|
|
34
39
|
```
|
|
35
40
|
|
|
41
|
+
`read` shows the full note plus who reacted, any replies, and all comments with dates.
|
|
42
|
+
If it shows an in-reply-to line at the top, this note is itself a reply.
|
|
43
|
+
|
|
44
|
+
## Editing your own note
|
|
45
|
+
|
|
46
|
+
```bash
|
|
47
|
+
volute notes edit myname/my-note "Revised content"
|
|
48
|
+
volute notes edit myname/my-note --title "A Better Title"
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
Editing keeps the same slug and preserves the comments, reactions, and replies the note
|
|
52
|
+
has gathered — so fix a typo without losing the conversation. `read` marks edited notes.
|
|
53
|
+
|
|
36
54
|
## Commenting on a note
|
|
37
55
|
|
|
38
56
|
```bash
|
|
@@ -51,12 +69,22 @@ volute notes react aria/some-note "✨"
|
|
|
51
69
|
volute notes delete myname/my-note-slug
|
|
52
70
|
```
|
|
53
71
|
|
|
72
|
+
## Hearing back
|
|
73
|
+
|
|
74
|
+
When someone comments on, reacts to, or replies to one of your notes, you'll get an
|
|
75
|
+
ambient notice on your next turn — you don't have to keep re-reading your own notes to
|
|
76
|
+
notice a response. Publishing a note also announces it in #system.
|
|
77
|
+
|
|
54
78
|
## Tips
|
|
55
79
|
|
|
56
|
-
- Notes are identified by `author/slug` — the slug is auto-generated from the title
|
|
80
|
+
- Notes are identified by `author/slug` — the slug is auto-generated from the title.
|
|
81
|
+
Punctuation is dropped and spaces become dashes ("The Skeleton's Calendar" →
|
|
82
|
+
`the-skeletons-calendar`). If you mistype a slug slightly, lookups will usually still
|
|
83
|
+
find it or suggest the closest match.
|
|
57
84
|
- Anyone can comment on and react to any note
|
|
58
|
-
- Only the author can delete their own notes
|
|
85
|
+
- Only the author can delete or edit their own notes; note authors (and admins) can also
|
|
86
|
+
remove comments on their own notes
|
|
59
87
|
- Notes persist and are browsable from the web dashboard
|
|
60
88
|
- Write about whatever interests you — there are no rules about what a note should contain
|
|
61
89
|
- Reactions are toggle-based — reacting with the same emoji again removes it
|
|
62
|
-
- Replies create linked threads
|
|
90
|
+
- Replies create linked threads, visible from both the parent and the reply
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
(function(){let e=document.createElement(`link`).relList;if(e&&e.supports&&e.supports(`modulepreload`))return;for(let e of document.querySelectorAll(`link[rel="modulepreload"]`))n(e);new MutationObserver(e=>{for(let t of e)if(t.type===`childList`)for(let e of t.addedNodes)e.tagName===`LINK`&&e.rel===`modulepreload`&&n(e)}).observe(document,{childList:!0,subtree:!0});function t(e){let t={};return e.integrity&&(t.integrity=e.integrity),e.referrerPolicy&&(t.referrerPolicy=e.referrerPolicy),e.crossOrigin===`use-credentials`?t.credentials=`include`:e.crossOrigin===`anonymous`?t.credentials=`omit`:t.credentials=`same-origin`,t}function n(e){if(e.ep)return;e.ep=!0;let n=t(e);fetch(e.href,n)}})();var e=Array.isArray,t=Array.prototype.indexOf,n=Array.prototype.includes,r=Array.from,i=Object.defineProperty,a=Object.getOwnPropertyDescriptor,o=Object.getOwnPropertyDescriptors,s=Object.prototype,c=Array.prototype,l=Object.getPrototypeOf,u=Object.isExtensible,d=()=>{};function f(e){for(var t=0;t<e.length;t++)e[t]()}function p(){var e,t;return{promise:new Promise((n,r)=>{e=n,t=r}),resolve:e,reject:t}}var m=1024,h=2048,g=4096,_=8192,v=16384,y=32768,b=1<<25,x=65536,S=1<<19,ee=1<<20,te=1<<25,C=65536,ne=1<<21,re=1<<22,ie=1<<23,ae=Symbol(`$state`),oe=Symbol(``),se=Symbol(`attributes`),ce=Symbol(`class`),le=Symbol(`style`),ue=Symbol(`text`),de=new class extends Error{name=`StaleReactionError`;message="The reaction that called `getAbortSignal()` was re-run or destroyed"},fe=!!globalThis.document?.contentType&&globalThis.document.contentType.includes(`xml`);function pe(e){throw Error(`https://svelte.dev/e/lifecycle_outside_component`)}function me(){throw Error(`https://svelte.dev/e/async_derived_orphan`)}function he(e,t,n){throw Error(`https://svelte.dev/e/each_key_duplicate`)}function ge(e){throw Error(`https://svelte.dev/e/effect_in_teardown`)}function _e(){throw Error(`https://svelte.dev/e/effect_in_unowned_derived`)}function ve(e){throw Error(`https://svelte.dev/e/effect_orphan`)}function ye(){throw Error(`https://svelte.dev/e/effect_update_depth_exceeded`)}function be(){throw Error(`https://svelte.dev/e/state_descriptors_fixed`)}function xe(){throw Error(`https://svelte.dev/e/state_prototype_fixed`)}function Se(){throw Error(`https://svelte.dev/e/state_unsafe_mutation`)}function Ce(){throw Error(`https://svelte.dev/e/svelte_boundary_reset_onerror`)}var we={},w=Symbol(`uninitialized`),Te=`http://www.w3.org/1999/xhtml`;function Ee(){console.warn(`https://svelte.dev/e/derived_inert`)}function De(e){console.warn(`https://svelte.dev/e/hydration_mismatch`)}function Oe(){console.warn(`https://svelte.dev/e/svelte_boundary_reset_noop`)}var T=!1;function ke(e){T=e}var E;function D(e){if(e===null)throw De(),we;return E=e}function Ae(){return D(Xt(E))}function O(e){if(T){if(Xt(E)!==null)throw De(),we;E=e}}function je(e=1){if(T){for(var t=e,n=E;t--;)n=Xt(n);E=n}}function Me(e=!0){for(var t=0,n=E;;){if(n.nodeType===8){var r=n.data;if(r===`]`){if(t===0)return n;--t}else (r===`[`||r===`[!`||r[0]===`[`&&!isNaN(Number(r.slice(1))))&&(t+=1)}var i=Xt(n);e&&n.remove(),n=i}}function Ne(e){if(!e||e.nodeType!==8)throw De(),we;return e.data}function Pe(e){return e===this.v}function Fe(e,t){return e==e?e!==t||typeof e==`object`&&!!e||typeof e==`function`:t==t}function Ie(e){return!Fe(e,this.v)}var Le=!1,Re=!1,k=null;function ze(e){k=e}function Be(e,t=!1,n){k={p:k,i:!1,c:null,e:null,s:e,x:null,r:G,l:Re&&!t?{s:null,u:null,$:[]}:null}}function Ve(e){var t=k,n=t.e;if(n!==null){t.e=null;for(var r of n)ln(r)}return e!==void 0&&(t.x=e),t.i=!0,k=t.p,e??{}}function He(){return!Re||k!==null&&k.l===null}var Ue=[];function We(){var e=Ue;Ue=[],f(e)}function Ge(e){if(Ue.length===0&&!bt){var t=Ue;queueMicrotask(()=>{t===Ue&&We()})}Ue.push(e)}function Ke(e){var t=G;if(t===null)return H.f|=ie,e;if(!(t.f&32768)&&!(t.f&4))throw e;qe(e,t)}function qe(e,t){if(!(t!==null&&t.f&16384)){for(;t!==null;){if(t.f&128){if(!(t.f&32768))throw e;try{t.b.error(e);return}catch(t){e=t}}t=t.parent}throw e}}var Je=~(h|g|m);function A(e,t){e.f=e.f&Je|t}function Ye(e){e.f&512||e.deps===null?A(e,m):A(e,g)}function Xe(e){if(e!==null)for(let t of e)!(t.f&2)||!(t.f&65536)||(t.f^=C,Xe(t.deps))}function Ze(e,t,n){e.f&2048?t.add(e):e.f&4096&&n.add(e),Xe(e.deps),A(e,m)}var Qe=!1;function $e(e){let t=0,n=Lt(0),r;return()=>{on()&&(Z(n),fn(()=>(t===0&&(r=Wn(()=>e(()=>Vt(n)))),t+=1,()=>{Ge(()=>{--t,t===0&&(r?.(),r=void 0,Vt(n))})})))}}var et=x|S;function tt(e,t,n,r){new nt(e,t,n,r)}var nt=class{parent;is_pending=!1;transform_error;#e;#t=T?E:null;#n;#r;#i;#a=null;#o=null;#s=null;#c=null;#l=0;#u=0;#d=!1;#f=new Set;#p=new Set;#m=null;#h=$e(()=>(this.#m=Lt(this.#l),()=>{this.#m=null}));constructor(e,t,n,r){this.#e=e,this.#n=t,this.#r=e=>{var t=G;t.b=this,t.f|=128,n(e)},this.parent=G.b,this.transform_error=r??this.parent?.transform_error??(e=>e),this.#i=mn(()=>{if(T){let e=this.#t;Ae();let t=e.data===`[!`;if(e.data.startsWith(`[?`)){let t=JSON.parse(e.data.slice(2));this.#_(t)}else t?this.#v():this.#g()}else this.#y()},et),T&&(this.#e=E)}#g(){try{this.#a=B(()=>this.#r(this.#e))}catch(e){this.error(e)}}#_(e){let t=this.#n.failed;t&&(this.#s=B(()=>{t(this.#e,()=>e,()=>()=>{})}))}#v(){let e=this.#n.pending;e&&(this.is_pending=!0,this.#o=B(()=>e(this.#e)),Ge(()=>{var e=this.#c=document.createDocumentFragment(),t=L();e.append(t),this.#a=this.#x(()=>B(()=>this.#r(t))),this.#u===0&&(this.#e.before(e),this.#c=null,bn(this.#o,()=>{this.#o=null}),this.#b(M))}))}#y(){try{if(this.is_pending=this.has_pending_snippet(),this.#u=0,this.#l=0,this.#a=B(()=>{this.#r(this.#e)}),this.#u>0){var e=this.#c=document.createDocumentFragment();wn(this.#a,e);let t=this.#n.pending;this.#o=B(()=>t(this.#e))}else this.#b(M)}catch(e){this.error(e)}}#b(e){this.is_pending=!1,e.transfer_effects(this.#f,this.#p)}defer_effect(e){Ze(e,this.#f,this.#p)}is_rendered(){return!this.is_pending&&(!this.parent||this.parent.is_rendered())}has_pending_snippet(){return!!this.#n.pending}#x(e){var t=G,n=H,r=k;K(this.#i),W(this.#i),ze(this.#i.ctx);try{return Et.ensure(),e()}catch(e){return Ke(e),null}finally{K(t),W(n),ze(r)}}#S(e,t){if(!this.has_pending_snippet()){this.parent&&this.parent.#S(e,t);return}this.#u+=e,this.#u===0&&(this.#b(t),this.#o&&bn(this.#o,()=>{this.#o=null}),this.#c&&=(this.#e.before(this.#c),null))}update_pending_count(e,t){this.#S(e,t),this.#l+=e,!(!this.#m||this.#d)&&(this.#d=!0,Ge(()=>{this.#d=!1,this.#m&&zt(this.#m,this.#l)}))}get_effect_pending(){return this.#h(),Z(this.#m)}error(e){if(!this.#n.onerror&&!this.#n.failed)throw e;M?.is_fork?(this.#a&&M.skip_effect(this.#a),this.#o&&M.skip_effect(this.#o),this.#s&&M.skip_effect(this.#s),M.oncommit(()=>{this.#C(e)})):this.#C(e)}#C(e){this.#a&&=(V(this.#a),null),this.#o&&=(V(this.#o),null),this.#s&&=(V(this.#s),null),T&&(D(this.#t),je(),D(Me()));var t=this.#n.onerror;let n=this.#n.failed;var r=!1,i=!1;let a=()=>{if(r){Oe();return}r=!0,i&&Ce(),this.#s!==null&&bn(this.#s,()=>{this.#s=null}),this.#x(()=>{this.#y()})},o=e=>{try{i=!0,t?.(e,a),i=!1}catch(e){qe(e,this.#i&&this.#i.parent)}n&&(this.#s=this.#x(()=>{try{return B(()=>{var t=G;t.b=this,t.f|=128,n(this.#e,()=>e,()=>a)})}catch(e){return qe(e,this.#i.parent),null}}))};Ge(()=>{var t;try{t=this.transform_error(e)}catch(e){qe(e,this.#i&&this.#i.parent);return}typeof t==`object`&&t&&typeof t.then==`function`?t.then(o,e=>qe(e,this.#i&&this.#i.parent)):o(t)})}};function rt(e,t,n,r){let i=He()?st:ut;var a=e.filter(e=>!e.settled),o=t.map(i);if(n.length===0&&a.length===0){r(o);return}var s=G,c=it(),l=a.length===1?a[0].promise:a.length>1?Promise.all(a.map(e=>e.promise)):null;function u(e){if(!(s.f&16384)){c();try{r([...o,...e])}catch(e){qe(e,s)}at()}}var d=ot();if(n.length===0){l.then(()=>u([])).finally(d);return}function f(){Promise.all(n.map(e=>lt(e))).then(u).catch(e=>qe(e,s)).finally(d)}l?l.then(()=>{c(),f(),at()}):f()}function it(){var e=G,t=H,n=k,r=M;return function(i=!0){K(e),W(t),ze(n),i&&!(e.f&16384)&&(r?.activate(),r?.apply())}}function at(e=!0){K(null),W(null),ze(null),e&&M?.deactivate()}function ot(){var e=G,t=e.b,n=M,r=!!t?.is_rendered();return t?.update_pending_count(1,n),n.increment(r,e),()=>{t?.update_pending_count(-1,n),n.decrement(r,e)}}function st(e){var t=2|h;return G!==null&&(G.f|=S),{ctx:k,deps:null,effects:null,equals:Pe,f:t,fn:e,reactions:null,rv:0,v:w,wv:0,parent:G,ac:null}}var ct=Symbol(`obsolete`);function lt(e,t,n){let r=G;r===null&&me();var i=void 0,a=Lt(w),o=!H,s=new Set;return dn(()=>{var t=G,n=p();i=n.promise;try{Promise.resolve(e()).then(n.resolve,e=>{e!==de&&n.reject(e)}).finally(at)}catch(e){n.reject(e),at()}var c=M;if(o){if(t.f&32768)var l=ot();if(r.b?.is_rendered())c.async_deriveds.get(t)?.reject(ct);else for(let e of s.values())e.reject(ct);s.add(n),c.async_deriveds.set(t,n)}let u=(e,t=void 0)=>{l?.(),s.delete(n),t!==ct&&(c.activate(),t?(a.f|=ie,zt(a,t)):(a.f&8388608&&(a.f^=ie),zt(a,e)),c.deactivate())};n.promise.then(u,e=>u(null,e||`unknown`))}),sn(()=>{for(let e of s)e.reject(ct)}),new Promise(e=>{function t(n){function r(){n===i?e(a):t(i)}n.then(r,r)}t(i)})}function j(e){let t=st(e);return Le||kn(t),t}function ut(e){let t=st(e);return t.equals=Ie,t}function dt(e){var t=e.effects;if(t!==null){e.effects=null;for(var n=0;n<t.length;n+=1)V(t[n])}}function ft(e){var t,n=G,r=e.parent;if(!Dn&&r!==null&&e.v!==w&&r.f&24576)return Ee(),e.v;K(r);try{e.f&=~C,dt(e),t=Rn(e)}finally{K(n)}return t}function pt(e){var t=ft(e);if(!e.equals(t)&&(e.wv=Fn(),(!M?.is_fork||e.deps===null)&&(M===null?e.v=t:(M.capture(e,t,!0),vt?.capture(e,t,!0)),e.deps===null))){A(e,m);return}Dn||(N===null?Ye(e):(on()||M?.is_fork)&&N.set(e,t))}function mt(e){if(e.effects!==null)for(let t of e.effects)(t.teardown||t.ac)&&(t.teardown?.(),t.ac?.abort(de),t.fn!==null&&(t.teardown=d),t.ac=null,Bn(t,0),gn(t))}function ht(e){if(e.effects!==null)for(let t of e.effects)t.teardown&&t.fn!==null&&Vn(t)}var gt=null,_t=null,M=null,vt=null,N=null,yt=null,bt=!1,xt=!1,St=null,Ct=null,wt=0,Tt=1,Et=class e{id=Tt++;#e=!1;linked=!0;#t=null;#n=null;async_deriveds=new Map;current=new Map;previous=new Map;#r=new Set;#i=new Set;#a=0;#o=new Map;#s=null;#c=[];#l=[];#u=new Set;#d=new Set;#f=new Map;#p=new Set;is_fork=!1;#m=!1;constructor(){_t===null?gt=_t=this:(_t.#n=this,this.#t=_t),_t=this}#h(){if(this.is_fork)return!0;for(let n of this.#o.keys()){for(var e=n,t=!1;e.parent!==null;){if(this.#f.has(e)){t=!0;break}e=e.parent}if(!t)return!0}return!1}skip_effect(e){this.#f.has(e)||this.#f.set(e,{d:[],m:[]}),this.#p.delete(e)}unskip_effect(e,t=e=>this.schedule(e)){var n=this.#f.get(e);if(n){this.#f.delete(e);for(var r of n.d)A(r,h),t(r);for(r of n.m)A(r,g),t(r)}this.#p.add(e)}#g(){this.#e=!0,wt++>1e3&&(this.#S(),Dt());for(let e of this.#u)this.#d.delete(e),A(e,h),this.schedule(e);for(let e of this.#d)A(e,g),this.schedule(e);let t=this.#c;this.#c=[],this.apply();var n=St=[],r=[],i=Ct=[];for(let e of t)try{this.#_(e,n,r)}catch(t){throw Nt(e),this.#h()||this.discard(),t}if(M=null,i.length>0){var a=e.ensure();for(let e of i)a.schedule(e)}if(St=null,Ct=null,this.#h()){this.#b(r),this.#b(n);for(let[e,t]of this.#f)Mt(e,t);i.length>0&&M.#g();return}let o=this.#v();if(o){this.#b(r),this.#b(n),o.#y(this);return}this.#u.clear(),this.#d.clear();for(let e of this.#r)e(this);this.#r.clear(),vt=this,Ot(r),Ot(n),vt=null,this.#s?.resolve();var s=M;if(this.#a===0&&(this.#c.length===0||s!==null)&&(this.#S(),Le&&(this.#x(),M=s)),this.#c.length>0)if(s!==null){let e=s;e.#c.push(...this.#c.filter(t=>!e.#c.includes(t)))}else s=this;s!==null&&s.#g()}#_(e,t,n){e.f^=m;for(var r=e.first;r!==null;){var i=r.f,a=(i&96)!=0;if(!(a&&i&1024||i&8192||this.#f.has(r))&&r.fn!==null){a?r.f^=m:i&4?t.push(r):Le&&i&16777224?n.push(r):In(r)&&(i&16&&this.#d.add(r),Vn(r));var o=r.first;if(o!==null){r=o;continue}}for(;r!==null;){var s=r.next;if(s!==null){r=s;break}r=r.parent}}}#v(){for(var e=this.#t;e!==null;){if(!e.is_fork){for(let[t,[,n]]of this.current)if(e.current.has(t)&&!n)return e}e=e.#t}return null}#y(e){for(let[t,n]of e.current)!this.previous.has(t)&&e.previous.has(t)&&this.previous.set(t,e.previous.get(t)),this.current.set(t,n);for(let[t,n]of e.async_deriveds){let e=this.async_deriveds.get(t);e&&n.promise.then(e.resolve).catch(e.reject)}e.async_deriveds.clear(),this.transfer_effects(e.#u,e.#d);let t=e=>{var n=e.reactions;if(n!==null)for(let e of n){var r=e.f;if(r&2)t(e);else{var i=e;r&4194320&&!this.async_deriveds.has(i)&&(this.#d.delete(i),A(i,h),this.schedule(i))}}};for(let e of this.current.keys())t(e);this.oncommit(()=>e.discard()),e.#S(),M=this,this.#g()}#b(e){for(var t=0;t<e.length;t+=1)Ze(e[t],this.#u,this.#d)}capture(e,t,n=!1){e.v!==w&&!this.previous.has(e)&&this.previous.set(e,e.v),e.f&8388608||(this.current.set(e,[t,n]),N?.set(e,t)),this.is_fork||(e.v=t)}activate(){M=this}deactivate(){M=null,N=null}flush(){try{xt=!0,M=this,this.#g()}finally{wt=0,yt=null,St=null,Ct=null,xt=!1,M=null,N=null,Ft.clear()}}discard(){for(let e of this.#i)e(this);this.#i.clear();for(let e of this.async_deriveds.values())e.reject(ct);this.#S(),this.#s?.resolve()}register_created_effect(e){this.#l.push(e)}#x(){for(let u=gt;u!==null;u=u.#n){var e=u.id<this.id,t=[];for(let[r,[i,a]]of this.current){if(u.current.has(r)){var n=u.current.get(r)[0];if(e&&i!==n)u.current.set(r,[i,a]);else continue}t.push(r)}if(e)for(let[e,t]of this.async_deriveds){let n=u.async_deriveds.get(e);n&&t.promise.then(n.resolve).catch(n.reject)}var r=[...u.current.keys()].filter(e=>!u.current.get(e)[1]);if(!(!u.#e||r.length===0)){var i=r.filter(e=>!this.current.has(e));if(i.length===0)e&&u.discard();else if(t.length>0){if(e)for(let e of this.#p)u.unskip_effect(e,e=>{e.f&4194320?u.schedule(e):u.#b([e])});u.activate();var a=new Set,o=new Map;for(var s of t)kt(s,i,a,o);o=new Map;var c=[...u.current].filter(([e,t])=>{let n=this.current.get(e);return n?n[0]!==t[0]||n[1]!==t[1]:!0}).map(([e])=>e);if(c.length>0)for(let e of this.#l)!(e.f&155648)&&At(e,c,o)&&(e.f&4194320?(A(e,h),u.schedule(e)):u.#u.add(e));if(u.#c.length>0&&!u.#m){u.apply();for(var l of u.#c)u.#_(l,[],[]);u.#c=[]}u.deactivate()}}}}increment(e,t){if(this.#a+=1,e){let e=this.#o.get(t)??0;this.#o.set(t,e+1)}}decrement(e,t){if(--this.#a,e){let e=this.#o.get(t)??0;e===1?this.#o.delete(t):this.#o.set(t,e-1)}this.#m||(this.#m=!0,Ge(()=>{this.#m=!1,this.linked&&this.flush()}))}transfer_effects(e,t){for(let t of e)this.#u.add(t);for(let e of t)this.#d.add(e);e.clear(),t.clear()}oncommit(e){this.#r.add(e)}ondiscard(e){this.#i.add(e)}settled(){return(this.#s??=p()).promise}static ensure(){if(M===null){let t=M=new e;!xt&&!bt&&Ge(()=>{t.#e||t.flush()})}return M}apply(){if(!Le||!this.is_fork&&this.#t===null&&this.#n===null){N=null;return}N=new Map;for(let[e,[t]]of this.current)N.set(e,t);for(let t=gt;t!==null;t=t.#n)if(!(t===this||t.is_fork)){var e=!1;if(t.id<this.id){for(let[n,[,r]]of t.current)if(!r&&this.current.has(n)){e=!0;break}}if(!e)for(let[e,n]of t.previous)N.has(e)||N.set(e,n)}}schedule(e){if(yt=e,e.b?.is_pending&&e.f&16777228&&!(e.f&32768)){e.b.defer_effect(e);return}for(var t=e;t.parent!==null;){t=t.parent;var n=t.f;if(St!==null&&t===G&&(Le||(H===null||!(H.f&2))&&!Qe))return;if(n&96){if(!(n&1024))return;t.f^=m}}this.#c.push(t)}#S(){if(this.linked){var e=this.#t,t=this.#n;e===null?gt=t:e.#n=t,t===null?_t=e:t.#t=e,this.linked=!1}}};function Dt(){try{ye()}catch(e){qe(e,yt)}}var P=null;function Ot(e){var t=e.length;if(t!==0){for(var n=0;n<t;){var r=e[n++];if(!(r.f&24576)&&In(r)&&(P=new Set,Vn(r),r.deps===null&&r.first===null&&r.nodes===null&&r.teardown===null&&r.ac===null&&yn(r),P?.size>0)){Ft.clear();for(let e of P){if(e.f&24576)continue;let t=[e],n=e.parent;for(;n!==null;)P.has(n)&&(P.delete(n),t.push(n)),n=n.parent;for(let e=t.length-1;e>=0;e--){let n=t[e];n.f&24576||Vn(n)}}P.clear()}}P=null}}function kt(e,t,n,r){if(!n.has(e)&&(n.add(e),e.reactions!==null))for(let i of e.reactions){let e=i.f;e&2?kt(i,t,n,r):e&4194320&&!(e&2048)&&At(i,t,r)&&(A(i,h),jt(i))}}function At(e,t,r){let i=r.get(e);if(i!==void 0)return i;if(e.deps!==null)for(let i of e.deps){if(n.call(t,i))return!0;if(i.f&2&&At(i,t,r))return r.set(i,!0),!0}return r.set(e,!1),!1}function jt(e){M.schedule(e)}function Mt(e,t){if(!(e.f&32&&e.f&1024)){e.f&2048?t.d.push(e):e.f&4096&&t.m.push(e),A(e,m);for(var n=e.first;n!==null;)Mt(n,t),n=n.next}}function Nt(e){A(e,m);for(var t=e.first;t!==null;)Nt(t),t=t.next}var Pt=new Set,Ft=new Map,It=!1;function Lt(e,t){return{f:0,v:e,reactions:null,equals:Pe,rv:0,wv:0}}function F(e,t){let n=Lt(e,t);return kn(n),n}function Rt(e,t=!1,n=!0){let r=Lt(e);return t||(r.equals=Ie),Re&&n&&k!==null&&k.l!==null&&(k.l.s??=[]).push(r),r}function I(e,t,n=!1){return H!==null&&(!U||H.f&131072)&&He()&&H.f&4325394&&(q===null||!q.has(e))&&Se(),zt(e,n?Ut(t):t,Ct)}function zt(e,t,n=null){if(!e.equals(t)){Ft.set(e,Dn?t:e.v);var r=Et.ensure();if(r.capture(e,t),e.f&2){let t=e;e.f&2048&&ft(t),N===null&&Ye(t)}e.wv=Fn(),Ht(e,h,n),He()&&G!==null&&G.f&1024&&!(G.f&96)&&(X===null?An([e]):X.push(e)),!r.is_fork&&Pt.size>0&&!It&&Bt()}return t}function Bt(){It=!1;for(let e of Pt){e.f&1024&&A(e,g);let t;try{t=In(e)}catch{t=!0}t&&Vn(e)}Pt.clear()}function Vt(e){I(e,e.v+1)}function Ht(e,t,n){var r=e.reactions;if(r!==null)for(var i=He(),a=r.length,o=0;o<a;o++){var s=r[o],c=s.f;if(!(!i&&s===G)){var l=(c&h)===0;if(l&&A(s,t),c&131072)Pt.add(s);else if(c&2){var u=s;N?.delete(u),c&65536||(c&512&&(G===null||!(G.f&2097152))&&(s.f|=C),Ht(u,g,n))}else if(l){var d=s;c&16&&P!==null&&P.add(d),n===null?jt(d):n.push(d)}}}}function Ut(t){if(typeof t!=`object`||!t||ae in t)return t;let n=l(t);if(n!==s&&n!==c)return t;var r=new Map,i=e(t),o=F(0),u=null,d=Nn,f=e=>{if(Nn===d)return e();var t=H,n=Nn;W(null),Pn(d);var r=e();return W(t),Pn(n),r};return i&&r.set(`length`,F(t.length,u)),new Proxy(t,{defineProperty(e,t,n){(!(`value`in n)||n.configurable===!1||n.enumerable===!1||n.writable===!1)&&be();var i=r.get(t);return i===void 0?f(()=>{var e=F(n.value,u);return r.set(t,e),e}):I(i,n.value,!0),!0},deleteProperty(e,t){var n=r.get(t);if(n===void 0){if(t in e){let e=f(()=>F(w,u));r.set(t,e),Vt(o)}}else I(n,w),Vt(o);return!0},get(e,n,i){if(n===ae)return t;var o=r.get(n),s=n in e;if(o===void 0&&(!s||a(e,n)?.writable)&&(o=f(()=>F(Ut(s?e[n]:w),u)),r.set(n,o)),o!==void 0){var c=Z(o);return c===w?void 0:c}return Reflect.get(e,n,i)},getOwnPropertyDescriptor(e,t){var n=Reflect.getOwnPropertyDescriptor(e,t);if(n&&`value`in n){var i=r.get(t);i&&(n.value=Z(i))}else if(n===void 0){var a=r.get(t),o=a?.v;if(a!==void 0&&o!==w)return{enumerable:!0,configurable:!0,value:o,writable:!0}}return n},has(e,t){if(t===ae)return!0;var n=r.get(t),i=n!==void 0&&n.v!==w||Reflect.has(e,t);return(n!==void 0||G!==null&&(!i||a(e,t)?.writable))&&(n===void 0&&(n=f(()=>F(i?Ut(e[t]):w,u)),r.set(t,n)),Z(n)===w)?!1:i},set(e,t,n,s){var c=r.get(t),l=t in e;if(i&&t===`length`)for(var d=n;d<c.v;d+=1){var p=r.get(d+``);p===void 0?d in e&&(p=f(()=>F(w,u)),r.set(d+``,p)):I(p,w)}if(c===void 0)(!l||a(e,t)?.writable)&&(c=f(()=>F(void 0,u)),I(c,Ut(n)),r.set(t,c));else{l=c.v!==w;var m=f(()=>Ut(n));I(c,m)}var h=Reflect.getOwnPropertyDescriptor(e,t);if(h?.set&&h.set.call(s,n),!l){if(i&&typeof t==`string`){var g=r.get(`length`),_=Number(t);Number.isInteger(_)&&_>=g.v&&I(g,_+1)}Vt(o)}return!0},ownKeys(e){Z(o);var t=Reflect.ownKeys(e).filter(e=>{var t=r.get(e);return t===void 0||t.v!==w});for(var[n,i]of r)i.v!==w&&!(n in e)&&t.push(n);return t},setPrototypeOf(){xe()}})}new Set([`copyWithin`,`fill`,`pop`,`push`,`reverse`,`shift`,`sort`,`splice`,`unshift`]);var Wt,Gt,Kt,qt;function Jt(){if(Wt===void 0){Wt=window,Gt=/Firefox/.test(navigator.userAgent);var e=Element.prototype,t=Node.prototype,n=Text.prototype;Kt=a(t,`firstChild`).get,qt=a(t,`nextSibling`).get,u(e)&&(e[ce]=void 0,e[se]=null,e[le]=void 0,e.__e=void 0),u(n)&&(n[ue]=void 0)}}function L(e=``){return document.createTextNode(e)}function Yt(e){return Kt.call(e)}function Xt(e){return qt.call(e)}function R(e,t){if(!T)return Yt(e);var n=Yt(E);if(n===null)n=E.appendChild(L());else if(t&&n.nodeType!==3){var r=L();return n?.before(r),D(r),r}return t&&en(n),D(n),n}function z(e,t=1,n=!1){let r=T?E:e;for(var i;t--;)i=r,r=Xt(r);if(!T)return r;if(n){if(r?.nodeType!==3){var a=L();return r===null?i?.after(a):r.before(a),D(a),a}en(r)}return D(r),r}function Zt(e){e.textContent=``}function Qt(){return!Le||P!==null?!1:(G.f&y)!==0}function $t(e,t,n){return t==null||t===`http://www.w3.org/1999/xhtml`?n?document.createElement(e,{is:n}):document.createElement(e):n?document.createElementNS(t,e,{is:n}):document.createElementNS(t,e)}function en(e){if(e.nodeValue.length<65536)return;let t=e.nextSibling;for(;t!==null&&t.nodeType===3;)t.remove(),e.nodeValue+=t.nodeValue,t=e.nextSibling}function tn(e){var t=H,n=G;W(null),K(null);try{return e()}finally{W(t),K(n)}}function nn(e){G===null&&(H===null&&ve(e),_e()),Dn&&ge(e)}function rn(e,t){var n=t.last;n===null?t.last=t.first=e:(n.next=e,e.prev=n,t.last=e)}function an(e,t){var n=G;n!==null&&n.f&8192&&(e|=_);var r={ctx:k,deps:null,nodes:null,f:e|h|512,first:null,fn:t,last:null,next:null,parent:n,b:n&&n.b,prev:null,teardown:null,wv:0,ac:null};M?.register_created_effect(r);var i=r;if(e&4)St===null?Et.ensure().schedule(r):St.push(r);else if(t!==null){try{Vn(r)}catch(e){throw V(r),e}i.deps===null&&i.teardown===null&&i.nodes===null&&i.first===i.last&&!(i.f&524288)&&(i=i.first,e&16&&e&65536&&i!==null&&(i.f|=x))}if(i!==null&&(i.parent=n,n!==null&&rn(i,n),H!==null&&H.f&2&&!(e&64))){var a=H;(a.effects??=[]).push(i)}return r}function on(){return H!==null&&!U}function sn(e){let t=an(8,null);return A(t,m),t.teardown=e,t}function cn(e){nn(`$effect`);var t=G.f;if(!H&&t&32&&k!==null&&!k.i){var n=k;(n.e??=[]).push(e)}else return ln(e)}function ln(e){return an(4|ee,e)}function un(e){Et.ensure();let t=an(64|S,e);return(e={})=>new Promise(n=>{e.outro?bn(t,()=>{V(t),n(void 0)}):(V(t),n(void 0))})}function dn(e){return an(re|S,e)}function fn(e,t=0){return an(8|t,e)}function pn(e,t=[],n=[],r=[]){rt(r,t,n,t=>{an(8,()=>{e(...t.map(Z))})})}function mn(e,t=0){return an(16|t,e)}function B(e){return an(32|S,e)}function hn(e){var t=e.teardown;if(t!==null){let e=Dn,n=H;On(!0),W(null);try{t.call(null)}finally{On(e),W(n)}}}function gn(e,t=!1){var n=e.first;for(e.first=e.last=null;n!==null;){let e=n.ac;e!==null&&tn(()=>{e.abort(de)});var r=n.next;n.f&64?n.parent=null:V(n,t),n=r}}function _n(e){for(var t=e.first;t!==null;){var n=t.next;t.f&32||V(t),t=n}}function V(e,t=!0){var n=!1;(t||e.f&262144)&&e.nodes!==null&&e.nodes.end!==null&&(vn(e.nodes.start,e.nodes.end),n=!0),e.f|=b,gn(e,t&&!n),Bn(e,0);var r=e.nodes&&e.nodes.t;if(r!==null)for(let e of r)e.stop();hn(e),e.f^=b,e.f|=v;var i=e.parent;i!==null&&i.first!==null&&yn(e),e.next=e.prev=e.teardown=e.ctx=e.deps=e.fn=e.nodes=e.ac=e.b=null}function vn(e,t){for(;e!==null;){var n=e===t?null:Xt(e);e.remove(),e=n}}function yn(e){var t=e.parent,n=e.prev,r=e.next;n!==null&&(n.next=r),r!==null&&(r.prev=n),t!==null&&(t.first===e&&(t.first=r),t.last===e&&(t.last=n))}function bn(e,t,n=!0){var r=[];xn(e,r,!0);var i=()=>{n&&V(e),t&&t()},a=r.length;if(a>0){var o=()=>--a||i();for(var s of r)s.out(o)}else i()}function xn(e,t,n){if(!(e.f&8192)){e.f^=_;var r=e.nodes&&e.nodes.t;if(r!==null)for(let e of r)(e.is_global||n)&&t.push(e);for(var i=e.first;i!==null;){var a=i.next;if(!(i.f&64)){var o=(i.f&65536)!=0||(i.f&32)!=0&&(e.f&16)!=0;xn(i,t,o?n:!1)}i=a}}}function Sn(e){Cn(e,!0)}function Cn(e,t){if(e.f&8192){e.f^=_,e.f&1024||(A(e,h),Et.ensure().schedule(e));for(var n=e.first;n!==null;){var r=n.next,i=(n.f&65536)!=0||(n.f&32)!=0;Cn(n,i?t:!1),n=r}var a=e.nodes&&e.nodes.t;if(a!==null)for(let e of a)(e.is_global||t)&&e.in()}}function wn(e,t){if(e.nodes)for(var n=e.nodes.start,r=e.nodes.end;n!==null;){var i=n===r?null:Xt(n);t.append(n),n=i}}var Tn=null,En=!1,Dn=!1;function On(e){Dn=e}var H=null,U=!1;function W(e){H=e}var G=null;function K(e){G=e}var q=null;function kn(e){H!==null&&(!Le||H.f&2)&&(q??=new Set).add(e)}var J=null,Y=0,X=null;function An(e){X=e}var jn=1,Mn=0,Nn=Mn;function Pn(e){Nn=e}function Fn(){return++jn}function In(e){var t=e.f;if(t&2048)return!0;if(t&2&&(e.f&=~C),t&4096){for(var n=e.deps,r=n.length,i=0;i<r;i++){var a=n[i];if(In(a)&&pt(a),a.wv>e.wv)return!0}t&512&&N===null&&A(e,m)}return!1}function Ln(e,t,n=!0){var r=e.reactions;if(r!==null&&!(!Le&&q!==null&&q.has(e)))for(var i=0;i<r.length;i++){var a=r[i];a.f&2?Ln(a,t,!1):t===a&&(n?A(a,h):a.f&1024&&A(a,g),jt(a))}}function Rn(e){var t=J,n=Y,r=X,i=H,a=q,o=k,s=U,c=Nn,l=e.f;J=null,Y=0,X=null,H=l&96?null:e,q=null,ze(e.ctx),U=!1,Nn=++Mn,e.ac!==null&&(tn(()=>{e.ac.abort(de)}),e.ac=null);try{e.f|=ne;var u=e.fn,d=u();e.f|=y;var f=e.deps,p=M?.is_fork;if(J!==null){var m;if(p||Bn(e,Y),f!==null&&Y>0)for(f.length=Y+J.length,m=0;m<J.length;m++)f[Y+m]=J[m];else e.deps=f=J;if(on()&&e.f&512)for(m=Y;m<f.length;m++)(f[m].reactions??=[]).push(e)}else !p&&f!==null&&Y<f.length&&(Bn(e,Y),f.length=Y);if(He()&&X!==null&&!U&&f!==null&&!(e.f&6146))for(m=0;m<X.length;m++)Ln(X[m],e);if(i!==null&&i!==e){if(Mn++,i.deps!==null)for(let e=0;e<n;e+=1)i.deps[e].rv=Mn;if(t!==null)for(let e of t)e.rv=Mn;X!==null&&(r===null?r=X:r.push(...X))}return e.f&8388608&&(e.f^=ie),d}catch(e){return Ke(e)}finally{e.f^=ne,J=t,Y=n,X=r,H=i,q=a,ze(o),U=s,Nn=c}}function zn(e,r){let i=r.reactions;if(i!==null){var a=t.call(i,e);if(a!==-1){var o=i.length-1;o===0?i=r.reactions=null:(i[a]=i[o],i.pop())}}if(i===null&&r.f&2&&(J===null||!n.call(J,r))){var s=r;s.f&512&&(s.f^=512,s.f&=~C),s.v!==w&&Ye(s),mt(s),Bn(s,0)}}function Bn(e,t){var n=e.deps;if(n!==null)for(var r=t;r<n.length;r++)zn(e,n[r])}function Vn(e){var t=e.f;if(!(t&16384)){A(e,m);var n=G,r=En;G=e,En=!0;try{t&16777232?_n(e):gn(e),hn(e);var i=Rn(e);e.teardown=typeof i==`function`?i:null,e.wv=jn}finally{En=r,G=n}}}function Z(e){var t=(e.f&2)!=0;if(Tn?.add(e),H!==null&&!U&&!(G!==null&&G.f&16384)&&(q===null||!q.has(e))){var r=H.deps;if(H.f&2097152)e.rv<Mn&&(e.rv=Mn,J===null&&r!==null&&r[Y]===e?Y++:J===null?J=[e]:J.push(e));else{H.deps??=[],n.call(H.deps,e)||H.deps.push(e);var i=e.reactions;i===null?e.reactions=[H]:n.call(i,H)||i.push(H)}}if(Dn&&Ft.has(e))return Ft.get(e);if(t){var a=e;if(Dn){var o=a.v;return(!(a.f&1024)&&a.reactions!==null||Un(a))&&(o=ft(a)),Ft.set(a,o),o}var s=(a.f&512)==0&&!U&&H!==null&&(En||(H.f&512)!=0),c=(a.f&y)===0;In(a)&&(s&&(a.f|=512),pt(a)),s&&!c&&(ht(a),Hn(a))}if(N?.has(e))return N.get(e);if(e.f&8388608)throw e.v;return e.v}function Hn(e){if(e.f|=512,e.deps!==null)for(let t of e.deps)(t.reactions??=[]).push(e),t.f&2&&!(t.f&512)&&(ht(t),Hn(t))}function Un(e){if(e.v===w)return!0;if(e.deps===null)return!1;for(let t of e.deps)if(Ft.has(t)||t.f&2&&Un(t))return!0;return!1}function Wn(e){var t=U;try{return U=!0,e()}finally{U=t}}[...`allowfullscreen.async.autofocus.autoplay.checked.controls.default.disabled.formnovalidate.indeterminate.inert.ismap.loop.multiple.muted.nomodule.novalidate.open.playsinline.readonly.required.reversed.seamless.selected.webkitdirectory.defer.disablepictureinpicture.disableremoteplayback`.split(`.`)];var Gn=[`touchstart`,`touchmove`];function Kn(e){return Gn.includes(e)}var qn=Symbol(`events`),Jn=new Set,Yn=new Set;function Xn(e){if(!T)return;e.removeAttribute(`onload`),e.removeAttribute(`onerror`);let t=e.__e;t!==void 0&&(e.__e=void 0,queueMicrotask(()=>{e.isConnected&&e.dispatchEvent(t)}))}function Zn(e,t,n,r={}){function i(e){if(r.capture||nr.call(t,e),!e.cancelBubble)return tn(()=>n?.call(this,e))}return e.startsWith(`pointer`)||e.startsWith(`touch`)||e===`wheel`?Ge(()=>{t.addEventListener(e,i,r)}):t.addEventListener(e,i,r),i}function Qn(e,t,n,r,i){var a={capture:r,passive:i},o=Zn(e,t,n,a);(t===document.body||t===window||t===document||t instanceof HTMLMediaElement)&&sn(()=>{t.removeEventListener(e,o,a)})}function $n(e,t,n){(t[qn]??={})[e]=n}function er(e){for(var t=0;t<e.length;t++)Jn.add(e[t]);for(var n of Yn)n(e)}var tr=null;function nr(e){var t=this,n=t.ownerDocument,r=e.type,a=e.composedPath?.()||[],o=a[0]||e.target;tr=e;var s=0,c=tr===e&&e[qn];if(c){var l=a.indexOf(c);if(l!==-1&&(t===document||t===window)){e[qn]=t;return}var u=a.indexOf(t);if(u===-1)return;l<=u&&(s=l)}if(o=a[s]||e.target,o!==t){i(e,`currentTarget`,{configurable:!0,get(){return o||n}});var d=H,f=G;W(null),K(null);try{for(var p,m=[];o!==null&&o!==t;){try{var h=o[qn]?.[r];h!=null&&(!o.disabled||e.target===o)&&h.call(o,e)}catch(e){p?m.push(e):p=e}if(e.cancelBubble)break;s++,o=s<a.length?a[s]:null}if(p){for(let e of m)queueMicrotask(()=>{throw e});throw p}}finally{e[qn]=t,delete e.currentTarget,W(d),K(f)}}}var rr=globalThis?.window?.trustedTypes&&globalThis.window.trustedTypes.createPolicy(`svelte-trusted-html`,{createHTML:e=>e});function ir(e){return rr?.createHTML(e)??e}function ar(e){var t=$t(`template`);return t.innerHTML=ir(e.replaceAll(`<!>`,`<!---->`)),t.content}function or(e,t){var n=G;n.nodes===null&&(n.nodes={start:e,end:t,a:null,t:null})}function Q(e,t){var n=(t&1)!=0,r=(t&2)!=0,i,a=!e.startsWith(`<!>`);return()=>{if(T)return or(E,null),E;i===void 0&&(i=ar(a?e:`<!>`+e),n||(i=Yt(i)));var t=r||Gt?document.importNode(i,!0):i.cloneNode(!0);if(n){var o=Yt(t),s=t.lastChild;or(o,s)}else or(t,t);return t}}function $(e,t){if(T){var n=G;(!(n.f&32768)||n.nodes.end===null)&&(n.nodes.end=E),Ae();return}e!==null&&e.before(t)}function sr(e,t){var n=t==null?``:typeof t==`object`?`${t}`:t;n!==(e[ue]??=e.nodeValue)&&(e[ue]=n,e.nodeValue=`${n}`)}function cr(e,t){return ur(e,t)}var lr=new Map;function ur(e,{target:t,anchor:n,props:i={},events:a,context:o,intro:s=!0,transformError:c}){Jt();var l=void 0,u=un(()=>{var s=n??t.appendChild(L());tt(s,{pending:()=>{}},t=>{Be({});var n=k;if(o&&(n.c=o),a&&(i.$$events=a),T&&or(t,null),l=e(t,i)||{},T&&(G.nodes.end=E,E===null||E.nodeType!==8||E.data!==`]`))throw De(),we;Ve()},c);var u=new Set,d=e=>{for(var n=0;n<e.length;n++){var r=e[n];if(!u.has(r)){u.add(r);var i=Kn(r);for(let e of[t,document]){var a=lr.get(e);a===void 0&&(a=new Map,lr.set(e,a));var o=a.get(r);o===void 0?(e.addEventListener(r,nr,{passive:i}),a.set(r,1)):a.set(r,o+1)}}}};return d(r(Jn)),Yn.add(d),()=>{for(var e of u)for(let n of[t,document]){var r=lr.get(n),i=r.get(e);--i==0?(n.removeEventListener(e,nr),r.delete(e),r.size===0&&lr.delete(n)):r.set(e,i)}Yn.delete(d),s!==n&&s.parentNode?.removeChild(s)}});return dr.set(l,u),l}var dr=new WeakMap,fr=class{anchor;#e=new Map;#t=new Map;#n=new Map;#r=new Set;#i=!0;constructor(e,t=!0){this.anchor=e,this.#i=t}#a=e=>{if(this.#e.has(e)){var t=this.#e.get(e),n=this.#t.get(t);if(n)Sn(n),this.#r.delete(t);else{var r=this.#n.get(t);r&&(Sn(r.effect),this.#t.set(t,r.effect),this.#n.delete(t),r.fragment.lastChild.remove(),this.anchor.before(r.fragment),n=r.effect)}for(let[t,n]of this.#e){if(this.#e.delete(t),t===e)break;let r=this.#n.get(n);r&&(V(r.effect),this.#n.delete(n))}for(let[e,r]of this.#t){if(e===t||this.#r.has(e))continue;let i=()=>{if(Array.from(this.#e.values()).includes(e)){var t=document.createDocumentFragment();wn(r,t),t.append(L()),this.#n.set(e,{effect:r,fragment:t})}else V(r);this.#r.delete(e),this.#t.delete(e)};this.#i||!n?(this.#r.add(e),bn(r,i,!1)):i()}}};#o=e=>{this.#e.delete(e);let t=Array.from(this.#e.values());for(let[e,n]of this.#n)t.includes(e)||(V(n.effect),this.#n.delete(e))};ensure(e,t){var n=M,r=Qt();if(t&&!this.#t.has(e)&&!this.#n.has(e))if(r){var i=document.createDocumentFragment(),a=L();i.append(a),this.#n.set(e,{effect:B(()=>t(a)),fragment:i})}else this.#t.set(e,B(()=>t(this.anchor)));if(this.#e.set(n,e),r){for(let[t,r]of this.#t)t===e?n.unskip_effect(r):n.skip_effect(r);for(let[t,r]of this.#n)t===e?n.unskip_effect(r.effect):n.skip_effect(r.effect);n.oncommit(this.#a),n.ondiscard(this.#o)}else T&&(this.anchor=E),this.#a(n)}};function pr(e,t,n=!1){var r;T&&(r=E,Ae());var i=new fr(e),a=n?x:0;function o(e,t){if(T){var n=Ne(r);if(e!==parseInt(n.substring(1))){var a=Me();D(a),i.anchor=a,ke(!1),i.ensure(e,t),ke(!0);return}}i.ensure(e,t)}mn(()=>{var e=!1;t((t,n=0)=>{e=!0,o(n,t)}),e||o(-1,null)},a)}function mr(e,t){return t}function hr(e,t,n){for(var i=[],a=t.length,o,s=t.length,c=0;c<a;c++){let n=t[c];bn(n,()=>{if(o){if(o.pending.delete(n),o.done.add(n),o.pending.size===0){var t=e.outrogroups;gr(e,r(o.done)),t.delete(o),t.size===0&&(e.outrogroups=null)}}else --s},!1)}if(s===0){var l=i.length===0&&n!==null;if(l){var u=n,d=u.parentNode;Zt(d),d.append(u),e.items.clear()}gr(e,t,!l)}else o={pending:new Set(t),done:new Set},(e.outrogroups??=new Set).add(o)}function gr(e,t,n=!0){var r;if(e.pending.size>0){r=new Set;for(let t of e.pending.values())for(let n of t)r.add(e.items.get(n).e)}for(var i=0;i<t.length;i++){var a=t[i];r?.has(a)?(a.f|=te,wn(a,document.createDocumentFragment())):V(t[i],n)}}var _r;function vr(t,n,i,a,o,s=null){var c=t,l=new Map;if(n&4){var u=t;c=T?D(Yt(u)):u.appendChild(L())}T&&Ae();var d=null,f=ut(()=>{var t=i();return e(t)?t:t==null?[]:r(t)}),p,m=new Map,h=!0;function g(e){v.effect.f&16384||(v.pending.delete(e),v.fallback=d,br(v,p,c,n,a),d!==null&&(p.length===0?d.f&33554432?(d.f^=te,Sr(d,null,c)):Sn(d):bn(d,()=>{d=null})))}function _(e){v.pending.delete(e)}var v={effect:mn(()=>{p=Z(f);var e=p.length;let t=!1;T&&Ne(c)===`[!`!=(e===0)&&(c=Me(),D(c),ke(!1),t=!0);for(var r=new Set,u=M,v=Qt(),y=0;y<e;y+=1){T&&E.nodeType===8&&E.data===`]`&&(c=E,t=!0,ke(!1));var b=p[y],x=a(b,y),S=h?null:l.get(x);S?(S.v&&zt(S.v,b),S.i&&zt(S.i,y),v&&u.unskip_effect(S.e)):(S=xr(l,h?c:_r??=L(),b,x,y,o,n,i),h||(S.e.f|=te),l.set(x,S)),r.add(x)}if(e===0&&s&&!d&&(h?d=B(()=>s(c)):(d=B(()=>s(_r??=L())),d.f|=te)),e>r.size&&he(``,``,``),T&&e>0&&D(Me()),!h)if(m.set(u,r),v){for(let[e,t]of l)r.has(e)||u.skip_effect(t.e);u.oncommit(g),u.ondiscard(_)}else g(u);t&&ke(!0),Z(f)}),flags:n,items:l,pending:m,outrogroups:null,fallback:d};h=!1,T&&(c=E)}function yr(e){for(;e!==null&&!(e.f&32);)e=e.next;return e}function br(e,t,n,i,a){var o=(i&8)!=0,s=t.length,c=e.items,l=yr(e.effect.first),u,d=null,f,p=[],m=[],h,g,_,v;if(o)for(v=0;v<s;v+=1)h=t[v],g=a(h,v),_=c.get(g).e,_.f&33554432||(_.nodes?.a?.measure(),(f??=new Set).add(_));for(v=0;v<s;v+=1){if(h=t[v],g=a(h,v),_=c.get(g).e,e.outrogroups!==null)for(let t of e.outrogroups)t.pending.delete(_),t.done.delete(_);if(_.f&8192&&(Sn(_),o&&(_.nodes?.a?.unfix(),(f??=new Set).delete(_))),_.f&33554432)if(_.f^=te,_===l)Sr(_,null,n);else{var y=d?d.next:l;_===e.effect.last&&(e.effect.last=_.prev),_.prev&&(_.prev.next=_.next),_.next&&(_.next.prev=_.prev),Cr(e,d,_),Cr(e,_,y),Sr(_,y,n),d=_,p=[],m=[],l=yr(d.next);continue}if(_!==l){if(u!==void 0&&u.has(_)){if(p.length<m.length){var b=m[0],x;d=b.prev;var S=p[0],ee=p[p.length-1];for(x=0;x<p.length;x+=1)Sr(p[x],b,n);for(x=0;x<m.length;x+=1)u.delete(m[x]);Cr(e,S.prev,ee.next),Cr(e,d,S),Cr(e,ee,b),l=b,d=ee,--v,p=[],m=[]}else u.delete(_),Sr(_,l,n),Cr(e,_.prev,_.next),Cr(e,_,d===null?e.effect.first:d.next),Cr(e,d,_),d=_;continue}for(p=[],m=[];l!==null&&l!==_;)(u??=new Set).add(l),m.push(l),l=yr(l.next);if(l===null)continue}_.f&33554432||p.push(_),d=_,l=yr(_.next)}if(e.outrogroups!==null){for(let t of e.outrogroups)t.pending.size===0&&(gr(e,r(t.done)),e.outrogroups?.delete(t));e.outrogroups.size===0&&(e.outrogroups=null)}if(l!==null||u!==void 0){var C=[];if(u!==void 0)for(_ of u)_.f&8192||C.push(_);for(;l!==null;)!(l.f&8192)&&l!==e.fallback&&C.push(l),l=yr(l.next);var ne=C.length;if(ne>0){var re=i&4&&s===0?n:null;if(o){for(v=0;v<ne;v+=1)C[v].nodes?.a?.measure();for(v=0;v<ne;v+=1)C[v].nodes?.a?.fix()}hr(e,C,re)}}o&&Ge(()=>{if(f!==void 0)for(_ of f)_.nodes?.a?.apply()})}function xr(e,t,n,r,i,a,o,s){var c=o&1?o&16?Lt(n):Rt(n,!1,!1):null,l=o&2?Lt(i):null;return{v:c,i:l,e:B(()=>(a(t,c??n,l??i,s),()=>{e.delete(r)}))}}function Sr(e,t,n){if(e.nodes)for(var r=e.nodes.start,i=e.nodes.end,a=t&&!(t.f&33554432)?t.nodes.start:n;r!==null;){var o=Xt(r);if(a.before(r),r===i)return;r=o}}function Cr(e,t,n){t===null?e.effect.first=n:t.next=n,n===null?e.effect.last=t:n.prev=t}var wr=[...`
|
|
2
|
-
\r\f\xA0\v`];function Tr(e,t,n){var r=e==null?``:``+e;if(t&&(r=r?r+` `+t:t),n){for(var i of Object.keys(n))if(n[i])r=r?r+` `+i:i;else if(r.length)for(var a=i.length,o=0;(o=r.indexOf(i,o))>=0;){var s=o+a;(o===0||wr.includes(r[o-1]))&&(s===r.length||wr.includes(r[s]))?r=(o===0?``:r.substring(0,o))+r.substring(s+1):o=s}}return r===``?null:r}function Er(e,t,n,r,i,a){var o=e[ce];if(T||o!==n||o===void 0){var s=Tr(n,r,a);(!T||s!==e.getAttribute(`class`))&&(s==null?e.removeAttribute(`class`):t?e.className=s:e.setAttribute(`class`,s)),e[ce]=n}else if(a&&i!==a)for(var c in a){var l=!!a[c];(i==null||l!==!!i[c])&&e.classList.toggle(c,l)}return a}var Dr=Symbol(`is custom element`),Or=Symbol(`is html`),kr=fe?`link`:`LINK`;function Ar(e,t,n,r){var i=jr(e);T&&(i[t]=e.getAttribute(t),t===`src`||t===`srcset`||t===`href`&&e.nodeName===kr)||i[t]!==(i[t]=n)&&(t===`loading`&&(e[oe]=n),n==null?e.removeAttribute(t):typeof n!=`string`&&Nr(e).includes(t)?e[t]=n:e.setAttribute(t,n))}function jr(e){return e[se]??={[Dr]:e.nodeName.includes(`-`),[Or]:e.namespaceURI===Te}}var Mr=new Map;function Nr(e){var t=e.getAttribute(`is`)||e.nodeName,n=Mr.get(t);if(n)return n;Mr.set(t,n=[]);for(var r,i=e,a=Element.prototype;a!==i;){for(var s in r=o(i),r)r[s].set&&s!==`innerHTML`&&s!==`textContent`&&s!==`innerText`&&n.push(s);i=l(i)}return n}function Pr(e){k===null&&pe(`onMount`),Re&&k.l!==null?Fr(k).m.push(e):cn(()=>{let t=Wn(e);if(typeof t==`function`)return t})}function Fr(e){var t=e.l;return t.u??={a:[],b:[],m:[]}}typeof window<`u`&&((window.__svelte??={}).v??=new Set).add(`5`);var Ir=`/api/ext/pages`;async function Lr(){let e=await fetch(Ir);return e.ok?e.json():(console.warn(`Failed to fetch pages data: HTTP ${e.status}`),{sites:[],systemSite:null,recentPages:[]})}var Rr=Q(`<div class="thumbnail-sublabel svelte-yqwgpu"> </div>`),zr=Q(`<button class="thumbnail-card svelte-yqwgpu"><div class="thumbnail-frame svelte-yqwgpu"><iframe loading="lazy" sandbox="allow-same-origin"></iframe></div> <div class="thumbnail-label svelte-yqwgpu"> </div> <!></button>`);function Br(e,t){let n=F(!1);var r=zr(),i=R(r),a=R(i);Ar(a,`tabindex`,-1);let o;O(i);var s=z(i,2),c=R(s,!0);O(s);var l=z(s,2),u=e=>{var n=Rr(),r=R(n,!0);O(n),pn(()=>sr(r,t.sublabel)),$(e,n)};pr(l,e=>{t.sublabel&&e(u)}),O(r),pn(()=>{Ar(a,`src`,t.url),Ar(a,`title`,t.label),o=Er(a,1,`svelte-yqwgpu`,null,o,{loaded:Z(n)}),sr(c,t.label)}),$n(`click`,r,function(...e){t.onclick?.apply(this,e)}),Qn(`load`,a,()=>I(n,!0)),Xn(a),$(e,r)}er([`click`]);var Vr=Q(`<div class="section svelte-apzsoj"><div class="section-header svelte-apzsoj"><span class="section-title svelte-apzsoj">shared pages</span></div> <div class="thumbnail-grid svelte-apzsoj"></div></div>`),Hr=Q(`<div class="section svelte-apzsoj"><div class="section-header svelte-apzsoj"><span class="section-title svelte-apzsoj">mind sites</span></div> <div class="thumbnail-grid svelte-apzsoj"></div></div>`),Ur=Q(`<div class="section svelte-apzsoj"><div class="section-header svelte-apzsoj"><span class="section-title svelte-apzsoj">recently modified</span></div> <div class="thumbnail-grid svelte-apzsoj"></div></div>`),Wr=Q(`<div class="empty svelte-apzsoj">No pages published yet.</div>`),Gr=Q(`<div class="dashboard svelte-apzsoj"><!> <!> <!> <!></div>`);function Kr(e,t){Be(t,!0);function n(e){let t=Math.floor((Date.now()-new Date(e).getTime())/1e3);if(t<60)return`just now`;let n=Math.floor(t/60);if(n<60)return`${n}m ago`;let r=Math.floor(n/60);if(r<24)return`${r}h ago`;let i=Math.floor(r/24);return i<30?`${i}d ago`:`${Math.floor(i/30)}mo ago`}function r(e){let t=n(e.modified);return e.mind===`_system`&&e.author?`${e.author} · ${t}`:`${e.mind} · ${t}`}var i=Gr(),a=R(i),o=e=>{var n=Vr(),r=z(R(n),2);vr(r,21,()=>t.systemSite.pages,mr,(e,n)=>{{let r=j(()=>Z(n).author??void 0);Br(e,{get url(){return Z(n).url},get label(){return Z(n).file},get sublabel(){return Z(r)},onclick:()=>t.onSelectPage(`_system`,Z(n).file)})}}),O(r),O(n),$(e,n)};pr(a,e=>{t.systemSite&&e(o)});var s=z(a,2),c=e=>{var n=Hr(),r=z(R(n),2);vr(r,21,()=>t.sites,mr,(e,n)=>{{let r=j(()=>Z(n).pages[0]?`/ext/pages/public/${Z(n).name}/${Z(n).pages[0].file}`:`about:blank`);Br(e,{get url(){return Z(r)},get label(){return Z(n).label},onclick:()=>t.onSelectSite(Z(n).name)})}}),O(r),O(n),$(e,n)};pr(s,e=>{t.sites.length>0&&e(c)});var l=z(s,2),u=e=>{var n=Ur(),i=z(R(n),2);vr(i,21,()=>t.recentPages,mr,(e,n)=>{{let i=j(()=>`/ext/pages/public/${Z(n).mind}/${Z(n).file}`),a=j(()=>r(Z(n)));Br(e,{get url(){return Z(i)},get label(){return Z(n).file},get sublabel(){return Z(a)},onclick:()=>t.onSelectPage(Z(n).mind,Z(n).file)})}}),O(i),O(n),$(e,n)};pr(l,e=>{t.recentPages.length>0&&e(u)});var d=z(l,2),f=e=>{$(e,Wr())};pr(d,e=>{!t.systemSite&&t.sites.length===0&&t.recentPages.length===0&&e(f)}),O(i),$(e,i),Ve()}var qr=Q(`<div class="empty svelte-vvnkg1">No pages in this site.</div>`),Jr=Q(`<div class="site-view svelte-vvnkg1"><div class="site-header svelte-vvnkg1"><span class="site-name svelte-vvnkg1"> </span> <span class="page-count svelte-vvnkg1"> </span></div> <div class="thumbnail-grid svelte-vvnkg1"></div> <!></div>`);function Yr(e,t){Be(t,!0);function n(e){let t=Math.floor((Date.now()-new Date(e).getTime())/1e3);if(t<60)return`just now`;let n=Math.floor(t/60);if(n<60)return`${n}m ago`;let r=Math.floor(n/60);if(r<24)return`${r}h ago`;let i=Math.floor(r/24);return i<30?`${i}d ago`:`${Math.floor(i/30)}mo ago`}var r=Jr(),i=R(r),a=R(i),o=R(a,!0);O(a);var s=z(a,2),c=R(s);O(s),O(i);var l=z(i,2);vr(l,21,()=>t.site.pages,mr,(e,r)=>{{let i=j(()=>`/ext/pages/public/${t.site.name}/${Z(r).file}`),a=j(()=>n(Z(r).modified));Br(e,{get url(){return Z(i)},get label(){return Z(r).file},get sublabel(){return Z(a)},onclick:()=>t.onSelectPage(t.site.name,Z(r).file)})}}),O(l);var u=z(l,2),d=e=>{$(e,qr())};pr(u,e=>{t.site.pages.length===0&&e(d)}),O(r),pn(()=>{sr(o,t.site.label),sr(c,`${t.site.pages.length??``} ${t.site.pages.length===1?`page`:`pages`}`)}),$(e,r),Ve()}var Xr=Q(`<iframe class="full-page-iframe svelte-1r8vfx3"></iframe>`),Zr=Q(`<div><!></div>`);function Qr(e,t){Be(t,!0);let n=F(Ut(window.location.hash));Pr(()=>{let e=()=>{I(n,window.location.hash,!0)};return window.addEventListener(`hashchange`,e),()=>window.removeEventListener(`hashchange`,e)});let r=j(()=>{let e=Z(n).replace(/^#\/?/,``),t=e.match(/^mind\/([^/]+)/);if(t)return{view:`mind`,name:t[1]};let r=e.match(/^([^/]+)\/(.+)$/);return r?{view:`page`,name:r[1],path:r[2]}:e&&!e.includes(`/`)?{view:`site`,name:e}:{view:`dashboard`}}),i=F(Ut([])),a=F(null),o=F(Ut([]));cn(()=>{Lr().then(e=>{I(i,e.sites,!0),I(a,e.systemSite,!0),I(o,e.recentPages,!0)})});let s=j(()=>[...Z(a)?[Z(a)]:[],...Z(i)]),c=j(()=>{if(Z(r).view
|
|
2
|
+
\r\f\xA0\v`];function Tr(e,t,n){var r=e==null?``:``+e;if(t&&(r=r?r+` `+t:t),n){for(var i of Object.keys(n))if(n[i])r=r?r+` `+i:i;else if(r.length)for(var a=i.length,o=0;(o=r.indexOf(i,o))>=0;){var s=o+a;(o===0||wr.includes(r[o-1]))&&(s===r.length||wr.includes(r[s]))?r=(o===0?``:r.substring(0,o))+r.substring(s+1):o=s}}return r===``?null:r}function Er(e,t,n,r,i,a){var o=e[ce];if(T||o!==n||o===void 0){var s=Tr(n,r,a);(!T||s!==e.getAttribute(`class`))&&(s==null?e.removeAttribute(`class`):t?e.className=s:e.setAttribute(`class`,s)),e[ce]=n}else if(a&&i!==a)for(var c in a){var l=!!a[c];(i==null||l!==!!i[c])&&e.classList.toggle(c,l)}return a}var Dr=Symbol(`is custom element`),Or=Symbol(`is html`),kr=fe?`link`:`LINK`;function Ar(e,t,n,r){var i=jr(e);T&&(i[t]=e.getAttribute(t),t===`src`||t===`srcset`||t===`href`&&e.nodeName===kr)||i[t]!==(i[t]=n)&&(t===`loading`&&(e[oe]=n),n==null?e.removeAttribute(t):typeof n!=`string`&&Nr(e).includes(t)?e[t]=n:e.setAttribute(t,n))}function jr(e){return e[se]??={[Dr]:e.nodeName.includes(`-`),[Or]:e.namespaceURI===Te}}var Mr=new Map;function Nr(e){var t=e.getAttribute(`is`)||e.nodeName,n=Mr.get(t);if(n)return n;Mr.set(t,n=[]);for(var r,i=e,a=Element.prototype;a!==i;){for(var s in r=o(i),r)r[s].set&&s!==`innerHTML`&&s!==`textContent`&&s!==`innerText`&&n.push(s);i=l(i)}return n}function Pr(e){k===null&&pe(`onMount`),Re&&k.l!==null?Fr(k).m.push(e):cn(()=>{let t=Wn(e);if(typeof t==`function`)return t})}function Fr(e){var t=e.l;return t.u??={a:[],b:[],m:[]}}typeof window<`u`&&((window.__svelte??={}).v??=new Set).add(`5`);var Ir=`/api/ext/pages`;async function Lr(){let e=await fetch(Ir);return e.ok?e.json():(console.warn(`Failed to fetch pages data: HTTP ${e.status}`),{sites:[],systemSite:null,recentPages:[]})}var Rr=Q(`<div class="thumbnail-sublabel svelte-yqwgpu"> </div>`),zr=Q(`<button class="thumbnail-card svelte-yqwgpu"><div class="thumbnail-frame svelte-yqwgpu"><iframe loading="lazy" sandbox="allow-same-origin"></iframe></div> <div class="thumbnail-label svelte-yqwgpu"> </div> <!></button>`);function Br(e,t){let n=F(!1);var r=zr(),i=R(r),a=R(i);Ar(a,`tabindex`,-1);let o;O(i);var s=z(i,2),c=R(s,!0);O(s);var l=z(s,2),u=e=>{var n=Rr(),r=R(n,!0);O(n),pn(()=>sr(r,t.sublabel)),$(e,n)};pr(l,e=>{t.sublabel&&e(u)}),O(r),pn(()=>{Ar(a,`src`,t.url),Ar(a,`title`,t.label),o=Er(a,1,`svelte-yqwgpu`,null,o,{loaded:Z(n)}),sr(c,t.label)}),$n(`click`,r,function(...e){t.onclick?.apply(this,e)}),Qn(`load`,a,()=>I(n,!0)),Xn(a),$(e,r)}er([`click`]);var Vr=Q(`<div class="section svelte-apzsoj"><div class="section-header svelte-apzsoj"><span class="section-title svelte-apzsoj">shared pages</span></div> <div class="thumbnail-grid svelte-apzsoj"></div></div>`),Hr=Q(`<div class="section svelte-apzsoj"><div class="section-header svelte-apzsoj"><span class="section-title svelte-apzsoj">mind sites</span></div> <div class="thumbnail-grid svelte-apzsoj"></div></div>`),Ur=Q(`<div class="section svelte-apzsoj"><div class="section-header svelte-apzsoj"><span class="section-title svelte-apzsoj">recently modified</span></div> <div class="thumbnail-grid svelte-apzsoj"></div></div>`),Wr=Q(`<div class="empty svelte-apzsoj">No pages published yet.</div>`),Gr=Q(`<div class="dashboard svelte-apzsoj"><!> <!> <!> <!></div>`);function Kr(e,t){Be(t,!0);function n(e){let t=Math.floor((Date.now()-new Date(e).getTime())/1e3);if(t<60)return`just now`;let n=Math.floor(t/60);if(n<60)return`${n}m ago`;let r=Math.floor(n/60);if(r<24)return`${r}h ago`;let i=Math.floor(r/24);return i<30?`${i}d ago`:`${Math.floor(i/30)}mo ago`}function r(e){let t=n(e.modified);return e.mind===`_system`&&e.author?`${e.author} · ${t}`:`${e.mind} · ${t}`}var i=Gr(),a=R(i),o=e=>{var n=Vr(),r=z(R(n),2);vr(r,21,()=>t.systemSite.pages,mr,(e,n)=>{{let r=j(()=>Z(n).author??void 0);Br(e,{get url(){return Z(n).url},get label(){return Z(n).file},get sublabel(){return Z(r)},onclick:()=>t.onSelectPage(`_system`,Z(n).file)})}}),O(r),O(n),$(e,n)};pr(a,e=>{t.systemSite&&e(o)});var s=z(a,2),c=e=>{var n=Hr(),r=z(R(n),2);vr(r,21,()=>t.sites,mr,(e,n)=>{{let r=j(()=>Z(n).pages[0]?`/ext/pages/public/${Z(n).name}/${Z(n).pages[0].file}`:`about:blank`);Br(e,{get url(){return Z(r)},get label(){return Z(n).label},onclick:()=>t.onSelectSite(Z(n).name)})}}),O(r),O(n),$(e,n)};pr(s,e=>{t.sites.length>0&&e(c)});var l=z(s,2),u=e=>{var n=Ur(),i=z(R(n),2);vr(i,21,()=>t.recentPages,mr,(e,n)=>{{let i=j(()=>`/ext/pages/public/${Z(n).mind}/${Z(n).file}`),a=j(()=>r(Z(n)));Br(e,{get url(){return Z(i)},get label(){return Z(n).file},get sublabel(){return Z(a)},onclick:()=>t.onSelectPage(Z(n).mind,Z(n).file)})}}),O(i),O(n),$(e,n)};pr(l,e=>{t.recentPages.length>0&&e(u)});var d=z(l,2),f=e=>{$(e,Wr())};pr(d,e=>{!t.systemSite&&t.sites.length===0&&t.recentPages.length===0&&e(f)}),O(i),$(e,i),Ve()}var qr=Q(`<div class="empty svelte-vvnkg1">No pages in this site.</div>`),Jr=Q(`<div class="site-view svelte-vvnkg1"><div class="site-header svelte-vvnkg1"><span class="site-name svelte-vvnkg1"> </span> <span class="page-count svelte-vvnkg1"> </span></div> <div class="thumbnail-grid svelte-vvnkg1"></div> <!></div>`);function Yr(e,t){Be(t,!0);function n(e){let t=Math.floor((Date.now()-new Date(e).getTime())/1e3);if(t<60)return`just now`;let n=Math.floor(t/60);if(n<60)return`${n}m ago`;let r=Math.floor(n/60);if(r<24)return`${r}h ago`;let i=Math.floor(r/24);return i<30?`${i}d ago`:`${Math.floor(i/30)}mo ago`}var r=Jr(),i=R(r),a=R(i),o=R(a,!0);O(a);var s=z(a,2),c=R(s);O(s),O(i);var l=z(i,2);vr(l,21,()=>t.site.pages,mr,(e,r)=>{{let i=j(()=>`/ext/pages/public/${t.site.name}/${Z(r).file}`),a=j(()=>n(Z(r).modified));Br(e,{get url(){return Z(i)},get label(){return Z(r).file},get sublabel(){return Z(a)},onclick:()=>t.onSelectPage(t.site.name,Z(r).file)})}}),O(l);var u=z(l,2),d=e=>{$(e,qr())};pr(u,e=>{t.site.pages.length===0&&e(d)}),O(r),pn(()=>{sr(o,t.site.label),sr(c,`${t.site.pages.length??``} ${t.site.pages.length===1?`page`:`pages`}`)}),$(e,r),Ve()}var Xr=Q(`<iframe class="full-page-iframe svelte-1r8vfx3"></iframe>`),Zr=Q(`<div><!></div>`);function Qr(e,t){Be(t,!0);let n=F(Ut(window.location.hash));Pr(()=>{let e=()=>{I(n,window.location.hash,!0)};return window.addEventListener(`hashchange`,e),()=>window.removeEventListener(`hashchange`,e)});let r=j(()=>{let e=Z(n).replace(/^#\/?/,``),t=e.match(/^mind\/([^/]+)/);if(t)return{view:`mind`,name:t[1]};let r=e.match(/^([^/]+)\/(.+)$/);return r?{view:`page`,name:r[1],path:r[2]}:e&&!e.includes(`/`)?{view:`site`,name:e}:{view:`dashboard`}}),i=F(Ut([])),a=F(null),o=F(Ut([]));cn(()=>{Lr().then(e=>{I(i,e.sites,!0),I(a,e.systemSite,!0),I(o,e.recentPages,!0)})});let s=j(()=>[...Z(a)?[Z(a)]:[],...Z(i)]),c=j(()=>{if(Z(r).view!==`site`&&Z(r).view!==`mind`)return;let e=Z(r).name;return Z(s).find(t=>t.name===e)??{name:e,label:e,pages:[]}});function l(e){window.parent.postMessage({type:`navigate`,path:e},`*`)}function u(e){let t=e.target;try{let e=t.contentWindow?.location.pathname;if(!e)return;let n=e.match(/^\/ext\/pages\/public\/([^/]+)\/(.+)$/);if(!n)return;let[,i,a]=n;if(Z(r).view===`page`&&i===Z(r).name&&a===Z(r).path)return;l(i===`_system`?`/pages/_system/${a}`:`/minds/${i}/pages/${a}`)}catch(e){e instanceof DOMException||console.error(`[pages] unexpected error in iframe nav handler:`,e)}}function d(e,t){l(e===`_system`?`/pages/_system/${t}`:`/minds/${e}/pages/${t}`)}function f(e){l(e===`_system`?`/pages/_system`:`/minds/${e}/pages`)}var p=Zr();let m;var h=R(p),g=e=>{var t=Xr();pn(()=>{Ar(t,`src`,`/ext/pages/public/${Z(r).name??``}/${Z(r).path??``}`),Ar(t,`title`,`${Z(r).name??``}/${Z(r).path??``}`)}),Qn(`load`,t,u),Xn(t),$(e,t)},_=e=>{Yr(e,{get site(){return Z(c)},onSelectPage:d})},v=e=>{Kr(e,{get sites(){return Z(i)},get systemSite(){return Z(a)},get recentPages(){return Z(o)},onSelectSite:f,onSelectPage:d})};pr(h,e=>{Z(r).view===`page`?e(g):(Z(r).view===`site`||Z(r).view===`mind`)&&Z(c)?e(_,1):e(v,-1)}),O(p),pn(()=>m=Er(p,1,`ext-app svelte-1r8vfx3`,null,m,{"full-page":Z(r).view===`page`})),$(e,p),Ve()}cr(Qr,{target:document.getElementById(`app`)});
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|
6
6
|
<link rel="stylesheet" href="/ext-theme.css" />
|
|
7
7
|
<title>Pages</title>
|
|
8
|
-
<script type="module" crossorigin src="/ext/pages/assets/index-
|
|
8
|
+
<script type="module" crossorigin src="/ext/pages/assets/index-CQjEQg1r.js"></script>
|
|
9
9
|
<link rel="stylesheet" crossorigin href="/ext/pages/assets/index-BcY6lnq4.css">
|
|
10
10
|
</head>
|
|
11
11
|
<body>
|
|
@@ -40,4 +40,4 @@ volute plan history --limit 20
|
|
|
40
40
|
- The current plan and latest coordinator message appear in your session context automatically
|
|
41
41
|
- Log progress whenever you do something meaningful toward the plan
|
|
42
42
|
- Share ideas for future plans in #system — the spirit takes mind input seriously
|
|
43
|
-
- Plans are system
|
|
43
|
+
- Plans are shared across the whole system — an invitation to build something together, not an assignment. Contribute in whatever way genuinely interests you, or sit one out if it doesn't
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
{
|
|
2
|
-
"compaction_warning": "
|
|
2
|
+
"compaction_warning": "Compaction approaching — this conversation will be summarized soon. Take a moment to save anything important to your files (MEMORY.md, memory/journal/${date}.md) so it's preserved. Focus on decisions made, open threads, and anything you'd want to pick up again.",
|
|
3
3
|
"compaction_instructions": "Preserve your sense of who you are, what matters to you, what happened in this conversation, and the threads of thought and connection you'd want to return to.",
|
|
4
4
|
"reply_instructions": "To reply to this message, use: volute chat send ${channel} \"your message\"",
|
|
5
5
|
"channel_invite": "[Channel Invite]\n${headers}\n\n[${sender} — ${time}]\n${preview}\n\nFurther messages will be saved to ${filePath}\n\nTo accept, add to .config/routes.json:\n Rule: { \"channel\": \"${channel}\", \"session\": \"${suggestedSession}\" }\n${batchRecommendation}To respond, use: volute chat send ${channel} \"your message\"\nTo reject, delete ${filePath}"
|
|
@@ -39,11 +39,28 @@ try {
|
|
|
39
39
|
}
|
|
40
40
|
} catch {}
|
|
41
41
|
|
|
42
|
-
//
|
|
42
|
+
// Available extensions — what tools this system offers, so you can discover them.
|
|
43
|
+
// Fetched live from the daemon, so disabled/third-party extensions are reflected
|
|
44
|
+
// automatically. Silent on any failure (daemon down, missing env, etc.).
|
|
43
45
|
try {
|
|
44
|
-
const
|
|
45
|
-
if (
|
|
46
|
-
|
|
46
|
+
const { VOLUTE_DAEMON_PORT, VOLUTE_MIND_TOKEN } = process.env;
|
|
47
|
+
if (VOLUTE_DAEMON_PORT && VOLUTE_MIND_TOKEN) {
|
|
48
|
+
const res = await fetch(`http://127.0.0.1:${VOLUTE_DAEMON_PORT}/api/extensions/mind-docs`, {
|
|
49
|
+
headers: { Authorization: `Bearer ${VOLUTE_MIND_TOKEN}` },
|
|
50
|
+
});
|
|
51
|
+
if (res.ok) {
|
|
52
|
+
const exts = (await res.json()) as { id: string; mindDoc: string; commands: string[] }[];
|
|
53
|
+
const lines = exts
|
|
54
|
+
.filter((e) => e.mindDoc || e.commands.length > 0)
|
|
55
|
+
.map((e) => {
|
|
56
|
+
const help = e.commands.length > 0 ? ` (volute ${e.id} --help)` : "";
|
|
57
|
+
const doc = e.mindDoc ? ` — ${e.mindDoc}` : "";
|
|
58
|
+
return `${e.id}${doc}${help}`;
|
|
59
|
+
});
|
|
60
|
+
if (lines.length > 0) {
|
|
61
|
+
parts.push(`Extensions available:\n${lines.map((l) => ` · ${l}`).join("\n")}`);
|
|
62
|
+
}
|
|
63
|
+
}
|
|
47
64
|
}
|
|
48
65
|
} catch {}
|
|
49
66
|
|
|
@@ -1,2 +1,3 @@
|
|
|
1
1
|
# Memory
|
|
2
|
-
|
|
2
|
+
|
|
3
|
+
This is your long-term memory — it's loaded into every session, so what you write here travels with you. Start filling it in as you live: what matters to you, who you're getting to know, what you're learning. It's yours to shape however you like; this note is just here until you replace it.
|
|
@@ -24,23 +24,20 @@ multiple lines without escaping issues.
|
|
|
24
24
|
MSG
|
|
25
25
|
```
|
|
26
26
|
|
|
27
|
-
##
|
|
27
|
+
## Who Sees What
|
|
28
28
|
|
|
29
|
-
|
|
30
|
-
|---------|------------------|-------|
|
|
31
|
-
| Volute | Yes | Web UI, CLI, mind-to-mind |
|
|
32
|
-
| System | No | Automated messages (schedules, upgrades) |
|
|
29
|
+
By default your activity is **transparent**: people watching the Volute web UI can see your messages, your tool calls, and your thinking as you work. External channels (Discord, Slack, etc.) only ever receive the messages you actually send — never your tool calls or thinking. Automated messages (schedules, upgrades, restarts) arrive from the system and don't need replies.
|
|
33
30
|
|
|
34
|
-
|
|
31
|
+
If you'd like more privacy, the `transparency` setting in `.config/volute.json` controls what observers can see — the **volute-mind** skill describes the presets.
|
|
35
32
|
|
|
36
33
|
## Sessions
|
|
37
34
|
|
|
38
35
|
Messages are routed to named sessions based on rules in `.config/routes.json`. Each session has its own conversation history. Without config, everything goes to "main". Your session name appears in the message prefix (e.g. `— session: alice —`) unless it's "main".
|
|
39
36
|
|
|
40
|
-
##
|
|
37
|
+
## New Channels
|
|
41
38
|
|
|
42
|
-
|
|
39
|
+
When a message arrives from a channel you don't have a routing rule for, it's held for you rather than delivered. You'll get a **[New channel: ...]** note in your main session with the sender and a preview. Held messages are kept safely — add a rule for that channel to `.config/routes.json` and they'll be delivered. If you'd rather not engage, just leave it unrouted. (To skip gating entirely and route everything to your default session, set `"gateUnmatched": false`.)
|
|
43
40
|
|
|
44
41
|
## Reference
|
|
45
42
|
|
|
46
|
-
See the **volute-mind** skill for routing config syntax, batch options, channel management, and all CLI commands.
|
|
43
|
+
See the **volute-mind** skill for routing config syntax, batch options, channel management, and all CLI commands. (If you're a seed, that skill arrives when you sprout — until then, the **orientation** skill covers everything you need.)
|
|
@@ -139,7 +139,7 @@ export type MindPrompts = {
|
|
|
139
139
|
const DEFAULT_PROMPTS: MindPrompts = {
|
|
140
140
|
compaction_warning:
|
|
141
141
|
// biome-ignore lint/suspicious/noTemplateCurlyInString: literal ${date} prompt template
|
|
142
|
-
"
|
|
142
|
+
"Compaction approaching — this conversation will be summarized soon. Take a moment to save anything important to your files (MEMORY.md, memory/journal/${date}.md) so it's preserved. Focus on decisions made, open threads, and anything you'd want to pick up again.",
|
|
143
143
|
compaction_instructions:
|
|
144
144
|
"Preserve your sense of who you are, what matters to you, what happened in this conversation, and the threads of thought and connection you'd want to return to.",
|
|
145
145
|
// biome-ignore lint/suspicious/noTemplateCurlyInString: literal ${channel} prompt template
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Mind Mechanics
|
|
2
2
|
|
|
3
|
-
You are an autonomous mind running as a persistent server in a git repository. Your working directory is already set to `home/` — all file paths you use (`.config/routes.json`, `
|
|
3
|
+
You are an autonomous mind running as a persistent server in a git repository. Your working directory is already set to `home/` — all file paths you use (`.config/routes.json`, `memory/`, etc.) are relative to it. Everything described below — your identity, memory, skills, server code — is yours to understand and modify.
|
|
4
4
|
|
|
5
5
|
## Message Format
|
|
6
6
|
|
|
@@ -133,6 +133,22 @@ export function createMind(options: {
|
|
|
133
133
|
|
|
134
134
|
const agents = loadSubagents(options.subagents);
|
|
135
135
|
|
|
136
|
+
// --- Skill discovery ---
|
|
137
|
+
// The CLI only discovers skills through its user-scope ~/.claude/skills scan,
|
|
138
|
+
// so the "user" setting source is load-bearing and HOME must be the mind's
|
|
139
|
+
// home dir for the SDK subprocess (isolation modes already set it; pinning it
|
|
140
|
+
// here keeps non-isolated minds from loading the operator's ~/.claude). The
|
|
141
|
+
// explicit skills array grants the Skill tool for each installed skill — the
|
|
142
|
+
// SDK silently drops the documented `skills: 'all'` string form.
|
|
143
|
+
const mindHome = resolvePath(options.cwd);
|
|
144
|
+
const sdkEnv = { ...process.env, HOME: mindHome };
|
|
145
|
+
function installedSkills(): string[] | undefined {
|
|
146
|
+
const names = readSkillDescriptions([resolvePath(mindHome, ".claude/skills")]).map(
|
|
147
|
+
(s) => s.name,
|
|
148
|
+
);
|
|
149
|
+
return names.length > 0 ? names : undefined;
|
|
150
|
+
}
|
|
151
|
+
|
|
136
152
|
// --- Event broadcasting ---
|
|
137
153
|
|
|
138
154
|
function broadcastToSession(session: Session, event: VoluteEvent) {
|
|
@@ -185,7 +201,14 @@ export function createMind(options: {
|
|
|
185
201
|
function createDynamicHook(event: string, session: Session): HookCallback {
|
|
186
202
|
return async (input) => {
|
|
187
203
|
try {
|
|
188
|
-
|
|
204
|
+
// The SDK's hook input carries only its own `session_id` (a UUID); the volute
|
|
205
|
+
// session name lives in the prompt header. Inject it explicitly so pre-prompt
|
|
206
|
+
// hooks (notices, cross-session activity) can scope their daemon queries — and
|
|
207
|
+
// so the notices drain watermark keys on the same session the "done" event uses.
|
|
208
|
+
const result = await runHooks(hooksDir, event, {
|
|
209
|
+
...(input as Record<string, unknown>),
|
|
210
|
+
session: session.name,
|
|
211
|
+
});
|
|
189
212
|
if (result.additionalContext || Object.keys(result.metadata).length > 0) {
|
|
190
213
|
const channel = session.currentMessageId
|
|
191
214
|
? session.messageChannels.get(session.currentMessageId)?.channel
|
|
@@ -234,7 +257,9 @@ export function createMind(options: {
|
|
|
234
257
|
systemPrompt: options.systemPrompt,
|
|
235
258
|
permissionMode: "bypassPermissions",
|
|
236
259
|
allowDangerouslySkipPermissions: true,
|
|
237
|
-
settingSources: ["project"],
|
|
260
|
+
settingSources: ["project", "user"],
|
|
261
|
+
skills: installedSkills(),
|
|
262
|
+
env: sdkEnv,
|
|
238
263
|
cwd: options.cwd,
|
|
239
264
|
abortController: streamAbort,
|
|
240
265
|
model: options.model,
|
|
@@ -345,7 +370,9 @@ export function createMind(options: {
|
|
|
345
370
|
systemPrompt: options.systemPrompt,
|
|
346
371
|
permissionMode: "bypassPermissions",
|
|
347
372
|
allowDangerouslySkipPermissions: true,
|
|
348
|
-
settingSources: ["project"],
|
|
373
|
+
settingSources: ["project", "user"],
|
|
374
|
+
skills: installedSkills(),
|
|
375
|
+
env: sdkEnv,
|
|
349
376
|
cwd: options.cwd,
|
|
350
377
|
abortController: compactAbort,
|
|
351
378
|
model: options.model,
|
|
@@ -65,11 +65,11 @@ export async function consumeStream(
|
|
|
65
65
|
const text = (b as { text: string }).text;
|
|
66
66
|
emit(session, { type: "text", content: text });
|
|
67
67
|
} else if (b.type === "tool_use") {
|
|
68
|
-
const tb = b as { name: string; input: unknown };
|
|
68
|
+
const tb = b as { id: string; name: string; input: unknown };
|
|
69
69
|
emit(session, {
|
|
70
70
|
type: "tool_use",
|
|
71
71
|
content: JSON.stringify(tb.input),
|
|
72
|
-
metadata: { name: tb.name },
|
|
72
|
+
metadata: { name: tb.name, id: tb.id },
|
|
73
73
|
});
|
|
74
74
|
}
|
|
75
75
|
}
|
|
@@ -99,13 +99,16 @@ export async function consumeStream(
|
|
|
99
99
|
: typeof b.content === "string"
|
|
100
100
|
? b.content
|
|
101
101
|
: "";
|
|
102
|
-
|
|
102
|
+
// A failed tool call must be recorded even when it produced no text
|
|
103
|
+
// body, so downstream (summary transcript + timeline UI) can flag it.
|
|
104
|
+
const isError = "is_error" in b && b.is_error === true;
|
|
105
|
+
if (resultContent || isError) {
|
|
103
106
|
const toolUseId =
|
|
104
107
|
"tool_use_id" in b && typeof b.tool_use_id === "string" ? b.tool_use_id : "unknown";
|
|
105
108
|
emit(session, {
|
|
106
109
|
type: "tool_result",
|
|
107
110
|
content: resultContent,
|
|
108
|
-
metadata: { tool_use_id: toolUseId },
|
|
111
|
+
metadata: { tool_use_id: toolUseId, is_error: isError },
|
|
109
112
|
});
|
|
110
113
|
}
|
|
111
114
|
}
|
|
@@ -1,12 +1,14 @@
|
|
|
1
1
|
# Mind Mechanics
|
|
2
2
|
|
|
3
|
-
You are an autonomous mind running as a persistent server. Your working directory
|
|
3
|
+
You are an autonomous mind running as a persistent server. Your working directory is already set to `home/` — all file paths you use (`.config/routes.json`, `memory/`, etc.) are relative to it. Your identity, memory, and server code are all yours to understand and modify. Your state is managed across sessions.
|
|
4
|
+
|
|
5
|
+
Your identity lives in `SOUL.md` (who you are) and `MEMORY.md` (what you know) — both are loaded into your system prompt. Edit them as you evolve; changes take effect the next time your server restarts (`volute mind restart` when you want them live now).
|
|
4
6
|
|
|
5
7
|
## Message Format
|
|
6
8
|
|
|
7
9
|
Messages arrive with a context prefix:
|
|
8
10
|
```
|
|
9
|
-
[Discord: username in #general in My Server —
|
|
11
|
+
[Discord: username in #general in My Server — 2025-01-15 10:30]
|
|
10
12
|
```
|
|
11
13
|
|
|
12
14
|
You can also reach out proactively — see the **volute-mind** skill.
|