@wrongstack/cli 0.317.0 → 0.318.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.
@@ -1241,6 +1241,7 @@ import {
1241
1241
  } from "@wrongstack/core/agent-catalog";
1242
1242
  import {
1243
1243
  AdaptiveConcurrencyController,
1244
+ areSubagentsAllowedForSession as areSubagentsAllowedForSession2,
1244
1245
  DEFAULT_MAX_FLEET_SPAWNS as DEFAULT_MAX_FLEET_SPAWNS2,
1245
1246
  Director,
1246
1247
  FLEET_ROSTER as FLEET_ROSTER2,
@@ -1979,6 +1980,9 @@ function createHostExploreCompanion(input) {
1979
1980
  const template = roster[DEFAULT_EXPLORE_COMPANION_AGENT_ID];
1980
1981
  let residentId;
1981
1982
  const ensureResident = async () => {
1983
+ if (input.subagentsAllowed?.() === false) {
1984
+ throw new Error("Subagents are disabled for this session.");
1985
+ }
1982
1986
  if (residentId) {
1983
1987
  const alive = director.status().subagents.some((s) => s.id === residentId);
1984
1988
  if (alive) return residentId;
@@ -2378,6 +2382,9 @@ function applyFleetRootDefaults(opts) {
2378
2382
  }
2379
2383
  }
2380
2384
 
2385
+ // src/fleet/host-shadow-manager.ts
2386
+ import { areSubagentsAllowedForSession } from "@wrongstack/core/coordination";
2387
+
2381
2388
  // src/fleet/host-shadow-pass.ts
2382
2389
  async function runHostShadowPass(ctx, reason) {
2383
2390
  try {
@@ -2652,6 +2659,7 @@ var HostShadowManager = class {
2652
2659
  const director = this.ctx.getDirector();
2653
2660
  if (!director) return;
2654
2661
  const id = this.resolve(sessionId);
2662
+ if (!areSubagentsAllowedForSession(id)) return;
2655
2663
  const state = this.stateFor(id);
2656
2664
  if (state.passInFlight || state.agentId && this.isActiveSubagent(state.agentId)) {
2657
2665
  state.queuedProblem = state.queuedProblem ? `${state.queuedProblem}; ${reason}` : reason;
@@ -3710,6 +3718,10 @@ function createHostFleetSupervisor(input) {
3710
3718
  retargetPendingTask: (taskId, subagentId) => director.retargetPendingTask(taskId, subagentId),
3711
3719
  spawnHelper: async ({ reason, task }) => {
3712
3720
  try {
3721
+ const originSessionId = sessionOf(task?.subagentId);
3722
+ if (input.subagentsAllowed?.(originSessionId) === false) {
3723
+ return { error: "Subagents are disabled for this session." };
3724
+ }
3713
3725
  const routed = await dispatchAgent(task?.description ?? reason, {
3714
3726
  classifier: director.dispatchClassifier
3715
3727
  });
@@ -3726,7 +3738,7 @@ function createHostFleetSupervisor(input) {
3726
3738
  systemPromptOverride: helperPrompt,
3727
3739
  // The helper drains a specific backlog, so it belongs to whoever
3728
3740
  // owns that work — not to the tab this host booted with.
3729
- originSessionId: sessionOf(task?.subagentId)
3741
+ originSessionId
3730
3742
  });
3731
3743
  return { subagentId };
3732
3744
  } catch (err) {
@@ -3946,6 +3958,7 @@ var MultiAgentHost = class {
3946
3958
  * means the host's own session, which is the only one a CLI or TUI has.
3947
3959
  */
3948
3960
  async runShadowPass(reason, sessionId) {
3961
+ if (!areSubagentsAllowedForSession2(sessionId ?? this.deps.session.id)) return;
3949
3962
  return this.shadowManager.runShadowPass(reason, sessionId);
3950
3963
  }
3951
3964
  async ensureCoordinator(_config) {
@@ -4038,12 +4051,15 @@ var MultiAgentHost = class {
4038
4051
  sessionId,
4039
4052
  mailboxProjectDir: this.mailboxProjectDir(),
4040
4053
  roster: this.roster,
4041
- config: config.fleet?.exploreCompanion
4054
+ config: config.fleet?.exploreCompanion,
4055
+ subagentsAllowed: () => areSubagentsAllowedForSession2(sessionId)
4042
4056
  }) : null
4043
4057
  });
4044
4058
  this.exploreCompanions.ensure(this.deps.session.id);
4045
4059
  this.exploreCompanionOff = this.deps.events.on("agent.run.started", (e) => {
4046
- if (e.sessionId) this.exploreCompanions?.ensure(e.sessionId);
4060
+ if (e.sessionId && areSubagentsAllowedForSession2(e.sessionId)) {
4061
+ this.exploreCompanions?.ensure(e.sessionId);
4062
+ }
4047
4063
  });
4048
4064
  this.directorOffHandles.push(
4049
4065
  ...registerDirectorBudgetAndContextBridges({
@@ -4179,7 +4195,8 @@ var MultiAgentHost = class {
4179
4195
  sessionFor: (subagentId) => this.sessionForSubagent(subagentId),
4180
4196
  mailboxProjectDir: this.mailboxProjectDir(),
4181
4197
  roster: this.roster,
4182
- getLeaderMailboxId: this.opts.getLeaderMailboxId
4198
+ getLeaderMailboxId: this.opts.getLeaderMailboxId,
4199
+ subagentsAllowed: areSubagentsAllowedForSession2
4183
4200
  });
4184
4201
  }
4185
4202
  async reportTaskResultToLeader(n) {
@@ -4204,6 +4221,13 @@ var MultiAgentHost = class {
4204
4221
  async spawn(description, opts) {
4205
4222
  const isShadowSpawn = opts?.name === "shadow";
4206
4223
  const originSessionId = opts?.originSessionId ?? this.deps.session.id;
4224
+ if (!areSubagentsAllowedForSession2(originSessionId)) {
4225
+ throw new AgentError({
4226
+ message: "Subagents are disabled for this session.",
4227
+ code: "AGENT_RUN_FAILED",
4228
+ context: { sessionId: originSessionId, phase: "subagentPolicy" }
4229
+ });
4230
+ }
4207
4231
  if (isShadowSpawn) this.shadowManager.enterShadowSpawn(originSessionId);
4208
4232
  try {
4209
4233
  await this.buildDirector();
@@ -4258,6 +4282,14 @@ var MultiAgentHost = class {
4258
4282
  return result;
4259
4283
  }
4260
4284
  async _spawnAndAssign(subagentConfig, description = "", opts) {
4285
+ const originSessionId = subagentConfig.originSessionId ?? this.deps.session.id;
4286
+ if (!areSubagentsAllowedForSession2(originSessionId)) {
4287
+ throw new AgentError({
4288
+ message: "Subagents are disabled for this session.",
4289
+ code: "AGENT_RUN_FAILED",
4290
+ context: { sessionId: originSessionId, phase: "subagentPolicy" }
4291
+ });
4292
+ }
4261
4293
  const taskId = randomUUID5();
4262
4294
  if (!this.director)
4263
4295
  throw new AgentError({
@@ -5678,7 +5710,7 @@ async function runCliExecution(params) {
5678
5710
  governanceHandle,
5679
5711
  setConfig
5680
5712
  } = params;
5681
- const { execute } = await import("./execution-TZUGCKFU.js");
5713
+ const { execute } = await import("./execution-BN4QIFH6.js");
5682
5714
  return execute(
5683
5715
  toExecuteDeps({
5684
5716
  core: {
@@ -6902,7 +6934,10 @@ import { createReadStream } from "node:fs";
6902
6934
  import * as fs2 from "node:fs/promises";
6903
6935
  import * as path8 from "node:path";
6904
6936
  import { createInterface } from "node:readline";
6905
- import { FLEET_ROSTER as FLEET_ROSTER4 } from "@wrongstack/core/coordination";
6937
+ import {
6938
+ areSubagentsAllowedForSession as areSubagentsAllowedForSession3,
6939
+ FLEET_ROSTER as FLEET_ROSTER4
6940
+ } from "@wrongstack/core/coordination";
6906
6941
  import { loadDirectorState } from "@wrongstack/core/storage";
6907
6942
  import { AgentError as AgentError2 } from "@wrongstack/core/types";
6908
6943
  import { color as color5, expectDefined as expectDefined2 } from "@wrongstack/core/utils";
@@ -6954,6 +6989,10 @@ ${color5.dim("\u2500".repeat(40))}` : "";
6954
6989
  }
6955
6990
  },
6956
6991
  onFleetSpawn: async (role) => {
6992
+ const originSessionId = input.getSessionId();
6993
+ if (!areSubagentsAllowedForSession3(originSessionId)) {
6994
+ throw new Error("Subagents are disabled for this session.");
6995
+ }
6957
6996
  const director = input.getDirector();
6958
6997
  if (!director) {
6959
6998
  throw new AgentError2({
@@ -6962,14 +7001,15 @@ ${color5.dim("\u2500".repeat(40))}` : "";
6962
7001
  context: { phase: "fleet-spawn", role }
6963
7002
  });
6964
7003
  }
6965
- return director.spawn(
6966
- FLEET_ROSTER4[role] ?? {
7004
+ return director.spawn({
7005
+ ...FLEET_ROSTER4[role] ?? {
6967
7006
  id: `manual-${Date.now()}`,
6968
7007
  name: role,
6969
7008
  maxIterations: 50,
6970
7009
  maxToolCalls: 200
6971
- }
6972
- );
7010
+ },
7011
+ originSessionId
7012
+ });
6973
7013
  },
6974
7014
  onFleetLog: (subagentId, mode) => readFleetLog(input.fleetRoot, subagentId, mode),
6975
7015
  onFleetRetry: (taskId) => retryInterruptedTasks(input, taskId),
@@ -7296,6 +7336,10 @@ async function retryInterruptedTasks(input, taskId) {
7296
7336
  const targets = taskId === "all" ? interrupted : interrupted.filter((task) => task.taskId === taskId || task.taskId.startsWith(taskId));
7297
7337
  if (targets.length === 0) return `No interrupted task matched "${taskId}".`;
7298
7338
  const results = [];
7339
+ const originSessionId = input.getSessionId();
7340
+ if (!areSubagentsAllowedForSession3(originSessionId)) {
7341
+ return "Subagents are disabled for this session.";
7342
+ }
7299
7343
  for (const task of targets) {
7300
7344
  const owner = task.subagentId ? prior.subagents.find((subagent) => subagent.id === task.subagentId) : void 0;
7301
7345
  if (!owner) {
@@ -7310,7 +7354,7 @@ async function retryInterruptedTasks(input, taskId) {
7310
7354
  model: owner.model
7311
7355
  };
7312
7356
  try {
7313
- const subagentId = await director.spawn(config);
7357
+ const subagentId = await director.spawn({ ...config, originSessionId });
7314
7358
  const newTaskId = await director.assign({
7315
7359
  id: "",
7316
7360
  description: task.description ?? "(no description)",
@@ -31658,7 +31702,10 @@ function setupCliSlashCommands(params) {
31658
31702
  }
31659
31703
 
31660
31704
  // src/wiring/command-host-state.ts
31661
- import { FLEET_ROSTER as FLEET_ROSTER5 } from "@wrongstack/core/coordination";
31705
+ import {
31706
+ areSubagentsAllowedForSession as areSubagentsAllowedForSession4,
31707
+ FLEET_ROSTER as FLEET_ROSTER5
31708
+ } from "@wrongstack/core/coordination";
31662
31709
  import {
31663
31710
  AgentError as AgentError3,
31664
31711
  resolveFleetChatVerbosity as resolveFleetChatVerbosity2
@@ -31735,7 +31782,7 @@ async function setupCommandHostState(input) {
31735
31782
  input.hqCommandController.interruptLeader = () => interruptController.abortLeader();
31736
31783
  input.hqCommandController.killFleet = () => killFleet2(input.getDirector());
31737
31784
  input.hqCommandController.terminateAgent = (subagentId) => terminateAgent(input.getDirector(), subagentId);
31738
- input.hqCommandController.spawnAgent = (role, task, maxIterations) => spawnAgent2(input.getDirector(), role, task, maxIterations);
31785
+ input.hqCommandController.spawnAgent = (role, task, maxIterations) => spawnAgent2(input.getDirector(), input.sessionRef.current?.id ?? input.session.id, role, task, maxIterations);
31739
31786
  const enhanceController = createEnhanceController(input.getConfig());
31740
31787
  const statuslineConfigDeps = createStatuslineConfigDeps();
31741
31788
  const hidden = await loadStatuslineHiddenItems();
@@ -31836,7 +31883,7 @@ async function terminateAgent(director, subagentId) {
31836
31883
  return false;
31837
31884
  }
31838
31885
  }
31839
- async function spawnAgent2(director, role, task, maxIterations) {
31886
+ async function spawnAgent2(director, sessionId, role, task, maxIterations) {
31840
31887
  if (!director) {
31841
31888
  throw new AgentError3({
31842
31889
  message: "Director is not available.",
@@ -31844,6 +31891,9 @@ async function spawnAgent2(director, role, task, maxIterations) {
31844
31891
  context: { phase: "hq-spawn", role }
31845
31892
  });
31846
31893
  }
31894
+ if (!areSubagentsAllowedForSession4(sessionId)) {
31895
+ throw new Error("Subagents are disabled for this session.");
31896
+ }
31847
31897
  const base = FLEET_ROSTER5[role] ?? {
31848
31898
  id: `manual-${Date.now()}`,
31849
31899
  name: role,
@@ -31851,7 +31901,7 @@ async function spawnAgent2(director, role, task, maxIterations) {
31851
31901
  maxToolCalls: 200
31852
31902
  };
31853
31903
  const config = task !== void 0 ? { ...base, task } : base;
31854
- return director.spawn(config);
31904
+ return director.spawn({ ...config, originSessionId: sessionId });
31855
31905
  }
31856
31906
 
31857
31907
  // src/wiring/dep-watcher.ts
@@ -34609,6 +34659,10 @@ import { addFatalSalvageHook } from "@wrongstack/core/utils";
34609
34659
  import { randomBytes as randomBytes2 } from "node:crypto";
34610
34660
  import * as path30 from "node:path";
34611
34661
  import { Context as Context2 } from "@wrongstack/core/agent";
34662
+ import {
34663
+ restoreSessionSubagentPolicy,
34664
+ seedSessionSubagentPolicy
34665
+ } from "@wrongstack/core/coordination";
34612
34666
  import { ProviderCacheLedger } from "@wrongstack/core/infrastructure";
34613
34667
  import {
34614
34668
  attachTodosCheckpoint,
@@ -34743,6 +34797,7 @@ async function setupSession(params) {
34743
34797
  let restoredMessages = [];
34744
34798
  let restoredToolCalls = [];
34745
34799
  let restoredEvents = [];
34800
+ let restoredSubagentsAllowed;
34746
34801
  let resumedModel;
34747
34802
  let resumedProvider;
34748
34803
  if (resumeId) {
@@ -34762,6 +34817,7 @@ async function setupSession(params) {
34762
34817
  restoredMessages = resumed.data.messages;
34763
34818
  restoredToolCalls = resumed.data.toolCallEnds ?? [];
34764
34819
  restoredEvents = resumed.data.events ?? [];
34820
+ restoredSubagentsAllowed = resumed.data.subagentsAllowed;
34765
34821
  resumedModel = resumed.data.metadata.model;
34766
34822
  resumedProvider = resumed.data.metadata.provider;
34767
34823
  if (resumed.data.usage) {
@@ -34826,6 +34882,9 @@ async function setupSession(params) {
34826
34882
  context.state.replaceMessages(restoredMessages);
34827
34883
  await context.flushConversationJournal();
34828
34884
  }
34885
+ if (restoredEvents.length > 0 || restoredSubagentsAllowed !== void 0) {
34886
+ restoreSessionSubagentPolicy(context, restoredEvents, restoredSubagentsAllowed);
34887
+ } else seedSessionSubagentPolicy(context);
34829
34888
  const queueStore = new QueueStore({
34830
34889
  dir: sessionDir,
34831
34890
  ...eventsBus ? { events: eventsBus } : {},
@@ -36618,4 +36677,4 @@ export {
36618
36677
  CLI_VERSION,
36619
36678
  runInteractive
36620
36679
  };
36621
- //# sourceMappingURL=cli-main-CGTBIS4C.js.map
36680
+ //# sourceMappingURL=cli-main-ILRTNPDP.js.map
@@ -212,7 +212,7 @@ async function runWebUIDispatch(ctx) {
212
212
  const isSimpleUi = !isSessionChild && flags["simpleui"] === true;
213
213
  agent.disableInteractiveConfirmation();
214
214
  renderer.setSilent(true);
215
- const { runWebUI } = await import("./webui-server-LZOEH7O6.js");
215
+ const { runWebUI } = await import("./webui-server-OJLLM6PE.js");
216
216
  const flagValue = (names) => {
217
217
  for (const name of names) {
218
218
  if (!Object.hasOwn(flags, name)) continue;
@@ -1010,6 +1010,7 @@ import {
1010
1010
  DefaultSystemPromptBuilder,
1011
1011
  setQueuedMessagesSnapshot
1012
1012
  } from "@wrongstack/core/agent";
1013
+ import { resetSessionSubagentPolicy } from "@wrongstack/core/coordination";
1013
1014
  import { TOKENS } from "@wrongstack/core/kernel";
1014
1015
  import { DefaultSessionStore } from "@wrongstack/core/storage";
1015
1016
  import {
@@ -1120,6 +1121,7 @@ async function switchProjectInPlace(ctx, targetRoot, displayName) {
1120
1121
  context.workingDir = resolved;
1121
1122
  context.session = nextWriter;
1122
1123
  context.state.replaceMessages([]);
1124
+ resetSessionSubagentPolicy(context);
1123
1125
  context.state.replaceTodos([]);
1124
1126
  context.clearFileTracking();
1125
1127
  context.clearMemoryEvidence?.();
@@ -1252,6 +1254,7 @@ async function onSDDOutput(output) {
1252
1254
 
1253
1255
  // src/boot/tui-session-resume.ts
1254
1256
  import * as path7 from "node:path";
1257
+ import { restoreSessionSubagentPolicy } from "@wrongstack/core/coordination";
1255
1258
  import { attachTodosCheckpoint, loadTodosCheckpoint } from "@wrongstack/core/storage";
1256
1259
  import { projectLastRequestTokens } from "@wrongstack/core/types/session-timeline";
1257
1260
  import { sessionScopedPath as sessionScopedPath2 } from "@wrongstack/core/utils";
@@ -1420,6 +1423,7 @@ async function resumeSession(ctx, sessionId) {
1420
1423
  agent.ctx.session = resumed.writer;
1421
1424
  try {
1422
1425
  agent.ctx.state.replaceMessages(resumed.data.messages);
1426
+ restoreSessionSubagentPolicy(agent.ctx, resumed.data.events, resumed.data.subagentsAllowed);
1423
1427
  } catch (err) {
1424
1428
  agent.ctx.session = oldWriter;
1425
1429
  agent.ctx.state.replaceMessages(oldMessages);
@@ -3911,6 +3915,9 @@ function errorText2(error) {
3911
3915
  import { randomUUID as randomUUID3 } from "node:crypto";
3912
3916
  import path12 from "node:path";
3913
3917
  import { effectiveFallbackChain, fallbackProfileChain as fallbackProfileChain2 } from "@wrongstack/core/agent";
3918
+ import {
3919
+ areSubagentsAllowedForSession
3920
+ } from "@wrongstack/core/coordination";
3914
3921
  import {
3915
3922
  CHIMERA_REVIEW_PROMPT,
3916
3923
  classifyChimeraReviewSource,
@@ -3944,6 +3951,10 @@ function installChimeraReviewHandler({
3944
3951
  const off = events.onPattern("chimera.review_needed", (_event, payload) => {
3945
3952
  const p = payload;
3946
3953
  const reviewSessionId = agent.ctx.activeRunSessionId ?? agent.ctx.session?.id ?? session.id;
3954
+ if (!areSubagentsAllowedForSession(reviewSessionId)) {
3955
+ void recordCompletedReview(events, { bundle: p }).catch(() => void 0);
3956
+ return;
3957
+ }
3947
3958
  const dir = director;
3948
3959
  if (!dir) {
3949
3960
  void recordCompletedReview(events, { bundle: p }).catch(() => void 0);
@@ -6687,4 +6698,4 @@ export {
6687
6698
  execute,
6688
6699
  resolveReviewerFallbackModels
6689
6700
  };
6690
- //# sourceMappingURL=execution-TZUGCKFU.js.map
6701
+ //# sourceMappingURL=execution-BN4QIFH6.js.map
@@ -1,4 +1,4 @@
1
- import type { ProviderModelStatusTracker } from '@wrongstack/core/coordination';
1
+ import { type ProviderModelStatusTracker } from '@wrongstack/core/coordination';
2
2
  import { type ChimeraReviewCompletePayload } from '@wrongstack/core/plugin';
3
3
  import type { ExecuteDeps } from './execute-deps.js';
4
4
  type Director = NonNullable<ExecuteDeps['fleet']['director']>;
@@ -41,6 +41,7 @@ interface HostExploreCompanionInput {
41
41
  mailboxProjectDir: string;
42
42
  roster: Record<string, SubagentConfig>;
43
43
  config?: HostExploreCompanionConfig | undefined;
44
+ subagentsAllowed?: (() => boolean) | undefined;
44
45
  }
45
46
  export declare function createHostExploreCompanion(input: HostExploreCompanionInput): ExploreCompanion | null;
46
47
  export {};
@@ -38,7 +38,7 @@
38
38
  * @module fleet/host-shadow-manager
39
39
  */
40
40
  import type { SubagentConfig } from '@wrongstack/core/types';
41
- import type { Director } from '@wrongstack/core/coordination';
41
+ import { type Director } from '@wrongstack/core/coordination';
42
42
  import type { MultiAgentDeps, MultiAgentHostOptions } from './host-types.js';
43
43
  interface HostShadowManagerContext {
44
44
  deps: MultiAgentDeps;
@@ -20,6 +20,7 @@ interface HostFleetSupervisorInput {
20
20
  mailboxProjectDir: string;
21
21
  roster: Record<string, SubagentConfig>;
22
22
  getLeaderMailboxId?: (() => string | undefined) | undefined;
23
+ subagentsAllowed?: ((sessionId: string) => boolean) | undefined;
23
24
  }
24
25
  export declare function createHostFleetSupervisor(input: HostFleetSupervisorInput): FleetSupervisor | null;
25
26
  export {};
package/dist/index.js CHANGED
@@ -4444,7 +4444,7 @@ async function initializeCli(argv) {
4444
4444
  async function main(argv) {
4445
4445
  const cliCtx = await initializeCli(argv);
4446
4446
  if (typeof cliCtx === "number") return cliCtx;
4447
- const { runInteractive } = await import("./cli-main-CGTBIS4C.js");
4447
+ const { runInteractive } = await import("./cli-main-ILRTNPDP.js");
4448
4448
  return runInteractive(cliCtx);
4449
4449
  }
4450
4450
 
@@ -830,6 +830,10 @@ function createPrefsSeeding(opts) {
830
830
 
831
831
  // src/webui-server/route-contexts.ts
832
832
  import * as path5 from "node:path";
833
+ import {
834
+ seedSessionSubagentPolicy,
835
+ setSessionSubagentsAllowed
836
+ } from "@wrongstack/core/coordination";
833
837
  import { TOKENS as TOKENS2 } from "@wrongstack/core/kernel";
834
838
  import { SkillInstaller } from "@wrongstack/core/skills";
835
839
  import { PromptUsageStore } from "@wrongstack/core/storage";
@@ -946,7 +950,15 @@ function createWebuiRouteContexts({
946
950
  const prefsCtx = {
947
951
  meta: opts.agent.ctx.meta,
948
952
  metaFor: metaForSession,
949
- snapshot: (sessionId) => prefSnapshot(sessionId ? metaForSession(sessionId) : void 0),
953
+ snapshot: (sessionId) => {
954
+ const target = sessionId ? getSessionAgent(sessionId).ctx : opts.agent.ctx;
955
+ seedSessionSubagentPolicy(target);
956
+ return prefSnapshot(target.meta);
957
+ },
958
+ setSubagentsAllowed: (allowed, sessionId) => setSessionSubagentsAllowed(
959
+ sessionId ? getSessionAgent(sessionId).ctx : opts.agent.ctx,
960
+ allowed
961
+ ),
950
962
  persist: persistPrefs,
951
963
  setYolo: opts.onYoloSwitch,
952
964
  setAutonomy: opts.onAutonomySwitch,
@@ -1898,4 +1910,4 @@ async function runWebUI(opts) {
1898
1910
  export {
1899
1911
  runWebUI
1900
1912
  };
1901
- //# sourceMappingURL=webui-server-LZOEH7O6.js.map
1913
+ //# sourceMappingURL=webui-server-OJLLM6PE.js.map
@@ -1,5 +1,5 @@
1
1
  /** Mutable command-host state created after the runtime fleet is available. */
2
- import type { BrainArbiter, Director } from '@wrongstack/core/coordination';
2
+ import { type BrainArbiter, type Director } from '@wrongstack/core/coordination';
3
3
  import type { EventBus } from '@wrongstack/core/kernel';
4
4
  import { type Config, type SessionWriter } from '@wrongstack/core/types';
5
5
  import type { WstackPaths } from '@wrongstack/core/utils';
@@ -1,4 +1,4 @@
1
- import type { Director } from '@wrongstack/core/coordination';
1
+ import { type Director } from '@wrongstack/core/coordination';
2
2
  import type { EventBus } from '@wrongstack/core/kernel';
3
3
  import type { MultiAgentHost } from '../multi-agent.js';
4
4
  import type { BuiltinSlashCommandDeps } from './slash-commands.js';
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@wrongstack/cli",
3
- "version": "0.317.0",
3
+ "version": "0.318.0",
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": [
@@ -41,36 +41,36 @@
41
41
  "data"
42
42
  ],
43
43
  "dependencies": {
44
- "@wrongstack/acp": "0.317.0",
45
- "@wrongstack/bench": "0.317.0",
46
- "@wrongstack/core": "0.317.0",
47
- "@wrongstack/primitives": "0.317.0",
48
- "@wrongstack/kanban": "0.317.0",
49
- "@wrongstack/mcp": "0.317.0",
50
- "@wrongstack/persistence": "0.317.0",
51
- "@wrongstack/plug-lsp": "0.317.0",
52
- "@wrongstack/plugins": "0.317.0",
53
- "@wrongstack/providers": "0.317.0",
54
- "@wrongstack/requirement-intake": "0.317.0",
55
- "@wrongstack/runtime": "0.317.0",
56
- "@wrongstack/sage": "0.317.0",
57
- "@wrongstack/sdd": "0.317.0",
58
- "@wrongstack/security-scanner": "0.317.0",
59
- "@wrongstack/simpleui": "0.317.0",
60
- "@wrongstack/techstack": "0.317.0",
61
- "@wrongstack/telegram": "0.317.0",
62
- "@wrongstack/tools": "0.317.0",
63
- "@wrongstack/tui": "0.317.0",
64
- "@wrongstack/vector-memory": "0.317.0",
65
- "@wrongstack/webui": "0.317.0",
66
- "@wrongstack/webui-hq": "0.317.0",
67
- "@wrongstack/webui-protocol": "0.317.0",
68
- "@wrongstack/wrongtrace": "0.317.0",
69
- "@wrongstack/webui-server": "0.317.0",
44
+ "@wrongstack/acp": "0.318.0",
45
+ "@wrongstack/bench": "0.318.0",
46
+ "@wrongstack/core": "0.318.0",
47
+ "@wrongstack/primitives": "0.318.0",
48
+ "@wrongstack/kanban": "0.318.0",
49
+ "@wrongstack/mcp": "0.318.0",
50
+ "@wrongstack/persistence": "0.318.0",
51
+ "@wrongstack/plug-lsp": "0.318.0",
52
+ "@wrongstack/plugins": "0.318.0",
53
+ "@wrongstack/providers": "0.318.0",
54
+ "@wrongstack/requirement-intake": "0.318.0",
55
+ "@wrongstack/runtime": "0.318.0",
56
+ "@wrongstack/sage": "0.318.0",
57
+ "@wrongstack/sdd": "0.318.0",
58
+ "@wrongstack/security-scanner": "0.318.0",
59
+ "@wrongstack/simpleui": "0.318.0",
60
+ "@wrongstack/techstack": "0.318.0",
61
+ "@wrongstack/telegram": "0.318.0",
62
+ "@wrongstack/tools": "0.318.0",
63
+ "@wrongstack/tui": "0.318.0",
64
+ "@wrongstack/vector-memory": "0.318.0",
65
+ "@wrongstack/webui": "0.318.0",
66
+ "@wrongstack/webui-hq": "0.318.0",
67
+ "@wrongstack/webui-protocol": "0.318.0",
68
+ "@wrongstack/wrongtrace": "0.318.0",
69
+ "@wrongstack/webui-server": "0.318.0",
70
70
  "ws": "^8.21.3"
71
71
  },
72
72
  "optionalDependencies": {
73
- "@wrongstack/desktop": "0.317.0"
73
+ "@wrongstack/desktop": "0.318.0"
74
74
  },
75
75
  "devDependencies": {
76
76
  "@types/node": "^26.2.0",