@pixerate/editor 0.147.0 → 0.149.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.
Files changed (71) hide show
  1. package/dist/agent/index.cjs +8 -4
  2. package/dist/agent/index.js +6 -2
  3. package/dist/animation-editor/effect-tools.d.cts +5 -0
  4. package/dist/animation-editor/effect-tools.d.ts +5 -0
  5. package/dist/animation-editor/index.cjs +4 -4
  6. package/dist/animation-editor/index.js +4 -4
  7. package/dist/animation-editor/playback.d.cts +3 -2
  8. package/dist/animation-editor/playback.d.ts +3 -2
  9. package/dist/animation-editor/tools.d.cts +5 -0
  10. package/dist/animation-editor/tools.d.ts +5 -0
  11. package/dist/chart/index.cjs +2 -2
  12. package/dist/chart/index.js +2 -2
  13. package/dist/chart/playback.d.cts +2 -2
  14. package/dist/chart/playback.d.ts +2 -2
  15. package/dist/chart/tools.d.cts +5 -0
  16. package/dist/chart/tools.d.ts +5 -0
  17. package/dist/{chunk-HUHBJWTD.js → chunk-3EVMUYF4.js} +16 -0
  18. package/dist/{chunk-D2ENR3LB.cjs → chunk-FR7GHH2K.cjs} +33 -17
  19. package/dist/{chunk-SA37RU2O.js → chunk-OOV64UEB.js} +1 -1
  20. package/dist/{chunk-AG2EXVCR.cjs → chunk-ZCFHPORF.cjs} +2 -2
  21. package/dist/commands/index.cjs +2 -2
  22. package/dist/commands/index.js +1 -1
  23. package/dist/effects/authoring-session.d.cts +25 -0
  24. package/dist/effects/authoring-session.d.ts +25 -0
  25. package/dist/effects/authoring-tools.d.cts +31 -0
  26. package/dist/effects/authoring-tools.d.ts +31 -0
  27. package/dist/effects/authoring.d.cts +152 -0
  28. package/dist/effects/authoring.d.ts +152 -0
  29. package/dist/effects/conformance.d.cts +2 -0
  30. package/dist/effects/conformance.d.ts +2 -0
  31. package/dist/effects/fake.d.cts +2 -0
  32. package/dist/effects/fake.d.ts +2 -0
  33. package/dist/effects/index.cjs +1216 -9
  34. package/dist/effects/index.d.cts +3 -0
  35. package/dist/effects/index.d.ts +3 -0
  36. package/dist/effects/index.js +1210 -3
  37. package/dist/effects/types.d.cts +9 -2
  38. package/dist/effects/types.d.ts +9 -2
  39. package/dist/effects/ui.d.cts +8 -0
  40. package/dist/effects/ui.d.ts +8 -0
  41. package/dist/image-editor/index.cjs +4 -4
  42. package/dist/image-editor/index.js +4 -4
  43. package/dist/image-editor/playback.d.cts +2 -2
  44. package/dist/image-editor/playback.d.ts +2 -2
  45. package/dist/image-editor/provider-effect-tools.d.cts +5 -0
  46. package/dist/image-editor/provider-effect-tools.d.ts +5 -0
  47. package/dist/image-editor/tools.d.cts +5 -0
  48. package/dist/image-editor/tools.d.ts +5 -0
  49. package/dist/paint-editor/effect-tools.d.cts +5 -0
  50. package/dist/paint-editor/effect-tools.d.ts +5 -0
  51. package/dist/paint-editor/index.cjs +3 -3
  52. package/dist/paint-editor/index.js +3 -3
  53. package/dist/paint-editor/playback.d.cts +2 -2
  54. package/dist/paint-editor/playback.d.ts +2 -2
  55. package/dist/paint-editor/tools.d.cts +5 -0
  56. package/dist/paint-editor/tools.d.ts +5 -0
  57. package/dist/tools/index.cjs +7 -3
  58. package/dist/tools/index.js +6 -2
  59. package/dist/tools/playback.d.cts +28 -0
  60. package/dist/tools/playback.d.ts +28 -0
  61. package/dist/video-editor/effect-tools.d.cts +5 -0
  62. package/dist/video-editor/effect-tools.d.ts +5 -0
  63. package/dist/video-editor/index.cjs +4 -4
  64. package/dist/video-editor/index.js +4 -4
  65. package/dist/video-editor/playback.d.cts +3 -2
  66. package/dist/video-editor/playback.d.ts +3 -2
  67. package/dist/video-editor/tools.d.cts +5 -0
  68. package/dist/video-editor/tools.d.ts +5 -0
  69. package/package.json +1 -1
  70. package/skills/README.md +1 -0
  71. package/skills/pixerate-effect-authoring/SKILL.md +80 -0
@@ -19,7 +19,7 @@ require('../chunk-4EFNS2HV.cjs');
19
19
 
20
20
 
21
21
 
22
- var _chunkAG2EXVCRcjs = require('../chunk-AG2EXVCR.cjs');
22
+ var _chunkZCFHPORFcjs = require('../chunk-ZCFHPORF.cjs');
23
23
 
24
24
 
25
25
 
@@ -55,7 +55,9 @@ var _chunkY4BWZB6Jcjs = require('../chunk-Y4BWZB6J.cjs');
55
55
 
56
56
 
57
57
 
58
- var _chunkD2ENR3LBcjs = require('../chunk-D2ENR3LB.cjs');
58
+
59
+
60
+ var _chunkFR7GHH2Kcjs = require('../chunk-FR7GHH2K.cjs');
59
61
 
60
62
 
61
63
 
@@ -588,7 +590,7 @@ function planCanvasPlaybackSteps(steps, nodes, rectOptions) {
588
590
  const node = placed.get(id);
589
591
  if (node) placed.set(id, { ...node, position });
590
592
  }
591
- const rect = _chunkD2ENR3LBcjs.unionRects.call(void 0, moved.map(([id]) => rectOf(id)));
593
+ const rect = _chunkFR7GHH2Kcjs.unionRects.call(void 0, moved.map(([id]) => rectOf(id)));
592
594
  if (rect) after.push({ type: "move", to: centre(rect) }, { type: "focus", rect }, { type: "wait", ms: 450 });
593
595
  break;
594
596
  }
@@ -2249,4 +2251,6 @@ function createCanvasComponentToolProvider(controller, options = { id: "canvas-c
2249
2251
 
2250
2252
 
2251
2253
 
2252
- exports.AgentPlayback = _chunkD2ENR3LBcjs.AgentPlayback; exports.CAPTURE_EXCLUDE_SELECTOR = _chunkSVFEVKLFcjs.CAPTURE_EXCLUDE_SELECTOR; exports.CAPTURE_OVERLAY_SELECTORS = _chunkSVFEVKLFcjs.CAPTURE_OVERLAY_SELECTORS; exports.EDITOR_CANVAS_TOOLS = _chunkSVFEVKLFcjs.EDITOR_CANVAS_TOOLS; exports.EDITOR_MCP_TOOLS = _chunkSVFEVKLFcjs.EDITOR_MCP_TOOLS; exports.EDITOR_PROMPT_TOOLS = _chunkSVFEVKLFcjs.EDITOR_PROMPT_TOOLS; exports.EDIT_OPERATION_REQUIRED_ARGUMENTS = _chunkSVFEVKLFcjs.EDIT_OPERATION_REQUIRED_ARGUMENTS; exports.EXPORT_EXCLUDED_SELECTORS = _chunkSVFEVKLFcjs.EXPORT_EXCLUDED_SELECTORS; exports.JSON_RPC_ERRORS = _chunkY4BWZB6Jcjs.JSON_RPC_ERRORS; exports.MCP_PROTOCOL_VERSIONS = _chunkY4BWZB6Jcjs.MCP_PROTOCOL_VERSIONS; exports.MCP_TOOL_CANVAS_ADD_NODE = _chunkSVFEVKLFcjs.MCP_TOOL_CANVAS_ADD_NODE; exports.MCP_TOOL_CANVAS_CONNECT = _chunkSVFEVKLFcjs.MCP_TOOL_CANVAS_CONNECT; exports.MCP_TOOL_CANVAS_HIGHLIGHT = _chunkSVFEVKLFcjs.MCP_TOOL_CANVAS_HIGHLIGHT; exports.MCP_TOOL_CANVAS_LAYOUT = _chunkSVFEVKLFcjs.MCP_TOOL_CANVAS_LAYOUT; exports.MCP_TOOL_CANVAS_REMOVE_NODES = _chunkSVFEVKLFcjs.MCP_TOOL_CANVAS_REMOVE_NODES; exports.MCP_TOOL_CANVAS_SELECT = _chunkSVFEVKLFcjs.MCP_TOOL_CANVAS_SELECT; exports.MCP_TOOL_CANVAS_UPDATE_NODE = _chunkSVFEVKLFcjs.MCP_TOOL_CANVAS_UPDATE_NODE; exports.MCP_TOOL_EDIT_CANVAS = _chunkSVFEVKLFcjs.MCP_TOOL_EDIT_CANVAS; exports.MCP_TOOL_EDIT_PROMPT = _chunkSVFEVKLFcjs.MCP_TOOL_EDIT_PROMPT; exports.MCP_TOOL_GET_EDITOR_STATE = _chunkSVFEVKLFcjs.MCP_TOOL_GET_EDITOR_STATE; exports.MCP_TOOL_PROMPT_INSERT_TEXT = _chunkSVFEVKLFcjs.MCP_TOOL_PROMPT_INSERT_TEXT; exports.MCP_TOOL_PROMPT_REPLACE_RANGE = _chunkSVFEVKLFcjs.MCP_TOOL_PROMPT_REPLACE_RANGE; exports.MCP_TOOL_PROMPT_SELECT = _chunkSVFEVKLFcjs.MCP_TOOL_PROMPT_SELECT; exports.MCP_TOOL_PROMPT_SET_VARIABLE = _chunkSVFEVKLFcjs.MCP_TOOL_PROMPT_SET_VARIABLE; exports.MCP_TOOL_VIEW_EDITOR = _chunkSVFEVKLFcjs.MCP_TOOL_VIEW_EDITOR; exports.PRESENCE_COLORS = _chunkUJGAA6AKcjs.PRESENCE_COLORS; exports.PerformanceQueue = _chunkUJGAA6AKcjs.PerformanceQueue; exports.PresenceStore = _chunkUJGAA6AKcjs.PresenceStore; exports.TOOL_BRIDGE_DEFAULT_PORT = _chunkY4BWZB6Jcjs.TOOL_BRIDGE_DEFAULT_PORT; exports.TOOL_BRIDGE_PROTOCOL = _chunkY4BWZB6Jcjs.TOOL_BRIDGE_PROTOCOL; exports.TOOL_DISCOVERY_TOOLS = _chunkY4BWZB6Jcjs.TOOL_DISCOVERY_TOOLS; exports.TOOL_NAMESPACE_SEPARATOR = _chunkY4BWZB6Jcjs.TOOL_NAMESPACE_SEPARATOR; exports.ToolRegistry = _chunkY4BWZB6Jcjs.ToolRegistry; exports.ToolRegistryError = _chunkY4BWZB6Jcjs.ToolRegistryError; exports.ToolRegistryView = _chunkY4BWZB6Jcjs.ToolRegistryView; exports.UNSAFE_JSON_KEYS = _chunk2BSBFBOAcjs.UNSAFE_JSON_KEYS; exports.baseToolName = _chunkY4BWZB6Jcjs.baseToolName; exports.captureInputSchema = _chunkN2FGYZ4Qcjs.captureInputSchema; exports.captureOutputSize = _chunkN2FGYZ4Qcjs.captureOutputSize; exports.cloneElementWithStyles = _chunkSVFEVKLFcjs.cloneElementWithStyles; exports.connectToolBridge = _chunkY4BWZB6Jcjs.connectToolBridge; exports.createAgentPlayback = _chunkD2ENR3LBcjs.createAgentPlayback; exports.createCanvasComponentToolProvider = createCanvasComponentToolProvider; exports.createCaptureTool = _chunkN2FGYZ4Qcjs.createCaptureTool; exports.createCaptureToolProvider = _chunkN2FGYZ4Qcjs.createCaptureToolProvider; exports.createDocumentChartTools = createDocumentChartTools; exports.createEditorMcpToolProvider = createEditorMcpToolProvider; exports.createElementCaptureSurface = _chunkSVFEVKLFcjs.createElementCaptureSurface; exports.createInstantPresenceClock = _chunkUJGAA6AKcjs.createInstantPresenceClock; exports.createMcpServer = _chunkY4BWZB6Jcjs.createMcpServer; exports.createPlaybackToolProvider = _chunkD2ENR3LBcjs.createPlaybackToolProvider; exports.createRichTextToolProvider = createRichTextToolProvider; exports.createSpreadsheetToolProvider = createSpreadsheetToolProvider; exports.createToolRegistry = _chunkY4BWZB6Jcjs.createToolRegistry; exports.derivePlaybackSteps = _chunkD2ENR3LBcjs.derivePlaybackSteps; exports.elementToSvg = _chunkSVFEVKLFcjs.elementToSvg; exports.errorResult = _chunkY4BWZB6Jcjs.errorResult; exports.isUnsafeJsonKey = _chunk2BSBFBOAcjs.isUnsafeJsonKey; exports.listSkills = _chunkY4BWZB6Jcjs.listSkills; exports.normalizeSide = normalizeSide; exports.parseSkillFrontmatter = _chunkY4BWZB6Jcjs.parseSkillFrontmatter; exports.planAgentCommand = planAgentCommand; exports.planCanvasPlaybackSteps = planCanvasPlaybackSteps; exports.planCanvasToolPlayback = planCanvasToolPlayback; exports.planToolCall = planToolCall; exports.playbackRefsFromArgs = _chunkD2ENR3LBcjs.playbackRefsFromArgs; exports.playbackRefsFromResult = _chunkD2ENR3LBcjs.playbackRefsFromResult; exports.rasterizeElement = _chunkSVFEVKLFcjs.rasterizeElement; exports.readSkillFile = _chunkY4BWZB6Jcjs.readSkillFile; exports.readingTime = _chunkD2ENR3LBcjs.readingTime; exports.realPresenceClock = _chunkUJGAA6AKcjs.realPresenceClock; exports.resolveCaptureRequest = _chunkN2FGYZ4Qcjs.resolveCaptureRequest; exports.runToolScript = _chunkAG2EXVCRcjs.runToolScript; exports.searchTokens = _chunkY4BWZB6Jcjs.searchTokens; exports.searchTools = _chunkY4BWZB6Jcjs.searchTools; exports.stripPrototypeKeys = _chunk2BSBFBOAcjs.stripPrototypeKeys; exports.summarize = _chunkY4BWZB6Jcjs.summarize; exports.toCapturedImageData = _chunkN2FGYZ4Qcjs.toCapturedImageData; exports.toToolResult = _chunkY4BWZB6Jcjs.toToolResult; exports.toolCallToAgentCommand = toolCallToAgentCommand; exports.toolResultError = _chunkAG2EXVCRcjs.toolResultError; exports.toolResultValue = _chunkAG2EXVCRcjs.toolResultValue; exports.toolsetInstructions = _chunkY4BWZB6Jcjs.toolsetInstructions; exports.toolsetName = _chunkY4BWZB6Jcjs.toolsetName; exports.tweenPresenceCursor = _chunkUJGAA6AKcjs.tweenPresenceCursor; exports.unionCaptureRects = _chunkN2FGYZ4Qcjs.unionCaptureRects; exports.unionRects = _chunkD2ENR3LBcjs.unionRects; exports.unknownToolMessage = _chunkY4BWZB6Jcjs.unknownToolMessage; exports.validateAgentCommand = validateAgentCommand; exports.validateJsonSchema = _chunkWOFXZ3XUcjs.validateJsonSchema;
2254
+
2255
+
2256
+ exports.AgentPlayback = _chunkFR7GHH2Kcjs.AgentPlayback; exports.CAPTURE_EXCLUDE_SELECTOR = _chunkSVFEVKLFcjs.CAPTURE_EXCLUDE_SELECTOR; exports.CAPTURE_OVERLAY_SELECTORS = _chunkSVFEVKLFcjs.CAPTURE_OVERLAY_SELECTORS; exports.EDITOR_CANVAS_TOOLS = _chunkSVFEVKLFcjs.EDITOR_CANVAS_TOOLS; exports.EDITOR_MCP_TOOLS = _chunkSVFEVKLFcjs.EDITOR_MCP_TOOLS; exports.EDITOR_PROMPT_TOOLS = _chunkSVFEVKLFcjs.EDITOR_PROMPT_TOOLS; exports.EDIT_OPERATION_REQUIRED_ARGUMENTS = _chunkSVFEVKLFcjs.EDIT_OPERATION_REQUIRED_ARGUMENTS; exports.EXPORT_EXCLUDED_SELECTORS = _chunkSVFEVKLFcjs.EXPORT_EXCLUDED_SELECTORS; exports.JSON_RPC_ERRORS = _chunkY4BWZB6Jcjs.JSON_RPC_ERRORS; exports.MCP_PROTOCOL_VERSIONS = _chunkY4BWZB6Jcjs.MCP_PROTOCOL_VERSIONS; exports.MCP_TOOL_CANVAS_ADD_NODE = _chunkSVFEVKLFcjs.MCP_TOOL_CANVAS_ADD_NODE; exports.MCP_TOOL_CANVAS_CONNECT = _chunkSVFEVKLFcjs.MCP_TOOL_CANVAS_CONNECT; exports.MCP_TOOL_CANVAS_HIGHLIGHT = _chunkSVFEVKLFcjs.MCP_TOOL_CANVAS_HIGHLIGHT; exports.MCP_TOOL_CANVAS_LAYOUT = _chunkSVFEVKLFcjs.MCP_TOOL_CANVAS_LAYOUT; exports.MCP_TOOL_CANVAS_REMOVE_NODES = _chunkSVFEVKLFcjs.MCP_TOOL_CANVAS_REMOVE_NODES; exports.MCP_TOOL_CANVAS_SELECT = _chunkSVFEVKLFcjs.MCP_TOOL_CANVAS_SELECT; exports.MCP_TOOL_CANVAS_UPDATE_NODE = _chunkSVFEVKLFcjs.MCP_TOOL_CANVAS_UPDATE_NODE; exports.MCP_TOOL_EDIT_CANVAS = _chunkSVFEVKLFcjs.MCP_TOOL_EDIT_CANVAS; exports.MCP_TOOL_EDIT_PROMPT = _chunkSVFEVKLFcjs.MCP_TOOL_EDIT_PROMPT; exports.MCP_TOOL_GET_EDITOR_STATE = _chunkSVFEVKLFcjs.MCP_TOOL_GET_EDITOR_STATE; exports.MCP_TOOL_PROMPT_INSERT_TEXT = _chunkSVFEVKLFcjs.MCP_TOOL_PROMPT_INSERT_TEXT; exports.MCP_TOOL_PROMPT_REPLACE_RANGE = _chunkSVFEVKLFcjs.MCP_TOOL_PROMPT_REPLACE_RANGE; exports.MCP_TOOL_PROMPT_SELECT = _chunkSVFEVKLFcjs.MCP_TOOL_PROMPT_SELECT; exports.MCP_TOOL_PROMPT_SET_VARIABLE = _chunkSVFEVKLFcjs.MCP_TOOL_PROMPT_SET_VARIABLE; exports.MCP_TOOL_VIEW_EDITOR = _chunkSVFEVKLFcjs.MCP_TOOL_VIEW_EDITOR; exports.PRESENCE_COLORS = _chunkUJGAA6AKcjs.PRESENCE_COLORS; exports.PerformanceQueue = _chunkUJGAA6AKcjs.PerformanceQueue; exports.PresenceStore = _chunkUJGAA6AKcjs.PresenceStore; exports.TOOL_BRIDGE_DEFAULT_PORT = _chunkY4BWZB6Jcjs.TOOL_BRIDGE_DEFAULT_PORT; exports.TOOL_BRIDGE_PROTOCOL = _chunkY4BWZB6Jcjs.TOOL_BRIDGE_PROTOCOL; exports.TOOL_DISCOVERY_TOOLS = _chunkY4BWZB6Jcjs.TOOL_DISCOVERY_TOOLS; exports.TOOL_NAMESPACE_SEPARATOR = _chunkY4BWZB6Jcjs.TOOL_NAMESPACE_SEPARATOR; exports.ToolRegistry = _chunkY4BWZB6Jcjs.ToolRegistry; exports.ToolRegistryError = _chunkY4BWZB6Jcjs.ToolRegistryError; exports.ToolRegistryView = _chunkY4BWZB6Jcjs.ToolRegistryView; exports.UNSAFE_JSON_KEYS = _chunk2BSBFBOAcjs.UNSAFE_JSON_KEYS; exports.baseToolName = _chunkY4BWZB6Jcjs.baseToolName; exports.captureInputSchema = _chunkN2FGYZ4Qcjs.captureInputSchema; exports.captureOutputSize = _chunkN2FGYZ4Qcjs.captureOutputSize; exports.cloneElementWithStyles = _chunkSVFEVKLFcjs.cloneElementWithStyles; exports.connectToolBridge = _chunkY4BWZB6Jcjs.connectToolBridge; exports.createAgentPlayback = _chunkFR7GHH2Kcjs.createAgentPlayback; exports.createCanvasComponentToolProvider = createCanvasComponentToolProvider; exports.createCaptureTool = _chunkN2FGYZ4Qcjs.createCaptureTool; exports.createCaptureToolProvider = _chunkN2FGYZ4Qcjs.createCaptureToolProvider; exports.createDocumentChartTools = createDocumentChartTools; exports.createEditorMcpToolProvider = createEditorMcpToolProvider; exports.createElementCaptureSurface = _chunkSVFEVKLFcjs.createElementCaptureSurface; exports.createInstantPresenceClock = _chunkUJGAA6AKcjs.createInstantPresenceClock; exports.createMcpServer = _chunkY4BWZB6Jcjs.createMcpServer; exports.createPlaybackToolProvider = _chunkFR7GHH2Kcjs.createPlaybackToolProvider; exports.createRichTextToolProvider = createRichTextToolProvider; exports.createSpreadsheetToolProvider = createSpreadsheetToolProvider; exports.createToolRegistry = _chunkY4BWZB6Jcjs.createToolRegistry; exports.derivePlaybackSteps = _chunkFR7GHH2Kcjs.derivePlaybackSteps; exports.elementToSvg = _chunkSVFEVKLFcjs.elementToSvg; exports.errorResult = _chunkY4BWZB6Jcjs.errorResult; exports.isUnsafeJsonKey = _chunk2BSBFBOAcjs.isUnsafeJsonKey; exports.listSkills = _chunkY4BWZB6Jcjs.listSkills; exports.locatePlaybackChrome = _chunkFR7GHH2Kcjs.locatePlaybackChrome; exports.normalizeSide = normalizeSide; exports.parseSkillFrontmatter = _chunkY4BWZB6Jcjs.parseSkillFrontmatter; exports.planAgentCommand = planAgentCommand; exports.planCanvasPlaybackSteps = planCanvasPlaybackSteps; exports.planCanvasToolPlayback = planCanvasToolPlayback; exports.planToolCall = planToolCall; exports.playbackRectFromClient = _chunkFR7GHH2Kcjs.playbackRectFromClient; exports.playbackRefsFromArgs = _chunkFR7GHH2Kcjs.playbackRefsFromArgs; exports.playbackRefsFromResult = _chunkFR7GHH2Kcjs.playbackRefsFromResult; exports.rasterizeElement = _chunkSVFEVKLFcjs.rasterizeElement; exports.readSkillFile = _chunkY4BWZB6Jcjs.readSkillFile; exports.readingTime = _chunkFR7GHH2Kcjs.readingTime; exports.realPresenceClock = _chunkUJGAA6AKcjs.realPresenceClock; exports.resolveCaptureRequest = _chunkN2FGYZ4Qcjs.resolveCaptureRequest; exports.runToolScript = _chunkZCFHPORFcjs.runToolScript; exports.searchTokens = _chunkY4BWZB6Jcjs.searchTokens; exports.searchTools = _chunkY4BWZB6Jcjs.searchTools; exports.stripPrototypeKeys = _chunk2BSBFBOAcjs.stripPrototypeKeys; exports.summarize = _chunkY4BWZB6Jcjs.summarize; exports.toCapturedImageData = _chunkN2FGYZ4Qcjs.toCapturedImageData; exports.toToolResult = _chunkY4BWZB6Jcjs.toToolResult; exports.toolCallToAgentCommand = toolCallToAgentCommand; exports.toolResultError = _chunkZCFHPORFcjs.toolResultError; exports.toolResultValue = _chunkZCFHPORFcjs.toolResultValue; exports.toolsetInstructions = _chunkY4BWZB6Jcjs.toolsetInstructions; exports.toolsetName = _chunkY4BWZB6Jcjs.toolsetName; exports.tweenPresenceCursor = _chunkUJGAA6AKcjs.tweenPresenceCursor; exports.unionCaptureRects = _chunkN2FGYZ4Qcjs.unionCaptureRects; exports.unionRects = _chunkFR7GHH2Kcjs.unionRects; exports.unknownToolMessage = _chunkY4BWZB6Jcjs.unknownToolMessage; exports.validateAgentCommand = validateAgentCommand; exports.validateJsonSchema = _chunkWOFXZ3XUcjs.validateJsonSchema;
@@ -19,7 +19,7 @@ import {
19
19
  runToolScript,
20
20
  toolResultError,
21
21
  toolResultValue
22
- } from "../chunk-SA37RU2O.js";
22
+ } from "../chunk-OOV64UEB.js";
23
23
  import {
24
24
  JSON_RPC_ERRORS,
25
25
  MCP_PROTOCOL_VERSIONS,
@@ -51,11 +51,13 @@ import {
51
51
  createAgentPlayback,
52
52
  createPlaybackToolProvider,
53
53
  derivePlaybackSteps,
54
+ locatePlaybackChrome,
55
+ playbackRectFromClient,
54
56
  playbackRefsFromArgs,
55
57
  playbackRefsFromResult,
56
58
  readingTime,
57
59
  unionRects
58
- } from "../chunk-HUHBJWTD.js";
60
+ } from "../chunk-3EVMUYF4.js";
59
61
  import {
60
62
  CAPTURE_EXCLUDE_SELECTOR,
61
63
  CAPTURE_OVERLAY_SELECTORS,
@@ -2218,12 +2220,14 @@ export {
2218
2220
  errorResult,
2219
2221
  isUnsafeJsonKey,
2220
2222
  listSkills,
2223
+ locatePlaybackChrome,
2221
2224
  normalizeSide,
2222
2225
  parseSkillFrontmatter,
2223
2226
  planAgentCommand,
2224
2227
  planCanvasPlaybackSteps,
2225
2228
  planCanvasToolPlayback,
2226
2229
  planToolCall,
2230
+ playbackRectFromClient,
2227
2231
  playbackRefsFromArgs,
2228
2232
  playbackRefsFromResult,
2229
2233
  rasterizeElement,
@@ -12,6 +12,11 @@ export interface AnimationEffectsToolProviderOptions {
12
12
  namespace?: string;
13
13
  /** The scene cannot be edited: write tools are hidden. A string is the reason. */
14
14
  readOnly?: boolean | string | (() => boolean | string);
15
+ /**
16
+ * The agent playback surface its calls are acted out on (default `animation`, where `AnimationEditor` attaches).
17
+ * Set it when one registry holds several editors of this kind, each attached under its own surface id.
18
+ */
19
+ playbackSurface?: string;
15
20
  }
16
21
  /** The effect tools for an animation editor (see the module comment). */
17
22
  export declare function createAnimationEffectsToolProvider(controller: AnimationEditorController, options?: AnimationEffectsToolProviderOptions): AgentToolProvider;
@@ -12,6 +12,11 @@ export interface AnimationEffectsToolProviderOptions {
12
12
  namespace?: string;
13
13
  /** The scene cannot be edited: write tools are hidden. A string is the reason. */
14
14
  readOnly?: boolean | string | (() => boolean | string);
15
+ /**
16
+ * The agent playback surface its calls are acted out on (default `animation`, where `AnimationEditor` attaches).
17
+ * Set it when one registry holds several editors of this kind, each attached under its own surface id.
18
+ */
19
+ playbackSurface?: string;
15
20
  }
16
21
  /** The effect tools for an animation editor (see the module comment). */
17
22
  export declare function createAnimationEffectsToolProvider(controller: AnimationEditorController, options?: AnimationEffectsToolProviderOptions): AgentToolProvider;
@@ -4397,12 +4397,12 @@ function planAnimationToolPlayback(tool, args) {
4397
4397
  for (const id of elementsOf(args)) steps.push({ type: "target", ref: { kind: "element", id } });
4398
4398
  return steps.length ? steps : null;
4399
4399
  }
4400
- function withAnimationPlayback(provider, surface = "animation") {
4400
+ function withAnimationPlayback(provider, surface) {
4401
4401
  const plan = (tool) => tool.plan || tool.playback !== void 0 ? tool : { ...tool, plan: (args) => planAnimationToolPlayback(tool.name, args) };
4402
4402
  const tools = provider.tools;
4403
4403
  return {
4404
4404
  ...provider,
4405
- playbackSurface: _nullishCoalesce(provider.playbackSurface, () => ( surface)),
4405
+ playbackSurface: _nullishCoalesce(_nullishCoalesce(surface, () => ( provider.playbackSurface)), () => ( "animation")),
4406
4406
  tools: typeof tools === "function" ? () => tools().map(plan) : tools.map(plan)
4407
4407
  };
4408
4408
  }
@@ -5505,7 +5505,7 @@ function createAnimationEditorToolProvider(controller, options = {}) {
5505
5505
  }
5506
5506
  });
5507
5507
  }
5508
- });
5508
+ }, options.playbackSurface);
5509
5509
  }
5510
5510
 
5511
5511
  // src/animation-editor/instructions.ts
@@ -5928,7 +5928,7 @@ function createAnimationEffectsToolProvider(controller, options = {}) {
5928
5928
  }
5929
5929
  }
5930
5930
  ]
5931
- }));
5931
+ }), options.playbackSurface);
5932
5932
  }
5933
5933
 
5934
5934
 
@@ -4397,12 +4397,12 @@ function planAnimationToolPlayback(tool, args) {
4397
4397
  for (const id of elementsOf(args)) steps.push({ type: "target", ref: { kind: "element", id } });
4398
4398
  return steps.length ? steps : null;
4399
4399
  }
4400
- function withAnimationPlayback(provider, surface = "animation") {
4400
+ function withAnimationPlayback(provider, surface) {
4401
4401
  const plan = (tool) => tool.plan || tool.playback !== void 0 ? tool : { ...tool, plan: (args) => planAnimationToolPlayback(tool.name, args) };
4402
4402
  const tools = provider.tools;
4403
4403
  return {
4404
4404
  ...provider,
4405
- playbackSurface: provider.playbackSurface ?? surface,
4405
+ playbackSurface: surface ?? provider.playbackSurface ?? "animation",
4406
4406
  tools: typeof tools === "function" ? () => tools().map(plan) : tools.map(plan)
4407
4407
  };
4408
4408
  }
@@ -5505,7 +5505,7 @@ function createAnimationEditorToolProvider(controller, options = {}) {
5505
5505
  }
5506
5506
  });
5507
5507
  }
5508
- });
5508
+ }, options.playbackSurface);
5509
5509
  }
5510
5510
 
5511
5511
  // src/animation-editor/instructions.ts
@@ -5928,7 +5928,7 @@ function createAnimationEffectsToolProvider(controller, options = {}) {
5928
5928
  }
5929
5929
  }
5930
5930
  ]
5931
- }));
5931
+ }), options.playbackSurface);
5932
5932
  }
5933
5933
  export {
5934
5934
  ANIMATION_EDITOR_AGENT_INSTRUCTIONS,
@@ -4,7 +4,8 @@ import type { PlaybackStep } from '../tools/playback.cjs';
4
4
  export declare function planAnimationToolPlayback(tool: string, args: Record<string, any>): PlaybackStep[] | null;
5
5
  /**
6
6
  * Gives an animation tool provider agent playback: each tool plans its steps with
7
- * `planAnimationToolPlayback` and every call plays on `surface` (default `animation`, where
8
- * `AnimationEditor` attaches itself).
7
+ * `planAnimationToolPlayback` and every call plays on `surface`. An explicit `surface` wins over
8
+ * the provider's own `playbackSurface`; with neither, it is `animation` (where `AnimationEditor`
9
+ * attaches itself).
9
10
  */
10
11
  export declare function withAnimationPlayback(provider: AgentToolProvider, surface?: string): AgentToolProvider;
@@ -4,7 +4,8 @@ import type { PlaybackStep } from '../tools/playback.js';
4
4
  export declare function planAnimationToolPlayback(tool: string, args: Record<string, any>): PlaybackStep[] | null;
5
5
  /**
6
6
  * Gives an animation tool provider agent playback: each tool plans its steps with
7
- * `planAnimationToolPlayback` and every call plays on `surface` (default `animation`, where
8
- * `AnimationEditor` attaches itself).
7
+ * `planAnimationToolPlayback` and every call plays on `surface`. An explicit `surface` wins over
8
+ * the provider's own `playbackSurface`; with neither, it is `animation` (where `AnimationEditor`
9
+ * attaches itself).
9
10
  */
10
11
  export declare function withAnimationPlayback(provider: AgentToolProvider, surface?: string): AgentToolProvider;
@@ -20,6 +20,11 @@ export interface AnimationEditorToolProviderOptions {
20
20
  data: string;
21
21
  mimeType: string;
22
22
  };
23
+ /**
24
+ * The agent playback surface its calls are acted out on (default `animation`, where `AnimationEditor` attaches).
25
+ * Set it when one registry holds several editors of this kind, each attached under its own surface id.
26
+ */
27
+ playbackSurface?: string;
23
28
  }
24
29
  /**
25
30
  * Full JSON Schema of each command type: every field with its range, default and meaning, self-contained.
@@ -20,6 +20,11 @@ export interface AnimationEditorToolProviderOptions {
20
20
  data: string;
21
21
  mimeType: string;
22
22
  };
23
+ /**
24
+ * The agent playback surface its calls are acted out on (default `animation`, where `AnimationEditor` attaches).
25
+ * Set it when one registry holds several editors of this kind, each attached under its own surface id.
26
+ */
27
+ playbackSurface?: string;
23
28
  }
24
29
  /**
25
30
  * Full JSON Schema of each command type: every field with its range, default and meaning, self-contained.
@@ -1158,7 +1158,7 @@ function withChartPlayback(provider, options) {
1158
1158
  const tools = provider.tools;
1159
1159
  return {
1160
1160
  ...provider,
1161
- playbackSurface: _nullishCoalesce(_nullishCoalesce(provider.playbackSurface, () => ( options.surface)), () => ( "chart")),
1161
+ playbackSurface: _nullishCoalesce(_nullishCoalesce(options.surface, () => ( provider.playbackSurface)), () => ( "chart")),
1162
1162
  tools: typeof tools === "function" ? () => tools().map(plan) : tools.map(plan)
1163
1163
  };
1164
1164
  }
@@ -1746,7 +1746,7 @@ function createChartToolProvider(controller, options = {}) {
1746
1746
  }
1747
1747
  });
1748
1748
  }
1749
- }, { director: !!options.director });
1749
+ }, { director: !!options.director, surface: options.playbackSurface });
1750
1750
  }
1751
1751
 
1752
1752
  // src/chart/stream.ts
@@ -1158,7 +1158,7 @@ function withChartPlayback(provider, options) {
1158
1158
  const tools = provider.tools;
1159
1159
  return {
1160
1160
  ...provider,
1161
- playbackSurface: provider.playbackSurface ?? options.surface ?? "chart",
1161
+ playbackSurface: options.surface ?? provider.playbackSurface ?? "chart",
1162
1162
  tools: typeof tools === "function" ? () => tools().map(plan) : tools.map(plan)
1163
1163
  };
1164
1164
  }
@@ -1746,7 +1746,7 @@ function createChartToolProvider(controller, options = {}) {
1746
1746
  }
1747
1747
  });
1748
1748
  }
1749
- }, { director: !!options.director });
1749
+ }, { director: !!options.director, surface: options.playbackSurface });
1750
1750
  }
1751
1751
 
1752
1752
  // src/chart/stream.ts
@@ -13,8 +13,8 @@ export declare function locateChartPoint(spec: ChartSpec, scene: ChartScene, ref
13
13
  /** The cursor steps for one chart tool call (by bare name), or null to fall back to the ids it names. */
14
14
  export declare function planChartToolPlayback(tool: string, args: Record<string, any>): PlaybackStep[] | null;
15
15
  /**
16
- * Gives a chart tool provider agent playback on `surface` (default `chart`, where `ChartEditor`
17
- * attaches). With a director, value changes and selections play through it (`playback: 'self'`).
16
+ * Gives a chart tool provider agent playback on `surface`. An explicit `surface` wins over the
17
+ * provider's own `playbackSurface`; with neither, it is `chart` (where `ChartEditor` attaches). With a director, value changes and selections play through it (`playback: 'self'`).
18
18
  */
19
19
  export declare function withChartPlayback(provider: AgentToolProvider, options: {
20
20
  director: boolean;
@@ -13,8 +13,8 @@ export declare function locateChartPoint(spec: ChartSpec, scene: ChartScene, ref
13
13
  /** The cursor steps for one chart tool call (by bare name), or null to fall back to the ids it names. */
14
14
  export declare function planChartToolPlayback(tool: string, args: Record<string, any>): PlaybackStep[] | null;
15
15
  /**
16
- * Gives a chart tool provider agent playback on `surface` (default `chart`, where `ChartEditor`
17
- * attaches). With a director, value changes and selections play through it (`playback: 'self'`).
16
+ * Gives a chart tool provider agent playback on `surface`. An explicit `surface` wins over the
17
+ * provider's own `playbackSurface`; with neither, it is `chart` (where `ChartEditor` attaches). With a director, value changes and selections play through it (`playback: 'self'`).
18
18
  */
19
19
  export declare function withChartPlayback(provider: AgentToolProvider, options: {
20
20
  director: boolean;
@@ -39,6 +39,11 @@ export interface ChartToolProviderOptions {
39
39
  data: string;
40
40
  mimeType: string;
41
41
  };
42
+ /**
43
+ * The agent playback surface its calls are acted out on (default `chart`, where `ChartEditor` attaches).
44
+ * Set it when one registry holds several editors of this kind, each attached under its own surface id.
45
+ */
46
+ playbackSurface?: string;
42
47
  }
43
48
  /**
44
49
  * When to look at the chart, for `render_chart`'s description (after vectorcraft's
@@ -39,6 +39,11 @@ export interface ChartToolProviderOptions {
39
39
  data: string;
40
40
  mimeType: string;
41
41
  };
42
+ /**
43
+ * The agent playback surface its calls are acted out on (default `chart`, where `ChartEditor` attaches).
44
+ * Set it when one registry holds several editors of this kind, each attached under its own surface id.
45
+ */
46
+ playbackSurface?: string;
42
47
  }
43
48
  /**
44
49
  * When to look at the chart, for `render_chart`'s description (after vectorcraft's
@@ -80,6 +80,20 @@ function unionRects(rects) {
80
80
  const y = Math.min(...list.map((r) => r.y));
81
81
  return { x, y, width: Math.max(...list.map((r) => r.x + r.width)) - x, height: Math.max(...list.map((r) => r.y + r.height)) - y };
82
82
  }
83
+ function playbackRectFromClient(rect, fromViewport) {
84
+ if (!rect || !(rect.width > 0) || !(rect.height > 0)) return null;
85
+ const map = fromViewport ?? ((p) => p);
86
+ const a = map({ x: rect.left, y: rect.top });
87
+ const b = map({ x: rect.left + rect.width, y: rect.top + rect.height });
88
+ return { x: Math.min(a.x, b.x), y: Math.min(a.y, b.y), width: Math.abs(b.x - a.x), height: Math.abs(b.y - a.y) };
89
+ }
90
+ function locatePlaybackChrome(ref, chrome, fromViewport) {
91
+ if (!chrome) return null;
92
+ const own = chrome.locate?.(ref);
93
+ if (own) return own;
94
+ const el = chrome.locateElement?.(ref);
95
+ return el ? playbackRectFromClient(el.getBoundingClientRect(), fromViewport) : null;
96
+ }
83
97
  function normalizePlan(plan) {
84
98
  if (!plan) return null;
85
99
  if (Array.isArray(plan)) return plan.length ? { steps: plan } : null;
@@ -441,6 +455,8 @@ export {
441
455
  derivePlaybackSteps,
442
456
  readingTime,
443
457
  unionRects,
458
+ playbackRectFromClient,
459
+ locatePlaybackChrome,
444
460
  AgentPlayback,
445
461
  createAgentPlayback,
446
462
  createPlaybackToolProvider
@@ -80,10 +80,24 @@ function unionRects(rects) {
80
80
  const y = Math.min(...list.map((r) => r.y));
81
81
  return { x, y, width: Math.max(...list.map((r) => r.x + r.width)) - x, height: Math.max(...list.map((r) => r.y + r.height)) - y };
82
82
  }
83
+ function playbackRectFromClient(rect, fromViewport) {
84
+ if (!rect || !(rect.width > 0) || !(rect.height > 0)) return null;
85
+ const map = _nullishCoalesce(fromViewport, () => ( ((p) => p)));
86
+ const a = map({ x: rect.left, y: rect.top });
87
+ const b = map({ x: rect.left + rect.width, y: rect.top + rect.height });
88
+ return { x: Math.min(a.x, b.x), y: Math.min(a.y, b.y), width: Math.abs(b.x - a.x), height: Math.abs(b.y - a.y) };
89
+ }
90
+ function locatePlaybackChrome(ref, chrome, fromViewport) {
91
+ if (!chrome) return null;
92
+ const own = _optionalChain([chrome, 'access', _3 => _3.locate, 'optionalCall', _4 => _4(ref)]);
93
+ if (own) return own;
94
+ const el = _optionalChain([chrome, 'access', _5 => _5.locateElement, 'optionalCall', _6 => _6(ref)]);
95
+ return el ? playbackRectFromClient(el.getBoundingClientRect(), fromViewport) : null;
96
+ }
83
97
  function normalizePlan(plan) {
84
98
  if (!plan) return null;
85
99
  if (Array.isArray(plan)) return plan.length ? { steps: plan } : null;
86
- return _optionalChain([plan, 'access', _3 => _3.steps, 'optionalAccess', _4 => _4.length]) || plan.surface || plan.readOnly !== void 0 ? plan : null;
100
+ return _optionalChain([plan, 'access', _7 => _7.steps, 'optionalAccess', _8 => _8.length]) || plan.surface || plan.readOnly !== void 0 ? plan : null;
87
101
  }
88
102
  var isErrorResult = (value) => !!value && typeof value === "object" && value.isError === true;
89
103
  var center = (r) => ({ x: r.x + r.width / 2, y: r.y + r.height / 2 });
@@ -150,7 +164,7 @@ var AgentPlayback = (_class = class {
150
164
  say(text, options = {}) {
151
165
  const actor = this.actorState(options.actor);
152
166
  const surface = actor.surface ? this.surfaces.get(actor.surface) : void 0;
153
- if (!_optionalChain([surface, 'optionalAccess', _5 => _5.presence, 'access', _6 => _6.get, 'call', _7 => _7(actor.info.id)])) return null;
167
+ if (!_optionalChain([surface, 'optionalAccess', _9 => _9.presence, 'access', _10 => _10.get, 'call', _11 => _11(actor.info.id)])) return null;
154
168
  surface.presence.set({ id: actor.info.id, message: text });
155
169
  return actor.surface;
156
170
  }
@@ -170,7 +184,7 @@ var AgentPlayback = (_class = class {
170
184
  if (!actor) {
171
185
  actor = { info: { ...base, color: _nullishCoalesce(base.color, () => ( _chunkUJGAA6AKcjs.PRESENCE_COLORS[this.actors.size % _chunkUJGAA6AKcjs.PRESENCE_COLORS.length])) }, queue: Promise.resolve(), version: 0 };
172
186
  this.actors.set(base.id, actor);
173
- } else if (_optionalChain([info, 'optionalAccess', _8 => _8.name]) && info.name !== actor.info.name) actor.info = { ...actor.info, name: info.name };
187
+ } else if (_optionalChain([info, 'optionalAccess', _12 => _12.name]) && info.name !== actor.info.name) actor.info = { ...actor.info, name: info.name };
174
188
  return actor;
175
189
  }
176
190
  enqueue(actor, run) {
@@ -195,26 +209,26 @@ var AgentPlayback = (_class = class {
195
209
  if (tool.plan) {
196
210
  try {
197
211
  const state = {
198
- surfaceId: _nullishCoalesce(_optionalChain([fallback, 'optionalAccess', _9 => _9[0]]), () => ( null)),
199
- locate: (ref) => _nullishCoalesce(_optionalChain([fallback, 'optionalAccess', _10 => _10[1], 'access', _11 => _11.locate, 'optionalCall', _12 => _12(ref)]), () => ( null))
212
+ surfaceId: _nullishCoalesce(_optionalChain([fallback, 'optionalAccess', _13 => _13[0]]), () => ( null)),
213
+ locate: (ref) => _nullishCoalesce(_optionalChain([fallback, 'optionalAccess', _14 => _14[1], 'access', _15 => _15.locate, 'optionalCall', _16 => _16(ref)]), () => ( null))
200
214
  };
201
215
  planned = normalizePlan(tool.plan(call.args, state));
202
216
  } catch (e2) {
203
217
  planned = null;
204
218
  }
205
219
  }
206
- const readOnly = _nullishCoalesce(_optionalChain([planned, 'optionalAccess', _13 => _13.readOnly]), () => ( _optionalChain([tool, 'access', _14 => _14.annotations, 'optionalAccess', _15 => _15.readOnlyHint]) === true));
220
+ const readOnly = _nullishCoalesce(_optionalChain([planned, 'optionalAccess', _17 => _17.readOnly]), () => ( _optionalChain([tool, 'access', _18 => _18.annotations, 'optionalAccess', _19 => _19.readOnlyHint]) === true));
207
221
  if (readOnly && this.reads === "skip") return next();
208
- const found = this.surfaceFor(call.provider, _optionalChain([planned, 'optionalAccess', _16 => _16.surface]));
222
+ const found = this.surfaceFor(call.provider, _optionalChain([planned, 'optionalAccess', _20 => _20.surface]));
209
223
  if (!found) return next();
210
224
  const [surfaceId, surface] = found;
211
- const steps = _optionalChain([planned, 'optionalAccess', _17 => _17.steps, 'optionalAccess', _18 => _18.length]) ? planned.steps : derivePlaybackSteps(call.args, surface.defaultKind);
225
+ const steps = _optionalChain([planned, 'optionalAccess', _21 => _21.steps, 'optionalAccess', _22 => _22.length]) ? planned.steps : derivePlaybackSteps(call.args, surface.defaultKind);
212
226
  const glance = readOnly && this.reads === "glance";
213
227
  const played = glance ? steps.filter((s) => GLANCE_STEPS.has(s.type)) : steps;
214
228
  if (!played.some((s) => s.type !== "commit")) return next();
215
229
  return this.enqueue(actor, async () => {
216
230
  if (surface.visible && !surface.visible()) {
217
- await _optionalChain([surface, 'access', _19 => _19.reveal, 'optionalCall', _20 => _20()]);
231
+ await _optionalChain([surface, 'access', _23 => _23.reveal, 'optionalCall', _24 => _24()]);
218
232
  if (surface.visible && !surface.visible()) return next();
219
233
  }
220
234
  return this.play({ call, next, actor, surfaceId, surface, steps: played, readOnly, glance });
@@ -228,22 +242,22 @@ var AgentPlayback = (_class = class {
228
242
  const pace = () => Math.max(0.1, this.speed) * (run.glance ? 1.6 : 1);
229
243
  const wait = (ms) => instant() || ms <= 0 ? Promise.resolve() : this.clock.wait(ms / pace());
230
244
  const presence = surface.presence;
231
- const locate = (ref) => finiteRect(_nullishCoalesce(_optionalChain([surface, 'access', _21 => _21.locate, 'optionalCall', _22 => _22(ref.kind === "item" ? { kind: _nullishCoalesce(surface.defaultKind, () => ( "item")), id: ref.id } : ref)]), () => ( null)));
245
+ const locate = (ref) => finiteRect(_nullishCoalesce(_optionalChain([surface, 'access', _25 => _25.locate, 'optionalCall', _26 => _26(ref.kind === "item" ? { kind: _nullishCoalesce(surface.defaultKind, () => ( "item")), id: ref.id } : ref)]), () => ( null)));
232
246
  const record = (step) => {
233
247
  for (const list of this.recordings) list.push({ actor: id, surface: surfaceId, tool: call.name, step });
234
248
  };
235
249
  this.running++;
236
250
  if (this.running === 1) this.listeners.forEach((l) => l());
237
251
  try {
238
- if (actor.surface && actor.surface !== surfaceId) _optionalChain([this, 'access', _23 => _23.surfaces, 'access', _24 => _24.get, 'call', _25 => _25(actor.surface), 'optionalAccess', _26 => _26.presence, 'access', _27 => _27.remove, 'call', _28 => _28(id)]);
252
+ if (actor.surface && actor.surface !== surfaceId) _optionalChain([this, 'access', _27 => _27.surfaces, 'access', _28 => _28.get, 'call', _29 => _29(actor.surface), 'optionalAccess', _30 => _30.presence, 'access', _31 => _31.remove, 'call', _32 => _32(id)]);
239
253
  if (!presence.get(id)) {
240
- const bounds = _nullishCoalesce(_optionalChain([surface, 'access', _29 => _29.bounds, 'optionalCall', _30 => _30()]), () => ( null));
254
+ const bounds = _nullishCoalesce(_optionalChain([surface, 'access', _33 => _33.bounds, 'optionalCall', _34 => _34()]), () => ( null));
241
255
  let at = actor.viewport && surface.fromViewport ? surface.fromViewport(actor.viewport) : null;
242
256
  if (at && bounds) at = { x: Math.min(bounds.x + bounds.width, Math.max(bounds.x, at.x)), y: Math.min(bounds.y + bounds.height, Math.max(bounds.y, at.y)) };
243
257
  at ??= bounds ? { x: bounds.x + bounds.width - 48, y: bounds.y + 32 } : null;
244
258
  if (!at) {
245
259
  const first = run.steps.find((s) => s.type === "move" || s.type === "target" || s.type === "drag");
246
- const rect = _optionalChain([first, 'optionalAccess', _31 => _31.type]) === "target" ? locate(first.ref) : null;
260
+ const rect = _optionalChain([first, 'optionalAccess', _35 => _35.type]) === "target" ? locate(first.ref) : null;
247
261
  at = first && first.type !== "target" ? first.to : rect ? center(rect) : { x: 0, y: 0 };
248
262
  }
249
263
  presence.set({ id, name: _nullishCoalesce(actor.info.name, () => ( id)), color: actor.info.color, x: at.x, y: at.y, pressed: false });
@@ -251,7 +265,7 @@ var AgentPlayback = (_class = class {
251
265
  actor.surface = surfaceId;
252
266
  actor.version++;
253
267
  const argRefs = playbackRefsFromArgs(call.args, surface.defaultKind);
254
- if (!readOnly) _optionalChain([surface, 'access', _32 => _32.beginGesture, 'optionalCall', _33 => _33(`agent:${id}:${++this.calls}`)]);
268
+ if (!readOnly) _optionalChain([surface, 'access', _36 => _36.beginGesture, 'optionalCall', _37 => _37(`agent:${id}:${++this.calls}`)]);
255
269
  let result;
256
270
  let committed = false;
257
271
  try {
@@ -287,11 +301,11 @@ var AgentPlayback = (_class = class {
287
301
  await wait(900);
288
302
  throw error;
289
303
  } finally {
290
- if (!readOnly) _optionalChain([surface, 'access', _34 => _34.endGesture, 'optionalCall', _35 => _35()]);
304
+ if (!readOnly) _optionalChain([surface, 'access', _38 => _38.endGesture, 'optionalCall', _39 => _39()]);
291
305
  presence.set({ id, pressed: false });
292
306
  }
293
307
  if (isErrorResult(result)) {
294
- const text = _nullishCoalesce(_optionalChain([result, 'access', _36 => _36.content, 'optionalAccess', _37 => _37.find, 'call', _38 => _38((c) => c.type === "text"), 'optionalAccess', _39 => _39.text]), () => ( "The tool failed."));
308
+ const text = _nullishCoalesce(_optionalChain([result, 'access', _40 => _40.content, 'optionalAccess', _41 => _41.find, 'call', _42 => _42((c) => c.type === "text"), 'optionalAccess', _43 => _43.text]), () => ( "The tool failed."));
295
309
  presence.set({ id, message: `\u2717 ${text}`.slice(0, 140) });
296
310
  await wait(900);
297
311
  } else if (!readOnly) {
@@ -444,4 +458,6 @@ function createPlaybackToolProvider(playback, options = {}) {
444
458
 
445
459
 
446
460
 
447
- exports.playbackRefsFromArgs = playbackRefsFromArgs; exports.playbackRefsFromResult = playbackRefsFromResult; exports.derivePlaybackSteps = derivePlaybackSteps; exports.readingTime = readingTime; exports.unionRects = unionRects; exports.AgentPlayback = AgentPlayback; exports.createAgentPlayback = createAgentPlayback; exports.createPlaybackToolProvider = createPlaybackToolProvider;
461
+
462
+
463
+ exports.playbackRefsFromArgs = playbackRefsFromArgs; exports.playbackRefsFromResult = playbackRefsFromResult; exports.derivePlaybackSteps = derivePlaybackSteps; exports.readingTime = readingTime; exports.unionRects = unionRects; exports.playbackRectFromClient = playbackRectFromClient; exports.locatePlaybackChrome = locatePlaybackChrome; exports.AgentPlayback = AgentPlayback; exports.createAgentPlayback = createAgentPlayback; exports.createPlaybackToolProvider = createPlaybackToolProvider;
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  readingTime
3
- } from "./chunk-HUHBJWTD.js";
3
+ } from "./chunk-3EVMUYF4.js";
4
4
 
5
5
  // src/tools/script.ts
6
6
  function toolResultValue(result) {
@@ -1,6 +1,6 @@
1
1
  "use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _nullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } } function _optionalChain(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }
2
2
 
3
- var _chunkD2ENR3LBcjs = require('./chunk-D2ENR3LB.cjs');
3
+ var _chunkFR7GHH2Kcjs = require('./chunk-FR7GHH2K.cjs');
4
4
 
5
5
  // src/tools/script.ts
6
6
  function toolResultValue(result) {
@@ -36,7 +36,7 @@ async function runToolScript(source, script, options = {}) {
36
36
  if (step.say) {
37
37
  emit({ type: "say", step: i, text: step.say });
38
38
  _optionalChain([options, 'access', _6 => _6.playback, 'optionalAccess', _7 => _7.say, 'call', _8 => _8(step.say, options.actor ? { actor: options.actor } : {})]);
39
- await pause(_chunkD2ENR3LBcjs.readingTime.call(void 0, step.say));
39
+ await pause(_chunkFR7GHH2Kcjs.readingTime.call(void 0, step.say));
40
40
  }
41
41
  if (!step.tool) continue;
42
42
  if (control.stopped) return finish(false);
@@ -29,7 +29,7 @@ var _chunkGLQQ2VILcjs = require('../chunk-GLQQ2VIL.cjs');
29
29
  var _chunk4EFNS2HVcjs = require('../chunk-4EFNS2HV.cjs');
30
30
 
31
31
 
32
- var _chunkD2ENR3LBcjs = require('../chunk-D2ENR3LB.cjs');
32
+ var _chunkFR7GHH2Kcjs = require('../chunk-FR7GHH2K.cjs');
33
33
  require('../chunk-UJGAA6AK.cjs');
34
34
 
35
35
 
@@ -608,7 +608,7 @@ function createCommandToolProvider(registry, options = {}) {
608
608
  const surface = _nullishCoalesce(_nullishCoalesce(spec.playbackSurface, () => ( spec.scope)), () => ( (id.includes(".") ? id.slice(0, id.indexOf(".")) : void 0)));
609
609
  const planned = _optionalChain([spec, 'access', _24 => _24.plan, 'optionalCall', _25 => _25(context(), _nullishCoalesce(params, () => ( {})))]);
610
610
  const own = !planned ? [] : Array.isArray(planned) ? planned : planned.steps;
611
- const steps = own.length ? own : _chunkD2ENR3LBcjs.derivePlaybackSteps.call(void 0, params);
611
+ const steps = own.length ? own : _chunkFR7GHH2Kcjs.derivePlaybackSteps.call(void 0, params);
612
612
  return {
613
613
  steps,
614
614
  ...surface ? { surface } : {},
@@ -29,7 +29,7 @@ import {
29
29
  } from "../chunk-7KZ2HKKC.js";
30
30
  import {
31
31
  derivePlaybackSteps
32
- } from "../chunk-HUHBJWTD.js";
32
+ } from "../chunk-3EVMUYF4.js";
33
33
  import "../chunk-PEEP2YR7.js";
34
34
  import {
35
35
  validateJsonSchema
@@ -0,0 +1,25 @@
1
+ /**
2
+ * Generic effect authoring session: controls values, keyframes, presets, timing, undo/redo
3
+ * and preview rendering for any effect provider.
4
+ */
5
+ import { HistoryManager } from '../history/HistoryManager.cjs';
6
+ import type { EffectAuthoringSession, EffectAuthoringSource } from './authoring.cjs';
7
+ import type { EffectProvider } from './types.cjs';
8
+ export interface GenericAuthoringOptions {
9
+ /** The provider whose `describe` and `createRenderer` the session uses. */
10
+ provider: EffectProvider;
11
+ /** Undo history to record into (default: a new HistoryManager). */
12
+ history?: HistoryManager;
13
+ /**
14
+ * Time source for playback: called with a frame callback, returns a cancel function.
15
+ * Default: requestAnimationFrame where it exists, else a 16 ms timer. Tests pass a manual one.
16
+ */
17
+ schedule?: (frame: (now: number) => void) => () => void;
18
+ /** Ms within which `setValue` calls on one control with no gesture merge (default 400). */
19
+ mergeWindowMs?: number;
20
+ }
21
+ /**
22
+ * Creates an effect authoring session with values, presets, keyframes, timing and undo
23
+ * over any provider. It has no source editing (`sourceLanguage: null`).
24
+ */
25
+ export declare function createEffectAuthoringSession(source: EffectAuthoringSource, options: GenericAuthoringOptions): Promise<EffectAuthoringSession>;
@@ -0,0 +1,25 @@
1
+ /**
2
+ * Generic effect authoring session: controls values, keyframes, presets, timing, undo/redo
3
+ * and preview rendering for any effect provider.
4
+ */
5
+ import { HistoryManager } from '../history/HistoryManager.js';
6
+ import type { EffectAuthoringSession, EffectAuthoringSource } from './authoring.js';
7
+ import type { EffectProvider } from './types.js';
8
+ export interface GenericAuthoringOptions {
9
+ /** The provider whose `describe` and `createRenderer` the session uses. */
10
+ provider: EffectProvider;
11
+ /** Undo history to record into (default: a new HistoryManager). */
12
+ history?: HistoryManager;
13
+ /**
14
+ * Time source for playback: called with a frame callback, returns a cancel function.
15
+ * Default: requestAnimationFrame where it exists, else a 16 ms timer. Tests pass a manual one.
16
+ */
17
+ schedule?: (frame: (now: number) => void) => () => void;
18
+ /** Ms within which `setValue` calls on one control with no gesture merge (default 400). */
19
+ mergeWindowMs?: number;
20
+ }
21
+ /**
22
+ * Creates an effect authoring session with values, presets, keyframes, timing and undo
23
+ * over any provider. It has no source editing (`sourceLanguage: null`).
24
+ */
25
+ export declare function createEffectAuthoringSession(source: EffectAuthoringSource, options: GenericAuthoringOptions): Promise<EffectAuthoringSession>;