@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.
- package/README.md +140 -292
- package/build/agent-launchers/claude-executor-adapter.js +17 -4
- package/build/agents.generated.js +4 -4
- package/build/artifact-diff.js +110 -0
- package/build/bin-entrypoint.js +36 -0
- package/build/bridge-permissions.js +23 -4
- package/build/claude-review-workflow-drift.js +3 -3
- package/build/codex-bridge-profile.js +1 -1
- package/build/commands.generated.js +6 -6
- package/build/conductor/bridge-api-client.js +598 -19
- package/build/conductor/bring-up-facts.js +9 -9
- package/build/conductor/doctor.js +466 -18
- package/build/conductor/epic-child-continuation.js +54 -3
- package/build/conductor/epic-implementer-cli.js +132 -34
- package/build/conductor/epic-runtime.js +2 -2
- package/build/conductor/epic-state.js +1 -1
- package/build/conductor/hook-runtime-qualification.js +1 -1
- package/build/conductor/install-doctor.js +4 -2
- package/build/conductor/launch-need-probes.js +337 -0
- package/build/conductor/local-merge.js +241 -56
- package/build/conductor/merge-credential.js +172 -0
- package/build/conductor/merge-execution-eligibility.js +1 -1
- package/build/conductor/merged-child-check.js +95 -0
- package/build/conductor/plan-trim.js +30 -0
- package/build/conductor/pr-ci-producer.js +1 -1
- package/build/conductor/readiness-cli.js +11 -6
- package/build/conductor/readiness-prerequisites.js +41 -0
- package/build/conductor/readiness-sections.js +345 -55
- package/build/conductor/readiness.js +99 -87
- package/build/conductor/recovery-cli.js +606 -21
- package/build/conductor/recovery-operations.js +306 -7
- package/build/conductor/repair-contract.js +47 -2
- package/build/conductor/repository-workflow-remedy.js +8 -6
- package/build/conductor/stored-merge-credential.js +76 -0
- package/build/conductor/stored-merge-token-probe.js +28 -0
- package/build/conductor/temporary-plan.js +50 -0
- package/build/conductor/wait-run-cli.js +759 -0
- package/build/conductor/worker-database-doctor-inspector.js +49 -0
- package/build/conductor-bin.js +2 -2
- package/build/conductor-claude-hook-bin.js +2 -2
- package/build/conductor-claude-hook-removed-stub-bin.js +2 -5
- package/build/conductor-removed-stub-bin.js +2 -5
- package/build/credential-store.js +356 -13
- package/build/docs.generated.js +26 -13
- package/build/doctor.js +94 -32
- package/build/drive-epic-help.js +212 -0
- package/build/drive-epic.js +1840 -373
- package/build/epic-ci-workflow-drift.js +77 -0
- package/build/epic-ci-workflow-install.js +183 -0
- package/build/epic-ci-workflow.js +157 -0
- package/build/epic-contract-context.js +326 -0
- package/build/epic-implementer-bin.js +57 -41
- package/build/epic-implementer-claude-hook-bin.js +2 -2
- package/build/escalation-reachability.js +134 -0
- package/build/executor/cleanup-report.js +99 -0
- package/build/executor/cli.js +12 -1
- package/build/executor/completion-contract.js +66 -11
- package/build/executor/completion-supervision.js +99 -0
- package/build/executor/delivery-outcome.js +179 -0
- package/build/executor/deps.js +3 -0
- package/build/executor/env.js +71 -0
- package/build/executor/failure-reason-codes.js +126 -0
- package/build/executor/heartbeat.js +38 -0
- package/build/executor/http-client.js +72 -0
- package/build/executor/integration-job.js +298 -5
- package/build/executor/job-errors.js +36 -6
- package/build/executor/job-runner.js +720 -36
- package/build/executor/likely-tests.js +36 -2
- package/build/executor/merge-job.js +145 -2
- package/build/executor/observation.js +73 -4
- package/build/executor/permissions.js +193 -97
- package/build/executor/preflight.js +14 -3
- package/build/executor/process-containment.js +28 -2
- package/build/executor/prompt-spec.js +50 -5
- package/build/executor/rebase-finalization.js +38 -3
- package/build/executor/reconcile-overlap-job.js +35 -7
- package/build/executor/required-work-ledger.js +236 -81
- package/build/executor/resume-pre-spawn.js +38 -1
- package/build/executor/runner.js +91 -3
- package/build/executor/test-clock.js +8 -0
- package/build/executor/types.js +37 -2
- package/build/executor/worker-cli-launcher.js +259 -0
- package/build/executor/worker-command.js +41 -4
- package/build/executor/worker-database-target.js +91 -0
- package/build/executor/worker-database.js +908 -0
- package/build/executor/worker-finalization.js +106 -0
- package/build/executor/worker-guard-hook.js +203 -0
- package/build/executor/worker-resources.js +47 -0
- package/build/executor/worker-verification-guidance.js +15 -2
- package/build/executor/worktree.js +303 -15
- package/build/executor-launch.js +11 -1
- package/build/generated-assets-doctor.js +9 -1
- package/build/generated-assets-health.js +13 -4
- package/build/generated-assets-legacy.js +39 -0
- package/build/generated-assets-paths.js +12 -1
- package/build/generated-assets-repair.js +4 -1
- package/build/generated-assets-test-support.js +12 -0
- package/build/github-remote.js +33 -0
- package/build/github-sign-in.js +62 -0
- package/build/index.js +1067 -536
- package/build/init.js +39 -1
- package/build/install-bridge-conductor-gate.js +78 -0
- package/build/install-bridge-conductor-setup.js +413 -0
- package/build/install-bridge-conductor.js +1226 -267
- package/build/install-bridge.js +376 -60
- package/build/mcp-install-state.js +8 -2
- package/build/merge-pull-request.js +6 -0
- package/build/merge-workflow-install.js +763 -345
- package/build/phase-result-artifacts.js +75 -20
- package/build/pipeline-orchestrator.js +247 -4
- package/build/pipelines.generated.js +35 -35
- package/build/plan-discovery.js +15 -2
- package/build/plan-execution-ledger.js +306 -17
- package/build/plan-phase-routing.js +48 -13
- package/build/plane/cli.js +105 -51
- package/build/plane/defaults.js +3 -0
- package/build/plane/plane-freshness.js +294 -0
- package/build/plane/schema-compatibility.js +137 -0
- package/build/plane/shutdown-deps.js +38 -0
- package/build/plane/shutdown.js +83 -8
- package/build/plane/terminal-run-cleanup.js +303 -0
- package/build/printed-remedy-commands.js +26 -4
- package/build/readiness-check.js +6 -2
- package/build/readiness-prerequisites.generated.js +532 -0
- package/build/readme.generated.js +1 -1
- package/build/setup-epic.js +400 -30
- package/build/shared-resources.generated.js +5 -0
- package/build/start-tickets.js +28 -15
- package/build/test-command-detection.js +247 -0
- package/build/test-command-validation.js +73 -0
- package/build/testing-config-client.js +150 -0
- package/build/ticket-delivery-artifacts.js +258 -0
- package/build/ticket-delivery-enrollment.js +306 -0
- package/build/ticket-delivery.js +205 -0
- package/build/ticket-review-summary.js +14 -0
- package/build/upgrade-cli.js +13 -0
- package/build/v2-readiness-requirements.js +552 -0
- package/build/version.generated.js +3 -3
- package/build/worker-guard-hook-bin.js +2 -2
- package/build/worktree-core.js +22 -7
- package/docs/BRIDGE-DIRECTORY-README.md +48 -0
- package/docs/EPIC-IMPLEMENTER-INSTALL.md +12 -867
- package/docs/EPIC-IMPLEMENTER.md +104 -63
- package/docs/epic-implementer/getting-started.md +131 -0
- package/docs/epic-implementer/self-hosting.md +133 -0
- package/package.json +3 -3
- package/pipelines/idea-to-ticket.json +1 -1
- package/pipelines/implement-ticket.json +8 -8
- package/pipelines/review-ticket.json +2 -2
- package/design-assets/favicon/favicon-32x32.png +0 -0
- 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:
|
|
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
|
-
|
|
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
|
// ---------------------------------------------------------------------------
|