@patze/code-cli 0.16.2 → 0.17.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 +17 -0
- package/VERSION +1 -1
- package/dist/backend/run-stream-client.d.ts +1 -0
- package/dist/backend/run-stream-client.d.ts.map +1 -1
- package/dist/backend/run-stream-client.js +17 -0
- package/dist/backend/run-stream-client.js.map +1 -1
- package/dist/cli/interactive/agent-execute-turn.d.ts +1 -0
- package/dist/cli/interactive/agent-execute-turn.d.ts.map +1 -1
- package/dist/cli/interactive/agent-execute-turn.js +24 -1
- package/dist/cli/interactive/agent-execute-turn.js.map +1 -1
- package/dist/cli/interactive/agent-turn.d.ts +1 -0
- package/dist/cli/interactive/agent-turn.d.ts.map +1 -1
- package/dist/cli/interactive/agent-turn.js +1 -0
- package/dist/cli/interactive/agent-turn.js.map +1 -1
- package/dist/cli/interactive/composer-keys.d.ts +11 -0
- package/dist/cli/interactive/composer-keys.d.ts.map +1 -0
- package/dist/cli/interactive/composer-keys.js +19 -0
- package/dist/cli/interactive/composer-keys.js.map +1 -0
- package/dist/cli/interactive/line-editor.d.ts +2 -0
- package/dist/cli/interactive/line-editor.d.ts.map +1 -1
- package/dist/cli/interactive/line-editor.js +5 -3
- package/dist/cli/interactive/line-editor.js.map +1 -1
- package/dist/cli/interactive/session-controller.d.ts +4 -1
- package/dist/cli/interactive/session-controller.d.ts.map +1 -1
- package/dist/cli/interactive/session-controller.js +2 -1
- package/dist/cli/interactive/session-controller.js.map +1 -1
- package/dist/cli/interactive/slash-dispatch.d.ts +1 -0
- package/dist/cli/interactive/slash-dispatch.d.ts.map +1 -1
- package/dist/cli/interactive/slash-dispatch.js +1 -0
- package/dist/cli/interactive/slash-dispatch.js.map +1 -1
- package/dist/cli/interactive/transcript-upsert.d.ts +12 -0
- package/dist/cli/interactive/transcript-upsert.d.ts.map +1 -0
- package/dist/cli/interactive/transcript-upsert.js +33 -0
- package/dist/cli/interactive/transcript-upsert.js.map +1 -0
- package/opentui/package.json +18 -0
- package/opentui/scripts/assert-parse.mjs +21 -0
- package/opentui/src/App.tsx +806 -0
- package/opentui/src/line-parse.ts +54 -0
- package/opentui/src/main.tsx +45 -0
- package/opentui/src/patze-dist.ts +11 -0
- package/opentui/src/transcript-render.ts +218 -0
- package/opentui/src/tui-sink.ts +78 -0
- package/opentui/tsconfig.json +13 -0
- package/package.json +6 -2
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
export function deriveTranscriptUpsertKey(kind, label, text) {
|
|
2
|
+
if (kind === "tool" || label === "tool") {
|
|
3
|
+
const match = text.match(/^\[[~x!]\]\s+(\S+)/);
|
|
4
|
+
return match ? `tool:${match[1]}` : `tool:${text.slice(0, 48)}`;
|
|
5
|
+
}
|
|
6
|
+
if (kind === "status" || label === "run") {
|
|
7
|
+
const compact = text.replace(/\s+/g, " ").trim();
|
|
8
|
+
if (/^(queued|running|completed|failed|cancelled)/i.test(compact)) {
|
|
9
|
+
return `run:${compact.split("·")[0]?.trim() ?? compact}`;
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
return null;
|
|
13
|
+
}
|
|
14
|
+
export function upsertTranscriptEntry(items, entry, upsertKey, nextId) {
|
|
15
|
+
if (!upsertKey) {
|
|
16
|
+
return [...items, { ...entry, id: entry.id ?? nextId() }];
|
|
17
|
+
}
|
|
18
|
+
for (let index = items.length - 1; index >= 0; index -= 1) {
|
|
19
|
+
const candidate = items[index];
|
|
20
|
+
if (candidate.upsertKey === upsertKey) {
|
|
21
|
+
const copy = [...items];
|
|
22
|
+
copy[index] = {
|
|
23
|
+
...candidate,
|
|
24
|
+
kind: entry.kind,
|
|
25
|
+
label: entry.label,
|
|
26
|
+
text: entry.text,
|
|
27
|
+
};
|
|
28
|
+
return copy;
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
return [...items, { ...entry, id: entry.id ?? nextId(), upsertKey }];
|
|
32
|
+
}
|
|
33
|
+
//# sourceMappingURL=transcript-upsert.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transcript-upsert.js","sourceRoot":"","sources":["../../../src/cli/interactive/transcript-upsert.ts"],"names":[],"mappings":"AAQA,MAAM,UAAU,yBAAyB,CACvC,IAAY,EACZ,KAAa,EACb,IAAY;IAEZ,IAAI,IAAI,KAAK,MAAM,IAAI,KAAK,KAAK,MAAM,EAAE,CAAC;QACxC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,oBAAoB,CAAC,CAAA;QAC9C,OAAO,KAAK,CAAC,CAAC,CAAC,QAAQ,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAA;IACjE,CAAC;IACD,IAAI,IAAI,KAAK,QAAQ,IAAI,KAAK,KAAK,KAAK,EAAE,CAAC;QACzC,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,CAAA;QAChD,IAAI,+CAA+C,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;YAClE,OAAO,OAAO,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,OAAO,EAAE,CAAA;QAC1D,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAA;AACb,CAAC;AAED,MAAM,UAAU,qBAAqB,CACnC,KAA8B,EAC9B,KAA0D,EAC1D,SAAwB,EACxB,MAAoB;IAEpB,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,OAAO,CAAC,GAAG,KAAK,EAAE,EAAE,GAAG,KAAK,EAAE,EAAE,EAAE,KAAK,CAAC,EAAE,IAAI,MAAM,EAAE,EAAE,CAAC,CAAA;IAC3D,CAAC;IAED,KAAK,IAAI,KAAK,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;QAC1D,MAAM,SAAS,GAAG,KAAK,CAAC,KAAK,CAAC,CAAA;QAC9B,IAAI,SAAS,CAAC,SAAS,KAAK,SAAS,EAAE,CAAC;YACtC,MAAM,IAAI,GAAG,CAAC,GAAG,KAAK,CAAC,CAAA;YACvB,IAAI,CAAC,KAAK,CAAC,GAAG;gBACZ,GAAG,SAAS;gBACZ,IAAI,EAAE,KAAK,CAAC,IAAI;gBAChB,KAAK,EAAE,KAAK,CAAC,KAAK;gBAClB,IAAI,EAAE,KAAK,CAAC,IAAI;aACjB,CAAA;YACD,OAAO,IAAI,CAAA;QACb,CAAC;IACH,CAAC;IAED,OAAO,CAAC,GAAG,KAAK,EAAE,EAAE,GAAG,KAAK,EAAE,EAAE,EAAE,KAAK,CAAC,EAAE,IAAI,MAAM,EAAE,EAAE,SAAS,EAAE,CAAC,CAAA;AACtE,CAAC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@patze/code-cli-opentui",
|
|
3
|
+
"private": true,
|
|
4
|
+
"type": "module",
|
|
5
|
+
"scripts": {
|
|
6
|
+
"start": "bun src/main.tsx"
|
|
7
|
+
},
|
|
8
|
+
"dependencies": {
|
|
9
|
+
"@cursor/sdk": "^1.0.13",
|
|
10
|
+
"@opentui/core": "^0.2.0",
|
|
11
|
+
"@opentui/react": "^0.2.0",
|
|
12
|
+
"react": "^19.2.5"
|
|
13
|
+
},
|
|
14
|
+
"devDependencies": {
|
|
15
|
+
"@types/react": "^19.2.14",
|
|
16
|
+
"typescript": "^6.0.3"
|
|
17
|
+
}
|
|
18
|
+
}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import assert from "node:assert/strict"
|
|
2
|
+
|
|
3
|
+
import { parseTranscriptLine } from "../src/line-parse.ts"
|
|
4
|
+
import { buildTranscriptLines } from "../src/transcript-render.ts"
|
|
5
|
+
|
|
6
|
+
const parsed = parseTranscriptLine("you hello")
|
|
7
|
+
assert.ok(parsed)
|
|
8
|
+
assert.equal(parsed.kind, "user")
|
|
9
|
+
assert.equal(parsed.text, "hello")
|
|
10
|
+
|
|
11
|
+
const ansi = parseTranscriptLine("\x1b[32magent\x1b[0m partial reply")
|
|
12
|
+
assert.ok(ansi)
|
|
13
|
+
assert.equal(ansi.kind, "assistant")
|
|
14
|
+
|
|
15
|
+
const lines = buildTranscriptLines(
|
|
16
|
+
[{ id: "1", kind: "assistant", label: "agent", text: "# Title\n\nBody" }],
|
|
17
|
+
80
|
|
18
|
+
)
|
|
19
|
+
assert.ok(lines.length >= 2)
|
|
20
|
+
|
|
21
|
+
console.log("opentui parse smoke ok")
|