@bridge_gpt/mcp-server 0.2.30 → 0.2.31

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.
@@ -300,12 +300,15 @@ export function getInstallBridgeUsage() {
300
300
  " --agent claude|cursor-agent Explicit launch override for the post-install",
301
301
  " session — it always wins, and there is NO Claude",
302
302
  " default. Without it the launch tool is derived",
303
- " from your selection: Claude Code opens `claude`,",
304
- " Cursor opens `cursor-agent`; if several launchable",
305
- " tools are selected the wizard asks which single one",
306
- " to open; and a selection whose tools have no",
307
- " agentic CLI (e.g. Copilot) opens nothing and prints",
308
- " how to finish configuring later.",
303
+ " from your selection: Claude Code opens `claude`.",
304
+ " Cursor is NOT auto-opened (its cursor-agent CLI",
305
+ " first-run workspace-trust prompt collapses a spawned",
306
+ " session); selecting Cursor writes .cursor/mcp.json",
307
+ " and prints how to finish by running /install-bridge",
308
+ " in a new Cursor session. A selection whose tools have",
309
+ " no agentic CLI (e.g. Copilot) likewise opens nothing",
310
+ " and prints how to finish configuring later. Passing",
311
+ " --agent cursor-agent still force-spawns it.",
309
312
  " -h, --help Show this help.",
310
313
  "",
311
314
  "Environment: BAPI_BASE_URL (default https://bridgegpt-api.com) and BAPI_DOCS_DIR",
@@ -1131,18 +1134,37 @@ export async function resolveSelectedHostPlatforms(deps, options) {
1131
1134
  legacy.push("copilot-vscode");
1132
1135
  return HOST_PLATFORM_ORDER.filter((id) => legacy.includes(id));
1133
1136
  }
1137
+ /**
1138
+ * Launch agents install-bridge will NEVER auto-spawn from a host SELECTION, even
1139
+ * though their CLI exists and the host's MCP config is still written normally.
1140
+ *
1141
+ * `cursor-agent` is excluded: its FIRST-RUN workspace-trust handshake collapses
1142
+ * under our osascript-spawned launch — the "Workspace Trust Required" dialog
1143
+ * renders, then the process exits before a selection registers, so configuration
1144
+ * never runs (reproduced on a pristine, never-trusted workspace; the identical
1145
+ * command works only where Cursor already trusts the directory). The trust gate is
1146
+ * cursor-agent's own behavior on an untrusted workspace and is not something our
1147
+ * launch can drive, so we treat Cursor as a no-auto-launch host: selecting it
1148
+ * still writes `.cursor/mcp.json`, then prints the manual `/install-bridge`
1149
+ * continuation (same path as Copilot/Codex/Windsurf, which have no agentic CLI).
1150
+ * An explicit `--agent cursor-agent` override still spawns it — a deliberate,
1151
+ * documented power-user opt-in that bypasses this selection guard.
1152
+ */
1153
+ const SELECTION_NON_LAUNCHABLE_AGENTS = new Set(["cursor-agent"]);
1134
1154
  /**
1135
1155
  * Resolve the post-install launch decision from the selected host platforms and an
1136
1156
  * OPTIONAL explicit `--agent` override (BAPI-657). Pure and total:
1137
1157
  *
1138
1158
  * - An explicit `--agent` is an ABSOLUTE override (ratified AC-4): a valid explicit
1139
1159
  * agent always returns `spawn(agent)`, regardless of which tools were selected —
1140
- * the flag is honored even for a host outside the selection.
1160
+ * the flag is honored even for a host outside the selection, and it bypasses the
1161
+ * {@link SELECTION_NON_LAUNCHABLE_AGENTS} guard below.
1141
1162
  * - Otherwise the selection drives it: map each selected host through
1142
- * {@link agentForPlatform}, drop non-launchable hosts, dedup in registry order,
1143
- * then return `manual("empty-selection")` for an empty selection,
1144
- * `manual("no-launchable-agent")` for zero launchable agents, `spawn` for one, or
1145
- * `choose-one` for more than one.
1163
+ * {@link agentForPlatform}, drop hosts that are non-launchable OR excluded from
1164
+ * selection auto-spawn ({@link SELECTION_NON_LAUNCHABLE_AGENTS}, e.g. Cursor),
1165
+ * dedup in registry order, then return `manual("empty-selection")` for an empty
1166
+ * selection, `manual("no-launchable-agent")` for zero launchable agents, `spawn`
1167
+ * for one, or `choose-one` for more than one.
1146
1168
  *
1147
1169
  * Never prompts, logs, resolves an {@link AgentSpec}, or touches the filesystem.
1148
1170
  */
@@ -1158,8 +1180,9 @@ export function resolveInstallBridgeLaunchDecision(selectedPlatforms, explicitAg
1158
1180
  if (!selectedPlatforms.includes(id))
1159
1181
  continue;
1160
1182
  const agent = agentForPlatform(id);
1161
- if (agent && !agents.includes(agent))
1183
+ if (agent && !SELECTION_NON_LAUNCHABLE_AGENTS.has(agent) && !agents.includes(agent)) {
1162
1184
  agents.push(agent);
1185
+ }
1163
1186
  }
1164
1187
  if (agents.length === 0)
1165
1188
  return { kind: "manual", reason: "no-launchable-agent" };
@@ -1246,7 +1269,7 @@ export function buildManualInstallBridgeContinuation(kind, toolLabels) {
1246
1269
  const toolPhrase = formatToolLabelPhrase(toolLabels);
1247
1270
  return [
1248
1271
  `To finish configuring this project, open it in ${toolPhrase} that has the`,
1249
- "Bridge MCP server configured and run /install-bridge.",
1272
+ "Bridge MCP server configured, start a new session, and run /install-bridge.",
1250
1273
  "Until the project is configured, your Bridge MCP tools stay limited.",
1251
1274
  ].join("\n");
1252
1275
  }
@@ -17,6 +17,7 @@ import path from "path";
17
17
  import { resolveBapiCredentials, getPrimaryCredentialStorePath, } from "./credential-store.js";
18
18
  import { resolveStartTicketsRepoName } from "./start-tickets-repo.js";
19
19
  import { probeWorktreeMcpRegistration } from "./mcp-registration-doctor.js";
20
+ import { probeWorktreeCommandAssets } from "./command-assets-doctor.js";
20
21
  // ---------------------------------------------------------------------------
21
22
  // Constants (moved here from start-tickets.ts so both consumers share them)
22
23
  // ---------------------------------------------------------------------------
@@ -436,6 +437,49 @@ export function worktreeMcpReachabilityDescriptor() {
436
437
  },
437
438
  };
438
439
  }
440
+ /**
441
+ * Secret-free remediation hint shared by the worktree command-assets descriptor
442
+ * (BAPI-664). Directs users to rerun start-tickets — the supported provisioning
443
+ * workflow — rather than manually copying or committing the generated command
444
+ * files, which are fill-only, never refreshed, and Git-excluded per worktree.
445
+ */
446
+ const WORKTREE_COMMAND_ASSETS_HINT = "Re-run start-tickets to provision the packaged Claude command assets " +
447
+ "(.claude/commands/) into this worktree. Do not manually copy or commit the " +
448
+ "generated command files — they are bootstrapped per worktree and Git-excluded.";
449
+ const WORKTREE_COMMAND_ASSETS_INSTALL_HINTS = {
450
+ darwin: WORKTREE_COMMAND_ASSETS_HINT,
451
+ linux: WORKTREE_COMMAND_ASSETS_HINT,
452
+ win32: WORKTREE_COMMAND_ASSETS_HINT,
453
+ };
454
+ /**
455
+ * Doctor-only, strictly read-only probe: does the current worktree contain every
456
+ * packaged Claude slash-command asset under `.claude/commands/`? Delegates to the
457
+ * read-only {@link probeWorktreeCommandAssets} using only `deps.readFile`,
458
+ * `deps.platform`, and `deps.cwd`. Reports an unavailable diagnostic (never a
459
+ * false "present") when the optional read-only filesystem boundary is absent. The
460
+ * probe performs NO writes, Git calls, or process spawns.
461
+ */
462
+ export function worktreeCommandAssetsDescriptor() {
463
+ return {
464
+ id: "worktree-command-assets",
465
+ label: "Worktree Claude command assets",
466
+ installHint: WORKTREE_COMMAND_ASSETS_INSTALL_HINTS,
467
+ probe: async (deps) => {
468
+ const { readFile } = deps;
469
+ if (!readFile) {
470
+ return {
471
+ found: false,
472
+ detail: "command-asset probe unavailable (no read-only filesystem access)",
473
+ };
474
+ }
475
+ const result = await probeWorktreeCommandAssets(deps.cwd, {
476
+ readFile,
477
+ platform: deps.platform,
478
+ });
479
+ return { found: result.found, detail: result.detail };
480
+ },
481
+ };
482
+ }
439
483
  /**
440
484
  * Conservatively normalize a filesystem path for comparison: trim, drop a
441
485
  * trailing separator, and resolve `.`/`..` segments via `path.resolve`. Symlink
@@ -578,6 +622,7 @@ export function getDoctorOnlyPrereqDescriptors(_platform, _env, agent) {
578
622
  agentDescriptor(agent),
579
623
  credentialResolutionDescriptor(),
580
624
  worktreeMcpReachabilityDescriptor(),
625
+ worktreeCommandAssetsDescriptor(),
581
626
  astGrepDescriptor(),
582
627
  lizardDescriptor(),
583
628
  ripgrepDescriptor(),
@@ -61,6 +61,7 @@ import { VERSION } from "./version.generated.js";
61
61
  import { resolveBapiCredentials, getPrimaryCredentialStorePath, } from "./credential-store.js";
62
62
  import { resolveStartTicketsRepoName as resolveSharedStartTicketsRepoName, resolveRequiredStartTicketsRepoName, } from "./start-tickets-repo.js";
63
63
  import { provisionMcpRegistrationsForCreatedWorktrees, } from "./mcp-provisioning.js";
64
+ import { provisionCommandsForCreatedWorktrees, } from "./command-provisioning.js";
64
65
  import { resolveMcpShimInvocationForRuntime, buildMcpShimCommand, } from "./mcp-server-invocation.js";
65
66
  import { existsSync } from "node:fs";
66
67
  // Per-OS prerequisite knowledge + low-level command probes live in the shared
@@ -1851,6 +1852,24 @@ export function buildMcpProvisioningDeps(deps) {
1851
1852
  }),
1852
1853
  };
1853
1854
  }
1855
+ /**
1856
+ * Build the command-provisioning filesystem/command boundary from
1857
+ * `StartTicketsDeps` (BAPI-664). Mirrors {@link buildMcpProvisioningDeps}:
1858
+ * real UTF-8 `fs/promises` ops for reads/writes and a recursive `mkdir`, with the
1859
+ * platform, cwd, and list-based command runner inherited from the orchestration
1860
+ * deps (the runner is threaded to `ensureGitInfoExcluded` for linked-worktree
1861
+ * `info/exclude` resolution).
1862
+ */
1863
+ export function buildCommandProvisioningDeps(deps) {
1864
+ return {
1865
+ readFile: deps.readFile ?? ((filePath) => readFile(filePath, "utf-8")),
1866
+ writeFile: deps.writeFile ?? ((filePath, data) => writeFile(filePath, data, "utf-8")),
1867
+ mkdir: deps.mkdir ?? ((dirPath, options) => mkdir(dirPath, options)),
1868
+ runCommand: deps.runCommand,
1869
+ platform: deps.platform,
1870
+ cwd: deps.cwd,
1871
+ };
1872
+ }
1854
1873
  /**
1855
1874
  * Tier-3 file-credential materialization seam.
1856
1875
  *
@@ -2791,6 +2810,8 @@ export async function orchestrateStartTickets(deps, options, overrides = {}) {
2791
2810
  return { ok: false, error: refresh.error };
2792
2811
  }
2793
2812
  const createWorktreesFn = overrides.createWorktrees ?? createWorktrees;
2813
+ const provisionCommandsFn = overrides.provisionCommands ??
2814
+ ((rows, d) => provisionCommandsForCreatedWorktrees(rows, buildCommandProvisioningDeps(d)));
2794
2815
  const provisionFn = overrides.provisionMcpRegistrations ??
2795
2816
  ((rows, d) => provisionMcpRegistrationsForCreatedWorktrees(rows, buildMcpProvisioningDeps(d)));
2796
2817
  const materializeFn = overrides.materializeFileCredentials ?? materializeFileCredentialsForCreatedWorktrees;
@@ -2804,11 +2825,20 @@ export async function orchestrateStartTickets(deps, options, overrides = {}) {
2804
2825
  const created = options.resumeMode
2805
2826
  ? await resumeWorktreesFn(deps, options)
2806
2827
  : await createWorktreesFn(deps, options, platformConfig.config.worktrunkBinary, effectiveBaseStartPoint);
2828
+ // BAPI-664: bootstrap the packaged Claude command assets into each created OR
2829
+ // resumed worktree FIRST — before MCP registration, credential materialization,
2830
+ // conductor/model routing, or any terminal spawn — so no worker session can
2831
+ // launch without its slash commands. Both the normal-creation and resume-mode
2832
+ // rows pass through this stage; dry runs never reach here (they returned above).
2833
+ // A per-worktree command-bootstrap failure marks only that row `spawn-failed`,
2834
+ // so it is skipped by MCP provisioning and every later spawn step while its
2835
+ // siblings proceed; it never aborts the whole run.
2836
+ const commandProvisioned = await provisionCommandsFn(created, deps);
2807
2837
  // Synchronously provision secret-free worktree MCP registrations after
2808
- // worktree creation and before launching the agent tab. Per-worktree
2838
+ // command bootstrap and before launching the agent tab. Per-worktree
2809
2839
  // provisioning failures mark only that row `spawn-failed` (skipped by the
2810
2840
  // spawn step below) — they never abort the whole run.
2811
- const provisioned = await provisionFn(created, deps);
2841
+ const provisioned = await provisionFn(commandProvisioned, deps);
2812
2842
  // Materialize any Tier-3 file credentials AFTER MCP registration provisioning
2813
2843
  // and BEFORE tab spawning (currently a pass-through seam; see
2814
2844
  // materializeFileCredentialsForCreatedWorktrees).
@@ -1,2 +1,2 @@
1
1
  // AUTO-GENERATED — do not edit manually. Regenerate with: npm run build
2
- export const VERSION = "0.2.30";
2
+ export const VERSION = "0.2.31";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@bridge_gpt/mcp-server",
3
- "version": "0.2.30",
3
+ "version": "0.2.31",
4
4
  "description": "Bridge API MCP server — exposes Jira endpoints as MCP tools for Claude Code agents",
5
5
  "license": "MIT",
6
6
  "type": "module",
@@ -25,8 +25,8 @@
25
25
  "check:version-generated": "node scripts/bundle-version.js && node scripts/check-version-generated.js",
26
26
  "postbuild": "node scripts/prepend-shebang.cjs",
27
27
  "start": "node build/index.js",
28
- "test": "node --test --test-force-exit build/pipeline-utils.test.js build/backend-warnings.test.js build/update-check.test.js build/cli-upgrade.test.js build/decision-page-schema.test.js build/decision-page-template.test.js build/bundle-pipelines.test.js build/instructions-contract.test.js build/pipeline-orchestrator-persistence.test.js build/pipeline-orchestrator-execution.test.js build/pipeline-orchestrator-integration.test.js build/index-static.test.js build/config-fields.static.test.js build/request-brainstorm.static.test.js build/execute-plan-instructions.static.test.js build/index-resolvers.test.js build/index-project-root.test.js build/index-pipelines.test.js build/index.test.js build/bridge-config.test.js build/credential-store.test.js build/agent-config-credential-migration.test.js build/mcp-invoke.test.js build/mcp-provisioning.test.js build/mcp-server-invocation.test.js build/third-party-mcp-targets.test.js build/git-ignore-utils.test.js build/credential-materialization.test.js build/mcp-registration-doctor.test.js build/mcp-host-targets.test.js build/mcp-install-state.test.js build/mcp-host-config.test.js build/secret-safety.test.js build/base-ref.test.js build/pr-base-contract.test.js build/start-tickets.test.js build/review-tickets.test.js build/start-tickets-base-branch.test.js build/agent-registry.test.js build/agent-registry.model-routing.test.js build/start-tickets.shell-model-routing.test.js build/start-tickets.bridge-api-model-routing.test.js build/start-tickets.tier-fetch-model-routing.test.js build/start-tickets.resolve-model-routing.test.js build/start-tickets.orchestrate-model-routing.test.js build/start-tickets.routing-diagnostics.test.js build/start-tickets-repo.test.js build/start-tickets-credential-invariants.static.test.js build/credentials-cli.test.js build/start-tickets-prereqs.test.js build/regression-check.test.js build/doctor.test.js build/install-doctor.test.js build/install-bridge.test.js build/install-bridge-invite.test.js build/install-bridge-prompt.test.js build/install-bridge-tools.test.js build/install-bridge-join-static.test.js build/init.test.js build/init-docs.test.js build/resolveUploadAttachment.test.js build/package-static.test.js build/chain-utils.test.js build/chain-orchestrator.test.js build/scheduler-backends/types.test.js build/scheduler-backends/escaping.test.js build/scheduler-backends/launchd.test.js build/scheduler-backends/task-scheduler.test.js build/scheduler-backends/systemd-user.test.js build/scheduler-backends/at-fallback.test.js build/scheduler-backends/index.test.js build/command-catalog.test.js build/scheduled-prompt.test.js build/agent-launchers/claude.test.js build/agent-launchers/cursor.test.js build/agent-launchers/index.test.js build/schedule-store.test.js build/schedule-run.test.js build/setup-epic.test.js build/conductor-bundle-artifacts.test.js build/conductor-bundle-cli.test.js build/agent-capabilities/cli.test.js build/agent-capabilities/runner.test.js build/agent-capabilities/probes.test.js build/agent-capabilities/probe-context.test.js build/agent-capabilities/reporter.test.js build/conductor/taxonomy-and-errors.test.js build/conductor/github-mergeability.test.js build/conductor/merge-conflict-routing.test.js build/conductor/redaction-normalization.test.js build/conductor/claude-hook.test.js build/conductor/git-ci-types.test.js build/conductor/done-gate.test.js build/conductor/git-ci-taxonomy-payload.test.js build/conductor/bridge-api-client.test.js build/conductor/plan.test.js build/conductor/producer-ledger.test.js build/conductor/spec-review-producer.test.js build/conductor/git-producer.test.js build/conductor/git-hooks.test.js build/conductor/store-migration.test.js build/conductor/pr-discovery.test.js build/conductor/pr-ci-producer.test.js build/conductor/pr-review-producer.test.js build/conductor/doctor.test.js build/conductor/deny-enforcement-preflight.test.js build/conductor/errors.test.js build/conductor/store.test.js build/conductor/index-poll-ci-producer.test.js build/start-tickets-conductor.test.js build/start-tickets-conductor.spawn.test.js build/start-tickets-conductor-node-propagation.test.js build/start-tickets.non-mutating-base.test.js build/start-tickets-live-source-guard.test.js build/conductor/worker-ledger-cli.test.js build/conductor/supervisor-config.test.js build/conductor/supervisor-ledger.test.js build/conductor/supervisor-state-reducer.test.js build/conductor/supervisor-housekeeping-projection.test.js build/conductor/supervisor-escalation.test.js build/conductor/supervisor-retired-judgment.static.test.js build/conductor/supervisor-runtime.test.js build/conductor/supervisor-store-projection.test.js build/conductor/supervisor-cli.test.js build/conductor/supervisor-start-tickets.test.js build/conductor/supervisor-message-relay.test.js build/conductor/supervisor-state-message-events.test.js build/conductor/store-message-relay.test.js build/start-tickets-message-relay.test.js build/conductor/event-accessors.test.js build/conductor/merge-ledger.test.js build/conductor/deterministic-completion.static.test.js build/conductor/deterministic-completion.integration.test.js build/conductor/local-merge.test.js build/conductor/local-merge.static.test.js build/conductor/supervisor-merge.test.js build/conductor/bridge-api-merge-client.test.js build/conductor/bridge-api-epic-client.test.js build/conductor/supervisor-merge-runtime-state.test.js build/conductor/epic-state.test.js build/executor/claude-settings.test.js build/executor/cli.test.js build/executor/credentials.test.js build/executor/echo-acceptance.test.js build/executor/env.test.js build/executor/base-branch.test.js build/executor/heartbeat.test.js build/executor/http-client.test.js build/executor/job-runner.test.js build/executor/job-runner.payload-timeout.test.js build/executor/worker-finalization.test.js build/executor/job-runner.static.test.js build/executor/prompt-spec.test.js build/executor/job-types.test.js build/executor/recovery-job.static.test.js build/executor/observation.test.js build/executor/permissions.test.js build/executor/preflight.test.js build/executor/process.test.js build/executor/results.test.js build/executor/runner.test.js build/executor/terminal-mutation.test.js build/executor/worker-command.test.js build/executor/worktree-core.test.js build/executor/worktree.test.js build/executor/job-errors.test.js build/executor/worktree-inspection.test.js build/executor/resume-pre-spawn.test.js build/executor/verdict-artifact.test.js build/executor/worker-log.test.js build/executor/job-log-registry.test.js build/executor/viewer-tabs.test.js build/executor/watch-cli.test.js build/executor/merge-job.test.js build/executor/job-runner.merge.test.js build/executor/worktree-gc.test.js build/executor/runner.job-behaviors.test.js build/conductor/cli-freeze.test.js build/conductor/epic-reconcile.test.js build/conductor/epic-runtime.test.js build/conductor/epic-tick-sequence.test.js build/conductor/epic-runtime-post-action.test.js build/conductor/file-scope-guard.test.js build/conductor/file-scope-guard.integration.test.js build/mcp-profile.test.js build/mcp-profile-registration.test.js build/env-flags.test.js build/bridge-api-urls.test.js build/tool-surface-gating.test.js build/tools-budget.test.js build/visual-diff-worker.test.js build/visual-diff.test.js build/estimate-epic.test.js build/integration/measure-tools.test.js build/sfcc/config.test.js build/sfcc/ocapi-shape.test.js build/sfcc/output.test.js build/sfcc/credentials.test.js build/sfcc/ocapi-write-faults.test.js build/sfcc/write-guard.test.js build/sfcc/write-grants.test.js build/sfcc/write-result.test.js build/sfcc/writes.test.js build/sfcc/writes-system-object-payloads.test.js build/sfcc/writes-payloads.test.js build/sfcc/log-gate.test.js build/sfcc/log-query.test.js && node --experimental-test-module-mocks --test --test-force-exit build/index-heavy-read-truncation.test.js build/index-artifacts.test.js build/automation-progress.test.js build/recovery-formatting.test.js build/wait-for-result.test.js build/ticket-wait-recovery.test.js build/council-wait-recovery.test.js build/index.review-rounds.test.js build/index-brainstorm-filenames.test.js build/index-output-path.test.js build/index-generate-decision-page.test.js build/index-generate-decision-page.integration.test.js build/visual-diff.registration.test.js build/visual-diff.attachment-adapter.test.js build/attachment-download.test.js build/attachment-upload.test.js build/conductor/paths.test.js build/conductor/store-lifecycle.test.js build/conductor/store-queries.test.js build/conductor/tools.test.js build/conductor/cli.test.js build/conductor/security-regressions.test.js build/conductor/git-inspection.test.js build/conductor/tools-done-gate.test.js build/conductor/pr-ci-producer-emit-seam.test.js build/conductor/cli-git-hooks.test.js build/sfcc/client.test.js build/sfcc/tool-wrapper.test.js build/sfcc/setup-status.test.js build/sfcc/permissions.test.js build/sfcc/register.test.js build/sfcc/reads-system-object.test.js build/sfcc/reads-custom-object-def.test.js build/sfcc/reads-site-preference.test.js build/sfcc/writes-system-object.test.js build/sfcc/writes-custom-object-def.test.js build/sfcc/writes-site-preference.test.js build/connect-github.test.js build/connect-github-api.test.js",
29
- "test:integration": "node --test build/integration/refresh-main.integration.test.js build/integration/start-tickets.integration.test.js build/integration/start-tickets-tier-handoff.integration.test.js build/integration/doctor.integration.test.js build/integration/agent-capabilities.integration.test.js build/integration/conductor-producer.integration.test.js build/integration/conductor-message-relay.integration.test.js build/integration/executor-http-runner.integration.test.js build/integration/executor-job-behaviors.integration.test.js build/integration/executor-recovery-jobs.integration.test.js build/integration/executor-spec-review-prompt.integration.test.js build/integration/resume-pre-spawn.git.integration.test.js build/integration/worker-finalization-origin.integration.test.js build/integration/post-remediation-merge-ci-wait.integration.test.js build/integration/executor-merge-supervision.integration.test.js build/integration/attachment-binary-roundtrip.integration.test.js build/integration/dependent-ticket-fresh-base.integration.test.js build/integration/execute-plan-instructions.integration.test.js build/integration/conductor-bundle-artifacts.integration.test.js build/integration/install-bridge-repo-resolution.integration.test.js build/integration/capability-report-contract.integration.test.js build/integration/request-brainstorm-general.integration.test.js build/integration/request-council-trigger-drop.integration.test.js",
28
+ "test": "node --test --test-force-exit build/pipeline-utils.test.js build/backend-warnings.test.js build/update-check.test.js build/cli-upgrade.test.js build/decision-page-schema.test.js build/decision-page-template.test.js build/bundle-pipelines.test.js build/instructions-contract.test.js build/pipeline-orchestrator-persistence.test.js build/pipeline-orchestrator-execution.test.js build/pipeline-orchestrator-integration.test.js build/index-static.test.js build/config-fields.static.test.js build/request-brainstorm.static.test.js build/execute-plan-instructions.static.test.js build/index-resolvers.test.js build/index-project-root.test.js build/index-pipelines.test.js build/index.test.js build/bridge-config.test.js build/credential-store.test.js build/agent-config-credential-migration.test.js build/mcp-invoke.test.js build/mcp-provisioning.test.js build/mcp-server-invocation.test.js build/third-party-mcp-targets.test.js build/git-ignore-utils.test.js build/command-provisioning.test.js build/command-assets-doctor.test.js build/credential-materialization.test.js build/mcp-registration-doctor.test.js build/mcp-host-targets.test.js build/mcp-install-state.test.js build/mcp-host-config.test.js build/secret-safety.test.js build/base-ref.test.js build/pr-base-contract.test.js build/start-tickets.test.js build/review-tickets.test.js build/start-tickets-base-branch.test.js build/agent-registry.test.js build/agent-registry.model-routing.test.js build/start-tickets.shell-model-routing.test.js build/start-tickets.bridge-api-model-routing.test.js build/start-tickets.tier-fetch-model-routing.test.js build/start-tickets.resolve-model-routing.test.js build/start-tickets.orchestrate-model-routing.test.js build/start-tickets.routing-diagnostics.test.js build/start-tickets-repo.test.js build/start-tickets-credential-invariants.static.test.js build/credentials-cli.test.js build/start-tickets-prereqs.test.js build/regression-check.test.js build/doctor.test.js build/install-doctor.test.js build/install-bridge.test.js build/install-bridge-invite.test.js build/install-bridge-prompt.test.js build/install-bridge-tools.test.js build/install-bridge-join-static.test.js build/init.test.js build/init-docs.test.js build/resolveUploadAttachment.test.js build/package-static.test.js build/chain-utils.test.js build/chain-orchestrator.test.js build/scheduler-backends/types.test.js build/scheduler-backends/escaping.test.js build/scheduler-backends/launchd.test.js build/scheduler-backends/task-scheduler.test.js build/scheduler-backends/systemd-user.test.js build/scheduler-backends/at-fallback.test.js build/scheduler-backends/index.test.js build/command-catalog.test.js build/scheduled-prompt.test.js build/agent-launchers/claude.test.js build/agent-launchers/cursor.test.js build/agent-launchers/index.test.js build/schedule-store.test.js build/schedule-run.test.js build/setup-epic.test.js build/conductor-bundle-artifacts.test.js build/conductor-bundle-cli.test.js build/agent-capabilities/cli.test.js build/agent-capabilities/runner.test.js build/agent-capabilities/probes.test.js build/agent-capabilities/probe-context.test.js build/agent-capabilities/reporter.test.js build/conductor/taxonomy-and-errors.test.js build/conductor/github-mergeability.test.js build/conductor/merge-conflict-routing.test.js build/conductor/redaction-normalization.test.js build/conductor/claude-hook.test.js build/conductor/git-ci-types.test.js build/conductor/done-gate.test.js build/conductor/git-ci-taxonomy-payload.test.js build/conductor/bridge-api-client.test.js build/conductor/plan.test.js build/conductor/producer-ledger.test.js build/conductor/spec-review-producer.test.js build/conductor/git-producer.test.js build/conductor/git-hooks.test.js build/conductor/store-migration.test.js build/conductor/pr-discovery.test.js build/conductor/pr-ci-producer.test.js build/conductor/pr-review-producer.test.js build/conductor/doctor.test.js build/conductor/deny-enforcement-preflight.test.js build/conductor/errors.test.js build/conductor/store.test.js build/conductor/index-poll-ci-producer.test.js build/start-tickets-conductor.test.js build/start-tickets-conductor.spawn.test.js build/start-tickets-conductor-node-propagation.test.js build/start-tickets.non-mutating-base.test.js build/start-tickets-live-source-guard.test.js build/conductor/worker-ledger-cli.test.js build/conductor/supervisor-config.test.js build/conductor/supervisor-ledger.test.js build/conductor/supervisor-state-reducer.test.js build/conductor/supervisor-housekeeping-projection.test.js build/conductor/supervisor-escalation.test.js build/conductor/supervisor-retired-judgment.static.test.js build/conductor/supervisor-runtime.test.js build/conductor/supervisor-store-projection.test.js build/conductor/supervisor-cli.test.js build/conductor/supervisor-start-tickets.test.js build/conductor/supervisor-message-relay.test.js build/conductor/supervisor-state-message-events.test.js build/conductor/store-message-relay.test.js build/start-tickets-message-relay.test.js build/conductor/event-accessors.test.js build/conductor/merge-ledger.test.js build/conductor/deterministic-completion.static.test.js build/conductor/deterministic-completion.integration.test.js build/conductor/local-merge.test.js build/conductor/local-merge.static.test.js build/conductor/supervisor-merge.test.js build/conductor/bridge-api-merge-client.test.js build/conductor/bridge-api-epic-client.test.js build/conductor/supervisor-merge-runtime-state.test.js build/conductor/epic-state.test.js build/executor/claude-settings.test.js build/executor/cli.test.js build/executor/credentials.test.js build/executor/echo-acceptance.test.js build/executor/env.test.js build/executor/base-branch.test.js build/executor/heartbeat.test.js build/executor/http-client.test.js build/executor/job-runner.test.js build/executor/job-runner.payload-timeout.test.js build/executor/worker-finalization.test.js build/executor/job-runner.static.test.js build/executor/prompt-spec.test.js build/executor/job-types.test.js build/executor/recovery-job.static.test.js build/executor/observation.test.js build/executor/permissions.test.js build/executor/preflight.test.js build/executor/process.test.js build/executor/results.test.js build/executor/runner.test.js build/executor/terminal-mutation.test.js build/executor/worker-command.test.js build/executor/worktree-core.test.js build/executor/worktree.test.js build/executor/job-errors.test.js build/executor/worktree-inspection.test.js build/executor/resume-pre-spawn.test.js build/executor/verdict-artifact.test.js build/executor/worker-log.test.js build/executor/job-log-registry.test.js build/executor/viewer-tabs.test.js build/executor/watch-cli.test.js build/executor/merge-job.test.js build/executor/job-runner.merge.test.js build/executor/worktree-gc.test.js build/executor/runner.job-behaviors.test.js build/conductor/cli-freeze.test.js build/conductor/epic-reconcile.test.js build/conductor/epic-runtime.test.js build/conductor/epic-tick-sequence.test.js build/conductor/epic-runtime-post-action.test.js build/conductor/file-scope-guard.test.js build/conductor/file-scope-guard.integration.test.js build/mcp-profile.test.js build/mcp-profile-registration.test.js build/env-flags.test.js build/bridge-api-urls.test.js build/tool-surface-gating.test.js build/tools-budget.test.js build/visual-diff-worker.test.js build/visual-diff.test.js build/estimate-epic.test.js build/integration/measure-tools.test.js build/sfcc/config.test.js build/sfcc/ocapi-shape.test.js build/sfcc/output.test.js build/sfcc/credentials.test.js build/sfcc/ocapi-write-faults.test.js build/sfcc/write-guard.test.js build/sfcc/write-grants.test.js build/sfcc/write-result.test.js build/sfcc/writes.test.js build/sfcc/writes-system-object-payloads.test.js build/sfcc/writes-payloads.test.js build/sfcc/log-gate.test.js build/sfcc/log-query.test.js && node --experimental-test-module-mocks --test --test-force-exit build/index-heavy-read-truncation.test.js build/index-artifacts.test.js build/automation-progress.test.js build/recovery-formatting.test.js build/wait-for-result.test.js build/ticket-wait-recovery.test.js build/council-wait-recovery.test.js build/index.review-rounds.test.js build/index-brainstorm-filenames.test.js build/index-output-path.test.js build/index-generate-decision-page.test.js build/index-generate-decision-page.integration.test.js build/visual-diff.registration.test.js build/visual-diff.attachment-adapter.test.js build/attachment-download.test.js build/attachment-upload.test.js build/conductor/paths.test.js build/conductor/store-lifecycle.test.js build/conductor/store-queries.test.js build/conductor/tools.test.js build/conductor/cli.test.js build/conductor/security-regressions.test.js build/conductor/git-inspection.test.js build/conductor/tools-done-gate.test.js build/conductor/pr-ci-producer-emit-seam.test.js build/conductor/cli-git-hooks.test.js build/sfcc/client.test.js build/sfcc/tool-wrapper.test.js build/sfcc/setup-status.test.js build/sfcc/permissions.test.js build/sfcc/register.test.js build/sfcc/reads-system-object.test.js build/sfcc/reads-custom-object-def.test.js build/sfcc/reads-site-preference.test.js build/sfcc/writes-system-object.test.js build/sfcc/writes-custom-object-def.test.js build/sfcc/writes-site-preference.test.js build/connect-github.test.js build/connect-github-api.test.js",
29
+ "test:integration": "node --test build/integration/refresh-main.integration.test.js build/integration/command-provisioning.integration.test.js build/integration/start-tickets.integration.test.js build/integration/start-tickets-tier-handoff.integration.test.js build/integration/doctor.integration.test.js build/integration/agent-capabilities.integration.test.js build/integration/conductor-producer.integration.test.js build/integration/conductor-message-relay.integration.test.js build/integration/executor-http-runner.integration.test.js build/integration/executor-job-behaviors.integration.test.js build/integration/executor-recovery-jobs.integration.test.js build/integration/executor-spec-review-prompt.integration.test.js build/integration/resume-pre-spawn.git.integration.test.js build/integration/worker-finalization-origin.integration.test.js build/integration/post-remediation-merge-ci-wait.integration.test.js build/integration/executor-merge-supervision.integration.test.js build/integration/attachment-binary-roundtrip.integration.test.js build/integration/dependent-ticket-fresh-base.integration.test.js build/integration/execute-plan-instructions.integration.test.js build/integration/conductor-bundle-artifacts.integration.test.js build/integration/install-bridge-repo-resolution.integration.test.js build/integration/capability-report-contract.integration.test.js build/integration/request-brainstorm-general.integration.test.js build/integration/request-council-trigger-drop.integration.test.js",
30
30
  "test:smoke": "node --test build/integration/packaged-cli-smoke.test.js",
31
31
  "prepublishOnly": "node scripts/bundle-assets.js && npm run build && node scripts/verify-shebang.cjs"
32
32
  },