foundry-design-mcp-server 0.2.0-beta.2 → 0.2.0-beta.21
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 +164 -17
- package/dist/claim-lease.d.ts +25 -0
- package/dist/claim-lease.d.ts.map +1 -0
- package/dist/claim-lease.js +82 -0
- package/dist/claim-lease.js.map +1 -0
- package/dist/index.js +314 -15
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -2,43 +2,153 @@
|
|
|
2
2
|
|
|
3
3
|
Foundry is a local-first precision design workbench for Codex, Cursor, and Claude Code. It lets design engineers manipulate rendered interface elements, resolve each gesture to the right project-native source intent, review one structured change batch, and verify the rebuilt result across recorded states.
|
|
4
4
|
|
|
5
|
+
Responsive Design Lab links one live selection across native mobile, tablet, desktop, current, and custom viewport contexts. It exposes real breakpoint transitions, overflow, clipping, awkward wrapping, and temporary browser zoom, text-scale, and long-content stress tests without changing saved product state.
|
|
6
|
+
|
|
7
|
+
Design Branches keeps parallel visual directions isolated inside one local session. Teams can switch and compare rendered alternatives, combine selected decisions, preserve rejection rationale, and explicitly promote one direction into Review and apply without changing source early.
|
|
8
|
+
|
|
5
9
|
## Beta installation
|
|
6
10
|
|
|
7
|
-
Foundry is distributed through npm, so testers do not need
|
|
11
|
+
Foundry is distributed through npm, so testers do not need GitHub access.
|
|
12
|
+
|
|
13
|
+
> **Current beta release:** `0.2.0-beta.21`. After publication, both npm `latest` and `beta` resolve to this release.
|
|
14
|
+
|
|
15
|
+
Full documentation is available at [withfoundry.ai](https://withfoundry.ai).
|
|
16
|
+
|
|
17
|
+
### Recommended: install once, use in every project
|
|
18
|
+
|
|
19
|
+
Install Foundry's shared connection for Codex, Cursor, and Claude once:
|
|
20
|
+
|
|
21
|
+
```bash
|
|
22
|
+
npx foundry-design install
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
Restart the selected coding agents once. Then open any project and run:
|
|
26
|
+
|
|
27
|
+
Open a terminal in the project, or ask Codex, Cursor, or Claude Code to run:
|
|
8
28
|
|
|
9
29
|
```bash
|
|
10
|
-
npx foundry-design
|
|
30
|
+
npx foundry-design
|
|
11
31
|
```
|
|
12
32
|
|
|
13
|
-
|
|
33
|
+
That command finds the nearest real project, detects its framework, installs or safely updates only the development adapter and lightweight project connection, validates it, starts the project when needed, and opens the visual session. The agent bridge and skill remain installed once at machine level. Foundry refuses to treat a home folder as a project and prints the exact CLI and MCP bridge versions before changing configuration.
|
|
14
34
|
|
|
15
|
-
|
|
35
|
+
After the restart, reopen the same project folder and ask:
|
|
16
36
|
|
|
17
37
|
```text
|
|
18
|
-
Start Foundry for this project.
|
|
38
|
+
Start Foundry for this project and keep listening for Apply with agent requests.
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
That is the normal workflow. Foundry resumes the most recent session for the current source revision and keeps all review and apply state local.
|
|
42
|
+
|
|
43
|
+
### Manual installation
|
|
44
|
+
|
|
45
|
+
Install the shared connection for selected agents:
|
|
46
|
+
|
|
47
|
+
```bash
|
|
48
|
+
npx foundry-design install --agent codex,cursor,claude
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
Connect any project with only its development adapter and local project metadata:
|
|
52
|
+
|
|
53
|
+
```bash
|
|
54
|
+
npx foundry-design connect
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
Then restart the coding agent, reopen the same project folder, and ask:
|
|
58
|
+
|
|
59
|
+
```text
|
|
60
|
+
Start Foundry for this project and keep listening for Apply with agent requests.
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
You do not need to run a second terminal command when the agent starts Foundry for you. Apply requests remain queued safely when the agent is offline. After an active agent claims a batch, the MCP bridge keeps that handoff alive through source edits, rebuilding, and verification. A claim abandoned before source work begins returns to the queue. If the agent disappears during source work, Foundry preserves the same run in **Needs attention** and waits for you to choose **Resume with agent**. It never guesses whether a half-finished edit is safe to repeat.
|
|
64
|
+
|
|
65
|
+
Check the complete connection at any time with:
|
|
66
|
+
|
|
67
|
+
```bash
|
|
68
|
+
npx foundry-design status
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
Foundry reports project integration, the exact MCP package version, runtime health, and the live agent listener separately. Run `npx foundry-design doctor --repair` if configuration or generated integration needs repair.
|
|
72
|
+
|
|
73
|
+
If an older project has stale or conflicting project-scoped agent configuration, run:
|
|
74
|
+
|
|
75
|
+
```bash
|
|
76
|
+
npx foundry-design reset
|
|
19
77
|
```
|
|
20
78
|
|
|
21
|
-
|
|
79
|
+
Reset migrates Foundry-owned project MCP files and skills to the shared connection, preserves customized files, and reports anything it could not replace safely.
|
|
80
|
+
|
|
81
|
+
Update an existing installation with:
|
|
22
82
|
|
|
23
83
|
```bash
|
|
24
|
-
npx foundry-design
|
|
84
|
+
npx foundry-design update
|
|
25
85
|
```
|
|
26
86
|
|
|
27
|
-
|
|
87
|
+
The updater refreshes checksum-matched project files and the shared machine connection. It removes only Foundry-owned legacy project agent files, preserves customized files, validates the project, and rolls back if Foundry introduces a TypeScript or lint failure. Restart the coding agent only when its shared bridge version changes.
|
|
88
|
+
|
|
89
|
+
Remove a project from Foundry's recent-project list without removing its adapter:
|
|
28
90
|
|
|
29
91
|
```bash
|
|
30
|
-
npx foundry-design
|
|
92
|
+
npx foundry-design disconnect
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
Remove only Foundry-managed integration with:
|
|
96
|
+
|
|
97
|
+
```bash
|
|
98
|
+
npx foundry-design uninstall
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
Remove the shared machine connection separately:
|
|
102
|
+
|
|
103
|
+
```bash
|
|
104
|
+
npx foundry-design uninstall --global
|
|
105
|
+
```
|
|
106
|
+
|
|
107
|
+
Project-scoped MCP configuration remains available only as an explicit compatibility mode:
|
|
108
|
+
|
|
109
|
+
```bash
|
|
110
|
+
npx foundry-design setup --project-agent --agent codex
|
|
31
111
|
```
|
|
32
112
|
|
|
33
113
|
Supported automatic web integration currently includes Next.js App Router, Vite, and plain HTML. Generic web, SwiftUI, and React Native projects receive explicit setup guidance when a safe automatic edit is not available.
|
|
34
114
|
|
|
35
|
-
The
|
|
115
|
+
The npm setup above is the public beta installation path and includes the same portable skill and MCP connection used by the agent plugin bundle.
|
|
116
|
+
|
|
117
|
+
### Agent-native installation
|
|
118
|
+
|
|
119
|
+
The npm installer remains the universal route. Foundry also ships one versioned plugin bundle for Codex, Cursor, and Claude Code, so each host can load the same skill, MCP bridge, and session guidance through its native plugin system.
|
|
120
|
+
|
|
121
|
+
For Claude Code, add the public marketplace and install Foundry once:
|
|
122
|
+
|
|
123
|
+
```text
|
|
124
|
+
/plugin marketplace add seanx24x/foundry-design-control
|
|
125
|
+
/plugin install foundry-design-control@foundry-design-control
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
Run `/reload-plugins`, open a project, then run `npx foundry-design` once to connect its development adapter.
|
|
129
|
+
|
|
130
|
+
For Cursor, use the one-click MCP connection below while the complete plugin awaits marketplace review. The repository contains a validated Cursor plugin with the Foundry skill, command, hook, and MCP bridge for local testing and submission.
|
|
131
|
+
|
|
132
|
+
For Codex, the repository contains the Agent Plugin and Codex presentation metadata used for public marketplace submission. Until that listing is available, `npx foundry-design install-agent codex` installs the identical shared skill and bridge without requiring the repository.
|
|
133
|
+
|
|
134
|
+
See [Distribution](DISTRIBUTION.md) for the exact supported route, validation command, and update boundary for every host.
|
|
36
135
|
|
|
37
|
-
|
|
136
|
+
### Claude Desktop extension
|
|
137
|
+
|
|
138
|
+
The repository also produces a validated `.mcpb` extension for Claude Desktop. It bundles the local Foundry MCP bridge and can be installed through **Settings → Extensions → Advanced → Install Extension**. This provides a host-native alternative when a Claude Desktop surface does not merge the normal user-level Claude Code MCP configuration. Project instrumentation is still installed with `npx foundry-design`.
|
|
139
|
+
|
|
140
|
+
If an npm mirror or existing `npx` cache reports an old tag, bypass it with a temporary cache and the exact current release:
|
|
141
|
+
|
|
142
|
+
```bash
|
|
143
|
+
FOUNDRY_NPX_CACHE="$(mktemp -d)"
|
|
144
|
+
npx --yes --prefer-online --registry=https://registry.npmjs.org --cache "$FOUNDRY_NPX_CACHE" --package=foundry-design@0.2.0-beta.21 foundry-design
|
|
145
|
+
```
|
|
146
|
+
|
|
147
|
+
The beta supports Node.js 20 or newer. Read the [local-first safety model](https://withfoundry.ai/#safety) before using it with sensitive work.
|
|
38
148
|
|
|
39
149
|
## Agent plugin
|
|
40
150
|
|
|
41
|
-
The portable plugin lives at `plugins/foundry-design-control`. The repository also includes marketplace manifests for Codex, Cursor, and Claude-compatible plugin import. Once installed, ask your agent:
|
|
151
|
+
The portable plugin lives at `plugins/foundry-design-control`. The repository also includes marketplace manifests for Codex, Cursor, and Claude-compatible plugin import. Until public marketplace review is complete, `npx foundry-design install` installs the same reusable skill and MCP connection from npm without requiring source-repository access. Once installed, ask your agent:
|
|
42
152
|
|
|
43
153
|
```text
|
|
44
154
|
Start Foundry for this project.
|
|
@@ -46,30 +156,65 @@ Start Foundry for this project.
|
|
|
46
156
|
|
|
47
157
|
Foundry remains local-first. Installing the plugin does not create an account, enable telemetry, or send project data to a Foundry service.
|
|
48
158
|
|
|
159
|
+
### Cursor one-click connection
|
|
160
|
+
|
|
161
|
+
[Add the Foundry MCP bridge to Cursor](cursor://anysphere.cursor-deeplink/mcp/install?name=foundry-design-control&config=eyJjb21tYW5kIjoibnB4IiwiYXJncyI6WyIteSIsIi0tcHJlZmVyLW9ubGluZSIsImZvdW5kcnktZGVzaWduLW1jcC1zZXJ2ZXJAMC4yLjAtYmV0YS4yMSJdLCJlbnYiOnsiRk9VTkRSWV9ERVNJR05fUlVOVElNRV9VUkwiOiJodHRwOi8vMTI3LjAuMC4xOjQzODcifX0%3D), then run `npx foundry-design` inside the project. The repository's Cursor plugin additionally bundles the Foundry skill and session-start hook for marketplace distribution.
|
|
162
|
+
|
|
49
163
|
## Current capabilities
|
|
50
164
|
|
|
51
|
-
-
|
|
165
|
+
- A dedicated local design workspace with a live product canvas, equal Layers and Inspector docks, and a direct-overlay fallback when a product blocks framing
|
|
166
|
+
- Measured browser selection with overlap cycling, parent/child traversal, hover previews, and isolated Shadow DOM canvas instrumentation
|
|
52
167
|
- A searchable, collapsible, virtualized live layer hierarchy with mapped-source context, Shadow DOM traversal, drag reordering, and selection persistence across HMR
|
|
53
168
|
- Multi-selection, measured spacing annotations, sibling-aware resize snapping, keyboard nudging, alignment, distribution, and preview undo/redo
|
|
54
169
|
- A revisioned local design graph for CSS tokens, components, Storybook variants, breakpoints, themes, states, and motion presets
|
|
170
|
+
- A Design System workspace that resolves semantic alias chains, surfaces broken and circular references, traces native tokens from definition to indexed usages, groups recurring literals into existing-token-first promotion plans, and sends exact source refactors through Review without changing source automatically
|
|
55
171
|
- Semantic source-mapping choices that block ambiguous changes until the user selects the intended implementation
|
|
56
172
|
- Fixed, hug, fill, and min/max sizing; flex and grid flow; linked spacing; aspect ratio; overflow; and positional controls
|
|
57
|
-
- Project-native spacing, radius, typography, and color choices with token-only filtering, exact token
|
|
173
|
+
- Project-native spacing, radius, typography, and color choices with token-only filtering, exact and nearest-token ranking, component variants, type presets, gradients, opacity, and live contrast guidance
|
|
58
174
|
- Layout, typography, color, content, asset, accessibility, responsive, and motion controls
|
|
59
175
|
- Before/after toggles, continuous comparison scrubbing, side-by-side source comparison, isolation, per-element reset, keyboard shortcuts, and a searchable command palette
|
|
60
176
|
- Design Health scans for contrast, overflow and clipping, touch targets, accessible names, reduced-motion coverage, and project spacing consistency, with evidence, intentional-issue ignores, and safe corrections routed into review
|
|
61
177
|
- An in-app state workbench with real viewport frames, theme switching, forced interaction states, motion controls, and contextual verification
|
|
178
|
+
- A dedicated Motion Studio for live CSS and Web Animation discovery, preview-only transport, timeline scrubbing, keyframe editing, complete timing controls, performance classification, and reduced-motion review
|
|
179
|
+
- Isolated Design Branches with fixed-viewport comparison, selective composition, rejection notes, explicit promotion into the source-ready review ledger, and portable chosen or rejected decision records with source-aware compatibility, import, export, restore, removal, and explicit Design Memory linkage
|
|
62
180
|
- Persistent, coalescing change ledger with JSON and consolidated prompt export
|
|
63
|
-
-
|
|
181
|
+
- Center-workspace review with editable approved batches, grouped targets, and unresolved-target blocking
|
|
64
182
|
- Persistent Apply with agent runs across Codex, Cursor, and Claude Code through MCP
|
|
183
|
+
- Automatically renewed agent handoffs that remain claimed during source inspection and safely return abandoned work to the queue
|
|
184
|
+
- Explicit same-run recovery when an agent disappears during source editing, rebuilding, or verification
|
|
65
185
|
- Live source, rebuild, validation, retry, and rendered-verification progress
|
|
186
|
+
- Rendered verification that resumes after refresh and does not depend on Review remaining open
|
|
66
187
|
- Local MCP bridge for agent access
|
|
67
188
|
- Debug adapters for web, SwiftUI, and React Native on iOS Simulator
|
|
68
189
|
- Verification records that compare requested and rendered values
|
|
190
|
+
- A full-screen Delivery workspace with Handoff, Documentation, and History views
|
|
191
|
+
- Versioned Delivery Records created at the reviewed Apply boundary and promoted to verified only after every rendered check passes
|
|
192
|
+
- Source-backed component, system, and screen documentation with explicit current, stale, and conflicted freshness states
|
|
193
|
+
- Immutable verified design history and milestone grouping that excludes failed, cancelled, and interrupted Apply runs
|
|
194
|
+
- Conflict-safe repository export with Markdown, JSON, a pull-request brief, local evidence manifests, and no overwrite of human-edited generated documentation
|
|
69
195
|
|
|
70
196
|
The review surface explains the blast radius of every proposed change, including component instance count, token versus literal use, responsive and theme scope, and unresolved mapping risk. It never applies a source change merely because a preview override looks correct.
|
|
71
197
|
|
|
72
|
-
Foundry protocol `1.
|
|
198
|
+
Foundry protocol `1.3.0` reads existing `1.0.0`, `1.1.0`, and `1.2.0` sessions with migration defaults. All graph, operation, run, and verification data remains local and is available through `foundry-design export --format full`.
|
|
199
|
+
|
|
200
|
+
### Delivery export
|
|
201
|
+
|
|
202
|
+
Every reviewed Apply batch creates a local Delivery Record. Its deterministic evidence remains read-only while its intent, risks, questions, and engineering summary can be refined. The record moves through `draft`, `ready`, `implementing`, `verified`, and `superseded`; only verified records enter Design History.
|
|
203
|
+
|
|
204
|
+
From the Delivery workspace, **Export** copies the explicit repository command for the selected record:
|
|
205
|
+
|
|
206
|
+
```bash
|
|
207
|
+
npx foundry-design delivery export <DELIVERY_ID> --format repo --output /path/to/project
|
|
208
|
+
```
|
|
209
|
+
|
|
210
|
+
Repository export writes only below `docs/foundry/`: a managed manifest, handoff Markdown and JSON, a pull-request brief, component and feature documentation, internal history, milestones, and a local evidence manifest. Foundry never replaces the project root `CHANGELOG.md`. If a previously generated file was edited outside Foundry, export stops before writing anything and reports the conflict.
|
|
211
|
+
|
|
212
|
+
Portable single-record exports are also available:
|
|
213
|
+
|
|
214
|
+
```bash
|
|
215
|
+
npx foundry-design delivery export <DELIVERY_ID> --format markdown --output handoff.md
|
|
216
|
+
npx foundry-design delivery export <DELIVERY_ID> --format json --output handoff.json
|
|
217
|
+
```
|
|
73
218
|
|
|
74
219
|
## Local development
|
|
75
220
|
|
|
@@ -79,6 +224,8 @@ pnpm check
|
|
|
79
224
|
pnpm release:check
|
|
80
225
|
pnpm release:pack
|
|
81
226
|
pnpm release:test-install
|
|
227
|
+
pnpm test:e2e
|
|
228
|
+
pnpm mcpb:build
|
|
82
229
|
pnpm build
|
|
83
230
|
pnpm foundry setup --project /path/to/project --agent codex --local-mcp
|
|
84
231
|
pnpm foundry index --project /path/to/project --output /tmp/foundry-design-graph.json
|
|
@@ -96,7 +243,7 @@ The runtime binds to `127.0.0.1:4387`. Inspector preview changes remain temporar
|
|
|
96
243
|
- `packages/react-native-adapter`: React Native debug bridge
|
|
97
244
|
- `packages/mcp-server`: agent tools backed by the runtime
|
|
98
245
|
- `packages/swiftui-adapter`: Swift package for inspectable SwiftUI views
|
|
99
|
-
- `apps/inspector`:
|
|
246
|
+
- `apps/inspector`: authenticated local design workspace, canvas shell, and review surface
|
|
100
247
|
- `examples/web-fixture`: end-to-end browser fixture
|
|
101
248
|
|
|
102
249
|
## Safety model
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
export interface ClaimLeaseRequestClient {
|
|
2
|
+
request(path: string, options?: RequestInit, token?: string): Promise<unknown>;
|
|
3
|
+
}
|
|
4
|
+
export interface ClaimLease {
|
|
5
|
+
sessionId: string;
|
|
6
|
+
token?: string;
|
|
7
|
+
runId: string;
|
|
8
|
+
claimAttemptId: string;
|
|
9
|
+
claimCapability?: string;
|
|
10
|
+
kind?: 'apply' | 'visual';
|
|
11
|
+
}
|
|
12
|
+
export declare class ClaimLeaseKeeper {
|
|
13
|
+
private readonly client;
|
|
14
|
+
private readonly intervalMs;
|
|
15
|
+
private readonly maxFailedPulses;
|
|
16
|
+
private readonly claims;
|
|
17
|
+
constructor(client: ClaimLeaseRequestClient, intervalMs?: number, maxFailedPulses?: number);
|
|
18
|
+
start(claim: ClaimLease): void;
|
|
19
|
+
stop(runId: string): void;
|
|
20
|
+
stopAll(): void;
|
|
21
|
+
has(runId: string): boolean;
|
|
22
|
+
capability(runId: string, claimAttemptId: string): string | undefined;
|
|
23
|
+
pulse(runId: string): Promise<void>;
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=claim-lease.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"claim-lease.d.ts","sourceRoot":"","sources":["../src/claim-lease.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,uBAAuB;IACtC,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,WAAW,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;CAChF;AAED,MAAM,WAAW,UAAU;IACzB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,cAAc,EAAE,MAAM,CAAC;IACvB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,IAAI,CAAC,EAAE,OAAO,GAAG,QAAQ,CAAC;CAC3B;AAQD,qBAAa,gBAAgB;IAIzB,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,UAAU;IAC3B,OAAO,CAAC,QAAQ,CAAC,eAAe;IALlC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAuC;gBAG3C,MAAM,EAAE,uBAAuB,EAC/B,UAAU,SAAS,EACnB,eAAe,SAAI;IAGtC,KAAK,CAAC,KAAK,EAAE,UAAU,GAAG,IAAI;IAY9B,IAAI,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAOzB,OAAO,IAAI,IAAI;IAIf,GAAG,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO;IAI3B,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAM/D,KAAK,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAqD1C"}
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
export class ClaimLeaseKeeper {
|
|
2
|
+
client;
|
|
3
|
+
intervalMs;
|
|
4
|
+
maxFailedPulses;
|
|
5
|
+
claims = new Map();
|
|
6
|
+
constructor(client, intervalMs = 10_000, maxFailedPulses = 3) {
|
|
7
|
+
this.client = client;
|
|
8
|
+
this.intervalMs = intervalMs;
|
|
9
|
+
this.maxFailedPulses = maxFailedPulses;
|
|
10
|
+
}
|
|
11
|
+
start(claim) {
|
|
12
|
+
this.stop(claim.runId);
|
|
13
|
+
const active = {
|
|
14
|
+
...claim,
|
|
15
|
+
renewing: false,
|
|
16
|
+
failedPulses: 0,
|
|
17
|
+
timer: setInterval(() => void this.pulse(claim.runId), this.intervalMs),
|
|
18
|
+
};
|
|
19
|
+
active.timer.unref?.();
|
|
20
|
+
this.claims.set(claim.runId, active);
|
|
21
|
+
}
|
|
22
|
+
stop(runId) {
|
|
23
|
+
const active = this.claims.get(runId);
|
|
24
|
+
if (!active)
|
|
25
|
+
return;
|
|
26
|
+
clearInterval(active.timer);
|
|
27
|
+
this.claims.delete(runId);
|
|
28
|
+
}
|
|
29
|
+
stopAll() {
|
|
30
|
+
for (const runId of this.claims.keys())
|
|
31
|
+
this.stop(runId);
|
|
32
|
+
}
|
|
33
|
+
has(runId) {
|
|
34
|
+
return this.claims.has(runId);
|
|
35
|
+
}
|
|
36
|
+
capability(runId, claimAttemptId) {
|
|
37
|
+
const active = this.claims.get(runId);
|
|
38
|
+
if (!active || active.claimAttemptId !== claimAttemptId)
|
|
39
|
+
return undefined;
|
|
40
|
+
return active.claimCapability;
|
|
41
|
+
}
|
|
42
|
+
async pulse(runId) {
|
|
43
|
+
const active = this.claims.get(runId);
|
|
44
|
+
if (!active || active.renewing)
|
|
45
|
+
return;
|
|
46
|
+
active.renewing = true;
|
|
47
|
+
try {
|
|
48
|
+
const payload = (await this.client.request(active.kind === 'visual'
|
|
49
|
+
? `/v1/sessions/${encodeURIComponent(active.sessionId)}/visual-agent-requests/${encodeURIComponent(active.runId)}/heartbeat`
|
|
50
|
+
: `/v1/sessions/${encodeURIComponent(active.sessionId)}/apply-runs/${encodeURIComponent(active.runId)}/heartbeat`, {
|
|
51
|
+
method: 'POST',
|
|
52
|
+
body: JSON.stringify({
|
|
53
|
+
claimAttemptId: active.claimAttemptId,
|
|
54
|
+
...(active.claimCapability ? { claimCapability: active.claimCapability } : {}),
|
|
55
|
+
}),
|
|
56
|
+
}, active.token));
|
|
57
|
+
const run = active.kind === 'visual'
|
|
58
|
+
? payload.visualAgentRequests?.find((candidate) => candidate.id === active.runId)
|
|
59
|
+
: payload.applyRuns?.find((candidate) => candidate.id === active.runId);
|
|
60
|
+
active.failedPulses = 0;
|
|
61
|
+
if (!run ||
|
|
62
|
+
!(active.kind === 'visual'
|
|
63
|
+
? ['thinking'].includes(run.status ?? '')
|
|
64
|
+
: ['claimed', 'applying', 'rebuilding', 'verifying'].includes(run.state ?? '')) ||
|
|
65
|
+
!run.claimAttemptId ||
|
|
66
|
+
run.claimAttemptId !== active.claimAttemptId) {
|
|
67
|
+
this.stop(runId);
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
catch {
|
|
71
|
+
active.failedPulses += 1;
|
|
72
|
+
if (active.failedPulses >= this.maxFailedPulses)
|
|
73
|
+
this.stop(runId);
|
|
74
|
+
}
|
|
75
|
+
finally {
|
|
76
|
+
const current = this.claims.get(runId);
|
|
77
|
+
if (current)
|
|
78
|
+
current.renewing = false;
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
//# sourceMappingURL=claim-lease.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"claim-lease.js","sourceRoot":"","sources":["../src/claim-lease.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -1,8 +1,23 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
+
import { randomUUID } from 'node:crypto';
|
|
2
3
|
import { McpServer } from '@modelcontextprotocol/server';
|
|
3
4
|
import { serveStdio } from '@modelcontextprotocol/server/stdio';
|
|
4
5
|
import { z } from 'zod';
|
|
6
|
+
import { ClaimLeaseKeeper } from './claim-lease.js';
|
|
5
7
|
import { FoundryRuntimeClient } from './client.js';
|
|
8
|
+
import packageJson from '../package.json' with { type: 'json' };
|
|
9
|
+
const verificationContextSchema = z.object({
|
|
10
|
+
breakpoint: z.string().default('current'),
|
|
11
|
+
theme: z.string().default('current'),
|
|
12
|
+
state: z.string().default('current'),
|
|
13
|
+
});
|
|
14
|
+
const verificationGeometrySchema = z.object({
|
|
15
|
+
x: z.number(),
|
|
16
|
+
y: z.number(),
|
|
17
|
+
width: z.number().nonnegative(),
|
|
18
|
+
height: z.number().nonnegative(),
|
|
19
|
+
scale: z.number().positive(),
|
|
20
|
+
});
|
|
6
21
|
function result(value) {
|
|
7
22
|
return {
|
|
8
23
|
content: [
|
|
@@ -19,9 +34,11 @@ function result(value) {
|
|
|
19
34
|
serveStdio(() => {
|
|
20
35
|
const server = new McpServer({
|
|
21
36
|
name: 'foundry-design-control',
|
|
22
|
-
version:
|
|
37
|
+
version: packageJson.version,
|
|
23
38
|
});
|
|
24
39
|
const client = new FoundryRuntimeClient();
|
|
40
|
+
const claimLeases = new ClaimLeaseKeeper(client);
|
|
41
|
+
const listenerTaskId = `listener_${randomUUID().replaceAll('-', '')}`;
|
|
25
42
|
server.registerTool('foundry_design_start_session', {
|
|
26
43
|
description: 'Create a local Foundry design-inspection session. The localhost runtime must already be running.',
|
|
27
44
|
inputSchema: z.object({
|
|
@@ -57,6 +74,92 @@ serveStdio(() => {
|
|
|
57
74
|
token: z.string().optional(),
|
|
58
75
|
}),
|
|
59
76
|
}, async ({ sessionId, token }) => result(await client.request(`/v1/sessions/${client.sessionId(sessionId)}/design-graph`, {}, token)));
|
|
77
|
+
server.registerTool('foundry_design_wait_for_work', {
|
|
78
|
+
description: 'Keep one Foundry session listener active and atomically claim the next reviewed Apply run or grounded Visual Agent conversation request.',
|
|
79
|
+
inputSchema: z.object({
|
|
80
|
+
sessionId: z.string().optional(),
|
|
81
|
+
token: z.string().optional(),
|
|
82
|
+
agent: z.object({
|
|
83
|
+
name: z.string().min(1),
|
|
84
|
+
version: z.string().optional(),
|
|
85
|
+
taskId: z.string().optional(),
|
|
86
|
+
}),
|
|
87
|
+
revision: z.string().nullable().optional(),
|
|
88
|
+
designGraphRevision: z.string().nullable().optional(),
|
|
89
|
+
waitMs: z.number().int().min(0).max(60_000).default(30_000),
|
|
90
|
+
}),
|
|
91
|
+
}, async ({ sessionId, token, agent, revision, designGraphRevision, waitMs }) => {
|
|
92
|
+
const id = client.sessionId(sessionId);
|
|
93
|
+
const resolvedAgent = { ...agent, taskId: agent.taskId ?? listenerTaskId };
|
|
94
|
+
const deadline = Date.now() + waitMs;
|
|
95
|
+
let nextPresenceAt = 0;
|
|
96
|
+
do {
|
|
97
|
+
if (Date.now() >= nextPresenceAt) {
|
|
98
|
+
await client.request(`/v1/sessions/${id}/agent-presence`, {
|
|
99
|
+
method: 'POST',
|
|
100
|
+
body: JSON.stringify({
|
|
101
|
+
agent: resolvedAgent,
|
|
102
|
+
listening: true,
|
|
103
|
+
ttlMs: Math.min(Math.max(waitMs + 10_000, 15_000), 70_000),
|
|
104
|
+
}),
|
|
105
|
+
}, token);
|
|
106
|
+
nextPresenceAt = Date.now() + 5_000;
|
|
107
|
+
}
|
|
108
|
+
const visual = (await client.request(`/v1/sessions/${id}/visual-agent-requests?status=queued`, {}, token));
|
|
109
|
+
const visualRequest = visual.requests?.[0];
|
|
110
|
+
if (visualRequest) {
|
|
111
|
+
const claimed = (await client.request(`/v1/sessions/${id}/visual-agent-requests/${visualRequest.id}/claim`, {
|
|
112
|
+
method: 'POST',
|
|
113
|
+
body: JSON.stringify({ agent: resolvedAgent, ttlMs: 10 * 60_000 }),
|
|
114
|
+
}, token));
|
|
115
|
+
const request = claimed.visualAgentRequests?.find((candidate) => candidate.id === visualRequest.id);
|
|
116
|
+
if (request?.status === 'thinking' &&
|
|
117
|
+
request.agent?.name === resolvedAgent.name &&
|
|
118
|
+
request.agent.taskId === resolvedAgent.taskId &&
|
|
119
|
+
request.claimAttemptId &&
|
|
120
|
+
claimed.claimCapability) {
|
|
121
|
+
claimLeases.start({
|
|
122
|
+
sessionId: id,
|
|
123
|
+
token,
|
|
124
|
+
runId: visualRequest.id,
|
|
125
|
+
claimAttemptId: request.claimAttemptId,
|
|
126
|
+
claimCapability: claimed.claimCapability,
|
|
127
|
+
kind: 'visual',
|
|
128
|
+
});
|
|
129
|
+
const { claimCapability: _secret, ...publicClaim } = claimed;
|
|
130
|
+
return result({ kind: 'visual_request', request, session: publicClaim });
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
const applies = (await client.request(`/v1/sessions/${id}/apply-runs?state=queued`, {}, token));
|
|
134
|
+
const apply = applies.runs?.[0];
|
|
135
|
+
if (apply) {
|
|
136
|
+
const claimed = (await client.request(`/v1/sessions/${id}/apply-runs/${apply.id}/claim`, {
|
|
137
|
+
method: 'POST',
|
|
138
|
+
body: JSON.stringify({ agent: resolvedAgent, revision, designGraphRevision }),
|
|
139
|
+
}, token));
|
|
140
|
+
const run = claimed.applyRuns?.find((candidate) => candidate.id === apply.id);
|
|
141
|
+
if (run?.state === 'claimed' &&
|
|
142
|
+
run.agent?.name === resolvedAgent.name &&
|
|
143
|
+
run.agent.taskId === resolvedAgent.taskId &&
|
|
144
|
+
run.claimAttemptId &&
|
|
145
|
+
claimed.claimCapability) {
|
|
146
|
+
claimLeases.start({
|
|
147
|
+
sessionId: id,
|
|
148
|
+
token,
|
|
149
|
+
runId: apply.id,
|
|
150
|
+
claimAttemptId: run.claimAttemptId,
|
|
151
|
+
claimCapability: claimed.claimCapability,
|
|
152
|
+
});
|
|
153
|
+
const { claimCapability: _secret, ...publicClaim } = claimed;
|
|
154
|
+
return result({ kind: 'apply_run', run, session: publicClaim });
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
if (Date.now() >= deadline)
|
|
158
|
+
break;
|
|
159
|
+
await new Promise((resolveWait) => setTimeout(resolveWait, 500));
|
|
160
|
+
} while (true);
|
|
161
|
+
return result({ status: 'waiting', sessionId: id, waitedMs: waitMs });
|
|
162
|
+
});
|
|
60
163
|
server.registerTool('foundry_design_wait_for_apply', {
|
|
61
164
|
description: 'Wait for the user to review a Foundry batch and press Apply with agent, then atomically claim that apply run.',
|
|
62
165
|
inputSchema: z.object({
|
|
@@ -67,21 +170,53 @@ serveStdio(() => {
|
|
|
67
170
|
version: z.string().optional(),
|
|
68
171
|
taskId: z.string().optional(),
|
|
69
172
|
}),
|
|
70
|
-
revision: z.string().optional(),
|
|
71
|
-
designGraphRevision: z.string().optional(),
|
|
173
|
+
revision: z.string().nullable().optional(),
|
|
174
|
+
designGraphRevision: z.string().nullable().optional(),
|
|
72
175
|
waitMs: z.number().int().min(0).max(60_000).default(30_000),
|
|
73
176
|
}),
|
|
74
177
|
}, async ({ sessionId, token, agent, revision, designGraphRevision, waitMs }) => {
|
|
75
178
|
const id = client.sessionId(sessionId);
|
|
179
|
+
const resolvedAgent = { ...agent, taskId: agent.taskId ?? listenerTaskId };
|
|
76
180
|
const deadline = Date.now() + waitMs;
|
|
181
|
+
let nextPresenceAt = 0;
|
|
77
182
|
do {
|
|
183
|
+
if (Date.now() >= nextPresenceAt) {
|
|
184
|
+
await client.request(`/v1/sessions/${id}/agent-presence`, {
|
|
185
|
+
method: 'POST',
|
|
186
|
+
body: JSON.stringify({
|
|
187
|
+
agent: resolvedAgent,
|
|
188
|
+
listening: true,
|
|
189
|
+
ttlMs: Math.min(Math.max(waitMs + 10_000, 15_000), 70_000),
|
|
190
|
+
}),
|
|
191
|
+
}, token);
|
|
192
|
+
nextPresenceAt = Date.now() + 5_000;
|
|
193
|
+
}
|
|
78
194
|
const payload = (await client.request(`/v1/sessions/${id}/apply-runs?state=queued`, {}, token));
|
|
79
195
|
const run = payload.runs?.[0];
|
|
80
196
|
if (run) {
|
|
81
|
-
|
|
197
|
+
const claimed = (await client.request(`/v1/sessions/${id}/apply-runs/${run.id}/claim`, {
|
|
82
198
|
method: 'POST',
|
|
83
|
-
body: JSON.stringify({
|
|
199
|
+
body: JSON.stringify({
|
|
200
|
+
agent: resolvedAgent,
|
|
201
|
+
revision,
|
|
202
|
+
designGraphRevision,
|
|
203
|
+
}),
|
|
84
204
|
}, token));
|
|
205
|
+
const claimedRun = claimed.applyRuns?.find((candidate) => candidate.id === run.id);
|
|
206
|
+
const sameAgent = claimedRun?.state === 'claimed' &&
|
|
207
|
+
claimedRun.agent?.name === resolvedAgent.name &&
|
|
208
|
+
claimedRun.agent.taskId === resolvedAgent.taskId;
|
|
209
|
+
if (sameAgent && claimedRun?.claimAttemptId && claimed.claimCapability) {
|
|
210
|
+
claimLeases.start({
|
|
211
|
+
sessionId: id,
|
|
212
|
+
token,
|
|
213
|
+
runId: run.id,
|
|
214
|
+
claimAttemptId: claimedRun.claimAttemptId,
|
|
215
|
+
claimCapability: claimed.claimCapability,
|
|
216
|
+
});
|
|
217
|
+
const { claimCapability: _secret, ...publicClaim } = claimed;
|
|
218
|
+
return result(publicClaim);
|
|
219
|
+
}
|
|
85
220
|
}
|
|
86
221
|
if (Date.now() >= deadline)
|
|
87
222
|
break;
|
|
@@ -89,6 +224,120 @@ serveStdio(() => {
|
|
|
89
224
|
} while (true);
|
|
90
225
|
return result({ status: 'waiting', sessionId: id, waitedMs: waitMs });
|
|
91
226
|
});
|
|
227
|
+
server.registerTool('foundry_design_wait_for_visual_request', {
|
|
228
|
+
description: 'Wait for a Foundry user to ask about selected pixels or a canvas region, then claim the durable visual conversation request with its source, viewport, theme, state, measurements, comments, tokens, and design memory context.',
|
|
229
|
+
inputSchema: z.object({
|
|
230
|
+
sessionId: z.string().optional(),
|
|
231
|
+
token: z.string().optional(),
|
|
232
|
+
agent: z.object({
|
|
233
|
+
name: z.string().min(1),
|
|
234
|
+
version: z.string().optional(),
|
|
235
|
+
taskId: z.string().optional(),
|
|
236
|
+
}),
|
|
237
|
+
waitMs: z.number().int().min(0).max(60_000).default(30_000),
|
|
238
|
+
}),
|
|
239
|
+
}, async ({ sessionId, token, agent, waitMs }) => {
|
|
240
|
+
const id = client.sessionId(sessionId);
|
|
241
|
+
const resolvedAgent = { ...agent, taskId: agent.taskId ?? listenerTaskId };
|
|
242
|
+
const deadline = Date.now() + waitMs;
|
|
243
|
+
let nextPresenceAt = 0;
|
|
244
|
+
do {
|
|
245
|
+
if (Date.now() >= nextPresenceAt) {
|
|
246
|
+
await client.request(`/v1/sessions/${id}/agent-presence`, {
|
|
247
|
+
method: 'POST',
|
|
248
|
+
body: JSON.stringify({
|
|
249
|
+
agent: resolvedAgent,
|
|
250
|
+
listening: true,
|
|
251
|
+
ttlMs: Math.min(Math.max(waitMs + 10_000, 15_000), 70_000),
|
|
252
|
+
}),
|
|
253
|
+
}, token);
|
|
254
|
+
nextPresenceAt = Date.now() + 5_000;
|
|
255
|
+
}
|
|
256
|
+
const payload = (await client.request(`/v1/sessions/${id}/visual-agent-requests?status=queued`, {}, token));
|
|
257
|
+
const request = payload.requests?.[0];
|
|
258
|
+
if (request) {
|
|
259
|
+
const claimed = (await client.request(`/v1/sessions/${id}/visual-agent-requests/${request.id}/claim`, {
|
|
260
|
+
method: 'POST',
|
|
261
|
+
body: JSON.stringify({ agent: resolvedAgent, ttlMs: 10 * 60_000 }),
|
|
262
|
+
}, token));
|
|
263
|
+
const claimedRequest = claimed.visualAgentRequests?.find((candidate) => candidate.id === request.id);
|
|
264
|
+
if (claimedRequest?.status === 'thinking' &&
|
|
265
|
+
claimedRequest.agent?.name === resolvedAgent.name &&
|
|
266
|
+
claimedRequest.agent.taskId === resolvedAgent.taskId &&
|
|
267
|
+
claimedRequest.claimAttemptId &&
|
|
268
|
+
claimed.claimCapability) {
|
|
269
|
+
claimLeases.start({
|
|
270
|
+
sessionId: id,
|
|
271
|
+
token,
|
|
272
|
+
runId: request.id,
|
|
273
|
+
claimAttemptId: claimedRequest.claimAttemptId,
|
|
274
|
+
claimCapability: claimed.claimCapability,
|
|
275
|
+
kind: 'visual',
|
|
276
|
+
});
|
|
277
|
+
const { claimCapability: _secret, ...publicClaim } = claimed;
|
|
278
|
+
return result(publicClaim);
|
|
279
|
+
}
|
|
280
|
+
}
|
|
281
|
+
if (Date.now() >= deadline)
|
|
282
|
+
break;
|
|
283
|
+
await new Promise((resolveWait) => setTimeout(resolveWait, 500));
|
|
284
|
+
} while (true);
|
|
285
|
+
return result({ status: 'waiting', sessionId: id, waitedMs: waitMs });
|
|
286
|
+
});
|
|
287
|
+
server.registerTool('foundry_design_get_visual_request', {
|
|
288
|
+
description: 'Read one persistent visual conversation request and its grounded context, messages, proposals, and status.',
|
|
289
|
+
inputSchema: z.object({
|
|
290
|
+
sessionId: z.string().optional(),
|
|
291
|
+
token: z.string().optional(),
|
|
292
|
+
requestId: z.string().min(1),
|
|
293
|
+
}),
|
|
294
|
+
}, async ({ sessionId, token, requestId }) => result(await client.request(`/v1/sessions/${client.sessionId(sessionId)}/visual-agent-requests/${requestId}`, {}, token)));
|
|
295
|
+
server.registerTool('foundry_design_respond_to_visual_request', {
|
|
296
|
+
description: 'Return grounded visual reasoning and one or more exact, independently previewable design proposals. Proposals remain separate from Review until the user previews and promotes one.',
|
|
297
|
+
inputSchema: z.object({
|
|
298
|
+
sessionId: z.string().optional(),
|
|
299
|
+
token: z.string().optional(),
|
|
300
|
+
requestId: z.string().min(1),
|
|
301
|
+
claimAttemptId: z.string().min(1),
|
|
302
|
+
message: z.string().min(1),
|
|
303
|
+
proposals: z.array(z.object({
|
|
304
|
+
name: z.string().min(1).max(80),
|
|
305
|
+
summary: z.string().min(1),
|
|
306
|
+
reasoning: z.array(z.string().min(1)).default([]),
|
|
307
|
+
exactValues: z.array(z.string().min(1)).default([]),
|
|
308
|
+
sourceLocations: z.array(z.string().min(1)).default([]),
|
|
309
|
+
responsiveImpact: z.string().min(1),
|
|
310
|
+
verificationPlan: z.array(z.string().min(1)).default([]),
|
|
311
|
+
changes: z.array(z.unknown()).default([]),
|
|
312
|
+
})),
|
|
313
|
+
}),
|
|
314
|
+
}, async ({ sessionId, token, requestId, ...input }) => {
|
|
315
|
+
const claimCapability = claimLeases.capability(requestId, input.claimAttemptId);
|
|
316
|
+
if (!claimCapability) {
|
|
317
|
+
throw new Error('No private capability is held for this visual request claim. Claim it again.');
|
|
318
|
+
}
|
|
319
|
+
const payload = await client.request(`/v1/sessions/${client.sessionId(sessionId)}/visual-agent-requests/${requestId}/respond`, { method: 'POST', body: JSON.stringify({ ...input, claimCapability }) }, token);
|
|
320
|
+
claimLeases.stop(requestId);
|
|
321
|
+
return result(payload);
|
|
322
|
+
});
|
|
323
|
+
server.registerTool('foundry_design_heartbeat_apply_run', {
|
|
324
|
+
description: 'Extend a claimed Foundry handoff lease while inspecting source before source work begins.',
|
|
325
|
+
inputSchema: z.object({
|
|
326
|
+
sessionId: z.string().optional(),
|
|
327
|
+
token: z.string().optional(),
|
|
328
|
+
runId: z.string().min(1),
|
|
329
|
+
claimAttemptId: z.string().min(1),
|
|
330
|
+
}),
|
|
331
|
+
}, async ({ sessionId, token, runId, claimAttemptId }) => {
|
|
332
|
+
const id = client.sessionId(sessionId);
|
|
333
|
+
const claimCapability = claimLeases.capability(runId, claimAttemptId);
|
|
334
|
+
if (!claimCapability) {
|
|
335
|
+
throw new Error('The private Apply claim capability is unavailable. Reclaim the run.');
|
|
336
|
+
}
|
|
337
|
+
const payload = await client.request(`/v1/sessions/${id}/apply-runs/${runId}/heartbeat`, { method: 'POST', body: JSON.stringify({ claimAttemptId, claimCapability }) }, token);
|
|
338
|
+
claimLeases.start({ sessionId: id, token, runId, claimAttemptId, claimCapability });
|
|
339
|
+
return result(payload);
|
|
340
|
+
});
|
|
92
341
|
server.registerTool('foundry_design_get_apply_run', {
|
|
93
342
|
description: 'Read one persistent Foundry apply run, including progress and verification.',
|
|
94
343
|
inputSchema: z.object({
|
|
@@ -103,6 +352,7 @@ serveStdio(() => {
|
|
|
103
352
|
sessionId: z.string().optional(),
|
|
104
353
|
token: z.string().optional(),
|
|
105
354
|
runId: z.string().min(1),
|
|
355
|
+
claimAttemptId: z.string().min(1),
|
|
106
356
|
state: z.enum(['applying', 'rebuilding', 'verifying', 'failed']),
|
|
107
357
|
message: z.string().optional(),
|
|
108
358
|
changedFiles: z.array(z.string()).optional(),
|
|
@@ -115,7 +365,16 @@ serveStdio(() => {
|
|
|
115
365
|
.optional(),
|
|
116
366
|
error: z.string().optional(),
|
|
117
367
|
}),
|
|
118
|
-
}, async ({ sessionId, token, runId, ...update }) =>
|
|
368
|
+
}, async ({ sessionId, token, runId, ...update }) => {
|
|
369
|
+
const claimCapability = claimLeases.capability(runId, update.claimAttemptId);
|
|
370
|
+
if (!claimCapability) {
|
|
371
|
+
throw new Error('The private Apply claim capability is unavailable. Reclaim the run.');
|
|
372
|
+
}
|
|
373
|
+
const payload = await client.request(`/v1/sessions/${client.sessionId(sessionId)}/apply-runs/${runId}`, { method: 'PATCH', body: JSON.stringify({ ...update, claimCapability }) }, token);
|
|
374
|
+
if (update.state === 'failed')
|
|
375
|
+
claimLeases.stop(runId);
|
|
376
|
+
return result(payload);
|
|
377
|
+
});
|
|
119
378
|
server.registerTool('foundry_design_review_change', {
|
|
120
379
|
description: 'Mark one recorded design change approved or rejected during the review step.',
|
|
121
380
|
inputSchema: z.object({
|
|
@@ -134,36 +393,76 @@ serveStdio(() => {
|
|
|
134
393
|
}),
|
|
135
394
|
}, async ({ sessionId, token, format }) => result(await client.request(`/v1/sessions/${client.sessionId(sessionId)}/export?format=${format}`, {}, token)));
|
|
136
395
|
server.registerTool('foundry_design_record_apply_result', {
|
|
137
|
-
description: '
|
|
138
|
-
inputSchema: z
|
|
396
|
+
description: 'Acknowledge that the exact frozen changes for a claimed apply run produced a source diff. This tool does not edit source files or complete verification.',
|
|
397
|
+
inputSchema: z
|
|
398
|
+
.object({
|
|
139
399
|
sessionId: z.string().optional(),
|
|
140
400
|
token: z.string().optional(),
|
|
401
|
+
runId: z.string().min(1).optional(),
|
|
402
|
+
claimAttemptId: z.string().min(1).optional(),
|
|
141
403
|
changeIds: z.array(z.string()).min(1),
|
|
404
|
+
})
|
|
405
|
+
.superRefine((input, context) => {
|
|
406
|
+
if (Boolean(input.runId) !== Boolean(input.claimAttemptId)) {
|
|
407
|
+
context.addIssue({
|
|
408
|
+
code: 'custom',
|
|
409
|
+
message: 'runId and claimAttemptId must be provided together',
|
|
410
|
+
});
|
|
411
|
+
}
|
|
142
412
|
}),
|
|
143
|
-
}, async ({ sessionId, token, changeIds }) => {
|
|
413
|
+
}, async ({ sessionId, token, runId, claimAttemptId, changeIds }) => {
|
|
144
414
|
const id = client.sessionId(sessionId);
|
|
145
|
-
const
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
415
|
+
const claimCapability = runId && claimAttemptId ? claimLeases.capability(runId, claimAttemptId) : undefined;
|
|
416
|
+
if (runId && claimAttemptId && !claimCapability) {
|
|
417
|
+
throw new Error('The private Apply claim capability is unavailable. Reclaim the run.');
|
|
418
|
+
}
|
|
419
|
+
return result(await client.request(runId && claimAttemptId
|
|
420
|
+
? `/v1/sessions/${id}/apply-runs/${runId}/apply-result`
|
|
421
|
+
: `/v1/sessions/${id}/apply-runs/apply-result`, {
|
|
422
|
+
method: 'POST',
|
|
423
|
+
body: JSON.stringify(runId && claimAttemptId
|
|
424
|
+
? { claimAttemptId, claimCapability, changeIds }
|
|
425
|
+
: { changeIds }),
|
|
426
|
+
}, token));
|
|
149
427
|
});
|
|
150
428
|
server.registerTool('foundry_design_record_verification', {
|
|
151
429
|
description: 'Store measured post-build verification results for the applied change set.',
|
|
152
430
|
inputSchema: z.object({
|
|
153
431
|
sessionId: z.string().optional(),
|
|
154
432
|
token: z.string().optional(),
|
|
155
|
-
runId: z.string().
|
|
433
|
+
runId: z.string().min(1),
|
|
434
|
+
claimAttemptId: z.string().min(1),
|
|
156
435
|
results: z.array(z.object({
|
|
436
|
+
applyRunId: z.string().min(1),
|
|
437
|
+
claimAttemptId: z.string().min(1),
|
|
157
438
|
changeId: z.string(),
|
|
158
439
|
property: z.string(),
|
|
159
440
|
requested: z.unknown(),
|
|
160
441
|
rendered: z.unknown(),
|
|
161
442
|
passed: z.boolean(),
|
|
443
|
+
context: verificationContextSchema.optional(),
|
|
162
444
|
reason: z.string().optional(),
|
|
445
|
+
geometry: verificationGeometrySchema.optional(),
|
|
446
|
+
evidence: z.array(z.string().min(1)).default([]),
|
|
163
447
|
verifiedAt: z.string().datetime(),
|
|
164
448
|
})),
|
|
165
449
|
}),
|
|
166
|
-
}, async ({ sessionId, token, runId, results }) =>
|
|
450
|
+
}, async ({ sessionId, token, runId, claimAttemptId, results }) => {
|
|
451
|
+
const claimCapability = claimLeases.capability(runId, claimAttemptId);
|
|
452
|
+
if (!claimCapability) {
|
|
453
|
+
throw new Error('The private Apply claim capability is unavailable. Reclaim the run.');
|
|
454
|
+
}
|
|
455
|
+
return result(await client.request(`/v1/sessions/${client.sessionId(sessionId)}/verify`, {
|
|
456
|
+
method: 'POST',
|
|
457
|
+
body: JSON.stringify({
|
|
458
|
+
source: 'native-agent',
|
|
459
|
+
runId,
|
|
460
|
+
claimAttemptId,
|
|
461
|
+
claimCapability,
|
|
462
|
+
results,
|
|
463
|
+
}),
|
|
464
|
+
}, token));
|
|
465
|
+
});
|
|
167
466
|
return server;
|
|
168
467
|
});
|
|
169
468
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|