@walkeros/mcp 4.8.0 → 4.9.0-next-1791925945414

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
@@ -292,11 +292,13 @@ interface PlanRectWire {
292
292
  w: number;
293
293
  h: number;
294
294
  }
295
- interface FramePlacementWire {
295
+ /**
296
+ * One frame shown on another: the rectangle it takes, in fractions of the
297
+ * frame that shows it, and the id of the frame shown there.
298
+ */
299
+ interface FrameLinkWire extends PlanRectWire {
296
300
  id: string;
297
- rect: PlanRectWire;
298
- selector?: string;
299
- anchor?: Record<string, unknown>;
301
+ frameId: string;
300
302
  }
301
303
  type FrameSourceWire = {
302
304
  kind: 'page';
@@ -320,12 +322,13 @@ interface FrameLeanWire {
320
322
  id: string;
321
323
  projectId: string;
322
324
  name: string;
323
- parentId: string | null;
324
- placements: FramePlacementWire[];
325
325
  size: PlanSizeWire;
326
- extends: string | null;
327
- source: FrameSourceWire | null;
326
+ source: FrameSourceWire;
328
327
  origin: 'drawn' | 'imported' | 'observed';
328
+ /** The frames this one shows, in paint order. */
329
+ links: FrameLinkWire[];
330
+ /** The group the frame shares with its variants, null for a frame with none. */
331
+ variantSetId: string | null;
329
332
  flowId: string;
330
333
  screenshot: FrameScreenshotWire | null;
331
334
  version: number;
@@ -1150,10 +1153,10 @@ declare const FRAME_MANAGE_INPUT_SCHEMA: {
1150
1153
  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.";
1151
1154
  declare const FRAME_HINT_NAMES_ARE_DOCUMENTATION = "Frame names are documentation; the marks inside a frame carry the meaning.";
1152
1155
  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.";
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.";
1156
+ 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 link\u2019s x, y, w and h are fractions of the frame that shows it.";
1154
1157
  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.";
1155
1158
  declare const FRAME_HINT_NONE_ON_PAGE = "No frames on this page. Check the pageKey against the source.key values from action \"list\".";
1156
- declare const FRAME_HINT_EXTENDS_BASE = "This frame extends another and stores only what it adds; read the base frame (extends) for the rest.";
1159
+ declare const FRAME_HINT_FOLLOW_LINKS = "This frame shows other frames: each entry of links names one by frameId. Use action \"get\" with that frameId to read it.";
1157
1160
  declare const FRAME_NOT_FOUND_HINT = "Use action \"list\" or \"page\" to find frame ids.";
1158
1161
 
1159
1162
  /** The code every door answers a plan or project gate with. */
@@ -1399,4 +1402,4 @@ declare module '@walkeros/core' {
1399
1402
  */
1400
1403
  declare function createToolHandlers(client: ToolClient, packageVersion?: string, runtime?: FlowRuntime): Record<string, ToolSpec>;
1401
1404
 
1402
- export { type BundleOptions, type CreateServerOptions, type CreateStreamableHttpHandlerOptions, type DeploymentLinkTarget, FEATURE_NOT_AVAILABLE, FRAME_HINT_EXTENDS_BASE, FRAME_HINT_MARK_SPACE, FRAME_HINT_NAMES_ARE_DOCUMENTATION, FRAME_HINT_NONE_ON_PAGE, FRAME_HINT_NONE_YET, FRAME_HINT_OPEN_PAGE_OR_GET, FRAME_HINT_READ_KNOWLEDGE, FRAME_MANAGE_DESCRIPTION, FRAME_MANAGE_INPUT_SCHEMA, FRAME_NOT_FOUND_HINT, type FlowCanvasPayload, type FlowCanvasToolResult, type FlowLinkTarget, type FlowRuntime, type FrameLeanListWire, type FrameLeanWire, type FrameListWire, type FrameWire, type GatedFeature, HINT_EMPTY_FEED, HINT_ENDED, HINT_NO_WINDOW, HINT_PREVIEW_STREAMS, HINT_READ, HINT_SIMULATE_FIRST, HINT_STOP, HUB_HINT_CONFIRM_INDEX, HUB_HINT_ENTRY_NAMES_FLOW, HUB_HINT_KEEP_ONE_THREAD, HUB_HINT_KNOWLEDGE_INDEX, HUB_HINT_KNOWLEDGE_PAGE_CAPPED, HUB_HINT_KNOWLEDGE_READ_ONLY, HUB_HINT_MASKED_ONLY, HUB_HINT_MESSAGES_TRUNCATED, HUB_HINT_MESSAGE_VISIBLE, HUB_HINT_NOTHING_DISCUSSED, HUB_HINT_NOTHING_WRITTEN, HUB_HINT_NO_MATCH, HUB_HINT_NO_THREAD_ON_ANCHOR, HUB_HINT_OPEN_RELEASE, HUB_HINT_RATIONALE_VISIBLE, HUB_HINT_READ_BACK, HUB_HINT_READ_FRAME, HUB_HINT_RELEASE_GET, HUB_HINT_REPLY_OR_OPEN, HUB_HINT_RESOLVE_IN_APP, HUB_HINT_ROWS_ARE_DEPLOYMENTS, HUB_HINT_SCAN_CAPPED, HUB_HINT_STAYS_RESOLVED, HUB_HINT_STEP_HISTORY, HUB_HINT_THREADS_INDEX, HUB_HINT_THREADS_PAGE_CAPPED, HUB_HINT_THREAD_OPEN, HUB_HINT_TRACE_STEP, HUB_HINT_WRITE_RATIONALE, HUB_MANAGE_DESCRIPTION, HUB_MANAGE_INPUT_SCHEMA, HUB_NOT_FOUND_HINT, HttpToolClient, type HubThreadWire, type JourneysResult, type KnowledgeEntryWire, type ListKnowledgeWire, type ListThreadsWire, type Logger, DESCRIPTION as OBSERVE_SESSION_DESCRIPTION, type PushOptions, type RedactOptions, type ReleaseDetailWire, type ReleaseIndexWire, type ReleaseRef, RuntimeRefusal, type SimulateOptions, type SimulateStepType, type StepHistoryWire, type StepLinkTarget, type SuggestionTile, TOOL_DEFINITIONS, type ThreadLinkTarget, type ToolAnnotations, type ToolClient, type ToolDefinition, type ToolSpec, type VersionAnnotationWire, createHostedRuntime, createLocalRuntime, createStreamableHttpHandler, createToolHandlers, createWalkerOSMcpServer, featureDenialHint, flowCanvasResult, isFeatureDenial, isFlowCanvasResult, links, redactNestedStrings, wrapUserData };
1405
+ export { type BundleOptions, type CreateServerOptions, type CreateStreamableHttpHandlerOptions, type DeploymentLinkTarget, FEATURE_NOT_AVAILABLE, FRAME_HINT_FOLLOW_LINKS, FRAME_HINT_MARK_SPACE, FRAME_HINT_NAMES_ARE_DOCUMENTATION, FRAME_HINT_NONE_ON_PAGE, FRAME_HINT_NONE_YET, FRAME_HINT_OPEN_PAGE_OR_GET, FRAME_HINT_READ_KNOWLEDGE, FRAME_MANAGE_DESCRIPTION, FRAME_MANAGE_INPUT_SCHEMA, FRAME_NOT_FOUND_HINT, type FlowCanvasPayload, type FlowCanvasToolResult, type FlowLinkTarget, type FlowRuntime, type FrameLeanListWire, type FrameLeanWire, type FrameListWire, type FrameWire, type GatedFeature, HINT_EMPTY_FEED, HINT_ENDED, HINT_NO_WINDOW, HINT_PREVIEW_STREAMS, HINT_READ, HINT_SIMULATE_FIRST, HINT_STOP, HUB_HINT_CONFIRM_INDEX, HUB_HINT_ENTRY_NAMES_FLOW, HUB_HINT_KEEP_ONE_THREAD, HUB_HINT_KNOWLEDGE_INDEX, HUB_HINT_KNOWLEDGE_PAGE_CAPPED, HUB_HINT_KNOWLEDGE_READ_ONLY, HUB_HINT_MASKED_ONLY, HUB_HINT_MESSAGES_TRUNCATED, HUB_HINT_MESSAGE_VISIBLE, HUB_HINT_NOTHING_DISCUSSED, HUB_HINT_NOTHING_WRITTEN, HUB_HINT_NO_MATCH, HUB_HINT_NO_THREAD_ON_ANCHOR, HUB_HINT_OPEN_RELEASE, HUB_HINT_RATIONALE_VISIBLE, HUB_HINT_READ_BACK, HUB_HINT_READ_FRAME, HUB_HINT_RELEASE_GET, HUB_HINT_REPLY_OR_OPEN, HUB_HINT_RESOLVE_IN_APP, HUB_HINT_ROWS_ARE_DEPLOYMENTS, HUB_HINT_SCAN_CAPPED, HUB_HINT_STAYS_RESOLVED, HUB_HINT_STEP_HISTORY, HUB_HINT_THREADS_INDEX, HUB_HINT_THREADS_PAGE_CAPPED, HUB_HINT_THREAD_OPEN, HUB_HINT_TRACE_STEP, HUB_HINT_WRITE_RATIONALE, HUB_MANAGE_DESCRIPTION, HUB_MANAGE_INPUT_SCHEMA, HUB_NOT_FOUND_HINT, HttpToolClient, type HubThreadWire, type JourneysResult, type KnowledgeEntryWire, type ListKnowledgeWire, type ListThreadsWire, type Logger, DESCRIPTION as OBSERVE_SESSION_DESCRIPTION, type PushOptions, type RedactOptions, type ReleaseDetailWire, type ReleaseIndexWire, type ReleaseRef, RuntimeRefusal, type SimulateOptions, type SimulateStepType, type StepHistoryWire, type StepLinkTarget, type SuggestionTile, TOOL_DEFINITIONS, type ThreadLinkTarget, type ToolAnnotations, type ToolClient, type ToolDefinition, type ToolSpec, type VersionAnnotationWire, createHostedRuntime, createLocalRuntime, createStreamableHttpHandler, createToolHandlers, createWalkerOSMcpServer, featureDenialHint, flowCanvasResult, isFeatureDenial, isFlowCanvasResult, links, redactNestedStrings, wrapUserData };
package/dist/index.js CHANGED
@@ -2152,7 +2152,7 @@ var HUB_MANAGE_INPUT_SCHEMA = {
2152
2152
  'Read only threads in this state. Action "threads" only; omit for both.'
2153
2153
  ),
2154
2154
  pageKey: z9.string().min(1).max(MAX_SOURCE_KEY_LENGTH).optional().describe(
2155
- 'The page a note was left on, as Tag Mode addressed it, usually the page URL. Narrows action "knowledge" to every frame that page holds, at any depth; omit it to read the whole project.'
2155
+ 'The page a note was left on, as Tag Mode addressed it, usually the page URL. Narrows action "knowledge" to the frames of that page; a shown frame that is not of that page is not included. Omit it to read the whole project.'
2156
2156
  ),
2157
2157
  frameId: z9.string().regex(FRAME_ID_PATTERN).optional().describe(
2158
2158
  'One frame (frm_...), the named rectangle a note hangs on. Action "knowledge" only. Narrower than pageKey, since a page holds several frames.'
@@ -2689,7 +2689,7 @@ import { mcpResult as mcpResult9, mcpError as mcpError10 } from "@walkeros/core"
2689
2689
  var FRAME_ID_PATTERN2 = /^frm_[A-Za-z0-9_-]{21}$/;
2690
2690
  var MAX_PAGE_KEY_CHARS = 1024;
2691
2691
  var TITLE9 = "Frames";
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.';
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 of one page, 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 shows other frames through links: each link is a rectangle on the frame and the frameId of the frame shown there. A page read returns the frames of that page; a shown frame that is not of that page is not in the answer, only named by frameId in links. Frames that share a variantSetId are variants of one another, and each is a complete frame. 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.';
2693
2693
  var FRAME_MANAGE_INPUT_SCHEMA = {
2694
2694
  action: z10.enum(["list", "page", "get"]).describe(
2695
2695
  "list the flow\u2019s frames, read one page with marks, or read one frame"
@@ -2716,12 +2716,13 @@ var annotations9 = {
2716
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.';
2717
2717
  var FRAME_HINT_NAMES_ARE_DOCUMENTATION = "Frame names are documentation; the marks inside a frame carry the meaning.";
2718
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.";
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.";
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 link\u2019s x, y, w and h are fractions of the frame that shows it.";
2720
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.';
2721
2721
  var FRAME_HINT_NONE_ON_PAGE = 'No frames on this page. Check the pageKey against the source.key values from action "list".';
2722
- var FRAME_HINT_EXTENDS_BASE = "This frame extends another and stores only what it adds; read the base frame (extends) for the rest.";
2722
+ var FRAME_HINT_FOLLOW_LINKS = 'This frame shows other frames: each entry of links names one by frameId. Use action "get" with that frameId to read it.';
2723
2723
  var FRAME_NOT_FOUND_HINT = 'Use action "list" or "page" to find frame ids.';
2724
2724
  var FRAME_FLOW_NOT_FOUND_HINT = 'Use flow_manage action "list" to find a live flow of the project.';
2725
+ var FRAME_LINKS_NOT_SERVED = "This app does not serve frame links yet, so this client cannot read its frames. It needs the app release that serves links.";
2725
2726
  function frameRefusalHint(error) {
2726
2727
  switch (codeOf(error)) {
2727
2728
  case "FLOW_NOT_FOUND":
@@ -2734,17 +2735,21 @@ function frameRefusalHint(error) {
2734
2735
  }
2735
2736
  var keepSourceAddress = (key) => key === "kind" || key === "key";
2736
2737
  function serializeLean(frame) {
2738
+ if (!Array.isArray(frame.links)) throw new Error(FRAME_LINKS_NOT_SERVED);
2737
2739
  return {
2738
2740
  id: frame.id,
2739
2741
  name: wrapUserData(frame.name),
2740
- parentId: frame.parentId,
2741
- extends: frame.extends,
2742
2742
  source: redactNestedStrings(frame.source, { skip: keepSourceAddress }),
2743
2743
  origin: frame.origin,
2744
- placements: frame.placements.map((placement) => ({
2745
- id: placement.id,
2746
- rect: placement.rect
2744
+ links: frame.links.map((link) => ({
2745
+ id: link.id,
2746
+ frameId: link.frameId,
2747
+ x: link.x,
2748
+ y: link.y,
2749
+ w: link.w,
2750
+ h: link.h
2747
2751
  })),
2752
+ variantSetId: frame.variantSetId,
2748
2753
  size: frame.size,
2749
2754
  screenshot: frame.screenshot ? {
2750
2755
  assetId: frame.screenshot.assetId,
@@ -2885,7 +2890,7 @@ async function frameManageHandler(client, rawInput) {
2885
2890
  return mcpResult9(
2886
2891
  { frame: serializeFrame(frame) },
2887
2892
  {
2888
- next: frame.extends !== null ? [FRAME_HINT_EXTENDS_BASE, FRAME_HINT_READ_KNOWLEDGE] : [FRAME_HINT_READ_KNOWLEDGE]
2893
+ next: frame.links.length > 0 ? [FRAME_HINT_FOLLOW_LINKS, FRAME_HINT_READ_KNOWLEDGE] : [FRAME_HINT_READ_KNOWLEDGE]
2889
2894
  }
2890
2895
  );
2891
2896
  }
@@ -2969,7 +2974,7 @@ async function feedbackHandlerBody(client, input) {
2969
2974
  const isAnonymous = explicitAnonymous ?? anonymous ?? true;
2970
2975
  await client.submitFeedback(text, {
2971
2976
  anonymous: isAnonymous,
2972
- version: "4.8.0"
2977
+ version: "4.9.0-next-1791925945414"
2973
2978
  });
2974
2979
  return mcpResult10({ ok: true });
2975
2980
  } catch (error) {
@@ -3761,7 +3766,7 @@ var NPM_SEARCH_URL = "https://registry.npmjs.org/-/v1/search";
3761
3766
  var JSDELIVR_BASE = "https://cdn.jsdelivr.net/npm";
3762
3767
  var WALKEROS_JSON_PATH = "dist/walkerOS.json";
3763
3768
  var CACHE_TTL = 5 * 60 * 1e3;
3764
- var CLIENT_HEADER = "walkeros-mcp/4.8.0";
3769
+ var CLIENT_HEADER = "walkeros-mcp/4.9.0-next-1791925945414";
3765
3770
  function getPackageBaseUrl() {
3766
3771
  return process.env.WALKEROS_APP_URL || void 0;
3767
3772
  }
@@ -5439,7 +5444,7 @@ var HttpToolClient = class {
5439
5444
  async checkContract() {
5440
5445
  return compareContract({
5441
5446
  baseUrl: this.appBaseUrl(),
5442
- client: { type: "mcp", version: "4.8.0" }
5447
+ client: { type: "mcp", version: "4.9.0-next-1791925945414" }
5443
5448
  });
5444
5449
  }
5445
5450
  /** The live public OpenAPI document of `appBaseUrl()`, without a credential. */
@@ -6034,7 +6039,7 @@ function createToolHandlers(client, packageVersion = "0.0.0", runtime = createHo
6034
6039
  }
6035
6040
  export {
6036
6041
  FEATURE_NOT_AVAILABLE,
6037
- FRAME_HINT_EXTENDS_BASE,
6042
+ FRAME_HINT_FOLLOW_LINKS,
6038
6043
  FRAME_HINT_MARK_SPACE,
6039
6044
  FRAME_HINT_NAMES_ARE_DOCUMENTATION,
6040
6045
  FRAME_HINT_NONE_ON_PAGE,