@crouton-kit/crouter 0.3.37 → 0.3.39

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 (143) hide show
  1. package/dist/build-root.js +1 -0
  2. package/dist/{builtin-personas/runtime-base.md → builtin-memory/00-runtime-base.md} +7 -0
  3. package/dist/{builtin-personas/spine/has-manager.md → builtin-memory/01-spine/00-has-manager.md} +8 -0
  4. package/dist/builtin-memory/01-spine/01-no-manager.md +10 -0
  5. package/dist/{builtin-personas/lifecycle/terminal.md → builtin-memory/02-lifecycle/00-terminal.md} +8 -0
  6. package/dist/{builtin-personas/lifecycle/resident.md → builtin-memory/02-lifecycle/01-resident.md} +8 -0
  7. package/dist/{builtin-personas/waiting.md → builtin-memory/03-waiting.md} +7 -0
  8. package/dist/{builtin-personas/orchestration-kernel.md → builtin-memory/04-orchestration-kernel.md} +8 -0
  9. package/dist/{builtin-personas/advisor/PERSONA.md → builtin-memory/05-kinds/advisor/00-base.md} +5 -2
  10. package/dist/{builtin-personas/design/PERSONA.md → builtin-memory/05-kinds/design/00-base.md} +5 -2
  11. package/dist/{builtin-personas/design/orchestrator.md → builtin-memory/05-kinds/design/01-orchestrator.md} +5 -4
  12. package/dist/{builtin-personas/developer/PERSONA.md → builtin-memory/05-kinds/developer/00-base.md} +5 -2
  13. package/dist/{builtin-personas/developer/orchestrator.md → builtin-memory/05-kinds/developer/01-orchestrator.md} +5 -4
  14. package/dist/{builtin-personas/explore/PERSONA.md → builtin-memory/05-kinds/explore/00-base.md} +5 -2
  15. package/dist/{builtin-personas/explore/orchestrator.md → builtin-memory/05-kinds/explore/01-orchestrator.md} +5 -3
  16. package/dist/{builtin-personas/general/PERSONA.md → builtin-memory/05-kinds/general/00-base.md} +5 -2
  17. package/dist/{builtin-personas/general/orchestrator.md → builtin-memory/05-kinds/general/01-orchestrator.md} +5 -3
  18. package/dist/{builtin-personas/plan/PERSONA.md → builtin-memory/05-kinds/plan/00-base.md} +5 -2
  19. package/dist/{builtin-personas/plan/orchestrator.md → builtin-memory/05-kinds/plan/01-orchestrator.md} +5 -4
  20. package/dist/{builtin-personas/plan/reviewers/architecture-fit/PERSONA.md → builtin-memory/05-kinds/plan/reviewers/architecture-fit.md} +5 -2
  21. package/dist/{builtin-personas/plan/reviewers/code-smells/PERSONA.md → builtin-memory/05-kinds/plan/reviewers/code-smells.md} +5 -2
  22. package/dist/{builtin-personas/plan/reviewers/pattern-consistency/PERSONA.md → builtin-memory/05-kinds/plan/reviewers/pattern-consistency.md} +5 -2
  23. package/dist/{builtin-personas/plan/reviewers/requirements-coverage/PERSONA.md → builtin-memory/05-kinds/plan/reviewers/requirements-coverage.md} +5 -2
  24. package/dist/{builtin-personas/plan/reviewers/security/PERSONA.md → builtin-memory/05-kinds/plan/reviewers/security.md} +5 -2
  25. package/dist/{builtin-personas/product/PERSONA.md → builtin-memory/05-kinds/product/00-base.md} +5 -2
  26. package/dist/{builtin-personas/product/orchestrator.md → builtin-memory/05-kinds/product/01-orchestrator.md} +5 -4
  27. package/dist/{builtin-personas/product/teardown/PERSONA.md → builtin-memory/05-kinds/product/teardown.md} +5 -3
  28. package/dist/{builtin-personas/review/PERSONA.md → builtin-memory/05-kinds/review/00-base.md} +5 -2
  29. package/dist/{builtin-personas/review/orchestrator.md → builtin-memory/05-kinds/review/01-orchestrator.md} +5 -3
  30. package/dist/{builtin-personas/spec/PERSONA.md → builtin-memory/05-kinds/spec/00-base.md} +5 -2
  31. package/dist/{builtin-personas/spec/orchestrator.md → builtin-memory/05-kinds/spec/01-orchestrator.md} +5 -4
  32. package/dist/{builtin-personas/spec/requirements/PERSONA.md → builtin-memory/05-kinds/spec/requirements.md} +5 -2
  33. package/dist/builtin-memory/internal/INDEX.md +1 -1
  34. package/dist/builtin-memory/internal/examples/imessage-assistant.md +2 -2
  35. package/dist/builtin-views/prompt-review/core.mjs +6 -134
  36. package/dist/builtin-views/settings/core.mjs +26 -94
  37. package/dist/builtin-views/settings/text.mjs +0 -5
  38. package/dist/builtin-views/settings/tui.mjs +1 -7
  39. package/dist/builtin-views/settings/web.jsx +3 -49
  40. package/dist/clients/attach/attach-cmd.js +416 -416
  41. package/dist/commands/memory/read.js +3 -3
  42. package/dist/commands/memory/shared.d.ts +13 -8
  43. package/dist/commands/memory/shared.js +22 -8
  44. package/dist/commands/memory/write.js +5 -3
  45. package/dist/commands/node.js +40 -11
  46. package/dist/commands/profile/add-project.d.ts +1 -0
  47. package/dist/commands/profile/add-project.js +42 -0
  48. package/dist/commands/profile/delete.d.ts +1 -0
  49. package/dist/commands/profile/delete.js +39 -0
  50. package/dist/commands/profile/list.d.ts +1 -0
  51. package/dist/commands/profile/list.js +35 -0
  52. package/dist/commands/profile/new.d.ts +1 -0
  53. package/dist/commands/profile/new.js +50 -0
  54. package/dist/commands/profile/remove-project.d.ts +1 -0
  55. package/dist/commands/profile/remove-project.js +42 -0
  56. package/dist/commands/profile/rename.d.ts +1 -0
  57. package/dist/commands/profile/rename.js +42 -0
  58. package/dist/commands/profile/show.d.ts +1 -0
  59. package/dist/commands/profile/show.js +50 -0
  60. package/dist/commands/profile.d.ts +2 -0
  61. package/dist/commands/profile.js +33 -0
  62. package/dist/commands/sys/config.js +6 -21
  63. package/dist/commands/sys/prompt-review.js +90 -17
  64. package/dist/core/canvas/canvas.js +10 -9
  65. package/dist/core/canvas/db.js +11 -0
  66. package/dist/core/canvas/history.js +1 -0
  67. package/dist/core/canvas/types.d.ts +10 -0
  68. package/dist/core/config.d.ts +44 -1
  69. package/dist/core/config.js +155 -12
  70. package/dist/core/hearth/provider.d.ts +8 -0
  71. package/dist/core/hearth/providers/__tests__/sweep-and-release.test.d.ts +1 -0
  72. package/dist/core/hearth/providers/__tests__/sweep-and-release.test.js +254 -0
  73. package/dist/core/hearth/providers/blaxel-home.d.ts +39 -0
  74. package/dist/core/hearth/providers/blaxel-home.js +271 -21
  75. package/dist/core/hearth/providers/blaxel.d.ts +5 -0
  76. package/dist/core/hearth/providers/blaxel.js +86 -4
  77. package/dist/core/hearth/providers/types.d.ts +16 -0
  78. package/dist/core/memory-resolver.d.ts +26 -15
  79. package/dist/core/memory-resolver.js +158 -40
  80. package/dist/core/profiles/manifest.d.ts +33 -0
  81. package/dist/core/profiles/manifest.js +332 -0
  82. package/dist/core/profiles/select.d.ts +11 -0
  83. package/dist/core/profiles/select.js +115 -0
  84. package/dist/core/runtime/bearings.d.ts +9 -0
  85. package/dist/core/runtime/bearings.js +31 -0
  86. package/dist/core/runtime/front-door.js +9 -2
  87. package/dist/core/runtime/launch.d.ts +25 -7
  88. package/dist/core/runtime/launch.js +42 -55
  89. package/dist/core/runtime/nodes.d.ts +7 -0
  90. package/dist/core/runtime/nodes.js +6 -0
  91. package/dist/core/runtime/persona.js +18 -32
  92. package/dist/core/runtime/spawn.d.ts +13 -0
  93. package/dist/core/runtime/spawn.js +25 -0
  94. package/dist/core/scope.d.ts +14 -7
  95. package/dist/core/scope.js +76 -20
  96. package/dist/core/substrate/index.d.ts +3 -3
  97. package/dist/core/substrate/index.js +5 -3
  98. package/dist/core/substrate/on-read.js +3 -2
  99. package/dist/core/substrate/render.d.ts +16 -11
  100. package/dist/core/substrate/render.js +249 -62
  101. package/dist/core/substrate/schema.d.ts +11 -3
  102. package/dist/core/substrate/schema.js +25 -0
  103. package/dist/core/substrate/subject.d.ts +15 -2
  104. package/dist/core/substrate/subject.js +24 -2
  105. package/dist/hearth/control-plane/__tests__/error-serialization.test.d.ts +1 -0
  106. package/dist/hearth/control-plane/__tests__/error-serialization.test.js +29 -0
  107. package/dist/hearth/control-plane/__tests__/oauth-serving-marker.test.d.ts +1 -0
  108. package/dist/hearth/control-plane/__tests__/oauth-serving-marker.test.js +44 -0
  109. package/dist/hearth/control-plane/__tests__/wake-roll.test.d.ts +1 -0
  110. package/dist/hearth/control-plane/__tests__/wake-roll.test.js +230 -0
  111. package/dist/hearth/control-plane/db.js +27 -0
  112. package/dist/hearth/control-plane/hearth-target.d.ts +23 -0
  113. package/dist/hearth/control-plane/hearth-target.js +68 -0
  114. package/dist/hearth/control-plane/registry.d.ts +6 -1
  115. package/dist/hearth/control-plane/registry.js +7 -0
  116. package/dist/hearth/control-plane/relay.d.ts +4 -0
  117. package/dist/hearth/control-plane/relay.js +72 -3
  118. package/dist/hearth/control-plane/secrets.d.ts +14 -0
  119. package/dist/hearth/control-plane/secrets.js +21 -0
  120. package/dist/hearth/control-plane/server.js +140 -4
  121. package/dist/hearth/control-plane/serving.d.ts +15 -0
  122. package/dist/hearth/control-plane/serving.js +106 -0
  123. package/dist/hearth/control-plane/types.d.ts +20 -0
  124. package/dist/hearth/control-plane/wake.d.ts +8 -2
  125. package/dist/hearth/control-plane/wake.js +241 -3
  126. package/dist/pi-extensions/canvas-doc-substrate.js +2 -3
  127. package/dist/types.d.ts +57 -1
  128. package/dist/types.js +83 -1
  129. package/dist/web-client/assets/{index-MSKSWwV0.js → index-CbO8L0mN.js} +4 -4
  130. package/dist/web-client/assets/index-DwO46Cs5.css +2 -0
  131. package/dist/web-client/index.html +2 -2
  132. package/package.json +2 -2
  133. package/dist/builtin-memory/crouter-development/personas/base-prompt.md +0 -56
  134. package/dist/builtin-memory/crouter-development/personas/orchestrator-prompt.md +0 -57
  135. package/dist/builtin-memory/crouter-development/personas.md +0 -112
  136. package/dist/builtin-personas/spine/no-manager.md +0 -2
  137. package/dist/core/personas/index.d.ts +0 -13
  138. package/dist/core/personas/index.js +0 -11
  139. package/dist/core/personas/loader.d.ts +0 -159
  140. package/dist/core/personas/loader.js +0 -327
  141. package/dist/core/personas/resolve.d.ts +0 -59
  142. package/dist/core/personas/resolve.js +0 -376
  143. package/dist/web-client/assets/index-DUThOUzU.css +0 -2
@@ -74,7 +74,7 @@ In order to be iterable, non-array objects must have a [Symbol.iterator]() metho
74
74
  `)){let t=e.indexOf(`
75
75
  ---
76
76
  `,4);if(t!==-1){let n=e.slice(4,t),r=e.slice(t+5),i=n.split(`
77
- `).map(e=>{let t=e.indexOf(`:`);return t<1?null:{key:e.slice(0,t).trim(),val:e.slice(t+1).trim()}}).filter(Boolean);return(0,z.jsxs)(z.Fragment,{children:[i.length>0&&(0,z.jsx)(`div`,{className:`fm-chips`,children:i.map(({key:e,val:t})=>(0,z.jsxs)(`span`,{className:`fm-chip`,children:[e,` `,(0,z.jsx)(`b`,{children:t})]},e))}),(0,z.jsx)(`div`,{className:qw,dangerouslySetInnerHTML:{__html:NC(r)}})]})}}return(0,z.jsx)(`div`,{className:qw,dangerouslySetInnerHTML:{__html:NC(e)}})}var Zw=[`off`,`minimal`,`low`,`medium`,`high`,`xhigh`],Qw=e=>({"--i":e}),$w={borderBottom:`1px solid var(--line)`,background:`linear-gradient(180deg, rgba(33,31,25,.7), rgba(20,19,16,0))`};function eT(e){let t=lt(),n=Eh(e.id),[r,i]=(0,S.useState)(null),[a,o]=(0,S.useState)(``),[s,c]=(0,S.useState)(!1),[l,u]=(0,S.useState)(null),[d,f]=(0,S.useState)(null),[p,m]=(0,S.useState)(null),h=n.source===`static`,g=n.brokerStatus===`connected`||n.brokerStatus===`revived`,_=n.role===`controller`,v=n.state?.isStreaming??!1,y=_&&!h&&g&&n.serverConnected,b=Rh(`node.arbitration`),x=Rh(`node.internals`),C=Rh(`commands.palette`),w=Ih().nav[0]??{label:`Home`,path:`/`},T=n.commands,E=!b&&!h&&g&&n.role===`observer`&&!!n.presence.controller;(0,S.useEffect)(()=>{let t=!1;return Wf(e.id).then(e=>{t||i(e)}).catch(e=>{t||u(lT(e))}),()=>{t=!0}},[e.id]);let D=(0,S.useRef)(0);(0,S.useEffect)(()=>{D.current=0},[e.id]),(0,S.useEffect)(()=>{if(!Tg({dormant:h,status:r?.status,socketReady:n.socketReady,attempt:D.current}))return;let e=D.current;D.current+=1;let t=setTimeout(()=>n.reconnect(),Eg(e));return()=>clearTimeout(t)},[h,r?.status,n.socketReady,n.reconnect]);let O=(0,S.useRef)(null);(0,S.useEffect)(()=>{n.socketReady||(O.current=null)},[n.socketReady]),(0,S.useEffect)(()=>{b||h||!n.socketReady||!g||n.role!==`controller`&&O.current!==e.id&&(O.current=e.id,n.requestControl())},[b,h,n.socketReady,g,n.role,e.id,n]),(0,S.useEffect)(()=>{let e=e=>{!e.altKey||e.metaKey||e.ctrlKey||e.code!==`KeyD`||document.activeElement instanceof HTMLTextAreaElement||(e.preventDefault(),HC())};return window.addEventListener(`keydown`,e),()=>window.removeEventListener(`keydown`,e)},[]),(0,S.useEffect)(()=>{let e=!1;return Qh().then(t=>{e||m(t)}).catch(()=>null),()=>{e=!0}},[e.id]);let k=()=>{let e=a.trim();!e||!y||(v?n.steer(e):n.prompt(e),o(``))},A=e=>{Lm(e,o,k)},j=e=>{o(`/${e.name} `)},M=async()=>{c(!0),u(null);try{await Jf(e.id),n.reconnect()}catch(e){u(lT(e))}finally{c(!1)}},N=async()=>{u(null);try{await Yf(e.id)}catch(e){u(lT(e))}},P=Bh(`steer`),F={header:{render:()=>(0,z.jsx)(Gh,{store:n,detail:r})},chrome:{cap:`node.internals`,render:()=>(0,z.jsx)(eg,{store:n,detail:r,hearthStatus:p})},stream:{render:()=>(0,z.jsx)(Bw,{messages:n.messages,streaming:v})},arbitration:{cap:`node.arbitration`,render:()=>(0,z.jsx)(Sg,{store:n})},rail:{cap:`subnodes.activity`,render:()=>(0,z.jsx)(Uw,{rootId:e.id})},graphRail:{cap:`node.graphRail`,render:()=>(0,z.jsx)(fg,{currentId:e.id,onNavigate:e=>t(`/nodes/${e}`)})},filePeek:{cap:`files.peek`,render:()=>(0,z.jsx)(Jw,{nodeId:e.id,path:d,onClose:()=>f(null)})},composer:{render:()=>h?(0,z.jsx)(oT,{id:e.id,reviving:s,onRevive:M,onClose:N}):(0,z.jsxs)(z.Fragment,{children:[(0,z.jsx)(Og,{cap:`node.internals`,children:(0,z.jsx)(aT,{store:n,canDrive:y,streaming:v,onClose:N})}),!x&&v&&(0,z.jsxs)(`div`,{className:`flex shrink-0 items-center gap-2 border-t border-border px-4 py-2 text-sm text-success`,children:[(0,z.jsx)(`span`,{className:`size-1.5 animate-pulse rounded-full bg-success`}),`Agent is working…`,(0,z.jsx)(Z,{variant:`secondary`,size:`sm`,className:`ml-auto`,disabled:!y,onClick:()=>n.abort(),children:`Stop`})]}),(0,z.jsxs)(`div`,{className:`relative flex shrink-0 flex-col gap-2 border-t border-border px-4 py-3`,children:[C&&(0,z.jsx)(Ag,{commands:T,query:a,visible:a.startsWith(`/`),onSelect:j}),(0,z.jsx)(Np,{className:Y(`resize-none text-sm`,x&&`font-mono`),value:a,onChange:e=>o(e.currentTarget.value),onKeyDown:A,disabled:!y,placeholder:rT(x,C,_,g),rows:3}),(0,z.jsxs)(`div`,{className:`flex items-center justify-end gap-2`,children:[(0,z.jsx)(Og,{cap:`node.internals`,children:(0,z.jsx)(sT,{id:e.id})}),(0,z.jsx)(Z,{variant:`default`,onClick:k,disabled:!y||!a.trim(),children:v?P:`Send`})]})]})]})}};return(0,z.jsx)(rw.Provider,{value:{peekedPath:d,onPeek:f},children:(0,z.jsxs)(`div`,{className:`in flex h-full min-h-0 flex-col`,children:[(0,z.jsxs)(`div`,{className:Y(`con-head rv flex shrink-0 items-center gap-3 px-6 py-4`,h&&`opacity-80`),style:{...$w,...Qw(1)},children:[(0,z.jsxs)(`button`,{type:`button`,onClick:()=>t(w.path),className:`flex shrink-0 items-center gap-1.5 text-sm text-muted-foreground transition-colors hover:text-[var(--ink)]`,children:[(0,z.jsx)(uf,{className:`size-4`}),w.label]}),(0,z.jsx)(Dg,{reg:F,name:`header`}),(0,z.jsx)(`div`,{className:`flex-1`}),(0,z.jsx)(nT,{}),(0,z.jsx)(Dg,{reg:F,name:`arbitration`})]}),(0,z.jsx)(`div`,{className:`rv`,style:Qw(2),children:(0,z.jsx)(Dg,{reg:F,name:`chrome`})}),(0,z.jsx)(iT,{state:n.brokerStatus,dormant:h}),E&&(0,z.jsx)(`div`,{className:`border-b border-border bg-muted/40 px-4 py-2 text-sm text-muted-foreground`,children:`Someone else is steering this conversation.`}),n.error&&x&&(0,z.jsxs)(`div`,{className:`border-b border-destructive/30 bg-destructive/15 px-4 py-2 text-sm text-destructive`,children:[n.error.code,`: `,n.error.message]}),l&&(0,z.jsx)(`div`,{className:`border-b border-destructive/30 bg-destructive/15 px-4 py-2 text-sm text-destructive`,children:x?l:`Something went wrong — please try again.`}),(0,z.jsx)(Gw,{conversationId:e.id}),(0,z.jsxs)(`div`,{className:`streamwrap relative flex min-h-0 flex-1 overflow-hidden`,children:[(0,z.jsx)(Dg,{reg:F,name:`graphRail`}),(0,z.jsxs)(`div`,{className:`flex min-w-0 flex-1 flex-col`,children:[(0,z.jsx)(`main`,{className:`min-h-0 flex-1 overflow-auto`,children:(0,z.jsx)(Dg,{reg:F,name:`stream`})}),(0,z.jsx)(Dg,{reg:F,name:`rail`}),(0,z.jsx)(Dg,{reg:F,name:`composer`})]}),(0,z.jsx)(Dg,{reg:F,name:`filePeek`})]}),(0,z.jsx)(Dg,{reg:F,name:`trace`}),(0,z.jsx)(Og,{cap:`node.internals`,children:(0,z.jsx)(ig,{store:n,detail:r})}),(0,z.jsx)(Ng,{store:n})]})})}var tT=[{value:`focused`,label:`Focused`},{value:`standard`,label:`Standard`},{value:`verbose`,label:`Verbose`}];function nT(){let e=WC();return(0,z.jsxs)(`div`,{className:`flex shrink-0 items-center gap-2`,title:`Transcript detail — Focused / Standard / Verbose (⌥D to cycle)`,children:[(0,z.jsx)(`span`,{className:`instlabel`,children:`Detail`}),(0,z.jsxs)(Ep,{value:e,onValueChange:e=>VC(e),children:[(0,z.jsx)(Op,{size:`sm`,className:`text-sm`,"aria-label":`Transcript detail`,children:(0,z.jsx)(Dp,{})}),(0,z.jsx)(kp,{children:tT.map(e=>(0,z.jsx)(Ap,{value:e.value,children:e.label},e.value))})]})]})}function rT(e,t,n,r){return e?n?r?t?`Type a prompt, or / for commands…`:`Type a prompt…`:`broker is down — input is frozen`:`observer — request control to drive this session`:r?`Message your agent`:`Reconnecting to your agent…`}function iT({state:e,dormant:t}){let n=!Rh(`diagnostics`);return t||e!==`down`&&e!==`reconnecting`?null:n?(0,z.jsx)(`div`,{className:`broker-banner border border-warning/30 bg-warning/15 px-4 py-2 text-sm`,children:`Reconnecting to your agent…`}):(0,z.jsx)(`div`,{className:[`broker-banner border px-4 py-2 text-sm`,e===`down`?`bg-destructive/15 text-destructive border-destructive/30`:`bg-warning/15 border-warning/30`].join(` `),children:e===`down`?`Broker is down — history frozen, input disabled. Waiting for auto-revive…`:`Reconnecting to the broker…`})}function aT({store:e,canDrive:t,streaming:n,onClose:r}){let[i,a]=(0,S.useState)(null),o=i??e.state?.thinkingLevel??`medium`,s=Bh(`compact`),c=Bh(`close`),l=Bh(`node`);return(0,z.jsxs)(`div`,{className:`flex shrink-0 flex-wrap items-center gap-2 border-t border-border px-4 py-2`,children:[(0,z.jsx)(Z,{variant:`secondary`,size:`sm`,disabled:!t||!n,onClick:()=>e.abort(),children:`Abort`}),(0,z.jsxs)(`label`,{className:`tiny-sel relative`,"aria-disabled":!t,children:[`thinking `,(0,z.jsx)(`b`,{children:o}),(0,z.jsx)(lf,{className:`size-3.5`}),(0,z.jsx)(`select`,{disabled:!t,value:o,onChange:t=>{let n=t.currentTarget.value;a(n),e.setThinkingLevel(n)},"aria-label":`Thinking level`,className:`absolute inset-0 cursor-pointer opacity-0`,children:Zw.map(e=>(0,z.jsx)(`option`,{value:e,children:e},e))})]}),(0,z.jsx)(Z,{variant:`ghost`,size:`sm`,disabled:!t,onClick:()=>e.cycleModel(),children:`Cycle model`}),(0,z.jsx)(Z,{variant:`ghost`,size:`sm`,disabled:!t,onClick:()=>e.compact(),children:s}),(0,z.jsx)(Og,{cap:`node.lifecycle.raw`,children:(0,z.jsxs)(Z,{variant:`destructive`,size:`sm`,className:`ml-auto`,onClick:r,children:[c,` `,l]})})]})}function oT({id:e,reviving:t,onRevive:n,onClose:r}){let i=zh(),a=Rh(`node.internals`),o=Bh(`node`),s=Bh(`revive`),c=Bh(`close`),l=[{key:`revive`,node:(0,z.jsx)(Z,{variant:`default`,disabled:t,onClick:n,children:t?`${s}…`:s})},{key:`close`,cap:`node.lifecycle.raw`,node:(0,z.jsxs)(Z,{variant:`destructive`,onClick:r,children:[c,` `,o]})}];return(0,z.jsxs)(`div`,{className:`flex shrink-0 flex-wrap items-center gap-2 border-t border-border px-4 py-3`,children:[(0,z.jsx)(`span`,{className:`text-muted-foreground text-sm`,children:a?`This ${o} is dormant (read-only). ${s} to drive it live.`:`This ${o} is finished. ${s} to keep going.`}),(0,z.jsx)(Og,{cap:`node.internals`,children:(0,z.jsx)(sT,{id:e})}),kg(l,i).map(e=>(0,z.jsx)(S.Fragment,{children:e.node},e.key))]})}function sT({id:e}){let[t,n]=(0,S.useState)(!1);return(0,z.jsxs)(z.Fragment,{children:[(0,z.jsx)(Z,{variant:`secondary`,onClick:()=>n(!0),children:`Message (inbox)`}),(0,z.jsx)(cT,{id:e,open:t,onOpenChange:n})]})}function cT({id:e,open:t,onOpenChange:n}){let[r,i]=(0,S.useState)(``),[a,o]=(0,S.useState)(``),[s,c]=(0,S.useState)(!1),[l,u]=(0,S.useState)(null);return(0,S.useEffect)(()=>{t&&(i(``),o(``),u(null))},[t]),(0,z.jsx)(gp,{open:t,onOpenChange:n,children:(0,z.jsxs)(yp,{children:[(0,z.jsxs)(bp,{children:[(0,z.jsx)(Sp,{children:`Send an inbox message`}),(0,z.jsx)(Cp,{children:`A directive deliverable to any node, including a dormant one.`})]}),(0,z.jsxs)(`form`,{onSubmit:async t=>{if(t.preventDefault(),r.trim()){c(!0),u(null);try{let t=await qf(e,{body:r.trim(),...a.trim()?{tier:a.trim()}:{}});u(`delivered=${String(t.delivered)} revived=${String(t.revived)}`),i(``)}catch(e){u(lT(e))}finally{c(!1)}}},className:`flex flex-col gap-3`,children:[(0,z.jsx)(Np,{value:r,onChange:e=>i(e.currentTarget.value),rows:4,required:!0,placeholder:`Message body…`}),(0,z.jsxs)(`label`,{className:`flex flex-col gap-1 text-sm`,children:[`tier`,(0,z.jsx)(`input`,{className:`rounded border bg-transparent px-2 py-1 text-sm`,value:a,onChange:e=>o(e.currentTarget.value),placeholder:`(default)`})]}),l&&(0,z.jsx)(`p`,{className:`text-muted-foreground text-sm`,children:l}),(0,z.jsxs)(xp,{children:[(0,z.jsx)(Z,{type:`button`,variant:`secondary`,onClick:()=>n(!1),disabled:s,children:`Close`}),(0,z.jsx)(Z,{type:`submit`,variant:`default`,disabled:s,children:s?`Sending…`:`Send`})]})]})]})})}function lT(e){return e instanceof Bf?`${e.code}: ${e.message}`:String(e)}function uT(){let{decks:e,loading:t}=Jp();return(0,z.jsxs)(`div`,{className:`mx-auto flex h-full min-h-0 max-w-3xl flex-col px-6 py-8`,children:[(0,z.jsxs)(`div`,{className:`mb-6 flex items-center gap-3`,children:[(0,z.jsx)(`h1`,{className:`text-3xl`,style:{fontFamily:`var(--font-display)`,fontWeight:460,letterSpacing:`-0.01em`,color:`var(--ink)`},children:`Inbox`}),e.length>0&&(0,z.jsx)(`span`,{className:`text-xs`,style:{fontFamily:`var(--font-inst)`,fontWeight:600,color:`#ff8260`,background:`var(--blk-dim)`,border:`1px solid rgba(255,94,54,.35)`,padding:`1.5px 7px`,borderRadius:`99px`},children:e.length})]}),(0,z.jsx)(`div`,{className:`min-h-0 flex-1 overflow-auto`,children:t?(0,z.jsx)(mT,{}):e.length===0?(0,z.jsx)(pT,{}):(0,z.jsx)(`ul`,{className:`flex flex-col gap-2.5`,children:e.map(e=>(0,z.jsx)(dT,{deck:e},e.id))})})]})}function dT({deck:e}){let t=lt(),n=Zp(e.kind),r=n.icon;return(0,z.jsx)(`li`,{className:`list-none`,children:(0,z.jsxs)(`button`,{type:`button`,onClick:()=>t(`/inbox/${encodeURIComponent(e.job_id)}`),className:`panel flex w-full items-start gap-4 px-4 py-3.5 text-left transition-colors hover:bg-[color-mix(in_oklch,var(--ink)_3%,transparent)] focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring`,children:[(0,z.jsx)(`span`,{className:`mt-0.5 inline-flex size-9 shrink-0 items-center justify-center rounded-lg`,style:{border:`1px solid var(--line)`,color:`var(--ink2)`,background:`color-mix(in oklch, var(--ink) 4%, transparent)`},title:n.label,children:(0,z.jsx)(r,{className:`size-4.5`})}),(0,z.jsxs)(`div`,{className:`min-w-0 flex-1`,children:[(0,z.jsxs)(`div`,{className:`flex items-center gap-2.5`,children:[(0,z.jsx)(`span`,{className:`truncate text-sm`,style:{fontWeight:500,color:`var(--ink)`},children:e.title}),(0,z.jsx)(`span`,{className:`instlabel shrink-0`,children:n.label})]}),e.subtitle&&(0,z.jsx)(`p`,{className:`mt-0.5 truncate text-sm`,style:{color:`var(--mut)`},children:e.subtitle}),(0,z.jsx)(fT,{deck:e,className:`mt-1.5`})]}),(0,z.jsx)(`span`,{className:`shrink-0 text-xs`,style:{fontFamily:`var(--font-inst)`,letterSpacing:`0.08em`,color:`var(--mut)`},title:`waiting ${Qp(e.blocked_since)}`,children:Qp(e.blocked_since)})]})})}function fT({deck:e,className:t}){let n=Rh(`node.internals`);return(0,z.jsxs)(`div`,{className:Y(`flex flex-wrap items-center gap-x-2 gap-y-0.5 text-xs`,t),children:[(0,z.jsxs)(`span`,{className:`text-muted-foreground`,children:[`in `,(0,z.jsx)(`span`,{className:`font-medium text-foreground/80`,children:e.conversation_title})]}),n&&(0,z.jsxs)(z.Fragment,{children:[(0,z.jsx)(`span`,{className:`text-muted-foreground/40`,children:`·`}),(0,z.jsxs)(kn,{to:`/nodes/${encodeURIComponent(e.asking_node_id)}`,onClick:e=>e.stopPropagation(),className:`font-mono text-muted-foreground hover:text-primary hover:underline`,title:e.cwd,children:[e.asking_node_name,` (`,e.asking_node_id,`)`]}),(0,z.jsx)(`span`,{className:`text-muted-foreground/40`,children:`·`}),(0,z.jsx)(`span`,{className:`font-mono text-muted-foreground/60`,title:e.cwd,children:e.cwd})]})]})}function pT(){return(0,z.jsxs)(`div`,{className:`flex h-full flex-col items-center justify-center py-16 text-center`,children:[(0,z.jsx)(`p`,{className:`text-2xl`,style:{fontFamily:`var(--font-display)`,fontStyle:`italic`,color:`var(--ink)`},children:`You're all caught up.`}),(0,z.jsx)(`p`,{className:`mt-1.5 text-sm`,style:{color:`var(--mut)`},children:`Nothing needs your input right now.`})]})}function mT(){return(0,z.jsx)(`ul`,{className:`flex flex-col gap-2.5`,children:[0,1,2].map(e=>(0,z.jsxs)(`li`,{className:`panel flex items-center gap-4 px-4 py-3.5`,children:[(0,z.jsx)(`div`,{className:`size-9 shrink-0 animate-pulse rounded-lg bg-muted`}),(0,z.jsxs)(`div`,{className:`min-w-0 flex-1 space-y-2`,children:[(0,z.jsx)(`div`,{className:`h-4 w-1/3 animate-pulse rounded bg-muted`}),(0,z.jsx)(`div`,{className:`h-3 w-2/3 animate-pulse rounded bg-muted/70`})]})]},e))})}function hT({deckId:e}){let t=lt(),[n,r]=(0,S.useState)(null),[i,a]=(0,S.useState)(!0),[o,s]=(0,S.useState)(null),[c,l]=(0,S.useState)({}),[u,d]=(0,S.useState)(!1),[f,p]=(0,S.useState)(0);(0,S.useEffect)(()=>{let n=!1;return r(null),l({}),s(null),d(!1),a(!0),Wp(e).then(e=>{n||(r(e),l(Object.fromEntries(e.interactions.map(e=>[e.id,{id:e.id}]))),a(!1))}).catch(e=>{if(!n){if(Ip(e)){tm(e instanceof Bf?e.message:`That request was already handled.`),t(`/inbox`,{replace:!0});return}s(e instanceof Error?e:Error(`Failed to load deck.`)),a(!1)}}),()=>{n=!0}},[e,t,f]);let m=(e,t)=>l(n=>({...n,[e]:{...n[e],id:e,...t}}));if(i)return(0,z.jsx)(OT,{});if(o)return(0,z.jsx)(gT,{error:o,onRetry:()=>p(e=>e+1),onBack:()=>t(`/inbox`)});if(!n)return(0,z.jsx)(OT,{});let h=async e=>{if(u)return;d(!0);let r=Object.values(e??c).map(({selectedOptionId:e,...t})=>t);try{await Gp(n.job_id,{responses:r}),tm(`Done — thanks!`,`success`),t(`/inbox`,{replace:!0})}catch(e){if(Ip(e)){tm(e instanceof Bf?e.message:`That request was already handled.`),t(`/inbox`,{replace:!0});return}tm(e instanceof Bf?e.message:`Something went wrong — try again.`),d(!1)}},g=n.interactions.length===1?n.interactions[0]:null,_=Zp(n.kind).icon;return(0,z.jsxs)(`div`,{className:`mx-auto flex h-full min-h-0 max-w-2xl flex-col px-6 py-8`,children:[(0,z.jsxs)(`button`,{type:`button`,onClick:()=>t(`/inbox`),className:`mb-4 inline-flex items-center gap-1.5 text-sm text-muted-foreground hover:text-foreground`,children:[(0,z.jsx)(af,{className:`size-4`}),` Inbox`]}),(0,z.jsxs)(`header`,{className:`mb-5 flex items-start gap-3`,children:[(0,z.jsx)(`span`,{className:`mt-0.5 inline-flex size-10 shrink-0 items-center justify-center rounded-lg`,style:{border:`1px solid var(--line)`,color:`var(--ink2)`,background:`color-mix(in oklch, var(--ink) 4%, transparent)`},children:(0,z.jsx)(_,{className:`size-5`})}),(0,z.jsxs)(`div`,{className:`min-w-0`,children:[(0,z.jsx)(`h1`,{className:`text-2xl`,style:{fontFamily:`var(--font-display)`,fontWeight:460,letterSpacing:`-0.01em`,color:`var(--ink)`},children:n.title}),n.subtitle&&(0,z.jsx)(`p`,{className:`mt-0.5 text-sm`,style:{color:`var(--mut)`},children:n.subtitle}),(0,z.jsx)(fT,{deck:n,className:`mt-2`})]})]}),(0,z.jsx)(`div`,{className:`min-h-0 flex-1 overflow-auto`,children:(0,z.jsx)(`div`,{className:`flex flex-col gap-6`,children:n.interactions.map(e=>(0,z.jsx)(yT,{interaction:e,answer:c[e.id]??{id:e.id},onChange:t=>m(e.id,t),conversationId:n.conversation_id,busy:u,onResolveWith:g?t=>void h({[e.id]:t}):void 0},e.id))})}),!_T(g)&&(0,z.jsxs)(`footer`,{className:`mt-6 flex shrink-0 items-center justify-end gap-2 border-t border-border pt-4`,children:[(0,z.jsx)(Z,{variant:`ghost`,onClick:()=>t(`/inbox`),disabled:u,children:`Cancel`}),(0,z.jsx)(Z,{onClick:()=>void h(),disabled:u||!vT(n,c),children:u?`Sending…`:`Submit`})]})]})}function gT({error:e,onRetry:t,onBack:n}){return(0,z.jsx)(`div`,{className:`mx-auto flex h-full min-h-0 max-w-2xl flex-col justify-center px-6 py-8`,children:(0,z.jsxs)(`section`,{className:`panel p-5`,children:[(0,z.jsx)(`h1`,{className:`text-lg font-semibold`,children:`Couldn’t load the deck`}),(0,z.jsx)(`p`,{className:`mt-2 text-sm text-muted-foreground`,children:e.message}),(0,z.jsxs)(`div`,{className:`mt-4 flex gap-2`,children:[(0,z.jsx)(Z,{onClick:t,children:`Retry`}),(0,z.jsx)(Z,{variant:`ghost`,onClick:n,children:`Back to inbox`})]})]})})}function _T(e){return e!==null&&(e.kind===`notify`||e.kind===`validation`)}function vT(e,t){return e.interactions.every(e=>{let n=t[e.id];if(!n)return!1;if(e.kind===`notify`||e.kind===`error`)return!0;let r=!!n.selectedOptionIds?.length||!!n.freetext?.trim();return e.options.length===0&&!e.allowFreetext?!0:r})}function yT({interaction:e,answer:t,onChange:n,conversationId:r,busy:i,onResolveWith:a}){switch(e.kind){case`notify`:return(0,z.jsx)(CT,{interaction:e,onGotIt:()=>a?.({id:e.id}),direct:!!a});case`validation`:return(0,z.jsx)(wT,{interaction:e,answer:t,onChange:n,busy:i,onResolveWith:a});case`context`:return(0,z.jsx)(ET,{interaction:e,answer:t,onChange:n});case`error`:return(0,z.jsx)(DT,{interaction:e,answer:t,onChange:n,conversationId:r});default:return(0,z.jsx)(TT,{interaction:e,answer:t,onChange:n})}}function bT({body:e}){return e?(0,z.jsx)(`div`,{className:`prose prose-sm max-w-none text-sm text-foreground/85 dark:prose-invert`,dangerouslySetInnerHTML:{__html:DC(NC(e))}}):null}function xT({children:e,className:t}){return(0,z.jsx)(`section`,{className:Y(`panel p-5`,t),children:e})}function ST({it:e}){return(0,z.jsxs)(`div`,{className:`mb-3`,children:[(0,z.jsx)(`h2`,{className:`text-base font-semibold`,children:e.title}),e.subtitle&&(0,z.jsx)(`p`,{className:`mt-0.5 text-sm text-muted-foreground`,children:e.subtitle})]})}function CT({interaction:e,onGotIt:t,direct:n}){return(0,z.jsxs)(xT,{children:[(0,z.jsx)(ST,{it:e}),(0,z.jsx)(bT,{body:e.body}),n&&(0,z.jsx)(`div`,{className:`mt-4 flex justify-end`,children:(0,z.jsxs)(Z,{onClick:t,children:[(0,z.jsx)(cf,{className:`mr-1.5 size-4`}),` Got it`]})})]})}function wT({interaction:e,answer:t,onChange:n,busy:r,onResolveWith:i}){let a=e.options.find(e=>e.id===`yes`)??e.options[0],o=e.options.find(e=>e.id===`no`)??e.options[1],s=r=>{let a={...t,id:e.id,selectedOptionIds:[r]};i?i(a):n({selectedOptionIds:[r],selectedOptionId:void 0})};return(0,z.jsxs)(xT,{children:[(0,z.jsx)(ST,{it:e}),(0,z.jsx)(bT,{body:e.body}),(0,z.jsxs)(`div`,{className:`mt-4 flex flex-col gap-3`,children:[(0,z.jsx)(Np,{rows:2,value:t.freetext??``,onChange:e=>n({freetext:e.currentTarget.value}),placeholder:e.freetextLabel??`Add a comment (optional)`,className:`resize-none text-sm`}),(0,z.jsxs)(`div`,{className:`flex gap-3`,children:[(0,z.jsx)(Z,{className:`flex-1`,size:`lg`,disabled:r,onClick:()=>a&&s(a.id),children:a?.label??`Approve`}),(0,z.jsx)(Z,{className:`flex-1`,size:`lg`,variant:`outline`,disabled:r,onClick:()=>o&&s(o.id),children:o?.label??`Reject`})]}),!i&&t.selectedOptionIds?.[0]&&(0,z.jsxs)(`p`,{className:`text-xs text-muted-foreground`,children:[`Selected: `,e.options.find(e=>e.id===t.selectedOptionIds?.[0])?.label]})]})]})}function TT({interaction:e,answer:t,onChange:n}){let r=new Set(t.selectedOptionIds??[]),i=t=>{if(e.multiSelect){let e=new Set(r);e.has(t)?e.delete(t):e.add(t),n({selectedOptionIds:[...e],selectedOptionId:void 0})}else n({selectedOptionIds:[t],selectedOptionId:void 0})};return(0,z.jsxs)(xT,{children:[(0,z.jsx)(ST,{it:e}),(0,z.jsx)(bT,{body:e.body}),(0,z.jsx)(`ul`,{className:`mt-4 flex flex-col gap-2`,children:e.options.map(t=>{let n=r.has(t.id);return(0,z.jsx)(`li`,{children:(0,z.jsxs)(`button`,{type:`button`,onClick:()=>i(t.id),className:Y(`flex w-full items-start gap-3 rounded-xl border px-4 py-3 text-left transition-colors`,n?`border-primary bg-primary/5 ring-1 ring-primary`:`border-border hover:border-primary/40 hover:bg-accent/40`),children:[(0,z.jsx)(`span`,{className:Y(`mt-0.5 flex size-4 shrink-0 items-center justify-center border`,e.multiSelect?`rounded`:`rounded-full`,n?`border-primary bg-primary text-primary-foreground`:`border-muted-foreground/40`),children:n&&(0,z.jsx)(cf,{className:`size-3`})}),(0,z.jsxs)(`span`,{className:`min-w-0`,children:[(0,z.jsx)(`span`,{className:`block text-sm font-medium`,children:t.label}),t.description&&(0,z.jsx)(`span`,{className:`mt-0.5 block text-xs text-muted-foreground`,children:t.description})]})]})},t.id)})}),e.allowFreetext&&(0,z.jsx)(Np,{rows:2,value:t.freetext??``,onChange:e=>n({freetext:e.currentTarget.value}),placeholder:e.freetextLabel??`Anything else? (optional)`,className:`mt-3 resize-none text-sm`})]})}function ET({interaction:e,answer:t,onChange:n}){let r=t.selectedOptionIds?.[0];return(0,z.jsxs)(xT,{children:[(0,z.jsx)(ST,{it:e}),e.body&&(0,z.jsxs)(`div`,{className:`mb-4 rounded-xl border border-border p-3`,style:{background:`color-mix(in oklch, var(--ink) 3%, transparent)`},children:[(0,z.jsx)(`p`,{className:`instlabel mb-1.5`,children:`Why we're asking`}),(0,z.jsx)(bT,{body:e.body})]}),e.options.length>0&&(0,z.jsx)(`ul`,{className:`mb-3 flex flex-col gap-2`,children:e.options.map(e=>(0,z.jsx)(`li`,{children:(0,z.jsx)(`button`,{type:`button`,onClick:()=>n({selectedOptionIds:[e.id],selectedOptionId:void 0}),className:Y(`flex w-full items-start gap-3 rounded-xl border px-4 py-3 text-left transition-colors`,r===e.id?`border-primary bg-primary/5 ring-1 ring-primary`:`border-border hover:border-primary/40 hover:bg-accent/40`),children:(0,z.jsxs)(`span`,{className:`min-w-0`,children:[(0,z.jsx)(`span`,{className:`block text-sm font-medium`,children:e.label}),e.description&&(0,z.jsx)(`span`,{className:`mt-0.5 block text-xs text-muted-foreground`,children:e.description})]})})},e.id))}),(e.allowFreetext||e.options.length===0)&&(0,z.jsx)(Np,{autoFocus:!0,rows:3,value:t.freetext??``,onChange:e=>n({freetext:e.currentTarget.value}),placeholder:e.freetextLabel??`Your answer`,className:`resize-none text-sm`})]})}function DT({interaction:e,answer:t,onChange:n,conversationId:r}){let i=lt();return(0,z.jsxs)(xT,{className:`border-destructive/30`,children:[(0,z.jsx)(ST,{it:e}),(0,z.jsx)(bT,{body:e.body}),(0,z.jsxs)(`div`,{className:`mt-4 flex flex-col gap-2`,children:[e.options.map(e=>(0,z.jsx)(`button`,{type:`button`,onClick:()=>n({selectedOptionIds:[e.id],selectedOptionId:void 0}),className:Y(`flex w-full items-start gap-3 rounded-xl border px-4 py-3 text-left transition-colors`,t.selectedOptionIds?.[0]===e.id?`border-primary bg-primary/5 ring-1 ring-primary`:`border-border hover:border-primary/40 hover:bg-accent/40`),children:(0,z.jsxs)(`span`,{className:`min-w-0`,children:[(0,z.jsx)(`span`,{className:`block text-sm font-medium`,children:e.label}),e.description&&(0,z.jsx)(`span`,{className:`mt-0.5 block text-xs text-muted-foreground`,children:e.description})]})},e.id)),(0,z.jsx)(`button`,{type:`button`,onClick:()=>i(`/c/${encodeURIComponent(r)}`),className:`flex w-full items-center gap-2 rounded-xl border border-border px-4 py-3 text-left text-sm font-medium transition-colors hover:border-primary/40 hover:bg-accent/40`,children:`Take over — open the conversation`})]})]})}function OT(){return(0,z.jsxs)(`div`,{className:`mx-auto flex h-full max-w-2xl flex-col gap-5 px-6 py-8`,children:[(0,z.jsx)(`div`,{className:`h-4 w-16 animate-pulse rounded bg-muted`}),(0,z.jsx)(`div`,{className:`h-7 w-1/2 animate-pulse rounded bg-muted`}),(0,z.jsx)(`div`,{className:`h-40 w-full animate-pulse rounded-2xl bg-muted/60`})]})}var kT=[`operator`,`studio`];function AT(){let e=Ih(),t=Lh();return(0,z.jsx)(`div`,{role:`group`,"aria-label":`Switch profile`,className:`inline-flex items-center rounded-md border border-border bg-card/50 p-0.5 text-xs`,children:kT.map(n=>{let r=e.id===n;return(0,z.jsx)(`button`,{type:`button`,"aria-pressed":r,onClick:()=>t(n),className:Y(`inline-flex h-8 items-center rounded px-3 font-medium transition-colors`,r?`bg-primary text-primary-foreground`:`text-muted-foreground hover:text-foreground`),children:Dh[n].label},n)})})}function jT(){let e=Ih(),[t,n]=(0,S.useState)(()=>e.defaultTheme===`dark`);return(0,z.jsxs)(`div`,{className:`mx-auto flex h-full min-h-0 max-w-2xl flex-col gap-8 overflow-auto px-6 py-8`,children:[(0,z.jsx)(`h1`,{className:`text-3xl`,style:{fontFamily:`var(--font-display)`,fontWeight:460,letterSpacing:`-0.01em`,color:`var(--ink)`},children:`Settings`}),(0,z.jsxs)(`section`,{className:`space-y-2.5`,children:[(0,z.jsx)(`h2`,{className:`instlabel`,children:`Profile`}),(0,z.jsx)(`p`,{className:`text-sm`,style:{color:`var(--mut)`},children:`Choose the experience. You can also switch from the header at any time.`}),(0,z.jsx)(AT,{})]}),(0,z.jsxs)(`section`,{className:`space-y-2.5`,children:[(0,z.jsx)(`h2`,{className:`instlabel`,children:`Appearance`}),(0,z.jsxs)(`p`,{className:`text-sm`,style:{color:`var(--mut)`},children:[t?`Dark theme`:`Light theme`,` is active.`]}),(0,z.jsxs)(Z,{variant:`outline`,onClick:()=>{let e=document.documentElement,t=!e.classList.contains(`dark`);e.classList.toggle(`dark`,t),e.classList.toggle(`light`,!t),n(t)},children:[`Switch to `,t?`light`:`dark`]})]})]})}function MT(e){return e.busy?`working`:e.banner?.level===`error`?`blocked`:e.banner?.level===`action`?`attention`:e.loaded?`ready`:`idle`}function NT(){return{status:null,banner:null,subtitle:null,mode:null,busy:!1,loaded:!1,lastRefresh:0}}var PT={working:`working`,blocked:`blocked`,attention:`attention`,ready:`ready`,idle:`idle`},FT={working:`bg-blue-500`,blocked:`bg-red-500`,attention:`bg-amber-500`,ready:`bg-green-500`,idle:`bg-slate-400`},IT={info:`bg-slate-100 text-slate-800 border-slate-300`,action:`bg-amber-100 text-amber-900 border-amber-300`,error:`bg-red-100 text-red-900 border-red-300`};function LT({chrome:e,title:t,children:n}){let r=e.mode?`attention`:MT(e);return(0,z.jsxs)(`div`,{className:`min-h-screen bg-white text-slate-900`,children:[(0,z.jsxs)(`header`,{className:`flex items-center gap-3 border-b border-slate-200 px-4 py-2`,children:[(0,z.jsx)(`h1`,{className:`font-mono text-sm font-semibold`,children:t}),e.subtitle?(0,z.jsxs)(`span`,{className:`font-mono text-xs text-slate-400`,children:[`· `,e.subtitle]}):null,e.mode?(0,z.jsx)(`span`,{className:`rounded-full bg-slate-800 px-2 py-0.5 text-xs text-white`,children:e.mode}):null,(0,z.jsxs)(`span`,{className:`ml-auto flex items-center gap-2 text-xs text-slate-500`,children:[e.busy?(0,z.jsx)(`span`,{className:`inline-block h-3 w-3 animate-spin rounded-full border-2 border-slate-300 border-t-slate-600`}):null,(0,z.jsx)(`span`,{className:`inline-block h-2 w-2 rounded-full ${FT[r]}`}),(0,z.jsx)(`span`,{children:PT[r]})]})]}),e.banner?(0,z.jsx)(`div`,{className:`border-b px-4 py-1.5 font-mono text-xs ${IT[e.banner.level]}`,children:e.banner.msg}):null,(0,z.jsx)(`main`,{className:`px-4 py-3`,children:n}),e.status?(0,z.jsx)(`footer`,{className:`border-t border-slate-200 px-4 py-1.5 font-mono text-xs text-slate-500`,children:e.status}):null]})}function RT(e){return typeof e==`object`&&!!e}function zT(e){return typeof e==`string`?e:``}function BT(e){let t=e??``;return/rate.?limit|\b429\b|too many requests|quota/i.test(t)?`rate-limit`:/overloaded|\b529\b|\b503\b|capacity|server.{0,3}busy|temporarily unavailable/i.test(t)?`overloaded`:/connection|econnreset|etimedout|enotfound|econnrefused|network|fetch failed|socket hang|timed? out|timeout/i.test(t)?`connection`:`other`}function VT(e){let t=zT(e.code)||zT(e.errno);return t===``?null:/^(ECONNREFUSED|ECONNRESET|ETIMEDOUT|ENOENT|ENOTFOUND|EAI_AGAIN|EPIPE|EHOSTUNREACH|ENETUNREACH)$/i.test(t)?`connection`:null}function HT(e){let t=typeof e.status==`number`?e.status:null;return t===null?null:t===401||t===403?`auth`:t===429?`rate-limit`:t===503||t===529||t>=500&&t<=599?`overloaded`:t>=400&&t<=499?`protocol`:null}function UT(e){let t=typeof e.code==`number`?e.code:null;if(t===null)return null;if(t===1008)return`protocol`;if(t===1006)return`connection`;if(t===1011){let t=zT(e.reason);return/no running broker/i.test(t)||BT(t)===`connection`?`connection`:`other`}return null}function WT(e,t){return t===`auth`||t===`protocol`?`fatal`:e===`pi→provider`?t===`connection`||t===`rate-limit`||t===`overloaded`?`auto`:`fatal`:`manual`}function GT(e){if(typeof e==`string`)return e;if(!RT(e))return``;let t=[e.message,e.errorMessage,e.reason,e.body,e.statusText];for(let e of t)if(typeof e==`string`&&e!==``)return e;let n=e.error;if(RT(n)){let e=n.message;if(typeof e==`string`&&e!==``)return e;let t=n.reason;if(typeof t==`string`&&t!==``)return t}return``}function KT(e,t){if(RT(t)){let n=VT(t);if(n!==null)return{kind:n,disposition:WT(e,n)};let r=HT(t);if(r!==null)return{kind:r,disposition:WT(e,r)};let i=UT(t);if(i!==null)return{kind:i,disposition:WT(e,i)}}let n=BT(GT(t));return{kind:n,disposition:WT(e,n)}}function qT(e){let t=new URL(`/node/${encodeURIComponent(e)}`,window.location.href);t.protocol=location.protocol===`https:`?`wss:`:`ws:`;let n=new URLSearchParams(window.location.search).get(`token`);return n!==null&&n!==``&&t.searchParams.set(`token`,n),t}function JT(e){let t=KT(`browser↔relay`,{code:e.code,reason:e.reason});return e.code===1008||t.kind===`protocol`?`invalid`:e.code===1011&&/^no node /.test(e.reason)?`no-node`:e.code===1011&&/^no running broker/.test(e.reason)?`no-broker`:`transient`}function YT(e){return{kind:`browser-stream-no-broker`,display:{headline:`node ${e} is asleep or has no running broker`,explanation:`This browser stream connects only to an already-running local broker.`,nextStep:`Run crtr node focus ${e} or crtr canvas revive ${e}, then reconnect.`,level:`error`,blocking:!1}}}function XT(e){return{kind:`browser-stream-no-node`,display:{headline:`node ${e} does not exist`,explanation:`The browser relay could not find a live node with that id.`,nextStep:`Choose a valid node id, then reconnect.`,level:`error`,blocking:!1}}}function ZT(e){return{kind:`browser-stream-invalid`,display:{headline:`node ${e} was rejected by the relay`,explanation:`The browser relay closed the stream because the request was not valid.`,nextStep:`Fix the node id or connection parameters, then reconnect.`,level:`error`,blocking:!1}}}function QT(e,t){let n=globalThis.crypto.randomUUID(),r=null,i=!1,a=!1,o=null,s=200,c=()=>{o!==null&&(window.clearTimeout(o),o=null)},l=(e,n)=>{if(!a){if(a=!0,c(),r=null,n!==void 0)try{t.onError(n)}catch{}try{t.onClose(e)}catch{}}},u=()=>{i||a||(c(),o=window.setTimeout(()=>{o=null,!i&&!a&&d()},s),s=Math.min(s*2,1e3))},d=()=>{if(i||a)return;let o=qT(e.target),c;try{c=new WebSocket(o)}catch{u();return}r=c,c.onopen=()=>{if(!(i||a)){s=200;try{c.send(JSON.stringify({type:`hello`,role:e.role??`controller`,client_id:n}))}catch{}}},c.onmessage=e=>{if(typeof e.data!=`string`)return;let n;try{n=JSON.parse(e.data)}catch{return}try{t.onFrame(n)}catch{}},c.onclose=t=>{r===c&&(r=null);let n=t.reason||`closed (${t.code})`;if(i){l(n);return}let a=JT(t);if(a===`transient`){u();return}if(a===`no-broker`){l(n,YT(e.target));return}if(a===`no-node`){l(n,XT(e.target));return}l(n,ZT(e.target))},c.onerror=()=>{}},f={id:n,send(e){let t=r;if(!(t===null||t.readyState!==WebSocket.OPEN))try{t.send(JSON.stringify(e))}catch{}},close(){i=!0,c();let e=r;if(e===null){l(`closed by view`);return}if(e.readyState===WebSocket.CLOSED){l(`closed by view`);return}try{e.close()}catch{l(`closed by view`)}}};return d(),f}function $T(e=`/__crtr/source`){return{async send(t){try{let n=await fetch(e,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify(t)});return n.ok?await n.json():{ok:!1,stdout:``,stderr:`bridge ${n.status} ${n.statusText}`}}catch(e){return{ok:!1,stdout:``,stderr:e instanceof Error?e.message:String(e)}}},open(e,t){return QT(e,t)}}}function eE(e,t={}){let n=$T(t.endpoint),r=Object.freeze({...t.options??{}}),i=e.init(r),a=NT(),o=t.onIntent,s=0,c=new Set,l=()=>{s+=1;for(let e of c)e()},u=e=>(c.add(e),()=>{c.delete(e)}),d=e=>{a={...a,...e},l()},f={setStatus:e=>d({status:e}),setBanner:(e,t)=>d({banner:{msg:e,level:t}}),clearBanner:()=>d({banner:null}),setSubtitle:e=>d({subtitle:e}),setMode:e=>d({mode:e}),quit:()=>{}},p=new Set,m=0,h=!1,g=null,_=0,v=!1,y=[],b=()=>({get state(){return i},set(e){i=typeof e==`function`?e(i):e,l()},async resolve(e,t){let r=await n.send(e.request(t));return e.parse(r)},async execute(e,t){let r=await n.send(e.request(t));return e.parse(r)},connect(e,t){let r=m,i;return i=n.open(e.request(t),{onFrame(t){r===m&&C(e.onFrame,t)},onClose(t){r===m&&(p.delete(i),e.onClose&&C(e.onClose,{reason:t,channelId:i.id}))},onError(e){r===m&&d({banner:{msg:e.display.headline,level:e.display.level}})}}),p.add(i),e.onOpen&&C(e.onOpen,i),i},signal:f,dispatch(e,t){return T(e,t)}});function x(){v||(v=!0,S())}async function S(){try{for(;h&&y.length>0;){if(_>0)return;let e=y.shift();try{await T(e.intent,e.payload),e.resolve()}catch(t){e.reject(t)}}}finally{v=!1,h&&y.length>0&&_===0&&x()}}function C(e,t){return h?new Promise((n,r)=>{y.push({intent:e,payload:t,resolve:n,reject:r}),x()}):Promise.resolve()}function w(e){if(e===`refresh`){a={...a,busy:_>0,loaded:!0,lastRefresh:Date.now()},l();return}a={...a,busy:_>0},l()}async function T(t,n){if(!h)return;o?.(t,n,i);let r=e.intents[t];if(!r){console.warn(`[crtr view] unknown intent: ${t}`);return}let s;try{s=r(b(),n)}catch(e){throw console.warn(`[crtr view] intent ${t} threw:`,e),e}if(s instanceof Promise){let e=_>0;_+=1,e||d({busy:!0});try{await s}finally{--_,a={...a,busy:_>0,loaded:a.loaded||t===`refresh`,lastRefresh:Date.now()},l(),_===0&&h&&y.length>0&&x()}return}w(t)}let E=()=>{_===0&&C(`refresh`)};function D(){if(h)return;h=!0,m+=1,i=e.init(r),a=NT(),y=[],v=!1,C(`refresh`);let t=e.manifest.refreshMs;typeof t==`number`&&t>0&&(g=setInterval(E,t))}function O(){if(!h)return;h=!1,m+=1;let e=Array.from(p);for(let t of e)try{t.close()}catch{}if(p.clear(),g&&=(clearInterval(g),null),y.length>0){let e=Error(`view stopped`);for(let t of y)t.reject(e);y=[]}v=!1}return{getState:()=>i,getChrome:()=>a,dispatch:C,refresh:E,subscribe:u,getVersion:()=>s,start:D,stop:O,get onIntent(){return o},set onIntent(e){o=e}}}function tE(e,t={}){let n=(0,S.useRef)(null);n.current===null&&(n.current=eE(e,{options:t.options,endpoint:t.endpoint}));let r=n.current;return r.onIntent=t.onIntent,(0,S.useSyncExternalStore)(r.subscribe,r.getVersion,r.getVersion),(0,S.useEffect)(()=>(r.start(),()=>r.stop()),[r]),{state:r.getState(),chrome:r.getChrome(),dispatch:r.dispatch,refresh:r.refresh}}function nE({children:e}){return(0,z.jsx)(`div`,{className:`flex min-h-[40vh] flex-col items-center justify-center gap-2 p-8 text-center font-mono text-sm text-slate-600`,children:e})}function rE({label:e=`Loading…`}){return(0,z.jsxs)(nE,{children:[(0,z.jsx)(`span`,{className:`inline-block h-3 w-3 animate-spin rounded-full border-2 border-slate-300 border-t-slate-600`}),(0,z.jsx)(`span`,{children:e})]})}function iE({label:e=`Nothing here yet.`}){return(0,z.jsx)(nE,{children:(0,z.jsx)(`span`,{className:`text-slate-400`,children:e})})}function aE({headline:e,explanation:t,nextStep:n,onRetry:r}){return(0,z.jsxs)(nE,{children:[(0,z.jsx)(`div`,{className:`font-semibold text-red-700`,children:e}),t?(0,z.jsx)(`div`,{className:`text-slate-600`,children:t}):null,n?(0,z.jsx)(`div`,{className:`text-slate-500`,children:n}):null,r?(0,z.jsx)(sE,{onRetry:r}):null]})}function oE({headline:e=`Not ready`,explanation:t,nextStep:n,onRetry:r}){return(0,z.jsxs)(nE,{children:[(0,z.jsx)(`div`,{className:`font-semibold text-amber-700`,children:e}),t?(0,z.jsx)(`div`,{className:`text-slate-600`,children:t}):null,n?(0,z.jsx)(`div`,{className:`text-slate-500`,children:n}):null,r?(0,z.jsx)(sE,{onRetry:r}):null]})}function sE({onRetry:e}){return(0,z.jsx)(`button`,{type:`button`,onClick:e,className:`mt-2 rounded border border-slate-300 px-3 py-1 text-slate-700 hover:bg-slate-100`,children:`Retry`})}function cE(e){return{ok:!0,data:e}}function lE(e){return{ok:!1,error:e}}function uE(e){return e==null?``:String(e)}function dE(e){let t=e||{};return{nodeId:uE(t.node_id),name:uE(t.name)||`(unnamed)`,kind:uE(t.kind)||`?`,mode:uE(t.mode)||`?`,lifecycle:uE(t.lifecycle)||`?`,status:uE(t.status)||`?`,parent:t.parent?uE(t.parent):null,created:uE(t.created),hanging:t.hanging&&typeof t.hanging==`object`?t.hanging:null}}function fE(e){let t=e||{};return{nodeId:uE(t.node_id),name:uE(t.name),cwd:uE(t.cwd),count:typeof t.count==`number`?t.count:0}}var pE=new Set([`active`,`idle`]),mE={active:`●`,idle:`○`,done:`✓`,dead:`✗`,canceled:`⊘`};function hE(e){return e===`rate-limit`?`rate-limited`:e===`overloaded`?`overloaded`:e===`connection`?`down`:e===`auth`?`auth`:e===`protocol`?`protocol`:e===`wedged`?`wedged`:`other`}function gE(e,t){let n=Date.parse(e);if(Number.isNaN(n))return`now`;let r=n-t;return r<=0?`now`:r>=6e4?`${Math.max(1,Math.round(r/6e4))}m`:`${Math.max(1,Math.ceil(r/1e3))}s`}function _E(e,t){if(e.retry.disposition===`auto`){if(e.retry.by===`client`)return`redialing`;let n=typeof e.retry.attempt==`number`&&typeof e.retry.max==`number`?`auto-retry ${e.retry.attempt}/${e.retry.max}`:`auto-retrying`;return e.retry.nextAt?`${n}, next ${gE(e.retry.nextAt,t)}`:n}return`needs you`}function vE(e,t){return`${e.link} ${hE(e.kind)} · ${_E(e,t)}`}function yE(e){let t=String(e||``),n=t.indexOf(`-`);return n>0?t.slice(0,n):t.slice(0,8)}var bE=[`Jan`,`Feb`,`Mar`,`Apr`,`May`,`Jun`,`Jul`,`Aug`,`Sep`,`Oct`,`Nov`,`Dec`];function xE(e,t){let n=Date.parse(e);if(Number.isNaN(n))return``;let r=Math.max(0,Math.floor((t-n)/1e3));if(r<60)return`now`;let i=Math.floor(r/60);if(i<60)return`${i}m`;let a=Math.floor(i/60);if(a<24)return`${a}h`;let o=Math.floor(a/24);if(o<7)return`${o}d`;let s=new Date(n),c=bE[s.getMonth()]||`?`;return s.getFullYear()===new Date(t).getFullYear()?`${c} ${s.getDate()}`:`${c} ʼ${String(s.getFullYear()).slice(-2)}`}function SE(e,t){return`${e} ${t}${e===1?``:`s`}`}var CE={kind:`crtr-missing`,display:{headline:`Canvas unavailable`,explanation:`crtr could not be found to read the canvas graph.`,nextStep:`Install crtr (or set CRTR_BIN on PATH), then press g.`,level:`error`,blocking:!0}};function wE(e){let t=String(e||``);return/help-gate:\s*blocked/i.test(t)?{kind:`help-gate`,display:{headline:`Canvas unavailable`,explanation:`crtr help-gate blocked the call (run the command with -h once).`,nextStep:`Press g to retry.`,level:`error`,blocking:!0}}:{kind:`crtr-failed`,display:{headline:`Canvas unavailable`,explanation:`crtr could not read the canvas graph: `+(EE(t)||`unknown error`),nextStep:`Press g to retry.`,level:`error`,blocking:!0}}}function TE(e){return{kind:`parse`,display:{headline:`Canvas unavailable`,explanation:`Could not parse \`crtr ${e}\` output as JSON.`,nextStep:`Press g to retry.`,level:`error`,blocking:!0}}}function EE(e){let t=String(e||``).split(/\r?\n/).map(e=>e.trim()).filter(Boolean);for(let e=t.length-1;e>=0;e--)if(/^ERROR:/i.test(t[e]))return t[e].replace(/^ERROR:\s*/i,``).trim();return t.length?t[t.length-1]:``}var DE={id:`nodes`,request:()=>({kind:`exec`,bin:`crtr`,args:[`node`,`inspect`,`list`,`--json`]}),parse:e=>{if(!e.ok)return lE(CE);if(e.exitCode!==0)return lE(wE(e.stderr||e.stdout));let t=String(e.stdout||``).trim(),n;try{n=t===``?{}:JSON.parse(t)}catch{return lE(TE(`node inspect list`))}return cE((n&&Array.isArray(n.nodes)?n.nodes:[]).map(dE))}},OE={id:`attention`,request:()=>({kind:`exec`,bin:`crtr`,args:[`canvas`,`attention`,`list`,`--json`]}),parse:e=>{if(!e.ok||e.exitCode!==0)return cE({items:[],total:0});let t=String(e.stdout||``).trim(),n;try{n=t===``?{}:JSON.parse(t)}catch{return cE({items:[],total:0})}let r=n&&Array.isArray(n.items)?n.items:[],i=n&&typeof n.total==`number`?n.total:0;return cE({items:r.map(fE),total:i})}};function kE(e,t){let n=new Map;for(let t of e)n.set(t.nodeId,t);let r=new Map,i=[];for(let t of e){let e=t.parent&&n.has(t.parent)?t.parent:null;if(e){let n=r.get(e);n?n.push(t):r.set(e,[t])}else i.push(t)}let a=(e,t)=>e.created<t.created?-1:+(e.created>t.created);for(let e of r.values())e.sort(a);i.sort(a);let o=new Map;function s(e,i){let a=o.get(e);if(a!==void 0)return a;if(i.has(e))return!1;i.add(e);let c=n.get(e),l=!!c&&(pE.has(c.status)||t.has(e));if(!l){for(let t of r.get(e)||[])if(s(t.nodeId,i)){l=!0;break}}return i.delete(e),o.set(e,l),l}function c(e,n){let r=t.get(e.nodeId)||0;return{nodeId:e.nodeId,prefix:n,glyph:e.hanging?`⚠`:mE[e.status]||`?`,status:e.status,name:e.name,kind:e.kind,mode:e.mode,lifecycle:e.lifecycle,shortId:yE(e.nodeId),created:e.created,blocked:r>0,askCount:r,hanging:e.hanging||null}}let l=[],u=new Set;function d(e,t,n,i){if(u.has(e.nodeId))return;u.add(e.nodeId);let a=i?``:t+(n?`└─ `:`├─ `);l.push(c(e,a));let o=r.get(e.nodeId)||[],s=i?``:t+(n?` `:`│ `);for(let e=0;e<o.length;e++)d(o[e],s,e===o.length-1,!1)}let f=0;for(let e of i)s(e.nodeId,new Set)&&(f++,d(e,``,!0,!0));return{rows:l,shownRoots:f}}function AE(e){return e.totalNodes===0?null:`${e.activeCount} active · ${SE(e.totalNodes,`node`)}`}function jE(e){return e.rows.length===0?null:`${SE(e.shownRoots,`live tree`)} · ${e.rows.length} shown`}var ME={manifest:{id:`canvas`,title:`Canvas`,description:`Live agent graph — who is working, who is blocked`,refreshMs:3e3},init(){return{rows:[],cursor:0,scroll:0,shownRoots:0,totalNodes:0,activeCount:0,attnTotal:0,lastFetch:0,sourceError:null}},sources:{nodesSource:DE,attentionSource:OE},intents:{async refresh(e){e.signal.setStatus(`Loading the canvas…`);let t=await e.resolve(DE);if(!t.ok){e.set(e=>({...e,sourceError:t.error})),e.signal.setStatus(null),e.signal.setBanner(t.error.display.explanation,t.error.display.level);return}let n=t.data,r=new Map,i=0,a=await e.resolve(OE);if(a.ok){for(let e of a.data.items)e.nodeId&&r.set(e.nodeId,e.count);i=a.data.total}let o=kE(n,r);e.set(e=>{let t={...e,sourceError:null,rows:o.rows,shownRoots:o.shownRoots,totalNodes:n.length,activeCount:n.filter(e=>e.status===`active`).length,attnTotal:i,lastFetch:Date.now()};return t.cursor>=t.rows.length&&(t.cursor=Math.max(0,t.rows.length-1)),t}),e.signal.setSubtitle(AE(e.state)),i>0?e.signal.setBanner(`${SE(i,`ask`)} waiting on a human — see the ⚑ rows`,`action`):e.signal.clearBanner(),e.signal.setStatus(jE(e.state))},cursorDown:e=>e.set(e=>({...e,cursor:e.rows.length?Math.min(e.rows.length-1,e.cursor+1):0})),cursorUp:e=>e.set(e=>({...e,cursor:Math.max(0,e.cursor-1)})),activate:(e,t)=>{let n=t&&t.nodeId;n&&e.set(e=>{let t=e.rows.findIndex(e=>e.nodeId===n);return t>=0?{...e,cursor:t}:e})},quit:e=>e.signal.quit()}},NE={active:`text-green-600`,idle:`text-amber-600`,done:`text-cyan-700`,dead:`text-red-600`,canceled:`text-slate-400`};function PE(e){return e===`active`?`font-bold`:e===`done`||e===`dead`||e===`canceled`?`text-slate-400`:``}function FE({row:e,selected:t,onClick:n}){let r=Date.now(),i=xE(e.created,r);return(0,z.jsxs)(`li`,{className:`flex items-baseline gap-1.5 rounded px-2 py-0.5 ${t?`bg-slate-200`:``}`,onClick:n,children:[e.prefix?(0,z.jsx)(`span`,{className:`whitespace-pre text-slate-400`,children:e.prefix}):null,(0,z.jsx)(`span`,{className:e.hanging?`font-bold text-amber-500`:NE[e.status]||`text-slate-400`,children:e.glyph}),(0,z.jsx)(`span`,{className:PE(e.status),children:e.name}),(0,z.jsxs)(`span`,{className:`text-slate-400`,children:[`[`,e.kind,`/`,e.mode,`]`]}),e.blocked?(0,z.jsxs)(`span`,{className:`font-bold text-yellow-500`,children:[`⚑`,e.askCount]}):null,e.hanging?(0,z.jsx)(`span`,{className:`text-amber-500`,children:vE(e.hanging,r)}):null,i?(0,z.jsx)(`span`,{className:`ml-auto shrink-0 text-slate-400`,children:i}):null]})}function IE({state:e,dispatch:t}){if(e.rows.length===0){if(e.sourceError){let n=e.sourceError.display;return(0,z.jsx)(n.level===`error`?aE:oE,{headline:n.headline,explanation:n.explanation,nextStep:n.nextStep,onRetry:()=>t(`refresh`)})}return e.lastFetch===0?(0,z.jsx)(rE,{label:`Loading the canvas…`}):e.totalNodes===0?(0,z.jsx)(iE,{label:"No nodes on the canvas — spawn one with `crtr node new`."}):(0,z.jsx)(iE,{label:`All caught up — ${e.totalNodes} node${e.totalNodes===1?``:`s`} finished, none active.`})}return(0,z.jsx)(`div`,{className:`font-mono text-sm outline-none`,tabIndex:0,onKeyDown:e=>{e.key===`j`||e.key===`ArrowDown`?(t(`cursorDown`),e.preventDefault()):e.key===`k`||e.key===`ArrowUp`?(t(`cursorUp`),e.preventDefault()):e.key===`g`&&t(`refresh`)},children:(0,z.jsx)(`ul`,{children:e.rows.map((n,r)=>(0,z.jsx)(FE,{row:n,selected:r===e.cursor,onClick:()=>t(`activate`,{nodeId:n.nodeId})},n.nodeId||r))})})}function LE(){let e=globalThis.crypto;return e&&typeof e.randomUUID==`function`?e.randomUUID():`n-${Date.now()}-${Math.random().toString(36).slice(2,10)}`}function RE(e){return typeof e==`object`&&!!e}function zE(e){return typeof e==`string`?e:``}function BE(e){return typeof e==`string`&&e!==``?e:null}function VE(e){return RE(e)&&typeof e.role==`string`?e.role:null}function HE(e){return typeof e==`string`?e:Array.isArray(e)?e.filter(e=>RE(e)&&e.type===`text`).map(e=>zE(e.text)).join(``):``}function UE(e){return RE(e)?HE(e.content)||zE(e.text):``}function WE(e){for(let t=e.length-1;t>=0;t--){let n=e[t];if(VE(n)!==`assistant`)continue;let r=UE(n).trim();if(r)return r}return null}function GE(){return{messages:[],streamingIndex:null,executingToolIds:[],activity:null,lastAssistantText:null}}function KE(e){let t=Array.isArray(e?.messages)?e.messages.slice():[];return{messages:t,streamingIndex:null,executingToolIds:[],activity:e?.state?.isStreaming===!0?`Working…`:null,lastAssistantText:WE(t)}}function qE(e,t){switch(t?.type){case`agent_start`:return e.activity===`Working…`?e:{...e,activity:`Working…`};case`agent_end`:return{...e,streamingIndex:null,activity:null,executingToolIds:e.executingToolIds.length?[]:e.executingToolIds};case`message_start`:{let n=e.messages.concat(t.message),r=VE(t.message)===`assistant`?n.length-1:e.streamingIndex;return{...e,messages:n,streamingIndex:r,lastAssistantText:WE(n)}}case`message_update`:{let n=e.streamingIndex;if(n===null){let t=e.messages.length-1;t>=0&&VE(e.messages[t])===`assistant`&&(n=t)}if(n===null)return e;let r=e.messages.slice();return r[n]=t.message,{...e,messages:r,streamingIndex:n,lastAssistantText:WE(r)}}case`message_end`:{let n=e.streamingIndex;if(n===null){let t=e.messages.length-1;t>=0&&VE(e.messages[t])===`assistant`&&(n=t)}if(n===null)return e;let r=e.messages.slice();return r[n]=t.message,{...e,messages:r,streamingIndex:null,lastAssistantText:WE(r)}}case`tool_execution_start`:return e.executingToolIds.includes(t.toolCallId)?e:{...e,executingToolIds:e.executingToolIds.concat(t.toolCallId)};case`tool_execution_end`:return e.executingToolIds.includes(t.toolCallId)?{...e,executingToolIds:e.executingToolIds.filter(e=>e!==t.toolCallId)}:e;case`compaction_start`:return e.activity===`Compacting context…`?e:{...e,activity:`Compacting context…`};case`compaction_end`:return{...e,activity:e.activity===`Working…`?`Working…`:null};case`auto_retry_start`:{let n=typeof t.attempt==`number`?t.attempt:0,r=typeof t.maxAttempts==`number`?t.maxAttempts:0,i=typeof t.delayMs==`number`?Math.ceil(t.delayMs/1e3):0;return{...e,activity:`Retrying (${n}/${r}) in ${i}s…`}}case`auto_retry_end`:return{...e,activity:e.activity===`Working…`?`Working…`:null};default:return e}}function JE(e,t,n){let r={role:`bashExecution`,command:t,output:``,exitCode:void 0,cancelled:!1,truncated:!1,excludeFromContext:n,timestamp:Date.now()};return{...e,messages:e.messages.concat(r)}}function YE(e,t){for(let n=e.messages.length-1;n>=0;n--){let r=e.messages[n];if(VE(r)!==`bashExecution`)continue;let i=e.messages.slice(),a=RE(i[n])?i[n]:{};return i[n]={...a,output:`${zE(a.output)}${t}`},{...e,messages:i}}return e}function XE(e,t){for(let n=e.messages.length-1;n>=0;n--){let r=e.messages[n];if(VE(r)!==`bashExecution`)continue;let i=e.messages.slice();return i[n]={...RE(i[n])?i[n]:{},exitCode:t.exitCode,cancelled:t.cancelled,truncated:t.truncated,fullOutputPath:t.fullOutputPath},{...e,messages:i}}return e}function ZE(e){let t=RE(e)?e:{};return{sessionId:BE(t.sessionId),sessionFile:BE(t.sessionFile),model:BE(t.model),isStreaming:t.isStreaming===!0,thinkingLevel:zE(t.thinkingLevel)||`off`,steeringMode:zE(t.steeringMode)||`all`,followUpMode:zE(t.followUpMode)||`all`,sessionName:BE(t.sessionName),autoCompactionEnabled:t.autoCompactionEnabled===!0,pendingMessageCount:typeof t.pendingMessageCount==`number`?t.pendingMessageCount:0}}function QE(e,t){let n=e.session??ZE(null),r=!1,i={...n};for(let[e,n]of Object.entries(t))n!==void 0&&(i[e]=n,r=!0);return r?{...e,session:i}:e}function $E(e,t,n){return{...e,notices:e.notices.concat({id:LE(),level:t,text:n,at:Date.now()})}}function eD(e){return typeof e==`string`?e:RE(e)?typeof e.reason==`string`?e.reason:typeof e.message==`string`?e.message:typeof e.kind==`string`?e.kind:``:``}function tD(e){let t=eD(e).toLowerCase();return t.includes(`no running broker`)?`no-broker`:t.includes(`does not exist`)||t.includes(`no node`)?`no-node`:t.includes(`invalid`)||t.includes(`rejected`)?`invalid`:`closed`}function nD(e){if(!RE(e)||e.role!==`assistant`)return;let t=RE(e.usage)?e.usage:null;if(!t)return;let n=typeof t.input==`number`?t.input:null,r=typeof t.cacheRead==`number`?t.cacheRead:null,i=typeof t.cacheWrite==`number`?t.cacheWrite:null;if(!(n===null||r===null||i===null))return n+r+i}function rD(e,t,n=`info`){return $E(e,n,t)}var iD={manifest:{id:`chat`,title:`Chat`,description:`Portable chat-as-a-view core`},init(e){return{target:typeof e.target==`string`&&e.target.trim()!==``?e.target:null,desiredRole:`controller`,channel:null,clientId:null,conn:`idle`,role:`observer`,controllerId:null,session:null,transcript:GE(),draft:``,notices:[],pendingDialog:null,queued:[],contextTokens:void 0}},streams:{chat:{id:`chat`,request:({target:e,role:t})=>({kind:`stream`,target:e,role:t}),onOpen:`streamOpen`,onFrame:`streamFrame`,onClose:`streamClose`}},intents:{refresh(e){let t=e.state;if(t.channel==null){if(t.target==null){e.set(e=>({...e,conn:`error`})),e.set(e=>rD(e,`missing target — run crtr view run chat --target <node-id>`,`action`)),e.signal.setBanner(`missing target — run crtr view run chat --target <node-id>`,`action`),e.signal.setStatus(null);return}e.signal.setStatus(`connecting…`);try{let n=e.connect(iD.streams.chat,{target:t.target,role:t.desiredRole});e.set(e=>({...e,channel:n,clientId:n.id,conn:`connecting`}))}catch(t){let n=t instanceof Error?t.message:String(t);e.set(e=>({...e,conn:`error`})),e.set(e=>rD(e,`stream connect failed — ${n}`,`error`)),e.signal.setBanner(`stream connect failed — ${n}`,`error`),e.signal.setStatus(null)}}},streamOpen(e,t){RE(t)&&(e.set(e=>({...e,channel:e.channel??t,clientId:e.clientId??BE(t.id),conn:`connecting`})),e.signal.setStatus(`connected — waiting for welcome`))},streamClose(e,t){let n=RE(t)&&typeof t.channelId==`string`?t.channelId:void 0;if(n!==void 0&&e.state.channel!=null&&e.state.channel.id!==n)return;let r=tD(t);if(r===`closed`&&e.state.channel==null&&e.state.conn===`connecting`)return;let i=r===`no-broker`?`node is asleep / focus or revive it first`:r===`no-node`?`node not found / check the target`:r===`invalid`?`invalid target / check the target`:`stream closed / reconnect`;e.set(e=>({...e,channel:null,conn:r})),e.set(e=>rD(e,i,`action`)),e.signal.setBanner(i,`action`),e.signal.setStatus(null)},reconnect(e){let t=e.state.channel;if(e.set(e=>({...e,channel:null,conn:`connecting`})),t&&typeof t.close==`function`)try{t.close()}catch{}e.dispatch(`refresh`)},streamFrame(e,t){if(RE(t))switch(t.type){case`welcome`:{let n=t.snapshot,r=KE(n),i=ZE(n?.state),a=n?.stats,o=typeof a?.contextUsage?.tokens==`number`?a.contextUsage.tokens:typeof a?.tokens?.total==`number`?a.tokens.total:void 0;e.set(e=>({...e,conn:`open`,controllerId:BE(t.controller_id),role:t.controller_id===e.clientId?`controller`:t.role??`observer`,session:i,transcript:r,pendingDialog:t.pending_dialog??null,contextTokens:o})),e.signal.clearBanner(),e.signal.setStatus(null),e.signal.setSubtitle(i.sessionName??e.state.target);return}case`control_changed`:e.set(e=>{let n=t.controller_id===e.clientId?`controller`:`observer`,r=n!==e.role,i=e.role===`controller`&&n===`observer`,a={...e,controllerId:BE(t.controller_id),role:n,desiredRole:i?`observer`:e.desiredRole};return r&&(a=rD(a,n===`controller`?`control changed — you are controller`:`control changed — read-only`,`info`)),a});return;case`model_changed`:e.set(e=>QE(e,{model:BE(t.model)}));return;case`error`:{if(t.code===`not_controller`){let t=`read-only — take control before sending`;e.set(e=>({...e,role:`observer`})),e.set(e=>rD(e,t,`action`)),e.signal.setBanner(t,`action`);return}let n=t.message||t.code||`stream error`;e.set(e=>rD(e,n,`error`)),e.signal.setBanner(n,`error`);return}case`ack`:{if(t.ok)return;let n=t.detail?`${t.for} failed — ${t.detail}`:`${t.for} failed`;e.set(e=>rD(e,n,`error`)),e.signal.setBanner(n,`error`);return}case`extension_ui_request`:{let n=`cannot answer dialogs yet`;e.set(e=>({...e,pendingDialog:t})),e.set(e=>rD(e,n,`action`)),e.signal.setBanner(n,`action`);return}case`display_status`:{let n=t.text===void 0?`${t.key} cleared`:`${t.key}: ${t.text}`;e.set(e=>rD(e,n,`info`));return}case`display_widget`:{let n=t.lines===void 0?`${t.key} cleared`:`${t.key}: ${t.lines.join(` | `)}`;e.set(e=>rD(e,n,`info`));return}case`display_title`:e.set(e=>rD(e,`title: ${t.title}`,`info`));return;case`bash_start`:e.set(e=>({...e,transcript:JE(e.transcript,t.command,t.excludeFromContext)}));return;case`bash_output`:e.set(e=>({...e,transcript:YE(e.transcript,t.chunk)}));return;case`bash_end`:e.set(e=>({...e,transcript:XE(e.transcript,t)}));return;default:e.set(e=>{let n=qE(e.transcript,t),r={...e,transcript:n};if(t.type===`agent_start`)r=QE(r,{isStreaming:!0});else if(t.type===`agent_end`)r=QE(r,{isStreaming:!1});else if(t.type===`session_info_changed`)r=QE(r,{sessionName:BE(t.name)});else if(t.type===`thinking_level_changed`)r=QE(r,{thinkingLevel:zE(t.level)||r.session?.thinkingLevel||`off`});else if(t.type===`queue_update`){let e=[...Array.isArray(t.steering)?t.steering:[],...Array.isArray(t.followUp)?t.followUp:[]].map(e=>String(e));r={...r,queued:e},r=QE(r,{pendingMessageCount:e.length})}let i=t.type===`message_end`?nD(t.message):void 0;return i!==void 0&&(r={...r,contextTokens:i}),r})}},setDraft(e,t){e.set(e=>({...e,draft:t}))},submitDraft(e){let t=e.state.draft.trim();if(!t)return;let n=e.state.channel;if(!n||e.state.conn!==`open`){let t=`not connected — reconnect`;e.set(e=>rD(e,t,`error`)),e.signal.setBanner(t,`error`);return}if(e.state.role!==`controller`){let t=`read-only — take control before sending`;e.set(e=>rD(e,t,`action`)),e.signal.setBanner(t,`action`);return}let r=e.state.session?.isStreaming===!0?{type:`steer`,text:t}:{type:`prompt`,text:t};n.send(r),e.set(e=>({...e,draft:``}))},abort(e){if(e.state.role!==`controller`){let t=`read-only — take control before sending`;e.set(e=>rD(e,t,`action`)),e.signal.setBanner(t,`action`);return}if(!e.state.channel||e.state.conn!==`open`){let t=`not connected — reconnect`;e.set(e=>rD(e,t,`error`)),e.signal.setBanner(t,`error`);return}e.state.channel.send({type:`abort`})},requestControl(e){e.set(e=>({...e,desiredRole:`controller`})),e.state.channel&&e.state.conn===`open`&&e.state.channel.send({type:`request_control`})},releaseControl(e){e.set(e=>({...e,desiredRole:`observer`}));let t=e.state.channel;t&&e.state.conn===`open`&&t.send({type:`release_control`}),e.dispatch(`reconnect`)},clearNotice(e,t){e.set(e=>t==null||t===``?{...e,notices:[]}:{...e,notices:e.notices.filter(e=>e.id!==t)})},quit(e){if(e.state.channel)try{e.state.channel.close()}catch{}e.signal.quit()}}},aD={info:`border-slate-200 bg-slate-50 text-slate-700`,action:`border-amber-200 bg-amber-50 text-amber-800`,error:`border-rose-200 bg-rose-50 text-rose-800`},oD={info:`bg-slate-100 text-slate-700`,action:`bg-amber-100 text-amber-800`,error:`bg-rose-100 text-rose-800`};function sD(e){return typeof e==`object`&&!!e}function cD(e,t=120){let n=String(e||``);return n.length>t?`${n.slice(0,Math.max(0,t-1))}…`:n}function lD(e){return sD(e)&&typeof e.role==`string`?e.role:``}function uD(e){return sD(e)?typeof e.customType==`string`&&e.customType?`custom · ${e.customType}`:typeof e.type==`string`&&e.type?e.type:``:``}function dD(e){return sD(e)?typeof e.timestamp==`string`?e.timestamp:typeof e.timestamp==`number`?new Date(e.timestamp).toLocaleTimeString([],{hour:`2-digit`,minute:`2-digit`}):``:``}function fD(e){return sD(e)?typeof e.text==`string`?e.text:Array.isArray(e.text)?e.text.map(e=>sD(e)&&typeof e.text==`string`?e.text:``).join(``):typeof e.content==`string`?e.content:``:``}function pD(e){if(!sD(e))return``;let t=typeof e.type==`string`?e.type:``,n=typeof e.name==`string`?e.name:``;switch(t){case`text`:return``;case`thinking`:case`reasoning`:{let t=cD(fD(e).replace(/\s+/g,` `).trim(),88);return t?`Thinking · ${t}`:`Thinking`}case`toolCall`:{let t=fD(e),r=t?` · ${cD(t.replace(/\s+/g,` `).trim(),88)}`:``;return`Tool · ${n||`tool`}${r}`}case`toolResult`:{let t=fD(e);return`Tool result${t?` · ${cD(t.replace(/\s+/g,` `).trim(),88)}`:``}`}default:return t?`${t}${n?` · ${n}`:``}`:``}}function mD(e){let t=[];if(!sD(e))return t;if(lD(e)===`bashExecution`){let n=typeof e.command==`string`?e.command:``;n&&t.push(`$ ${cD(n.replace(/\s+/g,` `).trim(),96)}`),typeof e.exitCode==`number`&&t.push(`exit ${e.exitCode}`),e.cancelled===!0&&t.push(`cancelled`),e.truncated===!0&&t.push(`truncated`)}let n=Array.isArray(e.content)?e.content:[];for(let e of n){let n=pD(e);n&&t.push(n)}let r=uD(e);return r&&lD(e)===`custom`&&t.push(r),lD(e)===`compactionSummary`&&t.push(`Compaction summary`),lD(e)===`branchSummary`&&t.push(`Branch summary`),t}function hD(e){let t=e.target||`<node-id>`;switch(e.conn){case`no-broker`:return{level:`action`,Comp:oE,headline:`node is asleep`,explanation:`Focus or revive the node first, then reconnect.`,nextStep:`crtr node focus ${t} · or crtr canvas revive ${t}`};case`no-node`:return{level:`error`,Comp:aE,headline:`node not found`,explanation:`Check the target node id and try again.`,nextStep:`crtr view run chat --target ${t}`};case`invalid`:return{level:`error`,Comp:aE,headline:`invalid target`,explanation:`The target was rejected by the broker.`,nextStep:`crtr view run chat --target <node-id>`};case`error`:return e.target?{level:`error`,Comp:aE,headline:`chat connection failed`,explanation:`Reconnect to retry the stream.`,nextStep:`Press Reconnect`}:{level:`error`,Comp:aE,headline:`missing target`,explanation:`Open chat with a node id so the view can connect.`,nextStep:`crtr view run chat --target <node-id>`};default:return null}}function gD({label:e,value:t,cls:n=``}){return(0,z.jsxs)(`span`,{className:`inline-flex items-center gap-1 rounded-full border px-2 py-0.5 text-[11px] ${n}`,children:[(0,z.jsx)(`span`,{className:`opacity-60`,children:e}),(0,z.jsx)(`span`,{className:`font-semibold`,children:t})]})}function _D({notice:e,onDismiss:t}){return(0,z.jsxs)(`div`,{className:`flex items-start gap-3 rounded-xl border px-3 py-2 text-sm ${aD[e.level]||aD.info}`,children:[(0,z.jsx)(`span`,{className:`rounded-full px-2 py-0.5 text-[11px] font-semibold uppercase tracking-wide ${oD[e.level]||oD.info}`,children:e.level}),(0,z.jsx)(`div`,{className:`min-w-0 flex-1 whitespace-pre-wrap`,children:e.text}),(0,z.jsx)(`button`,{type:`button`,className:`shrink-0 text-slate-400 hover:text-slate-700`,onClick:()=>t(e.id),"aria-label":`Dismiss notice`,children:`×`})]})}function vD({message:e,index:t,streaming:n}){let r=lD(e),i=r===`user`,a=r===`assistant`,o=i?`border-emerald-200 bg-emerald-50`:a?`border-cyan-200 bg-cyan-50`:`border-slate-200 bg-white`,s=i?`text-emerald-700`:a?`text-cyan-700`:`text-slate-700`,c=UE(e).trim(),l=mD(e),u=dD(e);return(0,z.jsxs)(`article`,{className:`rounded-2xl border px-3 py-2 shadow-sm ${o}`,children:[(0,z.jsxs)(`div`,{className:`flex items-baseline gap-2`,children:[(0,z.jsx)(`div`,{className:`font-semibold ${s}`,children:i?`You`:a?`Agent`:r||`Message`}),n?(0,z.jsx)(`span`,{className:`rounded-full bg-cyan-100 px-2 py-0.5 text-[11px] font-semibold text-cyan-800`,children:`streaming`}):null,r===`bashExecution`?(0,z.jsx)(`span`,{className:`rounded-full bg-slate-100 px-2 py-0.5 text-[11px] font-semibold text-slate-700`,children:`bash`}):null,u?(0,z.jsx)(`div`,{className:`ml-auto text-xs text-slate-400`,children:u}):null]}),c?(0,z.jsx)(`div`,{className:`mt-1 whitespace-pre-wrap text-slate-800`,children:c}):null,l.length?(0,z.jsx)(`div`,{className:`mt-2 space-y-1 border-t border-slate-200 pt-2 text-xs text-slate-500`,children:l.map((e,n)=>(0,z.jsxs)(`div`,{className:`whitespace-pre-wrap pl-3 text-slate-500`,children:[`• `,e]},`${t}:${n}`))}):null]})}function yD({state:e,dispatch:t}){let n=hD(e);if(e.target===null)return(0,z.jsx)(`div`,{className:`flex h-full items-center justify-center p-6 text-sm text-slate-500`,children:(0,z.jsx)(oE,{headline:`missing target`,explanation:`Open chat with a node id so the view can connect.`,nextStep:`crtr view run chat --target <node-id>`,onRetry:()=>t(`reconnect`)})});if(n){let e=n.Comp;return(0,z.jsx)(`div`,{className:`flex h-full items-center justify-center p-6 text-sm text-slate-500`,children:(0,z.jsx)(e,{headline:n.headline,explanation:n.explanation,nextStep:n.nextStep,onRetry:()=>t(`reconnect`)})})}let r=e.conn===`open`?`connected`:e.conn===`connecting`?`connecting…`:e.conn,i=e.session?.sessionName||``,a=e.session?.model||``,o=e.session?.isStreaming===!0,s=e.channel!=null&&e.conn===`open`&&e.role===`controller`&&e.draft.trim()!==``,c=e.channel!=null&&e.conn===`open`&&e.role===`controller`&&o,l=e.role===`controller`?`Release control`:`Request control`,u=e.role===`controller`?`releaseControl`:`requestControl`,d=e.conn===`open`?e.role===`observer`?`Take control before sending…`:o?`Type a steer…`:`Type a message…`:`Waiting for connection…`;return(0,z.jsxs)(`div`,{className:`flex h-full min-h-0 flex-col gap-3 font-mono text-sm text-slate-900 outline-none`,children:[(0,z.jsxs)(`div`,{className:`flex flex-wrap items-center gap-2 rounded-2xl border border-slate-200 bg-white px-3 py-2 shadow-sm`,children:[(0,z.jsx)(gD,{label:`target`,value:e.target||`—`,cls:`border-slate-200 bg-slate-50 text-slate-700`}),(0,z.jsx)(gD,{label:`conn`,value:r,cls:e.conn===`open`?`border-emerald-200 bg-emerald-50 text-emerald-700`:e.conn===`connecting`?`border-amber-200 bg-amber-50 text-amber-800`:`border-slate-200 bg-slate-50 text-slate-700`}),(0,z.jsx)(gD,{label:`role`,value:e.role,cls:e.role===`controller`?`border-cyan-200 bg-cyan-50 text-cyan-700`:`border-slate-200 bg-slate-50 text-slate-700`}),a?(0,z.jsx)(gD,{label:`model`,value:a,cls:`border-violet-200 bg-violet-50 text-violet-700`}):null,i?(0,z.jsx)(gD,{label:`session`,value:i,cls:`border-slate-200 bg-slate-50 text-slate-700`}):null,e.controllerId?(0,z.jsx)(gD,{label:`controller`,value:e.controllerId,cls:`border-slate-200 bg-slate-50 text-slate-700`}):null,typeof e.contextTokens==`number`?(0,z.jsx)(gD,{label:`tokens`,value:String(e.contextTokens),cls:`border-slate-200 bg-slate-50 text-slate-700`}):null,e.transcript.activity?(0,z.jsx)(gD,{label:`activity`,value:e.transcript.activity,cls:`border-amber-200 bg-amber-50 text-amber-800`}):null,e.queued.length?(0,z.jsx)(gD,{label:`queued`,value:e.queued.join(` · `),cls:`border-slate-200 bg-slate-50 text-slate-700`}):null,(0,z.jsxs)(`div`,{className:`ml-auto flex flex-wrap items-center gap-2`,children:[(0,z.jsx)(`button`,{type:`button`,className:`rounded-lg border border-slate-200 bg-white px-3 py-1.5 text-sm text-slate-700 hover:bg-slate-50`,onClick:()=>t(`reconnect`),children:`Reconnect`}),(0,z.jsx)(`button`,{type:`button`,className:`rounded-lg border border-slate-200 bg-white px-3 py-1.5 text-sm text-slate-700 hover:bg-slate-50`,onClick:()=>t(u),children:l})]})]}),e.notices.length?(0,z.jsx)(`div`,{className:`space-y-2`,children:e.notices.map(e=>(0,z.jsx)(_D,{notice:e,onDismiss:e=>t(`clearNotice`,e)},e.id))}):null,(0,z.jsx)(`div`,{className:`min-h-0 flex-1 overflow-hidden rounded-2xl border border-slate-200 bg-white shadow-sm`,children:(0,z.jsxs)(`div`,{className:`flex h-full min-h-0 flex-col`,children:[(0,z.jsx)(`div`,{className:`border-b border-slate-200 px-3 py-2 text-xs uppercase tracking-[0.18em] text-slate-400`,children:`Transcript`}),(0,z.jsx)(`div`,{className:`min-h-0 flex-1 space-y-3 overflow-y-auto p-3`,children:e.transcript.messages.length===0?e.conn===`connecting`?(0,z.jsx)(rE,{label:`Connecting to chat…`}):e.conn===`open`?(0,z.jsx)(iE,{label:`No messages yet.`}):(0,z.jsx)(`div`,{className:`flex h-full items-center justify-center text-slate-400`,children:`Waiting for welcome…`}):e.transcript.messages.map((t,n)=>(0,z.jsx)(vD,{message:t,index:n,streaming:n===e.transcript.streamingIndex&&o},n))})]})}),(0,z.jsxs)(`div`,{className:`rounded-2xl border border-slate-200 bg-white p-3 shadow-sm`,children:[(0,z.jsx)(`textarea`,{value:e.draft,onChange:e=>t(`setDraft`,e.target.value),onKeyDown:e=>{e.key===`Enter`&&!e.shiftKey&&(e.preventDefault(),t(`submitDraft`))},placeholder:d,rows:3,className:`w-full resize-none rounded-xl border border-slate-200 bg-slate-50 px-3 py-2 font-mono text-sm outline-none focus:border-slate-400`}),(0,z.jsxs)(`div`,{className:`mt-3 flex flex-wrap items-center gap-2`,children:[(0,z.jsx)(`button`,{type:`button`,className:`rounded-lg px-3 py-1.5 text-sm font-medium ${s?`bg-slate-900 text-white hover:bg-slate-800`:`cursor-not-allowed bg-slate-200 text-slate-500`}`,onClick:()=>t(`submitDraft`),disabled:!s,children:`Send`}),(0,z.jsx)(`button`,{type:`button`,className:`rounded-lg border px-3 py-1.5 text-sm ${c?`border-rose-200 bg-rose-50 text-rose-700 hover:bg-rose-100`:`cursor-not-allowed border-slate-200 bg-slate-50 text-slate-400`}`,onClick:()=>t(`abort`),disabled:!c,children:`Stop`}),(0,z.jsx)(`div`,{className:`ml-auto text-xs text-slate-400`,children:`Enter sends · Shift+Enter inserts a newline`})]})]})]})}var bD=[`👍`,`❤️`,`😂`,`🔥`,`👏`,`😮`],xD=25,SD=5,CD=1200,wD=new Set([`no-cdp`,`not-logged-in`,`capture-not-dev`,`capture-missing`]),TD=[`Jan`,`Feb`,`Mar`,`Apr`,`May`,`Jun`,`Jul`,`Aug`,`Sep`,`Oct`,`Nov`,`Dec`],ED=`https://www.linkedin.com/messaging/`,DD=e=>new Promise(t=>setTimeout(t,e));function OD(e){return{ok:!0,data:e}}function kD(e){return{ok:!1,error:e}}function AD(e,t){let n=String(e??``);return n.length>t?n.slice(0,Math.max(0,t-1))+`…`:n}function jD(e,t=Date.now()){if(!e)return``;let n=Math.floor((t-e)/1e3);if(n<60)return`now`;let r=Math.floor(n/60);if(r<60)return`${r}m`;let i=Math.floor(r/60);if(i<24)return`${i}h`;let a=Math.floor(i/24);if(a<7)return`${a}d`;let o=new Date(e),s=TD[o.getMonth()]||``,c=new Date(t);return o.getFullYear()===c.getFullYear()?`${s} ${o.getDate()}`:`${s} ʼ${String(o.getFullYear()).slice(-2)}`}function MD(e){return e.slice().sort((e,t)=>!!e.unread==!!t.unread?(t.ts||0)-(e.ts||0):e.unread?-1:1)}function ND(e){return e.openUrn&&e.convos.find(t=>t.urn===e.openUrn)||null}function PD(e){return JSON.stringify(e).replace(/\u2028/g,`\\u2028`).replace(/\u2029/g,`\\u2029`)}function FD(e,t,n={}){let r=[`exec`,`import {${e}} from 'libs/linkedin'; return await ${t===null?`${e}()`:`${e}(${PD(t)})`}`];return n.target&&r.push(`--target`,String(n.target)),n.port!=null&&n.port!==``&&r.push(`--port`,String(n.port)),{kind:`exec`,bin:`capture`,args:r}}function ID(e={}){let t=[`list`];return e.port!=null&&e.port!==``&&t.push(`--port`,String(e.port)),{kind:`exec`,bin:`capture`,args:t}}function LD(e={}){let t=[`open`,ED];return e.port!=null&&e.port!==``&&t.push(`--port`,String(e.port)),{kind:`exec`,bin:`capture`,args:t}}function RD(e={}){let t=[`navigate`,ED];return e.target&&t.push(`--target`,String(e.target)),e.port!=null&&e.port!==``&&t.push(`--port`,String(e.port)),{kind:`exec`,bin:`capture`,args:t}}var zD={"no-cdp":{headline:`No debuggable browser`,explanation:`crtr drives a browser over CDP and none is running.`,nextStep:`Launch Arc, or Chrome with --remote-debugging-port=9222, then press g`,level:`error`,blocking:!0},"capture-missing":{headline:`capture not found`,explanation:`crtr drives the browser through the capture CLI, which is not on PATH.`,nextStep:`Install capture (or add it to PATH), then press g`,level:`error`,blocking:!0},"capture-not-dev":{headline:`Browser bridge unavailable`,explanation:`This view needs a capture dev checkout (vault/ + esbuild).`,nextStep:``,level:`error`,blocking:!0},"not-logged-in":{headline:`Log in to continue`,explanation:`LinkedIn needs a sign-in in the browser.`,nextStep:`Log in in the opened tab, then press g`,level:`action`,blocking:!0},"no-tab":{headline:`Opening LinkedIn…`,explanation:`No messaging tab was open — opening one and waiting for it to load.`,nextStep:``,level:`action`,blocking:!0},"not-messaging":{headline:`Opening your inbox…`,explanation:`Found LinkedIn on another page — switching it to Messages.`,nextStep:``,level:`action`,blocking:!0},"rate-limited":{headline:`LinkedIn is throttling`,explanation:`Too many requests — waiting before trying again.`,nextStep:`Press g to retry`,level:`info`,blocking:!1},"not-connection":{headline:`Not a 1st-degree connection`,explanation:`LinkedIn only allows messaging 1st-degree connections.`,nextStep:``,level:`error`,blocking:!1}};function BD(e){return{headline:`Something went wrong`,explanation:e||`Unknown error.`,nextStep:`Press g to retry.`,level:`error`,blocking:!0}}function VD(e){switch(e){case`no-tab`:return{auto:`open`};case`not-messaging`:return{auto:`navigate`};case`not-logged-in`:return{banner:`Log in in the opened tab, then press g`,bannerLevel:`action`};case`no-cdp`:return{banner:`No debuggable browser — launch one, then press g`,bannerLevel:`error`};case`capture-missing`:return{banner:`capture not found — install it, then press g`,bannerLevel:`error`};case`capture-not-dev`:return{banner:`Browser bridge unavailable — capture dev checkout required`,bannerLevel:`error`};case`rate-limited`:return{keepContent:!0,banner:`LinkedIn is throttling — waiting, then retry with g`,bannerLevel:`info`};case`not-connection`:return{inline:!0,banner:`Can only message 1st-degree connections`,bannerLevel:`error`};default:return{}}}function HD(e){let t=String(e||``).split(/\r?\n/).map(e=>e.trim()).filter(Boolean);for(let e=t.length-1;e>=0;e--)if(/^ERROR:/i.test(t[e]))return t[e].replace(/^ERROR:\s*/i,``).trim();return t.length?t[t.length-1]:`capture exec failed`}function UD(e){if(!e.ok){let t=String(e.stderr||``);return/command not found|ENOENT/i.test(t)?{kind:`capture-missing`,display:zD[`capture-missing`]}:{kind:`error`,display:BD(HD(t))}}let t=String(e.stderr||``);return/No browser with CDP found/i.test(t)||/fetch failed/i.test(t)||/failed to fetch/i.test(t)||/ECONNREFUSED/i.test(t)?{kind:`no-cdp`,display:zD[`no-cdp`]}:/No tab found/i.test(t)?{kind:`no-tab`,display:zD[`no-tab`]}:/Unauthenticated/i.test(t)?{kind:`not-logged-in`,display:zD[`not-logged-in`]}:/Messaging queryId not found/i.test(t)||/Navigate to \/messaging\//i.test(t)?{kind:`not-messaging`,display:zD[`not-messaging`]}:/RateLimited/i.test(t)||/\b429\b/.test(t)?{kind:`rate-limited`,display:zD[`rate-limited`]}:/must be a 1st-degree connection/i.test(t)?{kind:`not-connection`,display:zD[`not-connection`]}:/DEV_ONLY_MSG/i.test(t)?{kind:`capture-not-dev`,display:zD[`capture-not-dev`]}:{kind:`error`,display:BD(HD(t))}}function WD(e){let t=String(e.stdout||``).trim();if(t===``)return OD(null);try{return OD(JSON.parse(t))}catch{return kD({kind:`error`,display:BD(`could not parse capture output as JSON: ${AD(t,300)}`)})}}function GD(e){if(typeof e!=`string`||e===``)return 0;let t=Date.parse(e);return Number.isNaN(t)?0:t}function KD(e){let t=e||{},n=Array.isArray(t.participants)?t.participants:[],r=n[0]||{},i=n.map(e=>e&&e.name).filter(Boolean),a=t.title||r.name||(i.length?i.join(`, `):`Unknown`);return{urn:typeof t.conversationUrn==`string`?t.conversationUrn:``,name:a,lastMessage:typeof t.lastMessage==`string`?t.lastMessage:``,unread:typeof t.unreadCount==`number`?t.unreadCount>0:!1,ts:GD(t.lastActivityAt),recipientId:typeof r.memberId==`string`?r.memberId:``}}function qD(e){let t=e||{};return{urn:typeof t.messageUrn==`string`?t.messageUrn:``,sender:typeof t.fromName==`string`?t.fromName:``,text:typeof t.text==`string`?t.text:``,ts:GD(t.sentAt),fromMe:!1,fromMemberId:typeof t.fromMemberId==`string`?t.fromMemberId:``}}function JD(e,t){return e.map(e=>({urn:e.urn,sender:e.sender,text:e.text,ts:e.ts,fromMe:!!t&&e.fromMemberId===t}))}function YD(e){if(!e.ok||e.exitCode!==0)return kD(UD(e));let t=WD(e);return t.ok?OD((t.data&&Array.isArray(t.data.messages)?t.data.messages:[]).map(qD)):t}function XD(e){try{let t=new URL(e).hostname.toLowerCase();return t===`linkedin.com`||t.endsWith(`.linkedin.com`)}catch{return!1}}var ZD={id:`li-discover-tab`,request:e=>ID(e),parse:e=>{if(!e.ok||e.exitCode!==0)return kD(UD(e));let t;try{t=JSON.parse(String(e.stdout||``).trim()||`[]`)}catch{return kD({kind:`error`,display:BD(`could not parse capture list output: ${AD(e.stdout,300)}`)})}if(!Array.isArray(t))return kD({kind:`no-tab`,display:zD[`no-tab`]});let n=t.filter(e=>e&&typeof e.url==`string`&&XD(e.url)),r=n.find(e=>/\/messaging\//i.test(e.url))||n[0];return r&&r.id?OD(String(r.id)):kD({kind:`no-tab`,display:zD[`no-tab`]})}},QD={id:`li-context`,request:e=>FD(`getContext`,null,e),parse:e=>{if(!e.ok||e.exitCode!==0)return kD(UD(e));let t=WD(e);if(!t.ok)return t;let n=t.data||{};return!n.csrf||!n.memberId?kD({kind:`error`,display:BD(`getContext() returned no csrf/memberId`)}):OD({csrf:String(n.csrf),memberId:String(n.memberId)})}},$D={id:`li-conversations`,request:e=>FD(`listConversations`,{count:e.count,csrf:e.csrf,memberId:e.memberId},e),parse:e=>{if(!e.ok||e.exitCode!==0)return kD(UD(e));let t=WD(e);return t.ok?OD((t.data&&Array.isArray(t.data.conversations)?t.data.conversations:[]).map(KD)):t}},eO={id:`li-open-tab`,request:e=>LD(e),parse:e=>{if(!e.ok||e.exitCode!==0)return kD(UD(e));let t=WD(e);return t.ok?t.data&&t.data.id?OD(String(t.data.id)):kD({kind:`error`,display:BD(`capture open returned no tab id`)}):t}},tO={id:`li-navigate`,request:e=>RD(e),parse:e=>e.ok&&e.exitCode===0?OD(void 0):kD(UD(e))},nO={id:`li-view-thread`,request:e=>FD(`viewConversation`,{csrf:e.csrf,conversationUrn:e.conversationUrn},e),parse:YD},rO={id:`li-mark-read`,request:e=>FD(`markConversationAsRead`,{csrf:e.csrf,conversationUrn:e.conversationUrn},e),parse:e=>e.ok&&e.exitCode===0?OD(void 0):kD(UD(e))},iO={id:`li-send`,request:e=>{let t={csrf:e.csrf,myMemberId:e.myMemberId,recipient:e.recipient,text:e.text};return e.conversationUrn&&(t.conversationUrn=e.conversationUrn),FD(`sendMessage`,t,e)},parse:e=>{if(!e.ok||e.exitCode!==0)return kD(UD(e));let t=WD(e);if(!t.ok)return t;let n=t.data||{};if(n.success===!1){let e=typeof n.error==`string`?n.error:`send failed`;return/1st-degree connection/i.test(e)?kD({kind:`not-connection`,display:zD[`not-connection`]}):kD({kind:`error`,display:BD(e)})}return OD(void 0)}},aO={id:`li-react`,request:e=>FD(`reactToMessage`,{csrf:e.csrf,messageUrn:e.messageUrn,emoji:e.emoji},e),parse:e=>{if(!e.ok||e.exitCode!==0)return kD(UD(e));let t=WD(e);return t.ok?t.data&&t.data.success===!1?kD({kind:`error`,display:BD(`LinkedIn rejected the reaction`)}):OD(void 0):t}};function oO(e){return{target:e.target||void 0,port:e.port}}async function sO(e){let t=e.state,n=t.target||``,r=t.auth,i=t.port;if(!n){let t=await e.resolve(ZD,{port:i});if(!t.ok)return t;n=t.data}if(!r){let t=await e.resolve(QD,{target:n,port:i});if(!t.ok)return t;r=t.data}let a=await e.resolve($D,{target:n,port:i,csrf:r.csrf,memberId:r.memberId,count:xD});if(!a.ok)return a;let o=MD(a.data),s=t.thread;if(t.openUrn){let a=await e.execute(nO,{target:n,port:i,csrf:r.csrf,conversationUrn:t.openUrn});a.ok&&(s=JD(a.data,r.memberId))}return{ok:!0,data:{target:n,auth:r,convos:o,thread:s}}}function cO(e,t){e.set(e=>{let n=e.convCursor>=t.convos.length?Math.max(0,t.convos.length-1):e.convCursor;return{...e,target:t.target,auth:t.auth,convos:t.convos,thread:t.thread,convCursor:n,recovery:null,loginTabOpened:!1,lastFetch:Date.now()}}),e.signal.setStatus(null),e.signal.clearBanner(),e.state.mode===`list`&&e.signal.setMode(null),lO(e)}function lO(e){let t=0;for(let n of e.state.convos)n.unread&&t++;e.signal.setSubtitle(t>0?`${t} unread`:null)}function uO(e,t){e.signal.setStatus(null),e.signal.setMode(null);let n=VD(t.kind);n.inline||n.keepContent&&e.state.convos.length?e.set(e=>({...e,recovery:null})):e.set(e=>({...e,recovery:{display:t.display,spinner:!1}})),n.banner?e.signal.setBanner(n.banner,n.bannerLevel||`error`):e.signal.clearBanner()}async function dO(e){for(let t=1;t<=SD;t++){await DD(CD);let n=e.state.recovery,r=n&&n.startedAt?Math.max(0,Math.floor((Date.now()-n.startedAt)/1e3)):t;e.signal.setStatus(`Loading messages… (${r}s)`);let i=await sO(e);if(i.ok){cO(e,i.data);return}if(wD.has(i.error.kind)){uO(e,i.error);return}}e.set(e=>({...e,recovery:e.recovery?{...e.recovery,spinner:!1}:null})),e.signal.setStatus(null),e.signal.setBanner(`Still loading — press g to retry`,`action`)}async function fO(e,t){let n=VD(t.kind),r=e.state.port;if(n.auto){e.signal.setMode(null),e.signal.clearBanner(),e.set(e=>({...e,recovery:{display:t.display,spinner:!0,startedAt:Date.now()}})),e.signal.setStatus(t.display.headline);let i=n.auto===`open`?await e.execute(eO,{port:r}):await e.execute(tO,{target:e.state.target||void 0,port:r});if(!i.ok){uO(e,i.error);return}e.set(e=>({...e,target:n.auto===`open`&&i.data?i.data:e.target,auth:null})),await dO(e);return}if(t.kind===`not-logged-in`&&!e.state.loginTabOpened){let t=await e.execute(eO,{port:r});e.set(e=>({...e,target:t.ok&&t.data?t.data:e.target,loginTabOpened:!0}))}uO(e,t)}function pO(e,t){let n=VD(t.kind);n.banner?e.signal.setBanner(n.banner,n.bannerLevel||`error`):e.signal.setBanner(t.display.explanation||t.display.headline,t.display.level)}var mO={manifest:{id:`linkedin`,title:`LinkedIn Messages`,description:`Inbox — read, reply, react`,refreshMs:3e4},init(e){let t=e||{};return{auth:null,target:t.target||null,port:t.port||void 0,convos:[],convCursor:0,convScroll:0,openUrn:null,thread:[],threadScroll:0,mode:`list`,draft:``,reactCursor:0,lastFetch:0,recovery:null,loginTabOpened:!1}},sources:{discoverTabSource:ZD,contextSource:QD,conversationsSource:$D},commands:{openTabCommand:eO,navigateCommand:tO,viewThreadCommand:nO,markReadCommand:rO,sendMessageCommand:iO,reactCommand:aO},intents:{async refresh(e){if(e.state.mode!==`list`)return;e.signal.setStatus(`Loading…`);let t=await sO(e);if(t.ok){cO(e,t.data);return}await fO(e,t.error)},cursorDown:e=>e.set(e=>({...e,convCursor:e.convos.length?Math.min(e.convos.length-1,e.convCursor+1):0})),cursorUp:e=>e.set(e=>({...e,convCursor:Math.max(0,e.convCursor-1)})),async openThread(e,t){let n=typeof t==`number`?t:e.state.convCursor,r=e.state.convos[n];if(!r)return;if(!e.state.auth){e.signal.setBanner(`Not ready yet — press g to refresh`,`action`);return}let i=e.state.auth;e.set(e=>({...e,convCursor:n,openUrn:r.urn,thread:[],threadScroll:0})),e.signal.setStatus(`Loading thread…`);let a=await e.execute(nO,{...oO(e.state),csrf:i.csrf,conversationUrn:r.urn});if(!a.ok){e.signal.setStatus(null),pO(e,a.error);return}e.set(e=>({...e,thread:JD(a.data,i.memberId)})),await e.execute(rO,{...oO(e.state),csrf:i.csrf,conversationUrn:r.urn}),e.set(e=>({...e,convos:e.convos.map(e=>e.urn===r.urn?{...e,unread:!1}:e)})),e.signal.setStatus(null),e.signal.clearBanner(),lO(e)},startReply:e=>{if(!e.state.openUrn){e.signal.setBanner(`Open a conversation first`,`action`);return}e.set(e=>({...e,mode:`reply`,draft:``})),e.signal.setMode(`compose`),e.signal.clearBanner()},setDraft:(e,t)=>e.set(e=>({...e,draft:typeof t==`string`?t:``})),cancelCompose:e=>{e.set(e=>({...e,mode:`list`,draft:``})),e.signal.setMode(null)},async submitReply(e){let t=e.state.draft.trim();if(!t){e.set(e=>({...e,mode:`list`,draft:``})),e.signal.setMode(null);return}let n=ND(e.state),r=e.state.auth;if(!n||!r){e.signal.setBanner(`No open conversation to reply to.`,`error`),e.set(e=>({...e,mode:`list`})),e.signal.setMode(null);return}let i=e.state.openUrn;e.set(e=>({...e,mode:`list`})),e.signal.setMode(null),e.signal.setStatus(`Sending…`);let a=await e.execute(iO,{...oO(e.state),csrf:r.csrf,myMemberId:r.memberId,recipient:n.recipientId,text:t,conversationUrn:i||void 0});if(!a.ok){e.signal.setStatus(null),pO(e,a.error);return}e.set(e=>({...e,thread:[...e.thread,{urn:``,sender:`You`,text:t,ts:Date.now(),fromMe:!0}],draft:``}));let o=await e.execute(nO,{...oO(e.state),csrf:r.csrf,conversationUrn:i||``});o.ok&&e.set(e=>({...e,thread:JD(o.data,r.memberId)})),e.signal.clearBanner(),e.signal.setStatus(`Sent`)},startReact:e=>{if(!e.state.openUrn||e.state.thread.length===0){e.signal.setBanner(`Open a conversation first`,`action`);return}e.set(e=>({...e,mode:`react`,reactCursor:0})),e.signal.setMode(`react`),e.signal.clearBanner()},reactPrev:e=>e.set(e=>({...e,reactCursor:Math.max(0,e.reactCursor-1)})),reactNext:e=>e.set(e=>({...e,reactCursor:Math.min(bD.length-1,e.reactCursor+1)})),reactPick:(e,t)=>e.set(e=>({...e,reactCursor:typeof t==`number`?Math.max(0,Math.min(bD.length-1,t)):e.reactCursor})),async submitReact(e){let t=e.state.thread.length?e.state.thread[e.state.thread.length-1]:null,n=e.state.auth;if(e.set(e=>({...e,mode:`list`})),e.signal.setMode(null),!t||!t.urn||!n){e.signal.setBanner(`No message to react to.`,`error`);return}let r=bD[e.state.reactCursor]||bD[0];e.signal.setStatus(`Reacting…`);let i=await e.execute(aO,{...oO(e.state),csrf:n.csrf,messageUrn:t.urn,emoji:r});if(!i.ok){e.signal.setStatus(null),pO(e,i.error);return}e.signal.clearBanner(),e.signal.setStatus(`Reacted `+r)},quit:e=>e.signal.quit()}};function hO(e){return{ok:!0,data:e}}function gO(e){return{ok:!1,error:e}}var _O=[`👍`,`❤️`,`😂`,`🔥`,`👏`,`😮`],vO={error:3,action:2,info:1},yO=[{id:`linkedin`,label:`LinkedIn`,badge:{glyph:`in`,fg:`36`},connectKey:`L`},{id:`gmail`,label:`Gmail`,badge:{glyph:`@`,fg:`31`},connectKey:`G`}],bO={};for(let e of yO)bO[e.id]=e;function xO(e){let t=bO[e];return t&&t.badge||{glyph:`?`,fg:`37`}}function SO(e){let t=bO[e];return t&&t.label||e}var CO=[`Jan`,`Feb`,`Mar`,`Apr`,`May`,`Jun`,`Jul`,`Aug`,`Sep`,`Oct`,`Nov`,`Dec`];function wO(e,t){let n=String(e??``);return n.length>t?n.slice(0,Math.max(0,t-1))+`…`:n}function TO(e,t=Date.now()){if(!e)return``;let n=Math.floor((t-e)/1e3);if(n<60)return`now`;let r=Math.floor(n/60);if(r<60)return`${r}m`;let i=Math.floor(r/60);if(i<24)return`${i}h`;let a=Math.floor(i/24);if(a<7)return`${a}d`;let o=new Date(e),s=CO[o.getMonth()]||``,c=new Date(t);return o.getFullYear()===c.getFullYear()?`${s} ${o.getDate()}`:`${s} ʼ${String(o.getFullYear()).slice(-2)}`}function EO(e){if(!e)return``;let t=new Date(e);return`${t.getFullYear()}-${t.getMonth()}-${t.getDate()}`}function DO(e,t=Date.now()){let n=new Date(e),r=new Date(t),i=(e,t)=>e.getFullYear()===t.getFullYear()&&e.getMonth()===t.getMonth()&&e.getDate()===t.getDate();if(i(n,r))return`Today`;if(i(n,new Date(t-864e5)))return`Yesterday`;let a=CO[n.getMonth()]||``;return n.getFullYear()===r.getFullYear()?`${a} ${n.getDate()}`:`${a} ${n.getDate()}, ${n.getFullYear()}`}function OO(e,t){let n=String(t??``),r=`${e}:`.toLowerCase();return n.toLowerCase().startsWith(r)?n:`${e}: ${n}`}function kO(e){let t=0;for(let n of yO)if(e.ready[n.id])for(let r of e.rowsBySource[n.id]||[])r.unread&&t++;return t}function AO(e){let t=null,n=-1;for(let r of yO){let i=e.banners[r.id];if(!i||!i.display)continue;let a=(vO[i.display.level]||0)+(i.display.blocking?10:0);a>n&&(n=a,t={label:r.label,d:i.display})}return t}var jO=`https://mail.google.com`,MO=25,NO=25,PO=5,FO=1200,IO=new Set([`no-cdp`,`not-logged-in`,`capture-not-dev`,`capture-missing`]);function LO(e){return new Promise(t=>setTimeout(t,e))}function RO(e){return JSON.stringify(e).replace(/\u2028/g,`\\u2028`).replace(/\u2029/g,`\\u2029`)}function zO(e,t,n){return`import {${t}} from '${e}'; return await ${n===null?`${t}()`:`${t}(${RO(n)})`}`}function BO(e,t,n){return t&&e.push(`--target`,String(t)),n!=null&&n!==``&&e.push(`--port`,String(n)),e}function VO(e,t){return t!=null&&t!==``&&e.push(`--port`,String(t)),e}function HO(e){let t=String(e||``).trim();return t===``?null:JSON.parse(t)}function UO(e){let t=String(e||``).split(/\r?\n/).map(e=>e.trim()).filter(Boolean);for(let e=t.length-1;e>=0;e--)if(/^ERROR:/i.test(t[e]))return t[e].replace(/^ERROR:\s*/i,``).trim();return t.length?t[t.length-1]:`capture exec failed`}function WO(e,t){return{kind:e,display:t}}var GO=`This view needs a capture dev checkout (vault/ source + esbuild). Not available in the published package.`;function KO(e){let t=String(e||``);return/No browser with CDP found/i.test(t)||/fetch failed/i.test(t)||/failed to fetch/i.test(t)||/ECONNREFUSED/i.test(t)?{kind:`no-cdp`}:/No tab found/i.test(t)?{kind:`no-tab`}:/DEV_ONLY/i.test(t)||/dev-only feature of capture/i.test(t)||/published package/i.test(t)?{kind:`capture-not-dev`}:/RateLimited/i.test(t)||/\b429\b/.test(t)?{kind:`rate-limited`}:/Unauthenticated/i.test(t)||/XSRF token not found/i.test(t)||/GLOBALS not found/i.test(t)||/may not be logged in/i.test(t)||/not be logged in/i.test(t)||/Not on Gmail domain/i.test(t)||/Account number not found/i.test(t)||/Navigate to mail\.google\.com/i.test(t)?{kind:`not-logged-in`}:{kind:`error`,message:UO(t)}}function qO(e){switch(e&&e.kind||`error`){case`no-cdp`:return WO(`no-cdp`,{headline:`No debuggable browser`,explanation:`crtr drives a browser over CDP and none is running.`,nextStep:`Launch Chrome with --remote-debugging-port=9222 (or Arc), then press g`,banner:`Gmail: no debuggable browser — launch one, then g`,level:`error`,blocking:!0});case`no-tab`:return WO(`no-tab`,{headline:`No Gmail tab`,explanation:`Open mail.google.com in the debuggable browser.`,nextStep:`Press G to connect`,banner:`Gmail: open mail.google.com, then press g`,level:`action`,blocking:!0});case`not-logged-in`:return WO(`not-logged-in`,{headline:`Log in to Gmail`,explanation:`Gmail needs a sign-in in the browser.`,nextStep:`Log in in the opened tab, then press g`,banner:`Gmail: log in, then press g`,level:`action`,blocking:!0});case`rate-limited`:return WO(`rate-limited`,{headline:`Gmail is throttling`,explanation:`Too many requests — wait a moment before retrying.`,nextStep:`Press g to retry`,banner:`Gmail: throttled — wait, then press g`,level:`info`,blocking:!1});case`capture-not-dev`:return WO(`capture-not-dev`,{headline:`Browser bridge unavailable`,explanation:GO,nextStep:null,banner:`Gmail: browser bridge unavailable — capture dev checkout required`,level:`error`,blocking:!0});case`still-loading`:return WO(`still-loading`,{headline:`Still loading Gmail…`,explanation:`Gmail is taking a while to load.`,nextStep:`Press g to retry`,banner:`Gmail: still loading — press g to retry`,level:`action`,blocking:!1});default:{let t=e&&e.message||`Unknown error.`;return WO(`error`,{headline:`Something went wrong`,explanation:t,nextStep:`Press g to retry`,banner:`Gmail: ${wO(t,80)}`,level:`error`,blocking:!0})}}}function JO(){return qO({kind:`error`,message:`capture binary not found — install capture or set CAPTURE_BIN.`})}function YO(e){return typeof e==`number`&&Number.isFinite(e)?e:0}function XO(e){let t=e||{};return typeof t.name==`string`&&t.name.trim()?t.name:typeof t.email==`string`&&t.email.trim()?t.email:`Unknown`}function ZO(e){let t=e||{};return typeof t.email==`string`?t.email:``}function QO(e){let t=e||{},n=typeof t.threadId==`string`?t.threadId:``,r=t.from||{};return{sourceId:`gmail`,key:`gmail:${n}`,name:XO(r),snippet:typeof t.snippet==`string`&&t.snippet?t.snippet:typeof t.subject==`string`?t.subject:``,unread:t.unread===!0,ts:YO(t.date),ref:{threadId:n,messageId:typeof t.messageId==`string`?t.messageId:``,subject:typeof t.subject==`string`?t.subject:``,fromEmail:ZO(r),fromName:XO(r)}}}function $O(e,t){let n=e||{},r=n.from||{},i=ZO(r);return{sender:XO(r),fromMe:!!t&&i.toLowerCase()===t.toLowerCase(),text:typeof n.body==`string`&&n.body?n.body:typeof n.snippet==`string`?n.snippet:``,ts:YO(n.date)}}function ek(e){let t=String(e||``).replace(/^\s*(re:\s*)+/i,``).trim();return t?`Re: ${t}`:`Re:`}function tk(e){try{return new URL(e).hostname.toLowerCase()===`mail.google.com`}catch{return!1}}var nk={id:`gmail-discover`,request:e=>({kind:`exec`,bin:`capture`,args:VO([`list`],e&&e.port)}),parse:e=>{if(!e.ok)return gO(JO());if(e.exitCode!==0)return gO(qO(KO(e.stderr)));let t;try{t=HO(e.stdout)||[]}catch{return gO(qO({kind:`error`,message:`could not parse capture list output`}))}if(!Array.isArray(t))return gO(qO({kind:`no-tab`}));let n=t.filter(e=>e&&typeof e.url==`string`&&tk(e.url))[0];return n&&n.id?hO(String(n.id)):gO(qO({kind:`no-tab`}))}},rk={id:`gmail-context`,request:e=>({kind:`exec`,bin:`capture`,args:BO([`exec`,zO(`libs/gmail`,`getContext`,null)],e&&e.target,e&&e.port)}),parse:e=>{if(!e.ok)return gO(JO());if(e.exitCode!==0)return gO(qO(KO(e.stderr)));let t;try{t=HO(e.stdout)||{}}catch{return gO(qO({kind:`error`,message:`could not parse getContext output`}))}return!t.xsrf||t.account==null||!t.globals?gO(qO({kind:`error`,message:`getContext() returned no xsrf/account/globals`})):hO({xsrf:String(t.xsrf),account:Number(t.account),email:typeof t.email==`string`?t.email:``,globals:t.globals})}},ik={id:`gmail-inbox`,request:e=>({kind:`exec`,bin:`capture`,args:BO([`exec`,zO(`libs/gmail`,`listInbox`,{xsrf:e.xsrf,account:e.account,globals:e.globals,count:e&&e.count||NO})],e&&e.target,e&&e.port)}),parse:e=>{if(!e.ok)return gO(JO());if(e.exitCode!==0)return gO(qO(KO(e.stderr)));let t;try{t=HO(e.stdout)||{}}catch{return gO(qO({kind:`error`,message:`could not parse listInbox output`}))}return hO((t&&Array.isArray(t.messages)?t.messages:[]).map(QO))}},ak={id:`gmail-thread`,request:e=>({kind:`exec`,bin:`capture`,args:BO([`exec`,zO(`libs/gmail`,`readEmail`,{xsrf:e.xsrf,account:e.account,globals:e.globals,threadId:e.threadId})],e&&e.target,e&&e.port)}),parse:e=>{if(!e.ok)return gO(JO());if(e.exitCode!==0)return gO(qO(KO(e.stderr)));let t;try{t=HO(e.stdout)||{}}catch{return gO(qO({kind:`error`,message:`could not parse readEmail output`}))}return hO(t&&Array.isArray(t.messages)?t.messages:[])}},ok={id:`gmail-open`,request:e=>({kind:`exec`,bin:`capture`,args:VO([`open`,jO],e&&e.port)}),parse:e=>{if(!e.ok)return gO(JO());if(e.exitCode!==0)return gO(qO(KO(e.stderr)));let t;try{t=HO(e.stdout)||{}}catch{return gO(qO({kind:`error`,message:`could not parse capture open output`}))}return t&&t.id?hO(String(t.id)):gO(qO({kind:`error`,message:`capture open returned no tab id`}))}},sk={id:`gmail-reply`,request:e=>({kind:`exec`,bin:`capture`,args:BO([`exec`,zO(`libs/gmail`,`replyEmail`,{xsrf:e.xsrf,account:e.account,globals:e.globals,threadId:e.threadId,originalMsgId:e.originalMsgId,to:e.to,subject:e.subject,body:e.body})],e&&e.target,e&&e.port)}),parse:e=>{if(!e.ok)return gO(JO());if(e.exitCode!==0)return gO(qO(KO(e.stderr)));let t;try{t=HO(e.stdout)||{}}catch{return gO(qO({kind:`error`,message:`could not parse replyEmail output`}))}return t&&t.success===!1?gO(qO({kind:`error`,message:`Gmail rejected the reply`})):hO(void 0)}};function ck(e,t){let n=t&&t.message?String(t.message):e;return WO(`error`,{headline:e,explanation:n,nextStep:`Press g to retry`,banner:n,level:`error`,blocking:!1})}function lk(e){return e===`no-tab`?`open`:e===`not-messaging`?`navigate`:null}async function uk(e,t){if(!t.target){let n=await e.resolve(ZD,{port:t.port});if(!n.ok)return n;t.target=n.data}if(!t.ctx){let n=await e.resolve(QD,{target:t.target,port:t.port});if(!n.ok)return n;t.ctx=n.data}let n=await e.resolve($D,{target:t.target,port:t.port,csrf:t.ctx.csrf,memberId:t.ctx.memberId,count:MO});return n.ok?(t.convos=n.data,{ok:!0}):n}async function dk(e,t){for(let n=1;n<=PO;n++){await LO(FO);let n=await uk(e,t);if(n.ok)return t.loginTabOpened=!1,{ok:!0};if(IO.has(n.error.kind))return n}return gO(WO(`settling`,{headline:`Still loading`,explanation:`LinkedIn is taking a moment to load.`,nextStep:`Press g to retry`,banner:`still loading — press g to retry`,level:`action`,blocking:!1}))}async function fk(e,t){let n=await uk(e,t);if(n.ok)return t.loginTabOpened=!1,{ok:!0};let r=n.error,i=lk(r.kind);if(i){let n=i===`open`?await e.execute(eO,{port:t.port}):await e.execute(tO,{target:t.target,port:t.port});return n.ok?(i===`open`&&n.data&&(t.target=n.data),t.ctx=null,dk(e,t)):n}if(r.kind===`not-logged-in`&&!t.loginTabOpened){let n=await e.execute(eO,{port:t.port});n.ok&&n.data&&(t.target=n.data),t.loginTabOpened=!0}return n}async function pk(e,t){if(!t.target){let n=await e.resolve(nk,{port:t.port});if(!n.ok)return n;t.target=n.data}if(!t.ctx){let n=await e.resolve(rk,{target:t.target,port:t.port});if(!n.ok)return n;t.ctx=n.data}return{ok:!0}}async function mk(e,t){for(let n=1;n<=PO;n++){await LO(FO),e.signal.setStatus(`Loading Gmail… (${n})`);let r=await pk(e,t);if(r.ok)return t.loginTabOpened=!1,{ok:!0};if(IO.has(r.error.kind))return r}return gO(qO({kind:`still-loading`}))}async function hk(e,t){let n=await pk(e,t);if(n.ok)return t.loginTabOpened=!1,{ok:!0};let r=n.error.kind;if(r===`no-tab`){e.signal.setStatus(`Opening Gmail…`);let n=await e.execute(ok,{port:t.port});return n.ok?(t.target=n.data,t.ctx=null,mk(e,t)):n}if(r===`not-logged-in`){if(!t.loginTabOpened){let n=await e.execute(ok,{port:t.port});n.ok&&n.data&&(t.target=n.data),t.loginTabOpened=!0}return n}return n}function gk(e){let t=e.ctx?e.ctx.csrf:``,n=e.ctx?e.ctx.memberId:``;return(e.convos||[]).map(e=>({sourceId:`linkedin`,key:`linkedin:${e.urn}`,name:e.name||`Unknown`,snippet:e.lastMessage||``,unread:!!e.unread,ts:e.ts||0,ref:{urn:e.urn,recipientId:e.recipientId,csrf:t,memberId:n}}))}async function _k(e,t,n){let r=t.ctx&&t.ctx.csrf||n.csrf,i=t.ctx&&t.ctx.memberId||n.memberId;if(!r)return gO(WO(`error`,{headline:`Something went wrong`,explanation:`not authenticated yet`,nextStep:`Press g to retry`,banner:`not authenticated yet`,level:`error`,blocking:!1}));let a=await e.execute(nO,{target:t.target,port:t.port,csrf:r,conversationUrn:n.urn});if(!a.ok)return a;let o=JD(a.data,i);t.threads={...t.threads,[n.urn]:o};let s=(t.convos||[]).find(e=>e.urn===n.urn);s&&(s.unread=!1);let c=s?s.name:`Conversation`,l=o.map(e=>({sender:e.sender,fromMe:e.fromMe,text:e.text,ts:e.ts}));return hO({title:c||`Conversation`,messages:l,canReply:!0,canReact:!0})}async function vk(e,t,n){let r=n&&n.threadId?n.threadId:``;if(!r)return gO(qO({kind:`error`,message:`loadThread: missing threadId`}));let i=await e.resolve(ak,{xsrf:t.ctx.xsrf,account:t.ctx.account,globals:t.ctx.globals,threadId:r,target:t.target,port:t.port});if(!i.ok)return i;let a=i.data,o=t.ctx.email||``,s=a[0]||{},c=a[a.length-1]||{},l=typeof s.subject==`string`&&s.subject||n&&n.subject||`(no subject)`,u=ZO(c.from)||ZO(s.from),d=c.to&&c.to[0]&&ZO(c.to[0])||s.to&&s.to[0]&&ZO(s.to[0])||``,f=u||d?`from ${u||`—`} · to ${d||`—`}`:void 0;return hO({title:l,...f?{subtitle:f}:{},messages:a.map(e=>$O(e,o)),canReply:!0,canReact:!1})}async function yk(e,t,n,r){let i=n&&n.threadId?n.threadId:``;if(!i)return gO(qO({kind:`error`,message:`reply: missing threadId`}));let a=String(r??``);if(!a.trim())return gO(qO({kind:`error`,message:`reply: empty body`}));let o=await e.resolve(ak,{xsrf:t.ctx.xsrf,account:t.ctx.account,globals:t.ctx.globals,threadId:i,target:t.target,port:t.port});if(!o.ok)return o;let s=o.data;if(s.length===0)return gO(qO({kind:`error`,message:`reply: thread has no messages`}));let c=(t.ctx.email||``).toLowerCase(),l=s[s.length-1]||{},u=typeof l.messageId==`string`?l.messageId:n&&n.messageId||``;if(!u)return gO(qO({kind:`error`,message:`reply: could not resolve message id`}));let d=null;for(let e=s.length-1;e>=0;e--){let t=ZO((s[e]||{}).from).toLowerCase();if(t&&t!==c){d=s[e];break}}let f=d?ZO(d.from):``;if(f||=l.to&&l.to[0]&&ZO(l.to[0])||``,!f&&n&&n.fromEmail&&(f=n.fromEmail),!f)return gO(qO({kind:`error`,message:`reply: could not determine recipient`}));let p=ek(d&&d.subject||l.subject||n&&n.subject||``);return e.execute(sk,{xsrf:t.ctx.xsrf,account:t.ctx.account,globals:t.ctx.globals,threadId:i,originalMsgId:u,to:f,subject:p,body:a,target:t.target,port:t.port})}function bk(e){e.sort((e,t)=>!!e.unread==!!t.unread?(t.ts||0)-(e.ts||0):e.unread?-1:1)}function xk(e,t,n,r){let i=n[r],a=i&&i.key,o=[];for(let n of yO)t!==`all`&&t!==n.id||(o=o.concat(e[n.id]||[]));bk(o);let s=r;if(a){let e=o.findIndex(e=>e.key===a);e>=0&&(s=e)}return s>=o.length&&(s=Math.max(0,o.length-1)),s<0&&(s=0),{rows:o,cursor:s}}function Sk(e,t){let n=[];for(let e of yO){let r=t&&t[e.id];r&&r.display&&n.push({label:e.label,d:r.display})}if(n.length===0){e.signal.clearBanner();return}let r=`info`;for(let e of n)(vO[e.d.level]||0)>(vO[r]||0)&&(r=e.d.level);let i=n.map(e=>OO(e.label,e.d.banner||e.d.explanation||e.d.headline)).join(` · `);e.signal.setBanner(i,r)}function Ck(e,t,n){let r=SO(t),i=n&&n.display,a=i&&(i.banner||i.explanation||i.headline);a?e.signal.setBanner(OO(r,a),i&&i.level||`error`):e.signal.setBanner(`${r}: error`,`error`)}function wk(e){let t=e.state,n=kO(t),r=[];if(n>0&&r.push(`${n} unread`),t.filter!==`all`){let e=bO[t.filter];r.push(`${e?e.label:t.filter} only`)}e.signal.setSubtitle(r.length?r.join(` · `):null)}function Tk(e){return{...e,threads:{...e.threads||{}},convos:(e.convos||[]).map(e=>({...e}))}}function Ek(e){return{...e}}function Dk(e){return{linkedin:Tk(e.linkedin),gmail:Ek(e.gmail)}}var Ok={manifest:{id:`inbox`,title:`Inbox`,description:`Combined inbox — triage LinkedIn + Gmail in one ranked list`,refreshMs:3e4},init(e){return{subs:{linkedin:{ctx:null,target:e&&e.target||null,port:e&&e.port||void 0,convos:[],threads:{},loginTabOpened:!1},gmail:{target:null,port:void 0,ctx:null,loginTabOpened:!1}},rowsBySource:{},rows:[],cursor:0,scroll:0,openKey:null,openRow:null,thread:null,threadScroll:0,mode:`list`,draft:``,reactCursor:0,filter:`all`,banners:{},ready:{},lastFetch:0}},sources:{gmailDiscover:nk,gmailContext:rk,gmailInbox:ik,gmailThread:ak},commands:{gmailOpen:ok,gmailReply:sk},intents:{async refresh(e){if(e.state.mode!==`list`)return;e.signal.setStatus(`Refreshing…`);let t=e.state,n=Dk(t.subs),r={},i={},a={};for(let t of yO){let o=t.id,s=n[o],c;try{c=o===`linkedin`?await fk(e,s):await hk(e,s)}catch(e){c={ok:!1,error:ck(`source error`,e)}}if(c.ok)if(a[o]=!0,i[o]=null,o===`linkedin`)r[o]=gk(s);else{let t;try{t=await e.resolve(ik,{xsrf:s.ctx.xsrf,account:s.ctx.account,globals:s.ctx.globals,count:NO,target:s.target,port:s.port})}catch(e){t={ok:!1,error:ck(`list failed`,e)}}t.ok?r[o]=t.data:(r[o]=[],i[o]=t.error)}else a[o]=!1,r[o]=[],i[o]=c.error}e.set(e=>{let{rows:t,cursor:o}=xk(r,e.filter,e.rows,e.cursor);return{...e,subs:n,rowsBySource:r,banners:i,ready:a,rows:t,cursor:o,lastFetch:Date.now()}}),e.signal.setStatus(null),Sk(e,i),wk(e)},cursorDown:e=>e.set(e=>({...e,cursor:e.rows.length?Math.min(e.rows.length-1,e.cursor+1):0})),cursorUp:e=>e.set(e=>({...e,cursor:Math.max(0,e.cursor-1)})),async open(e,t){let n=e.state,r=typeof t==`number`?t:n.cursor,i=n.rows[r];if(!i)return;e.signal.setStatus(`Loading thread…`);let a=Dk(n.subs),o=i.sourceId,s;try{s=o===`linkedin`?await _k(e,a.linkedin,i.ref):await vk(e,a.gmail,i.ref)}catch(e){s={ok:!1,error:ck(`could not load thread`,e)}}if(e.signal.setStatus(null),!s.ok){e.set(e=>({...e,subs:a,openKey:i.key,openRow:i,thread:null,threadScroll:0})),Ck(e,o,s.error);return}e.set(e=>{let t=e=>e.key===i.key?{...e,unread:!1}:e,n=e.rows.map(t),r={...e.rowsBySource};return r[o]=(r[o]||[]).map(t),{...e,subs:a,rows:n,rowsBySource:r,openKey:i.key,openRow:i,thread:s.data,threadScroll:0}}),wk(e)},cycleFilter(e){e.set(e=>{let t=[`all`,`linkedin`,`gmail`],n=t[(t.indexOf(e.filter)+1)%t.length]||`all`,{rows:r,cursor:i}=xk(e.rowsBySource,n,e.rows,e.cursor);return{...e,filter:n,rows:r,cursor:i}}),wk(e)},startReply(e){let t=e.state;if(!t.openKey||!t.thread){e.signal.setBanner(`Open a conversation first`,`action`);return}t.thread.canReply&&(e.set(e=>({...e,mode:`reply`,draft:``})),e.signal.setMode(`compose`))},startReact(e){let t=e.state;if(!t.openKey||!t.thread){e.signal.setBanner(`Open a conversation first`,`action`);return}!t.thread.canReact||(t.thread.messages||[]).length===0||(e.set(e=>({...e,mode:`react`,reactCursor:0})),e.signal.setMode(`react`))},setDraft:(e,t)=>e.set(e=>({...e,draft:typeof t==`string`?t:``})),async submitReply(e){let t=e.state,n=t.draft.trim();if(e.set(e=>({...e,mode:`list`})),e.signal.setMode(null),!n)return;let r=t.openRow,i=r?r.sourceId:null;if(!r||!i){e.signal.setBanner(`No open conversation to reply to.`,`error`);return}e.signal.setStatus(`Sending…`);let a=Dk(t.subs),o;try{o=i===`linkedin`?await e.execute(iO,{target:a.linkedin.target,port:a.linkedin.port,csrf:a.linkedin.ctx&&a.linkedin.ctx.csrf||r.ref.csrf,myMemberId:a.linkedin.ctx&&a.linkedin.ctx.memberId||r.ref.memberId,recipient:r.ref.recipientId,text:n,conversationUrn:r.ref.urn}):await yk(e,a.gmail,r.ref,n)}catch(e){o={ok:!1,error:ck(`send failed`,e)}}if(!o.ok){e.signal.setStatus(null),Ck(e,i,o.error);return}let s=t.thread;try{let t=i===`linkedin`?await _k(e,a.linkedin,r.ref):await vk(e,a.gmail,r.ref);t.ok&&(s=t.data)}catch{}e.set(e=>({...e,subs:a,draft:``,thread:s})),e.signal.setStatus(`Sent`),Sk(e,e.state.banners)},reactPrev:e=>e.set(e=>({...e,reactCursor:Math.max(0,e.reactCursor-1)})),reactNext:e=>e.set(e=>({...e,reactCursor:Math.min(_O.length-1,e.reactCursor+1)})),async submitReact(e,t){let n=e.state,r=n.openRow,i=r?r.sourceId:null;if(e.set(e=>({...e,mode:`list`})),e.signal.setMode(null),i!==`linkedin`||!r){e.signal.setBanner(`Cannot react here.`,`error`);return}let a=_O[typeof t==`number`?t:n.reactCursor]||_O[0],o=Dk(n.subs).linkedin,s=o.threads[r.ref.urn]||[],c=s.length?s[s.length-1]:null;if(!c||!c.urn){e.signal.setBanner(`LinkedIn: no message to react to`,`error`);return}let l=o.ctx&&o.ctx.csrf||r.ref.csrf;if(!l){e.signal.setBanner(`LinkedIn: not authenticated yet`,`error`);return}e.signal.setStatus(`Reacting…`);let u;try{u=await e.execute(aO,{target:o.target,port:o.port,csrf:l,messageUrn:c.urn,emoji:a})}catch(e){u={ok:!1,error:ck(`react failed`,e)}}if(!u.ok){e.signal.setStatus(null),Ck(e,`linkedin`,u.error);return}e.signal.setStatus(`Reacted `+a),Sk(e,e.state.banners)},cancelCompose(e){e.set(e=>({...e,mode:`list`,draft:``})),e.signal.setMode(null)},async connectLinkedin(e){let t=Dk(e.state.subs),n=t.linkedin;e.signal.setStatus(`Connecting LinkedIn…`);let r;try{r=await e.execute(eO,{port:n.port})}catch(e){r={ok:!1,error:ck(`connect failed`,e)}}if(e.signal.setStatus(null),!r.ok){e.set(e=>({...e,banners:{...e.banners,linkedin:r.error}})),Sk(e,e.state.banners);return}r.data&&(n.target=r.data),n.ctx=null,e.set(e=>({...e,subs:t})),await e.dispatch(`refresh`)},async connectGmail(e){let t=Dk(e.state.subs),n=t.gmail;e.signal.setStatus(`Connecting Gmail…`);let r;try{r=await e.execute(ok,{port:n.port})}catch(e){r={ok:!1,error:ck(`connect failed`,e)}}if(e.signal.setStatus(null),!r.ok){e.set(e=>({...e,banners:{...e.banners,gmail:r.error}})),Sk(e,e.state.banners);return}r.data&&(n.target=r.data),n.ctx=null,n.loginTabOpened=!0,e.set(e=>({...e,subs:t})),await e.dispatch(`refresh`)},quit:e=>e.signal.quit()}},kk={linkedin:`text-cyan-600`,gmail:`text-red-600`};function Ak({row:e,selected:t,onClick:n}){let r=kk[e.sourceId]||`text-slate-400`,i=(e.snippet||``).replace(/\s+/g,` `).trim(),a=TO(e.ts);return(0,z.jsxs)(`li`,{onClick:n,className:`flex items-baseline gap-1.5 rounded px-2 py-1 cursor-pointer ${t?`bg-slate-200`:`hover:bg-slate-100`}`,children:[(0,z.jsx)(`span`,{className:`shrink-0 ${e.unread?`text-cyan-600`:`text-transparent`}`,children:`●`}),(0,z.jsx)(`span`,{className:`shrink-0 font-bold ${r}`,children:xO(e.sourceId).glyph}),(0,z.jsx)(`span`,{className:`shrink-0 ${e.unread?`font-semibold`:``}`,children:e.name||`Unknown`}),i?(0,z.jsx)(`span`,{className:`truncate text-slate-400`,children:i}):null,a?(0,z.jsx)(`span`,{className:`ml-auto shrink-0 text-slate-400`,children:a}):null]})}function jk({state:e,dispatch:t}){if(!e.openKey||!e.thread)return(0,z.jsxs)(`div`,{className:`flex h-full flex-col items-center justify-center gap-1 text-slate-400`,children:[(0,z.jsx)(`div`,{children:`✉ No conversation open`}),(0,z.jsx)(`div`,{className:`text-slate-500`,children:`Click a conversation to open it.`})]});let n=e.thread,r=n.messages||[],i=null;return(0,z.jsxs)(`div`,{className:`flex h-full flex-col`,children:[(0,z.jsxs)(`div`,{className:`border-b border-slate-200 pb-1`,children:[(0,z.jsx)(`div`,{className:`font-semibold`,children:n.title||`Conversation`}),n.subtitle?(0,z.jsx)(`div`,{className:`text-slate-400`,children:n.subtitle}):null]}),(0,z.jsx)(`div`,{className:`flex-1 overflow-y-auto py-2`,children:r.length===0?(0,z.jsx)(`div`,{className:`text-slate-400`,children:`Loading messages…`}):r.map((e,t)=>{let n=EO(e.ts),r=e.ts&&n!==i?DO(e.ts):null;return e.ts&&(i=n),(0,z.jsxs)(`div`,{children:[r?(0,z.jsxs)(`div`,{className:`my-1 text-center text-xs text-slate-400`,children:[`── `,r,` ──`]}):null,e.fromMe?(0,z.jsxs)(`div`,{className:`border-l-2 border-green-600 pl-2`,children:[(0,z.jsx)(`div`,{className:`font-semibold text-green-700`,children:`You`}),(0,z.jsx)(`div`,{className:`whitespace-pre-wrap`,children:e.text})]}):(0,z.jsxs)(`div`,{className:`mb-2`,children:[(0,z.jsx)(`div`,{className:`font-semibold text-cyan-700`,children:e.sender||`Them`}),(0,z.jsx)(`div`,{className:`whitespace-pre-wrap`,children:e.text})]})]},t)})}),e.mode===`reply`?(0,z.jsxs)(`div`,{className:`border-t border-slate-200 pt-2`,children:[(0,z.jsx)(`textarea`,{autoFocus:!0,value:e.draft,onChange:e=>t(`setDraft`,e.target.value),onKeyDown:e=>{e.key===`Enter`&&!e.shiftKey?(e.preventDefault(),t(`submitReply`)):e.key===`Escape`&&(e.preventDefault(),t(`cancelCompose`))},className:`w-full rounded border border-slate-300 p-2 font-mono text-sm outline-none focus:border-slate-500`,rows:3,placeholder:`Type a reply…`}),(0,z.jsxs)(`div`,{className:`mt-1 flex gap-2`,children:[(0,z.jsx)(`button`,{type:`button`,onClick:()=>t(`submitReply`),className:`rounded bg-slate-700 px-3 py-1 text-white hover:bg-slate-800`,children:`Send`}),(0,z.jsx)(`button`,{type:`button`,onClick:()=>t(`cancelCompose`),className:`rounded border border-slate-300 px-3 py-1 text-slate-700 hover:bg-slate-100`,children:`Cancel`})]})]}):null,e.mode===`react`?(0,z.jsx)(`div`,{className:`border-t border-slate-200 pt-2`,children:(0,z.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,z.jsx)(`span`,{className:`text-amber-600`,children:`☺ React`}),_O.map((n,r)=>(0,z.jsx)(`button`,{type:`button`,onClick:()=>t(`submitReact`,r),className:`rounded px-2 py-1 text-lg ${r===e.reactCursor?`bg-slate-200`:`hover:bg-slate-100`}`,children:n},n)),(0,z.jsx)(`button`,{type:`button`,onClick:()=>t(`cancelCompose`),className:`ml-auto rounded border border-slate-300 px-3 py-1 text-slate-700 hover:bg-slate-100`,children:`Cancel`})]})}):null]})}function Mk({state:e,dispatch:t}){if(e.rows.length===0){if(e.lastFetch===0)return(0,z.jsx)(rE,{label:`Loading inbox…`});let n=AO(e);if(n){let e=n.d;return(0,z.jsx)(e.level===`error`?aE:oE,{headline:`${n.label}: ${e.headline}`,explanation:e.explanation,nextStep:e.nextStep||void 0,onRetry:()=>t(`refresh`)})}return(0,z.jsx)(iE,{label:`All caught up — no messages.`})}return(0,z.jsxs)(`div`,{className:`flex h-full gap-3 font-mono text-sm outline-none`,tabIndex:0,onKeyDown:n=>{e.mode===`list`&&(n.key===`j`||n.key===`ArrowDown`?(t(`cursorDown`),n.preventDefault()):n.key===`k`||n.key===`ArrowUp`?(t(`cursorUp`),n.preventDefault()):n.key===`Enter`?(t(`open`,e.cursor),n.preventDefault()):n.key===`g`?t(`refresh`):n.key===`r`?t(`startReply`):n.key===`e`?t(`startReact`):n.key===`f`&&t(`cycleFilter`))},children:[(0,z.jsx)(`ul`,{className:`w-2/5 shrink-0 overflow-y-auto border-r border-slate-200 pr-2`,children:e.rows.map((n,r)=>(0,z.jsx)(Ak,{row:n,selected:r===e.cursor,onClick:()=>t(`open`,r)},n.key))}),(0,z.jsx)(`div`,{className:`min-w-0 flex-1`,children:(0,z.jsx)(jk,{state:e,dispatch:t})})]})}function Nk(e){return{ok:!0,data:e}}function Pk(e){return{ok:!1,error:e}}function Fk(e){let t=String(e||``).split(/\r?\n/).map(e=>e.trim()).filter(Boolean);return t.length?t[0]:``}function Ik(e){let t=parseInt(String(e),10);return Number.isFinite(t)?t:0}function Lk(e,t){return`${e} ${t}${e===1?``:`s`}`}var Rk=[`Jan`,`Feb`,`Mar`,`Apr`,`May`,`Jun`,`Jul`,`Aug`,`Sep`,`Oct`,`Nov`,`Dec`];function zk(e,t){let n=Date.parse(e);if(Number.isNaN(n))return``;let r=Math.max(0,Math.floor((t-n)/1e3));if(r<60)return`now`;let i=Math.floor(r/60);if(i<60)return`${i}m`;let a=Math.floor(i/60);if(a<24)return`${a}h`;let o=Math.floor(a/24);if(o<7)return`${o}d`;let s=new Date(n),c=Rk[s.getMonth()]||`?`;return s.getFullYear()===new Date(t).getFullYear()?`${c} ${s.getDate()}`:`${c} ʼ${String(s.getFullYear()).slice(-2)}`}function Bk(e,t){return e===`U`||t===`U`||e===`A`&&t===`A`||e===`D`&&t===`D`?`conflict`:e===`?`||t===`?`?`untracked`:t!==` `&&t!==``?`modified`:e!==` `&&e!==``?`staged`:`modified`}function Vk(e){let t=String(e||``).split(`\0`),n=[],r={staged:0,modified:0,untracked:0,conflict:0};for(let e=0;e<t.length;e++){let i=t[e];if(!i||i.length<3)continue;let a=i[0],o=i[1],s=i.slice(3);(a===`R`||a===`C`||o===`R`||o===`C`)&&e++;let c=Bk(a,o);c===`conflict`?r.conflict++:c===`untracked`?r.untracked++:(a!==` `&&a!==`?`&&a!==``&&r.staged++,o!==` `&&o!==`?`&&o!==``&&r.modified++),n.push({path:s,xy:`${a}${o}`,cls:c,add:0,del:0})}return{files:n,counts:r}}function Hk(e){let t=[];for(let n of String(e||``).split(/\r?\n/)){if(!n.trim())continue;let e=n.split(` `);if(e.length<3)continue;let r=e[0],i=e[1],a=e.slice(2).join(` `);r===`-`||i===`-`||a.includes(` => `)||t.push({path:a,add:Ik(r),del:Ik(i)})}return t}var Uk={conflict:0,staged:1,modified:2,untracked:3},Wk=new Set([`FAILURE`,`ERROR`,`CANCELLED`,`TIMED_OUT`,`ACTION_REQUIRED`,`STARTUP_FAILURE`]),Gk=new Set([`SUCCESS`,`NEUTRAL`,`SKIPPED`]);function Kk(e){if(!Array.isArray(e)||e.length===0)return`none`;let t=!1;for(let n of e){let e=String(n&&n.conclusion||``).toUpperCase(),r=String(n&&n.state||``).toUpperCase(),i=String(n&&n.status||``).toUpperCase();if(Wk.has(e)||Wk.has(r))return`fail`;(i&&i!==`COMPLETED`||r&&!Gk.has(r)&&!Wk.has(r)||!e&&!r&&!i)&&(t=!0)}return t?`pending`:`pass`}function qk(e){let t=String(e||``).toUpperCase();return t===`APPROVED`?`approved`:t===`CHANGES_REQUESTED`?`changes`:`review`}var Jk={kind:`git-missing`,display:{headline:`git not found`,explanation:`crtr could not find the git binary on PATH.`,nextStep:`Install git, then press g.`,level:`error`,blocking:!0}},Yk={kind:`not-a-repo`,display:{headline:`Not a git repository`,explanation:`This view monitors a git repo, and the current directory is not one.`,nextStep:"cd into a repository (or run `git init`), then press g.",level:`action`,blocking:!0}};function Xk(e){return{kind:`git-failed`,display:{headline:`Git unavailable`,explanation:e||`A git command failed.`,nextStep:`Press g to retry.`,level:`error`,blocking:!1}}}function Zk(e,t){return{kind:e,display:{headline:t,explanation:``,nextStep:``,level:`info`,blocking:!1}}}function Qk(e){let t=String(e||``).toLowerCase();return/auth|logged in|gh auth login|authentication|not logged/.test(t)?Zk(`gh-unauthed`,"gh is not authenticated — run `gh auth login`."):/could not resolve host|dial tcp|network is unreachable|no such host|timeout|temporary failure|connection refused/.test(t)?Zk(`gh-network`,`Cannot reach GitHub (offline?).`):/could not resolve to a repository|no git remote|none of the git remotes|no default remote|not a github|head branch could not/.test(t)?Zk(`gh-no-remote`,`No GitHub remote for this repository.`):Zk(`gh-failed`,Fk(e)||`gh command failed.`)}var $k={id:`git-status`,request:()=>({kind:`exec`,bin:`git`,args:[`status`,`--porcelain=v1`,`-z`,`--untracked-files=all`]}),parse:e=>{if(!e.ok)return Pk(Jk);if(e.exitCode!==0){let t=String(e.stderr||``).toLowerCase();return/not a git repository/.test(t)?Pk(Yk):Pk(Xk(Fk(e.stderr)))}return Nk(Vk(e.stdout))}},eA={id:`git-branch`,request:()=>({kind:`exec`,bin:`git`,args:[`branch`,`--show-current`]}),parse:e=>Nk(e.ok&&e.exitCode===0?e.stdout.trim():``)},tA={id:`git-head`,request:()=>({kind:`exec`,bin:`git`,args:[`rev-parse`,`--short`,`HEAD`]}),parse:e=>Nk(e.ok&&e.exitCode===0?e.stdout.trim():``)},nA={id:`git-upstream`,request:()=>({kind:`exec`,bin:`git`,args:[`rev-parse`,`--abbrev-ref`,`--symbolic-full-name`,`@{upstream}`]}),parse:e=>Nk(e.ok&&e.exitCode===0?e.stdout.trim():null)},rA={id:`git-ahead-behind`,request:()=>({kind:`exec`,bin:`git`,args:[`rev-list`,`--left-right`,`--count`,`@{upstream}...HEAD`]}),parse:e=>{if(!e.ok||e.exitCode!==0)return Nk({ahead:0,behind:0});let t=e.stdout.trim().split(/\s+/);return Nk({behind:Ik(t[0]),ahead:Ik(t[1])})}},iA={id:`git-log`,request:()=>({kind:`exec`,bin:`git`,args:[`log`,`-1`,`--pretty=%h%x1f%s%x1f%cI`]}),parse:e=>{if(!e.ok||e.exitCode!==0||e.stdout.trim()===``)return Nk(null);let[t,n,r]=e.stdout.replace(/\n$/,``).split(``);return Nk({sha:t||``,subject:n||``,when:r||``})}},aA={id:`git-diff`,request:()=>({kind:`exec`,bin:`git`,args:[`diff`,`--numstat`]}),parse:e=>Nk(e.ok&&e.exitCode===0?Hk(e.stdout):[])},oA={id:`git-diff-cached`,request:()=>({kind:`exec`,bin:`git`,args:[`diff`,`--cached`,`--numstat`]}),parse:e=>Nk(e.ok&&e.exitCode===0?Hk(e.stdout):[])},sA={id:`prs`,request:()=>({kind:`exec`,bin:`gh`,args:[`pr`,`list`,`--state`,`open`,`--limit`,`30`,`--json`,`number,title,headRefName,reviewDecision,statusCheckRollup,updatedAt,isDraft`]}),parse:e=>{if(!e.ok)return Pk(Zk(`gh-missing`,`gh (GitHub CLI) not found — install it to see PRs.`));if(e.exitCode!==0)return Pk(Qk(e.stderr||e.stdout));let t;try{t=JSON.parse(e.stdout.trim()||`[]`)}catch{return Pk(Zk(`gh-failed`,`could not parse gh output as JSON.`))}return Array.isArray(t)||(t=[]),Nk(t.map(e=>{let t=e||{},n=String(t.headRefName||``);return{number:typeof t.number==`number`?t.number:Ik(t.number),title:String(t.title||`(untitled)`),headRefName:n,isDraft:!!t.isDraft,current:!1,review:qk(t.reviewDecision),ci:Kk(t.statusCheckRollup),updatedAt:String(t.updatedAt||``)}}))}};function cA(e){let t=[],n=e.git;if(t.push({kind:`label`,text:`Working tree`}),!n||n.files.length===0)t.push({kind:`clean`});else for(let e of n.files)t.push({kind:`file`,file:e});if(t.push({kind:`spacer`}),t.push({kind:`label`,text:`Pull requests`}),e.prNote)t.push({kind:`note`,text:e.prNote});else if(e.prs.length===0)t.push({kind:`note`,text:`No open pull requests.`});else for(let n of e.prs)t.push({kind:`pr`,pr:n});return t}function lA(e){let t=e.counts;if(e.files.length===0)return`clean`;let n=[];return t.conflict&&n.push(`${t.conflict} conflict`),t.staged&&n.push(`${t.staged} staged`),t.modified&&n.push(`${t.modified} modified`),t.untracked&&n.push(`${t.untracked} untracked`),n.join(` · `)||Lk(e.files.length,`change`)}function uA(e){let t=e.git;if(!t)return null;let n=t.branch;return t.ahead&&(n+=` ↑${t.ahead}`),t.behind&&(n+=` ↓${t.behind}`),n+=` · ${lA(t)}`,n}function dA(e){let t=e.git;return t?`${t.files.length===0?`clean`:Lk(t.files.length,`change`)} · ${e.prNote?`PRs n/a`:Lk(e.prs.length,`PR`)}`:null}function fA(e){let t=e.git,n=[];if(t&&t.counts.conflict&&n.push(`${Lk(t.counts.conflict,`conflict`)}`),!e.prNote){let t=e.prs.filter(e=>e.ci===`fail`).length,r=e.prs.filter(e=>e.review===`changes`).length;t&&n.push(`${t} PR${t===1?``:`s`} failing CI`),r&&n.push(`${r} PR${r===1?``:`s`} need changes`)}return n.length?`${n.join(` · `)} — needs attention`:null}var pA={manifest:{id:`git-pr`,title:`Git / PR`,description:`Local git state + GitHub PR/CI status for the repo at this cwd`,refreshMs:5e3},init(){return{git:null,gitErr:null,prs:[],prNote:null,board:[],cursor:0,scroll:0,lastFetch:0}},sources:{gitStatusSource:$k,gitBranchSource:eA,gitHeadSource:tA,gitUpstreamSource:nA,gitAheadBehindSource:rA,gitLogSource:iA,gitDiffSource:aA,gitDiffCachedSource:oA,prsSource:sA},intents:{async refresh(e){e.signal.setStatus(`Reading git…`);let t=await e.resolve($k);if(!t.ok){let n=t.error,r=e.state.git!=null,i=!n.display.blocking&&r;e.set(e=>{let t={...e,gitErr:n};return i||(t.git=null,t.prs=[],t.prNote=null,t.board=cA(t)),t.lastFetch=Date.now(),t}),i?e.signal.setBanner(n.display.explanation,n.display.level):e.signal.clearBanner(),e.signal.setStatus(null),e.signal.setSubtitle(i?uA(e.state):null);return}let[n,r,i,a,o,s,c]=await Promise.all([e.resolve(eA),e.resolve(tA),e.resolve(nA),e.resolve(rA),e.resolve(iA),e.resolve(aA),e.resolve(oA)]),l=n.ok?n.data:``,u=!1;l===``&&(u=!0,l=r.ok&&r.data?`(detached ${r.data})`:`(no branch)`);let d=i.ok?i.data:null,f=0,p=0;d&&a.ok&&(f=a.data.ahead,p=a.data.behind);let m=o.ok?o.data:null,h=new Map,g=e=>{for(let t of e){let e=h.get(t.path)||{add:0,del:0};e.add+=t.add,e.del+=t.del,h.set(t.path,e)}};s.ok&&g(s.data),c.ok&&g(c.data);let{files:_,counts:v}=t.data;for(let e of _){let t=h.get(e.path);t&&(e.add=t.add,e.del=t.del)}_.sort((e,t)=>{let n=Uk[e.cls]-Uk[t.cls];return n===0?e.path<t.path?-1:+(e.path>t.path):n});let y={branch:l,detached:u,upstream:d,ahead:f,behind:p,lastCommit:m,files:_,counts:v},b=await e.resolve(sA),x=[],S=null;b.ok?(x=b.data.map(e=>({...e,current:e.headRefName!==``&&e.headRefName===l})),x.sort((e,t)=>e.current===t.current?e.updatedAt<t.updatedAt?1:e.updatedAt>t.updatedAt?-1:0:e.current?-1:1)):S=b.error.display.headline,e.set(e=>{let t={...e,git:y,gitErr:null,prs:x,prNote:S};return t.board=cA(t),t.cursor>=t.board.length&&(t.cursor=Math.max(0,t.board.length-1)),t.lastFetch=Date.now(),t});let C={git:y,prs:x,prNote:S};e.signal.setSubtitle(uA(C));let w=fA(C);w?e.signal.setBanner(w,`action`):e.signal.clearBanner(),e.signal.setStatus(dA(C))},cursorDown:e=>e.set(e=>({...e,cursor:e.board.length?Math.min(e.board.length-1,e.cursor+1):0})),cursorUp:e=>e.set(e=>({...e,cursor:Math.max(0,e.cursor-1)})),select:(e,t)=>e.set(e=>({...e,cursor:typeof t==`number`?Math.max(0,Math.min(e.board.length-1,t)):e.cursor})),quit:e=>e.signal.quit()}},mA={staged:{glyph:`●`,cls:`text-green-600`},modified:{glyph:`○`,cls:`text-amber-600`},untracked:{glyph:`?`,cls:`text-slate-400`},conflict:{glyph:`✗`,cls:`text-red-600`}},hA={approved:{glyph:`✓`,cls:`text-green-600`},changes:{glyph:`✗`,cls:`text-red-600`},review:{glyph:`◌`,cls:`text-slate-400`}},gA={pass:{glyph:`✓`,cls:`text-green-600`},fail:{glyph:`✗`,cls:`text-red-600`},pending:{glyph:`⟳`,cls:`text-amber-600`},none:{glyph:`·`,cls:`text-slate-400`}};function _A({g:e}){let t=Date.now();return(0,z.jsxs)(`div`,{className:`border-b border-slate-200 pb-2`,children:[(0,z.jsxs)(`div`,{className:`flex items-baseline gap-2`,children:[(0,z.jsxs)(`span`,{className:`font-semibold text-cyan-700`,children:[`⎇ `,e.branch]}),e.upstream?(0,z.jsxs)(`span`,{className:`text-slate-400`,children:[`→ `,e.upstream,e.ahead?(0,z.jsxs)(`span`,{className:`ml-1 text-green-600`,children:[`↑`,e.ahead]}):null,e.behind?(0,z.jsxs)(`span`,{className:`ml-1 text-amber-600`,children:[`↓`,e.behind]}):null,!e.ahead&&!e.behind?(0,z.jsx)(`span`,{className:`ml-1 text-green-600`,children:`✓ up to date`}):null]}):(0,z.jsx)(`span`,{className:`text-slate-400`,children:`· no upstream`}),(0,z.jsx)(`span`,{className:`ml-auto`,children:vA(e)})]}),(0,z.jsx)(`div`,{className:`mt-0.5 text-slate-600`,children:e.lastCommit?(0,z.jsxs)(`span`,{className:`flex items-baseline gap-2`,children:[(0,z.jsx)(`span`,{className:`text-slate-400`,children:`⊙`}),(0,z.jsx)(`span`,{className:`text-amber-600`,children:e.lastCommit.sha}),(0,z.jsx)(`span`,{className:`truncate`,children:e.lastCommit.subject}),(0,z.jsx)(`span`,{className:`ml-auto shrink-0 text-slate-400`,children:zk(e.lastCommit.when,t)})]}):(0,z.jsx)(`span`,{className:`text-slate-400`,children:`⊙ no commits yet`})})]})}function vA(e){if(e.files.length===0)return(0,z.jsx)(`span`,{className:`text-green-600`,children:`✓ clean`});let t=e.counts;return(0,z.jsx)(`span`,{className:`flex gap-3`,children:[{n:t.conflict,word:`conflict`,glyph:`✗`,cls:`text-red-600`},{n:t.staged,word:`staged`,glyph:`●`,cls:`text-green-600`},{n:t.modified,word:`modified`,glyph:`○`,cls:`text-amber-600`},{n:t.untracked,word:`untracked`,glyph:`?`,cls:`text-slate-400`}].filter(e=>e.n).map((e,t)=>(0,z.jsxs)(`span`,{className:e.cls,children:[e.glyph,` `,e.n,` `,e.word]},t))})}function yA({row:e,selected:t,onClick:n}){let r=Date.now(),i=`flex items-baseline gap-1.5 rounded px-2 py-0.5 ${t?`bg-slate-200`:``}`;if(e.kind===`label`)return(0,z.jsx)(`li`,{className:`px-2 pt-2 pb-0.5 text-xs uppercase tracking-wide text-slate-400`,children:e.text});if(e.kind===`spacer`)return(0,z.jsx)(`li`,{className:`h-2`,"aria-hidden":!0});if(e.kind===`clean`)return(0,z.jsxs)(`li`,{className:i,onClick:n,children:[(0,z.jsx)(`span`,{className:`text-green-600`,children:`✓`}),(0,z.jsx)(`span`,{className:`text-slate-400`,children:`nothing to commit, working tree clean`})]});if(e.kind===`note`)return(0,z.jsxs)(`li`,{className:i,onClick:n,children:[(0,z.jsx)(`span`,{className:`text-slate-400`,children:`·`}),(0,z.jsx)(`span`,{className:`text-slate-400`,children:e.text})]});if(e.kind===`file`){let t=e.file,r=mA[t.cls]||mA.modified;return(0,z.jsxs)(`li`,{className:i,onClick:n,children:[(0,z.jsx)(`span`,{className:r.cls,children:r.glyph}),(0,z.jsx)(`span`,{className:`text-slate-400`,children:t.xy.replace(/ /g,`·`)}),(0,z.jsx)(`span`,{className:t.cls===`conflict`?`text-red-600`:``,children:t.path}),t.add||t.del?(0,z.jsxs)(`span`,{className:`ml-auto shrink-0 text-slate-400`,children:[`+`,t.add,` −`,t.del]}):null]})}let a=e.pr,o=hA[a.review]||hA.review,s=gA[a.ci]||gA.none,c=zk(a.updatedAt,r);return(0,z.jsxs)(`li`,{className:i,onClick:n,children:[(0,z.jsxs)(`span`,{className:`text-cyan-700 ${a.current?`font-bold`:``}`,children:[`#`,a.number]}),(0,z.jsx)(`span`,{className:a.isDraft?`text-slate-400`:``,children:a.title}),a.isDraft?(0,z.jsx)(`span`,{className:`text-slate-400`,children:`(draft)`}):null,(0,z.jsxs)(`span`,{className:`ml-auto flex shrink-0 items-baseline gap-2`,children:[(0,z.jsx)(`span`,{className:o.cls,children:o.glyph}),(0,z.jsx)(`span`,{className:s.cls,children:s.glyph}),c?(0,z.jsx)(`span`,{className:`text-slate-400`,children:c}):null]})]})}function bA({state:e,dispatch:t}){if(!e.git){if(e.gitErr){let n=e.gitErr.display;return(0,z.jsx)(n.level===`error`?aE:oE,{headline:n.headline,explanation:n.explanation,nextStep:n.nextStep,onRetry:()=>t(`refresh`)})}return(0,z.jsx)(rE,{label:`Reading git…`})}let n=e.git,r=n.files.length===0&&e.prs.length===0&&!e.prNote;return(0,z.jsxs)(`div`,{className:`font-mono text-sm outline-none`,tabIndex:0,onKeyDown:e=>{e.key===`j`||e.key===`ArrowDown`?(t(`cursorDown`),e.preventDefault()):e.key===`k`||e.key===`ArrowUp`?(t(`cursorUp`),e.preventDefault()):e.key===`g`&&t(`refresh`)},children:[(0,z.jsx)(_A,{g:n}),r?(0,z.jsx)(iE,{label:`${n.branch} — clean working tree, no open PRs.`}):(0,z.jsx)(`ul`,{className:`mt-1`,children:e.board.map((n,r)=>(0,z.jsx)(yA,{row:n,selected:r===e.cursor,onClick:()=>t(`select`,r)},r))})]})}function xA({rec:e,dispatch:t}){let n=e.display;return e.spinner?(0,z.jsx)(rE,{label:n.headline}):(0,z.jsx)(n.level===`error`?aE:oE,{headline:n.headline,explanation:n.explanation,nextStep:n.nextStep||void 0,onRetry:()=>t(`refresh`)})}function SA({state:e,dispatch:t}){return(0,z.jsx)(`ul`,{className:`divide-y divide-slate-100 overflow-y-auto`,children:e.convos.map((n,r)=>{let i=r===e.convCursor,a=n.urn===e.openUrn,o=jD(n.ts);return(0,z.jsxs)(`li`,{onClick:()=>t(`openThread`,r),className:`flex cursor-pointer items-baseline gap-2 px-3 py-2 ${i?`bg-slate-100`:``} ${a?`border-l-2 border-cyan-500`:`border-l-2 border-transparent`}`,children:[(0,z.jsx)(`span`,{className:`shrink-0 ${n.unread?`text-cyan-600`:`text-transparent`}`,children:`●`}),(0,z.jsxs)(`span`,{className:`min-w-0 flex-1`,children:[(0,z.jsx)(`span`,{className:n.unread?`font-semibold`:``,children:n.name||`Unknown`}),n.lastMessage?(0,z.jsx)(`span`,{className:`ml-2 truncate text-slate-400`,children:n.lastMessage.replace(/\s+/g,` `).trim()}):null]}),o?(0,z.jsx)(`span`,{className:`shrink-0 text-xs text-slate-400`,children:o}):null]},n.urn||r)})})}function CA({m:e}){let t=jD(e.ts);return e.fromMe?(0,z.jsxs)(`div`,{className:`border-l-2 border-green-500 pl-2`,children:[(0,z.jsxs)(`div`,{className:`flex items-baseline justify-between`,children:[(0,z.jsx)(`span`,{className:`font-semibold text-green-600`,children:`You`}),t?(0,z.jsx)(`span`,{className:`text-xs text-slate-400`,children:t}):null]}),(0,z.jsx)(`div`,{className:`whitespace-pre-wrap text-slate-700`,children:e.text})]}):(0,z.jsxs)(`div`,{children:[(0,z.jsxs)(`div`,{className:`flex items-baseline justify-between`,children:[(0,z.jsx)(`span`,{className:`font-semibold text-cyan-700`,children:e.sender||`Them`}),t?(0,z.jsx)(`span`,{className:`text-xs text-slate-400`,children:t}):null]}),(0,z.jsx)(`div`,{className:`whitespace-pre-wrap text-slate-700`,children:e.text})]})}function wA({state:e,dispatch:t}){let n=e.openUrn?e.convos.find(t=>t.urn===e.openUrn):null;return e.openUrn?(0,z.jsxs)(`div`,{className:`flex h-full flex-col`,children:[(0,z.jsxs)(`div`,{className:`flex items-baseline justify-between border-b border-slate-200 px-3 py-2`,children:[(0,z.jsx)(`span`,{className:`font-semibold`,children:n?n.name:`Conversation`}),n&&jD(n.ts)?(0,z.jsx)(`span`,{className:`text-xs text-slate-400`,children:jD(n.ts)}):null]}),(0,z.jsx)(`div`,{className:`flex-1 space-y-3 overflow-y-auto px-3 py-3`,children:e.thread.length===0?(0,z.jsx)(`div`,{className:`text-slate-400`,children:`Loading messages…`}):e.thread.map((e,t)=>(0,z.jsx)(CA,{m:e},e.urn||t))}),e.mode===`reply`?(0,z.jsx)(TA,{state:e,dispatch:t}):null,e.mode===`react`?(0,z.jsx)(EA,{state:e,dispatch:t}):null]}):(0,z.jsxs)(`div`,{className:`flex h-full flex-col items-center justify-center gap-1 p-8 text-center text-slate-400`,children:[(0,z.jsx)(`div`,{children:`✉ No conversation open`}),(0,z.jsx)(`div`,{className:`text-sm`,children:`Select a conversation to open it.`})]})}function TA({state:e,dispatch:t}){return(0,z.jsx)(`div`,{className:`border-t border-slate-200 p-2`,children:(0,z.jsx)(`textarea`,{autoFocus:!0,rows:2,value:e.draft,placeholder:`Reply… (Enter to send · Esc to cancel)`,onChange:e=>t(`setDraft`,e.target.value),onKeyDown:e=>{e.key===`Enter`&&!e.shiftKey?(e.preventDefault(),t(`submitReply`)):e.key===`Escape`&&(e.preventDefault(),t(`cancelCompose`))},className:`w-full resize-none rounded border border-slate-300 p-2 font-mono text-sm outline-none focus:border-amber-500`})})}function EA({state:e,dispatch:t}){return(0,z.jsxs)(`div`,{className:`flex items-center gap-2 border-t border-slate-200 p-2`,children:[(0,z.jsx)(`span`,{className:`text-amber-600`,children:`☺ React`}),bD.map((n,r)=>(0,z.jsx)(`button`,{type:`button`,onClick:()=>{t(`reactPick`,r),t(`submitReact`)},className:`rounded px-2 py-1 text-lg ${r===e.reactCursor?`bg-slate-200`:``} hover:bg-slate-100`,children:n},n)),(0,z.jsx)(`button`,{type:`button`,onClick:()=>t(`cancelCompose`),className:`ml-auto text-sm text-slate-500 hover:text-slate-700`,children:`Esc cancel`})]})}function DA({state:e,dispatch:t}){return e.recovery?(0,z.jsx)(xA,{rec:e.recovery,dispatch:t}):e.convos.length===0?e.lastFetch===0?(0,z.jsx)(rE,{label:`Loading conversations…`}):(0,z.jsx)(iE,{label:`All caught up — no conversations in your inbox.`}):(0,z.jsxs)(`div`,{className:`grid h-full grid-cols-3 font-mono text-sm outline-none`,tabIndex:0,onKeyDown:n=>{e.mode===`list`&&(n.key===`j`||n.key===`ArrowDown`?(n.preventDefault(),t(`cursorDown`)):n.key===`k`||n.key===`ArrowUp`?(n.preventDefault(),t(`cursorUp`)):n.key===`Enter`?(n.preventDefault(),t(`openThread`,e.convCursor)):n.key===`r`?(n.preventDefault(),t(`startReply`)):n.key===`e`?(n.preventDefault(),t(`startReact`)):n.key===`g`&&t(`refresh`))},children:[(0,z.jsx)(`div`,{className:`col-span-1 border-r border-slate-200`,children:(0,z.jsx)(SA,{state:e,dispatch:t})}),(0,z.jsx)(`div`,{className:`col-span-2`,children:(0,z.jsx)(wA,{state:e,dispatch:t})})]})}var OA=`user`,kA=[`ultra`,`strong`,`medium`,`light`],AA={ultra:`anthropic`,strong:`anthropic`,medium:`anthropic`,light:`anthropic`};function jA(e){return{ok:!0,data:e}}function MA(e){return{ok:!1,error:e}}function NA(e){return e==null?``:String(e)}function PA(e,t=`error`){return{kind:`settings-config`,display:{headline:`Settings unavailable`,explanation:e,nextStep:`Press g to retry.`,level:t,blocking:t===`error`}}}function FA(e){return{id:`config-get-${e}`,request:()=>({kind:`exec`,bin:`crtr`,args:[`sys`,`config`,`get`,e,`--scope`,OA,`--json`]}),parse:t=>{if(!t.ok||t.exitCode!==0)return MA(PA(NA(t.stderr||t.stdout||`crtr sys config get ${e} failed`)));let n;try{n=JSON.parse(String(t.stdout||``).trim()||`{}`)}catch{return MA(PA(`could not parse crtr sys config get ${e} output as JSON`))}return!n||typeof n!=`object`||!(`value`in n)?MA(PA(`unexpected response from crtr sys config get ${e}`)):jA(n.value)}}}function IA(e,t){return{id:`config-set-${e}`,request:()=>({kind:`exec`,bin:`crtr`,args:[`sys`,`config`,`set`,e,`--value`,t,`--scope`,OA,`--json`]}),parse:t=>{if(!t.ok||t.exitCode!==0)return MA(PA(NA(t.stderr||t.stdout||`crtr sys config set ${e} failed`),`error`));let n;try{n=JSON.parse(String(t.stdout||``).trim()||`{}`)}catch{return MA(PA(`could not parse crtr sys config set ${e} output as JSON`))}return!n||typeof n!=`object`||!(`value`in n)?MA(PA(`unexpected response from crtr sys config set ${e}`)):jA(n.value)}}}function LA(e){if(!e.modelLadders)return[];let t=[{kind:`defaultProvider`}];for(let e of kA)t.push({kind:`matrix`,strength:e});for(let n of Object.keys(e.personaStrengths).sort((e,t)=>e.localeCompare(t)))t.push({kind:`persona`,persona:n});return t.push({kind:`addPersona`}),t}function RA(e){let t=LA(e);return t.length===0?0:Math.min(e.cursor,t.length-1)}function zA(e){return LA(e)[RA(e)]}function BA(e){let t=e.trim();return t===`ultra`||t===`strong`||t===`medium`||t===`light`?t:null}function VA(e){let t=e.trim();if(!t)return null;let n=t.indexOf(`=`);if(n>0){let e=t.slice(0,n).trim(),r=BA(t.slice(n+1));return e&&r?{persona:e,strength:r}:null}let r=t.split(/\s+/).filter(Boolean);if(r.length>=2){let e=BA(r[r.length-1]||``),t=r.slice(0,-1).join(` `).trim();return t&&e?{persona:t,strength:e}:null}return null}function HA(e,t){if(t.kind===`defaultProvider`)return{kind:`defaultProvider`,draft:``,value:e.modelLadders?.defaultProvider??`anthropic`,label:`default provider`};if(t.kind===`matrix`){let n=e.matrixSelection[t.strength]??AA[t.strength];return{kind:`matrixCell`,strength:t.strength,provider:n,draft:``,value:e.modelLadders?.[n]?.[t.strength]??``,label:`${n} / ${t.strength}`}}return t.kind===`persona`?{kind:`personaStrength`,persona:t.persona,draft:``,value:e.personaStrengths[t.persona]??`strong`,label:t.persona}:{kind:`personaNew`,draft:``,value:``,label:`new persona strength`}}async function UA(e){let[t,n]=await Promise.all([e.resolve(FA(`modelLadders`)),e.resolve(FA(`personaStrengths`))]);return t.ok?n.ok?jA({ladders:t.data,personaStrengths:n.data}):n:t}function WA(e,t,n=`error`){n===`info`?e.signal.setStatus(t):e.signal.setBanner(t,n)}async function GA(e,t){let n=String(t.value??``).trim();if(t.kind===`defaultProvider`){if(n!==`anthropic`&&n!==`openai`)return WA(e,`default provider must be anthropic or openai`,`action`),!1}else if(t.kind===`matrixCell`){if(!n)return WA(e,`model id cannot be empty`,`action`),!1}else if(t.kind===`personaStrength`){if(!BA(n))return WA(e,`persona strength must be ultra, strong, medium, or light`,`action`),!1}else if(t.kind===`personaNew`&&!VA(n))return WA(e,`use "kind strength" or "kind=strength"`,`action`),!1;e.signal.setStatus(`Saving…`);let r=``,i=``;if(t.kind===`defaultProvider`)r=`modelLadders.defaultProvider`,i=n;else if(t.kind===`matrixCell`)r=`modelLadders.${t.provider}.${t.strength}`,i=n;else if(t.kind===`personaStrength`)r=`personaStrengths.${t.persona}`,i=n;else{let e=VA(n);if(!e)return!1;r=`personaStrengths.${e.persona}`,i=e.strength}let a=await e.execute(IA(r,i));return a.ok?(e.set(e=>{let r={...e,edit:null};if(t.kind===`defaultProvider`&&r.modelLadders&&(r.modelLadders={...r.modelLadders,defaultProvider:n}),t.kind===`matrixCell`&&r.modelLadders&&(r.modelLadders={...r.modelLadders,[t.provider]:{...r.modelLadders[t.provider],[t.strength]:n}}),t.kind===`personaStrength`&&(r.personaStrengths={...r.personaStrengths,[t.persona]:n}),t.kind===`personaNew`){let e=VA(n);e&&(r.personaStrengths={...r.personaStrengths,[e.persona]:e.strength})}return r}),e.signal.setStatus(`Saved`),await e.dispatch(`refresh`),!0):(WA(e,a.error.display.explanation||a.error.display.headline,a.error.display.level),e.signal.setStatus(null),!1)}var KA={manifest:{id:`settings`,title:`Model Ladders`,subtitle:`provider × strength matrix and persona strengths`,description:`edit model ladders and personaStrengths through crtr commands`},init(){return{modelLadders:null,personaStrengths:{},matrixSelection:{...AA},cursor:0,scroll:0,lastFetch:0,sourceError:null,edit:null}},sources:{modelLadders:FA(`modelLadders`),personaStrengths:FA(`personaStrengths`)},intents:{async refresh(e){e.signal.setStatus(`Loading settings…`);let t=await UA(e);if(!t.ok){e.state.lastFetch===0||e.state.modelLadders===null?e.set(e=>({...e,sourceError:t.error,lastFetch:Date.now()})):WA(e,t.error.display.explanation||t.error.display.headline,t.error.display.level),e.signal.setStatus(null);return}e.set(e=>{let n={...e,modelLadders:t.data.ladders,personaStrengths:t.data.personaStrengths,sourceError:null,lastFetch:Date.now()};return{...n,cursor:Math.min(n.cursor,Math.max(0,LA(n).length-1))}}),e.signal.clearBanner(),e.signal.setStatus(null)},cursorDown:e=>e.set(e=>({...e,cursor:Math.min(Math.max(0,LA(e).length-1),e.cursor+1)})),cursorUp:e=>e.set(e=>({...e,cursor:Math.max(0,e.cursor-1)})),matrixLeft:e=>e.set(e=>{let t=zA(e);return!t||t.kind!==`matrix`?e:{...e,matrixSelection:{...e.matrixSelection,[t.strength]:`anthropic`}}}),matrixRight:e=>e.set(e=>{let t=zA(e);return!t||t.kind!==`matrix`?e:{...e,matrixSelection:{...e.matrixSelection,[t.strength]:`openai`}}}),beginEdit:e=>e.set(e=>{let t=zA(e);if(!t||e.modelLadders===null)return e;let n=HA(e,t);return{...e,edit:{...n}}}),beginEditFor:(e,t)=>e.set(e=>{if(e.modelLadders===null)return e;let n=t&&typeof t==`object`?t:{};if(n.kind===`matrix`&&typeof n.strength==`string`){let t=n.provider===`openai`?`openai`:`anthropic`,r=e.modelLadders?.[t]?.[n.strength]??``;return{...e,edit:{kind:`matrixCell`,strength:n.strength,provider:t,draft:r,value:r,label:`${t} / ${n.strength}`}}}if(n.kind===`defaultProvider`){let t=e.modelLadders.defaultProvider??`anthropic`;return{...e,edit:{kind:`defaultProvider`,draft:t,value:t,label:`default provider`}}}if(n.kind===`persona`&&typeof n.persona==`string`){let t=e.personaStrengths[n.persona]??`strong`;return{...e,edit:{kind:`personaStrength`,persona:n.persona,draft:t,value:t,label:n.persona}}}return{...e,edit:{kind:`personaNew`,draft:``,value:``,label:`new persona strength`}}}),setDraft:(e,t)=>e.set(e=>e.edit?{...e,edit:{...e.edit,draft:typeof t==`string`?t:``}}:e),cancelEdit:e=>e.set(e=>e.edit?{...e,edit:null}:e),async submitEdit(e){let t=e.state.edit;t&&await GA(e,{kind:t.kind,value:t.draft,strength:t.strength,provider:t.provider,persona:t.persona})},async applyValue(e,t){let n=t&&typeof t==`object`?t:null;!n||e.state.modelLadders===null||await GA(e,n)},jumpAddPersona:e=>e.set(e=>({...e,cursor:Math.max(0,LA(e).length-1)})),selectRow:(e,t)=>e.set(e=>{let n=t&&typeof t==`object`?t:{},r=LA(e).findIndex(e=>e.kind===`defaultProvider`&&n.kind===`defaultProvider`||e.kind===`matrix`&&n.kind===`matrix`&&n.strength===e.strength||e.kind===`persona`&&n.kind===`persona`&&n.persona===e.persona||e.kind===`addPersona`&&n.kind===`addPersona`);return r<0?e:n.kind===`matrix`&&(n.provider===`anthropic`||n.provider===`openai`)&&typeof n.strength==`string`?{...e,cursor:r,matrixSelection:{...e.matrixSelection,[n.strength]:n.provider}}:{...e,cursor:r}}),quit:e=>e.signal.quit()}},qA=[`ultra`,`strong`,`medium`,`light`],JA=[`anthropic`,`openai`];function YA({state:e,dispatch:t}){return e.edit?(0,z.jsxs)(`div`,{className:`rounded border border-cyan-300 bg-cyan-50 p-3`,children:[(0,z.jsxs)(`div`,{className:`mb-2 text-sm text-slate-600`,children:[`Editing `,(0,z.jsx)(`span`,{className:`font-semibold text-slate-900`,children:e.edit.label})]}),(0,z.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,z.jsx)(`input`,{autoFocus:!0,value:e.edit.draft,placeholder:e.edit.kind===`personaNew`?`kind strength`:`model id`,onChange:e=>t(`setDraft`,e.target.value),onKeyDown:e=>{e.key===`Enter`?(e.preventDefault(),t(`submitEdit`)):e.key===`Escape`&&(e.preventDefault(),t(`cancelEdit`))},className:`flex-1 rounded border border-slate-300 bg-white px-3 py-2 font-mono text-sm outline-none focus:border-cyan-500`}),(0,z.jsx)(`button`,{type:`button`,onClick:()=>t(`submitEdit`),className:`rounded bg-cyan-600 px-3 py-2 text-sm font-semibold text-white hover:bg-cyan-700`,children:`Save`}),(0,z.jsx)(`button`,{type:`button`,onClick:()=>t(`cancelEdit`),className:`rounded border border-slate-300 bg-white px-3 py-2 text-sm text-slate-600 hover:bg-slate-100`,children:`Cancel`})]}),e.edit.kind===`personaNew`?(0,z.jsxs)(`div`,{className:`mt-2 text-xs text-slate-500`,children:[`Format: `,(0,z.jsx)(`code`,{children:`kind strength`}),` or `,(0,z.jsx)(`code`,{children:`kind=strength`}),` (strength = ultra·strong·medium·light).`]}):null]}):null}function XA({choices:e,value:t,onPick:n}){return(0,z.jsx)(`div`,{className:`inline-flex overflow-hidden rounded border border-slate-300`,children:e.map(r=>(0,z.jsx)(`button`,{type:`button`,onClick:()=>n(r),className:`px-2.5 py-1 text-sm capitalize ${r===t?`bg-cyan-600 text-white`:`bg-white text-slate-600 hover:bg-slate-100`} ${r===e[0]?``:`border-l border-slate-300`}`,children:r},r))})}function ZA(e,t,n){return!!e.edit&&e.edit.kind===`matrixCell`&&e.edit.strength===t&&e.edit.provider===n}function QA({state:e,dispatch:t}){if(e.sourceError&&e.modelLadders===null){let n=e.sourceError.display;return(0,z.jsx)(n.level===`error`?aE:oE,{headline:n.headline,explanation:n.explanation,nextStep:n.nextStep||void 0,onRetry:()=>t(`refresh`)})}if(e.modelLadders===null)return(0,z.jsx)(rE,{label:`Loading model ladders…`});let n=e.modelLadders,r=Object.keys(e.personaStrengths).sort((e,t)=>e.localeCompare(t)),i=!!e.edit&&e.edit.kind===`personaNew`;return(0,z.jsx)(`div`,{className:`h-full overflow-auto text-sm`,children:(0,z.jsxs)(`div`,{className:`space-y-5 p-4`,children:[(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`h1`,{className:`text-base font-semibold`,children:`Model ladders`}),(0,z.jsx)(`p`,{className:`text-xs text-slate-500`,children:`Click a model id to edit it; click a provider or strength to switch it. Changes save immediately.`})]}),(0,z.jsxs)(`div`,{className:`flex items-center gap-3`,children:[(0,z.jsx)(`span`,{className:`font-semibold`,children:`Default provider`}),(0,z.jsx)(XA,{choices:JA,value:n.defaultProvider??`anthropic`,onPick:e=>t(`applyValue`,{kind:`defaultProvider`,value:e})})]}),(0,z.jsx)(`div`,{className:`space-y-3`,children:qA.map(r=>(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`div`,{className:`mb-1 font-semibold capitalize`,children:r}),(0,z.jsx)(`div`,{className:`grid grid-cols-1 gap-2 md:grid-cols-2`,children:JA.map(i=>{if(ZA(e,r,i))return(0,z.jsxs)(`div`,{className:`rounded border border-cyan-300 bg-cyan-50 p-2`,children:[(0,z.jsx)(`div`,{className:`mb-1 text-xs uppercase tracking-wide text-slate-400`,children:i}),(0,z.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,z.jsx)(`input`,{autoFocus:!0,value:e.edit.draft,onChange:e=>t(`setDraft`,e.target.value),onKeyDown:e=>{e.key===`Enter`?(e.preventDefault(),t(`submitEdit`)):e.key===`Escape`&&(e.preventDefault(),t(`cancelEdit`))},className:`flex-1 rounded border border-slate-300 bg-white px-2 py-1 font-mono text-sm outline-none focus:border-cyan-500`}),(0,z.jsx)(`button`,{type:`button`,onClick:()=>t(`submitEdit`),className:`rounded bg-cyan-600 px-2 py-1 text-xs font-semibold text-white hover:bg-cyan-700`,children:`Save`}),(0,z.jsx)(`button`,{type:`button`,onClick:()=>t(`cancelEdit`),className:`rounded border border-slate-300 bg-white px-2 py-1 text-xs text-slate-600 hover:bg-slate-100`,children:`Cancel`})]})]},i);let a=n[i]?.[r]??`—`;return(0,z.jsxs)(`button`,{type:`button`,title:`Click to edit`,onClick:()=>t(`beginEditFor`,{kind:`matrix`,strength:r,provider:i}),className:`rounded border border-slate-200 bg-white px-2 py-1 text-left hover:border-cyan-400 hover:bg-cyan-50`,children:[(0,z.jsx)(`div`,{className:`text-xs uppercase tracking-wide text-slate-400`,children:i}),(0,z.jsx)(`div`,{className:`truncate font-mono text-sm text-slate-800`,children:a})]},i)})})]},r))}),(0,z.jsxs)(`div`,{className:`space-y-2`,children:[(0,z.jsx)(`div`,{className:`font-semibold`,children:`Persona strengths`}),r.length===0?(0,z.jsx)(`div`,{className:`text-xs text-slate-400`,children:`None set yet.`}):null,r.map(n=>(0,z.jsxs)(`div`,{className:`flex items-center gap-3`,children:[(0,z.jsx)(`span`,{className:`w-40 truncate font-mono text-slate-800`,children:n}),(0,z.jsx)(XA,{choices:qA,value:e.personaStrengths[n]??`strong`,onPick:e=>t(`applyValue`,{kind:`personaStrength`,persona:n,value:e})})]},n)),i?(0,z.jsx)(YA,{state:e,dispatch:t}):(0,z.jsx)(`button`,{type:`button`,onClick:()=>t(`beginEditFor`,{kind:`addPersona`}),className:`rounded border border-dashed border-emerald-400 px-3 py-1.5 text-sm font-semibold text-emerald-700 hover:bg-emerald-50`,children:`+ add persona strength`})]})]})})}var $A=`developer`,ej=`base`,tj=`terminal`,nj=!0;function rj(e){return{ok:!0,data:e}}function ij(e){return{ok:!1,error:e}}function $(e){return e==null?``:String(e)}function aj(e){return e===!0||e===`true`||e===1||e===`1`}function oj(e){return Math.ceil(Math.max(0,e)/4)}function sj(e){return $(e).split(/\r?\n/).map(e=>e.trim()).find(Boolean)||``}function cj(e,t=`error`){return{kind:`prompt-review`,display:{headline:`Prompt Studio unavailable`,explanation:e,nextStep:`Press g to retry.`,level:t,blocking:t===`error`}}}function lj(e,t,n){let r={kind:`exec`,bin:e,args:t};return n===void 0?r:{...r,stdin:n}}function uj(e){return{kind:e.kind,mode:e.mode===`base`?`orchestrator`:`base`,lifecycle:e.lifecycle===`terminal`?`resident`:`terminal`,hasManager:e.hasManager,node:e.node}}function dj(e){return{kind:$(e.kind)||$A,mode:e.mode===`orchestrator`?`orchestrator`:`base`,lifecycle:e.lifecycle===`resident`?`resident`:`terminal`,hasManager:aj(e.hasManager),node:e.node?$(e.node):null}}function fj(e){return $(e).replace(/\r\n/g,`
78
- `)}function pj(e){return fj(e).length}function mj(e){return`${e.kind}/${e.mode} · ${e.lifecycle} · manager:${e.hasManager?`yes`:`no`}${e.node?` · node:${e.node}`:``}`}function hj(e){return{"runtime-base":`Runtime base`,"spine-has-manager":`Spine (has manager)`,"spine-no-manager":`Spine (no manager)`,"lifecycle-terminal":`Lifecycle (terminal)`,"lifecycle-resident":`Lifecycle (resident)`,waiting:`Waiting`,"persona-body":`Persona body`,"orchestration-kernel":`Orchestration kernel`,"subpersona-menu":`Sub-persona menu`,"substrate-preferences":`Preferences substrate`,"substrate-memory-guidance":`Memory guidance substrate`,"substrate-knowledge":`Context message — not system prompt`}[e]||e.replace(/[-_]/g,` `)}function gj(e){return!!e&&typeof e==`object`&&`kind`in e&&`mode`in e&&`lifecycle`in e}function _j(e){return $(e).replace(/\s+/g,` `).trim()}function vj(e){return fj(e).split(`
79
- `)}function yj(e,t){let n=vj(e),r=vj(t),i=0;for(;i<n.length&&i<r.length&&n[i]===r[i];)i++;let a=n.length-1,o=r.length-1;for(;a>=i&&o>=i&&n[a]===r[o];)a--,o--;let s=[],c=n.slice(0,i),l=n.slice(a+1);for(let e of c.slice(-2))s.push(` ${e}`);for(let e of n.slice(i,a+1))s.push(`- ${e}`);for(let e of r.slice(i,o+1))s.push(`+ ${e}`);for(let e of l.slice(0,2))s.push(` ${e}`);return s.join(`
80
- `).trim()}function bj(e,t){return!e&&!t?``:e?t?e.text===t.text?e.text:yj(e.text,t.text):`- ${e.text}`:t?`+ ${t.text}`:``}function xj(e,t){let n=new Map(e.map(e=>[e.id,e])),r=new Map(t.map(e=>[e.id,e])),i=[...new Set([...n.keys(),...r.keys()])],a=[];for(let e of i){let t=n.get(e)||null,i=r.get(e)||null;t&&!i?a.push({id:e,label:t.label,kind:`removed`,left:t,right:null,summary:`${t.label} removed in compare config`,diffText:`- ${_j(t.text)}`}):!t&&i?a.push({id:e,label:i.label,kind:`added`,left:null,right:i,summary:`${i.label} added in compare config`,diffText:`+ ${_j(i.text)}`}):t&&i&&(t.included!==i.included||t.text!==i.text||t.condition!==i.condition||t.sourcePath!==i.sourcePath||t.scope!==i.scope)&&a.push({id:e,label:t.label,kind:`changed`,left:t,right:i,summary:`${t.label} changed`,diffText:bj(t,i)})}return a}var Sj={id:`prompt-review-list`,request:()=>lj(`crtr`,[`sys`,`prompt-review`,`--list`,`--json`]),parse:e=>{if(!e.ok||e.exitCode!==0)return ij(cj(sj(e.stderr||e.stdout||`crtr sys prompt-review --list failed`)));let t;try{t=JSON.parse(String(e.stdout||``).trim()||`{}`)}catch{return ij(cj(`could not parse crtr sys prompt-review --list output as JSON`))}return!t||typeof t!=`object`||!Array.isArray(t.kinds)||!Array.isArray(t.modes)||!Array.isArray(t.lifecycles)||typeof t.subPersonas!=`object`?ij(cj(`unexpected response from crtr sys prompt-review --list`)):rj({kinds:t.kinds.map(e=>({kind:$(e.kind),whenToUse:$(e.whenToUse)})),modes:t.modes.filter(e=>e===`base`||e===`orchestrator`),lifecycles:t.lifecycles.filter(e=>e===`terminal`||e===`resident`),subPersonas:Object.fromEntries(Object.entries(t.subPersonas).map(([e,t])=>[e,Array.isArray(t)?t.map(e=>({kind:$(e.kind),whenToUse:$(e.whenToUse)})):[]]))})}},Cj={id:`prompt-review-review`,request:e=>{let t=dj(e||{kind:$A,mode:ej,lifecycle:tj,hasManager:nj,node:null}),n=[`sys`,`prompt-review`,`--kind`,t.kind,`--mode`,t.mode,`--lifecycle`,t.lifecycle,`--has-manager`,t.hasManager?`true`:`false`,`--json`];return t.node&&n.push(`--node`,t.node),lj(`crtr`,n)},parse:e=>{if(!e.ok||e.exitCode!==0)return ij(cj(sj(e.stderr||e.stdout||`crtr sys prompt-review failed`)));let t;try{t=JSON.parse(String(e.stdout||``).trim()||`{}`)}catch{return ij(cj(`could not parse crtr sys prompt-review output as JSON`))}if(!t||typeof t!=`object`||!gj(t.config)||!Array.isArray(t.layers)||typeof t.assembled!=`string`||!t.total||typeof t.total!=`object`||!Array.isArray(t.sources))return ij(cj(`unexpected response from crtr sys prompt-review`));let n=t.layers.map(e=>({id:$(e.id),label:$(e.label)||hj($(e.id)),group:e.group===`persona`||e.group===`generated`||e.group===`substrate`?e.group:`protocol`,source:$(e.source),sourcePath:e.sourcePath?$(e.sourcePath):null,scope:e.scope===`project`||e.scope===`user`||e.scope===`builtin`||e.scope===`generated`||e.scope===`runtime`?e.scope:`builtin`,included:e.included===!0,condition:e.condition==null?null:$(e.condition),text:fj(e.text),tokens:typeof e.tokens==`number`?e.tokens:oj(pj(e.text)),chars:typeof e.chars==`number`?e.chars:pj(e.text)})),r=dj({kind:$(t.config.kind)||$A,mode:t.config.mode===`orchestrator`?`orchestrator`:`base`,lifecycle:t.config.lifecycle===`resident`?`resident`:`terminal`,hasManager:aj(t.config.hasManager),node:t.config.node?$(t.config.node):null}),i=t.sources.map(e=>({id:$(e.id),label:$(e.label)||hj($(e.id)),path:e.path?$(e.path):``,scope:e.scope===`project`||e.scope===`user`||e.scope===`builtin`||e.scope===`generated`||e.scope===`runtime`?e.scope:`builtin`})).filter(e=>e.path),a=fj(t.assembled);return rj({config:r,layers:n,assembled:a,total:{tokens:typeof t.total.tokens==`number`?t.total.tokens:oj(pj(a)),chars:typeof t.total.chars==`number`?t.total.chars:pj(a)},sources:i})}},wj={id:`prompt-review-nodes`,request:()=>lj(`crtr`,[`node`,`inspect`,`list`,`--json`]),parse:e=>{if(!e.ok||e.exitCode!==0)return ij(cj(sj(e.stderr||e.stdout||`crtr node inspect list failed`),`action`));let t;try{t=JSON.parse(String(e.stdout||``).trim()||`{}`)}catch{return ij(cj(`could not parse crtr node inspect list output as JSON`))}return!t||typeof t!=`object`||!Array.isArray(t.nodes)?ij(cj(`unexpected response from crtr node inspect list`)):rj(t.nodes.map(e=>({node_id:$(e.node_id),name:$(e.name),kind:$(e.kind),mode:$(e.mode),lifecycle:$(e.lifecycle),status:$(e.status),cwd:$(e.cwd),parent:e.parent==null?null:$(e.parent),created:$(e.created),enterable:e.enterable===!0})).filter(e=>e.status===`active`||e.status===`idle`))}},Tj={id:`prompt-review-export`,request:e=>lj(`crtr`,[`sys`,`prompt-review`,`export`,`--json`],JSON.stringify(e||{})),parse:e=>{if(!e.ok||e.exitCode!==0)return ij(cj(sj(e.stderr||e.stdout||`crtr sys prompt-review export failed`)));let t;try{t=JSON.parse(String(e.stdout||``).trim()||`{}`)}catch{return ij(cj(`could not parse crtr sys prompt-review export output as JSON`))}return!t||typeof t!=`object`||typeof t.path!=`string`?ij(cj(`unexpected response from crtr sys prompt-review export`)):rj({path:t.path})}};async function Ej(e,t,n){let r=[e.resolve(Sj),e.resolve(Cj,t),e.resolve(wj)];n&&r.push(e.resolve(Cj,n));let[i,a,o,s]=await Promise.all(r);if(!a.ok)throw a.error;return{list:i.ok?i.data:null,review:a.data,liveNodes:o.ok?o.data:null,compareReview:n&&s&&s.ok?s.data:null}}function Dj(e){let t=e.review||[];return t.find(t=>t.id===e.selectedLayerId)||t[e.cursor]||t.find(e=>e.included)||t[0]}function Oj(e){let t=e.compareReview||[];return t.find(t=>t.id===e.compareSelectedLayerId)||t[e.compareCursor]||t.find(e=>e.included)||t[0]}function kj(e,t){return!t||t.length===0?``:t.find(e=>e.included)?.id||t[0].id}function Aj(e,t){if(!e||e.length===0)return 0;let n=t?e.findIndex(e=>e.id===t):-1;return n>=0?n:Math.max(0,e.findIndex(e=>e.included)>=0?e.findIndex(e=>e.included):0)}function jj(e,t,n,r,i){let a=r?r.layers:null,o=i?i.layers:null,s={...e,config:t,compareConfig:n,review:a,compareReview:o};if(a&&a.length){let n=e.selectedLayerId&&a.some(t=>t.id===e.selectedLayerId)?e.selectedLayerId:kj(t,a);s.selectedLayerId=n,s.cursor=Aj(a,n);let r={...e.expanded};n in r||(r[n]=!0),s.expanded=r}return o&&o.length&&(s.compareSelectedLayerId=e.compareSelectedLayerId&&o.some(t=>t.id===e.compareSelectedLayerId)?e.compareSelectedLayerId:kj(n||t,o),s.compareCursor=Aj(o,s.compareSelectedLayerId),s.compareSelectedLayerId in s.expanded||(s.expanded={...s.expanded,[s.compareSelectedLayerId]:!0})),s.sources=r?r.sources:[],s.assembled=r?r.assembled:null,s.totalTokens=r?r.total.tokens:0,s.totalChars=r?r.total.chars:0,s.compareAssembled=i?i.assembled:null,s}var Mj={manifest:{id:`prompt-review`,title:`Prompt Studio`,subtitle:`prompt assembly review + export`,description:`inspect assembled prompts, provenance, comments, and diffs`},init(){let e=dj({kind:$A,mode:ej,lifecycle:tj,hasManager:nj,node:null});return{config:e,compareConfig:uj(e),list:null,liveNodes:[],review:null,compareReview:null,sources:[],totalTokens:0,totalChars:0,assembled:null,compareAssembled:null,selectedLayerId:null,cursor:0,scroll:0,compareSelectedLayerId:null,compareCursor:0,expanded:{},viewMode:`layered`,comments:[],draftComment:null,rawSelection:``,lastExportPath:null,compareOpen:!0,lastFetch:0,sourceError:null,auxiliaryError:null}},sources:{list:Sj,nodes:wj,review:Cj},commands:{export:Tj},intents:{async refresh(e){e.signal.setStatus(`Loading Prompt Studio…`);let t=dj(e.state.config),n=e.state.compareOpen&&e.state.compareConfig?dj(e.state.compareConfig):null;try{let r=await Ej(e,t,n);e.set(e=>{let i=jj({...e},t,n,r.review,r.compareReview);return i.list=r.list||e.list,i.liveNodes=r.liveNodes||e.liveNodes,i.sourceError=null,i.auxiliaryError=null,i.lastFetch=Date.now(),i}),r.list&&r.liveNodes&&e.signal.clearBanner(),e.signal.setStatus(null)}catch(t){let n=t;e.set(e=>{let t={...e,lastFetch:Date.now()};return e.review?t.auxiliaryError=n:t.sourceError=n,t}),e.state.review&&e.signal.setBanner(n.display.explanation||n.display.headline,n.display.level),e.signal.setStatus(null)}},setKind(e,t){return e.set(e=>({...e,config:{...e.config,kind:$(t)||$A}})),e.dispatch(`refresh`)},setMode(e,t){return e.set(e=>({...e,config:{...e.config,mode:t===`orchestrator`?`orchestrator`:`base`}})),e.dispatch(`refresh`)},setLifecycle(e,t){return e.set(e=>({...e,config:{...e.config,lifecycle:t===`resident`?`resident`:`terminal`}})),e.dispatch(`refresh`)},toggleHasManager(e){return e.set(e=>({...e,config:{...e.config,hasManager:!e.config.hasManager}})),e.dispatch(`refresh`)},setNode(e,t){return e.set(e=>({...e,config:{...e.config,node:t?$(t):null}})),e.dispatch(`refresh`)},setCompareKind(e,t){return e.set(e=>({...e,compareConfig:{...e.compareConfig||uj(e.config),kind:$(t)||$A}})),e.dispatch(`refresh`)},setCompareMode(e,t){return e.set(e=>({...e,compareConfig:{...e.compareConfig||uj(e.config),mode:t===`orchestrator`?`orchestrator`:`base`}})),e.dispatch(`refresh`)},setCompareLifecycle(e,t){return e.set(e=>({...e,compareConfig:{...e.compareConfig||uj(e.config),lifecycle:t===`resident`?`resident`:`terminal`}})),e.dispatch(`refresh`)},toggleCompareHasManager(e){return e.set(e=>({...e,compareConfig:{...e.compareConfig||uj(e.config),hasManager:!(e.compareConfig||uj(e.config)).hasManager}})),e.dispatch(`refresh`)},setCompareNode(e,t){return e.set(e=>({...e,compareConfig:{...e.compareConfig||uj(e.config),node:t?$(t):null}})),e.dispatch(`refresh`)},toggleCompareOpen(e){return e.set(e=>{let t=!e.compareOpen,n=t?e.compareConfig||uj(e.config):e.compareConfig;return{...e,compareOpen:t,compareConfig:n}}),e.dispatch(`refresh`)},setViewMode(e,t){e.set(e=>({...e,viewMode:t===`raw`?`raw`:`layered`}))},selectLayer(e,t){e.set(e=>{let n=$(t)||e.selectedLayerId,r=e.review?Math.max(0,e.review.findIndex(e=>e.id===n)):e.cursor;return{...e,selectedLayerId:n,cursor:r}})},cursorDown(e){e.set(e=>{if(!e.review||e.review.length===0)return e;let t=Math.min(e.review.length-1,e.cursor+1),n=e.review[t];return{...e,cursor:t,selectedLayerId:n?n.id:e.selectedLayerId}})},cursorUp(e){e.set(e=>{if(!e.review||e.review.length===0)return e;let t=Math.max(0,e.cursor-1),n=e.review[t];return{...e,cursor:t,selectedLayerId:n?n.id:e.selectedLayerId}})},selectCompareLayer(e,t){e.set(e=>{let n=$(t)||e.compareSelectedLayerId,r=e.compareReview?Math.max(0,e.compareReview.findIndex(e=>e.id===n)):e.compareCursor;return{...e,compareSelectedLayerId:n,compareCursor:r}})},compareCursorDown(e){e.set(e=>{if(!e.compareReview||e.compareReview.length===0)return e;let t=Math.min(e.compareReview.length-1,e.compareCursor+1),n=e.compareReview[t];return{...e,compareCursor:t,compareSelectedLayerId:n?n.id:e.compareSelectedLayerId}})},compareCursorUp(e){e.set(e=>{if(!e.compareReview||e.compareReview.length===0)return e;let t=Math.max(0,e.compareCursor-1),n=e.compareReview[t];return{...e,compareCursor:t,compareSelectedLayerId:n?n.id:e.compareSelectedLayerId}})},toggleLayerExpanded(e,t){e.set(e=>({...e,expanded:{...e.expanded,[$(t)]:!e.expanded[$(t)]}}))},captureRawSelection(e,t){e.set(e=>({...e,rawSelection:_j(t)}))},beginComment(e){let t=Dj(e.state);if(!t)return;let n=e.state.viewMode===`raw`&&e.state.rawSelection||null;e.set(e=>({...e,draftComment:{layerId:t.id,label:t.label,sourcePath:t.sourcePath,scope:t.scope,anchor:n,body:``}}))},setCommentBody(e,t){e.set(e=>e.draftComment?{...e,draftComment:{...e.draftComment,body:$(t)}}:e)},cancelComment(e){e.set(e=>({...e,draftComment:null}))},saveComment(e){let t=e.state.draftComment;!t||!_j(t.body)||e.set(e=>({...e,comments:[...e.comments,{...t,body:_j(t.body)}],draftComment:null}))},removeComment(e,t){let n=typeof t==`number`?t:Number(t);!Number.isFinite(n)||n<0||e.set(e=>({...e,comments:e.comments.filter((e,t)=>t!==n)}))},async exportComments(e){if(!e.state.review)return;let t={config:e.state.config,comments:e.state.comments,sources:e.state.sources};e.signal.setStatus(`Exporting review…`);let n=await e.execute(Tj,t);if(!n.ok){e.signal.setBanner(n.error.display.explanation||n.error.display.headline,n.error.display.level),e.signal.setStatus(null);return}e.set(e=>({...e,lastExportPath:n.data.path})),e.signal.setStatus(`Review copied: ${n.data.path}`)},copyRaw(e){e.signal.setStatus(`Use Copy raw in the web view; the TUI is read-only.`)}}},Nj=2e5,Pj={protocol:`border-cyan-200 bg-cyan-50 text-cyan-800`,persona:`border-amber-200 bg-amber-50 text-amber-800`,generated:`border-violet-200 bg-violet-50 text-violet-800`,substrate:`border-lime-200 bg-lime-50 text-lime-800`},Fj={builtin:`border-slate-200 bg-slate-50 text-slate-700`,project:`border-emerald-200 bg-emerald-50 text-emerald-800`,user:`border-amber-200 bg-amber-50 text-amber-800`,generated:`border-violet-200 bg-violet-50 text-violet-800`,runtime:`border-lime-200 bg-lime-50 text-lime-800`},Ij={added:`border-emerald-200 bg-emerald-50 text-emerald-800`,removed:`border-rose-200 bg-rose-50 text-rose-800`,changed:`border-amber-200 bg-amber-50 text-amber-800`};function Lj(e){return Fj[e]||`border-slate-200 bg-slate-50 text-slate-700`}function Rj(e){return Pj[e]||`border-slate-200 bg-slate-50 text-slate-700`}function zj(e){return new Intl.NumberFormat(`en-US`).format(Math.max(0,Math.floor(e||0)))}async function Bj(e){if(!e)return!1;try{return await navigator.clipboard.writeText(e),!0}catch{return!1}}function Vj({label:e,value:t,cls:n}){return(0,z.jsxs)(`span`,{className:`inline-flex items-center gap-1 rounded-full border px-2 py-0.5 text-[11px] ${n}`,children:[(0,z.jsx)(`span`,{className:`opacity-60`,children:e}),(0,z.jsx)(`span`,{className:`font-semibold`,children:t})]})}function Hj(e){return(0,z.jsx)(`button`,{type:`button`,title:e.title,onClick:e.onClick,className:`rounded-lg border px-3 py-1.5 text-left text-sm transition ${e.active?`border-slate-900 bg-slate-900 text-white`:`border-slate-200 bg-white text-slate-700 hover:bg-slate-50`} ${e.className||``}`,children:e.children})}function Uj({state:e,dispatch:t}){let n=e.list?.kinds||[{kind:e.config.kind,whenToUse:``}],r=e.list?.modes||[`base`,`orchestrator`],i=e.list?.lifecycles||[`terminal`,`resident`],a=e.list?.subPersonas?.[e.config.kind]||[],o=e.config.node?e.liveNodes.find(t=>t.node_id===e.config.node)?.name||e.config.node:`none`;return(0,z.jsxs)(`section`,{className:`flex min-h-0 flex-col overflow-hidden rounded-2xl border border-slate-200 bg-white shadow-sm`,children:[(0,z.jsxs)(`div`,{className:`border-b border-slate-200 px-4 py-3`,children:[(0,z.jsx)(`div`,{className:`text-xs font-semibold uppercase tracking-[0.2em] text-slate-400`,children:`Config`}),(0,z.jsx)(`div`,{className:`mt-1 text-sm text-slate-600`,children:mj(e.config)})]}),(0,z.jsxs)(`div`,{className:`min-h-0 flex-1 space-y-4 overflow-y-auto p-4`,children:[(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`div`,{className:`mb-2 text-xs font-semibold uppercase tracking-[0.18em] text-slate-400`,children:`Kind`}),(0,z.jsx)(`select`,{className:`w-full rounded-lg border border-slate-200 bg-white px-3 py-2 text-sm outline-none focus:border-slate-400`,value:e.config.kind,onChange:e=>t(`setKind`,e.target.value),children:n.map(e=>(0,z.jsx)(`option`,{value:e.kind,children:e.kind},e.kind))}),a.length?(0,z.jsxs)(`div`,{className:`mt-2 text-xs text-slate-500`,children:[`Sub-personas: `,a.map(e=>e.kind).join(`, `)]}):(0,z.jsx)(`div`,{className:`mt-2 text-xs text-slate-400`,children:`No sub-personas listed.`})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`div`,{className:`mb-2 text-xs font-semibold uppercase tracking-[0.18em] text-slate-400`,children:`Mode`}),(0,z.jsx)(`div`,{className:`grid grid-cols-2 gap-2`,children:r.map(n=>(0,z.jsx)(Hj,{label:n,active:e.config.mode===n,onClick:()=>t(`setMode`,n),children:(0,z.jsx)(`span`,{className:`capitalize`,children:n})},n))})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`div`,{className:`mb-2 text-xs font-semibold uppercase tracking-[0.18em] text-slate-400`,children:`Lifecycle`}),(0,z.jsx)(`div`,{className:`grid grid-cols-2 gap-2`,children:i.map(n=>(0,z.jsx)(Hj,{label:n,active:e.config.lifecycle===n,onClick:()=>t(`setLifecycle`,n),children:(0,z.jsx)(`span`,{className:`capitalize`,children:n})},n))})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`div`,{className:`mb-2 text-xs font-semibold uppercase tracking-[0.18em] text-slate-400`,children:`Has manager`}),(0,z.jsxs)(`button`,{type:`button`,onClick:()=>t(`toggleHasManager`),className:`flex w-full items-center justify-between rounded-lg border px-3 py-2 text-sm ${e.config.hasManager?`border-cyan-200 bg-cyan-50 text-cyan-800`:`border-slate-200 bg-slate-50 text-slate-700`}`,children:[(0,z.jsx)(`span`,{children:e.config.hasManager?`yes`:`no`}),(0,z.jsx)(`span`,{className:`text-xs opacity-60`,children:`re-fetches prompt`})]})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`div`,{className:`mb-2 text-xs font-semibold uppercase tracking-[0.18em] text-slate-400`,children:`Node`}),(0,z.jsxs)(`select`,{className:`w-full rounded-lg border border-slate-200 bg-white px-3 py-2 text-sm outline-none focus:border-slate-400`,value:e.config.node||``,onChange:e=>t(`setNode`,e.target.value||null),children:[(0,z.jsx)(`option`,{value:``,children:`none`}),e.liveNodes.map(e=>(0,z.jsxs)(`option`,{value:e.node_id,children:[e.name,` · `,e.kind,` · `,e.status]},e.node_id))]}),(0,z.jsx)(`div`,{className:`mt-2 text-xs text-slate-500`,children:o})]}),(0,z.jsxs)(`div`,{className:`rounded-xl border border-slate-200 bg-slate-50 p-3`,children:[(0,z.jsx)(`div`,{className:`text-xs font-semibold uppercase tracking-[0.18em] text-slate-400`,children:`Sub-personas`}),a.length?(0,z.jsx)(`div`,{className:`mt-2 space-y-2`,children:a.map(e=>(0,z.jsxs)(`div`,{className:`rounded-lg border border-slate-200 bg-white px-3 py-2`,children:[(0,z.jsx)(`div`,{className:`font-medium text-slate-900`,children:e.kind}),(0,z.jsx)(`div`,{className:`text-xs text-slate-500`,children:e.whenToUse})]},e.kind))}):(0,z.jsx)(`div`,{className:`mt-2 text-xs text-slate-500`,children:`No sub-persona entries for this kind.`})]})]})]})}function Wj({layer:e,state:t,selected:n,dispatch:r}){let i=!!t.expanded[e.id],a=e.included,o=a?`opacity-100`:`opacity-55`,s=!a&&e.condition?`✕ ${e.condition}`:null,c=e.sourcePath||e.source;return(0,z.jsxs)(`div`,{className:`rounded-xl border ${n?`border-slate-900 ring-1 ring-slate-900/10`:`border-slate-200`} bg-white ${o}`,children:[(0,z.jsxs)(`button`,{type:`button`,onClick:()=>{r(`selectLayer`,e.id),r(`toggleLayerExpanded`,e.id)},className:`flex w-full items-start gap-3 px-3 py-3 text-left`,children:[(0,z.jsx)(`div`,{className:`mt-0.5 text-slate-400`,children:i?`▾`:`▸`}),(0,z.jsxs)(`div`,{className:`min-w-0 flex-1`,children:[(0,z.jsxs)(`div`,{className:`flex flex-wrap items-center gap-2`,children:[(0,z.jsx)(`div`,{className:`truncate font-semibold text-slate-900`,children:e.label}),(0,z.jsx)(`span`,{className:`rounded-full border px-2 py-0.5 text-[11px] ${Rj(e.group)}`,children:e.group}),(0,z.jsx)(`span`,{className:`rounded-full border px-2 py-0.5 text-[11px] ${Lj(e.scope)}`,children:e.scope}),(0,z.jsxs)(`span`,{className:`rounded-full border border-slate-200 bg-slate-50 px-2 py-0.5 text-[11px] text-slate-700`,children:[`≈`,zj(e.tokens),` tok`]}),a?null:(0,z.jsx)(`span`,{className:`rounded-full border border-rose-200 bg-rose-50 px-2 py-0.5 text-[11px] text-rose-700`,children:`excluded`})]}),(0,z.jsxs)(`div`,{className:`mt-1 flex flex-wrap items-center gap-2 text-xs text-slate-500`,children:[(0,z.jsx)(`span`,{className:`truncate`,children:e.source}),s?(0,z.jsx)(`span`,{className:`rounded-full border border-rose-200 bg-rose-50 px-2 py-0.5 text-rose-700`,children:s}):null]})]})]}),i?(0,z.jsxs)(`div`,{className:`border-t border-slate-200 px-3 py-3`,children:[(0,z.jsx)(`pre`,{className:`max-h-72 overflow-auto whitespace-pre-wrap break-words rounded-lg bg-slate-950 px-3 py-2 font-mono text-[12px] leading-5 text-slate-100`,children:e.text}),(0,z.jsxs)(`div`,{className:`mt-2 flex flex-wrap items-center gap-2 text-xs text-slate-500`,children:[(0,z.jsx)(`span`,{children:a?`included`:`excluded`}),(0,z.jsx)(`span`,{children:`·`}),(0,z.jsxs)(`span`,{children:[zj(e.chars),` chars`]}),(0,z.jsx)(`span`,{children:`·`}),(0,z.jsx)(`span`,{children:c})]})]}):null]})}function Gj({state:e,dispatch:t}){let n=e.review||[],r=Dj(e)||n[0]||null,i=e.assembled||``,a=Math.min(100,e.totalTokens/Nj*100);return(0,z.jsxs)(`section`,{className:`flex min-h-0 flex-col overflow-hidden rounded-2xl border border-slate-200 bg-white shadow-sm`,children:[(0,z.jsxs)(`div`,{className:`border-b border-slate-200 px-4 py-3`,children:[(0,z.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,z.jsx)(`div`,{className:`text-xs font-semibold uppercase tracking-[0.2em] text-slate-400`,children:`Assembled`}),(0,z.jsxs)(`div`,{className:`ml-auto flex items-center gap-2`,children:[(0,z.jsx)(Hj,{label:`layered`,active:e.viewMode===`layered`,onClick:()=>t(`setViewMode`,`layered`),className:`px-2 py-1 text-xs`,children:(0,z.jsx)(`span`,{children:`Layered`})}),(0,z.jsx)(Hj,{label:`raw`,active:e.viewMode===`raw`,onClick:()=>t(`setViewMode`,`raw`),className:`px-2 py-1 text-xs`,children:(0,z.jsx)(`span`,{children:`Raw`})})]})]}),(0,z.jsx)(`div`,{className:`mt-1 text-sm text-slate-600`,children:mj(e.config)})]}),(0,z.jsx)(`div`,{className:`min-h-0 flex-1 overflow-y-auto p-4`,children:e.viewMode===`raw`?(0,z.jsx)(`pre`,{className:`select-text whitespace-pre-wrap break-words rounded-xl border border-slate-200 bg-slate-950 p-4 font-mono text-[12px] leading-5 text-slate-100`,onMouseUp:e=>{t(`captureRawSelection`,window.getSelection?.()?.toString()||``)},children:i}):(0,z.jsx)(`div`,{className:`space-y-3`,children:n.map(n=>(0,z.jsx)(Wj,{layer:n,state:e,selected:r?.id===n.id,dispatch:t},n.id))})}),(0,z.jsxs)(`div`,{className:`border-t border-slate-200 p-4`,children:[(0,z.jsxs)(`div`,{className:`flex items-center justify-between text-xs text-slate-500`,children:[(0,z.jsxs)(`div`,{children:[`≈`,zj(e.totalTokens),` tokens · `,zj(e.totalChars),` chars`]}),(0,z.jsxs)(`div`,{children:[Math.round(a),`% of `,zj(Nj),` budget`]})]}),(0,z.jsx)(`div`,{className:`mt-2 h-2 overflow-hidden rounded-full bg-slate-100`,children:(0,z.jsx)(`div`,{className:`h-full rounded-full ${a>90?`bg-rose-500`:a>75?`bg-amber-500`:`bg-cyan-500`}`,style:{width:`${Math.min(100,a)}%`}})})]})]})}function Kj({state:e,dispatch:t}){let n=e.draftComment;return n?(0,z.jsxs)(`div`,{className:`rounded-xl border border-slate-200 bg-slate-50 p-3`,children:[(0,z.jsxs)(`div`,{className:`flex items-center gap-2 text-xs text-slate-500`,children:[(0,z.jsx)(`span`,{className:`font-semibold text-slate-700`,children:`Commenting on`}),(0,z.jsx)(`span`,{className:`rounded-full border border-slate-200 bg-white px-2 py-0.5 text-slate-700`,children:n.label}),(0,z.jsx)(`span`,{className:`rounded-full border px-2 py-0.5 ${Lj(n.scope)}`,children:n.scope})]}),n.anchor?(0,z.jsxs)(`div`,{className:`mt-2 rounded-lg border border-slate-200 bg-white p-2 text-xs text-slate-600`,children:[(0,z.jsx)(`div`,{className:`mb-1 font-semibold text-slate-500`,children:`Anchor`}),(0,z.jsx)(`pre`,{className:`whitespace-pre-wrap break-words font-mono text-[11px] leading-5`,children:n.anchor})]}):null,(0,z.jsx)(`textarea`,{autoFocus:!0,value:n.body,onChange:e=>t(`setCommentBody`,e.target.value),rows:4,placeholder:`Write the review comment here…`,className:`mt-2 w-full rounded-lg border border-slate-200 bg-white p-3 font-mono text-sm outline-none focus:border-slate-400`}),(0,z.jsxs)(`div`,{className:`mt-2 flex gap-2`,children:[(0,z.jsx)(`button`,{type:`button`,onClick:()=>t(`saveComment`),className:`rounded-lg bg-slate-900 px-3 py-1.5 text-sm text-white hover:bg-slate-800`,children:`Save comment`}),(0,z.jsx)(`button`,{type:`button`,onClick:()=>t(`cancelComment`),className:`rounded-lg border border-slate-200 bg-white px-3 py-1.5 text-sm text-slate-700 hover:bg-slate-50`,children:`Cancel`})]})]}):null}function qj({comment:e,index:t,onDelete:n}){return(0,z.jsxs)(`div`,{className:`rounded-xl border border-slate-200 bg-white p-3`,children:[(0,z.jsxs)(`div`,{className:`flex items-center gap-2 text-xs text-slate-500`,children:[(0,z.jsx)(`span`,{className:`font-semibold text-slate-900`,children:e.label}),(0,z.jsx)(`span`,{className:`rounded-full border px-2 py-0.5 ${Lj(e.scope)}`,children:e.scope}),(0,z.jsxs)(`span`,{className:`ml-auto text-slate-400`,children:[`#`,t+1]})]}),e.anchor?(0,z.jsx)(`pre`,{className:`mt-2 whitespace-pre-wrap break-words rounded-lg bg-slate-50 p-2 font-mono text-[11px] leading-5 text-slate-600`,children:e.anchor}):null,(0,z.jsx)(`div`,{className:`mt-2 whitespace-pre-wrap text-sm text-slate-800`,children:e.body}),(0,z.jsxs)(`div`,{className:`mt-2 flex items-center gap-2 text-xs text-slate-500`,children:[e.sourcePath?(0,z.jsx)(`span`,{className:`truncate`,children:e.sourcePath}):(0,z.jsx)(`span`,{className:`text-slate-400`,children:`generated layer`}),(0,z.jsx)(`button`,{type:`button`,onClick:n,className:`ml-auto rounded-full border border-slate-200 px-2 py-0.5 hover:bg-slate-50`,children:`Remove`})]})]})}function Jj({state:e,dispatch:t}){let n=Dj(e)||e.review?.[0]||null,r=Oj(e)||e.compareReview?.[0]||null,i=(0,S.useMemo)(()=>xj(e.review||[],e.compareReview||[]),[e.review,e.compareReview]),a=e.compareConfig||e.config;return(0,z.jsxs)(`section`,{className:`flex min-h-0 flex-col overflow-hidden rounded-2xl border border-slate-200 bg-white shadow-sm`,children:[(0,z.jsxs)(`div`,{className:`border-b border-slate-200 px-4 py-3`,children:[(0,z.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,z.jsx)(`div`,{className:`text-xs font-semibold uppercase tracking-[0.2em] text-slate-400`,children:`Inspector`}),(0,z.jsx)(`button`,{type:`button`,onClick:()=>t(`beginComment`),disabled:!n,className:`ml-auto rounded-full border border-slate-200 bg-white px-3 py-1 text-xs text-slate-700 hover:bg-slate-50 disabled:cursor-not-allowed disabled:opacity-40`,children:`Add comment`})]}),(0,z.jsx)(`div`,{className:`mt-1 text-sm text-slate-600`,children:n?n.label:`No layer selected`})]}),(0,z.jsxs)(`div`,{className:`min-h-0 flex-1 space-y-4 overflow-y-auto p-4`,children:[n?(0,z.jsxs)(`div`,{className:`rounded-xl border border-slate-200 bg-slate-50 p-3`,children:[(0,z.jsxs)(`div`,{className:`flex items-start gap-2`,children:[(0,z.jsxs)(`div`,{className:`min-w-0 flex-1`,children:[(0,z.jsx)(`div`,{className:`font-semibold text-slate-900`,children:n.label}),(0,z.jsx)(`div`,{className:`mt-1 text-xs text-slate-500`,children:n.source})]}),(0,z.jsx)(`span`,{className:`rounded-full border px-2 py-0.5 text-[11px] ${Rj(n.group)}`,children:n.group})]}),(0,z.jsxs)(`div`,{className:`mt-3 flex flex-wrap gap-2 text-[11px]`,children:[(0,z.jsx)(Vj,{label:`scope`,value:n.scope,cls:Lj(n.scope)}),(0,z.jsx)(Vj,{label:`status`,value:n.included?`included`:`excluded`,cls:n.included?`border-emerald-200 bg-emerald-50 text-emerald-800`:`border-rose-200 bg-rose-50 text-rose-800`}),(0,z.jsx)(Vj,{label:`tokens`,value:`≈${zj(n.tokens)}`,cls:`border-slate-200 bg-white text-slate-700`}),(0,z.jsx)(Vj,{label:`chars`,value:zj(n.chars),cls:`border-slate-200 bg-white text-slate-700`})]}),n.condition?(0,z.jsxs)(`div`,{className:`mt-2 rounded-lg border border-rose-200 bg-rose-50 px-3 py-2 text-xs text-rose-700`,children:[`Condition: `,n.condition]}):null,(0,z.jsxs)(`div`,{className:`mt-2 flex items-center gap-2 text-xs text-slate-500`,children:[(0,z.jsx)(`div`,{className:`min-w-0 flex-1 truncate font-mono`,children:n.sourcePath||`no source path (generated or runtime-spliced)`}),n.sourcePath?(0,z.jsx)(`button`,{type:`button`,onClick:async()=>{let e=await Bj(n.sourcePath||``);tm(e?`Source path copied`:`Could not copy source path`,e?`success`:`info`)},className:`rounded-full border border-slate-200 px-2 py-0.5 hover:bg-white`,children:`Copy path`}):null]}),(0,z.jsx)(`pre`,{className:`mt-3 max-h-44 overflow-auto whitespace-pre-wrap break-words rounded-lg bg-slate-950 px-3 py-2 font-mono text-[12px] leading-5 text-slate-100`,children:n.text})]}):(0,z.jsx)(iE,{label:`No layer selected.`}),(0,z.jsxs)(`div`,{className:`rounded-xl border border-slate-200 bg-slate-50 p-3`,children:[(0,z.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,z.jsx)(`div`,{className:`text-xs font-semibold uppercase tracking-[0.18em] text-slate-400`,children:`Compare`}),(0,z.jsx)(`button`,{type:`button`,onClick:()=>t(`toggleCompareOpen`),className:`ml-auto rounded-full border border-slate-200 bg-white px-3 py-1 text-xs text-slate-700 hover:bg-slate-50`,children:e.compareOpen?`Hide`:`Show`})]}),e.compareOpen?(0,z.jsxs)(`div`,{className:`mt-3 space-y-3`,children:[(0,z.jsxs)(`div`,{className:`grid grid-cols-1 gap-2 lg:grid-cols-2`,children:[(0,z.jsx)(`select`,{className:`w-full rounded-lg border border-slate-200 bg-white px-3 py-2 text-sm outline-none focus:border-slate-400`,value:a.kind,onChange:e=>t(`setCompareKind`,e.target.value),children:(e.list?.kinds||[{kind:a.kind}]).map(e=>(0,z.jsx)(`option`,{value:e.kind,children:e.kind},e.kind))}),(0,z.jsxs)(`div`,{className:`grid grid-cols-2 gap-2`,children:[(0,z.jsx)(`button`,{type:`button`,onClick:()=>t(`setCompareMode`,`base`),className:`rounded-lg border px-2 py-1 text-sm ${a.mode===`base`?`border-slate-900 bg-slate-900 text-white`:`border-slate-200 bg-white text-slate-700`}`,children:`base`}),(0,z.jsx)(`button`,{type:`button`,onClick:()=>t(`setCompareMode`,`orchestrator`),className:`rounded-lg border px-2 py-1 text-sm ${a.mode===`orchestrator`?`border-slate-900 bg-slate-900 text-white`:`border-slate-200 bg-white text-slate-700`}`,children:`orchestrator`})]})]}),(0,z.jsxs)(`div`,{className:`grid grid-cols-1 gap-2 lg:grid-cols-2`,children:[(0,z.jsxs)(`div`,{className:`grid grid-cols-2 gap-2`,children:[(0,z.jsx)(`button`,{type:`button`,onClick:()=>t(`setCompareLifecycle`,`terminal`),className:`rounded-lg border px-2 py-1 text-sm ${a.lifecycle===`terminal`?`border-slate-900 bg-slate-900 text-white`:`border-slate-200 bg-white text-slate-700`}`,children:`terminal`}),(0,z.jsx)(`button`,{type:`button`,onClick:()=>t(`setCompareLifecycle`,`resident`),className:`rounded-lg border px-2 py-1 text-sm ${a.lifecycle===`resident`?`border-slate-900 bg-slate-900 text-white`:`border-slate-200 bg-white text-slate-700`}`,children:`resident`})]}),(0,z.jsxs)(`button`,{type:`button`,onClick:()=>t(`toggleCompareHasManager`),className:`flex items-center justify-between rounded-lg border px-3 py-2 text-sm ${a.hasManager?`border-cyan-200 bg-cyan-50 text-cyan-800`:`border-slate-200 bg-white text-slate-700`}`,children:[(0,z.jsxs)(`span`,{children:[`manager `,a.hasManager?`yes`:`no`]}),(0,z.jsx)(`span`,{className:`text-xs opacity-60`,children:`compare`})]})]}),(0,z.jsxs)(`select`,{className:`w-full rounded-lg border border-slate-200 bg-white px-3 py-2 text-sm outline-none focus:border-slate-400`,value:a.node||``,onChange:e=>t(`setCompareNode`,e.target.value||null),children:[(0,z.jsx)(`option`,{value:``,children:`no node`}),e.liveNodes.map(e=>(0,z.jsxs)(`option`,{value:e.node_id,children:[e.name,` · `,e.kind,` · `,e.status]},e.node_id))]}),e.compareReview?(0,z.jsxs)(`div`,{className:`rounded-xl border border-slate-200 bg-white p-3`,children:[(0,z.jsxs)(`div`,{className:`flex items-center gap-2 text-xs text-slate-500`,children:[(0,z.jsx)(`span`,{className:`font-semibold text-slate-900`,children:`Compared selection`}),(0,z.jsx)(`span`,{className:`rounded-full border border-slate-200 bg-slate-50 px-2 py-0.5`,children:r?.label||`none`})]}),r?(0,z.jsx)(`pre`,{className:`mt-2 max-h-40 overflow-auto whitespace-pre-wrap break-words rounded-lg bg-slate-950 px-3 py-2 font-mono text-[12px] leading-5 text-slate-100`,children:r.text}):null]}):(0,z.jsx)(`div`,{className:`text-xs text-slate-500`,children:`Pick a second config to render the diff.`}),(0,z.jsx)(`div`,{className:`space-y-2`,children:i.length?i.map(e=>(0,z.jsxs)(`button`,{type:`button`,onClick:()=>t(`selectCompareLayer`,e.id),className:`w-full rounded-xl border px-3 py-3 text-left ${Ij[e.kind]||`border-slate-200 bg-white text-slate-700`}`,children:[(0,z.jsxs)(`div`,{className:`flex items-center gap-2 text-xs`,children:[(0,z.jsx)(`span`,{className:`rounded-full border border-current/20 bg-white/70 px-2 py-0.5 font-semibold uppercase`,children:e.kind}),(0,z.jsx)(`span`,{className:`font-semibold text-slate-900`,children:e.label})]}),(0,z.jsx)(`div`,{className:`mt-1 whitespace-pre-wrap font-mono text-[11px] leading-5`,children:e.diffText||e.summary})]},e.id)):(0,z.jsx)(`div`,{className:`text-xs text-slate-500`,children:`No differences for the current pair.`})})]}):(0,z.jsx)(`div`,{className:`mt-2 text-xs text-slate-500`,children:`Compare panel hidden.`})]}),e.draftComment?(0,z.jsx)(Kj,{state:e,dispatch:t}):null,(0,z.jsxs)(`div`,{className:`space-y-2`,children:[(0,z.jsx)(`div`,{className:`text-xs font-semibold uppercase tracking-[0.18em] text-slate-400`,children:`Comments`}),e.comments.length?e.comments.map((e,n)=>(0,z.jsx)(qj,{comment:e,index:n,onDelete:()=>t(`removeComment`,n)},`${e.layerId}-${n}`)):(0,z.jsx)(`div`,{className:`rounded-xl border border-dashed border-slate-200 bg-slate-50 p-4 text-sm text-slate-500`,children:`No comments yet.`})]})]})]})}function Yj({state:e,dispatch:t}){return(0,z.jsxs)(`div`,{className:`flex flex-wrap items-center gap-2 border-t border-slate-200 bg-white px-4 py-3 text-sm text-slate-600`,children:[(0,z.jsx)(`button`,{type:`button`,onClick:async()=>{let t=await Bj(e.assembled||``);tm(t?`Copied assembled prompt`:`Could not copy assembled prompt`,t?`success`:`info`)},className:`rounded-full border border-slate-200 bg-slate-50 px-3 py-1.5 hover:bg-slate-100`,disabled:!e.assembled,children:`Copy raw`}),(0,z.jsx)(`button`,{type:`button`,onClick:()=>t(`toggleCompareOpen`),className:`rounded-full border border-slate-200 bg-slate-50 px-3 py-1.5 hover:bg-slate-100`,children:`Compare configs`}),(0,z.jsx)(`button`,{type:`button`,onClick:()=>t(`exportComments`),className:`rounded-full border border-slate-900 bg-slate-900 px-3 py-1.5 text-white hover:bg-slate-800`,disabled:!e.review,children:`Export comments`}),(0,z.jsx)(`div`,{className:`ml-auto text-xs text-slate-500`,children:e.lastExportPath?(0,z.jsx)(`span`,{className:`font-mono`,children:e.lastExportPath}):(0,z.jsx)(`span`,{children:`Export writes a markdown file and copies its path.`})})]})}function Xj({state:e,dispatch:t}){let n=(0,S.useRef)(``);if((0,S.useEffect)(()=>{!e.lastExportPath||e.lastExportPath===n.current||(n.current=e.lastExportPath,(async()=>{let t=await Bj(e.lastExportPath||``);tm(t?`Review copied: ${e.lastExportPath}`:`Export written: ${e.lastExportPath}`,t?`success`:`info`)})())},[e.lastExportPath]),e.sourceError&&!e.review){let n=e.sourceError.display;return(0,z.jsx)(n.level===`error`?aE:oE,{headline:n.headline,explanation:n.explanation,nextStep:n.nextStep||void 0,onRetry:()=>t(`refresh`)})}return e.review?e.review.length===0?(0,z.jsx)(iE,{label:`No prompt layers were returned.`}):(0,z.jsxs)(`div`,{className:`flex h-full min-h-0 flex-col bg-slate-50 text-slate-900`,children:[e.auxiliaryError?(0,z.jsx)(`div`,{className:`border-b border-amber-200 bg-amber-50 px-4 py-2 text-xs text-amber-800`,children:e.auxiliaryError.display.explanation||e.auxiliaryError.display.headline}):null,(0,z.jsxs)(`div`,{className:`grid min-h-0 flex-1 grid-cols-1 gap-3 p-4 lg:grid-cols-[18rem_minmax(0,1fr)_24rem]`,children:[(0,z.jsx)(Uj,{state:e,dispatch:t}),(0,z.jsx)(Gj,{state:e,dispatch:t}),(0,z.jsx)(Jj,{state:e,dispatch:t})]}),(0,z.jsx)(Yj,{state:e,dispatch:t})]}):(0,z.jsx)(rE,{label:`Loading Prompt Studio…`})}var Zj=new Set([`active`,`idle`]);function Qj(e){return{ok:!0,data:e}}function $j(e){return{ok:!1,error:e}}function eM(e){let t=String(e||``).split(/\r?\n/).map(e=>e.trim()).filter(Boolean);return t.length?t[0]:``}function tM(e){return e==null?``:String(e)}function nM(e,t){return`${e} ${t}${e===1?``:`s`}`}function rM(e){let t=e||{};return{nodeId:tM(t.node_id),name:tM(t.name)||`(unnamed)`,kind:tM(t.kind)||`?`,mode:tM(t.mode)||`?`,lifecycle:tM(t.lifecycle)||`?`,status:tM(t.status)||`?`,cwd:tM(t.cwd),parent:t.parent?tM(t.parent):null,created:tM(t.created)}}var iM={kind:`crtr-missing`,display:{headline:`crtr unavailable`,explanation:`The crtr binary was not found on PATH.`,nextStep:`Install crtr (or set it on PATH), then press g.`,level:`error`,blocking:!0}};function aM(e){return{kind:`crtr-failed`,display:{headline:`Canvas unavailable`,explanation:e||`crtr could not read the graph.`,nextStep:`Press g to retry.`,level:`error`,blocking:!1}}}var oM={id:`nodes`,request:()=>({kind:`exec`,bin:`crtr`,args:[`node`,`inspect`,`list`,`--json`]}),parse:e=>{if(!e.ok)return $j(iM);if(e.exitCode!==0)return $j(aM(eM(e.stderr||e.stdout)));let t=String(e.stdout||``).trim(),n;try{n=t===``?{}:JSON.parse(t)}catch{return $j(aM("could not parse `crtr node inspect list` output as JSON"))}return Qj((n&&Array.isArray(n.nodes)?n.nodes:[]).map(rM))}},sM={id:`attention`,request:({viewRoot:e,nodeIds:t})=>{let n=[`canvas`,`attention`,`map`,`--json`];e&&n.push(`--view`,e);let r=(t||[]).filter(Boolean);return r.length&&n.push(`--nodes`,r.join(`,`)),{kind:`exec`,bin:`crtr`,args:n}},parse:e=>{if(!e.ok||e.exitCode!==0)return Qj({});let t;try{t=JSON.parse(String(e.stdout||``).trim()||`{}`)}catch{return Qj({})}let n=t&&t.counts&&typeof t.counts==`object`?t.counts:{},r={};for(let[e,t]of Object.entries(n))r[e]=typeof t==`number`?t:0;return Qj(r)}},cM={id:`cwd`,request:()=>({kind:`exec`,bin:`pwd`,args:[]}),parse:e=>Qj(e.ok&&e.exitCode===0?String(e.stdout||``).trim():``)},lM={id:`tmux-panes`,request:()=>({kind:`exec`,bin:`tmux`,args:[`list-panes`,`-F`,`#{pane_id} #{@crtr_node}`]}),parse:e=>{if(!e.ok||e.exitCode!==0)return Qj([]);let t=[];for(let n of String(e.stdout||``).split(/\r?\n/)){if(!n)continue;let e=n.indexOf(` `),r=(e<0?n:n.slice(0,e)).trim(),i=e<0?``:n.slice(e+1).trim();r&&t.push({pane:r,node:i})}return Qj(t)}},uM={id:`focus`,request:({nodeId:e,pane:t})=>({kind:`exec`,bin:`crtr`,args:[`node`,`focus`,e,`--pane`,t]}),parse:e=>Qj(e.ok&&e.exitCode===0)};function dM(e,t){return e.created<t.created?-1:+(e.created>t.created)}function fM(e){let t=new Map;for(let n of e)t.set(n.nodeId,n);let n=new Map,r=[];for(let i of e)if(i.parent&&t.has(i.parent)){let e=n.get(i.parent);e?e.push(i):n.set(i.parent,[i])}else r.push(i);for(let e of n.values())e.sort(dM);return r.sort(dM),{byId:t,children:n,roots:r}}function pM(e,t){let n=new Set,r=e;for(;;){if(n.has(r))return r;n.add(r);let e=t.get(r);if(!e||!e.parent||!t.has(e.parent))return r;r=e.parent}}function mM(e,t,n,r=new Set){if(r.has(e))return!1;r.add(e);let i=n.get(e),a=!!i&&Zj.has(i.status);if(!a){for(let i of t.get(e)||[])if(mM(i.nodeId,t,n,r)){a=!0;break}}return r.delete(e),a}function hM(e,t,n,r){return{kind:`node`,nodeId:e.nodeId,name:e.name,status:e.status,prefix:t,attached:n,asks:r}}function gM(e){return{kind:`header`,text:e}}function _M(e){return{kind:`chrome`,text:e||``}}function vM(e,t){let{byId:n,children:r,roots:i}=fM(e),a=null;if(t&&n.has(t))a=pM(t,n);else{let e=i.filter(e=>mM(e.nodeId,r,n)),t=e.length?e:i;t.length&&(a=t[t.length-1].nodeId)}return{byId:n,children:r,roots:i,currentRoot:a,liveRoots:i.filter(e=>mM(e.nodeId,r,n))}}function yM(e){let t=[];for(let n=0;n<e.length;n++)e[n].kind===`node`&&t.push(n);return t}function bM(e,t,n){let r=yM(e);if(r.length===0)return 0;let i=t||n,a=i?e.findIndex(e=>e.kind===`node`&&e.nodeId===i):-1;return a>=0?a:r[0]}function xM(e,t){let n=yM(e.rows);if(n.length===0)return e;let r=n.indexOf(e.cursor);if(r<0)return{...e,cursor:n[0]};let i=Math.max(0,Math.min(n.length-1,r+t));return{...e,cursor:n[i]}}var SM={manifest:{id:`workspace-sidebar`,title:`Workspace`,description:"Left rail for `crtr workspace` — this graph + other agents in this cwd",refreshMs:2500},init(e){return{cwd:typeof process<`u`&&process.cwd?process.cwd():``,targetOverride:String(e&&e.target||``),chatPane:``,attachedNode:null,currentRoot:null,rows:[],cursor:0,scroll:0,graphsHere:0,nodesHere:0,asksHere:0,lastFetch:0,srcError:null}},sources:{cwdSource:cM,nodesSource:oM,attentionSource:sM,panesSource:lM},commands:{focusCommand:uM},intents:{async refresh(e){e.signal.setStatus(`Loading…`);let t=await e.resolve(lM),n=``,r=null;if(t.ok){let e=t.data.find(e=>e.node);e&&(n=e.pane,r=e.node)}!n&&e.state.targetOverride&&(n=e.state.targetOverride);let i=await e.resolve(cM),a=i.ok&&i.data?i.data:e.state.cwd,o=await e.resolve(oM);if(!o.ok){let t=o.error,i=e.state.rows.length>0,s=!t.display.blocking&&i;e.set(e=>{let i={...e,cwd:a,chatPane:n,attachedNode:r,srcError:t};return s||(i.rows=[],i.currentRoot=null,i.graphsHere=0,i.nodesHere=0,i.asksHere=0),i}),s?e.signal.setBanner(t.display.explanation,t.display.level):e.signal.clearBanner(),e.signal.setStatus(null),e.signal.setSubtitle(null);return}let s=o.data.filter(e=>e.cwd===a),{byId:c,children:l,roots:u,currentRoot:d,liveRoots:f}=vM(s,r),p=u.map(e=>e.nodeId),m={};if(d||p.length){let t=await e.resolve(sM,{viewRoot:d,nodeIds:p});t.ok&&(m=t.data)}let h=0;for(let e of Object.values(m))h+=e;let g=u.filter(e=>e.nodeId!==d&&(mM(e.nodeId,l,c)||(m[e.nodeId]||0)>0));g.sort((e,t)=>{let n=+!!mM(e.nodeId,l,c),r=+!!mM(t.nodeId,l,c);return n===r?e.created<t.created?1:-1:r-n});let _=[];if(_.push(gM(`⌗ this graph`)),d&&c.has(d)){let e=new Set,t=(n,i,a,o)=>{if(e.has(n.nodeId))return;e.add(n.nodeId);let s=o?``:i+(a?`└─ `:`├─ `);_.push(hM(n,s,n.nodeId===r,m[n.nodeId]||0));let c=l.get(n.nodeId)||[],u=o?``:i+(a?` `:`│ `);for(let e=0;e<c.length;e++)t(c[e],u,e===c.length-1,!1)};t(c.get(d),``,!0,!0)}else _.push(_M(` no agent here yet`));if(_.push(_M(``)),_.push(gM(`↪ elsewhere${g.length?` · ${g.length}`:``}`)),g.length)for(let e of g)_.push(hM(e,``,!1,m[e.nodeId]||0));else _.push(_M(` —`));let v=e.state.rows[e.state.cursor],y=bM(_,v&&v.kind===`node`?v.nodeId:null,r);e.set(e=>({...e,cwd:a,chatPane:n,attachedNode:r,currentRoot:d,rows:_,cursor:y,graphsHere:f.length,nodesHere:s.length,asksHere:h,lastFetch:Date.now(),srcError:null})),e.signal.setSubtitle(f.length>0?`${nM(f.length,`live graph`)}`:null),h>0?e.signal.setBanner(`${nM(h,`ask`)} waiting on a human — see the ⚑ rows`,`action`):e.signal.clearBanner(),e.signal.setStatus(null)},cursorDown:e=>e.set(e=>xM(e,1)),cursorUp:e=>e.set(e=>xM(e,-1)),select:(e,t)=>e.set(e=>typeof t==`number`&&yM(e.rows).includes(t)?{...e,cursor:t}:e),async open(e){let t=e.state,n=t.rows[t.cursor];if(!(!n||n.kind!==`node`)){if(!t.chatPane){e.signal.setBanner("No chat pane wired — run this rail via `crtr workspace`.",`error`);return}await e.execute(uM,{nodeId:n.nodeId,pane:t.chatPane}),e.signal.setStatus(`→ ${n.name}`)}},quit:e=>e.signal.quit()}},CM={active:{glyph:`●`,cls:`text-green-600`},idle:{glyph:`○`,cls:`text-amber-600`},done:{glyph:`✓`,cls:`text-cyan-600`},dead:{glyph:`✗`,cls:`text-red-600`},canceled:{glyph:`⊘`,cls:`text-slate-400`}};function wM(e,t){return t?`font-bold text-cyan-700`:e===`active`?`font-semibold`:e===`done`||e===`dead`||e===`canceled`?`text-slate-400`:``}function TM({row:e,selected:t,onClick:n}){if(e.kind===`header`)return(0,z.jsx)(`li`,{className:`px-2 pt-3 pb-0.5 font-semibold text-cyan-700`,children:e.text});if(e.kind===`chrome`)return(0,z.jsx)(`li`,{className:`px-2 text-slate-400`,children:e.text||`\xA0`});let r=CM[e.status]||{glyph:`?`,cls:`text-slate-400`};return(0,z.jsxs)(`li`,{className:`flex items-baseline gap-1 rounded px-2 py-0.5 cursor-pointer ${t?`bg-slate-200`:`hover:bg-slate-100`}`,onClick:n,children:[(0,z.jsx)(`span`,{className:`w-3 shrink-0 ${e.attached?`font-bold text-cyan-700`:``}`,children:e.attached?`▸`:`\xA0`}),e.prefix?(0,z.jsx)(`span`,{className:`whitespace-pre text-slate-400`,children:e.prefix}):null,(0,z.jsx)(`span`,{className:r.cls,children:r.glyph}),(0,z.jsx)(`span`,{className:wM(e.status,e.attached),children:e.name}),e.asks>0?(0,z.jsxs)(`span`,{className:`ml-auto shrink-0 font-bold text-amber-500`,children:[`⚑`,e.asks]}):null]})}function EM({state:e,dispatch:t}){if(e.rows.length===0){if(e.srcError){let n=e.srcError.display;return(0,z.jsx)(n.level===`error`?aE:oE,{headline:n.headline,explanation:n.explanation,nextStep:n.nextStep,onRetry:()=>t(`refresh`)})}return e.lastFetch===0?(0,z.jsx)(rE,{label:`Loading…`}):(0,z.jsx)(iE,{label:`No agents in this cwd.`})}return(0,z.jsx)(`ul`,{className:`font-mono text-sm outline-none`,tabIndex:0,onKeyDown:e=>{e.key===`j`||e.key===`ArrowDown`?(t(`cursorDown`),e.preventDefault()):e.key===`k`||e.key===`ArrowUp`?(t(`cursorUp`),e.preventDefault()):e.key===`Enter`?(t(`open`),e.preventDefault()):e.key===`g`&&t(`refresh`)},children:e.rows.map((n,r)=>(0,z.jsx)(TM,{row:n,index:r,selected:r===e.cursor,onClick:()=>t(`select`,r)},r))})}var DM={canvas:{core:ME,View:IE},chat:{core:iD,View:yD},inbox:{core:Ok,View:Mk},"git-pr":{core:pA,View:bA},linkedin:{core:mO,View:DA},settings:{core:KA,View:QA},"prompt-review":{core:Mj,View:Xj},"workspace-sidebar":{core:SM,View:EM}};Object.keys(DM).filter(e=>e!==`canvas`);function OM(e){if(e===void 0)return``;let t=new URLSearchParams;for(let[n,r]of Object.entries(e).sort(([e,t],[n,r])=>{let i=e.localeCompare(n);return i===0?t.localeCompare(r):i}))t.append(n,r);return t.toString()}function kM({viewId:e,options:t,onIntent:n,sseKinds:r=[]}){let i=DM[e];return i===void 0?(0,z.jsxs)(`div`,{className:`flex h-full items-center justify-center p-6 text-sm text-slate-500`,children:[`Unknown view: `,(0,z.jsx)(`code`,{className:`ml-1 rounded bg-slate-100 px-1.5 py-0.5`,children:e})]}):(0,z.jsx)(AM,{entry:i,options:t,onIntent:n,sseKinds:r},`${e}::${OM(t)}`)}function AM({entry:e,options:t,onIntent:n,sseKinds:r}){let{state:i,chrome:a,dispatch:o,refresh:s}=tE(e.core,{options:t,onIntent:n});return np(r,s),(0,z.jsx)(LT,{chrome:a,title:e.core.manifest.title,children:(0,S.createElement)(e.View,{state:i,dispatch:o,chrome:a})})}var jM=(()=>{let e=new URLSearchParams(window.location.search).get(`token`);return e!==null&&e!==``?e:void 0})(),MM={"content-type":`application/json`},NM=3e3,PM=class extends Error{status;safeText;unavailable;constructor(e,t,n=!1){super(e),this.name=`HearthModelAuthError`,this.status=t,this.safeText=e,this.unavailable=n}};function FM(){return jM===void 0?{}:{authorization:`Bearer ${jM}`}}function IM(e){return e!==null&&/json/i.test(e)}function LM(e,t,n){return new PM(`${e} ${t} failed (${n})`,n)}async function RM(e,t,n){if(!IM(e.headers.get(`content-type`)))return null;let r;try{r=await e.json()}catch{return null}if(!e.ok)throw LM(t,n,e.status);return r}async function zM(e,t,n){try{return await RM(await fetch(t,{method:e,credentials:`same-origin`,headers:{...FM(),...n===void 0?{}:MM},...n===void 0?{}:{body:JSON.stringify(n)}}),e,t)}catch(e){if(e instanceof PM)throw e;return null}}function BM(e){let t=e.trim();if(t===``)throw new PM(`Paste the full callback URL to continue`);if(t.length>4096)throw new PM(`Callback URL is too long`);return t}async function VM(){return zM(`GET`,`/__hearth/model-auth/anthropic/status`)}async function HM(){let e=await zM(`POST`,`/__hearth/model-auth/anthropic/start`);if(e===null)return null;if(typeof e.sessionId!=`string`||typeof e.authUrl!=`string`)throw new PM(`Claude login start returned an invalid response`);return e}async function UM(e,t){let n=await zM(`POST`,`/__hearth/model-auth/anthropic/finish`,{sessionId:e,redirectUrl:BM(t)});if(n===null)return null;if(n.ok!==!0)throw new PM(`Claude login finish returned an invalid response`);return n}function WM(e){return`hearth-model-auth:${e}:${globalThis.crypto?.randomUUID?.()??Math.random().toString(36).slice(2)}`}async function GM(e){await new Promise((t,n)=>{let r=WM(e),i,a=!1,o=window.setTimeout(()=>s(()=>n(new PM(`timed out after ${NM}ms waiting for the broker to ack the auth reload`))),NM);function s(e){if(!a){a=!0,window.clearTimeout(o);try{i?.close()}catch{}e()}}i=new th(e,{onOpen:()=>{i.send({type:`hello`,role:`observer`,client_id:r}),i.send({type:`reload_auth`})},onFrame:e=>{if(e.type===`ack`&&e.for===`reload_auth`){if(!e.ok){s(()=>n(new PM(e.detail??`reload auth failed`)));return}s(()=>t());return}e.type===`error`&&s(()=>n(new PM(e.message)))},onClose:(e,t)=>{if(e===`no-broker`||e===`no-node`){s(()=>n(new PM(`broker unavailable`,void 0,!0)));return}s(()=>n(new PM(t||`broker reload failed`)))}}),i.connect()})}function KM(e){let t=e(`about:blank`,`_blank`);if(t!==null)try{t.opener=null}catch{}return t}function qM(e,t,n){if(e!==null&&!e.closed)try{e.location.replace(t);return}catch{}n(t,`_blank`,`noopener,noreferrer`)}function JM(e){return e instanceof PM&&e.unavailable}function YM(e,t){return e instanceof PM?e.safeText:t}function XM({targetNodeId:e}){let[t,n]=(0,S.useState)({phase:`checking`,callbackUrl:``}),r=(0,S.useCallback)(async()=>{n(e=>({...e,phase:`checking`,error:void 0,errorStep:void 0}));try{let e=await VM();if(e===null||e.storedOauth===!0){n({phase:`checking`,callbackUrl:``});return}n({phase:`needs_login`,callbackUrl:``})}catch(e){if(JM(e)){n({phase:`checking`,callbackUrl:``});return}n({phase:`error`,callbackUrl:``,error:YM(e,`Claude login status failed`),errorStep:`status`})}},[]);(0,S.useEffect)(()=>{let t=!1;return(async()=>{if(e.trim()!==``){n({phase:`checking`,callbackUrl:``});try{let e=await VM();if(t)return;if(e===null||e.storedOauth===!0){n({phase:`checking`,callbackUrl:``});return}n({phase:`needs_login`,callbackUrl:``})}catch(e){if(t)return;if(JM(e)){n({phase:`checking`,callbackUrl:``});return}n({phase:`error`,callbackUrl:``,error:YM(e,`Claude login status failed`),errorStep:`status`})}}})(),()=>{t=!0}},[e]);let i=(0,S.useMemo)(()=>{let e=t.callbackUrl.trim();return e.length>0&&e.length<=4096},[t.callbackUrl]),a=(0,S.useCallback)(async()=>{let e=KM(window.open.bind(window));n(e=>({...e,phase:`starting`,error:void 0,errorStep:void 0}));try{let t=await HM();if(t===null){e?.close(),n({phase:`error`,callbackUrl:``,error:`Claude login start unavailable`,errorStep:`start`});return}qM(e,t.authUrl,window.open.bind(window)),n({phase:`awaiting_callback`,callbackUrl:``,session:t})}catch(t){e?.close(),n({phase:`error`,callbackUrl:``,error:YM(t,`Claude login start failed`),errorStep:`start`})}},[]),o=(0,S.useCallback)(async()=>{let r=t.callbackUrl.trim();if(r.length===0||r.length>4096){n(e=>({...e,phase:`error`,error:r.length===0?`Paste the full callback URL to finish login`:`Callback URL is too long`,errorStep:`finish`}));return}let i=t.session;if(i===void 0){n({phase:`error`,callbackUrl:r,error:`Claude login session is missing`,errorStep:`finish`});return}n(e=>({...e,phase:`finishing`,error:void 0,errorStep:void 0}));try{if(await UM(i.sessionId,r)===null){n(e=>({...e,phase:`error`,error:`Claude login finish unavailable`,errorStep:`finish`}));return}try{await GM(e),n({phase:`success`,callbackUrl:``,successText:`Claude login saved; chat auth reloaded`})}catch{n(e=>({...e,phase:`error`,error:`Claude login saved; reconnect chat to reload auth`,errorStep:`finish`}))}VM().catch(()=>null)}catch(e){n({phase:`error`,callbackUrl:r,error:YM(e,`Claude login finish failed`),errorStep:`finish`})}},[t.callbackUrl,t.session,e]),s=(0,S.useCallback)(()=>{t.errorStep===`status`?r():t.errorStep===`start`?a():t.errorStep===`finish`&&o()},[o,r,a,t.errorStep]),c=(0,S.useCallback)(()=>{n({phase:`needs_login`,callbackUrl:``})},[]);if(e.trim()===``||t.phase===`checking`)return null;if(t.phase===`error`)return(0,z.jsx)(`section`,{className:`border-b border-[var(--line)] bg-[color-mix(in_oklch,var(--ink)_3%,transparent)] px-4 py-3 text-sm text-[var(--ink)]`,children:(0,z.jsxs)(`div`,{className:`flex flex-col gap-2`,children:[(0,z.jsx)(`div`,{className:`font-medium`,children:t.error??`Claude login error`}),(0,z.jsxs)(`div`,{className:`flex gap-2`,children:[(0,z.jsx)(Z,{size:`sm`,onClick:()=>void s(),children:`Retry`}),(0,z.jsx)(Z,{size:`sm`,variant:`outline`,onClick:c,children:`Start over`})]})]})});if(t.phase===`success`)return(0,z.jsx)(`section`,{className:`border-b border-[var(--line)] bg-[color-mix(in_oklch,var(--ink)_3%,transparent)] px-4 py-3 text-sm text-[var(--ink)]`,children:(0,z.jsx)(`div`,{className:`font-medium`,children:t.successText??`Claude login saved; chat auth reloaded`})});if(t.phase===`needs_login`||t.phase===`starting`||t.phase===`awaiting_callback`||t.phase===`finishing`){let e=t.phase===`starting`||t.phase===`finishing`;return(0,z.jsx)(`section`,{className:`border-b border-[var(--line)] bg-[color-mix(in_oklch,var(--ink)_3%,transparent)] px-4 py-3 text-sm text-[var(--ink)]`,children:(0,z.jsxs)(`div`,{className:`flex flex-col gap-3`,children:[(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`div`,{className:`font-medium`,children:`Claude login needed for replies`}),(0,z.jsx)(`div`,{className:`text-xs text-[var(--dim)]`,children:`Log in with Claude so this chat can keep using the saved model auth.`})]}),(0,z.jsxs)(`div`,{className:`flex flex-wrap items-center gap-2`,children:[(0,z.jsx)(Z,{size:`sm`,disabled:e,onClick:()=>void a(),children:t.phase===`starting`?`Opening Claude…`:`Log in with Claude`}),t.phase===`awaiting_callback`||t.phase===`finishing`?(0,z.jsx)(`a`,{className:`text-sm underline underline-offset-4`,href:t.session?.authUrl,target:`_blank`,rel:`noreferrer noopener`,children:`Open Claude login`}):null]}),(t.phase===`awaiting_callback`||t.phase===`finishing`)&&t.session!==void 0?(0,z.jsxs)(`div`,{className:`grid gap-2`,children:[(0,z.jsx)(Tp,{htmlFor:`hearth-claude-callback`,children:`Paste the full callback URL`}),(0,z.jsx)(Np,{id:`hearth-claude-callback`,value:t.callbackUrl,onChange:e=>{let t=e.target.value;n(e=>({...e,callbackUrl:t}))},placeholder:`http://localhost:53692/callback?code=...&state=...`,rows:3,disabled:e}),(0,z.jsx)(`div`,{className:`text-xs text-[var(--dim)]`,children:`Copy the full address bar URL after Claude redirects to localhost.`}),(0,z.jsxs)(`div`,{className:`flex flex-wrap items-center gap-2`,children:[(0,z.jsx)(Z,{size:`sm`,disabled:!i||e,onClick:()=>void o(),children:t.phase===`finishing`?`Saving…`:`Save login`}),(0,z.jsx)(Z,{size:`sm`,variant:`outline`,onClick:c,children:`Start over`})]})]}):null]})})}return null}function ZM(e){let t={};for(let[n,r]of e.entries())t[n]=r;return t}function QM({viewId:e}){let[t]=Ln(),n=ZM(t),r=e===`chat`?n.target:void 0;return(0,z.jsx)(`div`,{className:`flex h-full min-h-0`,children:(0,z.jsxs)(`div`,{className:`min-w-0 flex-1 overflow-auto`,children:[e===`chat`&&r!==void 0&&r!==``?(0,z.jsx)(XM,{targetNodeId:r}):null,(0,z.jsx)(kM,{viewId:e,options:n})]})})}function $M(){let{viewId:e,tab:t}=dt();return(0,z.jsx)(QM,{viewId:e??``,tab:t})}var eN=3e4;function tN(){return Object.values(DM).map(e=>({id:e.core.manifest.id,title:e.core.manifest.title,description:e.core.manifest.description}))}function nN(){let[e,t]=(0,S.useState)(tN()),[n,r]=(0,S.useState)(!0),[i,a]=(0,S.useState)(0),o=(0,S.useCallback)(()=>a(e=>e+1),[]);return(0,S.useEffect)(()=>{let e=!1,n=()=>{Zf().then(n=>{e||(t(n.length>0?n:tN()),r(!1))}).catch(()=>{e||(t(tN()),r(!1))})};n();let i=setInterval(n,eN),a=()=>{document.visibilityState===`visible`&&n()};return window.addEventListener(`focus`,n),document.addEventListener(`visibilitychange`,a),()=>{e=!0,clearInterval(i),window.removeEventListener(`focus`,n),document.removeEventListener(`visibilitychange`,a)}},[i]),{views:e,loading:n,refetch:o}}function rN(){let{id:e}=dt();return(0,z.jsx)(eT,{id:e??``},e)}function iN(){let{deckId:e}=dt();return(0,z.jsx)(hT,{deckId:e??``})}function aN(){let{views:e,loading:t}=nN(),n=lt();return(0,S.useEffect)(()=>{if(t)return;let r=e[0];r&&n(`/views/${encodeURIComponent(r.id)}`,{replace:!0})},[e,t,n]),t?null:e.length===0?(0,z.jsx)(zm,{}):null}function oN(){let{home:e}=Ih(),[t]=Ln();return t.has(`new`)?(0,z.jsx)(zm,{}):e===`views`?(0,z.jsx)(aN,{}):(0,z.jsx)(zm,{})}function sN(){return(0,z.jsxs)(Lt,{children:[(0,z.jsx)(Ft,{path:`/`,element:(0,z.jsx)(oN,{})}),(0,z.jsx)(Ft,{path:`/canvas`,element:(0,z.jsx)(Sm,{})}),(0,z.jsx)(Ft,{path:`/nodes/:id`,element:(0,z.jsx)(rN,{})}),(0,z.jsx)(Ft,{path:`/c/:id`,element:(0,z.jsx)(rN,{})}),(0,z.jsx)(Ft,{path:`/inbox`,element:(0,z.jsx)(uT,{})}),(0,z.jsx)(Ft,{path:`/inbox/:deckId`,element:(0,z.jsx)(iN,{})}),(0,z.jsx)(Ft,{path:`/settings`,element:(0,z.jsx)(jT,{})}),(0,z.jsx)(Ft,{path:`/views/:viewId`,element:(0,z.jsx)($M,{})}),(0,z.jsx)(Ft,{path:`/views/:viewId/:tab`,element:(0,z.jsx)($M,{})}),(0,z.jsx)(Ft,{path:`*`,element:(0,z.jsx)(oN,{})})]})}function cN(){return lp(e=>e.reachable)?null:(0,z.jsx)(`div`,{role:`status`,className:`fixed inset-x-0 top-0 z-50 bg-warning/90 px-4 py-1.5 text-center text-sm font-medium text-background`,children:`Reconnecting…`})}function lN({nav:e}){let t=Rh(`views.host`),{views:n}=nN(),r=lt();return(0,z.jsxs)(`nav`,{"aria-label":`Primary`,className:`flex w-56 shrink-0 flex-col gap-1 border-r border-border bg-card/40 px-3 py-4`,children:[(t?e.filter(e=>e.id!==`views`):e).map(e=>(0,z.jsxs)(An,{to:e.path,end:e.path===`/`,className:({isActive:e})=>Y(`flex items-center justify-between rounded-lg px-3 py-2 text-sm font-medium transition-colors`,e?`bg-primary/10 text-primary`:`text-foreground/70 hover:bg-accent hover:text-foreground`),children:[(0,z.jsx)(`span`,{children:e.label}),e.id===`inbox`&&(0,z.jsx)(uN,{})]},e.id)),t&&(0,z.jsxs)(z.Fragment,{children:[(0,z.jsx)(`div`,{className:`instlabel mx-3 mb-0.5 mt-3 uppercase tracking-widest text-muted-foreground/60`,children:`Views`}),n.map(e=>(0,z.jsxs)(An,{to:`/views/${encodeURIComponent(e.id)}`,className:({isActive:e})=>Y(`flex items-center gap-2 truncate rounded-lg px-3 py-2 text-sm font-medium transition-colors`,e?`bg-primary/10 text-primary`:`text-foreground/70 hover:bg-accent hover:text-foreground`),children:[(0,z.jsx)(`span`,{className:`size-1.5 shrink-0 rounded-full`,style:{background:`var(--status-active, #3ba55d)`}}),(0,z.jsx)(`span`,{className:`truncate`,children:e.title})]},e.id)),(0,z.jsxs)(`button`,{type:`button`,onClick:()=>r(`/views`),className:`flex items-center gap-2 rounded-lg px-3 py-2 text-sm text-muted-foreground/50 transition-colors hover:text-foreground`,children:[(0,z.jsx)(`span`,{className:`text-base leading-none`,children:`+`}),(0,z.jsx)(`span`,{children:`New view`})]})]})]})}function uN(){let e=qp();return e<=0?null:(0,z.jsx)(`span`,{className:`inline-flex min-w-5 items-center justify-center rounded-full bg-primary px-1.5 text-xs font-semibold text-primary-foreground`,children:e})}function dN(e){e(`/?new=1`)}var fN={canvas:Of,conversations:Df,inbox:Sf,views:wf,settings:jf};function pN(e){return fN[e]??wf}var mN=wf;function hN(e){return Y(`flex h-9 items-center gap-2.5 rounded-lg px-3 text-sm font-medium no-underline transition-all`,e?`[color:var(--ink)] [background:rgba(232,228,216,.06)] [border:1px_solid_var(--line)] [box-shadow:inset_0_1px_0_var(--raise)]`:`border border-transparent [color:var(--ink2)] hover:[color:var(--ink)] hover:[background:rgba(232,228,216,.04)]`)}function gN({nav:e,home:t}){let n=Rh(`views.host`),{views:r}=nN(),i=lt(),a=n?e.filter(e=>e.id!==`views`):e;return(0,z.jsxs)(`aside`,{"aria-label":`Primary`,className:`flex w-57 flex-none flex-col gap-0.5 px-3 py-4 [border-right:1px_solid_var(--line)] [background:linear-gradient(180deg,rgba(20,19,16,.6),rgba(20,19,16,.2))]`,children:[(0,z.jsxs)(kn,{to:t,className:`flex items-center gap-2.5 px-2.5 pt-1 pb-4 text-base font-medium tracking-[.01em] no-underline [color:var(--ink)] [font-family:var(--font-display)]`,children:[(0,z.jsx)(`span`,{className:`flex flex-none items-center justify-center rounded-md text-xs font-bold [background:var(--bone)] [color:var(--bone-ink)] [font-family:var(--font-inst)]`,style:{width:22,height:22},children:`cr`}),`crouter`]}),(0,z.jsxs)(`button`,{type:`button`,onClick:()=>dN(i),title:`New chat (⌘⇧O)`,className:`mb-1.5 flex h-9 items-center gap-2.5 rounded-lg px-3 text-sm font-medium transition-all [color:var(--bone-ink)] [background:var(--bone)] hover:[background:var(--ink)]`,children:[(0,z.jsx)(kf,{size:16,className:`flex-none`,"aria-hidden":!0}),(0,z.jsx)(`span`,{children:`New chat`})]}),a.map(e=>{let t=pN(e.id);return(0,z.jsxs)(An,{to:e.path,end:e.path===`/`,className:({isActive:e})=>hN(e),children:[(0,z.jsx)(t,{size:18,className:`flex-none opacity-75`,"aria-hidden":!0}),(0,z.jsx)(`span`,{children:e.label}),e.id===`inbox`&&(0,z.jsx)(_N,{})]},e.id)}),n&&(0,z.jsxs)(z.Fragment,{children:[(0,z.jsx)(`div`,{className:`instlabel px-2.5 pt-3.5 pb-1.5`,children:`Views`}),r.map(e=>(0,z.jsxs)(An,{to:`/views/${encodeURIComponent(e.id)}`,className:({isActive:e})=>hN(e),children:[(0,z.jsx)(mN,{size:18,className:`flex-none opacity-75`,"aria-hidden":!0}),(0,z.jsx)(`span`,{className:`truncate`,children:e.title})]},e.id)),(0,z.jsxs)(`button`,{type:`button`,onClick:()=>i(`/views`),className:`flex h-9 items-center gap-2.5 rounded-lg border border-transparent bg-transparent px-3 text-sm font-medium transition-all [color:var(--dim)] hover:[color:var(--ink)]`,children:[(0,z.jsx)(kf,{size:16,className:`flex-none opacity-75`,"aria-hidden":!0}),(0,z.jsx)(`span`,{children:`New view`})]})]}),(0,z.jsx)(`div`,{className:`flex-1`}),(0,z.jsxs)(`div`,{className:`mt-2.5 pt-2.5 [border-top:1px_solid_var(--line)]`,children:[(0,z.jsxs)(`div`,{className:`flex items-center justify-between gap-2 px-1`,children:[(0,z.jsxs)(`span`,{className:`flex items-center gap-2.5 text-sm font-medium [color:var(--ink2)]`,children:[(0,z.jsx)(_f,{size:18,className:`flex-none opacity-75`,"aria-hidden":!0}),` silas`]}),(0,z.jsx)(`span`,{className:`kbd`,children:`⌘K`})]}),(0,z.jsx)(`div`,{className:`px-1 pt-2`,children:(0,z.jsx)(AT,{})})]})]})}function _N(){let e=qp();return e<=0?null:(0,z.jsx)(`span`,{className:`ml-auto rounded-full border px-2 py-0.5 text-xs font-semibold [font-family:var(--font-inst)] [color:#ff8260] [background:var(--blk-dim)] [border-color:rgba(255,94,54,.35)]`,children:e})}function vN(e){return Y(`relative flex size-9 items-center justify-center rounded-lg no-underline opacity-75 transition-all`,e?`[color:var(--ink)] opacity-100 [background:rgba(232,228,216,.06)] [border:1px_solid_var(--line)] [box-shadow:inset_0_1px_0_var(--raise)]`:`border border-transparent [color:var(--ink2)] hover:opacity-100 hover:[color:var(--ink)] hover:[background:rgba(232,228,216,.04)]`)}function yN({nav:e,home:t}){let n=Rh(`views.host`),{views:r}=nN(),i=qp(),a=lt(),o=n?e.filter(e=>e.id!==`views`):e;return(0,z.jsxs)(`aside`,{"aria-label":`Primary`,style:{width:58},className:`flex flex-none flex-col items-center gap-0.5 py-4 [border-right:1px_solid_var(--line)] [background:linear-gradient(180deg,rgba(20,19,16,.6),rgba(20,19,16,.2))]`,children:[(0,z.jsx)(kn,{to:t,title:`crouter`,className:`flex items-center justify-center pt-1 pb-4 no-underline`,children:(0,z.jsx)(`span`,{className:`flex flex-none items-center justify-center rounded-md text-xs font-bold [background:var(--bone)] [color:var(--bone-ink)] [font-family:var(--font-inst)]`,style:{width:22,height:22},children:`cr`})}),(0,z.jsx)(`button`,{type:`button`,onClick:()=>dN(a),title:`New chat (⌘⇧O)`,"aria-label":`New chat`,className:`mb-1 flex size-9 items-center justify-center rounded-lg transition-all [color:var(--bone-ink)] [background:var(--bone)] hover:[background:var(--ink)]`,children:(0,z.jsx)(kf,{size:18,"aria-hidden":!0})}),o.map(e=>{let t=pN(e.id);return(0,z.jsxs)(An,{to:e.path,end:e.path===`/`,title:e.label,className:({isActive:e})=>vN(e),children:[(0,z.jsx)(t,{size:18,"aria-hidden":!0}),e.id===`inbox`&&i>0&&(0,z.jsx)(`span`,{className:`absolute right-[5px] top-[5px] size-2.5 rounded-full [background:var(--blk)] [box-shadow:0_0_10px_rgba(255,94,54,.55)] [animation:pulse-hot_1.6s_ease-out_infinite]`})]},e.id)}),n&&r.map(e=>(0,z.jsx)(An,{to:`/views/${encodeURIComponent(e.id)}`,title:e.title,className:({isActive:e})=>vN(e),children:(0,z.jsx)(mN,{size:18,"aria-hidden":!0})},e.id)),(0,z.jsx)(`div`,{className:`flex-1`}),(0,z.jsx)(kn,{to:`/settings`,title:`silas`,className:`flex size-9 items-center justify-center rounded-lg border border-transparent no-underline opacity-75 transition-all [color:var(--ink2)] hover:opacity-100 hover:[color:var(--ink)] hover:[background:rgba(232,228,216,.04)]`,children:(0,z.jsx)(_f,{size:18,"aria-hidden":!0})})]})}function bN(e,t){let n=(0,S.useRef)(e),r=(0,S.useRef)(t);n.current=e,r.current=t,(0,S.useEffect)(()=>{let e=e=>{let t=document.activeElement;t instanceof HTMLTextAreaElement||t instanceof HTMLInputElement||t instanceof HTMLElement&&t.isContentEditable||n.current(e)&&(e.preventDefault(),r.current(e))};return window.addEventListener(`keydown`,e),()=>window.removeEventListener(`keydown`,e)},[])}function xN(e){return e.attention_count>0?`blocked`:e.status}function SN({open:e,onClose:t}){let{nodes:n}=dp(),r=lt(),[i,a]=(0,S.useState)(``),[o,s]=(0,S.useState)(0),c=(0,S.useRef)(null),l=(0,S.useMemo)(()=>{let e=n.filter(e=>e.enterable).map(e=>({id:e.node_id,title:Dm(e),dot:xN(e),kind:e.kind,last:e.last_activity??e.created}));e.sort((e,t)=>t.last.localeCompare(e.last));let t=i.trim().toLowerCase();return t?e.filter(e=>e.title.toLowerCase().includes(t)||e.kind.toLowerCase().includes(t)):e},[n,i]);if((0,S.useEffect)(()=>{e&&(a(``),s(0),c.current?.focus())},[e]),(0,S.useEffect)(()=>{s(e=>Math.min(e,Math.max(0,l.length-1)))},[l.length]),!e)return null;let u=e=>{e&&(r(`/c/${encodeURIComponent(e.id)}`),t())};return(0,z.jsx)(`div`,{className:`fixed inset-0 z-50 flex items-start justify-center px-4 pt-24`,style:{background:`var(--scrim)`},onClick:t,children:(0,z.jsxs)(`div`,{className:`panel w-full max-w-xl overflow-hidden p-0`,onClick:e=>e.stopPropagation(),onKeyDown:e=>{e.key===`Escape`?(e.preventDefault(),t()):e.key===`ArrowDown`?(e.preventDefault(),s(e=>Math.min(e+1,l.length-1))):e.key===`ArrowUp`?(e.preventDefault(),s(e=>Math.max(e-1,0))):e.key===`Enter`&&(e.preventDefault(),u(l[o]))},children:[(0,z.jsxs)(`div`,{className:`flex items-center gap-2 border-b px-4 py-3`,style:{borderColor:`var(--line)`},children:[(0,z.jsx)(`span`,{className:`instlabel`,style:{color:`var(--dim)`},children:`Jump to`}),(0,z.jsx)(`input`,{ref:c,value:i,onChange:e=>a(e.currentTarget.value),placeholder:`Search conversations…`,className:`flex-1 bg-transparent text-sm outline-none`,style:{color:`var(--ink)`}}),(0,z.jsx)(`span`,{className:`kbd`,children:`esc`})]}),(0,z.jsx)(`ul`,{className:`max-h-80 overflow-auto py-1`,children:l.length===0?(0,z.jsx)(`li`,{className:`px-4 py-3 text-sm italic`,style:{color:`var(--mut)`},children:`no live nodes`}):l.map((e,t)=>(0,z.jsx)(`li`,{children:(0,z.jsxs)(`button`,{type:`button`,onClick:()=>u(e),onMouseEnter:()=>s(t),className:Y(`flex w-full items-center gap-2.5 px-4 py-2 text-left transition-colors`,t===o&&`bg-[color-mix(in_oklch,var(--ink)_6%,transparent)]`),children:[(0,z.jsx)(`span`,{className:Y(`dot shrink-0`,e.dot)}),(0,z.jsx)(`span`,{className:`min-w-0 flex-1 truncate text-sm`,style:{color:`var(--ink)`},children:e.title}),(0,z.jsx)(`span`,{className:`shrink-0 text-xs`,style:{fontFamily:`var(--font-inst)`,letterSpacing:`0.04em`,color:`var(--mut)`},children:e.kind})]})},e.id))})]})})}var CN=/^\/(nodes|c)\//;function wN({children:e}){let t=Ih(),n=ot(),r=lt(),i=Rh(`views.host`),[a,o]=(0,S.useState)(!1);bN((0,S.useCallback)(e=>(e.metaKey||e.ctrlKey)&&e.shiftKey&&!e.altKey&&e.code===`KeyO`,[]),(0,S.useCallback)(()=>dN(r),[r])),bN((0,S.useCallback)(e=>(e.metaKey||e.ctrlKey)&&!e.shiftKey&&!e.altKey&&e.code===`KeyK`,[]),(0,S.useCallback)(()=>o(e=>!e),[]));let s=t.density===`comfortable`,c=i&&s,l=t.nav[0]?.path??`/`,u=(0,z.jsx)(SN,{open:a,onClose:()=>o(!1)});return c?(0,z.jsxs)(`div`,{className:`flex h-full min-h-0 flex-col`,children:[(0,z.jsx)(TN,{home:l}),(0,z.jsx)(`main`,{className:`min-h-0 flex-1 overflow-hidden`,children:e}),u]}):s?(0,z.jsxs)(`div`,{className:`flex h-full min-h-0 flex-col`,children:[(0,z.jsxs)(`header`,{className:`flex h-10 shrink-0 items-center justify-between gap-3 border-b border-border bg-card/40 px-3`,children:[(0,z.jsx)(kn,{to:l,className:`text-sm font-semibold tracking-tight text-foreground`,children:`crouter`}),(0,z.jsx)(AT,{})]}),(0,z.jsxs)(`div`,{className:`flex min-h-0 flex-1`,children:[(0,z.jsx)(lN,{nav:t.nav}),(0,z.jsx)(`main`,{className:`min-h-0 flex-1 overflow-hidden`,children:e})]}),u]}):(0,z.jsxs)(`div`,{className:`flex h-full min-h-0`,children:[CN.test(n.pathname)?(0,z.jsx)(yN,{nav:t.nav,home:l}):(0,z.jsx)(gN,{nav:t.nav,home:l}),(0,z.jsx)(`main`,{className:`min-h-0 flex-1 overflow-hidden`,children:e}),u]})}function TN({home:e}){let{views:t}=nN(),n=qp(),r=lt();return(0,z.jsxs)(`header`,{className:`flex h-13 shrink-0 items-center gap-0 border-b px-9`,style:{borderColor:`rgba(40,36,26,.1)`,background:`var(--card)`},children:[(0,z.jsxs)(kn,{to:e,className:`flex items-center gap-2 shrink-0`,children:[(0,z.jsx)(`span`,{className:`flex size-5.5 items-center justify-center rounded-md text-xs font-bold`,style:{fontFamily:`var(--font-inst)`,background:`var(--foreground)`,color:`var(--background)`},children:`cr`}),(0,z.jsx)(`span`,{className:`text-lg`,style:{fontFamily:`var(--font-display)`,fontWeight:500,color:`var(--foreground)`},children:`crouter`})]}),(0,z.jsxs)(`div`,{className:`ml-3.5 flex items-center gap-1 overflow-x-auto`,children:[t.map(e=>(0,z.jsxs)(An,{to:`/views/${encodeURIComponent(e.id)}`,className:({isActive:e})=>Y(`flex shrink-0 items-center gap-2 whitespace-nowrap rounded-lg border px-3.5 py-1.5 text-sm font-medium transition-colors`,e?`border-border/50 bg-background text-foreground shadow-sm`:`border-transparent text-muted-foreground hover:bg-accent/40 hover:text-foreground`),style:({isActive:e})=>e?{boxShadow:`0 6px 16px -10px rgba(60,50,30,.5), inset 0 1px 0 rgba(255,255,255,.9)`}:{},children:[(0,z.jsx)(`span`,{className:`size-1.5 shrink-0 rounded-full`,style:{background:`#247d4b`}}),e.title]},e.id)),(0,z.jsx)(`button`,{type:`button`,onClick:()=>dN(r),className:`flex shrink-0 items-center rounded-lg border border-transparent px-3 py-1.5 text-muted-foreground/50 transition-colors hover:text-foreground`,title:`New chat (⌘⇧O)`,"aria-label":`New chat`,children:(0,z.jsx)(kf,{className:`size-4`})})]}),(0,z.jsxs)(`div`,{className:`ml-auto flex items-center gap-2`,children:[(0,z.jsx)(AT,{}),(0,z.jsx)(`button`,{type:`button`,onClick:()=>r(`/`),className:`flex size-9 items-center justify-center rounded-lg border text-muted-foreground transition-colors hover:text-foreground`,style:{borderColor:`rgba(40,36,26,.1)`,background:`rgba(255,255,255,.4)`},title:`Chats`,"aria-label":`Chats`,children:(0,z.jsx)(Df,{className:`size-4`})}),(0,z.jsxs)(`button`,{type:`button`,onClick:()=>r(`/inbox`),className:`relative flex size-9 items-center justify-center rounded-lg border text-muted-foreground transition-colors hover:text-foreground`,style:{borderColor:`rgba(40,36,26,.1)`,background:`rgba(255,255,255,.4)`},title:`Inbox`,"aria-label":`Inbox`,children:[(0,z.jsx)(Sf,{className:`size-4`}),n>0&&(0,z.jsx)(`span`,{className:`absolute -right-1 -top-1 rounded-full bg-destructive px-1 text-xs font-bold text-white`,style:{fontFamily:`var(--font-inst)`,minWidth:`14px`,lineHeight:`14px`},children:n})]}),(0,z.jsx)(`div`,{className:`size-8 shrink-0 rounded-full border-2 border-white`,style:{background:`linear-gradient(135deg,#d8b97a,#b08b4a)`,boxShadow:`0 2px 8px rgba(60,50,30,.25)`}})]})]})}function EN(){let e=em(e=>e.toasts),t=em(e=>e.dismiss);return e.length===0?null:(0,z.jsx)(`div`,{className:`pointer-events-none fixed inset-x-0 bottom-4 z-50 flex flex-col items-center gap-2`,children:e.map(e=>(0,z.jsx)(`button`,{type:`button`,onClick:()=>t(e.id),className:Y(`pointer-events-auto rounded-lg border px-4 py-2 text-sm shadow-md transition-opacity`,e.tone===`success`?`border-success/40 bg-success/10 text-success`:`border-border bg-card text-foreground`),children:e.message},e.id))})}function DN(){return(0,z.jsx)(Ph,{children:(0,z.jsx)(Dn,{children:(0,z.jsxs)($d,{delayDuration:300,children:[(0,z.jsx)(cN,{}),(0,z.jsx)(wN,{children:(0,z.jsx)(sN,{})}),(0,z.jsx)(EN,{})]})})})}var ON=document.getElementById(`root`);if(!ON)throw Error(`crtr web: #root element not found in index.html`);(0,nd.createRoot)(ON).render((0,z.jsx)(S.StrictMode,{children:(0,z.jsx)(DN,{})}));
77
+ `).map(e=>{let t=e.indexOf(`:`);return t<1?null:{key:e.slice(0,t).trim(),val:e.slice(t+1).trim()}}).filter(Boolean);return(0,z.jsxs)(z.Fragment,{children:[i.length>0&&(0,z.jsx)(`div`,{className:`fm-chips`,children:i.map(({key:e,val:t})=>(0,z.jsxs)(`span`,{className:`fm-chip`,children:[e,` `,(0,z.jsx)(`b`,{children:t})]},e))}),(0,z.jsx)(`div`,{className:qw,dangerouslySetInnerHTML:{__html:NC(r)}})]})}}return(0,z.jsx)(`div`,{className:qw,dangerouslySetInnerHTML:{__html:NC(e)}})}var Zw=[`off`,`minimal`,`low`,`medium`,`high`,`xhigh`],Qw=e=>({"--i":e}),$w={borderBottom:`1px solid var(--line)`,background:`linear-gradient(180deg, rgba(33,31,25,.7), rgba(20,19,16,0))`};function eT(e){let t=lt(),n=Eh(e.id),[r,i]=(0,S.useState)(null),[a,o]=(0,S.useState)(``),[s,c]=(0,S.useState)(!1),[l,u]=(0,S.useState)(null),[d,f]=(0,S.useState)(null),[p,m]=(0,S.useState)(null),h=n.source===`static`,g=n.brokerStatus===`connected`||n.brokerStatus===`revived`,_=n.role===`controller`,v=n.state?.isStreaming??!1,y=_&&!h&&g&&n.serverConnected,b=Rh(`node.arbitration`),x=Rh(`node.internals`),C=Rh(`commands.palette`),w=Ih().nav[0]??{label:`Home`,path:`/`},T=n.commands,E=!b&&!h&&g&&n.role===`observer`&&!!n.presence.controller;(0,S.useEffect)(()=>{let t=!1;return Wf(e.id).then(e=>{t||i(e)}).catch(e=>{t||u(lT(e))}),()=>{t=!0}},[e.id]);let D=(0,S.useRef)(0);(0,S.useEffect)(()=>{D.current=0},[e.id]),(0,S.useEffect)(()=>{if(!Tg({dormant:h,status:r?.status,socketReady:n.socketReady,attempt:D.current}))return;let e=D.current;D.current+=1;let t=setTimeout(()=>n.reconnect(),Eg(e));return()=>clearTimeout(t)},[h,r?.status,n.socketReady,n.reconnect]);let O=(0,S.useRef)(null);(0,S.useEffect)(()=>{n.socketReady||(O.current=null)},[n.socketReady]),(0,S.useEffect)(()=>{b||h||!n.socketReady||!g||n.role!==`controller`&&O.current!==e.id&&(O.current=e.id,n.requestControl())},[b,h,n.socketReady,g,n.role,e.id,n]),(0,S.useEffect)(()=>{let e=e=>{!e.altKey||e.metaKey||e.ctrlKey||e.code!==`KeyD`||document.activeElement instanceof HTMLTextAreaElement||(e.preventDefault(),HC())};return window.addEventListener(`keydown`,e),()=>window.removeEventListener(`keydown`,e)},[]),(0,S.useEffect)(()=>{let e=!1;return Qh().then(t=>{e||m(t)}).catch(()=>null),()=>{e=!0}},[e.id]);let k=()=>{let e=a.trim();!e||!y||(v?n.steer(e):n.prompt(e),o(``))},A=e=>{Lm(e,o,k)},j=e=>{o(`/${e.name} `)},M=async()=>{c(!0),u(null);try{await Jf(e.id),n.reconnect()}catch(e){u(lT(e))}finally{c(!1)}},N=async()=>{u(null);try{await Yf(e.id)}catch(e){u(lT(e))}},P=Bh(`steer`),F={header:{render:()=>(0,z.jsx)(Gh,{store:n,detail:r})},chrome:{cap:`node.internals`,render:()=>(0,z.jsx)(eg,{store:n,detail:r,hearthStatus:p})},stream:{render:()=>(0,z.jsx)(Bw,{messages:n.messages,streaming:v})},arbitration:{cap:`node.arbitration`,render:()=>(0,z.jsx)(Sg,{store:n})},rail:{cap:`subnodes.activity`,render:()=>(0,z.jsx)(Uw,{rootId:e.id})},graphRail:{cap:`node.graphRail`,render:()=>(0,z.jsx)(fg,{currentId:e.id,onNavigate:e=>t(`/nodes/${e}`)})},filePeek:{cap:`files.peek`,render:()=>(0,z.jsx)(Jw,{nodeId:e.id,path:d,onClose:()=>f(null)})},composer:{render:()=>h?(0,z.jsx)(oT,{id:e.id,reviving:s,onRevive:M,onClose:N}):(0,z.jsxs)(z.Fragment,{children:[(0,z.jsx)(Og,{cap:`node.internals`,children:(0,z.jsx)(aT,{store:n,canDrive:y,streaming:v,onClose:N})}),!x&&v&&(0,z.jsxs)(`div`,{className:`flex shrink-0 items-center gap-2 border-t border-border px-4 py-2 text-sm text-success`,children:[(0,z.jsx)(`span`,{className:`size-1.5 animate-pulse rounded-full bg-success`}),`Agent is working…`,(0,z.jsx)(Z,{variant:`secondary`,size:`sm`,className:`ml-auto`,disabled:!y,onClick:()=>n.abort(),children:`Stop`})]}),(0,z.jsxs)(`div`,{className:`relative flex shrink-0 flex-col gap-2 border-t border-border px-4 py-3`,children:[C&&(0,z.jsx)(Ag,{commands:T,query:a,visible:a.startsWith(`/`),onSelect:j}),(0,z.jsx)(Np,{className:Y(`resize-none text-sm`,x&&`font-mono`),value:a,onChange:e=>o(e.currentTarget.value),onKeyDown:A,disabled:!y,placeholder:rT(x,C,_,g),rows:3}),(0,z.jsxs)(`div`,{className:`flex items-center justify-end gap-2`,children:[(0,z.jsx)(Og,{cap:`node.internals`,children:(0,z.jsx)(sT,{id:e.id})}),(0,z.jsx)(Z,{variant:`default`,onClick:k,disabled:!y||!a.trim(),children:v?P:`Send`})]})]})]})}};return(0,z.jsx)(rw.Provider,{value:{peekedPath:d,onPeek:f},children:(0,z.jsxs)(`div`,{className:`in flex h-full min-h-0 flex-col`,children:[(0,z.jsxs)(`div`,{className:Y(`con-head rv flex shrink-0 items-center gap-3 px-6 py-4`,h&&`opacity-80`),style:{...$w,...Qw(1)},children:[(0,z.jsxs)(`button`,{type:`button`,onClick:()=>t(w.path),className:`flex shrink-0 items-center gap-1.5 text-sm text-muted-foreground transition-colors hover:text-[var(--ink)]`,children:[(0,z.jsx)(uf,{className:`size-4`}),w.label]}),(0,z.jsx)(Dg,{reg:F,name:`header`}),(0,z.jsx)(`div`,{className:`flex-1`}),(0,z.jsx)(nT,{}),(0,z.jsx)(Dg,{reg:F,name:`arbitration`})]}),(0,z.jsx)(`div`,{className:`rv`,style:Qw(2),children:(0,z.jsx)(Dg,{reg:F,name:`chrome`})}),(0,z.jsx)(iT,{state:n.brokerStatus,dormant:h}),E&&(0,z.jsx)(`div`,{className:`border-b border-border bg-muted/40 px-4 py-2 text-sm text-muted-foreground`,children:`Someone else is steering this conversation.`}),n.error&&x&&(0,z.jsxs)(`div`,{className:`border-b border-destructive/30 bg-destructive/15 px-4 py-2 text-sm text-destructive`,children:[n.error.code,`: `,n.error.message]}),l&&(0,z.jsx)(`div`,{className:`border-b border-destructive/30 bg-destructive/15 px-4 py-2 text-sm text-destructive`,children:x?l:`Something went wrong — please try again.`}),(0,z.jsx)(Gw,{conversationId:e.id}),(0,z.jsxs)(`div`,{className:`streamwrap relative flex min-h-0 flex-1 overflow-hidden`,children:[(0,z.jsx)(Dg,{reg:F,name:`graphRail`}),(0,z.jsxs)(`div`,{className:`flex min-w-0 flex-1 flex-col`,children:[(0,z.jsx)(`main`,{className:`min-h-0 flex-1 overflow-auto`,children:(0,z.jsx)(Dg,{reg:F,name:`stream`})}),(0,z.jsx)(Dg,{reg:F,name:`rail`}),(0,z.jsx)(Dg,{reg:F,name:`composer`})]}),(0,z.jsx)(Dg,{reg:F,name:`filePeek`})]}),(0,z.jsx)(Dg,{reg:F,name:`trace`}),(0,z.jsx)(Og,{cap:`node.internals`,children:(0,z.jsx)(ig,{store:n,detail:r})}),(0,z.jsx)(Ng,{store:n})]})})}var tT=[{value:`focused`,label:`Focused`},{value:`standard`,label:`Standard`},{value:`verbose`,label:`Verbose`}];function nT(){let e=WC();return(0,z.jsxs)(`div`,{className:`flex shrink-0 items-center gap-2`,title:`Transcript detail — Focused / Standard / Verbose (⌥D to cycle)`,children:[(0,z.jsx)(`span`,{className:`instlabel`,children:`Detail`}),(0,z.jsxs)(Ep,{value:e,onValueChange:e=>VC(e),children:[(0,z.jsx)(Op,{size:`sm`,className:`text-sm`,"aria-label":`Transcript detail`,children:(0,z.jsx)(Dp,{})}),(0,z.jsx)(kp,{children:tT.map(e=>(0,z.jsx)(Ap,{value:e.value,children:e.label},e.value))})]})]})}function rT(e,t,n,r){return e?n?r?t?`Type a prompt, or / for commands…`:`Type a prompt…`:`broker is down — input is frozen`:`observer — request control to drive this session`:r?`Message your agent`:`Reconnecting to your agent…`}function iT({state:e,dormant:t}){let n=!Rh(`diagnostics`);return t||e!==`down`&&e!==`reconnecting`?null:n?(0,z.jsx)(`div`,{className:`broker-banner border border-warning/30 bg-warning/15 px-4 py-2 text-sm`,children:`Reconnecting to your agent…`}):(0,z.jsx)(`div`,{className:[`broker-banner border px-4 py-2 text-sm`,e===`down`?`bg-destructive/15 text-destructive border-destructive/30`:`bg-warning/15 border-warning/30`].join(` `),children:e===`down`?`Broker is down — history frozen, input disabled. Waiting for auto-revive…`:`Reconnecting to the broker…`})}function aT({store:e,canDrive:t,streaming:n,onClose:r}){let[i,a]=(0,S.useState)(null),o=i??e.state?.thinkingLevel??`medium`,s=Bh(`compact`),c=Bh(`close`),l=Bh(`node`);return(0,z.jsxs)(`div`,{className:`flex shrink-0 flex-wrap items-center gap-2 border-t border-border px-4 py-2`,children:[(0,z.jsx)(Z,{variant:`secondary`,size:`sm`,disabled:!t||!n,onClick:()=>e.abort(),children:`Abort`}),(0,z.jsxs)(`label`,{className:`tiny-sel relative`,"aria-disabled":!t,children:[`thinking `,(0,z.jsx)(`b`,{children:o}),(0,z.jsx)(lf,{className:`size-3.5`}),(0,z.jsx)(`select`,{disabled:!t,value:o,onChange:t=>{let n=t.currentTarget.value;a(n),e.setThinkingLevel(n)},"aria-label":`Thinking level`,className:`absolute inset-0 cursor-pointer opacity-0`,children:Zw.map(e=>(0,z.jsx)(`option`,{value:e,children:e},e))})]}),(0,z.jsx)(Z,{variant:`ghost`,size:`sm`,disabled:!t,onClick:()=>e.cycleModel(),children:`Cycle model`}),(0,z.jsx)(Z,{variant:`ghost`,size:`sm`,disabled:!t,onClick:()=>e.compact(),children:s}),(0,z.jsx)(Og,{cap:`node.lifecycle.raw`,children:(0,z.jsxs)(Z,{variant:`destructive`,size:`sm`,className:`ml-auto`,onClick:r,children:[c,` `,l]})})]})}function oT({id:e,reviving:t,onRevive:n,onClose:r}){let i=zh(),a=Rh(`node.internals`),o=Bh(`node`),s=Bh(`revive`),c=Bh(`close`),l=[{key:`revive`,node:(0,z.jsx)(Z,{variant:`default`,disabled:t,onClick:n,children:t?`${s}…`:s})},{key:`close`,cap:`node.lifecycle.raw`,node:(0,z.jsxs)(Z,{variant:`destructive`,onClick:r,children:[c,` `,o]})}];return(0,z.jsxs)(`div`,{className:`flex shrink-0 flex-wrap items-center gap-2 border-t border-border px-4 py-3`,children:[(0,z.jsx)(`span`,{className:`text-muted-foreground text-sm`,children:a?`This ${o} is dormant (read-only). ${s} to drive it live.`:`This ${o} is finished. ${s} to keep going.`}),(0,z.jsx)(Og,{cap:`node.internals`,children:(0,z.jsx)(sT,{id:e})}),kg(l,i).map(e=>(0,z.jsx)(S.Fragment,{children:e.node},e.key))]})}function sT({id:e}){let[t,n]=(0,S.useState)(!1);return(0,z.jsxs)(z.Fragment,{children:[(0,z.jsx)(Z,{variant:`secondary`,onClick:()=>n(!0),children:`Message (inbox)`}),(0,z.jsx)(cT,{id:e,open:t,onOpenChange:n})]})}function cT({id:e,open:t,onOpenChange:n}){let[r,i]=(0,S.useState)(``),[a,o]=(0,S.useState)(``),[s,c]=(0,S.useState)(!1),[l,u]=(0,S.useState)(null);return(0,S.useEffect)(()=>{t&&(i(``),o(``),u(null))},[t]),(0,z.jsx)(gp,{open:t,onOpenChange:n,children:(0,z.jsxs)(yp,{children:[(0,z.jsxs)(bp,{children:[(0,z.jsx)(Sp,{children:`Send an inbox message`}),(0,z.jsx)(Cp,{children:`A directive deliverable to any node, including a dormant one.`})]}),(0,z.jsxs)(`form`,{onSubmit:async t=>{if(t.preventDefault(),r.trim()){c(!0),u(null);try{let t=await qf(e,{body:r.trim(),...a.trim()?{tier:a.trim()}:{}});u(`delivered=${String(t.delivered)} revived=${String(t.revived)}`),i(``)}catch(e){u(lT(e))}finally{c(!1)}}},className:`flex flex-col gap-3`,children:[(0,z.jsx)(Np,{value:r,onChange:e=>i(e.currentTarget.value),rows:4,required:!0,placeholder:`Message body…`}),(0,z.jsxs)(`label`,{className:`flex flex-col gap-1 text-sm`,children:[`tier`,(0,z.jsx)(`input`,{className:`rounded border bg-transparent px-2 py-1 text-sm`,value:a,onChange:e=>o(e.currentTarget.value),placeholder:`(default)`})]}),l&&(0,z.jsx)(`p`,{className:`text-muted-foreground text-sm`,children:l}),(0,z.jsxs)(xp,{children:[(0,z.jsx)(Z,{type:`button`,variant:`secondary`,onClick:()=>n(!1),disabled:s,children:`Close`}),(0,z.jsx)(Z,{type:`submit`,variant:`default`,disabled:s,children:s?`Sending…`:`Send`})]})]})]})})}function lT(e){return e instanceof Bf?`${e.code}: ${e.message}`:String(e)}function uT(){let{decks:e,loading:t}=Jp();return(0,z.jsxs)(`div`,{className:`mx-auto flex h-full min-h-0 max-w-3xl flex-col px-6 py-8`,children:[(0,z.jsxs)(`div`,{className:`mb-6 flex items-center gap-3`,children:[(0,z.jsx)(`h1`,{className:`text-3xl`,style:{fontFamily:`var(--font-display)`,fontWeight:460,letterSpacing:`-0.01em`,color:`var(--ink)`},children:`Inbox`}),e.length>0&&(0,z.jsx)(`span`,{className:`text-xs`,style:{fontFamily:`var(--font-inst)`,fontWeight:600,color:`#ff8260`,background:`var(--blk-dim)`,border:`1px solid rgba(255,94,54,.35)`,padding:`1.5px 7px`,borderRadius:`99px`},children:e.length})]}),(0,z.jsx)(`div`,{className:`min-h-0 flex-1 overflow-auto`,children:t?(0,z.jsx)(mT,{}):e.length===0?(0,z.jsx)(pT,{}):(0,z.jsx)(`ul`,{className:`flex flex-col gap-2.5`,children:e.map(e=>(0,z.jsx)(dT,{deck:e},e.id))})})]})}function dT({deck:e}){let t=lt(),n=Zp(e.kind),r=n.icon;return(0,z.jsx)(`li`,{className:`list-none`,children:(0,z.jsxs)(`button`,{type:`button`,onClick:()=>t(`/inbox/${encodeURIComponent(e.job_id)}`),className:`panel flex w-full items-start gap-4 px-4 py-3.5 text-left transition-colors hover:bg-[color-mix(in_oklch,var(--ink)_3%,transparent)] focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring`,children:[(0,z.jsx)(`span`,{className:`mt-0.5 inline-flex size-9 shrink-0 items-center justify-center rounded-lg`,style:{border:`1px solid var(--line)`,color:`var(--ink2)`,background:`color-mix(in oklch, var(--ink) 4%, transparent)`},title:n.label,children:(0,z.jsx)(r,{className:`size-4.5`})}),(0,z.jsxs)(`div`,{className:`min-w-0 flex-1`,children:[(0,z.jsxs)(`div`,{className:`flex items-center gap-2.5`,children:[(0,z.jsx)(`span`,{className:`truncate text-sm`,style:{fontWeight:500,color:`var(--ink)`},children:e.title}),(0,z.jsx)(`span`,{className:`instlabel shrink-0`,children:n.label})]}),e.subtitle&&(0,z.jsx)(`p`,{className:`mt-0.5 truncate text-sm`,style:{color:`var(--mut)`},children:e.subtitle}),(0,z.jsx)(fT,{deck:e,className:`mt-1.5`})]}),(0,z.jsx)(`span`,{className:`shrink-0 text-xs`,style:{fontFamily:`var(--font-inst)`,letterSpacing:`0.08em`,color:`var(--mut)`},title:`waiting ${Qp(e.blocked_since)}`,children:Qp(e.blocked_since)})]})})}function fT({deck:e,className:t}){let n=Rh(`node.internals`);return(0,z.jsxs)(`div`,{className:Y(`flex flex-wrap items-center gap-x-2 gap-y-0.5 text-xs`,t),children:[(0,z.jsxs)(`span`,{className:`text-muted-foreground`,children:[`in `,(0,z.jsx)(`span`,{className:`font-medium text-foreground/80`,children:e.conversation_title})]}),n&&(0,z.jsxs)(z.Fragment,{children:[(0,z.jsx)(`span`,{className:`text-muted-foreground/40`,children:`·`}),(0,z.jsxs)(kn,{to:`/nodes/${encodeURIComponent(e.asking_node_id)}`,onClick:e=>e.stopPropagation(),className:`font-mono text-muted-foreground hover:text-primary hover:underline`,title:e.cwd,children:[e.asking_node_name,` (`,e.asking_node_id,`)`]}),(0,z.jsx)(`span`,{className:`text-muted-foreground/40`,children:`·`}),(0,z.jsx)(`span`,{className:`font-mono text-muted-foreground/60`,title:e.cwd,children:e.cwd})]})]})}function pT(){return(0,z.jsxs)(`div`,{className:`flex h-full flex-col items-center justify-center py-16 text-center`,children:[(0,z.jsx)(`p`,{className:`text-2xl`,style:{fontFamily:`var(--font-display)`,fontStyle:`italic`,color:`var(--ink)`},children:`You're all caught up.`}),(0,z.jsx)(`p`,{className:`mt-1.5 text-sm`,style:{color:`var(--mut)`},children:`Nothing needs your input right now.`})]})}function mT(){return(0,z.jsx)(`ul`,{className:`flex flex-col gap-2.5`,children:[0,1,2].map(e=>(0,z.jsxs)(`li`,{className:`panel flex items-center gap-4 px-4 py-3.5`,children:[(0,z.jsx)(`div`,{className:`size-9 shrink-0 animate-pulse rounded-lg bg-muted`}),(0,z.jsxs)(`div`,{className:`min-w-0 flex-1 space-y-2`,children:[(0,z.jsx)(`div`,{className:`h-4 w-1/3 animate-pulse rounded bg-muted`}),(0,z.jsx)(`div`,{className:`h-3 w-2/3 animate-pulse rounded bg-muted/70`})]})]},e))})}function hT({deckId:e}){let t=lt(),[n,r]=(0,S.useState)(null),[i,a]=(0,S.useState)(!0),[o,s]=(0,S.useState)(null),[c,l]=(0,S.useState)({}),[u,d]=(0,S.useState)(!1),[f,p]=(0,S.useState)(0);(0,S.useEffect)(()=>{let n=!1;return r(null),l({}),s(null),d(!1),a(!0),Wp(e).then(e=>{n||(r(e),l(Object.fromEntries(e.interactions.map(e=>[e.id,{id:e.id}]))),a(!1))}).catch(e=>{if(!n){if(Ip(e)){tm(e instanceof Bf?e.message:`That request was already handled.`),t(`/inbox`,{replace:!0});return}s(e instanceof Error?e:Error(`Failed to load deck.`)),a(!1)}}),()=>{n=!0}},[e,t,f]);let m=(e,t)=>l(n=>({...n,[e]:{...n[e],id:e,...t}}));if(i)return(0,z.jsx)(OT,{});if(o)return(0,z.jsx)(gT,{error:o,onRetry:()=>p(e=>e+1),onBack:()=>t(`/inbox`)});if(!n)return(0,z.jsx)(OT,{});let h=async e=>{if(u)return;d(!0);let r=Object.values(e??c).map(({selectedOptionId:e,...t})=>t);try{await Gp(n.job_id,{responses:r}),tm(`Done — thanks!`,`success`),t(`/inbox`,{replace:!0})}catch(e){if(Ip(e)){tm(e instanceof Bf?e.message:`That request was already handled.`),t(`/inbox`,{replace:!0});return}tm(e instanceof Bf?e.message:`Something went wrong — try again.`),d(!1)}},g=n.interactions.length===1?n.interactions[0]:null,_=Zp(n.kind).icon;return(0,z.jsxs)(`div`,{className:`mx-auto flex h-full min-h-0 max-w-2xl flex-col px-6 py-8`,children:[(0,z.jsxs)(`button`,{type:`button`,onClick:()=>t(`/inbox`),className:`mb-4 inline-flex items-center gap-1.5 text-sm text-muted-foreground hover:text-foreground`,children:[(0,z.jsx)(af,{className:`size-4`}),` Inbox`]}),(0,z.jsxs)(`header`,{className:`mb-5 flex items-start gap-3`,children:[(0,z.jsx)(`span`,{className:`mt-0.5 inline-flex size-10 shrink-0 items-center justify-center rounded-lg`,style:{border:`1px solid var(--line)`,color:`var(--ink2)`,background:`color-mix(in oklch, var(--ink) 4%, transparent)`},children:(0,z.jsx)(_,{className:`size-5`})}),(0,z.jsxs)(`div`,{className:`min-w-0`,children:[(0,z.jsx)(`h1`,{className:`text-2xl`,style:{fontFamily:`var(--font-display)`,fontWeight:460,letterSpacing:`-0.01em`,color:`var(--ink)`},children:n.title}),n.subtitle&&(0,z.jsx)(`p`,{className:`mt-0.5 text-sm`,style:{color:`var(--mut)`},children:n.subtitle}),(0,z.jsx)(fT,{deck:n,className:`mt-2`})]})]}),(0,z.jsx)(`div`,{className:`min-h-0 flex-1 overflow-auto`,children:(0,z.jsx)(`div`,{className:`flex flex-col gap-6`,children:n.interactions.map(e=>(0,z.jsx)(yT,{interaction:e,answer:c[e.id]??{id:e.id},onChange:t=>m(e.id,t),conversationId:n.conversation_id,busy:u,onResolveWith:g?t=>void h({[e.id]:t}):void 0},e.id))})}),!_T(g)&&(0,z.jsxs)(`footer`,{className:`mt-6 flex shrink-0 items-center justify-end gap-2 border-t border-border pt-4`,children:[(0,z.jsx)(Z,{variant:`ghost`,onClick:()=>t(`/inbox`),disabled:u,children:`Cancel`}),(0,z.jsx)(Z,{onClick:()=>void h(),disabled:u||!vT(n,c),children:u?`Sending…`:`Submit`})]})]})}function gT({error:e,onRetry:t,onBack:n}){return(0,z.jsx)(`div`,{className:`mx-auto flex h-full min-h-0 max-w-2xl flex-col justify-center px-6 py-8`,children:(0,z.jsxs)(`section`,{className:`panel p-5`,children:[(0,z.jsx)(`h1`,{className:`text-lg font-semibold`,children:`Couldn’t load the deck`}),(0,z.jsx)(`p`,{className:`mt-2 text-sm text-muted-foreground`,children:e.message}),(0,z.jsxs)(`div`,{className:`mt-4 flex gap-2`,children:[(0,z.jsx)(Z,{onClick:t,children:`Retry`}),(0,z.jsx)(Z,{variant:`ghost`,onClick:n,children:`Back to inbox`})]})]})})}function _T(e){return e!==null&&(e.kind===`notify`||e.kind===`validation`)}function vT(e,t){return e.interactions.every(e=>{let n=t[e.id];if(!n)return!1;if(e.kind===`notify`||e.kind===`error`)return!0;let r=!!n.selectedOptionIds?.length||!!n.freetext?.trim();return e.options.length===0&&!e.allowFreetext?!0:r})}function yT({interaction:e,answer:t,onChange:n,conversationId:r,busy:i,onResolveWith:a}){switch(e.kind){case`notify`:return(0,z.jsx)(CT,{interaction:e,onGotIt:()=>a?.({id:e.id}),direct:!!a});case`validation`:return(0,z.jsx)(wT,{interaction:e,answer:t,onChange:n,busy:i,onResolveWith:a});case`context`:return(0,z.jsx)(ET,{interaction:e,answer:t,onChange:n});case`error`:return(0,z.jsx)(DT,{interaction:e,answer:t,onChange:n,conversationId:r});default:return(0,z.jsx)(TT,{interaction:e,answer:t,onChange:n})}}function bT({body:e}){return e?(0,z.jsx)(`div`,{className:`prose prose-sm max-w-none text-sm text-foreground/85 dark:prose-invert`,dangerouslySetInnerHTML:{__html:DC(NC(e))}}):null}function xT({children:e,className:t}){return(0,z.jsx)(`section`,{className:Y(`panel p-5`,t),children:e})}function ST({it:e}){return(0,z.jsxs)(`div`,{className:`mb-3`,children:[(0,z.jsx)(`h2`,{className:`text-base font-semibold`,children:e.title}),e.subtitle&&(0,z.jsx)(`p`,{className:`mt-0.5 text-sm text-muted-foreground`,children:e.subtitle})]})}function CT({interaction:e,onGotIt:t,direct:n}){return(0,z.jsxs)(xT,{children:[(0,z.jsx)(ST,{it:e}),(0,z.jsx)(bT,{body:e.body}),n&&(0,z.jsx)(`div`,{className:`mt-4 flex justify-end`,children:(0,z.jsxs)(Z,{onClick:t,children:[(0,z.jsx)(cf,{className:`mr-1.5 size-4`}),` Got it`]})})]})}function wT({interaction:e,answer:t,onChange:n,busy:r,onResolveWith:i}){let a=e.options.find(e=>e.id===`yes`)??e.options[0],o=e.options.find(e=>e.id===`no`)??e.options[1],s=r=>{let a={...t,id:e.id,selectedOptionIds:[r]};i?i(a):n({selectedOptionIds:[r],selectedOptionId:void 0})};return(0,z.jsxs)(xT,{children:[(0,z.jsx)(ST,{it:e}),(0,z.jsx)(bT,{body:e.body}),(0,z.jsxs)(`div`,{className:`mt-4 flex flex-col gap-3`,children:[(0,z.jsx)(Np,{rows:2,value:t.freetext??``,onChange:e=>n({freetext:e.currentTarget.value}),placeholder:e.freetextLabel??`Add a comment (optional)`,className:`resize-none text-sm`}),(0,z.jsxs)(`div`,{className:`flex gap-3`,children:[(0,z.jsx)(Z,{className:`flex-1`,size:`lg`,disabled:r,onClick:()=>a&&s(a.id),children:a?.label??`Approve`}),(0,z.jsx)(Z,{className:`flex-1`,size:`lg`,variant:`outline`,disabled:r,onClick:()=>o&&s(o.id),children:o?.label??`Reject`})]}),!i&&t.selectedOptionIds?.[0]&&(0,z.jsxs)(`p`,{className:`text-xs text-muted-foreground`,children:[`Selected: `,e.options.find(e=>e.id===t.selectedOptionIds?.[0])?.label]})]})]})}function TT({interaction:e,answer:t,onChange:n}){let r=new Set(t.selectedOptionIds??[]),i=t=>{if(e.multiSelect){let e=new Set(r);e.has(t)?e.delete(t):e.add(t),n({selectedOptionIds:[...e],selectedOptionId:void 0})}else n({selectedOptionIds:[t],selectedOptionId:void 0})};return(0,z.jsxs)(xT,{children:[(0,z.jsx)(ST,{it:e}),(0,z.jsx)(bT,{body:e.body}),(0,z.jsx)(`ul`,{className:`mt-4 flex flex-col gap-2`,children:e.options.map(t=>{let n=r.has(t.id);return(0,z.jsx)(`li`,{children:(0,z.jsxs)(`button`,{type:`button`,onClick:()=>i(t.id),className:Y(`flex w-full items-start gap-3 rounded-xl border px-4 py-3 text-left transition-colors`,n?`border-primary bg-primary/5 ring-1 ring-primary`:`border-border hover:border-primary/40 hover:bg-accent/40`),children:[(0,z.jsx)(`span`,{className:Y(`mt-0.5 flex size-4 shrink-0 items-center justify-center border`,e.multiSelect?`rounded`:`rounded-full`,n?`border-primary bg-primary text-primary-foreground`:`border-muted-foreground/40`),children:n&&(0,z.jsx)(cf,{className:`size-3`})}),(0,z.jsxs)(`span`,{className:`min-w-0`,children:[(0,z.jsx)(`span`,{className:`block text-sm font-medium`,children:t.label}),t.description&&(0,z.jsx)(`span`,{className:`mt-0.5 block text-xs text-muted-foreground`,children:t.description})]})]})},t.id)})}),e.allowFreetext&&(0,z.jsx)(Np,{rows:2,value:t.freetext??``,onChange:e=>n({freetext:e.currentTarget.value}),placeholder:e.freetextLabel??`Anything else? (optional)`,className:`mt-3 resize-none text-sm`})]})}function ET({interaction:e,answer:t,onChange:n}){let r=t.selectedOptionIds?.[0];return(0,z.jsxs)(xT,{children:[(0,z.jsx)(ST,{it:e}),e.body&&(0,z.jsxs)(`div`,{className:`mb-4 rounded-xl border border-border p-3`,style:{background:`color-mix(in oklch, var(--ink) 3%, transparent)`},children:[(0,z.jsx)(`p`,{className:`instlabel mb-1.5`,children:`Why we're asking`}),(0,z.jsx)(bT,{body:e.body})]}),e.options.length>0&&(0,z.jsx)(`ul`,{className:`mb-3 flex flex-col gap-2`,children:e.options.map(e=>(0,z.jsx)(`li`,{children:(0,z.jsx)(`button`,{type:`button`,onClick:()=>n({selectedOptionIds:[e.id],selectedOptionId:void 0}),className:Y(`flex w-full items-start gap-3 rounded-xl border px-4 py-3 text-left transition-colors`,r===e.id?`border-primary bg-primary/5 ring-1 ring-primary`:`border-border hover:border-primary/40 hover:bg-accent/40`),children:(0,z.jsxs)(`span`,{className:`min-w-0`,children:[(0,z.jsx)(`span`,{className:`block text-sm font-medium`,children:e.label}),e.description&&(0,z.jsx)(`span`,{className:`mt-0.5 block text-xs text-muted-foreground`,children:e.description})]})})},e.id))}),(e.allowFreetext||e.options.length===0)&&(0,z.jsx)(Np,{autoFocus:!0,rows:3,value:t.freetext??``,onChange:e=>n({freetext:e.currentTarget.value}),placeholder:e.freetextLabel??`Your answer`,className:`resize-none text-sm`})]})}function DT({interaction:e,answer:t,onChange:n,conversationId:r}){let i=lt();return(0,z.jsxs)(xT,{className:`border-destructive/30`,children:[(0,z.jsx)(ST,{it:e}),(0,z.jsx)(bT,{body:e.body}),(0,z.jsxs)(`div`,{className:`mt-4 flex flex-col gap-2`,children:[e.options.map(e=>(0,z.jsx)(`button`,{type:`button`,onClick:()=>n({selectedOptionIds:[e.id],selectedOptionId:void 0}),className:Y(`flex w-full items-start gap-3 rounded-xl border px-4 py-3 text-left transition-colors`,t.selectedOptionIds?.[0]===e.id?`border-primary bg-primary/5 ring-1 ring-primary`:`border-border hover:border-primary/40 hover:bg-accent/40`),children:(0,z.jsxs)(`span`,{className:`min-w-0`,children:[(0,z.jsx)(`span`,{className:`block text-sm font-medium`,children:e.label}),e.description&&(0,z.jsx)(`span`,{className:`mt-0.5 block text-xs text-muted-foreground`,children:e.description})]})},e.id)),(0,z.jsx)(`button`,{type:`button`,onClick:()=>i(`/c/${encodeURIComponent(r)}`),className:`flex w-full items-center gap-2 rounded-xl border border-border px-4 py-3 text-left text-sm font-medium transition-colors hover:border-primary/40 hover:bg-accent/40`,children:`Take over — open the conversation`})]})]})}function OT(){return(0,z.jsxs)(`div`,{className:`mx-auto flex h-full max-w-2xl flex-col gap-5 px-6 py-8`,children:[(0,z.jsx)(`div`,{className:`h-4 w-16 animate-pulse rounded bg-muted`}),(0,z.jsx)(`div`,{className:`h-7 w-1/2 animate-pulse rounded bg-muted`}),(0,z.jsx)(`div`,{className:`h-40 w-full animate-pulse rounded-2xl bg-muted/60`})]})}var kT=[`operator`,`studio`];function AT(){let e=Ih(),t=Lh();return(0,z.jsx)(`div`,{role:`group`,"aria-label":`Switch profile`,className:`inline-flex items-center rounded-md border border-border bg-card/50 p-0.5 text-xs`,children:kT.map(n=>{let r=e.id===n;return(0,z.jsx)(`button`,{type:`button`,"aria-pressed":r,onClick:()=>t(n),className:Y(`inline-flex h-8 items-center rounded px-3 font-medium transition-colors`,r?`bg-primary text-primary-foreground`:`text-muted-foreground hover:text-foreground`),children:Dh[n].label},n)})})}function jT(){let e=Ih(),[t,n]=(0,S.useState)(()=>e.defaultTheme===`dark`);return(0,z.jsxs)(`div`,{className:`mx-auto flex h-full min-h-0 max-w-2xl flex-col gap-8 overflow-auto px-6 py-8`,children:[(0,z.jsx)(`h1`,{className:`text-3xl`,style:{fontFamily:`var(--font-display)`,fontWeight:460,letterSpacing:`-0.01em`,color:`var(--ink)`},children:`Settings`}),(0,z.jsxs)(`section`,{className:`space-y-2.5`,children:[(0,z.jsx)(`h2`,{className:`instlabel`,children:`Profile`}),(0,z.jsx)(`p`,{className:`text-sm`,style:{color:`var(--mut)`},children:`Choose the experience. You can also switch from the header at any time.`}),(0,z.jsx)(AT,{})]}),(0,z.jsxs)(`section`,{className:`space-y-2.5`,children:[(0,z.jsx)(`h2`,{className:`instlabel`,children:`Appearance`}),(0,z.jsxs)(`p`,{className:`text-sm`,style:{color:`var(--mut)`},children:[t?`Dark theme`:`Light theme`,` is active.`]}),(0,z.jsxs)(Z,{variant:`outline`,onClick:()=>{let e=document.documentElement,t=!e.classList.contains(`dark`);e.classList.toggle(`dark`,t),e.classList.toggle(`light`,!t),n(t)},children:[`Switch to `,t?`light`:`dark`]})]})]})}function MT(e){return e.busy?`working`:e.banner?.level===`error`?`blocked`:e.banner?.level===`action`?`attention`:e.loaded?`ready`:`idle`}function NT(){return{status:null,banner:null,subtitle:null,mode:null,busy:!1,loaded:!1,lastRefresh:0}}var PT={working:`working`,blocked:`blocked`,attention:`attention`,ready:`ready`,idle:`idle`},FT={working:`bg-blue-500`,blocked:`bg-red-500`,attention:`bg-amber-500`,ready:`bg-green-500`,idle:`bg-slate-400`},IT={info:`bg-slate-100 text-slate-800 border-slate-300`,action:`bg-amber-100 text-amber-900 border-amber-300`,error:`bg-red-100 text-red-900 border-red-300`};function LT({chrome:e,title:t,children:n}){let r=e.mode?`attention`:MT(e);return(0,z.jsxs)(`div`,{className:`min-h-screen bg-white text-slate-900`,children:[(0,z.jsxs)(`header`,{className:`flex items-center gap-3 border-b border-slate-200 px-4 py-2`,children:[(0,z.jsx)(`h1`,{className:`font-mono text-sm font-semibold`,children:t}),e.subtitle?(0,z.jsxs)(`span`,{className:`font-mono text-xs text-slate-400`,children:[`· `,e.subtitle]}):null,e.mode?(0,z.jsx)(`span`,{className:`rounded-full bg-slate-800 px-2 py-0.5 text-xs text-white`,children:e.mode}):null,(0,z.jsxs)(`span`,{className:`ml-auto flex items-center gap-2 text-xs text-slate-500`,children:[e.busy?(0,z.jsx)(`span`,{className:`inline-block h-3 w-3 animate-spin rounded-full border-2 border-slate-300 border-t-slate-600`}):null,(0,z.jsx)(`span`,{className:`inline-block h-2 w-2 rounded-full ${FT[r]}`}),(0,z.jsx)(`span`,{children:PT[r]})]})]}),e.banner?(0,z.jsx)(`div`,{className:`border-b px-4 py-1.5 font-mono text-xs ${IT[e.banner.level]}`,children:e.banner.msg}):null,(0,z.jsx)(`main`,{className:`px-4 py-3`,children:n}),e.status?(0,z.jsx)(`footer`,{className:`border-t border-slate-200 px-4 py-1.5 font-mono text-xs text-slate-500`,children:e.status}):null]})}function RT(e){return typeof e==`object`&&!!e}function zT(e){return typeof e==`string`?e:``}function BT(e){let t=e??``;return/rate.?limit|\b429\b|too many requests|quota/i.test(t)?`rate-limit`:/overloaded|\b529\b|\b503\b|capacity|server.{0,3}busy|temporarily unavailable/i.test(t)?`overloaded`:/connection|econnreset|etimedout|enotfound|econnrefused|network|fetch failed|socket hang|timed? out|timeout/i.test(t)?`connection`:`other`}function VT(e){let t=zT(e.code)||zT(e.errno);return t===``?null:/^(ECONNREFUSED|ECONNRESET|ETIMEDOUT|ENOENT|ENOTFOUND|EAI_AGAIN|EPIPE|EHOSTUNREACH|ENETUNREACH)$/i.test(t)?`connection`:null}function HT(e){let t=typeof e.status==`number`?e.status:null;return t===null?null:t===401||t===403?`auth`:t===429?`rate-limit`:t===503||t===529||t>=500&&t<=599?`overloaded`:t>=400&&t<=499?`protocol`:null}function UT(e){let t=typeof e.code==`number`?e.code:null;if(t===null)return null;if(t===1008)return`protocol`;if(t===1006)return`connection`;if(t===1011){let t=zT(e.reason);return/no running broker/i.test(t)||BT(t)===`connection`?`connection`:`other`}return null}function WT(e,t){return t===`auth`||t===`protocol`?`fatal`:e===`pi→provider`?t===`connection`||t===`rate-limit`||t===`overloaded`?`auto`:`fatal`:`manual`}function GT(e){if(typeof e==`string`)return e;if(!RT(e))return``;let t=[e.message,e.errorMessage,e.reason,e.body,e.statusText];for(let e of t)if(typeof e==`string`&&e!==``)return e;let n=e.error;if(RT(n)){let e=n.message;if(typeof e==`string`&&e!==``)return e;let t=n.reason;if(typeof t==`string`&&t!==``)return t}return``}function KT(e,t){if(RT(t)){let n=VT(t);if(n!==null)return{kind:n,disposition:WT(e,n)};let r=HT(t);if(r!==null)return{kind:r,disposition:WT(e,r)};let i=UT(t);if(i!==null)return{kind:i,disposition:WT(e,i)}}let n=BT(GT(t));return{kind:n,disposition:WT(e,n)}}function qT(e){let t=new URL(`/node/${encodeURIComponent(e)}`,window.location.href);t.protocol=location.protocol===`https:`?`wss:`:`ws:`;let n=new URLSearchParams(window.location.search).get(`token`);return n!==null&&n!==``&&t.searchParams.set(`token`,n),t}function JT(e){let t=KT(`browser↔relay`,{code:e.code,reason:e.reason});return e.code===1008||t.kind===`protocol`?`invalid`:e.code===1011&&/^no node /.test(e.reason)?`no-node`:e.code===1011&&/^no running broker/.test(e.reason)?`no-broker`:`transient`}function YT(e){return{kind:`browser-stream-no-broker`,display:{headline:`node ${e} is asleep or has no running broker`,explanation:`This browser stream connects only to an already-running local broker.`,nextStep:`Run crtr node focus ${e} or crtr canvas revive ${e}, then reconnect.`,level:`error`,blocking:!1}}}function XT(e){return{kind:`browser-stream-no-node`,display:{headline:`node ${e} does not exist`,explanation:`The browser relay could not find a live node with that id.`,nextStep:`Choose a valid node id, then reconnect.`,level:`error`,blocking:!1}}}function ZT(e){return{kind:`browser-stream-invalid`,display:{headline:`node ${e} was rejected by the relay`,explanation:`The browser relay closed the stream because the request was not valid.`,nextStep:`Fix the node id or connection parameters, then reconnect.`,level:`error`,blocking:!1}}}function QT(e,t){let n=globalThis.crypto.randomUUID(),r=null,i=!1,a=!1,o=null,s=200,c=()=>{o!==null&&(window.clearTimeout(o),o=null)},l=(e,n)=>{if(!a){if(a=!0,c(),r=null,n!==void 0)try{t.onError(n)}catch{}try{t.onClose(e)}catch{}}},u=()=>{i||a||(c(),o=window.setTimeout(()=>{o=null,!i&&!a&&d()},s),s=Math.min(s*2,1e3))},d=()=>{if(i||a)return;let o=qT(e.target),c;try{c=new WebSocket(o)}catch{u();return}r=c,c.onopen=()=>{if(!(i||a)){s=200;try{c.send(JSON.stringify({type:`hello`,role:e.role??`controller`,client_id:n}))}catch{}}},c.onmessage=e=>{if(typeof e.data!=`string`)return;let n;try{n=JSON.parse(e.data)}catch{return}try{t.onFrame(n)}catch{}},c.onclose=t=>{r===c&&(r=null);let n=t.reason||`closed (${t.code})`;if(i){l(n);return}let a=JT(t);if(a===`transient`){u();return}if(a===`no-broker`){l(n,YT(e.target));return}if(a===`no-node`){l(n,XT(e.target));return}l(n,ZT(e.target))},c.onerror=()=>{}},f={id:n,send(e){let t=r;if(!(t===null||t.readyState!==WebSocket.OPEN))try{t.send(JSON.stringify(e))}catch{}},close(){i=!0,c();let e=r;if(e===null){l(`closed by view`);return}if(e.readyState===WebSocket.CLOSED){l(`closed by view`);return}try{e.close()}catch{l(`closed by view`)}}};return d(),f}function $T(e=`/__crtr/source`){return{async send(t){try{let n=await fetch(e,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify(t)});return n.ok?await n.json():{ok:!1,stdout:``,stderr:`bridge ${n.status} ${n.statusText}`}}catch(e){return{ok:!1,stdout:``,stderr:e instanceof Error?e.message:String(e)}}},open(e,t){return QT(e,t)}}}function eE(e,t={}){let n=$T(t.endpoint),r=Object.freeze({...t.options??{}}),i=e.init(r),a=NT(),o=t.onIntent,s=0,c=new Set,l=()=>{s+=1;for(let e of c)e()},u=e=>(c.add(e),()=>{c.delete(e)}),d=e=>{a={...a,...e},l()},f={setStatus:e=>d({status:e}),setBanner:(e,t)=>d({banner:{msg:e,level:t}}),clearBanner:()=>d({banner:null}),setSubtitle:e=>d({subtitle:e}),setMode:e=>d({mode:e}),quit:()=>{}},p=new Set,m=0,h=!1,g=null,_=0,v=!1,y=[],b=()=>({get state(){return i},set(e){i=typeof e==`function`?e(i):e,l()},async resolve(e,t){let r=await n.send(e.request(t));return e.parse(r)},async execute(e,t){let r=await n.send(e.request(t));return e.parse(r)},connect(e,t){let r=m,i;return i=n.open(e.request(t),{onFrame(t){r===m&&C(e.onFrame,t)},onClose(t){r===m&&(p.delete(i),e.onClose&&C(e.onClose,{reason:t,channelId:i.id}))},onError(e){r===m&&d({banner:{msg:e.display.headline,level:e.display.level}})}}),p.add(i),e.onOpen&&C(e.onOpen,i),i},signal:f,dispatch(e,t){return T(e,t)}});function x(){v||(v=!0,S())}async function S(){try{for(;h&&y.length>0;){if(_>0)return;let e=y.shift();try{await T(e.intent,e.payload),e.resolve()}catch(t){e.reject(t)}}}finally{v=!1,h&&y.length>0&&_===0&&x()}}function C(e,t){return h?new Promise((n,r)=>{y.push({intent:e,payload:t,resolve:n,reject:r}),x()}):Promise.resolve()}function w(e){if(e===`refresh`){a={...a,busy:_>0,loaded:!0,lastRefresh:Date.now()},l();return}a={...a,busy:_>0},l()}async function T(t,n){if(!h)return;o?.(t,n,i);let r=e.intents[t];if(!r){console.warn(`[crtr view] unknown intent: ${t}`);return}let s;try{s=r(b(),n)}catch(e){throw console.warn(`[crtr view] intent ${t} threw:`,e),e}if(s instanceof Promise){let e=_>0;_+=1,e||d({busy:!0});try{await s}finally{--_,a={...a,busy:_>0,loaded:a.loaded||t===`refresh`,lastRefresh:Date.now()},l(),_===0&&h&&y.length>0&&x()}return}w(t)}let E=()=>{_===0&&C(`refresh`)};function D(){if(h)return;h=!0,m+=1,i=e.init(r),a=NT(),y=[],v=!1,C(`refresh`);let t=e.manifest.refreshMs;typeof t==`number`&&t>0&&(g=setInterval(E,t))}function O(){if(!h)return;h=!1,m+=1;let e=Array.from(p);for(let t of e)try{t.close()}catch{}if(p.clear(),g&&=(clearInterval(g),null),y.length>0){let e=Error(`view stopped`);for(let t of y)t.reject(e);y=[]}v=!1}return{getState:()=>i,getChrome:()=>a,dispatch:C,refresh:E,subscribe:u,getVersion:()=>s,start:D,stop:O,get onIntent(){return o},set onIntent(e){o=e}}}function tE(e,t={}){let n=(0,S.useRef)(null);n.current===null&&(n.current=eE(e,{options:t.options,endpoint:t.endpoint}));let r=n.current;return r.onIntent=t.onIntent,(0,S.useSyncExternalStore)(r.subscribe,r.getVersion,r.getVersion),(0,S.useEffect)(()=>(r.start(),()=>r.stop()),[r]),{state:r.getState(),chrome:r.getChrome(),dispatch:r.dispatch,refresh:r.refresh}}function nE({children:e}){return(0,z.jsx)(`div`,{className:`flex min-h-[40vh] flex-col items-center justify-center gap-2 p-8 text-center font-mono text-sm text-slate-600`,children:e})}function rE({label:e=`Loading…`}){return(0,z.jsxs)(nE,{children:[(0,z.jsx)(`span`,{className:`inline-block h-3 w-3 animate-spin rounded-full border-2 border-slate-300 border-t-slate-600`}),(0,z.jsx)(`span`,{children:e})]})}function iE({label:e=`Nothing here yet.`}){return(0,z.jsx)(nE,{children:(0,z.jsx)(`span`,{className:`text-slate-400`,children:e})})}function aE({headline:e,explanation:t,nextStep:n,onRetry:r}){return(0,z.jsxs)(nE,{children:[(0,z.jsx)(`div`,{className:`font-semibold text-red-700`,children:e}),t?(0,z.jsx)(`div`,{className:`text-slate-600`,children:t}):null,n?(0,z.jsx)(`div`,{className:`text-slate-500`,children:n}):null,r?(0,z.jsx)(sE,{onRetry:r}):null]})}function oE({headline:e=`Not ready`,explanation:t,nextStep:n,onRetry:r}){return(0,z.jsxs)(nE,{children:[(0,z.jsx)(`div`,{className:`font-semibold text-amber-700`,children:e}),t?(0,z.jsx)(`div`,{className:`text-slate-600`,children:t}):null,n?(0,z.jsx)(`div`,{className:`text-slate-500`,children:n}):null,r?(0,z.jsx)(sE,{onRetry:r}):null]})}function sE({onRetry:e}){return(0,z.jsx)(`button`,{type:`button`,onClick:e,className:`mt-2 rounded border border-slate-300 px-3 py-1 text-slate-700 hover:bg-slate-100`,children:`Retry`})}function cE(e){return{ok:!0,data:e}}function lE(e){return{ok:!1,error:e}}function uE(e){return e==null?``:String(e)}function dE(e){let t=e||{};return{nodeId:uE(t.node_id),name:uE(t.name)||`(unnamed)`,kind:uE(t.kind)||`?`,mode:uE(t.mode)||`?`,lifecycle:uE(t.lifecycle)||`?`,status:uE(t.status)||`?`,parent:t.parent?uE(t.parent):null,created:uE(t.created),hanging:t.hanging&&typeof t.hanging==`object`?t.hanging:null}}function fE(e){let t=e||{};return{nodeId:uE(t.node_id),name:uE(t.name),cwd:uE(t.cwd),count:typeof t.count==`number`?t.count:0}}var pE=new Set([`active`,`idle`]),mE={active:`●`,idle:`○`,done:`✓`,dead:`✗`,canceled:`⊘`};function hE(e){return e===`rate-limit`?`rate-limited`:e===`overloaded`?`overloaded`:e===`connection`?`down`:e===`auth`?`auth`:e===`protocol`?`protocol`:e===`wedged`?`wedged`:`other`}function gE(e,t){let n=Date.parse(e);if(Number.isNaN(n))return`now`;let r=n-t;return r<=0?`now`:r>=6e4?`${Math.max(1,Math.round(r/6e4))}m`:`${Math.max(1,Math.ceil(r/1e3))}s`}function _E(e,t){if(e.retry.disposition===`auto`){if(e.retry.by===`client`)return`redialing`;let n=typeof e.retry.attempt==`number`&&typeof e.retry.max==`number`?`auto-retry ${e.retry.attempt}/${e.retry.max}`:`auto-retrying`;return e.retry.nextAt?`${n}, next ${gE(e.retry.nextAt,t)}`:n}return`needs you`}function vE(e,t){return`${e.link} ${hE(e.kind)} · ${_E(e,t)}`}function yE(e){let t=String(e||``),n=t.indexOf(`-`);return n>0?t.slice(0,n):t.slice(0,8)}var bE=[`Jan`,`Feb`,`Mar`,`Apr`,`May`,`Jun`,`Jul`,`Aug`,`Sep`,`Oct`,`Nov`,`Dec`];function xE(e,t){let n=Date.parse(e);if(Number.isNaN(n))return``;let r=Math.max(0,Math.floor((t-n)/1e3));if(r<60)return`now`;let i=Math.floor(r/60);if(i<60)return`${i}m`;let a=Math.floor(i/60);if(a<24)return`${a}h`;let o=Math.floor(a/24);if(o<7)return`${o}d`;let s=new Date(n),c=bE[s.getMonth()]||`?`;return s.getFullYear()===new Date(t).getFullYear()?`${c} ${s.getDate()}`:`${c} ʼ${String(s.getFullYear()).slice(-2)}`}function SE(e,t){return`${e} ${t}${e===1?``:`s`}`}var CE={kind:`crtr-missing`,display:{headline:`Canvas unavailable`,explanation:`crtr could not be found to read the canvas graph.`,nextStep:`Install crtr (or set CRTR_BIN on PATH), then press g.`,level:`error`,blocking:!0}};function wE(e){let t=String(e||``);return/help-gate:\s*blocked/i.test(t)?{kind:`help-gate`,display:{headline:`Canvas unavailable`,explanation:`crtr help-gate blocked the call (run the command with -h once).`,nextStep:`Press g to retry.`,level:`error`,blocking:!0}}:{kind:`crtr-failed`,display:{headline:`Canvas unavailable`,explanation:`crtr could not read the canvas graph: `+(EE(t)||`unknown error`),nextStep:`Press g to retry.`,level:`error`,blocking:!0}}}function TE(e){return{kind:`parse`,display:{headline:`Canvas unavailable`,explanation:`Could not parse \`crtr ${e}\` output as JSON.`,nextStep:`Press g to retry.`,level:`error`,blocking:!0}}}function EE(e){let t=String(e||``).split(/\r?\n/).map(e=>e.trim()).filter(Boolean);for(let e=t.length-1;e>=0;e--)if(/^ERROR:/i.test(t[e]))return t[e].replace(/^ERROR:\s*/i,``).trim();return t.length?t[t.length-1]:``}var DE={id:`nodes`,request:()=>({kind:`exec`,bin:`crtr`,args:[`node`,`inspect`,`list`,`--json`]}),parse:e=>{if(!e.ok)return lE(CE);if(e.exitCode!==0)return lE(wE(e.stderr||e.stdout));let t=String(e.stdout||``).trim(),n;try{n=t===``?{}:JSON.parse(t)}catch{return lE(TE(`node inspect list`))}return cE((n&&Array.isArray(n.nodes)?n.nodes:[]).map(dE))}},OE={id:`attention`,request:()=>({kind:`exec`,bin:`crtr`,args:[`canvas`,`attention`,`list`,`--json`]}),parse:e=>{if(!e.ok||e.exitCode!==0)return cE({items:[],total:0});let t=String(e.stdout||``).trim(),n;try{n=t===``?{}:JSON.parse(t)}catch{return cE({items:[],total:0})}let r=n&&Array.isArray(n.items)?n.items:[],i=n&&typeof n.total==`number`?n.total:0;return cE({items:r.map(fE),total:i})}};function kE(e,t){let n=new Map;for(let t of e)n.set(t.nodeId,t);let r=new Map,i=[];for(let t of e){let e=t.parent&&n.has(t.parent)?t.parent:null;if(e){let n=r.get(e);n?n.push(t):r.set(e,[t])}else i.push(t)}let a=(e,t)=>e.created<t.created?-1:+(e.created>t.created);for(let e of r.values())e.sort(a);i.sort(a);let o=new Map;function s(e,i){let a=o.get(e);if(a!==void 0)return a;if(i.has(e))return!1;i.add(e);let c=n.get(e),l=!!c&&(pE.has(c.status)||t.has(e));if(!l){for(let t of r.get(e)||[])if(s(t.nodeId,i)){l=!0;break}}return i.delete(e),o.set(e,l),l}function c(e,n){let r=t.get(e.nodeId)||0;return{nodeId:e.nodeId,prefix:n,glyph:e.hanging?`⚠`:mE[e.status]||`?`,status:e.status,name:e.name,kind:e.kind,mode:e.mode,lifecycle:e.lifecycle,shortId:yE(e.nodeId),created:e.created,blocked:r>0,askCount:r,hanging:e.hanging||null}}let l=[],u=new Set;function d(e,t,n,i){if(u.has(e.nodeId))return;u.add(e.nodeId);let a=i?``:t+(n?`└─ `:`├─ `);l.push(c(e,a));let o=r.get(e.nodeId)||[],s=i?``:t+(n?` `:`│ `);for(let e=0;e<o.length;e++)d(o[e],s,e===o.length-1,!1)}let f=0;for(let e of i)s(e.nodeId,new Set)&&(f++,d(e,``,!0,!0));return{rows:l,shownRoots:f}}function AE(e){return e.totalNodes===0?null:`${e.activeCount} active · ${SE(e.totalNodes,`node`)}`}function jE(e){return e.rows.length===0?null:`${SE(e.shownRoots,`live tree`)} · ${e.rows.length} shown`}var ME={manifest:{id:`canvas`,title:`Canvas`,description:`Live agent graph — who is working, who is blocked`,refreshMs:3e3},init(){return{rows:[],cursor:0,scroll:0,shownRoots:0,totalNodes:0,activeCount:0,attnTotal:0,lastFetch:0,sourceError:null}},sources:{nodesSource:DE,attentionSource:OE},intents:{async refresh(e){e.signal.setStatus(`Loading the canvas…`);let t=await e.resolve(DE);if(!t.ok){e.set(e=>({...e,sourceError:t.error})),e.signal.setStatus(null),e.signal.setBanner(t.error.display.explanation,t.error.display.level);return}let n=t.data,r=new Map,i=0,a=await e.resolve(OE);if(a.ok){for(let e of a.data.items)e.nodeId&&r.set(e.nodeId,e.count);i=a.data.total}let o=kE(n,r);e.set(e=>{let t={...e,sourceError:null,rows:o.rows,shownRoots:o.shownRoots,totalNodes:n.length,activeCount:n.filter(e=>e.status===`active`).length,attnTotal:i,lastFetch:Date.now()};return t.cursor>=t.rows.length&&(t.cursor=Math.max(0,t.rows.length-1)),t}),e.signal.setSubtitle(AE(e.state)),i>0?e.signal.setBanner(`${SE(i,`ask`)} waiting on a human — see the ⚑ rows`,`action`):e.signal.clearBanner(),e.signal.setStatus(jE(e.state))},cursorDown:e=>e.set(e=>({...e,cursor:e.rows.length?Math.min(e.rows.length-1,e.cursor+1):0})),cursorUp:e=>e.set(e=>({...e,cursor:Math.max(0,e.cursor-1)})),activate:(e,t)=>{let n=t&&t.nodeId;n&&e.set(e=>{let t=e.rows.findIndex(e=>e.nodeId===n);return t>=0?{...e,cursor:t}:e})},quit:e=>e.signal.quit()}},NE={active:`text-green-600`,idle:`text-amber-600`,done:`text-cyan-700`,dead:`text-red-600`,canceled:`text-slate-400`};function PE(e){return e===`active`?`font-bold`:e===`done`||e===`dead`||e===`canceled`?`text-slate-400`:``}function FE({row:e,selected:t,onClick:n}){let r=Date.now(),i=xE(e.created,r);return(0,z.jsxs)(`li`,{className:`flex items-baseline gap-1.5 rounded px-2 py-0.5 ${t?`bg-slate-200`:``}`,onClick:n,children:[e.prefix?(0,z.jsx)(`span`,{className:`whitespace-pre text-slate-400`,children:e.prefix}):null,(0,z.jsx)(`span`,{className:e.hanging?`font-bold text-amber-500`:NE[e.status]||`text-slate-400`,children:e.glyph}),(0,z.jsx)(`span`,{className:PE(e.status),children:e.name}),(0,z.jsxs)(`span`,{className:`text-slate-400`,children:[`[`,e.kind,`/`,e.mode,`]`]}),e.blocked?(0,z.jsxs)(`span`,{className:`font-bold text-yellow-500`,children:[`⚑`,e.askCount]}):null,e.hanging?(0,z.jsx)(`span`,{className:`text-amber-500`,children:vE(e.hanging,r)}):null,i?(0,z.jsx)(`span`,{className:`ml-auto shrink-0 text-slate-400`,children:i}):null]})}function IE({state:e,dispatch:t}){if(e.rows.length===0){if(e.sourceError){let n=e.sourceError.display;return(0,z.jsx)(n.level===`error`?aE:oE,{headline:n.headline,explanation:n.explanation,nextStep:n.nextStep,onRetry:()=>t(`refresh`)})}return e.lastFetch===0?(0,z.jsx)(rE,{label:`Loading the canvas…`}):e.totalNodes===0?(0,z.jsx)(iE,{label:"No nodes on the canvas — spawn one with `crtr node new`."}):(0,z.jsx)(iE,{label:`All caught up — ${e.totalNodes} node${e.totalNodes===1?``:`s`} finished, none active.`})}return(0,z.jsx)(`div`,{className:`font-mono text-sm outline-none`,tabIndex:0,onKeyDown:e=>{e.key===`j`||e.key===`ArrowDown`?(t(`cursorDown`),e.preventDefault()):e.key===`k`||e.key===`ArrowUp`?(t(`cursorUp`),e.preventDefault()):e.key===`g`&&t(`refresh`)},children:(0,z.jsx)(`ul`,{children:e.rows.map((n,r)=>(0,z.jsx)(FE,{row:n,selected:r===e.cursor,onClick:()=>t(`activate`,{nodeId:n.nodeId})},n.nodeId||r))})})}function LE(){let e=globalThis.crypto;return e&&typeof e.randomUUID==`function`?e.randomUUID():`n-${Date.now()}-${Math.random().toString(36).slice(2,10)}`}function RE(e){return typeof e==`object`&&!!e}function zE(e){return typeof e==`string`?e:``}function BE(e){return typeof e==`string`&&e!==``?e:null}function VE(e){return RE(e)&&typeof e.role==`string`?e.role:null}function HE(e){return typeof e==`string`?e:Array.isArray(e)?e.filter(e=>RE(e)&&e.type===`text`).map(e=>zE(e.text)).join(``):``}function UE(e){return RE(e)?HE(e.content)||zE(e.text):``}function WE(e){for(let t=e.length-1;t>=0;t--){let n=e[t];if(VE(n)!==`assistant`)continue;let r=UE(n).trim();if(r)return r}return null}function GE(){return{messages:[],streamingIndex:null,executingToolIds:[],activity:null,lastAssistantText:null}}function KE(e){let t=Array.isArray(e?.messages)?e.messages.slice():[];return{messages:t,streamingIndex:null,executingToolIds:[],activity:e?.state?.isStreaming===!0?`Working…`:null,lastAssistantText:WE(t)}}function qE(e,t){switch(t?.type){case`agent_start`:return e.activity===`Working…`?e:{...e,activity:`Working…`};case`agent_end`:return{...e,streamingIndex:null,activity:null,executingToolIds:e.executingToolIds.length?[]:e.executingToolIds};case`message_start`:{let n=e.messages.concat(t.message),r=VE(t.message)===`assistant`?n.length-1:e.streamingIndex;return{...e,messages:n,streamingIndex:r,lastAssistantText:WE(n)}}case`message_update`:{let n=e.streamingIndex;if(n===null){let t=e.messages.length-1;t>=0&&VE(e.messages[t])===`assistant`&&(n=t)}if(n===null)return e;let r=e.messages.slice();return r[n]=t.message,{...e,messages:r,streamingIndex:n,lastAssistantText:WE(r)}}case`message_end`:{let n=e.streamingIndex;if(n===null){let t=e.messages.length-1;t>=0&&VE(e.messages[t])===`assistant`&&(n=t)}if(n===null)return e;let r=e.messages.slice();return r[n]=t.message,{...e,messages:r,streamingIndex:null,lastAssistantText:WE(r)}}case`tool_execution_start`:return e.executingToolIds.includes(t.toolCallId)?e:{...e,executingToolIds:e.executingToolIds.concat(t.toolCallId)};case`tool_execution_end`:return e.executingToolIds.includes(t.toolCallId)?{...e,executingToolIds:e.executingToolIds.filter(e=>e!==t.toolCallId)}:e;case`compaction_start`:return e.activity===`Compacting context…`?e:{...e,activity:`Compacting context…`};case`compaction_end`:return{...e,activity:e.activity===`Working…`?`Working…`:null};case`auto_retry_start`:{let n=typeof t.attempt==`number`?t.attempt:0,r=typeof t.maxAttempts==`number`?t.maxAttempts:0,i=typeof t.delayMs==`number`?Math.ceil(t.delayMs/1e3):0;return{...e,activity:`Retrying (${n}/${r}) in ${i}s…`}}case`auto_retry_end`:return{...e,activity:e.activity===`Working…`?`Working…`:null};default:return e}}function JE(e,t,n){let r={role:`bashExecution`,command:t,output:``,exitCode:void 0,cancelled:!1,truncated:!1,excludeFromContext:n,timestamp:Date.now()};return{...e,messages:e.messages.concat(r)}}function YE(e,t){for(let n=e.messages.length-1;n>=0;n--){let r=e.messages[n];if(VE(r)!==`bashExecution`)continue;let i=e.messages.slice(),a=RE(i[n])?i[n]:{};return i[n]={...a,output:`${zE(a.output)}${t}`},{...e,messages:i}}return e}function XE(e,t){for(let n=e.messages.length-1;n>=0;n--){let r=e.messages[n];if(VE(r)!==`bashExecution`)continue;let i=e.messages.slice();return i[n]={...RE(i[n])?i[n]:{},exitCode:t.exitCode,cancelled:t.cancelled,truncated:t.truncated,fullOutputPath:t.fullOutputPath},{...e,messages:i}}return e}function ZE(e){let t=RE(e)?e:{};return{sessionId:BE(t.sessionId),sessionFile:BE(t.sessionFile),model:BE(t.model),isStreaming:t.isStreaming===!0,thinkingLevel:zE(t.thinkingLevel)||`off`,steeringMode:zE(t.steeringMode)||`all`,followUpMode:zE(t.followUpMode)||`all`,sessionName:BE(t.sessionName),autoCompactionEnabled:t.autoCompactionEnabled===!0,pendingMessageCount:typeof t.pendingMessageCount==`number`?t.pendingMessageCount:0}}function QE(e,t){let n=e.session??ZE(null),r=!1,i={...n};for(let[e,n]of Object.entries(t))n!==void 0&&(i[e]=n,r=!0);return r?{...e,session:i}:e}function $E(e,t,n){return{...e,notices:e.notices.concat({id:LE(),level:t,text:n,at:Date.now()})}}function eD(e){return typeof e==`string`?e:RE(e)?typeof e.reason==`string`?e.reason:typeof e.message==`string`?e.message:typeof e.kind==`string`?e.kind:``:``}function tD(e){let t=eD(e).toLowerCase();return t.includes(`no running broker`)?`no-broker`:t.includes(`does not exist`)||t.includes(`no node`)?`no-node`:t.includes(`invalid`)||t.includes(`rejected`)?`invalid`:`closed`}function nD(e){if(!RE(e)||e.role!==`assistant`)return;let t=RE(e.usage)?e.usage:null;if(!t)return;let n=typeof t.input==`number`?t.input:null,r=typeof t.cacheRead==`number`?t.cacheRead:null,i=typeof t.cacheWrite==`number`?t.cacheWrite:null;if(!(n===null||r===null||i===null))return n+r+i}function rD(e,t,n=`info`){return $E(e,n,t)}var iD={manifest:{id:`chat`,title:`Chat`,description:`Portable chat-as-a-view core`},init(e){return{target:typeof e.target==`string`&&e.target.trim()!==``?e.target:null,desiredRole:`controller`,channel:null,clientId:null,conn:`idle`,role:`observer`,controllerId:null,session:null,transcript:GE(),draft:``,notices:[],pendingDialog:null,queued:[],contextTokens:void 0}},streams:{chat:{id:`chat`,request:({target:e,role:t})=>({kind:`stream`,target:e,role:t}),onOpen:`streamOpen`,onFrame:`streamFrame`,onClose:`streamClose`}},intents:{refresh(e){let t=e.state;if(t.channel==null){if(t.target==null){e.set(e=>({...e,conn:`error`})),e.set(e=>rD(e,`missing target — run crtr view run chat --target <node-id>`,`action`)),e.signal.setBanner(`missing target — run crtr view run chat --target <node-id>`,`action`),e.signal.setStatus(null);return}e.signal.setStatus(`connecting…`);try{let n=e.connect(iD.streams.chat,{target:t.target,role:t.desiredRole});e.set(e=>({...e,channel:n,clientId:n.id,conn:`connecting`}))}catch(t){let n=t instanceof Error?t.message:String(t);e.set(e=>({...e,conn:`error`})),e.set(e=>rD(e,`stream connect failed — ${n}`,`error`)),e.signal.setBanner(`stream connect failed — ${n}`,`error`),e.signal.setStatus(null)}}},streamOpen(e,t){RE(t)&&(e.set(e=>({...e,channel:e.channel??t,clientId:e.clientId??BE(t.id),conn:`connecting`})),e.signal.setStatus(`connected — waiting for welcome`))},streamClose(e,t){let n=RE(t)&&typeof t.channelId==`string`?t.channelId:void 0;if(n!==void 0&&e.state.channel!=null&&e.state.channel.id!==n)return;let r=tD(t);if(r===`closed`&&e.state.channel==null&&e.state.conn===`connecting`)return;let i=r===`no-broker`?`node is asleep / focus or revive it first`:r===`no-node`?`node not found / check the target`:r===`invalid`?`invalid target / check the target`:`stream closed / reconnect`;e.set(e=>({...e,channel:null,conn:r})),e.set(e=>rD(e,i,`action`)),e.signal.setBanner(i,`action`),e.signal.setStatus(null)},reconnect(e){let t=e.state.channel;if(e.set(e=>({...e,channel:null,conn:`connecting`})),t&&typeof t.close==`function`)try{t.close()}catch{}e.dispatch(`refresh`)},streamFrame(e,t){if(RE(t))switch(t.type){case`welcome`:{let n=t.snapshot,r=KE(n),i=ZE(n?.state),a=n?.stats,o=typeof a?.contextUsage?.tokens==`number`?a.contextUsage.tokens:typeof a?.tokens?.total==`number`?a.tokens.total:void 0;e.set(e=>({...e,conn:`open`,controllerId:BE(t.controller_id),role:t.controller_id===e.clientId?`controller`:t.role??`observer`,session:i,transcript:r,pendingDialog:t.pending_dialog??null,contextTokens:o})),e.signal.clearBanner(),e.signal.setStatus(null),e.signal.setSubtitle(i.sessionName??e.state.target);return}case`control_changed`:e.set(e=>{let n=t.controller_id===e.clientId?`controller`:`observer`,r=n!==e.role,i=e.role===`controller`&&n===`observer`,a={...e,controllerId:BE(t.controller_id),role:n,desiredRole:i?`observer`:e.desiredRole};return r&&(a=rD(a,n===`controller`?`control changed — you are controller`:`control changed — read-only`,`info`)),a});return;case`model_changed`:e.set(e=>QE(e,{model:BE(t.model)}));return;case`error`:{if(t.code===`not_controller`){let t=`read-only — take control before sending`;e.set(e=>({...e,role:`observer`})),e.set(e=>rD(e,t,`action`)),e.signal.setBanner(t,`action`);return}let n=t.message||t.code||`stream error`;e.set(e=>rD(e,n,`error`)),e.signal.setBanner(n,`error`);return}case`ack`:{if(t.ok)return;let n=t.detail?`${t.for} failed — ${t.detail}`:`${t.for} failed`;e.set(e=>rD(e,n,`error`)),e.signal.setBanner(n,`error`);return}case`extension_ui_request`:{let n=`cannot answer dialogs yet`;e.set(e=>({...e,pendingDialog:t})),e.set(e=>rD(e,n,`action`)),e.signal.setBanner(n,`action`);return}case`display_status`:{let n=t.text===void 0?`${t.key} cleared`:`${t.key}: ${t.text}`;e.set(e=>rD(e,n,`info`));return}case`display_widget`:{let n=t.lines===void 0?`${t.key} cleared`:`${t.key}: ${t.lines.join(` | `)}`;e.set(e=>rD(e,n,`info`));return}case`display_title`:e.set(e=>rD(e,`title: ${t.title}`,`info`));return;case`bash_start`:e.set(e=>({...e,transcript:JE(e.transcript,t.command,t.excludeFromContext)}));return;case`bash_output`:e.set(e=>({...e,transcript:YE(e.transcript,t.chunk)}));return;case`bash_end`:e.set(e=>({...e,transcript:XE(e.transcript,t)}));return;default:e.set(e=>{let n=qE(e.transcript,t),r={...e,transcript:n};if(t.type===`agent_start`)r=QE(r,{isStreaming:!0});else if(t.type===`agent_end`)r=QE(r,{isStreaming:!1});else if(t.type===`session_info_changed`)r=QE(r,{sessionName:BE(t.name)});else if(t.type===`thinking_level_changed`)r=QE(r,{thinkingLevel:zE(t.level)||r.session?.thinkingLevel||`off`});else if(t.type===`queue_update`){let e=[...Array.isArray(t.steering)?t.steering:[],...Array.isArray(t.followUp)?t.followUp:[]].map(e=>String(e));r={...r,queued:e},r=QE(r,{pendingMessageCount:e.length})}let i=t.type===`message_end`?nD(t.message):void 0;return i!==void 0&&(r={...r,contextTokens:i}),r})}},setDraft(e,t){e.set(e=>({...e,draft:t}))},submitDraft(e){let t=e.state.draft.trim();if(!t)return;let n=e.state.channel;if(!n||e.state.conn!==`open`){let t=`not connected — reconnect`;e.set(e=>rD(e,t,`error`)),e.signal.setBanner(t,`error`);return}if(e.state.role!==`controller`){let t=`read-only — take control before sending`;e.set(e=>rD(e,t,`action`)),e.signal.setBanner(t,`action`);return}let r=e.state.session?.isStreaming===!0?{type:`steer`,text:t}:{type:`prompt`,text:t};n.send(r),e.set(e=>({...e,draft:``}))},abort(e){if(e.state.role!==`controller`){let t=`read-only — take control before sending`;e.set(e=>rD(e,t,`action`)),e.signal.setBanner(t,`action`);return}if(!e.state.channel||e.state.conn!==`open`){let t=`not connected — reconnect`;e.set(e=>rD(e,t,`error`)),e.signal.setBanner(t,`error`);return}e.state.channel.send({type:`abort`})},requestControl(e){e.set(e=>({...e,desiredRole:`controller`})),e.state.channel&&e.state.conn===`open`&&e.state.channel.send({type:`request_control`})},releaseControl(e){e.set(e=>({...e,desiredRole:`observer`}));let t=e.state.channel;t&&e.state.conn===`open`&&t.send({type:`release_control`}),e.dispatch(`reconnect`)},clearNotice(e,t){e.set(e=>t==null||t===``?{...e,notices:[]}:{...e,notices:e.notices.filter(e=>e.id!==t)})},quit(e){if(e.state.channel)try{e.state.channel.close()}catch{}e.signal.quit()}}},aD={info:`border-slate-200 bg-slate-50 text-slate-700`,action:`border-amber-200 bg-amber-50 text-amber-800`,error:`border-rose-200 bg-rose-50 text-rose-800`},oD={info:`bg-slate-100 text-slate-700`,action:`bg-amber-100 text-amber-800`,error:`bg-rose-100 text-rose-800`};function sD(e){return typeof e==`object`&&!!e}function cD(e,t=120){let n=String(e||``);return n.length>t?`${n.slice(0,Math.max(0,t-1))}…`:n}function lD(e){return sD(e)&&typeof e.role==`string`?e.role:``}function uD(e){return sD(e)?typeof e.customType==`string`&&e.customType?`custom · ${e.customType}`:typeof e.type==`string`&&e.type?e.type:``:``}function dD(e){return sD(e)?typeof e.timestamp==`string`?e.timestamp:typeof e.timestamp==`number`?new Date(e.timestamp).toLocaleTimeString([],{hour:`2-digit`,minute:`2-digit`}):``:``}function fD(e){return sD(e)?typeof e.text==`string`?e.text:Array.isArray(e.text)?e.text.map(e=>sD(e)&&typeof e.text==`string`?e.text:``).join(``):typeof e.content==`string`?e.content:``:``}function pD(e){if(!sD(e))return``;let t=typeof e.type==`string`?e.type:``,n=typeof e.name==`string`?e.name:``;switch(t){case`text`:return``;case`thinking`:case`reasoning`:{let t=cD(fD(e).replace(/\s+/g,` `).trim(),88);return t?`Thinking · ${t}`:`Thinking`}case`toolCall`:{let t=fD(e),r=t?` · ${cD(t.replace(/\s+/g,` `).trim(),88)}`:``;return`Tool · ${n||`tool`}${r}`}case`toolResult`:{let t=fD(e);return`Tool result${t?` · ${cD(t.replace(/\s+/g,` `).trim(),88)}`:``}`}default:return t?`${t}${n?` · ${n}`:``}`:``}}function mD(e){let t=[];if(!sD(e))return t;if(lD(e)===`bashExecution`){let n=typeof e.command==`string`?e.command:``;n&&t.push(`$ ${cD(n.replace(/\s+/g,` `).trim(),96)}`),typeof e.exitCode==`number`&&t.push(`exit ${e.exitCode}`),e.cancelled===!0&&t.push(`cancelled`),e.truncated===!0&&t.push(`truncated`)}let n=Array.isArray(e.content)?e.content:[];for(let e of n){let n=pD(e);n&&t.push(n)}let r=uD(e);return r&&lD(e)===`custom`&&t.push(r),lD(e)===`compactionSummary`&&t.push(`Compaction summary`),lD(e)===`branchSummary`&&t.push(`Branch summary`),t}function hD(e){let t=e.target||`<node-id>`;switch(e.conn){case`no-broker`:return{level:`action`,Comp:oE,headline:`node is asleep`,explanation:`Focus or revive the node first, then reconnect.`,nextStep:`crtr node focus ${t} · or crtr canvas revive ${t}`};case`no-node`:return{level:`error`,Comp:aE,headline:`node not found`,explanation:`Check the target node id and try again.`,nextStep:`crtr view run chat --target ${t}`};case`invalid`:return{level:`error`,Comp:aE,headline:`invalid target`,explanation:`The target was rejected by the broker.`,nextStep:`crtr view run chat --target <node-id>`};case`error`:return e.target?{level:`error`,Comp:aE,headline:`chat connection failed`,explanation:`Reconnect to retry the stream.`,nextStep:`Press Reconnect`}:{level:`error`,Comp:aE,headline:`missing target`,explanation:`Open chat with a node id so the view can connect.`,nextStep:`crtr view run chat --target <node-id>`};default:return null}}function gD({label:e,value:t,cls:n=``}){return(0,z.jsxs)(`span`,{className:`inline-flex items-center gap-1 rounded-full border px-2 py-0.5 text-[11px] ${n}`,children:[(0,z.jsx)(`span`,{className:`opacity-60`,children:e}),(0,z.jsx)(`span`,{className:`font-semibold`,children:t})]})}function _D({notice:e,onDismiss:t}){return(0,z.jsxs)(`div`,{className:`flex items-start gap-3 rounded-xl border px-3 py-2 text-sm ${aD[e.level]||aD.info}`,children:[(0,z.jsx)(`span`,{className:`rounded-full px-2 py-0.5 text-[11px] font-semibold uppercase tracking-wide ${oD[e.level]||oD.info}`,children:e.level}),(0,z.jsx)(`div`,{className:`min-w-0 flex-1 whitespace-pre-wrap`,children:e.text}),(0,z.jsx)(`button`,{type:`button`,className:`shrink-0 text-slate-400 hover:text-slate-700`,onClick:()=>t(e.id),"aria-label":`Dismiss notice`,children:`×`})]})}function vD({message:e,index:t,streaming:n}){let r=lD(e),i=r===`user`,a=r===`assistant`,o=i?`border-emerald-200 bg-emerald-50`:a?`border-cyan-200 bg-cyan-50`:`border-slate-200 bg-white`,s=i?`text-emerald-700`:a?`text-cyan-700`:`text-slate-700`,c=UE(e).trim(),l=mD(e),u=dD(e);return(0,z.jsxs)(`article`,{className:`rounded-2xl border px-3 py-2 shadow-sm ${o}`,children:[(0,z.jsxs)(`div`,{className:`flex items-baseline gap-2`,children:[(0,z.jsx)(`div`,{className:`font-semibold ${s}`,children:i?`You`:a?`Agent`:r||`Message`}),n?(0,z.jsx)(`span`,{className:`rounded-full bg-cyan-100 px-2 py-0.5 text-[11px] font-semibold text-cyan-800`,children:`streaming`}):null,r===`bashExecution`?(0,z.jsx)(`span`,{className:`rounded-full bg-slate-100 px-2 py-0.5 text-[11px] font-semibold text-slate-700`,children:`bash`}):null,u?(0,z.jsx)(`div`,{className:`ml-auto text-xs text-slate-400`,children:u}):null]}),c?(0,z.jsx)(`div`,{className:`mt-1 whitespace-pre-wrap text-slate-800`,children:c}):null,l.length?(0,z.jsx)(`div`,{className:`mt-2 space-y-1 border-t border-slate-200 pt-2 text-xs text-slate-500`,children:l.map((e,n)=>(0,z.jsxs)(`div`,{className:`whitespace-pre-wrap pl-3 text-slate-500`,children:[`• `,e]},`${t}:${n}`))}):null]})}function yD({state:e,dispatch:t}){let n=hD(e);if(e.target===null)return(0,z.jsx)(`div`,{className:`flex h-full items-center justify-center p-6 text-sm text-slate-500`,children:(0,z.jsx)(oE,{headline:`missing target`,explanation:`Open chat with a node id so the view can connect.`,nextStep:`crtr view run chat --target <node-id>`,onRetry:()=>t(`reconnect`)})});if(n){let e=n.Comp;return(0,z.jsx)(`div`,{className:`flex h-full items-center justify-center p-6 text-sm text-slate-500`,children:(0,z.jsx)(e,{headline:n.headline,explanation:n.explanation,nextStep:n.nextStep,onRetry:()=>t(`reconnect`)})})}let r=e.conn===`open`?`connected`:e.conn===`connecting`?`connecting…`:e.conn,i=e.session?.sessionName||``,a=e.session?.model||``,o=e.session?.isStreaming===!0,s=e.channel!=null&&e.conn===`open`&&e.role===`controller`&&e.draft.trim()!==``,c=e.channel!=null&&e.conn===`open`&&e.role===`controller`&&o,l=e.role===`controller`?`Release control`:`Request control`,u=e.role===`controller`?`releaseControl`:`requestControl`,d=e.conn===`open`?e.role===`observer`?`Take control before sending…`:o?`Type a steer…`:`Type a message…`:`Waiting for connection…`;return(0,z.jsxs)(`div`,{className:`flex h-full min-h-0 flex-col gap-3 font-mono text-sm text-slate-900 outline-none`,children:[(0,z.jsxs)(`div`,{className:`flex flex-wrap items-center gap-2 rounded-2xl border border-slate-200 bg-white px-3 py-2 shadow-sm`,children:[(0,z.jsx)(gD,{label:`target`,value:e.target||`—`,cls:`border-slate-200 bg-slate-50 text-slate-700`}),(0,z.jsx)(gD,{label:`conn`,value:r,cls:e.conn===`open`?`border-emerald-200 bg-emerald-50 text-emerald-700`:e.conn===`connecting`?`border-amber-200 bg-amber-50 text-amber-800`:`border-slate-200 bg-slate-50 text-slate-700`}),(0,z.jsx)(gD,{label:`role`,value:e.role,cls:e.role===`controller`?`border-cyan-200 bg-cyan-50 text-cyan-700`:`border-slate-200 bg-slate-50 text-slate-700`}),a?(0,z.jsx)(gD,{label:`model`,value:a,cls:`border-violet-200 bg-violet-50 text-violet-700`}):null,i?(0,z.jsx)(gD,{label:`session`,value:i,cls:`border-slate-200 bg-slate-50 text-slate-700`}):null,e.controllerId?(0,z.jsx)(gD,{label:`controller`,value:e.controllerId,cls:`border-slate-200 bg-slate-50 text-slate-700`}):null,typeof e.contextTokens==`number`?(0,z.jsx)(gD,{label:`tokens`,value:String(e.contextTokens),cls:`border-slate-200 bg-slate-50 text-slate-700`}):null,e.transcript.activity?(0,z.jsx)(gD,{label:`activity`,value:e.transcript.activity,cls:`border-amber-200 bg-amber-50 text-amber-800`}):null,e.queued.length?(0,z.jsx)(gD,{label:`queued`,value:e.queued.join(` · `),cls:`border-slate-200 bg-slate-50 text-slate-700`}):null,(0,z.jsxs)(`div`,{className:`ml-auto flex flex-wrap items-center gap-2`,children:[(0,z.jsx)(`button`,{type:`button`,className:`rounded-lg border border-slate-200 bg-white px-3 py-1.5 text-sm text-slate-700 hover:bg-slate-50`,onClick:()=>t(`reconnect`),children:`Reconnect`}),(0,z.jsx)(`button`,{type:`button`,className:`rounded-lg border border-slate-200 bg-white px-3 py-1.5 text-sm text-slate-700 hover:bg-slate-50`,onClick:()=>t(u),children:l})]})]}),e.notices.length?(0,z.jsx)(`div`,{className:`space-y-2`,children:e.notices.map(e=>(0,z.jsx)(_D,{notice:e,onDismiss:e=>t(`clearNotice`,e)},e.id))}):null,(0,z.jsx)(`div`,{className:`min-h-0 flex-1 overflow-hidden rounded-2xl border border-slate-200 bg-white shadow-sm`,children:(0,z.jsxs)(`div`,{className:`flex h-full min-h-0 flex-col`,children:[(0,z.jsx)(`div`,{className:`border-b border-slate-200 px-3 py-2 text-xs uppercase tracking-[0.18em] text-slate-400`,children:`Transcript`}),(0,z.jsx)(`div`,{className:`min-h-0 flex-1 space-y-3 overflow-y-auto p-3`,children:e.transcript.messages.length===0?e.conn===`connecting`?(0,z.jsx)(rE,{label:`Connecting to chat…`}):e.conn===`open`?(0,z.jsx)(iE,{label:`No messages yet.`}):(0,z.jsx)(`div`,{className:`flex h-full items-center justify-center text-slate-400`,children:`Waiting for welcome…`}):e.transcript.messages.map((t,n)=>(0,z.jsx)(vD,{message:t,index:n,streaming:n===e.transcript.streamingIndex&&o},n))})]})}),(0,z.jsxs)(`div`,{className:`rounded-2xl border border-slate-200 bg-white p-3 shadow-sm`,children:[(0,z.jsx)(`textarea`,{value:e.draft,onChange:e=>t(`setDraft`,e.target.value),onKeyDown:e=>{e.key===`Enter`&&!e.shiftKey&&(e.preventDefault(),t(`submitDraft`))},placeholder:d,rows:3,className:`w-full resize-none rounded-xl border border-slate-200 bg-slate-50 px-3 py-2 font-mono text-sm outline-none focus:border-slate-400`}),(0,z.jsxs)(`div`,{className:`mt-3 flex flex-wrap items-center gap-2`,children:[(0,z.jsx)(`button`,{type:`button`,className:`rounded-lg px-3 py-1.5 text-sm font-medium ${s?`bg-slate-900 text-white hover:bg-slate-800`:`cursor-not-allowed bg-slate-200 text-slate-500`}`,onClick:()=>t(`submitDraft`),disabled:!s,children:`Send`}),(0,z.jsx)(`button`,{type:`button`,className:`rounded-lg border px-3 py-1.5 text-sm ${c?`border-rose-200 bg-rose-50 text-rose-700 hover:bg-rose-100`:`cursor-not-allowed border-slate-200 bg-slate-50 text-slate-400`}`,onClick:()=>t(`abort`),disabled:!c,children:`Stop`}),(0,z.jsx)(`div`,{className:`ml-auto text-xs text-slate-400`,children:`Enter sends · Shift+Enter inserts a newline`})]})]})]})}var bD=[`👍`,`❤️`,`😂`,`🔥`,`👏`,`😮`],xD=25,SD=5,CD=1200,wD=new Set([`no-cdp`,`not-logged-in`,`capture-not-dev`,`capture-missing`]),TD=[`Jan`,`Feb`,`Mar`,`Apr`,`May`,`Jun`,`Jul`,`Aug`,`Sep`,`Oct`,`Nov`,`Dec`],ED=`https://www.linkedin.com/messaging/`,DD=e=>new Promise(t=>setTimeout(t,e));function OD(e){return{ok:!0,data:e}}function kD(e){return{ok:!1,error:e}}function AD(e,t){let n=String(e??``);return n.length>t?n.slice(0,Math.max(0,t-1))+`…`:n}function jD(e,t=Date.now()){if(!e)return``;let n=Math.floor((t-e)/1e3);if(n<60)return`now`;let r=Math.floor(n/60);if(r<60)return`${r}m`;let i=Math.floor(r/60);if(i<24)return`${i}h`;let a=Math.floor(i/24);if(a<7)return`${a}d`;let o=new Date(e),s=TD[o.getMonth()]||``,c=new Date(t);return o.getFullYear()===c.getFullYear()?`${s} ${o.getDate()}`:`${s} ʼ${String(o.getFullYear()).slice(-2)}`}function MD(e){return e.slice().sort((e,t)=>!!e.unread==!!t.unread?(t.ts||0)-(e.ts||0):e.unread?-1:1)}function ND(e){return e.openUrn&&e.convos.find(t=>t.urn===e.openUrn)||null}function PD(e){return JSON.stringify(e).replace(/\u2028/g,`\\u2028`).replace(/\u2029/g,`\\u2029`)}function FD(e,t,n={}){let r=[`exec`,`import {${e}} from 'libs/linkedin'; return await ${t===null?`${e}()`:`${e}(${PD(t)})`}`];return n.target&&r.push(`--target`,String(n.target)),n.port!=null&&n.port!==``&&r.push(`--port`,String(n.port)),{kind:`exec`,bin:`capture`,args:r}}function ID(e={}){let t=[`list`];return e.port!=null&&e.port!==``&&t.push(`--port`,String(e.port)),{kind:`exec`,bin:`capture`,args:t}}function LD(e={}){let t=[`open`,ED];return e.port!=null&&e.port!==``&&t.push(`--port`,String(e.port)),{kind:`exec`,bin:`capture`,args:t}}function RD(e={}){let t=[`navigate`,ED];return e.target&&t.push(`--target`,String(e.target)),e.port!=null&&e.port!==``&&t.push(`--port`,String(e.port)),{kind:`exec`,bin:`capture`,args:t}}var zD={"no-cdp":{headline:`No debuggable browser`,explanation:`crtr drives a browser over CDP and none is running.`,nextStep:`Launch Arc, or Chrome with --remote-debugging-port=9222, then press g`,level:`error`,blocking:!0},"capture-missing":{headline:`capture not found`,explanation:`crtr drives the browser through the capture CLI, which is not on PATH.`,nextStep:`Install capture (or add it to PATH), then press g`,level:`error`,blocking:!0},"capture-not-dev":{headline:`Browser bridge unavailable`,explanation:`This view needs a capture dev checkout (vault/ + esbuild).`,nextStep:``,level:`error`,blocking:!0},"not-logged-in":{headline:`Log in to continue`,explanation:`LinkedIn needs a sign-in in the browser.`,nextStep:`Log in in the opened tab, then press g`,level:`action`,blocking:!0},"no-tab":{headline:`Opening LinkedIn…`,explanation:`No messaging tab was open — opening one and waiting for it to load.`,nextStep:``,level:`action`,blocking:!0},"not-messaging":{headline:`Opening your inbox…`,explanation:`Found LinkedIn on another page — switching it to Messages.`,nextStep:``,level:`action`,blocking:!0},"rate-limited":{headline:`LinkedIn is throttling`,explanation:`Too many requests — waiting before trying again.`,nextStep:`Press g to retry`,level:`info`,blocking:!1},"not-connection":{headline:`Not a 1st-degree connection`,explanation:`LinkedIn only allows messaging 1st-degree connections.`,nextStep:``,level:`error`,blocking:!1}};function BD(e){return{headline:`Something went wrong`,explanation:e||`Unknown error.`,nextStep:`Press g to retry.`,level:`error`,blocking:!0}}function VD(e){switch(e){case`no-tab`:return{auto:`open`};case`not-messaging`:return{auto:`navigate`};case`not-logged-in`:return{banner:`Log in in the opened tab, then press g`,bannerLevel:`action`};case`no-cdp`:return{banner:`No debuggable browser — launch one, then press g`,bannerLevel:`error`};case`capture-missing`:return{banner:`capture not found — install it, then press g`,bannerLevel:`error`};case`capture-not-dev`:return{banner:`Browser bridge unavailable — capture dev checkout required`,bannerLevel:`error`};case`rate-limited`:return{keepContent:!0,banner:`LinkedIn is throttling — waiting, then retry with g`,bannerLevel:`info`};case`not-connection`:return{inline:!0,banner:`Can only message 1st-degree connections`,bannerLevel:`error`};default:return{}}}function HD(e){let t=String(e||``).split(/\r?\n/).map(e=>e.trim()).filter(Boolean);for(let e=t.length-1;e>=0;e--)if(/^ERROR:/i.test(t[e]))return t[e].replace(/^ERROR:\s*/i,``).trim();return t.length?t[t.length-1]:`capture exec failed`}function UD(e){if(!e.ok){let t=String(e.stderr||``);return/command not found|ENOENT/i.test(t)?{kind:`capture-missing`,display:zD[`capture-missing`]}:{kind:`error`,display:BD(HD(t))}}let t=String(e.stderr||``);return/No browser with CDP found/i.test(t)||/fetch failed/i.test(t)||/failed to fetch/i.test(t)||/ECONNREFUSED/i.test(t)?{kind:`no-cdp`,display:zD[`no-cdp`]}:/No tab found/i.test(t)?{kind:`no-tab`,display:zD[`no-tab`]}:/Unauthenticated/i.test(t)?{kind:`not-logged-in`,display:zD[`not-logged-in`]}:/Messaging queryId not found/i.test(t)||/Navigate to \/messaging\//i.test(t)?{kind:`not-messaging`,display:zD[`not-messaging`]}:/RateLimited/i.test(t)||/\b429\b/.test(t)?{kind:`rate-limited`,display:zD[`rate-limited`]}:/must be a 1st-degree connection/i.test(t)?{kind:`not-connection`,display:zD[`not-connection`]}:/DEV_ONLY_MSG/i.test(t)?{kind:`capture-not-dev`,display:zD[`capture-not-dev`]}:{kind:`error`,display:BD(HD(t))}}function WD(e){let t=String(e.stdout||``).trim();if(t===``)return OD(null);try{return OD(JSON.parse(t))}catch{return kD({kind:`error`,display:BD(`could not parse capture output as JSON: ${AD(t,300)}`)})}}function GD(e){if(typeof e!=`string`||e===``)return 0;let t=Date.parse(e);return Number.isNaN(t)?0:t}function KD(e){let t=e||{},n=Array.isArray(t.participants)?t.participants:[],r=n[0]||{},i=n.map(e=>e&&e.name).filter(Boolean),a=t.title||r.name||(i.length?i.join(`, `):`Unknown`);return{urn:typeof t.conversationUrn==`string`?t.conversationUrn:``,name:a,lastMessage:typeof t.lastMessage==`string`?t.lastMessage:``,unread:typeof t.unreadCount==`number`?t.unreadCount>0:!1,ts:GD(t.lastActivityAt),recipientId:typeof r.memberId==`string`?r.memberId:``}}function qD(e){let t=e||{};return{urn:typeof t.messageUrn==`string`?t.messageUrn:``,sender:typeof t.fromName==`string`?t.fromName:``,text:typeof t.text==`string`?t.text:``,ts:GD(t.sentAt),fromMe:!1,fromMemberId:typeof t.fromMemberId==`string`?t.fromMemberId:``}}function JD(e,t){return e.map(e=>({urn:e.urn,sender:e.sender,text:e.text,ts:e.ts,fromMe:!!t&&e.fromMemberId===t}))}function YD(e){if(!e.ok||e.exitCode!==0)return kD(UD(e));let t=WD(e);return t.ok?OD((t.data&&Array.isArray(t.data.messages)?t.data.messages:[]).map(qD)):t}function XD(e){try{let t=new URL(e).hostname.toLowerCase();return t===`linkedin.com`||t.endsWith(`.linkedin.com`)}catch{return!1}}var ZD={id:`li-discover-tab`,request:e=>ID(e),parse:e=>{if(!e.ok||e.exitCode!==0)return kD(UD(e));let t;try{t=JSON.parse(String(e.stdout||``).trim()||`[]`)}catch{return kD({kind:`error`,display:BD(`could not parse capture list output: ${AD(e.stdout,300)}`)})}if(!Array.isArray(t))return kD({kind:`no-tab`,display:zD[`no-tab`]});let n=t.filter(e=>e&&typeof e.url==`string`&&XD(e.url)),r=n.find(e=>/\/messaging\//i.test(e.url))||n[0];return r&&r.id?OD(String(r.id)):kD({kind:`no-tab`,display:zD[`no-tab`]})}},QD={id:`li-context`,request:e=>FD(`getContext`,null,e),parse:e=>{if(!e.ok||e.exitCode!==0)return kD(UD(e));let t=WD(e);if(!t.ok)return t;let n=t.data||{};return!n.csrf||!n.memberId?kD({kind:`error`,display:BD(`getContext() returned no csrf/memberId`)}):OD({csrf:String(n.csrf),memberId:String(n.memberId)})}},$D={id:`li-conversations`,request:e=>FD(`listConversations`,{count:e.count,csrf:e.csrf,memberId:e.memberId},e),parse:e=>{if(!e.ok||e.exitCode!==0)return kD(UD(e));let t=WD(e);return t.ok?OD((t.data&&Array.isArray(t.data.conversations)?t.data.conversations:[]).map(KD)):t}},eO={id:`li-open-tab`,request:e=>LD(e),parse:e=>{if(!e.ok||e.exitCode!==0)return kD(UD(e));let t=WD(e);return t.ok?t.data&&t.data.id?OD(String(t.data.id)):kD({kind:`error`,display:BD(`capture open returned no tab id`)}):t}},tO={id:`li-navigate`,request:e=>RD(e),parse:e=>e.ok&&e.exitCode===0?OD(void 0):kD(UD(e))},nO={id:`li-view-thread`,request:e=>FD(`viewConversation`,{csrf:e.csrf,conversationUrn:e.conversationUrn},e),parse:YD},rO={id:`li-mark-read`,request:e=>FD(`markConversationAsRead`,{csrf:e.csrf,conversationUrn:e.conversationUrn},e),parse:e=>e.ok&&e.exitCode===0?OD(void 0):kD(UD(e))},iO={id:`li-send`,request:e=>{let t={csrf:e.csrf,myMemberId:e.myMemberId,recipient:e.recipient,text:e.text};return e.conversationUrn&&(t.conversationUrn=e.conversationUrn),FD(`sendMessage`,t,e)},parse:e=>{if(!e.ok||e.exitCode!==0)return kD(UD(e));let t=WD(e);if(!t.ok)return t;let n=t.data||{};if(n.success===!1){let e=typeof n.error==`string`?n.error:`send failed`;return/1st-degree connection/i.test(e)?kD({kind:`not-connection`,display:zD[`not-connection`]}):kD({kind:`error`,display:BD(e)})}return OD(void 0)}},aO={id:`li-react`,request:e=>FD(`reactToMessage`,{csrf:e.csrf,messageUrn:e.messageUrn,emoji:e.emoji},e),parse:e=>{if(!e.ok||e.exitCode!==0)return kD(UD(e));let t=WD(e);return t.ok?t.data&&t.data.success===!1?kD({kind:`error`,display:BD(`LinkedIn rejected the reaction`)}):OD(void 0):t}};function oO(e){return{target:e.target||void 0,port:e.port}}async function sO(e){let t=e.state,n=t.target||``,r=t.auth,i=t.port;if(!n){let t=await e.resolve(ZD,{port:i});if(!t.ok)return t;n=t.data}if(!r){let t=await e.resolve(QD,{target:n,port:i});if(!t.ok)return t;r=t.data}let a=await e.resolve($D,{target:n,port:i,csrf:r.csrf,memberId:r.memberId,count:xD});if(!a.ok)return a;let o=MD(a.data),s=t.thread;if(t.openUrn){let a=await e.execute(nO,{target:n,port:i,csrf:r.csrf,conversationUrn:t.openUrn});a.ok&&(s=JD(a.data,r.memberId))}return{ok:!0,data:{target:n,auth:r,convos:o,thread:s}}}function cO(e,t){e.set(e=>{let n=e.convCursor>=t.convos.length?Math.max(0,t.convos.length-1):e.convCursor;return{...e,target:t.target,auth:t.auth,convos:t.convos,thread:t.thread,convCursor:n,recovery:null,loginTabOpened:!1,lastFetch:Date.now()}}),e.signal.setStatus(null),e.signal.clearBanner(),e.state.mode===`list`&&e.signal.setMode(null),lO(e)}function lO(e){let t=0;for(let n of e.state.convos)n.unread&&t++;e.signal.setSubtitle(t>0?`${t} unread`:null)}function uO(e,t){e.signal.setStatus(null),e.signal.setMode(null);let n=VD(t.kind);n.inline||n.keepContent&&e.state.convos.length?e.set(e=>({...e,recovery:null})):e.set(e=>({...e,recovery:{display:t.display,spinner:!1}})),n.banner?e.signal.setBanner(n.banner,n.bannerLevel||`error`):e.signal.clearBanner()}async function dO(e){for(let t=1;t<=SD;t++){await DD(CD);let n=e.state.recovery,r=n&&n.startedAt?Math.max(0,Math.floor((Date.now()-n.startedAt)/1e3)):t;e.signal.setStatus(`Loading messages… (${r}s)`);let i=await sO(e);if(i.ok){cO(e,i.data);return}if(wD.has(i.error.kind)){uO(e,i.error);return}}e.set(e=>({...e,recovery:e.recovery?{...e.recovery,spinner:!1}:null})),e.signal.setStatus(null),e.signal.setBanner(`Still loading — press g to retry`,`action`)}async function fO(e,t){let n=VD(t.kind),r=e.state.port;if(n.auto){e.signal.setMode(null),e.signal.clearBanner(),e.set(e=>({...e,recovery:{display:t.display,spinner:!0,startedAt:Date.now()}})),e.signal.setStatus(t.display.headline);let i=n.auto===`open`?await e.execute(eO,{port:r}):await e.execute(tO,{target:e.state.target||void 0,port:r});if(!i.ok){uO(e,i.error);return}e.set(e=>({...e,target:n.auto===`open`&&i.data?i.data:e.target,auth:null})),await dO(e);return}if(t.kind===`not-logged-in`&&!e.state.loginTabOpened){let t=await e.execute(eO,{port:r});e.set(e=>({...e,target:t.ok&&t.data?t.data:e.target,loginTabOpened:!0}))}uO(e,t)}function pO(e,t){let n=VD(t.kind);n.banner?e.signal.setBanner(n.banner,n.bannerLevel||`error`):e.signal.setBanner(t.display.explanation||t.display.headline,t.display.level)}var mO={manifest:{id:`linkedin`,title:`LinkedIn Messages`,description:`Inbox — read, reply, react`,refreshMs:3e4},init(e){let t=e||{};return{auth:null,target:t.target||null,port:t.port||void 0,convos:[],convCursor:0,convScroll:0,openUrn:null,thread:[],threadScroll:0,mode:`list`,draft:``,reactCursor:0,lastFetch:0,recovery:null,loginTabOpened:!1}},sources:{discoverTabSource:ZD,contextSource:QD,conversationsSource:$D},commands:{openTabCommand:eO,navigateCommand:tO,viewThreadCommand:nO,markReadCommand:rO,sendMessageCommand:iO,reactCommand:aO},intents:{async refresh(e){if(e.state.mode!==`list`)return;e.signal.setStatus(`Loading…`);let t=await sO(e);if(t.ok){cO(e,t.data);return}await fO(e,t.error)},cursorDown:e=>e.set(e=>({...e,convCursor:e.convos.length?Math.min(e.convos.length-1,e.convCursor+1):0})),cursorUp:e=>e.set(e=>({...e,convCursor:Math.max(0,e.convCursor-1)})),async openThread(e,t){let n=typeof t==`number`?t:e.state.convCursor,r=e.state.convos[n];if(!r)return;if(!e.state.auth){e.signal.setBanner(`Not ready yet — press g to refresh`,`action`);return}let i=e.state.auth;e.set(e=>({...e,convCursor:n,openUrn:r.urn,thread:[],threadScroll:0})),e.signal.setStatus(`Loading thread…`);let a=await e.execute(nO,{...oO(e.state),csrf:i.csrf,conversationUrn:r.urn});if(!a.ok){e.signal.setStatus(null),pO(e,a.error);return}e.set(e=>({...e,thread:JD(a.data,i.memberId)})),await e.execute(rO,{...oO(e.state),csrf:i.csrf,conversationUrn:r.urn}),e.set(e=>({...e,convos:e.convos.map(e=>e.urn===r.urn?{...e,unread:!1}:e)})),e.signal.setStatus(null),e.signal.clearBanner(),lO(e)},startReply:e=>{if(!e.state.openUrn){e.signal.setBanner(`Open a conversation first`,`action`);return}e.set(e=>({...e,mode:`reply`,draft:``})),e.signal.setMode(`compose`),e.signal.clearBanner()},setDraft:(e,t)=>e.set(e=>({...e,draft:typeof t==`string`?t:``})),cancelCompose:e=>{e.set(e=>({...e,mode:`list`,draft:``})),e.signal.setMode(null)},async submitReply(e){let t=e.state.draft.trim();if(!t){e.set(e=>({...e,mode:`list`,draft:``})),e.signal.setMode(null);return}let n=ND(e.state),r=e.state.auth;if(!n||!r){e.signal.setBanner(`No open conversation to reply to.`,`error`),e.set(e=>({...e,mode:`list`})),e.signal.setMode(null);return}let i=e.state.openUrn;e.set(e=>({...e,mode:`list`})),e.signal.setMode(null),e.signal.setStatus(`Sending…`);let a=await e.execute(iO,{...oO(e.state),csrf:r.csrf,myMemberId:r.memberId,recipient:n.recipientId,text:t,conversationUrn:i||void 0});if(!a.ok){e.signal.setStatus(null),pO(e,a.error);return}e.set(e=>({...e,thread:[...e.thread,{urn:``,sender:`You`,text:t,ts:Date.now(),fromMe:!0}],draft:``}));let o=await e.execute(nO,{...oO(e.state),csrf:r.csrf,conversationUrn:i||``});o.ok&&e.set(e=>({...e,thread:JD(o.data,r.memberId)})),e.signal.clearBanner(),e.signal.setStatus(`Sent`)},startReact:e=>{if(!e.state.openUrn||e.state.thread.length===0){e.signal.setBanner(`Open a conversation first`,`action`);return}e.set(e=>({...e,mode:`react`,reactCursor:0})),e.signal.setMode(`react`),e.signal.clearBanner()},reactPrev:e=>e.set(e=>({...e,reactCursor:Math.max(0,e.reactCursor-1)})),reactNext:e=>e.set(e=>({...e,reactCursor:Math.min(bD.length-1,e.reactCursor+1)})),reactPick:(e,t)=>e.set(e=>({...e,reactCursor:typeof t==`number`?Math.max(0,Math.min(bD.length-1,t)):e.reactCursor})),async submitReact(e){let t=e.state.thread.length?e.state.thread[e.state.thread.length-1]:null,n=e.state.auth;if(e.set(e=>({...e,mode:`list`})),e.signal.setMode(null),!t||!t.urn||!n){e.signal.setBanner(`No message to react to.`,`error`);return}let r=bD[e.state.reactCursor]||bD[0];e.signal.setStatus(`Reacting…`);let i=await e.execute(aO,{...oO(e.state),csrf:n.csrf,messageUrn:t.urn,emoji:r});if(!i.ok){e.signal.setStatus(null),pO(e,i.error);return}e.signal.clearBanner(),e.signal.setStatus(`Reacted `+r)},quit:e=>e.signal.quit()}};function hO(e){return{ok:!0,data:e}}function gO(e){return{ok:!1,error:e}}var _O=[`👍`,`❤️`,`😂`,`🔥`,`👏`,`😮`],vO={error:3,action:2,info:1},yO=[{id:`linkedin`,label:`LinkedIn`,badge:{glyph:`in`,fg:`36`},connectKey:`L`},{id:`gmail`,label:`Gmail`,badge:{glyph:`@`,fg:`31`},connectKey:`G`}],bO={};for(let e of yO)bO[e.id]=e;function xO(e){let t=bO[e];return t&&t.badge||{glyph:`?`,fg:`37`}}function SO(e){let t=bO[e];return t&&t.label||e}var CO=[`Jan`,`Feb`,`Mar`,`Apr`,`May`,`Jun`,`Jul`,`Aug`,`Sep`,`Oct`,`Nov`,`Dec`];function wO(e,t){let n=String(e??``);return n.length>t?n.slice(0,Math.max(0,t-1))+`…`:n}function TO(e,t=Date.now()){if(!e)return``;let n=Math.floor((t-e)/1e3);if(n<60)return`now`;let r=Math.floor(n/60);if(r<60)return`${r}m`;let i=Math.floor(r/60);if(i<24)return`${i}h`;let a=Math.floor(i/24);if(a<7)return`${a}d`;let o=new Date(e),s=CO[o.getMonth()]||``,c=new Date(t);return o.getFullYear()===c.getFullYear()?`${s} ${o.getDate()}`:`${s} ʼ${String(o.getFullYear()).slice(-2)}`}function EO(e){if(!e)return``;let t=new Date(e);return`${t.getFullYear()}-${t.getMonth()}-${t.getDate()}`}function DO(e,t=Date.now()){let n=new Date(e),r=new Date(t),i=(e,t)=>e.getFullYear()===t.getFullYear()&&e.getMonth()===t.getMonth()&&e.getDate()===t.getDate();if(i(n,r))return`Today`;if(i(n,new Date(t-864e5)))return`Yesterday`;let a=CO[n.getMonth()]||``;return n.getFullYear()===r.getFullYear()?`${a} ${n.getDate()}`:`${a} ${n.getDate()}, ${n.getFullYear()}`}function OO(e,t){let n=String(t??``),r=`${e}:`.toLowerCase();return n.toLowerCase().startsWith(r)?n:`${e}: ${n}`}function kO(e){let t=0;for(let n of yO)if(e.ready[n.id])for(let r of e.rowsBySource[n.id]||[])r.unread&&t++;return t}function AO(e){let t=null,n=-1;for(let r of yO){let i=e.banners[r.id];if(!i||!i.display)continue;let a=(vO[i.display.level]||0)+(i.display.blocking?10:0);a>n&&(n=a,t={label:r.label,d:i.display})}return t}var jO=`https://mail.google.com`,MO=25,NO=25,PO=5,FO=1200,IO=new Set([`no-cdp`,`not-logged-in`,`capture-not-dev`,`capture-missing`]);function LO(e){return new Promise(t=>setTimeout(t,e))}function RO(e){return JSON.stringify(e).replace(/\u2028/g,`\\u2028`).replace(/\u2029/g,`\\u2029`)}function zO(e,t,n){return`import {${t}} from '${e}'; return await ${n===null?`${t}()`:`${t}(${RO(n)})`}`}function BO(e,t,n){return t&&e.push(`--target`,String(t)),n!=null&&n!==``&&e.push(`--port`,String(n)),e}function VO(e,t){return t!=null&&t!==``&&e.push(`--port`,String(t)),e}function HO(e){let t=String(e||``).trim();return t===``?null:JSON.parse(t)}function UO(e){let t=String(e||``).split(/\r?\n/).map(e=>e.trim()).filter(Boolean);for(let e=t.length-1;e>=0;e--)if(/^ERROR:/i.test(t[e]))return t[e].replace(/^ERROR:\s*/i,``).trim();return t.length?t[t.length-1]:`capture exec failed`}function WO(e,t){return{kind:e,display:t}}var GO=`This view needs a capture dev checkout (vault/ source + esbuild). Not available in the published package.`;function KO(e){let t=String(e||``);return/No browser with CDP found/i.test(t)||/fetch failed/i.test(t)||/failed to fetch/i.test(t)||/ECONNREFUSED/i.test(t)?{kind:`no-cdp`}:/No tab found/i.test(t)?{kind:`no-tab`}:/DEV_ONLY/i.test(t)||/dev-only feature of capture/i.test(t)||/published package/i.test(t)?{kind:`capture-not-dev`}:/RateLimited/i.test(t)||/\b429\b/.test(t)?{kind:`rate-limited`}:/Unauthenticated/i.test(t)||/XSRF token not found/i.test(t)||/GLOBALS not found/i.test(t)||/may not be logged in/i.test(t)||/not be logged in/i.test(t)||/Not on Gmail domain/i.test(t)||/Account number not found/i.test(t)||/Navigate to mail\.google\.com/i.test(t)?{kind:`not-logged-in`}:{kind:`error`,message:UO(t)}}function qO(e){switch(e&&e.kind||`error`){case`no-cdp`:return WO(`no-cdp`,{headline:`No debuggable browser`,explanation:`crtr drives a browser over CDP and none is running.`,nextStep:`Launch Chrome with --remote-debugging-port=9222 (or Arc), then press g`,banner:`Gmail: no debuggable browser — launch one, then g`,level:`error`,blocking:!0});case`no-tab`:return WO(`no-tab`,{headline:`No Gmail tab`,explanation:`Open mail.google.com in the debuggable browser.`,nextStep:`Press G to connect`,banner:`Gmail: open mail.google.com, then press g`,level:`action`,blocking:!0});case`not-logged-in`:return WO(`not-logged-in`,{headline:`Log in to Gmail`,explanation:`Gmail needs a sign-in in the browser.`,nextStep:`Log in in the opened tab, then press g`,banner:`Gmail: log in, then press g`,level:`action`,blocking:!0});case`rate-limited`:return WO(`rate-limited`,{headline:`Gmail is throttling`,explanation:`Too many requests — wait a moment before retrying.`,nextStep:`Press g to retry`,banner:`Gmail: throttled — wait, then press g`,level:`info`,blocking:!1});case`capture-not-dev`:return WO(`capture-not-dev`,{headline:`Browser bridge unavailable`,explanation:GO,nextStep:null,banner:`Gmail: browser bridge unavailable — capture dev checkout required`,level:`error`,blocking:!0});case`still-loading`:return WO(`still-loading`,{headline:`Still loading Gmail…`,explanation:`Gmail is taking a while to load.`,nextStep:`Press g to retry`,banner:`Gmail: still loading — press g to retry`,level:`action`,blocking:!1});default:{let t=e&&e.message||`Unknown error.`;return WO(`error`,{headline:`Something went wrong`,explanation:t,nextStep:`Press g to retry`,banner:`Gmail: ${wO(t,80)}`,level:`error`,blocking:!0})}}}function JO(){return qO({kind:`error`,message:`capture binary not found — install capture or set CAPTURE_BIN.`})}function YO(e){return typeof e==`number`&&Number.isFinite(e)?e:0}function XO(e){let t=e||{};return typeof t.name==`string`&&t.name.trim()?t.name:typeof t.email==`string`&&t.email.trim()?t.email:`Unknown`}function ZO(e){let t=e||{};return typeof t.email==`string`?t.email:``}function QO(e){let t=e||{},n=typeof t.threadId==`string`?t.threadId:``,r=t.from||{};return{sourceId:`gmail`,key:`gmail:${n}`,name:XO(r),snippet:typeof t.snippet==`string`&&t.snippet?t.snippet:typeof t.subject==`string`?t.subject:``,unread:t.unread===!0,ts:YO(t.date),ref:{threadId:n,messageId:typeof t.messageId==`string`?t.messageId:``,subject:typeof t.subject==`string`?t.subject:``,fromEmail:ZO(r),fromName:XO(r)}}}function $O(e,t){let n=e||{},r=n.from||{},i=ZO(r);return{sender:XO(r),fromMe:!!t&&i.toLowerCase()===t.toLowerCase(),text:typeof n.body==`string`&&n.body?n.body:typeof n.snippet==`string`?n.snippet:``,ts:YO(n.date)}}function ek(e){let t=String(e||``).replace(/^\s*(re:\s*)+/i,``).trim();return t?`Re: ${t}`:`Re:`}function tk(e){try{return new URL(e).hostname.toLowerCase()===`mail.google.com`}catch{return!1}}var nk={id:`gmail-discover`,request:e=>({kind:`exec`,bin:`capture`,args:VO([`list`],e&&e.port)}),parse:e=>{if(!e.ok)return gO(JO());if(e.exitCode!==0)return gO(qO(KO(e.stderr)));let t;try{t=HO(e.stdout)||[]}catch{return gO(qO({kind:`error`,message:`could not parse capture list output`}))}if(!Array.isArray(t))return gO(qO({kind:`no-tab`}));let n=t.filter(e=>e&&typeof e.url==`string`&&tk(e.url))[0];return n&&n.id?hO(String(n.id)):gO(qO({kind:`no-tab`}))}},rk={id:`gmail-context`,request:e=>({kind:`exec`,bin:`capture`,args:BO([`exec`,zO(`libs/gmail`,`getContext`,null)],e&&e.target,e&&e.port)}),parse:e=>{if(!e.ok)return gO(JO());if(e.exitCode!==0)return gO(qO(KO(e.stderr)));let t;try{t=HO(e.stdout)||{}}catch{return gO(qO({kind:`error`,message:`could not parse getContext output`}))}return!t.xsrf||t.account==null||!t.globals?gO(qO({kind:`error`,message:`getContext() returned no xsrf/account/globals`})):hO({xsrf:String(t.xsrf),account:Number(t.account),email:typeof t.email==`string`?t.email:``,globals:t.globals})}},ik={id:`gmail-inbox`,request:e=>({kind:`exec`,bin:`capture`,args:BO([`exec`,zO(`libs/gmail`,`listInbox`,{xsrf:e.xsrf,account:e.account,globals:e.globals,count:e&&e.count||NO})],e&&e.target,e&&e.port)}),parse:e=>{if(!e.ok)return gO(JO());if(e.exitCode!==0)return gO(qO(KO(e.stderr)));let t;try{t=HO(e.stdout)||{}}catch{return gO(qO({kind:`error`,message:`could not parse listInbox output`}))}return hO((t&&Array.isArray(t.messages)?t.messages:[]).map(QO))}},ak={id:`gmail-thread`,request:e=>({kind:`exec`,bin:`capture`,args:BO([`exec`,zO(`libs/gmail`,`readEmail`,{xsrf:e.xsrf,account:e.account,globals:e.globals,threadId:e.threadId})],e&&e.target,e&&e.port)}),parse:e=>{if(!e.ok)return gO(JO());if(e.exitCode!==0)return gO(qO(KO(e.stderr)));let t;try{t=HO(e.stdout)||{}}catch{return gO(qO({kind:`error`,message:`could not parse readEmail output`}))}return hO(t&&Array.isArray(t.messages)?t.messages:[])}},ok={id:`gmail-open`,request:e=>({kind:`exec`,bin:`capture`,args:VO([`open`,jO],e&&e.port)}),parse:e=>{if(!e.ok)return gO(JO());if(e.exitCode!==0)return gO(qO(KO(e.stderr)));let t;try{t=HO(e.stdout)||{}}catch{return gO(qO({kind:`error`,message:`could not parse capture open output`}))}return t&&t.id?hO(String(t.id)):gO(qO({kind:`error`,message:`capture open returned no tab id`}))}},sk={id:`gmail-reply`,request:e=>({kind:`exec`,bin:`capture`,args:BO([`exec`,zO(`libs/gmail`,`replyEmail`,{xsrf:e.xsrf,account:e.account,globals:e.globals,threadId:e.threadId,originalMsgId:e.originalMsgId,to:e.to,subject:e.subject,body:e.body})],e&&e.target,e&&e.port)}),parse:e=>{if(!e.ok)return gO(JO());if(e.exitCode!==0)return gO(qO(KO(e.stderr)));let t;try{t=HO(e.stdout)||{}}catch{return gO(qO({kind:`error`,message:`could not parse replyEmail output`}))}return t&&t.success===!1?gO(qO({kind:`error`,message:`Gmail rejected the reply`})):hO(void 0)}};function ck(e,t){let n=t&&t.message?String(t.message):e;return WO(`error`,{headline:e,explanation:n,nextStep:`Press g to retry`,banner:n,level:`error`,blocking:!1})}function lk(e){return e===`no-tab`?`open`:e===`not-messaging`?`navigate`:null}async function uk(e,t){if(!t.target){let n=await e.resolve(ZD,{port:t.port});if(!n.ok)return n;t.target=n.data}if(!t.ctx){let n=await e.resolve(QD,{target:t.target,port:t.port});if(!n.ok)return n;t.ctx=n.data}let n=await e.resolve($D,{target:t.target,port:t.port,csrf:t.ctx.csrf,memberId:t.ctx.memberId,count:MO});return n.ok?(t.convos=n.data,{ok:!0}):n}async function dk(e,t){for(let n=1;n<=PO;n++){await LO(FO);let n=await uk(e,t);if(n.ok)return t.loginTabOpened=!1,{ok:!0};if(IO.has(n.error.kind))return n}return gO(WO(`settling`,{headline:`Still loading`,explanation:`LinkedIn is taking a moment to load.`,nextStep:`Press g to retry`,banner:`still loading — press g to retry`,level:`action`,blocking:!1}))}async function fk(e,t){let n=await uk(e,t);if(n.ok)return t.loginTabOpened=!1,{ok:!0};let r=n.error,i=lk(r.kind);if(i){let n=i===`open`?await e.execute(eO,{port:t.port}):await e.execute(tO,{target:t.target,port:t.port});return n.ok?(i===`open`&&n.data&&(t.target=n.data),t.ctx=null,dk(e,t)):n}if(r.kind===`not-logged-in`&&!t.loginTabOpened){let n=await e.execute(eO,{port:t.port});n.ok&&n.data&&(t.target=n.data),t.loginTabOpened=!0}return n}async function pk(e,t){if(!t.target){let n=await e.resolve(nk,{port:t.port});if(!n.ok)return n;t.target=n.data}if(!t.ctx){let n=await e.resolve(rk,{target:t.target,port:t.port});if(!n.ok)return n;t.ctx=n.data}return{ok:!0}}async function mk(e,t){for(let n=1;n<=PO;n++){await LO(FO),e.signal.setStatus(`Loading Gmail… (${n})`);let r=await pk(e,t);if(r.ok)return t.loginTabOpened=!1,{ok:!0};if(IO.has(r.error.kind))return r}return gO(qO({kind:`still-loading`}))}async function hk(e,t){let n=await pk(e,t);if(n.ok)return t.loginTabOpened=!1,{ok:!0};let r=n.error.kind;if(r===`no-tab`){e.signal.setStatus(`Opening Gmail…`);let n=await e.execute(ok,{port:t.port});return n.ok?(t.target=n.data,t.ctx=null,mk(e,t)):n}if(r===`not-logged-in`){if(!t.loginTabOpened){let n=await e.execute(ok,{port:t.port});n.ok&&n.data&&(t.target=n.data),t.loginTabOpened=!0}return n}return n}function gk(e){let t=e.ctx?e.ctx.csrf:``,n=e.ctx?e.ctx.memberId:``;return(e.convos||[]).map(e=>({sourceId:`linkedin`,key:`linkedin:${e.urn}`,name:e.name||`Unknown`,snippet:e.lastMessage||``,unread:!!e.unread,ts:e.ts||0,ref:{urn:e.urn,recipientId:e.recipientId,csrf:t,memberId:n}}))}async function _k(e,t,n){let r=t.ctx&&t.ctx.csrf||n.csrf,i=t.ctx&&t.ctx.memberId||n.memberId;if(!r)return gO(WO(`error`,{headline:`Something went wrong`,explanation:`not authenticated yet`,nextStep:`Press g to retry`,banner:`not authenticated yet`,level:`error`,blocking:!1}));let a=await e.execute(nO,{target:t.target,port:t.port,csrf:r,conversationUrn:n.urn});if(!a.ok)return a;let o=JD(a.data,i);t.threads={...t.threads,[n.urn]:o};let s=(t.convos||[]).find(e=>e.urn===n.urn);s&&(s.unread=!1);let c=s?s.name:`Conversation`,l=o.map(e=>({sender:e.sender,fromMe:e.fromMe,text:e.text,ts:e.ts}));return hO({title:c||`Conversation`,messages:l,canReply:!0,canReact:!0})}async function vk(e,t,n){let r=n&&n.threadId?n.threadId:``;if(!r)return gO(qO({kind:`error`,message:`loadThread: missing threadId`}));let i=await e.resolve(ak,{xsrf:t.ctx.xsrf,account:t.ctx.account,globals:t.ctx.globals,threadId:r,target:t.target,port:t.port});if(!i.ok)return i;let a=i.data,o=t.ctx.email||``,s=a[0]||{},c=a[a.length-1]||{},l=typeof s.subject==`string`&&s.subject||n&&n.subject||`(no subject)`,u=ZO(c.from)||ZO(s.from),d=c.to&&c.to[0]&&ZO(c.to[0])||s.to&&s.to[0]&&ZO(s.to[0])||``,f=u||d?`from ${u||`—`} · to ${d||`—`}`:void 0;return hO({title:l,...f?{subtitle:f}:{},messages:a.map(e=>$O(e,o)),canReply:!0,canReact:!1})}async function yk(e,t,n,r){let i=n&&n.threadId?n.threadId:``;if(!i)return gO(qO({kind:`error`,message:`reply: missing threadId`}));let a=String(r??``);if(!a.trim())return gO(qO({kind:`error`,message:`reply: empty body`}));let o=await e.resolve(ak,{xsrf:t.ctx.xsrf,account:t.ctx.account,globals:t.ctx.globals,threadId:i,target:t.target,port:t.port});if(!o.ok)return o;let s=o.data;if(s.length===0)return gO(qO({kind:`error`,message:`reply: thread has no messages`}));let c=(t.ctx.email||``).toLowerCase(),l=s[s.length-1]||{},u=typeof l.messageId==`string`?l.messageId:n&&n.messageId||``;if(!u)return gO(qO({kind:`error`,message:`reply: could not resolve message id`}));let d=null;for(let e=s.length-1;e>=0;e--){let t=ZO((s[e]||{}).from).toLowerCase();if(t&&t!==c){d=s[e];break}}let f=d?ZO(d.from):``;if(f||=l.to&&l.to[0]&&ZO(l.to[0])||``,!f&&n&&n.fromEmail&&(f=n.fromEmail),!f)return gO(qO({kind:`error`,message:`reply: could not determine recipient`}));let p=ek(d&&d.subject||l.subject||n&&n.subject||``);return e.execute(sk,{xsrf:t.ctx.xsrf,account:t.ctx.account,globals:t.ctx.globals,threadId:i,originalMsgId:u,to:f,subject:p,body:a,target:t.target,port:t.port})}function bk(e){e.sort((e,t)=>!!e.unread==!!t.unread?(t.ts||0)-(e.ts||0):e.unread?-1:1)}function xk(e,t,n,r){let i=n[r],a=i&&i.key,o=[];for(let n of yO)t!==`all`&&t!==n.id||(o=o.concat(e[n.id]||[]));bk(o);let s=r;if(a){let e=o.findIndex(e=>e.key===a);e>=0&&(s=e)}return s>=o.length&&(s=Math.max(0,o.length-1)),s<0&&(s=0),{rows:o,cursor:s}}function Sk(e,t){let n=[];for(let e of yO){let r=t&&t[e.id];r&&r.display&&n.push({label:e.label,d:r.display})}if(n.length===0){e.signal.clearBanner();return}let r=`info`;for(let e of n)(vO[e.d.level]||0)>(vO[r]||0)&&(r=e.d.level);let i=n.map(e=>OO(e.label,e.d.banner||e.d.explanation||e.d.headline)).join(` · `);e.signal.setBanner(i,r)}function Ck(e,t,n){let r=SO(t),i=n&&n.display,a=i&&(i.banner||i.explanation||i.headline);a?e.signal.setBanner(OO(r,a),i&&i.level||`error`):e.signal.setBanner(`${r}: error`,`error`)}function wk(e){let t=e.state,n=kO(t),r=[];if(n>0&&r.push(`${n} unread`),t.filter!==`all`){let e=bO[t.filter];r.push(`${e?e.label:t.filter} only`)}e.signal.setSubtitle(r.length?r.join(` · `):null)}function Tk(e){return{...e,threads:{...e.threads||{}},convos:(e.convos||[]).map(e=>({...e}))}}function Ek(e){return{...e}}function Dk(e){return{linkedin:Tk(e.linkedin),gmail:Ek(e.gmail)}}var Ok={manifest:{id:`inbox`,title:`Inbox`,description:`Combined inbox — triage LinkedIn + Gmail in one ranked list`,refreshMs:3e4},init(e){return{subs:{linkedin:{ctx:null,target:e&&e.target||null,port:e&&e.port||void 0,convos:[],threads:{},loginTabOpened:!1},gmail:{target:null,port:void 0,ctx:null,loginTabOpened:!1}},rowsBySource:{},rows:[],cursor:0,scroll:0,openKey:null,openRow:null,thread:null,threadScroll:0,mode:`list`,draft:``,reactCursor:0,filter:`all`,banners:{},ready:{},lastFetch:0}},sources:{gmailDiscover:nk,gmailContext:rk,gmailInbox:ik,gmailThread:ak},commands:{gmailOpen:ok,gmailReply:sk},intents:{async refresh(e){if(e.state.mode!==`list`)return;e.signal.setStatus(`Refreshing…`);let t=e.state,n=Dk(t.subs),r={},i={},a={};for(let t of yO){let o=t.id,s=n[o],c;try{c=o===`linkedin`?await fk(e,s):await hk(e,s)}catch(e){c={ok:!1,error:ck(`source error`,e)}}if(c.ok)if(a[o]=!0,i[o]=null,o===`linkedin`)r[o]=gk(s);else{let t;try{t=await e.resolve(ik,{xsrf:s.ctx.xsrf,account:s.ctx.account,globals:s.ctx.globals,count:NO,target:s.target,port:s.port})}catch(e){t={ok:!1,error:ck(`list failed`,e)}}t.ok?r[o]=t.data:(r[o]=[],i[o]=t.error)}else a[o]=!1,r[o]=[],i[o]=c.error}e.set(e=>{let{rows:t,cursor:o}=xk(r,e.filter,e.rows,e.cursor);return{...e,subs:n,rowsBySource:r,banners:i,ready:a,rows:t,cursor:o,lastFetch:Date.now()}}),e.signal.setStatus(null),Sk(e,i),wk(e)},cursorDown:e=>e.set(e=>({...e,cursor:e.rows.length?Math.min(e.rows.length-1,e.cursor+1):0})),cursorUp:e=>e.set(e=>({...e,cursor:Math.max(0,e.cursor-1)})),async open(e,t){let n=e.state,r=typeof t==`number`?t:n.cursor,i=n.rows[r];if(!i)return;e.signal.setStatus(`Loading thread…`);let a=Dk(n.subs),o=i.sourceId,s;try{s=o===`linkedin`?await _k(e,a.linkedin,i.ref):await vk(e,a.gmail,i.ref)}catch(e){s={ok:!1,error:ck(`could not load thread`,e)}}if(e.signal.setStatus(null),!s.ok){e.set(e=>({...e,subs:a,openKey:i.key,openRow:i,thread:null,threadScroll:0})),Ck(e,o,s.error);return}e.set(e=>{let t=e=>e.key===i.key?{...e,unread:!1}:e,n=e.rows.map(t),r={...e.rowsBySource};return r[o]=(r[o]||[]).map(t),{...e,subs:a,rows:n,rowsBySource:r,openKey:i.key,openRow:i,thread:s.data,threadScroll:0}}),wk(e)},cycleFilter(e){e.set(e=>{let t=[`all`,`linkedin`,`gmail`],n=t[(t.indexOf(e.filter)+1)%t.length]||`all`,{rows:r,cursor:i}=xk(e.rowsBySource,n,e.rows,e.cursor);return{...e,filter:n,rows:r,cursor:i}}),wk(e)},startReply(e){let t=e.state;if(!t.openKey||!t.thread){e.signal.setBanner(`Open a conversation first`,`action`);return}t.thread.canReply&&(e.set(e=>({...e,mode:`reply`,draft:``})),e.signal.setMode(`compose`))},startReact(e){let t=e.state;if(!t.openKey||!t.thread){e.signal.setBanner(`Open a conversation first`,`action`);return}!t.thread.canReact||(t.thread.messages||[]).length===0||(e.set(e=>({...e,mode:`react`,reactCursor:0})),e.signal.setMode(`react`))},setDraft:(e,t)=>e.set(e=>({...e,draft:typeof t==`string`?t:``})),async submitReply(e){let t=e.state,n=t.draft.trim();if(e.set(e=>({...e,mode:`list`})),e.signal.setMode(null),!n)return;let r=t.openRow,i=r?r.sourceId:null;if(!r||!i){e.signal.setBanner(`No open conversation to reply to.`,`error`);return}e.signal.setStatus(`Sending…`);let a=Dk(t.subs),o;try{o=i===`linkedin`?await e.execute(iO,{target:a.linkedin.target,port:a.linkedin.port,csrf:a.linkedin.ctx&&a.linkedin.ctx.csrf||r.ref.csrf,myMemberId:a.linkedin.ctx&&a.linkedin.ctx.memberId||r.ref.memberId,recipient:r.ref.recipientId,text:n,conversationUrn:r.ref.urn}):await yk(e,a.gmail,r.ref,n)}catch(e){o={ok:!1,error:ck(`send failed`,e)}}if(!o.ok){e.signal.setStatus(null),Ck(e,i,o.error);return}let s=t.thread;try{let t=i===`linkedin`?await _k(e,a.linkedin,r.ref):await vk(e,a.gmail,r.ref);t.ok&&(s=t.data)}catch{}e.set(e=>({...e,subs:a,draft:``,thread:s})),e.signal.setStatus(`Sent`),Sk(e,e.state.banners)},reactPrev:e=>e.set(e=>({...e,reactCursor:Math.max(0,e.reactCursor-1)})),reactNext:e=>e.set(e=>({...e,reactCursor:Math.min(_O.length-1,e.reactCursor+1)})),async submitReact(e,t){let n=e.state,r=n.openRow,i=r?r.sourceId:null;if(e.set(e=>({...e,mode:`list`})),e.signal.setMode(null),i!==`linkedin`||!r){e.signal.setBanner(`Cannot react here.`,`error`);return}let a=_O[typeof t==`number`?t:n.reactCursor]||_O[0],o=Dk(n.subs).linkedin,s=o.threads[r.ref.urn]||[],c=s.length?s[s.length-1]:null;if(!c||!c.urn){e.signal.setBanner(`LinkedIn: no message to react to`,`error`);return}let l=o.ctx&&o.ctx.csrf||r.ref.csrf;if(!l){e.signal.setBanner(`LinkedIn: not authenticated yet`,`error`);return}e.signal.setStatus(`Reacting…`);let u;try{u=await e.execute(aO,{target:o.target,port:o.port,csrf:l,messageUrn:c.urn,emoji:a})}catch(e){u={ok:!1,error:ck(`react failed`,e)}}if(!u.ok){e.signal.setStatus(null),Ck(e,`linkedin`,u.error);return}e.signal.setStatus(`Reacted `+a),Sk(e,e.state.banners)},cancelCompose(e){e.set(e=>({...e,mode:`list`,draft:``})),e.signal.setMode(null)},async connectLinkedin(e){let t=Dk(e.state.subs),n=t.linkedin;e.signal.setStatus(`Connecting LinkedIn…`);let r;try{r=await e.execute(eO,{port:n.port})}catch(e){r={ok:!1,error:ck(`connect failed`,e)}}if(e.signal.setStatus(null),!r.ok){e.set(e=>({...e,banners:{...e.banners,linkedin:r.error}})),Sk(e,e.state.banners);return}r.data&&(n.target=r.data),n.ctx=null,e.set(e=>({...e,subs:t})),await e.dispatch(`refresh`)},async connectGmail(e){let t=Dk(e.state.subs),n=t.gmail;e.signal.setStatus(`Connecting Gmail…`);let r;try{r=await e.execute(ok,{port:n.port})}catch(e){r={ok:!1,error:ck(`connect failed`,e)}}if(e.signal.setStatus(null),!r.ok){e.set(e=>({...e,banners:{...e.banners,gmail:r.error}})),Sk(e,e.state.banners);return}r.data&&(n.target=r.data),n.ctx=null,n.loginTabOpened=!0,e.set(e=>({...e,subs:t})),await e.dispatch(`refresh`)},quit:e=>e.signal.quit()}},kk={linkedin:`text-cyan-600`,gmail:`text-red-600`};function Ak({row:e,selected:t,onClick:n}){let r=kk[e.sourceId]||`text-slate-400`,i=(e.snippet||``).replace(/\s+/g,` `).trim(),a=TO(e.ts);return(0,z.jsxs)(`li`,{onClick:n,className:`flex items-baseline gap-1.5 rounded px-2 py-1 cursor-pointer ${t?`bg-slate-200`:`hover:bg-slate-100`}`,children:[(0,z.jsx)(`span`,{className:`shrink-0 ${e.unread?`text-cyan-600`:`text-transparent`}`,children:`●`}),(0,z.jsx)(`span`,{className:`shrink-0 font-bold ${r}`,children:xO(e.sourceId).glyph}),(0,z.jsx)(`span`,{className:`shrink-0 ${e.unread?`font-semibold`:``}`,children:e.name||`Unknown`}),i?(0,z.jsx)(`span`,{className:`truncate text-slate-400`,children:i}):null,a?(0,z.jsx)(`span`,{className:`ml-auto shrink-0 text-slate-400`,children:a}):null]})}function jk({state:e,dispatch:t}){if(!e.openKey||!e.thread)return(0,z.jsxs)(`div`,{className:`flex h-full flex-col items-center justify-center gap-1 text-slate-400`,children:[(0,z.jsx)(`div`,{children:`✉ No conversation open`}),(0,z.jsx)(`div`,{className:`text-slate-500`,children:`Click a conversation to open it.`})]});let n=e.thread,r=n.messages||[],i=null;return(0,z.jsxs)(`div`,{className:`flex h-full flex-col`,children:[(0,z.jsxs)(`div`,{className:`border-b border-slate-200 pb-1`,children:[(0,z.jsx)(`div`,{className:`font-semibold`,children:n.title||`Conversation`}),n.subtitle?(0,z.jsx)(`div`,{className:`text-slate-400`,children:n.subtitle}):null]}),(0,z.jsx)(`div`,{className:`flex-1 overflow-y-auto py-2`,children:r.length===0?(0,z.jsx)(`div`,{className:`text-slate-400`,children:`Loading messages…`}):r.map((e,t)=>{let n=EO(e.ts),r=e.ts&&n!==i?DO(e.ts):null;return e.ts&&(i=n),(0,z.jsxs)(`div`,{children:[r?(0,z.jsxs)(`div`,{className:`my-1 text-center text-xs text-slate-400`,children:[`── `,r,` ──`]}):null,e.fromMe?(0,z.jsxs)(`div`,{className:`border-l-2 border-green-600 pl-2`,children:[(0,z.jsx)(`div`,{className:`font-semibold text-green-700`,children:`You`}),(0,z.jsx)(`div`,{className:`whitespace-pre-wrap`,children:e.text})]}):(0,z.jsxs)(`div`,{className:`mb-2`,children:[(0,z.jsx)(`div`,{className:`font-semibold text-cyan-700`,children:e.sender||`Them`}),(0,z.jsx)(`div`,{className:`whitespace-pre-wrap`,children:e.text})]})]},t)})}),e.mode===`reply`?(0,z.jsxs)(`div`,{className:`border-t border-slate-200 pt-2`,children:[(0,z.jsx)(`textarea`,{autoFocus:!0,value:e.draft,onChange:e=>t(`setDraft`,e.target.value),onKeyDown:e=>{e.key===`Enter`&&!e.shiftKey?(e.preventDefault(),t(`submitReply`)):e.key===`Escape`&&(e.preventDefault(),t(`cancelCompose`))},className:`w-full rounded border border-slate-300 p-2 font-mono text-sm outline-none focus:border-slate-500`,rows:3,placeholder:`Type a reply…`}),(0,z.jsxs)(`div`,{className:`mt-1 flex gap-2`,children:[(0,z.jsx)(`button`,{type:`button`,onClick:()=>t(`submitReply`),className:`rounded bg-slate-700 px-3 py-1 text-white hover:bg-slate-800`,children:`Send`}),(0,z.jsx)(`button`,{type:`button`,onClick:()=>t(`cancelCompose`),className:`rounded border border-slate-300 px-3 py-1 text-slate-700 hover:bg-slate-100`,children:`Cancel`})]})]}):null,e.mode===`react`?(0,z.jsx)(`div`,{className:`border-t border-slate-200 pt-2`,children:(0,z.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,z.jsx)(`span`,{className:`text-amber-600`,children:`☺ React`}),_O.map((n,r)=>(0,z.jsx)(`button`,{type:`button`,onClick:()=>t(`submitReact`,r),className:`rounded px-2 py-1 text-lg ${r===e.reactCursor?`bg-slate-200`:`hover:bg-slate-100`}`,children:n},n)),(0,z.jsx)(`button`,{type:`button`,onClick:()=>t(`cancelCompose`),className:`ml-auto rounded border border-slate-300 px-3 py-1 text-slate-700 hover:bg-slate-100`,children:`Cancel`})]})}):null]})}function Mk({state:e,dispatch:t}){if(e.rows.length===0){if(e.lastFetch===0)return(0,z.jsx)(rE,{label:`Loading inbox…`});let n=AO(e);if(n){let e=n.d;return(0,z.jsx)(e.level===`error`?aE:oE,{headline:`${n.label}: ${e.headline}`,explanation:e.explanation,nextStep:e.nextStep||void 0,onRetry:()=>t(`refresh`)})}return(0,z.jsx)(iE,{label:`All caught up — no messages.`})}return(0,z.jsxs)(`div`,{className:`flex h-full gap-3 font-mono text-sm outline-none`,tabIndex:0,onKeyDown:n=>{e.mode===`list`&&(n.key===`j`||n.key===`ArrowDown`?(t(`cursorDown`),n.preventDefault()):n.key===`k`||n.key===`ArrowUp`?(t(`cursorUp`),n.preventDefault()):n.key===`Enter`?(t(`open`,e.cursor),n.preventDefault()):n.key===`g`?t(`refresh`):n.key===`r`?t(`startReply`):n.key===`e`?t(`startReact`):n.key===`f`&&t(`cycleFilter`))},children:[(0,z.jsx)(`ul`,{className:`w-2/5 shrink-0 overflow-y-auto border-r border-slate-200 pr-2`,children:e.rows.map((n,r)=>(0,z.jsx)(Ak,{row:n,selected:r===e.cursor,onClick:()=>t(`open`,r)},n.key))}),(0,z.jsx)(`div`,{className:`min-w-0 flex-1`,children:(0,z.jsx)(jk,{state:e,dispatch:t})})]})}function Nk(e){return{ok:!0,data:e}}function Pk(e){return{ok:!1,error:e}}function Fk(e){let t=String(e||``).split(/\r?\n/).map(e=>e.trim()).filter(Boolean);return t.length?t[0]:``}function Ik(e){let t=parseInt(String(e),10);return Number.isFinite(t)?t:0}function Lk(e,t){return`${e} ${t}${e===1?``:`s`}`}var Rk=[`Jan`,`Feb`,`Mar`,`Apr`,`May`,`Jun`,`Jul`,`Aug`,`Sep`,`Oct`,`Nov`,`Dec`];function zk(e,t){let n=Date.parse(e);if(Number.isNaN(n))return``;let r=Math.max(0,Math.floor((t-n)/1e3));if(r<60)return`now`;let i=Math.floor(r/60);if(i<60)return`${i}m`;let a=Math.floor(i/60);if(a<24)return`${a}h`;let o=Math.floor(a/24);if(o<7)return`${o}d`;let s=new Date(n),c=Rk[s.getMonth()]||`?`;return s.getFullYear()===new Date(t).getFullYear()?`${c} ${s.getDate()}`:`${c} ʼ${String(s.getFullYear()).slice(-2)}`}function Bk(e,t){return e===`U`||t===`U`||e===`A`&&t===`A`||e===`D`&&t===`D`?`conflict`:e===`?`||t===`?`?`untracked`:t!==` `&&t!==``?`modified`:e!==` `&&e!==``?`staged`:`modified`}function Vk(e){let t=String(e||``).split(`\0`),n=[],r={staged:0,modified:0,untracked:0,conflict:0};for(let e=0;e<t.length;e++){let i=t[e];if(!i||i.length<3)continue;let a=i[0],o=i[1],s=i.slice(3);(a===`R`||a===`C`||o===`R`||o===`C`)&&e++;let c=Bk(a,o);c===`conflict`?r.conflict++:c===`untracked`?r.untracked++:(a!==` `&&a!==`?`&&a!==``&&r.staged++,o!==` `&&o!==`?`&&o!==``&&r.modified++),n.push({path:s,xy:`${a}${o}`,cls:c,add:0,del:0})}return{files:n,counts:r}}function Hk(e){let t=[];for(let n of String(e||``).split(/\r?\n/)){if(!n.trim())continue;let e=n.split(` `);if(e.length<3)continue;let r=e[0],i=e[1],a=e.slice(2).join(` `);r===`-`||i===`-`||a.includes(` => `)||t.push({path:a,add:Ik(r),del:Ik(i)})}return t}var Uk={conflict:0,staged:1,modified:2,untracked:3},Wk=new Set([`FAILURE`,`ERROR`,`CANCELLED`,`TIMED_OUT`,`ACTION_REQUIRED`,`STARTUP_FAILURE`]),Gk=new Set([`SUCCESS`,`NEUTRAL`,`SKIPPED`]);function Kk(e){if(!Array.isArray(e)||e.length===0)return`none`;let t=!1;for(let n of e){let e=String(n&&n.conclusion||``).toUpperCase(),r=String(n&&n.state||``).toUpperCase(),i=String(n&&n.status||``).toUpperCase();if(Wk.has(e)||Wk.has(r))return`fail`;(i&&i!==`COMPLETED`||r&&!Gk.has(r)&&!Wk.has(r)||!e&&!r&&!i)&&(t=!0)}return t?`pending`:`pass`}function qk(e){let t=String(e||``).toUpperCase();return t===`APPROVED`?`approved`:t===`CHANGES_REQUESTED`?`changes`:`review`}var Jk={kind:`git-missing`,display:{headline:`git not found`,explanation:`crtr could not find the git binary on PATH.`,nextStep:`Install git, then press g.`,level:`error`,blocking:!0}},Yk={kind:`not-a-repo`,display:{headline:`Not a git repository`,explanation:`This view monitors a git repo, and the current directory is not one.`,nextStep:"cd into a repository (or run `git init`), then press g.",level:`action`,blocking:!0}};function Xk(e){return{kind:`git-failed`,display:{headline:`Git unavailable`,explanation:e||`A git command failed.`,nextStep:`Press g to retry.`,level:`error`,blocking:!1}}}function Zk(e,t){return{kind:e,display:{headline:t,explanation:``,nextStep:``,level:`info`,blocking:!1}}}function Qk(e){let t=String(e||``).toLowerCase();return/auth|logged in|gh auth login|authentication|not logged/.test(t)?Zk(`gh-unauthed`,"gh is not authenticated — run `gh auth login`."):/could not resolve host|dial tcp|network is unreachable|no such host|timeout|temporary failure|connection refused/.test(t)?Zk(`gh-network`,`Cannot reach GitHub (offline?).`):/could not resolve to a repository|no git remote|none of the git remotes|no default remote|not a github|head branch could not/.test(t)?Zk(`gh-no-remote`,`No GitHub remote for this repository.`):Zk(`gh-failed`,Fk(e)||`gh command failed.`)}var $k={id:`git-status`,request:()=>({kind:`exec`,bin:`git`,args:[`status`,`--porcelain=v1`,`-z`,`--untracked-files=all`]}),parse:e=>{if(!e.ok)return Pk(Jk);if(e.exitCode!==0){let t=String(e.stderr||``).toLowerCase();return/not a git repository/.test(t)?Pk(Yk):Pk(Xk(Fk(e.stderr)))}return Nk(Vk(e.stdout))}},eA={id:`git-branch`,request:()=>({kind:`exec`,bin:`git`,args:[`branch`,`--show-current`]}),parse:e=>Nk(e.ok&&e.exitCode===0?e.stdout.trim():``)},tA={id:`git-head`,request:()=>({kind:`exec`,bin:`git`,args:[`rev-parse`,`--short`,`HEAD`]}),parse:e=>Nk(e.ok&&e.exitCode===0?e.stdout.trim():``)},nA={id:`git-upstream`,request:()=>({kind:`exec`,bin:`git`,args:[`rev-parse`,`--abbrev-ref`,`--symbolic-full-name`,`@{upstream}`]}),parse:e=>Nk(e.ok&&e.exitCode===0?e.stdout.trim():null)},rA={id:`git-ahead-behind`,request:()=>({kind:`exec`,bin:`git`,args:[`rev-list`,`--left-right`,`--count`,`@{upstream}...HEAD`]}),parse:e=>{if(!e.ok||e.exitCode!==0)return Nk({ahead:0,behind:0});let t=e.stdout.trim().split(/\s+/);return Nk({behind:Ik(t[0]),ahead:Ik(t[1])})}},iA={id:`git-log`,request:()=>({kind:`exec`,bin:`git`,args:[`log`,`-1`,`--pretty=%h%x1f%s%x1f%cI`]}),parse:e=>{if(!e.ok||e.exitCode!==0||e.stdout.trim()===``)return Nk(null);let[t,n,r]=e.stdout.replace(/\n$/,``).split(``);return Nk({sha:t||``,subject:n||``,when:r||``})}},aA={id:`git-diff`,request:()=>({kind:`exec`,bin:`git`,args:[`diff`,`--numstat`]}),parse:e=>Nk(e.ok&&e.exitCode===0?Hk(e.stdout):[])},oA={id:`git-diff-cached`,request:()=>({kind:`exec`,bin:`git`,args:[`diff`,`--cached`,`--numstat`]}),parse:e=>Nk(e.ok&&e.exitCode===0?Hk(e.stdout):[])},sA={id:`prs`,request:()=>({kind:`exec`,bin:`gh`,args:[`pr`,`list`,`--state`,`open`,`--limit`,`30`,`--json`,`number,title,headRefName,reviewDecision,statusCheckRollup,updatedAt,isDraft`]}),parse:e=>{if(!e.ok)return Pk(Zk(`gh-missing`,`gh (GitHub CLI) not found — install it to see PRs.`));if(e.exitCode!==0)return Pk(Qk(e.stderr||e.stdout));let t;try{t=JSON.parse(e.stdout.trim()||`[]`)}catch{return Pk(Zk(`gh-failed`,`could not parse gh output as JSON.`))}return Array.isArray(t)||(t=[]),Nk(t.map(e=>{let t=e||{},n=String(t.headRefName||``);return{number:typeof t.number==`number`?t.number:Ik(t.number),title:String(t.title||`(untitled)`),headRefName:n,isDraft:!!t.isDraft,current:!1,review:qk(t.reviewDecision),ci:Kk(t.statusCheckRollup),updatedAt:String(t.updatedAt||``)}}))}};function cA(e){let t=[],n=e.git;if(t.push({kind:`label`,text:`Working tree`}),!n||n.files.length===0)t.push({kind:`clean`});else for(let e of n.files)t.push({kind:`file`,file:e});if(t.push({kind:`spacer`}),t.push({kind:`label`,text:`Pull requests`}),e.prNote)t.push({kind:`note`,text:e.prNote});else if(e.prs.length===0)t.push({kind:`note`,text:`No open pull requests.`});else for(let n of e.prs)t.push({kind:`pr`,pr:n});return t}function lA(e){let t=e.counts;if(e.files.length===0)return`clean`;let n=[];return t.conflict&&n.push(`${t.conflict} conflict`),t.staged&&n.push(`${t.staged} staged`),t.modified&&n.push(`${t.modified} modified`),t.untracked&&n.push(`${t.untracked} untracked`),n.join(` · `)||Lk(e.files.length,`change`)}function uA(e){let t=e.git;if(!t)return null;let n=t.branch;return t.ahead&&(n+=` ↑${t.ahead}`),t.behind&&(n+=` ↓${t.behind}`),n+=` · ${lA(t)}`,n}function dA(e){let t=e.git;return t?`${t.files.length===0?`clean`:Lk(t.files.length,`change`)} · ${e.prNote?`PRs n/a`:Lk(e.prs.length,`PR`)}`:null}function fA(e){let t=e.git,n=[];if(t&&t.counts.conflict&&n.push(`${Lk(t.counts.conflict,`conflict`)}`),!e.prNote){let t=e.prs.filter(e=>e.ci===`fail`).length,r=e.prs.filter(e=>e.review===`changes`).length;t&&n.push(`${t} PR${t===1?``:`s`} failing CI`),r&&n.push(`${r} PR${r===1?``:`s`} need changes`)}return n.length?`${n.join(` · `)} — needs attention`:null}var pA={manifest:{id:`git-pr`,title:`Git / PR`,description:`Local git state + GitHub PR/CI status for the repo at this cwd`,refreshMs:5e3},init(){return{git:null,gitErr:null,prs:[],prNote:null,board:[],cursor:0,scroll:0,lastFetch:0}},sources:{gitStatusSource:$k,gitBranchSource:eA,gitHeadSource:tA,gitUpstreamSource:nA,gitAheadBehindSource:rA,gitLogSource:iA,gitDiffSource:aA,gitDiffCachedSource:oA,prsSource:sA},intents:{async refresh(e){e.signal.setStatus(`Reading git…`);let t=await e.resolve($k);if(!t.ok){let n=t.error,r=e.state.git!=null,i=!n.display.blocking&&r;e.set(e=>{let t={...e,gitErr:n};return i||(t.git=null,t.prs=[],t.prNote=null,t.board=cA(t)),t.lastFetch=Date.now(),t}),i?e.signal.setBanner(n.display.explanation,n.display.level):e.signal.clearBanner(),e.signal.setStatus(null),e.signal.setSubtitle(i?uA(e.state):null);return}let[n,r,i,a,o,s,c]=await Promise.all([e.resolve(eA),e.resolve(tA),e.resolve(nA),e.resolve(rA),e.resolve(iA),e.resolve(aA),e.resolve(oA)]),l=n.ok?n.data:``,u=!1;l===``&&(u=!0,l=r.ok&&r.data?`(detached ${r.data})`:`(no branch)`);let d=i.ok?i.data:null,f=0,p=0;d&&a.ok&&(f=a.data.ahead,p=a.data.behind);let m=o.ok?o.data:null,h=new Map,g=e=>{for(let t of e){let e=h.get(t.path)||{add:0,del:0};e.add+=t.add,e.del+=t.del,h.set(t.path,e)}};s.ok&&g(s.data),c.ok&&g(c.data);let{files:_,counts:v}=t.data;for(let e of _){let t=h.get(e.path);t&&(e.add=t.add,e.del=t.del)}_.sort((e,t)=>{let n=Uk[e.cls]-Uk[t.cls];return n===0?e.path<t.path?-1:+(e.path>t.path):n});let y={branch:l,detached:u,upstream:d,ahead:f,behind:p,lastCommit:m,files:_,counts:v},b=await e.resolve(sA),x=[],S=null;b.ok?(x=b.data.map(e=>({...e,current:e.headRefName!==``&&e.headRefName===l})),x.sort((e,t)=>e.current===t.current?e.updatedAt<t.updatedAt?1:e.updatedAt>t.updatedAt?-1:0:e.current?-1:1)):S=b.error.display.headline,e.set(e=>{let t={...e,git:y,gitErr:null,prs:x,prNote:S};return t.board=cA(t),t.cursor>=t.board.length&&(t.cursor=Math.max(0,t.board.length-1)),t.lastFetch=Date.now(),t});let C={git:y,prs:x,prNote:S};e.signal.setSubtitle(uA(C));let w=fA(C);w?e.signal.setBanner(w,`action`):e.signal.clearBanner(),e.signal.setStatus(dA(C))},cursorDown:e=>e.set(e=>({...e,cursor:e.board.length?Math.min(e.board.length-1,e.cursor+1):0})),cursorUp:e=>e.set(e=>({...e,cursor:Math.max(0,e.cursor-1)})),select:(e,t)=>e.set(e=>({...e,cursor:typeof t==`number`?Math.max(0,Math.min(e.board.length-1,t)):e.cursor})),quit:e=>e.signal.quit()}},mA={staged:{glyph:`●`,cls:`text-green-600`},modified:{glyph:`○`,cls:`text-amber-600`},untracked:{glyph:`?`,cls:`text-slate-400`},conflict:{glyph:`✗`,cls:`text-red-600`}},hA={approved:{glyph:`✓`,cls:`text-green-600`},changes:{glyph:`✗`,cls:`text-red-600`},review:{glyph:`◌`,cls:`text-slate-400`}},gA={pass:{glyph:`✓`,cls:`text-green-600`},fail:{glyph:`✗`,cls:`text-red-600`},pending:{glyph:`⟳`,cls:`text-amber-600`},none:{glyph:`·`,cls:`text-slate-400`}};function _A({g:e}){let t=Date.now();return(0,z.jsxs)(`div`,{className:`border-b border-slate-200 pb-2`,children:[(0,z.jsxs)(`div`,{className:`flex items-baseline gap-2`,children:[(0,z.jsxs)(`span`,{className:`font-semibold text-cyan-700`,children:[`⎇ `,e.branch]}),e.upstream?(0,z.jsxs)(`span`,{className:`text-slate-400`,children:[`→ `,e.upstream,e.ahead?(0,z.jsxs)(`span`,{className:`ml-1 text-green-600`,children:[`↑`,e.ahead]}):null,e.behind?(0,z.jsxs)(`span`,{className:`ml-1 text-amber-600`,children:[`↓`,e.behind]}):null,!e.ahead&&!e.behind?(0,z.jsx)(`span`,{className:`ml-1 text-green-600`,children:`✓ up to date`}):null]}):(0,z.jsx)(`span`,{className:`text-slate-400`,children:`· no upstream`}),(0,z.jsx)(`span`,{className:`ml-auto`,children:vA(e)})]}),(0,z.jsx)(`div`,{className:`mt-0.5 text-slate-600`,children:e.lastCommit?(0,z.jsxs)(`span`,{className:`flex items-baseline gap-2`,children:[(0,z.jsx)(`span`,{className:`text-slate-400`,children:`⊙`}),(0,z.jsx)(`span`,{className:`text-amber-600`,children:e.lastCommit.sha}),(0,z.jsx)(`span`,{className:`truncate`,children:e.lastCommit.subject}),(0,z.jsx)(`span`,{className:`ml-auto shrink-0 text-slate-400`,children:zk(e.lastCommit.when,t)})]}):(0,z.jsx)(`span`,{className:`text-slate-400`,children:`⊙ no commits yet`})})]})}function vA(e){if(e.files.length===0)return(0,z.jsx)(`span`,{className:`text-green-600`,children:`✓ clean`});let t=e.counts;return(0,z.jsx)(`span`,{className:`flex gap-3`,children:[{n:t.conflict,word:`conflict`,glyph:`✗`,cls:`text-red-600`},{n:t.staged,word:`staged`,glyph:`●`,cls:`text-green-600`},{n:t.modified,word:`modified`,glyph:`○`,cls:`text-amber-600`},{n:t.untracked,word:`untracked`,glyph:`?`,cls:`text-slate-400`}].filter(e=>e.n).map((e,t)=>(0,z.jsxs)(`span`,{className:e.cls,children:[e.glyph,` `,e.n,` `,e.word]},t))})}function yA({row:e,selected:t,onClick:n}){let r=Date.now(),i=`flex items-baseline gap-1.5 rounded px-2 py-0.5 ${t?`bg-slate-200`:``}`;if(e.kind===`label`)return(0,z.jsx)(`li`,{className:`px-2 pt-2 pb-0.5 text-xs uppercase tracking-wide text-slate-400`,children:e.text});if(e.kind===`spacer`)return(0,z.jsx)(`li`,{className:`h-2`,"aria-hidden":!0});if(e.kind===`clean`)return(0,z.jsxs)(`li`,{className:i,onClick:n,children:[(0,z.jsx)(`span`,{className:`text-green-600`,children:`✓`}),(0,z.jsx)(`span`,{className:`text-slate-400`,children:`nothing to commit, working tree clean`})]});if(e.kind===`note`)return(0,z.jsxs)(`li`,{className:i,onClick:n,children:[(0,z.jsx)(`span`,{className:`text-slate-400`,children:`·`}),(0,z.jsx)(`span`,{className:`text-slate-400`,children:e.text})]});if(e.kind===`file`){let t=e.file,r=mA[t.cls]||mA.modified;return(0,z.jsxs)(`li`,{className:i,onClick:n,children:[(0,z.jsx)(`span`,{className:r.cls,children:r.glyph}),(0,z.jsx)(`span`,{className:`text-slate-400`,children:t.xy.replace(/ /g,`·`)}),(0,z.jsx)(`span`,{className:t.cls===`conflict`?`text-red-600`:``,children:t.path}),t.add||t.del?(0,z.jsxs)(`span`,{className:`ml-auto shrink-0 text-slate-400`,children:[`+`,t.add,` −`,t.del]}):null]})}let a=e.pr,o=hA[a.review]||hA.review,s=gA[a.ci]||gA.none,c=zk(a.updatedAt,r);return(0,z.jsxs)(`li`,{className:i,onClick:n,children:[(0,z.jsxs)(`span`,{className:`text-cyan-700 ${a.current?`font-bold`:``}`,children:[`#`,a.number]}),(0,z.jsx)(`span`,{className:a.isDraft?`text-slate-400`:``,children:a.title}),a.isDraft?(0,z.jsx)(`span`,{className:`text-slate-400`,children:`(draft)`}):null,(0,z.jsxs)(`span`,{className:`ml-auto flex shrink-0 items-baseline gap-2`,children:[(0,z.jsx)(`span`,{className:o.cls,children:o.glyph}),(0,z.jsx)(`span`,{className:s.cls,children:s.glyph}),c?(0,z.jsx)(`span`,{className:`text-slate-400`,children:c}):null]})]})}function bA({state:e,dispatch:t}){if(!e.git){if(e.gitErr){let n=e.gitErr.display;return(0,z.jsx)(n.level===`error`?aE:oE,{headline:n.headline,explanation:n.explanation,nextStep:n.nextStep,onRetry:()=>t(`refresh`)})}return(0,z.jsx)(rE,{label:`Reading git…`})}let n=e.git,r=n.files.length===0&&e.prs.length===0&&!e.prNote;return(0,z.jsxs)(`div`,{className:`font-mono text-sm outline-none`,tabIndex:0,onKeyDown:e=>{e.key===`j`||e.key===`ArrowDown`?(t(`cursorDown`),e.preventDefault()):e.key===`k`||e.key===`ArrowUp`?(t(`cursorUp`),e.preventDefault()):e.key===`g`&&t(`refresh`)},children:[(0,z.jsx)(_A,{g:n}),r?(0,z.jsx)(iE,{label:`${n.branch} — clean working tree, no open PRs.`}):(0,z.jsx)(`ul`,{className:`mt-1`,children:e.board.map((n,r)=>(0,z.jsx)(yA,{row:n,selected:r===e.cursor,onClick:()=>t(`select`,r)},r))})]})}function xA({rec:e,dispatch:t}){let n=e.display;return e.spinner?(0,z.jsx)(rE,{label:n.headline}):(0,z.jsx)(n.level===`error`?aE:oE,{headline:n.headline,explanation:n.explanation,nextStep:n.nextStep||void 0,onRetry:()=>t(`refresh`)})}function SA({state:e,dispatch:t}){return(0,z.jsx)(`ul`,{className:`divide-y divide-slate-100 overflow-y-auto`,children:e.convos.map((n,r)=>{let i=r===e.convCursor,a=n.urn===e.openUrn,o=jD(n.ts);return(0,z.jsxs)(`li`,{onClick:()=>t(`openThread`,r),className:`flex cursor-pointer items-baseline gap-2 px-3 py-2 ${i?`bg-slate-100`:``} ${a?`border-l-2 border-cyan-500`:`border-l-2 border-transparent`}`,children:[(0,z.jsx)(`span`,{className:`shrink-0 ${n.unread?`text-cyan-600`:`text-transparent`}`,children:`●`}),(0,z.jsxs)(`span`,{className:`min-w-0 flex-1`,children:[(0,z.jsx)(`span`,{className:n.unread?`font-semibold`:``,children:n.name||`Unknown`}),n.lastMessage?(0,z.jsx)(`span`,{className:`ml-2 truncate text-slate-400`,children:n.lastMessage.replace(/\s+/g,` `).trim()}):null]}),o?(0,z.jsx)(`span`,{className:`shrink-0 text-xs text-slate-400`,children:o}):null]},n.urn||r)})})}function CA({m:e}){let t=jD(e.ts);return e.fromMe?(0,z.jsxs)(`div`,{className:`border-l-2 border-green-500 pl-2`,children:[(0,z.jsxs)(`div`,{className:`flex items-baseline justify-between`,children:[(0,z.jsx)(`span`,{className:`font-semibold text-green-600`,children:`You`}),t?(0,z.jsx)(`span`,{className:`text-xs text-slate-400`,children:t}):null]}),(0,z.jsx)(`div`,{className:`whitespace-pre-wrap text-slate-700`,children:e.text})]}):(0,z.jsxs)(`div`,{children:[(0,z.jsxs)(`div`,{className:`flex items-baseline justify-between`,children:[(0,z.jsx)(`span`,{className:`font-semibold text-cyan-700`,children:e.sender||`Them`}),t?(0,z.jsx)(`span`,{className:`text-xs text-slate-400`,children:t}):null]}),(0,z.jsx)(`div`,{className:`whitespace-pre-wrap text-slate-700`,children:e.text})]})}function wA({state:e,dispatch:t}){let n=e.openUrn?e.convos.find(t=>t.urn===e.openUrn):null;return e.openUrn?(0,z.jsxs)(`div`,{className:`flex h-full flex-col`,children:[(0,z.jsxs)(`div`,{className:`flex items-baseline justify-between border-b border-slate-200 px-3 py-2`,children:[(0,z.jsx)(`span`,{className:`font-semibold`,children:n?n.name:`Conversation`}),n&&jD(n.ts)?(0,z.jsx)(`span`,{className:`text-xs text-slate-400`,children:jD(n.ts)}):null]}),(0,z.jsx)(`div`,{className:`flex-1 space-y-3 overflow-y-auto px-3 py-3`,children:e.thread.length===0?(0,z.jsx)(`div`,{className:`text-slate-400`,children:`Loading messages…`}):e.thread.map((e,t)=>(0,z.jsx)(CA,{m:e},e.urn||t))}),e.mode===`reply`?(0,z.jsx)(TA,{state:e,dispatch:t}):null,e.mode===`react`?(0,z.jsx)(EA,{state:e,dispatch:t}):null]}):(0,z.jsxs)(`div`,{className:`flex h-full flex-col items-center justify-center gap-1 p-8 text-center text-slate-400`,children:[(0,z.jsx)(`div`,{children:`✉ No conversation open`}),(0,z.jsx)(`div`,{className:`text-sm`,children:`Select a conversation to open it.`})]})}function TA({state:e,dispatch:t}){return(0,z.jsx)(`div`,{className:`border-t border-slate-200 p-2`,children:(0,z.jsx)(`textarea`,{autoFocus:!0,rows:2,value:e.draft,placeholder:`Reply… (Enter to send · Esc to cancel)`,onChange:e=>t(`setDraft`,e.target.value),onKeyDown:e=>{e.key===`Enter`&&!e.shiftKey?(e.preventDefault(),t(`submitReply`)):e.key===`Escape`&&(e.preventDefault(),t(`cancelCompose`))},className:`w-full resize-none rounded border border-slate-300 p-2 font-mono text-sm outline-none focus:border-amber-500`})})}function EA({state:e,dispatch:t}){return(0,z.jsxs)(`div`,{className:`flex items-center gap-2 border-t border-slate-200 p-2`,children:[(0,z.jsx)(`span`,{className:`text-amber-600`,children:`☺ React`}),bD.map((n,r)=>(0,z.jsx)(`button`,{type:`button`,onClick:()=>{t(`reactPick`,r),t(`submitReact`)},className:`rounded px-2 py-1 text-lg ${r===e.reactCursor?`bg-slate-200`:``} hover:bg-slate-100`,children:n},n)),(0,z.jsx)(`button`,{type:`button`,onClick:()=>t(`cancelCompose`),className:`ml-auto text-sm text-slate-500 hover:text-slate-700`,children:`Esc cancel`})]})}function DA({state:e,dispatch:t}){return e.recovery?(0,z.jsx)(xA,{rec:e.recovery,dispatch:t}):e.convos.length===0?e.lastFetch===0?(0,z.jsx)(rE,{label:`Loading conversations…`}):(0,z.jsx)(iE,{label:`All caught up — no conversations in your inbox.`}):(0,z.jsxs)(`div`,{className:`grid h-full grid-cols-3 font-mono text-sm outline-none`,tabIndex:0,onKeyDown:n=>{e.mode===`list`&&(n.key===`j`||n.key===`ArrowDown`?(n.preventDefault(),t(`cursorDown`)):n.key===`k`||n.key===`ArrowUp`?(n.preventDefault(),t(`cursorUp`)):n.key===`Enter`?(n.preventDefault(),t(`openThread`,e.convCursor)):n.key===`r`?(n.preventDefault(),t(`startReply`)):n.key===`e`?(n.preventDefault(),t(`startReact`)):n.key===`g`&&t(`refresh`))},children:[(0,z.jsx)(`div`,{className:`col-span-1 border-r border-slate-200`,children:(0,z.jsx)(SA,{state:e,dispatch:t})}),(0,z.jsx)(`div`,{className:`col-span-2`,children:(0,z.jsx)(wA,{state:e,dispatch:t})})]})}var OA=`user`,kA=[`ultra`,`strong`,`medium`,`light`],AA={ultra:`anthropic`,strong:`anthropic`,medium:`anthropic`,light:`anthropic`};function jA(e){return{ok:!0,data:e}}function MA(e){return{ok:!1,error:e}}function NA(e){return e==null?``:String(e)}function PA(e,t=`error`){return{kind:`settings-config`,display:{headline:`Settings unavailable`,explanation:e,nextStep:`Press g to retry.`,level:t,blocking:t===`error`}}}function FA(e){return{id:`config-get-${e}`,request:()=>({kind:`exec`,bin:`crtr`,args:[`sys`,`config`,`get`,e,`--scope`,OA,`--json`]}),parse:t=>{if(!t.ok||t.exitCode!==0)return MA(PA(NA(t.stderr||t.stdout||`crtr sys config get ${e} failed`)));let n;try{n=JSON.parse(String(t.stdout||``).trim()||`{}`)}catch{return MA(PA(`could not parse crtr sys config get ${e} output as JSON`))}return!n||typeof n!=`object`||!(`value`in n)?MA(PA(`unexpected response from crtr sys config get ${e}`)):jA(n.value)}}}function IA(e,t){return{id:`config-set-${e}`,request:()=>({kind:`exec`,bin:`crtr`,args:[`sys`,`config`,`set`,e,`--value`,t,`--scope`,OA,`--json`]}),parse:t=>{if(!t.ok||t.exitCode!==0)return MA(PA(NA(t.stderr||t.stdout||`crtr sys config set ${e} failed`),`error`));let n;try{n=JSON.parse(String(t.stdout||``).trim()||`{}`)}catch{return MA(PA(`could not parse crtr sys config set ${e} output as JSON`))}return!n||typeof n!=`object`||!(`value`in n)?MA(PA(`unexpected response from crtr sys config set ${e}`)):jA(n.value)}}}function LA(e){if(!e.modelLadders)return[];let t=[{kind:`defaultProvider`}];for(let e of kA)t.push({kind:`matrix`,strength:e});return t}function RA(e){let t=LA(e);return t.length===0?0:Math.min(e.cursor,t.length-1)}function zA(e){return LA(e)[RA(e)]}function BA(e,t){if(t.kind===`defaultProvider`)return{kind:`defaultProvider`,draft:``,value:e.modelLadders?.defaultProvider??`anthropic`,label:`default provider`};let n=e.matrixSelection[t.strength]??AA[t.strength];return{kind:`matrixCell`,strength:t.strength,provider:n,draft:``,value:e.modelLadders?.[n]?.[t.strength]??``,label:`${n} / ${t.strength}`}}async function VA(e){let t=await e.resolve(FA(`modelLadders`));return t.ok?jA({ladders:t.data}):t}function HA(e,t,n=`error`){n===`info`?e.signal.setStatus(t):e.signal.setBanner(t,n)}async function UA(e,t){let n=String(t.value??``).trim();if(t.kind===`defaultProvider`){if(n!==`anthropic`&&n!==`openai`)return HA(e,`default provider must be anthropic or openai`,`action`),!1}else if(t.kind===`matrixCell`&&!n)return HA(e,`model id cannot be empty`,`action`),!1;e.signal.setStatus(`Saving…`);let r=``,i=n;r=t.kind===`defaultProvider`?`modelLadders.defaultProvider`:`modelLadders.${t.provider}.${t.strength}`;let a=await e.execute(IA(r,i));return a.ok?(e.set(e=>{let r={...e,edit:null};return t.kind===`defaultProvider`&&r.modelLadders&&(r.modelLadders={...r.modelLadders,defaultProvider:n}),t.kind===`matrixCell`&&r.modelLadders&&(r.modelLadders={...r.modelLadders,[t.provider]:{...r.modelLadders[t.provider],[t.strength]:n}}),r}),e.signal.setStatus(`Saved`),await e.dispatch(`refresh`),!0):(HA(e,a.error.display.explanation||a.error.display.headline,a.error.display.level),e.signal.setStatus(null),!1)}var WA={manifest:{id:`settings`,title:`Model Ladders`,subtitle:`provider × strength matrix`,description:`edit model ladders through crtr commands`},init(){return{modelLadders:null,matrixSelection:{...AA},cursor:0,scroll:0,lastFetch:0,sourceError:null,edit:null}},sources:{modelLadders:FA(`modelLadders`)},intents:{async refresh(e){e.signal.setStatus(`Loading settings…`);let t=await VA(e);if(!t.ok){e.state.lastFetch===0||e.state.modelLadders===null?e.set(e=>({...e,sourceError:t.error,lastFetch:Date.now()})):HA(e,t.error.display.explanation||t.error.display.headline,t.error.display.level),e.signal.setStatus(null);return}e.set(e=>{let n={...e,modelLadders:t.data.ladders,sourceError:null,lastFetch:Date.now()};return{...n,cursor:Math.min(n.cursor,Math.max(0,LA(n).length-1))}}),e.signal.clearBanner(),e.signal.setStatus(null)},cursorDown:e=>e.set(e=>({...e,cursor:Math.min(Math.max(0,LA(e).length-1),e.cursor+1)})),cursorUp:e=>e.set(e=>({...e,cursor:Math.max(0,e.cursor-1)})),matrixLeft:e=>e.set(e=>{let t=zA(e);return!t||t.kind!==`matrix`?e:{...e,matrixSelection:{...e.matrixSelection,[t.strength]:`anthropic`}}}),matrixRight:e=>e.set(e=>{let t=zA(e);return!t||t.kind!==`matrix`?e:{...e,matrixSelection:{...e.matrixSelection,[t.strength]:`openai`}}}),beginEdit:e=>e.set(e=>{let t=zA(e);if(!t||e.modelLadders===null)return e;let n=BA(e,t);return{...e,edit:{...n}}}),beginEditFor:(e,t)=>e.set(e=>{if(e.modelLadders===null)return e;let n=t&&typeof t==`object`?t:{};if(n.kind===`matrix`&&typeof n.strength==`string`){let t=n.provider===`openai`?`openai`:`anthropic`,r=e.modelLadders?.[t]?.[n.strength]??``;return{...e,edit:{kind:`matrixCell`,strength:n.strength,provider:t,draft:r,value:r,label:`${t} / ${n.strength}`}}}if(n.kind===`defaultProvider`){let t=e.modelLadders.defaultProvider??`anthropic`;return{...e,edit:{kind:`defaultProvider`,draft:t,value:t,label:`default provider`}}}return e}),setDraft:(e,t)=>e.set(e=>e.edit?{...e,edit:{...e.edit,draft:typeof t==`string`?t:``}}:e),cancelEdit:e=>e.set(e=>e.edit?{...e,edit:null}:e),async submitEdit(e){let t=e.state.edit;t&&await UA(e,{kind:t.kind,value:t.draft,strength:t.strength,provider:t.provider})},async applyValue(e,t){let n=t&&typeof t==`object`?t:null;!n||e.state.modelLadders===null||await UA(e,n)},selectRow:(e,t)=>e.set(e=>{let n=t&&typeof t==`object`?t:{},r=LA(e).findIndex(e=>e.kind===`defaultProvider`&&n.kind===`defaultProvider`||e.kind===`matrix`&&n.kind===`matrix`&&n.strength===e.strength);return r<0?e:n.kind===`matrix`&&(n.provider===`anthropic`||n.provider===`openai`)&&typeof n.strength==`string`?{...e,cursor:r,matrixSelection:{...e.matrixSelection,[n.strength]:n.provider}}:{...e,cursor:r}}),quit:e=>e.signal.quit()}},GA=[`ultra`,`strong`,`medium`,`light`],KA=[`anthropic`,`openai`];function qA({choices:e,value:t,onPick:n}){return(0,z.jsx)(`div`,{className:`inline-flex overflow-hidden rounded border border-slate-300`,children:e.map(r=>(0,z.jsx)(`button`,{type:`button`,onClick:()=>n(r),className:`px-2.5 py-1 text-sm capitalize ${r===t?`bg-cyan-600 text-white`:`bg-white text-slate-600 hover:bg-slate-100`} ${r===e[0]?``:`border-l border-slate-300`}`,children:r},r))})}function JA(e,t,n){return!!e.edit&&e.edit.kind===`matrixCell`&&e.edit.strength===t&&e.edit.provider===n}function YA({state:e,dispatch:t}){if(e.sourceError&&e.modelLadders===null){let n=e.sourceError.display;return(0,z.jsx)(n.level===`error`?aE:oE,{headline:n.headline,explanation:n.explanation,nextStep:n.nextStep||void 0,onRetry:()=>t(`refresh`)})}if(e.modelLadders===null)return(0,z.jsx)(rE,{label:`Loading model ladders…`});let n=e.modelLadders;return(0,z.jsx)(`div`,{className:`h-full overflow-auto text-sm`,children:(0,z.jsxs)(`div`,{className:`space-y-5 p-4`,children:[(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`h1`,{className:`text-base font-semibold`,children:`Model ladders`}),(0,z.jsx)(`p`,{className:`text-xs text-slate-500`,children:`Click a model id to edit it; click a provider or strength to switch it. Changes save immediately.`})]}),(0,z.jsxs)(`div`,{className:`flex items-center gap-3`,children:[(0,z.jsx)(`span`,{className:`font-semibold`,children:`Default provider`}),(0,z.jsx)(qA,{choices:KA,value:n.defaultProvider??`anthropic`,onPick:e=>t(`applyValue`,{kind:`defaultProvider`,value:e})})]}),(0,z.jsx)(`div`,{className:`space-y-3`,children:GA.map(r=>(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`div`,{className:`mb-1 font-semibold capitalize`,children:r}),(0,z.jsx)(`div`,{className:`grid grid-cols-1 gap-2 md:grid-cols-2`,children:KA.map(i=>{if(JA(e,r,i))return(0,z.jsxs)(`div`,{className:`rounded border border-cyan-300 bg-cyan-50 p-2`,children:[(0,z.jsx)(`div`,{className:`mb-1 text-xs uppercase tracking-wide text-slate-400`,children:i}),(0,z.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,z.jsx)(`input`,{autoFocus:!0,value:e.edit.draft,onChange:e=>t(`setDraft`,e.target.value),onKeyDown:e=>{e.key===`Enter`?(e.preventDefault(),t(`submitEdit`)):e.key===`Escape`&&(e.preventDefault(),t(`cancelEdit`))},className:`flex-1 rounded border border-slate-300 bg-white px-2 py-1 font-mono text-sm outline-none focus:border-cyan-500`}),(0,z.jsx)(`button`,{type:`button`,onClick:()=>t(`submitEdit`),className:`rounded bg-cyan-600 px-2 py-1 text-xs font-semibold text-white hover:bg-cyan-700`,children:`Save`}),(0,z.jsx)(`button`,{type:`button`,onClick:()=>t(`cancelEdit`),className:`rounded border border-slate-300 bg-white px-2 py-1 text-xs text-slate-600 hover:bg-slate-100`,children:`Cancel`})]})]},i);let a=n[i]?.[r]??`—`;return(0,z.jsxs)(`button`,{type:`button`,title:`Click to edit`,onClick:()=>t(`beginEditFor`,{kind:`matrix`,strength:r,provider:i}),className:`rounded border border-slate-200 bg-white px-2 py-1 text-left hover:border-cyan-400 hover:bg-cyan-50`,children:[(0,z.jsx)(`div`,{className:`text-xs uppercase tracking-wide text-slate-400`,children:i}),(0,z.jsx)(`div`,{className:`truncate font-mono text-sm text-slate-800`,children:a})]},i)})})]},r))})]})})}var XA=`developer`,ZA=`base`,QA=`terminal`,$A=!0;function ej(e){return{ok:!0,data:e}}function tj(e){return{ok:!1,error:e}}function $(e){return e==null?``:String(e)}function nj(e){return e===!0||e===`true`||e===1||e===`1`}function rj(e){return Math.ceil(Math.max(0,e)/4)}function ij(e){return $(e).split(/\r?\n/).map(e=>e.trim()).find(Boolean)||``}function aj(e,t=`error`){return{kind:`prompt-review`,display:{headline:`Prompt Studio unavailable`,explanation:e,nextStep:`Press g to retry.`,level:t,blocking:t===`error`}}}function oj(e,t,n){let r={kind:`exec`,bin:e,args:t};return n===void 0?r:{...r,stdin:n}}function sj(e){return{kind:e.kind,mode:e.mode===`base`?`orchestrator`:`base`,lifecycle:e.lifecycle===`terminal`?`resident`:`terminal`,hasManager:e.hasManager,node:e.node}}function cj(e){return{kind:$(e.kind)||XA,mode:e.mode===`orchestrator`?`orchestrator`:`base`,lifecycle:e.lifecycle===`resident`?`resident`:`terminal`,hasManager:nj(e.hasManager),node:e.node?$(e.node):null}}function lj(e){return $(e).replace(/\r\n/g,`
78
+ `)}function uj(e){return lj(e).length}function dj(e){return`${e.kind}/${e.mode} · ${e.lifecycle} · manager:${e.hasManager?`yes`:`no`}${e.node?` · node:${e.node}`:``}`}function fj(e){return{"runtime-base":`Runtime base`,"spine-has-manager":`Spine (has manager)`,"spine-no-manager":`Spine (no manager)`,"lifecycle-terminal":`Lifecycle (terminal)`,"lifecycle-resident":`Lifecycle (resident)`,waiting:`Waiting`,"persona-body":`Persona body`,"orchestration-kernel":`Orchestration kernel`,"subpersona-menu":`Sub-persona menu`,"substrate-preferences":`Preferences substrate`,"substrate-memory-guidance":`Memory guidance substrate`,"substrate-knowledge":`Context message — not system prompt`}[e]||e.replace(/[-_]/g,` `)}function pj(e){return!!e&&typeof e==`object`&&`kind`in e&&`mode`in e&&`lifecycle`in e}function mj(e){return $(e).replace(/\s+/g,` `).trim()}function hj(e){return lj(e).split(`
79
+ `)}function gj(e,t){let n=hj(e),r=hj(t),i=0;for(;i<n.length&&i<r.length&&n[i]===r[i];)i++;let a=n.length-1,o=r.length-1;for(;a>=i&&o>=i&&n[a]===r[o];)a--,o--;let s=[],c=n.slice(0,i),l=n.slice(a+1);for(let e of c.slice(-2))s.push(` ${e}`);for(let e of n.slice(i,a+1))s.push(`- ${e}`);for(let e of r.slice(i,o+1))s.push(`+ ${e}`);for(let e of l.slice(0,2))s.push(` ${e}`);return s.join(`
80
+ `).trim()}function _j(e,t){return!e&&!t?``:e?t?e.text===t.text?e.text:gj(e.text,t.text):`- ${e.text}`:t?`+ ${t.text}`:``}function vj(e,t){let n=new Map(e.map(e=>[e.id,e])),r=new Map(t.map(e=>[e.id,e])),i=[...new Set([...n.keys(),...r.keys()])],a=[];for(let e of i){let t=n.get(e)||null,i=r.get(e)||null;t&&!i?a.push({id:e,label:t.label,kind:`removed`,left:t,right:null,summary:`${t.label} removed in compare config`,diffText:`- ${mj(t.text)}`}):!t&&i?a.push({id:e,label:i.label,kind:`added`,left:null,right:i,summary:`${i.label} added in compare config`,diffText:`+ ${mj(i.text)}`}):t&&i&&(t.included!==i.included||t.text!==i.text||t.condition!==i.condition||t.sourcePath!==i.sourcePath||t.scope!==i.scope)&&a.push({id:e,label:t.label,kind:`changed`,left:t,right:i,summary:`${t.label} changed`,diffText:_j(t,i)})}return a}var yj={id:`prompt-review-list`,request:()=>oj(`crtr`,[`sys`,`prompt-review`,`--list`,`--json`]),parse:e=>{if(!e.ok||e.exitCode!==0)return tj(aj(ij(e.stderr||e.stdout||`crtr sys prompt-review --list failed`)));let t;try{t=JSON.parse(String(e.stdout||``).trim()||`{}`)}catch{return tj(aj(`could not parse crtr sys prompt-review --list output as JSON`))}return!t||typeof t!=`object`||!Array.isArray(t.kinds)||!Array.isArray(t.modes)||!Array.isArray(t.lifecycles)||typeof t.subPersonas!=`object`?tj(aj(`unexpected response from crtr sys prompt-review --list`)):ej({kinds:t.kinds.map(e=>({kind:$(e.kind),whenToUse:$(e.whenToUse)})),modes:t.modes.filter(e=>e===`base`||e===`orchestrator`),lifecycles:t.lifecycles.filter(e=>e===`terminal`||e===`resident`),subPersonas:Object.fromEntries(Object.entries(t.subPersonas).map(([e,t])=>[e,Array.isArray(t)?t.map(e=>({kind:$(e.kind),whenToUse:$(e.whenToUse)})):[]]))})}},bj={id:`prompt-review-review`,request:e=>{let t=cj(e||{kind:XA,mode:ZA,lifecycle:QA,hasManager:$A,node:null}),n=[`sys`,`prompt-review`,`--kind`,t.kind,`--mode`,t.mode,`--lifecycle`,t.lifecycle,`--has-manager`,t.hasManager?`true`:`false`,`--json`];return t.node&&n.push(`--node`,t.node),oj(`crtr`,n)},parse:e=>{if(!e.ok||e.exitCode!==0)return tj(aj(ij(e.stderr||e.stdout||`crtr sys prompt-review failed`)));let t;try{t=JSON.parse(String(e.stdout||``).trim()||`{}`)}catch{return tj(aj(`could not parse crtr sys prompt-review output as JSON`))}if(!t||typeof t!=`object`||!pj(t.config)||!Array.isArray(t.layers)||typeof t.assembled!=`string`||!t.total||typeof t.total!=`object`||!Array.isArray(t.sources))return tj(aj(`unexpected response from crtr sys prompt-review`));let n=t.layers.map(e=>({id:$(e.id),label:$(e.label)||fj($(e.id)),group:e.group===`persona`||e.group===`generated`||e.group===`substrate`?e.group:`protocol`,source:$(e.source),sourcePath:e.sourcePath?$(e.sourcePath):null,scope:e.scope===`project`||e.scope===`user`||e.scope===`builtin`||e.scope===`generated`||e.scope===`runtime`?e.scope:`builtin`,included:e.included===!0,condition:e.condition==null?null:$(e.condition),text:lj(e.text),tokens:typeof e.tokens==`number`?e.tokens:rj(uj(e.text)),chars:typeof e.chars==`number`?e.chars:uj(e.text)})),r=cj({kind:$(t.config.kind)||XA,mode:t.config.mode===`orchestrator`?`orchestrator`:`base`,lifecycle:t.config.lifecycle===`resident`?`resident`:`terminal`,hasManager:nj(t.config.hasManager),node:t.config.node?$(t.config.node):null}),i=t.sources.map(e=>({id:$(e.id),label:$(e.label)||fj($(e.id)),path:e.path?$(e.path):``,scope:e.scope===`project`||e.scope===`user`||e.scope===`builtin`||e.scope===`generated`||e.scope===`runtime`?e.scope:`builtin`})).filter(e=>e.path),a=lj(t.assembled);return ej({config:r,layers:n,assembled:a,total:{tokens:typeof t.total.tokens==`number`?t.total.tokens:rj(uj(a)),chars:typeof t.total.chars==`number`?t.total.chars:uj(a)},sources:i})}},xj={id:`prompt-review-nodes`,request:()=>oj(`crtr`,[`node`,`inspect`,`list`,`--json`]),parse:e=>{if(!e.ok||e.exitCode!==0)return tj(aj(ij(e.stderr||e.stdout||`crtr node inspect list failed`),`action`));let t;try{t=JSON.parse(String(e.stdout||``).trim()||`{}`)}catch{return tj(aj(`could not parse crtr node inspect list output as JSON`))}return!t||typeof t!=`object`||!Array.isArray(t.nodes)?tj(aj(`unexpected response from crtr node inspect list`)):ej(t.nodes.map(e=>({node_id:$(e.node_id),name:$(e.name),kind:$(e.kind),mode:$(e.mode),lifecycle:$(e.lifecycle),status:$(e.status),cwd:$(e.cwd),parent:e.parent==null?null:$(e.parent),created:$(e.created),enterable:e.enterable===!0})).filter(e=>e.status===`active`||e.status===`idle`))}},Sj={id:`prompt-review-export`,request:e=>oj(`crtr`,[`sys`,`prompt-review`,`export`,`--json`],JSON.stringify(e||{})),parse:e=>{if(!e.ok||e.exitCode!==0)return tj(aj(ij(e.stderr||e.stdout||`crtr sys prompt-review export failed`)));let t;try{t=JSON.parse(String(e.stdout||``).trim()||`{}`)}catch{return tj(aj(`could not parse crtr sys prompt-review export output as JSON`))}return!t||typeof t!=`object`||typeof t.path!=`string`?tj(aj(`unexpected response from crtr sys prompt-review export`)):ej({path:t.path})}};async function Cj(e,t,n){let r=[e.resolve(yj),e.resolve(bj,t),e.resolve(xj)];n&&r.push(e.resolve(bj,n));let[i,a,o,s]=await Promise.all(r);if(!a.ok)throw a.error;return{list:i.ok?i.data:null,review:a.data,liveNodes:o.ok?o.data:null,compareReview:n&&s&&s.ok?s.data:null}}function wj(e){let t=e.review||[];return t.find(t=>t.id===e.selectedLayerId)||t[e.cursor]||t.find(e=>e.included)||t[0]}function Tj(e){let t=e.compareReview||[];return t.find(t=>t.id===e.compareSelectedLayerId)||t[e.compareCursor]||t.find(e=>e.included)||t[0]}function Ej(e,t){return!t||t.length===0?``:t.find(e=>e.included)?.id||t[0].id}function Dj(e,t){if(!e||e.length===0)return 0;let n=t?e.findIndex(e=>e.id===t):-1;return n>=0?n:Math.max(0,e.findIndex(e=>e.included)>=0?e.findIndex(e=>e.included):0)}function Oj(e,t,n,r,i){let a=r?r.layers:null,o=i?i.layers:null,s={...e,config:t,compareConfig:n,review:a,compareReview:o};if(a&&a.length){let n=e.selectedLayerId&&a.some(t=>t.id===e.selectedLayerId)?e.selectedLayerId:Ej(t,a);s.selectedLayerId=n,s.cursor=Dj(a,n);let r={...e.expanded};n in r||(r[n]=!0),s.expanded=r}return o&&o.length&&(s.compareSelectedLayerId=e.compareSelectedLayerId&&o.some(t=>t.id===e.compareSelectedLayerId)?e.compareSelectedLayerId:Ej(n||t,o),s.compareCursor=Dj(o,s.compareSelectedLayerId),s.compareSelectedLayerId in s.expanded||(s.expanded={...s.expanded,[s.compareSelectedLayerId]:!0})),s.sources=r?r.sources:[],s.assembled=r?r.assembled:null,s.totalTokens=r?r.total.tokens:0,s.totalChars=r?r.total.chars:0,s.compareAssembled=i?i.assembled:null,s}var kj={manifest:{id:`prompt-review`,title:`Prompt Studio`,subtitle:`prompt assembly review + export`,description:`inspect assembled prompts, provenance, comments, and diffs`},init(){let e=cj({kind:XA,mode:ZA,lifecycle:QA,hasManager:$A,node:null});return{config:e,compareConfig:sj(e),list:null,liveNodes:[],review:null,compareReview:null,sources:[],totalTokens:0,totalChars:0,assembled:null,compareAssembled:null,selectedLayerId:null,cursor:0,scroll:0,compareSelectedLayerId:null,compareCursor:0,expanded:{},viewMode:`layered`,comments:[],draftComment:null,rawSelection:``,lastExportPath:null,compareOpen:!0,lastFetch:0,sourceError:null,auxiliaryError:null}},sources:{list:yj,nodes:xj,review:bj},commands:{export:Sj},intents:{async refresh(e){e.signal.setStatus(`Loading Prompt Studio…`);let t=cj(e.state.config),n=e.state.compareOpen&&e.state.compareConfig?cj(e.state.compareConfig):null;try{let r=await Cj(e,t,n);e.set(e=>{let i=Oj({...e},t,n,r.review,r.compareReview);return i.list=r.list||e.list,i.liveNodes=r.liveNodes||e.liveNodes,i.sourceError=null,i.auxiliaryError=null,i.lastFetch=Date.now(),i}),r.list&&r.liveNodes&&e.signal.clearBanner(),e.signal.setStatus(null)}catch(t){let n=t;e.set(e=>{let t={...e,lastFetch:Date.now()};return e.review?t.auxiliaryError=n:t.sourceError=n,t}),e.state.review&&e.signal.setBanner(n.display.explanation||n.display.headline,n.display.level),e.signal.setStatus(null)}},setKind(e,t){return e.set(e=>({...e,config:{...e.config,kind:$(t)||XA}})),e.dispatch(`refresh`)},setMode(e,t){return e.set(e=>({...e,config:{...e.config,mode:t===`orchestrator`?`orchestrator`:`base`}})),e.dispatch(`refresh`)},setLifecycle(e,t){return e.set(e=>({...e,config:{...e.config,lifecycle:t===`resident`?`resident`:`terminal`}})),e.dispatch(`refresh`)},toggleHasManager(e){return e.set(e=>({...e,config:{...e.config,hasManager:!e.config.hasManager}})),e.dispatch(`refresh`)},setNode(e,t){return e.set(e=>({...e,config:{...e.config,node:t?$(t):null}})),e.dispatch(`refresh`)},setCompareKind(e,t){return e.set(e=>({...e,compareConfig:{...e.compareConfig||sj(e.config),kind:$(t)||XA}})),e.dispatch(`refresh`)},setCompareMode(e,t){return e.set(e=>({...e,compareConfig:{...e.compareConfig||sj(e.config),mode:t===`orchestrator`?`orchestrator`:`base`}})),e.dispatch(`refresh`)},setCompareLifecycle(e,t){return e.set(e=>({...e,compareConfig:{...e.compareConfig||sj(e.config),lifecycle:t===`resident`?`resident`:`terminal`}})),e.dispatch(`refresh`)},toggleCompareHasManager(e){return e.set(e=>({...e,compareConfig:{...e.compareConfig||sj(e.config),hasManager:!(e.compareConfig||sj(e.config)).hasManager}})),e.dispatch(`refresh`)},setCompareNode(e,t){return e.set(e=>({...e,compareConfig:{...e.compareConfig||sj(e.config),node:t?$(t):null}})),e.dispatch(`refresh`)},toggleCompareOpen(e){return e.set(e=>{let t=!e.compareOpen,n=t?e.compareConfig||sj(e.config):e.compareConfig;return{...e,compareOpen:t,compareConfig:n}}),e.dispatch(`refresh`)},setViewMode(e,t){e.set(e=>({...e,viewMode:t===`raw`?`raw`:`layered`}))},selectLayer(e,t){e.set(e=>{let n=$(t)||e.selectedLayerId,r=e.review?Math.max(0,e.review.findIndex(e=>e.id===n)):e.cursor;return{...e,selectedLayerId:n,cursor:r}})},cursorDown(e){e.set(e=>{if(!e.review||e.review.length===0)return e;let t=Math.min(e.review.length-1,e.cursor+1),n=e.review[t];return{...e,cursor:t,selectedLayerId:n?n.id:e.selectedLayerId}})},cursorUp(e){e.set(e=>{if(!e.review||e.review.length===0)return e;let t=Math.max(0,e.cursor-1),n=e.review[t];return{...e,cursor:t,selectedLayerId:n?n.id:e.selectedLayerId}})},selectCompareLayer(e,t){e.set(e=>{let n=$(t)||e.compareSelectedLayerId,r=e.compareReview?Math.max(0,e.compareReview.findIndex(e=>e.id===n)):e.compareCursor;return{...e,compareSelectedLayerId:n,compareCursor:r}})},compareCursorDown(e){e.set(e=>{if(!e.compareReview||e.compareReview.length===0)return e;let t=Math.min(e.compareReview.length-1,e.compareCursor+1),n=e.compareReview[t];return{...e,compareCursor:t,compareSelectedLayerId:n?n.id:e.compareSelectedLayerId}})},compareCursorUp(e){e.set(e=>{if(!e.compareReview||e.compareReview.length===0)return e;let t=Math.max(0,e.compareCursor-1),n=e.compareReview[t];return{...e,compareCursor:t,compareSelectedLayerId:n?n.id:e.compareSelectedLayerId}})},toggleLayerExpanded(e,t){e.set(e=>({...e,expanded:{...e.expanded,[$(t)]:!e.expanded[$(t)]}}))},captureRawSelection(e,t){e.set(e=>({...e,rawSelection:mj(t)}))},beginComment(e){let t=wj(e.state);if(!t)return;let n=e.state.viewMode===`raw`&&e.state.rawSelection||null;e.set(e=>({...e,draftComment:{layerId:t.id,label:t.label,sourcePath:t.sourcePath,scope:t.scope,anchor:n,body:``}}))},setCommentBody(e,t){e.set(e=>e.draftComment?{...e,draftComment:{...e.draftComment,body:$(t)}}:e)},cancelComment(e){e.set(e=>({...e,draftComment:null}))},saveComment(e){let t=e.state.draftComment;!t||!mj(t.body)||e.set(e=>({...e,comments:[...e.comments,{...t,body:mj(t.body)}],draftComment:null}))},removeComment(e,t){let n=typeof t==`number`?t:Number(t);!Number.isFinite(n)||n<0||e.set(e=>({...e,comments:e.comments.filter((e,t)=>t!==n)}))},async exportComments(e){if(!e.state.review)return;let t={config:e.state.config,comments:e.state.comments,sources:e.state.sources};e.signal.setStatus(`Exporting review…`);let n=await e.execute(Sj,t);if(!n.ok){e.signal.setBanner(n.error.display.explanation||n.error.display.headline,n.error.display.level),e.signal.setStatus(null);return}e.set(e=>({...e,lastExportPath:n.data.path})),e.signal.setStatus(`Review copied: ${n.data.path}`)},copyRaw(e){e.signal.setStatus(`Use Copy raw in the web view; the TUI is read-only.`)}}},Aj=2e5,jj={protocol:`border-cyan-200 bg-cyan-50 text-cyan-800`,persona:`border-amber-200 bg-amber-50 text-amber-800`,generated:`border-violet-200 bg-violet-50 text-violet-800`,substrate:`border-lime-200 bg-lime-50 text-lime-800`},Mj={builtin:`border-slate-200 bg-slate-50 text-slate-700`,project:`border-emerald-200 bg-emerald-50 text-emerald-800`,user:`border-amber-200 bg-amber-50 text-amber-800`,generated:`border-violet-200 bg-violet-50 text-violet-800`,runtime:`border-lime-200 bg-lime-50 text-lime-800`},Nj={added:`border-emerald-200 bg-emerald-50 text-emerald-800`,removed:`border-rose-200 bg-rose-50 text-rose-800`,changed:`border-amber-200 bg-amber-50 text-amber-800`};function Pj(e){return Mj[e]||`border-slate-200 bg-slate-50 text-slate-700`}function Fj(e){return jj[e]||`border-slate-200 bg-slate-50 text-slate-700`}function Ij(e){return new Intl.NumberFormat(`en-US`).format(Math.max(0,Math.floor(e||0)))}async function Lj(e){if(!e)return!1;try{return await navigator.clipboard.writeText(e),!0}catch{return!1}}function Rj({label:e,value:t,cls:n}){return(0,z.jsxs)(`span`,{className:`inline-flex items-center gap-1 rounded-full border px-2 py-0.5 text-[11px] ${n}`,children:[(0,z.jsx)(`span`,{className:`opacity-60`,children:e}),(0,z.jsx)(`span`,{className:`font-semibold`,children:t})]})}function zj(e){return(0,z.jsx)(`button`,{type:`button`,title:e.title,onClick:e.onClick,className:`rounded-lg border px-3 py-1.5 text-left text-sm transition ${e.active?`border-slate-900 bg-slate-900 text-white`:`border-slate-200 bg-white text-slate-700 hover:bg-slate-50`} ${e.className||``}`,children:e.children})}function Bj({state:e,dispatch:t}){let n=e.list?.kinds||[{kind:e.config.kind,whenToUse:``}],r=e.list?.modes||[`base`,`orchestrator`],i=e.list?.lifecycles||[`terminal`,`resident`],a=e.list?.subPersonas?.[e.config.kind]||[],o=e.config.node?e.liveNodes.find(t=>t.node_id===e.config.node)?.name||e.config.node:`none`;return(0,z.jsxs)(`section`,{className:`flex min-h-0 flex-col overflow-hidden rounded-2xl border border-slate-200 bg-white shadow-sm`,children:[(0,z.jsxs)(`div`,{className:`border-b border-slate-200 px-4 py-3`,children:[(0,z.jsx)(`div`,{className:`text-xs font-semibold uppercase tracking-[0.2em] text-slate-400`,children:`Config`}),(0,z.jsx)(`div`,{className:`mt-1 text-sm text-slate-600`,children:dj(e.config)})]}),(0,z.jsxs)(`div`,{className:`min-h-0 flex-1 space-y-4 overflow-y-auto p-4`,children:[(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`div`,{className:`mb-2 text-xs font-semibold uppercase tracking-[0.18em] text-slate-400`,children:`Kind`}),(0,z.jsx)(`select`,{className:`w-full rounded-lg border border-slate-200 bg-white px-3 py-2 text-sm outline-none focus:border-slate-400`,value:e.config.kind,onChange:e=>t(`setKind`,e.target.value),children:n.map(e=>(0,z.jsx)(`option`,{value:e.kind,children:e.kind},e.kind))}),a.length?(0,z.jsxs)(`div`,{className:`mt-2 text-xs text-slate-500`,children:[`Sub-personas: `,a.map(e=>e.kind).join(`, `)]}):(0,z.jsx)(`div`,{className:`mt-2 text-xs text-slate-400`,children:`No sub-personas listed.`})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`div`,{className:`mb-2 text-xs font-semibold uppercase tracking-[0.18em] text-slate-400`,children:`Mode`}),(0,z.jsx)(`div`,{className:`grid grid-cols-2 gap-2`,children:r.map(n=>(0,z.jsx)(zj,{label:n,active:e.config.mode===n,onClick:()=>t(`setMode`,n),children:(0,z.jsx)(`span`,{className:`capitalize`,children:n})},n))})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`div`,{className:`mb-2 text-xs font-semibold uppercase tracking-[0.18em] text-slate-400`,children:`Lifecycle`}),(0,z.jsx)(`div`,{className:`grid grid-cols-2 gap-2`,children:i.map(n=>(0,z.jsx)(zj,{label:n,active:e.config.lifecycle===n,onClick:()=>t(`setLifecycle`,n),children:(0,z.jsx)(`span`,{className:`capitalize`,children:n})},n))})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`div`,{className:`mb-2 text-xs font-semibold uppercase tracking-[0.18em] text-slate-400`,children:`Has manager`}),(0,z.jsxs)(`button`,{type:`button`,onClick:()=>t(`toggleHasManager`),className:`flex w-full items-center justify-between rounded-lg border px-3 py-2 text-sm ${e.config.hasManager?`border-cyan-200 bg-cyan-50 text-cyan-800`:`border-slate-200 bg-slate-50 text-slate-700`}`,children:[(0,z.jsx)(`span`,{children:e.config.hasManager?`yes`:`no`}),(0,z.jsx)(`span`,{className:`text-xs opacity-60`,children:`re-fetches prompt`})]})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`div`,{className:`mb-2 text-xs font-semibold uppercase tracking-[0.18em] text-slate-400`,children:`Node`}),(0,z.jsxs)(`select`,{className:`w-full rounded-lg border border-slate-200 bg-white px-3 py-2 text-sm outline-none focus:border-slate-400`,value:e.config.node||``,onChange:e=>t(`setNode`,e.target.value||null),children:[(0,z.jsx)(`option`,{value:``,children:`none`}),e.liveNodes.map(e=>(0,z.jsxs)(`option`,{value:e.node_id,children:[e.name,` · `,e.kind,` · `,e.status]},e.node_id))]}),(0,z.jsx)(`div`,{className:`mt-2 text-xs text-slate-500`,children:o})]}),(0,z.jsxs)(`div`,{className:`rounded-xl border border-slate-200 bg-slate-50 p-3`,children:[(0,z.jsx)(`div`,{className:`text-xs font-semibold uppercase tracking-[0.18em] text-slate-400`,children:`Sub-personas`}),a.length?(0,z.jsx)(`div`,{className:`mt-2 space-y-2`,children:a.map(e=>(0,z.jsxs)(`div`,{className:`rounded-lg border border-slate-200 bg-white px-3 py-2`,children:[(0,z.jsx)(`div`,{className:`font-medium text-slate-900`,children:e.kind}),(0,z.jsx)(`div`,{className:`text-xs text-slate-500`,children:e.whenToUse})]},e.kind))}):(0,z.jsx)(`div`,{className:`mt-2 text-xs text-slate-500`,children:`No sub-persona entries for this kind.`})]})]})]})}function Vj({layer:e,state:t,selected:n,dispatch:r}){let i=!!t.expanded[e.id],a=e.included,o=a?`opacity-100`:`opacity-55`,s=!a&&e.condition?`✕ ${e.condition}`:null,c=e.sourcePath||e.source;return(0,z.jsxs)(`div`,{className:`rounded-xl border ${n?`border-slate-900 ring-1 ring-slate-900/10`:`border-slate-200`} bg-white ${o}`,children:[(0,z.jsxs)(`button`,{type:`button`,onClick:()=>{r(`selectLayer`,e.id),r(`toggleLayerExpanded`,e.id)},className:`flex w-full items-start gap-3 px-3 py-3 text-left`,children:[(0,z.jsx)(`div`,{className:`mt-0.5 text-slate-400`,children:i?`▾`:`▸`}),(0,z.jsxs)(`div`,{className:`min-w-0 flex-1`,children:[(0,z.jsxs)(`div`,{className:`flex flex-wrap items-center gap-2`,children:[(0,z.jsx)(`div`,{className:`truncate font-semibold text-slate-900`,children:e.label}),(0,z.jsx)(`span`,{className:`rounded-full border px-2 py-0.5 text-[11px] ${Fj(e.group)}`,children:e.group}),(0,z.jsx)(`span`,{className:`rounded-full border px-2 py-0.5 text-[11px] ${Pj(e.scope)}`,children:e.scope}),(0,z.jsxs)(`span`,{className:`rounded-full border border-slate-200 bg-slate-50 px-2 py-0.5 text-[11px] text-slate-700`,children:[`≈`,Ij(e.tokens),` tok`]}),a?null:(0,z.jsx)(`span`,{className:`rounded-full border border-rose-200 bg-rose-50 px-2 py-0.5 text-[11px] text-rose-700`,children:`excluded`})]}),(0,z.jsxs)(`div`,{className:`mt-1 flex flex-wrap items-center gap-2 text-xs text-slate-500`,children:[(0,z.jsx)(`span`,{className:`truncate`,children:e.source}),s?(0,z.jsx)(`span`,{className:`rounded-full border border-rose-200 bg-rose-50 px-2 py-0.5 text-rose-700`,children:s}):null]})]})]}),i?(0,z.jsxs)(`div`,{className:`border-t border-slate-200 px-3 py-3`,children:[(0,z.jsx)(`pre`,{className:`max-h-72 overflow-auto whitespace-pre-wrap break-words rounded-lg bg-slate-950 px-3 py-2 font-mono text-[12px] leading-5 text-slate-100`,children:e.text}),(0,z.jsxs)(`div`,{className:`mt-2 flex flex-wrap items-center gap-2 text-xs text-slate-500`,children:[(0,z.jsx)(`span`,{children:a?`included`:`excluded`}),(0,z.jsx)(`span`,{children:`·`}),(0,z.jsxs)(`span`,{children:[Ij(e.chars),` chars`]}),(0,z.jsx)(`span`,{children:`·`}),(0,z.jsx)(`span`,{children:c})]})]}):null]})}function Hj({state:e,dispatch:t}){let n=e.review||[],r=wj(e)||n[0]||null,i=e.assembled||``,a=Math.min(100,e.totalTokens/Aj*100);return(0,z.jsxs)(`section`,{className:`flex min-h-0 flex-col overflow-hidden rounded-2xl border border-slate-200 bg-white shadow-sm`,children:[(0,z.jsxs)(`div`,{className:`border-b border-slate-200 px-4 py-3`,children:[(0,z.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,z.jsx)(`div`,{className:`text-xs font-semibold uppercase tracking-[0.2em] text-slate-400`,children:`Assembled`}),(0,z.jsxs)(`div`,{className:`ml-auto flex items-center gap-2`,children:[(0,z.jsx)(zj,{label:`layered`,active:e.viewMode===`layered`,onClick:()=>t(`setViewMode`,`layered`),className:`px-2 py-1 text-xs`,children:(0,z.jsx)(`span`,{children:`Layered`})}),(0,z.jsx)(zj,{label:`raw`,active:e.viewMode===`raw`,onClick:()=>t(`setViewMode`,`raw`),className:`px-2 py-1 text-xs`,children:(0,z.jsx)(`span`,{children:`Raw`})})]})]}),(0,z.jsx)(`div`,{className:`mt-1 text-sm text-slate-600`,children:dj(e.config)})]}),(0,z.jsx)(`div`,{className:`min-h-0 flex-1 overflow-y-auto p-4`,children:e.viewMode===`raw`?(0,z.jsx)(`pre`,{className:`select-text whitespace-pre-wrap break-words rounded-xl border border-slate-200 bg-slate-950 p-4 font-mono text-[12px] leading-5 text-slate-100`,onMouseUp:e=>{t(`captureRawSelection`,window.getSelection?.()?.toString()||``)},children:i}):(0,z.jsx)(`div`,{className:`space-y-3`,children:n.map(n=>(0,z.jsx)(Vj,{layer:n,state:e,selected:r?.id===n.id,dispatch:t},n.id))})}),(0,z.jsxs)(`div`,{className:`border-t border-slate-200 p-4`,children:[(0,z.jsxs)(`div`,{className:`flex items-center justify-between text-xs text-slate-500`,children:[(0,z.jsxs)(`div`,{children:[`≈`,Ij(e.totalTokens),` tokens · `,Ij(e.totalChars),` chars`]}),(0,z.jsxs)(`div`,{children:[Math.round(a),`% of `,Ij(Aj),` budget`]})]}),(0,z.jsx)(`div`,{className:`mt-2 h-2 overflow-hidden rounded-full bg-slate-100`,children:(0,z.jsx)(`div`,{className:`h-full rounded-full ${a>90?`bg-rose-500`:a>75?`bg-amber-500`:`bg-cyan-500`}`,style:{width:`${Math.min(100,a)}%`}})})]})]})}function Uj({state:e,dispatch:t}){let n=e.draftComment;return n?(0,z.jsxs)(`div`,{className:`rounded-xl border border-slate-200 bg-slate-50 p-3`,children:[(0,z.jsxs)(`div`,{className:`flex items-center gap-2 text-xs text-slate-500`,children:[(0,z.jsx)(`span`,{className:`font-semibold text-slate-700`,children:`Commenting on`}),(0,z.jsx)(`span`,{className:`rounded-full border border-slate-200 bg-white px-2 py-0.5 text-slate-700`,children:n.label}),(0,z.jsx)(`span`,{className:`rounded-full border px-2 py-0.5 ${Pj(n.scope)}`,children:n.scope})]}),n.anchor?(0,z.jsxs)(`div`,{className:`mt-2 rounded-lg border border-slate-200 bg-white p-2 text-xs text-slate-600`,children:[(0,z.jsx)(`div`,{className:`mb-1 font-semibold text-slate-500`,children:`Anchor`}),(0,z.jsx)(`pre`,{className:`whitespace-pre-wrap break-words font-mono text-[11px] leading-5`,children:n.anchor})]}):null,(0,z.jsx)(`textarea`,{autoFocus:!0,value:n.body,onChange:e=>t(`setCommentBody`,e.target.value),rows:4,placeholder:`Write the review comment here…`,className:`mt-2 w-full rounded-lg border border-slate-200 bg-white p-3 font-mono text-sm outline-none focus:border-slate-400`}),(0,z.jsxs)(`div`,{className:`mt-2 flex gap-2`,children:[(0,z.jsx)(`button`,{type:`button`,onClick:()=>t(`saveComment`),className:`rounded-lg bg-slate-900 px-3 py-1.5 text-sm text-white hover:bg-slate-800`,children:`Save comment`}),(0,z.jsx)(`button`,{type:`button`,onClick:()=>t(`cancelComment`),className:`rounded-lg border border-slate-200 bg-white px-3 py-1.5 text-sm text-slate-700 hover:bg-slate-50`,children:`Cancel`})]})]}):null}function Wj({comment:e,index:t,onDelete:n}){return(0,z.jsxs)(`div`,{className:`rounded-xl border border-slate-200 bg-white p-3`,children:[(0,z.jsxs)(`div`,{className:`flex items-center gap-2 text-xs text-slate-500`,children:[(0,z.jsx)(`span`,{className:`font-semibold text-slate-900`,children:e.label}),(0,z.jsx)(`span`,{className:`rounded-full border px-2 py-0.5 ${Pj(e.scope)}`,children:e.scope}),(0,z.jsxs)(`span`,{className:`ml-auto text-slate-400`,children:[`#`,t+1]})]}),e.anchor?(0,z.jsx)(`pre`,{className:`mt-2 whitespace-pre-wrap break-words rounded-lg bg-slate-50 p-2 font-mono text-[11px] leading-5 text-slate-600`,children:e.anchor}):null,(0,z.jsx)(`div`,{className:`mt-2 whitespace-pre-wrap text-sm text-slate-800`,children:e.body}),(0,z.jsxs)(`div`,{className:`mt-2 flex items-center gap-2 text-xs text-slate-500`,children:[e.sourcePath?(0,z.jsx)(`span`,{className:`truncate`,children:e.sourcePath}):(0,z.jsx)(`span`,{className:`text-slate-400`,children:`generated layer`}),(0,z.jsx)(`button`,{type:`button`,onClick:n,className:`ml-auto rounded-full border border-slate-200 px-2 py-0.5 hover:bg-slate-50`,children:`Remove`})]})]})}function Gj({state:e,dispatch:t}){let n=wj(e)||e.review?.[0]||null,r=Tj(e)||e.compareReview?.[0]||null,i=(0,S.useMemo)(()=>vj(e.review||[],e.compareReview||[]),[e.review,e.compareReview]),a=e.compareConfig||e.config;return(0,z.jsxs)(`section`,{className:`flex min-h-0 flex-col overflow-hidden rounded-2xl border border-slate-200 bg-white shadow-sm`,children:[(0,z.jsxs)(`div`,{className:`border-b border-slate-200 px-4 py-3`,children:[(0,z.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,z.jsx)(`div`,{className:`text-xs font-semibold uppercase tracking-[0.2em] text-slate-400`,children:`Inspector`}),(0,z.jsx)(`button`,{type:`button`,onClick:()=>t(`beginComment`),disabled:!n,className:`ml-auto rounded-full border border-slate-200 bg-white px-3 py-1 text-xs text-slate-700 hover:bg-slate-50 disabled:cursor-not-allowed disabled:opacity-40`,children:`Add comment`})]}),(0,z.jsx)(`div`,{className:`mt-1 text-sm text-slate-600`,children:n?n.label:`No layer selected`})]}),(0,z.jsxs)(`div`,{className:`min-h-0 flex-1 space-y-4 overflow-y-auto p-4`,children:[n?(0,z.jsxs)(`div`,{className:`rounded-xl border border-slate-200 bg-slate-50 p-3`,children:[(0,z.jsxs)(`div`,{className:`flex items-start gap-2`,children:[(0,z.jsxs)(`div`,{className:`min-w-0 flex-1`,children:[(0,z.jsx)(`div`,{className:`font-semibold text-slate-900`,children:n.label}),(0,z.jsx)(`div`,{className:`mt-1 text-xs text-slate-500`,children:n.source})]}),(0,z.jsx)(`span`,{className:`rounded-full border px-2 py-0.5 text-[11px] ${Fj(n.group)}`,children:n.group})]}),(0,z.jsxs)(`div`,{className:`mt-3 flex flex-wrap gap-2 text-[11px]`,children:[(0,z.jsx)(Rj,{label:`scope`,value:n.scope,cls:Pj(n.scope)}),(0,z.jsx)(Rj,{label:`status`,value:n.included?`included`:`excluded`,cls:n.included?`border-emerald-200 bg-emerald-50 text-emerald-800`:`border-rose-200 bg-rose-50 text-rose-800`}),(0,z.jsx)(Rj,{label:`tokens`,value:`≈${Ij(n.tokens)}`,cls:`border-slate-200 bg-white text-slate-700`}),(0,z.jsx)(Rj,{label:`chars`,value:Ij(n.chars),cls:`border-slate-200 bg-white text-slate-700`})]}),n.condition?(0,z.jsxs)(`div`,{className:`mt-2 rounded-lg border border-rose-200 bg-rose-50 px-3 py-2 text-xs text-rose-700`,children:[`Condition: `,n.condition]}):null,(0,z.jsxs)(`div`,{className:`mt-2 flex items-center gap-2 text-xs text-slate-500`,children:[(0,z.jsx)(`div`,{className:`min-w-0 flex-1 truncate font-mono`,children:n.sourcePath||`no source path (generated or runtime-spliced)`}),n.sourcePath?(0,z.jsx)(`button`,{type:`button`,onClick:async()=>{let e=await Lj(n.sourcePath||``);tm(e?`Source path copied`:`Could not copy source path`,e?`success`:`info`)},className:`rounded-full border border-slate-200 px-2 py-0.5 hover:bg-white`,children:`Copy path`}):null]}),(0,z.jsx)(`pre`,{className:`mt-3 max-h-44 overflow-auto whitespace-pre-wrap break-words rounded-lg bg-slate-950 px-3 py-2 font-mono text-[12px] leading-5 text-slate-100`,children:n.text})]}):(0,z.jsx)(iE,{label:`No layer selected.`}),(0,z.jsxs)(`div`,{className:`rounded-xl border border-slate-200 bg-slate-50 p-3`,children:[(0,z.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,z.jsx)(`div`,{className:`text-xs font-semibold uppercase tracking-[0.18em] text-slate-400`,children:`Compare`}),(0,z.jsx)(`button`,{type:`button`,onClick:()=>t(`toggleCompareOpen`),className:`ml-auto rounded-full border border-slate-200 bg-white px-3 py-1 text-xs text-slate-700 hover:bg-slate-50`,children:e.compareOpen?`Hide`:`Show`})]}),e.compareOpen?(0,z.jsxs)(`div`,{className:`mt-3 space-y-3`,children:[(0,z.jsxs)(`div`,{className:`grid grid-cols-1 gap-2 lg:grid-cols-2`,children:[(0,z.jsx)(`select`,{className:`w-full rounded-lg border border-slate-200 bg-white px-3 py-2 text-sm outline-none focus:border-slate-400`,value:a.kind,onChange:e=>t(`setCompareKind`,e.target.value),children:(e.list?.kinds||[{kind:a.kind}]).map(e=>(0,z.jsx)(`option`,{value:e.kind,children:e.kind},e.kind))}),(0,z.jsxs)(`div`,{className:`grid grid-cols-2 gap-2`,children:[(0,z.jsx)(`button`,{type:`button`,onClick:()=>t(`setCompareMode`,`base`),className:`rounded-lg border px-2 py-1 text-sm ${a.mode===`base`?`border-slate-900 bg-slate-900 text-white`:`border-slate-200 bg-white text-slate-700`}`,children:`base`}),(0,z.jsx)(`button`,{type:`button`,onClick:()=>t(`setCompareMode`,`orchestrator`),className:`rounded-lg border px-2 py-1 text-sm ${a.mode===`orchestrator`?`border-slate-900 bg-slate-900 text-white`:`border-slate-200 bg-white text-slate-700`}`,children:`orchestrator`})]})]}),(0,z.jsxs)(`div`,{className:`grid grid-cols-1 gap-2 lg:grid-cols-2`,children:[(0,z.jsxs)(`div`,{className:`grid grid-cols-2 gap-2`,children:[(0,z.jsx)(`button`,{type:`button`,onClick:()=>t(`setCompareLifecycle`,`terminal`),className:`rounded-lg border px-2 py-1 text-sm ${a.lifecycle===`terminal`?`border-slate-900 bg-slate-900 text-white`:`border-slate-200 bg-white text-slate-700`}`,children:`terminal`}),(0,z.jsx)(`button`,{type:`button`,onClick:()=>t(`setCompareLifecycle`,`resident`),className:`rounded-lg border px-2 py-1 text-sm ${a.lifecycle===`resident`?`border-slate-900 bg-slate-900 text-white`:`border-slate-200 bg-white text-slate-700`}`,children:`resident`})]}),(0,z.jsxs)(`button`,{type:`button`,onClick:()=>t(`toggleCompareHasManager`),className:`flex items-center justify-between rounded-lg border px-3 py-2 text-sm ${a.hasManager?`border-cyan-200 bg-cyan-50 text-cyan-800`:`border-slate-200 bg-white text-slate-700`}`,children:[(0,z.jsxs)(`span`,{children:[`manager `,a.hasManager?`yes`:`no`]}),(0,z.jsx)(`span`,{className:`text-xs opacity-60`,children:`compare`})]})]}),(0,z.jsxs)(`select`,{className:`w-full rounded-lg border border-slate-200 bg-white px-3 py-2 text-sm outline-none focus:border-slate-400`,value:a.node||``,onChange:e=>t(`setCompareNode`,e.target.value||null),children:[(0,z.jsx)(`option`,{value:``,children:`no node`}),e.liveNodes.map(e=>(0,z.jsxs)(`option`,{value:e.node_id,children:[e.name,` · `,e.kind,` · `,e.status]},e.node_id))]}),e.compareReview?(0,z.jsxs)(`div`,{className:`rounded-xl border border-slate-200 bg-white p-3`,children:[(0,z.jsxs)(`div`,{className:`flex items-center gap-2 text-xs text-slate-500`,children:[(0,z.jsx)(`span`,{className:`font-semibold text-slate-900`,children:`Compared selection`}),(0,z.jsx)(`span`,{className:`rounded-full border border-slate-200 bg-slate-50 px-2 py-0.5`,children:r?.label||`none`})]}),r?(0,z.jsx)(`pre`,{className:`mt-2 max-h-40 overflow-auto whitespace-pre-wrap break-words rounded-lg bg-slate-950 px-3 py-2 font-mono text-[12px] leading-5 text-slate-100`,children:r.text}):null]}):(0,z.jsx)(`div`,{className:`text-xs text-slate-500`,children:`Pick a second config to render the diff.`}),(0,z.jsx)(`div`,{className:`space-y-2`,children:i.length?i.map(e=>(0,z.jsxs)(`button`,{type:`button`,onClick:()=>t(`selectCompareLayer`,e.id),className:`w-full rounded-xl border px-3 py-3 text-left ${Nj[e.kind]||`border-slate-200 bg-white text-slate-700`}`,children:[(0,z.jsxs)(`div`,{className:`flex items-center gap-2 text-xs`,children:[(0,z.jsx)(`span`,{className:`rounded-full border border-current/20 bg-white/70 px-2 py-0.5 font-semibold uppercase`,children:e.kind}),(0,z.jsx)(`span`,{className:`font-semibold text-slate-900`,children:e.label})]}),(0,z.jsx)(`div`,{className:`mt-1 whitespace-pre-wrap font-mono text-[11px] leading-5`,children:e.diffText||e.summary})]},e.id)):(0,z.jsx)(`div`,{className:`text-xs text-slate-500`,children:`No differences for the current pair.`})})]}):(0,z.jsx)(`div`,{className:`mt-2 text-xs text-slate-500`,children:`Compare panel hidden.`})]}),e.draftComment?(0,z.jsx)(Uj,{state:e,dispatch:t}):null,(0,z.jsxs)(`div`,{className:`space-y-2`,children:[(0,z.jsx)(`div`,{className:`text-xs font-semibold uppercase tracking-[0.18em] text-slate-400`,children:`Comments`}),e.comments.length?e.comments.map((e,n)=>(0,z.jsx)(Wj,{comment:e,index:n,onDelete:()=>t(`removeComment`,n)},`${e.layerId}-${n}`)):(0,z.jsx)(`div`,{className:`rounded-xl border border-dashed border-slate-200 bg-slate-50 p-4 text-sm text-slate-500`,children:`No comments yet.`})]})]})]})}function Kj({state:e,dispatch:t}){return(0,z.jsxs)(`div`,{className:`flex flex-wrap items-center gap-2 border-t border-slate-200 bg-white px-4 py-3 text-sm text-slate-600`,children:[(0,z.jsx)(`button`,{type:`button`,onClick:async()=>{let t=await Lj(e.assembled||``);tm(t?`Copied assembled prompt`:`Could not copy assembled prompt`,t?`success`:`info`)},className:`rounded-full border border-slate-200 bg-slate-50 px-3 py-1.5 hover:bg-slate-100`,disabled:!e.assembled,children:`Copy raw`}),(0,z.jsx)(`button`,{type:`button`,onClick:()=>t(`toggleCompareOpen`),className:`rounded-full border border-slate-200 bg-slate-50 px-3 py-1.5 hover:bg-slate-100`,children:`Compare configs`}),(0,z.jsx)(`button`,{type:`button`,onClick:()=>t(`exportComments`),className:`rounded-full border border-slate-900 bg-slate-900 px-3 py-1.5 text-white hover:bg-slate-800`,disabled:!e.review,children:`Export comments`}),(0,z.jsx)(`div`,{className:`ml-auto text-xs text-slate-500`,children:e.lastExportPath?(0,z.jsx)(`span`,{className:`font-mono`,children:e.lastExportPath}):(0,z.jsx)(`span`,{children:`Export writes a markdown file and copies its path.`})})]})}function qj({state:e,dispatch:t}){let n=(0,S.useRef)(``);if((0,S.useEffect)(()=>{!e.lastExportPath||e.lastExportPath===n.current||(n.current=e.lastExportPath,(async()=>{let t=await Lj(e.lastExportPath||``);tm(t?`Review copied: ${e.lastExportPath}`:`Export written: ${e.lastExportPath}`,t?`success`:`info`)})())},[e.lastExportPath]),e.sourceError&&!e.review){let n=e.sourceError.display;return(0,z.jsx)(n.level===`error`?aE:oE,{headline:n.headline,explanation:n.explanation,nextStep:n.nextStep||void 0,onRetry:()=>t(`refresh`)})}return e.review?e.review.length===0?(0,z.jsx)(iE,{label:`No prompt layers were returned.`}):(0,z.jsxs)(`div`,{className:`flex h-full min-h-0 flex-col bg-slate-50 text-slate-900`,children:[e.auxiliaryError?(0,z.jsx)(`div`,{className:`border-b border-amber-200 bg-amber-50 px-4 py-2 text-xs text-amber-800`,children:e.auxiliaryError.display.explanation||e.auxiliaryError.display.headline}):null,(0,z.jsxs)(`div`,{className:`grid min-h-0 flex-1 grid-cols-1 gap-3 p-4 lg:grid-cols-[18rem_minmax(0,1fr)_24rem]`,children:[(0,z.jsx)(Bj,{state:e,dispatch:t}),(0,z.jsx)(Hj,{state:e,dispatch:t}),(0,z.jsx)(Gj,{state:e,dispatch:t})]}),(0,z.jsx)(Kj,{state:e,dispatch:t})]}):(0,z.jsx)(rE,{label:`Loading Prompt Studio…`})}var Jj=new Set([`active`,`idle`]);function Yj(e){return{ok:!0,data:e}}function Xj(e){return{ok:!1,error:e}}function Zj(e){let t=String(e||``).split(/\r?\n/).map(e=>e.trim()).filter(Boolean);return t.length?t[0]:``}function Qj(e){return e==null?``:String(e)}function $j(e,t){return`${e} ${t}${e===1?``:`s`}`}function eM(e){let t=e||{};return{nodeId:Qj(t.node_id),name:Qj(t.name)||`(unnamed)`,kind:Qj(t.kind)||`?`,mode:Qj(t.mode)||`?`,lifecycle:Qj(t.lifecycle)||`?`,status:Qj(t.status)||`?`,cwd:Qj(t.cwd),parent:t.parent?Qj(t.parent):null,created:Qj(t.created)}}var tM={kind:`crtr-missing`,display:{headline:`crtr unavailable`,explanation:`The crtr binary was not found on PATH.`,nextStep:`Install crtr (or set it on PATH), then press g.`,level:`error`,blocking:!0}};function nM(e){return{kind:`crtr-failed`,display:{headline:`Canvas unavailable`,explanation:e||`crtr could not read the graph.`,nextStep:`Press g to retry.`,level:`error`,blocking:!1}}}var rM={id:`nodes`,request:()=>({kind:`exec`,bin:`crtr`,args:[`node`,`inspect`,`list`,`--json`]}),parse:e=>{if(!e.ok)return Xj(tM);if(e.exitCode!==0)return Xj(nM(Zj(e.stderr||e.stdout)));let t=String(e.stdout||``).trim(),n;try{n=t===``?{}:JSON.parse(t)}catch{return Xj(nM("could not parse `crtr node inspect list` output as JSON"))}return Yj((n&&Array.isArray(n.nodes)?n.nodes:[]).map(eM))}},iM={id:`attention`,request:({viewRoot:e,nodeIds:t})=>{let n=[`canvas`,`attention`,`map`,`--json`];e&&n.push(`--view`,e);let r=(t||[]).filter(Boolean);return r.length&&n.push(`--nodes`,r.join(`,`)),{kind:`exec`,bin:`crtr`,args:n}},parse:e=>{if(!e.ok||e.exitCode!==0)return Yj({});let t;try{t=JSON.parse(String(e.stdout||``).trim()||`{}`)}catch{return Yj({})}let n=t&&t.counts&&typeof t.counts==`object`?t.counts:{},r={};for(let[e,t]of Object.entries(n))r[e]=typeof t==`number`?t:0;return Yj(r)}},aM={id:`cwd`,request:()=>({kind:`exec`,bin:`pwd`,args:[]}),parse:e=>Yj(e.ok&&e.exitCode===0?String(e.stdout||``).trim():``)},oM={id:`tmux-panes`,request:()=>({kind:`exec`,bin:`tmux`,args:[`list-panes`,`-F`,`#{pane_id} #{@crtr_node}`]}),parse:e=>{if(!e.ok||e.exitCode!==0)return Yj([]);let t=[];for(let n of String(e.stdout||``).split(/\r?\n/)){if(!n)continue;let e=n.indexOf(` `),r=(e<0?n:n.slice(0,e)).trim(),i=e<0?``:n.slice(e+1).trim();r&&t.push({pane:r,node:i})}return Yj(t)}},sM={id:`focus`,request:({nodeId:e,pane:t})=>({kind:`exec`,bin:`crtr`,args:[`node`,`focus`,e,`--pane`,t]}),parse:e=>Yj(e.ok&&e.exitCode===0)};function cM(e,t){return e.created<t.created?-1:+(e.created>t.created)}function lM(e){let t=new Map;for(let n of e)t.set(n.nodeId,n);let n=new Map,r=[];for(let i of e)if(i.parent&&t.has(i.parent)){let e=n.get(i.parent);e?e.push(i):n.set(i.parent,[i])}else r.push(i);for(let e of n.values())e.sort(cM);return r.sort(cM),{byId:t,children:n,roots:r}}function uM(e,t){let n=new Set,r=e;for(;;){if(n.has(r))return r;n.add(r);let e=t.get(r);if(!e||!e.parent||!t.has(e.parent))return r;r=e.parent}}function dM(e,t,n,r=new Set){if(r.has(e))return!1;r.add(e);let i=n.get(e),a=!!i&&Jj.has(i.status);if(!a){for(let i of t.get(e)||[])if(dM(i.nodeId,t,n,r)){a=!0;break}}return r.delete(e),a}function fM(e,t,n,r){return{kind:`node`,nodeId:e.nodeId,name:e.name,status:e.status,prefix:t,attached:n,asks:r}}function pM(e){return{kind:`header`,text:e}}function mM(e){return{kind:`chrome`,text:e||``}}function hM(e,t){let{byId:n,children:r,roots:i}=lM(e),a=null;if(t&&n.has(t))a=uM(t,n);else{let e=i.filter(e=>dM(e.nodeId,r,n)),t=e.length?e:i;t.length&&(a=t[t.length-1].nodeId)}return{byId:n,children:r,roots:i,currentRoot:a,liveRoots:i.filter(e=>dM(e.nodeId,r,n))}}function gM(e){let t=[];for(let n=0;n<e.length;n++)e[n].kind===`node`&&t.push(n);return t}function _M(e,t,n){let r=gM(e);if(r.length===0)return 0;let i=t||n,a=i?e.findIndex(e=>e.kind===`node`&&e.nodeId===i):-1;return a>=0?a:r[0]}function vM(e,t){let n=gM(e.rows);if(n.length===0)return e;let r=n.indexOf(e.cursor);if(r<0)return{...e,cursor:n[0]};let i=Math.max(0,Math.min(n.length-1,r+t));return{...e,cursor:n[i]}}var yM={manifest:{id:`workspace-sidebar`,title:`Workspace`,description:"Left rail for `crtr workspace` — this graph + other agents in this cwd",refreshMs:2500},init(e){return{cwd:typeof process<`u`&&process.cwd?process.cwd():``,targetOverride:String(e&&e.target||``),chatPane:``,attachedNode:null,currentRoot:null,rows:[],cursor:0,scroll:0,graphsHere:0,nodesHere:0,asksHere:0,lastFetch:0,srcError:null}},sources:{cwdSource:aM,nodesSource:rM,attentionSource:iM,panesSource:oM},commands:{focusCommand:sM},intents:{async refresh(e){e.signal.setStatus(`Loading…`);let t=await e.resolve(oM),n=``,r=null;if(t.ok){let e=t.data.find(e=>e.node);e&&(n=e.pane,r=e.node)}!n&&e.state.targetOverride&&(n=e.state.targetOverride);let i=await e.resolve(aM),a=i.ok&&i.data?i.data:e.state.cwd,o=await e.resolve(rM);if(!o.ok){let t=o.error,i=e.state.rows.length>0,s=!t.display.blocking&&i;e.set(e=>{let i={...e,cwd:a,chatPane:n,attachedNode:r,srcError:t};return s||(i.rows=[],i.currentRoot=null,i.graphsHere=0,i.nodesHere=0,i.asksHere=0),i}),s?e.signal.setBanner(t.display.explanation,t.display.level):e.signal.clearBanner(),e.signal.setStatus(null),e.signal.setSubtitle(null);return}let s=o.data.filter(e=>e.cwd===a),{byId:c,children:l,roots:u,currentRoot:d,liveRoots:f}=hM(s,r),p=u.map(e=>e.nodeId),m={};if(d||p.length){let t=await e.resolve(iM,{viewRoot:d,nodeIds:p});t.ok&&(m=t.data)}let h=0;for(let e of Object.values(m))h+=e;let g=u.filter(e=>e.nodeId!==d&&(dM(e.nodeId,l,c)||(m[e.nodeId]||0)>0));g.sort((e,t)=>{let n=+!!dM(e.nodeId,l,c),r=+!!dM(t.nodeId,l,c);return n===r?e.created<t.created?1:-1:r-n});let _=[];if(_.push(pM(`⌗ this graph`)),d&&c.has(d)){let e=new Set,t=(n,i,a,o)=>{if(e.has(n.nodeId))return;e.add(n.nodeId);let s=o?``:i+(a?`└─ `:`├─ `);_.push(fM(n,s,n.nodeId===r,m[n.nodeId]||0));let c=l.get(n.nodeId)||[],u=o?``:i+(a?` `:`│ `);for(let e=0;e<c.length;e++)t(c[e],u,e===c.length-1,!1)};t(c.get(d),``,!0,!0)}else _.push(mM(` no agent here yet`));if(_.push(mM(``)),_.push(pM(`↪ elsewhere${g.length?` · ${g.length}`:``}`)),g.length)for(let e of g)_.push(fM(e,``,!1,m[e.nodeId]||0));else _.push(mM(` —`));let v=e.state.rows[e.state.cursor],y=_M(_,v&&v.kind===`node`?v.nodeId:null,r);e.set(e=>({...e,cwd:a,chatPane:n,attachedNode:r,currentRoot:d,rows:_,cursor:y,graphsHere:f.length,nodesHere:s.length,asksHere:h,lastFetch:Date.now(),srcError:null})),e.signal.setSubtitle(f.length>0?`${$j(f.length,`live graph`)}`:null),h>0?e.signal.setBanner(`${$j(h,`ask`)} waiting on a human — see the ⚑ rows`,`action`):e.signal.clearBanner(),e.signal.setStatus(null)},cursorDown:e=>e.set(e=>vM(e,1)),cursorUp:e=>e.set(e=>vM(e,-1)),select:(e,t)=>e.set(e=>typeof t==`number`&&gM(e.rows).includes(t)?{...e,cursor:t}:e),async open(e){let t=e.state,n=t.rows[t.cursor];if(!(!n||n.kind!==`node`)){if(!t.chatPane){e.signal.setBanner("No chat pane wired — run this rail via `crtr workspace`.",`error`);return}await e.execute(sM,{nodeId:n.nodeId,pane:t.chatPane}),e.signal.setStatus(`→ ${n.name}`)}},quit:e=>e.signal.quit()}},bM={active:{glyph:`●`,cls:`text-green-600`},idle:{glyph:`○`,cls:`text-amber-600`},done:{glyph:`✓`,cls:`text-cyan-600`},dead:{glyph:`✗`,cls:`text-red-600`},canceled:{glyph:`⊘`,cls:`text-slate-400`}};function xM(e,t){return t?`font-bold text-cyan-700`:e===`active`?`font-semibold`:e===`done`||e===`dead`||e===`canceled`?`text-slate-400`:``}function SM({row:e,selected:t,onClick:n}){if(e.kind===`header`)return(0,z.jsx)(`li`,{className:`px-2 pt-3 pb-0.5 font-semibold text-cyan-700`,children:e.text});if(e.kind===`chrome`)return(0,z.jsx)(`li`,{className:`px-2 text-slate-400`,children:e.text||`\xA0`});let r=bM[e.status]||{glyph:`?`,cls:`text-slate-400`};return(0,z.jsxs)(`li`,{className:`flex items-baseline gap-1 rounded px-2 py-0.5 cursor-pointer ${t?`bg-slate-200`:`hover:bg-slate-100`}`,onClick:n,children:[(0,z.jsx)(`span`,{className:`w-3 shrink-0 ${e.attached?`font-bold text-cyan-700`:``}`,children:e.attached?`▸`:`\xA0`}),e.prefix?(0,z.jsx)(`span`,{className:`whitespace-pre text-slate-400`,children:e.prefix}):null,(0,z.jsx)(`span`,{className:r.cls,children:r.glyph}),(0,z.jsx)(`span`,{className:xM(e.status,e.attached),children:e.name}),e.asks>0?(0,z.jsxs)(`span`,{className:`ml-auto shrink-0 font-bold text-amber-500`,children:[`⚑`,e.asks]}):null]})}function CM({state:e,dispatch:t}){if(e.rows.length===0){if(e.srcError){let n=e.srcError.display;return(0,z.jsx)(n.level===`error`?aE:oE,{headline:n.headline,explanation:n.explanation,nextStep:n.nextStep,onRetry:()=>t(`refresh`)})}return e.lastFetch===0?(0,z.jsx)(rE,{label:`Loading…`}):(0,z.jsx)(iE,{label:`No agents in this cwd.`})}return(0,z.jsx)(`ul`,{className:`font-mono text-sm outline-none`,tabIndex:0,onKeyDown:e=>{e.key===`j`||e.key===`ArrowDown`?(t(`cursorDown`),e.preventDefault()):e.key===`k`||e.key===`ArrowUp`?(t(`cursorUp`),e.preventDefault()):e.key===`Enter`?(t(`open`),e.preventDefault()):e.key===`g`&&t(`refresh`)},children:e.rows.map((n,r)=>(0,z.jsx)(SM,{row:n,index:r,selected:r===e.cursor,onClick:()=>t(`select`,r)},r))})}var wM={canvas:{core:ME,View:IE},chat:{core:iD,View:yD},inbox:{core:Ok,View:Mk},"git-pr":{core:pA,View:bA},linkedin:{core:mO,View:DA},settings:{core:WA,View:YA},"prompt-review":{core:kj,View:qj},"workspace-sidebar":{core:yM,View:CM}};Object.keys(wM).filter(e=>e!==`canvas`);function TM(e){if(e===void 0)return``;let t=new URLSearchParams;for(let[n,r]of Object.entries(e).sort(([e,t],[n,r])=>{let i=e.localeCompare(n);return i===0?t.localeCompare(r):i}))t.append(n,r);return t.toString()}function EM({viewId:e,options:t,onIntent:n,sseKinds:r=[]}){let i=wM[e];return i===void 0?(0,z.jsxs)(`div`,{className:`flex h-full items-center justify-center p-6 text-sm text-slate-500`,children:[`Unknown view: `,(0,z.jsx)(`code`,{className:`ml-1 rounded bg-slate-100 px-1.5 py-0.5`,children:e})]}):(0,z.jsx)(DM,{entry:i,options:t,onIntent:n,sseKinds:r},`${e}::${TM(t)}`)}function DM({entry:e,options:t,onIntent:n,sseKinds:r}){let{state:i,chrome:a,dispatch:o,refresh:s}=tE(e.core,{options:t,onIntent:n});return np(r,s),(0,z.jsx)(LT,{chrome:a,title:e.core.manifest.title,children:(0,S.createElement)(e.View,{state:i,dispatch:o,chrome:a})})}var OM=(()=>{let e=new URLSearchParams(window.location.search).get(`token`);return e!==null&&e!==``?e:void 0})(),kM={"content-type":`application/json`},AM=3e3,jM=class extends Error{status;safeText;unavailable;constructor(e,t,n=!1){super(e),this.name=`HearthModelAuthError`,this.status=t,this.safeText=e,this.unavailable=n}};function MM(){return OM===void 0?{}:{authorization:`Bearer ${OM}`}}function NM(e){return e!==null&&/json/i.test(e)}function PM(e,t,n){return new jM(`${e} ${t} failed (${n})`,n)}async function FM(e,t,n){if(!NM(e.headers.get(`content-type`)))return null;let r;try{r=await e.json()}catch{return null}if(!e.ok)throw PM(t,n,e.status);return r}async function IM(e,t,n){try{return await FM(await fetch(t,{method:e,credentials:`same-origin`,headers:{...MM(),...n===void 0?{}:kM},...n===void 0?{}:{body:JSON.stringify(n)}}),e,t)}catch(e){if(e instanceof jM)throw e;return null}}function LM(e){let t=e.trim();if(t===``)throw new jM(`Paste the full callback URL to continue`);if(t.length>4096)throw new jM(`Callback URL is too long`);return t}async function RM(){return IM(`GET`,`/__hearth/model-auth/anthropic/status`)}async function zM(){let e=await IM(`POST`,`/__hearth/model-auth/anthropic/start`);if(e===null)return null;if(typeof e.sessionId!=`string`||typeof e.authUrl!=`string`)throw new jM(`Claude login start returned an invalid response`);return e}async function BM(e,t){let n=await IM(`POST`,`/__hearth/model-auth/anthropic/finish`,{sessionId:e,redirectUrl:LM(t)});if(n===null)return null;if(n.ok!==!0)throw new jM(`Claude login finish returned an invalid response`);return n}function VM(e){return`hearth-model-auth:${e}:${globalThis.crypto?.randomUUID?.()??Math.random().toString(36).slice(2)}`}async function HM(e){await new Promise((t,n)=>{let r=VM(e),i,a=!1,o=window.setTimeout(()=>s(()=>n(new jM(`timed out after ${AM}ms waiting for the broker to ack the auth reload`))),AM);function s(e){if(!a){a=!0,window.clearTimeout(o);try{i?.close()}catch{}e()}}i=new th(e,{onOpen:()=>{i.send({type:`hello`,role:`observer`,client_id:r}),i.send({type:`reload_auth`})},onFrame:e=>{if(e.type===`ack`&&e.for===`reload_auth`){if(!e.ok){s(()=>n(new jM(e.detail??`reload auth failed`)));return}s(()=>t());return}e.type===`error`&&s(()=>n(new jM(e.message)))},onClose:(e,t)=>{if(e===`no-broker`||e===`no-node`){s(()=>n(new jM(`broker unavailable`,void 0,!0)));return}s(()=>n(new jM(t||`broker reload failed`)))}}),i.connect()})}function UM(e){let t=e(`about:blank`,`_blank`);if(t!==null)try{t.opener=null}catch{}return t}function WM(e,t,n){if(e!==null&&!e.closed)try{e.location.replace(t);return}catch{}n(t,`_blank`,`noopener,noreferrer`)}function GM(e){return e instanceof jM&&e.unavailable}function KM(e,t){return e instanceof jM?e.safeText:t}function qM({targetNodeId:e}){let[t,n]=(0,S.useState)({phase:`checking`,callbackUrl:``}),r=(0,S.useCallback)(async()=>{n(e=>({...e,phase:`checking`,error:void 0,errorStep:void 0}));try{let e=await RM();if(e===null||e.storedOauth===!0){n({phase:`checking`,callbackUrl:``});return}n({phase:`needs_login`,callbackUrl:``})}catch(e){if(GM(e)){n({phase:`checking`,callbackUrl:``});return}n({phase:`error`,callbackUrl:``,error:KM(e,`Claude login status failed`),errorStep:`status`})}},[]);(0,S.useEffect)(()=>{let t=!1;return(async()=>{if(e.trim()!==``){n({phase:`checking`,callbackUrl:``});try{let e=await RM();if(t)return;if(e===null||e.storedOauth===!0){n({phase:`checking`,callbackUrl:``});return}n({phase:`needs_login`,callbackUrl:``})}catch(e){if(t)return;if(GM(e)){n({phase:`checking`,callbackUrl:``});return}n({phase:`error`,callbackUrl:``,error:KM(e,`Claude login status failed`),errorStep:`status`})}}})(),()=>{t=!0}},[e]);let i=(0,S.useMemo)(()=>{let e=t.callbackUrl.trim();return e.length>0&&e.length<=4096},[t.callbackUrl]),a=(0,S.useCallback)(async()=>{let e=UM(window.open.bind(window));n(e=>({...e,phase:`starting`,error:void 0,errorStep:void 0}));try{let t=await zM();if(t===null){e?.close(),n({phase:`error`,callbackUrl:``,error:`Claude login start unavailable`,errorStep:`start`});return}WM(e,t.authUrl,window.open.bind(window)),n({phase:`awaiting_callback`,callbackUrl:``,session:t})}catch(t){e?.close(),n({phase:`error`,callbackUrl:``,error:KM(t,`Claude login start failed`),errorStep:`start`})}},[]),o=(0,S.useCallback)(async()=>{let r=t.callbackUrl.trim();if(r.length===0||r.length>4096){n(e=>({...e,phase:`error`,error:r.length===0?`Paste the full callback URL to finish login`:`Callback URL is too long`,errorStep:`finish`}));return}let i=t.session;if(i===void 0){n({phase:`error`,callbackUrl:r,error:`Claude login session is missing`,errorStep:`finish`});return}n(e=>({...e,phase:`finishing`,error:void 0,errorStep:void 0}));try{if(await BM(i.sessionId,r)===null){n(e=>({...e,phase:`error`,error:`Claude login finish unavailable`,errorStep:`finish`}));return}try{await HM(e),n({phase:`success`,callbackUrl:``,successText:`Claude login saved; chat auth reloaded`})}catch{n(e=>({...e,phase:`error`,error:`Claude login saved; reconnect chat to reload auth`,errorStep:`finish`}))}RM().catch(()=>null)}catch(e){n({phase:`error`,callbackUrl:r,error:KM(e,`Claude login finish failed`),errorStep:`finish`})}},[t.callbackUrl,t.session,e]),s=(0,S.useCallback)(()=>{t.errorStep===`status`?r():t.errorStep===`start`?a():t.errorStep===`finish`&&o()},[o,r,a,t.errorStep]),c=(0,S.useCallback)(()=>{n({phase:`needs_login`,callbackUrl:``})},[]);if(e.trim()===``||t.phase===`checking`)return null;if(t.phase===`error`)return(0,z.jsx)(`section`,{className:`border-b border-[var(--line)] bg-[color-mix(in_oklch,var(--ink)_3%,transparent)] px-4 py-3 text-sm text-[var(--ink)]`,children:(0,z.jsxs)(`div`,{className:`flex flex-col gap-2`,children:[(0,z.jsx)(`div`,{className:`font-medium`,children:t.error??`Claude login error`}),(0,z.jsxs)(`div`,{className:`flex gap-2`,children:[(0,z.jsx)(Z,{size:`sm`,onClick:()=>void s(),children:`Retry`}),(0,z.jsx)(Z,{size:`sm`,variant:`outline`,onClick:c,children:`Start over`})]})]})});if(t.phase===`success`)return(0,z.jsx)(`section`,{className:`border-b border-[var(--line)] bg-[color-mix(in_oklch,var(--ink)_3%,transparent)] px-4 py-3 text-sm text-[var(--ink)]`,children:(0,z.jsx)(`div`,{className:`font-medium`,children:t.successText??`Claude login saved; chat auth reloaded`})});if(t.phase===`needs_login`||t.phase===`starting`||t.phase===`awaiting_callback`||t.phase===`finishing`){let e=t.phase===`starting`||t.phase===`finishing`;return(0,z.jsx)(`section`,{className:`border-b border-[var(--line)] bg-[color-mix(in_oklch,var(--ink)_3%,transparent)] px-4 py-3 text-sm text-[var(--ink)]`,children:(0,z.jsxs)(`div`,{className:`flex flex-col gap-3`,children:[(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`div`,{className:`font-medium`,children:`Claude login needed for replies`}),(0,z.jsx)(`div`,{className:`text-xs text-[var(--dim)]`,children:`Log in with Claude so this chat can keep using the saved model auth.`})]}),(0,z.jsxs)(`div`,{className:`flex flex-wrap items-center gap-2`,children:[(0,z.jsx)(Z,{size:`sm`,disabled:e,onClick:()=>void a(),children:t.phase===`starting`?`Opening Claude…`:`Log in with Claude`}),t.phase===`awaiting_callback`||t.phase===`finishing`?(0,z.jsx)(`a`,{className:`text-sm underline underline-offset-4`,href:t.session?.authUrl,target:`_blank`,rel:`noreferrer noopener`,children:`Open Claude login`}):null]}),(t.phase===`awaiting_callback`||t.phase===`finishing`)&&t.session!==void 0?(0,z.jsxs)(`div`,{className:`grid gap-2`,children:[(0,z.jsx)(Tp,{htmlFor:`hearth-claude-callback`,children:`Paste the full callback URL`}),(0,z.jsx)(Np,{id:`hearth-claude-callback`,value:t.callbackUrl,onChange:e=>{let t=e.target.value;n(e=>({...e,callbackUrl:t}))},placeholder:`http://localhost:53692/callback?code=...&state=...`,rows:3,disabled:e}),(0,z.jsx)(`div`,{className:`text-xs text-[var(--dim)]`,children:`Copy the full address bar URL after Claude redirects to localhost.`}),(0,z.jsxs)(`div`,{className:`flex flex-wrap items-center gap-2`,children:[(0,z.jsx)(Z,{size:`sm`,disabled:!i||e,onClick:()=>void o(),children:t.phase===`finishing`?`Saving…`:`Save login`}),(0,z.jsx)(Z,{size:`sm`,variant:`outline`,onClick:c,children:`Start over`})]})]}):null]})})}return null}function JM(e){let t={};for(let[n,r]of e.entries())t[n]=r;return t}function YM({viewId:e}){let[t]=Ln(),n=JM(t),r=e===`chat`?n.target:void 0;return(0,z.jsx)(`div`,{className:`flex h-full min-h-0`,children:(0,z.jsxs)(`div`,{className:`min-w-0 flex-1 overflow-auto`,children:[e===`chat`&&r!==void 0&&r!==``?(0,z.jsx)(qM,{targetNodeId:r}):null,(0,z.jsx)(EM,{viewId:e,options:n})]})})}function XM(){let{viewId:e,tab:t}=dt();return(0,z.jsx)(YM,{viewId:e??``,tab:t})}var ZM=3e4;function QM(){return Object.values(wM).map(e=>({id:e.core.manifest.id,title:e.core.manifest.title,description:e.core.manifest.description}))}function $M(){let[e,t]=(0,S.useState)(QM()),[n,r]=(0,S.useState)(!0),[i,a]=(0,S.useState)(0),o=(0,S.useCallback)(()=>a(e=>e+1),[]);return(0,S.useEffect)(()=>{let e=!1,n=()=>{Zf().then(n=>{e||(t(n.length>0?n:QM()),r(!1))}).catch(()=>{e||(t(QM()),r(!1))})};n();let i=setInterval(n,ZM),a=()=>{document.visibilityState===`visible`&&n()};return window.addEventListener(`focus`,n),document.addEventListener(`visibilitychange`,a),()=>{e=!0,clearInterval(i),window.removeEventListener(`focus`,n),document.removeEventListener(`visibilitychange`,a)}},[i]),{views:e,loading:n,refetch:o}}function eN(){let{id:e}=dt();return(0,z.jsx)(eT,{id:e??``},e)}function tN(){let{deckId:e}=dt();return(0,z.jsx)(hT,{deckId:e??``})}function nN(){let{views:e,loading:t}=$M(),n=lt();return(0,S.useEffect)(()=>{if(t)return;let r=e[0];r&&n(`/views/${encodeURIComponent(r.id)}`,{replace:!0})},[e,t,n]),t?null:e.length===0?(0,z.jsx)(zm,{}):null}function rN(){let{home:e}=Ih(),[t]=Ln();return t.has(`new`)?(0,z.jsx)(zm,{}):e===`views`?(0,z.jsx)(nN,{}):(0,z.jsx)(zm,{})}function iN(){return(0,z.jsxs)(Lt,{children:[(0,z.jsx)(Ft,{path:`/`,element:(0,z.jsx)(rN,{})}),(0,z.jsx)(Ft,{path:`/canvas`,element:(0,z.jsx)(Sm,{})}),(0,z.jsx)(Ft,{path:`/nodes/:id`,element:(0,z.jsx)(eN,{})}),(0,z.jsx)(Ft,{path:`/c/:id`,element:(0,z.jsx)(eN,{})}),(0,z.jsx)(Ft,{path:`/inbox`,element:(0,z.jsx)(uT,{})}),(0,z.jsx)(Ft,{path:`/inbox/:deckId`,element:(0,z.jsx)(tN,{})}),(0,z.jsx)(Ft,{path:`/settings`,element:(0,z.jsx)(jT,{})}),(0,z.jsx)(Ft,{path:`/views/:viewId`,element:(0,z.jsx)(XM,{})}),(0,z.jsx)(Ft,{path:`/views/:viewId/:tab`,element:(0,z.jsx)(XM,{})}),(0,z.jsx)(Ft,{path:`*`,element:(0,z.jsx)(rN,{})})]})}function aN(){return lp(e=>e.reachable)?null:(0,z.jsx)(`div`,{role:`status`,className:`fixed inset-x-0 top-0 z-50 bg-warning/90 px-4 py-1.5 text-center text-sm font-medium text-background`,children:`Reconnecting…`})}function oN({nav:e}){let t=Rh(`views.host`),{views:n}=$M(),r=lt();return(0,z.jsxs)(`nav`,{"aria-label":`Primary`,className:`flex w-56 shrink-0 flex-col gap-1 border-r border-border bg-card/40 px-3 py-4`,children:[(t?e.filter(e=>e.id!==`views`):e).map(e=>(0,z.jsxs)(An,{to:e.path,end:e.path===`/`,className:({isActive:e})=>Y(`flex items-center justify-between rounded-lg px-3 py-2 text-sm font-medium transition-colors`,e?`bg-primary/10 text-primary`:`text-foreground/70 hover:bg-accent hover:text-foreground`),children:[(0,z.jsx)(`span`,{children:e.label}),e.id===`inbox`&&(0,z.jsx)(sN,{})]},e.id)),t&&(0,z.jsxs)(z.Fragment,{children:[(0,z.jsx)(`div`,{className:`instlabel mx-3 mb-0.5 mt-3 uppercase tracking-widest text-muted-foreground/60`,children:`Views`}),n.map(e=>(0,z.jsxs)(An,{to:`/views/${encodeURIComponent(e.id)}`,className:({isActive:e})=>Y(`flex items-center gap-2 truncate rounded-lg px-3 py-2 text-sm font-medium transition-colors`,e?`bg-primary/10 text-primary`:`text-foreground/70 hover:bg-accent hover:text-foreground`),children:[(0,z.jsx)(`span`,{className:`size-1.5 shrink-0 rounded-full`,style:{background:`var(--status-active, #3ba55d)`}}),(0,z.jsx)(`span`,{className:`truncate`,children:e.title})]},e.id)),(0,z.jsxs)(`button`,{type:`button`,onClick:()=>r(`/views`),className:`flex items-center gap-2 rounded-lg px-3 py-2 text-sm text-muted-foreground/50 transition-colors hover:text-foreground`,children:[(0,z.jsx)(`span`,{className:`text-base leading-none`,children:`+`}),(0,z.jsx)(`span`,{children:`New view`})]})]})]})}function sN(){let e=qp();return e<=0?null:(0,z.jsx)(`span`,{className:`inline-flex min-w-5 items-center justify-center rounded-full bg-primary px-1.5 text-xs font-semibold text-primary-foreground`,children:e})}function cN(e){e(`/?new=1`)}var lN={canvas:Of,conversations:Df,inbox:Sf,views:wf,settings:jf};function uN(e){return lN[e]??wf}var dN=wf;function fN(e){return Y(`flex h-9 items-center gap-2.5 rounded-lg px-3 text-sm font-medium no-underline transition-all`,e?`[color:var(--ink)] [background:rgba(232,228,216,.06)] [border:1px_solid_var(--line)] [box-shadow:inset_0_1px_0_var(--raise)]`:`border border-transparent [color:var(--ink2)] hover:[color:var(--ink)] hover:[background:rgba(232,228,216,.04)]`)}function pN({nav:e,home:t}){let n=Rh(`views.host`),{views:r}=$M(),i=lt(),a=n?e.filter(e=>e.id!==`views`):e;return(0,z.jsxs)(`aside`,{"aria-label":`Primary`,className:`flex w-57 flex-none flex-col gap-0.5 px-3 py-4 [border-right:1px_solid_var(--line)] [background:linear-gradient(180deg,rgba(20,19,16,.6),rgba(20,19,16,.2))]`,children:[(0,z.jsxs)(kn,{to:t,className:`flex items-center gap-2.5 px-2.5 pt-1 pb-4 text-base font-medium tracking-[.01em] no-underline [color:var(--ink)] [font-family:var(--font-display)]`,children:[(0,z.jsx)(`span`,{className:`flex flex-none items-center justify-center rounded-md text-xs font-bold [background:var(--bone)] [color:var(--bone-ink)] [font-family:var(--font-inst)]`,style:{width:22,height:22},children:`cr`}),`crouter`]}),(0,z.jsxs)(`button`,{type:`button`,onClick:()=>cN(i),title:`New chat (⌘⇧O)`,className:`mb-1.5 flex h-9 items-center gap-2.5 rounded-lg px-3 text-sm font-medium transition-all [color:var(--bone-ink)] [background:var(--bone)] hover:[background:var(--ink)]`,children:[(0,z.jsx)(kf,{size:16,className:`flex-none`,"aria-hidden":!0}),(0,z.jsx)(`span`,{children:`New chat`})]}),a.map(e=>{let t=uN(e.id);return(0,z.jsxs)(An,{to:e.path,end:e.path===`/`,className:({isActive:e})=>fN(e),children:[(0,z.jsx)(t,{size:18,className:`flex-none opacity-75`,"aria-hidden":!0}),(0,z.jsx)(`span`,{children:e.label}),e.id===`inbox`&&(0,z.jsx)(mN,{})]},e.id)}),n&&(0,z.jsxs)(z.Fragment,{children:[(0,z.jsx)(`div`,{className:`instlabel px-2.5 pt-3.5 pb-1.5`,children:`Views`}),r.map(e=>(0,z.jsxs)(An,{to:`/views/${encodeURIComponent(e.id)}`,className:({isActive:e})=>fN(e),children:[(0,z.jsx)(dN,{size:18,className:`flex-none opacity-75`,"aria-hidden":!0}),(0,z.jsx)(`span`,{className:`truncate`,children:e.title})]},e.id)),(0,z.jsxs)(`button`,{type:`button`,onClick:()=>i(`/views`),className:`flex h-9 items-center gap-2.5 rounded-lg border border-transparent bg-transparent px-3 text-sm font-medium transition-all [color:var(--dim)] hover:[color:var(--ink)]`,children:[(0,z.jsx)(kf,{size:16,className:`flex-none opacity-75`,"aria-hidden":!0}),(0,z.jsx)(`span`,{children:`New view`})]})]}),(0,z.jsx)(`div`,{className:`flex-1`}),(0,z.jsxs)(`div`,{className:`mt-2.5 pt-2.5 [border-top:1px_solid_var(--line)]`,children:[(0,z.jsxs)(`div`,{className:`flex items-center justify-between gap-2 px-1`,children:[(0,z.jsxs)(`span`,{className:`flex items-center gap-2.5 text-sm font-medium [color:var(--ink2)]`,children:[(0,z.jsx)(_f,{size:18,className:`flex-none opacity-75`,"aria-hidden":!0}),` silas`]}),(0,z.jsx)(`span`,{className:`kbd`,children:`⌘K`})]}),(0,z.jsx)(`div`,{className:`px-1 pt-2`,children:(0,z.jsx)(AT,{})})]})]})}function mN(){let e=qp();return e<=0?null:(0,z.jsx)(`span`,{className:`ml-auto rounded-full border px-2 py-0.5 text-xs font-semibold [font-family:var(--font-inst)] [color:#ff8260] [background:var(--blk-dim)] [border-color:rgba(255,94,54,.35)]`,children:e})}function hN(e){return Y(`relative flex size-9 items-center justify-center rounded-lg no-underline opacity-75 transition-all`,e?`[color:var(--ink)] opacity-100 [background:rgba(232,228,216,.06)] [border:1px_solid_var(--line)] [box-shadow:inset_0_1px_0_var(--raise)]`:`border border-transparent [color:var(--ink2)] hover:opacity-100 hover:[color:var(--ink)] hover:[background:rgba(232,228,216,.04)]`)}function gN({nav:e,home:t}){let n=Rh(`views.host`),{views:r}=$M(),i=qp(),a=lt(),o=n?e.filter(e=>e.id!==`views`):e;return(0,z.jsxs)(`aside`,{"aria-label":`Primary`,style:{width:58},className:`flex flex-none flex-col items-center gap-0.5 py-4 [border-right:1px_solid_var(--line)] [background:linear-gradient(180deg,rgba(20,19,16,.6),rgba(20,19,16,.2))]`,children:[(0,z.jsx)(kn,{to:t,title:`crouter`,className:`flex items-center justify-center pt-1 pb-4 no-underline`,children:(0,z.jsx)(`span`,{className:`flex flex-none items-center justify-center rounded-md text-xs font-bold [background:var(--bone)] [color:var(--bone-ink)] [font-family:var(--font-inst)]`,style:{width:22,height:22},children:`cr`})}),(0,z.jsx)(`button`,{type:`button`,onClick:()=>cN(a),title:`New chat (⌘⇧O)`,"aria-label":`New chat`,className:`mb-1 flex size-9 items-center justify-center rounded-lg transition-all [color:var(--bone-ink)] [background:var(--bone)] hover:[background:var(--ink)]`,children:(0,z.jsx)(kf,{size:18,"aria-hidden":!0})}),o.map(e=>{let t=uN(e.id);return(0,z.jsxs)(An,{to:e.path,end:e.path===`/`,title:e.label,className:({isActive:e})=>hN(e),children:[(0,z.jsx)(t,{size:18,"aria-hidden":!0}),e.id===`inbox`&&i>0&&(0,z.jsx)(`span`,{className:`absolute right-[5px] top-[5px] size-2.5 rounded-full [background:var(--blk)] [box-shadow:0_0_10px_rgba(255,94,54,.55)] [animation:pulse-hot_1.6s_ease-out_infinite]`})]},e.id)}),n&&r.map(e=>(0,z.jsx)(An,{to:`/views/${encodeURIComponent(e.id)}`,title:e.title,className:({isActive:e})=>hN(e),children:(0,z.jsx)(dN,{size:18,"aria-hidden":!0})},e.id)),(0,z.jsx)(`div`,{className:`flex-1`}),(0,z.jsx)(kn,{to:`/settings`,title:`silas`,className:`flex size-9 items-center justify-center rounded-lg border border-transparent no-underline opacity-75 transition-all [color:var(--ink2)] hover:opacity-100 hover:[color:var(--ink)] hover:[background:rgba(232,228,216,.04)]`,children:(0,z.jsx)(_f,{size:18,"aria-hidden":!0})})]})}function _N(e,t){let n=(0,S.useRef)(e),r=(0,S.useRef)(t);n.current=e,r.current=t,(0,S.useEffect)(()=>{let e=e=>{let t=document.activeElement;t instanceof HTMLTextAreaElement||t instanceof HTMLInputElement||t instanceof HTMLElement&&t.isContentEditable||n.current(e)&&(e.preventDefault(),r.current(e))};return window.addEventListener(`keydown`,e),()=>window.removeEventListener(`keydown`,e)},[])}function vN(e){return e.attention_count>0?`blocked`:e.status}function yN({open:e,onClose:t}){let{nodes:n}=dp(),r=lt(),[i,a]=(0,S.useState)(``),[o,s]=(0,S.useState)(0),c=(0,S.useRef)(null),l=(0,S.useMemo)(()=>{let e=n.filter(e=>e.enterable).map(e=>({id:e.node_id,title:Dm(e),dot:vN(e),kind:e.kind,last:e.last_activity??e.created}));e.sort((e,t)=>t.last.localeCompare(e.last));let t=i.trim().toLowerCase();return t?e.filter(e=>e.title.toLowerCase().includes(t)||e.kind.toLowerCase().includes(t)):e},[n,i]);if((0,S.useEffect)(()=>{e&&(a(``),s(0),c.current?.focus())},[e]),(0,S.useEffect)(()=>{s(e=>Math.min(e,Math.max(0,l.length-1)))},[l.length]),!e)return null;let u=e=>{e&&(r(`/c/${encodeURIComponent(e.id)}`),t())};return(0,z.jsx)(`div`,{className:`fixed inset-0 z-50 flex items-start justify-center px-4 pt-24`,style:{background:`var(--scrim)`},onClick:t,children:(0,z.jsxs)(`div`,{className:`panel w-full max-w-xl overflow-hidden p-0`,onClick:e=>e.stopPropagation(),onKeyDown:e=>{e.key===`Escape`?(e.preventDefault(),t()):e.key===`ArrowDown`?(e.preventDefault(),s(e=>Math.min(e+1,l.length-1))):e.key===`ArrowUp`?(e.preventDefault(),s(e=>Math.max(e-1,0))):e.key===`Enter`&&(e.preventDefault(),u(l[o]))},children:[(0,z.jsxs)(`div`,{className:`flex items-center gap-2 border-b px-4 py-3`,style:{borderColor:`var(--line)`},children:[(0,z.jsx)(`span`,{className:`instlabel`,style:{color:`var(--dim)`},children:`Jump to`}),(0,z.jsx)(`input`,{ref:c,value:i,onChange:e=>a(e.currentTarget.value),placeholder:`Search conversations…`,className:`flex-1 bg-transparent text-sm outline-none`,style:{color:`var(--ink)`}}),(0,z.jsx)(`span`,{className:`kbd`,children:`esc`})]}),(0,z.jsx)(`ul`,{className:`max-h-80 overflow-auto py-1`,children:l.length===0?(0,z.jsx)(`li`,{className:`px-4 py-3 text-sm italic`,style:{color:`var(--mut)`},children:`no live nodes`}):l.map((e,t)=>(0,z.jsx)(`li`,{children:(0,z.jsxs)(`button`,{type:`button`,onClick:()=>u(e),onMouseEnter:()=>s(t),className:Y(`flex w-full items-center gap-2.5 px-4 py-2 text-left transition-colors`,t===o&&`bg-[color-mix(in_oklch,var(--ink)_6%,transparent)]`),children:[(0,z.jsx)(`span`,{className:Y(`dot shrink-0`,e.dot)}),(0,z.jsx)(`span`,{className:`min-w-0 flex-1 truncate text-sm`,style:{color:`var(--ink)`},children:e.title}),(0,z.jsx)(`span`,{className:`shrink-0 text-xs`,style:{fontFamily:`var(--font-inst)`,letterSpacing:`0.04em`,color:`var(--mut)`},children:e.kind})]})},e.id))})]})})}var bN=/^\/(nodes|c)\//;function xN({children:e}){let t=Ih(),n=ot(),r=lt(),i=Rh(`views.host`),[a,o]=(0,S.useState)(!1);_N((0,S.useCallback)(e=>(e.metaKey||e.ctrlKey)&&e.shiftKey&&!e.altKey&&e.code===`KeyO`,[]),(0,S.useCallback)(()=>cN(r),[r])),_N((0,S.useCallback)(e=>(e.metaKey||e.ctrlKey)&&!e.shiftKey&&!e.altKey&&e.code===`KeyK`,[]),(0,S.useCallback)(()=>o(e=>!e),[]));let s=t.density===`comfortable`,c=i&&s,l=t.nav[0]?.path??`/`,u=(0,z.jsx)(yN,{open:a,onClose:()=>o(!1)});return c?(0,z.jsxs)(`div`,{className:`flex h-full min-h-0 flex-col`,children:[(0,z.jsx)(SN,{home:l}),(0,z.jsx)(`main`,{className:`min-h-0 flex-1 overflow-hidden`,children:e}),u]}):s?(0,z.jsxs)(`div`,{className:`flex h-full min-h-0 flex-col`,children:[(0,z.jsxs)(`header`,{className:`flex h-10 shrink-0 items-center justify-between gap-3 border-b border-border bg-card/40 px-3`,children:[(0,z.jsx)(kn,{to:l,className:`text-sm font-semibold tracking-tight text-foreground`,children:`crouter`}),(0,z.jsx)(AT,{})]}),(0,z.jsxs)(`div`,{className:`flex min-h-0 flex-1`,children:[(0,z.jsx)(oN,{nav:t.nav}),(0,z.jsx)(`main`,{className:`min-h-0 flex-1 overflow-hidden`,children:e})]}),u]}):(0,z.jsxs)(`div`,{className:`flex h-full min-h-0`,children:[bN.test(n.pathname)?(0,z.jsx)(gN,{nav:t.nav,home:l}):(0,z.jsx)(pN,{nav:t.nav,home:l}),(0,z.jsx)(`main`,{className:`min-h-0 flex-1 overflow-hidden`,children:e}),u]})}function SN({home:e}){let{views:t}=$M(),n=qp(),r=lt();return(0,z.jsxs)(`header`,{className:`flex h-13 shrink-0 items-center gap-0 border-b px-9`,style:{borderColor:`rgba(40,36,26,.1)`,background:`var(--card)`},children:[(0,z.jsxs)(kn,{to:e,className:`flex items-center gap-2 shrink-0`,children:[(0,z.jsx)(`span`,{className:`flex size-5.5 items-center justify-center rounded-md text-xs font-bold`,style:{fontFamily:`var(--font-inst)`,background:`var(--foreground)`,color:`var(--background)`},children:`cr`}),(0,z.jsx)(`span`,{className:`text-lg`,style:{fontFamily:`var(--font-display)`,fontWeight:500,color:`var(--foreground)`},children:`crouter`})]}),(0,z.jsxs)(`div`,{className:`ml-3.5 flex items-center gap-1 overflow-x-auto`,children:[t.map(e=>(0,z.jsxs)(An,{to:`/views/${encodeURIComponent(e.id)}`,className:({isActive:e})=>Y(`flex shrink-0 items-center gap-2 whitespace-nowrap rounded-lg border px-3.5 py-1.5 text-sm font-medium transition-colors`,e?`border-border/50 bg-background text-foreground shadow-sm`:`border-transparent text-muted-foreground hover:bg-accent/40 hover:text-foreground`),style:({isActive:e})=>e?{boxShadow:`0 6px 16px -10px rgba(60,50,30,.5), inset 0 1px 0 rgba(255,255,255,.9)`}:{},children:[(0,z.jsx)(`span`,{className:`size-1.5 shrink-0 rounded-full`,style:{background:`#247d4b`}}),e.title]},e.id)),(0,z.jsx)(`button`,{type:`button`,onClick:()=>cN(r),className:`flex shrink-0 items-center rounded-lg border border-transparent px-3 py-1.5 text-muted-foreground/50 transition-colors hover:text-foreground`,title:`New chat (⌘⇧O)`,"aria-label":`New chat`,children:(0,z.jsx)(kf,{className:`size-4`})})]}),(0,z.jsxs)(`div`,{className:`ml-auto flex items-center gap-2`,children:[(0,z.jsx)(AT,{}),(0,z.jsx)(`button`,{type:`button`,onClick:()=>r(`/`),className:`flex size-9 items-center justify-center rounded-lg border text-muted-foreground transition-colors hover:text-foreground`,style:{borderColor:`rgba(40,36,26,.1)`,background:`rgba(255,255,255,.4)`},title:`Chats`,"aria-label":`Chats`,children:(0,z.jsx)(Df,{className:`size-4`})}),(0,z.jsxs)(`button`,{type:`button`,onClick:()=>r(`/inbox`),className:`relative flex size-9 items-center justify-center rounded-lg border text-muted-foreground transition-colors hover:text-foreground`,style:{borderColor:`rgba(40,36,26,.1)`,background:`rgba(255,255,255,.4)`},title:`Inbox`,"aria-label":`Inbox`,children:[(0,z.jsx)(Sf,{className:`size-4`}),n>0&&(0,z.jsx)(`span`,{className:`absolute -right-1 -top-1 rounded-full bg-destructive px-1 text-xs font-bold text-white`,style:{fontFamily:`var(--font-inst)`,minWidth:`14px`,lineHeight:`14px`},children:n})]}),(0,z.jsx)(`div`,{className:`size-8 shrink-0 rounded-full border-2 border-white`,style:{background:`linear-gradient(135deg,#d8b97a,#b08b4a)`,boxShadow:`0 2px 8px rgba(60,50,30,.25)`}})]})]})}function CN(){let e=em(e=>e.toasts),t=em(e=>e.dismiss);return e.length===0?null:(0,z.jsx)(`div`,{className:`pointer-events-none fixed inset-x-0 bottom-4 z-50 flex flex-col items-center gap-2`,children:e.map(e=>(0,z.jsx)(`button`,{type:`button`,onClick:()=>t(e.id),className:Y(`pointer-events-auto rounded-lg border px-4 py-2 text-sm shadow-md transition-opacity`,e.tone===`success`?`border-success/40 bg-success/10 text-success`:`border-border bg-card text-foreground`),children:e.message},e.id))})}function wN(){return(0,z.jsx)(Ph,{children:(0,z.jsx)(Dn,{children:(0,z.jsxs)($d,{delayDuration:300,children:[(0,z.jsx)(aN,{}),(0,z.jsx)(xN,{children:(0,z.jsx)(iN,{})}),(0,z.jsx)(CN,{})]})})})}var TN=document.getElementById(`root`);if(!TN)throw Error(`crtr web: #root element not found in index.html`);(0,nd.createRoot)(TN).render((0,z.jsx)(S.StrictMode,{children:(0,z.jsx)(wN,{})}));