@bridge_gpt/mcp-server 0.2.69 → 0.2.70

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.
Files changed (151) hide show
  1. package/README.md +140 -292
  2. package/build/agent-launchers/claude-executor-adapter.js +17 -4
  3. package/build/agents.generated.js +4 -4
  4. package/build/artifact-diff.js +110 -0
  5. package/build/bin-entrypoint.js +36 -0
  6. package/build/bridge-permissions.js +23 -4
  7. package/build/claude-review-workflow-drift.js +3 -3
  8. package/build/codex-bridge-profile.js +1 -1
  9. package/build/commands.generated.js +6 -6
  10. package/build/conductor/bridge-api-client.js +598 -19
  11. package/build/conductor/bring-up-facts.js +9 -9
  12. package/build/conductor/doctor.js +466 -18
  13. package/build/conductor/epic-child-continuation.js +54 -3
  14. package/build/conductor/epic-implementer-cli.js +132 -34
  15. package/build/conductor/epic-runtime.js +2 -2
  16. package/build/conductor/epic-state.js +1 -1
  17. package/build/conductor/hook-runtime-qualification.js +1 -1
  18. package/build/conductor/install-doctor.js +4 -2
  19. package/build/conductor/launch-need-probes.js +337 -0
  20. package/build/conductor/local-merge.js +241 -56
  21. package/build/conductor/merge-credential.js +172 -0
  22. package/build/conductor/merge-execution-eligibility.js +1 -1
  23. package/build/conductor/merged-child-check.js +95 -0
  24. package/build/conductor/plan-trim.js +30 -0
  25. package/build/conductor/pr-ci-producer.js +1 -1
  26. package/build/conductor/readiness-cli.js +11 -6
  27. package/build/conductor/readiness-prerequisites.js +41 -0
  28. package/build/conductor/readiness-sections.js +345 -55
  29. package/build/conductor/readiness.js +99 -87
  30. package/build/conductor/recovery-cli.js +606 -21
  31. package/build/conductor/recovery-operations.js +306 -7
  32. package/build/conductor/repair-contract.js +47 -2
  33. package/build/conductor/repository-workflow-remedy.js +8 -6
  34. package/build/conductor/stored-merge-credential.js +76 -0
  35. package/build/conductor/stored-merge-token-probe.js +28 -0
  36. package/build/conductor/temporary-plan.js +50 -0
  37. package/build/conductor/wait-run-cli.js +759 -0
  38. package/build/conductor/worker-database-doctor-inspector.js +49 -0
  39. package/build/conductor-bin.js +2 -2
  40. package/build/conductor-claude-hook-bin.js +2 -2
  41. package/build/conductor-claude-hook-removed-stub-bin.js +2 -5
  42. package/build/conductor-removed-stub-bin.js +2 -5
  43. package/build/credential-store.js +356 -13
  44. package/build/docs.generated.js +26 -13
  45. package/build/doctor.js +94 -32
  46. package/build/drive-epic-help.js +212 -0
  47. package/build/drive-epic.js +1840 -373
  48. package/build/epic-ci-workflow-drift.js +77 -0
  49. package/build/epic-ci-workflow-install.js +183 -0
  50. package/build/epic-ci-workflow.js +157 -0
  51. package/build/epic-contract-context.js +326 -0
  52. package/build/epic-implementer-bin.js +57 -41
  53. package/build/epic-implementer-claude-hook-bin.js +2 -2
  54. package/build/escalation-reachability.js +134 -0
  55. package/build/executor/cleanup-report.js +99 -0
  56. package/build/executor/cli.js +12 -1
  57. package/build/executor/completion-contract.js +66 -11
  58. package/build/executor/completion-supervision.js +99 -0
  59. package/build/executor/delivery-outcome.js +179 -0
  60. package/build/executor/deps.js +3 -0
  61. package/build/executor/env.js +71 -0
  62. package/build/executor/failure-reason-codes.js +126 -0
  63. package/build/executor/heartbeat.js +38 -0
  64. package/build/executor/http-client.js +72 -0
  65. package/build/executor/integration-job.js +298 -5
  66. package/build/executor/job-errors.js +36 -6
  67. package/build/executor/job-runner.js +720 -36
  68. package/build/executor/likely-tests.js +36 -2
  69. package/build/executor/merge-job.js +145 -2
  70. package/build/executor/observation.js +73 -4
  71. package/build/executor/permissions.js +193 -97
  72. package/build/executor/preflight.js +14 -3
  73. package/build/executor/process-containment.js +28 -2
  74. package/build/executor/prompt-spec.js +50 -5
  75. package/build/executor/rebase-finalization.js +38 -3
  76. package/build/executor/reconcile-overlap-job.js +35 -7
  77. package/build/executor/required-work-ledger.js +236 -81
  78. package/build/executor/resume-pre-spawn.js +38 -1
  79. package/build/executor/runner.js +91 -3
  80. package/build/executor/test-clock.js +8 -0
  81. package/build/executor/types.js +37 -2
  82. package/build/executor/worker-cli-launcher.js +259 -0
  83. package/build/executor/worker-command.js +41 -4
  84. package/build/executor/worker-database-target.js +91 -0
  85. package/build/executor/worker-database.js +908 -0
  86. package/build/executor/worker-finalization.js +106 -0
  87. package/build/executor/worker-guard-hook.js +203 -0
  88. package/build/executor/worker-resources.js +47 -0
  89. package/build/executor/worker-verification-guidance.js +15 -2
  90. package/build/executor/worktree.js +303 -15
  91. package/build/executor-launch.js +11 -1
  92. package/build/generated-assets-doctor.js +9 -1
  93. package/build/generated-assets-health.js +13 -4
  94. package/build/generated-assets-legacy.js +39 -0
  95. package/build/generated-assets-paths.js +12 -1
  96. package/build/generated-assets-repair.js +4 -1
  97. package/build/generated-assets-test-support.js +12 -0
  98. package/build/github-remote.js +33 -0
  99. package/build/github-sign-in.js +62 -0
  100. package/build/index.js +1067 -536
  101. package/build/init.js +39 -1
  102. package/build/install-bridge-conductor-gate.js +78 -0
  103. package/build/install-bridge-conductor-setup.js +413 -0
  104. package/build/install-bridge-conductor.js +1226 -267
  105. package/build/install-bridge.js +376 -60
  106. package/build/mcp-install-state.js +8 -2
  107. package/build/merge-pull-request.js +6 -0
  108. package/build/merge-workflow-install.js +763 -345
  109. package/build/phase-result-artifacts.js +75 -20
  110. package/build/pipeline-orchestrator.js +247 -4
  111. package/build/pipelines.generated.js +35 -35
  112. package/build/plan-discovery.js +15 -2
  113. package/build/plan-execution-ledger.js +306 -17
  114. package/build/plan-phase-routing.js +48 -13
  115. package/build/plane/cli.js +105 -51
  116. package/build/plane/defaults.js +3 -0
  117. package/build/plane/plane-freshness.js +294 -0
  118. package/build/plane/schema-compatibility.js +137 -0
  119. package/build/plane/shutdown-deps.js +38 -0
  120. package/build/plane/shutdown.js +83 -8
  121. package/build/plane/terminal-run-cleanup.js +303 -0
  122. package/build/printed-remedy-commands.js +26 -4
  123. package/build/readiness-check.js +6 -2
  124. package/build/readiness-prerequisites.generated.js +532 -0
  125. package/build/readme.generated.js +1 -1
  126. package/build/setup-epic.js +400 -30
  127. package/build/shared-resources.generated.js +5 -0
  128. package/build/start-tickets.js +28 -15
  129. package/build/test-command-detection.js +247 -0
  130. package/build/test-command-validation.js +73 -0
  131. package/build/testing-config-client.js +150 -0
  132. package/build/ticket-delivery-artifacts.js +258 -0
  133. package/build/ticket-delivery-enrollment.js +306 -0
  134. package/build/ticket-delivery.js +205 -0
  135. package/build/ticket-review-summary.js +14 -0
  136. package/build/upgrade-cli.js +13 -0
  137. package/build/v2-readiness-requirements.js +552 -0
  138. package/build/version.generated.js +3 -3
  139. package/build/worker-guard-hook-bin.js +2 -2
  140. package/build/worktree-core.js +22 -7
  141. package/docs/BRIDGE-DIRECTORY-README.md +48 -0
  142. package/docs/EPIC-IMPLEMENTER-INSTALL.md +12 -867
  143. package/docs/EPIC-IMPLEMENTER.md +104 -63
  144. package/docs/epic-implementer/getting-started.md +131 -0
  145. package/docs/epic-implementer/self-hosting.md +133 -0
  146. package/package.json +3 -3
  147. package/pipelines/idea-to-ticket.json +1 -1
  148. package/pipelines/implement-ticket.json +8 -8
  149. package/pipelines/review-ticket.json +2 -2
  150. package/design-assets/favicon/favicon-32x32.png +0 -0
  151. package/design-assets/just-logo-rough-draft.png +0 -0
@@ -40,6 +40,7 @@ import { guardedFastForwardPush, PUSH_AUTH_FAILURE_RE } from "./guarded-fast-for
40
40
  * refuses the push is reported as `ReconcileOverlapPushUnauthorized`.
41
41
  */
42
42
  import path from "node:path";
43
+ import { readRequiredVerification } from "./completion-supervision.js";
43
44
  import { normalizeRepoRelativePath } from "../conductor/file-scope-guard.js";
44
45
  // BAPI-1311: the read-only poller and predicates moved to `provider-checks.ts` so
45
46
  // the focused rebase wait shares them; re-exported here for existing importers.
@@ -169,16 +170,24 @@ function verificationCommands(value, field) {
169
170
  return { name: name.slice(0, RECONCILE_CHECK_NAME_MAX_CHARS), argv: argv, timeoutSeconds: timeout };
170
171
  });
171
172
  }
172
- function ticketContext(value, field) {
173
+ function ticketContext(value, field, policyVersion = false) {
173
174
  const entry = asRecord(value, field);
174
175
  const ticketKey = typeof entry.ticket_key === "string" ? entry.ticket_key.trim() : "";
175
176
  if (!ticketKey)
176
177
  throw new PayloadError(`${field}.ticket_key is missing or blank`);
178
+ const required = readRequiredVerification(entry);
179
+ if (policyVersion && (required.kind !== "ok" || required.declaration.policyVersion !== 2))
180
+ throw new PayloadError(`${field}.required_verification is invalid`);
181
+ if (!policyVersion && required.kind !== "none")
182
+ throw new PayloadError(`${field}.required_verification requires schema 2`);
183
+ if (policyVersion && entry.required_verification.ticket_key !== ticketKey)
184
+ throw new PayloadError(`${field}.coverage ticket mismatch`);
177
185
  return {
178
186
  ticketKey,
179
187
  changedFiles: pathList(entry.changed_files, `${field}.changed_files`, MAX_CHANGED_FILES),
180
188
  declaredTouchedFiles: pathList(entry.declared_touched_files ?? [], `${field}.declared_touched_files`, MAX_CHANGED_FILES),
181
189
  verificationCommands: verificationCommands(entry.verification_commands, `${field}.verification_commands`),
190
+ ...(required.kind === "ok" ? { requiredVerification: required.declaration } : {}),
182
191
  };
183
192
  }
184
193
  /**
@@ -188,7 +197,7 @@ function ticketContext(value, field) {
188
197
  export function validateReconcileOverlapPayload(job) {
189
198
  try {
190
199
  const payload = asRecord(job.payload, "payload");
191
- if (payload.schema_version !== RECONCILE_OVERLAP_PAYLOAD_SCHEMA_VERSION) {
200
+ if (payload.schema_version !== RECONCILE_OVERLAP_PAYLOAD_SCHEMA_VERSION && payload.schema_version !== 2) {
192
201
  throw new PayloadError(`payload.schema_version must be ${RECONCILE_OVERLAP_PAYLOAD_SCHEMA_VERSION}`);
193
202
  }
194
203
  const childHead = requiredSha(payload.child_head, "payload.child_head");
@@ -207,8 +216,15 @@ export function validateReconcileOverlapPayload(job) {
207
216
  const requiredChecks = requiredChecksRaw
208
217
  .filter((c) => typeof c === "string" && c.trim().length > 0)
209
218
  .map((c) => c.trim());
210
- const child = ticketContext(payload.child, "payload.child");
211
- const peer = payload.peer === null || payload.peer === undefined ? null : ticketContext(payload.peer, "payload.peer");
219
+ const child = ticketContext(payload.child, "payload.child", payload.schema_version === 2);
220
+ const peer = payload.peer === null || payload.peer === undefined ? null : ticketContext(payload.peer, "payload.peer", payload.schema_version === 2);
221
+ verificationCommandUnion(child, peer); // reject conflicting typed metadata before any effects
222
+ if (payload.schema_version === 2) {
223
+ const covering = [...new Set([child, ...(peer ? [peer] : [])].flatMap(s => s.requiredVerification?.obligations?.filter(o => o.classification === "ci_deferred").flatMap(o => o.covering_checks) ?? []))].sort();
224
+ if (!Array.isArray(payload.approved_covering_checks) || JSON.stringify(payload.approved_covering_checks) !== JSON.stringify(covering) || covering.length > 64 ||
225
+ !covering.every(c => requiredChecks.includes(c)) || requiredChecks.length !== requiredChecksRaw.length)
226
+ throw new PayloadError("approved covering check union is inconsistent");
227
+ }
212
228
  // BAPI-1215 — `payload.governance` is retired. A server that predates the
213
229
  // retirement still sends it: it is accepted when present and never read, so
214
230
  // this executor consumes both payload shapes at schema version 1.
@@ -227,7 +243,7 @@ export function validateReconcileOverlapPayload(job) {
227
243
  return {
228
244
  ok: true,
229
245
  value: {
230
- schemaVersion: RECONCILE_OVERLAP_PAYLOAD_SCHEMA_VERSION,
246
+ schemaVersion: payload.schema_version,
231
247
  childHead,
232
248
  requiredEpicSha,
233
249
  epicBranch,
@@ -277,10 +293,16 @@ const OVERLAP_CONCLUSIONS = {
277
293
  export function verificationCommandUnion(child, peer) {
278
294
  const seen = new Set();
279
295
  const out = [];
280
- for (const command of [...child.verificationCommands, ...(peer?.verificationCommands ?? [])]) {
296
+ const commands = (side) => side.requiredVerification
297
+ ? side.requiredVerification.checks.map(c => ({ name: `${side.ticketKey}:${c.identity}`, originalName: c.name, argv: c.argv, timeoutSeconds: c.timeoutSeconds })) : side.verificationCommands;
298
+ for (const command of [...commands(child), ...(peer ? commands(peer) : [])]) {
281
299
  const key = JSON.stringify(command.argv);
282
- if (seen.has(key))
300
+ if (seen.has(key)) {
301
+ const previous = out.find(c => JSON.stringify(c.argv) === key);
302
+ if ((child.requiredVerification || peer?.requiredVerification) && (previous?.timeoutSeconds !== command.timeoutSeconds || previous?.originalName !== command.originalName))
303
+ throw new PayloadError("conflicting local command metadata");
283
304
  continue;
305
+ }
284
306
  seen.add(key);
285
307
  out.push(command);
286
308
  }
@@ -310,6 +332,12 @@ export function buildReconcileEnvelope(payload, facts, extra = {}) {
310
332
  if (value !== undefined)
311
333
  envelope[key] = value;
312
334
  }
335
+ if (payload.schemaVersion === 2 && payload.child) {
336
+ const sides = [payload.child, ...(payload.peer ? [payload.peer] : [])];
337
+ envelope.verification_policy = { version: 2, declaration_digests: sides.map(s => s.requiredVerification.digest),
338
+ deferred_obligation_identities: sides.flatMap(s => s.requiredVerification.deferredIdentities ?? []),
339
+ tested_head_sha: extra.resulting_head ?? null };
340
+ }
313
341
  return envelope;
314
342
  }
315
343
  // ---------------------------------------------------------------------------