@patze/code-cli 0.31.0 → 0.41.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 (126) hide show
  1. package/CHANGELOG.md +97 -0
  2. package/VERSION +1 -1
  3. package/dist/cli/commands/agent.d.ts.map +1 -1
  4. package/dist/cli/commands/agent.js +11 -11
  5. package/dist/cli/commands/agent.js.map +1 -1
  6. package/dist/cli/commands/exec.d.ts.map +1 -1
  7. package/dist/cli/commands/exec.js +8 -5
  8. package/dist/cli/commands/exec.js.map +1 -1
  9. package/dist/cli/commands/trust-loop-snapshot.d.ts.map +1 -1
  10. package/dist/cli/commands/trust-loop-snapshot.js +19 -0
  11. package/dist/cli/commands/trust-loop-snapshot.js.map +1 -1
  12. package/dist/cli/help.d.ts.map +1 -1
  13. package/dist/cli/help.js +9 -8
  14. package/dist/cli/help.js.map +1 -1
  15. package/dist/cli/interactive/agent-event-feed.d.ts +6 -3
  16. package/dist/cli/interactive/agent-event-feed.d.ts.map +1 -1
  17. package/dist/cli/interactive/agent-event-feed.js +110 -63
  18. package/dist/cli/interactive/agent-event-feed.js.map +1 -1
  19. package/dist/cli/interactive/agent-execute-turn.d.ts +3 -0
  20. package/dist/cli/interactive/agent-execute-turn.d.ts.map +1 -1
  21. package/dist/cli/interactive/agent-execute-turn.js +8 -0
  22. package/dist/cli/interactive/agent-execute-turn.js.map +1 -1
  23. package/dist/cli/interactive/agent-stream-format.js +4 -4
  24. package/dist/cli/interactive/agent-stream-format.js.map +1 -1
  25. package/dist/cli/interactive/agent-turn-classify.d.ts.map +1 -1
  26. package/dist/cli/interactive/agent-turn-classify.js +1 -3
  27. package/dist/cli/interactive/agent-turn-classify.js.map +1 -1
  28. package/dist/cli/interactive/agent-turn-context.d.ts.map +1 -1
  29. package/dist/cli/interactive/agent-turn-context.js +7 -1
  30. package/dist/cli/interactive/agent-turn-context.js.map +1 -1
  31. package/dist/cli/interactive/agent-turn-format.js +2 -2
  32. package/dist/cli/interactive/agent-turn-format.js.map +1 -1
  33. package/dist/cli/interactive/agent-turn.d.ts +1 -0
  34. package/dist/cli/interactive/agent-turn.d.ts.map +1 -1
  35. package/dist/cli/interactive/agent-turn.js +40 -28
  36. package/dist/cli/interactive/agent-turn.js.map +1 -1
  37. package/dist/cli/interactive/auth-gate.d.ts +6 -0
  38. package/dist/cli/interactive/auth-gate.d.ts.map +1 -0
  39. package/dist/cli/interactive/auth-gate.js +29 -0
  40. package/dist/cli/interactive/auth-gate.js.map +1 -0
  41. package/dist/cli/interactive/codex-diff-feed.d.ts +14 -0
  42. package/dist/cli/interactive/codex-diff-feed.d.ts.map +1 -0
  43. package/dist/cli/interactive/codex-diff-feed.js +76 -0
  44. package/dist/cli/interactive/codex-diff-feed.js.map +1 -0
  45. package/dist/cli/interactive/codex-feed-demo.d.ts +9 -0
  46. package/dist/cli/interactive/codex-feed-demo.d.ts.map +1 -0
  47. package/dist/cli/interactive/codex-feed-demo.js +72 -0
  48. package/dist/cli/interactive/codex-feed-demo.js.map +1 -0
  49. package/dist/cli/interactive/codex-feed-format.d.ts +35 -0
  50. package/dist/cli/interactive/codex-feed-format.d.ts.map +1 -0
  51. package/dist/cli/interactive/codex-feed-format.js +142 -0
  52. package/dist/cli/interactive/codex-feed-format.js.map +1 -0
  53. package/dist/cli/interactive/codex-feed-writer.d.ts +18 -0
  54. package/dist/cli/interactive/codex-feed-writer.d.ts.map +1 -0
  55. package/dist/cli/interactive/codex-feed-writer.js +144 -0
  56. package/dist/cli/interactive/codex-feed-writer.js.map +1 -0
  57. package/dist/cli/interactive/codex-preview-feed.d.ts +13 -0
  58. package/dist/cli/interactive/codex-preview-feed.d.ts.map +1 -0
  59. package/dist/cli/interactive/codex-preview-feed.js +130 -0
  60. package/dist/cli/interactive/codex-preview-feed.js.map +1 -0
  61. package/dist/cli/interactive/cookbook-feed-writer.d.ts +2 -12
  62. package/dist/cli/interactive/cookbook-feed-writer.d.ts.map +1 -1
  63. package/dist/cli/interactive/cookbook-feed-writer.js +2 -86
  64. package/dist/cli/interactive/cookbook-feed-writer.js.map +1 -1
  65. package/dist/cli/interactive/header.d.ts.map +1 -1
  66. package/dist/cli/interactive/header.js +1 -7
  67. package/dist/cli/interactive/header.js.map +1 -1
  68. package/dist/cli/interactive/line-editor.d.ts +2 -0
  69. package/dist/cli/interactive/line-editor.d.ts.map +1 -1
  70. package/dist/cli/interactive/line-editor.js +7 -5
  71. package/dist/cli/interactive/line-editor.js.map +1 -1
  72. package/dist/cli/interactive/plain-agent-render.d.ts +5 -4
  73. package/dist/cli/interactive/plain-agent-render.d.ts.map +1 -1
  74. package/dist/cli/interactive/plain-agent-render.js +12 -44
  75. package/dist/cli/interactive/plain-agent-render.js.map +1 -1
  76. package/dist/cli/interactive/plain-codex-feed.d.ts +11 -0
  77. package/dist/cli/interactive/plain-codex-feed.d.ts.map +1 -0
  78. package/dist/cli/interactive/plain-codex-feed.js +37 -0
  79. package/dist/cli/interactive/plain-codex-feed.js.map +1 -0
  80. package/dist/cli/interactive/reset-agent.d.ts +8 -0
  81. package/dist/cli/interactive/reset-agent.d.ts.map +1 -0
  82. package/dist/cli/interactive/reset-agent.js +23 -0
  83. package/dist/cli/interactive/reset-agent.js.map +1 -0
  84. package/dist/cli/interactive/session-controller.d.ts +1 -0
  85. package/dist/cli/interactive/session-controller.d.ts.map +1 -1
  86. package/dist/cli/interactive/session-controller.js +21 -10
  87. package/dist/cli/interactive/session-controller.js.map +1 -1
  88. package/dist/cli/interactive/session-hints.d.ts +4 -0
  89. package/dist/cli/interactive/session-hints.d.ts.map +1 -0
  90. package/dist/cli/interactive/session-hints.js +28 -0
  91. package/dist/cli/interactive/session-hints.js.map +1 -0
  92. package/dist/cli/interactive/session.d.ts +3 -1
  93. package/dist/cli/interactive/session.d.ts.map +1 -1
  94. package/dist/cli/interactive/session.js +8 -2
  95. package/dist/cli/interactive/session.js.map +1 -1
  96. package/dist/cli/interactive/shell.d.ts.map +1 -1
  97. package/dist/cli/interactive/shell.js +59 -20
  98. package/dist/cli/interactive/shell.js.map +1 -1
  99. package/dist/cli/interactive/slash-dispatch.d.ts +6 -0
  100. package/dist/cli/interactive/slash-dispatch.d.ts.map +1 -1
  101. package/dist/cli/interactive/slash-dispatch.js +29 -5
  102. package/dist/cli/interactive/slash-dispatch.js.map +1 -1
  103. package/dist/cli/interactive/slash-menu-core.d.ts +10 -0
  104. package/dist/cli/interactive/slash-menu-core.d.ts.map +1 -0
  105. package/dist/cli/interactive/slash-menu-core.js +34 -0
  106. package/dist/cli/interactive/slash-menu-core.js.map +1 -0
  107. package/dist/cli/interactive/slash-menu.d.ts +3 -0
  108. package/dist/cli/interactive/slash-menu.d.ts.map +1 -1
  109. package/dist/cli/interactive/slash-menu.js +16 -4
  110. package/dist/cli/interactive/slash-menu.js.map +1 -1
  111. package/dist/cli/interactive/slash-registry.d.ts.map +1 -1
  112. package/dist/cli/interactive/slash-registry.js +4 -1
  113. package/dist/cli/interactive/slash-registry.js.map +1 -1
  114. package/dist/cli/interactive/trace-glyphs.d.ts.map +1 -1
  115. package/dist/cli/interactive/trace-glyphs.js +2 -11
  116. package/dist/cli/interactive/trace-glyphs.js.map +1 -1
  117. package/dist/cli/interactive/transcript-upsert.d.ts.map +1 -1
  118. package/dist/cli/interactive/transcript-upsert.js +6 -6
  119. package/dist/cli/interactive/transcript-upsert.js.map +1 -1
  120. package/dist/cli/one-shot-args.d.ts +1 -0
  121. package/dist/cli/one-shot-args.d.ts.map +1 -1
  122. package/dist/cli/one-shot-args.js +3 -2
  123. package/dist/cli/one-shot-args.js.map +1 -1
  124. package/opentui/src/App.tsx +67 -6
  125. package/opentui/src/transcript-render.ts +144 -2
  126. package/package.json +1 -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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"}
@@ -4,6 +4,7 @@ export type OneShotAgentOptions = {
4
4
  cwd: string;
5
5
  model: string | null;
6
6
  dryRun: boolean;
7
+ force: boolean;
7
8
  };
8
9
  export declare function parseOneShotAgentOptions(argv: ParsedArgv): OneShotAgentOptions | null;
9
10
  //# sourceMappingURL=one-shot-args.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"one-shot-args.d.ts","sourceRoot":"","sources":["../../src/cli/one-shot-args.ts"],"names":[],"mappings":"AAEA,OAAO,EAA2B,KAAK,UAAU,EAAE,MAAM,WAAW,CAAA;AAEpE,MAAM,MAAM,mBAAmB,GAAG;IAChC,MAAM,EAAE,MAAM,CAAA;IACd,GAAG,EAAE,MAAM,CAAA;IACX,KAAK,EAAE,MAAM,GAAG,IAAI,CAAA;IACpB,MAAM,EAAE,OAAO,CAAA;CAChB,CAAA;AAcD,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,UAAU,GAAG,mBAAmB,GAAG,IAAI,CA0BrF"}
1
+ {"version":3,"file":"one-shot-args.d.ts","sourceRoot":"","sources":["../../src/cli/one-shot-args.ts"],"names":[],"mappings":"AAEA,OAAO,EAA2B,KAAK,UAAU,EAAE,MAAM,WAAW,CAAA;AAEpE,MAAM,MAAM,mBAAmB,GAAG;IAChC,MAAM,EAAE,MAAM,CAAA;IACd,GAAG,EAAE,MAAM,CAAA;IACX,KAAK,EAAE,MAAM,GAAG,IAAI,CAAA;IACpB,MAAM,EAAE,OAAO,CAAA;IACf,KAAK,EAAE,OAAO,CAAA;CACf,CAAA;AAcD,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,UAAU,GAAG,mBAAmB,GAAG,IAAI,CA2BrF"}
@@ -13,6 +13,7 @@ const KNOWN_ROOT_COMMANDS = new Set([
13
13
  ]);
14
14
  export function parseOneShotAgentOptions(argv) {
15
15
  const dryRun = flagBoolean(argv.flags, "dry-run");
16
+ const force = flagBoolean(argv.flags, "force");
16
17
  const cwdFlag = flagString(argv.flags, "cwd") ?? flagString(argv.flags, "C");
17
18
  const cwd = resolve(cwdFlag ?? process.cwd());
18
19
  const model = flagString(argv.flags, "model") ??
@@ -21,7 +22,7 @@ export function parseOneShotAgentOptions(argv) {
21
22
  const [root, sub] = argv.command;
22
23
  if (root === "agent") {
23
24
  const prompt = [sub, ...argv.positional].filter(Boolean).join(" ").trim();
24
- return prompt ? { prompt, cwd, model, dryRun } : null;
25
+ return prompt ? { prompt, cwd, model, dryRun, force } : null;
25
26
  }
26
27
  if (!root || KNOWN_ROOT_COMMANDS.has(root)) {
27
28
  return null;
@@ -30,6 +31,6 @@ export function parseOneShotAgentOptions(argv) {
30
31
  if (!prompt) {
31
32
  return null;
32
33
  }
33
- return { prompt, cwd, model, dryRun };
34
+ return { prompt, cwd, model, dryRun, force };
34
35
  }
35
36
  //# sourceMappingURL=one-shot-args.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"one-shot-args.js","sourceRoot":"","sources":["../../src/cli/one-shot-args.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAEnC,OAAO,EAAE,WAAW,EAAE,UAAU,EAAmB,MAAM,WAAW,CAAA;AASpE,MAAM,mBAAmB,GAAG,IAAI,GAAG,CAAC;IAClC,MAAM;IACN,QAAQ;IACR,QAAQ;IACR,OAAO;IACP,MAAM;IACN,MAAM;IACN,MAAM;IACN,QAAQ;IACR,OAAO;CACR,CAAC,CAAA;AAEF,MAAM,UAAU,wBAAwB,CAAC,IAAgB;IACvD,MAAM,MAAM,GAAG,WAAW,CAAC,IAAI,CAAC,KAAK,EAAE,SAAS,CAAC,CAAA;IACjD,MAAM,OAAO,GAAG,UAAU,CAAC,IAAI,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,UAAU,CAAC,IAAI,CAAC,KAAK,EAAE,GAAG,CAAC,CAAA;IAC5E,MAAM,GAAG,GAAG,OAAO,CAAC,OAAO,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC,CAAA;IAC7C,MAAM,KAAK,GACT,UAAU,CAAC,IAAI,CAAC,KAAK,EAAE,OAAO,CAAC;QAC/B,UAAU,CAAC,IAAI,CAAC,KAAK,EAAE,GAAG,CAAC;QAC3B,IAAI,CAAA;IAEN,MAAM,CAAC,IAAI,EAAE,GAAG,CAAC,GAAG,IAAI,CAAC,OAAO,CAAA;IAEhC,IAAI,IAAI,KAAK,OAAO,EAAE,CAAC;QACrB,MAAM,MAAM,GAAG,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAA;QACzE,OAAO,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,IAAI,CAAA;IACvD,CAAC;IAED,IAAI,CAAC,IAAI,IAAI,mBAAmB,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;QAC3C,OAAO,IAAI,CAAA;IACb,CAAC;IAED,MAAM,MAAM,GAAG,CAAC,IAAI,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAA;IAC/E,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,OAAO,IAAI,CAAA;IACb,CAAC;IAED,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,CAAA;AACvC,CAAC"}
1
+ {"version":3,"file":"one-shot-args.js","sourceRoot":"","sources":["../../src/cli/one-shot-args.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAEnC,OAAO,EAAE,WAAW,EAAE,UAAU,EAAmB,MAAM,WAAW,CAAA;AAUpE,MAAM,mBAAmB,GAAG,IAAI,GAAG,CAAC;IAClC,MAAM;IACN,QAAQ;IACR,QAAQ;IACR,OAAO;IACP,MAAM;IACN,MAAM;IACN,MAAM;IACN,QAAQ;IACR,OAAO;CACR,CAAC,CAAA;AAEF,MAAM,UAAU,wBAAwB,CAAC,IAAgB;IACvD,MAAM,MAAM,GAAG,WAAW,CAAC,IAAI,CAAC,KAAK,EAAE,SAAS,CAAC,CAAA;IACjD,MAAM,KAAK,GAAG,WAAW,CAAC,IAAI,CAAC,KAAK,EAAE,OAAO,CAAC,CAAA;IAC9C,MAAM,OAAO,GAAG,UAAU,CAAC,IAAI,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,UAAU,CAAC,IAAI,CAAC,KAAK,EAAE,GAAG,CAAC,CAAA;IAC5E,MAAM,GAAG,GAAG,OAAO,CAAC,OAAO,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC,CAAA;IAC7C,MAAM,KAAK,GACT,UAAU,CAAC,IAAI,CAAC,KAAK,EAAE,OAAO,CAAC;QAC/B,UAAU,CAAC,IAAI,CAAC,KAAK,EAAE,GAAG,CAAC;QAC3B,IAAI,CAAA;IAEN,MAAM,CAAC,IAAI,EAAE,GAAG,CAAC,GAAG,IAAI,CAAC,OAAO,CAAA;IAEhC,IAAI,IAAI,KAAK,OAAO,EAAE,CAAC;QACrB,MAAM,MAAM,GAAG,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAA;QACzE,OAAO,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,IAAI,CAAA;IAC9D,CAAC;IAED,IAAI,CAAC,IAAI,IAAI,mBAAmB,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;QAC3C,OAAO,IAAI,CAAA;IACb,CAAC;IAED,MAAM,MAAM,GAAG,CAAC,IAAI,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAA;IAC/E,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,OAAO,IAAI,CAAA;IACb,CAAC;IAED,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,CAAA;AAC9C,CAAC"}
@@ -76,7 +76,7 @@ type InteractiveController = {
76
76
  useActivitySpinner?: boolean
77
77
  onAgentEvent?: (event: AgentEvent) => void
78
78
  }
79
- ) => Promise<{ exitShell: boolean; exitCode: number; streamed?: boolean }>
79
+ ) => Promise<{ exitShell: boolean; exitCode: number; streamed?: boolean; clearVisibleTranscript?: boolean }>
80
80
  }
81
81
 
82
82
  function parseCwdArg(): string {
@@ -117,6 +117,8 @@ export function App({ cwd: cwdArg }: { cwd?: string }) {
117
117
  const [supportedModels, setSupportedModels] = useState<string[]>([])
118
118
  const [slashMenuReady, setSlashMenuReady] = useState(false)
119
119
  const [startupHeader, setStartupHeader] = useState<string[]>([])
120
+ const [composerPlaceholder, setComposerPlaceholder] = useState("Describe a task… · / for commands")
121
+ const [emptySessionHints, setEmptySessionHints] = useState<string[]>([])
120
122
 
121
123
  const followTranscript = useCallback(() => {
122
124
  if (scrollPinnedRef.current) {
@@ -259,6 +261,16 @@ export function App({ cwd: cwdArg }: { cwd?: string }) {
259
261
  } else {
260
262
  setExecutionTarget(null)
261
263
  }
264
+
265
+ const authGate = await importPatzeDist<
266
+ typeof import("../../dist/cli/interactive/auth-gate.js")
267
+ >("cli/interactive/auth-gate.js")
268
+ setComposerPlaceholder(authGate.resolveComposerPlaceholder(controller.cwd))
269
+
270
+ const sessionHints = await importPatzeDist<
271
+ typeof import("../../dist/cli/interactive/session-hints.js")
272
+ >("cli/interactive/session-hints.js")
273
+ setEmptySessionHints(sessionHints.buildEmptySessionHints(controller.cwd))
262
274
  }, [])
263
275
 
264
276
  useEffect(() => {
@@ -367,7 +379,7 @@ export function App({ cwd: cwdArg }: { cwd?: string }) {
367
379
  const result = await controller.processLine(value, sink, {
368
380
  signal: abort.signal,
369
381
  onActivity: setActivityLabel,
370
- useActivitySpinner: false,
382
+ useActivitySpinner: true,
371
383
  onAgentEvent: (event) => {
372
384
  setActivityLabel(null)
373
385
  setTranscript((items) =>
@@ -379,6 +391,10 @@ export function App({ cwd: cwdArg }: { cwd?: string }) {
379
391
  if (result.streamed) {
380
392
  clearStreaming()
381
393
  }
394
+ if (result.clearVisibleTranscript) {
395
+ setTranscript([])
396
+ markScrollPinned()
397
+ }
382
398
  await refreshStatusMeta()
383
399
  if (result.exitShell) {
384
400
  exitApp()
@@ -443,8 +459,7 @@ export function App({ cwd: cwdArg }: { cwd?: string }) {
443
459
 
444
460
  switch (name?.toLowerCase()) {
445
461
  case "help":
446
- setInput("/")
447
- setMode("command")
462
+ await submitToController("/help")
448
463
  return
449
464
  case "model":
450
465
  if (!args.trim()) {
@@ -569,6 +584,26 @@ export function App({ cwd: cwdArg }: { cwd?: string }) {
569
584
  }))
570
585
  }, [currentModel, modelSearch, supportedModels])
571
586
 
587
+ const toggleFeedExpand = useCallback((target: "think" | "diff") => {
588
+ setTranscript((items) => {
589
+ for (let index = items.length - 1; index >= 0; index -= 1) {
590
+ const entry = items[index]
591
+ const matchesThink = target === "think" && entry.label === "think" && entry.detailText
592
+ const matchesDiff =
593
+ target === "diff" && entry.kind === "meta" && entry.label === "diff" && entry.detailText
594
+ if (matchesThink || matchesDiff) {
595
+ return items.map((candidate, candidateIndex) =>
596
+ candidateIndex === index
597
+ ? { ...candidate, expanded: !candidate.expanded }
598
+ : candidate
599
+ )
600
+ }
601
+ }
602
+ return items
603
+ })
604
+ followTranscript()
605
+ }, [followTranscript])
606
+
572
607
  useKeyboard((key: KeyEvent) => {
573
608
  const character = getInputCharacter(key)
574
609
 
@@ -611,6 +646,16 @@ export function App({ cwd: cwdArg }: { cwd?: string }) {
611
646
  if (mode === "input") {
612
647
  const pageSize = Math.max(1, transcriptViewportRows - 1)
613
648
 
649
+ if (key.ctrl && key.name === "t") {
650
+ toggleFeedExpand("think")
651
+ return
652
+ }
653
+
654
+ if (key.ctrl && key.name === "d") {
655
+ toggleFeedExpand("diff")
656
+ return
657
+ }
658
+
614
659
  if (key.shift && (key.name === "return" || key.name === "enter")) {
615
660
  setInput((value) => `${value}\n`)
616
661
  return
@@ -688,6 +733,15 @@ export function App({ cwd: cwdArg }: { cwd?: string }) {
688
733
  createElement(
689
734
  "box",
690
735
  { flexDirection: "column", height: transcriptViewportRows },
736
+ transcript.length === 0 && emptySessionHints.length
737
+ ? emptySessionHints.map((hint, index) =>
738
+ createElement("text", {
739
+ key: `hint-${index}`,
740
+ content: hint,
741
+ attributes: TextAttributes.DIM,
742
+ })
743
+ )
744
+ : null,
691
745
  visibleTranscriptLines.map((line) =>
692
746
  createElement(TranscriptLine, { key: line.id, line })
693
747
  )
@@ -701,6 +755,13 @@ export function App({ cwd: cwdArg }: { cwd?: string }) {
701
755
  }`
702
756
  )
703
757
  : null,
758
+ busy && activityLabel
759
+ ? createElement("text", {
760
+ content: `${["⠋", "⠙", "⠹", "⠸", "⠼", "⠴", "⠦", "⠧", "⠇", "⠏"][activityFrame % 10]} ${activityLabel}…`,
761
+ fg: "yellow",
762
+ attributes: TextAttributes.DIM,
763
+ })
764
+ : null,
704
765
  mode === "command"
705
766
  ? createElement(
706
767
  "box",
@@ -785,7 +846,7 @@ export function App({ cwd: cwdArg }: { cwd?: string }) {
785
846
  ? `${["⠋", "⠙", "⠹", "⠸", "⠼", "⠴", "⠦", "⠧", "⠇", "⠏"][activityFrame % 10]} ${activityLabel}… · Ctrl+C cancel`
786
847
  : "Ctrl+C cancel · waiting for agent…"
787
848
  : ready
788
- ? "Ask anything…"
849
+ ? composerPlaceholder
789
850
  : "Loading Patze Code…",
790
851
  value: input,
791
852
  onInput: (value: string) => {
@@ -810,7 +871,7 @@ export function App({ cwd: cwdArg }: { cwd?: string }) {
810
871
  createElement("text", {
811
872
  content: busy
812
873
  ? "Esc exit · Ctrl+C cancel run · agent executing"
813
- : "Esc exit · Ctrl+C quit · /diff · /approve · /apply when patch ready",
874
+ : "Esc exit · Ctrl+C quit · / commands · ctrl+t thought · ctrl+d diff · /status",
814
875
  attributes: TextAttributes.DIM,
815
876
  })
816
877
  )
@@ -12,6 +12,9 @@ export type TranscriptEntry = {
12
12
  label: string
13
13
  text: string
14
14
  upsertKey?: string
15
+ /** Full thinking body when collapsed summary is truncated. */
16
+ detailText?: string
17
+ expanded?: boolean
15
18
  }
16
19
 
17
20
  export type TranscriptPart = {
@@ -37,17 +40,65 @@ export function buildTranscriptLines(entries: TranscriptEntry[], columns: number
37
40
  entry.kind === "assistant"
38
41
  ? renderMarkdownLines(entry.text || "...", textWidth)
39
42
  : wrapText(entry.text || "...", textWidth).map((text) => ({
40
- parts: [{ text }],
43
+ parts: parseCodexFeedParts(entry.kind, entry.label, text),
41
44
  }))
42
45
  )
43
46
 
44
- return renderedLines.map((line, index) => ({
47
+ const lines = renderedLines.map((line, index) => ({
45
48
  id: `${entry.id}-${index}`,
46
49
  kind: entry.kind,
47
50
  label: index === 0 ? entry.label : "",
48
51
  parts: line.parts,
49
52
  }))
53
+
54
+ if (entry.label === "think" && entry.detailText) {
55
+ return appendExpandableDetailLines(lines, entry, textWidth, {
56
+ hint: ` (+${entry.detailText.length} chars · ctrl+t expand)`,
57
+ renderDetailLine: (text) => [{ text: ` ${text}`, color: "gray" as const, dimColor: true }],
58
+ })
59
+ }
60
+
61
+ if (entry.kind === "meta" && entry.label === "diff" && entry.detailText) {
62
+ return appendExpandableDetailLines(lines, entry, textWidth, {
63
+ hint: ` (+${entry.detailText.split("\n").length} lines · ctrl+d expand)`,
64
+ renderDetailLine: (text) => parseCodexDiffParts(text.startsWith(" ") ? text : ` ${text}`),
65
+ })
66
+ }
67
+
68
+ return lines
69
+ })
70
+ }
71
+
72
+ function appendExpandableDetailLines(
73
+ lines: TranscriptLine[],
74
+ entry: TranscriptEntry,
75
+ textWidth: number,
76
+ options: {
77
+ hint: string
78
+ renderDetailLine: (text: string) => TranscriptPart[]
79
+ }
80
+ ): TranscriptLine[] {
81
+ if (entry.expanded) {
82
+ const detailLines = entry.detailText!
83
+ .split("\n")
84
+ .flatMap((rawLine, index) =>
85
+ wrapText(rawLine, textWidth - 2).map((text, wrapIndex) => ({
86
+ id: `${entry.id}-detail-${index}-${wrapIndex}`,
87
+ kind: entry.kind,
88
+ label: "",
89
+ parts: options.renderDetailLine(text),
90
+ }))
91
+ )
92
+ return [...lines, ...detailLines]
93
+ }
94
+
95
+ lines.push({
96
+ id: `${entry.id}-expand-hint`,
97
+ kind: entry.kind,
98
+ label: "",
99
+ parts: [{ text: options.hint, color: "gray", dimColor: true }],
50
100
  })
101
+ return lines
51
102
  }
52
103
 
53
104
  function trimTrailingBlankLines(lines: Array<{ parts: TranscriptPart[] }>) {
@@ -156,6 +207,97 @@ function renderMarkdownLines(value: string, width: number) {
156
207
  return lines
157
208
  }
158
209
 
210
+ function parseCodexFeedParts(kind: TranscriptEntryKind, label: string, text: string): TranscriptPart[] {
211
+ if (kind === "meta" && label === "diff") {
212
+ return parseCodexDiffParts(text)
213
+ }
214
+
215
+ if (kind === "tool") {
216
+ const match = text.match(/^([…✓✗])\s+(.*)$/)
217
+ if (match) {
218
+ const glyph = match[1]
219
+ const body = match[2] ?? ""
220
+ const glyphColor =
221
+ glyph === "✓" ? "green" : glyph === "✗" ? "red" : ("yellow" as const)
222
+ const bodyParts = parseCodexToolBodyParts(body)
223
+ return [{ text: `${glyph} `, color: glyphColor, bold: true }, ...bodyParts]
224
+ }
225
+ return parseCodexToolBodyParts(text)
226
+ }
227
+
228
+ if (kind === "status" || (kind === "meta" && label === "done")) {
229
+ if (text.startsWith("→ ")) {
230
+ return [{ text, color: "cyan" }]
231
+ }
232
+ if (text.startsWith("…")) {
233
+ return [{ text, color: "gray", dimColor: true }]
234
+ }
235
+ if (text.startsWith("✓")) {
236
+ return [{ text, color: "green" }]
237
+ }
238
+ if (text.startsWith("✗")) {
239
+ return [{ text, color: "red" }]
240
+ }
241
+ if (text.startsWith("○")) {
242
+ return [{ text, color: "yellow" }]
243
+ }
244
+ if (text.startsWith("●")) {
245
+ return [{ text, color: "cyan", bold: true }]
246
+ }
247
+ }
248
+
249
+ if (kind === "status" && label === "think") {
250
+ if (text.startsWith("…")) {
251
+ return [{ text, color: "gray", dimColor: true }]
252
+ }
253
+ if (text.startsWith("✓")) {
254
+ return [{ text, color: "green" }]
255
+ }
256
+ }
257
+
258
+ if (kind === "meta") {
259
+ if (text.startsWith("✓ completed")) {
260
+ return [{ text, color: "green", bold: true }]
261
+ }
262
+ if (text.startsWith("deliverables")) {
263
+ return [{ text, color: "cyan" }]
264
+ }
265
+ }
266
+
267
+ return [{ text }]
268
+ }
269
+
270
+ function parseCodexToolBodyParts(body: string): TranscriptPart[] {
271
+ if (body.startsWith("+ create")) {
272
+ return [{ text: body, color: "green" }]
273
+ }
274
+ if (body.startsWith("~ modify")) {
275
+ return [{ text: body, color: "yellow" }]
276
+ }
277
+ if (body.startsWith("- delete")) {
278
+ return [{ text: body, color: "red" }]
279
+ }
280
+ if (body.startsWith("▸")) {
281
+ return [{ text: body, color: "magenta" }]
282
+ }
283
+ return [{ text: body }]
284
+ }
285
+
286
+ function parseCodexDiffParts(text: string): TranscriptPart[] {
287
+ const trimmed = text.trim()
288
+ if (trimmed === "…") {
289
+ return [{ text: " …", color: "gray", dimColor: true }]
290
+ }
291
+ const line = text.startsWith(" ") ? text : ` ${text}`
292
+ if (line.startsWith(" - ")) {
293
+ return [{ text: line, color: "red" }]
294
+ }
295
+ if (line.startsWith(" + ")) {
296
+ return [{ text: line, color: "green" }]
297
+ }
298
+ return [{ text: line, color: "gray", dimColor: true }]
299
+ }
300
+
159
301
  function wrapText(value: string, width: number) {
160
302
  const lines: string[] = []
161
303
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@patze/code-cli",
3
- "version": "0.31.0",
3
+ "version": "0.41.0",
4
4
  "description": "Patze Code — local terminal coding agent client for PatzeAgents",
5
5
  "license": "UNLICENSED",
6
6
  "type": "module",