@minicor/mcp-server 4.7.0 → 4.9.0
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 +100 -10
- package/dist/__live__/blueprints.live.test.d.ts +2 -0
- package/dist/__live__/blueprints.live.test.d.ts.map +1 -0
- package/dist/__live__/blueprints.live.test.js +610 -0
- package/dist/__live__/blueprints.live.test.js.map +1 -0
- package/dist/__tests__/blueprints-tools.test.d.ts +2 -0
- package/dist/__tests__/blueprints-tools.test.d.ts.map +1 -0
- package/dist/__tests__/blueprints-tools.test.js +1190 -0
- package/dist/__tests__/blueprints-tools.test.js.map +1 -0
- package/dist/__tests__/config-stores.test.js +8 -7
- package/dist/__tests__/config-stores.test.js.map +1 -1
- package/dist/__tests__/dev-mode-draft.test.js +9 -10
- package/dist/__tests__/dev-mode-draft.test.js.map +1 -1
- package/dist/__tests__/discovery.test.js +6 -5
- package/dist/__tests__/discovery.test.js.map +1 -1
- package/dist/__tests__/helpers.test.js +20 -0
- package/dist/__tests__/helpers.test.js.map +1 -1
- package/dist/__tests__/http-server.test.js +118 -0
- package/dist/__tests__/http-server.test.js.map +1 -1
- package/dist/__tests__/jobs-tools.test.js +76 -0
- package/dist/__tests__/jobs-tools.test.js.map +1 -1
- package/dist/__tests__/mds-errors.test.d.ts +2 -0
- package/dist/__tests__/mds-errors.test.d.ts.map +1 -0
- package/dist/__tests__/mds-errors.test.js +91 -0
- package/dist/__tests__/mds-errors.test.js.map +1 -0
- package/dist/__tests__/server-surface.test.js +19 -0
- package/dist/__tests__/server-surface.test.js.map +1 -1
- package/dist/__tests__/state.test.js +104 -44
- package/dist/__tests__/state.test.js.map +1 -1
- package/dist/__tests__/vm-broker.test.d.ts +2 -0
- package/dist/__tests__/vm-broker.test.d.ts.map +1 -0
- package/dist/__tests__/vm-broker.test.js +812 -0
- package/dist/__tests__/vm-broker.test.js.map +1 -0
- package/dist/__tests__/vm-management.test.d.ts +2 -0
- package/dist/__tests__/vm-management.test.d.ts.map +1 -0
- package/dist/__tests__/vm-management.test.js +507 -0
- package/dist/__tests__/vm-management.test.js.map +1 -0
- package/dist/agent-service-client.d.ts +12 -0
- package/dist/agent-service-client.d.ts.map +1 -1
- package/dist/agent-service-client.js +74 -0
- package/dist/agent-service-client.js.map +1 -1
- package/dist/bootstrap-perms.d.ts +12 -0
- package/dist/bootstrap-perms.d.ts.map +1 -0
- package/dist/bootstrap-perms.js +92 -0
- package/dist/bootstrap-perms.js.map +1 -0
- package/dist/bootstrap.js +2 -63
- package/dist/bootstrap.js.map +1 -1
- package/dist/helpers.d.ts +14 -2
- package/dist/helpers.d.ts.map +1 -1
- package/dist/helpers.js +12 -3
- package/dist/helpers.js.map +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -1
- package/dist/index.js.map +1 -1
- package/dist/lds-client.d.ts +59 -10
- package/dist/lds-client.d.ts.map +1 -1
- package/dist/lds-client.js +53 -9
- package/dist/lds-client.js.map +1 -1
- package/dist/lib.d.ts +6 -0
- package/dist/lib.d.ts.map +1 -1
- package/dist/lib.js +5 -1
- package/dist/lib.js.map +1 -1
- package/dist/mds-errors.d.ts +32 -0
- package/dist/mds-errors.d.ts.map +1 -0
- package/dist/mds-errors.js +61 -0
- package/dist/mds-errors.js.map +1 -0
- package/dist/middleware-service-client.d.ts +286 -0
- package/dist/middleware-service-client.d.ts.map +1 -1
- package/dist/middleware-service-client.js +143 -1
- package/dist/middleware-service-client.js.map +1 -1
- package/dist/server-surface.d.ts +2 -0
- package/dist/server-surface.d.ts.map +1 -1
- package/dist/server-surface.js +31 -3
- package/dist/server-surface.js.map +1 -1
- package/dist/state.d.ts +28 -14
- package/dist/state.d.ts.map +1 -1
- package/dist/state.js +58 -40
- package/dist/state.js.map +1 -1
- package/dist/sync.js +5 -2
- package/dist/sync.js.map +1 -1
- package/dist/tools/agents.d.ts.map +1 -1
- package/dist/tools/agents.js +2 -3
- package/dist/tools/agents.js.map +1 -1
- package/dist/tools/blueprints.d.ts +20 -0
- package/dist/tools/blueprints.d.ts.map +1 -0
- package/dist/tools/blueprints.js +1193 -0
- package/dist/tools/blueprints.js.map +1 -0
- package/dist/tools/config-stores.d.ts.map +1 -1
- package/dist/tools/config-stores.js +11 -12
- package/dist/tools/config-stores.js.map +1 -1
- package/dist/tools/context.d.ts.map +1 -1
- package/dist/tools/context.js +1 -2
- package/dist/tools/context.js.map +1 -1
- package/dist/tools/core.d.ts.map +1 -1
- package/dist/tools/core.js +2 -3
- package/dist/tools/core.js.map +1 -1
- package/dist/tools/dev-mode-draft.d.ts.map +1 -1
- package/dist/tools/dev-mode-draft.js +16 -17
- package/dist/tools/dev-mode-draft.js.map +1 -1
- package/dist/tools/discovery.d.ts.map +1 -1
- package/dist/tools/discovery.js +7 -8
- package/dist/tools/discovery.js.map +1 -1
- package/dist/tools/issues.d.ts.map +1 -1
- package/dist/tools/issues.js +7 -8
- package/dist/tools/issues.js.map +1 -1
- package/dist/tools/jobs.d.ts.map +1 -1
- package/dist/tools/jobs.js +58 -7
- package/dist/tools/jobs.js.map +1 -1
- package/dist/tools/session.d.ts.map +1 -1
- package/dist/tools/session.js +9 -10
- package/dist/tools/session.js.map +1 -1
- package/dist/tools/skills.d.ts.map +1 -1
- package/dist/tools/skills.js +2 -3
- package/dist/tools/skills.js.map +1 -1
- package/dist/tools/sync-tools.d.ts.map +1 -1
- package/dist/tools/sync-tools.js +2 -3
- package/dist/tools/sync-tools.js.map +1 -1
- package/dist/tools/tasks.d.ts +3 -0
- package/dist/tools/tasks.d.ts.map +1 -0
- package/dist/tools/tasks.js +51 -0
- package/dist/tools/tasks.js.map +1 -0
- package/dist/tools/tfa.d.ts.map +1 -1
- package/dist/tools/tfa.js +14 -5
- package/dist/tools/tfa.js.map +1 -1
- package/dist/tools/vm-rpa.d.ts +2 -1
- package/dist/tools/vm-rpa.d.ts.map +1 -1
- package/dist/tools/vm-rpa.js +82 -38
- package/dist/tools/vm-rpa.js.map +1 -1
- package/dist/tools/vm.d.ts +2 -1
- package/dist/tools/vm.d.ts.map +1 -1
- package/dist/tools/vm.js +511 -114
- package/dist/tools/vm.js.map +1 -1
- package/dist/tools/workflow-ops.d.ts.map +1 -1
- package/dist/tools/workflow-ops.js.map +1 -1
- package/dist/types.d.ts +6 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/vm-service-client.d.ts +8 -2
- package/dist/vm-service-client.d.ts.map +1 -1
- package/dist/vm-service-client.js.map +1 -1
- package/dist/vm-target.d.ts +55 -0
- package/dist/vm-target.d.ts.map +1 -0
- package/dist/vm-target.js +134 -0
- package/dist/vm-target.js.map +1 -0
- package/package.json +2 -1
- package/skills/general/blueprint-vm-walkthrough.md +162 -0
package/dist/lds-client.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lds-client.d.ts","sourceRoot":"","sources":["../src/lds-client.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"lds-client.d.ts","sourceRoot":"","sources":["../src/lds-client.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAIH,MAAM,WAAW,OAAO;IACtB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,wEAAwE;AACxE,MAAM,MAAM,OAAO,GAAG,YAAY,GAAG,QAAQ,GAAG,OAAO,CAAC;AAExD,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,2EAA2E;IAC3E,IAAI,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC;CACzB;AAED,+EAA+E;AAC/E,wBAAgB,cAAc,CAAC,MAAM,EAAE,iBAAiB,GAAG,MAAM,CAEhE;AAED,MAAM,WAAW,qBAAqB;IACpC,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE;QACR,KAAK,EAAE,MAAM,CAAC;QACd,MAAM,EAAE,MAAM,CAAC;QACf,MAAM,EAAE,MAAM,CAAC;QACf,SAAS,EAAE,MAAM,CAAC;QAClB,UAAU,EAAE,MAAM,CAAC;QACnB,SAAS,EAAE,MAAM,CAAC;QAClB,mBAAmB,EAAE,MAAM,CAAC;KAC7B,CAAC;CACH;AAED,MAAM,WAAW,iBAAiB;IAChC,WAAW,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAC9B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,0EAA0E;IAC1E,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,oBAAoB;IACnC,MAAM,EAAE,OAAO,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,qBAAqB;IACpC,YAAY,CAAC,EAAE,oBAAoB,CAAC;IACpC,aAAa,CAAC,EAAE,oBAAoB,CAAC;CACtC;AAED,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,eAAe,EAAE,MAAM,CAAC;IACxB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACrC,YAAY,CAAC,EAAE,qBAAqB,CAAC;IACrC,6DAA6D;IAC7D,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,0BAA0B;IACzC,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,OAAO,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,OAAO,CAAC;IACnB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,mBAAmB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC/B,YAAY,EAAE,MAAM,CAAC;IACrB,eAAe,EAAE,MAAM,CAAC;IACxB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,iBAAiB,EAAE,MAAM,CAAC;IAC1B,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAClC,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAChC;AAED,MAAM,WAAW,4BAA4B;IAC3C,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,OAAO,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,EAAE,MAAM,CAAC;IACrB,eAAe,EAAE,MAAM,CAAC;IACxB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,iBAAiB,EAAE,MAAM,CAAC;IAC1B,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAClC,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAChC;AAID,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,uEAAuE;IACvE,UAAU,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC;CAC7B;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,gDAAgD;IAChD,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,KAAK,EAAE,cAAc,GAAG,IAAI,CAAC;IAC7B,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,iBAAiB;IAChC,MAAM,CAAC,EAAE;QAAE,OAAO,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAChD,KAAK,EAAE,aAAa,EAAE,CAAC;IACvB,+CAA+C;IAC/C,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChC,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACpC;AAED,MAAM,WAAW,wBAAwB;IACvC,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED,MAAM,WAAW,kBAAkB;IACjC,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AA8BD,wBAAsB,MAAM,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAGxE;AAED,8EAA8E;AAC9E,wBAAsB,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAEnE;AAED,wBAAsB,UAAU,CAC9B,OAAO,EAAE,MAAM,EACf,IAAI,CAAC,EAAE,OAAO,EACd,UAAU,CAAC,EAAE,MAAM,GAClB,OAAO,CAAC,qBAAqB,CAAC,CAQhC;AAED,wBAAsB,OAAO,CAC3B,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,MAAM,EACd,IAAI,CAAC,EAAE,iBAAiB,EACxB,IAAI,CAAC,EAAE,OAAO,GACb,OAAO,CAAC,kBAAkB,CAAC,CAiB7B;AAID,+EAA+E;AAC/E,wBAAsB,MAAM,CAC1B,OAAO,EAAE,MAAM,EACf,IAAI,CAAC,EAAE,OAAO,GACb,OAAO,CAAC,iBAAiB,CAAC,CAK5B;AAED,6FAA6F;AAC7F,wBAAsB,YAAY,CAChC,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,MAAM,EACZ,IAAI,CAAC,EAAE,OAAO,GACb,OAAO,CAAC,wBAAwB,CAAC,CAMnC;AAED,qFAAqF;AACrF,wBAAsB,WAAW,CAC/B,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,MAAM,EACZ,IAAI,CAAC,EAAE,OAAO,GACb,OAAO,CAAC,wBAAwB,CAAC,CAMnC;AAED,wBAAsB,eAAe,CACnC,OAAO,EAAE,MAAM,EACf,IAAI,CAAC,EAAE,OAAO,GACb,OAAO,CAAC,0BAA0B,CAAC,CAKrC;AAED,wBAAsB,iBAAiB,CACrC,OAAO,EAAE,MAAM,EACf,IAAI,CAAC,EAAE,OAAO,EACd,IAAI,CAAC,EAAE;IAAE,WAAW,CAAC,EAAE,MAAM,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,CAAA;CAAE,GACnD,OAAO,CAAC,4BAA4B,CAAC,CAUvC;AAED,wBAAsB,gBAAgB,CACpC,OAAO,EAAE,MAAM,EACf,IAAI,CAAC,EAAE;IAAE,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,SAAS,GAAG,QAAQ,CAAA;CAAE,EACxD,IAAI,CAAC,EAAE,OAAO,GACb,OAAO,CAAC;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,UAAU,EAAE,kBAAkB,EAAE,CAAA;CAAE,CAAC,CASjE"}
|
package/dist/lds-client.js
CHANGED
|
@@ -3,7 +3,16 @@
|
|
|
3
3
|
*
|
|
4
4
|
* Every method receives the base URL (Cloudflare Tunnel) and optional auth
|
|
5
5
|
* credentials so the caller (tool handler) can pull them from session state.
|
|
6
|
+
*
|
|
7
|
+
* Typed MDS errors ({"success": false, "error": <code>, ...}) are raised as
|
|
8
|
+
* MdsError with a readable message (see mds-errors.ts); anything else stays
|
|
9
|
+
* a plain HTTP error.
|
|
6
10
|
*/
|
|
11
|
+
import { mdsErrorFromBody } from "./mds-errors.js";
|
|
12
|
+
/** Normalize a /health response into a mode ("standalone" when unreported). */
|
|
13
|
+
export function modeFromHealth(health) {
|
|
14
|
+
return health.mode ?? "standalone";
|
|
15
|
+
}
|
|
7
16
|
function authHeaders(auth) {
|
|
8
17
|
if (!auth)
|
|
9
18
|
return {};
|
|
@@ -19,6 +28,9 @@ async function request(url, init) {
|
|
|
19
28
|
const res = await fetch(url, init);
|
|
20
29
|
if (!res.ok) {
|
|
21
30
|
const body = await res.text().catch(() => "");
|
|
31
|
+
const typed = mdsErrorFromBody(res.status, body);
|
|
32
|
+
if (typed)
|
|
33
|
+
throw typed;
|
|
22
34
|
throw new Error(`MDS ${init?.method ?? "GET"} ${url} returned ${res.status}: ${body}`);
|
|
23
35
|
}
|
|
24
36
|
return res.json();
|
|
@@ -27,8 +39,15 @@ export async function health(baseUrl) {
|
|
|
27
39
|
const url = `${normalizeUrl(baseUrl)}/health`;
|
|
28
40
|
return request(url);
|
|
29
41
|
}
|
|
30
|
-
|
|
31
|
-
|
|
42
|
+
/** Live mode discovery: reads /health.mode ("standalone" when unreported). */
|
|
43
|
+
export async function discoverMode(baseUrl) {
|
|
44
|
+
return modeFromHealth(await health(baseUrl));
|
|
45
|
+
}
|
|
46
|
+
export async function screenshot(baseUrl, auth, targetUser) {
|
|
47
|
+
const qs = targetUser
|
|
48
|
+
? `?targetUser=${encodeURIComponent(targetUser)}`
|
|
49
|
+
: "";
|
|
50
|
+
const url = `${normalizeUrl(baseUrl)}/screenshot${qs}`;
|
|
32
51
|
return request(url, {
|
|
33
52
|
headers: { "Content-Type": "application/json", ...authHeaders(auth) },
|
|
34
53
|
});
|
|
@@ -45,30 +64,55 @@ export async function execute(baseUrl, script, opts, auth) {
|
|
|
45
64
|
payload.expectedPreState = opts.expectedPreState;
|
|
46
65
|
if (opts?.expectedPostState)
|
|
47
66
|
payload.expectedPostState = opts.expectedPostState;
|
|
67
|
+
if (opts?.targetUser)
|
|
68
|
+
payload.targetUser = opts.targetUser;
|
|
48
69
|
return request(url, {
|
|
49
70
|
method: "POST",
|
|
50
71
|
headers: { "Content-Type": "application/json", ...authHeaders(auth) },
|
|
51
72
|
body: JSON.stringify(payload),
|
|
52
73
|
});
|
|
53
74
|
}
|
|
54
|
-
|
|
55
|
-
|
|
75
|
+
// ── Broker status + session lifecycle ─────────────────────────
|
|
76
|
+
/** GET /status — broker-only; lists registered users + session/agent state. */
|
|
77
|
+
export async function status(baseUrl, auth) {
|
|
78
|
+
const url = `${normalizeUrl(baseUrl)}/status`;
|
|
56
79
|
return request(url, {
|
|
57
80
|
headers: { "Content-Type": "application/json", ...authHeaders(auth) },
|
|
58
81
|
});
|
|
59
82
|
}
|
|
60
|
-
|
|
61
|
-
|
|
83
|
+
/** POST /sessions/{user}/start — blocks until the session is up and its agent registered. */
|
|
84
|
+
export async function sessionStart(baseUrl, user, auth) {
|
|
85
|
+
const url = `${normalizeUrl(baseUrl)}/sessions/${encodeURIComponent(user)}/start`;
|
|
62
86
|
return request(url, {
|
|
87
|
+
method: "POST",
|
|
63
88
|
headers: { "Content-Type": "application/json", ...authHeaders(auth) },
|
|
64
89
|
});
|
|
65
90
|
}
|
|
66
|
-
|
|
67
|
-
|
|
91
|
+
/** POST /sessions/{user}/stop — disconnects (session stays logged in, goes dark). */
|
|
92
|
+
export async function sessionStop(baseUrl, user, auth) {
|
|
93
|
+
const url = `${normalizeUrl(baseUrl)}/sessions/${encodeURIComponent(user)}/stop`;
|
|
68
94
|
return request(url, {
|
|
69
95
|
method: "POST",
|
|
70
96
|
headers: { "Content-Type": "application/json", ...authHeaders(auth) },
|
|
71
|
-
|
|
97
|
+
});
|
|
98
|
+
}
|
|
99
|
+
export async function executionStatus(baseUrl, auth) {
|
|
100
|
+
const url = `${normalizeUrl(baseUrl)}/execute/status`;
|
|
101
|
+
return request(url, {
|
|
102
|
+
headers: { "Content-Type": "application/json", ...authHeaders(auth) },
|
|
103
|
+
});
|
|
104
|
+
}
|
|
105
|
+
export async function executionProgress(baseUrl, auth, opts) {
|
|
106
|
+
const params = new URLSearchParams();
|
|
107
|
+
if (opts?.executionId)
|
|
108
|
+
params.set("executionId", opts.executionId);
|
|
109
|
+
// Brokers route the progress lookup to that user's agent.
|
|
110
|
+
if (opts?.targetUser)
|
|
111
|
+
params.set("targetUser", opts.targetUser);
|
|
112
|
+
const qs = params.toString();
|
|
113
|
+
const url = `${normalizeUrl(baseUrl)}/execute/progress${qs ? `?${qs}` : ""}`;
|
|
114
|
+
return request(url, {
|
|
115
|
+
headers: { "Content-Type": "application/json", ...authHeaders(auth) },
|
|
72
116
|
});
|
|
73
117
|
}
|
|
74
118
|
export async function recentExecutions(baseUrl, opts, auth) {
|
package/dist/lds-client.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lds-client.js","sourceRoot":"","sources":["../src/lds-client.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"lds-client.js","sourceRoot":"","sources":["../src/lds-client.ts"],"names":[],"mappings":"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"}
|
package/dist/lib.d.ts
CHANGED
|
@@ -39,6 +39,12 @@ export interface MinicorServerOptions {
|
|
|
39
39
|
* because its disk is ephemeral and shared across users.
|
|
40
40
|
*/
|
|
41
41
|
localTools?: boolean;
|
|
42
|
+
/**
|
|
43
|
+
* Let the stateful direct-VM tools hold a live VM connection. Default true.
|
|
44
|
+
* The hosted stateless HTTP server sets false (a per-request server cannot
|
|
45
|
+
* hold a connection); the tools stay registered but point to a local install.
|
|
46
|
+
*/
|
|
47
|
+
directVmTools?: boolean;
|
|
42
48
|
}
|
|
43
49
|
/**
|
|
44
50
|
* Create and connect a Minicor MCP server on the given transport.
|
package/dist/lib.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lib.d.ts","sourceRoot":"","sources":["../src/lib.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,+CAA+C,CAAC;AAE/E,OAAO,EAIL,KAAK,MAAM,EACZ,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"lib.d.ts","sourceRoot":"","sources":["../src/lib.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,+CAA+C,CAAC;AAE/E,OAAO,EAIL,KAAK,MAAM,EACZ,MAAM,YAAY,CAAC;AAmBpB,MAAM,WAAW,gBAAgB;IAC/B,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,oBAAoB;IACnC,+CAA+C;IAC/C,WAAW,CAAC,EAAE,gBAAgB,CAAC;IAC/B,2CAA2C;IAC3C,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,6DAA6D;IAC7D,iBAAiB,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,gBAAgB,GAAG;QAAE,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC,CAAC;IACrF,uEAAuE;IACvE,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,wKAAwK;IACxK,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB;;;;OAIG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB;;;;OAIG;IACH,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB;AAkDD;;;GAGG;AACH,wBAAsB,mBAAmB,CACvC,SAAS,EAAE,SAAS,EACpB,IAAI,GAAE,oBAAyB,GAC9B,OAAO,CAAC;IAAE,MAAM,EAAE,SAAS,CAAC;IAAC,KAAK,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;CAAE,CAAC,CAoJ5D;AAED,YAAY,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AACvD,YAAY,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC"}
|
package/dist/lib.js
CHANGED
|
@@ -18,6 +18,7 @@ import { apiBaseToRegion, resolveApiBase, validateApiBaseUrl, } from "./paths.js
|
|
|
18
18
|
import { TokenProvider } from "./token-provider.js";
|
|
19
19
|
import { CodeModeToolRegistry, asMcpServer, buildCodeModeInstructions, shouldUseCodeMode, } from "./codemode.js";
|
|
20
20
|
import { SERVER_NAME, buildInstructions, registerSurface, } from "./server-surface.js";
|
|
21
|
+
import { createSessionState } from "./state.js";
|
|
21
22
|
import { autoCheckpoint } from "./tools/session.js";
|
|
22
23
|
const DEFAULT_VM_SERVICE_URL = "https://lam-vm-service-ernfuwetfa-uc.a.run.app";
|
|
23
24
|
async function refreshViaApi(apiBase, refreshToken) {
|
|
@@ -58,6 +59,7 @@ function buildProvider(creds, apiBase, onUpdate) {
|
|
|
58
59
|
*/
|
|
59
60
|
export async function createMinicorServer(transport, opts = {}) {
|
|
60
61
|
const localTools = opts.localTools ?? true;
|
|
62
|
+
const directVmTools = opts.directVmTools ?? true;
|
|
61
63
|
const codeModeEnabled = opts.codeMode ?? shouldUseCodeMode();
|
|
62
64
|
const instructions = buildInstructions(localTools);
|
|
63
65
|
const server = new McpServer({ name: SERVER_NAME, version: "4.7.0" }, {
|
|
@@ -119,6 +121,8 @@ export async function createMinicorServer(transport, opts = {}) {
|
|
|
119
121
|
: server;
|
|
120
122
|
const deps = {
|
|
121
123
|
server: registrationServer,
|
|
124
|
+
// Each instance owns its VM/session state; never shared across servers.
|
|
125
|
+
state: createSessionState(),
|
|
122
126
|
client: (region) => {
|
|
123
127
|
const r = region ?? getDefaultRegion();
|
|
124
128
|
const c = clients.get(r);
|
|
@@ -158,7 +162,7 @@ export async function createMinicorServer(transport, opts = {}) {
|
|
|
158
162
|
getAuthToken: (region) => tokens.get(region ?? getDefaultRegion()) ?? "",
|
|
159
163
|
availableRegions: () => [...clients.keys()],
|
|
160
164
|
};
|
|
161
|
-
registerSurface(deps, { localTools });
|
|
165
|
+
registerSurface(deps, { localTools, directVmTools });
|
|
162
166
|
if (codeModeRegistry) {
|
|
163
167
|
codeModeRegistry.registerCodeModeTool();
|
|
164
168
|
}
|
package/dist/lib.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lib.js","sourceRoot":"","sources":["../src/lib.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEpE,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EACL,eAAe,EACf,cAAc,EACd,kBAAkB,GAEnB,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAEpD,OAAO,EACL,oBAAoB,EACpB,WAAW,EACX,yBAAyB,EACzB,iBAAiB,GAClB,MAAM,eAAe,CAAC;AACvB,OAAO,EACL,WAAW,EACX,iBAAiB,EACjB,eAAe,GAChB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAEpD,MAAM,sBAAsB,GAAG,gDAAgD,CAAC;
|
|
1
|
+
{"version":3,"file":"lib.js","sourceRoot":"","sources":["../src/lib.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEpE,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EACL,eAAe,EACf,cAAc,EACd,kBAAkB,GAEnB,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAEpD,OAAO,EACL,oBAAoB,EACpB,WAAW,EACX,yBAAyB,EACzB,iBAAiB,GAClB,MAAM,eAAe,CAAC;AACvB,OAAO,EACL,WAAW,EACX,iBAAiB,EACjB,eAAe,GAChB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAChD,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAEpD,MAAM,sBAAsB,GAAG,gDAAgD,CAAC;AAiChF,KAAK,UAAU,aAAa,CAC1B,OAAe,EACf,YAAoB;IAEpB,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,OAAO,eAAe,EAAE;YACjD,MAAM,EAAE,MAAM;YACd,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;YAC/C,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,YAAY,EAAE,CAAC;SACvC,CAAC,CAAC;QACH,IAAI,CAAC,GAAG,CAAC,EAAE;YAAE,OAAO,IAAI,CAAC;QACzB,MAAM,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,CAI7B,CAAC;QACF,OAAO;YACL,KAAK,EAAE,IAAI,CAAC,YAAY;YACxB,YAAY,EAAE,IAAI,CAAC,aAAa,IAAI,YAAY;YAChD,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,UAAU,GAAG,IAAI;SAC/C,CAAC;IACJ,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,SAAS,aAAa,CACpB,KAAuB,EACvB,OAAe,EACf,QAAiC;IAEjC,IAAI,mBAAmB,GAAG,KAAK,CAAC,aAAa,CAAC;IAE9C,MAAM,QAAQ,GAAG,IAAI,aAAa,CAChC,KAAK,CAAC,YAAY,EAClB,KAAK,CAAC,UAAU,EAChB,KAAK,IAAI,EAAE;QACT,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,OAAO,EAAE,mBAAmB,CAAC,CAAC;QACjE,IAAI,CAAC,MAAM;YAAE,OAAO,IAAI,CAAC;QACzB,mBAAmB,GAAG,MAAM,CAAC,YAAY,CAAC;QAC1C,OAAO,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,SAAS,EAAE,MAAM,CAAC,SAAS,EAAE,CAAC;IAC9D,CAAC,CACF,CAAC;IAEF,QAAQ,CAAC,gBAAgB,GAAG,QAAQ,CAAC;IACrC,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,SAAoB,EACpB,OAA6B,EAAE;IAE/B,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC;IAC3C,MAAM,aAAa,GAAG,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC;IACjD,MAAM,eAAe,GAAG,IAAI,CAAC,QAAQ,IAAI,iBAAiB,EAAE,CAAC;IAC7D,MAAM,YAAY,GAAG,iBAAiB,CAAC,UAAU,CAAC,CAAC;IACnD,MAAM,MAAM,GAAG,IAAI,SAAS,CAC1B,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,OAAO,EAAE,EACvC;QACE,YAAY,EAAE,eAAe;YAC3B,CAAC,CAAC,yBAAyB,CAAC,YAAY,EAAE;gBACtC,gBAAgB,EAAE,UAAU;aAC7B,CAAC;YACJ,CAAC,CAAC,YAAY;KACjB,CACF,CAAC;IAEF,MAAM,OAAO,GAAG,IAAI,GAAG,EAAyB,CAAC;IACjD,MAAM,MAAM,GAAG,IAAI,GAAG,EAAkB,CAAC;IACzC,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAkB,CAAC;IAC3C,MAAM,gBAAgB,GAAG,IAAI,GAAG,EAAkB,CAAC;IACnD,MAAM,cAAc,GAAG,IAAI,GAAG,EAAyB,CAAC;IAExD,SAAS,mBAAmB,CAAC,MAAc,EAAE,OAAe;QAC1D,OAAO,CAAC,GAAG,CACT,MAAM,EACN,IAAI,aAAa,CACf,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,EACnD,OAAO,EACP,cAAc,CAAC,GAAG,CAAC,MAAM,CAAC,CAC3B,CACF,CAAC;QACF,QAAQ,CAAC,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAChC,CAAC;IAED,IAAI,IAAI,CAAC,iBAAiB,EAAE,CAAC;QAC3B,KAAK,MAAM,CAAC,CAAC,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,iBAAiB,CAAwD,EAAE,CAAC;YACvH,IAAI,CAAC,KAAK;gBAAE,SAAS;YACrB,MAAM,IAAI,GAAG,KAAK,CAAC,OAAO,IAAI,cAAc,CAAC,CAAC,CAAC,CAAC;YAChD,MAAM,QAAQ,GAAG,aAAa,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;YACrE,OAAO,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,aAAa,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,CAAC,YAAY,EAAE,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC;YACjG,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,YAAY,CAAC,CAAC;YAClC,cAAc,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC;YAChC,QAAQ,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;QACxB,CAAC;IACH,CAAC;IAED,IAAI,OAAO,CAAC,IAAI,KAAK,CAAC,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;QAC3C,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,IAAI,cAAc,CAAC,IAAI,CAAC,CAAC;QACrD,MAAM,MAAM,GAAW,eAAe,CAAC,OAAO,CAAC,CAAC;QAChD,MAAM,QAAQ,GAAG,aAAa,CAAC,IAAI,CAAC,WAAW,EAAE,OAAO,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC;QACxF,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,aAAa,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,IAAI,CAAC,WAAW,CAAC,YAAY,EAAE,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAC;QACpH,MAAM,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC;QAClD,cAAc,CAAC,GAAG,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;QACrC,QAAQ,CAAC,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAChC,CAAC;IAED,IAAI,OAAO,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;QACvB,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,IAAI,cAAc,CAAC,IAAI,CAAC,CAAC;QACrD,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,aAAa,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC;QAC7E,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;QACrB,QAAQ,CAAC,GAAG,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IAC9B,CAAC;IAED,MAAM,aAAa,GAAG,IAAI,CAAC,gBAAgB,IAAI,OAAO,CAAC,GAAG,CAAC,kBAAkB,IAAI,sBAAsB,CAAC;IAExG,SAAS,gBAAgB;QACvB,IAAI,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC;YAAE,OAAO,IAAI,CAAC;QACnC,IAAI,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC;YAAE,OAAO,IAAI,CAAC;QACnC,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,gBAAgB,GAAG,eAAe;QACtC,CAAC,CAAC,IAAI,oBAAoB,CAAC,MAAM,CAAC;QAClC,CAAC,CAAC,IAAI,CAAC;IACT,MAAM,kBAAkB,GAAG,gBAAgB;QACzC,CAAC,CAAC,WAAW,CAAC,gBAAgB,CAAC;QAC/B,CAAC,CAAC,MAAM,CAAC;IAEX,MAAM,IAAI,GAAa;QACrB,MAAM,EAAE,kBAAkB;QAC1B,wEAAwE;QACxE,KAAK,EAAE,kBAAkB,EAAE;QAC3B,MAAM,EAAE,CAAC,MAAe,EAAE,EAAE;YAC1B,MAAM,CAAC,GAAG,MAAM,IAAI,gBAAgB,EAAE,CAAC;YACvC,MAAM,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YACzB,IAAI,CAAC,CAAC,EAAE,CAAC;gBACP,MAAM,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAAC,WAAW,EAAE,UAAU,CAAC,CAAC;YACzE,CAAC;YACD,OAAO,CAAC,CAAC;QACX,CAAC;QACD,UAAU,EAAE,CAAC,MAAe,EAAE,EAAE;YAC9B,MAAM,CAAC,GAAG,MAAM,IAAI,gBAAgB,EAAE,CAAC;YACvC,OAAO,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,cAAc,CAAC,CAAC,CAAC,CAAC;QAC9C,CAAC;QACD,gBAAgB,EAAE,CAAC,MAAe,EAAE,EAAE;YACpC,MAAM,CAAC,GAAG,MAAM,IAAI,gBAAgB,EAAE,CAAC;YACvC,OAAO,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QACjC,CAAC;QACD,UAAU,EAAE,KAAK,EAAE,MAAc,EAAE,OAAe,EAAE,EAAE;YACpD,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;gBACzB,MAAM,IAAI,KAAK,CAAC,4BAA4B,MAAM,CAAC,WAAW,EAAE,UAAU,CAAC,CAAC;YAC9E,CAAC;YACD,MAAM,aAAa,GAAG,kBAAkB,CAAC,OAAO,CAAC,CAAC;YAClD,gBAAgB,CAAC,GAAG,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;YAC5C,MAAM,gBAAgB,GAAG,cAAc,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;YAC/D,mBAAmB,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC;YAC9C,OAAO,EAAE,aAAa,EAAE,gBAAgB,EAAE,CAAC;QAC7C,CAAC;QACD,YAAY,EAAE,KAAK,EAAE,MAAc,EAAE,EAAE;YACrC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;gBACzB,MAAM,IAAI,KAAK,CAAC,4BAA4B,MAAM,CAAC,WAAW,EAAE,UAAU,CAAC,CAAC;YAC9E,CAAC;YACD,gBAAgB,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;YAChC,MAAM,gBAAgB,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC;YAChD,mBAAmB,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC;YAC9C,OAAO,EAAE,aAAa,EAAE,SAAS,EAAE,gBAAgB,EAAE,CAAC;QACxD,CAAC;QACD,gBAAgB,EAAE,GAAG,EAAE,CAAC,aAAa;QACrC,YAAY,EAAE,CAAC,MAAe,EAAE,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,IAAI,gBAAgB,EAAE,CAAC,IAAI,EAAE;QACjF,gBAAgB,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,OAAO,CAAC,IAAI,EAAE,CAAa;KACxD,CAAC;IAEF,eAAe,CAAC,IAAI,EAAE,EAAE,UAAU,EAAE,aAAa,EAAE,CAAC,CAAC;IACrD,IAAI,gBAAgB,EAAE,CAAC;QACrB,gBAAgB,CAAC,oBAAoB,EAAE,CAAC;IAC1C,CAAC;IAED,MAAM,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IAEhC,SAAS,CAAC,OAAO,GAAG,KAAK,IAAI,EAAE;QAC7B,IAAI,UAAU,EAAE,CAAC;YACf,MAAM,cAAc,CAAC,IAAI,CAAC,CAAC;QAC7B,CAAC;IACH,CAAC,CAAC;IAEF,OAAO;QACL,MAAM;QACN,KAAK,EAAE,KAAK,IAAI,EAAE;YAChB,IAAI,UAAU,EAAE,CAAC;gBACf,MAAM,cAAc,CAAC,IAAI,CAAC,CAAC;YAC7B,CAAC;YACD,IAAI,CAAC;gBACH,MAAM,MAAM,CAAC,KAAK,EAAE,CAAC;YACvB,CAAC;YAAC,MAAM,CAAC;gBACP,oBAAoB;YACtB,CAAC;QACH,CAAC;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Typed MDS error handling. Codes are owned by the MDS fixture
|
|
3
|
+
* `contracts/mds-errors.v1.json`; the payload's `detail` carries the actionable
|
|
4
|
+
* text, so messages are built from what MDS sent — no per-code prose to sync,
|
|
5
|
+
* and unknown codes from a newer MDS render the same way.
|
|
6
|
+
*/
|
|
7
|
+
export interface MdsErrorParts {
|
|
8
|
+
code: string;
|
|
9
|
+
httpStatus: number;
|
|
10
|
+
detail?: string;
|
|
11
|
+
knownUsers?: string[];
|
|
12
|
+
}
|
|
13
|
+
/** Render a typed MDS error into a readable, actionable message. */
|
|
14
|
+
export declare function formatMdsError(parts: MdsErrorParts): string;
|
|
15
|
+
/**
|
|
16
|
+
* A typed error surfaced by MDS as `{"success": false, "error": <code>, ...}`.
|
|
17
|
+
* `message` is already the readable formatted text, so tool handlers that
|
|
18
|
+
* render `e.message` show useful guidance without special-casing.
|
|
19
|
+
*/
|
|
20
|
+
export declare class MdsError extends Error {
|
|
21
|
+
readonly code: string;
|
|
22
|
+
readonly httpStatus: number;
|
|
23
|
+
readonly detail?: string;
|
|
24
|
+
readonly knownUsers?: string[];
|
|
25
|
+
constructor(parts: MdsErrorParts);
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Parse a non-2xx MDS response body into an MdsError when it carries a typed
|
|
29
|
+
* code, else null (caller falls back to a plain HTTP error).
|
|
30
|
+
*/
|
|
31
|
+
export declare function mdsErrorFromBody(httpStatus: number, body: string): MdsError | null;
|
|
32
|
+
//# sourceMappingURL=mds-errors.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mds-errors.d.ts","sourceRoot":"","sources":["../src/mds-errors.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;CACvB;AAED,oEAAoE;AACpE,wBAAgB,cAAc,CAAC,KAAK,EAAE,aAAa,GAAG,MAAM,CAY3D;AAED;;;;GAIG;AACH,qBAAa,QAAS,SAAQ,KAAK;IACjC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;gBAEnB,KAAK,EAAE,aAAa;CAQjC;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAC9B,UAAU,EAAE,MAAM,EAClB,IAAI,EAAE,MAAM,GACX,QAAQ,GAAG,IAAI,CAiBjB"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Typed MDS error handling. Codes are owned by the MDS fixture
|
|
3
|
+
* `contracts/mds-errors.v1.json`; the payload's `detail` carries the actionable
|
|
4
|
+
* text, so messages are built from what MDS sent — no per-code prose to sync,
|
|
5
|
+
* and unknown codes from a newer MDS render the same way.
|
|
6
|
+
*/
|
|
7
|
+
/** Render a typed MDS error into a readable, actionable message. */
|
|
8
|
+
export function formatMdsError(parts) {
|
|
9
|
+
const detail = parts.detail ? `: ${parts.detail}` : "";
|
|
10
|
+
const lines = [
|
|
11
|
+
`MDS error '${parts.code}' (HTTP ${parts.httpStatus})${detail}`,
|
|
12
|
+
];
|
|
13
|
+
if (parts.knownUsers && parts.knownUsers.length > 0) {
|
|
14
|
+
lines.push(`Registered users on this VM: ${parts.knownUsers.join(", ")}. ` +
|
|
15
|
+
`Pick one and retry with targetUser set (vm_list_sessions shows live session state).`);
|
|
16
|
+
}
|
|
17
|
+
return lines.join("\n");
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* A typed error surfaced by MDS as `{"success": false, "error": <code>, ...}`.
|
|
21
|
+
* `message` is already the readable formatted text, so tool handlers that
|
|
22
|
+
* render `e.message` show useful guidance without special-casing.
|
|
23
|
+
*/
|
|
24
|
+
export class MdsError extends Error {
|
|
25
|
+
code;
|
|
26
|
+
httpStatus;
|
|
27
|
+
detail;
|
|
28
|
+
knownUsers;
|
|
29
|
+
constructor(parts) {
|
|
30
|
+
super(formatMdsError(parts));
|
|
31
|
+
this.name = "MdsError";
|
|
32
|
+
this.code = parts.code;
|
|
33
|
+
this.httpStatus = parts.httpStatus;
|
|
34
|
+
this.detail = parts.detail;
|
|
35
|
+
this.knownUsers = parts.knownUsers;
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Parse a non-2xx MDS response body into an MdsError when it carries a typed
|
|
40
|
+
* code, else null (caller falls back to a plain HTTP error).
|
|
41
|
+
*/
|
|
42
|
+
export function mdsErrorFromBody(httpStatus, body) {
|
|
43
|
+
try {
|
|
44
|
+
const parsed = JSON.parse(body);
|
|
45
|
+
if (typeof parsed?.error === "string" && parsed.error.length > 0) {
|
|
46
|
+
return new MdsError({
|
|
47
|
+
code: parsed.error,
|
|
48
|
+
httpStatus,
|
|
49
|
+
detail: typeof parsed.detail === "string" ? parsed.detail : undefined,
|
|
50
|
+
knownUsers: Array.isArray(parsed.knownUsers)
|
|
51
|
+
? parsed.knownUsers.filter((u) => typeof u === "string")
|
|
52
|
+
: undefined,
|
|
53
|
+
});
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
catch {
|
|
57
|
+
/* not JSON — plain HTTP error */
|
|
58
|
+
}
|
|
59
|
+
return null;
|
|
60
|
+
}
|
|
61
|
+
//# sourceMappingURL=mds-errors.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mds-errors.js","sourceRoot":"","sources":["../src/mds-errors.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AASH,oEAAoE;AACpE,MAAM,UAAU,cAAc,CAAC,KAAoB;IACjD,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IACvD,MAAM,KAAK,GAAa;QACtB,cAAc,KAAK,CAAC,IAAI,WAAW,KAAK,CAAC,UAAU,IAAI,MAAM,EAAE;KAChE,CAAC;IACF,IAAI,KAAK,CAAC,UAAU,IAAI,KAAK,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACpD,KAAK,CAAC,IAAI,CACR,gCAAgC,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI;YAC7D,qFAAqF,CACxF,CAAC;IACJ,CAAC;IACD,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED;;;;GAIG;AACH,MAAM,OAAO,QAAS,SAAQ,KAAK;IACxB,IAAI,CAAS;IACb,UAAU,CAAS;IACnB,MAAM,CAAU;IAChB,UAAU,CAAY;IAE/B,YAAY,KAAoB;QAC9B,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC,CAAC;QAC7B,IAAI,CAAC,IAAI,GAAG,UAAU,CAAC;QACvB,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC;QACvB,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC,UAAU,CAAC;QACnC,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;QAC3B,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC,UAAU,CAAC;IACrC,CAAC;CACF;AAED;;;GAGG;AACH,MAAM,UAAU,gBAAgB,CAC9B,UAAkB,EAClB,IAAY;IAEZ,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAA4B,CAAC;QAC3D,IAAI,OAAO,MAAM,EAAE,KAAK,KAAK,QAAQ,IAAI,MAAM,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACjE,OAAO,IAAI,QAAQ,CAAC;gBAClB,IAAI,EAAE,MAAM,CAAC,KAAK;gBAClB,UAAU;gBACV,MAAM,EAAE,OAAO,MAAM,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS;gBACrE,UAAU,EAAE,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,UAAU,CAAC;oBAC1C,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,EAAe,EAAE,CAAC,OAAO,CAAC,KAAK,QAAQ,CAAC;oBACrE,CAAC,CAAC,SAAS;aACd,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,iCAAiC;IACnC,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC"}
|
|
@@ -250,6 +250,186 @@ export interface Page<T> {
|
|
|
250
250
|
number: number;
|
|
251
251
|
size: number;
|
|
252
252
|
}
|
|
253
|
+
/**
|
|
254
|
+
* Computed blueprint lifecycle as the SERVICE folds it (blueprints.service.ts).
|
|
255
|
+
* The MCP's resolve_blueprint_state unfolds never_synced/building further
|
|
256
|
+
* (no_context/enriching/no_spec/proposal_pending/needs_answers/needs_input).
|
|
257
|
+
*/
|
|
258
|
+
export type BlueprintState = "never_synced" | "building" | "build_failed" | "job_ahead" | "spec_stale" | "job_stale" | "in_sync";
|
|
259
|
+
/** A pending synthesis proposal: a reviewable spec diff produced from the library. */
|
|
260
|
+
export interface BlueprintProposal {
|
|
261
|
+
/** Section-level diff in the BlueprintPatch shape. */
|
|
262
|
+
patch: Record<string, unknown>;
|
|
263
|
+
/** Regenerated plan-in-English with entry:// citations. */
|
|
264
|
+
sop?: string;
|
|
265
|
+
/** librarySeq the synthesis read; stamped to specBasedOnSeq on apply. */
|
|
266
|
+
basedOnSeq: number;
|
|
267
|
+
/** Head spec version when synthesis ran — apply is compare-and-swap on it. */
|
|
268
|
+
baseVersion: number;
|
|
269
|
+
summary: string;
|
|
270
|
+
citations: Array<{
|
|
271
|
+
entryId: string;
|
|
272
|
+
reason: string;
|
|
273
|
+
provenance: "extracted" | "inferred" | "ambiguous";
|
|
274
|
+
}>;
|
|
275
|
+
createdAt: string;
|
|
276
|
+
model?: string;
|
|
277
|
+
}
|
|
278
|
+
/** The structured spec document. Loose on purpose — the canonical shape lives server-side. */
|
|
279
|
+
export interface BlueprintDocument {
|
|
280
|
+
goal?: string;
|
|
281
|
+
environment?: Record<string, unknown>;
|
|
282
|
+
inputSchema?: Record<string, unknown>;
|
|
283
|
+
outputSchema?: Record<string, unknown>;
|
|
284
|
+
credentials?: unknown[];
|
|
285
|
+
screens?: unknown[];
|
|
286
|
+
steps?: unknown[];
|
|
287
|
+
exampleCases?: unknown[];
|
|
288
|
+
openQuestions?: string[];
|
|
289
|
+
builderInstructions?: string;
|
|
290
|
+
sop?: string;
|
|
291
|
+
[key: string]: unknown;
|
|
292
|
+
}
|
|
293
|
+
/**
|
|
294
|
+
* Section-level merge payload for PATCH /:id: goal/schemas/openQuestions
|
|
295
|
+
* replaced, environment shallow-merged, screens/steps upserted by id,
|
|
296
|
+
* credentials by key, exampleCases by name.
|
|
297
|
+
*/
|
|
298
|
+
export interface BlueprintPatch {
|
|
299
|
+
goal?: string;
|
|
300
|
+
environment?: Record<string, unknown>;
|
|
301
|
+
inputSchema?: Record<string, unknown>;
|
|
302
|
+
outputSchema?: Record<string, unknown>;
|
|
303
|
+
credentials?: {
|
|
304
|
+
upsert?: unknown[];
|
|
305
|
+
remove?: string[];
|
|
306
|
+
};
|
|
307
|
+
screens?: {
|
|
308
|
+
upsert?: unknown[];
|
|
309
|
+
remove?: string[];
|
|
310
|
+
};
|
|
311
|
+
steps?: {
|
|
312
|
+
upsert?: unknown[];
|
|
313
|
+
remove?: string[];
|
|
314
|
+
order?: string[];
|
|
315
|
+
};
|
|
316
|
+
exampleCases?: {
|
|
317
|
+
upsert?: unknown[];
|
|
318
|
+
remove?: string[];
|
|
319
|
+
};
|
|
320
|
+
openQuestions?: string[];
|
|
321
|
+
}
|
|
322
|
+
/** Computed lifecycle + both drift boundaries, returned on GET /:id. */
|
|
323
|
+
export interface BlueprintStateInfo {
|
|
324
|
+
state: BlueprintState;
|
|
325
|
+
/** Library changed since the spec was last synthesized (boundary 1). */
|
|
326
|
+
specStale: boolean;
|
|
327
|
+
/** Spec changed since the job was last synced (boundary 2). */
|
|
328
|
+
jobStale: boolean;
|
|
329
|
+
/** Reverse drift (boundary 3): the job was edited directly since the last sync/build. */
|
|
330
|
+
jobEditedDirectly: boolean;
|
|
331
|
+
hasPendingProposal: boolean;
|
|
332
|
+
/** Raw status of the stamped build run (queued|running|green|failed|needs_input) or null. */
|
|
333
|
+
buildStatus: string | null;
|
|
334
|
+
headVersion: number;
|
|
335
|
+
drift: {
|
|
336
|
+
/** Entries written since the last synthesis. */
|
|
337
|
+
newEntries: Array<{
|
|
338
|
+
id: string;
|
|
339
|
+
kind: string;
|
|
340
|
+
title: string;
|
|
341
|
+
seq: number;
|
|
342
|
+
}>;
|
|
343
|
+
/** Version notes since the last sync. */
|
|
344
|
+
unsyncedVersions: Array<{
|
|
345
|
+
version: number;
|
|
346
|
+
note?: string;
|
|
347
|
+
}>;
|
|
348
|
+
};
|
|
349
|
+
}
|
|
350
|
+
/** GET /blueprints/:id — the full row plus computed state. */
|
|
351
|
+
export interface BlueprintWithState extends BlueprintStateInfo {
|
|
352
|
+
id: string;
|
|
353
|
+
workspaceId: number;
|
|
354
|
+
name: string;
|
|
355
|
+
document: BlueprintDocument;
|
|
356
|
+
librarySeq: number;
|
|
357
|
+
specBasedOnSeq: number;
|
|
358
|
+
lastSyncedVersion: number | null;
|
|
359
|
+
pendingProposal: BlueprintProposal | null;
|
|
360
|
+
appliedProposal?: BlueprintProposal | null;
|
|
361
|
+
middlewareId?: string | null;
|
|
362
|
+
routeId?: string | null;
|
|
363
|
+
buildId?: string | null;
|
|
364
|
+
createdBy?: string;
|
|
365
|
+
createdAt?: string;
|
|
366
|
+
updatedAt?: string;
|
|
367
|
+
}
|
|
368
|
+
/** GET /blueprints — list summaries (no document, no proposal body). */
|
|
369
|
+
export interface BlueprintSummary {
|
|
370
|
+
id: string;
|
|
371
|
+
workspaceId: number;
|
|
372
|
+
name: string;
|
|
373
|
+
state: BlueprintState;
|
|
374
|
+
specStale: boolean;
|
|
375
|
+
jobStale: boolean;
|
|
376
|
+
jobEditedDirectly: boolean;
|
|
377
|
+
hasPendingProposal: boolean;
|
|
378
|
+
middlewareId?: string | null;
|
|
379
|
+
routeId?: string | null;
|
|
380
|
+
buildId?: string | null;
|
|
381
|
+
librarySeq?: number;
|
|
382
|
+
specBasedOnSeq?: number;
|
|
383
|
+
lastSyncedVersion?: number | null;
|
|
384
|
+
createdAt?: string;
|
|
385
|
+
updatedAt?: string;
|
|
386
|
+
}
|
|
387
|
+
/** Open string enum server-side — context kinds feed synthesis; resource kinds are runtime-referenceable. */
|
|
388
|
+
export type BlueprintEntryKind = "doc" | "video" | "url" | "note" | "transcript" | "data-source" | "walkthrough" | "screen-map" | "anchor" | "screenshot";
|
|
389
|
+
export type BlueprintEntryStatus = "pending" | "processing" | "ready" | "failed";
|
|
390
|
+
/** One item in a blueprint's library — the living context store. */
|
|
391
|
+
export interface BlueprintEntry {
|
|
392
|
+
id: string;
|
|
393
|
+
blueprintId: string;
|
|
394
|
+
kind: BlueprintEntryKind;
|
|
395
|
+
role: "context" | "resource";
|
|
396
|
+
title: string;
|
|
397
|
+
text?: string | null;
|
|
398
|
+
url?: string | null;
|
|
399
|
+
blobRef?: string | null;
|
|
400
|
+
content?: Record<string, unknown> | null;
|
|
401
|
+
status: BlueprintEntryStatus;
|
|
402
|
+
/** Enrichment output: video transcript, PDF text, fetched page. */
|
|
403
|
+
transcript?: string | null;
|
|
404
|
+
/** Why enrichment failed (status = failed). */
|
|
405
|
+
error?: string | null;
|
|
406
|
+
/** blueprint.librarySeq at write time — drives drift boundary 1. */
|
|
407
|
+
seq: number;
|
|
408
|
+
fileName?: string | null;
|
|
409
|
+
contentType?: string | null;
|
|
410
|
+
createdAt?: string;
|
|
411
|
+
updatedAt?: string;
|
|
412
|
+
}
|
|
413
|
+
/** POST /blueprints/:id/sync — the handoff artifact the jobs toolset takes over with. */
|
|
414
|
+
export interface BlueprintSyncResult {
|
|
415
|
+
middlewareId: string;
|
|
416
|
+
routeId: string;
|
|
417
|
+
buildId: string;
|
|
418
|
+
testCaseIds: string[];
|
|
419
|
+
}
|
|
420
|
+
/**
|
|
421
|
+
* Error thrown for non-2xx middleware-service responses. Carries the HTTP
|
|
422
|
+
* status — and, when the service provides one, the stable snake_case `code`
|
|
423
|
+
* from the error body (synthesis-path 409/502s: proposal_pending,
|
|
424
|
+
* entries_enriching, synthesis_not_configured, proposal_mismatch, spec_stale,
|
|
425
|
+
* llm_gateway_failed, ...) — so tools can classify structured failure modes
|
|
426
|
+
* without string-matching.
|
|
427
|
+
*/
|
|
428
|
+
export declare class MiddlewareServiceError extends Error {
|
|
429
|
+
readonly status: number;
|
|
430
|
+
readonly code?: string | undefined;
|
|
431
|
+
constructor(message: string, status: number, code?: string | undefined);
|
|
432
|
+
}
|
|
253
433
|
export declare class MiddlewareServiceClient {
|
|
254
434
|
private token;
|
|
255
435
|
private base;
|
|
@@ -444,6 +624,112 @@ export declare class MiddlewareServiceClient {
|
|
|
444
624
|
/** Per-scenario grouping with prebuilt summaries (absent on older services). */
|
|
445
625
|
scenarios?: ScenarioReportGroup[];
|
|
446
626
|
}>;
|
|
627
|
+
private blueprintsBase;
|
|
628
|
+
/** List blueprint summaries (computed state, compile stamps; no document/proposal body). */
|
|
629
|
+
listBlueprints(workspaceId: number): Promise<BlueprintSummary[]>;
|
|
630
|
+
/** Create a blueprint. routeId+middlewareId link an EXISTING job (backfill). */
|
|
631
|
+
createBlueprint(workspaceId: number, body: {
|
|
632
|
+
name: string;
|
|
633
|
+
document?: BlueprintDocument;
|
|
634
|
+
routeId?: string;
|
|
635
|
+
middlewareId?: string;
|
|
636
|
+
}): Promise<BlueprintWithState>;
|
|
637
|
+
/** Full blueprint: document + computed state + both drift summaries + pendingProposal. */
|
|
638
|
+
getBlueprint(workspaceId: number, blueprintId: string): Promise<BlueprintWithState>;
|
|
639
|
+
/**
|
|
640
|
+
* PATCH the blueprint: `document` replaces wholesale, `patch` is the
|
|
641
|
+
* section-level merge. `baseVersion` is optimistic concurrency — the write
|
|
642
|
+
* 409s when the head version has moved past it.
|
|
643
|
+
*/
|
|
644
|
+
updateBlueprint(workspaceId: number, blueprintId: string, body: {
|
|
645
|
+
name?: string;
|
|
646
|
+
document?: BlueprintDocument;
|
|
647
|
+
patch?: BlueprintPatch;
|
|
648
|
+
note?: string;
|
|
649
|
+
baseVersion?: number;
|
|
650
|
+
}): Promise<BlueprintWithState>;
|
|
651
|
+
/**
|
|
652
|
+
* Atomically answer one open question: removes it from
|
|
653
|
+
* document.openQuestions, stores the answer as a note entry, snapshots one
|
|
654
|
+
* version. 404 when the question is not open (already answered elsewhere).
|
|
655
|
+
*/
|
|
656
|
+
answerBlueprintQuestion(workspaceId: number, blueprintId: string, question: string, answer: string): Promise<BlueprintWithState>;
|
|
657
|
+
/**
|
|
658
|
+
* Synthesize a spec proposal from the library (LLM). Stores ONE pending
|
|
659
|
+
* proposal for review — never applies silently. 409 when a proposal is
|
|
660
|
+
* already pending (pass replace), entries are still enriching, or the
|
|
661
|
+
* service LLM is unconfigured.
|
|
662
|
+
*/
|
|
663
|
+
synthesizeBlueprint(workspaceId: number, blueprintId: string, opts?: {
|
|
664
|
+
replace?: boolean;
|
|
665
|
+
instructions?: string;
|
|
666
|
+
}): Promise<BlueprintWithState>;
|
|
667
|
+
/**
|
|
668
|
+
* Apply the pending proposal (server-side CAS on the proposal's
|
|
669
|
+
* baseVersion). Pass the reviewed proposal's `basedOnSeq` and newer
|
|
670
|
+
* services atomically 409 (code proposal_mismatch) when the pending
|
|
671
|
+
* proposal was replaced since review; older services ignore the body.
|
|
672
|
+
*/
|
|
673
|
+
applyBlueprintProposal(workspaceId: number, blueprintId: string, opts?: {
|
|
674
|
+
basedOnSeq?: number;
|
|
675
|
+
}): Promise<BlueprintWithState>;
|
|
676
|
+
/** Reject (discard) the pending proposal. 404 when none is pending. */
|
|
677
|
+
rejectBlueprintProposal(workspaceId: number, blueprintId: string): Promise<BlueprintWithState>;
|
|
678
|
+
/**
|
|
679
|
+
* Sync the spec into the job (the primary verb): ensures router + route,
|
|
680
|
+
* upserts judge test cases from exampleCases, attaches the spec as the
|
|
681
|
+
* builder artifact, folds into the active build run. Returns the identity
|
|
682
|
+
* triple the jobs toolset takes over with.
|
|
683
|
+
*/
|
|
684
|
+
syncBlueprint(workspaceId: number, blueprintId: string, instructions?: string): Promise<BlueprintSyncResult>;
|
|
685
|
+
/** Adopt the linked job's test cases into the spec's exampleCases (job_ahead fold-back). */
|
|
686
|
+
importBlueprintCases(workspaceId: number, blueprintId: string): Promise<BlueprintWithState>;
|
|
687
|
+
/** List blueprint version snapshots (newest first). */
|
|
688
|
+
listBlueprintVersions(workspaceId: number, blueprintId: string): Promise<unknown[]>;
|
|
689
|
+
/** Get one blueprint version snapshot. */
|
|
690
|
+
getBlueprintVersion(workspaceId: number, blueprintId: string, version: number): Promise<unknown>;
|
|
691
|
+
/**
|
|
692
|
+
* Delete a blueprint and its versions/entries. Deliberately NOT exposed as
|
|
693
|
+
* an MCP tool (destructive); used by harnesses and embedding hosts.
|
|
694
|
+
*/
|
|
695
|
+
deleteBlueprint(workspaceId: number, blueprintId: string): Promise<void>;
|
|
696
|
+
/** List library entries (context docs + runtime resources), full rows. */
|
|
697
|
+
listBlueprintEntries(workspaceId: number, blueprintId: string): Promise<BlueprintEntry[]>;
|
|
698
|
+
/** Add a library entry. Enrichable kinds (doc/video/url with a blobRef or url) start pending. */
|
|
699
|
+
createBlueprintEntry(workspaceId: number, blueprintId: string, body: {
|
|
700
|
+
kind: BlueprintEntryKind;
|
|
701
|
+
title: string;
|
|
702
|
+
text?: string;
|
|
703
|
+
url?: string;
|
|
704
|
+
blobRef?: string;
|
|
705
|
+
content?: Record<string, unknown>;
|
|
706
|
+
fileName?: string;
|
|
707
|
+
contentType?: string;
|
|
708
|
+
sizeBytes?: number;
|
|
709
|
+
}): Promise<BlueprintEntry>;
|
|
710
|
+
/** Get one library entry (full content/transcript). */
|
|
711
|
+
getBlueprintEntry(workspaceId: number, blueprintId: string, entryId: string): Promise<BlueprintEntry>;
|
|
712
|
+
/** Update an entry (title/text/url/content). Bumps librarySeq — the spec becomes stale. */
|
|
713
|
+
updateBlueprintEntry(workspaceId: number, blueprintId: string, entryId: string, body: {
|
|
714
|
+
title?: string;
|
|
715
|
+
text?: string;
|
|
716
|
+
url?: string;
|
|
717
|
+
content?: Record<string, unknown>;
|
|
718
|
+
}): Promise<BlueprintEntry>;
|
|
719
|
+
/** Short-lived signed upload URL for a file that will become an entry. */
|
|
720
|
+
createBlueprintEntryUploadUrl(workspaceId: number, blueprintId: string, fileName: string): Promise<{
|
|
721
|
+
uploadUrl: string;
|
|
722
|
+
blobRef: string;
|
|
723
|
+
expiresOn: string;
|
|
724
|
+
}>;
|
|
725
|
+
/** Signed read URL for an uploaded entry blob (previews, annotators). */
|
|
726
|
+
createBlueprintEntryDownloadUrl(workspaceId: number, blueprintId: string, entryId: string): Promise<{
|
|
727
|
+
downloadUrl: string;
|
|
728
|
+
}>;
|
|
729
|
+
/** Entry history, newest first: one immutable snapshot per content-bearing write. */
|
|
730
|
+
listBlueprintEntryRevisions(workspaceId: number, blueprintId: string, entryId: string, opts?: {
|
|
731
|
+
snapshots?: boolean;
|
|
732
|
+
}): Promise<unknown[]>;
|
|
447
733
|
pollExecution(workspaceId: number, middlewareId: string, routeId: string, executionId: string, opts?: {
|
|
448
734
|
intervalMs?: number;
|
|
449
735
|
timeoutMs?: number;
|