@sigrun/sigrun 0.4.2 → 0.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (56) hide show
  1. package/CHANGELOG.md +37 -1
  2. package/README.md +46 -23
  3. package/dist/commands/expand.js +37 -5
  4. package/dist/curation/attribution.js +135 -0
  5. package/dist/curation/deletion.js +32 -0
  6. package/dist/curation/gate.js +50 -0
  7. package/dist/curation/host.js +342 -0
  8. package/dist/curation/internal.js +54 -0
  9. package/dist/curation/names.js +5 -0
  10. package/dist/curation/overlays.js +325 -0
  11. package/dist/curation/paths.js +17 -0
  12. package/dist/curation/run-doc.js +64 -0
  13. package/dist/curation/runs.js +579 -0
  14. package/dist/curation/scan.js +30 -0
  15. package/dist/curation/skill-tool.js +308 -0
  16. package/dist/curation/store.js +444 -0
  17. package/dist/curation/targets.js +77 -0
  18. package/dist/curation/usage.js +124 -0
  19. package/dist/curation/wrap.js +212 -0
  20. package/dist/extension.d.ts +282 -0
  21. package/dist/harness/boot.js +209 -9
  22. package/dist/harness/builtins.js +12 -9
  23. package/dist/harness/event-bus.js +64 -0
  24. package/dist/harness/loader.js +114 -1
  25. package/dist/harness/naming.js +6 -0
  26. package/dist/harness/packages.js +14 -9
  27. package/dist/harness/reserved-sections.js +2 -0
  28. package/dist/harness/seam-host.js +139 -26
  29. package/dist/harness/settings.js +2 -2
  30. package/dist/harness/tools.js +70 -0
  31. package/dist/jobs/fire.js +33 -11
  32. package/dist/jobs/skills-refs.js +40 -0
  33. package/dist/sandbox/policy.js +14 -0
  34. package/dist/server/blocks/answers.js +9 -3
  35. package/dist/server/conversation-ops.js +21 -3
  36. package/dist/server/helpers.js +1 -1
  37. package/dist/server/host-bridge.js +6 -1
  38. package/dist/server/notifications.js +6 -0
  39. package/dist/server/routes/meta.js +8 -3
  40. package/dist/server/routes/submissions.js +5 -0
  41. package/dist/server/routes/surfaces.js +3 -1
  42. package/dist/server/routes/users.js +7 -0
  43. package/dist/server/schema-fixture.js +168 -0
  44. package/dist/server/session-meta.js +12 -10
  45. package/dist/settings/core-sections.js +9 -0
  46. package/dist/settings/registry.js +6 -0
  47. package/dist/skills/index.js +88 -19
  48. package/node_modules/@sigrun/shared/CHANGELOG.md +3 -1
  49. package/node_modules/@sigrun/shared/dist/access.d.ts +3 -0
  50. package/node_modules/@sigrun/shared/dist/access.js +8 -0
  51. package/node_modules/@sigrun/shared/dist/session-meta.d.ts +15 -4
  52. package/node_modules/@sigrun/shared/dist/settings.d.ts +7 -5
  53. package/node_modules/@sigrun/shared/package.json +1 -1
  54. package/package.json +9 -7
  55. package/webui/dist/assets/{index-DWmsAQl2.js → index-BtczbUXo.js} +1 -1
  56. package/webui/dist/index.html +1 -1
@@ -52,4 +52,4 @@ Error generating stack: `+e.message+`
52
52
 
53
53
  `)},`note:${e.entryId}`)}return null}),(0,R.jsx)(rd,{kind:`assistant`,text:n.text,onFork:u,meta:dh(n.entries)})]})}function ph(e,t){for(let n of e)if(n.kind===`pi.assistant`)for(let e of n.model??[]){let n=e.content;if(typeof n!=`string`)for(let e of n){if(e.type!==`toolCall`)continue;let n=e;if(n.id===t)return typeof n.arguments==`string`?n.arguments:n.arguments===void 0?void 0:JSON.stringify(n.arguments)}}}function mh(e){let{entry:t}=e,n=(t.data??{}).reason;return(0,R.jsx)(`div`,{className:`turn-compaction`,"data-reason":n,title:n===void 0?void 0:`context compacted (${n})`,children:(0,R.jsx)(`span`,{children:`Context compacted`})})}function hh(e){return(0,R.jsx)(`div`,{className:`entry entry-system`,children:(e.entry.model??[]).map(e=>Fm(e)).filter(e=>e!==``).join(` `)})}function gh(e){if(e.kind!==`sigrun.blocks.answer`)return;let t=e.data;if(typeof t!=`object`||!t)return;let n=t.entryId,r=t.action;if(typeof n!=`string`||n===``||typeof r!=`string`||r===``)return;let i=t.payload,a=t.state;return{entryId:n,action:r,...i===void 0?{}:{payload:i},...a===void 0?{}:{state:a}}}function _h(e){if(typeof e!=`object`||!e)return;let t=e.title;return typeof t==`string`&&t!==``?t:void 0}function vh(e){return(e.model??[]).map(e=>Fm(e)).filter(e=>e!==``).join(`
54
54
 
55
- `)}function yh(e){return ke(e)?.typed??vh(e)}function bh(e){let[t,n]=(0,v.useState)(!1),{expanded:r,fullText:i}=e;return(0,R.jsxs)(`div`,{className:`entry-expanded`,children:[(0,R.jsxs)(`button`,{type:`button`,className:`entry-expanded-chip`,"aria-expanded":t,title:t?`Hide the expanded text`:`Show the expanded text`,onClick:()=>n(!t),children:[`expanded from /`,r.command??`…`]}),t&&(0,R.jsx)(`div`,{className:`entry-expanded-text`,children:(0,R.jsx)(md,{source:i,variant:`bubble`})})]})}function xh(e){let{entry:t}=e,n=ke(t),r=gh(t),i=r===void 0?void 0:(e.entries??[]).find(e=>e.kind===`sigrun.blocks`&&String(e.id)===r.entryId),a=i===void 0?void 0:_h(i.data);return(0,R.jsxs)(`div`,{className:`turn turn-user`,"data-turn-kind":`user`,"data-entry-id":t.id,children:[(0,R.jsxs)(`div`,{className:`entry-user`,children:[n===void 0?(t.model??[]).map((e,t)=>(0,R.jsxs)(`div`,{className:`entry-user-message`,children:[(0,R.jsx)(md,{source:Fm(e),variant:`bubble`}),Lm(e).map((e,t)=>(0,R.jsxs)(`span`,{className:`entry-attachment`,children:[`[`,e.type,`: `,e.path??`?`,`]`]},t))]},t)):(0,R.jsxs)(`div`,{className:`entry-user-message`,children:[(0,R.jsx)(md,{source:n.typed,variant:`bubble`}),(t.model??[]).flatMap(e=>Lm(e).map((e,t)=>(0,R.jsxs)(`span`,{className:`entry-attachment`,children:[`[`,e.type,`: `,e.path??`?`,`]`]},t)))]}),n!==void 0&&(0,R.jsx)(bh,{expanded:n,fullText:vh(t)}),r!==void 0&&(0,R.jsxs)(`span`,{className:`entry-answer-chip`,"data-answer-entry":r.entryId,children:[`from `,a??`entry ${r.entryId}`]})]}),(0,R.jsx)(rd,{kind:`user`,text:yh(t),onFork:e.onFork,onEdit:e.onEdit})]})}function Sh(e){return e.docs[`pi.live`]}function Ch(e){return Sh(e)?.tools??[]}function wh(e){let t=Sh(e)?.generation?.message;if(typeof t==`object`&&t)return t}function Th(e){return Sh(e)?.compactions?.length??0}function Eh(e){let t=Sh(e)?.compactionFailure;if(typeof t!=`object`||!t)return;let n=t.error;return typeof n==`string`&&n!==``?n:void 0}function Dh(e){return e}function Oh(e){return Ch(Dh(e))}function kh(e){return wh(Dh(e))}function Ah(e){return Th(Dh(e))}function jh(e){return Eh(Dh(e))}var Mh=-1;function Nh(e){let t=e.content;return typeof t==`string`?[]:t.filter(e=>e.type===`toolCall`).map(e=>{let t=e;return{callId:t.id??``,name:t.name??``,preview:Pe(t.name??``,t.arguments),isError:!1}})}function Ph(e,t){return{entries:[{id:Mh,conversationId:e,kind:`pi.assistant`,model:[t]}],thinking:Im(t),tools:Nh(t),text:Fm(t),lastEntryId:Mh,timeline:Fh(t)}}function Fh(e){let t=[];for(let n of Im(e))t.push({kind:`thinking`,text:n});for(let n of Nh(e))t.push({kind:`tool`,tool:n});let n=Fm(e);return n!==``&&t.push({kind:`text`,text:n}),t}function Ih(e){let{view:t,showThinking:n,timeline:r,parent:i,onNavigate:a,client:o}=e,s=t.conversation.id,c=Oh(t),l=kh(t),u=je(t.entries),d=u[u.length-1],f=l!==void 0&&d!==void 0&&d.kind===`assistant`;if(f&&d!==void 0&&d.kind===`assistant`){let e=Fm(l),t=Nh(l).filter(e=>!d.tools.some(t=>t.callId===e.callId));u[u.length-1]={...d,text:d.text===``?e:`${d.text}\n\n${e}`,thinking:[...d.thinking,...Im(l)],tools:[...d.tools,...t],timeline:[...d.timeline,...Im(l).map(e=>({kind:`thinking`,text:e})),...t.map(e=>({kind:`tool`,tool:e})),...e===``?[]:[{kind:`text`,text:e}]]}}let p=e=>()=>{o.fork(s,e).then(e=>a(e.id)).catch(e=>console.error(`fork from conversation ${s} failed:`,e))};return(0,R.jsxs)(`div`,{className:`turn-list`,children:[i!==void 0&&(0,R.jsxs)(`button`,{type:`button`,className:`turn-lineage`,onClick:()=>a(i.id),children:[`Forked from `,i.name]}),u.map((e,i)=>e.kind===`user`?(0,R.jsx)(Lh,{entry:e.entry,entries:t.entries,view:t,client:o,conversationId:s,onNavigate:a,forkFrom:p},e.entry.id):e.kind===`assistant`?(0,R.jsx)(fh,{conversationId:s,turn:e,slots:c,showThinking:n,client:o,onNavigate:a,live:f&&i===u.length-1,timeline:r},e.lastEntryId):(0,R.jsx)(Rh,{entry:e.entry},e.entry.id)),l!==void 0&&!f&&(0,R.jsx)(fh,{conversationId:s,turn:Ph(s,l),slots:c,showThinking:n,client:o,onNavigate:a,live:!0},Mh)]})}function Lh(e){let{entry:t,entries:n,view:r,client:i,conversationId:a,onNavigate:o,forkFrom:s}=e;return(0,R.jsx)(xh,{entry:t,entries:n,onFork:s(t.id),onEdit:()=>{let e=r.entries[r.entries.findIndex(e=>e.id===t.id)-1];(e===void 0?i.createConversation():i.fork(a,e.id)).then(async e=>{await i.patchConversationMeta(e.id,{draft:{text:yh(t)}}),o(e.id)}).catch(e=>console.error(`edit-in-new-conversation failed:`,e))}})}function Rh(e){let{entry:t}=e,n=t.kind===`pi.compaction`?`compaction`:t.kind===`pi.system`?`system`:`other`;return(0,R.jsx)(`div`,{className:`turn turn-other`,"data-turn-kind":n,children:t.kind===`pi.compaction`?(0,R.jsx)(mh,{entry:t}):t.kind===`pi.system`?(0,R.jsx)(hh,{entry:t}):(0,R.jsxs)(`div`,{className:`entry entry-unknown`,children:[`unsupported entry kind: `,t.kind,` —`,` `,(t.model??[]).map(e=>Fm(e)).filter(e=>e!==``).join(` `)]})})}function zh(e){let t=ah(e.transport),n=navigator.language,r=(0,v.useMemo)(()=>({dispatch:t.dispatch,access:t.access,rev:t.rev,viewState:typeof t.view.view==`object`&&t.view.view!==null&&!Array.isArray(t.view.view)?t.view.view:{},setView:t.setView,serverErrors:t.serverErrors}),[t.dispatch,t.access,t.rev,t.view,t.setView,t.serverErrors]);return t.status===`loading`?(0,R.jsx)(`div`,{className:`blk-surface`,"data-surface":`loading`,children:(0,R.jsx)(`p`,{children:`loading…`})}):t.status===`notFound`?(0,R.jsx)(`div`,{className:`blk-surface`,"data-surface":`not-found`,children:(0,R.jsx)(`p`,{children:`surface not found`})}):t.status===`error`?(0,R.jsxs)(`div`,{className:`blk-surface`,"data-surface":`error`,role:`alert`,children:[(0,R.jsx)(`p`,{children:`something went wrong`}),(0,R.jsx)(`button`,{type:`button`,"data-surface-retry":``,onClick:()=>t.retry(),children:`Retry`})]}):(0,R.jsx)(`div`,{className:`blk-surface`,"data-surface":`ready`,children:(0,R.jsx)(Re.Provider,{value:{data:t.view,locale:n},children:(0,R.jsxs)(ze.Provider,{value:r,children:[(0,R.jsx)(Ye,{children:t.tree!==void 0&&(0,R.jsx)(Vp,{block:t.tree.root})}),t.toasts.map((e,t)=>(0,R.jsx)(`p`,{className:`blk-surface-toast`,role:`status`,children:e},t))]})})})}var Bh=Object.assign({"../../../test/fixtures/blocks/ambient-footer.json":{v:1,root:{type:`columns`,id:`ambient-footer`,children:[{block:{type:`markdown`,text:`left`}},{block:{type:`stat`,label:`Queue`,value:3}},{block:{type:`markdown`,text:`right`}}]}},"../../../test/fixtures/blocks/ambient-panel.json":{v:1,root:{type:`stack`,id:`ambient-panel`,children:[{type:`collection`,id:`checks`,items:[{id:`c1`,name:`lint`,state:`passed`,busy:!1,tone:`good`},{id:`c2`,name:`tests`,state:`running`,busy:!0,tone:`neutral`}],display:`list`,item:{title:{$:`./name`},status:{label:{$:`./state`},spinner:{$:`./busy`}},tone:{$:`./tone`}}},{type:`log`,lines:[{at:1,level:`info`,text:`3 checks running`},{at:2,level:`error`,text:`rollback failed`}]},{type:`meter`,value:62,format:`percent`},{type:`details`,value:{ok:!0}}]}},"../../../test/fixtures/blocks/ambient-status.json":{v:1,root:{type:`markdown`,id:`ambient-status`,text:`glm-5.3-flash · main* · $0.0421`}},"../../../test/fixtures/blocks/callout.json":{v:1,root:{type:`callout`,id:`callout`,tone:`warn`,title:`Degraded`,body:`acme upstream is slow`,actions:[{id:`open`,label:`Open console`,icon:`external`,action:{type:`open`,url:`https://example.invalid/console`}},{id:`copy`,label:`Copy id`,action:{type:`copy`,text:`acme-42`}}]}},"../../../test/fixtures/blocks/chart.json":{v:1,root:{type:`chart`,id:`chart`,title:`Throughput`,x:{kind:`time`,format:`time`},y:{unit:`req/s`,min:0},series:[{name:`acme`,kind:`area`,data:{$:`/series/acme`}},{name:`Baseline`,kind:`line`,data:[[0,10],[60,12],[120,11]]}],stacked:!1,thresholds:[{at:20,tone:`warn`,label:`SLO`}]}},"../../../test/fixtures/blocks/chat-message.json":{v:1,root:{type:`stack`,id:`chat-message`,children:[{type:`markdown`,text:`acme ranking draft`},{type:`collection`,id:`rank`,items:{$:`/songs`},display:`list`,numbered:!0,reorder:{within:!0},onMove:`reorderSong`,item:{title:{$:`./title`},meta:[{person:{user:`user:example`,name:`Example`}}]}},{type:`form`,id:`use`,bind:`/reply`,mode:`submit`,onSubmit:`useOrder`,submitLabel:`Use this order`,turn:!0,children:[{type:`toggle`,name:`confirm`,label:`Confirm`}]}]}},"../../../test/fixtures/blocks/collection-calendar.json":{v:1,root:{type:`collection`,id:`collection-calendar`,items:{$:`/events`},display:`calendar`,time:{start:`startsAt`,end:`endsAt`,allDay:`allDay`,range:`month`,onResize:`resizeEvent`,onCreate:`createEvent`},item:{title:{$:`./title`}}}},"../../../test/fixtures/blocks/collection-grid.json":{v:1,root:{type:`collection`,id:`collection-grid`,items:{$:`/shots`},display:`grid`,overflow:`wrap`,item:{title:{$:`./title`},image:{$:`./image`}}}},"../../../test/fixtures/blocks/collection-lanes.json":{v:1,root:{type:`collection`,id:`collection-lanes`,items:{$:`/cards`},display:`lanes`,groupBy:`state`,groups:[{id:`todo`,title:`To do`,tone:`neutral`},{id:`doing`,title:`Doing`,tone:`info`,collapsed:!1}],reorder:{within:!0,across:!0},onMove:`moveCard`,onActivate:{type:`navigate`,params:{id:`acme`}},item:{title:{$:`./title`},tone:{$:`./tone`}}}},"../../../test/fixtures/blocks/collection-list.json":{v:1,root:{type:`collection`,id:`collection-list`,items:{$:`/cards`},display:`list`,numbered:!0,checkable:`done`,onCheck:`toggleDone`,children:`subtasks`,item:{eyebrow:{$:`./eyebrow`},title:{$:`./title`},subtitle:{$:`./subtitle`},body:{$:`./body`},icon:`file`,badges:[{text:{$:`./badge`},tone:`info`}],meta:[{icon:`clock`,text:{$:`./when`}},{person:{user:{$:`./user`},name:{$:`./userName`}}},{time:{$:`./at`},format:`datetime`}],metrics:[{label:`Score`,value:{$:`./score`},format:`number`}],tone:`accent`,status:{label:{$:`./state`},tone:`good`,spinner:{$:`./busy`}},quiet:{$:`./quiet`},deps:{$:`./deps`}}}},"../../../test/fixtures/blocks/collection-literal.json":{v:1,root:{type:`collection`,id:`collection-literal`,items:[{id:`row-1`,title:`acme provision`,state:`todo`,quiet:!1},{id:`row-2`,title:`acme build`,state:`doing`,quiet:!0}],display:`list`,item:{title:{$:`./title`},status:{label:{$:`./state`}},quiet:{$:`./quiet`}}}},"../../../test/fixtures/blocks/collection-table.json":{v:1,root:{type:`collection`,id:`collection-table`,items:{$:`/rows`},display:`table`,select:`multi`,sort:{field:`name`,dir:`asc`},bulkActions:[{id:`set-state`,label:`Set state`,icon:`edit`,onSubmit:`setState`,form:{v:1,root:{type:`form`,id:`set-state-form`,bind:`/bulk`,mode:`submit`,onSubmit:`setState`,children:[{type:`text`,name:`state`,label:`State`}]}}}],columns:[{field:`name`,label:`Name`,sortable:!0,priority:`high`},{field:`load`,label:`Load`,format:`percent`,cell:`meter`,priority:`low`},{field:`state`,label:`State`,cell:`badge`,width:`s`}],item:{title:{$:`./name`}}}},"../../../test/fixtures/blocks/columns.json":{v:1,root:{type:`columns`,id:`columns`,children:[{weight:2,minWidth:`m`,block:{type:`markdown`,text:`left`}},{weight:1,block:{type:`stat`,label:`Load`,value:.42,format:`percent`,size:`m`,icon:`clock`}}]}},"../../../test/fixtures/blocks/details.json":{v:1,root:{type:`details`,id:`details`,value:{host:`acme.example`,tags:[`a`,`b`],nested:{ok:!0}}}},"../../../test/fixtures/blocks/diff.json":{v:1,root:{type:`diff`,id:`diff`,before:`const a = 1;`,after:`const a = 2;`,path:`src/acme.ts`,lang:`ts`}},"../../../test/fixtures/blocks/field-choice.json":{v:1,root:{type:`form`,id:`form-choice`,bind:`/values`,mode:`submit`,children:[{type:`choice`,name:`pick`,label:`Pick`,multi:!0,options:[{id:`a`,label:`A`,description:`first`},{id:`b`,label:`B`,tone:`good`}]}]}},"../../../test/fixtures/blocks/field-date.json":{v:1,root:{type:`form`,id:`form-date`,bind:`/values`,mode:`submit`,children:[{type:`date`,name:`on`,label:`On`}]}},"../../../test/fixtures/blocks/field-daterange.json":{v:1,root:{type:`form`,id:`form-daterange`,bind:`/values`,mode:`submit`,children:[{type:`daterange`,name:`range`,label:`Range`,presets:[{id:`today`,label:`Today`,duration:`P1D`}]}]}},"../../../test/fixtures/blocks/field-datetime.json":{v:1,root:{type:`form`,id:`form-datetime`,bind:`/values`,mode:`submit`,children:[{type:`datetime`,name:`at`,label:`At`}]}},"../../../test/fixtures/blocks/field-file.json":{v:1,root:{type:`form`,id:`form-file`,bind:`/values`,mode:`submit`,children:[{type:`file`,name:`logo`,label:`Logo`,accept:`image/png`,multi:!0,onUpload:`uploadLogo`}]}},"../../../test/fixtures/blocks/field-list.json":{v:1,root:{type:`form`,id:`form-list`,bind:`/values`,mode:`submit`,children:[{type:`list`,name:`members`,label:`Members`,item:{type:`text`,name:`name`,label:`Name`},reorder:!0}]}},"../../../test/fixtures/blocks/field-longtext.json":{v:1,root:{type:`form`,id:`form-longtext`,bind:`/values`,mode:`submit`,children:[{type:`longtext`,name:`notes`,label:`Notes`,syntax:`markdown`,lang:`md`,rows:8,maxLength:4e3}]}},"../../../test/fixtures/blocks/field-number.json":{v:1,root:{type:`form`,id:`form-number`,bind:`/values`,mode:`submit`,children:[{type:`number`,name:`port`,label:`Port`,min:1,max:65535,step:1,format:`number`}]}},"../../../test/fixtures/blocks/field-secret.json":{v:1,root:{type:`form`,id:`form-secret`,bind:`/values`,mode:`submit`,children:[{type:`secret`,name:`apiKey`,label:`API key`}]}},"../../../test/fixtures/blocks/field-text.json":{v:1,root:{type:`form`,id:`form-text`,bind:`/values`,mode:`submit`,children:[{type:`text`,name:`name`,label:`Name`,kind:`email`,suggest:{$:`/suggestions`},required:!0,minLength:2,placeholder:`acme@example.invalid`}]}},"../../../test/fixtures/blocks/field-toggle.json":{v:1,root:{type:`form`,id:`form-toggle`,bind:`/values`,mode:`live`,children:[{type:`toggle`,name:`dark`,label:`Dark mode`,disabled:!1}]}},"../../../test/fixtures/blocks/fields.json":{v:1,root:{type:`fields`,id:`fields`,rows:[{label:`Host`,value:`acme.example`},{label:`Errors`,value:2,tone:`bad`,icon:`error`}]}},"../../../test/fixtures/blocks/form-chat.json":{v:1,root:{type:`form`,id:`form-chat`,bind:`/reply`,mode:`submit`,onSubmit:`sendReply`,submitLabel:`Send`,turn:!0,children:[{type:`choice`,name:`answer`,label:`Answer`,options:[{id:`yes`,label:`Yes`,preview:`proceed with the acme plan`},{id:`no`,label:`No`,tone:`bad`}]},{type:`longtext`,name:`reason`,label:`Reason`,syntax:`plain`}]}},"../../../test/fixtures/blocks/form-inline.json":{v:1,root:{type:`form`,id:`form-inline`,bind:`/view/quick`,mode:`inline`,onSubmit:`addQuick`,submitLabel:`Add`,children:[{type:`text`,name:`title`,label:`Title`,placeholder:`new item`,kind:`search`}]}},"../../../test/fixtures/blocks/form-interaction.json":{v:1,root:{type:`form`,id:`form-interaction`,bind:`/values`,mode:`submit`,onSubmit:`answer`,submitLabel:`Answer`,children:[{type:`section`,title:`Approve`,children:[{type:`choice`,name:`verdict`,label:`Verdict`,options:[{id:`allow`,label:`Allow`,tone:`good`,recommended:!0,preview:`run it`},{id:`deny`,label:`Deny`,tone:`bad`}]}]},{type:`longtext`,name:`reason`,label:`Reason`,required:!0},{type:`secret`,name:`token`,label:`Token`,help:`optional`}]}},"../../../test/fixtures/blocks/form-settings.json":{v:1,root:{type:`form`,id:`form-settings`,bind:`/settings`,mode:`submit`,onSubmit:`saveSettings`,children:[{type:`text`,name:`host`,label:`Host`,apply:`live`},{type:`choice`,name:`plan`,label:`Plan`,options:[{id:`basic`,label:`Basic`},{id:`pro`,label:`Pro`,recommended:!0}]},{type:`toggle`,name:`verbose`,label:`Verbose`,apply:`restart`},{type:`date`,name:`since`,label:`Since`},{type:`datetime`,name:`at`,label:`At`,min:0},{type:`daterange`,name:`window`,label:`Window`,presets:[{id:`7d`,label:`Last 7 days`,duration:`P7D`}]},{type:`list`,name:`hosts`,label:`Hosts`,reorder:!0,min:1,max:10,item:{type:`text`,name:`host`,label:`Host`,pattern:`^[a-z].*$`}}]}},"../../../test/fixtures/blocks/form-upload.json":{v:1,root:{type:`form`,id:`form-upload`,bind:`/upload`,mode:`submit`,onSubmit:`saveUpload`,children:[{type:`file`,name:`avatar`,label:`Avatar`,accept:`image/*`,maxBytes:1048576,onUpload:`uploadAvatar`}]}},"../../../test/fixtures/blocks/form-view.json":{v:1,root:{type:`form`,id:`form-view`,bind:`/view/filter`,mode:`live`,children:[{type:`choice`,name:`state`,label:`State`,multi:!1,allowOther:{label:`Other`},options:[{id:`all`,label:`All`,description:`every item`,recommended:!0},{id:`open`,label:`Open`,tone:`info`}]}]}},"../../../test/fixtures/blocks/form.json":{v:1,root:{type:`form`,id:`form`,bind:`/form`,mode:`submit`,onSubmit:`saveForm`,submitLabel:`Save`,children:[{type:`section`,title:`Basics`,children:[{type:`text`,name:`title`,label:`Title`,required:!0,maxLength:80}]},{type:`longtext`,name:`notes`,label:`Notes`,syntax:`markdown`,rows:4,help:`markdown ok`},{type:`number`,name:`retries`,label:`Retries`,min:0,max:5,step:1},{type:`toggle`,name:`enabled`,label:`Enabled`,help:`run the acme loop`}]}},"../../../test/fixtures/blocks/grid.json":{v:1,root:{type:`grid`,id:`grid`,minItemWidth:`m`,children:[{span:2,block:{type:`stat`,label:`Wide`,value:12,sparkline:[1,2,3]}},{block:{type:`stat`,label:`Narrow`,value:3}},{span:`full`,block:{type:`markdown`,text:`full row`}}]}},"../../../test/fixtures/blocks/image.json":{v:1,root:{type:`image`,id:`image`,src:`asset:acme/diagram.png`,alt:`acme cluster diagram`}},"../../../test/fixtures/blocks/interaction-form.json":{v:1,root:{type:`form`,id:`interaction-body`,bind:`/values`,mode:`submit`,onSubmit:`answer`,submitLabel:`Answer`,children:[{type:`section`,title:`Proceed?`,children:[{type:`choice`,name:`proceed`,label:`Proceed`,options:[{id:`yes`,label:`Yes`,tone:`good`,preview:`deploy to acme`},{id:`no`,label:`No`,tone:`bad`}]}]},{type:`text`,name:`note`,label:`Note`}]}},"../../../test/fixtures/blocks/log-literal.json":{v:1,root:{type:`log`,id:`log-literal`,lines:[{at:1,level:`info`,text:`deploy started`},{at:2,level:`warn`,text:`cache cold`},{at:3,level:`error`,text:`rollback failed`}],follow:!0,wrap:!1,tones:{error:`bad`,warn:`warn`,info:`neutral`}}},"../../../test/fixtures/blocks/log.json":{v:1,root:{type:`log`,id:`log`,lines:{$:`/lines`},follow:!0,wrap:!1,tones:{error:`bad`,warn:`warn`,info:`neutral`}}},"../../../test/fixtures/blocks/markdown.json":{v:1,root:{type:`markdown`,id:`markdown`,text:`acme **status** at [example.invalid](https://example.invalid/x)`}},"../../../test/fixtures/blocks/meter-literal.json":{v:1,root:{type:`meter`,id:`meter-literal`,value:.62,min:0,max:1,label:`Disk`,format:`percent`,thresholds:[{at:.8,tone:`warn`},{at:.95,tone:`bad`}]}},"../../../test/fixtures/blocks/meter.json":{v:1,root:{type:`meter`,id:`meter`,value:{$:`/disk`},min:0,max:1,label:`Disk`,format:`percent`,thresholds:[{at:.8,tone:`warn`},{at:.95,tone:`bad`}]}},"../../../test/fixtures/blocks/page-sidebar.json":{v:1,root:{type:`page`,id:`page`,title:{$:`/title`},subtitle:`with a sidebar`,sidebar:[{type:`tree`,nodes:{$:`/nav`}}],main:[{type:`markdown`,text:`board body`}]}},"../../../test/fixtures/blocks/page.json":{v:1,root:{type:`page`,title:`Jobs`,subtitle:`acme queue`,actions:[{id:`refresh`,label:`Refresh`,icon:`refresh`,action:{type:`edit`,name:`refresh`}}],main:[{type:`section`,title:`Active`,children:[{type:`markdown`,text:`acme jobs run **here**`},{type:`fields`,rows:[{label:`Queue`,value:`acme`},{label:`State`,value:`running`,tone:`info`}]}]}],detail:[{type:`diff`,before:`a`,after:`b`,lang:`ts`},{type:`details`,value:{kind:`acme`,count:3}}],empty:{icon:`check`,title:`All done`,hint:`no pending jobs`},id:`page`}},"../../../test/fixtures/blocks/section.json":{v:1,root:{type:`section`,title:`Group`,subtitle:`subtitle`,tone:`info`,collapsible:!0,collapsed:!1,children:[{type:`markdown`,text:`in section`},{type:`callout`,id:`section-callout`,tone:`warn`,title:`Careful`,body:`acme maintenance at 02:00`,actions:[{id:`ack`,label:`Acknowledge`,action:{type:`edit`,name:`ack`}}]}]}},"../../../test/fixtures/blocks/stack.json":{v:1,root:{type:`stack`,id:`stack`,gap:`m`,visibleAt:`atLeast:regular`,children:[{type:`markdown`,text:`stacked`},{type:`fields`,rows:[{label:`L`,value:1}]}]}},"../../../test/fixtures/blocks/stat-literal.json":{v:1,root:{type:`stat`,id:`stat-literal`,label:`Latency`,value:42,unit:`ms`,format:`number`,tone:`good`,icon:`clock`,size:`l`,caption:`p95 over 5m`,sparkline:[30,42,38,51,44]}},"../../../test/fixtures/blocks/stat.json":{v:1,root:{type:`stat`,id:`stat`,label:`Latency`,value:{$:`/latency`},unit:`ms`,format:`number`,tone:`good`,icon:`clock`,size:`l`,caption:`p95 over 5m`,sparkline:[30,42,38,51,44]}},"../../../test/fixtures/blocks/tree.json":{v:1,root:{type:`tree`,id:`tree`,nodes:{$:`/nodes`},onExpand:`expandNode`,onActivate:{type:`navigate`,params:{node:`acme`}}}}}),Vh=[{id:`card-1`,title:`acme provision`,state:`todo`,done:!1,eyebrow:`acme/queue`,subtitle:`spin the example.invalid runner`,body:`clone the repo, mount the volume`,badge:`queue`,when:`today`,user:`u1`,userName:`acme ops`,at:`2026-10-19T09:00:00Z`,score:3,quiet:!1,busy:!1,deps:[],tone:`info`,subtasks:[]},{id:`card-2`,title:`acme build`,done:!0,eyebrow:`acme/ci`,subtitle:`build the release`,body:`vite build && vitest`,badge:`ci`,when:`yesterday`,user:`acme-ops`,userName:`acme ops`,at:`2026-10-18T17:00:00Z`,score:9,state:`doing`,quiet:!0,busy:!1,deps:[`card-1`],tone:`good`,subtasks:[]},{id:`card-3`,title:`acme deploy`,done:!1,eyebrow:`acme/cd`,subtitle:`ship to example.invalid`,body:`helm upgrade`,badge:`cd`,when:`tomorrow`,user:`acme-cd`,userName:`acme deploy`,at:`2026-10-20T12:00:00Z`,score:5,state:`doing`,quiet:!1,busy:!0,deps:[`card-2`],tone:`warn`,subtasks:[{id:`card-3a`,title:`acme smoke`,done:!1,state:`todo`,subtasks:[]}]}];function Hh(e){let t={cards:Vh,title:`acme board`,nav:[{id:`n1`,label:`Board`,icon:`folder`,children:[{id:`n1a`,label:`Active`}]},{id:`n2`,label:`Archive`,hasChildren:!1}],filter:{state:`open`}};return e===`collection-calendar`?{...t,cards:[{id:`ev-1`,title:`acme sync`,start:`2026-10-19T10:00:00Z`,end:`2026-10-19T11:00:00Z`},{id:`ev-2`,title:`acme review`,start:`2026-10-21T14:00:00Z`,end:`2026-10-21T15:30:00Z`}]}:t}var Uh=Object.keys(Bh).filter(e=>e.endsWith(`.json`)).map(e=>{let t=e.slice(e.lastIndexOf(`/`)+1,e.length-5),n=Bh[e];return t===`form-view`?{name:t,tree:{v:1,root:{type:`stack`,children:[n.root,{type:`markdown`,text:"filter.state = `{$}` bound to `/view/filter/state`:"},{type:`markdown`,text:{$:`/view/filter/state`}}]}},data:Hh(t)}:{name:t,tree:n,data:Hh(t)}}).sort((e,t)=>e.name.localeCompare(t.name));function Wh(e){let t=1,n=new Set;return{load:async()=>({tree:e.tree,data:e.data,rev:t,treeRev:1,access:`write`}),fetchData:async()=>({rev:t,treeRev:1}),act:async()=>(t+=1,{ok:!0,rev:t}),upload:async()=>(t+=1,{ok:!0,rev:t}),image:async()=>new Uint8Array,onChanged:()=>()=>{n.clear()}}}function Gh(e){let t=(0,v.useMemo)(()=>Wh(e.sample),[e.sample]);return(0,R.jsxs)(`div`,{className:`gallery-sample`,"data-gallery-sample":e.sample.name,children:[(0,R.jsx)(`h2`,{children:e.sample.name}),(0,R.jsx)(zh,{transport:t})]})}function Kh(){return Jh(globalThis.location?.hash??``)}function qh(){let[e,t]=(0,v.useState)(()=>Kh());(0,v.useEffect)(()=>{let e=globalThis,n=()=>t(Kh());return e.addEventListener?.(`hashchange`,n),()=>e.removeEventListener?.(`hashchange`,n)},[]);let n=e=>{t(e),globalThis.history?.pushState(null,``,`#/blocks/${e}`)},r=Uh.find(t=>t.name===e);return(0,R.jsxs)(`div`,{className:`gallery`,"data-gallery":``,children:[(0,R.jsxs)(`aside`,{className:`gallery-list`,children:[(0,R.jsx)(`h1`,{children:`Blocks`}),(0,R.jsx)(`ul`,{children:Uh.map(e=>(0,R.jsx)(`li`,{children:(0,R.jsx)(`button`,{type:`button`,"data-gallery-entry":e.name,onClick:()=>n(e.name),children:e.name})},e.name))})]}),(0,R.jsx)(`main`,{className:`gallery-main`,children:r===void 0?(0,R.jsx)(`p`,{className:`gallery-hint`,children:`Pick a block sample — every entry renders through the real renderer over an in-memory surface.`}):(0,R.jsx)(Gh,{sample:r})})]})}function Jh(e){let t=/^#\/blocks\/(.+)$/.exec(e);return t===null?null:decodeURIComponent(t[1]??``)}var Yh=3e5;function Xh(){return globalThis.document?.visibilityState!==`hidden`}function Zh(e){let t=e.cards;return Array.isArray(t)&&t.every(e=>typeof e==`object`&&!!e&&typeof e.id==`string`&&typeof e.status==`string`)}function Qh(e){let t=e.main;if(!Array.isArray(t))return[];for(let e of t){let t=e?.groups;if(t!==void 0)return t}return[]}function $h(e){let[t,n]=(0,v.useState)({status:`loading`}),r=(0,v.useRef)(0),i=(0,v.useRef)(void 0),a=(0,v.useCallback)(async()=>{let t=r.current,i=await e.transport.fetchData(t);if(i.data===void 0&&i.ops!==void 0&&(i=await e.transport.fetchData()),i.data===void 0)return;let a=i.data;r.current=Math.max(r.current,i.rev),n(e=>e.status===`ready`?{...e,rev:i.rev,treeRev:i.treeRev,data:a}:e)},[e.transport]);(0,v.useEffect)(()=>{let t=!0;n({status:`loading`}),e.transport.load().then(e=>{if(t){if(e.access===`none`){n({status:`not-found`});return}r.current=e.rev,i.current=e.tree,n({status:`ready`,title:tg(e.tree),data:e.data,rev:e.rev,treeRev:e.treeRev,access:e.access})}}).catch(e=>{t&&n({status:`failed`,message:e instanceof Error?e.message:String(e)})});let o=e.transport.onChanged(()=>{a().catch(()=>void 0)}),s,c=()=>{e.refreshMs!==void 0&&s===void 0&&(s=setInterval(()=>{t&&a().catch(()=>void 0)},e.refreshMs))},l=()=>{s!==void 0&&clearInterval(s),s=void 0},u,d=()=>{u===void 0&&(u=setInterval(()=>{t&&a().catch(()=>void 0)},Yh))},f=()=>{u!==void 0&&clearInterval(u),u=void 0},p=globalThis.document,m=()=>{Xh()?(c(),d(),a().catch(()=>void 0)):(l(),f())};return Xh()&&(c(),d()),p?.addEventListener(`visibilitychange`,m),()=>{t=!1,o(),p?.removeEventListener(`visibilitychange`,m),l(),f()}},[e.slug,e.id,e.transport,e.hub,e.refreshMs,a]);let o=(0,v.useCallback)(async(t,i)=>{n(e=>{if(e.status!==`ready`||!Zh(e.data))return e;let n=e.data.cards.map(e=>e.id===t?{...e,status:i}:e);return{...e,data:{...e.data,cards:n}}});let o=await e.transport.act({action:`move`,type:`move`,payload:{itemId:t,to:{group:i}},actionId:crypto.randomUUID()});if(o.ok===!1){await a().catch(()=>void 0);return}r.current=Math.max(r.current,o.rev),o.navigate!==void 0&&o.navigate.type===`navigate`&&e.onNavigate?.({...o.navigate.params===void 0?{}:{params:o.navigate.params},...o.navigate.target===void 0?{}:{target:o.navigate.target}})},[e.transport,e.onNavigate,a]);return t.status===`loading`?(0,R.jsx)(`p`,{className:`ext-surface-loading`,children:`loading…`}):t.status===`not-found`?(0,R.jsx)(`p`,{className:`ext-surface-not-found`,role:`alert`,children:`surface not found`}):t.status===`failed`?(0,R.jsxs)(`p`,{className:`ext-surface-failed`,role:`alert`,children:[`surface failed: `,t.message]}):(0,R.jsxs)(`section`,{className:`ext-surface`,"data-ext-surface":`${e.slug}/${e.id}`,children:[(0,R.jsx)(`h2`,{className:`ext-surface-title`,children:t.title}),Zh(t.data)?(0,R.jsx)(eg,{data:t.data,lanes:Qh(i.current),access:t.access,onMove:o}):(0,R.jsx)(`pre`,{className:`ext-surface-data`,children:JSON.stringify(t.data)})]})}function eg(e){return(0,R.jsx)(`div`,{className:`ext-board`,role:`list`,children:[`todo`,`doing`,`done`].map(t=>(0,R.jsxs)(`div`,{className:`ext-board-lane`,"data-lane":t,role:`list`,onDragOver:t=>{e.access===`write`&&t.preventDefault()},onDrop:n=>{if(e.access!==`write`)return;let r=n.dataTransfer.getData(`text/plain`);r!==``&&e.onMove(r,t)},children:[(0,R.jsx)(`h3`,{className:`ext-board-lane-title`,children:t}),e.data.cards.filter(e=>e.status===t).map(t=>(0,R.jsx)(`div`,{className:`ext-board-card`,"data-card":t.id,role:`listitem`,draggable:e.access===`write`,"data-draggable":e.access===`write`?`true`:`false`,onDragStart:e=>{e.dataTransfer.setData(`text/plain`,t.id)},children:t.title},t.id))]},t))})}function tg(e){return typeof e==`object`&&e&&`title`in e&&typeof e.title==`string`?e.title:`extension surface`}function ng(e,t){let n=e?.title;return typeof n==`string`&&n!==``?n:t}function rg(e){let[t,n]=(0,v.useState)({status:`loading`});return(0,v.useEffect)(()=>{let t=!0;n({status:`loading`});let r=async()=>{let r=await e.transport.fetchData();t&&n(e=>e.status===`ready`?{...e,rev:r.rev,data:r.data??e.data}:e)};e.transport.load().then(r=>{if(t){if(r.access===`none`){n({status:`not-found`});return}n({status:`ready`,title:ng(r.tree,e.id),data:r.data,rev:r.rev})}}).catch(e=>{t&&n({status:`failed`,message:e instanceof Error?e.message:String(e)})});let i=e.refreshMs===void 0?void 0:setInterval(()=>{t&&r().catch(()=>void 0)},e.refreshMs);return()=>{t=!1,i!==void 0&&clearInterval(i)}},[e.slug,e.id,e.transport,e.refreshMs]),t.status===`loading`?(0,R.jsx)(`p`,{className:`ext-panel-loading`,children:`loading…`}):t.status===`not-found`?(0,R.jsx)(`p`,{className:`ext-panel-not-found`,children:`this panel isn't available`}):t.status===`failed`?(0,R.jsxs)(`p`,{className:`ext-panel-failed`,role:`alert`,children:[`panel failed to load: `,t.message]}):(0,R.jsxs)(`section`,{className:`ext-panel`,"data-ext-panel":`${e.slug}/${e.id}`,children:[(0,R.jsx)(`h3`,{className:`ext-panel-title`,children:t.title}),(0,R.jsx)(`pre`,{className:`ext-panel-data`,children:JSON.stringify(t.data)})]})}function ig(e){let t=`/v1/ext/${encodeURIComponent(e.slug)}/surfaces/${encodeURIComponent(e.id)}`;return e.params===void 0||Object.keys(e.params).length===0?t:`${t}?params=${encodeURIComponent(JSON.stringify(e.params))}`}function ag(e,t,n){return`${e}${e.includes(`?`)?`&`:`?`}${t}=${n}`}function og(e){let t=e.fetch??((e,t)=>globalThis.fetch(e,t)),n=new Set,r=()=>({accept:`application/json`,...e.streamId===void 0?{}:{"x-sigrun-stream":e.streamId}}),i=async e=>{let n=await t(e,{method:`GET`,headers:r()});if(!n.ok)throw Error(`ext surface GET ${e} failed with status ${n.status}`);return await n.json()};return{load(){return i(ig(e))},fetchData(t){let n=`${ig(e)}/data`;return i(t===void 0?n:ag(n,`since`,String(t)))},async act(n){return await(await t(`${ig(e)}/actions`,{method:`POST`,headers:{...r(),"content-type":`application/json`},body:JSON.stringify({...n,params:e.params??{}})})).json()},async upload(n){let i=ag(`${ig(e)}/uploads/${encodeURIComponent(n.field)}/${encodeURIComponent(n.name)}`,`params`,encodeURIComponent(JSON.stringify(e.params??{})));return await(await t(i,{method:`PUT`,headers:{...r(),"content-type":`application/octet-stream`},body:n.bytes})).json()},image(){return Promise.reject(Error(`ext surface image route ships with U7`))},onChanged(e){return n.add(e),()=>{n.delete(e)}}}}var sg=class{#e=new Set;attach(e,t){let n=og(e),r=this;return{load:()=>n.load(),fetchData:e=>n.fetchData(e),act:e=>n.act(e),upload:e=>n.upload(e),image:(e,t)=>n.image(e,t),onChanged(n){let i={slug:e.slug,id:e.id,keyHash:t,listener:n};return r.#e.add(i),()=>{r.#e.delete(i)}}}}dispatch(e){for(let t of this.#e)t.slug===e.slug&&t.id===e.id&&t.keyHash===e.k&&t.listener({rev:e.rev,treeRev:e.treeRev})}};function cg(e){return`/v1/conversations/${e.conversationId}/blocks/${encodeURIComponent(e.entryId)}`}function lg(e){let t=e.fetch??((e,t)=>globalThis.fetch(e,t)),n=new Set,r=()=>({accept:`application/json`}),i=async e=>{let n=await t(e,{method:`GET`,headers:r()});if(!n.ok)throw Error(`chat block GET ${e} failed with status ${n.status}`);return await n.json()};return{load(){return i(cg(e))},fetchData(t){let n=`${cg(e)}/data`;return i(t===void 0?n:`${n}?since=${String(t)}`)},async act(n){return await(await t(`${cg(e)}/actions`,{method:`POST`,headers:{...r(),"content-type":`application/json`},body:JSON.stringify(n)})).json()},upload(){return Promise.reject(Error(`chat blocks carry no upload fields`))},image(){return Promise.reject(Error(`chat block image route ships with U7`))},onChanged(e){return n.add(e),()=>{n.delete(e)}}}}var ug=class{#e=new Set;attach(e){let t=lg(e),n=this;return{load:()=>t.load(),fetchData:e=>t.fetchData(e),act:e=>t.act(e),upload:e=>t.upload(e),image:(e,n)=>t.image(e,n),onChanged(t){let r={conversationId:e.conversationId,entryId:e.entryId,listener:t};return n.#e.add(r),()=>{n.#e.delete(r)}}}}dispatch(e){for(let t of this.#e)t.conversationId===e.conversationId&&t.entryId===e.entryId&&t.listener({rev:e.rev,treeRev:e.treeRev??0})}};function dg(e){let{title:t,timeline:n,onTimeline:r,panel:i,onPanel:a,onRename:o,onExport:s,onCompact:c,onArchive:l,drawerOpen:u,onToggleDrawer:d}=e,[f,p]=(0,v.useState)(!1),[m,h]=(0,v.useState)(t),[g,_]=(0,v.useState)(!1),y=(0,v.useRef)(null);ym(g,()=>_(!1),y);let b=()=>{h(t),p(!0),_(!1)},x=()=>p(!1),S=()=>{let e=m.trim();if(e===``||e===t){p(!1);return}o(e).then(()=>p(!1),()=>p(!1))},C=e=>()=>{_(!1),e()};return(0,R.jsxs)(`header`,{className:`chat-header`,children:[(0,R.jsx)(`button`,{type:`button`,className:`icon-btn chat-menu-toggle`,title:`Conversations`,"aria-label":`open conversations`,"aria-expanded":u,onClick:d,children:(0,R.jsx)(lm,{})}),f?(0,R.jsx)(`input`,{className:`chat-title-input`,value:m,"aria-label":`conversation name`,autoFocus:!0,onChange:e=>h(e.target.value),onBlur:S,onKeyDown:e=>{e.key===`Enter`?S():e.key===`Escape`&&x()}}):(0,R.jsx)(`button`,{type:`button`,className:`chat-title`,title:t,onClick:b,children:t}),(0,R.jsx)(`span`,{className:`chat-header-spacer`}),(0,R.jsx)(`button`,{type:`button`,className:`icon-btn`,"data-panel":`timeline`,title:`Chronological view — interleave thinking and tool calls in order instead of folding them under the response`,"aria-label":`chronological view`,"aria-pressed":n,onClick:r,children:`⇅`}),(0,R.jsx)(`button`,{type:`button`,className:`icon-btn`,"data-panel":`outline`,title:`Outline`,"aria-label":`outline`,"aria-pressed":i===`outline`,onClick:()=>a(`outline`),children:(0,R.jsx)(um,{})}),(0,R.jsx)(`button`,{type:`button`,className:`icon-btn`,"data-panel":`workspace`,title:`Workspace files`,"aria-label":`workspace`,"aria-pressed":i===`workspace`,onClick:()=>a(`workspace`),children:(0,R.jsx)(dm,{})}),(0,R.jsx)(`button`,{type:`button`,className:`icon-btn`,"data-panel":`jobs`,title:`Jobs`,"aria-label":`jobs`,"aria-pressed":i===`jobs`,onClick:()=>a(`jobs`),children:(0,R.jsx)(mm,{})}),(0,R.jsxs)(`span`,{className:`chat-menu-slot`,ref:y,children:[(0,R.jsx)(`button`,{type:`button`,className:`icon-btn`,title:`More (export, compact, rename, archive)`,"aria-label":`more actions`,"aria-haspopup":`menu`,"aria-expanded":g,onClick:()=>_(e=>!e),children:(0,R.jsx)(pm,{})}),g&&(0,R.jsxs)(`div`,{className:`chat-menu`,role:`menu`,children:[(0,R.jsx)(`button`,{type:`button`,role:`menuitem`,"data-menu-action":`export`,onClick:C(s),children:`Export`}),(0,R.jsx)(`button`,{type:`button`,role:`menuitem`,"data-menu-action":`compact`,onClick:C(c),children:`Compact`}),(0,R.jsx)(`button`,{type:`button`,role:`menuitem`,"data-menu-action":`rename`,onClick:C(b),children:`Rename`}),(0,R.jsx)(`button`,{type:`button`,role:`menuitem`,"data-menu-action":`archive`,onClick:C(l),children:`Archive`})]})]})]})}var fg=`sigrun.railOrder`;function pg(e){return`${e.slug}/${e.id}`}function mg(e){let t=[];for(let n of e)if(n.status===`ok`)for(let e of n.surfaces??[])e.placement===`view`&&t.push({slug:n.name,id:e.id,title:e.title,icon:e.icon,...e.refreshMs===void 0?{}:{refreshMs:e.refreshMs}});return t}function hg(e){let t=[];for(let n of e)if(n.status===`ok`)for(let e of n.surfaces??[])e.placement===`panel`&&t.push({slug:n.name,id:e.id,title:e.title,icon:e.icon});return t}function gg(){return globalThis.localStorage}function _g(){try{let e=gg()?.getItem(fg);if(e==null)return[];let t=JSON.parse(e);return Array.isArray(t)?t.filter(e=>typeof e==`string`):[]}catch{return[]}}function vg(e){try{gg()?.setItem(fg,JSON.stringify(e))}catch{}}function yg(e,t){let n=new Map(e.map(e=>[pg(e),e])),r=[],i=new Set;for(let e of t){let t=n.get(e);t!==void 0&&!i.has(e)&&(r.push(t),i.add(e))}for(let t of e)i.has(pg(t))||r.push(t);return r}function bg(e,t,n){let r=e.map(e=>pg(e)),i=r.indexOf(t);if(i===-1)return r;let a=i+n;if(a<0||a>=r.length)return r;let o=[...r];return o[i]=r[a]??``,o[a]=t,vg(o),o}function xg(e){let t=e.extensions.every(e=>e.status===`ok`),n=e.health.memory===`ok`&&e.health.providers===`ok`&&e.health.backup!==`degraded`;return t&&n?`ok`:`degraded`}function Sg(e){return`${e.extensions.length===0?`extensions: none`:`extensions: ${e.extensions.map(e=>`${e.name}: ${e.status}`).join(`; `)}`} · backup: ${e.health.backup}`}function Cg(e){let{meta:t,onOpenSettings:n,identity:r,onLogout:i}=e,{onOpenGallery:a}=e,o=r?.method===`token`||r?.method===`session`,s=new Set(e.hiddenExtSurfaces??[]),c=(e.extViewEntries??yg(mg(t.extensions),_g())).filter(e=>!s.has(`${e.slug}/${e.id}`));return(0,R.jsxs)(`nav`,{className:`rail`,"aria-label":`sections`,children:[(0,R.jsx)(`span`,{className:`rail-brand`,title:`sigrun`,children:(0,R.jsx)(am,{})}),(0,R.jsx)(`button`,{type:`button`,className:`rail-btn rail-btn-active`,"data-rail-section":`chats`,title:`Chats`,"aria-current":`page`,children:(0,R.jsx)(om,{})}),t.dev&&a!==void 0&&(0,R.jsx)(`button`,{type:`button`,className:`rail-btn`,"data-rail-section":`blocks`,title:`Blocks`,"aria-label":`blocks gallery`,onClick:a,children:(0,R.jsx)(sm,{})}),c.map(t=>(0,R.jsx)(`button`,{type:`button`,className:`rail-btn`,"data-rail-section":`ext:${t.slug}/${t.id}`,title:t.title,"aria-label":t.title,onClick:()=>e.onOpenExtView?.(t.slug,t.id),onKeyDown:n=>{n.altKey&&(n.key===`ArrowUp`?(n.preventDefault(),e.onMoveExtView?.(`${t.slug}/${t.id}`,-1)):n.key===`ArrowDown`&&(n.preventDefault(),e.onMoveExtView?.(`${t.slug}/${t.id}`,1)))},children:t.title.slice(0,1)},`${t.slug}/${t.id}`)),(0,R.jsx)(`span`,{className:`rail-spacer`}),(0,R.jsx)(`span`,{className:`rail-health`,"data-health":xg(t),title:Sg(t)}),o&&(0,R.jsx)(`span`,{className:`rail-user`,"data-rail-user":r.user??``,title:r.user===void 0?`signed in`:`signed in as ${r.user}`,children:r.user??`—`}),o&&i!==void 0&&(0,R.jsx)(`button`,{type:`button`,className:`rail-btn`,"data-rail-section":`logout`,title:`Sign out`,"aria-label":`sign out`,onClick:i,children:(0,R.jsx)(gm,{})}),(0,R.jsx)(`button`,{type:`button`,className:e.settingsActive===!0?`rail-btn rail-btn-active`:`rail-btn`,"data-rail-section":`settings`,title:`Settings`,"aria-label":`settings`,...e.settingsActive===!0?{"aria-current":`page`}:{},onClick:n,children:(0,R.jsx)(cm,{})})]})}function wg(e){let{mode:t,outline:n,workspace:r,jobs:i}=e,a=e.extPanels??[];return t===null&&e.extContent===void 0&&a.length===0?null:(0,R.jsxs)(`aside`,{className:`right-panel`,"data-panel":e.extContent===void 0?t:`ext`,"aria-label":`${e.extContent===void 0?t:`extension`} panel`,children:[a.length>0&&(0,R.jsx)(`div`,{className:`right-panel-tabs`,role:`tablist`,children:a.map(t=>(0,R.jsx)(`button`,{type:`button`,role:`tab`,className:`right-panel-tab`,"data-panel-tab":`ext:${t.slug}/${t.id}`,title:t.title,"aria-selected":e.activeExtPanel===`${t.slug}/${t.id}`,onClick:()=>e.onOpenExtPanel?.(t.slug,t.id),children:t.title},`${t.slug}/${t.id}`))}),e.extContent===void 0?t===null?null:t===`outline`?n:t===`jobs`?i:r:e.extContent]})}function Tg(e){return`cron`in e.schedule?e.schedule.timezone===void 0?e.schedule.cron:`${e.schedule.cron} (${e.schedule.timezone})`:`every`in e.schedule?`every ${e.schedule.every}`:`at ${e.schedule.at}`}function Eg(e){let{client:t,onNavigate:n,refreshToken:r=0}=e,[i,a]=(0,v.useState)(null),[o,s]=(0,v.useState)(null),[c,l]=(0,v.useState)({}),[u,d]=(0,v.useState)({}),[f,p]=(0,v.useState)({});(0,v.useEffect)(()=>{let e=!1;return t.listJobs().then(t=>{e||(a(t.jobs),s(null))}).catch(t=>{e||s(t instanceof Error?t.message:String(t))}),()=>{e=!0}},[t,r]),(0,v.useEffect)(()=>{let e=!1,n=Object.entries(c).filter(([e,t])=>t===!0&&u[e]===void 0);for(let[r]of n)(async()=>{try{let[n,i]=await Promise.all([t.listJobRuns(r),t.listJobRevisions(r)]);if(e)return;d(e=>({...e,[r]:{runs:n.runs,revisions:i.revisions}}))}catch(t){if(e)return;s(t instanceof Error?t.message:String(t))}})();return()=>{e=!0}},[t,c,u]);async function m(e){l(t=>{let n={...t};return n[e.id]===!0?delete n[e.id]:n[e.id]=!0,n})}async function h(e){try{let n=await t.runJob(e.id);p(t=>({...t,[e.id]:n.outcome})),s(null)}catch(e){s(e instanceof Error?e.message:String(e))}}let g=(e,t)=>(0,R.jsxs)(`button`,{type:`button`,className:`job-conversation`,"aria-label":t,title:`conversation #${e}`,onClick:()=>n?.(e),children:[`#`,e]}),_=(e,t)=>(0,R.jsxs)(`div`,{className:`job-runs`,"data-job-runs":e.id,children:[(0,R.jsx)(`h3`,{className:`job-section-title`,children:`Runs`}),t.length===0?(0,R.jsx)(`p`,{className:`job-empty`,children:`no runs yet`}):t.map(e=>(0,R.jsxs)(`div`,{className:`job-run-row`,children:[(0,R.jsx)(`span`,{className:`job-run-when`,children:e.fireAt}),(0,R.jsxs)(`span`,{className:`job-run-version`,children:[`v`,e.version]}),e.manual&&(0,R.jsx)(`span`,{className:`job-run-manual`,children:`manual`}),(0,R.jsx)(`span`,{className:`job-run-outcome`,"data-outcome":e.outcome,children:e.outcome}),e.error!==void 0&&(0,R.jsx)(`span`,{className:`job-run-error`,title:e.error,children:e.error}),e.conversationId!==void 0&&g(e.conversationId,`open run conversation`)]},e.fireAt))]}),y=(e,t)=>(0,R.jsxs)(`div`,{className:`job-revisions`,"data-job-revisions":e.id,children:[(0,R.jsx)(`h3`,{className:`job-section-title`,children:`Revisions`}),t.length===0?(0,R.jsx)(`p`,{className:`job-empty`,children:`no revisions`}):t.map((e,n)=>{let r=t[n+1];return(0,R.jsxs)(`div`,{className:`job-revision-row`,children:[(0,R.jsxs)(`div`,{className:`job-revision-meta`,children:[(0,R.jsxs)(`span`,{className:`job-revision-version`,children:[`v`,e.version]}),(0,R.jsx)(`span`,{className:`job-revision-changedAt`,children:e.changedAt}),(0,R.jsx)(`span`,{className:`job-revision-changedBy`,children:e.changedBy})]}),r!==void 0&&(0,R.jsxs)(`div`,{className:`interaction-diff`,children:[(0,R.jsx)(`pre`,{className:`interaction-diff-before`,children:JSON.stringify(r.spec,null,2)}),(0,R.jsx)(`pre`,{className:`interaction-diff-after`,children:JSON.stringify(e.spec,null,2)})]})]},e.version)})]});return(0,R.jsxs)(`section`,{className:`jobs-panel`,"aria-label":`jobs`,children:[(0,R.jsx)(`h2`,{className:`workspace-title`,children:`Jobs`}),o!==null&&(0,R.jsx)(`p`,{role:`alert`,children:o}),i===null&&o===null?(0,R.jsx)(`p`,{className:`workspace-loading`,children:`loading…`}):i===null?null:i.length===0?(0,R.jsx)(`p`,{className:`workspace-empty`,children:`No jobs`}):(0,R.jsx)(`ul`,{className:`jobs-list`,children:i.map(e=>{let t=c[e.id]===!0,n=u[e.id],r=f[e.id];return(0,R.jsxs)(`li`,{className:`job-row`,children:[(0,R.jsxs)(`button`,{type:`button`,className:`job-summary`,"data-job-id":e.id,"aria-expanded":t,onClick:()=>void m(e),children:[(0,R.jsxs)(`span`,{className:`job-name`,children:[t?`▾`:`▸`,` `,e.name]}),(0,R.jsx)(`span`,{className:`job-schedule`,children:Tg(e)}),(0,R.jsx)(`span`,{className:`job-next`,children:e.nextRun??`no next run`}),(0,R.jsx)(`span`,{className:`job-last`,children:r??e.lastRun?.outcome??`never run`})]}),(0,R.jsxs)(`div`,{className:`job-summary-side`,children:[e.lastRun?.conversationId!==void 0&&g(e.lastRun.conversationId,`open last run conversation`),e.access===`write`&&(0,R.jsx)(`button`,{type:`button`,className:`job-runnow`,onClick:()=>void h(e),children:`Run now`})]}),t&&n!==void 0&&(0,R.jsxs)(`div`,{className:`job-detail`,children:[_(e,n.runs),y(e,n.revisions)]}),t&&n===void 0&&(0,R.jsx)(`p`,{className:`workspace-loading`,children:`loading…`})]},e.id)})})]})}function Dg(e){let t=null,n=1/0;for(let[r,i]of e)i.isIntersecting&&i.top<n&&(n=i.top,t=r);return t}function Og(e,t){if(e.size!==t.size)return!1;for(let n of e)if(!t.has(n))return!1;return!0}function kg(e){let{scrollRoot:t,turns:n}=e,[r,i]=(0,v.useState)(null),[a,o]=(0,v.useState)(()=>new Set),s=(0,v.useRef)(null),c=n.map(e=>e.entryId).join(`,`);return(0,v.useEffect)(()=>{i(null)},[t,c]),(0,v.useEffect)(()=>{if(t===null)return;let e=globalThis.IntersectionObserver;if(e===void 0)return;let r=new Map,a=new e(e=>{for(let t of e){let e=t.target,n=Number(e.getAttribute(`data-entry-id`));Number.isFinite(n)&&r.set(n,{isIntersecting:t.isIntersecting,top:e.getBoundingClientRect().top})}i(Dg(r))});for(let e of n){let n=t.querySelector(`[data-entry-id="${e.entryId}"]`);n!==null&&a.observe(n)}return()=>{a.disconnect()}},[t,c]),(0,v.useLayoutEffect)(()=>{let e=s.current;if(e===null)return;let t=()=>{let t=new Set;for(let n of e.querySelectorAll(`.outline-text`)){if(n.scrollHeight<=n.clientHeight+1)continue;let e=n.closest(`.outline-item`),r=Number(e?.getAttribute(`data-entry-id`));Number.isFinite(r)&&t.add(r)}o(e=>Og(e,t)?e:t)};t();let n=globalThis.ResizeObserver;if(n===void 0)return;let r=new n(t);return r.observe(e),()=>{r.disconnect()}},[c]),n.length===0?(0,R.jsxs)(`div`,{className:`right-panel-body outline-body`,children:[(0,R.jsx)(`h4`,{className:`right-panel-title`,children:`Outline`}),(0,R.jsx)(`p`,{className:`outline-empty`,children:`No prompts yet`})]}):(0,R.jsxs)(`div`,{className:`right-panel-body outline-body`,children:[(0,R.jsx)(`h4`,{className:`right-panel-title`,children:`Outline`}),(0,R.jsx)(`nav`,{className:`outline`,"aria-label":`conversation outline`,ref:s,children:n.map(e=>(0,R.jsx)(`button`,{type:`button`,className:`outline-item`,"data-entry-id":e.entryId,"data-clamped":a.has(e.entryId)?`true`:void 0,title:e.text,"aria-current":r===e.entryId?`true`:void 0,onClick:()=>{t?.querySelector(`[data-entry-id="${e.entryId}"]`)?.scrollIntoView({behavior:`smooth`,block:`start`})},children:(0,R.jsx)(`span`,{className:`outline-text`,children:e.text})},e.entryId))})]})}var Ag=`695e774de770be63a0fb46f72277fe30b6b3644eec04afd58973c0b818db50a0`,jg=`sigrun-session-search`,Mg=[`Pinned`,`Today`,`Yesterday`,`Earlier`];function Ng(){(globalThis.document?.getElementById(jg))?.focus()}function Pg(e,t){let n=new Set,r=new Map(e.map(e=>[e.id,e]));for(let i of e){if(!ae(i).toLowerCase().includes(t))continue;let e=i;for(;e!==void 0&&!n.has(e.id);)n.add(e.id),e=e.parent===void 0?void 0:r.get(e.parent.id)}return n}function Fg(e,t){let n=[];for(let r of Mg){let i=e.filter(e=>ee(e,t)===r);if(i.length===0)continue;n.push({kind:`heading`,group:r});let a=(e,t)=>{n.push({kind:`row`,node:e,depth:t});for(let n of e.children)a(n,t+1)};for(let e of i)a(e,0)}return n}function Ig(e){let{rows:t,activeId:n,onSelect:r,onNew:i,onRename:a,onArchive:o,onFork:s,currentUser:c,onShare:l}=e,[u,d]=(0,v.useState)(``),[f,p]=(0,v.useState)(!1),[m,h]=(0,v.useState)(null),g=(0,v.useRef)(null);ym(m!==null,()=>h(null),g);let[_,y]=(0,v.useState)(null);(0,v.useEffect)(()=>{let e=globalThis.window;if(e===void 0)return;let t=e=>{(e.ctrlKey||e.metaKey)&&(e.key===`k`||e.key===`K`)&&(e.preventDefault(),Ng())};return e.addEventListener(`keydown`,t),()=>e.removeEventListener(`keydown`,t)},[]);let b=new Date,x=(0,v.useMemo)(()=>{let e=u.trim().toLowerCase(),n=Pg(t,e);return Fg(E(e===``?t:t.filter(e=>n.has(e.id)),{includeArchived:f}),b)},[t,u,f,b.getTime()]),S=e=>{if(_===null||_.id!==e)return;let n=t.find(t=>t.id===e),r=_.draft.trim();if(n===void 0||r===``||r===ae(n)){y(null);return}a(e,r).then(()=>y(null),()=>y(null))};return(0,R.jsxs)(`nav`,{className:`session-list`,"aria-label":`conversations`,children:[(0,R.jsxs)(`div`,{className:`session-search-row`,children:[(0,R.jsx)(`input`,{id:jg,className:`session-search`,type:`search`,placeholder:`Search`,"aria-label":`search conversations`,value:u,onChange:e=>d(e.target.value)}),(0,R.jsx)(`button`,{type:`button`,className:`session-new`,title:`New conversation`,"aria-label":`new conversation`,onClick:i,children:(0,R.jsx)(fm,{})})]}),(0,R.jsxs)(`ul`,{children:[x.map(e=>{if(e.kind===`heading`)return(0,R.jsx)(`li`,{className:`session-group`,"data-age-group":e.group,children:e.group},`group-${e.group}`);let{node:t,depth:i}=e,a=t.row,u=ae(a),d=_!==null&&_.id===a.id,f=l!==void 0&&c!==void 0&&a.owner===c,p=[`session-item`,a.id===n?`session-item-active`:``,a.archived?`session-item-archived`:``].filter(Boolean).join(` `);return(0,R.jsxs)(`li`,{className:p,"data-conversation-id":a.id,"data-depth":i,style:i===0?void 0:{paddingLeft:6+i*14},children:[i>0&&(0,R.jsx)(`span`,{className:`session-fork-mark`,"aria-hidden":`true`,children:`↳`}),d?(0,R.jsx)(`input`,{className:`session-rename-input`,"aria-label":`conversation name`,value:_.draft,onChange:e=>y({id:a.id,draft:e.target.value}),onKeyDown:e=>{e.key===`Enter`?S(a.id):e.key===`Escape`&&y(null)}}):(0,R.jsx)(`button`,{type:`button`,className:`session-select`,title:u,onClick:()=>r(a.id),children:(0,R.jsx)(`span`,{className:`session-name`,children:u})}),(0,R.jsx)(`span`,{className:`session-age`,children:ie(a.lastActivityAt,b)}),(0,R.jsxs)(`span`,{className:`session-row-actions`,ref:m===a.id?g:void 0,children:[(0,R.jsx)(`button`,{type:`button`,className:`session-menu-toggle`,"aria-label":`actions for ${u}`,"aria-haspopup":`menu`,"aria-expanded":m===a.id,onClick:()=>h(m===a.id?null:a.id),children:(0,R.jsx)(pm,{})}),m===a.id&&(0,R.jsxs)(`div`,{className:`session-menu`,role:`menu`,children:[f&&(0,R.jsx)(`button`,{type:`button`,role:`menuitem`,"data-menu-action":`share`,onClick:()=>{h(null),l?.(a.id)},children:`Share…`}),(0,R.jsx)(`button`,{type:`button`,role:`menuitem`,"data-menu-action":`rename`,onClick:()=>{h(null),y({id:a.id,draft:u})},children:`Rename`}),(0,R.jsx)(`button`,{type:`button`,role:`menuitem`,"data-menu-action":`fork`,onClick:()=>{h(null),s(a.id)},children:`Fork`}),(0,R.jsx)(`button`,{type:`button`,role:`menuitem`,"data-menu-action":`archive`,onClick:()=>{h(null),o(a.id,!a.archived)},children:a.archived?`Unarchive`:`Archive`})]})]})]},a.id)}),x.length===0&&u.trim()!==``&&(0,R.jsx)(`li`,{className:`session-empty`,children:`No matching conversations`})]}),(0,R.jsx)(`button`,{type:`button`,className:`session-archived-toggle`,"aria-pressed":f,title:`Show archived conversations`,onClick:()=>p(e=>!e),children:`Archived`})]})}var Lg=/\p{M}/gu,Rg=/@/g,zg=/[^a-z0-9._-]/g,Bg=/^[^a-z0-9]+/;function Vg(e){let t=e.normalize(`NFKD`).replace(Lg,``).toLowerCase().replace(Rg,`_`).replace(zg,`-`).replace(Bg,``).slice(0,128);return t===``?void 0:t}function Hg(e){let{client:t,state:n,onClaimed:r}=e,[i,a]=(0,v.useState)(``),[o,s]=(0,v.useState)(``),[c,l]=(0,v.useState)(``),[u,d]=(0,v.useState)(``),[f,p]=(0,v.useState)(null),[m,h]=(0,v.useState)(!1),g=n.proxyIdentity,_=o.trim(),y=_===``?void 0:Vg(_),b=_!==``&&y===void 0;async function x(){h(!0),p(null);try{await t.claim({}),r()}catch(e){p(Ug(e))}finally{h(!1)}}async function S(){let e=o.trim();if(n.codeRequired&&i.trim()===``){p(`enter the setup code (find it in the server log)`);return}if(e===``){p(`choose a username`);return}h(!0),p(null);try{await t.claim({...n.codeRequired?{code:i.trim()}:{},user:e,...c.trim()===``?{}:{name:c.trim()},...u.trim()===``?{}:{email:u.trim()},issueToken:!0,tokenName:`webui`}),r()}catch(e){p(Ug(e))}finally{h(!1)}}return(0,R.jsxs)(`div`,{className:`auth-card`,children:[(0,R.jsx)(`h1`,{children:`Set up sigrun`}),g===void 0?(0,R.jsxs)(R.Fragment,{children:[(0,R.jsx)(`p`,{className:`auth-message`,children:`Claim this server: the first user is its administrator.`}),n.codeRequired&&(0,R.jsxs)(`label`,{className:`auth-field`,children:[`Setup code`,(0,R.jsx)(`input`,{"data-auth-field":`code`,autoComplete:`one-time-code`,value:i,onChange:e=>a(e.target.value)})]}),(0,R.jsxs)(`label`,{className:`auth-field`,children:[`Username`,(0,R.jsx)(`input`,{"data-auth-field":`user`,autoComplete:`username`,value:o,onChange:e=>s(e.target.value)})]}),b?(0,R.jsx)(`p`,{className:`auth-message`,"data-auth-preview":`invalid`,children:`Your username needs at least one letter or digit.`}):y===void 0?null:(0,R.jsxs)(`p`,{className:`auth-message`,"data-auth-preview":`user`,children:[`Your username will be `,(0,R.jsx)(`strong`,{children:y})]}),(0,R.jsxs)(`label`,{className:`auth-field`,children:[`Name `,(0,R.jsx)(`span`,{className:`auth-optional`,children:`(optional)`}),(0,R.jsx)(`input`,{"data-auth-field":`name`,autoComplete:`name`,value:c,onChange:e=>l(e.target.value)})]}),(0,R.jsxs)(`label`,{className:`auth-field`,children:[`Email `,(0,R.jsx)(`span`,{className:`auth-optional`,children:`(optional)`}),(0,R.jsx)(`input`,{"data-auth-field":`email`,type:`email`,autoComplete:`email`,value:u,onChange:e=>d(e.target.value)})]}),(0,R.jsx)(`button`,{type:`button`,className:`auth-submit`,disabled:m||b,onClick:()=>void S(),children:m?`Claiming…`:`Set up sigrun`})]}):(0,R.jsxs)(R.Fragment,{children:[(0,R.jsx)(`p`,{className:`auth-message`,children:`Your proxy vouches for your identity. Continuing claims this server as:`}),(0,R.jsxs)(`p`,{className:`auth-identity`,children:[(0,R.jsx)(`strong`,{children:g.user}),g.name===void 0?``:` — ${g.name}`,g.email===void 0?``:` · ${g.email}`]}),g.subject!==g.user&&(0,R.jsx)(`p`,{className:`auth-message`,"data-auth-proxy":`subject`,children:g.subject}),(0,R.jsx)(`button`,{type:`button`,className:`auth-submit`,disabled:m,onClick:()=>void x(),children:`Continue as ${g.user}`})]}),f!==null&&(0,R.jsx)(`p`,{className:`auth-error`,role:`alert`,children:f})]})}function Ug(e){if(e instanceof b){let t={proxy_identity_required:`This sigrun signs people in through its sign-in proxy. Open it through the proxy.`,username_taken:`That username is taken. Choose another.`,invalid_username:`That name has no usable characters — use at least one letter or digit.`},n=e.error??``;if(Object.hasOwn(t,n))return t[n];if(e.error!==void 0)return e.error}return e instanceof Error?e.message:String(e)}function Wg(e){return e.split(/[\s,]+/).map(e=>e.trim()).filter(e=>e!==``)}function Gg(e){let{client:t,conversation:n,onClose:r,onSaved:i}=e,a=n.sharing,[o,s]=(0,v.useState)(a?.scope??`private`),[c,l]=(0,v.useState)(a?.scope===`household`||a?.scope===`people`?a.level:`read`),[u,d]=(0,v.useState)(a?.scope===`people`?a.users.join(`, `):``),[f,p]=(0,v.useState)(null),[m,h]=(0,v.useState)(!1);async function g(e){h(!0),p(null);try{await t.patchConversationMeta(n.id,{sharing:e}),await i()}catch(e){p(Ug(e))}finally{h(!1)}}function _(e){m||(s(e),e===`private`?g({scope:`private`}):e===`household`&&g({scope:`household`,level:c}))}function y(e){m||(l(e),o===`household`&&g({scope:`household`,level:e}))}function b(){if(m)return;let e=Wg(u);if(e.length===0){p(`enter at least one username to share with`);return}g({scope:`people`,users:e,...a?.scope===`people`&&a.groups!==void 0?{groups:[...a.groups]}:{},level:c})}return(0,R.jsxs)(`div`,{className:`share-menu`,role:`dialog`,"aria-label":`share conversation`,children:[(0,R.jsxs)(`div`,{className:`share-head`,children:[(0,R.jsx)(`h2`,{children:`Share`}),(0,R.jsx)(`button`,{type:`button`,className:`share-close`,"aria-label":`close share dialog`,onClick:r,children:`Close`})]}),(0,R.jsxs)(`div`,{className:`share-scopes`,children:[(0,R.jsxs)(`button`,{type:`button`,className:`share-scope`,"data-share-scope":`private`,"data-selected":o===`private`||void 0,"aria-pressed":o===`private`,disabled:m,onClick:()=>_(`private`),children:[`Private`,(0,R.jsx)(`span`,{className:`share-scope-hint`,children:`only you`})]}),(0,R.jsxs)(`button`,{type:`button`,className:`share-scope`,"data-share-scope":`household`,"data-selected":o===`household`||void 0,"aria-pressed":o===`household`,disabled:m,onClick:()=>_(`household`),children:[`Household`,(0,R.jsx)(`span`,{className:`share-scope-hint`,children:`everyone signed in`})]}),(0,R.jsxs)(`button`,{type:`button`,className:`share-scope`,"data-share-scope":`people`,"data-selected":o===`people`||void 0,"aria-pressed":o===`people`,disabled:m,onClick:()=>_(`people`),children:[`People`,(0,R.jsx)(`span`,{className:`share-scope-hint`,children:`named users`})]})]}),o!==`private`&&(0,R.jsxs)(`div`,{className:`share-level`,role:`group`,"aria-label":`access level`,children:[(0,R.jsx)(`button`,{type:`button`,className:`share-level-btn`,"data-share-level":`read`,"data-selected":c===`read`||void 0,"aria-pressed":c===`read`,disabled:m,onClick:()=>y(`read`),children:`Can view`}),(0,R.jsx)(`button`,{type:`button`,className:`share-level-btn`,"data-share-level":`write`,"data-selected":c===`write`||void 0,"aria-pressed":c===`write`,disabled:m,onClick:()=>y(`write`),children:`Can edit`})]}),o===`people`&&(0,R.jsxs)(`label`,{className:`share-field`,children:[`Usernames`,(0,R.jsx)(`input`,{"data-share-field":`users`,placeholder:`carol, dave`,value:u,onChange:e=>d(e.target.value)}),(0,R.jsx)(`button`,{type:`button`,className:`auth-submit`,disabled:m,onClick:b,children:`Share with people`})]}),o!==`private`&&c===`write`&&(0,R.jsx)(`p`,{className:`share-warning`,role:`alert`,children:`Others can ask the agent to act as you.`}),f!==null&&(0,R.jsx)(`p`,{className:`auth-error`,role:`alert`,children:f})]})}var Kg=5e3;function qg(e,t,n,r,i,a){if(a===void 0&&globalThis.EventSource===void 0)return()=>{};let o=a===void 0?new EventSource(`/v1/events`):a(`/v1/events`),s=()=>e();return o.addEventListener(`conversation.created`,s),o.addEventListener(`conversation.changed`,s),o.addEventListener(`job.changed`,t),o.addEventListener(`surface.changed`,e=>{try{let t=JSON.parse(e.data);if(typeof t==`object`&&t&&typeof t.conversationId==`number`&&typeof t.entryId==`string`&&typeof t.rev==`number`){i?.(t);return}}catch{}if(r!==void 0)try{let t=JSON.parse(e.data);typeof t==`object`&&t&&typeof t.slug==`string`&&typeof t.id==`string`&&typeof t.k==`string`&&typeof t.rev==`number`&&typeof t.treeRev==`number`&&r(t)}catch{}}),o.addEventListener(`hello`,e=>{try{let t=JSON.parse(e.data);typeof t==`object`&&t&&typeof t.streamId==`string`&&n(t.streamId)}catch{}}),()=>o.close()}function Jg(e,t){let n=t.busy,[r,i]=(0,v.useState)([]),[a,o]=(0,v.useState)(null),[s,c]=(0,v.useState)(void 0),l=(0,v.useRef)(void 0),u=(0,v.useRef)(new Set),d=(0,v.useCallback)(async()=>{try{let t=await e.listConversations();i(t.conversations),o(null)}catch(e){o(e instanceof Error?e.message:String(e))}},[e]),f=(0,v.useCallback)(async(e,n,r)=>{let i=l.current;return(await(t.fetchImpl??fetch)(r===void 0||Object.keys(r).length===0?`/v1/ext/${e}/surfaces/${n}`:`/v1/ext/${e}/surfaces/${n}?params=${encodeURIComponent(JSON.stringify(r))}`,{headers:i===void 0?{accept:`application/json`}:{accept:`application/json`,"x-sigrun-stream":i}})).json()},[t.fetchImpl]),p=(0,v.useCallback)((e,t,n)=>{let r=n===void 0?`{}`:Te(n);u.current.add(`${e}\u0001${t}\u0001${r}`)},[]),m=(0,v.useCallback)(e=>{let t=l.current;if(l.current=e,c(e),t!==void 0&&t!==e)for(let e of u.current){let[t,n,r]=e.split(``),i;if(r!==void 0&&r!==`{}`)try{let e=JSON.parse(r);typeof e==`object`&&e&&!Array.isArray(e)&&(i=e)}catch{}f(t??``,n??``,i)}},[f]);(0,v.useEffect)(()=>{d()},[d]),(0,v.useEffect)(()=>qg(()=>{d()},t.onJobChanged??(()=>{}),m,t.onSurfaceChanged,t.onChatChanged,t.createEventSource),[d,m,t.createEventSource,t.onJobChanged,t.onSurfaceChanged,t.onChatChanged]);let h=(0,v.useRef)(n);return(0,v.useEffect)(()=>{let e=h.current;if(h.current=n,!e||n)return;d();let t=setTimeout(()=>void d(),Kg);return()=>clearTimeout(t)},[n,d]),{rows:r,reload:d,error:a,streamId:s,fetchSurface:f,noteSurfaceVisible:p}}var Yg={fjord:{label:`Fjord`,defaultAccent:`baltic-amber`,dark:{bg:`#0b0f13`,surface:`#11171e`,surface2:`#18202a`,border:`#222d39`,text:`#dde6ee`,muted:`#8d9cab`,faint:`#5f6e7d`,ok:`#7fbf9a`,code:`rgba(255,255,255,.06)`},light:{bg:`#eef2f5`,surface:`#ffffff`,surface2:`#e3e9ef`,border:`#d3dbe3`,text:`#18212a`,muted:`#4d5b69`,faint:`#8593a1`,ok:`#2f8a5a`,code:`rgba(0,0,0,.05)`}},"iron-ember":{label:`Iron & Ember`,defaultAccent:`ember`,dark:{bg:`#0e0e0f`,surface:`#161618`,surface2:`#1e1e21`,border:`#2a2a2e`,text:`#e6e1da`,muted:`#9a958e`,faint:`#66625d`,ok:`#8fb58a`,code:`rgba(255,255,255,.06)`},light:{bg:`#f3f1ee`,surface:`#fbfaf8`,surface2:`#e9e6e1`,border:`#dbd7d1`,text:`#1c1b1a`,muted:`#55524d`,faint:`#8e8a84`,ok:`#3e7a3a`,code:`rgba(0,0,0,.05)`}},"polar-night":{label:`Polar Night`,defaultAccent:`aurora`,dark:{bg:`#090d16`,surface:`#0f1524`,surface2:`#161e31`,border:`#1f2942`,text:`#e2e8f3`,muted:`#8e9ab2`,faint:`#5d6984`,ok:`#5fd4a8`,code:`rgba(255,255,255,.06)`},light:{bg:`#f0f3f9`,surface:`#ffffff`,surface2:`#e4e9f3`,border:`#d2d9e6`,text:`#141b2b`,muted:`#4b5670`,faint:`#8691a8`,ok:`#13866a`,code:`rgba(0,0,0,.05)`}},"birch-moss":{label:`Birch & Moss`,defaultAccent:`lichen`,dark:{bg:`#0d100d`,surface:`#141a15`,surface2:`#1b221c`,border:`#263027`,text:`#e8e6dc`,muted:`#9ba091`,faint:`#666d60`,ok:`#9cc48a`,code:`rgba(255,255,255,.06)`},light:{bg:`#f3f2ea`,surface:`#fbfbf6`,surface2:`#e7e7dc`,border:`#d8d8ca`,text:`#1b1e18`,muted:`#525849`,faint:`#8b9080`,ok:`#4a7a35`,code:`rgba(0,0,0,.05)`}}},Xg={"baltic-amber":{label:`Baltic Amber`,dark:`#d6a24a`,light:`#a8741f`},ember:{label:`Ember`,dark:`#d9773a`,light:`#b8571c`},lingonberry:{label:`Lingonberry`,dark:`#d0606a`,light:`#a83440`},glacier:{label:`Glacier`,dark:`#8fb8d0`,light:`#2f6f93`},aurora:{label:`Aurora`,dark:`#5fd4a8`,light:`#13866a`},lichen:{label:`Lichen`,dark:`#b9c46a`,light:`#6f7a1f`},heather:{label:`Heather`,dark:`#a993c9`,light:`#6c4f99`}},Zg=[`fjord`,`iron-ember`,`polar-night`,`birch-moss`],Qg=[`baltic-amber`,`ember`,`lingonberry`,`glacier`,`aurora`,`lichen`,`heather`],$g=`polar-night`,e_=`baltic-amber`;function t_(e){return typeof e==`string`&&Object.prototype.hasOwnProperty.call(Yg,e)}function n_(e){return typeof e==`string`&&Object.prototype.hasOwnProperty.call(Xg,e)}function r_(e){let{client:t}=e,[n,r]=(0,v.useState)(null),[i,a]=(0,v.useState)([]),[o,s]=(0,v.useState)(null),[c,l]=(0,v.useState)(null);(0,v.useEffect)(()=>{let e=!1;return Promise.all([t.accounts(),t.providers()]).then(([t,n])=>{e||(r(t.accounts),a(n.providers))}).catch(t=>{e||s(Ug(t))}),()=>{e=!0}},[t]);async function u(e){l(`${e.provider}\u0000${e.subject}`),s(null);try{await t.removeAccount(e.provider,e.subject),r(t=>t?.filter(t=>t.provider!==e.provider||t.subject!==e.subject)??null)}catch(e){s(Ug(e))}finally{l(null)}}return n===null?(0,R.jsx)(`p`,{className:`settings-note`,role:o===null?void 0:`alert`,children:o??`loading account links…`}):(0,R.jsxs)(`div`,{className:`settings-body`,"data-settings-section":`accounts`,children:[(0,R.jsx)(`p`,{className:`settings-note`,children:`External identities linked to your sigrun account.`}),o!==null&&(0,R.jsx)(`p`,{className:`settings-note`,role:`alert`,children:o}),n.length===0&&(0,R.jsx)(`p`,{className:`settings-note`,children:`No account links.`}),n.map(e=>(0,R.jsxs)(`div`,{className:`settings-ext-row`,children:[(0,R.jsxs)(`span`,{className:`settings-ext-key`,children:[i.find(t=>t.provider===e.provider)?.label??e.provider,` · `,e.subject]}),(0,R.jsx)(`button`,{type:`button`,className:`account-remove`,disabled:c!==null,onClick:()=>void u(e),children:`Remove`})]},`${e.provider}\u0000${e.subject}`)),i.length>0&&(0,R.jsxs)(`div`,{className:`settings-field`,children:[(0,R.jsx)(`span`,{className:`settings-label`,children:`Connect an account`}),i.map(e=>(0,R.jsx)(`a`,{className:`account-connect`,href:`/v1/auth/login/${encodeURIComponent(e.provider)}?link=1&return=%2Fsettings%3Fsection%3Daccounts`,children:`Connect`},e.provider))]})]})}function i_(e){let{client:t}=e,[n,r]=(0,v.useState)({status:`loading`}),[i,a]=(0,v.useState)({});(0,v.useEffect)(()=>{let e=!1;return t.listProviders().then(t=>{e||r({status:`ready`,providers:t.providers})}).catch(t=>{e||r({status:`error`,message:t instanceof Error?t.message:String(t)})}),()=>{e=!0}},[t]);let o=e=>{r(t=>t.status===`ready`?{status:`ready`,providers:t.providers.map(t=>t.provider===e.provider?e:t)}:t)},s=(e,t)=>{a(n=>({...n,[e]:{key:``,...n[e],...t}}))},c=async e=>{let n=i[e];if(n!==void 0&&n.key!==``)try{o(await t.putProviderCredential(e,n.key)),s(e,{key:``,note:{kind:`ok`,message:`saved`}})}catch(t){s(e,{note:{kind:`error`,message:t instanceof Error?t.message:String(t)}})}},l=async e=>{try{o(await t.deleteProviderCredential(e)),s(e,{note:{kind:`ok`,message:`cleared`}})}catch(t){s(e,{note:{kind:`error`,message:t instanceof Error?t.message:String(t)}})}},u=async e=>{try{o(await t.refreshProvider(e))}catch(t){s(e,{note:{kind:`error`,message:t instanceof Error?t.message:String(t)}})}};return n.status===`loading`?(0,R.jsx)(`p`,{className:`settings-note`,children:`loading providers…`}):n.status===`error`?(0,R.jsx)(`p`,{className:`settings-note`,role:`alert`,children:n.message}):n.providers.length===0?(0,R.jsx)(`div`,{className:`settings-body`,children:(0,R.jsx)(`p`,{className:`settings-note`,children:`no providers are loaded`})}):(0,R.jsxs)(`div`,{className:`settings-body settings-provider-list`,children:[(0,R.jsx)(`p`,{className:`settings-note`,children:`readiness and credentials per provider — the key field is write-only (the server never returns it); saving applies immediately, no restart`}),n.providers.map(e=>{let t=i[e.provider]??{key:``};return(0,R.jsxs)(`fieldset`,{className:`settings-provider`,"data-provider":e.provider,children:[(0,R.jsxs)(`legend`,{className:`settings-provider-name`,children:[e.provider,(0,R.jsx)(`span`,{className:`settings-provider-status`,"data-status":e.status,children:e.status}),(0,R.jsxs)(`span`,{className:`settings-provider-meta`,children:[e.models,` model`,e.models===1?``:`s`]})]}),e.detail!==void 0&&(0,R.jsx)(`p`,{className:`settings-note`,children:e.detail}),(0,R.jsxs)(`div`,{className:`settings-provider-row`,children:[(0,R.jsx)(`input`,{type:`password`,className:`settings-provider-key`,placeholder:`api key`,value:t.key,autoComplete:`off`,onChange:t=>s(e.provider,{key:t.target.value})}),(0,R.jsx)(`button`,{type:`button`,className:`settings-provider-save`,disabled:t.key===``,onClick:()=>void c(e.provider),children:`Save`}),(0,R.jsx)(`button`,{type:`button`,className:`settings-provider-clear`,onClick:()=>void l(e.provider),children:`Clear`}),(0,R.jsx)(`button`,{type:`button`,className:`settings-provider-refresh`,onClick:()=>void u(e.provider),children:`Refresh`}),t.note!==void 0&&(0,R.jsx)(`span`,{className:`settings-note`,role:t.note.kind===`ok`?`status`:`alert`,children:t.note.message})]})]},e.provider)})]})}function a_(e){let{client:t}=e,[n,r]=(0,v.useState)(null),[i,a]=(0,v.useState)(null),[o,s]=(0,v.useState)(``),[c,l]=(0,v.useState)(!1),[u,d]=(0,v.useState)(null),[f,p]=(0,v.useState)(null),[m,h]=(0,v.useState)(!1),g=(0,v.useRef)(null);(0,v.useEffect)(()=>()=>{g.current!==null&&clearTimeout(g.current)},[]),(0,v.useEffect)(()=>{let e=!1;return t.listTokens().then(t=>{e||r(t)}).catch(t=>{e||a(Ug(t))}),()=>{e=!0}},[t]);async function _(){if(!(o.trim()===``||c)){l(!0),a(null);try{let e=await t.createToken(o.trim());d({id:e.record.id,token:e.token,name:e.record.name}),r(t=>t===null?t:[...t,e.record]),s(``)}catch(e){a(Ug(e))}finally{l(!1)}}}async function y(e){if(!(f===null||c)){l(!0),a(null);try{await t.revokeToken(e),r(t=>t===null?t:t.filter(t=>t.id!==e)),d(t=>t?.id===e?null:t),p(null)}catch(e){a(Ug(e))}finally{l(!1)}}}function b(){u!==null&&(nd(u.token),h(!0),g.current!==null&&clearTimeout(g.current),g.current=setTimeout(()=>h(!1),1500))}if(n===null)return(0,R.jsx)(`p`,{className:`settings-note`,role:i===null?void 0:`alert`,children:i??`loading tokens…`});let x=n.filter(e=>e.kind!==`session`),S=globalThis.location?.origin??``,C=S===``?`<your sigrun URL>`:S;return(0,R.jsxs)(`div`,{className:`settings-body`,"data-settings-section":`tokens`,children:[(0,R.jsx)(`p`,{className:`settings-note`,children:`Bearer tokens for the CLI, scripts, and sign-in. A token is shown once at creation — the server stores only its digest.`}),i!==null&&(0,R.jsx)(`p`,{className:`settings-note`,role:`alert`,children:i}),u!==null&&(0,R.jsxs)(`fieldset`,{className:`settings-field token-reveal`,children:[(0,R.jsxs)(`legend`,{className:`settings-label`,children:[`Token created: `,u.name]}),(0,R.jsx)(`p`,{className:`settings-note`,children:`Copy it now — it is never shown again.`}),(0,R.jsx)(`code`,{className:`token-secret`,children:u.token}),(0,R.jsxs)(`div`,{className:`settings-ext-row`,children:[(0,R.jsx)(`button`,{type:`button`,className:`token-copy`,onClick:b,children:m?`Copied`:`Copy`}),(0,R.jsx)(`button`,{type:`button`,className:`token-dismiss`,onClick:()=>d(null),children:`Done`})]}),(0,R.jsxs)(`label`,{className:`settings-field`,children:[(0,R.jsx)(`span`,{className:`settings-label`,children:`CLI`}),(0,R.jsx)(`code`,{className:`token-snippet`,children:`SIGRUN_TOKEN=${u.token} sigrun attach --server ${C}`})]}),(0,R.jsxs)(`label`,{className:`settings-field`,children:[(0,R.jsx)(`span`,{className:`settings-label`,children:`tui.json — $SIGRUN_CONFIG_DIR/tui.json (default ~/.config/sigrun/tui.json)`}),(0,R.jsx)(`code`,{className:`token-snippet`,children:`{"server": "${C}", "token": "${u.token}"}`})]})]}),x.length===0&&(0,R.jsx)(`p`,{className:`settings-note`,children:`No API tokens.`}),x.map(e=>(0,R.jsx)(`div`,{className:`settings-ext-row`,children:f?.id===e.id?(0,R.jsxs)(R.Fragment,{children:[(0,R.jsxs)(`span`,{className:`settings-ext-key`,children:[`Revoke `,e.name,`?`]}),(0,R.jsx)(`button`,{type:`button`,className:`token-revoke-confirm`,disabled:c,onClick:()=>void y(e.id),children:`Confirm revoke`}),(0,R.jsx)(`button`,{type:`button`,className:`token-revoke-cancel`,disabled:c,onClick:()=>p(null),children:`Cancel`})]}):(0,R.jsxs)(R.Fragment,{children:[(0,R.jsx)(`span`,{className:`settings-ext-key`,children:e.name}),(0,R.jsx)(`button`,{type:`button`,className:`token-revoke`,disabled:c,onClick:()=>p({id:e.id,name:e.name}),children:`Revoke`})]})},e.id)),(0,R.jsxs)(`div`,{className:`settings-field`,children:[(0,R.jsx)(`span`,{className:`settings-label`,children:`Create a token`}),(0,R.jsxs)(`div`,{className:`settings-ext-row`,children:[(0,R.jsx)(`input`,{type:`text`,className:`token-name-input`,"aria-label":`Token name`,placeholder:`name (e.g. laptop, ci)`,value:o,onChange:e=>s(e.target.value)}),(0,R.jsx)(`button`,{type:`button`,className:`token-create`,disabled:c||o.trim()===``,onClick:()=>void _(),children:`Create token`})]})]})]})}var o_=`sigrun.prefs`,s_={enterToSend:!1,showThinking:!0},c_=(()=>{let e=new Map;return{getItem:t=>e.get(t)??null,setItem:(t,n)=>{e.set(t,n)}}})();function l_(){return globalThis.localStorage??c_}function u_(e){if(e===null)return{};let t;try{t=JSON.parse(e)}catch{return{}}if(typeof t!=`object`||!t||Array.isArray(t))return{};let n=t,r={};for(let e of Object.keys(s_))typeof n[e]==`boolean`&&(r[e]=n[e]);return r}function d_(e){let t=e?.storage??l_(),[n,r]=(0,v.useState)(()=>u_(t.getItem(o_)));return{prefs:{...s_,...n},setPref(e,n){r(r=>{let i={...r,[e]:n};return t.setItem(o_,JSON.stringify(i)),i})}}}function f_(e,t){let n=t.trim().toLowerCase();return n===``?[]:e.filter(e=>e.label.toLowerCase().includes(n)||(e.help??``).toLowerCase().includes(n)||(e.key??``).toLowerCase().includes(n))}function p_(e,t){return f_(e,t)}function m_(e,t){return e.filter(e=>!(e.id===`providers`&&t===!1||e.scope===`user`&&e.admin===!0&&t===!1))}function h_(e){let{client:t,onClose:n,onSection:r,prefsState:i,theme:a,admin:o,onRestart:s,section:c}=e,[l,u]=(0,v.useState)({status:`loading`}),[d,f]=(0,v.useState)(null),[p,m]=(0,v.useState)(null),[h,g]=(0,v.useState)(null),[_,y]=(0,v.useState)(``),[b,x]=(0,v.useState)(null),S=(0,v.useRef)({}),C=(0,v.useRef)(null);(0,v.useEffect)(()=>{let e=!1;return t.getMeta().then(t=>{e||f(t)}).catch(()=>{}),t.listSettingsSections().then(t=>{e||u({status:`ready`,sections:t.sections,index:t.index})}).catch(t=>{e||u({status:`error`,message:t instanceof Error?t.message:String(t)})}),t.listExtensions().then(t=>{e||g(t.extensions)}).catch(()=>{e||g([])}),()=>{e=!0}},[t]);let w=(0,v.useMemo)(()=>l.status===`ready`?new Set(l.sections.filter(e=>e.slug!==`core`).map(e=>e.slug)):new Set,[l]);(0,v.useEffect)(()=>{if(l.status!==`ready`)return;let e=m_(l.sections,o);if(c!==void 0){let t=e.find(e=>e.slug===`core`&&e.id===c);if(t!==void 0){m({kind:`section`,entry:t});return}let n=e.find(e=>e.id===c);if(n!==void 0){m({kind:`section`,entry:n});return}let r=h!==null&&!w.has(c)?h.find(e=>e.name===c):void 0;if(r!==void 0){m({kind:`extension`,slug:r.name});return}}let t=e.find(e=>e.slug===`core`&&e.id===`general`);t!==void 0&&m({kind:`section`,entry:t})},[l,c,o,h,w]);let T=(0,v.useMemo)(()=>l.status===`ready`?p_(l.index,_):[],[l,_]),E=(0,v.useCallback)(async e=>{let t=l.status===`ready`?l.sections.find(t=>t.slug===e.slug&&t.id===e.sectionId):void 0;if(t!==void 0&&(y(``),r(t.id),e.key!==void 0)){let t=e.key;for(let e=0;e<20;e++){await new Promise(e=>setTimeout(e,50));let e=C.current?.querySelector(`[data-name=${JSON.stringify(t)}]`),n=e?.querySelector(`input, textarea, select, button, [tabindex]`)??e;if(n!=null){n.focus();return}}}},[l,r]),D=b?.pendingRestart??[],ee=b?.supervised===!0&&o!==!1&&s!==void 0,te=(0,v.useMemo)(()=>l.status===`ready`?m_(l.sections,o):[],[l,o]);return(0,R.jsx)(`div`,{className:`settings-page`,children:(0,R.jsxs)(`div`,{className:`settings-panel`,children:[(0,R.jsxs)(`header`,{className:`settings-head`,children:[(0,R.jsx)(`span`,{className:`settings-title`,children:`Settings`}),(0,R.jsx)(`input`,{type:`search`,className:`settings-search`,placeholder:`Search settings`,"aria-label":`search settings`,value:_,onChange:e=>y(e.target.value)}),(0,R.jsx)(`span`,{className:`spacer`}),(0,R.jsx)(`button`,{type:`button`,className:`settings-close`,title:`close settings`,onClick:n,children:`✕`})]}),D.length>0&&(0,R.jsxs)(`div`,{className:`settings-restart-callout`,role:`status`,children:[(0,R.jsxs)(`p`,{className:`settings-restart-text`,children:[`Restart sigrun to apply: `,D.join(`, `)]}),ee&&(0,R.jsx)(`button`,{type:`button`,className:`settings-restart`,onClick:()=>void s(),children:`Restart`})]}),l.status===`loading`&&(0,R.jsx)(`p`,{className:`settings-note`,children:`loading settings…`}),l.status===`error`&&(0,R.jsx)(`p`,{className:`settings-note`,role:`alert`,children:l.message}),l.status===`ready`&&(0,R.jsxs)(`div`,{className:`settings-layout`,children:[(0,R.jsxs)(`nav`,{className:`settings-nav`,"aria-label":`settings sections`,children:[te.filter(e=>e.scope!==`user`).map(e=>(0,R.jsx)(`button`,{type:`button`,className:`settings-nav-item`,"data-active":p?.kind===`section`&&p.entry.slug===e.slug&&p.entry.id===e.id?``:void 0,onClick:()=>r(e.id),children:e.title},`${e.slug}/${e.id}`)),te.some(e=>e.scope===`user`)&&(0,R.jsxs)(`div`,{className:`settings-nav-group`,role:`group`,"aria-label":`My settings`,children:[(0,R.jsx)(`div`,{className:`settings-nav-heading`,children:`My settings`}),te.filter(e=>e.scope===`user`).map(e=>(0,R.jsx)(`button`,{type:`button`,className:`settings-nav-item`,"data-active":p?.kind===`section`&&p.entry.slug===e.slug&&p.entry.id===e.id?``:void 0,onClick:()=>r(e.id),children:e.title},`${e.slug}/${e.id}`))]}),(0,R.jsx)(w_,{extensions:h,open:p,coveredSlugs:w,onOpen:r})]}),(0,R.jsx)(`div`,{className:`settings-section`,ref:C,children:p===null?(0,R.jsx)(`p`,{className:`settings-note`,children:`select a section`}):p.kind===`extension`?(0,R.jsx)(T_,{client:t,slug:p.slug}):(0,R.jsx)(g_,{client:t,entry:p.entry,prefsState:i,theme:a,meta:d,onCoreMeta:x,valuesRef:S},`${p.entry.slug}/${p.entry.id}`)})]}),_.trim()!==``&&T.length>0&&(0,R.jsx)(`div`,{className:`settings-search-results`,role:`listbox`,children:T.slice(0,20).map((e,t)=>(0,R.jsxs)(`button`,{type:`button`,className:`settings-search-hit`,role:`option`,"aria-selected":`false`,onClick:()=>void E(e),children:[(0,R.jsx)(`span`,{className:`settings-search-hit-label`,children:e.label}),(0,R.jsxs)(`span`,{className:`settings-search-hit-path`,children:[e.slug===`core`?``:`${e.slug} · `,e.sectionId]})]},`${e.slug}/${e.sectionId}/${e.key??e.label}/${t}`))})]})})}function g_(e){let{entry:t,client:n,prefsState:r,theme:i,meta:a,onCoreMeta:o}=e;return t.slug===`core`&&t.id===`interface`?(0,R.jsx)(x_,{prefsState:r,theme:i}):t.slug===`core`&&t.id===`providers`?(0,R.jsx)(i_,{client:n}):t.slug===`core`&&t.id===`extensions`?(0,R.jsx)(E_,{client:n}):t.slug===`core`&&t.id===`accounts`?(0,R.jsx)(r_,{client:n}):t.slug===`core`&&t.id===`tokens`?(0,R.jsx)(a_,{client:n}):(0,R.jsx)(__,{client:n,entry:t,meta:t.slug===`core`&&t.id===`general`?a:null,onCoreMeta:t.slug===`core`?o:void 0,valuesRef:e.valuesRef})}function __(e){let{entry:t,meta:n,client:r}=e,i=(0,v.useMemo)(()=>og({slug:t.slug,id:t.id,fetch:r.rawFetch}),[t.slug,t.id,r]),{onCoreMeta:a,valuesRef:o}=e,s=(0,v.useCallback)(e=>{if(o.current[`${t.slug}/${t.id}`]=typeof e.settings==`object`&&e.settings!==null&&!Array.isArray(e.settings)?e.settings:{},a!==void 0){let t=e.meta;if(typeof t==`object`&&t&&!Array.isArray(t)&&Array.isArray(t.pendingRestart)){let e=t;a({pendingRestart:e.pendingRestart.filter(e=>typeof e==`string`),supervised:e.supervised===!0})}}},[t.slug,t.id,a,o]);return(0,R.jsxs)(`div`,{className:`settings-body`,"data-settings-section":t.id,children:[t.slug===`core`&&t.id===`general`&&(0,R.jsxs)(`p`,{className:`settings-version`,children:[`sigrun `,n?.version===void 0?``:`v${n.version}`,n?.harnessVersion===void 0?``:` · pi-durable v${n.harnessVersion}`]}),(0,R.jsx)(v_,{transport:i,onData:s}),(0,R.jsx)(zh,{transport:i})]})}function v_(e){let{transport:t,onData:n}=e;return(0,v.useEffect)(()=>{let e=!1,r=()=>{t.fetchData().then(t=>{!e&&t.data!==void 0&&n(t.data)}).catch(()=>{})};r();let i=setInterval(r,1500);return()=>{e=!0,clearInterval(i)}},[t,n]),null}var y_=[{key:`enterToSend`,label:`Enter sends the prompt`,note:`off: Ctrl+Enter submits (Enter inserts a newline); on: Enter submits and Shift+Enter inserts a newline. Ctrl+Enter submits either way.`},{key:`showThinking`,label:`Show thinking blocks`,note:`Show thinking text inside activity details`}],b_=[{value:`system`,label:`System`},{value:`dark`,label:`Dark`},{value:`light`,label:`Light`}];function x_(e){let{prefsState:t,theme:n}=e;return(0,R.jsxs)(`div`,{className:`settings-body`,children:[(0,R.jsxs)(`fieldset`,{className:`settings-field`,children:[(0,R.jsx)(`legend`,{className:`settings-label`,children:`Mode`}),(0,R.jsx)(`div`,{className:`settings-mode-row`,role:`group`,"aria-label":`mode`,children:b_.map(e=>(0,R.jsx)(`button`,{type:`button`,className:`settings-mode`,"data-mode-option":e.value,"aria-pressed":n.mode===e.value,onClick:()=>n.setMode(e.value),children:e.label},e.value))})]}),(0,R.jsxs)(`fieldset`,{className:`settings-field`,children:[(0,R.jsx)(`legend`,{className:`settings-label`,children:`Palette`}),(0,R.jsx)(`div`,{className:`settings-palettes`,role:`group`,"aria-label":`palette`,children:Zg.map(e=>{let t=Yg[e],r=t[n.resolved];return(0,R.jsxs)(`button`,{type:`button`,className:`settings-palette`,"data-palette-option":e,"aria-pressed":n.palette===e,title:t.label,onClick:()=>n.setPalette(e),style:{background:r.bg},children:[(0,R.jsx)(`span`,{className:`settings-swatch-dot`,"aria-hidden":`true`,style:{background:r.text}}),(0,R.jsx)(`span`,{className:`settings-swatch-dot`,"aria-hidden":`true`,style:{background:Xg[t.defaultAccent][n.resolved]}})]},e)})})]}),(0,R.jsxs)(`fieldset`,{className:`settings-field`,children:[(0,R.jsx)(`legend`,{className:`settings-label`,children:`Accent`}),(0,R.jsx)(`div`,{className:`settings-accents`,role:`group`,"aria-label":`accent`,children:Qg.map(e=>(0,R.jsx)(`button`,{type:`button`,className:`settings-accent`,"data-accent-option":e,"aria-pressed":n.accent===e,title:Xg[e].label,onClick:()=>n.setAccent(e),style:{background:Xg[e][n.resolved]}},e))})]}),y_.map(e=>(0,R.jsxs)(`label`,{className:`settings-field settings-checkbox`,children:[(0,R.jsx)(`input`,{type:`checkbox`,className:`settings-pref-${e.key}`,checked:t.prefs[e.key],onChange:n=>t.setPref(e.key,n.target.checked)}),(0,R.jsx)(`span`,{className:`settings-label`,children:e.label}),(0,R.jsx)(`p`,{className:`settings-note`,children:e.note})]},e.key)),(0,R.jsx)(`p`,{className:`settings-note`,children:`interface preferences are per-browser (stored locally — never sent to the server)`})]})}function S_(e){return Object.keys(e).length===0?``:JSON.stringify(e,null,2)}function C_(e){let t=e.trim();if(t===``)return{ok:!0,value:{}};try{let e=JSON.parse(t);return typeof e!=`object`||!e||Array.isArray(e)?{ok:!1,message:`settings must be a JSON object`}:{ok:!0,value:e}}catch(e){return{ok:!1,message:`invalid JSON: ${e instanceof Error?e.message:String(e)}`}}}function w_(e){let{extensions:t,coveredSlugs:n,onOpen:r,open:i}=e;if(t===null)return null;let a=t.filter(e=>!n.has(e.name));return a.length===0?null:(0,R.jsx)(R.Fragment,{children:a.map(e=>(0,R.jsxs)(`button`,{type:`button`,className:`settings-nav-item settings-nav-extension`,"data-ext":e.name,"data-active":i?.kind===`extension`&&i.slug===e.name?``:void 0,onClick:()=>r(e.name),children:[e.name,` (advanced)`]},e.name))})}function T_(e){let{client:t,slug:n,status:r,version:i}=e,[a,o]=(0,v.useState)(null),[s,c]=(0,v.useState)(null);(0,v.useEffect)(()=>{let e=!1;return o(null),c(null),Promise.all([t.getExtensionSettings(n),t.listExtensionSecrets(n)]).then(([t,n])=>{e||o({settingsText:S_(t.settings),secrets:n.secrets,secretValues:{},newKey:``,newValue:``})}).catch(t=>{e||c(t instanceof Error?t.message:String(t))}),()=>{e=!0}},[t,n]);let l=e=>{o(t=>t===null?t:{...t,...e})},u=async()=>{if(a===null)return;let e=C_(a.settingsText);if(!e.ok){l({note:{kind:`error`,message:e.message}});return}try{await t.putExtensionSettings(n,e.value),l({note:{kind:`ok`,message:`saved`}})}catch(e){l({note:{kind:`error`,message:e instanceof Error?e.message:String(e)}})}},d=async(e,r)=>{if(e!==``&&r!==``&&a!==null)try{let{secrets:i}=await t.putExtensionSecret(n,e,r);o({...a,secrets:i,secretValues:{...a.secretValues,[e]:``},newKey:``,newValue:``,note:{kind:`ok`,message:`secret ${e} set`}})}catch(e){l({note:{kind:`error`,message:e instanceof Error?e.message:String(e)}})}},f=async e=>{try{let{secrets:r}=await t.deleteExtensionSecret(n,e);l({secrets:r,note:{kind:`ok`,message:`secret ${e} deleted`}})}catch(e){l({note:{kind:`error`,message:e instanceof Error?e.message:String(e)}})}};return s===null?a===null?(0,R.jsx)(`p`,{className:`settings-note`,children:`loading…`}):(0,R.jsxs)(`div`,{className:`settings-body settings-ext-list`,children:[(0,R.jsx)(`p`,{className:`settings-note`,children:`settings are the extension's own JSON (read at factory time → applies at restart); secrets list keys only — values are write-only and never displayed`}),(0,R.jsxs)(`fieldset`,{className:`settings-ext`,"data-ext":n,children:[(0,R.jsxs)(`legend`,{className:`settings-ext-name`,children:[n,(0,R.jsxs)(`span`,{className:`settings-ext-meta`,children:[r??``,i===void 0?``:` · v${i}`]})]}),(0,R.jsxs)(`label`,{className:`settings-field`,children:[(0,R.jsx)(`span`,{className:`settings-label`,children:`Settings (raw JSON)`}),(0,R.jsx)(`textarea`,{className:`settings-ext-settings`,rows:4,spellCheck:!1,placeholder:`{}`,value:a.settingsText,onChange:e=>l({settingsText:e.target.value})}),(0,R.jsxs)(`div`,{className:`settings-ext-row`,children:[(0,R.jsx)(`button`,{type:`button`,className:`settings-ext-save`,onClick:()=>void u(),children:`Save settings`}),a.note!==void 0&&(0,R.jsx)(`span`,{className:`settings-note`,role:a.note.kind===`ok`?`status`:`alert`,children:a.note.message})]})]}),(0,R.jsxs)(`div`,{className:`settings-field`,children:[(0,R.jsx)(`span`,{className:`settings-label`,children:`Secrets`}),a.secrets.length===0&&(0,R.jsx)(`p`,{className:`settings-note`,children:`no secrets set`}),a.secrets.map(e=>(0,R.jsxs)(`div`,{className:`settings-ext-row`,children:[(0,R.jsxs)(`span`,{className:`settings-ext-key`,children:[e.key,` `,(0,R.jsxs)(`span`,{className:`settings-ext-source`,children:[`(`,e.source,`)`]})]}),(0,R.jsx)(`input`,{type:`password`,className:`settings-ext-secret-value`,"data-secret-key":e.key,placeholder:`new value`,value:a.secretValues[e.key]??``,onChange:t=>l({secretValues:{...a.secretValues,[e.key]:t.target.value}})}),(0,R.jsx)(`button`,{type:`button`,className:`settings-ext-secret-set`,"data-secret-key":e.key,onClick:()=>void d(e.key,a.secretValues[e.key]??``),children:`Set`}),(0,R.jsx)(`button`,{type:`button`,className:`settings-ext-secret-delete`,"data-secret-key":e.key,onClick:()=>void f(e.key),children:`Delete`})]},e.key)),(0,R.jsxs)(`div`,{className:`settings-ext-row`,children:[(0,R.jsx)(`input`,{type:`text`,className:`settings-ext-new-key`,placeholder:`new key`,value:a.newKey,onChange:e=>l({newKey:e.target.value})}),(0,R.jsx)(`input`,{type:`password`,className:`settings-ext-new-value`,placeholder:`value`,value:a.newValue,onChange:e=>l({newValue:e.target.value})}),(0,R.jsx)(`button`,{type:`button`,className:`settings-ext-secret-add`,onClick:()=>void d(a.newKey,a.newValue),children:`Set`})]})]})]})]}):(0,R.jsx)(`p`,{className:`settings-note`,role:`alert`,children:s})}function E_(e){let{client:t}=e,[n,r]=(0,v.useState)(null),[i,a]=(0,v.useState)(null);return(0,v.useEffect)(()=>{let e=!1;return t.listExtensions().then(t=>{e||r(t.extensions)}).catch(t=>{e||a(t instanceof Error?t.message:String(t))}),()=>{e=!0}},[t]),i===null?n===null?(0,R.jsx)(`p`,{className:`settings-note`,children:`loading extensions…`}):n.length===0?(0,R.jsx)(`div`,{className:`settings-body`,children:(0,R.jsx)(`p`,{className:`settings-note`,children:`no extensions are configured`})}):(0,R.jsx)(`div`,{className:`settings-body`,children:n.map(e=>(0,R.jsx)(T_,{client:t,slug:e.name,status:e.status,version:e.version},e.name))}):(0,R.jsx)(`p`,{className:`settings-note`,role:`alert`,children:i})}var D_=`sigrun.theme`,O_=`sigrun.palette`,k_=`sigrun.accent`,A_=(()=>{let e=new Map;return{getItem:t=>e.get(t)??null,setItem:(t,n)=>{e.set(t,n)}}})();function j_(){return globalThis.localStorage??A_}function M_(){let e=globalThis.document?.documentElement;return e===void 0?null:{dataset:e.dataset,setProperty:(t,n)=>{e.style.setProperty(t,n)}}}function N_(){return globalThis.matchMedia??null}function P_(e){return e===`dark`||e===`light`?e:`system`}function F_(e){let t=e.getItem(k_);if(t===`amber`){let t=`baltic-amber`;return e.setItem(k_,t),t}return n_(t)?t:(e.setItem(k_,e_),e_)}function I_(e){let t=e.getItem(O_);return t_(t)?t:(e.setItem(O_,$g),$g)}var L_={bg:`--bg`,surface:`--surface`,surface2:`--surface-2`,border:`--border`,text:`--text`,muted:`--muted`,faint:`--faint`,ok:`--ok`,code:`--code`};function R_(e,t){let n=/^#([0-9a-f]{3}|[0-9a-f]{6})$/i.exec(e);if(n===null)return`color-mix(in srgb, ${e} ${Math.round(t*100)}%, transparent)`;let r=n[1].length===3?n[1].split(``).map(e=>e+e).join(``):n[1];return`rgba(${Number.parseInt(r.slice(0,2),16)}, ${Number.parseInt(r.slice(2,4),16)}, ${Number.parseInt(r.slice(4,6),16)}, ${t})`}function z_(e){let t=e?.storage??j_(),n=e?.root===void 0?M_():e.root,r=e?.matchMedia===void 0?N_():e.matchMedia,[i,a]=(0,v.useState)(()=>P_(t.getItem(D_))),[o,s]=(0,v.useState)(()=>I_(t)),[c,l]=(0,v.useState)(()=>F_(t)),[u,d]=(0,v.useState)(()=>r?.(`(prefers-color-scheme: dark)`)?.matches??!0);(0,v.useEffect)(()=>{let e=r?.(`(prefers-color-scheme: dark)`);if(e==null)return;let t=()=>d(e.matches);return e.addEventListener(`change`,t),()=>e.removeEventListener(`change`,t)},[r]);let f=i===`system`?u?`dark`:`light`:i;return(0,v.useEffect)(()=>{if(n===null)return;let e=Yg[o][f];for(let[t,r]of Object.entries(L_))n.setProperty(r,e[t]);let t=Xg[c][f];n.setProperty(`--accent`,t),n.setProperty(`--accent-bg`,R_(t,f===`dark`?.14:.16)),n.dataset.mode=f,n.dataset.palette=o,n.dataset.accent=c},[n,f,o,c]),{mode:i,resolved:f,palette:o,accent:c,setMode(e){t.setItem(D_,e),a(e)},setPalette(e){t.setItem(O_,e),s(e)},setAccent(e){t.setItem(k_,e),l(e)}}}function B_(e,t){let n=e.entries;if(t.entries!==void 0){let r=new Set(t.entries.remove??[]);n=[...e.entries.filter(e=>!r.has(e.id)),...t.entries.append??[]]}let r=e.docs;if(t.docs!==void 0){let n=new Set(t.docs.unset??[]),i={};for(let[t,r]of Object.entries(e.docs))n.has(t)||(i[t]=r);for(let[e,n]of Object.entries(t.docs.set??{}))i[e]=n;r=i}return{...e,entries:n,docs:r,conversation:t.conversation??e.conversation,steer:t.steer??e.steer}}var V_=250,H_=4e3,U_=e=>new EventSource(e);function W_(e){let t;try{t=JSON.parse(e)}catch{return}if(typeof t==`object`&&t&&!Array.isArray(t))return t}function G_(e){let t;try{t=JSON.parse(e)}catch{return}if(typeof t==`object`&&t&&!Array.isArray(t))return t}function K_(e,t,n=``,r={}){let i=r.createEventSource??U_,a=`${n}/v1/conversations/${e}/stream`,o=!1,s=0,c,l,u;function d(){if(o)return;let e=i(a);l=e;let n=!1;e.addEventListener(`open`,()=>{o||(s=0,t.onOpen?.())}),e.addEventListener(`snapshot`,e=>{if(o)return;let n=W_(e.data);if(n===void 0){t.onError?.(`malformed snapshot frame (not a view object)`);return}u=n,t.onSnapshot?.(n)}),e.addEventListener(`delta`,e=>{if(o)return;if(u===void 0){t.onError?.(`malformed delta frame (arrived before any snapshot)`);return}let n=G_(e.data);if(n===void 0){t.onError?.(`malformed delta frame (not a delta object)`);return}u=B_(u,n),t.onView?.(u)}),e.addEventListener(`error`,()=>{if(o||n)return;n=!0,t.onError?.(`conversation stream connection error`),e.close(),l===e&&(l=void 0),s+=1;let r=Math.min(V_*2**(s-1),H_);c=setTimeout(()=>{c=void 0,d()},r)})}return d(),{close(){o||(o=!0,c!==void 0&&(clearTimeout(c),c=void 0),l?.close(),l=void 0)}}}var q_={view:null,status:`idle`,frames:0,error:null};function J_(e,t={}){let{baseUrl:n,createEventSource:r}=t,[i,a]=(0,v.useState)(q_);return(0,v.useEffect)(()=>{if(e===null){a(q_);return}a({view:null,status:`connecting`,frames:0,error:null});let t=K_(e,{onSnapshot:e=>a(t=>({view:e,status:`snapshot`,frames:t.frames+1,error:null})),onView:e=>a(t=>({view:e,status:`live`,frames:t.frames+1,error:null})),onError:e=>a(t=>({...t,status:`error`,error:e}))},n,{createEventSource:r});return()=>t.close()},[e,n,r]),i}var Y_=24;function X_(e,t){let[n,r]=(0,v.useState)(!0),i=(0,v.useRef)(!0);return(0,v.useEffect)(()=>{if(e===null)return;let t=()=>{let t=e.scrollHeight-e.scrollTop-e.clientHeight<=Y_;i.current=t,r(t)};return e.addEventListener(`scroll`,t,{passive:!0}),t(),()=>e.removeEventListener(`scroll`,t)},[e]),(0,v.useEffect)(()=>{e!==null&&i.current&&(e.scrollTop=e.scrollHeight)},[e,t]),n}function Z_(e){let{client:t,conversationId:n,path:r}=e,[i,a]=(0,v.useState)({kind:`loading`});return(0,v.useEffect)(()=>{let e=!1;return a({kind:`loading`}),t.readFile(n,r).then(t=>{e||a(t.encoding===`text`?{kind:`text`,content:t.content,size:t.size}:{kind:`binary`,size:t.size})}).catch(t=>{e||a({kind:`error`,message:t instanceof Error?t.message:String(t)})}),()=>{e=!0}},[t,n,r]),(0,R.jsxs)(`div`,{className:`file-preview`,"data-path":r,children:[(0,R.jsx)(`div`,{className:`file-preview-path`,children:r}),i.kind===`loading`&&(0,R.jsx)(`p`,{className:`file-preview-loading`,children:`loading…`}),i.kind===`text`&&(0,R.jsx)(`pre`,{className:`file-preview-content`,children:i.content}),i.kind===`binary`&&(0,R.jsxs)(`p`,{className:`file-preview-binary`,children:[`binary file — `,i.size,` bytes (no preview)`]}),i.kind===`error`&&(0,R.jsx)(`p`,{role:`alert`,children:i.message})]})}function Q_(e){return[...e].sort((e,t)=>(e.kind===`directory`?0:1)-(t.kind===`directory`?0:1)||e.name.localeCompare(t.name))}function $_(e){let{client:t,conversationId:n,onClose:r}=e,[i,a]=(0,v.useState)(null),[o,s]=(0,v.useState)({}),[c,l]=(0,v.useState)({}),[u,d]=(0,v.useState)(null),[f,p]=(0,v.useState)(null);(0,v.useEffect)(()=>{if(a(null),s({}),l({}),d(null),p(null),n===null)return;let e=!1;return t.listFiles(n).then(t=>{e||a(Q_(t.entries))}).catch(t=>{e||p(t instanceof Error?t.message:String(t))}),()=>{e=!0}},[t,n]);async function m(e){if(n!==null){if(c[e.path]){l(t=>{let n={...t};return delete n[e.path],n});return}if(l(t=>({...t,[e.path]:!0})),o[e.path]===void 0)try{let r=await t.listFiles(n,e.path);s(t=>({...t,[e.path]:Q_(r.entries)}))}catch(e){p(e instanceof Error?e.message:String(e))}}}function h(e,t){return e.map(e=>{if(e.kind===`directory`){let n=c[e.path]===!0,r=o[e.path];return(0,R.jsxs)(`li`,{children:[(0,R.jsxs)(`button`,{type:`button`,className:`workspace-dir`,"data-tree-row":`true`,"data-path":e.path,"aria-expanded":n,style:{paddingLeft:`${t*.9}rem`},onClick:()=>void m(e),children:[n?`▾`:`▸`,` `,e.name,`/`]}),n&&r!==void 0&&(0,R.jsx)(`ul`,{className:`workspace-children`,children:h(r,t+1)})]},e.path)}return(0,R.jsx)(`li`,{children:(0,R.jsx)(`button`,{type:`button`,className:`workspace-file`,"data-tree-row":`true`,"data-path":e.path,"data-selected":u===e.path||void 0,style:{paddingLeft:`${t*.9}rem`},onClick:()=>d(e.path),children:e.name})},e.path)})}return(0,R.jsxs)(`section`,{className:`workspace-browser`,"aria-label":`workspace files`,children:[(0,R.jsxs)(`h2`,{className:`workspace-title`,children:[`Workspace`,r!==void 0&&(0,R.jsx)(`button`,{type:`button`,className:`workspace-close`,"aria-label":`close workspace panel`,title:`close`,onClick:r,children:`✕`})]}),n===null?(0,R.jsx)(`p`,{className:`workspace-empty`,children:`Select a conversation to browse its workspace`}):(0,R.jsxs)(R.Fragment,{children:[f!==null&&(0,R.jsx)(`p`,{role:`alert`,children:f}),i===null&&f===null?(0,R.jsx)(`p`,{className:`workspace-loading`,children:`loading…`}):i===null?null:(0,R.jsx)(`ul`,{className:`workspace-tree`,children:h(i,0)}),u!==null&&(0,R.jsx)(Z_,{client:t,conversationId:n,path:u})]})]})}var ev=C(),tv=`sigrun.panel`,nv=6e4;function rv(){let e=globalThis.localStorage;try{let t=e?.getItem(tv)??null;return t===`outline`||t===`workspace`||t===`jobs`?t:null}catch{return null}}function iv(e){try{globalThis.localStorage?.setItem(tv,e??`none`)}catch{}}var av=`sigrun.timeline`;function ov(){try{return globalThis.localStorage?.getItem(av)!==`0`}catch{return!0}}function sv(e){try{globalThis.localStorage?.setItem(av,e?`1`:`0`)}catch{}}function cv(e,t){let n=globalThis.document;if(n===void 0)return;let r=URL.createObjectURL(new Blob([t],{type:`application/json`})),i=n.createElement(`a`);i.href=r,i.download=e,n.body.appendChild(i),i.click(),i.remove(),URL.revokeObjectURL(r)}function lv(e,t){return t===null?`sigrun`:ae(e.find(e=>e.id===t)??{id:t,archived:!1,pinned:!1})}function uv(e){let{activeId:t,view:n,status:r,error:i,showThinking:a,timeline:o}=e;if(t===null)return(0,R.jsx)(`section`,{className:`chat-center`,children:(0,R.jsx)(`p`,{className:`chat-empty`,children:`Start a conversation — type below.`})});let s=n?.steer.busy??!1,c=n!==null&&Ah(n)>0,l=n===null||c?void 0:jh(n);return(0,R.jsxs)(`section`,{className:`chat-center`,"data-view-status":r,"aria-label":`chat transcript`,ref:e.onScrollRoot,style:e.dockPadding>0?{paddingBottom:`${e.dockPadding}px`}:void 0,children:[i!==null&&(0,R.jsx)(`p`,{role:`alert`,children:i}),n===null?(0,R.jsx)(`p`,{className:`chat-loading`,children:`loading…`}):(0,R.jsxs)(R.Fragment,{children:[(0,R.jsx)(Ym.Provider,{value:e.attachChatTransport,children:(0,R.jsx)(Ih,{view:n,showThinking:a,timeline:o,parent:e.parent,client:e.client,onNavigate:e.onNavigate})}),s&&(0,R.jsxs)(`div`,{className:`chat-working`,role:`status`,children:[(0,R.jsx)(`span`,{className:`chat-working-dot`}),(0,R.jsx)(`span`,{className:`chat-working-dot`}),(0,R.jsx)(`span`,{className:`chat-working-dot`}),(0,R.jsx)(`span`,{className:`chat-working-label`,children:c?`compacting…`:`working…`})]}),l!==void 0&&(0,R.jsxs)(`p`,{className:`chat-compaction-failure`,role:`alert`,children:[`compaction failed: `,l]})]})]})}function dv(e){let t=e.startsWith(`#`)?e.slice(1):e,n=/^\/settings(?:\/([^/]+))?\/?$/.exec(t);if(n!==null){let e=n[1];if(e===void 0)return{kind:`settings`};try{return{kind:`settings`,section:decodeURIComponent(e)}}catch{return{kind:`chat`}}}let r=/^\/ext\/([^/]+)\/([^/?]+)(?:\?(.*))?$/.exec(t);if(r===null)return{kind:`chat`};try{return{kind:`ext`,slug:decodeURIComponent(r[1]??``),id:decodeURIComponent(r[2]??``),params:fv(r[3])}}catch{return{kind:`chat`}}}function fv(e){let t={};if(e!==void 0){let n=new URLSearchParams(e).get(`params`);if(n!==null)try{let e=JSON.parse(n);typeof e==`object`&&e&&!Array.isArray(e)&&(t=e)}catch{}}return t}function pv(e){if(e.kind===`chat`)return`#/c`;if(e.kind===`settings`)return e.section===void 0?`#/settings`:`#/settings/${encodeURIComponent(e.section)}`;let t=`#/ext/${encodeURIComponent(e.slug)}/${encodeURIComponent(e.id)}`;return Object.keys(e.params).length===0?t:`${t}?params=${encodeURIComponent(JSON.stringify(e.params))}`}function mv(){let e=globalThis.location;if(e?.pathname!==`/settings`)return;let t=new URLSearchParams(e.search??``).get(`section`),n=t===null||t===``?`#/settings`:`#/settings/${encodeURIComponent(t)}`;hv=n,globalThis.history?.replaceState(null,``,`/${n}`)}var hv=``;function gv(){let e=globalThis.location;return e!==void 0&&typeof e.hash==`string`?e.hash:hv}function _v(e,t=!1){let n=globalThis.history;hv=e,n!==void 0&&(t?n.replaceState(null,``,e):n.pushState(null,``,e))}function vv(e={}){let t=e.client??ev,n=e.identity,r=e.onLogout,i=e.onRestarting,a=z_(),o=d_(),[s,c]=(0,v.useState)({status:`loading`}),l=(0,v.useCallback)(async()=>{try{await t.requestRestart()}catch(e){k(`restart failed: ${e instanceof Error?e.message:String(e)}`);return}k(null),c({status:`restarting`});let e=Date.now()+nv;for(;;){await new Promise(e=>setTimeout(e,500));let n=!1;try{n=await t.checkReady()}catch{}if(n){i===void 0?c({status:`loading`}):i();return}if(Date.now()>e){c({status:`refused`,message:`restart did not come back: /readyz never answered within ${nv/1e3}s — check the deployment's supervisor`});return}}},[t,i]);(0,v.useEffect)(()=>{e.onExposeActions?.({restart:l}),(e.onExposeActions!==void 0||globalThis.__sigrunE2E===!0)&&(globalThis.__sigrunAppActions={restart:l})},[l]);let[u,d]=(0,v.useState)(null),[f,p]=(0,v.useState)(rv),[m,h]=(0,v.useState)(ov),[g,_]=(0,v.useState)(!1),[,y]=(0,v.useState)(0),b=globalThis,x=s.status===`ready`&&b.location?.hash.startsWith(`#/blocks`)?`blocks`:`chats`;mv();let[S,C]=(0,v.useState)(()=>dv(gv())),w=(0,v.useRef)(!1),T=(0,v.useRef)(null),[E]=(0,v.useState)(()=>new sg),[D]=(0,v.useState)(()=>new ug),ee=(0,v.useCallback)(e=>D.attach(e),[D]),[te]=(0,v.useState)([]),[ne,re]=(0,v.useState)(null),[ie,O]=(0,v.useState)(null),[oe,k]=(0,v.useState)(null),[se,ce]=(0,v.useState)(null),[le,ue]=(0,v.useState)(0),de=(0,v.useCallback)(e=>{if(e===null)return;let t=()=>ue(e.offsetHeight);t();let n=globalThis.ResizeObserver;if(n===void 0)return;let r=new n(t);return r.observe(e),()=>r.disconnect()},[]),{view:fe,status:pe,error:me,frames:he}=J_(u,{createEventSource:e.createEventSource});X_(se,he);let[ge,_e]=(0,v.useState)(0),A=Jg(t,{busy:fe?.steer.busy??!1,createEventSource:e.createEventSource,onJobChanged:(0,v.useCallback)(()=>{_e(e=>e+1)},[]),onSurfaceChanged:(0,v.useCallback)(e=>{E.dispatch(e)},[E]),onChatChanged:(0,v.useCallback)(e=>{D.dispatch(e)},[D])}),j=S.kind===`ext`?S:null,ve=j===null?``:Te(j.params??{}),[M,N]=(0,v.useState)(null);(0,v.useEffect)(()=>{if(j===null){N(null);return}let e=!0;return De(j.slug,j.id,ve).then(t=>{e&&N({key:ve,hash:t})}),()=>{e=!1}},[j,ve]);let ye=(0,v.useMemo)(()=>{if(j!==null&&M!==null&&M.key===ve)return E.attach({slug:j.slug,id:j.id,params:j.params,...A.streamId===void 0?{}:{streamId:A.streamId}},M.hash)},[j,ve,M,E,A.streamId]),be=(0,v.useMemo)(()=>{if(ne===null)return null;let[e,t]=ne.split(`/`);return e===void 0||t===void 0||e===``||t===``?null:{slug:e,id:t}},[ne]),[xe,Se]=(0,v.useState)(null);(0,v.useEffect)(()=>{if(be===null){Se(null);return}let e=!0,t=ne??``;return De(be.slug,be.id,Te({})).then(n=>{e&&Se({forKey:t,hash:n})}),()=>{e=!1}},[be,ne]);let Ce=(0,v.useMemo)(()=>{if(be!==null&&xe!==null&&xe.forKey===ne)return E.attach({slug:be.slug,id:be.id,...A.streamId===void 0?{}:{streamId:A.streamId}},xe.hash)},[be,ne,xe,E,A.streamId]);(0,v.useEffect)(()=>{j!==null&&A.noteSurfaceVisible(j.slug,j.id,j.params),be!==null&&A.noteSurfaceVisible(be.slug,be.id)},[j,ve,be,A.streamId,A.noteSurfaceVisible]);let P=(0,v.useMemo)(()=>{if(be!==null&&s.status===`ready`)return hg(s.meta.extensions).find(e=>e.slug===be.slug&&e.id===be.id)?.refreshMs},[be,s]),we=(0,v.useMemo)(()=>{let e=A.rows.find(e=>e.id===u)?.parent;if(e===void 0)return;let t=A.rows.find(t=>t.id===e.id);return{id:e.id,name:ae(t===void 0?{id:e.id,archived:!1,pinned:!1}:t)}},[A.rows,u]),Ee=(0,v.useMemo)(()=>{let e=[];for(let t of je(fe?.entries??[]))t.kind===`user`&&e.push({entryId:t.entry.id,text:yh(t.entry)});return e},[fe]),Oe=(0,v.useCallback)(e=>{d(e),_(!1)},[]),ke=(0,v.useCallback)(e=>{p(t=>{let n=t===e?null:e;return iv(n),n})},[]),Ae=(0,v.useCallback)(()=>{p(null),iv(null)},[]);(0,v.useEffect)(()=>{let e=()=>{let e=dv(gv());e.kind!==`settings`&&(w.current=!1,T.current=null),C(e)};return globalThis.addEventListener?.(`popstate`,e),()=>{globalThis.removeEventListener?.(`popstate`,e)}},[]);let Me=(0,v.useCallback)((e,t)=>{let n={kind:`ext`,slug:e,id:t,params:{}};_v(pv(n)),C(n),w.current=!1,_(!1)},[]),Ne=(0,v.useCallback)(e=>{let t=e===void 0?{kind:`settings`}:{kind:`settings`,section:e},n=gv(),r=pv(t);r!==n&&_v(r),!w.current&&dv(n).kind!==`settings`&&(T.current=n===``?`#/c`:n),C(t),w.current=!0,_(!1)},[]),Pe=(0,v.useCallback)(()=>Ne(void 0),[Ne]),Fe=(0,v.useCallback)(e=>Ne(e),[Ne]),Ie=(0,v.useCallback)(()=>{let e=w.current&&T.current!==null?T.current:`#/c`;_v(e,!0),C(dv(e)),w.current=!1,T.current=null},[]),[Le,Re]=(0,v.useState)(()=>_g()),ze=(0,v.useCallback)((e,t)=>{Re(n=>s.status===`ready`?bg(yg(mg(s.meta.extensions),n),e,t):n)},[s]),F=(0,v.useMemo)(()=>s.status===`ready`?yg(mg(s.meta.extensions),Le):[],[s,Le]),Be=(0,v.useMemo)(()=>{if(j!==null)return F.find(e=>e.slug===j.slug&&e.id===j.id)?.refreshMs},[j,F]);(0,v.useCallback)(e=>{_v(`#/c/${e}`),C({kind:`chat`}),Oe(e)},[Oe]),(0,v.useEffect)(()=>{if(s.status!==`ready`||u!==null||S.kind===`ext`||A.rows.length===0)return;let e=A.rows.find(e=>e.root)??A.rows[0];d(t=>t??e?.id??null)},[s.status,A.rows,S.kind]),(0,v.useEffect)(()=>{let e=!1;return t.getMeta().then(t=>{e||(t.schemaVersion===`695e774de770be63a0fb46f72277fe30b6b3644eec04afd58973c0b818db50a0`?c({status:`ready`,meta:t}):c({status:`refused`,message:`schema mismatch: the server speaks schema ${t.schemaVersion} but this webui bundle is pinned to ${Ag}. Rebuild and redeploy the bundle against this server (spec §5).`}))}).catch(t=>{if(e)return;let n=t instanceof Error?t.message:String(t);c({status:`refused`,message:`schema check failed: ${n}. The wire schema is unverifiable, so the webui refuses to render (spec §5).`})}),()=>{e=!0}},[t]),(0,v.useEffect)(()=>{let e=globalThis,t=()=>{y(e=>e+1)};return e.addEventListener?.(`hashchange`,t),()=>e.removeEventListener?.(`hashchange`,t)},[]);let Ve=(0,v.useCallback)(async(e,n)=>{try{await t.patchConversationMeta(e,{name:n}),await A.reload(),k(null)}catch(e){k(`rename failed: ${e instanceof Error?e.message:String(e)}`)}},[t,A.reload]),I=(0,v.useCallback)(async e=>{u!==null&&await Ve(u,e)},[u,Ve]),L=(0,v.useCallback)(async(e,n)=>{try{await t.patchConversationMeta(e,{archived:n}),await A.reload(),k(null)}catch(e){k(`archive failed: ${e instanceof Error?e.message:String(e)}`)}},[t,A.reload]),He=(0,v.useCallback)(e=>{t.fork(e).then(async e=>{await A.reload(),Oe(e.id),k(null)}).catch(e=>k(`fork failed: ${e instanceof Error?e.message:String(e)}`))},[t,A.reload,Oe]),Ue=(0,v.useCallback)(()=>{t.createConversation().then(async e=>{await A.reload(),Oe(e.id),k(null)}).catch(e=>k(`new conversation failed: ${e instanceof Error?e.message:String(e)}`))},[t,A.reload,Oe]),We=(0,v.useCallback)(()=>{u!==null&&t.exportConversation(u).then(e=>{cv(`sigrun-conversation-${u}.jsonl`,e),k(null)}).catch(e=>k(`export failed: ${e instanceof Error?e.message:String(e)}`))},[u,t]),Ge=(0,v.useCallback)(()=>{u!==null&&t.compact(u).then(()=>k(null)).catch(e=>k(`compact failed: ${e instanceof Error?e.message:String(e)}`))},[u,t]),Ke=(0,v.useCallback)(()=>{u!==null&&L(u,!0)},[u,L]);return s.status===`loading`?(0,R.jsx)(`div`,{className:`app-boot`,children:(0,R.jsx)(`p`,{children:`sigrun — checking the wire schema…`})}):s.status===`restarting`?(0,R.jsx)(`div`,{className:`app-boot`,role:`status`,children:(0,R.jsx)(`p`,{children:`sigrun — Restarting…`})}):s.status===`refused`?(0,R.jsxs)(`div`,{className:`app-refused`,role:`alert`,children:[(0,R.jsx)(`h1`,{children:`sigrun — refusing to render`}),(0,R.jsx)(`p`,{children:s.message})]}):(0,R.jsxs)(`div`,{className:`app-root`,children:[(0,R.jsxs)(`div`,{className:`side-drawer`,"data-open":g?``:void 0,children:[(0,R.jsx)(Cg,{meta:s.meta,onOpenSettings:Pe,settingsActive:S.kind===`settings`,onOpenGallery:s.meta.dev?()=>{globalThis.history?.pushState(null,``,`#/blocks`),y(e=>e+1)}:void 0,identity:n,hiddenExtSurfaces:te,onOpenExtView:Me,extViewEntries:F,onMoveExtView:ze,onLogout:r===void 0?void 0:()=>{t.logout().catch(()=>void 0).finally(()=>r())}}),A.error!==null&&(0,R.jsxs)(`p`,{className:`side-error`,role:`alert`,children:[`conversations unavailable: `,A.error]}),(0,R.jsx)(Ig,{rows:A.rows,activeId:u,onSelect:Oe,onNew:Ue,onRename:Ve,onArchive:L,onFork:He,currentUser:n?.user,onShare:O})]}),x===`blocks`?(0,R.jsx)(`main`,{className:`main-column`,children:(0,R.jsx)(qh,{})}):S.kind===`settings`?(0,R.jsx)(`main`,{className:`main-column`,"data-route":`settings`,children:(0,R.jsx)(h_,{client:t,prefsState:o,theme:a,admin:n?.admin,section:S.section,onSection:Fe,onRestart:l,onClose:Ie})}):(0,R.jsxs)(`main`,{className:`main-column`,children:[(0,R.jsx)(dg,{title:lv(A.rows,u),timeline:m,onTimeline:()=>h(e=>(sv(!e),!e)),panel:f,onPanel:ke,onRename:I,onExport:We,onCompact:Ge,onArchive:Ke,drawerOpen:g,onToggleDrawer:()=>_(e=>!e)}),oe!==null&&(0,R.jsx)(`p`,{className:`shell-error`,role:`alert`,children:oe}),(0,R.jsxs)(`div`,{className:`main-body`,children:[j!==null&&ye!==void 0?(0,R.jsx)($h,{slug:j.slug,id:j.id,hub:E,transport:ye,onNavigate:e=>{let t=e.target;if(e.params!==void 0){let t={kind:`ext`,slug:j.slug,id:j.id,params:e.params};_v(pv(t)),C(t);return}if(typeof t==`object`&&t){if(`conversation`in t&&typeof t.conversation==`number`){_v(`#/c`),C({kind:`chat`}),Oe(t.conversation);return}if(`job`in t){_v(`#/c`),C({kind:`chat`}),p(`jobs`),iv(`jobs`);return}if(`settings`in t){let e=t.settings;Ne(typeof e==`string`&&e!==``?e:void 0);return}if(`view`in t&&t.view!==null&&typeof t.view==`object`){let e=t.view,n={kind:`ext`,slug:e.extension,id:e.id,params:e.params??{}};_v(pv(n)),C(n)}}},...Be===void 0?{}:{refreshMs:Be}},`${j.slug}/${j.id}/${A.streamId??`pre-hello`}`):(0,R.jsxs)(`div`,{className:`chat-column`,children:[(0,R.jsx)(uv,{activeId:u,view:fe,status:pe,error:me,showThinking:o.prefs.showThinking,timeline:m,client:t,onNavigate:Oe,parent:we,onScrollRoot:ce,dockPadding:le,attachChatTransport:ee}),(0,R.jsx)(`div`,{className:`chat-fade`,"aria-hidden":`true`}),(0,R.jsx)(`footer`,{className:`composer-slot`,ref:de,children:(0,R.jsx)(Pm,{client:t,conversationId:u,view:fe,onNavigate:Oe,onOpenSettings:Pe,enterToSend:o.prefs.enterToSend,readOnly:A.rows.find(e=>e.id===u)?.access===`read`})})]}),(0,R.jsx)(wg,{mode:f,extPanels:hg(s.meta.extensions),activeExtPanel:ne,onOpenExtPanel:(e,t)=>{re(`${e}/${t}`)},...be!==null&&Ce!==void 0?{extContent:(0,R.jsx)(rg,{slug:be.slug,id:be.id,transport:Ce,...P===void 0?{}:{refreshMs:P}},ne)}:{},outline:(0,R.jsx)(kg,{scrollRoot:se,turns:Ee}),workspace:(0,R.jsx)($_,{client:t,conversationId:u,onClose:Ae}),jobs:(0,R.jsx)(Eg,{client:t,onNavigate:Oe,refreshToken:ge})})]})]}),g&&(0,R.jsx)(`div`,{className:`drawer-backdrop`,onClick:()=>_(!1),"aria-hidden":`true`}),f!==null&&(0,R.jsx)(`div`,{className:`panel-backdrop`,onClick:Ae,"aria-hidden":`true`}),ie!==null&&(()=>{let e=A.rows.find(e=>e.id===ie);return e===void 0?null:(0,R.jsx)(`div`,{className:`share-overlay`,onClick:e=>{e.target===e.currentTarget&&O(null)},children:(0,R.jsx)(Gg,{client:t,conversation:e,onClose:()=>O(null),onSaved:()=>{A.reload()}})})})()]})}function yv(e={}){let[t,n]=(0,v.useState)(0);return(0,R.jsx)(vv,{...e,onRestarting:()=>n(e=>e+1)},t)}var bv={invalid_state:`That sign-in link was already used or came from another browser. Start again.`,login_expired:`This sign-in took too long or sigrun restarted. Start again.`,not_allowed:`Your account isn't allowed to use this sigrun.`,isolation_required:`This sigrun can't add another user yet. Ask the admin.`,auth_required:`This sigrun can't add another user yet. Ask the admin.`,account_link_conflict:`That account is already linked to another sigrun user.`,provider_error:`The sign-in provider returned an error. Try again.`,proxy_identity_required:`This sigrun signs people in through its sign-in proxy. Open it through the proxy.`};function xv(e){return bv[e]??`Sign-in failed. Try again.`}function Sv(e){let{client:t,message:n,onSuccess:r}=e,[i,a]=(0,v.useState)(``),[o,s]=(0,v.useState)(()=>{let e=globalThis.location?.search??``,t=new URLSearchParams(e).get(`error`);return t===null?null:xv(t)}),[c,l]=(0,v.useState)(!1),[u,d]=(0,v.useState)([]);(0,v.useEffect)(()=>{let e=!1;return t.providers().then(t=>{e||d(t.providers)}).catch(()=>{}),()=>{e=!0}},[t]),(0,v.useEffect)(()=>{let e=globalThis.location?.search??``;if(new URLSearchParams(e).get(`error`)===null)return;let t=globalThis.history,n=globalThis.location?.pathname??`/login`;t?.replaceState(null,``,n)},[]);async function f(){if(i.trim()===``){s(`paste your API token`);return}l(!0),s(null);try{await t.login(i.trim()),r()}catch(e){s(Ug(e))}finally{l(!1)}}return(0,R.jsxs)(`div`,{className:`auth-card`,children:[(0,R.jsx)(`h1`,{children:`Sign in to sigrun`}),n!==void 0&&(0,R.jsx)(`p`,{className:`auth-message`,children:n}),u.length>0&&(0,R.jsx)(`div`,{className:`auth-providers`,children:u.map(e=>(0,R.jsx)(`a`,{className:`auth-provider`,href:`/v1/auth/login/${encodeURIComponent(e.provider)}?return=%2F`,children:e.label},e.provider))}),(0,R.jsxs)(`label`,{className:`auth-field`,children:[`API token`,(0,R.jsx)(`input`,{"data-auth-field":`token`,type:`password`,autoComplete:`current-password`,value:i,onChange:e=>a(e.target.value),onKeyDown:e=>{e.key===`Enter`&&(e.preventDefault(),f())}})]}),(0,R.jsx)(`button`,{type:`button`,className:`auth-submit`,disabled:c,onClick:()=>void f(),children:c?`Signing in…`:`Sign in`}),o!==null&&(0,R.jsx)(`p`,{className:`auth-error`,role:`alert`,children:o})]})}function Cv(e){return!e.startsWith(`/`)||e.startsWith(`//`)||e.includes(`\\`)||/^[A-Za-z][A-Za-z0-9+.-]*:/.test(e)?`/`:e}function wv(e){let{client:t,flowKey:n,reason:r,navigate:i}=e,[a,o]=(0,v.useState)(``),[s,c]=(0,v.useState)(!1),[l,u]=(0,v.useState)(null);async function d(){if(a.trim()===``){u(`Enter your code.`);return}c(!0),u(null);try{let e=await t.submitLoginCode(n,a.trim());i(Cv(e.returnTo))}catch(e){e instanceof b&&e.error===`invalid_code`?u(`That code didn't work. Check it and try again.`):e instanceof b&&e.error===`login_expired`?u(`This sign-in took too long or sigrun restarted. Start again.`):e instanceof b&&e.error===`not_allowed`?u(`Your account isn't allowed to use this sigrun.`):e instanceof b&&(e.error===`isolation_required`||e.error===`auth_required`)?u(`This sigrun can't add another user yet. Ask the admin.`):u(`Sign-in failed. Try again.`)}finally{c(!1)}}return(0,R.jsxs)(`div`,{className:`auth-card`,children:[(0,R.jsx)(`h1`,{children:`Finish signing in`}),(0,R.jsx)(`p`,{className:`auth-message`,children:r===`setup`?`Enter the setup code to claim this sigrun.`:`Enter your invite code to finish signing in.`}),(0,R.jsxs)(`label`,{className:`auth-field`,children:[r===`setup`?`Setup code`:`Invite code`,(0,R.jsx)(`input`,{"data-auth-field":`login-code`,type:`text`,autoComplete:`one-time-code`,value:a,onChange:e=>o(e.target.value),onKeyDown:e=>{e.key===`Enter`&&(e.preventDefault(),d())}})]}),(0,R.jsx)(`button`,{type:`button`,className:`auth-submit`,disabled:s,onClick:()=>void d(),children:s?`Signing in…`:`Continue`}),l!==null&&(0,R.jsx)(`p`,{className:`auth-error`,role:`alert`,children:l})]})}function Tv(e){let{cause:t,context:n}=e,r=e.reload??(()=>location.reload());return(0,R.jsx)(`div`,{className:`auth-screen`,"data-auth-screen":`proxy-unidentified`,children:(0,R.jsxs)(`div`,{className:`auth-card`,children:[(0,R.jsx)(`h1`,{children:`Sign-in proxy required`}),n===`session_ended`&&(0,R.jsx)(`p`,{className:`auth-message`,children:`Your session ended.`}),t===`unidentified`?(0,R.jsxs)(R.Fragment,{children:[(0,R.jsx)(`p`,{className:`auth-message`,children:`This sigrun runs behind a sign-in proxy, but the proxy's identity didn't reach sigrun.`}),(0,R.jsx)(`p`,{children:`The proxy's address may be missing from trustedProxies, or the proxy may not be forwarding the identity header. The operator can see the reason in the server log.`})]}):t===`invalid_username`?(0,R.jsx)(`p`,{className:`auth-message`,children:`The proxy supplied an invalid username: the proxy's username has no usable characters.`}):(0,R.jsx)(`p`,{className:`auth-message`,children:`Your account doesn't exist and auto-provisioning is off. Ask the admin to create your account.`}),(0,R.jsx)(`button`,{type:`button`,className:`auth-submit`,onClick:r,children:`Reload`})]})})}function Ev(e){return e.includes(`proxy`)&&!e.includes(`token`)}var Dv=C();function Ov(e,t){return new Proxy(e,{get(e,n){let r=e[n];return typeof r==`function`?(...n)=>Promise.resolve().then(()=>r.apply(e,n)).catch(e=>{throw e instanceof b&&e.status===401&&t(),e}):r}})}function kv(e={}){let[t,n]=(0,v.useState)({status:`probing`}),[r,i]=(0,v.useState)(0),a=(0,v.useCallback)(()=>{n(e=>e.status===`ready`?Ev(e.methods)?{status:`proxy-unidentified`,cause:`unidentified`,context:`session_ended`}:{status:`login`,methods:e.methods,message:`Your session ended. Sign in again.`}:e)},[]),o=(0,v.useMemo)(()=>Ov(e.client??Dv,a),[e.client,a]);if((0,v.useEffect)(()=>{let e=!1;return(async()=>{let t=await o.getOnboarding().catch(t=>{e||n({status:`failed`,message:t instanceof Error?t.message:String(t)})});if(!(t===void 0||e)){if(t.state===`unclaimed`){n({status:`onboarding`,state:t});return}try{let r=await o.whoami();if(e)return;n({status:`ready`,methods:t.methods,identity:r})}catch(r){if(e)return;if(Ev(t.methods)&&r instanceof b&&r.status===401){n({status:`proxy-unidentified`,cause:`unidentified`,context:`boot`});return}if(Ev(t.methods)&&r instanceof b&&r.status===403&&(r.error===`invalid_username`||r.error===`user_not_provisioned`)){n({status:`proxy-unidentified`,cause:r.error===`invalid_username`?`invalid_username`:`not_provisioned`,context:`boot`});return}if(r instanceof b&&r.status===401){n({status:`login`,methods:t.methods});return}n({status:`failed`,message:r instanceof Error?r.message:String(r)})}}})(),()=>{e=!0}},[o,r]),t.status===`probing`)return(0,R.jsx)(`div`,{className:`app-boot`,"data-auth-screen":`probing`,children:(0,R.jsx)(`p`,{children:`sigrun — signing in…`})});if(t.status===`failed`)return(0,R.jsxs)(`div`,{className:`app-refused`,role:`alert`,"data-auth-screen":`failed`,children:[(0,R.jsx)(`h1`,{children:`sigrun — auth check failed`}),(0,R.jsx)(`p`,{children:t.message}),(0,R.jsx)(`button`,{type:`button`,onClick:()=>i(e=>e+1),children:`Retry`})]});let s=globalThis.location;if(s?.pathname===`/login/code`){let e=new URLSearchParams(s.search??``),t=e.get(`key`);if(t!==null)return(0,R.jsx)(`div`,{className:`auth-screen`,"data-auth-screen":`login-code`,children:(0,R.jsx)(wv,{client:o,flowKey:t,reason:e.get(`reason`)??`invite`,navigate:e=>{s.href!==void 0&&(s.href=e)}})})}return t.status===`onboarding`?Ev(t.state.methods)&&t.state.codeRequired&&t.state.proxyIdentity===void 0?(0,R.jsx)(Tv,{cause:`unidentified`,context:`onboarding`}):(0,R.jsx)(`div`,{className:`auth-screen`,"data-auth-screen":`onboarding`,children:(0,R.jsx)(Hg,{client:o,state:t.state,onClaimed:()=>i(e=>e+1)})}):t.status===`proxy-unidentified`?(0,R.jsx)(Tv,{cause:t.cause,context:t.context}):t.status===`login`?(0,R.jsx)(`div`,{className:`auth-screen`,"data-auth-screen":`login`,children:(0,R.jsx)(Sv,{client:o,message:t.message,onSuccess:()=>i(e=>e+1)})}):(0,R.jsx)(yv,{client:o,createEventSource:e.createEventSource,identity:t.identity,onLogout:()=>n({status:`login`,methods:t.methods,message:`Signed out.`})})}var Av=document.getElementById(`root`);if(Av===null)throw Error(`sigrun webui: #root mount point missing from index.html`);(0,y.createRoot)(Av).render((0,R.jsx)(v.StrictMode,{children:(0,R.jsx)(kv,{})}));
55
+ `)}function yh(e){return ke(e)?.typed??vh(e)}function bh(e){let[t,n]=(0,v.useState)(!1),{expanded:r,fullText:i}=e;return(0,R.jsxs)(`div`,{className:`entry-expanded`,children:[(0,R.jsxs)(`button`,{type:`button`,className:`entry-expanded-chip`,"aria-expanded":t,title:t?`Hide the expanded text`:`Show the expanded text`,onClick:()=>n(!t),children:[`expanded from /`,r.command??`…`]}),t&&(0,R.jsx)(`div`,{className:`entry-expanded-text`,children:(0,R.jsx)(md,{source:i,variant:`bubble`})})]})}function xh(e){let{entry:t}=e,n=ke(t),r=gh(t),i=r===void 0?void 0:(e.entries??[]).find(e=>e.kind===`sigrun.blocks`&&String(e.id)===r.entryId),a=i===void 0?void 0:_h(i.data);return(0,R.jsxs)(`div`,{className:`turn turn-user`,"data-turn-kind":`user`,"data-entry-id":t.id,children:[(0,R.jsxs)(`div`,{className:`entry-user`,children:[n===void 0?(t.model??[]).map((e,t)=>(0,R.jsxs)(`div`,{className:`entry-user-message`,children:[(0,R.jsx)(md,{source:Fm(e),variant:`bubble`}),Lm(e).map((e,t)=>(0,R.jsxs)(`span`,{className:`entry-attachment`,children:[`[`,e.type,`: `,e.path??`?`,`]`]},t))]},t)):(0,R.jsxs)(`div`,{className:`entry-user-message`,children:[(0,R.jsx)(md,{source:n.typed,variant:`bubble`}),(t.model??[]).flatMap(e=>Lm(e).map((e,t)=>(0,R.jsxs)(`span`,{className:`entry-attachment`,children:[`[`,e.type,`: `,e.path??`?`,`]`]},t)))]}),n!==void 0&&(0,R.jsx)(bh,{expanded:n,fullText:vh(t)}),r!==void 0&&(0,R.jsxs)(`span`,{className:`entry-answer-chip`,"data-answer-entry":r.entryId,children:[`from `,a??`entry ${r.entryId}`]})]}),(0,R.jsx)(rd,{kind:`user`,text:yh(t),onFork:e.onFork,onEdit:e.onEdit})]})}function Sh(e){return e.docs[`pi.live`]}function Ch(e){return Sh(e)?.tools??[]}function wh(e){let t=Sh(e)?.generation?.message;if(typeof t==`object`&&t)return t}function Th(e){return Sh(e)?.compactions?.length??0}function Eh(e){let t=Sh(e)?.compactionFailure;if(typeof t!=`object`||!t)return;let n=t.error;return typeof n==`string`&&n!==``?n:void 0}function Dh(e){return e}function Oh(e){return Ch(Dh(e))}function kh(e){return wh(Dh(e))}function Ah(e){return Th(Dh(e))}function jh(e){return Eh(Dh(e))}var Mh=-1;function Nh(e){let t=e.content;return typeof t==`string`?[]:t.filter(e=>e.type===`toolCall`).map(e=>{let t=e;return{callId:t.id??``,name:t.name??``,preview:Pe(t.name??``,t.arguments),isError:!1}})}function Ph(e,t){return{entries:[{id:Mh,conversationId:e,kind:`pi.assistant`,model:[t]}],thinking:Im(t),tools:Nh(t),text:Fm(t),lastEntryId:Mh,timeline:Fh(t)}}function Fh(e){let t=[];for(let n of Im(e))t.push({kind:`thinking`,text:n});for(let n of Nh(e))t.push({kind:`tool`,tool:n});let n=Fm(e);return n!==``&&t.push({kind:`text`,text:n}),t}function Ih(e){let{view:t,showThinking:n,timeline:r,parent:i,onNavigate:a,client:o}=e,s=t.conversation.id,c=Oh(t),l=kh(t),u=je(t.entries),d=u[u.length-1],f=l!==void 0&&d!==void 0&&d.kind===`assistant`;if(f&&d!==void 0&&d.kind===`assistant`){let e=Fm(l),t=Nh(l).filter(e=>!d.tools.some(t=>t.callId===e.callId));u[u.length-1]={...d,text:d.text===``?e:`${d.text}\n\n${e}`,thinking:[...d.thinking,...Im(l)],tools:[...d.tools,...t],timeline:[...d.timeline,...Im(l).map(e=>({kind:`thinking`,text:e})),...t.map(e=>({kind:`tool`,tool:e})),...e===``?[]:[{kind:`text`,text:e}]]}}let p=e=>()=>{o.fork(s,e).then(e=>a(e.id)).catch(e=>console.error(`fork from conversation ${s} failed:`,e))};return(0,R.jsxs)(`div`,{className:`turn-list`,children:[i!==void 0&&(0,R.jsxs)(`button`,{type:`button`,className:`turn-lineage`,onClick:()=>a(i.id),children:[`Forked from `,i.name]}),u.map((e,i)=>e.kind===`user`?(0,R.jsx)(Lh,{entry:e.entry,entries:t.entries,view:t,client:o,conversationId:s,onNavigate:a,forkFrom:p},e.entry.id):e.kind===`assistant`?(0,R.jsx)(fh,{conversationId:s,turn:e,slots:c,showThinking:n,client:o,onNavigate:a,live:f&&i===u.length-1,timeline:r},e.lastEntryId):(0,R.jsx)(Rh,{entry:e.entry},e.entry.id)),l!==void 0&&!f&&(0,R.jsx)(fh,{conversationId:s,turn:Ph(s,l),slots:c,showThinking:n,client:o,onNavigate:a,live:!0},Mh)]})}function Lh(e){let{entry:t,entries:n,view:r,client:i,conversationId:a,onNavigate:o,forkFrom:s}=e;return(0,R.jsx)(xh,{entry:t,entries:n,onFork:s(t.id),onEdit:()=>{let e=r.entries[r.entries.findIndex(e=>e.id===t.id)-1];(e===void 0?i.createConversation():i.fork(a,e.id)).then(async e=>{await i.patchConversationMeta(e.id,{draft:{text:yh(t)}}),o(e.id)}).catch(e=>console.error(`edit-in-new-conversation failed:`,e))}})}function Rh(e){let{entry:t}=e,n=t.kind===`pi.compaction`?`compaction`:t.kind===`pi.system`?`system`:`other`;return(0,R.jsx)(`div`,{className:`turn turn-other`,"data-turn-kind":n,children:t.kind===`pi.compaction`?(0,R.jsx)(mh,{entry:t}):t.kind===`pi.system`?(0,R.jsx)(hh,{entry:t}):(0,R.jsxs)(`div`,{className:`entry entry-unknown`,children:[`unsupported entry kind: `,t.kind,` —`,` `,(t.model??[]).map(e=>Fm(e)).filter(e=>e!==``).join(` `)]})})}function zh(e){let t=ah(e.transport),n=navigator.language,r=(0,v.useMemo)(()=>({dispatch:t.dispatch,access:t.access,rev:t.rev,viewState:typeof t.view.view==`object`&&t.view.view!==null&&!Array.isArray(t.view.view)?t.view.view:{},setView:t.setView,serverErrors:t.serverErrors}),[t.dispatch,t.access,t.rev,t.view,t.setView,t.serverErrors]);return t.status===`loading`?(0,R.jsx)(`div`,{className:`blk-surface`,"data-surface":`loading`,children:(0,R.jsx)(`p`,{children:`loading…`})}):t.status===`notFound`?(0,R.jsx)(`div`,{className:`blk-surface`,"data-surface":`not-found`,children:(0,R.jsx)(`p`,{children:`surface not found`})}):t.status===`error`?(0,R.jsxs)(`div`,{className:`blk-surface`,"data-surface":`error`,role:`alert`,children:[(0,R.jsx)(`p`,{children:`something went wrong`}),(0,R.jsx)(`button`,{type:`button`,"data-surface-retry":``,onClick:()=>t.retry(),children:`Retry`})]}):(0,R.jsx)(`div`,{className:`blk-surface`,"data-surface":`ready`,children:(0,R.jsx)(Re.Provider,{value:{data:t.view,locale:n},children:(0,R.jsxs)(ze.Provider,{value:r,children:[(0,R.jsx)(Ye,{children:t.tree!==void 0&&(0,R.jsx)(Vp,{block:t.tree.root})}),t.toasts.map((e,t)=>(0,R.jsx)(`p`,{className:`blk-surface-toast`,role:`status`,children:e},t))]})})})}var Bh=Object.assign({"../../../test/fixtures/blocks/ambient-footer.json":{v:1,root:{type:`columns`,id:`ambient-footer`,children:[{block:{type:`markdown`,text:`left`}},{block:{type:`stat`,label:`Queue`,value:3}},{block:{type:`markdown`,text:`right`}}]}},"../../../test/fixtures/blocks/ambient-panel.json":{v:1,root:{type:`stack`,id:`ambient-panel`,children:[{type:`collection`,id:`checks`,items:[{id:`c1`,name:`lint`,state:`passed`,busy:!1,tone:`good`},{id:`c2`,name:`tests`,state:`running`,busy:!0,tone:`neutral`}],display:`list`,item:{title:{$:`./name`},status:{label:{$:`./state`},spinner:{$:`./busy`}},tone:{$:`./tone`}}},{type:`log`,lines:[{at:1,level:`info`,text:`3 checks running`},{at:2,level:`error`,text:`rollback failed`}]},{type:`meter`,value:62,format:`percent`},{type:`details`,value:{ok:!0}}]}},"../../../test/fixtures/blocks/ambient-status.json":{v:1,root:{type:`markdown`,id:`ambient-status`,text:`glm-5.3-flash · main* · $0.0421`}},"../../../test/fixtures/blocks/callout.json":{v:1,root:{type:`callout`,id:`callout`,tone:`warn`,title:`Degraded`,body:`acme upstream is slow`,actions:[{id:`open`,label:`Open console`,icon:`external`,action:{type:`open`,url:`https://example.invalid/console`}},{id:`copy`,label:`Copy id`,action:{type:`copy`,text:`acme-42`}}]}},"../../../test/fixtures/blocks/chart.json":{v:1,root:{type:`chart`,id:`chart`,title:`Throughput`,x:{kind:`time`,format:`time`},y:{unit:`req/s`,min:0},series:[{name:`acme`,kind:`area`,data:{$:`/series/acme`}},{name:`Baseline`,kind:`line`,data:[[0,10],[60,12],[120,11]]}],stacked:!1,thresholds:[{at:20,tone:`warn`,label:`SLO`}]}},"../../../test/fixtures/blocks/chat-message.json":{v:1,root:{type:`stack`,id:`chat-message`,children:[{type:`markdown`,text:`acme ranking draft`},{type:`collection`,id:`rank`,items:{$:`/songs`},display:`list`,numbered:!0,reorder:{within:!0},onMove:`reorderSong`,item:{title:{$:`./title`},meta:[{person:{user:`user:example`,name:`Example`}}]}},{type:`form`,id:`use`,bind:`/reply`,mode:`submit`,onSubmit:`useOrder`,submitLabel:`Use this order`,turn:!0,children:[{type:`toggle`,name:`confirm`,label:`Confirm`}]}]}},"../../../test/fixtures/blocks/collection-calendar.json":{v:1,root:{type:`collection`,id:`collection-calendar`,items:{$:`/events`},display:`calendar`,time:{start:`startsAt`,end:`endsAt`,allDay:`allDay`,range:`month`,onResize:`resizeEvent`,onCreate:`createEvent`},item:{title:{$:`./title`}}}},"../../../test/fixtures/blocks/collection-grid.json":{v:1,root:{type:`collection`,id:`collection-grid`,items:{$:`/shots`},display:`grid`,overflow:`wrap`,item:{title:{$:`./title`},image:{$:`./image`}}}},"../../../test/fixtures/blocks/collection-lanes.json":{v:1,root:{type:`collection`,id:`collection-lanes`,items:{$:`/cards`},display:`lanes`,groupBy:`state`,groups:[{id:`todo`,title:`To do`,tone:`neutral`},{id:`doing`,title:`Doing`,tone:`info`,collapsed:!1}],reorder:{within:!0,across:!0},onMove:`moveCard`,onActivate:{type:`navigate`,params:{id:`acme`}},item:{title:{$:`./title`},tone:{$:`./tone`}}}},"../../../test/fixtures/blocks/collection-list.json":{v:1,root:{type:`collection`,id:`collection-list`,items:{$:`/cards`},display:`list`,numbered:!0,checkable:`done`,onCheck:`toggleDone`,children:`subtasks`,item:{eyebrow:{$:`./eyebrow`},title:{$:`./title`},subtitle:{$:`./subtitle`},body:{$:`./body`},icon:`file`,badges:[{text:{$:`./badge`},tone:`info`}],meta:[{icon:`clock`,text:{$:`./when`}},{person:{user:{$:`./user`},name:{$:`./userName`}}},{time:{$:`./at`},format:`datetime`}],metrics:[{label:`Score`,value:{$:`./score`},format:`number`}],tone:`accent`,status:{label:{$:`./state`},tone:`good`,spinner:{$:`./busy`}},quiet:{$:`./quiet`},deps:{$:`./deps`}}}},"../../../test/fixtures/blocks/collection-literal.json":{v:1,root:{type:`collection`,id:`collection-literal`,items:[{id:`row-1`,title:`acme provision`,state:`todo`,quiet:!1},{id:`row-2`,title:`acme build`,state:`doing`,quiet:!0}],display:`list`,item:{title:{$:`./title`},status:{label:{$:`./state`}},quiet:{$:`./quiet`}}}},"../../../test/fixtures/blocks/collection-table.json":{v:1,root:{type:`collection`,id:`collection-table`,items:{$:`/rows`},display:`table`,select:`multi`,sort:{field:`name`,dir:`asc`},bulkActions:[{id:`set-state`,label:`Set state`,icon:`edit`,onSubmit:`setState`,form:{v:1,root:{type:`form`,id:`set-state-form`,bind:`/bulk`,mode:`submit`,onSubmit:`setState`,children:[{type:`text`,name:`state`,label:`State`}]}}}],columns:[{field:`name`,label:`Name`,sortable:!0,priority:`high`},{field:`load`,label:`Load`,format:`percent`,cell:`meter`,priority:`low`},{field:`state`,label:`State`,cell:`badge`,width:`s`}],item:{title:{$:`./name`}}}},"../../../test/fixtures/blocks/columns.json":{v:1,root:{type:`columns`,id:`columns`,children:[{weight:2,minWidth:`m`,block:{type:`markdown`,text:`left`}},{weight:1,block:{type:`stat`,label:`Load`,value:.42,format:`percent`,size:`m`,icon:`clock`}}]}},"../../../test/fixtures/blocks/details.json":{v:1,root:{type:`details`,id:`details`,value:{host:`acme.example`,tags:[`a`,`b`],nested:{ok:!0}}}},"../../../test/fixtures/blocks/diff.json":{v:1,root:{type:`diff`,id:`diff`,before:`const a = 1;`,after:`const a = 2;`,path:`src/acme.ts`,lang:`ts`}},"../../../test/fixtures/blocks/field-choice.json":{v:1,root:{type:`form`,id:`form-choice`,bind:`/values`,mode:`submit`,children:[{type:`choice`,name:`pick`,label:`Pick`,multi:!0,options:[{id:`a`,label:`A`,description:`first`},{id:`b`,label:`B`,tone:`good`}]}]}},"../../../test/fixtures/blocks/field-date.json":{v:1,root:{type:`form`,id:`form-date`,bind:`/values`,mode:`submit`,children:[{type:`date`,name:`on`,label:`On`}]}},"../../../test/fixtures/blocks/field-daterange.json":{v:1,root:{type:`form`,id:`form-daterange`,bind:`/values`,mode:`submit`,children:[{type:`daterange`,name:`range`,label:`Range`,presets:[{id:`today`,label:`Today`,duration:`P1D`}]}]}},"../../../test/fixtures/blocks/field-datetime.json":{v:1,root:{type:`form`,id:`form-datetime`,bind:`/values`,mode:`submit`,children:[{type:`datetime`,name:`at`,label:`At`}]}},"../../../test/fixtures/blocks/field-file.json":{v:1,root:{type:`form`,id:`form-file`,bind:`/values`,mode:`submit`,children:[{type:`file`,name:`logo`,label:`Logo`,accept:`image/png`,multi:!0,onUpload:`uploadLogo`}]}},"../../../test/fixtures/blocks/field-list.json":{v:1,root:{type:`form`,id:`form-list`,bind:`/values`,mode:`submit`,children:[{type:`list`,name:`members`,label:`Members`,item:{type:`text`,name:`name`,label:`Name`},reorder:!0}]}},"../../../test/fixtures/blocks/field-longtext.json":{v:1,root:{type:`form`,id:`form-longtext`,bind:`/values`,mode:`submit`,children:[{type:`longtext`,name:`notes`,label:`Notes`,syntax:`markdown`,lang:`md`,rows:8,maxLength:4e3}]}},"../../../test/fixtures/blocks/field-number.json":{v:1,root:{type:`form`,id:`form-number`,bind:`/values`,mode:`submit`,children:[{type:`number`,name:`port`,label:`Port`,min:1,max:65535,step:1,format:`number`}]}},"../../../test/fixtures/blocks/field-secret.json":{v:1,root:{type:`form`,id:`form-secret`,bind:`/values`,mode:`submit`,children:[{type:`secret`,name:`apiKey`,label:`API key`}]}},"../../../test/fixtures/blocks/field-text.json":{v:1,root:{type:`form`,id:`form-text`,bind:`/values`,mode:`submit`,children:[{type:`text`,name:`name`,label:`Name`,kind:`email`,suggest:{$:`/suggestions`},required:!0,minLength:2,placeholder:`acme@example.invalid`}]}},"../../../test/fixtures/blocks/field-toggle.json":{v:1,root:{type:`form`,id:`form-toggle`,bind:`/values`,mode:`live`,children:[{type:`toggle`,name:`dark`,label:`Dark mode`,disabled:!1}]}},"../../../test/fixtures/blocks/fields.json":{v:1,root:{type:`fields`,id:`fields`,rows:[{label:`Host`,value:`acme.example`},{label:`Errors`,value:2,tone:`bad`,icon:`error`}]}},"../../../test/fixtures/blocks/form-chat.json":{v:1,root:{type:`form`,id:`form-chat`,bind:`/reply`,mode:`submit`,onSubmit:`sendReply`,submitLabel:`Send`,turn:!0,children:[{type:`choice`,name:`answer`,label:`Answer`,options:[{id:`yes`,label:`Yes`,preview:`proceed with the acme plan`},{id:`no`,label:`No`,tone:`bad`}]},{type:`longtext`,name:`reason`,label:`Reason`,syntax:`plain`}]}},"../../../test/fixtures/blocks/form-inline.json":{v:1,root:{type:`form`,id:`form-inline`,bind:`/view/quick`,mode:`inline`,onSubmit:`addQuick`,submitLabel:`Add`,children:[{type:`text`,name:`title`,label:`Title`,placeholder:`new item`,kind:`search`}]}},"../../../test/fixtures/blocks/form-interaction.json":{v:1,root:{type:`form`,id:`form-interaction`,bind:`/values`,mode:`submit`,onSubmit:`answer`,submitLabel:`Answer`,children:[{type:`section`,title:`Approve`,children:[{type:`choice`,name:`verdict`,label:`Verdict`,options:[{id:`allow`,label:`Allow`,tone:`good`,recommended:!0,preview:`run it`},{id:`deny`,label:`Deny`,tone:`bad`}]}]},{type:`longtext`,name:`reason`,label:`Reason`,required:!0},{type:`secret`,name:`token`,label:`Token`,help:`optional`}]}},"../../../test/fixtures/blocks/form-settings.json":{v:1,root:{type:`form`,id:`form-settings`,bind:`/settings`,mode:`submit`,onSubmit:`saveSettings`,children:[{type:`text`,name:`host`,label:`Host`,apply:`live`},{type:`choice`,name:`plan`,label:`Plan`,options:[{id:`basic`,label:`Basic`},{id:`pro`,label:`Pro`,recommended:!0}]},{type:`toggle`,name:`verbose`,label:`Verbose`,apply:`restart`},{type:`date`,name:`since`,label:`Since`},{type:`datetime`,name:`at`,label:`At`,min:0},{type:`daterange`,name:`window`,label:`Window`,presets:[{id:`7d`,label:`Last 7 days`,duration:`P7D`}]},{type:`list`,name:`hosts`,label:`Hosts`,reorder:!0,min:1,max:10,item:{type:`text`,name:`host`,label:`Host`,pattern:`^[a-z].*$`}}]}},"../../../test/fixtures/blocks/form-upload.json":{v:1,root:{type:`form`,id:`form-upload`,bind:`/upload`,mode:`submit`,onSubmit:`saveUpload`,children:[{type:`file`,name:`avatar`,label:`Avatar`,accept:`image/*`,maxBytes:1048576,onUpload:`uploadAvatar`}]}},"../../../test/fixtures/blocks/form-view.json":{v:1,root:{type:`form`,id:`form-view`,bind:`/view/filter`,mode:`live`,children:[{type:`choice`,name:`state`,label:`State`,multi:!1,allowOther:{label:`Other`},options:[{id:`all`,label:`All`,description:`every item`,recommended:!0},{id:`open`,label:`Open`,tone:`info`}]}]}},"../../../test/fixtures/blocks/form.json":{v:1,root:{type:`form`,id:`form`,bind:`/form`,mode:`submit`,onSubmit:`saveForm`,submitLabel:`Save`,children:[{type:`section`,title:`Basics`,children:[{type:`text`,name:`title`,label:`Title`,required:!0,maxLength:80}]},{type:`longtext`,name:`notes`,label:`Notes`,syntax:`markdown`,rows:4,help:`markdown ok`},{type:`number`,name:`retries`,label:`Retries`,min:0,max:5,step:1},{type:`toggle`,name:`enabled`,label:`Enabled`,help:`run the acme loop`}]}},"../../../test/fixtures/blocks/grid.json":{v:1,root:{type:`grid`,id:`grid`,minItemWidth:`m`,children:[{span:2,block:{type:`stat`,label:`Wide`,value:12,sparkline:[1,2,3]}},{block:{type:`stat`,label:`Narrow`,value:3}},{span:`full`,block:{type:`markdown`,text:`full row`}}]}},"../../../test/fixtures/blocks/image.json":{v:1,root:{type:`image`,id:`image`,src:`asset:acme/diagram.png`,alt:`acme cluster diagram`}},"../../../test/fixtures/blocks/interaction-form.json":{v:1,root:{type:`form`,id:`interaction-body`,bind:`/values`,mode:`submit`,onSubmit:`answer`,submitLabel:`Answer`,children:[{type:`section`,title:`Proceed?`,children:[{type:`choice`,name:`proceed`,label:`Proceed`,options:[{id:`yes`,label:`Yes`,tone:`good`,preview:`deploy to acme`},{id:`no`,label:`No`,tone:`bad`}]}]},{type:`text`,name:`note`,label:`Note`}]}},"../../../test/fixtures/blocks/log-literal.json":{v:1,root:{type:`log`,id:`log-literal`,lines:[{at:1,level:`info`,text:`deploy started`},{at:2,level:`warn`,text:`cache cold`},{at:3,level:`error`,text:`rollback failed`}],follow:!0,wrap:!1,tones:{error:`bad`,warn:`warn`,info:`neutral`}}},"../../../test/fixtures/blocks/log.json":{v:1,root:{type:`log`,id:`log`,lines:{$:`/lines`},follow:!0,wrap:!1,tones:{error:`bad`,warn:`warn`,info:`neutral`}}},"../../../test/fixtures/blocks/markdown.json":{v:1,root:{type:`markdown`,id:`markdown`,text:`acme **status** at [example.invalid](https://example.invalid/x)`}},"../../../test/fixtures/blocks/meter-literal.json":{v:1,root:{type:`meter`,id:`meter-literal`,value:.62,min:0,max:1,label:`Disk`,format:`percent`,thresholds:[{at:.8,tone:`warn`},{at:.95,tone:`bad`}]}},"../../../test/fixtures/blocks/meter.json":{v:1,root:{type:`meter`,id:`meter`,value:{$:`/disk`},min:0,max:1,label:`Disk`,format:`percent`,thresholds:[{at:.8,tone:`warn`},{at:.95,tone:`bad`}]}},"../../../test/fixtures/blocks/page-sidebar.json":{v:1,root:{type:`page`,id:`page`,title:{$:`/title`},subtitle:`with a sidebar`,sidebar:[{type:`tree`,nodes:{$:`/nav`}}],main:[{type:`markdown`,text:`board body`}]}},"../../../test/fixtures/blocks/page.json":{v:1,root:{type:`page`,title:`Jobs`,subtitle:`acme queue`,actions:[{id:`refresh`,label:`Refresh`,icon:`refresh`,action:{type:`edit`,name:`refresh`}}],main:[{type:`section`,title:`Active`,children:[{type:`markdown`,text:`acme jobs run **here**`},{type:`fields`,rows:[{label:`Queue`,value:`acme`},{label:`State`,value:`running`,tone:`info`}]}]}],detail:[{type:`diff`,before:`a`,after:`b`,lang:`ts`},{type:`details`,value:{kind:`acme`,count:3}}],empty:{icon:`check`,title:`All done`,hint:`no pending jobs`},id:`page`}},"../../../test/fixtures/blocks/section.json":{v:1,root:{type:`section`,title:`Group`,subtitle:`subtitle`,tone:`info`,collapsible:!0,collapsed:!1,children:[{type:`markdown`,text:`in section`},{type:`callout`,id:`section-callout`,tone:`warn`,title:`Careful`,body:`acme maintenance at 02:00`,actions:[{id:`ack`,label:`Acknowledge`,action:{type:`edit`,name:`ack`}}]}]}},"../../../test/fixtures/blocks/stack.json":{v:1,root:{type:`stack`,id:`stack`,gap:`m`,visibleAt:`atLeast:regular`,children:[{type:`markdown`,text:`stacked`},{type:`fields`,rows:[{label:`L`,value:1}]}]}},"../../../test/fixtures/blocks/stat-literal.json":{v:1,root:{type:`stat`,id:`stat-literal`,label:`Latency`,value:42,unit:`ms`,format:`number`,tone:`good`,icon:`clock`,size:`l`,caption:`p95 over 5m`,sparkline:[30,42,38,51,44]}},"../../../test/fixtures/blocks/stat.json":{v:1,root:{type:`stat`,id:`stat`,label:`Latency`,value:{$:`/latency`},unit:`ms`,format:`number`,tone:`good`,icon:`clock`,size:`l`,caption:`p95 over 5m`,sparkline:[30,42,38,51,44]}},"../../../test/fixtures/blocks/tree.json":{v:1,root:{type:`tree`,id:`tree`,nodes:{$:`/nodes`},onExpand:`expandNode`,onActivate:{type:`navigate`,params:{node:`acme`}}}}}),Vh=[{id:`card-1`,title:`acme provision`,state:`todo`,done:!1,eyebrow:`acme/queue`,subtitle:`spin the example.invalid runner`,body:`clone the repo, mount the volume`,badge:`queue`,when:`today`,user:`u1`,userName:`acme ops`,at:`2026-10-19T09:00:00Z`,score:3,quiet:!1,busy:!1,deps:[],tone:`info`,subtasks:[]},{id:`card-2`,title:`acme build`,done:!0,eyebrow:`acme/ci`,subtitle:`build the release`,body:`vite build && vitest`,badge:`ci`,when:`yesterday`,user:`acme-ops`,userName:`acme ops`,at:`2026-10-18T17:00:00Z`,score:9,state:`doing`,quiet:!0,busy:!1,deps:[`card-1`],tone:`good`,subtasks:[]},{id:`card-3`,title:`acme deploy`,done:!1,eyebrow:`acme/cd`,subtitle:`ship to example.invalid`,body:`helm upgrade`,badge:`cd`,when:`tomorrow`,user:`acme-cd`,userName:`acme deploy`,at:`2026-10-20T12:00:00Z`,score:5,state:`doing`,quiet:!1,busy:!0,deps:[`card-2`],tone:`warn`,subtasks:[{id:`card-3a`,title:`acme smoke`,done:!1,state:`todo`,subtasks:[]}]}];function Hh(e){let t={cards:Vh,title:`acme board`,nav:[{id:`n1`,label:`Board`,icon:`folder`,children:[{id:`n1a`,label:`Active`}]},{id:`n2`,label:`Archive`,hasChildren:!1}],filter:{state:`open`}};return e===`collection-calendar`?{...t,cards:[{id:`ev-1`,title:`acme sync`,start:`2026-10-19T10:00:00Z`,end:`2026-10-19T11:00:00Z`},{id:`ev-2`,title:`acme review`,start:`2026-10-21T14:00:00Z`,end:`2026-10-21T15:30:00Z`}]}:t}var Uh=Object.keys(Bh).filter(e=>e.endsWith(`.json`)).map(e=>{let t=e.slice(e.lastIndexOf(`/`)+1,e.length-5),n=Bh[e];return t===`form-view`?{name:t,tree:{v:1,root:{type:`stack`,children:[n.root,{type:`markdown`,text:"filter.state = `{$}` bound to `/view/filter/state`:"},{type:`markdown`,text:{$:`/view/filter/state`}}]}},data:Hh(t)}:{name:t,tree:n,data:Hh(t)}}).sort((e,t)=>e.name.localeCompare(t.name));function Wh(e){let t=1,n=new Set;return{load:async()=>({tree:e.tree,data:e.data,rev:t,treeRev:1,access:`write`}),fetchData:async()=>({rev:t,treeRev:1}),act:async()=>(t+=1,{ok:!0,rev:t}),upload:async()=>(t+=1,{ok:!0,rev:t}),image:async()=>new Uint8Array,onChanged:()=>()=>{n.clear()}}}function Gh(e){let t=(0,v.useMemo)(()=>Wh(e.sample),[e.sample]);return(0,R.jsxs)(`div`,{className:`gallery-sample`,"data-gallery-sample":e.sample.name,children:[(0,R.jsx)(`h2`,{children:e.sample.name}),(0,R.jsx)(zh,{transport:t})]})}function Kh(){return Jh(globalThis.location?.hash??``)}function qh(){let[e,t]=(0,v.useState)(()=>Kh());(0,v.useEffect)(()=>{let e=globalThis,n=()=>t(Kh());return e.addEventListener?.(`hashchange`,n),()=>e.removeEventListener?.(`hashchange`,n)},[]);let n=e=>{t(e),globalThis.history?.pushState(null,``,`#/blocks/${e}`)},r=Uh.find(t=>t.name===e);return(0,R.jsxs)(`div`,{className:`gallery`,"data-gallery":``,children:[(0,R.jsxs)(`aside`,{className:`gallery-list`,children:[(0,R.jsx)(`h1`,{children:`Blocks`}),(0,R.jsx)(`ul`,{children:Uh.map(e=>(0,R.jsx)(`li`,{children:(0,R.jsx)(`button`,{type:`button`,"data-gallery-entry":e.name,onClick:()=>n(e.name),children:e.name})},e.name))})]}),(0,R.jsx)(`main`,{className:`gallery-main`,children:r===void 0?(0,R.jsx)(`p`,{className:`gallery-hint`,children:`Pick a block sample — every entry renders through the real renderer over an in-memory surface.`}):(0,R.jsx)(Gh,{sample:r})})]})}function Jh(e){let t=/^#\/blocks\/(.+)$/.exec(e);return t===null?null:decodeURIComponent(t[1]??``)}var Yh=3e5;function Xh(){return globalThis.document?.visibilityState!==`hidden`}function Zh(e){let t=e.cards;return Array.isArray(t)&&t.every(e=>typeof e==`object`&&!!e&&typeof e.id==`string`&&typeof e.status==`string`)}function Qh(e){let t=e.main;if(!Array.isArray(t))return[];for(let e of t){let t=e?.groups;if(t!==void 0)return t}return[]}function $h(e){let[t,n]=(0,v.useState)({status:`loading`}),r=(0,v.useRef)(0),i=(0,v.useRef)(void 0),a=(0,v.useCallback)(async()=>{let t=r.current,i=await e.transport.fetchData(t);if(i.data===void 0&&i.ops!==void 0&&(i=await e.transport.fetchData()),i.data===void 0)return;let a=i.data;r.current=Math.max(r.current,i.rev),n(e=>e.status===`ready`?{...e,rev:i.rev,treeRev:i.treeRev,data:a}:e)},[e.transport]);(0,v.useEffect)(()=>{let t=!0;n({status:`loading`}),e.transport.load().then(e=>{if(t){if(e.access===`none`){n({status:`not-found`});return}r.current=e.rev,i.current=e.tree,n({status:`ready`,title:tg(e.tree),data:e.data,rev:e.rev,treeRev:e.treeRev,access:e.access})}}).catch(e=>{t&&n({status:`failed`,message:e instanceof Error?e.message:String(e)})});let o=e.transport.onChanged(()=>{a().catch(()=>void 0)}),s,c=()=>{e.refreshMs!==void 0&&s===void 0&&(s=setInterval(()=>{t&&a().catch(()=>void 0)},e.refreshMs))},l=()=>{s!==void 0&&clearInterval(s),s=void 0},u,d=()=>{u===void 0&&(u=setInterval(()=>{t&&a().catch(()=>void 0)},Yh))},f=()=>{u!==void 0&&clearInterval(u),u=void 0},p=globalThis.document,m=()=>{Xh()?(c(),d(),a().catch(()=>void 0)):(l(),f())};return Xh()&&(c(),d()),p?.addEventListener(`visibilitychange`,m),()=>{t=!1,o(),p?.removeEventListener(`visibilitychange`,m),l(),f()}},[e.slug,e.id,e.transport,e.hub,e.refreshMs,a]);let o=(0,v.useCallback)(async(t,i)=>{n(e=>{if(e.status!==`ready`||!Zh(e.data))return e;let n=e.data.cards.map(e=>e.id===t?{...e,status:i}:e);return{...e,data:{...e.data,cards:n}}});let o=await e.transport.act({action:`move`,type:`move`,payload:{itemId:t,to:{group:i}},actionId:crypto.randomUUID()});if(o.ok===!1){await a().catch(()=>void 0);return}r.current=Math.max(r.current,o.rev),o.navigate!==void 0&&o.navigate.type===`navigate`&&e.onNavigate?.({...o.navigate.params===void 0?{}:{params:o.navigate.params},...o.navigate.target===void 0?{}:{target:o.navigate.target}})},[e.transport,e.onNavigate,a]);return t.status===`loading`?(0,R.jsx)(`p`,{className:`ext-surface-loading`,children:`loading…`}):t.status===`not-found`?(0,R.jsx)(`p`,{className:`ext-surface-not-found`,role:`alert`,children:`surface not found`}):t.status===`failed`?(0,R.jsxs)(`p`,{className:`ext-surface-failed`,role:`alert`,children:[`surface failed: `,t.message]}):(0,R.jsxs)(`section`,{className:`ext-surface`,"data-ext-surface":`${e.slug}/${e.id}`,children:[(0,R.jsx)(`h2`,{className:`ext-surface-title`,children:t.title}),Zh(t.data)?(0,R.jsx)(eg,{data:t.data,lanes:Qh(i.current),access:t.access,onMove:o}):(0,R.jsx)(`pre`,{className:`ext-surface-data`,children:JSON.stringify(t.data)})]})}function eg(e){return(0,R.jsx)(`div`,{className:`ext-board`,role:`list`,children:[`todo`,`doing`,`done`].map(t=>(0,R.jsxs)(`div`,{className:`ext-board-lane`,"data-lane":t,role:`list`,onDragOver:t=>{e.access===`write`&&t.preventDefault()},onDrop:n=>{if(e.access!==`write`)return;let r=n.dataTransfer.getData(`text/plain`);r!==``&&e.onMove(r,t)},children:[(0,R.jsx)(`h3`,{className:`ext-board-lane-title`,children:t}),e.data.cards.filter(e=>e.status===t).map(t=>(0,R.jsx)(`div`,{className:`ext-board-card`,"data-card":t.id,role:`listitem`,draggable:e.access===`write`,"data-draggable":e.access===`write`?`true`:`false`,onDragStart:e=>{e.dataTransfer.setData(`text/plain`,t.id)},children:t.title},t.id))]},t))})}function tg(e){return typeof e==`object`&&e&&`title`in e&&typeof e.title==`string`?e.title:`extension surface`}function ng(e,t){let n=e?.title;return typeof n==`string`&&n!==``?n:t}function rg(e){let[t,n]=(0,v.useState)({status:`loading`});return(0,v.useEffect)(()=>{let t=!0;n({status:`loading`});let r=async()=>{let r=await e.transport.fetchData();t&&n(e=>e.status===`ready`?{...e,rev:r.rev,data:r.data??e.data}:e)};e.transport.load().then(r=>{if(t){if(r.access===`none`){n({status:`not-found`});return}n({status:`ready`,title:ng(r.tree,e.id),data:r.data,rev:r.rev})}}).catch(e=>{t&&n({status:`failed`,message:e instanceof Error?e.message:String(e)})});let i=e.refreshMs===void 0?void 0:setInterval(()=>{t&&r().catch(()=>void 0)},e.refreshMs);return()=>{t=!1,i!==void 0&&clearInterval(i)}},[e.slug,e.id,e.transport,e.refreshMs]),t.status===`loading`?(0,R.jsx)(`p`,{className:`ext-panel-loading`,children:`loading…`}):t.status===`not-found`?(0,R.jsx)(`p`,{className:`ext-panel-not-found`,children:`this panel isn't available`}):t.status===`failed`?(0,R.jsxs)(`p`,{className:`ext-panel-failed`,role:`alert`,children:[`panel failed to load: `,t.message]}):(0,R.jsxs)(`section`,{className:`ext-panel`,"data-ext-panel":`${e.slug}/${e.id}`,children:[(0,R.jsx)(`h3`,{className:`ext-panel-title`,children:t.title}),(0,R.jsx)(`pre`,{className:`ext-panel-data`,children:JSON.stringify(t.data)})]})}function ig(e){let t=`/v1/ext/${encodeURIComponent(e.slug)}/surfaces/${encodeURIComponent(e.id)}`;return e.params===void 0||Object.keys(e.params).length===0?t:`${t}?params=${encodeURIComponent(JSON.stringify(e.params))}`}function ag(e,t,n){return`${e}${e.includes(`?`)?`&`:`?`}${t}=${n}`}function og(e){let t=e.fetch??((e,t)=>globalThis.fetch(e,t)),n=new Set,r=()=>({accept:`application/json`,...e.streamId===void 0?{}:{"x-sigrun-stream":e.streamId}}),i=async e=>{let n=await t(e,{method:`GET`,headers:r()});if(!n.ok)throw Error(`ext surface GET ${e} failed with status ${n.status}`);return await n.json()};return{load(){return i(ig(e))},fetchData(t){let n=`${ig(e)}/data`;return i(t===void 0?n:ag(n,`since`,String(t)))},async act(n){return await(await t(`${ig(e)}/actions`,{method:`POST`,headers:{...r(),"content-type":`application/json`},body:JSON.stringify({...n,params:e.params??{}})})).json()},async upload(n){let i=ag(`${ig(e)}/uploads/${encodeURIComponent(n.field)}/${encodeURIComponent(n.name)}`,`params`,encodeURIComponent(JSON.stringify(e.params??{})));return await(await t(i,{method:`PUT`,headers:{...r(),"content-type":`application/octet-stream`},body:n.bytes})).json()},image(){return Promise.reject(Error(`ext surface image route ships with U7`))},onChanged(e){return n.add(e),()=>{n.delete(e)}}}}var sg=class{#e=new Set;attach(e,t){let n=og(e),r=this;return{load:()=>n.load(),fetchData:e=>n.fetchData(e),act:e=>n.act(e),upload:e=>n.upload(e),image:(e,t)=>n.image(e,t),onChanged(n){let i={slug:e.slug,id:e.id,keyHash:t,listener:n};return r.#e.add(i),()=>{r.#e.delete(i)}}}}dispatch(e){for(let t of this.#e)t.slug===e.slug&&t.id===e.id&&t.keyHash===e.k&&t.listener({rev:e.rev,treeRev:e.treeRev})}};function cg(e){return`/v1/conversations/${e.conversationId}/blocks/${encodeURIComponent(e.entryId)}`}function lg(e){let t=e.fetch??((e,t)=>globalThis.fetch(e,t)),n=new Set,r=()=>({accept:`application/json`}),i=async e=>{let n=await t(e,{method:`GET`,headers:r()});if(!n.ok)throw Error(`chat block GET ${e} failed with status ${n.status}`);return await n.json()};return{load(){return i(cg(e))},fetchData(t){let n=`${cg(e)}/data`;return i(t===void 0?n:`${n}?since=${String(t)}`)},async act(n){return await(await t(`${cg(e)}/actions`,{method:`POST`,headers:{...r(),"content-type":`application/json`},body:JSON.stringify(n)})).json()},upload(){return Promise.reject(Error(`chat blocks carry no upload fields`))},image(){return Promise.reject(Error(`chat block image route ships with U7`))},onChanged(e){return n.add(e),()=>{n.delete(e)}}}}var ug=class{#e=new Set;attach(e){let t=lg(e),n=this;return{load:()=>t.load(),fetchData:e=>t.fetchData(e),act:e=>t.act(e),upload:e=>t.upload(e),image:(e,n)=>t.image(e,n),onChanged(t){let r={conversationId:e.conversationId,entryId:e.entryId,listener:t};return n.#e.add(r),()=>{n.#e.delete(r)}}}}dispatch(e){for(let t of this.#e)t.conversationId===e.conversationId&&t.entryId===e.entryId&&t.listener({rev:e.rev,treeRev:e.treeRev??0})}};function dg(e){let{title:t,timeline:n,onTimeline:r,panel:i,onPanel:a,onRename:o,onExport:s,onCompact:c,onArchive:l,drawerOpen:u,onToggleDrawer:d}=e,[f,p]=(0,v.useState)(!1),[m,h]=(0,v.useState)(t),[g,_]=(0,v.useState)(!1),y=(0,v.useRef)(null);ym(g,()=>_(!1),y);let b=()=>{h(t),p(!0),_(!1)},x=()=>p(!1),S=()=>{let e=m.trim();if(e===``||e===t){p(!1);return}o(e).then(()=>p(!1),()=>p(!1))},C=e=>()=>{_(!1),e()};return(0,R.jsxs)(`header`,{className:`chat-header`,children:[(0,R.jsx)(`button`,{type:`button`,className:`icon-btn chat-menu-toggle`,title:`Conversations`,"aria-label":`open conversations`,"aria-expanded":u,onClick:d,children:(0,R.jsx)(lm,{})}),f?(0,R.jsx)(`input`,{className:`chat-title-input`,value:m,"aria-label":`conversation name`,autoFocus:!0,onChange:e=>h(e.target.value),onBlur:S,onKeyDown:e=>{e.key===`Enter`?S():e.key===`Escape`&&x()}}):(0,R.jsx)(`button`,{type:`button`,className:`chat-title`,title:t,onClick:b,children:t}),(0,R.jsx)(`span`,{className:`chat-header-spacer`}),(0,R.jsx)(`button`,{type:`button`,className:`icon-btn`,"data-panel":`timeline`,title:`Chronological view — interleave thinking and tool calls in order instead of folding them under the response`,"aria-label":`chronological view`,"aria-pressed":n,onClick:r,children:`⇅`}),(0,R.jsx)(`button`,{type:`button`,className:`icon-btn`,"data-panel":`outline`,title:`Outline`,"aria-label":`outline`,"aria-pressed":i===`outline`,onClick:()=>a(`outline`),children:(0,R.jsx)(um,{})}),(0,R.jsx)(`button`,{type:`button`,className:`icon-btn`,"data-panel":`workspace`,title:`Workspace files`,"aria-label":`workspace`,"aria-pressed":i===`workspace`,onClick:()=>a(`workspace`),children:(0,R.jsx)(dm,{})}),(0,R.jsx)(`button`,{type:`button`,className:`icon-btn`,"data-panel":`jobs`,title:`Jobs`,"aria-label":`jobs`,"aria-pressed":i===`jobs`,onClick:()=>a(`jobs`),children:(0,R.jsx)(mm,{})}),(0,R.jsxs)(`span`,{className:`chat-menu-slot`,ref:y,children:[(0,R.jsx)(`button`,{type:`button`,className:`icon-btn`,title:`More (export, compact, rename, archive)`,"aria-label":`more actions`,"aria-haspopup":`menu`,"aria-expanded":g,onClick:()=>_(e=>!e),children:(0,R.jsx)(pm,{})}),g&&(0,R.jsxs)(`div`,{className:`chat-menu`,role:`menu`,children:[(0,R.jsx)(`button`,{type:`button`,role:`menuitem`,"data-menu-action":`export`,onClick:C(s),children:`Export`}),(0,R.jsx)(`button`,{type:`button`,role:`menuitem`,"data-menu-action":`compact`,onClick:C(c),children:`Compact`}),(0,R.jsx)(`button`,{type:`button`,role:`menuitem`,"data-menu-action":`rename`,onClick:C(b),children:`Rename`}),(0,R.jsx)(`button`,{type:`button`,role:`menuitem`,"data-menu-action":`archive`,onClick:C(l),children:`Archive`})]})]})]})}var fg=`sigrun.railOrder`;function pg(e){return`${e.slug}/${e.id}`}function mg(e){let t=[];for(let n of e)if(n.status===`ok`)for(let e of n.surfaces??[])e.placement===`view`&&t.push({slug:n.name,id:e.id,title:e.title,icon:e.icon,...e.refreshMs===void 0?{}:{refreshMs:e.refreshMs}});return t}function hg(e){let t=[];for(let n of e)if(n.status===`ok`)for(let e of n.surfaces??[])e.placement===`panel`&&t.push({slug:n.name,id:e.id,title:e.title,icon:e.icon});return t}function gg(){return globalThis.localStorage}function _g(){try{let e=gg()?.getItem(fg);if(e==null)return[];let t=JSON.parse(e);return Array.isArray(t)?t.filter(e=>typeof e==`string`):[]}catch{return[]}}function vg(e){try{gg()?.setItem(fg,JSON.stringify(e))}catch{}}function yg(e,t){let n=new Map(e.map(e=>[pg(e),e])),r=[],i=new Set;for(let e of t){let t=n.get(e);t!==void 0&&!i.has(e)&&(r.push(t),i.add(e))}for(let t of e)i.has(pg(t))||r.push(t);return r}function bg(e,t,n){let r=e.map(e=>pg(e)),i=r.indexOf(t);if(i===-1)return r;let a=i+n;if(a<0||a>=r.length)return r;let o=[...r];return o[i]=r[a]??``,o[a]=t,vg(o),o}function xg(e){let t=e.extensions.every(e=>e.status===`ok`),n=e.health.memory===`ok`&&e.health.providers===`ok`&&e.health.backup!==`degraded`;return t&&n?`ok`:`degraded`}function Sg(e){return`${e.extensions.length===0?`extensions: none`:`extensions: ${e.extensions.map(e=>`${e.name}: ${e.status}`).join(`; `)}`} · backup: ${e.health.backup}`}function Cg(e){let{meta:t,onOpenSettings:n,identity:r,onLogout:i}=e,{onOpenGallery:a}=e,o=r?.method===`token`||r?.method===`session`,s=new Set(e.hiddenExtSurfaces??[]),c=(e.extViewEntries??yg(mg(t.extensions),_g())).filter(e=>!s.has(`${e.slug}/${e.id}`));return(0,R.jsxs)(`nav`,{className:`rail`,"aria-label":`sections`,children:[(0,R.jsx)(`span`,{className:`rail-brand`,title:`sigrun`,children:(0,R.jsx)(am,{})}),(0,R.jsx)(`button`,{type:`button`,className:`rail-btn rail-btn-active`,"data-rail-section":`chats`,title:`Chats`,"aria-current":`page`,children:(0,R.jsx)(om,{})}),t.dev&&a!==void 0&&(0,R.jsx)(`button`,{type:`button`,className:`rail-btn`,"data-rail-section":`blocks`,title:`Blocks`,"aria-label":`blocks gallery`,onClick:a,children:(0,R.jsx)(sm,{})}),c.map(t=>(0,R.jsx)(`button`,{type:`button`,className:`rail-btn`,"data-rail-section":`ext:${t.slug}/${t.id}`,title:t.title,"aria-label":t.title,onClick:()=>e.onOpenExtView?.(t.slug,t.id),onKeyDown:n=>{n.altKey&&(n.key===`ArrowUp`?(n.preventDefault(),e.onMoveExtView?.(`${t.slug}/${t.id}`,-1)):n.key===`ArrowDown`&&(n.preventDefault(),e.onMoveExtView?.(`${t.slug}/${t.id}`,1)))},children:t.title.slice(0,1)},`${t.slug}/${t.id}`)),(0,R.jsx)(`span`,{className:`rail-spacer`}),(0,R.jsx)(`span`,{className:`rail-health`,"data-health":xg(t),title:Sg(t)}),o&&(0,R.jsx)(`span`,{className:`rail-user`,"data-rail-user":r.user??``,title:r.user===void 0?`signed in`:`signed in as ${r.user}`,children:r.user??`—`}),o&&i!==void 0&&(0,R.jsx)(`button`,{type:`button`,className:`rail-btn`,"data-rail-section":`logout`,title:`Sign out`,"aria-label":`sign out`,onClick:i,children:(0,R.jsx)(gm,{})}),(0,R.jsx)(`button`,{type:`button`,className:e.settingsActive===!0?`rail-btn rail-btn-active`:`rail-btn`,"data-rail-section":`settings`,title:`Settings`,"aria-label":`settings`,...e.settingsActive===!0?{"aria-current":`page`}:{},onClick:n,children:(0,R.jsx)(cm,{})})]})}function wg(e){let{mode:t,outline:n,workspace:r,jobs:i}=e,a=e.extPanels??[];return t===null&&e.extContent===void 0&&a.length===0?null:(0,R.jsxs)(`aside`,{className:`right-panel`,"data-panel":e.extContent===void 0?t:`ext`,"aria-label":`${e.extContent===void 0?t:`extension`} panel`,children:[a.length>0&&(0,R.jsx)(`div`,{className:`right-panel-tabs`,role:`tablist`,children:a.map(t=>(0,R.jsx)(`button`,{type:`button`,role:`tab`,className:`right-panel-tab`,"data-panel-tab":`ext:${t.slug}/${t.id}`,title:t.title,"aria-selected":e.activeExtPanel===`${t.slug}/${t.id}`,onClick:()=>e.onOpenExtPanel?.(t.slug,t.id),children:t.title},`${t.slug}/${t.id}`))}),e.extContent===void 0?t===null?null:t===`outline`?n:t===`jobs`?i:r:e.extContent]})}function Tg(e){return`cron`in e.schedule?e.schedule.timezone===void 0?e.schedule.cron:`${e.schedule.cron} (${e.schedule.timezone})`:`every`in e.schedule?`every ${e.schedule.every}`:`at ${e.schedule.at}`}function Eg(e){let{client:t,onNavigate:n,refreshToken:r=0}=e,[i,a]=(0,v.useState)(null),[o,s]=(0,v.useState)(null),[c,l]=(0,v.useState)({}),[u,d]=(0,v.useState)({}),[f,p]=(0,v.useState)({});(0,v.useEffect)(()=>{let e=!1;return t.listJobs().then(t=>{e||(a(t.jobs),s(null))}).catch(t=>{e||s(t instanceof Error?t.message:String(t))}),()=>{e=!0}},[t,r]),(0,v.useEffect)(()=>{let e=!1,n=Object.entries(c).filter(([e,t])=>t===!0&&u[e]===void 0);for(let[r]of n)(async()=>{try{let[n,i]=await Promise.all([t.listJobRuns(r),t.listJobRevisions(r)]);if(e)return;d(e=>({...e,[r]:{runs:n.runs,revisions:i.revisions}}))}catch(t){if(e)return;s(t instanceof Error?t.message:String(t))}})();return()=>{e=!0}},[t,c,u]);async function m(e){l(t=>{let n={...t};return n[e.id]===!0?delete n[e.id]:n[e.id]=!0,n})}async function h(e){try{let n=await t.runJob(e.id);p(t=>({...t,[e.id]:n.outcome})),s(null)}catch(e){s(e instanceof Error?e.message:String(e))}}let g=(e,t)=>(0,R.jsxs)(`button`,{type:`button`,className:`job-conversation`,"aria-label":t,title:`conversation #${e}`,onClick:()=>n?.(e),children:[`#`,e]}),_=(e,t)=>(0,R.jsxs)(`div`,{className:`job-runs`,"data-job-runs":e.id,children:[(0,R.jsx)(`h3`,{className:`job-section-title`,children:`Runs`}),t.length===0?(0,R.jsx)(`p`,{className:`job-empty`,children:`no runs yet`}):t.map(e=>(0,R.jsxs)(`div`,{className:`job-run-row`,children:[(0,R.jsx)(`span`,{className:`job-run-when`,children:e.fireAt}),(0,R.jsxs)(`span`,{className:`job-run-version`,children:[`v`,e.version]}),e.manual&&(0,R.jsx)(`span`,{className:`job-run-manual`,children:`manual`}),(0,R.jsx)(`span`,{className:`job-run-outcome`,"data-outcome":e.outcome,children:e.outcome}),e.error!==void 0&&(0,R.jsx)(`span`,{className:`job-run-error`,title:e.error,children:e.error}),e.conversationId!==void 0&&g(e.conversationId,`open run conversation`)]},e.fireAt))]}),y=(e,t)=>(0,R.jsxs)(`div`,{className:`job-revisions`,"data-job-revisions":e.id,children:[(0,R.jsx)(`h3`,{className:`job-section-title`,children:`Revisions`}),t.length===0?(0,R.jsx)(`p`,{className:`job-empty`,children:`no revisions`}):t.map((e,n)=>{let r=t[n+1];return(0,R.jsxs)(`div`,{className:`job-revision-row`,children:[(0,R.jsxs)(`div`,{className:`job-revision-meta`,children:[(0,R.jsxs)(`span`,{className:`job-revision-version`,children:[`v`,e.version]}),(0,R.jsx)(`span`,{className:`job-revision-changedAt`,children:e.changedAt}),(0,R.jsx)(`span`,{className:`job-revision-changedBy`,children:e.changedBy})]}),r!==void 0&&(0,R.jsxs)(`div`,{className:`interaction-diff`,children:[(0,R.jsx)(`pre`,{className:`interaction-diff-before`,children:JSON.stringify(r.spec,null,2)}),(0,R.jsx)(`pre`,{className:`interaction-diff-after`,children:JSON.stringify(e.spec,null,2)})]})]},e.version)})]});return(0,R.jsxs)(`section`,{className:`jobs-panel`,"aria-label":`jobs`,children:[(0,R.jsx)(`h2`,{className:`workspace-title`,children:`Jobs`}),o!==null&&(0,R.jsx)(`p`,{role:`alert`,children:o}),i===null&&o===null?(0,R.jsx)(`p`,{className:`workspace-loading`,children:`loading…`}):i===null?null:i.length===0?(0,R.jsx)(`p`,{className:`workspace-empty`,children:`No jobs`}):(0,R.jsx)(`ul`,{className:`jobs-list`,children:i.map(e=>{let t=c[e.id]===!0,n=u[e.id],r=f[e.id];return(0,R.jsxs)(`li`,{className:`job-row`,children:[(0,R.jsxs)(`button`,{type:`button`,className:`job-summary`,"data-job-id":e.id,"aria-expanded":t,onClick:()=>void m(e),children:[(0,R.jsxs)(`span`,{className:`job-name`,children:[t?`▾`:`▸`,` `,e.name]}),(0,R.jsx)(`span`,{className:`job-schedule`,children:Tg(e)}),(0,R.jsx)(`span`,{className:`job-next`,children:e.nextRun??`no next run`}),(0,R.jsx)(`span`,{className:`job-last`,children:r??e.lastRun?.outcome??`never run`})]}),(0,R.jsxs)(`div`,{className:`job-summary-side`,children:[e.lastRun?.conversationId!==void 0&&g(e.lastRun.conversationId,`open last run conversation`),e.access===`write`&&(0,R.jsx)(`button`,{type:`button`,className:`job-runnow`,onClick:()=>void h(e),children:`Run now`})]}),t&&n!==void 0&&(0,R.jsxs)(`div`,{className:`job-detail`,children:[_(e,n.runs),y(e,n.revisions)]}),t&&n===void 0&&(0,R.jsx)(`p`,{className:`workspace-loading`,children:`loading…`})]},e.id)})})]})}function Dg(e){let t=null,n=1/0;for(let[r,i]of e)i.isIntersecting&&i.top<n&&(n=i.top,t=r);return t}function Og(e,t){if(e.size!==t.size)return!1;for(let n of e)if(!t.has(n))return!1;return!0}function kg(e){let{scrollRoot:t,turns:n}=e,[r,i]=(0,v.useState)(null),[a,o]=(0,v.useState)(()=>new Set),s=(0,v.useRef)(null),c=n.map(e=>e.entryId).join(`,`);return(0,v.useEffect)(()=>{i(null)},[t,c]),(0,v.useEffect)(()=>{if(t===null)return;let e=globalThis.IntersectionObserver;if(e===void 0)return;let r=new Map,a=new e(e=>{for(let t of e){let e=t.target,n=Number(e.getAttribute(`data-entry-id`));Number.isFinite(n)&&r.set(n,{isIntersecting:t.isIntersecting,top:e.getBoundingClientRect().top})}i(Dg(r))});for(let e of n){let n=t.querySelector(`[data-entry-id="${e.entryId}"]`);n!==null&&a.observe(n)}return()=>{a.disconnect()}},[t,c]),(0,v.useLayoutEffect)(()=>{let e=s.current;if(e===null)return;let t=()=>{let t=new Set;for(let n of e.querySelectorAll(`.outline-text`)){if(n.scrollHeight<=n.clientHeight+1)continue;let e=n.closest(`.outline-item`),r=Number(e?.getAttribute(`data-entry-id`));Number.isFinite(r)&&t.add(r)}o(e=>Og(e,t)?e:t)};t();let n=globalThis.ResizeObserver;if(n===void 0)return;let r=new n(t);return r.observe(e),()=>{r.disconnect()}},[c]),n.length===0?(0,R.jsxs)(`div`,{className:`right-panel-body outline-body`,children:[(0,R.jsx)(`h4`,{className:`right-panel-title`,children:`Outline`}),(0,R.jsx)(`p`,{className:`outline-empty`,children:`No prompts yet`})]}):(0,R.jsxs)(`div`,{className:`right-panel-body outline-body`,children:[(0,R.jsx)(`h4`,{className:`right-panel-title`,children:`Outline`}),(0,R.jsx)(`nav`,{className:`outline`,"aria-label":`conversation outline`,ref:s,children:n.map(e=>(0,R.jsx)(`button`,{type:`button`,className:`outline-item`,"data-entry-id":e.entryId,"data-clamped":a.has(e.entryId)?`true`:void 0,title:e.text,"aria-current":r===e.entryId?`true`:void 0,onClick:()=>{t?.querySelector(`[data-entry-id="${e.entryId}"]`)?.scrollIntoView({behavior:`smooth`,block:`start`})},children:(0,R.jsx)(`span`,{className:`outline-text`,children:e.text})},e.entryId))})]})}var Ag=`79bdfd95541951f9db86236ee2a2f81cce481a5d8688090837a2bdde83d52c97`,jg=`sigrun-session-search`,Mg=[`Pinned`,`Today`,`Yesterday`,`Earlier`];function Ng(){(globalThis.document?.getElementById(jg))?.focus()}function Pg(e,t){let n=new Set,r=new Map(e.map(e=>[e.id,e]));for(let i of e){if(!ae(i).toLowerCase().includes(t))continue;let e=i;for(;e!==void 0&&!n.has(e.id);)n.add(e.id),e=e.parent===void 0?void 0:r.get(e.parent.id)}return n}function Fg(e,t){let n=[];for(let r of Mg){let i=e.filter(e=>ee(e,t)===r);if(i.length===0)continue;n.push({kind:`heading`,group:r});let a=(e,t)=>{n.push({kind:`row`,node:e,depth:t});for(let n of e.children)a(n,t+1)};for(let e of i)a(e,0)}return n}function Ig(e){let{rows:t,activeId:n,onSelect:r,onNew:i,onRename:a,onArchive:o,onFork:s,currentUser:c,onShare:l}=e,[u,d]=(0,v.useState)(``),[f,p]=(0,v.useState)(!1),[m,h]=(0,v.useState)(null),g=(0,v.useRef)(null);ym(m!==null,()=>h(null),g);let[_,y]=(0,v.useState)(null);(0,v.useEffect)(()=>{let e=globalThis.window;if(e===void 0)return;let t=e=>{(e.ctrlKey||e.metaKey)&&(e.key===`k`||e.key===`K`)&&(e.preventDefault(),Ng())};return e.addEventListener(`keydown`,t),()=>e.removeEventListener(`keydown`,t)},[]);let b=new Date,x=(0,v.useMemo)(()=>{let e=u.trim().toLowerCase(),n=Pg(t,e);return Fg(E(e===``?t:t.filter(e=>n.has(e.id)),{includeArchived:f}),b)},[t,u,f,b.getTime()]),S=e=>{if(_===null||_.id!==e)return;let n=t.find(t=>t.id===e),r=_.draft.trim();if(n===void 0||r===``||r===ae(n)){y(null);return}a(e,r).then(()=>y(null),()=>y(null))};return(0,R.jsxs)(`nav`,{className:`session-list`,"aria-label":`conversations`,children:[(0,R.jsxs)(`div`,{className:`session-search-row`,children:[(0,R.jsx)(`input`,{id:jg,className:`session-search`,type:`search`,placeholder:`Search`,"aria-label":`search conversations`,value:u,onChange:e=>d(e.target.value)}),(0,R.jsx)(`button`,{type:`button`,className:`session-new`,title:`New conversation`,"aria-label":`new conversation`,onClick:i,children:(0,R.jsx)(fm,{})})]}),(0,R.jsxs)(`ul`,{children:[x.map(e=>{if(e.kind===`heading`)return(0,R.jsx)(`li`,{className:`session-group`,"data-age-group":e.group,children:e.group},`group-${e.group}`);let{node:t,depth:i}=e,a=t.row,u=ae(a),d=_!==null&&_.id===a.id,f=l!==void 0&&c!==void 0&&a.owner===c,p=[`session-item`,a.id===n?`session-item-active`:``,a.archived?`session-item-archived`:``].filter(Boolean).join(` `);return(0,R.jsxs)(`li`,{className:p,"data-conversation-id":a.id,"data-depth":i,style:i===0?void 0:{paddingLeft:6+i*14},children:[i>0&&(0,R.jsx)(`span`,{className:`session-fork-mark`,"aria-hidden":`true`,children:`↳`}),d?(0,R.jsx)(`input`,{className:`session-rename-input`,"aria-label":`conversation name`,value:_.draft,onChange:e=>y({id:a.id,draft:e.target.value}),onKeyDown:e=>{e.key===`Enter`?S(a.id):e.key===`Escape`&&y(null)}}):(0,R.jsx)(`button`,{type:`button`,className:`session-select`,title:u,onClick:()=>r(a.id),children:(0,R.jsx)(`span`,{className:`session-name`,children:u})}),(0,R.jsx)(`span`,{className:`session-age`,children:ie(a.lastActivityAt,b)}),(0,R.jsxs)(`span`,{className:`session-row-actions`,ref:m===a.id?g:void 0,children:[(0,R.jsx)(`button`,{type:`button`,className:`session-menu-toggle`,"aria-label":`actions for ${u}`,"aria-haspopup":`menu`,"aria-expanded":m===a.id,onClick:()=>h(m===a.id?null:a.id),children:(0,R.jsx)(pm,{})}),m===a.id&&(0,R.jsxs)(`div`,{className:`session-menu`,role:`menu`,children:[f&&(0,R.jsx)(`button`,{type:`button`,role:`menuitem`,"data-menu-action":`share`,onClick:()=>{h(null),l?.(a.id)},children:`Share…`}),(0,R.jsx)(`button`,{type:`button`,role:`menuitem`,"data-menu-action":`rename`,onClick:()=>{h(null),y({id:a.id,draft:u})},children:`Rename`}),(0,R.jsx)(`button`,{type:`button`,role:`menuitem`,"data-menu-action":`fork`,onClick:()=>{h(null),s(a.id)},children:`Fork`}),(0,R.jsx)(`button`,{type:`button`,role:`menuitem`,"data-menu-action":`archive`,onClick:()=>{h(null),o(a.id,!a.archived)},children:a.archived?`Unarchive`:`Archive`})]})]})]},a.id)}),x.length===0&&u.trim()!==``&&(0,R.jsx)(`li`,{className:`session-empty`,children:`No matching conversations`})]}),(0,R.jsx)(`button`,{type:`button`,className:`session-archived-toggle`,"aria-pressed":f,title:`Show archived conversations`,onClick:()=>p(e=>!e),children:`Archived`})]})}var Lg=/\p{M}/gu,Rg=/@/g,zg=/[^a-z0-9._-]/g,Bg=/^[^a-z0-9]+/;function Vg(e){let t=e.normalize(`NFKD`).replace(Lg,``).toLowerCase().replace(Rg,`_`).replace(zg,`-`).replace(Bg,``).slice(0,128);return t===``?void 0:t}function Hg(e){let{client:t,state:n,onClaimed:r}=e,[i,a]=(0,v.useState)(``),[o,s]=(0,v.useState)(``),[c,l]=(0,v.useState)(``),[u,d]=(0,v.useState)(``),[f,p]=(0,v.useState)(null),[m,h]=(0,v.useState)(!1),g=n.proxyIdentity,_=o.trim(),y=_===``?void 0:Vg(_),b=_!==``&&y===void 0;async function x(){h(!0),p(null);try{await t.claim({}),r()}catch(e){p(Ug(e))}finally{h(!1)}}async function S(){let e=o.trim();if(n.codeRequired&&i.trim()===``){p(`enter the setup code (find it in the server log)`);return}if(e===``){p(`choose a username`);return}h(!0),p(null);try{await t.claim({...n.codeRequired?{code:i.trim()}:{},user:e,...c.trim()===``?{}:{name:c.trim()},...u.trim()===``?{}:{email:u.trim()},issueToken:!0,tokenName:`webui`}),r()}catch(e){p(Ug(e))}finally{h(!1)}}return(0,R.jsxs)(`div`,{className:`auth-card`,children:[(0,R.jsx)(`h1`,{children:`Set up sigrun`}),g===void 0?(0,R.jsxs)(R.Fragment,{children:[(0,R.jsx)(`p`,{className:`auth-message`,children:`Claim this server: the first user is its administrator.`}),n.codeRequired&&(0,R.jsxs)(`label`,{className:`auth-field`,children:[`Setup code`,(0,R.jsx)(`input`,{"data-auth-field":`code`,autoComplete:`one-time-code`,value:i,onChange:e=>a(e.target.value)})]}),(0,R.jsxs)(`label`,{className:`auth-field`,children:[`Username`,(0,R.jsx)(`input`,{"data-auth-field":`user`,autoComplete:`username`,value:o,onChange:e=>s(e.target.value)})]}),b?(0,R.jsx)(`p`,{className:`auth-message`,"data-auth-preview":`invalid`,children:`Your username needs at least one letter or digit.`}):y===void 0?null:(0,R.jsxs)(`p`,{className:`auth-message`,"data-auth-preview":`user`,children:[`Your username will be `,(0,R.jsx)(`strong`,{children:y})]}),(0,R.jsxs)(`label`,{className:`auth-field`,children:[`Name `,(0,R.jsx)(`span`,{className:`auth-optional`,children:`(optional)`}),(0,R.jsx)(`input`,{"data-auth-field":`name`,autoComplete:`name`,value:c,onChange:e=>l(e.target.value)})]}),(0,R.jsxs)(`label`,{className:`auth-field`,children:[`Email `,(0,R.jsx)(`span`,{className:`auth-optional`,children:`(optional)`}),(0,R.jsx)(`input`,{"data-auth-field":`email`,type:`email`,autoComplete:`email`,value:u,onChange:e=>d(e.target.value)})]}),(0,R.jsx)(`button`,{type:`button`,className:`auth-submit`,disabled:m||b,onClick:()=>void S(),children:m?`Claiming…`:`Set up sigrun`})]}):(0,R.jsxs)(R.Fragment,{children:[(0,R.jsx)(`p`,{className:`auth-message`,children:`Your proxy vouches for your identity. Continuing claims this server as:`}),(0,R.jsxs)(`p`,{className:`auth-identity`,children:[(0,R.jsx)(`strong`,{children:g.user}),g.name===void 0?``:` — ${g.name}`,g.email===void 0?``:` · ${g.email}`]}),g.subject!==g.user&&(0,R.jsx)(`p`,{className:`auth-message`,"data-auth-proxy":`subject`,children:g.subject}),(0,R.jsx)(`button`,{type:`button`,className:`auth-submit`,disabled:m,onClick:()=>void x(),children:`Continue as ${g.user}`})]}),f!==null&&(0,R.jsx)(`p`,{className:`auth-error`,role:`alert`,children:f})]})}function Ug(e){if(e instanceof b){let t={proxy_identity_required:`This sigrun signs people in through its sign-in proxy. Open it through the proxy.`,username_taken:`That username is taken. Choose another.`,invalid_username:`That name has no usable characters — use at least one letter or digit.`},n=e.error??``;if(Object.hasOwn(t,n))return t[n];if(e.error!==void 0)return e.error}return e instanceof Error?e.message:String(e)}function Wg(e){return e.split(/[\s,]+/).map(e=>e.trim()).filter(e=>e!==``)}function Gg(e){let{client:t,conversation:n,onClose:r,onSaved:i}=e,a=n.sharing,[o,s]=(0,v.useState)(a?.scope??`private`),[c,l]=(0,v.useState)(a?.scope===`household`||a?.scope===`people`?a.level:`read`),[u,d]=(0,v.useState)(a?.scope===`people`?a.users.join(`, `):``),[f,p]=(0,v.useState)(null),[m,h]=(0,v.useState)(!1);async function g(e){h(!0),p(null);try{await t.patchConversationMeta(n.id,{sharing:e}),await i()}catch(e){p(Ug(e))}finally{h(!1)}}function _(e){m||(s(e),e===`private`?g({scope:`private`}):e===`household`&&g({scope:`household`,level:c}))}function y(e){m||(l(e),o===`household`&&g({scope:`household`,level:e}))}function b(){if(m)return;let e=Wg(u);if(e.length===0){p(`enter at least one username to share with`);return}g({scope:`people`,users:e,...a?.scope===`people`&&a.groups!==void 0?{groups:[...a.groups]}:{},level:c})}return(0,R.jsxs)(`div`,{className:`share-menu`,role:`dialog`,"aria-label":`share conversation`,children:[(0,R.jsxs)(`div`,{className:`share-head`,children:[(0,R.jsx)(`h2`,{children:`Share`}),(0,R.jsx)(`button`,{type:`button`,className:`share-close`,"aria-label":`close share dialog`,onClick:r,children:`Close`})]}),(0,R.jsxs)(`div`,{className:`share-scopes`,children:[(0,R.jsxs)(`button`,{type:`button`,className:`share-scope`,"data-share-scope":`private`,"data-selected":o===`private`||void 0,"aria-pressed":o===`private`,disabled:m,onClick:()=>_(`private`),children:[`Private`,(0,R.jsx)(`span`,{className:`share-scope-hint`,children:`only you`})]}),(0,R.jsxs)(`button`,{type:`button`,className:`share-scope`,"data-share-scope":`household`,"data-selected":o===`household`||void 0,"aria-pressed":o===`household`,disabled:m,onClick:()=>_(`household`),children:[`Household`,(0,R.jsx)(`span`,{className:`share-scope-hint`,children:`everyone signed in`})]}),(0,R.jsxs)(`button`,{type:`button`,className:`share-scope`,"data-share-scope":`people`,"data-selected":o===`people`||void 0,"aria-pressed":o===`people`,disabled:m,onClick:()=>_(`people`),children:[`People`,(0,R.jsx)(`span`,{className:`share-scope-hint`,children:`named users`})]})]}),o!==`private`&&(0,R.jsxs)(`div`,{className:`share-level`,role:`group`,"aria-label":`access level`,children:[(0,R.jsx)(`button`,{type:`button`,className:`share-level-btn`,"data-share-level":`read`,"data-selected":c===`read`||void 0,"aria-pressed":c===`read`,disabled:m,onClick:()=>y(`read`),children:`Can view`}),(0,R.jsx)(`button`,{type:`button`,className:`share-level-btn`,"data-share-level":`write`,"data-selected":c===`write`||void 0,"aria-pressed":c===`write`,disabled:m,onClick:()=>y(`write`),children:`Can edit`})]}),o===`people`&&(0,R.jsxs)(`label`,{className:`share-field`,children:[`Usernames`,(0,R.jsx)(`input`,{"data-share-field":`users`,placeholder:`carol, dave`,value:u,onChange:e=>d(e.target.value)}),(0,R.jsx)(`button`,{type:`button`,className:`auth-submit`,disabled:m,onClick:b,children:`Share with people`})]}),o!==`private`&&c===`write`&&(0,R.jsx)(`p`,{className:`share-warning`,role:`alert`,children:`Others can ask the agent to act as you.`}),f!==null&&(0,R.jsx)(`p`,{className:`auth-error`,role:`alert`,children:f})]})}var Kg=5e3;function qg(e,t,n,r,i,a){if(a===void 0&&globalThis.EventSource===void 0)return()=>{};let o=a===void 0?new EventSource(`/v1/events`):a(`/v1/events`),s=()=>e();return o.addEventListener(`conversation.created`,s),o.addEventListener(`conversation.changed`,s),o.addEventListener(`job.changed`,t),o.addEventListener(`surface.changed`,e=>{try{let t=JSON.parse(e.data);if(typeof t==`object`&&t&&typeof t.conversationId==`number`&&typeof t.entryId==`string`&&typeof t.rev==`number`){i?.(t);return}}catch{}if(r!==void 0)try{let t=JSON.parse(e.data);typeof t==`object`&&t&&typeof t.slug==`string`&&typeof t.id==`string`&&typeof t.k==`string`&&typeof t.rev==`number`&&typeof t.treeRev==`number`&&r(t)}catch{}}),o.addEventListener(`hello`,e=>{try{let t=JSON.parse(e.data);typeof t==`object`&&t&&typeof t.streamId==`string`&&n(t.streamId)}catch{}}),()=>o.close()}function Jg(e,t){let n=t.busy,[r,i]=(0,v.useState)([]),[a,o]=(0,v.useState)(null),[s,c]=(0,v.useState)(void 0),l=(0,v.useRef)(void 0),u=(0,v.useRef)(new Set),d=(0,v.useCallback)(async()=>{try{let t=await e.listConversations();i(t.conversations),o(null)}catch(e){o(e instanceof Error?e.message:String(e))}},[e]),f=(0,v.useCallback)(async(e,n,r)=>{let i=l.current;return(await(t.fetchImpl??fetch)(r===void 0||Object.keys(r).length===0?`/v1/ext/${e}/surfaces/${n}`:`/v1/ext/${e}/surfaces/${n}?params=${encodeURIComponent(JSON.stringify(r))}`,{headers:i===void 0?{accept:`application/json`}:{accept:`application/json`,"x-sigrun-stream":i}})).json()},[t.fetchImpl]),p=(0,v.useCallback)((e,t,n)=>{let r=n===void 0?`{}`:Te(n);u.current.add(`${e}\u0001${t}\u0001${r}`)},[]),m=(0,v.useCallback)(e=>{let t=l.current;if(l.current=e,c(e),t!==void 0&&t!==e)for(let e of u.current){let[t,n,r]=e.split(``),i;if(r!==void 0&&r!==`{}`)try{let e=JSON.parse(r);typeof e==`object`&&e&&!Array.isArray(e)&&(i=e)}catch{}f(t??``,n??``,i)}},[f]);(0,v.useEffect)(()=>{d()},[d]),(0,v.useEffect)(()=>qg(()=>{d()},t.onJobChanged??(()=>{}),m,t.onSurfaceChanged,t.onChatChanged,t.createEventSource),[d,m,t.createEventSource,t.onJobChanged,t.onSurfaceChanged,t.onChatChanged]);let h=(0,v.useRef)(n);return(0,v.useEffect)(()=>{let e=h.current;if(h.current=n,!e||n)return;d();let t=setTimeout(()=>void d(),Kg);return()=>clearTimeout(t)},[n,d]),{rows:r,reload:d,error:a,streamId:s,fetchSurface:f,noteSurfaceVisible:p}}var Yg={fjord:{label:`Fjord`,defaultAccent:`baltic-amber`,dark:{bg:`#0b0f13`,surface:`#11171e`,surface2:`#18202a`,border:`#222d39`,text:`#dde6ee`,muted:`#8d9cab`,faint:`#5f6e7d`,ok:`#7fbf9a`,code:`rgba(255,255,255,.06)`},light:{bg:`#eef2f5`,surface:`#ffffff`,surface2:`#e3e9ef`,border:`#d3dbe3`,text:`#18212a`,muted:`#4d5b69`,faint:`#8593a1`,ok:`#2f8a5a`,code:`rgba(0,0,0,.05)`}},"iron-ember":{label:`Iron & Ember`,defaultAccent:`ember`,dark:{bg:`#0e0e0f`,surface:`#161618`,surface2:`#1e1e21`,border:`#2a2a2e`,text:`#e6e1da`,muted:`#9a958e`,faint:`#66625d`,ok:`#8fb58a`,code:`rgba(255,255,255,.06)`},light:{bg:`#f3f1ee`,surface:`#fbfaf8`,surface2:`#e9e6e1`,border:`#dbd7d1`,text:`#1c1b1a`,muted:`#55524d`,faint:`#8e8a84`,ok:`#3e7a3a`,code:`rgba(0,0,0,.05)`}},"polar-night":{label:`Polar Night`,defaultAccent:`aurora`,dark:{bg:`#090d16`,surface:`#0f1524`,surface2:`#161e31`,border:`#1f2942`,text:`#e2e8f3`,muted:`#8e9ab2`,faint:`#5d6984`,ok:`#5fd4a8`,code:`rgba(255,255,255,.06)`},light:{bg:`#f0f3f9`,surface:`#ffffff`,surface2:`#e4e9f3`,border:`#d2d9e6`,text:`#141b2b`,muted:`#4b5670`,faint:`#8691a8`,ok:`#13866a`,code:`rgba(0,0,0,.05)`}},"birch-moss":{label:`Birch & Moss`,defaultAccent:`lichen`,dark:{bg:`#0d100d`,surface:`#141a15`,surface2:`#1b221c`,border:`#263027`,text:`#e8e6dc`,muted:`#9ba091`,faint:`#666d60`,ok:`#9cc48a`,code:`rgba(255,255,255,.06)`},light:{bg:`#f3f2ea`,surface:`#fbfbf6`,surface2:`#e7e7dc`,border:`#d8d8ca`,text:`#1b1e18`,muted:`#525849`,faint:`#8b9080`,ok:`#4a7a35`,code:`rgba(0,0,0,.05)`}}},Xg={"baltic-amber":{label:`Baltic Amber`,dark:`#d6a24a`,light:`#a8741f`},ember:{label:`Ember`,dark:`#d9773a`,light:`#b8571c`},lingonberry:{label:`Lingonberry`,dark:`#d0606a`,light:`#a83440`},glacier:{label:`Glacier`,dark:`#8fb8d0`,light:`#2f6f93`},aurora:{label:`Aurora`,dark:`#5fd4a8`,light:`#13866a`},lichen:{label:`Lichen`,dark:`#b9c46a`,light:`#6f7a1f`},heather:{label:`Heather`,dark:`#a993c9`,light:`#6c4f99`}},Zg=[`fjord`,`iron-ember`,`polar-night`,`birch-moss`],Qg=[`baltic-amber`,`ember`,`lingonberry`,`glacier`,`aurora`,`lichen`,`heather`],$g=`polar-night`,e_=`baltic-amber`;function t_(e){return typeof e==`string`&&Object.prototype.hasOwnProperty.call(Yg,e)}function n_(e){return typeof e==`string`&&Object.prototype.hasOwnProperty.call(Xg,e)}function r_(e){let{client:t}=e,[n,r]=(0,v.useState)(null),[i,a]=(0,v.useState)([]),[o,s]=(0,v.useState)(null),[c,l]=(0,v.useState)(null);(0,v.useEffect)(()=>{let e=!1;return Promise.all([t.accounts(),t.providers()]).then(([t,n])=>{e||(r(t.accounts),a(n.providers))}).catch(t=>{e||s(Ug(t))}),()=>{e=!0}},[t]);async function u(e){l(`${e.provider}\u0000${e.subject}`),s(null);try{await t.removeAccount(e.provider,e.subject),r(t=>t?.filter(t=>t.provider!==e.provider||t.subject!==e.subject)??null)}catch(e){s(Ug(e))}finally{l(null)}}return n===null?(0,R.jsx)(`p`,{className:`settings-note`,role:o===null?void 0:`alert`,children:o??`loading account links…`}):(0,R.jsxs)(`div`,{className:`settings-body`,"data-settings-section":`accounts`,children:[(0,R.jsx)(`p`,{className:`settings-note`,children:`External identities linked to your sigrun account.`}),o!==null&&(0,R.jsx)(`p`,{className:`settings-note`,role:`alert`,children:o}),n.length===0&&(0,R.jsx)(`p`,{className:`settings-note`,children:`No account links.`}),n.map(e=>(0,R.jsxs)(`div`,{className:`settings-ext-row`,children:[(0,R.jsxs)(`span`,{className:`settings-ext-key`,children:[i.find(t=>t.provider===e.provider)?.label??e.provider,` · `,e.subject]}),(0,R.jsx)(`button`,{type:`button`,className:`account-remove`,disabled:c!==null,onClick:()=>void u(e),children:`Remove`})]},`${e.provider}\u0000${e.subject}`)),i.length>0&&(0,R.jsxs)(`div`,{className:`settings-field`,children:[(0,R.jsx)(`span`,{className:`settings-label`,children:`Connect an account`}),i.map(e=>(0,R.jsx)(`a`,{className:`account-connect`,href:`/v1/auth/login/${encodeURIComponent(e.provider)}?link=1&return=%2Fsettings%3Fsection%3Daccounts`,children:`Connect`},e.provider))]})]})}function i_(e){let{client:t}=e,[n,r]=(0,v.useState)({status:`loading`}),[i,a]=(0,v.useState)({});(0,v.useEffect)(()=>{let e=!1;return t.listProviders().then(t=>{e||r({status:`ready`,providers:t.providers})}).catch(t=>{e||r({status:`error`,message:t instanceof Error?t.message:String(t)})}),()=>{e=!0}},[t]);let o=e=>{r(t=>t.status===`ready`?{status:`ready`,providers:t.providers.map(t=>t.provider===e.provider?e:t)}:t)},s=(e,t)=>{a(n=>({...n,[e]:{key:``,...n[e],...t}}))},c=async e=>{let n=i[e];if(n!==void 0&&n.key!==``)try{o(await t.putProviderCredential(e,n.key)),s(e,{key:``,note:{kind:`ok`,message:`saved`}})}catch(t){s(e,{note:{kind:`error`,message:t instanceof Error?t.message:String(t)}})}},l=async e=>{try{o(await t.deleteProviderCredential(e)),s(e,{note:{kind:`ok`,message:`cleared`}})}catch(t){s(e,{note:{kind:`error`,message:t instanceof Error?t.message:String(t)}})}},u=async e=>{try{o(await t.refreshProvider(e))}catch(t){s(e,{note:{kind:`error`,message:t instanceof Error?t.message:String(t)}})}};return n.status===`loading`?(0,R.jsx)(`p`,{className:`settings-note`,children:`loading providers…`}):n.status===`error`?(0,R.jsx)(`p`,{className:`settings-note`,role:`alert`,children:n.message}):n.providers.length===0?(0,R.jsx)(`div`,{className:`settings-body`,children:(0,R.jsx)(`p`,{className:`settings-note`,children:`no providers are loaded`})}):(0,R.jsxs)(`div`,{className:`settings-body settings-provider-list`,children:[(0,R.jsx)(`p`,{className:`settings-note`,children:`readiness and credentials per provider — the key field is write-only (the server never returns it); saving applies immediately, no restart`}),n.providers.map(e=>{let t=i[e.provider]??{key:``};return(0,R.jsxs)(`fieldset`,{className:`settings-provider`,"data-provider":e.provider,children:[(0,R.jsxs)(`legend`,{className:`settings-provider-name`,children:[e.provider,(0,R.jsx)(`span`,{className:`settings-provider-status`,"data-status":e.status,children:e.status}),(0,R.jsxs)(`span`,{className:`settings-provider-meta`,children:[e.models,` model`,e.models===1?``:`s`]})]}),e.detail!==void 0&&(0,R.jsx)(`p`,{className:`settings-note`,children:e.detail}),(0,R.jsxs)(`div`,{className:`settings-provider-row`,children:[(0,R.jsx)(`input`,{type:`password`,className:`settings-provider-key`,placeholder:`api key`,value:t.key,autoComplete:`off`,onChange:t=>s(e.provider,{key:t.target.value})}),(0,R.jsx)(`button`,{type:`button`,className:`settings-provider-save`,disabled:t.key===``,onClick:()=>void c(e.provider),children:`Save`}),(0,R.jsx)(`button`,{type:`button`,className:`settings-provider-clear`,onClick:()=>void l(e.provider),children:`Clear`}),(0,R.jsx)(`button`,{type:`button`,className:`settings-provider-refresh`,onClick:()=>void u(e.provider),children:`Refresh`}),t.note!==void 0&&(0,R.jsx)(`span`,{className:`settings-note`,role:t.note.kind===`ok`?`status`:`alert`,children:t.note.message})]})]},e.provider)})]})}function a_(e){let{client:t}=e,[n,r]=(0,v.useState)(null),[i,a]=(0,v.useState)(null),[o,s]=(0,v.useState)(``),[c,l]=(0,v.useState)(!1),[u,d]=(0,v.useState)(null),[f,p]=(0,v.useState)(null),[m,h]=(0,v.useState)(!1),g=(0,v.useRef)(null);(0,v.useEffect)(()=>()=>{g.current!==null&&clearTimeout(g.current)},[]),(0,v.useEffect)(()=>{let e=!1;return t.listTokens().then(t=>{e||r(t)}).catch(t=>{e||a(Ug(t))}),()=>{e=!0}},[t]);async function _(){if(!(o.trim()===``||c)){l(!0),a(null);try{let e=await t.createToken(o.trim());d({id:e.record.id,token:e.token,name:e.record.name}),r(t=>t===null?t:[...t,e.record]),s(``)}catch(e){a(Ug(e))}finally{l(!1)}}}async function y(e){if(!(f===null||c)){l(!0),a(null);try{await t.revokeToken(e),r(t=>t===null?t:t.filter(t=>t.id!==e)),d(t=>t?.id===e?null:t),p(null)}catch(e){a(Ug(e))}finally{l(!1)}}}function b(){u!==null&&(nd(u.token),h(!0),g.current!==null&&clearTimeout(g.current),g.current=setTimeout(()=>h(!1),1500))}if(n===null)return(0,R.jsx)(`p`,{className:`settings-note`,role:i===null?void 0:`alert`,children:i??`loading tokens…`});let x=n.filter(e=>e.kind!==`session`),S=globalThis.location?.origin??``,C=S===``?`<your sigrun URL>`:S;return(0,R.jsxs)(`div`,{className:`settings-body`,"data-settings-section":`tokens`,children:[(0,R.jsx)(`p`,{className:`settings-note`,children:`Bearer tokens for the CLI, scripts, and sign-in. A token is shown once at creation — the server stores only its digest.`}),i!==null&&(0,R.jsx)(`p`,{className:`settings-note`,role:`alert`,children:i}),u!==null&&(0,R.jsxs)(`fieldset`,{className:`settings-field token-reveal`,children:[(0,R.jsxs)(`legend`,{className:`settings-label`,children:[`Token created: `,u.name]}),(0,R.jsx)(`p`,{className:`settings-note`,children:`Copy it now — it is never shown again.`}),(0,R.jsx)(`code`,{className:`token-secret`,children:u.token}),(0,R.jsxs)(`div`,{className:`settings-ext-row`,children:[(0,R.jsx)(`button`,{type:`button`,className:`token-copy`,onClick:b,children:m?`Copied`:`Copy`}),(0,R.jsx)(`button`,{type:`button`,className:`token-dismiss`,onClick:()=>d(null),children:`Done`})]}),(0,R.jsxs)(`label`,{className:`settings-field`,children:[(0,R.jsx)(`span`,{className:`settings-label`,children:`CLI`}),(0,R.jsx)(`code`,{className:`token-snippet`,children:`SIGRUN_TOKEN=${u.token} sigrun attach --server ${C}`})]}),(0,R.jsxs)(`label`,{className:`settings-field`,children:[(0,R.jsx)(`span`,{className:`settings-label`,children:`tui.json — $SIGRUN_CONFIG_DIR/tui.json (default ~/.config/sigrun/tui.json)`}),(0,R.jsx)(`code`,{className:`token-snippet`,children:`{"server": "${C}", "token": "${u.token}"}`})]})]}),x.length===0&&(0,R.jsx)(`p`,{className:`settings-note`,children:`No API tokens.`}),x.map(e=>(0,R.jsx)(`div`,{className:`settings-ext-row`,children:f?.id===e.id?(0,R.jsxs)(R.Fragment,{children:[(0,R.jsxs)(`span`,{className:`settings-ext-key`,children:[`Revoke `,e.name,`?`]}),(0,R.jsx)(`button`,{type:`button`,className:`token-revoke-confirm`,disabled:c,onClick:()=>void y(e.id),children:`Confirm revoke`}),(0,R.jsx)(`button`,{type:`button`,className:`token-revoke-cancel`,disabled:c,onClick:()=>p(null),children:`Cancel`})]}):(0,R.jsxs)(R.Fragment,{children:[(0,R.jsx)(`span`,{className:`settings-ext-key`,children:e.name}),(0,R.jsx)(`button`,{type:`button`,className:`token-revoke`,disabled:c,onClick:()=>p({id:e.id,name:e.name}),children:`Revoke`})]})},e.id)),(0,R.jsxs)(`div`,{className:`settings-field`,children:[(0,R.jsx)(`span`,{className:`settings-label`,children:`Create a token`}),(0,R.jsxs)(`div`,{className:`settings-ext-row`,children:[(0,R.jsx)(`input`,{type:`text`,className:`token-name-input`,"aria-label":`Token name`,placeholder:`name (e.g. laptop, ci)`,value:o,onChange:e=>s(e.target.value)}),(0,R.jsx)(`button`,{type:`button`,className:`token-create`,disabled:c||o.trim()===``,onClick:()=>void _(),children:`Create token`})]})]})]})}var o_=`sigrun.prefs`,s_={enterToSend:!1,showThinking:!0},c_=(()=>{let e=new Map;return{getItem:t=>e.get(t)??null,setItem:(t,n)=>{e.set(t,n)}}})();function l_(){return globalThis.localStorage??c_}function u_(e){if(e===null)return{};let t;try{t=JSON.parse(e)}catch{return{}}if(typeof t!=`object`||!t||Array.isArray(t))return{};let n=t,r={};for(let e of Object.keys(s_))typeof n[e]==`boolean`&&(r[e]=n[e]);return r}function d_(e){let t=e?.storage??l_(),[n,r]=(0,v.useState)(()=>u_(t.getItem(o_)));return{prefs:{...s_,...n},setPref(e,n){r(r=>{let i={...r,[e]:n};return t.setItem(o_,JSON.stringify(i)),i})}}}function f_(e,t){let n=t.trim().toLowerCase();return n===``?[]:e.filter(e=>e.label.toLowerCase().includes(n)||(e.help??``).toLowerCase().includes(n)||(e.key??``).toLowerCase().includes(n))}function p_(e,t){return f_(e,t)}function m_(e,t){return e.filter(e=>!(e.id===`providers`&&t===!1||e.scope===`user`&&e.admin===!0&&t===!1))}function h_(e){let{client:t,onClose:n,onSection:r,prefsState:i,theme:a,admin:o,onRestart:s,section:c}=e,[l,u]=(0,v.useState)({status:`loading`}),[d,f]=(0,v.useState)(null),[p,m]=(0,v.useState)(null),[h,g]=(0,v.useState)(null),[_,y]=(0,v.useState)(``),[b,x]=(0,v.useState)(null),S=(0,v.useRef)({}),C=(0,v.useRef)(null);(0,v.useEffect)(()=>{let e=!1;return t.getMeta().then(t=>{e||f(t)}).catch(()=>{}),t.listSettingsSections().then(t=>{e||u({status:`ready`,sections:t.sections,index:t.index})}).catch(t=>{e||u({status:`error`,message:t instanceof Error?t.message:String(t)})}),t.listExtensions().then(t=>{e||g(t.extensions)}).catch(()=>{e||g([])}),()=>{e=!0}},[t]);let w=(0,v.useMemo)(()=>l.status===`ready`?new Set(l.sections.filter(e=>e.slug!==`core`).map(e=>e.slug)):new Set,[l]);(0,v.useEffect)(()=>{if(l.status!==`ready`)return;let e=m_(l.sections,o);if(c!==void 0){let t=e.find(e=>e.slug===`core`&&e.id===c);if(t!==void 0){m({kind:`section`,entry:t});return}let n=e.find(e=>e.id===c);if(n!==void 0){m({kind:`section`,entry:n});return}let r=h!==null&&!w.has(c)?h.find(e=>e.name===c):void 0;if(r!==void 0){m({kind:`extension`,slug:r.name});return}}let t=e.find(e=>e.slug===`core`&&e.id===`general`);t!==void 0&&m({kind:`section`,entry:t})},[l,c,o,h,w]);let T=(0,v.useMemo)(()=>l.status===`ready`?p_(l.index,_):[],[l,_]),E=(0,v.useCallback)(async e=>{let t=l.status===`ready`?l.sections.find(t=>t.slug===e.slug&&t.id===e.sectionId):void 0;if(t!==void 0&&(y(``),r(t.id),e.key!==void 0)){let t=e.key;for(let e=0;e<20;e++){await new Promise(e=>setTimeout(e,50));let e=C.current?.querySelector(`[data-name=${JSON.stringify(t)}]`),n=e?.querySelector(`input, textarea, select, button, [tabindex]`)??e;if(n!=null){n.focus();return}}}},[l,r]),D=b?.pendingRestart??[],ee=b?.supervised===!0&&o!==!1&&s!==void 0,te=(0,v.useMemo)(()=>l.status===`ready`?m_(l.sections,o):[],[l,o]);return(0,R.jsx)(`div`,{className:`settings-page`,children:(0,R.jsxs)(`div`,{className:`settings-panel`,children:[(0,R.jsxs)(`header`,{className:`settings-head`,children:[(0,R.jsx)(`span`,{className:`settings-title`,children:`Settings`}),(0,R.jsx)(`input`,{type:`search`,className:`settings-search`,placeholder:`Search settings`,"aria-label":`search settings`,value:_,onChange:e=>y(e.target.value)}),(0,R.jsx)(`span`,{className:`spacer`}),(0,R.jsx)(`button`,{type:`button`,className:`settings-close`,title:`close settings`,onClick:n,children:`✕`})]}),D.length>0&&(0,R.jsxs)(`div`,{className:`settings-restart-callout`,role:`status`,children:[(0,R.jsxs)(`p`,{className:`settings-restart-text`,children:[`Restart sigrun to apply: `,D.join(`, `)]}),ee&&(0,R.jsx)(`button`,{type:`button`,className:`settings-restart`,onClick:()=>void s(),children:`Restart`})]}),l.status===`loading`&&(0,R.jsx)(`p`,{className:`settings-note`,children:`loading settings…`}),l.status===`error`&&(0,R.jsx)(`p`,{className:`settings-note`,role:`alert`,children:l.message}),l.status===`ready`&&(0,R.jsxs)(`div`,{className:`settings-layout`,children:[(0,R.jsxs)(`nav`,{className:`settings-nav`,"aria-label":`settings sections`,children:[te.filter(e=>e.scope!==`user`).map(e=>(0,R.jsx)(`button`,{type:`button`,className:`settings-nav-item`,"data-active":p?.kind===`section`&&p.entry.slug===e.slug&&p.entry.id===e.id?``:void 0,onClick:()=>r(e.id),children:e.title},`${e.slug}/${e.id}`)),te.some(e=>e.scope===`user`)&&(0,R.jsxs)(`div`,{className:`settings-nav-group`,role:`group`,"aria-label":`My settings`,children:[(0,R.jsx)(`div`,{className:`settings-nav-heading`,children:`My settings`}),te.filter(e=>e.scope===`user`).map(e=>(0,R.jsx)(`button`,{type:`button`,className:`settings-nav-item`,"data-active":p?.kind===`section`&&p.entry.slug===e.slug&&p.entry.id===e.id?``:void 0,onClick:()=>r(e.id),children:e.title},`${e.slug}/${e.id}`))]}),(0,R.jsx)(w_,{extensions:h,open:p,coveredSlugs:w,onOpen:r})]}),(0,R.jsx)(`div`,{className:`settings-section`,ref:C,children:p===null?(0,R.jsx)(`p`,{className:`settings-note`,children:`select a section`}):p.kind===`extension`?(0,R.jsx)(T_,{client:t,slug:p.slug}):(0,R.jsx)(g_,{client:t,entry:p.entry,prefsState:i,theme:a,meta:d,onCoreMeta:x,valuesRef:S},`${p.entry.slug}/${p.entry.id}`)})]}),_.trim()!==``&&T.length>0&&(0,R.jsx)(`div`,{className:`settings-search-results`,role:`listbox`,children:T.slice(0,20).map((e,t)=>(0,R.jsxs)(`button`,{type:`button`,className:`settings-search-hit`,role:`option`,"aria-selected":`false`,onClick:()=>void E(e),children:[(0,R.jsx)(`span`,{className:`settings-search-hit-label`,children:e.label}),(0,R.jsxs)(`span`,{className:`settings-search-hit-path`,children:[e.slug===`core`?``:`${e.slug} · `,e.sectionId]})]},`${e.slug}/${e.sectionId}/${e.key??e.label}/${t}`))})]})})}function g_(e){let{entry:t,client:n,prefsState:r,theme:i,meta:a,onCoreMeta:o}=e;return t.slug===`core`&&t.id===`interface`?(0,R.jsx)(x_,{prefsState:r,theme:i}):t.slug===`core`&&t.id===`providers`?(0,R.jsx)(i_,{client:n}):t.slug===`core`&&t.id===`extensions`?(0,R.jsx)(E_,{client:n}):t.slug===`core`&&t.id===`accounts`?(0,R.jsx)(r_,{client:n}):t.slug===`core`&&t.id===`tokens`?(0,R.jsx)(a_,{client:n}):(0,R.jsx)(__,{client:n,entry:t,meta:t.slug===`core`&&t.id===`general`?a:null,onCoreMeta:t.slug===`core`?o:void 0,valuesRef:e.valuesRef})}function __(e){let{entry:t,meta:n,client:r}=e,i=(0,v.useMemo)(()=>og({slug:t.slug,id:t.id,fetch:r.rawFetch}),[t.slug,t.id,r]),{onCoreMeta:a,valuesRef:o}=e,s=(0,v.useCallback)(e=>{if(o.current[`${t.slug}/${t.id}`]=typeof e.settings==`object`&&e.settings!==null&&!Array.isArray(e.settings)?e.settings:{},a!==void 0){let t=e.meta;if(typeof t==`object`&&t&&!Array.isArray(t)&&Array.isArray(t.pendingRestart)){let e=t;a({pendingRestart:e.pendingRestart.filter(e=>typeof e==`string`),supervised:e.supervised===!0})}}},[t.slug,t.id,a,o]);return(0,R.jsxs)(`div`,{className:`settings-body`,"data-settings-section":t.id,children:[t.slug===`core`&&t.id===`general`&&(0,R.jsxs)(`p`,{className:`settings-version`,children:[`sigrun `,n?.version===void 0?``:`v${n.version}`,n?.harnessVersion===void 0?``:` · pi-durable v${n.harnessVersion}`]}),(0,R.jsx)(v_,{transport:i,onData:s}),(0,R.jsx)(zh,{transport:i})]})}function v_(e){let{transport:t,onData:n}=e;return(0,v.useEffect)(()=>{let e=!1,r=()=>{t.fetchData().then(t=>{!e&&t.data!==void 0&&n(t.data)}).catch(()=>{})};r();let i=setInterval(r,1500);return()=>{e=!0,clearInterval(i)}},[t,n]),null}var y_=[{key:`enterToSend`,label:`Enter sends the prompt`,note:`off: Ctrl+Enter submits (Enter inserts a newline); on: Enter submits and Shift+Enter inserts a newline. Ctrl+Enter submits either way.`},{key:`showThinking`,label:`Show thinking blocks`,note:`Show thinking text inside activity details`}],b_=[{value:`system`,label:`System`},{value:`dark`,label:`Dark`},{value:`light`,label:`Light`}];function x_(e){let{prefsState:t,theme:n}=e;return(0,R.jsxs)(`div`,{className:`settings-body`,children:[(0,R.jsxs)(`fieldset`,{className:`settings-field`,children:[(0,R.jsx)(`legend`,{className:`settings-label`,children:`Mode`}),(0,R.jsx)(`div`,{className:`settings-mode-row`,role:`group`,"aria-label":`mode`,children:b_.map(e=>(0,R.jsx)(`button`,{type:`button`,className:`settings-mode`,"data-mode-option":e.value,"aria-pressed":n.mode===e.value,onClick:()=>n.setMode(e.value),children:e.label},e.value))})]}),(0,R.jsxs)(`fieldset`,{className:`settings-field`,children:[(0,R.jsx)(`legend`,{className:`settings-label`,children:`Palette`}),(0,R.jsx)(`div`,{className:`settings-palettes`,role:`group`,"aria-label":`palette`,children:Zg.map(e=>{let t=Yg[e],r=t[n.resolved];return(0,R.jsxs)(`button`,{type:`button`,className:`settings-palette`,"data-palette-option":e,"aria-pressed":n.palette===e,title:t.label,onClick:()=>n.setPalette(e),style:{background:r.bg},children:[(0,R.jsx)(`span`,{className:`settings-swatch-dot`,"aria-hidden":`true`,style:{background:r.text}}),(0,R.jsx)(`span`,{className:`settings-swatch-dot`,"aria-hidden":`true`,style:{background:Xg[t.defaultAccent][n.resolved]}})]},e)})})]}),(0,R.jsxs)(`fieldset`,{className:`settings-field`,children:[(0,R.jsx)(`legend`,{className:`settings-label`,children:`Accent`}),(0,R.jsx)(`div`,{className:`settings-accents`,role:`group`,"aria-label":`accent`,children:Qg.map(e=>(0,R.jsx)(`button`,{type:`button`,className:`settings-accent`,"data-accent-option":e,"aria-pressed":n.accent===e,title:Xg[e].label,onClick:()=>n.setAccent(e),style:{background:Xg[e][n.resolved]}},e))})]}),y_.map(e=>(0,R.jsxs)(`label`,{className:`settings-field settings-checkbox`,children:[(0,R.jsx)(`input`,{type:`checkbox`,className:`settings-pref-${e.key}`,checked:t.prefs[e.key],onChange:n=>t.setPref(e.key,n.target.checked)}),(0,R.jsx)(`span`,{className:`settings-label`,children:e.label}),(0,R.jsx)(`p`,{className:`settings-note`,children:e.note})]},e.key)),(0,R.jsx)(`p`,{className:`settings-note`,children:`interface preferences are per-browser (stored locally — never sent to the server)`})]})}function S_(e){return Object.keys(e).length===0?``:JSON.stringify(e,null,2)}function C_(e){let t=e.trim();if(t===``)return{ok:!0,value:{}};try{let e=JSON.parse(t);return typeof e!=`object`||!e||Array.isArray(e)?{ok:!1,message:`settings must be a JSON object`}:{ok:!0,value:e}}catch(e){return{ok:!1,message:`invalid JSON: ${e instanceof Error?e.message:String(e)}`}}}function w_(e){let{extensions:t,coveredSlugs:n,onOpen:r,open:i}=e;if(t===null)return null;let a=t.filter(e=>!n.has(e.name));return a.length===0?null:(0,R.jsx)(R.Fragment,{children:a.map(e=>(0,R.jsxs)(`button`,{type:`button`,className:`settings-nav-item settings-nav-extension`,"data-ext":e.name,"data-active":i?.kind===`extension`&&i.slug===e.name?``:void 0,onClick:()=>r(e.name),children:[e.name,` (advanced)`]},e.name))})}function T_(e){let{client:t,slug:n,status:r,version:i}=e,[a,o]=(0,v.useState)(null),[s,c]=(0,v.useState)(null);(0,v.useEffect)(()=>{let e=!1;return o(null),c(null),Promise.all([t.getExtensionSettings(n),t.listExtensionSecrets(n)]).then(([t,n])=>{e||o({settingsText:S_(t.settings),secrets:n.secrets,secretValues:{},newKey:``,newValue:``})}).catch(t=>{e||c(t instanceof Error?t.message:String(t))}),()=>{e=!0}},[t,n]);let l=e=>{o(t=>t===null?t:{...t,...e})},u=async()=>{if(a===null)return;let e=C_(a.settingsText);if(!e.ok){l({note:{kind:`error`,message:e.message}});return}try{await t.putExtensionSettings(n,e.value),l({note:{kind:`ok`,message:`saved`}})}catch(e){l({note:{kind:`error`,message:e instanceof Error?e.message:String(e)}})}},d=async(e,r)=>{if(e!==``&&r!==``&&a!==null)try{let{secrets:i}=await t.putExtensionSecret(n,e,r);o({...a,secrets:i,secretValues:{...a.secretValues,[e]:``},newKey:``,newValue:``,note:{kind:`ok`,message:`secret ${e} set`}})}catch(e){l({note:{kind:`error`,message:e instanceof Error?e.message:String(e)}})}},f=async e=>{try{let{secrets:r}=await t.deleteExtensionSecret(n,e);l({secrets:r,note:{kind:`ok`,message:`secret ${e} deleted`}})}catch(e){l({note:{kind:`error`,message:e instanceof Error?e.message:String(e)}})}};return s===null?a===null?(0,R.jsx)(`p`,{className:`settings-note`,children:`loading…`}):(0,R.jsxs)(`div`,{className:`settings-body settings-ext-list`,children:[(0,R.jsx)(`p`,{className:`settings-note`,children:`settings are the extension's own JSON (read at factory time → applies at restart); secrets list keys only — values are write-only and never displayed`}),(0,R.jsxs)(`fieldset`,{className:`settings-ext`,"data-ext":n,children:[(0,R.jsxs)(`legend`,{className:`settings-ext-name`,children:[n,(0,R.jsxs)(`span`,{className:`settings-ext-meta`,children:[r??``,i===void 0?``:` · v${i}`]})]}),(0,R.jsxs)(`label`,{className:`settings-field`,children:[(0,R.jsx)(`span`,{className:`settings-label`,children:`Settings (raw JSON)`}),(0,R.jsx)(`textarea`,{className:`settings-ext-settings`,rows:4,spellCheck:!1,placeholder:`{}`,value:a.settingsText,onChange:e=>l({settingsText:e.target.value})}),(0,R.jsxs)(`div`,{className:`settings-ext-row`,children:[(0,R.jsx)(`button`,{type:`button`,className:`settings-ext-save`,onClick:()=>void u(),children:`Save settings`}),a.note!==void 0&&(0,R.jsx)(`span`,{className:`settings-note`,role:a.note.kind===`ok`?`status`:`alert`,children:a.note.message})]})]}),(0,R.jsxs)(`div`,{className:`settings-field`,children:[(0,R.jsx)(`span`,{className:`settings-label`,children:`Secrets`}),a.secrets.length===0&&(0,R.jsx)(`p`,{className:`settings-note`,children:`no secrets set`}),a.secrets.map(e=>(0,R.jsxs)(`div`,{className:`settings-ext-row`,children:[(0,R.jsxs)(`span`,{className:`settings-ext-key`,children:[e.key,` `,(0,R.jsxs)(`span`,{className:`settings-ext-source`,children:[`(`,e.source,`)`]})]}),(0,R.jsx)(`input`,{type:`password`,className:`settings-ext-secret-value`,"data-secret-key":e.key,placeholder:`new value`,value:a.secretValues[e.key]??``,onChange:t=>l({secretValues:{...a.secretValues,[e.key]:t.target.value}})}),(0,R.jsx)(`button`,{type:`button`,className:`settings-ext-secret-set`,"data-secret-key":e.key,onClick:()=>void d(e.key,a.secretValues[e.key]??``),children:`Set`}),(0,R.jsx)(`button`,{type:`button`,className:`settings-ext-secret-delete`,"data-secret-key":e.key,onClick:()=>void f(e.key),children:`Delete`})]},e.key)),(0,R.jsxs)(`div`,{className:`settings-ext-row`,children:[(0,R.jsx)(`input`,{type:`text`,className:`settings-ext-new-key`,placeholder:`new key`,value:a.newKey,onChange:e=>l({newKey:e.target.value})}),(0,R.jsx)(`input`,{type:`password`,className:`settings-ext-new-value`,placeholder:`value`,value:a.newValue,onChange:e=>l({newValue:e.target.value})}),(0,R.jsx)(`button`,{type:`button`,className:`settings-ext-secret-add`,onClick:()=>void d(a.newKey,a.newValue),children:`Set`})]})]})]})]}):(0,R.jsx)(`p`,{className:`settings-note`,role:`alert`,children:s})}function E_(e){let{client:t}=e,[n,r]=(0,v.useState)(null),[i,a]=(0,v.useState)(null);return(0,v.useEffect)(()=>{let e=!1;return t.listExtensions().then(t=>{e||r(t.extensions)}).catch(t=>{e||a(t instanceof Error?t.message:String(t))}),()=>{e=!0}},[t]),i===null?n===null?(0,R.jsx)(`p`,{className:`settings-note`,children:`loading extensions…`}):n.length===0?(0,R.jsx)(`div`,{className:`settings-body`,children:(0,R.jsx)(`p`,{className:`settings-note`,children:`no extensions are configured`})}):(0,R.jsx)(`div`,{className:`settings-body`,children:n.map(e=>(0,R.jsx)(T_,{client:t,slug:e.name,status:e.status,version:e.version},e.name))}):(0,R.jsx)(`p`,{className:`settings-note`,role:`alert`,children:i})}var D_=`sigrun.theme`,O_=`sigrun.palette`,k_=`sigrun.accent`,A_=(()=>{let e=new Map;return{getItem:t=>e.get(t)??null,setItem:(t,n)=>{e.set(t,n)}}})();function j_(){return globalThis.localStorage??A_}function M_(){let e=globalThis.document?.documentElement;return e===void 0?null:{dataset:e.dataset,setProperty:(t,n)=>{e.style.setProperty(t,n)}}}function N_(){return globalThis.matchMedia??null}function P_(e){return e===`dark`||e===`light`?e:`system`}function F_(e){let t=e.getItem(k_);if(t===`amber`){let t=`baltic-amber`;return e.setItem(k_,t),t}return n_(t)?t:(e.setItem(k_,e_),e_)}function I_(e){let t=e.getItem(O_);return t_(t)?t:(e.setItem(O_,$g),$g)}var L_={bg:`--bg`,surface:`--surface`,surface2:`--surface-2`,border:`--border`,text:`--text`,muted:`--muted`,faint:`--faint`,ok:`--ok`,code:`--code`};function R_(e,t){let n=/^#([0-9a-f]{3}|[0-9a-f]{6})$/i.exec(e);if(n===null)return`color-mix(in srgb, ${e} ${Math.round(t*100)}%, transparent)`;let r=n[1].length===3?n[1].split(``).map(e=>e+e).join(``):n[1];return`rgba(${Number.parseInt(r.slice(0,2),16)}, ${Number.parseInt(r.slice(2,4),16)}, ${Number.parseInt(r.slice(4,6),16)}, ${t})`}function z_(e){let t=e?.storage??j_(),n=e?.root===void 0?M_():e.root,r=e?.matchMedia===void 0?N_():e.matchMedia,[i,a]=(0,v.useState)(()=>P_(t.getItem(D_))),[o,s]=(0,v.useState)(()=>I_(t)),[c,l]=(0,v.useState)(()=>F_(t)),[u,d]=(0,v.useState)(()=>r?.(`(prefers-color-scheme: dark)`)?.matches??!0);(0,v.useEffect)(()=>{let e=r?.(`(prefers-color-scheme: dark)`);if(e==null)return;let t=()=>d(e.matches);return e.addEventListener(`change`,t),()=>e.removeEventListener(`change`,t)},[r]);let f=i===`system`?u?`dark`:`light`:i;return(0,v.useEffect)(()=>{if(n===null)return;let e=Yg[o][f];for(let[t,r]of Object.entries(L_))n.setProperty(r,e[t]);let t=Xg[c][f];n.setProperty(`--accent`,t),n.setProperty(`--accent-bg`,R_(t,f===`dark`?.14:.16)),n.dataset.mode=f,n.dataset.palette=o,n.dataset.accent=c},[n,f,o,c]),{mode:i,resolved:f,palette:o,accent:c,setMode(e){t.setItem(D_,e),a(e)},setPalette(e){t.setItem(O_,e),s(e)},setAccent(e){t.setItem(k_,e),l(e)}}}function B_(e,t){let n=e.entries;if(t.entries!==void 0){let r=new Set(t.entries.remove??[]);n=[...e.entries.filter(e=>!r.has(e.id)),...t.entries.append??[]]}let r=e.docs;if(t.docs!==void 0){let n=new Set(t.docs.unset??[]),i={};for(let[t,r]of Object.entries(e.docs))n.has(t)||(i[t]=r);for(let[e,n]of Object.entries(t.docs.set??{}))i[e]=n;r=i}return{...e,entries:n,docs:r,conversation:t.conversation??e.conversation,steer:t.steer??e.steer}}var V_=250,H_=4e3,U_=e=>new EventSource(e);function W_(e){let t;try{t=JSON.parse(e)}catch{return}if(typeof t==`object`&&t&&!Array.isArray(t))return t}function G_(e){let t;try{t=JSON.parse(e)}catch{return}if(typeof t==`object`&&t&&!Array.isArray(t))return t}function K_(e,t,n=``,r={}){let i=r.createEventSource??U_,a=`${n}/v1/conversations/${e}/stream`,o=!1,s=0,c,l,u;function d(){if(o)return;let e=i(a);l=e;let n=!1;e.addEventListener(`open`,()=>{o||(s=0,t.onOpen?.())}),e.addEventListener(`snapshot`,e=>{if(o)return;let n=W_(e.data);if(n===void 0){t.onError?.(`malformed snapshot frame (not a view object)`);return}u=n,t.onSnapshot?.(n)}),e.addEventListener(`delta`,e=>{if(o)return;if(u===void 0){t.onError?.(`malformed delta frame (arrived before any snapshot)`);return}let n=G_(e.data);if(n===void 0){t.onError?.(`malformed delta frame (not a delta object)`);return}u=B_(u,n),t.onView?.(u)}),e.addEventListener(`error`,()=>{if(o||n)return;n=!0,t.onError?.(`conversation stream connection error`),e.close(),l===e&&(l=void 0),s+=1;let r=Math.min(V_*2**(s-1),H_);c=setTimeout(()=>{c=void 0,d()},r)})}return d(),{close(){o||(o=!0,c!==void 0&&(clearTimeout(c),c=void 0),l?.close(),l=void 0)}}}var q_={view:null,status:`idle`,frames:0,error:null};function J_(e,t={}){let{baseUrl:n,createEventSource:r}=t,[i,a]=(0,v.useState)(q_);return(0,v.useEffect)(()=>{if(e===null){a(q_);return}a({view:null,status:`connecting`,frames:0,error:null});let t=K_(e,{onSnapshot:e=>a(t=>({view:e,status:`snapshot`,frames:t.frames+1,error:null})),onView:e=>a(t=>({view:e,status:`live`,frames:t.frames+1,error:null})),onError:e=>a(t=>({...t,status:`error`,error:e}))},n,{createEventSource:r});return()=>t.close()},[e,n,r]),i}var Y_=24;function X_(e,t){let[n,r]=(0,v.useState)(!0),i=(0,v.useRef)(!0);return(0,v.useEffect)(()=>{if(e===null)return;let t=()=>{let t=e.scrollHeight-e.scrollTop-e.clientHeight<=Y_;i.current=t,r(t)};return e.addEventListener(`scroll`,t,{passive:!0}),t(),()=>e.removeEventListener(`scroll`,t)},[e]),(0,v.useEffect)(()=>{e!==null&&i.current&&(e.scrollTop=e.scrollHeight)},[e,t]),n}function Z_(e){let{client:t,conversationId:n,path:r}=e,[i,a]=(0,v.useState)({kind:`loading`});return(0,v.useEffect)(()=>{let e=!1;return a({kind:`loading`}),t.readFile(n,r).then(t=>{e||a(t.encoding===`text`?{kind:`text`,content:t.content,size:t.size}:{kind:`binary`,size:t.size})}).catch(t=>{e||a({kind:`error`,message:t instanceof Error?t.message:String(t)})}),()=>{e=!0}},[t,n,r]),(0,R.jsxs)(`div`,{className:`file-preview`,"data-path":r,children:[(0,R.jsx)(`div`,{className:`file-preview-path`,children:r}),i.kind===`loading`&&(0,R.jsx)(`p`,{className:`file-preview-loading`,children:`loading…`}),i.kind===`text`&&(0,R.jsx)(`pre`,{className:`file-preview-content`,children:i.content}),i.kind===`binary`&&(0,R.jsxs)(`p`,{className:`file-preview-binary`,children:[`binary file — `,i.size,` bytes (no preview)`]}),i.kind===`error`&&(0,R.jsx)(`p`,{role:`alert`,children:i.message})]})}function Q_(e){return[...e].sort((e,t)=>(e.kind===`directory`?0:1)-(t.kind===`directory`?0:1)||e.name.localeCompare(t.name))}function $_(e){let{client:t,conversationId:n,onClose:r}=e,[i,a]=(0,v.useState)(null),[o,s]=(0,v.useState)({}),[c,l]=(0,v.useState)({}),[u,d]=(0,v.useState)(null),[f,p]=(0,v.useState)(null);(0,v.useEffect)(()=>{if(a(null),s({}),l({}),d(null),p(null),n===null)return;let e=!1;return t.listFiles(n).then(t=>{e||a(Q_(t.entries))}).catch(t=>{e||p(t instanceof Error?t.message:String(t))}),()=>{e=!0}},[t,n]);async function m(e){if(n!==null){if(c[e.path]){l(t=>{let n={...t};return delete n[e.path],n});return}if(l(t=>({...t,[e.path]:!0})),o[e.path]===void 0)try{let r=await t.listFiles(n,e.path);s(t=>({...t,[e.path]:Q_(r.entries)}))}catch(e){p(e instanceof Error?e.message:String(e))}}}function h(e,t){return e.map(e=>{if(e.kind===`directory`){let n=c[e.path]===!0,r=o[e.path];return(0,R.jsxs)(`li`,{children:[(0,R.jsxs)(`button`,{type:`button`,className:`workspace-dir`,"data-tree-row":`true`,"data-path":e.path,"aria-expanded":n,style:{paddingLeft:`${t*.9}rem`},onClick:()=>void m(e),children:[n?`▾`:`▸`,` `,e.name,`/`]}),n&&r!==void 0&&(0,R.jsx)(`ul`,{className:`workspace-children`,children:h(r,t+1)})]},e.path)}return(0,R.jsx)(`li`,{children:(0,R.jsx)(`button`,{type:`button`,className:`workspace-file`,"data-tree-row":`true`,"data-path":e.path,"data-selected":u===e.path||void 0,style:{paddingLeft:`${t*.9}rem`},onClick:()=>d(e.path),children:e.name})},e.path)})}return(0,R.jsxs)(`section`,{className:`workspace-browser`,"aria-label":`workspace files`,children:[(0,R.jsxs)(`h2`,{className:`workspace-title`,children:[`Workspace`,r!==void 0&&(0,R.jsx)(`button`,{type:`button`,className:`workspace-close`,"aria-label":`close workspace panel`,title:`close`,onClick:r,children:`✕`})]}),n===null?(0,R.jsx)(`p`,{className:`workspace-empty`,children:`Select a conversation to browse its workspace`}):(0,R.jsxs)(R.Fragment,{children:[f!==null&&(0,R.jsx)(`p`,{role:`alert`,children:f}),i===null&&f===null?(0,R.jsx)(`p`,{className:`workspace-loading`,children:`loading…`}):i===null?null:(0,R.jsx)(`ul`,{className:`workspace-tree`,children:h(i,0)}),u!==null&&(0,R.jsx)(Z_,{client:t,conversationId:n,path:u})]})]})}var ev=C(),tv=`sigrun.panel`,nv=6e4;function rv(){let e=globalThis.localStorage;try{let t=e?.getItem(tv)??null;return t===`outline`||t===`workspace`||t===`jobs`?t:null}catch{return null}}function iv(e){try{globalThis.localStorage?.setItem(tv,e??`none`)}catch{}}var av=`sigrun.timeline`;function ov(){try{return globalThis.localStorage?.getItem(av)!==`0`}catch{return!0}}function sv(e){try{globalThis.localStorage?.setItem(av,e?`1`:`0`)}catch{}}function cv(e,t){let n=globalThis.document;if(n===void 0)return;let r=URL.createObjectURL(new Blob([t],{type:`application/json`})),i=n.createElement(`a`);i.href=r,i.download=e,n.body.appendChild(i),i.click(),i.remove(),URL.revokeObjectURL(r)}function lv(e,t){return t===null?`sigrun`:ae(e.find(e=>e.id===t)??{id:t,archived:!1,pinned:!1})}function uv(e){let{activeId:t,view:n,status:r,error:i,showThinking:a,timeline:o}=e;if(t===null)return(0,R.jsx)(`section`,{className:`chat-center`,children:(0,R.jsx)(`p`,{className:`chat-empty`,children:`Start a conversation — type below.`})});let s=n?.steer.busy??!1,c=n!==null&&Ah(n)>0,l=n===null||c?void 0:jh(n);return(0,R.jsxs)(`section`,{className:`chat-center`,"data-view-status":r,"aria-label":`chat transcript`,ref:e.onScrollRoot,style:e.dockPadding>0?{paddingBottom:`${e.dockPadding}px`}:void 0,children:[i!==null&&(0,R.jsx)(`p`,{role:`alert`,children:i}),n===null?(0,R.jsx)(`p`,{className:`chat-loading`,children:`loading…`}):(0,R.jsxs)(R.Fragment,{children:[(0,R.jsx)(Ym.Provider,{value:e.attachChatTransport,children:(0,R.jsx)(Ih,{view:n,showThinking:a,timeline:o,parent:e.parent,client:e.client,onNavigate:e.onNavigate})}),s&&(0,R.jsxs)(`div`,{className:`chat-working`,role:`status`,children:[(0,R.jsx)(`span`,{className:`chat-working-dot`}),(0,R.jsx)(`span`,{className:`chat-working-dot`}),(0,R.jsx)(`span`,{className:`chat-working-dot`}),(0,R.jsx)(`span`,{className:`chat-working-label`,children:c?`compacting…`:`working…`})]}),l!==void 0&&(0,R.jsxs)(`p`,{className:`chat-compaction-failure`,role:`alert`,children:[`compaction failed: `,l]})]})]})}function dv(e){let t=e.startsWith(`#`)?e.slice(1):e,n=/^\/settings(?:\/([^/]+))?\/?$/.exec(t);if(n!==null){let e=n[1];if(e===void 0)return{kind:`settings`};try{return{kind:`settings`,section:decodeURIComponent(e)}}catch{return{kind:`chat`}}}let r=/^\/ext\/([^/]+)\/([^/?]+)(?:\?(.*))?$/.exec(t);if(r===null)return{kind:`chat`};try{return{kind:`ext`,slug:decodeURIComponent(r[1]??``),id:decodeURIComponent(r[2]??``),params:fv(r[3])}}catch{return{kind:`chat`}}}function fv(e){let t={};if(e!==void 0){let n=new URLSearchParams(e).get(`params`);if(n!==null)try{let e=JSON.parse(n);typeof e==`object`&&e&&!Array.isArray(e)&&(t=e)}catch{}}return t}function pv(e){if(e.kind===`chat`)return`#/c`;if(e.kind===`settings`)return e.section===void 0?`#/settings`:`#/settings/${encodeURIComponent(e.section)}`;let t=`#/ext/${encodeURIComponent(e.slug)}/${encodeURIComponent(e.id)}`;return Object.keys(e.params).length===0?t:`${t}?params=${encodeURIComponent(JSON.stringify(e.params))}`}function mv(){let e=globalThis.location;if(e?.pathname!==`/settings`)return;let t=new URLSearchParams(e.search??``).get(`section`),n=t===null||t===``?`#/settings`:`#/settings/${encodeURIComponent(t)}`;hv=n,globalThis.history?.replaceState(null,``,`/${n}`)}var hv=``;function gv(){let e=globalThis.location;return e!==void 0&&typeof e.hash==`string`?e.hash:hv}function _v(e,t=!1){let n=globalThis.history;hv=e,n!==void 0&&(t?n.replaceState(null,``,e):n.pushState(null,``,e))}function vv(e={}){let t=e.client??ev,n=e.identity,r=e.onLogout,i=e.onRestarting,a=z_(),o=d_(),[s,c]=(0,v.useState)({status:`loading`}),l=(0,v.useCallback)(async()=>{try{await t.requestRestart()}catch(e){k(`restart failed: ${e instanceof Error?e.message:String(e)}`);return}k(null),c({status:`restarting`});let e=Date.now()+nv;for(;;){await new Promise(e=>setTimeout(e,500));let n=!1;try{n=await t.checkReady()}catch{}if(n){i===void 0?c({status:`loading`}):i();return}if(Date.now()>e){c({status:`refused`,message:`restart did not come back: /readyz never answered within ${nv/1e3}s — check the deployment's supervisor`});return}}},[t,i]);(0,v.useEffect)(()=>{e.onExposeActions?.({restart:l}),(e.onExposeActions!==void 0||globalThis.__sigrunE2E===!0)&&(globalThis.__sigrunAppActions={restart:l})},[l]);let[u,d]=(0,v.useState)(null),[f,p]=(0,v.useState)(rv),[m,h]=(0,v.useState)(ov),[g,_]=(0,v.useState)(!1),[,y]=(0,v.useState)(0),b=globalThis,x=s.status===`ready`&&b.location?.hash.startsWith(`#/blocks`)?`blocks`:`chats`;mv();let[S,C]=(0,v.useState)(()=>dv(gv())),w=(0,v.useRef)(!1),T=(0,v.useRef)(null),[E]=(0,v.useState)(()=>new sg),[D]=(0,v.useState)(()=>new ug),ee=(0,v.useCallback)(e=>D.attach(e),[D]),[te]=(0,v.useState)([]),[ne,re]=(0,v.useState)(null),[ie,O]=(0,v.useState)(null),[oe,k]=(0,v.useState)(null),[se,ce]=(0,v.useState)(null),[le,ue]=(0,v.useState)(0),de=(0,v.useCallback)(e=>{if(e===null)return;let t=()=>ue(e.offsetHeight);t();let n=globalThis.ResizeObserver;if(n===void 0)return;let r=new n(t);return r.observe(e),()=>r.disconnect()},[]),{view:fe,status:pe,error:me,frames:he}=J_(u,{createEventSource:e.createEventSource});X_(se,he);let[ge,_e]=(0,v.useState)(0),A=Jg(t,{busy:fe?.steer.busy??!1,createEventSource:e.createEventSource,onJobChanged:(0,v.useCallback)(()=>{_e(e=>e+1)},[]),onSurfaceChanged:(0,v.useCallback)(e=>{E.dispatch(e)},[E]),onChatChanged:(0,v.useCallback)(e=>{D.dispatch(e)},[D])}),j=S.kind===`ext`?S:null,ve=j===null?``:Te(j.params??{}),[M,N]=(0,v.useState)(null);(0,v.useEffect)(()=>{if(j===null){N(null);return}let e=!0;return De(j.slug,j.id,ve).then(t=>{e&&N({key:ve,hash:t})}),()=>{e=!1}},[j,ve]);let ye=(0,v.useMemo)(()=>{if(j!==null&&M!==null&&M.key===ve)return E.attach({slug:j.slug,id:j.id,params:j.params,...A.streamId===void 0?{}:{streamId:A.streamId}},M.hash)},[j,ve,M,E,A.streamId]),be=(0,v.useMemo)(()=>{if(ne===null)return null;let[e,t]=ne.split(`/`);return e===void 0||t===void 0||e===``||t===``?null:{slug:e,id:t}},[ne]),[xe,Se]=(0,v.useState)(null);(0,v.useEffect)(()=>{if(be===null){Se(null);return}let e=!0,t=ne??``;return De(be.slug,be.id,Te({})).then(n=>{e&&Se({forKey:t,hash:n})}),()=>{e=!1}},[be,ne]);let Ce=(0,v.useMemo)(()=>{if(be!==null&&xe!==null&&xe.forKey===ne)return E.attach({slug:be.slug,id:be.id,...A.streamId===void 0?{}:{streamId:A.streamId}},xe.hash)},[be,ne,xe,E,A.streamId]);(0,v.useEffect)(()=>{j!==null&&A.noteSurfaceVisible(j.slug,j.id,j.params),be!==null&&A.noteSurfaceVisible(be.slug,be.id)},[j,ve,be,A.streamId,A.noteSurfaceVisible]);let P=(0,v.useMemo)(()=>{if(be!==null&&s.status===`ready`)return hg(s.meta.extensions).find(e=>e.slug===be.slug&&e.id===be.id)?.refreshMs},[be,s]),we=(0,v.useMemo)(()=>{let e=A.rows.find(e=>e.id===u)?.parent;if(e===void 0)return;let t=A.rows.find(t=>t.id===e.id);return{id:e.id,name:ae(t===void 0?{id:e.id,archived:!1,pinned:!1}:t)}},[A.rows,u]),Ee=(0,v.useMemo)(()=>{let e=[];for(let t of je(fe?.entries??[]))t.kind===`user`&&e.push({entryId:t.entry.id,text:yh(t.entry)});return e},[fe]),Oe=(0,v.useCallback)(e=>{d(e),_(!1)},[]),ke=(0,v.useCallback)(e=>{p(t=>{let n=t===e?null:e;return iv(n),n})},[]),Ae=(0,v.useCallback)(()=>{p(null),iv(null)},[]);(0,v.useEffect)(()=>{let e=()=>{let e=dv(gv());e.kind!==`settings`&&(w.current=!1,T.current=null),C(e)};return globalThis.addEventListener?.(`popstate`,e),()=>{globalThis.removeEventListener?.(`popstate`,e)}},[]);let Me=(0,v.useCallback)((e,t)=>{let n={kind:`ext`,slug:e,id:t,params:{}};_v(pv(n)),C(n),w.current=!1,_(!1)},[]),Ne=(0,v.useCallback)(e=>{let t=e===void 0?{kind:`settings`}:{kind:`settings`,section:e},n=gv(),r=pv(t);r!==n&&_v(r),!w.current&&dv(n).kind!==`settings`&&(T.current=n===``?`#/c`:n),C(t),w.current=!0,_(!1)},[]),Pe=(0,v.useCallback)(()=>Ne(void 0),[Ne]),Fe=(0,v.useCallback)(e=>Ne(e),[Ne]),Ie=(0,v.useCallback)(()=>{let e=w.current&&T.current!==null?T.current:`#/c`;_v(e,!0),C(dv(e)),w.current=!1,T.current=null},[]),[Le,Re]=(0,v.useState)(()=>_g()),ze=(0,v.useCallback)((e,t)=>{Re(n=>s.status===`ready`?bg(yg(mg(s.meta.extensions),n),e,t):n)},[s]),F=(0,v.useMemo)(()=>s.status===`ready`?yg(mg(s.meta.extensions),Le):[],[s,Le]),Be=(0,v.useMemo)(()=>{if(j!==null)return F.find(e=>e.slug===j.slug&&e.id===j.id)?.refreshMs},[j,F]);(0,v.useCallback)(e=>{_v(`#/c/${e}`),C({kind:`chat`}),Oe(e)},[Oe]),(0,v.useEffect)(()=>{if(s.status!==`ready`||u!==null||S.kind===`ext`||A.rows.length===0)return;let e=A.rows.find(e=>e.root)??A.rows[0];d(t=>t??e?.id??null)},[s.status,A.rows,S.kind]),(0,v.useEffect)(()=>{let e=!1;return t.getMeta().then(t=>{e||(t.schemaVersion===`79bdfd95541951f9db86236ee2a2f81cce481a5d8688090837a2bdde83d52c97`?c({status:`ready`,meta:t}):c({status:`refused`,message:`schema mismatch: the server speaks schema ${t.schemaVersion} but this webui bundle is pinned to ${Ag}. Rebuild and redeploy the bundle against this server (spec §5).`}))}).catch(t=>{if(e)return;let n=t instanceof Error?t.message:String(t);c({status:`refused`,message:`schema check failed: ${n}. The wire schema is unverifiable, so the webui refuses to render (spec §5).`})}),()=>{e=!0}},[t]),(0,v.useEffect)(()=>{let e=globalThis,t=()=>{y(e=>e+1)};return e.addEventListener?.(`hashchange`,t),()=>e.removeEventListener?.(`hashchange`,t)},[]);let Ve=(0,v.useCallback)(async(e,n)=>{try{await t.patchConversationMeta(e,{name:n}),await A.reload(),k(null)}catch(e){k(`rename failed: ${e instanceof Error?e.message:String(e)}`)}},[t,A.reload]),I=(0,v.useCallback)(async e=>{u!==null&&await Ve(u,e)},[u,Ve]),L=(0,v.useCallback)(async(e,n)=>{try{await t.patchConversationMeta(e,{archived:n}),await A.reload(),k(null)}catch(e){k(`archive failed: ${e instanceof Error?e.message:String(e)}`)}},[t,A.reload]),He=(0,v.useCallback)(e=>{t.fork(e).then(async e=>{await A.reload(),Oe(e.id),k(null)}).catch(e=>k(`fork failed: ${e instanceof Error?e.message:String(e)}`))},[t,A.reload,Oe]),Ue=(0,v.useCallback)(()=>{t.createConversation().then(async e=>{await A.reload(),Oe(e.id),k(null)}).catch(e=>k(`new conversation failed: ${e instanceof Error?e.message:String(e)}`))},[t,A.reload,Oe]),We=(0,v.useCallback)(()=>{u!==null&&t.exportConversation(u).then(e=>{cv(`sigrun-conversation-${u}.jsonl`,e),k(null)}).catch(e=>k(`export failed: ${e instanceof Error?e.message:String(e)}`))},[u,t]),Ge=(0,v.useCallback)(()=>{u!==null&&t.compact(u).then(()=>k(null)).catch(e=>k(`compact failed: ${e instanceof Error?e.message:String(e)}`))},[u,t]),Ke=(0,v.useCallback)(()=>{u!==null&&L(u,!0)},[u,L]);return s.status===`loading`?(0,R.jsx)(`div`,{className:`app-boot`,children:(0,R.jsx)(`p`,{children:`sigrun — checking the wire schema…`})}):s.status===`restarting`?(0,R.jsx)(`div`,{className:`app-boot`,role:`status`,children:(0,R.jsx)(`p`,{children:`sigrun — Restarting…`})}):s.status===`refused`?(0,R.jsxs)(`div`,{className:`app-refused`,role:`alert`,children:[(0,R.jsx)(`h1`,{children:`sigrun — refusing to render`}),(0,R.jsx)(`p`,{children:s.message})]}):(0,R.jsxs)(`div`,{className:`app-root`,children:[(0,R.jsxs)(`div`,{className:`side-drawer`,"data-open":g?``:void 0,children:[(0,R.jsx)(Cg,{meta:s.meta,onOpenSettings:Pe,settingsActive:S.kind===`settings`,onOpenGallery:s.meta.dev?()=>{globalThis.history?.pushState(null,``,`#/blocks`),y(e=>e+1)}:void 0,identity:n,hiddenExtSurfaces:te,onOpenExtView:Me,extViewEntries:F,onMoveExtView:ze,onLogout:r===void 0?void 0:()=>{t.logout().catch(()=>void 0).finally(()=>r())}}),A.error!==null&&(0,R.jsxs)(`p`,{className:`side-error`,role:`alert`,children:[`conversations unavailable: `,A.error]}),(0,R.jsx)(Ig,{rows:A.rows,activeId:u,onSelect:Oe,onNew:Ue,onRename:Ve,onArchive:L,onFork:He,currentUser:n?.user,onShare:O})]}),x===`blocks`?(0,R.jsx)(`main`,{className:`main-column`,children:(0,R.jsx)(qh,{})}):S.kind===`settings`?(0,R.jsx)(`main`,{className:`main-column`,"data-route":`settings`,children:(0,R.jsx)(h_,{client:t,prefsState:o,theme:a,admin:n?.admin,section:S.section,onSection:Fe,onRestart:l,onClose:Ie})}):(0,R.jsxs)(`main`,{className:`main-column`,children:[(0,R.jsx)(dg,{title:lv(A.rows,u),timeline:m,onTimeline:()=>h(e=>(sv(!e),!e)),panel:f,onPanel:ke,onRename:I,onExport:We,onCompact:Ge,onArchive:Ke,drawerOpen:g,onToggleDrawer:()=>_(e=>!e)}),oe!==null&&(0,R.jsx)(`p`,{className:`shell-error`,role:`alert`,children:oe}),(0,R.jsxs)(`div`,{className:`main-body`,children:[j!==null&&ye!==void 0?(0,R.jsx)($h,{slug:j.slug,id:j.id,hub:E,transport:ye,onNavigate:e=>{let t=e.target;if(e.params!==void 0){let t={kind:`ext`,slug:j.slug,id:j.id,params:e.params};_v(pv(t)),C(t);return}if(typeof t==`object`&&t){if(`conversation`in t&&typeof t.conversation==`number`){_v(`#/c`),C({kind:`chat`}),Oe(t.conversation);return}if(`job`in t){_v(`#/c`),C({kind:`chat`}),p(`jobs`),iv(`jobs`);return}if(`settings`in t){let e=t.settings;Ne(typeof e==`string`&&e!==``?e:void 0);return}if(`view`in t&&t.view!==null&&typeof t.view==`object`){let e=t.view,n={kind:`ext`,slug:e.extension,id:e.id,params:e.params??{}};_v(pv(n)),C(n)}}},...Be===void 0?{}:{refreshMs:Be}},`${j.slug}/${j.id}/${A.streamId??`pre-hello`}`):(0,R.jsxs)(`div`,{className:`chat-column`,children:[(0,R.jsx)(uv,{activeId:u,view:fe,status:pe,error:me,showThinking:o.prefs.showThinking,timeline:m,client:t,onNavigate:Oe,parent:we,onScrollRoot:ce,dockPadding:le,attachChatTransport:ee}),(0,R.jsx)(`div`,{className:`chat-fade`,"aria-hidden":`true`}),(0,R.jsx)(`footer`,{className:`composer-slot`,ref:de,children:(0,R.jsx)(Pm,{client:t,conversationId:u,view:fe,onNavigate:Oe,onOpenSettings:Pe,enterToSend:o.prefs.enterToSend,readOnly:A.rows.find(e=>e.id===u)?.access===`read`})})]}),(0,R.jsx)(wg,{mode:f,extPanels:hg(s.meta.extensions),activeExtPanel:ne,onOpenExtPanel:(e,t)=>{re(`${e}/${t}`)},...be!==null&&Ce!==void 0?{extContent:(0,R.jsx)(rg,{slug:be.slug,id:be.id,transport:Ce,...P===void 0?{}:{refreshMs:P}},ne)}:{},outline:(0,R.jsx)(kg,{scrollRoot:se,turns:Ee}),workspace:(0,R.jsx)($_,{client:t,conversationId:u,onClose:Ae}),jobs:(0,R.jsx)(Eg,{client:t,onNavigate:Oe,refreshToken:ge})})]})]}),g&&(0,R.jsx)(`div`,{className:`drawer-backdrop`,onClick:()=>_(!1),"aria-hidden":`true`}),f!==null&&(0,R.jsx)(`div`,{className:`panel-backdrop`,onClick:Ae,"aria-hidden":`true`}),ie!==null&&(()=>{let e=A.rows.find(e=>e.id===ie);return e===void 0?null:(0,R.jsx)(`div`,{className:`share-overlay`,onClick:e=>{e.target===e.currentTarget&&O(null)},children:(0,R.jsx)(Gg,{client:t,conversation:e,onClose:()=>O(null),onSaved:()=>{A.reload()}})})})()]})}function yv(e={}){let[t,n]=(0,v.useState)(0);return(0,R.jsx)(vv,{...e,onRestarting:()=>n(e=>e+1)},t)}var bv={invalid_state:`That sign-in link was already used or came from another browser. Start again.`,login_expired:`This sign-in took too long or sigrun restarted. Start again.`,not_allowed:`Your account isn't allowed to use this sigrun.`,isolation_required:`This sigrun can't add another user yet. Ask the admin.`,auth_required:`This sigrun can't add another user yet. Ask the admin.`,account_link_conflict:`That account is already linked to another sigrun user.`,provider_error:`The sign-in provider returned an error. Try again.`,proxy_identity_required:`This sigrun signs people in through its sign-in proxy. Open it through the proxy.`};function xv(e){return bv[e]??`Sign-in failed. Try again.`}function Sv(e){let{client:t,message:n,onSuccess:r}=e,[i,a]=(0,v.useState)(``),[o,s]=(0,v.useState)(()=>{let e=globalThis.location?.search??``,t=new URLSearchParams(e).get(`error`);return t===null?null:xv(t)}),[c,l]=(0,v.useState)(!1),[u,d]=(0,v.useState)([]);(0,v.useEffect)(()=>{let e=!1;return t.providers().then(t=>{e||d(t.providers)}).catch(()=>{}),()=>{e=!0}},[t]),(0,v.useEffect)(()=>{let e=globalThis.location?.search??``;if(new URLSearchParams(e).get(`error`)===null)return;let t=globalThis.history,n=globalThis.location?.pathname??`/login`;t?.replaceState(null,``,n)},[]);async function f(){if(i.trim()===``){s(`paste your API token`);return}l(!0),s(null);try{await t.login(i.trim()),r()}catch(e){s(Ug(e))}finally{l(!1)}}return(0,R.jsxs)(`div`,{className:`auth-card`,children:[(0,R.jsx)(`h1`,{children:`Sign in to sigrun`}),n!==void 0&&(0,R.jsx)(`p`,{className:`auth-message`,children:n}),u.length>0&&(0,R.jsx)(`div`,{className:`auth-providers`,children:u.map(e=>(0,R.jsx)(`a`,{className:`auth-provider`,href:`/v1/auth/login/${encodeURIComponent(e.provider)}?return=%2F`,children:e.label},e.provider))}),(0,R.jsxs)(`label`,{className:`auth-field`,children:[`API token`,(0,R.jsx)(`input`,{"data-auth-field":`token`,type:`password`,autoComplete:`current-password`,value:i,onChange:e=>a(e.target.value),onKeyDown:e=>{e.key===`Enter`&&(e.preventDefault(),f())}})]}),(0,R.jsx)(`button`,{type:`button`,className:`auth-submit`,disabled:c,onClick:()=>void f(),children:c?`Signing in…`:`Sign in`}),o!==null&&(0,R.jsx)(`p`,{className:`auth-error`,role:`alert`,children:o})]})}function Cv(e){return!e.startsWith(`/`)||e.startsWith(`//`)||e.includes(`\\`)||/^[A-Za-z][A-Za-z0-9+.-]*:/.test(e)?`/`:e}function wv(e){let{client:t,flowKey:n,reason:r,navigate:i}=e,[a,o]=(0,v.useState)(``),[s,c]=(0,v.useState)(!1),[l,u]=(0,v.useState)(null);async function d(){if(a.trim()===``){u(`Enter your code.`);return}c(!0),u(null);try{let e=await t.submitLoginCode(n,a.trim());i(Cv(e.returnTo))}catch(e){e instanceof b&&e.error===`invalid_code`?u(`That code didn't work. Check it and try again.`):e instanceof b&&e.error===`login_expired`?u(`This sign-in took too long or sigrun restarted. Start again.`):e instanceof b&&e.error===`not_allowed`?u(`Your account isn't allowed to use this sigrun.`):e instanceof b&&(e.error===`isolation_required`||e.error===`auth_required`)?u(`This sigrun can't add another user yet. Ask the admin.`):u(`Sign-in failed. Try again.`)}finally{c(!1)}}return(0,R.jsxs)(`div`,{className:`auth-card`,children:[(0,R.jsx)(`h1`,{children:`Finish signing in`}),(0,R.jsx)(`p`,{className:`auth-message`,children:r===`setup`?`Enter the setup code to claim this sigrun.`:`Enter your invite code to finish signing in.`}),(0,R.jsxs)(`label`,{className:`auth-field`,children:[r===`setup`?`Setup code`:`Invite code`,(0,R.jsx)(`input`,{"data-auth-field":`login-code`,type:`text`,autoComplete:`one-time-code`,value:a,onChange:e=>o(e.target.value),onKeyDown:e=>{e.key===`Enter`&&(e.preventDefault(),d())}})]}),(0,R.jsx)(`button`,{type:`button`,className:`auth-submit`,disabled:s,onClick:()=>void d(),children:s?`Signing in…`:`Continue`}),l!==null&&(0,R.jsx)(`p`,{className:`auth-error`,role:`alert`,children:l})]})}function Tv(e){let{cause:t,context:n}=e,r=e.reload??(()=>location.reload());return(0,R.jsx)(`div`,{className:`auth-screen`,"data-auth-screen":`proxy-unidentified`,children:(0,R.jsxs)(`div`,{className:`auth-card`,children:[(0,R.jsx)(`h1`,{children:`Sign-in proxy required`}),n===`session_ended`&&(0,R.jsx)(`p`,{className:`auth-message`,children:`Your session ended.`}),t===`unidentified`?(0,R.jsxs)(R.Fragment,{children:[(0,R.jsx)(`p`,{className:`auth-message`,children:`This sigrun runs behind a sign-in proxy, but the proxy's identity didn't reach sigrun.`}),(0,R.jsx)(`p`,{children:`The proxy's address may be missing from trustedProxies, or the proxy may not be forwarding the identity header. The operator can see the reason in the server log.`})]}):t===`invalid_username`?(0,R.jsx)(`p`,{className:`auth-message`,children:`The proxy supplied an invalid username: the proxy's username has no usable characters.`}):(0,R.jsx)(`p`,{className:`auth-message`,children:`Your account doesn't exist and auto-provisioning is off. Ask the admin to create your account.`}),(0,R.jsx)(`button`,{type:`button`,className:`auth-submit`,onClick:r,children:`Reload`})]})})}function Ev(e){return e.includes(`proxy`)&&!e.includes(`token`)}var Dv=C();function Ov(e,t){return new Proxy(e,{get(e,n){let r=e[n];return typeof r==`function`?(...n)=>Promise.resolve().then(()=>r.apply(e,n)).catch(e=>{throw e instanceof b&&e.status===401&&t(),e}):r}})}function kv(e={}){let[t,n]=(0,v.useState)({status:`probing`}),[r,i]=(0,v.useState)(0),a=(0,v.useCallback)(()=>{n(e=>e.status===`ready`?Ev(e.methods)?{status:`proxy-unidentified`,cause:`unidentified`,context:`session_ended`}:{status:`login`,methods:e.methods,message:`Your session ended. Sign in again.`}:e)},[]),o=(0,v.useMemo)(()=>Ov(e.client??Dv,a),[e.client,a]);if((0,v.useEffect)(()=>{let e=!1;return(async()=>{let t=await o.getOnboarding().catch(t=>{e||n({status:`failed`,message:t instanceof Error?t.message:String(t)})});if(!(t===void 0||e)){if(t.state===`unclaimed`){n({status:`onboarding`,state:t});return}try{let r=await o.whoami();if(e)return;n({status:`ready`,methods:t.methods,identity:r})}catch(r){if(e)return;if(Ev(t.methods)&&r instanceof b&&r.status===401){n({status:`proxy-unidentified`,cause:`unidentified`,context:`boot`});return}if(Ev(t.methods)&&r instanceof b&&r.status===403&&(r.error===`invalid_username`||r.error===`user_not_provisioned`)){n({status:`proxy-unidentified`,cause:r.error===`invalid_username`?`invalid_username`:`not_provisioned`,context:`boot`});return}if(r instanceof b&&r.status===401){n({status:`login`,methods:t.methods});return}n({status:`failed`,message:r instanceof Error?r.message:String(r)})}}})(),()=>{e=!0}},[o,r]),t.status===`probing`)return(0,R.jsx)(`div`,{className:`app-boot`,"data-auth-screen":`probing`,children:(0,R.jsx)(`p`,{children:`sigrun — signing in…`})});if(t.status===`failed`)return(0,R.jsxs)(`div`,{className:`app-refused`,role:`alert`,"data-auth-screen":`failed`,children:[(0,R.jsx)(`h1`,{children:`sigrun — auth check failed`}),(0,R.jsx)(`p`,{children:t.message}),(0,R.jsx)(`button`,{type:`button`,onClick:()=>i(e=>e+1),children:`Retry`})]});let s=globalThis.location;if(s?.pathname===`/login/code`){let e=new URLSearchParams(s.search??``),t=e.get(`key`);if(t!==null)return(0,R.jsx)(`div`,{className:`auth-screen`,"data-auth-screen":`login-code`,children:(0,R.jsx)(wv,{client:o,flowKey:t,reason:e.get(`reason`)??`invite`,navigate:e=>{s.href!==void 0&&(s.href=e)}})})}return t.status===`onboarding`?Ev(t.state.methods)&&t.state.codeRequired&&t.state.proxyIdentity===void 0?(0,R.jsx)(Tv,{cause:`unidentified`,context:`onboarding`}):(0,R.jsx)(`div`,{className:`auth-screen`,"data-auth-screen":`onboarding`,children:(0,R.jsx)(Hg,{client:o,state:t.state,onClaimed:()=>i(e=>e+1)})}):t.status===`proxy-unidentified`?(0,R.jsx)(Tv,{cause:t.cause,context:t.context}):t.status===`login`?(0,R.jsx)(`div`,{className:`auth-screen`,"data-auth-screen":`login`,children:(0,R.jsx)(Sv,{client:o,message:t.message,onSuccess:()=>i(e=>e+1)})}):(0,R.jsx)(yv,{client:o,createEventSource:e.createEventSource,identity:t.identity,onLogout:()=>n({status:`login`,methods:t.methods,message:`Signed out.`})})}var Av=document.getElementById(`root`);if(Av===null)throw Error(`sigrun webui: #root mount point missing from index.html`);(0,y.createRoot)(Av).render((0,R.jsx)(v.StrictMode,{children:(0,R.jsx)(kv,{})}));
@@ -32,7 +32,7 @@
32
32
  if (accent) document.documentElement.dataset.accent = accent;
33
33
  } catch {}
34
34
  </script>
35
- <script type="module" crossorigin src="./assets/index-DWmsAQl2.js"></script>
35
+ <script type="module" crossorigin src="./assets/index-BtczbUXo.js"></script>
36
36
  <link rel="stylesheet" crossorigin href="./assets/index-h7zDY9vD.css">
37
37
  </head>
38
38
  <body>