eminiar 0.13.4 → 0.13.5

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.
@@ -3176,9 +3176,9 @@ var require_micromatch = __commonJS({
3176
3176
  const index = v.indexOf("{");
3177
3177
  return index > -1 && v.indexOf("}", index) > -1;
3178
3178
  };
3179
- var micromatch = (list, patterns, options) => {
3179
+ var micromatch = (list2, patterns, options) => {
3180
3180
  patterns = [].concat(patterns);
3181
- list = [].concat(list);
3181
+ list2 = [].concat(list2);
3182
3182
  let omit = /* @__PURE__ */ new Set();
3183
3183
  let keep = /* @__PURE__ */ new Set();
3184
3184
  let items = /* @__PURE__ */ new Set();
@@ -3193,7 +3193,7 @@ var require_micromatch = __commonJS({
3193
3193
  let isMatch = picomatch(String(patterns[i]), { ...options, onResult }, true);
3194
3194
  let negated = isMatch.state.negated || isMatch.state.negatedExtglob;
3195
3195
  if (negated) negatives++;
3196
- for (let item of list) {
3196
+ for (let item of list2) {
3197
3197
  let matched = isMatch(item, true);
3198
3198
  let match = negated ? !matched.isMatch : matched.isMatch;
3199
3199
  if (!match) continue;
@@ -3221,7 +3221,7 @@ var require_micromatch = __commonJS({
3221
3221
  micromatch.matcher = (pattern, options) => picomatch(pattern, options);
3222
3222
  micromatch.isMatch = (str2, patterns, options) => picomatch(patterns, options)(str2);
3223
3223
  micromatch.any = micromatch.isMatch;
3224
- micromatch.not = (list, patterns, options = {}) => {
3224
+ micromatch.not = (list2, patterns, options = {}) => {
3225
3225
  patterns = [].concat(patterns).map(String);
3226
3226
  let result = /* @__PURE__ */ new Set();
3227
3227
  let items = [];
@@ -3229,7 +3229,7 @@ var require_micromatch = __commonJS({
3229
3229
  if (options.onResult) options.onResult(state);
3230
3230
  items.push(state.output);
3231
3231
  };
3232
- let matches = new Set(micromatch(list, patterns, { ...options, onResult }));
3232
+ let matches = new Set(micromatch(list2, patterns, { ...options, onResult }));
3233
3233
  for (let item of items) {
3234
3234
  if (!matches.has(item)) {
3235
3235
  result.add(item);
@@ -3263,8 +3263,8 @@ var require_micromatch = __commonJS({
3263
3263
  for (let key of keys) res[key] = obj[key];
3264
3264
  return res;
3265
3265
  };
3266
- micromatch.some = (list, patterns, options) => {
3267
- let items = [].concat(list);
3266
+ micromatch.some = (list2, patterns, options) => {
3267
+ let items = [].concat(list2);
3268
3268
  for (let pattern of [].concat(patterns)) {
3269
3269
  let isMatch = picomatch(String(pattern), options);
3270
3270
  if (items.some((item) => isMatch(item))) {
@@ -3273,8 +3273,8 @@ var require_micromatch = __commonJS({
3273
3273
  }
3274
3274
  return false;
3275
3275
  };
3276
- micromatch.every = (list, patterns, options) => {
3277
- let items = [].concat(list);
3276
+ micromatch.every = (list2, patterns, options) => {
3277
+ let items = [].concat(list2);
3278
3278
  for (let pattern of [].concat(patterns)) {
3279
3279
  let isMatch = picomatch(String(pattern), options);
3280
3280
  if (!items.every((item) => isMatch(item))) {
@@ -6254,6 +6254,70 @@ function existingGenerated(dir) {
6254
6254
  }
6255
6255
  return out;
6256
6256
  }
6257
+ function ignoredWhere(ignored, config, agentType) {
6258
+ const hit = config.swarms.flatMap(
6259
+ (swarm) => swarm.roles.filter((r) => r.agentType === agentType).map((r) => ({ swarm, role: r }))
6260
+ )[0];
6261
+ if (!hit) return [];
6262
+ const out = [];
6263
+ for (const i of ignored) {
6264
+ const seg = i.path === "" ? [] : i.path.split(".");
6265
+ const name = /"(.+?)"/.exec(i.message)?.[1] ?? "?";
6266
+ const mine = seg[0] !== "swarms" || seg.length < 2 || seg[1] === hit.swarm.name && (seg.length < 4 || seg[2] !== "agents" || seg[3] === hit.role.role);
6267
+ if (mine) out.push(name);
6268
+ }
6269
+ return out;
6270
+ }
6271
+ var list = (v) => typeof v === "string" ? v.split(",").map((x) => x.trim()).filter(Boolean) : [];
6272
+ function frontmatterOf(raw) {
6273
+ const content = raw.replace(/\r\n/g, "\n");
6274
+ const end = content.indexOf("\n---\n", 3);
6275
+ if (!content.startsWith("---\n") || end === -1) return void 0;
6276
+ try {
6277
+ const v = yaml().parse(content.slice(4, end));
6278
+ return v && typeof v === "object" ? v : void 0;
6279
+ } catch {
6280
+ return void 0;
6281
+ }
6282
+ }
6283
+ var NEUTRAL_KEYS = /* @__PURE__ */ new Set(["name", "description", "skills", "color", "model", "effort"]);
6284
+ function tightens(oldRaw, newRaw) {
6285
+ const o = frontmatterOf(oldRaw);
6286
+ const n = frontmatterOf(newRaw);
6287
+ if (!o || !n) return false;
6288
+ let tighter = false;
6289
+ for (const k of Object.keys(o)) {
6290
+ if (NEUTRAL_KEYS.has(k)) continue;
6291
+ if (!(k in n)) return false;
6292
+ const a = o[k];
6293
+ const b = n[k];
6294
+ if (JSON.stringify(a) === JSON.stringify(b)) continue;
6295
+ if (k === "tools") {
6296
+ const ob = new Set(list(a));
6297
+ const nb = list(b);
6298
+ if (!nb.every((t) => ob.has(t))) return false;
6299
+ tighter = true;
6300
+ } else if (k === "disallowedTools") {
6301
+ const nb = new Set(list(b));
6302
+ if (!list(a).every((t) => nb.has(t))) return false;
6303
+ tighter = true;
6304
+ } else if (k === "hooks") {
6305
+ const oh = a ?? {};
6306
+ const nh = b ?? {};
6307
+ for (const [ev, entries] of Object.entries(oh)) {
6308
+ const have = new Set((nh[ev] ?? []).map((e) => JSON.stringify(e)));
6309
+ if (!Array.isArray(entries) || !entries.every((e) => have.has(JSON.stringify(e))))
6310
+ return false;
6311
+ }
6312
+ tighter = true;
6313
+ } else if (k === "maxTurns") {
6314
+ if (typeof a !== "number" || typeof b !== "number" || b > a) return false;
6315
+ tighter = true;
6316
+ } else return false;
6317
+ }
6318
+ for (const k of Object.keys(n)) if (!(k in o) && !NEUTRAL_KEYS.has(k)) tighter = true;
6319
+ return tighter;
6320
+ }
6257
6321
  function planAgentSync(root, config, opts = {}) {
6258
6322
  const dir = agentsDir(root);
6259
6323
  const wantedRoles = config?.enabled ? config.swarms.flatMap((swarm) => swarm.roles.map((role) => ({ swarm, role }))) : [];
@@ -6321,6 +6385,24 @@ function planAgentSync(root, config, opts = {}) {
6321
6385
  reason: config?.enabled ? "no longer in the swarm file" : "swarms are disabled"
6322
6386
  }
6323
6387
  );
6388
+ const ignored = config?.ignoredKeys ?? [];
6389
+ if (ignored.length && !opts.force) {
6390
+ const holds = (agentType) => ignoredWhere(ignored, config, agentType);
6391
+ return actions.map((a) => {
6392
+ if (a.action !== "update") return a;
6393
+ const where = holds(a.agentType);
6394
+ if (!where.length) return a;
6395
+ const old = generated.get(a.agentType);
6396
+ if (old && tightens(old.content, a.content ?? "")) return a;
6397
+ return {
6398
+ agentType: a.agentType,
6399
+ path: a.path,
6400
+ action: "conflict",
6401
+ held: true,
6402
+ reason: `kept: ${config.rel} has keys this eminiar version does not know (${where.slice(0, 3).join(", ")}${where.length > 3 ? ", ..." : ""}), and a newer one may have generated this file with them; update eminiar, or sync with --force`
6403
+ };
6404
+ });
6405
+ }
6324
6406
  return actions;
6325
6407
  }
6326
6408
  function syncAgents(root, config, opts = {}) {
@@ -7932,15 +8014,6 @@ var NAME_MSG = "use 1-32 characters: lowercase letters and digits in words joine
7932
8014
  var noFence = (s) => !s.includes("---");
7933
8015
  var FENCE_MSG = 'must not contain "---" (Claude Code would end the agent frontmatter there)';
7934
8016
  var MODEL_RE = /^(?:inherit|opusplan|(?:sonnet|opus|haiku|fable)(?:\[1m\])?|(?:[a-z0-9-]+\.)*claude-[a-z0-9.:@-]+(?:\[1m\])?)$/;
7935
- var TOP_KEYS = /* @__PURE__ */ new Set([
7936
- "version",
7937
- "enabled",
7938
- "sync",
7939
- "enforce",
7940
- "allowed_agents",
7941
- "defaults",
7942
- "swarms"
7943
- ]);
7944
8017
  var DEFAULT_CONTEXT = {
7945
8018
  memories: 4,
7946
8019
  docs: 2,
@@ -7969,7 +8042,7 @@ var SkillName = external_exports.string().regex(
7969
8042
  ).refine(noFence, FENCE_MSG);
7970
8043
  var Model = external_exports.string().max(100).regex(MODEL_RE, "a model alias (inherit, sonnet, opus, haiku, fable) or a Claude model id").refine(noFence, FENCE_MSG);
7971
8044
  var rank = (t) => TIERS.indexOf(t);
7972
- var RawModelRange = external_exports.strictObject({ floor: external_exports.enum(TIERS).optional(), ceiling: external_exports.enum(TIERS).optional() }).refine(
8045
+ var RawModelRange = external_exports.object({ floor: external_exports.enum(TIERS).optional(), ceiling: external_exports.enum(TIERS).optional() }).refine(
7973
8046
  (r) => !r.floor || !r.ceiling || rank(r.floor) <= rank(r.ceiling),
7974
8047
  `floor must not be above ceiling (${TIERS.join(" < ")})`
7975
8048
  );
@@ -7993,7 +8066,7 @@ var AgentName = external_exports.string().trim().regex(
7993
8066
  (n) => !n.startsWith("swarm-"),
7994
8067
  "swarm workers need no entry: they are allowed during a run of their swarm"
7995
8068
  );
7996
- var RawContext = external_exports.strictObject({
8069
+ var RawContext = external_exports.object({
7997
8070
  memories: external_exports.number().int().min(0).max(10).optional(),
7998
8071
  docs: external_exports.number().int().min(0).max(10).optional(),
7999
8072
  history: external_exports.boolean().optional(),
@@ -8002,12 +8075,12 @@ var RawContext = external_exports.strictObject({
8002
8075
  // SubagentStart context over 10,000 characters is moved to a file Claude may never read.
8003
8076
  max_chars: external_exports.number().int().min(500).max(9e3).optional()
8004
8077
  });
8005
- var RawHookCommand = external_exports.strictObject({
8078
+ var RawHookCommand = external_exports.object({
8006
8079
  type: external_exports.literal("command"),
8007
8080
  command: external_exports.string().trim().min(1).max(2e3).refine(noFence, FENCE_MSG),
8008
8081
  timeout: external_exports.number().int().positive().max(600).optional()
8009
8082
  });
8010
- var RawHookMatcher = external_exports.strictObject({
8083
+ var RawHookMatcher = external_exports.object({
8011
8084
  matcher: external_exports.string().max(200).refine(noFence, FENCE_MSG).refine((m) => {
8012
8085
  try {
8013
8086
  new RegExp(m);
@@ -8018,12 +8091,12 @@ var RawHookMatcher = external_exports.strictObject({
8018
8091
  }, "not a valid regular expression (Claude Code matches tool names with it)").optional(),
8019
8092
  hooks: external_exports.array(RawHookCommand).min(1).max(10)
8020
8093
  });
8021
- var RawHooks = external_exports.strictObject({
8094
+ var RawHooks = external_exports.object({
8022
8095
  PreToolUse: external_exports.array(RawHookMatcher).max(10).optional(),
8023
8096
  PostToolUse: external_exports.array(RawHookMatcher).max(10).optional(),
8024
8097
  Stop: external_exports.array(RawHookMatcher).max(10).optional()
8025
8098
  });
8026
- var RawAgent = external_exports.strictObject({
8099
+ var RawAgent = external_exports.object({
8027
8100
  description: external_exports.string().trim().min(1).max(500).refine(noFence, FENCE_MSG),
8028
8101
  prompt: external_exports.string().max(2e4).optional(),
8029
8102
  model: Model.optional(),
@@ -8041,7 +8114,7 @@ var RawAgent = external_exports.strictObject({
8041
8114
  color: external_exports.enum(AGENT_COLORS).optional(),
8042
8115
  context: RawContext.optional()
8043
8116
  });
8044
- var RawSwarm = external_exports.strictObject({
8117
+ var RawSwarm = external_exports.object({
8045
8118
  description: external_exports.string().trim().min(1).max(500),
8046
8119
  topology: external_exports.enum(TOPOLOGIES).optional(),
8047
8120
  max_agents: external_exports.number().int().min(1).max(16).optional(),
@@ -8057,7 +8130,7 @@ var RawFile = external_exports.looseObject({
8057
8130
  sync: external_exports.enum(["auto", "manual"]).optional(),
8058
8131
  enforce: external_exports.boolean().optional(),
8059
8132
  allowed_agents: external_exports.array(AgentName).max(50).optional(),
8060
- defaults: external_exports.strictObject({
8133
+ defaults: external_exports.object({
8061
8134
  model: Model.optional(),
8062
8135
  model_range: RawModelRange.optional(),
8063
8136
  skills: external_exports.array(SkillName).max(20).optional(),
@@ -8082,6 +8155,53 @@ function mergeContext(...layers) {
8082
8155
  return out;
8083
8156
  }
8084
8157
  var uniq = (xs) => [...new Set(xs)];
8158
+ function unknownKeys(v, s = RawFile, at = []) {
8159
+ if (s instanceof external_exports.ZodOptional) s = s.unwrap();
8160
+ if (Array.isArray(v))
8161
+ return s instanceof external_exports.ZodArray ? v.flatMap((x, i) => unknownKeys(x, s.element, [...at, String(i)])) : [];
8162
+ if (!v || typeof v !== "object") return [];
8163
+ const entries = Object.entries(v);
8164
+ if (s instanceof external_exports.ZodRecord)
8165
+ return entries.flatMap(([k, x]) => unknownKeys(x, s.valueType, [...at, k]));
8166
+ if (!(s instanceof external_exports.ZodObject)) return [];
8167
+ const known = Object.keys(s.shape);
8168
+ return entries.flatMap(
8169
+ ([k, x]) => Object.hasOwn(s.shape, k) ? unknownKeys(x, s.shape[k], [...at, k]) : at.length === 0 && (k.startsWith("x-") || k === "<<") ? [] : [{ at, key: k, known }]
8170
+ );
8171
+ }
8172
+ function schemaKeys(s = RawFile, out = /* @__PURE__ */ new Set()) {
8173
+ if (s instanceof external_exports.ZodOptional) s = s.unwrap();
8174
+ if (s instanceof external_exports.ZodArray) schemaKeys(s.element, out);
8175
+ else if (s instanceof external_exports.ZodRecord) schemaKeys(s.valueType, out);
8176
+ else if (s instanceof external_exports.ZodObject) {
8177
+ for (const [k, v] of Object.entries(s.shape))
8178
+ if (!out.has(k)) {
8179
+ out.add(k);
8180
+ schemaKeys(v, out);
8181
+ }
8182
+ }
8183
+ return out;
8184
+ }
8185
+ var RESTRICTION_KEY = /tool|scope|hook|allow|deny|permission|model|effort|count/i;
8186
+ function restrictionLike(key, known) {
8187
+ let best;
8188
+ for (const k of known) {
8189
+ if (!RESTRICTION_KEY.test(k)) continue;
8190
+ const d = editDistance(key.toLowerCase(), k.toLowerCase(), 2);
8191
+ if (d <= 2 && key.length >= 3 && (!best || d < best.d)) best = { k, d };
8192
+ }
8193
+ if (best) return best.k;
8194
+ return RESTRICTION_KEY.test(key) ? "" : void 0;
8195
+ }
8196
+ function typoOf(key, known) {
8197
+ const max = key.length >= 7 ? 2 : 1;
8198
+ let best;
8199
+ for (const k of known) {
8200
+ const d = editDistance(key.toLowerCase(), k.toLowerCase(), max);
8201
+ if (d <= max && (!best || d < best.d)) best = { k, d };
8202
+ }
8203
+ return best?.k;
8204
+ }
8085
8205
  function roleRange(defaults, a, at, issue) {
8086
8206
  const spec = a.model_range ?? defaults?.model_range;
8087
8207
  if (!spec || !spec.floor && !spec.ceiling) return void 0;
@@ -8217,6 +8337,27 @@ function parseSwarmYaml(text, file, rel) {
8217
8337
  for (const role of Object.keys(agents))
8218
8338
  checkName(["swarms", name, "agents", role], role, "agent");
8219
8339
  }
8340
+ const ignoredKeys = [];
8341
+ const allKeys = schemaKeys();
8342
+ for (const u of unknownKeys(js)) {
8343
+ const near = typoOf(u.key, u.known);
8344
+ const found = { path: u.at.join("."), line: lineOf([...u.at, u.key]) };
8345
+ if (allKeys.has(u.key))
8346
+ issues.push({ ...found, message: `unknown key "${u.key}": not allowed here` });
8347
+ else if (near)
8348
+ issues.push({ ...found, message: `unknown key "${u.key}" (did you mean "${near}"?)` });
8349
+ else if (u.at.length === 4 && u.at[0] === "swarms" && u.at[2] === "agents" && restrictionLike(u.key, u.known) !== void 0) {
8350
+ const like = restrictionLike(u.key, u.known);
8351
+ issues.push({
8352
+ ...found,
8353
+ message: `unknown key "${u.key}" looks like a restriction${like ? ` (did you mean "${like}"?)` : ""}: ignoring it would silently drop a limit`
8354
+ });
8355
+ } else
8356
+ ignoredKeys.push({
8357
+ ...found,
8358
+ message: `unknown key "${u.key}" ignored: not a setting in this eminiar version`
8359
+ });
8360
+ }
8220
8361
  const parsed = RawFile.safeParse(js);
8221
8362
  if (!parsed.success) {
8222
8363
  return {
@@ -8234,15 +8375,9 @@ function parseSwarmYaml(text, file, rel) {
8234
8375
  ]
8235
8376
  };
8236
8377
  }
8237
- for (const k of Object.keys(js))
8238
- if (!TOP_KEYS.has(k) && !k.startsWith("x-") && k !== "<<")
8239
- issue(
8240
- [k],
8241
- `unknown key "${k}" (top-level keys: ${[...TOP_KEYS].join(", ")}; x-* keys may hold YAML anchors)`
8242
- );
8243
8378
  const config = resolve2(parsed.data, file, rel, issue);
8244
8379
  if (issues.length) return { state: "invalid", file, rel, enforce, issues };
8245
- return { state: "ok", config };
8380
+ return { state: "ok", config: { ...config, ignoredKeys } };
8246
8381
  }
8247
8382
  function resolve2(raw, file, rel, issue) {
8248
8383
  const swarms = [];
@@ -9646,9 +9781,17 @@ function sessionStartAt(ctx, sessionId) {
9646
9781
  out.push(
9647
9782
  config.sync === "auto" ? `Agent files were regenerated (${sync.changed} changed); if Claude Code does not list them yet, run /agents or restart.` : `${sync.changed} agent file(s) are out of date (sync: manual); run \`eminiar swarm sync\`.`
9648
9783
  );
9649
- if (sync.conflicts)
9784
+ const held = sync.actions.filter((a) => a.held).length;
9785
+ if (config.ignoredKeys.length)
9786
+ out.push(
9787
+ clip2(
9788
+ `${config.rel}: ${config.ignoredKeys.length} unknown key(s) ignored (first: ${issueWhere(config.ignoredKeys)}); generated agent files of the roles those keys belong to are not rewritten unless an update only tightens them (\`eminiar swarm sync --force\` does). \`eminiar swarm validate\` lists the keys.`,
9789
+ 400
9790
+ )
9791
+ );
9792
+ if (sync.conflicts > held)
9650
9793
  out.push(
9651
- `${sync.conflicts} agent file(s) in .claude/agents were left alone (hand-written, or generated and then edited); \`eminiar swarm sync --dry-run\` explains.`
9794
+ `${sync.conflicts - held} agent file(s) in .claude/agents were left alone (hand-written, or generated and then edited); \`eminiar swarm sync --dry-run\` explains.`
9652
9795
  );
9653
9796
  const mctx = main === local ? ctx : getContext(main);
9654
9797
  const db = getStorage(mctx, { vectors: false });
@@ -9898,4 +10041,4 @@ queue-microtask/index.js:
9898
10041
  run-parallel/index.js:
9899
10042
  (*! run-parallel. MIT License. Feross Aboukhadijeh <https://feross.org/opensource> *)
9900
10043
  */
9901
- //# sourceMappingURL=hook-chunk-6EFFDI3S.js.map
10044
+ //# sourceMappingURL=hook-chunk-RE4WT5D3.js.map
@@ -8,7 +8,7 @@ import {
8
8
  manifestPath,
9
9
  readManifestAt,
10
10
  resolvePrice
11
- } from "./hook-chunk-6EFFDI3S.js";
11
+ } from "./hook-chunk-RE4WT5D3.js";
12
12
  import {
13
13
  adjudicateOne,
14
14
  briefUnitsOf,
@@ -1826,4 +1826,4 @@ export {
1826
1826
  withModel,
1827
1827
  withNote
1828
1828
  };
1829
- //# sourceMappingURL=hook-hooks-YGXLOZ6H.js.map
1829
+ //# sourceMappingURL=hook-hooks-5H6LFYD5.js.map
package/dist/hook.js CHANGED
@@ -35,7 +35,7 @@ import {
35
35
  swarmSubagentStop,
36
36
  swarmTouch,
37
37
  workerLacksTool
38
- } from "./hook-chunk-6EFFDI3S.js";
38
+ } from "./hook-chunk-RE4WT5D3.js";
39
39
  import {
40
40
  GUIDE_ORDER,
41
41
  classifyAssistant,
@@ -1902,7 +1902,7 @@ var userPromptSubmit = async (input) => {
1902
1902
  let systemMessage;
1903
1903
  if (ctx.config.adjudicator.enabled && input.client !== "cursor" && hasBudget(ADJUDICATOR_NEEDS_MS)) {
1904
1904
  try {
1905
- const { onPrompt } = await import("./hook-hooks-YGXLOZ6H.js");
1905
+ const { onPrompt } = await import("./hook-hooks-5H6LFYD5.js");
1906
1906
  const a = await onPrompt(ctx, db, input, sessionId);
1907
1907
  if (a?.context) parts.push(a.context);
1908
1908
  systemMessage = a?.systemMessage;
@@ -1960,7 +1960,7 @@ var postToolUse = async (input) => {
1960
1960
  const ctx = sessionContext(input.cwd);
1961
1961
  if (ctx.config.adjudicator.enabled) {
1962
1962
  try {
1963
- const { onPostAgent } = await import("./hook-hooks-YGXLOZ6H.js");
1963
+ const { onPostAgent } = await import("./hook-hooks-5H6LFYD5.js");
1964
1964
  onPostAgent(ctx, db, input);
1965
1965
  } catch {
1966
1966
  }
@@ -2065,7 +2065,7 @@ var sessionEnd = async (input) => {
2065
2065
  ingestUsage(db, input, sessionId);
2066
2066
  if (ctx.config.adjudicator.enabled && input.client !== "cursor") {
2067
2067
  try {
2068
- const { onSessionEnd } = await import("./hook-hooks-YGXLOZ6H.js");
2068
+ const { onSessionEnd } = await import("./hook-hooks-5H6LFYD5.js");
2069
2069
  onSessionEnd(ctx, db, input);
2070
2070
  } catch {
2071
2071
  }
@@ -3582,7 +3582,7 @@ var preToolUse = async (input) => {
3582
3582
  const out = await route(ctx, input, spawn?.kind === "worker");
3583
3583
  if (!ctx.config.adjudicator.enabled || input.client === "cursor") return out;
3584
3584
  try {
3585
- const { afterRouting } = await import("./hook-hooks-YGXLOZ6H.js");
3585
+ const { afterRouting } = await import("./hook-hooks-5H6LFYD5.js");
3586
3586
  return await afterRouting(ctx, input, spawn, out);
3587
3587
  } catch {
3588
3588
  return out;
@@ -3822,7 +3822,7 @@ ${guide}`);
3822
3822
  if (swarm) parts.push(swarm);
3823
3823
  if (ctx.config.adjudicator.enabled && input.client !== "cursor") {
3824
3824
  try {
3825
- const { onSessionStart } = await import("./hook-hooks-YGXLOZ6H.js");
3825
+ const { onSessionStart } = await import("./hook-hooks-5H6LFYD5.js");
3826
3826
  const line2 = onSessionStart(ctx, db, input);
3827
3827
  if (line2) parts.push(line2);
3828
3828
  } catch {