@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 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 | null;
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 project has no frames yet. Frames are drawn in Tag Mode or the app, not through this tool.";
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 parsed = z.object(shape).safeParse(raw ?? {});
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: [["flowName", "flowSettingsId"]]
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 the project\u2019s frames.'
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
- flowName: z4.string().optional().describe(
837
- "Used by preview_create \u2014 provide one of flowName or flowSettingsId (preview_create also requires flowId)."
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 \u2014 provide one of flowName or flowSettingsId (preview_create also requires flowId)."
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
- flowName,
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, flowName, flowSettingsId },
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
- inputSchema: spec.inputSchema,
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), with a 12-minute budget; 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.";
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), with a 12-minute budget. Set false to return the deployment id immediately. Only used with deploy action."
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
- flowName: z5.string().optional().describe(
1310
- "Flow name for multi-settings flows. Only used with deploy action."
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
- flowName,
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
- inputSchema: spec.inputSchema,
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 project, without marks), page (the frames of 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.';
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 project\u2019s frames, read one page with marks, or read one frame"
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 project has no frames yet. Frames are drawn in Tag Mode or the app, not through this tool.";
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, errorHint(error, "frames", FRAME_NOT_FOUND_HINT));
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.7.2"
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.7.2";
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.7.2" }
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
- flowName: z21.string().optional(),
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
- flowName: z21.string().optional()
5765
+ settingsName: z21.string().optional()
5738
5766
  },
5739
5767
  annotations: {
5740
5768
  readOnlyHint: false,