@bridge_gpt/mcp-server 0.2.58 → 0.2.60

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 (127) hide show
  1. package/README.md +231 -113
  2. package/build/agent-guidance.generated.js +1 -1
  3. package/build/agent-notes.js +7 -1
  4. package/build/agent-registry.js +15 -0
  5. package/build/agent-utils.js +16 -8
  6. package/build/claude-user-config-doctor.js +1 -35
  7. package/build/codex-bridge-profile.js +1 -1
  8. package/build/commands.generated.js +7 -8
  9. package/build/conductor/bridge-api-client.js +202 -2
  10. package/build/conductor/bring-up-facts.js +1 -1
  11. package/build/conductor/claude-hook.js +16 -16
  12. package/build/conductor/doctor.js +279 -72
  13. package/build/conductor/epic-implementer-cli.js +38 -5
  14. package/build/conductor/epic-reconcile.js +1 -1
  15. package/build/conductor/epic-runtime.js +21 -12
  16. package/build/conductor/errors.js +3 -3
  17. package/build/conductor/file-scope-guard.js +4 -4
  18. package/build/conductor/git-ci-types.js +1 -1
  19. package/build/conductor/git-inspection.js +2 -2
  20. package/build/conductor/install-doctor.js +28 -6
  21. package/build/conductor/local-merge.js +319 -26
  22. package/build/conductor/merge-execution-contract.js +61 -0
  23. package/build/conductor/merge-execution-eligibility.js +129 -0
  24. package/build/conductor/merge-ledger.js +2 -2
  25. package/build/conductor/pr-ci-producer.js +6 -6
  26. package/build/conductor/pr-review-producer.js +2 -2
  27. package/build/conductor/producer-ledger.js +2 -0
  28. package/build/conductor/readiness-sections.js +166 -9
  29. package/build/conductor/readiness.js +97 -16
  30. package/build/conductor/recovery-cli.js +243 -12
  31. package/build/conductor/recovery-operations.js +64 -6
  32. package/build/conductor/repair-contract.js +38 -4
  33. package/build/conductor/spec-review-producer.js +6 -6
  34. package/build/conductor/store.js +10 -10
  35. package/build/conductor/supervisor-config.js +14 -14
  36. package/build/conductor/supervisor-ledger.js +2 -2
  37. package/build/conductor/supervisor-message-relay.js +2 -2
  38. package/build/conductor/worker-ledger-cli.js +19 -19
  39. package/build/conductor-bundle-artifacts.js +2 -2
  40. package/build/connect-bitbucket-api.js +6 -1
  41. package/build/connect-bitbucket.js +398 -88
  42. package/build/credential-store.js +16 -0
  43. package/build/docs.generated.js +2 -2
  44. package/build/doctor.js +199 -303
  45. package/build/drive-epic.js +88 -71
  46. package/build/epic-implementer-bin.js +22 -17
  47. package/build/epic-implementer-claude-hook-bin.js +4 -2
  48. package/build/epic-implementer-env.js +184 -0
  49. package/build/epic-integration-pr.js +2 -2
  50. package/build/executor/ci-rerun-job.js +269 -0
  51. package/build/executor/cli.js +31 -0
  52. package/build/executor/credentials.js +11 -0
  53. package/build/executor/env.js +79 -8
  54. package/build/executor/heartbeat.js +1 -1
  55. package/build/executor/index.js +21 -4
  56. package/build/executor/job-errors.js +3 -3
  57. package/build/executor/job-runner.js +127 -1
  58. package/build/executor/job-types.js +12 -2
  59. package/build/executor/merge-job.js +46 -5
  60. package/build/executor/observation.js +1 -1
  61. package/build/executor/preflight.js +1 -1
  62. package/build/executor/prompt-spec.js +1 -1
  63. package/build/executor/reconcile-overlap-job.js +10 -130
  64. package/build/executor/reconcile-overlap-types.js +1 -1
  65. package/build/executor/runner.js +1 -1
  66. package/build/executor/service-lifecycle.js +136 -0
  67. package/build/executor/service-unit.js +427 -9
  68. package/build/executor/types.js +5 -0
  69. package/build/index.js +320 -342
  70. package/build/init.js +20 -28
  71. package/build/install-bridge-conductor.js +208 -15
  72. package/build/install-bridge.js +555 -37
  73. package/build/mcp-host-entry-adapter.js +6 -0
  74. package/build/mcp-host-targets.js +2 -0
  75. package/build/mcp-install-state.js +42 -4
  76. package/build/mcp-invoke.js +5 -5
  77. package/build/mcp-profile.js +2 -2
  78. package/build/mcp-provisioning.js +2 -2
  79. package/build/mcp-server-invocation.js +3 -3
  80. package/build/merge-pull-request.js +118 -10
  81. package/build/merge-workflow-codeowners.js +224 -0
  82. package/build/merge-workflow-config.js +133 -0
  83. package/build/merge-workflow-drift.js +66 -0
  84. package/build/merge-workflow-install.js +638 -0
  85. package/build/merge-workflow.js +572 -0
  86. package/build/model-routing-host.js +25 -0
  87. package/build/model-routing-preferences.js +99 -0
  88. package/build/pipelines.generated.js +10 -10
  89. package/build/{plan-epic-conductor-eligibility.js → plan-epic-implementer-eligibility.js} +18 -16
  90. package/build/plan-execution-ledger.js +8 -0
  91. package/build/plane/cli.js +24 -2
  92. package/build/plane/member-roster.js +5 -5
  93. package/build/plane/preflight.js +68 -0
  94. package/build/plane/supervisor.js +1 -1
  95. package/build/plane/types.js +5 -5
  96. package/build/readiness-check.js +1 -1
  97. package/build/readme.generated.js +1 -1
  98. package/build/review-tickets.js +4 -4
  99. package/build/run-unit-tests-launcher.js +5 -0
  100. package/build/setup-epic.js +171 -17
  101. package/build/start-tickets-conductor.js +32 -32
  102. package/build/start-tickets-prereqs.js +4 -9
  103. package/build/start-tickets.js +475 -91
  104. package/build/version.generated.js +3 -3
  105. package/docs/CONDUCTOR.md +69 -18
  106. package/docs/install/mcp-tool-integrations.md +2 -1
  107. package/package.json +4 -4
  108. package/pipelines/implement-ticket.json +1 -1
  109. package/pipelines/plan-epic.json +2 -2
  110. package/build/conduct-epic/bridge-client.js +0 -773
  111. package/build/conduct-epic/checkpoint-store.js +0 -542
  112. package/build/conduct-epic/cli.js +0 -3145
  113. package/build/conduct-epic/cut-protocol.js +0 -392
  114. package/build/conduct-epic/lock.js +0 -302
  115. package/build/conduct-epic/pr-state.js +0 -286
  116. package/build/conduct-epic/spawn.js +0 -113
  117. package/build/conductor/cli.js +0 -1278
  118. package/build/conductor-bundle-cli.js +0 -256
  119. package/build/direct-ticket-tools.js +0 -70
  120. package/build/executor/reconcile-overlap-governance.js +0 -129
  121. package/build/implement-epic/checkpoint-store.js +0 -542
  122. package/build/implement-epic/cli.js +0 -3158
  123. package/build/implement-epic/lock.js +0 -302
  124. package/build/implement-epic/pr-state.js +0 -286
  125. package/build/implement-epic/spawn.js +0 -113
  126. /package/build/{implement-epic → epic-shared}/bridge-client.js +0 -0
  127. /package/build/{implement-epic → epic-shared}/cut-protocol.js +0 -0
@@ -115,10 +115,18 @@ export function translateAgentToCopilot(frontmatter, body) {
115
115
  * command catalog.
116
116
  */
117
117
  function commandDescription(source, commandName) {
118
- const line = source
119
- .split(/\r?\n/)
120
- .map((candidate) => candidate.trim())
121
- .find((candidate) => candidate.length > 0 && candidate !== "$ARGUMENTS" && !candidate.startsWith("#"));
118
+ const lines = source.split(/\r?\n/).map((candidate) => candidate.trim());
119
+ // Some commands open with host-parsed YAML frontmatter; its delimiters and
120
+ // keys are metadata, not a summary, so drop the block before scanning.
121
+ if (lines[0] === "---") {
122
+ const close = lines.indexOf("---", 1);
123
+ if (close > 0)
124
+ lines.splice(0, close + 1);
125
+ }
126
+ const line = lines.find((candidate) => candidate.length > 0 &&
127
+ candidate !== "$ARGUMENTS" &&
128
+ !candidate.startsWith("#") &&
129
+ !/^[-*_\s]+$/.test(candidate));
122
130
  return line ?? `Run the Bridge ${commandName} workflow.`;
123
131
  }
124
132
  function commandBodyForPrompt(source) {
@@ -136,17 +144,17 @@ function commandBodyForSkill(source) {
136
144
  export function translateCommandToCopilot(filename, source) {
137
145
  const commandName = filename.replace(/\.md$/, "");
138
146
  const description = commandDescription(source, commandName);
147
+ // No `tools:` frontmatter: Bridge MCP tools reach Copilot through the
148
+ // generated `.vscode/mcp.json` registration, not a prompt-level restriction.
139
149
  const prompt = [
140
150
  "---",
141
151
  `description: ${quoteYamlValue(description)}`,
142
152
  "argument-hint: \"[task or ticket key]\"",
143
- "tools:",
144
- " - bridge/*",
145
153
  "---",
146
154
  "",
147
155
  `# Bridge ${commandName} workflow`,
148
156
  "",
149
- "The user input is available as `${input:task}`. Follow the canonical workflow below.",
157
+ "The workflow input is `${input:task}`. When text is supplied after the slash command, that text takes precedence; if neither contains input, ask the user for the task before continuing. Follow the canonical workflow below.",
150
158
  "",
151
159
  commandBodyForPrompt(source),
152
160
  ].join("\n");
@@ -160,7 +168,7 @@ export function translateCommandToCopilot(filename, source) {
160
168
  "",
161
169
  `# Bridge ${commandName} workflow`,
162
170
  "",
163
- "Use the text supplied after this slash command as the workflow input. Follow the canonical workflow below.",
171
+ "Use the text supplied after this slash command as the workflow input; if no text was supplied, ask the user for the task before continuing. Follow the canonical workflow below.",
164
172
  "",
165
173
  commandBodyForSkill(source),
166
174
  ].join("\n");
@@ -52,21 +52,6 @@ const CLAUDE_USER_CONFIG_FILENAME = ".claude.json";
52
52
  export function resolveClaudeUserConfigPath(homeDirectory, platform) {
53
53
  return pathApiForProvisioningPlatform(platform).join(homeDirectory, CLAUDE_USER_CONFIG_FILENAME);
54
54
  }
55
- /**
56
- * RETIRED (BAPI-790) — this override is now behaviorally inert.
57
- *
58
- * It used to downgrade a confirmed shadowing collision from a refusal to a loud
59
- * warning. There is no refusal left to downgrade: strict flag-scoped MCP loading
60
- * means an operator registration cannot shadow a worker, so the finding is always
61
- * advisory and setting this variable changes nothing.
62
- *
63
- * The constant is kept exported, and {@link isClaudeMcpShadowingOverrideEnabled}
64
- * with it, so an operator who still has it set in a service unit or shell profile
65
- * gets no error — and so the name stays greppable to whoever wonders why it stopped
66
- * mattering. Nothing in the policy consults it. Do not reintroduce a branch on it
67
- * without re-establishing that shadowing can affect a worker again.
68
- */
69
- export const CONDUCTOR_ALLOW_CLAUDE_MCP_SHADOWING_ENV = "BAPI_CONDUCTOR_ALLOW_CLAUDE_MCP_SHADOWING";
70
55
  /** A plain, non-array object. */
71
56
  function asRecord(value) {
72
57
  if (!value || typeof value !== "object" || Array.isArray(value))
@@ -262,27 +247,8 @@ export async function inspectClaudeUserConfigForMcpShadowing(input, deps) {
262
247
  return { findings, diagnostics };
263
248
  }
264
249
  // ---------------------------------------------------------------------------
265
- // Override + shared policy
250
+ // Shared policy
266
251
  // ---------------------------------------------------------------------------
267
- /** Documented truthy override values (trimmed, case-insensitive). */
268
- const OVERRIDE_TRUTHY = new Set(["1", "true", "yes", "on"]);
269
- /**
270
- * True only for a trimmed, case-insensitive `1`, `true`, `yes`, or `on`. Absent,
271
- * blank, `0`, `false`, `no`, `off`, and anything else are disabled.
272
- *
273
- * RETIRED (BAPI-790): no policy branches on this any more — see
274
- * {@link CONDUCTOR_ALLOW_CLAUDE_MCP_SHADOWING_ENV}. Retained as a pure predicate
275
- * so the parsing rule stays documented and testable rather than being deleted and
276
- * re-guessed if the override is ever revived.
277
- */
278
- export function isClaudeMcpShadowingOverrideEnabled(env) {
279
- const raw = env?.[CONDUCTOR_ALLOW_CLAUDE_MCP_SHADOWING_ENV];
280
- if (typeof raw !== "string")
281
- return false;
282
- return OVERRIDE_TRUTHY.has(raw.trim().toLowerCase());
283
- }
284
- /** The exact wording every override path emits, pinned by tests. */
285
- export const CLAUDE_MCP_SHADOWING_OVERRIDE_WARNING = `Proceeding anyway because ${CONDUCTOR_ALLOW_CLAUDE_MCP_SHADOWING_ENV} is set`;
286
252
  /** Human-readable scope labels (fixed strings, never derived from the config). */
287
253
  const SCOPE_LABELS = {
288
254
  user: "user scope (mcpServers)",
@@ -13,7 +13,7 @@ export const BRIDGE_WORKFLOW_TOOLS = [
13
13
  "ping", "get_ticket", "get_pipeline_recipe", "request_ticket_review",
14
14
  "wait_for_ticket_review", "fresh_base", "generate_decision_page",
15
15
  "capture_review_decisions", "request_plan_generation", "get_plan",
16
- "attachment",
16
+ "attachment", "publish_reviewed_attachment",
17
17
  "get_phase_context", "record_phase_result", "create_pull_request",
18
18
  "update_jira_status", "config_field", "resolve_ci_checks", "poll_ci_checks",
19
19
  "wait_for_ci_checks",