@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/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 performance.<task_category> as the pairings
124
- * array directly (defensive .pairings unwrap), sort by rank asc, map each model
125
- * to a launch id, normalize effort, and drop non-launchable / unknown-effort
126
- * pairings. An empty result sets noCandidates:true.
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
- let raw = perf[taskCategory];
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
- // 5. explicit mode only: provider+model must satisfy the existing match rule.
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 = 900\n`;
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 = 900, and ` +
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.8.9",
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://npm.pkg.github.com",
65
+ "registry": "https://registry.npmjs.org",
51
66
  "access": "public"
52
67
  }
53
68
  }