@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
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cookbook-feed-writer.js","sourceRoot":"","sources":["../../../src/cli/interactive/cookbook-feed-writer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Cookbook coding-agent-cli tool row formatting (tui/App.tsx).
3
+ * @see https://github.com/cursor/cookbook/tree/main/sdk/coding-agent-cli/src/tui/App.tsx
4
+ */
5
+ export declare function normalizeCookbookToolStatus(status: string): string;
6
+ export declare function formatCookbookToolStatus(status: string): string;
7
+ export declare function formatCookbookToolIcon(name: string): string;
8
+ export declare function formatCookbookToolFeedLine(input: {
9
+ name: string;
10
+ status: string;
11
+ params?: string;
12
+ }): string;
13
+ //# sourceMappingURL=cookbook-tool-feed.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cookbook-tool-feed.d.ts","sourceRoot":"","sources":["../../../src/cli/interactive/cookbook-tool-feed.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,wBAAgB,2BAA2B,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAelE;AAED,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAa/D;AAED,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CA6B3D;AAED,wBAAgB,0BAA0B,CAAC,KAAK,EAAE;IAChD,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,EAAE,MAAM,CAAA;IACd,MAAM,CAAC,EAAE,MAAM,CAAA;CAChB,GAAG,MAAM,CAST"}
@@ -0,0 +1,67 @@
1
+ /**
2
+ * Cookbook coding-agent-cli tool row formatting (tui/App.tsx).
3
+ * @see https://github.com/cursor/cookbook/tree/main/sdk/coding-agent-cli/src/tui/App.tsx
4
+ */
5
+ export function normalizeCookbookToolStatus(status) {
6
+ const normalized = status.trim().toLowerCase();
7
+ if (normalized === "done" || normalized === "completed") {
8
+ return "completed";
9
+ }
10
+ if (normalized === "error" || normalized === "failed") {
11
+ return "error";
12
+ }
13
+ if (normalized === "requested") {
14
+ return "requested";
15
+ }
16
+ if (normalized === "running" || normalized === "in_progress") {
17
+ return "running";
18
+ }
19
+ return normalized || "running";
20
+ }
21
+ export function formatCookbookToolStatus(status) {
22
+ switch (normalizeCookbookToolStatus(status)) {
23
+ case "requested":
24
+ return "[ ]";
25
+ case "running":
26
+ return "[~]";
27
+ case "completed":
28
+ return "[x]";
29
+ case "error":
30
+ return "[!]";
31
+ default:
32
+ return status.toLowerCase();
33
+ }
34
+ }
35
+ export function formatCookbookToolIcon(name) {
36
+ const key = name.toLowerCase();
37
+ if (key.includes("read")) {
38
+ return "[R]";
39
+ }
40
+ if (key.includes("glob") || key.includes("grep") || key.includes("search")) {
41
+ return "[S]";
42
+ }
43
+ if (key.includes("shell") || key.includes("terminal") || key.includes("command")) {
44
+ return "$";
45
+ }
46
+ if (key.includes("edit") ||
47
+ key.includes("write") ||
48
+ key.includes("patch") ||
49
+ key.includes("delete")) {
50
+ return "[E]";
51
+ }
52
+ if (key.includes("todo") || key.includes("task")) {
53
+ return "[T]";
54
+ }
55
+ return "[*]";
56
+ }
57
+ export function formatCookbookToolFeedLine(input) {
58
+ return [
59
+ formatCookbookToolStatus(input.status),
60
+ formatCookbookToolIcon(input.name),
61
+ input.name,
62
+ input.params?.trim(),
63
+ ]
64
+ .filter(Boolean)
65
+ .join(" ");
66
+ }
67
+ //# sourceMappingURL=cookbook-tool-feed.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cookbook-tool-feed.js","sourceRoot":"","sources":["../../../src/cli/interactive/cookbook-tool-feed.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,UAAU,2BAA2B,CAAC,MAAc;IACxD,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAA;IAC9C,IAAI,UAAU,KAAK,MAAM,IAAI,UAAU,KAAK,WAAW,EAAE,CAAC;QACxD,OAAO,WAAW,CAAA;IACpB,CAAC;IACD,IAAI,UAAU,KAAK,OAAO,IAAI,UAAU,KAAK,QAAQ,EAAE,CAAC;QACtD,OAAO,OAAO,CAAA;IAChB,CAAC;IACD,IAAI,UAAU,KAAK,WAAW,EAAE,CAAC;QAC/B,OAAO,WAAW,CAAA;IACpB,CAAC;IACD,IAAI,UAAU,KAAK,SAAS,IAAI,UAAU,KAAK,aAAa,EAAE,CAAC;QAC7D,OAAO,SAAS,CAAA;IAClB,CAAC;IACD,OAAO,UAAU,IAAI,SAAS,CAAA;AAChC,CAAC;AAED,MAAM,UAAU,wBAAwB,CAAC,MAAc;IACrD,QAAQ,2BAA2B,CAAC,MAAM,CAAC,EAAE,CAAC;QAC5C,KAAK,WAAW;YACd,OAAO,KAAK,CAAA;QACd,KAAK,SAAS;YACZ,OAAO,KAAK,CAAA;QACd,KAAK,WAAW;YACd,OAAO,KAAK,CAAA;QACd,KAAK,OAAO;YACV,OAAO,KAAK,CAAA;QACd;YACE,OAAO,MAAM,CAAC,WAAW,EAAE,CAAA;IAC/B,CAAC;AACH,CAAC;AAED,MAAM,UAAU,sBAAsB,CAAC,IAAY;IACjD,MAAM,GAAG,GAAG,IAAI,CAAC,WAAW,EAAE,CAAA;IAE9B,IAAI,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;QACzB,OAAO,KAAK,CAAA;IACd,CAAC;IAED,IAAI,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC3E,OAAO,KAAK,CAAA;IACd,CAAC;IAED,IAAI,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;QACjF,OAAO,GAAG,CAAA;IACZ,CAAC;IAED,IACE,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC;QACpB,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC;QACrB,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC;QACrB,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC,EACtB,CAAC;QACD,OAAO,KAAK,CAAA;IACd,CAAC;IAED,IAAI,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;QACjD,OAAO,KAAK,CAAA;IACd,CAAC;IAED,OAAO,KAAK,CAAA;AACd,CAAC;AAED,MAAM,UAAU,0BAA0B,CAAC,KAI1C;IACC,OAAO;QACL,wBAAwB,CAAC,KAAK,CAAC,MAAM,CAAC;QACtC,sBAAsB,CAAC,KAAK,CAAC,IAAI,CAAC;QAClC,KAAK,CAAC,IAAI;QACV,KAAK,CAAC,MAAM,EAAE,IAAI,EAAE;KACrB;SACE,MAAM,CAAC,OAAO,CAAC;SACf,IAAI,CAAC,GAAG,CAAC,CAAA;AACd,CAAC"}
@@ -0,0 +1,9 @@
1
+ export type RunEditStats = {
2
+ editCount: number;
3
+ linesAdded: number;
4
+ linesRemoved: number;
5
+ paths: string[];
6
+ };
7
+ export declare function summarizeRunEditStats(trace: unknown[]): RunEditStats;
8
+ export declare function formatRunEditStatsLine(stats: RunEditStats): string | null;
9
+ //# sourceMappingURL=feed-run-stats.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"feed-run-stats.d.ts","sourceRoot":"","sources":["../../../src/cli/interactive/feed-run-stats.ts"],"names":[],"mappings":"AAGA,MAAM,MAAM,YAAY,GAAG;IACzB,SAAS,EAAE,MAAM,CAAA;IACjB,UAAU,EAAE,MAAM,CAAA;IAClB,YAAY,EAAE,MAAM,CAAA;IACpB,KAAK,EAAE,MAAM,EAAE,CAAA;CAChB,CAAA;AAED,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,OAAO,EAAE,GAAG,YAAY,CAoCpE;AAED,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,YAAY,GAAG,MAAM,GAAG,IAAI,CAazE"}
@@ -0,0 +1,51 @@
1
+ import { parseAgentTraceItem } from "../../backend/agent-trace.js";
2
+ import { parseTraceEditMeta } from "./trace-glyphs.js";
3
+ export function summarizeRunEditStats(trace) {
4
+ const paths = new Set();
5
+ let editCount = 0;
6
+ let linesAdded = 0;
7
+ let linesRemoved = 0;
8
+ for (const item of trace) {
9
+ const event = parseAgentTraceItem(item);
10
+ if (!event || event.kind !== "tool") {
11
+ continue;
12
+ }
13
+ const meta = parseTraceEditMeta(event);
14
+ if (!meta.action && meta.linesAdded === undefined && meta.linesRemoved === undefined) {
15
+ continue;
16
+ }
17
+ editCount += 1;
18
+ linesAdded += meta.linesAdded ?? 0;
19
+ linesRemoved += meta.linesRemoved ?? 0;
20
+ const raw = item && typeof item === "object" ? item : null;
21
+ const path = raw && typeof raw.path === "string"
22
+ ? raw.path
23
+ : raw && typeof raw.file === "string"
24
+ ? raw.file
25
+ : "";
26
+ if (path.trim()) {
27
+ paths.add(path.trim());
28
+ }
29
+ }
30
+ return {
31
+ editCount,
32
+ linesAdded,
33
+ linesRemoved,
34
+ paths: [...paths],
35
+ };
36
+ }
37
+ export function formatRunEditStatsLine(stats) {
38
+ if (stats.editCount === 0 && stats.linesAdded === 0 && stats.linesRemoved === 0) {
39
+ return null;
40
+ }
41
+ const parts = [`${stats.editCount} edit${stats.editCount === 1 ? "" : "s"}`];
42
+ if (stats.linesAdded > 0 || stats.linesRemoved > 0) {
43
+ parts.push(`+${stats.linesAdded}/-${stats.linesRemoved}`);
44
+ }
45
+ if (stats.paths.length > 0) {
46
+ const shown = stats.paths.slice(0, 2).join(", ");
47
+ parts.push(stats.paths.length > 2 ? `${shown}…` : shown);
48
+ }
49
+ return parts.join(" · ");
50
+ }
51
+ //# sourceMappingURL=feed-run-stats.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"feed-run-stats.js","sourceRoot":"","sources":["../../../src/cli/interactive/feed-run-stats.ts"],"names":[],"mappings":"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"}
@@ -1,9 +1,17 @@
1
1
  import type { PermissionMode } from "../../runtime/permissions.js";
2
2
  import type { ExecutionMode } from "./session-store.js";
3
+ export type HeaderStyle = "compact" | "verbose";
3
4
  export type HeaderOptions = {
4
5
  width?: number;
5
6
  color?: boolean;
7
+ style?: HeaderStyle;
6
8
  };
7
- export declare function renderInteractiveHeader(cwd: string, permissionMode?: PermissionMode, modelOverride?: string | null, executionMode?: ExecutionMode, options?: HeaderOptions): string[];
8
- export declare const INTERACTIVE_PROMPT = "\u203A ";
9
+ export type HeaderSmartState = {
10
+ modelThinking?: boolean | null;
11
+ modelFast?: boolean | null;
12
+ cursorAgentId?: string | null;
13
+ };
14
+ export declare function buildContextualStartupTip(authReady: boolean, executionMode: ExecutionMode): string;
15
+ export declare function renderInteractiveHeader(cwd: string, permissionMode?: PermissionMode, modelOverride?: string | null, executionMode?: ExecutionMode, options?: HeaderOptions, smart?: HeaderSmartState): string[];
16
+ export declare const INTERACTIVE_PROMPT = "> ";
9
17
  //# sourceMappingURL=header.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"header.d.ts","sourceRoot":"","sources":["../../../src/cli/interactive/header.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAA;AAQlE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAA;AAQvD,MAAM,MAAM,aAAa,GAAG;IAC1B,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,KAAK,CAAC,EAAE,OAAO,CAAA;CAChB,CAAA;AAUD,wBAAgB,uBAAuB,CACrC,GAAG,EAAE,MAAM,EACX,cAAc,CAAC,EAAE,cAAc,EAC/B,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,EAC7B,aAAa,GAAE,aAAuB,EACtC,OAAO,GAAE,aAAkB,GAC1B,MAAM,EAAE,CA+CV;AAUD,eAAO,MAAM,kBAAkB,YAAO,CAAA"}
1
+ {"version":3,"file":"header.d.ts","sourceRoot":"","sources":["../../../src/cli/interactive/header.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAA;AAUlE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAA;AAQvD,MAAM,MAAM,WAAW,GAAG,SAAS,GAAG,SAAS,CAAA;AAE/C,MAAM,MAAM,aAAa,GAAG;IAC1B,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,KAAK,CAAC,EAAE,WAAW,CAAA;CACpB,CAAA;AAoBD,MAAM,MAAM,gBAAgB,GAAG;IAC7B,aAAa,CAAC,EAAE,OAAO,GAAG,IAAI,CAAA;IAC9B,SAAS,CAAC,EAAE,OAAO,GAAG,IAAI,CAAA;IAC1B,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;CAC9B,CAAA;AAED,wBAAgB,yBAAyB,CACvC,SAAS,EAAE,OAAO,EAClB,aAAa,EAAE,aAAa,GAC3B,MAAM,CAQR;AAED,wBAAgB,uBAAuB,CACrC,GAAG,EAAE,MAAM,EACX,cAAc,CAAC,EAAE,cAAc,EAC/B,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,EAC7B,aAAa,GAAE,aAAuB,EACtC,OAAO,GAAE,aAAkB,EAC3B,KAAK,GAAE,gBAAqB,GAC3B,MAAM,EAAE,CAoBV;AAiID,eAAO,MAAM,kBAAkB,OAAO,CAAA"}
@@ -5,6 +5,8 @@ import { resolveApproval } from "../../runtime/approvals.js";
5
5
  import { resolveSandbox } from "../../runtime/sandbox.js";
6
6
  import { guessWorkspaceRoot } from "../../runtime/workspace.js";
7
7
  import { resolveEffectiveModel } from "../../config/models.js";
8
+ import { formatModelDisplay } from "../../config/model-preferences.js";
9
+ import { shortenPathForComposer } from "./composer-chrome.js";
8
10
  import { CLI_VERSION } from "../../version.js";
9
11
  import { renderCard } from "../ui/box.js";
10
12
  const YELLOW = "\x1b[33m";
@@ -16,7 +18,72 @@ function detectColor() {
16
18
  function detectWidth() {
17
19
  return typeof process.stdout.columns === "number" ? process.stdout.columns : 0;
18
20
  }
19
- export function renderInteractiveHeader(cwd, permissionMode, modelOverride, executionMode = "local", options = {}) {
21
+ function resolveHeaderStyle(options) {
22
+ if (options.style) {
23
+ return options.style;
24
+ }
25
+ if (process.env.PATZE_HEADER_VERBOSE === "1") {
26
+ return "verbose";
27
+ }
28
+ return "compact";
29
+ }
30
+ export function buildContextualStartupTip(authReady, executionMode) {
31
+ if (!authReady) {
32
+ return "Tip: run `patze login <api> <token> [userId]` then `/status --check`";
33
+ }
34
+ if (executionMode === "cloud") {
35
+ return "Tip: cloud mode · `/local` for pinned cwd · `/model` to switch";
36
+ }
37
+ return 'Tip: patze "<task>" one-shot · `/model` to switch · `/help` for commands';
38
+ }
39
+ export function renderInteractiveHeader(cwd, permissionMode, modelOverride, executionMode = "local", options = {}, smart = {}) {
40
+ const style = resolveHeaderStyle(options);
41
+ if (style === "verbose") {
42
+ return renderVerboseInteractiveHeader(cwd, permissionMode, modelOverride, executionMode, options, smart);
43
+ }
44
+ return renderCompactInteractiveHeader(cwd, permissionMode, modelOverride, executionMode, options, smart);
45
+ }
46
+ function renderCompactInteractiveHeader(cwd, permissionMode, modelOverride, executionMode, options, smart) {
47
+ const color = options.color ?? detectColor();
48
+ const width = options.width ?? detectWidth();
49
+ const config = loadConfig(cwd);
50
+ const authReady = isAuthConfigured(config);
51
+ const workspace = guessWorkspaceRoot(cwd) || cwd;
52
+ const mode = permissionMode ?? "read-only";
53
+ const permission = getPermissionModeDef(mode).label;
54
+ const model = formatModelDisplay(resolveEffectiveModel({
55
+ sessionOverride: modelOverride,
56
+ configModel: config.model,
57
+ }), {
58
+ thinking: smart.modelThinking ?? null,
59
+ fast: smart.modelFast ?? null,
60
+ }, smart.cursorAgentId);
61
+ const card = renderCard({
62
+ title: `>_ Patze Code (v${CLI_VERSION})`,
63
+ rows: [
64
+ { label: "model", value: `${model} /model to change` },
65
+ { label: "directory", value: shortenPathForComposer(workspace, 52) || workspace },
66
+ {
67
+ label: "session",
68
+ value: `${permission} · ${executionMode}${authReady ? "" : " · auth incomplete"}`,
69
+ },
70
+ ],
71
+ width,
72
+ color,
73
+ minInnerWidth: 36,
74
+ });
75
+ const lines = [...card];
76
+ const tip = buildContextualStartupTip(authReady, executionMode);
77
+ lines.push(color ? `${DIM}${tip}${RESET}` : tip);
78
+ if (!authReady) {
79
+ const warn = "Heads up: auth incomplete — run `patze login` or set PATZE_CODE_* env";
80
+ lines.push(color ? `${YELLOW}${warn}${RESET}` : warn);
81
+ }
82
+ lines.push(color ? `${DIM}${STAGE_NOTICE}${RESET}` : STAGE_NOTICE);
83
+ lines.push("");
84
+ return lines;
85
+ }
86
+ function renderVerboseInteractiveHeader(cwd, permissionMode, modelOverride, executionMode, options, smart) {
20
87
  const color = options.color ?? detectColor();
21
88
  const width = options.width ?? detectWidth();
22
89
  const config = loadConfig(cwd);
@@ -26,10 +93,13 @@ export function renderInteractiveHeader(cwd, permissionMode, modelOverride, exec
26
93
  const workspace = guessWorkspaceRoot(cwd);
27
94
  const mode = permissionMode ?? "read-only";
28
95
  const permission = getPermissionModeDef(mode).label;
29
- const model = resolveEffectiveModel({
96
+ const model = formatModelDisplay(resolveEffectiveModel({
30
97
  sessionOverride: modelOverride,
31
98
  configModel: config.model,
32
- });
99
+ }), {
100
+ thinking: smart.modelThinking ?? null,
101
+ fast: smart.modelFast ?? null,
102
+ }, smart.cursorAgentId);
33
103
  const card = renderCard({
34
104
  title: `Patze Code · v${CLI_VERSION}`,
35
105
  rows: [
@@ -64,5 +134,5 @@ const HEADER_TIPS = [
64
134
  "Cookbook feed: run · tool · agent stream (SSE) when logged in",
65
135
  "/login <api> <token> · /status --check to verify",
66
136
  ];
67
- export const INTERACTIVE_PROMPT = " ";
137
+ export const INTERACTIVE_PROMPT = "> ";
68
138
  //# sourceMappingURL=header.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"header.js","sourceRoot":"","sources":["../../../src/cli/interactive/header.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"header.js","sourceRoot":"","sources":["../../../src/cli/interactive/header.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAA;AACnE,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAA;AACnD,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAA;AACxD,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAA;AAC5D,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAA;AACzD,OAAO,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAA;AAC/D,OAAO,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAA;AAC9D,OAAO,EAAE,kBAAkB,EAAE,MAAM,mCAAmC,CAAA;AACtE,OAAO,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAA;AAE7D,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AAC9C,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AAEzC,MAAM,MAAM,GAAG,UAAU,CAAA;AACzB,MAAM,GAAG,GAAG,SAAS,CAAA;AACrB,MAAM,KAAK,GAAG,SAAS,CAAA;AAUvB,SAAS,WAAW;IAClB,OAAO,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAA;AAC/D,CAAC;AAED,SAAS,WAAW;IAClB,OAAO,OAAO,OAAO,CAAC,MAAM,CAAC,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAA;AAChF,CAAC;AAED,SAAS,kBAAkB,CAAC,OAAsB;IAChD,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;QAClB,OAAO,OAAO,CAAC,KAAK,CAAA;IACtB,CAAC;IACD,IAAI,OAAO,CAAC,GAAG,CAAC,oBAAoB,KAAK,GAAG,EAAE,CAAC;QAC7C,OAAO,SAAS,CAAA;IAClB,CAAC;IACD,OAAO,SAAS,CAAA;AAClB,CAAC;AAQD,MAAM,UAAU,yBAAyB,CACvC,SAAkB,EAClB,aAA4B;IAE5B,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,OAAO,sEAAsE,CAAA;IAC/E,CAAC;IACD,IAAI,aAAa,KAAK,OAAO,EAAE,CAAC;QAC9B,OAAO,gEAAgE,CAAA;IACzE,CAAC;IACD,OAAO,0EAA0E,CAAA;AACnF,CAAC;AAED,MAAM,UAAU,uBAAuB,CACrC,GAAW,EACX,cAA+B,EAC/B,aAA6B,EAC7B,gBAA+B,OAAO,EACtC,UAAyB,EAAE,EAC3B,QAA0B,EAAE;IAE5B,MAAM,KAAK,GAAG,kBAAkB,CAAC,OAAO,CAAC,CAAA;IACzC,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;QACxB,OAAO,8BAA8B,CACnC,GAAG,EACH,cAAc,EACd,aAAa,EACb,aAAa,EACb,OAAO,EACP,KAAK,CACN,CAAA;IACH,CAAC;IACD,OAAO,8BAA8B,CACnC,GAAG,EACH,cAAc,EACd,aAAa,EACb,aAAa,EACb,OAAO,EACP,KAAK,CACN,CAAA;AACH,CAAC;AAED,SAAS,8BAA8B,CACrC,GAAW,EACX,cAA0C,EAC1C,aAAwC,EACxC,aAA4B,EAC5B,OAAsB,EACtB,KAAuB;IAEvB,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,IAAI,WAAW,EAAE,CAAA;IAC5C,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,IAAI,WAAW,EAAE,CAAA;IAC5C,MAAM,MAAM,GAAG,UAAU,CAAC,GAAG,CAAC,CAAA;IAC9B,MAAM,SAAS,GAAG,gBAAgB,CAAC,MAAM,CAAC,CAAA;IAC1C,MAAM,SAAS,GAAG,kBAAkB,CAAC,GAAG,CAAC,IAAI,GAAG,CAAA;IAChD,MAAM,IAAI,GAAG,cAAc,IAAI,WAAW,CAAA;IAC1C,MAAM,UAAU,GAAG,oBAAoB,CAAC,IAAI,CAAC,CAAC,KAAK,CAAA;IACnD,MAAM,KAAK,GAAG,kBAAkB,CAC9B,qBAAqB,CAAC;QACpB,eAAe,EAAE,aAAa;QAC9B,WAAW,EAAE,MAAM,CAAC,KAAK;KAC1B,CAAC,EACF;QACE,QAAQ,EAAE,KAAK,CAAC,aAAa,IAAI,IAAI;QACrC,IAAI,EAAE,KAAK,CAAC,SAAS,IAAI,IAAI;KAC9B,EACD,KAAK,CAAC,aAAa,CACpB,CAAA;IAED,MAAM,IAAI,GAAG,UAAU,CAAC;QACtB,KAAK,EAAE,mBAAmB,WAAW,GAAG;QACxC,IAAI,EAAE;YACJ,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,GAAG,KAAK,oBAAoB,EAAE;YACvD,EAAE,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE,sBAAsB,CAAC,SAAS,EAAE,EAAE,CAAC,IAAI,SAAS,EAAE;YACjF;gBACE,KAAK,EAAE,SAAS;gBAChB,KAAK,EAAE,GAAG,UAAU,MAAM,aAAa,GAAG,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,oBAAoB,EAAE;aAClF;SACF;QACD,KAAK;QACL,KAAK;QACL,aAAa,EAAE,EAAE;KAClB,CAAC,CAAA;IAEF,MAAM,KAAK,GAAG,CAAC,GAAG,IAAI,CAAC,CAAA;IACvB,MAAM,GAAG,GAAG,yBAAyB,CAAC,SAAS,EAAE,aAAa,CAAC,CAAA;IAC/D,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,KAAK,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAA;IAEhD,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,MAAM,IAAI,GAAG,uEAAuE,CAAA;QACpF,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,MAAM,GAAG,IAAI,GAAG,KAAK,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAA;IACvD,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,YAAY,GAAG,KAAK,EAAE,CAAC,CAAC,CAAC,YAAY,CAAC,CAAA;IAClE,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;IACd,OAAO,KAAK,CAAA;AACd,CAAC;AAED,SAAS,8BAA8B,CACrC,GAAW,EACX,cAA0C,EAC1C,aAAwC,EACxC,aAA4B,EAC5B,OAAsB,EACtB,KAAuB;IAEvB,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,IAAI,WAAW,EAAE,CAAA;IAC5C,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,IAAI,WAAW,EAAE,CAAA;IAE5C,MAAM,MAAM,GAAG,UAAU,CAAC,GAAG,CAAC,CAAA;IAC9B,MAAM,SAAS,GAAG,gBAAgB,CAAC,MAAM,CAAC,CAAA;IAC1C,MAAM,QAAQ,GAAG,eAAe,CAAC,MAAM,CAAC,YAAY,CAAC,CAAA;IACrD,MAAM,OAAO,GAAG,cAAc,CAAC,MAAM,CAAC,WAAW,CAAC,CAAA;IAClD,MAAM,SAAS,GAAG,kBAAkB,CAAC,GAAG,CAAC,CAAA;IACzC,MAAM,IAAI,GAAG,cAAc,IAAI,WAAW,CAAA;IAC1C,MAAM,UAAU,GAAG,oBAAoB,CAAC,IAAI,CAAC,CAAC,KAAK,CAAA;IACnD,MAAM,KAAK,GAAG,kBAAkB,CAC9B,qBAAqB,CAAC;QACpB,eAAe,EAAE,aAAa;QAC9B,WAAW,EAAE,MAAM,CAAC,KAAK;KAC1B,CAAC,EACF;QACE,QAAQ,EAAE,KAAK,CAAC,aAAa,IAAI,IAAI;QACrC,IAAI,EAAE,KAAK,CAAC,SAAS,IAAI,IAAI;KAC9B,EACD,KAAK,CAAC,aAAa,CACpB,CAAA;IAED,MAAM,IAAI,GAAG,UAAU,CAAC;QACtB,KAAK,EAAE,iBAAiB,WAAW,EAAE;QACrC,IAAI,EAAE;YACJ,EAAE,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE,SAAS,EAAE;YACxC,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE;YAChC,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,aAAa,EAAE;YAC1C,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,YAAY,EAAE;YAC5D,EAAE,KAAK,EAAE,YAAY,EAAE,KAAK,EAAE,UAAU,EAAE;YAC1C,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,GAAG,QAAQ,CAAC,IAAI,MAAM,OAAO,CAAC,IAAI,EAAE,EAAE;SACjE;QACD,KAAK;QACL,KAAK;QACL,aAAa,EAAE,EAAE;KAClB,CAAC,CAAA;IAEF,MAAM,KAAK,GAAG,CAAC,GAAG,IAAI,CAAC,CAAA;IACvB,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,YAAY,GAAG,KAAK,EAAE,CAAC,CAAC,CAAC,YAAY,CAAC,CAAA;IAElE,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,MAAM,IAAI,GAAG,+DAA+D,CAAA;QAC5E,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,MAAM,GAAG,IAAI,GAAG,KAAK,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAA;QACrD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;IAChB,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,kCAAkC,CAAC,CAAA;IAC9C,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,GAAG,OAAO,KAAK,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAA;IACjD,KAAK,MAAM,GAAG,IAAI,WAAW,EAAE,CAAC;QAC9B,KAAK,CAAC,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC,CAAA;IACxB,CAAC;IAED,OAAO,KAAK,CAAA;AACd,CAAC;AAED,MAAM,YAAY,GAAG,6CAA6C,CAAA;AAElE,MAAM,WAAW,GAAsB;IACrC,4DAA4D;IAC5D,+DAA+D;IAC/D,kDAAkD;CACnD,CAAA;AAED,MAAM,CAAC,MAAM,kBAAkB,GAAG,IAAI,CAAA"}
@@ -0,0 +1,8 @@
1
+ import type { AgentEvent } from "./agent-events.js";
2
+ export type JsonAgentStreamWriter = {
3
+ write: (event: AgentEvent) => void;
4
+ writeRaw: (payload: Record<string, unknown>) => void;
5
+ flush: () => void;
6
+ };
7
+ export declare function createJsonAgentStreamWriter(writeLine?: (line: string) => void): JsonAgentStreamWriter;
8
+ //# sourceMappingURL=json-agent-stream.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"json-agent-stream.d.ts","sourceRoot":"","sources":["../../../src/cli/interactive/json-agent-stream.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAA;AAEnD,MAAM,MAAM,qBAAqB,GAAG;IAClC,KAAK,EAAE,CAAC,KAAK,EAAE,UAAU,KAAK,IAAI,CAAA;IAClC,QAAQ,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,CAAA;IACpD,KAAK,EAAE,MAAM,IAAI,CAAA;CAClB,CAAA;AAED,wBAAgB,2BAA2B,CACzC,SAAS,GAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAkD,GAC9E,qBAAqB,CAYvB"}
@@ -0,0 +1,14 @@
1
+ export function createJsonAgentStreamWriter(writeLine = (line) => process.stdout.write(`${line}\n`)) {
2
+ return {
3
+ write(event) {
4
+ writeLine(JSON.stringify({ ...event, ts: Date.now() }));
5
+ },
6
+ writeRaw(payload) {
7
+ writeLine(JSON.stringify({ ...payload, ts: Date.now() }));
8
+ },
9
+ flush() {
10
+ // stdout is line-buffered for JSONL consumers
11
+ },
12
+ };
13
+ }
14
+ //# sourceMappingURL=json-agent-stream.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"json-agent-stream.js","sourceRoot":"","sources":["../../../src/cli/interactive/json-agent-stream.ts"],"names":[],"mappings":"AAQA,MAAM,UAAU,2BAA2B,CACzC,YAAoC,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,IAAI,CAAC;IAE/E,OAAO;QACL,KAAK,CAAC,KAAiB;YACrB,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,GAAG,KAAK,EAAE,EAAE,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,CAAA;QACzD,CAAC;QACD,QAAQ,CAAC,OAAgC;YACvC,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,GAAG,OAAO,EAAE,EAAE,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,CAAA;QAC3D,CAAC;QACD,KAAK;YACH,8CAA8C;QAChD,CAAC;KACF,CAAA;AACH,CAAC"}
@@ -1,9 +1,11 @@
1
1
  import { isComposerNewlineKey, isComposerSubmitKey } from "./composer-keys.js";
2
+ import { type ComposerChrome } from "./composer-chrome.js";
2
3
  export type LineEditorOptions = {
3
4
  prompt: string;
4
5
  color: boolean;
5
6
  input?: NodeJS.ReadStream;
6
7
  output?: NodeJS.WriteStream;
8
+ getChrome?: ComposerChrome | (() => ComposerChrome);
7
9
  };
8
10
  export type SubmitResult = {
9
11
  type: "line";
@@ -23,6 +25,7 @@ export declare class SlashLineEditor {
23
25
  private readonly output;
24
26
  private readonly prompt;
25
27
  private readonly color;
28
+ private readonly getChrome?;
26
29
  private readonly history;
27
30
  private buffer;
28
31
  private cursor;
@@ -30,6 +33,8 @@ export declare class SlashLineEditor {
30
33
  private menuDismissed;
31
34
  private historyIndex;
32
35
  private stashedBuffer;
36
+ private pasteMode;
37
+ private pasteBuffer;
33
38
  /** Total lines in the last drawn composer frame (box + slash menu). */
34
39
  private renderedFrameRows;
35
40
  /** Cursor row within the last drawn frame (used for accurate rewind). */
@@ -45,6 +50,9 @@ export declare class SlashLineEditor {
45
50
  private historyNext;
46
51
  private pushHistory;
47
52
  private insertNewline;
53
+ private insertBulk;
54
+ private handleBracketedPasteChunk;
55
+ private finishBracketedPaste;
48
56
  private cursorLineCol;
49
57
  private render;
50
58
  private commitLine;
@@ -67,6 +75,7 @@ declare function buildComposerFrameLines(input: {
67
75
  buffer: string;
68
76
  color?: boolean;
69
77
  menuLines?: string[];
78
+ chrome?: ComposerChrome;
70
79
  }): string[];
71
80
  export { buildComposerFrameLines, formatComposerRow, isComposerNewlineKey, isComposerSubmitKey, padVisible, stripAnsi };
72
81
  //# sourceMappingURL=line-editor.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"line-editor.d.ts","sourceRoot":"","sources":["../../../src/cli/interactive/line-editor.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,oBAAoB,EACpB,mBAAmB,EACpB,MAAM,oBAAoB,CAAA;AAgB3B,MAAM,MAAM,iBAAiB,GAAG;IAC9B,MAAM,EAAE,MAAM,CAAA;IACd,KAAK,EAAE,OAAO,CAAA;IACd,KAAK,CAAC,EAAE,MAAM,CAAC,UAAU,CAAA;IACzB,MAAM,CAAC,EAAE,MAAM,CAAC,WAAW,CAAA;CAC5B,CAAA;AAED,MAAM,MAAM,YAAY,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GAAG;IAAE,IAAI,EAAE,KAAK,CAAA;CAAE,CAAA;AAU5E;;;;;;GAMG;AACH,qBAAa,eAAe;IAC1B,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAmB;IACzC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAoB;IAC3C,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAQ;IAC/B,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAS;IAC/B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAe;IAEvC,OAAO,CAAC,MAAM,CAAK;IACnB,OAAO,CAAC,MAAM,CAAI;IAClB,OAAO,CAAC,aAAa,CAAI;IACzB,OAAO,CAAC,aAAa,CAAQ;IAC7B,OAAO,CAAC,YAAY,CAAK;IACzB,OAAO,CAAC,aAAa,CAAK;IAC1B,uEAAuE;IACvE,OAAO,CAAC,iBAAiB,CAAI;IAC7B,yEAAyE;IACzE,OAAO,CAAC,kBAAkB,CAAI;gBAElB,OAAO,EAAE,iBAAiB;IAOhC,QAAQ,IAAI,OAAO,CAAC,YAAY,CAAC;IAmDvC,OAAO,CAAC,SAAS;IAmHjB,OAAO,CAAC,WAAW;IAQnB,OAAO,CAAC,SAAS;IAMjB,OAAO,CAAC,WAAW;IAMnB,OAAO,CAAC,SAAS;IAOjB,OAAO,CAAC,WAAW;IAcnB,OAAO,CAAC,WAAW;IAcnB,OAAO,CAAC,WAAW;IASnB,OAAO,CAAC,aAAa;IAMrB,OAAO,CAAC,aAAa;IAQrB,OAAO,CAAC,MAAM;IAuEd,OAAO,CAAC,UAAU;CAUnB;AAeD,iBAAS,iBAAiB,CAAC,KAAK,EAAE;IAChC,MAAM,EAAE,MAAM,CAAA;IACd,IAAI,EAAE,MAAM,CAAA;IACZ,UAAU,EAAE,MAAM,CAAA;IAClB,eAAe,EAAE,OAAO,CAAA;IACxB,WAAW,EAAE,MAAM,CAAA;IACnB,GAAG,EAAE,MAAM,CAAA;IACX,KAAK,EAAE,MAAM,CAAA;CACd,GAAG,MAAM,CAaT;AAED,iBAAS,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAMvD;AAqBD,iBAAS,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAEvC;AAED,gEAAgE;AAChE,iBAAS,uBAAuB,CAAC,KAAK,EAAE;IACtC,KAAK,EAAE,MAAM,CAAA;IACb,MAAM,EAAE,MAAM,CAAA;IACd,MAAM,EAAE,MAAM,CAAA;IACd,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,SAAS,CAAC,EAAE,MAAM,EAAE,CAAA;CACrB,GAAG,MAAM,EAAE,CAgCX;AAED,OAAO,EAAE,uBAAuB,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,UAAU,EAAE,SAAS,EAAE,CAAA"}
1
+ {"version":3,"file":"line-editor.d.ts","sourceRoot":"","sources":["../../../src/cli/interactive/line-editor.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,6 @@
1
1
  import { emitKeypressEvents } from "node:readline";
2
2
  import { isComposerNewlineKey, isComposerSubmitKey, } from "./composer-keys.js";
3
+ import { formatComposerFooterRow, resolveComposerChrome, } from "./composer-chrome.js";
3
4
  import { clampSelection, commandRequiresArg, computeSlashMenuItems, moveSelection, renderSlashMenu, } from "./slash-menu.js";
4
5
  import { isHistorySafe } from "./redact-input.js";
5
6
  const PLACEHOLDER = "Ask anything…";
@@ -7,6 +8,10 @@ const DIM = "\x1b[2m";
7
8
  const RESET = "\x1b[0m";
8
9
  const BORDER = "\x1b[2m";
9
10
  const BORDER_ACTIVE = "\x1b[32m";
11
+ const HIDE_CURSOR = "\x1b[?25l";
12
+ const SHOW_CURSOR = "\x1b[?25h";
13
+ const BRACKETED_PASTE_START = "\x1b[200~";
14
+ const BRACKETED_PASTE_END = "\x1b[201~";
10
15
  /**
11
16
  * A minimal raw-mode line editor with a live slash-command menu.
12
17
  * TTY-only; the piped / scripted path keeps using readline elsewhere,
@@ -19,6 +24,7 @@ export class SlashLineEditor {
19
24
  output;
20
25
  prompt;
21
26
  color;
27
+ getChrome;
22
28
  history = [];
23
29
  buffer = "";
24
30
  cursor = 0;
@@ -26,6 +32,8 @@ export class SlashLineEditor {
26
32
  menuDismissed = false;
27
33
  historyIndex = -1;
28
34
  stashedBuffer = "";
35
+ pasteMode = false;
36
+ pasteBuffer = "";
29
37
  /** Total lines in the last drawn composer frame (box + slash menu). */
30
38
  renderedFrameRows = 0;
31
39
  /** Cursor row within the last drawn frame (used for accurate rewind). */
@@ -35,6 +43,7 @@ export class SlashLineEditor {
35
43
  this.output = options.output ?? process.stdout;
36
44
  this.prompt = options.prompt;
37
45
  this.color = options.color;
46
+ this.getChrome = options.getChrome;
38
47
  }
39
48
  async readLine() {
40
49
  this.buffer = "";
@@ -43,6 +52,8 @@ export class SlashLineEditor {
43
52
  this.menuDismissed = false;
44
53
  this.historyIndex = -1;
45
54
  this.stashedBuffer = "";
55
+ this.pasteMode = false;
56
+ this.pasteBuffer = "";
46
57
  this.renderedFrameRows = 0;
47
58
  this.lastCursorFrameRow = 0;
48
59
  emitKeypressEvents(this.input);
@@ -58,6 +69,7 @@ export class SlashLineEditor {
58
69
  this.input.setRawMode(wasRaw);
59
70
  }
60
71
  this.input.pause();
72
+ this.output.write(SHOW_CURSOR);
61
73
  resolvePromise(result);
62
74
  };
63
75
  const onKeypress = (str, key) => {
@@ -179,7 +191,24 @@ export class SlashLineEditor {
179
191
  }
180
192
  return "none";
181
193
  }
194
+ if (this.pasteMode && str) {
195
+ this.handleBracketedPasteChunk(str);
196
+ return "none";
197
+ }
198
+ if (str?.includes(BRACKETED_PASTE_START)) {
199
+ this.pasteMode = true;
200
+ const startIndex = str.indexOf(BRACKETED_PASTE_START);
201
+ this.pasteBuffer = str.slice(startIndex + BRACKETED_PASTE_START.length);
202
+ if (this.pasteBuffer.includes(BRACKETED_PASTE_END)) {
203
+ this.finishBracketedPaste();
204
+ }
205
+ return "none";
206
+ }
182
207
  if (str && !key.ctrl && !key.meta && isPrintable(str)) {
208
+ if (str.length > 1) {
209
+ this.insertBulk(str);
210
+ return "none";
211
+ }
183
212
  this.buffer = this.buffer.slice(0, this.cursor) + str + this.buffer.slice(this.cursor);
184
213
  this.cursor += str.length;
185
214
  this.afterEdit();
@@ -251,6 +280,28 @@ export class SlashLineEditor {
251
280
  this.cursor += 1;
252
281
  this.afterEdit();
253
282
  }
283
+ insertBulk(text) {
284
+ const normalized = text.replace(/\r\n/g, "\n").replace(/\r/g, "\n");
285
+ if (!normalized) {
286
+ return;
287
+ }
288
+ this.buffer = this.buffer.slice(0, this.cursor) + normalized + this.buffer.slice(this.cursor);
289
+ this.cursor += normalized.length;
290
+ this.afterEdit();
291
+ }
292
+ handleBracketedPasteChunk(str) {
293
+ this.pasteBuffer += str;
294
+ if (this.pasteBuffer.includes(BRACKETED_PASTE_END)) {
295
+ this.finishBracketedPaste();
296
+ }
297
+ }
298
+ finishBracketedPaste() {
299
+ const endIndex = this.pasteBuffer.indexOf(BRACKETED_PASTE_END);
300
+ const content = this.pasteBuffer.slice(0, endIndex);
301
+ this.pasteMode = false;
302
+ this.pasteBuffer = "";
303
+ this.insertBulk(content);
304
+ }
254
305
  cursorLineCol() {
255
306
  const before = this.buffer.slice(0, this.cursor);
256
307
  const line = before.split("\n").length - 1;
@@ -293,9 +344,18 @@ export class SlashLineEditor {
293
344
  const top = `${borderColor}╭${"─".repeat(Math.max(1, width - 2))}╮${borderReset}`;
294
345
  const mids = inputRows.map((rowText) => `${borderColor}│${borderReset} ${rowText} ${borderColor}│${borderReset}`);
295
346
  const bottom = `${borderColor}╰${"─".repeat(Math.max(1, width - 2))}╯${borderReset}`;
296
- const frameRows = 2 + inputRows.length + menuLines.length;
347
+ const chrome = resolveComposerChrome(this.getChrome);
348
+ const footerText = formatComposerFooterRow({
349
+ innerWidth,
350
+ left: chrome.left,
351
+ right: chrome.right,
352
+ dim: DIM,
353
+ reset: RESET,
354
+ });
355
+ const footer = `${borderColor}│${borderReset} ${footerText} ${borderColor}│${borderReset}`;
356
+ const frameRows = 3 + inputRows.length + menuLines.length;
297
357
  const previousFrameRows = this.renderedFrameRows;
298
- let out = "";
358
+ let out = HIDE_CURSOR;
299
359
  if (previousFrameRows > 0) {
300
360
  out += `\x1b[${this.lastCursorFrameRow}A`;
301
361
  out += "\r\x1b[J";
@@ -303,11 +363,11 @@ export class SlashLineEditor {
303
363
  else {
304
364
  out += "\r";
305
365
  }
306
- out += `${top}\n${mids.join("\n")}\n${bottom}`;
366
+ out += `${top}\n${mids.join("\n")}\n${footer}\n${bottom}`;
307
367
  for (const line of menuLines) {
308
368
  out += `\n${line}`;
309
369
  }
310
- const cursorUp = menuLines.length + 1 + (inputRows.length - 1 - cursorLine);
370
+ const cursorUp = menuLines.length + 2 + (inputRows.length - 1 - cursorLine);
311
371
  if (cursorUp > 0) {
312
372
  out += `\x1b[${cursorUp}A`;
313
373
  }
@@ -316,6 +376,7 @@ export class SlashLineEditor {
316
376
  if (col > 0) {
317
377
  out += `\x1b[${col}C`;
318
378
  }
379
+ out += SHOW_CURSOR;
319
380
  this.output.write(out);
320
381
  this.renderedFrameRows = frameRows;
321
382
  this.lastCursorFrameRow = 1 + cursorLine;
@@ -327,7 +388,7 @@ export class SlashLineEditor {
327
388
  else {
328
389
  this.output.write("\r\x1b[J");
329
390
  }
330
- this.output.write("\n");
391
+ this.output.write(`${SHOW_CURSOR}\n`);
331
392
  this.renderedFrameRows = 0;
332
393
  this.lastCursorFrameRow = 0;
333
394
  }
@@ -409,8 +470,17 @@ function buildComposerFrameLines(input) {
409
470
  const borderReset = color ? RESET : "";
410
471
  const top = `${borderColor}╭${"─".repeat(Math.max(1, width - 2))}╮${borderReset}`;
411
472
  const mids = inputRows.map((rowText) => `${borderColor}│${borderReset} ${rowText} ${borderColor}│${borderReset}`);
473
+ const chrome = resolveComposerChrome(input.chrome);
474
+ const footerText = formatComposerFooterRow({
475
+ innerWidth,
476
+ left: chrome.left,
477
+ right: chrome.right,
478
+ dim: DIM,
479
+ reset: RESET,
480
+ });
481
+ const footer = `${borderColor}│${borderReset} ${footerText} ${borderColor}│${borderReset}`;
412
482
  const bottom = `${borderColor}╰${"─".repeat(Math.max(1, width - 2))}╯${borderReset}`;
413
- return [top, ...mids, bottom, ...menuLines];
483
+ return [top, ...mids, footer, bottom, ...menuLines];
414
484
  }
415
485
  export { buildComposerFrameLines, formatComposerRow, isComposerNewlineKey, isComposerSubmitKey, padVisible, stripAnsi };
416
486
  //# sourceMappingURL=line-editor.js.map