@wrongstack/webui 0.309.1 → 0.310.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (102) hide show
  1. package/dist/assets/{AgentRosterView-CBiLW8dV.js → AgentRosterView-DAci8zSJ.js} +1 -1
  2. package/dist/assets/{AnalyticsDashboard-Grpp3QKX.js → AnalyticsDashboard-BltY_7sZ.js} +1 -1
  3. package/dist/assets/{AudienceMemoryPanel-DU3hUuUl.js → AudienceMemoryPanel-uMGOcvUl.js} +1 -1
  4. package/dist/assets/{ChangesView-DOrw4udd.js → ChangesView-QgbkAV21.js} +1 -1
  5. package/dist/assets/{ChronicleDashboard-DlCuQRB8.js → ChronicleDashboard-CjC3Tpdp.js} +1 -1
  6. package/dist/assets/{CodeEditor-CU6zP0r8.js → CodeEditor-BjIBUPk8.js} +1 -1
  7. package/dist/assets/{CodeMap-BkJqVDg2.js → CodeMap-BpOQHHcp.js} +1 -1
  8. package/dist/assets/{ConfirmModal-BJOVE-JI.js → ConfirmModal-DNp4NzCY.js} +1 -1
  9. package/dist/assets/{CronJobsPanel-B3UJP0mn.js → CronJobsPanel-DyxLGNzd.js} +1 -1
  10. package/dist/assets/{DeadCodeScanPanel-_iUu5-90.js → DeadCodeScanPanel-Qf3HU4hj.js} +1 -1
  11. package/dist/assets/{DebugDashboard-NTiN0je2.js → DebugDashboard-D0nD5Mi-.js} +1 -1
  12. package/dist/assets/{DesignGalleryView-BG2Nr8wy.js → DesignGalleryView-CzSTqD9U.js} +1 -1
  13. package/dist/assets/{GoalView-Dakf9ZR8.js → GoalView-CZHQeAKT.js} +1 -1
  14. package/dist/assets/{KanbanView-BR07PhbR.js → KanbanView-DRox56Vn.js} +1 -1
  15. package/dist/assets/{MailboxDetailView-D31IhaK_.js → MailboxDetailView-D6Ywy9n_.js} +1 -1
  16. package/dist/assets/{MemoryDrawer-6n0Etoz4.js → MemoryDrawer--0NW-5zb.js} +1 -1
  17. package/dist/assets/{MemoryManager-7DSVhxZf.js → MemoryManager-Dpsvz_n_.js} +1 -1
  18. package/dist/assets/{ModelPicker-C72kprRH.js → ModelPicker-CBQqO9xG.js} +1 -1
  19. package/dist/assets/{OfficeMapPanel-Dc8-4CiU.js → OfficeMapPanel-D1oaHb4z.js} +1 -1
  20. package/dist/assets/{ProcessMonitor-BGLc3yNM.js → ProcessMonitor-Bhu8vdfD.js} +1 -1
  21. package/dist/assets/{PromptJournalView-CxDiqUkN.js → PromptJournalView-C1-hyXix.js} +1 -1
  22. package/dist/assets/{QueuePanel-B2f1HbN0.js → QueuePanel-CuDxuazR.js} +1 -1
  23. package/dist/assets/{RefreshDebugView-D8F95QxF.js → RefreshDebugView-BxVmfUp2.js} +1 -1
  24. package/dist/assets/{RequirementIntakeView-BRolSCpk.js → RequirementIntakeView-BiEvDV41.js} +1 -1
  25. package/dist/assets/{SageTabs-DblSyqzB.js → SageTabs-BE4m8VUY.js} +2 -2
  26. package/dist/assets/{SddFlowGraph-YOPsSaFc.js → SddFlowGraph-_8Xuc_cU.js} +1 -1
  27. package/dist/assets/{SddHub-IusMUP2D.js → SddHub-B2kE8AiT.js} +1 -1
  28. package/dist/assets/{SessionInspectView-B633Bi0X.js → SessionInspectView-DOLLUo3T.js} +1 -1
  29. package/dist/assets/{SessionList-BCE6NSCu.js → SessionList-BhXjS40z.js} +1 -1
  30. package/dist/assets/{SessionsDashboard-N__p7_i5.js → SessionsDashboard-tfMU0z-y.js} +1 -1
  31. package/dist/assets/{SetupScreen-B06asuJC.js → SetupScreen-CXE-RhNU.js} +1 -1
  32. package/dist/assets/{SkillDetailView-BxpQcgfh.js → SkillDetailView-DCkPQZ5H.js} +3 -3
  33. package/dist/assets/{SpecsView-Ddbow1sn.js → SpecsView-DKAxgGNr.js} +1 -1
  34. package/dist/assets/{TechStackView-HTZUTbuu.js → TechStackView-99ogOMkD.js} +1 -1
  35. package/dist/assets/{TerminalPanel-Bi3CmRvI.js → TerminalPanel-CUwCc0Hv.js} +1 -1
  36. package/dist/assets/{Toaster-COVFFUKo.js → Toaster-AH2vaxrX.js} +1 -1
  37. package/dist/assets/{activity-Dt0RpmkN.js → activity-BA8C9ueU.js} +1 -1
  38. package/dist/assets/{activity-7Sj9fdO-.js → activity-BYnOci5N.js} +1 -1
  39. package/dist/assets/{activity-B7hiQ_IX.js → activity-COQ9xSFu.js} +1 -1
  40. package/dist/assets/{activity-B-LcgiXm.js → activity-CuJqhGz7.js} +1 -1
  41. package/dist/assets/{activity-JmCi-KcX.js → activity-D3ZccGOh.js} +1 -1
  42. package/dist/assets/{activity-Cq0Lqtgz.js → activity-YMES6OPI.js} +1 -1
  43. package/dist/assets/{activity-DVuAYnoi.js → activity-zlMMaNE1.js} +1 -1
  44. package/dist/assets/{button-DAT5OnLL.js → button-Dhmop_yM.js} +1 -1
  45. package/dist/assets/{chat-store-CtIMb3sU.js → chat-store-BiEXyguk.js} +1 -1
  46. package/dist/assets/{codemap-activity-store-CA_14DHd.js → codemap-activity-store-BWt_a7Gs.js} +1 -1
  47. package/dist/assets/codemap-index-store-CDhApwWQ.js +1 -0
  48. package/dist/assets/{dialog-BMrjwjA6.js → dialog-DPl7DolS.js} +1 -1
  49. package/dist/assets/{empty-state-Bf05Z1d2.js → empty-state-IT10GzRA.js} +1 -1
  50. package/dist/assets/i18n-n_1tBMdC.js +2 -0
  51. package/dist/assets/index-B8J_xxU5.css +1 -0
  52. package/dist/assets/{index-cUeJ0FkT.js → index-gKjRx1pQ.js} +55 -55
  53. package/dist/assets/{input-Ccsxvwz6.js → input-C3rIQ26u.js} +1 -1
  54. package/dist/assets/{mailbox-store-BWD7JeF9.js → mailbox-store-DhAVkVJQ.js} +1 -1
  55. package/dist/assets/{roster-ws-lMIf13ag.js → roster-ws-Vj_HH49O.js} +1 -1
  56. package/dist/assets/session-store-CKpAwNIm.js +1 -0
  57. package/dist/assets/{settings-DfID_cS9.js → settings-BhmwkYVs.js} +1 -1
  58. package/dist/assets/settings-BpSRCuSL.js +1 -0
  59. package/dist/assets/settings-BvbMvXxL.js +1 -0
  60. package/dist/assets/settings-Dk78XWnd.js +1 -0
  61. package/dist/assets/settings-Mh81dlWD.js +1 -0
  62. package/dist/assets/settings-_V6PolUx.js +1 -0
  63. package/dist/assets/settings-koX3yNr7.js +1 -0
  64. package/dist/assets/{shared-Y6T3EEnd.js → shared-BUXBOqyO.js} +1 -1
  65. package/dist/assets/{stores-BUtRik4k.js → stores-d8rhzRAc.js} +1 -1
  66. package/dist/assets/ui-store-3HoYrTu5.js +1 -0
  67. package/dist/assets/useWebSocket-Co9oG6EI.js +29 -0
  68. package/dist/assets/{utils-B5X3DKef.js → utils-BecmXwgG.js} +1 -1
  69. package/dist/assets/{vector-memory-panel-CnBqV6GK.js → vector-memory-panel-CBA4CK6N.js} +1 -1
  70. package/dist/assets/{vendor-DLS502Zs.js → vendor-DZ9_OO6N.js} +20 -20
  71. package/dist/assets/{view-navigation-Hd631M1W.js → view-navigation-C1UDTk5R.js} +1 -1
  72. package/dist/assets/ws-client-DXT4gi-N.js +1 -0
  73. package/dist/components/ChatView/AgentTabs.d.ts +16 -0
  74. package/dist/components/ChatView/SubagentTranscriptView.d.ts +16 -0
  75. package/dist/components/ChatView/useChatViewState.d.ts +7 -0
  76. package/dist/components/SettingsPanel/LogsSettingsTab.d.ts +1 -1
  77. package/dist/components/SettingsPanel/MCPSection.d.ts +2 -12
  78. package/dist/components/SettingsPanel/ModelSchemaEditor.d.ts +7 -0
  79. package/dist/components/SettingsPanel/contracts.d.ts +29 -0
  80. package/dist/components/SettingsPanel/official-servers.d.ts +1 -1
  81. package/dist/hooks/useLiveContextDebug.d.ts +97 -0
  82. package/dist/index.html +23 -23
  83. package/dist/index.js +11010 -10233
  84. package/dist/protocol-compatibility.d.ts +1 -1
  85. package/dist/stores/local-prefs.d.ts +13 -0
  86. package/dist/stores/session-store.d.ts +9 -1
  87. package/dist/stores/ui-store.d.ts +12 -0
  88. package/dist/types/system.d.ts +12 -0
  89. package/package.json +12 -11
  90. package/dist/assets/codemap-index-store-BlPxA13l.js +0 -1
  91. package/dist/assets/i18n-CYYBUSJB.js +0 -2
  92. package/dist/assets/index-D2tx76V0.css +0 -1
  93. package/dist/assets/session-store-D4PNeAGe.js +0 -1
  94. package/dist/assets/settings-B36QpLU8.js +0 -1
  95. package/dist/assets/settings-B8Hgh9_X.js +0 -1
  96. package/dist/assets/settings-B8uABeWU.js +0 -1
  97. package/dist/assets/settings-CSwU_zzD.js +0 -1
  98. package/dist/assets/settings-FXJ8SsEh.js +0 -1
  99. package/dist/assets/settings-RQKnX4dA.js +0 -1
  100. package/dist/assets/ui-store-DxMnhARg.js +0 -1
  101. package/dist/assets/useWebSocket-Ew1Bbjci.js +0 -29
  102. package/dist/assets/ws-client-DYrfK01f.js +0 -1
@@ -1 +1 @@
1
- import{n as e}from"./ui-store-DxMnhARg.js";var t={chat:`chat`,agents:`chat`,files:`files`,changes:`changes`,mailbox:`mailbox`,skills:`skill`,worktrees:`chat`,design:`design-gallery`,officemap:`officemap`},n={chat:`chat`,files:`files`,changes:`changes`,mailbox:`mailbox`,skill:`skills`,officemap:`officemap`,"design-gallery":`design`},r={1:`chat`,2:`files`,3:`changes`,4:`mailbox`,5:`skills`,6:`officemap`,0:`design`},i={chat:`Ctrl+1`,agents:``,files:`Ctrl+2`,changes:`Ctrl+3`,mailbox:`Ctrl+4`,skills:`Ctrl+5`,worktrees:`Ctrl+Shift+W`,design:`Ctrl+0`,officemap:`Ctrl+6`};function a(e){return t[e]??`chat`}function o(e){return i[e]??``}function s(t){let n=e.getState();n.currentView!==t&&n.setCurrentView(t)}function c(t){let n=e.getState();n.setSidebarOpen(!0),n.selectActivity(t),s(a(t))}function l(t){let n=e.getState();if(!n.sidebarOpen)n.setSidebarOpen(!0),n.selectActivity(t);else if(n.activeActivity===t){n.setSidebarOpen(!1);return}else n.activeActivity===`agents`&&n.setSidebarOpen(!0),n.selectActivity(t);s(a(t))}function u(t){let n=e.getState();if(n.currentView===t){c(`chat`);return}n.setSidebarOpen(!1),s(t)}function d(t){let r=n[t];if(r){c(r);return}e.getState().setSidebarOpen(!1),s(t)}export{o as a,l as i,d as n,c as o,u as r,r as t};
1
+ import{n as e}from"./ui-store-3HoYrTu5.js";var t={chat:`chat`,agents:`chat`,files:`files`,changes:`changes`,mailbox:`mailbox`,skills:`skill`,worktrees:`chat`,design:`design-gallery`,officemap:`officemap`},n={chat:`chat`,files:`files`,changes:`changes`,mailbox:`mailbox`,skill:`skills`,officemap:`officemap`,"design-gallery":`design`},r={1:`chat`,2:`files`,3:`changes`,4:`mailbox`,5:`skills`,6:`officemap`,0:`design`},i={chat:`Ctrl+1`,agents:``,files:`Ctrl+2`,changes:`Ctrl+3`,mailbox:`Ctrl+4`,skills:`Ctrl+5`,worktrees:`Ctrl+Shift+W`,design:`Ctrl+0`,officemap:`Ctrl+6`};function a(e){return t[e]??`chat`}function o(e){return i[e]??``}function s(t){let n=e.getState();n.currentView!==t&&n.setCurrentView(t)}function c(t){let n=e.getState();n.setSidebarOpen(!0),n.selectActivity(t),s(a(t))}function l(t){let n=e.getState();if(!n.sidebarOpen)n.setSidebarOpen(!0),n.selectActivity(t);else if(n.activeActivity===t){n.setSidebarOpen(!1);return}else n.activeActivity===`agents`&&n.setSidebarOpen(!0),n.selectActivity(t);s(a(t))}function u(t){let n=e.getState();if(n.currentView===t){c(`chat`);return}n.setSidebarOpen(!1),s(t)}function d(t){let r=n[t];if(r){c(r);return}e.getState().setSidebarOpen(!1),s(t)}export{o as a,l as i,d as n,c as o,u as r,r as t};
@@ -0,0 +1 @@
1
+ import{n as e}from"./rolldown-runtime-hePW80VL.js";import{za as t}from"./vendor-DZ9_OO6N.js";import{n}from"./utils-BecmXwgG.js";import{t as r}from"./session-store-CKpAwNIm.js";function i(e){typeof requestAnimationFrame==`function`?requestAnimationFrame(e):queueMicrotask(e)}var a=new class{pending=new Map;scheduled=!1;push(e,t,n){if(!t)return;let r=this.pending.get(e);r?(r.buffer+=t,r.flush=n):this.pending.set(e,{buffer:t,flush:n}),this.schedule()}schedule(){this.scheduled||(this.scheduled=!0,i(()=>{this.scheduled=!1,this.drain()}))}drain(){if(this.pending.size===0)return;let e=Array.from(this.pending.entries());this.pending.clear();for(let[t,n]of e)n.buffer&&n.flush(t,n.buffer)}drop(e){this.pending.delete(e)}dropAll(){this.pending.clear()}flush(e){let t=this.pending.get(e);t&&(this.pending.delete(e),t.buffer&&t.flush(e,t.buffer))}flushAll(){this.drain()}},o={maxReconnectAttempts:10,initialBackoffMs:1e3,maxBackoffMs:3e4,backoffMultiplier:2,jitterRatio:0,queueLimit:1e3,heartbeatIntervalMs:0,heartbeatTimeoutMs:0};function s(){return{phase:`idle`,reconnectAttempt:0,lastActivityAt:null,stopped:!1}}function c(e){return e.stopped?e:{...e,phase:`connecting`}}function l(e,t=Date.now()){return{...e,phase:`open`,reconnectAttempt:0,lastActivityAt:t,stopped:!1}}function u(e,t=Date.now()){return{...e,lastActivityAt:t}}function d(e){return{...e,phase:`closed`,stopped:!0}}function f(e){return{...e,phase:`idle`,reconnectAttempt:0,stopped:!1}}function p(e,t,n=Date.now(),r=Math.random){if(e.stopped||e.reconnectAttempt>=t.maxReconnectAttempts)return{state:{...e,phase:`closed`},plan:null};let i=e.reconnectAttempt+1,a=Math.min(t.initialBackoffMs*t.backoffMultiplier**(i-1),t.maxBackoffMs),o=(r()*2-1)*t.jitterRatio,s=Math.max(0,Math.round(a*(1+o)));return{state:{...e,phase:`reconnecting`,reconnectAttempt:i},plan:{attempt:i,delayMs:s,retryAt:n+s}}}var m=`abort,ping,user_message,tool.confirm_result,topic.advice,completion.request,model.switch,model.refine,model.fallback_choice,autonomy.switch,context.clear,context.compact,context.debug,context.editor.open,context.editor.validate,context.editor.apply,context.mode.create,context.mode.delete,context.mode.switch,context.mode.update,context.modes.list,context.repair,mode.switch,modes.list,session.checkpoints,session.delete,session.inspect,session.new,session.rename,session.resume,session.rewind,session.save,sessions.list,side_effects.list,stats.get,todo.update,todos.clear,todos.get,todos.remove`.split(`,`),h=[`collab.join`,`collab.leave`,`collab.annotate`,`collab.resolve`,`collab.request_pause`,`collab.resume`,`collab.grant_control`,`collab.inject_tool`,`mailbox.action`,`mailbox.agents`,`mailbox.clear`,`mailbox.compact`,`mailbox.messages`,`mailbox.purge`,`mailbox.send`],g=`brain.ask,brain.config.get,brain.config.set,brain.risk,brain.status,chronicle.facet,chronicle.facets,chronicle.graph,chronicle.metrics,chronicle.query,chronicle.status,config.doctor,design.list,design.materialize,design.set,design.state,design.swap,design.tune,design.use,design.verify,memory.list,memory.sage.backfillRecoverable,memory.sage.candidateResolve,memory.sage.delete,memory.sage.forFile,memory.sage.get,memory.sage.graph,memory.sage.list,memory.sage.listCandidates,memory.sage.listPage,memory.sage.recover,memory.sage.remember,memory.sage.searchBreakdown,memory.sage.update`.split(`,`),_=`auth.oauth.cancel,auth.oauth.code,auth.oauth.start,mcp.add,mcp.disable,mcp.discover,mcp.enable,mcp.list,mcp.prompt.get,mcp.prompts,mcp.remove,mcp.resource.read,mcp.resources,mcp.restart,mcp.sleep,mcp.update,mcp.wake,prompts.content,prompts.create,prompts.favorite,prompts.journal,prompts.list,prompts.recent,prompts.search,prompts.used,skills.content,skills.create,skills.edit,skills.export,skills.install,skills.list,skills.uninstall,skills.update`.split(`,`),v=`goal-state.get,goal.addTask,goal.assess,goal.assignTask,goal.clear,goal.get,goal.list,goal.load,goal.moveTask,goal.pause,goal.resume,goal.retryTask,goal.revert,goal.runTask,goal.save,goal.selectPhase,goal.start,goal.state,goal.status,goal.stop,goal.taskStatus,goal.toggleAutonomous,plan.get,plan.item.update,plan.template_use,task.update,tasks.get`.split(`,`),ee=`sdd.board.cancel_task,sdd.board.cleanup_worktrees,sdd.board.delete_task,sdd.board.destroy,sdd.board.get,sdd.board.list,sdd.board.pause,sdd.board.reassign,sdd.board.resume,sdd.board.retry,sdd.board.retry_all_failed,sdd.board.rollback,sdd.board.set_task_fallbacks,sdd.board.set_task_model,sdd.board.set_task_verification,sdd.board.split_task,sdd.board.stop,sdd.run.from_graph,sdd.run.from_spec,sdd.run.start,sdd.spec.approve,sdd.spec.discard,sdd.spec.get,sdd.spec.message,sdd.spec.rewind,sdd.spec.start,specs.get,specs.list,specs.taskStatus`.split(`,`),te=`files.create,files.delete,files.list,files.move,files.read,files.rename,files.skeleton,files.tree,files.write,git.changes,git.diff,git.info,projects.add,projects.list,projects.select,working_dir.set,worktree.cleanup,worktree.diff,worktree.merge,worktree.remove,worktree.scan,shell.open,process.kill,process.killAll,process.list,terminal.close,terminal.create,terminal.input,terminal.resize`.split(`,`),ne=`codebase.index.server.shutdown,connections.health,connections.service_action,diag.get,key.add,key.delete,key.set_active,key.update,prefs.get,prefs.update,provider.add,provider.clear_models,provider.custom_models.remove,provider.custom_models.set,provider.models,provider.models.search,provider.probe,provider.remove,provider.status.clear,provider.status.get,provider.status.retry,provider.undo_clear,provider.update,providers.list,providers.saved,tool.disable,tool.enable,tools.list,webui.shutdown`.split(`,`),re=`error,log,pong,side_effects,agent.status_changed,agent.timeline.message,client.status_update,chimera.report_available,compaction.failed,completion.result,context.compacted,context.debug,context.editor.snapshot,context.editor.validation,context.editor.applied,context.mode.changed,context.modes.list,context.repaired,ctx.max_context,ctx.pct,delegate.completed,delegate.started,iteration.completed,iteration.limit_reached,iteration.started,model.refine_result,modes.list,provider.active_blocked,provider.error,provider.fallback,provider.fallback_pending,provider.response,provider.retry,provider.status_changed,provider.stream_error,provider.text_delta,provider.thinking_delta,run.result,session.checkpoints,session.damaged,session.end,session.inspect,session.rewound,session.start,session.stats,sessions.list,sessions.status_update,stats.get,token.cost_estimate_unavailable,token.threshold,tool.confirm_needed,tool.disabled,tool.enabled,tool.executed,tool.loop_detected,tool.progress,tool.started,topic.advice_result,tools.list,trust.persisted`.split(`,`),ie=[`collab.annotation.added`,`collab.annotation.resolved`,`collab.event`,`collab.injection.granted`,`collab.participant.joined`,`collab.participant.left`,`collab.pause.granted`,`collab.pause.released`,`collab.state`,`mailbox.action_result`,`mailbox.agent_registered`,`mailbox.agent_deregistered`,`mailbox.agents`,`mailbox.cleared`,`mailbox.compacted`,`mailbox.event`,`mailbox.messages`,`mailbox.sent`,`mailbox.purged`,`mailbox.received`,`subagent.budget_extended`,`subagent.event`],ae=`brain.answer,brain.config,brain.event,brain.status,chronicle.error,chronicle.facet_result,chronicle.facets_result,chronicle.graph_result,chronicle.metrics_result,chronicle.query_result,chronicle.status_result,config.doctor.result,design.list,design.materialize,design.set,design.state,design.swap,design.tune,design.use,design.verify,memory.event,memory.list,memory.sage.backfillRecoverable,memory.sage.candidateResolve,memory.sage.delete,memory.sage.forFile,memory.sage.get,memory.sage.graph,memory.sage.list,memory.sage.listCandidates,memory.sage.listPage,memory.sage.recover,memory.sage.remember,memory.sage.searchBreakdown,memory.sage.update`.split(`,`),oe=`mcp.content.error,mcp.content.selected,mcp.list,mcp.operation_result,mcp.prompts,mcp.resources,mcp.server.added,mcp.server.connected,mcp.server.disconnected,mcp.server.discovered,mcp.server.error,mcp.server.reconnected,mcp.server.removed,mcp.server.sleeping,mcp.server.updated,mcp.server.waking,prompts.content,prompts.created,prompts.favorite,prompts.journal,prompts.list,prompts.recent,prompts.search,prompts.used,skills.content,skills.created,skills.edited,skills.exported,skills.installed,skills.list,skills.uninstalled,skills.updated`.split(`,`),se=`budget.decision,budget.threshold_reached,coordinator.stats,coordinator.status,eternal.iteration,fleet.concurrency_update,goal-state.updated,goal.assess.result,goal.list,goal.paused,goal.resumed,goal.saved,goal.error,goal.stopped,goal.failed,goal.completed,goal.cleared,goal.reverted,goal.progress,goal.state,in_flight.ended,in_flight.started,plan.updated,task.completed,task.failed,task.pending,task.started,tasks.updated,todos.cleared,todos.updated`.split(`,`),ce=[`kanban.task.activity`,`sdd.board.lifecycle_result`,`sdd.board.list`,`sdd.board.snapshot`,`sdd.run.started`,`sdd.spec.agent_text`,`sdd.spec.error`,`sdd.spec.snapshot`,`specs.detail`,`specs.list`],le=[`consensus.vote_cast`,`consensus.vote_initiated`,`consensus.vote_resolved`,`cron.job_fired`,`cron.snapshot`,`techstack.job.cancelled`,`techstack.job.failed`,`techstack.job.progress`,`techstack.job.started`,`techstack.report.delivered`,`techstack.report.ready`,`techstack.snapshot.updated`,`techstack.workspace.completed`],ue=`checkpoint.written,codemap.file_event,codemap.index_updated,codemap.tool_executed,codemap.tool_started,file.saved,files.created,files.deleted,files.list,files.moved,files.read,files.renamed,files.skeleton_result,files.tree,files.tree.changed,files.written,git.changes,git.diff,git.info,process.list,projects.added,projects.list,projects.selected,terminal.exit,terminal.output,working_dir.changed,worktree.cleanup_result,worktree.diff_result,worktree.event,worktree.merge_result,worktree.orphans,worktree.state`.split(`,`),de=[`auth.oauth.status`,`codebase.index.server.shutdown_result`,`connections.auto_heal_status`,`connections.health_error`,`connections.health_result`,`connections.service_action_result`,`diag.get`,`key.operation_result`,`model.switch_result`,`prefs.updated`,`provider.catalog`,`provider.models`,`provider.models.search_result`,`provider.probe`,`provider.status.snapshot`,`providers.saved`],fe=[...m,...h,...te,...ne,...v,...ee,...g,..._],pe=[...re,...ie,...ue,...de,...se,...ce,...le,...ae,...oe],me=new Set(fe),he=new Set(pe);function ge(e,t){return(t===`client`?me:he).has(e)||e.startsWith(`kanban.`)&&e.length>7||e.startsWith(`agent-roster.`)&&e.length>13}var _e=new Set([`__proto__`,`constructor`,`prototype`]),ve=32;function y(e,t,n){if(n>ve)return{code:`too_deep`,message:`Protocol payload exceeds the nesting limit`,path:t};if(typeof e!=`object`||!e)return null;for(let r of Object.keys(e)){let i=`${t}.${r}`;if(_e.has(r))return{code:`unsafe_key`,message:`Unsafe protocol key: ${r}`,path:i};let a=y(e[r],i,n+1);if(a)return a}return null}function b(e,t){if(typeof e!=`object`||!e||Array.isArray(e))return{ok:!1,issue:{code:`invalid_envelope`,message:`Protocol message must be an object`}};let n=e;if(typeof n.type!=`string`||n.type.length===0)return{ok:!1,issue:{code:`invalid_type`,message:`Protocol message type must be a non-empty string`}};if(!ge(n.type,t))return{ok:!1,issue:{code:`unknown_type`,message:`Unknown ${t} message: ${n.type}`}};if(t===`server`&&!Object.hasOwn(n,`payload`))return{ok:!1,issue:{code:`invalid_envelope`,message:`Server protocol messages require a payload`}};let r=y(n,`$`,0);return r?{ok:!1,issue:r}:{ok:!0,message:e}}function ye(e,t){try{return b(JSON.parse(e),t)}catch{return{ok:!1,issue:{code:`invalid_envelope`,message:`Protocol frame is not valid JSON`}}}}function x(e){return typeof e==`object`&&e&&!Array.isArray(e)?e:null}function S(e,t=``){return typeof e==`string`?e:t}function C(e,t=0){return typeof e==`number`&&Number.isFinite(e)?e:t}function be(e){let t=x(e.payload);if(!t)return null;switch(e.type){case`provider.thinking_delta`:{let e=S(t.text);return e?{kind:`thinking-delta`,text:e}:null}case`provider.text_delta`:{let e=S(t.text);return e?{kind:`text-delta`,text:e,messageId:S(t.messageId)}:null}case`provider.response`:return{kind:`response`,content:t.content,stopReason:S(t.stopReason)};case`run.result`:return{kind:`run-result`,status:S(t.status),iterations:C(t.iterations,1),...typeof t.finalText==`string`?{finalText:t.finalText}:{}};case`error`:return{kind:`error`,message:S(t.message,`Run failed`)};default:return null}}function xe(e){let t=x(e.payload);if(!t)return null;if(e.type===`tool.started`){let e=S(t.name,`tool`);return{kind:`started`,id:S(t.id,e),name:e,input:t.input,messageId:S(t.messageId)}}if(e.type===`tool.progress`){let e=x(t.event);return{kind:`progress`,id:S(t.id),name:S(t.name,`tool`),eventType:S(e?.type),text:S(e?.text).trim()}}return e.type===`tool.executed`?{kind:`executed`,id:S(t.id),name:S(t.name),ok:t.ok!==!1,durationMs:C(t.durationMs),...typeof t.output==`string`?{output:t.output}:{},...Array.isArray(t.sage)?{sage:t.sage.filter(e=>typeof e==`string`)}:{}}:null}function w(e){if(!(typeof e!=`number`||!Number.isFinite(e)))return e}function T(e){return typeof e==`string`&&e.length>0?e:void 0}function Se(e){let t=x(e.payload);if(!t)return null;switch(e.type){case`fleet.concurrency_update`:return{kind:`concurrency`,active:C(t.fleetConcurrency),maximum:C(t.fleetConcurrencyMax),maxSpawns:w(t.maxSpawns),usedSpawns:w(t.usedSpawns),remainingSpawns:w(t.remainingSpawns),maxSpawnsSource:T(t.maxSpawnsSource),maxConcurrentSource:T(t.maxConcurrentSource),effectiveSource:T(t.effectiveSource),checkpointMaxSpawns:w(t.checkpointMaxSpawns),ceilingMismatch:t.ceilingMismatch===!0||void 0};case`client.status_update`:return{kind:`client-status`,status:t};case`sessions.status_update`:return{kind:`sessions`,sessions:Array.isArray(t.sessions)?t.sessions:[]};case`coordinator.stats`:return{kind:`coordinator`,agents:Array.isArray(t.subagentStatuses)?t.subagentStatuses.filter(e=>x(e)!==null):[]};default:return null}}var Ce=[`protocol.directional-decoder`,`protocol.recursive-key-safety`,`chronicle.query`,`chronicle.facet`,`chronicle.facets`,`chronicle.graph`,`chronicle.metrics`,`chronicle.status`,`connections.health`,`context.topic-boundary`,`sdd.interview.continuity`,`sdd.run.from_graph`];function E(e){let t=e.protocolVersion,n=t===void 0,r=n?1:Math.min(t,1),i=n||Number.isInteger(t)&&t>=1,a=new Set(e.protocolCapabilities??[]);return{compatible:i,legacyPeer:n,version:r,capabilities:Ce.filter(e=>a.has(e))}}var D={listTools(e){this.send({type:`tools.list`},e)},listMemory(e){this.send({type:`memory.list`},e)},listSageMemories(e){this.send({type:`memory.sage.list`},e)},listSageMemoriesPage(e,t){this.send({type:`memory.sage.listPage`,payload:{...e}},t)},listMemoryCandidates(e,t){this.send({type:`memory.sage.listCandidates`,payload:{...e}},t)},searchSageBreakdown(e,t){this.send({type:`memory.sage.searchBreakdown`,payload:{query:e.query,...e.limit===void 0?{}:{limit:e.limit},...e.includeStale===void 0?{}:{includeStale:e.includeStale}}},t)},getSage(e,t){this.send({type:`memory.sage.get`,payload:{id:e}},t)},getSageGraph(e,t,n){this.send({type:`memory.sage.graph`,payload:{query:e,...t}},n)},updateSage(e,t,n){this.send({type:`memory.sage.update`,payload:{id:e,...t}},n)},deleteSage(e,t){this.send({type:`memory.sage.delete`,payload:{id:e,force:!0,...t===void 0?{}:{reason:t}}})},rememberSage(e,t){this.send({type:`memory.sage.remember`,payload:e},t)},findMemoriesForFile(e,t){this.send({type:`memory.sage.forFile`,payload:e},t)},recoverSage(e,t){this.send({type:`memory.sage.recover`,payload:e},t)},resolveMemoryCandidate(e,t){this.send({type:`memory.sage.candidateResolve`,payload:e},t)},backfillRecoverable(e,t){this.send({type:`memory.sage.backfillRecoverable`,payload:e},t)},listMcpServers(){this.send({type:`mcp.list`})},addMcpServer(e){this.send({type:`mcp.add`,payload:e})},removeMcpServer(e){this.send({type:`mcp.remove`,payload:{name:e}})},updateMcpServer(e){this.send({type:`mcp.update`,payload:e})},wakeMcpServer(e){this.send({type:`mcp.wake`,payload:{name:e}})},sleepMcpServer(e){this.send({type:`mcp.sleep`,payload:{name:e}})},discoverMcpServer(e){this.send({type:`mcp.discover`,payload:{name:e}})},listMcpResources(e,t=!1){this.send({type:`mcp.resources`,payload:{name:e,refresh:t}})},listMcpPrompts(e,t=!1){this.send({type:`mcp.prompts`,payload:{name:e,refresh:t}})},readMcpResource(e,t){this.send({type:`mcp.resource.read`,payload:{name:e,uri:t}})},getMcpPrompt(e,t,n){this.send({type:`mcp.prompt.get`,payload:{name:e,prompt:t,...n===void 0?{}:{arguments:n}}})},enableMcpServer(e){this.send({type:`mcp.enable`,payload:{name:e}})},disableMcpServer(e){this.send({type:`mcp.disable`,payload:{name:e}})},restartMcpServer(e){this.send({type:`mcp.restart`,payload:{name:e}})},listSkills(e){this.send({type:`skills.list`},e)},getSkillContent(e,t){this.send({type:`skills.content`,payload:{name:e,source:t}})},installSkill(e,t){this.send({type:`skills.install`,payload:{ref:e,global:t}})},uninstallSkill(e,t){this.send({type:`skills.uninstall`,payload:{name:e,global:t}})},checkForUpdates(e,t){this.send({type:`skills.update`,payload:{name:e,global:t}})},createSkill(e,t,n){this.send({type:`skills.create`,payload:{name:e,description:t,scope:n}})},editSkill(e,t){this.send({type:`skills.edit`,payload:{name:e,body:t}})},exportAllSkills(){this.send({type:`skills.export`})},getDiag(e){this.send({type:`diag.get`,payload:this.withSession({})},e)},getStats(e){this.send({type:`stats.get`,payload:this.withSession({})},e)},saveSession(){this.send({type:`session.save`,payload:this.withSession({})})},resumeSessionById(e){this.send({type:`session.resume`,payload:this.withSession({id:e})})},listModes(){this.send({type:`modes.list`})},switchMode(e){this.send({type:`mode.switch`,payload:{id:e}})},listFiles(e,t,n){this.send({type:`files.list`,payload:{query:e,limit:t,path:n}})},requestCompletion(e){this.send({type:`completion.request`,payload:e})},getTodos(){this.send({type:`todos.get`,payload:this.withSession({})})},clearTodos(){this.send({type:`todos.clear`,payload:this.withSession({})})},removeTodo(e){let t=typeof e==`number`?{index:e}:{id:e};this.send({type:`todos.remove`,payload:this.withSession(t)})},updateTodoStatus(e,t){this.send({type:`todo.update`,payload:this.withSession({id:e,status:t})})},getTasks(){this.send({type:`tasks.get`,payload:this.withSession({})})},updateTaskStatus(e,t){this.send({type:`task.update`,payload:this.withSession({id:e,status:t})})},getPlan(){this.send({type:`plan.get`,payload:this.withSession({})})},updatePlanItem(e,t){this.send({type:`plan.item.update`,payload:this.withSession({target:e,status:t})})},listSessions(e=50){this.send({type:`sessions.list`,payload:this.withSession({limit:e})})},deleteSession(e){this.send({type:`session.delete`,payload:{id:e}})},renameSession(e,t){this.send({type:`session.rename`,payload:{id:e,name:t}})},inspectSession(e){this.send({type:`session.inspect`,payload:{id:e}})},setWorkingDir(e){this.send({type:`working_dir.set`,payload:{path:e}})},resumeSession(e){this.send({type:`session.resume`,payload:this.withSession({id:e})})},ping(){this.send({type:`ping`})},refineModel(e,t){this.send({type:`model.refine`,payload:{text:e,...t?.timeoutMs===void 0?{}:{timeoutMs:t.timeoutMs},...t?.provider===void 0?{}:{provider:t.provider},...t?.model===void 0?{}:{model:t.model},...t?.previousRefined===void 0?{}:{previousRefined:t.previousRefined},...t?.previousEnglish===void 0?{}:{previousEnglish:t.previousEnglish},...t?.retryFeedback===void 0?{}:{retryFeedback:t.retryFeedback}}})}};function O(e){Object.assign(e.prototype,D)}function k(e){return{type:`provider.clear_models`,payload:{providerId:e}}}function A(e,t){return{type:`provider.undo_clear`,payload:{providerId:e,previousModels:[...t]}}}function we(e){return{type:`provider.update`,payload:e}}var Te={getGitInfo(){this.send({type:`git.info`})},getGitChanges(){this.send({type:`git.changes`})},getGitDiff(e){this.send({type:`git.diff`,payload:{path:e}})},getProviderStatus(){this.send({type:`provider.status.get`})},retryProviderModel(e,t){this.send({type:`provider.status.retry`,payload:{providerId:e,model:t}})},clearProviderStatus(e,t){this.send({type:`provider.status.clear`,payload:{providerId:e,model:t}})},newSession(){this.send({type:`abort`,payload:this.withSession({})}),this.send({type:`session.new`,payload:this.withSession({})})},listProviders(){this.send({type:`providers.list`})},listProviderModels(e){this.send({type:`provider.models`,payload:{providerId:e}})},listSavedProviders(){this.send({type:`providers.saved`})},searchProviderModels(e,t){this.send({type:`provider.models.search`,payload:{query:e,...t===void 0?{}:{limit:t}}})},addKey(e,t,n){this.send({type:`key.add`,payload:{providerId:e,label:t,apiKey:n}})},updateKey(e,t,n){this.send({type:`key.update`,payload:{providerId:e,label:t,apiKey:n}})},deleteKey(e,t){this.send({type:`key.delete`,payload:{providerId:e,label:t}})},setActiveKey(e,t){this.send({type:`key.set_active`,payload:{providerId:e,label:t}})},addProvider(e,t,n,r,i,a){this.send({type:`provider.add`,payload:{id:e,family:t,baseUrl:n,apiKey:r,...i?{models:i}:{},...a?{customModels:a}:{}}})},removeProvider(e){this.send({type:`provider.remove`,payload:{providerId:e}})},startOAuth(e,t){this.send({type:`auth.oauth.start`,payload:t?{kind:e,providerId:t}:{kind:e}})},submitOAuthCode(e,t){this.send({type:`auth.oauth.code`,payload:{kind:e,input:t}})},cancelOAuth(e){this.send({type:`auth.oauth.cancel`,payload:{kind:e}})},probeProvider(e,t){this.send({type:`provider.probe`,payload:t===void 0?{providerId:e}:{providerId:e,timeoutMs:t}})},clearProviderModels(e){this.send(k(e))},undoProviderClear(e,t){this.send(A(e,t))},setCustomModel(e,t,n){this.send({type:`provider.custom_models.set`,payload:{providerId:e,modelId:t,customModel:n}})},removeCustomModel(e,t){this.send({type:`provider.custom_models.remove`,payload:{providerId:e,modelId:t}})},updateProvider(e){this.send(we(e))},clearContext(){this.send({type:`context.clear`,payload:this.withSession({})})},compactContext(e=!1){this.send({type:`context.compact`,payload:this.withSession({aggressive:e})})},repairContext(){this.send({type:`context.repair`,payload:this.withSession({})})},openContextEditor(){this.send({type:`context.editor.open`,payload:this.withSession({})})},validateContextEditor(e,t,n,r){this.send({type:`context.editor.validate`,payload:this.withSession({baseRevision:e,messages:t,removals:n,allowRepair:r})})},applyContextEditor(e,t,n,r){this.send({type:`context.editor.apply`,payload:this.withSession({baseRevision:e,messages:t,removals:n,allowRepair:r})})},debugContext(e){this.send({type:`context.debug`,payload:this.withSession({})},e)},listContextModes(){this.send({type:`context.modes.list`,payload:this.withSession({})})},switchContextMode(e){this.send({type:`context.mode.switch`,payload:this.withSession({id:e})})},createContextMode(e){this.send({type:`context.mode.create`,payload:this.withSession(e)})},updateContextMode(e,t){this.send({type:`context.mode.update`,payload:this.withSession({id:e,...t})})},deleteContextMode(e){this.send({type:`context.mode.delete`,payload:this.withSession({id:e})})},switchAutonomy(e){this.send({type:`autonomy.switch`,payload:{mode:e}})},updatePrefs(e){this.send({type:`prefs.update`,payload:e})},getPrefs(){this.send({type:`prefs.get`})}};function Ee(e){Object.assign(e.prototype,Te)}function j(e){return Math.max(0,Math.min(100,Math.round((typeof e==`number`&&Number.isFinite(e)?e:0)*100)))}function M(e,t=!1){if(t&&e.target){if(e.kind===`agent:tool`||e.kind===`tool:executed`||e.kind===`tool:started`)return`tool`;if(e.source===`leader`||e.source===`coordinator`)return`coordinator`;if(e.kind.startsWith(`provider:`))return`provider`;if(e.kind.startsWith(`mailbox:`))return`mailbox`}switch(e.kind){case`provider:call`:case`provider:delta`:case`provider:response`:return`provider`;case`agent:spawned`:case`agent:tool`:case`agent:status`:case`agent:text`:case`agent:ctx`:case`budget:warning`:case`budget:extended`:return`agent`;case`tool:started`:case`tool:executed`:case`tool:progress`:return`tool`;case`mailbox:send`:case`mailbox:deliver`:return`mailbox`;case`collab:event`:return`system`;case`session:start`:case`session:end`:case`iteration:start`:case`iteration:end`:case`eternal:iteration`:case`fleet:snapshot`:return`session`;case`context:compacted`:case`context:repaired`:case`cost:update`:return`system`;case`error`:return`error`;default:return`system`}}var De=400,Oe=1200;function N(e,t,n){if(e.size<=t)return e;let r=[...e.entries()].sort((e,t)=>n(e[1])-n(t[1]));for(let[n]of r.slice(0,e.size-t))e.delete(n);return e}function P(e){switch(e){case`provider:call`:case`provider:delta`:case`agent:tool`:case`tool:started`:case`tool:progress`:case`iteration:start`:case`agent:text`:return`streaming`;case`agent:status`:case`iteration:end`:return`completed`;case`error`:return`error`;case`tool:executed`:return`completed`;case`session:end`:return`idle`;default:return`active`}}var ke=0;function F(){return`viz_${Date.now()}_${++ke}`}var Ae=250;function I(e,t){return t-e<Ae}function L(e,t){if(e===t)return!0;if(!e||!t)return!1;let n=Object.keys(e),r=Object.keys(t);if(n.length!==r.length)return!1;for(let r of n){let n=e[r],i=t[r];if(n!==i){if(n==null||i==null||typeof n!=typeof i)return!1;if(typeof n==`object`){if(Array.isArray(n)||Array.isArray(i)||!L(n,i))return!1;continue}return!1}}return!0}var R={provider:`hsl(var(--info))`,agent:`hsl(var(--primary))`,tool:`hsl(var(--warning))`,mailbox:`hsl(var(--success))`,session:`hsl(var(--primary))`,system:`hsl(var(--muted-foreground))`,success:`hsl(var(--success))`,error:`hsl(var(--destructive))`},z={"provider:call":`hsl(var(--info))`,"provider:delta":`hsl(var(--primary))`,"agent:tool":`hsl(var(--warning))`,"mailbox:send":`hsl(var(--success))`,default:`hsl(var(--muted-foreground))`},B=t()((e,t)=>({events:[],toolEvents:[],nodes:new Map,edges:new Map,isActive:!1,maxEvents:2e3,counters:{totalTokens:0,totalCost:0,totalToolCalls:0,activeAgents:0,completedTasks:0,errors:0,mailboxMessages:0},pushEvent:t=>e(e=>{let n={...t,id:t.id??F(),timestamp:t.timestamp||Date.now()},r=[n,...e.events];r.length>e.maxEvents&&(r.length=e.maxEvents);let i=t.kind===`agent:tool`||t.kind===`tool:started`||t.kind===`tool:progress`||t.kind===`tool:executed`?[n,...e.toolEvents].slice(0,600):e.toolEvents,a=Date.now(),o=t.source,s={id:o,kind:M(t),label:t.label,status:P(t.kind),activity:1,color:t.color??R[M(t)],lastSeenAt:a},c=e.nodes.get(o),l=c?{...c,...s}:s,u=!L(c,l);c&&u&&I(c.lastSeenAt,a)&&L({...c,activity:l.activity,lastSeenAt:l.lastSeenAt},l)&&(l=c,u=!1);let d,f=!1,p;if(t.target){p=t.target;let n={id:p,kind:M(t,!0),label:p,status:P(t.kind),activity:.8,color:t.color??R[M(t,!0)],lastSeenAt:a},r=e.nodes.get(p);d=r?{...r,...n}:n,f=!L(r,d),r&&f&&I(r.lastSeenAt,a)&&L({...r,activity:d.activity,lastSeenAt:d.lastSeenAt},d)&&(d=r,f=!1)}let m,h=!1,g;if(t.target&&o){g=`${o}->${t.target}`;let n=e.edges.get(g),r={id:g,source:o,target:t.target,kind:t.kind,label:t.label,intensity:n?Math.min(1,n.intensity+.3):.7,color:t.color??R[M(t)]??R.agent,lastActiveAt:a,totalMagnitude:(n?.totalMagnitude??0)+(t.magnitude??0)};m=n?{...n,...r}:r,h=!L(n,m),n&&h&&I(n.lastActiveAt,a)&&L({...n,lastActiveAt:m.lastActiveAt},m)&&(m=n,h=!1)}let _=e.nodes,v=e.edges;return(u||f)&&(_=new Map(e.nodes),u&&_.set(o,l),f&&d&&p&&_.set(p,d)),h&&m&&g&&(v=new Map(e.edges),v.set(g,m)),_!==e.nodes&&(_=N(_,De,e=>e.lastSeenAt)),v!==e.edges&&(v=N(v,Oe,e=>e.lastActiveAt)),{events:r,toolEvents:i,nodes:_,edges:v}}),upsertNode:t=>e(e=>{let n=new Map(e.nodes),r=n.get(t.id);return n.set(t.id,{...r,...t,lastSeenAt:t.lastSeenAt===void 0?Date.now():t.lastSeenAt}),{nodes:n}}),removeNode:t=>e(e=>{let n=new Map(e.nodes);n.delete(t);let r=new Map(e.edges);for(let[e,n]of r)(n.source===t||n.target===t)&&r.delete(e);return{nodes:n,edges:r}}),upsertEdge:t=>e(e=>{let n=new Map(e.edges),r=n.get(t.id);return n.set(t.id,{...r,...t,lastActiveAt:t.lastActiveAt===void 0?Date.now():t.lastActiveAt,intensity:t.intensity??r?.intensity??.5,color:t.color??z[t.kind]??z.default,totalMagnitude:(r?.totalMagnitude??0)+(t.totalMagnitude??0)}),{edges:n}}),removeEdge:t=>e(e=>{let n=new Map(e.edges);return n.delete(t),{edges:n}}),clear:()=>e({events:[],toolEvents:[],nodes:new Map,edges:new Map,counters:{totalTokens:0,totalCost:0,totalToolCalls:0,activeAgents:0,completedTasks:0,errors:0,mailboxMessages:0}}),setActive:t=>e({isActive:t}),decayActivity:()=>e(e=>{let t=new Map(e.nodes);for(let[e,n]of t)if(n.activity>=.01){let r=n.activity*.92;t.set(e,{...n,activity:r<.01?0:r})}let n=new Map(e.edges);for(let[e,t]of n)if(t.intensity>=.01){let r=t.intensity*.9;n.set(e,{...t,intensity:r<.01?0:r})}return{nodes:t,edges:n}}),prunesStale:t=>e(e=>{let n=Date.now()-t,r=new Map(e.nodes);for(let[e,t]of r)t.lastSeenAt<n&&r.delete(e);let i=new Map(e.edges);for(let[e,t]of i)t.lastActiveAt<n&&i.delete(e);return{nodes:r,edges:i,events:e.events.filter(e=>e.timestamp>n)}})}));function V(e,t){switch(e){case`provider.text_delta`:{let e=t.text??``;return{id:F(),kind:`provider:delta`,timestamp:Date.now(),source:`provider`,target:`leader`,label:e.slice(0,60),magnitude:e.length,data:{text:e},color:R.provider,flowGroup:`provider`}}case`provider.response`:{let e=t.usage,n=(e?.input??0)+(e?.output??0);return{id:F(),kind:`provider:response`,timestamp:Date.now(),source:`provider`,target:`leader`,label:`${(e?.input??0).toLocaleString(`en-US`)} in / ${(e?.output??0).toLocaleString(`en-US`)} out`,magnitude:n,data:t,color:R.provider,flowGroup:`provider`}}case`provider.stream_error`:{let e=t.message??`Provider stream error`;return{id:F(),kind:`error`,timestamp:Date.now(),source:`provider`,target:`leader`,label:e.slice(0,80),magnitude:1,data:t,color:R.error,flowGroup:`provider`}}case`tool.started`:{let e=t.name??`tool`;return{id:F(),kind:`tool:started`,timestamp:Date.now(),source:e,target:`filesystem`,label:e,magnitude:1,data:t,color:R.tool,flowGroup:`tool:${e}`}}case`tool.executed`:{let e=t.name??`tool`,n=t.ok??!0;return{id:F(),kind:`tool:executed`,timestamp:Date.now(),source:e,target:`leader`,label:`${e} ${n?`✓`:`✗`} (${t.durationMs??0}ms)`,magnitude:t.durationMs??0,data:t,color:n?R.tool:R.error,flowGroup:`tool:${e}`}}case`tool.progress`:{let e=t.name??`tool`,n=t.event?.text??``;return{id:F(),kind:`tool:progress`,timestamp:Date.now(),source:e,target:`leader`,label:n.slice(0,60)||e,magnitude:n.length,data:t,color:R.tool,flowGroup:`tool:${e}`}}case`codemap.tool_started`:{let e=t.name??`tool`,n=t.agentId??`subagent`;return{id:F(),kind:`tool:started`,timestamp:Date.now(),source:n,target:e,label:e,magnitude:1,data:t,color:R.tool,flowGroup:`agent:${n}`}}case`codemap.tool_executed`:{let e=t.name??`tool`,n=t.agentId??`subagent`,r=t.ok??!0;return{id:F(),kind:`tool:executed`,timestamp:Date.now(),source:n,target:e,label:`${e} ${r?`✓`:`✗`} (${t.durationMs??0}ms)`,magnitude:t.durationMs??0,data:t,color:r?R.tool:R.error,flowGroup:`agent:${n}`}}case`tool.loop_detected`:{let e=t.tools??``,n=t.kind??`loop`,r=t.action===`steer`;return{id:F(),kind:r?`agent:status`:`error`,timestamp:Date.now(),source:e||n,target:`leader`,label:`${n} loop x${t.repeatCount??0}`,magnitude:t.repeatCount??1,data:t,color:r?R.agent:R.error,flowGroup:`tool`}}case`delegate.started`:{let e=t.target??`delegate`,n=t.task??``;return{id:F(),kind:`agent:status`,timestamp:Date.now(),source:`leader`,target:e,label:n.slice(0,80)||`Delegating to ${e}`,magnitude:1,data:t,color:R.agent,flowGroup:`delegate:${e}`}}case`delegate.completed`:{let e=t.subagentId??t.target??`delegate`,n=t.ok??!1;return{id:F(),kind:n?`agent:status`:`error`,timestamp:Date.now(),source:e,target:`leader`,label:(t.summary??t.status??`delegate completed`).slice(0,80),magnitude:t.durationMs??1,data:t,color:n?R.agent:R.error,flowGroup:`delegate:${e}`}}case`subagent.event`:{let e=t.kind,n=t.subagentId??`unknown`,r=t.name??n;switch(e){case`spawned`:return{id:F(),kind:`agent:spawned`,timestamp:Date.now(),source:n,target:`session`,label:`${r} spawned`,magnitude:1,data:t,color:R.agent,flowGroup:`agent:${n}`};case`tool_executed`:{let e=t.toolName??`tool`,r=t.ok??!0;return{id:F(),kind:`agent:tool`,timestamp:Date.now(),source:n,target:e,label:e,magnitude:t.durationMs??0,data:t,color:r?R.tool:R.error,flowGroup:`agent:${n}`}}case`task_completed`:{let e=t.status??`completed`;return{id:F(),kind:`agent:status`,timestamp:Date.now(),source:n,target:`session`,label:`${r} ${e}`,magnitude:1,data:t,color:e===`success`?R.success:R.error,flowGroup:`agent:${n}`}}case`ctx_pct`:return{id:F(),kind:`agent:ctx`,timestamp:Date.now(),source:n,target:`session`,label:`ctx ${j(t.load)}%`,magnitude:t.tokens??0,data:t,color:R.agent,flowGroup:`agent:${n}`};case`iteration_summary`:return{id:F(),kind:`agent:text`,timestamp:Date.now(),source:n,target:`session`,label:(t.partialText??``).slice(0,80)||`iter ${t.iteration??0}`,magnitude:t.costUsd??0,data:t,color:R.agent,flowGroup:`agent:${n}`};case`budget_extended`:return{id:F(),kind:`budget:extended`,timestamp:Date.now(),source:n,target:`session`,label:`${r} extended budget`,magnitude:t.totalExtensions??1,data:t,color:R.tool,flowGroup:`agent:${n}`};case`budget_warning`:return{id:F(),kind:`budget:warning`,timestamp:Date.now(),source:n,target:`session`,label:`${r} hit ${t.budgetKind??`budget`} ${t.used??0}/${t.limit??0}`,magnitude:t.used??1,data:t,color:R.error,flowGroup:`agent:${n}`}}return null}case`mailbox.event`:{let e=t.event,n=t.from??`?`,r=t.to??`?`,i=t.subject??``,a=e===`mailbox.sent`;return{id:F(),kind:a?`mailbox:send`:`mailbox:deliver`,timestamp:Date.now(),source:n,target:r,label:i||(a?`→ ${r}`:`← ${n}`),magnitude:1,data:t,color:R.mailbox,flowGroup:`mailbox`}}case`iteration.started`:{let e=t.index??0;return{id:F(),kind:`iteration:start`,timestamp:Date.now(),source:`leader`,target:`session`,label:`Iteration ${e}`,magnitude:e,data:t,color:R.agent,flowGroup:`iteration`}}case`iteration.completed`:{let e=t.index??0;return{id:F(),kind:`iteration:end`,timestamp:Date.now(),source:`leader`,target:`session`,label:`Iteration ${e} done`,magnitude:e,data:t,color:R.session,flowGroup:`iteration`}}case`ctx.pct`:{let e=t.tokens??0;return{id:F(),kind:`agent:ctx`,timestamp:Date.now(),source:`leader`,target:`session`,label:`ctx ${j(t.load)}%`,magnitude:e,data:t,color:R.agent,flowGroup:`leader`}}case`error`:{let e=t.message??`Error`;return{id:F(),kind:`error`,timestamp:Date.now(),source:t.phase??`system`,target:`session`,label:e,magnitude:1,data:t,color:R.error,flowGroup:`error`}}case`context.compacted`:return{id:F(),kind:`context:compacted`,timestamp:Date.now(),source:`system`,target:`session`,label:`Compacted: ${(t.saved??0).toLocaleString(`en-US`)} tokens`,magnitude:t.saved??0,data:t,color:`hsl(var(--info))`,flowGroup:`context`};case`compaction.failed`:{let e=t.message??`Compaction failed`;return{id:F(),kind:`error`,timestamp:Date.now(),source:`compactor`,target:`session`,label:e.slice(0,80),magnitude:t.tokens??1,data:t,color:R.error,flowGroup:`context`}}case`context.repaired`:return{id:F(),kind:`context:repaired`,timestamp:Date.now(),source:`system`,target:`session`,label:`Repaired: ${t.removedMessages??0} msgs`,magnitude:t.removedMessages??0,data:t,color:`hsl(var(--info))`,flowGroup:`context`};case`session.start`:{let e=t.sessionId??`?`,n=t.projectName??``;return{id:F(),kind:`session:start`,timestamp:Date.now(),source:`session`,target:`leader`,label:n||e.slice(0,12),magnitude:1,data:t,color:R.session,flowGroup:`session`}}case`sessions.status_update`:{let e=t.sessions??[];return{id:F(),kind:`fleet:snapshot`,timestamp:Date.now(),source:`system`,target:`session`,label:`${e.length} session(s)`,magnitude:e.length,data:t,color:R.system,flowGroup:`fleet`}}default:return null}}function je(e){let t=e.payload?.sessionId,n=r.getState().session?.id;return t===``?!1:!t||!n||t===n}function Me(e){let t=V(e.type,e.payload);t&&(B.getState().pushEvent(t),B.getState().setActive(!0))}function Ne(e,t,n){let r=e.payload??{};for(let[e,n]of Object.entries(t)){let t=r[e];if(!H(t,n))return null}if(n)for(let[e,t]of Object.entries(n)){let n=r[e];if(n!=null&&!H(n,t))return null}return r}function H(e,t){switch(t){case`string`:return typeof e==`string`;case`number`:return typeof e==`number`;case`boolean`:return typeof e==`boolean`;case`object`:return typeof e==`object`&&!!e&&!Array.isArray(e);case`array`:return Array.isArray(e);default:return!1}}function Pe(e){try{return new URL(e).searchParams.get(`token`)}catch{return null}}function U(){if(typeof window>`u`||!window.location)return null;try{let e=window.location.search??``;return new URLSearchParams(e).get(`token`)}catch{return null}}function W(e){try{let t=new URL(e);return t.searchParams.delete(`token`),t.toString()}catch{return e}}function G(){if(!(typeof window>`u`||!window.location||!window.history?.replaceState))try{let e=window.location.href;if(!e)return;let t=new URL(e);if(!t.searchParams.has(`token`))return;t.searchParams.delete(`token`),window.history.replaceState(window.history.state,document.title,t.toString())}catch{}}function K(){if(typeof document>`u`)return null;let e=document.querySelector(`meta[name="wrongstack-ws-url"]`)?.getAttribute(`content`)?.trim();if(!e)return null;try{let t=new URL(e);if(t.protocol!==`ws:`&&t.protocol!==`wss:`)return null;let n=U();return n&&!t.searchParams.has(`token`)&&t.searchParams.set(`token`,n),t.toString()}catch{return null}}function q(){let e=K();if(e)return e;if(typeof window>`u`||!window.location?.hostname)return`ws://127.0.0.1:3456`;let t=window.location.protocol===`https:`?`wss`:`ws`,n=window.location.hostname.toLowerCase(),r=window.location.port,i=U(),a=i?`?token=${encodeURIComponent(i)}`:``;return`${t}://${n===`localhost`||n===`127.0.0.1`||n===`[::1]`||n===`::1`?`127.0.0.1`:n}${r?`:${r}`:``}${a}`}function J(){if(typeof window>`u`||!window.location?.hostname)return`http://127.0.0.1:3456`;let e=window.location.protocol===`https:`?`https`:`http`,t=window.location.hostname.toLowerCase(),n=window.location.port?`:${window.location.port}`:``;return t===`localhost`||t===`127.0.0.1`||t===`[::1]`||t===`::1`?`${e}://127.0.0.1${n}`:`${e}://${window.location.hostname}${n}`}var Fe=e({WrongStackWebSocketClient:()=>Z,getWSClient:()=>$}),Ie={"context.debug":`context.debug`,"diag.get":`diag.get`,"memory.list":`memory.list`,"memory.sage.get":`memory.sage.get`,"memory.sage.graph":`memory.sage.graph`,"memory.sage.list":`memory.sage.list`,"memory.sage.listCandidates":`memory.sage.listCandidates`,"memory.sage.listPage":`memory.sage.listPage`,"memory.sage.remember":`memory.sage.remember`,"memory.sage.update":`memory.sage.update`,"skills.list":`skills.list`,"stats.get":`stats.get`,"tools.list":`tools.list`},Le=3e4,Re=32,ze=15e3;function Y(e){try{let t=new URL(e),n=new URL(J());return t.hostname===n.hostname}catch{return!0}}var X=class e{ws=null;url;handlers=new Map;maxReconnectAttempts=10;shouldReconnect=!0;reconnectTimer=null;connectPromise=null;socketGeneration=0;messageQueue=[];messageQueueChars=0;messageQueueWeights=new WeakMap;connectionState=s();static MAX_QUEUED_MESSAGES=1e3;static MAX_QUEUED_CHARS=16777216;pendingConfirms=new Map;static PENDING_CONFIRM_TTL_MS=6e4;sessionId=null;sessionSwapPending=!1;lastErrorText;statusListeners=new Set;currentStatus={state:`connecting`};suppressedChatEchoes=new Map;echoSweepTimer=null;protocolCapabilities=new Set;protocolVersion=null;supportsCapability(e){return this.protocolCapabilities.has(e)}get negotiatedProtocolVersion(){return this.protocolVersion}onStatus(e){return this.statusListeners.add(e),e(this.currentStatus),()=>this.statusListeners.delete(e)}get status(){return this.currentStatus}setStatus(e){this.currentStatus=e;for(let t of this.statusListeners)try{t(e)}catch{}}constructor(e){this.url=e??q()}withSession(e){return this.sessionId?{...e,sessionId:this.sessionId}:e}async ensureAuthCookie(){if(typeof window>`u`)return;if(document.cookie.split(`;`).some(e=>e.trim().startsWith(`ws_token=`))){Y(this.url)&&(this.url=W(this.url)),G();return}let e=Pe(this.url)??U();if(!e)return;let t=J()+`/ws-auth?token=${encodeURIComponent(e)}`;try{let e=await fetch(t,{method:`GET`,credentials:`same-origin`,cache:`no-store`});e.ok?(Y(this.url)&&(this.url=W(this.url)),G()):console.warn(JSON.stringify({level:`warn`,event:`ws_client.ws_auth_failed`,status:e.status,timestamp:new Date().toISOString()}))}catch(e){console.warn(JSON.stringify({level:`warn`,event:`ws_client.ws_auth_error`,message:e instanceof Error?e.message:String(e),timestamp:new Date().toISOString()}))}}connect(){return this.ws?.readyState===WebSocket.OPEN?Promise.resolve():(this.connectPromise||=this.openSocket().finally(()=>{this.connectPromise=null}),this.connectPromise)}async openSocket(){return await this.ensureAuthCookie(),this.connectionState=c(this.connectionState),new Promise((e,t)=>{if(this.ws?.readyState===WebSocket.OPEN){e();return}this.setStatus({state:`connecting`});let n=++this.socketGeneration;try{let r=new WebSocket(this.url);this.ws=r,r.binaryType=`arraybuffer`;let i=setTimeout(()=>{if(this.ws===r){try{r.close()}catch{}this.ws===r&&(this.ws=null)}this.lastErrorText=`Connection timeout`,t(Error(`Connection timeout`)),s()},3e4),a=!1,o=!1,s=()=>{o||(o=!0,this.attemptReconnect())};r.onopen=()=>{this.socketGeneration===n&&(clearTimeout(i),a=!0,this.connectionState=l(this.connectionState),this.lastErrorText=void 0,this.setStatus({state:`open`}),this.flushMessageQueue(),e())},r.onmessage=e=>{if(this.socketGeneration!==n)return;this.connectionState=u(this.connectionState);let t=ye(String(e.data),`server`);t.ok?this.handleMessage(t.message):console.error(JSON.stringify({level:`error`,event:`ws_client.message_rejected`,code:t.issue.code,message:t.issue.message,timestamp:new Date().toISOString()}))},r.onerror=e=>{this.socketGeneration===n&&(console.error(JSON.stringify({level:`error`,event:`ws_client.error`,message:e instanceof Error?e.message:String(e),timestamp:new Date().toISOString()})),this.lastErrorText=`Connection error (see browser devtools)`,a||(clearTimeout(i),t(Error(this.lastErrorText)),s()))},r.onclose=e=>{if(this.socketGeneration===n){if(this.sessionSwapPending=!1,!a){clearTimeout(i);let n=e.reason||`Closed with code ${e.code}`;this.lastErrorText=n,t(Error(n)),s();return}e.reason&&!this.lastErrorText?this.lastErrorText=`${e.reason} (code ${e.code})`:!this.lastErrorText&&e.code!==1e3&&(this.lastErrorText=`Closed with code ${e.code}`),this.attemptReconnect()}}}catch(e){if(this.socketGeneration!==n)return;this.lastErrorText=e instanceof Error?e.message:String(e),this.setStatus({state:`closed`,error:this.lastErrorText}),t(e)}})}attemptReconnect(){if(!this.shouldReconnect){this.connectionState=d(this.connectionState),this.reconnectTimer=null,this.setStatus({state:`closed`,error:this.lastErrorText??`Disconnected`});return}let t=p(this.connectionState,{...o,maxReconnectAttempts:this.maxReconnectAttempts,queueLimit:e.MAX_QUEUED_MESSAGES});if(this.connectionState=t.state,!t.plan){this.reconnectTimer=null,this.setStatus({state:`closed`,error:this.lastErrorText??`Disconnected`});return}this.setStatus({state:`reconnecting`,attempt:t.plan.attempt,nextRetryAt:t.plan.retryAt,lastError:this.lastErrorText}),this.reconnectTimer=setTimeout(async()=>{if(this.reconnectTimer=null,this.shouldReconnect)try{await this.connect()}catch(e){console.error(JSON.stringify({level:`error`,event:`ws_client.reconnect_failed`,message:e instanceof Error?e.message:String(e),timestamp:new Date().toISOString()}))}},t.plan.delayMs)}retryNow(){this.currentStatus.state!==`open`&&(this.reconnectTimer&&=(clearTimeout(this.reconnectTimer),null),this.connectionState=f(this.connectionState),this.connect().catch(e=>console.warn(JSON.stringify({level:`warn`,event:`ws_client.reconnect_failed`,message:e instanceof Error?e.message:String(e),timestamp:new Date().toISOString()}))))}flushMessageQueue(){let e=this.messageQueue.splice(0);this.messageQueueChars=0;for(let t of e)try{this.send(t)}catch(e){console.warn(JSON.stringify({level:`warn`,event:`ws.flush_failed`,message:e instanceof Error?e.message:String(e)}))}}handleMessage(t){if(t.type===`tool.confirm_needed`){let n=t.payload;this.sweepExpiredPendingConfirms(Date.now()),this.pendingConfirms.set(n.id,{expiresAtMs:Date.now()+e.PENDING_CONFIRM_TTL_MS}),this.emit(t);return}if(t.type===`session.start`){let e=t.payload,n=E(e);this.sessionId=e.sessionId,this.protocolVersion=n.version,this.protocolCapabilities=new Set(n.capabilities),this.sessionSwapPending=!1}else t.type===`error`&&(t.payload.phase===`session.new`||t.payload.phase===`session.resume`)&&(this.sessionSwapPending=!1);this.emit(t)}sweepExpiredPendingConfirms(e){for(let[t,n]of this.pendingConfirms)n.expiresAtMs<=e&&this.pendingConfirms.delete(t)}emit(e){let t=this.handlers.get(e.type);if(t)for(let n of t)try{n(e)}catch(t){console.error(JSON.stringify({level:`error`,event:`ws_client.handler_error`,messageType:e.type,message:t instanceof Error?t.message:String(t),timestamp:new Date().toISOString()}))}}send(e,t={}){let n=this.constructor,r=n.MAX_QUEUED_MESSAGES,i=n.MAX_QUEUED_CHARS,o=b(e,`client`);if(!o.ok)return console.error(JSON.stringify({level:`error`,event:`ws_client.outbound_message_rejected`,code:o.issue.code,message:o.issue.message,timestamp:new Date().toISOString()})),!1;let s=JSON.stringify(o.message),c=this.ws?.readyState===WebSocket.OPEN;if(!c&&s.length>i)return console.warn(JSON.stringify({level:`warn`,event:`ws_client.message_queue_full`,cap:r,charCap:i,droppedType:e.type,reason:`message_too_large`,timestamp:new Date().toISOString()})),!1;let l=e.type===`session.new`||e.type===`session.resume`;if(l&&this.sessionSwapPending)return!1;if(l&&(this.sessionSwapPending=!0),t.echoToChat===!1){let t=Ie[e.type];if(t){let e=this.suppressedChatEchoes.get(t)??[];for(e.push(Date.now()+Le);e.length>Re;)e.shift();this.suppressedChatEchoes.set(t,e),this.ensureEchoSweep()}}if((e.type===`context.clear`||e.type===`session.new`||e.type===`session.resume`)&&a.dropAll(),c)return this.ws?.send(s),!0;{if(t.queueIfDisconnected===!1)return!1;let n;for(;this.messageQueue.length>0&&(this.messageQueue.length>=r||this.messageQueueChars+s.length>i);){let e=this.messageQueue.shift();if(!e)break;n??=e;let t=this.messageQueueWeights.get(e)??JSON.stringify(e).length;this.messageQueueChars=Math.max(0,this.messageQueueChars-t),this.messageQueueWeights.delete(e)}return n&&console.warn(JSON.stringify({level:`warn`,event:`ws_client.message_queue_full`,cap:r,charCap:i,droppedType:n.type,timestamp:new Date().toISOString()})),this.messageQueue.push(e),this.messageQueueWeights.set(e,s.length),this.messageQueueChars+=s.length,!0}}consumeSuppressedChatEcho(e){let t=this.suppressedChatEchoes.get(e);if(!t)return!1;let n=Date.now();for(;t.length>0&&t[0]<=n;)t.shift();return t.length===0?(this.suppressedChatEchoes.delete(e),!1):(t.shift(),t.length===0&&this.suppressedChatEchoes.delete(e),!0)}ensureEchoSweep(){this.echoSweepTimer||=setInterval(()=>{this.sweepSuppressedChatEchoes(Date.now())},ze)}sweepSuppressedChatEchoes(e){for(let[t,n]of this.suppressedChatEchoes){for(;n.length>0&&n[0]<=e;)n.shift();n.length===0&&this.suppressedChatEchoes.delete(t)}this.suppressedChatEchoes.size===0&&this.echoSweepTimer&&(clearInterval(this.echoSweepTimer),this.echoSweepTimer=null)}on(e,t){let n=this.handlers.get(e);return n||(n=new Set,this.handlers.set(e,n)),n.add(t),()=>n?.delete(t)}off(e,t){this.handlers.get(e)?.delete(t)}sendMessage(e,t,r=!1){let i=`msg_${Date.now()}_${n().slice(0,8)}`;return this.send({type:`user_message`,payload:this.withSession({id:i,content:e,timestamp:Date.now(),...r?{freshContext:!0}:{},...t&&t.length>0?{images:t}:{}})}),i}adviseTopic(e,t=1e4){let r=n();return new Promise(n=>{let i=!1,a=e=>{i||(i=!0,clearTimeout(s),o(),n(e))},o=this.on(`topic.advice_result`,e=>{e.payload.requestId===r&&a(e.payload)}),s=setTimeout(()=>{a({requestId:r,suggestNewContext:!1,confidence:0,reason:`Topic check timed out; continuing in the current context.`,source:`local`})},t);this.send({type:`topic.advice`,payload:this.withSession({requestId:r,prompt:e})})})}sendMailboxMessage(e){let t=`mbox_${Date.now()}_${n().slice(0,8)}`;return this.send({type:`mailbox.send`,payload:{requestId:t,to:e.to,type:e.type,audience:e.audience??`all`,subject:e.subject,body:e.body,priority:e.priority??`normal`}}),t}sendAbort(){this.send({type:`abort`,payload:this.withSession({})})}sendConfirm(e,t){this.pendingConfirms.has(e)&&this.pendingConfirms.delete(e),this.send({type:`tool.confirm_result`,payload:this.withSession({id:e,decision:t})})}switchModel(e,t,r=8e3){let i=n();return new Promise(n=>{let a=!1,o=e=>{a||(a=!0,clearTimeout(c),s(),n(e))},s=this.on(`model.switch_result`,e=>{let t=e.payload;t.requestId===i&&o(t)}),c=setTimeout(()=>{o({requestId:i,success:!1,message:`Model switch timed out. Please try again.`,provider:e,model:t,runActive:!1})},r);this.send({type:`model.switch`,payload:{provider:e,model:t,requestId:i}})})}shutdownCodebaseIndexServer(e=8e3){let t=n();return new Promise(n=>{let r=!1,i=e=>{r||(r=!0,clearTimeout(o),a(),n(e))},a=this.on(`codebase.index.server.shutdown_result`,e=>{e.payload.requestId&&e.payload.requestId!==t||i(e.payload)}),o=setTimeout(()=>{i({requestId:t,stopped:!1,reason:`Codebase index server shutdown timed out.`})},e);this.send({type:`codebase.index.server.shutdown`,payload:{requestId:t}},{queueIfDisconnected:!1})||i({requestId:t,stopped:!1,reason:`WebSocket is not connected.`})})}disconnect(){this.shouldReconnect=!1,this.connectionState=d(this.connectionState),this.reconnectTimer&&=(clearTimeout(this.reconnectTimer),null),this.messageQueue.length=0,this.messageQueueChars=0,this.sessionSwapPending=!1,this.pendingConfirms.clear(),this.echoSweepTimer&&=(clearInterval(this.echoSweepTimer),null),this.suppressedChatEchoes.clear(),this.ws?.close(),this.ws=null}get isConnected(){return this.ws?.readyState===WebSocket.OPEN}get currentSessionId(){return this.sessionId}};O(X),Ee(X);var Z=X,Q=null;function $(e){return Q||=new Z(e),Q}export{Me as a,V as c,xe as d,a as f,je as i,be as l,Fe as n,Ne as o,q as r,B as s,$ as t,Se as u};
@@ -0,0 +1,16 @@
1
+ /**
2
+ * AgentTabs — leader/subagent switcher above the chat transcript.
3
+ *
4
+ * Renders only when the fleet roster is non-empty (the leader is part of
5
+ * it). The Leader tab restores the normal chat; each subagent tab swaps
6
+ * the transcript pane for that agent's full history rendered chat-style
7
+ * (SubagentTranscriptView) and hides the input area. Selection lives in
8
+ * ui-store (`subagentChatFocusId`) so any surface — roster cards, agent
9
+ * detail sections — can jump straight into an agent's chat view.
10
+ */
11
+ export declare function AgentTabs(): import("react").JSX.Element | null;
12
+ /** Pure focus-retention rule: a focused subagent id only survives while the
13
+ * agent still exists in the fleet roster. Null focus never clears. Exported
14
+ * for direct unit testing (consumed by ChatView's stale-focus effect). */
15
+ export declare function shouldAutoClearSubagentFocus(focusId: string | null, agentExists: boolean): boolean;
16
+ //# sourceMappingURL=AgentTabs.d.ts.map
@@ -0,0 +1,16 @@
1
+ /**
2
+ * SubagentTranscriptView — full-pane chat-style history of one subagent.
3
+ *
4
+ * Shown in place of the leader transcript while an agent tab is selected
5
+ * (see AgentTabs). Renders the agent's complete fleet-store transcript —
6
+ * markdown assistant bubbles, collapsible thinking, tool call/result cards,
7
+ * status lines — mirroring the leader chat's visual language, but WITHOUT
8
+ * any input area: subagents are read-only observers here.
9
+ *
10
+ * Auto-scrolls to the newest entry while the user is pinned to the bottom;
11
+ * scrolling up releases the pin so long histories can be read in place.
12
+ */
13
+ export declare function SubagentTranscriptView({ agentId }: {
14
+ agentId: string;
15
+ }): React.ReactElement;
16
+ //# sourceMappingURL=SubagentTranscriptView.d.ts.map
@@ -19,6 +19,13 @@ export declare function useChatViewState(): {
19
19
  readTokens: number;
20
20
  writeTokens: number;
21
21
  hitRatio: number;
22
+ providers?: Array<{
23
+ provider: string;
24
+ input: number;
25
+ cacheRead: number;
26
+ cacheWrite: number;
27
+ hitRatio: number;
28
+ }>;
22
29
  coverageTokens: number;
23
30
  } | null;
24
31
  iteration: {
@@ -1,4 +1,4 @@
1
- export declare function LogsSettingsTab({ syncPref, }: {
1
+ export declare function LogsSettingsTab({ syncPref }: {
2
2
  syncPref: (key: string, value: unknown) => void;
3
3
  }): import("react").JSX.Element;
4
4
  //# sourceMappingURL=LogsSettingsTab.d.ts.map
@@ -36,17 +36,7 @@ export interface MCPServer {
36
36
  };
37
37
  };
38
38
  }
39
- export interface MCPServerConfig {
40
- name: string;
41
- transport: string;
42
- description?: string;
43
- enabled?: boolean;
44
- command?: string;
45
- args?: string[];
46
- env?: Record<string, string>;
47
- allowedTools?: string[];
48
- url?: string;
49
- lazy?: boolean;
50
- }
39
+ import type { MCPServerConfig } from './contracts.js';
40
+ export type { MCPServerConfig };
51
41
  export declare function MCPSection(): ReactElement;
52
42
  //# sourceMappingURL=MCPSection.d.ts.map
@@ -1,3 +1,10 @@
1
+ /**
2
+ * `<ModelSchemaEditor>` — grouped schema edit form for a single model (ME-4).
3
+ *
4
+ * Sections: identity · limits · pricing · modalities · capability flags · dates.
5
+ * Client-side validation via the ME-1 zod schema (modelsDevModelSchema).
6
+ * Optional raw-JSON advanced tab.
7
+ */
1
8
  export interface ModelSchemaEditorProps {
2
9
  providerId: string;
3
10
  modelId: string;
@@ -0,0 +1,29 @@
1
+ /**
2
+ * Leaf contract types for the @wrongstack/webui SettingsPanel surface.
3
+ *
4
+ * Lives separately from `MCPSection.tsx` so callers (e.g. `official-servers.ts`
5
+ * which converts an `OfficialServer` entry into an `MCPServerConfig`) can
6
+ * depend on the wire-level shape without pulling in the 904-line MCPSection
7
+ * component implementation. Breaks the long-standing type-level SCC
8
+ * ARCH-CYCLE-TYPE-23 where `MCPSection.tsx` both homed the shared config
9
+ * type and was imported back by `official-servers.ts`.
10
+ *
11
+ * This module MUST contain no runtime imports.
12
+ */
13
+ /**
14
+ * Configuration shape for a user-defined MCP server entry.
15
+ * Mirrors the persisted JSON shape consumed by the runtime registry.
16
+ */
17
+ export interface MCPServerConfig {
18
+ name: string;
19
+ transport: string;
20
+ description?: string;
21
+ enabled?: boolean;
22
+ command?: string;
23
+ args?: string[];
24
+ env?: Record<string, string>;
25
+ allowedTools?: string[];
26
+ url?: string;
27
+ lazy?: boolean;
28
+ }
29
+ //# sourceMappingURL=contracts.d.ts.map
@@ -1,4 +1,4 @@
1
- import type { MCPServerConfig } from './MCPSection';
1
+ import type { MCPServerConfig } from './contracts.js';
2
2
  export interface OfficialServer {
3
3
  name: string;
4
4
  description: string;
@@ -0,0 +1,97 @@
1
+ /**
2
+ * Per-payload shape returned by the server's `context.debug` WS message.
3
+ * Kept loose (the modal re-types the fields it cares about) so a future
4
+ * server-side addition does not break every consumer of the hook.
5
+ */
6
+ export interface LiveContextDebugPayload {
7
+ total: number;
8
+ mode?: string | undefined;
9
+ policy?: unknown | undefined;
10
+ systemPrompt: number;
11
+ tools: {
12
+ total: number;
13
+ count: number;
14
+ breakdown: Array<{
15
+ name: string;
16
+ tokens: number;
17
+ }>;
18
+ };
19
+ messages: {
20
+ total: number;
21
+ count: number;
22
+ breakdown: Array<{
23
+ index: number;
24
+ role: string;
25
+ tokens: number;
26
+ preview: string;
27
+ }>;
28
+ };
29
+ }
30
+ export interface UseLiveContextDebugOptions {
31
+ /**
32
+ * When `false`, the hook idles: no subscription, no polling, no
33
+ * requests. Defaults to `true` so a typical modal consumer can call
34
+ * the hook unconditionally.
35
+ */
36
+ active?: boolean | undefined;
37
+ /**
38
+ * Polling cadence in milliseconds. 2 s is fast enough to look
39
+ * "live" during in-flight agent runs without flooding the server
40
+ * when nothing is moving. Tune per consumer if needed.
41
+ */
42
+ intervalMs?: number | undefined;
43
+ /**
44
+ * When `true` (the default), pause polling while `document.hidden`
45
+ * and fire one catch-up request on visibility regain. Off by default
46
+ * in non-DOM test environments.
47
+ */
48
+ pauseWhenHidden?: boolean | undefined;
49
+ }
50
+ export interface UseLiveContextDebugResult<T extends LiveContextDebugPayload> {
51
+ /**
52
+ * Latest snapshot, or `null` until the first response arrives. Each
53
+ * incoming payload overwrites the prior one — the most recent server
54
+ * payload always wins, so consumers never see a stale value after a
55
+ * refresh.
56
+ */
57
+ data: T | null;
58
+ /**
59
+ * `true` only while the first snapshot is in flight. Subsequent
60
+ * snapshots never re-trigger the loading indicator, so a refresh
61
+ * does not blank the UI mid-update.
62
+ */
63
+ loading: boolean;
64
+ /** Last error message, or `null`. Resets on every successful snapshot. */
65
+ error: string | null;
66
+ /**
67
+ * Imperative restart: bumps a generation counter that triggers an
68
+ * immediate request and re-arms the polling cadence. Use for an
69
+ * explicit "refresh" button.
70
+ */
71
+ refresh: () => void;
72
+ /**
73
+ * Wall-clock time of the most recent successful snapshot, or `null`.
74
+ * Useful for "last updated 3s ago" affordances.
75
+ */
76
+ lastUpdatedAt: number | null;
77
+ }
78
+ /**
79
+ * Subscribe-and-poll wrapper around the server `context.debug` WS
80
+ * message. While `active` is true the hook:
81
+ *
82
+ * 1. Subscribes to `context.debug` for the hook's lifetime.
83
+ * 2. Sends an immediate request.
84
+ * 3. Polls every `intervalMs` (default 2 s).
85
+ * 4. Pauses on `document.hidden` and catches up on regain, unless
86
+ * `pauseWhenHidden` is `false`.
87
+ *
88
+ * Latest snapshot wins. Transient `send()` failures (closed socket
89
+ * during reconnect) are swallowed — the next tick retries.
90
+ *
91
+ * @example
92
+ * const { data, loading, error, refresh } = useLiveContextDebug(wsUrl, {
93
+ * active: open,
94
+ * });
95
+ */
96
+ export declare function useLiveContextDebug<T extends LiveContextDebugPayload = LiveContextDebugPayload>(wsUrl: string, options?: UseLiveContextDebugOptions): UseLiveContextDebugResult<T>;
97
+ //# sourceMappingURL=useLiveContextDebug.d.ts.map
package/dist/index.html CHANGED
@@ -5,39 +5,39 @@
5
5
  <link rel="icon" type="image/svg+xml" href="/wrongstack.svg" />
6
6
  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
7
7
  <title>WrongStack WebUI</title>
8
- <script type="module" crossorigin src="/assets/index-cUeJ0FkT.js"></script>
8
+ <script type="module" crossorigin src="/assets/index-gKjRx1pQ.js"></script>
9
9
  <link rel="modulepreload" crossorigin href="/assets/rolldown-runtime-hePW80VL.js">
10
10
  <link rel="modulepreload" crossorigin href="/assets/monaco-BCqJp2xW.js">
11
11
  <link rel="modulepreload" crossorigin href="/assets/markdown-Kp5uSgOw.js">
12
- <link rel="modulepreload" crossorigin href="/assets/vendor-DLS502Zs.js">
13
- <link rel="modulepreload" crossorigin href="/assets/utils-B5X3DKef.js">
14
- <link rel="modulepreload" crossorigin href="/assets/chat-store-CtIMb3sU.js">
15
- <link rel="modulepreload" crossorigin href="/assets/activity-B7hiQ_IX.js">
12
+ <link rel="modulepreload" crossorigin href="/assets/vendor-DZ9_OO6N.js">
13
+ <link rel="modulepreload" crossorigin href="/assets/utils-BecmXwgG.js">
14
+ <link rel="modulepreload" crossorigin href="/assets/chat-store-BiEXyguk.js">
15
+ <link rel="modulepreload" crossorigin href="/assets/activity-COQ9xSFu.js">
16
16
  <link rel="modulepreload" crossorigin href="/assets/chat-CzaGXz_W.js">
17
17
  <link rel="modulepreload" crossorigin href="/assets/commandPalette-BovBiPec.js">
18
18
  <link rel="modulepreload" crossorigin href="/assets/common-BBHmIHQW.js">
19
- <link rel="modulepreload" crossorigin href="/assets/settings-DfID_cS9.js">
19
+ <link rel="modulepreload" crossorigin href="/assets/settings-BhmwkYVs.js">
20
20
  <link rel="modulepreload" crossorigin href="/assets/setup-DfcCCvUO.js">
21
21
  <link rel="modulepreload" crossorigin href="/assets/toasts-DOfXc7Rt.js">
22
- <link rel="modulepreload" crossorigin href="/assets/i18n-CYYBUSJB.js">
23
- <link rel="modulepreload" crossorigin href="/assets/session-store-D4PNeAGe.js">
24
- <link rel="modulepreload" crossorigin href="/assets/ws-client-DYrfK01f.js">
25
- <link rel="modulepreload" crossorigin href="/assets/codemap-activity-store-CA_14DHd.js">
26
- <link rel="modulepreload" crossorigin href="/assets/mailbox-store-BWD7JeF9.js">
27
- <link rel="modulepreload" crossorigin href="/assets/ui-store-DxMnhARg.js">
28
- <link rel="modulepreload" crossorigin href="/assets/stores-BUtRik4k.js">
29
- <link rel="modulepreload" crossorigin href="/assets/view-navigation-Hd631M1W.js">
30
- <link rel="modulepreload" crossorigin href="/assets/codemap-index-store-BlPxA13l.js">
31
- <link rel="modulepreload" crossorigin href="/assets/Toaster-COVFFUKo.js">
32
- <link rel="modulepreload" crossorigin href="/assets/useWebSocket-Ew1Bbjci.js">
33
- <link rel="modulepreload" crossorigin href="/assets/dialog-BMrjwjA6.js">
34
- <link rel="modulepreload" crossorigin href="/assets/button-DAT5OnLL.js">
35
- <link rel="modulepreload" crossorigin href="/assets/input-Ccsxvwz6.js">
36
- <link rel="modulepreload" crossorigin href="/assets/ConfirmModal-BJOVE-JI.js">
37
- <link rel="modulepreload" crossorigin href="/assets/ModelPicker-C72kprRH.js">
22
+ <link rel="modulepreload" crossorigin href="/assets/i18n-n_1tBMdC.js">
23
+ <link rel="modulepreload" crossorigin href="/assets/session-store-CKpAwNIm.js">
24
+ <link rel="modulepreload" crossorigin href="/assets/ws-client-DXT4gi-N.js">
25
+ <link rel="modulepreload" crossorigin href="/assets/codemap-activity-store-BWt_a7Gs.js">
26
+ <link rel="modulepreload" crossorigin href="/assets/mailbox-store-DhAVkVJQ.js">
27
+ <link rel="modulepreload" crossorigin href="/assets/ui-store-3HoYrTu5.js">
28
+ <link rel="modulepreload" crossorigin href="/assets/stores-d8rhzRAc.js">
29
+ <link rel="modulepreload" crossorigin href="/assets/view-navigation-C1UDTk5R.js">
30
+ <link rel="modulepreload" crossorigin href="/assets/codemap-index-store-CDhApwWQ.js">
31
+ <link rel="modulepreload" crossorigin href="/assets/Toaster-AH2vaxrX.js">
32
+ <link rel="modulepreload" crossorigin href="/assets/useWebSocket-Co9oG6EI.js">
33
+ <link rel="modulepreload" crossorigin href="/assets/dialog-DPl7DolS.js">
34
+ <link rel="modulepreload" crossorigin href="/assets/button-Dhmop_yM.js">
35
+ <link rel="modulepreload" crossorigin href="/assets/input-C3rIQ26u.js">
36
+ <link rel="modulepreload" crossorigin href="/assets/ConfirmModal-DNp4NzCY.js">
37
+ <link rel="modulepreload" crossorigin href="/assets/ModelPicker-CBQqO9xG.js">
38
38
  <link rel="stylesheet" crossorigin href="/assets/monaco-Bowa0-zp.css">
39
39
  <link rel="stylesheet" crossorigin href="/assets/vendor-BMdWcCR4.css">
40
- <link rel="stylesheet" crossorigin href="/assets/index-D2tx76V0.css">
40
+ <link rel="stylesheet" crossorigin href="/assets/index-B8J_xxU5.css">
41
41
  </head>
42
42
  <body>
43
43
  <div id="root"></div>