@patze/code-cli 0.17.2 → 0.20.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 (68) hide show
  1. package/CHANGELOG.md +46 -0
  2. package/VERSION +1 -1
  3. package/dist/backend/preview-payload.d.ts +2 -0
  4. package/dist/backend/preview-payload.d.ts.map +1 -1
  5. package/dist/backend/preview-payload.js +27 -1
  6. package/dist/backend/preview-payload.js.map +1 -1
  7. package/dist/cli/commands/agent.d.ts.map +1 -1
  8. package/dist/cli/commands/agent.js +34 -11
  9. package/dist/cli/commands/agent.js.map +1 -1
  10. package/dist/cli/interactive/agent-events.d.ts +38 -0
  11. package/dist/cli/interactive/agent-events.d.ts.map +1 -0
  12. package/dist/cli/interactive/agent-events.js +65 -0
  13. package/dist/cli/interactive/agent-events.js.map +1 -0
  14. package/dist/cli/interactive/agent-execute-turn.d.ts +2 -0
  15. package/dist/cli/interactive/agent-execute-turn.d.ts.map +1 -1
  16. package/dist/cli/interactive/agent-execute-turn.js +2 -1
  17. package/dist/cli/interactive/agent-execute-turn.js.map +1 -1
  18. package/dist/cli/interactive/agent-stream-format.d.ts +5 -1
  19. package/dist/cli/interactive/agent-stream-format.d.ts.map +1 -1
  20. package/dist/cli/interactive/agent-stream-format.js +30 -1
  21. package/dist/cli/interactive/agent-stream-format.js.map +1 -1
  22. package/dist/cli/interactive/agent-turn-classify.d.ts +7 -3
  23. package/dist/cli/interactive/agent-turn-classify.d.ts.map +1 -1
  24. package/dist/cli/interactive/agent-turn-classify.js +53 -14
  25. package/dist/cli/interactive/agent-turn-classify.js.map +1 -1
  26. package/dist/cli/interactive/agent-turn-context.d.ts +2 -0
  27. package/dist/cli/interactive/agent-turn-context.d.ts.map +1 -1
  28. package/dist/cli/interactive/agent-turn-context.js +18 -4
  29. package/dist/cli/interactive/agent-turn-context.js.map +1 -1
  30. package/dist/cli/interactive/agent-turn-format.d.ts +2 -0
  31. package/dist/cli/interactive/agent-turn-format.d.ts.map +1 -1
  32. package/dist/cli/interactive/agent-turn-format.js +38 -7
  33. package/dist/cli/interactive/agent-turn-format.js.map +1 -1
  34. package/dist/cli/interactive/agent-turn.d.ts +2 -0
  35. package/dist/cli/interactive/agent-turn.d.ts.map +1 -1
  36. package/dist/cli/interactive/agent-turn.js +45 -47
  37. package/dist/cli/interactive/agent-turn.js.map +1 -1
  38. package/dist/cli/interactive/ensure-execute-auth.d.ts +10 -0
  39. package/dist/cli/interactive/ensure-execute-auth.d.ts.map +1 -0
  40. package/dist/cli/interactive/ensure-execute-auth.js +28 -0
  41. package/dist/cli/interactive/ensure-execute-auth.js.map +1 -0
  42. package/dist/cli/interactive/header.js +1 -1
  43. package/dist/cli/interactive/header.js.map +1 -1
  44. package/dist/cli/interactive/plain-agent-render.d.ts +16 -0
  45. package/dist/cli/interactive/plain-agent-render.d.ts.map +1 -0
  46. package/dist/cli/interactive/plain-agent-render.js +67 -0
  47. package/dist/cli/interactive/plain-agent-render.js.map +1 -0
  48. package/dist/cli/interactive/session-controller.d.ts +1 -0
  49. package/dist/cli/interactive/session-controller.d.ts.map +1 -1
  50. package/dist/cli/interactive/session-controller.js +49 -15
  51. package/dist/cli/interactive/session-controller.js.map +1 -1
  52. package/dist/cli/interactive/shell.js +2 -2
  53. package/dist/cli/interactive/shell.js.map +1 -1
  54. package/dist/cli/interactive/tool-arg-summary.d.ts +7 -0
  55. package/dist/cli/interactive/tool-arg-summary.d.ts.map +1 -0
  56. package/dist/cli/interactive/tool-arg-summary.js +86 -0
  57. package/dist/cli/interactive/tool-arg-summary.js.map +1 -0
  58. package/dist/cli/interactive/transcript-line-parse.d.ts +8 -0
  59. package/dist/cli/interactive/transcript-line-parse.d.ts.map +1 -0
  60. package/dist/cli/interactive/transcript-line-parse.js +39 -0
  61. package/dist/cli/interactive/transcript-line-parse.js.map +1 -0
  62. package/dist/cli/interactive/tty-live-feed.d.ts +12 -0
  63. package/dist/cli/interactive/tty-live-feed.d.ts.map +1 -0
  64. package/dist/cli/interactive/tty-live-feed.js +64 -0
  65. package/dist/cli/interactive/tty-live-feed.js.map +1 -0
  66. package/docs/known-limitations.md +1 -1
  67. package/opentui/src/App.tsx +5 -5
  68. package/package.json +1 -1
@@ -0,0 +1,67 @@
1
+ /**
2
+ * Plain (non-TUI) agent output — adapted from Cursor cookbook coding-agent-cli (index.ts).
3
+ * @see https://github.com/cursor/cookbook/tree/main/sdk/coding-agent-cli
4
+ */
5
+ import { compactText, formatDuration, } from "./agent-events.js";
6
+ /** Cookbook-style stderr annotations + stdout assistant stream. */
7
+ export function createPlainAgentHandlers(stdout = process.stdout, stderr = process.stderr) {
8
+ let assistantEndedWithNewline = true;
9
+ const annotate = (message) => {
10
+ if (!assistantEndedWithNewline) {
11
+ stderr.write("\n");
12
+ }
13
+ stderr.write(`${message}\n`);
14
+ assistantEndedWithNewline = true;
15
+ };
16
+ const writeAssistant = (text) => {
17
+ stdout.write(text);
18
+ assistantEndedWithNewline = text.endsWith("\n");
19
+ };
20
+ return {
21
+ annotate,
22
+ writeAssistant,
23
+ assistantEndedWithNewline: () => assistantEndedWithNewline,
24
+ };
25
+ }
26
+ export function renderPlainAgentEvent(event, handlers) {
27
+ const { annotate, writeAssistant } = handlers;
28
+ switch (event.type) {
29
+ case "assistant_delta":
30
+ writeAssistant(event.text);
31
+ break;
32
+ case "thinking": {
33
+ const text = compactText(event.text);
34
+ if (text) {
35
+ annotate(`[thinking] ${text}`);
36
+ }
37
+ break;
38
+ }
39
+ case "tool": {
40
+ const params = event.params ? ` ${event.params}` : "";
41
+ annotate(`[tool] ${event.status} ${event.name}${params}`);
42
+ break;
43
+ }
44
+ case "status":
45
+ if (event.status !== "FINISHED" && event.status !== "COMPLETED") {
46
+ annotate(`[status] ${event.status}${event.message ? ` ${event.message}` : ""}`);
47
+ }
48
+ break;
49
+ case "task":
50
+ if (event.text || event.status) {
51
+ annotate(`[task] ${compactText([event.status, event.text].filter(Boolean).join(" "))}`);
52
+ }
53
+ break;
54
+ case "result": {
55
+ const details = [
56
+ `status=${event.status}`,
57
+ event.durationMs !== undefined ? `duration=${formatDuration(event.durationMs)}` : undefined,
58
+ event.errorCode ? `error=${event.errorCode}` : undefined,
59
+ ].filter(Boolean);
60
+ annotate(`[done] ${details.join(" ")}`);
61
+ break;
62
+ }
63
+ default:
64
+ break;
65
+ }
66
+ }
67
+ //# sourceMappingURL=plain-agent-render.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plain-agent-render.js","sourceRoot":"","sources":["../../../src/cli/interactive/plain-agent-render.ts"],"names":[],"mappings":"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"}
@@ -21,5 +21,6 @@ export type InteractiveController = {
21
21
  persistSession: () => void;
22
22
  processLine: (rawLine: string, output: TextWriter, context?: ProcessLineContext) => Promise<ProcessLineResult>;
23
23
  };
24
+ export declare function prepareInteractiveController(options: InteractiveControllerOptions): Promise<InteractiveController>;
24
25
  export declare function createInteractiveController(options: InteractiveControllerOptions): InteractiveController;
25
26
  //# sourceMappingURL=session-controller.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"session-controller.d.ts","sourceRoot":"","sources":["../../../src/cli/interactive/session-controller.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAA;AAGtD,OAAO,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAA;AAUjD,MAAM,MAAM,4BAA4B,GAAG;IACzC,GAAG,EAAE,MAAM,CAAA;IACX,WAAW,CAAC,EAAE,OAAO,CAAA;IACrB,cAAc,CAAC,EAAE,OAAO,CAAA;IACxB,SAAS,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAA;CACpC,CAAA;AAED,MAAM,MAAM,iBAAiB,GAAG;IAC9B,SAAS,EAAE,OAAO,CAAA;IAClB,QAAQ,EAAE,MAAM,CAAA;IAChB,QAAQ,CAAC,EAAE,OAAO,CAAA;CACnB,CAAA;AAED,MAAM,MAAM,kBAAkB,GAAG;IAC/B,MAAM,CAAC,EAAE,WAAW,CAAA;CACrB,CAAA;AAED,MAAM,MAAM,qBAAqB,GAAG;IAClC,OAAO,EAAE,kBAAkB,CAAA;IAC3B,GAAG,EAAE,MAAM,CAAA;IACX,iBAAiB,EAAE,MAAM,MAAM,EAAE,CAAA;IACjC,cAAc,EAAE,MAAM,IAAI,CAAA;IAC1B,WAAW,EAAE,CACX,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,UAAU,EAClB,OAAO,CAAC,EAAE,kBAAkB,KACzB,OAAO,CAAC,iBAAiB,CAAC,CAAA;CAChC,CAAA;AAED,wBAAgB,2BAA2B,CACzC,OAAO,EAAE,4BAA4B,GACpC,qBAAqB,CAgHvB"}
1
+ {"version":3,"file":"session-controller.d.ts","sourceRoot":"","sources":["../../../src/cli/interactive/session-controller.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAA;AAGtD,OAAO,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAA;AAYjD,MAAM,MAAM,4BAA4B,GAAG;IACzC,GAAG,EAAE,MAAM,CAAA;IACX,WAAW,CAAC,EAAE,OAAO,CAAA;IACrB,cAAc,CAAC,EAAE,OAAO,CAAA;IACxB,SAAS,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAA;CACpC,CAAA;AAED,MAAM,MAAM,iBAAiB,GAAG;IAC9B,SAAS,EAAE,OAAO,CAAA;IAClB,QAAQ,EAAE,MAAM,CAAA;IAChB,QAAQ,CAAC,EAAE,OAAO,CAAA;CACnB,CAAA;AAED,MAAM,MAAM,kBAAkB,GAAG;IAC/B,MAAM,CAAC,EAAE,WAAW,CAAA;CACrB,CAAA;AAED,MAAM,MAAM,qBAAqB,GAAG;IAClC,OAAO,EAAE,kBAAkB,CAAA;IAC3B,GAAG,EAAE,MAAM,CAAA;IACX,iBAAiB,EAAE,MAAM,MAAM,EAAE,CAAA;IACjC,cAAc,EAAE,MAAM,IAAI,CAAA;IAC1B,WAAW,EAAE,CACX,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,UAAU,EAClB,OAAO,CAAC,EAAE,kBAAkB,KACzB,OAAO,CAAC,iBAAiB,CAAC,CAAA;CAChC,CAAA;AA+CD,wBAAsB,4BAA4B,CAChD,OAAO,EAAE,4BAA4B,GACpC,OAAO,CAAC,qBAAqB,CAAC,CAGhC;AAED,wBAAgB,2BAA2B,CACzC,OAAO,EAAE,4BAA4B,GACpC,qBAAqB,CA+GvB"}
@@ -6,6 +6,44 @@ import { dispatchAgentPrompt, dispatchSlashCommand, } from "./slash-dispatch.js"
6
6
  import { formatTranscriptEntry } from "./transcript-format.js";
7
7
  import { runApplyConfirmationLine } from "../commands/apply.js";
8
8
  import { loadPersistedSession, savePersistedSession } from "./session-store.js";
9
+ import { ensureExecuteAuthConfig } from "./ensure-execute-auth.js";
10
+ import { createTtyLiveFeedWriter, shouldUseTtyLiveFeed } from "./tty-live-feed.js";
11
+ function buildStreamSink(output, options, canStreamPartials) {
12
+ if (!canStreamPartials || !shouldUseTtyLiveFeed(options.interactive)) {
13
+ return {
14
+ onLine: (entry) => {
15
+ output.line(entry);
16
+ },
17
+ onPartial: canStreamPartials
18
+ ? (chunk) => {
19
+ options.onPartial?.(chunk);
20
+ }
21
+ : undefined,
22
+ finalize: () => { },
23
+ reset: () => { },
24
+ };
25
+ }
26
+ const feed = createTtyLiveFeedWriter(output);
27
+ return {
28
+ onLine: (entry) => {
29
+ feed.line(entry);
30
+ },
31
+ onPartial: (chunk) => {
32
+ feed.emitPartial(chunk);
33
+ options.onPartial?.(chunk);
34
+ },
35
+ finalize: () => {
36
+ feed.flushPartials();
37
+ },
38
+ reset: () => {
39
+ feed.resetStream();
40
+ },
41
+ };
42
+ }
43
+ export async function prepareInteractiveController(options) {
44
+ await ensureExecuteAuthConfig(options.cwd);
45
+ return createInteractiveController(options);
46
+ }
9
47
  export function createInteractiveController(options) {
10
48
  const cwd = options.cwd;
11
49
  const session = new InteractiveSession(cwd);
@@ -44,19 +82,20 @@ export function createInteractiveController(options) {
44
82
  for (const entry of formatTranscriptEntry("you", line)) {
45
83
  output.line(entry);
46
84
  }
85
+ const stream = buildStreamSink(output, options, canStreamPartials);
86
+ stream.reset();
47
87
  let partialActive = false;
48
88
  const result = await dispatchAgentPrompt(session, line, {
49
89
  signal: context.signal,
50
- onTranscriptLine: (entry) => {
51
- output.line(entry);
52
- },
53
- onTranscriptPartial: canStreamPartials
90
+ onTranscriptLine: stream.onLine,
91
+ onTranscriptPartial: stream.onPartial
54
92
  ? (chunk) => {
55
93
  partialActive = true;
56
- options.onPartial?.(chunk);
94
+ stream.onPartial?.(chunk);
57
95
  }
58
96
  : undefined,
59
97
  });
98
+ stream.finalize();
60
99
  session.append({ input: line, lines: result.lines });
61
100
  if (!result.streamed) {
62
101
  for (const entry of result.lines) {
@@ -70,19 +109,14 @@ export function createInteractiveController(options) {
70
109
  persistSession();
71
110
  return { exitShell: result.exitShell, exitCode: result.exitCode, streamed: result.streamed };
72
111
  }
112
+ const stream = buildStreamSink(output, options, canStreamPartials);
113
+ stream.reset();
73
114
  const result = await dispatchSlashCommand(session, parsed, {
74
115
  permissionsInteractive: options.interactive === true,
75
- onTranscriptLine: canStreamPartials
76
- ? (entry) => {
77
- output.line(entry);
78
- }
79
- : undefined,
80
- onTranscriptPartial: canStreamPartials
81
- ? (chunk) => {
82
- options.onPartial?.(chunk);
83
- }
84
- : undefined,
116
+ onTranscriptLine: stream.onLine,
117
+ onTranscriptPartial: stream.onPartial,
85
118
  });
119
+ stream.finalize();
86
120
  session.append({ input: redactSensitiveInput(line), lines: result.lines });
87
121
  if (!result.streamed) {
88
122
  for (const entry of result.lines) {
@@ -1 +1 @@
1
- {"version":3,"file":"session-controller.js","sourceRoot":"","sources":["../../../src/cli/interactive/session-controller.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,uBAAuB,EAAE,MAAM,aAAa,CAAA;AACrD,OAAO,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAA;AACxD,OAAO,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAA;AACjD,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAA;AAClD,OAAO,EACL,mBAAmB,EACnB,oBAAoB,GACrB,MAAM,qBAAqB,CAAA;AAC5B,OAAO,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAA;AAC9D,OAAO,EAAE,wBAAwB,EAAE,MAAM,sBAAsB,CAAA;AAC/D,OAAO,EAAE,oBAAoB,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAA;AA+B/E,MAAM,UAAU,2BAA2B,CACzC,OAAqC;IAErC,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAA;IACvB,MAAM,OAAO,GAAG,IAAI,kBAAkB,CAAC,GAAG,CAAC,CAAA;IAC3C,MAAM,SAAS,GAAG,oBAAoB,CAAC,GAAG,CAAC,CAAA;IAC3C,IAAI,SAAS,EAAE,CAAC;QACd,OAAO,CAAC,qBAAqB,CAAC;YAC5B,SAAS,EAAE,SAAS,CAAC,SAAS;YAC9B,aAAa,EAAE,SAAS,CAAC,aAAa;YACtC,aAAa,EAAE,SAAS,CAAC,aAAa;YACtC,cAAc,EAAE,SAAS,CAAC,cAAc;YACxC,iBAAiB,EAAE,SAAS,CAAC,iBAAiB;YAC9C,UAAU,EAAE,SAAS,CAAC,UAAU;SACjC,CAAC,CAAA;IACJ,CAAC;IAED,MAAM,cAAc,GAAG,GAAG,EAAE;QAC1B,oBAAoB,CAAC,GAAG,EAAE,OAAO,CAAC,oBAAoB,EAAE,CAAC,CAAA;IAC3D,CAAC,CAAA;IAED,MAAM,iBAAiB,GAAG,OAAO,CAAC,cAAc,KAAK,KAAK,IAAI,OAAO,CAAC,WAAW,KAAK,KAAK,CAAA;IAE3F,MAAM,WAAW,GAAG,KAAK,EACvB,OAAe,EACf,MAAkB,EAClB,UAA8B,EAAE,EACJ,EAAE;QAC9B,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,EAAE,CAAA;QAC3B,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAA;QAC1C,CAAC;QAED,MAAM,MAAM,GAAG,eAAe,CAAC,IAAI,CAAC,CAAA;QACpC,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,IAAI,OAAO,CAAC,2BAA2B,EAAE,EAAE,CAAC;gBAC1C,MAAM,MAAM,GAAG,wBAAwB,CAAC,OAAO,EAAE,IAAI,CAAC,CAAA;gBACtD,OAAO,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC,CAAA;gBACpD,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;oBACjC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;gBACpB,CAAC;gBACD,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;gBACf,cAAc,EAAE,CAAA;gBAChB,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,CAAC,QAAQ,EAAE,CAAA;YACxD,CAAC;YAED,KAAK,MAAM,KAAK,IAAI,qBAAqB,CAAC,KAAK,EAAE,IAAI,CAAC,EAAE,CAAC;gBACvD,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;YACpB,CAAC;YAED,IAAI,aAAa,GAAG,KAAK,CAAA;YACzB,MAAM,MAAM,GAAG,MAAM,mBAAmB,CAAC,OAAO,EAAE,IAAI,EAAE;gBACtD,MAAM,EAAE,OAAO,CAAC,MAAM;gBACtB,gBAAgB,EAAE,CAAC,KAAK,EAAE,EAAE;oBAC1B,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;gBACpB,CAAC;gBACD,mBAAmB,EAAE,iBAAiB;oBACpC,CAAC,CAAC,CAAC,KAAK,EAAE,EAAE;wBACR,aAAa,GAAG,IAAI,CAAA;wBACpB,OAAO,CAAC,SAAS,EAAE,CAAC,KAAK,CAAC,CAAA;oBAC5B,CAAC;oBACH,CAAC,CAAC,SAAS;aACd,CAAC,CAAA;YACF,OAAO,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC,CAAA;YAEpD,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC;gBACrB,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;oBACjC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;gBACpB,CAAC;YACH,CAAC;iBAAM,IAAI,aAAa,EAAE,CAAC;gBACzB,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;YACjB,CAAC;YACD,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;YACf,cAAc,EAAE,CAAA;YAChB,OAAO,EAAE,SAAS,EAAE,MAAM,CAAC,SAAS,EAAE,QAAQ,EAAE,MAAM,CAAC,QAAQ,EAAE,QAAQ,EAAE,MAAM,CAAC,QAAQ,EAAE,CAAA;QAC9F,CAAC;QAED,MAAM,MAAM,GAAG,MAAM,oBAAoB,CAAC,OAAO,EAAE,MAAM,EAAE;YACzD,sBAAsB,EAAE,OAAO,CAAC,WAAW,KAAK,IAAI;YACpD,gBAAgB,EAAE,iBAAiB;gBACjC,CAAC,CAAC,CAAC,KAAK,EAAE,EAAE;oBACR,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;gBACpB,CAAC;gBACH,CAAC,CAAC,SAAS;YACb,mBAAmB,EAAE,iBAAiB;gBACpC,CAAC,CAAC,CAAC,KAAK,EAAE,EAAE;oBACR,OAAO,CAAC,SAAS,EAAE,CAAC,KAAK,CAAC,CAAA;gBAC5B,CAAC;gBACH,CAAC,CAAC,SAAS;SACd,CAAC,CAAA;QACF,OAAO,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,oBAAoB,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC,CAAA;QAC1E,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC;YACrB,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;gBACjC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;YACpB,CAAC;QACH,CAAC;QACD,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;QACf,cAAc,EAAE,CAAA;QAChB,OAAO,EAAE,SAAS,EAAE,MAAM,CAAC,SAAS,EAAE,QAAQ,EAAE,MAAM,CAAC,QAAQ,EAAE,QAAQ,EAAE,MAAM,CAAC,QAAQ,EAAE,CAAA;IAC9F,CAAC,CAAA;IAED,OAAO;QACL,OAAO;QACP,GAAG;QACH,iBAAiB,EAAE,GAAG,EAAE,CACtB,uBAAuB,CACrB,GAAG,EACH,OAAO,CAAC,iBAAiB,EAAE,EAC3B,OAAO,CAAC,gBAAgB,EAAE,EAC1B,OAAO,CAAC,gBAAgB,EAAE,CAC3B;QACH,cAAc;QACd,WAAW;KACZ,CAAA;AACH,CAAC"}
1
+ {"version":3,"file":"session-controller.js","sourceRoot":"","sources":["../../../src/cli/interactive/session-controller.ts"],"names":[],"mappings":"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"}
@@ -2,7 +2,7 @@ import { createInterface } from "node:readline";
2
2
  import { createBufferWriter, createStdoutWriter } from "../ui/text-writer.js";
3
3
  import { INTERACTIVE_PROMPT } from "./header.js";
4
4
  import { SlashLineEditor } from "./line-editor.js";
5
- import { createInteractiveController } from "./session-controller.js";
5
+ import { prepareInteractiveController } from "./session-controller.js";
6
6
  export async function runInteractiveShell(options = {}) {
7
7
  const cwd = options.cwd ?? process.cwd();
8
8
  const buffer = createBufferWriter();
@@ -15,7 +15,7 @@ export async function runInteractiveShell(options = {}) {
15
15
  };
16
16
  const prompt = options.prompt ?? INTERACTIVE_PROMPT;
17
17
  const interactive = !options.input && Boolean(process.stdin.isTTY && process.stdout.isTTY);
18
- const controller = createInteractiveController({
18
+ const controller = await prepareInteractiveController({
19
19
  cwd,
20
20
  interactive,
21
21
  streamPartials: interactive,
@@ -1 +1 @@
1
- {"version":3,"file":"shell.js","sourceRoot":"","sources":["../../../src/cli/interactive/shell.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"shell.js","sourceRoot":"","sources":["../../../src/cli/interactive/shell.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Tool arg summarization — adapted from Cursor cookbook coding-agent-cli (agent.ts).
3
+ * @see https://github.com/cursor/cookbook/tree/main/sdk/coding-agent-cli
4
+ */
5
+ export declare function summarizeToolArgs(toolName: string, args: unknown): string | undefined;
6
+ export declare function summarizeToolArgsFromDetail(toolName: string, detail: string | undefined): string | undefined;
7
+ //# sourceMappingURL=tool-arg-summary.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tool-arg-summary.d.ts","sourceRoot":"","sources":["../../../src/cli/interactive/tool-arg-summary.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAiBrF;AAED,wBAAgB,2BAA2B,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,CAa5G"}
@@ -0,0 +1,86 @@
1
+ /**
2
+ * Tool arg summarization — adapted from Cursor cookbook coding-agent-cli (agent.ts).
3
+ * @see https://github.com/cursor/cookbook/tree/main/sdk/coding-agent-cli
4
+ */
5
+ export function summarizeToolArgs(toolName, args) {
6
+ if (!args || typeof args !== "object") {
7
+ return undefined;
8
+ }
9
+ const record = args;
10
+ const keyGroups = getToolSummaryKeys(toolName);
11
+ const parts = [];
12
+ for (const keys of keyGroups) {
13
+ const part = summarizeFirstValue(record, keys);
14
+ if (part) {
15
+ parts.push(part);
16
+ }
17
+ }
18
+ return parts.length > 0 ? parts.join(" ") : undefined;
19
+ }
20
+ export function summarizeToolArgsFromDetail(toolName, detail) {
21
+ if (!detail?.trim()) {
22
+ return undefined;
23
+ }
24
+ const trimmed = detail.trim();
25
+ if (trimmed.startsWith("{") || trimmed.startsWith("[")) {
26
+ try {
27
+ return summarizeToolArgs(toolName, JSON.parse(trimmed));
28
+ }
29
+ catch {
30
+ return shortenValue(trimmed.replace(/\s+/g, " "));
31
+ }
32
+ }
33
+ return shortenValue(trimmed.replace(/\s+/g, " "));
34
+ }
35
+ function getToolSummaryKeys(toolName) {
36
+ const name = toolName.toLowerCase();
37
+ if (name.includes("read")) {
38
+ return [["path", "filePath", "target_file", "absolutePath"], ["offset"], ["limit"]];
39
+ }
40
+ if (name.includes("glob")) {
41
+ return [["pattern", "glob", "glob_pattern"], ["path", "cwd", "target_directory"]];
42
+ }
43
+ if (name.includes("grep") || name.includes("search")) {
44
+ return [["pattern", "query"], ["path"], ["glob"], ["type"]];
45
+ }
46
+ if (name.includes("shell") || name.includes("terminal") || name.includes("command")) {
47
+ return [["command", "cmd"], ["cwd", "working_directory"]];
48
+ }
49
+ if (name.includes("edit") || name.includes("write") || name.includes("patch")) {
50
+ return [["path", "target_file", "file"], ["instruction"]];
51
+ }
52
+ return [["path", "file", "target_file"], ["pattern", "query", "command"]];
53
+ }
54
+ function summarizeFirstValue(record, keys) {
55
+ for (const key of keys) {
56
+ const value = record[key];
57
+ const formatted = formatArgValue(value);
58
+ if (formatted) {
59
+ return `${key}=${formatted}`;
60
+ }
61
+ }
62
+ return undefined;
63
+ }
64
+ function formatArgValue(value) {
65
+ if (typeof value === "string") {
66
+ return shortenValue(value.replace(/\s+/g, " ").trim());
67
+ }
68
+ if (typeof value === "number" || typeof value === "boolean") {
69
+ return String(value);
70
+ }
71
+ if (Array.isArray(value)) {
72
+ const items = value
73
+ .slice(0, 3)
74
+ .map(formatArgValue)
75
+ .filter((item) => Boolean(item));
76
+ return items.length > 0 ? `[${items.join(",")}]` : undefined;
77
+ }
78
+ return undefined;
79
+ }
80
+ function shortenValue(value, maxLength = 80) {
81
+ if (value.length <= maxLength) {
82
+ return value;
83
+ }
84
+ return `${value.slice(0, maxLength - 3)}...`;
85
+ }
86
+ //# sourceMappingURL=tool-arg-summary.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tool-arg-summary.js","sourceRoot":"","sources":["../../../src/cli/interactive/tool-arg-summary.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ export type ParsedTranscriptLine = {
2
+ kind: "user" | "assistant" | "tool" | "status" | "info";
3
+ label: string;
4
+ text: string;
5
+ continuation: boolean;
6
+ };
7
+ export declare function parseTranscriptLine(raw: string): ParsedTranscriptLine | null;
8
+ //# sourceMappingURL=transcript-line-parse.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transcript-line-parse.d.ts","sourceRoot":"","sources":["../../../src/cli/interactive/transcript-line-parse.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,oBAAoB,GAAG;IACjC,IAAI,EAAE,MAAM,GAAG,WAAW,GAAG,MAAM,GAAG,QAAQ,GAAG,MAAM,CAAA;IACvD,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,EAAE,MAAM,CAAA;IACZ,YAAY,EAAE,OAAO,CAAA;CACtB,CAAA;AAED,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,MAAM,GAAG,oBAAoB,GAAG,IAAI,CAyC5E"}
@@ -0,0 +1,39 @@
1
+ const LABEL_WIDTH = 7;
2
+ export function parseTranscriptLine(raw) {
3
+ const line = raw.replace(/\x1b\[[0-9;]*m/g, "");
4
+ if (!line.trim()) {
5
+ return null;
6
+ }
7
+ if (line.startsWith(" ".repeat(LABEL_WIDTH))) {
8
+ return {
9
+ kind: "assistant",
10
+ label: "",
11
+ text: line.slice(LABEL_WIDTH),
12
+ continuation: true,
13
+ };
14
+ }
15
+ const match = line.match(/^(you|agent|tool|run)\s*(.*)$/i);
16
+ if (!match) {
17
+ return {
18
+ kind: "info",
19
+ label: "info",
20
+ text: line,
21
+ continuation: false,
22
+ };
23
+ }
24
+ const role = match[1].toLowerCase();
25
+ const kind = role === "you"
26
+ ? "user"
27
+ : role === "tool"
28
+ ? "tool"
29
+ : role === "run"
30
+ ? "status"
31
+ : "assistant";
32
+ return {
33
+ kind,
34
+ label: role,
35
+ text: match[2] ?? "",
36
+ continuation: false,
37
+ };
38
+ }
39
+ //# sourceMappingURL=transcript-line-parse.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transcript-line-parse.js","sourceRoot":"","sources":["../../../src/cli/interactive/transcript-line-parse.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,GAAG,CAAC,CAAA;AASrB,MAAM,UAAU,mBAAmB,CAAC,GAAW;IAC7C,MAAM,IAAI,GAAG,GAAG,CAAC,OAAO,CAAC,iBAAiB,EAAE,EAAE,CAAC,CAAA;IAC/C,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC;QACjB,OAAO,IAAI,CAAA;IACb,CAAC;IAED,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC;QAC7C,OAAO;YACL,IAAI,EAAE,WAAW;YACjB,KAAK,EAAE,EAAE;YACT,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC;YAC7B,YAAY,EAAE,IAAI;SACnB,CAAA;IACH,CAAC;IAED,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,gCAAgC,CAAC,CAAA;IAC1D,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,OAAO;YACL,IAAI,EAAE,MAAM;YACZ,KAAK,EAAE,MAAM;YACb,IAAI,EAAE,IAAI;YACV,YAAY,EAAE,KAAK;SACpB,CAAA;IACH,CAAC;IAED,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAA;IACnC,MAAM,IAAI,GACR,IAAI,KAAK,KAAK;QACZ,CAAC,CAAC,MAAM;QACR,CAAC,CAAC,IAAI,KAAK,MAAM;YACf,CAAC,CAAC,MAAM;YACR,CAAC,CAAC,IAAI,KAAK,KAAK;gBACd,CAAC,CAAC,QAAQ;gBACV,CAAC,CAAC,WAAW,CAAA;IAErB,OAAO;QACL,IAAI;QACJ,KAAK,EAAE,IAAI;QACX,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE;QACpB,YAAY,EAAE,KAAK;KACpB,CAAA;AACH,CAAC"}
@@ -0,0 +1,12 @@
1
+ import type { TextWriter } from "../ui/text-writer.js";
2
+ export type TtyLiveFeedWriter = TextWriter & {
3
+ emitPartial: (chunk: string) => void;
4
+ flushPartials: () => void;
5
+ resetStream: () => void;
6
+ };
7
+ /**
8
+ * Cookbook-style live transcript on Node TTY: tool/run upserts + agent text deltas.
9
+ */
10
+ export declare function createTtyLiveFeedWriter(base: TextWriter, stdout?: NodeJS.WriteStream): TtyLiveFeedWriter;
11
+ export declare function shouldUseTtyLiveFeed(interactive: boolean | undefined): boolean;
12
+ //# sourceMappingURL=tty-live-feed.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tty-live-feed.d.ts","sourceRoot":"","sources":["../../../src/cli/interactive/tty-live-feed.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAA;AAMtD,MAAM,MAAM,iBAAiB,GAAG,UAAU,GAAG;IAC3C,WAAW,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAA;IACpC,aAAa,EAAE,MAAM,IAAI,CAAA;IACzB,WAAW,EAAE,MAAM,IAAI,CAAA;CACxB,CAAA;AAED;;GAEG;AACH,wBAAgB,uBAAuB,CACrC,IAAI,EAAE,UAAU,EAChB,MAAM,GAAE,MAAM,CAAC,WAA4B,GAC1C,iBAAiB,CA8DnB;AAED,wBAAgB,oBAAoB,CAAC,WAAW,EAAE,OAAO,GAAG,SAAS,GAAG,OAAO,CAE9E"}
@@ -0,0 +1,64 @@
1
+ import { deriveTranscriptUpsertKey } from "./transcript-upsert.js";
2
+ import { parseTranscriptLine } from "./transcript-line-parse.js";
3
+ const LABEL_WIDTH = 7;
4
+ /**
5
+ * Cookbook-style live transcript on Node TTY: tool/run upserts + agent text deltas.
6
+ */
7
+ export function createTtyLiveFeedWriter(base, stdout = process.stdout) {
8
+ const upsertRows = new Map();
9
+ let agentStreaming = false;
10
+ const flushPartials = () => {
11
+ if (agentStreaming) {
12
+ stdout.write("\n");
13
+ agentStreaming = false;
14
+ }
15
+ };
16
+ const resetStream = () => {
17
+ flushPartials();
18
+ upsertRows.clear();
19
+ };
20
+ const emitPartial = (chunk) => {
21
+ if (!stdout.isTTY || !chunk) {
22
+ return;
23
+ }
24
+ if (!agentStreaming) {
25
+ stdout.write(`${"agent".padEnd(LABEL_WIDTH)}`);
26
+ agentStreaming = true;
27
+ }
28
+ stdout.write(chunk);
29
+ };
30
+ return {
31
+ line(text = "") {
32
+ const parsed = parseTranscriptLine(text);
33
+ if (!parsed) {
34
+ flushPartials();
35
+ base.line(text);
36
+ return;
37
+ }
38
+ if (parsed.continuation) {
39
+ flushPartials();
40
+ base.line(text);
41
+ return;
42
+ }
43
+ const upsertKey = deriveTranscriptUpsertKey(parsed.kind, parsed.label, parsed.text);
44
+ flushPartials();
45
+ if (upsertKey && stdout.isTTY && upsertRows.has(upsertKey)) {
46
+ const rows = upsertRows.get(upsertKey) ?? 1;
47
+ for (let i = 0; i < rows; i += 1) {
48
+ stdout.write("\x1b[1A\x1b[2K");
49
+ }
50
+ }
51
+ base.line(text);
52
+ if (upsertKey) {
53
+ upsertRows.set(upsertKey, 1);
54
+ }
55
+ },
56
+ emitPartial,
57
+ flushPartials,
58
+ resetStream,
59
+ };
60
+ }
61
+ export function shouldUseTtyLiveFeed(interactive) {
62
+ return interactive === true && Boolean(process.stdout.isTTY) && !process.env.NO_COLOR;
63
+ }
64
+ //# sourceMappingURL=tty-live-feed.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tty-live-feed.js","sourceRoot":"","sources":["../../../src/cli/interactive/tty-live-feed.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,yBAAyB,EAAE,MAAM,wBAAwB,CAAA;AAClE,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAA;AAEhE,MAAM,WAAW,GAAG,CAAC,CAAA;AAQrB;;GAEG;AACH,MAAM,UAAU,uBAAuB,CACrC,IAAgB,EAChB,SAA6B,OAAO,CAAC,MAAM;IAE3C,MAAM,UAAU,GAAG,IAAI,GAAG,EAAkB,CAAA;IAC5C,IAAI,cAAc,GAAG,KAAK,CAAA;IAE1B,MAAM,aAAa,GAAG,GAAS,EAAE;QAC/B,IAAI,cAAc,EAAE,CAAC;YACnB,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;YAClB,cAAc,GAAG,KAAK,CAAA;QACxB,CAAC;IACH,CAAC,CAAA;IAED,MAAM,WAAW,GAAG,GAAS,EAAE;QAC7B,aAAa,EAAE,CAAA;QACf,UAAU,CAAC,KAAK,EAAE,CAAA;IACpB,CAAC,CAAA;IAED,MAAM,WAAW,GAAG,CAAC,KAAa,EAAQ,EAAE;QAC1C,IAAI,CAAC,MAAM,CAAC,KAAK,IAAI,CAAC,KAAK,EAAE,CAAC;YAC5B,OAAM;QACR,CAAC;QACD,IAAI,CAAC,cAAc,EAAE,CAAC;YACpB,MAAM,CAAC,KAAK,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,WAAW,CAAC,EAAE,CAAC,CAAA;YAC9C,cAAc,GAAG,IAAI,CAAA;QACvB,CAAC;QACD,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAA;IACrB,CAAC,CAAA;IAED,OAAO;QACL,IAAI,CAAC,IAAI,GAAG,EAAE;YACZ,MAAM,MAAM,GAAG,mBAAmB,CAAC,IAAI,CAAC,CAAA;YACxC,IAAI,CAAC,MAAM,EAAE,CAAC;gBACZ,aAAa,EAAE,CAAA;gBACf,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;gBACf,OAAM;YACR,CAAC;YAED,IAAI,MAAM,CAAC,YAAY,EAAE,CAAC;gBACxB,aAAa,EAAE,CAAA;gBACf,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;gBACf,OAAM;YACR,CAAC;YAED,MAAM,SAAS,GAAG,yBAAyB,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,IAAI,CAAC,CAAA;YACnF,aAAa,EAAE,CAAA;YAEf,IAAI,SAAS,IAAI,MAAM,CAAC,KAAK,IAAI,UAAU,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC;gBAC3D,MAAM,IAAI,GAAG,UAAU,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,CAAA;gBAC3C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;oBACjC,MAAM,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAA;gBAChC,CAAC;YACH,CAAC;YAED,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;YAEf,IAAI,SAAS,EAAE,CAAC;gBACd,UAAU,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC,CAAC,CAAA;YAC9B,CAAC;QACH,CAAC;QACD,WAAW;QACX,aAAa;QACb,WAAW;KACZ,CAAA;AACH,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,WAAgC;IACnE,OAAO,WAAW,KAAK,IAAI,IAAI,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAA;AACvF,CAAC"}
@@ -39,7 +39,7 @@ These are **intentional** for the current slice. Do not treat them as bugs unles
39
39
  | One-shot argv / stdin | **Implemented (0.13+)** — `patze "task"`, `patze agent`, piped stdin |
40
40
  | `/model` picker | **Implemented (0.13+)** — session override + `PATZE_CODE_MODEL` / config |
41
41
  | `/run` replay | **Implemented (0.13+)** — SSE replay or stored trace fallback |
42
- | Live text deltas in-place | **Partial (0.12+)** — assistant stream_delta on TTY; tool/thinking upsert (0.13+) |
42
+ | Live text deltas in-place | **Implemented (0.18+)** — Node TTY live feed + OpenTUI upsert stream |
43
43
 
44
44
  ## Session and persistence
45
45
 
@@ -227,17 +227,17 @@ export function App({ cwd: cwdArg }: { cwd?: string }) {
227
227
  slashMenuModule = await importPatzeDist("cli/interactive/slash-menu.js")
228
228
  setSlashMenuReady(true)
229
229
 
230
- const mod = await importPatzeDist<typeof import("../../dist/cli/interactive/session-controller.js")>(
231
- "cli/interactive/session-controller.js"
232
- )
233
- const controller = mod.createInteractiveController({
230
+ const sessionMod = await importPatzeDist<
231
+ typeof import("../../dist/cli/interactive/session-controller.js")
232
+ >("cli/interactive/session-controller.js")
233
+ const controller = (await sessionMod.prepareInteractiveController({
234
234
  cwd,
235
235
  interactive: true,
236
236
  streamPartials: true,
237
237
  onPartial: (chunk: string) => {
238
238
  upsertStreaming(chunk)
239
239
  },
240
- }) as InteractiveController
240
+ })) as InteractiveController
241
241
 
242
242
  if (cancelled) {
243
243
  return
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@patze/code-cli",
3
- "version": "0.17.2",
3
+ "version": "0.20.0",
4
4
  "description": "Patze Code — local terminal coding agent client for PatzeAgents",
5
5
  "license": "UNLICENSED",
6
6
  "type": "module",