@walkeros/mcp 4.7.2 → 4.8.0-next-1791496487198
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/dist/index.d.ts +9 -2
- package/dist/index.js +67 -39
- package/dist/index.js.map +1 -1
- package/dist/stdio.js +67 -39
- package/dist/stdio.js.map +1 -1
- package/package.json +4 -4
- package/src/surface.json +8 -3
package/dist/index.d.ts
CHANGED
|
@@ -326,7 +326,7 @@ interface FrameLeanWire {
|
|
|
326
326
|
extends: string | null;
|
|
327
327
|
source: FrameSourceWire | null;
|
|
328
328
|
origin: 'drawn' | 'imported' | 'observed';
|
|
329
|
-
flowId: string
|
|
329
|
+
flowId: string;
|
|
330
330
|
screenshot: FrameScreenshotWire | null;
|
|
331
331
|
version: number;
|
|
332
332
|
createdAt: string;
|
|
@@ -507,13 +507,16 @@ interface ToolClient {
|
|
|
507
507
|
}): Promise<ListKnowledgeWire>;
|
|
508
508
|
listFrames(options: {
|
|
509
509
|
projectId: string;
|
|
510
|
+
flowId: string;
|
|
510
511
|
}): Promise<FrameLeanListWire>;
|
|
511
512
|
listPageFrames(options: {
|
|
512
513
|
projectId: string;
|
|
514
|
+
flowId: string;
|
|
513
515
|
pageKey: string;
|
|
514
516
|
}): Promise<FrameListWire>;
|
|
515
517
|
getFrame(options: {
|
|
516
518
|
projectId: string;
|
|
519
|
+
flowId: string;
|
|
517
520
|
frameId: string;
|
|
518
521
|
}): Promise<FrameWire>;
|
|
519
522
|
requestDeviceCode(): Promise<DeviceAuthorization>;
|
|
@@ -909,13 +912,16 @@ declare class HttpToolClient implements ToolClient {
|
|
|
909
912
|
}): Promise<ListKnowledgeWire>;
|
|
910
913
|
listFrames(options: {
|
|
911
914
|
projectId: string;
|
|
915
|
+
flowId: string;
|
|
912
916
|
}): Promise<FrameLeanListWire>;
|
|
913
917
|
listPageFrames(options: {
|
|
914
918
|
projectId: string;
|
|
919
|
+
flowId: string;
|
|
915
920
|
pageKey: string;
|
|
916
921
|
}): Promise<FrameListWire>;
|
|
917
922
|
getFrame(options: {
|
|
918
923
|
projectId: string;
|
|
924
|
+
flowId: string;
|
|
919
925
|
frameId: string;
|
|
920
926
|
}): Promise<FrameWire>;
|
|
921
927
|
requestDeviceCode(): Promise<DeviceAuthorization>;
|
|
@@ -1132,6 +1138,7 @@ declare const FRAME_MANAGE_INPUT_SCHEMA: {
|
|
|
1132
1138
|
list: "list";
|
|
1133
1139
|
}>;
|
|
1134
1140
|
projectId: z.ZodOptional<z.ZodString>;
|
|
1141
|
+
flowId: z.ZodOptional<z.ZodString>;
|
|
1135
1142
|
pageKey: z.ZodOptional<z.ZodString>;
|
|
1136
1143
|
frameId: z.ZodOptional<z.ZodString>;
|
|
1137
1144
|
};
|
|
@@ -1142,7 +1149,7 @@ declare const FRAME_MANAGE_INPUT_SCHEMA: {
|
|
|
1142
1149
|
*/
|
|
1143
1150
|
declare const FRAME_HINT_OPEN_PAGE_OR_GET = "Use action \"page\" with a pageKey (a frame\u2019s source.key) to read a page with marks, or action \"get\" with a frameId.";
|
|
1144
1151
|
declare const FRAME_HINT_NAMES_ARE_DOCUMENTATION = "Frame names are documentation; the marks inside a frame carry the meaning.";
|
|
1145
|
-
declare const FRAME_HINT_NONE_YET = "This
|
|
1152
|
+
declare const FRAME_HINT_NONE_YET = "This flow has no frames yet. Frames are drawn in Tag Mode or the app, not through this tool.";
|
|
1146
1153
|
declare const FRAME_HINT_MARK_SPACE = "Tag geometry is fractional: a rect is 0..1 of its frame, and an at is 0..1 of its parent tag\u2019s box, or of the frame for a root tag; a child frame sits inside its parent through placements[].rect.";
|
|
1147
1154
|
declare const FRAME_HINT_READ_KNOWLEDGE = "Use hub_manage action \"knowledge\" with frameId (and markId) to read what people wrote here. A markId is a tag id from these marks, and a tag\u2019s threadRef is the id of its thread entry there.";
|
|
1148
1155
|
declare const FRAME_HINT_NONE_ON_PAGE = "No frames on this page. Check the pageKey against the source.key values from action \"list\".";
|
package/dist/index.js
CHANGED
|
@@ -211,8 +211,9 @@ import { mcpError } from "@walkeros/core";
|
|
|
211
211
|
function inputIssuesMessage(error) {
|
|
212
212
|
return error.issues.map((issue) => `${issue.path.join(".") || "input"}: ${issue.message}`).join("; ");
|
|
213
213
|
}
|
|
214
|
-
function parseToolInput(shape, raw) {
|
|
215
|
-
const
|
|
214
|
+
function parseToolInput(shape, raw, options = {}) {
|
|
215
|
+
const schema = options.strict ? z.strictObject(shape) : z.object(shape);
|
|
216
|
+
const parsed = schema.safeParse(raw ?? {});
|
|
216
217
|
if (!parsed.success) {
|
|
217
218
|
return {
|
|
218
219
|
ok: false,
|
|
@@ -445,7 +446,7 @@ var FLOW_MANAGE_REQUIREMENTS = {
|
|
|
445
446
|
preview_get: { required: ["flowId", "previewId"] },
|
|
446
447
|
preview_create: {
|
|
447
448
|
required: ["flowId"],
|
|
448
|
-
oneOf: [["
|
|
449
|
+
oneOf: [["settingsName", "flowSettingsId"]]
|
|
449
450
|
},
|
|
450
451
|
preview_delete: { required: ["flowId", "previewId"] },
|
|
451
452
|
preview_regrant: { required: ["flowId", "previewId"] }
|
|
@@ -502,13 +503,17 @@ var PROJECT_MANAGE_REQUIREMENTS = {
|
|
|
502
503
|
create: { required: ["name"] }
|
|
503
504
|
};
|
|
504
505
|
var FRAME_MANAGE_REQUIREMENTS = {
|
|
506
|
+
list: {
|
|
507
|
+
required: ["flowId"],
|
|
508
|
+
hint: 'Use flow_manage action "list" to find the flow the frames belong to.'
|
|
509
|
+
},
|
|
505
510
|
page: {
|
|
506
|
-
required: ["pageKey"],
|
|
507
|
-
hint: 'Use action "list" to see the source keys of
|
|
511
|
+
required: ["flowId", "pageKey"],
|
|
512
|
+
hint: 'Use flow_manage action "list" to find the flow, and action "list" to see the source keys of its frames.'
|
|
508
513
|
},
|
|
509
514
|
get: {
|
|
510
|
-
required: ["frameId"],
|
|
511
|
-
hint: 'Use action "list" or "page" to find a frameId.'
|
|
515
|
+
required: ["flowId", "frameId"],
|
|
516
|
+
hint: 'Use flow_manage action "list" to find the flow, and action "list" or "page" to find a frameId.'
|
|
512
517
|
}
|
|
513
518
|
};
|
|
514
519
|
|
|
@@ -794,7 +799,7 @@ function safeDetail(flow) {
|
|
|
794
799
|
};
|
|
795
800
|
}
|
|
796
801
|
var TITLE3 = "Flow Management";
|
|
797
|
-
var DESCRIPTION3 = "Manage walkerOS flows and their previews. List/get/create/update/delete/duplicate flows, or create/inspect/delete preview bundles and mint activation grants (preview_regrant) for testing flow changes on live sites.";
|
|
802
|
+
var DESCRIPTION3 = "Manage walkerOS flows and their previews. List/get/create/update/delete/duplicate flows (deleting a flow deletes its frames too), or create/inspect/delete preview bundles and mint activation grants (preview_regrant) for testing flow changes on live sites.";
|
|
798
803
|
var inputSchema3 = {
|
|
799
804
|
action: z4.enum([
|
|
800
805
|
"list",
|
|
@@ -833,11 +838,11 @@ var inputSchema3 = {
|
|
|
833
838
|
previewId: z4.string().optional().describe(
|
|
834
839
|
"Preview ID (prv_...). Required for preview_get, preview_delete, and preview_regrant (all also require flowId)."
|
|
835
840
|
),
|
|
836
|
-
|
|
837
|
-
"Used by preview_create
|
|
841
|
+
settingsName: z4.string().optional().describe(
|
|
842
|
+
"Settings name of a multi-settings flow (the `settings[].name` from flow_manage list). Used by preview_create: provide one of settingsName or flowSettingsId (preview_create also requires flowId)."
|
|
838
843
|
),
|
|
839
844
|
flowSettingsId: z4.string().optional().describe(
|
|
840
|
-
"Used by preview_create
|
|
845
|
+
"Used by preview_create: provide one of settingsName or flowSettingsId (preview_create also requires flowId)."
|
|
841
846
|
),
|
|
842
847
|
source: z4.discriminatedUnion("kind", [
|
|
843
848
|
z4.object({ kind: z4.literal("draft") }),
|
|
@@ -918,7 +923,7 @@ function createFlowManageToolSpec(client) {
|
|
|
918
923
|
};
|
|
919
924
|
}
|
|
920
925
|
async function flowManageHandlerBody(client, input) {
|
|
921
|
-
const parsed = parseToolInput(inputSchema3, input);
|
|
926
|
+
const parsed = parseToolInput(inputSchema3, input, { strict: true });
|
|
922
927
|
if (!parsed.ok) return parsed.error;
|
|
923
928
|
const {
|
|
924
929
|
action,
|
|
@@ -934,7 +939,7 @@ async function flowManageHandlerBody(client, input) {
|
|
|
934
939
|
cursor,
|
|
935
940
|
limit,
|
|
936
941
|
previewId,
|
|
937
|
-
|
|
942
|
+
settingsName,
|
|
938
943
|
flowSettingsId,
|
|
939
944
|
source,
|
|
940
945
|
siteUrl,
|
|
@@ -944,7 +949,7 @@ async function flowManageHandlerBody(client, input) {
|
|
|
944
949
|
const validationError = validateActionInput(
|
|
945
950
|
"flow_manage",
|
|
946
951
|
action ?? "",
|
|
947
|
-
{ flowId, projectId, name, previewId,
|
|
952
|
+
{ flowId, projectId, name, previewId, settingsName, flowSettingsId },
|
|
948
953
|
FLOW_MANAGE_REQUIREMENTS
|
|
949
954
|
);
|
|
950
955
|
if (validationError) return mcpError4(new Error(validationError));
|
|
@@ -1140,7 +1145,7 @@ async function flowManageHandlerBody(client, input) {
|
|
|
1140
1145
|
const preview = await client.createPreview({
|
|
1141
1146
|
projectId: resolvedProjectId,
|
|
1142
1147
|
flowId,
|
|
1143
|
-
flowName,
|
|
1148
|
+
flowName: settingsName,
|
|
1144
1149
|
flowSettingsId,
|
|
1145
1150
|
...source ? { source } : {},
|
|
1146
1151
|
...siteUrl ? { siteUrl } : {}
|
|
@@ -1213,7 +1218,9 @@ function registerFlowManageTool(server, client) {
|
|
|
1213
1218
|
{
|
|
1214
1219
|
title: spec.title,
|
|
1215
1220
|
description: spec.description,
|
|
1216
|
-
|
|
1221
|
+
// Strict, so a key the tool does not take is an input error naming that
|
|
1222
|
+
// key rather than a key dropped without a word.
|
|
1223
|
+
inputSchema: z4.strictObject(spec.inputSchema),
|
|
1217
1224
|
annotations: spec.annotations
|
|
1218
1225
|
},
|
|
1219
1226
|
(args) => flowManageHandlerBody(client, args)
|
|
@@ -1276,7 +1283,7 @@ async function resolveDeploymentSlug(args) {
|
|
|
1276
1283
|
|
|
1277
1284
|
// src/tools/deploy-manage.ts
|
|
1278
1285
|
var TITLE4 = "Deploy Management";
|
|
1279
|
-
var DESCRIPTION4 = "Deploy walkerOS flows and manage deployments. deploy waits for the deployment to reach a terminal status by default (wait=true),
|
|
1286
|
+
var DESCRIPTION4 = "Deploy walkerOS flows and manage deployments. deploy waits for the deployment to reach a terminal status by default (wait=true), up to 12 minutes on the local door and up to 10 minutes on the hosted door; pass wait=false to return immediately with the deployment id. A finished deployment carries its status and, on failure, an errorMessage with the user-facing reason; use the get action to re-read it. list supports cursor and limit for pagination. delete removes an active deployment. For get and delete pass flowId (required) plus optional slug to disambiguate when a flow has multiple active deployments. If a flow has >=2 active deployments and no slug is supplied, the tool returns a MULTIPLE_DEPLOYMENTS error with a details[] list showing each deployment's slug, type, status, and updatedAt.";
|
|
1280
1287
|
var DEPLOYMENT_STATUSES = {
|
|
1281
1288
|
idle: true,
|
|
1282
1289
|
deploying: true,
|
|
@@ -1304,10 +1311,10 @@ var inputSchema4 = {
|
|
|
1304
1311
|
type: z5.enum(membersOf(DEPLOYMENT_TYPES)).optional().describe("Deployment type filter for list."),
|
|
1305
1312
|
status: z5.enum(membersOf(DEPLOYMENT_STATUSES)).optional().describe("Status filter for list."),
|
|
1306
1313
|
wait: z5.boolean().optional().describe(
|
|
1307
|
-
"Wait for the deployment to reach a terminal status (default true)
|
|
1314
|
+
"Wait for the deployment to reach a terminal status (default true): up to 12 minutes on the local door, up to 10 minutes on the hosted door. Set false to return the deployment id immediately. Only used with deploy action."
|
|
1308
1315
|
),
|
|
1309
|
-
|
|
1310
|
-
"
|
|
1316
|
+
settingsName: z5.string().optional().describe(
|
|
1317
|
+
"Settings name of a multi-settings flow (the `settings[].name` from flow_manage list). Only used with deploy action."
|
|
1311
1318
|
),
|
|
1312
1319
|
cursor: z5.string().optional().describe(
|
|
1313
1320
|
"Pagination cursor from a previous list response. Only used with the list action."
|
|
@@ -1376,7 +1383,7 @@ function createDeployManageToolSpec(client) {
|
|
|
1376
1383
|
};
|
|
1377
1384
|
}
|
|
1378
1385
|
async function deployManageHandlerBody(client, input) {
|
|
1379
|
-
const parsed = parseToolInput(inputSchema4, input);
|
|
1386
|
+
const parsed = parseToolInput(inputSchema4, input, { strict: true });
|
|
1380
1387
|
if (!parsed.ok) return parsed.error;
|
|
1381
1388
|
const {
|
|
1382
1389
|
action,
|
|
@@ -1386,7 +1393,7 @@ async function deployManageHandlerBody(client, input) {
|
|
|
1386
1393
|
type,
|
|
1387
1394
|
status,
|
|
1388
1395
|
wait,
|
|
1389
|
-
|
|
1396
|
+
settingsName,
|
|
1390
1397
|
cursor,
|
|
1391
1398
|
limit
|
|
1392
1399
|
} = parsed.data;
|
|
@@ -1405,7 +1412,7 @@ async function deployManageHandlerBody(client, input) {
|
|
|
1405
1412
|
flowId,
|
|
1406
1413
|
projectId,
|
|
1407
1414
|
wait: wait ?? true,
|
|
1408
|
-
flowName
|
|
1415
|
+
flowName: settingsName
|
|
1409
1416
|
});
|
|
1410
1417
|
const appUrl = deploymentUrl(client, projectId, result);
|
|
1411
1418
|
return mcpResult4(withAppUrl(redactDisplayNames(result), appUrl), {
|
|
@@ -1478,7 +1485,9 @@ function registerDeployTool(server, client) {
|
|
|
1478
1485
|
{
|
|
1479
1486
|
title: spec.title,
|
|
1480
1487
|
description: spec.description,
|
|
1481
|
-
|
|
1488
|
+
// Strict, so a key the tool does not take is an input error naming that
|
|
1489
|
+
// key: a dropped settings key would deploy as if no settings were named.
|
|
1490
|
+
inputSchema: z5.strictObject(spec.inputSchema),
|
|
1482
1491
|
annotations: spec.annotations
|
|
1483
1492
|
},
|
|
1484
1493
|
(args) => deployManageHandlerBody(client, args)
|
|
@@ -2680,14 +2689,17 @@ import { mcpResult as mcpResult9, mcpError as mcpError10 } from "@walkeros/core"
|
|
|
2680
2689
|
var FRAME_ID_PATTERN2 = /^frm_[A-Za-z0-9_-]{21}$/;
|
|
2681
2690
|
var MAX_PAGE_KEY_CHARS = 1024;
|
|
2682
2691
|
var TITLE9 = "Frames";
|
|
2683
|
-
var FRAME_MANAGE_DESCRIPTION = 'Read the frames of a measurement plan: named rectangles with marks inside them, drawn in Tag Mode or in the app. Actions: list (every frame of the
|
|
2692
|
+
var FRAME_MANAGE_DESCRIPTION = 'Read the frames of a measurement plan: named rectangles with marks inside them, drawn in Tag Mode or in the app. Frames belong to a flow: every action takes the flowId of the flow they live in; use flow_manage action "list" to find one. Actions: list (every frame of the flow, without marks), page (the flow\u2019s frames on one page at any depth, with marks), get (one frame with its marks). Read-only: frames are drawn and edited in Tag Mode or the app, never here. A frame name is documentation; the marks inside it carry the meaning. A frame that extends another stores only what it adds, so its tags may carry only the fields they change. Marks are { tags, note }: tags is one flat list of tags, each with an id, a kind such as entity, property or action, a name, and a parentId naming the tag it sits under; note is the frame\u2019s own description and thread. Use hub_manage action "knowledge" with a frameId or markId to read what people wrote on a frame. A markId is a tag id: a tag\u2019s id, parentId and threadRef come back literal when they have the shape the app mints, so they can be passed straight back; every other string value in the marks is wrapped as data, and so is an object key that is not a plain identifier.';
|
|
2684
2693
|
var FRAME_MANAGE_INPUT_SCHEMA = {
|
|
2685
2694
|
action: z10.enum(["list", "page", "get"]).describe(
|
|
2686
|
-
"list the
|
|
2695
|
+
"list the flow\u2019s frames, read one page with marks, or read one frame"
|
|
2687
2696
|
),
|
|
2688
2697
|
projectId: z10.string().optional().describe(
|
|
2689
2698
|
"Project ID. Optional: falls back to the default project when omitted."
|
|
2690
2699
|
),
|
|
2700
|
+
flowId: z10.string().optional().describe(
|
|
2701
|
+
'Flow ID (flow_...). Required for list, page and get: frames belong to a flow. Use flow_manage action "list" to find one.'
|
|
2702
|
+
),
|
|
2691
2703
|
pageKey: z10.string().min(1).max(MAX_PAGE_KEY_CHARS).optional().describe(
|
|
2692
2704
|
"The page as its frames address it (the `source.key` of a page frame, usually the page URL without query). Required for page."
|
|
2693
2705
|
),
|
|
@@ -2703,12 +2715,23 @@ var annotations9 = {
|
|
|
2703
2715
|
};
|
|
2704
2716
|
var FRAME_HINT_OPEN_PAGE_OR_GET = 'Use action "page" with a pageKey (a frame\u2019s source.key) to read a page with marks, or action "get" with a frameId.';
|
|
2705
2717
|
var FRAME_HINT_NAMES_ARE_DOCUMENTATION = "Frame names are documentation; the marks inside a frame carry the meaning.";
|
|
2706
|
-
var FRAME_HINT_NONE_YET = "This
|
|
2718
|
+
var FRAME_HINT_NONE_YET = "This flow has no frames yet. Frames are drawn in Tag Mode or the app, not through this tool.";
|
|
2707
2719
|
var FRAME_HINT_MARK_SPACE = "Tag geometry is fractional: a rect is 0..1 of its frame, and an at is 0..1 of its parent tag\u2019s box, or of the frame for a root tag; a child frame sits inside its parent through placements[].rect.";
|
|
2708
2720
|
var FRAME_HINT_READ_KNOWLEDGE = 'Use hub_manage action "knowledge" with frameId (and markId) to read what people wrote here. A markId is a tag id from these marks, and a tag\u2019s threadRef is the id of its thread entry there.';
|
|
2709
2721
|
var FRAME_HINT_NONE_ON_PAGE = 'No frames on this page. Check the pageKey against the source.key values from action "list".';
|
|
2710
2722
|
var FRAME_HINT_EXTENDS_BASE = "This frame extends another and stores only what it adds; read the base frame (extends) for the rest.";
|
|
2711
2723
|
var FRAME_NOT_FOUND_HINT = 'Use action "list" or "page" to find frame ids.';
|
|
2724
|
+
var FRAME_FLOW_NOT_FOUND_HINT = 'Use flow_manage action "list" to find a live flow of the project.';
|
|
2725
|
+
function frameRefusalHint(error) {
|
|
2726
|
+
switch (codeOf(error)) {
|
|
2727
|
+
case "FLOW_NOT_FOUND":
|
|
2728
|
+
return FRAME_FLOW_NOT_FOUND_HINT;
|
|
2729
|
+
case "FRAME_NOT_FOUND":
|
|
2730
|
+
return FRAME_NOT_FOUND_HINT;
|
|
2731
|
+
default:
|
|
2732
|
+
return errorHint(error, "frames", FRAME_NOT_FOUND_HINT);
|
|
2733
|
+
}
|
|
2734
|
+
}
|
|
2712
2735
|
var keepSourceAddress = (key) => key === "kind" || key === "key";
|
|
2713
2736
|
function serializeLean(frame) {
|
|
2714
2737
|
return {
|
|
@@ -2718,7 +2741,6 @@ function serializeLean(frame) {
|
|
|
2718
2741
|
extends: frame.extends,
|
|
2719
2742
|
source: redactNestedStrings(frame.source, { skip: keepSourceAddress }),
|
|
2720
2743
|
origin: frame.origin,
|
|
2721
|
-
flowId: frame.flowId,
|
|
2722
2744
|
placements: frame.placements.map((placement) => ({
|
|
2723
2745
|
id: placement.id,
|
|
2724
2746
|
rect: placement.rect
|
|
@@ -2807,11 +2829,11 @@ async function frameManageHandler(client, rawInput) {
|
|
|
2807
2829
|
if (!parsed.success) {
|
|
2808
2830
|
return mcpError10(new Error(inputIssuesMessage(parsed.error)));
|
|
2809
2831
|
}
|
|
2810
|
-
const { action, projectId, pageKey, frameId } = parsed.data;
|
|
2832
|
+
const { action, projectId, flowId, pageKey, frameId } = parsed.data;
|
|
2811
2833
|
const validationError = validateActionInput(
|
|
2812
2834
|
"frame_manage",
|
|
2813
2835
|
action,
|
|
2814
|
-
{ pageKey, frameId },
|
|
2836
|
+
{ flowId, pageKey, frameId },
|
|
2815
2837
|
FRAME_MANAGE_REQUIREMENTS
|
|
2816
2838
|
);
|
|
2817
2839
|
if (validationError) return mcpError10(new Error(validationError));
|
|
@@ -2822,8 +2844,10 @@ async function frameManageHandler(client, rawInput) {
|
|
|
2822
2844
|
}
|
|
2823
2845
|
switch (action) {
|
|
2824
2846
|
case "list": {
|
|
2847
|
+
assertParam(flowId, "flowId", "list");
|
|
2825
2848
|
const { frames } = await client.listFrames({
|
|
2826
|
-
projectId: resolvedProjectId
|
|
2849
|
+
projectId: resolvedProjectId,
|
|
2850
|
+
flowId
|
|
2827
2851
|
});
|
|
2828
2852
|
return mcpResult9(
|
|
2829
2853
|
{ frames: frames.map(serializeLean) },
|
|
@@ -2836,9 +2860,11 @@ async function frameManageHandler(client, rawInput) {
|
|
|
2836
2860
|
);
|
|
2837
2861
|
}
|
|
2838
2862
|
case "page": {
|
|
2863
|
+
assertParam(flowId, "flowId", "page");
|
|
2839
2864
|
assertParam(pageKey, "pageKey", "page");
|
|
2840
2865
|
const { frames } = await client.listPageFrames({
|
|
2841
2866
|
projectId: resolvedProjectId,
|
|
2867
|
+
flowId,
|
|
2842
2868
|
pageKey
|
|
2843
2869
|
});
|
|
2844
2870
|
return mcpResult9(
|
|
@@ -2849,9 +2875,11 @@ async function frameManageHandler(client, rawInput) {
|
|
|
2849
2875
|
);
|
|
2850
2876
|
}
|
|
2851
2877
|
case "get": {
|
|
2878
|
+
assertParam(flowId, "flowId", "get");
|
|
2852
2879
|
assertParam(frameId, "frameId", "get");
|
|
2853
2880
|
const frame = await client.getFrame({
|
|
2854
2881
|
projectId: resolvedProjectId,
|
|
2882
|
+
flowId,
|
|
2855
2883
|
frameId
|
|
2856
2884
|
});
|
|
2857
2885
|
return mcpResult9(
|
|
@@ -2863,7 +2891,7 @@ async function frameManageHandler(client, rawInput) {
|
|
|
2863
2891
|
}
|
|
2864
2892
|
}
|
|
2865
2893
|
} catch (error) {
|
|
2866
|
-
return mcpError10(error,
|
|
2894
|
+
return mcpError10(error, frameRefusalHint(error));
|
|
2867
2895
|
}
|
|
2868
2896
|
}
|
|
2869
2897
|
function createFrameManageToolSpec(client) {
|
|
@@ -2941,7 +2969,7 @@ async function feedbackHandlerBody(client, input) {
|
|
|
2941
2969
|
const isAnonymous = explicitAnonymous ?? anonymous ?? true;
|
|
2942
2970
|
await client.submitFeedback(text, {
|
|
2943
2971
|
anonymous: isAnonymous,
|
|
2944
|
-
version: "4.
|
|
2972
|
+
version: "4.8.0-next-1791496487198"
|
|
2945
2973
|
});
|
|
2946
2974
|
return mcpResult10({ ok: true });
|
|
2947
2975
|
} catch (error) {
|
|
@@ -3733,7 +3761,7 @@ var NPM_SEARCH_URL = "https://registry.npmjs.org/-/v1/search";
|
|
|
3733
3761
|
var JSDELIVR_BASE = "https://cdn.jsdelivr.net/npm";
|
|
3734
3762
|
var WALKEROS_JSON_PATH = "dist/walkerOS.json";
|
|
3735
3763
|
var CACHE_TTL = 5 * 60 * 1e3;
|
|
3736
|
-
var CLIENT_HEADER = "walkeros-mcp/4.
|
|
3764
|
+
var CLIENT_HEADER = "walkeros-mcp/4.8.0-next-1791496487198";
|
|
3737
3765
|
function getPackageBaseUrl() {
|
|
3738
3766
|
return process.env.WALKEROS_APP_URL || void 0;
|
|
3739
3767
|
}
|
|
@@ -4991,7 +5019,7 @@ var SERVER_INSTRUCTIONS = `walkerOS is an open-source, privacy-first event data
|
|
|
4991
5019
|
14. \`flow_manage({ action: "preview_regrant", flowId: "...", previewId: "...", origins: [...] })\` - mint an activation link; minted while the flow is observed, it pairs with that Observe session automatically, so the previewed page streams into the same feed
|
|
4992
5020
|
15. \`observe_journeys({ flowId: "..." })\` - read what arrived; it is the only read, and it never judges whether events are correct
|
|
4993
5021
|
16. \`hub_manage({ action: "releases", flowId: "..." })\` - read what changed across releases and why; \`release_get\` carries a server-computed diff, \`rationale_set\` records why
|
|
4994
|
-
17. \`frame_manage({ action: "page", pageKey: "..." })\` - read the frames of a page with their marks; read-only, edited in Tag Mode or the app
|
|
5022
|
+
17. \`frame_manage({ action: "page", flowId: "...", pageKey: "..." })\` - read the frames of a flow on one page with their marks; read-only, edited in Tag Mode or the app
|
|
4995
5023
|
|
|
4996
5024
|
## Architecture: Source \u2192 Collector \u2192 Destination(s)
|
|
4997
5025
|
|
|
@@ -5411,7 +5439,7 @@ var HttpToolClient = class {
|
|
|
5411
5439
|
async checkContract() {
|
|
5412
5440
|
return compareContract({
|
|
5413
5441
|
baseUrl: this.appBaseUrl(),
|
|
5414
|
-
client: { type: "mcp", version: "4.
|
|
5442
|
+
client: { type: "mcp", version: "4.8.0-next-1791496487198" }
|
|
5415
5443
|
});
|
|
5416
5444
|
}
|
|
5417
5445
|
/** The live public OpenAPI document of `appBaseUrl()`, without a credential. */
|
|
@@ -5687,7 +5715,7 @@ var TOOL_DEFINITIONS = [
|
|
|
5687
5715
|
{
|
|
5688
5716
|
name: "flow_manage",
|
|
5689
5717
|
title: "Flow Management",
|
|
5690
|
-
description: "Manage walkerOS flows and their previews. List/get/create/update/delete/duplicate flows, or create/inspect/delete preview bundles for testing flow changes on live sites.",
|
|
5718
|
+
description: "Manage walkerOS flows and their previews. List/get/create/update/delete/duplicate flows (deleting a flow deletes its frames too), or create/inspect/delete preview bundles for testing flow changes on live sites.",
|
|
5691
5719
|
inputSchema: {
|
|
5692
5720
|
action: z21.enum([
|
|
5693
5721
|
"list",
|
|
@@ -5711,7 +5739,7 @@ var TOOL_DEFINITIONS = [
|
|
|
5711
5739
|
order: z21.enum(["asc", "desc"]).optional(),
|
|
5712
5740
|
includeDeleted: z21.boolean().optional(),
|
|
5713
5741
|
previewId: z21.string().optional(),
|
|
5714
|
-
|
|
5742
|
+
settingsName: z21.string().optional(),
|
|
5715
5743
|
flowSettingsId: z21.string().optional(),
|
|
5716
5744
|
siteUrl: z21.string().optional()
|
|
5717
5745
|
},
|
|
@@ -5734,7 +5762,7 @@ var TOOL_DEFINITIONS = [
|
|
|
5734
5762
|
type: z21.enum(["web", "server"]).optional(),
|
|
5735
5763
|
status: z21.string().optional(),
|
|
5736
5764
|
wait: z21.boolean().optional(),
|
|
5737
|
-
|
|
5765
|
+
settingsName: z21.string().optional()
|
|
5738
5766
|
},
|
|
5739
5767
|
annotations: {
|
|
5740
5768
|
readOnlyHint: false,
|