@wrongstack/webui 0.309.0 → 0.310.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/assets/{AgentRosterView-CbgKjnxJ.js → AgentRosterView-D65_58jj.js} +1 -1
- package/dist/assets/{AnalyticsDashboard-BXnPG2xB.js → AnalyticsDashboard-DOc43lwL.js} +1 -1
- package/dist/assets/{AudienceMemoryPanel-Ch-jf06O.js → AudienceMemoryPanel-BLpp2tHi.js} +1 -1
- package/dist/assets/{ChangesView-5lcal8q4.js → ChangesView-DgBKkM9W.js} +1 -1
- package/dist/assets/ChronicleDashboard-DTQBK3sz.js +1 -0
- package/dist/assets/CodeEditor-C_i1OpFY.js +2 -0
- package/dist/assets/CodeMap-DAiZc6KR.js +1 -0
- package/dist/assets/{ConfirmModal-KzK0LoJw.js → ConfirmModal-e_pAJNXI.js} +1 -1
- package/dist/assets/{CronJobsPanel-aLru0Rd_.js → CronJobsPanel-Bd9yYc54.js} +1 -1
- package/dist/assets/{DeadCodeScanPanel-BXpB_M2Z.js → DeadCodeScanPanel-DX6kTHMe.js} +1 -1
- package/dist/assets/{DebugDashboard-hnhGaWr-.js → DebugDashboard-DzZ2VgUh.js} +1 -1
- package/dist/assets/{DesignGalleryView-CXHgaI2Q.js → DesignGalleryView-C6V81Ve6.js} +1 -1
- package/dist/assets/{GoalView-BB5t68cb.js → GoalView-D8IvL8gu.js} +1 -1
- package/dist/assets/KanbanView-CgAYUWMt.js +3 -0
- package/dist/assets/{MailboxDetailView-jPxF6ia3.js → MailboxDetailView-DVhX5QJL.js} +1 -1
- package/dist/assets/{MemoryDrawer-e8UxQq-s.js → MemoryDrawer-8sFKIDFT.js} +1 -1
- package/dist/assets/MemoryManager-UVJcZ8F1.js +1 -0
- package/dist/assets/{ModelPicker-nyXP3xsj.js → ModelPicker-BX3TyLGh.js} +1 -1
- package/dist/assets/OfficeMapPanel-CGquZdpA.js +4 -0
- package/dist/assets/OfficeMapPanel-Ce7myLNH.css +1 -0
- package/dist/assets/{ProcessMonitor-Epj6RrOA.js → ProcessMonitor-DWRyMBcK.js} +1 -1
- package/dist/assets/{PromptJournalView-CMlGmjig.js → PromptJournalView-D7cxTV4b.js} +1 -1
- package/dist/assets/{QueuePanel-D67eiPuQ.js → QueuePanel-BHC0oZuW.js} +1 -1
- package/dist/assets/{RefreshDebugView-CWAwHE9i.js → RefreshDebugView-CYtfPKpz.js} +1 -1
- package/dist/assets/{RequirementIntakeView-DPj065HL.js → RequirementIntakeView-CqK3EO7I.js} +1 -1
- package/dist/assets/{SageTabs-BtRa8OZC.js → SageTabs-twWj7FY5.js} +2 -2
- package/dist/assets/{SddFlowGraph-DMSN4LTZ.js → SddFlowGraph-DRoJjwE7.js} +1 -1
- package/dist/assets/SddHub-GEtMx-VT.js +2 -0
- package/dist/assets/{SessionInspectView-BdlOiPzO.js → SessionInspectView-Bj3lSgGC.js} +1 -1
- package/dist/assets/SessionList-Q2e5-_66.js +1 -0
- package/dist/assets/{SessionsDashboard-BiR0zh-a.js → SessionsDashboard-zMKgGHVE.js} +1 -1
- package/dist/assets/SetupScreen-OTuQXHs_.js +1 -0
- package/dist/assets/SkillDetailView-DOuDqdnT.js +3 -0
- package/dist/assets/{SpecsView-2PqHEXH9.js → SpecsView-DCXc8NKW.js} +1 -1
- package/dist/assets/TechStackView-DBYyTF6H.js +2 -0
- package/dist/assets/{TerminalPanel-CLUB8F2H.js → TerminalPanel-D8ZfgplP.js} +1 -1
- package/dist/assets/{Toaster-BlD1m8P2.js → Toaster-tBe1ZrKx.js} +1 -1
- package/dist/assets/{activity-l8lDAw8a.js → activity-BA8C9ueU.js} +3 -3
- package/dist/assets/{activity-DYwBIByU.js → activity-BYnOci5N.js} +3 -3
- package/dist/assets/{activity-CezOSNBd.js → activity-COQ9xSFu.js} +3 -3
- package/dist/assets/{activity-CA5G03Kw.js → activity-CuJqhGz7.js} +3 -3
- package/dist/assets/{activity-CkGBp_I-.js → activity-D3ZccGOh.js} +3 -3
- package/dist/assets/{activity-C6pIBHte.js → activity-YMES6OPI.js} +3 -3
- package/dist/assets/{activity-CxnlCaZu.js → activity-zlMMaNE1.js} +3 -3
- package/dist/assets/{button-DvpRpKkt.js → button-Dhmop_yM.js} +1 -1
- package/dist/assets/{chat-store-c0pGYczr.js → chat-store-BiEXyguk.js} +1 -1
- package/dist/assets/{codemap-activity-store-BH7Mh4k9.js → codemap-activity-store-BWt_a7Gs.js} +1 -1
- package/dist/assets/codemap-index-store-CDhApwWQ.js +1 -0
- package/dist/assets/{dialog-BJjDUqb3.js → dialog-DPl7DolS.js} +1 -1
- package/dist/assets/{empty-state-Cefmzojx.js → empty-state-IT10GzRA.js} +1 -1
- package/dist/assets/{i18n-DbJfY4tY.js → i18n-dLvHUYek.js} +2 -2
- package/dist/assets/index-B8J_xxU5.css +1 -0
- package/dist/assets/index-Cyhuj8ku.js +134 -0
- package/dist/assets/{input-BtoHcCl9.js → input-C3rIQ26u.js} +1 -1
- package/dist/assets/{mailbox-store-bF96Ih2G.js → mailbox-store-DhAVkVJQ.js} +1 -1
- package/dist/assets/{markdown-CIRD7kOg.js → markdown-Kp5uSgOw.js} +23 -23
- package/dist/assets/{roster-ws-DycHs92J.js → roster-ws-Vj_HH49O.js} +1 -1
- package/dist/assets/session-store-CKpAwNIm.js +1 -0
- package/dist/assets/{shared-B3czc2Dj.js → shared-BUXBOqyO.js} +1 -1
- package/dist/assets/stores-D9Ng0JyF.js +7 -0
- package/dist/assets/ui-store-3HoYrTu5.js +1 -0
- package/dist/assets/useWebSocket-B2jKc_G4.js +29 -0
- package/dist/assets/{utils-tsZEnrBH.js → utils-BecmXwgG.js} +1 -1
- package/dist/assets/{vector-memory-panel-C6iWDhkJ.js → vector-memory-panel-CBA4CK6N.js} +1 -1
- package/dist/assets/{vendor-C_zEzV4N.js → vendor-DZ9_OO6N.js} +21 -21
- package/dist/assets/{view-navigation-CZKugncK.js → view-navigation-C1UDTk5R.js} +1 -1
- package/dist/assets/ws-client-DXT4gi-N.js +1 -0
- package/dist/components/AgentOfficeView/model.d.ts +20 -0
- package/dist/components/AgentOfficeView.d.ts +10 -0
- package/dist/components/ChatView/AgentTabs.d.ts +16 -0
- package/dist/components/ChatView/SubagentTranscriptView.d.ts +16 -0
- package/dist/components/ChatView/useChatViewState.d.ts +7 -0
- package/dist/components/SettingsPanel/LogsSettingsTab.d.ts +1 -1
- package/dist/components/SettingsPanel/MCPSection.d.ts +2 -12
- package/dist/components/SettingsPanel/ModelSchemaEditor.d.ts +7 -0
- package/dist/components/SettingsPanel/contracts.d.ts +29 -0
- package/dist/components/SettingsPanel/official-servers.d.ts +1 -1
- package/dist/hooks/useLiveContextDebug.d.ts +97 -0
- package/dist/index.css +114 -7
- package/dist/index.html +23 -23
- package/dist/index.js +11198 -10263
- package/dist/protocol-compatibility.d.ts +1 -1
- package/dist/stores/index.d.ts +1 -1
- package/dist/stores/office-map-store.d.ts +6 -0
- package/dist/stores/session-store.d.ts +9 -1
- package/dist/stores/ui-store.d.ts +12 -0
- package/dist/types/system.d.ts +12 -0
- package/package.json +18 -17
- package/dist/assets/ChronicleDashboard-BH9k5NjB.js +0 -1
- package/dist/assets/CodeEditor-BrQMwzOp.js +0 -2
- package/dist/assets/CodeMap-B5e0v0jn.js +0 -1
- package/dist/assets/KanbanView-bZtgy3zZ.js +0 -3
- package/dist/assets/MemoryManager-BXYIA9wG.js +0 -1
- package/dist/assets/OfficeMapPanel-CBfE7Kli.js +0 -4
- package/dist/assets/OfficeMapPanel-D6yTfGIT.css +0 -1
- package/dist/assets/SddHub-CuqWpqSd.js +0 -2
- package/dist/assets/SessionList-CvvH8SI2.js +0 -1
- package/dist/assets/SetupScreen-B8s5fvr8.js +0 -1
- package/dist/assets/SkillDetailView-DbXp7-E5.js +0 -3
- package/dist/assets/TechStackView-Dnws9pc9.js +0 -2
- package/dist/assets/codemap-index-store-BFm1TzVW.js +0 -1
- package/dist/assets/index-D2tx76V0.css +0 -1
- package/dist/assets/index-DQn-Lz9q.js +0 -133
- package/dist/assets/session-store-CKdsROPD.js +0 -1
- package/dist/assets/stores-C0xX0jn4.js +0 -7
- package/dist/assets/ui-store-xx1NssJI.js +0 -1
- package/dist/assets/useWebSocket-D9Dy4-9x.js +0 -29
- package/dist/assets/ws-client-CBfMQmW9.js +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
import{n as e}from"./ui-store-
|
|
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};
|
|
@@ -50,6 +50,26 @@ export declare function deskPersonality(identity: string, role: AgentVisualRole)
|
|
|
50
50
|
/** `anthropic/claude-sonnet-4-20250514` → `claude-sonnet-4`; falls back to the raw value. */
|
|
51
51
|
export declare function shortModelName(model: string, max?: number): string;
|
|
52
52
|
export declare function shortPath(value: string | undefined, max?: number): string | undefined;
|
|
53
|
+
export interface DeskWaitState {
|
|
54
|
+
/** True when the agent is alive but has produced no tool/mail work for a while. */
|
|
55
|
+
waiting: boolean;
|
|
56
|
+
/** Milliseconds since the last observable activity (tool call or mail). */
|
|
57
|
+
idleMs: number;
|
|
58
|
+
/** What the agent most plausibly waits for, for the tooltip. */
|
|
59
|
+
reason: 'no-work' | 'telemetry' | 'mail-reply';
|
|
60
|
+
/** Human label for the last known anchor point, shown in the tooltip. */
|
|
61
|
+
anchor: string;
|
|
62
|
+
/** Mail id the `mail-reply` reason refers to — used to suppress the flyby. */
|
|
63
|
+
anchorId: string | undefined;
|
|
64
|
+
anchorAt: number | undefined;
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* A desk is "waiting" when it is active but silent: no running tool call and
|
|
68
|
+
* nothing new for WAIT_THRESHOLD_MS. The reason distinguishes the three cases
|
|
69
|
+
* a supervisor actually needs to tell apart — no assigned work, missing
|
|
70
|
+
* telemetry, or a sent mail that nobody answered yet.
|
|
71
|
+
*/
|
|
72
|
+
export declare function deskWaitState(model: OfficeAgentModel, now: number, thresholdMs?: number): DeskWaitState;
|
|
53
73
|
export declare function relativeTime(timestamp: number, now: number): string;
|
|
54
74
|
export declare function formatUptime(startedAt: string | undefined, now: number): string;
|
|
55
75
|
export declare function clientOfficeStats(agents: OfficeAgentModel[]): ClientOfficeStats;
|
|
@@ -1,3 +1,13 @@
|
|
|
1
|
+
import { type SelectedAction } from './AgentOfficeDetails';
|
|
1
2
|
import './AgentOfficeView.css';
|
|
3
|
+
import { type OfficeAgentModel } from './AgentOfficeView/model';
|
|
4
|
+
/** Exported for tests: render a single desk lane with fixture models. */
|
|
5
|
+
export declare function AgentLane({ model, now, onSelect, routedMailIds, }: {
|
|
6
|
+
model: OfficeAgentModel;
|
|
7
|
+
now: number;
|
|
8
|
+
onSelect: (selected: SelectedAction) => void;
|
|
9
|
+
/** Mail ids animated by the desk-to-desk route overlay — skip the local flyby. */
|
|
10
|
+
routedMailIds?: ReadonlySet<string> | undefined;
|
|
11
|
+
}): import("react").JSX.Element;
|
|
2
12
|
export declare function AgentOfficeView(): import("react").JSX.Element;
|
|
3
13
|
//# sourceMappingURL=AgentOfficeView.d.ts.map
|
|
@@ -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: {
|
|
@@ -36,17 +36,7 @@ export interface MCPServer {
|
|
|
36
36
|
};
|
|
37
37
|
};
|
|
38
38
|
}
|
|
39
|
-
|
|
40
|
-
|
|
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
|
|
@@ -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.css
CHANGED
|
@@ -1163,6 +1163,115 @@
|
|
|
1163
1163
|
text-overflow: ellipsis;
|
|
1164
1164
|
white-space: nowrap;
|
|
1165
1165
|
}
|
|
1166
|
+
.agent-office__wait-badge {
|
|
1167
|
+
display: inline-flex;
|
|
1168
|
+
width: fit-content;
|
|
1169
|
+
align-items: center;
|
|
1170
|
+
gap: 5px;
|
|
1171
|
+
margin-top: 6px;
|
|
1172
|
+
padding: 3px 7px;
|
|
1173
|
+
border: 1px solid hsl(var(--warning) / 0.35);
|
|
1174
|
+
border-radius: 999px;
|
|
1175
|
+
color: hsl(var(--warning));
|
|
1176
|
+
background: hsl(var(--warning) / 0.08);
|
|
1177
|
+
cursor: pointer;
|
|
1178
|
+
font: 500 9px / 1.3 var(--font-mono);
|
|
1179
|
+
letter-spacing: 0.04em;
|
|
1180
|
+
}
|
|
1181
|
+
.agent-office__wait-badge svg {
|
|
1182
|
+
width: 11px;
|
|
1183
|
+
height: 11px;
|
|
1184
|
+
}
|
|
1185
|
+
.agent-office__wait-badge:hover {
|
|
1186
|
+
border-color: hsl(var(--warning) / 0.6);
|
|
1187
|
+
background: hsl(var(--warning) / 0.14);
|
|
1188
|
+
}
|
|
1189
|
+
.agent-office__wait-badge.is-mail-reply {
|
|
1190
|
+
border-color: hsl(var(--info) / 0.4);
|
|
1191
|
+
color: hsl(var(--info));
|
|
1192
|
+
background: hsl(var(--info) / 0.08);
|
|
1193
|
+
}
|
|
1194
|
+
.agent-office__wait-badge.is-mail-reply:hover {
|
|
1195
|
+
border-color: hsl(var(--info) / 0.65);
|
|
1196
|
+
background: hsl(var(--info) / 0.14);
|
|
1197
|
+
}
|
|
1198
|
+
.agent-office__wait-badge.is-telemetry {
|
|
1199
|
+
border-style: dashed;
|
|
1200
|
+
}
|
|
1201
|
+
.agent-office__lane.is-waiting .agent-office__status-dot {
|
|
1202
|
+
background: hsl(var(--warning));
|
|
1203
|
+
}
|
|
1204
|
+
.agent-office__lane.is-waiting .agent-office__window span {
|
|
1205
|
+
animation-play-state: paused;
|
|
1206
|
+
opacity: 0.6;
|
|
1207
|
+
}
|
|
1208
|
+
.agent-office__desk-metrics {
|
|
1209
|
+
grid-column: 1 / -1;
|
|
1210
|
+
display: flex;
|
|
1211
|
+
align-items: center;
|
|
1212
|
+
gap: 0;
|
|
1213
|
+
margin: 0 9px 8px;
|
|
1214
|
+
padding: 4px 2px 0;
|
|
1215
|
+
border-top: 1px solid var(--office-line);
|
|
1216
|
+
color: hsl(var(--muted-foreground));
|
|
1217
|
+
font: 500 9.5px / 1.2 var(--font-mono);
|
|
1218
|
+
}
|
|
1219
|
+
.agent-office__metric {
|
|
1220
|
+
display: inline-flex;
|
|
1221
|
+
flex: 0 0 auto;
|
|
1222
|
+
align-items: center;
|
|
1223
|
+
gap: 5px;
|
|
1224
|
+
padding: 3px 12px 3px 0;
|
|
1225
|
+
margin-right: 12px;
|
|
1226
|
+
border-right: 1px solid var(--office-line);
|
|
1227
|
+
white-space: nowrap;
|
|
1228
|
+
}
|
|
1229
|
+
.agent-office__metric:last-child {
|
|
1230
|
+
border-right: none;
|
|
1231
|
+
}
|
|
1232
|
+
.agent-office__metric strong {
|
|
1233
|
+
color: hsl(var(--foreground));
|
|
1234
|
+
font-weight: 600;
|
|
1235
|
+
}
|
|
1236
|
+
.agent-office__metric small {
|
|
1237
|
+
letter-spacing: 0.08em;
|
|
1238
|
+
font-size: 8.5px;
|
|
1239
|
+
}
|
|
1240
|
+
.agent-office__metric svg {
|
|
1241
|
+
width: 11px;
|
|
1242
|
+
height: 11px;
|
|
1243
|
+
flex: 0 0 auto;
|
|
1244
|
+
}
|
|
1245
|
+
.agent-office__ctx-bar {
|
|
1246
|
+
position: relative;
|
|
1247
|
+
overflow: hidden;
|
|
1248
|
+
width: 34px;
|
|
1249
|
+
height: 3px;
|
|
1250
|
+
border-radius: 999px;
|
|
1251
|
+
background: hsl(var(--border) / 0.6);
|
|
1252
|
+
}
|
|
1253
|
+
.agent-office__ctx-bar b {
|
|
1254
|
+
position: absolute;
|
|
1255
|
+
inset: 0 auto 0 0;
|
|
1256
|
+
border-radius: inherit;
|
|
1257
|
+
background: hsl(var(--primary) / 0.55);
|
|
1258
|
+
transition: width 400ms ease;
|
|
1259
|
+
}
|
|
1260
|
+
.agent-office__ctx-bar.is-high b {
|
|
1261
|
+
background: hsl(var(--destructive) / 0.7);
|
|
1262
|
+
}
|
|
1263
|
+
.agent-office__metric-action {
|
|
1264
|
+
min-width: 0;
|
|
1265
|
+
flex: 1 1 auto;
|
|
1266
|
+
overflow: hidden;
|
|
1267
|
+
padding-right: 0;
|
|
1268
|
+
}
|
|
1269
|
+
.agent-office__metric-action small {
|
|
1270
|
+
overflow: hidden;
|
|
1271
|
+
text-overflow: ellipsis;
|
|
1272
|
+
letter-spacing: 0.02em;
|
|
1273
|
+
color: hsl(var(--foreground) / 0.72);
|
|
1274
|
+
}
|
|
1166
1275
|
.agent-office__identity-mail {
|
|
1167
1276
|
display: flex;
|
|
1168
1277
|
width: 100%;
|
|
@@ -1262,6 +1371,7 @@
|
|
|
1262
1371
|
color-mix(in srgb, var(--desk-screen) 23%, transparent),
|
|
1263
1372
|
hsl(var(--primary) / 0.04));
|
|
1264
1373
|
animation: agent-office-window-glow 8s ease-in-out infinite alternate;
|
|
1374
|
+
box-shadow: inset 0 0 8px hsl(var(--info) / 0.14);
|
|
1265
1375
|
}
|
|
1266
1376
|
.agent-office__window span:nth-child(2) {
|
|
1267
1377
|
animation-delay: -2.4s;
|
|
@@ -3001,10 +3111,10 @@ button.agent-office__parcel:hover {
|
|
|
3001
3111
|
}
|
|
3002
3112
|
@keyframes agent-office-brief-arrive {
|
|
3003
3113
|
from {
|
|
3004
|
-
|
|
3114
|
+
transform: skewX(-18deg) translateX(0);
|
|
3005
3115
|
}
|
|
3006
3116
|
to {
|
|
3007
|
-
|
|
3117
|
+
transform: skewX(-18deg) translateX(617%);
|
|
3008
3118
|
}
|
|
3009
3119
|
}
|
|
3010
3120
|
@keyframes agent-office-sync-line {
|
|
@@ -3036,7 +3146,6 @@ button.agent-office__parcel:hover {
|
|
|
3036
3146
|
}
|
|
3037
3147
|
to {
|
|
3038
3148
|
opacity: 1;
|
|
3039
|
-
box-shadow: inset 0 0 8px hsl(var(--info) / 0.14);
|
|
3040
3149
|
}
|
|
3041
3150
|
}
|
|
3042
3151
|
@keyframes agent-office-plant-sway {
|
|
@@ -3169,12 +3278,10 @@ button.agent-office__parcel:hover {
|
|
|
3169
3278
|
}
|
|
3170
3279
|
@keyframes agent-office-yawn-mouth {
|
|
3171
3280
|
0%, 72%, 100% {
|
|
3172
|
-
|
|
3173
|
-
transform: scale(1);
|
|
3281
|
+
transform: scaleY(1);
|
|
3174
3282
|
}
|
|
3175
3283
|
80%, 88% {
|
|
3176
|
-
|
|
3177
|
-
transform: scale(1.15);
|
|
3284
|
+
transform: scaleY(3.5);
|
|
3178
3285
|
}
|
|
3179
3286
|
}
|
|
3180
3287
|
@keyframes agent-office-idle-stretch {
|
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-
|
|
8
|
+
<script type="module" crossorigin src="/assets/index-Cyhuj8ku.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
|
-
<link rel="modulepreload" crossorigin href="/assets/markdown-
|
|
12
|
-
<link rel="modulepreload" crossorigin href="/assets/vendor-
|
|
13
|
-
<link rel="modulepreload" crossorigin href="/assets/utils-
|
|
14
|
-
<link rel="modulepreload" crossorigin href="/assets/chat-store-
|
|
15
|
-
<link rel="modulepreload" crossorigin href="/assets/activity-
|
|
11
|
+
<link rel="modulepreload" crossorigin href="/assets/markdown-Kp5uSgOw.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
19
|
<link rel="modulepreload" crossorigin href="/assets/settings-DfID_cS9.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-
|
|
23
|
-
<link rel="modulepreload" crossorigin href="/assets/session-store-
|
|
24
|
-
<link rel="modulepreload" crossorigin href="/assets/ws-client-
|
|
25
|
-
<link rel="modulepreload" crossorigin href="/assets/codemap-activity-store-
|
|
26
|
-
<link rel="modulepreload" crossorigin href="/assets/mailbox-store-
|
|
27
|
-
<link rel="modulepreload" crossorigin href="/assets/ui-store-
|
|
28
|
-
<link rel="modulepreload" crossorigin href="/assets/stores-
|
|
29
|
-
<link rel="modulepreload" crossorigin href="/assets/view-navigation-
|
|
30
|
-
<link rel="modulepreload" crossorigin href="/assets/codemap-index-store-
|
|
31
|
-
<link rel="modulepreload" crossorigin href="/assets/Toaster-
|
|
32
|
-
<link rel="modulepreload" crossorigin href="/assets/useWebSocket-
|
|
33
|
-
<link rel="modulepreload" crossorigin href="/assets/dialog-
|
|
34
|
-
<link rel="modulepreload" crossorigin href="/assets/button-
|
|
35
|
-
<link rel="modulepreload" crossorigin href="/assets/input-
|
|
36
|
-
<link rel="modulepreload" crossorigin href="/assets/ConfirmModal-
|
|
37
|
-
<link rel="modulepreload" crossorigin href="/assets/ModelPicker-
|
|
22
|
+
<link rel="modulepreload" crossorigin href="/assets/i18n-dLvHUYek.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-D9Ng0JyF.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-tBe1ZrKx.js">
|
|
32
|
+
<link rel="modulepreload" crossorigin href="/assets/useWebSocket-B2jKc_G4.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-e_pAJNXI.js">
|
|
37
|
+
<link rel="modulepreload" crossorigin href="/assets/ModelPicker-BX3TyLGh.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-
|
|
40
|
+
<link rel="stylesheet" crossorigin href="/assets/index-B8J_xxU5.css">
|
|
41
41
|
</head>
|
|
42
42
|
<body>
|
|
43
43
|
<div id="root"></div>
|