zidane-ui 9.1.6 → 9.1.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/adapters/run-host.js +17 -20
- package/dist/adapters/server-files-host.js +3 -1
- package/dist/adapters/server-host.js +18 -11
- package/dist/adapters/server-machines-host.js +3 -1
- package/dist/adapters/server-session-host.js +2 -1
- package/dist/adapters/server-settings-accounts.js +2 -1
- package/dist/adapters/server-settings-host.js +3 -3
- package/dist/adapters/sse-host.js +9 -7
- package/dist/chat/SessionGroupHeader.js +2 -2
- package/dist/chat/SessionHostHeader.js +1 -1
- package/dist/chat/StatusDot.js +24 -20
- package/dist/chat/composer/Composer.d.ts +13 -8
- package/dist/chat/composer/Composer.js +14 -10
- package/dist/chat/composer/ComposerEditor.js +1 -1
- package/dist/chat/composer/HostComposer.d.ts +1 -1
- package/dist/chat/composer/HostComposer.js +7 -10
- package/dist/chat/composer/RunStatusChip.js +13 -1
- package/dist/chat/composer/attachment-ingest.d.ts +4 -1
- package/dist/chat/composer/attachment-ingest.js +27 -10
- package/dist/chat/composer/composer-bus.d.ts +9 -1
- package/dist/chat/composer/composer-bus.js +49 -6
- package/dist/chat/composer/index.d.ts +2 -2
- package/dist/chat/composer/index.js +2 -2
- package/dist/chat/composer/use-draft-target.d.ts +4 -0
- package/dist/chat/composer/use-draft-target.js +15 -4
- package/dist/chat/composer/use-send-prompt.d.ts +5 -1
- package/dist/chat/composer/use-send-prompt.js +2 -12
- package/dist/chat/headless/chip-labels.d.ts +2 -0
- package/dist/chat/headless/chip-labels.js +3 -1
- package/dist/chat/headless/composer/labels-editor.d.ts +2 -0
- package/dist/chat/headless/composer/labels-editor.js +2 -0
- package/dist/chat/headless/file-chip.d.ts +12 -13
- package/dist/chat/headless/file-chip.js +40 -2
- package/dist/chat/headless/fixture-host.js +14 -17
- package/dist/chat/headless/host.d.ts +24 -6
- package/dist/chat/headless/index.d.ts +4 -4
- package/dist/chat/headless/index.js +4 -4
- package/dist/chat/headless/labels.d.ts +16 -0
- package/dist/chat/headless/labels.js +15 -2
- package/dist/chat/headless/send-flow.d.ts +21 -4
- package/dist/chat/headless/send-flow.js +25 -6
- package/dist/chat/headless/session-list.d.ts +11 -0
- package/dist/chat/headless/sidebar/index.js +1 -1
- package/dist/chat/headless/sidebar/labels.d.ts +12 -1
- package/dist/chat/headless/transcript-host.d.ts +8 -1
- package/dist/chat/headless/transcript-labels.d.ts +2 -0
- package/dist/chat/index.d.ts +3 -3
- package/dist/chat/index.js +2 -2
- package/dist/chat/interactions/InboxPanel.js +2 -2
- package/dist/chat/interactions/QuestionField.js +2 -2
- package/dist/chat/rich-composer/RichComposer.d.ts +9 -2
- package/dist/chat/rich-composer/RichComposer.js +28 -7
- package/dist/chat/rich-composer/composer-extensions.d.ts +2 -0
- package/dist/chat/rich-composer/composer-extensions.js +2 -2
- package/dist/chat/rich-composer/composer-keys.js +1 -1
- package/dist/chat/rich-composer/use-composer-bus.js +2 -1
- package/dist/chat/rich-composer/use-composer-editor.d.ts +4 -1
- package/dist/chat/rich-composer/use-composer-editor.js +2 -1
- package/dist/chat/sidebar/SessionSidebar.js +1 -2
- package/dist/chat/sidebar/SidebarSearchRow.js +1 -1
- package/dist/chat/sidebar/useSidebarKeyboardNav.d.ts +0 -2
- package/dist/chat/sidebar/useSidebarKeyboardNav.js +7 -13
- package/dist/chat/testing/contract.d.ts +1 -1
- package/dist/chat/testing/contract.js +8 -7
- package/dist/chat/transcript/BadgeMenu.d.ts +12 -3
- package/dist/chat/transcript/BadgeMenu.js +20 -3
- package/dist/chat/transcript/CodemodeScript.js +147 -44
- package/dist/chat/transcript/EditDiffBlock.js +1 -4
- package/dist/chat/transcript/FileChip.js +60 -14
- package/dist/chat/transcript/LiveOutput.js +7 -3
- package/dist/chat/transcript/badges.js +2 -2
- package/dist/chat/transcript/index.d.ts +2 -2
- package/dist/chat/transcript/markdown-context.d.ts +4 -1
- package/dist/chat/transcript/rolling.d.ts +12 -0
- package/dist/chat/transcript/rolling.js +22 -0
- package/dist/chat/transcript/script-input.d.ts +1 -1
- package/dist/chat/transcript/shell-block.js +70 -60
- package/dist/chat/transcript/tool-row.js +21 -5
- package/dist/code/editor/FileTree.d.ts +3 -1
- package/dist/code/editor/FileTree.js +29 -1
- package/dist/components/Restricted.d.ts +25 -0
- package/dist/components/Restricted.js +32 -0
- package/dist/components/StepFrame.d.ts +1 -1
- package/dist/components/ZidaneMark.d.ts +28 -0
- package/dist/components/ZidaneMark.js +114 -0
- package/dist/components/palette/PalettePanel.d.ts +7 -1
- package/dist/components/palette/PalettePanel.js +37 -11
- package/dist/components/zidane-mark.d.ts +52 -0
- package/dist/components/zidane-mark.js +94 -0
- package/dist/core.css +59 -6
- package/dist/dist/{index-DqCio7Nd.d.ts → index-Bq87OcGy.d.ts} +19 -12
- package/dist/dist/index.d.ts +1 -1
- package/dist/extensions/ExtensionSettingsSection.d.ts +18 -0
- package/dist/extensions/ExtensionSettingsSection.js +227 -0
- package/dist/extensions/headless/host.d.ts +1 -1
- package/dist/extensions/headless/labels.d.ts +41 -1
- package/dist/extensions/headless/labels.js +57 -0
- package/dist/extensions/headless/select.js +1 -2
- package/dist/extensions/index.d.ts +2 -1
- package/dist/extensions/index.js +2 -1
- package/dist/files/FilesTab.js +2 -0
- package/dist/files/TreeColumn.d.ts +5 -1
- package/dist/files/TreeColumn.js +6 -0
- package/dist/files/headless/fixture-host.js +5 -3
- package/dist/files/headless/host.d.ts +24 -6
- package/dist/files/headless/index.d.ts +2 -2
- package/dist/files/headless/labels.d.ts +1 -0
- package/dist/files/headless/labels.js +1 -0
- package/dist/files/testing/contract.js +9 -2
- package/dist/files/useWorkspace.d.ts +14 -2
- package/dist/files/useWorkspace.js +87 -9
- package/dist/git/BranchMenu.js +1 -1
- package/dist/git/MoveSessionDialog.js +1 -1
- package/dist/git/RemoteFolderPicker.js +1 -1
- package/dist/git/WherePicker.js +1 -1
- package/dist/git/headless/index.js +1 -1
- package/dist/git/useEnvironmentChoices.js +1 -1
- package/dist/index.d.ts +4 -2
- package/dist/index.js +4 -2
- package/dist/keybindings/headless/catalog.js +1 -1
- package/dist/labels.d.ts +1 -0
- package/dist/labels.js +1 -0
- package/dist/machines/DaemonMenu.js +1 -1
- package/dist/machines/HostCapabilities.d.ts +23 -1
- package/dist/machines/HostCapabilities.js +149 -65
- package/dist/machines/HostSyncPanel.js +129 -123
- package/dist/machines/HostsSection.js +5 -1
- package/dist/machines/ServerCard.d.ts +4 -2
- package/dist/machines/ServerCard.js +222 -99
- package/dist/machines/ServerMachinesPanel.js +16 -13
- package/dist/machines/ServerUpdatePanel.js +31 -21
- package/dist/machines/TokensPanel.js +75 -53
- package/dist/machines/headless/fixture-host.d.ts +5 -0
- package/dist/machines/headless/fixture-host.js +13 -4
- package/dist/machines/headless/fixtures.js +1 -1
- package/dist/machines/headless/host.d.ts +22 -2
- package/dist/machines/headless/index.d.ts +2 -2
- package/dist/machines/headless/labels.d.ts +22 -1
- package/dist/machines/headless/labels.js +22 -2
- package/dist/machines/testing/contract.d.ts +3 -1
- package/dist/machines/testing/contract.js +9 -0
- package/dist/motion/size.d.ts +22 -1
- package/dist/motion/size.js +82 -4
- package/dist/onboarding/demos/delivery.d.ts +16 -0
- package/dist/onboarding/demos/delivery.js +132 -0
- package/dist/onboarding/demos/index.d.ts +2 -1
- package/dist/onboarding/demos/index.js +2 -1
- package/dist/onboarding/headless/labels.d.ts +8 -0
- package/dist/onboarding/headless/labels.js +7 -0
- package/dist/onboarding/index.d.ts +2 -1
- package/dist/onboarding/index.js +2 -1
- package/dist/onboarding/steps/ConversationStep.js +46 -4
- package/dist/palette/CommandPalette.js +3 -0
- package/dist/palette/PaletteDialog.js +7 -3
- package/dist/palette/usePaletteController.d.ts +10 -0
- package/dist/palette/usePaletteController.js +25 -3
- package/dist/server/sse-handler.js +6 -1
- package/dist/session/ArtifactsPanel.js +1 -1
- package/dist/session/SideChat.js +1 -2
- package/dist/session/UsagePanel.js +1 -1
- package/dist/session/headless/host.d.ts +3 -1
- package/dist/session/headless/index.js +2 -2
- package/dist/settings/SettingsRestricted.d.ts +25 -0
- package/dist/settings/SettingsRestricted.js +44 -0
- package/dist/settings/SettingsRowsPage.js +31 -37
- package/dist/settings/headless/catalog.js +7 -6
- package/dist/settings/headless/labels.d.ts +4 -2
- package/dist/settings/headless/labels.js +4 -2
- package/dist/settings/headless/layout.js +1 -1
- package/dist/settings/headless/providers.d.ts +2 -0
- package/dist/settings/headless/search.d.ts +1 -1
- package/dist/settings/index.d.ts +2 -2
- package/dist/settings/index.js +2 -2
- package/dist/settings/rows.d.ts +51 -8
- package/dist/settings/rows.js +81 -26
- package/dist/settings/sections/enabled-list/EnabledListSection.js +3 -2
- package/dist/settings/sections/environments/EnvironmentsSection.js +4 -3
- package/dist/settings/sections/extensions/ExtensionConfigRows.d.ts +2 -2
- package/dist/settings/sections/extensions/ExtensionConfigRows.js +22 -25
- package/dist/settings/sections/extensions/ExtensionOptionsSection.js +3 -2
- package/dist/settings/sections/extensions/options-labels.d.ts +2 -2
- package/dist/settings/sections/extensions/options-labels.js +2 -2
- package/dist/settings/sections/host-catalog/HostCatalogSection.d.ts +5 -3
- package/dist/settings/sections/host-catalog/HostCatalogSection.js +7 -4
- package/dist/settings/sections/instructions/InstructionsSection.js +24 -17
- package/dist/settings/sections/logs/LogsSection.d.ts +2 -1
- package/dist/settings/sections/logs/LogsSection.js +64 -56
- package/dist/settings/sections/mcp/McpSection.d.ts +1 -1
- package/dist/settings/sections/mcp/McpSection.js +18 -17
- package/dist/settings/sections/models/ModelRows.d.ts +3 -3
- package/dist/settings/sections/models/ModelRows.js +8 -7
- package/dist/settings/sections/performance/PerformanceSection.js +13 -4
- package/dist/settings/sections/performance/labels.d.ts +0 -1
- package/dist/settings/sections/performance/labels.js +0 -1
- package/dist/settings/sections/providers/CredentialSources.js +18 -8
- package/dist/settings/sections/providers/ProvidersSection.d.ts +2 -2
- package/dist/settings/sections/providers/ProvidersSection.js +20 -17
- package/dist/settings/sections/providers/ServerProvidersSection.d.ts +1 -1
- package/dist/settings/sections/providers/ServerProvidersSection.js +10 -14
- package/dist/settings/sections/shared/catalog.js +3 -2
- package/dist/settings/sections/skills/SkillList.js +3 -2
- package/dist/settings/testing/accounts-demo.js +1 -0
- package/dist/settings/testing/accounts.contract.js +2 -0
- package/dist/styles.css +160 -24
- package/dist/terminal/HostTerminalSurface.js +1 -1
- package/dist/terminal/headless/links.d.ts +19 -1
- package/dist/terminal/headless/links.js +26 -2
- package/dist/theme/css-vars.js +1 -0
- package/dist/theme/derive.d.ts +4 -0
- package/dist/theme/derive.js +2 -0
- package/dist/workspace/PanelContentView.js +1 -1
- package/dist/workspace/PanelHome.d.ts +3 -1
- package/dist/workspace/PanelHome.js +4 -3
- package/dist/workspace/SidePanel.d.ts +3 -1
- package/dist/workspace/SidePanel.js +3 -2
- package/dist/workspace/headless/open-target.d.ts +1 -1
- package/dist/workspace/headless/open-target.js +2 -2
- package/package.json +2 -2
- package/src/styles/chat.css +10 -10
- package/src/styles/motion.css +37 -0
- package/src/styles/primitives.css +11 -3
- package/src/styles/sidebar.css +12 -0
- package/src/styles/tokens.css +6 -0
- package/src/styles/transcript.css +69 -5
|
@@ -1,9 +1,11 @@
|
|
|
1
1
|
import { Tooltip } from "../../components/Tooltip.js";
|
|
2
2
|
import { CodeFrame } from "../../components/CodeFrame.js";
|
|
3
|
+
import { SmoothHeight } from "../../motion/size.js";
|
|
3
4
|
import { useNearViewport } from "../../hooks/useNearViewport.js";
|
|
4
5
|
import { useHighlightedHtml } from "../../code/use-highlighted-html.js";
|
|
5
6
|
import { useChatLabels } from "../useChatLabels.js";
|
|
6
7
|
import { FailedMark } from "./frame.js";
|
|
8
|
+
import { Rolling } from "./rolling.js";
|
|
7
9
|
import { highlightedLines } from "../../code/highlight-lines.js";
|
|
8
10
|
import { LiveOutput } from "./LiveOutput.js";
|
|
9
11
|
import { Fragment, jsx, jsxs } from "react/jsx-runtime";
|
|
@@ -44,69 +46,101 @@ const CodemodeScript = memo(function CodemodeScript({ code, progress, finished =
|
|
|
44
46
|
const near = useNearViewport(frameRef);
|
|
45
47
|
const html = useHighlightedHtml(source, "javascript", near);
|
|
46
48
|
const tokens = useMemo(() => html ? highlightedLines(html, view.lines.length) : null, [html, view.lines.length]);
|
|
47
|
-
const
|
|
49
|
+
const capped = view.tracked && view.lines.length > SCRIPT_FOLLOW_LINES;
|
|
50
|
+
const follow = capped && !finished;
|
|
48
51
|
const listRef = useRef(null);
|
|
49
52
|
const [userScrolled, setUserScrolled] = useState(false);
|
|
50
53
|
const stopFollowing = () => setUserScrolled(true);
|
|
51
54
|
useEffect(() => {
|
|
52
55
|
const list = listRef.current;
|
|
53
56
|
if (!follow || userScrolled || !list || view.active === void 0) return;
|
|
57
|
+
const scroller = list.closest(".zg-code-scroll");
|
|
54
58
|
const line = list.querySelector(`[data-line="${view.active}"]`);
|
|
55
|
-
if (
|
|
59
|
+
if (!scroller || !line) return;
|
|
60
|
+
const box = scroller.getBoundingClientRect();
|
|
61
|
+
const at = line.getBoundingClientRect();
|
|
62
|
+
scroller.scrollTop += at.top - box.top - scroller.clientHeight / 2 + at.height / 2;
|
|
56
63
|
}, [
|
|
57
64
|
follow,
|
|
58
65
|
userScrolled,
|
|
59
66
|
view.active
|
|
60
67
|
]);
|
|
61
68
|
const digits = String(view.lines.at(-1)?.label ?? 1).length;
|
|
69
|
+
const loops = useMemo(() => loopLines(view.loops), [view.loops]);
|
|
62
70
|
const showLive = view.tracked && !finished && view.output.length > 0;
|
|
63
71
|
const showEnd = view.tracked && finished && output != null;
|
|
64
72
|
return /* @__PURE__ */ jsxs("div", {
|
|
65
73
|
className: ["my-2", className].filter(Boolean).join(" "),
|
|
66
74
|
style,
|
|
67
75
|
"data-testid": "codemode-script",
|
|
68
|
-
children: [/* @__PURE__ */ jsx(
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
buttonClass
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
76
|
+
children: [/* @__PURE__ */ jsx(SmoothHeight, {
|
|
77
|
+
swapKey: capped ? "window" : "all",
|
|
78
|
+
children: /* @__PURE__ */ jsx(CodeFrame, {
|
|
79
|
+
ref: frameRef,
|
|
80
|
+
code: source,
|
|
81
|
+
className: "zg-shiki zg-script-frame text-xs",
|
|
82
|
+
...view.options ? { actions: (buttonClass) => /* @__PURE__ */ jsx(ScriptOptionsButton, {
|
|
83
|
+
options: view.options,
|
|
84
|
+
buttonClass
|
|
85
|
+
}) } : {},
|
|
86
|
+
children: /* @__PURE__ */ jsx("div", {
|
|
87
|
+
ref: listRef,
|
|
88
|
+
className: "zg-script-lines",
|
|
89
|
+
"data-window": capped ? "" : void 0,
|
|
90
|
+
style: { "--zg-script-digits": `${digits}ch` },
|
|
91
|
+
...follow ? {
|
|
92
|
+
onWheel: stopFollowing,
|
|
93
|
+
onTouchMove: stopFollowing
|
|
94
|
+
} : {},
|
|
95
|
+
children: view.lines.map((line, i) => /* @__PURE__ */ jsx(ScriptLine, {
|
|
96
|
+
number: line.number,
|
|
97
|
+
label: line.label,
|
|
98
|
+
text: line.text,
|
|
99
|
+
tokens: tokens?.[i],
|
|
100
|
+
state: line.state,
|
|
101
|
+
tracked: view.tracked,
|
|
102
|
+
error: view.error?.line === line.number ? view.error.message : void 0,
|
|
103
|
+
loop: loops.starts.get(line.number),
|
|
104
|
+
inLoop: loops.active.has(line.number),
|
|
105
|
+
calls: line.calls,
|
|
106
|
+
until: line.until
|
|
107
|
+
}, line.number))
|
|
108
|
+
})
|
|
94
109
|
})
|
|
95
110
|
}), view.tracked && /* @__PURE__ */ jsx("div", {
|
|
96
111
|
className: "zg-collapsible",
|
|
97
112
|
"data-open": showLive || showEnd,
|
|
98
113
|
children: /* @__PURE__ */ jsx("div", {
|
|
99
114
|
className: "zg-collapsible-inner",
|
|
100
|
-
children:
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
115
|
+
children: /* @__PURE__ */ jsx(SmoothHeight, {
|
|
116
|
+
swapKey: showEnd ? "result" : "live",
|
|
117
|
+
children: showEnd ? output : /* @__PURE__ */ jsx(LiveOutput, {
|
|
118
|
+
lines: view.output,
|
|
119
|
+
window: SCRIPT_OUTPUT_TAIL_LINES,
|
|
120
|
+
label: labels.scriptLiveOutput
|
|
121
|
+
})
|
|
104
122
|
})
|
|
105
123
|
})
|
|
106
124
|
})]
|
|
107
125
|
});
|
|
108
126
|
});
|
|
109
|
-
|
|
127
|
+
/**
|
|
128
|
+
* The loop each line starts (its round shows after the code, its mark in the gutter), and the lines of the loops
|
|
129
|
+
* the script is in now (their numbers take the running color).
|
|
130
|
+
*/
|
|
131
|
+
function loopLines(loops) {
|
|
132
|
+
const starts = /* @__PURE__ */ new Map();
|
|
133
|
+
const active = /* @__PURE__ */ new Set();
|
|
134
|
+
for (const loop of loops) {
|
|
135
|
+
if (!starts.has(loop.start)) starts.set(loop.start, loop);
|
|
136
|
+
if (loop.active) for (let line = loop.start; line <= loop.end; line++) active.add(line);
|
|
137
|
+
}
|
|
138
|
+
return {
|
|
139
|
+
starts,
|
|
140
|
+
active
|
|
141
|
+
};
|
|
142
|
+
}
|
|
143
|
+
const ScriptLine = memo(function ScriptLine({ number, label, text, tokens, state, tracked, error, loop, inLoop, calls, until }) {
|
|
110
144
|
const labels = useChatLabels();
|
|
111
145
|
const previous = useRef(state);
|
|
112
146
|
const [settling, setSettling] = useState(false);
|
|
@@ -118,25 +152,38 @@ const ScriptLine = memo(function ScriptLine({ number, label, text, tokens, state
|
|
|
118
152
|
className: "zg-script-line",
|
|
119
153
|
"data-line": number,
|
|
120
154
|
"data-state": tracked ? state : void 0,
|
|
155
|
+
"data-in-loop": tracked && inLoop ? "" : void 0,
|
|
121
156
|
"data-settling": settling ? "" : void 0,
|
|
122
157
|
onAnimationEnd: settling ? () => setSettling(false) : void 0,
|
|
123
158
|
children: [/* @__PURE__ */ jsxs("span", {
|
|
124
159
|
className: "zg-script-gutter",
|
|
125
|
-
children: [tracked && /* @__PURE__ */ jsx(LineMark, {
|
|
160
|
+
children: [tracked && /* @__PURE__ */ jsx(LineMark, {
|
|
161
|
+
state,
|
|
162
|
+
calls,
|
|
163
|
+
loop
|
|
164
|
+
}), /* @__PURE__ */ jsx("span", {
|
|
126
165
|
className: "zg-script-number",
|
|
127
166
|
"aria-hidden": true,
|
|
128
167
|
children: label
|
|
129
168
|
})]
|
|
130
169
|
}), /* @__PURE__ */ jsxs("span", {
|
|
131
170
|
className: "zg-script-code",
|
|
132
|
-
children: [
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
171
|
+
children: [
|
|
172
|
+
tokens ? tokens.map((token, k) => /* @__PURE__ */ jsx("span", {
|
|
173
|
+
style: {
|
|
174
|
+
color: token.color,
|
|
175
|
+
fontStyle: token.fontStyle,
|
|
176
|
+
fontWeight: token.fontWeight
|
|
177
|
+
},
|
|
178
|
+
children: token.text
|
|
179
|
+
}, k)) : text,
|
|
180
|
+
text === "" && "\n",
|
|
181
|
+
tracked && /* @__PURE__ */ jsx(LineNote, {
|
|
182
|
+
loop,
|
|
183
|
+
calls,
|
|
184
|
+
until: state === "waiting" ? until : void 0
|
|
185
|
+
})
|
|
186
|
+
]
|
|
140
187
|
})]
|
|
141
188
|
}), error !== void 0 && /* @__PURE__ */ jsxs("div", {
|
|
142
189
|
className: "zg-script-line zg-script-error",
|
|
@@ -190,23 +237,79 @@ function ScriptOptionsButton({ options, buttonClass }) {
|
|
|
190
237
|
})
|
|
191
238
|
});
|
|
192
239
|
}
|
|
193
|
-
function LineMark({ state }) {
|
|
240
|
+
function LineMark({ state, calls, loop }) {
|
|
194
241
|
const labels = useChatLabels();
|
|
195
242
|
if (state === "running") return /* @__PURE__ */ jsx("span", {
|
|
196
243
|
role: "img",
|
|
197
244
|
"aria-label": labels.stepRunning,
|
|
198
245
|
className: "zg-script-mark i-ph-circle-notch animate-spin"
|
|
199
246
|
});
|
|
200
|
-
if (state === "
|
|
247
|
+
if (state === "waiting") return /* @__PURE__ */ jsx("span", {
|
|
248
|
+
role: "img",
|
|
249
|
+
"aria-label": labels.stepWaiting,
|
|
250
|
+
className: "zg-script-mark i-ph-hourglass-medium"
|
|
251
|
+
});
|
|
252
|
+
if (state === "done" || state === "previous" && calls > 0) return /* @__PURE__ */ jsx("span", {
|
|
201
253
|
role: "img",
|
|
202
254
|
"aria-label": labels.stepDone,
|
|
203
255
|
className: "zg-script-mark i-ph-check"
|
|
204
256
|
});
|
|
205
257
|
if (state === "failed") return /* @__PURE__ */ jsx(FailedMark, { className: "zg-script-mark" });
|
|
258
|
+
if (loop) return /* @__PURE__ */ jsx("span", {
|
|
259
|
+
role: "img",
|
|
260
|
+
"aria-label": labels.scriptLoop,
|
|
261
|
+
className: "zg-script-mark zg-script-loop i-ph-arrows-clockwise",
|
|
262
|
+
"data-active": loop.active ? "" : void 0
|
|
263
|
+
});
|
|
206
264
|
return /* @__PURE__ */ jsx("span", {
|
|
207
265
|
className: "zg-script-mark",
|
|
208
266
|
"aria-hidden": true
|
|
209
267
|
});
|
|
210
268
|
}
|
|
269
|
+
/** After a line's code: the round of the loop it starts, how many calls it made, or how long it still waits. */
|
|
270
|
+
function LineNote({ loop, calls, until }) {
|
|
271
|
+
const labels = useChatLabels();
|
|
272
|
+
if (until !== void 0) return /* @__PURE__ */ jsx(WaitLeft, { until });
|
|
273
|
+
if (loop && loop.rounds > 0) {
|
|
274
|
+
const text = loop.kind === "callback" ? labels.scriptLoopRuns(loop.rounds) : loop.active ? labels.scriptLoopRound(loop.rounds) : labels.scriptLoopRounds(loop.rounds);
|
|
275
|
+
return /* @__PURE__ */ jsxs("span", {
|
|
276
|
+
className: "zg-script-note",
|
|
277
|
+
"data-active": loop.active ? "" : void 0,
|
|
278
|
+
children: [/* @__PURE__ */ jsx("span", {
|
|
279
|
+
className: "i-ph-arrows-clockwise",
|
|
280
|
+
"aria-hidden": true
|
|
281
|
+
}), /* @__PURE__ */ jsx(Rolling, {
|
|
282
|
+
text,
|
|
283
|
+
value: loop.rounds
|
|
284
|
+
})]
|
|
285
|
+
});
|
|
286
|
+
}
|
|
287
|
+
if (calls > 1) return /* @__PURE__ */ jsx("span", {
|
|
288
|
+
className: "zg-script-note",
|
|
289
|
+
children: /* @__PURE__ */ jsx(Rolling, {
|
|
290
|
+
text: labels.scriptLineCalls(calls),
|
|
291
|
+
value: calls
|
|
292
|
+
})
|
|
293
|
+
});
|
|
294
|
+
return null;
|
|
295
|
+
}
|
|
296
|
+
/** How long a `sleep` still waits, counted down each second. */
|
|
297
|
+
function WaitLeft({ until }) {
|
|
298
|
+
const labels = useChatLabels();
|
|
299
|
+
const [now, setNow] = useState(Date.now);
|
|
300
|
+
useEffect(() => {
|
|
301
|
+
const timer = setInterval(() => setNow(Date.now()), 1e3);
|
|
302
|
+
return () => clearInterval(timer);
|
|
303
|
+
}, [until]);
|
|
304
|
+
const seconds = Math.max(0, Math.ceil((until - now) / 1e3));
|
|
305
|
+
return /* @__PURE__ */ jsx("span", {
|
|
306
|
+
className: "zg-script-note",
|
|
307
|
+
"data-active": "",
|
|
308
|
+
children: /* @__PURE__ */ jsx(Rolling, {
|
|
309
|
+
text: labels.scriptWaitLeft(seconds),
|
|
310
|
+
value: seconds
|
|
311
|
+
})
|
|
312
|
+
});
|
|
313
|
+
}
|
|
211
314
|
//#endregion
|
|
212
315
|
export { CodemodeScript };
|
|
@@ -103,10 +103,7 @@ function OutcomeBadge({ outcome }) {
|
|
|
103
103
|
children: [/* @__PURE__ */ jsx("span", {
|
|
104
104
|
"aria-hidden": true,
|
|
105
105
|
children: OUTCOME_GLYPH[kind]
|
|
106
|
-
}), /* @__PURE__ */ jsx("span", {
|
|
107
|
-
className: "uppercase",
|
|
108
|
-
children: kind
|
|
109
|
-
})]
|
|
106
|
+
}), /* @__PURE__ */ jsx("span", { children: kind })]
|
|
110
107
|
});
|
|
111
108
|
}
|
|
112
109
|
function OutcomeSummary({ counts }) {
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { RowActionsMenu } from "../../components/RowActionsMenu.js";
|
|
1
2
|
import { useLinkRouter } from "../../extensions/links.js";
|
|
2
3
|
import { classifyInlineCode, resolveChipPath } from "../headless/file-chip.js";
|
|
3
4
|
import { useChatLabels } from "../useChatLabels.js";
|
|
@@ -10,7 +11,7 @@ import { useChipResolution, useResolveChipNow } from "./chip-resolve.js";
|
|
|
10
11
|
import { ReferenceChip } from "./ReferenceText.js";
|
|
11
12
|
import { classifyInlineRef, refHref } from "./remark-refs.js";
|
|
12
13
|
import { Fragment, jsx, jsxs } from "react/jsx-runtime";
|
|
13
|
-
import { useContext, useState } from "react";
|
|
14
|
+
import { useContext, useRef, useState } from "react";
|
|
14
15
|
import { GITHUB_ISSUE_PROVIDER_ID, GITHUB_PULL_PROVIDER_ID, githubRefKey } from "zidane/chat/pure";
|
|
15
16
|
//#region src/chat/transcript/FileChip.tsx
|
|
16
17
|
/**
|
|
@@ -21,7 +22,9 @@ import { GITHUB_ISSUE_PROVIDER_ID, GITHUB_PULL_PROVIDER_ID, githubRefKey } from
|
|
|
21
22
|
* name or partial path opens the file it names, wherever it sits in the
|
|
22
23
|
* repo, and text that names nothing (a branch, a deleted file) reads as
|
|
23
24
|
* plain code. Until the answer lands the chip opens the path as written.
|
|
24
|
-
* Clicking opens it through the container's opener (`MarkdownContext.open`)
|
|
25
|
+
* Clicking opens it through the container's opener (`MarkdownContext.open`),
|
|
26
|
+
* at the line the text gave (`schema.ts:258`). A bare name that matches
|
|
27
|
+
* several files asks which one first, in a menu under the chip.
|
|
25
28
|
*
|
|
26
29
|
* Reference (`#123`, commit SHA): links to the repo's web UI.
|
|
27
30
|
*/
|
|
@@ -221,7 +224,7 @@ function BranchChip({ branch, text }) {
|
|
|
221
224
|
}
|
|
222
225
|
function LocalChip({ text, chip }) {
|
|
223
226
|
const { cwd } = useContext(MarkdownContext);
|
|
224
|
-
const resolution = useChipResolution(cwd, text);
|
|
227
|
+
const resolution = useChipResolution(cwd, chip?.path ?? text);
|
|
225
228
|
if (resolution?.kind === "branch") return /* @__PURE__ */ jsx(BranchChip, {
|
|
226
229
|
branch: resolution,
|
|
227
230
|
text
|
|
@@ -239,6 +242,8 @@ function LocalFileChip({ chip, resolution }) {
|
|
|
239
242
|
const labels = useChatLabels();
|
|
240
243
|
const { cwd, open: openPath } = useContext(MarkdownContext);
|
|
241
244
|
const [failed, setFailed] = useState(false);
|
|
245
|
+
const [choices, setChoices] = useState(null);
|
|
246
|
+
const anchorRef = useRef(null);
|
|
242
247
|
const resolveChipNow = useResolveChipNow();
|
|
243
248
|
const links = useLinkRouter();
|
|
244
249
|
const target = resolution ? resolution.path : resolveChipPath(chip, cwd);
|
|
@@ -255,22 +260,38 @@ function LocalFileChip({ chip, resolution }) {
|
|
|
255
260
|
text: fileBadgeName(shown),
|
|
256
261
|
...target ? { href: target } : {}
|
|
257
262
|
});
|
|
258
|
-
const
|
|
259
|
-
const fresh = cwd ? await resolveChipNow(cwd, chip.path) : null;
|
|
260
|
-
if (fresh && fresh.kind !== "file" && fresh.kind !== "dir") return;
|
|
261
|
-
const path = fresh ? fresh.path : target;
|
|
262
|
-
if (!path) return;
|
|
263
|
-
const kind = (fresh ?? resolution ?? chip).kind === "dir" ? "dir" : "file";
|
|
263
|
+
const openOne = async (path, kind, event) => {
|
|
264
264
|
await links.open(path, {
|
|
265
265
|
source: "chip",
|
|
266
266
|
...event ? { event } : {}
|
|
267
267
|
}, () => {
|
|
268
268
|
if (!openPath) return;
|
|
269
|
-
openPath(path, kind, event).then((ok) => {
|
|
269
|
+
openPath(path, kind, event, kind === "file" ? chip.at : void 0).then((ok) => {
|
|
270
270
|
if (ok !== void 0) setFailed(!ok);
|
|
271
271
|
});
|
|
272
272
|
});
|
|
273
273
|
};
|
|
274
|
+
const open = async (event) => {
|
|
275
|
+
const keys = event ? {
|
|
276
|
+
metaKey: event.metaKey,
|
|
277
|
+
ctrlKey: event.ctrlKey,
|
|
278
|
+
altKey: event.altKey
|
|
279
|
+
} : void 0;
|
|
280
|
+
const fresh = cwd ? await resolveChipNow(cwd, chip.path) : null;
|
|
281
|
+
if (fresh && fresh.kind !== "file" && fresh.kind !== "dir") return;
|
|
282
|
+
const candidates = (fresh ?? resolution)?.candidates;
|
|
283
|
+
if (candidates && candidates.length > 1) {
|
|
284
|
+
setChoices({
|
|
285
|
+
candidates,
|
|
286
|
+
...keys ? { event: keys } : {}
|
|
287
|
+
});
|
|
288
|
+
return;
|
|
289
|
+
}
|
|
290
|
+
const path = fresh ? fresh.path : target;
|
|
291
|
+
if (!path) return;
|
|
292
|
+
const kind = (fresh ?? resolution ?? chip).kind === "dir" ? "dir" : "file";
|
|
293
|
+
await openOne(path, kind, keys);
|
|
294
|
+
};
|
|
274
295
|
const inner = /* @__PURE__ */ jsx(ChipFace, { chip: shown });
|
|
275
296
|
if (!target) return /* @__PURE__ */ jsx("span", {
|
|
276
297
|
className: CHIP_CLASS,
|
|
@@ -278,20 +299,45 @@ function LocalFileChip({ chip, resolution }) {
|
|
|
278
299
|
onContextMenu,
|
|
279
300
|
children: inner
|
|
280
301
|
});
|
|
302
|
+
return /* @__PURE__ */ jsxs(Fragment, { children: [/* @__PURE__ */ jsx(ChipButton, {
|
|
303
|
+
anchorRef,
|
|
304
|
+
title: failed ? labels.chipNotFound(title) : title,
|
|
305
|
+
failed,
|
|
306
|
+
onOpen: (e) => void open(e),
|
|
307
|
+
onContextMenu,
|
|
308
|
+
expanded: choices !== null,
|
|
309
|
+
children: inner
|
|
310
|
+
}), /* @__PURE__ */ jsx(RowActionsMenu, {
|
|
311
|
+
open: choices !== null,
|
|
312
|
+
anchorRef,
|
|
313
|
+
onClose: () => setChoices(null),
|
|
314
|
+
items: (choices?.candidates ?? []).map((c) => ({
|
|
315
|
+
id: c.path,
|
|
316
|
+
label: displayPath(c.path, cwd),
|
|
317
|
+
icon: c.kind === "dir" ? DIR_ICON : "i-ph-file",
|
|
318
|
+
onSelect: () => void openOne(c.path, c.kind, choices?.event)
|
|
319
|
+
}))
|
|
320
|
+
})] });
|
|
321
|
+
}
|
|
322
|
+
/** A chip that opens on click, Enter or Space. */
|
|
323
|
+
function ChipButton({ anchorRef, title, failed, expanded, onOpen, onContextMenu, children }) {
|
|
281
324
|
return /* @__PURE__ */ jsx("span", {
|
|
325
|
+
ref: anchorRef,
|
|
282
326
|
role: "button",
|
|
283
327
|
tabIndex: 0,
|
|
284
|
-
|
|
328
|
+
"aria-haspopup": expanded ? "menu" : void 0,
|
|
329
|
+
"aria-expanded": expanded || void 0,
|
|
330
|
+
onClick: (e) => onOpen(e),
|
|
285
331
|
onContextMenu,
|
|
286
332
|
onKeyDown: (e) => {
|
|
287
333
|
if (e.key === "Enter" || e.key === " ") {
|
|
288
334
|
e.preventDefault();
|
|
289
|
-
|
|
335
|
+
onOpen(e);
|
|
290
336
|
}
|
|
291
337
|
},
|
|
292
|
-
title
|
|
338
|
+
title,
|
|
293
339
|
className: `${CHIP_CLASS} ${failed ? "opacity-60" : ""}`,
|
|
294
|
-
children
|
|
340
|
+
children
|
|
295
341
|
});
|
|
296
342
|
}
|
|
297
343
|
//#endregion
|
|
@@ -8,8 +8,8 @@ import { useState } from "react";
|
|
|
8
8
|
* shell calls, a reply's block run here. Each line keeps its id while it
|
|
9
9
|
* shows (`createOutputTail`), so a new one grows in and the oldest shrinks
|
|
10
10
|
* out (`Grow`): the box eases to its new height instead of jumping. Once the
|
|
11
|
-
* window is full it keeps the height of a full
|
|
12
|
-
* through it. Lines already there when it mounts (a reload, a reopened row)
|
|
11
|
+
* window is full and lines start to leave it, it keeps the height of a full
|
|
12
|
+
* window while they slide through it. Lines already there when it mounts (a reload, a reopened row)
|
|
13
13
|
* show at once. Colored lines draw in the theme's terminal colors.
|
|
14
14
|
*/
|
|
15
15
|
/**
|
|
@@ -19,12 +19,16 @@ import { useState } from "react";
|
|
|
19
19
|
*/
|
|
20
20
|
function LiveOutput({ lines, window, label, className }) {
|
|
21
21
|
const [firstIds] = useState(() => new Set(lines.map((line) => line.id)));
|
|
22
|
+
const [mountedFull] = useState(() => lines.length >= window);
|
|
23
|
+
const [filledAt, setFilledAt] = useState(null);
|
|
24
|
+
if (filledAt === null && lines.length >= window) setFilledAt(lines[0].id);
|
|
25
|
+
const full = mountedFull || filledAt !== null && lines.length > 0 && lines[0].id !== filledAt;
|
|
22
26
|
return /* @__PURE__ */ jsx("div", {
|
|
23
27
|
className: ["zg-code-panel zg-output zg-live-output zg-ansi", className].filter(Boolean).join(" "),
|
|
24
28
|
role: "log",
|
|
25
29
|
"aria-live": "polite",
|
|
26
30
|
"aria-label": label,
|
|
27
|
-
"data-full":
|
|
31
|
+
"data-full": full ? "" : void 0,
|
|
28
32
|
style: { "--zg-live-tail": window },
|
|
29
33
|
children: /* @__PURE__ */ jsx(GrowPresence, {
|
|
30
34
|
initial: false,
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { useLinkRouter } from "../../extensions/links.js";
|
|
2
2
|
import { shortUrl } from "../headless/badge-refs.js";
|
|
3
|
-
import { chipForPath } from "../headless/file-chip.js";
|
|
3
|
+
import { chipForPath, positionSuffix } from "../headless/file-chip.js";
|
|
4
4
|
import { useBadgeMenu } from "./BadgeMenu.js";
|
|
5
5
|
import { useSiteIcon } from "./site-icons.js";
|
|
6
6
|
import { jsx } from "react/jsx-runtime";
|
|
@@ -35,7 +35,7 @@ function siteIconValue(icon) {
|
|
|
35
35
|
* @param chip - The file.
|
|
36
36
|
*/
|
|
37
37
|
function fileBadgeName(chip) {
|
|
38
|
-
return chip.name.length > 32 ? `${chip.name.slice(0, 31)}…` : chip.name
|
|
38
|
+
return `${chip.name.length > 32 ? `${chip.name.slice(0, 31)}…` : chip.name}${positionSuffix(chip.at)}`;
|
|
39
39
|
}
|
|
40
40
|
/**
|
|
41
41
|
* A file badge as an editor node renders it (the composer has no React inside its nodes).
|
|
@@ -23,7 +23,7 @@ import { ParsedReferenceUrl, parseReferenceUrl, referenceUrl, remarkReferences }
|
|
|
23
23
|
import { useReferenceMatches, useReferenceProviders, useReferenceView } from "./references.js";
|
|
24
24
|
import { useChipResolution, useResolveChipNow } from "./chip-resolve.js";
|
|
25
25
|
import { useCommand, useCommitInfo, useReferencedSession, useSkill } from "./chip-details.js";
|
|
26
|
-
import { BadgeEffectContext, BadgeMenuComposer, BadgeMenuProvider, BadgeMenuProviderProps, BadgeMenuSystem, OpenBadgeMenu, useBadgeMenu } from "./BadgeMenu.js";
|
|
26
|
+
import { BadgeEffectContext, BadgeMenuBrowser, BadgeMenuComposer, BadgeMenuProvider, BadgeMenuProviderProps, BadgeMenuSystem, OpenBadgeMenu, useBadgeMenu } from "./BadgeMenu.js";
|
|
27
27
|
import { useSiteIcon } from "./site-icons.js";
|
|
28
28
|
import { ChipOpener, CommandScope, CommandScopeContext, INLINE_CODE_CLASS, MarkdownContext, MarkdownContextValue, OpenSessionContext } from "./markdown-context.js";
|
|
29
29
|
import { BADGE_GLYPH, FileBadgeIcon, FileBadgeIconProps, LinkBadge, LinkBadgeProps, LinkIcon, LinkIconProps, fileBadgeName, fileBadgeSpec, linkGlyph, siteIconValue } from "./badges.js";
|
|
@@ -67,4 +67,4 @@ import { TranscriptRows, TranscriptRowsInput, useSelectStops, useTranscriptRows
|
|
|
67
67
|
import { UserBashRow, UserBashRowProps } from "./user-bash.js";
|
|
68
68
|
import { RowPlace, ScrollPosition, StickToBottomOptions, useStickToBottom } from "./useStickToBottom.js";
|
|
69
69
|
import { useTranscriptSelectionCopy } from "./useTranscriptSelectionCopy.js";
|
|
70
|
-
export { AUTO_FILL_PAGES, AnsiSpans, type AnsiSpansProps, AnsiText, type AnsiTextProps, AttachmentIcon, AttachmentIconProps, AttachmentLabelParts, AuthFailureCard, AuthFailureCardProps, BADGE_GLYPH, BadgeEffectContext, BadgeMenuComposer, BadgeMenuProvider, BadgeMenuProviderProps, BadgeMenuSystem, CHIP_CARD_WIDTH, CODE_PANEL, COMMAND_DETAIL_LINE, CardMarkdown, CardMarkdownProps, Caret, CaretProps, ChipCard, ChipCardProps, ChipHover, ChipHoverProps, ChipOpener, CodeBlockSlotProps, CodemodeScript, type CodemodeScriptProps, CommandCard, CommandCardProps, CommandDetailRow, CommandDetailRowProps, CommandNoteRow, CommandNoteRowProps, CommandScope, CommandScopeContext, CommitCard, CommitCardProps, CompactSummaryRow, CompactSummaryRowProps, ComposerSearch, CvRow, CvRowProps, DEFAULT_TRANSCRIPT_RENDERERS, DefaultInlineText, DefaultInlineTextProps, DefaultMarkdown, DefaultMarkdownProps, DefaultPrompt, DefaultPromptProps, DefaultSessionTitle, DefaultSessionTitleProps, DiffLines, DiffLinesProps, Dot, DotProps, EditDiffBlock, EditDiffBlockProps, ErrorRow, ErrorRowProps, ExchangeFoldRow, ExchangeFoldRowProps, FILL_MIN_PROMPTS, FailedMark, FailedMarkProps, FailureRow, FailureRowProps, FileBadgeIcon, FileBadgeIconProps, FoldHeader, FoldHeaderProps, GUTTER_STEP_PX, INLINE_CODE_CLASS, ImageGenerationBlock, ImageGenerationBlockProps, InfoRow, InfoRowProps, InlineChipText, InlineChipTextProps, InlineCode, InlineCodeProps, InlineTextSlotProps, InteractionTool, InteractionToolBody, InteractionToolBodyProps, LazyRow, LazyRowProps, LineState, LinkBadge, LinkBadgeProps, LinkIcon, LinkIconProps, LiveOutput, type LiveOutputProps, LoadEarlierRow, LoadEarlierRowProps, LoadFullOutputButton, LoadFullOutputButtonProps, MAX_MATCHES, Markdown, MarkdownContext, MarkdownContextValue, MarkdownDiagrams, MarkdownDiagramsProps, MarkdownLinkProps, MarkdownProps, MarkdownSlotProps, MermaidDiagram, type MermaidDiagramProps, MessageGroupRow, MessageGroupRowProps, ModelVerdict, ModelVerdictProps, NestedToolCalls, NestedToolCallsProps, NoticeRow, NoticeRowProps, OpenBadgeMenu, OpenSessionContext, ParsedRef, ParsedReferenceUrl, PromptEcho, PromptEchoProps, PromptLines, PromptLinesProps, PromptSlotProps, ProseMarkdown, ProseMarkdownProps, ReadFileBlock, ReadFileBlockProps, RefChip, RefChipProps, RefMatch, ReferenceChip, ReferenceChipProps, ReferenceText, ReferenceTextProps, RowContext, RowFrame, RowFrameProps, RowIconsContext, RowPlace, RunReceiptInline, RunReceiptInlineProps, RunSummaryRow, RunSummaryRowProps, RunnableCodeBlock, type RunnableCodeBlockProps, ScrollPosition, SearchHighlightStyle, SelectCursor, SelectCursorProps, SelectTurnCommands, SelectTurnExit, SelectTurnHintKeys, SelectTurnHintKeysProps, SelectTurnKeysOptions, SelectTurnProvider, SelectTurnProviderProps, SelectTurnState, SelectTurnValue, SessionCard, SessionCardProps, SessionEventRow, SessionEventRowProps, SessionTitleSlotProps, ShellBlockProvider, type ShellBlockProviderProps, type ShellBlockScope, SkillCard, SkillCardProps, SlotEntry, SpawnEndRow, SpawnEndRowProps, SpawnStartRow, SpawnStartRowProps, StickToBottomOptions, SubagentBlock, SubagentBlockProps, TextPreviewSlotProps, TextRow, TextRowProps, ThinkingBatchRow, ThinkingBatchRowProps, ThinkingRow, ThinkingRowProps, ToolBatchRow, ToolBatchRowProps, ToolBodySlotProps, ToolDetails, ToolDetailsProps, ToolGlyph, ToolGlyphProps, ToolInput, ToolInputProps, ToolMedia, type ToolMediaItem, ToolMediaProps, ToolRow, ToolRowProps, ToolTiming, ToolTimingProps, TranscriptAccounts, TranscriptActions, TranscriptActionsProvider, TranscriptActionsProviderProps, TranscriptFind, TranscriptFindKeyOptions, TranscriptFindOptions, TranscriptFindTarget, TranscriptRenderers, TranscriptRenderersProvider, type TranscriptRenderersProviderProps, TranscriptRow, TranscriptRowProps, TranscriptRowSlot, TranscriptRowSlotProps, TranscriptRows, TranscriptRowsInput, TranscriptScrollInputs, TranscriptSearch, TranscriptSearchOptions, TranscriptSearchProps, TranscriptSearchState, TranscriptSettling, TranscriptTurnMenu, TurnCommands, TurnCommandsOptions, TurnMenuActions, TurnMenuTarget, UserBashRow, UserBashRowProps, UserPromptAttachments, UserPromptAttachmentsProps, UserPromptRow, UserPromptRowProps, WorkerDetails, WorkerDetailsProps, classifyInlineRef, copyPromptLines, createTurnCommands, defaultAttachmentLabel, drawsImageGeneration, fileBadgeName, fileBadgeSpec, findRefs, hasInteractionBody, holdForceMountRows, imageRequestsOf, isHiddenRow, lineStateOf, linkGlyph, mountRowNow, numberRef, parseRefUrl, parseReferenceUrl, parseToolMedia, refHref, referenceUrl, remarkReferences, remarkRefs, savedPaths, siteIconValue, useBackgroundMount, useBadgeMenu, useChipResolution, useCommand, useCommitInfo, useComposerSearch, useFillViewportScrollback, useForceMountRows, useFullOutput, useModelName, useReferenceMatches, useReferenceProviders, useReferenceView, useReferencedSession, useResolveChipNow, useRowIcons, useSelectStops, useSelectTurn, useSelectTurnKeys, useSettledReveal, useShellBlockScope, useSiteIcon, useSkill, useStickToBottom, useToolMedia, useTranscriptActions, useTranscriptFind, useTranscriptFindKey, useTranscriptRenderers, useTranscriptRows, useTranscriptScroll, useTranscriptSearch, useTranscriptSelectionCopy, useTurnCommands, useTurnMenu, useWheelHoverPause };
|
|
70
|
+
export { AUTO_FILL_PAGES, AnsiSpans, type AnsiSpansProps, AnsiText, type AnsiTextProps, AttachmentIcon, AttachmentIconProps, AttachmentLabelParts, AuthFailureCard, AuthFailureCardProps, BADGE_GLYPH, BadgeEffectContext, BadgeMenuBrowser, BadgeMenuComposer, BadgeMenuProvider, BadgeMenuProviderProps, BadgeMenuSystem, CHIP_CARD_WIDTH, CODE_PANEL, COMMAND_DETAIL_LINE, CardMarkdown, CardMarkdownProps, Caret, CaretProps, ChipCard, ChipCardProps, ChipHover, ChipHoverProps, ChipOpener, CodeBlockSlotProps, CodemodeScript, type CodemodeScriptProps, CommandCard, CommandCardProps, CommandDetailRow, CommandDetailRowProps, CommandNoteRow, CommandNoteRowProps, CommandScope, CommandScopeContext, CommitCard, CommitCardProps, CompactSummaryRow, CompactSummaryRowProps, ComposerSearch, CvRow, CvRowProps, DEFAULT_TRANSCRIPT_RENDERERS, DefaultInlineText, DefaultInlineTextProps, DefaultMarkdown, DefaultMarkdownProps, DefaultPrompt, DefaultPromptProps, DefaultSessionTitle, DefaultSessionTitleProps, DiffLines, DiffLinesProps, Dot, DotProps, EditDiffBlock, EditDiffBlockProps, ErrorRow, ErrorRowProps, ExchangeFoldRow, ExchangeFoldRowProps, FILL_MIN_PROMPTS, FailedMark, FailedMarkProps, FailureRow, FailureRowProps, FileBadgeIcon, FileBadgeIconProps, FoldHeader, FoldHeaderProps, GUTTER_STEP_PX, INLINE_CODE_CLASS, ImageGenerationBlock, ImageGenerationBlockProps, InfoRow, InfoRowProps, InlineChipText, InlineChipTextProps, InlineCode, InlineCodeProps, InlineTextSlotProps, InteractionTool, InteractionToolBody, InteractionToolBodyProps, LazyRow, LazyRowProps, LineState, LinkBadge, LinkBadgeProps, LinkIcon, LinkIconProps, LiveOutput, type LiveOutputProps, LoadEarlierRow, LoadEarlierRowProps, LoadFullOutputButton, LoadFullOutputButtonProps, MAX_MATCHES, Markdown, MarkdownContext, MarkdownContextValue, MarkdownDiagrams, MarkdownDiagramsProps, MarkdownLinkProps, MarkdownProps, MarkdownSlotProps, MermaidDiagram, type MermaidDiagramProps, MessageGroupRow, MessageGroupRowProps, ModelVerdict, ModelVerdictProps, NestedToolCalls, NestedToolCallsProps, NoticeRow, NoticeRowProps, OpenBadgeMenu, OpenSessionContext, ParsedRef, ParsedReferenceUrl, PromptEcho, PromptEchoProps, PromptLines, PromptLinesProps, PromptSlotProps, ProseMarkdown, ProseMarkdownProps, ReadFileBlock, ReadFileBlockProps, RefChip, RefChipProps, RefMatch, ReferenceChip, ReferenceChipProps, ReferenceText, ReferenceTextProps, RowContext, RowFrame, RowFrameProps, RowIconsContext, RowPlace, RunReceiptInline, RunReceiptInlineProps, RunSummaryRow, RunSummaryRowProps, RunnableCodeBlock, type RunnableCodeBlockProps, ScrollPosition, SearchHighlightStyle, SelectCursor, SelectCursorProps, SelectTurnCommands, SelectTurnExit, SelectTurnHintKeys, SelectTurnHintKeysProps, SelectTurnKeysOptions, SelectTurnProvider, SelectTurnProviderProps, SelectTurnState, SelectTurnValue, SessionCard, SessionCardProps, SessionEventRow, SessionEventRowProps, SessionTitleSlotProps, ShellBlockProvider, type ShellBlockProviderProps, type ShellBlockScope, SkillCard, SkillCardProps, SlotEntry, SpawnEndRow, SpawnEndRowProps, SpawnStartRow, SpawnStartRowProps, StickToBottomOptions, SubagentBlock, SubagentBlockProps, TextPreviewSlotProps, TextRow, TextRowProps, ThinkingBatchRow, ThinkingBatchRowProps, ThinkingRow, ThinkingRowProps, ToolBatchRow, ToolBatchRowProps, ToolBodySlotProps, ToolDetails, ToolDetailsProps, ToolGlyph, ToolGlyphProps, ToolInput, ToolInputProps, ToolMedia, type ToolMediaItem, ToolMediaProps, ToolRow, ToolRowProps, ToolTiming, ToolTimingProps, TranscriptAccounts, TranscriptActions, TranscriptActionsProvider, TranscriptActionsProviderProps, TranscriptFind, TranscriptFindKeyOptions, TranscriptFindOptions, TranscriptFindTarget, TranscriptRenderers, TranscriptRenderersProvider, type TranscriptRenderersProviderProps, TranscriptRow, TranscriptRowProps, TranscriptRowSlot, TranscriptRowSlotProps, TranscriptRows, TranscriptRowsInput, TranscriptScrollInputs, TranscriptSearch, TranscriptSearchOptions, TranscriptSearchProps, TranscriptSearchState, TranscriptSettling, TranscriptTurnMenu, TurnCommands, TurnCommandsOptions, TurnMenuActions, TurnMenuTarget, UserBashRow, UserBashRowProps, UserPromptAttachments, UserPromptAttachmentsProps, UserPromptRow, UserPromptRowProps, WorkerDetails, WorkerDetailsProps, classifyInlineRef, copyPromptLines, createTurnCommands, defaultAttachmentLabel, drawsImageGeneration, fileBadgeName, fileBadgeSpec, findRefs, hasInteractionBody, holdForceMountRows, imageRequestsOf, isHiddenRow, lineStateOf, linkGlyph, mountRowNow, numberRef, parseRefUrl, parseReferenceUrl, parseToolMedia, refHref, referenceUrl, remarkReferences, remarkRefs, savedPaths, siteIconValue, useBackgroundMount, useBadgeMenu, useChipResolution, useCommand, useCommitInfo, useComposerSearch, useFillViewportScrollback, useForceMountRows, useFullOutput, useModelName, useReferenceMatches, useReferenceProviders, useReferenceView, useReferencedSession, useResolveChipNow, useRowIcons, useSelectStops, useSelectTurn, useSelectTurnKeys, useSettledReveal, useShellBlockScope, useSiteIcon, useSkill, useStickToBottom, useToolMedia, useTranscriptActions, useTranscriptFind, useTranscriptFindKey, useTranscriptRenderers, useTranscriptRows, useTranscriptScroll, useTranscriptSearch, useTranscriptSelectionCopy, useTurnCommands, useTurnMenu, useWheelHoverPause };
|
|
@@ -1,8 +1,11 @@
|
|
|
1
1
|
//#region src/chat/transcript/markdown-context.d.ts
|
|
2
|
-
/** How a file chip opens what it names. */
|
|
2
|
+
/** How a file chip opens what it names: a file at `at` (1-based) when the text gave a line (`schema.ts:258`). */
|
|
3
3
|
type ChipOpener = (path: string, kind: 'file' | 'dir', event?: {
|
|
4
4
|
metaKey?: boolean;
|
|
5
5
|
ctrlKey?: boolean;
|
|
6
|
+
}, at?: {
|
|
7
|
+
line: number;
|
|
8
|
+
column?: number;
|
|
6
9
|
}) => Promise<boolean | void>;
|
|
7
10
|
/**
|
|
8
11
|
* Session-scoped facts prose chips need. `cwd` and `repoWebBase` are `null`
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
//#region src/chat/transcript/rolling.d.ts
|
|
2
|
+
/**
|
|
3
|
+
* `text`, rolling as it changes.
|
|
4
|
+
*
|
|
5
|
+
* @param props - `text`: what to show; `value`: the number behind it, so the roll goes down when it falls.
|
|
6
|
+
*/
|
|
7
|
+
declare function Rolling({ text, value }: {
|
|
8
|
+
text: string;
|
|
9
|
+
value: number;
|
|
10
|
+
}): import("react").JSX.Element;
|
|
11
|
+
//#endregion
|
|
12
|
+
export { Rolling };
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { RollingText } from "../../motion/roll.js";
|
|
2
|
+
import { SmoothWidth } from "../../motion/size.js";
|
|
3
|
+
import { jsx } from "react/jsx-runtime";
|
|
4
|
+
//#region src/chat/transcript/rolling.tsx
|
|
5
|
+
/**
|
|
6
|
+
* A count that changes as a run goes (a script's `3 of 4`, a loop's round, a wait's seconds): its changed
|
|
7
|
+
* digits roll like the app's other live counters (`RollingText`), and its width eases when its length
|
|
8
|
+
* changes (`SmoothWidth`). Internal to the transcript.
|
|
9
|
+
*/
|
|
10
|
+
/**
|
|
11
|
+
* `text`, rolling as it changes.
|
|
12
|
+
*
|
|
13
|
+
* @param props - `text`: what to show; `value`: the number behind it, so the roll goes down when it falls.
|
|
14
|
+
*/
|
|
15
|
+
function Rolling({ text, value }) {
|
|
16
|
+
return /* @__PURE__ */ jsx(SmoothWidth, { children: /* @__PURE__ */ jsx(RollingText, {
|
|
17
|
+
text,
|
|
18
|
+
value
|
|
19
|
+
}) });
|
|
20
|
+
}
|
|
21
|
+
//#endregion
|
|
22
|
+
export { Rolling };
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { ToolRowModel } from "../headless/transcript/rows.js";
|
|
2
2
|
import "../headless/transcript/index.js";
|
|
3
|
-
import {
|
|
3
|
+
import { Yw as ScriptProgress } from "../../dist/index-Bq87OcGy.js";
|
|
4
4
|
//#region src/chat/transcript/script-input.d.ts
|
|
5
5
|
/**
|
|
6
6
|
* A tool row's progress and how it ended, as `ToolInput` takes them for a Codemode script.
|