@proxysoul/soulforge 1.3.8 → 1.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (2) hide show
  1. package/dist/index.js +1673 -1216
  2. package/package.json +1 -1
package/dist/index.js CHANGED
@@ -57814,7 +57814,7 @@ var package_default;
57814
57814
  var init_package = __esm(() => {
57815
57815
  package_default = {
57816
57816
  name: "@proxysoul/soulforge",
57817
- version: "1.3.8",
57817
+ version: "1.5.0",
57818
57818
  description: "Graph-powered code intelligence \u2014 multi-agent coding with codebase-aware AI",
57819
57819
  repository: {
57820
57820
  type: "git",
@@ -62243,7 +62243,6 @@ function markToolWrite(filePath) {
62243
62243
  async function readBufferContent(filePath) {
62244
62244
  const toolWriteTime = recentToolWrites.get(filePath);
62245
62245
  if (toolWriteTime && Date.now() - toolWriteTime < TOOL_WRITE_FRESHNESS_MS) {
62246
- recentToolWrites.delete(filePath);
62247
62246
  return readFile3(filePath, "utf-8");
62248
62247
  }
62249
62248
  inflight++;
@@ -317553,7 +317552,7 @@ function buildRichEditError(content, oldStr, lineHint) {
317553
317552
  const escapeHint = backslashDensity > 0.05 ? `
317554
317553
  [Escape-heavy content detected \u2014 use lineStart for line-based replacement, or use editor(action: edit, startLine, endLine, replacement)]` : "";
317555
317554
  return {
317556
- output: `old_string not found in file (re-read performed \u2014 content below is current):
317555
+ output: `old_string not found in file. Current content at that region:
317557
317556
  ${snippet}${escapeHint}`
317558
317557
  };
317559
317558
  }
@@ -317713,7 +317712,7 @@ var init_edit_file = __esm(() => {
317713
317712
  init_file_events();
317714
317713
  editFileTool = {
317715
317714
  name: "edit_file",
317716
- description: "[TIER-1] Edit a file by replacing content. Read first, then provide path, oldString, newString. " + "Always provide lineStart (1-indexed from read_file output) \u2014 the range is derived from oldString line count. " + "Empty oldString creates a new file. Use multi_edit for multiple changes to the same file. Edits are applied immediately.",
317715
+ description: "[TIER-1] Edit a file by replacing content. Read first, then provide path, oldString, newString. " + "Provide lineStart (1-indexed from read_file output) for reliable line-anchored matching \u2014 " + "the range is derived from oldString line count. Without lineStart, falls back to string matching (fails if ambiguous). Empty oldString creates a new file. Use multi_edit for multiple changes to the same file. Edits are applied immediately.",
317717
317716
  execute: async (args2) => {
317718
317717
  try {
317719
317718
  const filePath = resolve13(args2.path);
@@ -334637,7 +334636,7 @@ var init_multi_edit = __esm(() => {
334637
334636
  init_file_events();
334638
334637
  multiEditTool = {
334639
334638
  name: "multi_edit",
334640
- description: "Apply multiple edits to a single file atomically. All-or-nothing validation. " + "Each edit's oldString and lineStart reference the ORIGINAL file \u2014 the tool handles offset tracking internally. " + "Always provide lineStart (1-indexed). The range is derived from oldString line count.",
334639
+ description: "Apply multiple edits to a single file atomically. All-or-nothing: if any edit fails, ZERO edits are applied. " + "lineStart values reference the ORIGINAL file (pre-edit) \u2014 the tool tracks cumulative line offsets internally. " + "Provide lineStart (1-indexed) for reliable line-anchored matching. Without it, falls back to string matching against evolved content. " + "The range is derived from oldString line count.",
334641
334640
  execute: async (args2) => {
334642
334641
  try {
334643
334642
  const filePath = resolve19(args2.path);
@@ -334681,7 +334680,6 @@ var init_multi_edit = __esm(() => {
334681
334680
  return a.lineStart - b.lineStart;
334682
334681
  });
334683
334682
  let lineOffset = 0;
334684
- const warnings = [];
334685
334683
  for (let i2 = 0;i2 < sortedEdits.length; i2++) {
334686
334684
  const edit = sortedEdits[i2];
334687
334685
  if (!edit)
@@ -334728,21 +334726,21 @@ var init_multi_edit = __esm(() => {
334728
334726
  `);
334729
334727
  return {
334730
334728
  success: false,
334731
- output: `Edit ${String(i2 + 1)}: oldString does not match lines ${String(edit.lineStart)}-${String((edit.lineStart ?? 0) + oldLineCount - 1)}. Actual content:
334729
+ output: `Edit ${String(i2 + 1)}/${String(args2.edits.length)} failed: oldString does not match lines ${String(edit.lineStart)}-${String((edit.lineStart ?? 0) + oldLineCount - 1)}. NO edits were applied (atomic rollback). Actual content at that range:
334732
334730
  ${rangeSnippet}
334733
- Re-read the file and retry with the correct content.`,
334734
- error: `edit ${String(i2 + 1)}: oldString mismatch at line range`
334731
+ Re-read the file and retry ALL edits.`,
334732
+ error: `edit ${String(i2 + 1)}: oldString mismatch at line range (0 edits applied)`
334735
334733
  };
334736
334734
  }
334737
334735
  }
334738
334736
  if (content.includes(edit.oldString)) {
334739
334737
  const occurrences = content.split(edit.oldString).length - 1;
334740
334738
  if (occurrences > 1) {
334741
- const msg = `${label}: found ${String(occurrences)} matches. Provide lineStart to disambiguate.`;
334739
+ const msg = `${label}: found ${String(occurrences)} matches. Provide lineStart to disambiguate. NO edits were applied (atomic rollback).`;
334742
334740
  return {
334743
334741
  success: false,
334744
334742
  output: msg,
334745
- error: msg
334743
+ error: `${label}: ambiguous match (0 edits applied)`
334746
334744
  };
334747
334745
  }
334748
334746
  const idx = content.indexOf(edit.oldString);
@@ -334767,8 +334765,9 @@ Re-read the file and retry with the correct content.`,
334767
334765
  const err2 = buildRichEditError(content, edit.oldString, adjustedLineStart);
334768
334766
  return {
334769
334767
  success: false,
334770
- output: `${label} failed: ${err2.output}`,
334771
- error: `edit ${String(i2 + 1)} failed`
334768
+ output: `${label} failed: ${err2.output}
334769
+ NO edits were applied (atomic rollback). Re-read the file and retry ALL edits.`,
334770
+ error: `edit ${String(i2 + 1)} failed (0 edits applied)`
334772
334771
  };
334773
334772
  }
334774
334773
  const beforeMetrics = analyzeFile(originalContent);
@@ -334794,11 +334793,11 @@ Re-read the file and retry with the correct content.`,
334794
334793
  }).catch(() => null);
334795
334794
  const currentOnDisk = await readFile13(filePath, "utf-8");
334796
334795
  if (currentOnDisk !== originalContent) {
334797
- const msg = "File was modified concurrently since last read. Re-read and retry.";
334796
+ const msg = "File was modified concurrently since last read. NO edits were applied (atomic rollback). Re-read and retry ALL edits.";
334798
334797
  return {
334799
334798
  success: false,
334800
334799
  output: msg,
334801
- error: "concurrent modification"
334800
+ error: "concurrent modification (0 edits applied)"
334802
334801
  };
334803
334802
  }
334804
334803
  pushEdit(filePath, originalContent, content, args2.tabId);
@@ -334818,10 +334817,6 @@ Re-read the file and retry with the correct content.`,
334818
334817
  deltas.push(`imports: ${String(beforeMetrics.importCount)}\u2192${String(afterMetrics.importCount)} (${sign}${String(importDelta)})`);
334819
334818
  }
334820
334819
  let output = `Applied ${String(args2.edits.length)} edits to ${args2.path}`;
334821
- if (warnings.length > 0)
334822
- output += `
334823
- \u26A0 ${warnings.join(`
334824
- \u26A0 `)}`;
334825
334820
  if (deltas.length > 0)
334826
334821
  output += ` (${deltas.join(", ")})`;
334827
334822
  const formatted = await autoFormatAfterEdit(filePath);
@@ -337319,7 +337314,7 @@ function detectProjectCommand(command) {
337319
337314
  }
337320
337315
  return null;
337321
337316
  }
337322
- var DEFAULT_TIMEOUT = 30000, SECRET_ENV_PATTERN, ENV_ALLOWLIST, CO_AUTHOR_LINE2 = "Co-Authored-By: SoulForge <soulforge@proxysoul.com>", _shellCoAuthorEnabled = true, GIT_COMMIT_MSG_RE, _preCommitEnabled = true, MAX_OUTPUT_BYTES = 16384, MAX_COLLECT_BYTES = 256000, CTRL_RE, FILE_READ_RE, FILE_SEARCH_RE, INPUT_REDIR_RE, OUTPUT_REDIR_RE, SUBSHELL_RE, INLINE_CODE_RE, READ_CMD_REDIRECT, PROJECT_CMD_RE, shellTool;
337317
+ var DEFAULT_TIMEOUT = 30000, SECRET_ENV_PATTERN, ENV_ALLOWLIST, CO_AUTHOR_LINE2 = "Co-Authored-By: SoulForge <soulforge@proxysoul.com>", _shellCoAuthorEnabled = true, GIT_COMMIT_MSG_RE, _preCommitEnabled = true, MAX_OUTPUT_BYTES = 16384, MAX_COLLECT_BYTES = 256000, CTRL_RE, FILE_READ_RE, FILE_SEARCH_RE, INPUT_REDIR_RE, OUTPUT_REDIR_RE, SUBSHELL_RE, INLINE_CODE_RE, READ_CMD_REDIRECT, PROJECT_CMD_RE, SHELL_DESCRIPTION = "[TIER-2] Shell command execution. Use for git operations, package installs, system commands. AVOID for: reading files (use read_file), searching code (use soul_grep), verifying edits (use project). LIMITATIONS: Output truncated at 30000 chars. Use '&&' to chain commands, not newlines.", shellTool;
337323
337318
  var init_shell = __esm(() => {
337324
337319
  init_strip_ansi();
337325
337320
  init_forbidden();
@@ -337355,7 +337350,7 @@ var init_shell = __esm(() => {
337355
337350
  PROJECT_CMD_RE = /^(?:bun run|bunx|npm run|npx|pnpm|yarn|deno|cargo|go |mix |dotnet |flutter |dart |swift |zig )\s*(lint|test|typecheck|build|check|clippy|vet|fmt|format)\b/;
337356
337351
  shellTool = {
337357
337352
  name: "shell",
337358
- description: "[TIER-2] Shell command execution. Use for git operations, package installs, system commands. AVOID for: reading files (use read_file), searching code (use soul_grep), verifying edits (use project). LIMITATIONS: Output truncated at 30000 chars. Use '&&' to chain commands, not newlines.",
337353
+ description: SHELL_DESCRIPTION,
337359
337354
  execute: async (args2, abortSignal) => {
337360
337355
  const command = injectCoAuthor(args2.command);
337361
337356
  const cwd2 = args2.cwd ?? process.cwd();
@@ -382326,7 +382321,8 @@ var init_icons = __esm(() => {
382326
382321
  worker: "\uDB81\uDC8B",
382327
382322
  worker_busy: "\uDB81\uDC6E",
382328
382323
  worker_crash: "\uDB80\uDD59",
382329
- worker_restart: "\uDB81\uDC53"
382324
+ worker_restart: "\uDB81\uDC53",
382325
+ image: "\uDB80\uDEE9"
382330
382326
  };
382331
382327
  ASCII = {
382332
382328
  ghost: "\u25C6",
@@ -382423,7 +382419,8 @@ var init_icons = __esm(() => {
382423
382419
  worker: "\u26A1",
382424
382420
  worker_busy: "\u26A1",
382425
382421
  worker_crash: "\u26A1\u2717",
382426
- worker_restart: "\u26A1\u21BB"
382422
+ worker_restart: "\u26A1\u21BB",
382423
+ image: "\uD83D\uDDBC"
382427
382424
  };
382428
382425
  UI_ICONS = {
382429
382426
  get ghost() {
@@ -426962,14 +426959,17 @@ function register2(map2) {
426962
426959
  map2.set("/nvim-config", handleNvimConfig);
426963
426960
  map2.set("/verbose", handleVerbose);
426964
426961
  map2.set("/reasoning", handleReasoning);
426962
+ map2.set("/compact settings", handleCompaction);
426965
426963
  map2.set("/compaction", handleCompaction);
426966
426964
  map2.set("/agent-features", handleAgentFeatures);
426967
426965
  map2.set("/instructions", handleInstructions);
426968
426966
  map2.set("/diff-style", handleDiffStyle);
426967
+ map2.set("/editor split", handleSplit);
426969
426968
  map2.set("/split", handleSplit);
426970
426969
  map2.set("/vim-hints", handleVimHints);
426971
426970
  map2.set("/model-scope", handleModelScope);
426972
426971
  map2.set("/font nerd", handleNerdFont);
426972
+ map2.set("/font set", handleFont);
426973
426973
  map2.set("/settings", handleSettingsHub);
426974
426974
  map2.set("/theme", handleTheme);
426975
426975
  }
@@ -429997,9 +429997,9 @@ function handleHelp(_input, _ctx) {
429997
429997
  useUIStore.getState().openModal("commandPalette");
429998
429998
  }
429999
429999
  function handleOpen(input, ctx) {
430000
- const filePath = input.trim().slice(6).trim();
430000
+ const filePath = input.trim().replace(/^\/(editor\s+)?open\s*/i, "").trim();
430001
430001
  if (!filePath) {
430002
- sysMsg(ctx, "Usage: /open <file-path>");
430002
+ sysMsg(ctx, "Usage: /editor open <file-path>");
430003
430003
  return;
430004
430004
  }
430005
430005
  ctx.openEditorWithFile(filePath);
@@ -430190,7 +430190,10 @@ function register6(map2) {
430190
430190
  map2.set("/editor", handleEditor);
430191
430191
  map2.set("/edit", handleEditor);
430192
430192
  map2.set("/help", handleHelp);
430193
+ map2.set("/editor settings", handleEditorSettings);
430194
+ map2.set("/editor open", handleOpen);
430193
430195
  map2.set("/editor-settings", handleEditorSettings);
430196
+ map2.set("/open", handleOpen);
430194
430197
  map2.set("/router", handleRouter);
430195
430198
  map2.set("/provider-settings", handleProviderSettings);
430196
430199
  map2.set("/perf", handleProviderSettings);
@@ -430204,6 +430207,7 @@ function register6(map2) {
430204
430207
  map2.set("/changes", handleChanges);
430205
430208
  map2.set("/files", handleChanges);
430206
430209
  map2.set("/errors", handleErrors);
430210
+ map2.set("/compact logs", handleCompactionLogs);
430207
430211
  map2.set("/compact-v2-logs", handleCompactionLogs);
430208
430212
  map2.set("/skills", handleSkills);
430209
430213
  map2.set("/terminals", handleTerminals);
@@ -430215,6 +430219,8 @@ function register6(map2) {
430215
430219
  map2.set("/wizard", handleWizard);
430216
430220
  }
430217
430221
  function matchNavPrefix(cmd) {
430222
+ if (cmd.startsWith("/editor open "))
430223
+ return handleOpen;
430218
430224
  if (cmd.startsWith("/open "))
430219
430225
  return handleOpen;
430220
430226
  if (cmd.startsWith("/tab rename "))
@@ -431038,7 +431044,7 @@ async function handleExportAll(ctx) {
431038
431044
  }
431039
431045
  async function handleExport(input, ctx) {
431040
431046
  const trimmed = input.trim();
431041
- const arg = trimmed.slice(7).trim();
431047
+ const arg = trimmed.replace(/^\/(session\s+)?export\s*/i, "").trim();
431042
431048
  if (arg === "all" || arg === "diagnostic") {
431043
431049
  await handleExportAll(ctx);
431044
431050
  return;
@@ -431089,7 +431095,7 @@ async function handleExport(input, ctx) {
431089
431095
  }
431090
431096
  function handlePlan(input, ctx) {
431091
431097
  const trimmed = input.trim();
431092
- const arg = trimmed.slice(5).trim();
431098
+ const arg = trimmed.replace(/^\/(session\s+)?plan\s*/i, "").trim();
431093
431099
  if (arg) {
431094
431100
  ctx.chat.setPlanMode(true);
431095
431101
  ctx.chat.setPlanRequest(arg);
@@ -431137,13 +431143,22 @@ function handleSessions(_input, ctx) {
431137
431143
  ctx.openSessions();
431138
431144
  }
431139
431145
  function register9(map2) {
431146
+ map2.set("/session", handleSessions);
431147
+ map2.set("/session clear", handleClear);
431148
+ map2.set("/session compact", handleCompact);
431149
+ map2.set("/session continue", handleContinue);
431150
+ map2.set("/session history", handleSessions);
431151
+ map2.set("/session export", handleExport);
431140
431152
  map2.set("/clear", handleClear);
431141
431153
  map2.set("/compact", handleCompact);
431142
431154
  map2.set("/sessions", handleSessions);
431143
- map2.set("/session", handleSessions);
431144
431155
  map2.set("/continue", handleContinue);
431145
431156
  }
431146
431157
  function matchSessionPrefix(cmd) {
431158
+ if (cmd === "/session export" || cmd.startsWith("/session export "))
431159
+ return handleExport;
431160
+ if (cmd === "/session plan" || cmd.startsWith("/session plan "))
431161
+ return handlePlan;
431147
431162
  if (cmd === "/export" || cmd.startsWith("/export "))
431148
431163
  return handleExport;
431149
431164
  if (cmd === "/plan" || cmd.startsWith("/plan "))
@@ -431355,550 +431370,690 @@ var init_registry = __esm(() => {
431355
431370
  register8(commandMap);
431356
431371
  register(commandMap);
431357
431372
  prefixMatchers = [matchContextPrefix, matchGitPrefix, matchConfigPrefix, matchSessionPrefix, matchNavPrefix, matchSecurityPrefix, matchClaimsPrefix];
431358
- CATEGORIES = ["Git", "Session", "Models", "Settings", "Editor", "Intelligence", "Tabs", "System"];
431359
- COMMAND_DEFS = [{
431360
- cmd: "/agent-features",
431361
- ic: "cog",
431362
- desc: "Toggle agent features (de-sloppify, tier routing)",
431363
- category: "Settings",
431364
- tags: ["config", "desloppify", "routing", "verify"]
431365
- }, {
431366
- cmd: "/changes",
431367
- ic: "changes",
431368
- desc: "Toggle files changed this session",
431369
- category: "Tabs",
431370
- tags: ["files", "diff", "modified"]
431371
- }, {
431372
- cmd: "/chat-style",
431373
- ic: "chat",
431374
- desc: "Toggle chat layout style",
431375
- category: "Settings",
431376
- tags: ["accent", "bubble", "ui"]
431377
- }, {
431378
- cmd: "/claim",
431379
- ic: "lock",
431380
- desc: "Show active file claims across tabs",
431381
- category: "Tabs",
431382
- tags: ["lock"]
431383
- }, {
431384
- cmd: "/claim force",
431385
- ic: "lock",
431386
- desc: "Steal a file claim from another tab",
431387
- category: "Tabs",
431388
- tags: ["lock"],
431389
- hidden: true
431390
- }, {
431391
- cmd: "/claim release",
431392
- ic: "lock",
431393
- desc: "Release a file claim from current tab",
431394
- category: "Tabs",
431395
- tags: ["lock"],
431396
- hidden: true
431397
- }, {
431398
- cmd: "/claim release-all",
431399
- ic: "lock",
431400
- desc: "Release all claims from current tab",
431401
- category: "Tabs",
431402
- tags: ["lock"],
431403
- hidden: true
431404
- }, {
431405
- cmd: "/clear",
431406
- ic: "clear",
431407
- desc: "Clear chat history",
431408
- category: "Session",
431409
- tags: ["reset"]
431410
- }, {
431411
- cmd: "/compact",
431412
- ic: "compress",
431413
- desc: "Compact conversation context",
431414
- category: "Session",
431415
- tags: ["context", "summarize"]
431416
- }, {
431417
- cmd: "/compact-v2-logs",
431418
- ic: "plan",
431419
- desc: "View compaction events",
431420
- category: "Session",
431421
- tags: ["debug", "logs"]
431422
- }, {
431423
- cmd: "/compaction",
431424
- ic: "compress",
431425
- desc: "Compaction strategy & pruning settings",
431426
- category: "Session",
431427
- tags: ["v1", "v2", "pruning"]
431428
- }, {
431429
- cmd: "/context",
431430
- ic: "context",
431431
- desc: "Context & system dashboard",
431432
- category: "Intelligence",
431433
- tags: ["tokens", "budget", "status"]
431434
- }, {
431435
- cmd: "/continue",
431436
- ic: "play",
431437
- desc: "Continue interrupted generation",
431438
- category: "Session",
431439
- tags: ["resume"]
431440
- }, {
431441
- cmd: "/diagnose",
431442
- ic: "brain",
431443
- desc: "Health check \u2014 LSP, tree-sitter, semantic indexing",
431444
- category: "Intelligence",
431445
- tags: ["health", "debug", "probe"]
431446
- }, {
431447
- cmd: "/diff-style",
431448
- ic: "git",
431449
- desc: "Change diff display style",
431450
- category: "Settings",
431451
- tags: ["sidebyside", "compact"]
431452
- }, {
431453
- cmd: "/editor",
431454
- ic: "pencil",
431455
- desc: "Toggle editor panel",
431456
- category: "Editor",
431457
- tags: ["neovim", "toggle"]
431458
- }, {
431459
- cmd: "/editor-settings",
431460
- ic: "cog",
431461
- desc: "Toggle editor/LSP integrations",
431462
- category: "Editor",
431463
- tags: ["config", "lsp"]
431464
- }, {
431465
- cmd: "/errors",
431466
- ic: "error",
431467
- desc: "Browse error log",
431468
- category: "System",
431469
- tags: ["debug", "log"]
431470
- }, {
431471
- cmd: "/export",
431472
- ic: "changes",
431473
- desc: "Export chat \u2014 markdown, json, clipboard, all",
431474
- category: "Session",
431475
- tags: ["save", "markdown", "json", "clipboard", "diagnostic"]
431476
- }, {
431477
- cmd: "/export all",
431478
- ic: "search",
431479
- desc: "Full diagnostic export (system prompt, messages, tools)",
431480
- category: "Session",
431481
- tags: ["debug"],
431482
- hidden: true
431483
- }, {
431484
- cmd: "/export api",
431485
- ic: "search",
431486
- desc: "Toggle per-step API request dump (messages, tools, usage per step)",
431487
- category: "Session",
431488
- tags: ["debug", "tokens", "cost"],
431489
- hidden: true
431490
- }, {
431491
- cmd: "/export clipboard",
431492
- ic: "changes",
431493
- desc: "Copy chat to clipboard (markdown)",
431494
- category: "Session",
431495
- tags: ["copy"],
431496
- hidden: true
431497
- }, {
431498
- cmd: "/export json",
431499
- ic: "changes",
431500
- desc: "Export chat as JSON",
431501
- category: "Session",
431502
- tags: ["save"],
431503
- hidden: true
431504
- }, {
431505
- cmd: "/font",
431506
- ic: "pencil",
431507
- desc: "Terminal font (show, set, nerd)",
431508
- category: "Settings",
431509
- tags: ["nerd", "terminal"]
431510
- }, {
431511
- cmd: "/font nerd",
431512
- ic: "ghost",
431513
- desc: "Toggle Nerd Font icons",
431514
- category: "Settings",
431515
- tags: ["icons", "terminal"],
431516
- hidden: true
431517
- }, {
431518
- cmd: "/git",
431519
- ic: "git",
431520
- desc: "Git menu",
431521
- category: "Git",
431522
- tags: ["menu"]
431523
- }, {
431524
- cmd: "/git branch",
431525
- ic: "git",
431526
- desc: "Show/create branch",
431527
- category: "Git",
431528
- tags: ["checkout"]
431529
- }, {
431530
- cmd: "/git co-author",
431531
- ic: "git",
431532
- desc: "Toggle co-author trailer",
431533
- category: "Git",
431534
- tags: ["commit"]
431535
- }, {
431536
- cmd: "/git commit",
431537
- ic: "git",
431538
- desc: "Git commit with message",
431539
- category: "Git",
431540
- tags: ["save"]
431541
- }, {
431542
- cmd: "/git diff",
431543
- ic: "git",
431544
- desc: "Open diff in editor",
431545
- category: "Git",
431546
- tags: ["changes"]
431547
- }, {
431548
- cmd: "/git init",
431549
- ic: "git",
431550
- desc: "Initialize git repo",
431551
- category: "Git",
431552
- tags: ["create"]
431553
- }, {
431554
- cmd: "/git lazygit",
431555
- ic: "git",
431556
- desc: "Launch lazygit",
431557
- category: "Git",
431558
- tags: ["tui"]
431559
- }, {
431560
- cmd: "/git log",
431561
- ic: "git",
431562
- desc: "Show recent commits",
431563
- category: "Git",
431564
- tags: ["history"]
431565
- }, {
431566
- cmd: "/git pull",
431567
- ic: "git",
431568
- desc: "Pull from remote",
431569
- category: "Git",
431570
- tags: ["fetch", "sync"]
431571
- }, {
431572
- cmd: "/git push",
431573
- ic: "git",
431574
- desc: "Push to remote",
431575
- category: "Git",
431576
- tags: ["sync", "upload"]
431577
- }, {
431578
- cmd: "/git stash",
431579
- ic: "git",
431580
- desc: "Stash changes \u2014 pop to restore",
431581
- category: "Git",
431582
- tags: ["save", "pop", "restore"]
431583
- }, {
431584
- cmd: "/git stash pop",
431585
- ic: "git",
431586
- desc: "Pop latest stash",
431587
- category: "Git",
431588
- tags: ["restore"],
431589
- hidden: true
431590
- }, {
431591
- cmd: "/git status",
431592
- ic: "git",
431593
- desc: "Git status",
431594
- category: "Git",
431595
- tags: ["info"]
431596
- }, {
431597
- cmd: "/help",
431598
- ic: "help",
431599
- desc: "Command palette (Ctrl+K)",
431600
- category: "System",
431601
- tags: ["commands", "search"]
431602
- }, {
431603
- cmd: "/instructions",
431604
- ic: "system",
431605
- desc: "Toggle instruction files (SOULFORGE.md, CLAUDE.md, etc.)",
431606
- category: "Settings",
431607
- tags: ["prompt", "config"]
431608
- }, {
431609
- cmd: "/keys",
431610
- ic: "cog",
431611
- desc: "Manage LLM provider API keys",
431612
- category: "Models",
431613
- tags: ["api", "auth"]
431614
- }, {
431615
- cmd: "/lsp",
431616
- ic: "brain",
431617
- desc: "Manage LSP servers \u2014 install, disable, enable",
431618
- category: "Intelligence",
431619
- tags: ["language", "server", "mason", "disable"]
431620
- }, {
431621
- cmd: "/lsp install",
431622
- ic: "brain",
431623
- desc: "Install & manage LSP servers (Mason registry)",
431624
- category: "Intelligence",
431625
- tags: ["mason", "install", "search"]
431626
- }, {
431627
- cmd: "/lsp restart",
431628
- ic: "brain",
431629
- desc: "Restart LSP servers (all or specific)",
431630
- category: "Intelligence",
431631
- tags: ["restart"]
431632
- }, {
431633
- cmd: "/lsp status",
431634
- ic: "brain",
431635
- desc: "LSP status dashboard",
431636
- category: "Intelligence",
431637
- tags: ["language", "server"]
431638
- }, {
431639
- cmd: "/memory",
431640
- ic: "memory",
431641
- desc: "Manage memory scopes, view & clear",
431642
- category: "Intelligence",
431643
- tags: ["recall", "knowledge"]
431644
- }, {
431645
- cmd: "/mode",
431646
- ic: "cog",
431647
- desc: "Switch forge mode",
431648
- category: "Settings",
431649
- tags: ["architect", "socratic", "challenge", "plan", "auto"]
431650
- }, {
431651
- cmd: "/model-scope",
431652
- ic: "cog",
431653
- desc: "Set model scope (project/global)",
431654
- category: "Models",
431655
- tags: ["config"]
431656
- }, {
431657
- cmd: "/models",
431658
- ic: "system",
431659
- desc: "Switch LLM model (Ctrl+L)",
431660
- category: "Models",
431661
- tags: ["provider", "llm", "switch"]
431662
- }, {
431663
- cmd: "/nvim-config",
431664
- ic: "pencil",
431665
- desc: "Switch neovim config mode",
431666
- category: "Settings",
431667
- tags: ["editor", "neovim"]
431668
- }, {
431669
- cmd: "/open",
431670
- ic: "changes",
431671
- desc: "Open file in editor",
431672
- category: "Editor",
431673
- tags: ["file"]
431674
- }, {
431675
- cmd: "/plan",
431676
- ic: "plan",
431677
- desc: "Toggle plan mode (research & plan only)",
431678
- category: "Session",
431679
- tags: ["architect", "research"]
431680
- }, {
431681
- cmd: "/privacy",
431682
- ic: "lock",
431683
- desc: "Manage forbidden file patterns",
431684
- category: "System",
431685
- tags: ["security", "forbidden"]
431686
- }, {
431687
- cmd: "/provider-settings",
431688
- ic: "system",
431689
- desc: "Provider options \u2014 thinking, effort, speed, context",
431690
- category: "Models",
431691
- tags: ["thinking", "effort", "speed", "config"]
431692
- }, {
431693
- cmd: "/providers",
431694
- ic: "system",
431695
- desc: "Provider & Models",
431696
- category: "Models",
431697
- tags: ["llm", "switch"],
431698
- hidden: true
431699
- }, {
431700
- cmd: "/proxy",
431701
- ic: "proxy",
431702
- desc: "Proxy \u2014 status, install, start, stop, restart, login, upgrade",
431703
- category: "Models",
431704
- tags: ["account", "login", "logout", "install", "upgrade", "start", "stop", "restart"]
431705
- }, {
431706
- cmd: "/proxy install",
431707
- ic: "proxy",
431708
- desc: "Reinstall CLIProxyAPI",
431709
- category: "Models",
431710
- tags: ["setup"],
431711
- hidden: true
431712
- }, {
431713
- cmd: "/proxy login",
431714
- ic: "proxy",
431715
- desc: "Add a provider account",
431716
- category: "Models",
431717
- tags: ["auth", "oauth"],
431718
- hidden: true
431719
- }, {
431720
- cmd: "/proxy logout",
431721
- ic: "proxy",
431722
- desc: "Remove a provider account",
431723
- category: "Models",
431724
- tags: ["auth"],
431725
- hidden: true
431726
- }, {
431727
- cmd: "/proxy restart",
431728
- ic: "proxy",
431729
- desc: "Restart the proxy",
431730
- category: "Models",
431731
- tags: ["reboot"],
431732
- hidden: true
431733
- }, {
431734
- cmd: "/proxy start",
431735
- ic: "proxy",
431736
- desc: "Start the proxy",
431737
- category: "Models",
431738
- tags: ["launch"],
431739
- hidden: true
431740
- }, {
431741
- cmd: "/proxy stop",
431742
- ic: "proxy",
431743
- desc: "Stop the proxy",
431744
- category: "Models",
431745
- tags: ["kill"],
431746
- hidden: true
431747
- }, {
431748
- cmd: "/proxy upgrade",
431749
- ic: "proxy",
431750
- desc: "Upgrade to latest version",
431751
- category: "Models",
431752
- tags: ["update"],
431753
- hidden: true
431754
- }, {
431755
- cmd: "/quit",
431756
- ic: "quit",
431757
- desc: "Exit SoulForge",
431758
- category: "System",
431759
- tags: ["exit", "close"]
431760
- }, {
431761
- cmd: "/reasoning",
431762
- ic: "brain",
431763
- desc: "Show or hide reasoning content",
431764
- category: "Settings",
431765
- tags: ["thinking", "display"]
431766
- }, {
431767
- cmd: "/repo-map",
431768
- ic: "tree",
431769
- desc: "Soul map settings (AST index)",
431770
- category: "Intelligence",
431771
- tags: ["semantic", "treesitter"]
431772
- }, {
431773
- cmd: "/restart",
431774
- ic: "ghost",
431775
- desc: "Full restart",
431776
- category: "System",
431777
- tags: ["reboot"]
431778
- }, {
431779
- cmd: "/router",
431780
- ic: "router",
431781
- desc: "Route models per task (code, explore, plan, verify)",
431782
- category: "Models",
431783
- tags: ["dispatch", "routing"]
431784
- }, {
431785
- cmd: "/sessions",
431786
- ic: "clock_alt",
431787
- desc: "Browse & restore sessions",
431788
- category: "Session",
431789
- tags: ["history", "restore"]
431790
- }, {
431791
- cmd: "/settings",
431792
- ic: "cog",
431793
- desc: "Settings hub \u2014 all options in one place",
431794
- category: "Settings",
431795
- tags: ["config", "preferences", "hub"]
431796
- }, {
431797
- cmd: "/setup",
431798
- ic: "ghost",
431799
- desc: "Check & install prerequisites",
431800
- category: "System",
431801
- tags: ["install", "check"]
431802
- }, {
431803
- cmd: "/skills",
431804
- ic: "skills",
431805
- desc: "Browse & install skills",
431806
- category: "Intelligence",
431807
- tags: ["plugins", "extensions"]
431808
- }, {
431809
- cmd: "/split",
431810
- ic: "pencil",
431811
- desc: "Cycle editor/chat split (40/50/60/70)",
431812
- category: "Editor",
431813
- tags: ["layout", "resize"]
431814
- }, {
431815
- cmd: "/status",
431816
- ic: "info",
431817
- desc: "System status dashboard",
431818
- category: "System",
431819
- tags: ["info", "health", "context", "tokens"]
431820
- }, {
431821
- cmd: "/storage",
431822
- ic: "system",
431823
- desc: "View & manage storage usage",
431824
- category: "System",
431825
- tags: ["disk", "cleanup"]
431826
- }, {
431827
- cmd: "/update",
431828
- ic: "ghost",
431829
- desc: "Check for SoulForge updates",
431830
- category: "System",
431831
- tags: ["upgrade", "version"]
431832
- }, {
431833
- cmd: "/tab",
431834
- ic: "tabs",
431835
- desc: "Tabs \u2014 list, new, close, rename",
431836
- category: "Tabs",
431837
- tags: ["switch", "new", "close", "rename"]
431838
- }, {
431839
- cmd: "/tab close",
431840
- ic: "tabs",
431841
- desc: "Close current tab (Ctrl+W)",
431842
- category: "Tabs",
431843
- tags: ["remove"],
431844
- hidden: true
431845
- }, {
431846
- cmd: "/tab new",
431847
- ic: "tabs",
431848
- desc: "Open new tab (Ctrl+T)",
431849
- category: "Tabs",
431850
- tags: ["create"],
431851
- hidden: true
431852
- }, {
431853
- cmd: "/tab rename",
431854
- ic: "pencil",
431855
- desc: "Rename current tab",
431856
- category: "Tabs",
431857
- tags: ["label"],
431858
- hidden: true
431859
- }, {
431860
- cmd: "/terminals",
431861
- ic: "terminal",
431862
- desc: "Terminal manager (new, close, show, hide, list, rename)",
431863
- category: "Tabs",
431864
- tags: ["shell", "term", "pty", "terminal"]
431865
- }, {
431866
- cmd: "/theme",
431867
- ic: "palette",
431868
- desc: "Switch color theme (live preview)",
431869
- category: "Settings",
431870
- tags: ["color", "dark", "light", "catppuccin", "dracula", "nord", "gruvbox", "solarized"]
431871
- }, {
431872
- cmd: "/tools",
431873
- ic: "search",
431874
- desc: "Enable/disable tools for the agent",
431875
- category: "Intelligence",
431876
- tags: ["tools", "enable", "disable", "toggle"]
431877
- }, {
431878
- cmd: "/verbose",
431879
- ic: "cog",
431880
- desc: "Toggle verbose tool output",
431881
- category: "Settings",
431882
- tags: ["debug", "output"]
431883
- }, {
431884
- cmd: "/vim-hints",
431885
- ic: "pencil",
431886
- desc: "Toggle vim keybinding hints",
431887
- category: "Settings",
431888
- tags: ["editor", "keybindings"]
431889
- }, {
431890
- cmd: "/web-search",
431891
- ic: "cog",
431892
- desc: "Web search keys & settings",
431893
- category: "Models",
431894
- tags: ["search", "api"]
431895
- }, {
431896
- cmd: "/wizard",
431897
- ic: "ghost",
431898
- desc: "Re-run the first-run setup wizard",
431899
- category: "System",
431900
- tags: ["onboarding", "setup", "welcome"]
431901
- }];
431373
+ CATEGORIES = ["Session", "Git", "Models", "Intelligence", "Settings", "Editor", "Tabs", "System"];
431374
+ COMMAND_DEFS = [
431375
+ {
431376
+ cmd: "/compact",
431377
+ ic: "compress",
431378
+ desc: "Compact \u2014 run, settings, logs",
431379
+ category: "Session",
431380
+ tags: ["context", "summarize", "compaction"]
431381
+ },
431382
+ {
431383
+ cmd: "/compact logs",
431384
+ ic: "plan",
431385
+ desc: "View compaction events",
431386
+ category: "Session",
431387
+ tags: ["debug", "logs"]
431388
+ },
431389
+ {
431390
+ cmd: "/compact settings",
431391
+ ic: "compress",
431392
+ desc: "Compaction strategy & pruning settings",
431393
+ category: "Session",
431394
+ tags: ["v1", "v2", "pruning"]
431395
+ },
431396
+ {
431397
+ cmd: "/session",
431398
+ ic: "clock_alt",
431399
+ desc: "Session \u2014 history, clear, export, compact",
431400
+ category: "Session",
431401
+ tags: ["history", "restore", "manage"]
431402
+ },
431403
+ {
431404
+ cmd: "/session clear",
431405
+ ic: "clear",
431406
+ desc: "Clear chat history",
431407
+ category: "Session",
431408
+ tags: ["reset"]
431409
+ },
431410
+ {
431411
+ cmd: "/session compact",
431412
+ ic: "compress",
431413
+ desc: "Compact conversation context",
431414
+ category: "Session",
431415
+ tags: ["context", "summarize"],
431416
+ hidden: true
431417
+ },
431418
+ {
431419
+ cmd: "/session continue",
431420
+ ic: "play",
431421
+ desc: "Continue interrupted generation",
431422
+ category: "Session",
431423
+ tags: ["resume"]
431424
+ },
431425
+ {
431426
+ cmd: "/session export",
431427
+ ic: "changes",
431428
+ desc: "Export chat \u2014 markdown, json, clipboard, all",
431429
+ category: "Session",
431430
+ tags: ["save", "markdown", "json", "clipboard", "diagnostic"]
431431
+ },
431432
+ {
431433
+ cmd: "/session export all",
431434
+ ic: "search",
431435
+ desc: "Full diagnostic export (system prompt, messages, tools)",
431436
+ category: "Session",
431437
+ tags: ["debug"]
431438
+ },
431439
+ {
431440
+ cmd: "/session export api",
431441
+ ic: "search",
431442
+ desc: "Toggle per-step API request dump",
431443
+ category: "Session",
431444
+ tags: ["debug", "tokens", "cost"]
431445
+ },
431446
+ {
431447
+ cmd: "/session export clipboard",
431448
+ ic: "changes",
431449
+ desc: "Copy chat to clipboard (markdown)",
431450
+ category: "Session",
431451
+ tags: ["copy"]
431452
+ },
431453
+ {
431454
+ cmd: "/session export json",
431455
+ ic: "changes",
431456
+ desc: "Export chat as JSON",
431457
+ category: "Session",
431458
+ tags: ["save"]
431459
+ },
431460
+ {
431461
+ cmd: "/session history",
431462
+ ic: "clock_alt",
431463
+ desc: "Browse & restore sessions",
431464
+ category: "Session",
431465
+ tags: ["history", "restore"]
431466
+ },
431467
+ {
431468
+ cmd: "/session plan",
431469
+ ic: "plan",
431470
+ desc: "Toggle plan mode (research & plan only)",
431471
+ category: "Session",
431472
+ tags: ["architect", "research"]
431473
+ },
431474
+ {
431475
+ cmd: "/git",
431476
+ ic: "git",
431477
+ desc: "Git menu",
431478
+ category: "Git",
431479
+ tags: ["menu"]
431480
+ },
431481
+ {
431482
+ cmd: "/git branch",
431483
+ ic: "git",
431484
+ desc: "Show/create branch",
431485
+ category: "Git",
431486
+ tags: ["checkout"]
431487
+ },
431488
+ {
431489
+ cmd: "/git co-author",
431490
+ ic: "git",
431491
+ desc: "Toggle co-author trailer",
431492
+ category: "Git",
431493
+ tags: ["commit"]
431494
+ },
431495
+ {
431496
+ cmd: "/git commit",
431497
+ ic: "git",
431498
+ desc: "Git commit with message",
431499
+ category: "Git",
431500
+ tags: ["save"]
431501
+ },
431502
+ {
431503
+ cmd: "/git diff",
431504
+ ic: "git",
431505
+ desc: "Open diff in editor",
431506
+ category: "Git",
431507
+ tags: ["changes"]
431508
+ },
431509
+ {
431510
+ cmd: "/git init",
431511
+ ic: "git",
431512
+ desc: "Initialize git repo",
431513
+ category: "Git",
431514
+ tags: ["create"]
431515
+ },
431516
+ {
431517
+ cmd: "/git lazygit",
431518
+ ic: "git",
431519
+ desc: "Launch lazygit",
431520
+ category: "Git",
431521
+ tags: ["tui"]
431522
+ },
431523
+ {
431524
+ cmd: "/git log",
431525
+ ic: "git",
431526
+ desc: "Show recent commits",
431527
+ category: "Git",
431528
+ tags: ["history"]
431529
+ },
431530
+ {
431531
+ cmd: "/git pull",
431532
+ ic: "git",
431533
+ desc: "Pull from remote",
431534
+ category: "Git",
431535
+ tags: ["fetch", "sync"]
431536
+ },
431537
+ {
431538
+ cmd: "/git push",
431539
+ ic: "git",
431540
+ desc: "Push to remote",
431541
+ category: "Git",
431542
+ tags: ["sync", "upload"]
431543
+ },
431544
+ {
431545
+ cmd: "/git stash",
431546
+ ic: "git",
431547
+ desc: "Stash changes \u2014 pop to restore",
431548
+ category: "Git",
431549
+ tags: ["save", "pop", "restore"]
431550
+ },
431551
+ {
431552
+ cmd: "/git stash pop",
431553
+ ic: "git",
431554
+ desc: "Pop latest stash",
431555
+ category: "Git",
431556
+ tags: ["restore"]
431557
+ },
431558
+ {
431559
+ cmd: "/git status",
431560
+ ic: "git",
431561
+ desc: "Git status",
431562
+ category: "Git",
431563
+ tags: ["info"]
431564
+ },
431565
+ {
431566
+ cmd: "/keys",
431567
+ ic: "cog",
431568
+ desc: "Manage LLM provider API keys",
431569
+ category: "Models",
431570
+ tags: ["api", "auth"]
431571
+ },
431572
+ {
431573
+ cmd: "/model-scope",
431574
+ ic: "cog",
431575
+ desc: "Set model scope (project/global)",
431576
+ category: "Models",
431577
+ tags: ["config"]
431578
+ },
431579
+ {
431580
+ cmd: "/models",
431581
+ ic: "system",
431582
+ desc: "Switch LLM model (Ctrl+L)",
431583
+ category: "Models",
431584
+ tags: ["provider", "llm", "switch"]
431585
+ },
431586
+ {
431587
+ cmd: "/provider-settings",
431588
+ ic: "system",
431589
+ desc: "Provider options \u2014 thinking, effort, speed, context",
431590
+ category: "Models",
431591
+ tags: ["thinking", "effort", "speed", "config"]
431592
+ },
431593
+ {
431594
+ cmd: "/providers",
431595
+ ic: "system",
431596
+ desc: "Provider & Models",
431597
+ category: "Models",
431598
+ tags: ["llm", "switch"],
431599
+ hidden: true
431600
+ },
431601
+ {
431602
+ cmd: "/proxy",
431603
+ ic: "proxy",
431604
+ desc: "Proxy \u2014 status, install, start, stop, restart, login, upgrade",
431605
+ category: "Models",
431606
+ tags: ["account", "login", "logout", "install", "upgrade", "start", "stop", "restart"]
431607
+ },
431608
+ {
431609
+ cmd: "/proxy install",
431610
+ ic: "proxy",
431611
+ desc: "Reinstall CLIProxyAPI",
431612
+ category: "Models",
431613
+ tags: ["setup"]
431614
+ },
431615
+ {
431616
+ cmd: "/proxy login",
431617
+ ic: "proxy",
431618
+ desc: "Add a provider account",
431619
+ category: "Models",
431620
+ tags: ["auth", "oauth"]
431621
+ },
431622
+ {
431623
+ cmd: "/proxy logout",
431624
+ ic: "proxy",
431625
+ desc: "Remove a provider account",
431626
+ category: "Models",
431627
+ tags: ["auth"]
431628
+ },
431629
+ {
431630
+ cmd: "/proxy restart",
431631
+ ic: "proxy",
431632
+ desc: "Restart the proxy",
431633
+ category: "Models",
431634
+ tags: ["reboot"]
431635
+ },
431636
+ {
431637
+ cmd: "/proxy start",
431638
+ ic: "proxy",
431639
+ desc: "Start the proxy",
431640
+ category: "Models",
431641
+ tags: ["launch"]
431642
+ },
431643
+ {
431644
+ cmd: "/proxy status",
431645
+ ic: "proxy",
431646
+ desc: "Proxy status & accounts",
431647
+ category: "Models",
431648
+ tags: ["info"]
431649
+ },
431650
+ {
431651
+ cmd: "/proxy stop",
431652
+ ic: "proxy",
431653
+ desc: "Stop the proxy",
431654
+ category: "Models",
431655
+ tags: ["kill"]
431656
+ },
431657
+ {
431658
+ cmd: "/proxy upgrade",
431659
+ ic: "proxy",
431660
+ desc: "Upgrade to latest version",
431661
+ category: "Models",
431662
+ tags: ["update"]
431663
+ },
431664
+ {
431665
+ cmd: "/router",
431666
+ ic: "router",
431667
+ desc: "Route models per task (code, explore, plan, verify)",
431668
+ category: "Models",
431669
+ tags: ["dispatch", "routing"]
431670
+ },
431671
+ {
431672
+ cmd: "/web-search",
431673
+ ic: "cog",
431674
+ desc: "Web search keys & settings",
431675
+ category: "Models",
431676
+ tags: ["search", "api"]
431677
+ },
431678
+ {
431679
+ cmd: "/context",
431680
+ ic: "context",
431681
+ desc: "Context & system dashboard",
431682
+ category: "Intelligence",
431683
+ tags: ["tokens", "budget", "status"]
431684
+ },
431685
+ {
431686
+ cmd: "/context clear",
431687
+ ic: "context",
431688
+ desc: "Clear injected context (memory, skills)",
431689
+ category: "Intelligence",
431690
+ tags: ["reset"]
431691
+ },
431692
+ {
431693
+ cmd: "/diagnose",
431694
+ ic: "brain",
431695
+ desc: "Health check \u2014 LSP, tree-sitter, semantic indexing",
431696
+ category: "Intelligence",
431697
+ tags: ["health", "debug", "probe"]
431698
+ },
431699
+ {
431700
+ cmd: "/lsp",
431701
+ ic: "brain",
431702
+ desc: "Manage LSP servers \u2014 install, disable, enable",
431703
+ category: "Intelligence",
431704
+ tags: ["language", "server", "mason", "disable"]
431705
+ },
431706
+ {
431707
+ cmd: "/lsp install",
431708
+ ic: "brain",
431709
+ desc: "Install & manage LSP servers (Mason registry)",
431710
+ category: "Intelligence",
431711
+ tags: ["mason", "install", "search"]
431712
+ },
431713
+ {
431714
+ cmd: "/lsp restart",
431715
+ ic: "brain",
431716
+ desc: "Restart LSP servers (all or specific)",
431717
+ category: "Intelligence",
431718
+ tags: ["restart"]
431719
+ },
431720
+ {
431721
+ cmd: "/lsp status",
431722
+ ic: "brain",
431723
+ desc: "LSP status dashboard",
431724
+ category: "Intelligence",
431725
+ tags: ["language", "server"]
431726
+ },
431727
+ {
431728
+ cmd: "/memory",
431729
+ ic: "memory",
431730
+ desc: "Manage memory scopes, view & clear",
431731
+ category: "Intelligence",
431732
+ tags: ["recall", "knowledge"]
431733
+ },
431734
+ {
431735
+ cmd: "/repo-map",
431736
+ ic: "tree",
431737
+ desc: "Soul map settings (AST index)",
431738
+ category: "Intelligence",
431739
+ tags: ["semantic", "treesitter"]
431740
+ },
431741
+ {
431742
+ cmd: "/skills",
431743
+ ic: "skills",
431744
+ desc: "Browse & install skills",
431745
+ category: "Intelligence",
431746
+ tags: ["plugins", "extensions"]
431747
+ },
431748
+ {
431749
+ cmd: "/tools",
431750
+ ic: "search",
431751
+ desc: "Enable/disable tools for the agent",
431752
+ category: "Intelligence",
431753
+ tags: ["tools", "enable", "disable", "toggle"]
431754
+ },
431755
+ {
431756
+ cmd: "/agent-features",
431757
+ ic: "cog",
431758
+ desc: "Toggle agent features (de-sloppify, tier routing)",
431759
+ category: "Settings",
431760
+ tags: ["config", "desloppify", "routing", "verify"]
431761
+ },
431762
+ {
431763
+ cmd: "/chat-style",
431764
+ ic: "chat",
431765
+ desc: "Toggle chat layout style",
431766
+ category: "Settings",
431767
+ tags: ["accent", "bubble", "ui"]
431768
+ },
431769
+ {
431770
+ cmd: "/diff-style",
431771
+ ic: "git",
431772
+ desc: "Change diff display style",
431773
+ category: "Settings",
431774
+ tags: ["sidebyside", "compact"]
431775
+ },
431776
+ {
431777
+ cmd: "/font",
431778
+ ic: "pencil",
431779
+ desc: "Terminal font \u2014 show, set, nerd",
431780
+ category: "Settings",
431781
+ tags: ["nerd", "terminal"]
431782
+ },
431783
+ {
431784
+ cmd: "/font nerd",
431785
+ ic: "ghost",
431786
+ desc: "Toggle Nerd Font icons",
431787
+ category: "Settings",
431788
+ tags: ["icons", "terminal"]
431789
+ },
431790
+ {
431791
+ cmd: "/font set",
431792
+ ic: "pencil",
431793
+ desc: "Set terminal font",
431794
+ category: "Settings",
431795
+ tags: ["nerd", "terminal"]
431796
+ },
431797
+ {
431798
+ cmd: "/instructions",
431799
+ ic: "system",
431800
+ desc: "Toggle instruction files (SOULFORGE.md, CLAUDE.md, etc.)",
431801
+ category: "Settings",
431802
+ tags: ["prompt", "config"]
431803
+ },
431804
+ {
431805
+ cmd: "/mode",
431806
+ ic: "cog",
431807
+ desc: "Switch forge mode",
431808
+ category: "Settings",
431809
+ tags: ["architect", "socratic", "challenge", "plan", "auto"]
431810
+ },
431811
+ {
431812
+ cmd: "/nvim-config",
431813
+ ic: "pencil",
431814
+ desc: "Switch neovim config mode",
431815
+ category: "Settings",
431816
+ tags: ["editor", "neovim"]
431817
+ },
431818
+ {
431819
+ cmd: "/reasoning",
431820
+ ic: "brain",
431821
+ desc: "Show or hide reasoning content",
431822
+ category: "Settings",
431823
+ tags: ["thinking", "display"]
431824
+ },
431825
+ {
431826
+ cmd: "/settings",
431827
+ ic: "cog",
431828
+ desc: "Settings hub \u2014 all options in one place",
431829
+ category: "Settings",
431830
+ tags: ["config", "preferences", "hub"]
431831
+ },
431832
+ {
431833
+ cmd: "/theme",
431834
+ ic: "palette",
431835
+ desc: "Switch color theme (live preview)",
431836
+ category: "Settings",
431837
+ tags: ["color", "dark", "light", "catppuccin", "dracula", "nord", "gruvbox", "solarized"]
431838
+ },
431839
+ {
431840
+ cmd: "/verbose",
431841
+ ic: "cog",
431842
+ desc: "Toggle verbose tool output",
431843
+ category: "Settings",
431844
+ tags: ["debug", "output"]
431845
+ },
431846
+ {
431847
+ cmd: "/vim-hints",
431848
+ ic: "pencil",
431849
+ desc: "Toggle vim keybinding hints",
431850
+ category: "Settings",
431851
+ tags: ["editor", "keybindings"]
431852
+ },
431853
+ {
431854
+ cmd: "/editor",
431855
+ ic: "pencil",
431856
+ desc: "Editor \u2014 toggle, open, settings, split",
431857
+ category: "Editor",
431858
+ tags: ["neovim", "toggle"]
431859
+ },
431860
+ {
431861
+ cmd: "/editor open",
431862
+ ic: "changes",
431863
+ desc: "Open file in editor",
431864
+ category: "Editor",
431865
+ tags: ["file"]
431866
+ },
431867
+ {
431868
+ cmd: "/editor settings",
431869
+ ic: "cog",
431870
+ desc: "Toggle editor/LSP integrations",
431871
+ category: "Editor",
431872
+ tags: ["config", "lsp"]
431873
+ },
431874
+ {
431875
+ cmd: "/editor split",
431876
+ ic: "pencil",
431877
+ desc: "Cycle editor/chat split (40/50/60/70)",
431878
+ category: "Editor",
431879
+ tags: ["layout", "resize"]
431880
+ },
431881
+ {
431882
+ cmd: "/changes",
431883
+ ic: "changes",
431884
+ desc: "Toggle files changed this session",
431885
+ category: "Tabs",
431886
+ tags: ["files", "diff", "modified"]
431887
+ },
431888
+ {
431889
+ cmd: "/claim",
431890
+ ic: "lock",
431891
+ desc: "Show active file claims across tabs",
431892
+ category: "Tabs",
431893
+ tags: ["lock"]
431894
+ },
431895
+ {
431896
+ cmd: "/claim force",
431897
+ ic: "lock",
431898
+ desc: "Steal a file claim from another tab",
431899
+ category: "Tabs",
431900
+ tags: ["lock"]
431901
+ },
431902
+ {
431903
+ cmd: "/claim release",
431904
+ ic: "lock",
431905
+ desc: "Release a file claim from current tab",
431906
+ category: "Tabs",
431907
+ tags: ["lock"]
431908
+ },
431909
+ {
431910
+ cmd: "/claim release-all",
431911
+ ic: "lock",
431912
+ desc: "Release all claims from current tab",
431913
+ category: "Tabs",
431914
+ tags: ["lock"]
431915
+ },
431916
+ {
431917
+ cmd: "/tab",
431918
+ ic: "tabs",
431919
+ desc: "Tabs \u2014 switch, new, close, rename",
431920
+ category: "Tabs",
431921
+ tags: ["switch", "list"]
431922
+ },
431923
+ {
431924
+ cmd: "/tab close",
431925
+ ic: "tabs",
431926
+ desc: "Close current tab (Ctrl+W)",
431927
+ category: "Tabs",
431928
+ tags: ["remove"]
431929
+ },
431930
+ {
431931
+ cmd: "/tab new",
431932
+ ic: "tabs",
431933
+ desc: "Open new tab (Ctrl+T)",
431934
+ category: "Tabs",
431935
+ tags: ["create"]
431936
+ },
431937
+ {
431938
+ cmd: "/tab rename",
431939
+ ic: "pencil",
431940
+ desc: "Rename current tab",
431941
+ category: "Tabs",
431942
+ tags: ["label"]
431943
+ },
431944
+ {
431945
+ cmd: "/terminals",
431946
+ ic: "terminal",
431947
+ desc: "Terminal manager \u2014 new, close, show, hide, rename",
431948
+ category: "Tabs",
431949
+ tags: ["shell", "term", "pty", "terminal"]
431950
+ },
431951
+ {
431952
+ cmd: "/terminals close",
431953
+ ic: "terminal",
431954
+ desc: "Close a terminal",
431955
+ category: "Tabs",
431956
+ tags: ["kill"]
431957
+ },
431958
+ {
431959
+ cmd: "/terminals hide",
431960
+ ic: "terminal",
431961
+ desc: "Hide terminal panel",
431962
+ category: "Tabs",
431963
+ tags: ["close"]
431964
+ },
431965
+ {
431966
+ cmd: "/terminals new",
431967
+ ic: "terminal",
431968
+ desc: "Spawn a new terminal",
431969
+ category: "Tabs",
431970
+ tags: ["create", "shell"]
431971
+ },
431972
+ {
431973
+ cmd: "/terminals rename",
431974
+ ic: "terminal",
431975
+ desc: "Rename a terminal",
431976
+ category: "Tabs",
431977
+ tags: ["label"]
431978
+ },
431979
+ {
431980
+ cmd: "/terminals show",
431981
+ ic: "terminal",
431982
+ desc: "Show terminal panel",
431983
+ category: "Tabs",
431984
+ tags: ["open"]
431985
+ },
431986
+ {
431987
+ cmd: "/errors",
431988
+ ic: "error",
431989
+ desc: "Browse error log",
431990
+ category: "System",
431991
+ tags: ["debug", "log"]
431992
+ },
431993
+ {
431994
+ cmd: "/help",
431995
+ ic: "help",
431996
+ desc: "Command palette (Ctrl+K)",
431997
+ category: "System",
431998
+ tags: ["commands", "search"]
431999
+ },
432000
+ {
432001
+ cmd: "/privacy",
432002
+ ic: "lock",
432003
+ desc: "Manage forbidden file patterns",
432004
+ category: "System",
432005
+ tags: ["security", "forbidden"]
432006
+ },
432007
+ {
432008
+ cmd: "/quit",
432009
+ ic: "quit",
432010
+ desc: "Exit SoulForge",
432011
+ category: "System",
432012
+ tags: ["exit", "close"]
432013
+ },
432014
+ {
432015
+ cmd: "/restart",
432016
+ ic: "ghost",
432017
+ desc: "Full restart",
432018
+ category: "System",
432019
+ tags: ["reboot"]
432020
+ },
432021
+ {
432022
+ cmd: "/setup",
432023
+ ic: "ghost",
432024
+ desc: "Check & install prerequisites",
432025
+ category: "System",
432026
+ tags: ["install", "check"]
432027
+ },
432028
+ {
432029
+ cmd: "/status",
432030
+ ic: "info",
432031
+ desc: "System status dashboard",
432032
+ category: "System",
432033
+ tags: ["info", "health", "context", "tokens"]
432034
+ },
432035
+ {
432036
+ cmd: "/storage",
432037
+ ic: "system",
432038
+ desc: "View & manage storage usage",
432039
+ category: "System",
432040
+ tags: ["disk", "cleanup"]
432041
+ },
432042
+ {
432043
+ cmd: "/update",
432044
+ ic: "ghost",
432045
+ desc: "Check for SoulForge updates",
432046
+ category: "System",
432047
+ tags: ["upgrade", "version"]
432048
+ },
432049
+ {
432050
+ cmd: "/wizard",
432051
+ ic: "ghost",
432052
+ desc: "Re-run the first-run setup wizard",
432053
+ category: "System",
432054
+ tags: ["onboarding", "setup", "welcome"]
432055
+ }
432056
+ ];
431902
432057
  });
431903
432058
 
431904
432059
  // src/core/terminal/suspend.ts
@@ -438801,6 +438956,9 @@ ${description}`,
438801
438956
  if (tc) {
438802
438957
  tc.state = "done";
438803
438958
  tc.result = resultStr;
438959
+ if (typeof part.output === "object" && part.output !== null && "_imageArt" in part.output) {
438960
+ tc.imageArt = part.output._imageArt;
438961
+ }
438804
438962
  }
438805
438963
  toolCharsRef.current += resultStr.length;
438806
438964
  const parsedArgs = safeParseArgs(toolCallArgs.get(part.toolCallId));
@@ -438829,12 +438987,17 @@ ${description}`,
438829
438987
  if (d3.miniForge)
438830
438988
  toolResult.miniForge = true;
438831
438989
  }
438832
- completedCalls.push({
438990
+ const streamingTc = tcBuf.find((c) => c.id === part.toolCallId);
438991
+ const completedCall = {
438833
438992
  id: part.toolCallId,
438834
438993
  name: part.toolName,
438835
438994
  args: parsedArgs,
438836
438995
  result: toolResult
438837
- });
438996
+ };
438997
+ if (streamingTc?.imageArt) {
438998
+ completedCall.imageArt = streamingTc.imageArt;
438999
+ }
439000
+ completedCalls.push(completedCall);
438838
439001
  if (workingStateRef.current) {
438839
439002
  extractFromToolCall(workingStateRef.current, part.toolName, parsedArgs);
438840
439003
  extractFromToolResult(workingStateRef.current, part.toolName, resultStr, parsedArgs);
@@ -439856,7 +440019,7 @@ var init_InputBox = __esm(async () => {
439856
440019
  indices: m5.indices
439857
440020
  });
439858
440021
  }
439859
- results.sort((a2, b5) => b5.score - a2.score);
440022
+ results.sort((a2, b5) => b5.score - a2.score || a2.cmd.localeCompare(b5.cmd));
439860
440023
  return results;
439861
440024
  }, [showAutocomplete, commandToken]);
439862
440025
  const hasMatches = matches3.length > 0;
@@ -444912,7 +445075,7 @@ var init_tool_formatters = __esm(async () => {
444912
445075
 
444913
445076
  // src/components/chat/StaticToolRow.tsx
444914
445077
  function StaticToolRow(t0) {
444915
- const $5 = import_compiler_runtime17.c(53);
445078
+ const $5 = import_compiler_runtime17.c(56);
444916
445079
  const {
444917
445080
  statusContent,
444918
445081
  isDone,
@@ -444929,7 +445092,8 @@ function StaticToolRow(t0) {
444929
445092
  suffix,
444930
445093
  suffixColor,
444931
445094
  diff,
444932
- diffStyle: t1
445095
+ diffStyle: t1,
445096
+ imageArt
444933
445097
  } = t0;
444934
445098
  const diffStyle = t1 === undefined ? "default" : t1;
444935
445099
  const t2 = useTheme();
@@ -445142,21 +445306,44 @@ function StaticToolRow(t0) {
445142
445306
  t11 = $5[49];
445143
445307
  }
445144
445308
  let t12;
445145
- if ($5[50] !== t10 || $5[51] !== t11) {
445146
- t12 = /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("box", {
445309
+ if ($5[50] !== imageArt) {
445310
+ t12 = imageArt && imageArt.length > 0 ? imageArt.map(_temp17) : null;
445311
+ $5[50] = imageArt;
445312
+ $5[51] = t12;
445313
+ } else {
445314
+ t12 = $5[51];
445315
+ }
445316
+ let t13;
445317
+ if ($5[52] !== t10 || $5[53] !== t11 || $5[54] !== t12) {
445318
+ t13 = /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("box", {
445147
445319
  flexDirection: "column",
445148
445320
  children: [
445149
445321
  t10,
445150
- t11
445322
+ t11,
445323
+ t12
445151
445324
  ]
445152
445325
  }, undefined, true, undefined, this);
445153
- $5[50] = t10;
445154
- $5[51] = t11;
445155
- $5[52] = t12;
445326
+ $5[52] = t10;
445327
+ $5[53] = t11;
445328
+ $5[54] = t12;
445329
+ $5[55] = t13;
445156
445330
  } else {
445157
- t12 = $5[52];
445331
+ t13 = $5[55];
445158
445332
  }
445159
- return t12;
445333
+ return t13;
445334
+ }
445335
+ function _temp17(img) {
445336
+ return /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("box", {
445337
+ flexDirection: "column",
445338
+ marginTop: 1,
445339
+ children: /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("ghostty-terminal", {
445340
+ ansi: img.lines.join(`
445341
+ `),
445342
+ cols: 130,
445343
+ rows: img.lines.length,
445344
+ trimEnd: true
445345
+ }, undefined, false, undefined, this)
445346
+ }, img.name, false, undefined, this);
445160
445347
  }
445161
445348
  function resolveBackendCategory(toolCategory, backend) {
445162
445349
  const hasSplit = !!(backend && toolCategory && backend !== toolCategory);
@@ -445298,7 +445485,8 @@ function buildLiveToolRowProps(tc, extra) {
445298
445485
  suffix,
445299
445486
  suffixColor,
445300
445487
  diff,
445301
- diffStyle: extra?.diffStyle
445488
+ diffStyle: extra?.diffStyle,
445489
+ imageArt: tc.imageArt
445302
445490
  };
445303
445491
  }
445304
445492
  function buildFinalToolRowProps(tc) {
@@ -445359,7 +445547,8 @@ function buildFinalToolRowProps(tc) {
445359
445547
  editResultText,
445360
445548
  suffix,
445361
445549
  suffixColor,
445362
- diff
445550
+ diff,
445551
+ imageArt: tc.imageArt
445363
445552
  };
445364
445553
  }
445365
445554
  var import_compiler_runtime17, EDIT_TOOL_NAMES2;
@@ -445565,7 +445754,7 @@ function SystemMessage(t0) {
445565
445754
  setDone(true);
445566
445755
  return;
445567
445756
  }
445568
- const timer = setTimeout(() => setStep(_temp17), REVEAL_INTERVAL);
445757
+ const timer = setTimeout(() => setStep(_temp18), REVEAL_INTERVAL);
445569
445758
  return () => clearTimeout(timer);
445570
445759
  };
445571
445760
  t5 = [step, totalSteps, done];
@@ -445727,7 +445916,7 @@ function SystemMessage(t0) {
445727
445916
  }
445728
445917
  return t20;
445729
445918
  }
445730
- function _temp17(s2) {
445919
+ function _temp18(s2) {
445731
445920
  return s2 + 1;
445732
445921
  }
445733
445922
  function isFailedEditCall(tc) {
@@ -447252,7 +447441,7 @@ function DripText(t0) {
447252
447441
  }
447253
447442
  return t2;
447254
447443
  }
447255
- function _temp18(tc) {
447444
+ function _temp19(tc) {
447256
447445
  return [tc.id, tc];
447257
447446
  }
447258
447447
  function _temp27(tc_0) {
@@ -447287,7 +447476,7 @@ var init_StreamSegmentList = __esm(async () => {
447287
447476
  const reasoningExpanded = t5 === undefined ? false : t5;
447288
447477
  let t6;
447289
447478
  if ($5[0] !== toolCalls) {
447290
- t6 = new Map(toolCalls.map(_temp18));
447479
+ t6 = new Map(toolCalls.map(_temp19));
447291
447480
  $5[0] = toolCalls;
447292
447481
  $5[1] = t6;
447293
447482
  } else {
@@ -447474,7 +447663,7 @@ function TaskList(t0) {
447474
447663
  }
447475
447664
  let t3;
447476
447665
  if ($5[6] !== tasks) {
447477
- t3 = tasks.filter(_temp19);
447666
+ t3 = tasks.filter(_temp20);
447478
447667
  $5[6] = tasks;
447479
447668
  $5[7] = t3;
447480
447669
  } else {
@@ -447728,7 +447917,7 @@ function _temp37(t_1) {
447728
447917
  function _temp28(t_0) {
447729
447918
  return t_0.status === "in-progress";
447730
447919
  }
447731
- function _temp19(t2) {
447920
+ function _temp20(t2) {
447732
447921
  return t2.status === "done";
447733
447922
  }
447734
447923
  function TaskProgress(t0) {
@@ -447866,7 +448055,7 @@ function PlanProgress(t0) {
447866
448055
  const STATUS_COLORS = t1;
447867
448056
  let t22;
447868
448057
  if ($5[5] !== plan.steps) {
447869
- t22 = plan.steps.filter(_temp20);
448058
+ t22 = plan.steps.filter(_temp21);
447870
448059
  $5[5] = plan.steps;
447871
448060
  $5[6] = t22;
447872
448061
  } else {
@@ -448076,7 +448265,7 @@ function PlanProgress(t0) {
448076
448265
  function _temp29(s_0) {
448077
448266
  return s_0.status === "active";
448078
448267
  }
448079
- function _temp20(s2) {
448268
+ function _temp21(s2) {
448080
448269
  return s2.status === "done";
448081
448270
  }
448082
448271
  var import_compiler_runtime21, STATUS_ICONS, MAX_VISIBLE3 = 7;
@@ -448183,7 +448372,7 @@ function PlanReviewPrompt(t0) {
448183
448372
  if (plan.depth === "light") {
448184
448373
  let t72;
448185
448374
  if ($5[13] !== allOptions) {
448186
- t72 = allOptions.filter(_temp21);
448375
+ t72 = allOptions.filter(_temp30);
448187
448376
  $5[13] = allOptions;
448188
448377
  $5[14] = t72;
448189
448378
  } else {
@@ -448556,7 +448745,7 @@ function PlanReviewPrompt(t0) {
448556
448745
  }
448557
448746
  return t20;
448558
448747
  }
448559
- function _temp21(o3) {
448748
+ function _temp30(o3) {
448560
448749
  return o3.id !== "clear_implement";
448561
448750
  }
448562
448751
  var import_compiler_runtime22, import_react44;
@@ -448893,7 +449082,7 @@ function useChangedFiles(messages) {
448893
449082
  }
448894
449083
  }
448895
449084
  }
448896
- t0 = [...fileMap.values()].sort(_temp30);
449085
+ t0 = [...fileMap.values()].sort(_temp38);
448897
449086
  $5[0] = messages;
448898
449087
  $5[1] = t0;
448899
449088
  } else {
@@ -448901,7 +449090,7 @@ function useChangedFiles(messages) {
448901
449090
  }
448902
449091
  return t0;
448903
449092
  }
448904
- function _temp30(a2, b5) {
449093
+ function _temp38(a2, b5) {
448905
449094
  return a2.path.localeCompare(b5.path);
448906
449095
  }
448907
449096
  function ChangedFilesBar(t0) {
@@ -449263,7 +449452,7 @@ function ChangesSection(t0) {
449263
449452
  const rows = t1;
449264
449453
  let t22;
449265
449454
  if ($5[4] !== files) {
449266
- t22 = files.filter(_temp38);
449455
+ t22 = files.filter(_temp39);
449267
449456
  $5[4] = files;
449268
449457
  $5[5] = t22;
449269
449458
  } else {
@@ -449485,7 +449674,7 @@ function ChangesSection(t0) {
449485
449674
  }
449486
449675
  return t13;
449487
449676
  }
449488
- function _temp38(f3) {
449677
+ function _temp39(f3) {
449489
449678
  return f3.created;
449490
449679
  }
449491
449680
  function ChangesPanel(t0) {
@@ -449605,7 +449794,7 @@ function ScanDivider(t0) {
449605
449794
  if ($5[8] !== chars) {
449606
449795
  t4 = /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("box", {
449607
449796
  flexDirection: "row",
449608
- children: chars.map(_temp39)
449797
+ children: chars.map(_temp40)
449609
449798
  }, undefined, false, undefined, this);
449610
449799
  $5[8] = chars;
449611
449800
  $5[9] = t4;
@@ -449614,7 +449803,7 @@ function ScanDivider(t0) {
449614
449803
  }
449615
449804
  return t4;
449616
449805
  }
449617
- function _temp39(c, i_0) {
449806
+ function _temp40(c, i_0) {
449618
449807
  return /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("text", {
449619
449808
  fg: c.color,
449620
449809
  children: c.ch
@@ -449822,7 +450011,7 @@ function LandingPage(t0) {
449822
450011
  import_react50.useEffect(t6, t7);
449823
450012
  let t8;
449824
450013
  if ($5[15] !== bootProviders) {
449825
- t8 = bootProviders.filter(_temp310);
450014
+ t8 = bootProviders.filter(_temp311);
449826
450015
  $5[15] = bootProviders;
449827
450016
  $5[16] = t8;
449828
450017
  } else {
@@ -450237,7 +450426,7 @@ function _temp53(p_1) {
450237
450426
  function _temp46(p_0) {
450238
450427
  return !p_0.available;
450239
450428
  }
450240
- function _temp310(p2) {
450429
+ function _temp311(p2) {
450241
450430
  return p2.available;
450242
450431
  }
450243
450432
  function _temp211(s2) {
@@ -460416,119 +460605,62 @@ var init_DiagnosePopup = __esm(async () => {
460416
460605
  });
460417
460606
 
460418
460607
  // src/components/modals/wizard/data.ts
460419
- var STEPS, STEP_LABELS, FEATURES, MODES, SHORTCUTS2, WELCOME_BULLETS, QUICK_START, WELCOME_TITLE = "Welcome to SoulForge", TYPEWRITER_MS = 45, BLINK_COUNT = 4, BLINK_MS = 300, BLINK_INITIAL_MS = 400, MAX_W = 100;
460608
+ var STEPS, STEP_LABELS, SHORTCUTS2, INTELLIGENCE_ITEMS, WORKFLOW_ITEMS, WELCOME_BULLETS, QUICK_START, WELCOME_TITLE = "Welcome to SoulForge", TYPEWRITER_MS = 45, BLINK_COUNT = 4, BLINK_MS = 300, BLINK_INITIAL_MS = 400, MAX_W = 100;
460420
460609
  var init_data = __esm(() => {
460421
- STEPS = ["welcome", "setup", "features", "shortcuts", "theme", "ready"];
460610
+ STEPS = ["welcome", "setup", "intelligence", "workflow", "shortcuts", "theme", "ready"];
460422
460611
  STEP_LABELS = {
460423
460612
  welcome: "Welcome",
460424
460613
  setup: "Provider & Key",
460425
- features: "Features",
460614
+ intelligence: "Intelligence",
460615
+ workflow: "Workflow",
460426
460616
  shortcuts: "Shortcuts",
460427
460617
  theme: "Theme",
460428
460618
  ready: "Ready"
460429
460619
  };
460430
- FEATURES = [{
460431
- section: "Editor & Intelligence",
460432
- items: [{
460433
- ic: "editor",
460434
- title: "Editor Panel",
460435
- keys: "Ctrl+E",
460436
- desc: "Built-in Neovim with LSP, diagnostics, hover, go-to-def"
460437
- }, {
460438
- ic: "search",
460439
- title: "Soul Map",
460440
- keys: "/repo-map",
460441
- desc: "AST index of your entire codebase for smart context"
460442
- }, {
460443
- ic: "brain",
460444
- title: "Code Intelligence",
460445
- keys: "/lsp",
460446
- desc: "Tree-sitter + LSP \u2014 symbols, refs, rename"
460447
- }]
460448
- }, {
460449
- section: "Workflow",
460450
- items: [{
460451
- ic: "chat",
460452
- title: "Tabs & Sessions",
460453
- keys: "Ctrl+T / Ctrl+P",
460454
- desc: "Multiple chats, browse & restore sessions"
460455
- }, {
460456
- ic: "git",
460457
- title: "Git Integration",
460458
- keys: "Ctrl+G",
460459
- desc: "Commit, diff, branch \u2014 AI adds co-author tag"
460460
- }, {
460461
- ic: "ai",
460462
- title: "Task Router",
460463
- keys: "/router",
460464
- desc: "Route coding, search, compact to different models"
460465
- }, {
460466
- ic: "skills",
460467
- title: "Skills & Plugins",
460468
- keys: "Ctrl+S",
460469
- desc: "Browse & install community skills"
460470
- }]
460471
- }];
460472
- MODES = ["auto", "default", "architect", "plan", "socratic", "challenge"];
460473
460620
  SHORTCUTS2 = [{
460474
- section: "Navigation",
460621
+ section: "Most Used",
460475
460622
  items: [{
460476
- keys: "Ctrl+L",
460477
- desc: "Model selector",
460478
- slash: false
460479
- }, {
460480
460623
  keys: "Ctrl+K",
460481
460624
  desc: "Command palette \u2014 search all commands",
460482
460625
  slash: false
460483
460626
  }, {
460484
- keys: "Ctrl+O",
460485
- desc: "Expand/collapse tool output",
460627
+ keys: "Ctrl+L",
460628
+ desc: "Switch model",
460486
460629
  slash: false
460487
460630
  }, {
460488
460631
  keys: "Ctrl+E",
460489
460632
  desc: "Toggle editor panel",
460490
460633
  slash: false
460491
- }]
460492
- }, {
460493
- section: "Workflow",
460494
- items: [{
460495
- keys: "Ctrl+G",
460496
- desc: "Git menu \u2014 commit, diff, branch",
460497
- slash: false
460498
460634
  }, {
460499
460635
  keys: "Ctrl+T",
460500
460636
  desc: "New tab",
460501
460637
  slash: false
460502
- }, {
460503
- keys: "Ctrl+N",
460504
- desc: "New session (clear chat)",
460505
- slash: false
460506
460638
  }, {
460507
460639
  keys: "Ctrl+W",
460508
460640
  desc: "Close tab",
460509
460641
  slash: false
460510
460642
  }, {
460511
- keys: "Ctrl+D",
460512
- desc: "Cycle agent mode",
460643
+ keys: "Ctrl+G",
460644
+ desc: "Git menu",
460513
460645
  slash: false
460514
460646
  }, {
460515
- keys: "Ctrl+P",
460516
- desc: "Browse & restore sessions",
460647
+ keys: "Ctrl+S",
460648
+ desc: "Skills browser",
460517
460649
  slash: false
460518
460650
  }, {
460519
- keys: "Ctrl+S",
460520
- desc: "Search & install skills",
460651
+ keys: "Ctrl+D",
460652
+ desc: "Cycle mode",
460521
460653
  slash: false
460522
460654
  }, {
460523
460655
  keys: "Ctrl+C",
460524
- desc: "Cancel current generation",
460656
+ desc: "Cancel generation",
460525
460657
  slash: false
460526
460658
  }]
460527
460659
  }, {
460528
- section: "Essential Commands",
460660
+ section: "Quick Commands",
460529
460661
  items: [{
460530
460662
  keys: "/help",
460531
- desc: "Command palette \u2014 all commands",
460663
+ desc: "All commands & shortcuts",
460532
460664
  slash: true
460533
460665
  }, {
460534
460666
  keys: "/setup",
@@ -460536,22 +460668,76 @@ var init_data = __esm(() => {
460536
460668
  slash: true
460537
460669
  }, {
460538
460670
  keys: "/settings",
460539
- desc: "Settings hub \u2014 all options",
460671
+ desc: "Settings hub \u2014 all options in one place",
460540
460672
  slash: true
460541
460673
  }, {
460542
460674
  keys: "/keys",
460543
460675
  desc: "Manage API keys",
460544
460676
  slash: true
460545
- }, {
460546
- keys: "/privacy",
460547
- desc: "Manage forbidden file patterns",
460548
- slash: true
460549
- }, {
460550
- keys: "/sessions",
460551
- desc: "Browse & restore sessions",
460552
- slash: true
460553
460677
  }]
460554
460678
  }];
460679
+ INTELLIGENCE_ITEMS = [{
460680
+ ic: "repomap",
460681
+ title: "Soul Map",
460682
+ cmd: "/repo-map",
460683
+ desc: "Live AST index of your entire codebase \u2014 files, symbols, signatures, dependencies",
460684
+ bullets: ["Tree-sitter parses every file \u2192 exports, types, functions with line numbers", "PageRank ranks files by importance \u2014 AI sees the most relevant code first", "Summaries: [AST] structure \xB7 [AST+SYN] + synthetic \xB7 [AST+LLM] + AI-generated"]
460685
+ }, {
460686
+ ic: "editor",
460687
+ title: "Editor & LSP",
460688
+ cmd: "Ctrl+E",
460689
+ desc: "Built-in Neovim with full language intelligence",
460690
+ bullets: ["Diagnostics, hover, go-to-definition, references, rename \u2014 all in-terminal", "Tree-sitter + LSP work together to power the Soul Map and agent tools"]
460691
+ }, {
460692
+ ic: "tools",
460693
+ title: "Agent Tools",
460694
+ cmd: "/tools",
460695
+ desc: "Toggle which tools the AI can use \u2014 fine-tune what it's allowed to do",
460696
+ bullets: ["File editing, shell, grep, LSP navigation, web search, and more", "Disable tools to restrict the agent (e.g. no shell in review mode)"]
460697
+ }, {
460698
+ ic: "skills",
460699
+ title: "Skills",
460700
+ cmd: "/skills",
460701
+ desc: "Community plugins that give the AI domain expertise",
460702
+ bullets: ["Search & install from skills.sh \u2014 React, testing, SEO, and more", "Skills inject context so the AI follows best practices for your stack"]
460703
+ }, {
460704
+ ic: "cog",
460705
+ title: "Modes",
460706
+ cmd: "/mode",
460707
+ desc: "Switch how the AI approaches tasks",
460708
+ bullets: ["auto (default) \xB7 architect \xB7 plan \xB7 socratic \xB7 challenge", "Cycle quickly with Ctrl+D or pick with /mode"]
460709
+ }];
460710
+ WORKFLOW_ITEMS = [{
460711
+ ic: "router",
460712
+ title: "Task Router",
460713
+ cmd: "/router",
460714
+ desc: "Assign different models to different tasks \u2014 code, explore, review, compact",
460715
+ bullets: ["Route coding to a strong model, exploration to a fast one", "Each tab has its own model \u2014 switch with Ctrl+L"]
460716
+ }, {
460717
+ ic: "tabs",
460718
+ title: "Tabs & Sessions",
460719
+ cmd: "/tab",
460720
+ desc: "Each tab is an independent chat with its own model and context",
460721
+ bullets: ["/tab new \xB7 /tab close \xB7 /tab rename", "Ctrl+P browse & restore past sessions"]
460722
+ }, {
460723
+ ic: "git",
460724
+ title: "Git",
460725
+ cmd: "/git",
460726
+ desc: "Full git workflow from chat \u2014 AI adds co-author tag to commits",
460727
+ bullets: ["/git commit \xB7 /git diff \xB7 /git branch \xB7 /git stash \u2014 or Ctrl+G for the menu"]
460728
+ }, {
460729
+ ic: "memory",
460730
+ title: "Memory",
460731
+ cmd: "/memory",
460732
+ desc: "Persistent knowledge the AI remembers across sessions",
460733
+ bullets: ["Project-scoped or global \u2014 Forge learns your preferences over time"]
460734
+ }, {
460735
+ ic: "system",
460736
+ title: "Tuning",
460737
+ cmd: "/provider-settings",
460738
+ desc: "Fine-tune the AI's behavior and output quality",
460739
+ bullets: ["/provider-settings \u2014 thinking budget, effort, speed, context window", "/agent-features \u2014 de-sloppify, tier routing, auto-compact, auto-verify"]
460740
+ }];
460555
460741
  WELCOME_BULLETS = ["Chat with AI to build, debug, and refactor code", "Edit files directly \u2014 AI reads and writes your codebase", "Run shell commands, git operations, and tests from chat", "Dispatch parallel agents for large multi-file tasks", "Built-in Neovim editor with LSP intelligence"];
460556
460742
  QUICK_START = ['"fix the bug in auth.ts"', '"add tests for the user service"', '"refactor this to use async/await"', '"explain how the payment flow works"'];
460557
460743
  });
@@ -461027,9 +461213,9 @@ var init_primitives = __esm(async () => {
461027
461213
  });
461028
461214
  });
461029
461215
 
461030
- // src/components/modals/wizard/steps/FeaturesStep.tsx
461031
- var import_compiler_runtime46, import_react79, FeaturesStep;
461032
- var init_FeaturesStep = __esm(async () => {
461216
+ // src/components/modals/wizard/steps/IntelligenceStep.tsx
461217
+ var import_compiler_runtime46, import_react79, IntelligenceStep;
461218
+ var init_IntelligenceStep = __esm(async () => {
461033
461219
  init_icons();
461034
461220
  init_theme();
461035
461221
  init_shared2();
@@ -461041,8 +461227,8 @@ var init_FeaturesStep = __esm(async () => {
461041
461227
  ]);
461042
461228
  import_compiler_runtime46 = __toESM(require_compiler_runtime(), 1);
461043
461229
  import_react79 = __toESM(require_react(), 1);
461044
- FeaturesStep = import_react79.memo(function FeaturesStep2(t0) {
461045
- const $5 = import_compiler_runtime46.c(41);
461230
+ IntelligenceStep = import_react79.memo(function IntelligenceStep2(t0) {
461231
+ const $5 = import_compiler_runtime46.c(27);
461046
461232
  const {
461047
461233
  iw
461048
461234
  } = t0;
@@ -461062,200 +461248,156 @@ var init_FeaturesStep = __esm(async () => {
461062
461248
  }
461063
461249
  let t22;
461064
461250
  if ($5[2] === Symbol.for("react.memo_cache_sentinel")) {
461065
- t22 = icon("tools");
461251
+ t22 = icon("brain");
461066
461252
  $5[2] = t22;
461067
461253
  } else {
461068
461254
  t22 = $5[2];
461069
461255
  }
461070
461256
  let t3;
461257
+ let t4;
461071
461258
  if ($5[3] !== iw) {
461072
461259
  t3 = /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV(StepHeader, {
461073
461260
  iw,
461074
461261
  ic: t22,
461075
- title: "Power Features"
461262
+ title: "Codebase Intelligence"
461263
+ }, undefined, false, undefined, this);
461264
+ t4 = /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV(Gap, {
461265
+ iw
461076
461266
  }, undefined, false, undefined, this);
461077
461267
  $5[3] = iw;
461078
461268
  $5[4] = t3;
461269
+ $5[5] = t4;
461079
461270
  } else {
461080
461271
  t3 = $5[4];
461081
- }
461082
- let t4;
461083
- if ($5[5] !== bg2 || $5[6] !== iw) {
461084
- t4 = FEATURES.map((group) => /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("box", {
461085
- flexDirection: "column",
461086
- backgroundColor: bg2,
461087
- children: [
461088
- /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV(Gap, {
461089
- iw
461090
- }, undefined, false, undefined, this),
461091
- /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV(SectionLabel, {
461092
- iw,
461093
- label: group.section
461094
- }, undefined, false, undefined, this),
461095
- group.items.map((f3) => /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV(Feat, {
461096
- iw,
461097
- ic: icon(f3.ic),
461098
- title: f3.title,
461099
- keys: f3.keys,
461100
- desc: f3.desc
461101
- }, f3.title, false, undefined, this))
461102
- ]
461103
- }, group.section, true, undefined, this));
461104
- $5[5] = bg2;
461105
- $5[6] = iw;
461106
- $5[7] = t4;
461107
- } else {
461108
- t4 = $5[7];
461272
+ t4 = $5[5];
461109
461273
  }
461110
461274
  let t5;
461111
- let t6;
461112
- if ($5[8] !== iw) {
461113
- t5 = /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV(Gap, {
461114
- iw
461115
- }, undefined, false, undefined, this);
461116
- t6 = /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV(SectionLabel, {
461117
- iw,
461118
- label: "Modes"
461119
- }, undefined, false, undefined, this);
461120
- $5[8] = iw;
461121
- $5[9] = t5;
461122
- $5[10] = t6;
461123
- } else {
461124
- t5 = $5[9];
461125
- t6 = $5[10];
461126
- }
461127
- const t7 = t2.textDim;
461128
- let t8;
461129
- if ($5[11] !== t2.warning) {
461130
- t8 = /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("span", {
461131
- fg: t2.warning,
461132
- children: MODES[0]
461133
- }, undefined, false, undefined, this);
461134
- $5[11] = t2.warning;
461135
- $5[12] = t8;
461136
- } else {
461137
- t8 = $5[12];
461138
- }
461139
- let t9;
461140
- if ($5[13] === Symbol.for("react.memo_cache_sentinel")) {
461141
- t9 = MODES.slice(1).join(" \xB7 ");
461142
- $5[13] = t9;
461143
- } else {
461144
- t9 = $5[13];
461145
- }
461146
- let t10;
461147
- if ($5[14] !== bg2 || $5[15] !== t2.textDim || $5[16] !== t8) {
461148
- t10 = /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("text", {
461149
- fg: t7,
461275
+ if ($5[6] !== bg2 || $5[7] !== t2.textSecondary) {
461276
+ t5 = /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("text", {
461277
+ fg: t2.textSecondary,
461150
461278
  bg: bg2,
461151
461279
  children: [
461152
461280
  " ",
461153
- t8,
461154
- ` \xB7 ${t9}`
461281
+ "SoulForge understands your code before the AI even reads it:"
461155
461282
  ]
461156
461283
  }, undefined, true, undefined, this);
461157
- $5[14] = bg2;
461158
- $5[15] = t2.textDim;
461159
- $5[16] = t8;
461160
- $5[17] = t10;
461284
+ $5[6] = bg2;
461285
+ $5[7] = t2.textSecondary;
461286
+ $5[8] = t5;
461161
461287
  } else {
461162
- t10 = $5[17];
461288
+ t5 = $5[8];
461163
461289
  }
461164
- let t11;
461165
- if ($5[18] !== iw || $5[19] !== t10) {
461166
- t11 = /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV(PopupRow, {
461290
+ let t6;
461291
+ if ($5[9] !== iw || $5[10] !== t5) {
461292
+ t6 = /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV(PopupRow, {
461167
461293
  w: iw,
461168
- children: t10
461169
- }, undefined, false, undefined, this);
461170
- $5[18] = iw;
461171
- $5[19] = t10;
461172
- $5[20] = t11;
461173
- } else {
461174
- t11 = $5[20];
461175
- }
461176
- let t12;
461177
- if ($5[21] !== t2.info) {
461178
- t12 = /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("span", {
461179
- fg: t2.info,
461180
- attributes: BOLD3,
461181
- children: "Ctrl+D"
461182
- }, undefined, false, undefined, this);
461183
- $5[21] = t2.info;
461184
- $5[22] = t12;
461185
- } else {
461186
- t12 = $5[22];
461187
- }
461188
- let t13;
461189
- if ($5[23] !== t2.brand) {
461190
- t13 = /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("span", {
461191
- fg: t2.brand,
461192
- children: "/mode"
461294
+ children: t5
461193
461295
  }, undefined, false, undefined, this);
461194
- $5[23] = t2.brand;
461195
- $5[24] = t13;
461296
+ $5[9] = iw;
461297
+ $5[10] = t5;
461298
+ $5[11] = t6;
461196
461299
  } else {
461197
- t13 = $5[24];
461300
+ t6 = $5[11];
461198
461301
  }
461199
- let t14;
461200
- if ($5[25] !== bg2 || $5[26] !== t2.textDim || $5[27] !== t12 || $5[28] !== t13) {
461201
- t14 = /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("text", {
461202
- fg: t2.textDim,
461203
- bg: bg2,
461302
+ let t7;
461303
+ if ($5[12] !== bg2 || $5[13] !== iw || $5[14] !== t2.brand || $5[15] !== t2.info || $5[16] !== t2.textDim || $5[17] !== t2.textFaint || $5[18] !== t2.textPrimary || $5[19] !== t2.textSecondary) {
461304
+ t7 = INTELLIGENCE_ITEMS.map((item) => /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("box", {
461305
+ flexDirection: "column",
461306
+ backgroundColor: bg2,
461204
461307
  children: [
461205
- " ",
461206
- "Cycle with",
461207
- " ",
461208
- t12,
461209
- " ",
461210
- "or type ",
461211
- t13
461308
+ /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV(Gap, {
461309
+ iw
461310
+ }, undefined, false, undefined, this),
461311
+ /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV(PopupRow, {
461312
+ w: iw,
461313
+ children: [
461314
+ /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("text", {
461315
+ fg: t2.brand,
461316
+ bg: bg2,
461317
+ children: [
461318
+ " ",
461319
+ icon(item.ic),
461320
+ " "
461321
+ ]
461322
+ }, undefined, true, undefined, this),
461323
+ /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("text", {
461324
+ fg: t2.textPrimary,
461325
+ attributes: BOLD3,
461326
+ bg: bg2,
461327
+ children: item.title
461328
+ }, undefined, false, undefined, this),
461329
+ /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("text", {
461330
+ fg: t2.info,
461331
+ bg: bg2,
461332
+ children: [
461333
+ " ",
461334
+ item.cmd
461335
+ ]
461336
+ }, undefined, true, undefined, this)
461337
+ ]
461338
+ }, undefined, true, undefined, this),
461339
+ /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV(PopupRow, {
461340
+ w: iw,
461341
+ children: /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("text", {
461342
+ fg: t2.textSecondary,
461343
+ bg: bg2,
461344
+ children: [
461345
+ " ",
461346
+ item.desc
461347
+ ]
461348
+ }, undefined, true, undefined, this)
461349
+ }, undefined, false, undefined, this),
461350
+ item.bullets.map((b5) => /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV(PopupRow, {
461351
+ w: iw,
461352
+ children: /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("text", {
461353
+ fg: t2.textDim,
461354
+ bg: bg2,
461355
+ children: [
461356
+ " ",
461357
+ /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("span", {
461358
+ fg: t2.textFaint,
461359
+ children: "\u2022"
461360
+ }, undefined, false, undefined, this),
461361
+ " ",
461362
+ b5
461363
+ ]
461364
+ }, undefined, true, undefined, this)
461365
+ }, b5, false, undefined, this))
461212
461366
  ]
461213
- }, undefined, true, undefined, this);
461214
- $5[25] = bg2;
461215
- $5[26] = t2.textDim;
461216
- $5[27] = t12;
461217
- $5[28] = t13;
461218
- $5[29] = t14;
461219
- } else {
461220
- t14 = $5[29];
461221
- }
461222
- let t15;
461223
- if ($5[30] !== iw || $5[31] !== t14) {
461224
- t15 = /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV(PopupRow, {
461225
- w: iw,
461226
- children: t14
461227
- }, undefined, false, undefined, this);
461228
- $5[30] = iw;
461229
- $5[31] = t14;
461230
- $5[32] = t15;
461367
+ }, item.cmd, true, undefined, this));
461368
+ $5[12] = bg2;
461369
+ $5[13] = iw;
461370
+ $5[14] = t2.brand;
461371
+ $5[15] = t2.info;
461372
+ $5[16] = t2.textDim;
461373
+ $5[17] = t2.textFaint;
461374
+ $5[18] = t2.textPrimary;
461375
+ $5[19] = t2.textSecondary;
461376
+ $5[20] = t7;
461231
461377
  } else {
461232
- t15 = $5[32];
461378
+ t7 = $5[20];
461233
461379
  }
461234
- let t16;
461235
- if ($5[33] !== t1 || $5[34] !== t11 || $5[35] !== t15 || $5[36] !== t3 || $5[37] !== t4 || $5[38] !== t5 || $5[39] !== t6) {
461236
- t16 = /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV(import_jsx_dev_runtime2.Fragment, {
461380
+ let t8;
461381
+ if ($5[21] !== t1 || $5[22] !== t3 || $5[23] !== t4 || $5[24] !== t6 || $5[25] !== t7) {
461382
+ t8 = /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV(import_jsx_dev_runtime2.Fragment, {
461237
461383
  children: [
461238
461384
  t1,
461239
461385
  t3,
461240
461386
  t4,
461241
- t5,
461242
461387
  t6,
461243
- t11,
461244
- t15
461388
+ t7
461245
461389
  ]
461246
461390
  }, undefined, true, undefined, this);
461247
- $5[33] = t1;
461248
- $5[34] = t11;
461249
- $5[35] = t15;
461250
- $5[36] = t3;
461251
- $5[37] = t4;
461252
- $5[38] = t5;
461253
- $5[39] = t6;
461254
- $5[40] = t16;
461391
+ $5[21] = t1;
461392
+ $5[22] = t3;
461393
+ $5[23] = t4;
461394
+ $5[24] = t6;
461395
+ $5[25] = t7;
461396
+ $5[26] = t8;
461255
461397
  } else {
461256
- t16 = $5[40];
461398
+ t8 = $5[26];
461257
461399
  }
461258
- return t16;
461400
+ return t8;
461259
461401
  });
461260
461402
  });
461261
461403
 
@@ -462479,7 +462621,7 @@ var init_ShortcutsStep = __esm(async () => {
462479
462621
  import_compiler_runtime49 = __toESM(require_compiler_runtime(), 1);
462480
462622
  import_react83 = __toESM(require_react(), 1);
462481
462623
  ShortcutsStep = import_react83.memo(function ShortcutsStep2(t0) {
462482
- const $5 = import_compiler_runtime49.c(13);
462624
+ const $5 = import_compiler_runtime49.c(31);
462483
462625
  const {
462484
462626
  iw
462485
462627
  } = t0;
@@ -462517,7 +462659,7 @@ var init_ShortcutsStep = __esm(async () => {
462517
462659
  t3 = $5[4];
462518
462660
  }
462519
462661
  let t4;
462520
- if ($5[5] !== bg2 || $5[6] !== iw || $5[7] !== t2) {
462662
+ if ($5[5] !== bg2 || $5[6] !== iw || $5[7] !== t2.brand || $5[8] !== t2.info || $5[9] !== t2.textSecondary) {
462521
462663
  t4 = SHORTCUTS2.map((group) => /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("box", {
462522
462664
  flexDirection: "column",
462523
462665
  backgroundColor: bg2,
@@ -462552,28 +462694,104 @@ var init_ShortcutsStep = __esm(async () => {
462552
462694
  }, group.section, true, undefined, this));
462553
462695
  $5[5] = bg2;
462554
462696
  $5[6] = iw;
462555
- $5[7] = t2;
462556
- $5[8] = t4;
462697
+ $5[7] = t2.brand;
462698
+ $5[8] = t2.info;
462699
+ $5[9] = t2.textSecondary;
462700
+ $5[10] = t4;
462557
462701
  } else {
462558
- t4 = $5[8];
462702
+ t4 = $5[10];
462559
462703
  }
462560
462704
  let t5;
462561
- if ($5[9] !== t1 || $5[10] !== t3 || $5[11] !== t4) {
462562
- t5 = /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV(import_jsx_dev_runtime2.Fragment, {
462705
+ if ($5[11] !== iw) {
462706
+ t5 = /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV(Gap, {
462707
+ iw,
462708
+ n: 2
462709
+ }, undefined, false, undefined, this);
462710
+ $5[11] = iw;
462711
+ $5[12] = t5;
462712
+ } else {
462713
+ t5 = $5[12];
462714
+ }
462715
+ let t6;
462716
+ if ($5[13] !== t2.brand) {
462717
+ t6 = /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("span", {
462718
+ fg: t2.brand,
462719
+ children: "/help"
462720
+ }, undefined, false, undefined, this);
462721
+ $5[13] = t2.brand;
462722
+ $5[14] = t6;
462723
+ } else {
462724
+ t6 = $5[14];
462725
+ }
462726
+ let t7;
462727
+ if ($5[15] !== t2.info) {
462728
+ t7 = /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("span", {
462729
+ fg: t2.info,
462730
+ attributes: BOLD3,
462731
+ children: "Ctrl+K"
462732
+ }, undefined, false, undefined, this);
462733
+ $5[15] = t2.info;
462734
+ $5[16] = t7;
462735
+ } else {
462736
+ t7 = $5[16];
462737
+ }
462738
+ let t8;
462739
+ if ($5[17] !== bg2 || $5[18] !== t2.textFaint || $5[19] !== t6 || $5[20] !== t7) {
462740
+ t8 = /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("text", {
462741
+ fg: t2.textFaint,
462742
+ bg: bg2,
462743
+ children: [
462744
+ " ",
462745
+ "These are just the highlights \u2014 type ",
462746
+ t6,
462747
+ " or press",
462748
+ " ",
462749
+ t7,
462750
+ " ",
462751
+ "to browse all commands"
462752
+ ]
462753
+ }, undefined, true, undefined, this);
462754
+ $5[17] = bg2;
462755
+ $5[18] = t2.textFaint;
462756
+ $5[19] = t6;
462757
+ $5[20] = t7;
462758
+ $5[21] = t8;
462759
+ } else {
462760
+ t8 = $5[21];
462761
+ }
462762
+ let t9;
462763
+ if ($5[22] !== iw || $5[23] !== t8) {
462764
+ t9 = /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV(PopupRow, {
462765
+ w: iw,
462766
+ children: t8
462767
+ }, undefined, false, undefined, this);
462768
+ $5[22] = iw;
462769
+ $5[23] = t8;
462770
+ $5[24] = t9;
462771
+ } else {
462772
+ t9 = $5[24];
462773
+ }
462774
+ let t10;
462775
+ if ($5[25] !== t1 || $5[26] !== t3 || $5[27] !== t4 || $5[28] !== t5 || $5[29] !== t9) {
462776
+ t10 = /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV(import_jsx_dev_runtime2.Fragment, {
462563
462777
  children: [
462564
462778
  t1,
462565
462779
  t3,
462566
- t4
462780
+ t4,
462781
+ t5,
462782
+ t9
462567
462783
  ]
462568
462784
  }, undefined, true, undefined, this);
462569
- $5[9] = t1;
462570
- $5[10] = t3;
462571
- $5[11] = t4;
462572
- $5[12] = t5;
462785
+ $5[25] = t1;
462786
+ $5[26] = t3;
462787
+ $5[27] = t4;
462788
+ $5[28] = t5;
462789
+ $5[29] = t9;
462790
+ $5[30] = t10;
462573
462791
  } else {
462574
- t5 = $5[12];
462792
+ t10 = $5[30];
462575
462793
  }
462576
- return t5;
462794
+ return t10;
462577
462795
  });
462578
462796
  });
462579
462797
 
@@ -463518,6 +463736,267 @@ var init_WelcomeStep = __esm(async () => {
463518
463736
  });
463519
463737
  });
463520
463738
 
463739
+ // src/components/modals/wizard/steps/WorkflowStep.tsx
463740
+ var import_compiler_runtime52, import_react87, WorkflowStep;
463741
+ var init_WorkflowStep = __esm(async () => {
463742
+ init_icons();
463743
+ init_theme();
463744
+ init_shared2();
463745
+ init_data();
463746
+ init_jsx_dev_runtime();
463747
+ await __promiseAll([
463748
+ init_primitives(),
463749
+ init_theme2()
463750
+ ]);
463751
+ import_compiler_runtime52 = __toESM(require_compiler_runtime(), 1);
463752
+ import_react87 = __toESM(require_react(), 1);
463753
+ WorkflowStep = import_react87.memo(function WorkflowStep2(t0) {
463754
+ const $5 = import_compiler_runtime52.c(43);
463755
+ const {
463756
+ iw
463757
+ } = t0;
463758
+ const t2 = useTheme();
463759
+ const {
463760
+ bg: bg2
463761
+ } = usePopupColors();
463762
+ let t1;
463763
+ if ($5[0] !== iw) {
463764
+ t1 = /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV(Gap, {
463765
+ iw
463766
+ }, undefined, false, undefined, this);
463767
+ $5[0] = iw;
463768
+ $5[1] = t1;
463769
+ } else {
463770
+ t1 = $5[1];
463771
+ }
463772
+ let t22;
463773
+ if ($5[2] === Symbol.for("react.memo_cache_sentinel")) {
463774
+ t22 = icon("router");
463775
+ $5[2] = t22;
463776
+ } else {
463777
+ t22 = $5[2];
463778
+ }
463779
+ let t3;
463780
+ let t4;
463781
+ if ($5[3] !== iw) {
463782
+ t3 = /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV(StepHeader, {
463783
+ iw,
463784
+ ic: t22,
463785
+ title: "Models, Tabs & Workflow"
463786
+ }, undefined, false, undefined, this);
463787
+ t4 = /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV(Gap, {
463788
+ iw
463789
+ }, undefined, false, undefined, this);
463790
+ $5[3] = iw;
463791
+ $5[4] = t3;
463792
+ $5[5] = t4;
463793
+ } else {
463794
+ t3 = $5[4];
463795
+ t4 = $5[5];
463796
+ }
463797
+ let t5;
463798
+ if ($5[6] !== bg2 || $5[7] !== t2.textSecondary) {
463799
+ t5 = /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("text", {
463800
+ fg: t2.textSecondary,
463801
+ bg: bg2,
463802
+ children: [
463803
+ " ",
463804
+ "Route models per task, manage tabs, and tune agent behavior:"
463805
+ ]
463806
+ }, undefined, true, undefined, this);
463807
+ $5[6] = bg2;
463808
+ $5[7] = t2.textSecondary;
463809
+ $5[8] = t5;
463810
+ } else {
463811
+ t5 = $5[8];
463812
+ }
463813
+ let t6;
463814
+ if ($5[9] !== iw || $5[10] !== t5) {
463815
+ t6 = /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV(PopupRow, {
463816
+ w: iw,
463817
+ children: t5
463818
+ }, undefined, false, undefined, this);
463819
+ $5[9] = iw;
463820
+ $5[10] = t5;
463821
+ $5[11] = t6;
463822
+ } else {
463823
+ t6 = $5[11];
463824
+ }
463825
+ let t7;
463826
+ if ($5[12] !== bg2 || $5[13] !== iw || $5[14] !== t2.brand || $5[15] !== t2.info || $5[16] !== t2.textDim || $5[17] !== t2.textFaint || $5[18] !== t2.textPrimary || $5[19] !== t2.textSecondary) {
463827
+ t7 = WORKFLOW_ITEMS.map((item) => /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("box", {
463828
+ flexDirection: "column",
463829
+ backgroundColor: bg2,
463830
+ children: [
463831
+ /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV(Gap, {
463832
+ iw
463833
+ }, undefined, false, undefined, this),
463834
+ /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV(PopupRow, {
463835
+ w: iw,
463836
+ children: [
463837
+ /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("text", {
463838
+ fg: t2.brand,
463839
+ bg: bg2,
463840
+ children: [
463841
+ " ",
463842
+ icon(item.ic),
463843
+ " "
463844
+ ]
463845
+ }, undefined, true, undefined, this),
463846
+ /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("text", {
463847
+ fg: t2.textPrimary,
463848
+ attributes: BOLD3,
463849
+ bg: bg2,
463850
+ children: item.title
463851
+ }, undefined, false, undefined, this),
463852
+ /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("text", {
463853
+ fg: t2.info,
463854
+ bg: bg2,
463855
+ children: [
463856
+ " ",
463857
+ item.cmd
463858
+ ]
463859
+ }, undefined, true, undefined, this)
463860
+ ]
463861
+ }, undefined, true, undefined, this),
463862
+ /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV(PopupRow, {
463863
+ w: iw,
463864
+ children: /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("text", {
463865
+ fg: t2.textSecondary,
463866
+ bg: bg2,
463867
+ children: [
463868
+ " ",
463869
+ item.desc
463870
+ ]
463871
+ }, undefined, true, undefined, this)
463872
+ }, undefined, false, undefined, this),
463873
+ item.bullets.map((b5) => /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV(PopupRow, {
463874
+ w: iw,
463875
+ children: /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("text", {
463876
+ fg: t2.textDim,
463877
+ bg: bg2,
463878
+ children: [
463879
+ " ",
463880
+ /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("span", {
463881
+ fg: t2.textFaint,
463882
+ children: "\u2022"
463883
+ }, undefined, false, undefined, this),
463884
+ " ",
463885
+ b5
463886
+ ]
463887
+ }, undefined, true, undefined, this)
463888
+ }, b5, false, undefined, this))
463889
+ ]
463890
+ }, item.cmd, true, undefined, this));
463891
+ $5[12] = bg2;
463892
+ $5[13] = iw;
463893
+ $5[14] = t2.brand;
463894
+ $5[15] = t2.info;
463895
+ $5[16] = t2.textDim;
463896
+ $5[17] = t2.textFaint;
463897
+ $5[18] = t2.textPrimary;
463898
+ $5[19] = t2.textSecondary;
463899
+ $5[20] = t7;
463900
+ } else {
463901
+ t7 = $5[20];
463902
+ }
463903
+ let t8;
463904
+ if ($5[21] !== iw) {
463905
+ t8 = /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV(Gap, {
463906
+ iw
463907
+ }, undefined, false, undefined, this);
463908
+ $5[21] = iw;
463909
+ $5[22] = t8;
463910
+ } else {
463911
+ t8 = $5[22];
463912
+ }
463913
+ let t9;
463914
+ if ($5[23] !== t2.brand) {
463915
+ t9 = /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("span", {
463916
+ fg: t2.brand,
463917
+ children: "/help"
463918
+ }, undefined, false, undefined, this);
463919
+ $5[23] = t2.brand;
463920
+ $5[24] = t9;
463921
+ } else {
463922
+ t9 = $5[24];
463923
+ }
463924
+ let t10;
463925
+ if ($5[25] !== t2.info) {
463926
+ t10 = /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("span", {
463927
+ fg: t2.info,
463928
+ attributes: BOLD3,
463929
+ children: "Ctrl+K"
463930
+ }, undefined, false, undefined, this);
463931
+ $5[25] = t2.info;
463932
+ $5[26] = t10;
463933
+ } else {
463934
+ t10 = $5[26];
463935
+ }
463936
+ let t11;
463937
+ if ($5[27] !== bg2 || $5[28] !== t2.textFaint || $5[29] !== t10 || $5[30] !== t9) {
463938
+ t11 = /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("text", {
463939
+ fg: t2.textFaint,
463940
+ bg: bg2,
463941
+ children: [
463942
+ " ",
463943
+ "Type ",
463944
+ t9,
463945
+ " or press",
463946
+ " ",
463947
+ t10,
463948
+ " ",
463949
+ "to see all commands"
463950
+ ]
463951
+ }, undefined, true, undefined, this);
463952
+ $5[27] = bg2;
463953
+ $5[28] = t2.textFaint;
463954
+ $5[29] = t10;
463955
+ $5[30] = t9;
463956
+ $5[31] = t11;
463957
+ } else {
463958
+ t11 = $5[31];
463959
+ }
463960
+ let t12;
463961
+ if ($5[32] !== iw || $5[33] !== t11) {
463962
+ t12 = /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV(PopupRow, {
463963
+ w: iw,
463964
+ children: t11
463965
+ }, undefined, false, undefined, this);
463966
+ $5[32] = iw;
463967
+ $5[33] = t11;
463968
+ $5[34] = t12;
463969
+ } else {
463970
+ t12 = $5[34];
463971
+ }
463972
+ let t13;
463973
+ if ($5[35] !== t1 || $5[36] !== t12 || $5[37] !== t3 || $5[38] !== t4 || $5[39] !== t6 || $5[40] !== t7 || $5[41] !== t8) {
463974
+ t13 = /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV(import_jsx_dev_runtime2.Fragment, {
463975
+ children: [
463976
+ t1,
463977
+ t3,
463978
+ t4,
463979
+ t6,
463980
+ t7,
463981
+ t8,
463982
+ t12
463983
+ ]
463984
+ }, undefined, true, undefined, this);
463985
+ $5[35] = t1;
463986
+ $5[36] = t12;
463987
+ $5[37] = t3;
463988
+ $5[38] = t4;
463989
+ $5[39] = t6;
463990
+ $5[40] = t7;
463991
+ $5[41] = t8;
463992
+ $5[42] = t13;
463993
+ } else {
463994
+ t13 = $5[42];
463995
+ }
463996
+ return t13;
463997
+ });
463998
+ });
463999
+
463521
464000
  // src/components/modals/wizard/index.tsx
463522
464001
  function _temp74(i4) {
463523
464002
  return i4 + 1;
@@ -463525,7 +464004,7 @@ function _temp74(i4) {
463525
464004
  function _temp226(i_0) {
463526
464005
  return i_0 - 1;
463527
464006
  }
463528
- var import_compiler_runtime52, import_react88, FirstRunWizard;
464007
+ var import_compiler_runtime53, import_react89, FirstRunWizard;
463529
464008
  var init_wizard = __esm(async () => {
463530
464009
  init_theme();
463531
464010
  init_shared2();
@@ -463536,17 +464015,18 @@ var init_wizard = __esm(async () => {
463536
464015
  await __promiseAll([
463537
464016
  init_react2(),
463538
464017
  init_primitives(),
463539
- init_FeaturesStep(),
464018
+ init_IntelligenceStep(),
463540
464019
  init_ReadyStep(),
463541
464020
  init_SetupStep(),
463542
464021
  init_ShortcutsStep(),
463543
464022
  init_ThemeStep(),
463544
- init_WelcomeStep()
464023
+ init_WelcomeStep(),
464024
+ init_WorkflowStep()
463545
464025
  ]);
463546
- import_compiler_runtime52 = __toESM(require_compiler_runtime(), 1);
463547
- import_react88 = __toESM(require_react(), 1);
463548
- FirstRunWizard = import_react88.memo(function FirstRunWizard2(t0) {
463549
- const $5 = import_compiler_runtime52.c(66);
464026
+ import_compiler_runtime53 = __toESM(require_compiler_runtime(), 1);
464027
+ import_react89 = __toESM(require_react(), 1);
464028
+ FirstRunWizard = import_react89.memo(function FirstRunWizard2(t0) {
464029
+ const $5 = import_compiler_runtime53.c(70);
463550
464030
  const {
463551
464031
  visible,
463552
464032
  hasModel,
@@ -463560,10 +464040,10 @@ var init_wizard = __esm(async () => {
463560
464040
  } = useTerminalDimensions();
463561
464041
  const pw = Math.min(MAX_W, Math.floor(termCols * 0.92));
463562
464042
  const iw = pw - 2;
463563
- const [stepIdx, setStepIdx] = import_react88.useState(0);
464043
+ const [stepIdx, setStepIdx] = import_react89.useState(0);
463564
464044
  const step = STEPS[stepIdx] ?? "welcome";
463565
- const [setupActive, setSetupActive] = import_react88.useState(false);
463566
- const hasOpened = import_react88.useRef(false);
464045
+ const [setupActive, setSetupActive] = import_react89.useState(false);
464046
+ const hasOpened = import_react89.useRef(false);
463567
464047
  let t1;
463568
464048
  let t2;
463569
464049
  if ($5[0] !== visible) {
@@ -463585,7 +464065,7 @@ var init_wizard = __esm(async () => {
463585
464065
  t1 = $5[1];
463586
464066
  t2 = $5[2];
463587
464067
  }
463588
- import_react88.useEffect(t1, t2);
464068
+ import_react89.useEffect(t1, t2);
463589
464069
  let t3;
463590
464070
  if ($5[3] !== onClose || $5[4] !== stepIdx) {
463591
464071
  t3 = () => {
@@ -463722,7 +464202,7 @@ var init_wizard = __esm(async () => {
463722
464202
  }
463723
464203
  let t10;
463724
464204
  if ($5[30] !== iw || $5[31] !== step) {
463725
- t10 = step === "features" && /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV(FeaturesStep, {
464205
+ t10 = step === "intelligence" && /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV(IntelligenceStep, {
463726
464206
  iw
463727
464207
  }, undefined, false, undefined, this);
463728
464208
  $5[30] = iw;
@@ -463733,7 +464213,7 @@ var init_wizard = __esm(async () => {
463733
464213
  }
463734
464214
  let t11;
463735
464215
  if ($5[33] !== iw || $5[34] !== step) {
463736
- t11 = step === "shortcuts" && /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV(ShortcutsStep, {
464216
+ t11 = step === "workflow" && /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV(WorkflowStep, {
463737
464217
  iw
463738
464218
  }, undefined, false, undefined, this);
463739
464219
  $5[33] = iw;
@@ -463743,33 +464223,44 @@ var init_wizard = __esm(async () => {
463743
464223
  t11 = $5[35];
463744
464224
  }
463745
464225
  let t12;
463746
- if ($5[36] !== iw || $5[37] !== setupActive || $5[38] !== step) {
463747
- t12 = step === "theme" && /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV(ThemeStep, {
463748
- iw,
463749
- active: setupActive,
463750
- setActive: setSetupActive
464226
+ if ($5[36] !== iw || $5[37] !== step) {
464227
+ t12 = step === "shortcuts" && /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV(ShortcutsStep, {
464228
+ iw
463751
464229
  }, undefined, false, undefined, this);
463752
464230
  $5[36] = iw;
463753
- $5[37] = setupActive;
463754
- $5[38] = step;
463755
- $5[39] = t12;
464231
+ $5[37] = step;
464232
+ $5[38] = t12;
463756
464233
  } else {
463757
- t12 = $5[39];
464234
+ t12 = $5[38];
463758
464235
  }
463759
464236
  let t13;
463760
- if ($5[40] !== iw || $5[41] !== step) {
463761
- t13 = step === "ready" && /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV(ReadyStep, {
463762
- iw
464237
+ if ($5[39] !== iw || $5[40] !== setupActive || $5[41] !== step) {
464238
+ t13 = step === "theme" && /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV(ThemeStep, {
464239
+ iw,
464240
+ active: setupActive,
464241
+ setActive: setSetupActive
463763
464242
  }, undefined, false, undefined, this);
463764
- $5[40] = iw;
464243
+ $5[39] = iw;
464244
+ $5[40] = setupActive;
463765
464245
  $5[41] = step;
463766
464246
  $5[42] = t13;
463767
464247
  } else {
463768
464248
  t13 = $5[42];
463769
464249
  }
463770
464250
  let t14;
463771
- if ($5[43] !== t10 || $5[44] !== t11 || $5[45] !== t12 || $5[46] !== t13 || $5[47] !== t8 || $5[48] !== t9) {
463772
- t14 = /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("box", {
464251
+ if ($5[43] !== iw || $5[44] !== step) {
464252
+ t14 = step === "ready" && /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV(ReadyStep, {
464253
+ iw
464254
+ }, undefined, false, undefined, this);
464255
+ $5[43] = iw;
464256
+ $5[44] = step;
464257
+ $5[45] = t14;
464258
+ } else {
464259
+ t14 = $5[45];
464260
+ }
464261
+ let t15;
464262
+ if ($5[46] !== t10 || $5[47] !== t11 || $5[48] !== t12 || $5[49] !== t13 || $5[50] !== t14 || $5[51] !== t8 || $5[52] !== t9) {
464263
+ t15 = /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("box", {
463773
464264
  flexDirection: "column",
463774
464265
  flexGrow: 1,
463775
464266
  overflow: "hidden",
@@ -463779,46 +464270,48 @@ var init_wizard = __esm(async () => {
463779
464270
  t10,
463780
464271
  t11,
463781
464272
  t12,
463782
- t13
464273
+ t13,
464274
+ t14
463783
464275
  ]
463784
464276
  }, undefined, true, undefined, this);
463785
- $5[43] = t10;
463786
- $5[44] = t11;
463787
- $5[45] = t12;
463788
- $5[46] = t13;
463789
- $5[47] = t8;
463790
- $5[48] = t9;
463791
- $5[49] = t14;
464277
+ $5[46] = t10;
464278
+ $5[47] = t11;
464279
+ $5[48] = t12;
464280
+ $5[49] = t13;
464281
+ $5[50] = t14;
464282
+ $5[51] = t8;
464283
+ $5[52] = t9;
464284
+ $5[53] = t15;
463792
464285
  } else {
463793
- t14 = $5[49];
464286
+ t15 = $5[53];
463794
464287
  }
463795
- let t15;
463796
- if ($5[50] !== iw) {
463797
- t15 = /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV(Hr2, {
464288
+ let t16;
464289
+ if ($5[54] !== iw) {
464290
+ t16 = /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV(Hr2, {
463798
464291
  iw
463799
464292
  }, undefined, false, undefined, this);
463800
- $5[50] = iw;
463801
- $5[51] = t15;
464293
+ $5[54] = iw;
464294
+ $5[55] = t16;
463802
464295
  } else {
463803
- t15 = $5[51];
464296
+ t16 = $5[55];
463804
464297
  }
463805
- let t16;
463806
- if ($5[52] !== iw || $5[53] !== step || $5[54] !== stepIdx) {
463807
- t16 = /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV(FooterNav, {
464298
+ let t17;
464299
+ if ($5[56] !== iw || $5[57] !== step || $5[58] !== stepIdx) {
464300
+ t17 = /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV(FooterNav, {
463808
464301
  iw,
463809
464302
  stepIdx,
463810
464303
  step
463811
464304
  }, undefined, false, undefined, this);
463812
- $5[52] = iw;
463813
- $5[53] = step;
463814
- $5[54] = stepIdx;
463815
- $5[55] = t16;
464305
+ $5[56] = iw;
464306
+ $5[57] = step;
464307
+ $5[58] = stepIdx;
464308
+ $5[59] = t17;
463816
464309
  } else {
463817
- t16 = $5[55];
464310
+ t17 = $5[59];
463818
464311
  }
463819
- let t17;
463820
- if ($5[56] !== bg2 || $5[57] !== maxH || $5[58] !== pw || $5[59] !== t6.brandAlt || $5[60] !== t14 || $5[61] !== t15 || $5[62] !== t16 || $5[63] !== t62 || $5[64] !== t7) {
463821
- t17 = /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV(Overlay, {
464312
+ let t18;
464313
+ if ($5[60] !== bg2 || $5[61] !== maxH || $5[62] !== pw || $5[63] !== t6.brandAlt || $5[64] !== t15 || $5[65] !== t16 || $5[66] !== t17 || $5[67] !== t62 || $5[68] !== t7) {
464314
+ t18 = /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV(Overlay, {
463822
464315
  children: /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("box", {
463823
464316
  flexDirection: "column",
463824
464317
  borderStyle: "rounded",
@@ -463830,26 +464323,26 @@ var init_wizard = __esm(async () => {
463830
464323
  children: [
463831
464324
  t62,
463832
464325
  t7,
463833
- t14,
463834
464326
  t15,
463835
- t16
464327
+ t16,
464328
+ t17
463836
464329
  ]
463837
464330
  }, undefined, true, undefined, this)
463838
464331
  }, undefined, false, undefined, this);
463839
- $5[56] = bg2;
463840
- $5[57] = maxH;
463841
- $5[58] = pw;
463842
- $5[59] = t6.brandAlt;
463843
- $5[60] = t14;
463844
- $5[61] = t15;
463845
- $5[62] = t16;
463846
- $5[63] = t62;
463847
- $5[64] = t7;
463848
- $5[65] = t17;
464332
+ $5[60] = bg2;
464333
+ $5[61] = maxH;
464334
+ $5[62] = pw;
464335
+ $5[63] = t6.brandAlt;
464336
+ $5[64] = t15;
464337
+ $5[65] = t16;
464338
+ $5[66] = t17;
464339
+ $5[67] = t62;
464340
+ $5[68] = t7;
464341
+ $5[69] = t18;
463849
464342
  } else {
463850
- t17 = $5[65];
464343
+ t18 = $5[69];
463851
464344
  }
463852
- return t17;
464345
+ return t18;
463853
464346
  });
463854
464347
  });
463855
464348
 
@@ -463860,7 +464353,7 @@ var init_FirstRunWizard = __esm(async () => {
463860
464353
 
463861
464354
  // src/components/modals/GitCommitModal.tsx
463862
464355
  function GitCommitModal(t0) {
463863
- const $5 = import_compiler_runtime53.c(109);
464356
+ const $5 = import_compiler_runtime54.c(109);
463864
464357
  const {
463865
464358
  visible,
463866
464359
  cwd: cwd2,
@@ -463875,7 +464368,7 @@ function GitCommitModal(t0) {
463875
464368
  } = useTerminalDimensions();
463876
464369
  const popupWidth = Math.min(MAX_POPUP_WIDTH7, Math.floor(termCols * 0.8));
463877
464370
  const innerW = popupWidth - 2;
463878
- const [message, setMessage] = import_react90.useState("");
464371
+ const [message, setMessage] = import_react91.useState("");
463879
464372
  let t1;
463880
464373
  if ($5[0] === Symbol.for("react.memo_cache_sentinel")) {
463881
464374
  t1 = [];
@@ -463883,7 +464376,7 @@ function GitCommitModal(t0) {
463883
464376
  } else {
463884
464377
  t1 = $5[0];
463885
464378
  }
463886
- const [stagedFiles, setStagedFiles] = import_react90.useState(t1);
464379
+ const [stagedFiles, setStagedFiles] = import_react91.useState(t1);
463887
464380
  let t22;
463888
464381
  if ($5[1] === Symbol.for("react.memo_cache_sentinel")) {
463889
464382
  t22 = [];
@@ -463891,7 +464384,7 @@ function GitCommitModal(t0) {
463891
464384
  } else {
463892
464385
  t22 = $5[1];
463893
464386
  }
463894
- const [modifiedFiles, setModifiedFiles] = import_react90.useState(t22);
464387
+ const [modifiedFiles, setModifiedFiles] = import_react91.useState(t22);
463895
464388
  let t3;
463896
464389
  if ($5[2] === Symbol.for("react.memo_cache_sentinel")) {
463897
464390
  t3 = [];
@@ -463899,10 +464392,10 @@ function GitCommitModal(t0) {
463899
464392
  } else {
463900
464393
  t3 = $5[2];
463901
464394
  }
463902
- const [untrackedFiles, setUntrackedFiles] = import_react90.useState(t3);
463903
- const [diffSummary, setDiffSummary] = import_react90.useState("");
463904
- const [error48, setError] = import_react90.useState(null);
463905
- const [stageAll, setStageAll] = import_react90.useState(false);
464395
+ const [untrackedFiles, setUntrackedFiles] = import_react91.useState(t3);
464396
+ const [diffSummary, setDiffSummary] = import_react91.useState("");
464397
+ const [error48, setError] = import_react91.useState(null);
464398
+ const [stageAll, setStageAll] = import_react91.useState(false);
463906
464399
  let t4;
463907
464400
  let t5;
463908
464401
  if ($5[3] !== cwd2 || $5[4] !== visible) {
@@ -463932,7 +464425,7 @@ function GitCommitModal(t0) {
463932
464425
  t4 = $5[5];
463933
464426
  t5 = $5[6];
463934
464427
  }
463935
- import_react90.useEffect(t4, t5);
464428
+ import_react91.useEffect(t4, t5);
463936
464429
  let t6;
463937
464430
  if ($5[7] !== coAuthor || $5[8] !== cwd2 || $5[9] !== message || $5[10] !== modifiedFiles || $5[11] !== onClose || $5[12] !== onCommitted || $5[13] !== onRefresh || $5[14] !== stageAll || $5[15] !== stagedFiles || $5[16] !== untrackedFiles) {
463938
464431
  t6 = async () => {
@@ -464402,7 +464895,7 @@ function _temp227(prev) {
464402
464895
  return !prev;
464403
464896
  }
464404
464897
  function _temp76() {}
464405
- var import_compiler_runtime53, import_react90, MAX_POPUP_WIDTH7 = 64;
464898
+ var import_compiler_runtime54, import_react91, MAX_POPUP_WIDTH7 = 64;
464406
464899
  var init_GitCommitModal = __esm(async () => {
464407
464900
  init_status();
464408
464901
  init_icons();
@@ -464413,13 +464906,13 @@ var init_GitCommitModal = __esm(async () => {
464413
464906
  init_core4(),
464414
464907
  init_react2()
464415
464908
  ]);
464416
- import_compiler_runtime53 = __toESM(require_compiler_runtime(), 1);
464417
- import_react90 = __toESM(require_react(), 1);
464909
+ import_compiler_runtime54 = __toESM(require_compiler_runtime(), 1);
464910
+ import_react91 = __toESM(require_react(), 1);
464418
464911
  });
464419
464912
 
464420
464913
  // src/components/modals/GitMenu.tsx
464421
464914
  function GitMenu(t0) {
464422
- const $5 = import_compiler_runtime54.c(77);
464915
+ const $5 = import_compiler_runtime55.c(77);
464423
464916
  const {
464424
464917
  visible,
464425
464918
  cwd: cwd2,
@@ -464436,9 +464929,9 @@ function GitMenu(t0) {
464436
464929
  const containerRows = termRows - 2;
464437
464930
  const popupWidth = Math.min(MAX_POPUP_WIDTH8, Math.floor(termCols * 0.8));
464438
464931
  const maxVisible = Math.max(4, Math.floor(containerRows * 0.8) - CHROME_ROWS11);
464439
- const [cursor, setCursor] = import_react92.useState(0);
464440
- const [scrollOffset, setScrollOffset] = import_react92.useState(0);
464441
- const [busy, setBusy] = import_react92.useState(false);
464932
+ const [cursor, setCursor] = import_react93.useState(0);
464933
+ const [scrollOffset, setScrollOffset] = import_react93.useState(0);
464934
+ const [busy, setBusy] = import_react93.useState(false);
464442
464935
  let t1;
464443
464936
  if ($5[0] !== maxVisible) {
464444
464937
  t1 = (next) => {
@@ -464873,7 +465366,7 @@ function GitMenu(t0) {
464873
465366
  function _temp77(e) {
464874
465367
  return `${e.hash} ${e.subject} (${e.date})`;
464875
465368
  }
464876
- var import_compiler_runtime54, import_react92, MAX_POPUP_WIDTH8 = 54, CHROME_ROWS11 = 7, MENU_ITEMS;
465369
+ var import_compiler_runtime55, import_react93, MAX_POPUP_WIDTH8 = 54, CHROME_ROWS11 = 7, MENU_ITEMS;
464877
465370
  var init_GitMenu = __esm(async () => {
464878
465371
  init_status();
464879
465372
  init_icons();
@@ -464884,8 +465377,8 @@ var init_GitMenu = __esm(async () => {
464884
465377
  init_core4(),
464885
465378
  init_react2()
464886
465379
  ]);
464887
- import_compiler_runtime54 = __toESM(require_compiler_runtime(), 1);
464888
- import_react92 = __toESM(require_react(), 1);
465380
+ import_compiler_runtime55 = __toESM(require_compiler_runtime(), 1);
465381
+ import_react93 = __toESM(require_react(), 1);
464889
465382
  MENU_ITEMS = [{
464890
465383
  key: "c",
464891
465384
  label: "Commit",
@@ -464919,7 +465412,7 @@ var init_GitMenu = __esm(async () => {
464919
465412
 
464920
465413
  // src/components/modals/InfoPopup.tsx
464921
465414
  function InfoPopup(t0) {
464922
- const $5 = import_compiler_runtime55.c(81);
465415
+ const $5 = import_compiler_runtime56.c(81);
464923
465416
  const {
464924
465417
  visible,
464925
465418
  config: config2,
@@ -464937,7 +465430,7 @@ function InfoPopup(t0) {
464937
465430
  const labelW = config2?.labelWidth ?? 20;
464938
465431
  const maxVisible = Math.max(6, Math.floor(containerRows * 0.8) - CHROME_ROWS12);
464939
465432
  const maxTextW = innerW - 4;
464940
- const [scrollOffset, setScrollOffset] = import_react94.useState(0);
465433
+ const [scrollOffset, setScrollOffset] = import_react95.useState(0);
464941
465434
  let t1;
464942
465435
  let t22;
464943
465436
  if ($5[0] !== visible) {
@@ -464954,7 +465447,7 @@ function InfoPopup(t0) {
464954
465447
  t1 = $5[1];
464955
465448
  t22 = $5[2];
464956
465449
  }
464957
- import_react94.useEffect(t1, t22);
465450
+ import_react95.useEffect(t1, t22);
464958
465451
  let t3;
464959
465452
  if ($5[3] !== config2 || $5[4] !== maxVisible || $5[5] !== onClose || $5[6] !== visible) {
464960
465453
  t3 = (evt) => {
@@ -465353,7 +465846,7 @@ function _temp228(text3, max) {
465353
465846
  function _temp78(prev) {
465354
465847
  return Math.max(0, prev - 1);
465355
465848
  }
465356
- var import_compiler_runtime55, import_react94, CHROME_ROWS12 = 6;
465849
+ var import_compiler_runtime56, import_react95, CHROME_ROWS12 = 6;
465357
465850
  var init_InfoPopup = __esm(async () => {
465358
465851
  init_theme();
465359
465852
  init_shared2();
@@ -465362,8 +465855,8 @@ var init_InfoPopup = __esm(async () => {
465362
465855
  init_core4(),
465363
465856
  init_react2()
465364
465857
  ]);
465365
- import_compiler_runtime55 = __toESM(require_compiler_runtime(), 1);
465366
- import_react94 = __toESM(require_react(), 1);
465858
+ import_compiler_runtime56 = __toESM(require_compiler_runtime(), 1);
465859
+ import_react95 = __toESM(require_react(), 1);
465367
465860
  });
465368
465861
 
465369
465862
  // src/hooks/useAllProviderModels.ts
@@ -465375,7 +465868,7 @@ function flattenGrouped(r4) {
465375
465868
  return out2;
465376
465869
  }
465377
465870
  function useAllProviderModels(active) {
465378
- const $5 = import_compiler_runtime56.c(8);
465871
+ const $5 = import_compiler_runtime57.c(8);
465379
465872
  let t0;
465380
465873
  if ($5[0] === Symbol.for("react.memo_cache_sentinel")) {
465381
465874
  t0 = {};
@@ -465383,8 +465876,8 @@ function useAllProviderModels(active) {
465383
465876
  } else {
465384
465877
  t0 = $5[0];
465385
465878
  }
465386
- const [providerData, setProviderData] = import_react95.useState(t0);
465387
- const [availability, setAvailability] = import_react95.useState(_temp79);
465879
+ const [providerData, setProviderData] = import_react96.useState(t0);
465880
+ const [availability, setAvailability] = import_react96.useState(_temp79);
465388
465881
  let t1;
465389
465882
  let t2;
465390
465883
  if ($5[1] !== active) {
@@ -465461,7 +465954,7 @@ function useAllProviderModels(active) {
465461
465954
  t1 = $5[2];
465462
465955
  t2 = $5[3];
465463
465956
  }
465464
- import_react95.useEffect(t1, t2);
465957
+ import_react96.useEffect(t1, t2);
465465
465958
  const anyLoading = Object.values(providerData).some(_temp325);
465466
465959
  let t3;
465467
465960
  if ($5[4] !== anyLoading || $5[5] !== availability || $5[6] !== providerData) {
@@ -465498,13 +465991,13 @@ function _temp79() {
465498
465991
  }
465499
465992
  return map2;
465500
465993
  }
465501
- var import_compiler_runtime56, import_react95, ENV_SK;
465994
+ var import_compiler_runtime57, import_react96, ENV_SK;
465502
465995
  var init_useAllProviderModels = __esm(() => {
465503
465996
  init_models();
465504
465997
  init_provider();
465505
465998
  init_secrets();
465506
- import_compiler_runtime56 = __toESM(require_compiler_runtime(), 1);
465507
- import_react95 = __toESM(require_react(), 1);
465999
+ import_compiler_runtime57 = __toESM(require_compiler_runtime(), 1);
466000
+ import_react96 = __toESM(require_react(), 1);
465508
466001
  ENV_SK = {
465509
466002
  ANTHROPIC_API_KEY: "anthropic-api-key",
465510
466003
  OPENAI_API_KEY: "openai-api-key",
@@ -465524,7 +466017,7 @@ function fmtCtx(n) {
465524
466017
  return `${String(Math.round(n / 1e6))}M`;
465525
466018
  return `${String(Math.round(n / 1000))}k`;
465526
466019
  }
465527
- var import_react97, MAX_W2 = 72, LlmSelector;
466020
+ var import_react98, MAX_W2 = 72, LlmSelector;
465528
466021
  var init_LlmSelector = __esm(async () => {
465529
466022
  init_icons();
465530
466023
  init_models();
@@ -465537,8 +466030,8 @@ var init_LlmSelector = __esm(async () => {
465537
466030
  init_core4(),
465538
466031
  init_react2()
465539
466032
  ]);
465540
- import_react97 = __toESM(require_react(), 1);
465541
- LlmSelector = import_react97.memo(function LlmSelector2({
466033
+ import_react98 = __toESM(require_react(), 1);
466034
+ LlmSelector = import_react98.memo(function LlmSelector2({
465542
466035
  visible,
465543
466036
  activeModel,
465544
466037
  onSelect,
@@ -465557,12 +466050,12 @@ var init_LlmSelector = __esm(async () => {
465557
466050
  availability,
465558
466051
  anyLoading
465559
466052
  } = useAllProviderModels(visible);
465560
- const [query2, setQuery] = import_react97.useState("");
465561
- const [cursor, setCursor] = import_react97.useState(0);
465562
- const [scrollOff, setScrollOff] = import_react97.useState(0);
465563
- const [spinFrame, setSpinFrame] = import_react97.useState(0);
465564
- const [collapsed, setCollapsed] = import_react97.useState({});
465565
- import_react97.useEffect(() => {
466053
+ const [query2, setQuery] = import_react98.useState("");
466054
+ const [cursor, setCursor] = import_react98.useState(0);
466055
+ const [scrollOff, setScrollOff] = import_react98.useState(0);
466056
+ const [spinFrame, setSpinFrame] = import_react98.useState(0);
466057
+ const [collapsed, setCollapsed] = import_react98.useState({});
466058
+ import_react98.useEffect(() => {
465566
466059
  if (!visible)
465567
466060
  return;
465568
466061
  setQuery("");
@@ -465575,7 +466068,7 @@ var init_LlmSelector = __esm(async () => {
465575
466068
  }
465576
466069
  setCollapsed(init2);
465577
466070
  }, [visible, activeModel]);
465578
- import_react97.useEffect(() => {
466071
+ import_react98.useEffect(() => {
465579
466072
  if (!anyLoading || !visible)
465580
466073
  return;
465581
466074
  const timer = setInterval(() => {
@@ -465586,7 +466079,7 @@ var init_LlmSelector = __esm(async () => {
465586
466079
  const {
465587
466080
  providerFilter,
465588
466081
  modelFilter
465589
- } = import_react97.useMemo(() => {
466082
+ } = import_react98.useMemo(() => {
465590
466083
  const raw2 = query2.toLowerCase().trim();
465591
466084
  const slashIdx = raw2.indexOf("/");
465592
466085
  if (slashIdx >= 0) {
@@ -465600,7 +466093,7 @@ var init_LlmSelector = __esm(async () => {
465600
466093
  modelFilter: raw2
465601
466094
  };
465602
466095
  }, [query2]);
465603
- const entries2 = import_react97.useMemo(() => {
466096
+ const entries2 = import_react98.useMemo(() => {
465604
466097
  const out2 = [];
465605
466098
  for (const cfg_0 of PROVIDER_CONFIGS) {
465606
466099
  const pd = provData[cfg_0.id];
@@ -465663,7 +466156,7 @@ var init_LlmSelector = __esm(async () => {
465663
466156
  }
465664
466157
  return out2;
465665
466158
  }, [provData, providerFilter, modelFilter, availability]);
465666
- const displayEntries = import_react97.useMemo(() => {
466159
+ const displayEntries = import_react98.useMemo(() => {
465667
466160
  if (query2)
465668
466161
  return entries2;
465669
466162
  return entries2.filter((e) => {
@@ -465672,23 +466165,23 @@ var init_LlmSelector = __esm(async () => {
465672
466165
  return !collapsed[e.providerId];
465673
466166
  });
465674
466167
  }, [entries2, collapsed, query2]);
465675
- const eH = import_react97.useCallback((e_0) => e_0.kind === "model" && e_0.hasDesc ? 2 : 1, []);
465676
- const visualRowCount = import_react97.useMemo(() => {
466168
+ const eH = import_react98.useCallback((e_0) => e_0.kind === "model" && e_0.hasDesc ? 2 : 1, []);
466169
+ const visualRowCount = import_react98.useMemo(() => {
465677
466170
  let count = 0;
465678
466171
  for (const e_1 of displayEntries)
465679
466172
  count += eH(e_1);
465680
466173
  return count;
465681
466174
  }, [displayEntries, eH]);
465682
- const prevDisplayRef = import_react97.useRef(displayEntries);
465683
- const cursorRef = import_react97.useRef(cursor);
466175
+ const prevDisplayRef = import_react98.useRef(displayEntries);
466176
+ const cursorRef = import_react98.useRef(cursor);
465684
466177
  cursorRef.current = cursor;
465685
- const scrollRef = import_react97.useRef(scrollOff);
466178
+ const scrollRef = import_react98.useRef(scrollOff);
465686
466179
  scrollRef.current = scrollOff;
465687
- const displayRef = import_react97.useRef(displayEntries);
466180
+ const displayRef = import_react98.useRef(displayEntries);
465688
466181
  displayRef.current = displayEntries;
465689
- const collapsedRef = import_react97.useRef(collapsed);
466182
+ const collapsedRef = import_react98.useRef(collapsed);
465690
466183
  collapsedRef.current = collapsed;
465691
- const ensureVisible = import_react97.useCallback((idx) => {
466184
+ const ensureVisible = import_react98.useCallback((idx) => {
465692
466185
  const ents = displayRef.current;
465693
466186
  const so = scrollRef.current;
465694
466187
  if (idx < so) {
@@ -465716,7 +466209,7 @@ var init_LlmSelector = __esm(async () => {
465716
466209
  }
465717
466210
  }
465718
466211
  }, [eH, maxVis]);
465719
- import_react97.useEffect(() => {
466212
+ import_react98.useEffect(() => {
465720
466213
  if (displayEntries !== prevDisplayRef.current) {
465721
466214
  const prev = prevDisplayRef.current;
465722
466215
  prevDisplayRef.current = displayEntries;
@@ -465751,7 +466244,7 @@ var init_LlmSelector = __esm(async () => {
465751
466244
  scrollRef.current = 0;
465752
466245
  }
465753
466246
  }, [displayEntries, query2, ensureVisible]);
465754
- const toggleCollapse = import_react97.useCallback((providerId) => {
466247
+ const toggleCollapse = import_react98.useCallback((providerId) => {
465755
466248
  setCollapsed((prev_0) => ({
465756
466249
  ...prev_0,
465757
466250
  [providerId]: !prev_0[providerId]
@@ -466145,7 +466638,7 @@ function lpad(s2, w5) {
466145
466638
  return s2.length >= w5 ? s2.slice(0, w5) : " ".repeat(w5 - s2.length) + s2;
466146
466639
  }
466147
466640
  function SessionPicker(t0) {
466148
- const $5 = import_compiler_runtime57.c(128);
466641
+ const $5 = import_compiler_runtime58.c(128);
466149
466642
  const {
466150
466643
  visible,
466151
466644
  cwd: cwd2,
@@ -466161,9 +466654,9 @@ function SessionPicker(t0) {
466161
466654
  } else {
466162
466655
  t1 = $5[0];
466163
466656
  }
466164
- const [sessions, setSessions] = import_react99.useState(t1);
466165
- const [query2, setQuery] = import_react99.useState("");
466166
- const [confirmClear, setConfirmClear] = import_react99.useState(false);
466657
+ const [sessions, setSessions] = import_react100.useState(t1);
466658
+ const [query2, setQuery] = import_react100.useState("");
466659
+ const [confirmClear, setConfirmClear] = import_react100.useState(false);
466167
466660
  const {
466168
466661
  width: termCols,
466169
466662
  height: termRows
@@ -466221,7 +466714,7 @@ function SessionPicker(t0) {
466221
466714
  t4 = $5[8];
466222
466715
  t5 = $5[9];
466223
466716
  }
466224
- import_react99.useEffect(t4, t5);
466717
+ import_react100.useEffect(t4, t5);
466225
466718
  const filterQuery = query2.toLowerCase().trim();
466226
466719
  const filtered = filterQuery ? sessions.filter((s2) => s2.title.toLowerCase().includes(filterQuery)) : sessions;
466227
466720
  useKeyboard((evt) => {
@@ -466842,7 +467335,7 @@ function _temp230(prev_3) {
466842
467335
  function _temp80(prev_1) {
466843
467336
  return prev_1.slice(0, -1);
466844
467337
  }
466845
- var import_compiler_runtime57, import_react99, POPUP_CHROME = 8, COL_MSGS = 7, COL_SIZE = 7, COL_TIME = 11, COL_FIXED;
467338
+ var import_compiler_runtime58, import_react100, POPUP_CHROME = 8, COL_MSGS = 7, COL_SIZE = 7, COL_TIME = 11, COL_FIXED;
466846
467339
  var init_SessionPicker = __esm(async () => {
466847
467340
  init_icons();
466848
467341
  init_manager4();
@@ -466854,8 +467347,8 @@ var init_SessionPicker = __esm(async () => {
466854
467347
  init_core4(),
466855
467348
  init_react2()
466856
467349
  ]);
466857
- import_compiler_runtime57 = __toESM(require_compiler_runtime(), 1);
466858
- import_react99 = __toESM(require_react(), 1);
467350
+ import_compiler_runtime58 = __toESM(require_compiler_runtime(), 1);
467351
+ import_react100 = __toESM(require_react(), 1);
466859
467352
  COL_FIXED = COL_MSGS + COL_SIZE + COL_TIME + 6;
466860
467353
  });
466861
467354
 
@@ -466878,7 +467371,7 @@ function fmtMem(mb) {
466878
467371
  return mb >= 1024 ? `${(mb / 1024).toFixed(1)} GB` : `${String(mb)} MB`;
466879
467372
  }
466880
467373
  function BarRow(t0) {
466881
- const $5 = import_compiler_runtime58.c(43);
467374
+ const $5 = import_compiler_runtime59.c(43);
466882
467375
  const {
466883
467376
  label,
466884
467377
  pct,
@@ -467037,7 +467530,7 @@ function BarRow(t0) {
467037
467530
  return t13;
467038
467531
  }
467039
467532
  function EntryRow(t0) {
467040
- const $5 = import_compiler_runtime58.c(17);
467533
+ const $5 = import_compiler_runtime59.c(17);
467041
467534
  const {
467042
467535
  label,
467043
467536
  value,
@@ -467117,7 +467610,7 @@ function EntryRow(t0) {
467117
467610
  return t8;
467118
467611
  }
467119
467612
  function SectionHeader(t0) {
467120
- const $5 = import_compiler_runtime58.c(6);
467613
+ const $5 = import_compiler_runtime59.c(6);
467121
467614
  const {
467122
467615
  label,
467123
467616
  color,
@@ -467154,7 +467647,7 @@ function SectionHeader(t0) {
467154
467647
  return t3;
467155
467648
  }
467156
467649
  function Spacer(t0) {
467157
- const $5 = import_compiler_runtime58.c(3);
467650
+ const $5 = import_compiler_runtime59.c(3);
467158
467651
  const {
467159
467652
  innerW
467160
467653
  } = t0;
@@ -467199,22 +467692,22 @@ function StatusDashboard({
467199
467692
  const popupWidth = Math.min(82, Math.floor(termCols * 0.85));
467200
467693
  const innerW = popupWidth - 2;
467201
467694
  const maxVisible = Math.max(6, Math.floor((termRows - 2) * 0.8) - CHROME_ROWS13);
467202
- const [tab, setTab] = import_react101.useState(initialTab ?? "Context");
467695
+ const [tab, setTab] = import_react102.useState(initialTab ?? "Context");
467203
467696
  const TAB_COLORS = {
467204
467697
  Context: t2.info,
467205
467698
  System: t2.brand
467206
467699
  };
467207
- const [scrollOffset, setScrollOffset] = import_react101.useState(0);
467700
+ const [scrollOffset, setScrollOffset] = import_react102.useState(0);
467208
467701
  const sb = useStatusBarStore();
467209
467702
  const rm2 = useRepoMapStore();
467210
467703
  const wk = useWorkerStore();
467211
- import_react101.useEffect(() => {
467704
+ import_react102.useEffect(() => {
467212
467705
  if (visible) {
467213
467706
  setTab(initialTab ?? "Context");
467214
467707
  setScrollOffset(0);
467215
467708
  }
467216
467709
  }, [visible, initialTab]);
467217
- const pollWorkerMemory = import_react101.useCallback(async () => {
467710
+ const pollWorkerMemory = import_react102.useCallback(async () => {
467218
467711
  const store = useWorkerStore.getState();
467219
467712
  try {
467220
467713
  const intel = contextManager.getRepoMap();
@@ -467229,8 +467722,8 @@ function StatusDashboard({
467229
467722
  store.setWorkerMemory("io", Math.round(res_0.heapUsed / 1024 / 1024), Math.round(res_0.rss / 1024 / 1024));
467230
467723
  } catch {}
467231
467724
  }, [contextManager]);
467232
- const pollRef = import_react101.useRef(null);
467233
- import_react101.useEffect(() => {
467725
+ const pollRef = import_react102.useRef(null);
467726
+ import_react102.useEffect(() => {
467234
467727
  if (visible && tab === "System") {
467235
467728
  pollWorkerMemory();
467236
467729
  pollRef.current = setInterval(pollWorkerMemory, 5000);
@@ -467244,7 +467737,7 @@ function StatusDashboard({
467244
467737
  }, [visible, tab, pollWorkerMemory]);
467245
467738
  const modelId = chat?.activeModel ?? "none";
467246
467739
  const tu = sb.tokenUsage;
467247
- const contextLines = import_react101.useMemo(() => {
467740
+ const contextLines = import_react102.useMemo(() => {
467248
467741
  const breakdown = contextManager.getContextBreakdown();
467249
467742
  const systemChars = breakdown.reduce((sum, s2) => sum + s2.chars, 0);
467250
467743
  const ctxWindow = sb.contextWindow > 0 ? sb.contextWindow : getModelContextInfo(modelId).tokens;
@@ -467477,11 +467970,11 @@ function StatusDashboard({
467477
467970
  }
467478
467971
  return lines;
467479
467972
  }, [contextManager, sb.contextWindow, modelId, tu, tabMgr, innerW, sb.chatChars, sb.contextTokens, sb.subagentChars, sb.chatCharsAtSnapshot, t2]);
467480
- const [lspCount, setLspCount] = import_react101.useState(0);
467481
- import_react101.useEffect(() => {
467973
+ const [lspCount, setLspCount] = import_react102.useState(0);
467974
+ import_react102.useEffect(() => {
467482
467975
  getIntelligenceStatus().then((s_4) => setLspCount(s_4?.lspServers.length ?? 0));
467483
467976
  }, []);
467484
- const systemLines = import_react101.useMemo(() => {
467977
+ const systemLines = import_react102.useMemo(() => {
467485
467978
  const rssMB = sb.rssMB;
467486
467979
  const memColor = rssMB < 2048 ? t2.success : rssMB < 4096 ? t2.amber : t2.error;
467487
467980
  const lines_0 = [];
@@ -467806,7 +468299,7 @@ function StatusDashboard({
467806
468299
  }, undefined, true, undefined, this)
467807
468300
  }, undefined, false, undefined, this);
467808
468301
  }
467809
- var import_compiler_runtime58, import_react101, CHROME_ROWS13 = 6, TABS;
468302
+ var import_compiler_runtime59, import_react102, CHROME_ROWS13 = 6, TABS;
467810
468303
  var init_StatusDashboard = __esm(async () => {
467811
468304
  init_instance();
467812
468305
  init_icons();
@@ -467824,8 +468317,8 @@ var init_StatusDashboard = __esm(async () => {
467824
468317
  init_core4(),
467825
468318
  init_react2()
467826
468319
  ]);
467827
- import_compiler_runtime58 = __toESM(require_compiler_runtime(), 1);
467828
- import_react101 = __toESM(require_react(), 1);
468320
+ import_compiler_runtime59 = __toESM(require_compiler_runtime(), 1);
468321
+ import_react102 = __toESM(require_react(), 1);
467829
468322
  TABS = ["Context", "System"];
467830
468323
  });
467831
468324
 
@@ -467834,7 +468327,7 @@ function trunc(s2, max) {
467834
468327
  return s2.length > max ? `${s2.slice(0, max - 1)}\u2026` : s2;
467835
468328
  }
467836
468329
  function Hr4(t0) {
467837
- const $5 = import_compiler_runtime59.c(9);
468330
+ const $5 = import_compiler_runtime60.c(9);
467838
468331
  const {
467839
468332
  w: w5,
467840
468333
  bg: bg2,
@@ -467877,7 +468370,7 @@ function Hr4(t0) {
467877
468370
  return t3;
467878
468371
  }
467879
468372
  function Gap3(t0) {
467880
- const $5 = import_compiler_runtime59.c(4);
468373
+ const $5 = import_compiler_runtime60.c(4);
467881
468374
  const {
467882
468375
  w: w5,
467883
468376
  bg: bg2,
@@ -467909,7 +468402,7 @@ function Gap3(t0) {
467909
468402
  return t2;
467910
468403
  }
467911
468404
  function UpdateModal(t0) {
467912
- const $5 = import_compiler_runtime59.c(569);
468405
+ const $5 = import_compiler_runtime60.c(569);
467913
468406
  const {
467914
468407
  visible,
467915
468408
  onClose,
@@ -467927,10 +468420,10 @@ function UpdateModal(t0) {
467927
468420
  installMethod,
467928
468421
  updateAvailable
467929
468422
  } = useVersionStore();
467930
- const [copied, setCopied] = import_react103.useState(false);
467931
- const [phase, setPhase] = import_react103.useState("info");
467932
- const [quipIdx, setQuipIdx] = import_react103.useState(0);
467933
- const [spinIdx, setSpinIdx] = import_react103.useState(0);
468423
+ const [copied, setCopied] = import_react104.useState(false);
468424
+ const [phase, setPhase] = import_react104.useState("info");
468425
+ const [quipIdx, setQuipIdx] = import_react104.useState(0);
468426
+ const [spinIdx, setSpinIdx] = import_react104.useState(0);
467934
468427
  let t1;
467935
468428
  if ($5[0] === Symbol.for("react.memo_cache_sentinel")) {
467936
468429
  t1 = [];
@@ -467938,11 +468431,11 @@ function UpdateModal(t0) {
467938
468431
  } else {
467939
468432
  t1 = $5[0];
467940
468433
  }
467941
- const [logLines, setLogLines] = import_react103.useState(t1);
467942
- const [errorMsg, setErrorMsg] = import_react103.useState("");
467943
- const upgrading = import_react103.useRef(false);
467944
- const [tick, setTick] = import_react103.useState(0);
467945
- const prevVisible = import_react103.useRef(false);
468434
+ const [logLines, setLogLines] = import_react104.useState(t1);
468435
+ const [errorMsg, setErrorMsg] = import_react104.useState("");
468436
+ const upgrading = import_react104.useRef(false);
468437
+ const [tick, setTick] = import_react104.useState(0);
468438
+ const prevVisible = import_react104.useRef(false);
467946
468439
  let t22;
467947
468440
  let t3;
467948
468441
  if ($5[1] !== visible) {
@@ -467961,7 +468454,7 @@ function UpdateModal(t0) {
467961
468454
  t22 = $5[2];
467962
468455
  t3 = $5[3];
467963
468456
  }
467964
- import_react103.useEffect(t22, t3);
468457
+ import_react104.useEffect(t22, t3);
467965
468458
  let t4;
467966
468459
  let t5;
467967
468460
  if ($5[4] !== tick || $5[5] !== visible) {
@@ -467981,7 +468474,7 @@ function UpdateModal(t0) {
467981
468474
  t4 = $5[6];
467982
468475
  t5 = $5[7];
467983
468476
  }
467984
- import_react103.useEffect(t4, t5);
468477
+ import_react104.useEffect(t4, t5);
467985
468478
  const pw = Math.min(60, Math.floor(termCols * 0.85));
467986
468479
  const iw = pw - 2;
467987
468480
  const maxChangelog = Math.max(3, Math.floor(termRows * 0.3) - 8);
@@ -468008,7 +468501,7 @@ function UpdateModal(t0) {
468008
468501
  t6 = $5[9];
468009
468502
  t7 = $5[10];
468010
468503
  }
468011
- import_react103.useEffect(t6, t7);
468504
+ import_react104.useEffect(t6, t7);
468012
468505
  let t8;
468013
468506
  if ($5[11] !== installMethod) {
468014
468507
  t8 = async () => {
@@ -470519,7 +471012,7 @@ function _temp231(i4) {
470519
471012
  function _temp81(prev) {
470520
471013
  return prev + 1;
470521
471014
  }
470522
- var import_compiler_runtime59, import_react103, UPGRADE_QUIPS, LATEST_QUIPS, SPINNER2, GHOST_FADE, WISP, MAX_LOG = 50, BOLD4, ITALIC3, DIM3;
471015
+ var import_compiler_runtime60, import_react104, UPGRADE_QUIPS, LATEST_QUIPS, SPINNER2, GHOST_FADE, WISP, MAX_LOG = 50, BOLD4, ITALIC3, DIM3;
470523
471016
  var init_UpdateModal = __esm(async () => {
470524
471017
  init_icons();
470525
471018
  init_theme();
@@ -470532,8 +471025,8 @@ var init_UpdateModal = __esm(async () => {
470532
471025
  init_core4(),
470533
471026
  init_react2()
470534
471027
  ]);
470535
- import_compiler_runtime59 = __toESM(require_compiler_runtime(), 1);
470536
- import_react103 = __toESM(require_react(), 1);
471028
+ import_compiler_runtime60 = __toESM(require_compiler_runtime(), 1);
471029
+ import_react104 = __toESM(require_react(), 1);
470537
471030
  UPGRADE_QUIPS = ["Heating the forge\u2026", "Melting down the old version\u2026", "Pouring molten code into the mold\u2026", "Hammering out the bugs\u2026", "Quenching in liquid nitrogen\u2026", "Polishing the new blade\u2026", "Enchanting with fresh runes\u2026", "Consulting the package spirits\u2026", "Negotiating with the registry gods\u2026", "Bribing the dependency elves\u2026", "Aligning the semantic versions\u2026", "Reticulating splines\u2026", "Convincing npm to cooperate\u2026", "Performing arcane rituals\u2026", "Almost there, forgemaster\u2026"];
470538
471031
  LATEST_QUIPS = ["The forge burns bright \u2014 you're on the cutting edge.", "No updates. The blade is already sharp.", "You're running the latest. The gods are pleased.", "Peak version achieved. Nothing to see here.", "Already forged to perfection.", "The scrolls confirm: you're up to date.", "No new runes to inscribe today.", "Your version is so fresh it's still warm."];
470539
471032
  SPINNER2 = ["\u280B", "\u2819", "\u2839", "\u2838", "\u283C", "\u2834", "\u2826", "\u2827", "\u2807", "\u280F"];
@@ -470553,7 +471046,7 @@ function getAgentAccessColors(t2) {
470553
471046
  };
470554
471047
  }
470555
471048
  function EditorSettings(t0) {
470556
- const $5 = import_compiler_runtime60.c(107);
471049
+ const $5 = import_compiler_runtime61.c(107);
470557
471050
  const {
470558
471051
  visible,
470559
471052
  settings,
@@ -470575,7 +471068,7 @@ function EditorSettings(t0) {
470575
471068
  scrollOffset,
470576
471069
  adjustScroll
470577
471070
  } = usePopupScroll(maxVisible);
470578
- const [scope, setScope] = import_react105.useState(initialScope ?? "project");
471071
+ const [scope, setScope] = import_react106.useState(initialScope ?? "project");
470579
471072
  const t2 = useTheme();
470580
471073
  const current = settings ?? ALL_ON;
470581
471074
  let t1;
@@ -470595,7 +471088,7 @@ function EditorSettings(t0) {
470595
471088
  t1 = $5[2];
470596
471089
  t22 = $5[3];
470597
471090
  }
470598
- import_react105.useEffect(t1, t22);
471091
+ import_react106.useEffect(t1, t22);
470599
471092
  let t3;
470600
471093
  if ($5[4] !== adjustScroll || $5[5] !== current || $5[6] !== cursor || $5[7] !== onClose || $5[8] !== onUpdate || $5[9] !== scope || $5[10] !== setCursor || $5[11] !== visible) {
470601
471094
  t3 = (evt) => {
@@ -471103,7 +471596,7 @@ function EditorSettings(t0) {
471103
471596
  }
471104
471597
  return t32;
471105
471598
  }
471106
- var import_compiler_runtime60, import_react105, AGENT_ACCESS_MODES, AGENT_ACCESS_LABELS, MAX_POPUP_WIDTH9 = 70, CHROME_ROWS14 = 8, ITEMS, ALL_ON, ALL_OFF;
471599
+ var import_compiler_runtime61, import_react106, AGENT_ACCESS_MODES, AGENT_ACCESS_LABELS, MAX_POPUP_WIDTH9 = 70, CHROME_ROWS14 = 8, ITEMS, ALL_ON, ALL_OFF;
471107
471600
  var init_EditorSettings = __esm(async () => {
471108
471601
  init_theme();
471109
471602
  init_usePopupScroll();
@@ -471113,8 +471606,8 @@ var init_EditorSettings = __esm(async () => {
471113
471606
  init_core4(),
471114
471607
  init_react2()
471115
471608
  ]);
471116
- import_compiler_runtime60 = __toESM(require_compiler_runtime(), 1);
471117
- import_react105 = __toESM(require_react(), 1);
471609
+ import_compiler_runtime61 = __toESM(require_compiler_runtime(), 1);
471610
+ import_react106 = __toESM(require_react(), 1);
471118
471611
  AGENT_ACCESS_MODES = ["on", "off", "when-open"];
471119
471612
  AGENT_ACCESS_LABELS = {
471120
471613
  on: "Always",
@@ -471802,7 +472295,7 @@ function langLabel(pkg) {
471802
472295
  return pkg.languages.join(", ");
471803
472296
  return `${pkg.languages.slice(0, 2).join(", ")} +${pkg.languages.length - 2}`;
471804
472297
  }
471805
- var import_react107, MAX_POPUP_WIDTH10 = 110, CHROME_ROWS15 = 10, TABS2, TAB_LABELS, CATEGORY_FILTERS, LspInstallSearch;
472298
+ var import_react108, MAX_POPUP_WIDTH10 = 110, CHROME_ROWS15 = 10, TABS2, TAB_LABELS, CATEGORY_FILTERS, LspInstallSearch;
471806
472299
  var init_LspInstallSearch = __esm(async () => {
471807
472300
  init_installer();
471808
472301
  init_server_registry();
@@ -471814,7 +472307,7 @@ var init_LspInstallSearch = __esm(async () => {
471814
472307
  init_core4(),
471815
472308
  init_react2()
471816
472309
  ]);
471817
- import_react107 = __toESM(require_react(), 1);
472310
+ import_react108 = __toESM(require_react(), 1);
471818
472311
  TABS2 = ["search", "installed", "disabled", "recommended"];
471819
472312
  TAB_LABELS = {
471820
472313
  search: "Search",
@@ -471823,7 +472316,7 @@ var init_LspInstallSearch = __esm(async () => {
471823
472316
  recommended: "Recommended"
471824
472317
  };
471825
472318
  CATEGORY_FILTERS = ["All", "LSP", "Formatter", "Linter", "DAP"];
471826
- LspInstallSearch = import_react107.memo(function LspInstallSearch2({
472319
+ LspInstallSearch = import_react108.memo(function LspInstallSearch2({
471827
472320
  visible,
471828
472321
  cwd: cwd2,
471829
472322
  onClose,
@@ -471834,18 +472327,18 @@ var init_LspInstallSearch = __esm(async () => {
471834
472327
  initialTab = "installed"
471835
472328
  }) {
471836
472329
  const t2 = useTheme();
471837
- const [tab, setTab] = import_react107.useState(initialTab);
471838
- const [query2, setQuery] = import_react107.useState("");
471839
- const [categoryFilter, setCategoryFilter] = import_react107.useState("All");
471840
- const [allStatus, setAllStatus] = import_react107.useState([]);
471841
- const [recommended, setRecommended] = import_react107.useState([]);
471842
- const [installing, setInstalling] = import_react107.useState(false);
471843
- const [registryLoaded, setRegistryLoaded] = import_react107.useState(false);
471844
- const [registryLoading, setRegistryLoading] = import_react107.useState(false);
471845
- const [pendingToggle, setPendingToggle] = import_react107.useState(null);
472330
+ const [tab, setTab] = import_react108.useState(initialTab);
472331
+ const [query2, setQuery] = import_react108.useState("");
472332
+ const [categoryFilter, setCategoryFilter] = import_react108.useState("All");
472333
+ const [allStatus, setAllStatus] = import_react108.useState([]);
472334
+ const [recommended, setRecommended] = import_react108.useState([]);
472335
+ const [installing, setInstalling] = import_react108.useState(false);
472336
+ const [registryLoaded, setRegistryLoaded] = import_react108.useState(false);
472337
+ const [registryLoading, setRegistryLoading] = import_react108.useState(false);
472338
+ const [pendingToggle, setPendingToggle] = import_react108.useState(null);
471846
472339
  const defaultScopeCursor = detectScope("disabledLspServers") === "project" ? 0 : 1;
471847
- const [scopeCursor, setScopeCursor] = import_react107.useState(defaultScopeCursor);
471848
- const downloadAttemptedRef = import_react107.useRef(false);
472340
+ const [scopeCursor, setScopeCursor] = import_react108.useState(defaultScopeCursor);
472341
+ const downloadAttemptedRef = import_react108.useRef(false);
471849
472342
  const isInProject = existsSync34(join46(cwd2, ".git"));
471850
472343
  const {
471851
472344
  width: termCols,
@@ -471862,7 +472355,7 @@ var init_LspInstallSearch = __esm(async () => {
471862
472355
  adjustScroll,
471863
472356
  resetScroll
471864
472357
  } = usePopupScroll(maxVisible);
471865
- const refreshAll = import_react107.useCallback(async () => {
472358
+ const refreshAll = import_react108.useCallback(async () => {
471866
472359
  setRegistryLoading(true);
471867
472360
  await new Promise((r4) => setTimeout(r4, 16));
471868
472361
  const statuses = getAllPackageStatus();
@@ -471871,7 +472364,7 @@ var init_LspInstallSearch = __esm(async () => {
471871
472364
  setRecommended(getRecommendedPackages(cwd2));
471872
472365
  setRegistryLoading(false);
471873
472366
  }, [cwd2]);
471874
- import_react107.useEffect(() => {
472367
+ import_react108.useEffect(() => {
471875
472368
  if (!visible)
471876
472369
  return;
471877
472370
  setTab(initialTab);
@@ -471894,7 +472387,7 @@ var init_LspInstallSearch = __esm(async () => {
471894
472387
  }
471895
472388
  }, [visible, refreshAll, onSystemMessage, resetScroll, initialTab]);
471896
472389
  const filterQuery = query2.toLowerCase().trim();
471897
- const filteredList = import_react107.useMemo(() => {
472390
+ const filteredList = import_react108.useMemo(() => {
471898
472391
  let list = allStatus;
471899
472392
  if (categoryFilter !== "All") {
471900
472393
  list = list.filter((s2) => s2.pkg.categories.includes(categoryFilter));
@@ -471904,21 +472397,21 @@ var init_LspInstallSearch = __esm(async () => {
471904
472397
  }
471905
472398
  return list;
471906
472399
  }, [allStatus, categoryFilter, filterQuery]);
471907
- const installedList = import_react107.useMemo(() => {
472400
+ const installedList = import_react108.useMemo(() => {
471908
472401
  let list_0 = allStatus.filter((s_1) => s_1.installed);
471909
472402
  if (filterQuery) {
471910
472403
  list_0 = list_0.filter((s_2) => s_2.pkg.name.toLowerCase().includes(filterQuery) || s_2.pkg.languages.some((l_0) => l_0.toLowerCase().includes(filterQuery)));
471911
472404
  }
471912
472405
  return list_0;
471913
472406
  }, [allStatus, filterQuery]);
471914
- const disabledList = import_react107.useMemo(() => {
472407
+ const disabledList = import_react108.useMemo(() => {
471915
472408
  let list_1 = allStatus.filter((s_3) => disabledServers.includes(s_3.pkg.name));
471916
472409
  if (filterQuery) {
471917
472410
  list_1 = list_1.filter((s_4) => s_4.pkg.name.toLowerCase().includes(filterQuery) || s_4.pkg.languages.some((l_1) => l_1.toLowerCase().includes(filterQuery)));
471918
472411
  }
471919
472412
  return list_1;
471920
472413
  }, [allStatus, disabledServers, filterQuery]);
471921
- const filteredRecommended = import_react107.useMemo(() => {
472414
+ const filteredRecommended = import_react108.useMemo(() => {
471922
472415
  if (!filterQuery)
471923
472416
  return recommended;
471924
472417
  return recommended.filter((s_5) => s_5.pkg.name.toLowerCase().includes(filterQuery) || s_5.pkg.languages.some((l_2) => l_2.toLowerCase().includes(filterQuery)));
@@ -472547,7 +473040,7 @@ function detectInitialScope(project) {
472547
473040
  return "global";
472548
473041
  }
472549
473042
  function ProviderSettings(t0) {
472550
- const $5 = import_compiler_runtime61.c(126);
473043
+ const $5 = import_compiler_runtime62.c(126);
472551
473044
  const {
472552
473045
  visible,
472553
473046
  globalConfig: globalConfig2,
@@ -472564,7 +473057,7 @@ function ProviderSettings(t0) {
472564
473057
  const innerW = popupWidth - 2;
472565
473058
  const maxVisible = Math.max(4, Math.floor(containerRows * 0.8) - CHROME_ROWS16);
472566
473059
  const t2 = useTheme();
472567
- const [tab, setTab] = import_react109.useState("claude");
473060
+ const [tab, setTab] = import_react110.useState("claude");
472568
473061
  const {
472569
473062
  cursor,
472570
473063
  setCursor,
@@ -472580,7 +473073,7 @@ function ProviderSettings(t0) {
472580
473073
  } else {
472581
473074
  t1 = $5[1];
472582
473075
  }
472583
- const [scope, setScope] = import_react109.useState(t1);
473076
+ const [scope, setScope] = import_react110.useState(t1);
472584
473077
  let t22;
472585
473078
  if ($5[2] !== globalConfig2 || $5[3] !== projectConfig) {
472586
473079
  t22 = effectiveValues(globalConfig2, projectConfig);
@@ -472610,7 +473103,7 @@ function ProviderSettings(t0) {
472610
473103
  t3 = $5[7];
472611
473104
  t4 = $5[8];
472612
473105
  }
472613
- import_react109.useEffect(t3, t4);
473106
+ import_react110.useEffect(t3, t4);
472614
473107
  let t5;
472615
473108
  if ($5[9] !== resetScroll) {
472616
473109
  t5 = () => {
@@ -472630,7 +473123,7 @@ function ProviderSettings(t0) {
472630
473123
  } else {
472631
473124
  t6 = $5[13];
472632
473125
  }
472633
- import_react109.useEffect(t5, t6);
473126
+ import_react110.useEffect(t5, t6);
472634
473127
  const isBudgetDisabled = vals.thinkingMode !== "enabled";
472635
473128
  let t7;
472636
473129
  if ($5[14] !== isBudgetDisabled || $5[15] !== onUpdate || $5[16] !== scope || $5[17] !== vals) {
@@ -473165,7 +473658,7 @@ function ProviderSettings(t0) {
473165
473658
  }
473166
473659
  return t33;
473167
473660
  }
473168
- var import_compiler_runtime61, import_react109, MAX_POPUP_WIDTH11 = 78, CHROME_ROWS16 = 7, TABS3, TAB_LABELS2, TAB_ICONS, CLAUDE_ITEMS, OPENAI_ITEMS, GENERAL_ITEMS, TAB_ITEMS, DEFAULTS;
473661
+ var import_compiler_runtime62, import_react110, MAX_POPUP_WIDTH11 = 78, CHROME_ROWS16 = 7, TABS3, TAB_LABELS2, TAB_ICONS, CLAUDE_ITEMS, OPENAI_ITEMS, GENERAL_ITEMS, TAB_ITEMS, DEFAULTS;
473169
473662
  var init_ProviderSettings = __esm(async () => {
473170
473663
  init_icons();
473171
473664
  init_theme();
@@ -473176,8 +473669,8 @@ var init_ProviderSettings = __esm(async () => {
473176
473669
  init_core4(),
473177
473670
  init_react2()
473178
473671
  ]);
473179
- import_compiler_runtime61 = __toESM(require_compiler_runtime(), 1);
473180
- import_react109 = __toESM(require_react(), 1);
473672
+ import_compiler_runtime62 = __toESM(require_compiler_runtime(), 1);
473673
+ import_react110 = __toESM(require_react(), 1);
473181
473674
  TABS3 = ["claude", "openai", "general"];
473182
473675
  TAB_LABELS2 = {
473183
473676
  claude: "Claude",
@@ -473342,19 +473835,19 @@ function RepoMapStatusPopup({
473342
473835
  } = useTerminalDimensions();
473343
473836
  const popupWidth = Math.min(POPUP_W, Math.floor(termCols * 0.8));
473344
473837
  const innerW = popupWidth - 2;
473345
- const stateRef = import_react111.useRef(useRepoMapStore.getState());
473346
- const [, setRenderTick] = import_react111.useState(0);
473347
- const spinnerRef = import_react111.useRef(0);
473838
+ const stateRef = import_react112.useRef(useRepoMapStore.getState());
473839
+ const [, setRenderTick] = import_react112.useState(0);
473840
+ const spinnerRef = import_react112.useRef(0);
473348
473841
  const initialMode = currentMode ?? "off";
473349
473842
  const initialLimit = currentLimit ?? 300;
473350
- const [selectedMode, setSelectedMode] = import_react111.useState(initialMode);
473351
- const [selectedLimit, setSelectedLimit] = import_react111.useState(initialLimit);
473352
- const [selectedAutoRegen, setSelectedAutoRegen] = import_react111.useState(currentAutoRegen ?? false);
473353
- const [selectedTokenBudget, setSelectedTokenBudget] = import_react111.useState(currentTokenBudget);
473354
- const [selectedScope, setSelectedScope] = import_react111.useState(currentScope ?? "project");
473355
- const [focusRow, setFocusRow] = import_react111.useState(0 /* Mode */);
473356
- const [confirmClear, setConfirmClear] = import_react111.useState(false);
473357
- import_react111.useEffect(() => {
473843
+ const [selectedMode, setSelectedMode] = import_react112.useState(initialMode);
473844
+ const [selectedLimit, setSelectedLimit] = import_react112.useState(initialLimit);
473845
+ const [selectedAutoRegen, setSelectedAutoRegen] = import_react112.useState(currentAutoRegen ?? false);
473846
+ const [selectedTokenBudget, setSelectedTokenBudget] = import_react112.useState(currentTokenBudget);
473847
+ const [selectedScope, setSelectedScope] = import_react112.useState(currentScope ?? "project");
473848
+ const [focusRow, setFocusRow] = import_react112.useState(0 /* Mode */);
473849
+ const [confirmClear, setConfirmClear] = import_react112.useState(false);
473850
+ import_react112.useEffect(() => {
473358
473851
  if (!visible)
473359
473852
  return;
473360
473853
  setSelectedMode(currentMode ?? "off");
@@ -473365,7 +473858,7 @@ function RepoMapStatusPopup({
473365
473858
  setFocusRow(0 /* Mode */);
473366
473859
  setConfirmClear(false);
473367
473860
  }, [visible, currentMode, currentLimit, currentAutoRegen, currentTokenBudget, currentScope]);
473368
- import_react111.useEffect(() => {
473861
+ import_react112.useEffect(() => {
473369
473862
  if (!visible)
473370
473863
  return;
473371
473864
  stateRef.current = useRepoMapStore.getState();
@@ -473375,7 +473868,7 @@ function RepoMapStatusPopup({
473375
473868
  setRenderTick((n_0) => n_0 + 1);
473376
473869
  });
473377
473870
  }, [visible]);
473378
- import_react111.useEffect(() => {
473871
+ import_react112.useEffect(() => {
473379
473872
  if (!visible)
473380
473873
  return;
473381
473874
  const timer = setInterval(() => {
@@ -473974,7 +474467,7 @@ function RepoMapStatusPopup({
473974
474467
  }, undefined, true, undefined, this)
473975
474468
  }, undefined, false, undefined, this);
473976
474469
  }
473977
- var import_react111, LABEL_W = 18, POPUP_W = 72, SEMANTIC_MODES, MODE_DESCRIPTIONS, MODE_LABELS2, LLM_LIMIT_PRESETS, TOKEN_BUDGET_PRESETS;
474470
+ var import_react112, LABEL_W = 18, POPUP_W = 72, SEMANTIC_MODES, MODE_DESCRIPTIONS, MODE_LABELS2, LLM_LIMIT_PRESETS, TOKEN_BUDGET_PRESETS;
473978
474471
  var init_RepoMapStatusPopup = __esm(async () => {
473979
474472
  init_icons();
473980
474473
  init_theme();
@@ -473985,7 +474478,7 @@ var init_RepoMapStatusPopup = __esm(async () => {
473985
474478
  init_core4(),
473986
474479
  init_react2()
473987
474480
  ]);
473988
- import_react111 = __toESM(require_react(), 1);
474481
+ import_react112 = __toESM(require_react(), 1);
473989
474482
  SEMANTIC_MODES = ["off", "ast", "synthetic", "llm", "full"];
473990
474483
  MODE_DESCRIPTIONS = {
473991
474484
  off: "disabled",
@@ -474007,7 +474500,7 @@ var init_RepoMapStatusPopup = __esm(async () => {
474007
474500
 
474008
474501
  // src/components/settings/RouterSettings.tsx
474009
474502
  function RouterSettings(t0) {
474010
- const $5 = import_compiler_runtime62.c(100);
474503
+ const $5 = import_compiler_runtime63.c(100);
474011
474504
  const {
474012
474505
  visible,
474013
474506
  router: router2,
@@ -474505,7 +474998,7 @@ function RouterSettings(t0) {
474505
474998
  }
474506
474999
  return t31;
474507
475000
  }
474508
- var import_compiler_runtime62, import_react113, MAX_POPUP_WIDTH12 = 76, CHROME_ROWS17 = 12, ROWS, SELECTABLE, SectionHeader2, SlotRowView;
475001
+ var import_compiler_runtime63, import_react114, MAX_POPUP_WIDTH12 = 76, CHROME_ROWS17 = 12, ROWS, SELECTABLE, SectionHeader2, SlotRowView;
474509
475002
  var init_RouterSettings = __esm(async () => {
474510
475003
  init_icons();
474511
475004
  init_theme();
@@ -474516,8 +475009,8 @@ var init_RouterSettings = __esm(async () => {
474516
475009
  init_core4(),
474517
475010
  init_react2()
474518
475011
  ]);
474519
- import_compiler_runtime62 = __toESM(require_compiler_runtime(), 1);
474520
- import_react113 = __toESM(require_react(), 1);
475012
+ import_compiler_runtime63 = __toESM(require_compiler_runtime(), 1);
475013
+ import_react114 = __toESM(require_react(), 1);
474521
475014
  ROWS = [
474522
475015
  {
474523
475016
  kind: "section",
@@ -474597,8 +475090,8 @@ var init_RouterSettings = __esm(async () => {
474597
475090
  });
474598
475091
  return acc;
474599
475092
  }, []);
474600
- SectionHeader2 = import_react113.memo(function SectionHeader3(t0) {
474601
- const $5 = import_compiler_runtime62.c(25);
475093
+ SectionHeader2 = import_react114.memo(function SectionHeader3(t0) {
475094
+ const $5 = import_compiler_runtime63.c(25);
474602
475095
  const {
474603
475096
  title,
474604
475097
  subtitle,
@@ -474725,8 +475218,8 @@ var init_RouterSettings = __esm(async () => {
474725
475218
  }
474726
475219
  return t10;
474727
475220
  });
474728
- SlotRowView = import_react113.memo(function SlotRowView2(t0) {
474729
- const $5 = import_compiler_runtime62.c(25);
475221
+ SlotRowView = import_react114.memo(function SlotRowView2(t0) {
475222
+ const $5 = import_compiler_runtime63.c(25);
474730
475223
  const {
474731
475224
  slot,
474732
475225
  modelId,
@@ -474838,7 +475331,7 @@ var init_RouterSettings = __esm(async () => {
474838
475331
  // src/components/settings/SkillSearch.tsx
474839
475332
  import { existsSync as existsSync35 } from "fs";
474840
475333
  import { join as join47 } from "path";
474841
- var import_react115, MAX_POPUP_WIDTH13 = 100, CHROME_ROWS18 = 9, TABS4, TAB_LABELS3, SkillSearch;
475334
+ var import_react116, MAX_POPUP_WIDTH13 = 100, CHROME_ROWS18 = 9, TABS4, TAB_LABELS3, SkillSearch;
474842
475335
  var init_SkillSearch = __esm(async () => {
474843
475336
  init_manager2();
474844
475337
  init_theme();
@@ -474849,33 +475342,31 @@ var init_SkillSearch = __esm(async () => {
474849
475342
  init_core4(),
474850
475343
  init_react2()
474851
475344
  ]);
474852
- import_react115 = __toESM(require_react(), 1);
475345
+ import_react116 = __toESM(require_react(), 1);
474853
475346
  TABS4 = ["search", "installed", "active"];
474854
475347
  TAB_LABELS3 = {
474855
475348
  search: "Search",
474856
475349
  installed: "Installed",
474857
475350
  active: "Active"
474858
475351
  };
474859
- SkillSearch = import_react115.memo(function SkillSearch2({
475352
+ SkillSearch = import_react116.memo(function SkillSearch2({
474860
475353
  visible,
474861
475354
  contextManager,
474862
- agentSkillsEnabled,
474863
- onToggleAgentSkills,
474864
475355
  onClose,
474865
475356
  onSystemMessage
474866
475357
  }) {
474867
475358
  const t2 = useTheme();
474868
- const [tab, setTab] = import_react115.useState("search");
474869
- const [query2, setQuery] = import_react115.useState("");
474870
- const [popular, setPopular] = import_react115.useState([]);
474871
- const [results, setResults] = import_react115.useState([]);
474872
- const [installed, setInstalled] = import_react115.useState([]);
474873
- const [activeSkills, setActiveSkills] = import_react115.useState([]);
474874
- const [searching, setSearching] = import_react115.useState(false);
474875
- const [installing, setInstalling] = import_react115.useState(false);
474876
- const [pendingInstall, setPendingInstall] = import_react115.useState(null);
474877
- const [scopeCursor, setScopeCursor] = import_react115.useState(0);
474878
- const debounceRef = import_react115.useRef(null);
475359
+ const [tab, setTab] = import_react116.useState("search");
475360
+ const [query2, setQuery] = import_react116.useState("");
475361
+ const [popular, setPopular] = import_react116.useState([]);
475362
+ const [results, setResults] = import_react116.useState([]);
475363
+ const [installed, setInstalled] = import_react116.useState([]);
475364
+ const [activeSkills, setActiveSkills] = import_react116.useState([]);
475365
+ const [searching, setSearching] = import_react116.useState(false);
475366
+ const [installing, setInstalling] = import_react116.useState(false);
475367
+ const [pendingInstall, setPendingInstall] = import_react116.useState(null);
475368
+ const [scopeCursor, setScopeCursor] = import_react116.useState(0);
475369
+ const debounceRef = import_react116.useRef(null);
474879
475370
  const isInProject = existsSync35(join47(process.cwd(), ".git"));
474880
475371
  const {
474881
475372
  width: termCols,
@@ -474897,13 +475388,13 @@ var init_SkillSearch = __esm(async () => {
474897
475388
  const filteredInstalled = filterQuery ? installed.filter((s_0) => s_0.name.toLowerCase().includes(filterQuery)) : installed;
474898
475389
  const filteredActive = filterQuery ? activeSkills.filter((s_1) => s_1.toLowerCase().includes(filterQuery)) : activeSkills;
474899
475390
  const displayResults = query2.trim() ? results : popular;
474900
- const refreshInstalled = import_react115.useCallback(() => {
475391
+ const refreshInstalled = import_react116.useCallback(() => {
474901
475392
  setInstalled(listInstalledSkills());
474902
475393
  }, []);
474903
- const refreshActive = import_react115.useCallback(() => {
475394
+ const refreshActive = import_react116.useCallback(() => {
474904
475395
  setActiveSkills(contextManager.getActiveSkills());
474905
475396
  }, [contextManager]);
474906
- import_react115.useEffect(() => {
475397
+ import_react116.useEffect(() => {
474907
475398
  if (visible) {
474908
475399
  setTab("search");
474909
475400
  setQuery("");
@@ -474914,7 +475405,7 @@ var init_SkillSearch = __esm(async () => {
474914
475405
  listPopularSkills().then((r4) => setPopular(r4)).catch(() => {});
474915
475406
  }
474916
475407
  }, [visible, refreshInstalled, refreshActive, setCursor]);
474917
- import_react115.useEffect(() => {
475408
+ import_react116.useEffect(() => {
474918
475409
  if (!visible || tab !== "search")
474919
475410
  return;
474920
475411
  if (debounceRef.current)
@@ -474940,7 +475431,7 @@ var init_SkillSearch = __esm(async () => {
474940
475431
  clearTimeout(debounceRef.current);
474941
475432
  };
474942
475433
  }, [query2, visible, tab, popular.length, setCursor]);
474943
- import_react115.useEffect(() => {
475434
+ import_react116.useEffect(() => {
474944
475435
  setQuery("");
474945
475436
  setResults([]);
474946
475437
  resetScroll();
@@ -475040,10 +475531,6 @@ var init_SkillSearch = __esm(async () => {
475040
475531
  resetScroll();
475041
475532
  return;
475042
475533
  }
475043
- if (evt.name === "a" && !evt.ctrl && !evt.meta && !query2) {
475044
- onToggleAgentSkills();
475045
- return;
475046
- }
475047
475534
  if (evt.name === "space") {
475048
475535
  setQuery((prev_3) => `${prev_3} `);
475049
475536
  resetScroll();
@@ -475469,32 +475956,6 @@ var init_SkillSearch = __esm(async () => {
475469
475956
  children: ""
475470
475957
  }, undefined, false, undefined, this)
475471
475958
  }, undefined, false, undefined, this),
475472
- /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV(PopupRow, {
475473
- w: innerW,
475474
- children: [
475475
- /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("text", {
475476
- fg: t2.textMuted,
475477
- bg: POPUP_BG,
475478
- children: [
475479
- "Agent access:",
475480
- " "
475481
- ]
475482
- }, undefined, true, undefined, this),
475483
- /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("text", {
475484
- fg: agentSkillsEnabled ? t2.success : t2.error,
475485
- bg: POPUP_BG,
475486
- children: agentSkillsEnabled ? "on" : "off"
475487
- }, undefined, false, undefined, this),
475488
- /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("text", {
475489
- fg: t2.textDim,
475490
- bg: POPUP_BG,
475491
- children: [
475492
- " ",
475493
- "(a to toggle)"
475494
- ]
475495
- }, undefined, true, undefined, this)
475496
- ]
475497
- }, undefined, true, undefined, this),
475498
475959
  /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV(PopupRow, {
475499
475960
  w: innerW,
475500
475961
  children: /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("text", {
@@ -475519,7 +475980,7 @@ var init_SkillSearch = __esm(async () => {
475519
475980
 
475520
475981
  // src/components/settings/ToolsPopup.tsx
475521
475982
  function ToolsPopup(t0) {
475522
- const $5 = import_compiler_runtime63.c(58);
475983
+ const $5 = import_compiler_runtime64.c(58);
475523
475984
  const {
475524
475985
  visible,
475525
475986
  disabledTools,
@@ -475540,7 +476001,7 @@ function ToolsPopup(t0) {
475540
476001
  scrollOffset,
475541
476002
  adjustScroll
475542
476003
  } = usePopupScroll(maxVisible);
475543
- const [initialized2, setInitialized] = import_react117.useState(false);
476004
+ const [initialized2, setInitialized] = import_react118.useState(false);
475544
476005
  if (visible && !initialized2) {
475545
476006
  setCursor(0);
475546
476007
  adjustScroll(0);
@@ -475767,7 +476228,7 @@ function ToolsPopup(t0) {
475767
476228
  }
475768
476229
  return t11;
475769
476230
  }
475770
- var import_compiler_runtime63, import_react117, MAX_POPUP_WIDTH14 = 100, CHROME_ROWS19 = 5, ALL_TOOLS, ToolRow3;
476231
+ var import_compiler_runtime64, import_react118, MAX_POPUP_WIDTH14 = 100, CHROME_ROWS19 = 5, ALL_TOOLS, ToolRow3;
475771
476232
  var init_ToolsPopup = __esm(async () => {
475772
476233
  init_theme();
475773
476234
  init_constants2();
@@ -475778,14 +476239,14 @@ var init_ToolsPopup = __esm(async () => {
475778
476239
  init_core4(),
475779
476240
  init_react2()
475780
476241
  ]);
475781
- import_compiler_runtime63 = __toESM(require_compiler_runtime(), 1);
475782
- import_react117 = __toESM(require_react(), 1);
476242
+ import_compiler_runtime64 = __toESM(require_compiler_runtime(), 1);
476243
+ import_react118 = __toESM(require_react(), 1);
475783
476244
  ALL_TOOLS = Object.entries(TOOL_CATALOG).map(([name21, desc]) => ({
475784
476245
  name: name21,
475785
476246
  desc
475786
476247
  }));
475787
- ToolRow3 = import_react117.memo(function ToolRow4(t0) {
475788
- const $5 = import_compiler_runtime63.c(21);
476248
+ ToolRow3 = import_react118.memo(function ToolRow4(t0) {
476249
+ const $5 = import_compiler_runtime64.c(21);
475789
476250
  const {
475790
476251
  tool: tool2,
475791
476252
  enabled,
@@ -475896,7 +476357,7 @@ function truncate3(str, max) {
475896
476357
  return str.length > max ? `${str.slice(0, max - 1)}\u2026` : str;
475897
476358
  }
475898
476359
  function ShutdownSplash(t0) {
475899
- const $5 = import_compiler_runtime64.c(39);
476360
+ const $5 = import_compiler_runtime65.c(39);
475900
476361
  const {
475901
476362
  phase,
475902
476363
  sessionId,
@@ -475911,7 +476372,7 @@ function ShutdownSplash(t0) {
475911
476372
  t1 = $5[1];
475912
476373
  }
475913
476374
  const shortId = t1;
475914
- const [tick, setTick] = import_react119.useState(0);
476375
+ const [tick, setTick] = import_react120.useState(0);
475915
476376
  let t2;
475916
476377
  let t3;
475917
476378
  if ($5[2] === Symbol.for("react.memo_cache_sentinel")) {
@@ -475926,7 +476387,7 @@ function ShutdownSplash(t0) {
475926
476387
  t2 = $5[2];
475927
476388
  t3 = $5[3];
475928
476389
  }
475929
- import_react119.useEffect(t2, t3);
476390
+ import_react120.useEffect(t2, t3);
475930
476391
  const t_0 = useTheme();
475931
476392
  let t4;
475932
476393
  if ($5[4] === Symbol.for("react.memo_cache_sentinel")) {
@@ -476141,9 +476602,9 @@ function App({
476141
476602
  } = useTerminalDimensions();
476142
476603
  useThemeStore((s2) => s2.name);
476143
476604
  const t2 = useTheme();
476144
- const [shutdownPhase, setShutdownPhase] = import_react119.useState(-1);
476145
- const savedSessionIdRef = import_react119.useRef(null);
476146
- import_react119.useEffect(() => {
476605
+ const [shutdownPhase, setShutdownPhase] = import_react120.useState(-1);
476606
+ const savedSessionIdRef = import_react120.useRef(null);
476607
+ import_react120.useEffect(() => {
476147
476608
  const stdin = process.stdin;
476148
476609
  const originalRead = stdin.read.bind(stdin);
476149
476610
  const patchedRead = (size) => {
@@ -476166,12 +476627,12 @@ function App({
476166
476627
  stdin.read = originalRead;
476167
476628
  };
476168
476629
  }, []);
476169
- const copyToClipboard2 = import_react119.useCallback((text3) => {
476630
+ const copyToClipboard2 = import_react120.useCallback((text3) => {
476170
476631
  if (!renderer2.copyToClipboardOSC52(text3)) {
476171
476632
  nativeCopy(text3);
476172
476633
  }
476173
476634
  }, [renderer2]);
476174
- import_react119.useEffect(() => {
476635
+ import_react120.useEffect(() => {
476175
476636
  const onSelection = (sel) => {
476176
476637
  const text_0 = sel.getSelectedText();
476177
476638
  if (text_0)
@@ -476182,14 +476643,14 @@ function App({
476182
476643
  renderer2.off("selection", onSelection);
476183
476644
  };
476184
476645
  }, [renderer2, copyToClipboard2]);
476185
- import_react119.useEffect(() => {
476646
+ import_react120.useEffect(() => {
476186
476647
  fetchOpenRouterMetadata();
476187
476648
  }, []);
476188
- const [globalConfig2, setGlobalConfig] = import_react119.useState(config2);
476189
- const [projConfig, setProjConfig] = import_react119.useState(projectConfig ?? null);
476190
- const [routerScope, setRouterScope] = import_react119.useState(() => projectConfig && ("taskRouter" in projectConfig) ? "project" : "global");
476191
- const modelScope = import_react119.useMemo(() => projConfig && ("defaultModel" in projConfig) ? "project" : "global", [projConfig]);
476192
- const effectiveConfig = import_react119.useMemo(() => mergeConfigs(globalConfig2, projConfig), [globalConfig2, projConfig]);
476649
+ const [globalConfig2, setGlobalConfig] = import_react120.useState(config2);
476650
+ const [projConfig, setProjConfig] = import_react120.useState(projectConfig ?? null);
476651
+ const [routerScope, setRouterScope] = import_react120.useState(() => projectConfig && ("taskRouter" in projectConfig) ? "project" : "global");
476652
+ const modelScope = import_react120.useMemo(() => projConfig && ("defaultModel" in projConfig) ? "project" : "global", [projConfig]);
476653
+ const effectiveConfig = import_react120.useMemo(() => mergeConfigs(globalConfig2, projConfig), [globalConfig2, projConfig]);
476193
476654
  const {
476194
476655
  focusMode,
476195
476656
  editorOpen,
@@ -476199,13 +476660,13 @@ function App({
476199
476660
  focusChat,
476200
476661
  focusEditor
476201
476662
  } = useEditorFocus();
476202
- const [editorVisible, setEditorVisible] = import_react119.useState(false);
476663
+ const [editorVisible, setEditorVisible] = import_react120.useState(false);
476203
476664
  const tabMgr = useTabs();
476204
- const tabMgrRef = import_react119.useRef(tabMgr);
476665
+ const tabMgrRef = import_react120.useRef(tabMgr);
476205
476666
  tabMgrRef.current = tabMgr;
476206
- const hasTabBarRef = import_react119.useRef(false);
476667
+ const hasTabBarRef = import_react120.useRef(false);
476207
476668
  hasTabBarRef.current = tabMgr.tabCount > 1;
476208
- const editorSplitRef = import_react119.useRef(60);
476669
+ const editorSplitRef = import_react120.useRef(60);
476209
476670
  const {
476210
476671
  ready: nvimReady,
476211
476672
  screenLines,
@@ -476221,8 +476682,8 @@ function App({
476221
476682
  sendMouse,
476222
476683
  error: nvimError
476223
476684
  } = useNeovim(true, effectiveConfig.nvimPath, effectiveConfig.nvimConfig, closeEditor, effectiveConfig.vimHints !== false, hasTabBarRef.current, editorSplitRef.current);
476224
- const pendingEditorFileRef = import_react119.useRef(null);
476225
- import_react119.useEffect(() => {
476685
+ const pendingEditorFileRef = import_react120.useRef(null);
476686
+ import_react120.useEffect(() => {
476226
476687
  if (nvimReady && pendingEditorFileRef.current) {
476227
476688
  const file2 = pendingEditorFileRef.current;
476228
476689
  pendingEditorFileRef.current = null;
@@ -476231,7 +476692,7 @@ function App({
476231
476692
  });
476232
476693
  }
476233
476694
  }, [nvimReady, nvimOpen]);
476234
- const openEditorWithFile = import_react119.useCallback((file_0) => {
476695
+ const openEditorWithFile = import_react120.useCallback((file_0) => {
476235
476696
  if (editorOpen && nvimReady) {
476236
476697
  nvimOpen(file_0).catch((err_0) => {
476237
476698
  logBackgroundError("editor", `failed to open ${file_0}: ${err_0 instanceof Error ? err_0.message : String(err_0)}`);
@@ -476241,24 +476702,24 @@ function App({
476241
476702
  openEditor();
476242
476703
  }
476243
476704
  }, [editorOpen, nvimReady, nvimOpen, openEditor]);
476244
- import_react119.useEffect(() => {
476705
+ import_react120.useEffect(() => {
476245
476706
  setEditorRequestCallback((file_1) => {
476246
476707
  if (file_1)
476247
476708
  openEditorWithFile(file_1);
476248
476709
  });
476249
476710
  return () => setEditorRequestCallback(null);
476250
476711
  }, [openEditorWithFile]);
476251
- import_react119.useEffect(() => {
476712
+ import_react120.useEffect(() => {
476252
476713
  if (editorOpen)
476253
476714
  setEditorVisible(true);
476254
476715
  }, [editorOpen]);
476255
476716
  const reasoningExpanded = useUIStore((s_0) => s_0.reasoningExpanded);
476256
476717
  const codeExpanded = useUIStore((s_1) => s_1.codeExpanded);
476257
476718
  const hasTabBar = tabMgr.tabCount > 1;
476258
- import_react119.useEffect(() => {
476719
+ import_react120.useEffect(() => {
476259
476720
  renderer2.requestRender();
476260
476721
  }, [editorOpen, editorVisible, focusMode, reasoningExpanded, codeExpanded, hasTabBar, renderer2]);
476261
- const handleEditorClosed = import_react119.useCallback(() => {
476722
+ const handleEditorClosed = import_react120.useCallback(() => {
476262
476723
  setEditorVisible(false);
476263
476724
  }, []);
476264
476725
  useEditorInput({
@@ -476302,10 +476763,10 @@ function App({
476302
476763
  const modalFirstRunWizard = useUIStore((s_18) => s_18.modals.firstRunWizard);
476303
476764
  const modalUpdateModal = useUIStore((s_19) => s_19.modals.updateModal);
476304
476765
  const toolsState = useToolsStore();
476305
- import_react119.useEffect(() => {
476766
+ import_react120.useEffect(() => {
476306
476767
  toolsState.initFromConfig(effectiveConfig.disabledTools);
476307
476768
  }, [effectiveConfig.disabledTools, toolsState.initFromConfig]);
476308
- import_react119.useEffect(() => {
476769
+ import_react120.useEffect(() => {
476309
476770
  saveGlobalConfig({
476310
476771
  disabledTools: [...toolsState.disabledTools]
476311
476772
  });
@@ -476313,15 +476774,15 @@ function App({
476313
476774
  const statusDashboardTab = useUIStore((s_20) => s_20.statusDashboardTab);
476314
476775
  const modalRepoMapStatus = useUIStore((s_21) => s_21.modals.repoMapStatus);
476315
476776
  const isModalOpen = useUIStore(selectIsAnyModalOpen);
476316
- const wizardOpenedLlm = import_react119.useRef(false);
476317
- const closerCache2 = import_react119.useRef({});
476777
+ const wizardOpenedLlm = import_react120.useRef(false);
476778
+ const closerCache2 = import_react120.useRef({});
476318
476779
  const getCloser2 = (name21) => closerCache2.current[name21] ??= () => useUIStore.getState().closeModal(name21);
476319
476780
  useVersionCheck();
476320
476781
  const versionCurrent = useVersionStore((s_22) => s_22.current);
476321
476782
  const versionLatest = useVersionStore((s_23) => s_23.latest);
476322
476783
  const versionUpdateAvailable = useVersionStore((s_24) => s_24.updateAvailable);
476323
- const updateModalShown = import_react119.useRef(false);
476324
- import_react119.useEffect(() => {
476784
+ const updateModalShown = import_react120.useRef(false);
476785
+ import_react120.useEffect(() => {
476325
476786
  if (!versionUpdateAvailable || !versionLatest || updateModalShown.current)
476326
476787
  return;
476327
476788
  if (isDismissed(versionLatest))
@@ -476335,7 +476796,7 @@ function App({
476335
476796
  }, 500);
476336
476797
  return () => clearTimeout(timer);
476337
476798
  }, [versionUpdateAvailable, versionLatest]);
476338
- import_react119.useEffect(() => {
476799
+ import_react120.useEffect(() => {
476339
476800
  if (getMissingRequired().length > 0) {
476340
476801
  useUIStore.getState().openModal("setup");
476341
476802
  } else if (forceWizard || !config2.onboardingComplete && !resumeSessionId) {
@@ -476343,7 +476804,7 @@ function App({
476343
476804
  }
476344
476805
  }, [config2.onboardingComplete, forceWizard, resumeSessionId]);
476345
476806
  const cwd2 = process.cwd();
476346
- const saveToScope = import_react119.useCallback((patch, toScope, fromScope) => {
476807
+ const saveToScope = import_react120.useCallback((patch, toScope, fromScope) => {
476347
476808
  if (toScope === "global") {
476348
476809
  saveGlobalConfig(patch);
476349
476810
  setGlobalConfig((prev) => applyConfigPatch(prev, patch));
@@ -476363,18 +476824,18 @@ function App({
476363
476824
  }
476364
476825
  }
476365
476826
  }, [cwd2]);
476366
- const detectScope = import_react119.useCallback((key3) => {
476827
+ const detectScope = import_react120.useCallback((key3) => {
476367
476828
  if (projConfig && key3 in projConfig)
476368
476829
  return "project";
476369
476830
  return "global";
476370
476831
  }, [projConfig]);
476371
- import_react119.useEffect(() => {
476832
+ import_react120.useEffect(() => {
476372
476833
  initForbidden(cwd2);
476373
476834
  }, []);
476374
- const contextManager = import_react119.useMemo(() => preloadedContextManager ?? new ContextManager(cwd2), [cwd2, preloadedContextManager]);
476375
- const sessionManager = import_react119.useMemo(() => new SessionManager(cwd2), [cwd2]);
476835
+ const contextManager = import_react120.useMemo(() => preloadedContextManager ?? new ContextManager(cwd2), [cwd2, preloadedContextManager]);
476836
+ const sessionManager = import_react120.useMemo(() => new SessionManager(cwd2), [cwd2]);
476376
476837
  const git = useGitStatus(cwd2);
476377
- const [forgeMode, setForgeModeHeader] = import_react119.useState("default");
476838
+ const [forgeMode, setForgeModeHeader] = import_react120.useState("default");
476378
476839
  const modeLabel2 = getModeLabel(forgeMode);
476379
476840
  const modeColor = getModeColor(forgeMode);
476380
476841
  useConfigSync({
@@ -476388,7 +476849,7 @@ function App({
476388
476849
  cursorCol,
476389
476850
  visualSelection
476390
476851
  });
476391
- const handleSuspend = import_react119.useCallback(async (opts) => {
476852
+ const handleSuspend = import_react120.useCallback(async (opts) => {
476392
476853
  useUIStore.getState().setSuspended(true);
476393
476854
  await new Promise((r4) => setTimeout(r4, 50));
476394
476855
  const result = await suspendAndRun({
@@ -476408,20 +476869,20 @@ function App({
476408
476869
  git.refresh();
476409
476870
  }, [cwd2, git]);
476410
476871
  editorSplitRef.current = editorSplit;
476411
- const sharedResources = import_react119.useMemo(() => ({
476872
+ const sharedResources = import_react120.useMemo(() => ({
476412
476873
  ...contextManager.getSharedResources(),
476413
476874
  workspaceCoordinator: getWorkspaceCoordinator()
476414
476875
  }), [contextManager]);
476415
- const workspaceSnapshotRef = import_react119.useRef(null);
476876
+ const workspaceSnapshotRef = import_react120.useRef(null);
476416
476877
  workspaceSnapshotRef.current = () => ({
476417
476878
  tabStates: tabMgr.getAllTabStates(),
476418
476879
  activeTabId: tabMgr.activeTabId
476419
476880
  });
476420
- const getWorkspaceSnapshot = import_react119.useCallback(() => workspaceSnapshotRef.current?.() ?? {
476881
+ const getWorkspaceSnapshot = import_react120.useCallback(() => workspaceSnapshotRef.current?.() ?? {
476421
476882
  tabStates: [],
476422
476883
  activeTabId: ""
476423
476884
  }, []);
476424
- const addSystemMessage = import_react119.useCallback((msg) => {
476885
+ const addSystemMessage = import_react120.useCallback((msg) => {
476425
476886
  const activeChat_0 = tabMgrRef.current?.getActiveChat();
476426
476887
  activeChat_0?.setMessages((prev_4) => [...prev_4, {
476427
476888
  id: crypto.randomUUID(),
@@ -476430,13 +476891,13 @@ function App({
476430
476891
  timestamp: Date.now()
476431
476892
  }]);
476432
476893
  }, []);
476433
- const refreshGit = import_react119.useCallback(() => {
476894
+ const refreshGit = import_react120.useCallback(() => {
476434
476895
  git.refresh();
476435
476896
  }, [git]);
476436
- const shutdownPhaseRef = import_react119.useRef(shutdownPhase);
476897
+ const shutdownPhaseRef = import_react120.useRef(shutdownPhase);
476437
476898
  shutdownPhaseRef.current = shutdownPhase;
476438
- const exitTimersRef = import_react119.useRef([]);
476439
- const handleExit = import_react119.useCallback(() => {
476899
+ const exitTimersRef = import_react120.useRef([]);
476900
+ const handleExit = import_react120.useCallback(() => {
476440
476901
  if (shutdownPhaseRef.current >= 0)
476441
476902
  return;
476442
476903
  setShutdownPhase(0);
@@ -476490,8 +476951,8 @@ function App({
476490
476951
  }, 300);
476491
476952
  }, 250);
476492
476953
  }, [cwd2, sessionManager, contextManager, renderer2]);
476493
- const hasRestoredRef = import_react119.useRef(false);
476494
- import_react119.useEffect(() => {
476954
+ const hasRestoredRef = import_react120.useRef(false);
476955
+ import_react120.useEffect(() => {
476495
476956
  if (hasRestoredRef.current || !resumeSessionId)
476496
476957
  return;
476497
476958
  hasRestoredRef.current = true;
@@ -476507,9 +476968,9 @@ function App({
476507
476968
  setExitSessionId(data.meta.id);
476508
476969
  }
476509
476970
  }, []);
476510
- const [activeModelForHeader, setActiveModelForHeader] = import_react119.useState(effectiveConfig.defaultModel);
476511
- const activeChatRef = import_react119.useRef(null);
476512
- import_react119.useEffect(() => {
476971
+ const [activeModelForHeader, setActiveModelForHeader] = import_react120.useState(effectiveConfig.defaultModel);
476972
+ const activeChatRef = import_react120.useRef(null);
476973
+ import_react120.useEffect(() => {
476513
476974
  const chat = tabMgr.getActiveChat();
476514
476975
  activeChatRef.current = chat;
476515
476976
  if (chat) {
@@ -476519,7 +476980,7 @@ function App({
476519
476980
  setExitSessionId(hasContent ? chat.sessionId : null);
476520
476981
  }
476521
476982
  }, [tabMgr.activeTabId]);
476522
- import_react119.useEffect(() => {
476983
+ import_react120.useEffect(() => {
476523
476984
  if (tabMgr.tabCount <= 1)
476524
476985
  return;
476525
476986
  (async () => {
@@ -476547,7 +477008,7 @@ function App({
476547
477008
  displayModel,
476548
477009
  isGateway,
476549
477010
  isProxy
476550
- } = import_react119.useMemo(() => {
477011
+ } = import_react120.useMemo(() => {
476551
477012
  const model = activeModelForHeader;
476552
477013
  if (model === "none") {
476553
477014
  return {
@@ -476578,22 +477039,23 @@ function App({
476578
477039
  isProxy: false
476579
477040
  };
476580
477041
  }, [activeModelForHeader]);
476581
- import_react119.useEffect(() => {
477042
+ import_react120.useEffect(() => {
476582
477043
  if (nvimError)
476583
477044
  addSystemMessage(`Neovim error: ${nvimError}`);
476584
477045
  }, [nvimError]);
476585
- const handleTabCommand = import_react119.useCallback((input, chat_0) => {
477046
+ const handleTabCommand = import_react120.useCallback((input, chat_0) => {
476586
477047
  const cmd = input.trim().toLowerCase().split(/\s+/)[0] ?? "";
476587
- if (chat_0.isLoading && ABORT_ON_LOADING.has(cmd)) {
477048
+ const twoWord = input.trim().toLowerCase().split(/\s+/).slice(0, 2).join(" ");
477049
+ if (chat_0.isLoading && (ABORT_ON_LOADING.has(cmd) || ABORT_ON_LOADING.has(twoWord))) {
476588
477050
  chat_0.abort();
476589
477051
  chat_0.setMessageQueue([]);
476590
477052
  }
476591
- if (cmd === "/continue") {
477053
+ if (cmd === "/continue" || twoWord === "/session continue") {
476592
477054
  chat_0.handleSubmit("Continue from where you left off. Complete any remaining work.");
476593
477055
  return;
476594
477056
  }
476595
- if (cmd === "/plan" || input.trim().toLowerCase().startsWith("/plan ")) {
476596
- const desc = input.trim().slice(5).trim();
477057
+ if (cmd === "/plan" || input.trim().toLowerCase().startsWith("/plan ") || twoWord === "/session plan" || input.trim().toLowerCase().startsWith("/session plan ")) {
477058
+ const desc = input.trim().replace(/^\/(session\s+)?plan\s*/i, "").trim();
476597
477059
  if (chat_0.planMode) {
476598
477060
  chat_0.setPlanMode(false);
476599
477061
  chat_0.setPlanRequest(null);
@@ -476680,7 +477142,7 @@ function App({
476680
477142
  instructionFiles: effectiveConfig.instructionFiles
476681
477143
  });
476682
477144
  }, [tabMgr, toggleEditor, nvimOpen, handleExit, cwd2, git, contextManager, handleSuspend, openEditorWithFile, effectiveConfig.nvimConfig, effectiveConfig.vimHints, effectiveConfig.verbose, effectiveConfig.diffStyle, effectiveConfig.autoCompactDiffs, effectiveConfig.compaction?.strategy, saveToScope, detectScope, effectiveConfig.agentFeatures, effectiveConfig.instructionFiles]);
476683
- const closeLlmSelector = import_react119.useCallback(() => {
477145
+ const closeLlmSelector = import_react120.useCallback(() => {
476684
477146
  const wasPickingSlot = useUIStore.getState().routerSlotPicking != null;
476685
477147
  const wasFromWizard = wizardOpenedLlm.current;
476686
477148
  useUIStore.getState().closeModal("llmSelector");
@@ -476692,16 +477154,16 @@ function App({
476692
477154
  useUIStore.getState().openModal("firstRunWizard");
476693
477155
  }
476694
477156
  }, []);
476695
- const closeInfoPopup = import_react119.useCallback(() => {
477157
+ const closeInfoPopup = import_react120.useCallback(() => {
476696
477158
  const cfg = useUIStore.getState().infoPopupConfig;
476697
477159
  useUIStore.getState().closeInfoPopup();
476698
477160
  cfg?.onClose?.();
476699
477161
  }, []);
476700
- const onGitMenuCommit = import_react119.useCallback(() => {
477162
+ const onGitMenuCommit = import_react120.useCallback(() => {
476701
477163
  useUIStore.getState().closeModal("gitMenu");
476702
477164
  useUIStore.getState().openModal("gitCommit");
476703
477165
  }, []);
476704
- const handleNewSession = import_react119.useCallback(async () => {
477166
+ const handleNewSession = import_react120.useCallback(async () => {
476705
477167
  const activeChat_3 = tabMgrRef.current?.getActiveChat();
476706
477168
  const hasContent_0 = activeChat_3?.messages.some((m_2) => m_2.role === "user" || m_2.role === "assistant");
476707
477169
  if (hasContent_0 && activeChat_3) {
@@ -476735,7 +477197,7 @@ function App({
476735
477197
  renderer: renderer2,
476736
477198
  copyToClipboard: copyToClipboard2,
476737
477199
  activeChatRef,
476738
- cycleMode: import_react119.useCallback(() => {
477200
+ cycleMode: import_react120.useCallback(() => {
476739
477201
  const chat_1 = tabMgrRef.current?.getActiveChat();
476740
477202
  if (chat_1) {
476741
477203
  const next = chat_1.cycleMode();
@@ -477061,11 +477523,6 @@ function App({
477061
477523
  /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV(SkillSearch, {
477062
477524
  visible: modalSkillSearch,
477063
477525
  contextManager: tabMgr.getActiveChat()?.contextManager ?? contextManager,
477064
- agentSkillsEnabled: !toolsState.disabledTools.has("skills"),
477065
- onToggleAgentSkills: () => {
477066
- toolsState.toggleTool("skills");
477067
- addSystemMessage(`Agent skills ${toolsState.disabledTools.has("skills") ? "enabled" : "disabled"}`);
477068
- },
477069
477526
  onClose: getCloser2("skillSearch"),
477070
477527
  onSystemMessage: addSystemMessage
477071
477528
  }, undefined, false, undefined, this),
@@ -477245,7 +477702,7 @@ function App({
477245
477702
  ]
477246
477703
  }, undefined, true, undefined, this);
477247
477704
  }
477248
- var import_compiler_runtime64, import_react119, ABORT_ON_LOADING, DEFAULT_TASK_ROUTER, SHUTDOWN_SPINNER, SHUTDOWN_STEPS, KITTY_PROTOCOL_RESPONSE_RE;
477705
+ var import_compiler_runtime65, import_react120, ABORT_ON_LOADING, DEFAULT_TASK_ROUTER, SHUTDOWN_SPINNER, SHUTDOWN_STEPS, KITTY_PROTOCOL_RESPONSE_RE;
477249
477706
  var init_App = __esm(async () => {
477250
477707
  init_shallow2();
477251
477708
  init_config();
@@ -477311,10 +477768,10 @@ var init_App = __esm(async () => {
477311
477768
  init_SkillSearch(),
477312
477769
  init_ToolsPopup()
477313
477770
  ]);
477314
- import_compiler_runtime64 = __toESM(require_compiler_runtime(), 1);
477315
- import_react119 = __toESM(require_react(), 1);
477771
+ import_compiler_runtime65 = __toESM(require_compiler_runtime(), 1);
477772
+ import_react120 = __toESM(require_react(), 1);
477316
477773
  startMemoryPoll();
477317
- ABORT_ON_LOADING = new Set(["/clear", "/compact", "/plan"]);
477774
+ ABORT_ON_LOADING = new Set(["/clear", "/compact", "/plan", "/session clear", "/session compact", "/session plan"]);
477318
477775
  DEFAULT_TASK_ROUTER = {
477319
477776
  coding: null,
477320
477777
  exploration: null,
@@ -477530,7 +477987,7 @@ var brandPlain = getBrandSegments().map((s2) => s2.text).join("");
477530
477987
  var brandCol = Math.max(1, Math.floor((cols - brandPlain.length) / 2) + 1);
477531
477988
  var charIdx = 0;
477532
477989
  for (const part of brandParts) {
477533
- for (let _c65 = 0;_c65 < part.text.length; _c65++) {
477990
+ for (let _c66 = 0;_c66 < part.text.length; _c66++) {
477534
477991
  charIdx++;
477535
477992
  let out2 = `${at(ROW.brand, brandCol)}`;
477536
477993
  let pos = 0;