@bridge_gpt/mcp-server 0.2.67 → 0.2.69
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 +272 -51
- package/build/agent-launchers/claude-executor-adapter.js +27 -0
- package/build/agents.generated.js +22 -2
- package/build/bitbucket-workspace-remote.js +136 -0
- package/build/bootstrap-project-identity.js +24 -0
- package/build/bridge-permissions.js +1362 -0
- package/build/check-update-cli.js +74 -0
- package/build/claude-settings.js +102 -2
- package/build/cli-help.js +27 -0
- package/build/codex-home.js +9 -1
- package/build/codex-launcher-pin.js +598 -0
- package/build/command-assets-doctor.js +24 -70
- package/build/command-provisioning.js +29 -5
- package/build/commands.generated.js +9 -9
- package/build/conductor/bridge-api-client.js +714 -0
- package/build/conductor/command-drift-production.js +92 -0
- package/build/conductor/command-drift.js +89 -0
- package/build/conductor/doctor.js +69 -26
- package/build/conductor/epic-branch-ci-inspection.js +1375 -0
- package/build/conductor/epic-implementer-cli.js +76 -22
- package/build/conductor/gate-discovery.js +890 -0
- package/build/conductor/install-doctor.js +15 -3
- package/build/conductor/json-output.js +63 -0
- package/build/conductor/readiness-cli.js +95 -10
- package/build/conductor/readiness-sections.js +369 -3
- package/build/conductor/readiness.js +211 -8
- package/build/conductor/recovery-cli.js +110 -4
- package/build/conductor/recovery-operations.js +99 -1
- package/build/connect-bitbucket-api.js +41 -6
- package/build/connect-bitbucket.js +106 -33
- package/build/connect-github-api.js +33 -14
- package/build/credential-store.js +207 -47
- package/build/docs.generated.js +57 -3
- package/build/doctor.js +198 -4
- package/build/drive-epic.js +45 -8
- package/build/epic-coherence-input.test-fixtures.js +4 -3
- package/build/epic-implementer-bin.js +1369 -25
- package/build/epic-workarounds-path.js +39 -0
- package/build/executor/cli.js +30 -0
- package/build/executor/completion-contract.js +20 -5
- package/build/executor/deps.js +4 -1
- package/build/executor/gate-qualification-job.js +499 -0
- package/build/executor/guarded-fast-forward-push.js +129 -0
- package/build/executor/http-client.js +43 -4
- package/build/executor/integration-job.js +122 -8
- package/build/executor/job-errors.js +8 -1
- package/build/executor/job-runner.js +589 -47
- package/build/executor/likely-tests.js +290 -0
- package/build/executor/live-worker-registry.js +1 -1
- package/build/executor/observation.js +31 -2
- package/build/executor/packaged-recipe.js +106 -0
- package/build/executor/permissions.js +115 -28
- package/build/executor/platform.js +1 -1
- package/build/executor/preflight.js +61 -12
- package/build/executor/process-containment.js +36 -12
- package/build/executor/process.js +15 -7
- package/build/executor/prompt-spec.js +33 -1
- package/build/executor/recently-failed-tests-file.js +71 -0
- package/build/executor/reconcile-overlap-job.js +41 -23
- package/build/executor/required-verification.js +1 -1
- package/build/executor/required-work-ledger.js +105 -17
- package/build/executor/retirement.js +69 -0
- package/build/executor/runner.js +114 -11
- package/build/executor/test-clock.js +15 -0
- package/build/executor/types.js +32 -0
- package/build/executor/viewer-tabs.js +58 -8
- package/build/executor/worker-command.js +23 -7
- package/build/executor/worker-diagnostics.js +37 -0
- package/build/executor/worker-finalization.js +31 -5
- package/build/executor/worker-guard-hook.js +179 -25
- package/build/executor/worker-log.js +4 -3
- package/build/executor/worker-verification-guidance.js +37 -0
- package/build/executor/worktree.js +88 -11
- package/build/first-build-advisory.js +97 -0
- package/build/generated-assets-advisory.js +14 -0
- package/build/generated-assets-catalog.js +66 -0
- package/build/generated-assets-context.js +46 -0
- package/build/generated-assets-dependencies.js +26 -0
- package/build/generated-assets-doctor.js +50 -0
- package/build/generated-assets-health.js +65 -0
- package/build/generated-assets-host.js +17 -0
- package/build/generated-assets-inventory.js +17 -0
- package/build/generated-assets-paths.js +60 -0
- package/build/generated-assets-publisher.js +133 -0
- package/build/generated-assets-remedy.js +25 -0
- package/build/generated-assets-repair.js +72 -0
- package/build/generated-assets-session.js +71 -0
- package/build/generated-assets-test-support.js +35 -0
- package/build/index.js +1109 -695
- package/build/init.js +54 -177
- package/build/install-bridge-conductor-gate.js +1372 -0
- package/build/install-bridge-conductor.js +289 -36
- package/build/install-bridge.js +722 -252
- package/build/launcher-config-inspection.js +184 -19
- package/build/mcp-host-targets.js +4 -0
- package/build/mcp-identity.js +7 -0
- package/build/mcp-install-state.js +50 -4
- package/build/merge-workflow-install.js +3 -4
- package/build/pipeline-utils.js +6 -2
- package/build/pipelines.generated.js +22 -142
- package/build/plan-execution-ledger.js +2 -32
- package/build/plane/manifest.js +16 -1
- package/build/plane/preflight.js +54 -1
- package/build/printed-remedy-commands.js +16 -1
- package/build/readme.generated.js +1 -1
- package/build/repair-assets.js +93 -0
- package/build/run-unit-tests-launcher.js +130 -49
- package/build/secret-redaction.js +33 -0
- package/build/session-upgrade-notice.js +86 -0
- package/build/setup-epic.js +108 -3
- package/build/start-tickets-prereqs.js +70 -16
- package/build/start-tickets.js +44 -5
- package/build/tool-call-advisory.js +162 -0
- package/build/tool-surface-gating.js +32 -57
- package/build/update-check.js +97 -16
- package/build/update-status.js +61 -71
- package/build/upgrade-advice.js +15 -11
- package/build/upgrade-cli.js +398 -17
- package/build/version.generated.js +3 -3
- package/build/worker-guard-hook-bin.js +3 -2
- package/build/worker-guard-hook-main.js +1 -1
- package/build/worktree-core.js +15 -2
- package/docs/EPIC-IMPLEMENTER-INSTALL.md +30 -12
- package/docs/EPIC-IMPLEMENTER.md +68 -2
- package/package.json +3 -3
- package/pipelines/greenfield-setup.json +4 -128
- package/pipelines/implement-ticket.json +3 -2
package/README.md
CHANGED
|
@@ -10,16 +10,35 @@ From your **project root**, run:
|
|
|
10
10
|
npx -y @bridge_gpt/mcp-server install
|
|
11
11
|
```
|
|
12
12
|
|
|
13
|
-
That
|
|
14
|
-
account — it will ask.
|
|
13
|
+
That command starts guided setup. It works whether or not you already have a Bridge
|
|
14
|
+
account — it will ask; follow the remaining onboarding instructions afterward.
|
|
15
|
+
|
|
16
|
+
### Already ran `npm i @bridge_gpt/mcp-server`?
|
|
17
|
+
|
|
18
|
+
> The package and its executable aliases are installed, but your intended project
|
|
19
|
+
> and MCP host still need setup. From your intended project root, run:
|
|
20
|
+
>
|
|
21
|
+
> ```bash
|
|
22
|
+
> npx -y @bridge_gpt/mcp-server install
|
|
23
|
+
> ```
|
|
24
|
+
>
|
|
25
|
+
> You do not need to uninstall the package first. [Continue with the step-by-step
|
|
26
|
+
> setup instructions](#installing-step-by-step) for sign-in, host selection,
|
|
27
|
+
> reload/trust, and agent handoff.
|
|
28
|
+
|
|
29
|
+
> Package installation is passive: Bridge cannot detect or notify someone who only
|
|
30
|
+
> installs the package and does nothing else. Successful lifecycle output is not a
|
|
31
|
+
> reliable default-install notification because `foreground-scripts` normally
|
|
32
|
+
> defaults to false, and `ignore-scripts` can disable hooks entirely.
|
|
15
33
|
|
|
16
34
|
> We recommend **the command above** instead of the `npm i @bridge_gpt/mcp-server`
|
|
17
35
|
> one in npm's sidebar, because it **will make set up much easier**.
|
|
18
36
|
|
|
19
37
|
**What it will do**
|
|
20
38
|
|
|
21
|
-
- **
|
|
22
|
-
use Bridge's tools and slash commands on
|
|
39
|
+
- **Starts guided Bridge MCP setup** — after completing the remaining onboarding
|
|
40
|
+
instructions, your editor's agent can use Bridge's tools and slash commands on
|
|
41
|
+
this project.
|
|
23
42
|
- Registers a `bridge` MCP server in your editor's MCP config, leaving any
|
|
24
43
|
other servers you have configured untouched.
|
|
25
44
|
- Creates and updates the files it needs inside your project root: slash commands
|
|
@@ -84,27 +103,41 @@ you run it in your home directory, your editor will not find any of it.
|
|
|
84
103
|
npx -y @bridge_gpt/mcp-server install
|
|
85
104
|
```
|
|
86
105
|
|
|
87
|
-
**3. Answer the sign-in question.** On a first run it asks
|
|
88
|
-
a token:
|
|
106
|
+
**3. Answer the sign-in question.** On a first run it asks one question:
|
|
89
107
|
|
|
90
108
|
```
|
|
91
|
-
|
|
92
|
-
2. I already have a token
|
|
109
|
+
Email (or press Enter if you already have a token):
|
|
93
110
|
```
|
|
94
111
|
|
|
95
|
-
-
|
|
96
|
-
|
|
97
|
-
|
|
112
|
+
- Type your **email address** if you have nothing yet. The installer first shows
|
|
113
|
+
how your email is used, then sends you a verification code. Your new Bridge
|
|
114
|
+
project is named after your folder, with no question asked unless the folder
|
|
115
|
+
name cannot be used. Rename it later on the Setup page.
|
|
116
|
+
- Press **Enter** if someone gave you a token — either a Bridge API key or an invite
|
|
98
117
|
code. Paste it at the hidden prompt; you do not have to say which kind it is,
|
|
99
118
|
because the installer recognizes it. Nothing is echoed as you type.
|
|
100
119
|
|
|
101
|
-
|
|
102
|
-
|
|
120
|
+
One mistyped answer gets a hint and a second try. If you would rather not be
|
|
121
|
+
asked, pass the answer up front instead — see
|
|
103
122
|
[Choosing how you sign in](#choosing-how-you-sign-in).
|
|
104
123
|
|
|
105
|
-
**4.
|
|
106
|
-
machine and
|
|
107
|
-
|
|
124
|
+
**4. Confirm which editors to configure.** The installer detects the MCP hosts on
|
|
125
|
+
your machine and ticks them for you (`[x]`). Press Enter to accept the ticked tools,
|
|
126
|
+
or type the numbers you use (for example `1,3`) to replace them. You can re-run the
|
|
127
|
+
command later to add another.
|
|
128
|
+
|
|
129
|
+
**Optimization.** The installer then asks how Bridge should balance quality and
|
|
130
|
+
cost: **Quality** (full-depth planning and review), **Speed** (one planning pass,
|
|
131
|
+
one review), or **Token Efficiency** (Speed settings, with simpler tickets handed to
|
|
132
|
+
smaller models, to stretch your Claude Code, Cursor, or Codex subscription). Press
|
|
133
|
+
Enter to keep Quality (or your saved choice). Change it later by running
|
|
134
|
+
`/teach-bridge` in your agent.
|
|
135
|
+
|
|
136
|
+
When you are done answering, the installer writes Bridge's guidance for your agent
|
|
137
|
+
between `<!-- BEGIN BRIDGE MCP GUIDANCE -->` and `<!-- END BRIDGE MCP GUIDANCE -->`
|
|
138
|
+
without asking. It prints how to remove that region. Then it prints the defaults it
|
|
139
|
+
chose — project name, ticket keys when your project uses local tickets,
|
|
140
|
+
optimization, and guidance — just before offering to open the setup session.
|
|
108
141
|
|
|
109
142
|
**5. Reload your MCP host.** Editors read their MCP configuration at startup, so a
|
|
110
143
|
freshly written config is not live until you reload. Restart the editor, or use its
|
|
@@ -114,7 +147,9 @@ project's `.mcp.json` the first time.
|
|
|
114
147
|
**6. Finish in the agent session the installer opens — when it opens one.** The
|
|
115
148
|
last thing the installer does is offer to open a fresh agent session running
|
|
116
149
|
`/install-bridge`, which reads your codebase, fills in the remaining project
|
|
117
|
-
settings, and prints a short report of what Bridge can help with. Let it finish.
|
|
150
|
+
settings, and prints a short report of what Bridge can help with. Let it finish. To
|
|
151
|
+
invite teammates later, open the project's Security page from the Setup page and
|
|
152
|
+
create a key.
|
|
118
153
|
|
|
119
154
|
Three things all have to hold for that session to open: your selection has to
|
|
120
155
|
include a host the installer can launch, the run has to be on an interactive
|
|
@@ -155,14 +190,15 @@ committing anything that can hold a credential.
|
|
|
155
190
|
|
|
156
191
|
**Prompts you will see.** More than the sign-in question, in three groups:
|
|
157
192
|
|
|
158
|
-
- *Always on a first bare interactive run:* the
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
(`Connect GitHub? [y/N]:`).
|
|
193
|
+
- *Always on a first bare interactive run:* the email-or-token question (a blank
|
|
194
|
+
answer opens a hidden prompt for a token), the verification code, a picker for
|
|
195
|
+
which editors to configure (detected ones are pre-ticked), the optimization
|
|
196
|
+
choice, and an offer to connect GitHub (`Connect GitHub? [y/N]:`).
|
|
162
197
|
- *Conditional on your situation:* a confirmation when the directory has no `.git`
|
|
163
|
-
(default **No**, and declining aborts); a
|
|
164
|
-
|
|
165
|
-
|
|
198
|
+
(default **No**, and declining aborts); a project name when your folder name
|
|
199
|
+
cannot be used as one; and the consent prompt before the final agent session. With
|
|
200
|
+
more than one launchable tool selected, the first one is used and the installer
|
|
201
|
+
says so; pass `--agent` to choose another.
|
|
166
202
|
- *Overwrite confirmations, each default **No** and each skippable with `--force`:*
|
|
167
203
|
a saved key for this project already exists; a host config already contains a
|
|
168
204
|
`BAPI_API_KEY`; a **git-tracked** config would receive your real key; a saved but
|
|
@@ -217,8 +253,8 @@ re-run the command from the right directory — if you already had a `.vscode/`,
|
|
|
217
253
|
(`npx -y @bridge_gpt/mcp-server`) with no subcommand, you started the MCP *server*,
|
|
218
254
|
not the installer. It is waiting for an editor to connect over stdio, which is
|
|
219
255
|
exactly what it should do when your editor launches it — but from a terminal it
|
|
220
|
-
looks like a hang. It prints a
|
|
221
|
-
`npx -y @bridge_gpt/mcp-server install` instead. The explicit spelling
|
|
256
|
+
looks like a hang. It prints a stderr guidance block explaining this. Press Ctrl-C
|
|
257
|
+
and run `npx -y @bridge_gpt/mcp-server install` instead. The explicit spelling
|
|
222
258
|
`npx -y @bridge_gpt/mcp-server serve` starts the server on purpose.
|
|
223
259
|
|
|
224
260
|
**"It can't reach Bridge" or "my key was rejected."** The installer checks
|
|
@@ -283,7 +319,7 @@ Creates a brand-new Bridge project for that address and your first admin key in
|
|
|
283
319
|
command. No account, no key, and no invite needed beforehand. The address labels
|
|
284
320
|
your new workspace and may receive a setup message; delivery is best-effort, so
|
|
285
321
|
nothing waits on it. The email is visible as you type (it is not a secret) and is
|
|
286
|
-
never written to a log. This is the same route as
|
|
322
|
+
never written to a log. This is the same route as typing an email at the prompt.
|
|
287
323
|
|
|
288
324
|
**You were sent an invite code.**
|
|
289
325
|
|
|
@@ -374,7 +410,7 @@ later boot.
|
|
|
374
410
|
"mcpServers": {
|
|
375
411
|
"bridge": {
|
|
376
412
|
"command": "npx",
|
|
377
|
-
"args": ["-y", "--prefer-offline", "@bridge_gpt/mcp-server@0.2.
|
|
413
|
+
"args": ["-y", "--prefer-offline", "@bridge_gpt/mcp-server@0.2.69", "serve"],
|
|
378
414
|
"env": {
|
|
379
415
|
"BAPI_BASE_URL": "https://bridgegpt-api.com",
|
|
380
416
|
"BAPI_REPO_NAME": "your-repo",
|
|
@@ -396,7 +432,7 @@ later boot.
|
|
|
396
432
|
"bridge": {
|
|
397
433
|
"type": "stdio",
|
|
398
434
|
"command": "npx",
|
|
399
|
-
"args": ["-y", "--prefer-offline", "@bridge_gpt/mcp-server@0.2.
|
|
435
|
+
"args": ["-y", "--prefer-offline", "@bridge_gpt/mcp-server@0.2.69", "serve"],
|
|
400
436
|
"env": {
|
|
401
437
|
"BAPI_BASE_URL": "https://bridgegpt-api.com",
|
|
402
438
|
"BAPI_REPO_NAME": "your-repo",
|
|
@@ -418,7 +454,7 @@ later boot.
|
|
|
418
454
|
"bridge": {
|
|
419
455
|
"type": "stdio",
|
|
420
456
|
"command": "npx",
|
|
421
|
-
"args": ["-y", "--prefer-offline", "@bridge_gpt/mcp-server@0.2.
|
|
457
|
+
"args": ["-y", "--prefer-offline", "@bridge_gpt/mcp-server@0.2.69", "serve"],
|
|
422
458
|
"env": {
|
|
423
459
|
"BAPI_BASE_URL": "https://bridgegpt-api.com",
|
|
424
460
|
"BAPI_REPO_NAME": "your-repo",
|
|
@@ -441,7 +477,7 @@ Windsurf only supports global MCP configuration.
|
|
|
441
477
|
"mcpServers": {
|
|
442
478
|
"bridge": {
|
|
443
479
|
"command": "npx",
|
|
444
|
-
"args": ["-y", "--prefer-offline", "@bridge_gpt/mcp-server@0.2.
|
|
480
|
+
"args": ["-y", "--prefer-offline", "@bridge_gpt/mcp-server@0.2.69", "serve"],
|
|
445
481
|
"env": {
|
|
446
482
|
"BAPI_BASE_URL": "https://bridgegpt-api.com",
|
|
447
483
|
"BAPI_REPO_NAME": "your-repo",
|
|
@@ -460,7 +496,7 @@ Windsurf only supports global MCP configuration.
|
|
|
460
496
|
```toml
|
|
461
497
|
[mcp_servers.bridge]
|
|
462
498
|
command = "npx"
|
|
463
|
-
args = ["-y", "--prefer-offline", "@bridge_gpt/mcp-server@0.2.
|
|
499
|
+
args = ["-y", "--prefer-offline", "@bridge_gpt/mcp-server@0.2.69", "serve"]
|
|
464
500
|
|
|
465
501
|
[mcp_servers.bridge.env]
|
|
466
502
|
BAPI_BASE_URL = "https://bridgegpt-api.com"
|
|
@@ -525,12 +561,46 @@ converge, and nothing is reported as complete in that case. The causes:
|
|
|
525
561
|
- the upgrade finished but left an **unconfigured** MCP entry — one that would
|
|
526
562
|
authenticate as nobody.
|
|
527
563
|
|
|
564
|
+
#### Upgrade notices
|
|
565
|
+
|
|
528
566
|
The server checks for updates on startup. The check is cached for a day and never
|
|
529
|
-
blocks startup. When a newer version is known,
|
|
530
|
-
not have to go looking for:
|
|
531
|
-
|
|
532
|
-
|
|
533
|
-
|
|
567
|
+
blocks startup or a tool call. When a newer version is known, you hear about it
|
|
568
|
+
once, in a place you do not have to go looking for:
|
|
569
|
+
|
|
570
|
+
- **The first completed tool result.** In an eligible session, the first tool call
|
|
571
|
+
that finishes carries one extra line naming both versions and `/upgrade-bridge`.
|
|
572
|
+
It tells the agent to mention the upgrade and to run it only if you say yes.
|
|
573
|
+
Failed tool calls count too.
|
|
574
|
+
- **Startup instructions.** If the local cache already shows a newer version, the
|
|
575
|
+
server's instructions to the agent say so from the first message.
|
|
576
|
+
- **A Claude Code `SessionStart` hook.** `install` and `upgrade` add one hook to
|
|
577
|
+
`.claude/settings.local.json`, pinned to the same version as your project's
|
|
578
|
+
launcher. It runs `check-update` and shows the notice at the start of a fresh
|
|
579
|
+
session. The hook is for Claude Code only and is per developer (that file is
|
|
580
|
+
gitignored). Bridge records the exact command in `.bridge/bridge-permissions.json`,
|
|
581
|
+
so a changed pin replaces it and removal deletes only that command. Cursor and
|
|
582
|
+
Codex have no hook; they get the startup instructions and the tool-result line.
|
|
583
|
+
- **`doctor` and `start-tickets`.** `doctor` shows `Bridge MCP version` beside the
|
|
584
|
+
package version, from a fresh lookup that does not touch the cache. `start-tickets`
|
|
585
|
+
prints one reminder to stderr when the cache shows a newer version.
|
|
586
|
+
|
|
587
|
+
The notice is decided without waiting for any lookup. While the latest version is
|
|
588
|
+
unknown, or a result cannot safely carry the extra line, the session keeps its
|
|
589
|
+
chance and tries again on a later call.
|
|
590
|
+
|
|
591
|
+
It stays **silent** when you are current, when the latest version is unknown, in
|
|
592
|
+
unattended worker sessions (`BAPI_WORKER_BRANCH` or `BAPI_EPIC_IMPLEMENTER_WORKER_ID`
|
|
593
|
+
set), and when `BAPI_MCP_UPDATE_CHECK_ENABLED` is off.
|
|
594
|
+
|
|
595
|
+
`BAPI_MCP_UPDATE_CHECK_FAKE_LATEST` is a manual-only override for trying the notice.
|
|
596
|
+
It must be a plain `MAJOR.MINOR.PATCH` release; anything else is ignored. It never
|
|
597
|
+
changes what `install` or `upgrade` pin to.
|
|
598
|
+
|
|
599
|
+
Two limits to know. The startup instructions and the hook read the cache the server
|
|
600
|
+
fills, so a machine that has never run the server may show no notice at session
|
|
601
|
+
start. And a cold, pinned `npx` launch of the hook can take longer than its
|
|
602
|
+
five-second timeout, in which case it stays silent; run `doctor`, or launch the
|
|
603
|
+
pinned CLI once, to warm it.
|
|
534
604
|
|
|
535
605
|
Re-running `install` on an already-configured project is safe: it refreshes the
|
|
536
606
|
scaffolded files without overwriting your stored credential unless you pass
|
|
@@ -570,15 +640,15 @@ The tools worth knowing for most tickets.
|
|
|
570
640
|
- **Flags:** `--auto` auto-accept findings and skip the approval gates · `--rounds=1` a cheaper single-pass review that still evaluates findings and captures decisions · `--rounds=2` force the full second-opinion review · omit `--rounds` to let the difficulty-adaptive review policy decide.
|
|
571
641
|
|
|
572
642
|
**2. Start Tickets**
|
|
573
|
-
- **What it does:**
|
|
643
|
+
- **What it does:** Builds several tickets at once, each in its own copy of the repo (a git worktree) with its own agent.
|
|
574
644
|
- **When it's useful:** (Implementation | Automation) When you're ready to start building one or more refined tickets concurrently.
|
|
575
|
-
- **How to use it:** `/start-tickets BAPI-248 BAPI-250`
|
|
645
|
+
- **How to use it:** `/start-tickets BAPI-248 BAPI-250`
|
|
576
646
|
- **Flags:** `--auto` skip the approval gates · `--base-branch <branch>` branch off something other than the default · `--workflow implement|review-and-implement` selects which slash command each spawned worktree runs · `--rounds=1|2` forwarded to the review phase, valid only with `--workflow review-and-implement` · `--tier cheap|basic|premium` strict manual model-routing override · `--auto-tier cheap|basic|premium` machine-carried raw tier for chained automation (posture-adjusted; used internally by the `/review-and-implement` handoff), mutually exclusive with `--tier`.
|
|
577
647
|
|
|
578
648
|
**3. Review and Start**
|
|
579
|
-
- **What it does:**
|
|
649
|
+
- **What it does:** Like Start Tickets, but each ticket is reviewed first and only built if it passes.
|
|
580
650
|
- **When it's useful:** (Refinement | Implementation | Automation) The **recommended front door** for "review these tickets, then implement the ones that pass," starting from existing ticket keys (unlike `/idea-to-pr`, which only accepts an idea).
|
|
581
|
-
- **How to use it:** `/review-and-start BAPI-248 BAPI-250`
|
|
651
|
+
- **How to use it:** `/review-and-start BAPI-248 BAPI-250`
|
|
582
652
|
- **Flags:** `--auto` auto-approves both the review and the implementation phase of every spawned session · `--rounds=1|2` forwarded to the review phase · `--agent`, `--base-branch`, `--max-parallel`, `--dry-run` mirror `/start-tickets`.
|
|
583
653
|
|
|
584
654
|
**4. Define Tickets**
|
|
@@ -610,7 +680,7 @@ Good to know, but not needed every day.
|
|
|
610
680
|
- **Flags:** Name the issue type (Bug / Story / Task / Epic) and, for a child ticket under an epic, the parent key.
|
|
611
681
|
|
|
612
682
|
**2. Plan Ticket**
|
|
613
|
-
- **What it does:**
|
|
683
|
+
- **What it does:** Writes a step-by-step plan for a ticket that points at the real files to change.
|
|
614
684
|
- **When it's useful:** (Refinement | Implementation) Once a ticket is solid and you want a concrete build plan before — or instead of — auto-implementing it.
|
|
615
685
|
- **How to use it:** `/plan-ticket BAPI-123`
|
|
616
686
|
- **Flags:** `--provider <name>` choose the model provider · `--second-opinion <provider>` cross-check the plan with a second provider.
|
|
@@ -640,9 +710,9 @@ Good to know, but not needed every day.
|
|
|
640
710
|
- **Flags:** None.
|
|
641
711
|
|
|
642
712
|
**7. Drive Epic Run**
|
|
643
|
-
- **What it does:**
|
|
713
|
+
- **What it does:** Builds a whole epic for you. Bridge works through the child tickets in order, merges each one into the epic branch, and fixes routine problems along the way, so you only step in when it truly needs you. It shows you a preview and waits for your yes before it starts.
|
|
644
714
|
- **When it's useful:** (Implementation | Automation) When an epic has an approved plan and you want its child tickets built and merged into the epic branch with one session watching the run.
|
|
645
|
-
- **How to use it:** `/drive-epic-run
|
|
715
|
+
- **How to use it:** `/drive-epic-run BAPI-1145`
|
|
646
716
|
- **Flags:** None — the epic key and an optional plan path are the only arguments.
|
|
647
717
|
|
|
648
718
|
### Now and then
|
|
@@ -733,7 +803,7 @@ Useful once in a while.
|
|
|
733
803
|
Slash commands that drive several tools at once. Start Tickets, Review and Start, and Define Tickets are documented above under [Regularly useful](#regularly-useful); Create Decision Page is documented above under [Occasionally useful](#occasionally-useful); Regression Check and Scan Test Coverage are documented above under [Now and then](#now-and-then) — the rest live here.
|
|
734
804
|
|
|
735
805
|
**1. Implement Ticket**
|
|
736
|
-
- **What it does:**
|
|
806
|
+
- **What it does:** Builds one ticket end to end: plans it, writes the code, opens a pull request, and watches CI.
|
|
737
807
|
- **When it's useful:** (Implementation) When a ticket is ready and you want it taken from plan to open PR in one go.
|
|
738
808
|
- **How to use it:** `/implement-ticket BAPI-123` (command only — "implement X" as free text almost always triggers a freehand build instead of the Bridge plan→code→PR→CI pipeline).
|
|
739
809
|
- **Flags:** `--auto` skip the approval gates (e.g. auto-commit/push).
|
|
@@ -1071,14 +1141,15 @@ By hand, the outline is:
|
|
|
1071
1141
|
npx -y @bridge_gpt/mcp-server install # if Bridge is not installed yet
|
|
1072
1142
|
npx -y @bridge_gpt/mcp-server connect-github --repo <repo_name> # connect the GitHub App
|
|
1073
1143
|
npx -y @bridge_gpt/mcp-server install conductor --required-check "epic-implementer-ci / gate" \
|
|
1074
|
-
--
|
|
1144
|
+
--review-policy verdict_protocol \
|
|
1145
|
+
--allowed-bot "<bot>" --secret-name <SECRET_NAME> --branches "<default branch>,epic/**" # AI review is opt-in; omit all four to skip the claude-review workflow
|
|
1075
1146
|
export BAPI_LOCAL_MERGE_TOKEN="$(gh auth token)" # in the shell that runs drive-epic
|
|
1076
1147
|
npx -y @bridge_gpt/mcp-server epic-implementer readiness --json # read-only check of every prerequisite
|
|
1077
1148
|
```
|
|
1078
1149
|
|
|
1079
1150
|
After `install conductor`, restart your MCP client so the Epic Implementer tools
|
|
1080
1151
|
appear. Add `epic-implementer-ci.yml` (the guide has a template) and the
|
|
1081
|
-
`claude-review.yml` that `install conductor` wrote, through a pull request into
|
|
1152
|
+
`claude-review.yml` that `install conductor` wrote (only when you opted in to AI review with `--review-policy verdict_protocol`), through a pull request into
|
|
1082
1153
|
your default branch. Once it merges, index the repository with
|
|
1083
1154
|
`/parse-repository`.
|
|
1084
1155
|
|
|
@@ -1151,6 +1222,55 @@ For Codex, `GET /jira/codex-model-catalog?repo_name=...` is the sole tier-to-mod
|
|
|
1151
1222
|
|
|
1152
1223
|
Per-OS prerequisites: macOS `wt`, `git`, `osascript`; Windows `git-wt`, Git for Windows / Git Bash, Windows Terminal or PowerShell; Linux `wt`, `git`, `tmux`. Set `BAPI_WORKTRUNK_BIN` to override the Worktrunk executable name/path for nonstandard installs (`doctor` honors it too). The read-only `doctor` subcommand (below) additionally surfaces a missing `uv` — Worktrunk's `pre-start` hook runs `uv`, but live preflight does not check it — and the selected agent's command; run `doctor --agent cursor-agent` to also check `cursor-agent` (it prints `cursor-agent login` as an informational auth reminder).
|
|
1153
1224
|
|
|
1225
|
+
### Missing packaged workflow files
|
|
1226
|
+
|
|
1227
|
+
Run read-only `doctor` to distinguish absent, unreadable, unsafe, and uncertain
|
|
1228
|
+
workflow files. Healthy discovery adds no recovery prose. Confirmed loss in a
|
|
1229
|
+
root-bound initialized installation adds bounded recovery metadata and guidance;
|
|
1230
|
+
unknown hosts, fallback roots, legacy inventories, and newer bundle additions do
|
|
1231
|
+
not establish historical loss. Readable customized or uncommitted files count as
|
|
1232
|
+
present; committing generated files is unnecessary.
|
|
1233
|
+
|
|
1234
|
+
```sh
|
|
1235
|
+
npx -y '@bridge_gpt/mcp-server@<running-version>' repair-assets --project-root '/path/to/project' --host claude
|
|
1236
|
+
```
|
|
1237
|
+
|
|
1238
|
+
Replace `<running-version>` with the running package version. Both explicit root and host
|
|
1239
|
+
options authorize fill-only provisioning without inventory. Otherwise repair
|
|
1240
|
+
requires a matching inventory at the exact selected root; callers in a project
|
|
1241
|
+
subdirectory must supply `--project-root`. The canonical selected root is printed
|
|
1242
|
+
before writes. Unpinned `npx -y @bridge_gpt/mcp-server repair-assets` intentionally
|
|
1243
|
+
selects the latest package, which may introduce new assets.
|
|
1244
|
+
|
|
1245
|
+
| Host | Packaged destinations |
|
|
1246
|
+
| --- | --- |
|
|
1247
|
+
| `claude` | `.claude/commands/`, `.claude/agents/`, shipped documentation |
|
|
1248
|
+
| `cursor` | `.cursor/commands/`, shipped documentation; no native agent definitions |
|
|
1249
|
+
| `codex` | `.agents/skills/bridge-*/SKILL.md`, shipped documentation |
|
|
1250
|
+
| `copilot` | Independent `.github/prompts/`, `.github/skills/`, `.github/agents/`, shipped documentation |
|
|
1251
|
+
|
|
1252
|
+
Repair preserves existing bytes and concurrent creation winners. It prepares
|
|
1253
|
+
complete temporary files, flushes/closes them, and publishes with exclusive hard
|
|
1254
|
+
links. A confined Linux procfs adapter supports writes; macOS/Windows currently
|
|
1255
|
+
refuse missing-file writes because a qualified descriptor-relative adapter is
|
|
1256
|
+
unavailable. Non-files, permissions, unsafe ancestry, unsupported publication, or
|
|
1257
|
+
cleanup failures produce a nonzero exit and distinct diagnostics. Repair does not
|
|
1258
|
+
refresh or upgrade existing content.
|
|
1259
|
+
|
|
1260
|
+
When a missing host command prevents Bridge invocation, run the terminal command
|
|
1261
|
+
from the established root, then refresh/reconnect and run doctor. Hosts may cache
|
|
1262
|
+
lists or ignore notifications; healthy files do not guarantee host presentation.
|
|
1263
|
+
If the mismatch persists, consult host support.
|
|
1264
|
+
|
|
1265
|
+
Plans/reviews/research reports are generated outputs: retrieve identified existing
|
|
1266
|
+
results using `get_plan`, `wait_for_ticket_review` for eligible canonical legs,
|
|
1267
|
+
`get_deep_research(task_id)`, or `get_council(council_id)`. Never silently rerun paid
|
|
1268
|
+
generation. Agent-reviewed rewrites must be recreated and reviewed before
|
|
1269
|
+
publication; neither retrieval nor installer repair reconstructs them.
|
|
1270
|
+
|
|
1271
|
+
Custom pipelines/instructions, MCP registration/configuration, credentials,
|
|
1272
|
+
onboarding/API setup, and Windsurf are outside packaged repair.
|
|
1273
|
+
|
|
1154
1274
|
### `doctor`
|
|
1155
1275
|
|
|
1156
1276
|
The package also ships a strictly **read-only** `doctor` subcommand — titled **`bridge doctor — read-only diagnostics`** — that diagnoses your whole Bridge install without changing anything:
|
|
@@ -1210,14 +1330,21 @@ The path from an epic to a finished run:
|
|
|
1210
1330
|
`npx -y @bridge_gpt/mcp-server install conductor --required-check <check>`
|
|
1211
1331
|
(also spelled `install-bridge conductor`; the name predates the rename). It runs
|
|
1212
1332
|
a read-only doctor and writes the done gate from your required CI check(s). It
|
|
1213
|
-
can also scaffold the `claude-review` workflow, write an executor service unit,
|
|
1333
|
+
can also scaffold the `claude-review` workflow (only with the explicit AI-review opt-in, `--review-policy verdict_protocol`; omitting the flag persists no repository review choice and scaffolds none), write an executor service unit,
|
|
1214
1334
|
and save a launch profile. With its own consent, it adds `epic_implementer` to
|
|
1215
1335
|
`BRIDGE_MCP_PROFILE` in your host MCP configs. Run `install conductor --help`
|
|
1216
1336
|
for every option.
|
|
1217
1337
|
3. **Launch and drive.** In Claude Code, `/drive-epic-run <EPIC> [<plan path>]`
|
|
1218
1338
|
previews the launch, asks you once, creates the run through `drive-epic`, and
|
|
1219
1339
|
then watches and recovers it. From a shell, [`drive-epic <EPIC>`](#drive-epic)
|
|
1220
|
-
creates the run and starts its executor.
|
|
1340
|
+
creates the run and starts its executor. In Claude Code, `/drive-epic-run` first
|
|
1341
|
+
checks whether Bridge's auto-mode sandbox description is in
|
|
1342
|
+
`~/.claude/settings.json`. Only when it is missing, it asks you once, in the
|
|
1343
|
+
session, and writes it only after an explicit yes. You can add it yourself with
|
|
1344
|
+
`npx -y @bridge_gpt/mcp-server bridge-permissions` (run from the project root; it
|
|
1345
|
+
asks first), inspect it with `bridge-permissions --check --json`, and remove it
|
|
1346
|
+
with `install --remove-bridge-permissions`. `install` itself never touches that
|
|
1347
|
+
file.
|
|
1221
1348
|
4. **Monitor.** The MCP tools `get_epic_snapshot` and `explain_run` (they need the
|
|
1222
1349
|
`epic_implementer` profile; see [Environment Variables](#environment-variables)),
|
|
1223
1350
|
`notifications <EPIC|run-id> [--follow]`, `epic-implementer epic-status`, and
|
|
@@ -1264,7 +1391,10 @@ including every error path, ever offers you two paths.
|
|
|
1264
1391
|
the strategy and the posture (see below). With none of them, a multi-ticket epic
|
|
1265
1392
|
runs on `epic/<KEY>`, unattended. It also forwards `--repo` and the policy flags:
|
|
1266
1393
|
`--policy-file <path>` (the complete run policy), `--review-policy <src>` (a
|
|
1267
|
-
per-run review policy
|
|
1394
|
+
per-run review policy: `repository_policy`, `verdict_protocol`,
|
|
1395
|
+
`native_review_decision`, or `none`; omitted, the server stamps `repository_policy`
|
|
1396
|
+
at first approval for a new feature-branch run, and `verdict_protocol` is the
|
|
1397
|
+
explicit AI-review opt-in), and `--replace-policy` (allow replacing a live run's
|
|
1268
1398
|
stored policy).
|
|
1269
1399
|
|
|
1270
1400
|
**Every run gets an executor (BAPI-1279).** Once `drive-epic` creates a run, it
|
|
@@ -1660,7 +1790,7 @@ If a custom pipeline has the same key as a built-in pipeline, the custom version
|
|
|
1660
1790
|
| `BAPI_MCP_UPGRADE_ADVICE_ENABLED` | No | _(enabled)_ | MCP-local opt-out for proactively surfacing upgrade advice in pipeline recipe preambles. Set to `false`/`0`/`no`/`off`/`disabled` to suppress. Disabling it does **not** change the `/jira/ping` response or server-side upgrade computation — it only gates the recipe-preamble convention |
|
|
1661
1791
|
| `BAPI_MCP_TOOL_SURFACE_GATING_ENABLED` | No | _(enabled)_ | MCP-local kill switch for **dynamic tool-surface capability gating** (see [Dynamic tool-surface gating](#dynamic-tool-surface-gating-capability-availability)). Default-on; set to `false`/`0`/`no`/`off`/`disabled` to skip the startup probe, the recurring poll, and the custom `tools/list` handler entirely, restoring the SDK's previous full profile-derived surface. Fail-open: any probe timeout, unreachable backend, non-2xx, malformed payload, incomplete evaluation, or unsupported schema advertises the full profile |
|
|
1662
1792
|
| `BAPI_MCP_TOOL_SURFACE_POLL_ENABLED` | No | _(disabled)_ | Opt IN to the recurring tool-surface **poll**. Default-**off**: a session gates once via the startup probe and never re-probes. Set to `true`/`1`/`yes`/`on`/`enabled` to restore the jittered 12–18 s heartbeat that pushes `notifications/tools/list_changed` on mid-session capability changes. No effect when gating itself is disabled |
|
|
1663
|
-
| `BAPI_MCP_UPDATE_CHECK_ENABLED` | No | _(enabled)_ | MCP-local kill switch for the cached update check run at startup. Default-on; set to `false`/`0`/`no`/`off`/`disabled` to skip it entirely — no npm registry request, no update-cache read/write, no
|
|
1793
|
+
| `BAPI_MCP_UPDATE_CHECK_ENABLED` | No | _(enabled)_ | MCP-local kill switch for the cached update check run at startup. Default-on; set to `false`/`0`/`no`/`off`/`disabled` to skip it entirely — no npm registry request, no update-cache read/write, and no upgrade notice on any surface (see [Upgrade notices](#upgrade-notices)). Any other value is treated as enabled. Useful behind a firewall/registry-restricted network, and used by the payload-measurement harness so a stale local cache can never perturb a capture |
|
|
1664
1794
|
| `CURSOR_API_KEY` | No | _(none)_ | API key used to authenticate `cursor-agent` when launching `start-tickets`/scheduled runs with `--agent cursor-agent`. Not needed for the default Claude Code agent |
|
|
1665
1795
|
| `BRIDGE_MCP_PROFILE` | No | `core` | Startup-time tool registration profile — a **comma-separated** list of groups controlling which tool groups are registered when the server starts. `core` is always implicitly included. Valid groups: `core` (default — normal coding tools only), `epic_implementer` (+ the 2 Epic Implementer tools, `get_epic_snapshot` and `explain_run`), `pipeline-authoring` (adds **no** tools since BAPI-909; still accepted so old configs keep working — `get_pipeline_recipe` stays in `core` because the recipe-driven slash commands depend on it), `estimation` (+ `estimate_epic`, which is **hidden by default** — `/estimate-epic` needs this group), `sfcc` (+ the 8 heavy SFCC read tools, `sfcc_log_query`, and the `sfcc_setup_status`/`check_permissions` diagnostics — read-only, see [Salesforce B2C Commerce (SFCC) Tools](#salesforce-b2c-commerce-sfcc-tools)), `sfcc-write` (+ the 9 destructive SFCC write tools — independent of `sfcc`, which does not enable them; see [Read and write profiles](#read-and-write-profiles)), and `full` (shortcut that expands to every group, **including `estimation` and `sfcc-write`**). Example: `sfcc,epic_implementer`; use `sfcc,sfcc-write` for reads plus writes. Unknown, blank, or malformed tokens are dropped (falling back to `core`). Dynamic mid-session switching via `tools/list_changed` is unsupported — groups are resolved once at process startup, so **changing this variable requires restarting the MCP server**. That is separate from the learn/onboarding tools, which are gated per session and can appear mid-session without a restart (see [Learn/onboarding tool availability](#learnonboarding-tool-availability)). Epic Implementer sessions launched via `start-tickets --conductor` **merge** `epic_implementer` into the parent process's already-resolved groups at the spawn boundary rather than replacing them — a project running on `sfcc` spawns workers on `core,sfcc,epic_implementer`. The retired token `conductor` is no longer valid and is dropped like any unknown token. A normal `start-tickets` run stays on `core`. |
|
|
1666
1796
|
|
|
@@ -1953,3 +2083,94 @@ plus `total_steps`, `auto_approve`, and `execution_mode`. Each step is either an
|
|
|
1953
2083
|
text). `execution_mode` is `inline` — the calling agent executes every step
|
|
1954
2084
|
itself and keeps its own durable record through `record_phase_result` /
|
|
1955
2085
|
`record_checkpoint`. There is no server-side orchestrator and no run to resume.
|
|
2086
|
+
|
|
2087
|
+
|
|
2088
|
+
## Start Tickets troubleshooting
|
|
2089
|
+
|
|
2090
|
+
`start-tickets` reports actual worktree paths and branches in its stable summary,
|
|
2091
|
+
then explains successfully spawned sessions. Work from each reported folder: its
|
|
2092
|
+
branch is already checked out there and normally cannot also be checked out in
|
|
2093
|
+
the original folder. Folder names and locations come from Worktrunk configuration;
|
|
2094
|
+
do not infer them from the original checkout.
|
|
2095
|
+
|
|
2096
|
+
Monitor the selected agent in the reported Terminal/iTerm tab, Windows Terminal
|
|
2097
|
+
tab, PowerShell fallback window, or detached tmux session. Linux output prints
|
|
2098
|
+
the exact `tmux attach -t ...` commands. When a destination is not reported, treat
|
|
2099
|
+
it as unknown. A spawned session has started; it has not completed implementation
|
|
2100
|
+
or review. Review workflows review independently before opening a fresh
|
|
2101
|
+
implementation session. Coordinate ownership across multiple independent
|
|
2102
|
+
sessions and pause affected work when overlapping changes cause conflicts.
|
|
2103
|
+
|
|
2104
|
+
For mixed failures, only `spawned` rows describe running sessions. Retain failed
|
|
2105
|
+
row warnings and the CLI exit status. Dry-run and all-failed results open no
|
|
2106
|
+
successful sessions. After a failure, read-only diagnostics are allowed:
|
|
2107
|
+
|
|
2108
|
+
```bash
|
|
2109
|
+
npx -y @bridge_gpt/mcp-server doctor --agent codex
|
|
2110
|
+
```
|
|
2111
|
+
|
|
2112
|
+
The interactive installer separates **Required for launcher** tools from
|
|
2113
|
+
**Recommended diagnostics** (`uv`, selected agent, ast-grep, ripgrep, lizard).
|
|
2114
|
+
Missing recommendations and the **Git compatibility advisory** add no install or
|
|
2115
|
+
launcher admission gate. Doctor performs no automatic repair, installation, PATH
|
|
2116
|
+
mutation, authentication, or terminal launch. The existing launcher still checks
|
|
2117
|
+
Git presence and repository work-tree context at launch.
|
|
2118
|
+
|
|
2119
|
+
### Worktrunk and Git compatibility evidence
|
|
2120
|
+
|
|
2121
|
+
The documented comparison baseline is **Worktrunk v0.80.0**, whose
|
|
2122
|
+
[tagged Git-version source](https://github.com/max-sixty/worktrunk/blob/v0.80.0/src/git/version.rs)
|
|
2123
|
+
sets the minimum to **Git 2.43.0**. This is the release-specific baseline Bridge
|
|
2124
|
+
recommends for this advisory, not a universal rule for every Worktrunk release or
|
|
2125
|
+
a requirement to install the latest Git. The onboarding report observed Git
|
|
2126
|
+
**2.39.5** being rejected with a **2.43.0** minimum; it did not identify the
|
|
2127
|
+
Worktrunk release, so that observation alone is not release verification.
|
|
2128
|
+
|
|
2129
|
+
Doctor and the installer report the resolved Git executable and numeric version
|
|
2130
|
+
when available, with compatible, incompatible, and unknown advisory states.
|
|
2131
|
+
An arbitrary nonempty `BAPI_WORKTRUNK_BIN` override has an unconfirmed release
|
|
2132
|
+
requirement and is not assumed compatible with this baseline. On macOS,
|
|
2133
|
+
installing another Git does not ensure the launcher resolves it. Verify the
|
|
2134
|
+
executable and version selected on PATH before changing your installation:
|
|
2135
|
+
|
|
2136
|
+
```bash
|
|
2137
|
+
which git
|
|
2138
|
+
git --version
|
|
2139
|
+
```
|
|
2140
|
+
|
|
2141
|
+
### Saved planning work and launch readiness
|
|
2142
|
+
|
|
2143
|
+
Successful ticket/plan creation does not establish executor, policy, VCS, or
|
|
2144
|
+
indexing readiness. A finalized epic completion may show one bounded read-only
|
|
2145
|
+
`drive-epic '<EPIC>' --dry-run --json` preview. Ready means **ready at preview
|
|
2146
|
+
time**; a conditional cold start still needs guarded startup/live validation.
|
|
2147
|
+
Returned target, refusal reasons, remedies, and `availability_text` remain
|
|
2148
|
+
authoritative. An unavailable preview leaves readiness unconfirmed while saved
|
|
2149
|
+
work remains successful. Free-form plans or unresolved child keys must be
|
|
2150
|
+
finalized first. Actual launch retains its consent and admission checks.
|
|
2151
|
+
|
|
2152
|
+
## Backend-owned bootstrap identity (BAPI-1438)
|
|
2153
|
+
|
|
2154
|
+
Ordinary new creation uses a friendly display label. Labels may repeat and never
|
|
2155
|
+
select credentials. For a scripted operator invite use `install --invite --display-name "My project"`
|
|
2156
|
+
and supply the invitation through the existing private input mechanism. In an
|
|
2157
|
+
interactive terminal the folder basename is a suggested label. Self-serve signup
|
|
2158
|
+
still requires emailed-code verification in an interactive terminal.
|
|
2159
|
+
|
|
2160
|
+
Use `--repo <canonical-name>` or `BAPI_REPO_NAME` for existing-key registration
|
|
2161
|
+
or explicit legacy creation. Existing keys cannot use `--display-name`; creation
|
|
2162
|
+
cannot combine that flag with a canonical selector.
|
|
2163
|
+
|
|
2164
|
+
Rerun from the original folder with the same invitation or signup method after
|
|
2165
|
+
an interrupted install. The original proof and label are reused; another entered
|
|
2166
|
+
label does not rename the recovered project. Preserve recovery storage when an
|
|
2167
|
+
outcome is unknown, a challenge cannot be recovered, or installation asks for support.
|
|
2168
|
+
Never delete possibly redeemed proof to restart. Ordinary invite tokens and
|
|
2169
|
+
verification codes are not stored.
|
|
2170
|
+
|
|
2171
|
+
Credential storage uses bounded exclusive locking without timeout-based stealing.
|
|
2172
|
+
An abandoned lock needs installation support. POSIX systems sync the containing
|
|
2173
|
+
directory; Windows uses file sync plus atomic replacement because portable Node
|
|
2174
|
+
directory handles are unavailable. A failure after rename is an uncertain durability
|
|
2175
|
+
outcome: the new bytes may already exist. Rerun reloads the actual store under lock;
|
|
2176
|
+
there is no guarantee that old pending bytes survive every failure.
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { evaluateClaudeMcpShadowingPolicy, inspectClaudeUserConfigForMcpShadowing, resolveClaudeUserConfigPath, } from "../claude-user-config-doctor.js";
|
|
2
2
|
import { createDefaultAgentCapabilitiesDeps } from "../agent-capabilities/default-deps.js";
|
|
3
3
|
import { runDenyEnforcementPreflight, } from "../conductor/deny-enforcement-preflight.js";
|
|
4
|
+
import { CLAUDE_DISABLE_AUTO_MEMORY_ENV } from "../claude-settings.js";
|
|
4
5
|
import { buildExecutorBaseWorkerEnv } from "../executor/env.js";
|
|
5
6
|
import { ExecutorNamedError } from "../executor/job-errors.js";
|
|
6
7
|
import { provisionExecutorDenyLayer } from "../executor/permissions.js";
|
|
@@ -267,6 +268,24 @@ export function buildClaudeWatcherNudgeMessage(liveTaskIds) {
|
|
|
267
268
|
"background log tail), you may stop that watcher. Do not cancel, kill, or abandon any " +
|
|
268
269
|
"required work in order to finish sooner.");
|
|
269
270
|
}
|
|
271
|
+
/**
|
|
272
|
+
* BAPI-1395 — the nudge sent when the post-result completion window opens and
|
|
273
|
+
* only the worker's own background Bash is live. The executor cannot tell a
|
|
274
|
+
* task that merely waits (a polling loop, a `sleep`) from a genuine background
|
|
275
|
+
* operation, so it must not ask for blanket cancellation: only tasks that are
|
|
276
|
+
* merely waiting are to be stopped.
|
|
277
|
+
*/
|
|
278
|
+
export function buildClaudeCompletionWindowNudgeMessage(liveTaskIds) {
|
|
279
|
+
const ids = liveTaskIds
|
|
280
|
+
.map((id) => boundedIdentifier(id))
|
|
281
|
+
.filter((id) => id !== null)
|
|
282
|
+
.slice(0, NUDGE_MAX_TASK_IDS);
|
|
283
|
+
const named = ids.length > 0 ? ` (task ids: ${ids.join(", ")})` : "";
|
|
284
|
+
return claudeStdinUserLine(`Your result was received, but background shell tasks you started are still running${named}. ` +
|
|
285
|
+
"Stop only the tasks of your own that are merely waiting (for example a sleep or a polling " +
|
|
286
|
+
"loop). Leave any background operation that is doing real work running so it can finish and " +
|
|
287
|
+
"report its outcome. Do not cancel, kill, or abandon required work in order to finish sooner.");
|
|
288
|
+
}
|
|
270
289
|
// ---------------------------------------------------------------------------
|
|
271
290
|
// Runtime identity probe (BAPI-1301, D4a)
|
|
272
291
|
// ---------------------------------------------------------------------------
|
|
@@ -372,6 +391,13 @@ export function buildClaudeWorkerEnv(parentEnv, options = {}) {
|
|
|
372
391
|
if (typeof token === "string") {
|
|
373
392
|
env[CLAUDE_OAUTH_TOKEN_ENV] = token;
|
|
374
393
|
}
|
|
394
|
+
// BAPI-1397 (F6) — a worker must never write the OWNER's Claude auto-memory.
|
|
395
|
+
// The deny-layer provisioning also writes `autoMemoryEnabled: false` into the
|
|
396
|
+
// worktree's settings; the environment form is set here as well because it
|
|
397
|
+
// wins over settings and does not depend on that file write succeeding. Set
|
|
398
|
+
// after the parent environment is filtered, so nothing inherited can turn it
|
|
399
|
+
// back on.
|
|
400
|
+
env[CLAUDE_DISABLE_AUTO_MEMORY_ENV] = "1";
|
|
375
401
|
return env;
|
|
376
402
|
}
|
|
377
403
|
/**
|
|
@@ -620,6 +646,7 @@ export function createClaudeExecutorAdapter(spec, deps = {}) {
|
|
|
620
646
|
transport: COMPLETION_EVIDENCE_TRANSPORT,
|
|
621
647
|
probeRuntime: (probeDeps) => probeClaudeCompletionRuntime(spec.command, probeDeps),
|
|
622
648
|
buildWatcherNudge: buildClaudeWatcherNudgeMessage,
|
|
649
|
+
buildCompletionWindowNudge: buildClaudeCompletionWindowNudgeMessage,
|
|
623
650
|
};
|
|
624
651
|
return {
|
|
625
652
|
identity: {
|