@bridge_gpt/mcp-server 0.2.23 → 0.2.24
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 +69 -17
- package/build/commands.generated.js +2 -2
- package/build/decision-page-template.js +9 -4
- package/build/docs.generated.js +5 -0
- package/build/index.js +762 -279
- package/build/init.js +29 -0
- package/build/install-bridge.js +480 -76
- package/build/readme.generated.js +1 -1
- package/build/sfcc/log-gate.js +85 -0
- package/build/sfcc/log-query.js +170 -0
- package/build/sfcc/register.js +10 -0
- package/build/sfcc/setup-status.js +33 -3
- package/build/version.generated.js +1 -1
- package/{CONDUCTOR.md → docs/CONDUCTOR.md} +2 -2
- package/docs/install/github-app.md +189 -0
- package/docs/install/mcp-tool-integrations.md +305 -0
- package/docs/install/sfcc-integration.md +140 -0
- package/package.json +5 -5
- package/public/js/main.min.js +46 -1
- package/public/js/main.min.js.map +1 -1
- package/smoke-test/SMOKE-TEST.md +3 -2
|
@@ -19,7 +19,8 @@ import { getAmToken } from "./client.js";
|
|
|
19
19
|
* 2. Repo name set (REPO_NAME)
|
|
20
20
|
* 3. version config field is an SFCC version
|
|
21
21
|
* 4. dw.json found / instance unambiguous
|
|
22
|
-
* 5. AM token acquisition
|
|
22
|
+
* 5. AM token acquisition (OCAPI Account Manager — NOT log/WebDAV access)
|
|
23
|
+
* 6. SFCC Log Query capability (WebDAV Basic auth — independent of steps 3–5)
|
|
23
24
|
*
|
|
24
25
|
* Never throws; each check is caught independently so partial states are
|
|
25
26
|
* always reported. Output is completely secret-free.
|
|
@@ -97,8 +98,37 @@ export async function sfccSetupStatusTool(deps) {
|
|
|
97
98
|
tokenStatus = `✗ ${msg}`;
|
|
98
99
|
}
|
|
99
100
|
}
|
|
100
|
-
lines.push(`5. AM Token: ${tokenStatus}`);
|
|
101
|
-
|
|
101
|
+
lines.push(`5. AM Token (OCAPI): ${tokenStatus}`);
|
|
102
|
+
// 6. SFCC Log Query capability — WebDAV Basic auth, independent of OCAPI/AM.
|
|
103
|
+
// A single Bridge backend probe (secret-free) reports readiness. This is a
|
|
104
|
+
// separate credential surface: an SFCC repo can have OCAPI working (steps 3–5)
|
|
105
|
+
// while log/WebDAV access is not configured, and vice versa.
|
|
106
|
+
let logQueryStatus = "— Skipped (Bridge API not configured)";
|
|
107
|
+
if (apiKeyOk && repoOk) {
|
|
108
|
+
try {
|
|
109
|
+
const url = deps.buildGetUrl("/sfcc/logs/capability", { repo_name: deps.repoName });
|
|
110
|
+
const resp = await fetch(url, { headers: await deps.getGetHeaders() });
|
|
111
|
+
if (!resp.ok) {
|
|
112
|
+
logQueryStatus = `✗ Could not read (Bridge API ${resp.status})`;
|
|
113
|
+
}
|
|
114
|
+
else {
|
|
115
|
+
const body = (await resp.json());
|
|
116
|
+
if (body?.configured === true) {
|
|
117
|
+
logQueryStatus = "✓ Configured (WebDAV log access ready)";
|
|
118
|
+
}
|
|
119
|
+
else {
|
|
120
|
+
const msg = typeof body?.message === "string" ? body.message : "Not configured";
|
|
121
|
+
logQueryStatus = `✗ ${msg}`;
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
catch (err) {
|
|
126
|
+
logQueryStatus = `✗ Resolution error: ${err instanceof Error ? err.message : String(err)}`;
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
lines.push(`6. SFCC Log Query (WebDAV): ${logQueryStatus}`);
|
|
130
|
+
lines.push("\nRun `check_permissions` to probe OCAPI access once steps 1–5 are all green. " +
|
|
131
|
+
"Step 6 (log/WebDAV access) is independent and gates `sfcc_log_query`.");
|
|
102
132
|
return {
|
|
103
133
|
content: [{ type: "text", text: lines.join("\n") }],
|
|
104
134
|
};
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
// AUTO-GENERATED — do not edit manually. Regenerate with: npm run build
|
|
2
|
-
export const VERSION = "0.2.
|
|
2
|
+
export const VERSION = "0.2.24";
|
|
@@ -8,7 +8,7 @@ involve Conductor — you opt in per run with `--conductor`.
|
|
|
8
8
|
This document is the reference for Conductor's architecture, epic setup,
|
|
9
9
|
observability stream, local git hooks, and the per-repo done-gate / auto-merge
|
|
10
10
|
config. For the everyday `start-tickets` flags and cross-platform behavior, see
|
|
11
|
-
[README → CLI Subcommands](
|
|
11
|
+
[README → CLI Subcommands](../README.md#cli-subcommands).
|
|
12
12
|
|
|
13
13
|
## Epic Conductor v2 — how an epic is actually driven
|
|
14
14
|
|
|
@@ -81,7 +81,7 @@ blocks or aborts a spawn, and `--dry-run` performs no conductor side effects.
|
|
|
81
81
|
When `--conductor` is set, the spawn boundary also injects
|
|
82
82
|
`BRIDGE_MCP_PROFILE=conductor` so each worker registers the 8 conductor/event/
|
|
83
83
|
supervisor MCP tools (a plain `start-tickets` run stays on the default `core`
|
|
84
|
-
profile). See [README → Environment Variables](
|
|
84
|
+
profile). See [README → Environment Variables](../README.md#environment-variables).
|
|
85
85
|
|
|
86
86
|
## `conductor install-git-hooks` (BAPI-395)
|
|
87
87
|
|
|
@@ -0,0 +1,189 @@
|
|
|
1
|
+
# Installing the Bridge GitHub App
|
|
2
|
+
|
|
3
|
+
Bridge connects to GitHub through a **GitHub App**, not a personal access token. Once
|
|
4
|
+
the app is installed on your repository and linked to your Bridge project, Bridge can
|
|
5
|
+
open pull requests, run automated code review, read CI check status, and (when enabled)
|
|
6
|
+
auto-merge — all using short-lived, per-call installation tokens. Your code and
|
|
7
|
+
credentials stay on GitHub; Bridge mints a fresh token for each operation and stores no
|
|
8
|
+
long-lived GitHub token.
|
|
9
|
+
|
|
10
|
+
## The app
|
|
11
|
+
|
|
12
|
+
| | |
|
|
13
|
+
|---|---|
|
|
14
|
+
| **Name** | Bridge GPT - AI Tools for SFCC |
|
|
15
|
+
| **Owner** | [@Bridge-GPT](https://github.com/Bridge-GPT) |
|
|
16
|
+
| **Public install page** | <https://github.com/apps/bridge-gpt-ai-tools-for-sfcc> |
|
|
17
|
+
| **App ID** | `954077` |
|
|
18
|
+
| **Client ID** | `Iv23liBEyDUeD25W06ix` |
|
|
19
|
+
|
|
20
|
+
> The App ID and Client ID are **public** identifiers (GitHub shows them on the app's
|
|
21
|
+
> settings page). They are not secrets. Only the app's **private key** and webhook
|
|
22
|
+
> secret are sensitive, and those are held by whoever operates the Bridge deployment —
|
|
23
|
+
> see [Self-hosting / operator setup](#self-hosting--operator-setup) at the end. As an
|
|
24
|
+
> end user you never handle them.
|
|
25
|
+
|
|
26
|
+
## Prerequisites
|
|
27
|
+
|
|
28
|
+
- A GitHub repository you want Bridge to work on.
|
|
29
|
+
- Permission to install a GitHub App on the account that owns it:
|
|
30
|
+
- **Personal repo:** you can install it yourself.
|
|
31
|
+
- **Organization repo:** you must be an **organization owner**, or a member who can
|
|
32
|
+
*request* the install for an owner to approve. (GitHub decides which button you see —
|
|
33
|
+
**Install**, **Install & request**, or **Request** — based on your role.)
|
|
34
|
+
- Your Bridge project already registered (you have a Bridge API key and repo name).
|
|
35
|
+
|
|
36
|
+
---
|
|
37
|
+
|
|
38
|
+
## Option A — Connect GitHub button (recommended)
|
|
39
|
+
|
|
40
|
+
This is the normal path. Bridge captures the installation automatically — you never copy
|
|
41
|
+
an ID by hand.
|
|
42
|
+
|
|
43
|
+
1. Open your project's **Get Started** page in the Bridge web UI.
|
|
44
|
+
2. Click **Connect GitHub**. Bridge mints a short-lived, single-use link scoped to your
|
|
45
|
+
project and sends you to GitHub's app-install screen.
|
|
46
|
+
3. On GitHub, choose the **account or organization** that owns the repository.
|
|
47
|
+
4. Under **Repository access**, choose **Only select repositories** and pick the repo(s)
|
|
48
|
+
you want Bridge to cover (or **All repositories**). See
|
|
49
|
+
[Choosing repositories](#choosing-repositories) below.
|
|
50
|
+
5. Review the requested permissions and click **Install** (or **Install & request** /
|
|
51
|
+
**Request** if an org owner must approve).
|
|
52
|
+
6. GitHub redirects you back to Bridge. Bridge verifies the installation directly with
|
|
53
|
+
GitHub, links it to your project, and stores the installation automatically. If the
|
|
54
|
+
installation covers exactly one repo — or one repo clearly matches your project —
|
|
55
|
+
Bridge binds it for you; otherwise it shows a short **repository picker** so you can
|
|
56
|
+
confirm which repo maps to this project.
|
|
57
|
+
|
|
58
|
+
That's it — no manual ID entry. If the automatic link fails for any reason, Bridge tells
|
|
59
|
+
you and points you to Option B.
|
|
60
|
+
|
|
61
|
+
---
|
|
62
|
+
|
|
63
|
+
## Option B — Manual install + Installation ID (fallback)
|
|
64
|
+
|
|
65
|
+
Use this if the Connect GitHub button isn't available to you, or automatic linking
|
|
66
|
+
failed.
|
|
67
|
+
|
|
68
|
+
### 1. Install the app
|
|
69
|
+
|
|
70
|
+
Go to the public install page and install it on the owning account/organization,
|
|
71
|
+
selecting the repository/repositories you want Bridge to access:
|
|
72
|
+
|
|
73
|
+
<https://github.com/apps/bridge-gpt-ai-tools-for-sfcc/installations/new>
|
|
74
|
+
|
|
75
|
+
(Same repository-selection and permissions-review screen as Option A, steps 3–5.)
|
|
76
|
+
|
|
77
|
+
### 2. Find the Installation ID
|
|
78
|
+
|
|
79
|
+
The Installation ID is the trailing number in the app's **Configure** URL:
|
|
80
|
+
|
|
81
|
+
- **Personal account:** open **Settings → Applications → Installed GitHub Apps**, click
|
|
82
|
+
**Configure** next to *Bridge GPT - AI Tools for SFCC*. The URL is
|
|
83
|
+
`https://github.com/settings/installations/<INSTALLATION_ID>`.
|
|
84
|
+
- **Organization:** open **Organization Settings → Third-party Access → GitHub Apps**,
|
|
85
|
+
click **Configure** next to the app. The URL is
|
|
86
|
+
`https://github.com/organizations/<ORG>/settings/installations/<INSTALLATION_ID>`.
|
|
87
|
+
|
|
88
|
+
For example, `https://github.com/organizations/Bridge-GPT/settings/installations/61661616`
|
|
89
|
+
has Installation ID **`61661616`**.
|
|
90
|
+
|
|
91
|
+
### 3. Enter it in Bridge
|
|
92
|
+
|
|
93
|
+
On your project's **Setup** page, in the GitHub section, paste the **Installation ID**
|
|
94
|
+
into the field provided and save. Make sure the project's **version control system** is
|
|
95
|
+
set to `github`. Bridge fills in the account owner and repository from your project
|
|
96
|
+
settings.
|
|
97
|
+
|
|
98
|
+
---
|
|
99
|
+
|
|
100
|
+
## Choosing repositories
|
|
101
|
+
|
|
102
|
+
When installing (either option), GitHub asks which repositories the app may access:
|
|
103
|
+
|
|
104
|
+
- **All repositories** — the app can access every current and future repo on the account.
|
|
105
|
+
- **Only select repositories** — pick specific repos from the **Select repositories**
|
|
106
|
+
dropdown. Recommended: grant only the repo(s) you actually want Bridge to work on.
|
|
107
|
+
|
|
108
|
+
You can change this later at any time: **Configure** the installation (paths above),
|
|
109
|
+
adjust **Repository access**, and click **Save**. If the app creates a repository, it is
|
|
110
|
+
automatically granted access to that repo.
|
|
111
|
+
|
|
112
|
+
## What the app can access
|
|
113
|
+
|
|
114
|
+
At install time GitHub shows the **authoritative** list of permissions the app requests —
|
|
115
|
+
review it there. Functionally, the Bridge integration exercises these GitHub permissions:
|
|
116
|
+
|
|
117
|
+
| Permission | Why |
|
|
118
|
+
|---|---|
|
|
119
|
+
| **Contents** (read & write) | Read repo files for parsing/review; manage branch refs when opening/cleaning up PRs |
|
|
120
|
+
| **Pull requests** (read & write) | List/read PRs and diffs; post review comments and reviews; merge when auto-merge is enabled |
|
|
121
|
+
| **Checks / Commit statuses** (read) | Poll CI check-run and status results for a commit |
|
|
122
|
+
| **Administration** (read) | Read branch-protection required-status-checks to resolve which checks must pass |
|
|
123
|
+
| **Metadata** (read) | Baseline repo metadata; verify the installation's repository list |
|
|
124
|
+
| **Webhook events** | Receive `pull_request`, `installation`, and review/merge events that drive automated review and merge |
|
|
125
|
+
|
|
126
|
+
> These are inferred from the GitHub REST endpoints the integration calls. The exact set
|
|
127
|
+
> the app is *registered* with is shown by GitHub on the install screen; treat that
|
|
128
|
+
> screen as the source of truth.
|
|
129
|
+
|
|
130
|
+
## Verifying the connection
|
|
131
|
+
|
|
132
|
+
After linking, confirm Bridge can act on the repo:
|
|
133
|
+
|
|
134
|
+
- The Bridge **Setup / integration status** should show version control as connected.
|
|
135
|
+
- A Bridge operation that needs GitHub — e.g. `create_pull_request`, `resolve_ci_checks`,
|
|
136
|
+
or `poll_ci_checks` from the MCP — should succeed rather than return a
|
|
137
|
+
"no VCS connection" refusal. (See
|
|
138
|
+
[MCP Tool Integration Dependencies](./mcp-tool-integrations.md) for which tools require
|
|
139
|
+
a VCS connection.)
|
|
140
|
+
|
|
141
|
+
If a GitHub-dependent tool refuses, the installation isn't linked to that project yet —
|
|
142
|
+
re-run Option A, or set the Installation ID via Option B.
|
|
143
|
+
|
|
144
|
+
## Managing or removing the app
|
|
145
|
+
|
|
146
|
+
- **Change repo access / review permissions:** **Configure** the installation (URLs
|
|
147
|
+
above) → adjust **Repository access** → **Save**.
|
|
148
|
+
- **Uninstall:** on the same Configure page, scroll to **Danger zone → Uninstall**.
|
|
149
|
+
Uninstalling revokes Bridge's access immediately; existing stored installation IDs stop
|
|
150
|
+
working.
|
|
151
|
+
|
|
152
|
+
---
|
|
153
|
+
|
|
154
|
+
## Self-hosting / operator setup
|
|
155
|
+
|
|
156
|
+
*Skip this section if you are an end user connecting to a hosted Bridge deployment — it is
|
|
157
|
+
for whoever runs the Bridge API server.*
|
|
158
|
+
|
|
159
|
+
The GitHub App identity is configured **once per deployment** via environment variables.
|
|
160
|
+
Bridge uses the App private key to mint short-lived installation tokens on demand; it
|
|
161
|
+
persists no long-lived GitHub token.
|
|
162
|
+
|
|
163
|
+
| Env var | Value / purpose |
|
|
164
|
+
|---|---|
|
|
165
|
+
| `GIT_APP_ID` | The app's numeric App ID — `954077` for *Bridge GPT - AI Tools for SFCC*. |
|
|
166
|
+
| `GIT_PRIVATE_KEY` | **base64-encoded PEM** private key generated for the app (GitHub → app settings → *Generate a private key*). This is the one true secret. |
|
|
167
|
+
| `GITHUB_APP_INSTALL_URL` | The public install URL the **Connect GitHub** button sends users to: `https://github.com/apps/bridge-gpt-ai-tools-for-sfcc/installations/new`. |
|
|
168
|
+
| `GITHUB_WEBHOOK_SECRET` | App-level shared secret validating signed `installation` / merge webhooks. If unset, those webhooks are disabled (the redirect-callback path still works). |
|
|
169
|
+
| `BGPT_ENCRYPTION_KEY` | Fernet key used to encrypt per-repo credentials at rest. |
|
|
170
|
+
|
|
171
|
+
The app's **Setup URL** (in GitHub app settings) must point at the deployment's
|
|
172
|
+
`GET /setup/github/callback` endpoint so the post-install redirect can auto-link the
|
|
173
|
+
installation. Webhook endpoints used by the integration include the code-review hook
|
|
174
|
+
(e.g. `https://<deployment-host>/github/code-review`); configure these on the app to match
|
|
175
|
+
your deployment host.
|
|
176
|
+
|
|
177
|
+
> **Note:** an older placeholder app slug (`bridge-gpt-code-reviewer`) still appears as a
|
|
178
|
+
> stale default string in the codebase. The runtime install URL and App ID always come
|
|
179
|
+
> from `GITHUB_APP_INSTALL_URL` / `GIT_APP_ID`, so set those to the `954077` /
|
|
180
|
+
> `bridge-gpt-ai-tools-for-sfcc` values above rather than relying on the code default.
|
|
181
|
+
|
|
182
|
+
## See also
|
|
183
|
+
|
|
184
|
+
- [MCP Tool Integration Dependencies](./mcp-tool-integrations.md) — which MCP tools need a
|
|
185
|
+
VCS connection (BLOCK) vs merely degrade without one.
|
|
186
|
+
- [Installing the SFCC Integration (OCAPI)](./sfcc-integration.md) — the separate
|
|
187
|
+
Salesforce B2C sandbox integration.
|
|
188
|
+
- GitHub docs: [Installing a GitHub App from a third party](https://docs.github.com/en/apps/using-github-apps/installing-a-github-app-from-a-third-party),
|
|
189
|
+
[Reviewing and modifying installed GitHub Apps](https://docs.github.com/en/apps/using-github-apps/reviewing-and-modifying-installed-github-apps).
|
|
@@ -0,0 +1,305 @@
|
|
|
1
|
+
# MCP Tools — Integration Dependencies
|
|
2
|
+
|
|
3
|
+
This catalog lists every tool exposed by the Bridge API MCP server
|
|
4
|
+
(`@bridge_gpt/mcp-server`) and the external integrations each one depends on. It
|
|
5
|
+
answers a single operational question: *before I call this tool, what needs to be
|
|
6
|
+
connected, and what happens if it isn't?*
|
|
7
|
+
|
|
8
|
+
For the tool **reference** (parameters, endpoints, examples) see the
|
|
9
|
+
[package README](../../README.md). The dependency classes below are not editorial —
|
|
10
|
+
they mirror the enforced policy in the Bridge API backend
|
|
11
|
+
(`api/library/vcs/vcs_route_operations.py`, the single source of truth for
|
|
12
|
+
route → capability gating, and its probes in `api/library/vcs/vcs_preflight.py`).
|
|
13
|
+
|
|
14
|
+
## Two dependency classes
|
|
15
|
+
|
|
16
|
+
- **BLOCK** — the tool refuses, or its output is untrustworthy enough that it should
|
|
17
|
+
not be used, without the integration. This covers both hard blockers (the backend
|
|
18
|
+
returns a refusal) and "no local alternative" tools. Codebase-grounded generators
|
|
19
|
+
are blocked on an unindexed repo on purpose: *"plan output on an unindexed repo is
|
|
20
|
+
worthless"* (`api/routes/jira_api.py`). In code, BLOCK ≈ `VCS_ROUTE_REQUIREMENTS`
|
|
21
|
+
(VCS-credential refusal) + `INDEX_REQUIRED_ROUTE_KEYS` (parse/index refusal).
|
|
22
|
+
|
|
23
|
+
- **DEGRADE** — the tool still runs and returns useful output, but quality is weaker
|
|
24
|
+
without the integration. In code, DEGRADE ≈ `VCS_ROUTE_WARNINGS` (Tier-4
|
|
25
|
+
"warn, never block"): the shared research helper `plan_researcher` returns *empty*
|
|
26
|
+
code research instead of erroring, so the tool falls back to ticket text alone and
|
|
27
|
+
attaches a non-blocking disclosure.
|
|
28
|
+
|
|
29
|
+
**Baseline (assumed for every tool, not repeated below):** every non-`LOCAL` tool
|
|
30
|
+
needs the Bridge API reachable plus a valid API key with repo access
|
|
31
|
+
(`verify_repo_access`); every AI tool needs an LLM provider (platform-managed).
|
|
32
|
+
`LOCAL` tools make no backend call at all. A tool with no integration dependency is
|
|
33
|
+
marked **— none**.
|
|
34
|
+
|
|
35
|
+
## Integrations glossary
|
|
36
|
+
|
|
37
|
+
| Integration | What "connected" means | Where configured |
|
|
38
|
+
|---|---|---|
|
|
39
|
+
| **Ticket backend** | A ticket store in the repo's `ticket_backend_mode` — `jira` (Jira connection) or `local` (Postgres, no external service). Default is `jira`. | `config_projects.ticket_backend_mode`; Jira token in `config_projects_access` |
|
|
40
|
+
| **Jira (only)** | A live Jira connection specifically — for surfaces with no local-mode equivalent (comment threads, binary attachments). | `config_projects_access.jira_api_token` |
|
|
41
|
+
| **Version control (VCS)** | GitHub App or Bitbucket credentials for the repo. | `git_app_installation_id` / `git_app_owner` (GitHub) or `workspace` / `version_control_access_token` (Bitbucket) |
|
|
42
|
+
| **Code index** | A **succeeded** `parse_repository` run (Pinecone code embeddings). A repo can have valid VCS creds yet never have been parsed. | `config_projects_access.pinecone_index_name`; status in `repository_parse_runs` / `code_repositories` |
|
|
43
|
+
| **SFCC OCAPI** | Salesforce B2C sandbox OCAPI access: `dw.json` / AM token + `version` config field + OCAPI grants. | `dw.json`, `version` config field, OCAPI data-API grants |
|
|
44
|
+
| **SFCC WebDAV logs** | WebDAV log credentials (separate from OCAPI) plus the `sfcc_log_monitor_enabled` flag. | `sfcc_webdav_hostname/username/access_key`, `sfcc_log_monitor_enabled` |
|
|
45
|
+
| **Deep-research flag** | The `deep_research_enabled` config flag on the project (403 otherwise). Web research runs via Gemini/OpenAI. | `config_projects.deep_research_enabled` |
|
|
46
|
+
| **Image provider** | An image model provider (OpenAI DALL·E / Google Imagen). | platform provider config |
|
|
47
|
+
| **Conductor ledger** | The local conductor event ledger (`~/.config/bridge/events.db`) — a local file, not a remote service. | local file |
|
|
48
|
+
|
|
49
|
+
## Profiles (a form of BLOCK)
|
|
50
|
+
|
|
51
|
+
The server registers **90 tools** total, gated by `BRIDGE_MCP_PROFILE`
|
|
52
|
+
(comma-separated group list, resolved once at startup by
|
|
53
|
+
`mcp_server/src/mcp-profile.ts`). A tool outside
|
|
54
|
+
the active profile is **not registered at all** — an absolute block until the group is
|
|
55
|
+
activated. `core` is always implicitly included.
|
|
56
|
+
|
|
57
|
+
| Profile | Tools | Registered when |
|
|
58
|
+
|---|---|---|
|
|
59
|
+
| `core` | **57** | always |
|
|
60
|
+
| `pipeline-authoring` | **+5** | `BRIDGE_MCP_PROFILE` includes `pipeline-authoring` or `full` |
|
|
61
|
+
| `conductor` | **+8** | includes `conductor` or `full` |
|
|
62
|
+
| `sfcc` | **+20** (2 diagnostics ship in `core`; 18 gated) | includes `sfcc` or `full` |
|
|
63
|
+
|
|
64
|
+
(57 core + 5 + 8 + 20 = 90. The 5 pipeline-authoring tools live in `index.ts` alongside
|
|
65
|
+
core, gated by `ACTIVE_GROUPS.has("pipeline-authoring")`, so `index.ts` holds 62
|
|
66
|
+
`registerTool` calls.)
|
|
67
|
+
|
|
68
|
+
---
|
|
69
|
+
|
|
70
|
+
## Core profile (57)
|
|
71
|
+
|
|
72
|
+
### Connectivity, config & setup — no integration deps
|
|
73
|
+
|
|
74
|
+
These are never gated (`NEVER_GATED_ROUTE_KEYS`) or run entirely locally.
|
|
75
|
+
|
|
76
|
+
| Tool | Dependencies (class) |
|
|
77
|
+
|---|---|
|
|
78
|
+
| `ping` | — none |
|
|
79
|
+
| `get_project_standards` | — none |
|
|
80
|
+
| `get_my_role` | — none |
|
|
81
|
+
| `config_field` (get/update/list) | — none |
|
|
82
|
+
| `get_install_manifest` | — none |
|
|
83
|
+
| `apply_install_manifest` | — none |
|
|
84
|
+
| `persist_routing_credential` | — none (`LOCAL`) |
|
|
85
|
+
| `get_docs_dir` | — none (`LOCAL`) |
|
|
86
|
+
| `get_parse_status` | — none |
|
|
87
|
+
| `track_ticket` | — none (Bridge DB tracking record) |
|
|
88
|
+
| `update_ticket_state` | — none (Bridge DB) |
|
|
89
|
+
| `get_ticket_state` | — none (Bridge DB) |
|
|
90
|
+
| `get_ticket_model_tier` | — none (Bridge DB difficulty) |
|
|
91
|
+
| `get_pipeline_recipe` | — none (`LOCAL`, bundled recipes) |
|
|
92
|
+
| `generate_decision_page` | — none (`LOCAL` HTML) |
|
|
93
|
+
| `cleanup_fresh_base` | — none (`LOCAL`) |
|
|
94
|
+
|
|
95
|
+
### Ticket CRUD — ticket backend
|
|
96
|
+
|
|
97
|
+
Backend-agnostic (work in `jira` **or** `local` mode; Jira-named for v1 compatibility).
|
|
98
|
+
BLOCK applies only in `jira` mode without a Jira connection — `local` mode needs no
|
|
99
|
+
external integration.
|
|
100
|
+
|
|
101
|
+
| Tool | Dependencies (class) |
|
|
102
|
+
|---|---|
|
|
103
|
+
| `create_ticket` | Ticket backend **[BLOCK in jira mode]** |
|
|
104
|
+
| `get_tickets` | Ticket backend **[BLOCK in jira mode]** |
|
|
105
|
+
| `get_ticket` | Ticket backend **[BLOCK in jira mode]** |
|
|
106
|
+
| `update_ticket_description` | Ticket backend **[BLOCK in jira mode]** |
|
|
107
|
+
| `update_jira_status` | Ticket backend **[BLOCK in jira mode]** (local sets a fixed status) |
|
|
108
|
+
| `get_jira_transitions` | Ticket backend **[BLOCK in jira mode]** (local returns fixed statuses) |
|
|
109
|
+
|
|
110
|
+
Jira-only — no local-mode equivalent (comment threads and binary attachments are out of
|
|
111
|
+
scope for local v1):
|
|
112
|
+
|
|
113
|
+
| Tool | Dependencies (class) |
|
|
114
|
+
|---|---|
|
|
115
|
+
| `get_comments` | Jira (only) **[BLOCK]** |
|
|
116
|
+
| `add_comment` | Jira (only) **[BLOCK]** |
|
|
117
|
+
| `attachment` (upload/download/list) | Jira (only) **[BLOCK]** |
|
|
118
|
+
|
|
119
|
+
### AI ticket-artifact generators — ticket backend + VCS + code index
|
|
120
|
+
|
|
121
|
+
All read the ticket through the ticket-store seam (`_fetch_ticket_webhook_payload` →
|
|
122
|
+
`ticket_store_lib.get_ticket`, which the local store fully supports), so they run in
|
|
123
|
+
`local` mode too — they are **not** hard-Jira-blocked. Their VCS/index behavior splits
|
|
124
|
+
by tier.
|
|
125
|
+
|
|
126
|
+
**Tier-3 — codebase-grounded (refuse without VCS creds AND a succeeded parse):**
|
|
127
|
+
|
|
128
|
+
| Tool (request / retrieve) | Dependencies (class) |
|
|
129
|
+
|---|---|
|
|
130
|
+
| `request_plan_generation` / `get_plan` | Ticket backend [BLOCK in jira mode] · VCS **[BLOCK]** · Code index **[BLOCK]** |
|
|
131
|
+
| `request_architecture` / `get_architecture` | Ticket backend [BLOCK in jira mode] · VCS **[BLOCK]** · Code index **[BLOCK]** |
|
|
132
|
+
| `request_reimplement_context` / `get_reimplement_context` | Ticket backend [BLOCK in jira mode] · VCS **[BLOCK]** · Code index **[BLOCK]** |
|
|
133
|
+
| `create_doc` / `get_doc` — `doc_type` ∈ {tdd, architecture} | Ticket backend [BLOCK in jira mode] · VCS **[BLOCK]** · Code index **[BLOCK]** |
|
|
134
|
+
|
|
135
|
+
**Tier-4 — ticket-text (warn, never block; research empties without index):**
|
|
136
|
+
|
|
137
|
+
| Tool (request / retrieve) | Dependencies (class) |
|
|
138
|
+
|---|---|
|
|
139
|
+
| `request_clarifying_questions` / `get_clarifying_questions` | Ticket backend [BLOCK in jira mode] · VCS **[DEGRADE]** · Code index **[DEGRADE]** |
|
|
140
|
+
| `request_ticket_critique` / `get_ticket_critique` | Ticket backend [BLOCK in jira mode] · VCS **[DEGRADE]** · Code index **[DEGRADE]** |
|
|
141
|
+
| `request_ticket_review` | Ticket backend [BLOCK in jira mode] · VCS **[DEGRADE]** · Code index **[DEGRADE]** |
|
|
142
|
+
| `request_prd` / `get_prd` | Ticket backend [BLOCK in jira mode] · VCS **[DEGRADE]** · Code index **[DEGRADE]** |
|
|
143
|
+
| `create_doc` / `get_doc` — `doc_type` ∈ {prd, fsd} | Ticket backend [BLOCK in jira mode] · VCS **[DEGRADE]** · Code index **[DEGRADE]** |
|
|
144
|
+
|
|
145
|
+
**Estimation:**
|
|
146
|
+
|
|
147
|
+
| Tool | Dependencies (class) |
|
|
148
|
+
|---|---|
|
|
149
|
+
| `estimate_epic` | Jira **[BLOCK]** (resolves the repo from `jira_ticket_key`); no code-index dep |
|
|
150
|
+
|
|
151
|
+
### Repository parse / index — VCS
|
|
152
|
+
|
|
153
|
+
| Tool | Dependencies (class) |
|
|
154
|
+
|---|---|
|
|
155
|
+
| `parse_repository` | VCS **[BLOCK]** (Tier-2; refuses without a VCS connection — it *produces* the index) |
|
|
156
|
+
| `regenerate_directory_map` | VCS **[BLOCK]** (Tier-2) |
|
|
157
|
+
|
|
158
|
+
### LLM utilities & research
|
|
159
|
+
|
|
160
|
+
| Tool | Dependencies (class) |
|
|
161
|
+
|---|---|
|
|
162
|
+
| `second_opinion` | — none (pure LLM; repo access only) |
|
|
163
|
+
| `generate_image` | — none beyond an image provider |
|
|
164
|
+
| `visual_diff` | — none (`LOCAL` render + pixel diff; needs a reachable `target_url`) |
|
|
165
|
+
| `request_deep_research` / `get_deep_research` | Deep-research flag **[BLOCK]** (403 if `deep_research_enabled` off) |
|
|
166
|
+
| `request_brainstorm` / `get_brainstorm` | Code index **[BLOCK] for `technical`/`discovery` modes**; **— none for `design` mode** |
|
|
167
|
+
|
|
168
|
+
### VCS & CI
|
|
169
|
+
|
|
170
|
+
| Tool | Dependencies (class) |
|
|
171
|
+
|---|---|
|
|
172
|
+
| `create_pull_request` | VCS **[BLOCK]** (Tier-1) |
|
|
173
|
+
| `resolve_ci_checks` | VCS **[BLOCK]** (Tier-1) |
|
|
174
|
+
| `poll_ci_checks` | VCS **[BLOCK]** (Tier-1); also **hidden until `ci_check_config` is resolved** (needs a prior `resolve_ci_checks`) |
|
|
175
|
+
| `materialize_fresh_base` | VCS / git base ref **[BLOCK]** (Tier-1; materializes a pinned base tree) |
|
|
176
|
+
|
|
177
|
+
### Full-automation (composite)
|
|
178
|
+
|
|
179
|
+
These orchestrate an idea → ticket → review → start chain, so they inherit the
|
|
180
|
+
**strictest** dependency of every child step.
|
|
181
|
+
|
|
182
|
+
| Tool | Dependencies (class) |
|
|
183
|
+
|---|---|
|
|
184
|
+
| `run_full_automation` | Ticket backend [BLOCK in jira mode] · VCS **[BLOCK]** · Code index **[BLOCK]** (via child plan/review steps) |
|
|
185
|
+
| `resume_full_automation` | Same as `run_full_automation` |
|
|
186
|
+
|
|
187
|
+
---
|
|
188
|
+
|
|
189
|
+
## `pipeline-authoring` profile (5)
|
|
190
|
+
|
|
191
|
+
Profile-gated **[BLOCK]** to register at all. `run_pipeline` / `resume_pipeline`
|
|
192
|
+
additionally inherit the dependencies of whatever steps the invoked pipeline runs
|
|
193
|
+
(e.g. the `implement-ticket` pipeline pulls in ticket-backend + VCS + code-index deps).
|
|
194
|
+
Run state is persisted via the Bridge API.
|
|
195
|
+
|
|
196
|
+
| Tool | Dependencies (class) |
|
|
197
|
+
|---|---|
|
|
198
|
+
| `list_pipelines` | Profile-gated **[BLOCK]** |
|
|
199
|
+
| `run_pipeline` | Profile-gated **[BLOCK]** · inherits invoked pipeline's step deps |
|
|
200
|
+
| `resume_pipeline` | Profile-gated **[BLOCK]** · inherits invoked pipeline's step deps |
|
|
201
|
+
| `list_pipeline_runs` | Profile-gated **[BLOCK]** |
|
|
202
|
+
| `delete_pipeline_run` | Profile-gated **[BLOCK]** |
|
|
203
|
+
|
|
204
|
+
---
|
|
205
|
+
|
|
206
|
+
## `conductor` profile (8)
|
|
207
|
+
|
|
208
|
+
Profile-gated **[BLOCK]** to register. Most operate on the **local** conductor ledger
|
|
209
|
+
(`~/.config/bridge/events.db`), so beyond the profile gate they have no remote
|
|
210
|
+
integration dependency.
|
|
211
|
+
|
|
212
|
+
| Tool | Dependencies (class) |
|
|
213
|
+
|---|---|
|
|
214
|
+
| `emit_event` | Profile-gated **[BLOCK]**; else `LOCAL` ledger |
|
|
215
|
+
| `poll_events` | Profile-gated **[BLOCK]**; else `LOCAL` ledger |
|
|
216
|
+
| `wait_for_event` | Profile-gated **[BLOCK]**; else `LOCAL` ledger |
|
|
217
|
+
| `get_supervisor_snapshot` | Profile-gated **[BLOCK]**; else `LOCAL` ledger |
|
|
218
|
+
| `send_message` | Profile-gated **[BLOCK]**; else `LOCAL` relay |
|
|
219
|
+
| `check_messages` | Profile-gated **[BLOCK]**; else `LOCAL` relay |
|
|
220
|
+
| `get_epic_snapshot` | Profile-gated **[BLOCK]** · Bridge API epic snapshot (Jira epic keys) |
|
|
221
|
+
| `wait_for_done_gate` | Profile-gated **[BLOCK]** · VCS **[BLOCK]** (resolves PR number + head SHA) |
|
|
222
|
+
|
|
223
|
+
---
|
|
224
|
+
|
|
225
|
+
## `sfcc` group (20)
|
|
226
|
+
|
|
227
|
+
### Always-on diagnostics (ship in `core`)
|
|
228
|
+
|
|
229
|
+
| Tool | Dependencies (class) |
|
|
230
|
+
|---|---|
|
|
231
|
+
| `sfcc_setup_status` | — none (its purpose is to report which SFCC prerequisites are missing) |
|
|
232
|
+
| `check_permissions` | SFCC OCAPI **[BLOCK]** (probes OCAPI; reports not-OK without access / version config) |
|
|
233
|
+
|
|
234
|
+
### Gated behind the `sfcc` group (18)
|
|
235
|
+
|
|
236
|
+
All are profile-gated **[BLOCK]** to register, and all require SFCC OCAPI creds +
|
|
237
|
+
`version` config + a reachable sandbox → SFCC OCAPI **[BLOCK]**. Writes are
|
|
238
|
+
sandbox-only and destructive.
|
|
239
|
+
|
|
240
|
+
**Reads (8):**
|
|
241
|
+
|
|
242
|
+
| Tool | Dependencies (class) |
|
|
243
|
+
|---|---|
|
|
244
|
+
| `system_object_list` | Profile-gated **[BLOCK]** · SFCC OCAPI **[BLOCK]** |
|
|
245
|
+
| `system_object_get` | Profile-gated **[BLOCK]** · SFCC OCAPI **[BLOCK]** |
|
|
246
|
+
| `system_object_attribute_search` | Profile-gated **[BLOCK]** · SFCC OCAPI **[BLOCK]** |
|
|
247
|
+
| `custom_object_definition_attributes_get` | Profile-gated **[BLOCK]** · SFCC OCAPI **[BLOCK]** |
|
|
248
|
+
| `custom_object_definition_attribute_search` | Profile-gated **[BLOCK]** · SFCC OCAPI **[BLOCK]** |
|
|
249
|
+
| `site_preference_group_list` | Profile-gated **[BLOCK]** · SFCC OCAPI **[BLOCK]** |
|
|
250
|
+
| `site_preference_get` | Profile-gated **[BLOCK]** · SFCC OCAPI **[BLOCK]** |
|
|
251
|
+
| `site_preference_search` | Profile-gated **[BLOCK]** · SFCC OCAPI **[BLOCK]** |
|
|
252
|
+
|
|
253
|
+
**Writes (9, sandbox-only):**
|
|
254
|
+
|
|
255
|
+
| Tool | Dependencies (class) |
|
|
256
|
+
|---|---|
|
|
257
|
+
| `system_object_attribute_definition_create` | Profile-gated **[BLOCK]** · SFCC OCAPI write **[BLOCK]** |
|
|
258
|
+
| `system_object_attribute_definition_update` | Profile-gated **[BLOCK]** · SFCC OCAPI write **[BLOCK]** |
|
|
259
|
+
| `system_object_attribute_group_create` | Profile-gated **[BLOCK]** · SFCC OCAPI write **[BLOCK]** |
|
|
260
|
+
| `system_object_attribute_group_update` | Profile-gated **[BLOCK]** · SFCC OCAPI write **[BLOCK]** |
|
|
261
|
+
| `system_object_attribute_assign_to_group` | Profile-gated **[BLOCK]** · SFCC OCAPI write **[BLOCK]** |
|
|
262
|
+
| `custom_preference_definition_create` | Profile-gated **[BLOCK]** · SFCC OCAPI write **[BLOCK]** |
|
|
263
|
+
| `custom_object_definition_attribute_create` | Profile-gated **[BLOCK]** · SFCC OCAPI write **[BLOCK]** |
|
|
264
|
+
| `custom_object_definition_attribute_update` | Profile-gated **[BLOCK]** · SFCC OCAPI write **[BLOCK]** |
|
|
265
|
+
| `site_preference_values_set` | Profile-gated **[BLOCK]** · SFCC OCAPI write **[BLOCK]** |
|
|
266
|
+
|
|
267
|
+
**Logs (1):**
|
|
268
|
+
|
|
269
|
+
| Tool | Dependencies (class) |
|
|
270
|
+
|---|---|
|
|
271
|
+
| `sfcc_log_query` | Profile-gated **[BLOCK]** · SFCC WebDAV creds **[BLOCK]** · `sfcc_log_monitor_enabled` **[BLOCK]** · required `environment` scope |
|
|
272
|
+
|
|
273
|
+
---
|
|
274
|
+
|
|
275
|
+
## Quick matrix: integration → dependent tools
|
|
276
|
+
|
|
277
|
+
| Integration | BLOCK without it | DEGRADE without it |
|
|
278
|
+
|---|---|---|
|
|
279
|
+
| **Ticket backend** (jira mode) | `create_ticket`, `get_ticket(s)`, `update_ticket_description`, `update_jira_status`, `get_jira_transitions`, and every AI generator (they read the ticket) | — |
|
|
280
|
+
| **Jira (only)** | `get_comments`, `add_comment`, `attachment`, `estimate_epic` | — |
|
|
281
|
+
| **Version control (VCS)** | `create_pull_request`, `resolve_ci_checks`, `poll_ci_checks`, `materialize_fresh_base`, `parse_repository`, `regenerate_directory_map`, `wait_for_done_gate`; **Tier-3** `request_plan_generation`/`get_plan`, `request_architecture`/`get_architecture`, `request_reimplement_context`/`get_reimplement_context`, `create_doc`(tdd/architecture) | **Tier-4** `request_clarifying_questions`, `request_ticket_critique`, `request_ticket_review`, `request_prd`, `create_doc`(prd/fsd) |
|
|
282
|
+
| **Code index** (succeeded parse) | Tier-3 plan/architecture/reimplement/`create_doc`(tdd/architecture); `request_brainstorm` in `technical`/`discovery` modes | Tier-4 clarifying-questions/critique/review/prd/fsd |
|
|
283
|
+
| **SFCC OCAPI** | `check_permissions` + all 16 SFCC read/write tools | — |
|
|
284
|
+
| **SFCC WebDAV logs** | `sfcc_log_query` | — |
|
|
285
|
+
| **Deep-research flag** | `request_deep_research`, `get_deep_research` | — |
|
|
286
|
+
| **Profile gating** | all `pipeline-authoring` (5), `conductor` (8), gated `sfcc` (18) tools | — |
|
|
287
|
+
|
|
288
|
+
## Notes & caveats
|
|
289
|
+
|
|
290
|
+
- **Refusals are graceful.** VCS/index BLOCKs are enforced by
|
|
291
|
+
`build_vcs_preflight_refusal_response`; they return a refusal in the route's normal
|
|
292
|
+
success-class status (e.g. 202 for job-submit routes) rather than a new 4xx/5xx, so a
|
|
293
|
+
capability gap never looks like a server error.
|
|
294
|
+
- **DEGRADE is deliberately non-fatal.** Tier-4 tools attach a disclosure via
|
|
295
|
+
`build_vcs_preflight_warning_disclosure`; `plan_researcher` returns empty research on
|
|
296
|
+
an unindexed repo instead of raising — the same fallback the Tier-3 routes rely on.
|
|
297
|
+
- **Index check fails open.** A transient DB error during the index probe collapses to
|
|
298
|
+
"available" (blocking an indexed repo on a flaky read is worse than a rare ungrounded
|
|
299
|
+
generation). Legacy repos parsed before `repository_parse_runs` existed fall back to a
|
|
300
|
+
`code_repositories` existence check and are not falsely refused.
|
|
301
|
+
- **Ticket-backend default is `jira`.** The seam is fail-safe: any config/DAL problem
|
|
302
|
+
resolves to `jira`, so a misconfigured repo behaves as jira-mode (and thus BLOCKs
|
|
303
|
+
without a Jira connection) rather than silently using local.
|
|
304
|
+
- **Baseline is assumed.** A reachable Bridge API + valid API key (and, for AI tools, an
|
|
305
|
+
LLM provider) underlies everything above and is not listed per tool.
|