@patze/code-cli 0.24.0 → 0.31.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +65 -0
- package/VERSION +1 -1
- package/dist/backend/agent-trace.d.ts +1 -0
- package/dist/backend/agent-trace.d.ts.map +1 -1
- package/dist/backend/agent-trace.js +1 -0
- package/dist/backend/agent-trace.js.map +1 -1
- package/dist/backend/execute-client.d.ts +2 -0
- package/dist/backend/execute-client.d.ts.map +1 -1
- package/dist/backend/execute-client.js +2 -0
- package/dist/backend/execute-client.js.map +1 -1
- package/dist/backend/run-record.d.ts +2 -0
- package/dist/backend/run-record.d.ts.map +1 -1
- package/dist/backend/run-record.js +21 -0
- package/dist/backend/run-record.js.map +1 -1
- package/dist/backend/run-stream-client.d.ts +6 -0
- package/dist/backend/run-stream-client.d.ts.map +1 -1
- package/dist/backend/run-stream-client.js +10 -0
- package/dist/backend/run-stream-client.js.map +1 -1
- package/dist/cli/commands/agent.d.ts.map +1 -1
- package/dist/cli/commands/agent.js +19 -22
- package/dist/cli/commands/agent.js.map +1 -1
- package/dist/cli/commands/exec.d.ts.map +1 -1
- package/dist/cli/commands/exec.js +42 -7
- package/dist/cli/commands/exec.js.map +1 -1
- package/dist/cli/interactive/agent-event-feed.d.ts +7 -0
- package/dist/cli/interactive/agent-event-feed.d.ts.map +1 -1
- package/dist/cli/interactive/agent-event-feed.js +91 -37
- package/dist/cli/interactive/agent-event-feed.js.map +1 -1
- package/dist/cli/interactive/agent-event-parse.d.ts +4 -0
- package/dist/cli/interactive/agent-event-parse.d.ts.map +1 -0
- package/dist/cli/interactive/agent-event-parse.js +92 -0
- package/dist/cli/interactive/agent-event-parse.js.map +1 -0
- package/dist/cli/interactive/agent-events.d.ts +6 -0
- package/dist/cli/interactive/agent-events.d.ts.map +1 -1
- package/dist/cli/interactive/agent-events.js +39 -2
- package/dist/cli/interactive/agent-events.js.map +1 -1
- package/dist/cli/interactive/agent-execute-turn.d.ts.map +1 -1
- package/dist/cli/interactive/agent-execute-turn.js +5 -0
- package/dist/cli/interactive/agent-execute-turn.js.map +1 -1
- package/dist/cli/interactive/agent-stream-format.d.ts +4 -0
- package/dist/cli/interactive/agent-stream-format.d.ts.map +1 -1
- package/dist/cli/interactive/agent-stream-format.js +44 -5
- package/dist/cli/interactive/agent-stream-format.js.map +1 -1
- package/dist/cli/interactive/composer-chrome.d.ts +20 -0
- package/dist/cli/interactive/composer-chrome.d.ts.map +1 -0
- package/dist/cli/interactive/composer-chrome.js +77 -0
- package/dist/cli/interactive/composer-chrome.js.map +1 -0
- package/dist/cli/interactive/composer-keys.d.ts +2 -1
- package/dist/cli/interactive/composer-keys.d.ts.map +1 -1
- package/dist/cli/interactive/composer-keys.js +9 -2
- package/dist/cli/interactive/composer-keys.js.map +1 -1
- package/dist/cli/interactive/composer-session-chrome.d.ts +4 -0
- package/dist/cli/interactive/composer-session-chrome.d.ts.map +1 -0
- package/dist/cli/interactive/composer-session-chrome.js +22 -0
- package/dist/cli/interactive/composer-session-chrome.js.map +1 -0
- package/dist/cli/interactive/cookbook-feed-writer.d.ts +13 -0
- package/dist/cli/interactive/cookbook-feed-writer.d.ts.map +1 -0
- package/dist/cli/interactive/cookbook-feed-writer.js +87 -0
- package/dist/cli/interactive/cookbook-feed-writer.js.map +1 -0
- package/dist/cli/interactive/cookbook-tool-feed.d.ts +13 -0
- package/dist/cli/interactive/cookbook-tool-feed.d.ts.map +1 -0
- package/dist/cli/interactive/cookbook-tool-feed.js +67 -0
- package/dist/cli/interactive/cookbook-tool-feed.js.map +1 -0
- package/dist/cli/interactive/header.d.ts +4 -1
- package/dist/cli/interactive/header.d.ts.map +1 -1
- package/dist/cli/interactive/header.js +67 -1
- package/dist/cli/interactive/header.js.map +1 -1
- package/dist/cli/interactive/line-editor.d.ts +9 -0
- package/dist/cli/interactive/line-editor.d.ts.map +1 -1
- package/dist/cli/interactive/line-editor.js +76 -6
- package/dist/cli/interactive/line-editor.js.map +1 -1
- package/dist/cli/interactive/opentui-agent-event.d.ts +10 -0
- package/dist/cli/interactive/opentui-agent-event.d.ts.map +1 -0
- package/dist/cli/interactive/opentui-agent-event.js +12 -0
- package/dist/cli/interactive/opentui-agent-event.js.map +1 -0
- package/dist/cli/interactive/run-replay.d.ts.map +1 -1
- package/dist/cli/interactive/run-replay.js +3 -0
- package/dist/cli/interactive/run-replay.js.map +1 -1
- package/dist/cli/interactive/session-controller.d.ts.map +1 -1
- package/dist/cli/interactive/session-controller.js +3 -0
- package/dist/cli/interactive/session-controller.js.map +1 -1
- package/dist/cli/interactive/shell.d.ts.map +1 -1
- package/dist/cli/interactive/shell.js +22 -2
- package/dist/cli/interactive/shell.js.map +1 -1
- package/dist/cli/interactive/trace-glyphs.d.ts +1 -0
- package/dist/cli/interactive/trace-glyphs.d.ts.map +1 -1
- package/dist/cli/interactive/trace-glyphs.js +56 -1
- package/dist/cli/interactive/trace-glyphs.js.map +1 -1
- package/dist/cli/interactive/transcript-upsert.d.ts.map +1 -1
- package/dist/cli/interactive/transcript-upsert.js +4 -0
- package/dist/cli/interactive/transcript-upsert.js.map +1 -1
- package/opentui/src/App.tsx +167 -80
- package/package.json +1 -1
|
@@ -10,4 +10,5 @@ export declare function formatToolStatusGlyph(status: AgentTraceEvent["status"])
|
|
|
10
10
|
export declare function formatToolTraceBody(event: AgentTraceEvent): string;
|
|
11
11
|
export declare function formatToolUpsertLine(event: AgentTraceEvent): string;
|
|
12
12
|
export declare function formatThinkingUpsertLine(event: AgentTraceEvent): string;
|
|
13
|
+
export declare function formatCompactDiffSnippet(event: AgentTraceEvent): string | null;
|
|
13
14
|
//# sourceMappingURL=trace-glyphs.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"trace-glyphs.d.ts","sourceRoot":"","sources":["../../../src/cli/interactive/trace-glyphs.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAA;
|
|
1
|
+
{"version":3,"file":"trace-glyphs.d.ts","sourceRoot":"","sources":["../../../src/cli/interactive/trace-glyphs.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAA;AAKnE,MAAM,MAAM,cAAc,GAAG,QAAQ,GAAG,QAAQ,GAAG,QAAQ,CAAA;AAE3D,MAAM,MAAM,aAAa,GAAG;IAC1B,MAAM,CAAC,EAAE,cAAc,CAAA;IACvB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,YAAY,CAAC,EAAE,MAAM,CAAA;CACtB,CAAA;AAED,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,eAAe,GAAG,aAAa,CAwBxE;AAED,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,eAAe,CAAC,QAAQ,CAAC,GAAG,MAAM,CAQ/E;AAED,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,eAAe,GAAG,MAAM,CAkClE;AAED,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,eAAe,GAAG,MAAM,CAYnE;AAED,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,eAAe,GAAG,MAAM,CAOvE;AAyHD,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,eAAe,GAAG,MAAM,GAAG,IAAI,CA6C9E"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { excerptTraceText } from "../../backend/agent-trace.js";
|
|
2
|
+
import { formatCookbookToolFeedLine, normalizeCookbookToolStatus } from "./cookbook-tool-feed.js";
|
|
2
3
|
import { summarizeToolArgsFromDetail } from "./tool-arg-summary.js";
|
|
3
4
|
export function parseTraceEditMeta(event) {
|
|
4
5
|
const record = event;
|
|
@@ -60,7 +61,16 @@ export function formatToolTraceBody(event) {
|
|
|
60
61
|
return `▸ ${event.title || name} · ${target}`;
|
|
61
62
|
}
|
|
62
63
|
export function formatToolUpsertLine(event) {
|
|
63
|
-
|
|
64
|
+
const name = (event.toolName || event.title || "tool").trim();
|
|
65
|
+
const params = summarizeToolArgsFromDetail(name, event.detail) ||
|
|
66
|
+
excerptTraceText(event.detail?.trim() ?? "", 80) ||
|
|
67
|
+
undefined;
|
|
68
|
+
const sdkStatus = event.sdkStatus ?? event.status ?? "running";
|
|
69
|
+
return formatCookbookToolFeedLine({
|
|
70
|
+
name,
|
|
71
|
+
status: normalizeCookbookToolStatus(sdkStatus === "done" ? "completed" : sdkStatus),
|
|
72
|
+
params,
|
|
73
|
+
});
|
|
64
74
|
}
|
|
65
75
|
export function formatThinkingUpsertLine(event) {
|
|
66
76
|
const detail = event.detail?.trim();
|
|
@@ -172,4 +182,49 @@ function countLines(text) {
|
|
|
172
182
|
}
|
|
173
183
|
return text.split("\n").length;
|
|
174
184
|
}
|
|
185
|
+
export function formatCompactDiffSnippet(event) {
|
|
186
|
+
const meta = parseTraceEditMeta(event);
|
|
187
|
+
if (meta.action !== "modify") {
|
|
188
|
+
return null;
|
|
189
|
+
}
|
|
190
|
+
const detail = event.detail?.trim();
|
|
191
|
+
if (!detail || (!detail.startsWith("{") && !detail.startsWith("["))) {
|
|
192
|
+
return null;
|
|
193
|
+
}
|
|
194
|
+
try {
|
|
195
|
+
const args = JSON.parse(detail);
|
|
196
|
+
const oldText = typeof args.old_string === "string"
|
|
197
|
+
? args.old_string
|
|
198
|
+
: typeof args.old_str === "string"
|
|
199
|
+
? args.old_str
|
|
200
|
+
: null;
|
|
201
|
+
const newText = typeof args.new_string === "string"
|
|
202
|
+
? args.new_string
|
|
203
|
+
: typeof args.new_str === "string"
|
|
204
|
+
? args.new_str
|
|
205
|
+
: typeof args.content === "string"
|
|
206
|
+
? args.content
|
|
207
|
+
: null;
|
|
208
|
+
if (oldText === null || newText === null) {
|
|
209
|
+
return null;
|
|
210
|
+
}
|
|
211
|
+
const oldLines = oldText.split("\n").slice(0, 2);
|
|
212
|
+
const newLines = newText.split("\n").slice(0, 2);
|
|
213
|
+
const parts = [];
|
|
214
|
+
for (const line of oldLines) {
|
|
215
|
+
if (line.trim()) {
|
|
216
|
+
parts.push(`- ${excerptTraceText(line, 72)}`);
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
for (const line of newLines) {
|
|
220
|
+
if (line.trim()) {
|
|
221
|
+
parts.push(`+ ${excerptTraceText(line, 72)}`);
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
return parts.length > 0 ? parts.join("\n") : null;
|
|
225
|
+
}
|
|
226
|
+
catch {
|
|
227
|
+
return null;
|
|
228
|
+
}
|
|
229
|
+
}
|
|
175
230
|
//# sourceMappingURL=trace-glyphs.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"trace-glyphs.js","sourceRoot":"","sources":["../../../src/cli/interactive/trace-glyphs.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"trace-glyphs.js","sourceRoot":"","sources":["../../../src/cli/interactive/trace-glyphs.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transcript-upsert.d.ts","sourceRoot":"","sources":["../../../src/cli/interactive/transcript-upsert.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,qBAAqB,GAAG;IAClC,EAAE,EAAE,MAAM,CAAA;IACV,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,EAAE,MAAM,CAAA;IACZ,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB,CAAA;AAED,wBAAgB,yBAAyB,CACvC,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,MAAM,GACX,MAAM,GAAG,IAAI,CAiBf;
|
|
1
|
+
{"version":3,"file":"transcript-upsert.d.ts","sourceRoot":"","sources":["../../../src/cli/interactive/transcript-upsert.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,qBAAqB,GAAG;IAClC,EAAE,EAAE,MAAM,CAAA;IACV,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,EAAE,MAAM,CAAA;IACZ,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB,CAAA;AAED,wBAAgB,yBAAyB,CACvC,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,MAAM,GACX,MAAM,GAAG,IAAI,CAiBf;AAsBD,wBAAgB,qBAAqB,CACnC,KAAK,EAAE,qBAAqB,EAAE,EAC9B,KAAK,EAAE,IAAI,CAAC,qBAAqB,EAAE,IAAI,CAAC,GAAG;IAAE,EAAE,CAAC,EAAE,MAAM,CAAA;CAAE,EAC1D,SAAS,EAAE,MAAM,GAAG,IAAI,EACxB,MAAM,EAAE,MAAM,MAAM,GACnB,qBAAqB,EAAE,CAoBzB"}
|
|
@@ -17,6 +17,10 @@ export function deriveTranscriptUpsertKey(kind, label, text) {
|
|
|
17
17
|
return null;
|
|
18
18
|
}
|
|
19
19
|
function deriveToolUpsertKey(text) {
|
|
20
|
+
const cookbook = text.match(/^\[[ x~!]\]\s+\[[^\]]+\]\s+(\S+)/);
|
|
21
|
+
if (cookbook) {
|
|
22
|
+
return `tool:${cookbook[1]}`;
|
|
23
|
+
}
|
|
20
24
|
const legacy = text.match(/^\[[~x!]\]\s+(\S+)/);
|
|
21
25
|
if (legacy) {
|
|
22
26
|
return `tool:${legacy[1]}`;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transcript-upsert.js","sourceRoot":"","sources":["../../../src/cli/interactive/transcript-upsert.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"transcript-upsert.js","sourceRoot":"","sources":["../../../src/cli/interactive/transcript-upsert.ts"],"names":[],"mappings":"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"}
|
package/opentui/src/App.tsx
CHANGED
|
@@ -12,7 +12,6 @@ import {
|
|
|
12
12
|
} from "@opentui/react"
|
|
13
13
|
import { createElement, useCallback, useEffect, useMemo, useRef, useState } from "react"
|
|
14
14
|
|
|
15
|
-
import { parseTranscriptLine } from "./line-parse.js"
|
|
16
15
|
import { importPatzeDist } from "./patze-dist.js"
|
|
17
16
|
import {
|
|
18
17
|
buildTranscriptLines,
|
|
@@ -23,7 +22,7 @@ import {
|
|
|
23
22
|
} from "./transcript-render.js"
|
|
24
23
|
import { classifyPlainOutput, createTranscriptSink, inferErrorKind } from "./tui-sink.js"
|
|
25
24
|
import { upsertTranscriptEntry } from "../../dist/cli/interactive/transcript-upsert.js"
|
|
26
|
-
import {
|
|
25
|
+
import { applyOpenTuiAgentEvent } from "../../dist/cli/interactive/opentui-agent-event.js"
|
|
27
26
|
import type { AgentEvent } from "../../dist/cli/interactive/agent-events.js"
|
|
28
27
|
|
|
29
28
|
extend({ "tui-input": InputRenderable })
|
|
@@ -58,6 +57,10 @@ type InteractiveController = {
|
|
|
58
57
|
session: {
|
|
59
58
|
getModelOverride: () => string | null
|
|
60
59
|
setModelOverride: (value: string | null) => void
|
|
60
|
+
getModelThinking: () => boolean | null
|
|
61
|
+
setModelThinking: (value: boolean | null) => void
|
|
62
|
+
getModelFast: () => boolean | null
|
|
63
|
+
setModelFast: (value: boolean | null) => void
|
|
61
64
|
getExecutionMode: () => "local" | "cloud"
|
|
62
65
|
snapshot: () => Array<{ input: string; lines: string[] }>
|
|
63
66
|
}
|
|
@@ -107,10 +110,13 @@ export function App({ cwd: cwdArg }: { cwd?: string }) {
|
|
|
107
110
|
const [scrollOffset, setScrollOffset] = useState(0)
|
|
108
111
|
const [transcript, setTranscript] = useState<TranscriptEntry[]>([])
|
|
109
112
|
const [currentModel, setCurrentModel] = useState("composer-2.5-fast")
|
|
113
|
+
const [modelThinking, setModelThinking] = useState<boolean | null>(null)
|
|
114
|
+
const [modelFast, setModelFast] = useState<boolean | null>(null)
|
|
110
115
|
const [executionMode, setExecutionMode] = useState<"local" | "cloud">("local")
|
|
111
116
|
const [executionTarget, setExecutionTarget] = useState<string | null>(null)
|
|
112
117
|
const [supportedModels, setSupportedModels] = useState<string[]>([])
|
|
113
118
|
const [slashMenuReady, setSlashMenuReady] = useState(false)
|
|
119
|
+
const [startupHeader, setStartupHeader] = useState<string[]>([])
|
|
114
120
|
|
|
115
121
|
const followTranscript = useCallback(() => {
|
|
116
122
|
if (scrollPinnedRef.current) {
|
|
@@ -194,6 +200,14 @@ export function App({ cwd: cwdArg }: { cwd?: string }) {
|
|
|
194
200
|
streamingIdRef.current = null
|
|
195
201
|
}, [])
|
|
196
202
|
|
|
203
|
+
const openTuiStreamHandlers = useMemo(
|
|
204
|
+
() => ({
|
|
205
|
+
onAssistantDelta: upsertStreaming,
|
|
206
|
+
onClearAssistantStream: clearStreaming,
|
|
207
|
+
}),
|
|
208
|
+
[clearStreaming, upsertStreaming]
|
|
209
|
+
)
|
|
210
|
+
|
|
197
211
|
const refreshStatusMeta = useCallback(async () => {
|
|
198
212
|
const controller = controllerRef.current
|
|
199
213
|
if (!controller) {
|
|
@@ -213,7 +227,26 @@ export function App({ cwd: cwdArg }: { cwd?: string }) {
|
|
|
213
227
|
})
|
|
214
228
|
)
|
|
215
229
|
setExecutionMode(controller.session.getExecutionMode())
|
|
216
|
-
|
|
230
|
+
setModelThinking(controller.session.getModelThinking())
|
|
231
|
+
setModelFast(controller.session.getModelFast())
|
|
232
|
+
|
|
233
|
+
let modelIds = [...models.PATZE_SUPPORTED_MODELS]
|
|
234
|
+
const apiKey = process.env.CURSOR_API_KEY?.trim()
|
|
235
|
+
if (apiKey) {
|
|
236
|
+
try {
|
|
237
|
+
const { Cursor } = await import("@cursor/sdk")
|
|
238
|
+
const listed = await Cursor.models.list({ apiKey })
|
|
239
|
+
const ids = listed
|
|
240
|
+
.map((item) => String(item.id ?? "").trim())
|
|
241
|
+
.filter(Boolean)
|
|
242
|
+
if (ids.length > 0) {
|
|
243
|
+
modelIds = ids
|
|
244
|
+
}
|
|
245
|
+
} catch {
|
|
246
|
+
// keep bundled fallback list
|
|
247
|
+
}
|
|
248
|
+
}
|
|
249
|
+
setSupportedModels(modelIds)
|
|
217
250
|
|
|
218
251
|
const cloudGit = await importPatzeDist<
|
|
219
252
|
typeof import("../../dist/cli/interactive/cloud-git.js")
|
|
@@ -254,10 +287,7 @@ export function App({ cwd: cwdArg }: { cwd?: string }) {
|
|
|
254
287
|
const controller = (await sessionMod.prepareInteractiveController({
|
|
255
288
|
cwd,
|
|
256
289
|
interactive: true,
|
|
257
|
-
streamPartials:
|
|
258
|
-
onPartial: (chunk: string) => {
|
|
259
|
-
upsertStreaming(chunk)
|
|
260
|
-
},
|
|
290
|
+
streamPartials: false,
|
|
261
291
|
})) as InteractiveController
|
|
262
292
|
|
|
263
293
|
if (cancelled) {
|
|
@@ -265,21 +295,7 @@ export function App({ cwd: cwdArg }: { cwd?: string }) {
|
|
|
265
295
|
}
|
|
266
296
|
|
|
267
297
|
controllerRef.current = controller
|
|
268
|
-
|
|
269
|
-
const headerEntries = controller.renderHeaderLines().flatMap((line) => {
|
|
270
|
-
const parsed = parseTranscriptLine(line)
|
|
271
|
-
if (!parsed || parsed.continuation) {
|
|
272
|
-
return []
|
|
273
|
-
}
|
|
274
|
-
return [
|
|
275
|
-
{
|
|
276
|
-
id: nextId(),
|
|
277
|
-
kind: "meta" as const,
|
|
278
|
-
label: parsed.label || "info",
|
|
279
|
-
text: parsed.text || line,
|
|
280
|
-
},
|
|
281
|
-
]
|
|
282
|
-
})
|
|
298
|
+
setStartupHeader(controller.renderHeaderLines())
|
|
283
299
|
|
|
284
300
|
const restored: TranscriptEntry[] = []
|
|
285
301
|
for (const turn of controller.session.snapshot()) {
|
|
@@ -294,7 +310,7 @@ export function App({ cwd: cwdArg }: { cwd?: string }) {
|
|
|
294
310
|
}
|
|
295
311
|
}
|
|
296
312
|
|
|
297
|
-
setTranscript(
|
|
313
|
+
setTranscript(restored)
|
|
298
314
|
await refreshStatusMeta()
|
|
299
315
|
setReady(true)
|
|
300
316
|
} catch (error) {
|
|
@@ -306,7 +322,7 @@ export function App({ cwd: cwdArg }: { cwd?: string }) {
|
|
|
306
322
|
return () => {
|
|
307
323
|
cancelled = true
|
|
308
324
|
}
|
|
309
|
-
}, [cwd, nextId, refreshStatusMeta
|
|
325
|
+
}, [cwd, nextId, refreshStatusMeta])
|
|
310
326
|
|
|
311
327
|
const exitApp = useCallback(() => {
|
|
312
328
|
controllerRef.current?.persistSession()
|
|
@@ -320,7 +336,7 @@ export function App({ cwd: cwdArg }: { cwd?: string }) {
|
|
|
320
336
|
return
|
|
321
337
|
}
|
|
322
338
|
|
|
323
|
-
const value = rawLine
|
|
339
|
+
const value = trimComposerPrompt(rawLine)
|
|
324
340
|
if (!value) {
|
|
325
341
|
return
|
|
326
342
|
}
|
|
@@ -354,7 +370,9 @@ export function App({ cwd: cwdArg }: { cwd?: string }) {
|
|
|
354
370
|
useActivitySpinner: false,
|
|
355
371
|
onAgentEvent: (event) => {
|
|
356
372
|
setActivityLabel(null)
|
|
357
|
-
setTranscript((items) =>
|
|
373
|
+
setTranscript((items) =>
|
|
374
|
+
applyOpenTuiAgentEvent(items, event, turnAssistantId, openTuiStreamHandlers)
|
|
375
|
+
)
|
|
358
376
|
followTranscript()
|
|
359
377
|
},
|
|
360
378
|
})
|
|
@@ -380,6 +398,7 @@ export function App({ cwd: cwdArg }: { cwd?: string }) {
|
|
|
380
398
|
followTranscript,
|
|
381
399
|
markScrollPinned,
|
|
382
400
|
nextId,
|
|
401
|
+
openTuiStreamHandlers,
|
|
383
402
|
refreshStatusMeta,
|
|
384
403
|
upsertTranscriptLine,
|
|
385
404
|
upsertStreaming,
|
|
@@ -391,6 +410,23 @@ export function App({ cwd: cwdArg }: { cwd?: string }) {
|
|
|
391
410
|
setMode("model")
|
|
392
411
|
}, [])
|
|
393
412
|
|
|
413
|
+
const toggleModelPreference = useCallback((kind: "thinking" | "fast") => {
|
|
414
|
+
const controller = controllerRef.current
|
|
415
|
+
if (!controller) {
|
|
416
|
+
return
|
|
417
|
+
}
|
|
418
|
+
if (kind === "thinking") {
|
|
419
|
+
const next = controller.session.getModelThinking() === true ? null : true
|
|
420
|
+
controller.session.setModelThinking(next)
|
|
421
|
+
setModelThinking(next)
|
|
422
|
+
} else {
|
|
423
|
+
const next = controller.session.getModelFast() === true ? null : true
|
|
424
|
+
controller.session.setModelFast(next)
|
|
425
|
+
setModelFast(next)
|
|
426
|
+
}
|
|
427
|
+
controller.persistSession()
|
|
428
|
+
}, [])
|
|
429
|
+
|
|
394
430
|
const runCommand = useCallback(
|
|
395
431
|
async (rawCommand: string) => {
|
|
396
432
|
const trimmed = rawCommand.trim()
|
|
@@ -431,7 +467,7 @@ export function App({ cwd: cwdArg }: { cwd?: string }) {
|
|
|
431
467
|
|
|
432
468
|
const submitInput = useCallback(
|
|
433
469
|
(value: string) => {
|
|
434
|
-
const prompt = value
|
|
470
|
+
const prompt = trimComposerPrompt(value)
|
|
435
471
|
setInput("")
|
|
436
472
|
|
|
437
473
|
if (!prompt || busy) {
|
|
@@ -473,41 +509,26 @@ export function App({ cwd: cwdArg }: { cwd?: string }) {
|
|
|
473
509
|
const modelSelectRows = Math.min(8, Math.max(3, rows - 10))
|
|
474
510
|
const commandPanelRows = 2 + commandSelectRows
|
|
475
511
|
const modelPanelRows = 3 + modelSelectRows
|
|
512
|
+
const headerRows = Math.max(1, startupHeader.length)
|
|
513
|
+
const composerChromeRows = 5
|
|
514
|
+
const bottomHintRows = 1
|
|
476
515
|
|
|
477
516
|
const transcriptViewportRows = Math.max(
|
|
478
517
|
4,
|
|
479
|
-
rows -
|
|
518
|
+
rows -
|
|
519
|
+
headerRows -
|
|
520
|
+
bottomHintRows -
|
|
521
|
+
(mode === "model"
|
|
522
|
+
? modelPanelRows + 2
|
|
523
|
+
: mode === "command"
|
|
524
|
+
? commandPanelRows + 2
|
|
525
|
+
: composerChromeRows)
|
|
480
526
|
)
|
|
481
527
|
|
|
482
|
-
const
|
|
483
|
-
|
|
484
|
-
|
|
485
|
-
|
|
486
|
-
id: "status-mode",
|
|
487
|
-
kind: "meta" as const,
|
|
488
|
-
label: "mode",
|
|
489
|
-
text: executionMode,
|
|
490
|
-
},
|
|
491
|
-
...(executionTarget
|
|
492
|
-
? [
|
|
493
|
-
{
|
|
494
|
-
id: "status-target",
|
|
495
|
-
kind: "meta" as const,
|
|
496
|
-
label: "target",
|
|
497
|
-
text: executionTarget,
|
|
498
|
-
},
|
|
499
|
-
]
|
|
500
|
-
: []),
|
|
501
|
-
{
|
|
502
|
-
id: "status-model",
|
|
503
|
-
kind: "meta" as const,
|
|
504
|
-
label: "model",
|
|
505
|
-
text: currentModel,
|
|
506
|
-
},
|
|
507
|
-
...transcript,
|
|
508
|
-
],
|
|
509
|
-
[cwd, currentModel, executionMode, executionTarget, transcript]
|
|
510
|
-
)
|
|
528
|
+
const composerModelLabel = `${currentModel}${modelThinking ? " · thinking" : ""}${modelFast ? " · fast" : ""}`
|
|
529
|
+
const composerPathLabel = shortenComposerPath(cwd)
|
|
530
|
+
|
|
531
|
+
const scrollableEntries = useMemo(() => transcript, [transcript])
|
|
511
532
|
|
|
512
533
|
const transcriptLines = useMemo(
|
|
513
534
|
() => buildTranscriptLines(scrollableEntries, columns),
|
|
@@ -571,6 +592,10 @@ export function App({ cwd: cwdArg }: { cwd?: string }) {
|
|
|
571
592
|
if (mode === "model") {
|
|
572
593
|
if (key.name === "backspace" || key.name === "delete") {
|
|
573
594
|
setModelSearch((value) => value.slice(0, -1))
|
|
595
|
+
} else if (character === "T") {
|
|
596
|
+
toggleModelPreference("thinking")
|
|
597
|
+
} else if (character === "F") {
|
|
598
|
+
toggleModelPreference("fast")
|
|
574
599
|
} else if (isSearchInput(character)) {
|
|
575
600
|
setModelSearch((value) => `${value}${character}`)
|
|
576
601
|
}
|
|
@@ -586,6 +611,11 @@ export function App({ cwd: cwdArg }: { cwd?: string }) {
|
|
|
586
611
|
if (mode === "input") {
|
|
587
612
|
const pageSize = Math.max(1, transcriptViewportRows - 1)
|
|
588
613
|
|
|
614
|
+
if (key.shift && (key.name === "return" || key.name === "enter")) {
|
|
615
|
+
setInput((value) => `${value}\n`)
|
|
616
|
+
return
|
|
617
|
+
}
|
|
618
|
+
|
|
589
619
|
if (key.name === "up") {
|
|
590
620
|
markScrollUnpinned()
|
|
591
621
|
setScrollOffset((offset) => Math.min(maxScrollOffset, offset + 1))
|
|
@@ -646,6 +676,15 @@ export function App({ cwd: cwdArg }: { cwd?: string }) {
|
|
|
646
676
|
return createElement(
|
|
647
677
|
"box",
|
|
648
678
|
{ flexDirection: "column", height: rows, paddingX: 1 },
|
|
679
|
+
startupHeader.length
|
|
680
|
+
? createElement(
|
|
681
|
+
"box",
|
|
682
|
+
{ flexDirection: "column", flexShrink: 0, marginBottom: 1 },
|
|
683
|
+
startupHeader.map((line, index) =>
|
|
684
|
+
createElement(HeaderLine, { key: `header-${index}`, line })
|
|
685
|
+
)
|
|
686
|
+
)
|
|
687
|
+
: null,
|
|
649
688
|
createElement(
|
|
650
689
|
"box",
|
|
651
690
|
{ flexDirection: "column", height: transcriptViewportRows },
|
|
@@ -705,7 +744,7 @@ export function App({ cwd: cwdArg }: { cwd?: string }) {
|
|
|
705
744
|
attributes: TextAttributes.BOLD,
|
|
706
745
|
}),
|
|
707
746
|
createElement("text", {
|
|
708
|
-
content:
|
|
747
|
+
content: `Type to search · T thinking ${modelThinking ? "on" : "off"} · F fast ${modelFast ? "on" : "off"} · Enter choose · Escape cancel`,
|
|
709
748
|
fg: "gray",
|
|
710
749
|
}),
|
|
711
750
|
createElement("text", {
|
|
@@ -728,31 +767,44 @@ export function App({ cwd: cwdArg }: { cwd?: string }) {
|
|
|
728
767
|
border: true,
|
|
729
768
|
borderStyle: "single",
|
|
730
769
|
borderColor: busy ? "yellow" : "green",
|
|
770
|
+
flexDirection: "column",
|
|
731
771
|
marginTop: 1,
|
|
732
772
|
paddingX: 1,
|
|
733
773
|
},
|
|
734
|
-
createElement(
|
|
735
|
-
|
|
736
|
-
|
|
737
|
-
|
|
738
|
-
|
|
739
|
-
|
|
740
|
-
|
|
741
|
-
|
|
742
|
-
|
|
743
|
-
|
|
744
|
-
|
|
745
|
-
|
|
746
|
-
|
|
747
|
-
|
|
748
|
-
|
|
749
|
-
|
|
750
|
-
|
|
751
|
-
|
|
752
|
-
|
|
753
|
-
|
|
754
|
-
|
|
755
|
-
|
|
774
|
+
createElement(
|
|
775
|
+
"box",
|
|
776
|
+
{ flexDirection: "row", alignItems: "center" },
|
|
777
|
+
createElement("text", {
|
|
778
|
+
content: "> ",
|
|
779
|
+
attributes: TextAttributes.BOLD,
|
|
780
|
+
}),
|
|
781
|
+
createElement(TuiInput, {
|
|
782
|
+
focused: ready && !busy,
|
|
783
|
+
placeholder: busy
|
|
784
|
+
? activityLabel
|
|
785
|
+
? `${["⠋", "⠙", "⠹", "⠸", "⠼", "⠴", "⠦", "⠧", "⠇", "⠏"][activityFrame % 10]} ${activityLabel}… · Ctrl+C cancel`
|
|
786
|
+
: "Ctrl+C cancel · waiting for agent…"
|
|
787
|
+
: ready
|
|
788
|
+
? "Ask anything…"
|
|
789
|
+
: "Loading Patze Code…",
|
|
790
|
+
value: input,
|
|
791
|
+
onInput: (value: string) => {
|
|
792
|
+
setInput(value)
|
|
793
|
+
if (busy) {
|
|
794
|
+
return
|
|
795
|
+
}
|
|
796
|
+
if (value.startsWith("/") && !value.includes(" ")) {
|
|
797
|
+
setMode("command")
|
|
798
|
+
} else {
|
|
799
|
+
setMode("input")
|
|
800
|
+
}
|
|
801
|
+
},
|
|
802
|
+
onSubmit: submitInput,
|
|
803
|
+
})
|
|
804
|
+
),
|
|
805
|
+
createElement("text", {
|
|
806
|
+
content: `${composerModelLabel} · ${composerPathLabel}`,
|
|
807
|
+
attributes: TextAttributes.DIM,
|
|
756
808
|
})
|
|
757
809
|
),
|
|
758
810
|
createElement("text", {
|
|
@@ -764,6 +816,41 @@ export function App({ cwd: cwdArg }: { cwd?: string }) {
|
|
|
764
816
|
)
|
|
765
817
|
}
|
|
766
818
|
|
|
819
|
+
function trimComposerPrompt(value: string): string {
|
|
820
|
+
return value.replace(/^\s+|\s+$/g, "")
|
|
821
|
+
}
|
|
822
|
+
|
|
823
|
+
function shortenComposerPath(path: string): string {
|
|
824
|
+
const normalized = String(path || "").trim().replace(/\\/g, "/")
|
|
825
|
+
if ([...normalized].length <= 36) {
|
|
826
|
+
return normalized
|
|
827
|
+
}
|
|
828
|
+
const parts = normalized.split("/").filter(Boolean)
|
|
829
|
+
if (parts.length >= 2) {
|
|
830
|
+
const tail = `${parts[parts.length - 2]}/${parts[parts.length - 1]}`
|
|
831
|
+
const candidate = `…/${tail}`
|
|
832
|
+
if ([...candidate].length <= 36) {
|
|
833
|
+
return candidate
|
|
834
|
+
}
|
|
835
|
+
}
|
|
836
|
+
return `…${normalized.slice(-35)}`
|
|
837
|
+
}
|
|
838
|
+
|
|
839
|
+
function HeaderLine({ line }: { line: string }) {
|
|
840
|
+
const plain = stripAnsi(line)
|
|
841
|
+
const dim = line.includes("\x1b[2m") || plain.startsWith("Tip:") || plain.includes("Beta ·")
|
|
842
|
+
const warn = line.includes("\x1b[33m") || plain.startsWith("Heads up:")
|
|
843
|
+
return createElement("text", {
|
|
844
|
+
content: plain,
|
|
845
|
+
fg: warn ? "yellow" : dim ? "gray" : undefined,
|
|
846
|
+
attributes: dim ? TextAttributes.DIM : TextAttributes.NONE,
|
|
847
|
+
})
|
|
848
|
+
}
|
|
849
|
+
|
|
850
|
+
function stripAnsi(text: string): string {
|
|
851
|
+
return text.replace(/\x1b\[[0-9;]*m/g, "")
|
|
852
|
+
}
|
|
853
|
+
|
|
767
854
|
function TranscriptLine({ line }: { line: TranscriptLine }) {
|
|
768
855
|
const color = {
|
|
769
856
|
assistant: "white",
|