@qredence/fleet 0.5.1 → 0.5.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (78) hide show
  1. package/CHANGELOG.md +7 -0
  2. package/bin/fleet-prime.mjs +6 -0
  3. package/dist/web/client/assets/action-swap-roll-DX5o_33Q.js +1 -0
  4. package/dist/web/client/assets/artifacts-panel-C3yewUBP.js +1 -0
  5. package/dist/web/client/assets/{chat-CsepBQwy.js → chat-W-yOMyG_.js} +1 -1
  6. package/dist/web/client/assets/chat-command-palette-D0xDK1j4.js +1 -0
  7. package/dist/web/client/assets/command-CQzrtjyj.js +2 -0
  8. package/dist/web/client/assets/{fleet-pi-tool-renderer-BD_ZAjlG.js → fleet-pi-tool-renderer-B0Y7ou0U.js} +16 -16
  9. package/dist/web/client/assets/generative-text-renderer-SS9c1kNX.js +6 -0
  10. package/dist/web/client/assets/globals-D_Hy9bT1.css +2 -0
  11. package/dist/web/client/assets/{index-DweoFRMs.js → index-C9FloFgj.js} +2 -2
  12. package/dist/web/client/assets/{ipython-tool-BfeIa0nK.js → ipython-tool-BrMePqD-.js} +1 -1
  13. package/dist/web/client/assets/{openui-renderer-DlUo6ehT.js → openui-renderer-CCfQqUfE.js} +5 -5
  14. package/dist/web/client/assets/{prime-agent-artifacts-CHGb5V_j.js → prime-agent-artifacts-C-g1VPiW.js} +1 -1
  15. package/dist/web/client/assets/range-65lubOFp.js +2 -0
  16. package/dist/web/client/assets/repl-panel-CCh4ly7J.js +1 -0
  17. package/dist/web/client/assets/routes-DSTyx_J0.js +16 -0
  18. package/dist/web/client/assets/session-insights-panel-CQdT90Op.js +1 -0
  19. package/dist/web/client/assets/subagent-chat-panel-D-qw4uWb.js +1 -0
  20. package/dist/web/client/assets/subagent-transcript-C7oRwEEP.js +1 -0
  21. package/dist/web/client/assets/subagents-panel-aSMWZP9p.js +1 -0
  22. package/dist/web/client/assets/{tool-result-CBzwwUE9.js → tool-result-C2NvnN32.js} +3 -3
  23. package/dist/web/server/{_tanstack-start-manifest_v-bDUlyKY0-KFW35JRO.js → _tanstack-start-manifest_v-DZc7dwm7-6ZQLGXB7.js} +13 -13
  24. package/dist/web/server/{artifacts-panel-D9w1DHAN-FGRDCYU2.js → artifacts-panel-Bt7YUzm4-NCBMXJ25.js} +15 -15
  25. package/dist/web/server/{chat-command-palette-BaenPkCN-BHSOPGU4.js → chat-command-palette-Co1L3rUY-RQLNME4T.js} +33 -12
  26. package/dist/web/server/{chunk-KPNGZR2R.js → chunk-2V6B62OF.js} +204 -204
  27. package/dist/web/server/{chunk-44IVTHDV.js → chunk-3HUI75QM.js} +60 -60
  28. package/dist/web/server/{chunk-5AVQZ4AZ.js → chunk-4UBOIY2S.js} +2 -1
  29. package/dist/web/server/{chunk-Y6LJ4WBI.js → chunk-56HSKUBD.js} +699 -691
  30. package/dist/web/server/{chunk-RPROZ2JC.js → chunk-5RQ6QAZX.js} +133 -133
  31. package/dist/web/server/{chunk-PWK2HJIV.js → chunk-6D524OCJ.js} +175 -175
  32. package/dist/web/server/{chunk-FBOO3G67.js → chunk-AECEK3K7.js} +6 -6
  33. package/dist/web/server/{chunk-VHCAD46L.js → chunk-AWFOBHH4.js} +4 -4
  34. package/dist/web/server/{chunk-FVWDJNXR.js → chunk-BEMDNODD.js} +1 -1
  35. package/dist/web/server/{chunk-X2TUFLTP.js → chunk-BLVCDQ7E.js} +438 -438
  36. package/dist/web/server/{chunk-EIVNRYP3.js → chunk-FZRBAPUM.js} +2 -2
  37. package/dist/web/server/chunk-KOIPYBJF.js +3773 -0
  38. package/dist/web/server/{chunk-XYYNYFFD.js → chunk-LSIHVSUT.js} +2 -2
  39. package/dist/web/server/{chunk-H64JLONZ.js → chunk-PDRD2X5G.js} +2 -2
  40. package/dist/web/server/{chunk-FE4KN6T2.js → chunk-RX62LUDV.js} +4 -4
  41. package/dist/web/server/chunk-SR65ARVS.js +192 -0
  42. package/dist/web/server/{chunk-WK7CQS2N.js → chunk-SZ65K4CO.js} +48 -48
  43. package/dist/web/server/{chunk-DO3TVNGA.js → chunk-TO3YPLNZ.js} +6 -6
  44. package/dist/web/server/{chunk-3IKSPTYI.js → chunk-UKINNXJY.js} +2 -2
  45. package/dist/web/server/{chunk-M2FGGPNA.js → chunk-VGDP4YDU.js} +70 -45
  46. package/dist/web/server/{chunk-PCJ5EKFE.js → chunk-VRLTWOVJ.js} +11 -6
  47. package/dist/web/server/{chunk-HBZ6YKRB.js → chunk-WN77JNYY.js} +2 -2
  48. package/dist/web/server/{chunk-2U7PWSJX.js → chunk-WZNZQNI4.js} +231 -3633
  49. package/dist/web/server/{chunk-B2F6MLVZ.js → chunk-XFVL5ITL.js} +2246 -2228
  50. package/dist/web/server/{chunk-3GSFXWL5.js → chunk-XLCTCC4W.js} +3 -3
  51. package/dist/web/server/{chunk-AZZHUVJR.js → chunk-Y4MHIA7B.js} +18 -26
  52. package/dist/web/server/{fleet-pi-tool-renderer-lJvZWmBJ-4M5YI6VS.js → fleet-pi-tool-renderer-CE45vM6T-2UQN6RJM.js} +11 -9
  53. package/dist/web/server/{fork-picker-dialog-BZzfxdQd-Y725VJ7G.js → fork-picker-dialog-DCzuGelH-TN2Q5OXI.js} +5 -5
  54. package/dist/web/server/{openui-renderer-Cg4RSE9k-7BTJIYZJ.js → openui-renderer-c36_GYes-HX46N4M5.js} +11 -11
  55. package/dist/web/server/{repl-panel-BEQrC2ef-V3YEZ7EO.js → repl-panel-D9E8nkQy-L45ZNG2V.js} +4 -3
  56. package/dist/web/server/{router-CEahIUpn-SRG7XKIH.js → router-_ZpegqiQ-QIE44PIB.js} +1737 -1370
  57. package/dist/web/server/{routes-BznemByz-F4DJAYIM.js → routes-Ct81-8Tq-LHRMOS7R.js} +2882 -2330
  58. package/dist/web/server/server.js +3 -3
  59. package/dist/web/server/{session-insights-panel-JfeTHE0d-3HZB3ZWI.js → session-insights-panel-BHZyKDTo-LRMAMA3O.js} +4 -2
  60. package/dist/web/server/{settings-dialog-DgeBMORv-7SRSENPM.js → settings-dialog-B4uUS6f--AZ4I4ZOT.js} +142 -142
  61. package/dist/web/server/{start-CLAD7RcD-56S4BWMM.js → start-BYVnok_H-IA6TWGA3.js} +1 -1
  62. package/dist/web/server/subagent-chat-panel-C97S3WID-DLOAD5TG.js +63 -0
  63. package/dist/web/server/subagents-panel-iHpvMIZy-LI6XK66M.js +181 -0
  64. package/dist/web/server/{workspace-panel-y54P79_B-VPIYUXF6.js → workspace-panel-CHPoiXEo-YB4WS3MK.js} +2 -2
  65. package/package.json +5 -5
  66. package/dist/web/client/assets/artifacts-panel-CX62LQ13.js +0 -1
  67. package/dist/web/client/assets/chat-command-palette-C4sSf8Kg.js +0 -1
  68. package/dist/web/client/assets/collapsible-DmyYcezk.js +0 -1
  69. package/dist/web/client/assets/command-CB6emP8m.js +0 -2
  70. package/dist/web/client/assets/conversation-turns-ByFoWPXe.js +0 -6
  71. package/dist/web/client/assets/globals-CqqQdk2S.css +0 -2
  72. package/dist/web/client/assets/range-vSJ7Ux_5.js +0 -2
  73. package/dist/web/client/assets/repl-panel-DiGS6uCw.js +0 -1
  74. package/dist/web/client/assets/routes-CxlNCi_v.js +0 -16
  75. package/dist/web/client/assets/session-insights-panel-DwmwiikS.js +0 -1
  76. package/dist/web/client/assets/subagents-panel-DGnsK6Nx.js +0 -1
  77. package/dist/web/server/chunk-ZEVZFLIY.js +0 -334
  78. package/dist/web/server/subagents-panel-CzZe3co7-2VZ5JTWF.js +0 -332
@@ -3,9 +3,9 @@ import {
3
3
  useId$1,
4
4
  useIsoLayoutEffect,
5
5
  useRefWithInit
6
- } from "./chunk-X2TUFLTP.js";
6
+ } from "./chunk-BLVCDQ7E.js";
7
7
 
8
- // web/app/dist/server/assets/useBaseUiId-BJH6Ww_M.js
8
+ // web/app/dist/server/assets/useBaseUiId-CQSJHoz4.js
9
9
  import * as React$1 from "react";
10
10
  function useValueAsRef(value) {
11
11
  const latest = useRefWithInit(createLatestRef, value).current;
@@ -14,9 +14,9 @@ import {
14
14
  nonEmptyStringSchema,
15
15
  nonNegativeIntSchema,
16
16
  positiveIntSchema
17
- } from "./chunk-B2F6MLVZ.js";
17
+ } from "./chunk-XFVL5ITL.js";
18
18
 
19
- // web/app/dist/server/assets/chat-protocol.zod-Dp4CNS-9.js
19
+ // web/app/dist/server/assets/chat-protocol.zod-adEe9eKH.js
20
20
  import { useEffect, useRef, useState } from "react";
21
21
  import { jsx } from "react/jsx-runtime";
22
22
  function LazyMotion({ children, features, strict = false }) {
@@ -30,12 +30,12 @@ import {
30
30
  usePortalContext,
31
31
  useTimeout,
32
32
  webkit
33
- } from "./chunk-RPROZ2JC.js";
33
+ } from "./chunk-5RQ6QAZX.js";
34
34
  import {
35
35
  useBaseUiId,
36
36
  useTransitionStatus,
37
37
  useValueAsRef
38
- } from "./chunk-XYYNYFFD.js";
38
+ } from "./chunk-LSIHVSUT.js";
39
39
  import {
40
40
  AnimationFrame,
41
41
  EMPTY_OBJECT,
@@ -73,12 +73,12 @@ import {
73
73
  useRefWithInit,
74
74
  useRenderElement,
75
75
  useStableCallback
76
- } from "./chunk-X2TUFLTP.js";
76
+ } from "./chunk-BLVCDQ7E.js";
77
77
  import {
78
78
  cn
79
79
  } from "./chunk-DJMHPJBP.js";
80
80
 
81
- // web/app/dist/server/assets/dialog-BP46mwfT.js
81
+ // web/app/dist/server/assets/dialog-kkjbxEm9.js
82
82
  import * as React$1 from "react";
83
83
  import { createContext as createContext2, useContext as useContext2 } from "react";
84
84
  import { jsx, jsxs } from "react/jsx-runtime";
@@ -0,0 +1,192 @@
1
+ import {
2
+ FleetGenerativeTextRenderer,
3
+ FleetSubagentList,
4
+ FleetToolTimeline,
5
+ Message,
6
+ MessageBubble,
7
+ MessageBubbleContent,
8
+ MessageContent,
9
+ MessageScroller,
10
+ UserMessage,
11
+ buildAssistantElements,
12
+ groupMessages,
13
+ normalizeAssistantToolParts
14
+ } from "./chunk-56HSKUBD.js";
15
+ import {
16
+ FleetPiToolRenderer
17
+ } from "./chunk-VRLTWOVJ.js";
18
+ import {
19
+ PI_TOOL_RENDERERS
20
+ } from "./chunk-3HUI75QM.js";
21
+ import {
22
+ RefreshCw
23
+ } from "./chunk-FZRBAPUM.js";
24
+ import {
25
+ Bot
26
+ } from "./chunk-74QOI457.js";
27
+ import {
28
+ derivePrimeAgentArtifactRuns
29
+ } from "./chunk-4UBOIY2S.js";
30
+ import {
31
+ Button
32
+ } from "./chunk-5RQ6QAZX.js";
33
+ import {
34
+ CircleAlert
35
+ } from "./chunk-7APYEQIO.js";
36
+ import {
37
+ cn
38
+ } from "./chunk-DJMHPJBP.js";
39
+
40
+ // web/app/dist/server/assets/subagent-transcript-CDugT-kD.js
41
+ import { useMemo } from "react";
42
+ import { jsx, jsxs } from "react/jsx-runtime";
43
+ function transcriptStatus(child) {
44
+ if (child.status === "running" || child.status === "recovering") return "streaming";
45
+ if (child.status === "error" || child.status === "failed") return "error";
46
+ return "ready";
47
+ }
48
+ function SubagentTurnView({ turn, isLast, isStreaming, artifacts, presentation }) {
49
+ const assistantElements = useMemo(() => turn.assistants.flatMap((message, index) => buildAssistantElements(normalizeAssistantToolParts(message.parts ?? []), {
50
+ messageId: message.id,
51
+ isLast: isLast && index === turn.assistants.length - 1,
52
+ isStreaming,
53
+ suppressQuestionTool: true,
54
+ ToolRendererComponent: FleetPiToolRenderer,
55
+ TextRendererComponent: FleetGenerativeTextRenderer,
56
+ toolRenderers: PI_TOOL_RENDERERS
57
+ })), [
58
+ isLast,
59
+ isStreaming,
60
+ turn.assistants
61
+ ]);
62
+ return /* @__PURE__ */ jsxs("div", {
63
+ className: "flex flex-col gap-3",
64
+ children: [turn.user ? /* @__PURE__ */ jsx(Message, {
65
+ from: "user",
66
+ children: /* @__PURE__ */ jsx(MessageContent, { children: /* @__PURE__ */ jsx(UserMessage, {
67
+ message: turn.user,
68
+ enableImagePreview: false
69
+ }) })
70
+ }) : null, turn.assistants.length > 0 ? /* @__PURE__ */ jsx(Message, {
71
+ from: "assistant",
72
+ children: /* @__PURE__ */ jsx(MessageContent, { children: /* @__PURE__ */ jsx(MessageBubble, {
73
+ variant: "ghost",
74
+ children: /* @__PURE__ */ jsxs(MessageBubbleContent, { children: [
75
+ isLast ? /* @__PURE__ */ jsx(FleetToolTimeline, {
76
+ messages: turn.assistants,
77
+ artifacts,
78
+ streaming: isStreaming
79
+ }) : null,
80
+ /* @__PURE__ */ jsx("div", {
81
+ className: "flex flex-col gap-3",
82
+ children: assistantElements
83
+ }),
84
+ isLast && presentation ? /* @__PURE__ */ jsx(FleetSubagentList, {
85
+ children: presentation.rlmChildren,
86
+ tree: presentation.rlmTree
87
+ }) : null
88
+ ] })
89
+ }) })
90
+ }) : null]
91
+ });
92
+ }
93
+ function SubagentTranscriptView({ child, parentSessionId, transcript, onRefresh, fullWidth = false, status: statusOverride }) {
94
+ const turns = useMemo(() => transcript?.status !== "loading" ? groupMessages(transcript?.messages ?? []) : [], [transcript]);
95
+ const childStatus = statusOverride ?? transcriptStatus(child);
96
+ const artifactRuns = useMemo(() => transcript?.status !== "loading" ? derivePrimeAgentArtifactRuns(transcript?.messages ?? [], transcript?.presentation, childStatus) : [], [childStatus, transcript]);
97
+ const artifacts = useMemo(() => artifactRuns.flatMap((run) => run.artifacts), [artifactRuns]);
98
+ const title = child.sessionName || child.label;
99
+ return /* @__PURE__ */ jsxs("section", {
100
+ "aria-label": `Subagent thread: ${child.label}`,
101
+ className: cn(fullWidth ? "flex min-h-0 min-w-0 flex-1 flex-col" : "space-y-2", "min-w-0"),
102
+ "data-testid": fullWidth ? "subagent-conversation-surface" : void 0,
103
+ children: [/* @__PURE__ */ jsxs("div", {
104
+ className: "flex min-w-0 items-start gap-2 rounded-md border border-border/60 bg-background px-2.5 py-2",
105
+ children: [
106
+ /* @__PURE__ */ jsx(Bot, { className: "mt-0.5 size-3.5 shrink-0 text-foreground/45" }),
107
+ /* @__PURE__ */ jsxs("div", {
108
+ className: "min-w-0 flex-1",
109
+ children: [
110
+ /* @__PURE__ */ jsxs("div", {
111
+ className: "flex min-w-0 items-center gap-2",
112
+ children: [/* @__PURE__ */ jsx("span", {
113
+ className: "min-w-0 flex-1 truncate text-xs font-medium text-foreground/80",
114
+ children: title
115
+ }), /* @__PURE__ */ jsx("span", {
116
+ className: "shrink-0 text-[10px] capitalize text-foreground/45",
117
+ children: child.status
118
+ })]
119
+ }),
120
+ child.model ? /* @__PURE__ */ jsx("p", {
121
+ className: "truncate font-mono text-[10px] text-foreground/40",
122
+ children: child.model
123
+ }) : null,
124
+ child.lastHeardFrom ? /* @__PURE__ */ jsxs("p", {
125
+ className: "truncate text-[10px] text-foreground/40",
126
+ children: ["Heartbeat: ", new Date(child.lastHeardFrom).toLocaleTimeString()]
127
+ }) : null,
128
+ child.answerPreview || child.recap ? /* @__PURE__ */ jsx("p", {
129
+ className: "mt-1 line-clamp-3 whitespace-pre-wrap text-[11px] leading-4 text-foreground/55",
130
+ children: child.answerPreview ?? child.recap
131
+ }) : null
132
+ ]
133
+ }),
134
+ onRefresh ? /* @__PURE__ */ jsx(Button, {
135
+ "aria-label": `Refresh ${child.label} thread`,
136
+ className: "shrink-0 text-foreground/40 hover:text-foreground/70",
137
+ onClick: onRefresh,
138
+ size: "icon-sm",
139
+ title: `Refresh ${child.label} thread`,
140
+ type: "button",
141
+ variant: "ghost",
142
+ children: /* @__PURE__ */ jsx(RefreshCw, { className: cn("size-3.5", transcript?.status === "loading" && "animate-spin") })
143
+ }) : null
144
+ ]
145
+ }), !parentSessionId ? /* @__PURE__ */ jsx("p", {
146
+ className: "rounded-md border border-dashed border-border/70 px-3 py-3 text-[11px] leading-4 text-foreground/45",
147
+ children: "This subagent thread is unavailable until the parent session is active."
148
+ }) : transcript?.status === "loading" ? /* @__PURE__ */ jsx("div", {
149
+ className: cn("flex items-center justify-center rounded-md border border-dashed border-border/70 text-[11px] text-foreground/45", fullWidth ? "min-h-32 flex-1" : "min-h-32"),
150
+ children: "Loading subagent thread\u2026"
151
+ }) : transcript?.status === "error" && turns.length === 0 ? /* @__PURE__ */ jsxs("div", {
152
+ role: "alert",
153
+ className: "flex items-start gap-2 rounded-md border border-destructive/30 bg-destructive/5 px-3 py-2 text-[11px] leading-4 text-destructive",
154
+ children: [/* @__PURE__ */ jsx(CircleAlert, { className: "mt-0.5 size-3.5 shrink-0" }), /* @__PURE__ */ jsx("span", { children: transcript.error?.message ?? "Unable to load this subagent thread." })]
155
+ }) : turns.length === 0 ? /* @__PURE__ */ jsx("p", {
156
+ className: "rounded-md border border-dashed border-border/70 px-3 py-3 text-[11px] leading-4 text-foreground/45",
157
+ children: "This subagent thread has no messages yet."
158
+ }) : /* @__PURE__ */ jsxs("div", {
159
+ className: "flex min-h-0 flex-1 flex-col",
160
+ children: [transcript?.error ? /* @__PURE__ */ jsxs("div", {
161
+ role: "alert",
162
+ className: "mx-4 mt-2 flex items-start gap-2 rounded-md border border-destructive/30 bg-destructive/5 px-3 py-2 text-[11px] leading-4 text-destructive sm:mx-6",
163
+ children: [/* @__PURE__ */ jsx(CircleAlert, { className: "mt-0.5 size-3.5 shrink-0" }), /* @__PURE__ */ jsx("span", { children: transcript.error.message })]
164
+ }) : null, /* @__PURE__ */ jsx("div", {
165
+ className: cn("min-h-0 rounded-md border border-border/60 bg-background", fullWidth ? "flex min-h-0 flex-1 flex-col border-x-0 rounded-none border-b-0" : "h-96 max-h-[calc(100svh-18rem)]"),
166
+ children: /* @__PURE__ */ jsx(MessageScroller, {
167
+ busy: childStatus === "streaming",
168
+ className: fullWidth ? "min-h-0 flex-1" : void 0,
169
+ followOutput: childStatus === "streaming",
170
+ label: `Transcript for ${child.label}`,
171
+ smooth: childStatus === "streaming",
172
+ viewportClassName: fullWidth ? "px-0" : void 0,
173
+ contentClassName: cn("flex flex-col gap-4", fullWidth ? "mx-auto w-full max-w-3xl px-4 py-6 sm:px-6" : "px-2.5 py-3"),
174
+ children: turns.map((turn, index) => {
175
+ const isLast = index === turns.length - 1;
176
+ return /* @__PURE__ */ jsx(SubagentTurnView, {
177
+ turn,
178
+ isLast,
179
+ isStreaming: isLast && childStatus === "streaming",
180
+ artifacts: isLast ? artifacts : [],
181
+ presentation: isLast ? transcript?.presentation : void 0
182
+ }, turn.user?.id ?? `subagent-turn-${index}`);
183
+ })
184
+ })
185
+ })]
186
+ })]
187
+ });
188
+ }
189
+
190
+ export {
191
+ SubagentTranscriptView
192
+ };
@@ -19,7 +19,7 @@ import {
19
19
  useFloatingPortalNode,
20
20
  useTimeout,
21
21
  visuallyHidden
22
- } from "./chunk-RPROZ2JC.js";
22
+ } from "./chunk-5RQ6QAZX.js";
23
23
  import {
24
24
  X,
25
25
  addEventListener,
@@ -34,7 +34,7 @@ import {
34
34
  useRefWithInit,
35
35
  useRenderElement,
36
36
  useStableCallback
37
- } from "./chunk-X2TUFLTP.js";
37
+ } from "./chunk-BLVCDQ7E.js";
38
38
  import {
39
39
  createLucideIcon
40
40
  } from "./chunk-E26EAQIM.js";
@@ -42,10 +42,54 @@ import {
42
42
  cn
43
43
  } from "./chunk-DJMHPJBP.js";
44
44
 
45
- // web/app/dist/server/assets/toast-Df4ZMLHv.js
45
+ // web/app/dist/server/assets/toast-C6TTiY1y.js
46
46
  import * as React$1 from "react";
47
47
  import { jsx, jsxs } from "react/jsx-runtime";
48
48
  import * as ReactDOM from "react-dom";
49
+ var Info = createLucideIcon("info", [
50
+ ["circle", {
51
+ cx: "12",
52
+ cy: "12",
53
+ r: "10",
54
+ key: "1mglay"
55
+ }],
56
+ ["path", {
57
+ d: "M12 16v-4",
58
+ key: "1dtifu"
59
+ }],
60
+ ["path", {
61
+ d: "M12 8h.01",
62
+ key: "e9boi3"
63
+ }]
64
+ ]);
65
+ var OctagonX = createLucideIcon("octagon-x", [
66
+ ["path", {
67
+ d: "m15 9-6 6",
68
+ key: "1uzhvr"
69
+ }],
70
+ ["path", {
71
+ d: "M2.586 16.726A2 2 0 0 1 2 15.312V8.688a2 2 0 0 1 .586-1.414l4.688-4.688A2 2 0 0 1 8.688 2h6.624a2 2 0 0 1 1.414.586l4.688 4.688A2 2 0 0 1 22 8.688v6.624a2 2 0 0 1-.586 1.414l-4.688 4.688a2 2 0 0 1-1.414.586H8.688a2 2 0 0 1-1.414-.586z",
72
+ key: "2d38gg"
73
+ }],
74
+ ["path", {
75
+ d: "m9 9 6 6",
76
+ key: "z0biqf"
77
+ }]
78
+ ]);
79
+ var TriangleAlert = createLucideIcon("triangle-alert", [
80
+ ["path", {
81
+ d: "m21.73 18-8-14a2 2 0 0 0-3.48 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3",
82
+ key: "wmoenq"
83
+ }],
84
+ ["path", {
85
+ d: "M12 9v4",
86
+ key: "juzpu7"
87
+ }],
88
+ ["path", {
89
+ d: "M12 17h.01",
90
+ key: "p32p05"
91
+ }]
92
+ ]);
49
93
  var ToastContext = /* @__PURE__ */ React$1.createContext(void 0);
50
94
  function useToastProviderContext() {
51
95
  const context = React$1.useContext(ToastContext);
@@ -1166,50 +1210,6 @@ function createToastManager$1() {
1166
1210
  }
1167
1211
  };
1168
1212
  }
1169
- var Info = createLucideIcon("info", [
1170
- ["circle", {
1171
- cx: "12",
1172
- cy: "12",
1173
- r: "10",
1174
- key: "1mglay"
1175
- }],
1176
- ["path", {
1177
- d: "M12 16v-4",
1178
- key: "1dtifu"
1179
- }],
1180
- ["path", {
1181
- d: "M12 8h.01",
1182
- key: "e9boi3"
1183
- }]
1184
- ]);
1185
- var OctagonX = createLucideIcon("octagon-x", [
1186
- ["path", {
1187
- d: "m15 9-6 6",
1188
- key: "1uzhvr"
1189
- }],
1190
- ["path", {
1191
- d: "M2.586 16.726A2 2 0 0 1 2 15.312V8.688a2 2 0 0 1 .586-1.414l4.688-4.688A2 2 0 0 1 8.688 2h6.624a2 2 0 0 1 1.414.586l4.688 4.688A2 2 0 0 1 22 8.688v6.624a2 2 0 0 1-.586 1.414l-4.688 4.688a2 2 0 0 1-1.414.586H8.688a2 2 0 0 1-1.414-.586z",
1192
- key: "2d38gg"
1193
- }],
1194
- ["path", {
1195
- d: "m9 9 6 6",
1196
- key: "z0biqf"
1197
- }]
1198
- ]);
1199
- var TriangleAlert = createLucideIcon("triangle-alert", [
1200
- ["path", {
1201
- d: "m21.73 18-8-14a2 2 0 0 0-3.48 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3",
1202
- key: "wmoenq"
1203
- }],
1204
- ["path", {
1205
- d: "M12 9v4",
1206
- key: "juzpu7"
1207
- }],
1208
- ["path", {
1209
- d: "M12 17h.01",
1210
- key: "p32p05"
1211
- }]
1212
- ]);
1213
1213
  var toast = createToastManager$1();
1214
1214
  function ToastProvider2({ ...props }) {
1215
1215
  return /* @__PURE__ */ jsx(ToastProvider$1, { ...props });
@@ -1323,9 +1323,9 @@ function Toaster({ children, toastManager = toast, ...props }) {
1323
1323
  }
1324
1324
 
1325
1325
  export {
1326
- FloatingPortalLite,
1327
1326
  Info,
1328
1327
  TriangleAlert,
1328
+ FloatingPortalLite,
1329
1329
  toast,
1330
1330
  Toaster
1331
1331
  };
@@ -8,7 +8,7 @@ import {
8
8
  useLabelableContext,
9
9
  useLabelableId,
10
10
  useRegisterFieldControl
11
- } from "./chunk-VHCAD46L.js";
11
+ } from "./chunk-AWFOBHH4.js";
12
12
  import {
13
13
  Check,
14
14
  useControlled
@@ -35,7 +35,7 @@ import {
35
35
  useFloatingTree,
36
36
  useScrollLock,
37
37
  useSurface
38
- } from "./chunk-FE4KN6T2.js";
38
+ } from "./chunk-RX62LUDV.js";
39
39
  import {
40
40
  ARROW_DOWN,
41
41
  ARROW_LEFT,
@@ -66,11 +66,11 @@ import {
66
66
  visuallyHidden,
67
67
  visuallyHiddenInput,
68
68
  webkit
69
- } from "./chunk-RPROZ2JC.js";
69
+ } from "./chunk-5RQ6QAZX.js";
70
70
  import {
71
71
  useTransitionStatus,
72
72
  useValueAsRef
73
- } from "./chunk-XYYNYFFD.js";
73
+ } from "./chunk-LSIHVSUT.js";
74
74
  import {
75
75
  EMPTY_ARRAY,
76
76
  EMPTY_OBJECT,
@@ -112,12 +112,12 @@ import {
112
112
  useRenderElement,
113
113
  useStableCallback,
114
114
  windowResize
115
- } from "./chunk-X2TUFLTP.js";
115
+ } from "./chunk-BLVCDQ7E.js";
116
116
  import {
117
117
  cn
118
118
  } from "./chunk-DJMHPJBP.js";
119
119
 
120
- // web/app/dist/server/assets/select-B-Hv5-Yn.js
120
+ // web/app/dist/server/assets/select-CeifMPbt.js
121
121
  import * as React$1 from "react";
122
122
  import { useLayoutEffect } from "react";
123
123
  import { jsx, jsxs } from "react/jsx-runtime";
@@ -5,7 +5,7 @@ import {
5
5
  Copy,
6
6
  FileCodeCorner,
7
7
  Wrench
8
- } from "./chunk-PWK2HJIV.js";
8
+ } from "./chunk-6D524OCJ.js";
9
9
  import {
10
10
  SPRING_PRESS,
11
11
  SPRING_SWAP,
@@ -36,7 +36,7 @@ import {
36
36
  cn
37
37
  } from "./chunk-DJMHPJBP.js";
38
38
 
39
- // web/app/dist/server/assets/tool-result-DnmQGVi7.js
39
+ // web/app/dist/server/assets/tool-result-DT90tc_A.js
40
40
  import { useCallback, useEffect, useId, useLayoutEffect, useMemo, useRef, useState } from "react";
41
41
  import { jsx, jsxs } from "react/jsx-runtime";
42
42
  var Ban = createLucideIcon("ban", [["circle", {
@@ -5,7 +5,7 @@ import {
5
5
  cn
6
6
  } from "./chunk-DJMHPJBP.js";
7
7
 
8
- // web/app/dist/server/assets/ipython-tool-DYRA1Gao.js
8
+ // web/app/dist/server/assets/ipython-tool-BM-fkkjk.js
9
9
  import React, { memo, useEffect, useMemo, useRef, useState } from "react";
10
10
  import { jsx, jsxs } from "react/jsx-runtime";
11
11
  var CodeXml = createLucideIcon("code-xml", [
@@ -267,11 +267,58 @@ function firstNonEmpty(...candidates) {
267
267
  for (const c of candidates) if (c && c.trim()) return c;
268
268
  return "";
269
269
  }
270
+ function IpythonCardHeader({ isPending, isBashCell, hasError, kernelRestarted }) {
271
+ return /* @__PURE__ */ jsxs("div", {
272
+ className: "flex h-7 items-center justify-between pr-2 pl-2.5",
273
+ children: [/* @__PURE__ */ jsxs("div", {
274
+ className: "flex min-w-0 items-center gap-1.5 overflow-hidden",
275
+ children: [/* @__PURE__ */ jsxs("span", {
276
+ className: "inline-flex items-center gap-1 rounded-sm bg-muted px-1.5 py-0.5 font-mono text-[10px] leading-none text-muted-foreground uppercase",
277
+ children: [/* @__PURE__ */ jsx(CodeXml, { className: "h-3 w-3" }), isBashCell ? "shell" : "python"]
278
+ }), isPending ? /* @__PURE__ */ jsx(ToolTextShimmer, {
279
+ as: "span",
280
+ duration: 1.2,
281
+ className: "m-0 inline-flex h-full items-center truncate text-xs leading-none",
282
+ children: "Running cell"
283
+ }) : /* @__PURE__ */ jsxs("span", {
284
+ className: "truncate text-xs text-muted-foreground",
285
+ children: [hasError ? "Cell failed" : "Ran cell", kernelRestarted && " \xB7 kernel restarted"]
286
+ })]
287
+ }), isPending && /* @__PURE__ */ jsx("svg", {
288
+ className: "h-3 w-3 shrink-0 animate-spin text-muted-foreground",
289
+ viewBox: "0 0 16 16",
290
+ fill: "none",
291
+ children: /* @__PURE__ */ jsx("circle", {
292
+ cx: "8",
293
+ cy: "8",
294
+ r: "6",
295
+ stroke: "currentColor",
296
+ strokeWidth: "1.5",
297
+ strokeDasharray: "28",
298
+ strokeDashoffset: "7",
299
+ strokeLinecap: "round"
300
+ })
301
+ })]
302
+ });
303
+ }
304
+ function IpythonBackgroundOutput({ output }) {
305
+ return /* @__PURE__ */ jsxs("div", {
306
+ className: "mt-1.5 border-t border-dashed border-border/70 pt-1.5 font-mono text-[11px] leading-[15px]",
307
+ children: [/* @__PURE__ */ jsx("span", {
308
+ className: "text-[10px] font-semibold uppercase tracking-wider text-amber-600/90 dark:text-amber-400/90",
309
+ children: "Unattributed background output:"
310
+ }), /* @__PURE__ */ jsx("div", {
311
+ className: "mt-0.5 max-h-[140px] overflow-auto whitespace-pre-wrap rounded bg-muted/40 p-1.5 text-muted-foreground",
312
+ children: output
313
+ })]
314
+ });
315
+ }
270
316
  function IpythonCellCard({ step, state, onComplete, approval, cellIndex, part }) {
271
317
  useToolComplete(state === "animating", step.duration, onComplete);
272
318
  const isPending = state === "animating";
273
319
  const code = getInputCode(part);
274
320
  const details = getOutputDetails(part);
321
+ const backgroundOutput = typeof part.backgroundOutput === "string" && part.backgroundOutput.trim() ? part.backgroundOutput : typeof details?.backgroundOutput === "string" && details.backgroundOutput.trim() ? details.backgroundOutput : void 0;
275
322
  const isBashCell = code.trimStart().startsWith("%%bash");
276
323
  const cellLabel = cellIndex !== void 0 ? `In [${cellIndex}]` : "IPython";
277
324
  const displayOutput = firstNonEmpty(details?.result, details?.stdout, details?.stderr, details?.error?.evalue);
@@ -279,53 +326,31 @@ function IpythonCellCard({ step, state, onComplete, approval, cellIndex, part })
279
326
  return /* @__PURE__ */ jsxs("div", {
280
327
  className: "overflow-hidden rounded-an-tool-border-radius border border-border bg-an-tool-background",
281
328
  children: [
282
- /* @__PURE__ */ jsxs("div", {
283
- className: "flex h-7 items-center justify-between pr-2 pl-2.5",
284
- children: [/* @__PURE__ */ jsxs("div", {
285
- className: "flex min-w-0 items-center gap-1.5 overflow-hidden",
286
- children: [/* @__PURE__ */ jsxs("span", {
287
- className: "inline-flex items-center gap-1 rounded-sm bg-muted px-1.5 py-0.5 font-mono text-[10px] leading-none text-muted-foreground uppercase",
288
- children: [/* @__PURE__ */ jsx(CodeXml, { className: "h-3 w-3" }), isBashCell ? "shell" : "python"]
289
- }), isPending ? /* @__PURE__ */ jsx(ToolTextShimmer, {
290
- as: "span",
291
- duration: 1.2,
292
- className: "m-0 inline-flex h-full items-center truncate text-xs leading-none",
293
- children: "Running cell"
294
- }) : /* @__PURE__ */ jsxs("span", {
295
- className: "truncate text-xs text-muted-foreground",
296
- children: [hasError ? "Cell failed" : "Ran cell", details?.kernelRestarted && " \xB7 kernel restarted"]
297
- })]
298
- }), isPending && /* @__PURE__ */ jsx("svg", {
299
- className: "h-3 w-3 shrink-0 animate-spin text-muted-foreground",
300
- viewBox: "0 0 16 16",
301
- fill: "none",
302
- children: /* @__PURE__ */ jsx("circle", {
303
- cx: "8",
304
- cy: "8",
305
- r: "6",
306
- stroke: "currentColor",
307
- strokeWidth: "1.5",
308
- strokeDasharray: "28",
309
- strokeDashoffset: "7",
310
- strokeLinecap: "round"
311
- })
312
- })]
329
+ /* @__PURE__ */ jsx(IpythonCardHeader, {
330
+ isPending,
331
+ isBashCell,
332
+ hasError,
333
+ kernelRestarted: details?.kernelRestarted
313
334
  }),
314
335
  /* @__PURE__ */ jsxs("div", {
315
336
  className: "overflow-hidden border-t border-border bg-background px-2.5 py-1.5 font-mono text-[12px] leading-[16px]",
316
- children: [/* @__PURE__ */ jsxs("div", {
317
- className: "break-all whitespace-pre-wrap",
318
- children: [/* @__PURE__ */ jsxs("span", {
319
- className: "mr-2 text-cyan-600 select-none dark:text-cyan-400",
320
- children: [cellLabel, ":"]
321
- }), /* @__PURE__ */ jsx("span", {
322
- className: "text-foreground",
323
- children: code
324
- })]
325
- }), !isPending && displayOutput && /* @__PURE__ */ jsx("div", {
326
- className: `mt-1 max-h-[160px] overflow-hidden whitespace-pre-line ${hasError ? "text-red-600 dark:text-red-400" : "text-muted-foreground"}`,
327
- children: displayOutput
328
- })]
337
+ children: [
338
+ /* @__PURE__ */ jsxs("div", {
339
+ className: "break-all whitespace-pre-wrap",
340
+ children: [/* @__PURE__ */ jsxs("span", {
341
+ className: "mr-2 text-cyan-600 select-none dark:text-cyan-400",
342
+ children: [cellLabel, ":"]
343
+ }), /* @__PURE__ */ jsx("span", {
344
+ className: "text-foreground",
345
+ children: code
346
+ })]
347
+ }),
348
+ !isPending && displayOutput && /* @__PURE__ */ jsx("div", {
349
+ className: `mt-1 max-h-[160px] overflow-hidden whitespace-pre-line ${hasError ? "text-red-600 dark:text-red-400" : "text-muted-foreground"}`,
350
+ children: displayOutput
351
+ }),
352
+ backgroundOutput && /* @__PURE__ */ jsx(IpythonBackgroundOutput, { output: backgroundOutput })
353
+ ]
329
354
  }),
330
355
  approval && /* @__PURE__ */ jsx(ToolApprovalFooter, {
331
356
  isPending,
@@ -10,7 +10,7 @@ import {
10
10
  pct,
11
11
  progressOf,
12
12
  useHoverCapable
13
- } from "./chunk-44IVTHDV.js";
13
+ } from "./chunk-3HUI75QM.js";
14
14
  import {
15
15
  stripSandboxPrefixes
16
16
  } from "./chunk-P66QQWUM.js";
@@ -39,7 +39,7 @@ import {
39
39
  FileDiff,
40
40
  ToolResult,
41
41
  ToolResultOutput
42
- } from "./chunk-3IKSPTYI.js";
42
+ } from "./chunk-UKINNXJY.js";
43
43
  import {
44
44
  ActionSwapRollText,
45
45
  AgentDisclosure,
@@ -49,7 +49,7 @@ import {
49
49
  CollapsibleTrigger,
50
50
  FileCodeCorner,
51
51
  Wrench
52
- } from "./chunk-PWK2HJIV.js";
52
+ } from "./chunk-6D524OCJ.js";
53
53
  import {
54
54
  AnimatePresence,
55
55
  EASE_IN_OUT,
@@ -82,7 +82,7 @@ import {
82
82
  } from "./chunk-NLIUTTKL.js";
83
83
  import {
84
84
  X
85
- } from "./chunk-X2TUFLTP.js";
85
+ } from "./chunk-BLVCDQ7E.js";
86
86
  import {
87
87
  CircleAlert,
88
88
  FileText
@@ -93,15 +93,18 @@ import {
93
93
  ToolTextShimmer,
94
94
  adaptToolPart,
95
95
  useToolComplete
96
- } from "./chunk-M2FGGPNA.js";
96
+ } from "./chunk-VGDP4YDU.js";
97
97
  import {
98
98
  createLucideIcon
99
99
  } from "./chunk-E26EAQIM.js";
100
100
  import {
101
101
  cn
102
102
  } from "./chunk-DJMHPJBP.js";
103
+ import {
104
+ __exportAll
105
+ } from "./chunk-L547YHC4.js";
103
106
 
104
- // web/app/dist/server/assets/fleet-pi-tool-renderer-lJvZWmBJ.js
107
+ // web/app/dist/server/assets/fleet-pi-tool-renderer-CE45vM6T.js
105
108
  import React, { createContext, memo, useCallback, useContext, useEffect, useId, useInsertionEffect, useLayoutEffect, useMemo, useRef, useState } from "react";
106
109
  import { Fragment as Fragment$1, jsx, jsxs } from "react/jsx-runtime";
107
110
  var ChevronsDown = createLucideIcon("chevrons-down", [["path", {
@@ -14201,6 +14204,7 @@ var BeuiToolRenderer = memo(function BeuiToolRenderer2({ part, chatStatus, fallb
14201
14204
  ]
14202
14205
  });
14203
14206
  });
14207
+ var fleet_pi_tool_renderer_exports = /* @__PURE__ */ __exportAll({ FleetPiToolRenderer: () => FleetPiToolRenderer });
14204
14208
  var FleetPiToolRenderer = memo(function FleetPiToolRenderer2(props) {
14205
14209
  const partType = props.part.type;
14206
14210
  if (partType === "tool-Thinking" || partType === "tool-FleetReasoning") return null;
@@ -14216,6 +14220,7 @@ var FleetPiToolRenderer = memo(function FleetPiToolRenderer2(props) {
14216
14220
  });
14217
14221
 
14218
14222
  export {
14223
+ fleet_pi_tool_renderer_exports,
14219
14224
  FleetPiToolRenderer
14220
14225
  };
14221
14226
  /**
@@ -1,8 +1,8 @@
1
1
  import {
2
2
  OpenPanelActionSchema
3
- } from "./chunk-B2F6MLVZ.js";
3
+ } from "./chunk-XFVL5ITL.js";
4
4
 
5
- // web/app/dist/server/assets/open-panel-action-message-cCfRkr0n.js
5
+ // web/app/dist/server/assets/open-panel-action-message-CdlnT0gB.js
6
6
  import { Component, createContext, createElement } from "react";
7
7
  import { jsx, jsxs } from "react/jsx-runtime";
8
8
  var h = createContext(null);