@bridge_gpt/mcp-server 0.2.41 → 0.2.43
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 +330 -191
- package/build/agent-capabilities/cli.js +2 -1
- package/build/agent-launchers/claude-executor-adapter.js +17 -4
- package/build/agents.generated.js +2 -2
- package/build/claude-review-workflow.js +510 -45
- package/build/claude-user-config-doctor.js +42 -11
- package/build/cli-release.js +2 -1
- package/build/commands.generated.js +6 -5
- package/build/conduct-epic/bridge-client.js +354 -113
- package/build/conduct-epic/checkpoint-store.js +17 -0
- package/build/conduct-epic/cli.js +947 -99
- package/build/conduct-epic/cut-protocol.js +327 -0
- package/build/conduct-epic/spawn.js +14 -2
- package/build/conductor/bridge-api-client.js +148 -1
- package/build/conductor/cli.js +109 -1
- package/build/conductor/doctor.js +101 -16
- package/build/conductor/epic-reconcile.js +72 -19
- package/build/conductor/epic-runtime.js +15 -3
- package/build/conductor/errors.js +47 -0
- package/build/conductor/git-hooks.js +205 -11
- package/build/conductor/install-doctor.js +230 -1
- package/build/conductor/local-merge.js +130 -28
- package/build/conductor/recovery-cli.js +313 -0
- package/build/conductor/recovery-operations.js +219 -0
- package/build/conductor/tools.js +32 -3
- package/build/conductor/worker-ledger-cli.js +27 -1
- package/build/conductor-bin.js +20 -16
- package/build/credentials-cli.js +3 -2
- package/build/docs.generated.js +2 -1
- package/build/doctor.js +120 -44
- package/build/drive-epic.js +375 -0
- package/build/executor/cli.js +48 -1
- package/build/executor/env.js +21 -0
- package/build/executor/http-client.js +71 -3
- package/build/executor/index-scope.js +39 -0
- package/build/executor/job-errors.js +9 -0
- package/build/executor/job-log-registry.js +69 -0
- package/build/executor/job-runner.js +198 -29
- package/build/executor/live-worker-registry.js +83 -0
- package/build/executor/observation.js +259 -6
- package/build/executor/platform.js +147 -3
- package/build/executor/process.js +58 -14
- package/build/executor/runner.js +454 -48
- package/build/executor/test-clock.js +3 -2
- package/build/executor/worker-finalization.js +233 -56
- package/build/executor/worktree.js +8 -1
- package/build/index-scope-contract.js +96 -0
- package/build/index.js +2277 -270
- package/build/init.js +83 -22
- package/build/install-bridge-conductor.js +323 -14
- package/build/install-bridge.js +225 -47
- package/build/install-doctor.js +23 -9
- package/build/install-reexec.js +2 -1
- package/build/launcher-config-inspection.js +83 -22
- package/build/mcp-host-config.js +331 -67
- package/build/mcp-host-targets.js +45 -21
- package/build/mcp-identity.js +92 -0
- package/build/mcp-install-state.js +94 -1
- package/build/mcp-invoke.js +2 -1
- package/build/mcp-provisioning.js +45 -12
- package/build/mcp-registration-doctor.js +35 -13
- package/build/mcp-server-invocation.js +4 -2
- package/build/merge-pull-request.js +208 -9
- package/build/pipelines.generated.js +305 -15
- package/build/plane/cli.js +73 -7
- package/build/plane/defaults.js +18 -5
- package/build/plane/manifest.js +90 -0
- package/build/plane/preflight.js +100 -10
- package/build/plane/shutdown.js +71 -3
- package/build/plane/test-fakes.js +9 -1
- package/build/readme.generated.js +1 -1
- package/build/regression-check.js +3 -2
- package/build/review-tickets.js +8 -7
- package/build/run-unit-tests-launcher.js +149 -6
- package/build/schedule-run.js +3 -2
- package/build/setup-epic.js +531 -82
- package/build/sfcc/tool-wrapper.js +15 -0
- package/build/start-tickets-prereqs.js +11 -6
- package/build/start-tickets.js +91 -85
- package/build/update-check.js +3 -2
- package/build/upgrade-advice.js +2 -1
- package/build/upgrade-cli.js +50 -18
- package/build/version.generated.js +2 -1
- package/build/worktree-core.js +31 -17
- package/docs/CONDUCTOR.md +22 -0
- package/docs/install/mcp-tool-integrations.md +19 -3
- package/package.json +2 -2
- package/pipelines/greenfield-setup.json +286 -0
package/build/worktree-core.js
CHANGED
|
@@ -97,21 +97,32 @@ function pickWorktreePathField(parsed) {
|
|
|
97
97
|
return undefined;
|
|
98
98
|
}
|
|
99
99
|
/**
|
|
100
|
-
*
|
|
101
|
-
*
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
100
|
+
* The remediation sentence for a branch left over by a prior FAILED run.
|
|
101
|
+
* Unchanged since the guard was introduced.
|
|
102
|
+
*/
|
|
103
|
+
function staleLeftoverRemedy(branch, baseRef) {
|
|
104
|
+
return (`it carries commits not on the resolved base (likely a leftover from a prior run). ` +
|
|
105
|
+
`Refusing to reuse a stale worktree — delete it (git worktree remove + git branch -D ${branch}) ` +
|
|
106
|
+
`or rebase it onto ${baseRef}, then re-dispatch.`);
|
|
107
|
+
}
|
|
108
|
+
/**
|
|
109
|
+
* BAPI-862: the remediation for a branch that carries a SUCCEEDED implement whose
|
|
110
|
+
* pull request was never attached.
|
|
106
111
|
*
|
|
107
|
-
* `
|
|
108
|
-
*
|
|
109
|
-
*
|
|
110
|
-
*
|
|
111
|
-
*
|
|
112
|
-
* against the local `main` branch name.
|
|
112
|
+
* Names the `pr_not_attached` gate observation so the executor refusal and the
|
|
113
|
+
* reconciler's own state are one searchable vocabulary, points at attachment, and
|
|
114
|
+
* states plainly that the two remedies above destroy completed work. It must not
|
|
115
|
+
* contain the words "delete" or "rebase" at all: an operator scanning a wall of
|
|
116
|
+
* job output for the next command is exactly who lost work last time.
|
|
113
117
|
*/
|
|
114
|
-
|
|
118
|
+
function unattachedSuccessRemedy(branch) {
|
|
119
|
+
return (`it carries the commits of a SUCCEEDED implement whose pull request was never attached ` +
|
|
120
|
+
`(implement gate observation: pr_not_attached). Refusing to reuse the worktree — but this ` +
|
|
121
|
+
`branch is finished work, not a leftover. Open or attach a pull request from '${branch}' and ` +
|
|
122
|
+
`let the reconciler bind it. Do NOT remove or re-write the branch: either would destroy a ` +
|
|
123
|
+
`completed implementation.`);
|
|
124
|
+
}
|
|
125
|
+
export async function isExistingBranchSafeToReuse(deps, branch, baseStartPoint, classification = "unknown") {
|
|
115
126
|
let baseRef = baseStartPoint;
|
|
116
127
|
const originRef = `origin/${baseStartPoint}`;
|
|
117
128
|
const originExists = await deps.runCommand("git", ["rev-parse", "--verify", "--quiet", originRef], { cwd: deps.cwd });
|
|
@@ -122,11 +133,14 @@ export async function isExistingBranchSafeToReuse(deps, branch, baseStartPoint)
|
|
|
122
133
|
const ancestor = await deps.runCommand("git", ["merge-base", "--is-ancestor", branch, baseRef], { cwd: deps.cwd });
|
|
123
134
|
if (commandSucceeded(ancestor))
|
|
124
135
|
return { safe: true };
|
|
136
|
+
// The REFUSAL is identical either way (BAPI-862 non-goal: refusal behavior is
|
|
137
|
+
// unchanged). Only the diagnosis and the remedy differ.
|
|
138
|
+
const remedy = classification === "succeeded_pr_not_attached"
|
|
139
|
+
? unattachedSuccessRemedy(branch)
|
|
140
|
+
: staleLeftoverRemedy(branch, baseRef);
|
|
125
141
|
return {
|
|
126
142
|
safe: false,
|
|
127
|
-
reason: `existing branch '${branch}' is not an ancestor of ${baseRef};
|
|
128
|
-
`resolved base (likely a leftover from a prior run). Refusing to reuse a stale worktree — delete it ` +
|
|
129
|
-
`(git worktree remove + git branch -D ${branch}) or rebase it onto ${baseRef}, then re-dispatch.`,
|
|
143
|
+
reason: `existing branch '${branch}' is not an ancestor of ${baseRef}; ${remedy}`,
|
|
130
144
|
};
|
|
131
145
|
}
|
|
132
146
|
/**
|
|
@@ -263,7 +277,7 @@ export async function createWorktreeForTicket(deps, key, branchOverrides, worktr
|
|
|
263
277
|
// check compares against the SAME effective base start point (branch name or
|
|
264
278
|
// fetched SHA) that a NEW branch would be cut from below.
|
|
265
279
|
if (exists && guardStaleWorktree) {
|
|
266
|
-
const safety = await isExistingBranchSafeToReuse(deps, branch, baseStartPoint);
|
|
280
|
+
const safety = await isExistingBranchSafeToReuse(deps, branch, baseStartPoint, behavior.staleBranchClassification ?? "unknown");
|
|
267
281
|
if (!safety.safe) {
|
|
268
282
|
return {
|
|
269
283
|
key,
|
package/docs/CONDUCTOR.md
CHANGED
|
@@ -315,6 +315,28 @@ redeems the approval token and the server returns `merge.succeeded`.
|
|
|
315
315
|
store uses schema version 5 (BAPI-413) to accommodate the `merge.pending_approval`
|
|
316
316
|
type in the `events.type` CHECK constraint.
|
|
317
317
|
|
|
318
|
+
**Who performs the write (BAPI-832).** "Never holds VCS write credentials" above
|
|
319
|
+
describes the *credential*, not the *typing*, and it remains true everywhere. Two
|
|
320
|
+
paths now perform the provider write with the operator's local `gh` rather than
|
|
321
|
+
with the GitHub App installation token, because GitHub's merge endpoint requires
|
|
322
|
+
`contents: write` and the Bridge GPT App installation is `contents: read`:
|
|
323
|
+
|
|
324
|
+
- the executor's `merge` job, via `makeLocalMergeExecutor` — the arrangement
|
|
325
|
+
BAPI-572 locked in; and
|
|
326
|
+
- the `merge_pull_request` MCP tool, which since BAPI-832 sends
|
|
327
|
+
`execution: "local"`, receives a non-terminal `approved_for_local_execution`
|
|
328
|
+
from the route above, merges through that same `conductor/local-merge.ts` seam,
|
|
329
|
+
and reports the outcome to
|
|
330
|
+
`POST /vcs/pull-requests/{pr_number}/merge/complete`.
|
|
331
|
+
|
|
332
|
+
In both, the server still owns every decision — the guards, the lease, and the
|
|
333
|
+
terminal ledger row — and neither path holds a credential of its own; they borrow
|
|
334
|
+
the operator's `gh` session. Mode is `merge_execution` on `epic_supervisor_config`
|
|
335
|
+
(`local` by default, `server` for installations whose App holds
|
|
336
|
+
`contents: write`). A caller that dies mid-merge is recovered by lease expiry, not
|
|
337
|
+
by a new mechanism: the next call re-runs the whole tail, and the provider re-read
|
|
338
|
+
reports `already_merged` if the merge landed.
|
|
339
|
+
|
|
318
340
|
## Durable execution environment hardening (BAPI-527)
|
|
319
341
|
|
|
320
342
|
Worker ledger tools are made **reliable again** — this is a robustness fix for the
|
|
@@ -179,15 +179,31 @@ by tier.
|
|
|
179
179
|
| Tool | Dependencies (class) |
|
|
180
180
|
|---|---|
|
|
181
181
|
| `create_pull_request` | VCS **[BLOCK]** (Tier-1) |
|
|
182
|
-
| `merge_pull_request` | VCS **[BLOCK]** (Tier-1; protected server-decided merge — see below) |
|
|
182
|
+
| `merge_pull_request` | VCS **[BLOCK]** (Tier-1; protected server-decided merge) + local `gh` login **[BLOCK]** (the merge executes here — see below) |
|
|
183
183
|
| `resolve_ci_checks` | VCS **[BLOCK]** (Tier-1) |
|
|
184
184
|
| `poll_ci_checks` | VCS **[BLOCK]** (Tier-1); also **hidden until `ci_check_config` is resolved** (needs a prior `resolve_ci_checks`) |
|
|
185
185
|
| `materialize_fresh_base` | VCS / git base ref **[BLOCK]** (Tier-1; materializes a pinned base tree) |
|
|
186
186
|
|
|
187
187
|
#### `merge_pull_request` — what the caller can observe
|
|
188
188
|
|
|
189
|
-
The tool holds no VCS credential and
|
|
190
|
-
server and
|
|
189
|
+
The tool holds no VCS credential and makes no merge decision of its own; it asks
|
|
190
|
+
the server, and the server decides. Since **BAPI-832** the tool does perform the
|
|
191
|
+
*write*, with the operator's `gh` login, because GitHub's merge endpoint needs
|
|
192
|
+
`contents: write` and the Bridge GPT App installation is `contents: read` — a
|
|
193
|
+
server-side merge simply cannot succeed here. Every server-side guard still runs
|
|
194
|
+
first, and the local path is reachable only from a live approval for that exact
|
|
195
|
+
pull request and head commit.
|
|
196
|
+
|
|
197
|
+
Constraints worth knowing before calling it:
|
|
198
|
+
|
|
199
|
+
- **A logged-in `gh` is required on the machine running the MCP server**, because
|
|
200
|
+
that is where the merge executes. Without one the tool refuses with
|
|
201
|
+
`local_gh_unavailable` or `local_gh_unauthenticated` and a `hint` naming the fix
|
|
202
|
+
(`gh auth login`); nothing is merged and the server-side lease is released. This
|
|
203
|
+
is a **BLOCK**, not a degrade: with no `gh`, no merge is possible at all.
|
|
204
|
+
`doctor` reports the same state under `local_merge`, so it is diagnosable
|
|
205
|
+
read-only before a run. Repositories configured `merge_execution: server` are
|
|
206
|
+
the exception — they need the App permission instead, and no local `gh`.
|
|
191
207
|
|
|
192
208
|
- **Only `merged: true` is success.** `dry_run`, `pending_approval`, and
|
|
193
209
|
`lease_held` are non-progress outcomes — nothing was merged, and repeating the
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@bridge_gpt/mcp-server",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.43",
|
|
4
4
|
"description": "Bridge API MCP server — exposes Jira endpoints as MCP tools for Claude Code agents",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"type": "module",
|
|
@@ -29,7 +29,7 @@
|
|
|
29
29
|
"test": "npm run test:normal && npm run test:module-mocks",
|
|
30
30
|
"test:normal": "node scripts/run-unit-tests.js normal",
|
|
31
31
|
"test:module-mocks": "node scripts/run-unit-tests.js module-mocks",
|
|
32
|
-
"test:integration": "node
|
|
32
|
+
"test:integration": "node scripts/run-integration-tests.js",
|
|
33
33
|
"test:smoke": "node --test build/integration/packaged-cli-smoke.test.js",
|
|
34
34
|
"canary:agent-capabilities": "npm run build && node scripts/agent-capabilities-canary.mjs",
|
|
35
35
|
"prepublishOnly": "node scripts/bundle-assets.js && npm run build && node scripts/verify-shebang.cjs"
|
|
@@ -0,0 +1,286 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "greenfield-setup",
|
|
3
|
+
"description": "Onboard a brand-new project that has no code to learn from yet. Offers a bounded interview (or generic defaults), ratifies the open non-functional requirements on a decision page, settles version control, convenes a general council, synthesizes one coherent set of project standards behind a single approval, writes the unset standards fields, and closes with the one authoritative install-manifest apply plus the read-after-write manifest /install-bridge resumes from.",
|
|
4
|
+
"variables": [
|
|
5
|
+
"docs_dir",
|
|
6
|
+
"repo_name"
|
|
7
|
+
],
|
|
8
|
+
"steps": [
|
|
9
|
+
{
|
|
10
|
+
"type": "mcp_call",
|
|
11
|
+
"tool": "ping",
|
|
12
|
+
"params": {},
|
|
13
|
+
"description": "Verify Bridge API connectivity"
|
|
14
|
+
},
|
|
15
|
+
{
|
|
16
|
+
"type": "agent_task",
|
|
17
|
+
"instruction": "Create the required output directory by running: mkdir -p {docs_dir}/greenfield/{repo_name}/standards",
|
|
18
|
+
"description": "Create the greenfield working directory"
|
|
19
|
+
},
|
|
20
|
+
{
|
|
21
|
+
"type": "mcp_call",
|
|
22
|
+
"id": "read_install_manifest",
|
|
23
|
+
"tool": "get_install_manifest",
|
|
24
|
+
"params": {},
|
|
25
|
+
"description": "Read the install manifest once and keep its snapshot token for the final apply"
|
|
26
|
+
},
|
|
27
|
+
{
|
|
28
|
+
"type": "mcp_call",
|
|
29
|
+
"id": "fetch_architecture_instructions",
|
|
30
|
+
"tool": "config_field",
|
|
31
|
+
"params": {
|
|
32
|
+
"field_name": "architecture_instructions",
|
|
33
|
+
"operation": "get"
|
|
34
|
+
},
|
|
35
|
+
"description": "Check whether architecture_instructions already has content",
|
|
36
|
+
"on_error": "warn_and_continue"
|
|
37
|
+
},
|
|
38
|
+
{
|
|
39
|
+
"type": "mcp_call",
|
|
40
|
+
"id": "fetch_review_instructions",
|
|
41
|
+
"tool": "config_field",
|
|
42
|
+
"params": {
|
|
43
|
+
"field_name": "review_instructions",
|
|
44
|
+
"operation": "get"
|
|
45
|
+
},
|
|
46
|
+
"description": "Check whether review_instructions already has content",
|
|
47
|
+
"on_error": "warn_and_continue"
|
|
48
|
+
},
|
|
49
|
+
{
|
|
50
|
+
"type": "mcp_call",
|
|
51
|
+
"id": "fetch_documentation_instructions",
|
|
52
|
+
"tool": "config_field",
|
|
53
|
+
"params": {
|
|
54
|
+
"field_name": "documentation_instructions",
|
|
55
|
+
"operation": "get"
|
|
56
|
+
},
|
|
57
|
+
"description": "Check whether documentation_instructions already has content",
|
|
58
|
+
"on_error": "warn_and_continue"
|
|
59
|
+
},
|
|
60
|
+
{
|
|
61
|
+
"type": "mcp_call",
|
|
62
|
+
"id": "fetch_unit_testing_instructions",
|
|
63
|
+
"tool": "config_field",
|
|
64
|
+
"params": {
|
|
65
|
+
"field_name": "unit_testing_instructions",
|
|
66
|
+
"operation": "get"
|
|
67
|
+
},
|
|
68
|
+
"description": "Check whether unit_testing_instructions already has content",
|
|
69
|
+
"on_error": "warn_and_continue"
|
|
70
|
+
},
|
|
71
|
+
{
|
|
72
|
+
"type": "mcp_call",
|
|
73
|
+
"id": "fetch_e2e_testing_instructions",
|
|
74
|
+
"tool": "config_field",
|
|
75
|
+
"params": {
|
|
76
|
+
"field_name": "e2e_testing_instructions",
|
|
77
|
+
"operation": "get"
|
|
78
|
+
},
|
|
79
|
+
"description": "Check whether e2e_testing_instructions already has content",
|
|
80
|
+
"on_error": "warn_and_continue"
|
|
81
|
+
},
|
|
82
|
+
{
|
|
83
|
+
"type": "mcp_call",
|
|
84
|
+
"id": "fetch_frontend_correctness_standards",
|
|
85
|
+
"tool": "config_field",
|
|
86
|
+
"params": {
|
|
87
|
+
"field_name": "frontend_correctness_standards",
|
|
88
|
+
"operation": "get"
|
|
89
|
+
},
|
|
90
|
+
"description": "Check whether frontend_correctness_standards already has content",
|
|
91
|
+
"on_error": "warn_and_continue"
|
|
92
|
+
},
|
|
93
|
+
{
|
|
94
|
+
"type": "mcp_call",
|
|
95
|
+
"id": "fetch_backend_correctness_standards",
|
|
96
|
+
"tool": "config_field",
|
|
97
|
+
"params": {
|
|
98
|
+
"field_name": "backend_correctness_standards",
|
|
99
|
+
"operation": "get"
|
|
100
|
+
},
|
|
101
|
+
"description": "Check whether backend_correctness_standards already has content",
|
|
102
|
+
"on_error": "warn_and_continue"
|
|
103
|
+
},
|
|
104
|
+
{
|
|
105
|
+
"type": "mcp_call",
|
|
106
|
+
"id": "fetch_template_correctness_standards",
|
|
107
|
+
"tool": "config_field",
|
|
108
|
+
"params": {
|
|
109
|
+
"field_name": "template_correctness_standards",
|
|
110
|
+
"operation": "get"
|
|
111
|
+
},
|
|
112
|
+
"description": "Check whether template_correctness_standards already has content",
|
|
113
|
+
"on_error": "warn_and_continue"
|
|
114
|
+
},
|
|
115
|
+
{
|
|
116
|
+
"type": "mcp_call",
|
|
117
|
+
"id": "fetch_style_correctness_standards",
|
|
118
|
+
"tool": "config_field",
|
|
119
|
+
"params": {
|
|
120
|
+
"field_name": "style_correctness_standards",
|
|
121
|
+
"operation": "get"
|
|
122
|
+
},
|
|
123
|
+
"description": "Check whether style_correctness_standards already has content",
|
|
124
|
+
"on_error": "warn_and_continue"
|
|
125
|
+
},
|
|
126
|
+
{
|
|
127
|
+
"type": "mcp_call",
|
|
128
|
+
"id": "fetch_design_principles",
|
|
129
|
+
"tool": "config_field",
|
|
130
|
+
"params": {
|
|
131
|
+
"field_name": "design_principles",
|
|
132
|
+
"operation": "get"
|
|
133
|
+
},
|
|
134
|
+
"description": "Check whether design_principles already has content",
|
|
135
|
+
"on_error": "warn_and_continue"
|
|
136
|
+
},
|
|
137
|
+
{
|
|
138
|
+
"type": "agent_task",
|
|
139
|
+
"id": "greenfield_interview",
|
|
140
|
+
"instruction_file": "greenfield-interview.md",
|
|
141
|
+
"description": "Offer the interview, settle the project framing and version control, and commit the decisions"
|
|
142
|
+
},
|
|
143
|
+
{
|
|
144
|
+
"type": "agent_task",
|
|
145
|
+
"id": "synthesize_standards",
|
|
146
|
+
"instruction_file": "greenfield-synthesize-standards.md",
|
|
147
|
+
"description": "Draft the project standards from the committed framing and take one approval"
|
|
148
|
+
},
|
|
149
|
+
{
|
|
150
|
+
"type": "mcp_call",
|
|
151
|
+
"id": "upload_architecture_instructions",
|
|
152
|
+
"tool": "config_field",
|
|
153
|
+
"params": {
|
|
154
|
+
"field_name": "architecture_instructions",
|
|
155
|
+
"file_path": "{docs_dir}/greenfield/{repo_name}/standards/architecture_instructions.md",
|
|
156
|
+
"operation": "update",
|
|
157
|
+
"only_if_null": true
|
|
158
|
+
},
|
|
159
|
+
"description": "Save the architecture standard",
|
|
160
|
+
"on_error": "warn_and_continue"
|
|
161
|
+
},
|
|
162
|
+
{
|
|
163
|
+
"type": "mcp_call",
|
|
164
|
+
"id": "upload_review_instructions",
|
|
165
|
+
"tool": "config_field",
|
|
166
|
+
"params": {
|
|
167
|
+
"field_name": "review_instructions",
|
|
168
|
+
"file_path": "{docs_dir}/greenfield/{repo_name}/standards/review_instructions.md",
|
|
169
|
+
"operation": "update",
|
|
170
|
+
"only_if_null": true
|
|
171
|
+
},
|
|
172
|
+
"description": "Save the code-review standard",
|
|
173
|
+
"on_error": "warn_and_continue"
|
|
174
|
+
},
|
|
175
|
+
{
|
|
176
|
+
"type": "mcp_call",
|
|
177
|
+
"id": "upload_documentation_instructions",
|
|
178
|
+
"tool": "config_field",
|
|
179
|
+
"params": {
|
|
180
|
+
"field_name": "documentation_instructions",
|
|
181
|
+
"file_path": "{docs_dir}/greenfield/{repo_name}/standards/documentation_instructions.md",
|
|
182
|
+
"operation": "update",
|
|
183
|
+
"only_if_null": true
|
|
184
|
+
},
|
|
185
|
+
"description": "Save the documentation standard",
|
|
186
|
+
"on_error": "warn_and_continue"
|
|
187
|
+
},
|
|
188
|
+
{
|
|
189
|
+
"type": "mcp_call",
|
|
190
|
+
"id": "upload_unit_testing_instructions",
|
|
191
|
+
"tool": "config_field",
|
|
192
|
+
"params": {
|
|
193
|
+
"field_name": "unit_testing_instructions",
|
|
194
|
+
"file_path": "{docs_dir}/greenfield/{repo_name}/standards/unit_testing_instructions.md",
|
|
195
|
+
"operation": "update",
|
|
196
|
+
"only_if_null": true
|
|
197
|
+
},
|
|
198
|
+
"description": "Save the unit-testing standard",
|
|
199
|
+
"on_error": "warn_and_continue"
|
|
200
|
+
},
|
|
201
|
+
{
|
|
202
|
+
"type": "mcp_call",
|
|
203
|
+
"id": "upload_e2e_testing_instructions",
|
|
204
|
+
"tool": "config_field",
|
|
205
|
+
"params": {
|
|
206
|
+
"field_name": "e2e_testing_instructions",
|
|
207
|
+
"file_path": "{docs_dir}/greenfield/{repo_name}/standards/e2e_testing_instructions.md",
|
|
208
|
+
"operation": "update",
|
|
209
|
+
"only_if_null": true
|
|
210
|
+
},
|
|
211
|
+
"description": "Save the end-to-end testing standard",
|
|
212
|
+
"on_error": "warn_and_continue"
|
|
213
|
+
},
|
|
214
|
+
{
|
|
215
|
+
"type": "mcp_call",
|
|
216
|
+
"id": "upload_frontend_correctness_standards",
|
|
217
|
+
"tool": "config_field",
|
|
218
|
+
"params": {
|
|
219
|
+
"field_name": "frontend_correctness_standards",
|
|
220
|
+
"file_path": "{docs_dir}/greenfield/{repo_name}/standards/frontend_correctness_standards.md",
|
|
221
|
+
"operation": "update",
|
|
222
|
+
"only_if_null": true
|
|
223
|
+
},
|
|
224
|
+
"description": "Save the frontend correctness standard",
|
|
225
|
+
"on_error": "warn_and_continue"
|
|
226
|
+
},
|
|
227
|
+
{
|
|
228
|
+
"type": "mcp_call",
|
|
229
|
+
"id": "upload_backend_correctness_standards",
|
|
230
|
+
"tool": "config_field",
|
|
231
|
+
"params": {
|
|
232
|
+
"field_name": "backend_correctness_standards",
|
|
233
|
+
"file_path": "{docs_dir}/greenfield/{repo_name}/standards/backend_correctness_standards.md",
|
|
234
|
+
"operation": "update",
|
|
235
|
+
"only_if_null": true
|
|
236
|
+
},
|
|
237
|
+
"description": "Save the backend correctness standard",
|
|
238
|
+
"on_error": "warn_and_continue"
|
|
239
|
+
},
|
|
240
|
+
{
|
|
241
|
+
"type": "mcp_call",
|
|
242
|
+
"id": "upload_template_correctness_standards",
|
|
243
|
+
"tool": "config_field",
|
|
244
|
+
"params": {
|
|
245
|
+
"field_name": "template_correctness_standards",
|
|
246
|
+
"file_path": "{docs_dir}/greenfield/{repo_name}/standards/template_correctness_standards.md",
|
|
247
|
+
"operation": "update",
|
|
248
|
+
"only_if_null": true
|
|
249
|
+
},
|
|
250
|
+
"description": "Save the template correctness standard",
|
|
251
|
+
"on_error": "warn_and_continue"
|
|
252
|
+
},
|
|
253
|
+
{
|
|
254
|
+
"type": "mcp_call",
|
|
255
|
+
"id": "upload_style_correctness_standards",
|
|
256
|
+
"tool": "config_field",
|
|
257
|
+
"params": {
|
|
258
|
+
"field_name": "style_correctness_standards",
|
|
259
|
+
"file_path": "{docs_dir}/greenfield/{repo_name}/standards/style_correctness_standards.md",
|
|
260
|
+
"operation": "update",
|
|
261
|
+
"only_if_null": true
|
|
262
|
+
},
|
|
263
|
+
"description": "Save the style correctness standard",
|
|
264
|
+
"on_error": "warn_and_continue"
|
|
265
|
+
},
|
|
266
|
+
{
|
|
267
|
+
"type": "mcp_call",
|
|
268
|
+
"id": "upload_design_principles",
|
|
269
|
+
"tool": "config_field",
|
|
270
|
+
"params": {
|
|
271
|
+
"field_name": "design_principles",
|
|
272
|
+
"file_path": "{docs_dir}/greenfield/{repo_name}/standards/design_principles.md",
|
|
273
|
+
"operation": "update",
|
|
274
|
+
"only_if_null": true
|
|
275
|
+
},
|
|
276
|
+
"description": "Save the design principles",
|
|
277
|
+
"on_error": "warn_and_continue"
|
|
278
|
+
},
|
|
279
|
+
{
|
|
280
|
+
"type": "agent_task",
|
|
281
|
+
"id": "apply_and_report",
|
|
282
|
+
"instruction_file": "greenfield-apply-and-report.md",
|
|
283
|
+
"description": "Save the project setup and report where the project stands"
|
|
284
|
+
}
|
|
285
|
+
]
|
|
286
|
+
}
|