@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.
Files changed (44) hide show
  1. package/CHANGELOG.md +17 -0
  2. package/VERSION +1 -1
  3. package/dist/backend/run-stream-client.d.ts +1 -0
  4. package/dist/backend/run-stream-client.d.ts.map +1 -1
  5. package/dist/backend/run-stream-client.js +17 -0
  6. package/dist/backend/run-stream-client.js.map +1 -1
  7. package/dist/cli/interactive/agent-execute-turn.d.ts +1 -0
  8. package/dist/cli/interactive/agent-execute-turn.d.ts.map +1 -1
  9. package/dist/cli/interactive/agent-execute-turn.js +24 -1
  10. package/dist/cli/interactive/agent-execute-turn.js.map +1 -1
  11. package/dist/cli/interactive/agent-turn.d.ts +1 -0
  12. package/dist/cli/interactive/agent-turn.d.ts.map +1 -1
  13. package/dist/cli/interactive/agent-turn.js +1 -0
  14. package/dist/cli/interactive/agent-turn.js.map +1 -1
  15. package/dist/cli/interactive/composer-keys.d.ts +11 -0
  16. package/dist/cli/interactive/composer-keys.d.ts.map +1 -0
  17. package/dist/cli/interactive/composer-keys.js +19 -0
  18. package/dist/cli/interactive/composer-keys.js.map +1 -0
  19. package/dist/cli/interactive/line-editor.d.ts +2 -0
  20. package/dist/cli/interactive/line-editor.d.ts.map +1 -1
  21. package/dist/cli/interactive/line-editor.js +5 -3
  22. package/dist/cli/interactive/line-editor.js.map +1 -1
  23. package/dist/cli/interactive/session-controller.d.ts +4 -1
  24. package/dist/cli/interactive/session-controller.d.ts.map +1 -1
  25. package/dist/cli/interactive/session-controller.js +2 -1
  26. package/dist/cli/interactive/session-controller.js.map +1 -1
  27. package/dist/cli/interactive/slash-dispatch.d.ts +1 -0
  28. package/dist/cli/interactive/slash-dispatch.d.ts.map +1 -1
  29. package/dist/cli/interactive/slash-dispatch.js +1 -0
  30. package/dist/cli/interactive/slash-dispatch.js.map +1 -1
  31. package/dist/cli/interactive/transcript-upsert.d.ts +12 -0
  32. package/dist/cli/interactive/transcript-upsert.d.ts.map +1 -0
  33. package/dist/cli/interactive/transcript-upsert.js +33 -0
  34. package/dist/cli/interactive/transcript-upsert.js.map +1 -0
  35. package/opentui/package.json +18 -0
  36. package/opentui/scripts/assert-parse.mjs +21 -0
  37. package/opentui/src/App.tsx +806 -0
  38. package/opentui/src/line-parse.ts +54 -0
  39. package/opentui/src/main.tsx +45 -0
  40. package/opentui/src/patze-dist.ts +11 -0
  41. package/opentui/src/transcript-render.ts +218 -0
  42. package/opentui/src/tui-sink.ts +78 -0
  43. package/opentui/tsconfig.json +13 -0
  44. 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")