@patze/code-cli 0.20.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.
Files changed (154) hide show
  1. package/CHANGELOG.md +119 -0
  2. package/VERSION +1 -1
  3. package/dist/backend/agent-trace.d.ts +5 -0
  4. package/dist/backend/agent-trace.d.ts.map +1 -1
  5. package/dist/backend/agent-trace.js +14 -0
  6. package/dist/backend/agent-trace.js.map +1 -1
  7. package/dist/backend/cancel-client.d.ts +19 -0
  8. package/dist/backend/cancel-client.d.ts.map +1 -0
  9. package/dist/backend/cancel-client.js +45 -0
  10. package/dist/backend/cancel-client.js.map +1 -0
  11. package/dist/backend/execute-client.d.ts +4 -0
  12. package/dist/backend/execute-client.d.ts.map +1 -1
  13. package/dist/backend/execute-client.js +4 -0
  14. package/dist/backend/execute-client.js.map +1 -1
  15. package/dist/backend/preview-payload.d.ts +6 -0
  16. package/dist/backend/preview-payload.d.ts.map +1 -1
  17. package/dist/backend/preview-payload.js +9 -0
  18. package/dist/backend/preview-payload.js.map +1 -1
  19. package/dist/backend/run-record.d.ts +4 -0
  20. package/dist/backend/run-record.d.ts.map +1 -1
  21. package/dist/backend/run-record.js +24 -1
  22. package/dist/backend/run-record.js.map +1 -1
  23. package/dist/backend/run-stream-client.d.ts +6 -0
  24. package/dist/backend/run-stream-client.d.ts.map +1 -1
  25. package/dist/backend/run-stream-client.js +10 -0
  26. package/dist/backend/run-stream-client.js.map +1 -1
  27. package/dist/cli/commands/agent.d.ts.map +1 -1
  28. package/dist/cli/commands/agent.js +19 -22
  29. package/dist/cli/commands/agent.js.map +1 -1
  30. package/dist/cli/commands/exec.d.ts +5 -0
  31. package/dist/cli/commands/exec.d.ts.map +1 -0
  32. package/dist/cli/commands/exec.js +115 -0
  33. package/dist/cli/commands/exec.js.map +1 -0
  34. package/dist/cli/help.d.ts.map +1 -1
  35. package/dist/cli/help.js +1 -0
  36. package/dist/cli/help.js.map +1 -1
  37. package/dist/cli/interactive/agent-activity.d.ts +11 -0
  38. package/dist/cli/interactive/agent-activity.d.ts.map +1 -0
  39. package/dist/cli/interactive/agent-activity.js +41 -0
  40. package/dist/cli/interactive/agent-activity.js.map +1 -0
  41. package/dist/cli/interactive/agent-event-feed.d.ts +21 -0
  42. package/dist/cli/interactive/agent-event-feed.d.ts.map +1 -0
  43. package/dist/cli/interactive/agent-event-feed.js +205 -0
  44. package/dist/cli/interactive/agent-event-feed.js.map +1 -0
  45. package/dist/cli/interactive/agent-event-parse.d.ts +4 -0
  46. package/dist/cli/interactive/agent-event-parse.d.ts.map +1 -0
  47. package/dist/cli/interactive/agent-event-parse.js +92 -0
  48. package/dist/cli/interactive/agent-event-parse.js.map +1 -0
  49. package/dist/cli/interactive/agent-events.d.ts +14 -1
  50. package/dist/cli/interactive/agent-events.d.ts.map +1 -1
  51. package/dist/cli/interactive/agent-events.js +46 -4
  52. package/dist/cli/interactive/agent-events.js.map +1 -1
  53. package/dist/cli/interactive/agent-execute-turn.d.ts +5 -0
  54. package/dist/cli/interactive/agent-execute-turn.d.ts.map +1 -1
  55. package/dist/cli/interactive/agent-execute-turn.js +167 -119
  56. package/dist/cli/interactive/agent-execute-turn.js.map +1 -1
  57. package/dist/cli/interactive/agent-stream-format.d.ts +5 -1
  58. package/dist/cli/interactive/agent-stream-format.d.ts.map +1 -1
  59. package/dist/cli/interactive/agent-stream-format.js +89 -26
  60. package/dist/cli/interactive/agent-stream-format.js.map +1 -1
  61. package/dist/cli/interactive/agent-turn.d.ts +4 -0
  62. package/dist/cli/interactive/agent-turn.d.ts.map +1 -1
  63. package/dist/cli/interactive/agent-turn.js +9 -0
  64. package/dist/cli/interactive/agent-turn.js.map +1 -1
  65. package/dist/cli/interactive/composer-chrome.d.ts +20 -0
  66. package/dist/cli/interactive/composer-chrome.d.ts.map +1 -0
  67. package/dist/cli/interactive/composer-chrome.js +77 -0
  68. package/dist/cli/interactive/composer-chrome.js.map +1 -0
  69. package/dist/cli/interactive/composer-keys.d.ts +2 -1
  70. package/dist/cli/interactive/composer-keys.d.ts.map +1 -1
  71. package/dist/cli/interactive/composer-keys.js +9 -2
  72. package/dist/cli/interactive/composer-keys.js.map +1 -1
  73. package/dist/cli/interactive/composer-session-chrome.d.ts +4 -0
  74. package/dist/cli/interactive/composer-session-chrome.d.ts.map +1 -0
  75. package/dist/cli/interactive/composer-session-chrome.js +22 -0
  76. package/dist/cli/interactive/composer-session-chrome.js.map +1 -0
  77. package/dist/cli/interactive/cookbook-feed-writer.d.ts +13 -0
  78. package/dist/cli/interactive/cookbook-feed-writer.d.ts.map +1 -0
  79. package/dist/cli/interactive/cookbook-feed-writer.js +87 -0
  80. package/dist/cli/interactive/cookbook-feed-writer.js.map +1 -0
  81. package/dist/cli/interactive/cookbook-tool-feed.d.ts +13 -0
  82. package/dist/cli/interactive/cookbook-tool-feed.d.ts.map +1 -0
  83. package/dist/cli/interactive/cookbook-tool-feed.js +67 -0
  84. package/dist/cli/interactive/cookbook-tool-feed.js.map +1 -0
  85. package/dist/cli/interactive/feed-run-stats.d.ts +9 -0
  86. package/dist/cli/interactive/feed-run-stats.d.ts.map +1 -0
  87. package/dist/cli/interactive/feed-run-stats.js +51 -0
  88. package/dist/cli/interactive/feed-run-stats.js.map +1 -0
  89. package/dist/cli/interactive/header.d.ts +10 -2
  90. package/dist/cli/interactive/header.d.ts.map +1 -1
  91. package/dist/cli/interactive/header.js +74 -4
  92. package/dist/cli/interactive/header.js.map +1 -1
  93. package/dist/cli/interactive/json-agent-stream.d.ts +8 -0
  94. package/dist/cli/interactive/json-agent-stream.d.ts.map +1 -0
  95. package/dist/cli/interactive/json-agent-stream.js +14 -0
  96. package/dist/cli/interactive/json-agent-stream.js.map +1 -0
  97. package/dist/cli/interactive/line-editor.d.ts +9 -0
  98. package/dist/cli/interactive/line-editor.d.ts.map +1 -1
  99. package/dist/cli/interactive/line-editor.js +76 -6
  100. package/dist/cli/interactive/line-editor.js.map +1 -1
  101. package/dist/cli/interactive/model-command.d.ts.map +1 -1
  102. package/dist/cli/interactive/model-command.js +37 -3
  103. package/dist/cli/interactive/model-command.js.map +1 -1
  104. package/dist/cli/interactive/opentui-agent-event.d.ts +10 -0
  105. package/dist/cli/interactive/opentui-agent-event.d.ts.map +1 -0
  106. package/dist/cli/interactive/opentui-agent-event.js +12 -0
  107. package/dist/cli/interactive/opentui-agent-event.js.map +1 -0
  108. package/dist/cli/interactive/plain-agent-render.d.ts.map +1 -1
  109. package/dist/cli/interactive/plain-agent-render.js +2 -0
  110. package/dist/cli/interactive/plain-agent-render.js.map +1 -1
  111. package/dist/cli/interactive/run-replay.d.ts.map +1 -1
  112. package/dist/cli/interactive/run-replay.js +3 -0
  113. package/dist/cli/interactive/run-replay.js.map +1 -1
  114. package/dist/cli/interactive/session-controller.d.ts +4 -0
  115. package/dist/cli/interactive/session-controller.d.ts.map +1 -1
  116. package/dist/cli/interactive/session-controller.js +26 -2
  117. package/dist/cli/interactive/session-controller.js.map +1 -1
  118. package/dist/cli/interactive/session-store.d.ts +3 -0
  119. package/dist/cli/interactive/session-store.d.ts.map +1 -1
  120. package/dist/cli/interactive/session-store.js +3 -0
  121. package/dist/cli/interactive/session-store.js.map +1 -1
  122. package/dist/cli/interactive/session.d.ts +19 -0
  123. package/dist/cli/interactive/session.d.ts.map +1 -1
  124. package/dist/cli/interactive/session.js +44 -0
  125. package/dist/cli/interactive/session.js.map +1 -1
  126. package/dist/cli/interactive/shell.d.ts.map +1 -1
  127. package/dist/cli/interactive/shell.js +22 -2
  128. package/dist/cli/interactive/shell.js.map +1 -1
  129. package/dist/cli/interactive/slash-dispatch.d.ts +3 -0
  130. package/dist/cli/interactive/slash-dispatch.d.ts.map +1 -1
  131. package/dist/cli/interactive/slash-dispatch.js +3 -0
  132. package/dist/cli/interactive/slash-dispatch.js.map +1 -1
  133. package/dist/cli/interactive/trace-glyphs.d.ts +14 -0
  134. package/dist/cli/interactive/trace-glyphs.d.ts.map +1 -0
  135. package/dist/cli/interactive/trace-glyphs.js +230 -0
  136. package/dist/cli/interactive/trace-glyphs.js.map +1 -0
  137. package/dist/cli/interactive/transcript-line-parse.js +2 -2
  138. package/dist/cli/interactive/transcript-line-parse.js.map +1 -1
  139. package/dist/cli/interactive/transcript-upsert.d.ts.map +1 -1
  140. package/dist/cli/interactive/transcript-upsert.js +25 -4
  141. package/dist/cli/interactive/transcript-upsert.js.map +1 -1
  142. package/dist/cli/main.d.ts.map +1 -1
  143. package/dist/cli/main.js +5 -0
  144. package/dist/cli/main.js.map +1 -1
  145. package/dist/config/model-preferences.d.ts +13 -0
  146. package/dist/config/model-preferences.d.ts.map +1 -0
  147. package/dist/config/model-preferences.js +50 -0
  148. package/dist/config/model-preferences.js.map +1 -0
  149. package/dist/config/models.d.ts +2 -1
  150. package/dist/config/models.d.ts.map +1 -1
  151. package/dist/config/models.js +5 -2
  152. package/dist/config/models.js.map +1 -1
  153. package/opentui/src/App.tsx +202 -80
  154. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"main.js","sourceRoot":"","sources":["../../src/cli/main.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"main.js","sourceRoot":"","sources":["../../src/cli/main.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ export type ModelPreferenceKey = "thinking" | "fast";
2
+ export type ModelPreferences = {
3
+ thinking: boolean | null;
4
+ fast: boolean | null;
5
+ };
6
+ export declare function resolveModelPreferenceToggle(current: boolean | null, token: string): boolean | null;
7
+ export declare function formatModelPreferenceLabel(key: ModelPreferenceKey, value: boolean | null): string;
8
+ export declare function formatModelDisplay(model: string, prefs: ModelPreferences, cursorAgentId?: string | null): string;
9
+ export declare function modelPreferencesToMetadata(prefs: ModelPreferences): {
10
+ model_thinking?: string;
11
+ model_fast?: string;
12
+ };
13
+ //# sourceMappingURL=model-preferences.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"model-preferences.d.ts","sourceRoot":"","sources":["../../src/config/model-preferences.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,kBAAkB,GAAG,UAAU,GAAG,MAAM,CAAA;AAEpD,MAAM,MAAM,gBAAgB,GAAG;IAC7B,QAAQ,EAAE,OAAO,GAAG,IAAI,CAAA;IACxB,IAAI,EAAE,OAAO,GAAG,IAAI,CAAA;CACrB,CAAA;AAED,wBAAgB,4BAA4B,CAC1C,OAAO,EAAE,OAAO,GAAG,IAAI,EACvB,KAAK,EAAE,MAAM,GACZ,OAAO,GAAG,IAAI,CAkBhB;AAED,wBAAgB,0BAA0B,CAAC,GAAG,EAAE,kBAAkB,EAAE,KAAK,EAAE,OAAO,GAAG,IAAI,GAAG,MAAM,CAKjG;AAED,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,gBAAgB,EACvB,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,GAC5B,MAAM,CAaR;AAED,wBAAgB,0BAA0B,CAAC,KAAK,EAAE,gBAAgB,GAAG;IACnE,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,UAAU,CAAC,EAAE,MAAM,CAAA;CACpB,CASA"}
@@ -0,0 +1,50 @@
1
+ export function resolveModelPreferenceToggle(current, token) {
2
+ const normalized = token.trim().toLowerCase();
3
+ if (normalized === "toggle") {
4
+ if (current === null) {
5
+ return true;
6
+ }
7
+ return !current;
8
+ }
9
+ if (normalized === "on" || normalized === "true" || normalized === "1") {
10
+ return true;
11
+ }
12
+ if (normalized === "off" || normalized === "false" || normalized === "0") {
13
+ return false;
14
+ }
15
+ if (normalized === "clear") {
16
+ return null;
17
+ }
18
+ return current;
19
+ }
20
+ export function formatModelPreferenceLabel(key, value) {
21
+ if (value === null) {
22
+ return `${key}: auto`;
23
+ }
24
+ return `${key}: ${value ? "on" : "off"}`;
25
+ }
26
+ export function formatModelDisplay(model, prefs, cursorAgentId) {
27
+ const parts = [model];
28
+ if (prefs.thinking !== null) {
29
+ parts.push(prefs.thinking ? "think" : "no-think");
30
+ }
31
+ if (prefs.fast !== null) {
32
+ parts.push(prefs.fast ? "fast" : "no-fast");
33
+ }
34
+ const agent = cursorAgentId?.trim();
35
+ if (agent) {
36
+ parts.push(`agent:${agent.length > 10 ? `${agent.slice(0, 8)}…` : agent}`);
37
+ }
38
+ return parts.join(" · ");
39
+ }
40
+ export function modelPreferencesToMetadata(prefs) {
41
+ const metadata = {};
42
+ if (prefs.thinking !== null) {
43
+ metadata.model_thinking = prefs.thinking ? "true" : "false";
44
+ }
45
+ if (prefs.fast !== null) {
46
+ metadata.model_fast = prefs.fast ? "true" : "false";
47
+ }
48
+ return metadata;
49
+ }
50
+ //# sourceMappingURL=model-preferences.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"model-preferences.js","sourceRoot":"","sources":["../../src/config/model-preferences.ts"],"names":[],"mappings":"AAOA,MAAM,UAAU,4BAA4B,CAC1C,OAAuB,EACvB,KAAa;IAEb,MAAM,UAAU,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAA;IAC7C,IAAI,UAAU,KAAK,QAAQ,EAAE,CAAC;QAC5B,IAAI,OAAO,KAAK,IAAI,EAAE,CAAC;YACrB,OAAO,IAAI,CAAA;QACb,CAAC;QACD,OAAO,CAAC,OAAO,CAAA;IACjB,CAAC;IACD,IAAI,UAAU,KAAK,IAAI,IAAI,UAAU,KAAK,MAAM,IAAI,UAAU,KAAK,GAAG,EAAE,CAAC;QACvE,OAAO,IAAI,CAAA;IACb,CAAC;IACD,IAAI,UAAU,KAAK,KAAK,IAAI,UAAU,KAAK,OAAO,IAAI,UAAU,KAAK,GAAG,EAAE,CAAC;QACzE,OAAO,KAAK,CAAA;IACd,CAAC;IACD,IAAI,UAAU,KAAK,OAAO,EAAE,CAAC;QAC3B,OAAO,IAAI,CAAA;IACb,CAAC;IACD,OAAO,OAAO,CAAA;AAChB,CAAC;AAED,MAAM,UAAU,0BAA0B,CAAC,GAAuB,EAAE,KAAqB;IACvF,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;QACnB,OAAO,GAAG,GAAG,QAAQ,CAAA;IACvB,CAAC;IACD,OAAO,GAAG,GAAG,KAAK,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,EAAE,CAAA;AAC1C,CAAC;AAED,MAAM,UAAU,kBAAkB,CAChC,KAAa,EACb,KAAuB,EACvB,aAA6B;IAE7B,MAAM,KAAK,GAAG,CAAC,KAAK,CAAC,CAAA;IACrB,IAAI,KAAK,CAAC,QAAQ,KAAK,IAAI,EAAE,CAAC;QAC5B,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,UAAU,CAAC,CAAA;IACnD,CAAC;IACD,IAAI,KAAK,CAAC,IAAI,KAAK,IAAI,EAAE,CAAC;QACxB,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,CAAA;IAC7C,CAAC;IACD,MAAM,KAAK,GAAG,aAAa,EAAE,IAAI,EAAE,CAAA;IACnC,IAAI,KAAK,EAAE,CAAC;QACV,KAAK,CAAC,IAAI,CAAC,SAAS,KAAK,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAA;IAC5E,CAAC;IACD,OAAO,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;AAC1B,CAAC;AAED,MAAM,UAAU,0BAA0B,CAAC,KAAuB;IAIhE,MAAM,QAAQ,GAAqD,EAAE,CAAA;IACrE,IAAI,KAAK,CAAC,QAAQ,KAAK,IAAI,EAAE,CAAC;QAC5B,QAAQ,CAAC,cAAc,GAAG,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAA;IAC7D,CAAC;IACD,IAAI,KAAK,CAAC,IAAI,KAAK,IAAI,EAAE,CAAC;QACxB,QAAQ,CAAC,UAAU,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAA;IACrD,CAAC;IACD,OAAO,QAAQ,CAAA;AACjB,CAAC"}
@@ -1,3 +1,4 @@
1
+ import type { ModelPreferences } from "./model-preferences.js";
1
2
  export declare const DEFAULT_PATZE_MODEL = "composer-2.5-fast";
2
3
  /** Models aligned with server PATZE_CODE_CURSOR_MODEL_FALLBACKS + cookbook defaults. */
3
4
  export declare const PATZE_SUPPORTED_MODELS: readonly string[];
@@ -7,5 +8,5 @@ export declare function resolveEffectiveModel(input: {
7
8
  sessionOverride?: string | null;
8
9
  configModel?: string | null;
9
10
  }): string;
10
- export declare function formatModelPickerLines(current: string): string[];
11
+ export declare function formatModelPickerLines(current: string, prefs?: ModelPreferences): string[];
11
12
  //# sourceMappingURL=models.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"models.d.ts","sourceRoot":"","sources":["../../src/config/models.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,mBAAmB,sBAAsB,CAAA;AAEtD,wFAAwF;AACxF,eAAO,MAAM,sBAAsB,EAAE,SAAS,MAAM,EAMnD,CAAA;AAED,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,MAAM,GAAG,IAAI,CAQhF;AAED,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAMzD;AAED,wBAAgB,qBAAqB,CAAC,KAAK,EAAE;IAC3C,eAAe,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IAC/B,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;CAC5B,GAAG,MAAM,CAcT;AAED,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,CAShE"}
1
+ {"version":3,"file":"models.d.ts","sourceRoot":"","sources":["../../src/config/models.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAA;AAE9D,eAAO,MAAM,mBAAmB,sBAAsB,CAAA;AAEtD,wFAAwF;AACxF,eAAO,MAAM,sBAAsB,EAAE,SAAS,MAAM,EAMnD,CAAA;AAED,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,MAAM,GAAG,IAAI,CAQhF;AAED,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAMzD;AAED,wBAAgB,qBAAqB,CAAC,KAAK,EAAE;IAC3C,eAAe,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IAC/B,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;CAC5B,GAAG,MAAM,CAcT;AAED,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,gBAAgB,GAAG,MAAM,EAAE,CAiB1F"}
@@ -38,14 +38,17 @@ export function resolveEffectiveModel(input) {
38
38
  }
39
39
  return DEFAULT_PATZE_MODEL;
40
40
  }
41
- export function formatModelPickerLines(current) {
41
+ export function formatModelPickerLines(current, prefs) {
42
42
  const lines = [`Model · current: ${current}`, ""];
43
+ if (prefs) {
44
+ lines.push(` thinking ${prefs.thinking === null ? "auto" : prefs.thinking ? "on" : "off"} · fast ${prefs.fast === null ? "auto" : prefs.fast ? "on" : "off"}`, "");
45
+ }
43
46
  for (const model of PATZE_SUPPORTED_MODELS) {
44
47
  const marker = model.toLowerCase() === current.toLowerCase() ? "›" : " ";
45
48
  lines.push(` ${marker} ${model}`);
46
49
  }
47
50
  lines.push("");
48
- lines.push("Usage: /model <id> · /model clear");
51
+ lines.push("Usage: /model <id> · /model thinking on|off · /model fast on|off · /model clear");
49
52
  return lines;
50
53
  }
51
54
  //# sourceMappingURL=models.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"models.js","sourceRoot":"","sources":["../../src/config/models.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,mBAAmB,GAAG,mBAAmB,CAAA;AAEtD,wFAAwF;AACxF,MAAM,CAAC,MAAM,sBAAsB,GAAsB;IACvD,mBAAmB;IACnB,cAAc;IACd,YAAY;IACZ,cAAc;IACd,SAAS;CACV,CAAA;AAED,MAAM,UAAU,gBAAgB,CAAC,KAAgC;IAC/D,MAAM,OAAO,GAAG,KAAK,EAAE,IAAI,EAAE,CAAA;IAC7B,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO,IAAI,CAAA;IACb,CAAC;IACD,MAAM,KAAK,GAAG,OAAO,CAAC,WAAW,EAAE,CAAA;IACnC,MAAM,KAAK,GAAG,sBAAsB,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,WAAW,EAAE,KAAK,KAAK,CAAC,CAAA;IACnF,OAAO,KAAK,IAAI,OAAO,CAAA;AACzB,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,KAAa;IAC9C,MAAM,UAAU,GAAG,gBAAgB,CAAC,KAAK,CAAC,CAAA;IAC1C,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,OAAO,KAAK,CAAA;IACd,CAAC;IACD,OAAO,sBAAsB,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,WAAW,EAAE,KAAK,UAAU,CAAC,WAAW,EAAE,CAAC,CAAA;AACjG,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,KAGrC;IACC,MAAM,WAAW,GAAG,gBAAgB,CAAC,KAAK,CAAC,eAAe,CAAC,CAAA;IAC3D,IAAI,WAAW,EAAE,CAAC;QAChB,OAAO,WAAW,CAAA;IACpB,CAAC;IACD,MAAM,OAAO,GAAG,gBAAgB,CAAC,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAA;IAC9D,IAAI,OAAO,EAAE,CAAC;QACZ,OAAO,OAAO,CAAA;IAChB,CAAC;IACD,MAAM,UAAU,GAAG,gBAAgB,CAAC,KAAK,CAAC,WAAW,CAAC,CAAA;IACtD,IAAI,UAAU,EAAE,CAAC;QACf,OAAO,UAAU,CAAA;IACnB,CAAC;IACD,OAAO,mBAAmB,CAAA;AAC5B,CAAC;AAED,MAAM,UAAU,sBAAsB,CAAC,OAAe;IACpD,MAAM,KAAK,GAAG,CAAC,oBAAoB,OAAO,EAAE,EAAE,EAAE,CAAC,CAAA;IACjD,KAAK,MAAM,KAAK,IAAI,sBAAsB,EAAE,CAAC;QAC3C,MAAM,MAAM,GAAG,KAAK,CAAC,WAAW,EAAE,KAAK,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAA;QACxE,KAAK,CAAC,IAAI,CAAC,KAAK,MAAM,IAAI,KAAK,EAAE,CAAC,CAAA;IACpC,CAAC;IACD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;IACd,KAAK,CAAC,IAAI,CAAC,mCAAmC,CAAC,CAAA;IAC/C,OAAO,KAAK,CAAA;AACd,CAAC"}
1
+ {"version":3,"file":"models.js","sourceRoot":"","sources":["../../src/config/models.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,mBAAmB,GAAG,mBAAmB,CAAA;AAEtD,wFAAwF;AACxF,MAAM,CAAC,MAAM,sBAAsB,GAAsB;IACvD,mBAAmB;IACnB,cAAc;IACd,YAAY;IACZ,cAAc;IACd,SAAS;CACV,CAAA;AAED,MAAM,UAAU,gBAAgB,CAAC,KAAgC;IAC/D,MAAM,OAAO,GAAG,KAAK,EAAE,IAAI,EAAE,CAAA;IAC7B,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO,IAAI,CAAA;IACb,CAAC;IACD,MAAM,KAAK,GAAG,OAAO,CAAC,WAAW,EAAE,CAAA;IACnC,MAAM,KAAK,GAAG,sBAAsB,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,WAAW,EAAE,KAAK,KAAK,CAAC,CAAA;IACnF,OAAO,KAAK,IAAI,OAAO,CAAA;AACzB,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,KAAa;IAC9C,MAAM,UAAU,GAAG,gBAAgB,CAAC,KAAK,CAAC,CAAA;IAC1C,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,OAAO,KAAK,CAAA;IACd,CAAC;IACD,OAAO,sBAAsB,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,WAAW,EAAE,KAAK,UAAU,CAAC,WAAW,EAAE,CAAC,CAAA;AACjG,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,KAGrC;IACC,MAAM,WAAW,GAAG,gBAAgB,CAAC,KAAK,CAAC,eAAe,CAAC,CAAA;IAC3D,IAAI,WAAW,EAAE,CAAC;QAChB,OAAO,WAAW,CAAA;IACpB,CAAC;IACD,MAAM,OAAO,GAAG,gBAAgB,CAAC,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAA;IAC9D,IAAI,OAAO,EAAE,CAAC;QACZ,OAAO,OAAO,CAAA;IAChB,CAAC;IACD,MAAM,UAAU,GAAG,gBAAgB,CAAC,KAAK,CAAC,WAAW,CAAC,CAAA;IACtD,IAAI,UAAU,EAAE,CAAC;QACf,OAAO,UAAU,CAAA;IACnB,CAAC;IACD,OAAO,mBAAmB,CAAA;AAC5B,CAAC;AAED,MAAM,UAAU,sBAAsB,CAAC,OAAe,EAAE,KAAwB;IAC9E,MAAM,KAAK,GAAG,CAAC,oBAAoB,OAAO,EAAE,EAAE,EAAE,CAAC,CAAA;IACjD,IAAI,KAAK,EAAE,CAAC;QACV,KAAK,CAAC,IAAI,CACR,cAAc,KAAK,CAAC,QAAQ,KAAK,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,WAC5E,KAAK,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KACrD,EAAE,EACF,EAAE,CACH,CAAA;IACH,CAAC;IACD,KAAK,MAAM,KAAK,IAAI,sBAAsB,EAAE,CAAC;QAC3C,MAAM,MAAM,GAAG,KAAK,CAAC,WAAW,EAAE,KAAK,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAA;QACxE,KAAK,CAAC,IAAI,CAAC,KAAK,MAAM,IAAI,KAAK,EAAE,CAAC,CAAA;IACpC,CAAC;IACD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;IACd,KAAK,CAAC,IAAI,CAAC,iFAAiF,CAAC,CAAA;IAC7F,OAAO,KAAK,CAAA;AACd,CAAC"}
@@ -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,6 +22,8 @@ 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"
25
+ import { applyOpenTuiAgentEvent } from "../../dist/cli/interactive/opentui-agent-event.js"
26
+ import type { AgentEvent } from "../../dist/cli/interactive/agent-events.js"
26
27
 
27
28
  extend({ "tui-input": InputRenderable })
28
29
 
@@ -56,6 +57,10 @@ type InteractiveController = {
56
57
  session: {
57
58
  getModelOverride: () => string | null
58
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
59
64
  getExecutionMode: () => "local" | "cloud"
60
65
  snapshot: () => Array<{ input: string; lines: string[] }>
61
66
  }
@@ -65,7 +70,12 @@ type InteractiveController = {
65
70
  processLine: (
66
71
  rawLine: string,
67
72
  output: { line: (text?: string) => void },
68
- context?: { signal?: AbortSignal }
73
+ context?: {
74
+ signal?: AbortSignal
75
+ onActivity?: (label: string | null) => void
76
+ useActivitySpinner?: boolean
77
+ onAgentEvent?: (event: AgentEvent) => void
78
+ }
69
79
  ) => Promise<{ exitShell: boolean; exitCode: number; streamed?: boolean }>
70
80
  }
71
81
 
@@ -92,16 +102,21 @@ export function App({ cwd: cwdArg }: { cwd?: string }) {
92
102
  const [ready, setReady] = useState(false)
93
103
  const [bootError, setBootError] = useState<string | null>(null)
94
104
  const [busy, setBusy] = useState(false)
105
+ const [activityLabel, setActivityLabel] = useState<string | null>(null)
106
+ const [activityFrame, setActivityFrame] = useState(0)
95
107
  const [input, setInput] = useState("")
96
108
  const [mode, setMode] = useState<ViewMode>("input")
97
109
  const [modelSearch, setModelSearch] = useState("")
98
110
  const [scrollOffset, setScrollOffset] = useState(0)
99
111
  const [transcript, setTranscript] = useState<TranscriptEntry[]>([])
100
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)
101
115
  const [executionMode, setExecutionMode] = useState<"local" | "cloud">("local")
102
116
  const [executionTarget, setExecutionTarget] = useState<string | null>(null)
103
117
  const [supportedModels, setSupportedModels] = useState<string[]>([])
104
118
  const [slashMenuReady, setSlashMenuReady] = useState(false)
119
+ const [startupHeader, setStartupHeader] = useState<string[]>([])
105
120
 
106
121
  const followTranscript = useCallback(() => {
107
122
  if (scrollPinnedRef.current) {
@@ -185,6 +200,14 @@ export function App({ cwd: cwdArg }: { cwd?: string }) {
185
200
  streamingIdRef.current = null
186
201
  }, [])
187
202
 
203
+ const openTuiStreamHandlers = useMemo(
204
+ () => ({
205
+ onAssistantDelta: upsertStreaming,
206
+ onClearAssistantStream: clearStreaming,
207
+ }),
208
+ [clearStreaming, upsertStreaming]
209
+ )
210
+
188
211
  const refreshStatusMeta = useCallback(async () => {
189
212
  const controller = controllerRef.current
190
213
  if (!controller) {
@@ -204,7 +227,26 @@ export function App({ cwd: cwdArg }: { cwd?: string }) {
204
227
  })
205
228
  )
206
229
  setExecutionMode(controller.session.getExecutionMode())
207
- setSupportedModels([...models.PATZE_SUPPORTED_MODELS])
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)
208
250
 
209
251
  const cloudGit = await importPatzeDist<
210
252
  typeof import("../../dist/cli/interactive/cloud-git.js")
@@ -219,6 +261,18 @@ export function App({ cwd: cwdArg }: { cwd?: string }) {
219
261
  }
220
262
  }, [])
221
263
 
264
+ useEffect(() => {
265
+ if (!activityLabel) {
266
+ return
267
+ }
268
+ const timer = setInterval(() => {
269
+ setActivityFrame((frame) => frame + 1)
270
+ }, 80)
271
+ return () => {
272
+ clearInterval(timer)
273
+ }
274
+ }, [activityLabel])
275
+
222
276
  useEffect(() => {
223
277
  let cancelled = false
224
278
 
@@ -233,10 +287,7 @@ export function App({ cwd: cwdArg }: { cwd?: string }) {
233
287
  const controller = (await sessionMod.prepareInteractiveController({
234
288
  cwd,
235
289
  interactive: true,
236
- streamPartials: true,
237
- onPartial: (chunk: string) => {
238
- upsertStreaming(chunk)
239
- },
290
+ streamPartials: false,
240
291
  })) as InteractiveController
241
292
 
242
293
  if (cancelled) {
@@ -244,21 +295,7 @@ export function App({ cwd: cwdArg }: { cwd?: string }) {
244
295
  }
245
296
 
246
297
  controllerRef.current = controller
247
-
248
- const headerEntries = controller.renderHeaderLines().flatMap((line) => {
249
- const parsed = parseTranscriptLine(line)
250
- if (!parsed || parsed.continuation) {
251
- return []
252
- }
253
- return [
254
- {
255
- id: nextId(),
256
- kind: "meta" as const,
257
- label: parsed.label || "info",
258
- text: parsed.text || line,
259
- },
260
- ]
261
- })
298
+ setStartupHeader(controller.renderHeaderLines())
262
299
 
263
300
  const restored: TranscriptEntry[] = []
264
301
  for (const turn of controller.session.snapshot()) {
@@ -273,7 +310,7 @@ export function App({ cwd: cwdArg }: { cwd?: string }) {
273
310
  }
274
311
  }
275
312
 
276
- setTranscript([...headerEntries, ...restored])
313
+ setTranscript(restored)
277
314
  await refreshStatusMeta()
278
315
  setReady(true)
279
316
  } catch (error) {
@@ -285,7 +322,7 @@ export function App({ cwd: cwdArg }: { cwd?: string }) {
285
322
  return () => {
286
323
  cancelled = true
287
324
  }
288
- }, [cwd, nextId, refreshStatusMeta, upsertStreaming])
325
+ }, [cwd, nextId, refreshStatusMeta])
289
326
 
290
327
  const exitApp = useCallback(() => {
291
328
  controllerRef.current?.persistSession()
@@ -299,15 +336,17 @@ export function App({ cwd: cwdArg }: { cwd?: string }) {
299
336
  return
300
337
  }
301
338
 
302
- const value = rawLine.trim()
339
+ const value = trimComposerPrompt(rawLine)
303
340
  if (!value) {
304
341
  return
305
342
  }
306
343
 
307
344
  setBusy(true)
345
+ setActivityLabel(null)
308
346
  clearStreaming()
309
347
  markScrollPinned()
310
348
 
349
+ const turnAssistantId = nextId()
311
350
  const abort = new AbortController()
312
351
  activeAbortRef.current = abort
313
352
 
@@ -325,7 +364,18 @@ export function App({ cwd: cwdArg }: { cwd?: string }) {
325
364
  })
326
365
 
327
366
  try {
328
- const result = await controller.processLine(value, sink, { signal: abort.signal })
367
+ const result = await controller.processLine(value, sink, {
368
+ signal: abort.signal,
369
+ onActivity: setActivityLabel,
370
+ useActivitySpinner: false,
371
+ onAgentEvent: (event) => {
372
+ setActivityLabel(null)
373
+ setTranscript((items) =>
374
+ applyOpenTuiAgentEvent(items, event, turnAssistantId, openTuiStreamHandlers)
375
+ )
376
+ followTranscript()
377
+ },
378
+ })
329
379
  if (result.streamed) {
330
380
  clearStreaming()
331
381
  }
@@ -336,6 +386,7 @@ export function App({ cwd: cwdArg }: { cwd?: string }) {
336
386
  } finally {
337
387
  activeAbortRef.current = null
338
388
  setBusy(false)
389
+ setActivityLabel(null)
339
390
  clearStreaming()
340
391
  }
341
392
  },
@@ -347,6 +398,7 @@ export function App({ cwd: cwdArg }: { cwd?: string }) {
347
398
  followTranscript,
348
399
  markScrollPinned,
349
400
  nextId,
401
+ openTuiStreamHandlers,
350
402
  refreshStatusMeta,
351
403
  upsertTranscriptLine,
352
404
  upsertStreaming,
@@ -358,6 +410,23 @@ export function App({ cwd: cwdArg }: { cwd?: string }) {
358
410
  setMode("model")
359
411
  }, [])
360
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
+
361
430
  const runCommand = useCallback(
362
431
  async (rawCommand: string) => {
363
432
  const trimmed = rawCommand.trim()
@@ -398,7 +467,7 @@ export function App({ cwd: cwdArg }: { cwd?: string }) {
398
467
 
399
468
  const submitInput = useCallback(
400
469
  (value: string) => {
401
- const prompt = value.trim()
470
+ const prompt = trimComposerPrompt(value)
402
471
  setInput("")
403
472
 
404
473
  if (!prompt || busy) {
@@ -440,41 +509,26 @@ export function App({ cwd: cwdArg }: { cwd?: string }) {
440
509
  const modelSelectRows = Math.min(8, Math.max(3, rows - 10))
441
510
  const commandPanelRows = 2 + commandSelectRows
442
511
  const modelPanelRows = 3 + modelSelectRows
512
+ const headerRows = Math.max(1, startupHeader.length)
513
+ const composerChromeRows = 5
514
+ const bottomHintRows = 1
443
515
 
444
516
  const transcriptViewportRows = Math.max(
445
517
  4,
446
- rows - (mode === "model" ? modelPanelRows + 4 : mode === "command" ? commandPanelRows + 4 : 6)
518
+ rows -
519
+ headerRows -
520
+ bottomHintRows -
521
+ (mode === "model"
522
+ ? modelPanelRows + 2
523
+ : mode === "command"
524
+ ? commandPanelRows + 2
525
+ : composerChromeRows)
447
526
  )
448
527
 
449
- const scrollableEntries = useMemo(
450
- () => [
451
- { id: "status-cwd", kind: "meta" as const, label: "cwd", text: cwd },
452
- {
453
- id: "status-mode",
454
- kind: "meta" as const,
455
- label: "mode",
456
- text: executionMode,
457
- },
458
- ...(executionTarget
459
- ? [
460
- {
461
- id: "status-target",
462
- kind: "meta" as const,
463
- label: "target",
464
- text: executionTarget,
465
- },
466
- ]
467
- : []),
468
- {
469
- id: "status-model",
470
- kind: "meta" as const,
471
- label: "model",
472
- text: currentModel,
473
- },
474
- ...transcript,
475
- ],
476
- [cwd, currentModel, executionMode, executionTarget, transcript]
477
- )
528
+ const composerModelLabel = `${currentModel}${modelThinking ? " · thinking" : ""}${modelFast ? " · fast" : ""}`
529
+ const composerPathLabel = shortenComposerPath(cwd)
530
+
531
+ const scrollableEntries = useMemo(() => transcript, [transcript])
478
532
 
479
533
  const transcriptLines = useMemo(
480
534
  () => buildTranscriptLines(scrollableEntries, columns),
@@ -538,6 +592,10 @@ export function App({ cwd: cwdArg }: { cwd?: string }) {
538
592
  if (mode === "model") {
539
593
  if (key.name === "backspace" || key.name === "delete") {
540
594
  setModelSearch((value) => value.slice(0, -1))
595
+ } else if (character === "T") {
596
+ toggleModelPreference("thinking")
597
+ } else if (character === "F") {
598
+ toggleModelPreference("fast")
541
599
  } else if (isSearchInput(character)) {
542
600
  setModelSearch((value) => `${value}${character}`)
543
601
  }
@@ -553,6 +611,11 @@ export function App({ cwd: cwdArg }: { cwd?: string }) {
553
611
  if (mode === "input") {
554
612
  const pageSize = Math.max(1, transcriptViewportRows - 1)
555
613
 
614
+ if (key.shift && (key.name === "return" || key.name === "enter")) {
615
+ setInput((value) => `${value}\n`)
616
+ return
617
+ }
618
+
556
619
  if (key.name === "up") {
557
620
  markScrollUnpinned()
558
621
  setScrollOffset((offset) => Math.min(maxScrollOffset, offset + 1))
@@ -613,6 +676,15 @@ export function App({ cwd: cwdArg }: { cwd?: string }) {
613
676
  return createElement(
614
677
  "box",
615
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,
616
688
  createElement(
617
689
  "box",
618
690
  { flexDirection: "column", height: transcriptViewportRows },
@@ -672,7 +744,7 @@ export function App({ cwd: cwdArg }: { cwd?: string }) {
672
744
  attributes: TextAttributes.BOLD,
673
745
  }),
674
746
  createElement("text", {
675
- content: "Type to search · Enter choose · Escape cancel",
747
+ content: `Type to search · T thinking ${modelThinking ? "on" : "off"} · F fast ${modelFast ? "on" : "off"} · Enter choose · Escape cancel`,
676
748
  fg: "gray",
677
749
  }),
678
750
  createElement("text", {
@@ -695,40 +767,90 @@ export function App({ cwd: cwdArg }: { cwd?: string }) {
695
767
  border: true,
696
768
  borderStyle: "single",
697
769
  borderColor: busy ? "yellow" : "green",
770
+ flexDirection: "column",
698
771
  marginTop: 1,
699
772
  paddingX: 1,
700
773
  },
701
- createElement(TuiInput, {
702
- focused: ready && !busy,
703
- placeholder: busy
704
- ? "Ctrl+C cancel · waiting for run…"
705
- : ready
706
- ? "Ask or type /help"
707
- : "Loading Patze Code…",
708
- value: input,
709
- onInput: (value: string) => {
710
- setInput(value)
711
- if (busy) {
712
- return
713
- }
714
- if (value.startsWith("/") && !value.includes(" ")) {
715
- setMode("command")
716
- } else {
717
- setMode("input")
718
- }
719
- },
720
- onSubmit: submitInput,
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,
721
808
  })
722
809
  ),
723
810
  createElement("text", {
724
811
  content: busy
725
- ? "Esc exit · Ctrl+C cancel run · preview-first trust loop"
726
- : "Esc exit · Ctrl+C quit · Patze trust loop (preview-first)",
812
+ ? "Esc exit · Ctrl+C cancel run · agent executing"
813
+ : "Esc exit · Ctrl+C quit · /diff · /approve · /apply when patch ready",
727
814
  attributes: TextAttributes.DIM,
728
815
  })
729
816
  )
730
817
  }
731
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
+
732
854
  function TranscriptLine({ line }: { line: TranscriptLine }) {
733
855
  const color = {
734
856
  assistant: "white",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@patze/code-cli",
3
- "version": "0.20.0",
3
+ "version": "0.31.0",
4
4
  "description": "Patze Code — local terminal coding agent client for PatzeAgents",
5
5
  "license": "UNLICENSED",
6
6
  "type": "module",