@autohq/cli 0.1.440 → 0.1.442
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/agent-bridge.js +68 -25
- package/dist/index.js +69 -25
- package/package.json +1 -1
package/dist/agent-bridge.js
CHANGED
|
@@ -30825,7 +30825,7 @@ Object.assign(lookup, {
|
|
|
30825
30825
|
// package.json
|
|
30826
30826
|
var package_default = {
|
|
30827
30827
|
name: "@autohq/cli",
|
|
30828
|
-
version: "0.1.
|
|
30828
|
+
version: "0.1.442",
|
|
30829
30829
|
license: "SEE LICENSE IN README.md",
|
|
30830
30830
|
publishConfig: {
|
|
30831
30831
|
access: "public"
|
|
@@ -33231,6 +33231,9 @@ function reasoningEffortRulesForModelSelection(input) {
|
|
|
33231
33231
|
efforts: rules.reasoningEfforts
|
|
33232
33232
|
};
|
|
33233
33233
|
}
|
|
33234
|
+
function defaultReasoningEffortForModelSelection(input) {
|
|
33235
|
+
return reasoningEffortRulesForModelSelection(input).defaultEffort;
|
|
33236
|
+
}
|
|
33234
33237
|
function resolveModelSelectionForHarness(harness, selection) {
|
|
33235
33238
|
const rules = modelRulesForHarness(harness);
|
|
33236
33239
|
const provider = selection?.provider ?? rules.defaultProvider;
|
|
@@ -58997,6 +59000,20 @@ var ProjectTemplateSubscriptionSchema = external_exports.object({
|
|
|
58997
59000
|
|
|
58998
59001
|
// ../../packages/schemas/src/templates/catalog.ts
|
|
58999
59002
|
var import_yaml = __toESM(require_dist(), 1);
|
|
59003
|
+
function catalogModelProvider(entry) {
|
|
59004
|
+
if (entry.harness === "claude-code") return "anthropic";
|
|
59005
|
+
return entry.model?.includes("/") ? "openrouter" : "openai";
|
|
59006
|
+
}
|
|
59007
|
+
function catalogReasoningEffort(entry) {
|
|
59008
|
+
if (entry.reasoningEffort) return entry.reasoningEffort;
|
|
59009
|
+
return defaultReasoningEffortForModelSelection({
|
|
59010
|
+
harness: entry.harness,
|
|
59011
|
+
model: entry.model ? {
|
|
59012
|
+
provider: catalogModelProvider(entry),
|
|
59013
|
+
id: entry.model
|
|
59014
|
+
} : null
|
|
59015
|
+
});
|
|
59016
|
+
}
|
|
59000
59017
|
function plannedCatalogAgent(input) {
|
|
59001
59018
|
return {
|
|
59002
59019
|
...input,
|
|
@@ -59090,6 +59107,7 @@ var ROSTER_CATALOG_ENTRIES = [
|
|
|
59090
59107
|
description: "The senior implementer: dispatched with a single scoped task, it explores the codebase, plans the change, implements it with tests, opens and binds the PR, and keeps handling CI failures, reviews, comments, and conflicts while the PR remains open. It reports milestones to its dispatcher and never merges the PR itself.",
|
|
59091
59108
|
harness: "codex",
|
|
59092
59109
|
model: "gpt-5.6-sol",
|
|
59110
|
+
reasoningEffort: "xhigh",
|
|
59093
59111
|
triggers: [
|
|
59094
59112
|
{
|
|
59095
59113
|
kind: "agent",
|
|
@@ -59132,6 +59150,7 @@ var ROSTER_CATALOG_ENTRIES = [
|
|
|
59132
59150
|
description: "The senior implementer (GPT-5.6 Sol, medium reasoning): dispatched with a scoped task, it explores the codebase, plans and implements with tests, binds the PR, and keeps handling CI, review feedback, comments, and conflicts while the PR remains open. It never merges the PR itself.",
|
|
59133
59151
|
harness: "codex",
|
|
59134
59152
|
model: "gpt-5.6-sol",
|
|
59153
|
+
reasoningEffort: "medium",
|
|
59135
59154
|
triggers: [
|
|
59136
59155
|
{
|
|
59137
59156
|
kind: "agent",
|
|
@@ -59792,6 +59811,7 @@ var ROSTER_CATALOG_ENTRIES = [
|
|
|
59792
59811
|
description: "A deletion-first implementer for unused dependencies, exports, and obsolete paths. It checks git history and the team's rulings before cutting, opens one negative-diff PR per concern, proves each cut with targeted checks, and never merges its own work.",
|
|
59793
59812
|
harness: "codex",
|
|
59794
59813
|
model: "gpt-5.6-sol",
|
|
59814
|
+
reasoningEffort: "xhigh",
|
|
59795
59815
|
triggers: [
|
|
59796
59816
|
{
|
|
59797
59817
|
kind: "schedule",
|
|
@@ -59870,6 +59890,7 @@ var ROSTER_CATALOG_ENTRIES = [
|
|
|
59870
59890
|
description: "A CI reliability specialist that reads CI history for flake signatures, reproduces what it can, and either fixes the test or quarantines it with a tracking issue. It maintains a haunted-list registry and closes every case with the mechanism explained.",
|
|
59871
59891
|
harness: "codex",
|
|
59872
59892
|
model: "gpt-5.6-sol",
|
|
59893
|
+
reasoningEffort: "xhigh",
|
|
59873
59894
|
triggers: [
|
|
59874
59895
|
{
|
|
59875
59896
|
kind: "schedule",
|
|
@@ -59999,6 +60020,7 @@ var ROSTER_CATALOG_ENTRIES = [
|
|
|
59999
60020
|
description: "A review gate focused on leaked secrets, injection surfaces, disappearing authorization checks, dangerous dependencies, and permission escalations. It reports a dedicated security check next to the review check: quiet when clean, specific when not. Persuasion plus check status only \u2014 humans decide whether the check blocks.",
|
|
60000
60021
|
harness: "codex",
|
|
60001
60022
|
model: "gpt-5.6-sol",
|
|
60023
|
+
reasoningEffort: "xhigh",
|
|
60002
60024
|
triggers: [
|
|
60003
60025
|
{
|
|
60004
60026
|
kind: "github",
|
|
@@ -60072,6 +60094,7 @@ var ROSTER_CATALOG_ENTRIES = [
|
|
|
60072
60094
|
description: "A post-incident analyst that reconstructs the incident timeline from evidence, writes the blameless postmortem, files action items as tracked issues with owners, and follows up on prior postmortems' action items \u2014 the part humans never do. It never writes 'human error' as a root cause.",
|
|
60073
60095
|
harness: "codex",
|
|
60074
60096
|
model: "gpt-5.6-sol",
|
|
60097
|
+
reasoningEffort: "xhigh",
|
|
60075
60098
|
triggers: [
|
|
60076
60099
|
{
|
|
60077
60100
|
kind: "github",
|
|
@@ -60175,6 +60198,7 @@ var ROSTER_CATALOG_MANIFEST = ROSTER_CATALOG_ENTRIES.map((entry) => ({
|
|
|
60175
60198
|
...entry,
|
|
60176
60199
|
availability: entry.availability ?? "available",
|
|
60177
60200
|
capabilitySummary: capabilitySummary(entry),
|
|
60201
|
+
reasoningEffort: catalogReasoningEffort(entry),
|
|
60178
60202
|
trustNotes: entry.trustNotes ?? []
|
|
60179
60203
|
}));
|
|
60180
60204
|
var ROSTER_CATALOG = ROSTER_CATALOG_MANIFEST.filter((agent) => agent.availability === "available");
|
|
@@ -60189,8 +60213,8 @@ var TEAM_TEMPLATES = [
|
|
|
60189
60213
|
id: "accelerator",
|
|
60190
60214
|
name: "The Accelerator",
|
|
60191
60215
|
template: "@auto/agent-fleet",
|
|
60192
|
-
tagline: "You
|
|
60193
|
-
pitch: "
|
|
60216
|
+
tagline: "You set the goal. It shepherds every PR through review\u2014and gets better over time.",
|
|
60217
|
+
pitch: "Hand this team a goal and step out of the operational loop. It breaks down the work, dispatches the right agents, opens the PRs, shepherds every change through CI and review, responds to feedback, resolves conflicts, and keeps the whole queue moving until a decision genuinely needs you. Along the way, it reviews its own performance and proposes improvements so your software factory gets faster, sharper, and more efficient over time.",
|
|
60194
60218
|
backdrop: "accelerator.mp4",
|
|
60195
60219
|
frontOfHouse: "chief-of-staff",
|
|
60196
60220
|
onboardingDocument: "docs/plans/drafts/front-of-house/onboarding/accelerator-onboarding.md",
|
|
@@ -60269,8 +60293,8 @@ var TEAM_TEMPLATES = [
|
|
|
60269
60293
|
id: "slopbusters",
|
|
60270
60294
|
name: "The Slopbusters",
|
|
60271
60295
|
template: "@auto/slopbusters",
|
|
60272
|
-
tagline: "
|
|
60273
|
-
pitch: "
|
|
60296
|
+
tagline: "Continuously simplifies and documents your codebase as it changes.",
|
|
60297
|
+
pitch: "The Slopbusters are a standing maintenance crew, not a cleanup command. They regularly inspect the codebase for dead code, flaky tests, stale branches, expired TODOs, risky patterns, structural clutter, and missing context. They investigate unusual behavior before touching it, turn what they find into small, reviewable PRs, and shepherd each change through CI and review. As the code evolves, they keep simplifying tangled areas and documenting confusing behavior and architectural decisions, so knowledge does not disappear into people's heads or old threads. The result is a codebase that stays smaller, clearer, and easier for both people and agents to understand, change, and trust.",
|
|
60274
60298
|
backdrop: "slopbusters.mp4",
|
|
60275
60299
|
frontOfHouse: "renovator",
|
|
60276
60300
|
onboardingDocument: "docs/plans/drafts/front-of-house/onboarding/slopbusters-onboarding.md",
|
|
@@ -60326,8 +60350,8 @@ var TEAM_TEMPLATES = [
|
|
|
60326
60350
|
id: "war-room",
|
|
60327
60351
|
name: "The War Room",
|
|
60328
60352
|
template: "@auto/war-room",
|
|
60329
|
-
tagline: "
|
|
60330
|
-
pitch: "
|
|
60353
|
+
tagline: "Triages incidents, investigates causes, and drives fixes through resolution.",
|
|
60354
|
+
pitch: "This team triages alerts, investigates causes, dispatches fixes, and follows every incident through resolution.",
|
|
60331
60355
|
backdrop: "war-room.mp4",
|
|
60332
60356
|
frontOfHouse: "admiral",
|
|
60333
60357
|
onboardingDocument: "docs/plans/drafts/front-of-house/onboarding/war-room-onboarding.md",
|
|
@@ -60383,8 +60407,8 @@ var TEAM_TEMPLATES = [
|
|
|
60383
60407
|
id: "blank-canvas",
|
|
60384
60408
|
name: "The Blank Canvas",
|
|
60385
60409
|
template: "@auto/blank-canvas",
|
|
60386
|
-
tagline: "
|
|
60387
|
-
pitch: "Describe
|
|
60410
|
+
tagline: "Builds any automation from a plain-language idea.",
|
|
60411
|
+
pitch: "Describe what you want to happen, when it should run, and which tools it can use. The Patron will help you shape the workflow, build the agents and triggers behind it, and open a setup PR for your approval.",
|
|
60388
60412
|
backdrop: "blank-canvas.mp4",
|
|
60389
60413
|
frontOfHouse: "patron",
|
|
60390
60414
|
onboardingDocument: "docs/plans/drafts/front-of-house/onboarding/blank-canvas-onboarding.md",
|
|
@@ -90581,7 +90605,7 @@ function withClaudeStderrDiagnosticsPointer(error51, capturedStderr) {
|
|
|
90581
90605
|
var CLAUDE_AGENT_STARTUP_TIMEOUT_MS = 3e4;
|
|
90582
90606
|
var CLAUDE_INTERRUPT_SETTLE_TIMEOUT_MS = 1e4;
|
|
90583
90607
|
var CLAUDE_INTERRUPT_ACK_TIMEOUT_MS = 1e4;
|
|
90584
|
-
var CLAUDE_MCP_REGISTRATION_TIMEOUT_MS =
|
|
90608
|
+
var CLAUDE_MCP_REGISTRATION_TIMEOUT_MS = 3e4;
|
|
90585
90609
|
var CLAUDE_MCP_REGISTRATION_POLL_INTERVAL_MS = 100;
|
|
90586
90610
|
var CLAUDE_READ_STATE_SEED_FAILURE_LIMIT = 3;
|
|
90587
90611
|
var CLAUDE_STARTUP_PROFILE_HOOK_EVENTS = [
|
|
@@ -90612,6 +90636,12 @@ var ClaudeMcpRequiredToolsMissingError = class extends Error {
|
|
|
90612
90636
|
this.name = "ClaudeMcpRequiredToolsMissingError";
|
|
90613
90637
|
}
|
|
90614
90638
|
};
|
|
90639
|
+
var ClaudeMcpRegistryNotReadyError = class extends Error {
|
|
90640
|
+
constructor(detail) {
|
|
90641
|
+
super(`MCP tool registry was not ready at session start: ${detail}`);
|
|
90642
|
+
this.name = "ClaudeMcpRegistryNotReadyError";
|
|
90643
|
+
}
|
|
90644
|
+
};
|
|
90615
90645
|
var ClaudeAgentBridgeSessionImpl = class {
|
|
90616
90646
|
input;
|
|
90617
90647
|
inputQueue;
|
|
@@ -91178,12 +91208,13 @@ var ClaudeAgentBridgeSessionImpl = class {
|
|
|
91178
91208
|
}
|
|
91179
91209
|
// Why this gate is correct without a provider-backed test (it relies on real
|
|
91180
91210
|
// SDK mcpServerStatus() timing that fakes cannot prove):
|
|
91181
|
-
// -
|
|
91182
|
-
//
|
|
91183
|
-
//
|
|
91184
|
-
//
|
|
91185
|
-
//
|
|
91186
|
-
//
|
|
91211
|
+
// - Fail closed before first-turn injection whenever configured servers are
|
|
91212
|
+
// still pending or their status cannot be read. The model must never see a
|
|
91213
|
+
// callable MCP name whose SDK registry snapshot is not ready to dispatch
|
|
91214
|
+
// it. Closing the SDK session lets the wrapper's existing bounded command
|
|
91215
|
+
// delivery retries warm a fresh registry without replaying a tool call.
|
|
91216
|
+
// - Confirmed-empty and missing-required-tool states retain their distinct
|
|
91217
|
+
// diagnostics and typed failures from FRA-3458.
|
|
91187
91218
|
// - Provider-path validation is deferred deliberately: the failure is the
|
|
91188
91219
|
// intermittent live-prod race on the chief-of-staff singleton (a real
|
|
91189
91220
|
// runtime restart dispatching turn-1 while real mcp__* servers reconnect),
|
|
@@ -91216,14 +91247,19 @@ var ClaudeAgentBridgeSessionImpl = class {
|
|
|
91216
91247
|
};
|
|
91217
91248
|
}
|
|
91218
91249
|
const result = await this.mcpRegistrationGate.promise;
|
|
91219
|
-
if (result.outcome
|
|
91250
|
+
if (result.outcome === "ready" || result.outcome === "closed") {
|
|
91220
91251
|
return;
|
|
91221
91252
|
}
|
|
91222
91253
|
this.close();
|
|
91223
|
-
|
|
91224
|
-
|
|
91254
|
+
switch (result.outcome) {
|
|
91255
|
+
case "missing_required_tools":
|
|
91256
|
+
throw new ClaudeMcpRequiredToolsMissingError(result.detail);
|
|
91257
|
+
case "not_ready":
|
|
91258
|
+
case "status_failed":
|
|
91259
|
+
throw new ClaudeMcpRegistryNotReadyError(result.detail);
|
|
91260
|
+
case "empty":
|
|
91261
|
+
throw new ClaudeMcpRegistryEmptyError(result.detail);
|
|
91225
91262
|
}
|
|
91226
|
-
throw new ClaudeMcpRegistryEmptyError(result.detail);
|
|
91227
91263
|
}
|
|
91228
91264
|
// Poll the live query's MCP server status until no configured server is still
|
|
91229
91265
|
// `pending`, bounded by CLAUDE_MCP_REGISTRATION_TIMEOUT_MS. Terminal states
|
|
@@ -91235,7 +91271,9 @@ var ClaudeAgentBridgeSessionImpl = class {
|
|
|
91235
91271
|
// status-read failure, timeout, or a closed session all resolve so the caller
|
|
91236
91272
|
// degrades to immediate injection when the registry state is uncertain. A
|
|
91237
91273
|
// connected required server with positive zero/missing-tool telemetry fails
|
|
91238
|
-
// immediately even while unrelated configured servers remain pending.
|
|
91274
|
+
// immediately even while unrelated configured servers remain pending. A
|
|
91275
|
+
// timeout or status-read failure returns a distinct not-ready result so the
|
|
91276
|
+
// caller closes the session and rejects before first-turn injection.
|
|
91239
91277
|
async pollMcpRegistration(query) {
|
|
91240
91278
|
const configuredNames = Object.keys(this.options.mcpServers ?? {});
|
|
91241
91279
|
const startedAt = Date.now();
|
|
@@ -91251,10 +91289,14 @@ var ClaudeAgentBridgeSessionImpl = class {
|
|
|
91251
91289
|
try {
|
|
91252
91290
|
statuses = await query.mcpServerStatus();
|
|
91253
91291
|
} catch (error51) {
|
|
91292
|
+
const detail = error51 instanceof Error ? error51.message : String(error51);
|
|
91254
91293
|
this.input.writeOutput?.(
|
|
91255
|
-
`agent_bridge_claude_mcp_gate_status_failed duration_ms=${Date.now() - startedAt} error=${
|
|
91294
|
+
`agent_bridge_claude_mcp_gate_status_failed duration_ms=${Date.now() - startedAt} error=${detail}`
|
|
91256
91295
|
);
|
|
91257
|
-
return {
|
|
91296
|
+
return {
|
|
91297
|
+
outcome: "status_failed",
|
|
91298
|
+
detail: `status read failed: ${detail}`
|
|
91299
|
+
};
|
|
91258
91300
|
}
|
|
91259
91301
|
const missingRequiredTools = missingRequiredMcpTools(
|
|
91260
91302
|
statuses,
|
|
@@ -91281,10 +91323,11 @@ var ClaudeAgentBridgeSessionImpl = class {
|
|
|
91281
91323
|
return { outcome: "ready" };
|
|
91282
91324
|
}
|
|
91283
91325
|
if (Date.now() >= deadline) {
|
|
91326
|
+
const detail = mcpStatusDetailList(statuses);
|
|
91284
91327
|
this.input.writeOutput?.(
|
|
91285
|
-
`
|
|
91328
|
+
`agent_bridge_claude_mcp_gate_not_ready duration_ms=${Date.now() - startedAt} servers=${detail}`
|
|
91286
91329
|
);
|
|
91287
|
-
return { outcome: "
|
|
91330
|
+
return { outcome: "not_ready", detail };
|
|
91288
91331
|
}
|
|
91289
91332
|
await delay(
|
|
91290
91333
|
CLAUDE_MCP_REGISTRATION_POLL_INTERVAL_MS,
|
package/dist/index.js
CHANGED
|
@@ -16991,6 +16991,9 @@ function reasoningEffortRulesForModelSelection(input) {
|
|
|
16991
16991
|
efforts: rules.reasoningEfforts
|
|
16992
16992
|
};
|
|
16993
16993
|
}
|
|
16994
|
+
function defaultReasoningEffortForModelSelection(input) {
|
|
16995
|
+
return reasoningEffortRulesForModelSelection(input).defaultEffort;
|
|
16996
|
+
}
|
|
16994
16997
|
function resolveModelSelectionForHarness(harness, selection) {
|
|
16995
16998
|
const rules = modelRulesForHarness(harness);
|
|
16996
16999
|
const provider = selection?.provider ?? rules.defaultProvider;
|
|
@@ -43417,6 +43420,20 @@ var init_subscription = __esm({
|
|
|
43417
43420
|
|
|
43418
43421
|
// ../../packages/schemas/src/templates/catalog.ts
|
|
43419
43422
|
import { parse as parseYaml } from "yaml";
|
|
43423
|
+
function catalogModelProvider(entry) {
|
|
43424
|
+
if (entry.harness === "claude-code") return "anthropic";
|
|
43425
|
+
return entry.model?.includes("/") ? "openrouter" : "openai";
|
|
43426
|
+
}
|
|
43427
|
+
function catalogReasoningEffort(entry) {
|
|
43428
|
+
if (entry.reasoningEffort) return entry.reasoningEffort;
|
|
43429
|
+
return defaultReasoningEffortForModelSelection({
|
|
43430
|
+
harness: entry.harness,
|
|
43431
|
+
model: entry.model ? {
|
|
43432
|
+
provider: catalogModelProvider(entry),
|
|
43433
|
+
id: entry.model
|
|
43434
|
+
} : null
|
|
43435
|
+
});
|
|
43436
|
+
}
|
|
43420
43437
|
function plannedCatalogAgent(input) {
|
|
43421
43438
|
return {
|
|
43422
43439
|
...input,
|
|
@@ -43473,6 +43490,7 @@ var ROSTER_CATALOG_ENTRIES, ROSTER_CATALOG_MANIFEST, ROSTER_CATALOG, SELF_IMPROV
|
|
|
43473
43490
|
var init_catalog = __esm({
|
|
43474
43491
|
"../../packages/schemas/src/templates/catalog.ts"() {
|
|
43475
43492
|
"use strict";
|
|
43493
|
+
init_model_selection();
|
|
43476
43494
|
init_content_generated();
|
|
43477
43495
|
init_registry();
|
|
43478
43496
|
ROSTER_CATALOG_ENTRIES = [
|
|
@@ -43548,6 +43566,7 @@ var init_catalog = __esm({
|
|
|
43548
43566
|
description: "The senior implementer: dispatched with a single scoped task, it explores the codebase, plans the change, implements it with tests, opens and binds the PR, and keeps handling CI failures, reviews, comments, and conflicts while the PR remains open. It reports milestones to its dispatcher and never merges the PR itself.",
|
|
43549
43567
|
harness: "codex",
|
|
43550
43568
|
model: "gpt-5.6-sol",
|
|
43569
|
+
reasoningEffort: "xhigh",
|
|
43551
43570
|
triggers: [
|
|
43552
43571
|
{
|
|
43553
43572
|
kind: "agent",
|
|
@@ -43590,6 +43609,7 @@ var init_catalog = __esm({
|
|
|
43590
43609
|
description: "The senior implementer (GPT-5.6 Sol, medium reasoning): dispatched with a scoped task, it explores the codebase, plans and implements with tests, binds the PR, and keeps handling CI, review feedback, comments, and conflicts while the PR remains open. It never merges the PR itself.",
|
|
43591
43610
|
harness: "codex",
|
|
43592
43611
|
model: "gpt-5.6-sol",
|
|
43612
|
+
reasoningEffort: "medium",
|
|
43593
43613
|
triggers: [
|
|
43594
43614
|
{
|
|
43595
43615
|
kind: "agent",
|
|
@@ -44250,6 +44270,7 @@ var init_catalog = __esm({
|
|
|
44250
44270
|
description: "A deletion-first implementer for unused dependencies, exports, and obsolete paths. It checks git history and the team's rulings before cutting, opens one negative-diff PR per concern, proves each cut with targeted checks, and never merges its own work.",
|
|
44251
44271
|
harness: "codex",
|
|
44252
44272
|
model: "gpt-5.6-sol",
|
|
44273
|
+
reasoningEffort: "xhigh",
|
|
44253
44274
|
triggers: [
|
|
44254
44275
|
{
|
|
44255
44276
|
kind: "schedule",
|
|
@@ -44328,6 +44349,7 @@ var init_catalog = __esm({
|
|
|
44328
44349
|
description: "A CI reliability specialist that reads CI history for flake signatures, reproduces what it can, and either fixes the test or quarantines it with a tracking issue. It maintains a haunted-list registry and closes every case with the mechanism explained.",
|
|
44329
44350
|
harness: "codex",
|
|
44330
44351
|
model: "gpt-5.6-sol",
|
|
44352
|
+
reasoningEffort: "xhigh",
|
|
44331
44353
|
triggers: [
|
|
44332
44354
|
{
|
|
44333
44355
|
kind: "schedule",
|
|
@@ -44457,6 +44479,7 @@ var init_catalog = __esm({
|
|
|
44457
44479
|
description: "A review gate focused on leaked secrets, injection surfaces, disappearing authorization checks, dangerous dependencies, and permission escalations. It reports a dedicated security check next to the review check: quiet when clean, specific when not. Persuasion plus check status only \u2014 humans decide whether the check blocks.",
|
|
44458
44480
|
harness: "codex",
|
|
44459
44481
|
model: "gpt-5.6-sol",
|
|
44482
|
+
reasoningEffort: "xhigh",
|
|
44460
44483
|
triggers: [
|
|
44461
44484
|
{
|
|
44462
44485
|
kind: "github",
|
|
@@ -44530,6 +44553,7 @@ var init_catalog = __esm({
|
|
|
44530
44553
|
description: "A post-incident analyst that reconstructs the incident timeline from evidence, writes the blameless postmortem, files action items as tracked issues with owners, and follows up on prior postmortems' action items \u2014 the part humans never do. It never writes 'human error' as a root cause.",
|
|
44531
44554
|
harness: "codex",
|
|
44532
44555
|
model: "gpt-5.6-sol",
|
|
44556
|
+
reasoningEffort: "xhigh",
|
|
44533
44557
|
triggers: [
|
|
44534
44558
|
{
|
|
44535
44559
|
kind: "github",
|
|
@@ -44601,6 +44625,7 @@ var init_catalog = __esm({
|
|
|
44601
44625
|
...entry,
|
|
44602
44626
|
availability: entry.availability ?? "available",
|
|
44603
44627
|
capabilitySummary: capabilitySummary(entry),
|
|
44628
|
+
reasoningEffort: catalogReasoningEffort(entry),
|
|
44604
44629
|
trustNotes: entry.trustNotes ?? []
|
|
44605
44630
|
}));
|
|
44606
44631
|
ROSTER_CATALOG = ROSTER_CATALOG_MANIFEST.filter((agent) => agent.availability === "available");
|
|
@@ -44615,8 +44640,8 @@ var init_catalog = __esm({
|
|
|
44615
44640
|
id: "accelerator",
|
|
44616
44641
|
name: "The Accelerator",
|
|
44617
44642
|
template: "@auto/agent-fleet",
|
|
44618
|
-
tagline: "You
|
|
44619
|
-
pitch: "
|
|
44643
|
+
tagline: "You set the goal. It shepherds every PR through review\u2014and gets better over time.",
|
|
44644
|
+
pitch: "Hand this team a goal and step out of the operational loop. It breaks down the work, dispatches the right agents, opens the PRs, shepherds every change through CI and review, responds to feedback, resolves conflicts, and keeps the whole queue moving until a decision genuinely needs you. Along the way, it reviews its own performance and proposes improvements so your software factory gets faster, sharper, and more efficient over time.",
|
|
44620
44645
|
backdrop: "accelerator.mp4",
|
|
44621
44646
|
frontOfHouse: "chief-of-staff",
|
|
44622
44647
|
onboardingDocument: "docs/plans/drafts/front-of-house/onboarding/accelerator-onboarding.md",
|
|
@@ -44695,8 +44720,8 @@ var init_catalog = __esm({
|
|
|
44695
44720
|
id: "slopbusters",
|
|
44696
44721
|
name: "The Slopbusters",
|
|
44697
44722
|
template: "@auto/slopbusters",
|
|
44698
|
-
tagline: "
|
|
44699
|
-
pitch: "
|
|
44723
|
+
tagline: "Continuously simplifies and documents your codebase as it changes.",
|
|
44724
|
+
pitch: "The Slopbusters are a standing maintenance crew, not a cleanup command. They regularly inspect the codebase for dead code, flaky tests, stale branches, expired TODOs, risky patterns, structural clutter, and missing context. They investigate unusual behavior before touching it, turn what they find into small, reviewable PRs, and shepherd each change through CI and review. As the code evolves, they keep simplifying tangled areas and documenting confusing behavior and architectural decisions, so knowledge does not disappear into people's heads or old threads. The result is a codebase that stays smaller, clearer, and easier for both people and agents to understand, change, and trust.",
|
|
44700
44725
|
backdrop: "slopbusters.mp4",
|
|
44701
44726
|
frontOfHouse: "renovator",
|
|
44702
44727
|
onboardingDocument: "docs/plans/drafts/front-of-house/onboarding/slopbusters-onboarding.md",
|
|
@@ -44752,8 +44777,8 @@ var init_catalog = __esm({
|
|
|
44752
44777
|
id: "war-room",
|
|
44753
44778
|
name: "The War Room",
|
|
44754
44779
|
template: "@auto/war-room",
|
|
44755
|
-
tagline: "
|
|
44756
|
-
pitch: "
|
|
44780
|
+
tagline: "Triages incidents, investigates causes, and drives fixes through resolution.",
|
|
44781
|
+
pitch: "This team triages alerts, investigates causes, dispatches fixes, and follows every incident through resolution.",
|
|
44757
44782
|
backdrop: "war-room.mp4",
|
|
44758
44783
|
frontOfHouse: "admiral",
|
|
44759
44784
|
onboardingDocument: "docs/plans/drafts/front-of-house/onboarding/war-room-onboarding.md",
|
|
@@ -44809,8 +44834,8 @@ var init_catalog = __esm({
|
|
|
44809
44834
|
id: "blank-canvas",
|
|
44810
44835
|
name: "The Blank Canvas",
|
|
44811
44836
|
template: "@auto/blank-canvas",
|
|
44812
|
-
tagline: "
|
|
44813
|
-
pitch: "Describe
|
|
44837
|
+
tagline: "Builds any automation from a plain-language idea.",
|
|
44838
|
+
pitch: "Describe what you want to happen, when it should run, and which tools it can use. The Patron will help you shape the workflow, build the agents and triggers behind it, and open a setup PR for your approval.",
|
|
44814
44839
|
backdrop: "blank-canvas.mp4",
|
|
44815
44840
|
frontOfHouse: "patron",
|
|
44816
44841
|
onboardingDocument: "docs/plans/drafts/front-of-house/onboarding/blank-canvas-onboarding.md",
|
|
@@ -47809,7 +47834,7 @@ var init_package = __esm({
|
|
|
47809
47834
|
"package.json"() {
|
|
47810
47835
|
package_default = {
|
|
47811
47836
|
name: "@autohq/cli",
|
|
47812
|
-
version: "0.1.
|
|
47837
|
+
version: "0.1.442",
|
|
47813
47838
|
license: "SEE LICENSE IN README.md",
|
|
47814
47839
|
publishConfig: {
|
|
47815
47840
|
access: "public"
|
|
@@ -61601,7 +61626,7 @@ function withClaudeStderrDiagnosticsPointer(error51, capturedStderr) {
|
|
|
61601
61626
|
var CLAUDE_AGENT_STARTUP_TIMEOUT_MS = 3e4;
|
|
61602
61627
|
var CLAUDE_INTERRUPT_SETTLE_TIMEOUT_MS = 1e4;
|
|
61603
61628
|
var CLAUDE_INTERRUPT_ACK_TIMEOUT_MS = 1e4;
|
|
61604
|
-
var CLAUDE_MCP_REGISTRATION_TIMEOUT_MS =
|
|
61629
|
+
var CLAUDE_MCP_REGISTRATION_TIMEOUT_MS = 3e4;
|
|
61605
61630
|
var CLAUDE_MCP_REGISTRATION_POLL_INTERVAL_MS = 100;
|
|
61606
61631
|
var CLAUDE_READ_STATE_SEED_FAILURE_LIMIT = 3;
|
|
61607
61632
|
var CLAUDE_STARTUP_PROFILE_HOOK_EVENTS = [
|
|
@@ -61632,6 +61657,12 @@ var ClaudeMcpRequiredToolsMissingError = class extends Error {
|
|
|
61632
61657
|
this.name = "ClaudeMcpRequiredToolsMissingError";
|
|
61633
61658
|
}
|
|
61634
61659
|
};
|
|
61660
|
+
var ClaudeMcpRegistryNotReadyError = class extends Error {
|
|
61661
|
+
constructor(detail) {
|
|
61662
|
+
super(`MCP tool registry was not ready at session start: ${detail}`);
|
|
61663
|
+
this.name = "ClaudeMcpRegistryNotReadyError";
|
|
61664
|
+
}
|
|
61665
|
+
};
|
|
61635
61666
|
var ClaudeAgentBridgeSessionImpl = class {
|
|
61636
61667
|
input;
|
|
61637
61668
|
inputQueue;
|
|
@@ -62198,12 +62229,13 @@ var ClaudeAgentBridgeSessionImpl = class {
|
|
|
62198
62229
|
}
|
|
62199
62230
|
// Why this gate is correct without a provider-backed test (it relies on real
|
|
62200
62231
|
// SDK mcpServerStatus() timing that fakes cannot prove):
|
|
62201
|
-
// -
|
|
62202
|
-
//
|
|
62203
|
-
//
|
|
62204
|
-
//
|
|
62205
|
-
//
|
|
62206
|
-
//
|
|
62232
|
+
// - Fail closed before first-turn injection whenever configured servers are
|
|
62233
|
+
// still pending or their status cannot be read. The model must never see a
|
|
62234
|
+
// callable MCP name whose SDK registry snapshot is not ready to dispatch
|
|
62235
|
+
// it. Closing the SDK session lets the wrapper's existing bounded command
|
|
62236
|
+
// delivery retries warm a fresh registry without replaying a tool call.
|
|
62237
|
+
// - Confirmed-empty and missing-required-tool states retain their distinct
|
|
62238
|
+
// diagnostics and typed failures from FRA-3458.
|
|
62207
62239
|
// - Provider-path validation is deferred deliberately: the failure is the
|
|
62208
62240
|
// intermittent live-prod race on the chief-of-staff singleton (a real
|
|
62209
62241
|
// runtime restart dispatching turn-1 while real mcp__* servers reconnect),
|
|
@@ -62236,14 +62268,19 @@ var ClaudeAgentBridgeSessionImpl = class {
|
|
|
62236
62268
|
};
|
|
62237
62269
|
}
|
|
62238
62270
|
const result = await this.mcpRegistrationGate.promise;
|
|
62239
|
-
if (result.outcome
|
|
62271
|
+
if (result.outcome === "ready" || result.outcome === "closed") {
|
|
62240
62272
|
return;
|
|
62241
62273
|
}
|
|
62242
62274
|
this.close();
|
|
62243
|
-
|
|
62244
|
-
|
|
62275
|
+
switch (result.outcome) {
|
|
62276
|
+
case "missing_required_tools":
|
|
62277
|
+
throw new ClaudeMcpRequiredToolsMissingError(result.detail);
|
|
62278
|
+
case "not_ready":
|
|
62279
|
+
case "status_failed":
|
|
62280
|
+
throw new ClaudeMcpRegistryNotReadyError(result.detail);
|
|
62281
|
+
case "empty":
|
|
62282
|
+
throw new ClaudeMcpRegistryEmptyError(result.detail);
|
|
62245
62283
|
}
|
|
62246
|
-
throw new ClaudeMcpRegistryEmptyError(result.detail);
|
|
62247
62284
|
}
|
|
62248
62285
|
// Poll the live query's MCP server status until no configured server is still
|
|
62249
62286
|
// `pending`, bounded by CLAUDE_MCP_REGISTRATION_TIMEOUT_MS. Terminal states
|
|
@@ -62255,7 +62292,9 @@ var ClaudeAgentBridgeSessionImpl = class {
|
|
|
62255
62292
|
// status-read failure, timeout, or a closed session all resolve so the caller
|
|
62256
62293
|
// degrades to immediate injection when the registry state is uncertain. A
|
|
62257
62294
|
// connected required server with positive zero/missing-tool telemetry fails
|
|
62258
|
-
// immediately even while unrelated configured servers remain pending.
|
|
62295
|
+
// immediately even while unrelated configured servers remain pending. A
|
|
62296
|
+
// timeout or status-read failure returns a distinct not-ready result so the
|
|
62297
|
+
// caller closes the session and rejects before first-turn injection.
|
|
62259
62298
|
async pollMcpRegistration(query) {
|
|
62260
62299
|
const configuredNames = Object.keys(this.options.mcpServers ?? {});
|
|
62261
62300
|
const startedAt = Date.now();
|
|
@@ -62271,10 +62310,14 @@ var ClaudeAgentBridgeSessionImpl = class {
|
|
|
62271
62310
|
try {
|
|
62272
62311
|
statuses = await query.mcpServerStatus();
|
|
62273
62312
|
} catch (error51) {
|
|
62313
|
+
const detail = error51 instanceof Error ? error51.message : String(error51);
|
|
62274
62314
|
this.input.writeOutput?.(
|
|
62275
|
-
`agent_bridge_claude_mcp_gate_status_failed duration_ms=${Date.now() - startedAt} error=${
|
|
62315
|
+
`agent_bridge_claude_mcp_gate_status_failed duration_ms=${Date.now() - startedAt} error=${detail}`
|
|
62276
62316
|
);
|
|
62277
|
-
return {
|
|
62317
|
+
return {
|
|
62318
|
+
outcome: "status_failed",
|
|
62319
|
+
detail: `status read failed: ${detail}`
|
|
62320
|
+
};
|
|
62278
62321
|
}
|
|
62279
62322
|
const missingRequiredTools = missingRequiredMcpTools(
|
|
62280
62323
|
statuses,
|
|
@@ -62301,10 +62344,11 @@ var ClaudeAgentBridgeSessionImpl = class {
|
|
|
62301
62344
|
return { outcome: "ready" };
|
|
62302
62345
|
}
|
|
62303
62346
|
if (Date.now() >= deadline) {
|
|
62347
|
+
const detail = mcpStatusDetailList(statuses);
|
|
62304
62348
|
this.input.writeOutput?.(
|
|
62305
|
-
`
|
|
62349
|
+
`agent_bridge_claude_mcp_gate_not_ready duration_ms=${Date.now() - startedAt} servers=${detail}`
|
|
62306
62350
|
);
|
|
62307
|
-
return { outcome: "
|
|
62351
|
+
return { outcome: "not_ready", detail };
|
|
62308
62352
|
}
|
|
62309
62353
|
await delay(
|
|
62310
62354
|
CLAUDE_MCP_REGISTRATION_POLL_INTERVAL_MS,
|