@heretyc/subagent-mcp 2.8.9 → 2.9.2
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/LICENSE +201 -201
- package/NOTICE +5 -5
- package/README.md +193 -136
- package/directives/carryover-claude.md +2 -2
- package/directives/carryover-codex.md +2 -4
- package/directives/orchestration-claude.md +1 -1
- package/directives/orchestration-codex.md +1 -1
- package/directives/reminder-on.md +1 -1
- package/directives/short-on.md +1 -1
- package/dist/drivers.js +43 -2
- package/dist/index.js +50 -14
- package/dist/init.js +35 -14
- package/dist/orchestration/hook-core.js +3 -1
- package/dist/orchestration/marker.js +99 -26
- package/dist/routing-table.json +3561 -2469
- package/dist/routing.js +10 -11
- package/dist/setup.js +2 -2
- package/package.json +18 -3
package/dist/routing.js
CHANGED
|
@@ -120,10 +120,10 @@ export function normalizeEffort(provider, model, effort) {
|
|
|
120
120
|
* explicit (provider+model+effort all present): one candidate from the user's
|
|
121
121
|
* triple; the table is NOT read (works with a null table).
|
|
122
122
|
*
|
|
123
|
-
* auto/provider/provider_model: read
|
|
124
|
-
* array directly
|
|
125
|
-
*
|
|
126
|
-
*
|
|
123
|
+
* auto/provider/provider_model: read <branch>.<task_category> as the pairings
|
|
124
|
+
* array directly, sort by rank asc, map each model to a launch id, normalize
|
|
125
|
+
* effort, and drop non-launchable / unknown-effort pairings. An empty result
|
|
126
|
+
* sets noCandidates:true.
|
|
127
127
|
*/
|
|
128
128
|
export function buildCandidates(table, taskCategory, overrides, branch = DEFAULT_BRANCH) {
|
|
129
129
|
const { provider, model, effort } = overrides;
|
|
@@ -188,12 +188,7 @@ function readPairings(table, taskCategory, branch = DEFAULT_BRANCH) {
|
|
|
188
188
|
const perf = table[branch];
|
|
189
189
|
if (!perf || typeof perf !== "object")
|
|
190
190
|
return [];
|
|
191
|
-
|
|
192
|
-
// Defensive: tolerate a {pairings:[...]} wrapper even though the contract
|
|
193
|
-
// says the value IS the array directly.
|
|
194
|
-
if (raw && !Array.isArray(raw) && typeof raw === "object" && "pairings" in raw) {
|
|
195
|
-
raw = raw.pairings;
|
|
196
|
-
}
|
|
191
|
+
const raw = perf[taskCategory];
|
|
197
192
|
if (!Array.isArray(raw))
|
|
198
193
|
return [];
|
|
199
194
|
const entries = raw.filter((e) => !!e && typeof e === "object" && typeof e.model === "string");
|
|
@@ -251,7 +246,11 @@ export function validatePresence(p) {
|
|
|
251
246
|
if (model && !provider) {
|
|
252
247
|
return `Error: provider is required when model is given. You passed model=${model} without provider. Either also pass provider, or omit both.\n${AUTO_HINT}`;
|
|
253
248
|
}
|
|
254
|
-
//
|
|
249
|
+
// fallback_default is valid only for fully explicit launches.
|
|
250
|
+
if (task_category === "fallback_default" && !(provider && model && effort)) {
|
|
251
|
+
return `Error: fallback_default is a split hint sentinel, not a launchable routing-table category.\n${SPLIT_HINT}\n${AUTO_HINT}`;
|
|
252
|
+
}
|
|
253
|
+
// provider+model must satisfy the existing match rule.
|
|
255
254
|
if (provider && model) {
|
|
256
255
|
if (provider === "claude" && !["haiku", "sonnet", "opus", "opus-4-8"].includes(model)) {
|
|
257
256
|
return `Error: Claude provider only supports haiku, sonnet, opus, or opus-4-8. Got: ${model}`;
|
package/dist/setup.js
CHANGED
|
@@ -145,7 +145,7 @@ export function reconcileCodexToml(toml, serverPath) {
|
|
|
145
145
|
`command = "node"\n` +
|
|
146
146
|
`args = ["${serverPath}"]\n` +
|
|
147
147
|
`startup_timeout_sec = 10\n` +
|
|
148
|
-
`tool_timeout_sec =
|
|
148
|
+
`tool_timeout_sec = 60\n`;
|
|
149
149
|
// Main block runs from its header to the next table header — a '[' at the
|
|
150
150
|
// START of a line (its .tools.* subtables are separate tables and are left
|
|
151
151
|
// alone). A bare [^[]* would stop at the '[' inside `args = ["..."]`.
|
|
@@ -385,7 +385,7 @@ function repairPromptFor(vendor, problem) {
|
|
|
385
385
|
return (`subagent-mcp setup hit a problem on my machine: ${problem}. ` +
|
|
386
386
|
`The install root is "${fwd(INSTALL_ROOT)}". Please repair my Codex CLI wiring: ` +
|
|
387
387
|
`(1) ensure ~/.codex/config.toml has [mcp_servers.subagent-mcp] with command = "node", ` +
|
|
388
|
-
`args = ["${p.server}"], startup_timeout_sec = 10, tool_timeout_sec =
|
|
388
|
+
`args = ["${p.server}"], startup_timeout_sec = 10, tool_timeout_sec = 60, and ` +
|
|
389
389
|
`(2) ensure ~/.codex/hooks.json has SessionStart and UserPromptSubmit entries ` +
|
|
390
390
|
`{type:"command", command:'node "${p.codexHook}"', timeout:10}. ` +
|
|
391
391
|
`Back up any file before editing it, then remind me to run /hooks in Codex and trust the hook.`);
|
package/package.json
CHANGED
|
@@ -1,7 +1,22 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@heretyc/subagent-mcp",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.9.2",
|
|
4
4
|
"description": "MCP server that launches and manages always-interactive Claude Code and Codex sub-agent sessions (no direct Anthropic/OpenAI API).",
|
|
5
|
+
"keywords": [
|
|
6
|
+
"mcp",
|
|
7
|
+
"model-context-protocol",
|
|
8
|
+
"mcp-server",
|
|
9
|
+
"claude",
|
|
10
|
+
"claude-code",
|
|
11
|
+
"codex",
|
|
12
|
+
"orchestration",
|
|
13
|
+
"subagent",
|
|
14
|
+
"sub-agent",
|
|
15
|
+
"multi-agent",
|
|
16
|
+
"ai-agents",
|
|
17
|
+
"anthropic",
|
|
18
|
+
"openai"
|
|
19
|
+
],
|
|
5
20
|
"type": "module",
|
|
6
21
|
"main": "dist/index.js",
|
|
7
22
|
"bin": {
|
|
@@ -22,7 +37,7 @@
|
|
|
22
37
|
"postinstall": "node scripts/postinstall.mjs",
|
|
23
38
|
"prepare": "npm run build",
|
|
24
39
|
"prepublishOnly": "npm test",
|
|
25
|
-
"test": "npm run check:versions && node test/effort.test.mjs && node test/drivers.test.mjs && node test/platform.test.mjs && node test/wait.test.mjs && node test/status.test.mjs && node test/output.test.mjs && node test/stream.test.mjs && node test/routing.test.mjs && node test/deadlock.test.mjs && node test/handler-validation.test.mjs && node test/index-handler.test.mjs && node test/ruleset.test.mjs && node test/ruleset-exec.test.mjs && node test/ruleset-handler.test.mjs && node test/failover.test.mjs && node test/orchestration-marker.test.mjs && node test/orchestration-hook-core.test.mjs && node test/orchestration-adapters.test.mjs && node test/orchestration-pretool.test.mjs && node test/orchestration-directives.test.mjs && node test/no-five-call.test.mjs && node test/check-worktree-subagent.test.mjs && node test/launch-agent-upsert.test.mjs && node test/init-migration.test.mjs && node test/mirror-fragments.test.mjs && node test/performance-tier-effort.test.mjs && node test/setup-repair.test.mjs && node test/setup-quoting.test.mjs && node test/setup-wire.test.mjs && node test/setup-cli-integration.test.mjs && node test/init.test.mjs && node test/model-selection-mode.test.mjs && node test/cli-args.test.mjs && node scripts/validate_provider.mjs && node scripts/validate_seed_sites.mjs && node scripts/validate_routing_audit.mjs && node test/seed-sites.test.mjs && node test/mcp-compliance.test.mjs"
|
|
40
|
+
"test": "npm run check:versions && node test/effort.test.mjs && node test/drivers.test.mjs && node test/platform.test.mjs && node test/wait.test.mjs && node test/status.test.mjs && node test/output.test.mjs && node test/stream.test.mjs && node test/routing.test.mjs && node test/deadlock.test.mjs && node test/handler-validation.test.mjs && node test/index-handler.test.mjs && node test/ruleset.test.mjs && node test/ruleset-exec.test.mjs && node test/ruleset-handler.test.mjs && node test/failover.test.mjs && node test/orchestration-marker.test.mjs && node test/orchestration-hook-core.test.mjs && node test/orchestration-adapters.test.mjs && node test/orchestration-pretool.test.mjs && node test/orchestration-directives.test.mjs && node test/no-five-call.test.mjs && node test/check-worktree-subagent.test.mjs && node test/launch-agent-upsert.test.mjs && node test/claude-session-limit.test.mjs && node test/init-migration.test.mjs && node test/init-global.test.mjs && node test/mirror-fragments.test.mjs && node test/performance-tier-effort.test.mjs && node test/setup-repair.test.mjs && node test/setup-quoting.test.mjs && node test/setup-wire.test.mjs && node test/setup-cli-integration.test.mjs && node test/init.test.mjs && node test/model-selection-mode.test.mjs && node test/cli-args.test.mjs && node scripts/validate_provider.mjs && node scripts/validate_seed_sites.mjs && node scripts/validate_routing_audit.mjs && node test/seed-sites.test.mjs && node test/mcp-compliance.test.mjs"
|
|
26
41
|
},
|
|
27
42
|
"author": "Lexi Blackburn",
|
|
28
43
|
"license": "Apache-2.0",
|
|
@@ -47,7 +62,7 @@
|
|
|
47
62
|
"node": ">=18"
|
|
48
63
|
},
|
|
49
64
|
"publishConfig": {
|
|
50
|
-
"registry": "https://
|
|
65
|
+
"registry": "https://registry.npmjs.org",
|
|
51
66
|
"access": "public"
|
|
52
67
|
}
|
|
53
68
|
}
|