codetyper-cli 0.4.0 → 0.4.1

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.
package/dist/index.js CHANGED
@@ -6317,9 +6317,10 @@ var init_ui = __esm(() => {
6317
6317
  });
6318
6318
 
6319
6319
  // src/constants/terminal.ts
6320
- var DISABLE_MOUSE_TRACKING;
6320
+ var DISABLE_MOUSE_TRACKING, TERMINAL_RESET;
6321
6321
  var init_terminal = __esm(() => {
6322
6322
  DISABLE_MOUSE_TRACKING = "\x1B[?1006l" + "\x1B[?1015l" + "\x1B[?1003l" + "\x1B[?1002l" + "\x1B[?1000l";
6323
+ TERMINAL_RESET = DISABLE_MOUSE_TRACKING + "\x1B[?25h" + "\x1B[?1049l" + "\x1B[>4;0m" + "\x1B[?2004l";
6323
6324
  });
6324
6325
 
6325
6326
  // node_modules/@inquirer/core/dist/lib/key.js
@@ -27362,15 +27363,17 @@ var init_dist16 = __esm(() => {
27362
27363
  });
27363
27364
 
27364
27365
  // src/utils/core/terminal.ts
27366
+ import { writeSync } from "fs";
27365
27367
  var spinner = null, exitHandlersRegistered = false, emergencyTerminalCleanup = () => {
27366
27368
  try {
27367
- process.stdout.write(DISABLE_MOUSE_TRACKING + TERMINAL_SEQUENCES.SHOW_CURSOR + TERMINAL_SEQUENCES.LEAVE_ALTERNATE_SCREEN);
27369
+ writeSync(1, TERMINAL_RESET);
27368
27370
  } catch {}
27369
27371
  }, registerExitHandlers = () => {
27370
27372
  if (exitHandlersRegistered)
27371
27373
  return;
27372
27374
  exitHandlersRegistered = true;
27373
27375
  process.on("exit", emergencyTerminalCleanup);
27376
+ process.on("beforeExit", emergencyTerminalCleanup);
27374
27377
  process.on("SIGINT", () => {
27375
27378
  emergencyTerminalCleanup();
27376
27379
  process.exit(130);
@@ -27379,6 +27382,18 @@ var spinner = null, exitHandlersRegistered = false, emergencyTerminalCleanup = (
27379
27382
  emergencyTerminalCleanup();
27380
27383
  process.exit(143);
27381
27384
  });
27385
+ process.on("SIGHUP", () => {
27386
+ emergencyTerminalCleanup();
27387
+ process.exit(128);
27388
+ });
27389
+ process.on("uncaughtException", () => {
27390
+ emergencyTerminalCleanup();
27391
+ process.exit(1);
27392
+ });
27393
+ process.on("unhandledRejection", () => {
27394
+ emergencyTerminalCleanup();
27395
+ process.exit(1);
27396
+ });
27382
27397
  }, successMessage = (message) => {
27383
27398
  console.log(source_default.green("✓") + " " + message);
27384
27399
  }, errorMessage = (message) => {
@@ -27420,7 +27435,9 @@ var spinner = null, exitHandlersRegistered = false, emergencyTerminalCleanup = (
27420
27435
  }, filePath = (path2) => source_default.cyan(path2), enterFullscreen = () => {
27421
27436
  process.stdout.write(TERMINAL_SEQUENCES.ENTER_ALTERNATE_SCREEN + TERMINAL_SEQUENCES.CLEAR_SCREEN + TERMINAL_SEQUENCES.CURSOR_HOME);
27422
27437
  }, exitFullscreen = () => {
27423
- process.stdout.write(DISABLE_MOUSE_TRACKING + TERMINAL_SEQUENCES.SHOW_CURSOR + TERMINAL_SEQUENCES.LEAVE_ALTERNATE_SCREEN);
27438
+ try {
27439
+ writeSync(1, TERMINAL_RESET);
27440
+ } catch {}
27424
27441
  }, clearScreen = () => {
27425
27442
  process.stdout.write(TERMINAL_SEQUENCES.CLEAR_SCREEN + TERMINAL_SEQUENCES.CLEAR_SCROLLBACK + TERMINAL_SEQUENCES.CURSOR_HOME);
27426
27443
  }, askConfirm = async (message) => {
@@ -41869,7 +41886,7 @@ function convertToDebugSymbols(symbols) {
41869
41886
  });
41870
41887
  if (env2.OTUI_DEBUG_FFI && globalFFILogWriter) {
41871
41888
  const writer = globalFFILogWriter;
41872
- const writeSync = (msg) => {
41889
+ const writeSync2 = (msg) => {
41873
41890
  const buffer = new TextEncoder().encode(msg + `
41874
41891
  `);
41875
41892
  writer.write(buffer);
@@ -41878,9 +41895,9 @@ function convertToDebugSymbols(symbols) {
41878
41895
  Object.entries(symbols).forEach(([key, value]) => {
41879
41896
  if (typeof value === "function") {
41880
41897
  debugSymbols[key] = (...args) => {
41881
- writeSync(`${key}(${args.map((arg) => String(arg)).join(", ")})`);
41898
+ writeSync2(`${key}(${args.map((arg) => String(arg)).join(", ")})`);
41882
41899
  const result = value(...args);
41883
- writeSync(`${key} returned: ${String(result)}`);
41900
+ writeSync2(`${key} returned: ${String(result)}`);
41884
41901
  return result;
41885
41902
  };
41886
41903
  }
@@ -65647,6 +65664,7 @@ var init_app = __esm(async () => {
65647
65664
  logs: [],
65648
65665
  currentToolCall: null,
65649
65666
  permissionRequest: null,
65667
+ planApprovalPrompt: null,
65650
65668
  learningPrompt: null,
65651
65669
  thinkingMessage: null,
65652
65670
  sessionId: null,
@@ -65691,6 +65709,7 @@ var init_app = __esm(async () => {
65691
65709
  const logs = () => store.logs;
65692
65710
  const currentToolCall = () => store.currentToolCall;
65693
65711
  const permissionRequest = () => store.permissionRequest;
65712
+ const planApprovalPrompt = () => store.planApprovalPrompt;
65694
65713
  const learningPrompt = () => store.learningPrompt;
65695
65714
  const thinkingMessage = () => store.thinkingMessage;
65696
65715
  const sessionId = () => store.sessionId;
@@ -65787,6 +65806,9 @@ var init_app = __esm(async () => {
65787
65806
  const setPermissionRequest = (request) => {
65788
65807
  setStore("permissionRequest", request);
65789
65808
  };
65809
+ const setPlanApprovalPrompt = (prompt2) => {
65810
+ setStore("planApprovalPrompt", prompt2);
65811
+ };
65790
65812
  const setLearningPrompt = (prompt2) => {
65791
65813
  setStore("learningPrompt", prompt2);
65792
65814
  };
@@ -66068,7 +66090,7 @@ var init_app = __esm(async () => {
66068
66090
  });
66069
66091
  };
66070
66092
  const isInputLocked = () => {
66071
- return store.mode === "thinking" || store.mode === "tool_execution" || store.mode === "permission_prompt";
66093
+ return store.mode === "thinking" || store.mode === "tool_execution" || store.mode === "permission_prompt" || store.mode === "plan_approval";
66072
66094
  };
66073
66095
  return {
66074
66096
  mode,
@@ -66080,6 +66102,7 @@ var init_app = __esm(async () => {
66080
66102
  logs,
66081
66103
  currentToolCall,
66082
66104
  permissionRequest,
66105
+ planApprovalPrompt,
66083
66106
  learningPrompt,
66084
66107
  thinkingMessage,
66085
66108
  sessionId,
@@ -66119,6 +66142,7 @@ var init_app = __esm(async () => {
66119
66142
  setCurrentToolCall,
66120
66143
  updateToolCall,
66121
66144
  setPermissionRequest,
66145
+ setPlanApprovalPrompt,
66122
66146
  setLearningPrompt,
66123
66147
  setThinkingMessage,
66124
66148
  setSessionInfo,
@@ -66175,6 +66199,7 @@ var init_app = __esm(async () => {
66175
66199
  logs: [],
66176
66200
  currentToolCall: null,
66177
66201
  permissionRequest: null,
66202
+ planApprovalPrompt: null,
66178
66203
  learningPrompt: null,
66179
66204
  thinkingMessage: null,
66180
66205
  sessionId: null,
@@ -66213,6 +66238,7 @@ var init_app = __esm(async () => {
66213
66238
  logs: storeRef.logs(),
66214
66239
  currentToolCall: storeRef.currentToolCall(),
66215
66240
  permissionRequest: storeRef.permissionRequest(),
66241
+ planApprovalPrompt: storeRef.planApprovalPrompt(),
66216
66242
  learningPrompt: storeRef.learningPrompt(),
66217
66243
  thinkingMessage: storeRef.thinkingMessage(),
66218
66244
  sessionId: storeRef.sessionId(),
@@ -66277,6 +66303,11 @@ var init_app = __esm(async () => {
66277
66303
  return;
66278
66304
  storeRef.setPermissionRequest(request);
66279
66305
  },
66306
+ setPlanApprovalPrompt: (prompt2) => {
66307
+ if (!storeRef)
66308
+ return;
66309
+ storeRef.setPlanApprovalPrompt(prompt2);
66310
+ },
66280
66311
  setLearningPrompt: (prompt2) => {
66281
66312
  if (!storeRef)
66282
66313
  return;
@@ -94036,7 +94067,7 @@ var init_semantic_search = __esm(() => {
94036
94067
  var version_default;
94037
94068
  var init_version = __esm(() => {
94038
94069
  version_default = {
94039
- version: "0.3.0"
94070
+ version: "0.4.1"
94040
94071
  };
94041
94072
  });
94042
94073
 
@@ -108063,6 +108094,158 @@ var getFiles = (dir, cwd, maxDepth = FILE_PICKER_DEFAULTS.MAX_DEPTH, currentDept
108063
108094
 
108064
108095
  // src/tui-solid/app.tsx
108065
108096
  init_terminal();
108097
+
108098
+ // src/constants/clipboard.ts
108099
+ var OSC52_SEQUENCE_PREFIX = "\x1B]52;c;";
108100
+ var OSC52_SEQUENCE_SUFFIX = "\x07";
108101
+ var TMUX_DCS_PREFIX = "\x1BPtmux;\x1B";
108102
+ var TMUX_DCS_SUFFIX = "\x1B\\";
108103
+ var TMUX_ENV_VAR = "TMUX";
108104
+ var SCREEN_ENV_VAR = "STY";
108105
+ var WAYLAND_DISPLAY_ENV_VAR = "WAYLAND_DISPLAY";
108106
+ var CLIPBOARD_COMMAND_TIMEOUT_MS = 5000;
108107
+
108108
+ // src/services/clipboard/run-command.ts
108109
+ import { spawn as spawn8, execSync as execSync2 } from "child_process";
108110
+ var runCommand2 = (command, args) => {
108111
+ return new Promise((resolve4, reject) => {
108112
+ const proc = spawn8(command, args);
108113
+ const stdout = [];
108114
+ let stderr = "";
108115
+ const timer2 = setTimeout(() => {
108116
+ proc.kill();
108117
+ reject(new Error(`Command timed out after ${CLIPBOARD_COMMAND_TIMEOUT_MS}ms: ${command}`));
108118
+ }, CLIPBOARD_COMMAND_TIMEOUT_MS);
108119
+ proc.stdout.on("data", (data) => stdout.push(data));
108120
+ proc.stderr.on("data", (data) => {
108121
+ stderr += data.toString();
108122
+ });
108123
+ proc.on("close", (code) => {
108124
+ clearTimeout(timer2);
108125
+ if (code === 0) {
108126
+ resolve4({ stdout: Buffer.concat(stdout), stderr });
108127
+ } else {
108128
+ reject(new Error(`Command failed with code ${code}: ${stderr}`));
108129
+ }
108130
+ });
108131
+ proc.on("error", (error49) => {
108132
+ clearTimeout(timer2);
108133
+ reject(error49);
108134
+ });
108135
+ });
108136
+ };
108137
+ var runCommandText = async (command, args) => {
108138
+ const { stdout } = await runCommand2(command, args);
108139
+ return stdout.toString().trim();
108140
+ };
108141
+ var runCommandWithStdin = (command, args, input) => {
108142
+ return new Promise((resolve4, reject) => {
108143
+ const proc = spawn8(command, args, {
108144
+ stdio: ["pipe", "ignore", "ignore"]
108145
+ });
108146
+ const timer2 = setTimeout(() => {
108147
+ proc.kill();
108148
+ reject(new Error(`Command timed out after ${CLIPBOARD_COMMAND_TIMEOUT_MS}ms: ${command}`));
108149
+ }, CLIPBOARD_COMMAND_TIMEOUT_MS);
108150
+ proc.on("close", (code) => {
108151
+ clearTimeout(timer2);
108152
+ if (code === 0) {
108153
+ resolve4();
108154
+ } else {
108155
+ reject(new Error(`Command failed with code ${code}: ${command}`));
108156
+ }
108157
+ });
108158
+ proc.on("error", (error49) => {
108159
+ clearTimeout(timer2);
108160
+ reject(error49);
108161
+ });
108162
+ proc.stdin.write(input);
108163
+ proc.stdin.end();
108164
+ });
108165
+ };
108166
+ var commandExists = (name) => {
108167
+ try {
108168
+ execSync2(`which ${name}`, { stdio: "ignore" });
108169
+ return true;
108170
+ } catch {
108171
+ return false;
108172
+ }
108173
+ };
108174
+
108175
+ // src/services/clipboard/text-clipboard.ts
108176
+ var writeOsc52 = (text) => {
108177
+ if (!process.stdout.isTTY) {
108178
+ return;
108179
+ }
108180
+ const base643 = Buffer.from(text).toString("base64");
108181
+ const osc52 = `${OSC52_SEQUENCE_PREFIX}${base643}${OSC52_SEQUENCE_SUFFIX}`;
108182
+ const isPassthrough = Boolean(process.env[TMUX_ENV_VAR]) || Boolean(process.env[SCREEN_ENV_VAR]);
108183
+ const sequence = isPassthrough ? `${TMUX_DCS_PREFIX}${osc52}${TMUX_DCS_SUFFIX}` : osc52;
108184
+ process.stdout.write(sequence);
108185
+ };
108186
+ var copyMethodBuilders = {
108187
+ darwin: () => {
108188
+ if (!commandExists("osascript")) {
108189
+ return null;
108190
+ }
108191
+ return async (text) => {
108192
+ const escaped = text.replace(/\\/g, "\\\\").replace(/"/g, "\\\"");
108193
+ await runCommandText("osascript", [
108194
+ "-e",
108195
+ `set the clipboard to "${escaped}"`
108196
+ ]);
108197
+ };
108198
+ },
108199
+ linux: () => {
108200
+ if (process.env[WAYLAND_DISPLAY_ENV_VAR] && commandExists("wl-copy")) {
108201
+ return async (text) => {
108202
+ await runCommandWithStdin("wl-copy", [], text);
108203
+ };
108204
+ }
108205
+ if (commandExists("xclip")) {
108206
+ return async (text) => {
108207
+ await runCommandWithStdin("xclip", ["-selection", "clipboard"], text);
108208
+ };
108209
+ }
108210
+ if (commandExists("xsel")) {
108211
+ return async (text) => {
108212
+ await runCommandWithStdin("xsel", ["--clipboard", "--input"], text);
108213
+ };
108214
+ }
108215
+ return null;
108216
+ },
108217
+ win32: () => {
108218
+ return async (text) => {
108219
+ await runCommandWithStdin("powershell.exe", [
108220
+ "-NonInteractive",
108221
+ "-NoProfile",
108222
+ "-Command",
108223
+ "[Console]::InputEncoding = [System.Text.Encoding]::UTF8; Set-Clipboard -Value ([Console]::In.ReadToEnd())"
108224
+ ], text);
108225
+ };
108226
+ }
108227
+ };
108228
+ var cachedCopyMethod = null;
108229
+ var copyMethodResolved = false;
108230
+ var resolveCopyMethod = () => {
108231
+ if (copyMethodResolved) {
108232
+ return cachedCopyMethod;
108233
+ }
108234
+ const platform2 = process.platform;
108235
+ const builder = copyMethodBuilders[platform2];
108236
+ cachedCopyMethod = builder ? builder() : null;
108237
+ copyMethodResolved = true;
108238
+ return cachedCopyMethod;
108239
+ };
108240
+ var copyToClipboard = async (text) => {
108241
+ writeOsc52(text);
108242
+ const method = resolveCopyMethod();
108243
+ if (method) {
108244
+ await method(text);
108245
+ }
108246
+ };
108247
+
108248
+ // src/tui-solid/app.tsx
108066
108249
  init_version();
108067
108250
 
108068
108251
  // src/tui-solid/context/exit.tsx
@@ -110190,6 +110373,7 @@ function Header(props) {
110190
110373
  setProp(_el$11, "justifyContent", "space-between");
110191
110374
  setProp(_el$11, "paddingLeft", 1);
110192
110375
  setProp(_el$11, "paddingRight", 1);
110376
+ setProp(_el$11, "marginBottom", 1);
110193
110377
  setProp(_el$11, "border", ["bottom"]);
110194
110378
  insertNode(_el$12, _el$15);
110195
110379
  insertNode(_el$12, _el$17);
@@ -110351,17 +110535,18 @@ function Header(props) {
110351
110535
  }
110352
110536
  }), null);
110353
110537
  effect((_p$) => {
110354
- var _v$15 = theme.colors.border, _v$16 = theme.colors.textDim, _v$17 = theme.colors.textDim, _v$18 = modeColor(), _v$19 = TextAttributes.BOLD, _v$20 = theme.colors.textDim, _v$21 = theme.colors.textDim, _v$22 = theme.colors.secondary, _v$23 = theme.colors.textDim, _v$24 = theme.colors.accent;
110538
+ var _v$15 = theme.colors.border, _v$16 = theme.colors.background, _v$17 = theme.colors.textDim, _v$18 = theme.colors.textDim, _v$19 = modeColor(), _v$20 = TextAttributes.BOLD, _v$21 = theme.colors.textDim, _v$22 = theme.colors.textDim, _v$23 = theme.colors.secondary, _v$24 = theme.colors.textDim, _v$25 = theme.colors.accent;
110355
110539
  _v$15 !== _p$.e && (_p$.e = setProp(_el$11, "borderColor", _v$15, _p$.e));
110356
- _v$16 !== _p$.t && (_p$.t = setProp(_el$15, "fg", _v$16, _p$.t));
110357
- _v$17 !== _p$.a && (_p$.a = setProp(_el$17, "fg", _v$17, _p$.a));
110358
- _v$18 !== _p$.o && (_p$.o = setProp(_el$20, "fg", _v$18, _p$.o));
110359
- _v$19 !== _p$.i && (_p$.i = setProp(_el$20, "attributes", _v$19, _p$.i));
110360
- _v$20 !== _p$.n && (_p$.n = setProp(_el$26, "fg", _v$20, _p$.n));
110361
- _v$21 !== _p$.s && (_p$.s = setProp(_el$44, "fg", _v$21, _p$.s));
110362
- _v$22 !== _p$.h && (_p$.h = setProp(_el$46, "fg", _v$22, _p$.h));
110363
- _v$23 !== _p$.r && (_p$.r = setProp(_el$48, "fg", _v$23, _p$.r));
110364
- _v$24 !== _p$.d && (_p$.d = setProp(_el$50, "fg", _v$24, _p$.d));
110540
+ _v$16 !== _p$.t && (_p$.t = setProp(_el$11, "backgroundColor", _v$16, _p$.t));
110541
+ _v$17 !== _p$.a && (_p$.a = setProp(_el$15, "fg", _v$17, _p$.a));
110542
+ _v$18 !== _p$.o && (_p$.o = setProp(_el$17, "fg", _v$18, _p$.o));
110543
+ _v$19 !== _p$.i && (_p$.i = setProp(_el$20, "fg", _v$19, _p$.i));
110544
+ _v$20 !== _p$.n && (_p$.n = setProp(_el$20, "attributes", _v$20, _p$.n));
110545
+ _v$21 !== _p$.s && (_p$.s = setProp(_el$26, "fg", _v$21, _p$.s));
110546
+ _v$22 !== _p$.h && (_p$.h = setProp(_el$44, "fg", _v$22, _p$.h));
110547
+ _v$23 !== _p$.r && (_p$.r = setProp(_el$46, "fg", _v$23, _p$.r));
110548
+ _v$24 !== _p$.d && (_p$.d = setProp(_el$48, "fg", _v$24, _p$.d));
110549
+ _v$25 !== _p$.l && (_p$.l = setProp(_el$50, "fg", _v$25, _p$.l));
110365
110550
  return _p$;
110366
110551
  }, {
110367
110552
  e: undefined,
@@ -110373,7 +110558,8 @@ function Header(props) {
110373
110558
  s: undefined,
110374
110559
  h: undefined,
110375
110560
  r: undefined,
110376
- d: undefined
110561
+ d: undefined,
110562
+ l: undefined
110377
110563
  });
110378
110564
  return _el$;
110379
110565
  })();
@@ -110929,13 +111115,31 @@ function SystemEntry(props) {
110929
111115
  }
110930
111116
  function ThinkingEntry(props) {
110931
111117
  const theme = useTheme();
111118
+ const firstLine = createMemo(() => {
111119
+ const lines = props.entry.content.split(`
111120
+ `);
111121
+ const line2 = lines[0] || "";
111122
+ if (line2.length > 80)
111123
+ return line2.substring(0, 80) + "...";
111124
+ return line2;
111125
+ });
110932
111126
  return (() => {
110933
- var _el$15 = createElement("box"), _el$16 = createElement("text"), _el$17 = createTextNode(`● `);
111127
+ var _el$15 = createElement("box"), _el$16 = createElement("text"), _el$17 = createTextNode(`Thinking: `);
110934
111128
  insertNode(_el$15, _el$16);
110935
111129
  setProp(_el$15, "marginBottom", 1);
111130
+ setProp(_el$15, "border", ["left"]);
111131
+ setProp(_el$15, "paddingLeft", 1);
110936
111132
  insertNode(_el$16, _el$17);
110937
- insert(_el$16, () => props.entry.content, null);
110938
- effect((_$p) => setProp(_el$16, "fg", theme.colors.modeThinking, _$p));
111133
+ insert(_el$16, firstLine, null);
111134
+ effect((_p$) => {
111135
+ var _v$5 = theme.colors.modeThinking, _v$6 = theme.colors.textDim;
111136
+ _v$5 !== _p$.e && (_p$.e = setProp(_el$15, "borderColor", _v$5, _p$.e));
111137
+ _v$6 !== _p$.t && (_p$.t = setProp(_el$16, "fg", _v$6, _p$.t));
111138
+ return _p$;
111139
+ }, {
111140
+ e: undefined,
111141
+ t: undefined
111142
+ });
110939
111143
  return _el$15;
110940
111144
  })();
110941
111145
  }
@@ -111069,9 +111273,9 @@ function DiffToolEntry(props) {
111069
111273
  }
111070
111274
  }));
111071
111275
  effect((_p$) => {
111072
- var _v$5 = props.statusColor, _v$6 = theme.colors.roleTool;
111073
- _v$5 !== _p$.e && (_p$.e = setProp(_el$20, "fg", _v$5, _p$.e));
111074
- _v$6 !== _p$.t && (_p$.t = setProp(_el$22, "fg", _v$6, _p$.t));
111276
+ var _v$7 = props.statusColor, _v$8 = theme.colors.roleTool;
111277
+ _v$7 !== _p$.e && (_p$.e = setProp(_el$20, "fg", _v$7, _p$.e));
111278
+ _v$8 !== _p$.t && (_p$.t = setProp(_el$22, "fg", _v$8, _p$.t));
111075
111279
  return _p$;
111076
111280
  }, {
111077
111281
  e: undefined,
@@ -111171,9 +111375,9 @@ function MultilineToolEntry(props) {
111171
111375
  }
111172
111376
  }), null);
111173
111377
  effect((_p$) => {
111174
- var _v$7 = props.statusColor, _v$8 = theme.colors.roleTool;
111175
- _v$7 !== _p$.e && (_p$.e = setProp(_el$29, "fg", _v$7, _p$.e));
111176
- _v$8 !== _p$.t && (_p$.t = setProp(_el$31, "fg", _v$8, _p$.t));
111378
+ var _v$9 = props.statusColor, _v$0 = theme.colors.roleTool;
111379
+ _v$9 !== _p$.e && (_p$.e = setProp(_el$29, "fg", _v$9, _p$.e));
111380
+ _v$0 !== _p$.t && (_p$.t = setProp(_el$31, "fg", _v$0, _p$.t));
111177
111381
  return _p$;
111178
111382
  }, {
111179
111383
  e: undefined,
@@ -111220,9 +111424,9 @@ function DefaultToolEntry(props) {
111220
111424
  }
111221
111425
  }), null);
111222
111426
  effect((_p$) => {
111223
- var _v$9 = props.statusColor, _v$0 = theme.colors.roleTool;
111224
- _v$9 !== _p$.e && (_p$.e = setProp(_el$44, "fg", _v$9, _p$.e));
111225
- _v$0 !== _p$.t && (_p$.t = setProp(_el$46, "fg", _v$0, _p$.t));
111427
+ var _v$1 = props.statusColor, _v$10 = theme.colors.roleTool;
111428
+ _v$1 !== _p$.e && (_p$.e = setProp(_el$44, "fg", _v$1, _p$.e));
111429
+ _v$10 !== _p$.t && (_p$.t = setProp(_el$46, "fg", _v$10, _p$.t));
111226
111430
  return _p$;
111227
111431
  }, {
111228
111432
  e: undefined,
@@ -111334,20 +111538,6 @@ function LogEntryDisplay(props) {
111334
111538
 
111335
111539
  // src/tui-solid/components/logs/log-panel.tsx
111336
111540
  var SCROLL_LINES2 = 3;
111337
- var MOUSE_ENABLE = "\x1B[?1000h\x1B[?1006h";
111338
- var MOUSE_DISABLE = "\x1B[?1000l\x1B[?1006l";
111339
- var SGR_MOUSE_PATTERN = /^\x1b\[<(\d+);(\d+);(\d+)([Mm])$/;
111340
- var parseMouseScroll = (data) => {
111341
- const match = data.match(SGR_MOUSE_PATTERN);
111342
- if (!match)
111343
- return null;
111344
- const button = parseInt(match[1], 10);
111345
- if (button === 64)
111346
- return "up";
111347
- if (button === 65)
111348
- return "down";
111349
- return null;
111350
- };
111351
111541
  function LogPanel() {
111352
111542
  const theme = useTheme();
111353
111543
  const app = useAppStore();
@@ -111419,32 +111609,13 @@ function LogPanel() {
111419
111609
  return;
111420
111610
  }
111421
111611
  });
111422
- onMount(() => {
111423
- process.stdout.write(MOUSE_ENABLE);
111424
- const handleData = (data) => {
111425
- if (!canScroll())
111426
- return;
111427
- const str = data.toString();
111428
- const direction = parseMouseScroll(str);
111429
- if (direction === "up") {
111430
- scrollUp();
111431
- } else if (direction === "down") {
111432
- scrollDown();
111433
- }
111434
- };
111435
- process.stdin.on("data", handleData);
111436
- onCleanup(() => {
111437
- process.stdout.write(MOUSE_DISABLE);
111438
- process.stdin.off("data", handleData);
111439
- });
111440
- });
111441
111612
  return (() => {
111442
111613
  var _el$ = createElement("box");
111443
111614
  setProp(_el$, "flexDirection", "column");
111444
111615
  setProp(_el$, "flexGrow", 1);
111445
111616
  setProp(_el$, "paddingLeft", 1);
111446
111617
  setProp(_el$, "paddingRight", 1);
111447
- setProp(_el$, "border", ["top", "bottom", "left", "right"]);
111618
+ setProp(_el$, "marginTop", 1);
111448
111619
  insert(_el$, createComponent2(Show, {
111449
111620
  get when() {
111450
111621
  return hasContent();
@@ -111476,8 +111647,11 @@ function LogPanel() {
111476
111647
  get children() {
111477
111648
  var _el$2 = createElement("scrollbox"), _el$3 = createElement("box");
111478
111649
  insertNode(_el$2, _el$3);
111479
- var _ref$ = scrollboxRef;
111480
- typeof _ref$ === "function" ? use(_ref$, _el$2) : scrollboxRef = _el$2;
111650
+ use((el) => {
111651
+ scrollboxRef = el;
111652
+ el.verticalScrollBar.visible = false;
111653
+ el.horizontalScrollBar.visible = false;
111654
+ }, _el$2);
111481
111655
  setProp(_el$2, "stickyStart", "bottom");
111482
111656
  setProp(_el$2, "flexGrow", 1);
111483
111657
  setProp(_el$3, "flexDirection", "column");
@@ -111493,7 +111667,6 @@ function LogPanel() {
111493
111667
  return _el$2;
111494
111668
  }
111495
111669
  }));
111496
- effect((_$p) => setProp(_el$, "borderColor", theme.colors.border, _$p));
111497
111670
  return _el$;
111498
111671
  })();
111499
111672
  }
@@ -112812,11 +112985,14 @@ function PermissionModal(props) {
112812
112985
  insertNode(_el$, _el$14);
112813
112986
  insertNode(_el$, _el$15);
112814
112987
  setProp(_el$, "flexDirection", "column");
112815
- setProp(_el$, "border", ["top", "bottom", "left", "right"]);
112988
+ setProp(_el$, "border", ["top"]);
112816
112989
  setProp(_el$, "paddingLeft", 2);
112817
112990
  setProp(_el$, "paddingRight", 2);
112818
112991
  setProp(_el$, "paddingTop", 1);
112819
112992
  setProp(_el$, "paddingBottom", 1);
112993
+ setProp(_el$, "width", "100%");
112994
+ setProp(_el$, "height", "auto");
112995
+ setProp(_el$, "flexShrink", 0);
112820
112996
  insertNode(_el$2, _el$3);
112821
112997
  setProp(_el$2, "marginBottom", 1);
112822
112998
  insertNode(_el$3, createTextNode(`⚠ Permission Required`));
@@ -112931,6 +113107,341 @@ function PermissionModal(props) {
112931
113107
  })();
112932
113108
  }
112933
113109
 
113110
+ // src/tui-solid/components/modals/plan-approval-modal.tsx
113111
+ init_server();
113112
+ await __promiseAll([
113113
+ init_solid(),
113114
+ init_solid(),
113115
+ init_solid(),
113116
+ init_solid(),
113117
+ init_solid(),
113118
+ init_solid(),
113119
+ init_solid(),
113120
+ init_solid(),
113121
+ init_solid(),
113122
+ init_core2(),
113123
+ init_theme2()
113124
+ ]);
113125
+
113126
+ // src/constants/plan-approval.ts
113127
+ var PLAN_APPROVAL_OPTIONS = [
113128
+ {
113129
+ key: "1",
113130
+ label: "Yes, clear context and auto-accept edits",
113131
+ description: "Approve plan, clear conversation context, and auto-accept all file edits",
113132
+ editMode: "auto_accept_clear",
113133
+ shortcut: "shift+tab"
113134
+ },
113135
+ {
113136
+ key: "2",
113137
+ label: "Yes, auto-accept edits",
113138
+ description: "Approve plan and auto-accept all file edits without prompting",
113139
+ editMode: "auto_accept"
113140
+ },
113141
+ {
113142
+ key: "3",
113143
+ label: "Yes, manually approve edits",
113144
+ description: "Approve plan but require manual approval for each file edit",
113145
+ editMode: "manual_approve"
113146
+ },
113147
+ {
113148
+ key: "4",
113149
+ label: "Type here to tell CodeTyper what to change",
113150
+ description: "Provide feedback or modifications to the plan",
113151
+ editMode: "feedback"
113152
+ }
113153
+ ];
113154
+ var PLAN_APPROVAL_FOOTER_TEXT = "ctrl-g to edit in editor";
113155
+
113156
+ // src/tui-solid/components/modals/plan-approval-modal.tsx
113157
+ function PlanApprovalModal(props) {
113158
+ const theme = useTheme();
113159
+ const [selectedIndex, setSelectedIndex] = createSignal(0);
113160
+ const [feedbackMode, setFeedbackMode] = createSignal(false);
113161
+ const [feedbackText, setFeedbackText] = createSignal("");
113162
+ const isActive = () => props.isActive ?? true;
113163
+ const optionCount = PLAN_APPROVAL_OPTIONS.length;
113164
+ const handleApproval = (option) => {
113165
+ if (option.editMode === "feedback") {
113166
+ setFeedbackMode(true);
113167
+ return;
113168
+ }
113169
+ props.onRespond({
113170
+ approved: true,
113171
+ editMode: option.editMode
113172
+ });
113173
+ };
113174
+ const handleFeedbackSubmit = () => {
113175
+ const text = feedbackText().trim();
113176
+ if (!text)
113177
+ return;
113178
+ props.onRespond({
113179
+ approved: true,
113180
+ editMode: "feedback",
113181
+ feedback: text
113182
+ });
113183
+ };
113184
+ const handleCancel = () => {
113185
+ if (feedbackMode()) {
113186
+ setFeedbackMode(false);
113187
+ setFeedbackText("");
113188
+ return;
113189
+ }
113190
+ props.onRespond({
113191
+ approved: false,
113192
+ editMode: "manual_approve"
113193
+ });
113194
+ };
113195
+ useKeyboard((evt) => {
113196
+ if (!isActive())
113197
+ return;
113198
+ evt.stopPropagation();
113199
+ if (feedbackMode()) {
113200
+ if (evt.name === "return") {
113201
+ handleFeedbackSubmit();
113202
+ evt.preventDefault();
113203
+ return;
113204
+ }
113205
+ if (evt.name === "escape") {
113206
+ handleCancel();
113207
+ evt.preventDefault();
113208
+ return;
113209
+ }
113210
+ if (evt.name === "backspace") {
113211
+ setFeedbackText((prev) => prev.slice(0, -1));
113212
+ evt.preventDefault();
113213
+ return;
113214
+ }
113215
+ if (evt.name.length === 1 && !evt.ctrl && !evt.meta) {
113216
+ setFeedbackText((prev) => prev + evt.name);
113217
+ evt.preventDefault();
113218
+ }
113219
+ return;
113220
+ }
113221
+ if (evt.name === "up") {
113222
+ setSelectedIndex((prev) => prev > 0 ? prev - 1 : optionCount - 1);
113223
+ evt.preventDefault();
113224
+ return;
113225
+ }
113226
+ if (evt.name === "down") {
113227
+ setSelectedIndex((prev) => prev < optionCount - 1 ? prev + 1 : 0);
113228
+ evt.preventDefault();
113229
+ return;
113230
+ }
113231
+ if (evt.name === "return") {
113232
+ handleApproval(PLAN_APPROVAL_OPTIONS[selectedIndex()]);
113233
+ evt.preventDefault();
113234
+ return;
113235
+ }
113236
+ if (evt.name === "escape") {
113237
+ handleCancel();
113238
+ evt.preventDefault();
113239
+ return;
113240
+ }
113241
+ if (evt.name === "tab" && evt.shift) {
113242
+ handleApproval(PLAN_APPROVAL_OPTIONS[0]);
113243
+ evt.preventDefault();
113244
+ return;
113245
+ }
113246
+ if (evt.name.length === 1 && !evt.ctrl && !evt.meta) {
113247
+ const option = PLAN_APPROVAL_OPTIONS.find((o2) => o2.key === evt.name);
113248
+ if (option) {
113249
+ handleApproval(option);
113250
+ evt.preventDefault();
113251
+ }
113252
+ }
113253
+ });
113254
+ return (() => {
113255
+ var _el$ = createElement("box"), _el$2 = createElement("box"), _el$3 = createElement("text");
113256
+ insertNode(_el$, _el$2);
113257
+ setProp(_el$, "flexDirection", "column");
113258
+ setProp(_el$, "border", ["top", "bottom", "left", "right"]);
113259
+ setProp(_el$, "paddingLeft", 2);
113260
+ setProp(_el$, "paddingRight", 2);
113261
+ setProp(_el$, "paddingTop", 1);
113262
+ setProp(_el$, "paddingBottom", 1);
113263
+ insertNode(_el$2, _el$3);
113264
+ setProp(_el$2, "marginBottom", 1);
113265
+ insertNode(_el$3, createTextNode(`CodeTyper has written up a plan and is ready to execute. Would you like to proceed?`));
113266
+ insert(_el$, createComponent2(Show, {
113267
+ get when() {
113268
+ return props.prompt.planTitle;
113269
+ },
113270
+ get children() {
113271
+ var _el$5 = createElement("box"), _el$6 = createElement("text");
113272
+ insertNode(_el$5, _el$6);
113273
+ setProp(_el$5, "marginBottom", 1);
113274
+ insert(_el$6, () => props.prompt.planTitle);
113275
+ effect((_p$) => {
113276
+ var _v$ = theme.colors.text, _v$2 = TextAttributes.BOLD;
113277
+ _v$ !== _p$.e && (_p$.e = setProp(_el$6, "fg", _v$, _p$.e));
113278
+ _v$2 !== _p$.t && (_p$.t = setProp(_el$6, "attributes", _v$2, _p$.t));
113279
+ return _p$;
113280
+ }, {
113281
+ e: undefined,
113282
+ t: undefined
113283
+ });
113284
+ return _el$5;
113285
+ }
113286
+ }), null);
113287
+ insert(_el$, createComponent2(Show, {
113288
+ get when() {
113289
+ return props.prompt.planSummary;
113290
+ },
113291
+ get children() {
113292
+ var _el$7 = createElement("box"), _el$8 = createElement("text");
113293
+ insertNode(_el$7, _el$8);
113294
+ setProp(_el$7, "marginBottom", 1);
113295
+ insert(_el$8, () => props.prompt.planSummary);
113296
+ effect((_$p) => setProp(_el$8, "fg", theme.colors.textDim, _$p));
113297
+ return _el$7;
113298
+ }
113299
+ }), null);
113300
+ insert(_el$, createComponent2(Show, {
113301
+ get when() {
113302
+ return !feedbackMode();
113303
+ },
113304
+ get children() {
113305
+ var _el$9 = createElement("box");
113306
+ setProp(_el$9, "flexDirection", "column");
113307
+ setProp(_el$9, "marginTop", 1);
113308
+ insert(_el$9, createComponent2(For, {
113309
+ each: PLAN_APPROVAL_OPTIONS,
113310
+ children: (option, index) => {
113311
+ const isSelected = () => index() === selectedIndex();
113312
+ return (() => {
113313
+ var _el$23 = createElement("box"), _el$24 = createElement("text"), _el$25 = createElement("text"), _el$26 = createTextNode(`. `), _el$27 = createElement("text");
113314
+ insertNode(_el$23, _el$24);
113315
+ insertNode(_el$23, _el$25);
113316
+ insertNode(_el$23, _el$27);
113317
+ setProp(_el$23, "flexDirection", "row");
113318
+ insert(_el$24, () => isSelected() ? "> " : " ");
113319
+ insertNode(_el$25, _el$26);
113320
+ insert(_el$25, () => option.key, _el$26);
113321
+ insert(_el$27, () => option.label);
113322
+ insert(_el$23, createComponent2(Show, {
113323
+ get when() {
113324
+ return option.shortcut;
113325
+ },
113326
+ get children() {
113327
+ var _el$28 = createElement("text"), _el$29 = createTextNode(` (`), _el$31 = createTextNode(`)`);
113328
+ insertNode(_el$28, _el$29);
113329
+ insertNode(_el$28, _el$31);
113330
+ insert(_el$28, () => option.shortcut, _el$31);
113331
+ effect((_$p) => setProp(_el$28, "fg", theme.colors.textMuted, _$p));
113332
+ return _el$28;
113333
+ }
113334
+ }), null);
113335
+ effect((_p$) => {
113336
+ var _v$10 = isSelected() ? theme.colors.primary : theme.colors.textDim, _v$11 = isSelected() ? TextAttributes.BOLD : TextAttributes.NONE, _v$12 = theme.colors.textDim, _v$13 = isSelected() ? theme.colors.text : theme.colors.textDim;
113337
+ _v$10 !== _p$.e && (_p$.e = setProp(_el$24, "fg", _v$10, _p$.e));
113338
+ _v$11 !== _p$.t && (_p$.t = setProp(_el$24, "attributes", _v$11, _p$.t));
113339
+ _v$12 !== _p$.a && (_p$.a = setProp(_el$25, "fg", _v$12, _p$.a));
113340
+ _v$13 !== _p$.o && (_p$.o = setProp(_el$27, "fg", _v$13, _p$.o));
113341
+ return _p$;
113342
+ }, {
113343
+ e: undefined,
113344
+ t: undefined,
113345
+ a: undefined,
113346
+ o: undefined
113347
+ });
113348
+ return _el$23;
113349
+ })();
113350
+ }
113351
+ }));
113352
+ return _el$9;
113353
+ }
113354
+ }), null);
113355
+ insert(_el$, createComponent2(Show, {
113356
+ get when() {
113357
+ return feedbackMode();
113358
+ },
113359
+ get children() {
113360
+ var _el$0 = createElement("box"), _el$1 = createElement("text"), _el$11 = createElement("box"), _el$12 = createElement("text"), _el$13 = createElement("text"), _el$15 = createElement("text");
113361
+ insertNode(_el$0, _el$1);
113362
+ insertNode(_el$0, _el$11);
113363
+ insertNode(_el$0, _el$15);
113364
+ setProp(_el$0, "flexDirection", "column");
113365
+ setProp(_el$0, "marginTop", 1);
113366
+ insertNode(_el$1, createTextNode(`Tell CodeTyper what to change:`));
113367
+ insertNode(_el$11, _el$12);
113368
+ setProp(_el$11, "border", ["left"]);
113369
+ setProp(_el$11, "paddingLeft", 1);
113370
+ setProp(_el$11, "marginTop", 1);
113371
+ insertNode(_el$12, _el$13);
113372
+ insert(_el$12, () => feedbackText() || " ", _el$13);
113373
+ insertNode(_el$13, createTextNode(`_`));
113374
+ insertNode(_el$15, createTextNode(`Enter to submit | Esc to cancel`));
113375
+ effect((_p$) => {
113376
+ var _v$3 = theme.colors.text, _v$4 = theme.colors.borderFocus, _v$5 = theme.colors.text, _v$6 = theme.colors.bgCursor, _v$7 = theme.colors.textDim;
113377
+ _v$3 !== _p$.e && (_p$.e = setProp(_el$1, "fg", _v$3, _p$.e));
113378
+ _v$4 !== _p$.t && (_p$.t = setProp(_el$11, "borderColor", _v$4, _p$.t));
113379
+ _v$5 !== _p$.a && (_p$.a = setProp(_el$12, "fg", _v$5, _p$.a));
113380
+ _v$6 !== _p$.o && (_p$.o = setProp(_el$13, "fg", _v$6, _p$.o));
113381
+ _v$7 !== _p$.i && (_p$.i = setProp(_el$15, "fg", _v$7, _p$.i));
113382
+ return _p$;
113383
+ }, {
113384
+ e: undefined,
113385
+ t: undefined,
113386
+ a: undefined,
113387
+ o: undefined,
113388
+ i: undefined
113389
+ });
113390
+ return _el$0;
113391
+ }
113392
+ }), null);
113393
+ insert(_el$, createComponent2(Show, {
113394
+ get when() {
113395
+ return !feedbackMode();
113396
+ },
113397
+ get children() {
113398
+ var _el$17 = createElement("box");
113399
+ setProp(_el$17, "marginTop", 1);
113400
+ setProp(_el$17, "flexDirection", "row");
113401
+ insert(_el$17, createComponent2(Show, {
113402
+ get when() {
113403
+ return props.prompt.planFilePath;
113404
+ },
113405
+ get children() {
113406
+ var _el$18 = createElement("text"), _el$19 = createTextNode(` - `);
113407
+ insertNode(_el$18, _el$19);
113408
+ insert(_el$18, PLAN_APPROVAL_FOOTER_TEXT, _el$19);
113409
+ insert(_el$18, () => props.prompt.planFilePath, null);
113410
+ effect((_$p) => setProp(_el$18, "fg", theme.colors.textDim, _$p));
113411
+ return _el$18;
113412
+ }
113413
+ }), null);
113414
+ insert(_el$17, createComponent2(Show, {
113415
+ get when() {
113416
+ return !props.prompt.planFilePath;
113417
+ },
113418
+ get children() {
113419
+ var _el$20 = createElement("text"), _el$21 = createTextNode(`↑↓ options | Enter select | 1-4 shortcut | Esc cancel`);
113420
+ insertNode(_el$20, _el$21);
113421
+ effect((_$p) => setProp(_el$20, "fg", theme.colors.textDim, _$p));
113422
+ return _el$20;
113423
+ }
113424
+ }), null);
113425
+ return _el$17;
113426
+ }
113427
+ }), null);
113428
+ effect((_p$) => {
113429
+ var _v$8 = theme.colors.borderModal, _v$9 = theme.colors.background, _v$0 = theme.colors.primary, _v$1 = TextAttributes.BOLD;
113430
+ _v$8 !== _p$.e && (_p$.e = setProp(_el$, "borderColor", _v$8, _p$.e));
113431
+ _v$9 !== _p$.t && (_p$.t = setProp(_el$, "backgroundColor", _v$9, _p$.t));
113432
+ _v$0 !== _p$.a && (_p$.a = setProp(_el$3, "fg", _v$0, _p$.a));
113433
+ _v$1 !== _p$.o && (_p$.o = setProp(_el$3, "attributes", _v$1, _p$.o));
113434
+ return _p$;
113435
+ }, {
113436
+ e: undefined,
113437
+ t: undefined,
113438
+ a: undefined,
113439
+ o: undefined
113440
+ });
113441
+ return _el$;
113442
+ })();
113443
+ }
113444
+
112934
113445
  // src/tui-solid/components/modals/learning-modal.tsx
112935
113446
  init_server();
112936
113447
  await __promiseAll([
@@ -114559,10 +115070,53 @@ function Session(props) {
114559
115070
  return createComponent2(DebugLogPanel, {});
114560
115071
  }
114561
115072
  }), null);
115073
+ insert(_el$, createComponent2(Show, {
115074
+ get when() {
115075
+ return memo2(() => app.mode() === "permission_prompt")() && app.permissionRequest();
115076
+ },
115077
+ get children() {
115078
+ return createComponent2(PermissionModal, {
115079
+ get request() {
115080
+ return app.permissionRequest();
115081
+ },
115082
+ get onRespond() {
115083
+ return props.onPermissionResponse;
115084
+ },
115085
+ get isActive() {
115086
+ return app.mode() === "permission_prompt";
115087
+ }
115088
+ });
115089
+ }
115090
+ }), null);
115091
+ insert(_el$, createComponent2(Show, {
115092
+ get when() {
115093
+ return memo2(() => app.mode() === "plan_approval")() && app.planApprovalPrompt();
115094
+ },
115095
+ get children() {
115096
+ return createComponent2(PlanApprovalModal, {
115097
+ get prompt() {
115098
+ return app.planApprovalPrompt();
115099
+ },
115100
+ get onRespond() {
115101
+ return props.onPlanApprovalResponse;
115102
+ },
115103
+ get isActive() {
115104
+ return app.mode() === "plan_approval";
115105
+ }
115106
+ });
115107
+ }
115108
+ }), null);
114562
115109
  insert(_el$, createComponent2(StatusBar, {}), null);
114563
- insert(_el$, createComponent2(InputArea, {
114564
- get onSubmit() {
114565
- return props.onSubmit;
115110
+ insert(_el$, createComponent2(Show, {
115111
+ get when() {
115112
+ return memo2(() => app.mode() !== "permission_prompt")() && app.mode() !== "plan_approval";
115113
+ },
115114
+ get children() {
115115
+ return createComponent2(InputArea, {
115116
+ get onSubmit() {
115117
+ return props.onSubmit;
115118
+ }
115119
+ });
114566
115120
  }
114567
115121
  }), null);
114568
115122
  insert(_el$, createComponent2(Switch, {
@@ -114756,27 +115310,6 @@ function Session(props) {
114756
115310
  }
114757
115311
  });
114758
115312
  }
114759
- }), createComponent2(Match, {
114760
- get when() {
114761
- return memo2(() => app.mode() === "permission_prompt")() && app.permissionRequest();
114762
- },
114763
- get children() {
114764
- return createComponent2(CenteredModal, {
114765
- get children() {
114766
- return createComponent2(PermissionModal, {
114767
- get request() {
114768
- return app.permissionRequest();
114769
- },
114770
- get onRespond() {
114771
- return props.onPermissionResponse;
114772
- },
114773
- get isActive() {
114774
- return app.mode() === "permission_prompt";
114775
- }
114776
- });
114777
- }
114778
- });
114779
- }
114780
115313
  }), createComponent2(Match, {
114781
115314
  get when() {
114782
115315
  return memo2(() => app.mode() === "learning_prompt")() && app.learningPrompt();
@@ -114902,8 +115435,16 @@ function AppContent(props) {
114902
115435
  const exit = useExit();
114903
115436
  const toast = useToast();
114904
115437
  const theme = useTheme();
115438
+ const renderer = useRenderer();
114905
115439
  const [fileList, setFileList] = createSignal([]);
114906
115440
  setAppStoreRef(app);
115441
+ const copySelectionToClipboard = async () => {
115442
+ const text = renderer.getSelection()?.getSelectedText();
115443
+ if (text && text.length > 0) {
115444
+ await copyToClipboard(text).then(() => toast.info("Copied to clipboard")).catch(() => toast.error("Failed to copy to clipboard"));
115445
+ renderer.clearSelection();
115446
+ }
115447
+ };
114907
115448
  createEffect(() => {
114908
115449
  if (app.mode() === "file_picker") {
114909
115450
  const cwd = process.cwd();
@@ -114943,6 +115484,11 @@ function AppContent(props) {
114943
115484
  }, 100);
114944
115485
  }
114945
115486
  useKeyboard((evt) => {
115487
+ if (evt.ctrl && evt.name === "y") {
115488
+ copySelectionToClipboard();
115489
+ evt.preventDefault();
115490
+ return;
115491
+ }
114946
115492
  if (evt.name === "escape") {
114947
115493
  abortCurrentOperation(false).then((aborted2) => {
114948
115494
  if (aborted2) {
@@ -115087,6 +115633,9 @@ function AppContent(props) {
115087
115633
  const handlePermissionResponse = (allowed, scope) => {
115088
115634
  props.onPermissionResponse(allowed, scope);
115089
115635
  };
115636
+ const handlePlanApprovalResponse = (response2) => {
115637
+ props.onPlanApprovalResponse(response2);
115638
+ };
115090
115639
  const handleLearningResponse = (save, scope, editedContent) => {
115091
115640
  props.onLearningResponse(save, scope, editedContent);
115092
115641
  };
@@ -115147,6 +115696,7 @@ function AppContent(props) {
115147
115696
  var _el$7 = createElement("box");
115148
115697
  setProp(_el$7, "flexDirection", "column");
115149
115698
  setProp(_el$7, "flexGrow", 1);
115699
+ setProp(_el$7, "onMouseUp", () => copySelectionToClipboard());
115150
115700
  insert(_el$7, createComponent2(Switch, {
115151
115701
  get children() {
115152
115702
  return [createComponent2(Match, {
@@ -115182,6 +115732,7 @@ function AppContent(props) {
115182
115732
  onProviderSelect: handleProviderSelect,
115183
115733
  onCascadeToggle: handleCascadeToggle,
115184
115734
  onPermissionResponse: handlePermissionResponse,
115735
+ onPlanApprovalResponse: handlePlanApprovalResponse,
115185
115736
  onLearningResponse: handleLearningResponse,
115186
115737
  get onBrainSetJwtToken() {
115187
115738
  return props.onBrainSetJwtToken;
@@ -115261,8 +115812,13 @@ function App(props) {
115261
115812
  }
115262
115813
  function tui(options2) {
115263
115814
  return new Promise((resolve4) => {
115815
+ const {
115816
+ writeSync: writeSync2
115817
+ } = __require("fs");
115264
115818
  const handleExit = (output) => {
115265
- process.stdout.write(DISABLE_MOUSE_TRACKING);
115819
+ try {
115820
+ writeSync2(1, TERMINAL_RESET);
115821
+ } catch {}
115266
115822
  resolve4(output);
115267
115823
  };
115268
115824
  render(() => createComponent2(App, mergeProps3(options2, {
@@ -115392,6 +115948,7 @@ var renderApp = async (props) => {
115392
115948
  },
115393
115949
  onMCPAdd: props.handleMCPAdd ?? defaultHandleMCPAdd,
115394
115950
  onPermissionResponse: props.handlePermissionResponse ?? (() => {}),
115951
+ onPlanApprovalResponse: props.handlePlanApprovalResponse ?? (() => {}),
115395
115952
  onLearningResponse: props.handleLearningResponse ?? (() => {}),
115396
115953
  onBrainSetJwtToken: props.handleBrainSetJwtToken ?? defaultHandleBrainSetJwtToken,
115397
115954
  onBrainSetApiKey: props.handleBrainSetApiKey ?? defaultHandleBrainSetApiKey,
@@ -116514,4 +117071,4 @@ ${plan.steps.map((s) => `${s.id}. ${s.description}`).join(`
116514
117071
  });
116515
117072
  program2.parse(process.argv);
116516
117073
 
116517
- //# debugId=AACE3B16C26B095E64756E2164756E21
117074
+ //# debugId=AC0CA356430967FB64756E2164756E21
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "codetyper-cli",
3
- "version": "0.4.0",
3
+ "version": "0.4.1",
4
4
  "description": "CodeTyper AI Agent - Standalone CLI for autonomous code generation",
5
5
  "main": "dist/index.js",
6
6
  "bin": {
package/src/version.json CHANGED
@@ -1,3 +1,3 @@
1
1
  {
2
- "version": "0.4.0"
2
+ "version": "0.4.1"
3
3
  }