@pinepaper.studio/mcp-server 1.6.6 → 1.6.7

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 (55) hide show
  1. package/README.de.md +20 -1
  2. package/README.es.md +20 -1
  3. package/README.fr.md +20 -1
  4. package/README.hi.md +18 -1
  5. package/README.ja.md +19 -1
  6. package/README.ko.md +18 -1
  7. package/README.md +166 -5
  8. package/README.pt-BR.md +20 -1
  9. package/README.zh-CN.md +18 -1
  10. package/assets/edit-whenever.svg +75 -0
  11. package/dist/agent/export-manager.d.ts.map +1 -1
  12. package/dist/agent/export-manager.js +2 -2
  13. package/dist/agent/export-manager.js.map +1 -1
  14. package/dist/agent/session-manager.d.ts.map +1 -1
  15. package/dist/agent/session-manager.js.map +1 -1
  16. package/dist/assets/repositories/fontawesome.d.ts.map +1 -1
  17. package/dist/assets/repositories/fontawesome.js.map +1 -1
  18. package/dist/assets/repositories/openclipart.d.ts.map +1 -1
  19. package/dist/index.d.ts.map +1 -1
  20. package/dist/index.js +0 -1
  21. package/dist/index.js.map +1 -1
  22. package/dist/ontology/design-graph.d.ts.map +1 -1
  23. package/dist/ontology/design-graph.js +0 -1
  24. package/dist/ontology/design-graph.js.map +1 -1
  25. package/dist/ontology/vocabulary.d.ts.map +1 -1
  26. package/dist/ontology/vocabulary.js +119 -0
  27. package/dist/ontology/vocabulary.js.map +1 -1
  28. package/dist/taxonomy/classifier.js +1 -1
  29. package/dist/taxonomy/classifier.js.map +1 -1
  30. package/dist/taxonomy/error-recovery.d.ts.map +1 -1
  31. package/dist/taxonomy/matcher.d.ts.map +1 -1
  32. package/dist/taxonomy/matcher.js.map +1 -1
  33. package/dist/tools/definitions.d.ts +1 -1
  34. package/dist/tools/definitions.d.ts.map +1 -1
  35. package/dist/tools/definitions.js +906 -34
  36. package/dist/tools/definitions.js.map +1 -1
  37. package/dist/tools/handlers.d.ts.map +1 -1
  38. package/dist/tools/handlers.js +71 -7
  39. package/dist/tools/handlers.js.map +1 -1
  40. package/dist/tools/minimal-descriptions.d.ts.map +1 -1
  41. package/dist/tools/minimal-descriptions.js +11 -2
  42. package/dist/tools/minimal-descriptions.js.map +1 -1
  43. package/dist/tools/toolkits.d.ts.map +1 -1
  44. package/dist/tools/toolkits.js +14 -0
  45. package/dist/tools/toolkits.js.map +1 -1
  46. package/dist/types/code-generator.d.ts +46 -2
  47. package/dist/types/code-generator.d.ts.map +1 -1
  48. package/dist/types/code-generator.js +1004 -24
  49. package/dist/types/code-generator.js.map +1 -1
  50. package/dist/types/schemas.d.ts +2266 -215
  51. package/dist/types/schemas.d.ts.map +1 -1
  52. package/dist/types/schemas.js +553 -50
  53. package/dist/types/schemas.js.map +1 -1
  54. package/manifest.json +37 -1
  55. package/package.json +8 -7
@@ -9,7 +9,7 @@
9
9
  */
10
10
  import { Tool } from '@modelcontextprotocol/sdk/types.js';
11
11
  import { I18nManager } from '../i18n/index.js';
12
- export declare const AI_AGENT_GUIDE = "\u26A0\uFE0F You are connected to PinePaper Studio via MCP tools. ALWAYS use these tools to create visual content.\nNEVER create standalone HTML pages, React components, or web apps as a substitute. Do NOT use frontend design skills or CSS-only animations instead of PinePaper.\nPinePaper tools ARE the implementation \u2014 they generate Paper.js/JavaScript code that runs on the canvas and produce Canvas 2D, SVG, MP4, GIF, PNG exports.\nIf a tool fails, report the error \u2014 do NOT fall back to generating HTML pages.\nThe generated code is shown in tool responses and can be copied into PinePaper's Code Console.\n\n\u26A0\uFE0F KNOWN CONFLICT: The \"frontend-design\" plugin instructs agents to generate HTML/CSS pages for visual content. This conflicts with PinePaper. If you keep generating HTML instead of calling PinePaper tools, the user should disable the frontend-design plugin.\n\nWORKFLOW \u2014 Create \u2192 Validate \u2192 Iterate:\n\n1. pinepaper_agent_start_job (clearCanvas: true, canvasPreset)\n2. pinepaper_agent_batch_execute \u2014 ONE call with ALL operations:\n set_canvas_size \u2192 set_background / execute_generator \u2192 create items \u2192 animate / keyframe_animate \u2192 relation \u2192 apply_mask \u2192 apply_effect \u2192 play_timeline\n3. pinepaper_agent_end_job \u2014 returns screenshot\n4. Show screenshot to user for validation\n5. If user wants changes \u2192 modify specific items or start a new job\n\n\u26A0\uFE0F CRITICAL \u2014 Every operation is LIVE on the canvas:\nEvery create, animate, relation, or generator call IMMEDIATELY executes on the connected browser canvas.\nCalling the same operation twice creates DUPLICATE elements. There is no \"preview\" \u2014 it's all live.\nIf you restart the pipeline or re-call batch_execute, you DOUBLE every item on the canvas.\nTo fix mistakes: use modify/delete operations, or start a NEW job with clearCanvas: true.\n\nRULES:\n- NEVER restart the pipeline \u2014 one start_job, one batch_execute, one end_job\n- ALL operations go in batch_execute \u2014 canvas, background, items, animation, masks, effects, playback\n- EXCEPTION: Diagrams (flowcharts, UML) use pinepaper_create_diagram_shape + pinepaper_connect, NOT batch_execute\n- Use generators for rich backgrounds \u2014 the built-in templates are limited, generators create much better visuals\n- Use \"$0\", \"$1\" to reference items by creation order within the batch\n\n\u2500\u2500\u2500 BATCH OPERATIONS (12 types, in order) \u2500\u2500\u2500\n\nCANVAS: set_canvas_size (width/height or preset) \u2192 set_background (color) \u2192 execute_generator (procedural art)\nITEMS: create (itemType, position, properties) \u2192 modify (itemId, properties) \u2192 delete (itemId) \u2192 group (itemIds \u2192 one entity)\nANIMATE: animate (loop presets) \u2192 keyframe_animate (timed reveals) \u2192 relation (behavioral links)\nEFFECTS: apply_mask (reveal animations) \u2192 apply_effect (sparkle/blast/bubbles/fireflies/trail...)\nPLAY: play_timeline (start playback)\n\n\u2500\u2500\u2500 GENERATORS (prefer these for backgrounds) \u2500\u2500\u2500\n\nGenerators fill the canvas with procedural art \u2014 much richer than solid colors.\nChoose based on mood:\n Dreamy/soft: drawBokeh, drawGradientMesh, drawOrganicFlow\n Techy/modern: drawCircuit, drawGrid, drawWindField\n Nature/warm: drawSunsetScene, drawSunburst, drawWaves\n Abstract: drawGeometricAbstract, drawFluidFlow, drawNoiseTexture\n Decorative: drawPattern, drawStackedCircles\n\n\u2500\u2500\u2500 ITEMS \u2500\u2500\u2500\n\nShapes: circle, rectangle, star, ellipse, triangle, polygon, line, arc, path, pentagon, hexagon, diamond, arrow, heart\nText: text (content, fontSize, fontFamily, color, fontWeight)\n Dynamic text: set contentType on text items \u2192 clock (live time), timer (elapsed), countdown (from N seconds), stopwatch (pauseable)\nAll items: opacity, shadowColor, shadowBlur, blendMode, strokeColor, strokeWidth\n\nSVG imports for recognizable objects (planes, cars, animals, buildings):\n pinepaper_search_assets \u2192 pinepaper_import_asset (850k+ SVG icons)\n An imported SVG is ONE opaque item. To move/recolor its parts (a wheel, a window), pinepaper_group action:\"break_apart\" splits it into individually movable, re-grouped sub-parts.\n\nPhotos / raster images (on-device, no upload):\n pinepaper_detect_objects \u2014 find objects (labeled boxes), or asNodes:true to promote each to an image-anchored design NODE (pp:Detected*) you can bind a shape to with a relation (relational compositing \u2014 e.g. a hat that follows a detected person as the photo moves).\n pinepaper_extract_object \u2014 crop the best-matching object (label: \"cat\") out of a photo into its own item.\n\n\u26A0\uFE0F COMPOSITE OBJECTS \u2014 GROUP THE PARTS:\n When the user asks for ONE specific named object built from multiple primitives \u2014 a car (body + wheels + windows), a robot, a house, a tree, a snowman, a character \u2014 the pieces are INDEPENDENT until grouped. Without grouping, dragging the \"car\" only moves the piece grabbed; the wheels stay behind, and it can't be moved/animated as one thing.\n \u2192 After creating the parts, add a \"group\" op listing them (reference batch-created parts as \"$0\",\"$1\",\u2026). This is the default for any nameable object. Grouping is non-destructive \u2014 the user can ungroup anytime (pinepaper_group action:\"ungroup\"), so grouping is always the safe choice.\n \u2192 Do NOT group a whole scene/infographic whose elements move independently \u2014 only group the parts that form ONE object. A scene may contain several groups (e.g. two separate cars).\n\n\u26A0\uFE0F MOVE vs ANIMATE \u2014 pick the tool from the user's intent:\n \u2022 Reposition (no time, no path): \"put X at (x',y')\", \"move X to the corner\" \u2192 modify { x, y }. A single, instant position change \u2014 NOT an animation.\n \u2022 Animated A\u2192B move (\"animate X moving to (x',y')\", \"slide it over 2s\", \"have it drift to the corner\") \u2192 keyframe_animate with two keyframes: [{time:0, properties:{x,y}}, {time:T, properties:{x',y'}}]. Use this when the user wants the motion itself to be visible.\n \u2022 Follow a multi-point PATH (the user lists several coordinates, or \"make X follow this path / trace these points (x1,y1),(x2,y2),\u2026\") \u2192 relation moves_along_path with params.path = [{x,y},\u2026] (speed, closed, easing optional). One coordinate list = one path-follow, not N separate moves.\n When the request is ambiguous between a static move and an animated one, a one-shot reposition is the literal reading; only animate if motion/timing/path is implied.\n\n\u2500\u2500\u2500 ANIMATION (all in batch) \u2500\u2500\u2500\n\nLoop presets (animate): pulse, rotate, bounce, fade, wobble, slide, typewriter\nKeyframe (keyframe_animate): [{time, properties, easing}] \u2192 opacity, scale, scaleX, scaleY, x, y, rotation, fillColor, strokeColor, fontSize\nRelations (relation): orbits, follows, attached_to, points_at, mirrors, parallax, wave_through, morphs_to, group_morphs_to, moves_along_path, is_midpoint_of, is_circumcenter_of, construction_reveal (+ geometric constraints & more in batch_execute schema)\nMasks (apply_mask): wipeLeft, wipeRight, wipeUp, wipeDown, iris, irisOut, star, heart, curtainHorizontal, curtainVertical, cinematic, diagonalWipe, revealUp, revealDown\nEffects (apply_effect): sparkle, blast\n\nComposability: one item can have loop + keyframe + relation + mask simultaneously.\n\nTiming templates (stagger reveals across duration):\n 5s: bg 0s \u2192 elements 1-2s \u2192 text 2.5-3.5s \u2192 final 4-5s\n 10s: bg 0-1s \u2192 elements 1-4s \u2192 main 4-7s \u2192 details 7-9s \u2192 finale 9-10s\n\n\u2500\u2500\u2500 VISUAL COMPOSITION \u2500\u2500\u2500\n\nLayer order: background \u2192 large shapes (low opacity) \u2192 main subjects \u2192 text on top\nColor: dark bg (#0f172a) + bright accents (#f472b6, #818cf8, #fbbf24)\nScale: main subject 40-60% of canvas, supporting elements smaller\nSpacing: distribute across canvas with breathing room, don't cluster\n\n\u26A0\uFE0F SIZING \u2014 All positions and sizes MUST fit within the canvas:\n Default canvas is 800x600. For infographics/social media, SET A PRESET FIRST.\n start_job returns canvasSize \u2014 use it to calculate positions.\n Keep all items within 5%-95% of canvas width/height (leave margins).\n Font sizes relative to canvas: titles \u2264 5% of canvas width, body \u2264 3%.\n Example for 1080x1080: title fontSize \u2264 54, body \u2264 32, positions 54-1026.\n Example for 800x600: title fontSize \u2264 40, body \u2264 24, positions 40-760.\n\n\u26A0\uFE0F TEXT OVERLAP \u2014 NEVER place multiple text items at the same position:\n Each text item MUST have a unique Y position. Stack vertically with spacing \u2265 fontSize \u00D7 1.4.\n For N words stacked vertically: startY = centerY - (N-1) \u00D7 spacing / 2, then increment Y by spacing.\n Example for 5 words at fontSize 48 on 800x600: spacing=67, startY=166, positions: 166, 233, 300, 367, 434.\n\n\u2500\u2500\u2500 DIAGRAMS (flowcharts, UML \u2014 do NOT use batch_execute) \u2500\u2500\u2500\n\nDiagrams use their own tools, not batch_execute:\n pinepaper_create_diagram_shape \u2192 pinepaper_connect \u2192 pinepaper_auto_layout\nShapes: process (rect), decision (diamond), terminal (rounded), data, document, database, cloud, server\nWorkflow: create shapes with positions \u2192 connect with arrows \u2192 optional auto_layout\nSee pinepaper://docs/diagrams for full examples.\n\n\u2500\u2500\u2500 STANDALONE TOOLS (not batch \u2014 call directly) \u2500\u2500\u2500\n\nDeformation: pinepaper_deform \u2014 vertex-level presets (fold, squeeze, twist, ripple, wave, breathe, wobble...)\n Phase-driven animation: sin, blink, pingpong, elastic, heartbeat, stepped\n Use for organic motion that keyframes can't achieve.\n\nSprite Sheets: pinepaper_sprite_sheet \u2014 generate from skeleton poses, play, export (PNG + atlas)\n For character animation and game sprite pipelines.\n\nInteraction: pinepaper_interaction \u2014 continuous physics behaviors (repel, attract, follow, orbit, slingshot)\n For interactive storytelling, quizzes, games. trigger_action for state changes (incrementScore, navigate, showFeedback).\n\nData Viz: pinepaper_create_chart \u2014 create/update/reconfigure/remove charts (bar, line, scatter, area)\n Pass data as array of objects + options. Auto-animated with expression-driven oscillation.\n\nMagic: pinepaper_magic \u2014 ontology-aware auto-animation + style remix\n One-click animate (mood: calm/professional/energetic/dramatic/whimsical) or remix (cycle colors/fonts).\n\nPhysics: pinepaper_physics \u2014 rigid body simulation (init, add_body, apply_force, create_joint)\n For interactive simulations, gravity, collisions. Based on Box2D/Planck.js.\n\nMeasurement: pinepaper_measurement \u2014 rulers, grid, snap-to-grid, get item dimensions\n For precise layouts and alignment.\n\n\u2500\u2500\u2500 CANVAS & EXPORT \u2500\u2500\u2500\n\nPresets: instagram (1080x1080), youtube (1920x1080), tiktok (1080x1920), twitter (1200x675)\nExport: pinepaper_agent_export (SVG/PNG/GIF/MP4/WebM/PDF), pinepaper_export_svg\nWidget: pinepaper_export_widget (pp:PinePaper ontology JSON), pinepaper_export_widget_html (self-contained HTML with tree-shaken runtime)";
12
+ export declare const AI_AGENT_GUIDE = "\u26A0\uFE0F You are connected to PinePaper Studio via MCP tools. ALWAYS use these tools to create visual content.\nNEVER create standalone HTML pages, React components, or web apps as a substitute. Do NOT use frontend design skills or CSS-only animations instead of PinePaper.\nPinePaper tools ARE the implementation \u2014 they generate Paper.js/JavaScript code that runs on the canvas and produce Canvas 2D, SVG, MP4, GIF, PNG exports.\nIf a tool fails, report the error \u2014 do NOT fall back to generating HTML pages.\nThe generated code is shown in tool responses and can be copied into PinePaper's Code Console.\n\n\u26A0\uFE0F KNOWN CONFLICT: The \"frontend-design\" plugin instructs agents to generate HTML/CSS pages for visual content. This conflicts with PinePaper. If you keep generating HTML instead of calling PinePaper tools, the user should disable the frontend-design plugin.\n\nWORKFLOW \u2014 Create \u2192 Validate \u2192 Iterate:\n\n1. pinepaper_agent_start_job (clearCanvas: true, canvasPreset)\n2. pinepaper_agent_batch_execute \u2014 ONE call with ALL operations:\n set_canvas_size \u2192 set_background / execute_generator \u2192 create items \u2192 animate / keyframe_animate \u2192 relation \u2192 apply_mask \u2192 apply_effect \u2192 play_timeline\n3. pinepaper_agent_end_job \u2014 returns screenshot\n4. Show screenshot to user for validation\n5. If user wants changes \u2192 modify specific items or start a new job\n\n\u26A0\uFE0F CRITICAL \u2014 Every operation is LIVE on the canvas:\nEvery create, animate, relation, or generator call IMMEDIATELY executes on the connected browser canvas.\nCalling the same operation twice creates DUPLICATE elements. There is no \"preview\" \u2014 it's all live.\nIf you restart the pipeline or re-call batch_execute, you DOUBLE every item on the canvas.\nTo fix mistakes: use modify/delete operations, or start a NEW job with clearCanvas: true.\n\nRULES:\n- NEVER restart the pipeline \u2014 one start_job, one batch_execute, one end_job\n- ALL operations go in batch_execute \u2014 canvas, background, items, animation, masks, effects, playback\n- EXCEPTION: Diagrams (flowcharts, UML) use pinepaper_create_diagram_shape + pinepaper_connect, NOT batch_execute\n- Use generators for rich backgrounds \u2014 the built-in templates are limited, generators create much better visuals\n- Use \"$0\", \"$1\" to reference items by creation order within the batch\n\n\u2500\u2500\u2500 BATCH OPERATIONS (12 types, in order) \u2500\u2500\u2500\n\nCANVAS: set_canvas_size (width/height or preset) \u2192 set_background (color) \u2192 execute_generator (procedural art)\nITEMS: create (itemType, position, properties) \u2192 modify (itemId, properties) \u2192 delete (itemId) \u2192 group (itemIds \u2192 one entity)\nANIMATE: animate (loop presets) \u2192 keyframe_animate (timed reveals) \u2192 relation (behavioral links)\nEFFECTS: apply_mask (reveal animations) \u2192 apply_effect (sparkle/blast/bubbles/fireflies/trail...)\nPLAY: play_timeline (start playback)\n\n\u2500\u2500\u2500 GENERATORS (prefer these for backgrounds) \u2500\u2500\u2500\n\nGenerators fill the canvas with procedural art \u2014 much richer than solid colors.\nChoose based on mood:\n Dreamy/soft: drawBokeh, drawGradientMesh, drawOrganicFlow\n Techy/modern: drawCircuit, drawGrid, drawWindField\n Nature/warm: drawSunsetScene, drawSunburst, drawWaves\n Abstract: drawGeometricAbstract, drawFluidFlow, drawNoiseTexture\n Decorative: drawPattern, drawStackedCircles\n\n\u2500\u2500\u2500 ITEMS \u2500\u2500\u2500\n\nShapes: circle, rectangle, star, ellipse, triangle, polygon, line, arc, path, pentagon, hexagon, diamond, arrow, heart\nSurfaces (render-time, evaluated per pixel \u2014 not shapes): shader, field\n shader: a lit surface \u2014 water, liquid_metal, heatmap, gem_smoke. Set behind:true to put it UNDER the art, which is what scenery wants.\n field: one expression, many marks \u2014 xExpr/yExpr/count, re-evaluated every frame against t.\n Both draw fully in a cloud render; locally they stand in as a flat plate.\nText: text (content, fontSize, fontFamily, color, fontWeight)\n Dynamic text: set contentType on text items \u2192 clock (live time), timer (elapsed), countdown (from N seconds), stopwatch (pauseable)\nAll items: opacity, shadowColor, shadowBlur, blendMode, strokeColor, strokeWidth\n\nSVG imports for recognizable objects (planes, cars, animals, buildings):\n pinepaper_search_assets \u2192 pinepaper_import_asset (850k+ SVG icons)\n An imported SVG is ONE opaque item. To move/recolor its parts (a wheel, a window), pinepaper_group action:\"break_apart\" splits it into individually movable, re-grouped sub-parts.\n\nPhotos / raster images (on-device, no upload):\n pinepaper_detect_objects \u2014 find objects (labeled boxes), or asNodes:true to promote each to an image-anchored design NODE (pp:Detected*) you can bind a shape to with a relation (relational compositing \u2014 e.g. a hat that follows a detected person as the photo moves).\n pinepaper_extract_object \u2014 crop the best-matching object (label: \"cat\") out of a photo into its own item.\n\n\u26A0\uFE0F COMPOSITE OBJECTS \u2014 GROUP THE PARTS:\n When the user asks for ONE specific named object built from multiple primitives \u2014 a car (body + wheels + windows), a robot, a house, a tree, a snowman, a character \u2014 the pieces are INDEPENDENT until grouped. Without grouping, dragging the \"car\" only moves the piece grabbed; the wheels stay behind, and it can't be moved/animated as one thing.\n \u2192 After creating the parts, add a \"group\" op listing them (reference batch-created parts as \"$0\",\"$1\",\u2026). This is the default for any nameable object. Grouping is non-destructive \u2014 the user can ungroup anytime (pinepaper_group action:\"ungroup\"), so grouping is always the safe choice.\n \u2192 Do NOT group a whole scene/infographic whose elements move independently \u2014 only group the parts that form ONE object. A scene may contain several groups (e.g. two separate cars).\n\n\u26A0\uFE0F MOVE vs ANIMATE \u2014 pick the tool from the user's intent:\n \u2022 Reposition (no time, no path): \"put X at (x',y')\", \"move X to the corner\" \u2192 modify { x, y }. A single, instant position change \u2014 NOT an animation.\n \u2022 Animated A\u2192B move (\"animate X moving to (x',y')\", \"slide it over 2s\", \"have it drift to the corner\") \u2192 keyframe_animate with two keyframes: [{time:0, properties:{x,y}}, {time:T, properties:{x',y'}}]. Use this when the user wants the motion itself to be visible.\n \u2022 Follow a multi-point PATH (the user lists several coordinates, or \"make X follow this path / trace these points (x1,y1),(x2,y2),\u2026\") \u2192 relation moves_along_path with params.path = [{x,y},\u2026] (speed, closed, easing optional). One coordinate list = one path-follow, not N separate moves.\n When the request is ambiguous between a static move and an animated one, a one-shot reposition is the literal reading; only animate if motion/timing/path is implied.\n\n\u2500\u2500\u2500 ANIMATION (all in batch) \u2500\u2500\u2500\n\nLoop presets (animate): bounce, breathe, fade, glow, jelly, path, pulse, rotate, scrollDown, scrollLeft, scrollRight, scrollUp, shake, slideLeftRight, slideUpDown, swing, typewriter, wobble\nKeyframe (keyframe_animate): [{time, properties, easing}] \u2192 opacity, scale, scaleX, scaleY, x, y, rotation, fillColor, strokeColor, fontSize\nRelations (relation): orbits, follows, attached_to, points_at, mirrors, parallax, wave_through, morphs_to, group_morphs_to, moves_along_path, is_midpoint_of, is_circumcenter_of, construction_reveal (+ geometric constraints & more in batch_execute schema)\nMasks (apply_mask): wipeLeft, wipeRight, wipeUp, wipeDown, iris, irisOut, star, heart, curtainHorizontal, curtainVertical, cinematic, diagonalWipe, revealUp, revealDown\nEffects (apply_effect): sparkle, blast\n\nComposability: one item can have loop + keyframe + relation + mask simultaneously.\n\nTiming templates (stagger reveals across duration):\n 5s: bg 0s \u2192 elements 1-2s \u2192 text 2.5-3.5s \u2192 final 4-5s\n 10s: bg 0-1s \u2192 elements 1-4s \u2192 main 4-7s \u2192 details 7-9s \u2192 finale 9-10s\n\n\u2500\u2500\u2500 VISUAL COMPOSITION \u2500\u2500\u2500\n\nLayer order: background \u2192 large shapes (low opacity) \u2192 main subjects \u2192 text on top\nColor: dark bg (#0f172a) + bright accents (#f472b6, #818cf8, #fbbf24)\nScale: main subject 40-60% of canvas, supporting elements smaller\nSpacing: distribute across canvas with breathing room, don't cluster\n\n\u26A0\uFE0F SIZING \u2014 All positions and sizes MUST fit within the canvas:\n Default canvas is 800x600. For infographics/social media, SET A PRESET FIRST.\n start_job returns canvasSize \u2014 use it to calculate positions.\n Keep all items within 5%-95% of canvas width/height (leave margins).\n Font sizes relative to canvas: titles \u2264 5% of canvas width, body \u2264 3%.\n Example for 1080x1080: title fontSize \u2264 54, body \u2264 32, positions 54-1026.\n Example for 800x600: title fontSize \u2264 40, body \u2264 24, positions 40-760.\n\n\u26A0\uFE0F TEXT OVERLAP \u2014 NEVER place multiple text items at the same position:\n Each text item MUST have a unique Y position. Stack vertically with spacing \u2265 fontSize \u00D7 1.4.\n For N words stacked vertically: startY = centerY - (N-1) \u00D7 spacing / 2, then increment Y by spacing.\n Example for 5 words at fontSize 48 on 800x600: spacing=67, startY=166, positions: 166, 233, 300, 367, 434.\n\n\u2500\u2500\u2500 DIAGRAMS (flowcharts, UML \u2014 do NOT use batch_execute) \u2500\u2500\u2500\n\nDiagrams use their own tools, not batch_execute:\n pinepaper_create_diagram_shape \u2192 pinepaper_connect \u2192 pinepaper_auto_layout\nShapes: process (rect), decision (diamond), terminal (rounded), data, document, database, cloud, server\nWorkflow: create shapes with positions \u2192 connect with arrows \u2192 optional auto_layout\nSee pinepaper://docs/diagrams for full examples.\n\n\u2500\u2500\u2500 STANDALONE TOOLS (not batch \u2014 call directly) \u2500\u2500\u2500\n\nDeformation: pinepaper_deform \u2014 vertex-level presets (fold, squeeze, twist, ripple, wave, breathe, wobble...)\n Phase-driven animation: sin, blink, pingpong, elastic, heartbeat, stepped\n Use for organic motion that keyframes can't achieve.\n\nSprite Sheets: pinepaper_sprite_sheet \u2014 generate from skeleton poses, play, export (PNG + atlas)\n For character animation and game sprite pipelines.\n\nInteraction: pinepaper_interaction \u2014 continuous physics behaviors (repel, attract, follow, orbit, slingshot)\n For interactive storytelling, quizzes, games. trigger_action for state changes (incrementScore, navigate, showFeedback).\n\nData Viz: pinepaper_create_chart \u2014 create/update/reconfigure/remove charts (bar, line, scatter, area)\n Pass data as array of objects + options. Auto-animated with expression-driven oscillation.\n\nMagic: pinepaper_magic \u2014 ontology-aware auto-animation + style remix\n One-click animate (mood: calm/professional/energetic/dramatic/whimsical) or remix (cycle colors/fonts).\n\nPhysics: pinepaper_physics \u2014 rigid body simulation (init, add_body, apply_force, create_joint)\n For interactive simulations, gravity, collisions. Based on Box2D/Planck.js.\n\nMeasurement: pinepaper_measurement \u2014 rulers, grid, snap-to-grid, get item dimensions\n For precise layouts and alignment.\n\n\u2500\u2500\u2500 CANVAS & EXPORT \u2500\u2500\u2500\n\nPresets: instagram (1080x1080), youtube (1920x1080), tiktok (1080x1920), twitter (1200x675)\nExport: pinepaper_agent_export (SVG/PNG/GIF/MP4/WebM/PDF), pinepaper_export_svg\nWidget: pinepaper_export_widget (pp:PinePaper ontology JSON), pinepaper_export_widget_html (self-contained HTML with tree-shaken runtime)";
13
13
  export declare const PINEPAPER_TOOLS: Tool[];
14
14
  /**
15
15
  * Get a tool definition by name
@@ -1 +1 @@
1
- {"version":3,"file":"definitions.d.ts","sourceRoot":"","sources":["../../src/tools/definitions.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,IAAI,EAAE,MAAM,oCAAoC,CAAC;AAC1D,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAuB/C,eAAO,MAAM,cAAc,gqWAgJ+G,CAAC;AAW3I,eAAO,MAAM,eAAe,EAAE,IAAI,EA2/NjC,CAAC;AAEF;;GAEG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAE5D;AAED;;GAEG;AACH,wBAAgB,YAAY,IAAI,MAAM,EAAE,CAEvC;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,WAAW,GAAG,IAAI,EAAE,CAO3D;AAED;;;;;GAKG;AACH,MAAM,MAAM,aAAa,GAAG,SAAS,GAAG,SAAS,GAAG,SAAS,CAAC;AAE9D;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,SAAS,EAAE,aAAa,GAAG,IAAI,EAAE,CAQrE"}
1
+ {"version":3,"file":"definitions.d.ts","sourceRoot":"","sources":["../../src/tools/definitions.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,IAAI,EAAE,MAAM,oCAAoC,CAAC;AAC1D,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAuB/C,eAAO,MAAM,cAAc,6pXAoJ+G,CAAC;AAW3I,eAAO,MAAM,eAAe,EAAE,IAAI,EA+1PjC,CAAC;AAEF;;GAEG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAE5D;AAED;;GAEG;AACH,wBAAgB,YAAY,IAAI,MAAM,EAAE,CAEvC;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,WAAW,GAAG,IAAI,EAAE,CAO3D;AAED;;;;;GAKG;AACH,MAAM,MAAM,aAAa,GAAG,SAAS,GAAG,SAAS,GAAG,SAAS,CAAC;AAE9D;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,SAAS,EAAE,aAAa,GAAG,IAAI,EAAE,CAQrE"}