@proxysoul/soulforge 1.4.0 → 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 +1660 -1161
  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.4.0",
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",
@@ -337314,7 +337314,7 @@ function detectProjectCommand(command) {
337314
337314
  }
337315
337315
  return null;
337316
337316
  }
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, 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;
337318
337318
  var init_shell = __esm(() => {
337319
337319
  init_strip_ansi();
337320
337320
  init_forbidden();
@@ -337350,7 +337350,7 @@ var init_shell = __esm(() => {
337350
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/;
337351
337351
  shellTool = {
337352
337352
  name: "shell",
337353
- 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,
337354
337354
  execute: async (args2, abortSignal) => {
337355
337355
  const command = injectCoAuthor(args2.command);
337356
337356
  const cwd2 = args2.cwd ?? process.cwd();
@@ -382321,7 +382321,8 @@ var init_icons = __esm(() => {
382321
382321
  worker: "\uDB81\uDC8B",
382322
382322
  worker_busy: "\uDB81\uDC6E",
382323
382323
  worker_crash: "\uDB80\uDD59",
382324
- worker_restart: "\uDB81\uDC53"
382324
+ worker_restart: "\uDB81\uDC53",
382325
+ image: "\uDB80\uDEE9"
382325
382326
  };
382326
382327
  ASCII = {
382327
382328
  ghost: "\u25C6",
@@ -382418,7 +382419,8 @@ var init_icons = __esm(() => {
382418
382419
  worker: "\u26A1",
382419
382420
  worker_busy: "\u26A1",
382420
382421
  worker_crash: "\u26A1\u2717",
382421
- worker_restart: "\u26A1\u21BB"
382422
+ worker_restart: "\u26A1\u21BB",
382423
+ image: "\uD83D\uDDBC"
382422
382424
  };
382423
382425
  UI_ICONS = {
382424
382426
  get ghost() {
@@ -426957,14 +426959,17 @@ function register2(map2) {
426957
426959
  map2.set("/nvim-config", handleNvimConfig);
426958
426960
  map2.set("/verbose", handleVerbose);
426959
426961
  map2.set("/reasoning", handleReasoning);
426962
+ map2.set("/compact settings", handleCompaction);
426960
426963
  map2.set("/compaction", handleCompaction);
426961
426964
  map2.set("/agent-features", handleAgentFeatures);
426962
426965
  map2.set("/instructions", handleInstructions);
426963
426966
  map2.set("/diff-style", handleDiffStyle);
426967
+ map2.set("/editor split", handleSplit);
426964
426968
  map2.set("/split", handleSplit);
426965
426969
  map2.set("/vim-hints", handleVimHints);
426966
426970
  map2.set("/model-scope", handleModelScope);
426967
426971
  map2.set("/font nerd", handleNerdFont);
426972
+ map2.set("/font set", handleFont);
426968
426973
  map2.set("/settings", handleSettingsHub);
426969
426974
  map2.set("/theme", handleTheme);
426970
426975
  }
@@ -429992,9 +429997,9 @@ function handleHelp(_input, _ctx) {
429992
429997
  useUIStore.getState().openModal("commandPalette");
429993
429998
  }
429994
429999
  function handleOpen(input, ctx) {
429995
- const filePath = input.trim().slice(6).trim();
430000
+ const filePath = input.trim().replace(/^\/(editor\s+)?open\s*/i, "").trim();
429996
430001
  if (!filePath) {
429997
- sysMsg(ctx, "Usage: /open <file-path>");
430002
+ sysMsg(ctx, "Usage: /editor open <file-path>");
429998
430003
  return;
429999
430004
  }
430000
430005
  ctx.openEditorWithFile(filePath);
@@ -430185,7 +430190,10 @@ function register6(map2) {
430185
430190
  map2.set("/editor", handleEditor);
430186
430191
  map2.set("/edit", handleEditor);
430187
430192
  map2.set("/help", handleHelp);
430193
+ map2.set("/editor settings", handleEditorSettings);
430194
+ map2.set("/editor open", handleOpen);
430188
430195
  map2.set("/editor-settings", handleEditorSettings);
430196
+ map2.set("/open", handleOpen);
430189
430197
  map2.set("/router", handleRouter);
430190
430198
  map2.set("/provider-settings", handleProviderSettings);
430191
430199
  map2.set("/perf", handleProviderSettings);
@@ -430199,6 +430207,7 @@ function register6(map2) {
430199
430207
  map2.set("/changes", handleChanges);
430200
430208
  map2.set("/files", handleChanges);
430201
430209
  map2.set("/errors", handleErrors);
430210
+ map2.set("/compact logs", handleCompactionLogs);
430202
430211
  map2.set("/compact-v2-logs", handleCompactionLogs);
430203
430212
  map2.set("/skills", handleSkills);
430204
430213
  map2.set("/terminals", handleTerminals);
@@ -430210,6 +430219,8 @@ function register6(map2) {
430210
430219
  map2.set("/wizard", handleWizard);
430211
430220
  }
430212
430221
  function matchNavPrefix(cmd) {
430222
+ if (cmd.startsWith("/editor open "))
430223
+ return handleOpen;
430213
430224
  if (cmd.startsWith("/open "))
430214
430225
  return handleOpen;
430215
430226
  if (cmd.startsWith("/tab rename "))
@@ -431033,7 +431044,7 @@ async function handleExportAll(ctx) {
431033
431044
  }
431034
431045
  async function handleExport(input, ctx) {
431035
431046
  const trimmed = input.trim();
431036
- const arg = trimmed.slice(7).trim();
431047
+ const arg = trimmed.replace(/^\/(session\s+)?export\s*/i, "").trim();
431037
431048
  if (arg === "all" || arg === "diagnostic") {
431038
431049
  await handleExportAll(ctx);
431039
431050
  return;
@@ -431084,7 +431095,7 @@ async function handleExport(input, ctx) {
431084
431095
  }
431085
431096
  function handlePlan(input, ctx) {
431086
431097
  const trimmed = input.trim();
431087
- const arg = trimmed.slice(5).trim();
431098
+ const arg = trimmed.replace(/^\/(session\s+)?plan\s*/i, "").trim();
431088
431099
  if (arg) {
431089
431100
  ctx.chat.setPlanMode(true);
431090
431101
  ctx.chat.setPlanRequest(arg);
@@ -431132,13 +431143,22 @@ function handleSessions(_input, ctx) {
431132
431143
  ctx.openSessions();
431133
431144
  }
431134
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);
431135
431152
  map2.set("/clear", handleClear);
431136
431153
  map2.set("/compact", handleCompact);
431137
431154
  map2.set("/sessions", handleSessions);
431138
- map2.set("/session", handleSessions);
431139
431155
  map2.set("/continue", handleContinue);
431140
431156
  }
431141
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;
431142
431162
  if (cmd === "/export" || cmd.startsWith("/export "))
431143
431163
  return handleExport;
431144
431164
  if (cmd === "/plan" || cmd.startsWith("/plan "))
@@ -431350,550 +431370,690 @@ var init_registry = __esm(() => {
431350
431370
  register8(commandMap);
431351
431371
  register(commandMap);
431352
431372
  prefixMatchers = [matchContextPrefix, matchGitPrefix, matchConfigPrefix, matchSessionPrefix, matchNavPrefix, matchSecurityPrefix, matchClaimsPrefix];
431353
- CATEGORIES = ["Git", "Session", "Models", "Settings", "Editor", "Intelligence", "Tabs", "System"];
431354
- COMMAND_DEFS = [{
431355
- cmd: "/agent-features",
431356
- ic: "cog",
431357
- desc: "Toggle agent features (de-sloppify, tier routing)",
431358
- category: "Settings",
431359
- tags: ["config", "desloppify", "routing", "verify"]
431360
- }, {
431361
- cmd: "/changes",
431362
- ic: "changes",
431363
- desc: "Toggle files changed this session",
431364
- category: "Tabs",
431365
- tags: ["files", "diff", "modified"]
431366
- }, {
431367
- cmd: "/chat-style",
431368
- ic: "chat",
431369
- desc: "Toggle chat layout style",
431370
- category: "Settings",
431371
- tags: ["accent", "bubble", "ui"]
431372
- }, {
431373
- cmd: "/claim",
431374
- ic: "lock",
431375
- desc: "Show active file claims across tabs",
431376
- category: "Tabs",
431377
- tags: ["lock"]
431378
- }, {
431379
- cmd: "/claim force",
431380
- ic: "lock",
431381
- desc: "Steal a file claim from another tab",
431382
- category: "Tabs",
431383
- tags: ["lock"],
431384
- hidden: true
431385
- }, {
431386
- cmd: "/claim release",
431387
- ic: "lock",
431388
- desc: "Release a file claim from current tab",
431389
- category: "Tabs",
431390
- tags: ["lock"],
431391
- hidden: true
431392
- }, {
431393
- cmd: "/claim release-all",
431394
- ic: "lock",
431395
- desc: "Release all claims from current tab",
431396
- category: "Tabs",
431397
- tags: ["lock"],
431398
- hidden: true
431399
- }, {
431400
- cmd: "/clear",
431401
- ic: "clear",
431402
- desc: "Clear chat history",
431403
- category: "Session",
431404
- tags: ["reset"]
431405
- }, {
431406
- cmd: "/compact",
431407
- ic: "compress",
431408
- desc: "Compact conversation context",
431409
- category: "Session",
431410
- tags: ["context", "summarize"]
431411
- }, {
431412
- cmd: "/compact-v2-logs",
431413
- ic: "plan",
431414
- desc: "View compaction events",
431415
- category: "Session",
431416
- tags: ["debug", "logs"]
431417
- }, {
431418
- cmd: "/compaction",
431419
- ic: "compress",
431420
- desc: "Compaction strategy & pruning settings",
431421
- category: "Session",
431422
- tags: ["v1", "v2", "pruning"]
431423
- }, {
431424
- cmd: "/context",
431425
- ic: "context",
431426
- desc: "Context & system dashboard",
431427
- category: "Intelligence",
431428
- tags: ["tokens", "budget", "status"]
431429
- }, {
431430
- cmd: "/continue",
431431
- ic: "play",
431432
- desc: "Continue interrupted generation",
431433
- category: "Session",
431434
- tags: ["resume"]
431435
- }, {
431436
- cmd: "/diagnose",
431437
- ic: "brain",
431438
- desc: "Health check \u2014 LSP, tree-sitter, semantic indexing",
431439
- category: "Intelligence",
431440
- tags: ["health", "debug", "probe"]
431441
- }, {
431442
- cmd: "/diff-style",
431443
- ic: "git",
431444
- desc: "Change diff display style",
431445
- category: "Settings",
431446
- tags: ["sidebyside", "compact"]
431447
- }, {
431448
- cmd: "/editor",
431449
- ic: "pencil",
431450
- desc: "Toggle editor panel",
431451
- category: "Editor",
431452
- tags: ["neovim", "toggle"]
431453
- }, {
431454
- cmd: "/editor-settings",
431455
- ic: "cog",
431456
- desc: "Toggle editor/LSP integrations",
431457
- category: "Editor",
431458
- tags: ["config", "lsp"]
431459
- }, {
431460
- cmd: "/errors",
431461
- ic: "error",
431462
- desc: "Browse error log",
431463
- category: "System",
431464
- tags: ["debug", "log"]
431465
- }, {
431466
- cmd: "/export",
431467
- ic: "changes",
431468
- desc: "Export chat \u2014 markdown, json, clipboard, all",
431469
- category: "Session",
431470
- tags: ["save", "markdown", "json", "clipboard", "diagnostic"]
431471
- }, {
431472
- cmd: "/export all",
431473
- ic: "search",
431474
- desc: "Full diagnostic export (system prompt, messages, tools)",
431475
- category: "Session",
431476
- tags: ["debug"],
431477
- hidden: true
431478
- }, {
431479
- cmd: "/export api",
431480
- ic: "search",
431481
- desc: "Toggle per-step API request dump (messages, tools, usage per step)",
431482
- category: "Session",
431483
- tags: ["debug", "tokens", "cost"],
431484
- hidden: true
431485
- }, {
431486
- cmd: "/export clipboard",
431487
- ic: "changes",
431488
- desc: "Copy chat to clipboard (markdown)",
431489
- category: "Session",
431490
- tags: ["copy"],
431491
- hidden: true
431492
- }, {
431493
- cmd: "/export json",
431494
- ic: "changes",
431495
- desc: "Export chat as JSON",
431496
- category: "Session",
431497
- tags: ["save"],
431498
- hidden: true
431499
- }, {
431500
- cmd: "/font",
431501
- ic: "pencil",
431502
- desc: "Terminal font (show, set, nerd)",
431503
- category: "Settings",
431504
- tags: ["nerd", "terminal"]
431505
- }, {
431506
- cmd: "/font nerd",
431507
- ic: "ghost",
431508
- desc: "Toggle Nerd Font icons",
431509
- category: "Settings",
431510
- tags: ["icons", "terminal"],
431511
- hidden: true
431512
- }, {
431513
- cmd: "/git",
431514
- ic: "git",
431515
- desc: "Git menu",
431516
- category: "Git",
431517
- tags: ["menu"]
431518
- }, {
431519
- cmd: "/git branch",
431520
- ic: "git",
431521
- desc: "Show/create branch",
431522
- category: "Git",
431523
- tags: ["checkout"]
431524
- }, {
431525
- cmd: "/git co-author",
431526
- ic: "git",
431527
- desc: "Toggle co-author trailer",
431528
- category: "Git",
431529
- tags: ["commit"]
431530
- }, {
431531
- cmd: "/git commit",
431532
- ic: "git",
431533
- desc: "Git commit with message",
431534
- category: "Git",
431535
- tags: ["save"]
431536
- }, {
431537
- cmd: "/git diff",
431538
- ic: "git",
431539
- desc: "Open diff in editor",
431540
- category: "Git",
431541
- tags: ["changes"]
431542
- }, {
431543
- cmd: "/git init",
431544
- ic: "git",
431545
- desc: "Initialize git repo",
431546
- category: "Git",
431547
- tags: ["create"]
431548
- }, {
431549
- cmd: "/git lazygit",
431550
- ic: "git",
431551
- desc: "Launch lazygit",
431552
- category: "Git",
431553
- tags: ["tui"]
431554
- }, {
431555
- cmd: "/git log",
431556
- ic: "git",
431557
- desc: "Show recent commits",
431558
- category: "Git",
431559
- tags: ["history"]
431560
- }, {
431561
- cmd: "/git pull",
431562
- ic: "git",
431563
- desc: "Pull from remote",
431564
- category: "Git",
431565
- tags: ["fetch", "sync"]
431566
- }, {
431567
- cmd: "/git push",
431568
- ic: "git",
431569
- desc: "Push to remote",
431570
- category: "Git",
431571
- tags: ["sync", "upload"]
431572
- }, {
431573
- cmd: "/git stash",
431574
- ic: "git",
431575
- desc: "Stash changes \u2014 pop to restore",
431576
- category: "Git",
431577
- tags: ["save", "pop", "restore"]
431578
- }, {
431579
- cmd: "/git stash pop",
431580
- ic: "git",
431581
- desc: "Pop latest stash",
431582
- category: "Git",
431583
- tags: ["restore"],
431584
- hidden: true
431585
- }, {
431586
- cmd: "/git status",
431587
- ic: "git",
431588
- desc: "Git status",
431589
- category: "Git",
431590
- tags: ["info"]
431591
- }, {
431592
- cmd: "/help",
431593
- ic: "help",
431594
- desc: "Command palette (Ctrl+K)",
431595
- category: "System",
431596
- tags: ["commands", "search"]
431597
- }, {
431598
- cmd: "/instructions",
431599
- ic: "system",
431600
- desc: "Toggle instruction files (SOULFORGE.md, CLAUDE.md, etc.)",
431601
- category: "Settings",
431602
- tags: ["prompt", "config"]
431603
- }, {
431604
- cmd: "/keys",
431605
- ic: "cog",
431606
- desc: "Manage LLM provider API keys",
431607
- category: "Models",
431608
- tags: ["api", "auth"]
431609
- }, {
431610
- cmd: "/lsp",
431611
- ic: "brain",
431612
- desc: "Manage LSP servers \u2014 install, disable, enable",
431613
- category: "Intelligence",
431614
- tags: ["language", "server", "mason", "disable"]
431615
- }, {
431616
- cmd: "/lsp install",
431617
- ic: "brain",
431618
- desc: "Install & manage LSP servers (Mason registry)",
431619
- category: "Intelligence",
431620
- tags: ["mason", "install", "search"]
431621
- }, {
431622
- cmd: "/lsp restart",
431623
- ic: "brain",
431624
- desc: "Restart LSP servers (all or specific)",
431625
- category: "Intelligence",
431626
- tags: ["restart"]
431627
- }, {
431628
- cmd: "/lsp status",
431629
- ic: "brain",
431630
- desc: "LSP status dashboard",
431631
- category: "Intelligence",
431632
- tags: ["language", "server"]
431633
- }, {
431634
- cmd: "/memory",
431635
- ic: "memory",
431636
- desc: "Manage memory scopes, view & clear",
431637
- category: "Intelligence",
431638
- tags: ["recall", "knowledge"]
431639
- }, {
431640
- cmd: "/mode",
431641
- ic: "cog",
431642
- desc: "Switch forge mode",
431643
- category: "Settings",
431644
- tags: ["architect", "socratic", "challenge", "plan", "auto"]
431645
- }, {
431646
- cmd: "/model-scope",
431647
- ic: "cog",
431648
- desc: "Set model scope (project/global)",
431649
- category: "Models",
431650
- tags: ["config"]
431651
- }, {
431652
- cmd: "/models",
431653
- ic: "system",
431654
- desc: "Switch LLM model (Ctrl+L)",
431655
- category: "Models",
431656
- tags: ["provider", "llm", "switch"]
431657
- }, {
431658
- cmd: "/nvim-config",
431659
- ic: "pencil",
431660
- desc: "Switch neovim config mode",
431661
- category: "Settings",
431662
- tags: ["editor", "neovim"]
431663
- }, {
431664
- cmd: "/open",
431665
- ic: "changes",
431666
- desc: "Open file in editor",
431667
- category: "Editor",
431668
- tags: ["file"]
431669
- }, {
431670
- cmd: "/plan",
431671
- ic: "plan",
431672
- desc: "Toggle plan mode (research & plan only)",
431673
- category: "Session",
431674
- tags: ["architect", "research"]
431675
- }, {
431676
- cmd: "/privacy",
431677
- ic: "lock",
431678
- desc: "Manage forbidden file patterns",
431679
- category: "System",
431680
- tags: ["security", "forbidden"]
431681
- }, {
431682
- cmd: "/provider-settings",
431683
- ic: "system",
431684
- desc: "Provider options \u2014 thinking, effort, speed, context",
431685
- category: "Models",
431686
- tags: ["thinking", "effort", "speed", "config"]
431687
- }, {
431688
- cmd: "/providers",
431689
- ic: "system",
431690
- desc: "Provider & Models",
431691
- category: "Models",
431692
- tags: ["llm", "switch"],
431693
- hidden: true
431694
- }, {
431695
- cmd: "/proxy",
431696
- ic: "proxy",
431697
- desc: "Proxy \u2014 status, install, start, stop, restart, login, upgrade",
431698
- category: "Models",
431699
- tags: ["account", "login", "logout", "install", "upgrade", "start", "stop", "restart"]
431700
- }, {
431701
- cmd: "/proxy install",
431702
- ic: "proxy",
431703
- desc: "Reinstall CLIProxyAPI",
431704
- category: "Models",
431705
- tags: ["setup"],
431706
- hidden: true
431707
- }, {
431708
- cmd: "/proxy login",
431709
- ic: "proxy",
431710
- desc: "Add a provider account",
431711
- category: "Models",
431712
- tags: ["auth", "oauth"],
431713
- hidden: true
431714
- }, {
431715
- cmd: "/proxy logout",
431716
- ic: "proxy",
431717
- desc: "Remove a provider account",
431718
- category: "Models",
431719
- tags: ["auth"],
431720
- hidden: true
431721
- }, {
431722
- cmd: "/proxy restart",
431723
- ic: "proxy",
431724
- desc: "Restart the proxy",
431725
- category: "Models",
431726
- tags: ["reboot"],
431727
- hidden: true
431728
- }, {
431729
- cmd: "/proxy start",
431730
- ic: "proxy",
431731
- desc: "Start the proxy",
431732
- category: "Models",
431733
- tags: ["launch"],
431734
- hidden: true
431735
- }, {
431736
- cmd: "/proxy stop",
431737
- ic: "proxy",
431738
- desc: "Stop the proxy",
431739
- category: "Models",
431740
- tags: ["kill"],
431741
- hidden: true
431742
- }, {
431743
- cmd: "/proxy upgrade",
431744
- ic: "proxy",
431745
- desc: "Upgrade to latest version",
431746
- category: "Models",
431747
- tags: ["update"],
431748
- hidden: true
431749
- }, {
431750
- cmd: "/quit",
431751
- ic: "quit",
431752
- desc: "Exit SoulForge",
431753
- category: "System",
431754
- tags: ["exit", "close"]
431755
- }, {
431756
- cmd: "/reasoning",
431757
- ic: "brain",
431758
- desc: "Show or hide reasoning content",
431759
- category: "Settings",
431760
- tags: ["thinking", "display"]
431761
- }, {
431762
- cmd: "/repo-map",
431763
- ic: "tree",
431764
- desc: "Soul map settings (AST index)",
431765
- category: "Intelligence",
431766
- tags: ["semantic", "treesitter"]
431767
- }, {
431768
- cmd: "/restart",
431769
- ic: "ghost",
431770
- desc: "Full restart",
431771
- category: "System",
431772
- tags: ["reboot"]
431773
- }, {
431774
- cmd: "/router",
431775
- ic: "router",
431776
- desc: "Route models per task (code, explore, plan, verify)",
431777
- category: "Models",
431778
- tags: ["dispatch", "routing"]
431779
- }, {
431780
- cmd: "/sessions",
431781
- ic: "clock_alt",
431782
- desc: "Browse & restore sessions",
431783
- category: "Session",
431784
- tags: ["history", "restore"]
431785
- }, {
431786
- cmd: "/settings",
431787
- ic: "cog",
431788
- desc: "Settings hub \u2014 all options in one place",
431789
- category: "Settings",
431790
- tags: ["config", "preferences", "hub"]
431791
- }, {
431792
- cmd: "/setup",
431793
- ic: "ghost",
431794
- desc: "Check & install prerequisites",
431795
- category: "System",
431796
- tags: ["install", "check"]
431797
- }, {
431798
- cmd: "/skills",
431799
- ic: "skills",
431800
- desc: "Browse & install skills",
431801
- category: "Intelligence",
431802
- tags: ["plugins", "extensions"]
431803
- }, {
431804
- cmd: "/split",
431805
- ic: "pencil",
431806
- desc: "Cycle editor/chat split (40/50/60/70)",
431807
- category: "Editor",
431808
- tags: ["layout", "resize"]
431809
- }, {
431810
- cmd: "/status",
431811
- ic: "info",
431812
- desc: "System status dashboard",
431813
- category: "System",
431814
- tags: ["info", "health", "context", "tokens"]
431815
- }, {
431816
- cmd: "/storage",
431817
- ic: "system",
431818
- desc: "View & manage storage usage",
431819
- category: "System",
431820
- tags: ["disk", "cleanup"]
431821
- }, {
431822
- cmd: "/update",
431823
- ic: "ghost",
431824
- desc: "Check for SoulForge updates",
431825
- category: "System",
431826
- tags: ["upgrade", "version"]
431827
- }, {
431828
- cmd: "/tab",
431829
- ic: "tabs",
431830
- desc: "Tabs \u2014 list, new, close, rename",
431831
- category: "Tabs",
431832
- tags: ["switch", "new", "close", "rename"]
431833
- }, {
431834
- cmd: "/tab close",
431835
- ic: "tabs",
431836
- desc: "Close current tab (Ctrl+W)",
431837
- category: "Tabs",
431838
- tags: ["remove"],
431839
- hidden: true
431840
- }, {
431841
- cmd: "/tab new",
431842
- ic: "tabs",
431843
- desc: "Open new tab (Ctrl+T)",
431844
- category: "Tabs",
431845
- tags: ["create"],
431846
- hidden: true
431847
- }, {
431848
- cmd: "/tab rename",
431849
- ic: "pencil",
431850
- desc: "Rename current tab",
431851
- category: "Tabs",
431852
- tags: ["label"],
431853
- hidden: true
431854
- }, {
431855
- cmd: "/terminals",
431856
- ic: "terminal",
431857
- desc: "Terminal manager (new, close, show, hide, list, rename)",
431858
- category: "Tabs",
431859
- tags: ["shell", "term", "pty", "terminal"]
431860
- }, {
431861
- cmd: "/theme",
431862
- ic: "palette",
431863
- desc: "Switch color theme (live preview)",
431864
- category: "Settings",
431865
- tags: ["color", "dark", "light", "catppuccin", "dracula", "nord", "gruvbox", "solarized"]
431866
- }, {
431867
- cmd: "/tools",
431868
- ic: "search",
431869
- desc: "Enable/disable tools for the agent",
431870
- category: "Intelligence",
431871
- tags: ["tools", "enable", "disable", "toggle"]
431872
- }, {
431873
- cmd: "/verbose",
431874
- ic: "cog",
431875
- desc: "Toggle verbose tool output",
431876
- category: "Settings",
431877
- tags: ["debug", "output"]
431878
- }, {
431879
- cmd: "/vim-hints",
431880
- ic: "pencil",
431881
- desc: "Toggle vim keybinding hints",
431882
- category: "Settings",
431883
- tags: ["editor", "keybindings"]
431884
- }, {
431885
- cmd: "/web-search",
431886
- ic: "cog",
431887
- desc: "Web search keys & settings",
431888
- category: "Models",
431889
- tags: ["search", "api"]
431890
- }, {
431891
- cmd: "/wizard",
431892
- ic: "ghost",
431893
- desc: "Re-run the first-run setup wizard",
431894
- category: "System",
431895
- tags: ["onboarding", "setup", "welcome"]
431896
- }];
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
+ ];
431897
432057
  });
431898
432058
 
431899
432059
  // src/core/terminal/suspend.ts
@@ -438796,6 +438956,9 @@ ${description}`,
438796
438956
  if (tc) {
438797
438957
  tc.state = "done";
438798
438958
  tc.result = resultStr;
438959
+ if (typeof part.output === "object" && part.output !== null && "_imageArt" in part.output) {
438960
+ tc.imageArt = part.output._imageArt;
438961
+ }
438799
438962
  }
438800
438963
  toolCharsRef.current += resultStr.length;
438801
438964
  const parsedArgs = safeParseArgs(toolCallArgs.get(part.toolCallId));
@@ -438824,12 +438987,17 @@ ${description}`,
438824
438987
  if (d3.miniForge)
438825
438988
  toolResult.miniForge = true;
438826
438989
  }
438827
- completedCalls.push({
438990
+ const streamingTc = tcBuf.find((c) => c.id === part.toolCallId);
438991
+ const completedCall = {
438828
438992
  id: part.toolCallId,
438829
438993
  name: part.toolName,
438830
438994
  args: parsedArgs,
438831
438995
  result: toolResult
438832
- });
438996
+ };
438997
+ if (streamingTc?.imageArt) {
438998
+ completedCall.imageArt = streamingTc.imageArt;
438999
+ }
439000
+ completedCalls.push(completedCall);
438833
439001
  if (workingStateRef.current) {
438834
439002
  extractFromToolCall(workingStateRef.current, part.toolName, parsedArgs);
438835
439003
  extractFromToolResult(workingStateRef.current, part.toolName, resultStr, parsedArgs);
@@ -439851,7 +440019,7 @@ var init_InputBox = __esm(async () => {
439851
440019
  indices: m5.indices
439852
440020
  });
439853
440021
  }
439854
- results.sort((a2, b5) => b5.score - a2.score);
440022
+ results.sort((a2, b5) => b5.score - a2.score || a2.cmd.localeCompare(b5.cmd));
439855
440023
  return results;
439856
440024
  }, [showAutocomplete, commandToken]);
439857
440025
  const hasMatches = matches3.length > 0;
@@ -444907,7 +445075,7 @@ var init_tool_formatters = __esm(async () => {
444907
445075
 
444908
445076
  // src/components/chat/StaticToolRow.tsx
444909
445077
  function StaticToolRow(t0) {
444910
- const $5 = import_compiler_runtime17.c(53);
445078
+ const $5 = import_compiler_runtime17.c(56);
444911
445079
  const {
444912
445080
  statusContent,
444913
445081
  isDone,
@@ -444924,7 +445092,8 @@ function StaticToolRow(t0) {
444924
445092
  suffix,
444925
445093
  suffixColor,
444926
445094
  diff,
444927
- diffStyle: t1
445095
+ diffStyle: t1,
445096
+ imageArt
444928
445097
  } = t0;
444929
445098
  const diffStyle = t1 === undefined ? "default" : t1;
444930
445099
  const t2 = useTheme();
@@ -445137,21 +445306,44 @@ function StaticToolRow(t0) {
445137
445306
  t11 = $5[49];
445138
445307
  }
445139
445308
  let t12;
445140
- if ($5[50] !== t10 || $5[51] !== t11) {
445141
- 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", {
445142
445319
  flexDirection: "column",
445143
445320
  children: [
445144
445321
  t10,
445145
- t11
445322
+ t11,
445323
+ t12
445146
445324
  ]
445147
445325
  }, undefined, true, undefined, this);
445148
- $5[50] = t10;
445149
- $5[51] = t11;
445150
- $5[52] = t12;
445326
+ $5[52] = t10;
445327
+ $5[53] = t11;
445328
+ $5[54] = t12;
445329
+ $5[55] = t13;
445151
445330
  } else {
445152
- t12 = $5[52];
445331
+ t13 = $5[55];
445153
445332
  }
445154
- 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);
445155
445347
  }
445156
445348
  function resolveBackendCategory(toolCategory, backend) {
445157
445349
  const hasSplit = !!(backend && toolCategory && backend !== toolCategory);
@@ -445293,7 +445485,8 @@ function buildLiveToolRowProps(tc, extra) {
445293
445485
  suffix,
445294
445486
  suffixColor,
445295
445487
  diff,
445296
- diffStyle: extra?.diffStyle
445488
+ diffStyle: extra?.diffStyle,
445489
+ imageArt: tc.imageArt
445297
445490
  };
445298
445491
  }
445299
445492
  function buildFinalToolRowProps(tc) {
@@ -445354,7 +445547,8 @@ function buildFinalToolRowProps(tc) {
445354
445547
  editResultText,
445355
445548
  suffix,
445356
445549
  suffixColor,
445357
- diff
445550
+ diff,
445551
+ imageArt: tc.imageArt
445358
445552
  };
445359
445553
  }
445360
445554
  var import_compiler_runtime17, EDIT_TOOL_NAMES2;
@@ -445560,7 +445754,7 @@ function SystemMessage(t0) {
445560
445754
  setDone(true);
445561
445755
  return;
445562
445756
  }
445563
- const timer = setTimeout(() => setStep(_temp17), REVEAL_INTERVAL);
445757
+ const timer = setTimeout(() => setStep(_temp18), REVEAL_INTERVAL);
445564
445758
  return () => clearTimeout(timer);
445565
445759
  };
445566
445760
  t5 = [step, totalSteps, done];
@@ -445722,7 +445916,7 @@ function SystemMessage(t0) {
445722
445916
  }
445723
445917
  return t20;
445724
445918
  }
445725
- function _temp17(s2) {
445919
+ function _temp18(s2) {
445726
445920
  return s2 + 1;
445727
445921
  }
445728
445922
  function isFailedEditCall(tc) {
@@ -447247,7 +447441,7 @@ function DripText(t0) {
447247
447441
  }
447248
447442
  return t2;
447249
447443
  }
447250
- function _temp18(tc) {
447444
+ function _temp19(tc) {
447251
447445
  return [tc.id, tc];
447252
447446
  }
447253
447447
  function _temp27(tc_0) {
@@ -447282,7 +447476,7 @@ var init_StreamSegmentList = __esm(async () => {
447282
447476
  const reasoningExpanded = t5 === undefined ? false : t5;
447283
447477
  let t6;
447284
447478
  if ($5[0] !== toolCalls) {
447285
- t6 = new Map(toolCalls.map(_temp18));
447479
+ t6 = new Map(toolCalls.map(_temp19));
447286
447480
  $5[0] = toolCalls;
447287
447481
  $5[1] = t6;
447288
447482
  } else {
@@ -447469,7 +447663,7 @@ function TaskList(t0) {
447469
447663
  }
447470
447664
  let t3;
447471
447665
  if ($5[6] !== tasks) {
447472
- t3 = tasks.filter(_temp19);
447666
+ t3 = tasks.filter(_temp20);
447473
447667
  $5[6] = tasks;
447474
447668
  $5[7] = t3;
447475
447669
  } else {
@@ -447723,7 +447917,7 @@ function _temp37(t_1) {
447723
447917
  function _temp28(t_0) {
447724
447918
  return t_0.status === "in-progress";
447725
447919
  }
447726
- function _temp19(t2) {
447920
+ function _temp20(t2) {
447727
447921
  return t2.status === "done";
447728
447922
  }
447729
447923
  function TaskProgress(t0) {
@@ -447861,7 +448055,7 @@ function PlanProgress(t0) {
447861
448055
  const STATUS_COLORS = t1;
447862
448056
  let t22;
447863
448057
  if ($5[5] !== plan.steps) {
447864
- t22 = plan.steps.filter(_temp20);
448058
+ t22 = plan.steps.filter(_temp21);
447865
448059
  $5[5] = plan.steps;
447866
448060
  $5[6] = t22;
447867
448061
  } else {
@@ -448071,7 +448265,7 @@ function PlanProgress(t0) {
448071
448265
  function _temp29(s_0) {
448072
448266
  return s_0.status === "active";
448073
448267
  }
448074
- function _temp20(s2) {
448268
+ function _temp21(s2) {
448075
448269
  return s2.status === "done";
448076
448270
  }
448077
448271
  var import_compiler_runtime21, STATUS_ICONS, MAX_VISIBLE3 = 7;
@@ -448178,7 +448372,7 @@ function PlanReviewPrompt(t0) {
448178
448372
  if (plan.depth === "light") {
448179
448373
  let t72;
448180
448374
  if ($5[13] !== allOptions) {
448181
- t72 = allOptions.filter(_temp21);
448375
+ t72 = allOptions.filter(_temp30);
448182
448376
  $5[13] = allOptions;
448183
448377
  $5[14] = t72;
448184
448378
  } else {
@@ -448551,7 +448745,7 @@ function PlanReviewPrompt(t0) {
448551
448745
  }
448552
448746
  return t20;
448553
448747
  }
448554
- function _temp21(o3) {
448748
+ function _temp30(o3) {
448555
448749
  return o3.id !== "clear_implement";
448556
448750
  }
448557
448751
  var import_compiler_runtime22, import_react44;
@@ -448888,7 +449082,7 @@ function useChangedFiles(messages) {
448888
449082
  }
448889
449083
  }
448890
449084
  }
448891
- t0 = [...fileMap.values()].sort(_temp30);
449085
+ t0 = [...fileMap.values()].sort(_temp38);
448892
449086
  $5[0] = messages;
448893
449087
  $5[1] = t0;
448894
449088
  } else {
@@ -448896,7 +449090,7 @@ function useChangedFiles(messages) {
448896
449090
  }
448897
449091
  return t0;
448898
449092
  }
448899
- function _temp30(a2, b5) {
449093
+ function _temp38(a2, b5) {
448900
449094
  return a2.path.localeCompare(b5.path);
448901
449095
  }
448902
449096
  function ChangedFilesBar(t0) {
@@ -449258,7 +449452,7 @@ function ChangesSection(t0) {
449258
449452
  const rows = t1;
449259
449453
  let t22;
449260
449454
  if ($5[4] !== files) {
449261
- t22 = files.filter(_temp38);
449455
+ t22 = files.filter(_temp39);
449262
449456
  $5[4] = files;
449263
449457
  $5[5] = t22;
449264
449458
  } else {
@@ -449480,7 +449674,7 @@ function ChangesSection(t0) {
449480
449674
  }
449481
449675
  return t13;
449482
449676
  }
449483
- function _temp38(f3) {
449677
+ function _temp39(f3) {
449484
449678
  return f3.created;
449485
449679
  }
449486
449680
  function ChangesPanel(t0) {
@@ -449600,7 +449794,7 @@ function ScanDivider(t0) {
449600
449794
  if ($5[8] !== chars) {
449601
449795
  t4 = /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("box", {
449602
449796
  flexDirection: "row",
449603
- children: chars.map(_temp39)
449797
+ children: chars.map(_temp40)
449604
449798
  }, undefined, false, undefined, this);
449605
449799
  $5[8] = chars;
449606
449800
  $5[9] = t4;
@@ -449609,7 +449803,7 @@ function ScanDivider(t0) {
449609
449803
  }
449610
449804
  return t4;
449611
449805
  }
449612
- function _temp39(c, i_0) {
449806
+ function _temp40(c, i_0) {
449613
449807
  return /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("text", {
449614
449808
  fg: c.color,
449615
449809
  children: c.ch
@@ -449817,7 +450011,7 @@ function LandingPage(t0) {
449817
450011
  import_react50.useEffect(t6, t7);
449818
450012
  let t8;
449819
450013
  if ($5[15] !== bootProviders) {
449820
- t8 = bootProviders.filter(_temp310);
450014
+ t8 = bootProviders.filter(_temp311);
449821
450015
  $5[15] = bootProviders;
449822
450016
  $5[16] = t8;
449823
450017
  } else {
@@ -450232,7 +450426,7 @@ function _temp53(p_1) {
450232
450426
  function _temp46(p_0) {
450233
450427
  return !p_0.available;
450234
450428
  }
450235
- function _temp310(p2) {
450429
+ function _temp311(p2) {
450236
450430
  return p2.available;
450237
450431
  }
450238
450432
  function _temp211(s2) {
@@ -460411,119 +460605,62 @@ var init_DiagnosePopup = __esm(async () => {
460411
460605
  });
460412
460606
 
460413
460607
  // src/components/modals/wizard/data.ts
460414
- 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;
460415
460609
  var init_data = __esm(() => {
460416
- STEPS = ["welcome", "setup", "features", "shortcuts", "theme", "ready"];
460610
+ STEPS = ["welcome", "setup", "intelligence", "workflow", "shortcuts", "theme", "ready"];
460417
460611
  STEP_LABELS = {
460418
460612
  welcome: "Welcome",
460419
460613
  setup: "Provider & Key",
460420
- features: "Features",
460614
+ intelligence: "Intelligence",
460615
+ workflow: "Workflow",
460421
460616
  shortcuts: "Shortcuts",
460422
460617
  theme: "Theme",
460423
460618
  ready: "Ready"
460424
460619
  };
460425
- FEATURES = [{
460426
- section: "Editor & Intelligence",
460427
- items: [{
460428
- ic: "editor",
460429
- title: "Editor Panel",
460430
- keys: "Ctrl+E",
460431
- desc: "Built-in Neovim with LSP, diagnostics, hover, go-to-def"
460432
- }, {
460433
- ic: "search",
460434
- title: "Soul Map",
460435
- keys: "/repo-map",
460436
- desc: "AST index of your entire codebase for smart context"
460437
- }, {
460438
- ic: "brain",
460439
- title: "Code Intelligence",
460440
- keys: "/lsp",
460441
- desc: "Tree-sitter + LSP \u2014 symbols, refs, rename"
460442
- }]
460443
- }, {
460444
- section: "Workflow",
460445
- items: [{
460446
- ic: "chat",
460447
- title: "Tabs & Sessions",
460448
- keys: "Ctrl+T / Ctrl+P",
460449
- desc: "Multiple chats, browse & restore sessions"
460450
- }, {
460451
- ic: "git",
460452
- title: "Git Integration",
460453
- keys: "Ctrl+G",
460454
- desc: "Commit, diff, branch \u2014 AI adds co-author tag"
460455
- }, {
460456
- ic: "ai",
460457
- title: "Task Router",
460458
- keys: "/router",
460459
- desc: "Route coding, search, compact to different models"
460460
- }, {
460461
- ic: "skills",
460462
- title: "Skills & Plugins",
460463
- keys: "Ctrl+S",
460464
- desc: "Browse & install community skills"
460465
- }]
460466
- }];
460467
- MODES = ["auto", "default", "architect", "plan", "socratic", "challenge"];
460468
460620
  SHORTCUTS2 = [{
460469
- section: "Navigation",
460621
+ section: "Most Used",
460470
460622
  items: [{
460471
- keys: "Ctrl+L",
460472
- desc: "Model selector",
460473
- slash: false
460474
- }, {
460475
460623
  keys: "Ctrl+K",
460476
460624
  desc: "Command palette \u2014 search all commands",
460477
460625
  slash: false
460478
460626
  }, {
460479
- keys: "Ctrl+O",
460480
- desc: "Expand/collapse tool output",
460627
+ keys: "Ctrl+L",
460628
+ desc: "Switch model",
460481
460629
  slash: false
460482
460630
  }, {
460483
460631
  keys: "Ctrl+E",
460484
460632
  desc: "Toggle editor panel",
460485
460633
  slash: false
460486
- }]
460487
- }, {
460488
- section: "Workflow",
460489
- items: [{
460490
- keys: "Ctrl+G",
460491
- desc: "Git menu \u2014 commit, diff, branch",
460492
- slash: false
460493
460634
  }, {
460494
460635
  keys: "Ctrl+T",
460495
460636
  desc: "New tab",
460496
460637
  slash: false
460497
- }, {
460498
- keys: "Ctrl+N",
460499
- desc: "New session (clear chat)",
460500
- slash: false
460501
460638
  }, {
460502
460639
  keys: "Ctrl+W",
460503
460640
  desc: "Close tab",
460504
460641
  slash: false
460505
460642
  }, {
460506
- keys: "Ctrl+D",
460507
- desc: "Cycle agent mode",
460643
+ keys: "Ctrl+G",
460644
+ desc: "Git menu",
460508
460645
  slash: false
460509
460646
  }, {
460510
- keys: "Ctrl+P",
460511
- desc: "Browse & restore sessions",
460647
+ keys: "Ctrl+S",
460648
+ desc: "Skills browser",
460512
460649
  slash: false
460513
460650
  }, {
460514
- keys: "Ctrl+S",
460515
- desc: "Search & install skills",
460651
+ keys: "Ctrl+D",
460652
+ desc: "Cycle mode",
460516
460653
  slash: false
460517
460654
  }, {
460518
460655
  keys: "Ctrl+C",
460519
- desc: "Cancel current generation",
460656
+ desc: "Cancel generation",
460520
460657
  slash: false
460521
460658
  }]
460522
460659
  }, {
460523
- section: "Essential Commands",
460660
+ section: "Quick Commands",
460524
460661
  items: [{
460525
460662
  keys: "/help",
460526
- desc: "Command palette \u2014 all commands",
460663
+ desc: "All commands & shortcuts",
460527
460664
  slash: true
460528
460665
  }, {
460529
460666
  keys: "/setup",
@@ -460531,22 +460668,76 @@ var init_data = __esm(() => {
460531
460668
  slash: true
460532
460669
  }, {
460533
460670
  keys: "/settings",
460534
- desc: "Settings hub \u2014 all options",
460671
+ desc: "Settings hub \u2014 all options in one place",
460535
460672
  slash: true
460536
460673
  }, {
460537
460674
  keys: "/keys",
460538
460675
  desc: "Manage API keys",
460539
460676
  slash: true
460540
- }, {
460541
- keys: "/privacy",
460542
- desc: "Manage forbidden file patterns",
460543
- slash: true
460544
- }, {
460545
- keys: "/sessions",
460546
- desc: "Browse & restore sessions",
460547
- slash: true
460548
460677
  }]
460549
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
+ }];
460550
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"];
460551
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"'];
460552
460743
  });
@@ -461022,9 +461213,9 @@ var init_primitives = __esm(async () => {
461022
461213
  });
461023
461214
  });
461024
461215
 
461025
- // src/components/modals/wizard/steps/FeaturesStep.tsx
461026
- var import_compiler_runtime46, import_react79, FeaturesStep;
461027
- 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 () => {
461028
461219
  init_icons();
461029
461220
  init_theme();
461030
461221
  init_shared2();
@@ -461036,8 +461227,8 @@ var init_FeaturesStep = __esm(async () => {
461036
461227
  ]);
461037
461228
  import_compiler_runtime46 = __toESM(require_compiler_runtime(), 1);
461038
461229
  import_react79 = __toESM(require_react(), 1);
461039
- FeaturesStep = import_react79.memo(function FeaturesStep2(t0) {
461040
- const $5 = import_compiler_runtime46.c(41);
461230
+ IntelligenceStep = import_react79.memo(function IntelligenceStep2(t0) {
461231
+ const $5 = import_compiler_runtime46.c(27);
461041
461232
  const {
461042
461233
  iw
461043
461234
  } = t0;
@@ -461057,200 +461248,156 @@ var init_FeaturesStep = __esm(async () => {
461057
461248
  }
461058
461249
  let t22;
461059
461250
  if ($5[2] === Symbol.for("react.memo_cache_sentinel")) {
461060
- t22 = icon("tools");
461251
+ t22 = icon("brain");
461061
461252
  $5[2] = t22;
461062
461253
  } else {
461063
461254
  t22 = $5[2];
461064
461255
  }
461065
461256
  let t3;
461257
+ let t4;
461066
461258
  if ($5[3] !== iw) {
461067
461259
  t3 = /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV(StepHeader, {
461068
461260
  iw,
461069
461261
  ic: t22,
461070
- title: "Power Features"
461262
+ title: "Codebase Intelligence"
461263
+ }, undefined, false, undefined, this);
461264
+ t4 = /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV(Gap, {
461265
+ iw
461071
461266
  }, undefined, false, undefined, this);
461072
461267
  $5[3] = iw;
461073
461268
  $5[4] = t3;
461269
+ $5[5] = t4;
461074
461270
  } else {
461075
461271
  t3 = $5[4];
461076
- }
461077
- let t4;
461078
- if ($5[5] !== bg2 || $5[6] !== iw) {
461079
- t4 = FEATURES.map((group) => /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("box", {
461080
- flexDirection: "column",
461081
- backgroundColor: bg2,
461082
- children: [
461083
- /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV(Gap, {
461084
- iw
461085
- }, undefined, false, undefined, this),
461086
- /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV(SectionLabel, {
461087
- iw,
461088
- label: group.section
461089
- }, undefined, false, undefined, this),
461090
- group.items.map((f3) => /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV(Feat, {
461091
- iw,
461092
- ic: icon(f3.ic),
461093
- title: f3.title,
461094
- keys: f3.keys,
461095
- desc: f3.desc
461096
- }, f3.title, false, undefined, this))
461097
- ]
461098
- }, group.section, true, undefined, this));
461099
- $5[5] = bg2;
461100
- $5[6] = iw;
461101
- $5[7] = t4;
461102
- } else {
461103
- t4 = $5[7];
461272
+ t4 = $5[5];
461104
461273
  }
461105
461274
  let t5;
461106
- let t6;
461107
- if ($5[8] !== iw) {
461108
- t5 = /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV(Gap, {
461109
- iw
461110
- }, undefined, false, undefined, this);
461111
- t6 = /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV(SectionLabel, {
461112
- iw,
461113
- label: "Modes"
461114
- }, undefined, false, undefined, this);
461115
- $5[8] = iw;
461116
- $5[9] = t5;
461117
- $5[10] = t6;
461118
- } else {
461119
- t5 = $5[9];
461120
- t6 = $5[10];
461121
- }
461122
- const t7 = t2.textDim;
461123
- let t8;
461124
- if ($5[11] !== t2.warning) {
461125
- t8 = /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("span", {
461126
- fg: t2.warning,
461127
- children: MODES[0]
461128
- }, undefined, false, undefined, this);
461129
- $5[11] = t2.warning;
461130
- $5[12] = t8;
461131
- } else {
461132
- t8 = $5[12];
461133
- }
461134
- let t9;
461135
- if ($5[13] === Symbol.for("react.memo_cache_sentinel")) {
461136
- t9 = MODES.slice(1).join(" \xB7 ");
461137
- $5[13] = t9;
461138
- } else {
461139
- t9 = $5[13];
461140
- }
461141
- let t10;
461142
- if ($5[14] !== bg2 || $5[15] !== t2.textDim || $5[16] !== t8) {
461143
- t10 = /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("text", {
461144
- fg: t7,
461275
+ if ($5[6] !== bg2 || $5[7] !== t2.textSecondary) {
461276
+ t5 = /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("text", {
461277
+ fg: t2.textSecondary,
461145
461278
  bg: bg2,
461146
461279
  children: [
461147
461280
  " ",
461148
- t8,
461149
- ` \xB7 ${t9}`
461281
+ "SoulForge understands your code before the AI even reads it:"
461150
461282
  ]
461151
461283
  }, undefined, true, undefined, this);
461152
- $5[14] = bg2;
461153
- $5[15] = t2.textDim;
461154
- $5[16] = t8;
461155
- $5[17] = t10;
461284
+ $5[6] = bg2;
461285
+ $5[7] = t2.textSecondary;
461286
+ $5[8] = t5;
461156
461287
  } else {
461157
- t10 = $5[17];
461288
+ t5 = $5[8];
461158
461289
  }
461159
- let t11;
461160
- if ($5[18] !== iw || $5[19] !== t10) {
461161
- 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, {
461162
461293
  w: iw,
461163
- children: t10
461164
- }, undefined, false, undefined, this);
461165
- $5[18] = iw;
461166
- $5[19] = t10;
461167
- $5[20] = t11;
461168
- } else {
461169
- t11 = $5[20];
461170
- }
461171
- let t12;
461172
- if ($5[21] !== t2.info) {
461173
- t12 = /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("span", {
461174
- fg: t2.info,
461175
- attributes: BOLD3,
461176
- children: "Ctrl+D"
461177
- }, undefined, false, undefined, this);
461178
- $5[21] = t2.info;
461179
- $5[22] = t12;
461180
- } else {
461181
- t12 = $5[22];
461182
- }
461183
- let t13;
461184
- if ($5[23] !== t2.brand) {
461185
- t13 = /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("span", {
461186
- fg: t2.brand,
461187
- children: "/mode"
461294
+ children: t5
461188
461295
  }, undefined, false, undefined, this);
461189
- $5[23] = t2.brand;
461190
- $5[24] = t13;
461296
+ $5[9] = iw;
461297
+ $5[10] = t5;
461298
+ $5[11] = t6;
461191
461299
  } else {
461192
- t13 = $5[24];
461300
+ t6 = $5[11];
461193
461301
  }
461194
- let t14;
461195
- if ($5[25] !== bg2 || $5[26] !== t2.textDim || $5[27] !== t12 || $5[28] !== t13) {
461196
- t14 = /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("text", {
461197
- fg: t2.textDim,
461198
- 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,
461199
461307
  children: [
461200
- " ",
461201
- "Cycle with",
461202
- " ",
461203
- t12,
461204
- " ",
461205
- "or type ",
461206
- 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))
461207
461366
  ]
461208
- }, undefined, true, undefined, this);
461209
- $5[25] = bg2;
461210
- $5[26] = t2.textDim;
461211
- $5[27] = t12;
461212
- $5[28] = t13;
461213
- $5[29] = t14;
461214
- } else {
461215
- t14 = $5[29];
461216
- }
461217
- let t15;
461218
- if ($5[30] !== iw || $5[31] !== t14) {
461219
- t15 = /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV(PopupRow, {
461220
- w: iw,
461221
- children: t14
461222
- }, undefined, false, undefined, this);
461223
- $5[30] = iw;
461224
- $5[31] = t14;
461225
- $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;
461226
461377
  } else {
461227
- t15 = $5[32];
461378
+ t7 = $5[20];
461228
461379
  }
461229
- let t16;
461230
- if ($5[33] !== t1 || $5[34] !== t11 || $5[35] !== t15 || $5[36] !== t3 || $5[37] !== t4 || $5[38] !== t5 || $5[39] !== t6) {
461231
- 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, {
461232
461383
  children: [
461233
461384
  t1,
461234
461385
  t3,
461235
461386
  t4,
461236
- t5,
461237
461387
  t6,
461238
- t11,
461239
- t15
461388
+ t7
461240
461389
  ]
461241
461390
  }, undefined, true, undefined, this);
461242
- $5[33] = t1;
461243
- $5[34] = t11;
461244
- $5[35] = t15;
461245
- $5[36] = t3;
461246
- $5[37] = t4;
461247
- $5[38] = t5;
461248
- $5[39] = t6;
461249
- $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;
461250
461397
  } else {
461251
- t16 = $5[40];
461398
+ t8 = $5[26];
461252
461399
  }
461253
- return t16;
461400
+ return t8;
461254
461401
  });
461255
461402
  });
461256
461403
 
@@ -462474,7 +462621,7 @@ var init_ShortcutsStep = __esm(async () => {
462474
462621
  import_compiler_runtime49 = __toESM(require_compiler_runtime(), 1);
462475
462622
  import_react83 = __toESM(require_react(), 1);
462476
462623
  ShortcutsStep = import_react83.memo(function ShortcutsStep2(t0) {
462477
- const $5 = import_compiler_runtime49.c(13);
462624
+ const $5 = import_compiler_runtime49.c(31);
462478
462625
  const {
462479
462626
  iw
462480
462627
  } = t0;
@@ -462512,7 +462659,7 @@ var init_ShortcutsStep = __esm(async () => {
462512
462659
  t3 = $5[4];
462513
462660
  }
462514
462661
  let t4;
462515
- 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) {
462516
462663
  t4 = SHORTCUTS2.map((group) => /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("box", {
462517
462664
  flexDirection: "column",
462518
462665
  backgroundColor: bg2,
@@ -462547,28 +462694,104 @@ var init_ShortcutsStep = __esm(async () => {
462547
462694
  }, group.section, true, undefined, this));
462548
462695
  $5[5] = bg2;
462549
462696
  $5[6] = iw;
462550
- $5[7] = t2;
462551
- $5[8] = t4;
462697
+ $5[7] = t2.brand;
462698
+ $5[8] = t2.info;
462699
+ $5[9] = t2.textSecondary;
462700
+ $5[10] = t4;
462552
462701
  } else {
462553
- t4 = $5[8];
462702
+ t4 = $5[10];
462554
462703
  }
462555
462704
  let t5;
462556
- if ($5[9] !== t1 || $5[10] !== t3 || $5[11] !== t4) {
462557
- 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, {
462558
462777
  children: [
462559
462778
  t1,
462560
462779
  t3,
462561
- t4
462780
+ t4,
462781
+ t5,
462782
+ t9
462562
462783
  ]
462563
462784
  }, undefined, true, undefined, this);
462564
- $5[9] = t1;
462565
- $5[10] = t3;
462566
- $5[11] = t4;
462567
- $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;
462568
462791
  } else {
462569
- t5 = $5[12];
462792
+ t10 = $5[30];
462570
462793
  }
462571
- return t5;
462794
+ return t10;
462572
462795
  });
462573
462796
  });
462574
462797
 
@@ -463513,6 +463736,267 @@ var init_WelcomeStep = __esm(async () => {
463513
463736
  });
463514
463737
  });
463515
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
+
463516
464000
  // src/components/modals/wizard/index.tsx
463517
464001
  function _temp74(i4) {
463518
464002
  return i4 + 1;
@@ -463520,7 +464004,7 @@ function _temp74(i4) {
463520
464004
  function _temp226(i_0) {
463521
464005
  return i_0 - 1;
463522
464006
  }
463523
- var import_compiler_runtime52, import_react88, FirstRunWizard;
464007
+ var import_compiler_runtime53, import_react89, FirstRunWizard;
463524
464008
  var init_wizard = __esm(async () => {
463525
464009
  init_theme();
463526
464010
  init_shared2();
@@ -463531,17 +464015,18 @@ var init_wizard = __esm(async () => {
463531
464015
  await __promiseAll([
463532
464016
  init_react2(),
463533
464017
  init_primitives(),
463534
- init_FeaturesStep(),
464018
+ init_IntelligenceStep(),
463535
464019
  init_ReadyStep(),
463536
464020
  init_SetupStep(),
463537
464021
  init_ShortcutsStep(),
463538
464022
  init_ThemeStep(),
463539
- init_WelcomeStep()
464023
+ init_WelcomeStep(),
464024
+ init_WorkflowStep()
463540
464025
  ]);
463541
- import_compiler_runtime52 = __toESM(require_compiler_runtime(), 1);
463542
- import_react88 = __toESM(require_react(), 1);
463543
- FirstRunWizard = import_react88.memo(function FirstRunWizard2(t0) {
463544
- 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);
463545
464030
  const {
463546
464031
  visible,
463547
464032
  hasModel,
@@ -463555,10 +464040,10 @@ var init_wizard = __esm(async () => {
463555
464040
  } = useTerminalDimensions();
463556
464041
  const pw = Math.min(MAX_W, Math.floor(termCols * 0.92));
463557
464042
  const iw = pw - 2;
463558
- const [stepIdx, setStepIdx] = import_react88.useState(0);
464043
+ const [stepIdx, setStepIdx] = import_react89.useState(0);
463559
464044
  const step = STEPS[stepIdx] ?? "welcome";
463560
- const [setupActive, setSetupActive] = import_react88.useState(false);
463561
- const hasOpened = import_react88.useRef(false);
464045
+ const [setupActive, setSetupActive] = import_react89.useState(false);
464046
+ const hasOpened = import_react89.useRef(false);
463562
464047
  let t1;
463563
464048
  let t2;
463564
464049
  if ($5[0] !== visible) {
@@ -463580,7 +464065,7 @@ var init_wizard = __esm(async () => {
463580
464065
  t1 = $5[1];
463581
464066
  t2 = $5[2];
463582
464067
  }
463583
- import_react88.useEffect(t1, t2);
464068
+ import_react89.useEffect(t1, t2);
463584
464069
  let t3;
463585
464070
  if ($5[3] !== onClose || $5[4] !== stepIdx) {
463586
464071
  t3 = () => {
@@ -463717,7 +464202,7 @@ var init_wizard = __esm(async () => {
463717
464202
  }
463718
464203
  let t10;
463719
464204
  if ($5[30] !== iw || $5[31] !== step) {
463720
- t10 = step === "features" && /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV(FeaturesStep, {
464205
+ t10 = step === "intelligence" && /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV(IntelligenceStep, {
463721
464206
  iw
463722
464207
  }, undefined, false, undefined, this);
463723
464208
  $5[30] = iw;
@@ -463728,7 +464213,7 @@ var init_wizard = __esm(async () => {
463728
464213
  }
463729
464214
  let t11;
463730
464215
  if ($5[33] !== iw || $5[34] !== step) {
463731
- t11 = step === "shortcuts" && /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV(ShortcutsStep, {
464216
+ t11 = step === "workflow" && /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV(WorkflowStep, {
463732
464217
  iw
463733
464218
  }, undefined, false, undefined, this);
463734
464219
  $5[33] = iw;
@@ -463738,33 +464223,44 @@ var init_wizard = __esm(async () => {
463738
464223
  t11 = $5[35];
463739
464224
  }
463740
464225
  let t12;
463741
- if ($5[36] !== iw || $5[37] !== setupActive || $5[38] !== step) {
463742
- t12 = step === "theme" && /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV(ThemeStep, {
463743
- iw,
463744
- active: setupActive,
463745
- setActive: setSetupActive
464226
+ if ($5[36] !== iw || $5[37] !== step) {
464227
+ t12 = step === "shortcuts" && /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV(ShortcutsStep, {
464228
+ iw
463746
464229
  }, undefined, false, undefined, this);
463747
464230
  $5[36] = iw;
463748
- $5[37] = setupActive;
463749
- $5[38] = step;
463750
- $5[39] = t12;
464231
+ $5[37] = step;
464232
+ $5[38] = t12;
463751
464233
  } else {
463752
- t12 = $5[39];
464234
+ t12 = $5[38];
463753
464235
  }
463754
464236
  let t13;
463755
- if ($5[40] !== iw || $5[41] !== step) {
463756
- t13 = step === "ready" && /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV(ReadyStep, {
463757
- 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
463758
464242
  }, undefined, false, undefined, this);
463759
- $5[40] = iw;
464243
+ $5[39] = iw;
464244
+ $5[40] = setupActive;
463760
464245
  $5[41] = step;
463761
464246
  $5[42] = t13;
463762
464247
  } else {
463763
464248
  t13 = $5[42];
463764
464249
  }
463765
464250
  let t14;
463766
- if ($5[43] !== t10 || $5[44] !== t11 || $5[45] !== t12 || $5[46] !== t13 || $5[47] !== t8 || $5[48] !== t9) {
463767
- 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", {
463768
464264
  flexDirection: "column",
463769
464265
  flexGrow: 1,
463770
464266
  overflow: "hidden",
@@ -463774,46 +464270,48 @@ var init_wizard = __esm(async () => {
463774
464270
  t10,
463775
464271
  t11,
463776
464272
  t12,
463777
- t13
464273
+ t13,
464274
+ t14
463778
464275
  ]
463779
464276
  }, undefined, true, undefined, this);
463780
- $5[43] = t10;
463781
- $5[44] = t11;
463782
- $5[45] = t12;
463783
- $5[46] = t13;
463784
- $5[47] = t8;
463785
- $5[48] = t9;
463786
- $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;
463787
464285
  } else {
463788
- t14 = $5[49];
464286
+ t15 = $5[53];
463789
464287
  }
463790
- let t15;
463791
- if ($5[50] !== iw) {
463792
- 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, {
463793
464291
  iw
463794
464292
  }, undefined, false, undefined, this);
463795
- $5[50] = iw;
463796
- $5[51] = t15;
464293
+ $5[54] = iw;
464294
+ $5[55] = t16;
463797
464295
  } else {
463798
- t15 = $5[51];
464296
+ t16 = $5[55];
463799
464297
  }
463800
- let t16;
463801
- if ($5[52] !== iw || $5[53] !== step || $5[54] !== stepIdx) {
463802
- 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, {
463803
464301
  iw,
463804
464302
  stepIdx,
463805
464303
  step
463806
464304
  }, undefined, false, undefined, this);
463807
- $5[52] = iw;
463808
- $5[53] = step;
463809
- $5[54] = stepIdx;
463810
- $5[55] = t16;
464305
+ $5[56] = iw;
464306
+ $5[57] = step;
464307
+ $5[58] = stepIdx;
464308
+ $5[59] = t17;
463811
464309
  } else {
463812
- t16 = $5[55];
464310
+ t17 = $5[59];
463813
464311
  }
463814
- let t17;
463815
- 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) {
463816
- 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, {
463817
464315
  children: /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("box", {
463818
464316
  flexDirection: "column",
463819
464317
  borderStyle: "rounded",
@@ -463825,26 +464323,26 @@ var init_wizard = __esm(async () => {
463825
464323
  children: [
463826
464324
  t62,
463827
464325
  t7,
463828
- t14,
463829
464326
  t15,
463830
- t16
464327
+ t16,
464328
+ t17
463831
464329
  ]
463832
464330
  }, undefined, true, undefined, this)
463833
464331
  }, undefined, false, undefined, this);
463834
- $5[56] = bg2;
463835
- $5[57] = maxH;
463836
- $5[58] = pw;
463837
- $5[59] = t6.brandAlt;
463838
- $5[60] = t14;
463839
- $5[61] = t15;
463840
- $5[62] = t16;
463841
- $5[63] = t62;
463842
- $5[64] = t7;
463843
- $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;
463844
464342
  } else {
463845
- t17 = $5[65];
464343
+ t18 = $5[69];
463846
464344
  }
463847
- return t17;
464345
+ return t18;
463848
464346
  });
463849
464347
  });
463850
464348
 
@@ -463855,7 +464353,7 @@ var init_FirstRunWizard = __esm(async () => {
463855
464353
 
463856
464354
  // src/components/modals/GitCommitModal.tsx
463857
464355
  function GitCommitModal(t0) {
463858
- const $5 = import_compiler_runtime53.c(109);
464356
+ const $5 = import_compiler_runtime54.c(109);
463859
464357
  const {
463860
464358
  visible,
463861
464359
  cwd: cwd2,
@@ -463870,7 +464368,7 @@ function GitCommitModal(t0) {
463870
464368
  } = useTerminalDimensions();
463871
464369
  const popupWidth = Math.min(MAX_POPUP_WIDTH7, Math.floor(termCols * 0.8));
463872
464370
  const innerW = popupWidth - 2;
463873
- const [message, setMessage] = import_react90.useState("");
464371
+ const [message, setMessage] = import_react91.useState("");
463874
464372
  let t1;
463875
464373
  if ($5[0] === Symbol.for("react.memo_cache_sentinel")) {
463876
464374
  t1 = [];
@@ -463878,7 +464376,7 @@ function GitCommitModal(t0) {
463878
464376
  } else {
463879
464377
  t1 = $5[0];
463880
464378
  }
463881
- const [stagedFiles, setStagedFiles] = import_react90.useState(t1);
464379
+ const [stagedFiles, setStagedFiles] = import_react91.useState(t1);
463882
464380
  let t22;
463883
464381
  if ($5[1] === Symbol.for("react.memo_cache_sentinel")) {
463884
464382
  t22 = [];
@@ -463886,7 +464384,7 @@ function GitCommitModal(t0) {
463886
464384
  } else {
463887
464385
  t22 = $5[1];
463888
464386
  }
463889
- const [modifiedFiles, setModifiedFiles] = import_react90.useState(t22);
464387
+ const [modifiedFiles, setModifiedFiles] = import_react91.useState(t22);
463890
464388
  let t3;
463891
464389
  if ($5[2] === Symbol.for("react.memo_cache_sentinel")) {
463892
464390
  t3 = [];
@@ -463894,10 +464392,10 @@ function GitCommitModal(t0) {
463894
464392
  } else {
463895
464393
  t3 = $5[2];
463896
464394
  }
463897
- const [untrackedFiles, setUntrackedFiles] = import_react90.useState(t3);
463898
- const [diffSummary, setDiffSummary] = import_react90.useState("");
463899
- const [error48, setError] = import_react90.useState(null);
463900
- 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);
463901
464399
  let t4;
463902
464400
  let t5;
463903
464401
  if ($5[3] !== cwd2 || $5[4] !== visible) {
@@ -463927,7 +464425,7 @@ function GitCommitModal(t0) {
463927
464425
  t4 = $5[5];
463928
464426
  t5 = $5[6];
463929
464427
  }
463930
- import_react90.useEffect(t4, t5);
464428
+ import_react91.useEffect(t4, t5);
463931
464429
  let t6;
463932
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) {
463933
464431
  t6 = async () => {
@@ -464397,7 +464895,7 @@ function _temp227(prev) {
464397
464895
  return !prev;
464398
464896
  }
464399
464897
  function _temp76() {}
464400
- var import_compiler_runtime53, import_react90, MAX_POPUP_WIDTH7 = 64;
464898
+ var import_compiler_runtime54, import_react91, MAX_POPUP_WIDTH7 = 64;
464401
464899
  var init_GitCommitModal = __esm(async () => {
464402
464900
  init_status();
464403
464901
  init_icons();
@@ -464408,13 +464906,13 @@ var init_GitCommitModal = __esm(async () => {
464408
464906
  init_core4(),
464409
464907
  init_react2()
464410
464908
  ]);
464411
- import_compiler_runtime53 = __toESM(require_compiler_runtime(), 1);
464412
- import_react90 = __toESM(require_react(), 1);
464909
+ import_compiler_runtime54 = __toESM(require_compiler_runtime(), 1);
464910
+ import_react91 = __toESM(require_react(), 1);
464413
464911
  });
464414
464912
 
464415
464913
  // src/components/modals/GitMenu.tsx
464416
464914
  function GitMenu(t0) {
464417
- const $5 = import_compiler_runtime54.c(77);
464915
+ const $5 = import_compiler_runtime55.c(77);
464418
464916
  const {
464419
464917
  visible,
464420
464918
  cwd: cwd2,
@@ -464431,9 +464929,9 @@ function GitMenu(t0) {
464431
464929
  const containerRows = termRows - 2;
464432
464930
  const popupWidth = Math.min(MAX_POPUP_WIDTH8, Math.floor(termCols * 0.8));
464433
464931
  const maxVisible = Math.max(4, Math.floor(containerRows * 0.8) - CHROME_ROWS11);
464434
- const [cursor, setCursor] = import_react92.useState(0);
464435
- const [scrollOffset, setScrollOffset] = import_react92.useState(0);
464436
- 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);
464437
464935
  let t1;
464438
464936
  if ($5[0] !== maxVisible) {
464439
464937
  t1 = (next) => {
@@ -464868,7 +465366,7 @@ function GitMenu(t0) {
464868
465366
  function _temp77(e) {
464869
465367
  return `${e.hash} ${e.subject} (${e.date})`;
464870
465368
  }
464871
- 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;
464872
465370
  var init_GitMenu = __esm(async () => {
464873
465371
  init_status();
464874
465372
  init_icons();
@@ -464879,8 +465377,8 @@ var init_GitMenu = __esm(async () => {
464879
465377
  init_core4(),
464880
465378
  init_react2()
464881
465379
  ]);
464882
- import_compiler_runtime54 = __toESM(require_compiler_runtime(), 1);
464883
- import_react92 = __toESM(require_react(), 1);
465380
+ import_compiler_runtime55 = __toESM(require_compiler_runtime(), 1);
465381
+ import_react93 = __toESM(require_react(), 1);
464884
465382
  MENU_ITEMS = [{
464885
465383
  key: "c",
464886
465384
  label: "Commit",
@@ -464914,7 +465412,7 @@ var init_GitMenu = __esm(async () => {
464914
465412
 
464915
465413
  // src/components/modals/InfoPopup.tsx
464916
465414
  function InfoPopup(t0) {
464917
- const $5 = import_compiler_runtime55.c(81);
465415
+ const $5 = import_compiler_runtime56.c(81);
464918
465416
  const {
464919
465417
  visible,
464920
465418
  config: config2,
@@ -464932,7 +465430,7 @@ function InfoPopup(t0) {
464932
465430
  const labelW = config2?.labelWidth ?? 20;
464933
465431
  const maxVisible = Math.max(6, Math.floor(containerRows * 0.8) - CHROME_ROWS12);
464934
465432
  const maxTextW = innerW - 4;
464935
- const [scrollOffset, setScrollOffset] = import_react94.useState(0);
465433
+ const [scrollOffset, setScrollOffset] = import_react95.useState(0);
464936
465434
  let t1;
464937
465435
  let t22;
464938
465436
  if ($5[0] !== visible) {
@@ -464949,7 +465447,7 @@ function InfoPopup(t0) {
464949
465447
  t1 = $5[1];
464950
465448
  t22 = $5[2];
464951
465449
  }
464952
- import_react94.useEffect(t1, t22);
465450
+ import_react95.useEffect(t1, t22);
464953
465451
  let t3;
464954
465452
  if ($5[3] !== config2 || $5[4] !== maxVisible || $5[5] !== onClose || $5[6] !== visible) {
464955
465453
  t3 = (evt) => {
@@ -465348,7 +465846,7 @@ function _temp228(text3, max) {
465348
465846
  function _temp78(prev) {
465349
465847
  return Math.max(0, prev - 1);
465350
465848
  }
465351
- var import_compiler_runtime55, import_react94, CHROME_ROWS12 = 6;
465849
+ var import_compiler_runtime56, import_react95, CHROME_ROWS12 = 6;
465352
465850
  var init_InfoPopup = __esm(async () => {
465353
465851
  init_theme();
465354
465852
  init_shared2();
@@ -465357,8 +465855,8 @@ var init_InfoPopup = __esm(async () => {
465357
465855
  init_core4(),
465358
465856
  init_react2()
465359
465857
  ]);
465360
- import_compiler_runtime55 = __toESM(require_compiler_runtime(), 1);
465361
- import_react94 = __toESM(require_react(), 1);
465858
+ import_compiler_runtime56 = __toESM(require_compiler_runtime(), 1);
465859
+ import_react95 = __toESM(require_react(), 1);
465362
465860
  });
465363
465861
 
465364
465862
  // src/hooks/useAllProviderModels.ts
@@ -465370,7 +465868,7 @@ function flattenGrouped(r4) {
465370
465868
  return out2;
465371
465869
  }
465372
465870
  function useAllProviderModels(active) {
465373
- const $5 = import_compiler_runtime56.c(8);
465871
+ const $5 = import_compiler_runtime57.c(8);
465374
465872
  let t0;
465375
465873
  if ($5[0] === Symbol.for("react.memo_cache_sentinel")) {
465376
465874
  t0 = {};
@@ -465378,8 +465876,8 @@ function useAllProviderModels(active) {
465378
465876
  } else {
465379
465877
  t0 = $5[0];
465380
465878
  }
465381
- const [providerData, setProviderData] = import_react95.useState(t0);
465382
- const [availability, setAvailability] = import_react95.useState(_temp79);
465879
+ const [providerData, setProviderData] = import_react96.useState(t0);
465880
+ const [availability, setAvailability] = import_react96.useState(_temp79);
465383
465881
  let t1;
465384
465882
  let t2;
465385
465883
  if ($5[1] !== active) {
@@ -465456,7 +465954,7 @@ function useAllProviderModels(active) {
465456
465954
  t1 = $5[2];
465457
465955
  t2 = $5[3];
465458
465956
  }
465459
- import_react95.useEffect(t1, t2);
465957
+ import_react96.useEffect(t1, t2);
465460
465958
  const anyLoading = Object.values(providerData).some(_temp325);
465461
465959
  let t3;
465462
465960
  if ($5[4] !== anyLoading || $5[5] !== availability || $5[6] !== providerData) {
@@ -465493,13 +465991,13 @@ function _temp79() {
465493
465991
  }
465494
465992
  return map2;
465495
465993
  }
465496
- var import_compiler_runtime56, import_react95, ENV_SK;
465994
+ var import_compiler_runtime57, import_react96, ENV_SK;
465497
465995
  var init_useAllProviderModels = __esm(() => {
465498
465996
  init_models();
465499
465997
  init_provider();
465500
465998
  init_secrets();
465501
- import_compiler_runtime56 = __toESM(require_compiler_runtime(), 1);
465502
- import_react95 = __toESM(require_react(), 1);
465999
+ import_compiler_runtime57 = __toESM(require_compiler_runtime(), 1);
466000
+ import_react96 = __toESM(require_react(), 1);
465503
466001
  ENV_SK = {
465504
466002
  ANTHROPIC_API_KEY: "anthropic-api-key",
465505
466003
  OPENAI_API_KEY: "openai-api-key",
@@ -465519,7 +466017,7 @@ function fmtCtx(n) {
465519
466017
  return `${String(Math.round(n / 1e6))}M`;
465520
466018
  return `${String(Math.round(n / 1000))}k`;
465521
466019
  }
465522
- var import_react97, MAX_W2 = 72, LlmSelector;
466020
+ var import_react98, MAX_W2 = 72, LlmSelector;
465523
466021
  var init_LlmSelector = __esm(async () => {
465524
466022
  init_icons();
465525
466023
  init_models();
@@ -465532,8 +466030,8 @@ var init_LlmSelector = __esm(async () => {
465532
466030
  init_core4(),
465533
466031
  init_react2()
465534
466032
  ]);
465535
- import_react97 = __toESM(require_react(), 1);
465536
- LlmSelector = import_react97.memo(function LlmSelector2({
466033
+ import_react98 = __toESM(require_react(), 1);
466034
+ LlmSelector = import_react98.memo(function LlmSelector2({
465537
466035
  visible,
465538
466036
  activeModel,
465539
466037
  onSelect,
@@ -465552,12 +466050,12 @@ var init_LlmSelector = __esm(async () => {
465552
466050
  availability,
465553
466051
  anyLoading
465554
466052
  } = useAllProviderModels(visible);
465555
- const [query2, setQuery] = import_react97.useState("");
465556
- const [cursor, setCursor] = import_react97.useState(0);
465557
- const [scrollOff, setScrollOff] = import_react97.useState(0);
465558
- const [spinFrame, setSpinFrame] = import_react97.useState(0);
465559
- const [collapsed, setCollapsed] = import_react97.useState({});
465560
- 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(() => {
465561
466059
  if (!visible)
465562
466060
  return;
465563
466061
  setQuery("");
@@ -465570,7 +466068,7 @@ var init_LlmSelector = __esm(async () => {
465570
466068
  }
465571
466069
  setCollapsed(init2);
465572
466070
  }, [visible, activeModel]);
465573
- import_react97.useEffect(() => {
466071
+ import_react98.useEffect(() => {
465574
466072
  if (!anyLoading || !visible)
465575
466073
  return;
465576
466074
  const timer = setInterval(() => {
@@ -465581,7 +466079,7 @@ var init_LlmSelector = __esm(async () => {
465581
466079
  const {
465582
466080
  providerFilter,
465583
466081
  modelFilter
465584
- } = import_react97.useMemo(() => {
466082
+ } = import_react98.useMemo(() => {
465585
466083
  const raw2 = query2.toLowerCase().trim();
465586
466084
  const slashIdx = raw2.indexOf("/");
465587
466085
  if (slashIdx >= 0) {
@@ -465595,7 +466093,7 @@ var init_LlmSelector = __esm(async () => {
465595
466093
  modelFilter: raw2
465596
466094
  };
465597
466095
  }, [query2]);
465598
- const entries2 = import_react97.useMemo(() => {
466096
+ const entries2 = import_react98.useMemo(() => {
465599
466097
  const out2 = [];
465600
466098
  for (const cfg_0 of PROVIDER_CONFIGS) {
465601
466099
  const pd = provData[cfg_0.id];
@@ -465658,7 +466156,7 @@ var init_LlmSelector = __esm(async () => {
465658
466156
  }
465659
466157
  return out2;
465660
466158
  }, [provData, providerFilter, modelFilter, availability]);
465661
- const displayEntries = import_react97.useMemo(() => {
466159
+ const displayEntries = import_react98.useMemo(() => {
465662
466160
  if (query2)
465663
466161
  return entries2;
465664
466162
  return entries2.filter((e) => {
@@ -465667,23 +466165,23 @@ var init_LlmSelector = __esm(async () => {
465667
466165
  return !collapsed[e.providerId];
465668
466166
  });
465669
466167
  }, [entries2, collapsed, query2]);
465670
- const eH = import_react97.useCallback((e_0) => e_0.kind === "model" && e_0.hasDesc ? 2 : 1, []);
465671
- 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(() => {
465672
466170
  let count = 0;
465673
466171
  for (const e_1 of displayEntries)
465674
466172
  count += eH(e_1);
465675
466173
  return count;
465676
466174
  }, [displayEntries, eH]);
465677
- const prevDisplayRef = import_react97.useRef(displayEntries);
465678
- const cursorRef = import_react97.useRef(cursor);
466175
+ const prevDisplayRef = import_react98.useRef(displayEntries);
466176
+ const cursorRef = import_react98.useRef(cursor);
465679
466177
  cursorRef.current = cursor;
465680
- const scrollRef = import_react97.useRef(scrollOff);
466178
+ const scrollRef = import_react98.useRef(scrollOff);
465681
466179
  scrollRef.current = scrollOff;
465682
- const displayRef = import_react97.useRef(displayEntries);
466180
+ const displayRef = import_react98.useRef(displayEntries);
465683
466181
  displayRef.current = displayEntries;
465684
- const collapsedRef = import_react97.useRef(collapsed);
466182
+ const collapsedRef = import_react98.useRef(collapsed);
465685
466183
  collapsedRef.current = collapsed;
465686
- const ensureVisible = import_react97.useCallback((idx) => {
466184
+ const ensureVisible = import_react98.useCallback((idx) => {
465687
466185
  const ents = displayRef.current;
465688
466186
  const so = scrollRef.current;
465689
466187
  if (idx < so) {
@@ -465711,7 +466209,7 @@ var init_LlmSelector = __esm(async () => {
465711
466209
  }
465712
466210
  }
465713
466211
  }, [eH, maxVis]);
465714
- import_react97.useEffect(() => {
466212
+ import_react98.useEffect(() => {
465715
466213
  if (displayEntries !== prevDisplayRef.current) {
465716
466214
  const prev = prevDisplayRef.current;
465717
466215
  prevDisplayRef.current = displayEntries;
@@ -465746,7 +466244,7 @@ var init_LlmSelector = __esm(async () => {
465746
466244
  scrollRef.current = 0;
465747
466245
  }
465748
466246
  }, [displayEntries, query2, ensureVisible]);
465749
- const toggleCollapse = import_react97.useCallback((providerId) => {
466247
+ const toggleCollapse = import_react98.useCallback((providerId) => {
465750
466248
  setCollapsed((prev_0) => ({
465751
466249
  ...prev_0,
465752
466250
  [providerId]: !prev_0[providerId]
@@ -466140,7 +466638,7 @@ function lpad(s2, w5) {
466140
466638
  return s2.length >= w5 ? s2.slice(0, w5) : " ".repeat(w5 - s2.length) + s2;
466141
466639
  }
466142
466640
  function SessionPicker(t0) {
466143
- const $5 = import_compiler_runtime57.c(128);
466641
+ const $5 = import_compiler_runtime58.c(128);
466144
466642
  const {
466145
466643
  visible,
466146
466644
  cwd: cwd2,
@@ -466156,9 +466654,9 @@ function SessionPicker(t0) {
466156
466654
  } else {
466157
466655
  t1 = $5[0];
466158
466656
  }
466159
- const [sessions, setSessions] = import_react99.useState(t1);
466160
- const [query2, setQuery] = import_react99.useState("");
466161
- 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);
466162
466660
  const {
466163
466661
  width: termCols,
466164
466662
  height: termRows
@@ -466216,7 +466714,7 @@ function SessionPicker(t0) {
466216
466714
  t4 = $5[8];
466217
466715
  t5 = $5[9];
466218
466716
  }
466219
- import_react99.useEffect(t4, t5);
466717
+ import_react100.useEffect(t4, t5);
466220
466718
  const filterQuery = query2.toLowerCase().trim();
466221
466719
  const filtered = filterQuery ? sessions.filter((s2) => s2.title.toLowerCase().includes(filterQuery)) : sessions;
466222
466720
  useKeyboard((evt) => {
@@ -466837,7 +467335,7 @@ function _temp230(prev_3) {
466837
467335
  function _temp80(prev_1) {
466838
467336
  return prev_1.slice(0, -1);
466839
467337
  }
466840
- 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;
466841
467339
  var init_SessionPicker = __esm(async () => {
466842
467340
  init_icons();
466843
467341
  init_manager4();
@@ -466849,8 +467347,8 @@ var init_SessionPicker = __esm(async () => {
466849
467347
  init_core4(),
466850
467348
  init_react2()
466851
467349
  ]);
466852
- import_compiler_runtime57 = __toESM(require_compiler_runtime(), 1);
466853
- import_react99 = __toESM(require_react(), 1);
467350
+ import_compiler_runtime58 = __toESM(require_compiler_runtime(), 1);
467351
+ import_react100 = __toESM(require_react(), 1);
466854
467352
  COL_FIXED = COL_MSGS + COL_SIZE + COL_TIME + 6;
466855
467353
  });
466856
467354
 
@@ -466873,7 +467371,7 @@ function fmtMem(mb) {
466873
467371
  return mb >= 1024 ? `${(mb / 1024).toFixed(1)} GB` : `${String(mb)} MB`;
466874
467372
  }
466875
467373
  function BarRow(t0) {
466876
- const $5 = import_compiler_runtime58.c(43);
467374
+ const $5 = import_compiler_runtime59.c(43);
466877
467375
  const {
466878
467376
  label,
466879
467377
  pct,
@@ -467032,7 +467530,7 @@ function BarRow(t0) {
467032
467530
  return t13;
467033
467531
  }
467034
467532
  function EntryRow(t0) {
467035
- const $5 = import_compiler_runtime58.c(17);
467533
+ const $5 = import_compiler_runtime59.c(17);
467036
467534
  const {
467037
467535
  label,
467038
467536
  value,
@@ -467112,7 +467610,7 @@ function EntryRow(t0) {
467112
467610
  return t8;
467113
467611
  }
467114
467612
  function SectionHeader(t0) {
467115
- const $5 = import_compiler_runtime58.c(6);
467613
+ const $5 = import_compiler_runtime59.c(6);
467116
467614
  const {
467117
467615
  label,
467118
467616
  color,
@@ -467149,7 +467647,7 @@ function SectionHeader(t0) {
467149
467647
  return t3;
467150
467648
  }
467151
467649
  function Spacer(t0) {
467152
- const $5 = import_compiler_runtime58.c(3);
467650
+ const $5 = import_compiler_runtime59.c(3);
467153
467651
  const {
467154
467652
  innerW
467155
467653
  } = t0;
@@ -467194,22 +467692,22 @@ function StatusDashboard({
467194
467692
  const popupWidth = Math.min(82, Math.floor(termCols * 0.85));
467195
467693
  const innerW = popupWidth - 2;
467196
467694
  const maxVisible = Math.max(6, Math.floor((termRows - 2) * 0.8) - CHROME_ROWS13);
467197
- const [tab, setTab] = import_react101.useState(initialTab ?? "Context");
467695
+ const [tab, setTab] = import_react102.useState(initialTab ?? "Context");
467198
467696
  const TAB_COLORS = {
467199
467697
  Context: t2.info,
467200
467698
  System: t2.brand
467201
467699
  };
467202
- const [scrollOffset, setScrollOffset] = import_react101.useState(0);
467700
+ const [scrollOffset, setScrollOffset] = import_react102.useState(0);
467203
467701
  const sb = useStatusBarStore();
467204
467702
  const rm2 = useRepoMapStore();
467205
467703
  const wk = useWorkerStore();
467206
- import_react101.useEffect(() => {
467704
+ import_react102.useEffect(() => {
467207
467705
  if (visible) {
467208
467706
  setTab(initialTab ?? "Context");
467209
467707
  setScrollOffset(0);
467210
467708
  }
467211
467709
  }, [visible, initialTab]);
467212
- const pollWorkerMemory = import_react101.useCallback(async () => {
467710
+ const pollWorkerMemory = import_react102.useCallback(async () => {
467213
467711
  const store = useWorkerStore.getState();
467214
467712
  try {
467215
467713
  const intel = contextManager.getRepoMap();
@@ -467224,8 +467722,8 @@ function StatusDashboard({
467224
467722
  store.setWorkerMemory("io", Math.round(res_0.heapUsed / 1024 / 1024), Math.round(res_0.rss / 1024 / 1024));
467225
467723
  } catch {}
467226
467724
  }, [contextManager]);
467227
- const pollRef = import_react101.useRef(null);
467228
- import_react101.useEffect(() => {
467725
+ const pollRef = import_react102.useRef(null);
467726
+ import_react102.useEffect(() => {
467229
467727
  if (visible && tab === "System") {
467230
467728
  pollWorkerMemory();
467231
467729
  pollRef.current = setInterval(pollWorkerMemory, 5000);
@@ -467239,7 +467737,7 @@ function StatusDashboard({
467239
467737
  }, [visible, tab, pollWorkerMemory]);
467240
467738
  const modelId = chat?.activeModel ?? "none";
467241
467739
  const tu = sb.tokenUsage;
467242
- const contextLines = import_react101.useMemo(() => {
467740
+ const contextLines = import_react102.useMemo(() => {
467243
467741
  const breakdown = contextManager.getContextBreakdown();
467244
467742
  const systemChars = breakdown.reduce((sum, s2) => sum + s2.chars, 0);
467245
467743
  const ctxWindow = sb.contextWindow > 0 ? sb.contextWindow : getModelContextInfo(modelId).tokens;
@@ -467472,11 +467970,11 @@ function StatusDashboard({
467472
467970
  }
467473
467971
  return lines;
467474
467972
  }, [contextManager, sb.contextWindow, modelId, tu, tabMgr, innerW, sb.chatChars, sb.contextTokens, sb.subagentChars, sb.chatCharsAtSnapshot, t2]);
467475
- const [lspCount, setLspCount] = import_react101.useState(0);
467476
- import_react101.useEffect(() => {
467973
+ const [lspCount, setLspCount] = import_react102.useState(0);
467974
+ import_react102.useEffect(() => {
467477
467975
  getIntelligenceStatus().then((s_4) => setLspCount(s_4?.lspServers.length ?? 0));
467478
467976
  }, []);
467479
- const systemLines = import_react101.useMemo(() => {
467977
+ const systemLines = import_react102.useMemo(() => {
467480
467978
  const rssMB = sb.rssMB;
467481
467979
  const memColor = rssMB < 2048 ? t2.success : rssMB < 4096 ? t2.amber : t2.error;
467482
467980
  const lines_0 = [];
@@ -467801,7 +468299,7 @@ function StatusDashboard({
467801
468299
  }, undefined, true, undefined, this)
467802
468300
  }, undefined, false, undefined, this);
467803
468301
  }
467804
- var import_compiler_runtime58, import_react101, CHROME_ROWS13 = 6, TABS;
468302
+ var import_compiler_runtime59, import_react102, CHROME_ROWS13 = 6, TABS;
467805
468303
  var init_StatusDashboard = __esm(async () => {
467806
468304
  init_instance();
467807
468305
  init_icons();
@@ -467819,8 +468317,8 @@ var init_StatusDashboard = __esm(async () => {
467819
468317
  init_core4(),
467820
468318
  init_react2()
467821
468319
  ]);
467822
- import_compiler_runtime58 = __toESM(require_compiler_runtime(), 1);
467823
- import_react101 = __toESM(require_react(), 1);
468320
+ import_compiler_runtime59 = __toESM(require_compiler_runtime(), 1);
468321
+ import_react102 = __toESM(require_react(), 1);
467824
468322
  TABS = ["Context", "System"];
467825
468323
  });
467826
468324
 
@@ -467829,7 +468327,7 @@ function trunc(s2, max) {
467829
468327
  return s2.length > max ? `${s2.slice(0, max - 1)}\u2026` : s2;
467830
468328
  }
467831
468329
  function Hr4(t0) {
467832
- const $5 = import_compiler_runtime59.c(9);
468330
+ const $5 = import_compiler_runtime60.c(9);
467833
468331
  const {
467834
468332
  w: w5,
467835
468333
  bg: bg2,
@@ -467872,7 +468370,7 @@ function Hr4(t0) {
467872
468370
  return t3;
467873
468371
  }
467874
468372
  function Gap3(t0) {
467875
- const $5 = import_compiler_runtime59.c(4);
468373
+ const $5 = import_compiler_runtime60.c(4);
467876
468374
  const {
467877
468375
  w: w5,
467878
468376
  bg: bg2,
@@ -467904,7 +468402,7 @@ function Gap3(t0) {
467904
468402
  return t2;
467905
468403
  }
467906
468404
  function UpdateModal(t0) {
467907
- const $5 = import_compiler_runtime59.c(569);
468405
+ const $5 = import_compiler_runtime60.c(569);
467908
468406
  const {
467909
468407
  visible,
467910
468408
  onClose,
@@ -467922,10 +468420,10 @@ function UpdateModal(t0) {
467922
468420
  installMethod,
467923
468421
  updateAvailable
467924
468422
  } = useVersionStore();
467925
- const [copied, setCopied] = import_react103.useState(false);
467926
- const [phase, setPhase] = import_react103.useState("info");
467927
- const [quipIdx, setQuipIdx] = import_react103.useState(0);
467928
- 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);
467929
468427
  let t1;
467930
468428
  if ($5[0] === Symbol.for("react.memo_cache_sentinel")) {
467931
468429
  t1 = [];
@@ -467933,11 +468431,11 @@ function UpdateModal(t0) {
467933
468431
  } else {
467934
468432
  t1 = $5[0];
467935
468433
  }
467936
- const [logLines, setLogLines] = import_react103.useState(t1);
467937
- const [errorMsg, setErrorMsg] = import_react103.useState("");
467938
- const upgrading = import_react103.useRef(false);
467939
- const [tick, setTick] = import_react103.useState(0);
467940
- 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);
467941
468439
  let t22;
467942
468440
  let t3;
467943
468441
  if ($5[1] !== visible) {
@@ -467956,7 +468454,7 @@ function UpdateModal(t0) {
467956
468454
  t22 = $5[2];
467957
468455
  t3 = $5[3];
467958
468456
  }
467959
- import_react103.useEffect(t22, t3);
468457
+ import_react104.useEffect(t22, t3);
467960
468458
  let t4;
467961
468459
  let t5;
467962
468460
  if ($5[4] !== tick || $5[5] !== visible) {
@@ -467976,7 +468474,7 @@ function UpdateModal(t0) {
467976
468474
  t4 = $5[6];
467977
468475
  t5 = $5[7];
467978
468476
  }
467979
- import_react103.useEffect(t4, t5);
468477
+ import_react104.useEffect(t4, t5);
467980
468478
  const pw = Math.min(60, Math.floor(termCols * 0.85));
467981
468479
  const iw = pw - 2;
467982
468480
  const maxChangelog = Math.max(3, Math.floor(termRows * 0.3) - 8);
@@ -468003,7 +468501,7 @@ function UpdateModal(t0) {
468003
468501
  t6 = $5[9];
468004
468502
  t7 = $5[10];
468005
468503
  }
468006
- import_react103.useEffect(t6, t7);
468504
+ import_react104.useEffect(t6, t7);
468007
468505
  let t8;
468008
468506
  if ($5[11] !== installMethod) {
468009
468507
  t8 = async () => {
@@ -470514,7 +471012,7 @@ function _temp231(i4) {
470514
471012
  function _temp81(prev) {
470515
471013
  return prev + 1;
470516
471014
  }
470517
- 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;
470518
471016
  var init_UpdateModal = __esm(async () => {
470519
471017
  init_icons();
470520
471018
  init_theme();
@@ -470527,8 +471025,8 @@ var init_UpdateModal = __esm(async () => {
470527
471025
  init_core4(),
470528
471026
  init_react2()
470529
471027
  ]);
470530
- import_compiler_runtime59 = __toESM(require_compiler_runtime(), 1);
470531
- import_react103 = __toESM(require_react(), 1);
471028
+ import_compiler_runtime60 = __toESM(require_compiler_runtime(), 1);
471029
+ import_react104 = __toESM(require_react(), 1);
470532
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"];
470533
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."];
470534
471032
  SPINNER2 = ["\u280B", "\u2819", "\u2839", "\u2838", "\u283C", "\u2834", "\u2826", "\u2827", "\u2807", "\u280F"];
@@ -470548,7 +471046,7 @@ function getAgentAccessColors(t2) {
470548
471046
  };
470549
471047
  }
470550
471048
  function EditorSettings(t0) {
470551
- const $5 = import_compiler_runtime60.c(107);
471049
+ const $5 = import_compiler_runtime61.c(107);
470552
471050
  const {
470553
471051
  visible,
470554
471052
  settings,
@@ -470570,7 +471068,7 @@ function EditorSettings(t0) {
470570
471068
  scrollOffset,
470571
471069
  adjustScroll
470572
471070
  } = usePopupScroll(maxVisible);
470573
- const [scope, setScope] = import_react105.useState(initialScope ?? "project");
471071
+ const [scope, setScope] = import_react106.useState(initialScope ?? "project");
470574
471072
  const t2 = useTheme();
470575
471073
  const current = settings ?? ALL_ON;
470576
471074
  let t1;
@@ -470590,7 +471088,7 @@ function EditorSettings(t0) {
470590
471088
  t1 = $5[2];
470591
471089
  t22 = $5[3];
470592
471090
  }
470593
- import_react105.useEffect(t1, t22);
471091
+ import_react106.useEffect(t1, t22);
470594
471092
  let t3;
470595
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) {
470596
471094
  t3 = (evt) => {
@@ -471098,7 +471596,7 @@ function EditorSettings(t0) {
471098
471596
  }
471099
471597
  return t32;
471100
471598
  }
471101
- 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;
471102
471600
  var init_EditorSettings = __esm(async () => {
471103
471601
  init_theme();
471104
471602
  init_usePopupScroll();
@@ -471108,8 +471606,8 @@ var init_EditorSettings = __esm(async () => {
471108
471606
  init_core4(),
471109
471607
  init_react2()
471110
471608
  ]);
471111
- import_compiler_runtime60 = __toESM(require_compiler_runtime(), 1);
471112
- import_react105 = __toESM(require_react(), 1);
471609
+ import_compiler_runtime61 = __toESM(require_compiler_runtime(), 1);
471610
+ import_react106 = __toESM(require_react(), 1);
471113
471611
  AGENT_ACCESS_MODES = ["on", "off", "when-open"];
471114
471612
  AGENT_ACCESS_LABELS = {
471115
471613
  on: "Always",
@@ -471797,7 +472295,7 @@ function langLabel(pkg) {
471797
472295
  return pkg.languages.join(", ");
471798
472296
  return `${pkg.languages.slice(0, 2).join(", ")} +${pkg.languages.length - 2}`;
471799
472297
  }
471800
- 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;
471801
472299
  var init_LspInstallSearch = __esm(async () => {
471802
472300
  init_installer();
471803
472301
  init_server_registry();
@@ -471809,7 +472307,7 @@ var init_LspInstallSearch = __esm(async () => {
471809
472307
  init_core4(),
471810
472308
  init_react2()
471811
472309
  ]);
471812
- import_react107 = __toESM(require_react(), 1);
472310
+ import_react108 = __toESM(require_react(), 1);
471813
472311
  TABS2 = ["search", "installed", "disabled", "recommended"];
471814
472312
  TAB_LABELS = {
471815
472313
  search: "Search",
@@ -471818,7 +472316,7 @@ var init_LspInstallSearch = __esm(async () => {
471818
472316
  recommended: "Recommended"
471819
472317
  };
471820
472318
  CATEGORY_FILTERS = ["All", "LSP", "Formatter", "Linter", "DAP"];
471821
- LspInstallSearch = import_react107.memo(function LspInstallSearch2({
472319
+ LspInstallSearch = import_react108.memo(function LspInstallSearch2({
471822
472320
  visible,
471823
472321
  cwd: cwd2,
471824
472322
  onClose,
@@ -471829,18 +472327,18 @@ var init_LspInstallSearch = __esm(async () => {
471829
472327
  initialTab = "installed"
471830
472328
  }) {
471831
472329
  const t2 = useTheme();
471832
- const [tab, setTab] = import_react107.useState(initialTab);
471833
- const [query2, setQuery] = import_react107.useState("");
471834
- const [categoryFilter, setCategoryFilter] = import_react107.useState("All");
471835
- const [allStatus, setAllStatus] = import_react107.useState([]);
471836
- const [recommended, setRecommended] = import_react107.useState([]);
471837
- const [installing, setInstalling] = import_react107.useState(false);
471838
- const [registryLoaded, setRegistryLoaded] = import_react107.useState(false);
471839
- const [registryLoading, setRegistryLoading] = import_react107.useState(false);
471840
- 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);
471841
472339
  const defaultScopeCursor = detectScope("disabledLspServers") === "project" ? 0 : 1;
471842
- const [scopeCursor, setScopeCursor] = import_react107.useState(defaultScopeCursor);
471843
- const downloadAttemptedRef = import_react107.useRef(false);
472340
+ const [scopeCursor, setScopeCursor] = import_react108.useState(defaultScopeCursor);
472341
+ const downloadAttemptedRef = import_react108.useRef(false);
471844
472342
  const isInProject = existsSync34(join46(cwd2, ".git"));
471845
472343
  const {
471846
472344
  width: termCols,
@@ -471857,7 +472355,7 @@ var init_LspInstallSearch = __esm(async () => {
471857
472355
  adjustScroll,
471858
472356
  resetScroll
471859
472357
  } = usePopupScroll(maxVisible);
471860
- const refreshAll = import_react107.useCallback(async () => {
472358
+ const refreshAll = import_react108.useCallback(async () => {
471861
472359
  setRegistryLoading(true);
471862
472360
  await new Promise((r4) => setTimeout(r4, 16));
471863
472361
  const statuses = getAllPackageStatus();
@@ -471866,7 +472364,7 @@ var init_LspInstallSearch = __esm(async () => {
471866
472364
  setRecommended(getRecommendedPackages(cwd2));
471867
472365
  setRegistryLoading(false);
471868
472366
  }, [cwd2]);
471869
- import_react107.useEffect(() => {
472367
+ import_react108.useEffect(() => {
471870
472368
  if (!visible)
471871
472369
  return;
471872
472370
  setTab(initialTab);
@@ -471889,7 +472387,7 @@ var init_LspInstallSearch = __esm(async () => {
471889
472387
  }
471890
472388
  }, [visible, refreshAll, onSystemMessage, resetScroll, initialTab]);
471891
472389
  const filterQuery = query2.toLowerCase().trim();
471892
- const filteredList = import_react107.useMemo(() => {
472390
+ const filteredList = import_react108.useMemo(() => {
471893
472391
  let list = allStatus;
471894
472392
  if (categoryFilter !== "All") {
471895
472393
  list = list.filter((s2) => s2.pkg.categories.includes(categoryFilter));
@@ -471899,21 +472397,21 @@ var init_LspInstallSearch = __esm(async () => {
471899
472397
  }
471900
472398
  return list;
471901
472399
  }, [allStatus, categoryFilter, filterQuery]);
471902
- const installedList = import_react107.useMemo(() => {
472400
+ const installedList = import_react108.useMemo(() => {
471903
472401
  let list_0 = allStatus.filter((s_1) => s_1.installed);
471904
472402
  if (filterQuery) {
471905
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)));
471906
472404
  }
471907
472405
  return list_0;
471908
472406
  }, [allStatus, filterQuery]);
471909
- const disabledList = import_react107.useMemo(() => {
472407
+ const disabledList = import_react108.useMemo(() => {
471910
472408
  let list_1 = allStatus.filter((s_3) => disabledServers.includes(s_3.pkg.name));
471911
472409
  if (filterQuery) {
471912
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)));
471913
472411
  }
471914
472412
  return list_1;
471915
472413
  }, [allStatus, disabledServers, filterQuery]);
471916
- const filteredRecommended = import_react107.useMemo(() => {
472414
+ const filteredRecommended = import_react108.useMemo(() => {
471917
472415
  if (!filterQuery)
471918
472416
  return recommended;
471919
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)));
@@ -472542,7 +473040,7 @@ function detectInitialScope(project) {
472542
473040
  return "global";
472543
473041
  }
472544
473042
  function ProviderSettings(t0) {
472545
- const $5 = import_compiler_runtime61.c(126);
473043
+ const $5 = import_compiler_runtime62.c(126);
472546
473044
  const {
472547
473045
  visible,
472548
473046
  globalConfig: globalConfig2,
@@ -472559,7 +473057,7 @@ function ProviderSettings(t0) {
472559
473057
  const innerW = popupWidth - 2;
472560
473058
  const maxVisible = Math.max(4, Math.floor(containerRows * 0.8) - CHROME_ROWS16);
472561
473059
  const t2 = useTheme();
472562
- const [tab, setTab] = import_react109.useState("claude");
473060
+ const [tab, setTab] = import_react110.useState("claude");
472563
473061
  const {
472564
473062
  cursor,
472565
473063
  setCursor,
@@ -472575,7 +473073,7 @@ function ProviderSettings(t0) {
472575
473073
  } else {
472576
473074
  t1 = $5[1];
472577
473075
  }
472578
- const [scope, setScope] = import_react109.useState(t1);
473076
+ const [scope, setScope] = import_react110.useState(t1);
472579
473077
  let t22;
472580
473078
  if ($5[2] !== globalConfig2 || $5[3] !== projectConfig) {
472581
473079
  t22 = effectiveValues(globalConfig2, projectConfig);
@@ -472605,7 +473103,7 @@ function ProviderSettings(t0) {
472605
473103
  t3 = $5[7];
472606
473104
  t4 = $5[8];
472607
473105
  }
472608
- import_react109.useEffect(t3, t4);
473106
+ import_react110.useEffect(t3, t4);
472609
473107
  let t5;
472610
473108
  if ($5[9] !== resetScroll) {
472611
473109
  t5 = () => {
@@ -472625,7 +473123,7 @@ function ProviderSettings(t0) {
472625
473123
  } else {
472626
473124
  t6 = $5[13];
472627
473125
  }
472628
- import_react109.useEffect(t5, t6);
473126
+ import_react110.useEffect(t5, t6);
472629
473127
  const isBudgetDisabled = vals.thinkingMode !== "enabled";
472630
473128
  let t7;
472631
473129
  if ($5[14] !== isBudgetDisabled || $5[15] !== onUpdate || $5[16] !== scope || $5[17] !== vals) {
@@ -473160,7 +473658,7 @@ function ProviderSettings(t0) {
473160
473658
  }
473161
473659
  return t33;
473162
473660
  }
473163
- 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;
473164
473662
  var init_ProviderSettings = __esm(async () => {
473165
473663
  init_icons();
473166
473664
  init_theme();
@@ -473171,8 +473669,8 @@ var init_ProviderSettings = __esm(async () => {
473171
473669
  init_core4(),
473172
473670
  init_react2()
473173
473671
  ]);
473174
- import_compiler_runtime61 = __toESM(require_compiler_runtime(), 1);
473175
- import_react109 = __toESM(require_react(), 1);
473672
+ import_compiler_runtime62 = __toESM(require_compiler_runtime(), 1);
473673
+ import_react110 = __toESM(require_react(), 1);
473176
473674
  TABS3 = ["claude", "openai", "general"];
473177
473675
  TAB_LABELS2 = {
473178
473676
  claude: "Claude",
@@ -473337,19 +473835,19 @@ function RepoMapStatusPopup({
473337
473835
  } = useTerminalDimensions();
473338
473836
  const popupWidth = Math.min(POPUP_W, Math.floor(termCols * 0.8));
473339
473837
  const innerW = popupWidth - 2;
473340
- const stateRef = import_react111.useRef(useRepoMapStore.getState());
473341
- const [, setRenderTick] = import_react111.useState(0);
473342
- 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);
473343
473841
  const initialMode = currentMode ?? "off";
473344
473842
  const initialLimit = currentLimit ?? 300;
473345
- const [selectedMode, setSelectedMode] = import_react111.useState(initialMode);
473346
- const [selectedLimit, setSelectedLimit] = import_react111.useState(initialLimit);
473347
- const [selectedAutoRegen, setSelectedAutoRegen] = import_react111.useState(currentAutoRegen ?? false);
473348
- const [selectedTokenBudget, setSelectedTokenBudget] = import_react111.useState(currentTokenBudget);
473349
- const [selectedScope, setSelectedScope] = import_react111.useState(currentScope ?? "project");
473350
- const [focusRow, setFocusRow] = import_react111.useState(0 /* Mode */);
473351
- const [confirmClear, setConfirmClear] = import_react111.useState(false);
473352
- 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(() => {
473353
473851
  if (!visible)
473354
473852
  return;
473355
473853
  setSelectedMode(currentMode ?? "off");
@@ -473360,7 +473858,7 @@ function RepoMapStatusPopup({
473360
473858
  setFocusRow(0 /* Mode */);
473361
473859
  setConfirmClear(false);
473362
473860
  }, [visible, currentMode, currentLimit, currentAutoRegen, currentTokenBudget, currentScope]);
473363
- import_react111.useEffect(() => {
473861
+ import_react112.useEffect(() => {
473364
473862
  if (!visible)
473365
473863
  return;
473366
473864
  stateRef.current = useRepoMapStore.getState();
@@ -473370,7 +473868,7 @@ function RepoMapStatusPopup({
473370
473868
  setRenderTick((n_0) => n_0 + 1);
473371
473869
  });
473372
473870
  }, [visible]);
473373
- import_react111.useEffect(() => {
473871
+ import_react112.useEffect(() => {
473374
473872
  if (!visible)
473375
473873
  return;
473376
473874
  const timer = setInterval(() => {
@@ -473969,7 +474467,7 @@ function RepoMapStatusPopup({
473969
474467
  }, undefined, true, undefined, this)
473970
474468
  }, undefined, false, undefined, this);
473971
474469
  }
473972
- 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;
473973
474471
  var init_RepoMapStatusPopup = __esm(async () => {
473974
474472
  init_icons();
473975
474473
  init_theme();
@@ -473980,7 +474478,7 @@ var init_RepoMapStatusPopup = __esm(async () => {
473980
474478
  init_core4(),
473981
474479
  init_react2()
473982
474480
  ]);
473983
- import_react111 = __toESM(require_react(), 1);
474481
+ import_react112 = __toESM(require_react(), 1);
473984
474482
  SEMANTIC_MODES = ["off", "ast", "synthetic", "llm", "full"];
473985
474483
  MODE_DESCRIPTIONS = {
473986
474484
  off: "disabled",
@@ -474002,7 +474500,7 @@ var init_RepoMapStatusPopup = __esm(async () => {
474002
474500
 
474003
474501
  // src/components/settings/RouterSettings.tsx
474004
474502
  function RouterSettings(t0) {
474005
- const $5 = import_compiler_runtime62.c(100);
474503
+ const $5 = import_compiler_runtime63.c(100);
474006
474504
  const {
474007
474505
  visible,
474008
474506
  router: router2,
@@ -474500,7 +474998,7 @@ function RouterSettings(t0) {
474500
474998
  }
474501
474999
  return t31;
474502
475000
  }
474503
- 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;
474504
475002
  var init_RouterSettings = __esm(async () => {
474505
475003
  init_icons();
474506
475004
  init_theme();
@@ -474511,8 +475009,8 @@ var init_RouterSettings = __esm(async () => {
474511
475009
  init_core4(),
474512
475010
  init_react2()
474513
475011
  ]);
474514
- import_compiler_runtime62 = __toESM(require_compiler_runtime(), 1);
474515
- import_react113 = __toESM(require_react(), 1);
475012
+ import_compiler_runtime63 = __toESM(require_compiler_runtime(), 1);
475013
+ import_react114 = __toESM(require_react(), 1);
474516
475014
  ROWS = [
474517
475015
  {
474518
475016
  kind: "section",
@@ -474592,8 +475090,8 @@ var init_RouterSettings = __esm(async () => {
474592
475090
  });
474593
475091
  return acc;
474594
475092
  }, []);
474595
- SectionHeader2 = import_react113.memo(function SectionHeader3(t0) {
474596
- const $5 = import_compiler_runtime62.c(25);
475093
+ SectionHeader2 = import_react114.memo(function SectionHeader3(t0) {
475094
+ const $5 = import_compiler_runtime63.c(25);
474597
475095
  const {
474598
475096
  title,
474599
475097
  subtitle,
@@ -474720,8 +475218,8 @@ var init_RouterSettings = __esm(async () => {
474720
475218
  }
474721
475219
  return t10;
474722
475220
  });
474723
- SlotRowView = import_react113.memo(function SlotRowView2(t0) {
474724
- const $5 = import_compiler_runtime62.c(25);
475221
+ SlotRowView = import_react114.memo(function SlotRowView2(t0) {
475222
+ const $5 = import_compiler_runtime63.c(25);
474725
475223
  const {
474726
475224
  slot,
474727
475225
  modelId,
@@ -474833,7 +475331,7 @@ var init_RouterSettings = __esm(async () => {
474833
475331
  // src/components/settings/SkillSearch.tsx
474834
475332
  import { existsSync as existsSync35 } from "fs";
474835
475333
  import { join as join47 } from "path";
474836
- 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;
474837
475335
  var init_SkillSearch = __esm(async () => {
474838
475336
  init_manager2();
474839
475337
  init_theme();
@@ -474844,31 +475342,31 @@ var init_SkillSearch = __esm(async () => {
474844
475342
  init_core4(),
474845
475343
  init_react2()
474846
475344
  ]);
474847
- import_react115 = __toESM(require_react(), 1);
475345
+ import_react116 = __toESM(require_react(), 1);
474848
475346
  TABS4 = ["search", "installed", "active"];
474849
475347
  TAB_LABELS3 = {
474850
475348
  search: "Search",
474851
475349
  installed: "Installed",
474852
475350
  active: "Active"
474853
475351
  };
474854
- SkillSearch = import_react115.memo(function SkillSearch2({
475352
+ SkillSearch = import_react116.memo(function SkillSearch2({
474855
475353
  visible,
474856
475354
  contextManager,
474857
475355
  onClose,
474858
475356
  onSystemMessage
474859
475357
  }) {
474860
475358
  const t2 = useTheme();
474861
- const [tab, setTab] = import_react115.useState("search");
474862
- const [query2, setQuery] = import_react115.useState("");
474863
- const [popular, setPopular] = import_react115.useState([]);
474864
- const [results, setResults] = import_react115.useState([]);
474865
- const [installed, setInstalled] = import_react115.useState([]);
474866
- const [activeSkills, setActiveSkills] = import_react115.useState([]);
474867
- const [searching, setSearching] = import_react115.useState(false);
474868
- const [installing, setInstalling] = import_react115.useState(false);
474869
- const [pendingInstall, setPendingInstall] = import_react115.useState(null);
474870
- const [scopeCursor, setScopeCursor] = import_react115.useState(0);
474871
- 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);
474872
475370
  const isInProject = existsSync35(join47(process.cwd(), ".git"));
474873
475371
  const {
474874
475372
  width: termCols,
@@ -474890,13 +475388,13 @@ var init_SkillSearch = __esm(async () => {
474890
475388
  const filteredInstalled = filterQuery ? installed.filter((s_0) => s_0.name.toLowerCase().includes(filterQuery)) : installed;
474891
475389
  const filteredActive = filterQuery ? activeSkills.filter((s_1) => s_1.toLowerCase().includes(filterQuery)) : activeSkills;
474892
475390
  const displayResults = query2.trim() ? results : popular;
474893
- const refreshInstalled = import_react115.useCallback(() => {
475391
+ const refreshInstalled = import_react116.useCallback(() => {
474894
475392
  setInstalled(listInstalledSkills());
474895
475393
  }, []);
474896
- const refreshActive = import_react115.useCallback(() => {
475394
+ const refreshActive = import_react116.useCallback(() => {
474897
475395
  setActiveSkills(contextManager.getActiveSkills());
474898
475396
  }, [contextManager]);
474899
- import_react115.useEffect(() => {
475397
+ import_react116.useEffect(() => {
474900
475398
  if (visible) {
474901
475399
  setTab("search");
474902
475400
  setQuery("");
@@ -474907,7 +475405,7 @@ var init_SkillSearch = __esm(async () => {
474907
475405
  listPopularSkills().then((r4) => setPopular(r4)).catch(() => {});
474908
475406
  }
474909
475407
  }, [visible, refreshInstalled, refreshActive, setCursor]);
474910
- import_react115.useEffect(() => {
475408
+ import_react116.useEffect(() => {
474911
475409
  if (!visible || tab !== "search")
474912
475410
  return;
474913
475411
  if (debounceRef.current)
@@ -474933,7 +475431,7 @@ var init_SkillSearch = __esm(async () => {
474933
475431
  clearTimeout(debounceRef.current);
474934
475432
  };
474935
475433
  }, [query2, visible, tab, popular.length, setCursor]);
474936
- import_react115.useEffect(() => {
475434
+ import_react116.useEffect(() => {
474937
475435
  setQuery("");
474938
475436
  setResults([]);
474939
475437
  resetScroll();
@@ -475482,7 +475980,7 @@ var init_SkillSearch = __esm(async () => {
475482
475980
 
475483
475981
  // src/components/settings/ToolsPopup.tsx
475484
475982
  function ToolsPopup(t0) {
475485
- const $5 = import_compiler_runtime63.c(58);
475983
+ const $5 = import_compiler_runtime64.c(58);
475486
475984
  const {
475487
475985
  visible,
475488
475986
  disabledTools,
@@ -475503,7 +476001,7 @@ function ToolsPopup(t0) {
475503
476001
  scrollOffset,
475504
476002
  adjustScroll
475505
476003
  } = usePopupScroll(maxVisible);
475506
- const [initialized2, setInitialized] = import_react117.useState(false);
476004
+ const [initialized2, setInitialized] = import_react118.useState(false);
475507
476005
  if (visible && !initialized2) {
475508
476006
  setCursor(0);
475509
476007
  adjustScroll(0);
@@ -475730,7 +476228,7 @@ function ToolsPopup(t0) {
475730
476228
  }
475731
476229
  return t11;
475732
476230
  }
475733
- 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;
475734
476232
  var init_ToolsPopup = __esm(async () => {
475735
476233
  init_theme();
475736
476234
  init_constants2();
@@ -475741,14 +476239,14 @@ var init_ToolsPopup = __esm(async () => {
475741
476239
  init_core4(),
475742
476240
  init_react2()
475743
476241
  ]);
475744
- import_compiler_runtime63 = __toESM(require_compiler_runtime(), 1);
475745
- import_react117 = __toESM(require_react(), 1);
476242
+ import_compiler_runtime64 = __toESM(require_compiler_runtime(), 1);
476243
+ import_react118 = __toESM(require_react(), 1);
475746
476244
  ALL_TOOLS = Object.entries(TOOL_CATALOG).map(([name21, desc]) => ({
475747
476245
  name: name21,
475748
476246
  desc
475749
476247
  }));
475750
- ToolRow3 = import_react117.memo(function ToolRow4(t0) {
475751
- const $5 = import_compiler_runtime63.c(21);
476248
+ ToolRow3 = import_react118.memo(function ToolRow4(t0) {
476249
+ const $5 = import_compiler_runtime64.c(21);
475752
476250
  const {
475753
476251
  tool: tool2,
475754
476252
  enabled,
@@ -475859,7 +476357,7 @@ function truncate3(str, max) {
475859
476357
  return str.length > max ? `${str.slice(0, max - 1)}\u2026` : str;
475860
476358
  }
475861
476359
  function ShutdownSplash(t0) {
475862
- const $5 = import_compiler_runtime64.c(39);
476360
+ const $5 = import_compiler_runtime65.c(39);
475863
476361
  const {
475864
476362
  phase,
475865
476363
  sessionId,
@@ -475874,7 +476372,7 @@ function ShutdownSplash(t0) {
475874
476372
  t1 = $5[1];
475875
476373
  }
475876
476374
  const shortId = t1;
475877
- const [tick, setTick] = import_react119.useState(0);
476375
+ const [tick, setTick] = import_react120.useState(0);
475878
476376
  let t2;
475879
476377
  let t3;
475880
476378
  if ($5[2] === Symbol.for("react.memo_cache_sentinel")) {
@@ -475889,7 +476387,7 @@ function ShutdownSplash(t0) {
475889
476387
  t2 = $5[2];
475890
476388
  t3 = $5[3];
475891
476389
  }
475892
- import_react119.useEffect(t2, t3);
476390
+ import_react120.useEffect(t2, t3);
475893
476391
  const t_0 = useTheme();
475894
476392
  let t4;
475895
476393
  if ($5[4] === Symbol.for("react.memo_cache_sentinel")) {
@@ -476104,9 +476602,9 @@ function App({
476104
476602
  } = useTerminalDimensions();
476105
476603
  useThemeStore((s2) => s2.name);
476106
476604
  const t2 = useTheme();
476107
- const [shutdownPhase, setShutdownPhase] = import_react119.useState(-1);
476108
- const savedSessionIdRef = import_react119.useRef(null);
476109
- import_react119.useEffect(() => {
476605
+ const [shutdownPhase, setShutdownPhase] = import_react120.useState(-1);
476606
+ const savedSessionIdRef = import_react120.useRef(null);
476607
+ import_react120.useEffect(() => {
476110
476608
  const stdin = process.stdin;
476111
476609
  const originalRead = stdin.read.bind(stdin);
476112
476610
  const patchedRead = (size) => {
@@ -476129,12 +476627,12 @@ function App({
476129
476627
  stdin.read = originalRead;
476130
476628
  };
476131
476629
  }, []);
476132
- const copyToClipboard2 = import_react119.useCallback((text3) => {
476630
+ const copyToClipboard2 = import_react120.useCallback((text3) => {
476133
476631
  if (!renderer2.copyToClipboardOSC52(text3)) {
476134
476632
  nativeCopy(text3);
476135
476633
  }
476136
476634
  }, [renderer2]);
476137
- import_react119.useEffect(() => {
476635
+ import_react120.useEffect(() => {
476138
476636
  const onSelection = (sel) => {
476139
476637
  const text_0 = sel.getSelectedText();
476140
476638
  if (text_0)
@@ -476145,14 +476643,14 @@ function App({
476145
476643
  renderer2.off("selection", onSelection);
476146
476644
  };
476147
476645
  }, [renderer2, copyToClipboard2]);
476148
- import_react119.useEffect(() => {
476646
+ import_react120.useEffect(() => {
476149
476647
  fetchOpenRouterMetadata();
476150
476648
  }, []);
476151
- const [globalConfig2, setGlobalConfig] = import_react119.useState(config2);
476152
- const [projConfig, setProjConfig] = import_react119.useState(projectConfig ?? null);
476153
- const [routerScope, setRouterScope] = import_react119.useState(() => projectConfig && ("taskRouter" in projectConfig) ? "project" : "global");
476154
- const modelScope = import_react119.useMemo(() => projConfig && ("defaultModel" in projConfig) ? "project" : "global", [projConfig]);
476155
- 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]);
476156
476654
  const {
476157
476655
  focusMode,
476158
476656
  editorOpen,
@@ -476162,13 +476660,13 @@ function App({
476162
476660
  focusChat,
476163
476661
  focusEditor
476164
476662
  } = useEditorFocus();
476165
- const [editorVisible, setEditorVisible] = import_react119.useState(false);
476663
+ const [editorVisible, setEditorVisible] = import_react120.useState(false);
476166
476664
  const tabMgr = useTabs();
476167
- const tabMgrRef = import_react119.useRef(tabMgr);
476665
+ const tabMgrRef = import_react120.useRef(tabMgr);
476168
476666
  tabMgrRef.current = tabMgr;
476169
- const hasTabBarRef = import_react119.useRef(false);
476667
+ const hasTabBarRef = import_react120.useRef(false);
476170
476668
  hasTabBarRef.current = tabMgr.tabCount > 1;
476171
- const editorSplitRef = import_react119.useRef(60);
476669
+ const editorSplitRef = import_react120.useRef(60);
476172
476670
  const {
476173
476671
  ready: nvimReady,
476174
476672
  screenLines,
@@ -476184,8 +476682,8 @@ function App({
476184
476682
  sendMouse,
476185
476683
  error: nvimError
476186
476684
  } = useNeovim(true, effectiveConfig.nvimPath, effectiveConfig.nvimConfig, closeEditor, effectiveConfig.vimHints !== false, hasTabBarRef.current, editorSplitRef.current);
476187
- const pendingEditorFileRef = import_react119.useRef(null);
476188
- import_react119.useEffect(() => {
476685
+ const pendingEditorFileRef = import_react120.useRef(null);
476686
+ import_react120.useEffect(() => {
476189
476687
  if (nvimReady && pendingEditorFileRef.current) {
476190
476688
  const file2 = pendingEditorFileRef.current;
476191
476689
  pendingEditorFileRef.current = null;
@@ -476194,7 +476692,7 @@ function App({
476194
476692
  });
476195
476693
  }
476196
476694
  }, [nvimReady, nvimOpen]);
476197
- const openEditorWithFile = import_react119.useCallback((file_0) => {
476695
+ const openEditorWithFile = import_react120.useCallback((file_0) => {
476198
476696
  if (editorOpen && nvimReady) {
476199
476697
  nvimOpen(file_0).catch((err_0) => {
476200
476698
  logBackgroundError("editor", `failed to open ${file_0}: ${err_0 instanceof Error ? err_0.message : String(err_0)}`);
@@ -476204,24 +476702,24 @@ function App({
476204
476702
  openEditor();
476205
476703
  }
476206
476704
  }, [editorOpen, nvimReady, nvimOpen, openEditor]);
476207
- import_react119.useEffect(() => {
476705
+ import_react120.useEffect(() => {
476208
476706
  setEditorRequestCallback((file_1) => {
476209
476707
  if (file_1)
476210
476708
  openEditorWithFile(file_1);
476211
476709
  });
476212
476710
  return () => setEditorRequestCallback(null);
476213
476711
  }, [openEditorWithFile]);
476214
- import_react119.useEffect(() => {
476712
+ import_react120.useEffect(() => {
476215
476713
  if (editorOpen)
476216
476714
  setEditorVisible(true);
476217
476715
  }, [editorOpen]);
476218
476716
  const reasoningExpanded = useUIStore((s_0) => s_0.reasoningExpanded);
476219
476717
  const codeExpanded = useUIStore((s_1) => s_1.codeExpanded);
476220
476718
  const hasTabBar = tabMgr.tabCount > 1;
476221
- import_react119.useEffect(() => {
476719
+ import_react120.useEffect(() => {
476222
476720
  renderer2.requestRender();
476223
476721
  }, [editorOpen, editorVisible, focusMode, reasoningExpanded, codeExpanded, hasTabBar, renderer2]);
476224
- const handleEditorClosed = import_react119.useCallback(() => {
476722
+ const handleEditorClosed = import_react120.useCallback(() => {
476225
476723
  setEditorVisible(false);
476226
476724
  }, []);
476227
476725
  useEditorInput({
@@ -476265,10 +476763,10 @@ function App({
476265
476763
  const modalFirstRunWizard = useUIStore((s_18) => s_18.modals.firstRunWizard);
476266
476764
  const modalUpdateModal = useUIStore((s_19) => s_19.modals.updateModal);
476267
476765
  const toolsState = useToolsStore();
476268
- import_react119.useEffect(() => {
476766
+ import_react120.useEffect(() => {
476269
476767
  toolsState.initFromConfig(effectiveConfig.disabledTools);
476270
476768
  }, [effectiveConfig.disabledTools, toolsState.initFromConfig]);
476271
- import_react119.useEffect(() => {
476769
+ import_react120.useEffect(() => {
476272
476770
  saveGlobalConfig({
476273
476771
  disabledTools: [...toolsState.disabledTools]
476274
476772
  });
@@ -476276,15 +476774,15 @@ function App({
476276
476774
  const statusDashboardTab = useUIStore((s_20) => s_20.statusDashboardTab);
476277
476775
  const modalRepoMapStatus = useUIStore((s_21) => s_21.modals.repoMapStatus);
476278
476776
  const isModalOpen = useUIStore(selectIsAnyModalOpen);
476279
- const wizardOpenedLlm = import_react119.useRef(false);
476280
- const closerCache2 = import_react119.useRef({});
476777
+ const wizardOpenedLlm = import_react120.useRef(false);
476778
+ const closerCache2 = import_react120.useRef({});
476281
476779
  const getCloser2 = (name21) => closerCache2.current[name21] ??= () => useUIStore.getState().closeModal(name21);
476282
476780
  useVersionCheck();
476283
476781
  const versionCurrent = useVersionStore((s_22) => s_22.current);
476284
476782
  const versionLatest = useVersionStore((s_23) => s_23.latest);
476285
476783
  const versionUpdateAvailable = useVersionStore((s_24) => s_24.updateAvailable);
476286
- const updateModalShown = import_react119.useRef(false);
476287
- import_react119.useEffect(() => {
476784
+ const updateModalShown = import_react120.useRef(false);
476785
+ import_react120.useEffect(() => {
476288
476786
  if (!versionUpdateAvailable || !versionLatest || updateModalShown.current)
476289
476787
  return;
476290
476788
  if (isDismissed(versionLatest))
@@ -476298,7 +476796,7 @@ function App({
476298
476796
  }, 500);
476299
476797
  return () => clearTimeout(timer);
476300
476798
  }, [versionUpdateAvailable, versionLatest]);
476301
- import_react119.useEffect(() => {
476799
+ import_react120.useEffect(() => {
476302
476800
  if (getMissingRequired().length > 0) {
476303
476801
  useUIStore.getState().openModal("setup");
476304
476802
  } else if (forceWizard || !config2.onboardingComplete && !resumeSessionId) {
@@ -476306,7 +476804,7 @@ function App({
476306
476804
  }
476307
476805
  }, [config2.onboardingComplete, forceWizard, resumeSessionId]);
476308
476806
  const cwd2 = process.cwd();
476309
- const saveToScope = import_react119.useCallback((patch, toScope, fromScope) => {
476807
+ const saveToScope = import_react120.useCallback((patch, toScope, fromScope) => {
476310
476808
  if (toScope === "global") {
476311
476809
  saveGlobalConfig(patch);
476312
476810
  setGlobalConfig((prev) => applyConfigPatch(prev, patch));
@@ -476326,18 +476824,18 @@ function App({
476326
476824
  }
476327
476825
  }
476328
476826
  }, [cwd2]);
476329
- const detectScope = import_react119.useCallback((key3) => {
476827
+ const detectScope = import_react120.useCallback((key3) => {
476330
476828
  if (projConfig && key3 in projConfig)
476331
476829
  return "project";
476332
476830
  return "global";
476333
476831
  }, [projConfig]);
476334
- import_react119.useEffect(() => {
476832
+ import_react120.useEffect(() => {
476335
476833
  initForbidden(cwd2);
476336
476834
  }, []);
476337
- const contextManager = import_react119.useMemo(() => preloadedContextManager ?? new ContextManager(cwd2), [cwd2, preloadedContextManager]);
476338
- 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]);
476339
476837
  const git = useGitStatus(cwd2);
476340
- const [forgeMode, setForgeModeHeader] = import_react119.useState("default");
476838
+ const [forgeMode, setForgeModeHeader] = import_react120.useState("default");
476341
476839
  const modeLabel2 = getModeLabel(forgeMode);
476342
476840
  const modeColor = getModeColor(forgeMode);
476343
476841
  useConfigSync({
@@ -476351,7 +476849,7 @@ function App({
476351
476849
  cursorCol,
476352
476850
  visualSelection
476353
476851
  });
476354
- const handleSuspend = import_react119.useCallback(async (opts) => {
476852
+ const handleSuspend = import_react120.useCallback(async (opts) => {
476355
476853
  useUIStore.getState().setSuspended(true);
476356
476854
  await new Promise((r4) => setTimeout(r4, 50));
476357
476855
  const result = await suspendAndRun({
@@ -476371,20 +476869,20 @@ function App({
476371
476869
  git.refresh();
476372
476870
  }, [cwd2, git]);
476373
476871
  editorSplitRef.current = editorSplit;
476374
- const sharedResources = import_react119.useMemo(() => ({
476872
+ const sharedResources = import_react120.useMemo(() => ({
476375
476873
  ...contextManager.getSharedResources(),
476376
476874
  workspaceCoordinator: getWorkspaceCoordinator()
476377
476875
  }), [contextManager]);
476378
- const workspaceSnapshotRef = import_react119.useRef(null);
476876
+ const workspaceSnapshotRef = import_react120.useRef(null);
476379
476877
  workspaceSnapshotRef.current = () => ({
476380
476878
  tabStates: tabMgr.getAllTabStates(),
476381
476879
  activeTabId: tabMgr.activeTabId
476382
476880
  });
476383
- const getWorkspaceSnapshot = import_react119.useCallback(() => workspaceSnapshotRef.current?.() ?? {
476881
+ const getWorkspaceSnapshot = import_react120.useCallback(() => workspaceSnapshotRef.current?.() ?? {
476384
476882
  tabStates: [],
476385
476883
  activeTabId: ""
476386
476884
  }, []);
476387
- const addSystemMessage = import_react119.useCallback((msg) => {
476885
+ const addSystemMessage = import_react120.useCallback((msg) => {
476388
476886
  const activeChat_0 = tabMgrRef.current?.getActiveChat();
476389
476887
  activeChat_0?.setMessages((prev_4) => [...prev_4, {
476390
476888
  id: crypto.randomUUID(),
@@ -476393,13 +476891,13 @@ function App({
476393
476891
  timestamp: Date.now()
476394
476892
  }]);
476395
476893
  }, []);
476396
- const refreshGit = import_react119.useCallback(() => {
476894
+ const refreshGit = import_react120.useCallback(() => {
476397
476895
  git.refresh();
476398
476896
  }, [git]);
476399
- const shutdownPhaseRef = import_react119.useRef(shutdownPhase);
476897
+ const shutdownPhaseRef = import_react120.useRef(shutdownPhase);
476400
476898
  shutdownPhaseRef.current = shutdownPhase;
476401
- const exitTimersRef = import_react119.useRef([]);
476402
- const handleExit = import_react119.useCallback(() => {
476899
+ const exitTimersRef = import_react120.useRef([]);
476900
+ const handleExit = import_react120.useCallback(() => {
476403
476901
  if (shutdownPhaseRef.current >= 0)
476404
476902
  return;
476405
476903
  setShutdownPhase(0);
@@ -476453,8 +476951,8 @@ function App({
476453
476951
  }, 300);
476454
476952
  }, 250);
476455
476953
  }, [cwd2, sessionManager, contextManager, renderer2]);
476456
- const hasRestoredRef = import_react119.useRef(false);
476457
- import_react119.useEffect(() => {
476954
+ const hasRestoredRef = import_react120.useRef(false);
476955
+ import_react120.useEffect(() => {
476458
476956
  if (hasRestoredRef.current || !resumeSessionId)
476459
476957
  return;
476460
476958
  hasRestoredRef.current = true;
@@ -476470,9 +476968,9 @@ function App({
476470
476968
  setExitSessionId(data.meta.id);
476471
476969
  }
476472
476970
  }, []);
476473
- const [activeModelForHeader, setActiveModelForHeader] = import_react119.useState(effectiveConfig.defaultModel);
476474
- const activeChatRef = import_react119.useRef(null);
476475
- import_react119.useEffect(() => {
476971
+ const [activeModelForHeader, setActiveModelForHeader] = import_react120.useState(effectiveConfig.defaultModel);
476972
+ const activeChatRef = import_react120.useRef(null);
476973
+ import_react120.useEffect(() => {
476476
476974
  const chat = tabMgr.getActiveChat();
476477
476975
  activeChatRef.current = chat;
476478
476976
  if (chat) {
@@ -476482,7 +476980,7 @@ function App({
476482
476980
  setExitSessionId(hasContent ? chat.sessionId : null);
476483
476981
  }
476484
476982
  }, [tabMgr.activeTabId]);
476485
- import_react119.useEffect(() => {
476983
+ import_react120.useEffect(() => {
476486
476984
  if (tabMgr.tabCount <= 1)
476487
476985
  return;
476488
476986
  (async () => {
@@ -476510,7 +477008,7 @@ function App({
476510
477008
  displayModel,
476511
477009
  isGateway,
476512
477010
  isProxy
476513
- } = import_react119.useMemo(() => {
477011
+ } = import_react120.useMemo(() => {
476514
477012
  const model = activeModelForHeader;
476515
477013
  if (model === "none") {
476516
477014
  return {
@@ -476541,22 +477039,23 @@ function App({
476541
477039
  isProxy: false
476542
477040
  };
476543
477041
  }, [activeModelForHeader]);
476544
- import_react119.useEffect(() => {
477042
+ import_react120.useEffect(() => {
476545
477043
  if (nvimError)
476546
477044
  addSystemMessage(`Neovim error: ${nvimError}`);
476547
477045
  }, [nvimError]);
476548
- const handleTabCommand = import_react119.useCallback((input, chat_0) => {
477046
+ const handleTabCommand = import_react120.useCallback((input, chat_0) => {
476549
477047
  const cmd = input.trim().toLowerCase().split(/\s+/)[0] ?? "";
476550
- 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))) {
476551
477050
  chat_0.abort();
476552
477051
  chat_0.setMessageQueue([]);
476553
477052
  }
476554
- if (cmd === "/continue") {
477053
+ if (cmd === "/continue" || twoWord === "/session continue") {
476555
477054
  chat_0.handleSubmit("Continue from where you left off. Complete any remaining work.");
476556
477055
  return;
476557
477056
  }
476558
- if (cmd === "/plan" || input.trim().toLowerCase().startsWith("/plan ")) {
476559
- 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();
476560
477059
  if (chat_0.planMode) {
476561
477060
  chat_0.setPlanMode(false);
476562
477061
  chat_0.setPlanRequest(null);
@@ -476643,7 +477142,7 @@ function App({
476643
477142
  instructionFiles: effectiveConfig.instructionFiles
476644
477143
  });
476645
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]);
476646
- const closeLlmSelector = import_react119.useCallback(() => {
477145
+ const closeLlmSelector = import_react120.useCallback(() => {
476647
477146
  const wasPickingSlot = useUIStore.getState().routerSlotPicking != null;
476648
477147
  const wasFromWizard = wizardOpenedLlm.current;
476649
477148
  useUIStore.getState().closeModal("llmSelector");
@@ -476655,16 +477154,16 @@ function App({
476655
477154
  useUIStore.getState().openModal("firstRunWizard");
476656
477155
  }
476657
477156
  }, []);
476658
- const closeInfoPopup = import_react119.useCallback(() => {
477157
+ const closeInfoPopup = import_react120.useCallback(() => {
476659
477158
  const cfg = useUIStore.getState().infoPopupConfig;
476660
477159
  useUIStore.getState().closeInfoPopup();
476661
477160
  cfg?.onClose?.();
476662
477161
  }, []);
476663
- const onGitMenuCommit = import_react119.useCallback(() => {
477162
+ const onGitMenuCommit = import_react120.useCallback(() => {
476664
477163
  useUIStore.getState().closeModal("gitMenu");
476665
477164
  useUIStore.getState().openModal("gitCommit");
476666
477165
  }, []);
476667
- const handleNewSession = import_react119.useCallback(async () => {
477166
+ const handleNewSession = import_react120.useCallback(async () => {
476668
477167
  const activeChat_3 = tabMgrRef.current?.getActiveChat();
476669
477168
  const hasContent_0 = activeChat_3?.messages.some((m_2) => m_2.role === "user" || m_2.role === "assistant");
476670
477169
  if (hasContent_0 && activeChat_3) {
@@ -476698,7 +477197,7 @@ function App({
476698
477197
  renderer: renderer2,
476699
477198
  copyToClipboard: copyToClipboard2,
476700
477199
  activeChatRef,
476701
- cycleMode: import_react119.useCallback(() => {
477200
+ cycleMode: import_react120.useCallback(() => {
476702
477201
  const chat_1 = tabMgrRef.current?.getActiveChat();
476703
477202
  if (chat_1) {
476704
477203
  const next = chat_1.cycleMode();
@@ -477203,7 +477702,7 @@ function App({
477203
477702
  ]
477204
477703
  }, undefined, true, undefined, this);
477205
477704
  }
477206
- 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;
477207
477706
  var init_App = __esm(async () => {
477208
477707
  init_shallow2();
477209
477708
  init_config();
@@ -477269,10 +477768,10 @@ var init_App = __esm(async () => {
477269
477768
  init_SkillSearch(),
477270
477769
  init_ToolsPopup()
477271
477770
  ]);
477272
- import_compiler_runtime64 = __toESM(require_compiler_runtime(), 1);
477273
- import_react119 = __toESM(require_react(), 1);
477771
+ import_compiler_runtime65 = __toESM(require_compiler_runtime(), 1);
477772
+ import_react120 = __toESM(require_react(), 1);
477274
477773
  startMemoryPoll();
477275
- ABORT_ON_LOADING = new Set(["/clear", "/compact", "/plan"]);
477774
+ ABORT_ON_LOADING = new Set(["/clear", "/compact", "/plan", "/session clear", "/session compact", "/session plan"]);
477276
477775
  DEFAULT_TASK_ROUTER = {
477277
477776
  coding: null,
477278
477777
  exploration: null,
@@ -477488,7 +477987,7 @@ var brandPlain = getBrandSegments().map((s2) => s2.text).join("");
477488
477987
  var brandCol = Math.max(1, Math.floor((cols - brandPlain.length) / 2) + 1);
477489
477988
  var charIdx = 0;
477490
477989
  for (const part of brandParts) {
477491
- for (let _c65 = 0;_c65 < part.text.length; _c65++) {
477990
+ for (let _c66 = 0;_c66 < part.text.length; _c66++) {
477492
477991
  charIdx++;
477493
477992
  let out2 = `${at(ROW.brand, brandCol)}`;
477494
477993
  let pos = 0;