@openscout/scout 0.2.98 → 0.2.105
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/NOTICE +7 -0
- package/README.md +37 -0
- package/bin/scout.mjs +6 -0
- package/bin/scoutd +0 -0
- package/dist/build-manifest.json +4 -4
- package/dist/chat.mjs +285 -0
- package/dist/client/assets/ActivityScreen-CcDdQTBK.js +1 -0
- package/dist/client/assets/{AddProjectForm-fXndbzXT.js → AddProjectForm-CHNJ4NnS.js} +1 -1
- package/dist/client/assets/AdventureEvidence-B4mEvXeD.js +5 -0
- package/dist/client/assets/AdventureReader-ZsBDQITY.js +4 -0
- package/dist/client/assets/AdventureScenery-DSxDlqG1.js +1 -0
- package/dist/client/assets/AgentAdventures-BxrYq_2v.js +1 -0
- package/dist/client/assets/AgentAvatar-NZOqcsB2.js +1 -0
- package/dist/client/assets/AgentConfigurationScreen-BhD1PEAM.js +1 -0
- package/dist/client/assets/AgentDefinitionsWorkspace-BqS6MXqF.js +1 -0
- package/dist/client/assets/AgentDetailCard-MIEBKw_S.js +1 -0
- package/dist/client/assets/AgentFloorView-A0dDRlRV.js +1 -0
- package/dist/client/assets/AgentFloorWorld-BTqwmK5G.js +1 -0
- package/dist/client/assets/AgentInfoScreen-DuaN0sgE.js +1 -0
- package/dist/client/assets/{AgentLaneCard-Cc9uyfBr.js → AgentLaneCard-C4rKLLdT.js} +1 -1
- package/dist/client/assets/{AgentLaneChrome-Dv2lBFoH.js → AgentLaneChrome-fGC-ZrJS.js} +1 -1
- package/dist/client/assets/{AgentLaneDetailSheet-CGqtqSHQ.js → AgentLaneDetailSheet-BTF4_th9.js} +2 -2
- package/dist/client/assets/{AgentLaneSummaryResize-Di4u6df2.js → AgentLaneSummaryResize-DgSeA_vS.js} +1 -1
- package/dist/client/assets/AgentLanesEmbedScreen-CeNiaZ9_.js +1 -0
- package/dist/client/assets/{AgentLanesPreflight-CCGBArIb.js → AgentLanesPreflight-CcS23wij.js} +1 -1
- package/dist/client/assets/AgentLanesView-WZhEDBFE.js +2 -0
- package/dist/client/assets/AgentLiveActions-6Kfr1uOT.js +1 -0
- package/dist/client/assets/AgentMasterScreen-DUDUTAnU.js +1 -0
- package/dist/client/assets/AgentSessions-CO1WGa8Z.js +6 -0
- package/dist/client/assets/AgentsConsole-BQOWkj35.js +1 -0
- package/dist/client/assets/AgentsScreen-BMNAj1PH.js +1 -0
- package/dist/client/assets/AgentsSubnav-CeHhuzyM.js +1 -0
- package/dist/client/assets/{AstronautSuit-CwB4Dw07.js → AstronautSuit-D67fIBdR.js} +1 -1
- package/dist/client/assets/AtopView-Ck30FbzG.js +1 -0
- package/dist/client/assets/BackToPicker-CkBhGRlD.js +1 -0
- package/dist/client/assets/BriefingDetailScreen-yZG8_m4h.js +1 -0
- package/dist/client/assets/BriefingsScreen-DTxYMr3a.js +1 -0
- package/dist/client/assets/{BrokerMetadataPanel-BJSwU9XZ.js → BrokerMetadataPanel-crirZCdo.js} +1 -1
- package/dist/client/assets/BrokerScreen-CT37VQiL.js +8 -0
- package/dist/client/assets/Canvas-CRP0KjKb.js +1 -0
- package/dist/client/assets/{CastPicker-CkgTalIt.js → CastPicker-ZPomvOf-.js} +1 -1
- package/dist/client/assets/ChannelComposer-BVItWlEz.js +1 -0
- package/dist/client/assets/ChannelSidebar-B-2spawY.js +1 -0
- package/dist/client/assets/CharacterFamilyPreview-BniL8sEL.css +1 -0
- package/dist/client/assets/CharacterFamilyPreview-ckVkecDO.js +1 -0
- package/dist/client/assets/ChatAvatar-DKBsbOqk.js +1 -0
- package/dist/client/assets/ChatBits-CLJ71hTY.js +1 -0
- package/dist/client/assets/ChatCollapsedStrip-Co0NmqOO.js +1 -0
- package/dist/client/assets/ChatRightPanel-pKQtkAgl.js +1 -0
- package/dist/client/assets/ChatSpaceSurface-NrLwdPkE.js +1 -0
- package/dist/client/assets/ChatSpaceTheme-BPMgPdVK.css +1 -0
- package/dist/client/assets/ChatSpaceTheme-D37Jk7bl.js +1 -0
- package/dist/client/assets/{CodeDiffPane-DfluIWmO.js → CodeDiffPane-D-iv28LJ.js} +1 -1
- package/dist/client/assets/{CodeProjectPicker-By_Wz9ex.js → CodeProjectPicker-CZ3gDdiT.js} +1 -1
- package/dist/client/assets/CodeScreen-CSC-zbP9.js +1 -0
- package/dist/client/assets/CommsCanvas-BR2YS76H.css +1 -0
- package/dist/client/assets/CommsCanvas-DdNAwjGW.js +1 -0
- package/dist/client/assets/CommsDeck-mGWY7Ivi.js +1 -0
- package/dist/client/assets/CommsFlowGraph-vQucylxF.css +1 -0
- package/dist/client/assets/CommsFlowGraph-voDD9M5R.js +1 -0
- package/dist/client/assets/CommsFlowMap-C33sgD48.js +1 -0
- package/dist/client/assets/CommsSelection-BL8aYD7z.js +1 -0
- package/dist/client/assets/{ConversationComposer-BUIjWMBi.js → ConversationComposer-DNcn5U6D.js} +1 -1
- package/dist/client/assets/ConversationFeedRows-RnYSa7Io.js +1 -0
- package/dist/client/assets/ConversationHeader-Y9TEJxP_.js +1 -0
- package/dist/client/assets/ConversationPanels-6pprBpmq.js +6 -0
- package/dist/client/assets/ConversationScreen-Brfas2y0.css +1 -0
- package/dist/client/assets/ConversationScreen-tpj4cqWs.js +2 -0
- package/dist/client/assets/ConversationStatus-Cv-7hErW.js +1 -0
- package/dist/client/assets/{CrewAvatar-CZ_faQ_s.js → CrewAvatar-zgzC3cbU.js} +1 -1
- package/dist/client/assets/CrewSprite-Dp9KBBGY.js +1 -0
- package/dist/client/assets/CrewSprite-DsQJdu3Z.css +1 -0
- package/dist/client/assets/CrewWorkspaces-DDuYMByu.css +1 -0
- package/dist/client/assets/CrewWorkspaces-K2jcyLec.js +1 -0
- package/dist/client/assets/{DataTable-C6aMSilS.js → DataTable-av71ehJV.js} +1 -1
- package/dist/client/assets/DispatchAftermath-CcYGUB10.js +1 -0
- package/dist/client/assets/DocumentFocusViewer-DlMiEALb.js +1 -0
- package/dist/client/assets/{EmbeddableSurfacesLab-D3iZiS8o.js → EmbeddableSurfacesLab-CTkO_tQR.js} +1 -1
- package/dist/client/assets/{EmptyState-CKPWFSjq.js → EmptyState-CYUwYyAW.js} +1 -1
- package/dist/client/assets/{FileViewerPane-CxNbcTYf.js → FileViewerPane-Cxhixtks.js} +2 -2
- package/dist/client/assets/FlightObserveScreen-CvzhzuWc.js +1 -0
- package/dist/client/assets/FloorContextSheet-Vj_wVZq1.js +1 -0
- package/dist/client/assets/FloorExchangePanel-B3TFhjLk.css +1 -0
- package/dist/client/assets/FloorExchangePanel-CjHSDXad.js +1 -0
- package/dist/client/assets/FloorMessagePasses-BG4ebnX5.js +1 -0
- package/dist/client/assets/FloorMessagePasses-nxwwiUom.css +1 -0
- package/dist/client/assets/FloorReplay-BoYaGY9t.js +1 -0
- package/dist/client/assets/FloorResourcesSheet-_Iy5UqgY.js +1 -0
- package/dist/client/assets/FloorSavedWork-jbtRs-YE.js +1 -0
- package/dist/client/assets/FloorTacticalHUD-BhyOqlL5.js +1 -0
- package/dist/client/assets/FollowScreen-CupyOgt4.js +1 -0
- package/dist/client/assets/HarnessMark-DSvM_H7H.js +1 -0
- package/dist/client/assets/HarnessesScreen-DyjqbZ4k.js +1 -0
- package/dist/client/assets/{HerdrSession-DsuxCtfX.js → HerdrSession-Dcm3vf9U.js} +3 -3
- package/dist/client/assets/{HomeHero-DXJo2QSO.js → HomeHero-pIZtE1cC.js} +1 -1
- package/dist/client/assets/HostAdvisorView-Dv5meXo2.js +1 -0
- package/dist/client/assets/InviteLandingScreen-xZQ2na1z.js +1 -0
- package/dist/client/assets/InviteSheet--5Zjct25.js +1 -0
- package/dist/client/assets/JumpPalette-BmiSOEmp.js +1 -0
- package/dist/client/assets/KnowledgeSearchInspector-B8yiM524.js +1 -0
- package/dist/client/assets/KnowledgeSearchScreen-BPqAjHnH.js +1 -0
- package/dist/client/assets/{LaneToolHoverCard-t7-XJP-h.js → LaneToolHoverCard-D2cnTeUd.js} +1 -1
- package/dist/client/assets/LaneTraceDetailSheet-jl4XQmEx.js +1 -0
- package/dist/client/assets/{LaneTraceEventFocus-BB5DhFQm.js → LaneTraceEventFocus-BLhVHwff.js} +1 -1
- package/dist/client/assets/MeshCanvas-BR25OBTJ.js +3 -0
- package/dist/client/assets/MeshCanvasMinimap-ClVolr4-.js +1 -0
- package/dist/client/assets/MeshScreen-BW1dMFWF.js +1 -0
- package/dist/client/assets/{MeshTopologyView-Dc0GSrKa.js → MeshTopologyView-BT3ke2D1.js} +2 -2
- package/dist/client/assets/MessagesScreen-CtNMfIvC.js +1 -0
- package/dist/client/assets/MissionContextRail-CafjuseK.js +1 -0
- package/dist/client/assets/MissionControlView-BjPOViGY.js +1 -0
- package/dist/client/assets/MissionFocusOverlay-nhy3hkxQ.js +1 -0
- package/dist/client/assets/MissionLeftAgentRow-Dms0DBjO.js +1 -0
- package/dist/client/assets/MissionLogPane-DiUf3vWW.js +1 -0
- package/dist/client/assets/NativeAreaScreen-BQSTo8As.js +1 -0
- package/dist/client/assets/NativeAreaScreen-Brix6xDB.js +1 -0
- package/dist/client/assets/NativeAreaScreen-D7HyQNlM.js +1 -0
- package/dist/client/assets/NewAgentModal-BQ2wQ5gp.js +1 -0
- package/dist/client/assets/NewChatComposer-BEXS8vV6.js +19 -0
- package/dist/client/assets/{NewChatOrigin-DCn5cWPZ.js → NewChatOrigin-C8ROO4ps.js} +1 -1
- package/dist/client/assets/NodeDetailPanel-BNTqYC7m.js +1 -0
- package/dist/client/assets/NodeMenu-CcOeFRCB.js +1 -0
- package/dist/client/assets/ObserveEmbedScreen-Dh30EjAQ.js +2 -0
- package/dist/client/assets/{ObserveTextFlow-DCJ5EmD8.js → ObserveTextFlow-CC5mnngm.js} +2 -2
- package/dist/client/assets/{ObservedTopologyPanel-CJVqIqQ2.js → ObservedTopologyPanel-DF6tRZL_.js} +1 -1
- package/dist/client/assets/OpenScoutAppShell-D9pgw36i.js +31 -0
- package/dist/client/assets/OpsAgentsView-D3rM0udq.js +1 -0
- package/dist/client/assets/OpsScreen-DySeNQ1V.js +1 -0
- package/dist/client/assets/OpsSubnav-C9E0r3GZ.js +1 -0
- package/dist/client/assets/ProjectAgentProfile-FUav75j2.js +1 -0
- package/dist/client/assets/{ProjectAgentProfileBar-CUzZ4Rpx.js → ProjectAgentProfileBar-C8z22pJ2.js} +1 -1
- package/dist/client/assets/ProjectAgentProfileHero-BLK0EwMg.js +1 -0
- package/dist/client/assets/ProjectsInbox-DfCXReZK.js +2 -0
- package/dist/client/assets/ProjectsRail-CELVubfJ.js +1 -0
- package/dist/client/assets/ProjectsScreen-DMw4TLKy.js +1 -0
- package/dist/client/assets/ProjectsThreadAside-D1Sh4fnX.js +1 -0
- package/dist/client/assets/Provider-CNZluAZb.js +5 -0
- package/dist/client/assets/{RailRow-B0sRaJc6.css → RailRow-B25zKEub.css} +1 -1
- package/dist/client/assets/RailRow-DUPqXMZh.js +1 -0
- package/dist/client/assets/RailToggle-BwmY70B8.js +1 -0
- package/dist/client/assets/RawSessionsTable-6OVJq0JZ.js +1 -0
- package/dist/client/assets/RealtimeVoiceScreen-D41TYY0x.js +9 -0
- package/dist/client/assets/RenderedWorkerSprite-C8fxndAh.js +1 -0
- package/dist/client/assets/RenderedWorkerSprite-qnTfkd_4.css +1 -0
- package/dist/client/assets/ReplayClock-DUVJjrIu.js +1 -0
- package/dist/client/assets/ReplayLog-Bek1Vc4W.js +1 -0
- package/dist/client/assets/ReplayOutpost-DlRg3172.js +1 -0
- package/dist/client/assets/ReplayOutpost-Y1DvZgeu.css +1 -0
- package/dist/client/assets/{RepoDiffEmbedScreen-mexrJPhW.js → RepoDiffEmbedScreen-CVUMnt6A.js} +1 -1
- package/dist/client/assets/{RepoDiffPageScreen-DbqX4L3q.js → RepoDiffPageScreen-D9-s5PyB.js} +1 -1
- package/dist/client/assets/RepoDiffViewer-D7FN-oyY.js +7 -0
- package/dist/client/assets/RepoDiffViewerLazy-BpMR7tlx.js +2 -0
- package/dist/client/assets/{ReposScreen-CzbO1Fuy.js → ReposScreen-BQ7HO1om.js} +2 -2
- package/dist/client/assets/RiggedWorkerCharacter-BpYECnyK.css +1 -0
- package/dist/client/assets/RiggedWorkerCharacter-CJMWlvV-.js +1 -0
- package/dist/client/assets/SageModelStudio-768dRQr4.css +1 -0
- package/dist/client/assets/SageModelStudio-B526NSnw.js +4108 -0
- package/dist/client/assets/ScoutDeckSurface-ChkvGyEW.js +1 -0
- package/dist/client/assets/{ScoutSurface-NlhDsPzg.js → ScoutSurface-6g1f5chk.js} +1 -1
- package/dist/client/assets/{ScoutbotFxLab-l2WAahCg.js → ScoutbotFxLab-BuwBdnPf.js} +1 -1
- package/dist/client/assets/{SecondaryNav-Cs0_FQdj.js → SecondaryNav-Bs-_VwTC.js} +1 -1
- package/dist/client/assets/SessionEmbedScreen-C2wf35-P.js +1 -0
- package/dist/client/assets/SessionObserve-B64YsYhy.js +12 -0
- package/dist/client/assets/{SessionObserve-CLrHfAKZ.css → SessionObserve-CDdJ7fAE.css} +1 -1
- package/dist/client/assets/SessionObserveEvidence-CS1aQBpQ.js +1 -0
- package/dist/client/assets/SessionRefScreen-DURV0MpF.js +1 -0
- package/dist/client/assets/SessionsScreen-D71ZR-8t.js +1 -0
- package/dist/client/assets/SettingsDrawer-Nz98oBVl.js +3 -0
- package/dist/client/assets/SettingsScreen-CYBHal6y.js +1 -0
- package/dist/client/assets/SharedFloorCharacter-Bi5_md4R.css +1 -0
- package/dist/client/assets/SharedFloorCharacter-V04kD5T9.js +1 -0
- package/dist/client/assets/SharedWorkFloor-BCmdeb3Q.css +1 -0
- package/dist/client/assets/SharedWorkFloor-C0xxW4SN.js +2 -0
- package/dist/client/assets/{ShikiPane-C0TuCATU.js → ShikiPane-XwFI-pCp.js} +1 -1
- package/dist/client/assets/{SlidePanel-CETQ5NTx.js → SlidePanel-BMpkXai_.js} +1 -1
- package/dist/client/assets/SpaceSwitcher-BfeIf-ad.js +1 -0
- package/dist/client/assets/SpriteAvatar-aHeF4ZQZ.js +1 -0
- package/dist/client/assets/SproutActionSprite-DI5N3gOj.js +1 -0
- package/dist/client/assets/{StatusPill-BllrY-eg.js → StatusPill-Dw4LP7wu.js} +1 -1
- package/dist/client/assets/{TailView-_gKWfaQM.js → TailView-BofjmUMJ.js} +2 -2
- package/dist/client/assets/Terminal-jIqnIZZ6.js +4 -0
- package/dist/client/assets/TerminalEmbedScreen-3XsjuySR.js +1 -0
- package/dist/client/assets/TerminalHeaderMount-CwbQhXcI.js +1 -0
- package/dist/client/assets/TerminalRelay--qOBwnbR.js +46 -0
- package/dist/client/assets/{TextDocumentSurface-2X1Gw4eA.js → TextDocumentSurface-BK6Qy41F.js} +1 -1
- package/dist/client/assets/{TmuxPeek-CqTJRhkI.js → TmuxPeek-DpUT9Tpc.js} +1 -1
- package/dist/client/assets/{VoicePermissionsPanel-C4vkU-sU.js → VoicePermissionsPanel-D35fOnQj.js} +1 -1
- package/dist/client/assets/{WorkDetailScreen-DqGnuK0e.js → WorkDetailScreen-Bcf_yHhU.js} +4 -4
- package/dist/client/assets/WorkFilesViewer-t8AEyx3Q.js +1 -0
- package/dist/client/assets/WorkRunView-CxwAZ2QQ.css +1 -0
- package/dist/client/assets/WorkRunView-_mhG_FR2.js +1 -0
- package/dist/client/assets/WorldActorTalk-CKerDikx.js +1 -0
- package/dist/client/assets/WorldCharacter-BRrj3MQN.js +1 -0
- package/dist/client/assets/WorldMinimap-DOptgrc4.js +1 -0
- package/dist/client/assets/WorldSky-D-RJzSa6.js +1 -0
- package/dist/client/assets/{activity-CzTJ-YMX.js → activity-BJqFrZyB.js} +1 -1
- package/dist/client/assets/{addon-fit-Zx3A7pGS.js → addon-fit-CHohcvS3.js} +1 -1
- package/dist/client/assets/{addon-webgl-DitJj-N0.js → addon-webgl-CaRy2x2b.js} +1 -1
- package/dist/client/assets/adventure-evidence-DgQbBmfa.css +1 -0
- package/dist/client/assets/adventure-habitats-v1-CVMbdB_Z.png +0 -0
- package/dist/client/assets/adventure-habitats-v1-M1lcpTJh.js +1 -0
- package/dist/client/assets/adventure-playback-DTfkhIc0.js +3 -0
- package/dist/client/assets/adventure-reader-DM5UDDm9.css +1 -0
- package/dist/client/assets/agent-adventures-DZtWpj6k.css +1 -0
- package/dist/client/assets/agent-autocomplete-_u9o5EZu.js +2 -0
- package/dist/client/assets/{agent-essentials-K9B6kbTS.js → agent-essentials-bKWYOZaH.js} +1 -1
- package/dist/client/assets/{agent-floor-CuJr1iK1.css → agent-floor-Dmr9hZHL.css} +1 -1
- package/dist/client/assets/agent-floor-actor-DW8zLht0.js +1 -0
- package/dist/client/assets/agent-floor-world-Bnd1AtwK.css +1 -0
- package/dist/client/assets/agent-floor-world-layout-hfMjuoui.js +1 -0
- package/dist/client/assets/agent-lane-card-model-CeqQGp-8.js +1 -0
- package/dist/client/assets/{agent-lane-detail-ppJId6Jc.js → agent-lane-detail-Ti3trpfH.js} +1 -1
- package/dist/client/assets/{agent-lane-preview-BhplDYGf.js → agent-lane-preview-Dpa3DuOn.js} +1 -1
- package/dist/client/assets/{agent-lanes-DlqcEf0l.css → agent-lanes-DmgipV9D.css} +1 -1
- package/dist/client/assets/agent-lanes-model-DMAdqCmK.js +4 -0
- package/dist/client/assets/agent-master-THmq-1k8.css +1 -0
- package/dist/client/assets/agent-master-model-C-KdOFDK.js +1 -0
- package/dist/client/assets/{agent-specialization-CtF_jI34.js → agent-specialization-BplZUa_0.js} +1 -1
- package/dist/client/assets/agent-state-DDhnFEEP.js +1 -0
- package/dist/client/assets/{api-HFH8wFyb.js → api-BQYTwoz6.js} +1 -1
- package/dist/client/assets/api-DSqpVKC7.js +1 -0
- package/dist/client/assets/{arc.es-BNXJqSw7.js → arc.es-CubLvQ4W.js} +1 -1
- package/dist/client/assets/{arrow-left-eToA6GxC.js → arrow-left-DFfKAq0d.js} +1 -1
- package/dist/client/assets/{arrow-right-DTX42clh.js → arrow-right-DmAWnyAH.js} +1 -1
- package/dist/client/assets/{arrow-up-right-B09GPwFl.js → arrow-up-right-B0aLKiyF.js} +1 -1
- package/dist/client/assets/at-sign-DM7xeppo.js +1 -0
- package/dist/client/assets/book-open-BL9qvhEI.js +1 -0
- package/dist/client/assets/{bot-WxKXYtEX.js → bot-BhAVbcCA.js} +1 -1
- package/dist/client/assets/broker-display-BkBzyvbR.js +2 -0
- package/dist/client/assets/{cache-CeWH_KzJ.js → cache-DGBo3vIf.js} +1 -1
- package/dist/client/assets/chat-api-BPVC0asu.js +1 -0
- package/dist/client/assets/chat-space-model-B6Jg2CY4.js +4 -0
- package/dist/client/assets/{check-Dz2SRHft.js → check-g7D7-c1J.js} +1 -1
- package/dist/client/assets/{chevron-down-D120PY4g.js → chevron-down-CDzRQQGl.js} +1 -1
- package/dist/client/assets/{chevron-right-CowuvuE6.js → chevron-right-DKGTLiqc.js} +1 -1
- package/dist/client/assets/chevron-up-DX7R6KY2.js +1 -0
- package/dist/client/assets/{chunk-HRAB3GC3-KjjrTLCU.js → chunk-HRAB3GC3-Dvk_QpRq.js} +1 -1
- package/dist/client/assets/{clock-_9FDplIT.js → clock-CQb4FeMf.js} +1 -1
- package/dist/client/assets/{code-xml-CkkNdRmu.js → code-xml-Cmadr3pQ.js} +1 -1
- package/dist/client/assets/coffee-ljG1_krY.js +1 -0
- package/dist/client/assets/colors-CFlbwC25.js +1 -0
- package/dist/client/assets/comms-deck-C8nVeMBh.css +1 -0
- package/dist/client/assets/comms-deck-CBhsXnY-.js +2 -0
- package/dist/client/assets/comms-gesture-_aGFo6g3.js +2 -0
- package/dist/client/assets/{compass-BdpImt_W.js → compass-CvzkzkIh.js} +1 -1
- package/dist/client/assets/content-0AXa0klu.js +1 -0
- package/dist/client/assets/content-BEyJ19Lx.js +1 -0
- package/dist/client/assets/content-BN5weWKW.js +1 -0
- package/dist/client/assets/content-BNokkm7C.js +1 -0
- package/dist/client/assets/content-BV4PUM9q.js +1 -0
- package/dist/client/assets/content-BxUPlcx5.js +1 -0
- package/dist/client/assets/content-CIC5sku8.js +1 -0
- package/dist/client/assets/content-CKJ9zb7Z.js +1 -0
- package/dist/client/assets/content-CdkTyxqk.js +1 -0
- package/dist/client/assets/content-CnhhSCZq.js +1 -0
- package/dist/client/assets/content-D1Ze_FG9.js +1 -0
- package/dist/client/assets/content-DY3F9Vfr.js +1 -0
- package/dist/client/assets/content-DrKBYpcb.js +1 -0
- package/dist/client/assets/content-LSStQYj5.js +1 -0
- package/dist/client/assets/content-YvU-D0hF.js +1 -0
- package/dist/client/assets/content-oKQMyVnH.js +1 -0
- package/dist/client/assets/{context-budget-DqxWzalx.js → context-budget-8qFKqM-j.js} +1 -1
- package/dist/client/assets/{conversation-icons-DHGc9wbT.js → conversation-icons-CIRaxmid.js} +1 -1
- package/dist/client/assets/conversation-model-m8HhzroS.js +1 -0
- package/dist/client/assets/conversation-motion-features-D9PxLoDt.js +1 -0
- package/dist/client/assets/conversations-Cbg9h_Af.js +1 -0
- package/dist/client/assets/{copy-BzdzWsQd.js → copy-BGOC1tJB.js} +1 -1
- package/dist/client/assets/{cpu-CHFIGw87.js → cpu-Q6nrHFTN.js} +1 -1
- package/dist/client/assets/{createLucideIcon-Dv8H8m7J.js → createLucideIcon-ChvMq-zl.js} +1 -1
- package/dist/client/assets/{credentials-BTce3VP1.js → credentials-OeoF-VKJ.js} +1 -1
- package/dist/client/assets/discover-DlwbftpC.js +2 -0
- package/dist/client/assets/embed-entry-c0lwtjBG.js +2 -0
- package/dist/client/assets/embed-navigation-DayfkQau.js +1 -0
- package/dist/client/assets/{external-link-BvX5PfLh.js → external-link-BVccgH0n.js} +1 -1
- package/dist/client/assets/{eye-C9cGk5z6.js → eye-CsGfEVR6.js} +1 -1
- package/dist/client/assets/{file-code-corner-jlGFdr8d.js → file-code-corner-Be6da5l3.js} +1 -1
- package/dist/client/assets/{file-text-BHro8MkG.js → file-text-DP6txVW-.js} +1 -1
- package/dist/client/assets/flag-DAFE2wZ5.js +1 -0
- package/dist/client/assets/floor-character-name-CqJPOlXb.js +1 -0
- package/dist/client/assets/floor-context-model-rWKqaKmV.js +1 -0
- package/dist/client/assets/floor-context-sheet-BFnkFiY3.css +1 -0
- package/dist/client/assets/floor-memory-YMM8AlLY.js +1 -0
- package/dist/client/assets/floor-message-passes-CO3Ix_wR.js +1 -0
- package/dist/client/assets/floor-preview-text-HrORUJ7D.js +1 -0
- package/dist/client/assets/floor-replay-CccYqE-f.css +1 -0
- package/dist/client/assets/floor-tactical-hud-HL5Vja5Y.css +1 -0
- package/dist/client/assets/folder-B_S7gBVr.js +1 -0
- package/dist/client/assets/{gauge-DSflSery.js → gauge-DQCGlE3o.js} +1 -1
- package/dist/client/assets/{gestures-YA5IIwp-.js → gestures-CofqY4Km.js} +1 -1
- package/dist/client/assets/{git-branch-Bc_eDIpG.js → git-branch-DcUCsWdJ.js} +1 -1
- package/dist/client/assets/go-shortcuts-KQy-ZOpV.js +1 -0
- package/dist/client/assets/home-moving-signal-BIHUGNfI.js +1 -0
- package/dist/client/assets/home-now-card-CaLgZze2.js +1 -0
- package/dist/client/assets/{home-now-card-nano-Jmy7eJ6H.js → home-now-card-nano-CvU8B61b.js} +1 -1
- package/dist/client/assets/{hooks-D6NI15f6.css → hooks-D787lBmm.css} +1 -1
- package/dist/client/assets/hooks-DaUOREpP.js +2 -0
- package/dist/client/assets/index-CGbs0SBm.css +1 -0
- package/dist/client/assets/index-CbqBwfIW.js +1 -0
- package/dist/client/assets/index-CyPMl7Up.js +1 -0
- package/dist/client/assets/index-DReVb7jZ.js +10 -0
- package/dist/client/assets/index-PQpJveGO.js +1 -0
- package/dist/client/assets/index-kkXUq-zf.js +1 -0
- package/dist/client/assets/{inspector-panel-CwrHjRaQ.js → inspector-panel-CLU7wjnT.js} +2 -2
- package/dist/client/assets/{keyboard-nav-B8sQ_8IF.js → keyboard-nav-CJXPaHXj.js} +1 -1
- package/dist/client/assets/knowledge-search-BNdQweGz.css +1 -0
- package/dist/client/assets/lane-ask-display-BTVSakyo.js +18 -0
- package/dist/client/assets/{lane-edit-display-C_Aujldz.js → lane-edit-display-BjdT9oZl.js} +1 -1
- package/dist/client/assets/{lane-observe-vfyACHi0.js → lane-observe-CteDwdD-.js} +3 -3
- package/dist/client/assets/lane-roster-store-Ch9t6lb0.js +1 -0
- package/dist/client/assets/{lane-tool-detail-0WhMf4Vj.js → lane-tool-detail-Czggx8oM.js} +1 -1
- package/dist/client/assets/{layers-CW2-qHsG.js → layers-BOwyWodP.js} +1 -1
- package/dist/client/assets/{layout-grid-BoVnPOk-.js → layout-grid-B36Qsh0y.js} +1 -1
- package/dist/client/assets/left-0vBrvrBG.js +2 -0
- package/dist/client/assets/{left-DH44V4I_.css → left-BV9yMiTL.css} +1 -1
- package/dist/client/assets/left-C6SyaqlJ.js +1 -0
- package/dist/client/assets/left-CTuXysZR.js +2 -0
- package/dist/client/assets/left-Cc6s4DT2.js +1 -0
- package/dist/client/assets/left-DF5caiyh.js +1 -0
- package/dist/client/assets/left-DgT4tWCx.js +1 -0
- package/dist/client/assets/left-R0wppTTr.js +1 -0
- package/dist/client/assets/left-advisor-C-kt8V28.js +1 -0
- package/dist/client/assets/left-agents-thnBO156.js +1 -0
- package/dist/client/assets/left-default-CT42fnpF.js +1 -0
- package/dist/client/assets/left-lanes-CSmZgciK.js +1 -0
- package/dist/client/assets/left-mission-C86x6i9h.js +1 -0
- package/dist/client/assets/left-mission-DENnfshd.css +1 -0
- package/dist/client/assets/library-DdhYL_9v.js +1 -0
- package/dist/client/assets/{loader-circle-DmUG_YC7.js → loader-circle-DNUsuPWz.js} +1 -1
- package/dist/client/assets/{local-agents-VP1-ZlPw.js → local-agents-I40PawYA.js} +1 -1
- package/dist/client/assets/machine-children-CdhNzDF0.js +1 -0
- package/dist/client/assets/machine-scope-DJt9RZ2w.js +1 -0
- package/dist/client/assets/mentions-Ck_Vjnyp.js +1 -0
- package/dist/client/assets/{mesh-ops-CKSWgax2.js → mesh-ops-DSlvHp-D.js} +1 -1
- package/dist/client/assets/{mesh-screen-D1Yvo8fU.css → mesh-screen-DjA4mOaN.css} +1 -1
- package/dist/client/assets/mesh-view-store-C1-mdP3P.js +1 -0
- package/dist/client/assets/{message-circle-joGFxfj1.js → message-circle-cI5_A5mj.js} +1 -1
- package/dist/client/assets/{message-markup-DC0QFEZn.js → message-markup-6Tgo4qFJ.js} +1 -1
- package/dist/client/assets/{message-square-BLiFqpe_.js → message-square-CJW4WRlo.js} +1 -1
- package/dist/client/assets/{message-visibility-CGOmSSKs.js → message-visibility-DwxgcgYK.js} +1 -1
- package/dist/client/assets/mission-control-CsX3Yc58.css +1 -0
- package/dist/client/assets/mission-control-model-C30vU1Fe.js +1 -0
- package/dist/client/assets/mission-control-store-p_cboAm4.js +1 -0
- package/dist/client/assets/{mission-wall-CocIM1cF.js → mission-wall-DOuGOxQy.js} +1 -1
- package/dist/client/assets/monitor-C7_cHlkC.js +1 -0
- package/dist/client/assets/nav-destinations-CU_euC-Q.js +1 -0
- package/dist/client/assets/observe-CtS0l3zu.js +1 -0
- package/dist/client/assets/{operator-attention-RqieiSY8.js → operator-attention-DBaRg5ep.js} +1 -1
- package/dist/client/assets/ops-screen-CxYM0VOW.css +1 -0
- package/dist/client/assets/page-status-DwFR4wSw.js +1 -0
- package/dist/client/assets/panel-right-qP17MwMl.js +1 -0
- package/dist/client/assets/pause-B_hliKuR.js +1 -0
- package/dist/client/assets/{persistent-state-BubPQ7tT.js → persistent-state-BUsTTZFE.js} +1 -1
- package/dist/client/assets/pin-Oi4qHR6M.js +1 -0
- package/dist/client/assets/pip-idle-v1-Tt-CZsRG.png +0 -0
- package/dist/client/assets/pip-thinking-v1-BoHWSEye.png +0 -0
- package/dist/client/assets/pip-waiting-v1-DkuvJ-dN.png +0 -0
- package/dist/client/assets/pip-working-v1-wWQLRS1z.png +0 -0
- package/dist/client/assets/play-CVeRmqLH.js +1 -0
- package/dist/client/assets/{plus-BWKhylds.js → plus-D5NLH_fM.js} +1 -1
- package/dist/client/assets/profile-BegEUmB7.js +1 -0
- package/dist/client/assets/projects-inbox-CKPLZN8s.css +1 -0
- package/dist/client/assets/{projects-inbox-DFbgVlXL.js → projects-inbox-CfwxCTdN.js} +1 -1
- package/dist/client/assets/provider-DwmCoSlc.js +1 -0
- package/dist/client/assets/{proxy-DVDRhSRR.js → proxy-DgzP27W8.js} +1 -1
- package/dist/client/assets/{radio-CxIXS1nU.js → radio-Cas2qg1D.js} +1 -1
- package/dist/client/assets/{refresh-cw-Bkh7Cvnd.js → refresh-cw-IcD2lPoT.js} +1 -1
- package/dist/client/assets/resolve-panes-pfZTezKo.js +1 -0
- package/dist/client/assets/resolve-sidebar-context-D5ksvrb_.js +1 -0
- package/dist/client/assets/right-BDaCJ0CF.js +1 -0
- package/dist/client/assets/right-BP6lXRFS.js +1 -0
- package/dist/client/assets/right-Cb1VCrdj.js +1 -0
- package/dist/client/assets/right-CeFaxfBo.js +1 -0
- package/dist/client/assets/right-Ck2SrYCj.js +1 -0
- package/dist/client/assets/right-D-uv5YfF.js +1 -0
- package/dist/client/assets/right-DJMSICky.js +1 -0
- package/dist/client/assets/right-Dnljs8ah.js +1 -0
- package/dist/client/assets/right-SdCSF8PP.js +1 -0
- package/dist/client/assets/{right-DVUq5374.js → right-cjPTwPXS.js} +2 -2
- package/dist/client/assets/{rocket-CnxqjX_K.js → rocket-DAqYvu8I.js} +1 -1
- package/dist/client/assets/router-C-MF5-mb.js +1 -0
- package/dist/client/assets/{runtime-picker-BYAFNLNq.css → runtime-picker-C3JwrDKP.css} +1 -1
- package/dist/client/assets/runtime-picker-C_AVYF63.js +1 -0
- package/dist/client/assets/{scope-views-KPY85UUx.js → scope-views-Dl3ml9OZ.js} +1 -1
- package/dist/client/assets/scout-voice-CqAyfblr.js +1 -0
- package/dist/client/assets/{scoutbot-D7kGGyK_.js → scoutbot-Bk3nyrkj.js} +2 -2
- package/dist/client/assets/{scoutbot-markdown-yb87JlSE.js → scoutbot-markdown-DwvGQOWo.js} +1 -1
- package/dist/client/assets/{scroll-text-DFcBYy5J.js → scroll-text-B0tKI9Sg.js} +1 -1
- package/dist/client/assets/{search-FB2vVxCp.js → search-UsM-9-_W.js} +1 -1
- package/dist/client/assets/secondaryNavConfig-D15P1Y9k.css +1 -0
- package/dist/client/assets/secondaryNavConfig-DzNHk6IH.js +1 -0
- package/dist/client/assets/{selection-bridge-qBGFCJv8.js → selection-bridge-OTS2iFkt.js} +1 -1
- package/dist/client/assets/{send-horizontal-CS7mxVhX.js → send-horizontal-BlQsRK6C.js} +1 -1
- package/dist/client/assets/send-to-agent-session-C1mgqdow.js +1 -0
- package/dist/client/assets/{server-WY6gsbZz.js → server-DBlPW0Mp.js} +1 -1
- package/dist/client/assets/{session-catalog-CG4oL_yN.js → session-catalog-CnpZMB7C.js} +1 -1
- package/dist/client/assets/{session-table-uJh3v-ly.js → session-table-CGkfG5Yd.js} +1 -1
- package/dist/client/assets/sessions-view-Bge4XZ4I.js +1 -0
- package/dist/client/assets/{settings-DQEtqkM9.js → settings-C69Zjrpq.js} +1 -1
- package/dist/client/assets/shared-work-artifacts-DfNl9KTo.js +1 -0
- package/dist/client/assets/{sliders-horizontal-57e99_qO.js → sliders-horizontal-6bzeod7c.js} +1 -1
- package/dist/client/assets/solar-system-scope-2k-stars-points-1FwHnkj0.png +0 -0
- package/dist/client/assets/{sparkles-D0vWLTyC.js → sparkles-Cc5lPZRv.js} +1 -1
- package/dist/client/assets/sprout-action-sprite-DZ8C0fTl.css +1 -0
- package/dist/client/assets/sprout-actions-proof-v1-BzUdc812.png +0 -0
- package/dist/client/assets/{sse-B29iGBnw.js → sse-A8AyLH0g.js} +1 -1
- package/dist/client/assets/system-surfaces-redesign-DKFg4GB5.css +1 -0
- package/dist/client/assets/{tail-display-DcliDVkW.js → tail-display-DHSNmvor.js} +2 -2
- package/dist/client/assets/{tail-events-LK29oCKm.js → tail-events-C4WdhVeK.js} +1 -1
- package/dist/client/assets/{terminal-UDy4lzV1.js → terminal-DMZjX1es.js} +1 -1
- package/dist/client/assets/{terminal-relay-CXHMdain.js → terminal-relay-mO89dX-Y.js} +1 -1
- package/dist/client/assets/terminal-screen-Bpb2SZrn.css +1 -0
- package/dist/client/assets/{terminal-sessions-Bdt2W3Y4.js → terminal-sessions-3RfJpen8.js} +1 -1
- package/dist/client/assets/{terminal-takeover-BMeBjBB2.js → terminal-takeover-CZZsnPzj.js} +1 -1
- package/dist/client/assets/use-beside-D3cJpA5p.js +1 -0
- package/dist/client/assets/use-conversation-list-D5EnpVba.js +1 -0
- package/dist/client/assets/{use-fleet-active-asks-CCGrll5q.js → use-fleet-active-asks-D_QOmjg5.js} +1 -1
- package/dist/client/assets/use-mesh-node-state-3V3ADQ-G.js +1 -0
- package/dist/client/assets/{use-mesh-ops-items-BjyeFJTz.js → use-mesh-ops-items-DI9GKWlF.js} +1 -1
- package/dist/client/assets/{use-reduced-motion-CPoX8iV2.js → use-reduced-motion-CiaZHMnk.js} +1 -1
- package/dist/client/assets/use-scout-dev-flags-CkdAHlDR.js +1 -0
- package/dist/client/assets/{useAgentHoverCard-BgTLNcF-.js → useAgentHoverCard-A3QGXqIy.js} +1 -1
- package/dist/client/assets/useContentSecondaryNav-DrL_nkCZ.js +1 -0
- package/dist/client/assets/{useEmbedHeadline-DuUnwTB7.js → useEmbedHeadline-atkQVfGw.js} +1 -1
- package/dist/client/assets/usePersistentState-Y8XwSTg-.js +1 -0
- package/dist/client/assets/{usePierreRuntime-35AHf9RQ.js → usePierreRuntime-DTvcwISe.js} +1 -1
- package/dist/client/assets/users-RLK3P5U4.js +1 -0
- package/dist/client/assets/worker-rendered-v1-DmGVMlVi.png +0 -0
- package/dist/client/assets/worker-thinking-v1-ujakpzrK.png +0 -0
- package/dist/client/assets/worker-waiting-v1-DbTSsfJJ.png +0 -0
- package/dist/client/assets/worker-working-v1-BROAvJ_z.png +0 -0
- package/dist/client/assets/world-outposts-v1-DOt0i98W.png +0 -0
- package/dist/client/assets/{wrench-BfVeded5.js → wrench-B4maQJai.js} +1 -1
- package/dist/client/assets/{x-DgmmnPKt.js → x-rlMdRqJF.js} +1 -1
- package/dist/client/assets/{xterm-DnJJmrCA.js → xterm-B1zHHOLQ.js} +1 -1
- package/dist/client/assets/{zap-Bcja1lHG.js → zap-B4X0OrEw.js} +1 -1
- package/dist/client/characters/sage/sage.glb +0 -0
- package/dist/client/crew/brik-bust.webp +0 -0
- package/dist/client/crew/brik-chip-id.webp +0 -0
- package/dist/client/crew/fenn-bust.webp +0 -0
- package/dist/client/crew/fenn-chip-id.webp +0 -0
- package/dist/client/crew/lulu-bust.webp +0 -0
- package/dist/client/crew/milo-bust.webp +0 -0
- package/dist/client/crew/milo-chip-id.webp +0 -0
- package/dist/client/crew/nori-bust.webp +0 -0
- package/dist/client/crew/pip-bust.webp +0 -0
- package/dist/client/crew/pip-chip-id.webp +0 -0
- package/dist/client/crew/sheets/eye-plate-v1/blink-half.webp +0 -0
- package/dist/client/crew/sheets/eye-plate-v1/blink-shut.webp +0 -0
- package/dist/client/crew/sheets/eye-plate-v1/look-left.webp +0 -0
- package/dist/client/crew/sheets/eye-plate-v1/look-right.webp +0 -0
- package/dist/client/crew/sheets/eye-plate-v1/look-up.webp +0 -0
- package/dist/client/crew/sheets/eye-plate-v1/rest.webp +0 -0
- package/dist/client/crew/sheets/sprout/blink-half.webp +0 -0
- package/dist/client/crew/sheets/sprout/blink-shut.webp +0 -0
- package/dist/client/crew/sheets/sprout/look-left.webp +0 -0
- package/dist/client/crew/sheets/sprout/look-right.webp +0 -0
- package/dist/client/crew/sheets/sprout/look-up.webp +0 -0
- package/dist/client/crew/sprout-bust.webp +0 -0
- package/dist/client/crew/sprout-chip-id.webp +0 -0
- package/dist/client/crew/tuck-bust.webp +0 -0
- package/dist/client/crew/tuck-chip-id.webp +0 -0
- package/dist/client/crew/vex-bust.webp +0 -0
- package/dist/client/crew/vex-chip-id.webp +0 -0
- package/dist/client/crew/wrench-bust.webp +0 -0
- package/dist/client/crew/wrench-chip-id.webp +0 -0
- package/dist/client/index.html +15 -3
- package/dist/drizzle/0017_wise_silver_sable.sql +26 -0
- package/dist/drizzle/0018_message_epoch_order.sql +1 -0
- package/dist/drizzle/0019_session_actor_targets.sql +227 -0
- package/dist/drizzle/README.md +19 -0
- package/dist/drizzle/meta/0017_snapshot.json +6785 -0
- package/dist/drizzle/meta/0018_snapshot.json +6804 -0
- package/dist/drizzle/meta/0019_snapshot.json +6804 -0
- package/dist/drizzle/meta/_journal.json +21 -0
- package/dist/highlights-eq9cgrbb.scm +604 -0
- package/dist/highlights-ghv9g403.scm +205 -0
- package/dist/highlights-hk7bwhj4.scm +284 -0
- package/dist/highlights-r812a2qc.scm +150 -0
- package/dist/highlights-x6tmsnaa.scm +115 -0
- package/dist/injections-73j83es3.scm +27 -0
- package/dist/main.mjs +32163 -29049
- package/dist/node/main.mjs +7189 -6285
- package/dist/openscout-terminal-relay.mjs +391 -9
- package/dist/pairing-runtime-controller.mjs +36724 -35406
- package/dist/runtime/base-daemon.mjs +14204 -63
- package/dist/runtime/broker-daemon.mjs +23498 -3137
- package/dist/runtime/broker-process-manager.mjs +19 -5
- package/dist/runtime/mesh-discover.mjs +18 -5
- package/dist/scout-control-plane-web.mjs +58517 -36972
- package/dist/statusline.mjs +1021 -35
- package/dist/tree-sitter-javascript-nd0q4pe9.wasm +0 -0
- package/dist/tree-sitter-markdown-411r6y9b.wasm +0 -0
- package/dist/tree-sitter-markdown_inline-j5349f42.wasm +0 -0
- package/dist/tree-sitter-typescript-zxjzwt75.wasm +0 -0
- package/dist/tree-sitter-zig-e78zbjpm.wasm +0 -0
- package/dist/update-helper.mjs +32235 -0
- package/package.json +2 -2
- package/dist/client/assets/ActivityScreen-sfonf5SR.js +0 -1
- package/dist/client/assets/AgentAvatar-Dz79iTxB.js +0 -1
- package/dist/client/assets/AgentConfigurationScreen-DDc3udYM.js +0 -1
- package/dist/client/assets/AgentDefinitionsWorkspace-DHDS9Pgd.js +0 -1
- package/dist/client/assets/AgentDetailCard-8viaEY8b.js +0 -1
- package/dist/client/assets/AgentFloorView-DuyvyMMj.js +0 -1
- package/dist/client/assets/AgentInfoScreen-qntgg2q2.js +0 -1
- package/dist/client/assets/AgentLanesEmbedScreen-BA6fRwkD.js +0 -1
- package/dist/client/assets/AgentLanesView-96lHsoX7.js +0 -2
- package/dist/client/assets/AgentLiveActions-DlSKL60c.js +0 -1
- package/dist/client/assets/AgentMasterScreen-DHrMuQ6_.js +0 -1
- package/dist/client/assets/AgentSessions-DV9v34aq.js +0 -6
- package/dist/client/assets/AgentsConsole-DTpVhS67.js +0 -1
- package/dist/client/assets/AgentsScreen-hZ4o2I-e.js +0 -1
- package/dist/client/assets/AgentsSubnav-Ci7uWM7P.js +0 -1
- package/dist/client/assets/AtopView-D7vyQDtE.js +0 -1
- package/dist/client/assets/BackToPicker-BHicJyfc.js +0 -1
- package/dist/client/assets/BriefingDetailScreen-B-wD_Bot.js +0 -1
- package/dist/client/assets/BriefingsScreen-Cn4Mbam9.js +0 -1
- package/dist/client/assets/BrokerScreen-C8FQ5rlg.js +0 -5
- package/dist/client/assets/ChatCollapsedStrip-7Wrg8Ge0.js +0 -1
- package/dist/client/assets/CodeScreen-cLC0tJ4S.js +0 -1
- package/dist/client/assets/ConversationFeedRows-Bx0gFyG_.js +0 -1
- package/dist/client/assets/ConversationHeader-Bt2RBj93.js +0 -1
- package/dist/client/assets/ConversationPanels-o6W-cOoU.js +0 -6
- package/dist/client/assets/ConversationScreen-CkWnKXt6.css +0 -1
- package/dist/client/assets/ConversationScreen-DIU7m_aC.js +0 -2
- package/dist/client/assets/ConversationStatus-CTYOywFh.js +0 -1
- package/dist/client/assets/CrewWorkspaces-DNX-QQ1h.js +0 -1
- package/dist/client/assets/CrewWorkspaces-Diq11KDq.css +0 -1
- package/dist/client/assets/DispatchAftermath-ZCEB75hh.js +0 -1
- package/dist/client/assets/DocumentFocusViewer-D8iB6SMt.js +0 -1
- package/dist/client/assets/FlightObserveScreen-BTe1YRPr.js +0 -1
- package/dist/client/assets/FollowScreen-CkR-okdL.js +0 -1
- package/dist/client/assets/HarnessMark-DttReffF.js +0 -1
- package/dist/client/assets/HarnessesScreen-COO_Q8VY.js +0 -1
- package/dist/client/assets/HostAdvisorView-DeJ-8RZV.js +0 -1
- package/dist/client/assets/KnowledgeSearchInspector-W_zNIBRV.js +0 -1
- package/dist/client/assets/KnowledgeSearchScreen-_rxJNUUh.js +0 -1
- package/dist/client/assets/LaneTraceDetailSheet-DNIECgEl.js +0 -1
- package/dist/client/assets/MeshCanvas-DZv2ipsy.js +0 -3
- package/dist/client/assets/MeshCanvasMinimap-BXHRNb7l.js +0 -1
- package/dist/client/assets/MeshScreen-DuNvpDC5.js +0 -1
- package/dist/client/assets/MessagesScreen-dNNPFwAc.js +0 -1
- package/dist/client/assets/MissionContextRail-DnCWPzAM.js +0 -1
- package/dist/client/assets/MissionControlView-DmaThhNR.js +0 -1
- package/dist/client/assets/MissionFocusOverlay-K21ssTxv.js +0 -1
- package/dist/client/assets/MissionLeftAgentRow-CbQm4BLv.js +0 -1
- package/dist/client/assets/MissionLogPane-BLvSSIdT.js +0 -1
- package/dist/client/assets/NewAgentModal-B7qxjZlW.js +0 -1
- package/dist/client/assets/NewChatComposer-D2Ah4T-W.js +0 -19
- package/dist/client/assets/ObserveEmbedScreen-DvKGsaLv.js +0 -2
- package/dist/client/assets/OpenScoutAppShell-C9TOLB7u.js +0 -79
- package/dist/client/assets/OpsAgentsView-vIoY-AW1.js +0 -1
- package/dist/client/assets/OpsScreen-CJBwshEp.js +0 -1
- package/dist/client/assets/OpsSubnav-CjDTnp64.js +0 -1
- package/dist/client/assets/ProjectAgentProfile-Br1eTD7G.js +0 -1
- package/dist/client/assets/ProjectAgentProfileHero-mjxNcRvw.js +0 -1
- package/dist/client/assets/ProjectsInbox-Bq29DE_o.js +0 -2
- package/dist/client/assets/ProjectsRail-kMDA0yn4.js +0 -1
- package/dist/client/assets/ProjectsScreen-BDaJYhc0.js +0 -1
- package/dist/client/assets/ProjectsThreadAside-B940p3vW.js +0 -1
- package/dist/client/assets/Provider-D0bB7q6y.js +0 -1
- package/dist/client/assets/RailRow-B88JVr62.js +0 -1
- package/dist/client/assets/RawSessionsTable-CzGhEdiZ.js +0 -1
- package/dist/client/assets/RealtimeVoiceScreen-CyP1CWsX.js +0 -1
- package/dist/client/assets/RepoDiffViewer-Bw5yMC4A.js +0 -7
- package/dist/client/assets/RepoDiffViewerLazy-DzfoFhbl.js +0 -2
- package/dist/client/assets/ScoutDeckSurface-DQoZofzH.js +0 -1
- package/dist/client/assets/SessionEmbedScreen-CpduQ0O9.js +0 -1
- package/dist/client/assets/SessionObserve-BVeTkcIl.js +0 -12
- package/dist/client/assets/SessionObserveEvidence-BkOezTGV.js +0 -1
- package/dist/client/assets/SessionRefScreen-DetLMkTT.js +0 -1
- package/dist/client/assets/SessionsScreen-B-McKw6d.js +0 -1
- package/dist/client/assets/SettingsDrawer-CPB32w0n.js +0 -3
- package/dist/client/assets/SettingsScreen-BEzYFdjz.js +0 -1
- package/dist/client/assets/SpriteAvatar-DFO4Kb4Z.js +0 -1
- package/dist/client/assets/Terminal-DWyZTZdY.js +0 -1
- package/dist/client/assets/TerminalEmbedScreen-_SSzwhWa.js +0 -1
- package/dist/client/assets/TerminalHeaderMount-CY7uIWBg.js +0 -1
- package/dist/client/assets/WorkFilesViewer-D8-4vF5l.js +0 -1
- package/dist/client/assets/agent-autocomplete-BlK8wY06.js +0 -10
- package/dist/client/assets/agent-lane-card-model-CY3OE1Xu.js +0 -1
- package/dist/client/assets/agent-lanes-model-tc-1hE6q.js +0 -2
- package/dist/client/assets/agent-master-I1W-5d-x.css +0 -1
- package/dist/client/assets/agent-master-model-DMcHeNq3.js +0 -1
- package/dist/client/assets/api-Co9aQ2Jw.js +0 -1
- package/dist/client/assets/arrow-down-BAGkhHA6.js +0 -1
- package/dist/client/assets/broker-display-Q75fupqG.js +0 -2
- package/dist/client/assets/chunk-JTPDIGGW-COJ00z94.js +0 -46
- package/dist/client/assets/chunk-T65CQEWV-H2QEKfr1.js +0 -1
- package/dist/client/assets/chunk-YOZR3KYS-CrCgXw9l.js +0 -2
- package/dist/client/assets/colors-BtO5_zlx.js +0 -1
- package/dist/client/assets/content-0RBfbCIJ.js +0 -1
- package/dist/client/assets/content-BTmnk2bl.js +0 -1
- package/dist/client/assets/content-Bk5DKhyP.js +0 -1
- package/dist/client/assets/content-Bw_8GE_S.js +0 -1
- package/dist/client/assets/content-CI4gLEWi.js +0 -1
- package/dist/client/assets/content-CLCtp9Rb.js +0 -1
- package/dist/client/assets/content-C_FAGTNk.js +0 -1
- package/dist/client/assets/content-CnnzWOE3.js +0 -1
- package/dist/client/assets/content-DKlY98pO.js +0 -1
- package/dist/client/assets/content-Df7ndXTG.js +0 -1
- package/dist/client/assets/content-DkZDzzx3.js +0 -1
- package/dist/client/assets/content-DnGmb2L0.js +0 -1
- package/dist/client/assets/content-Ds-zs-Ss.js +0 -1
- package/dist/client/assets/content-JIWSyC0f.js +0 -1
- package/dist/client/assets/content-Q3TIYC8q.js +0 -1
- package/dist/client/assets/content-evaBfvxD.js +0 -1
- package/dist/client/assets/conversation-model-C2KuZUXc.js +0 -1
- package/dist/client/assets/conversation-motion-features-BJnHs3Ul.js +0 -1
- package/dist/client/assets/discover-DutlV0ZU.js +0 -2
- package/dist/client/assets/embed-entry-CJG7WEVw.js +0 -2
- package/dist/client/assets/home-moving-signal-PHSqSBu_.js +0 -1
- package/dist/client/assets/home-now-card-C_qsI6C6.js +0 -1
- package/dist/client/assets/hooks-ME7rmhpE.js +0 -2
- package/dist/client/assets/index-C1VaWNuD.js +0 -10
- package/dist/client/assets/index-C8UCRm2W.js +0 -1
- package/dist/client/assets/index-Cn0I2Hgi.js +0 -1
- package/dist/client/assets/index-Cx6Gbr6n.js +0 -1
- package/dist/client/assets/index-i7TMxlwW.css +0 -1
- package/dist/client/assets/knowledge-search-D_bLoYtC.css +0 -1
- package/dist/client/assets/lane-ask-display-B6iCAVcd.js +0 -18
- package/dist/client/assets/lane-roster-store-DN2jxXF-.js +0 -1
- package/dist/client/assets/left-BRu9pnqx.js +0 -2
- package/dist/client/assets/left-BjS1dKNV.js +0 -2
- package/dist/client/assets/left-CL-TVLJ7.js +0 -1
- package/dist/client/assets/left-DLpsDi55.js +0 -1
- package/dist/client/assets/left-DPcM9o8Y.js +0 -1
- package/dist/client/assets/left-MmTJf1tK.js +0 -1
- package/dist/client/assets/left-P80i5V8L.js +0 -1
- package/dist/client/assets/left-advisor-CbXVzAqS.js +0 -1
- package/dist/client/assets/left-agents-7mJsiNyr.js +0 -1
- package/dist/client/assets/left-default-COK26l3H.js +0 -1
- package/dist/client/assets/left-lanes-Dbdm9Veu.js +0 -1
- package/dist/client/assets/left-mission-DSenPIyb.css +0 -1
- package/dist/client/assets/left-mission-DqGR5jby.js +0 -1
- package/dist/client/assets/library-COnWzUWv.js +0 -1
- package/dist/client/assets/mentions-BZ5SBMtc.js +0 -1
- package/dist/client/assets/mesh-buckets-CLYS8Jx8.js +0 -1
- package/dist/client/assets/mesh-view-store-CBM1za_N.js +0 -1
- package/dist/client/assets/mission-control-CnU7dNt1.css +0 -1
- package/dist/client/assets/mission-control-model-C0fByIjm.js +0 -1
- package/dist/client/assets/mission-control-store-CM8mQGg8.js +0 -1
- package/dist/client/assets/observe-BLmy4quB.js +0 -1
- package/dist/client/assets/ops-screen-giu3If_N.css +0 -1
- package/dist/client/assets/page-status-BE0-J1xY.js +0 -1
- package/dist/client/assets/paperclip-Br7wUDFl.js +0 -1
- package/dist/client/assets/perf-PX8Rx0EP.js +0 -1
- package/dist/client/assets/profile-BCvk8jOQ.js +0 -1
- package/dist/client/assets/projects-inbox-BIW7nv-H.css +0 -1
- package/dist/client/assets/resolve-panes-DhD5qmQO.js +0 -1
- package/dist/client/assets/resolve-sidebar-context-GqhZNRPY.js +0 -1
- package/dist/client/assets/right-B_08ilv6.js +0 -1
- package/dist/client/assets/right-Brm67HOL.js +0 -1
- package/dist/client/assets/right-BveAPKBW.js +0 -1
- package/dist/client/assets/right-CpTB_-Ya.js +0 -1
- package/dist/client/assets/right-CqC4Qdot.js +0 -1
- package/dist/client/assets/right-D91j9d5Y.js +0 -1
- package/dist/client/assets/right-DaLRhYl3.js +0 -1
- package/dist/client/assets/right-Dt1wOwA5.js +0 -1
- package/dist/client/assets/right-DtzqIZQF.js +0 -1
- package/dist/client/assets/router-kfcaYqZr.js +0 -1
- package/dist/client/assets/runtime-picker-C20lTGhV.js +0 -1
- package/dist/client/assets/scout-voice-Cg1qfepC.js +0 -1
- package/dist/client/assets/secondaryNavConfig-C0Srrmy8.js +0 -1
- package/dist/client/assets/secondaryNavConfig-xssF_ubT.css +0 -1
- package/dist/client/assets/system-surfaces-redesign-kuf3wuE_.css +0 -1
- package/dist/client/assets/terminal-screen-vMICbBJh.css +0 -1
- package/dist/client/assets/use-conversation-list-UG-tMN67.js +0 -1
- package/dist/client/assets/use-scout-dev-flags-DTseRrFi.js +0 -1
- package/dist/client/assets/useContentSecondaryNav-CoIoz7JU.js +0 -1
package/NOTICE
CHANGED
|
@@ -12,3 +12,10 @@ distributed under the License is distributed on an "AS IS" BASIS,
|
|
|
12
12
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
13
|
See the License for the specific language governing permissions and
|
|
14
14
|
limitations under the License.
|
|
15
|
+
|
|
16
|
+
This product includes a star-field texture by Solar System Scope
|
|
17
|
+
(https://www.solarsystemscope.com/textures/), licensed under the
|
|
18
|
+
Creative Commons Attribution 4.0 International license
|
|
19
|
+
(https://creativecommons.org/licenses/by/4.0/). The island halo map is
|
|
20
|
+
an OpenScout derivative of the 2k stars texture with black made
|
|
21
|
+
transparent.
|
package/README.md
CHANGED
|
@@ -242,3 +242,40 @@ Run `scout --help` for the current command inventory and
|
|
|
242
242
|
|
|
243
243
|
Apache-2.0. See the [license](https://github.com/oscout/scout/blob/main/LICENSE)
|
|
244
244
|
and [notice](https://github.com/oscout/scout/blob/main/packages/cli/NOTICE).
|
|
245
|
+
|
|
246
|
+
### Participate in Scout Chat
|
|
247
|
+
|
|
248
|
+
The main package includes a scoped Chat client:
|
|
249
|
+
|
|
250
|
+
```sh
|
|
251
|
+
scout chat join "<invite-url>"
|
|
252
|
+
scout chat say "Hello!"
|
|
253
|
+
scout chat read --json
|
|
254
|
+
scout chat reply <message-id> "Here is my reply."
|
|
255
|
+
scout chat watch --for 10m --json
|
|
256
|
+
scout chat status
|
|
257
|
+
```
|
|
258
|
+
|
|
259
|
+
Chat is a standalone HTTP client inside the Scout package. Both `agent.md` and
|
|
260
|
+
`api.md` invitations join through the same HTTP participation API. No local
|
|
261
|
+
Scout broker, profile, daemon, setup, or session registration is needed.
|
|
262
|
+
The Chat entry point runs on Node.js or Bun without loading Scout's service
|
|
263
|
+
startup code. Installing the package does not require running `scout setup`.
|
|
264
|
+
|
|
265
|
+
The current agent reads replies using `read` or bounded `watch`. This does not
|
|
266
|
+
attach an agent session or enable automatic wake-up. Plain HTTP remains
|
|
267
|
+
supported without installing the CLI.
|
|
268
|
+
|
|
269
|
+
Credentials and retry identity are stored with private permissions under
|
|
270
|
+
`~/.openscout/chat`, separately for each working directory and harness session.
|
|
271
|
+
The most recently joined room is selected automatically. Use `--channel <id>`
|
|
272
|
+
to select a previously joined room. Run subsequent commands in the same working
|
|
273
|
+
directory and session. Credentials are never included in command output.
|
|
274
|
+
|
|
275
|
+
`watch --json` emits one JSON event per line. `watch` is bounded (10 minutes by
|
|
276
|
+
default, up to 60 minutes), follows the server's
|
|
277
|
+
poll interval, and saves its cursor after printing events. It executes no chat
|
|
278
|
+
content. A stopped or interrupted watcher can resume; a crash between printing
|
|
279
|
+
and cursor persistence can repeat events. Expired cursors are reported rather
|
|
280
|
+
than silently skipping history. For uncertain sends, retry with the same
|
|
281
|
+
`--request-id` printed in the error to avoid duplicate messages.
|
package/bin/scout.mjs
CHANGED
|
@@ -23,6 +23,12 @@ if (command === "--version" || command === "-v" || command === "version") {
|
|
|
23
23
|
process.exit(0);
|
|
24
24
|
}
|
|
25
25
|
|
|
26
|
+
// Chat is a standalone HTTP client: do not load broker/setup entrypoints.
|
|
27
|
+
if (command === "chat") {
|
|
28
|
+
await import(pathToFileURL(resolve(binDir, "../dist/chat.mjs")).href);
|
|
29
|
+
process.exit(process.exitCode ?? 0);
|
|
30
|
+
}
|
|
31
|
+
|
|
26
32
|
const wantsHelp = !command || command === "--help" || command === "-h" || command === "help";
|
|
27
33
|
const wantsStatusline = command === "statusline" && process.argv[3] === "claude";
|
|
28
34
|
const preferredHost = normalizeHost(process.env.OPENSCOUT_RUNTIME_HOST);
|
package/bin/scoutd
CHANGED
|
Binary file
|
package/dist/build-manifest.json
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
{
|
|
2
2
|
"schemaVersion": 1,
|
|
3
3
|
"packageName": "@openscout/scout",
|
|
4
|
-
"version": "0.2.
|
|
5
|
-
"commit": "
|
|
6
|
-
"branch": "
|
|
4
|
+
"version": "0.2.105",
|
|
5
|
+
"commit": "4f6679bb04ff580a99a4124d1875ce30cb3b68bd",
|
|
6
|
+
"branch": "main",
|
|
7
7
|
"sourceDirty": false,
|
|
8
|
-
"builtAt": "2026-09-
|
|
8
|
+
"builtAt": "2026-09-17T20:07:44.037Z"
|
|
9
9
|
}
|
package/dist/chat.mjs
ADDED
|
@@ -0,0 +1,285 @@
|
|
|
1
|
+
// src/chat-main.ts
|
|
2
|
+
import { basename } from "node:path";
|
|
3
|
+
|
|
4
|
+
// ../../apps/desktop/src/cli/argv.ts
|
|
5
|
+
function parseScoutArgv(argv) {
|
|
6
|
+
let command = null;
|
|
7
|
+
let helpRequested = false;
|
|
8
|
+
let versionRequested = false;
|
|
9
|
+
let outputMode = "plain";
|
|
10
|
+
const args = [];
|
|
11
|
+
for (const token of argv) {
|
|
12
|
+
if (token === "--json") {
|
|
13
|
+
outputMode = "json";
|
|
14
|
+
continue;
|
|
15
|
+
}
|
|
16
|
+
if (command === null && (token === "--help" || token === "-h" || token === "help")) {
|
|
17
|
+
helpRequested = true;
|
|
18
|
+
continue;
|
|
19
|
+
}
|
|
20
|
+
if (command === null && (token === "--version" || token === "-v" || token === "version")) {
|
|
21
|
+
versionRequested = true;
|
|
22
|
+
continue;
|
|
23
|
+
}
|
|
24
|
+
if (command === null) {
|
|
25
|
+
command = token;
|
|
26
|
+
continue;
|
|
27
|
+
}
|
|
28
|
+
args.push(token);
|
|
29
|
+
}
|
|
30
|
+
return {
|
|
31
|
+
command,
|
|
32
|
+
args,
|
|
33
|
+
helpRequested,
|
|
34
|
+
versionRequested,
|
|
35
|
+
outputMode
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
// ../../apps/desktop/src/cli/output.ts
|
|
40
|
+
function createScoutOutput(mode, stdout) {
|
|
41
|
+
return {
|
|
42
|
+
mode,
|
|
43
|
+
writeText(text) {
|
|
44
|
+
stdout(text);
|
|
45
|
+
},
|
|
46
|
+
writeValue(value, renderPlain) {
|
|
47
|
+
if (mode === "json") {
|
|
48
|
+
stdout(JSON.stringify(value, null, 2));
|
|
49
|
+
return;
|
|
50
|
+
}
|
|
51
|
+
stdout(renderPlain(value));
|
|
52
|
+
}
|
|
53
|
+
};
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
// ../../apps/desktop/src/cli/context.ts
|
|
57
|
+
function createScoutCommandContext(input = {}) {
|
|
58
|
+
const stdout = input.stdout ?? ((line) => console.log(line));
|
|
59
|
+
const stderr = input.stderr ?? ((line) => console.error(line));
|
|
60
|
+
return {
|
|
61
|
+
cwd: input.cwd ?? process.cwd(),
|
|
62
|
+
env: input.env ?? process.env,
|
|
63
|
+
stdout,
|
|
64
|
+
stderr,
|
|
65
|
+
output: createScoutOutput(input.outputMode ?? "plain", stdout),
|
|
66
|
+
isTty: input.isTty ?? Boolean(process.stdout.isTTY)
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
// ../../apps/desktop/src/cli/commands/chat.ts
|
|
71
|
+
import { createHash, randomUUID } from "node:crypto";
|
|
72
|
+
import { mkdir, readFile, writeFile, rename, chmod, rm } from "node:fs/promises";
|
|
73
|
+
import { homedir } from "node:os";
|
|
74
|
+
import { join } from "node:path";
|
|
75
|
+
function parseChatInvite(value) {
|
|
76
|
+
const url = new URL(value);
|
|
77
|
+
if (!["http:", "https:"].includes(url.protocol) || url.username || url.password)
|
|
78
|
+
throw new Error("Use an HTTP or HTTPS Scout invitation URL without embedded credentials.");
|
|
79
|
+
const match = url.pathname.match(/^\/invite\/([A-Za-z0-9_-]+)(?:\/(agent|api)\.md)?\/?$/);
|
|
80
|
+
if (!match)
|
|
81
|
+
throw new Error("Expected a Scout /invite/ link.");
|
|
82
|
+
return { origin: url.origin, token: match[1], polling: match[2] === "api" };
|
|
83
|
+
}
|
|
84
|
+
function currentChatSession(env) {
|
|
85
|
+
return env.GROK_SESSION_ID || env.CODEX_THREAD_ID || env.OPENSCOUT_CODEX_THREAD_ID || env.CLAUDE_CODE_SESSION_ID || env.CLAUDE_SESSION_ID || env.CLAUDE_CODE_REMOTE_SESSION_ID || env.OPENSCOUT_SESSION_ID;
|
|
86
|
+
}
|
|
87
|
+
function chatPath(room, resource) {
|
|
88
|
+
return `/api/channels/${encodeURIComponent(room.channelId)}/${resource}?space=${encodeURIComponent(room.space)}`;
|
|
89
|
+
}
|
|
90
|
+
async function chatRequest(origin, path, input = {}) {
|
|
91
|
+
let response;
|
|
92
|
+
try {
|
|
93
|
+
response = await (input.fetcher ?? fetch)(new URL(path, origin), {
|
|
94
|
+
method: input.body === undefined ? "GET" : "POST",
|
|
95
|
+
headers: { ...input.token ? { authorization: `Bearer ${input.token}` } : {}, ...input.body === undefined ? {} : { "content-type": "application/json" } },
|
|
96
|
+
body: input.body === undefined ? undefined : JSON.stringify(input.body),
|
|
97
|
+
redirect: "error",
|
|
98
|
+
signal: AbortSignal.timeout(30000)
|
|
99
|
+
});
|
|
100
|
+
} catch {
|
|
101
|
+
throw new Error("Chat connection failed or timed out. Retry the same operation; invitation and credential details are withheld.");
|
|
102
|
+
}
|
|
103
|
+
if (!response.ok) {
|
|
104
|
+
if (response.status === 409 && new URL(path, origin).pathname.endsWith("/poll")) {
|
|
105
|
+
const detail = await response.json().catch(() => null);
|
|
106
|
+
if (detail?.reason === "stale")
|
|
107
|
+
throw new Error("Chat history moved past the saved cursor. Read the room, then run watch --reset-cursor to replay retained history. Deduplicate by message id; older messages may be unavailable.");
|
|
108
|
+
}
|
|
109
|
+
const error = new Error(`Chat request failed (${response.status}). ${response.status === 401 ? "Your membership expired or was revoked; join again." : response.status === 410 ? "The invitation expired. Request a new invitation." : "No automatic mutation retry was attempted."}`);
|
|
110
|
+
throw error;
|
|
111
|
+
}
|
|
112
|
+
let data;
|
|
113
|
+
try {
|
|
114
|
+
data = await response.json();
|
|
115
|
+
} catch {
|
|
116
|
+
throw new Error("Chat returned invalid JSON. Response contents withheld to protect credentials.");
|
|
117
|
+
}
|
|
118
|
+
return { data, cookie: response.headers.get("set-cookie") };
|
|
119
|
+
}
|
|
120
|
+
function renderChatHelp(commandName = "scout chat") {
|
|
121
|
+
return `Scout Chat — join once, then participate in the same room.
|
|
122
|
+
|
|
123
|
+
${commandName} join <invite-url> [--name <name>] [--poll]
|
|
124
|
+
${commandName} read [--channel <id>]
|
|
125
|
+
${commandName} say "Hello" [--request-id <id>]
|
|
126
|
+
${commandName} reply <message-id> "My reply" [--request-id <id>]
|
|
127
|
+
${commandName} watch [--for 10m] [--once] [--compact] [--reset-cursor] [--channel <id>]
|
|
128
|
+
${commandName} status
|
|
129
|
+
|
|
130
|
+
Every invitation joins through the room HTTP API. No local broker, profile,
|
|
131
|
+
daemon, or session registration is needed. Read replies with read or watch;
|
|
132
|
+
joining does not enable automatic wake-up or broker-dispatched work.
|
|
133
|
+
Credentials and selected room are stored privately per working directory and
|
|
134
|
+
session. --channel selects a previously joined room. --json emits structured
|
|
135
|
+
results and never prints credentials. Watch only reads; it executes no tasks.
|
|
136
|
+
For a short listen, run ${commandName} watch --once --compact --for 30s --json. It waits in the
|
|
137
|
+
foreground until messages arrive or the timeout expires, then exits. --once skips
|
|
138
|
+
your own messages; --compact keeps only fields needed to read and reply. Answer relevant messages
|
|
139
|
+
with reply; ignore your own messages. Run watch again to resume from its saved
|
|
140
|
+
cursor. If history has expired, read the room, then explicitly use watch
|
|
141
|
+
--reset-cursor to replay retained history. Deduplicate by message id.
|
|
142
|
+
Listening does not itself generate replies.
|
|
143
|
+
Use the same --request-id to retry a send whose outcome was uncertain.`;
|
|
144
|
+
}
|
|
145
|
+
async function runChatCommand(context, args, commandName = "scout chat") {
|
|
146
|
+
if (!args.length || args.includes("--help") || args.includes("-h")) {
|
|
147
|
+
context.output.writeText(renderChatHelp(commandName));
|
|
148
|
+
return;
|
|
149
|
+
}
|
|
150
|
+
const positional = [];
|
|
151
|
+
const flags = {};
|
|
152
|
+
for (let i = 0;i < args.length; i++) {
|
|
153
|
+
const arg = args[i];
|
|
154
|
+
if (["--poll", "--once", "--compact", "--reset-cursor"].includes(arg))
|
|
155
|
+
flags[arg.slice(2)] = "true";
|
|
156
|
+
else if (["--name", "--channel", "--request-id", "--for"].includes(arg)) {
|
|
157
|
+
const value = args[++i];
|
|
158
|
+
if (!value || value.startsWith("--"))
|
|
159
|
+
throw new Error(`Missing value for ${arg}`);
|
|
160
|
+
flags[arg.slice(2)] = value;
|
|
161
|
+
} else if (arg.startsWith("--"))
|
|
162
|
+
throw new Error(`Unknown chat option: ${arg}`);
|
|
163
|
+
else
|
|
164
|
+
positional.push(arg);
|
|
165
|
+
}
|
|
166
|
+
const [command, ...values] = positional;
|
|
167
|
+
const scope = createHash("sha256").update(`${context.cwd}
|
|
168
|
+
${currentChatSession(context.env) ?? "shell"}`).digest("hex");
|
|
169
|
+
const directory = join(context.env.OPENSCOUT_CHAT_HOME ?? join(homedir(), ".openscout", "chat"), scope);
|
|
170
|
+
await mkdir(directory, { recursive: true, mode: 448 });
|
|
171
|
+
await chmod(directory, 448);
|
|
172
|
+
const file = join(directory, "membership.json");
|
|
173
|
+
let state;
|
|
174
|
+
try {
|
|
175
|
+
state = JSON.parse(await readFile(file, "utf8"));
|
|
176
|
+
} catch (error) {
|
|
177
|
+
if (error.code !== "ENOENT")
|
|
178
|
+
throw error;
|
|
179
|
+
state = { rooms: {}, attempts: {} };
|
|
180
|
+
}
|
|
181
|
+
const save = async () => {
|
|
182
|
+
const temporary = `${file}.${randomUUID()}`;
|
|
183
|
+
await writeFile(temporary, JSON.stringify(state), { mode: 384 });
|
|
184
|
+
await rename(temporary, file);
|
|
185
|
+
};
|
|
186
|
+
if (command === "join") {
|
|
187
|
+
if (values.length !== 1)
|
|
188
|
+
throw new Error(`Usage: ${commandName} join <invite-url>`);
|
|
189
|
+
const invite = parseChatInvite(values[0]);
|
|
190
|
+
const attempt = createHash("sha256").update(`${invite.origin}/${invite.token}`).digest("hex");
|
|
191
|
+
state.attempts[attempt] ??= randomUUID();
|
|
192
|
+
await save();
|
|
193
|
+
const { data, cookie } = await chatRequest(invite.origin, `/api/invites/${invite.token}/participate`, {
|
|
194
|
+
body: { participantKey: state.attempts[attempt], displayName: flags.name ?? "Scout CLI agent" }
|
|
195
|
+
});
|
|
196
|
+
const token = data.credential?.token ?? cookie?.match(/(?:^|;\s*)openscout_member=([^;]+)/)?.[1];
|
|
197
|
+
if (!data.ok || !data.conversationId || !token)
|
|
198
|
+
throw new Error("Join response did not confirm membership and credentials. Retry the same invitation; do not create another identity.");
|
|
199
|
+
const room2 = { origin: invite.origin, channelId: data.conversationId, title: data.channelTitle ?? "channel", space: data.space?.slug ?? "home", token, actorId: data.actorId };
|
|
200
|
+
const key = `${room2.origin}/${room2.channelId}`;
|
|
201
|
+
state.rooms[key] = room2;
|
|
202
|
+
state.active = key;
|
|
203
|
+
await save();
|
|
204
|
+
context.output.writeValue({ joined: true, channelId: room2.channelId, title: room2.title, space: room2.space, mode: "polling", attached: false }, (r) => `Joined ${r.space} / #${r.title}.
|
|
205
|
+
Next: ${commandName} say "Hello!"
|
|
206
|
+
To listen: ${commandName} watch --once --compact --for 30s --json
|
|
207
|
+
Watch returns message records with IDs. Reply with ${commandName} reply <message-id> "Your reply". Repeat watch while participating; it resumes from the saved cursor. No background service is started.`);
|
|
208
|
+
return;
|
|
209
|
+
}
|
|
210
|
+
const matching = flags.channel ? Object.values(state.rooms).filter((r) => r.channelId === flags.channel) : [state.rooms[state.active ?? ""]].filter(Boolean);
|
|
211
|
+
if (matching.length !== 1)
|
|
212
|
+
throw new Error("Join a room first, or select one unambiguous joined room with --channel.");
|
|
213
|
+
const room = matching[0];
|
|
214
|
+
if (command === "status") {
|
|
215
|
+
context.output.writeValue({ channelId: room.channelId, title: room.title, space: room.space, mode: room.sessionId ? "session" : "polling" }, (r) => `${r.space} / #${r.title} — ${r.mode}`);
|
|
216
|
+
return;
|
|
217
|
+
}
|
|
218
|
+
if (command === "read") {
|
|
219
|
+
const { data } = await chatRequest(room.origin, chatPath(room, "feed"), { token: room.token });
|
|
220
|
+
context.output.writeValue(data, (d) => JSON.stringify(d, null, 2));
|
|
221
|
+
return;
|
|
222
|
+
}
|
|
223
|
+
if (command === "say" || command === "reply") {
|
|
224
|
+
const replyToMessageId = command === "reply" ? values.shift() : undefined;
|
|
225
|
+
const body = values.join(" ").trim();
|
|
226
|
+
if (!body || command === "reply" && !replyToMessageId)
|
|
227
|
+
throw new Error("Provide message text and, for reply, the parent message id.");
|
|
228
|
+
const requestId = flags["request-id"] ?? randomUUID();
|
|
229
|
+
try {
|
|
230
|
+
const { data } = await chatRequest(room.origin, chatPath(room, "messages"), { token: room.token, body: { requestId, body, ...replyToMessageId ? { replyToMessageId } : {} } });
|
|
231
|
+
context.output.writeValue({ ...data, requestId }, (d) => `Posted ${d.message?.id ?? "message"}.
|
|
232
|
+
To listen for replies: ${commandName} watch --once --compact --for 30s --json
|
|
233
|
+
After watch returns, answer relevant messages with ${commandName} reply <message-id> "Your reply". Ignore your own messages. Repeat watch for the agreed participation period.`);
|
|
234
|
+
} catch (error) {
|
|
235
|
+
throw new Error(`${error.message} Retry with --request-id ${requestId} to avoid duplicates.`);
|
|
236
|
+
}
|
|
237
|
+
return;
|
|
238
|
+
}
|
|
239
|
+
if (command === "watch") {
|
|
240
|
+
const duration = flags.for ?? "10m";
|
|
241
|
+
const match = duration.match(/^(\d+)(s|m)$/);
|
|
242
|
+
const milliseconds = match ? Number(match[1]) * (match[2] === "m" ? 60000 : 1000) : 0;
|
|
243
|
+
if (milliseconds < 1000 || milliseconds > 3600000)
|
|
244
|
+
throw new Error("Watch duration must be between 1s and 60m.");
|
|
245
|
+
const cursorFile = join(directory, `cursor-${createHash("sha256").update(`${room.origin}/${room.channelId}`).digest("hex")}.json`);
|
|
246
|
+
if (flags["reset-cursor"]) {
|
|
247
|
+
await rm(cursorFile, { force: true });
|
|
248
|
+
room.cursor = null;
|
|
249
|
+
}
|
|
250
|
+
try {
|
|
251
|
+
room.cursor = JSON.parse(await readFile(cursorFile, "utf8")).cursor;
|
|
252
|
+
} catch (error) {
|
|
253
|
+
if (error.code !== "ENOENT")
|
|
254
|
+
throw error;
|
|
255
|
+
}
|
|
256
|
+
const deadline = Date.now() + milliseconds;
|
|
257
|
+
while (Date.now() < deadline) {
|
|
258
|
+
const path = chatPath(room, "poll") + (room.cursor ? `&cursor=${encodeURIComponent(room.cursor)}` : "");
|
|
259
|
+
const { data } = await chatRequest(room.origin, path, { token: room.token });
|
|
260
|
+
const messages = (data.messages ?? []).filter((event) => !flags.once || event.actorId !== room.actorId);
|
|
261
|
+
for (const event of messages)
|
|
262
|
+
context.stdout(JSON.stringify(flags.compact ? { id: event.id, actorId: event.actorId, actorName: event.actorName, body: event.body, replyToMessageId: event.replyToMessageId } : event));
|
|
263
|
+
room.cursor = data.nextCursor;
|
|
264
|
+
const temporaryCursor = `${cursorFile}.${randomUUID()}`;
|
|
265
|
+
await writeFile(temporaryCursor, JSON.stringify({ cursor: room.cursor }), { mode: 384 });
|
|
266
|
+
await rename(temporaryCursor, cursorFile);
|
|
267
|
+
if (flags.once && messages.length)
|
|
268
|
+
return;
|
|
269
|
+
const delay = data.hasMore ? 0 : Math.max(1000, Math.min(30000, Number(data.recommendedPollIntervalMs) || 3000));
|
|
270
|
+
await new Promise((resolve) => setTimeout(resolve, Math.min(delay, Math.max(0, deadline - Date.now()))));
|
|
271
|
+
}
|
|
272
|
+
return;
|
|
273
|
+
}
|
|
274
|
+
throw new Error(`Unknown chat command: ${command}. Use ${commandName} --help.`);
|
|
275
|
+
}
|
|
276
|
+
|
|
277
|
+
// src/chat-main.ts
|
|
278
|
+
var standaloneAlias = basename(process.argv[1] ?? "") === "scout-chat";
|
|
279
|
+
var input = parseScoutArgv([...standaloneAlias ? ["chat"] : [], ...process.argv.slice(2)]);
|
|
280
|
+
try {
|
|
281
|
+
await runChatCommand(createScoutCommandContext({ outputMode: input.outputMode }), input.args, standaloneAlias ? "scout-chat" : "scout chat");
|
|
282
|
+
} catch (error) {
|
|
283
|
+
console.error(error instanceof Error ? error.message : "Chat command failed.");
|
|
284
|
+
process.exitCode = 1;
|
|
285
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{r as t,j as s}from"./index-DReVb7jZ.js";import{p as Y,a as J}from"./api-DSqpVKC7.js";import{c as k}from"./clipboard-e3fSpeo7.js";import{u as Q}from"./sse-A8AyLH0g.js";import{a as Z}from"./colors-CFlbwC25.js";import{m as ss,a as es}from"./machine-scope-DJt9RZ2w.js";import{d as as}from"./router-C-MF5-mb.js";import{r as B}from"./mentions-Ck_Vjnyp.js";import{t as I,b as U}from"./time-Dhsh_2EG.js";import{u as ts,a as ns}from"./Provider-CNZluAZb.js";import{E as C}from"./EmptyState-CYUwYyAW.js";/* empty css */import"./index-BWHgHrtv.js";import"./agent-state-DDhnFEEP.js";import"./synthetic-agent-routing-aduMYO7P.js";import"./terminal-sessions-3RfJpen8.js";import"./index-CbqBwfIW.js";import"./AgentDetailCard-MIEBKw_S.js";import"./AgentLiveActions-6Kfr1uOT.js";import"./terminal-takeover-CZZsnPzj.js";import"./openContent-C6XO6kr5.js";import"./eye-CsGfEVR6.js";import"./createLucideIcon-ChvMq-zl.js";import"./terminal-DMZjX1es.js";import"./provider-DwmCoSlc.js";import"./surface-activity-B1rgWB1i.js";import"./scoutbot-Bk3nyrkj.js";import"./NewChatComposer-BEXS8vV6.js";import"./runtime-picker-C_AVYF63.js";import"./scout-voice-CqAyfblr.js";import"./fx-z37u1o2z.js";import"./voice-levels-Dcr3jglk.js";import"./loader-circle-DNUsuPWz.js";import"./conversation-model-m8HhzroS.js";import"./conversations-Cbg9h_Af.js";import"./HarnessMark-DSvM_H7H.js";import"./NewChatOrigin-C8ROO4ps.js";import"./keyboard-nav-CJXPaHXj.js";import"./x-rlMdRqJF.js";import"./chevron-down-CDzRQQGl.js";import"./search-UsM-9-_W.js";import"./file-text-DP6txVW-.js";import"./model-CBkMvT1w.js";import"./DocumentFocusViewer-DlMiEALb.js";import"./TextDocumentSurface-BK6Qy41F.js";import"./index-kkXUq-zf.js";import"./chevron-right-DKGTLiqc.js";import"./folder-B_S7gBVr.js";import"./chevron-up-DX7R6KY2.js";import"./code-xml-Cmadr3pQ.js";import"./arrow-left-DFfKAq0d.js";import"./arrow-right-DmAWnyAH.js";import"./chunk-HRAB3GC3-Dvk_QpRq.js";const is=3e4,ls={"agent.registered":"registered","agent.online":"came online","agent.offline":"went offline","flight.started":"started task","message.sent":"sent message","message.received":"received message","collaboration.ask":"asked a question","collaboration.answer":"answered",ask_sent:"sent a request",ask_working:"working",flight_created:"started task",message_sent:"sent",message_received:"received"},rs=new Set(["ask_failed","ask_replied","flight.completed","flight.updated","flight_updated"]),os={presence:{label:"Presence",tone:"notice"},work:{label:"Execution",tone:"working"},message:{label:"Delivery",tone:"completed"},collaboration:{label:"Coordination",tone:"working"},system:{label:"System",tone:"notice"}};function q(a){return ls[a]??a.replace(/[._]/g," ")}function cs(a){return a.startsWith("agent.")||a.includes("registered")||a.includes("online")||a.includes("offline")?"presence":a.startsWith("flight")||a.startsWith("ask_")?"work":a.startsWith("message")?"message":a.startsWith("collaboration")?"collaboration":"system"}function ds(a){return(a??"system").charAt(0).toUpperCase()}function p(a){return a.length<=14?a:`${a.slice(0,8)}...${a.slice(-4)}`}function ps(a){if(!a)return null;const u=a.split("/").filter(Boolean);return u[u.length-1]??a}function us(a){return`${a.actorName??"system"} ${q(a.kind)}`}function hs(a){return a.workspaceRoot?`Recorded from ${a.workspaceRoot}.`:a.conversationId?`Linked to thread ${p(a.conversationId)}.`:"No additional detail was captured for this event."}function he({navigate:a}){const{agents:u,route:z}=ts(),[w]=t.useState(()=>Y("/api/activity",is)),[g,F]=t.useState(w??[]),[x,S]=t.useState(null),[y,R]=t.useState(w===null),[_,T]=t.useState(!1),[h,E]=t.useState(null),[N,G]=t.useState(null),$=t.useRef(w??[]),b=t.useRef(0),f=t.useRef(null),K=ns(),L=as(z),D=t.useMemo(()=>ss(u,L),[u,L]),i=t.useMemo(()=>es(g,D).filter(e=>!rs.has(e.kind)),[g,D]);t.useEffect(()=>{$.current=g},[g]),t.useEffect(()=>{x&&!i.some(e=>e.id===x)&&S(null)},[x,i]);const m=t.useCallback(async(e="initial")=>{const l=++b.current;!($.current.length>0)&&e!=="background"?(R(!0),E(null)):T(!0);try{const o=await J("/api/activity");if(l!==b.current)return;F(o),E(null),G(Date.now()),S(v=>o.some(A=>A.id===v)?v:null)}catch(o){if(l!==b.current)return;E(o instanceof Error?o.message:String(o))}finally{l===b.current&&(R(!1),T(!1))}},[]),P=t.useCallback(()=>{f.current||(f.current=setTimeout(()=>{f.current=null,m("background")},250))},[m]);t.useEffect(()=>(m("initial"),()=>{f.current&&clearTimeout(f.current)}),[m]),Q(P);const H=t.useMemo(()=>{const e=new Set(i.map(c=>c.actorName??"system")),l=new Set(i.map(c=>c.conversationId).filter(c=>!!c));return[{label:"Events",value:`${i.length}`,detail:i.length>0?`Latest ${I(i[0].ts)}`:"Waiting for records"},{label:"Actors",value:`${e.size}`,detail:e.size>0?"Distinct event owners":"No actors yet"},{label:"Threads",value:`${l.size}`,detail:l.size>0?"Conversation-linked records":"No linked threads"}]},[i]),V=!y&&i.length===0&&!!h,X=!y&&i.length===0&&!h;return s.jsxs("div",{className:"sys-surface-page",children:[s.jsxs("div",{className:"sys-page-head",children:[s.jsxs("div",{className:"sys-page-title-group",children:[s.jsx("h2",{className:"sys-page-title",children:"Activity Log"}),s.jsx("p",{className:"sys-page-subtitle",children:"Broker events, task execution, and collaboration handoffs."})]}),s.jsxs("div",{className:"sys-page-actions",children:[s.jsx("div",{className:"sys-sync-note",children:y?"Loading audit ledger...":h&&i.length>0?`Showing last confirmed snapshot from ${N?I(N):"earlier"}`:N?`Updated ${I(N)}`:"Waiting for first snapshot"}),s.jsx("button",{type:"button",className:"s-btn",disabled:y||_,onClick:()=>{m("manual")},children:_?"Refreshing...":"Refresh"})]})]}),s.jsx("div",{className:"sys-stat-grid",children:H.map(e=>s.jsxs("div",{className:"sys-stat-card",children:[s.jsx("span",{className:"sys-stat-label",children:e.label}),s.jsx("strong",{className:"sys-stat-value",children:e.value}),s.jsx("span",{className:"sys-stat-detail",children:e.detail})]},e.label))}),h&&i.length>0&&s.jsxs("div",{className:"sys-banner sys-banner-warning",children:[s.jsx("strong",{children:"Refresh failed."}),s.jsx("span",{children:h})]}),y&&i.length===0&&s.jsx(C,{title:"Loading activity",body:"Pulling the latest records from the broker database."}),V&&s.jsx(C,{className:"sys-state-card-error",title:"Activity is unavailable",body:h,action:s.jsx("button",{type:"button",className:"s-btn",onClick:()=>{m("manual")},children:"Try again"})}),X&&s.jsx(C,{title:"No activity yet",body:"Events appear here after agents register, send messages, or advance work."}),i.length>0&&s.jsx("div",{className:"sys-audit-list",children:i.map(e=>{const l=x===e.id,c=cs(e.kind),o=os[c],v=ps(e.workspaceRoot),A=e.summary&&e.summary!==e.title?e.summary:hs(e),r=[];if(e.conversationId&&r.push({key:"thread",label:"Thread",title:`Open thread ${p(e.conversationId)}`,route:{view:"conversation",conversationId:e.conversationId}}),e.recordId&&r.push({key:"work",label:"Work",title:"Open work item",route:{view:"work",workId:e.recordId}}),e.agentId){const n=e.agentName??"Agent";r.push({key:"agent",label:n,title:`Open agent ${n}`,route:{view:"agents-v2",agentId:e.agentId}})}e.sessionId&&r.push({key:"session",label:"Session",title:"Open session",route:{view:"sessions",sessionId:e.sessionId}}),(e.flightId||e.invocationId)&&r.push({key:"follow",label:"Follow",title:"Follow live execution",route:{view:"follow",...e.flightId?{flightId:e.flightId}:{},...e.invocationId?{invocationId:e.invocationId}:{},...e.conversationId?{conversationId:e.conversationId}:{}}});const M=()=>S(l?null:e.id);return s.jsxs("article",{className:`sys-audit-entry${l?" sys-audit-entry-expanded":""}`,onContextMenu:n=>{const j=window.getSelection()?.toString().trim(),d=[];j&&(d.push({kind:"action",label:"Copy Selection",shortcut:"⌘C",onSelect:()=>{k(j)}}),d.push({kind:"separator"}));const W=e.title??e.summary??"";if(W&&d.push({kind:"action",label:"Copy Details",onSelect:()=>{k(W)}}),e.actorName&&d.push({kind:"action",label:"Copy Actor",onSelect:()=>{k(e.actorName)}}),d.push({kind:"action",label:"Copy Event ID",onSelect:()=>{k(e.id)}}),r.length>0){d.push({kind:"separator"});for(const O of r)d.push({kind:"action",label:`Open ${O.label}`,onSelect:()=>a(O.route)})}K(n,d)},children:[s.jsxs("div",{className:"sys-audit-toggle",role:"button",tabIndex:0,"aria-expanded":l,onClick:M,onKeyDown:n=>{(n.key==="Enter"||n.key===" ")&&(n.preventDefault(),M())},children:[s.jsxs("div",{className:"sys-audit-stamp",children:[s.jsx("span",{className:"sys-audit-time",children:I(e.ts)}),s.jsx("span",{className:"sys-audit-date",children:U(e.ts)})]}),s.jsx("div",{className:`sys-audit-marker sys-audit-marker-${o.tone}`,children:s.jsx("span",{})}),s.jsxs("div",{className:"sys-audit-body",children:[s.jsxs("div",{className:"sys-audit-topline",children:[s.jsx("span",{className:"sys-audit-category",children:o.label}),s.jsx("span",{className:"sys-audit-kind",children:q(e.kind)})]}),s.jsx("h3",{className:"sys-audit-title",children:B(e.title??us(e))}),s.jsx("p",{className:"sys-audit-summary",children:B(A)}),s.jsxs("div",{className:"sys-audit-meta",children:[s.jsxs("span",{className:"sys-audit-meta-item",children:[s.jsx("span",{className:"sys-audit-avatar",style:{background:Z(e.actorName??"system")},children:ds(e.actorName)}),e.actorName??"system"]}),v&&s.jsxs("span",{className:"sys-audit-meta-item",children:["Workspace ",v]})]}),r.length>0&&s.jsxs("div",{className:"sys-audit-jumps",children:[s.jsx("span",{className:"sys-audit-jumps-label",children:"Open"}),r.map(n=>s.jsx("button",{type:"button",className:"sys-audit-jump",title:n.title,onClick:j=>{j.stopPropagation(),a(n.route)},children:n.label},n.key))]})]}),s.jsx("div",{className:"sys-audit-expand",children:l?"Close":"Details"})]}),l&&s.jsxs("div",{className:"sys-audit-details",children:[s.jsxs("div",{className:"sys-detail-grid",children:[s.jsxs("div",{className:"sys-detail-card",children:[s.jsx("span",{className:"sys-detail-label",children:"Event"}),s.jsx("code",{className:"sys-detail-value",children:e.kind})]}),s.jsxs("div",{className:"sys-detail-card",children:[s.jsx("span",{className:"sys-detail-label",children:"Recorded"}),s.jsx("span",{className:"sys-detail-value",children:U(e.ts)})]}),s.jsxs("div",{className:"sys-detail-card",children:[s.jsx("span",{className:"sys-detail-label",children:"Actor"}),s.jsx("span",{className:"sys-detail-value",children:e.actorName??"system"})]}),e.agentName&&s.jsxs("div",{className:"sys-detail-card",children:[s.jsx("span",{className:"sys-detail-label",children:"Agent"}),s.jsx("span",{className:"sys-detail-value",children:e.agentName})]}),s.jsxs("div",{className:"sys-detail-card",children:[s.jsx("span",{className:"sys-detail-label",children:"Workspace"}),s.jsx("span",{className:"sys-detail-value",children:e.workspaceRoot??"Not attached"})]}),s.jsxs("div",{className:"sys-detail-card",children:[s.jsx("span",{className:"sys-detail-label",children:"Thread"}),s.jsx("span",{className:"sys-detail-value",children:e.conversationId?p(e.conversationId):"Not attached"})]}),e.recordId&&s.jsxs("div",{className:"sys-detail-card",children:[s.jsx("span",{className:"sys-detail-label",children:"Work"}),s.jsx("span",{className:"sys-detail-value",children:p(e.recordId)})]}),e.sessionId&&s.jsxs("div",{className:"sys-detail-card",children:[s.jsx("span",{className:"sys-detail-label",children:"Session"}),s.jsx("span",{className:"sys-detail-value",children:p(e.sessionId)})]}),e.flightId&&s.jsxs("div",{className:"sys-detail-card",children:[s.jsx("span",{className:"sys-detail-label",children:"Flight"}),s.jsx("span",{className:"sys-detail-value",children:p(e.flightId)})]}),e.invocationId&&s.jsxs("div",{className:"sys-detail-card",children:[s.jsx("span",{className:"sys-detail-label",children:"Invocation"}),s.jsx("span",{className:"sys-detail-value",children:p(e.invocationId)})]}),s.jsxs("div",{className:"sys-detail-card",children:[s.jsx("span",{className:"sys-detail-label",children:"Record id"}),s.jsx("code",{className:"sys-detail-value",children:e.id})]})]}),r.length>0&&s.jsx("div",{className:"sys-inline-actions",children:r.map(n=>s.jsxs("button",{type:"button",className:"s-btn s-btn-sm",onClick:()=>a(n.route),children:["Open ",n.label]},n.key))})]})]},e.id)})})]})}export{he as ActivityScreen};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{r as n,j as o}from"./index-
|
|
1
|
+
import{r as n,j as o}from"./index-DReVb7jZ.js";import{a as y}from"./api-DSqpVKC7.js";import{c as j}from"./createLucideIcon-ChvMq-zl.js";const m=[["path",{d:"M12 10v6",key:"1bos4e"}],["path",{d:"M9 13h6",key:"1uhe8q"}],["path",{d:"M20 20a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2h-7.9a2 2 0 0 1-1.69-.9L9.6 3.9A2 2 0 0 0 7.93 3H4a2 2 0 0 0-2 2v13a2 2 0 0 0 2 2Z",key:"1kt360"}]],f=j("folder-plus",m);function h({onClose:p}){const[d,l]=n.useState(""),[r,c]=n.useState(!1),[i,a]=n.useState(null),u=async()=>{const e=d.trim();if(!(!e||r)){c(!0),a(null);try{const t=await y("/api/projects/add",{method:"POST",body:JSON.stringify({root:e})}),s=t.projects[0]?.title??null;t.alreadyRegistered?a({text:s?`/${s} is already registered`:"Already registered",tone:"ok"}):s?(a({text:`Registered /${s}`,tone:"ok"}),l("")):a({text:"Root added, but no project found there yet",tone:"error"})}catch(t){a({text:t instanceof Error?t.message:String(t),tone:"error"})}finally{c(!1)}}};return o.jsxs("div",{className:"pi-addProject",children:[o.jsxs("div",{className:"pi-addProjectBox","data-busy":r||void 0,children:[o.jsx(f,{size:13,strokeWidth:1.8,"aria-hidden":!0}),o.jsx("input",{className:"pi-addProjectInput",type:"text",value:d,placeholder:"~/dev/my-project","aria-label":"Project folder path",autoFocus:!0,disabled:r,spellCheck:!1,onChange:e=>l(e.currentTarget.value),onKeyDown:e=>{e.key==="Enter"&&u(),e.key==="Escape"&&p()}}),o.jsx("button",{type:"button",className:"pi-addProjectSubmit",disabled:r||!d.trim(),onClick:()=>{u()},children:r?"Adding...":"Add"})]}),i?o.jsx("div",{className:"pi-addProjectNote","data-tone":i.tone,role:"status",children:i.text}):null]})}const k=Object.freeze(Object.defineProperty({__proto__:null,AddProjectForm:h},Symbol.toStringTag,{value:"Module"}));export{h as A,f as F,k as a};
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import{j as e}from"./index-DReVb7jZ.js";import{u as E}from"./Provider-CNZluAZb.js";import{a as M,c as P,d as O}from"./adventure-playback-DTfkhIc0.js";import{b as W}from"./agent-lane-detail-Ti3trpfH.js";/* empty css */import{B as L}from"./book-open-BL9qvhEI.js";import{c as S}from"./createLucideIcon-ChvMq-zl.js";import{A as R}from"./arrow-up-right-B0aLKiyF.js";const T=[["path",{d:"M14 2v6a2 2 0 0 0 .245.96l5.51 10.08A2 2 0 0 1 18 22H6a2 2 0 0 1-1.755-2.96l5.51-10.08A2 2 0 0 0 10 8V2",key:"18mbvz"}],["path",{d:"M6.453 15h11.094",key:"3shlmq"}],["path",{d:"M8.5 2h7",key:"csnxdl"}]],B=S("flask-conical",T);const F=[["path",{d:"m15 12-9.373 9.373a1 1 0 0 1-3.001-3L12 9",key:"1hayfq"}],["path",{d:"m18 15 4-4",key:"16gjal"}],["path",{d:"m21.5 11.5-1.914-1.914A2 2 0 0 1 19 8.172v-.344a2 2 0 0 0-.586-1.414l-1.657-1.657A6 6 0 0 0 12.516 3H9l1.243 1.243A6 6 0 0 1 12 8.485V10l2 2h1.172a2 2 0 0 1 1.414.586L18.5 14.5",key:"15ts47"}]],H=S("hammer",F);function b(i){const o=[];for(const t of i.split("/"))!t||t==="."||(t===".."&&o.length&&o.at(-1)!==".."?o.pop():(t!==".."||!i.startsWith("/"))&&o.push(t));return`${i.startsWith("/")?"/":""}${o.join("/")}`}function y(i){return i.length<1024&&!/[\n\r\0*?<>|;$`]/.test(i)&&!i.startsWith("-")&&/(?:\/|\.[a-zA-Z0-9]{1,12}$)/.test(i)&&!/^\w+:\/\//.test(i)}function V(i){const o=i?.trim()??"";try{const t=JSON.parse(o);if(t&&typeof t=="object"&&!Array.isArray(t)){const m=[t.path,t.file_path,t.filePath,t.filename].filter(s=>typeof s=="string"&&y(s)),r=t.cmd??t.command;return{paths:m,command:typeof r=="string"?r:Array.isArray(r)?r.filter(s=>typeof s=="string").join(" "):""}}}catch{}return{paths:y(o)&&!/\s/.test(o)?[o]:[],command:o}}function Z(i){const o=[];let t="";const m=i.split(`
|
|
2
|
+
`).filter(r=>{if(t)return r.trim()===t&&(t=""),!1;const s=/<<-?\s*['"]?([A-Za-z_][\w]*)['"]?/.exec(r);return s&&(t=s[1]),!0}).join(`
|
|
3
|
+
`);for(const[r,...s]of O(m)){const u=r.split("/").at(-1)??"";if(!["cat","head","tail","sed","rg","grep"].includes(u)||u==="sed"&&s.some(d=>/^-i|^--in-place/.test(d)))continue;const c=u==="rg"||u==="grep";let p=!1,n=!0;const l=[];for(let d=0;d<s.length;d++){const h=s[d];if(n&&h==="--"){n=!1;continue}if(n&&h.startsWith("-")){if(h==="--files"){p=!0;continue}if(["-e","--regexp","-f","--file"].includes(h)){p=!0,d++;continue}if(/^-[ef].+/.test(h)||/^--(?:regexp|file)=/.test(h)){p=!0;continue}(["-n","-c"].includes(h)&&!c&&u!=="sed"||["--max-count","-m","--glob","-g","--type","-t","--encoding","--context","-A","-B","-C","--include","--exclude","--exclude-dir","--iglob","--max-depth"].includes(h))&&d++;continue}if((c||u==="sed")&&!p){p=!0;continue}if([">",">>","<","2>"].includes(h))break;l.push(h)}for(const d of l)(y(d)||c&&/^[A-Za-z0-9_./-]+$/.test(d))&&o.push({path:d,search:c})}return o}function q(i,o,t){const m=new Map,r=new Map,s=[],u=new Set,c=t.facts?.cwd||W(t).cwd||"",p=Number.isFinite(o)?Math.min(Math.floor(o),i.length-1):-1;for(const n of i.slice(0,Math.max(0,p+1))){if(u.has(n.event.id))continue;u.add(n.event.id);const l=n.event;if(l.kind!=="tool")continue;const d=V(l.arg),h=l.tool?.toLowerCase()??"",x=M(n),N=x!==null,w=!!l.diff||/(?:edit|write|apply_patch|str_replace)/.test(h),z=/(?:read|search|find|view|open)/.test(h),A=new Set(!N&&(z||w)?d.paths:[]);if(w)for(const a of`${l.arg??""}
|
|
4
|
+
${l.diff?.preview??""}`.matchAll(/^(?:\*\*\* (?:Update|Add|Delete) File: |(?:\+\+\+|---) [ab]\/)(.+)$/gm))y(a[1])&&A.add(a[1]);const k=new Set;if(x)for(const a of Z(x))A.add(a.path),a.search&&k.add(a.path);const C=w?r:m;for(const a of A){const f=k.has(a),j=f?null:a.startsWith("/")?b(a):c.startsWith("/")?b(`${c}/${a}`):null,g=j??b(a),v=C.get(g);v?v.observations++:C.set(g,{path:b(a),resolvedPath:j,observations:1,clue:f?"Search scope":l.tool||n.label})}if(x!==null&&P(x)){const a=l.result,f=a?.exit_code??a?.exitCode,j=typeof f=="number"?f:typeof f=="string"&&/^-?\d+$/.test(f)?Number(f):void 0,g=l.text==="Command completed"?`Observed command completion · ${Object.entries(a??{}).map(([$,_])=>`${$}: ${_}`).join(" · ")||"Exit unavailable"}`:a?Object.entries(a).map(([$,_])=>`${$}: ${_}`).join(" · "):l.stream?.join(`
|
|
5
|
+
`)||"Result unavailable in these observations",v=j;s.push({id:n.id,command:x,outcome:v===void 0?"unavailable":v===0?"passed":"failed",clue:g})}}return{read:[...m.values()],changed:[...r.values()],runs:s}}function I({stops:i,index:o,lane:t,onFile:m}){const{openFilePreview:r}=E(),s=q(i,o,t),u=(c,p)=>c.length?e.jsx("ul",{children:c.map(n=>e.jsxs("li",{children:[n.resolvedPath?e.jsxs("button",{type:"button",title:n.path,onClick:()=>(m??r)(n.resolvedPath),children:[e.jsx("span",{children:n.path}),e.jsx(R,{size:12})]}):e.jsx("code",{children:n.path}),e.jsxs("small",{children:[n.clue,n.observations>1?` · ${n.observations} observations`:""]})]},n.resolvedPath??n.path))}):e.jsx("p",{children:p});return e.jsxs("aside",{className:"adventure-evidence","aria-label":"Evidence collected through playhead",children:[e.jsxs("header",{children:[e.jsx("strong",{children:"Collected along the way"}),e.jsx("small",{children:"Through this observation · file previews show current contents"})]}),e.jsxs("div",{className:"adventure-evidence__shelves",children:[e.jsxs("section",{children:[e.jsxs("h3",{children:[e.jsx(L,{size:16}),"Explored ",e.jsx("span",{children:s.read.length})]}),u(s.read,"No file paths observed yet.")]}),e.jsxs("section",{children:[e.jsxs("h3",{children:[e.jsx(H,{size:16}),"Changed ",e.jsx("span",{children:s.changed.length})]}),u(s.changed,"No changed paths observed yet.")]}),e.jsxs("section",{children:[e.jsxs("h3",{children:[e.jsx(B,{size:16}),"Validation ",e.jsx("span",{children:s.runs.length})]}),s.runs.length?e.jsx("ul",{children:s.runs.map(c=>e.jsxs("li",{children:[e.jsx("code",{children:c.command}),e.jsx("span",{className:`adventure-evidence__outcome is-${c.outcome}`,children:c.outcome==="passed"?"Exited successfully":c.outcome==="failed"?"Exited with error":"Result unavailable"}),e.jsxs("details",{children:[e.jsx("summary",{children:"Trace clue"}),e.jsx("pre",{children:c.clue})]})]},c.id))}):e.jsx("p",{children:"No validation command observed yet."})]})]})]})}const ee=Object.freeze(Object.defineProperty({__proto__:null,AdventureEvidence:I},Symbol.toStringTag,{value:"Module"}));export{I as A,H,ee as a};
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import{r as d,j as e}from"./index-DReVb7jZ.js";import{a as $}from"./api-DSqpVKC7.js";import{f as O}from"./index-kkXUq-zf.js";import{a as q}from"./adventure-playback-DTfkhIc0.js";import{f as P}from"./floor-preview-text-HrORUJ7D.js";/* empty css */import{B as W}from"./book-open-BL9qvhEI.js";import{X as D}from"./x-rlMdRqJF.js";import{T as I}from"./terminal-DMZjX1es.js";import{c as H}from"./createLucideIcon-ChvMq-zl.js";import{S as J}from"./scroll-text-B0tKI9Sg.js";import"./TextDocumentSurface-BK6Qy41F.js";import"./chevron-right-DKGTLiqc.js";import"./folder-B_S7gBVr.js";import"./file-text-DP6txVW-.js";const K=[["path",{d:"M6 22a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.704.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2z",key:"1oefj6"}],["path",{d:"M9 10h6",key:"9gxzsh"}],["path",{d:"M12 13V7",key:"h0r20n"}],["path",{d:"M9 17h6",key:"r8uit2"}]],U=H("file-diff",K),V={notes:"Field notes",diff:"Changes",result:"Results"},G={notes:"Field notes",diff:"What changed",result:"What came back"},X={notes:J,diff:U,result:I},C=r=>new Date(r).toLocaleTimeString([],{hour:"2-digit",minute:"2-digit",second:"2-digit"}),F=r=>r.split(`
|
|
2
|
+
`).length,S=r=>r<1024?`${r} B`:`${(r/1024).toFixed(r<102400?1:0)} KB`;function Q(r,t){const s=v=>v.replace(/\s+/g," ").trim().toLowerCase();if(!r||!t)return!1;const[o,l]=[s(r),s(t)];if(!o||!l)return!1;if(o===l)return!0;const[h,x]=o.length<=l.length?[o,l]:[l,o];return h.length>=24&&x.includes(h.slice(0,80))}function Y(r){return r?.event.stream?.length?r.event.stream.join(`
|
|
3
|
+
`):r?.event.result?JSON.stringify(r.event.result,null,2):""}function Z(r){return r.split("/").flatMap((t,s)=>s===0?[t]:["/",e.jsx("wbr",{},s),t])}function c(r,t,s=!1){return t?e.jsxs("div",{children:[e.jsx("dt",{children:r}),e.jsx("dd",{className:s?"is-path":void 0,children:t})]},r):null}function xe({stop:r,path:t,onClose:s,onPath:o}){const l=d.useRef(null),h=d.useRef(null),[x,v]=d.useState("notes"),[a,b]=d.useState(null),[k,w]=d.useState("");d.useEffect(()=>{l.current?.showModal()},[]),d.useEffect(()=>{let n=!0;return b(null),w(""),t&&$(`/api/file/preview?path=${encodeURIComponent(t)}`).then(u=>{n&&b(u)}).catch(u=>{n&&w(String(u))}),()=>{n=!1}},[t]);const R=r?q(r):null,j=R||r?.event.detail||r?.event.arg||null,p=P(r?.event.text),f=Y(r),_=r?.event.result?.exit_code??r?.event.result?.exitCode,i=r?.event.diff,g=["notes","diff","result"].filter(n=>n==="notes"||(n==="diff"?!!i:!!f)),m=g.includes(x)?x:"notes";d.useEffect(()=>{h.current?.scrollTo({top:0})},[m,t]);const B=t?t.split("/").filter(Boolean):[],T=t?B.at(-1)??t:r?.event.tool||r?.label||"Artifact",N=a?.kind==="file"?a.sizeBytes:void 0,E=a?.kind==="file"&&a.previewable?a.truncated:!1,y=a&&O.find(n=>n.canHandle(a)),z=e.jsxs(e.Fragment,{children:[p&&!Q(p,j)?e.jsx("p",{className:"adventure-reader__prose",children:p}):null,j?e.jsxs("figure",{className:"adventure-reader__record",children:[e.jsx("figcaption",{children:R?"Observed command":"Recorded input"}),e.jsx("pre",{children:j})]}):null,!p&&!j?e.jsx("p",{className:"adventure-reader__quiet",children:"Nothing was written down at this stop."}):null,g.includes("result")?e.jsxs("button",{type:"button",className:"adventure-reader__next",onClick:()=>v("result"),children:["Read what came back",e.jsx("span",{"aria-hidden":"true",children:"→"})]}):null]}),L=e.jsxs(e.Fragment,{children:[e.jsxs("p",{className:"adventure-reader__tally",children:[e.jsxs("b",{children:["+",i?.add??0]})," added ",e.jsxs("b",{children:["−",i?.del??0]})," removed"]}),i?.preview?e.jsx("pre",{className:"adventure-reader__diff",children:i.preview.split(`
|
|
4
|
+
`).map((n,u)=>e.jsx("span",{className:n.startsWith("+")?"is-added":n.startsWith("-")?"is-removed":"",children:n||" "},u))}):e.jsx("p",{className:"adventure-reader__quiet",children:"No preview was recorded for this change."})]}),M=e.jsxs(e.Fragment,{children:[e.jsxs("p",{className:"adventure-reader__tally",children:[_===void 0?"Output":`Exit code ${_}`,f?e.jsxs("small",{children:[F(f)," ",F(f)===1?"line":"lines"]}):null]}),f?e.jsx("pre",{className:"adventure-reader__output",children:f}):e.jsx("p",{className:"adventure-reader__quiet",children:"Nothing came back at this stop."})]}),A=k?e.jsxs("div",{className:"adventure-reader__failed",role:"alert",children:[e.jsx("strong",{children:"This file could not be opened."}),e.jsx("p",{children:k})]}):a&&y?e.jsx("div",{className:"adventure-reader__file",children:y.render({resource:a,openFilePreview:o})}):a?e.jsx("p",{className:"adventure-reader__quiet",children:"No reader is available for this kind of file."}):e.jsxs("p",{className:"adventure-reader__quiet",role:"status",children:["Opening ",T,"…"]});return e.jsxs("dialog",{ref:l,className:"adventure-reader","aria-labelledby":"adventure-reader-title",onCancel:s,onClose:s,onClick:n=>{n.target===n.currentTarget&&s()},children:[e.jsxs("header",{children:[e.jsx(W,{size:19,"aria-hidden":"true"}),e.jsxs("div",{className:"adventure-reader__masthead",children:[e.jsx("small",{children:t?"Field journal · current file":"Field journal · recorded stop"}),e.jsx("h2",{id:"adventure-reader-title",title:t??void 0,children:T})]}),!t&&r?e.jsxs("span",{className:"adventure-reader__stamp",children:[r.label," · ",C(r.at)]}):null,e.jsx("button",{type:"button",onClick:s,"aria-label":"Close field journal",children:e.jsx(D,{size:18})})]}),e.jsxs("div",{className:"adventure-reader__binding",children:[e.jsxs("aside",{children:[t?null:e.jsx("nav",{"aria-label":"Journal pages",children:g.map(n=>{const u=X[n];return e.jsxs("button",{type:"button","aria-pressed":m===n,onClick:()=>v(n),children:[e.jsx(u,{size:15}),e.jsx("span",{children:V[n]})]},n)})}),e.jsx("dl",{className:"adventure-reader__meta",children:t?e.jsxs(e.Fragment,{children:[c("Path",Z(t),!0),c("Reading","Current contents on disk"),N===void 0?null:c("Size",E?`${S(N)} · preview truncated`:S(N))]}):e.jsxs(e.Fragment,{children:[r?c("Observed",C(r.at)):null,r?c("Stop",r.label):null,c("Tool",r?.event.tool,!0),_===void 0?null:c("Exit code",String(_)),i?c("Change",`+${i.add} / −${i.del} lines`):null]})})]}),e.jsxs("article",{className:"adventure-reader__leaf",ref:h,children:[e.jsxs("div",{className:"adventure-reader__head",children:[e.jsx("span",{children:t?"Current file":G[m]}),e.jsx("small",{children:t?"Current contents, read from disk":"As recorded, never re-run"})]}),e.jsx("div",{className:"adventure-reader__body",children:t?A:m==="notes"?z:m==="diff"?L:M})]})]}),e.jsxs("footer",{children:[e.jsx("span",{children:"Esc returns to the trail."}),e.jsx("button",{type:"button",onClick:s,children:"Back to the trail →"})]})]})}export{xe as AdventureReader};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{r as s,j as e}from"./index-DReVb7jZ.js";import{p as t}from"./adventure-habitats-v1-M1lcpTJh.js";function a(){const r=s.useId();return e.jsxs("svg",{className:"adventures__scenery",width:"100%",height:"400","aria-hidden":"true",children:[e.jsx("defs",{children:e.jsxs("pattern",{id:r,width:"2400",height:"400",patternUnits:"userSpaceOnUse",children:[e.jsx("image",{href:t,width:"1200",height:"400",preserveAspectRatio:"none"}),e.jsx("image",{href:t,width:"1200",height:"400",preserveAspectRatio:"none",transform:"translate(2400 0) scale(-1 1)"})]})}),e.jsx("rect",{width:"100%",height:"400",fill:`url(#${r})`})]})}export{a as AdventureScenery};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{r,m as se,g as ne,j as e,h as ke}from"./index-DReVb7jZ.js";import{ReplayClock as be}from"./ReplayClock-DUVJjrIu.js";import{S as _e}from"./SproutActionSprite-DI5N3gOj.js";import{C as B}from"./CrewSprite-Dp9KBBGY.js";import{l as ie}from"./agent-lanes-model-DMAdqCmK.js";import{o as ye}from"./lane-observe-CteDwdD-.js";import{b as L,a as O,c as we}from"./adventure-playback-DTfkhIc0.js";import{AdventureScenery as Ne}from"./AdventureScenery-DSxDlqG1.js";import{AdventureReader as Se}from"./AdventureReader-ZsBDQITY.js";import{ReplayLog as Ce}from"./ReplayLog-Bek1Vc4W.js";import{H as $e,A as Pe}from"./AdventureEvidence-B4mEvXeD.js";import{f as H}from"./floor-preview-text-HrORUJ7D.js";/* empty css */import{c as K}from"./createLucideIcon-ChvMq-zl.js";import{F as V}from"./flag-DAFE2wZ5.js";import{W as Me}from"./wrench-B4maQJai.js";import{B as oe}from"./book-open-BL9qvhEI.js";import{P as Te}from"./pause-B_hliKuR.js";import{P as Ae}from"./play-CVeRmqLH.js";import{R as Re}from"./radio-Cas2qg1D.js";import{A as ze}from"./arrow-left-DFfKAq0d.js";import{A as ae}from"./arrow-right-DmAWnyAH.js";/* empty css */import"./lane-ask-display-BTVSakyo.js";import"./context-budget-8qFKqM-j.js";import"./terminal-sessions-3RfJpen8.js";import"./api-DSqpVKC7.js";import"./lane-edit-display-BjdT9oZl.js";import"./tail-display-DHSNmvor.js";import"./time-Dhsh_2EG.js";import"./adventure-habitats-v1-M1lcpTJh.js";import"./index-kkXUq-zf.js";import"./TextDocumentSurface-BK6Qy41F.js";import"./chevron-right-DKGTLiqc.js";import"./folder-B_S7gBVr.js";import"./file-text-DP6txVW-.js";/* empty css */import"./x-rlMdRqJF.js";import"./terminal-DMZjX1es.js";import"./scroll-text-B0tKI9Sg.js";import"./observe-CtS0l3zu.js";import"./agent-state-DDhnFEEP.js";import"./surface-activity-B1rgWB1i.js";import"./Provider-CNZluAZb.js";import"./provider-DwmCoSlc.js";import"./router-C-MF5-mb.js";import"./synthetic-agent-routing-aduMYO7P.js";import"./machine-scope-DJt9RZ2w.js";import"./sse-A8AyLH0g.js";import"./index-BWHgHrtv.js";import"./scoutbot-Bk3nyrkj.js";import"./NewChatComposer-BEXS8vV6.js";import"./runtime-picker-C_AVYF63.js";import"./scout-voice-CqAyfblr.js";import"./fx-z37u1o2z.js";import"./voice-levels-Dcr3jglk.js";import"./loader-circle-DNUsuPWz.js";import"./conversation-model-m8HhzroS.js";import"./colors-CFlbwC25.js";import"./conversations-Cbg9h_Af.js";import"./index-CbqBwfIW.js";import"./HarnessMark-DSvM_H7H.js";import"./NewChatOrigin-C8ROO4ps.js";import"./keyboard-nav-CJXPaHXj.js";import"./chevron-down-CDzRQQGl.js";import"./search-UsM-9-_W.js";import"./model-CBkMvT1w.js";import"./DocumentFocusViewer-DlMiEALb.js";import"./chevron-up-DX7R6KY2.js";import"./code-xml-Cmadr3pQ.js";import"./chunk-HRAB3GC3-Dvk_QpRq.js";import"./agent-lane-detail-Ti3trpfH.js";/* empty css */import"./arrow-up-right-B0aLKiyF.js";const Ie=[["path",{d:"m22 7-8.991 5.727a2 2 0 0 1-2.009 0L2 7",key:"132q7q"}],["rect",{x:"2",y:"4",width:"20",height:"16",rx:"2",key:"izxlao"}]],le=K("mail",Ie);const Le=[["path",{d:"m8 3 4 8 5-5 5 15H2L8 3z",key:"otkl63"}]],Ee=K("mountain",Le);const We=[["path",{d:"M3.5 21 14 3",key:"1szst5"}],["path",{d:"M20.5 21 10 3",key:"1310c3"}],["path",{d:"M15.5 21 12 15l-3.5 6",key:"1ddtfw"}],["path",{d:"M2 21h20",key:"1nyx9w"}]],re=K("tent",We),De={start:"Trailhead",think:"Lookout",read:"Field library",edit:"Workbench",tool:"Tool shed",message:"Post station",wait:"Waiting camp",end:"Turn complete",stopped:"Journey interrupted"};function Fe(n){const p=n.text.trim().toLowerCase();if(n.kind==="note"||n.kind==="system"||n.kind==="boot")return/^(task started|turn started|\[turn_started\])$/.test(p)?"start":/^(task complete|task completed|turn complete|turn completed|turn ended|\[turn_ended\])$/.test(p)?"end":/^(?:(?:turn|task) (?:aborted|failed|cancelled|canceled))(?:$|[ :])/.test(p)?"stopped":/\b(waiting|approval required|permission requested|blocked)\b/.test(p)?"wait":null;if(n.kind==="think")return"think";if(n.kind==="ask"||n.kind==="message")return"message";const c=n.tool?.toLowerCase()??"";return/wait|sleep|request_user_input/.test(c)?"wait":n.diff||/(?:^|[._/])(?:edit|write|write_file|edit_file|apply_patch|multiedit|str_replace_editor)$/.test(c)?"edit":/read|search|find|open|view|fetch/.test(c)?"read":n.kind==="tool"?"tool":null}function Je(n,p){const c=new Set,x=(n.observe?.events??[]).flatMap(o=>{const b=ye(o,n.observe?.metadata?.session?.sessionStart),v=Fe(o);return b===null||b>p||!v||c.has(o.id)?[]:(c.add(o.id),[{id:`${n.id}:${o.id}`,event:o,at:b,kind:v,label:De[v],artifact:o.arg||o.tool||o.text}])}).sort((o,b)=>o.at-b.at),m=[];let k;for(const o of x)(!k||o.kind==="start"||k.closed)&&(k={id:o.id,stops:[],partial:o.kind!=="start",closed:!1},m.push(k)),k.stops.push(o),k.closed=o.kind==="end"||o.kind==="stopped";return m}function I(n,p){if(p==="continuous")return null;const c=n.event.result?.exit_code??n.event.result?.exitCode,x=typeof c=="number"?c:typeof c=="string"&&/^-?\d+$/.test(c)?Number(c):null;if(x!==null&&x!==0)return`Command needs attention · exit ${x}`;if(n.kind==="stopped")return"Journey interrupted";if(n.kind==="wait")return"Waiting for input";if(p==="problems")return null;if(n.kind==="end")return"Turn complete";if(p==="all")return L(n).checkpoint?L(n).label:null;const m=O(n);return m&&x!==null&&we(m)?"Validation result ready":null}const qe={start:V,think:Ee,read:oe,edit:$e,tool:Me,message:le,wait:re,end:V,stopped:re},M=n=>new Date(n).toLocaleTimeString([],{hour:"2-digit",minute:"2-digit",second:"2-digit"}),w=218;function vs({lanes:n,now:p,onActor:c}){const[x,m]=r.useState(null),[k,o]=r.useState(n[0]?.id??""),[b,v]=r.useState(null),[de,_]=r.useState(0),[ce,He]=r.useState(!0),[ue,Oe]=r.useState(!0),[Ve,Ke]=r.useState(!1),[U,Ue]=r.useState(!1),[f,Ye]=r.useState(!1),[u,h]=r.useState(!0),[j,pe]=r.useState(1),[E,T]=r.useState("rest"),[S,Y]=r.useState("results"),[me,A]=r.useState(null),[C,he]=r.useState(!document.hidden);r.useEffect(()=>{const t=()=>he(!document.hidden);return document.addEventListener("visibilitychange",t),()=>document.removeEventListener("visibilitychange",t)},[]);const R=r.useRef(null),l=n.find(t=>t.id===k)??n[0],W=r.useMemo(()=>l?Je(l,p):[],[l,p]),g=W.find(t=>t.id===b)??W.at(-1),a=g?.stops??[],i=Math.min(de??a.length-1,a.length-1),s=a[i],Z=l?se(l.agent.name)??ne(l.id):"sprout",D=s?.event.to?n.find(t=>[t.id,t.agent.id,t.agent.name,t.agent.handle].includes(s.event.to)):void 0;ce&&l&&n.filter(t=>t.id!==l.id&&!!l.agent.project&&t.agent.project===l.agent.project).slice(0,4);const G=b===null,y=s?L(s):null,F=s?I(s,S):null,Q=a.findIndex((t,d)=>d>i&&I(t,S==="continuous"?"results":S)),$=!!(u&&F&&me!==s?.id),J=$||!u&&!!s,P=u&&!$;r.useEffect(()=>{if(!u||f||!C||!s){T("rest");return}T("travel");const t=window.setTimeout(()=>T(y?.routine?"land":"rest"),700/j),d=window.setTimeout(()=>T("rest"),960/j);return()=>{window.clearTimeout(t),window.clearTimeout(d)}},[s?.id,u,f,C,j]);const xe=E==="travel"?y?.routine?"jump":"run":E==="land"?"land":"idle",X=s?O(s):null,ee=s?.event.result?.exit_code??s?.event.result?.exitCode,ve=ee!==void 0?`Process exited with code ${ee}`:s?.event.live?"Command is still running":"Inspect the observed command and collected evidence below",q=ue&&!U;r.useEffect(()=>{_(0),A(null)},[l?.id,g?.id]),r.useEffect(()=>{if(!C||!P||!s||i>=a.length-1)return;const t=window.setTimeout(()=>{document.hidden||_(i+1)},Math.max(1e3,y?.durationMs??1600)/j);return()=>window.clearTimeout(t)},[C,P,s?.id,i,a.length,y?.durationMs,j]),r.useEffect(()=>{!R.current||i<0||R.current.scrollTo({left:Math.max(0,150+i*w-R.current.clientWidth*.5),behavior:u&&!f&&!window.matchMedia("(prefers-reduced-motion: reduce)").matches?"smooth":"auto"})},[i,l?.id,g?.id]);const fe=t=>{o(t),v(null),_(0),h(!0)},N=t=>{h(!1),v(g?.id??null),_(Math.max(0,Math.min(a.length-1,t)))},te=()=>{h(!u),u||A(s?.id??null)},je=$?"Checkpoint":u?i>=a.length-1?g?.closed?"Journey complete":"Following live":"Playing journey":"Paused for review";return e.jsxs("section",{onKeyDown:t=>{t.code==="Space"&&!t.target.closest("button,input,select,textarea,summary,[contenteditable=true]")&&(t.preventDefault(),te())},className:`adventures${J?" is-reviewing":""}${f||!u?" is-paused":""}`,"aria-label":"Agent Replay",onPointerDown:t=>t.stopPropagation(),onWheel:t=>t.stopPropagation(),children:[e.jsx("div",{className:"adventures__scene",ref:R,tabIndex:0,"aria-label":"Replay landscape, follows the seek position",children:e.jsxs("div",{className:"adventures__landscape",style:{width:Math.max(1e3,a.length*w+450)},children:[e.jsx(Ne,{}),e.jsx("div",{className:"adventures__trail","aria-hidden":"true"}),a.length?null:e.jsxs("div",{className:"adventures__empty",children:[e.jsx(B,{slug:"sprout",size:120,paused:f}),e.jsx("h3",{children:"The trail is quiet."}),e.jsx("p",{children:n.length?"No journey observations are available for this agent. Choose another agent or keep watching.":"Your crew will appear when agent activity arrives."})]}),a.map((t,d)=>{const ge=qe[t.kind],z=L(t);return e.jsxs("button",{type:"button",className:`adventures__stop adventures__stop--${t.kind}${z.checkpoint?" is-checkpoint":z.routine?" is-routine":""}${d===i?" is-current":""}${d>i?" is-ahead":""}`,style:{left:150+d*w},onClick:()=>N(d),"aria-label":`${t.label}, ${M(t.at)}`,"aria-pressed":d===i,children:[e.jsx("span",{className:"adventures__stop-title",children:z.checkpoint?z.label:t.label}),e.jsxs("span",{className:"adventures__prop",children:[e.jsx(ge,{size:36,strokeWidth:1.5}),t.kind==="edit"?e.jsx("span",{className:"adventures__sparks"}):null]}),e.jsx("span",{className:"adventures__artifact",children:H(O(t)??t.artifact).slice(0,100)}),e.jsx("time",{children:M(t.at)})]},t.id)}),s&&l?e.jsxs("div",{className:`adventures__traveler adventures__traveler--${s.kind}${q?" has-action-sprite":""}${y?.checkpoint?" is-checkpoint":""}${y?.routine&&E==="travel"?" is-hopping":""}`,style:{left:112+i*w,transitionDuration:`${700/j}ms`},children:[s.kind==="think"?e.jsx("span",{className:"adventures__thought",children:"Thinking"}):null,e.jsx("button",{type:"button",onClick:()=>{h(!1),c(l)},"aria-label":`Inspect ${ie(l.agent,l.source)}`,children:e.jsx(e.Fragment,{children:q?e.jsx(_e,{action:xe,playbackRate:j,size:128,paused:f||!u}):e.jsx(B,{slug:Z,size:112,pixel:U&&ke(Z),paused:f||!P,expression:J?"look-right":Be(s.kind)})})},s.id),e.jsx("span",{className:"adventures__shadow"}),s.kind!=="think"?e.jsxs("span",{className:"adventures__action-caption",children:[e.jsx("strong",{children:s.event.tool||(s.kind==="message"?"Message":s.kind==="end"?"Turn complete":s.kind==="wait"?"Waiting":s.label)}),s.event.tool?e.jsx("small",{children:H(X||s.event.arg).slice(0,90)}):null]}):null]}):null,s&&J?e.jsxs("button",{type:"button",className:"adventures__world-artifact",style:{left:252+i*w},onClick:()=>{h(!1),m({path:null})},"aria-label":"Inspect current artifact",children:[e.jsxs("span",{className:"adventures__artifact-sheet",children:[e.jsx(oe,{size:23}),e.jsx("strong",{children:F||s.label}),e.jsx("span",{children:H(X||s.artifact).slice(0,110)}),e.jsx("small",{children:"Inspect artifact ↗"})]}),e.jsx("span",{className:"adventures__artifact-stand"})]}):null,s?.event.to?e.jsxs("div",{className:"adventures__handoff",style:{left:218+i*w},children:[e.jsx(le,{size:20}),e.jsxs("span",{children:["Message to ",s.event.to]}),D?e.jsx(B,{slug:se(D.agent.name)??ne(D.id),size:70,paused:f||!P}):null]}):null,s?e.jsxs("div",{className:"adventures__frontier",style:{left:240+a.length*w},children:[e.jsx("span",{children:g?.closed?"Until the next turn":"Uncharted"}),e.jsx("small",{children:g?.closed?"This journey has ended.":"The next step is not known yet."})]}):null]})}),e.jsxs("div",{className:"adventures__console",children:[e.jsxs("details",{className:"replay-selection",children:[e.jsx("summary",{children:"Choose agent / journey"}),e.jsxs("div",{className:"adventures__navigation",children:[e.jsxs("label",{children:[q?"Sprout follows":"Follow",e.jsx("select",{"aria-label":"Follow agent",value:l?.id??"",onChange:t=>fe(t.target.value),children:n.map(t=>e.jsxs("option",{value:t.id,children:[ie(t.agent,t.source)," · ",t.id.slice(-5)]},t.id))})]}),e.jsxs("label",{children:["Journey",e.jsx("select",{"aria-label":"Select journey",value:g?.id??"",onChange:t=>{v(t.target.value),_(0),h(!0)},children:W.map((t,d)=>e.jsxs("option",{value:t.id,children:[d+1," · ",M(t.stops[0].at)," · ",t.closed?t.stops.at(-1).label:"end not observed"]},t.id))})]})]})]}),e.jsxs("div",{className:"adventures__transport",children:[e.jsxs("div",{className:"adventures__recording-clock",children:[e.jsx(be,{at:s?.at??0,nextAt:a[i+1]?.at??s?.at??0,start:a[0]?.at??0,duration:Math.max(1e3,y?.durationMs??1600)/j,running:C&&P&&!f}),e.jsx("span",{className:"adventures__clock-divider","aria-hidden":"true"}),s?e.jsx("time",{dateTime:new Date(s.at).toISOString(),children:new Date(s.at).toLocaleString([],{year:"numeric",month:"short",day:"numeric",hour:"2-digit",minute:"2-digit",second:"2-digit",timeZoneName:"short"})}):e.jsx("span",{children:"No recorded timestamp"})]}),e.jsxs("div",{className:"adventures__transport-top",children:[e.jsxs("button",{type:"button",className:"adventures__play-button",title:"Play or pause · Space","aria-label":u?"Pause journey":"Play journey",onClick:te,children:[u?e.jsx(Te,{size:17}):e.jsx(Ae,{size:17}),e.jsx("span",{children:u?"Pause":"Play"})]}),e.jsxs("span",{className:`adventures__transport-status${$?" is-checkpoint":""}`,role:"status",children:[e.jsx("i",{}),je]}),e.jsxs("label",{className:"adventures__speed",children:[e.jsx("span",{children:"Speed"}),e.jsxs("select",{"aria-label":"Playback pace",value:j,onChange:t=>pe(Number(t.target.value)),children:[e.jsx("option",{value:.75,children:"0.75×"}),e.jsx("option",{value:1,children:"1×"}),e.jsx("option",{value:1.5,children:"1.5×"})]})]}),e.jsxs("select",{className:"adventures__checkpoint-mode","aria-label":"Checkpoint behavior",value:S,onChange:t=>Y(t.target.value),children:[e.jsx("option",{value:"results",children:"Review results"}),e.jsx("option",{value:"all",children:"Every checkpoint"}),e.jsx("option",{value:"problems",children:"Only problems"}),e.jsx("option",{value:"continuous",children:"Play straight through"})]})]}),e.jsxs("button",{className:"adventures__next-review",type:"button",disabled:Q<0,onClick:()=>{v(g?.id??null),_(Q),h(!0),A(null),S==="continuous"&&Y("results")},children:[e.jsx(V,{size:12})," Next review point"]}),e.jsxs("div",{className:"adventures__playhead",children:[e.jsxs("button",{type:"button",className:G?"is-live":"","aria-pressed":G,onClick:()=>{v(null),_(null),h(!0)},children:[e.jsx(Re,{size:14})," Live edge"]}),e.jsx("button",{type:"button","aria-label":"Previous observation",disabled:i<=0,onClick:()=>N(i-1),children:e.jsx(ze,{size:15})}),e.jsxs("div",{className:"adventures__seek-track",children:[e.jsx("input",{type:"range","aria-label":"Journey observation",min:0,max:Math.max(0,a.length-1),value:Math.max(0,i),disabled:!a.length,onChange:t=>N(Number(t.target.value))}),e.jsx("div",{className:"adventures__seek-markers",children:a.map((t,d)=>I(t,"all")?e.jsx("button",{type:"button",style:{left:`${a.length>1?d/(a.length-1)*100:0}%`},className:d<=i?"is-visited":"","aria-label":`Seek to ${I(t,"all")} at ${M(t.at)}`,title:`${t.label} · ${M(t.at)}`,onClick:()=>N(d)},t.id):null)})]}),e.jsx("button",{type:"button","aria-label":"Next observation",disabled:i>=a.length-1,onClick:()=>N(i+1),children:e.jsx(ae,{size:15})}),e.jsx("span",{children:a.length?`${i+1} / ${a.length}`:"No observations"})]}),$?e.jsxs("div",{className:"adventures__checkpoint-review",children:[e.jsxs("div",{children:[e.jsx("strong",{children:F}),e.jsx("small",{children:ve})]}),e.jsxs("button",{type:"button",onClick:()=>A(s?.id??null),children:["Continue ",e.jsx(ae,{size:14})]})]}):null]}),e.jsx(Ce,{stops:a,index:i,onInspect:t=>{N(t),m({path:null})}}),l?e.jsx("div",{onClickCapture:()=>h(!1),children:e.jsx(Pe,{stops:a,index:i,lane:l,onFile:t=>{h(!1),m({path:t})}})}):null]}),x?e.jsx(Se,{stop:s,path:x.path,onClose:()=>m(null),onPath:t=>m({path:t})}):null]})}function Be(n){return n==="think"?"look-up":n==="message"?"look-left":"look-right"}export{vs as AgentAdventures};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{j as i,f as B,m as f,g as L,C as F,h as G}from"./index-DReVb7jZ.js";import{d as J}from"./Provider-CNZluAZb.js";import{a as K,S as Q}from"./SpriteAvatar-aHeF4ZQZ.js";import{C as U}from"./CrewAvatar-zgzC3cbU.js";import{s as X}from"./colors-CFlbwC25.js";import{i as Y,d as $}from"./agent-state-DDhnFEEP.js";const z={hero:{tile:!1,presence:!1,glow:!0},inspector:{sizes:{compact:32,regular:40,large:52},tile:!0,presence:!0},row:{sizes:{compact:20,regular:24,large:32},tile:!0,presence:!0},turn:{tile:!1,presence:!1},list:{tile:!1,presence:!1},roster:{tile:!1,presence:!1},node:{sizes:{compact:14,regular:16,large:20},tile:!1,presence:!1}},ee={compact:.85,regular:1,large:1.25};function le(e,a){return z[e].sizes?.[a]}function re(e,a){if(a==="regular")return e;const l=Math.round(e*ee[a]);return a==="compact"?Math.max(20,Math.min(e,l)):l}function ce({agent:e,name:a,slug:l,avatarStyle:E,project:D,harness:R,state:I,kind:M="agent",placement:d="row",size:w,scaleWithPreference:P=!0,presence:g,tile:T,salt:O,className:s,channelClassName:_,style:o,title:c}){const r=e?.name??a??"?";if(M==="channel")return i.jsx("span",{className:_??s,style:o,title:c??r,children:"#"});const t=J(),k=t?.operatorName||t?.onboarding?.operatorName?.trim()||t?.onboarding?.operatorNameSuggestion?.trim()||"operator",m=r.toLowerCase()==="operator"||r.toLowerCase()==="you"||r.toLowerCase()===k.toLowerCase()||r.toLowerCase()==="art",A=t?.appearanceDetails?.operatorCharacter||"milo",h=E??t?.appearanceDetails?.avatarStyle??"crew",y=m?void 0:B(t?.appearanceDetails?.agentCharacters,{id:e?.id,name:r},t?.agents??[]),p=l?f(l)??L(l):m?f(A)??L(A):f(y)??f(e?.slug||r),H=p!=null&&F[p]!=null&&(h!=="chip"||G(p)),n=z[d],S=P?t?.appearanceDetails?.avatarSize??"regular":"regular",u=w!=null?re(w,S):n.sizes?.[S];if(h!=="sprite"&&H&&p){const b=R??e?.harness??void 0,Z=I??e?.state??null,q=D??e?.project??"openscout",C=i.jsx(U,{slug:p,name:r,project:q,harness:b,state:Z,size:u,badge:b?g??n.presence:!1,ring:g??(d==="hero"||d==="turn"?!1:n.presence),chip:h==="chip",glow:n.glow,title:c??r});return u==null?i.jsx("span",{className:s,style:{background:"transparent",overflow:"visible",display:"inline-grid",placeItems:"center",...o},title:c??r,children:C}):s||o?i.jsx("span",{className:s,style:{display:"inline-grid",placeItems:"center",...o},children:C}):C}const j=e?K(e):null,x=g??n.presence,N=Y(e?.state??null),V=x&&N?X(e?.state??null):void 0,W=x&&$(e?.state??null),v=i.jsx(Q,{name:r,size:u,hue:j?.hue,tone:j?.tone,salt:O,tile:T??n.tile,glow:n.glow,corner:V,cornerPulse:W,title:c??r});return u==null?i.jsx("span",{className:s,style:{background:"transparent",overflow:"visible",...o},title:c??r,children:v}):s||o?i.jsx("span",{className:s,style:o,children:v}):v}export{ce as A,le as p};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{r as t,j as s,f as W,I as V}from"./index-DReVb7jZ.js";import{E as Y}from"./EmptyState-CYUwYyAW.js";import{C as F}from"./CastPicker-ZPomvOf-.js";import{a as D}from"./api-DSqpVKC7.js";import{h as G}from"./NewChatComposer-BEXS8vV6.js";import{d as J}from"./time-Dhsh_2EG.js";import{u as L}from"./Provider-CNZluAZb.js";import{o as Q}from"./openContent-C6XO6kr5.js";import{AgentsSubnav as X}from"./AgentsSubnav-CeHhuzyM.js";/* empty css */import{R as Z}from"./refresh-cw-IcD2lPoT.js";import{S as ss}from"./settings-C69Zjrpq.js";import{c as H}from"./createLucideIcon-ChvMq-zl.js";import{B as _}from"./bot-BhAVbcCA.js";import{W as es}from"./wrench-B4maQJai.js";import{S as as}from"./server-DBlPW0Mp.js";import{C as ns}from"./cpu-Q6nrHFTN.js";import"./CrewAvatar-zgzC3cbU.js";import"./HarnessMark-DSvM_H7H.js";import"./check-g7D7-c1J.js";import"./runtime-picker-C_AVYF63.js";import"./scout-voice-CqAyfblr.js";import"./fx-z37u1o2z.js";import"./voice-levels-Dcr3jglk.js";import"./loader-circle-DNUsuPWz.js";import"./router-C-MF5-mb.js";import"./synthetic-agent-routing-aduMYO7P.js";import"./terminal-sessions-3RfJpen8.js";import"./conversation-model-m8HhzroS.js";import"./agent-state-DDhnFEEP.js";import"./colors-CFlbwC25.js";import"./conversations-Cbg9h_Af.js";import"./index-CbqBwfIW.js";import"./NewChatOrigin-C8ROO4ps.js";import"./keyboard-nav-CJXPaHXj.js";import"./x-rlMdRqJF.js";import"./chevron-down-CDzRQQGl.js";import"./search-UsM-9-_W.js";import"./file-text-DP6txVW-.js";import"./provider-DwmCoSlc.js";import"./machine-scope-DJt9RZ2w.js";import"./sse-A8AyLH0g.js";import"./index-BWHgHrtv.js";import"./surface-activity-B1rgWB1i.js";import"./scoutbot-Bk3nyrkj.js";import"./model-CBkMvT1w.js";import"./DocumentFocusViewer-DlMiEALb.js";import"./TextDocumentSurface-BK6Qy41F.js";import"./index-kkXUq-zf.js";import"./chevron-right-DKGTLiqc.js";import"./folder-B_S7gBVr.js";import"./chevron-up-DX7R6KY2.js";import"./code-xml-Cmadr3pQ.js";import"./arrow-left-DFfKAq0d.js";import"./arrow-right-DmAWnyAH.js";import"./chunk-HRAB3GC3-Dvk_QpRq.js";import"./SecondaryNav-Bs-_VwTC.js";import"./secondaryNavConfig-DzNHk6IH.js";import"./nav-destinations-CU_euC-Q.js";import"./message-square-CJW4WRlo.js";import"./terminal-DMZjX1es.js";import"./compass-CvzkzkIh.js";import"./git-branch-DcUCsWdJ.js";import"./scroll-text-B0tKI9Sg.js";const is=[["path",{d:"M2.586 17.414A2 2 0 0 0 2 18.828V21a1 1 0 0 0 1 1h3a1 1 0 0 0 1-1v-1a1 1 0 0 1 1-1h1a1 1 0 0 0 1-1v-1a1 1 0 0 1 1-1h.172a2 2 0 0 0 1.414-.586l.814-.814a6.5 6.5 0 1 0-4-4z",key:"1s6t7t"}],["circle",{cx:"16.5",cy:"7.5",r:".5",fill:"currentColor",key:"w0ekpg"}]],K=H("key-round",is);const ts=[["path",{d:"M15.2 3a2 2 0 0 1 1.4.6l3.8 3.8a2 2 0 0 1 .6 1.4V19a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2z",key:"1c8476"}],["path",{d:"M17 21v-7a1 1 0 0 0-1-1H8a1 1 0 0 0-1 1v7",key:"1ydtos"}],["path",{d:"M7 3v4a1 1 0 0 0 1 1h7",key:"t51u73"}]],cs=H("save",ts);function A(e){switch(e){case"ready":case"running":case"available":case"enabled":return"sys-chip-success";case"configured":case"installed":case"working":return"sys-chip-warning";case"missing":case"offline":case"not_ready":case"error":return"sys-chip-danger";default:return"sys-chip-neutral"}}function $(e){switch(e){case"available":case"ready":return"ready";case"offline":case"not_ready":return"not ready";default:return e}}function M(e){return e?e.replace(/^\/Users\/[^/]+/,"~"):"Not reported"}function rs(e){return e.length>0?e.join(", "):"No capabilities reported"}function ls({runtime:e}){return s.jsxs("div",{className:"agent-config-row",children:[s.jsxs("div",{className:"agent-config-row-main",children:[s.jsx("span",{className:"agent-config-icon",children:s.jsx(ns,{size:14})}),s.jsxs("div",{className:"agent-config-row-copy",children:[s.jsx("div",{className:"agent-config-row-title",children:e.label}),s.jsx("div",{className:"agent-config-row-detail",children:e.description}),s.jsx("div",{className:"agent-config-row-meta",children:e.detail})]})]}),s.jsxs("div",{className:"agent-config-row-side",children:[s.jsx("span",{className:`sys-chip ${A(e.state)}`,children:e.state}),s.jsx("span",{className:"agent-config-row-meta",children:e.binaryPath??e.loginCommand??e.source})]})]})}function os({provider:e}){return s.jsxs("div",{className:"agent-config-row",children:[s.jsxs("div",{className:"agent-config-row-main",children:[s.jsx("span",{className:"agent-config-icon",children:s.jsx(K,{size:14})}),s.jsxs("div",{className:"agent-config-row-copy",children:[s.jsx("div",{className:"agent-config-row-title",children:e.name}),s.jsx("div",{className:"agent-config-row-detail",children:e.protocol}),s.jsx("code",{className:"agent-config-code",children:e.baseUrl}),s.jsxs("div",{className:"agent-config-row-meta",children:["Keys: ",e.envKeys.join(", ")]}),s.jsx("div",{className:"agent-config-row-meta",children:e.note})]})]}),s.jsxs("div",{className:"agent-config-row-side",children:[s.jsx("span",{className:`sys-chip ${A(e.status)}`,children:e.status}),s.jsx("a",{className:"agent-config-link",href:e.docsUrl,target:"_blank",rel:"noreferrer",children:"Docs"})]})]})}function ds({agent:e,selected:o,navigate:g}){return s.jsxs("button",{type:"button",className:`agent-config-row agent-config-row-button${o?" agent-config-row-selected":""}`,onClick:()=>g({view:"agents-v2",agentId:e.id,tab:"config"}),children:[s.jsxs("div",{className:"agent-config-row-main",children:[s.jsx("span",{className:"agent-config-icon",children:s.jsx(_,{size:14})}),s.jsxs("div",{className:"agent-config-row-copy",children:[s.jsx("div",{className:"agent-config-row-title",children:e.name}),s.jsx("div",{className:"agent-config-row-detail",children:e.id}),s.jsxs("div",{className:"agent-config-row-meta",children:[e.harness??"unknown harness"," / ",e.transport??"unknown transport",e.model?` / ${e.model}`:""]})]})]}),s.jsxs("div",{className:"agent-config-row-side",children:[s.jsx("span",{className:`sys-chip ${A(e.status)}`,children:$(e.status)}),s.jsx("span",{className:"agent-config-row-meta",children:M(e.projectRoot??e.cwd)})]})]})}function B(e,o,g,n,N){o(e),g(e.model??""),n(e.runtime.cwd),N(e.runtime.harness)}function ms({agent:e,agents:o,navigate:g,onConfigSaved:n}){const{route:N,appearanceDetails:y,updateAppearanceDetails:b}=L(),h=e?.id??null,x=e?W(y.agentCharacters,e,o):void 0,[c,f]=t.useState(null),[d,p]=t.useState(!1),[j,m]=t.useState(null),[w,a]=t.useState(""),[v,l]=t.useState(""),[C,S]=t.useState(""),[z,E]=t.useState(!1),[u,T]=t.useState("idle"),[O,I]=t.useState(null),k=t.useRef(0),P=t.useCallback(async()=>{const i=++k.current;if(I(null),E(!1),!h){f(null),m(null),p(!1);return}p(!0),m(null);try{const r=await D(`/api/agents/${encodeURIComponent(h)}/config`);if(i!==k.current)return;B(r,f,a,l,S)}catch(r){if(i!==k.current)return;f(null),a(""),l(""),S(e?.harness??""),m(r instanceof Error?r.message:String(r))}finally{i===k.current&&p(!1)}},[e?.harness,h]);t.useEffect(()=>{P()},[P]);const U=t.useMemo(()=>{const i=["claude","codex","pi",c?.runtime.harness,e?.harness,C].filter(r=>!!r?.trim());return Array.from(new Set(i))},[e?.harness,c?.runtime.harness,C]),q=async i=>{if(i.preventDefault(),!(!h||!c||u==="saving")){T("saving"),I(null),m(null);try{const r=await D(`/api/agents/${encodeURIComponent(h)}/config`,{method:"POST",body:JSON.stringify({model:w.trim()||null,runtime:{cwd:v.trim()||c.runtime.cwd,harness:C.trim()||c.runtime.harness},restart:z})});B(r.config,f,a,l,S),E(!1),I(r.restarted?"Saved and restarted":"Saved"),n?.()}catch(r){m(r instanceof Error?r.message:String(r))}finally{T("idle")}}};return e?s.jsxs("div",{className:"sys-panel agent-config-detail-panel",children:[s.jsxs("div",{className:"sys-section-head",children:[s.jsxs("div",{children:[s.jsx("h3",{className:"sys-section-title",children:e.name}),s.jsx("p",{className:"sys-section-subtitle",children:e.id})]}),s.jsxs("div",{className:"sys-page-actions",children:[s.jsx("button",{type:"button",className:"s-btn",onClick:()=>g({view:"agents-v2",agentId:e.id}),children:"Open Agent"}),s.jsx("button",{type:"button",className:"s-btn",onClick:()=>{G(e).then(i=>{Q(g,{view:"conversation",conversationId:i},{returnTo:N})})},children:"Open Chat"})]})]}),s.jsxs("div",{className:"agent-config-detail-grid",children:[s.jsxs("div",{children:[s.jsx("span",{className:"agent-config-label",children:"Status"}),s.jsx("span",{className:`sys-chip ${A(e.status)}`,children:$(e.status)})]}),s.jsxs("div",{children:[s.jsx("span",{className:"agent-config-label",children:"Harness"}),s.jsx("strong",{className:"agent-config-selectable",children:e.harness??"Not reported"})]}),s.jsxs("div",{children:[s.jsx("span",{className:"agent-config-label",children:"Transport"}),s.jsx("strong",{className:"agent-config-selectable",children:e.transport??"Not reported"})]}),s.jsxs("div",{children:[s.jsx("span",{className:"agent-config-label",children:"Reported model"}),s.jsx("strong",{className:"agent-config-selectable",children:e.model??"Not reported"})]}),s.jsxs("div",{children:[s.jsx("span",{className:"agent-config-label",children:"Configured model"}),s.jsx("strong",{className:"agent-config-selectable",children:d?"Loading...":c?c.model??"Harness default":"Not editable"})]}),s.jsxs("div",{className:"agent-config-detail-wide",children:[s.jsx("span",{className:"agent-config-label",children:"Project"}),s.jsx("code",{className:"agent-config-inline-code",title:e.projectRoot??void 0,children:M(e.projectRoot)})]}),s.jsxs("div",{className:"agent-config-detail-wide",children:[s.jsx("span",{className:"agent-config-label",children:"Working dir"}),s.jsx("code",{className:"agent-config-inline-code",title:e.cwd??c?.runtime.cwd??void 0,children:M(e.cwd??c?.runtime.cwd??null)})]}),s.jsxs("div",{className:"agent-config-detail-wide",children:[s.jsx("span",{className:"agent-config-label",children:"Capabilities"}),s.jsx("span",{className:"agent-config-selectable",children:rs(e.capabilities)})]}),s.jsxs("div",{className:"agent-config-detail-wide",children:[s.jsx("span",{className:"agent-config-label",children:"Character"}),x?s.jsx("span",{className:"sys-chip sys-chip-neutral",children:x}):s.jsx("span",{className:"agent-config-selectable",children:"Generative sprite"})]})]}),s.jsx("div",{className:"agent-config-cast",children:s.jsx(F,{selectedSlug:x,onSelect:i=>{const r=V(y.agentCharacters,o),R={...r.byId};R[e.id]===i?delete R[e.id]:R[e.id]=i,b({agentCharacters:{...r,byId:R}})}})}),d&&s.jsx("div",{className:"agent-config-edit agent-config-edit-empty",children:s.jsx("span",{className:"agent-config-save-note",children:"Loading editable launch config..."})}),!d&&c&&s.jsxs("form",{className:"agent-config-edit",onSubmit:q,children:[s.jsxs("div",{className:"agent-config-edit-grid",children:[s.jsxs("label",{className:"agent-config-field",children:[s.jsx("span",{children:"Model"}),s.jsx("input",{name:"model",value:w,placeholder:"Harness default",disabled:!c.editable||u==="saving",onChange:i=>a(i.currentTarget.value)})]}),s.jsxs("label",{className:"agent-config-field",children:[s.jsx("span",{children:"Harness"}),s.jsx("select",{name:"harness",value:C,disabled:!c.editable||u==="saving",onChange:i=>S(i.currentTarget.value),children:U.map(i=>s.jsx("option",{value:i,children:i},i))})]}),s.jsxs("label",{className:"agent-config-field agent-config-field-wide",children:[s.jsx("span",{children:"Working dir"}),s.jsx("input",{name:"cwd",value:v,disabled:!c.editable||u==="saving",onChange:i=>l(i.currentTarget.value)})]})]}),s.jsxs("div",{className:"agent-config-save-row",children:[s.jsxs("label",{className:"agent-config-check",children:[s.jsx("input",{type:"checkbox",checked:z,disabled:!c.editable||u==="saving",onChange:i=>E(i.currentTarget.checked)}),s.jsx("span",{children:"Restart after saving"})]}),s.jsxs("button",{type:"submit",className:"s-btn",disabled:!c.editable||u==="saving",children:[s.jsx(cs,{size:13}),u==="saving"?"Saving...":"Save config"]}),O&&s.jsx("span",{className:"agent-config-save-note",children:O}),j&&s.jsx("span",{className:"agent-config-save-error",children:j})]})]}),!d&&!c&&s.jsx("div",{className:"agent-config-edit agent-config-edit-empty",children:s.jsx("span",{className:"agent-config-save-error",children:j??"No editable local config found"})})]}):s.jsxs("div",{className:"sys-panel agent-config-detail-panel",children:[s.jsx("div",{className:"sys-section-head",children:s.jsxs("div",{children:[s.jsx("h3",{className:"sys-section-title",children:"Agent Details"}),s.jsx("p",{className:"sys-section-subtitle",children:"Select an agent to inspect runtime, model, and tool context."})]})}),s.jsxs("div",{className:"sys-list-empty",children:[s.jsx("h3",{children:"No agent selected"}),s.jsx("p",{children:"Choose an agent from the configuration roster."})]})]})}function be({navigate:e,selectedAgentId:o}){const{route:g}=L(),[n,N]=t.useState(null),[y,b]=t.useState(!0),[h,x]=t.useState(!1),[c,f]=t.useState(null),d=t.useRef(0),p=t.useCallback(async(a="initial")=>{const v=++d.current;a==="initial"?b(!0):x(!0),f(null);try{const l=await D("/api/agent-config/snapshot");if(v!==d.current)return;N(l)}catch(l){if(v!==d.current)return;f(l instanceof Error?l.message:String(l))}finally{v===d.current&&(b(!1),x(!1))}},[]);t.useEffect(()=>{p()},[p]);const j=t.useMemo(()=>n?n.agents.find(a=>a.id===o)??n.agents[0]??null:null,[o,n]),m=n?.providers??[],w=n?[{label:"Runtimes",value:String(n.runtimes.length),detail:`${n.runtimes.filter(a=>a.state==="ready").length} ready`},{label:"BYOK",value:String(m.length),detail:`${m.filter(a=>a.status==="configured").length} configured`},{label:"Agents",value:String(n.agents.length),detail:`${n.agents.filter(a=>$(a.status)!=="not ready").length} ready`},{label:"Broker",value:n.broker.label,detail:n.broker.nodeId??"No node id"}]:[];return s.jsxs("div",{className:"s-secondary-nav-shell",children:[s.jsx("div",{className:"s-secondary-nav-bar",children:s.jsx(X,{activeRoute:g,navigate:e})}),s.jsx("div",{className:"s-secondary-nav-body s-secondary-nav-body--scroll",children:s.jsxs("div",{className:"sys-surface-page sys-surface-page-wide",children:[s.jsxs("div",{className:"sys-page-head",children:[s.jsxs("div",{className:"sys-page-title-group",children:[s.jsx("h2",{className:"sys-page-title",children:"Agent Configuration"}),s.jsx("p",{className:"sys-page-subtitle",children:"Runtimes, agents, project inventory, delivery bridges, and the missing tool/provider surfaces in one control plane."})]}),s.jsxs("div",{className:"sys-page-actions",children:[n&&s.jsxs("div",{className:"sys-sync-note",children:["Updated ",J(n.generatedAt)||"unknown"]}),s.jsxs("button",{type:"button",className:"s-btn",disabled:y||h,onClick:()=>{p("manual")},children:[s.jsx(Z,{size:13}),h?"Refreshing...":"Refresh"]})]})]}),n&&s.jsx("div",{className:"sys-stat-grid",children:w.map(a=>s.jsxs("div",{className:"sys-stat-card",children:[s.jsx("span",{className:"sys-stat-label",children:a.label}),s.jsx("strong",{className:"sys-stat-value",children:a.value}),s.jsx("span",{className:"sys-stat-detail",children:a.detail})]},a.label))}),c&&s.jsxs("div",{className:"sys-banner sys-banner-warning",children:[s.jsx("strong",{children:"Configuration snapshot failed."}),s.jsx("span",{children:c})]}),y&&!n&&s.jsx(Y,{title:"Loading configuration",body:"Reading Scout settings, runtime readiness, broker agents, and project inventory."}),n&&s.jsxs(s.Fragment,{children:[s.jsxs("div",{className:"agent-config-layout",children:[s.jsxs("div",{className:"sys-panel",children:[s.jsxs("div",{className:"sys-section-head",children:[s.jsxs("div",{children:[s.jsx("h3",{className:"sys-section-title",children:"Runtimes"}),s.jsx("p",{className:"sys-section-subtitle",children:"Harness readiness replaces provider auth for the current local-first posture."})]}),s.jsx(ss,{size:15})]}),s.jsx("div",{className:"agent-config-list",children:n.runtimes.map(a=>s.jsx(ls,{runtime:a},a.id))})]}),s.jsxs("div",{className:"sys-panel",children:[s.jsxs("div",{className:"sys-section-head",children:[s.jsxs("div",{children:[s.jsx("h3",{className:"sys-section-title",children:"BYOK Providers"}),s.jsx("p",{className:"sys-section-subtitle",children:"OpenAI-compatible vendors OpenScout can discover from local environment configuration."})]}),s.jsx(K,{size:15})]}),s.jsx("div",{className:"agent-config-list",children:m.map(a=>s.jsx(os,{provider:a},a.id))})]})]}),s.jsxs("div",{className:"agent-config-layout agent-config-layout-primary",children:[s.jsxs("div",{className:"sys-panel",children:[s.jsxs("div",{className:"sys-section-head",children:[s.jsxs("div",{children:[s.jsx("h3",{className:"sys-section-title",children:"Agents"}),s.jsx("p",{className:"sys-section-subtitle",children:"Broker-visible endpoints with runtime, model, and source state."})]}),s.jsx(_,{size:15})]}),s.jsx("div",{className:"agent-config-list agent-config-list-scroll",children:n.agents.length===0?s.jsxs("div",{className:"sys-list-empty",children:[s.jsx("h3",{children:"No agents registered"}),s.jsx("p",{children:"Run setup or start a local agent to populate this roster."})]}):n.agents.map(a=>s.jsx(ds,{agent:a,selected:a.id===j?.id,navigate:e},a.id))})]}),s.jsx(ms,{agent:j,agents:n.agents,navigate:e,onConfigSaved:()=>{p("manual")}})]}),s.jsxs("div",{className:"agent-config-layout",children:[s.jsxs("div",{className:"sys-panel",children:[s.jsxs("div",{className:"sys-section-head",children:[s.jsxs("div",{children:[s.jsx("h3",{className:"sys-section-title",children:"Tools & Context"}),s.jsx("p",{className:"sys-section-subtitle",children:"The next model boundary to make first-class."})]}),s.jsx(es,{size:15})]}),s.jsx("p",{className:"agent-config-copy",children:n.toolContext.note}),s.jsxs("div",{className:"agent-config-chip-row",children:[s.jsxs("span",{className:"sys-chip sys-chip-neutral",children:[n.toolContext.mcpServerCount," MCP servers"]}),s.jsx("span",{className:"sys-chip sys-chip-warning",children:"loadouts pending"})]})]}),s.jsxs("div",{className:"sys-panel",children:[s.jsxs("div",{className:"sys-section-head",children:[s.jsxs("div",{children:[s.jsx("h3",{className:"sys-section-title",children:"Broker & Delivery"}),s.jsx("p",{className:"sys-section-subtitle",children:"Control-plane state and bridges that route attention back to you."})]}),s.jsx(as,{size:15})]}),s.jsxs("div",{className:"agent-config-detail-grid",children:[s.jsxs("div",{children:[s.jsx("span",{className:"agent-config-label",children:"Broker"}),s.jsx("span",{className:`sys-chip ${n.broker.healthy?"sys-chip-success":"sys-chip-danger"}`,children:n.broker.label})]}),s.jsxs("div",{children:[s.jsx("span",{className:"agent-config-label",children:"Messages"}),s.jsx("strong",{children:n.broker.messageCount})]}),n.integrations.map(a=>s.jsxs("div",{className:"agent-config-detail-wide",children:[s.jsx("span",{className:"agent-config-label",children:a.name}),s.jsx("span",{children:a.detail})]},a.id))]})]})]}),s.jsxs("div",{className:"sys-panel",children:[s.jsx("div",{className:"sys-section-head",children:s.jsxs("div",{children:[s.jsx("h3",{className:"sys-section-title",children:"Known Missing Pieces"}),s.jsx("p",{className:"sys-section-subtitle",children:"The configuration model is now visible; these are the next root-cause surfaces to build."})]})}),s.jsx("div",{className:"agent-config-gap-list",children:n.gaps.map(a=>s.jsx("span",{children:a},a))})]})]})]})})]})}export{be as AgentConfigurationScreen};
|