@schlenkr/ragents 0.1.19 → 0.1.20
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/apps/server/src/host-api.json +6 -2
- package/apps/server/src/host-api.ts +3 -2
- package/apps/server/src/host-web.ts +3 -0
- package/apps/server/src/plugin-support/actor-programs/contract.ts +0 -3
- package/apps/server/src/plugin-support/removed-layout.ts +94 -0
- package/apps/server/src/ragents/engine.ts +2 -1
- package/apps/server/src/title-compactor.ts +5 -7
- package/apps/web/dist/assets/highlighted-body-KPVGNVTW-k67VKdbw.js +1 -0
- package/apps/web/dist/assets/main-CVjIz7BS.js +674 -0
- package/apps/web/dist/help/guide-clients.html +22 -42
- package/apps/web/dist/help/guide-clients.md +24 -45
- package/apps/web/dist/help/guide-functions.html +1 -1
- package/apps/web/dist/help/guide-functions.md +1 -1
- package/apps/web/dist/help/guide-getting-started.html +14 -22
- package/apps/web/dist/help/guide-getting-started.md +17 -24
- package/apps/web/dist/help/guide-ideas.html +1 -1
- package/apps/web/dist/help/guide-ideas.md +1 -1
- package/apps/web/dist/help/guide-plugins.html +1 -1
- package/apps/web/dist/help/guide-plugins.md +1 -1
- package/apps/web/dist/help/guide-programs.html +1 -1
- package/apps/web/dist/help/guide-programs.md +1 -1
- package/apps/web/dist/help/index.html +12 -79
- package/apps/web/dist/help/mini-app.css +8 -502
- package/apps/web/dist/host-web.json +28 -23
- package/apps/web/dist/index.html +2 -3
- package/apps/web/dist/run-panel.html +3 -4
- package/apps/web/src/Overview.tsx +4 -143
- package/apps/web/src/PluginChat.tsx +22 -116
- package/apps/web/src/PluginRegistry.tsx +4 -9
- package/apps/web/src/RunPreparationChat.tsx +4 -1
- package/apps/web/src/host-modules.ts +2 -0
- package/apps/web/src/main.tsx +23 -3
- package/apps/web/src/panel/RunLine.tsx +5 -2
- package/apps/web/src/panel/RunsPage.tsx +6 -6
- package/apps/web/src/panel/StartPage.tsx +6 -5
- package/apps/web/src/panel/contract.ts +3 -0
- package/apps/web/src/panel/page-props.ts +2 -0
- package/apps/web/src/run-apps.ts +34 -0
- package/apps/web/src/run-overview.ts +0 -27
- package/apps/web/src/run-panel/PanelContributions.tsx +41 -0
- package/apps/web/src/run-panel/RunPanelApp.tsx +172 -91
- package/apps/web/src/run-panel/RunPanelMenu.tsx +4 -3
- package/apps/web/src/run-panel/RunPanelWorkspace.tsx +8 -2
- package/apps/web/src/run-panel/clipboard.ts +17 -14
- package/apps/web/src/run-panel/host-contract.ts +8 -9
- package/apps/web/src/run-panel/host.ts +5 -31
- package/apps/web/src/run-panel/input-bridge.ts +15 -7
- package/bundles/ragents.activity/ragents-bundle.json +2 -2
- package/bundles/ragents.actor-programs/prompt.hbs +4 -5
- package/bundles/ragents.actor-programs/ragents-bundle.json +4 -14
- package/bundles/ragents.actor-programs/server/index.js +2 -14
- package/bundles/ragents.actor-programs/server/index.js.map +2 -2
- package/bundles/ragents.actor-programs/web/classes.json +1 -1
- package/bundles/ragents.actor-programs/web/index.js +1 -3
- package/bundles/ragents.actor-programs/web/index.js.map +4 -4
- package/bundles/ragents.ask/ragents-bundle.json +2 -2
- package/bundles/ragents.browser/ragents-bundle.json +2 -2
- package/bundles/ragents.documents/ragents-bundle.json +2 -2
- package/bundles/ragents.lsp-fsharp/ragents-bundle.json +2 -2
- package/bundles/ragents.lsp-roslyn/ragents-bundle.json +2 -2
- package/bundles/ragents.lsp-typescript/ragents-bundle.json +2 -2
- package/bundles/ragents.model-relay/ragents-bundle.json +2 -2
- package/bundles/ragents.orchestration/ragents-bundle.json +15 -41
- package/bundles/ragents.orchestration/server/index.js +10 -249
- package/bundles/ragents.orchestration/server/index.js.map +4 -4
- package/bundles/ragents.orchestration/web/chunks/chunk-KU7O6MEX.js +2 -0
- package/bundles/ragents.orchestration/web/chunks/chunk-KU7O6MEX.js.map +7 -0
- package/bundles/ragents.orchestration/web/classes.json +1 -1
- package/bundles/ragents.orchestration/web/exports/web/program-slot.js +1 -1
- package/bundles/ragents.orchestration/web/index.js +10 -18
- package/bundles/ragents.orchestration/web/index.js.map +4 -4
- package/bundles/ragents.overseer/ragents-bundle.json +3 -3
- package/bundles/ragents.overseer/server/index.js +0 -1
- package/bundles/ragents.overseer/server/index.js.map +2 -2
- package/bundles/ragents.processes/ragents-bundle.json +2 -2
- package/bundles/ragents.product/ragents-bundle.json +2 -2
- package/bundles/ragents.profile-distribution/ragents-bundle.json +2 -2
- package/bundles/ragents.reference/ragents-bundle.json +3 -3
- package/bundles/ragents.reference/run-scripts/balcony-wizard/RUN.md +1 -1
- package/bundles/ragents.reference/run-scripts/balcony-wizard/src/server.ts +1 -2
- package/bundles/ragents.reference/run-scripts/balcony-wizard/tests/program.test.ts +6 -7
- package/bundles/ragents.reference/run-scripts/conversation-circle/RUN.md +3 -3
- package/bundles/ragents.reference/run-scripts/conversation-circle/src/server.ts +3 -13
- package/bundles/ragents.reference/run-scripts/conversation-circle/tests/helpers.ts +1 -1
- package/bundles/ragents.reference/run-scripts/conversation-circle/tests/program.test.ts +1 -6
- package/bundles/ragents.reference/run-scripts/learning-afternoon/src/server.ts +1 -15
- package/bundles/ragents.reference/run-scripts/learning-afternoon/tests/program.test.ts +1 -1
- package/bundles/ragents.reference/run-scripts/moderated-round/tests/helpers.ts +1 -1
- package/bundles/ragents.reference/run-scripts/quick-note/RUN.md +1 -1
- package/bundles/ragents.reference/run-scripts/quick-note/src/server.ts +1 -2
- package/bundles/ragents.reference/run-scripts/quick-note/tests/program.test.ts +0 -2
- package/bundles/ragents.reference/run-scripts/run-roster/RUN.md +2 -2
- package/bundles/ragents.reference/run-scripts/run-roster/src/server.ts +1 -2
- package/bundles/ragents.reference/run-scripts/run-roster/tests/program.test.ts +0 -2
- package/bundles/ragents.reference/run-scripts/shared-actor-list/src/server.ts +1 -1
- package/bundles/ragents.reference/run-scripts/shared-actor-list/tests/helpers.ts +1 -1
- package/bundles/ragents.reference/run-scripts/word-game/src/contract.ts +1 -1
- package/bundles/ragents.reference/run-scripts/word-game/src/server.ts +0 -1
- package/bundles/ragents.reference/run-scripts/word-game/tests/program.test.ts +1 -2
- package/bundles/ragents.reference/skills/80-actor-text-analysis/SKILL.md +1 -1
- package/bundles/ragents.reference/skills/90-actor-notes/SKILL.md +1 -1
- package/bundles/ragents.todo/ragents-bundle.json +2 -2
- package/bundles/ragents.transcript/ragents-bundle.json +2 -2
- package/bundles/ragents.watch/ragents-bundle.json +2 -2
- package/bundles/ragents.workspace/ragents-bundle.json +2 -2
- package/package.json +8 -8
- package/packages/agent/dist/core/agent-settings.d.ts +1 -1
- package/packages/ai/dist/types.d.ts +2 -1
- package/packages/ragents/src/runtime/journal.ts +4 -0
- package/plugins/ragents.actor-programs/prompt.hbs +4 -5
- package/plugins/ragents.actor-programs/server/access-projections.ts +1 -1
- package/plugins/ragents.actor-programs/server/index.ts +0 -2
- package/plugins/ragents.actor-programs/server/runtime.ts +2 -10
- package/plugins/ragents.actor-programs/web/ActorViewFrame.tsx +5 -20
- package/plugins/ragents.actor-programs/web/AppsPanel.tsx +3 -79
- package/plugins/ragents.actor-programs/web/EmbeddedApps.tsx +0 -9
- package/plugins/ragents.actor-programs/web/api.ts +0 -20
- package/plugins/ragents.actor-programs/web/context.ts +0 -3
- package/plugins/ragents.actor-programs/web/index.tsx +0 -9
- package/plugins/ragents.orchestration/ragents-plugin.json +1 -2
- package/plugins/ragents.orchestration/server/index.ts +1 -11
- package/plugins/ragents.orchestration/web/ActorChat.tsx +1 -1
- package/plugins/ragents.orchestration/web/ActorChatControls.tsx +1 -1
- package/plugins/ragents.orchestration/web/FlowInspector.tsx +2 -4
- package/plugins/ragents.orchestration/web/InspectionPanel.tsx +21 -0
- package/plugins/ragents.orchestration/web/index.tsx +13 -9
- package/plugins/ragents.orchestration/web/program-slot.ts +0 -3
- package/plugins/ragents.orchestration/web/run-panel/AddresseeControl.tsx +15 -36
- package/plugins/ragents.orchestration/web/run-panel/RunPanel.tsx +76 -451
- package/plugins/ragents.orchestration/web/run-panel/run-panel-actors.ts +0 -27
- package/plugins/ragents.orchestration/web/run-panel/run-panel-state.ts +7 -40
- package/plugins/ragents.overseer/server/coordinator-prompt.ts +0 -1
- package/plugins/ragents.reference/examples.ts +1 -2
- package/plugins/ragents.reference/run-scripts/balcony-wizard/RUN.md +1 -1
- package/plugins/ragents.reference/run-scripts/balcony-wizard/src/server.ts +1 -2
- package/plugins/ragents.reference/run-scripts/balcony-wizard/tests/program.test.ts +6 -7
- package/plugins/ragents.reference/run-scripts/conversation-circle/RUN.md +3 -3
- package/plugins/ragents.reference/run-scripts/conversation-circle/src/server.ts +3 -13
- package/plugins/ragents.reference/run-scripts/conversation-circle/tests/helpers.ts +1 -1
- package/plugins/ragents.reference/run-scripts/conversation-circle/tests/program.test.ts +1 -6
- package/plugins/ragents.reference/run-scripts/learning-afternoon/src/server.ts +1 -15
- package/plugins/ragents.reference/run-scripts/learning-afternoon/tests/program.test.ts +1 -1
- package/plugins/ragents.reference/run-scripts/moderated-round/tests/helpers.ts +1 -1
- package/plugins/ragents.reference/run-scripts/quick-note/RUN.md +1 -1
- package/plugins/ragents.reference/run-scripts/quick-note/src/server.ts +1 -2
- package/plugins/ragents.reference/run-scripts/quick-note/tests/program.test.ts +0 -2
- package/plugins/ragents.reference/run-scripts/run-roster/RUN.md +2 -2
- package/plugins/ragents.reference/run-scripts/run-roster/src/server.ts +1 -2
- package/plugins/ragents.reference/run-scripts/run-roster/tests/program.test.ts +0 -2
- package/plugins/ragents.reference/run-scripts/shared-actor-list/src/server.ts +1 -1
- package/plugins/ragents.reference/run-scripts/shared-actor-list/tests/helpers.ts +1 -1
- package/plugins/ragents.reference/run-scripts/word-game/src/contract.ts +1 -1
- package/plugins/ragents.reference/run-scripts/word-game/src/server.ts +0 -1
- package/plugins/ragents.reference/run-scripts/word-game/tests/program.test.ts +1 -2
- package/plugins/ragents.reference/skills/80-actor-text-analysis/SKILL.md +1 -1
- package/plugins/ragents.reference/skills/90-actor-notes/SKILL.md +1 -1
- package/plugins/ragents.reference/walkthroughs.ts +13 -14
- package/apps/web/dist/assets/highlighted-body-KPVGNVTW-BwD4uYEe.js +0 -1
- package/apps/web/dist/assets/main-KBrc5Q77.js +0 -11
- package/apps/web/dist/assets/mermaid-HWGCJPDP-CSCkaArr.js +0 -608
- package/apps/web/dist/assets/runPanel-BjG5NBKm.js +0 -26
- package/apps/web/src/App.tsx +0 -318
- package/apps/web/src/SessionList.tsx +0 -157
- package/apps/web/src/SurfaceShortcuts.tsx +0 -60
- package/apps/web/src/WorkspacePanel.tsx +0 -309
- package/apps/web/src/run-panel.tsx +0 -52
- package/bundles/ragents.orchestration/server/chunks/chunk-QS3WJ3D7.js +0 -11
- package/bundles/ragents.orchestration/server/chunks/chunk-QS3WJ3D7.js.map +0 -7
- package/bundles/ragents.orchestration/server/exports/server/contract.js +0 -9
- package/bundles/ragents.orchestration/server/exports/server/contract.js.map +0 -7
- package/bundles/ragents.orchestration/surface.hbs +0 -39
- package/bundles/ragents.orchestration/web/chunks/chunk-CFMJD5ZI.js +0 -2
- package/bundles/ragents.orchestration/web/chunks/chunk-CFMJD5ZI.js.map +0 -7
- package/bundles/ragents.orchestration/web/chunks/chunk-HOBLI364.js +0 -2
- package/bundles/ragents.orchestration/web/chunks/chunk-HOBLI364.js.map +0 -7
- package/bundles/ragents.orchestration/web/chunks/chunk-UCIMT2R4.js +0 -2
- package/bundles/ragents.orchestration/web/chunks/chunk-UCIMT2R4.js.map +0 -7
- package/bundles/ragents.orchestration/web/chunks/chunk-XGPPQCZR.js +0 -2
- package/bundles/ragents.orchestration/web/chunks/chunk-XGPPQCZR.js.map +0 -7
- package/bundles/ragents.orchestration/web/exports/web/surface-entities.js +0 -2
- package/bundles/ragents.orchestration/web/exports/web/surface-entities.js.map +0 -7
- package/bundles/ragents.orchestration/web/exports/web/tile-docking.js +0 -2
- package/bundles/ragents.orchestration/web/exports/web/tile-docking.js.map +0 -7
- package/plugins/ragents.actor-programs/web/ExpandIcon.tsx +0 -5
- package/plugins/ragents.actor-programs/web/FullscreenHost.tsx +0 -31
- package/plugins/ragents.orchestration/contract.ts +0 -51
- package/plugins/ragents.orchestration/server/contract.ts +0 -14
- package/plugins/ragents.orchestration/server/surface-tool.ts +0 -198
- package/plugins/ragents.orchestration/surface.hbs +0 -39
- package/plugins/ragents.orchestration/tiled-layout.ts +0 -55
- package/plugins/ragents.orchestration/web/ActorChatPreview.tsx +0 -29
- package/plugins/ragents.orchestration/web/ActorShortcut.tsx +0 -74
- package/plugins/ragents.orchestration/web/ActorSurfaceControls.tsx +0 -130
- package/plugins/ragents.orchestration/web/ActorTile.tsx +0 -23
- package/plugins/ragents.orchestration/web/Center.tsx +0 -133
- package/plugins/ragents.orchestration/web/SurfaceTiles.tsx +0 -47
- package/plugins/ragents.orchestration/web/TiledSurface.tsx +0 -280
- package/plugins/ragents.orchestration/web/actor-header-settings.ts +0 -41
- package/plugins/ragents.orchestration/web/run-panel/RunPanelSettings.tsx +0 -50
- package/plugins/ragents.orchestration/web/run-panel/run-panel-settings.ts +0 -47
- package/plugins/ragents.orchestration/web/run-panel/sheet-status.ts +0 -30
- package/plugins/ragents.orchestration/web/surface-entities.ts +0 -21
- package/plugins/ragents.orchestration/web/surface-view-settings.ts +0 -42
- package/plugins/ragents.orchestration/web/tile-docking.ts +0 -105
- package/plugins/ragents.orchestration/web/tiled-view-settings.ts +0 -74
- /package/apps/web/dist/assets/{mermaid-HWGCJPDP-BPn4aV2r.css → main-BPn4aV2r.css} +0 -0
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
|
-
"sources": ["
|
|
4
|
-
"sourcesContent": ["import { read } from \"ragents-host-read:read\";\nexport default read(\"@ragents/web/AccessContext\", \"useAccess\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"react-dom\", \"createPortal\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"@ragents/engine/src/http/contracts\", \"handleKey\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"@ragents/engine/src/http/contracts\", \"runContracts\");\n", "import { handleKey } from \"@ragents/engine/src/http/contracts\";\nimport { surfaceTileNodeOf } from \"./tiled-layout.js\";\n\nexport const ORCHESTRATION_PLUGIN_ID = \"ragents.orchestration\";\n\nexport type SurfaceEntity =\n | { kind: \"actor\"; handle: string }\n | { kind: \"app\"; id: string };\n\nexport type SurfaceTileNode =\n | { entity: string; chatInput?: boolean }\n | { direction: \"horizontal\" | \"vertical\"; weights: [number, number]; children: [SurfaceTileNode, SurfaceTileNode] };\n\nexport type SurfaceLayout = {\n root: SurfaceTileNode | null;\n};\n\nconst isRecord = (value: unknown): value is Record<string, unknown> => typeof value === \"object\" && value !== null && !Array.isArray(value);\n\nexport const surfaceEntityOf = (text: string): SurfaceEntity => {\n const trimmed = text.trim();\n if (trimmed.startsWith(\"@\")) {\n const handle = handleKey(trimmed);\n if (!handle || /\\s/.test(handle)) throw new Error(`Entity ${JSON.stringify(text)}: a handle is missing after the @`);\n return { kind: \"actor\", handle };\n }\n const match = /^app:(.+)$/s.exec(trimmed);\n if (!match) {\n throw new Error(`Entity ${JSON.stringify(text)}: expected @handle or app:<id>`);\n }\n const id = match[1].trim();\n if (!id) throw new Error(`Entity ${JSON.stringify(text)}: the ID after the colon is empty`);\n return { kind: \"app\", id };\n};\n\nexport const surfaceEntityKey = (entity: SurfaceEntity): string =>\n entity.kind === \"actor\" ? `@${entity.handle}` : `app:${entity.id}`;\n\nconst LEGACY_KEYS = [\"nodes\", \"shapes\", \"lines\", \"mode\"] as const;\n\n/** Parses and validates a tile layout; throws an error naming the first violation. */\nexport const surfaceLayoutOf = (value: unknown): SurfaceLayout => {\n if (!isRecord(value)) throw new Error(\"The arrangement must be an object with root\");\n const legacy = LEGACY_KEYS.filter((key) => key in value);\n if (legacy.length > 0) {\n throw new Error(`The program arrangement comes from the removed free surface (${legacy.join(\", \")}); `\n + \"canvas_layout_replace with root sets it anew as a tile layout\");\n }\n if (!(\"root\" in value)) throw new Error(\"root is missing; expected a tile, a split or null\");\n return { root: value.root === null ? null : surfaceTileNodeOf(value.root) };\n};\n", "import { surfaceEntityKey, surfaceEntityOf, type SurfaceTileNode } from \"./contract.js\";\n\nexport type { SurfaceTileNode } from \"./contract.js\";\n\nexport const MAX_SURFACE_TILE_DEPTH = 16;\nexport const MAX_SURFACE_TILES = 64;\n\nexport const surfaceTileNodeOf = (input: unknown): SurfaceTileNode => {\n const entities = new Set<string>();\n const parse = (value: unknown, where: string, depth: number): SurfaceTileNode => {\n if (depth > MAX_SURFACE_TILE_DEPTH) throw new Error(`${where}: at most ${MAX_SURFACE_TILE_DEPTH} nested splits are allowed`);\n if (typeof value !== \"object\" || value === null || Array.isArray(value)) throw new Error(`${where} must be a tile or a split`);\n const node = value as Record<string, unknown>;\n if (Object.hasOwn(node, \"entity\")) {\n if (Object.keys(node).some((key) => key !== \"entity\" && key !== \"chatInput\")) throw new Error(`${where}: a tile carries only entity and chatInput; a split direction, weights and children`);\n if (typeof node.entity !== \"string\") throw new Error(`${where}.entity must be @handle or app:<name>/<view>`);\n const entity = surfaceEntityOf(node.entity);\n const key = surfaceEntityKey(entity);\n if (node.chatInput !== undefined && (entity.kind !== \"actor\" || typeof node.chatInput !== \"boolean\")) {\n throw new Error(`${where}.chatInput is only allowed for actors, as a boolean`);\n }\n if (entities.has(key)) throw new Error(`${where}: ${key} is placed as a tile more than once`);\n entities.add(key);\n if (entities.size > MAX_SURFACE_TILES) throw new Error(`At most ${MAX_SURFACE_TILES} tiles are allowed`);\n return node.chatInput === undefined ? { entity: key } : { entity: key, chatInput: node.chatInput as boolean };\n }\n if (Object.keys(node).some((key) => ![\"direction\", \"weights\", \"children\"].includes(key))) throw new Error(`${where}: a split carries only direction, weights and children`);\n if (node.direction !== \"horizontal\" && node.direction !== \"vertical\") throw new Error(`${where}.direction must be horizontal or vertical`);\n if (!Array.isArray(node.weights) || node.weights.length !== 2 || node.weights.some((weight) => typeof weight !== \"number\" || !Number.isFinite(weight) || weight <= 0)) {\n throw new Error(`${where}.weights must contain exactly two finite positive numbers`);\n }\n if (!Array.isArray(node.children) || node.children.length !== 2) throw new Error(`${where}.children must contain exactly two tiles or splits`);\n return {\n direction: node.direction,\n weights: [node.weights[0], node.weights[1]],\n children: [parse(node.children[0], `${where}.children[0]`, depth + 1), parse(node.children[1], `${where}.children[1]`, depth + 1)],\n };\n };\n return parse(input, \"root\", 0);\n};\n\n/** A tile hides the chat composer of its actor only when its leaf says chatInput: false. */\nexport const surfaceTileChatInput = (root: SurfaceTileNode | null | undefined, entity: string): boolean =>\n !root ? true : \"entity\" in root\n ? root.entity !== entity || root.chatInput !== false\n : surfaceTileChatInput(root.children[0], entity) && surfaceTileChatInput(root.children[1], entity);\n\nexport const surfaceTileEntities = (root: SurfaceTileNode | null | undefined): string[] =>\n !root ? [] : \"entity\" in root ? [root.entity] : root.children.flatMap(surfaceTileEntities);\n\nexport const mapSurfaceTileEntities = (root: SurfaceTileNode, resolve: (entity: string) => string): SurfaceTileNode =>\n \"entity\" in root ? { ...root, entity: resolve(root.entity) } : {\n ...root,\n children: [mapSurfaceTileEntities(root.children[0], resolve), mapSurfaceTileEntities(root.children[1], resolve)],\n };\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"@ragents/web/ui\", \"Alert\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"@ragents/web/ui\", \"AlertDescription\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"@ragents/web/ui\", \"Badge\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"@ragents/web/ui\", \"Button\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"@ragents/web/ui\", \"Empty\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"@ragents/web/ui\", \"EmptyDescription\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"@ragents/web/ui\", \"EmptyHeader\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"@ragents/web/ui\", \"EmptyTitle\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"@ragents/web/ui\", \"Input\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"@ragents/web/ui\", \"Popover\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"@ragents/web/ui\", \"PopoverContent\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"@ragents/web/ui\", \"SectionLabel\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"@ragents/web/ui\", \"Select\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"@ragents/web/ui\", \"SelectContent\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"@ragents/web/ui\", \"SelectItem\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"@ragents/web/ui\", \"SelectTrigger\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"@ragents/web/ui\", \"SelectValue\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"@ragents/web/ui\", \"Spinner\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"@ragents/web/ui\", \"StartupNotice\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"@ragents/web/ui\", \"StopGlyph\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"@ragents/web/ui\", \"Tabs\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"@ragents/web/ui\", \"TabsContent\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"@ragents/web/ui\", \"TabsList\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"@ragents/web/ui\", \"TabsTrigger\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"@ragents/web/ui\", \"cn\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"quassel\", \"ChatInputToolbar\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"quassel\", \"ChatMessages\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"quassel\", \"ChatPanel\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"@ragents/web/PluginRegistry\", \"SurfaceControllerProvider\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"@ragents/web/PluginRegistry\", \"useActionRenderer\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"@ragents/web/PluginRegistry\", \"useSurfaceController\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"@ragents/web/PluginRegistry\", \"useToolRenderer\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"@ragents/web/chat-view-settings\", \"ChatViewSwitches\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"@ragents/web/chat-view-settings\", \"useChatViewSettings\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"@ragents/web/actor-conversation\", \"actorChatMessages\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"@ragents/web/actor-conversation\", \"actorInputLabel\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"react/jsx-runtime\", \"Fragment\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"react/jsx-runtime\", \"jsx\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"react/jsx-runtime\", \"jsxs\");\n", "import { useAccess } from \"@ragents/web/AccessContext\";\nimport { Empty, EmptyDescription, EmptyHeader, EmptyTitle } from \"@ragents/web/ui\";\nimport { useCallback, useMemo } from \"react\";\nimport { ChatMessages, type Message } from \"quassel\";\nimport { useActionRenderer, useToolRenderer } from \"@ragents/web/PluginRegistry\";\nimport { useChatViewSettings } from \"@ragents/web/chat-view-settings\";\nimport { actorChatMessages } from \"@ragents/web/actor-conversation\";\nimport type { FlowSelection } from \"./FlowInspector\";\nimport type { RunActor, RunView } from \"@ragents/web/run-view\";\n\nconst emptyMessages: readonly Message[] = [];\n\nexport function ActorChat({ actor, view, presentation, display = presentation, primaryMessages = emptyMessages, conversation, historyError, running = false, className, onNavigate, scrollerRef }: {\n actor: RunActor;\n view: RunView;\n presentation: \"surface\" | \"inspector\";\n /** Key of the display surface for the remembered detail level; defaults to the presentation. */\n display?: string;\n primaryMessages?: readonly Message[];\n conversation?: readonly Message[];\n historyError?: string;\n running?: boolean;\n className?: string;\n onNavigate: (selection: FlowSelection) => void;\n scrollerRef?: (element: HTMLDivElement | null) => void;\n}) {\n const inspect = useAccess().can(\"runs.inspect\");\n const chatView = useChatViewSettings(view.id, actor.id, \"agents\", display);\n const renderTool = useToolRenderer();\n const renderAction = useActionRenderer();\n const configuredMode = chatView.detailMode;\n const detailMode = inspect || configuredMode === \"off\" ? configuredMode : \"current\";\n const messages = useMemo(() => actorChatMessages(view, actor, primaryMessages, conversation), [view, actor, primaryMessages, conversation]);\n const openLink = useCallback((href: string) => {\n const match = /^flow:(actor|input|turn|subscription|action|artifact)\\/(.+)$/.exec(href);\n if (!match) return false;\n if (!inspect) return true;\n onNavigate({ type: match[1] as FlowSelection[\"type\"], id: match[2] });\n return true;\n }, [inspect, onNavigate]);\n return <>\n {historyError && <p className=\"my-1.5 text-[0.72rem] text-destructive\" role=\"alert\">{historyError}</p>}\n <ChatMessages\n className={className}\n detailMode={detailMode}\n emptyState={<Empty><EmptyHeader><EmptyTitle>{actor.kind === \"script\" ? \"No history yet\" : \"No conversation yet\"}</EmptyTitle><EmptyDescription>{actor.kind === \"script\" ? \"Program inputs and their processing appear here.\" : \"Write a message to start the conversation.\"}</EmptyDescription></EmptyHeader></Empty>}\n messages={messages}\n renderAction={renderAction}\n renderTool={renderTool}\n owner={actor.id}\n onLinkClick={openLink}\n running={running}\n showTimestamps={chatView.showTimestamps}\n stepsExpandable={inspect && chatView.stepsExpandable}\n scrollerRef={scrollerRef}\n />\n </>;\n}\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"@ragents/web/api\", \"interruptActorTurn\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"@ragents/web/api\", \"sendActorMessage\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"@ragents/web/chat/StoppedActorNotice\", \"StoppedActorNotice\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"@ragents/web/chat/useAttachmentCapabilities\", \"useAttachmentCapabilities\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"@ragents/web/chat/chat-target\", \"programChatNotice\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"@ragents/web/chat/chat-target\", \"runIsWorking\");\n", "import { useAccess } from \"@ragents/web/AccessContext\";\nimport { useState, type ReactNode } from \"react\";\nimport { interruptActorTurn, sendActorMessage } from \"@ragents/web/api\";\nimport { ChatViewSwitches, useChatViewSettings } from \"@ragents/web/chat-view-settings\";\nimport { ChatInputToolbar } from \"quassel\";\nimport { StoppedActorNotice } from \"@ragents/web/chat/StoppedActorNotice\";\nimport { useAttachmentCapabilities } from \"@ragents/web/chat/useAttachmentCapabilities\";\nimport { programChatNotice } from \"@ragents/web/chat/chat-target\";\nimport type { RunActor, RunView } from \"@ragents/web/run-view\";\n\nconst controlsClass = \"flex flex-shrink-0 items-center gap-2 border-t border-border-soft px-workspace-inset pt-2 pb-2.5\";\n\nconst noteClass = \"mt-1.5 text-[0.7rem] text-muted-foreground\";\n\nexport function ActorChatControls({ actor, view, composerVisible = true, presentation = \"inspector\", display = presentation, running = false, toolbarLeft, toolbarRight }: {\n actor: RunActor;\n view: RunView;\n composerVisible?: boolean;\n presentation?: \"surface\" | \"inspector\" | \"panel\";\n display?: string;\n running?: boolean;\n toolbarLeft?: ReactNode;\n toolbarRight?: ReactNode;\n}) {\n const writable = useAccess().can(\"runs.write\");\n const [stopError, setStopError] = useState<string>();\n const chatView = useChatViewSettings(view.id, actor.id, \"agents\", display);\n const attachments = useAttachmentCapabilities(view.id, actor.id, JSON.stringify(actor.execution?.driver.config));\n const disabledReason = !writable ? \"You have read access to this run.\" : undefined;\n const switches = <ChatViewSwitches settings={chatView} />;\n if (!composerVisible || actor.kind === \"human\") return <div className={controlsClass}>{toolbarLeft}{switches}</div>;\n if (actor.kind === \"script\") return <div className={controlsClass}><p className={noteClass}>{programChatNotice}</p>{toolbarLeft}{switches}</div>;\n if (actor.lifecycle?.kind === \"stopped\") return <div className={presentation === \"inspector\" ? \"flex-shrink-0 px-5 pt-2.5 pb-3.5\" : undefined}>\n <StoppedActorNotice actor={actor} runId={view.id} toolbar={<>{toolbarLeft}{switches}</>} />\n </div>;\n return <div className={presentation === \"inspector\" ? \"flex-shrink-0 px-5 pt-2.5 pb-3.5\" : undefined}>\n <ChatInputToolbar\n {...attachments}\n disabled={disabledReason !== undefined}\n maxRows={4}\n onSend={(text, files) => sendActorMessage(view.id, actor.id, text, files)}\n onStop={writable && actor.lifecycle?.kind === \"running\" ? () => {\n setStopError(undefined);\n void interruptActorTurn(view.id, actor.id).catch((error: unknown) =>\n setStopError(error instanceof Error ? error.message : String(error)));\n } : undefined}\n rows={1}\n running={running}\n texts={{ placeholder: disabledReason ?? `Message to @${actor.handle} ...` }}\n toolbarLeft={<>\n {toolbarLeft}\n {switches}\n {presentation === \"inspector\" && <span className=\"truncate text-[0.7rem] text-muted-foreground\">to @{actor.handle}</span>}\n </>}\n toolbarRight={toolbarRight}\n />\n {stopError && <p className={noteClass} role=\"alert\">{stopError}</p>}\n {disabledReason && presentation === \"inspector\" && <p className={noteClass}>{disabledReason}</p>}\n </div>;\n}\n", "import { ActorChat } from \"./ActorChat\";\nimport { ActorChatControls } from \"./ActorChatControls\";\nimport { ChatPanel, type Message } from \"quassel\";\nimport { memo, useCallback } from \"react\";\nimport type { FlowSelection } from \"./FlowInspector\";\nimport type { RunActor, RunView } from \"@ragents/web/run-view\";\n\nexport const ActorChatPreview = memo(function ActorChatPreview({ actor, view, primaryMessages, conversation, historyError, chatInput = true, running = false, onNavigate }: {\n actor: RunActor;\n view: RunView;\n primaryMessages?: readonly Message[];\n conversation?: readonly Message[];\n historyError?: string;\n chatInput?: boolean;\n running?: boolean;\n onNavigate: (selection: FlowSelection) => void;\n}) {\n const focusableScroller = useCallback((element: HTMLDivElement | null) => {\n if (!element) return;\n element.tabIndex = 0;\n element.setAttribute(\"role\", \"region\");\n element.setAttribute(\"aria-label\", `Chat history of @${actor.handle}`);\n }, [actor.handle]);\n return <div className=\"flex min-h-[106px] w-full min-w-0 flex-1 flex-col overflow-hidden rounded-b-[16px] text-left\" data-surface-scroll=\"true\">\n <ChatPanel className=\"flex-1\" composer={<ActorChatControls actor={actor} view={view} composerVisible={chatInput} presentation=\"surface\" running={running} />}>\n <ActorChat actor={actor} view={view} presentation=\"surface\" primaryMessages={primaryMessages} conversation={conversation} historyError={historyError} running={running} onNavigate={onNavigate} scrollerRef={focusableScroller} />\n </ChatPanel>\n </div>;\n});\n", "export const ORCHESTRATION_PLUGIN_ID = \"ragents.orchestration\";\n\n/** Button in the status bar: full bar height, no rounding, calm surface. */\nexport const statusControlClass = \"flex h-full min-w-statusbar items-center justify-center self-stretch whitespace-nowrap px-2.5 text-[0.7rem] text-foreground hover:bg-primary/12 aria-expanded:bg-primary/12 focus-visible:outline-2 focus-visible:outline-primary focus-visible:-outline-offset-2 disabled:opacity-50 disabled:cursor-not-allowed\";\n\n/** Frame for the plugin contributions of an actor card; a contribution brings no spacing of its own. */\nexport const cardSectionsClass = \"grid gap-2.5 border-t border-border-soft px-3 pt-2.5 pb-2.5 empty:hidden\";\n", "import type { CardSectionContribution, EntityReference, SessionContext, SessionNavigation } from \"@ragents/web/PluginRegistry\";\nimport { ActorChatPreview } from \"./ActorChatPreview\";\nimport { cardSectionsClass } from \"./constants\";\nimport type { RunActor, RunView } from \"@ragents/web/run-view\";\n\nexport function ActorTile({ actor, view, cardSections, chatInput, session, navigation, onSelect }: {\n actor: RunActor;\n view: RunView;\n cardSections: readonly CardSectionContribution[];\n chatInput?: boolean;\n session: SessionContext;\n navigation: SessionNavigation;\n onSelect: (selection: EntityReference) => void;\n}) {\n return <div className=\"flex flex-col overflow-hidden has-[>[data-slot=card-sections]:not(:empty)]:min-h-[260px] has-[[data-chat=actions]:not(:empty)]:min-h-[260px]\">\n <ActorChatPreview actor={actor} view={view} chatInput={chatInput} running={actor.lifecycle?.kind === \"running\"}\n conversation={session.actorConversations?.[actor.id]} historyError={session.conversationError}\n onNavigate={onSelect} primaryMessages={actor.id === view.primaryActorId ? session.messages : undefined} />\n <div className={`${cardSectionsClass} max-h-[45%] flex-[0_1_auto] overflow-auto overscroll-contain`} data-slot=\"card-sections\">\n {cardSections.map(({ id, Section }) => <Section actor={actor} key={id} navigation={navigation} session={session} />)}\n </div>\n </div>;\n}\n", "/**\n * Converts string to kebab case\n *\n * @param {string} string\n * @returns {string} A kebabized string\n */\nexport const toKebabCase = (string: string) =>\n string?.replace(/([a-z0-9])([A-Z])/g, '$1-$2').toLowerCase();\n", "import { toKebabCase } from './toKebabCase';\nimport type { LucideIconData, LucideIconNode } from '../build/types';\n\n/**\n * Converts legacy `(name, iconNode, aliases?)` icon arguments into icon data object format.\n */\nexport function toLucideIconData(\n iconName: string,\n iconNode: LucideIconNode[],\n aliases: string[] = [],\n): LucideIconData {\n if (iconNode == null) {\n throw new Error('[lucide]: iconNode is required when icon name is used');\n }\n\n return {\n name: toKebabCase(iconName),\n size: 24,\n node: iconNode,\n ...(aliases.length > 0 ? { aliases } : {}),\n };\n}\n", "/**\n * Converts string to camel case\n *\n * @param {string} string\n * @returns {string} A camelized string\n */\nexport const toCamelCase = <T extends string>(string: T) => {\n let out = '';\n let upperNext = false;\n\n for (const ch of string) {\n if (ch === '-' || ch === '_' || ch <= ' ') {\n upperNext = out.length > 0;\n continue;\n }\n\n if (out.length === 0) {\n out += ch.toLowerCase();\n } else {\n out += upperNext ? ch.toUpperCase() : ch;\n }\n\n upperNext = false;\n }\n\n return out as string;\n};\n", "import { CamelToPascal } from '../utility-types';\nimport { toCamelCase } from './toCamelCase';\n\n/**\n * Converts string to pascal case\n *\n * @param {string} string\n * @returns {string} A pascalized string\n */\nexport const toPascalCase = <T extends string>(string: T): CamelToPascal<T> => {\n const camelCase = toCamelCase(string);\n\n return (camelCase.charAt(0).toUpperCase() + camelCase.slice(1)) as CamelToPascal<T>;\n};\n", "/**\n * Merges classes into a single string\n *\n * @param {array} classes\n * @returns {string} A string of classes\n */\nexport const mergeClasses = <ClassType = string | undefined | null>(...classes: ClassType[]) =>\n classes\n .filter((className, index, array) => {\n return (\n Boolean(className) &&\n (className as string).trim() !== '' &&\n array.indexOf(className) === index\n );\n })\n .join(' ')\n .trim();\n", "const defaultAttributes = {\n xmlns: 'http://www.w3.org/2000/svg',\n width: 24,\n height: 24,\n viewBox: '0 0 24 24',\n fill: 'none',\n stroke: 'currentColor',\n 'stroke-width': 2,\n 'stroke-linecap': 'round',\n 'stroke-linejoin': 'round',\n} as const;\n\nexport default defaultAttributes;\n", "import type { LucideBuildParams, LucideIconData, LucideIconNode, SVGProps } from './types';\nimport defaultAttributes from './defaultAttributes';\nimport { mergeClasses } from '../utils/mergeClasses';\n\nfunction isDefined<T>(value: T | null | undefined): value is T {\n return value !== null && value !== undefined;\n}\n\n/**\n * Creates a Lucide icon node (an svgson-like format) from a Lucide icon object.\n *\n * @param icon The icon to build.\n * @param params Additional build parameters.\n */\nfunction buildLucideIconNode(icon: LucideIconData, params: LucideBuildParams = {}): LucideIconNode {\n const attributeNames = params.attributeNames ?? {};\n const getAttributeName = (attributeName: string) =>\n attributeNames[attributeName] ?? attributeName;\n\n const viewBoxWidth = icon.size ?? icon.width ?? defaultAttributes['width'];\n const viewBoxHeight = icon.size ?? icon.height ?? defaultAttributes['height'];\n const aliasClassNames =\n icon.aliases\n ?.filter((alias: string): alias is string => typeof alias === 'string' && alias.trim() !== '')\n .map((alias: string) => `lucide-${alias}`) ?? [];\n const iconClassNames = [...(icon.name ? [`lucide-${icon.name}`] : []), ...aliasClassNames];\n const classNamesFromClassName = params.className?.split(' ').filter(Boolean) ?? [];\n const className =\n params.includeDefaultClasses === false\n ? mergeClasses(...classNamesFromClassName)\n : mergeClasses('lucide', ...iconClassNames, ...classNamesFromClassName);\n\n const calculatedStrokeWidth = params.absoluteStrokeWidth\n ? (Number(params.strokeWidth ?? defaultAttributes['stroke-width']) *\n Number(icon.size ?? icon.width ?? defaultAttributes['width'])) /\n Number(params.size ?? params.width ?? defaultAttributes['width'])\n : (params.strokeWidth ?? defaultAttributes['stroke-width']);\n\n const attributes = {\n ...Object.entries(defaultAttributes).reduce((attrs, [attrName, value]) => {\n attrs[getAttributeName(attrName)] = value;\n return attrs;\n }, {} as SVGProps),\n ...('color' in params &&\n params.color && {\n [getAttributeName('stroke')]: params.color,\n }),\n ...('size' in params &&\n isDefined(params.size) && {\n [getAttributeName('width')]: params.size,\n [getAttributeName('height')]: params.size,\n }),\n ...('width' in params &&\n isDefined(params.width) && {\n [getAttributeName('width')]: params.width,\n }),\n ...('height' in params &&\n isDefined(params.height) && {\n [getAttributeName('height')]: params.height,\n }),\n [getAttributeName('stroke-width')]: calculatedStrokeWidth,\n ...(className && {\n [getAttributeName('class')]: className,\n }),\n [getAttributeName('viewBox')]: `0 0 ${viewBoxWidth} ${viewBoxHeight}`,\n ...(params.hasA11yProp === false\n ? {\n [getAttributeName('aria-hidden')]: 'true',\n }\n : {}),\n ...('attributes' in params && params.attributes),\n };\n\n return [\n 'svg',\n attributes,\n icon.node.map((child): LucideIconNode => {\n const [name, attrs, children] = child;\n const nextAttrs = params.nonScalingStroke\n ? { [getAttributeName('vector-effect')]: 'non-scaling-stroke', ...attrs }\n : attrs;\n\n return children ? [name, nextAttrs, children] : [name, nextAttrs];\n }),\n ];\n}\n\nexport default buildLucideIconNode;\n", "import buildLucideIconNode from './buildLucideIconNode';\nimport type { LucideBuildParams, LucideIconData, LucideIconNode } from './types';\n\n/**\n * Creates a React-compatible Lucide icon node (an svgson-like format) from a Lucide icon object.\n *\n * @param icon The icon to build.\n * @param params Additional build parameters.\n */\nfunction buildLucideIconForReact(\n icon: LucideIconData,\n params: LucideBuildParams = {},\n): LucideIconNode {\n return buildLucideIconNode(icon, {\n ...params,\n attributeNames: {\n ...params.attributeNames,\n class: 'className',\n 'stroke-width': 'strokeWidth',\n 'stroke-linecap': 'strokeLinecap',\n 'stroke-linejoin': 'strokeLinejoin',\n 'vector-effect': 'vectorEffect',\n },\n });\n}\n\nexport default buildLucideIconForReact;\n", "/**\n * Check if a component has an accessibility prop\n *\n * @param {object} props\n * @returns {boolean} Whether the component has an accessibility prop\n */\nexport const hasA11yProp = (props: object) => {\n for (const prop in props) {\n if (prop.startsWith('aria-') || prop === 'role' || prop === 'title') {\n return true;\n }\n }\n\n return false;\n};\n", "'use client';\n\nimport { createContext, createElement, type ReactNode, useContext, useMemo } from 'react';\nimport { LucideProps } from './types';\n\ntype LucideConfig = {\n size: number;\n color: string;\n strokeWidth: number;\n /**\n * @deprecated Use `nonScalingStroke` instead.\n */\n absoluteStrokeWidth: boolean;\n nonScalingStroke: boolean;\n className: string;\n};\n\nconst LucideContext = createContext<LucideProps>({});\n\ntype LucideProviderProps = {\n children: ReactNode;\n} & Partial<LucideConfig>;\n\nexport function LucideProvider({\n children,\n size,\n color,\n strokeWidth,\n absoluteStrokeWidth,\n nonScalingStroke,\n className,\n}: LucideProviderProps) {\n const value = useMemo(\n () => ({\n size,\n color,\n strokeWidth,\n absoluteStrokeWidth,\n nonScalingStroke,\n className,\n }),\n [size, color, strokeWidth, absoluteStrokeWidth, nonScalingStroke, className],\n );\n\n return createElement(LucideContext.Provider, { value }, children);\n}\n\nexport const useLucideContext = () => useContext(LucideContext);\n", "'use client';\n\nimport { createElement, forwardRef } from 'react';\nimport { buildLucideIconForReact, hasA11yProp, mergeClasses } from '@lucide/shared';\nimport { LucideIconData, LucideIconNode, LucideProps } from './types';\nimport { useLucideContext } from './context';\n\ntype IconComponentProps = LucideProps &\n (\n | {\n iconNode: LucideIconNode[];\n icon?: never;\n }\n | {\n icon: LucideIconData;\n iconNode?: never;\n }\n );\n\n/**\n * Lucide icon component\n *\n * @component Icon\n * @param {object} props\n * @param {string} props.color - The color of the icon\n * @param {number} props.size - The size of the icon\n * @param {number} props.strokeWidth - The stroke width of the icon\n * @param {boolean} props.absoluteStrokeWidth - Whether to use absolute stroke width\n * @param {boolean} props.nonScalingStroke - Whether to use non scaling strokes\n * @param {string} props.className - The class name of the icon\n * @param {LucideIconNode[]} props.children - The children of the icon\n * @param {LucideIconNode[]} props.iconNode - The icon node of the icon\n *\n * @returns {ForwardRefExoticComponent} LucideIcon\n */\nconst Icon = forwardRef<SVGSVGElement, IconComponentProps>(\n (\n {\n color,\n size,\n width,\n height,\n strokeWidth,\n absoluteStrokeWidth,\n nonScalingStroke,\n className = '',\n children,\n iconNode = [],\n icon = {\n node: iconNode,\n aliases: [],\n size: 24,\n },\n ...rest\n },\n ref,\n ) => {\n const {\n size: contextSize = 24,\n strokeWidth: contextStrokeWidth = 2,\n absoluteStrokeWidth: contextAbsoluteStrokeWidth = false,\n nonScalingStroke: contextNonScalingStroke = false,\n color: contextColor = 'currentColor',\n className: contextClass = '',\n } = useLucideContext() ?? {};\n\n const hasAccessibleProp = Boolean(children) || hasA11yProp(rest);\n\n const [name, svgAttributes, builtIconNode = []] = buildLucideIconForReact(icon, {\n color: color ?? contextColor,\n width: width ?? size ?? contextSize,\n height: height ?? size ?? contextSize,\n strokeWidth: strokeWidth ?? contextStrokeWidth,\n absoluteStrokeWidth: absoluteStrokeWidth ?? contextAbsoluteStrokeWidth,\n nonScalingStroke: nonScalingStroke ?? contextNonScalingStroke,\n className: mergeClasses(contextClass, className),\n hasA11yProp: hasAccessibleProp,\n attributes: rest,\n });\n\n return createElement(\n name,\n {\n ref,\n ...svgAttributes,\n },\n [\n ...builtIconNode.map(([tag, attrs]) => createElement(tag, attrs)),\n ...(Array.isArray(children) ? children : [children]),\n ],\n );\n },\n);\n\nexport default Icon;\n", "import { createElement, forwardRef } from 'react';\nimport { toLucideIconData, toPascalCase } from '@lucide/shared';\nimport { LucideIcon, LucideIconData, LucideIconNode, LucideProps } from './types';\nimport Icon from './Icon';\n\n/**\n * Creates a Lucide icon component from icon data.\n *\n * @param icon Icon data object.\n * @returns Lucide icon component.\n */\nfunction createLucideIcon(icon: LucideIconData): LucideIcon;\n\n/**\n * Creates a Lucide icon component from the legacy icon arguments.\n *\n * @param iconName Icon name.\n * @param iconNode Icon node.\n * @param aliases Optional icon aliases.\n * @returns Lucide icon component.\n */\nfunction createLucideIcon(\n iconName: string,\n iconNode: LucideIconNode[],\n aliases?: string[],\n): LucideIcon;\n\nfunction createLucideIcon(\n iconDataOrName: LucideIconData | string,\n iconNode: LucideIconNode[] = [],\n aliases: string[] = [],\n): LucideIcon {\n const iconData =\n typeof iconDataOrName === 'string'\n ? toLucideIconData(iconDataOrName, iconNode, aliases)\n : iconDataOrName;\n\n const Component = forwardRef<SVGSVGElement, LucideProps>(({ className, ...props }, ref) =>\n createElement(Icon, {\n ref,\n icon: iconData,\n className,\n ...props,\n }),\n );\n\n if (iconData.name) {\n Component.displayName = toPascalCase(iconData.name);\n }\n\n return Component;\n}\n\nexport default createLucideIcon;\n", "import createLucideIcon from '../createLucideIcon';\nimport type { LucideIconNode, LucideIconData } from '../types';\n\nexport const __iconData: LucideIconData = {\n name: 'arrow-down',\n size: 24,\n node: [\n ['path', { d: 'M12 5v14', key: 's699le' }],\n ['path', { d: 'm19 12-7 7-7-7', key: '1idqje' }],\n ],\n};\n\n/**\n * @deprecated Access `__iconData` instead.\n */\nexport const __iconNode: LucideIconNode[] = __iconData.node;\n\n/**\n * @component @name ArrowDown\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview  - https://lucide.dev/icons/arrow-down\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst ArrowDown = createLucideIcon(__iconData);\n\nexport default ArrowDown;\n", "import createLucideIcon from '../createLucideIcon';\nimport type { LucideIconNode, LucideIconData } from '../types';\n\nexport const __iconData: LucideIconData = {\n name: 'arrow-left',\n size: 24,\n node: [\n ['path', { d: 'm12 19-7-7 7-7', key: '1l729n' }],\n ['path', { d: 'M19 12H5', key: 'x3x0zl' }],\n ],\n};\n\n/**\n * @deprecated Access `__iconData` instead.\n */\nexport const __iconNode: LucideIconNode[] = __iconData.node;\n\n/**\n * @component @name ArrowLeft\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview  - https://lucide.dev/icons/arrow-left\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst ArrowLeft = createLucideIcon(__iconData);\n\nexport default ArrowLeft;\n", "import createLucideIcon from '../createLucideIcon';\nimport type { LucideIconNode, LucideIconData } from '../types';\n\nexport const __iconData: LucideIconData = {\n name: 'arrow-right',\n size: 24,\n node: [\n ['path', { d: 'M5 12h14', key: '1ays0h' }],\n ['path', { d: 'm12 5 7 7-7 7', key: 'xquz4c' }],\n ],\n};\n\n/**\n * @deprecated Access `__iconData` instead.\n */\nexport const __iconNode: LucideIconNode[] = __iconData.node;\n\n/**\n * @component @name ArrowRight\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview  - https://lucide.dev/icons/arrow-right\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst ArrowRight = createLucideIcon(__iconData);\n\nexport default ArrowRight;\n", "import createLucideIcon from '../createLucideIcon';\nimport type { LucideIconNode, LucideIconData } from '../types';\n\nexport const __iconData: LucideIconData = {\n name: 'arrow-up-right',\n size: 24,\n node: [\n ['path', { d: 'M7 7h10v10', key: '1tivn9' }],\n ['path', { d: 'M7 17 17 7', key: '1vkiza' }],\n ],\n};\n\n/**\n * @deprecated Access `__iconData` instead.\n */\nexport const __iconNode: LucideIconNode[] = __iconData.node;\n\n/**\n * @component @name ArrowUpRight\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview  - https://lucide.dev/icons/arrow-up-right\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst ArrowUpRight = createLucideIcon(__iconData);\n\nexport default ArrowUpRight;\n", "import createLucideIcon from '../createLucideIcon';\nimport type { LucideIconNode, LucideIconData } from '../types';\n\nexport const __iconData: LucideIconData = {\n name: 'arrow-up',\n size: 24,\n node: [\n ['path', { d: 'm5 12 7-7 7 7', key: 'hav0vg' }],\n ['path', { d: 'M12 19V5', key: 'x0mq9r' }],\n ],\n};\n\n/**\n * @deprecated Access `__iconData` instead.\n */\nexport const __iconNode: LucideIconNode[] = __iconData.node;\n\n/**\n * @component @name ArrowUp\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview  - https://lucide.dev/icons/arrow-up\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst ArrowUp = createLucideIcon(__iconData);\n\nexport default ArrowUp;\n", "import createLucideIcon from '../createLucideIcon';\nimport type { LucideIconNode, LucideIconData } from '../types';\n\nexport const __iconData: LucideIconData = {\n name: 'chevron-down',\n size: 24,\n node: [['path', { d: 'm6 9 6 6 6-6', key: 'qrunsl' }]],\n};\n\n/**\n * @deprecated Access `__iconData` instead.\n */\nexport const __iconNode: LucideIconNode[] = __iconData.node;\n\n/**\n * @component @name ChevronDown\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview  - https://lucide.dev/icons/chevron-down\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst ChevronDown = createLucideIcon(__iconData);\n\nexport default ChevronDown;\n", "import createLucideIcon from '../createLucideIcon';\nimport type { LucideIconNode, LucideIconData } from '../types';\n\nexport const __iconData: LucideIconData = {\n name: 'chevron-right',\n size: 24,\n node: [['path', { d: 'm9 18 6-6-6-6', key: 'mthhwq' }]],\n};\n\n/**\n * @deprecated Access `__iconData` instead.\n */\nexport const __iconNode: LucideIconNode[] = __iconData.node;\n\n/**\n * @component @name ChevronRight\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview  - https://lucide.dev/icons/chevron-right\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst ChevronRight = createLucideIcon(__iconData);\n\nexport default ChevronRight;\n", "import createLucideIcon from '../createLucideIcon';\nimport type { LucideIconNode, LucideIconData } from '../types';\n\nexport const __iconData: LucideIconData = {\n name: 'code-xml',\n size: 24,\n node: [\n ['path', { d: 'm18 16 4-4-4-4', key: '1inbqp' }],\n ['path', { d: 'm6 8-4 4 4 4', key: '15zrgr' }],\n ['path', { d: 'm14.5 4-5 16', key: 'e7oirm' }],\n ],\n aliases: ['code-2'],\n};\n\n/**\n * @deprecated Access `__iconData` instead.\n */\nexport const __iconNode: LucideIconNode[] = __iconData.node;\n\n/**\n * @component @name CodeXml\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview  - https://lucide.dev/icons/code-xml\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst CodeXml = createLucideIcon(__iconData);\n\nexport default CodeXml;\n", "import createLucideIcon from '../createLucideIcon';\nimport type { LucideIconNode, LucideIconData } from '../types';\n\nexport const __iconData: LucideIconData = {\n name: 'code',\n size: 24,\n node: [\n ['path', { d: 'm16 18 6-6-6-6', key: 'eg8j8' }],\n ['path', { d: 'm8 6-6 6 6 6', key: 'ppft3o' }],\n ],\n};\n\n/**\n * @deprecated Access `__iconData` instead.\n */\nexport const __iconNode: LucideIconNode[] = __iconData.node;\n\n/**\n * @component @name Code\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview  - https://lucide.dev/icons/code\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst Code = createLucideIcon(__iconData);\n\nexport default Code;\n", "import createLucideIcon from '../createLucideIcon';\nimport type { LucideIconNode, LucideIconData } from '../types';\n\nexport const __iconData: LucideIconData = {\n name: 'grip-vertical',\n size: 24,\n node: [\n ['circle', { cx: '9', cy: '12', r: '1', key: '1vctgf' }],\n ['circle', { cx: '9', cy: '5', r: '1', key: 'hp0tcf' }],\n ['circle', { cx: '9', cy: '19', r: '1', key: 'fkjjf6' }],\n ['circle', { cx: '15', cy: '12', r: '1', key: '1tmaij' }],\n ['circle', { cx: '15', cy: '5', r: '1', key: '19l28e' }],\n ['circle', { cx: '15', cy: '19', r: '1', key: 'f4zoj3' }],\n ],\n};\n\n/**\n * @deprecated Access `__iconData` instead.\n */\nexport const __iconNode: LucideIconNode[] = __iconData.node;\n\n/**\n * @component @name GripVertical\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview  - https://lucide.dev/icons/grip-vertical\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst GripVertical = createLucideIcon(__iconData);\n\nexport default GripVertical;\n", "import createLucideIcon from '../createLucideIcon';\nimport type { LucideIconNode, LucideIconData } from '../types';\n\nexport const __iconData: LucideIconData = {\n name: 'layout-grid',\n size: 24,\n node: [\n ['rect', { width: '7', height: '7', x: '3', y: '3', rx: '1', key: '1g98yp' }],\n ['rect', { width: '7', height: '7', x: '14', y: '3', rx: '1', key: '6d4xhi' }],\n ['rect', { width: '7', height: '7', x: '14', y: '14', rx: '1', key: 'nxv5o0' }],\n ['rect', { width: '7', height: '7', x: '3', y: '14', rx: '1', key: '1bb6yr' }],\n ],\n};\n\n/**\n * @deprecated Access `__iconData` instead.\n */\nexport const __iconNode: LucideIconNode[] = __iconData.node;\n\n/**\n * @component @name LayoutGrid\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview  - https://lucide.dev/icons/layout-grid\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst LayoutGrid = createLucideIcon(__iconData);\n\nexport default LayoutGrid;\n", "import createLucideIcon from '../createLucideIcon';\nimport type { LucideIconNode, LucideIconData } from '../types';\n\nexport const __iconData: LucideIconData = {\n name: 'maximize-2',\n size: 24,\n node: [\n ['path', { d: 'M15 3h6v6', key: '1q9fwt' }],\n ['path', { d: 'm21 3-7 7', key: '1l2asr' }],\n ['path', { d: 'm3 21 7-7', key: 'tjx5ai' }],\n ['path', { d: 'M9 21H3v-6', key: 'wtvkvv' }],\n ],\n};\n\n/**\n * @deprecated Access `__iconData` instead.\n */\nexport const __iconNode: LucideIconNode[] = __iconData.node;\n\n/**\n * @component @name Maximize2\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview  - https://lucide.dev/icons/maximize-2\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst Maximize2 = createLucideIcon(__iconData);\n\nexport default Maximize2;\n", "import createLucideIcon from '../createLucideIcon';\nimport type { LucideIconNode, LucideIconData } from '../types';\n\nexport const __iconData: LucideIconData = {\n name: 'message-square',\n size: 24,\n node: [\n [\n 'path',\n {\n d: 'M22 17a2 2 0 0 1-2 2H6.828a2 2 0 0 0-1.414.586l-2.202 2.202A.71.71 0 0 1 2 21.286V5a2 2 0 0 1 2-2h16a2 2 0 0 1 2 2z',\n key: '18887p',\n },\n ],\n ],\n};\n\n/**\n * @deprecated Access `__iconData` instead.\n */\nexport const __iconNode: LucideIconNode[] = __iconData.node;\n\n/**\n * @component @name MessageSquare\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview  - https://lucide.dev/icons/message-square\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst MessageSquare = createLucideIcon(__iconData);\n\nexport default MessageSquare;\n", "import createLucideIcon from '../createLucideIcon';\nimport type { LucideIconNode, LucideIconData } from '../types';\n\nexport const __iconData: LucideIconData = {\n name: 'panel-bottom',\n size: 24,\n node: [\n ['rect', { width: '18', height: '18', x: '3', y: '3', rx: '2', key: 'afitv7' }],\n ['path', { d: 'M3 15h18', key: '5xshup' }],\n ],\n};\n\n/**\n * @deprecated Access `__iconData` instead.\n */\nexport const __iconNode: LucideIconNode[] = __iconData.node;\n\n/**\n * @component @name PanelBottom\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview  - https://lucide.dev/icons/panel-bottom\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst PanelBottom = createLucideIcon(__iconData);\n\nexport default PanelBottom;\n", "import createLucideIcon from '../createLucideIcon';\nimport type { LucideIconNode, LucideIconData } from '../types';\n\nexport const __iconData: LucideIconData = {\n name: 'panel-right',\n size: 24,\n node: [\n ['rect', { width: '18', height: '18', x: '3', y: '3', rx: '2', key: 'afitv7' }],\n ['path', { d: 'M15 3v18', key: '14nvp0' }],\n ],\n};\n\n/**\n * @deprecated Access `__iconData` instead.\n */\nexport const __iconNode: LucideIconNode[] = __iconData.node;\n\n/**\n * @component @name PanelRight\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview  - https://lucide.dev/icons/panel-right\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst PanelRight = createLucideIcon(__iconData);\n\nexport default PanelRight;\n", "import createLucideIcon from '../createLucideIcon';\nimport type { LucideIconNode, LucideIconData } from '../types';\n\nexport const __iconData: LucideIconData = {\n name: 'sparkles',\n size: 24,\n node: [\n [\n 'path',\n {\n d: 'M11.017 2.814a1 1 0 0 1 1.966 0l1.051 5.558a2 2 0 0 0 1.594 1.594l5.558 1.051a1 1 0 0 1 0 1.966l-5.558 1.051a2 2 0 0 0-1.594 1.594l-1.051 5.558a1 1 0 0 1-1.966 0l-1.051-5.558a2 2 0 0 0-1.594-1.594l-5.558-1.051a1 1 0 0 1 0-1.966l5.558-1.051a2 2 0 0 0 1.594-1.594z',\n key: '1s2grr',\n },\n ],\n ['path', { d: 'M20 2v4', key: '1rf3ol' }],\n ['path', { d: 'M22 4h-4', key: 'gwowj6' }],\n ['circle', { cx: '4', cy: '20', r: '2', key: '6kqj1y' }],\n ],\n aliases: ['stars'],\n};\n\n/**\n * @deprecated Access `__iconData` instead.\n */\nexport const __iconNode: LucideIconNode[] = __iconData.node;\n\n/**\n * @component @name Sparkles\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview  - https://lucide.dev/icons/sparkles\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst Sparkles = createLucideIcon(__iconData);\n\nexport default Sparkles;\n", "import createLucideIcon from '../createLucideIcon';\nimport type { LucideIconNode, LucideIconData } from '../types';\n\nexport const __iconData: LucideIconData = {\n name: 'users',\n size: 24,\n node: [\n ['path', { d: 'M16 21v-2a4 4 0 0 0-4-4H6a4 4 0 0 0-4 4v2', key: '1yyitq' }],\n ['path', { d: 'M16 3.128a4 4 0 0 1 0 7.744', key: '16gr8j' }],\n ['path', { d: 'M22 21v-2a4 4 0 0 0-3-3.87', key: 'kshegd' }],\n ['circle', { cx: '9', cy: '7', r: '4', key: 'nufk8' }],\n ],\n};\n\n/**\n * @deprecated Access `__iconData` instead.\n */\nexport const __iconNode: LucideIconNode[] = __iconData.node;\n\n/**\n * @component @name Users\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview  - https://lucide.dev/icons/users\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst Users = createLucideIcon(__iconData);\n\nexport default Users;\n", "import createLucideIcon from '../createLucideIcon';\nimport type { LucideIconNode, LucideIconData } from '../types';\n\nexport const __iconData: LucideIconData = {\n name: 'wrench',\n size: 24,\n node: [\n [\n 'path',\n {\n d: 'M14.7 6.3a1 1 0 0 0 0 1.4l1.6 1.6a1 1 0 0 0 1.4 0l3.106-3.105c.32-.322.863-.22.983.218a6 6 0 0 1-8.259 7.057l-7.91 7.91a1 1 0 0 1-2.999-3l7.91-7.91a6 6 0 0 1 7.057-8.259c.438.12.54.662.219.984z',\n key: '1ngwbx',\n },\n ],\n ],\n};\n\n/**\n * @deprecated Access `__iconData` instead.\n */\nexport const __iconNode: LucideIconNode[] = __iconData.node;\n\n/**\n * @component @name Wrench\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview  - https://lucide.dev/icons/wrench\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst Wrench = createLucideIcon(__iconData);\n\nexport default Wrench;\n", "import createLucideIcon from '../createLucideIcon';\nimport type { LucideIconNode, LucideIconData } from '../types';\n\nexport const __iconData: LucideIconData = {\n name: 'x',\n size: 24,\n node: [\n ['path', { d: 'M18 6 6 18', key: '1bl5f8' }],\n ['path', { d: 'm6 6 12 12', key: 'd8bk6v' }],\n ],\n};\n\n/**\n * @deprecated Access `__iconData` instead.\n */\nexport const __iconNode: LucideIconNode[] = __iconData.node;\n\n/**\n * @component @name X\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview  - https://lucide.dev/icons/x\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst X = createLucideIcon(__iconData);\n\nexport default X;\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"@ragents/web/run-view\", \"actorTone\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"@ragents/web/run-view\", \"chatPrimaryId\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"@ragents/web/run-view\", \"isPendingRunActorInput\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"@ragents/web/run-view\", \"runActorFrom\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"@ragents/web/run-view\", \"runArtifactContentUrl\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"@ragents/web/run-view\", \"runViewFrom\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"@ragents/web/rpc\", \"rpc\");\n", "import { runContracts } from \"@ragents/engine/src/http/contracts\";\nimport { rpc } from \"@ragents/web/rpc\";\n\nexport const enqueueActorInput = async (runId: string, actorId: string, content: string, artifactIds: string[] = []) => {\n await rpc.call(runContracts.enqueueInput, { runId, commandId: crypto.randomUUID(), actorId, content, artifactIds });\n};\n\nexport const resolveAction = async (\n runId: string,\n actionId: string,\n decision: \"approved\" | \"dismissed\",\n result?: string,\n) => {\n await rpc.call(runContracts.resolveAction, { runId, commandId: crypto.randomUUID(), actionId, decision, result });\n};\n\nexport const stopActor = async (runId: string, actorId: string, reason: string) => {\n await rpc.call(runContracts.stopActor, { runId, commandId: crypto.randomUUID(), actorId, reason });\n};\n\nexport const restartActor = async (runId: string, actorId: string) => {\n await rpc.call(runContracts.restartActor, { runId, commandId: crypto.randomUUID(), actorId });\n};\n\nexport const stopRun = async (runId: string, reason: string) => {\n await rpc.call(runContracts.stopAll, { runId, commandId: crypto.randomUUID(), reason });\n};\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"@ragents/web/lib/format\", \"formatBytes\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"@ragents/web/SourceCode\", \"SourceCode\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"@ragents/web/lib/labels\", \"thinkingLabel\");\n", "export const formatTime = (iso: string) => {\n const date = new Date(iso);\n return Number.isNaN(date.getTime()) ? iso : date.toLocaleString();\n};\n", "import { ArrowLeftIcon, WrenchIcon } from \"lucide-react\";\nimport { useAccess } from \"@ragents/web/AccessContext\";\nimport { Badge, Button, Empty, EmptyDescription, EmptyHeader, EmptyTitle, Input, Tabs, TabsContent, TabsList, TabsTrigger } from \"@ragents/web/ui\";\nimport { useEffect, useId, useMemo, useRef, useState, type ReactNode } from \"react\";\nimport { ActorChat } from \"./ActorChat\";\nimport { ActorChatControls } from \"./ActorChatControls\";\nimport type { Message } from \"quassel/events\";\nimport {\n isPendingRunActorInput,\n runArtifactContentUrl,\n type RunAction,\n type RunActor,\n type RunActorInput,\n type RunArtifact,\n type RunCapabilityGrant,\n type RunSubscription,\n type RunTurn,\n type RunUsage,\n type RunView,\n} from \"@ragents/web/run-view\";\nimport { actorInputLabel } from \"@ragents/web/actor-conversation\";\nimport { resolveAction, restartActor, stopActor } from \"./api\";\nimport { formatBytes } from \"@ragents/web/lib/format\";\nimport { SourceCode } from \"@ragents/web/SourceCode\";\nimport { thinkingLabel } from \"@ragents/web/lib/labels\";\nimport { formatTime } from \"./format\";\nimport { useProgramSlot } from \"./program-slot\";\n\nexport interface FlowSelection {\n type: \"actor\" | \"input\" | \"turn\" | \"subscription\" | \"action\" | \"artifact\";\n id: string;\n}\n\ninterface FlowInspectorProps {\n view: RunView | undefined;\n selection: FlowSelection | undefined;\n canGoBack: boolean;\n composerVisible: boolean;\n onNavigate: (selection: FlowSelection) => void;\n onBack: () => void;\n primaryMessages: Message[];\n actorConversations?: Readonly<Record<string, readonly Message[]>>;\n conversationError?: string;\n primaryRunning: boolean;\n /** Display surface for the remembered detail level; the popout registers separately from the side inspector. */\n chatDisplay?: string;\n}\n\nconst inspectorClass = \"flex h-full min-h-0 flex-col bg-card\";\n\nconst headClass = \"flex flex-shrink-0 items-start gap-2.5 border-b border-border-soft px-workspace-inset pt-3 pb-2 [&_h2]:text-[0.95rem] [&_h2]:leading-[1.3]\";\n\nconst subtitleClass = \"block truncate text-[0.72rem] text-muted-foreground\";\n\nconst statusClass = \"flex flex-shrink-0 flex-wrap items-center gap-x-2.5 gap-y-0.5 border-b border-border-soft px-workspace-inset py-1.5 text-[0.72rem] text-muted-foreground\";\n\nconst scrollClass = \"min-h-0 flex-1 overflow-y-auto px-workspace-inset py-2.5\";\n\nconst sectionClass = \"mb-4 [&>h3]:mb-1.5 [&>h3]:text-[0.72rem] [&>h3]:font-semibold [&>h3]:tracking-[0.05em] [&>h3]:uppercase [&>h3]:text-muted-foreground\";\n\nconst rowsClass = \"flex flex-col gap-1 py-1.5\";\n\nconst rowClass = \"flex cursor-pointer items-center gap-2 rounded-lg border border-border-soft px-2 py-1.5 text-left hover:border-[color-mix(in_srgb,var(--primary)_45%,var(--border))] hover:bg-primary/6 [&_strong]:truncate [&_strong]:text-[0.76rem] [&_small]:text-[0.66rem] [&_small]:text-muted-foreground\";\n\nconst rowCopyClass = \"flex min-w-0 flex-1 flex-col\";\n\nconst mutedClass = \"text-[0.74rem] text-muted-foreground\";\n\nconst errorClass = \"my-1.5 text-[0.72rem] text-destructive\";\n\nconst propertiesClass = \"my-1.5 grid grid-cols-[auto_1fr] gap-x-3 gap-y-1 text-[0.74rem] [&_dt]:text-muted-foreground [&_dd]:[overflow-wrap:anywhere]\";\n\nconst textBlockClass = \"my-1.5 rounded-lg bg-foreground/4 p-2 text-[0.72rem] whitespace-pre-wrap [overflow-wrap:anywhere]\";\n\nconst linkClass = \"cursor-pointer text-[0.74rem] text-primary underline\";\n\nconst pillClass = \"h-auto rounded-full bg-foreground/8 px-2 py-0.5 text-[0.66rem] font-semibold text-muted-foreground\";\n\nconst pillToneClass: Readonly<Record<string, string>> = {\n running: \"bg-accent text-primary\",\n active: \"bg-success-soft text-success\",\n approved: \"bg-success-soft text-success\",\n completed: \"bg-success-soft text-success\",\n idle: \"bg-success-soft text-success\",\n pending: \"bg-success-soft text-success\",\n waiting: \"bg-success-soft text-success\",\n queued: \"bg-success-soft text-success\",\n failed: \"bg-destructive-soft text-destructive\",\n interrupted: \"bg-destructive-soft text-destructive\",\n};\n\nconst tabClass = \"grid size-[30px] flex-[0_0_30px] place-items-center p-0\";\n\nconst STATUS_LABELS: Record<string, string> = {\n active: \"Active\",\n approved: \"Approved\",\n completed: \"Completed\",\n dismissed: \"Dismissed\",\n failed: \"Failed\",\n idle: \"Ready\",\n interrupted: \"Interrupted\",\n pending: \"Open\",\n removed: \"Removed\",\n running: \"Running\",\n stopped: \"Stopped\",\n};\n\nconst ACTOR_KIND_LABELS: Record<RunActor[\"kind\"], string> = {\n human: \"Person\",\n agent: \"Agent\",\n script: \"Logic actor\",\n};\n\nconst STOP_REASON = \"Stopped by the operator\";\n\nconst shortId = (id: string) => (id.length > 12 ? `${id.slice(0, 12)}...` : id);\n\nconst turnUsageOf = (turn: RunTurn): Partial<RunUsage> | undefined => {\n const usage: Partial<RunUsage> | undefined = turn.usage;\n return usage;\n};\n\nconst runCostUsd = (view: RunView): number | undefined => {\n const costs = view.turns\n .map((turn) => turnUsageOf(turn)?.costUsd)\n .filter((cost): cost is number => typeof cost === \"number\" && Number.isFinite(cost));\n return costs.length > 0 ? costs.reduce((sum, cost) => sum + cost, 0) : undefined;\n};\n\nconst formatCostUsd = (value: number) =>\n `${value.toLocaleString(undefined, { minimumFractionDigits: 2, maximumFractionDigits: value > 0 && value < 0.005 ? 4 : 2 })} USD`;\n\ninterface RunIndex {\n view: RunView;\n actorById: Map<string, RunActor>;\n inputById: Map<string, RunActorInput>;\n turnById: Map<string, RunTurn>;\n subscriptionById: Map<string, RunSubscription>;\n actionById: Map<string, RunAction>;\n artifactById: Map<string, RunArtifact>;\n}\n\nconst indexOf = (view: RunView): RunIndex => ({\n view,\n actorById: new Map(view.actors.map((entry) => [entry.id, entry])),\n inputById: new Map(view.inputs.map((entry) => [entry.id, entry])),\n turnById: new Map(view.turns.map((entry) => [entry.id, entry])),\n subscriptionById: new Map(view.subscriptions.map((entry) => [entry.id, entry])),\n actionById: new Map(view.actions.map((entry) => [entry.id, entry])),\n artifactById: new Map(view.artifacts.map((entry) => [entry.id, entry])),\n});\n\nconst actorLabel = (index: RunIndex, actorId: string) =>\n `@${index.actorById.get(actorId)?.handle ?? shortId(actorId)}`;\n\nconst inputDeliveryLabel = (index: RunIndex, input: RunActorInput) =>\n actorInputLabel(index.view, input);\n\nexport function FlowInspector(props: FlowInspectorProps) {\n const inspect = useAccess().can(\"runs.inspect\");\n const view = props.view;\n const index = useMemo(() => (view ? indexOf(view) : undefined), [view]);\n\n if (!view || !index) {\n return (\n <Empty>\n <EmptyHeader>\n <EmptyTitle>No flow yet</EmptyTitle>\n <EmptyDescription>As soon as actors are started, the detail view appears here.</EmptyDescription>\n </EmptyHeader>\n </Empty>\n );\n }\n\n const selection = props.selection;\n const actor = selection?.type === \"actor\" ? index.actorById.get(selection.id) : undefined;\n const input = selection?.type === \"input\" ? index.inputById.get(selection.id) : undefined;\n const turn = selection?.type === \"turn\" ? index.turnById.get(selection.id) : undefined;\n const subscription = selection?.type === \"subscription\" ? index.subscriptionById.get(selection.id) : undefined;\n const action = selection?.type === \"action\" ? index.actionById.get(selection.id) : undefined;\n const artifact = selection?.type === \"artifact\" ? index.artifactById.get(selection.id) : undefined;\n const fallbackActor = index.actorById.get(view.primaryActorId ?? view.ownerId) ?? view.actors[0];\n\n if (!inspect) {\n const conversationActor = actor ?? fallbackActor;\n return conversationActor?.kind === \"agent\" ? <ActorView actor={conversationActor} index={index} key={conversationActor.id} {...props} /> : null;\n }\n\n if (input) return <InputView index={index} input={input} key={input.id} {...props} />;\n if (turn) return <TurnView index={index} key={turn.id} turn={turn} {...props} />;\n if (subscription) return <SubscriptionView index={index} key={subscription.id} subscription={subscription} {...props} />;\n if (action) return <ActionView action={action} index={index} key={action.id} {...props} />;\n if (artifact) return <ArtifactView artifact={artifact} index={index} key={artifact.id} {...props} />;\n if (actor) return <ActorView actor={actor} index={index} key={actor.id} {...props} />;\n if (fallbackActor) return <ActorView actor={fallbackActor} index={index} key={fallbackActor.id} {...props} />;\n\n return <Empty><EmptyHeader><EmptyTitle>No actors</EmptyTitle></EmptyHeader></Empty>;\n}\n\nfunction BackButton({ canGoBack, onBack }: { canGoBack: boolean; onBack: () => void }) {\n if (!canGoBack) return null;\n return <Button aria-label=\"Back\" className=\"rounded-full\" onClick={onBack} size=\"icon\" variant=\"outline\"><ArrowLeftIcon /></Button>;\n}\n\nfunction StatusPill({ status }: { status: string }) {\n return <Badge className={`${pillClass} ${pillToneClass[status] ?? \"\"}`}>{STATUS_LABELS[status] ?? status}</Badge>;\n}\n\ntype SectionTab = {\n id: string;\n label: string;\n count?: number;\n icon: ReactNode;\n content: ReactNode;\n};\n\nconst sectionIconPaths = {\n chat: \"M21 11a8 8 0 0 1-8 8H7l-5 3V11a8 8 0 0 1 8-8h3a8 8 0 0 1 8 8ZM7 9h9M7 13h6\",\n info: \"M12 11v6M12 7h.01M22 12a10 10 0 1 1-20 0 10 10 0 0 1 20 0\",\n prompt: \"M6 3h12v18H6zM9 7h6M9 11h6M9 15h4\",\n source: \"m8 5-6 7 6 7m8-14 6 7-6 7m-3-15-2 16\",\n settings: \"M4 6h16M4 12h16M4 18h16M8 3v6M16 9v6M10 15v6\",\n inputs: \"M12 3v12m-4-4 4 4 4-4M4 14v7h16v-7\",\n turns: \"M20 7v5h-5M4 17v-5h5M6 7a7 7 0 0 1 12-2l2 3M4 16l2 3a7 7 0 0 0 12-2\",\n subscriptions: \"M12 3v6M4 15v-3h16v3M12 12v3M2 15h4v6H2zM10 15h4v6h-4zM18 15h4v6h-4z\",\n actions: \"m13 2-9 12h7l-1 8 10-13h-7z\",\n artifacts: \"M3 6h7l2 3h9v12H3zM3 6V3h7l2 3h7v3\",\n capabilities: \"m12 2 9 4v6c0 5-9 10-9 10S3 17 3 12V6zM8 12l3 3 5-6\",\n};\n\nfunction SectionIcon({ kind }: { kind: keyof typeof sectionIconPaths }) {\n return <svg aria-hidden=\"true\" fill=\"none\" height=\"15\" width=\"15\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" strokeWidth=\"1.7\" strokeLinecap=\"round\" strokeLinejoin=\"round\"><path d={sectionIconPaths[kind]} /></svg>;\n}\n\nfunction SectionTabs({ sections, children }: { sections: SectionTab[]; children: ReactNode }) {\n const id = useId();\n const [openId, setOpenId] = useState<string | null>(null);\n const open = sections.find((section) => section.id === openId);\n if (sections.length === 0) return <div className=\"flex min-h-0 flex-1 flex-col\">{children}</div>;\n\n return (\n <Tabs className=\"contents\" onValueChange={(value) => setOpenId(value === \"chat\" ? null : String(value))} value={open?.id ?? \"chat\"}>\n <TabsList aria-label=\"Actor views\" className=\"flex h-auto w-auto max-w-full flex-shrink-0 flex-nowrap justify-start gap-1 overflow-x-auto rounded-none border-b border-border-soft px-workspace-inset py-1.5\" variant=\"line\">\n <TabsTrigger aria-label=\"Show chat\" className={tabClass} id={`${id}-chat-tab`} title=\"Show chat\" value=\"chat\">\n <SectionIcon kind=\"chat\" />\n </TabsTrigger>\n {sections.map((section) => (\n <TabsTrigger\n aria-label={section.count === undefined ? section.label : `${section.label} (${section.count})`}\n className={tabClass}\n id={`${id}-${section.id}-tab`}\n key={section.id}\n title={section.count === undefined ? section.label : `${section.label} (${section.count})`}\n value={section.id}\n >\n {section.icon}\n </TabsTrigger>\n ))}\n </TabsList>\n {open && <TabsContent className=\"min-h-0 flex-1 overflow-y-auto border-b border-border-soft px-workspace-inset py-1.5 text-[0.76rem]\" id={`${id}-details`} tabIndex={0} value={open.id}>{open.content}</TabsContent>}\n <TabsContent className=\"flex min-h-0 flex-1 flex-col\" id={`${id}-chat`} keepMounted value=\"chat\">{children}</TabsContent>\n </Tabs>\n );\n}\n\nfunction CapabilityList({ grants }: { grants: RunCapabilityGrant[] }) {\n if (grants.length === 0) return <Badge className={pillClass}>No capabilities</Badge>;\n return (\n <div className=\"flex flex-wrap gap-1 py-1.5\">\n {grants.map((grant, position) => {\n const scope = grant.scope.kind === \"workspace\" ? grant.scope.path : \"Run\";\n const suffix = [\n grant.delegable ? \"delegable\" : undefined,\n grant.usable === false ? \"pass on only\" : undefined,\n ].filter(Boolean).join(\", \");\n return (\n <span className=\"rounded-full border border-border-soft px-2 py-0.5 text-[0.68rem] [&>small]:text-muted-foreground\" key={`${grant.capability}-${position}`} title={scope}>\n {grant.capability}\n {suffix && <small> {suffix}</small>}\n </span>\n );\n })}\n </div>\n );\n}\n\nconst actionClass = \"my-1.5 rounded-lg border border-[color-mix(in_srgb,var(--primary)_35%,var(--border))] bg-primary/5 px-2.5 py-2 [&>p]:my-1 [&>p]:text-[0.72rem] [&>p]:text-muted-foreground\";\n\nfunction ActionCard({ action, runId, onError }: { action: RunAction; runId: string; onError: (message: string) => void }) {\n const writable = useAccess().can(\"runs.write\");\n const [response, setResponse] = useState(\"\");\n const [busy, setBusy] = useState(false);\n\n const resolve = async (decision: \"approved\" | \"dismissed\", answer: string | undefined) => {\n if (busy) return;\n setBusy(true);\n try {\n await resolveAction(runId, action.id, decision, answer);\n } catch (error) {\n onError(error instanceof Error ? error.message : String(error));\n } finally {\n setBusy(false);\n }\n };\n\n return (\n <div className={actionClass}>\n <strong>{action.title}</strong>\n {action.description && <p>{action.description}</p>}\n {action.owner && <p>waiting for input - {action.owner}</p>}\n {action.input && (\n <Input\n className=\"my-1.5 text-[0.76rem]\"\n disabled={!writable}\n onChange={(event) => setResponse(event.target.value)}\n placeholder={action.input.placeholder ?? action.input.label}\n type=\"text\"\n value={response}\n />\n )}\n <div className=\"mt-1 flex justify-end gap-1.5\">\n <Button disabled={!writable || busy} onClick={() => void resolve(\"dismissed\", undefined)} size=\"sm\" variant=\"outline\">\n Dismiss\n </Button>\n <Button\n disabled={!writable || busy || (action.input?.required === true && response.trim() === \"\")}\n onClick={() => void resolve(\"approved\", response.trim() || undefined)}\n size=\"sm\"\n >\n Acknowledge\n </Button>\n </div>\n </div>\n );\n}\n\nfunction SourceListing({ handle, source }: { handle: string; source: string }) {\n return (\n <div className=\"overflow-x-auto rounded-lg border border-border-soft bg-border-soft/22\">\n <SourceCode content={source} language=\"typescript\" lineNumbers path={`${handle}.ts`} />\n </div>\n );\n}\n\nfunction ActorView({ actor, index, ...props }: FlowInspectorProps & { actor: RunActor; index: RunIndex }) {\n const access = useAccess();\n const programs = useProgramSlot();\n const writable = access.can(\"runs.write\");\n const inspect = access.can(\"runs.inspect\");\n const view = index.view;\n const programSource = inspect && programs?.runId === view.id ? programs.source(view, actor.id) : undefined;\n const [error, setError] = useState<string>();\n const inputs = view.inputs.filter((entry) => entry.actorId === actor.id).sort((left, right) => left.sequence - right.sequence);\n const turns = view.turns.filter((entry) => entry.actorId === actor.id).sort((left, right) => left.startedAt.localeCompare(right.startedAt));\n const subscriptions = view.subscriptions.filter((entry) => entry.subscriberId === actor.id);\n const actions = view.actions.filter((entry) => entry.askedBy === actor.id);\n const artifacts = view.artifacts.filter((entry) => entry.createdBy === actor.id);\n const pendingInputCount = inputs.filter(isPendingRunActorInput).length;\n const primary = actor.id === view.primaryActorId;\n const runCost = primary ? runCostUsd(view) : undefined;\n const active = actor.kind !== \"human\" && actor.lifecycle?.kind !== \"stopped\";\n const lifecycle = actor.kind === \"human\" ? undefined : actor.lifecycle?.kind ?? \"idle\";\n const inputsConfig = Object.entries(actor.inputs ?? {});\n const driver = actor.execution?.driver;\n const driverLabel = actor.kind === \"script\"\n ? \"TypeScript\"\n : !driver || driver.kind === \"manual\"\n ? \"Manual\"\n : [driver.kind, driver.config.provider].filter(Boolean).join(\" - \");\n\n const config = driver && driver.kind !== \"manual\" ? driver.config : undefined;\n const sections: SectionTab[] = [\n { id: \"info\", label: \"Info: model and run details\", icon: <SectionIcon kind=\"info\" />, content: (\n <div className={statusClass}>\n {lifecycle && <StatusPill status={lifecycle} />}\n <span>{primary ? \"Primary actor\" : ACTOR_KIND_LABELS[actor.kind]}</span>\n <span>{driverLabel}</span>\n {config?.model && <span className=\"max-w-[220px] truncate\" title={config.model}>{config.model}</span>}\n {config?.thinking && <span>Thinking level {thinkingLabel(config.thinking)}</span>}\n <span>{pendingInputCount} open</span>\n <span>{turns.length} Turns</span>\n {primary && runCost !== undefined && (\n <span title=\"Total cost of the run across all turns\">{formatCostUsd(runCost)}</span>\n )}\n </div>\n ) },\n ...(actor.prompt ? [{\n id: \"prompt\",\n label: \"Task\",\n icon: <SectionIcon kind=\"prompt\" />,\n content: <pre className={textBlockClass}>{actor.prompt}</pre>,\n }] : []),\n ...(programSource ? [{\n id: \"source\",\n label: \"Source code\",\n icon: <SectionIcon kind=\"source\" />,\n content: programSource,\n }] : actor.source ? [{\n id: \"source\",\n label: \"Source code\",\n icon: <SectionIcon kind=\"source\" />,\n count: actor.source.replace(/\\n$/, \"\").split(\"\\n\").length,\n content: <SourceListing handle={actor.handle} source={actor.source} />,\n }] : []),\n ...(inputsConfig.length > 0 ? [{\n id: \"settings\",\n label: \"Settings\",\n icon: <SectionIcon kind=\"settings\" />,\n count: inputsConfig.length,\n content: (\n <dl className={propertiesClass}>\n {inputsConfig.map(([name, value]) => <span key={name}><dt>{name}</dt><dd>{value}</dd></span>)}\n </dl>\n ),\n }] : []),\n {\n id: \"inputs\",\n label: \"Inputs\",\n icon: <SectionIcon kind=\"inputs\" />,\n count: inputs.length,\n content: (\n <div className={rowsClass}>\n {inputs.map((input) => (\n <button className={rowClass} key={input.id} onClick={() => props.onNavigate({ type: \"input\", id: input.id })} type=\"button\">\n <span className={rowCopyClass}><strong>{input.content}</strong><small>{inputDeliveryLabel(index, input)} - {formatTime(input.enqueuedAt)}</small></span>\n <StatusPill status={input.lifecycle.kind === \"discarded\" ? \"dismissed\" : input.lifecycle.kind === \"claimed\" ? index.turnById.get(input.lifecycle.turnId)?.status ?? \"completed\" : \"pending\"} />\n </button>\n ))}\n </div>\n ),\n },\n {\n id: \"turns\",\n label: \"Turns\",\n icon: <SectionIcon kind=\"turns\" />,\n count: turns.length,\n content: (\n <div className={rowsClass}>\n {turns.map((turn) => (\n <button className={rowClass} key={turn.id} onClick={() => props.onNavigate({ type: \"turn\", id: turn.id })} type=\"button\">\n <span className={rowCopyClass}><strong>{shortId(turn.id)}</strong><small>{formatTime(turn.startedAt)}</small></span>\n <StatusPill status={turn.status} />\n </button>\n ))}\n </div>\n ),\n },\n {\n id: \"subscriptions\",\n label: \"Subscriptions\",\n icon: <SectionIcon kind=\"subscriptions\" />,\n count: subscriptions.length,\n content: (\n <div className={rowsClass}>\n {subscriptions.map((subscription) => (\n <button className={rowClass} key={subscription.id} onClick={() => props.onNavigate({ type: \"subscription\", id: subscription.id })} type=\"button\">\n <span className={rowCopyClass}><strong>{subscription.eventTypes.join(\", \")}</strong><small>{shortId(subscription.id)}</small></span>\n <StatusPill status={subscription.status} />\n </button>\n ))}\n </div>\n ),\n },\n ...(actions.length > 0 ? [{\n id: \"actions\",\n label: \"Actions\",\n icon: <SectionIcon kind=\"actions\" />,\n count: actions.length,\n content: (\n <div className={rowsClass}>\n {actions.map((action) => (\n <button className={rowClass} key={action.id} onClick={() => props.onNavigate({ type: \"action\", id: action.id })} type=\"button\">\n <span className={rowCopyClass}><strong>{action.title}</strong><small>{formatTime(action.proposedAt)}</small></span>\n <StatusPill status={action.status} />\n </button>\n ))}\n </div>\n ),\n }] : []),\n ...(artifacts.length > 0 ? [{\n id: \"artifacts\",\n label: \"Artifacts\",\n icon: <SectionIcon kind=\"artifacts\" />,\n count: artifacts.length,\n content: (\n <div className={rowsClass}>\n {artifacts.map((artifact) => (\n <button className={rowClass} key={artifact.id} onClick={() => props.onNavigate({ type: \"artifact\", id: artifact.id })} type=\"button\">\n <span className={rowCopyClass}><strong>{artifact.title}</strong><small>{formatBytes(artifact.size)} - {artifact.mediaType}</small></span>\n </button>\n ))}\n </div>\n ),\n }] : []),\n {\n id: \"capabilities\",\n label: \"Capabilities\",\n icon: <SectionIcon kind=\"capabilities\" />,\n count: actor.grants.length,\n content: <CapabilityList grants={actor.grants} />,\n },\n {\n id: \"tools\",\n label: \"Tools\",\n icon: <WrenchIcon size={15} />,\n ...(actor.toolNames ? { count: actor.toolNames.length } : {}),\n content: (\n <p className={mutedClass}>\n {actor.toolNames === null ? \"All available tools\" : actor.toolNames?.join(\", \") || \"No tools\"}\n </p>\n ),\n },\n ];\n\n return (\n <div className={inspectorClass}>\n <header className={headClass}>\n <BackButton canGoBack={props.canGoBack} onBack={props.onBack} />\n <div className=\"flex min-w-0 flex-1 items-baseline gap-2 [&>span]:flex-1\">\n <h2>{actor.displayName}</h2>\n <span className={subtitleClass}>\n @{actor.handle}{inspect && actor.createdBy ? ` - created by ${actorLabel(index, actor.createdBy)}` : \"\"}\n </span>\n </div>\n {active && writable && (\n <Button\n className=\"flex-shrink-0\"\n onClick={() => void stopActor(view.id, actor.id, STOP_REASON).catch((caught: Error) => setError(caught.message))}\n size=\"sm\"\n title={`Stop @${actor.handle} and its assigned children permanently; the chat input, in contrast, only interrupts the running turn`}\n variant=\"destructive\"\n >\n Stop\n </Button>\n )}\n {inspect && writable && actor.lifecycle?.kind === \"stopped\" && actor.kind !== \"human\" && (\n <Button\n onClick={() => void restartActor(view.id, actor.id).catch((caught: Error) => setError(caught.message))}\n size=\"sm\"\n variant=\"outline\"\n >\n Restart\n </Button>\n )}\n </header>\n {error && <p className={errorClass}>{error}</p>}\n <SectionTabs sections={inspect ? sections : []}>\n <ActorChat\n actor={actor}\n view={view}\n presentation=\"inspector\"\n display={props.chatDisplay}\n className=\"min-h-0 flex-1\"\n primaryMessages={props.primaryMessages}\n conversation={props.actorConversations?.[actor.id]}\n historyError={props.conversationError}\n onNavigate={props.onNavigate}\n running={primary ? props.primaryRunning : lifecycle === \"running\"}\n />\n <ActorChatControls actor={actor} view={view} composerVisible={props.composerVisible} display={props.chatDisplay}\n running={primary ? props.primaryRunning : lifecycle === \"running\"} />\n </SectionTabs>\n </div>\n );\n}\n\nfunction DetailHeader({ eyebrow, title, subtitle, ...props }: {\n eyebrow: string;\n title: string;\n subtitle: string;\n canGoBack: boolean;\n onBack: () => void;\n}) {\n return (\n <header className={headClass}>\n <BackButton canGoBack={props.canGoBack} onBack={props.onBack} />\n <div className=\"min-w-0 flex-1\"><p className=\"mb-0.5 text-[0.66rem] font-semibold tracking-[0.08em] uppercase text-muted-foreground\">{eyebrow}</p><h2>{title}</h2><span className={subtitleClass}>{subtitle}</span></div>\n </header>\n );\n}\n\nfunction InputView({ index, input, ...props }: FlowInspectorProps & { index: RunIndex; input: RunActorInput }) {\n const artifacts = input.artifactIds.flatMap((id) => {\n const artifact = index.artifactById.get(id);\n return artifact ? [artifact] : [];\n });\n return (\n <div className={inspectorClass}>\n <DetailHeader canGoBack={props.canGoBack} eyebrow=\"ActorInput\" onBack={props.onBack} subtitle={formatTime(input.enqueuedAt)} title={shortId(input.id)} />\n <div className={scrollClass}>\n <section className={sectionClass}><h3>Content</h3><pre className={textBlockClass}>{input.content}</pre></section>\n <section className={sectionClass}>\n <h3>Routing</h3>\n <dl className={propertiesClass}>\n <dt>Actor</dt><dd><EntityLink id={input.actorId} index={index} onNavigate={props.onNavigate} /></dd>\n <dt>Enqueued by</dt><dd><EntityLink id={input.enqueuedBy} index={index} onNavigate={props.onNavigate} /></dd>\n <dt>Turn</dt><dd>{input.lifecycle.kind === \"claimed\" ? <SelectionLink label={shortId(input.lifecycle.turnId)} onNavigate={props.onNavigate} selection={{ type: \"turn\", id: input.lifecycle.turnId }} /> : input.lifecycle.kind === \"discarded\" ? \"dismissed\" : \"waiting\"}</dd>\n <dt>Subscription</dt><dd>{input.subscriptionId ? <SelectionLink label={shortId(input.subscriptionId)} onNavigate={props.onNavigate} selection={{ type: \"subscription\", id: input.subscriptionId }} /> : \"none\"}</dd>\n {input.lifecycle.kind === \"discarded\" && <>\n <dt>Dismissed</dt><dd>{formatTime(input.lifecycle.at)}</dd>\n <dt>Reason</dt><dd>{input.lifecycle.reason}</dd>\n </>}\n </dl>\n </section>\n {input.sourceEventIds.length > 0 && <section className={sectionClass}><h3>Source events</h3><p className={mutedClass}>{input.sourceEventIds.join(\", \")}</p></section>}\n {artifacts.length > 0 && <ArtifactRows artifacts={artifacts} onNavigate={props.onNavigate} />}\n </div>\n </div>\n );\n}\n\nfunction TurnView({ index, turn, ...props }: FlowInspectorProps & { index: RunIndex; turn: RunTurn }) {\n const usage = turnUsageOf(turn);\n return (\n <div className={inspectorClass}>\n <DetailHeader canGoBack={props.canGoBack} eyebrow=\"Turn\" onBack={props.onBack} subtitle={formatTime(turn.startedAt)} title={shortId(turn.id)} />\n <div className={statusClass}><StatusPill status={turn.status} /></div>\n <div className={scrollClass}>\n <section className={sectionClass}>\n <h3>Details</h3>\n <dl className={propertiesClass}>\n <dt>Actor</dt><dd><EntityLink id={turn.actorId} index={index} onNavigate={props.onNavigate} /></dd>\n <dt>Input</dt><dd><SelectionLink label={shortId(turn.inputId)} onNavigate={props.onNavigate} selection={{ type: \"input\", id: turn.inputId }} /></dd>\n <dt>Ended</dt><dd>{turn.finishedAt ? formatTime(turn.finishedAt) : \"running\"}</dd>\n {turn.reason && <><dt>Reason</dt><dd>{turn.reason}</dd></>}\n </dl>\n </section>\n {usage && (\n <section className={sectionClass}>\n <h3>Usage</h3>\n <dl className={propertiesClass}>\n <dt>Input tokens</dt><dd>{usage.inputTokens ?? 0}</dd>\n <dt>Output tokens</dt><dd>{usage.outputTokens ?? 0}</dd>\n <dt>Cache read</dt><dd>{usage.cacheReadTokens ?? 0}</dd>\n <dt>Cache written</dt><dd>{usage.cacheWriteTokens ?? 0}</dd>\n <dt>Cost</dt><dd>{(usage.costUsd ?? 0).toFixed(6)} USD</dd>\n </dl>\n </section>\n )}\n </div>\n </div>\n );\n}\n\nfunction SubscriptionView({ index, subscription, ...props }: FlowInspectorProps & { index: RunIndex; subscription: RunSubscription }) {\n return (\n <div className={inspectorClass}>\n <DetailHeader canGoBack={props.canGoBack} eyebrow=\"Subscription\" onBack={props.onBack} subtitle={formatTime(subscription.createdAt)} title={shortId(subscription.id)} />\n <div className={statusClass}><StatusPill status={subscription.status} /></div>\n <div className={scrollClass}>\n <section className={sectionClass}>\n <h3>Filter</h3>\n <dl className={propertiesClass}>\n <dt>Subscriber</dt><dd><EntityLink id={subscription.subscriberId} index={index} onNavigate={props.onNavigate} /></dd>\n <dt>Source actors</dt><dd>{subscription.sourceActorIds?.map((id) => actorLabel(index, id)).join(\", \") ?? \"all\"}</dd>\n <dt>Actor kinds</dt><dd>{subscription.sourceActorKinds?.join(\", \") ?? \"all\"}</dd>\n <dt>Event types</dt><dd>{subscription.eventTypes.join(\", \")}</dd>\n <dt>Own events</dt><dd>{subscription.includeSelf ? \"yes\" : \"no\"}</dd>\n <dt>Created by</dt><dd><EntityLink id={subscription.createdBy} index={index} onNavigate={props.onNavigate} /></dd>\n {subscription.status !== \"active\" && <><dt>Reason</dt><dd>{subscription.reason}</dd></>}\n {subscription.status === \"failed\" && <><dt>Error event</dt><dd>{subscription.sourceEventId}</dd></>}\n </dl>\n </section>\n {subscription.sourceActorIds && <section className={sectionClass}><h3>Source actors</h3><ActorRows actorIds={subscription.sourceActorIds} index={index} onNavigate={props.onNavigate} /></section>}\n </div>\n </div>\n );\n}\n\nfunction ActionView({ action, index, ...props }: FlowInspectorProps & { action: RunAction; index: RunIndex }) {\n const [error, setError] = useState<string>();\n return (\n <div className={inspectorClass}>\n <DetailHeader canGoBack={props.canGoBack} eyebrow=\"Action\" onBack={props.onBack} subtitle={actorLabel(index, action.askedBy)} title={action.title} />\n <div className={statusClass}><StatusPill status={action.status} /></div>\n <div className={scrollClass}>\n {action.status === \"pending\" && <ActionCard action={action} onError={setError} runId={index.view.id} />}\n {action.description && <section className={sectionClass}><h3>Description</h3><p>{action.description}</p></section>}\n <section className={sectionClass}>\n <h3>Details</h3>\n <dl className={propertiesClass}>\n <dt>Asked by</dt><dd><EntityLink id={action.askedBy} index={index} onNavigate={props.onNavigate} /></dd>\n <dt>Proposed</dt><dd>{formatTime(action.proposedAt)}</dd>\n {action.resolvedAt && <><dt>Resolved</dt><dd>{formatTime(action.resolvedAt)}</dd></>}\n {action.owner && <><dt>Owner</dt><dd>{action.owner}</dd></>}\n {action.result !== null && action.result !== undefined && <><dt>Result</dt><dd>{typeof action.result === \"string\" ? action.result : JSON.stringify(action.result)}</dd></>}\n </dl>\n </section>\n {Object.keys(action.parameters).length > 0 && <section className={sectionClass}><h3>Parameters</h3><pre className={textBlockClass}>{JSON.stringify(action.parameters, null, 2)}</pre></section>}\n {action.payload !== null && action.payload !== undefined && <section className={sectionClass}><h3>Payload</h3><pre className={textBlockClass}>{JSON.stringify(action.payload, null, 2)}</pre></section>}\n {error && <p className={errorClass}>{error}</p>}\n </div>\n </div>\n );\n}\n\nfunction SelectionLink({ label, onNavigate, selection }: {\n label: string;\n onNavigate: (selection: FlowSelection) => void;\n selection: FlowSelection;\n}) {\n return <button className={linkClass} onClick={() => onNavigate(selection)} type=\"button\">{label}</button>;\n}\n\nfunction EntityLink({ id, index, onNavigate }: { id: string; index: RunIndex; onNavigate: (selection: FlowSelection) => void }) {\n return <SelectionLink label={actorLabel(index, id)} onNavigate={onNavigate} selection={{ type: \"actor\", id }} />;\n}\n\nfunction ActorRows({ actorIds, index, onNavigate }: {\n actorIds: string[];\n index: RunIndex;\n onNavigate: (selection: FlowSelection) => void;\n}) {\n return (\n <div className={rowsClass}>\n {actorIds.map((id) => {\n const actor = index.actorById.get(id);\n return (\n <button className={rowClass} key={id} onClick={() => onNavigate({ type: \"actor\", id })} type=\"button\">\n <span className={rowCopyClass}><strong>{actor?.displayName ?? shortId(id)}</strong><small>{actorLabel(index, id)}</small></span>\n {actor && <Badge className={pillClass}>{ACTOR_KIND_LABELS[actor.kind]}</Badge>}\n </button>\n );\n })}\n </div>\n );\n}\n\nfunction ArtifactRows({ artifacts, onNavigate }: { artifacts: RunArtifact[]; onNavigate: (selection: FlowSelection) => void }) {\n return (\n <section className={sectionClass}>\n <h3>Artifacts</h3>\n <div className={rowsClass}>\n {artifacts.map((artifact) => (\n <button className={rowClass} key={artifact.id} onClick={() => onNavigate({ type: \"artifact\", id: artifact.id })} type=\"button\">\n <span className={rowCopyClass}><strong>{artifact.title}</strong><small>{formatBytes(artifact.size)} - {artifact.mediaType}</small></span>\n </button>\n ))}\n </div>\n </section>\n );\n}\n\ntype ArtifactContent =\n | { kind: \"loading\" }\n | { kind: \"image\" }\n | { kind: \"download\" }\n | { kind: \"text\"; text: string }\n | { kind: \"error\"; message: string };\n\nconst isTextMedia = (mediaType: string) => {\n const lower = mediaType.toLowerCase();\n return lower.startsWith(\"text/\") || lower.includes(\"json\") || lower.includes(\"xml\") || lower.includes(\"yaml\");\n};\n\ninterface ArtifactContentHandle {\n content: ArtifactContent | undefined;\n retry: () => void;\n}\n\nfunction useArtifactContent(runId: string, artifact: RunArtifact | undefined): ArtifactContentHandle {\n const cacheRef = useRef(new Map<string, ArtifactContent>());\n const [version, setVersion] = useState(0);\n const artifactId = artifact?.id;\n\n const retry = () => {\n if (artifactId) cacheRef.current.delete(artifactId);\n setVersion((value) => value + 1);\n };\n\n useEffect(() => {\n if (!artifact || cacheRef.current.has(artifact.id)) return;\n if (artifact.mediaType.toLowerCase().startsWith(\"image/\")) {\n cacheRef.current.set(artifact.id, { kind: \"image\" });\n setVersion((value) => value + 1);\n return;\n }\n if (!isTextMedia(artifact.mediaType)) {\n cacheRef.current.set(artifact.id, { kind: \"download\" });\n setVersion((value) => value + 1);\n return;\n }\n cacheRef.current.set(artifact.id, { kind: \"loading\" });\n setVersion((value) => value + 1);\n void (async () => {\n try {\n const response = await fetch(runArtifactContentUrl(runId, artifact.id), { headers: { Accept: artifact.mediaType } });\n if (!response.ok) throw new Error(`${response.status} ${response.statusText}`);\n let text = await response.text();\n if (artifact.mediaType.toLowerCase().includes(\"json\")) {\n try {\n text = JSON.stringify(JSON.parse(text), null, 2);\n } catch {\n }\n }\n cacheRef.current.set(artifact.id, { kind: \"text\", text });\n } catch (error) {\n cacheRef.current.set(artifact.id, { kind: \"error\", message: error instanceof Error ? error.message : String(error) });\n }\n setVersion((value) => value + 1);\n })();\n }, [artifact, runId, version]);\n\n return { content: artifact ? cacheRef.current.get(artifact.id) : undefined, retry };\n}\n\ntype DiffRow = { kind: \"same\" | \"added\" | \"removed\"; text: string };\nconst DIFF_LINE_LIMIT = 5000;\n\nconst lineDiff = (left: string[], right: string[]): DiffRow[] => {\n const lengths = Array.from({ length: left.length + 1 }, () => new Uint32Array(right.length + 1));\n for (let row = left.length - 1; row >= 0; row -= 1) {\n for (let column = right.length - 1; column >= 0; column -= 1) {\n lengths[row][column] = left[row] === right[column]\n ? lengths[row + 1][column + 1] + 1\n : Math.max(lengths[row + 1][column], lengths[row][column + 1]);\n }\n }\n\n const rows: DiffRow[] = [];\n let row = 0;\n let column = 0;\n while (row < left.length && column < right.length) {\n if (left[row] === right[column]) {\n rows.push({ kind: \"same\", text: left[row] });\n row += 1;\n column += 1;\n } else if (lengths[row + 1][column] >= lengths[row][column + 1]) {\n rows.push({ kind: \"removed\", text: left[row] });\n row += 1;\n } else {\n rows.push({ kind: \"added\", text: right[column] });\n column += 1;\n }\n }\n while (row < left.length) rows.push({ kind: \"removed\", text: left[row++] });\n while (column < right.length) rows.push({ kind: \"added\", text: right[column++] });\n return rows;\n};\n\nfunction ArtifactDiff({ artifact, index }: { artifact: RunArtifact; index: RunIndex }) {\n const previous = artifact.previousVersionId ? index.artifactById.get(artifact.previousVersionId) : undefined;\n const before = useArtifactContent(index.view.id, previous).content;\n const after = useArtifactContent(index.view.id, artifact).content;\n const beforeText = before?.kind === \"text\" ? before.text : undefined;\n const afterText = after?.kind === \"text\" ? after.text : undefined;\n const rows = useMemo(() => {\n if (beforeText === undefined || afterText === undefined) return undefined;\n const left = beforeText.split(\"\\n\");\n const right = afterText.split(\"\\n\");\n if (left.length > DIFF_LINE_LIMIT || right.length > DIFF_LINE_LIMIT) return \"too large\" as const;\n return lineDiff(left, right);\n }, [beforeText, afterText]);\n\n if (!artifact.previousVersionId) return null;\n if (!previous) return <p className={mutedClass}>Previous version not in this projection.</p>;\n if (!before || !after || before.kind === \"loading\" || after.kind === \"loading\") return <p className={mutedClass}>Loading comparison ...</p>;\n if (rows === undefined) return <p className={mutedClass}>{artifact.mediaType} is not compared line by line.</p>;\n if (rows === \"too large\") return <p className={mutedClass}>Too large for the line comparison (more than {DIFF_LINE_LIMIT} lines).</p>;\n if (rows.every((entry) => entry.kind === \"same\")) return <p className={mutedClass}>Both versions have the same text.</p>;\n const marks = { same: \" \", added: \"+\", removed: \"-\" };\n return <pre className=\"my-1.5 overflow-x-auto rounded-lg bg-foreground/4 p-2 text-[0.7rem] [&>span]:block [&>span]:whitespace-pre [&>span[data-diff=added]]:bg-success-soft [&>span[data-diff=removed]]:bg-destructive-soft\">{rows.map((entry, position) => <span data-diff={entry.kind} key={position}>{marks[entry.kind]} {entry.text}{\"\\n\"}</span>)}</pre>;\n}\n\nfunction ArtifactView({ artifact, index, ...props }: FlowInspectorProps & { artifact: RunArtifact; index: RunIndex }) {\n const view = index.view;\n const { content, retry } = useArtifactContent(view.id, artifact);\n const carriedOn = view.inputs.filter((input) => input.artifactIds.includes(artifact.id));\n return (\n <div className={inspectorClass}>\n <header className={headClass}>\n <BackButton canGoBack={props.canGoBack} onBack={props.onBack} />\n <div className=\"min-w-0 flex-1\">\n <p className=\"mb-0.5 text-[0.66rem] font-semibold tracking-[0.08em] uppercase text-muted-foreground\">Artifact</p>\n <h2>{artifact.title}</h2>\n <span className={subtitleClass}>by {actorLabel(index, artifact.createdBy)} - {formatBytes(artifact.size)} - {artifact.mediaType}</span>\n </div>\n <Button render={<a href={runArtifactContentUrl(view.id, artifact.id)} />} size=\"sm\" variant=\"outline\">Download</Button>\n </header>\n <div className={scrollClass}>\n <section className={sectionClass}>\n <h3>Content</h3>\n {(!content || content.kind === \"loading\") && <p className={mutedClass}>Loading artifact ...</p>}\n {content?.kind === \"error\" && <p className={errorClass}>{content.message} <button className={linkClass} onClick={retry} type=\"button\">Reload</button></p>}\n {content?.kind === \"download\" && <p className={mutedClass}>No preview for {artifact.mediaType}.</p>}\n {content?.kind === \"image\" && <img alt={artifact.title} className=\"max-w-full rounded-lg\" src={runArtifactContentUrl(view.id, artifact.id)} />}\n {content?.kind === \"text\" && <pre className={textBlockClass}>{content.text}</pre>}\n </section>\n {artifact.previousVersionId && <section className={sectionClass}><h3>Change from previous version</h3><ArtifactDiff artifact={artifact} index={index} /></section>}\n {carriedOn.length > 0 && (\n <section className={sectionClass}>\n <h3>Used in inputs</h3>\n <div className={rowsClass}>\n {carriedOn.map((input) => (\n <button className={rowClass} key={input.id} onClick={() => props.onNavigate({ type: \"input\", id: input.id })} type=\"button\">\n <span className={rowCopyClass}><strong>{input.content}</strong><small>{inputDeliveryLabel(index, input)} - {formatTime(input.enqueuedAt)}</small></span>\n </button>\n ))}\n </div>\n </section>\n )}\n <section className={sectionClass}>\n <h3>Details</h3>\n <dl className={propertiesClass}>\n <dt>Created by</dt><dd><EntityLink id={artifact.createdBy} index={index} onNavigate={props.onNavigate} /></dd>\n <dt>Hash</dt><dd>{shortId(artifact.hash)}</dd>\n <dt>Created</dt><dd>{formatTime(artifact.createdAt)}</dd>\n {artifact.previousVersionId && <><dt>Previous version</dt><dd><SelectionLink label={shortId(artifact.previousVersionId)} onNavigate={props.onNavigate} selection={{ type: \"artifact\", id: artifact.previousVersionId }} /></dd></>}\n </dl>\n </section>\n </div>\n </div>\n );\n}\n", "import { cn } from \"@ragents/web/ui\";\n\nexport type MaterialTone = \"agent\" | \"primary\" | \"script\" | \"app\";\n\n/** Layered material: matte front with straight edges. */\nconst materialBaseClass = \"relative isolate rounded-panel border-[1.5px] border-(--material-edge) bg-(--material-face) [--material-edge:#514657] dark:[--material-edge:#b7a8bd]\";\n\nconst materialToneClass: Readonly<Record<MaterialTone, string>> = {\n agent: \"[--material-face:var(--color-glass-agent)]\",\n primary: \"[--material-face:var(--color-glass-primary)]\",\n script: \"[--material-face:var(--color-glass-script)]\",\n app: \"[--material-face:var(--color-glass-app)]\",\n};\n\nexport const materialCardClass = (tone: MaterialTone, className?: string) =>\n cn(materialBaseClass, materialToneClass[tone], className);\n\n/** Header of a material card: the same front, a touch darker, rounded at the top. */\nexport const materialHeadClass = \"relative flex items-center gap-2 rounded-t-[15.5px] bg-[color-mix(in_srgb,var(--material-face)_96%,black)] px-3 py-2\";\n\nexport const materialTitleClass = \"min-w-0 truncate p-0 text-[17px] font-[730] leading-[1.3] tracking-[-.5px]\";\n\nexport const materialIconClass = \"grid size-8 flex-none place-items-center rounded-[11px] border border-[#5146578a] bg-white/9 text-foreground shadow-glass-icon\";\n", "import { useCallback, useEffect, useLayoutEffect, useMemo, useRef, useState, type CSSProperties, type ReactNode } from \"react\";\nimport { ArrowDown, ArrowLeft, ArrowRight, ArrowUp, CodeXml, LayoutGrid, Sparkles, GripVertical, X } from \"lucide-react\";\nimport { surfaceTileNodeOf, type SurfaceTileNode } from \"../tiled-layout\";\nimport { SURFACE_TILE_DRAG_TYPE, dockTile, removeTile, resizeTile, tileEntities, tileGeometry, tileMinimum, type TileDivider, type TileDockSide, type TileRect } from \"./tile-docking\";\nimport { materialCardClass, materialHeadClass, materialIconClass, materialTitleClass } from \"./MaterialBody\";\n\nexport interface SurfaceTileItem { entity: string; title: string; content: ReactNode; tone?: \"agent\" | \"primary\" | \"script\" | \"app\" }\ninterface TiledSurfaceProps {\n root: SurfaceTileNode | null;\n onChange: (root: SurfaceTileNode | null) => void;\n items: readonly SurfaceTileItem[];\n canArrange: boolean;\n selectedEntity?: string;\n onSelect?: (entity: string) => void;\n}\ninterface DockTarget { entity: string | null; side: TileDockSide }\nconst sides: readonly TileDockSide[] = [\"left\", \"right\", \"top\", \"bottom\"];\nconst sideNames = { left: \"Dock left\", right: \"Dock right\", top: \"Dock top\", bottom: \"Dock bottom\" };\nconst sideIcons = { left: ArrowLeft, right: ArrowRight, top: ArrowUp, bottom: ArrowDown };\nconst materialFaceRect = (slot: TileRect): TileRect => ({\n left: slot.left + 2,\n top: slot.top + 2,\n width: Math.max(0, slot.width - 4),\n height: Math.max(0, slot.height - 4),\n});\nconst positioned = (rect: TileRect): CSSProperties => ({ left: rect.left, top: rect.top, width: rect.width, height: rect.height });\nconst sidePlacement = {\n left: { inner: \"left-0 top-[40px]\", outer: \"left-0 top-[calc(50%_-_18px)]\" },\n right: { inner: \"right-0 top-[40px]\", outer: \"right-0 top-[calc(50%_-_18px)]\" },\n top: { inner: \"top-0 left-[40px]\", outer: \"top-0 left-[calc(50%_-_18px)]\" },\n bottom: { inner: \"bottom-0 left-[40px]\", outer: \"bottom-0 left-[calc(50%_-_18px)]\" },\n};\nconst dockTargetClass = \"absolute grid size-[36px] place-items-center rounded-[5px] border border-primary bg-surface text-primary shadow-[0_2px_8px_#0002] pointer-events-auto data-[active]:bg-primary data-[active]:text-surface [&>svg]:pointer-events-none\";\nconst dividerClass = \"absolute z-3 grid touch-none place-items-center rounded-[4px] focus-visible:outline-2 focus-visible:outline-primary focus-visible:-outline-offset-2 data-[direction=horizontal]:cursor-col-resize data-[direction=vertical]:cursor-row-resize [&>span]:pointer-events-none [&>span]:rounded-[4px] [&>span]:bg-border-strong data-[direction=horizontal]:[&>span]:h-8 data-[direction=horizontal]:[&>span]:w-[3px] data-[direction=vertical]:[&>span]:h-[3px] data-[direction=vertical]:[&>span]:w-8 hover:[&>span]:bg-primary focus-visible:[&>span]:bg-primary\";\n\nexport function TiledSurface({ root, onChange, items, canArrange, selectedEntity, onSelect }: TiledSurfaceProps) {\n const stageRef = useRef<HTMLDivElement>(null);\n const [size, setSize] = useState({ width: 0, height: 0 });\n const [available, setAvailable] = useState({ width: 0, height: 0 });\n const [dragEntity, setDragEntity] = useState<string | null>(null);\n const [target, setTarget] = useState<DockTarget | null>(null);\n const [resizing, setResizing] = useState(false);\n const [error, setError] = useState<string | null>(null);\n const [selected, setSelected] = useState<string>();\n const [resizePreview, setResizePreview] = useState<SurfaceTileNode | null>(null);\n const resizeFrame = useRef<number | null>(null);\n const resizeRef = useRef<{ divider: TileDivider; start: number; root: SurfaceTileNode; next: SurfaceTileNode; pointerId: number; handle: HTMLDivElement } | null>(null);\n const visibleRoot = resizePreview ?? root;\n const entities = useMemo(() => tileEntities(root), [root]);\n const mountedEntities = useMemo(() => [...entities].sort(), [entities]);\n const itemMap = useMemo(() => new Map(items.map((item) => [item.entity, item])), [items]);\n const minimum = root ? tileMinimum(root) : { width: 0, height: 0 };\n const compact = available.width < minimum.width || available.height < minimum.height;\n const active = selected && entities.includes(selected) ? selected : entities[0];\n const rect = { left: 0, top: 0, ...size };\n const geometry = useMemo(() => visibleRoot ? tileGeometry(visibleRoot, { left: 0, top: 0, ...size }) : { leaves: new Map<string, TileRect>(), dividers: [] }, [visibleRoot, size]);\n\n useLayoutEffect(() => {\n const stage = stageRef.current;\n if (!stage) return;\n const container = stage.parentElement!;\n const measure = () => {\n const width = stage.clientWidth;\n const height = stage.clientHeight;\n setSize((previous) => previous.width === width && previous.height === height ? previous : { width, height });\n const style = getComputedStyle(container);\n const availableWidth = container.clientWidth - parseFloat(style.paddingLeft) - parseFloat(style.paddingRight);\n const availableHeight = container.clientHeight - parseFloat(style.paddingTop) - parseFloat(style.paddingBottom);\n setAvailable((previous) => previous.width === availableWidth && previous.height === availableHeight\n ? previous : { width: availableWidth, height: availableHeight });\n };\n const observer = new ResizeObserver(measure);\n observer.observe(stage);\n observer.observe(container);\n measure();\n return () => observer.disconnect();\n }, []);\n\n useEffect(() => { if (selectedEntity) setSelected(selectedEntity); }, [selectedEntity]);\n useLayoutEffect(() => {\n if (!canArrange) { setDragEntity(null); setTarget(null); return; }\n let pendingFrame: number | null = null;\n const cancelActivation = () => {\n if (pendingFrame !== null) cancelAnimationFrame(pendingFrame);\n pendingFrame = null;\n };\n const start = (event: DragEvent) => {\n if (!event.dataTransfer?.types.includes(SURFACE_TILE_DRAG_TYPE)) return;\n const entity = event.dataTransfer.getData(SURFACE_TILE_DRAG_TYPE);\n if (!entity) return;\n cancelActivation();\n pendingFrame = requestAnimationFrame(() => {\n pendingFrame = null;\n if (!event.defaultPrevented) setDragEntity(entity);\n });\n };\n const end = () => { cancelActivation(); setDragEntity(null); setTarget(null); };\n const key = (event: KeyboardEvent) => { if (event.key === \"Escape\") end(); };\n window.addEventListener(\"dragstart\", start);\n window.addEventListener(\"dragend\", end);\n window.addEventListener(\"drop\", end);\n window.addEventListener(\"keydown\", key);\n return () => {\n cancelActivation();\n window.removeEventListener(\"dragstart\", start);\n window.removeEventListener(\"dragend\", end);\n window.removeEventListener(\"drop\", end);\n window.removeEventListener(\"keydown\", key);\n };\n }, [canArrange]);\n\n const cancelResize = useCallback(() => {\n if (resizeFrame.current !== null) cancelAnimationFrame(resizeFrame.current);\n resizeFrame.current = null;\n const state = resizeRef.current;\n resizeRef.current = null;\n if (state?.handle.hasPointerCapture(state.pointerId)) state.handle.releasePointerCapture(state.pointerId);\n setResizePreview(null);\n setResizing(false);\n }, []);\n\n useLayoutEffect(() => {\n cancelResize();\n return cancelResize;\n }, [root, size, compact, cancelResize]);\n\n useEffect(() => {\n if (!resizing) return;\n const key = (event: KeyboardEvent) => { if (event.key === \"Escape\") cancelResize(); };\n window.addEventListener(\"keydown\", key);\n window.addEventListener(\"blur\", cancelResize);\n return () => {\n window.removeEventListener(\"keydown\", key);\n window.removeEventListener(\"blur\", cancelResize);\n };\n }, [resizing, cancelResize]);\n\n const updateResize = (event: { pointerId: number; clientX: number; clientY: number }) => {\n const state = resizeRef.current;\n if (!state || state.pointerId !== event.pointerId) return;\n const coordinate = state.divider.direction === \"horizontal\" ? event.clientX : event.clientY;\n const ratio = Math.max(state.divider.minimum, Math.min(state.divider.maximum,\n state.divider.ratio + (coordinate - state.start) / state.divider.span));\n state.next = coordinate === state.start ? state.root : resizeTile(state.root, state.divider.path, ratio);\n };\n\n const select = (entity: string) => { setSelected(entity); onSelect?.(entity); };\n const previewRoot = canArrange && target && dragEntity ? dockTile(root, dragEntity, target.entity, target.side) : null;\n const previewMinimum = previewRoot ? tileMinimum(previewRoot) : null;\n const preview = previewRoot && previewRoot !== root && previewMinimum && dragEntity\n ? available.width < previewMinimum.width || available.height < previewMinimum.height\n ? rect\n : tileGeometry(previewRoot, rect).leaves.get(dragEntity)\n : null;\n\n const targets = (entity: string | null) => sides.map((side) => {\n const Icon = sideIcons[side];\n return <div key={side} className={`${dockTargetClass} ${sidePlacement[side][entity === null ? \"outer\" : \"inner\"]}`}\n data-dock-side={side} data-dock-entity={entity ?? \"\"} title={sideNames[side]}\n data-active={target?.entity === entity && target.side === side || undefined}>\n <Icon size={18} aria-hidden=\"true\" />\n </div>;\n });\n\n return <div className=\"flex h-full min-h-0 min-w-0 flex-1 flex-col overflow-hidden p-2 data-[dragging]:[&_iframe]:pointer-events-none data-[resizing]:[&_iframe]:pointer-events-none\"\n data-dragging={canArrange && dragEntity !== null || undefined} data-resizing={resizing || undefined}>\n {compact && entities.length > 1 && <label className=\"flex items-center gap-2 pb-2 text-[0.8rem]\">Tile\n <select className=\"max-w-[60%] min-w-0\" aria-label=\"Visible tile\" value={active} onChange={(event) => select(event.target.value)}>\n {entities.map((entity) => <option key={entity} value={entity}>{itemMap.get(entity)?.title ?? entity}</option>)}\n </select>\n <span className=\"truncate text-muted-foreground\">More space needed for the split view</span>\n </label>}\n <div ref={stageRef} className=\"relative min-h-0 min-w-0 flex-1 overflow-hidden\"\n onDragOver={(event) => {\n if (!canArrange || dragEntity === null || !event.dataTransfer.types.includes(SURFACE_TILE_DRAG_TYPE)) return;\n event.preventDefault();\n event.dataTransfer.dropEffect = \"move\";\n const element = event.target instanceof Element ? event.target.closest<HTMLElement>(\"[data-dock-side]\") : null;\n const next = element && stageRef.current?.contains(element)\n ? { entity: element.dataset.dockEntity || null, side: element.dataset.dockSide as TileDockSide } : null;\n setTarget((previous) => previous?.entity === next?.entity && previous?.side === next?.side ? previous : next);\n }}\n onDragLeave={(event) => { if (!event.currentTarget.contains(event.relatedTarget as Node | null)) setTarget(null); }}\n onDrop={(event) => {\n if (!canArrange || dragEntity === null) return;\n const entity = event.dataTransfer.getData(SURFACE_TILE_DRAG_TYPE);\n if (!entity || entity !== dragEntity) return;\n event.preventDefault();\n if (!itemMap.has(entity) && !entities.includes(entity)) return;\n const element = event.target instanceof Element ? event.target.closest<HTMLElement>(\"[data-dock-side]\") : null;\n try {\n if (!root || element) {\n const next = dockTile(root, entity, element?.dataset.dockEntity || null, (element?.dataset.dockSide ?? \"right\") as TileDockSide);\n if (next !== root) onChange(next === null ? null : surfaceTileNodeOf(next));\n select(entity);\n setError(null);\n }\n } catch (cause) {\n setError(cause instanceof Error ? cause.message : String(cause));\n } finally {\n setDragEntity(null);\n setTarget(null);\n }\n }}>\n {error && <div className=\"absolute inset-x-2 bottom-2 z-7 flex items-center gap-2 rounded-lg border border-primary bg-surface p-3 text-foreground shadow-[0_2px_8px_#0002]\" role=\"alert\"><span className=\"flex-1\">{error}</span><button className=\"grid cursor-pointer place-items-center bg-transparent p-1\" type=\"button\" aria-label=\"Close message\" onClick={() => setError(null)}><X size={16} /></button></div>}\n {!root && <div className=\"grid h-full place-items-center rounded-lg border border-dashed border-border-strong p-6 text-center text-muted-foreground\">{canArrange ? \"Drag an actor or a mini-app from the header here.\" : \"No content has been arranged for this tile view yet.\"}</div>}\n {mountedEntities.map((entity) => {\n const item = itemMap.get(entity);\n const bounds = materialFaceRect(compact ? rect : geometry.leaves.get(entity)!);\n return <section key={entity} className={materialCardClass(item?.tone ?? (entity.startsWith(\"app:\") ? \"app\" : \"agent\"),\n \"absolute z-0 flex min-h-0 min-w-0 flex-col overflow-visible\")} data-tile-entity={entity} data-tone=\"material\"\n style={{ ...positioned(bounds), display: compact && entity !== active ? \"none\" : undefined }}\n onFocusCapture={() => { if (active !== entity) setSelected(entity); }}>\n <div className=\"flex min-h-0 min-w-0 flex-1 flex-col overflow-hidden rounded-[15.5px]\">\n <header className={`${materialHeadClass} flex-[0_0_49px] min-w-0 select-none border-b border-[#51465738] text-foreground [&[draggable=true]]:cursor-grab`}\n draggable={canArrange} onDragStart={(event) => {\n if (!canArrange) { event.preventDefault(); return; }\n event.dataTransfer.setData(SURFACE_TILE_DRAG_TYPE, entity);\n event.dataTransfer.effectAllowed = \"move\";\n }}>\n {canArrange && <GripVertical size={16} aria-hidden=\"true\" />}\n <span className={materialIconClass}>{item?.tone === \"app\" || entity.startsWith(\"app:\") ? <LayoutGrid size={20} aria-hidden=\"true\" /> : item?.tone === \"script\" ? <CodeXml size={20} aria-hidden=\"true\" /> : <Sparkles size={20} aria-hidden=\"true\" />}</span>\n <span className={`${materialTitleClass} flex-1`} title={item?.title ?? entity}>{item?.title ?? entity}</span>\n {canArrange && <button className=\"grid size-[26px] cursor-pointer place-items-center rounded-[4px] bg-transparent p-0 text-muted-foreground hover:bg-glass-group hover:text-foreground\"\n type=\"button\" draggable={false} aria-label={`Remove tile ${item?.title ?? entity}`}\n onClick={() => onChange(removeTile(root, entity))}><X size={16} /></button>}\n </header>\n <div className=\"flex min-h-0 min-w-0 flex-1 flex-col overflow-auto [&>*]:min-h-0 [&>*]:min-w-0 [&>*]:flex-1\">{item?.content ?? <div className=\"p-4.5 text-muted-foreground\">{canArrange ? \"This content is no longer available. You can remove the tile or dock other content here.\" : \"This content is no longer available.\"}</div>}</div>\n </div>\n {canArrange && dragEntity !== null && dragEntity !== entity && <div className=\"absolute inset-0 z-4\"><div className=\"pointer-events-none absolute top-1/2 left-1/2 size-[116px] -translate-x-1/2 -translate-y-1/2\">{targets(entity)}</div></div>}\n </section>;\n })}\n {!compact && geometry.dividers.map((divider) => <div key={divider.path.join(\".\")} className={dividerClass}\n role=\"separator\" tabIndex={0} aria-label=\"Resize tile\"\n aria-orientation={divider.direction === \"horizontal\" ? \"vertical\" : \"horizontal\"}\n aria-valuemin={Math.round(divider.minimum * 100)} aria-valuemax={Math.round(divider.maximum * 100)} aria-valuenow={Math.round(divider.ratio * 100)}\n data-direction={divider.direction} style={positioned(divider)}\n onPointerDown={(event) => {\n if (event.button !== 0 || !event.isPrimary || !root || resizeRef.current) return;\n event.preventDefault();\n event.currentTarget.setPointerCapture(event.pointerId);\n resizeRef.current = { divider, start: divider.direction === \"horizontal\" ? event.clientX : event.clientY, root, next: root, pointerId: event.pointerId, handle: event.currentTarget };\n setResizing(true);\n }}\n onPointerMove={(event) => {\n if (resizeRef.current?.pointerId !== event.pointerId) return;\n updateResize(event);\n if (resizeFrame.current !== null) return;\n resizeFrame.current = requestAnimationFrame(() => {\n resizeFrame.current = null;\n if (resizeRef.current) setResizePreview(resizeRef.current.next);\n });\n }}\n onPointerUp={(event) => {\n const state = resizeRef.current;\n if (!state || state.pointerId !== event.pointerId) return;\n updateResize(event);\n cancelResize();\n if (state.next !== state.root) onChange(state.next);\n }}\n onLostPointerCapture={(event) => { if (resizeRef.current?.pointerId === event.pointerId) cancelResize(); }}\n onPointerCancel={(event) => { if (resizeRef.current?.pointerId === event.pointerId) cancelResize(); }}\n onKeyDown={(event) => {\n if (event.key === \"Escape\" && resizeRef.current) { event.preventDefault(); cancelResize(); return; }\n if (!root || resizeRef.current) return;\n const negative = divider.direction === \"horizontal\" ? \"ArrowLeft\" : \"ArrowUp\";\n const positive = divider.direction === \"horizontal\" ? \"ArrowRight\" : \"ArrowDown\";\n if (event.key !== negative && event.key !== positive && event.key !== \"Home\" && event.key !== \"End\") return;\n event.preventDefault();\n const ratio = event.key === \"Home\" ? divider.minimum : event.key === \"End\" ? divider.maximum : divider.ratio + (event.key === positive ? 0.02 : -0.02);\n onChange(resizeTile(root, divider.path, Math.max(divider.minimum, Math.min(divider.maximum, ratio))));\n }}><span /></div>)}\n {resizing && <div className=\"absolute inset-0 z-2\" />}\n {canArrange && dragEntity !== null && root && <div className=\"pointer-events-none absolute inset-2 z-6\">{targets(null)}</div>}\n {canArrange && dragEntity !== null && preview && <div className={materialCardClass(itemMap.get(dragEntity)?.tone ?? (dragEntity.startsWith(\"app:\") ? \"app\" : \"agent\"),\n \"pointer-events-none absolute z-5 opacity-80\")}\n style={positioned(materialFaceRect(preview))}><div className=\"absolute inset-0 rounded-[15.5px] border-2 border-primary bg-primary/22\" /></div>}\n </div>\n </div>;\n}\n", "import { useAccess } from \"@ragents/web/AccessContext\";\nimport type { SurfaceElementContribution, CardSectionContribution, EntityReference, SessionContext, SessionNavigation } from \"@ragents/web/PluginRegistry\";\nimport { surfaceTileChatInput, type SurfaceTileNode } from \"../tiled-layout\";\nimport { ActorTile } from \"./ActorTile\";\nimport { FlowInspector } from \"./FlowInspector\";\nimport { TiledSurface, type SurfaceTileItem } from \"./TiledSurface\";\nimport { actorTone, type RunView } from \"@ragents/web/run-view\";\n\nexport function SurfaceTiles({ root, onChange, surfaceElements, cardSections, session, view, navigation, onSelect, selected }: {\n root: SurfaceTileNode | null;\n onChange: (root: SurfaceTileNode | null) => void;\n surfaceElements: readonly SurfaceElementContribution[];\n cardSections: readonly CardSectionContribution[];\n session: SessionContext;\n view: RunView;\n navigation: SessionNavigation;\n onSelect: (selection: EntityReference) => void;\n selected?: EntityReference;\n}) {\n const inspect = useAccess().can(\"runs.inspect\");\n const actors = view.actors.filter((actor) => actor.kind !== \"human\" && actor.lifecycle?.kind !== \"stopped\"\n && (inspect || actor.kind === \"agent\"));\n const items: SurfaceTileItem[] = [\n ...actors.map((actor): SurfaceTileItem => ({\n entity: `@${actor.handle}`,\n title: `${actor.displayName || actor.handle} (@${actor.handle})`,\n tone: actorTone(view, actor),\n content: actor.kind === \"agent\"\n ? <ActorTile actor={actor} view={view} cardSections={cardSections} chatInput={surfaceTileChatInput(root, `@${actor.handle}`)} session={session} navigation={navigation} onSelect={onSelect} />\n : <FlowInspector view={view} selection={{ type: \"actor\", id: actor.id }} canGoBack={false} chatDisplay=\"surface\"\n composerVisible={false} onNavigate={onSelect} onBack={() => {}} primaryMessages={session.messages}\n actorConversations={session.actorConversations} conversationError={session.conversationError} primaryRunning={session.running} />,\n })),\n ...surfaceElements.flatMap(({ Element, select }) => select(session)\n .filter((definition) => definition.visible !== false)\n .map((definition): SurfaceTileItem => ({\n entity: `app:${definition.id}`,\n title: definition.title ?? definition.id,\n tone: \"app\",\n content: <Element definition={definition} navigation={navigation} session={session} />,\n }))),\n ];\n const selectedEntity = selected?.type === \"run-app\" ? `app:${selected.id}`\n : selected?.type === \"actor\" ? actors.find((actor) => actor.id === selected.id)?.handle : undefined;\n return <TiledSurface root={root} onChange={onChange} items={items} canArrange={inspect}\n selectedEntity={selected?.type === \"actor\" && selectedEntity ? `@${selectedEntity}` : selectedEntity} />;\n}\n", "import { StartupNotice } from \"@ragents/web/ui\";\nimport type { SurfaceStartupState } from \"./surface-startup\";\n\nexport function SurfaceStartup({ state }: { state: SurfaceStartupState }) {\n return <div className=\"pointer-events-none absolute inset-y-0 left-0 grid w-[var(--surface-visible-width,100%)] place-items-center p-6\">\n <StartupNotice state={state} />\n </div>;\n}\n", "import type { ChatStartupStatus } from \"quassel/events\";\nimport type { StartupNoticeState } from \"@ragents/web/ui\";\nimport { isPendingRunActorInput, type RunView } from \"@ragents/web/run-view\";\n\nexport type SurfaceStartupState = StartupNoticeState;\n\nexport function surfaceStartupState({ view, startup, connected, running, error }: {\n view: RunView | undefined;\n startup: ChatStartupStatus | undefined;\n connected: boolean;\n running: boolean;\n error: string | undefined;\n}): SurfaceStartupState | undefined {\n if (startup?.status === \"failed\") return { kind: \"error\", title: \"The run could not be prepared\", detail: startup.message };\n if (error) return { kind: \"error\", title: \"The run status is unreachable\", detail: error };\n if (startup?.status === \"preparing\") return { kind: \"working\", title: \"Preparing run\", detail: startup.message };\n const actors = view?.actors.filter((actor) => actor.kind !== \"human\") ?? [];\n const activeActors = actors.filter((actor) => actor.lifecycle?.kind !== \"stopped\");\n if (actors.length && !activeActors.length) return { kind: \"stopped\", title: \"The run was stopped\", detail: \"No further work is performed.\" };\n if (view?.actions.some((action) => action.status === \"pending\")) return {\n kind: \"waiting\", title: \"Your input is needed\", detail: \"An action in the chat is waiting for your input.\",\n };\n const activeIds = new Set(activeActors.map((actor) => actor.id));\n const working = running || activeActors.some((actor) => actor.lifecycle?.kind === \"running\")\n || view?.turns.some((turn) => activeIds.has(turn.actorId) && turn.status === \"running\")\n || view?.inputs.some((input) => activeIds.has(input.actorId) && isPendingRunActorInput(input));\n if (working) return { kind: \"working\", title: \"Setting up the run\", detail: \"The interface is being built. The elements appear automatically.\" };\n const failed = activeActors.map((actor) => view?.turns.filter((turn) => turn.actorId === actor.id).at(-1))\n .find((turn) => turn?.status === \"failed\" || turn?.status === \"interrupted\");\n if (failed) return { kind: \"error\", title: \"The setup was halted\", detail: failed.reason || \"The last work step could not be completed.\" };\n if (!connected) return { kind: \"working\", title: \"Loading run\", detail: \"Connecting to the run.\" };\n return undefined;\n}\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"@ragents/web/lib/local-storage-setting\", \"createLocalStorageSetting\");\n", "import { createLocalStorageSetting } from \"@ragents/web/lib/local-storage-setting\";\nimport { useEffect, useMemo } from \"react\";\nimport { ORCHESTRATION_PLUGIN_ID, surfaceLayoutOf } from \"../contract\";\nimport { surfaceTileEntities, surfaceTileNodeOf, type SurfaceTileNode } from \"../tiled-layout\";\nimport type { RunView } from \"@ragents/web/run-view\";\n\nexport interface SurfacePresentation {\n root: SurfaceTileNode | null;\n programBasis?: string;\n}\n\nexport const surfacePresentationStorageKey = (runId: string) => `ragents.orchestration.tile-presentation:${runId}`;\n\nexport function parseSurfacePresentation(raw: string | null): SurfacePresentation | null {\n if (raw === null || raw === \"null\") return null;\n const value: unknown = JSON.parse(raw);\n if (!value || typeof value !== \"object\" || Array.isArray(value)\n || !(\"root\" in value) || Object.keys(value).some((key) => ![\"root\", \"programBasis\"].includes(key))\n || (\"programBasis\" in value && typeof value.programBasis !== \"string\")) {\n throw new Error(\"The stored tile view is invalid.\");\n }\n return { root: value.root === null ? null : surfaceTileNodeOf(value.root),\n ...(\"programBasis\" in value ? { programBasis: value.programBasis as string } : {}),\n };\n}\n\nconst setting = createLocalStorageSetting({\n changeEvent: \"ragents-tile-presentation-change\",\n matchesKey: (key) => key.startsWith(\"ragents.orchestration.tile-presentation:\"),\n parse: parseSurfacePresentation,\n serialize: JSON.stringify,\n});\n\nexport const useSurfacePresentationOverride = (runId: string) => setting.useValue(surfacePresentationStorageKey(runId));\nexport const saveSurfacePresentation = (runId: string, value: SurfacePresentation | null) =>\n setting.save(surfacePresentationStorageKey(runId), value);\n\nexport const surfaceProgramBasis = (program: SurfacePresentation): string => JSON.stringify({ root: program.root });\n\nexport function currentSurfaceOverride(personal: SurfacePresentation | null, program: SurfacePresentation): SurfacePresentation | null {\n if (!personal) return null;\n if (personal.programBasis !== undefined) return personal.programBasis === surfaceProgramBasis(program) ? personal : null;\n const entities = new Set(surfaceTileEntities(personal.root));\n return surfaceTileEntities(program.root).some((entity) => !entities.has(entity)) ? null : personal;\n}\n\nexport function useSurfacePresentation(runId: string, view: RunView | undefined) {\n const state = view?.pluginStates.find((entry) => entry.pluginId === ORCHESTRATION_PLUGIN_ID && entry.scope.kind === \"run\")?.state;\n const stateKey = useMemo(() => state === undefined ? undefined : JSON.stringify(state), [state]);\n const programLayout = useMemo(() => {\n try { return { layout: stateKey === undefined ? undefined : surfaceLayoutOf(JSON.parse(stateKey)) }; }\n catch (error) { return { error: error instanceof Error ? error.message : String(error) }; }\n }, [stateKey]);\n const program = useMemo((): SurfacePresentation => ({ root: programLayout.layout?.root ?? null }), [programLayout]);\n const programBasis = useMemo(() => surfaceProgramBasis(program), [program]);\n const storedLayout = useSurfacePresentationOverride(runId);\n const personalLayout = view && !programLayout.error ? currentSurfaceOverride(storedLayout, program) : storedLayout;\n useEffect(() => {\n if (storedLayout && !personalLayout) saveSurfacePresentation(runId, null);\n }, [runId, storedLayout, personalLayout]);\n return { programLayout, personalLayout, presentation: personalLayout ?? program, programBasis };\n}\n\nexport function initialTileLayout(entities: readonly string[], direction: \"horizontal\" | \"vertical\" = \"horizontal\"): SurfaceTileNode | null {\n if (entities.length === 0) return null;\n if (entities.length === 1) return { entity: entities[0]! };\n const middle = Math.ceil(entities.length / 2);\n const nextDirection = direction === \"horizontal\" ? \"vertical\" : \"horizontal\";\n return {\n direction,\n weights: [middle, entities.length - middle],\n children: [initialTileLayout(entities.slice(0, middle), nextDirection)!, initialTileLayout(entities.slice(middle), nextDirection)!],\n };\n}\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"@ragents/web/StatusGroup\", \"StatusGroup\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"@ragents/web/Toolbar\", \"ToolbarCopy\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"@ragents/web/Toolbar\", \"ToolbarItem\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"@ragents/web/Toolbar\", \"ToolbarLabel\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"@ragents/web/Toolbar\", \"ToolbarText\");\n", "import { createLocalStorageSetting } from \"@ragents/web/lib/local-storage-setting\";\nimport type { RunActor } from \"@ragents/web/run-view\";\n\nexport interface SurfaceViewPreferences {\n actorVisibility: Readonly<Record<string, boolean>>;\n}\n\nexport const DEFAULT_SURFACE_VIEW_PREFERENCES: SurfaceViewPreferences = Object.freeze({ actorVisibility: Object.freeze({}) });\nexport const surfaceViewStorageKey = (runId: string) => `ragents.orchestration.actor-visibility:${runId}`;\n\nexport function parseSurfaceViewPreferences(raw: string | null): SurfaceViewPreferences {\n if (raw === null) return DEFAULT_SURFACE_VIEW_PREFERENCES;\n const value: unknown = JSON.parse(raw);\n if (!value || typeof value !== \"object\" || Array.isArray(value)\n || Object.keys(value).some((key) => key !== \"actorVisibility\")\n || !(\"actorVisibility\" in value) || !value.actorVisibility || typeof value.actorVisibility !== \"object\"\n || Array.isArray(value.actorVisibility) || Object.values(value.actorVisibility).some((visible) => typeof visible !== \"boolean\")) {\n throw new Error(\"The stored actor visibility is invalid.\");\n }\n return value as SurfaceViewPreferences;\n}\n\nexport const actorVisibleOnSurface = (actor: RunActor, appActorIds: ReadonlySet<string>, preferences: SurfaceViewPreferences, primaryActorId?: string | null): boolean => {\n if (actor.kind === \"human\") return false;\n const override = Object.hasOwn(preferences.actorVisibility, actor.id) ? preferences.actorVisibility[actor.id] : undefined;\n return override ?? (actor.id !== primaryActorId && !appActorIds.has(actor.id));\n};\n\nconst setting = createLocalStorageSetting({\n changeEvent: \"ragents-actor-visibility-change\",\n matchesKey: (key) => key.startsWith(\"ragents.orchestration.actor-visibility:\"),\n parse: parseSurfaceViewPreferences,\n serialize: JSON.stringify,\n});\n\nexport function useSurfaceViewPreferences(runId: string): SurfaceViewPreferences {\n return setting.useValue(surfaceViewStorageKey(runId));\n}\n\nexport function saveSurfaceViewPreferences(runId: string, preferences: SurfaceViewPreferences) {\n setting.save(surfaceViewStorageKey(runId), preferences);\n}\n", "import { useRef, type ReactNode, type RefObject } from \"react\";\nimport { XIcon } from \"lucide-react\";\nimport { Button, Popover, PopoverContent } from \"@ragents/web/ui\";\n\nexport function ActorPopout({ open, id, label, closeLabel, buttonRef, onClose, width, height, placement = \"bottom\", focusInput = false, keepMounted = false, role, headerContent, children }: {\n open: boolean;\n id: string;\n label: string;\n closeLabel: string;\n buttonRef: RefObject<HTMLButtonElement | null>;\n onClose: (restoreFocus?: boolean) => void;\n /** Pixels or the whole available width next to the anchor. */\n width: number | \"available\";\n height: number;\n placement?: \"bottom\" | \"top\";\n focusInput?: boolean;\n keepMounted?: boolean;\n role: \"dialog\" | \"region\";\n headerContent?: ReactNode;\n children: ReactNode;\n}) {\n const panelRef = useRef<HTMLDivElement>(null);\n const pressedAnchor = (details: { reason: string; event: Event }) =>\n details.reason === \"outside-press\" && details.event.target instanceof Node && buttonRef.current?.contains(details.event.target) === true;\n return <Popover open={open} onOpenChange={(next, details) => { if (!next && !pressedAnchor(details)) onClose(); }}>\n <PopoverContent align=\"start\" anchor={buttonRef} aria-label={label} className=\"flex min-h-0 min-w-0 flex-col gap-0 overflow-hidden rounded-b-sm p-0 text-[0.76rem] focus:outline-none data-[placement=top]:rounded-t-sm data-[placement=top]:rounded-b-none [&_input[type=checkbox]]:m-0 [&_input[type=checkbox]]:flex-none [&_input[type=checkbox]]:accent-primary\" collisionPadding={8} data-surface-scroll=\"true\" dim\n data-placement={placement} id={id} initialFocus={focusInput ? () => panelRef.current?.querySelector(\"input\") ?? true : true} keepMounted={keepMounted}\n ref={panelRef} role={role} side={placement}\n style={{ width: width === \"available\" ? \"var(--available-width)\" : width, height, maxWidth: \"var(--available-width)\", maxHeight: \"var(--available-height)\" }}>\n <header className=\"flex flex-none items-center justify-between gap-2 border-b border-border-soft px-2.5 py-2\">\n <strong className=\"shrink-0\">{label}</strong>\n {headerContent}\n <Button aria-label={closeLabel} onClick={() => onClose(true)} size=\"icon-sm\" title={closeLabel} variant=\"ghost\"><XIcon /></Button>\n </header>\n {children}\n </PopoverContent>\n </Popover>;\n}\n", "import { useAccess } from \"@ragents/web/AccessContext\";\nimport { useCallback, useId, useRef, useState } from \"react\";\nimport { useSurfaceController, type SessionContext } from \"@ragents/web/PluginRegistry\";\nimport { CodeIcon, UsersIcon } from \"lucide-react\";\nimport { ToolbarCopy, ToolbarItem, ToolbarLabel, ToolbarText } from \"@ragents/web/Toolbar\";\nimport { cn } from \"@ragents/web/ui\";\nimport { FlowInspector, type FlowSelection } from \"./FlowInspector\";\nimport { ActorPopout } from \"./ActorPopout\";\nimport { actorTone, type RunActor, type RunView } from \"@ragents/web/run-view\";\nimport { useSurfaceEntities } from \"./surface-entities\";\nimport { SURFACE_TILE_DRAG_TYPE } from \"./tile-docking\";\n\nconst shortcutIconClass = \"grid size-[30px] flex-none place-items-center rounded-lg border border-foreground/15 text-foreground\";\n\nconst shortcutFillClass: Readonly<Record<string, string>> = {\n agent: \"bg-glass-agent\",\n primary: \"bg-glass-primary\",\n script: \"bg-glass-script\",\n app: \"bg-glass-app\",\n};\n\nexport function ActorShortcut({ actor, view, session, open, onToggle, onClose, visible }: {\n actor: RunActor;\n view: RunView;\n session: SessionContext;\n open: boolean;\n onToggle: () => void;\n onClose: () => void;\n visible: boolean;\n}) {\n const staged = useSurfaceEntities(session.session.id).has(`@${actor.handle}`);\n const technical = useAccess().can(\"runs.inspect\");\n const [visited, setVisited] = useState(false);\n const buttonRef = useRef<HTMLButtonElement>(null);\n const panelId = useId();\n const surface = useSurfaceController();\n const close = useCallback((restoreFocus = false) => {\n onClose();\n if (restoreFocus) buttonRef.current?.focus({ preventScroll: true });\n }, [onClose]);\n\n const inspect = (selection: FlowSelection) => {\n if (!surface) throw new Error(\"The actor shortcut needs the surface controller.\");\n surface.acceptSelection(selection);\n close();\n };\n const tone = actorTone(view, actor);\n const label = actor.kind === \"agent\" ? `Chat with @${actor.handle}` : `Actor view of @${actor.handle}`;\n const type = !technical ? \"Agent\" : actor.kind === \"agent\" ? \"LLM agent\" : \"TypeScript actor\";\n\n return <div className=\"flex items-stretch [&[hidden]]:hidden\" hidden={!visible}>\n <ToolbarItem as=\"button\" aria-controls={visited ? panelId : undefined} aria-expanded={open} aria-haspopup=\"dialog\"\n aria-label={`${actor.displayName || actor.handle}. ${type}: open ${label}`} className=\"font-bold\"\n data-tone={tone} data-staged={staged || undefined} onClick={() => { setVisited(true); onToggle(); }}\n draggable={technical} onDragStart={(event) => {\n if (!technical) { event.preventDefault(); return; }\n event.dataTransfer.setData(SURFACE_TILE_DRAG_TYPE, `@${actor.handle}`);\n event.dataTransfer.effectAllowed = \"move\";\n close();\n }}\n ref={buttonRef} title={`${type}: open ${label}${technical ? \". Drag onto a tile to dock.\" : \"\"}`} type=\"button\">\n <span className={cn(shortcutIconClass, staged && shortcutFillClass[tone])}>{actor.kind === \"agent\" ? <UsersIcon size={20} /> : <CodeIcon size={20} />}</span>\n <ToolbarCopy><ToolbarLabel>@{actor.handle}</ToolbarLabel><ToolbarText>{actor.displayName && actor.displayName !== actor.handle ? actor.displayName : type}</ToolbarText></ToolbarCopy>\n </ToolbarItem>\n {visited && <ActorPopout open={open} id={panelId} label={label} closeLabel={`Close ${label}`}\n buttonRef={buttonRef} keepMounted onClose={close} width={actor.kind === \"agent\" ? 784 : 560} height={640} role=\"dialog\">\n <div className=\"min-h-0 min-w-0 flex-1 overflow-auto overscroll-contain\">\n <FlowInspector actorConversations={session.actorConversations} canGoBack={false} chatDisplay=\"popout\" composerVisible\n conversationError={session.conversationError} onBack={() => {}} onNavigate={inspect}\n primaryMessages={session.messages} primaryRunning={session.running} selection={{ type: \"actor\", id: actor.id }} view={view} />\n </div>\n </ActorPopout>}\n </div>;\n}\n", "import { createLocalStorageSetting } from \"@ragents/web/lib/local-storage-setting\";\nimport type { RunActor } from \"@ragents/web/run-view\";\n\nexport const ACTOR_HEADER_MODES = [\"all\", \"active\", \"visible\", \"agent\", \"script\"] as const;\nexport type ActorHeaderMode = typeof ACTOR_HEADER_MODES[number];\nexport const ACTOR_HEADER_MODE_LABELS: Record<ActorHeaderMode, string> = {\n all: \"All\",\n active: \"Active\",\n visible: \"Visible\",\n agent: \"LLM agents\",\n script: \"TypeScript\",\n};\n\nexport const actorHeaderStorageKey = (runId: string) => `ragents.orchestration.actor-header:v2:${runId}`;\n\nexport function parseActorHeaderMode(raw: string | null): ActorHeaderMode {\n if (raw === null) return \"visible\";\n if (ACTOR_HEADER_MODES.some((mode) => mode === raw)) return raw as ActorHeaderMode;\n throw new Error(\"The stored actor display is invalid. Allowed are all, active, visible, agent and script.\");\n}\n\nexport const actorOnStage = (actor: RunActor, primaryActorId: string | null | undefined, stage: ReadonlySet<string>) =>\n actor.id === primaryActorId || stage.has(`@${actor.handle}`);\n\nexport const actorVisibleInHeader = (actor: RunActor, mode: ActorHeaderMode, onStage: boolean) =>\n actor.kind !== \"human\" && (mode === \"all\" || (mode === \"active\" ? actor.lifecycle?.kind !== \"stopped\" : mode === \"visible\" ? onStage : actor.kind === mode));\n\nconst setting = createLocalStorageSetting({\n changeEvent: \"ragents-actor-header-change\",\n matchesKey: (key) => key.startsWith(\"ragents.orchestration.actor-header:\"),\n parse: parseActorHeaderMode,\n serialize: (mode: ActorHeaderMode) => mode,\n});\n\nexport function useActorHeaderMode(runId: string): ActorHeaderMode {\n return setting.useValue(actorHeaderStorageKey(runId));\n}\n\nexport function saveActorHeaderMode(runId: string, mode: ActorHeaderMode) {\n setting.save(actorHeaderStorageKey(runId), mode);\n}\n", "import { useAccess } from \"@ragents/web/AccessContext\";\nimport { useCallback, useEffect, useId, useMemo, useRef, useState } from \"react\";\nimport type { SessionContext, SessionHeaderContext } from \"@ragents/web/PluginRegistry\";\nimport { UsersIcon } from \"lucide-react\";\nimport { Input } from \"@ragents/web/ui\";\nimport { ToolbarCopy, ToolbarItem, ToolbarLabel, ToolbarText } from \"@ragents/web/Toolbar\";\nimport { actorVisibleOnSurface, type SurfaceViewPreferences } from \"./surface-view-settings\";\nimport { chatPrimaryId, runViewFrom, type RunActor } from \"@ragents/web/run-view\";\nimport { ActorPopout } from \"./ActorPopout\";\nimport { ActorShortcut } from \"./ActorShortcut\";\nimport { ACTOR_HEADER_MODES, ACTOR_HEADER_MODE_LABELS, actorOnStage, actorVisibleInHeader, saveActorHeaderMode, useActorHeaderMode, type ActorHeaderMode } from \"./actor-header-settings\";\nimport { useSurfaceEntities } from \"./surface-entities\";\n\nexport interface ActorSurfaceControlsProps {\n session: SessionContext;\n appActorIds: ReadonlySet<string>;\n preferences: SurfaceViewPreferences;\n onPreferencesChange: (preferences: SurfaceViewPreferences) => void;\n}\n\nconst nameClass = \"min-w-0 max-w-full text-left font-semibold [overflow-wrap:anywhere]\";\n\nconst actorType = (actor: RunActor) => actor.kind === \"human\" ? \"User\" : actor.kind === \"agent\" ? \"LLM agent\" : \"TypeScript actor\";\nconst actorStatus = (actor: RunActor) => actor.lifecycle?.kind === \"running\" ? \"Working\" : actor.lifecycle?.kind === \"stopped\" ? \"Stopped\" : actor.lifecycle?.kind === \"idle\" ? \"Ready\" : \"\";\n\nexport function filterSurfaceActors(actors: readonly RunActor[], appActorIds: ReadonlySet<string>, query: string): readonly RunActor[] {\n const words = query.trim().toLocaleLowerCase(\"en-US\").split(/\\s+/).filter(Boolean);\n return actors.filter((actor) => {\n const text = [`@${actor.handle}`, actor.displayName, actor.kind, actorType(actor), actor.lifecycle?.kind, actorStatus(actor), appActorIds.has(actor.id) ? \"Mini-app\" : \"\"].join(\" \").toLocaleLowerCase(\"en-US\");\n return words.every((word) => text.includes(word));\n });\n}\n\nexport function ActorShortcuts({ session }: SessionHeaderContext) {\n const inspect = useAccess().can(\"runs.inspect\");\n const [openKey, setOpenKey] = useState<string>();\n const close = useCallback(() => setOpenKey(undefined), []);\n const mode = useActorHeaderMode(session.session.id);\n const stage = useSurfaceEntities(session.session.id);\n const view = runViewFrom(session.runView);\n const actors = useMemo(() => view?.actors.filter((actor) => actor.kind !== \"human\" && (inspect || actor.kind === \"agent\")) ?? [], [inspect, view]);\n const primaryId = view ? chatPrimaryId(view) : undefined;\n const shown = useCallback((actor: RunActor) => actorVisibleInHeader(actor, mode, actorOnStage(actor, primaryId, stage)), [mode, stage, primaryId]);\n useEffect(() => {\n if (openKey && !actors.some((actor) => `${session.session.id}:${actor.id}` === openKey && shown(actor))) close();\n }, [actors, close, openKey, session.session.id, shown]);\n if (!view || actors.length === 0) return null;\n\n return <nav aria-label=\"Actors of the run\" className=\"flex min-w-0 flex-none items-stretch\">\n {actors.map((actor) => {\n const key = `${session.session.id}:${actor.id}`;\n return <ActorShortcut actor={actor} key={key} onClose={close}\n onToggle={() => setOpenKey((current) => current === key ? undefined : key)}\n open={openKey === key} session={session} view={view} visible={shown(actor)} />;\n })}\n </nav>;\n}\n\nconst PUBLIC_ACTOR_HEADER_MODES: readonly ActorHeaderMode[] = [\"active\", \"visible\", \"all\"];\n\nexport function ActorHeaderModeControl({ runId }: { runId: string }) {\n const inspect = useAccess().can(\"runs.inspect\");\n const mode = useActorHeaderMode(runId);\n const modes = inspect ? ACTOR_HEADER_MODES : PUBLIC_ACTOR_HEADER_MODES;\n const next = modes[(modes.indexOf(mode) + 1) % modes.length];\n const label = `Actor display: ${ACTOR_HEADER_MODE_LABELS[mode]}. Switch to ${ACTOR_HEADER_MODE_LABELS[next]}`;\n return <ToolbarItem as=\"button\" aria-label={label} className=\"w-[120px] max-w-[120px] min-w-[120px] flex-[0_0_120px]\" onClick={() => saveActorHeaderMode(runId, next)} title={label} type=\"button\">\n <ToolbarCopy><ToolbarLabel>Display</ToolbarLabel><ToolbarText>{ACTOR_HEADER_MODE_LABELS[mode]}</ToolbarText></ToolbarCopy>\n </ToolbarItem>;\n}\n\nexport function ActorSurfaceControls({ session, appActorIds, preferences, onPreferencesChange }: ActorSurfaceControlsProps) {\n const [open, setOpen] = useState(false);\n const [query, setQuery] = useState(\"\");\n const buttonRef = useRef<HTMLButtonElement>(null);\n const panelId = useId();\n const runView = runViewFrom(session.runView);\n const actors = runView?.actors;\n const filtered = useMemo(() => filterSurfaceActors(actors ?? [], appActorIds, query), [actors, appActorIds, query]);\n const close = useCallback((restoreFocus = false) => {\n setOpen(false);\n if (restoreFocus) buttonRef.current?.focus({ preventScroll: true });\n }, []);\n\n useEffect(() => { close(); setQuery(\"\"); }, [session.session.id, close]);\n\n const label = `Actors \\u00b7 ${actors?.length ?? 0}`;\n return <div className=\"flex h-full min-w-0 flex-none items-stretch\">\n <ToolbarItem as=\"button\" ref={buttonRef} aria-controls={open ? panelId : undefined} aria-expanded={open}\n aria-label={label} title={label} onClick={() => setOpen((value) => !value)} type=\"button\">\n <UsersIcon size={20} /><ToolbarText>Actors</ToolbarText>\n </ToolbarItem>\n {open && <ActorPopout open id={panelId} label=\"Actors of the run\" closeLabel=\"Close actor list\"\n buttonRef={buttonRef} onClose={close} width={460} height={460}\n placement=\"bottom\" focusInput role=\"region\">\n <div className=\"flex flex-none items-center gap-2.5 p-2.5\">\n <Input className=\"flex-1\" aria-label=\"Search actors\" onChange={(event) => setQuery(event.target.value)} placeholder=\"Search handle, type or status ...\" type=\"search\" value={query} />\n <span className=\"flex-none whitespace-nowrap text-[0.68rem] text-muted-foreground\" role=\"status\">{filtered.length} of {actors?.length ?? 0}</span>\n </div>\n <ActorSurfaceList actors={filtered} appActorIds={appActorIds} primaryActorId={runView?.primaryActorId} onPreferencesChange={onPreferencesChange} preferences={preferences} />\n <p className=\"flex-none border-t border-border-soft px-2.5 py-2.5 text-[0.68rem] text-muted-foreground\">Personal view of this run</p>\n </ActorPopout>}\n </div>;\n}\n\nexport function ActorSurfaceList({ actors, appActorIds, primaryActorId, onPreferencesChange, preferences }: {\n actors: readonly RunActor[];\n appActorIds: ReadonlySet<string>;\n primaryActorId?: string | null;\n onPreferencesChange: (preferences: SurfaceViewPreferences) => void;\n preferences: SurfaceViewPreferences;\n}) {\n return <div className=\"min-h-0 flex-1 overflow-auto overscroll-contain px-2.5\">\n {actors.length === 0 ? <p className=\"text-muted-foreground\">No matching actors.</p> : <ul className=\"list-none\">{actors.map((actor) => <li className=\"grid grid-cols-[minmax(0,1fr)_auto] items-center gap-2.5 border-b border-border-soft py-1.5\" key={actor.id}>\n <div className=\"grid min-w-0 gap-0.5 leading-[1.3]\">\n <div className=\"flex min-w-0 flex-wrap items-baseline gap-x-2 gap-y-0.5\">\n <span className={nameClass}>@{actor.handle}</span>\n {actor.displayName !== actor.handle && <span className=\"min-w-0 max-w-full text-[0.7rem] [overflow-wrap:anywhere]\">{actor.displayName}</span>}\n </div>\n <span className=\"flex flex-wrap items-center gap-x-2 gap-y-0.5 text-[0.66rem] text-muted-foreground\">\n <span>{actorType(actor)}</span>{actorStatus(actor) && <span>{actorStatus(actor)}</span>}{appActorIds.has(actor.id) && <span className=\"text-primary\">Mini-app</span>}\n </span>\n </div>\n {actor.kind !== \"human\" && <label className=\"flex cursor-pointer items-center gap-[5px] whitespace-nowrap text-[0.68rem]\">\n <input aria-label={`Show @${actor.handle} on the surface`} checked={actorVisibleOnSurface(actor, appActorIds, preferences, primaryActorId)} onChange={(event) => onPreferencesChange({ ...preferences, actorVisibility: { ...preferences.actorVisibility, [actor.id]: event.target.checked } })} type=\"checkbox\" />\n <span>Surface</span>\n </label>}\n </li>)}</ul>}\n </div>;\n}\n", "import { useAccess } from \"@ragents/web/AccessContext\";\nimport { useCallback, useEffect, useMemo, useRef, useState } from \"react\";\nimport { createPortal } from \"react-dom\";\nimport { SurfaceTiles } from \"./SurfaceTiles\";\nimport type { SurfaceTileNode } from \"../tiled-layout\";\nimport { SurfaceStartup } from \"./SurfaceStartup\";\nimport { surfaceStartupState } from \"./surface-startup\";\nimport { tileEntities } from \"./tile-docking\";\nimport { publishSurfaceEntities } from \"./surface-entities\";\nimport { initialTileLayout, saveSurfacePresentation, useSurfacePresentation } from \"./tiled-view-settings\";\nimport { StatusGroup } from \"@ragents/web/StatusGroup\";\nimport { statusControlClass } from \"./constants\";\nimport { runViewFrom } from \"@ragents/web/run-view\";\nimport { ActorSurfaceControls, ActorHeaderModeControl } from \"./ActorSurfaceControls\";\nimport { actorVisibleOnSurface, saveSurfaceViewPreferences, useSurfaceViewPreferences } from \"./surface-view-settings\";\nimport { useSurfaceController, type SurfaceCenterContext, type EntityReference } from \"@ragents/web/PluginRegistry\";\n\nexport function OrchestrationCenter(props: SurfaceCenterContext) {\n return <RunOrchestrationCenter key={props.session.session.id} {...props} />;\n}\n\nfunction RunOrchestrationCenter({\n cardSections,\n surfaceElements,\n navigation,\n session,\n statusContainer,\n runToolbarContainer,\n}: SurfaceCenterContext) {\n const inspect = useAccess().can(\"runs.inspect\");\n const surface = useSurfaceController();\n if (!surface) throw new Error(\"The surface needs the surface controller of the orchestration plugin.\");\n const lastRunView = useRef<ReturnType<typeof runViewFrom>>(undefined);\n const parsedRunView = runViewFrom(session.runView);\n if (parsedRunView !== undefined) lastRunView.current = parsedRunView;\n const runView = parsedRunView ?? lastRunView.current;\n const { programLayout, personalLayout, presentation, programBasis } = useSurfacePresentation(session.session.id, runView);\n const [presentationError, setPresentationError] = useState<string>();\n const preferences = useSurfaceViewPreferences(session.session.id);\n const appActorIds = useMemo(() => new Set(surfaceElements.flatMap((contribution) => contribution.select(session)\n .flatMap((element) => element.anchorActorId ? [element.anchorActorId] : []))), [surfaceElements, session]);\n const hiddenActorIds = useMemo(() => runView?.actors\n .filter((actor) => actor.kind !== \"human\" && (inspect ? !actorVisibleOnSurface(actor, appActorIds, preferences, runView.primaryActorId) : actor.kind === \"script\")).map((actor) => actor.id) ?? [],\n [inspect, runView, appActorIds, preferences]);\n const visibleApps = useMemo(() => surfaceElements.flatMap((contribution) => contribution.select(session)\n .filter((element) => element.visible !== false).map((element) => `app:${element.id}`)), [surfaceElements, session]);\n const visibleEntities = new Set([\n ...visibleApps,\n ...(runView?.actors.filter((actor) => actor.kind !== \"human\" && actor.lifecycle?.kind !== \"stopped\"\n && (inspect || actor.kind === \"agent\")).map((actor) => `@${actor.handle}`) ?? []),\n ]);\n /** Without any stored tree the visible participants are split once; only a real change is saved. */\n const fallbackRoot = useMemo(() => personalLayout === null && programLayout.layout?.root === undefined\n ? initialTileLayout([\n ...visibleApps,\n ...(runView?.actors.filter((actor) => actor.kind !== \"human\" && actor.lifecycle?.kind !== \"stopped\" && !hiddenActorIds.includes(actor.id)).map((actor) => `@${actor.handle}`) ?? []),\n ])\n : null, [personalLayout, programLayout, visibleApps, runView, hiddenActorIds]);\n const root = presentation.root ?? fallbackRoot;\n const hasVisibleContent = tileEntities(root).some((entity) => visibleEntities.has(entity));\n const stageEntities = useMemo(() => new Set(tileEntities(root)), [root]);\n useEffect(() => publishSurfaceEntities(session.session.id, stageEntities), [session.session.id, stageEntities]);\n useEffect(() => () => publishSurfaceEntities(session.session.id, undefined), [session.session.id]);\n const startupState = surfaceStartupState({ view: runView, startup: session.startup, connected: session.connected,\n running: session.running, error: session.conversationError });\n const stageRef = useRef<HTMLDivElement | null>(null);\n const showStartup = !hasVisibleContent && startupState !== undefined;\n\n const visibleStageSize = useCallback((): { width: number; height: number } | undefined => {\n const element = stageRef.current;\n if (!element) return undefined;\n const stage = element.getBoundingClientRect();\n const panel = document.getElementById(\"workspace-panel\")?.getBoundingClientRect();\n const overlap = panel ? Math.min(stage.right, panel.right) - Math.max(stage.left, panel.left) : 0;\n return { width: stage.width - Math.max(0, overlap), height: stage.height };\n }, []);\n\n useEffect(() => {\n const element = stageRef.current;\n if (!element) return;\n const observer = new ResizeObserver(() => {\n const size = visibleStageSize();\n if (size) element.style.setProperty(\"--surface-visible-width\", `${size.width}px`);\n });\n observer.observe(element);\n const panel = document.getElementById(\"workspace-panel\");\n if (panel) observer.observe(panel);\n return () => observer.disconnect();\n }, [visibleStageSize]);\n\n const handleSelect = useCallback((selection: EntityReference) => {\n surface.acceptSelection(selection);\n }, [surface]);\n\n const changeTiles = (next: SurfaceTileNode | null) => {\n try {\n saveSurfacePresentation(session.session.id, { root: next, programBasis });\n setPresentationError(undefined);\n } catch (error) {\n setPresentationError(error instanceof Error ? error.message : String(error));\n }\n };\n\n return (\n <div className=\"relative flex h-full min-h-0 min-w-0 flex-1 overflow-clip\" data-view=\"tiled\">\n {personalLayout && <StatusGroup container={statusContainer} label=\"Surface\" order={20}>\n <button className={statusControlClass} onClick={() => saveSurfacePresentation(session.session.id, null)}\n title=\"Reset your own arrangement and follow the program arrangement\" type=\"button\">Apply program default</button>\n </StatusGroup>}\n {runToolbarContainer && createPortal(<><ActorHeaderModeControl runId={session.session.id} />{inspect && <ActorSurfaceControls session={session}\n appActorIds={appActorIds} preferences={preferences}\n onPreferencesChange={(next) => saveSurfaceViewPreferences(session.session.id, next)} />}</>, runToolbarContainer)}\n <div aria-label=\"Surface\" className=\"relative min-h-0 min-w-0 flex-[1_1_360px] overflow-clip bg-[image:var(--surface-backdrop)]\" ref={stageRef}>\n <SurfaceGrain />\n {(programLayout.error || presentationError) && <p className=\"absolute inset-x-2 top-2 z-10 bg-secondary p-3 text-destructive\" role=\"alert\">{programLayout.error || presentationError}</p>}\n {runView && !showStartup && <div className=\"absolute inset-y-0 left-0 w-[var(--surface-visible-width,100%)] overflow-hidden\">\n <SurfaceTiles root={root} onChange={changeTiles}\n surfaceElements={surfaceElements} cardSections={cardSections} session={session} view={runView} navigation={navigation} onSelect={handleSelect}\n selected={surface.selection} />\n </div>}\n {showStartup && <SurfaceStartup state={startupState} />}\n </div>\n </div>\n );\n}\n\n/** Fine noise over the surface so the material does not look smooth. */\nfunction SurfaceGrain() {\n return <svg aria-hidden=\"true\" className=\"pointer-events-none absolute inset-0 size-full opacity-10\" preserveAspectRatio=\"none\" viewBox=\"0 0 180 180\">\n <filter id=\"surface-grain\"><feTurbulence baseFrequency=\".76\" numOctaves=\"3\" stitchTiles=\"stitch\" type=\"fractalNoise\" /></filter>\n <path d=\"M0 0h180v180H0z\" fill=\"#887890\" filter=\"url(#surface-grain)\" opacity=\".32\" />\n </svg>;\n}\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"@ragents/web/run-panel/host\", \"useCenterElements\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"@ragents/web/run-panel/host\", \"useRunPanelHost\");\n", "import type { SurfaceElementDefinition } from \"@ragents/web/PluginRegistry\";\nimport { actorVisibleInHeader, type ActorHeaderMode } from \"../actor-header-settings\";\nimport { chatPrimaryId, type RunActor, type RunView } from \"@ragents/web/run-view\";\n\n/** The actors of the chip row: coordinator first, then in creation order; without the inspect right only LLM agents. */\nexport const runPanelActors = (view: RunView, inspect: boolean): RunActor[] => {\n const candidates = view.actors.filter((actor) => actor.kind !== \"human\" && (inspect || actor.kind === \"agent\"));\n const primaryId = chatPrimaryId(view);\n const primary = candidates.filter((actor) => actor.id === primaryId);\n return [...primary, ...candidates.filter((actor) => actor.id !== primaryId)];\n};\n\nexport interface RunPanelActorFilter {\n mode: ActorHeaderMode;\n onStage: (actor: RunActor) => boolean;\n primaryId: string | null | undefined;\n selectedId: string | undefined;\n}\n\n/** Visible according to the surface's actor display; the coordinator and the selected actor always stay as a chip. */\nexport const partitionRunPanelActors = (actors: readonly RunActor[], filter: RunPanelActorFilter): { shown: RunActor[]; hidden: RunActor[] } => {\n const shown: RunActor[] = [];\n const hidden: RunActor[] = [];\n for (const actor of actors) {\n const pinned = actor.id === filter.primaryId || actor.id === filter.selectedId;\n (pinned || actorVisibleInHeader(actor, filter.mode, filter.onStage(actor)) ? shown : hidden).push(actor);\n }\n return { shown, hidden };\n};\n\nexport const pendingInputCount = (view: RunView, actorId: string): number =>\n view.inputs.filter((input) => input.actorId === actorId && input.lifecycle.kind === \"pending\").length;\n\nexport const pendingActionCount = (view: RunView, askedBy: string): number =>\n view.actions.filter((action) => action.status === \"pending\" && action.askedBy === askedBy).length;\n\n/** A chip carries an exclamation mark when a host confirmation or an action of the actor waits for input. */\nexport const elementNeedsAttention = (view: RunView | undefined, definition: SurfaceElementDefinition, confirmationPending: boolean): boolean =>\n confirmationPending || (view !== undefined && definition.anchorActorId !== undefined && pendingActionCount(view, definition.anchorActorId) > 0);\n", "import { chatPrimaryId, type RunActor, type RunView } from \"@ragents/web/run-view\";\n\nexport interface AddresseeActorNode {\n kind: \"actor\";\n actor: RunActor;\n children: AddresseeNode[];\n}\n\nexport interface AddresseeGroupNode {\n kind: \"group\";\n key: string;\n label: string;\n members: AddresseeActorNode[];\n}\n\nexport type AddresseeNode = AddresseeActorNode | AddresseeGroupNode;\n\nexport type AddresseeStatus = \"running\" | \"input\" | \"waiting\" | \"stopped\";\n\n/** From this many similar siblings on, the tree combines them into a group. */\nexport const ADDRESSEE_GROUP_MIN = 4;\n/** The search appears only with more entries than this. */\nexport const ADDRESSEE_SEARCH_ABOVE = 12;\nconst SUMMARY_LENGTH = 90;\n\nconst STATUS_WORDS: Readonly<Record<AddresseeStatus, readonly [one: string, many: string]>> = {\n running: [\"working\", \"working\"],\n input: [\"waiting for input\", \"waiting for input\"],\n waiting: [\"waiting\", \"waiting\"],\n stopped: [\"stopped\", \"stopped\"],\n};\nconst STATUS_ORDER: readonly AddresseeStatus[] = [\"running\", \"input\", \"waiting\", \"stopped\"];\n\nconst lower = (text: string) => text.toLocaleLowerCase(\"en-US\");\n\nconst shortened = (text: string): string => {\n const line = text.split(\"\\n\").map((entry) => entry.replace(/\\s+/g, \" \").trim()).find((entry) => entry !== \"\") ?? \"\";\n if (line.length <= SUMMARY_LENGTH) return line;\n const cut = line.slice(0, SUMMARY_LENGTH - 3);\n const space = cut.lastIndexOf(\" \");\n return `${(space > SUMMARY_LENGTH / 2 ? cut.slice(0, space) : cut).trimEnd()}...`;\n};\n\nexport const addresseeStatus = (view: RunView, actor: RunActor): AddresseeStatus =>\n actor.lifecycle?.kind === \"stopped\" ? \"stopped\"\n : view.actions.some((action) => action.status === \"pending\" && action.askedBy === actor.id) ? \"input\"\n : actor.lifecycle?.kind === \"running\" ? \"running\" : \"waiting\";\n\nexport const addresseeStatusWord = (status: AddresseeStatus, count = 1): string => STATUS_WORDS[status][count === 1 ? 0 : 1];\n\n/** Counts the states of a group in a fixed order, e.g. \"3 working, 34 waiting\". */\nexport const addresseeStatusCounts = (view: RunView, actors: readonly RunActor[]): string => {\n const counts = new Map<AddresseeStatus, number>();\n for (const status of actors.map((actor) => addresseeStatus(view, actor))) counts.set(status, (counts.get(status) ?? 0) + 1);\n return STATUS_ORDER.flatMap((status) => {\n const count = counts.get(status) ?? 0;\n return count > 0 ? [`${count} ${addresseeStatusWord(status, count)}`] : [];\n }).join(\", \");\n};\n\n/** The short description per actor: the one set on creation, otherwise the shortened first task, otherwise a differing display name. */\nexport const addresseeSummaries = (view: RunView): ((actor: RunActor) => string | undefined) => {\n const firstInputs = new Map<string, { sequence: number; content: string }>();\n for (const input of view.inputs) {\n if (input.subscriptionId !== null || input.presentation === \"background\" || input.content.trim() === \"\") continue;\n const known = firstInputs.get(input.actorId);\n if (!known || input.sequence < known.sequence) firstInputs.set(input.actorId, { sequence: input.sequence, content: input.content });\n }\n return (actor) => {\n const described = actor.description?.trim();\n if (described) return described;\n const first = firstInputs.get(actor.id);\n if (first) return shortened(first.content);\n const name = actor.displayName.trim();\n return name !== \"\" && lower(name) !== lower(actor.handle) ? name : undefined;\n };\n};\n\n/** The nearest creator along `createdBy` that is itself in the tree; a human or an unknown creator makes the actor a root. */\nexport const addresseeParentId = (byId: ReadonlyMap<string, RunActor>, included: ReadonlySet<string>, actor: RunActor): string | null => {\n const visited = new Set([actor.id]);\n let current = actor.createdBy;\n while (current !== undefined && !visited.has(current)) {\n if (included.has(current)) return current;\n const creator = byId.get(current);\n if (!creator || creator.kind === \"human\") return null;\n visited.add(current);\n current = creator.createdBy;\n }\n return null;\n};\n\nconst handleStem = (handle: string) => lower(handle).replace(/-\\d+$/, \"\").split(/[-_.]/)[0] ?? \"\";\n\nconst groupLabel = (handles: readonly string[]): string => {\n const first = handles[0] ?? \"\";\n const length = handles.reduce((common, handle) => {\n let index = 0;\n while (index < common && handle[index] === first[index]) index += 1;\n return index;\n }, first.length);\n const prefix = first.slice(0, length);\n const cut = prefix.search(/[-_.][^-_.]*$/);\n const stem = /[-_.]$/.test(prefix) || handles.includes(prefix) || cut < 0 ? prefix : prefix.slice(0, cut + 1);\n return `@${stem}*`;\n};\n\n/** Who created whom: coordinator on top, subagents below, similar siblings (kind and handle stem) as a group. */\nexport const addresseeTree = (view: RunView, actors: readonly RunActor[]): AddresseeNode[] => {\n const byId = new Map(view.actors.map((actor) => [actor.id, actor]));\n const included = new Set(actors.map((actor) => actor.id));\n const primaryId = chatPrimaryId(view);\n const siblings = new Map<string | null, RunActor[]>();\n for (const actor of actors) {\n const parent = addresseeParentId(byId, included, actor);\n siblings.set(parent, [...siblings.get(parent) ?? [], actor]);\n }\n const branch = (actor: RunActor): AddresseeActorNode => ({ kind: \"actor\", actor, children: level(actor.id) });\n const level = (parentId: string | null): AddresseeNode[] => {\n const entries = siblings.get(parentId) ?? [];\n const ordered = parentId === null ? [...entries.filter((actor) => actor.id === primaryId), ...entries.filter((actor) => actor.id !== primaryId)] : entries;\n const keyOf = (actor: RunActor) => actor.id === primaryId ? null : `${parentId ?? \"\"}/${actor.kind}/${handleStem(actor.handle)}`;\n const members = new Map<string, RunActor[]>();\n for (const actor of ordered) {\n const key = keyOf(actor);\n if (key !== null) members.set(key, [...members.get(key) ?? [], actor]);\n }\n const emitted = new Set<string>();\n return ordered.flatMap((actor): AddresseeNode[] => {\n const key = keyOf(actor);\n const group = key === null ? undefined : members.get(key);\n if (key === null || !group || group.length < ADDRESSEE_GROUP_MIN) return [branch(actor)];\n if (emitted.has(key)) return [];\n emitted.add(key);\n return [{ kind: \"group\", key, label: groupLabel(group.map((member) => member.handle)), members: group.map(branch) }];\n });\n };\n return level(null);\n};\n\n/** The actors matching the search, together with their creators in the tree, so every match stands in its place. */\nexport const addresseeMatches = (view: RunView, actors: readonly RunActor[], query: string, summary: (actor: RunActor) => string | undefined): RunActor[] => {\n const words = lower(query).trim().split(/\\s+/).filter(Boolean);\n if (words.length === 0) return [...actors];\n const byId = new Map(view.actors.map((actor) => [actor.id, actor]));\n const included = new Set(actors.map((actor) => actor.id));\n const kept = new Set<string>();\n for (const actor of actors) {\n const text = lower(`@${actor.handle} ${actor.displayName} ${summary(actor) ?? \"\"}`);\n if (!words.every((word) => text.includes(word))) continue;\n let current: RunActor | undefined = actor;\n while (current && !kept.has(current.id)) {\n kept.add(current.id);\n const parentId = addresseeParentId(byId, included, current);\n current = parentId === null ? undefined : byId.get(parentId);\n }\n }\n return actors.filter((actor) => kept.has(actor.id));\n};\n\n/** Whether an actor is in a branch, e.g. so a group containing the selected actor starts open. */\nexport const addresseeNodeContains = (node: AddresseeNode, actorId: string): boolean =>\n node.kind === \"actor\"\n ? node.actor.id === actorId || node.children.some((child) => addresseeNodeContains(child, actorId))\n : node.members.some((member) => addresseeNodeContains(member, actorId));\n", "import { ChevronRightIcon, CodeIcon, SparklesIcon, UsersIcon } from \"lucide-react\";\nimport { Badge, cn, Spinner } from \"@ragents/web/ui\";\nimport { actorTone, type RunActor, type RunView } from \"@ragents/web/run-view\";\nimport { pendingInputCount } from \"./run-panel-actors\";\nimport { addresseeNodeContains, addresseeStatus, addresseeStatusCounts, addresseeStatusWord, type AddresseeActorNode, type AddresseeGroupNode, type AddresseeNode, type AddresseeStatus } from \"./addressee-tree\";\n\nconst entryClass = \"flex w-full min-w-0 cursor-pointer items-center gap-2 rounded-md px-2 py-1.5 text-left hover:bg-accent aria-current:bg-primary/10 focus-visible:outline-2 focus-visible:outline-ring/60 focus-visible:-outline-offset-2\";\nconst branchClass = \"ml-[18px] list-none border-l border-border-soft pl-1\";\nconst iconClass: Readonly<Record<string, string>> = {\n agent: \"bg-glass-agent\",\n primary: \"bg-glass-primary\",\n script: \"bg-glass-script\",\n app: \"bg-glass-app\",\n};\nconst statusClass: Readonly<Record<AddresseeStatus, string>> = {\n running: \"text-primary\",\n input: \"text-warning\",\n waiting: \"text-muted-foreground\",\n stopped: \"text-muted-foreground/70\",\n};\n\nconst actorType = (actor: RunActor, technical: boolean) => !technical ? \"Agent\" : actor.kind === \"agent\" ? \"LLM agent\" : \"TypeScript actor\";\n\nexport function ActorIcon({ actor, className, view }: { actor: RunActor; className?: string; view: RunView }) {\n const tone = actorTone(view, actor);\n return <span className={cn(\"grid flex-none place-items-center rounded-full text-foreground [&>svg]:size-3\", iconClass[tone], className)}>\n {actor.lifecycle?.kind === \"running\" ? <Spinner aria-hidden className=\"size-3\" /> : tone === \"primary\" ? <SparklesIcon /> : actor.kind === \"agent\" ? <UsersIcon /> : <CodeIcon />}\n </span>;\n}\n\nexport interface AddresseeTreeProps {\n view: RunView;\n selectedId: string;\n technical: boolean;\n summary: (actor: RunActor) => string | undefined;\n /** Groups whose expanded state the user toggled relative to the default. */\n toggled: ReadonlySet<string>;\n /** Open without an own choice, e.g. during a search. */\n openByDefault: boolean;\n onToggle: (key: string) => void;\n onPick: (actor: RunActor) => void;\n}\n\n/** The addressee tree: per actor handle, short description and state, similar siblings as an expandable group. */\nexport function AddresseeTree({ className, nodes, ...props }: AddresseeTreeProps & { className?: string; nodes: readonly AddresseeNode[] }) {\n return <ul className={cn(\"list-none\", className)}>\n {nodes.map((node) => node.kind === \"actor\"\n ? <ActorBranch key={node.actor.id} node={node} {...props} />\n : <GroupBranch key={node.key} node={node} {...props} />)}\n </ul>;\n}\n\nfunction ActorBranch({ node, ...props }: AddresseeTreeProps & { node: AddresseeActorNode }) {\n return <li>\n <ActorEntry actor={node.actor} {...props} />\n {node.children.length > 0 && <AddresseeTree className={branchClass} nodes={node.children} {...props} />}\n </li>;\n}\n\nfunction ActorEntry({ actor, onPick, selectedId, summary, technical, view }: AddresseeTreeProps & { actor: RunActor }) {\n const pending = pendingInputCount(view, actor.id);\n const status = addresseeStatus(view, actor);\n const description = summary(actor);\n const name = actor.displayName.trim();\n const showName = name !== \"\" && name.toLocaleLowerCase(\"en-US\") !== actor.handle.toLocaleLowerCase(\"en-US\") && name !== description;\n const current = actor.id === selectedId;\n return <button aria-current={current || undefined} className={entryClass} data-actor-handle={actor.handle} onClick={() => onPick(actor)}\n title={`@${actor.handle}, ${actorType(actor, technical)}, ${addresseeStatusWord(status)}. Address messages to @${actor.handle}`} type=\"button\">\n <ActorIcon actor={actor} className=\"size-5\" view={view} />\n <span className=\"grid min-w-0 flex-1\">\n <span className=\"flex min-w-0 items-baseline gap-1.5\">\n <span className=\"truncate font-semibold\">@{actor.handle}</span>\n {showName && <span className=\"min-w-0 truncate text-[0.66rem] text-muted-foreground\">{name}</span>}\n </span>\n {description && <span className=\"truncate text-[0.66rem] text-muted-foreground\">{description}</span>}\n </span>\n {pending > 0 && <Badge className=\"h-4 min-w-4 px-1 text-[0.6rem]\" variant=\"secondary\">{pending}</Badge>}\n <span className={cn(\"flex-none text-[0.66rem]\", statusClass[status])} data-addressee-status={status}>{addresseeStatusWord(status)}</span>\n </button>;\n}\n\nfunction GroupBranch({ node, ...props }: AddresseeTreeProps & { node: AddresseeGroupNode }) {\n const { onToggle, openByDefault, selectedId, toggled, view } = props;\n const actors = node.members.map((member) => member.actor);\n const open = (openByDefault || addresseeNodeContains(node, selectedId)) !== toggled.has(node.key);\n const counts = addresseeStatusCounts(view, actors);\n const running = actors.some((actor) => actor.lifecycle?.kind === \"running\");\n const pending = actors.reduce((sum, actor) => sum + pendingInputCount(view, actor.id), 0);\n return <li>\n <button aria-expanded={open} className={entryClass} data-addressee-group={node.label} onClick={() => onToggle(node.key)}\n title={`${node.label}: ${actors.length} similar actors, ${counts}. Click ${open ? \"collapses the group\" : \"shows all\"}`} type=\"button\">\n <span className=\"grid size-5 flex-none place-items-center text-muted-foreground\">\n <ChevronRightIcon aria-hidden className={cn(\"size-3.5 transition-transform\", open && \"rotate-90\")} />\n </span>\n <span className=\"grid min-w-0 flex-1\">\n <span className=\"flex min-w-0 items-baseline gap-1.5\">\n <span className=\"truncate font-semibold\">{node.label}</span>\n <span className=\"flex-none text-[0.66rem] text-muted-foreground\">{actors.length} actors</span>\n </span>\n <span className=\"truncate text-[0.66rem] text-muted-foreground\">{counts}</span>\n </span>\n {running && <Spinner aria-hidden className=\"size-3 flex-none text-primary\" />}\n {pending > 0 && <Badge className=\"h-4 min-w-4 px-1 text-[0.6rem]\" variant=\"secondary\">{pending}</Badge>}\n </button>\n {open && <ul className={branchClass}>\n {node.members.map((member) => <ActorBranch key={member.actor.id} node={member} {...props} />)}\n </ul>}\n </li>;\n}\n", "import { useCallback, useId, useMemo, useRef, useState } from \"react\";\nimport { ChevronDownIcon } from \"lucide-react\";\nimport { Badge, cn, Input, Spinner } from \"@ragents/web/ui\";\nimport { ActorHeaderModeControl } from \"../ActorSurfaceControls\";\nimport { ActorPopout } from \"../ActorPopout\";\nimport type { RunActor, RunView } from \"@ragents/web/run-view\";\nimport { pendingInputCount } from \"./run-panel-actors\";\nimport { ADDRESSEE_SEARCH_ABOVE, addresseeMatches, addresseeSummaries, addresseeTree } from \"./addressee-tree\";\nimport { ActorIcon, AddresseeTree } from \"./AddresseeTree\";\n\nconst chipClass = \"flex h-7 min-w-[70px] max-w-[220px] flex-[0_1_auto] cursor-pointer items-center gap-1.5 rounded-full border border-border bg-background pr-2 pl-1 text-[0.72rem] font-semibold text-foreground hover:bg-accent aria-expanded:border-primary focus-visible:outline-2 focus-visible:outline-ring/60 focus-visible:outline-offset-1\";\nconst busyClass = \"flex h-7 min-w-0 flex-[0_1_auto] cursor-pointer items-center gap-1.5 rounded-md px-1.5 text-[0.7rem] text-muted-foreground hover:bg-accent hover:text-foreground focus-visible:outline-2 focus-visible:outline-ring/60 focus-visible:outline-offset-1\";\n\n/** The chat's addressee as a chip in the input bar; the pop-out shows the actors as a tree by creator, the hidden ones behind their count. */\nexport function AddresseeControl({ hidden, onOpenChange, onReveal, onSelect, runId, selected, shown, technical, view }: {\n hidden: readonly RunActor[];\n onOpenChange: (open: boolean) => void;\n onReveal: (actor: RunActor) => void;\n onSelect: (actor: RunActor) => void;\n runId: string;\n selected: RunActor;\n shown: readonly RunActor[];\n technical: boolean;\n view: RunView;\n}) {\n const [open, setOpen] = useState(false);\n const [query, setQuery] = useState(\"\");\n const [hiddenListed, setHiddenListed] = useState(false);\n const [toggled, setToggled] = useState<ReadonlySet<string>>(() => new Set());\n const buttonRef = useRef<HTMLButtonElement>(null);\n const panelId = useId();\n const change = useCallback((next: boolean) => {\n setOpen(next);\n onOpenChange(next);\n }, [onOpenChange]);\n const close = useCallback((restoreFocus = false) => {\n change(false);\n setQuery(\"\");\n if (restoreFocus) buttonRef.current?.focus({ preventScroll: true });\n }, [change]);\n const revealSelected = useCallback((element: HTMLDivElement | null) => {\n element?.querySelector(\"[aria-current=true]\")?.scrollIntoView({ block: \"nearest\" });\n }, []);\n const working = useMemo(() => [...shown, ...hidden].filter((actor) => actor.lifecycle?.kind === \"running\" && actor.id !== selected.id), [hidden, selected.id, shown]);\n const summary = useMemo(() => addresseeSummaries(view), [view]);\n const searching = query.trim() !== \"\";\n const shownTree = useMemo(() => addresseeTree(view, addresseeMatches(view, shown, query, summary)), [query, shown, summary, view]);\n const hiddenMatches = useMemo(() => addresseeMatches(view, hidden, query, summary), [hidden, query, summary, view]);\n const hiddenTree = useMemo(() => addresseeTree(view, hiddenMatches), [hiddenMatches, view]);\n const hiddenOpen = hiddenListed || (searching && hiddenMatches.length > 0);\n const toggle = useCallback((key: string) => setToggled((current) => {\n const next = new Set(current);\n if (!next.delete(key)) next.add(key);\n return next;\n }), []);\n const pick = (actor: RunActor, reveal: boolean) => {\n (reveal ? onReveal : onSelect)(actor);\n close(true);\n };\n const busyTitle = working.map((actor) => `@${actor.handle} is working`).join(\", \");\n const busyPending = working.length > 0 ? pendingInputCount(view, working[0].id) : 0;\n const treeProps = { onToggle: toggle, openByDefault: searching, selectedId: selected.id, summary, technical, toggled, view };\n const listClass = \"px-1.5 py-1\";\n\n return <>\n <button aria-controls={open ? panelId : undefined} aria-expanded={open} aria-haspopup=\"dialog\" className={chipClass} onClick={() => change(!open)} ref={buttonRef} title={`Addressee: @${selected.handle}. Click to choose another actor`} type=\"button\">\n <ActorIcon actor={selected} className=\"size-5\" view={view} />\n <span className=\"truncate\">@{selected.handle}</span>\n <ChevronDownIcon aria-hidden className=\"size-3 flex-none text-muted-foreground\" />\n </button>\n {working.length > 0 && <button className={busyClass} onClick={() => change(!open)} title={busyTitle} type=\"button\">\n <Spinner aria-hidden className=\"size-3 flex-none\" />\n <span className=\"truncate in-data-[compact=true]:hidden\">@{working[0].handle}</span>\n {busyPending > 0 && <Badge className=\"h-4 min-w-4 px-1 text-[0.6rem]\" variant=\"secondary\">{busyPending}</Badge>}\n {working.length > 1 && <span className=\"flex-none\">+{working.length - 1}</span>}\n </button>}\n {open && <ActorPopout buttonRef={buttonRef} closeLabel=\"Close addressee\" height={460} id={panelId} label=\"Addressee\" onClose={close} open placement=\"top\" role=\"dialog\" width=\"available\">\n {shown.length + hidden.length > ADDRESSEE_SEARCH_ABOVE && <div className=\"flex-none border-b border-border-soft px-2.5 py-1.5\">\n <Input aria-label=\"Search actors\" className=\"h-7\" onChange={(event) => setQuery(event.target.value)} placeholder=\"Search handle or task ...\" type=\"search\" value={query} />\n </div>}\n <div className=\"min-h-0 flex-1 overflow-auto overscroll-contain\" ref={revealSelected}>\n <AddresseeTree className={listClass} nodes={shownTree} onPick={(actor) => pick(actor, false)} {...treeProps} />\n {searching && shownTree.length === 0 && hiddenMatches.length === 0 && <p className=\"px-3.5 py-2 text-muted-foreground\">No actor matches the search.</p>}\n {hidden.length > 0 && (!searching || hiddenMatches.length > 0) && <div className=\"border-t border-border-soft\">\n <button aria-expanded={hiddenOpen} className=\"flex w-full cursor-pointer items-center justify-between gap-2 px-3.5 py-2 text-left text-muted-foreground hover:text-foreground focus-visible:outline-2 focus-visible:outline-ring/60 focus-visible:-outline-offset-2\" onClick={() => setHiddenListed(!hiddenOpen)} type=\"button\">\n <span>{hidden.length} hidden actors</span>\n <ChevronDownIcon aria-hidden className={cn(\"size-3.5 flex-none transition-transform\", hiddenOpen && \"rotate-180\")} />\n </button>\n {hiddenOpen && <AddresseeTree className={listClass} nodes={hiddenTree} onPick={(actor) => pick(actor, true)} {...treeProps} />}\n </div>}\n </div>\n <div className=\"flex flex-none items-stretch border-t border-border-soft\"><ActorHeaderModeControl runId={runId} /></div>\n </ActorPopout>}\n </>;\n}\n", "import { createLocalStorageSetting } from \"@ragents/web/lib/local-storage-setting\";\n\n/** Behavior of the run panel: from which width the chat sits next to the mini-app and how the sheet reacts to the mouse. */\nexport interface RunPanelSettings {\n sideWidth: number;\n openDelay: number;\n closeDelay: number;\n}\n\nexport const DEFAULT_RUN_PANEL_SETTINGS: RunPanelSettings = Object.freeze({ sideWidth: 900, openDelay: 160, closeDelay: 150 });\nexport const RUN_PANEL_SETTINGS_STORAGE_KEY = \"ragents.orchestration.run-panel-settings\";\nexport const RUN_PANEL_SETTINGS_LIMITS = Object.freeze({\n sideWidth: { min: 400, max: 4000 },\n openDelay: { min: 0, max: 5000 },\n closeDelay: { min: 0, max: 10000 },\n});\n\nconst inRange = (value: unknown, range: { min: number; max: number }): value is number =>\n typeof value === \"number\" && Number.isInteger(value) && value >= range.min && value <= range.max;\n\nexport function parseRunPanelSettings(raw: string | null): RunPanelSettings {\n if (raw === null) return DEFAULT_RUN_PANEL_SETTINGS;\n const value: unknown = JSON.parse(raw);\n if (!value || typeof value !== \"object\" || Array.isArray(value)\n || Object.keys(value).some((key) => ![\"sideWidth\", \"openDelay\", \"closeDelay\"].includes(key))\n || !(\"sideWidth\" in value) || !inRange(value.sideWidth, RUN_PANEL_SETTINGS_LIMITS.sideWidth)\n || !(\"openDelay\" in value) || !inRange(value.openDelay, RUN_PANEL_SETTINGS_LIMITS.openDelay)\n || !(\"closeDelay\" in value) || !inRange(value.closeDelay, RUN_PANEL_SETTINGS_LIMITS.closeDelay)) {\n throw new Error(\"The run panel settings are invalid: width 400 to 4000 pixels, delays 0 to 5000 and 10000 milliseconds respectively, integers.\");\n }\n return value as RunPanelSettings;\n}\n\nconst setting = createLocalStorageSetting({\n changeEvent: \"ragents-run-panel-settings-change\",\n matchesKey: (key) => key === RUN_PANEL_SETTINGS_STORAGE_KEY,\n parse: parseRunPanelSettings,\n serialize: JSON.stringify,\n});\n\nexport function useRunPanelSettings(): RunPanelSettings {\n return setting.useValue(RUN_PANEL_SETTINGS_STORAGE_KEY);\n}\n\nexport function saveRunPanelSettings(value: RunPanelSettings) {\n setting.save(RUN_PANEL_SETTINGS_STORAGE_KEY, value);\n}\n", "import { useEffect, useState } from \"react\";\nimport type { Message } from \"quassel/events\";\nimport type { SurfaceStartupState } from \"../surface-startup\";\n\n/** How long the loading state bridges finished work until the run view has caught up with the start status. */\nexport const STARTUP_SETTLE_MS = 1500;\n\n/** Conversation messages and questions end the setup; system lines and work steps still belong to it. */\nexport const chatShowsContent = (messages: readonly Message[]): boolean => messages.some((message) =>\n message.role === \"user\" || message.role === \"action\"\n || (message.role === \"assistant\" && (message.text.trim() !== \"\" || (message.attachments?.length ?? 0) > 0)));\n\n/** The run panel's loading state until the first content; afterwards it does not return for this run. */\nexport function useRunPanelStartup(state: SurfaceStartupState | undefined, connected: boolean, content: boolean): SurfaceStartupState | undefined {\n const [contentSeen, setContentSeen] = useState(content);\n const [held, setHeld] = useState<SurfaceStartupState>();\n const working = connected && state?.kind === \"working\" ? state : undefined;\n const title = working?.title;\n const detail = working?.detail;\n useEffect(() => { if (content) setContentSeen(true); }, [content]);\n useEffect(() => {\n if (title !== undefined && detail !== undefined) {\n setHeld({ kind: \"working\", title, detail });\n return;\n }\n const timer = window.setTimeout(() => setHeld(undefined), STARTUP_SETTLE_MS);\n return () => window.clearTimeout(timer);\n }, [detail, title]);\n return content || contentSeen ? undefined : state ?? held;\n}\n", "import { createLocalStorageSetting } from \"@ragents/web/lib/local-storage-setting\";\n\n/** The chosen view of the run panel: chat only, chat at the bottom as a sheet, or chat on the right if the run panel is wide enough. */\nexport type RunPanelChatMode = \"chat\" | \"bottom\" | \"side\";\n\n/** How the chat relates to the mini-app: alone, next to it, or as a sheet above it. */\nexport type ChatLayout = \"full\" | \"side\" | \"floating\";\n\n/** Personal state per run: mini-app, actor, chat position, side width and expanded sheet height. */\nexport interface RunPanelState {\n element: string | null;\n actor: string | null;\n chat: RunPanelChatMode;\n chatWidth: number;\n sheetExpandedHeight: number | null;\n}\n\nexport const CHAT_MIN_WIDTH = 280;\nexport const CHAT_DEFAULT_WIDTH = 380;\n/** Next to the chat there is always room for a piece of mini-app. */\nexport const STAGE_MIN_WIDTH = 300;\n\nexport const DEFAULT_RUN_PANEL_STATE: RunPanelState = Object.freeze({ element: null, actor: null, chat: \"side\", chatWidth: CHAT_DEFAULT_WIDTH, sheetExpandedHeight: null });\n\nexport const runPanelStorageKey = (runId: string) => `ragents.orchestration.run-panel:${runId}`;\n\nconst isTextOrNull = (value: unknown): value is string | null => value === null || typeof value === \"string\";\n/** Earlier states knew `auto`, `floating` and `docked` as well as a stage height; they are mapped to today's positions. */\nconst chatModeOf = (value: unknown): RunPanelChatMode | undefined =>\n value === undefined || value === \"side\" || value === \"auto\" ? \"side\"\n : value === \"chat\" ? \"chat\"\n : value === \"bottom\" || value === \"floating\" || value === \"docked\" ? \"bottom\" : undefined;\n\nexport function parseRunPanelState(raw: string | null): RunPanelState {\n if (raw === null) return DEFAULT_RUN_PANEL_STATE;\n const value: unknown = JSON.parse(raw);\n if (!value || typeof value !== \"object\" || Array.isArray(value)\n || Object.keys(value).some((key) => ![\"element\", \"stageHeight\", \"actor\", \"chat\", \"chatWidth\", \"sheetExpandedHeight\", \"sheetPeekExtra\"].includes(key))\n || !(\"element\" in value) || !isTextOrNull(value.element)\n || !(\"actor\" in value) || !isTextOrNull(value.actor)\n || chatModeOf(\"chat\" in value ? value.chat : undefined) === undefined\n || (\"chatWidth\" in value && (typeof value.chatWidth !== \"number\" || !Number.isFinite(value.chatWidth) || value.chatWidth < CHAT_MIN_WIDTH))\n || (\"sheetExpandedHeight\" in value && value.sheetExpandedHeight !== null && (typeof value.sheetExpandedHeight !== \"number\" || !Number.isFinite(value.sheetExpandedHeight) || value.sheetExpandedHeight <= 0))\n || (\"sheetPeekExtra\" in value && (typeof value.sheetPeekExtra !== \"number\" || !Number.isFinite(value.sheetPeekExtra) || value.sheetPeekExtra < 0))) {\n throw new Error(\"The stored panel state is invalid.\");\n }\n const stored = value as { element: string | null; actor: string | null; chat?: unknown; chatWidth?: number; sheetExpandedHeight?: number | null };\n return { element: stored.element, actor: stored.actor, chat: chatModeOf(stored.chat) ?? \"side\", chatWidth: stored.chatWidth ?? CHAT_DEFAULT_WIDTH, sheetExpandedHeight: stored.sheetExpandedHeight ?? null };\n}\n\n/** Without a mini-app and in the \"Chat only\" view the chat fills the run panel; otherwise it sits on the right if there is room, and at the bottom if not. */\nexport const chatLayoutFor = ({ chat, hasElement, narrow }: { chat: RunPanelChatMode; hasElement: boolean; narrow: boolean }): ChatLayout =>\n !hasElement || chat === \"chat\" ? \"full\" : !narrow && chat === \"side\" ? \"side\" : \"floating\";\n\nexport const clampChatWidth = (width: number, available: number): number =>\n Math.max(CHAT_MIN_WIDTH, Math.min(Math.round(width), Math.max(CHAT_MIN_WIDTH, available - STAGE_MIN_WIDTH)));\n\nconst setting = createLocalStorageSetting({\n changeEvent: \"ragents-run-panel-change\",\n matchesKey: (key) => key.startsWith(\"ragents.orchestration.run-panel:\"),\n parse: parseRunPanelState,\n serialize: JSON.stringify,\n});\n\nexport function useRunPanelState(runId: string): RunPanelState {\n return setting.useValue(runPanelStorageKey(runId));\n}\n\nexport function saveRunPanelState(runId: string, state: RunPanelState) {\n setting.save(runPanelStorageKey(runId), state);\n}\n", "import type { Message } from \"quassel/events\";\n\n/** The single line of the collapsed sheet: what the chat is doing right now or said last; open actions themselves are in the dock below. */\nexport interface SheetStatus {\n text: string;\n kind: \"idle\" | \"working\" | \"waiting\";\n}\n\nconst firstLine = (text: string, limit = 160): string => {\n const line = text.trim().split(/\\r?\\n/).find((entry) => entry.trim() !== \"\") ?? \"\";\n return line.length > limit ? `${line.slice(0, limit - 3)}...` : line;\n};\n\nconst senderOf = (message: Message, handle: string): string =>\n message.role === \"user\" ? \"You\" : message.sender ?? `@${handle}`;\n\nexport function sheetStatus(messages: readonly Message[], working: boolean, handle: string): SheetStatus {\n const last = messages[messages.length - 1];\n const waiting = messages.filter((message) => message.role === \"action\" && message.action?.status === undefined).length;\n if (waiting > 0) return { kind: \"waiting\", text: waiting === 1 ? \"Waiting for input\" : `Waiting for ${waiting} inputs` };\n if (working) {\n if (last?.role === \"thinking\" && !last.closed) return { kind: \"working\", text: `@${handle} is thinking ...` };\n if (last?.role === \"tool\" && last.tool && last.tool.result === undefined) return { kind: \"working\", text: `@${handle} is using ${last.tool.name} ...` };\n if (last?.role === \"assistant\" && !last.closed && last.text.trim() !== \"\") return { kind: \"working\", text: `${senderOf(last, handle)} is answering: ${firstLine(last.text)}` };\n return { kind: \"working\", text: `@${handle} is working ...` };\n }\n const spoken = [...messages].reverse().find((message) => (message.role === \"user\" || message.role === \"assistant\") && message.text.trim() !== \"\");\n if (!spoken) return { kind: \"idle\", text: \"No messages yet.\" };\n return { kind: \"idle\", text: `${senderOf(spoken, handle)}: ${firstLine(spoken.text)}` };\n}\n", "import { useCallback, useEffect, useLayoutEffect, useMemo, useRef, useState, type CSSProperties, type KeyboardEvent, type MouseEvent, type PointerEvent, type ReactNode, type RefObject } from \"react\";\nimport { createPortal } from \"react-dom\";\nimport { ArrowUpRightIcon, LayoutGridIcon, Maximize2Icon, MessageSquareIcon, PanelBottomIcon, PanelRightIcon } from \"lucide-react\";\nimport { useAccess } from \"@ragents/web/AccessContext\";\nimport { ChatPanel } from \"quassel\";\nimport { runIsWorking } from \"@ragents/web/chat/chat-target\";\nimport { useCenterElements, useRunPanelHost } from \"@ragents/web/run-panel/host\";\nimport type { SurfaceCenterContext, SurfaceElementContribution, SurfaceElementDefinition, CardSectionContribution, SessionContext, SessionNavigation } from \"@ragents/web/PluginRegistry\";\nimport { Button, cn, Spinner, StartupNotice } from \"@ragents/web/ui\";\nimport { ActorChat } from \"../ActorChat\";\nimport { ActorChatControls } from \"../ActorChatControls\";\nimport { useActorHeaderMode } from \"../actor-header-settings\";\nimport { surfaceStartupState, type SurfaceStartupState } from \"../surface-startup\";\nimport { actorVisibleOnSurface, saveSurfaceViewPreferences, useSurfaceViewPreferences } from \"../surface-view-settings\";\nimport { cardSectionsClass } from \"../constants\";\nimport type { FlowSelection } from \"../FlowInspector\";\nimport { useProgramSlot } from \"../program-slot\";\nimport { chatPrimaryId, runViewFrom, type RunActor, type RunView } from \"@ragents/web/run-view\";\nimport { AddresseeControl } from \"./AddresseeControl\";\nimport { runPanelActors, elementNeedsAttention, partitionRunPanelActors } from \"./run-panel-actors\";\nimport { useRunPanelSettings } from \"./run-panel-settings\";\nimport { chatShowsContent, useRunPanelStartup } from \"./run-panel-startup\";\nimport { chatLayoutFor, clampChatWidth, saveRunPanelState, useRunPanelState, type ChatLayout, type RunPanelChatMode, type RunPanelState } from \"./run-panel-state\";\nimport { sheetStatus } from \"./sheet-status\";\n\nconst SHEET_BLUR_DELAY = 220;\n\nconst chipRowClass = \"flex flex-none flex-wrap items-center gap-1.5 border-b border-border bg-shell px-2 py-1.5\";\nconst chipClass = \"flex h-7 max-w-[200px] flex-none cursor-pointer items-center gap-1.5 rounded-full border border-border bg-card pr-2 pl-1 text-[0.72rem] font-semibold text-foreground hover:bg-accent focus-visible:outline-2 focus-visible:outline-ring/60 focus-visible:outline-offset-1 aria-pressed:border-primary aria-pressed:bg-primary/10\";\nconst chatLayoutClass: Readonly<Record<ChatLayout, string>> = {\n full: \"relative flex min-h-0 min-w-0 flex-1 flex-col\",\n side: \"relative flex min-h-0 min-w-0 flex-col\",\n floating: \"absolute inset-x-2.5 bottom-0 z-20 flex flex-col overflow-hidden rounded-t-2xl border border-b-0 border-border bg-card shadow-[0_-16px_60px_#00000080] transition-[height] duration-300 ease-[cubic-bezier(.32,.72,0,1)] motion-reduce:transition-none\",\n};\nconst chatSurfaceClass = \"rounded-none border-0 bg-transparent\";\nconst chatModeButtonClass = \"aria-pressed:bg-accent aria-pressed:text-primary\";\nconst chatModes: readonly { Icon: typeof MessageSquareIcon; label: string; mode: RunPanelChatMode; title: string }[] = [\n { Icon: MessageSquareIcon, label: \"Chat only\", mode: \"chat\", title: \"Chat only: the chat fills the run panel, the mini-app steps back\" },\n { Icon: PanelBottomIcon, label: \"Chat at bottom\", mode: \"bottom\", title: \"Chat at bottom: the sheet over the mini-app\" },\n { Icon: PanelRightIcon, label: \"Chat on right\", mode: \"side\", title: \"Chat on right: next to the mini-app\" },\n];\n\ninterface RunPanelElement {\n Element: SurfaceElementContribution[\"Element\"];\n definition: SurfaceElementDefinition;\n}\n\nexport function OrchestrationRunPanel(props: SurfaceCenterContext) {\n return <RunPanel key={props.session.session.id} {...props} />;\n}\n\nfunction RunPanel({ surfaceElements, cardSections, navigation, renderChat, session, toolbarContainer }: SurfaceCenterContext) {\n const runId = session.session.id;\n const inspect = useAccess().can(\"runs.inspect\");\n const host = useRunPanelHost();\n const view = runViewFrom(session.runView);\n const stored = useRunPanelState(runId);\n const centered = useCenterElements(runId);\n const rootRef = useRef<HTMLDivElement>(null);\n const sheetRef = useRef<HTMLElement>(null);\n const grabRef = useRef<HTMLButtonElement>(null);\n const statusRef = useRef<HTMLButtonElement>(null);\n const [chatWidth, setChatWidth] = useState(stored.chatWidth);\n const [width, setWidth] = useState(0);\n const [addresseeOpen, setAddresseeOpen] = useState(false);\n const settings = useRunPanelSettings();\n useEffect(() => setChatWidth(stored.chatWidth), [stored.chatWidth]);\n useEffect(() => {\n const root = rootRef.current;\n if (!root) return;\n const observer = new ResizeObserver(([entry]) => setWidth(entry.contentRect.width));\n observer.observe(root);\n return () => observer.disconnect();\n }, []);\n const save = useCallback((patch: Partial<RunPanelState>) => saveRunPanelState(runId, { ...stored, ...patch }), [runId, stored]);\n const elements = useMemo<RunPanelElement[]>(() => surfaceElements.flatMap(({ Element, select }) => select(session)\n .filter((definition) => definition.visible !== false)\n .map((definition) => ({ Element, definition }))), [surfaceElements, session]);\n const selectedElement = elements.find((entry) => entry.definition.id === stored.element) ?? elements[0];\n const startup = useRunPanelStartup(\n surfaceStartupState({ view, startup: session.startup, connected: session.connected, running: session.running, error: session.conversationError }),\n session.connected,\n elements.length > 0 || chatShowsContent(session.messages),\n );\n const notice = startup ? <RunPanelStartup state={startup} /> : undefined;\n const actors = useMemo(() => view ? runPanelActors(view, inspect) : [], [inspect, view]);\n const mode = useActorHeaderMode(runId);\n const preferences = useSurfaceViewPreferences(runId);\n const appActorIds = useMemo(() => new Set(elements.flatMap(({ definition }) => definition.anchorActorId ? [definition.anchorActorId] : [])), [elements]);\n const primaryId = view ? chatPrimaryId(view) : undefined;\n const selectedActor = actors.find((actor) => actor.id === stored.actor) ?? actors.find((actor) => actor.id === primaryId) ?? actors[0];\n const { shown, hidden } = useMemo(() => partitionRunPanelActors(actors, {\n mode,\n primaryId,\n selectedId: selectedActor?.id,\n onStage: (actor) => actor.id === primaryId || actorVisibleOnSurface(actor, appActorIds, preferences, primaryId),\n }), [actors, appActorIds, mode, preferences, primaryId, selectedActor?.id]);\n const availableWidth = () => rootRef.current?.clientWidth ?? Number.POSITIVE_INFINITY;\n const selectActor = useCallback((actor: RunActor) => save({ actor: actor.id }), [save]);\n const revealActor = useCallback((actor: RunActor) => {\n saveSurfaceViewPreferences(runId, { ...preferences, actorVisibility: { ...preferences.actorVisibility, [actor.id]: true } });\n save({ actor: actor.id });\n }, [preferences, runId, save]);\n const navigate = useCallback((selection: FlowSelection) => {\n const actor = selection.type === \"actor\" ? actors.find((entry) => entry.id === selection.id) : undefined;\n if (actor) selectActor(actor);\n }, [actors, selectActor]);\n const primarySelected = selectedActor === undefined || selectedActor.id === primaryId;\n const narrow = width < settings.sideWidth;\n const layout = chatLayoutFor({ chat: stored.chat, hasElement: selectedElement !== undefined, narrow });\n const sheet = useSheet(layout === \"floating\", sheetRef, grabRef, addresseeOpen, settings.openDelay);\n const geometry = useSheetPeek(layout === \"floating\", sheetRef, grabRef, statusRef, selectedActor?.id);\n const expandedHeight = Math.max(geometry.minimum, Math.min(stored.sheetExpandedHeight ?? geometry.maximum, geometry.maximum));\n const resize = useSheetResize(layout === \"floating\", sheetRef, grabRef, sheet, geometry, expandedHeight,\n (height) => save({ sheetExpandedHeight: Math.round(height) }));\n const scrollerRef = useRef<HTMLDivElement | null>(null);\n useEffect(() => {\n if (layout !== \"floating\" || !sheet.expanded) return;\n const scroller = scrollerRef.current;\n if (!scroller) return;\n const toBottom = () => { scroller.scrollTop = scroller.scrollHeight; };\n toBottom();\n const timer = window.setTimeout(toBottom, 320);\n return () => window.clearTimeout(timer);\n }, [layout, sheet.expanded]);\n const status = useMemo(() => {\n if (layout !== \"floating\" || !selectedActor) return undefined;\n const messages = primarySelected ? session.messages : session.actorConversations?.[selectedActor.id] ?? [];\n const working = primarySelected ? session.connected && (session.running || runIsWorking(session.runView, runId)) : selectedActor.lifecycle?.kind === \"running\";\n return sheetStatus(messages, working, selectedActor.handle);\n }, [layout, primarySelected, runId, selectedActor, session.actorConversations, session.connected, session.messages, session.runView, session.running]);\n\n const addressee = view && selectedActor && <AddresseeControl\n hidden={hidden}\n onOpenChange={setAddresseeOpen}\n onReveal={revealActor}\n onSelect={selectActor}\n runId={runId}\n selected={selectedActor}\n shown={shown}\n technical={inspect}\n view={view}\n />;\n const chatModeSwitch = selectedElement && toolbarContainer && createPortal(<ChatModeSwitch\n narrow={narrow}\n onChange={(chat) => save({ chat })}\n selected={stored.chat}\n sideWidth={settings.sideWidth}\n />, toolbarContainer);\n const chat = primarySelected || !view || !selectedActor\n ? renderChat({ chatElementClassName: chatSurfaceClass, chatScrollerRef: (element) => { scrollerRef.current = element; }, notice, toolbarLeft: addressee })\n : <ActorRunPanelChat actor={selectedActor} cardSections={cardSections} navigation={navigation} notice={notice} onNavigate={navigate} session={session} toolbarLeft={addressee} view={view} />;\n\n return <div className=\"flex min-h-0 min-w-0 flex-1 flex-col bg-app\" data-run-panel=\"run\" ref={rootRef}>\n {chatModeSwitch}\n {layout !== \"full\" && elements.length > 1 && <nav aria-label=\"Mini-apps of the run\" className={chipRowClass}>\n {elements.map(({ definition }) => <ElementChip\n centered={centered.has(definition.id)}\n definition={definition}\n key={definition.id}\n onSelect={() => centered.has(definition.id)\n ? host.openInCenter(runId, definition.id, definition.title ?? definition.id)\n : save({ element: definition.id })}\n selected={definition.id === selectedElement?.definition.id}\n session={session}\n view={view}\n />)}\n </nav>}\n <div className={cn(\"relative min-h-0 min-w-0 flex-1\", layout === \"side\" ? \"grid\" : \"flex flex-col\")} data-chat-layout={layout} style={layout === \"side\" ? { gridTemplateColumns: `minmax(0,1fr) auto ${chatWidth}px` } : undefined}>\n {layout !== \"full\" && selectedElement && <RunPanelStage centered={centered.has(selectedElement.definition.id)} element={selectedElement} navigation={navigation} peek={layout === \"floating\" ? geometry.minimum : 0} runId={runId} session={session} />}\n {layout === \"side\" && <Sash\n onChange={(next) => setChatWidth(clampChatWidth(next, availableWidth()))}\n onCommit={(next) => save({ chatWidth: clampChatWidth(next, availableWidth()) })}\n value={chatWidth}\n />}\n {layout === \"floating\" && <div\n aria-hidden\n className=\"absolute inset-0 z-[15] bg-backdrop opacity-0 transition-opacity duration-300 pointer-events-none data-expanded:pointer-events-auto data-expanded:opacity-100 motion-reduce:transition-none\"\n data-expanded={sheet.expanded || undefined}\n onClick={sheet.close}\n />}\n <section\n aria-label=\"Chat\"\n className={cn(chatLayoutClass[layout], layout === \"floating\" && \"[&_[data-chat=composer]]:[--qsl-panel-height:var(--sheet-available-height)] [&:not([data-expanded])_[data-slot=card-sections]]:hidden [&[data-sheet-resizing]_[data-slot=card-sections]]:hidden\")}\n data-expanded={layout === \"floating\" && sheet.expanded ? true : undefined}\n data-sheet-resizing={resize.height !== undefined || undefined}\n data-view={primarySelected ? \"chat\" : \"actor-chat\"}\n onBlurCapture={layout === \"floating\" ? () => sheet.closeLater(SHEET_BLUR_DELAY) : undefined}\n onFocusCapture={layout === \"floating\" ? (event) => { if (event.target !== grabRef.current) sheet.open(); } : undefined}\n onPointerEnter={layout === \"floating\" ? (event) => { if (event.pointerType === \"mouse\") sheet.openLater(); } : undefined}\n onPointerLeave={layout === \"floating\" ? () => sheet.closeLater(settings.closeDelay) : undefined}\n ref={sheetRef}\n style={layout === \"floating\" ? { height: resize.height ?? (sheet.expanded ? expandedHeight : geometry.minimum), transition: resize.height !== undefined ? \"none\" : undefined, \"--sheet-available-height\": `${geometry.available}px` } as CSSProperties : undefined}\n >\n {layout === \"floating\" && <button\n aria-expanded={sheet.expanded}\n aria-label=\"Height of the expanded chat\"\n aria-orientation=\"horizontal\"\n aria-valuemin={geometry.minimum}\n aria-valuemax={geometry.maximum}\n aria-valuenow={Math.round(resize.height ?? expandedHeight)}\n className=\"flex h-3 w-full flex-none cursor-row-resize touch-none items-center justify-center outline-none select-none [&:hover>span]:bg-foreground [&:focus-visible>span]:bg-foreground [&:focus-visible>span]:ring-2 [&:focus-visible>span]:ring-ring/60\"\n data-run-panel=\"sheet-grip\"\n onClick={resize.onClick}\n onKeyDown={resize.onKeyDown}\n onPointerDown={resize.onPointerDown}\n onPointerMove={resize.onPointerMove}\n onPointerUp={resize.onPointerUp}\n onPointerCancel={resize.onPointerCancel}\n onLostPointerCapture={resize.onPointerCancel}\n ref={grabRef}\n role=\"separator\"\n title={`Drag: set the expanded height. Click: ${sheet.expanded ? \"lower chat\" : \"raise chat\"}.`}\n type=\"button\"\n ><span aria-hidden className=\"h-1 w-9 rounded-full bg-border-strong transition-colors\" /></button>}\n {status && <button\n className={cn(\"flex h-6 w-full flex-none cursor-pointer items-center gap-2 px-[var(--qsl-chat-horizontal-padding,24px)] text-left text-[0.7rem] transition-opacity duration-200 in-data-expanded:pointer-events-none in-data-expanded:opacity-0 motion-reduce:transition-none\", status.kind === \"waiting\" ? \"text-warning\" : \"text-muted-foreground\")}\n onClick={sheet.toggle}\n ref={statusRef}\n title={status.text}\n type=\"button\"\n >\n {status.kind === \"working\" && <Spinner aria-hidden className=\"size-3 flex-none\" />}\n <span className=\"truncate\">{status.text}</span>\n </button>}\n {chat}\n </section>\n </div>\n </div>;\n}\n\n/** The three views of the run panel in the header; \"Chat on right\" stays disabled while the run panel is too narrow. */\nfunction ChatModeSwitch({ narrow, onChange, selected, sideWidth }: {\n narrow: boolean;\n onChange: (mode: RunPanelChatMode) => void;\n selected: RunPanelChatMode;\n sideWidth: number;\n}) {\n return <div aria-label=\"Run panel view\" className=\"flex flex-none items-center gap-0.5 self-center rounded-lg border border-border bg-card p-0.5\" role=\"group\">\n {chatModes.map(({ Icon, label, mode, title }) => {\n const blocked = mode === \"side\" && narrow;\n return <Button\n aria-label={label}\n aria-pressed={selected === mode}\n className={chatModeButtonClass}\n disabled={blocked}\n key={mode}\n onClick={() => onChange(mode)}\n size=\"icon-sm\"\n title={blocked ? `Chat stays at the bottom while the panel is narrower than ${sideWidth} pixels` : title}\n variant=\"ghost\"\n ><Icon /></Button>;\n })}\n </div>;\n}\n\n/** The sheet: mouse, focus or the grip raise it; Escape, the stage or the grip lower it. An open pop-out keeps it up. */\nfunction useSheet(active: boolean, sheetRef: RefObject<HTMLElement | null>, grabRef: RefObject<HTMLButtonElement | null>, blocked: boolean, openDelay: number) {\n const [expanded, setExpanded] = useState(false);\n const [held, setHeld] = useState(false);\n const guard = useRef({ held, blocked });\n const resizing = useRef(false);\n const timer = useRef<number>(undefined);\n useEffect(() => { guard.current = { held, blocked }; }, [blocked, held]);\n const cancel = useCallback(() => window.clearTimeout(timer.current), []);\n const open = useCallback(() => { if (!resizing.current) { cancel(); setExpanded(true); } }, [cancel]);\n const openLater = useCallback(() => {\n if (resizing.current) return;\n cancel();\n timer.current = window.setTimeout(() => { if (!resizing.current) setExpanded(true); }, openDelay);\n }, [cancel, openDelay]);\n const closeLater = useCallback((delay: number) => {\n if (resizing.current) return;\n cancel();\n timer.current = window.setTimeout(() => {\n if (resizing.current || guard.current.held || guard.current.blocked\n || (document.activeElement !== grabRef.current && sheetRef.current?.contains(document.activeElement))) return;\n setExpanded(false);\n }, delay);\n }, [cancel, grabRef, sheetRef]);\n const close = useCallback(() => {\n cancel();\n setHeld(false);\n setExpanded(false);\n if (document.activeElement instanceof HTMLElement && sheetRef.current?.contains(document.activeElement)) document.activeElement.blur();\n }, [cancel, sheetRef]);\n const toggle = useCallback(() => {\n if (expanded) { close(); return; }\n setHeld(true);\n open();\n }, [close, expanded, open]);\n const pauseResize = useCallback(() => { cancel(); resizing.current = true; }, [cancel]);\n const finishResize = useCallback((previous?: { expanded: boolean; held: boolean }) => {\n cancel();\n resizing.current = false;\n setExpanded(previous?.expanded ?? false);\n setHeld(previous?.held ?? false);\n }, [cancel]);\n useEffect(() => { if (!active) close(); }, [active, close]);\n useEffect(() => cancel, [cancel]);\n useEffect(() => {\n if (!active || !expanded) return;\n const onKeyDown = (event: globalThis.KeyboardEvent) => { if (event.key === \"Escape\" && !resizing.current && !guard.current.blocked) close(); };\n window.addEventListener(\"keydown\", onKeyDown);\n return () => window.removeEventListener(\"keydown\", onKeyDown);\n }, [active, close, expanded]);\n return { expanded, held, open, openLater, closeLater, close, toggle, pauseResize, finishResize };\n}\n\n/** The height of the collapsed sheet: grip, status line and input including open actions above it, measured on the input of the chat frame. */\nfunction useSheetPeek(active: boolean, sheetRef: RefObject<HTMLElement | null>, grabRef: RefObject<HTMLButtonElement | null>, statusRef: RefObject<HTMLButtonElement | null>, actorId: string | undefined) {\n const [geometry, setGeometry] = useState({ minimum: 0, maximum: 0, available: 0, scale: 1 });\n useLayoutEffect(() => {\n if (!active) return;\n const sheet = sheetRef.current;\n const grab = grabRef.current;\n const status = statusRef.current;\n const composer = sheet?.querySelector<HTMLElement>('[data-chat=\"composer\"]');\n const container = sheet?.parentElement;\n if (!sheet || !grab || !composer || !container) throw new Error(\"The panel sheet cannot find the grip, input or frame.\");\n const measure = () => {\n const style = getComputedStyle(sheet);\n const width = sheet.getBoundingClientRect().width;\n if (width === 0) return;\n const scale = width / Number.parseFloat(style.width);\n const minimum = Math.ceil((grab.getBoundingClientRect().height + (status?.getBoundingClientRect().height ?? 0)\n + composer.getBoundingClientRect().height) / scale + Number.parseFloat(style.borderTopWidth) + Number.parseFloat(style.borderBottomWidth));\n const available = Math.floor(container.getBoundingClientRect().height / scale * 0.9);\n const maximum = Math.max(minimum, available);\n setGeometry((previous) => previous.minimum === minimum && previous.maximum === maximum && previous.available === available && previous.scale === scale ? previous : { minimum, maximum, available, scale });\n };\n const observer = new ResizeObserver(measure);\n observer.observe(composer);\n observer.observe(grab);\n observer.observe(container);\n if (status) observer.observe(status);\n measure();\n return () => observer.disconnect();\n }, [active, actorId, grabRef, sheetRef, statusRef]);\n return geometry;\n}\n\nfunction useSheetResize(active: boolean, sheetRef: RefObject<HTMLElement | null>, grabRef: RefObject<HTMLButtonElement | null>, sheet: ReturnType<typeof useSheet>,\n geometry: { minimum: number; maximum: number; scale: number }, expandedHeight: number, onCommit: (height: number) => void) {\n const [height, setHeight] = useState<number>();\n const drag = useRef<{ pointerId: number; startY: number; startHeight: number; height: number; moved: boolean; expanded: boolean; held: boolean }>(undefined);\n const suppressClick = useRef(false);\n const finish = (commit: boolean) => {\n const previous = drag.current;\n if (!previous) return;\n drag.current = undefined;\n suppressClick.current = previous.moved || !commit;\n const grip = grabRef.current;\n if (grip?.hasPointerCapture(previous.pointerId)) grip.releasePointerCapture(previous.pointerId);\n if (commit && previous.moved) onCommit(previous.height);\n sheet.finishResize(commit && previous.moved ? { expanded: true, held: previous.held } : previous);\n setHeight(undefined);\n };\n const finishResize = sheet.finishResize;\n useEffect(() => {\n if (active) return;\n drag.current = undefined;\n setHeight(undefined);\n finishResize();\n }, [active, finishResize]);\n const clamp = (value: number) => Math.max(geometry.minimum, Math.min(value, geometry.maximum));\n return {\n height,\n onClick: (event: MouseEvent<HTMLButtonElement>) => {\n const suppressed = suppressClick.current && event.detail > 0;\n suppressClick.current = false;\n if (suppressed) return;\n sheet.toggle();\n },\n onPointerDown: (event: PointerEvent<HTMLButtonElement>) => {\n if (event.button !== 0 || drag.current || !sheetRef.current) return;\n event.preventDefault();\n const startHeight = sheetRef.current.getBoundingClientRect().height / geometry.scale;\n drag.current = { pointerId: event.pointerId, startY: event.clientY, startHeight, height: startHeight, moved: false, expanded: sheet.expanded, held: sheet.held };\n suppressClick.current = false;\n sheet.pauseResize();\n setHeight(startHeight);\n event.currentTarget.setPointerCapture(event.pointerId);\n event.currentTarget.focus({ preventScroll: true });\n },\n onPointerMove: (event: PointerEvent<HTMLButtonElement>) => {\n const current = drag.current;\n if (!current || current.pointerId !== event.pointerId) return;\n const distance = (current.startY - event.clientY) / geometry.scale;\n if (!current.moved && Math.abs(distance) < 3) return;\n current.moved = true;\n current.height = clamp(current.startHeight + distance);\n setHeight(current.height);\n },\n onPointerUp: (event: PointerEvent<HTMLButtonElement>) => { if (drag.current?.pointerId === event.pointerId) finish(true); },\n onPointerCancel: (event: PointerEvent<HTMLButtonElement>) => { if (drag.current?.pointerId === event.pointerId) finish(false); },\n onKeyDown: (event: KeyboardEvent<HTMLButtonElement>) => {\n if (event.key === \"Escape\" && drag.current) {\n event.preventDefault();\n event.stopPropagation();\n finish(false);\n return;\n }\n const next = event.key === \"ArrowUp\" ? expandedHeight + 24 : event.key === \"ArrowDown\" ? expandedHeight - 24\n : event.key === \"Home\" ? geometry.minimum : event.key === \"End\" ? geometry.maximum : undefined;\n if (next === undefined || drag.current) return;\n event.preventDefault();\n sheet.finishResize({ expanded: true, held: sheet.held });\n onCommit(clamp(next));\n },\n };\n}\n\nfunction ElementChip({ centered, definition, onSelect, selected, session, view }: {\n centered: boolean;\n definition: SurfaceElementDefinition;\n onSelect: () => void;\n selected: boolean;\n session: SessionContext;\n view: RunView | undefined;\n}) {\n const programs = useProgramSlot();\n const title = definition.title ?? definition.id;\n const attention = elementNeedsAttention(view, definition, programs?.needsAnswer(session, definition.id) ?? false);\n return <button aria-pressed={selected && !centered} className={chipClass} data-tone=\"app\" onClick={onSelect} title={centered ? `${title} is in the center. Click brings the window to the front.` : `Show mini-app ${title}`} type=\"button\">\n <span className=\"grid size-5 flex-none place-items-center rounded-full bg-glass-app text-foreground [&>svg]:size-3\"><LayoutGridIcon /></span>\n <span className=\"truncate\">{title}</span>\n {attention && <span aria-label=\"Answer expected\" className=\"grid size-4 flex-none place-items-center rounded-full bg-warning text-[0.62rem] font-bold text-background\" role=\"img\">!</span>}\n {centered && <ArrowUpRightIcon aria-hidden className=\"size-3 flex-none text-muted-foreground\" />}\n </button>;\n}\n\nfunction RunPanelStage({ centered, element, navigation, peek, runId, session }: {\n centered: boolean;\n element: RunPanelElement;\n navigation: SessionNavigation;\n peek: number;\n runId: string;\n session: SessionContext;\n}) {\n const host = useRunPanelHost();\n const programs = useProgramSlot();\n const { Element, definition } = element;\n const title = definition.title ?? definition.id;\n return <section aria-label={`Mini-app ${title}`} className=\"group/stage relative flex min-h-0 min-w-0 flex-1 flex-col overflow-hidden bg-app\" style={peek > 0 ? { paddingBottom: peek } : undefined}>\n <div className=\"absolute top-1.5 right-2 z-[5] flex gap-0.5 rounded-lg border border-border bg-card p-0.5 opacity-0 transition-opacity group-hover/stage:opacity-100 group-focus-within/stage:opacity-100 motion-reduce:transition-none\">\n {host.kind === \"vscode\"\n ? <Button aria-label={`Move ${title} to the center`} onClick={() => host.openInCenter(runId, definition.id, title)} size=\"icon-sm\" title=\"Move to the center\" variant=\"ghost\"><ArrowUpRightIcon /></Button>\n : programs && <Button aria-label={`Open ${title} in full view`} onClick={() => programs.openFullscreen(definition.id)} size=\"icon-sm\" title=\"Full view\" variant=\"ghost\"><Maximize2Icon /></Button>}\n </div>\n <div className=\"relative flex min-h-0 flex-1 flex-col\" data-run-panel=\"stage\">\n {centered\n ? <div className=\"m-auto grid gap-3 p-4 text-center text-[0.76rem] text-muted-foreground\" role=\"status\">\n <span>{title} is in the center.</span>\n <Button onClick={() => host.returnToRunPanel(runId, definition.id)} size=\"sm\" variant=\"outline\">Back to panel</Button>\n </div>\n : <Element definition={definition} navigation={navigation} session={session} />}\n </div>\n </section>;\n}\n\n/** The vertical grip between stage and the chat next to it; dragging left makes the chat wider. */\nfunction Sash({ onChange, onCommit, value }: { onChange: (next: number) => void; onCommit: (next: number) => void; value: number }) {\n const drag = useRef<{ startX: number; startWidth: number }>(undefined);\n const finish = (event: PointerEvent<HTMLDivElement>) => {\n if (!drag.current) return;\n drag.current = undefined;\n event.currentTarget.releasePointerCapture(event.pointerId);\n onCommit(value);\n };\n return <div\n aria-label=\"Chat width\"\n aria-orientation=\"vertical\"\n aria-valuenow={value}\n className=\"flex w-2.5 flex-none cursor-col-resize touch-none items-center justify-center border-r border-l border-border bg-shell select-none hover:bg-accent focus-visible:outline-2 focus-visible:outline-ring/60 focus-visible:-outline-offset-2\"\n onKeyDown={(event) => {\n const step = event.key === \"ArrowRight\" ? -24 : event.key === \"ArrowLeft\" ? 24 : 0;\n if (step === 0) return;\n event.preventDefault();\n onChange(value + step);\n onCommit(value + step);\n }}\n onPointerCancel={finish}\n onPointerDown={(event) => {\n drag.current = { startX: event.clientX, startWidth: value };\n event.currentTarget.setPointerCapture(event.pointerId);\n }}\n onPointerMove={(event) => { if (drag.current) onChange(drag.current.startWidth + drag.current.startX - event.clientX); }}\n onPointerUp={finish}\n role=\"separator\"\n tabIndex={0}\n >\n <span aria-hidden className=\"h-10 w-1 rounded-full bg-border-strong\" />\n </div>;\n}\n\nfunction ActorRunPanelChat({ actor, cardSections, navigation, notice, onNavigate, session, toolbarLeft, view }: {\n actor: RunActor;\n cardSections: readonly CardSectionContribution[];\n navigation: SessionNavigation;\n notice: ReactNode;\n onNavigate: (selection: FlowSelection) => void;\n session: SessionContext;\n toolbarLeft: ReactNode;\n view: RunView;\n}) {\n const running = actor.lifecycle?.kind === \"running\";\n return <div className=\"flex min-h-0 min-w-0 flex-1 flex-col\">\n <div className={`${cardSectionsClass} max-h-[40%] flex-none overflow-auto overscroll-contain border-t-0 border-b`} data-slot=\"card-sections\">\n {cardSections.map(({ id, Section }) => <Section actor={actor} key={id} navigation={navigation} session={session} />)}\n </div>\n <ChatPanel className=\"flex-1\" composer={<ActorChatControls actor={actor} presentation=\"panel\" running={running} display=\"panel\" toolbarLeft={toolbarLeft} view={view} />}>\n {notice ?? <ActorChat actor={actor} conversation={session.actorConversations?.[actor.id]} historyError={session.conversationError} onNavigate={onNavigate}\n presentation=\"inspector\" primaryMessages={session.messages} running={running} display=\"panel\" view={view} />}\n </ChatPanel>\n </div>;\n}\n\n/** The loading state centered in the chat; it only moves up where it would otherwise end up under the input. */\nfunction RunPanelStartup({ state }: { state: SurfaceStartupState }) {\n return <div className=\"grid min-h-0 flex-1 grid-rows-[minmax(0,1fr)_auto_minmax(var(--qsl-composer-height,0px),1fr)] justify-items-center overflow-hidden p-6\">\n <StartupNotice className=\"row-start-2\" state={state} />\n </div>;\n}\n", "import { runActorFrom, runViewFrom, type RunArtifact } from \"@ragents/web/run-view\";\nimport { formatBytes } from \"@ragents/web/lib/format\";\nimport type { CardSectionContext, SessionNavigation } from \"@ragents/web/PluginRegistry\";\nimport { SectionLabel } from \"@ragents/web/ui\";\n\nconst openDocument = (navigation: SessionNavigation, artifact: RunArtifact) => {\n if (navigation.revealEntity({ type: \"artifact\", id: artifact.id })) return;\n throw new Error(`No plugin can show the document ${artifact.title}`);\n};\n\nexport function DocumentsSection({ actor, navigation, session }: CardSectionContext) {\n const view = runViewFrom(session.runView);\n if (!view) return null;\n const actorId = runActorFrom(actor).id;\n const documents = view.artifacts.filter((artifact) => artifact.createdBy === actorId);\n if (documents.length === 0) return null;\n\n return (\n <section className=\"grid gap-1.5\">\n <SectionLabel>\n <span>Documents</span>\n <small>{documents.length}</small>\n </SectionLabel>\n <ul className=\"grid list-none gap-1\">\n {documents.map((artifact) => (\n <li key={artifact.id}>\n <button className=\"grid w-full cursor-pointer rounded-lg border border-border-soft px-2 py-1.5 text-left hover:border-[color-mix(in_srgb,var(--primary)_45%,var(--border))] hover:bg-primary/6\"\n onClick={() => openDocument(navigation, artifact)} type=\"button\">\n <strong className=\"truncate text-[0.74rem]\" title={artifact.title}>{artifact.title}</strong>\n <small className=\"text-[0.64rem] text-muted-foreground\">{formatBytes(artifact.size)} - {artifact.mediaType}</small>\n </button>\n </li>\n ))}\n </ul>\n </section>\n );\n}\n", "import { useEffect, useState } from \"react\";\nimport { useAccess } from \"@ragents/web/AccessContext\";\nimport { Button, Input } from \"@ragents/web/ui\";\nimport { RUN_PANEL_SETTINGS_LIMITS, DEFAULT_RUN_PANEL_SETTINGS, saveRunPanelSettings, useRunPanelSettings, type RunPanelSettings as RunPanelSettingsValue } from \"./run-panel-settings\";\n\ntype Draft = Record<keyof RunPanelSettingsValue, string>;\n\nconst toDraft = (value: RunPanelSettingsValue): Draft => ({ sideWidth: String(value.sideWidth), openDelay: String(value.openDelay), closeDelay: String(value.closeDelay) });\n\nconst fields: readonly { key: keyof RunPanelSettingsValue; label: string; unit: string }[] = [\n { key: \"sideWidth\", label: \"Chat next to the mini-app from\", unit: \"px\" },\n { key: \"openDelay\", label: \"Slide up after\", unit: \"ms\" },\n { key: \"closeDelay\", label: \"Slide back after leaving after\", unit: \"ms\" },\n];\n\nexport function RunPanelSettings() {\n const access = useAccess();\n const stored = useRunPanelSettings();\n const [draft, setDraft] = useState(() => toDraft(stored));\n const [message, setMessage] = useState<string>();\n const [error, setError] = useState<string>();\n useEffect(() => { setDraft(toDraft(stored)); }, [stored]);\n const writable = access.can(\"settings.write\");\n const save = (next: RunPanelSettingsValue) => {\n if (!writable) return;\n setError(undefined);\n setMessage(undefined);\n try {\n saveRunPanelSettings(next);\n setMessage(\"Run panel settings saved.\");\n } catch (cause) {\n setError(cause instanceof Error ? cause.message : String(cause));\n }\n };\n return <form className=\"grid gap-3\" onSubmit={(event) => {\n event.preventDefault();\n save({ sideWidth: Number(draft.sideWidth), openDelay: Number(draft.openDelay), closeDelay: Number(draft.closeDelay) });\n }}>\n <p className=\"text-muted-foreground\">From this panel width on, the chat sits to the right of the mini-app instead of as a sheet below it. The delays determine how long the mouse must rest over the sheet until it slides up, and how long it stays up after leaving. Applies immediately to all runs in this browser.</p>\n <div className=\"flex flex-wrap items-end gap-3\">\n {fields.map(({ key, label, unit }) => <label className=\"grid gap-1.5\" key={key}>\n <span>{label} ({unit})</span>\n <Input className=\"w-[130px]\" disabled={!writable} max={RUN_PANEL_SETTINGS_LIMITS[key].max} min={RUN_PANEL_SETTINGS_LIMITS[key].min} onChange={(event) => { setDraft({ ...draft, [key]: event.target.value }); setMessage(undefined); }} required step=\"1\" type=\"number\" value={draft[key]} />\n </label>)}\n <Button disabled={!writable} type=\"submit\">Save</Button>\n <Button disabled={!writable} onClick={() => save(DEFAULT_RUN_PANEL_SETTINGS)} variant=\"outline\">Reset</Button>\n </div>\n {error ? <p className=\"text-muted-foreground\" role=\"alert\">{error}</p> : message && <p className=\"text-muted-foreground\" role=\"status\">{message}</p>}\n </form>;\n}\n", "import { useCallback, useEffect, useId, useMemo, useRef, useState } from \"react\";\nimport { XIcon } from \"lucide-react\";\nimport type { JournalEvent } from \"@ragents/engine/src/domain/events\";\nimport type { SessionHeaderContext } from \"@ragents/web/PluginRegistry\";\nimport { SourceCode } from \"@ragents/web/SourceCode\";\nimport { Button, Input, Popover, PopoverContent } from \"@ragents/web/ui\";\nimport { runContracts } from \"@ragents/engine/src/http/contracts\";\nimport { rpc } from \"@ragents/web/rpc\";\nimport { runViewFrom } from \"@ragents/web/run-view\";\nimport { statusControlClass } from \"./constants\";\n\nexport function JournalStatus({ session }: SessionHeaderContext) {\n const [open, setOpen] = useState(false);\n const [events, setEvents] = useState<readonly JournalEvent[]>([]);\n const [error, setError] = useState<string>();\n const [loading, setLoading] = useState(false);\n const [reload, setReload] = useState(0);\n const [query, setQuery] = useState(\"\");\n const [limit, setLimit] = useState(100);\n const buttonRef = useRef<HTMLButtonElement>(null);\n const searchRef = useRef<HTMLInputElement>(null);\n const panelId = useId();\n const view = runViewFrom(session.runView);\n const revision = view?.revision;\n const close = useCallback((restoreFocus = false) => {\n setOpen(false);\n if (restoreFocus) buttonRef.current?.focus({ preventScroll: true });\n }, []);\n\n useEffect(() => {\n if (!open) return;\n const controller = new AbortController();\n setLoading(true);\n setError(undefined);\n void rpc.call(runContracts.events, { runId: session.session.id }, { signal: controller.signal })\n .then((result) => { if (!controller.signal.aborted) setEvents(result); })\n .catch((cause: unknown) => { if (!controller.signal.aborted) setError(cause instanceof Error ? cause.message : String(cause)); })\n .finally(() => { if (!controller.signal.aborted) setLoading(false); });\n return () => controller.abort();\n }, [open, session.session.id, revision, reload]);\n\n const filtered = useMemo(() => {\n const search = query.trim().toLocaleLowerCase(\"en-US\");\n const handles = new Map(view?.actors.map((actor) => [actor.id, actor.handle]));\n return [...events].reverse().filter((event) => !search || `${handles.get(event.actorId) ?? \"\"} ${JSON.stringify(event)}`.toLocaleLowerCase(\"en-US\").includes(search));\n }, [events, query, view?.actors]);\n const actors = new Map(view?.actors.map((actor) => [actor.id, actor.handle]));\n\n return <div className=\"flex h-full min-w-0 items-stretch\">\n <button aria-controls={panelId} aria-expanded={open} className={statusControlClass} onClick={() => setOpen((value) => !value)} ref={buttonRef} type=\"button\">\n Journal\n </button>\n <Popover open={open} onOpenChange={(next) => { if (!next) close(); }}>\n <PopoverContent align=\"start\" anchor={buttonRef} aria-label=\"Journal of the run\" className=\"flex min-h-0 min-w-0 flex-col gap-0 overflow-hidden rounded-t-sm rounded-b-none p-0 text-[0.76rem]\" collisionPadding={8} id={panelId}\n initialFocus={searchRef} role=\"region\" side=\"top\" style={{ width: \"min(900px, var(--available-width))\", height: \"min(480px, var(--available-height))\" }}>\n <header className=\"flex flex-none items-center gap-2 border-b border-border-soft px-2.5 py-2\">\n <div className=\"flex min-w-0 flex-1 items-baseline gap-2.5 [&>span]:truncate\"><strong>Journal</strong><span className=\"text-muted-foreground\">{session.session.title || \"Run\"}</span></div>\n <Button onClick={() => setReload((value) => value + 1)} size=\"sm\" variant=\"ghost\">Refresh</Button>\n <Button aria-label=\"Close journal\" onClick={() => close(true)} size=\"icon-sm\" title=\"Close journal\" variant=\"ghost\"><XIcon /></Button>\n </header>\n <div className=\"flex flex-none items-center gap-3 px-2.5 py-2\">\n <Input className=\"flex-1\" aria-label=\"Search journal\" onChange={(event) => { setQuery(event.target.value); setLimit(100); }} placeholder=\"Search event type, actor or content ...\" ref={searchRef} type=\"search\" value={query} />\n <span className=\"flex-none whitespace-nowrap text-[0.68rem] text-muted-foreground\" role=\"status\">{loading ? \"Loading ...\" : `${filtered.length} events`}</span>\n </div>\n {error && <p className=\"flex-none px-2.5 pb-2 text-destructive\" role=\"alert\">{error}</p>}\n <div aria-label=\"Journal events, newest first\" className=\"min-h-0 flex-1 overflow-auto overscroll-contain px-2.5 pb-2.5\">\n {!loading && !error && filtered.length === 0 && <p className=\"text-muted-foreground\">{query ? \"No matching events.\" : \"The journal contains no events yet.\"}</p>}\n {filtered.slice(0, limit).map((event) => <JournalEntry actor={actors.get(event.actorId)} event={event} key={event.eventId} />)}\n {filtered.length > limit && <Button onClick={() => setLimit((value) => value + 100)} size=\"sm\" variant=\"outline\">Show more events</Button>}\n </div>\n </PopoverContent>\n </Popover>\n </div>;\n}\n\nfunction JournalEntry({ actor, event }: { actor: string | undefined; event: JournalEvent }) {\n const [expanded, setExpanded] = useState(false);\n return <details className=\"border-b border-border-soft open:[&>summary]:text-primary\" onToggle={(toggle) => setExpanded(toggle.currentTarget.open)}>\n <summary className=\"grid cursor-pointer grid-cols-[32px_minmax(130px,1fr)_minmax(70px,140px)_auto] items-baseline gap-2 px-0.5 py-2 text-[0.68rem] focus-visible:outline-2 focus-visible:outline-primary focus-visible:-outline-offset-2 max-[550px]:grid-cols-[24px_minmax(0,1fr)_auto] max-[550px]:gap-x-2 max-[550px]:gap-y-1\">\n <span className=\"text-muted-foreground tabular-nums\">{event.sequence}</span>\n <span className=\"font-mono [overflow-wrap:anywhere]\">{event.type}</span>\n <span className=\"truncate max-[550px]:col-start-2 max-[550px]:row-start-2\" title={event.actorId}>{actor ? `@${actor}` : event.actorId}</span>\n <time className=\"text-muted-foreground tabular-nums max-[550px]:col-start-3 max-[550px]:row-start-1\" dateTime={event.occurredAt}>{new Date(event.occurredAt).toLocaleTimeString()}</time>\n </summary>\n {expanded && <SourceCode className=\"m-0 mb-2 text-[0.68rem]\" content={JSON.stringify(event, null, 2)} language=\"json\" path=\"event.json\" />}\n </details>;\n}\n", "import { useState } from \"react\";\nimport { useAccess } from \"@ragents/web/AccessContext\";\nimport type { SessionHeaderContext } from \"@ragents/web/PluginRegistry\";\nimport { Button, StopGlyph } from \"@ragents/web/ui\";\nimport { ToolbarItem } from \"@ragents/web/Toolbar\";\nimport { stopRun } from \"./api\";\n\nconst STOP_RUN_REASON = \"Emergency stop by the operator\";\n\nexport function StopRunHeader({ session }: SessionHeaderContext) {\n return <ToolbarItem className=\"max-w-none\"><StopRunButton key={session.session.id} runId={session.session.id} /></ToolbarItem>;\n}\n\nfunction StopRunButton({ runId }: { runId: string }) {\n const writable = useAccess().can(\"runs.write\");\n const [armed, setArmed] = useState(false);\n const [busy, setBusy] = useState(false);\n const [error, setError] = useState<string>();\n\n const stop = async () => {\n setBusy(true);\n setError(undefined);\n try {\n await stopRun(runId, STOP_RUN_REASON);\n setArmed(false);\n } catch (caught) {\n setError(caught instanceof Error ? caught.message : String(caught));\n } finally {\n setBusy(false);\n }\n };\n\n if (!writable) return null;\n if (!armed) {\n return (\n <Button onClick={() => setArmed(true)} size=\"sm\" title=\"Ends the whole run: turns, agents and flows\" variant=\"destructive\">\n <StopGlyph data-icon=\"inline-start\" />Stop run\n </Button>\n );\n }\n\n return (\n <span className=\"inline-flex items-center gap-1.5 whitespace-nowrap\">\n <span className=\"text-[0.72rem] font-semibold text-destructive\">Really stop everything?</span>\n <Button disabled={busy} onClick={() => void stop()} size=\"sm\" variant=\"destructive\">Yes</Button>\n <Button disabled={busy} onClick={() => setArmed(false)} size=\"sm\" variant=\"outline\">\n Cancel\n </Button>\n {error && <span className=\"max-w-[260px] truncate text-[0.7rem] text-destructive\" title={error}>{error}</span>}\n </span>\n );\n}\n", "import type { JournalEvent } from \"@ragents/engine/src/domain/events\";\nimport type { JsonValue } from \"@ragents/engine/src/domain/json\";\nimport type { RunView } from \"@ragents/web/run-view\";\n\nexport type ExecutionStatus = \"running\" | \"completed\" | \"failed\" | \"interrupted\";\n\nexport interface TypeScriptExecution {\n key: string;\n actorId: string;\n actorHandle: string;\n actorName: string;\n turnId: string;\n toolCallId: string;\n sequence: number;\n startedAt: string;\n finishedAt: string | null;\n status: ExecutionStatus;\n code: string | null;\n path: string | null;\n result: JsonValue | undefined;\n logs: readonly string[];\n error: string | null;\n}\n\nconst record = (value: unknown): value is Record<string, unknown> => typeof value === \"object\" && value !== null && !Array.isArray(value);\nconst executionKey = (actorId: string, turnId: string, toolCallId: string) => JSON.stringify([actorId, turnId, toolCallId]);\n\nexport const executionEventsFrom = (value: unknown, runId: string): readonly JournalEvent[] => {\n if (!Array.isArray(value) || value.some((entry: unknown) => {\n if (!record(entry) || entry.runId !== runId || typeof entry.eventId !== \"string\" || typeof entry.actorId !== \"string\"\n || !Number.isSafeInteger(entry.sequence) || typeof entry.occurredAt !== \"string\" || !Number.isFinite(Date.parse(entry.occurredAt))\n || typeof entry.type !== \"string\" || !record(entry.payload)) return true;\n const payload = entry.payload;\n if (entry.type.startsWith(\"tool.call.\") && (typeof payload.turnId !== \"string\" || typeof payload.toolCallId !== \"string\")) return true;\n if (entry.type === \"tool.call.source\") return typeof payload.code !== \"string\" || (payload.path !== null && typeof payload.path !== \"string\");\n if (entry.type === \"tool.call.started\") return typeof payload.name !== \"string\" || !(\"input\" in payload);\n if (entry.type === \"tool.call.completed\") return typeof payload.name !== \"string\" || !(\"output\" in payload);\n if (entry.type === \"tool.call.failed\") return typeof payload.name !== \"string\" || typeof payload.error !== \"string\";\n if (entry.type === \"turn.finished\") return typeof payload.turnId !== \"string\" || ![\"completed\", \"failed\"].includes(String(payload.outcome));\n if (entry.type === \"turn.interrupted\") return typeof payload.turnId !== \"string\" || typeof payload.reason !== \"string\";\n return false;\n })) throw new Error(\"The server did not deliver a valid journal for this run.\");\n return value as JournalEvent[];\n};\n\nexport const projectExecutions = (events: readonly JournalEvent[], view?: Pick<RunView, \"id\" | \"actors\" | \"turns\">): TypeScriptExecution[] => {\n const executions = new Map<string, TypeScriptExecution>();\n const actors = new Map(view?.actors.map((actor) => [actor.id, actor]));\n const ends = new Map<string, { at: string; reason: string | null }>();\n for (const event of [...events].sort((left, right) => left.sequence - right.sequence)) {\n if (view && event.runId !== view.id) continue;\n if (event.type === \"turn.finished\" || event.type === \"turn.interrupted\") {\n ends.set(JSON.stringify([event.actorId, event.payload.turnId]), { at: event.occurredAt, reason: \"reason\" in event.payload ? event.payload.reason : null });\n continue;\n }\n if (event.type !== \"tool.call.started\" && event.type !== \"tool.call.completed\" && event.type !== \"tool.call.failed\" && event.type !== \"tool.call.source\") continue;\n const key = executionKey(event.actorId, event.payload.turnId, event.payload.toolCallId);\n if (event.type === \"tool.call.started\") {\n if (event.payload.name !== \"typescript_eval\" || executions.has(key)) continue;\n const actor = actors.get(event.actorId);\n const input = record(event.payload.input) ? event.payload.input : {};\n executions.set(key, {\n key, actorId: event.actorId, actorHandle: actor?.handle ?? event.actorId, actorName: actor?.displayName ?? event.actorId,\n turnId: event.payload.turnId, toolCallId: event.payload.toolCallId, sequence: event.sequence,\n startedAt: event.occurredAt, finishedAt: null, status: \"running\",\n code: typeof input.code === \"string\" ? input.code : null, path: typeof input.path === \"string\" ? input.path : null,\n result: undefined, logs: [], error: null,\n });\n continue;\n }\n const execution = executions.get(key);\n if (!execution) continue;\n if (event.type === \"tool.call.source\") {\n execution.code = event.payload.code;\n execution.path = event.payload.path;\n } else if (event.type === \"tool.call.completed\") {\n execution.status = \"completed\";\n execution.finishedAt = event.occurredAt;\n const output = event.payload.output;\n const envelope = record(output) && \"result\" in output && Array.isArray(output.logs) && output.logs.every((line) => typeof line === \"string\");\n execution.result = envelope ? output.result as JsonValue : output;\n execution.logs = envelope ? output.logs as string[] : [];\n } else {\n execution.status = \"failed\";\n execution.finishedAt = event.occurredAt;\n execution.error = event.payload.error;\n }\n }\n const turns = new Map(view?.turns.map((turn) => [JSON.stringify([turn.actorId, turn.id]), turn]));\n for (const execution of executions.values()) {\n if (execution.status !== \"running\") continue;\n const turnKey = JSON.stringify([execution.actorId, execution.turnId]);\n const turn = turns.get(turnKey);\n const call = turn?.toolCalls?.find((entry) => entry.id === execution.toolCallId && entry.name === \"typescript_eval\");\n const ended = ends.get(turnKey);\n if (call && call.status !== \"running\") {\n execution.status = call.status;\n execution.finishedAt = call.finishedAt ?? turn?.finishedAt ?? ended?.at ?? null;\n } else if (ended || (turn && turn.status !== \"running\")) {\n execution.status = \"interrupted\";\n execution.finishedAt = ended?.at ?? turn?.finishedAt ?? null;\n }\n if (execution.status === \"interrupted\") execution.error = ended?.reason ?? turn?.reason ?? \"The call was interrupted.\";\n }\n return [...executions.values()].sort((left, right) => right.sequence - left.sequence);\n};\n\nexport const executionStatusLabel = (status: ExecutionStatus): string => ({ running: \"Running\", completed: \"Completed\", failed: \"Failed\", interrupted: \"Interrupted\" })[status];\n\nexport const filterExecutions = (executions: readonly TypeScriptExecution[], query: string, status: ExecutionStatus | \"all\"): TypeScriptExecution[] => {\n const search = query.trim().toLocaleLowerCase(\"en-US\");\n return executions.filter((execution) => (status === \"all\" || execution.status === status) && (!search || [\n execution.actorId, execution.actorHandle, execution.actorName, execution.code, execution.path,\n JSON.stringify(execution.result), ...execution.logs, execution.error, executionStatusLabel(execution.status),\n ].join(\"\\n\").toLocaleLowerCase(\"en-US\").includes(search)));\n};\n\nexport const executionDuration = (execution: Pick<TypeScriptExecution, \"startedAt\" | \"finishedAt\">, now: number): string => {\n const milliseconds = Math.max(0, (execution.finishedAt ? Date.parse(execution.finishedAt) : now) - Date.parse(execution.startedAt));\n if (!Number.isFinite(milliseconds)) return \"Duration unknown\";\n if (milliseconds < 1_000) return `${milliseconds} ms`;\n const seconds = Math.floor(milliseconds / 1_000);\n return seconds < 60 ? `${seconds} s` : `${Math.floor(seconds / 60)} min ${seconds % 60} s`;\n};\n", "import { useEffect, useMemo, useState } from \"react\";\nimport type { JournalEvent } from \"@ragents/engine/src/domain/events\";\nimport type { WorkspaceTabContext } from \"@ragents/web/PluginRegistry\";\nimport { SourceCode } from \"@ragents/web/SourceCode\";\nimport { Alert, AlertDescription, Badge, Button, Input, Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from \"@ragents/web/ui\";\nimport { runContracts } from \"@ragents/engine/src/http/contracts\";\nimport { rpc } from \"@ragents/web/rpc\";\nimport { executionDuration, executionEventsFrom, executionStatusLabel, filterExecutions, projectExecutions, type ExecutionStatus, type TypeScriptExecution } from \"./executions\";\nimport { runViewFrom, type RunView } from \"@ragents/web/run-view\";\n\nexport const EXECUTIONS_TAB_ID = \"ragents.orchestration.executions\";\n\nexport function ExecutionsPanel({ active, session }: WorkspaceTabContext) {\n const view = runViewFrom(session.runView);\n const runId = session.session.id;\n return <RunExecutionsPanel active={active} key={runId} runId={runId} view={view?.id === runId ? view : undefined} />;\n}\n\nfunction RunExecutionsPanel({ active, runId, view }: { active: boolean; runId: string; view: RunView | undefined }) {\n const [journal, setJournal] = useState<{ events: readonly JournalEvent[]; loaded: boolean; loading: boolean; error: string | null }>({ events: [], loaded: false, loading: false, error: null });\n const [query, setQuery] = useState(\"\");\n const [status, setStatus] = useState<ExecutionStatus | \"all\">(\"all\");\n const statusOptions = [{ value: \"all\", label: \"All statuses\" }, ...([\"running\", \"completed\", \"failed\", \"interrupted\"] as const).map((value) => ({ value, label: executionStatusLabel(value) }))];\n const [now, setNow] = useState(Date.now);\n const [reload, setReload] = useState(0);\n const revision = view?.revision;\n\n useEffect(() => {\n if (!active) return;\n const controller = new AbortController();\n setJournal((previous) => ({ ...previous, loading: true, error: null }));\n void rpc.call(runContracts.events, { runId }, { signal: controller.signal })\n .then((result) => {\n const events = executionEventsFrom(result, runId);\n if (!controller.signal.aborted) setJournal({ events, loaded: true, loading: false, error: null });\n })\n .catch((error: unknown) => {\n if (!controller.signal.aborted) setJournal((previous) => ({ ...previous, loading: false, error: error instanceof Error ? error.message : String(error) }));\n });\n return () => controller.abort();\n }, [active, runId, revision, reload]);\n\n const executions = useMemo(() => projectExecutions(journal.events, view), [journal.events, view]);\n const filtered = useMemo(() => filterExecutions(executions, query, status), [executions, query, status]);\n const running = executions.some((execution) => execution.status === \"running\");\n useEffect(() => {\n if (!active || !running) return;\n setNow(Date.now());\n const timer = window.setInterval(() => setNow(Date.now()), 1_000);\n return () => window.clearInterval(timer);\n }, [active, running]);\n\n return <section aria-label=\"TypeScript executions\" className=\"flex h-full min-h-0 min-w-0 flex-col bg-background text-[0.78rem] text-foreground\">\n <header className=\"px-3.5 pt-3.5 pb-2.5\"><h2 className=\"mb-1.5 text-[0.92rem]\">Executions</h2><p className=\"leading-[1.5] text-muted-foreground\">TypeScript snippets of all actors in this run.</p></header>\n <div className=\"grid grid-cols-[minmax(0,1fr)_auto] gap-2 border-b border-border-soft px-3.5 pb-3\">\n <Input className=\"col-span-full\" aria-label=\"Search executions\" onChange={(event) => setQuery(event.target.value)} placeholder=\"Search actor, code or result\" type=\"search\" value={query} />\n <Select items={statusOptions} value={status} onValueChange={(value) => { if (value !== null) setStatus(value as ExecutionStatus | \"all\"); }}>\n <SelectTrigger className=\"min-w-0\" aria-label=\"Execution status\"><SelectValue /></SelectTrigger>\n <SelectContent>{statusOptions.map((option) => <SelectItem key={option.value} value={option.value}>{option.label}</SelectItem>)}</SelectContent>\n </Select>\n <span className=\"self-center text-right text-[0.68rem] text-muted-foreground\" role=\"status\">{journal.loading ? (journal.loaded ? \"Refreshing ...\" : \"Loading ...\") : journal.loaded ? `${filtered.length} of ${executions.length} executions` : \"Not loaded yet\"}</span>\n </div>\n {journal.error && <Alert className=\"mx-3.5 my-2 w-auto\" variant=\"destructive\"><AlertDescription className=\"whitespace-pre-wrap text-destructive [overflow-wrap:anywhere]\">{journal.error}{journal.loaded ? \" The last loaded state stays visible.\" : \"\"}</AlertDescription><Button disabled={!active || journal.loading} onClick={() => setReload((value) => value + 1)} size=\"sm\" variant=\"ghost\">Reload</Button></Alert>}\n <div aria-label=\"Executions, newest first\" className=\"min-h-0 flex-1 overflow-auto overscroll-contain px-3 pb-3\">\n {journal.loaded && !journal.loading && filtered.length === 0 && <p className=\"mx-0.5 my-4.5 leading-[1.6] text-muted-foreground\">{executions.length === 0 ? \"No TypeScript snippet has been executed in this run yet.\" : \"No executions match this search.\"}</p>}\n {filtered.map((execution) => <ExecutionEntry execution={execution} key={execution.key} now={now} />)}\n </div>\n </section>;\n}\n\nconst statusBadgeClass: Readonly<Record<string, string>> = {\n running: \"bg-background text-info\",\n completed: \"bg-success-soft text-success\",\n failed: \"bg-destructive-soft text-destructive\",\n interrupted: \"bg-warning-soft text-warning\",\n};\n\nconst summaryClass = \"relative grid cursor-pointer list-none grid-cols-[minmax(0,1fr)_auto] gap-x-2 gap-y-[7px] pt-3 pr-2.5 pb-2.5 pl-[25px] focus-visible:outline-2 focus-visible:outline-primary focus-visible:-outline-offset-2 [&::-webkit-details-marker]:hidden before:absolute before:top-[15px] before:left-2.5 before:size-[5px] before:rotate-[-45deg] before:border-r-[1.5px] before:border-b-[1.5px] before:border-solid before:border-current before:content-['']\";\n\nconst contentClass = \"min-w-0 border-t border-border-soft px-2.5 pb-2.5 [&>h3]:mt-3 [&>h3]:mb-1.5 [&>h3]:text-[0.72rem] [&>h3]:font-[650]\";\n\nconst sourceClass = \"m-0 max-h-[28rem] overflow-auto text-[0.68rem]\";\n\nconst logClass = \"m-0 max-h-[24rem] overflow-auto rounded-sm bg-background p-2 font-mono text-[0.68rem] leading-[1.5] whitespace-pre-wrap [overflow-wrap:anywhere]\";\n\nfunction ExecutionEntry({ execution, now }: { execution: TypeScriptExecution; now: number }) {\n const [expanded, setExpanded] = useState(false);\n const preview = execution.code?.trim().split(\"\\n\").find((line) => line.trim()) ?? execution.path ?? \"TypeScript snippet\";\n return <details className=\"mt-2.5 overflow-hidden rounded-sm border border-border-soft bg-card open:[&>summary]:before:rotate-45\" onToggle={(event) => setExpanded(event.currentTarget.open)}>\n <summary className={summaryClass}>\n <span className=\"truncate font-[650]\" title={`${execution.actorName} (${execution.actorId})`}>@{execution.actorHandle}</span>\n <Badge className={`h-auto rounded-[5px] px-[5px] py-0.5 text-[0.64rem] ${statusBadgeClass[execution.status] ?? \"bg-secondary text-muted-foreground\"}`}>{executionStatusLabel(execution.status)}</Badge>\n <span className=\"col-span-full truncate font-mono text-[0.68rem]\" title={preview}>{preview}</span>\n <span className=\"col-span-full flex flex-wrap justify-between gap-x-3 gap-y-1.5 text-[0.65rem] tabular-nums text-muted-foreground\"><time dateTime={execution.startedAt} title={new Date(execution.startedAt).toLocaleString()}>{new Date(execution.startedAt).toLocaleString(undefined, { day: \"2-digit\", month: \"2-digit\", hour: \"2-digit\", minute: \"2-digit\", second: \"2-digit\" })}</time><span>{executionDuration(execution, now)}</span></span>\n </summary>\n {expanded && <div className={contentClass}>\n {execution.path && <p className=\"mt-2.5 grid gap-1 text-[0.68rem] text-muted-foreground\"><span>Path</span><code className=\"[overflow-wrap:anywhere]\">{execution.path}</code></p>}\n <h3>Code</h3>\n {execution.code !== null ? <SourceCode className={sourceClass} content={execution.code} language=\"typescript\" path={execution.path ?? \"snippet.ts\"} /> : <p className=\"text-[0.72rem] leading-[1.5] text-muted-foreground\">{execution.path ? \"No historical code is stored for this path call.\" : \"No historical code is stored for this call.\"}</p>}\n {execution.logs.length > 0 && <><h3>Logs</h3><pre className={logClass}>{execution.logs.join(\"\\n\")}</pre></>}\n {execution.result !== undefined && <><h3>Result</h3><SourceCode className={sourceClass} content={JSON.stringify(execution.result, null, 2)} language=\"json\" path=\"result.json\" /></>}\n {execution.error && <><h3>{execution.status === \"interrupted\" ? \"Interruption\" : \"Error\"}</h3><pre className={`${logClass} text-destructive`}>{execution.error}</pre></>}\n </div>}\n </details>;\n}\n\nexport function IconExecutions() {\n return <svg aria-hidden fill=\"none\" height=\"15\" stroke=\"currentColor\" strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth=\"1.7\" viewBox=\"0 0 24 24\" width=\"15\"><path d=\"m7 7-4 5 4 5m10-10 4 5-4 5M14 4l-4 16\" /></svg>;\n}\n", "import { useEffect, useState } from \"react\";\nimport { OrchestrationCenter } from \"./Center\";\nimport { OrchestrationRunPanel } from \"./run-panel/RunPanel\";\nimport { DocumentsSection } from \"./DocumentsSection\";\nimport { RunPanelSettings } from \"./run-panel/RunPanelSettings\";\nimport { ActorShortcuts } from \"./ActorSurfaceControls\";\nimport { JournalStatus } from \"./JournalStatus\";\nimport { StopRunHeader } from \"./StopRunButton\";\nimport { EXECUTIONS_TAB_ID, ExecutionsPanel, IconExecutions } from \"./ExecutionsPanel\";\nimport { ORCHESTRATION_PLUGIN_ID } from \"./constants\";\nimport { runViewFrom } from \"@ragents/web/run-view\";\nimport {\n SurfaceControllerProvider,\n type EntityReference,\n type SessionProviderProps,\n type WebPlugin,\n} from \"@ragents/web/PluginRegistry\";\n\nexport { ORCHESTRATION_PLUGIN_ID } from \"./constants\";\n\n/** The selection on the surface: an artifact opens the documents, every other entity becomes the selected tile and the reported location. */\nfunction OrchestrationSessionProvider({ children, navigation, session }: SessionProviderProps) {\n const runView = runViewFrom(session.runView);\n const [selection, setSelection] = useState<EntityReference>();\n\n useEffect(() => {\n if (runView) return;\n setSelection(undefined);\n }, [runView]);\n\n const acceptSelection = (next: EntityReference | undefined) => {\n if (next?.type === \"artifact\" && navigation.revealEntity(next)) return;\n setSelection(next);\n };\n\n return (\n <SurfaceControllerProvider value={{ acceptSelection, selection }}>\n {children}\n </SurfaceControllerProvider>\n );\n}\n\nexport const webPlugin: WebPlugin = {\n id: ORCHESTRATION_PLUGIN_ID,\n needsRunView: true,\n sessionStatus: [{ id: \"ragents.orchestration.journal\", readRight: \"runs.inspect\", order: 20, Status: JournalStatus }],\n sessionHeaders: [\n { id: \"ragents.orchestration.stop\", readRight: \"runs.write\", order: 100, Header: StopRunHeader },\n { id: \"ragents.orchestration.actors\", order: 300, placement: \"surface\", Header: ActorShortcuts },\n ],\n settings: [\n { id: \"ragents.orchestration.runPanel\", category: \"appearance\", label: \"Run panel\", Settings: RunPanelSettings },\n ],\n surface: { Center: OrchestrationCenter, RunPanel: OrchestrationRunPanel },\n cardSections: [{\n id: \"ragents.orchestration.documents\",\n order: 300,\n Section: DocumentsSection,\n }],\n SessionProvider: OrchestrationSessionProvider,\n workspaceTabs: [{\n id: EXECUTIONS_TAB_ID,\n readRight: \"runs.inspect\",\n label: \"Executions\",\n order: 110,\n Icon: IconExecutions,\n Panel: ExecutionsPanel,\n keepMounted: true,\n available: (session) => runViewFrom(session.runView) !== undefined,\n }],\n};\n"],
|
|
5
|
-
"mappings": "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",
|
|
6
|
-
"names": ["AccessContext_useAccess_default", "read", "react_dom_createPortal_default", "read", "contracts_handleKey_default", "read", "contracts_runContracts_default", "read", "ORCHESTRATION_PLUGIN_ID", "isRecord", "value", "surfaceEntityOf", "text", "trimmed", "handle", "contracts_handleKey_default", "match", "id", "surfaceEntityKey", "entity", "LEGACY_KEYS", "surfaceLayoutOf", "legacy", "key", "surfaceTileNodeOf", "MAX_SURFACE_TILE_DEPTH", "MAX_SURFACE_TILES", "surfaceTileNodeOf", "input", "entities", "parse", "value", "where", "depth", "node", "key", "entity", "surfaceEntityOf", "surfaceEntityKey", "weight", "surfaceTileChatInput", "root", "surfaceTileEntities", "ui_Alert_default", "read", "ui_AlertDescription_default", "read", "ui_Badge_default", "read", "ui_Button_default", "read", "ui_Empty_default", "read", "ui_EmptyDescription_default", "read", "ui_EmptyHeader_default", "read", "ui_EmptyTitle_default", "read", "ui_Input_default", "read", "ui_Popover_default", "read", "ui_PopoverContent_default", "read", "ui_SectionLabel_default", "read", "ui_Select_default", "read", "ui_SelectContent_default", "read", "ui_SelectItem_default", "read", "ui_SelectTrigger_default", "read", "ui_SelectValue_default", "read", "ui_Spinner_default", "read", "ui_StartupNotice_default", "read", "ui_StopGlyph_default", "read", "ui_Tabs_default", "read", "ui_TabsContent_default", "read", "ui_TabsList_default", "read", "ui_TabsTrigger_default", "read", "ui_cn_default", "read", "quassel_ChatInputToolbar_default", "read", "quassel_ChatMessages_default", "read", "quassel_ChatPanel_default", "read", "PluginRegistry_SurfaceControllerProvider_default", "read", "PluginRegistry_useActionRenderer_default", "read", "PluginRegistry_useSurfaceController_default", "read", "PluginRegistry_useToolRenderer_default", "read", "chat_view_settings_ChatViewSwitches_default", "read", "chat_view_settings_useChatViewSettings_default", "read", "actor_conversation_actorChatMessages_default", "read", "actor_conversation_actorInputLabel_default", "read", "jsx_runtime_Fragment_default", "read", "jsx_runtime_jsx_default", "read", "jsx_runtime_jsxs_default", "read", "emptyMessages", "ActorChat", "actor", "view", "presentation", "display", "primaryMessages", "conversation", "historyError", "running", "className", "onNavigate", "scrollerRef", "inspect", "AccessContext_useAccess_default", "chatView", "chat_view_settings_useChatViewSettings_default", "renderTool", "PluginRegistry_useToolRenderer_default", "renderAction", "PluginRegistry_useActionRenderer_default", "configuredMode", "detailMode", "messages", "react_useMemo_default", "actor_conversation_actorChatMessages_default", "openLink", "react_useCallback_default", "href", "match", "jsx_runtime_jsxs_default", "jsx_runtime_Fragment_default", "jsx_runtime_jsx_default", "quassel_ChatMessages_default", "ui_Empty_default", "ui_EmptyHeader_default", "ui_EmptyTitle_default", "ui_EmptyDescription_default", "api_interruptActorTurn_default", "read", "api_sendActorMessage_default", "read", "StoppedActorNotice_StoppedActorNotice_default", "read", "useAttachmentCapabilities_useAttachmentCapabilities_default", "read", "chat_target_programChatNotice_default", "read", "chat_target_runIsWorking_default", "read", "controlsClass", "noteClass", "ActorChatControls", "actor", "view", "composerVisible", "presentation", "display", "running", "toolbarLeft", "toolbarRight", "writable", "AccessContext_useAccess_default", "stopError", "setStopError", "react_useState_default", "chatView", "chat_view_settings_useChatViewSettings_default", "attachments", "useAttachmentCapabilities_useAttachmentCapabilities_default", "disabledReason", "switches", "jsx_runtime_jsx_default", "chat_view_settings_ChatViewSwitches_default", "jsx_runtime_jsxs_default", "chat_target_programChatNotice_default", "StoppedActorNotice_StoppedActorNotice_default", "jsx_runtime_Fragment_default", "quassel_ChatInputToolbar_default", "text", "files", "api_sendActorMessage_default", "api_interruptActorTurn_default", "error", "ActorChatPreview", "react_memo_default", "actor", "view", "primaryMessages", "conversation", "historyError", "chatInput", "running", "onNavigate", "focusableScroller", "react_useCallback_default", "element", "jsx_runtime_jsx_default", "quassel_ChatPanel_default", "ActorChatControls", "ActorChat", "ORCHESTRATION_PLUGIN_ID", "statusControlClass", "cardSectionsClass", "ActorTile", "actor", "view", "cardSections", "chatInput", "session", "navigation", "onSelect", "jsx_runtime_jsxs_default", "jsx_runtime_jsx_default", "ActorChatPreview", "cardSectionsClass", "id", "Section", "toKebabCase", "string", "toLucideIconData", "iconName", "iconNode", "aliases", "toKebabCase", "toCamelCase", "string", "out", "upperNext", "ch", "toPascalCase", "string", "camelCase", "toCamelCase", "mergeClasses", "classes", "className", "index", "array", "defaultAttributes", "isDefined", "value", "buildLucideIconNode", "icon", "params", "attributeNames", "getAttributeName", "attributeName", "viewBoxWidth", "defaultAttributes", "viewBoxHeight", "aliasClassNames", "alias", "iconClassNames", "classNamesFromClassName", "className", "mergeClasses", "calculatedStrokeWidth", "attrs", "attrName", "child", "name", "children", "nextAttrs", "buildLucideIconForReact", "icon", "params", "buildLucideIconNode", "hasA11yProp", "props", "prop", "LucideContext", "react_createContext_default", "useLucideContext", "react_useContext_default", "LucideContext", "Icon", "react_forwardRef_default", "color", "size", "width", "height", "strokeWidth", "absoluteStrokeWidth", "nonScalingStroke", "className", "children", "iconNode", "icon", "rest", "ref", "contextSize", "contextStrokeWidth", "contextAbsoluteStrokeWidth", "contextNonScalingStroke", "contextColor", "contextClass", "useLucideContext", "hasAccessibleProp", "hasA11yProp", "name", "svgAttributes", "builtIconNode", "buildLucideIconForReact", "mergeClasses", "react_createElement_default", "tag", "attrs", "createLucideIcon", "iconDataOrName", "iconNode", "aliases", "iconData", "toLucideIconData", "Component", "react_forwardRef_default", "className", "props", "ref", "react_createElement_default", "Icon", "toPascalCase", "__iconData", "ArrowDown", "createLucideIcon", "__iconData", "ArrowLeft", "createLucideIcon", "__iconData", "ArrowRight", "createLucideIcon", "__iconData", "ArrowUpRight", "createLucideIcon", "__iconData", "ArrowUp", "createLucideIcon", "__iconData", "ChevronDown", "createLucideIcon", "__iconData", "ChevronRight", "createLucideIcon", "__iconData", "CodeXml", "createLucideIcon", "__iconData", "Code", "createLucideIcon", "__iconData", "GripVertical", "createLucideIcon", "__iconData", "LayoutGrid", "createLucideIcon", "__iconData", "Maximize2", "createLucideIcon", "__iconData", "MessageSquare", "createLucideIcon", "__iconData", "PanelBottom", "createLucideIcon", "__iconData", "PanelRight", "createLucideIcon", "__iconData", "Sparkles", "createLucideIcon", "__iconData", "Users", "createLucideIcon", "__iconData", "Wrench", "createLucideIcon", "__iconData", "X", "createLucideIcon", "run_view_actorTone_default", "read", "run_view_chatPrimaryId_default", "read", "run_view_isPendingRunActorInput_default", "read", "run_view_runActorFrom_default", "read", "run_view_runArtifactContentUrl_default", "read", "run_view_runViewFrom_default", "read", "rpc_rpc_default", "read", "resolveAction", "runId", "actionId", "decision", "result", "rpc_rpc_default", "contracts_runContracts_default", "stopActor", "actorId", "reason", "restartActor", "stopRun", "format_formatBytes_default", "read", "SourceCode_SourceCode_default", "read", "labels_thinkingLabel_default", "read", "formatTime", "iso", "date", "inspectorClass", "headClass", "subtitleClass", "statusClass", "scrollClass", "sectionClass", "rowsClass", "rowClass", "rowCopyClass", "mutedClass", "errorClass", "propertiesClass", "textBlockClass", "linkClass", "pillClass", "pillToneClass", "tabClass", "STATUS_LABELS", "ACTOR_KIND_LABELS", "STOP_REASON", "shortId", "id", "turnUsageOf", "turn", "runCostUsd", "view", "costs", "cost", "sum", "formatCostUsd", "value", "indexOf", "entry", "actorLabel", "index", "actorId", "inputDeliveryLabel", "input", "actor_conversation_actorInputLabel_default", "FlowInspector", "props", "inspect", "AccessContext_useAccess_default", "react_useMemo_default", "jsx_runtime_jsx_default", "ui_Empty_default", "jsx_runtime_jsxs_default", "ui_EmptyHeader_default", "ui_EmptyTitle_default", "ui_EmptyDescription_default", "selection", "actor", "subscription", "action", "artifact", "fallbackActor", "conversationActor", "ActorView", "InputView", "TurnView", "SubscriptionView", "ActionView", "ArtifactView", "BackButton", "canGoBack", "onBack", "ui_Button_default", "ArrowLeft", "StatusPill", "status", "ui_Badge_default", "sectionIconPaths", "SectionIcon", "kind", "SectionTabs", "sections", "children", "react_useId_default", "openId", "setOpenId", "react_useState_default", "open", "section", "ui_Tabs_default", "ui_TabsList_default", "ui_TabsTrigger_default", "ui_TabsContent_default", "CapabilityList", "grants", "grant", "position", "scope", "suffix", "actionClass", "ActionCard", "runId", "onError", "writable", "response", "setResponse", "busy", "setBusy", "resolve", "decision", "answer", "resolveAction", "error", "ui_Input_default", "event", "SourceListing", "handle", "source", "SourceCode_SourceCode_default", "access", "programs", "useProgramSlot", "programSource", "setError", "inputs", "left", "right", "turns", "subscriptions", "actions", "artifacts", "pendingInputCount", "run_view_isPendingRunActorInput_default", "primary", "runCost", "active", "lifecycle", "inputsConfig", "driver", "driverLabel", "config", "labels_thinkingLabel_default", "name", "formatTime", "format_formatBytes_default", "Wrench", "stopActor", "caught", "restartActor", "ActorChat", "ActorChatControls", "DetailHeader", "eyebrow", "title", "subtitle", "EntityLink", "SelectionLink", "jsx_runtime_Fragment_default", "ArtifactRows", "usage", "ActorRows", "label", "onNavigate", "actorIds", "isTextMedia", "mediaType", "lower", "useArtifactContent", "cacheRef", "react_useRef_default", "version", "setVersion", "artifactId", "retry", "react_useEffect_default", "run_view_runArtifactContentUrl_default", "text", "DIFF_LINE_LIMIT", "lineDiff", "lengths", "row", "column", "rows", "ArtifactDiff", "previous", "before", "after", "beforeText", "afterText", "marks", "content", "carriedOn", "materialBaseClass", "materialToneClass", "materialCardClass", "tone", "className", "ui_cn_default", "materialHeadClass", "materialTitleClass", "materialIconClass", "sides", "sideNames", "sideIcons", "ArrowLeft", "ArrowRight", "ArrowUp", "ArrowDown", "materialFaceRect", "slot", "positioned", "rect", "sidePlacement", "dockTargetClass", "dividerClass", "TiledSurface", "root", "onChange", "items", "canArrange", "selectedEntity", "onSelect", "stageRef", "react_useRef_default", "size", "setSize", "react_useState_default", "available", "setAvailable", "dragEntity", "setDragEntity", "target", "setTarget", "resizing", "setResizing", "error", "setError", "selected", "setSelected", "resizePreview", "setResizePreview", "resizeFrame", "resizeRef", "visibleRoot", "entities", "react_useMemo_default", "tileEntities", "mountedEntities", "itemMap", "item", "minimum", "tileMinimum", "compact", "active", "geometry", "tileGeometry", "react_useLayoutEffect_default", "stage", "container", "measure", "width", "height", "previous", "style", "availableWidth", "availableHeight", "observer", "react_useEffect_default", "pendingFrame", "cancelActivation", "start", "event", "SURFACE_TILE_DRAG_TYPE", "entity", "end", "key", "cancelResize", "react_useCallback_default", "state", "updateResize", "coordinate", "ratio", "resizeTile", "select", "previewRoot", "dockTile", "previewMinimum", "preview", "targets", "side", "Icon", "jsx_runtime_jsx_default", "jsx_runtime_jsxs_default", "element", "next", "surfaceTileNodeOf", "cause", "X", "bounds", "materialCardClass", "materialHeadClass", "GripVertical", "materialIconClass", "LayoutGrid", "CodeXml", "Sparkles", "materialTitleClass", "removeTile", "divider", "negative", "positive", "SurfaceTiles", "root", "onChange", "surfaceElements", "cardSections", "session", "view", "navigation", "onSelect", "selected", "inspect", "AccessContext_useAccess_default", "actors", "actor", "items", "run_view_actorTone_default", "jsx_runtime_jsx_default", "ActorTile", "surfaceTileChatInput", "FlowInspector", "Element", "select", "definition", "selectedEntity", "TiledSurface", "SurfaceStartup", "state", "jsx_runtime_jsx_default", "ui_StartupNotice_default", "surfaceStartupState", "view", "startup", "connected", "running", "error", "actors", "actor", "activeActors", "action", "activeIds", "turn", "input", "run_view_isPendingRunActorInput_default", "failed", "local_storage_setting_createLocalStorageSetting_default", "read", "surfacePresentationStorageKey", "runId", "parseSurfacePresentation", "raw", "value", "key", "surfaceTileNodeOf", "setting", "local_storage_setting_createLocalStorageSetting_default", "useSurfacePresentationOverride", "saveSurfacePresentation", "surfaceProgramBasis", "program", "currentSurfaceOverride", "personal", "entities", "surfaceTileEntities", "entity", "useSurfacePresentation", "view", "state", "entry", "ORCHESTRATION_PLUGIN_ID", "stateKey", "react_useMemo_default", "programLayout", "surfaceLayoutOf", "error", "programBasis", "storedLayout", "personalLayout", "react_useEffect_default", "initialTileLayout", "direction", "middle", "nextDirection", "StatusGroup_StatusGroup_default", "read", "Toolbar_ToolbarCopy_default", "read", "Toolbar_ToolbarItem_default", "read", "Toolbar_ToolbarLabel_default", "read", "Toolbar_ToolbarText_default", "read", "DEFAULT_SURFACE_VIEW_PREFERENCES", "surfaceViewStorageKey", "runId", "parseSurfaceViewPreferences", "raw", "value", "key", "visible", "actorVisibleOnSurface", "actor", "appActorIds", "preferences", "primaryActorId", "setting", "local_storage_setting_createLocalStorageSetting_default", "useSurfaceViewPreferences", "saveSurfaceViewPreferences", "ActorPopout", "open", "id", "label", "closeLabel", "buttonRef", "onClose", "width", "height", "placement", "focusInput", "keepMounted", "role", "headerContent", "children", "panelRef", "react_useRef_default", "pressedAnchor", "details", "jsx_runtime_jsx_default", "ui_Popover_default", "next", "jsx_runtime_jsxs_default", "ui_PopoverContent_default", "ui_Button_default", "X", "shortcutIconClass", "shortcutFillClass", "ActorShortcut", "actor", "view", "session", "open", "onToggle", "onClose", "visible", "staged", "useSurfaceEntities", "technical", "AccessContext_useAccess_default", "visited", "setVisited", "react_useState_default", "buttonRef", "react_useRef_default", "panelId", "react_useId_default", "surface", "PluginRegistry_useSurfaceController_default", "close", "react_useCallback_default", "restoreFocus", "inspect", "selection", "tone", "run_view_actorTone_default", "label", "type", "jsx_runtime_jsxs_default", "Toolbar_ToolbarItem_default", "event", "SURFACE_TILE_DRAG_TYPE", "jsx_runtime_jsx_default", "ui_cn_default", "Users", "Code", "Toolbar_ToolbarCopy_default", "Toolbar_ToolbarLabel_default", "Toolbar_ToolbarText_default", "ActorPopout", "FlowInspector", "ACTOR_HEADER_MODES", "ACTOR_HEADER_MODE_LABELS", "actorHeaderStorageKey", "runId", "parseActorHeaderMode", "raw", "mode", "actorOnStage", "actor", "primaryActorId", "stage", "actorVisibleInHeader", "onStage", "setting", "local_storage_setting_createLocalStorageSetting_default", "key", "useActorHeaderMode", "saveActorHeaderMode", "nameClass", "actorType", "actor", "actorStatus", "filterSurfaceActors", "actors", "appActorIds", "query", "words", "text", "word", "ActorShortcuts", "session", "inspect", "AccessContext_useAccess_default", "openKey", "setOpenKey", "react_useState_default", "close", "react_useCallback_default", "mode", "useActorHeaderMode", "stage", "useSurfaceEntities", "view", "run_view_runViewFrom_default", "react_useMemo_default", "primaryId", "run_view_chatPrimaryId_default", "shown", "actorVisibleInHeader", "actorOnStage", "react_useEffect_default", "jsx_runtime_jsx_default", "key", "ActorShortcut", "current", "PUBLIC_ACTOR_HEADER_MODES", "ActorHeaderModeControl", "runId", "modes", "ACTOR_HEADER_MODES", "next", "label", "ACTOR_HEADER_MODE_LABELS", "Toolbar_ToolbarItem_default", "saveActorHeaderMode", "jsx_runtime_jsxs_default", "Toolbar_ToolbarCopy_default", "Toolbar_ToolbarLabel_default", "Toolbar_ToolbarText_default", "ActorSurfaceControls", "preferences", "onPreferencesChange", "open", "setOpen", "setQuery", "buttonRef", "react_useRef_default", "panelId", "react_useId_default", "runView", "filtered", "restoreFocus", "value", "Users", "ActorPopout", "ui_Input_default", "event", "ActorSurfaceList", "primaryActorId", "actorVisibleOnSurface", "OrchestrationCenter", "props", "jsx_runtime_jsx_default", "RunOrchestrationCenter", "cardSections", "surfaceElements", "navigation", "session", "statusContainer", "runToolbarContainer", "inspect", "AccessContext_useAccess_default", "surface", "PluginRegistry_useSurfaceController_default", "lastRunView", "react_useRef_default", "parsedRunView", "run_view_runViewFrom_default", "runView", "programLayout", "personalLayout", "presentation", "programBasis", "useSurfacePresentation", "presentationError", "setPresentationError", "react_useState_default", "preferences", "useSurfaceViewPreferences", "appActorIds", "react_useMemo_default", "contribution", "element", "hiddenActorIds", "actor", "actorVisibleOnSurface", "visibleApps", "visibleEntities", "fallbackRoot", "initialTileLayout", "root", "hasVisibleContent", "tileEntities", "entity", "stageEntities", "react_useEffect_default", "publishSurfaceEntities", "startupState", "surfaceStartupState", "stageRef", "showStartup", "visibleStageSize", "react_useCallback_default", "stage", "panel", "overlap", "observer", "size", "handleSelect", "selection", "changeTiles", "next", "saveSurfacePresentation", "error", "jsx_runtime_jsxs_default", "StatusGroup_StatusGroup_default", "statusControlClass", "react_dom_createPortal_default", "jsx_runtime_Fragment_default", "ActorHeaderModeControl", "ActorSurfaceControls", "saveSurfaceViewPreferences", "SurfaceGrain", "SurfaceTiles", "SurfaceStartup", "host_useCenterElements_default", "read", "host_useRunPanelHost_default", "read", "runPanelActors", "view", "inspect", "candidates", "actor", "primaryId", "run_view_chatPrimaryId_default", "partitionRunPanelActors", "actors", "filter", "shown", "hidden", "actorVisibleInHeader", "pendingInputCount", "actorId", "input", "pendingActionCount", "askedBy", "action", "elementNeedsAttention", "definition", "confirmationPending", "ADDRESSEE_GROUP_MIN", "ADDRESSEE_SEARCH_ABOVE", "SUMMARY_LENGTH", "STATUS_WORDS", "STATUS_ORDER", "lower", "text", "shortened", "line", "entry", "cut", "space", "addresseeStatus", "view", "actor", "action", "addresseeStatusWord", "status", "count", "addresseeStatusCounts", "actors", "counts", "addresseeSummaries", "firstInputs", "input", "known", "described", "first", "name", "addresseeParentId", "byId", "included", "visited", "current", "creator", "handleStem", "handle", "groupLabel", "handles", "length", "common", "index", "prefix", "addresseeTree", "primaryId", "run_view_chatPrimaryId_default", "siblings", "parent", "branch", "level", "parentId", "entries", "ordered", "keyOf", "members", "key", "emitted", "group", "member", "addresseeMatches", "query", "summary", "words", "kept", "word", "addresseeNodeContains", "node", "actorId", "child", "entryClass", "branchClass", "iconClass", "statusClass", "actorType", "actor", "technical", "ActorIcon", "className", "view", "tone", "run_view_actorTone_default", "jsx_runtime_jsx_default", "ui_cn_default", "ui_Spinner_default", "Sparkles", "Users", "Code", "AddresseeTree", "nodes", "props", "node", "ActorBranch", "GroupBranch", "jsx_runtime_jsxs_default", "ActorEntry", "onPick", "selectedId", "summary", "pending", "pendingInputCount", "status", "addresseeStatus", "description", "name", "showName", "current", "addresseeStatusWord", "ui_Badge_default", "onToggle", "openByDefault", "toggled", "actors", "member", "open", "addresseeNodeContains", "counts", "addresseeStatusCounts", "running", "sum", "ChevronRight", "chipClass", "busyClass", "AddresseeControl", "hidden", "onOpenChange", "onReveal", "onSelect", "runId", "selected", "shown", "technical", "view", "open", "setOpen", "react_useState_default", "query", "setQuery", "hiddenListed", "setHiddenListed", "toggled", "setToggled", "buttonRef", "react_useRef_default", "panelId", "react_useId_default", "change", "react_useCallback_default", "next", "close", "restoreFocus", "revealSelected", "element", "working", "react_useMemo_default", "actor", "summary", "addresseeSummaries", "searching", "shownTree", "addresseeTree", "addresseeMatches", "hiddenMatches", "hiddenTree", "hiddenOpen", "toggle", "key", "current", "pick", "reveal", "busyTitle", "busyPending", "pendingInputCount", "treeProps", "listClass", "jsx_runtime_jsxs_default", "jsx_runtime_Fragment_default", "jsx_runtime_jsx_default", "ActorIcon", "ChevronDown", "ui_Spinner_default", "ui_Badge_default", "ActorPopout", "ADDRESSEE_SEARCH_ABOVE", "ui_Input_default", "event", "AddresseeTree", "ui_cn_default", "ActorHeaderModeControl", "DEFAULT_RUN_PANEL_SETTINGS", "RUN_PANEL_SETTINGS_STORAGE_KEY", "RUN_PANEL_SETTINGS_LIMITS", "inRange", "value", "range", "parseRunPanelSettings", "raw", "key", "setting", "local_storage_setting_createLocalStorageSetting_default", "useRunPanelSettings", "saveRunPanelSettings", "STARTUP_SETTLE_MS", "chatShowsContent", "messages", "message", "useRunPanelStartup", "state", "connected", "content", "contentSeen", "setContentSeen", "react_useState_default", "held", "setHeld", "working", "title", "detail", "react_useEffect_default", "timer", "CHAT_MIN_WIDTH", "CHAT_DEFAULT_WIDTH", "STAGE_MIN_WIDTH", "DEFAULT_RUN_PANEL_STATE", "runPanelStorageKey", "runId", "isTextOrNull", "value", "chatModeOf", "parseRunPanelState", "raw", "key", "stored", "chatLayoutFor", "chat", "hasElement", "narrow", "clampChatWidth", "width", "available", "setting", "local_storage_setting_createLocalStorageSetting_default", "useRunPanelState", "saveRunPanelState", "state", "firstLine", "text", "limit", "line", "entry", "senderOf", "message", "handle", "sheetStatus", "messages", "working", "last", "waiting", "spoken", "SHEET_BLUR_DELAY", "chipRowClass", "chipClass", "chatLayoutClass", "chatSurfaceClass", "chatModeButtonClass", "chatModes", "MessageSquare", "PanelBottom", "PanelRight", "OrchestrationRunPanel", "props", "jsx_runtime_jsx_default", "RunPanel", "surfaceElements", "cardSections", "navigation", "renderChat", "session", "toolbarContainer", "runId", "inspect", "AccessContext_useAccess_default", "host", "host_useRunPanelHost_default", "view", "run_view_runViewFrom_default", "stored", "useRunPanelState", "centered", "host_useCenterElements_default", "rootRef", "react_useRef_default", "sheetRef", "grabRef", "statusRef", "chatWidth", "setChatWidth", "react_useState_default", "width", "setWidth", "addresseeOpen", "setAddresseeOpen", "settings", "useRunPanelSettings", "react_useEffect_default", "root", "observer", "entry", "save", "react_useCallback_default", "patch", "saveRunPanelState", "elements", "react_useMemo_default", "Element", "select", "definition", "selectedElement", "startup", "useRunPanelStartup", "surfaceStartupState", "chatShowsContent", "notice", "RunPanelStartup", "actors", "runPanelActors", "mode", "useActorHeaderMode", "preferences", "useSurfaceViewPreferences", "appActorIds", "primaryId", "run_view_chatPrimaryId_default", "selectedActor", "actor", "shown", "hidden", "partitionRunPanelActors", "actorVisibleOnSurface", "availableWidth", "selectActor", "revealActor", "saveSurfaceViewPreferences", "navigate", "selection", "primarySelected", "narrow", "layout", "chatLayoutFor", "sheet", "useSheet", "geometry", "useSheetPeek", "expandedHeight", "resize", "useSheetResize", "height", "scrollerRef", "scroller", "toBottom", "timer", "status", "messages", "working", "chat_target_runIsWorking_default", "sheetStatus", "addressee", "AddresseeControl", "chatModeSwitch", "react_dom_createPortal_default", "ChatModeSwitch", "chat", "element", "ActorRunPanelChat", "jsx_runtime_jsxs_default", "ElementChip", "ui_cn_default", "RunPanelStage", "Sash", "next", "clampChatWidth", "event", "ui_Spinner_default", "onChange", "selected", "sideWidth", "Icon", "label", "title", "blocked", "ui_Button_default", "active", "openDelay", "expanded", "setExpanded", "held", "setHeld", "guard", "resizing", "cancel", "open", "openLater", "closeLater", "delay", "close", "toggle", "pauseResize", "finishResize", "previous", "onKeyDown", "actorId", "setGeometry", "react_useLayoutEffect_default", "grab", "composer", "container", "measure", "style", "scale", "minimum", "available", "maximum", "onCommit", "setHeight", "drag", "suppressClick", "finish", "commit", "grip", "clamp", "value", "suppressed", "startHeight", "current", "distance", "onSelect", "programs", "useProgramSlot", "attention", "elementNeedsAttention", "LayoutGrid", "ArrowUpRight", "peek", "Maximize2", "step", "onNavigate", "toolbarLeft", "running", "cardSectionsClass", "id", "Section", "quassel_ChatPanel_default", "ActorChatControls", "ActorChat", "state", "ui_StartupNotice_default", "openDocument", "navigation", "artifact", "DocumentsSection", "actor", "session", "view", "run_view_runViewFrom_default", "actorId", "run_view_runActorFrom_default", "documents", "jsx_runtime_jsxs_default", "ui_SectionLabel_default", "jsx_runtime_jsx_default", "format_formatBytes_default", "toDraft", "value", "fields", "RunPanelSettings", "access", "AccessContext_useAccess_default", "stored", "useRunPanelSettings", "draft", "setDraft", "react_useState_default", "message", "setMessage", "error", "setError", "react_useEffect_default", "writable", "save", "next", "saveRunPanelSettings", "cause", "jsx_runtime_jsxs_default", "event", "jsx_runtime_jsx_default", "key", "label", "unit", "ui_Input_default", "RUN_PANEL_SETTINGS_LIMITS", "ui_Button_default", "DEFAULT_RUN_PANEL_SETTINGS", "JournalStatus", "session", "open", "setOpen", "react_useState_default", "events", "setEvents", "error", "setError", "loading", "setLoading", "reload", "setReload", "query", "setQuery", "limit", "setLimit", "buttonRef", "react_useRef_default", "searchRef", "panelId", "react_useId_default", "view", "run_view_runViewFrom_default", "revision", "close", "react_useCallback_default", "restoreFocus", "react_useEffect_default", "controller", "rpc_rpc_default", "contracts_runContracts_default", "result", "cause", "filtered", "react_useMemo_default", "search", "handles", "actor", "event", "actors", "jsx_runtime_jsxs_default", "jsx_runtime_jsx_default", "statusControlClass", "value", "ui_Popover_default", "next", "ui_PopoverContent_default", "ui_Button_default", "X", "ui_Input_default", "JournalEntry", "expanded", "setExpanded", "toggle", "SourceCode_SourceCode_default", "STOP_RUN_REASON", "StopRunHeader", "session", "jsx_runtime_jsx_default", "Toolbar_ToolbarItem_default", "StopRunButton", "runId", "writable", "AccessContext_useAccess_default", "armed", "setArmed", "react_useState_default", "busy", "setBusy", "error", "setError", "stop", "stopRun", "caught", "jsx_runtime_jsxs_default", "ui_Button_default", "ui_StopGlyph_default", "record", "value", "executionKey", "actorId", "turnId", "toolCallId", "executionEventsFrom", "runId", "entry", "payload", "projectExecutions", "events", "view", "executions", "actors", "actor", "ends", "event", "left", "right", "key", "input", "execution", "output", "envelope", "line", "turns", "turn", "turnKey", "call", "ended", "executionStatusLabel", "status", "filterExecutions", "query", "search", "executionDuration", "now", "milliseconds", "seconds", "EXECUTIONS_TAB_ID", "ExecutionsPanel", "active", "session", "view", "run_view_runViewFrom_default", "runId", "jsx_runtime_jsx_default", "RunExecutionsPanel", "journal", "setJournal", "react_useState_default", "query", "setQuery", "status", "setStatus", "statusOptions", "value", "executionStatusLabel", "now", "setNow", "reload", "setReload", "revision", "react_useEffect_default", "controller", "previous", "rpc_rpc_default", "contracts_runContracts_default", "result", "events", "executionEventsFrom", "error", "executions", "react_useMemo_default", "projectExecutions", "filtered", "filterExecutions", "running", "execution", "timer", "jsx_runtime_jsxs_default", "ui_Input_default", "event", "ui_Select_default", "ui_SelectTrigger_default", "ui_SelectValue_default", "ui_SelectContent_default", "option", "ui_SelectItem_default", "ui_Alert_default", "ui_AlertDescription_default", "ui_Button_default", "ExecutionEntry", "statusBadgeClass", "summaryClass", "contentClass", "sourceClass", "logClass", "expanded", "setExpanded", "preview", "line", "ui_Badge_default", "executionDuration", "SourceCode_SourceCode_default", "jsx_runtime_Fragment_default", "IconExecutions", "OrchestrationSessionProvider", "children", "navigation", "session", "runView", "run_view_runViewFrom_default", "selection", "setSelection", "react_useState_default", "react_useEffect_default", "jsx_runtime_jsx_default", "PluginRegistry_SurfaceControllerProvider_default", "next", "webPlugin", "ORCHESTRATION_PLUGIN_ID", "JournalStatus", "StopRunHeader", "ActorShortcuts", "RunPanelSettings", "OrchestrationCenter", "OrchestrationRunPanel", "DocumentsSection", "EXECUTIONS_TAB_ID", "IconExecutions", "ExecutionsPanel"]
|
|
3
|
+
"sources": ["../../../node_modules/.pnpm/lucide-react@1.46.0_react@19.2.8/node_modules/shared/src/utils/toKebabCase.ts", "../../../node_modules/.pnpm/lucide-react@1.46.0_react@19.2.8/node_modules/shared/src/utils/toLucideIconData.ts", "../../../node_modules/.pnpm/lucide-react@1.46.0_react@19.2.8/node_modules/shared/src/utils/toCamelCase.ts", "../../../node_modules/.pnpm/lucide-react@1.46.0_react@19.2.8/node_modules/shared/src/utils/toPascalCase.ts", "../../../node_modules/.pnpm/lucide-react@1.46.0_react@19.2.8/node_modules/shared/src/utils/mergeClasses.ts", "../../../node_modules/.pnpm/lucide-react@1.46.0_react@19.2.8/node_modules/shared/src/build/defaultAttributes.ts", "../../../node_modules/.pnpm/lucide-react@1.46.0_react@19.2.8/node_modules/shared/src/build/buildLucideIconNode.ts", "../../../node_modules/.pnpm/lucide-react@1.46.0_react@19.2.8/node_modules/shared/src/build/buildLucideIconForReact.ts", "../../../node_modules/.pnpm/lucide-react@1.46.0_react@19.2.8/node_modules/shared/src/utils/hasA11yProp.ts", "../../../node_modules/.pnpm/lucide-react@1.46.0_react@19.2.8/node_modules/lucide-react/src/context.ts", "../../../node_modules/.pnpm/lucide-react@1.46.0_react@19.2.8/node_modules/lucide-react/src/Icon.ts", "../../../node_modules/.pnpm/lucide-react@1.46.0_react@19.2.8/node_modules/lucide-react/src/createLucideIcon.ts", "../../../node_modules/.pnpm/lucide-react@1.46.0_react@19.2.8/node_modules/lucide-react/src/icons/arrow-left.ts", "../../../node_modules/.pnpm/lucide-react@1.46.0_react@19.2.8/node_modules/lucide-react/src/icons/arrow-up-right.ts", "../../../node_modules/.pnpm/lucide-react@1.46.0_react@19.2.8/node_modules/lucide-react/src/icons/chevron-down.ts", "../../../node_modules/.pnpm/lucide-react@1.46.0_react@19.2.8/node_modules/lucide-react/src/icons/chevron-right.ts", "../../../node_modules/.pnpm/lucide-react@1.46.0_react@19.2.8/node_modules/lucide-react/src/icons/code.ts", "../../../node_modules/.pnpm/lucide-react@1.46.0_react@19.2.8/node_modules/lucide-react/src/icons/layout-grid.ts", "../../../node_modules/.pnpm/lucide-react@1.46.0_react@19.2.8/node_modules/lucide-react/src/icons/search.ts", "../../../node_modules/.pnpm/lucide-react@1.46.0_react@19.2.8/node_modules/lucide-react/src/icons/sparkles.ts", "../../../node_modules/.pnpm/lucide-react@1.46.0_react@19.2.8/node_modules/lucide-react/src/icons/users.ts", "../../../node_modules/.pnpm/lucide-react@1.46.0_react@19.2.8/node_modules/lucide-react/src/icons/wrench.ts", "../../../node_modules/.pnpm/lucide-react@1.46.0_react@19.2.8/node_modules/lucide-react/src/icons/x.ts", "ragents-host-value:@ragents/web/ui#Alert", "ragents-host-value:@ragents/web/ui#AlertDescription", "ragents-host-value:@ragents/web/ui#Badge", "ragents-host-value:@ragents/web/ui#Button", "ragents-host-value:@ragents/web/ui#Empty", "ragents-host-value:@ragents/web/ui#EmptyDescription", "ragents-host-value:@ragents/web/ui#EmptyHeader", "ragents-host-value:@ragents/web/ui#EmptyTitle", "ragents-host-value:@ragents/web/ui#Input", "ragents-host-value:@ragents/web/ui#Popover", "ragents-host-value:@ragents/web/ui#PopoverContent", "ragents-host-value:@ragents/web/ui#SectionLabel", "ragents-host-value:@ragents/web/ui#Select", "ragents-host-value:@ragents/web/ui#SelectContent", "ragents-host-value:@ragents/web/ui#SelectItem", "ragents-host-value:@ragents/web/ui#SelectTrigger", "ragents-host-value:@ragents/web/ui#SelectValue", "ragents-host-value:@ragents/web/ui#Spinner", "ragents-host-value:@ragents/web/ui#StartupNotice", "ragents-host-value:@ragents/web/ui#StopGlyph", "ragents-host-value:@ragents/web/ui#Tabs", "ragents-host-value:@ragents/web/ui#TabsContent", "ragents-host-value:@ragents/web/ui#TabsList", "ragents-host-value:@ragents/web/ui#TabsTrigger", "ragents-host-value:@ragents/web/ui#cn", "ragents-host-value:@ragents/web/run-view#actorTone", "ragents-host-value:@ragents/web/run-view#chatPrimaryId", "ragents-host-value:@ragents/web/run-view#isPendingRunActorInput", "ragents-host-value:@ragents/web/run-view#runActorFrom", "ragents-host-value:@ragents/web/run-view#runArtifactContentUrl", "ragents-host-value:@ragents/web/run-view#runViewFrom", "ragents-host-value:@ragents/web/AccessContext#useAccess", "ragents-host-value:quassel#ChatInputToolbar", "ragents-host-value:quassel#ChatMessages", "ragents-host-value:quassel#ChatPanel", "ragents-host-value:@ragents/web/PluginRegistry#SurfaceControllerProvider", "ragents-host-value:@ragents/web/PluginRegistry#useActionRenderer", "ragents-host-value:@ragents/web/PluginRegistry#useSurfaceController", "ragents-host-value:@ragents/web/PluginRegistry#useToolRenderer", "ragents-host-value:@ragents/web/chat-view-settings#ChatViewSwitches", "ragents-host-value:@ragents/web/chat-view-settings#useChatViewSettings", "ragents-host-value:@ragents/web/actor-conversation#actorChatMessages", "ragents-host-value:@ragents/web/actor-conversation#actorInputLabel", "ragents-host-value:react/jsx-runtime#Fragment", "ragents-host-value:react/jsx-runtime#jsx", "ragents-host-value:react/jsx-runtime#jsxs", "../../../plugins/ragents.orchestration/web/ActorChat.tsx", "ragents-host-value:@ragents/web/api#interruptActorTurn", "ragents-host-value:@ragents/web/api#sendActorMessage", "ragents-host-value:@ragents/web/chat/StoppedActorNotice#StoppedActorNotice", "ragents-host-value:@ragents/web/chat/useAttachmentCapabilities#useAttachmentCapabilities", "ragents-host-value:@ragents/web/chat/chat-target#programChatNotice", "../../../plugins/ragents.orchestration/web/ActorChatControls.tsx", "ragents-host-value:@ragents/engine/src/http/contracts#runContracts", "ragents-host-value:@ragents/web/rpc#rpc", "../../../plugins/ragents.orchestration/web/api.ts", "ragents-host-value:@ragents/web/lib/format#formatBytes", "ragents-host-value:@ragents/web/SourceCode#SourceCode", "ragents-host-value:@ragents/web/lib/labels#thinkingLabel", "../../../plugins/ragents.orchestration/web/format.ts", "../../../plugins/ragents.orchestration/web/FlowInspector.tsx", "../../../plugins/ragents.orchestration/web/InspectionPanel.tsx", "ragents-host-value:@ragents/web/run-apps#RunAppView", "ragents-host-value:@ragents/web/run-apps#runApps", "ragents-host-value:@ragents/web/run-apps#selectedRunApp", "ragents-host-value:@ragents/web/run-panel/host#useRunPanelHost", "../../../plugins/ragents.orchestration/web/surface-startup.ts", "../../../plugins/ragents.orchestration/web/constants.ts", "../../../plugins/ragents.orchestration/web/ActorPopout.tsx", "../../../plugins/ragents.orchestration/web/run-panel/run-panel-actors.ts", "../../../plugins/ragents.orchestration/web/run-panel/addressee-tree.ts", "../../../plugins/ragents.orchestration/web/run-panel/AddresseeTree.tsx", "../../../plugins/ragents.orchestration/web/run-panel/AddresseeControl.tsx", "../../../plugins/ragents.orchestration/web/run-panel/run-panel-startup.ts", "ragents-host-value:@ragents/web/lib/local-storage-setting#createLocalStorageSetting", "../../../plugins/ragents.orchestration/web/run-panel/run-panel-state.ts", "../../../plugins/ragents.orchestration/web/run-panel/RunPanel.tsx", "../../../plugins/ragents.orchestration/web/DocumentsSection.tsx", "../../../plugins/ragents.orchestration/web/JournalStatus.tsx", "ragents-host-value:@ragents/web/Toolbar#ToolbarItem", "../../../plugins/ragents.orchestration/web/StopRunButton.tsx", "../../../plugins/ragents.orchestration/web/executions.ts", "../../../plugins/ragents.orchestration/web/ExecutionsPanel.tsx", "../../../plugins/ragents.orchestration/web/index.tsx"],
|
|
4
|
+
"sourcesContent": ["/**\n * Converts string to kebab case\n *\n * @param {string} string\n * @returns {string} A kebabized string\n */\nexport const toKebabCase = (string: string) =>\n string?.replace(/([a-z0-9])([A-Z])/g, '$1-$2').toLowerCase();\n", "import { toKebabCase } from './toKebabCase';\nimport type { LucideIconData, LucideIconNode } from '../build/types';\n\n/**\n * Converts legacy `(name, iconNode, aliases?)` icon arguments into icon data object format.\n */\nexport function toLucideIconData(\n iconName: string,\n iconNode: LucideIconNode[],\n aliases: string[] = [],\n): LucideIconData {\n if (iconNode == null) {\n throw new Error('[lucide]: iconNode is required when icon name is used');\n }\n\n return {\n name: toKebabCase(iconName),\n size: 24,\n node: iconNode,\n ...(aliases.length > 0 ? { aliases } : {}),\n };\n}\n", "/**\n * Converts string to camel case\n *\n * @param {string} string\n * @returns {string} A camelized string\n */\nexport const toCamelCase = <T extends string>(string: T) => {\n let out = '';\n let upperNext = false;\n\n for (const ch of string) {\n if (ch === '-' || ch === '_' || ch <= ' ') {\n upperNext = out.length > 0;\n continue;\n }\n\n if (out.length === 0) {\n out += ch.toLowerCase();\n } else {\n out += upperNext ? ch.toUpperCase() : ch;\n }\n\n upperNext = false;\n }\n\n return out as string;\n};\n", "import { CamelToPascal } from '../utility-types';\nimport { toCamelCase } from './toCamelCase';\n\n/**\n * Converts string to pascal case\n *\n * @param {string} string\n * @returns {string} A pascalized string\n */\nexport const toPascalCase = <T extends string>(string: T): CamelToPascal<T> => {\n const camelCase = toCamelCase(string);\n\n return (camelCase.charAt(0).toUpperCase() + camelCase.slice(1)) as CamelToPascal<T>;\n};\n", "/**\n * Merges classes into a single string\n *\n * @param {array} classes\n * @returns {string} A string of classes\n */\nexport const mergeClasses = <ClassType = string | undefined | null>(...classes: ClassType[]) =>\n classes\n .filter((className, index, array) => {\n return (\n Boolean(className) &&\n (className as string).trim() !== '' &&\n array.indexOf(className) === index\n );\n })\n .join(' ')\n .trim();\n", "const defaultAttributes = {\n xmlns: 'http://www.w3.org/2000/svg',\n width: 24,\n height: 24,\n viewBox: '0 0 24 24',\n fill: 'none',\n stroke: 'currentColor',\n 'stroke-width': 2,\n 'stroke-linecap': 'round',\n 'stroke-linejoin': 'round',\n} as const;\n\nexport default defaultAttributes;\n", "import type { LucideBuildParams, LucideIconData, LucideIconNode, SVGProps } from './types';\nimport defaultAttributes from './defaultAttributes';\nimport { mergeClasses } from '../utils/mergeClasses';\n\nfunction isDefined<T>(value: T | null | undefined): value is T {\n return value !== null && value !== undefined;\n}\n\n/**\n * Creates a Lucide icon node (an svgson-like format) from a Lucide icon object.\n *\n * @param icon The icon to build.\n * @param params Additional build parameters.\n */\nfunction buildLucideIconNode(icon: LucideIconData, params: LucideBuildParams = {}): LucideIconNode {\n const attributeNames = params.attributeNames ?? {};\n const getAttributeName = (attributeName: string) =>\n attributeNames[attributeName] ?? attributeName;\n\n const viewBoxWidth = icon.size ?? icon.width ?? defaultAttributes['width'];\n const viewBoxHeight = icon.size ?? icon.height ?? defaultAttributes['height'];\n const aliasClassNames =\n icon.aliases\n ?.filter((alias: string): alias is string => typeof alias === 'string' && alias.trim() !== '')\n .map((alias: string) => `lucide-${alias}`) ?? [];\n const iconClassNames = [...(icon.name ? [`lucide-${icon.name}`] : []), ...aliasClassNames];\n const classNamesFromClassName = params.className?.split(' ').filter(Boolean) ?? [];\n const className =\n params.includeDefaultClasses === false\n ? mergeClasses(...classNamesFromClassName)\n : mergeClasses('lucide', ...iconClassNames, ...classNamesFromClassName);\n\n const calculatedStrokeWidth = params.absoluteStrokeWidth\n ? (Number(params.strokeWidth ?? defaultAttributes['stroke-width']) *\n Number(icon.size ?? icon.width ?? defaultAttributes['width'])) /\n Number(params.size ?? params.width ?? defaultAttributes['width'])\n : (params.strokeWidth ?? defaultAttributes['stroke-width']);\n\n const attributes = {\n ...Object.entries(defaultAttributes).reduce((attrs, [attrName, value]) => {\n attrs[getAttributeName(attrName)] = value;\n return attrs;\n }, {} as SVGProps),\n ...('color' in params &&\n params.color && {\n [getAttributeName('stroke')]: params.color,\n }),\n ...('size' in params &&\n isDefined(params.size) && {\n [getAttributeName('width')]: params.size,\n [getAttributeName('height')]: params.size,\n }),\n ...('width' in params &&\n isDefined(params.width) && {\n [getAttributeName('width')]: params.width,\n }),\n ...('height' in params &&\n isDefined(params.height) && {\n [getAttributeName('height')]: params.height,\n }),\n [getAttributeName('stroke-width')]: calculatedStrokeWidth,\n ...(className && {\n [getAttributeName('class')]: className,\n }),\n [getAttributeName('viewBox')]: `0 0 ${viewBoxWidth} ${viewBoxHeight}`,\n ...(params.hasA11yProp === false\n ? {\n [getAttributeName('aria-hidden')]: 'true',\n }\n : {}),\n ...('attributes' in params && params.attributes),\n };\n\n return [\n 'svg',\n attributes,\n icon.node.map((child): LucideIconNode => {\n const [name, attrs, children] = child;\n const nextAttrs = params.nonScalingStroke\n ? { [getAttributeName('vector-effect')]: 'non-scaling-stroke', ...attrs }\n : attrs;\n\n return children ? [name, nextAttrs, children] : [name, nextAttrs];\n }),\n ];\n}\n\nexport default buildLucideIconNode;\n", "import buildLucideIconNode from './buildLucideIconNode';\nimport type { LucideBuildParams, LucideIconData, LucideIconNode } from './types';\n\n/**\n * Creates a React-compatible Lucide icon node (an svgson-like format) from a Lucide icon object.\n *\n * @param icon The icon to build.\n * @param params Additional build parameters.\n */\nfunction buildLucideIconForReact(\n icon: LucideIconData,\n params: LucideBuildParams = {},\n): LucideIconNode {\n return buildLucideIconNode(icon, {\n ...params,\n attributeNames: {\n ...params.attributeNames,\n class: 'className',\n 'stroke-width': 'strokeWidth',\n 'stroke-linecap': 'strokeLinecap',\n 'stroke-linejoin': 'strokeLinejoin',\n 'vector-effect': 'vectorEffect',\n },\n });\n}\n\nexport default buildLucideIconForReact;\n", "/**\n * Check if a component has an accessibility prop\n *\n * @param {object} props\n * @returns {boolean} Whether the component has an accessibility prop\n */\nexport const hasA11yProp = (props: object) => {\n for (const prop in props) {\n if (prop.startsWith('aria-') || prop === 'role' || prop === 'title') {\n return true;\n }\n }\n\n return false;\n};\n", "'use client';\n\nimport { createContext, createElement, type ReactNode, useContext, useMemo } from 'react';\nimport { LucideProps } from './types';\n\ntype LucideConfig = {\n size: number;\n color: string;\n strokeWidth: number;\n /**\n * @deprecated Use `nonScalingStroke` instead.\n */\n absoluteStrokeWidth: boolean;\n nonScalingStroke: boolean;\n className: string;\n};\n\nconst LucideContext = createContext<LucideProps>({});\n\ntype LucideProviderProps = {\n children: ReactNode;\n} & Partial<LucideConfig>;\n\nexport function LucideProvider({\n children,\n size,\n color,\n strokeWidth,\n absoluteStrokeWidth,\n nonScalingStroke,\n className,\n}: LucideProviderProps) {\n const value = useMemo(\n () => ({\n size,\n color,\n strokeWidth,\n absoluteStrokeWidth,\n nonScalingStroke,\n className,\n }),\n [size, color, strokeWidth, absoluteStrokeWidth, nonScalingStroke, className],\n );\n\n return createElement(LucideContext.Provider, { value }, children);\n}\n\nexport const useLucideContext = () => useContext(LucideContext);\n", "'use client';\n\nimport { createElement, forwardRef } from 'react';\nimport { buildLucideIconForReact, hasA11yProp, mergeClasses } from '@lucide/shared';\nimport { LucideIconData, LucideIconNode, LucideProps } from './types';\nimport { useLucideContext } from './context';\n\ntype IconComponentProps = LucideProps &\n (\n | {\n iconNode: LucideIconNode[];\n icon?: never;\n }\n | {\n icon: LucideIconData;\n iconNode?: never;\n }\n );\n\n/**\n * Lucide icon component\n *\n * @component Icon\n * @param {object} props\n * @param {string} props.color - The color of the icon\n * @param {number} props.size - The size of the icon\n * @param {number} props.strokeWidth - The stroke width of the icon\n * @param {boolean} props.absoluteStrokeWidth - Whether to use absolute stroke width\n * @param {boolean} props.nonScalingStroke - Whether to use non scaling strokes\n * @param {string} props.className - The class name of the icon\n * @param {LucideIconNode[]} props.children - The children of the icon\n * @param {LucideIconNode[]} props.iconNode - The icon node of the icon\n *\n * @returns {ForwardRefExoticComponent} LucideIcon\n */\nconst Icon = forwardRef<SVGSVGElement, IconComponentProps>(\n (\n {\n color,\n size,\n width,\n height,\n strokeWidth,\n absoluteStrokeWidth,\n nonScalingStroke,\n className = '',\n children,\n iconNode = [],\n icon = {\n node: iconNode,\n aliases: [],\n size: 24,\n },\n ...rest\n },\n ref,\n ) => {\n const {\n size: contextSize = 24,\n strokeWidth: contextStrokeWidth = 2,\n absoluteStrokeWidth: contextAbsoluteStrokeWidth = false,\n nonScalingStroke: contextNonScalingStroke = false,\n color: contextColor = 'currentColor',\n className: contextClass = '',\n } = useLucideContext() ?? {};\n\n const hasAccessibleProp = Boolean(children) || hasA11yProp(rest);\n\n const [name, svgAttributes, builtIconNode = []] = buildLucideIconForReact(icon, {\n color: color ?? contextColor,\n width: width ?? size ?? contextSize,\n height: height ?? size ?? contextSize,\n strokeWidth: strokeWidth ?? contextStrokeWidth,\n absoluteStrokeWidth: absoluteStrokeWidth ?? contextAbsoluteStrokeWidth,\n nonScalingStroke: nonScalingStroke ?? contextNonScalingStroke,\n className: mergeClasses(contextClass, className),\n hasA11yProp: hasAccessibleProp,\n attributes: rest,\n });\n\n return createElement(\n name,\n {\n ref,\n ...svgAttributes,\n },\n [\n ...builtIconNode.map(([tag, attrs]) => createElement(tag, attrs)),\n ...(Array.isArray(children) ? children : [children]),\n ],\n );\n },\n);\n\nexport default Icon;\n", "import { createElement, forwardRef } from 'react';\nimport { toLucideIconData, toPascalCase } from '@lucide/shared';\nimport { LucideIcon, LucideIconData, LucideIconNode, LucideProps } from './types';\nimport Icon from './Icon';\n\n/**\n * Creates a Lucide icon component from icon data.\n *\n * @param icon Icon data object.\n * @returns Lucide icon component.\n */\nfunction createLucideIcon(icon: LucideIconData): LucideIcon;\n\n/**\n * Creates a Lucide icon component from the legacy icon arguments.\n *\n * @param iconName Icon name.\n * @param iconNode Icon node.\n * @param aliases Optional icon aliases.\n * @returns Lucide icon component.\n */\nfunction createLucideIcon(\n iconName: string,\n iconNode: LucideIconNode[],\n aliases?: string[],\n): LucideIcon;\n\nfunction createLucideIcon(\n iconDataOrName: LucideIconData | string,\n iconNode: LucideIconNode[] = [],\n aliases: string[] = [],\n): LucideIcon {\n const iconData =\n typeof iconDataOrName === 'string'\n ? toLucideIconData(iconDataOrName, iconNode, aliases)\n : iconDataOrName;\n\n const Component = forwardRef<SVGSVGElement, LucideProps>(({ className, ...props }, ref) =>\n createElement(Icon, {\n ref,\n icon: iconData,\n className,\n ...props,\n }),\n );\n\n if (iconData.name) {\n Component.displayName = toPascalCase(iconData.name);\n }\n\n return Component;\n}\n\nexport default createLucideIcon;\n", "import createLucideIcon from '../createLucideIcon';\nimport type { LucideIconNode, LucideIconData } from '../types';\n\nexport const __iconData: LucideIconData = {\n name: 'arrow-left',\n size: 24,\n node: [\n ['path', { d: 'm12 19-7-7 7-7', key: '1l729n' }],\n ['path', { d: 'M19 12H5', key: 'x3x0zl' }],\n ],\n};\n\n/**\n * @deprecated Access `__iconData` instead.\n */\nexport const __iconNode: LucideIconNode[] = __iconData.node;\n\n/**\n * @component @name ArrowLeft\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview  - https://lucide.dev/icons/arrow-left\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst ArrowLeft = createLucideIcon(__iconData);\n\nexport default ArrowLeft;\n", "import createLucideIcon from '../createLucideIcon';\nimport type { LucideIconNode, LucideIconData } from '../types';\n\nexport const __iconData: LucideIconData = {\n name: 'arrow-up-right',\n size: 24,\n node: [\n ['path', { d: 'M7 7h10v10', key: '1tivn9' }],\n ['path', { d: 'M7 17 17 7', key: '1vkiza' }],\n ],\n};\n\n/**\n * @deprecated Access `__iconData` instead.\n */\nexport const __iconNode: LucideIconNode[] = __iconData.node;\n\n/**\n * @component @name ArrowUpRight\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview  - https://lucide.dev/icons/arrow-up-right\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst ArrowUpRight = createLucideIcon(__iconData);\n\nexport default ArrowUpRight;\n", "import createLucideIcon from '../createLucideIcon';\nimport type { LucideIconNode, LucideIconData } from '../types';\n\nexport const __iconData: LucideIconData = {\n name: 'chevron-down',\n size: 24,\n node: [['path', { d: 'm6 9 6 6 6-6', key: 'qrunsl' }]],\n};\n\n/**\n * @deprecated Access `__iconData` instead.\n */\nexport const __iconNode: LucideIconNode[] = __iconData.node;\n\n/**\n * @component @name ChevronDown\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview  - https://lucide.dev/icons/chevron-down\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst ChevronDown = createLucideIcon(__iconData);\n\nexport default ChevronDown;\n", "import createLucideIcon from '../createLucideIcon';\nimport type { LucideIconNode, LucideIconData } from '../types';\n\nexport const __iconData: LucideIconData = {\n name: 'chevron-right',\n size: 24,\n node: [['path', { d: 'm9 18 6-6-6-6', key: 'mthhwq' }]],\n};\n\n/**\n * @deprecated Access `__iconData` instead.\n */\nexport const __iconNode: LucideIconNode[] = __iconData.node;\n\n/**\n * @component @name ChevronRight\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview  - https://lucide.dev/icons/chevron-right\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst ChevronRight = createLucideIcon(__iconData);\n\nexport default ChevronRight;\n", "import createLucideIcon from '../createLucideIcon';\nimport type { LucideIconNode, LucideIconData } from '../types';\n\nexport const __iconData: LucideIconData = {\n name: 'code',\n size: 24,\n node: [\n ['path', { d: 'm16 18 6-6-6-6', key: 'eg8j8' }],\n ['path', { d: 'm8 6-6 6 6 6', key: 'ppft3o' }],\n ],\n};\n\n/**\n * @deprecated Access `__iconData` instead.\n */\nexport const __iconNode: LucideIconNode[] = __iconData.node;\n\n/**\n * @component @name Code\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview  - https://lucide.dev/icons/code\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst Code = createLucideIcon(__iconData);\n\nexport default Code;\n", "import createLucideIcon from '../createLucideIcon';\nimport type { LucideIconNode, LucideIconData } from '../types';\n\nexport const __iconData: LucideIconData = {\n name: 'layout-grid',\n size: 24,\n node: [\n ['rect', { width: '7', height: '7', x: '3', y: '3', rx: '1', key: '1g98yp' }],\n ['rect', { width: '7', height: '7', x: '14', y: '3', rx: '1', key: '6d4xhi' }],\n ['rect', { width: '7', height: '7', x: '14', y: '14', rx: '1', key: 'nxv5o0' }],\n ['rect', { width: '7', height: '7', x: '3', y: '14', rx: '1', key: '1bb6yr' }],\n ],\n};\n\n/**\n * @deprecated Access `__iconData` instead.\n */\nexport const __iconNode: LucideIconNode[] = __iconData.node;\n\n/**\n * @component @name LayoutGrid\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview  - https://lucide.dev/icons/layout-grid\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst LayoutGrid = createLucideIcon(__iconData);\n\nexport default LayoutGrid;\n", "import createLucideIcon from '../createLucideIcon';\nimport type { LucideIconNode, LucideIconData } from '../types';\n\nexport const __iconData: LucideIconData = {\n name: 'search',\n size: 24,\n node: [\n ['path', { d: 'm21 21-4.34-4.34', key: '14j7rj' }],\n ['circle', { cx: '11', cy: '11', r: '8', key: '4ej97u' }],\n ],\n};\n\n/**\n * @deprecated Access `__iconData` instead.\n */\nexport const __iconNode: LucideIconNode[] = __iconData.node;\n\n/**\n * @component @name Search\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview  - https://lucide.dev/icons/search\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst Search = createLucideIcon(__iconData);\n\nexport default Search;\n", "import createLucideIcon from '../createLucideIcon';\nimport type { LucideIconNode, LucideIconData } from '../types';\n\nexport const __iconData: LucideIconData = {\n name: 'sparkles',\n size: 24,\n node: [\n [\n 'path',\n {\n d: 'M11.017 2.814a1 1 0 0 1 1.966 0l1.051 5.558a2 2 0 0 0 1.594 1.594l5.558 1.051a1 1 0 0 1 0 1.966l-5.558 1.051a2 2 0 0 0-1.594 1.594l-1.051 5.558a1 1 0 0 1-1.966 0l-1.051-5.558a2 2 0 0 0-1.594-1.594l-5.558-1.051a1 1 0 0 1 0-1.966l5.558-1.051a2 2 0 0 0 1.594-1.594z',\n key: '1s2grr',\n },\n ],\n ['path', { d: 'M20 2v4', key: '1rf3ol' }],\n ['path', { d: 'M22 4h-4', key: 'gwowj6' }],\n ['circle', { cx: '4', cy: '20', r: '2', key: '6kqj1y' }],\n ],\n aliases: ['stars'],\n};\n\n/**\n * @deprecated Access `__iconData` instead.\n */\nexport const __iconNode: LucideIconNode[] = __iconData.node;\n\n/**\n * @component @name Sparkles\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview  - https://lucide.dev/icons/sparkles\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst Sparkles = createLucideIcon(__iconData);\n\nexport default Sparkles;\n", "import createLucideIcon from '../createLucideIcon';\nimport type { LucideIconNode, LucideIconData } from '../types';\n\nexport const __iconData: LucideIconData = {\n name: 'users',\n size: 24,\n node: [\n ['path', { d: 'M16 21v-2a4 4 0 0 0-4-4H6a4 4 0 0 0-4 4v2', key: '1yyitq' }],\n ['path', { d: 'M16 3.128a4 4 0 0 1 0 7.744', key: '16gr8j' }],\n ['path', { d: 'M22 21v-2a4 4 0 0 0-3-3.87', key: 'kshegd' }],\n ['circle', { cx: '9', cy: '7', r: '4', key: 'nufk8' }],\n ],\n};\n\n/**\n * @deprecated Access `__iconData` instead.\n */\nexport const __iconNode: LucideIconNode[] = __iconData.node;\n\n/**\n * @component @name Users\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview  - https://lucide.dev/icons/users\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst Users = createLucideIcon(__iconData);\n\nexport default Users;\n", "import createLucideIcon from '../createLucideIcon';\nimport type { LucideIconNode, LucideIconData } from '../types';\n\nexport const __iconData: LucideIconData = {\n name: 'wrench',\n size: 24,\n node: [\n [\n 'path',\n {\n d: 'M14.7 6.3a1 1 0 0 0 0 1.4l1.6 1.6a1 1 0 0 0 1.4 0l3.106-3.105c.32-.322.863-.22.983.218a6 6 0 0 1-8.259 7.057l-7.91 7.91a1 1 0 0 1-2.999-3l7.91-7.91a6 6 0 0 1 7.057-8.259c.438.12.54.662.219.984z',\n key: '1ngwbx',\n },\n ],\n ],\n};\n\n/**\n * @deprecated Access `__iconData` instead.\n */\nexport const __iconNode: LucideIconNode[] = __iconData.node;\n\n/**\n * @component @name Wrench\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview  - https://lucide.dev/icons/wrench\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst Wrench = createLucideIcon(__iconData);\n\nexport default Wrench;\n", "import createLucideIcon from '../createLucideIcon';\nimport type { LucideIconNode, LucideIconData } from '../types';\n\nexport const __iconData: LucideIconData = {\n name: 'x',\n size: 24,\n node: [\n ['path', { d: 'M18 6 6 18', key: '1bl5f8' }],\n ['path', { d: 'm6 6 12 12', key: 'd8bk6v' }],\n ],\n};\n\n/**\n * @deprecated Access `__iconData` instead.\n */\nexport const __iconNode: LucideIconNode[] = __iconData.node;\n\n/**\n * @component @name X\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview  - https://lucide.dev/icons/x\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst X = createLucideIcon(__iconData);\n\nexport default X;\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"@ragents/web/ui\", \"Alert\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"@ragents/web/ui\", \"AlertDescription\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"@ragents/web/ui\", \"Badge\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"@ragents/web/ui\", \"Button\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"@ragents/web/ui\", \"Empty\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"@ragents/web/ui\", \"EmptyDescription\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"@ragents/web/ui\", \"EmptyHeader\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"@ragents/web/ui\", \"EmptyTitle\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"@ragents/web/ui\", \"Input\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"@ragents/web/ui\", \"Popover\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"@ragents/web/ui\", \"PopoverContent\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"@ragents/web/ui\", \"SectionLabel\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"@ragents/web/ui\", \"Select\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"@ragents/web/ui\", \"SelectContent\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"@ragents/web/ui\", \"SelectItem\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"@ragents/web/ui\", \"SelectTrigger\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"@ragents/web/ui\", \"SelectValue\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"@ragents/web/ui\", \"Spinner\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"@ragents/web/ui\", \"StartupNotice\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"@ragents/web/ui\", \"StopGlyph\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"@ragents/web/ui\", \"Tabs\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"@ragents/web/ui\", \"TabsContent\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"@ragents/web/ui\", \"TabsList\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"@ragents/web/ui\", \"TabsTrigger\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"@ragents/web/ui\", \"cn\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"@ragents/web/run-view\", \"actorTone\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"@ragents/web/run-view\", \"chatPrimaryId\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"@ragents/web/run-view\", \"isPendingRunActorInput\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"@ragents/web/run-view\", \"runActorFrom\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"@ragents/web/run-view\", \"runArtifactContentUrl\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"@ragents/web/run-view\", \"runViewFrom\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"@ragents/web/AccessContext\", \"useAccess\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"quassel\", \"ChatInputToolbar\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"quassel\", \"ChatMessages\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"quassel\", \"ChatPanel\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"@ragents/web/PluginRegistry\", \"SurfaceControllerProvider\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"@ragents/web/PluginRegistry\", \"useActionRenderer\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"@ragents/web/PluginRegistry\", \"useSurfaceController\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"@ragents/web/PluginRegistry\", \"useToolRenderer\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"@ragents/web/chat-view-settings\", \"ChatViewSwitches\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"@ragents/web/chat-view-settings\", \"useChatViewSettings\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"@ragents/web/actor-conversation\", \"actorChatMessages\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"@ragents/web/actor-conversation\", \"actorInputLabel\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"react/jsx-runtime\", \"Fragment\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"react/jsx-runtime\", \"jsx\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"react/jsx-runtime\", \"jsxs\");\n", "import { useAccess } from \"@ragents/web/AccessContext\";\nimport { Empty, EmptyDescription, EmptyHeader, EmptyTitle } from \"@ragents/web/ui\";\nimport { useCallback, useMemo } from \"react\";\nimport { ChatMessages, type Message } from \"quassel\";\nimport { useActionRenderer, useToolRenderer } from \"@ragents/web/PluginRegistry\";\nimport { useChatViewSettings } from \"@ragents/web/chat-view-settings\";\nimport { actorChatMessages } from \"@ragents/web/actor-conversation\";\nimport type { FlowSelection } from \"./FlowInspector\";\nimport type { RunActor, RunView } from \"@ragents/web/run-view\";\n\nconst emptyMessages: readonly Message[] = [];\n\nexport function ActorChat({ actor, view, presentation, display = presentation, primaryMessages = emptyMessages, conversation, historyError, running = false, className, onNavigate, scrollerRef }: {\n actor: RunActor;\n view: RunView;\n presentation: \"panel\" | \"inspector\";\n /** Key of the display surface for the remembered detail level; defaults to the presentation. */\n display?: string;\n primaryMessages?: readonly Message[];\n conversation?: readonly Message[];\n historyError?: string;\n running?: boolean;\n className?: string;\n onNavigate: (selection: FlowSelection) => void;\n scrollerRef?: (element: HTMLDivElement | null) => void;\n}) {\n const inspect = useAccess().can(\"runs.inspect\");\n const chatView = useChatViewSettings(view.id, actor.id, \"agents\", display);\n const renderTool = useToolRenderer();\n const renderAction = useActionRenderer();\n const configuredMode = chatView.detailMode;\n const detailMode = inspect || configuredMode === \"off\" ? configuredMode : \"current\";\n const messages = useMemo(() => actorChatMessages(view, actor, primaryMessages, conversation), [view, actor, primaryMessages, conversation]);\n const openLink = useCallback((href: string) => {\n const match = /^flow:(actor|input|turn|subscription|action|artifact)\\/(.+)$/.exec(href);\n if (!match) return false;\n if (!inspect) return true;\n onNavigate({ type: match[1] as FlowSelection[\"type\"], id: match[2] });\n return true;\n }, [inspect, onNavigate]);\n return <>\n {historyError && <p className=\"my-1.5 text-[0.72rem] text-destructive\" role=\"alert\">{historyError}</p>}\n <ChatMessages\n className={className}\n detailMode={detailMode}\n emptyState={<Empty><EmptyHeader><EmptyTitle>{actor.kind === \"script\" ? \"No history yet\" : \"No conversation yet\"}</EmptyTitle><EmptyDescription>{actor.kind === \"script\" ? \"Program inputs and their processing appear here.\" : \"Write a message to start the conversation.\"}</EmptyDescription></EmptyHeader></Empty>}\n messages={messages}\n renderAction={renderAction}\n renderTool={renderTool}\n owner={actor.id}\n onLinkClick={openLink}\n running={running}\n showTimestamps={chatView.showTimestamps}\n stepsExpandable={inspect && chatView.stepsExpandable}\n scrollerRef={scrollerRef}\n />\n </>;\n}\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"@ragents/web/api\", \"interruptActorTurn\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"@ragents/web/api\", \"sendActorMessage\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"@ragents/web/chat/StoppedActorNotice\", \"StoppedActorNotice\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"@ragents/web/chat/useAttachmentCapabilities\", \"useAttachmentCapabilities\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"@ragents/web/chat/chat-target\", \"programChatNotice\");\n", "import { useAccess } from \"@ragents/web/AccessContext\";\nimport { useState, type ReactNode } from \"react\";\nimport { interruptActorTurn, sendActorMessage } from \"@ragents/web/api\";\nimport { ChatViewSwitches, useChatViewSettings } from \"@ragents/web/chat-view-settings\";\nimport { ChatInputToolbar } from \"quassel\";\nimport { StoppedActorNotice } from \"@ragents/web/chat/StoppedActorNotice\";\nimport { useAttachmentCapabilities } from \"@ragents/web/chat/useAttachmentCapabilities\";\nimport { programChatNotice } from \"@ragents/web/chat/chat-target\";\nimport type { RunActor, RunView } from \"@ragents/web/run-view\";\n\nconst controlsClass = \"flex flex-shrink-0 items-center gap-2 border-t border-border-soft px-workspace-inset pt-2 pb-2.5\";\n\nconst noteClass = \"mt-1.5 text-[0.7rem] text-muted-foreground\";\n\nexport function ActorChatControls({ actor, view, composerVisible = true, presentation = \"inspector\", display = presentation, running = false, toolbarLeft, toolbarRight }: {\n actor: RunActor;\n view: RunView;\n composerVisible?: boolean;\n presentation?: \"inspector\" | \"panel\";\n display?: string;\n running?: boolean;\n toolbarLeft?: ReactNode;\n toolbarRight?: ReactNode;\n}) {\n const writable = useAccess().can(\"runs.write\");\n const [stopError, setStopError] = useState<string>();\n const chatView = useChatViewSettings(view.id, actor.id, \"agents\", display);\n const attachments = useAttachmentCapabilities(view.id, actor.id, JSON.stringify(actor.execution?.driver.config));\n const disabledReason = !writable ? \"You have read access to this run.\" : undefined;\n const switches = <ChatViewSwitches settings={chatView} />;\n if (!composerVisible || actor.kind === \"human\") return <div className={controlsClass}>{toolbarLeft}{switches}</div>;\n if (actor.kind === \"script\") return <div className={controlsClass}><p className={noteClass}>{programChatNotice}</p>{toolbarLeft}{switches}</div>;\n if (actor.lifecycle?.kind === \"stopped\") return <div className={presentation === \"inspector\" ? \"flex-shrink-0 px-5 pt-2.5 pb-3.5\" : undefined}>\n <StoppedActorNotice actor={actor} runId={view.id} toolbar={<>{toolbarLeft}{switches}</>} />\n </div>;\n return <div className={presentation === \"inspector\" ? \"flex-shrink-0 px-5 pt-2.5 pb-3.5\" : undefined}>\n <ChatInputToolbar\n {...attachments}\n disabled={disabledReason !== undefined}\n maxRows={4}\n onSend={(text, files) => sendActorMessage(view.id, actor.id, text, files)}\n onStop={writable && actor.lifecycle?.kind === \"running\" ? () => {\n setStopError(undefined);\n void interruptActorTurn(view.id, actor.id).catch((error: unknown) =>\n setStopError(error instanceof Error ? error.message : String(error)));\n } : undefined}\n rows={1}\n running={running}\n texts={{ placeholder: disabledReason ?? `Message to @${actor.handle} ...` }}\n toolbarLeft={<>\n {toolbarLeft}\n {switches}\n {presentation === \"inspector\" && <span className=\"truncate text-[0.7rem] text-muted-foreground\">to @{actor.handle}</span>}\n </>}\n toolbarRight={toolbarRight}\n />\n {stopError && <p className={noteClass} role=\"alert\">{stopError}</p>}\n {disabledReason && presentation === \"inspector\" && <p className={noteClass}>{disabledReason}</p>}\n </div>;\n}\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"@ragents/engine/src/http/contracts\", \"runContracts\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"@ragents/web/rpc\", \"rpc\");\n", "import { runContracts } from \"@ragents/engine/src/http/contracts\";\nimport { rpc } from \"@ragents/web/rpc\";\n\nexport const enqueueActorInput = async (runId: string, actorId: string, content: string, artifactIds: string[] = []) => {\n await rpc.call(runContracts.enqueueInput, { runId, commandId: crypto.randomUUID(), actorId, content, artifactIds });\n};\n\nexport const resolveAction = async (\n runId: string,\n actionId: string,\n decision: \"approved\" | \"dismissed\",\n result?: string,\n) => {\n await rpc.call(runContracts.resolveAction, { runId, commandId: crypto.randomUUID(), actionId, decision, result });\n};\n\nexport const stopActor = async (runId: string, actorId: string, reason: string) => {\n await rpc.call(runContracts.stopActor, { runId, commandId: crypto.randomUUID(), actorId, reason });\n};\n\nexport const restartActor = async (runId: string, actorId: string) => {\n await rpc.call(runContracts.restartActor, { runId, commandId: crypto.randomUUID(), actorId });\n};\n\nexport const stopRun = async (runId: string, reason: string) => {\n await rpc.call(runContracts.stopAll, { runId, commandId: crypto.randomUUID(), reason });\n};\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"@ragents/web/lib/format\", \"formatBytes\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"@ragents/web/SourceCode\", \"SourceCode\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"@ragents/web/lib/labels\", \"thinkingLabel\");\n", "export const formatTime = (iso: string) => {\n const date = new Date(iso);\n return Number.isNaN(date.getTime()) ? iso : date.toLocaleString();\n};\n", "import { ArrowLeftIcon, WrenchIcon } from \"lucide-react\";\nimport { useAccess } from \"@ragents/web/AccessContext\";\nimport { Badge, Button, Empty, EmptyDescription, EmptyHeader, EmptyTitle, Input, Tabs, TabsContent, TabsList, TabsTrigger } from \"@ragents/web/ui\";\nimport { useEffect, useId, useMemo, useRef, useState, type ReactNode } from \"react\";\nimport { ActorChat } from \"./ActorChat\";\nimport { ActorChatControls } from \"./ActorChatControls\";\nimport type { Message } from \"quassel/events\";\nimport {\n isPendingRunActorInput,\n runArtifactContentUrl,\n type RunAction,\n type RunActor,\n type RunActorInput,\n type RunArtifact,\n type RunCapabilityGrant,\n type RunSubscription,\n type RunTurn,\n type RunUsage,\n type RunView,\n} from \"@ragents/web/run-view\";\nimport { actorInputLabel } from \"@ragents/web/actor-conversation\";\nimport { resolveAction, restartActor, stopActor } from \"./api\";\nimport { formatBytes } from \"@ragents/web/lib/format\";\nimport { SourceCode } from \"@ragents/web/SourceCode\";\nimport { thinkingLabel } from \"@ragents/web/lib/labels\";\nimport { formatTime } from \"./format\";\nimport { useProgramSlot } from \"./program-slot\";\n\nexport interface FlowSelection {\n type: \"actor\" | \"input\" | \"turn\" | \"subscription\" | \"action\" | \"artifact\";\n id: string;\n}\n\ninterface FlowInspectorProps {\n view: RunView | undefined;\n selection: FlowSelection | undefined;\n canGoBack: boolean;\n composerVisible: boolean;\n onNavigate: (selection: FlowSelection) => void;\n onBack: () => void;\n primaryMessages: Message[];\n actorConversations?: Readonly<Record<string, readonly Message[]>>;\n conversationError?: string;\n primaryRunning: boolean;\n}\n\nconst inspectorClass = \"flex h-full min-h-0 flex-col bg-card\";\n\nconst headClass = \"flex flex-shrink-0 items-start gap-2.5 border-b border-border-soft px-workspace-inset pt-3 pb-2 [&_h2]:text-[0.95rem] [&_h2]:leading-[1.3]\";\n\nconst subtitleClass = \"block truncate text-[0.72rem] text-muted-foreground\";\n\nconst statusClass = \"flex flex-shrink-0 flex-wrap items-center gap-x-2.5 gap-y-0.5 border-b border-border-soft px-workspace-inset py-1.5 text-[0.72rem] text-muted-foreground\";\n\nconst scrollClass = \"min-h-0 flex-1 overflow-y-auto px-workspace-inset py-2.5\";\n\nconst sectionClass = \"mb-4 [&>h3]:mb-1.5 [&>h3]:text-[0.72rem] [&>h3]:font-semibold [&>h3]:tracking-[0.05em] [&>h3]:uppercase [&>h3]:text-muted-foreground\";\n\nconst rowsClass = \"flex flex-col gap-1 py-1.5\";\n\nconst rowClass = \"flex cursor-pointer items-center gap-2 rounded-lg border border-border-soft px-2 py-1.5 text-left hover:border-[color-mix(in_srgb,var(--primary)_45%,var(--border))] hover:bg-primary/6 [&_strong]:truncate [&_strong]:text-[0.76rem] [&_small]:text-[0.66rem] [&_small]:text-muted-foreground\";\n\nconst rowCopyClass = \"flex min-w-0 flex-1 flex-col\";\n\nconst mutedClass = \"text-[0.74rem] text-muted-foreground\";\n\nconst errorClass = \"my-1.5 text-[0.72rem] text-destructive\";\n\nconst propertiesClass = \"my-1.5 grid grid-cols-[auto_1fr] gap-x-3 gap-y-1 text-[0.74rem] [&_dt]:text-muted-foreground [&_dd]:[overflow-wrap:anywhere]\";\n\nconst textBlockClass = \"my-1.5 rounded-lg bg-foreground/4 p-2 text-[0.72rem] whitespace-pre-wrap [overflow-wrap:anywhere]\";\n\nconst linkClass = \"cursor-pointer text-[0.74rem] text-primary underline\";\n\nconst pillClass = \"h-auto rounded-full bg-foreground/8 px-2 py-0.5 text-[0.66rem] font-semibold text-muted-foreground\";\n\nconst pillToneClass: Readonly<Record<string, string>> = {\n running: \"bg-accent text-primary\",\n active: \"bg-success-soft text-success\",\n approved: \"bg-success-soft text-success\",\n completed: \"bg-success-soft text-success\",\n idle: \"bg-success-soft text-success\",\n pending: \"bg-success-soft text-success\",\n waiting: \"bg-success-soft text-success\",\n queued: \"bg-success-soft text-success\",\n failed: \"bg-destructive-soft text-destructive\",\n interrupted: \"bg-destructive-soft text-destructive\",\n};\n\nconst tabClass = \"grid size-[30px] flex-[0_0_30px] place-items-center p-0\";\n\nconst STATUS_LABELS: Record<string, string> = {\n active: \"Active\",\n approved: \"Approved\",\n completed: \"Completed\",\n dismissed: \"Dismissed\",\n failed: \"Failed\",\n idle: \"Ready\",\n interrupted: \"Interrupted\",\n pending: \"Open\",\n removed: \"Removed\",\n running: \"Running\",\n stopped: \"Stopped\",\n};\n\nconst ACTOR_KIND_LABELS: Record<RunActor[\"kind\"], string> = {\n human: \"Person\",\n agent: \"Agent\",\n script: \"Logic actor\",\n};\n\nconst STOP_REASON = \"Stopped by the operator\";\n\nconst shortId = (id: string) => (id.length > 12 ? `${id.slice(0, 12)}...` : id);\n\nconst turnUsageOf = (turn: RunTurn): Partial<RunUsage> | undefined => {\n const usage: Partial<RunUsage> | undefined = turn.usage;\n return usage;\n};\n\nconst runCostUsd = (view: RunView): number | undefined => {\n const costs = view.turns\n .map((turn) => turnUsageOf(turn)?.costUsd)\n .filter((cost): cost is number => typeof cost === \"number\" && Number.isFinite(cost));\n return costs.length > 0 ? costs.reduce((sum, cost) => sum + cost, 0) : undefined;\n};\n\nconst formatCostUsd = (value: number) =>\n `${value.toLocaleString(undefined, { minimumFractionDigits: 2, maximumFractionDigits: value > 0 && value < 0.005 ? 4 : 2 })} USD`;\n\ninterface RunIndex {\n view: RunView;\n actorById: Map<string, RunActor>;\n inputById: Map<string, RunActorInput>;\n turnById: Map<string, RunTurn>;\n subscriptionById: Map<string, RunSubscription>;\n actionById: Map<string, RunAction>;\n artifactById: Map<string, RunArtifact>;\n}\n\nconst indexOf = (view: RunView): RunIndex => ({\n view,\n actorById: new Map(view.actors.map((entry) => [entry.id, entry])),\n inputById: new Map(view.inputs.map((entry) => [entry.id, entry])),\n turnById: new Map(view.turns.map((entry) => [entry.id, entry])),\n subscriptionById: new Map(view.subscriptions.map((entry) => [entry.id, entry])),\n actionById: new Map(view.actions.map((entry) => [entry.id, entry])),\n artifactById: new Map(view.artifacts.map((entry) => [entry.id, entry])),\n});\n\nconst actorLabel = (index: RunIndex, actorId: string) =>\n `@${index.actorById.get(actorId)?.handle ?? shortId(actorId)}`;\n\nconst inputDeliveryLabel = (index: RunIndex, input: RunActorInput) =>\n actorInputLabel(index.view, input);\n\nexport function FlowInspector(props: FlowInspectorProps) {\n const inspect = useAccess().can(\"runs.inspect\");\n const view = props.view;\n const index = useMemo(() => (view ? indexOf(view) : undefined), [view]);\n\n if (!view || !index) {\n return (\n <Empty>\n <EmptyHeader>\n <EmptyTitle>No flow yet</EmptyTitle>\n <EmptyDescription>As soon as actors are started, the detail view appears here.</EmptyDescription>\n </EmptyHeader>\n </Empty>\n );\n }\n\n const selection = props.selection;\n const actor = selection?.type === \"actor\" ? index.actorById.get(selection.id) : undefined;\n const input = selection?.type === \"input\" ? index.inputById.get(selection.id) : undefined;\n const turn = selection?.type === \"turn\" ? index.turnById.get(selection.id) : undefined;\n const subscription = selection?.type === \"subscription\" ? index.subscriptionById.get(selection.id) : undefined;\n const action = selection?.type === \"action\" ? index.actionById.get(selection.id) : undefined;\n const artifact = selection?.type === \"artifact\" ? index.artifactById.get(selection.id) : undefined;\n const fallbackActor = index.actorById.get(view.primaryActorId ?? view.ownerId) ?? view.actors[0];\n\n if (!inspect) {\n const conversationActor = actor ?? fallbackActor;\n return conversationActor?.kind === \"agent\" ? <ActorView actor={conversationActor} index={index} key={conversationActor.id} {...props} /> : null;\n }\n\n if (input) return <InputView index={index} input={input} key={input.id} {...props} />;\n if (turn) return <TurnView index={index} key={turn.id} turn={turn} {...props} />;\n if (subscription) return <SubscriptionView index={index} key={subscription.id} subscription={subscription} {...props} />;\n if (action) return <ActionView action={action} index={index} key={action.id} {...props} />;\n if (artifact) return <ArtifactView artifact={artifact} index={index} key={artifact.id} {...props} />;\n if (actor) return <ActorView actor={actor} index={index} key={actor.id} {...props} />;\n if (fallbackActor) return <ActorView actor={fallbackActor} index={index} key={fallbackActor.id} {...props} />;\n\n return <Empty><EmptyHeader><EmptyTitle>No actors</EmptyTitle></EmptyHeader></Empty>;\n}\n\nfunction BackButton({ canGoBack, onBack }: { canGoBack: boolean; onBack: () => void }) {\n if (!canGoBack) return null;\n return <Button aria-label=\"Back\" className=\"rounded-full\" onClick={onBack} size=\"icon\" variant=\"outline\"><ArrowLeftIcon /></Button>;\n}\n\nfunction StatusPill({ status }: { status: string }) {\n return <Badge className={`${pillClass} ${pillToneClass[status] ?? \"\"}`}>{STATUS_LABELS[status] ?? status}</Badge>;\n}\n\ntype SectionTab = {\n id: string;\n label: string;\n count?: number;\n icon: ReactNode;\n content: ReactNode;\n};\n\nconst sectionIconPaths = {\n chat: \"M21 11a8 8 0 0 1-8 8H7l-5 3V11a8 8 0 0 1 8-8h3a8 8 0 0 1 8 8ZM7 9h9M7 13h6\",\n info: \"M12 11v6M12 7h.01M22 12a10 10 0 1 1-20 0 10 10 0 0 1 20 0\",\n prompt: \"M6 3h12v18H6zM9 7h6M9 11h6M9 15h4\",\n source: \"m8 5-6 7 6 7m8-14 6 7-6 7m-3-15-2 16\",\n settings: \"M4 6h16M4 12h16M4 18h16M8 3v6M16 9v6M10 15v6\",\n inputs: \"M12 3v12m-4-4 4 4 4-4M4 14v7h16v-7\",\n turns: \"M20 7v5h-5M4 17v-5h5M6 7a7 7 0 0 1 12-2l2 3M4 16l2 3a7 7 0 0 0 12-2\",\n subscriptions: \"M12 3v6M4 15v-3h16v3M12 12v3M2 15h4v6H2zM10 15h4v6h-4zM18 15h4v6h-4z\",\n actions: \"m13 2-9 12h7l-1 8 10-13h-7z\",\n artifacts: \"M3 6h7l2 3h9v12H3zM3 6V3h7l2 3h7v3\",\n capabilities: \"m12 2 9 4v6c0 5-9 10-9 10S3 17 3 12V6zM8 12l3 3 5-6\",\n};\n\nfunction SectionIcon({ kind }: { kind: keyof typeof sectionIconPaths }) {\n return <svg aria-hidden=\"true\" fill=\"none\" height=\"15\" width=\"15\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" strokeWidth=\"1.7\" strokeLinecap=\"round\" strokeLinejoin=\"round\"><path d={sectionIconPaths[kind]} /></svg>;\n}\n\nfunction SectionTabs({ sections, children }: { sections: SectionTab[]; children: ReactNode }) {\n const id = useId();\n const [openId, setOpenId] = useState<string | null>(null);\n const open = sections.find((section) => section.id === openId);\n if (sections.length === 0) return <div className=\"flex min-h-0 flex-1 flex-col\">{children}</div>;\n\n return (\n <Tabs className=\"contents\" onValueChange={(value) => setOpenId(value === \"chat\" ? null : String(value))} value={open?.id ?? \"chat\"}>\n <TabsList aria-label=\"Actor views\" className=\"flex h-auto w-auto max-w-full flex-shrink-0 flex-nowrap justify-start gap-1 overflow-x-auto rounded-none border-b border-border-soft px-workspace-inset py-1.5\" variant=\"line\">\n <TabsTrigger aria-label=\"Show chat\" className={tabClass} id={`${id}-chat-tab`} title=\"Show chat\" value=\"chat\">\n <SectionIcon kind=\"chat\" />\n </TabsTrigger>\n {sections.map((section) => (\n <TabsTrigger\n aria-label={section.count === undefined ? section.label : `${section.label} (${section.count})`}\n className={tabClass}\n id={`${id}-${section.id}-tab`}\n key={section.id}\n title={section.count === undefined ? section.label : `${section.label} (${section.count})`}\n value={section.id}\n >\n {section.icon}\n </TabsTrigger>\n ))}\n </TabsList>\n {open && <TabsContent className=\"min-h-0 flex-1 overflow-y-auto border-b border-border-soft px-workspace-inset py-1.5 text-[0.76rem]\" id={`${id}-details`} tabIndex={0} value={open.id}>{open.content}</TabsContent>}\n <TabsContent className=\"flex min-h-0 flex-1 flex-col\" id={`${id}-chat`} keepMounted value=\"chat\">{children}</TabsContent>\n </Tabs>\n );\n}\n\nfunction CapabilityList({ grants }: { grants: RunCapabilityGrant[] }) {\n if (grants.length === 0) return <Badge className={pillClass}>No capabilities</Badge>;\n return (\n <div className=\"flex flex-wrap gap-1 py-1.5\">\n {grants.map((grant, position) => {\n const scope = grant.scope.kind === \"workspace\" ? grant.scope.path : \"Run\";\n const suffix = [\n grant.delegable ? \"delegable\" : undefined,\n grant.usable === false ? \"pass on only\" : undefined,\n ].filter(Boolean).join(\", \");\n return (\n <span className=\"rounded-full border border-border-soft px-2 py-0.5 text-[0.68rem] [&>small]:text-muted-foreground\" key={`${grant.capability}-${position}`} title={scope}>\n {grant.capability}\n {suffix && <small> {suffix}</small>}\n </span>\n );\n })}\n </div>\n );\n}\n\nconst actionClass = \"my-1.5 rounded-lg border border-[color-mix(in_srgb,var(--primary)_35%,var(--border))] bg-primary/5 px-2.5 py-2 [&>p]:my-1 [&>p]:text-[0.72rem] [&>p]:text-muted-foreground\";\n\nfunction ActionCard({ action, runId, onError }: { action: RunAction; runId: string; onError: (message: string) => void }) {\n const writable = useAccess().can(\"runs.write\");\n const [response, setResponse] = useState(\"\");\n const [busy, setBusy] = useState(false);\n\n const resolve = async (decision: \"approved\" | \"dismissed\", answer: string | undefined) => {\n if (busy) return;\n setBusy(true);\n try {\n await resolveAction(runId, action.id, decision, answer);\n } catch (error) {\n onError(error instanceof Error ? error.message : String(error));\n } finally {\n setBusy(false);\n }\n };\n\n return (\n <div className={actionClass}>\n <strong>{action.title}</strong>\n {action.description && <p>{action.description}</p>}\n {action.owner && <p>waiting for input - {action.owner}</p>}\n {action.input && (\n <Input\n className=\"my-1.5 text-[0.76rem]\"\n disabled={!writable}\n onChange={(event) => setResponse(event.target.value)}\n placeholder={action.input.placeholder ?? action.input.label}\n type=\"text\"\n value={response}\n />\n )}\n <div className=\"mt-1 flex justify-end gap-1.5\">\n <Button disabled={!writable || busy} onClick={() => void resolve(\"dismissed\", undefined)} size=\"sm\" variant=\"outline\">\n Dismiss\n </Button>\n <Button\n disabled={!writable || busy || (action.input?.required === true && response.trim() === \"\")}\n onClick={() => void resolve(\"approved\", response.trim() || undefined)}\n size=\"sm\"\n >\n Acknowledge\n </Button>\n </div>\n </div>\n );\n}\n\nfunction SourceListing({ handle, source }: { handle: string; source: string }) {\n return (\n <div className=\"overflow-x-auto rounded-lg border border-border-soft bg-border-soft/22\">\n <SourceCode content={source} language=\"typescript\" lineNumbers path={`${handle}.ts`} />\n </div>\n );\n}\n\nfunction ActorView({ actor, index, ...props }: FlowInspectorProps & { actor: RunActor; index: RunIndex }) {\n const access = useAccess();\n const programs = useProgramSlot();\n const writable = access.can(\"runs.write\");\n const inspect = access.can(\"runs.inspect\");\n const view = index.view;\n const programSource = inspect && programs?.runId === view.id ? programs.source(view, actor.id) : undefined;\n const [error, setError] = useState<string>();\n const inputs = view.inputs.filter((entry) => entry.actorId === actor.id).sort((left, right) => left.sequence - right.sequence);\n const turns = view.turns.filter((entry) => entry.actorId === actor.id).sort((left, right) => left.startedAt.localeCompare(right.startedAt));\n const subscriptions = view.subscriptions.filter((entry) => entry.subscriberId === actor.id);\n const actions = view.actions.filter((entry) => entry.askedBy === actor.id);\n const artifacts = view.artifacts.filter((entry) => entry.createdBy === actor.id);\n const pendingInputCount = inputs.filter(isPendingRunActorInput).length;\n const primary = actor.id === view.primaryActorId;\n const runCost = primary ? runCostUsd(view) : undefined;\n const active = actor.kind !== \"human\" && actor.lifecycle?.kind !== \"stopped\";\n const lifecycle = actor.kind === \"human\" ? undefined : actor.lifecycle?.kind ?? \"idle\";\n const inputsConfig = Object.entries(actor.inputs ?? {});\n const driver = actor.execution?.driver;\n const driverLabel = actor.kind === \"script\"\n ? \"TypeScript\"\n : !driver || driver.kind === \"manual\"\n ? \"Manual\"\n : [driver.kind, driver.config.provider].filter(Boolean).join(\" - \");\n\n const config = driver && driver.kind !== \"manual\" ? driver.config : undefined;\n const sections: SectionTab[] = [\n { id: \"info\", label: \"Info: model and run details\", icon: <SectionIcon kind=\"info\" />, content: (\n <div className={statusClass}>\n {lifecycle && <StatusPill status={lifecycle} />}\n <span>{primary ? \"Primary actor\" : ACTOR_KIND_LABELS[actor.kind]}</span>\n <span>{driverLabel}</span>\n {config?.model && <span className=\"max-w-[220px] truncate\" title={config.model}>{config.model}</span>}\n {config?.thinking && <span>Thinking level {thinkingLabel(config.thinking)}</span>}\n <span>{pendingInputCount} open</span>\n <span>{turns.length} Turns</span>\n {primary && runCost !== undefined && (\n <span title=\"Total cost of the run across all turns\">{formatCostUsd(runCost)}</span>\n )}\n </div>\n ) },\n ...(actor.prompt ? [{\n id: \"prompt\",\n label: \"Task\",\n icon: <SectionIcon kind=\"prompt\" />,\n content: <pre className={textBlockClass}>{actor.prompt}</pre>,\n }] : []),\n ...(programSource ? [{\n id: \"source\",\n label: \"Source code\",\n icon: <SectionIcon kind=\"source\" />,\n content: programSource,\n }] : actor.source ? [{\n id: \"source\",\n label: \"Source code\",\n icon: <SectionIcon kind=\"source\" />,\n count: actor.source.replace(/\\n$/, \"\").split(\"\\n\").length,\n content: <SourceListing handle={actor.handle} source={actor.source} />,\n }] : []),\n ...(inputsConfig.length > 0 ? [{\n id: \"settings\",\n label: \"Settings\",\n icon: <SectionIcon kind=\"settings\" />,\n count: inputsConfig.length,\n content: (\n <dl className={propertiesClass}>\n {inputsConfig.map(([name, value]) => <span key={name}><dt>{name}</dt><dd>{value}</dd></span>)}\n </dl>\n ),\n }] : []),\n {\n id: \"inputs\",\n label: \"Inputs\",\n icon: <SectionIcon kind=\"inputs\" />,\n count: inputs.length,\n content: (\n <div className={rowsClass}>\n {inputs.map((input) => (\n <button className={rowClass} key={input.id} onClick={() => props.onNavigate({ type: \"input\", id: input.id })} type=\"button\">\n <span className={rowCopyClass}><strong>{input.content}</strong><small>{inputDeliveryLabel(index, input)} - {formatTime(input.enqueuedAt)}</small></span>\n <StatusPill status={input.lifecycle.kind === \"discarded\" ? \"dismissed\" : input.lifecycle.kind === \"claimed\" ? index.turnById.get(input.lifecycle.turnId)?.status ?? \"completed\" : \"pending\"} />\n </button>\n ))}\n </div>\n ),\n },\n {\n id: \"turns\",\n label: \"Turns\",\n icon: <SectionIcon kind=\"turns\" />,\n count: turns.length,\n content: (\n <div className={rowsClass}>\n {turns.map((turn) => (\n <button className={rowClass} key={turn.id} onClick={() => props.onNavigate({ type: \"turn\", id: turn.id })} type=\"button\">\n <span className={rowCopyClass}><strong>{shortId(turn.id)}</strong><small>{formatTime(turn.startedAt)}</small></span>\n <StatusPill status={turn.status} />\n </button>\n ))}\n </div>\n ),\n },\n {\n id: \"subscriptions\",\n label: \"Subscriptions\",\n icon: <SectionIcon kind=\"subscriptions\" />,\n count: subscriptions.length,\n content: (\n <div className={rowsClass}>\n {subscriptions.map((subscription) => (\n <button className={rowClass} key={subscription.id} onClick={() => props.onNavigate({ type: \"subscription\", id: subscription.id })} type=\"button\">\n <span className={rowCopyClass}><strong>{subscription.eventTypes.join(\", \")}</strong><small>{shortId(subscription.id)}</small></span>\n <StatusPill status={subscription.status} />\n </button>\n ))}\n </div>\n ),\n },\n ...(actions.length > 0 ? [{\n id: \"actions\",\n label: \"Actions\",\n icon: <SectionIcon kind=\"actions\" />,\n count: actions.length,\n content: (\n <div className={rowsClass}>\n {actions.map((action) => (\n <button className={rowClass} key={action.id} onClick={() => props.onNavigate({ type: \"action\", id: action.id })} type=\"button\">\n <span className={rowCopyClass}><strong>{action.title}</strong><small>{formatTime(action.proposedAt)}</small></span>\n <StatusPill status={action.status} />\n </button>\n ))}\n </div>\n ),\n }] : []),\n ...(artifacts.length > 0 ? [{\n id: \"artifacts\",\n label: \"Artifacts\",\n icon: <SectionIcon kind=\"artifacts\" />,\n count: artifacts.length,\n content: (\n <div className={rowsClass}>\n {artifacts.map((artifact) => (\n <button className={rowClass} key={artifact.id} onClick={() => props.onNavigate({ type: \"artifact\", id: artifact.id })} type=\"button\">\n <span className={rowCopyClass}><strong>{artifact.title}</strong><small>{formatBytes(artifact.size)} - {artifact.mediaType}</small></span>\n </button>\n ))}\n </div>\n ),\n }] : []),\n {\n id: \"capabilities\",\n label: \"Capabilities\",\n icon: <SectionIcon kind=\"capabilities\" />,\n count: actor.grants.length,\n content: <CapabilityList grants={actor.grants} />,\n },\n {\n id: \"tools\",\n label: \"Tools\",\n icon: <WrenchIcon size={15} />,\n ...(actor.toolNames ? { count: actor.toolNames.length } : {}),\n content: (\n <p className={mutedClass}>\n {actor.toolNames === null ? \"All available tools\" : actor.toolNames?.join(\", \") || \"No tools\"}\n </p>\n ),\n },\n ];\n\n return (\n <div className={inspectorClass}>\n <header className={headClass}>\n <BackButton canGoBack={props.canGoBack} onBack={props.onBack} />\n <div className=\"flex min-w-0 flex-1 items-baseline gap-2 [&>span]:flex-1\">\n <h2>{actor.displayName}</h2>\n <span className={subtitleClass}>\n @{actor.handle}{inspect && actor.createdBy ? ` - created by ${actorLabel(index, actor.createdBy)}` : \"\"}\n </span>\n </div>\n {active && writable && (\n <Button\n className=\"flex-shrink-0\"\n onClick={() => void stopActor(view.id, actor.id, STOP_REASON).catch((caught: Error) => setError(caught.message))}\n size=\"sm\"\n title={`Stop @${actor.handle} and its assigned children permanently; the chat input, in contrast, only interrupts the running turn`}\n variant=\"destructive\"\n >\n Stop\n </Button>\n )}\n {inspect && writable && actor.lifecycle?.kind === \"stopped\" && actor.kind !== \"human\" && (\n <Button\n onClick={() => void restartActor(view.id, actor.id).catch((caught: Error) => setError(caught.message))}\n size=\"sm\"\n variant=\"outline\"\n >\n Restart\n </Button>\n )}\n </header>\n {error && <p className={errorClass}>{error}</p>}\n <SectionTabs sections={inspect ? sections : []}>\n <ActorChat\n actor={actor}\n view={view}\n presentation=\"inspector\"\n display=\"inspector\"\n className=\"min-h-0 flex-1\"\n primaryMessages={props.primaryMessages}\n conversation={props.actorConversations?.[actor.id]}\n historyError={props.conversationError}\n onNavigate={props.onNavigate}\n running={primary ? props.primaryRunning : lifecycle === \"running\"}\n />\n <ActorChatControls actor={actor} view={view} composerVisible={props.composerVisible} display=\"inspector\"\n running={primary ? props.primaryRunning : lifecycle === \"running\"} />\n </SectionTabs>\n </div>\n );\n}\n\nfunction DetailHeader({ eyebrow, title, subtitle, ...props }: {\n eyebrow: string;\n title: string;\n subtitle: string;\n canGoBack: boolean;\n onBack: () => void;\n}) {\n return (\n <header className={headClass}>\n <BackButton canGoBack={props.canGoBack} onBack={props.onBack} />\n <div className=\"min-w-0 flex-1\"><p className=\"mb-0.5 text-[0.66rem] font-semibold tracking-[0.08em] uppercase text-muted-foreground\">{eyebrow}</p><h2>{title}</h2><span className={subtitleClass}>{subtitle}</span></div>\n </header>\n );\n}\n\nfunction InputView({ index, input, ...props }: FlowInspectorProps & { index: RunIndex; input: RunActorInput }) {\n const artifacts = input.artifactIds.flatMap((id) => {\n const artifact = index.artifactById.get(id);\n return artifact ? [artifact] : [];\n });\n return (\n <div className={inspectorClass}>\n <DetailHeader canGoBack={props.canGoBack} eyebrow=\"ActorInput\" onBack={props.onBack} subtitle={formatTime(input.enqueuedAt)} title={shortId(input.id)} />\n <div className={scrollClass}>\n <section className={sectionClass}><h3>Content</h3><pre className={textBlockClass}>{input.content}</pre></section>\n <section className={sectionClass}>\n <h3>Routing</h3>\n <dl className={propertiesClass}>\n <dt>Actor</dt><dd><EntityLink id={input.actorId} index={index} onNavigate={props.onNavigate} /></dd>\n <dt>Enqueued by</dt><dd><EntityLink id={input.enqueuedBy} index={index} onNavigate={props.onNavigate} /></dd>\n <dt>Turn</dt><dd>{input.lifecycle.kind === \"claimed\" ? <SelectionLink label={shortId(input.lifecycle.turnId)} onNavigate={props.onNavigate} selection={{ type: \"turn\", id: input.lifecycle.turnId }} /> : input.lifecycle.kind === \"discarded\" ? \"dismissed\" : \"waiting\"}</dd>\n <dt>Subscription</dt><dd>{input.subscriptionId ? <SelectionLink label={shortId(input.subscriptionId)} onNavigate={props.onNavigate} selection={{ type: \"subscription\", id: input.subscriptionId }} /> : \"none\"}</dd>\n {input.lifecycle.kind === \"discarded\" && <>\n <dt>Dismissed</dt><dd>{formatTime(input.lifecycle.at)}</dd>\n <dt>Reason</dt><dd>{input.lifecycle.reason}</dd>\n </>}\n </dl>\n </section>\n {input.sourceEventIds.length > 0 && <section className={sectionClass}><h3>Source events</h3><p className={mutedClass}>{input.sourceEventIds.join(\", \")}</p></section>}\n {artifacts.length > 0 && <ArtifactRows artifacts={artifacts} onNavigate={props.onNavigate} />}\n </div>\n </div>\n );\n}\n\nfunction TurnView({ index, turn, ...props }: FlowInspectorProps & { index: RunIndex; turn: RunTurn }) {\n const usage = turnUsageOf(turn);\n return (\n <div className={inspectorClass}>\n <DetailHeader canGoBack={props.canGoBack} eyebrow=\"Turn\" onBack={props.onBack} subtitle={formatTime(turn.startedAt)} title={shortId(turn.id)} />\n <div className={statusClass}><StatusPill status={turn.status} /></div>\n <div className={scrollClass}>\n <section className={sectionClass}>\n <h3>Details</h3>\n <dl className={propertiesClass}>\n <dt>Actor</dt><dd><EntityLink id={turn.actorId} index={index} onNavigate={props.onNavigate} /></dd>\n <dt>Input</dt><dd><SelectionLink label={shortId(turn.inputId)} onNavigate={props.onNavigate} selection={{ type: \"input\", id: turn.inputId }} /></dd>\n <dt>Ended</dt><dd>{turn.finishedAt ? formatTime(turn.finishedAt) : \"running\"}</dd>\n {turn.reason && <><dt>Reason</dt><dd>{turn.reason}</dd></>}\n </dl>\n </section>\n {usage && (\n <section className={sectionClass}>\n <h3>Usage</h3>\n <dl className={propertiesClass}>\n <dt>Input tokens</dt><dd>{usage.inputTokens ?? 0}</dd>\n <dt>Output tokens</dt><dd>{usage.outputTokens ?? 0}</dd>\n <dt>Cache read</dt><dd>{usage.cacheReadTokens ?? 0}</dd>\n <dt>Cache written</dt><dd>{usage.cacheWriteTokens ?? 0}</dd>\n <dt>Cost</dt><dd>{(usage.costUsd ?? 0).toFixed(6)} USD</dd>\n </dl>\n </section>\n )}\n </div>\n </div>\n );\n}\n\nfunction SubscriptionView({ index, subscription, ...props }: FlowInspectorProps & { index: RunIndex; subscription: RunSubscription }) {\n return (\n <div className={inspectorClass}>\n <DetailHeader canGoBack={props.canGoBack} eyebrow=\"Subscription\" onBack={props.onBack} subtitle={formatTime(subscription.createdAt)} title={shortId(subscription.id)} />\n <div className={statusClass}><StatusPill status={subscription.status} /></div>\n <div className={scrollClass}>\n <section className={sectionClass}>\n <h3>Filter</h3>\n <dl className={propertiesClass}>\n <dt>Subscriber</dt><dd><EntityLink id={subscription.subscriberId} index={index} onNavigate={props.onNavigate} /></dd>\n <dt>Source actors</dt><dd>{subscription.sourceActorIds?.map((id) => actorLabel(index, id)).join(\", \") ?? \"all\"}</dd>\n <dt>Actor kinds</dt><dd>{subscription.sourceActorKinds?.join(\", \") ?? \"all\"}</dd>\n <dt>Event types</dt><dd>{subscription.eventTypes.join(\", \")}</dd>\n <dt>Own events</dt><dd>{subscription.includeSelf ? \"yes\" : \"no\"}</dd>\n <dt>Created by</dt><dd><EntityLink id={subscription.createdBy} index={index} onNavigate={props.onNavigate} /></dd>\n {subscription.status !== \"active\" && <><dt>Reason</dt><dd>{subscription.reason}</dd></>}\n {subscription.status === \"failed\" && <><dt>Error event</dt><dd>{subscription.sourceEventId}</dd></>}\n </dl>\n </section>\n {subscription.sourceActorIds && <section className={sectionClass}><h3>Source actors</h3><ActorRows actorIds={subscription.sourceActorIds} index={index} onNavigate={props.onNavigate} /></section>}\n </div>\n </div>\n );\n}\n\nfunction ActionView({ action, index, ...props }: FlowInspectorProps & { action: RunAction; index: RunIndex }) {\n const [error, setError] = useState<string>();\n return (\n <div className={inspectorClass}>\n <DetailHeader canGoBack={props.canGoBack} eyebrow=\"Action\" onBack={props.onBack} subtitle={actorLabel(index, action.askedBy)} title={action.title} />\n <div className={statusClass}><StatusPill status={action.status} /></div>\n <div className={scrollClass}>\n {action.status === \"pending\" && <ActionCard action={action} onError={setError} runId={index.view.id} />}\n {action.description && <section className={sectionClass}><h3>Description</h3><p>{action.description}</p></section>}\n <section className={sectionClass}>\n <h3>Details</h3>\n <dl className={propertiesClass}>\n <dt>Asked by</dt><dd><EntityLink id={action.askedBy} index={index} onNavigate={props.onNavigate} /></dd>\n <dt>Proposed</dt><dd>{formatTime(action.proposedAt)}</dd>\n {action.resolvedAt && <><dt>Resolved</dt><dd>{formatTime(action.resolvedAt)}</dd></>}\n {action.owner && <><dt>Owner</dt><dd>{action.owner}</dd></>}\n {action.result !== null && action.result !== undefined && <><dt>Result</dt><dd>{typeof action.result === \"string\" ? action.result : JSON.stringify(action.result)}</dd></>}\n </dl>\n </section>\n {Object.keys(action.parameters).length > 0 && <section className={sectionClass}><h3>Parameters</h3><pre className={textBlockClass}>{JSON.stringify(action.parameters, null, 2)}</pre></section>}\n {action.payload !== null && action.payload !== undefined && <section className={sectionClass}><h3>Payload</h3><pre className={textBlockClass}>{JSON.stringify(action.payload, null, 2)}</pre></section>}\n {error && <p className={errorClass}>{error}</p>}\n </div>\n </div>\n );\n}\n\nfunction SelectionLink({ label, onNavigate, selection }: {\n label: string;\n onNavigate: (selection: FlowSelection) => void;\n selection: FlowSelection;\n}) {\n return <button className={linkClass} onClick={() => onNavigate(selection)} type=\"button\">{label}</button>;\n}\n\nfunction EntityLink({ id, index, onNavigate }: { id: string; index: RunIndex; onNavigate: (selection: FlowSelection) => void }) {\n return <SelectionLink label={actorLabel(index, id)} onNavigate={onNavigate} selection={{ type: \"actor\", id }} />;\n}\n\nfunction ActorRows({ actorIds, index, onNavigate }: {\n actorIds: string[];\n index: RunIndex;\n onNavigate: (selection: FlowSelection) => void;\n}) {\n return (\n <div className={rowsClass}>\n {actorIds.map((id) => {\n const actor = index.actorById.get(id);\n return (\n <button className={rowClass} key={id} onClick={() => onNavigate({ type: \"actor\", id })} type=\"button\">\n <span className={rowCopyClass}><strong>{actor?.displayName ?? shortId(id)}</strong><small>{actorLabel(index, id)}</small></span>\n {actor && <Badge className={pillClass}>{ACTOR_KIND_LABELS[actor.kind]}</Badge>}\n </button>\n );\n })}\n </div>\n );\n}\n\nfunction ArtifactRows({ artifacts, onNavigate }: { artifacts: RunArtifact[]; onNavigate: (selection: FlowSelection) => void }) {\n return (\n <section className={sectionClass}>\n <h3>Artifacts</h3>\n <div className={rowsClass}>\n {artifacts.map((artifact) => (\n <button className={rowClass} key={artifact.id} onClick={() => onNavigate({ type: \"artifact\", id: artifact.id })} type=\"button\">\n <span className={rowCopyClass}><strong>{artifact.title}</strong><small>{formatBytes(artifact.size)} - {artifact.mediaType}</small></span>\n </button>\n ))}\n </div>\n </section>\n );\n}\n\ntype ArtifactContent =\n | { kind: \"loading\" }\n | { kind: \"image\" }\n | { kind: \"download\" }\n | { kind: \"text\"; text: string }\n | { kind: \"error\"; message: string };\n\nconst isTextMedia = (mediaType: string) => {\n const lower = mediaType.toLowerCase();\n return lower.startsWith(\"text/\") || lower.includes(\"json\") || lower.includes(\"xml\") || lower.includes(\"yaml\");\n};\n\ninterface ArtifactContentHandle {\n content: ArtifactContent | undefined;\n retry: () => void;\n}\n\nfunction useArtifactContent(runId: string, artifact: RunArtifact | undefined): ArtifactContentHandle {\n const cacheRef = useRef(new Map<string, ArtifactContent>());\n const [version, setVersion] = useState(0);\n const artifactId = artifact?.id;\n\n const retry = () => {\n if (artifactId) cacheRef.current.delete(artifactId);\n setVersion((value) => value + 1);\n };\n\n useEffect(() => {\n if (!artifact || cacheRef.current.has(artifact.id)) return;\n if (artifact.mediaType.toLowerCase().startsWith(\"image/\")) {\n cacheRef.current.set(artifact.id, { kind: \"image\" });\n setVersion((value) => value + 1);\n return;\n }\n if (!isTextMedia(artifact.mediaType)) {\n cacheRef.current.set(artifact.id, { kind: \"download\" });\n setVersion((value) => value + 1);\n return;\n }\n cacheRef.current.set(artifact.id, { kind: \"loading\" });\n setVersion((value) => value + 1);\n void (async () => {\n try {\n const response = await fetch(runArtifactContentUrl(runId, artifact.id), { headers: { Accept: artifact.mediaType } });\n if (!response.ok) throw new Error(`${response.status} ${response.statusText}`);\n let text = await response.text();\n if (artifact.mediaType.toLowerCase().includes(\"json\")) {\n try {\n text = JSON.stringify(JSON.parse(text), null, 2);\n } catch {\n }\n }\n cacheRef.current.set(artifact.id, { kind: \"text\", text });\n } catch (error) {\n cacheRef.current.set(artifact.id, { kind: \"error\", message: error instanceof Error ? error.message : String(error) });\n }\n setVersion((value) => value + 1);\n })();\n }, [artifact, runId, version]);\n\n return { content: artifact ? cacheRef.current.get(artifact.id) : undefined, retry };\n}\n\ntype DiffRow = { kind: \"same\" | \"added\" | \"removed\"; text: string };\nconst DIFF_LINE_LIMIT = 5000;\n\nconst lineDiff = (left: string[], right: string[]): DiffRow[] => {\n const lengths = Array.from({ length: left.length + 1 }, () => new Uint32Array(right.length + 1));\n for (let row = left.length - 1; row >= 0; row -= 1) {\n for (let column = right.length - 1; column >= 0; column -= 1) {\n lengths[row][column] = left[row] === right[column]\n ? lengths[row + 1][column + 1] + 1\n : Math.max(lengths[row + 1][column], lengths[row][column + 1]);\n }\n }\n\n const rows: DiffRow[] = [];\n let row = 0;\n let column = 0;\n while (row < left.length && column < right.length) {\n if (left[row] === right[column]) {\n rows.push({ kind: \"same\", text: left[row] });\n row += 1;\n column += 1;\n } else if (lengths[row + 1][column] >= lengths[row][column + 1]) {\n rows.push({ kind: \"removed\", text: left[row] });\n row += 1;\n } else {\n rows.push({ kind: \"added\", text: right[column] });\n column += 1;\n }\n }\n while (row < left.length) rows.push({ kind: \"removed\", text: left[row++] });\n while (column < right.length) rows.push({ kind: \"added\", text: right[column++] });\n return rows;\n};\n\nfunction ArtifactDiff({ artifact, index }: { artifact: RunArtifact; index: RunIndex }) {\n const previous = artifact.previousVersionId ? index.artifactById.get(artifact.previousVersionId) : undefined;\n const before = useArtifactContent(index.view.id, previous).content;\n const after = useArtifactContent(index.view.id, artifact).content;\n const beforeText = before?.kind === \"text\" ? before.text : undefined;\n const afterText = after?.kind === \"text\" ? after.text : undefined;\n const rows = useMemo(() => {\n if (beforeText === undefined || afterText === undefined) return undefined;\n const left = beforeText.split(\"\\n\");\n const right = afterText.split(\"\\n\");\n if (left.length > DIFF_LINE_LIMIT || right.length > DIFF_LINE_LIMIT) return \"too large\" as const;\n return lineDiff(left, right);\n }, [beforeText, afterText]);\n\n if (!artifact.previousVersionId) return null;\n if (!previous) return <p className={mutedClass}>Previous version not in this projection.</p>;\n if (!before || !after || before.kind === \"loading\" || after.kind === \"loading\") return <p className={mutedClass}>Loading comparison ...</p>;\n if (rows === undefined) return <p className={mutedClass}>{artifact.mediaType} is not compared line by line.</p>;\n if (rows === \"too large\") return <p className={mutedClass}>Too large for the line comparison (more than {DIFF_LINE_LIMIT} lines).</p>;\n if (rows.every((entry) => entry.kind === \"same\")) return <p className={mutedClass}>Both versions have the same text.</p>;\n const marks = { same: \" \", added: \"+\", removed: \"-\" };\n return <pre className=\"my-1.5 overflow-x-auto rounded-lg bg-foreground/4 p-2 text-[0.7rem] [&>span]:block [&>span]:whitespace-pre [&>span[data-diff=added]]:bg-success-soft [&>span[data-diff=removed]]:bg-destructive-soft\">{rows.map((entry, position) => <span data-diff={entry.kind} key={position}>{marks[entry.kind]} {entry.text}{\"\\n\"}</span>)}</pre>;\n}\n\nfunction ArtifactView({ artifact, index, ...props }: FlowInspectorProps & { artifact: RunArtifact; index: RunIndex }) {\n const view = index.view;\n const { content, retry } = useArtifactContent(view.id, artifact);\n const carriedOn = view.inputs.filter((input) => input.artifactIds.includes(artifact.id));\n return (\n <div className={inspectorClass}>\n <header className={headClass}>\n <BackButton canGoBack={props.canGoBack} onBack={props.onBack} />\n <div className=\"min-w-0 flex-1\">\n <p className=\"mb-0.5 text-[0.66rem] font-semibold tracking-[0.08em] uppercase text-muted-foreground\">Artifact</p>\n <h2>{artifact.title}</h2>\n <span className={subtitleClass}>by {actorLabel(index, artifact.createdBy)} - {formatBytes(artifact.size)} - {artifact.mediaType}</span>\n </div>\n <Button render={<a href={runArtifactContentUrl(view.id, artifact.id)} />} size=\"sm\" variant=\"outline\">Download</Button>\n </header>\n <div className={scrollClass}>\n <section className={sectionClass}>\n <h3>Content</h3>\n {(!content || content.kind === \"loading\") && <p className={mutedClass}>Loading artifact ...</p>}\n {content?.kind === \"error\" && <p className={errorClass}>{content.message} <button className={linkClass} onClick={retry} type=\"button\">Reload</button></p>}\n {content?.kind === \"download\" && <p className={mutedClass}>No preview for {artifact.mediaType}.</p>}\n {content?.kind === \"image\" && <img alt={artifact.title} className=\"max-w-full rounded-lg\" src={runArtifactContentUrl(view.id, artifact.id)} />}\n {content?.kind === \"text\" && <pre className={textBlockClass}>{content.text}</pre>}\n </section>\n {artifact.previousVersionId && <section className={sectionClass}><h3>Change from previous version</h3><ArtifactDiff artifact={artifact} index={index} /></section>}\n {carriedOn.length > 0 && (\n <section className={sectionClass}>\n <h3>Used in inputs</h3>\n <div className={rowsClass}>\n {carriedOn.map((input) => (\n <button className={rowClass} key={input.id} onClick={() => props.onNavigate({ type: \"input\", id: input.id })} type=\"button\">\n <span className={rowCopyClass}><strong>{input.content}</strong><small>{inputDeliveryLabel(index, input)} - {formatTime(input.enqueuedAt)}</small></span>\n </button>\n ))}\n </div>\n </section>\n )}\n <section className={sectionClass}>\n <h3>Details</h3>\n <dl className={propertiesClass}>\n <dt>Created by</dt><dd><EntityLink id={artifact.createdBy} index={index} onNavigate={props.onNavigate} /></dd>\n <dt>Hash</dt><dd>{shortId(artifact.hash)}</dd>\n <dt>Created</dt><dd>{formatTime(artifact.createdAt)}</dd>\n {artifact.previousVersionId && <><dt>Previous version</dt><dd><SelectionLink label={shortId(artifact.previousVersionId)} onNavigate={props.onNavigate} selection={{ type: \"artifact\", id: artifact.previousVersionId }} /></dd></>}\n </dl>\n </section>\n </div>\n </div>\n );\n}\n", "import type { WorkspaceTabContext } from \"@ragents/web/PluginRegistry\";\nimport { Button } from \"@ragents/web/ui\";\nimport { chatPrimaryId, runViewFrom } from \"@ragents/web/run-view\";\nimport { FlowInspector, type FlowSelection } from \"./FlowInspector\";\n\nexport const INSPECTION_TAB_ID = \"ragents.orchestration.inspection\";\n\nexport function InspectionPanel({ navigation, selection, session }: WorkspaceTabContext) {\n const view = runViewFrom(session.runView);\n const primary = view && chatPrimaryId(view);\n const selected = (selection ?? undefined) as FlowSelection | undefined;\n return <div className=\"flex h-full min-h-0 flex-col\">\n <nav aria-label=\"Inspect participants\" className=\"flex flex-none flex-wrap gap-1 border-b border-border p-2\">\n {view?.actors.map((actor) => <Button key={actor.id} onClick={() => navigation.openTab(INSPECTION_TAB_ID, { type: \"actor\", id: actor.id })} size=\"xs\" variant=\"ghost\">@{actor.handle}</Button>)}\n </nav>\n <div className=\"min-h-0 flex-1\"><FlowInspector actorConversations={session.actorConversations} canGoBack={selected !== undefined} composerVisible={false}\n conversationError={session.conversationError} onBack={() => navigation.openTab(INSPECTION_TAB_ID, null)}\n onNavigate={(next) => navigation.openTab(INSPECTION_TAB_ID, next)} primaryMessages={session.messages}\n primaryRunning={session.running} selection={selected ?? (primary ? { type: \"actor\", id: primary } : undefined)} view={view} /></div>\n </div>;\n}\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"@ragents/web/run-apps\", \"RunAppView\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"@ragents/web/run-apps\", \"runApps\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"@ragents/web/run-apps\", \"selectedRunApp\");\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"@ragents/web/run-panel/host\", \"useRunPanelHost\");\n", "import type { ChatStartupStatus } from \"quassel/events\";\nimport type { StartupNoticeState } from \"@ragents/web/ui\";\nimport { isPendingRunActorInput, type RunView } from \"@ragents/web/run-view\";\n\nexport type SurfaceStartupState = StartupNoticeState;\n\nexport function surfaceStartupState({ view, startup, connected, running, error }: {\n view: RunView | undefined;\n startup: ChatStartupStatus | undefined;\n connected: boolean;\n running: boolean;\n error: string | undefined;\n}): SurfaceStartupState | undefined {\n if (startup?.status === \"failed\") return { kind: \"error\", title: \"The run could not be prepared\", detail: startup.message };\n if (error) return { kind: \"error\", title: \"The run status is unreachable\", detail: error };\n if (startup?.status === \"preparing\") return { kind: \"working\", title: \"Preparing run\", detail: startup.message };\n const actors = view?.actors.filter((actor) => actor.kind !== \"human\") ?? [];\n const activeActors = actors.filter((actor) => actor.lifecycle?.kind !== \"stopped\");\n if (actors.length && !activeActors.length) return { kind: \"stopped\", title: \"The run was stopped\", detail: \"No further work is performed.\" };\n if (view?.actions.some((action) => action.status === \"pending\")) return {\n kind: \"waiting\", title: \"Your input is needed\", detail: \"An action in the chat is waiting for your input.\",\n };\n const activeIds = new Set(activeActors.map((actor) => actor.id));\n const working = running || activeActors.some((actor) => actor.lifecycle?.kind === \"running\")\n || view?.turns.some((turn) => activeIds.has(turn.actorId) && turn.status === \"running\")\n || view?.inputs.some((input) => activeIds.has(input.actorId) && isPendingRunActorInput(input));\n if (working) return { kind: \"working\", title: \"Setting up the run\", detail: \"The interface is being built. The elements appear automatically.\" };\n const failed = activeActors.map((actor) => view?.turns.filter((turn) => turn.actorId === actor.id).at(-1))\n .find((turn) => turn?.status === \"failed\" || turn?.status === \"interrupted\");\n if (failed) return { kind: \"error\", title: \"The setup was halted\", detail: failed.reason || \"The last work step could not be completed.\" };\n if (!connected) return { kind: \"working\", title: \"Loading run\", detail: \"Connecting to the run.\" };\n return undefined;\n}\n", "export const ORCHESTRATION_PLUGIN_ID = \"ragents.orchestration\";\n\n/** Button in the status bar: full bar height, no rounding, calm surface. */\nexport const statusControlClass = \"flex h-full min-w-statusbar items-center justify-center self-stretch whitespace-nowrap px-2.5 text-[0.7rem] text-foreground hover:bg-primary/12 aria-expanded:bg-primary/12 focus-visible:outline-2 focus-visible:outline-primary focus-visible:-outline-offset-2 disabled:opacity-50 disabled:cursor-not-allowed\";\n\n/** Frame for the plugin contributions of an actor card; a contribution brings no spacing of its own. */\nexport const cardSectionsClass = \"grid gap-2.5 border-t border-border-soft px-3 pt-2.5 pb-2.5 empty:hidden\";\n", "import { useRef, type ReactNode, type RefObject } from \"react\";\nimport { XIcon } from \"lucide-react\";\nimport { Button, Popover, PopoverContent } from \"@ragents/web/ui\";\n\nexport function ActorPopout({ open, id, label, closeLabel, buttonRef, onClose, width, height, placement = \"bottom\", focusInput = false, keepMounted = false, role, headerContent, children }: {\n open: boolean;\n id: string;\n label: string;\n closeLabel: string;\n buttonRef: RefObject<HTMLButtonElement | null>;\n onClose: (restoreFocus?: boolean) => void;\n /** Pixels or the whole available width next to the anchor. */\n width: number | \"available\";\n height: number;\n placement?: \"bottom\" | \"top\";\n focusInput?: boolean;\n keepMounted?: boolean;\n role: \"dialog\" | \"region\";\n headerContent?: ReactNode;\n children: ReactNode;\n}) {\n const panelRef = useRef<HTMLDivElement>(null);\n const pressedAnchor = (details: { reason: string; event: Event }) =>\n details.reason === \"outside-press\" && details.event.target instanceof Node && buttonRef.current?.contains(details.event.target) === true;\n return <Popover open={open} onOpenChange={(next, details) => { if (!next && !pressedAnchor(details)) onClose(); }}>\n <PopoverContent align=\"start\" anchor={buttonRef} aria-label={label} className=\"flex min-h-0 min-w-0 flex-col gap-0 overflow-hidden rounded-b-sm p-0 text-[0.76rem] focus:outline-none data-[placement=top]:rounded-t-sm data-[placement=top]:rounded-b-none [&_input[type=checkbox]]:m-0 [&_input[type=checkbox]]:flex-none [&_input[type=checkbox]]:accent-primary\" collisionPadding={8} data-surface-scroll=\"true\" dim\n data-placement={placement} id={id} initialFocus={focusInput ? () => panelRef.current?.querySelector(\"input\") ?? true : true} keepMounted={keepMounted}\n ref={panelRef} role={role} side={placement}\n style={{ width: width === \"available\" ? \"var(--available-width)\" : width, height, maxWidth: \"var(--available-width)\", maxHeight: \"var(--available-height)\" }}>\n <header className=\"flex flex-none items-center justify-between gap-2 border-b border-border-soft px-2.5 py-2\">\n <strong className=\"shrink-0\">{label}</strong>\n {headerContent}\n <Button aria-label={closeLabel} onClick={() => onClose(true)} size=\"icon-sm\" title={closeLabel} variant=\"ghost\"><XIcon /></Button>\n </header>\n {children}\n </PopoverContent>\n </Popover>;\n}\n", "import { chatPrimaryId, type RunActor, type RunView } from \"@ragents/web/run-view\";\n\n/** The actors of the chip row: coordinator first, then in creation order; without the inspect right only LLM agents. */\nexport const runPanelActors = (view: RunView, inspect: boolean): RunActor[] => {\n const candidates = view.actors.filter((actor) => actor.kind !== \"human\" && (inspect || actor.kind === \"agent\"));\n const primaryId = chatPrimaryId(view);\n const primary = candidates.filter((actor) => actor.id === primaryId);\n return [...primary, ...candidates.filter((actor) => actor.id !== primaryId)];\n};\n\nexport const pendingInputCount = (view: RunView, actorId: string): number =>\n view.inputs.filter((input) => input.actorId === actorId && input.lifecycle.kind === \"pending\").length;\n", "import { chatPrimaryId, type RunActor, type RunView } from \"@ragents/web/run-view\";\n\nexport interface AddresseeActorNode {\n kind: \"actor\";\n actor: RunActor;\n children: AddresseeNode[];\n}\n\nexport interface AddresseeGroupNode {\n kind: \"group\";\n key: string;\n label: string;\n members: AddresseeActorNode[];\n}\n\nexport type AddresseeNode = AddresseeActorNode | AddresseeGroupNode;\n\nexport type AddresseeStatus = \"running\" | \"input\" | \"waiting\" | \"stopped\";\n\n/** From this many similar siblings on, the tree combines them into a group. */\nexport const ADDRESSEE_GROUP_MIN = 4;\n/** The search appears only with more entries than this. */\nexport const ADDRESSEE_SEARCH_ABOVE = 12;\nconst SUMMARY_LENGTH = 90;\n\nconst STATUS_WORDS: Readonly<Record<AddresseeStatus, readonly [one: string, many: string]>> = {\n running: [\"working\", \"working\"],\n input: [\"waiting for input\", \"waiting for input\"],\n waiting: [\"waiting\", \"waiting\"],\n stopped: [\"stopped\", \"stopped\"],\n};\nconst STATUS_ORDER: readonly AddresseeStatus[] = [\"running\", \"input\", \"waiting\", \"stopped\"];\n\nconst lower = (text: string) => text.toLocaleLowerCase(\"en-US\");\n\nconst shortened = (text: string): string => {\n const line = text.split(\"\\n\").map((entry) => entry.replace(/\\s+/g, \" \").trim()).find((entry) => entry !== \"\") ?? \"\";\n if (line.length <= SUMMARY_LENGTH) return line;\n const cut = line.slice(0, SUMMARY_LENGTH - 3);\n const space = cut.lastIndexOf(\" \");\n return `${(space > SUMMARY_LENGTH / 2 ? cut.slice(0, space) : cut).trimEnd()}...`;\n};\n\nexport const addresseeStatus = (view: RunView, actor: RunActor): AddresseeStatus =>\n actor.lifecycle?.kind === \"stopped\" ? \"stopped\"\n : view.actions.some((action) => action.status === \"pending\" && action.askedBy === actor.id) ? \"input\"\n : actor.lifecycle?.kind === \"running\" ? \"running\" : \"waiting\";\n\nexport const addresseeStatusWord = (status: AddresseeStatus, count = 1): string => STATUS_WORDS[status][count === 1 ? 0 : 1];\n\n/** Counts the states of a group in a fixed order, e.g. \"3 working, 34 waiting\". */\nexport const addresseeStatusCounts = (view: RunView, actors: readonly RunActor[]): string => {\n const counts = new Map<AddresseeStatus, number>();\n for (const status of actors.map((actor) => addresseeStatus(view, actor))) counts.set(status, (counts.get(status) ?? 0) + 1);\n return STATUS_ORDER.flatMap((status) => {\n const count = counts.get(status) ?? 0;\n return count > 0 ? [`${count} ${addresseeStatusWord(status, count)}`] : [];\n }).join(\", \");\n};\n\n/** The short description per actor: the one set on creation, otherwise the shortened first task, otherwise a differing display name. */\nexport const addresseeSummaries = (view: RunView): ((actor: RunActor) => string | undefined) => {\n const firstInputs = new Map<string, { sequence: number; content: string }>();\n for (const input of view.inputs) {\n if (input.subscriptionId !== null || input.presentation === \"background\" || input.content.trim() === \"\") continue;\n const known = firstInputs.get(input.actorId);\n if (!known || input.sequence < known.sequence) firstInputs.set(input.actorId, { sequence: input.sequence, content: input.content });\n }\n return (actor) => {\n const described = actor.description?.trim();\n if (described) return described;\n const first = firstInputs.get(actor.id);\n if (first) return shortened(first.content);\n const name = actor.displayName.trim();\n return name !== \"\" && lower(name) !== lower(actor.handle) ? name : undefined;\n };\n};\n\n/** The nearest creator along `createdBy` that is itself in the tree; a human or an unknown creator makes the actor a root. */\nexport const addresseeParentId = (byId: ReadonlyMap<string, RunActor>, included: ReadonlySet<string>, actor: RunActor): string | null => {\n const visited = new Set([actor.id]);\n let current = actor.createdBy;\n while (current !== undefined && !visited.has(current)) {\n if (included.has(current)) return current;\n const creator = byId.get(current);\n if (!creator || creator.kind === \"human\") return null;\n visited.add(current);\n current = creator.createdBy;\n }\n return null;\n};\n\nconst handleStem = (handle: string) => lower(handle).replace(/-\\d+$/, \"\").split(/[-_.]/)[0] ?? \"\";\n\nconst groupLabel = (handles: readonly string[]): string => {\n const first = handles[0] ?? \"\";\n const length = handles.reduce((common, handle) => {\n let index = 0;\n while (index < common && handle[index] === first[index]) index += 1;\n return index;\n }, first.length);\n const prefix = first.slice(0, length);\n const cut = prefix.search(/[-_.][^-_.]*$/);\n const stem = /[-_.]$/.test(prefix) || handles.includes(prefix) || cut < 0 ? prefix : prefix.slice(0, cut + 1);\n return `@${stem}*`;\n};\n\n/** Who created whom: coordinator on top, subagents below, similar siblings (kind and handle stem) as a group. */\nexport const addresseeTree = (view: RunView, actors: readonly RunActor[]): AddresseeNode[] => {\n const byId = new Map(view.actors.map((actor) => [actor.id, actor]));\n const included = new Set(actors.map((actor) => actor.id));\n const primaryId = chatPrimaryId(view);\n const siblings = new Map<string | null, RunActor[]>();\n for (const actor of actors) {\n const parent = addresseeParentId(byId, included, actor);\n siblings.set(parent, [...siblings.get(parent) ?? [], actor]);\n }\n const branch = (actor: RunActor): AddresseeActorNode => ({ kind: \"actor\", actor, children: level(actor.id) });\n const level = (parentId: string | null): AddresseeNode[] => {\n const entries = siblings.get(parentId) ?? [];\n const ordered = parentId === null ? [...entries.filter((actor) => actor.id === primaryId), ...entries.filter((actor) => actor.id !== primaryId)] : entries;\n const keyOf = (actor: RunActor) => actor.id === primaryId ? null : `${parentId ?? \"\"}/${actor.kind}/${handleStem(actor.handle)}`;\n const members = new Map<string, RunActor[]>();\n for (const actor of ordered) {\n const key = keyOf(actor);\n if (key !== null) members.set(key, [...members.get(key) ?? [], actor]);\n }\n const emitted = new Set<string>();\n return ordered.flatMap((actor): AddresseeNode[] => {\n const key = keyOf(actor);\n const group = key === null ? undefined : members.get(key);\n if (key === null || !group || group.length < ADDRESSEE_GROUP_MIN) return [branch(actor)];\n if (emitted.has(key)) return [];\n emitted.add(key);\n return [{ kind: \"group\", key, label: groupLabel(group.map((member) => member.handle)), members: group.map(branch) }];\n });\n };\n return level(null);\n};\n\n/** The actors matching the search, together with their creators in the tree, so every match stands in its place. */\nexport const addresseeMatches = (view: RunView, actors: readonly RunActor[], query: string, summary: (actor: RunActor) => string | undefined): RunActor[] => {\n const words = lower(query).trim().split(/\\s+/).filter(Boolean);\n if (words.length === 0) return [...actors];\n const byId = new Map(view.actors.map((actor) => [actor.id, actor]));\n const included = new Set(actors.map((actor) => actor.id));\n const kept = new Set<string>();\n for (const actor of actors) {\n const text = lower(`@${actor.handle} ${actor.displayName} ${summary(actor) ?? \"\"}`);\n if (!words.every((word) => text.includes(word))) continue;\n let current: RunActor | undefined = actor;\n while (current && !kept.has(current.id)) {\n kept.add(current.id);\n const parentId = addresseeParentId(byId, included, current);\n current = parentId === null ? undefined : byId.get(parentId);\n }\n }\n return actors.filter((actor) => kept.has(actor.id));\n};\n\n/** Whether an actor is in a branch, e.g. so a group containing the selected actor starts open. */\nexport const addresseeNodeContains = (node: AddresseeNode, actorId: string): boolean =>\n node.kind === \"actor\"\n ? node.actor.id === actorId || node.children.some((child) => addresseeNodeContains(child, actorId))\n : node.members.some((member) => addresseeNodeContains(member, actorId));\n", "import { ChevronRightIcon, CodeIcon, SparklesIcon, UsersIcon } from \"lucide-react\";\nimport { Badge, cn, Spinner } from \"@ragents/web/ui\";\nimport { actorTone, type RunActor, type RunView } from \"@ragents/web/run-view\";\nimport { pendingInputCount } from \"./run-panel-actors\";\nimport { addresseeNodeContains, addresseeStatus, addresseeStatusCounts, addresseeStatusWord, type AddresseeActorNode, type AddresseeGroupNode, type AddresseeNode, type AddresseeStatus } from \"./addressee-tree\";\n\nconst entryClass = \"flex w-full min-w-0 cursor-pointer items-center gap-2 rounded-md px-2 py-1.5 text-left hover:bg-accent aria-current:bg-primary/10 focus-visible:outline-2 focus-visible:outline-ring/60 focus-visible:-outline-offset-2\";\nconst branchClass = \"ml-[18px] list-none border-l border-border-soft pl-1\";\nconst iconClass: Readonly<Record<string, string>> = {\n agent: \"bg-glass-agent\",\n primary: \"bg-glass-primary\",\n script: \"bg-glass-script\",\n app: \"bg-glass-app\",\n};\nconst statusClass: Readonly<Record<AddresseeStatus, string>> = {\n running: \"text-primary\",\n input: \"text-warning\",\n waiting: \"text-muted-foreground\",\n stopped: \"text-muted-foreground/70\",\n};\n\nconst actorType = (actor: RunActor, technical: boolean) => !technical ? \"Agent\" : actor.kind === \"agent\" ? \"LLM agent\" : \"TypeScript actor\";\n\nexport function ActorIcon({ actor, className, view }: { actor: RunActor; className?: string; view: RunView }) {\n const tone = actorTone(view, actor);\n return <span className={cn(\"grid flex-none place-items-center rounded-full text-foreground [&>svg]:size-3\", iconClass[tone], className)}>\n {actor.lifecycle?.kind === \"running\" ? <Spinner aria-hidden className=\"size-3\" /> : tone === \"primary\" ? <SparklesIcon /> : actor.kind === \"agent\" ? <UsersIcon /> : <CodeIcon />}\n </span>;\n}\n\nexport interface AddresseeTreeProps {\n view: RunView;\n selectedId: string;\n technical: boolean;\n summary: (actor: RunActor) => string | undefined;\n /** Groups whose expanded state the user toggled relative to the default. */\n toggled: ReadonlySet<string>;\n /** Open without an own choice, e.g. during a search. */\n openByDefault: boolean;\n onToggle: (key: string) => void;\n onPick: (actor: RunActor) => void;\n}\n\n/** The addressee tree: per actor handle, short description and state, similar siblings as an expandable group. */\nexport function AddresseeTree({ className, nodes, ...props }: AddresseeTreeProps & { className?: string; nodes: readonly AddresseeNode[] }) {\n return <ul className={cn(\"list-none\", className)}>\n {nodes.map((node) => node.kind === \"actor\"\n ? <ActorBranch key={node.actor.id} node={node} {...props} />\n : <GroupBranch key={node.key} node={node} {...props} />)}\n </ul>;\n}\n\nfunction ActorBranch({ node, ...props }: AddresseeTreeProps & { node: AddresseeActorNode }) {\n return <li>\n <ActorEntry actor={node.actor} {...props} />\n {node.children.length > 0 && <AddresseeTree className={branchClass} nodes={node.children} {...props} />}\n </li>;\n}\n\nfunction ActorEntry({ actor, onPick, selectedId, summary, technical, view }: AddresseeTreeProps & { actor: RunActor }) {\n const pending = pendingInputCount(view, actor.id);\n const status = addresseeStatus(view, actor);\n const description = summary(actor);\n const name = actor.displayName.trim();\n const showName = name !== \"\" && name.toLocaleLowerCase(\"en-US\") !== actor.handle.toLocaleLowerCase(\"en-US\") && name !== description;\n const current = actor.id === selectedId;\n return <button aria-current={current || undefined} className={entryClass} data-actor-handle={actor.handle} onClick={() => onPick(actor)}\n title={`@${actor.handle}, ${actorType(actor, technical)}, ${addresseeStatusWord(status)}. Address messages to @${actor.handle}`} type=\"button\">\n <ActorIcon actor={actor} className=\"size-5\" view={view} />\n <span className=\"grid min-w-0 flex-1\">\n <span className=\"flex min-w-0 items-baseline gap-1.5\">\n <span className=\"truncate font-semibold\">@{actor.handle}</span>\n {showName && <span className=\"min-w-0 truncate text-[0.66rem] text-muted-foreground\">{name}</span>}\n </span>\n {description && <span className=\"truncate text-[0.66rem] text-muted-foreground\">{description}</span>}\n </span>\n {pending > 0 && <Badge className=\"h-4 min-w-4 px-1 text-[0.6rem]\" variant=\"secondary\">{pending}</Badge>}\n <span className={cn(\"flex-none text-[0.66rem]\", statusClass[status])} data-addressee-status={status}>{addresseeStatusWord(status)}</span>\n </button>;\n}\n\nfunction GroupBranch({ node, ...props }: AddresseeTreeProps & { node: AddresseeGroupNode }) {\n const { onToggle, openByDefault, selectedId, toggled, view } = props;\n const actors = node.members.map((member) => member.actor);\n const open = (openByDefault || addresseeNodeContains(node, selectedId)) !== toggled.has(node.key);\n const counts = addresseeStatusCounts(view, actors);\n const running = actors.some((actor) => actor.lifecycle?.kind === \"running\");\n const pending = actors.reduce((sum, actor) => sum + pendingInputCount(view, actor.id), 0);\n return <li>\n <button aria-expanded={open} className={entryClass} data-addressee-group={node.label} onClick={() => onToggle(node.key)}\n title={`${node.label}: ${actors.length} similar actors, ${counts}. Click ${open ? \"collapses the group\" : \"shows all\"}`} type=\"button\">\n <span className=\"grid size-5 flex-none place-items-center text-muted-foreground\">\n <ChevronRightIcon aria-hidden className={cn(\"size-3.5 transition-transform\", open && \"rotate-90\")} />\n </span>\n <span className=\"grid min-w-0 flex-1\">\n <span className=\"flex min-w-0 items-baseline gap-1.5\">\n <span className=\"truncate font-semibold\">{node.label}</span>\n <span className=\"flex-none text-[0.66rem] text-muted-foreground\">{actors.length} actors</span>\n </span>\n <span className=\"truncate text-[0.66rem] text-muted-foreground\">{counts}</span>\n </span>\n {running && <Spinner aria-hidden className=\"size-3 flex-none text-primary\" />}\n {pending > 0 && <Badge className=\"h-4 min-w-4 px-1 text-[0.6rem]\" variant=\"secondary\">{pending}</Badge>}\n </button>\n {open && <ul className={branchClass}>\n {node.members.map((member) => <ActorBranch key={member.actor.id} node={member} {...props} />)}\n </ul>}\n </li>;\n}\n", "import { useCallback, useId, useMemo, useRef, useState } from \"react\";\nimport { ChevronDownIcon } from \"lucide-react\";\nimport { Badge, Input, Spinner } from \"@ragents/web/ui\";\nimport { ActorPopout } from \"../ActorPopout\";\nimport type { RunActor, RunView } from \"@ragents/web/run-view\";\nimport { pendingInputCount } from \"./run-panel-actors\";\nimport { ADDRESSEE_SEARCH_ABOVE, addresseeMatches, addresseeSummaries, addresseeTree } from \"./addressee-tree\";\nimport { ActorIcon, AddresseeTree } from \"./AddresseeTree\";\n\nconst chipClass = \"flex h-7 min-w-[70px] max-w-[220px] flex-[0_1_auto] cursor-pointer items-center gap-1.5 rounded-full border border-border bg-background pr-2 pl-1 text-[0.72rem] font-semibold text-foreground hover:bg-accent aria-expanded:border-primary focus-visible:outline-2 focus-visible:outline-ring/60 focus-visible:outline-offset-1\";\nconst busyClass = \"flex h-7 min-w-0 flex-[0_1_auto] cursor-pointer items-center gap-1.5 rounded-md px-1.5 text-[0.7rem] text-muted-foreground hover:bg-accent hover:text-foreground focus-visible:outline-2 focus-visible:outline-ring/60 focus-visible:outline-offset-1\";\n\n/** The chat's addressee as a chip in the input bar; the pop-out shows the actors as a tree by creator, including stopped actors. */\nexport function AddresseeControl({ actors, onSelect, selected, technical, view }: {\n actors: readonly RunActor[];\n onSelect: (actor: RunActor) => void;\n selected: RunActor;\n technical: boolean;\n view: RunView;\n}) {\n const [open, setOpen] = useState(false);\n const [query, setQuery] = useState(\"\");\n const [toggled, setToggled] = useState<ReadonlySet<string>>(() => new Set());\n const buttonRef = useRef<HTMLButtonElement>(null);\n const panelId = useId();\n const close = useCallback((restoreFocus = false) => {\n setOpen(false);\n setQuery(\"\");\n if (restoreFocus) buttonRef.current?.focus({ preventScroll: true });\n }, []);\n const revealSelected = useCallback((element: HTMLDivElement | null) => {\n element?.querySelector(\"[aria-current=true]\")?.scrollIntoView({ block: \"nearest\" });\n }, []);\n const working = useMemo(() => actors.filter((actor) => actor.lifecycle?.kind === \"running\" && actor.id !== selected.id), [actors, selected.id]);\n const summary = useMemo(() => addresseeSummaries(view), [view]);\n const searching = query.trim() !== \"\";\n const tree = useMemo(() => addresseeTree(view, addresseeMatches(view, actors, query, summary)), [actors, query, summary, view]);\n const toggle = useCallback((key: string) => setToggled((current) => {\n const next = new Set(current);\n if (!next.delete(key)) next.add(key);\n return next;\n }), []);\n const pick = (actor: RunActor) => {\n onSelect(actor);\n close(true);\n };\n const busyTitle = working.map((actor) => `@${actor.handle} is working`).join(\", \");\n const busyPending = working.length > 0 ? pendingInputCount(view, working[0].id) : 0;\n const treeProps = { onToggle: toggle, openByDefault: searching, selectedId: selected.id, summary, technical, toggled, view };\n const listClass = \"px-1.5 py-1\";\n\n return <>\n <button aria-controls={open ? panelId : undefined} aria-expanded={open} aria-haspopup=\"dialog\" className={chipClass} onClick={() => setOpen(!open)} ref={buttonRef} title={`Addressee: @${selected.handle}. Click to choose another actor`} type=\"button\">\n <ActorIcon actor={selected} className=\"size-5\" view={view} />\n <span className=\"truncate\">@{selected.handle}</span>\n <ChevronDownIcon aria-hidden className=\"size-3 flex-none text-muted-foreground\" />\n </button>\n {working.length > 0 && <button className={busyClass} onClick={() => setOpen(!open)} title={busyTitle} type=\"button\">\n <Spinner aria-hidden className=\"size-3 flex-none\" />\n <span className=\"truncate in-data-[compact=true]:hidden\">@{working[0].handle}</span>\n {busyPending > 0 && <Badge className=\"h-4 min-w-4 px-1 text-[0.6rem]\" variant=\"secondary\">{busyPending}</Badge>}\n {working.length > 1 && <span className=\"flex-none\">+{working.length - 1}</span>}\n </button>}\n {open && <ActorPopout buttonRef={buttonRef} closeLabel=\"Close addressee\" height={460} id={panelId} label=\"Addressee\" onClose={close} open placement=\"top\" role=\"dialog\" width=\"available\">\n {actors.length > ADDRESSEE_SEARCH_ABOVE && <div className=\"flex-none border-b border-border-soft px-2.5 py-1.5\">\n <Input aria-label=\"Search actors\" className=\"h-7\" onChange={(event) => setQuery(event.target.value)} placeholder=\"Search handle or task ...\" type=\"search\" value={query} />\n </div>}\n <div className=\"min-h-0 flex-1 overflow-auto overscroll-contain\" ref={revealSelected}>\n <AddresseeTree className={listClass} nodes={tree} onPick={pick} {...treeProps} />\n {searching && tree.length === 0 && <p className=\"px-3.5 py-2 text-muted-foreground\">No actor matches the search.</p>}\n </div>\n </ActorPopout>}\n </>;\n}\n", "import { useEffect, useState } from \"react\";\nimport type { Message } from \"quassel/events\";\nimport type { SurfaceStartupState } from \"../surface-startup\";\n\n/** How long the loading state bridges finished work until the run view has caught up with the start status. */\nexport const STARTUP_SETTLE_MS = 1500;\n\n/** Conversation messages and questions end the setup; system lines and work steps still belong to it. */\nexport const chatShowsContent = (messages: readonly Message[]): boolean => messages.some((message) =>\n message.role === \"user\" || message.role === \"action\"\n || (message.role === \"assistant\" && (message.text.trim() !== \"\" || (message.attachments?.length ?? 0) > 0)));\n\n/** The run panel's loading state until the first content; afterwards it does not return for this run. */\nexport function useRunPanelStartup(state: SurfaceStartupState | undefined, connected: boolean, content: boolean): SurfaceStartupState | undefined {\n const [contentSeen, setContentSeen] = useState(content);\n const [held, setHeld] = useState<SurfaceStartupState>();\n const working = connected && state?.kind === \"working\" ? state : undefined;\n const title = working?.title;\n const detail = working?.detail;\n useEffect(() => { if (content) setContentSeen(true); }, [content]);\n useEffect(() => {\n if (title !== undefined && detail !== undefined) {\n setHeld({ kind: \"working\", title, detail });\n return;\n }\n const timer = window.setTimeout(() => setHeld(undefined), STARTUP_SETTLE_MS);\n return () => window.clearTimeout(timer);\n }, [detail, title]);\n return content || contentSeen ? undefined : state ?? held;\n}\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"@ragents/web/lib/local-storage-setting\", \"createLocalStorageSetting\");\n", "import { createLocalStorageSetting } from \"@ragents/web/lib/local-storage-setting\";\n\nexport interface RunPanelState {\n element: string | null;\n actor: string | null;\n}\n\nexport const DEFAULT_RUN_PANEL_STATE: RunPanelState = Object.freeze({ element: null, actor: null });\nexport const runPanelStorageKey = (runId: string) => `ragents.orchestration.run-navigation:${runId}`;\n\nconst isTextOrNull = (value: unknown): value is string | null => value === null || typeof value === \"string\";\n\nexport function parseRunPanelState(raw: string | null): RunPanelState {\n if (raw === null) return DEFAULT_RUN_PANEL_STATE;\n const value: unknown = JSON.parse(raw);\n if (!value || typeof value !== \"object\" || Array.isArray(value)\n || Object.keys(value).some((key) => ![\"element\", \"actor\"].includes(key))\n || !(\"element\" in value) || !isTextOrNull(value.element)\n || !(\"actor\" in value) || !isTextOrNull(value.actor)) {\n throw new Error(\"The stored panel navigation is invalid.\");\n }\n return { element: value.element, actor: value.actor };\n}\n\nconst setting = createLocalStorageSetting({\n changeEvent: \"ragents-run-panel-change\",\n matchesKey: (key) => key.startsWith(\"ragents.orchestration.run-navigation:\"),\n parse: parseRunPanelState,\n serialize: JSON.stringify,\n});\n\nexport function useRunPanelState(runId: string): RunPanelState {\n return setting.useValue(runPanelStorageKey(runId));\n}\n\nexport function saveRunPanelState(runId: string, state: RunPanelState) {\n setting.save(runPanelStorageKey(runId), state);\n}\n", "import { runApps, selectedRunApp, RunAppView } from \"@ragents/web/run-apps\";\nimport { useCallback, useEffect, useMemo, useState, type ReactNode } from \"react\";\nimport { ArrowUpRightIcon, LayoutGridIcon, SearchIcon } from \"lucide-react\";\nimport { useAccess } from \"@ragents/web/AccessContext\";\nimport { ChatPanel } from \"quassel\";\nimport { useRunPanelHost } from \"@ragents/web/run-panel/host\";\nimport { useSurfaceController, type SurfaceCenterContext, type CardSectionContribution, type SessionContext, type SessionNavigation } from \"@ragents/web/PluginRegistry\";\nimport { INSPECTION_TAB_ID } from \"../InspectionPanel\";\nimport { Button, StartupNotice } from \"@ragents/web/ui\";\nimport { ActorChat } from \"../ActorChat\";\nimport { ActorChatControls } from \"../ActorChatControls\";\nimport { surfaceStartupState, type SurfaceStartupState } from \"../surface-startup\";\nimport { cardSectionsClass } from \"../constants\";\nimport type { FlowSelection } from \"../FlowInspector\";\nimport { chatPrimaryId, runViewFrom, type RunActor, type RunView } from \"@ragents/web/run-view\";\nimport { AddresseeControl } from \"./AddresseeControl\";\nimport { runPanelActors } from \"./run-panel-actors\";\nimport { chatShowsContent, useRunPanelStartup } from \"./run-panel-startup\";\nimport { saveRunPanelState, useRunPanelState, type RunPanelState } from \"./run-panel-state\";\n\nconst chipClass = \"flex h-7 max-w-[200px] flex-none cursor-pointer items-center gap-1.5 rounded-full border border-border bg-card px-2 text-[0.72rem] font-semibold text-foreground hover:bg-accent focus-visible:outline-2 focus-visible:outline-ring/60 aria-selected:border-primary aria-selected:bg-primary/10\";\nconst viewClass = \"relative flex min-h-0 min-w-0 flex-1 flex-col\";\nconst chatSurfaceClass = \"rounded-none border-0 bg-transparent\";\n\nexport function OrchestrationRunPanel(props: SurfaceCenterContext) {\n return <RunPanel key={props.session.session.id} {...props} />;\n}\n\nfunction RunPanel({ surfaceElements, cardSections, navigation, renderChat, session }: SurfaceCenterContext) {\n const runId = session.session.id;\n const surface = useSurfaceController();\n const inspect = useAccess().can(\"runs.inspect\");\n const host = useRunPanelHost();\n const view = runViewFrom(session.runView);\n const stored = useRunPanelState(runId);\n const save = useCallback((patch: Partial<RunPanelState>) => saveRunPanelState(runId, { ...stored, ...patch }), [runId, stored]);\n const elements = useMemo(() => runApps(session, surfaceElements), [surfaceElements, session]);\n const selectedElement = host.kind === \"browser\" ? selectedRunApp(elements, stored.element) : undefined;\n useEffect(() => {\n if (host.kind === \"browser\" && session.connected && stored.element !== null && !selectedElement) save({ element: null });\n }, [host.kind, save, selectedElement, session.connected, stored.element]);\n const [visited, setVisited] = useState<ReadonlySet<string>>(() => new Set(stored.element ? [stored.element] : []));\n const selectedId = selectedElement?.definition.id;\n useEffect(() => {\n if (selectedId) setVisited((current) => current.has(selectedId) ? current : new Set([...current, selectedId]));\n }, [selectedId]);\n const startup = useRunPanelStartup(\n surfaceStartupState({ view, startup: session.startup, connected: session.connected, running: session.running, error: session.conversationError }),\n session.connected,\n elements.length > 0 || chatShowsContent(session.messages),\n );\n const notice = startup ? <RunPanelStartup state={startup} /> : undefined;\n const actors = useMemo(() => view ? runPanelActors(view, inspect) : [], [inspect, view]);\n const primaryId = view ? chatPrimaryId(view) : undefined;\n const selectedActor = actors.find((actor) => actor.id === stored.actor) ?? actors.find((actor) => actor.id === primaryId) ?? actors[0];\n const [visitedActors, setVisitedActors] = useState<ReadonlySet<string>>(() => new Set(stored.actor ? [stored.actor] : []));\n const selectActor = useCallback((actor: RunActor) => {\n setVisitedActors((current) => new Set([...current, actor.id]));\n save({ actor: actor.id });\n }, [save]);\n const navigate = useCallback((selection: FlowSelection) => {\n const actor = selection.type === \"actor\" ? actors.find((entry) => entry.id === selection.id) : undefined;\n if (actor) selectActor(actor);\n else if (inspect) navigation.openTab(INSPECTION_TAB_ID, selection);\n }, [actors, inspect, navigation, selectActor]);\n const primarySelected = selectedActor === undefined || selectedActor.id === primaryId;\n useEffect(() => {\n const selection = selectedElement ? { type: \"run-app\", id: selectedElement.definition.id }\n : selectedActor ? { type: \"actor\", id: selectedActor.id } : undefined;\n if (surface?.selection?.type !== selection?.type || surface?.selection?.id !== selection?.id) surface?.acceptSelection(selection);\n }, [selectedActor, selectedElement, surface]);\n const addressee = view && selectedActor && <><AddresseeControl\n actors={actors}\n onSelect={selectActor}\n selected={selectedActor}\n technical={inspect}\n view={view}\n />{inspect && <Button aria-label={`Inspect @${selectedActor.handle}`} onClick={() => navigation.openTab(INSPECTION_TAB_ID, { type: \"actor\", id: selectedActor.id })} size=\"icon-sm\" title=\"Inspect actor\" variant=\"ghost\"><SearchIcon /></Button>}</>;\n\n return <div className=\"flex min-h-0 min-w-0 flex-1 flex-col bg-app\" data-run-panel=\"run\">\n {elements.length > 0 && <nav aria-label=\"Mini-apps of the run\" className=\"flex flex-none flex-wrap items-center gap-1.5 border-b border-border bg-shell px-2 py-1.5\" role={host.kind === \"browser\" ? \"tablist\" : undefined}>\n {host.kind === \"browser\" && <button aria-selected={!selectedElement} className={chipClass} onClick={() => save({ element: null })} role=\"tab\" type=\"button\">Chat</button>}\n {elements.map(({ definition }) => <button\n aria-selected={host.kind === \"browser\" ? definition.id === selectedElement?.definition.id : undefined}\n className={chipClass}\n key={definition.id}\n onClick={() => {\n if (host.kind === \"vscode\") host.openApp(runId, definition.id, definition.title ?? definition.id);\n else {\n setVisited((current) => new Set([...current, definition.id]));\n save({ element: definition.id });\n }\n }}\n role={host.kind === \"browser\" ? \"tab\" : undefined}\n type=\"button\"\n >\n <LayoutGridIcon aria-hidden className=\"size-3\" />\n <span className=\"truncate\">{definition.title ?? definition.id}</span>\n {host.kind === \"vscode\" && <ArrowUpRightIcon aria-hidden className=\"size-3\" />}\n </button>)}\n </nav>}\n <section aria-label=\"Chat\" className={viewClass} data-view={primarySelected ? \"chat\" : \"actor-chat\"} hidden={selectedElement !== undefined} inert={selectedElement !== undefined} style={selectedElement ? { display: \"none\" } : undefined}>\n <div className={viewClass} hidden={!primarySelected} inert={!primarySelected} style={primarySelected ? undefined : { display: \"none\" }}>\n {renderChat({ chatElementClassName: chatSurfaceClass, notice, toolbarLeft: addressee })}\n </div>\n {view && actors.filter((actor) => actor.id !== primaryId && (visitedActors.has(actor.id) || actor.id === selectedActor?.id)).map((actor) => {\n const selected = actor.id === selectedActor?.id;\n return <div className={viewClass} hidden={!selected} inert={!selected} key={actor.id} style={selected ? undefined : { display: \"none\" }}>\n <ActorRunPanelChat actor={actor} cardSections={cardSections} navigation={navigation} notice={notice} onNavigate={navigate} session={session} toolbarLeft={addressee} view={view} />\n </div>;\n })}\n </section>\n {host.kind === \"browser\" && elements.filter(({ definition }) => visited.has(definition.id) || definition.id === selectedElement?.definition.id).map((element) => {\n const selected = element === selectedElement;\n return <section aria-label={`Mini-app ${element.definition.title ?? element.definition.id}`} className={viewClass} hidden={!selected} inert={!selected} key={element.definition.id} role=\"tabpanel\" style={selected ? undefined : { display: \"none\" }}>\n <RunAppView app={element} navigation={navigation} session={session} />\n </section>;\n })}\n </div>;\n}\n\nexport function ActorRunPanelChat({ actor, cardSections, navigation, notice, onNavigate, session, toolbarLeft, view }: {\n actor: RunActor;\n cardSections: readonly CardSectionContribution[];\n navigation: SessionNavigation;\n notice?: ReactNode;\n onNavigate: (selection: FlowSelection) => void;\n session: SessionContext;\n toolbarLeft?: ReactNode;\n view: RunView;\n}) {\n const running = actor.lifecycle?.kind === \"running\";\n return <div className=\"flex min-h-0 min-w-0 flex-1 flex-col\">\n <div className={`${cardSectionsClass} max-h-[40%] flex-none overflow-auto overscroll-contain border-t-0 border-b`} data-slot=\"card-sections\">\n {cardSections.map(({ id, Section }) => <Section actor={actor} key={id} navigation={navigation} session={session} />)}\n </div>\n <ChatPanel className=\"flex-1\" composer={<ActorChatControls actor={actor} presentation=\"panel\" running={running} display=\"panel\" toolbarLeft={toolbarLeft} view={view} />}>\n {notice ?? <ActorChat actor={actor} conversation={session.actorConversations?.[actor.id]} historyError={session.conversationError} onNavigate={onNavigate}\n presentation=\"inspector\" primaryMessages={session.messages} running={running} display=\"panel\" view={view} />}\n </ChatPanel>\n </div>;\n}\n\n/** The loading state centered in the chat; it only moves up where it would otherwise end up under the input. */\nfunction RunPanelStartup({ state }: { state: SurfaceStartupState }) {\n return <div className=\"grid min-h-0 flex-1 grid-rows-[minmax(0,1fr)_auto_minmax(var(--qsl-composer-height,0px),1fr)] justify-items-center overflow-hidden p-6\">\n <StartupNotice className=\"row-start-2\" state={state} />\n </div>;\n}\n", "import { runActorFrom, runViewFrom, type RunArtifact } from \"@ragents/web/run-view\";\nimport { formatBytes } from \"@ragents/web/lib/format\";\nimport type { CardSectionContext, SessionNavigation } from \"@ragents/web/PluginRegistry\";\nimport { SectionLabel } from \"@ragents/web/ui\";\n\nconst openDocument = (navigation: SessionNavigation, artifact: RunArtifact) => {\n if (navigation.revealEntity({ type: \"artifact\", id: artifact.id })) return;\n throw new Error(`No plugin can show the document ${artifact.title}`);\n};\n\nexport function DocumentsSection({ actor, navigation, session }: CardSectionContext) {\n const view = runViewFrom(session.runView);\n if (!view) return null;\n const actorId = runActorFrom(actor).id;\n const documents = view.artifacts.filter((artifact) => artifact.createdBy === actorId);\n if (documents.length === 0) return null;\n\n return (\n <section className=\"grid gap-1.5\">\n <SectionLabel>\n <span>Documents</span>\n <small>{documents.length}</small>\n </SectionLabel>\n <ul className=\"grid list-none gap-1\">\n {documents.map((artifact) => (\n <li key={artifact.id}>\n <button className=\"grid w-full cursor-pointer rounded-lg border border-border-soft px-2 py-1.5 text-left hover:border-[color-mix(in_srgb,var(--primary)_45%,var(--border))] hover:bg-primary/6\"\n onClick={() => openDocument(navigation, artifact)} type=\"button\">\n <strong className=\"truncate text-[0.74rem]\" title={artifact.title}>{artifact.title}</strong>\n <small className=\"text-[0.64rem] text-muted-foreground\">{formatBytes(artifact.size)} - {artifact.mediaType}</small>\n </button>\n </li>\n ))}\n </ul>\n </section>\n );\n}\n", "import { useCallback, useEffect, useId, useMemo, useRef, useState } from \"react\";\nimport { XIcon } from \"lucide-react\";\nimport type { JournalEvent } from \"@ragents/engine/src/domain/events\";\nimport type { SessionHeaderContext } from \"@ragents/web/PluginRegistry\";\nimport { SourceCode } from \"@ragents/web/SourceCode\";\nimport { Button, Input, Popover, PopoverContent } from \"@ragents/web/ui\";\nimport { runContracts } from \"@ragents/engine/src/http/contracts\";\nimport { rpc } from \"@ragents/web/rpc\";\nimport { runViewFrom } from \"@ragents/web/run-view\";\nimport { statusControlClass } from \"./constants\";\n\nexport function JournalStatus({ session }: SessionHeaderContext) {\n const [open, setOpen] = useState(false);\n const [events, setEvents] = useState<readonly JournalEvent[]>([]);\n const [error, setError] = useState<string>();\n const [loading, setLoading] = useState(false);\n const [reload, setReload] = useState(0);\n const [query, setQuery] = useState(\"\");\n const [limit, setLimit] = useState(100);\n const buttonRef = useRef<HTMLButtonElement>(null);\n const searchRef = useRef<HTMLInputElement>(null);\n const panelId = useId();\n const view = runViewFrom(session.runView);\n const revision = view?.revision;\n const close = useCallback((restoreFocus = false) => {\n setOpen(false);\n if (restoreFocus) buttonRef.current?.focus({ preventScroll: true });\n }, []);\n\n useEffect(() => {\n if (!open) return;\n const controller = new AbortController();\n setLoading(true);\n setError(undefined);\n void rpc.call(runContracts.events, { runId: session.session.id }, { signal: controller.signal })\n .then((result) => { if (!controller.signal.aborted) setEvents(result); })\n .catch((cause: unknown) => { if (!controller.signal.aborted) setError(cause instanceof Error ? cause.message : String(cause)); })\n .finally(() => { if (!controller.signal.aborted) setLoading(false); });\n return () => controller.abort();\n }, [open, session.session.id, revision, reload]);\n\n const filtered = useMemo(() => {\n const search = query.trim().toLocaleLowerCase(\"en-US\");\n const handles = new Map(view?.actors.map((actor) => [actor.id, actor.handle]));\n return [...events].reverse().filter((event) => !search || `${handles.get(event.actorId) ?? \"\"} ${JSON.stringify(event)}`.toLocaleLowerCase(\"en-US\").includes(search));\n }, [events, query, view?.actors]);\n const actors = new Map(view?.actors.map((actor) => [actor.id, actor.handle]));\n\n return <div className=\"flex h-full min-w-0 items-stretch\">\n <button aria-controls={panelId} aria-expanded={open} className={statusControlClass} onClick={() => setOpen((value) => !value)} ref={buttonRef} type=\"button\">\n Journal\n </button>\n <Popover open={open} onOpenChange={(next) => { if (!next) close(); }}>\n <PopoverContent align=\"start\" anchor={buttonRef} aria-label=\"Journal of the run\" className=\"flex min-h-0 min-w-0 flex-col gap-0 overflow-hidden rounded-t-sm rounded-b-none p-0 text-[0.76rem]\" collisionPadding={8} id={panelId}\n initialFocus={searchRef} role=\"region\" side=\"top\" style={{ width: \"min(900px, var(--available-width))\", height: \"min(480px, var(--available-height))\" }}>\n <header className=\"flex flex-none items-center gap-2 border-b border-border-soft px-2.5 py-2\">\n <div className=\"flex min-w-0 flex-1 items-baseline gap-2.5 [&>span]:truncate\"><strong>Journal</strong><span className=\"text-muted-foreground\">{session.session.title || \"Run\"}</span></div>\n <Button onClick={() => setReload((value) => value + 1)} size=\"sm\" variant=\"ghost\">Refresh</Button>\n <Button aria-label=\"Close journal\" onClick={() => close(true)} size=\"icon-sm\" title=\"Close journal\" variant=\"ghost\"><XIcon /></Button>\n </header>\n <div className=\"flex flex-none items-center gap-3 px-2.5 py-2\">\n <Input className=\"flex-1\" aria-label=\"Search journal\" onChange={(event) => { setQuery(event.target.value); setLimit(100); }} placeholder=\"Search event type, actor or content ...\" ref={searchRef} type=\"search\" value={query} />\n <span className=\"flex-none whitespace-nowrap text-[0.68rem] text-muted-foreground\" role=\"status\">{loading ? \"Loading ...\" : `${filtered.length} events`}</span>\n </div>\n {error && <p className=\"flex-none px-2.5 pb-2 text-destructive\" role=\"alert\">{error}</p>}\n <div aria-label=\"Journal events, newest first\" className=\"min-h-0 flex-1 overflow-auto overscroll-contain px-2.5 pb-2.5\">\n {!loading && !error && filtered.length === 0 && <p className=\"text-muted-foreground\">{query ? \"No matching events.\" : \"The journal contains no events yet.\"}</p>}\n {filtered.slice(0, limit).map((event) => <JournalEntry actor={actors.get(event.actorId)} event={event} key={event.eventId} />)}\n {filtered.length > limit && <Button onClick={() => setLimit((value) => value + 100)} size=\"sm\" variant=\"outline\">Show more events</Button>}\n </div>\n </PopoverContent>\n </Popover>\n </div>;\n}\n\nfunction JournalEntry({ actor, event }: { actor: string | undefined; event: JournalEvent }) {\n const [expanded, setExpanded] = useState(false);\n return <details className=\"border-b border-border-soft open:[&>summary]:text-primary\" onToggle={(toggle) => setExpanded(toggle.currentTarget.open)}>\n <summary className=\"grid cursor-pointer grid-cols-[32px_minmax(130px,1fr)_minmax(70px,140px)_auto] items-baseline gap-2 px-0.5 py-2 text-[0.68rem] focus-visible:outline-2 focus-visible:outline-primary focus-visible:-outline-offset-2 max-[550px]:grid-cols-[24px_minmax(0,1fr)_auto] max-[550px]:gap-x-2 max-[550px]:gap-y-1\">\n <span className=\"text-muted-foreground tabular-nums\">{event.sequence}</span>\n <span className=\"font-mono [overflow-wrap:anywhere]\">{event.type}</span>\n <span className=\"truncate max-[550px]:col-start-2 max-[550px]:row-start-2\" title={event.actorId}>{actor ? `@${actor}` : event.actorId}</span>\n <time className=\"text-muted-foreground tabular-nums max-[550px]:col-start-3 max-[550px]:row-start-1\" dateTime={event.occurredAt}>{new Date(event.occurredAt).toLocaleTimeString()}</time>\n </summary>\n {expanded && <SourceCode className=\"m-0 mb-2 text-[0.68rem]\" content={JSON.stringify(event, null, 2)} language=\"json\" path=\"event.json\" />}\n </details>;\n}\n", "import { read } from \"ragents-host-read:read\";\nexport default read(\"@ragents/web/Toolbar\", \"ToolbarItem\");\n", "import { useState } from \"react\";\nimport { useAccess } from \"@ragents/web/AccessContext\";\nimport type { SessionHeaderContext } from \"@ragents/web/PluginRegistry\";\nimport { Button, StopGlyph } from \"@ragents/web/ui\";\nimport { ToolbarItem } from \"@ragents/web/Toolbar\";\nimport { stopRun } from \"./api\";\n\nconst STOP_RUN_REASON = \"Emergency stop by the operator\";\n\nexport function StopRunHeader({ session }: SessionHeaderContext) {\n return <ToolbarItem className=\"max-w-none\"><StopRunButton key={session.session.id} runId={session.session.id} /></ToolbarItem>;\n}\n\nfunction StopRunButton({ runId }: { runId: string }) {\n const writable = useAccess().can(\"runs.write\");\n const [armed, setArmed] = useState(false);\n const [busy, setBusy] = useState(false);\n const [error, setError] = useState<string>();\n\n const stop = async () => {\n setBusy(true);\n setError(undefined);\n try {\n await stopRun(runId, STOP_RUN_REASON);\n setArmed(false);\n } catch (caught) {\n setError(caught instanceof Error ? caught.message : String(caught));\n } finally {\n setBusy(false);\n }\n };\n\n if (!writable) return null;\n if (!armed) {\n return (\n <Button onClick={() => setArmed(true)} size=\"sm\" title=\"Ends the whole run: turns, agents and flows\" variant=\"destructive\">\n <StopGlyph data-icon=\"inline-start\" />Stop run\n </Button>\n );\n }\n\n return (\n <span className=\"inline-flex items-center gap-1.5 whitespace-nowrap\">\n <span className=\"text-[0.72rem] font-semibold text-destructive\">Really stop everything?</span>\n <Button disabled={busy} onClick={() => void stop()} size=\"sm\" variant=\"destructive\">Yes</Button>\n <Button disabled={busy} onClick={() => setArmed(false)} size=\"sm\" variant=\"outline\">\n Cancel\n </Button>\n {error && <span className=\"max-w-[260px] truncate text-[0.7rem] text-destructive\" title={error}>{error}</span>}\n </span>\n );\n}\n", "import type { JournalEvent } from \"@ragents/engine/src/domain/events\";\nimport type { JsonValue } from \"@ragents/engine/src/domain/json\";\nimport type { RunView } from \"@ragents/web/run-view\";\n\nexport type ExecutionStatus = \"running\" | \"completed\" | \"failed\" | \"interrupted\";\n\nexport interface TypeScriptExecution {\n key: string;\n actorId: string;\n actorHandle: string;\n actorName: string;\n turnId: string;\n toolCallId: string;\n sequence: number;\n startedAt: string;\n finishedAt: string | null;\n status: ExecutionStatus;\n code: string | null;\n path: string | null;\n result: JsonValue | undefined;\n logs: readonly string[];\n error: string | null;\n}\n\nconst record = (value: unknown): value is Record<string, unknown> => typeof value === \"object\" && value !== null && !Array.isArray(value);\nconst executionKey = (actorId: string, turnId: string, toolCallId: string) => JSON.stringify([actorId, turnId, toolCallId]);\n\nexport const executionEventsFrom = (value: unknown, runId: string): readonly JournalEvent[] => {\n if (!Array.isArray(value) || value.some((entry: unknown) => {\n if (!record(entry) || entry.runId !== runId || typeof entry.eventId !== \"string\" || typeof entry.actorId !== \"string\"\n || !Number.isSafeInteger(entry.sequence) || typeof entry.occurredAt !== \"string\" || !Number.isFinite(Date.parse(entry.occurredAt))\n || typeof entry.type !== \"string\" || !record(entry.payload)) return true;\n const payload = entry.payload;\n if (entry.type.startsWith(\"tool.call.\") && (typeof payload.turnId !== \"string\" || typeof payload.toolCallId !== \"string\")) return true;\n if (entry.type === \"tool.call.source\") return typeof payload.code !== \"string\" || (payload.path !== null && typeof payload.path !== \"string\");\n if (entry.type === \"tool.call.started\") return typeof payload.name !== \"string\" || !(\"input\" in payload);\n if (entry.type === \"tool.call.completed\") return typeof payload.name !== \"string\" || !(\"output\" in payload);\n if (entry.type === \"tool.call.failed\") return typeof payload.name !== \"string\" || typeof payload.error !== \"string\";\n if (entry.type === \"turn.finished\") return typeof payload.turnId !== \"string\" || ![\"completed\", \"failed\"].includes(String(payload.outcome));\n if (entry.type === \"turn.interrupted\") return typeof payload.turnId !== \"string\" || typeof payload.reason !== \"string\";\n return false;\n })) throw new Error(\"The server did not deliver a valid journal for this run.\");\n return value as JournalEvent[];\n};\n\nexport const projectExecutions = (events: readonly JournalEvent[], view?: Pick<RunView, \"id\" | \"actors\" | \"turns\">): TypeScriptExecution[] => {\n const executions = new Map<string, TypeScriptExecution>();\n const actors = new Map(view?.actors.map((actor) => [actor.id, actor]));\n const ends = new Map<string, { at: string; reason: string | null }>();\n for (const event of [...events].sort((left, right) => left.sequence - right.sequence)) {\n if (view && event.runId !== view.id) continue;\n if (event.type === \"turn.finished\" || event.type === \"turn.interrupted\") {\n ends.set(JSON.stringify([event.actorId, event.payload.turnId]), { at: event.occurredAt, reason: \"reason\" in event.payload ? event.payload.reason : null });\n continue;\n }\n if (event.type !== \"tool.call.started\" && event.type !== \"tool.call.completed\" && event.type !== \"tool.call.failed\" && event.type !== \"tool.call.source\") continue;\n const key = executionKey(event.actorId, event.payload.turnId, event.payload.toolCallId);\n if (event.type === \"tool.call.started\") {\n if (event.payload.name !== \"typescript_eval\" || executions.has(key)) continue;\n const actor = actors.get(event.actorId);\n const input = record(event.payload.input) ? event.payload.input : {};\n executions.set(key, {\n key, actorId: event.actorId, actorHandle: actor?.handle ?? event.actorId, actorName: actor?.displayName ?? event.actorId,\n turnId: event.payload.turnId, toolCallId: event.payload.toolCallId, sequence: event.sequence,\n startedAt: event.occurredAt, finishedAt: null, status: \"running\",\n code: typeof input.code === \"string\" ? input.code : null, path: typeof input.path === \"string\" ? input.path : null,\n result: undefined, logs: [], error: null,\n });\n continue;\n }\n const execution = executions.get(key);\n if (!execution) continue;\n if (event.type === \"tool.call.source\") {\n execution.code = event.payload.code;\n execution.path = event.payload.path;\n } else if (event.type === \"tool.call.completed\") {\n execution.status = \"completed\";\n execution.finishedAt = event.occurredAt;\n const output = event.payload.output;\n const envelope = record(output) && \"result\" in output && Array.isArray(output.logs) && output.logs.every((line) => typeof line === \"string\");\n execution.result = envelope ? output.result as JsonValue : output;\n execution.logs = envelope ? output.logs as string[] : [];\n } else {\n execution.status = \"failed\";\n execution.finishedAt = event.occurredAt;\n execution.error = event.payload.error;\n }\n }\n const turns = new Map(view?.turns.map((turn) => [JSON.stringify([turn.actorId, turn.id]), turn]));\n for (const execution of executions.values()) {\n if (execution.status !== \"running\") continue;\n const turnKey = JSON.stringify([execution.actorId, execution.turnId]);\n const turn = turns.get(turnKey);\n const call = turn?.toolCalls?.find((entry) => entry.id === execution.toolCallId && entry.name === \"typescript_eval\");\n const ended = ends.get(turnKey);\n if (call && call.status !== \"running\") {\n execution.status = call.status;\n execution.finishedAt = call.finishedAt ?? turn?.finishedAt ?? ended?.at ?? null;\n } else if (ended || (turn && turn.status !== \"running\")) {\n execution.status = \"interrupted\";\n execution.finishedAt = ended?.at ?? turn?.finishedAt ?? null;\n }\n if (execution.status === \"interrupted\") execution.error = ended?.reason ?? turn?.reason ?? \"The call was interrupted.\";\n }\n return [...executions.values()].sort((left, right) => right.sequence - left.sequence);\n};\n\nexport const executionStatusLabel = (status: ExecutionStatus): string => ({ running: \"Running\", completed: \"Completed\", failed: \"Failed\", interrupted: \"Interrupted\" })[status];\n\nexport const filterExecutions = (executions: readonly TypeScriptExecution[], query: string, status: ExecutionStatus | \"all\"): TypeScriptExecution[] => {\n const search = query.trim().toLocaleLowerCase(\"en-US\");\n return executions.filter((execution) => (status === \"all\" || execution.status === status) && (!search || [\n execution.actorId, execution.actorHandle, execution.actorName, execution.code, execution.path,\n JSON.stringify(execution.result), ...execution.logs, execution.error, executionStatusLabel(execution.status),\n ].join(\"\\n\").toLocaleLowerCase(\"en-US\").includes(search)));\n};\n\nexport const executionDuration = (execution: Pick<TypeScriptExecution, \"startedAt\" | \"finishedAt\">, now: number): string => {\n const milliseconds = Math.max(0, (execution.finishedAt ? Date.parse(execution.finishedAt) : now) - Date.parse(execution.startedAt));\n if (!Number.isFinite(milliseconds)) return \"Duration unknown\";\n if (milliseconds < 1_000) return `${milliseconds} ms`;\n const seconds = Math.floor(milliseconds / 1_000);\n return seconds < 60 ? `${seconds} s` : `${Math.floor(seconds / 60)} min ${seconds % 60} s`;\n};\n", "import { useEffect, useMemo, useState } from \"react\";\nimport type { JournalEvent } from \"@ragents/engine/src/domain/events\";\nimport type { WorkspaceTabContext } from \"@ragents/web/PluginRegistry\";\nimport { SourceCode } from \"@ragents/web/SourceCode\";\nimport { Alert, AlertDescription, Badge, Button, Input, Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from \"@ragents/web/ui\";\nimport { runContracts } from \"@ragents/engine/src/http/contracts\";\nimport { rpc } from \"@ragents/web/rpc\";\nimport { executionDuration, executionEventsFrom, executionStatusLabel, filterExecutions, projectExecutions, type ExecutionStatus, type TypeScriptExecution } from \"./executions\";\nimport { runViewFrom, type RunView } from \"@ragents/web/run-view\";\n\nexport const EXECUTIONS_TAB_ID = \"ragents.orchestration.executions\";\n\nexport function ExecutionsPanel({ active, session }: WorkspaceTabContext) {\n const view = runViewFrom(session.runView);\n const runId = session.session.id;\n return <RunExecutionsPanel active={active} key={runId} runId={runId} view={view?.id === runId ? view : undefined} />;\n}\n\nfunction RunExecutionsPanel({ active, runId, view }: { active: boolean; runId: string; view: RunView | undefined }) {\n const [journal, setJournal] = useState<{ events: readonly JournalEvent[]; loaded: boolean; loading: boolean; error: string | null }>({ events: [], loaded: false, loading: false, error: null });\n const [query, setQuery] = useState(\"\");\n const [status, setStatus] = useState<ExecutionStatus | \"all\">(\"all\");\n const statusOptions = [{ value: \"all\", label: \"All statuses\" }, ...([\"running\", \"completed\", \"failed\", \"interrupted\"] as const).map((value) => ({ value, label: executionStatusLabel(value) }))];\n const [now, setNow] = useState(Date.now);\n const [reload, setReload] = useState(0);\n const revision = view?.revision;\n\n useEffect(() => {\n if (!active) return;\n const controller = new AbortController();\n setJournal((previous) => ({ ...previous, loading: true, error: null }));\n void rpc.call(runContracts.events, { runId }, { signal: controller.signal })\n .then((result) => {\n const events = executionEventsFrom(result, runId);\n if (!controller.signal.aborted) setJournal({ events, loaded: true, loading: false, error: null });\n })\n .catch((error: unknown) => {\n if (!controller.signal.aborted) setJournal((previous) => ({ ...previous, loading: false, error: error instanceof Error ? error.message : String(error) }));\n });\n return () => controller.abort();\n }, [active, runId, revision, reload]);\n\n const executions = useMemo(() => projectExecutions(journal.events, view), [journal.events, view]);\n const filtered = useMemo(() => filterExecutions(executions, query, status), [executions, query, status]);\n const running = executions.some((execution) => execution.status === \"running\");\n useEffect(() => {\n if (!active || !running) return;\n setNow(Date.now());\n const timer = window.setInterval(() => setNow(Date.now()), 1_000);\n return () => window.clearInterval(timer);\n }, [active, running]);\n\n return <section aria-label=\"TypeScript executions\" className=\"flex h-full min-h-0 min-w-0 flex-col bg-background text-[0.78rem] text-foreground\">\n <header className=\"px-3.5 pt-3.5 pb-2.5\"><h2 className=\"mb-1.5 text-[0.92rem]\">Executions</h2><p className=\"leading-[1.5] text-muted-foreground\">TypeScript snippets of all actors in this run.</p></header>\n <div className=\"grid grid-cols-[minmax(0,1fr)_auto] gap-2 border-b border-border-soft px-3.5 pb-3\">\n <Input className=\"col-span-full\" aria-label=\"Search executions\" onChange={(event) => setQuery(event.target.value)} placeholder=\"Search actor, code or result\" type=\"search\" value={query} />\n <Select items={statusOptions} value={status} onValueChange={(value) => { if (value !== null) setStatus(value as ExecutionStatus | \"all\"); }}>\n <SelectTrigger className=\"min-w-0\" aria-label=\"Execution status\"><SelectValue /></SelectTrigger>\n <SelectContent>{statusOptions.map((option) => <SelectItem key={option.value} value={option.value}>{option.label}</SelectItem>)}</SelectContent>\n </Select>\n <span className=\"self-center text-right text-[0.68rem] text-muted-foreground\" role=\"status\">{journal.loading ? (journal.loaded ? \"Refreshing ...\" : \"Loading ...\") : journal.loaded ? `${filtered.length} of ${executions.length} executions` : \"Not loaded yet\"}</span>\n </div>\n {journal.error && <Alert className=\"mx-3.5 my-2 w-auto\" variant=\"destructive\"><AlertDescription className=\"whitespace-pre-wrap text-destructive [overflow-wrap:anywhere]\">{journal.error}{journal.loaded ? \" The last loaded state stays visible.\" : \"\"}</AlertDescription><Button disabled={!active || journal.loading} onClick={() => setReload((value) => value + 1)} size=\"sm\" variant=\"ghost\">Reload</Button></Alert>}\n <div aria-label=\"Executions, newest first\" className=\"min-h-0 flex-1 overflow-auto overscroll-contain px-3 pb-3\">\n {journal.loaded && !journal.loading && filtered.length === 0 && <p className=\"mx-0.5 my-4.5 leading-[1.6] text-muted-foreground\">{executions.length === 0 ? \"No TypeScript snippet has been executed in this run yet.\" : \"No executions match this search.\"}</p>}\n {filtered.map((execution) => <ExecutionEntry execution={execution} key={execution.key} now={now} />)}\n </div>\n </section>;\n}\n\nconst statusBadgeClass: Readonly<Record<string, string>> = {\n running: \"bg-background text-info\",\n completed: \"bg-success-soft text-success\",\n failed: \"bg-destructive-soft text-destructive\",\n interrupted: \"bg-warning-soft text-warning\",\n};\n\nconst summaryClass = \"relative grid cursor-pointer list-none grid-cols-[minmax(0,1fr)_auto] gap-x-2 gap-y-[7px] pt-3 pr-2.5 pb-2.5 pl-[25px] focus-visible:outline-2 focus-visible:outline-primary focus-visible:-outline-offset-2 [&::-webkit-details-marker]:hidden before:absolute before:top-[15px] before:left-2.5 before:size-[5px] before:rotate-[-45deg] before:border-r-[1.5px] before:border-b-[1.5px] before:border-solid before:border-current before:content-['']\";\n\nconst contentClass = \"min-w-0 border-t border-border-soft px-2.5 pb-2.5 [&>h3]:mt-3 [&>h3]:mb-1.5 [&>h3]:text-[0.72rem] [&>h3]:font-[650]\";\n\nconst sourceClass = \"m-0 max-h-[28rem] overflow-auto text-[0.68rem]\";\n\nconst logClass = \"m-0 max-h-[24rem] overflow-auto rounded-sm bg-background p-2 font-mono text-[0.68rem] leading-[1.5] whitespace-pre-wrap [overflow-wrap:anywhere]\";\n\nfunction ExecutionEntry({ execution, now }: { execution: TypeScriptExecution; now: number }) {\n const [expanded, setExpanded] = useState(false);\n const preview = execution.code?.trim().split(\"\\n\").find((line) => line.trim()) ?? execution.path ?? \"TypeScript snippet\";\n return <details className=\"mt-2.5 overflow-hidden rounded-sm border border-border-soft bg-card open:[&>summary]:before:rotate-45\" onToggle={(event) => setExpanded(event.currentTarget.open)}>\n <summary className={summaryClass}>\n <span className=\"truncate font-[650]\" title={`${execution.actorName} (${execution.actorId})`}>@{execution.actorHandle}</span>\n <Badge className={`h-auto rounded-[5px] px-[5px] py-0.5 text-[0.64rem] ${statusBadgeClass[execution.status] ?? \"bg-secondary text-muted-foreground\"}`}>{executionStatusLabel(execution.status)}</Badge>\n <span className=\"col-span-full truncate font-mono text-[0.68rem]\" title={preview}>{preview}</span>\n <span className=\"col-span-full flex flex-wrap justify-between gap-x-3 gap-y-1.5 text-[0.65rem] tabular-nums text-muted-foreground\"><time dateTime={execution.startedAt} title={new Date(execution.startedAt).toLocaleString()}>{new Date(execution.startedAt).toLocaleString(undefined, { day: \"2-digit\", month: \"2-digit\", hour: \"2-digit\", minute: \"2-digit\", second: \"2-digit\" })}</time><span>{executionDuration(execution, now)}</span></span>\n </summary>\n {expanded && <div className={contentClass}>\n {execution.path && <p className=\"mt-2.5 grid gap-1 text-[0.68rem] text-muted-foreground\"><span>Path</span><code className=\"[overflow-wrap:anywhere]\">{execution.path}</code></p>}\n <h3>Code</h3>\n {execution.code !== null ? <SourceCode className={sourceClass} content={execution.code} language=\"typescript\" path={execution.path ?? \"snippet.ts\"} /> : <p className=\"text-[0.72rem] leading-[1.5] text-muted-foreground\">{execution.path ? \"No historical code is stored for this path call.\" : \"No historical code is stored for this call.\"}</p>}\n {execution.logs.length > 0 && <><h3>Logs</h3><pre className={logClass}>{execution.logs.join(\"\\n\")}</pre></>}\n {execution.result !== undefined && <><h3>Result</h3><SourceCode className={sourceClass} content={JSON.stringify(execution.result, null, 2)} language=\"json\" path=\"result.json\" /></>}\n {execution.error && <><h3>{execution.status === \"interrupted\" ? \"Interruption\" : \"Error\"}</h3><pre className={`${logClass} text-destructive`}>{execution.error}</pre></>}\n </div>}\n </details>;\n}\n\nexport function IconExecutions() {\n return <svg aria-hidden fill=\"none\" height=\"15\" stroke=\"currentColor\" strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth=\"1.7\" viewBox=\"0 0 24 24\" width=\"15\"><path d=\"m7 7-4 5 4 5m10-10 4 5-4 5M14 4l-4 16\" /></svg>;\n}\n", "import { SearchIcon } from \"lucide-react\";\nimport { INSPECTION_TAB_ID, InspectionPanel } from \"./InspectionPanel\";\nimport { useEffect, useState } from \"react\";\nimport { OrchestrationRunPanel } from \"./run-panel/RunPanel\";\nimport { DocumentsSection } from \"./DocumentsSection\";\nimport { JournalStatus } from \"./JournalStatus\";\nimport { StopRunHeader } from \"./StopRunButton\";\nimport { EXECUTIONS_TAB_ID, ExecutionsPanel, IconExecutions } from \"./ExecutionsPanel\";\nimport { ORCHESTRATION_PLUGIN_ID } from \"./constants\";\nimport { runViewFrom } from \"@ragents/web/run-view\";\nimport {\n SurfaceControllerProvider,\n type EntityReference,\n type SessionProviderProps,\n type WebPlugin,\n} from \"@ragents/web/PluginRegistry\";\n\nexport { ORCHESTRATION_PLUGIN_ID } from \"./constants\";\n\n/** The selection on the surface: an artifact opens the documents; actors and mini-apps report the current location. */\nfunction OrchestrationSessionProvider({ children, navigation, session }: SessionProviderProps) {\n const runView = runViewFrom(session.runView);\n const [selection, setSelection] = useState<EntityReference>();\n\n useEffect(() => {\n if (runView) return;\n setSelection(undefined);\n }, [runView]);\n\n const acceptSelection = (next: EntityReference | undefined) => {\n if (next?.type === \"artifact\" && navigation.revealEntity(next)) return;\n setSelection(next);\n };\n\n return (\n <SurfaceControllerProvider value={{ acceptSelection, selection }}>\n {children}\n </SurfaceControllerProvider>\n );\n}\n\nexport const webPlugin: WebPlugin = {\n id: ORCHESTRATION_PLUGIN_ID,\n needsRunView: true,\n sessionStatus: [{ id: \"ragents.orchestration.journal\", readRight: \"runs.inspect\", order: 20, Status: JournalStatus }],\n sessionHeaders: [\n { id: \"ragents.orchestration.stop\", readRight: \"runs.write\", order: 100, Header: StopRunHeader },\n ],\n surface: { RunPanel: OrchestrationRunPanel },\n cardSections: [{\n id: \"ragents.orchestration.documents\",\n order: 300,\n Section: DocumentsSection,\n }],\n SessionProvider: OrchestrationSessionProvider,\n workspaceTabs: [{\n id: INSPECTION_TAB_ID,\n readRight: \"runs.inspect\",\n label: \"Inspection\",\n order: 100,\n Icon: SearchIcon,\n Panel: InspectionPanel,\n keepMounted: true,\n available: (session) => runViewFrom(session.runView) !== undefined,\n }, {\n id: EXECUTIONS_TAB_ID,\n readRight: \"runs.inspect\",\n label: \"Executions\",\n order: 110,\n Icon: IconExecutions,\n Panel: ExecutionsPanel,\n keepMounted: true,\n available: (session) => runViewFrom(session.runView) !== undefined,\n }],\n};\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["toKebabCase", "string", "toLucideIconData", "iconName", "iconNode", "aliases", "toKebabCase", "toCamelCase", "string", "out", "upperNext", "ch", "toPascalCase", "string", "camelCase", "toCamelCase", "mergeClasses", "classes", "className", "index", "array", "defaultAttributes", "isDefined", "value", "buildLucideIconNode", "icon", "params", "attributeNames", "getAttributeName", "attributeName", "viewBoxWidth", "defaultAttributes", "viewBoxHeight", "aliasClassNames", "alias", "iconClassNames", "classNamesFromClassName", "className", "mergeClasses", "calculatedStrokeWidth", "attrs", "attrName", "child", "name", "children", "nextAttrs", "buildLucideIconForReact", "icon", "params", "buildLucideIconNode", "hasA11yProp", "props", "prop", "LucideContext", "react_createContext_default", "useLucideContext", "react_useContext_default", "LucideContext", "Icon", "react_forwardRef_default", "color", "size", "width", "height", "strokeWidth", "absoluteStrokeWidth", "nonScalingStroke", "className", "children", "iconNode", "icon", "rest", "ref", "contextSize", "contextStrokeWidth", "contextAbsoluteStrokeWidth", "contextNonScalingStroke", "contextColor", "contextClass", "useLucideContext", "hasAccessibleProp", "hasA11yProp", "name", "svgAttributes", "builtIconNode", "buildLucideIconForReact", "mergeClasses", "react_createElement_default", "tag", "attrs", "createLucideIcon", "iconDataOrName", "iconNode", "aliases", "iconData", "toLucideIconData", "Component", "react_forwardRef_default", "className", "props", "ref", "react_createElement_default", "Icon", "toPascalCase", "__iconData", "ArrowLeft", "createLucideIcon", "__iconData", "ArrowUpRight", "createLucideIcon", "__iconData", "ChevronDown", "createLucideIcon", "__iconData", "ChevronRight", "createLucideIcon", "__iconData", "Code", "createLucideIcon", "__iconData", "LayoutGrid", "createLucideIcon", "__iconData", "Search", "createLucideIcon", "__iconData", "Sparkles", "createLucideIcon", "__iconData", "Users", "createLucideIcon", "__iconData", "Wrench", "createLucideIcon", "__iconData", "X", "createLucideIcon", "ui_Alert_default", "read", "ui_AlertDescription_default", "read", "ui_Badge_default", "read", "ui_Button_default", "read", "ui_Empty_default", "read", "ui_EmptyDescription_default", "read", "ui_EmptyHeader_default", "read", "ui_EmptyTitle_default", "read", "ui_Input_default", "read", "ui_Popover_default", "read", "ui_PopoverContent_default", "read", "ui_SectionLabel_default", "read", "ui_Select_default", "read", "ui_SelectContent_default", "read", "ui_SelectItem_default", "read", "ui_SelectTrigger_default", "read", "ui_SelectValue_default", "read", "ui_Spinner_default", "read", "ui_StartupNotice_default", "read", "ui_StopGlyph_default", "read", "ui_Tabs_default", "read", "ui_TabsContent_default", "read", "ui_TabsList_default", "read", "ui_TabsTrigger_default", "read", "ui_cn_default", "read", "run_view_actorTone_default", "read", "run_view_chatPrimaryId_default", "read", "run_view_isPendingRunActorInput_default", "read", "run_view_runActorFrom_default", "read", "run_view_runArtifactContentUrl_default", "read", "run_view_runViewFrom_default", "read", "AccessContext_useAccess_default", "read", "quassel_ChatInputToolbar_default", "read", "quassel_ChatMessages_default", "read", "quassel_ChatPanel_default", "read", "PluginRegistry_SurfaceControllerProvider_default", "read", "PluginRegistry_useActionRenderer_default", "read", "PluginRegistry_useSurfaceController_default", "read", "PluginRegistry_useToolRenderer_default", "read", "chat_view_settings_ChatViewSwitches_default", "read", "chat_view_settings_useChatViewSettings_default", "read", "actor_conversation_actorChatMessages_default", "read", "actor_conversation_actorInputLabel_default", "read", "jsx_runtime_Fragment_default", "read", "jsx_runtime_jsx_default", "read", "jsx_runtime_jsxs_default", "read", "emptyMessages", "ActorChat", "actor", "view", "presentation", "display", "primaryMessages", "conversation", "historyError", "running", "className", "onNavigate", "scrollerRef", "inspect", "AccessContext_useAccess_default", "chatView", "chat_view_settings_useChatViewSettings_default", "renderTool", "PluginRegistry_useToolRenderer_default", "renderAction", "PluginRegistry_useActionRenderer_default", "configuredMode", "detailMode", "messages", "react_useMemo_default", "actor_conversation_actorChatMessages_default", "openLink", "react_useCallback_default", "href", "match", "jsx_runtime_jsxs_default", "jsx_runtime_Fragment_default", "jsx_runtime_jsx_default", "quassel_ChatMessages_default", "ui_Empty_default", "ui_EmptyHeader_default", "ui_EmptyTitle_default", "ui_EmptyDescription_default", "api_interruptActorTurn_default", "read", "api_sendActorMessage_default", "read", "StoppedActorNotice_StoppedActorNotice_default", "read", "useAttachmentCapabilities_useAttachmentCapabilities_default", "read", "chat_target_programChatNotice_default", "read", "controlsClass", "noteClass", "ActorChatControls", "actor", "view", "composerVisible", "presentation", "display", "running", "toolbarLeft", "toolbarRight", "writable", "AccessContext_useAccess_default", "stopError", "setStopError", "react_useState_default", "chatView", "chat_view_settings_useChatViewSettings_default", "attachments", "useAttachmentCapabilities_useAttachmentCapabilities_default", "disabledReason", "switches", "jsx_runtime_jsx_default", "chat_view_settings_ChatViewSwitches_default", "jsx_runtime_jsxs_default", "chat_target_programChatNotice_default", "StoppedActorNotice_StoppedActorNotice_default", "jsx_runtime_Fragment_default", "quassel_ChatInputToolbar_default", "text", "files", "api_sendActorMessage_default", "api_interruptActorTurn_default", "error", "contracts_runContracts_default", "read", "rpc_rpc_default", "read", "resolveAction", "runId", "actionId", "decision", "result", "rpc_rpc_default", "contracts_runContracts_default", "stopActor", "actorId", "reason", "restartActor", "stopRun", "format_formatBytes_default", "read", "SourceCode_SourceCode_default", "read", "labels_thinkingLabel_default", "read", "formatTime", "iso", "date", "inspectorClass", "headClass", "subtitleClass", "statusClass", "scrollClass", "sectionClass", "rowsClass", "rowClass", "rowCopyClass", "mutedClass", "errorClass", "propertiesClass", "textBlockClass", "linkClass", "pillClass", "pillToneClass", "tabClass", "STATUS_LABELS", "ACTOR_KIND_LABELS", "STOP_REASON", "shortId", "id", "turnUsageOf", "turn", "runCostUsd", "view", "costs", "cost", "sum", "formatCostUsd", "value", "indexOf", "entry", "actorLabel", "index", "actorId", "inputDeliveryLabel", "input", "actor_conversation_actorInputLabel_default", "FlowInspector", "props", "inspect", "AccessContext_useAccess_default", "react_useMemo_default", "jsx_runtime_jsx_default", "ui_Empty_default", "jsx_runtime_jsxs_default", "ui_EmptyHeader_default", "ui_EmptyTitle_default", "ui_EmptyDescription_default", "selection", "actor", "subscription", "action", "artifact", "fallbackActor", "conversationActor", "ActorView", "InputView", "TurnView", "SubscriptionView", "ActionView", "ArtifactView", "BackButton", "canGoBack", "onBack", "ui_Button_default", "ArrowLeft", "StatusPill", "status", "ui_Badge_default", "sectionIconPaths", "SectionIcon", "kind", "SectionTabs", "sections", "children", "react_useId_default", "openId", "setOpenId", "react_useState_default", "open", "section", "ui_Tabs_default", "ui_TabsList_default", "ui_TabsTrigger_default", "ui_TabsContent_default", "CapabilityList", "grants", "grant", "position", "scope", "suffix", "actionClass", "ActionCard", "runId", "onError", "writable", "response", "setResponse", "busy", "setBusy", "resolve", "decision", "answer", "resolveAction", "error", "ui_Input_default", "event", "SourceListing", "handle", "source", "SourceCode_SourceCode_default", "access", "programs", "useProgramSlot", "programSource", "setError", "inputs", "left", "right", "turns", "subscriptions", "actions", "artifacts", "pendingInputCount", "run_view_isPendingRunActorInput_default", "primary", "runCost", "active", "lifecycle", "inputsConfig", "driver", "driverLabel", "config", "labels_thinkingLabel_default", "name", "formatTime", "format_formatBytes_default", "Wrench", "stopActor", "caught", "restartActor", "ActorChat", "ActorChatControls", "DetailHeader", "eyebrow", "title", "subtitle", "EntityLink", "SelectionLink", "jsx_runtime_Fragment_default", "ArtifactRows", "usage", "ActorRows", "label", "onNavigate", "actorIds", "isTextMedia", "mediaType", "lower", "useArtifactContent", "cacheRef", "react_useRef_default", "version", "setVersion", "artifactId", "retry", "react_useEffect_default", "run_view_runArtifactContentUrl_default", "text", "DIFF_LINE_LIMIT", "lineDiff", "lengths", "row", "column", "rows", "ArtifactDiff", "previous", "before", "after", "beforeText", "afterText", "marks", "content", "carriedOn", "INSPECTION_TAB_ID", "InspectionPanel", "navigation", "selection", "session", "view", "run_view_runViewFrom_default", "primary", "run_view_chatPrimaryId_default", "selected", "jsx_runtime_jsxs_default", "jsx_runtime_jsx_default", "actor", "ui_Button_default", "FlowInspector", "next", "run_apps_RunAppView_default", "read", "run_apps_runApps_default", "read", "run_apps_selectedRunApp_default", "read", "host_useRunPanelHost_default", "read", "surfaceStartupState", "view", "startup", "connected", "running", "error", "actors", "actor", "activeActors", "action", "activeIds", "turn", "input", "run_view_isPendingRunActorInput_default", "failed", "ORCHESTRATION_PLUGIN_ID", "statusControlClass", "cardSectionsClass", "ActorPopout", "open", "id", "label", "closeLabel", "buttonRef", "onClose", "width", "height", "placement", "focusInput", "keepMounted", "role", "headerContent", "children", "panelRef", "react_useRef_default", "pressedAnchor", "details", "jsx_runtime_jsx_default", "ui_Popover_default", "next", "jsx_runtime_jsxs_default", "ui_PopoverContent_default", "ui_Button_default", "X", "runPanelActors", "view", "inspect", "candidates", "actor", "primaryId", "run_view_chatPrimaryId_default", "pendingInputCount", "actorId", "input", "ADDRESSEE_GROUP_MIN", "ADDRESSEE_SEARCH_ABOVE", "SUMMARY_LENGTH", "STATUS_WORDS", "STATUS_ORDER", "lower", "text", "shortened", "line", "entry", "cut", "space", "addresseeStatus", "view", "actor", "action", "addresseeStatusWord", "status", "count", "addresseeStatusCounts", "actors", "counts", "addresseeSummaries", "firstInputs", "input", "known", "described", "first", "name", "addresseeParentId", "byId", "included", "visited", "current", "creator", "handleStem", "handle", "groupLabel", "handles", "length", "common", "index", "prefix", "addresseeTree", "primaryId", "run_view_chatPrimaryId_default", "siblings", "parent", "branch", "level", "parentId", "entries", "ordered", "keyOf", "members", "key", "emitted", "group", "member", "addresseeMatches", "query", "summary", "words", "kept", "word", "addresseeNodeContains", "node", "actorId", "child", "entryClass", "branchClass", "iconClass", "statusClass", "actorType", "actor", "technical", "ActorIcon", "className", "view", "tone", "run_view_actorTone_default", "jsx_runtime_jsx_default", "ui_cn_default", "ui_Spinner_default", "Sparkles", "Users", "Code", "AddresseeTree", "nodes", "props", "node", "ActorBranch", "GroupBranch", "jsx_runtime_jsxs_default", "ActorEntry", "onPick", "selectedId", "summary", "pending", "pendingInputCount", "status", "addresseeStatus", "description", "name", "showName", "current", "addresseeStatusWord", "ui_Badge_default", "onToggle", "openByDefault", "toggled", "actors", "member", "open", "addresseeNodeContains", "counts", "addresseeStatusCounts", "running", "sum", "ChevronRight", "chipClass", "busyClass", "AddresseeControl", "actors", "onSelect", "selected", "technical", "view", "open", "setOpen", "react_useState_default", "query", "setQuery", "toggled", "setToggled", "buttonRef", "react_useRef_default", "panelId", "react_useId_default", "close", "react_useCallback_default", "restoreFocus", "revealSelected", "element", "working", "react_useMemo_default", "actor", "summary", "addresseeSummaries", "searching", "tree", "addresseeTree", "addresseeMatches", "toggle", "key", "current", "next", "pick", "busyTitle", "busyPending", "pendingInputCount", "treeProps", "jsx_runtime_jsxs_default", "jsx_runtime_Fragment_default", "jsx_runtime_jsx_default", "ActorIcon", "ChevronDown", "ui_Spinner_default", "ui_Badge_default", "ActorPopout", "ADDRESSEE_SEARCH_ABOVE", "ui_Input_default", "event", "AddresseeTree", "STARTUP_SETTLE_MS", "chatShowsContent", "messages", "message", "useRunPanelStartup", "state", "connected", "content", "contentSeen", "setContentSeen", "react_useState_default", "held", "setHeld", "working", "title", "detail", "react_useEffect_default", "timer", "local_storage_setting_createLocalStorageSetting_default", "read", "DEFAULT_RUN_PANEL_STATE", "runPanelStorageKey", "runId", "isTextOrNull", "value", "parseRunPanelState", "raw", "key", "setting", "local_storage_setting_createLocalStorageSetting_default", "useRunPanelState", "saveRunPanelState", "state", "chipClass", "viewClass", "chatSurfaceClass", "OrchestrationRunPanel", "props", "jsx_runtime_jsx_default", "RunPanel", "surfaceElements", "cardSections", "navigation", "renderChat", "session", "runId", "surface", "PluginRegistry_useSurfaceController_default", "inspect", "AccessContext_useAccess_default", "host", "host_useRunPanelHost_default", "view", "run_view_runViewFrom_default", "stored", "useRunPanelState", "save", "react_useCallback_default", "patch", "saveRunPanelState", "elements", "react_useMemo_default", "run_apps_runApps_default", "selectedElement", "run_apps_selectedRunApp_default", "react_useEffect_default", "visited", "setVisited", "react_useState_default", "selectedId", "current", "startup", "useRunPanelStartup", "surfaceStartupState", "chatShowsContent", "notice", "RunPanelStartup", "actors", "runPanelActors", "primaryId", "run_view_chatPrimaryId_default", "selectedActor", "actor", "visitedActors", "setVisitedActors", "selectActor", "navigate", "selection", "entry", "INSPECTION_TAB_ID", "primarySelected", "addressee", "jsx_runtime_jsxs_default", "jsx_runtime_Fragment_default", "AddresseeControl", "ui_Button_default", "Search", "definition", "LayoutGrid", "ArrowUpRight", "selected", "ActorRunPanelChat", "element", "run_apps_RunAppView_default", "onNavigate", "toolbarLeft", "running", "cardSectionsClass", "id", "Section", "quassel_ChatPanel_default", "ActorChatControls", "ActorChat", "state", "ui_StartupNotice_default", "openDocument", "navigation", "artifact", "DocumentsSection", "actor", "session", "view", "run_view_runViewFrom_default", "actorId", "run_view_runActorFrom_default", "documents", "jsx_runtime_jsxs_default", "ui_SectionLabel_default", "jsx_runtime_jsx_default", "format_formatBytes_default", "JournalStatus", "session", "open", "setOpen", "react_useState_default", "events", "setEvents", "error", "setError", "loading", "setLoading", "reload", "setReload", "query", "setQuery", "limit", "setLimit", "buttonRef", "react_useRef_default", "searchRef", "panelId", "react_useId_default", "view", "run_view_runViewFrom_default", "revision", "close", "react_useCallback_default", "restoreFocus", "react_useEffect_default", "controller", "rpc_rpc_default", "contracts_runContracts_default", "result", "cause", "filtered", "react_useMemo_default", "search", "handles", "actor", "event", "actors", "jsx_runtime_jsxs_default", "jsx_runtime_jsx_default", "statusControlClass", "value", "ui_Popover_default", "next", "ui_PopoverContent_default", "ui_Button_default", "X", "ui_Input_default", "JournalEntry", "expanded", "setExpanded", "toggle", "SourceCode_SourceCode_default", "Toolbar_ToolbarItem_default", "read", "STOP_RUN_REASON", "StopRunHeader", "session", "jsx_runtime_jsx_default", "Toolbar_ToolbarItem_default", "StopRunButton", "runId", "writable", "AccessContext_useAccess_default", "armed", "setArmed", "react_useState_default", "busy", "setBusy", "error", "setError", "stop", "stopRun", "caught", "jsx_runtime_jsxs_default", "ui_Button_default", "ui_StopGlyph_default", "record", "value", "executionKey", "actorId", "turnId", "toolCallId", "executionEventsFrom", "runId", "entry", "payload", "projectExecutions", "events", "view", "executions", "actors", "actor", "ends", "event", "left", "right", "key", "input", "execution", "output", "envelope", "line", "turns", "turn", "turnKey", "call", "ended", "executionStatusLabel", "status", "filterExecutions", "query", "search", "executionDuration", "now", "milliseconds", "seconds", "EXECUTIONS_TAB_ID", "ExecutionsPanel", "active", "session", "view", "run_view_runViewFrom_default", "runId", "jsx_runtime_jsx_default", "RunExecutionsPanel", "journal", "setJournal", "react_useState_default", "query", "setQuery", "status", "setStatus", "statusOptions", "value", "executionStatusLabel", "now", "setNow", "reload", "setReload", "revision", "react_useEffect_default", "controller", "previous", "rpc_rpc_default", "contracts_runContracts_default", "result", "events", "executionEventsFrom", "error", "executions", "react_useMemo_default", "projectExecutions", "filtered", "filterExecutions", "running", "execution", "timer", "jsx_runtime_jsxs_default", "ui_Input_default", "event", "ui_Select_default", "ui_SelectTrigger_default", "ui_SelectValue_default", "ui_SelectContent_default", "option", "ui_SelectItem_default", "ui_Alert_default", "ui_AlertDescription_default", "ui_Button_default", "ExecutionEntry", "statusBadgeClass", "summaryClass", "contentClass", "sourceClass", "logClass", "expanded", "setExpanded", "preview", "line", "ui_Badge_default", "executionDuration", "SourceCode_SourceCode_default", "jsx_runtime_Fragment_default", "IconExecutions", "OrchestrationSessionProvider", "children", "navigation", "session", "runView", "run_view_runViewFrom_default", "selection", "setSelection", "react_useState_default", "react_useEffect_default", "jsx_runtime_jsx_default", "PluginRegistry_SurfaceControllerProvider_default", "next", "webPlugin", "ORCHESTRATION_PLUGIN_ID", "JournalStatus", "StopRunHeader", "OrchestrationRunPanel", "DocumentsSection", "INSPECTION_TAB_ID", "Search", "InspectionPanel", "EXECUTIONS_TAB_ID", "IconExecutions", "ExecutionsPanel"]
|
|
7
7
|
}
|