codetyper-cli 0.4.0 → 0.4.2
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 +706 -97
- package/package.json +1 -1
- package/src/version.json +1 -1
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
|
-
|
|
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
|
-
|
|
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
|
|
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
|
-
|
|
41898
|
+
writeSync2(`${key}(${args.map((arg) => String(arg)).join(", ")})`);
|
|
41882
41899
|
const result = value(...args);
|
|
41883
|
-
|
|
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.
|
|
94070
|
+
version: "0.4.2"
|
|
94040
94071
|
};
|
|
94041
94072
|
});
|
|
94042
94073
|
|
|
@@ -108063,6 +108094,203 @@ 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/services/exit-message.ts
|
|
108099
|
+
import { EOL } from "os";
|
|
108100
|
+
|
|
108101
|
+
// src/constants/exit-message.ts
|
|
108102
|
+
var EXIT_LOGO = [
|
|
108103
|
+
"█▀▀█",
|
|
108104
|
+
"█ █",
|
|
108105
|
+
"▀▀▀▀"
|
|
108106
|
+
];
|
|
108107
|
+
var EXIT_STYLES = {
|
|
108108
|
+
RESET: "\x1B[0m",
|
|
108109
|
+
DIM: "\x1B[90m",
|
|
108110
|
+
HIGHLIGHT: "\x1B[96m",
|
|
108111
|
+
BOLD: "\x1B[1m",
|
|
108112
|
+
LOGO_COLOR: "\x1B[36m"
|
|
108113
|
+
};
|
|
108114
|
+
var EXIT_DESCRIPTION_MAX_WIDTH = 50;
|
|
108115
|
+
var EXIT_LINE_PADDING = " ";
|
|
108116
|
+
var EXIT_LOGO_GAP = " ";
|
|
108117
|
+
var EXIT_TRUNCATION_MARKER = "…";
|
|
108118
|
+
|
|
108119
|
+
// src/services/exit-message.ts
|
|
108120
|
+
var truncateText = (text, maxWidth) => {
|
|
108121
|
+
if (text.length <= maxWidth)
|
|
108122
|
+
return text;
|
|
108123
|
+
return text.slice(0, maxWidth - 1) + EXIT_TRUNCATION_MARKER;
|
|
108124
|
+
};
|
|
108125
|
+
var formatExitMessage = (sessionId, sessionTitle) => {
|
|
108126
|
+
if (!sessionId)
|
|
108127
|
+
return "";
|
|
108128
|
+
const { RESET, DIM, HIGHLIGHT, LOGO_COLOR } = EXIT_STYLES;
|
|
108129
|
+
const pad = EXIT_LINE_PADDING;
|
|
108130
|
+
const gap = EXIT_LOGO_GAP;
|
|
108131
|
+
const description = sessionTitle ? truncateText(sessionTitle, EXIT_DESCRIPTION_MAX_WIDTH) : "";
|
|
108132
|
+
const resumeCommand = `codetyper --resume ${sessionId}`;
|
|
108133
|
+
const lines = [
|
|
108134
|
+
"",
|
|
108135
|
+
`${pad}${LOGO_COLOR}${EXIT_LOGO[0]}${RESET}${gap}${HIGHLIGHT}${description}${RESET}`,
|
|
108136
|
+
`${pad}${LOGO_COLOR}${EXIT_LOGO[1]}${RESET}${gap}${DIM}${resumeCommand}${RESET}`,
|
|
108137
|
+
`${pad}${LOGO_COLOR}${EXIT_LOGO[2]}${RESET}`,
|
|
108138
|
+
""
|
|
108139
|
+
];
|
|
108140
|
+
return lines.join(EOL);
|
|
108141
|
+
};
|
|
108142
|
+
|
|
108143
|
+
// src/constants/clipboard.ts
|
|
108144
|
+
var OSC52_SEQUENCE_PREFIX = "\x1B]52;c;";
|
|
108145
|
+
var OSC52_SEQUENCE_SUFFIX = "\x07";
|
|
108146
|
+
var TMUX_DCS_PREFIX = "\x1BPtmux;\x1B";
|
|
108147
|
+
var TMUX_DCS_SUFFIX = "\x1B\\";
|
|
108148
|
+
var TMUX_ENV_VAR = "TMUX";
|
|
108149
|
+
var SCREEN_ENV_VAR = "STY";
|
|
108150
|
+
var WAYLAND_DISPLAY_ENV_VAR = "WAYLAND_DISPLAY";
|
|
108151
|
+
var CLIPBOARD_COMMAND_TIMEOUT_MS = 5000;
|
|
108152
|
+
|
|
108153
|
+
// src/services/clipboard/run-command.ts
|
|
108154
|
+
import { spawn as spawn8, execSync as execSync2 } from "child_process";
|
|
108155
|
+
var runCommand2 = (command, args) => {
|
|
108156
|
+
return new Promise((resolve4, reject) => {
|
|
108157
|
+
const proc = spawn8(command, args);
|
|
108158
|
+
const stdout = [];
|
|
108159
|
+
let stderr = "";
|
|
108160
|
+
const timer2 = setTimeout(() => {
|
|
108161
|
+
proc.kill();
|
|
108162
|
+
reject(new Error(`Command timed out after ${CLIPBOARD_COMMAND_TIMEOUT_MS}ms: ${command}`));
|
|
108163
|
+
}, CLIPBOARD_COMMAND_TIMEOUT_MS);
|
|
108164
|
+
proc.stdout.on("data", (data) => stdout.push(data));
|
|
108165
|
+
proc.stderr.on("data", (data) => {
|
|
108166
|
+
stderr += data.toString();
|
|
108167
|
+
});
|
|
108168
|
+
proc.on("close", (code) => {
|
|
108169
|
+
clearTimeout(timer2);
|
|
108170
|
+
if (code === 0) {
|
|
108171
|
+
resolve4({ stdout: Buffer.concat(stdout), stderr });
|
|
108172
|
+
} else {
|
|
108173
|
+
reject(new Error(`Command failed with code ${code}: ${stderr}`));
|
|
108174
|
+
}
|
|
108175
|
+
});
|
|
108176
|
+
proc.on("error", (error49) => {
|
|
108177
|
+
clearTimeout(timer2);
|
|
108178
|
+
reject(error49);
|
|
108179
|
+
});
|
|
108180
|
+
});
|
|
108181
|
+
};
|
|
108182
|
+
var runCommandText = async (command, args) => {
|
|
108183
|
+
const { stdout } = await runCommand2(command, args);
|
|
108184
|
+
return stdout.toString().trim();
|
|
108185
|
+
};
|
|
108186
|
+
var runCommandWithStdin = (command, args, input) => {
|
|
108187
|
+
return new Promise((resolve4, reject) => {
|
|
108188
|
+
const proc = spawn8(command, args, {
|
|
108189
|
+
stdio: ["pipe", "ignore", "ignore"]
|
|
108190
|
+
});
|
|
108191
|
+
const timer2 = setTimeout(() => {
|
|
108192
|
+
proc.kill();
|
|
108193
|
+
reject(new Error(`Command timed out after ${CLIPBOARD_COMMAND_TIMEOUT_MS}ms: ${command}`));
|
|
108194
|
+
}, CLIPBOARD_COMMAND_TIMEOUT_MS);
|
|
108195
|
+
proc.on("close", (code) => {
|
|
108196
|
+
clearTimeout(timer2);
|
|
108197
|
+
if (code === 0) {
|
|
108198
|
+
resolve4();
|
|
108199
|
+
} else {
|
|
108200
|
+
reject(new Error(`Command failed with code ${code}: ${command}`));
|
|
108201
|
+
}
|
|
108202
|
+
});
|
|
108203
|
+
proc.on("error", (error49) => {
|
|
108204
|
+
clearTimeout(timer2);
|
|
108205
|
+
reject(error49);
|
|
108206
|
+
});
|
|
108207
|
+
proc.stdin.write(input);
|
|
108208
|
+
proc.stdin.end();
|
|
108209
|
+
});
|
|
108210
|
+
};
|
|
108211
|
+
var commandExists = (name) => {
|
|
108212
|
+
try {
|
|
108213
|
+
execSync2(`which ${name}`, { stdio: "ignore" });
|
|
108214
|
+
return true;
|
|
108215
|
+
} catch {
|
|
108216
|
+
return false;
|
|
108217
|
+
}
|
|
108218
|
+
};
|
|
108219
|
+
|
|
108220
|
+
// src/services/clipboard/text-clipboard.ts
|
|
108221
|
+
var writeOsc52 = (text) => {
|
|
108222
|
+
if (!process.stdout.isTTY) {
|
|
108223
|
+
return;
|
|
108224
|
+
}
|
|
108225
|
+
const base643 = Buffer.from(text).toString("base64");
|
|
108226
|
+
const osc52 = `${OSC52_SEQUENCE_PREFIX}${base643}${OSC52_SEQUENCE_SUFFIX}`;
|
|
108227
|
+
const isPassthrough = Boolean(process.env[TMUX_ENV_VAR]) || Boolean(process.env[SCREEN_ENV_VAR]);
|
|
108228
|
+
const sequence = isPassthrough ? `${TMUX_DCS_PREFIX}${osc52}${TMUX_DCS_SUFFIX}` : osc52;
|
|
108229
|
+
process.stdout.write(sequence);
|
|
108230
|
+
};
|
|
108231
|
+
var copyMethodBuilders = {
|
|
108232
|
+
darwin: () => {
|
|
108233
|
+
if (!commandExists("osascript")) {
|
|
108234
|
+
return null;
|
|
108235
|
+
}
|
|
108236
|
+
return async (text) => {
|
|
108237
|
+
const escaped = text.replace(/\\/g, "\\\\").replace(/"/g, "\\\"");
|
|
108238
|
+
await runCommandText("osascript", [
|
|
108239
|
+
"-e",
|
|
108240
|
+
`set the clipboard to "${escaped}"`
|
|
108241
|
+
]);
|
|
108242
|
+
};
|
|
108243
|
+
},
|
|
108244
|
+
linux: () => {
|
|
108245
|
+
if (process.env[WAYLAND_DISPLAY_ENV_VAR] && commandExists("wl-copy")) {
|
|
108246
|
+
return async (text) => {
|
|
108247
|
+
await runCommandWithStdin("wl-copy", [], text);
|
|
108248
|
+
};
|
|
108249
|
+
}
|
|
108250
|
+
if (commandExists("xclip")) {
|
|
108251
|
+
return async (text) => {
|
|
108252
|
+
await runCommandWithStdin("xclip", ["-selection", "clipboard"], text);
|
|
108253
|
+
};
|
|
108254
|
+
}
|
|
108255
|
+
if (commandExists("xsel")) {
|
|
108256
|
+
return async (text) => {
|
|
108257
|
+
await runCommandWithStdin("xsel", ["--clipboard", "--input"], text);
|
|
108258
|
+
};
|
|
108259
|
+
}
|
|
108260
|
+
return null;
|
|
108261
|
+
},
|
|
108262
|
+
win32: () => {
|
|
108263
|
+
return async (text) => {
|
|
108264
|
+
await runCommandWithStdin("powershell.exe", [
|
|
108265
|
+
"-NonInteractive",
|
|
108266
|
+
"-NoProfile",
|
|
108267
|
+
"-Command",
|
|
108268
|
+
"[Console]::InputEncoding = [System.Text.Encoding]::UTF8; Set-Clipboard -Value ([Console]::In.ReadToEnd())"
|
|
108269
|
+
], text);
|
|
108270
|
+
};
|
|
108271
|
+
}
|
|
108272
|
+
};
|
|
108273
|
+
var cachedCopyMethod = null;
|
|
108274
|
+
var copyMethodResolved = false;
|
|
108275
|
+
var resolveCopyMethod = () => {
|
|
108276
|
+
if (copyMethodResolved) {
|
|
108277
|
+
return cachedCopyMethod;
|
|
108278
|
+
}
|
|
108279
|
+
const platform2 = process.platform;
|
|
108280
|
+
const builder = copyMethodBuilders[platform2];
|
|
108281
|
+
cachedCopyMethod = builder ? builder() : null;
|
|
108282
|
+
copyMethodResolved = true;
|
|
108283
|
+
return cachedCopyMethod;
|
|
108284
|
+
};
|
|
108285
|
+
var copyToClipboard = async (text) => {
|
|
108286
|
+
writeOsc52(text);
|
|
108287
|
+
const method = resolveCopyMethod();
|
|
108288
|
+
if (method) {
|
|
108289
|
+
await method(text);
|
|
108290
|
+
}
|
|
108291
|
+
};
|
|
108292
|
+
|
|
108293
|
+
// src/tui-solid/app.tsx
|
|
108066
108294
|
init_version();
|
|
108067
108295
|
|
|
108068
108296
|
// src/tui-solid/context/exit.tsx
|
|
@@ -110190,6 +110418,7 @@ function Header(props) {
|
|
|
110190
110418
|
setProp(_el$11, "justifyContent", "space-between");
|
|
110191
110419
|
setProp(_el$11, "paddingLeft", 1);
|
|
110192
110420
|
setProp(_el$11, "paddingRight", 1);
|
|
110421
|
+
setProp(_el$11, "marginBottom", 1);
|
|
110193
110422
|
setProp(_el$11, "border", ["bottom"]);
|
|
110194
110423
|
insertNode(_el$12, _el$15);
|
|
110195
110424
|
insertNode(_el$12, _el$17);
|
|
@@ -110351,17 +110580,18 @@ function Header(props) {
|
|
|
110351
110580
|
}
|
|
110352
110581
|
}), null);
|
|
110353
110582
|
effect((_p$) => {
|
|
110354
|
-
var _v$15 = theme.colors.border, _v$16 = theme.colors.
|
|
110583
|
+
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
110584
|
_v$15 !== _p$.e && (_p$.e = setProp(_el$11, "borderColor", _v$15, _p$.e));
|
|
110356
|
-
_v$16 !== _p$.t && (_p$.t = setProp(_el$
|
|
110357
|
-
_v$17 !== _p$.a && (_p$.a = setProp(_el$
|
|
110358
|
-
_v$18 !== _p$.o && (_p$.o = setProp(_el$
|
|
110359
|
-
_v$19 !== _p$.i && (_p$.i = setProp(_el$20, "
|
|
110360
|
-
_v$20 !== _p$.n && (_p$.n = setProp(_el$
|
|
110361
|
-
_v$21 !== _p$.s && (_p$.s = setProp(_el$
|
|
110362
|
-
_v$22 !== _p$.h && (_p$.h = setProp(_el$
|
|
110363
|
-
_v$23 !== _p$.r && (_p$.r = setProp(_el$
|
|
110364
|
-
_v$24 !== _p$.d && (_p$.d = setProp(_el$
|
|
110585
|
+
_v$16 !== _p$.t && (_p$.t = setProp(_el$11, "backgroundColor", _v$16, _p$.t));
|
|
110586
|
+
_v$17 !== _p$.a && (_p$.a = setProp(_el$15, "fg", _v$17, _p$.a));
|
|
110587
|
+
_v$18 !== _p$.o && (_p$.o = setProp(_el$17, "fg", _v$18, _p$.o));
|
|
110588
|
+
_v$19 !== _p$.i && (_p$.i = setProp(_el$20, "fg", _v$19, _p$.i));
|
|
110589
|
+
_v$20 !== _p$.n && (_p$.n = setProp(_el$20, "attributes", _v$20, _p$.n));
|
|
110590
|
+
_v$21 !== _p$.s && (_p$.s = setProp(_el$26, "fg", _v$21, _p$.s));
|
|
110591
|
+
_v$22 !== _p$.h && (_p$.h = setProp(_el$44, "fg", _v$22, _p$.h));
|
|
110592
|
+
_v$23 !== _p$.r && (_p$.r = setProp(_el$46, "fg", _v$23, _p$.r));
|
|
110593
|
+
_v$24 !== _p$.d && (_p$.d = setProp(_el$48, "fg", _v$24, _p$.d));
|
|
110594
|
+
_v$25 !== _p$.l && (_p$.l = setProp(_el$50, "fg", _v$25, _p$.l));
|
|
110365
110595
|
return _p$;
|
|
110366
110596
|
}, {
|
|
110367
110597
|
e: undefined,
|
|
@@ -110373,7 +110603,8 @@ function Header(props) {
|
|
|
110373
110603
|
s: undefined,
|
|
110374
110604
|
h: undefined,
|
|
110375
110605
|
r: undefined,
|
|
110376
|
-
d: undefined
|
|
110606
|
+
d: undefined,
|
|
110607
|
+
l: undefined
|
|
110377
110608
|
});
|
|
110378
110609
|
return _el$;
|
|
110379
110610
|
})();
|
|
@@ -110929,13 +111160,31 @@ function SystemEntry(props) {
|
|
|
110929
111160
|
}
|
|
110930
111161
|
function ThinkingEntry(props) {
|
|
110931
111162
|
const theme = useTheme();
|
|
111163
|
+
const firstLine = createMemo(() => {
|
|
111164
|
+
const lines = props.entry.content.split(`
|
|
111165
|
+
`);
|
|
111166
|
+
const line2 = lines[0] || "";
|
|
111167
|
+
if (line2.length > 80)
|
|
111168
|
+
return line2.substring(0, 80) + "...";
|
|
111169
|
+
return line2;
|
|
111170
|
+
});
|
|
110932
111171
|
return (() => {
|
|
110933
|
-
var _el$15 = createElement("box"), _el$16 = createElement("text"), _el$17 = createTextNode(
|
|
111172
|
+
var _el$15 = createElement("box"), _el$16 = createElement("text"), _el$17 = createTextNode(`Thinking: `);
|
|
110934
111173
|
insertNode(_el$15, _el$16);
|
|
110935
111174
|
setProp(_el$15, "marginBottom", 1);
|
|
111175
|
+
setProp(_el$15, "border", ["left"]);
|
|
111176
|
+
setProp(_el$15, "paddingLeft", 1);
|
|
110936
111177
|
insertNode(_el$16, _el$17);
|
|
110937
|
-
insert(_el$16,
|
|
110938
|
-
effect((
|
|
111178
|
+
insert(_el$16, firstLine, null);
|
|
111179
|
+
effect((_p$) => {
|
|
111180
|
+
var _v$5 = theme.colors.modeThinking, _v$6 = theme.colors.textDim;
|
|
111181
|
+
_v$5 !== _p$.e && (_p$.e = setProp(_el$15, "borderColor", _v$5, _p$.e));
|
|
111182
|
+
_v$6 !== _p$.t && (_p$.t = setProp(_el$16, "fg", _v$6, _p$.t));
|
|
111183
|
+
return _p$;
|
|
111184
|
+
}, {
|
|
111185
|
+
e: undefined,
|
|
111186
|
+
t: undefined
|
|
111187
|
+
});
|
|
110939
111188
|
return _el$15;
|
|
110940
111189
|
})();
|
|
110941
111190
|
}
|
|
@@ -111069,9 +111318,9 @@ function DiffToolEntry(props) {
|
|
|
111069
111318
|
}
|
|
111070
111319
|
}));
|
|
111071
111320
|
effect((_p$) => {
|
|
111072
|
-
var _v$
|
|
111073
|
-
_v$
|
|
111074
|
-
_v$
|
|
111321
|
+
var _v$7 = props.statusColor, _v$8 = theme.colors.roleTool;
|
|
111322
|
+
_v$7 !== _p$.e && (_p$.e = setProp(_el$20, "fg", _v$7, _p$.e));
|
|
111323
|
+
_v$8 !== _p$.t && (_p$.t = setProp(_el$22, "fg", _v$8, _p$.t));
|
|
111075
111324
|
return _p$;
|
|
111076
111325
|
}, {
|
|
111077
111326
|
e: undefined,
|
|
@@ -111171,9 +111420,9 @@ function MultilineToolEntry(props) {
|
|
|
111171
111420
|
}
|
|
111172
111421
|
}), null);
|
|
111173
111422
|
effect((_p$) => {
|
|
111174
|
-
var _v$
|
|
111175
|
-
_v$
|
|
111176
|
-
_v$
|
|
111423
|
+
var _v$9 = props.statusColor, _v$0 = theme.colors.roleTool;
|
|
111424
|
+
_v$9 !== _p$.e && (_p$.e = setProp(_el$29, "fg", _v$9, _p$.e));
|
|
111425
|
+
_v$0 !== _p$.t && (_p$.t = setProp(_el$31, "fg", _v$0, _p$.t));
|
|
111177
111426
|
return _p$;
|
|
111178
111427
|
}, {
|
|
111179
111428
|
e: undefined,
|
|
@@ -111220,9 +111469,9 @@ function DefaultToolEntry(props) {
|
|
|
111220
111469
|
}
|
|
111221
111470
|
}), null);
|
|
111222
111471
|
effect((_p$) => {
|
|
111223
|
-
var _v$
|
|
111224
|
-
_v$
|
|
111225
|
-
_v$
|
|
111472
|
+
var _v$1 = props.statusColor, _v$10 = theme.colors.roleTool;
|
|
111473
|
+
_v$1 !== _p$.e && (_p$.e = setProp(_el$44, "fg", _v$1, _p$.e));
|
|
111474
|
+
_v$10 !== _p$.t && (_p$.t = setProp(_el$46, "fg", _v$10, _p$.t));
|
|
111226
111475
|
return _p$;
|
|
111227
111476
|
}, {
|
|
111228
111477
|
e: undefined,
|
|
@@ -111334,20 +111583,6 @@ function LogEntryDisplay(props) {
|
|
|
111334
111583
|
|
|
111335
111584
|
// src/tui-solid/components/logs/log-panel.tsx
|
|
111336
111585
|
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
111586
|
function LogPanel() {
|
|
111352
111587
|
const theme = useTheme();
|
|
111353
111588
|
const app = useAppStore();
|
|
@@ -111419,32 +111654,13 @@ function LogPanel() {
|
|
|
111419
111654
|
return;
|
|
111420
111655
|
}
|
|
111421
111656
|
});
|
|
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
111657
|
return (() => {
|
|
111442
111658
|
var _el$ = createElement("box");
|
|
111443
111659
|
setProp(_el$, "flexDirection", "column");
|
|
111444
111660
|
setProp(_el$, "flexGrow", 1);
|
|
111445
111661
|
setProp(_el$, "paddingLeft", 1);
|
|
111446
111662
|
setProp(_el$, "paddingRight", 1);
|
|
111447
|
-
setProp(_el$, "
|
|
111663
|
+
setProp(_el$, "marginTop", 1);
|
|
111448
111664
|
insert(_el$, createComponent2(Show, {
|
|
111449
111665
|
get when() {
|
|
111450
111666
|
return hasContent();
|
|
@@ -111476,8 +111692,11 @@ function LogPanel() {
|
|
|
111476
111692
|
get children() {
|
|
111477
111693
|
var _el$2 = createElement("scrollbox"), _el$3 = createElement("box");
|
|
111478
111694
|
insertNode(_el$2, _el$3);
|
|
111479
|
-
|
|
111480
|
-
|
|
111695
|
+
use((el) => {
|
|
111696
|
+
scrollboxRef = el;
|
|
111697
|
+
el.verticalScrollBar.visible = false;
|
|
111698
|
+
el.horizontalScrollBar.visible = false;
|
|
111699
|
+
}, _el$2);
|
|
111481
111700
|
setProp(_el$2, "stickyStart", "bottom");
|
|
111482
111701
|
setProp(_el$2, "flexGrow", 1);
|
|
111483
111702
|
setProp(_el$3, "flexDirection", "column");
|
|
@@ -111493,7 +111712,6 @@ function LogPanel() {
|
|
|
111493
111712
|
return _el$2;
|
|
111494
111713
|
}
|
|
111495
111714
|
}));
|
|
111496
|
-
effect((_$p) => setProp(_el$, "borderColor", theme.colors.border, _$p));
|
|
111497
111715
|
return _el$;
|
|
111498
111716
|
})();
|
|
111499
111717
|
}
|
|
@@ -112812,11 +113030,14 @@ function PermissionModal(props) {
|
|
|
112812
113030
|
insertNode(_el$, _el$14);
|
|
112813
113031
|
insertNode(_el$, _el$15);
|
|
112814
113032
|
setProp(_el$, "flexDirection", "column");
|
|
112815
|
-
setProp(_el$, "border", ["top"
|
|
113033
|
+
setProp(_el$, "border", ["top"]);
|
|
112816
113034
|
setProp(_el$, "paddingLeft", 2);
|
|
112817
113035
|
setProp(_el$, "paddingRight", 2);
|
|
112818
113036
|
setProp(_el$, "paddingTop", 1);
|
|
112819
113037
|
setProp(_el$, "paddingBottom", 1);
|
|
113038
|
+
setProp(_el$, "width", "100%");
|
|
113039
|
+
setProp(_el$, "height", "auto");
|
|
113040
|
+
setProp(_el$, "flexShrink", 0);
|
|
112820
113041
|
insertNode(_el$2, _el$3);
|
|
112821
113042
|
setProp(_el$2, "marginBottom", 1);
|
|
112822
113043
|
insertNode(_el$3, createTextNode(`⚠ Permission Required`));
|
|
@@ -112931,6 +113152,341 @@ function PermissionModal(props) {
|
|
|
112931
113152
|
})();
|
|
112932
113153
|
}
|
|
112933
113154
|
|
|
113155
|
+
// src/tui-solid/components/modals/plan-approval-modal.tsx
|
|
113156
|
+
init_server();
|
|
113157
|
+
await __promiseAll([
|
|
113158
|
+
init_solid(),
|
|
113159
|
+
init_solid(),
|
|
113160
|
+
init_solid(),
|
|
113161
|
+
init_solid(),
|
|
113162
|
+
init_solid(),
|
|
113163
|
+
init_solid(),
|
|
113164
|
+
init_solid(),
|
|
113165
|
+
init_solid(),
|
|
113166
|
+
init_solid(),
|
|
113167
|
+
init_core2(),
|
|
113168
|
+
init_theme2()
|
|
113169
|
+
]);
|
|
113170
|
+
|
|
113171
|
+
// src/constants/plan-approval.ts
|
|
113172
|
+
var PLAN_APPROVAL_OPTIONS = [
|
|
113173
|
+
{
|
|
113174
|
+
key: "1",
|
|
113175
|
+
label: "Yes, clear context and auto-accept edits",
|
|
113176
|
+
description: "Approve plan, clear conversation context, and auto-accept all file edits",
|
|
113177
|
+
editMode: "auto_accept_clear",
|
|
113178
|
+
shortcut: "shift+tab"
|
|
113179
|
+
},
|
|
113180
|
+
{
|
|
113181
|
+
key: "2",
|
|
113182
|
+
label: "Yes, auto-accept edits",
|
|
113183
|
+
description: "Approve plan and auto-accept all file edits without prompting",
|
|
113184
|
+
editMode: "auto_accept"
|
|
113185
|
+
},
|
|
113186
|
+
{
|
|
113187
|
+
key: "3",
|
|
113188
|
+
label: "Yes, manually approve edits",
|
|
113189
|
+
description: "Approve plan but require manual approval for each file edit",
|
|
113190
|
+
editMode: "manual_approve"
|
|
113191
|
+
},
|
|
113192
|
+
{
|
|
113193
|
+
key: "4",
|
|
113194
|
+
label: "Type here to tell CodeTyper what to change",
|
|
113195
|
+
description: "Provide feedback or modifications to the plan",
|
|
113196
|
+
editMode: "feedback"
|
|
113197
|
+
}
|
|
113198
|
+
];
|
|
113199
|
+
var PLAN_APPROVAL_FOOTER_TEXT = "ctrl-g to edit in editor";
|
|
113200
|
+
|
|
113201
|
+
// src/tui-solid/components/modals/plan-approval-modal.tsx
|
|
113202
|
+
function PlanApprovalModal(props) {
|
|
113203
|
+
const theme = useTheme();
|
|
113204
|
+
const [selectedIndex, setSelectedIndex] = createSignal(0);
|
|
113205
|
+
const [feedbackMode, setFeedbackMode] = createSignal(false);
|
|
113206
|
+
const [feedbackText, setFeedbackText] = createSignal("");
|
|
113207
|
+
const isActive = () => props.isActive ?? true;
|
|
113208
|
+
const optionCount = PLAN_APPROVAL_OPTIONS.length;
|
|
113209
|
+
const handleApproval = (option) => {
|
|
113210
|
+
if (option.editMode === "feedback") {
|
|
113211
|
+
setFeedbackMode(true);
|
|
113212
|
+
return;
|
|
113213
|
+
}
|
|
113214
|
+
props.onRespond({
|
|
113215
|
+
approved: true,
|
|
113216
|
+
editMode: option.editMode
|
|
113217
|
+
});
|
|
113218
|
+
};
|
|
113219
|
+
const handleFeedbackSubmit = () => {
|
|
113220
|
+
const text = feedbackText().trim();
|
|
113221
|
+
if (!text)
|
|
113222
|
+
return;
|
|
113223
|
+
props.onRespond({
|
|
113224
|
+
approved: true,
|
|
113225
|
+
editMode: "feedback",
|
|
113226
|
+
feedback: text
|
|
113227
|
+
});
|
|
113228
|
+
};
|
|
113229
|
+
const handleCancel = () => {
|
|
113230
|
+
if (feedbackMode()) {
|
|
113231
|
+
setFeedbackMode(false);
|
|
113232
|
+
setFeedbackText("");
|
|
113233
|
+
return;
|
|
113234
|
+
}
|
|
113235
|
+
props.onRespond({
|
|
113236
|
+
approved: false,
|
|
113237
|
+
editMode: "manual_approve"
|
|
113238
|
+
});
|
|
113239
|
+
};
|
|
113240
|
+
useKeyboard((evt) => {
|
|
113241
|
+
if (!isActive())
|
|
113242
|
+
return;
|
|
113243
|
+
evt.stopPropagation();
|
|
113244
|
+
if (feedbackMode()) {
|
|
113245
|
+
if (evt.name === "return") {
|
|
113246
|
+
handleFeedbackSubmit();
|
|
113247
|
+
evt.preventDefault();
|
|
113248
|
+
return;
|
|
113249
|
+
}
|
|
113250
|
+
if (evt.name === "escape") {
|
|
113251
|
+
handleCancel();
|
|
113252
|
+
evt.preventDefault();
|
|
113253
|
+
return;
|
|
113254
|
+
}
|
|
113255
|
+
if (evt.name === "backspace") {
|
|
113256
|
+
setFeedbackText((prev) => prev.slice(0, -1));
|
|
113257
|
+
evt.preventDefault();
|
|
113258
|
+
return;
|
|
113259
|
+
}
|
|
113260
|
+
if (evt.name.length === 1 && !evt.ctrl && !evt.meta) {
|
|
113261
|
+
setFeedbackText((prev) => prev + evt.name);
|
|
113262
|
+
evt.preventDefault();
|
|
113263
|
+
}
|
|
113264
|
+
return;
|
|
113265
|
+
}
|
|
113266
|
+
if (evt.name === "up") {
|
|
113267
|
+
setSelectedIndex((prev) => prev > 0 ? prev - 1 : optionCount - 1);
|
|
113268
|
+
evt.preventDefault();
|
|
113269
|
+
return;
|
|
113270
|
+
}
|
|
113271
|
+
if (evt.name === "down") {
|
|
113272
|
+
setSelectedIndex((prev) => prev < optionCount - 1 ? prev + 1 : 0);
|
|
113273
|
+
evt.preventDefault();
|
|
113274
|
+
return;
|
|
113275
|
+
}
|
|
113276
|
+
if (evt.name === "return") {
|
|
113277
|
+
handleApproval(PLAN_APPROVAL_OPTIONS[selectedIndex()]);
|
|
113278
|
+
evt.preventDefault();
|
|
113279
|
+
return;
|
|
113280
|
+
}
|
|
113281
|
+
if (evt.name === "escape") {
|
|
113282
|
+
handleCancel();
|
|
113283
|
+
evt.preventDefault();
|
|
113284
|
+
return;
|
|
113285
|
+
}
|
|
113286
|
+
if (evt.name === "tab" && evt.shift) {
|
|
113287
|
+
handleApproval(PLAN_APPROVAL_OPTIONS[0]);
|
|
113288
|
+
evt.preventDefault();
|
|
113289
|
+
return;
|
|
113290
|
+
}
|
|
113291
|
+
if (evt.name.length === 1 && !evt.ctrl && !evt.meta) {
|
|
113292
|
+
const option = PLAN_APPROVAL_OPTIONS.find((o2) => o2.key === evt.name);
|
|
113293
|
+
if (option) {
|
|
113294
|
+
handleApproval(option);
|
|
113295
|
+
evt.preventDefault();
|
|
113296
|
+
}
|
|
113297
|
+
}
|
|
113298
|
+
});
|
|
113299
|
+
return (() => {
|
|
113300
|
+
var _el$ = createElement("box"), _el$2 = createElement("box"), _el$3 = createElement("text");
|
|
113301
|
+
insertNode(_el$, _el$2);
|
|
113302
|
+
setProp(_el$, "flexDirection", "column");
|
|
113303
|
+
setProp(_el$, "border", ["top", "bottom", "left", "right"]);
|
|
113304
|
+
setProp(_el$, "paddingLeft", 2);
|
|
113305
|
+
setProp(_el$, "paddingRight", 2);
|
|
113306
|
+
setProp(_el$, "paddingTop", 1);
|
|
113307
|
+
setProp(_el$, "paddingBottom", 1);
|
|
113308
|
+
insertNode(_el$2, _el$3);
|
|
113309
|
+
setProp(_el$2, "marginBottom", 1);
|
|
113310
|
+
insertNode(_el$3, createTextNode(`CodeTyper has written up a plan and is ready to execute. Would you like to proceed?`));
|
|
113311
|
+
insert(_el$, createComponent2(Show, {
|
|
113312
|
+
get when() {
|
|
113313
|
+
return props.prompt.planTitle;
|
|
113314
|
+
},
|
|
113315
|
+
get children() {
|
|
113316
|
+
var _el$5 = createElement("box"), _el$6 = createElement("text");
|
|
113317
|
+
insertNode(_el$5, _el$6);
|
|
113318
|
+
setProp(_el$5, "marginBottom", 1);
|
|
113319
|
+
insert(_el$6, () => props.prompt.planTitle);
|
|
113320
|
+
effect((_p$) => {
|
|
113321
|
+
var _v$ = theme.colors.text, _v$2 = TextAttributes.BOLD;
|
|
113322
|
+
_v$ !== _p$.e && (_p$.e = setProp(_el$6, "fg", _v$, _p$.e));
|
|
113323
|
+
_v$2 !== _p$.t && (_p$.t = setProp(_el$6, "attributes", _v$2, _p$.t));
|
|
113324
|
+
return _p$;
|
|
113325
|
+
}, {
|
|
113326
|
+
e: undefined,
|
|
113327
|
+
t: undefined
|
|
113328
|
+
});
|
|
113329
|
+
return _el$5;
|
|
113330
|
+
}
|
|
113331
|
+
}), null);
|
|
113332
|
+
insert(_el$, createComponent2(Show, {
|
|
113333
|
+
get when() {
|
|
113334
|
+
return props.prompt.planSummary;
|
|
113335
|
+
},
|
|
113336
|
+
get children() {
|
|
113337
|
+
var _el$7 = createElement("box"), _el$8 = createElement("text");
|
|
113338
|
+
insertNode(_el$7, _el$8);
|
|
113339
|
+
setProp(_el$7, "marginBottom", 1);
|
|
113340
|
+
insert(_el$8, () => props.prompt.planSummary);
|
|
113341
|
+
effect((_$p) => setProp(_el$8, "fg", theme.colors.textDim, _$p));
|
|
113342
|
+
return _el$7;
|
|
113343
|
+
}
|
|
113344
|
+
}), null);
|
|
113345
|
+
insert(_el$, createComponent2(Show, {
|
|
113346
|
+
get when() {
|
|
113347
|
+
return !feedbackMode();
|
|
113348
|
+
},
|
|
113349
|
+
get children() {
|
|
113350
|
+
var _el$9 = createElement("box");
|
|
113351
|
+
setProp(_el$9, "flexDirection", "column");
|
|
113352
|
+
setProp(_el$9, "marginTop", 1);
|
|
113353
|
+
insert(_el$9, createComponent2(For, {
|
|
113354
|
+
each: PLAN_APPROVAL_OPTIONS,
|
|
113355
|
+
children: (option, index) => {
|
|
113356
|
+
const isSelected = () => index() === selectedIndex();
|
|
113357
|
+
return (() => {
|
|
113358
|
+
var _el$23 = createElement("box"), _el$24 = createElement("text"), _el$25 = createElement("text"), _el$26 = createTextNode(`. `), _el$27 = createElement("text");
|
|
113359
|
+
insertNode(_el$23, _el$24);
|
|
113360
|
+
insertNode(_el$23, _el$25);
|
|
113361
|
+
insertNode(_el$23, _el$27);
|
|
113362
|
+
setProp(_el$23, "flexDirection", "row");
|
|
113363
|
+
insert(_el$24, () => isSelected() ? "> " : " ");
|
|
113364
|
+
insertNode(_el$25, _el$26);
|
|
113365
|
+
insert(_el$25, () => option.key, _el$26);
|
|
113366
|
+
insert(_el$27, () => option.label);
|
|
113367
|
+
insert(_el$23, createComponent2(Show, {
|
|
113368
|
+
get when() {
|
|
113369
|
+
return option.shortcut;
|
|
113370
|
+
},
|
|
113371
|
+
get children() {
|
|
113372
|
+
var _el$28 = createElement("text"), _el$29 = createTextNode(` (`), _el$31 = createTextNode(`)`);
|
|
113373
|
+
insertNode(_el$28, _el$29);
|
|
113374
|
+
insertNode(_el$28, _el$31);
|
|
113375
|
+
insert(_el$28, () => option.shortcut, _el$31);
|
|
113376
|
+
effect((_$p) => setProp(_el$28, "fg", theme.colors.textMuted, _$p));
|
|
113377
|
+
return _el$28;
|
|
113378
|
+
}
|
|
113379
|
+
}), null);
|
|
113380
|
+
effect((_p$) => {
|
|
113381
|
+
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;
|
|
113382
|
+
_v$10 !== _p$.e && (_p$.e = setProp(_el$24, "fg", _v$10, _p$.e));
|
|
113383
|
+
_v$11 !== _p$.t && (_p$.t = setProp(_el$24, "attributes", _v$11, _p$.t));
|
|
113384
|
+
_v$12 !== _p$.a && (_p$.a = setProp(_el$25, "fg", _v$12, _p$.a));
|
|
113385
|
+
_v$13 !== _p$.o && (_p$.o = setProp(_el$27, "fg", _v$13, _p$.o));
|
|
113386
|
+
return _p$;
|
|
113387
|
+
}, {
|
|
113388
|
+
e: undefined,
|
|
113389
|
+
t: undefined,
|
|
113390
|
+
a: undefined,
|
|
113391
|
+
o: undefined
|
|
113392
|
+
});
|
|
113393
|
+
return _el$23;
|
|
113394
|
+
})();
|
|
113395
|
+
}
|
|
113396
|
+
}));
|
|
113397
|
+
return _el$9;
|
|
113398
|
+
}
|
|
113399
|
+
}), null);
|
|
113400
|
+
insert(_el$, createComponent2(Show, {
|
|
113401
|
+
get when() {
|
|
113402
|
+
return feedbackMode();
|
|
113403
|
+
},
|
|
113404
|
+
get children() {
|
|
113405
|
+
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");
|
|
113406
|
+
insertNode(_el$0, _el$1);
|
|
113407
|
+
insertNode(_el$0, _el$11);
|
|
113408
|
+
insertNode(_el$0, _el$15);
|
|
113409
|
+
setProp(_el$0, "flexDirection", "column");
|
|
113410
|
+
setProp(_el$0, "marginTop", 1);
|
|
113411
|
+
insertNode(_el$1, createTextNode(`Tell CodeTyper what to change:`));
|
|
113412
|
+
insertNode(_el$11, _el$12);
|
|
113413
|
+
setProp(_el$11, "border", ["left"]);
|
|
113414
|
+
setProp(_el$11, "paddingLeft", 1);
|
|
113415
|
+
setProp(_el$11, "marginTop", 1);
|
|
113416
|
+
insertNode(_el$12, _el$13);
|
|
113417
|
+
insert(_el$12, () => feedbackText() || " ", _el$13);
|
|
113418
|
+
insertNode(_el$13, createTextNode(`_`));
|
|
113419
|
+
insertNode(_el$15, createTextNode(`Enter to submit | Esc to cancel`));
|
|
113420
|
+
effect((_p$) => {
|
|
113421
|
+
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;
|
|
113422
|
+
_v$3 !== _p$.e && (_p$.e = setProp(_el$1, "fg", _v$3, _p$.e));
|
|
113423
|
+
_v$4 !== _p$.t && (_p$.t = setProp(_el$11, "borderColor", _v$4, _p$.t));
|
|
113424
|
+
_v$5 !== _p$.a && (_p$.a = setProp(_el$12, "fg", _v$5, _p$.a));
|
|
113425
|
+
_v$6 !== _p$.o && (_p$.o = setProp(_el$13, "fg", _v$6, _p$.o));
|
|
113426
|
+
_v$7 !== _p$.i && (_p$.i = setProp(_el$15, "fg", _v$7, _p$.i));
|
|
113427
|
+
return _p$;
|
|
113428
|
+
}, {
|
|
113429
|
+
e: undefined,
|
|
113430
|
+
t: undefined,
|
|
113431
|
+
a: undefined,
|
|
113432
|
+
o: undefined,
|
|
113433
|
+
i: undefined
|
|
113434
|
+
});
|
|
113435
|
+
return _el$0;
|
|
113436
|
+
}
|
|
113437
|
+
}), null);
|
|
113438
|
+
insert(_el$, createComponent2(Show, {
|
|
113439
|
+
get when() {
|
|
113440
|
+
return !feedbackMode();
|
|
113441
|
+
},
|
|
113442
|
+
get children() {
|
|
113443
|
+
var _el$17 = createElement("box");
|
|
113444
|
+
setProp(_el$17, "marginTop", 1);
|
|
113445
|
+
setProp(_el$17, "flexDirection", "row");
|
|
113446
|
+
insert(_el$17, createComponent2(Show, {
|
|
113447
|
+
get when() {
|
|
113448
|
+
return props.prompt.planFilePath;
|
|
113449
|
+
},
|
|
113450
|
+
get children() {
|
|
113451
|
+
var _el$18 = createElement("text"), _el$19 = createTextNode(` - `);
|
|
113452
|
+
insertNode(_el$18, _el$19);
|
|
113453
|
+
insert(_el$18, PLAN_APPROVAL_FOOTER_TEXT, _el$19);
|
|
113454
|
+
insert(_el$18, () => props.prompt.planFilePath, null);
|
|
113455
|
+
effect((_$p) => setProp(_el$18, "fg", theme.colors.textDim, _$p));
|
|
113456
|
+
return _el$18;
|
|
113457
|
+
}
|
|
113458
|
+
}), null);
|
|
113459
|
+
insert(_el$17, createComponent2(Show, {
|
|
113460
|
+
get when() {
|
|
113461
|
+
return !props.prompt.planFilePath;
|
|
113462
|
+
},
|
|
113463
|
+
get children() {
|
|
113464
|
+
var _el$20 = createElement("text"), _el$21 = createTextNode(`↑↓ options | Enter select | 1-4 shortcut | Esc cancel`);
|
|
113465
|
+
insertNode(_el$20, _el$21);
|
|
113466
|
+
effect((_$p) => setProp(_el$20, "fg", theme.colors.textDim, _$p));
|
|
113467
|
+
return _el$20;
|
|
113468
|
+
}
|
|
113469
|
+
}), null);
|
|
113470
|
+
return _el$17;
|
|
113471
|
+
}
|
|
113472
|
+
}), null);
|
|
113473
|
+
effect((_p$) => {
|
|
113474
|
+
var _v$8 = theme.colors.borderModal, _v$9 = theme.colors.background, _v$0 = theme.colors.primary, _v$1 = TextAttributes.BOLD;
|
|
113475
|
+
_v$8 !== _p$.e && (_p$.e = setProp(_el$, "borderColor", _v$8, _p$.e));
|
|
113476
|
+
_v$9 !== _p$.t && (_p$.t = setProp(_el$, "backgroundColor", _v$9, _p$.t));
|
|
113477
|
+
_v$0 !== _p$.a && (_p$.a = setProp(_el$3, "fg", _v$0, _p$.a));
|
|
113478
|
+
_v$1 !== _p$.o && (_p$.o = setProp(_el$3, "attributes", _v$1, _p$.o));
|
|
113479
|
+
return _p$;
|
|
113480
|
+
}, {
|
|
113481
|
+
e: undefined,
|
|
113482
|
+
t: undefined,
|
|
113483
|
+
a: undefined,
|
|
113484
|
+
o: undefined
|
|
113485
|
+
});
|
|
113486
|
+
return _el$;
|
|
113487
|
+
})();
|
|
113488
|
+
}
|
|
113489
|
+
|
|
112934
113490
|
// src/tui-solid/components/modals/learning-modal.tsx
|
|
112935
113491
|
init_server();
|
|
112936
113492
|
await __promiseAll([
|
|
@@ -114559,10 +115115,53 @@ function Session(props) {
|
|
|
114559
115115
|
return createComponent2(DebugLogPanel, {});
|
|
114560
115116
|
}
|
|
114561
115117
|
}), null);
|
|
115118
|
+
insert(_el$, createComponent2(Show, {
|
|
115119
|
+
get when() {
|
|
115120
|
+
return memo2(() => app.mode() === "permission_prompt")() && app.permissionRequest();
|
|
115121
|
+
},
|
|
115122
|
+
get children() {
|
|
115123
|
+
return createComponent2(PermissionModal, {
|
|
115124
|
+
get request() {
|
|
115125
|
+
return app.permissionRequest();
|
|
115126
|
+
},
|
|
115127
|
+
get onRespond() {
|
|
115128
|
+
return props.onPermissionResponse;
|
|
115129
|
+
},
|
|
115130
|
+
get isActive() {
|
|
115131
|
+
return app.mode() === "permission_prompt";
|
|
115132
|
+
}
|
|
115133
|
+
});
|
|
115134
|
+
}
|
|
115135
|
+
}), null);
|
|
115136
|
+
insert(_el$, createComponent2(Show, {
|
|
115137
|
+
get when() {
|
|
115138
|
+
return memo2(() => app.mode() === "plan_approval")() && app.planApprovalPrompt();
|
|
115139
|
+
},
|
|
115140
|
+
get children() {
|
|
115141
|
+
return createComponent2(PlanApprovalModal, {
|
|
115142
|
+
get prompt() {
|
|
115143
|
+
return app.planApprovalPrompt();
|
|
115144
|
+
},
|
|
115145
|
+
get onRespond() {
|
|
115146
|
+
return props.onPlanApprovalResponse;
|
|
115147
|
+
},
|
|
115148
|
+
get isActive() {
|
|
115149
|
+
return app.mode() === "plan_approval";
|
|
115150
|
+
}
|
|
115151
|
+
});
|
|
115152
|
+
}
|
|
115153
|
+
}), null);
|
|
114562
115154
|
insert(_el$, createComponent2(StatusBar, {}), null);
|
|
114563
|
-
insert(_el$, createComponent2(
|
|
114564
|
-
get
|
|
114565
|
-
return
|
|
115155
|
+
insert(_el$, createComponent2(Show, {
|
|
115156
|
+
get when() {
|
|
115157
|
+
return memo2(() => app.mode() !== "permission_prompt")() && app.mode() !== "plan_approval";
|
|
115158
|
+
},
|
|
115159
|
+
get children() {
|
|
115160
|
+
return createComponent2(InputArea, {
|
|
115161
|
+
get onSubmit() {
|
|
115162
|
+
return props.onSubmit;
|
|
115163
|
+
}
|
|
115164
|
+
});
|
|
114566
115165
|
}
|
|
114567
115166
|
}), null);
|
|
114568
115167
|
insert(_el$, createComponent2(Switch, {
|
|
@@ -114756,27 +115355,6 @@ function Session(props) {
|
|
|
114756
115355
|
}
|
|
114757
115356
|
});
|
|
114758
115357
|
}
|
|
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
115358
|
}), createComponent2(Match, {
|
|
114781
115359
|
get when() {
|
|
114782
115360
|
return memo2(() => app.mode() === "learning_prompt")() && app.learningPrompt();
|
|
@@ -114902,8 +115480,17 @@ function AppContent(props) {
|
|
|
114902
115480
|
const exit = useExit();
|
|
114903
115481
|
const toast = useToast();
|
|
114904
115482
|
const theme = useTheme();
|
|
115483
|
+
const renderer = useRenderer();
|
|
115484
|
+
renderer.disableStdoutInterception();
|
|
114905
115485
|
const [fileList, setFileList] = createSignal([]);
|
|
114906
115486
|
setAppStoreRef(app);
|
|
115487
|
+
const copySelectionToClipboard = async () => {
|
|
115488
|
+
const text = renderer.getSelection()?.getSelectedText();
|
|
115489
|
+
if (text && text.length > 0) {
|
|
115490
|
+
await copyToClipboard(text).then(() => toast.info("Copied to clipboard")).catch(() => toast.error("Failed to copy to clipboard"));
|
|
115491
|
+
renderer.clearSelection();
|
|
115492
|
+
}
|
|
115493
|
+
};
|
|
114907
115494
|
createEffect(() => {
|
|
114908
115495
|
if (app.mode() === "file_picker") {
|
|
114909
115496
|
const cwd = process.cwd();
|
|
@@ -114943,6 +115530,11 @@ function AppContent(props) {
|
|
|
114943
115530
|
}, 100);
|
|
114944
115531
|
}
|
|
114945
115532
|
useKeyboard((evt) => {
|
|
115533
|
+
if (evt.ctrl && evt.name === "y") {
|
|
115534
|
+
copySelectionToClipboard();
|
|
115535
|
+
evt.preventDefault();
|
|
115536
|
+
return;
|
|
115537
|
+
}
|
|
114946
115538
|
if (evt.name === "escape") {
|
|
114947
115539
|
abortCurrentOperation(false).then((aborted2) => {
|
|
114948
115540
|
if (aborted2) {
|
|
@@ -115087,6 +115679,9 @@ function AppContent(props) {
|
|
|
115087
115679
|
const handlePermissionResponse = (allowed, scope) => {
|
|
115088
115680
|
props.onPermissionResponse(allowed, scope);
|
|
115089
115681
|
};
|
|
115682
|
+
const handlePlanApprovalResponse = (response2) => {
|
|
115683
|
+
props.onPlanApprovalResponse(response2);
|
|
115684
|
+
};
|
|
115090
115685
|
const handleLearningResponse = (save, scope, editedContent) => {
|
|
115091
115686
|
props.onLearningResponse(save, scope, editedContent);
|
|
115092
115687
|
};
|
|
@@ -115147,6 +115742,7 @@ function AppContent(props) {
|
|
|
115147
115742
|
var _el$7 = createElement("box");
|
|
115148
115743
|
setProp(_el$7, "flexDirection", "column");
|
|
115149
115744
|
setProp(_el$7, "flexGrow", 1);
|
|
115745
|
+
setProp(_el$7, "onMouseUp", () => copySelectionToClipboard());
|
|
115150
115746
|
insert(_el$7, createComponent2(Switch, {
|
|
115151
115747
|
get children() {
|
|
115152
115748
|
return [createComponent2(Match, {
|
|
@@ -115182,6 +115778,7 @@ function AppContent(props) {
|
|
|
115182
115778
|
onProviderSelect: handleProviderSelect,
|
|
115183
115779
|
onCascadeToggle: handleCascadeToggle,
|
|
115184
115780
|
onPermissionResponse: handlePermissionResponse,
|
|
115781
|
+
onPlanApprovalResponse: handlePlanApprovalResponse,
|
|
115185
115782
|
onLearningResponse: handleLearningResponse,
|
|
115186
115783
|
get onBrainSetJwtToken() {
|
|
115187
115784
|
return props.onBrainSetJwtToken;
|
|
@@ -115261,8 +115858,20 @@ function App(props) {
|
|
|
115261
115858
|
}
|
|
115262
115859
|
function tui(options2) {
|
|
115263
115860
|
return new Promise((resolve4) => {
|
|
115861
|
+
const {
|
|
115862
|
+
writeSync: writeSync2
|
|
115863
|
+
} = __require("fs");
|
|
115264
115864
|
const handleExit = (output) => {
|
|
115265
|
-
|
|
115865
|
+
try {
|
|
115866
|
+
writeSync2(1, TERMINAL_RESET);
|
|
115867
|
+
const state4 = appStore.getState();
|
|
115868
|
+
const firstUserLog = state4?.logs?.find((log2) => log2.type === "user");
|
|
115869
|
+
const sessionTitle = firstUserLog?.content;
|
|
115870
|
+
const exitMsg = formatExitMessage(output.sessionId, sessionTitle);
|
|
115871
|
+
if (exitMsg) {
|
|
115872
|
+
writeSync2(1, exitMsg);
|
|
115873
|
+
}
|
|
115874
|
+
} catch {}
|
|
115266
115875
|
resolve4(output);
|
|
115267
115876
|
};
|
|
115268
115877
|
render(() => createComponent2(App, mergeProps3(options2, {
|
|
@@ -115270,8 +115879,7 @@ function tui(options2) {
|
|
|
115270
115879
|
})), {
|
|
115271
115880
|
targetFps: 60,
|
|
115272
115881
|
exitOnCtrlC: false,
|
|
115273
|
-
useKittyKeyboard: {}
|
|
115274
|
-
useMouse: true
|
|
115882
|
+
useKittyKeyboard: {}
|
|
115275
115883
|
});
|
|
115276
115884
|
});
|
|
115277
115885
|
}
|
|
@@ -115392,6 +116000,7 @@ var renderApp = async (props) => {
|
|
|
115392
116000
|
},
|
|
115393
116001
|
onMCPAdd: props.handleMCPAdd ?? defaultHandleMCPAdd,
|
|
115394
116002
|
onPermissionResponse: props.handlePermissionResponse ?? (() => {}),
|
|
116003
|
+
onPlanApprovalResponse: props.handlePlanApprovalResponse ?? (() => {}),
|
|
115395
116004
|
onLearningResponse: props.handleLearningResponse ?? (() => {}),
|
|
115396
116005
|
onBrainSetJwtToken: props.handleBrainSetJwtToken ?? defaultHandleBrainSetJwtToken,
|
|
115397
116006
|
onBrainSetApiKey: props.handleBrainSetApiKey ?? defaultHandleBrainSetApiKey,
|
|
@@ -116514,4 +117123,4 @@ ${plan.steps.map((s) => `${s.id}. ${s.description}`).join(`
|
|
|
116514
117123
|
});
|
|
116515
117124
|
program2.parse(process.argv);
|
|
116516
117125
|
|
|
116517
|
-
//# debugId=
|
|
117126
|
+
//# debugId=916DA4C2FBA06B5A64756E2164756E21
|
package/package.json
CHANGED
package/src/version.json
CHANGED