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.
- package/.claude-plugin/plugin.json +1 -1
- package/.cursor-plugin/plugin.json +1 -1
- package/dist/cli.js +424 -257
- package/dist/{hook-chunk-6EFFDI3S.js → hook-chunk-RE4WT5D3.js} +179 -36
- package/dist/{hook-hooks-YGXLOZ6H.js → hook-hooks-5H6LFYD5.js} +2 -2
- package/dist/hook.js +6 -6
- package/dist/server.js +359 -216
- package/package.json +1 -1
|
@@ -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 = (
|
|
3179
|
+
var micromatch = (list2, patterns, options) => {
|
|
3180
3180
|
patterns = [].concat(patterns);
|
|
3181
|
-
|
|
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
|
|
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 = (
|
|
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(
|
|
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 = (
|
|
3267
|
-
let items = [].concat(
|
|
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 = (
|
|
3277
|
-
let items = [].concat(
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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
|
-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
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 {
|