@wrongstack/cli 1.1.6 → 1.1.7

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.
@@ -1124,7 +1124,7 @@ var acpCmd = async (args, deps) => {
1124
1124
  const sub = args[0];
1125
1125
  const loginIndex = sub === "auth" ? 0 : (sub === "server" || sub === "serve") && args[1] === "auth" ? 1 : -1;
1126
1126
  if (loginIndex >= 0) {
1127
- const { authCmd } = await import("./auth-2ZG5DBHS.js");
1127
+ const { authCmd } = await import("./auth-XOJIPFFX.js");
1128
1128
  return authCmd(args.slice(loginIndex + 1), deps);
1129
1129
  }
1130
1130
  if (!sub || sub === "server" || sub === "serve") {
@@ -1205,4 +1205,4 @@ parallel:
1205
1205
  export {
1206
1206
  acpCmd
1207
1207
  };
1208
- //# sourceMappingURL=acp-CZBSFQB7.js.map
1208
+ //# sourceMappingURL=acp-DJWUTU5J.js.map
@@ -44,7 +44,7 @@ import {
44
44
  import "./chunk-BCKVNORU.js";
45
45
  import {
46
46
  parseAuthFlags
47
- } from "./chunk-M7PSENGF.js";
47
+ } from "./chunk-CL3BU45P.js";
48
48
  import "./chunk-W23PY4IJ.js";
49
49
 
50
50
  // src/subcommands/handlers/auth.ts
@@ -745,4 +745,4 @@ async function runAuthRemove(deps, providerId) {
745
745
  export {
746
746
  authCmd
747
747
  };
748
- //# sourceMappingURL=auth-2ZG5DBHS.js.map
748
+ //# sourceMappingURL=auth-XOJIPFFX.js.map
@@ -33,7 +33,7 @@ var helpCmd = async (_args, deps) => {
33
33
  ["wstack", "Interactive session (REPL or TUI, picked at launch)"],
34
34
  ['wstack "<task>"', 'Run one task and exit (also: --prompt "<task>")'],
35
35
  ["wstack quick", "Straight into the TUI with saved defaults"],
36
- ["wstack webui | simpleui", "Browser UI / minimal chat UI for this project"],
36
+ ["wstack webui | simpleui | vibeui", "Browser UI / minimal chat / focused coding workspace"],
37
37
  ["wstack desktop", "WrongStack Desktop (requires @wrongstack/desktop)"],
38
38
  ["wstack hq", "HQ command center across projects and machines"],
39
39
  ["wstack remote <user@host:/path>", "Run on a remote machine over SSH; WebUI tunneled here"],
@@ -129,6 +129,7 @@ var helpCmd = async (_args, deps) => {
129
129
  "--simpleui [same flags] [--full-auto]",
130
130
  "Minimal chat UI; --full-auto = YOLO + autonomy for this run only"
131
131
  ],
132
+ ["--vibeui [same browser flags]", "Focused coding workspace (default port 3476)"],
132
133
  [
133
134
  "--hq [--host <h>] [--port <n>] [--password <p>] [--tunnel] [--open]",
134
135
  "HQ server (+ --hq-allowlist, --hq-public-url)"
@@ -158,4 +159,4 @@ export {
158
159
  versionCmd,
159
160
  helpCmd
160
161
  };
161
- //# sourceMappingURL=chunk-UROB7MK5.js.map
162
+ //# sourceMappingURL=chunk-BQ5OMSZG.js.map
@@ -54,6 +54,7 @@ var BOOLEAN_FLAGS = /* @__PURE__ */ new Set([
54
54
  "webui",
55
55
  "webui-session-child",
56
56
  "simpleui",
57
+ "vibeui",
57
58
  "full-auto",
58
59
  "desktop",
59
60
  "open",
@@ -205,11 +206,11 @@ function parseArgs(argv) {
205
206
  return { flags, positional };
206
207
  }
207
208
  function normalizeSurfaceAliases(flags, positional) {
208
- if (flags["simpleui"]) flags["webui"] = true;
209
+ if (flags["simpleui"] || flags["vibeui"]) flags["webui"] = true;
209
210
  if (flags["webui-session-child"]) flags["webui"] = true;
210
211
  const first = positional[0];
211
- if (first === "simpleui") {
212
- flags["simpleui"] = true;
212
+ if (first === "simpleui" || first === "vibeui") {
213
+ flags[first] = true;
213
214
  flags["webui"] = true;
214
215
  positional.splice(0, 1);
215
216
  return;
@@ -313,4 +314,4 @@ export {
313
314
  parseAuthFlags,
314
315
  parseSpawnFlags
315
316
  };
316
- //# sourceMappingURL=chunk-M7PSENGF.js.map
317
+ //# sourceMappingURL=chunk-CL3BU45P.js.map
@@ -1,10 +1,10 @@
1
1
  import {
2
2
  parseArgs
3
- } from "./chunk-M7PSENGF.js";
3
+ } from "./chunk-CL3BU45P.js";
4
4
  import {
5
5
  helpCmd,
6
6
  versionCmd
7
- } from "./chunk-UROB7MK5.js";
7
+ } from "./chunk-BQ5OMSZG.js";
8
8
 
9
9
  // src/boot/short-circuit-flags.ts
10
10
  async function handleHelpVersionShortCircuit(argv) {
@@ -22,7 +22,7 @@ async function handleHelpVersionShortCircuit(argv) {
22
22
  }
23
23
  if (earlyFlags["help"] === true) {
24
24
  if (positional.length > 0) {
25
- const { subcommandNames } = await import("./subcommands-SKJPUJ7N.js");
25
+ const { subcommandNames } = await import("./subcommands-SR4K73WA.js");
26
26
  if (subcommandNames.includes(positional[0])) {
27
27
  const first = positional[0];
28
28
  const deep = positional[1];
@@ -43,4 +43,4 @@ async function handleHelpVersionShortCircuit(argv) {
43
43
  export {
44
44
  handleHelpVersionShortCircuit
45
45
  };
46
- //# sourceMappingURL=chunk-H5DCQFUI.js.map
46
+ //# sourceMappingURL=chunk-OCB4I4GQ.js.map
@@ -3,9 +3,9 @@
3
3
  var loaders = {
4
4
  automation: async () => (await import("./automation-O7ZRZSFS.js")).automationCmd,
5
5
  sandbox: async () => (await import("./sandbox-EZQ76MNY.js")).sandboxCmd,
6
- acp: async () => (await import("./acp-CZBSFQB7.js")).acpCmd,
6
+ acp: async () => (await import("./acp-DJWUTU5J.js")).acpCmd,
7
7
  init: async () => (await import("./init-5PLABNLR.js")).initCmd,
8
- auth: async () => (await import("./auth-2ZG5DBHS.js")).authCmd,
8
+ auth: async () => (await import("./auth-XOJIPFFX.js")).authCmd,
9
9
  update: async () => (await import("./update-54W7GUS5.js")).updateCmd,
10
10
  remote: async () => (await import("./remote-AKKRJEHK.js")).remoteCmd,
11
11
  sessions: async () => (await import("./sessions-config-7MK742OW.js")).sessionsCmd,
@@ -29,8 +29,8 @@ var loaders = {
29
29
  "proxy-status": async () => (await import("./diag-doctor-5SVYK2DR.js")).proxyCmd,
30
30
  export: async () => (await import("./export-W27PTU6Y.js")).exportCmd,
31
31
  usage: async () => (await import("./plugin-usage-UWKYMNQU.js")).usageCmd,
32
- version: async () => (await import("./version-help-X6CC4CFY.js")).versionCmd,
33
- help: async () => (await import("./version-help-X6CC4CFY.js")).helpCmd,
32
+ version: async () => (await import("./version-help-MITOB3YK.js")).versionCmd,
33
+ help: async () => (await import("./version-help-MITOB3YK.js")).helpCmd,
34
34
  projects: async () => (await import("./projects-FWRJHW3S.js")).projectsCmd,
35
35
  modeldiag: async () => (await import("./modeldiag-5PBB777J.js")).modeldiagCmd,
36
36
  quick: async () => (await import("./quick-NPC3N3ZX.js")).quickCmd,
@@ -58,4 +58,4 @@ export {
58
58
  subcommands,
59
59
  subcommandNames
60
60
  };
61
- //# sourceMappingURL=chunk-W7X23HI6.js.map
61
+ //# sourceMappingURL=chunk-V3AKAH25.js.map
@@ -22,7 +22,7 @@ import {
22
22
  } from "./chunk-FUJHWQV4.js";
23
23
  import {
24
24
  handleHelpVersionShortCircuit
25
- } from "./chunk-H5DCQFUI.js";
25
+ } from "./chunk-OCB4I4GQ.js";
26
26
  import {
27
27
  fmtTok,
28
28
  patchConfig
@@ -32,7 +32,7 @@ import {
32
32
  } from "./chunk-NL2ABOAS.js";
33
33
  import {
34
34
  subcommands
35
- } from "./chunk-W7X23HI6.js";
35
+ } from "./chunk-V3AKAH25.js";
36
36
  import {
37
37
  renderDeepHelp,
38
38
  renderFocusedHelp
@@ -100,7 +100,7 @@ import {
100
100
  } from "./chunk-CVVQ5NCN.js";
101
101
  import {
102
102
  parseArgs
103
- } from "./chunk-M7PSENGF.js";
103
+ } from "./chunk-CL3BU45P.js";
104
104
  import {
105
105
  ACP_LEADER_PROVIDER_ID
106
106
  } from "./chunk-X4DEQLAZ.js";
@@ -108,7 +108,7 @@ import "./chunk-H53EXXAU.js";
108
108
  import {
109
109
  applyAsciiMode
110
110
  } from "./chunk-UVF3BGET.js";
111
- import "./chunk-UROB7MK5.js";
111
+ import "./chunk-BQ5OMSZG.js";
112
112
  import {
113
113
  CLI_VERSION
114
114
  } from "./chunk-HKMOIIPQ.js";
@@ -364,6 +364,7 @@ import { color, isStdinTTY, setRawMode } from "@wrongstack/core/utils";
364
364
  var DEFAULT_PORTS = {
365
365
  webui: 3456,
366
366
  simpleui: 3466,
367
+ vibeui: 3476,
367
368
  hq: DEFAULT_PORT
368
369
  };
369
370
  var MODE_OPTIONS = [
@@ -401,6 +402,13 @@ var MODE_OPTIONS = [
401
402
  label: "Desktop",
402
403
  hint: "Electron app (alias: --desktop)",
403
404
  icon: "\u{1F5A5}"
405
+ },
406
+ {
407
+ key: 6,
408
+ mode: "vibeui",
409
+ label: "VibeUI",
410
+ hint: `focused coding workspace (port ${DEFAULT_PORTS.vibeui})`,
411
+ icon: "\u2726"
404
412
  }
405
413
  ];
406
414
  var MENU_TIMEOUT_MS = 8e3;
@@ -564,6 +572,7 @@ function shouldSkipMenu(argv, flags, positional) {
564
572
  if (flags["webui"] === true) return true;
565
573
  if (flags["webui-session-child"] === true) return true;
566
574
  if (flags["simpleui"] === true) return true;
575
+ if (flags["vibeui"] === true) return true;
567
576
  if (flags["hq"] === true) return true;
568
577
  if (flags["desktop"] === true) return true;
569
578
  if (flags["no-interactive"] === true) return true;
@@ -715,6 +724,8 @@ function describeMode(mode) {
715
724
  return "WebUI";
716
725
  case "simpleui":
717
726
  return "SimpleUI";
727
+ case "vibeui":
728
+ return "VibeUI";
718
729
  case "hq":
719
730
  return "HQ";
720
731
  case "desktop":
@@ -741,6 +752,11 @@ function applyLaunchMenuToArgv(argv, result) {
741
752
  if (typeof result.host === "string") out.push(`--host=${result.host}`);
742
753
  out.push("--simpleui");
743
754
  return out;
755
+ case "vibeui":
756
+ if (typeof result.port === "number") out.push(`--port=${result.port}`);
757
+ if (typeof result.host === "string") out.push(`--host=${result.host}`);
758
+ out.push("--vibeui");
759
+ return out;
744
760
  case "hq":
745
761
  if (typeof result.port === "number") out.push(`--port=${result.port}`);
746
762
  if (typeof result.host === "string") out.push(`--host=${result.host}`);
@@ -1230,7 +1246,14 @@ async function resolveAppendedSystemPrompt(flags, cwd) {
1230
1246
  // src/boot/config-backup-recovery.ts
1231
1247
  import * as fs3 from "node:fs/promises";
1232
1248
  import * as path5 from "node:path";
1233
- import { atomicWrite as atomicWrite2, backupConfigFile, color as color5, toErrorMessage } from "@wrongstack/core/utils";
1249
+ import {
1250
+ atomicWrite as atomicWrite2,
1251
+ backupConfigFile,
1252
+ color as color5,
1253
+ configSlug,
1254
+ safeProfileName,
1255
+ toErrorMessage
1256
+ } from "@wrongstack/core/utils";
1234
1257
  function isRecord(value) {
1235
1258
  return value !== null && typeof value === "object" && !Array.isArray(value);
1236
1259
  }
@@ -1248,9 +1271,7 @@ async function defaultProfileProvidersAreEmpty(profilePath) {
1248
1271
  }
1249
1272
  }
1250
1273
  function profileSnapshotTimestamp(fileName, fallback) {
1251
- const match = /^profiles-default-config-(\d{4})-(\d{2})-(\d{2})T(\d{2})-(\d{2})-(\d{2})-(\d{3})\.json$/i.exec(
1252
- fileName
1253
- );
1274
+ const match = /-(\d{4})-(\d{2})-(\d{2})T(\d{2})-(\d{2})-(\d{2})-(\d{3})\.json$/i.exec(fileName);
1254
1275
  if (!match) return fallback;
1255
1276
  const [, year, month, day, hour, minute, second, millisecond] = match;
1256
1277
  return Date.UTC(
@@ -1265,9 +1286,13 @@ function profileSnapshotTimestamp(fileName, fallback) {
1265
1286
  }
1266
1287
  async function findLatestProviderBackup(globalRoot, profileName = "default") {
1267
1288
  const directory = path5.join(globalRoot, "config-history");
1268
- const escapedProfile = profileName.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
1289
+ const prefix = configSlug(
1290
+ path5.join(globalRoot, "profiles", safeProfileName(profileName), "config.json"),
1291
+ globalRoot
1292
+ );
1293
+ const escapedPrefix = prefix.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
1269
1294
  const filePattern = new RegExp(
1270
- `^profiles-${escapedProfile}-config-\\d{4}-\\d{2}-\\d{2}T\\d{2}-\\d{2}-\\d{2}-\\d{3}\\.json$`,
1295
+ `^${escapedPrefix}-\\d{4}-\\d{2}-\\d{2}T\\d{2}-\\d{2}-\\d{2}-\\d{3}\\.json$`,
1271
1296
  "i"
1272
1297
  );
1273
1298
  const candidates = [];
@@ -3639,4 +3664,4 @@ async function initializeCli(argv, options = {}) {
3639
3664
  export {
3640
3665
  initializeCli
3641
3666
  };
3642
- //# sourceMappingURL=cli-context-6KS3HV5R.js.map
3667
+ //# sourceMappingURL=cli-context-F3B5TRZX.js.map
@@ -192,7 +192,7 @@ import {
192
192
  } from "./chunk-BCKVNORU.js";
193
193
  import {
194
194
  parseSpawnFlags
195
- } from "./chunk-M7PSENGF.js";
195
+ } from "./chunk-CL3BU45P.js";
196
196
  import {
197
197
  ACP_LEADER_PROVIDER_ID,
198
198
  acpLeaderSessionAgent,
@@ -41199,7 +41199,7 @@ function setupCliHeapWatchdog({
41199
41199
  const hqSnapshot = brainMailbox.getHqSnapshotStats();
41200
41200
  const kanbanSync = hqPublisherRef.getKanbanSyncStats?.();
41201
41201
  return {
41202
- surface: flags["simpleui"] ? "simpleui" : flags["webui"] ? "webui" : tuiOwnsScreen ? "tui" : "cli",
41202
+ surface: flags["vibeui"] ? "vibeui" : flags["simpleui"] ? "simpleui" : flags["webui"] ? "webui" : tuiOwnsScreen ? "tui" : "cli",
41203
41203
  sessionId: context.session.id,
41204
41204
  messages: context.state.messages.length,
41205
41205
  messageEstimatedTokens: context.state.messages.reduce(
@@ -43444,7 +43444,7 @@ async function runCliExecution(params) {
43444
43444
  governanceHandle,
43445
43445
  setConfig
43446
43446
  } = params;
43447
- const { execute } = await import("./execution-RVDUXLNT.js");
43447
+ const { execute } = await import("./execution-W3OWWXY7.js");
43448
43448
  return execute(
43449
43449
  toExecuteDeps({
43450
43450
  core: {
@@ -43865,4 +43865,4 @@ export {
43865
43865
  CLI_VERSION,
43866
43866
  runInteractive
43867
43867
  };
43868
- //# sourceMappingURL=cli-main-NF3YGDME.js.map
43868
+ //# sourceMappingURL=cli-main-BPYX7AC6.js.map
@@ -3247,6 +3247,7 @@ function readTuiSettings(configStore) {
3247
3247
  breakerEnabled: cfg.circuitBreaker?.enabled === true,
3248
3248
  breakerAutoKillResetMs: cfg.circuitBreaker?.autoKillResetMs ?? 6e4,
3249
3249
  showModelReasoning: autonomy?.showModelReasoning ?? false,
3250
+ selectionMode: autonomy?.selectionMode === "text" ? "text" : "block",
3250
3251
  toolResultViewMode: autonomy?.toolResultViewMode === "minimal" || autonomy?.toolResultViewMode === "full" ? autonomy.toolResultViewMode : "normal",
3251
3252
  showAgentSwarmPanel: coerceAgentSwarmMode(autonomy?.showAgentSwarmPanel),
3252
3253
  showSidebar: autonomy?.showSidebar ?? true,
@@ -3304,7 +3305,7 @@ function createSettingsAdapter(ctx) {
3304
3305
  nextSystemPromptVariant = s.nextSystemPromptVariant;
3305
3306
  }
3306
3307
  }
3307
- if (s.mode !== void 0 || s.delayMs !== void 0 || s.titleAnimation !== void 0 || s.yolo !== void 0 || s.fleetChatVerbosity !== void 0 || s.chime !== void 0 || s.confirmExit !== void 0 || s.mouseMode !== void 0 || s.featureMcp !== void 0 || s.featurePlugins !== void 0 || s.featureMemory !== void 0 || s.featureSkills !== void 0 || s.featureModelsRegistry !== void 0 || s.featureToolCoach !== void 0 || s.featureTokenSaving !== void 0 || s.allowOutsideProjectRoot !== void 0 || s.contextAutoCompact !== void 0 || s.contextStrategy !== void 0 || s.contextMode !== void 0 || s.maxConcurrent !== void 0 || s.logLevel !== void 0 || s.auditLevel !== void 0 || s.indexOnStart !== void 0 || s.maxIterations !== void 0 || s.multiDiffSummaryThreshold !== void 0 || s.nextStepsTool !== void 0 || s.nextStepsRequired !== void 0 || s.rememberStartupChoices !== void 0 || s.restrictFsToRoot !== void 0 || s.nextPrediction !== void 0 || s.debugStream !== void 0 || s.shellBangWarningDontShowAgain !== void 0 || s.configScope !== void 0 || s.enhanceDelayMs !== void 0 || s.enhanceEnabled !== void 0 || s.preRefineSeconds !== void 0 || s.enhanceLanguage !== void 0 || s.midRunSendPicker !== void 0 || s.statuslineMode !== void 0 || s.thinkingWord !== void 0 || s.animationStyle !== void 0 || s.autonomyNextPrompt !== void 0 || s.autoProceedMaxIterations !== void 0 || s.reasoningMode !== void 0 || s.reasoningEffort !== void 0 || s.reasoningPreserve !== void 0 || s.cacheTtl !== void 0 || s.breakerEnabled !== void 0 || s.breakerAutoKillResetMs !== void 0 || s.showModelReasoning !== void 0 || s.toolResultViewMode !== void 0 || s.showAgentSwarmPanel !== void 0 || s.showSidebar !== void 0 || s.panelPositions !== void 0 || s.lastSettingsField !== void 0 || s.showSageMemoryInject !== void 0 || s.sageMemoryInjectThreshold !== void 0 || s.readSymbols !== void 0 || // WrongProxy / WrongTrace: gate the persisted-section write on
3308
+ if (s.mode !== void 0 || s.delayMs !== void 0 || s.titleAnimation !== void 0 || s.yolo !== void 0 || s.fleetChatVerbosity !== void 0 || s.chime !== void 0 || s.confirmExit !== void 0 || s.mouseMode !== void 0 || s.featureMcp !== void 0 || s.featurePlugins !== void 0 || s.featureMemory !== void 0 || s.featureSkills !== void 0 || s.featureModelsRegistry !== void 0 || s.featureToolCoach !== void 0 || s.featureTokenSaving !== void 0 || s.allowOutsideProjectRoot !== void 0 || s.contextAutoCompact !== void 0 || s.contextStrategy !== void 0 || s.contextMode !== void 0 || s.maxConcurrent !== void 0 || s.logLevel !== void 0 || s.auditLevel !== void 0 || s.indexOnStart !== void 0 || s.maxIterations !== void 0 || s.multiDiffSummaryThreshold !== void 0 || s.nextStepsTool !== void 0 || s.nextStepsRequired !== void 0 || s.rememberStartupChoices !== void 0 || s.restrictFsToRoot !== void 0 || s.nextPrediction !== void 0 || s.debugStream !== void 0 || s.shellBangWarningDontShowAgain !== void 0 || s.configScope !== void 0 || s.enhanceDelayMs !== void 0 || s.enhanceEnabled !== void 0 || s.preRefineSeconds !== void 0 || s.enhanceLanguage !== void 0 || s.midRunSendPicker !== void 0 || s.statuslineMode !== void 0 || s.thinkingWord !== void 0 || s.animationStyle !== void 0 || s.autonomyNextPrompt !== void 0 || s.autoProceedMaxIterations !== void 0 || s.reasoningMode !== void 0 || s.reasoningEffort !== void 0 || s.reasoningPreserve !== void 0 || s.cacheTtl !== void 0 || s.breakerEnabled !== void 0 || s.breakerAutoKillResetMs !== void 0 || s.showModelReasoning !== void 0 || s.toolResultViewMode !== void 0 || s.selectionMode !== void 0 || s.showAgentSwarmPanel !== void 0 || s.showSidebar !== void 0 || s.panelPositions !== void 0 || s.lastSettingsField !== void 0 || s.showSageMemoryInject !== void 0 || s.sageMemoryInjectThreshold !== void 0 || s.readSymbols !== void 0 || // WrongProxy / WrongTrace: gate the persisted-section write on
3308
3309
  // either key being present in the live patch. Without this, a
3309
3310
  // picker toggle round-trip would silently no-op the persistence
3310
3311
  // layer (the runtime probe would never read the change).
@@ -3351,6 +3352,7 @@ function createSettingsAdapter(ctx) {
3351
3352
  autonomy.showModelReasoning = s.showModelReasoning;
3352
3353
  if (s.toolResultViewMode !== void 0)
3353
3354
  autonomy.toolResultViewMode = s.toolResultViewMode;
3355
+ if (s.selectionMode !== void 0) autonomy.selectionMode = s.selectionMode;
3354
3356
  if (s.showAgentSwarmPanel !== void 0)
3355
3357
  autonomy.showAgentSwarmPanel = s.showAgentSwarmPanel;
3356
3358
  if (s.showSidebar !== void 0) autonomy.showSidebar = s.showSidebar;
@@ -6836,10 +6838,11 @@ async function runWebUIDispatch(ctx) {
6836
6838
  } = ctx;
6837
6839
  const isSessionChild = Boolean(webuiSessionChild);
6838
6840
  const isSimpleUi = !isSessionChild && flags["simpleui"] === true;
6841
+ const isVibeUi = !isSessionChild && flags["vibeui"] === true;
6839
6842
  agent.disableInteractiveConfirmation();
6840
6843
  confirmAcpLeaderThroughEvents();
6841
6844
  renderer.setSilent(true);
6842
- const { runWebUI } = await import("./webui-server-6I6QOECV.js");
6845
+ const { runWebUI } = await import("./webui-server-KREX7GYA.js");
6843
6846
  const flagValue = (names) => {
6844
6847
  for (const name of names) {
6845
6848
  if (!Object.hasOwn(flags, name)) continue;
@@ -6884,7 +6887,7 @@ async function runWebUIDispatch(ctx) {
6884
6887
  let frontendDistDir;
6885
6888
  try {
6886
6889
  webuiHost = webuiSessionChild?.host ?? flagValue(["webui-host", "host"]) ?? process.env["WEBUI_HOST"] ?? process.env["WS_HOST"] ?? "127.0.0.1";
6887
- const defaultPort = isSimpleUi ? 3466 : 3456;
6890
+ const defaultPort = isVibeUi ? 3476 : isSimpleUi ? 3466 : 3456;
6888
6891
  webuiPort = webuiSessionChild?.port ?? parsePort(
6889
6892
  flagValue(["webui-port", "http-port", "port", "ws-port"]) ?? process.env["WEBUI_PORT"] ?? process.env["PORT"] ?? process.env["WS_PORT"],
6890
6893
  defaultPort,
@@ -6898,6 +6901,10 @@ async function runWebUIDispatch(ctx) {
6898
6901
  const { ensureSimpleUiDistDir } = await import("./simpleui-dist-EE3TJRBG.js");
6899
6902
  frontendDistDir = await ensureSimpleUiDistDir();
6900
6903
  }
6904
+ if (isVibeUi) {
6905
+ const { resolveVibeUiDistDir } = await import("./vibeui-dist-OEPU6BOM.js");
6906
+ frontendDistDir = resolveVibeUiDistDir();
6907
+ }
6901
6908
  } catch (err) {
6902
6909
  if (webuiSessionChild) {
6903
6910
  await writeWebuiSessionChildError(webuiSessionChild.readyFile, {
@@ -6918,7 +6925,7 @@ async function runWebUIDispatch(ctx) {
6918
6925
  events,
6919
6926
  statusTracker,
6920
6927
  session,
6921
- surface: isSimpleUi ? "simpleui" : "webui",
6928
+ surface: isVibeUi ? "vibeui" : isSimpleUi ? "simpleui" : "webui",
6922
6929
  host: webuiHost,
6923
6930
  port: webuiPort,
6924
6931
  frontendDistDir,
@@ -7025,7 +7032,7 @@ async function runWebUIDispatch(ctx) {
7025
7032
  }).catch(() => void 0);
7026
7033
  return;
7027
7034
  }
7028
- const surface = isSimpleUi ? "SimpleUI" : "WebUI";
7035
+ const surface = isVibeUi ? "VibeUI" : isSimpleUi ? "SimpleUI" : "WebUI";
7029
7036
  renderer.writeInfo(
7030
7037
  ` \u2726 ${terminalText(surface, "success", { bold: true })} ${terminalText("running \u2192", "muted")} ${terminalLink(url)}`
7031
7038
  );
@@ -7057,7 +7064,9 @@ async function runWebUIDispatch(ctx) {
7057
7064
  renderer.setSilent(false);
7058
7065
  renderer.write("\n");
7059
7066
  renderer.writeInfo(
7060
- color10.yellow(` Shutting down ${isSimpleUi ? "SimpleUI" : "WebUI"} server\u2026`)
7067
+ color10.yellow(
7068
+ ` Shutting down ${isVibeUi ? "VibeUI" : isSimpleUi ? "SimpleUI" : "WebUI"} server\u2026`
7069
+ )
7061
7070
  );
7062
7071
  resolve5(0);
7063
7072
  }).catch((err) => {
@@ -7074,7 +7083,7 @@ async function runWebUIDispatch(ctx) {
7074
7083
  renderer.setSilent(false);
7075
7084
  renderer.writeInfo(
7076
7085
  color10.red(
7077
- ` \u2717 ${isSimpleUi ? "SimpleUI" : "WebUI"} failed to start: ${err instanceof Error ? err.message : String(err)}`
7086
+ ` \u2717 ${isVibeUi ? "VibeUI" : isSimpleUi ? "SimpleUI" : "WebUI"} failed to start: ${err instanceof Error ? err.message : String(err)}`
7078
7087
  )
7079
7088
  );
7080
7089
  resolve5(1);
@@ -7680,4 +7689,4 @@ export {
7680
7689
  execute,
7681
7690
  resolveReviewerFallbackModels
7682
7691
  };
7683
- //# sourceMappingURL=execution-RVDUXLNT.js.map
7692
+ //# sourceMappingURL=execution-W3OWWXY7.js.map
package/dist/index.js CHANGED
@@ -5,7 +5,7 @@ import {
5
5
  } from "./chunk-CVVQ5NCN.js";
6
6
  import {
7
7
  parseArgs
8
- } from "./chunk-M7PSENGF.js";
8
+ } from "./chunk-CL3BU45P.js";
9
9
  import {
10
10
  closeAcpLeaderSessions
11
11
  } from "./chunk-X4DEQLAZ.js";
@@ -18,7 +18,7 @@ import "./chunk-W23PY4IJ.js";
18
18
  import { format, stripVTControlCharacters } from "node:util";
19
19
  var LEVELS = ["log", "info", "debug", "warn"];
20
20
  function shouldCaptureTuiStartup(flags, positional, interactive = process.stdin.isTTY === true && process.stdout.isTTY === true) {
21
- return interactive && !flags["no-tui"] && !flags["webui"] && !flags["simpleui"] && !flags["hq"] && !flags["desktop"] && !flags["remote"] && !flags["no-interactive"] && typeof flags["prompt"] !== "string" && (positional.length === 0 || positional[0] === "quick" || positional[0] === "resume" && positional.length === 2);
21
+ return interactive && !flags["no-tui"] && !flags["webui"] && !flags["simpleui"] && !flags["vibeui"] && !flags["hq"] && !flags["desktop"] && !flags["remote"] && !flags["no-interactive"] && typeof flags["prompt"] !== "string" && (positional.length === 0 || positional[0] === "quick" || positional[0] === "resume" && positional.length === 2);
22
22
  }
23
23
  function startTuiStartupOutput(enabled) {
24
24
  const originals = Object.fromEntries(LEVELS.map((level) => [level, console[level]]));
@@ -125,7 +125,7 @@ async function main(argv) {
125
125
  applyAsciiMode(earlyFlags);
126
126
  }
127
127
  if (earlyFlags["help"] === true || earlyFlags["version"] === true) {
128
- const { handleHelpVersionShortCircuit } = await import("./short-circuit-flags-276OLPIN.js");
128
+ const { handleHelpVersionShortCircuit } = await import("./short-circuit-flags-6LWKP4KP.js");
129
129
  const earlyExit = await handleHelpVersionShortCircuit(argv);
130
130
  if (earlyExit !== null) return earlyExit;
131
131
  }
@@ -134,7 +134,7 @@ async function main(argv) {
134
134
  shouldCaptureTuiStartup(parsed.flags, parsed.positional)
135
135
  );
136
136
  try {
137
- const { initializeCli } = await import("./cli-context-6KS3HV5R.js");
137
+ const { initializeCli } = await import("./cli-context-F3B5TRZX.js");
138
138
  const cliCtx = await initializeCli(argv, {
139
139
  onNonTuiLaunch: () => startupOutput.stop()
140
140
  });
@@ -144,7 +144,7 @@ async function main(argv) {
144
144
  } else {
145
145
  startupOutput.stop();
146
146
  }
147
- const { runInteractive } = await import("./cli-main-NF3YGDME.js");
147
+ const { runInteractive } = await import("./cli-main-BPYX7AC6.js");
148
148
  return await runInteractive(cliCtx);
149
149
  } finally {
150
150
  startupOutput.stop();
@@ -70,6 +70,7 @@ export interface LiveSettingsInput {
70
70
  showModelReasoning?: boolean | undefined;
71
71
  /** Default presentation density for committed TUI tool results. */
72
72
  toolResultViewMode?: 'minimal' | 'normal' | 'full' | undefined;
73
+ selectionMode?: 'block' | 'text' | undefined;
73
74
  /** Agent swarm panel placement: 'bottom' (lower region), 'sidebar' (right sidebar), or 'off' (hidden).
74
75
  * Backward-compat: legacy boolean values are coerced by the TUI settings adapter. Default: 'bottom'. */
75
76
  showAgentSwarmPanel?: 'bottom' | 'sidebar' | 'off' | boolean | undefined;
@@ -0,0 +1,11 @@
1
+ import {
2
+ handleHelpVersionShortCircuit
3
+ } from "./chunk-OCB4I4GQ.js";
4
+ import "./chunk-CL3BU45P.js";
5
+ import "./chunk-BQ5OMSZG.js";
6
+ import "./chunk-HKMOIIPQ.js";
7
+ import "./chunk-W23PY4IJ.js";
8
+ export {
9
+ handleHelpVersionShortCircuit
10
+ };
11
+ //# sourceMappingURL=short-circuit-flags-6LWKP4KP.js.map
@@ -1,10 +1,10 @@
1
1
  import {
2
2
  subcommandNames,
3
3
  subcommands
4
- } from "./chunk-W7X23HI6.js";
4
+ } from "./chunk-V3AKAH25.js";
5
5
  import "./chunk-W23PY4IJ.js";
6
6
  export {
7
7
  subcommandNames,
8
8
  subcommands
9
9
  };
10
- //# sourceMappingURL=subcommands-SKJPUJ7N.js.map
10
+ //# sourceMappingURL=subcommands-SR4K73WA.js.map
@@ -1,11 +1,11 @@
1
1
  import {
2
2
  helpCmd,
3
3
  versionCmd
4
- } from "./chunk-UROB7MK5.js";
4
+ } from "./chunk-BQ5OMSZG.js";
5
5
  import "./chunk-HKMOIIPQ.js";
6
6
  import "./chunk-W23PY4IJ.js";
7
7
  export {
8
8
  helpCmd,
9
9
  versionCmd
10
10
  };
11
- //# sourceMappingURL=version-help-X6CC4CFY.js.map
11
+ //# sourceMappingURL=version-help-MITOB3YK.js.map
@@ -0,0 +1,27 @@
1
+ import "./chunk-W23PY4IJ.js";
2
+
3
+ // src/vibeui-dist.ts
4
+ import { existsSync } from "node:fs";
5
+ import { createRequire } from "node:module";
6
+ import * as path from "node:path";
7
+ import { wrongstackPackageJsonPath } from "@wrongstack/core/utils";
8
+ function resolveVibeUiDistDir(deps = {}) {
9
+ const require2 = createRequire(import.meta.url);
10
+ let packageJson;
11
+ try {
12
+ packageJson = deps.resolvePackageJson?.() ?? wrongstackPackageJsonPath("@wrongstack/vibeui", (id) => require2.resolve(id));
13
+ } catch {
14
+ throw new Error("VibeUI package is unavailable. Reinstall WrongStack with @wrongstack/vibeui.");
15
+ }
16
+ const distDir = path.join(path.dirname(packageJson), "dist");
17
+ if (!(deps.exists ?? existsSync)(path.join(distDir, "index.html"))) {
18
+ throw new Error(
19
+ "VibeUI frontend is not built. Run `bun run --filter @wrongstack/vibeui build`."
20
+ );
21
+ }
22
+ return distDir;
23
+ }
24
+ export {
25
+ resolveVibeUiDistDir
26
+ };
27
+ //# sourceMappingURL=vibeui-dist-OEPU6BOM.js.map
@@ -0,0 +1,6 @@
1
+ /** Resolve prebuilt assets in workspace, npm and extracted standalone installations. */
2
+ export declare function resolveVibeUiDistDir(deps?: {
3
+ resolvePackageJson?: () => string;
4
+ exists?: (file: string) => boolean;
5
+ }): string;
6
+ //# sourceMappingURL=vibeui-dist.d.ts.map
@@ -5,7 +5,7 @@ export declare function resolveWebuiHostSettings(opts: CliWebUIOptions): {
5
5
  publicUrl: string | undefined;
6
6
  publicWsUrl: string | undefined;
7
7
  requireToken: boolean;
8
- surface: "simpleui" | "webui";
8
+ surface: "simpleui" | "vibeui" | "webui";
9
9
  requestedHttpPort: number;
10
10
  strictPort: boolean;
11
11
  globalRoot: string;
@@ -9,7 +9,7 @@ import type { CliWebUIOptions } from '../webui-server-options.js';
9
9
  import type { WebuiTransport } from './transport.js';
10
10
  export interface WebuiHttpBridgeInput {
11
11
  opts: CliWebUIOptions;
12
- surface: 'webui' | 'simpleui';
12
+ surface: 'webui' | 'simpleui' | 'vibeui';
13
13
  host: string;
14
14
  httpPort: number;
15
15
  strictPort: boolean;
@@ -2,7 +2,7 @@
2
2
  import type { CliWebUIOptions } from '../webui-server-options.js';
3
3
  export interface EmbeddedInstanceRegistrationInput {
4
4
  opts: CliWebUIOptions;
5
- surface: 'webui' | 'simpleui';
5
+ surface: 'webui' | 'simpleui' | 'vibeui';
6
6
  host: string;
7
7
  httpPort: number;
8
8
  publicUrl: string | undefined;
@@ -171,7 +171,7 @@ function createEmbeddedClientRegistration(opts, clients, abortControllers, getSe
171
171
  }
172
172
  function startEmbeddedLiveStatusLogger(opts, clients, abortControllers, getSessionAgents, terminalLogView) {
173
173
  return startWebUILiveStatusLogger({
174
- title: opts.surface === "simpleui" ? "SimpleUI" : "WebUI",
174
+ title: opts.surface === "vibeui" ? "VibeUI" : opts.surface === "simpleui" ? "SimpleUI" : "WebUI",
175
175
  events: opts.events,
176
176
  dashboard: terminalLogView,
177
177
  getSessionList: () => {
@@ -381,7 +381,9 @@ function resolveWebuiHostSettings(opts) {
381
381
  const publicWsUrl = opts.publicWsUrl ?? process.env["WEBUI_PUBLIC_WS_URL"];
382
382
  const requireToken = opts.requireToken ?? envFlag("WEBUI_REQUIRE_TOKEN");
383
383
  const surface = opts.surface ?? "webui";
384
- const surfaceDefaults = surface === "simpleui" ? { http: 3466 } : { http: 3456 };
384
+ const surfaceDefaults = {
385
+ http: surface === "vibeui" ? 3476 : surface === "simpleui" ? 3466 : 3456
386
+ };
385
387
  const requestedHttpPort = opts.httpPort ?? opts.port ?? surfaceDefaults.http;
386
388
  const strictPort = opts.strictPort ?? isStrictPort();
387
389
  const globalRoot = opts.globalConfigPath ? path3.dirname(opts.globalConfigPath) : wstackGlobalRoot();
@@ -525,7 +527,7 @@ async function startWebuiHttpBridge(input) {
525
527
  publicWsUrl,
526
528
  apiToken: wsToken,
527
529
  requireToken,
528
- deferListen: surface === "simpleui",
530
+ deferListen: surface === "simpleui" || surface === "vibeui",
529
531
  strictPort,
530
532
  // Resolve the same-origin health probes from live preferences, including
531
533
  // changes made after boot, just like the standalone WebUI host.
@@ -563,7 +565,7 @@ async function startWebuiHttpBridge(input) {
563
565
  );
564
566
  });
565
567
  if (httpServer) {
566
- const boundPort = surface === "simpleui" ? await startDeferredHttpListen({
568
+ const boundPort = surface === "simpleui" || surface === "vibeui" ? await startDeferredHttpListen({
567
569
  server: httpServer.server,
568
570
  host,
569
571
  httpPort,
@@ -2238,7 +2240,7 @@ async function runWebUI(opts) {
2238
2240
  publicHostnames
2239
2241
  } = resolveWebuiHostSettings(opts);
2240
2242
  const terminalLogView = startTerminalDashboard({
2241
- title: surface === "simpleui" ? "SimpleUI" : "WebUI",
2243
+ title: surface === "vibeui" ? "VibeUI" : surface === "simpleui" ? "SimpleUI" : "WebUI",
2242
2244
  quiet: !envFlag2("WEBUI_LOGS"),
2243
2245
  // The dashboard is operator-owned terminal output, so retain the full
2244
2246
  // authenticated access URL here even though startup logs remain redacted.
@@ -2534,4 +2536,4 @@ async function runWebUI(opts) {
2534
2536
  export {
2535
2537
  runWebUI
2536
2538
  };
2537
- //# sourceMappingURL=webui-server-6I6QOECV.js.map
2539
+ //# sourceMappingURL=webui-server-KREX7GYA.js.map
@@ -35,7 +35,7 @@ export interface CliWebUIOptions {
35
35
  /** Alternate frontend dist directory (used by the independent SimpleUI surface). */
36
36
  frontendDistDir?: string | undefined;
37
37
  /** Surface kind: 'webui' (default) or 'simpleui'. Controls port defaults and the instance registry label. */
38
- surface?: 'webui' | 'simpleui' | undefined;
38
+ surface?: 'webui' | 'simpleui' | 'vibeui' | undefined;
39
39
  /** Fixed access token/password. Defaults to WEBUI_TOKEN or random per process. */
40
40
  accessToken?: string | undefined;
41
41
  /** Fail instead of auto-advancing when the requested HTTP/WS port is busy. */
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@wrongstack/cli",
3
- "version": "1.1.6",
3
+ "version": "1.1.7",
4
4
  "license": "MIT",
5
5
  "description": "WrongStack CLI — terminal AI coding agent with provider catalog from models.dev. Provides `wrongstack` and `wstack` binaries.",
6
6
  "keywords": [
@@ -48,46 +48,47 @@
48
48
  "clean": "bun -e \"require('node:fs').rmSync('dist',{recursive:true,force:true})\""
49
49
  },
50
50
  "dependencies": {
51
- "@wrongstack/acp": "1.1.2",
52
- "@wrongstack/bench": "1.1.2",
53
- "@wrongstack/codebase-index-mcp": "1.1.2",
54
- "@wrongstack/core": "1.1.2",
55
- "@wrongstack/kanban": "1.1.2",
56
- "@wrongstack/kanban-mcp": "1.1.2",
57
- "@wrongstack/mailbox-mcp": "1.1.2",
58
- "@wrongstack/mcp": "1.1.2",
59
- "@wrongstack/persistence": "1.1.2",
60
- "@wrongstack/plug-lsp": "1.1.2",
61
- "@wrongstack/plugins": "1.1.2",
62
- "@wrongstack/primitives": "1.1.2",
63
- "@wrongstack/providers": "1.1.2",
64
- "@wrongstack/requirement-intake": "1.1.2",
65
- "@wrongstack/requirement-intake-mcp": "1.1.2",
66
- "@wrongstack/runtime": "1.1.2",
67
- "@wrongstack/sage": "1.1.2",
68
- "@wrongstack/sage-mcp": "1.1.2",
69
- "@wrongstack/sdd": "1.1.2",
70
- "@wrongstack/security-scanner": "1.1.2",
71
- "@wrongstack/simpleui": "1.1.2",
72
- "@wrongstack/techstack": "1.1.2",
73
- "@wrongstack/telegram": "1.1.2",
74
- "@wrongstack/tools": "1.1.2",
75
- "@wrongstack/tui": "1.1.2",
76
- "@wrongstack/vector-memory": "1.1.2",
77
- "@wrongstack/webui": "1.1.2",
78
- "@wrongstack/webui-hq": "1.1.2",
79
- "@wrongstack/webui-protocol": "1.1.2",
80
- "@wrongstack/webui-server": "1.1.2",
81
- "@wrongstack/wrongtrace": "1.1.2",
51
+ "@wrongstack/acp": "1.1.7",
52
+ "@wrongstack/bench": "1.1.7",
53
+ "@wrongstack/codebase-index-mcp": "1.1.7",
54
+ "@wrongstack/core": "1.1.7",
55
+ "@wrongstack/kanban": "1.1.7",
56
+ "@wrongstack/kanban-mcp": "1.1.7",
57
+ "@wrongstack/mailbox-mcp": "1.1.7",
58
+ "@wrongstack/mcp": "1.1.7",
59
+ "@wrongstack/persistence": "1.1.7",
60
+ "@wrongstack/plug-lsp": "1.1.7",
61
+ "@wrongstack/plugins": "1.1.7",
62
+ "@wrongstack/primitives": "1.1.7",
63
+ "@wrongstack/providers": "1.1.7",
64
+ "@wrongstack/requirement-intake": "1.1.7",
65
+ "@wrongstack/requirement-intake-mcp": "1.1.7",
66
+ "@wrongstack/runtime": "1.1.7",
67
+ "@wrongstack/sage": "1.1.7",
68
+ "@wrongstack/sage-mcp": "1.1.7",
69
+ "@wrongstack/sdd": "1.1.7",
70
+ "@wrongstack/security-scanner": "1.1.7",
71
+ "@wrongstack/simpleui": "1.1.7",
72
+ "@wrongstack/vibeui": "1.1.7",
73
+ "@wrongstack/techstack": "1.1.7",
74
+ "@wrongstack/telegram": "1.1.7",
75
+ "@wrongstack/tools": "1.1.7",
76
+ "@wrongstack/tui": "1.1.7",
77
+ "@wrongstack/vector-memory": "1.1.7",
78
+ "@wrongstack/webui": "1.1.7",
79
+ "@wrongstack/webui-hq": "1.1.7",
80
+ "@wrongstack/webui-protocol": "1.1.7",
81
+ "@wrongstack/webui-server": "1.1.7",
82
+ "@wrongstack/wrongtrace": "1.1.7",
82
83
  "ws": "^8.22.0"
83
84
  },
84
85
  "optionalDependencies": {
85
- "@wrongstack/desktop": "1.1.2"
86
+ "@wrongstack/desktop": "1.1.7"
86
87
  },
87
88
  "devDependencies": {
88
89
  "@types/node": "^26.5.1",
89
90
  "@types/ws": "^8.18.1",
90
- "@wrongstack/governance": "1.1.2",
91
+ "@wrongstack/governance": "1.1.7",
91
92
  "jsdom": "^30.0.1",
92
93
  "typescript": "^7.0.2"
93
94
  },
@@ -1,11 +0,0 @@
1
- import {
2
- handleHelpVersionShortCircuit
3
- } from "./chunk-H5DCQFUI.js";
4
- import "./chunk-M7PSENGF.js";
5
- import "./chunk-UROB7MK5.js";
6
- import "./chunk-HKMOIIPQ.js";
7
- import "./chunk-W23PY4IJ.js";
8
- export {
9
- handleHelpVersionShortCircuit
10
- };
11
- //# sourceMappingURL=short-circuit-flags-276OLPIN.js.map