summer-engine 3.1.0 → 3.2.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.
- package/.claude-plugin/marketplace.json +2 -2
- package/.claude-plugin/plugin.json +27 -5
- package/.codex-plugin/plugin.json +28 -6
- package/.cursor-plugin/plugin.json +27 -5
- package/.factory-plugin/plugin.json +27 -5
- package/.opencode/plugins/summer.js +1 -1
- package/CHANGELOG.md +102 -0
- package/README.md +18 -3
- package/assets/audit/scene_audit.gd +4136 -0
- package/assets/seeing/seeing_probe.gd +1873 -0
- package/dist/cli/commands/skills.js +20 -2
- package/dist/core/api-client.d.ts +9 -1
- package/dist/core/api-client.js +21 -4
- package/dist/core/capabilities/agent-playbook.js +46 -0
- package/dist/core/capabilities/audit/accept.d.ts +55 -0
- package/dist/core/capabilities/audit/accept.js +147 -0
- package/dist/core/capabilities/audit/args.d.ts +95 -0
- package/dist/core/capabilities/audit/args.js +89 -0
- package/dist/core/capabilities/audit/audit.d.ts +56 -0
- package/dist/core/capabilities/audit/audit.js +287 -0
- package/dist/core/capabilities/audit/frame.d.ts +14 -0
- package/dist/core/capabilities/audit/frame.js +35 -0
- package/dist/core/capabilities/audit/gaps.d.ts +96 -0
- package/dist/core/capabilities/audit/gaps.js +257 -0
- package/dist/core/capabilities/audit/judge.d.ts +162 -0
- package/dist/core/capabilities/audit/judge.js +1134 -0
- package/dist/core/capabilities/audit/math.d.ts +110 -0
- package/dist/core/capabilities/audit/math.js +263 -0
- package/dist/core/capabilities/audit/summary.d.ts +74 -0
- package/dist/core/capabilities/audit/summary.js +212 -0
- package/dist/core/capabilities/board.d.ts +31 -0
- package/dist/core/capabilities/board.js +43 -0
- package/dist/core/capabilities/camera-view.d.ts +4 -2
- package/dist/core/capabilities/camera-view.js +6 -3
- package/dist/core/capabilities/connect-signal.d.ts +85 -0
- package/dist/core/capabilities/connect-signal.js +285 -0
- package/dist/core/capabilities/engine-fallbacks.d.ts +5 -0
- package/dist/core/capabilities/engine-fallbacks.js +5 -0
- package/dist/core/capabilities/engine-ops.d.ts +5 -1
- package/dist/core/capabilities/engine-ops.js +0 -3
- package/dist/core/capabilities/engine-receipt.d.ts +12 -0
- package/dist/core/capabilities/engine-receipt.js +26 -0
- package/dist/core/capabilities/file-read.d.ts +64 -0
- package/dist/core/capabilities/file-read.js +325 -0
- package/dist/core/capabilities/game-task-plan.js +4 -2
- package/dist/core/capabilities/grep.d.ts +60 -0
- package/dist/core/capabilities/grep.js +190 -0
- package/dist/core/capabilities/inspect-node.d.ts +56 -0
- package/dist/core/capabilities/inspect-node.js +225 -0
- package/dist/core/capabilities/inspect-resource.d.ts +61 -0
- package/dist/core/capabilities/inspect-resource.js +376 -0
- package/dist/core/capabilities/math3d.d.ts +28 -0
- package/dist/core/capabilities/math3d.js +88 -0
- package/dist/core/capabilities/motion-generation.d.ts +62 -0
- package/dist/core/capabilities/motion-generation.js +138 -0
- package/dist/core/capabilities/placement-batch.d.ts +102 -0
- package/dist/core/capabilities/placement-batch.js +483 -0
- package/dist/core/capabilities/placement-math.d.ts +70 -0
- package/dist/core/capabilities/placement-math.js +209 -0
- package/dist/core/capabilities/placement-script.d.ts +42 -0
- package/dist/core/capabilities/placement-script.js +1096 -0
- package/dist/core/capabilities/placement.d.ts +485 -0
- package/dist/core/capabilities/placement.js +1731 -0
- package/dist/core/capabilities/project-context.d.ts +33 -2
- package/dist/core/capabilities/project-context.js +87 -4
- package/dist/core/capabilities/replace-node.d.ts +91 -0
- package/dist/core/capabilities/replace-node.js +423 -0
- package/dist/core/capabilities/runtime-control.d.ts +18 -2
- package/dist/core/capabilities/runtime-control.js +67 -2
- package/dist/core/capabilities/scene-batch.d.ts +63 -0
- package/dist/core/capabilities/scene-batch.js +394 -0
- package/dist/core/capabilities/scene-readback.d.ts +36 -0
- package/dist/core/capabilities/scene-readback.js +54 -0
- package/dist/core/capabilities/seeing/args.d.ts +348 -0
- package/dist/core/capabilities/seeing/args.js +178 -0
- package/dist/core/capabilities/seeing/candidates.d.ts +127 -0
- package/dist/core/capabilities/seeing/candidates.js +282 -0
- package/dist/core/capabilities/seeing/math.d.ts +134 -0
- package/dist/core/capabilities/seeing/math.js +269 -0
- package/dist/core/capabilities/seeing/probe.d.ts +62 -0
- package/dist/core/capabilities/seeing/probe.js +188 -0
- package/dist/core/capabilities/seeing/scoring.d.ts +235 -0
- package/dist/core/capabilities/seeing/scoring.js +639 -0
- package/dist/core/capabilities/seeing/seeing.d.ts +233 -0
- package/dist/core/capabilities/seeing/seeing.js +1341 -0
- package/dist/core/capabilities/seeing/shot-store.d.ts +52 -0
- package/dist/core/capabilities/seeing/shot-store.js +204 -0
- package/dist/core/capabilities/surface-snap-mesh.d.ts +88 -0
- package/dist/core/capabilities/surface-snap-mesh.js +425 -0
- package/dist/core/capabilities/surface-snap.d.ts +77 -0
- package/dist/core/capabilities/surface-snap.js +461 -0
- package/dist/core/capabilities/tool-dispatch.js +231 -72
- package/dist/core/capabilities/tscn.d.ts +85 -0
- package/dist/core/capabilities/tscn.js +391 -0
- package/dist/core/capabilities/world-snapshot.d.ts +58 -0
- package/dist/core/capabilities/world-snapshot.js +150 -0
- package/dist/core/capability-skew.d.ts +5 -5
- package/dist/core/capability-skew.js +14 -6
- package/dist/core/headless/worker-engine-client.d.ts +1 -1
- package/dist/core/headless/worker-engine-client.js +2 -2
- package/dist/core/library-read.d.ts +37 -5
- package/dist/core/library-read.js +264 -33
- package/dist/core/library-search.d.ts +2 -2
- package/dist/installer/agent-config.js +5 -3
- package/dist/installer/agent-table.d.ts +16 -0
- package/dist/installer/agent-table.js +52 -17
- package/dist/mcp/server.js +9 -3
- package/dist/mcp/tools/asset-tools.js +21 -3
- package/dist/mcp/tools/audit-tools.d.ts +23 -0
- package/dist/mcp/tools/audit-tools.js +60 -0
- package/dist/mcp/tools/debug-tools.js +3 -1
- package/dist/mcp/tools/file-tools.js +17 -4
- package/dist/mcp/tools/generate-tools.js +74 -66
- package/dist/mcp/tools/library-tools.js +2 -0
- package/dist/mcp/tools/perception-tools.js +6 -19
- package/dist/mcp/tools/placement-tools.d.ts +24 -0
- package/dist/mcp/tools/placement-tools.js +91 -0
- package/dist/mcp/tools/project-tools.js +18 -15
- package/dist/mcp/tools/scene-tools.js +71 -83
- package/dist/mcp/tools/seeing-tools.d.ts +24 -0
- package/dist/mcp/tools/seeing-tools.js +64 -0
- package/dist/mcp/tools/spatial-tools.js +17 -9
- package/dist/mcp/tools/visual-tools.js +59 -7
- package/gemini-extension.json +26 -4
- package/integrations/amp/README.md +1 -1
- package/integrations/crush/README.md +1 -1
- package/integrations/grok-build/README.md +1 -1
- package/integrations/hermes/README.md +1 -1
- package/integrations/kimi-code/README.md +1 -1
- package/integrations/mistral-vibe/README.md +1 -1
- package/integrations/opencode/README.md +1 -1
- package/integrations/rovo-dev/README.md +1 -1
- package/integrations/vscode-copilot/README.md +1 -1
- package/integrations/warp/README.md +1 -1
- package/integrations/windsurf/README.md +1 -1
- package/library/references/mcp-tools-reference/mcp-tools-reference.md +59 -15
- package/library/references/mcp-tools-reference/resource.yaml +1 -1
- package/library/references/summer-folder/resource.yaml +1 -1
- package/library/references/summer-folder/summer-folder.md +1 -1
- package/library/skills/3d-lighting/SKILL.md +1 -1
- package/library/skills/README.md +36 -14
- package/library/skills/adaptive-music/SKILL.md +1 -1
- package/library/skills/agent-playtesting/SKILL.md +1 -1
- package/library/skills/ai-characters-in-games/SKILL.md +220 -0
- package/library/skills/ai-characters-in-games/resource.yaml +30 -0
- package/library/skills/ambient-bed/SKILL.md +1 -1
- package/library/skills/animated-loop/SKILL.md +1 -1
- package/library/skills/animation-tree/SKILL.md +1 -1
- package/library/skills/art-direction/SKILL.md +1 -1
- package/library/skills/asset-strategy/SKILL.md +2 -1
- package/library/skills/asset-strategy/resource.yaml +2 -1
- package/library/skills/audio-direction/SKILL.md +1 -1
- package/library/skills/auto-fire-targeting/SKILL.md +1 -1
- package/library/skills/brainstorm-game/SKILL.md +1 -1
- package/library/skills/brainstorming/SKILL.md +1 -1
- package/library/skills/browse-templates/SKILL.md +3 -3
- package/library/skills/browse-templates/resource.yaml +1 -1
- package/library/skills/camera-rigs/SKILL.md +128 -0
- package/library/skills/camera-rigs/resource.yaml +29 -0
- package/library/skills/celeste-momentum-platforming/SKILL.md +1 -1
- package/library/skills/character-animation-wiring/SKILL.md +1 -1
- package/library/skills/character-model/SKILL.md +1 -1
- package/library/skills/character-movement/SKILL.md +326 -0
- package/library/skills/character-movement/references/default-third-person-controller.gd +201 -0
- package/library/skills/character-movement/references/default-third-person-verification-probe.gd +154 -0
- package/library/skills/character-movement/references/movement-3d.md +136 -0
- package/library/skills/character-movement/references/platformer-feel.md +83 -0
- package/library/skills/character-movement/resource.yaml +40 -0
- package/library/skills/character-portrait/SKILL.md +1 -1
- package/library/skills/cinematic-cutscene/SKILL.md +1 -1
- package/library/skills/combat-basics/SKILL.md +159 -0
- package/library/skills/combat-basics/references/projectiles-and-aoe.md +100 -0
- package/library/skills/combat-basics/resource.yaml +34 -0
- package/library/skills/concept-art/SKILL.md +1 -1
- package/library/skills/create-asset-sheet/SKILL.md +1 -1
- package/library/skills/debug/SKILL.md +1 -1
- package/library/skills/debugging-game-feel/SKILL.md +1 -1
- package/library/skills/design-level/SKILL.md +1 -1
- package/library/skills/design-mechanic/SKILL.md +1 -1
- package/library/skills/design-npc/SKILL.md +1 -1
- package/library/skills/diagnosing-perf-regressions/SKILL.md +1 -1
- package/library/skills/dispatching-parallel-agents/SKILL.md +1 -1
- package/library/skills/driving-the-editor-ui/SKILL.md +1 -1
- package/library/skills/environment-kit/SKILL.md +1 -1
- package/library/skills/export-and-ship/SKILL.md +1 -1
- package/library/skills/fabricating-assets/SKILL.md +1 -1
- package/library/skills/facial-and-lipsync/SKILL.md +1 -1
- package/library/skills/fps-controller/SKILL.md +9 -7
- package/library/skills/fps-controller/resource.yaml +4 -1
- package/library/skills/game-feel/SKILL.md +1 -1
- package/library/skills/gameskill/SKILL.md +1 -1
- package/library/skills/gdscript-patterns/SKILL.md +1 -1
- package/library/skills/generate-motion/SKILL.md +9 -9
- package/library/skills/generate-motion/resource.yaml +2 -1
- package/library/skills/godogen-visual-proof-game-generation/SKILL.md +1 -1
- package/library/skills/headless-scripting/SKILL.md +1 -1
- package/library/skills/in-game-purchases/SKILL.md +254 -0
- package/library/skills/in-game-purchases/resource.yaml +29 -0
- package/library/skills/instantiate-asset-pack/SKILL.md +1 -1
- package/library/skills/investigating-bugs/SKILL.md +1 -1
- package/library/skills/lumera-single-image-scene-reconstruction/SKILL.md +1 -1
- package/library/skills/make-game/SKILL.md +25 -3
- package/library/skills/make-game/references/2d-platformer-polish.md +93 -0
- package/library/skills/make-game/references/2d-platformer.md +117 -0
- package/library/skills/make-game/references/2d-rpg-content.md +234 -0
- package/library/skills/make-game/references/2d-rpg.md +241 -0
- package/library/skills/make-game/references/2d-survivors-progression.md +201 -0
- package/library/skills/make-game/references/2d-survivors.md +237 -0
- package/library/skills/make-game/references/3d-fps-systems.md +216 -0
- package/library/skills/make-game/references/3d-fps.md +177 -0
- package/library/skills/make-game/references/3d-horror-systems.md +186 -0
- package/library/skills/make-game/references/3d-horror.md +201 -0
- package/library/skills/make-game/references/3d-third-person-systems.md +220 -0
- package/library/skills/make-game/references/3d-third-person.md +215 -0
- package/library/skills/make-game/resource.yaml +6 -1
- package/library/skills/multiplayer/SKILL.md +150 -0
- package/library/skills/multiplayer/resource.yaml +33 -0
- package/library/skills/multiplayer-movement/SKILL.md +510 -0
- package/library/skills/multiplayer-movement/files.md +501 -0
- package/library/skills/multiplayer-movement/resource.yaml +30 -0
- package/library/skills/multiplayer-project/SKILL.md +521 -0
- package/library/skills/multiplayer-project/files.md +448 -0
- package/library/skills/multiplayer-project/resource.yaml +36 -0
- package/library/skills/multiplayer-publish/SKILL.md +229 -0
- package/library/skills/multiplayer-publish/export-errors.md +89 -0
- package/library/skills/multiplayer-publish/resource.yaml +28 -0
- package/library/skills/multiplayer-state/SKILL.md +438 -0
- package/library/skills/multiplayer-state/files.md +592 -0
- package/library/skills/multiplayer-state/resource.yaml +35 -0
- package/library/skills/multiplayer-testing/SKILL.md +236 -0
- package/library/skills/multiplayer-testing/resource.yaml +39 -0
- package/library/skills/music-track/SKILL.md +1 -1
- package/library/skills/navigate-summer/SKILL.md +1 -1
- package/library/skills/new-project/SKILL.md +1 -1
- package/library/skills/organic-model/SKILL.md +1 -1
- package/library/skills/pixel-art/SKILL.md +1 -1
- package/library/skills/play/SKILL.md +1 -1
- package/library/skills/playtesting-a-feature/SKILL.md +1 -1
- package/library/skills/procedural-animation/SKILL.md +2 -2
- package/library/skills/procedural-animation/resource.yaml +1 -1
- package/library/skills/prop-model/SKILL.md +1 -1
- package/library/skills/psx-retro-rendering/SKILL.md +1 -1
- package/library/skills/realtime-wet-surfaces/SKILL.md +2 -2
- package/library/skills/remote-deploy/SKILL.md +1 -1
- package/library/skills/retarget/SKILL.md +1 -1
- package/library/skills/running-in-the-cloud/SKILL.md +1 -1
- package/library/skills/save-load/SKILL.md +156 -0
- package/library/skills/save-load/resource.yaml +27 -0
- package/library/skills/scene-composition/SKILL.md +1 -1
- package/library/skills/scene-hierarchy-design/SKILL.md +1 -1
- package/library/skills/scene-scripting/SKILL.md +1 -1
- package/library/skills/scene-to-level/SKILL.md +1 -1
- package/library/skills/skill-create/SKILL.md +1 -1
- package/library/skills/skill-improve/SKILL.md +1 -1
- package/library/skills/skill-test/SKILL.md +1 -1
- package/library/skills/skintokens-auto-rigging/SKILL.md +1 -1
- package/library/skills/skybox-panorama/SKILL.md +1 -1
- package/library/skills/sound-effect/SKILL.md +1 -1
- package/library/skills/spatial-placement/SKILL.md +134 -3
- package/library/skills/spatial-placement/references/kit-placement-tools.md +364 -0
- package/library/skills/spatial-placement/resource.yaml +16 -2
- package/library/skills/sprite-sheet/SKILL.md +1 -1
- package/library/skills/summer-analytics/SKILL.md +147 -0
- package/library/skills/summer-analytics/resource.yaml +28 -0
- package/library/skills/summer-friends/SKILL.md +226 -0
- package/library/skills/summer-friends/resource.yaml +28 -0
- package/library/skills/summer-leaderboards/SKILL.md +231 -0
- package/library/skills/summer-leaderboards/resource.yaml +30 -0
- package/library/skills/summer-match-results/SKILL.md +286 -0
- package/library/skills/summer-match-results/resource.yaml +32 -0
- package/library/skills/summer-matchmaking/SKILL.md +301 -0
- package/library/skills/summer-matchmaking/resource.yaml +32 -0
- package/library/skills/summer-parties/SKILL.md +253 -0
- package/library/skills/summer-parties/resource.yaml +30 -0
- package/library/skills/summer-player-data/SKILL.md +322 -0
- package/library/skills/summer-player-data/resource.yaml +30 -0
- package/library/skills/summer-store/SKILL.md +271 -0
- package/library/skills/summer-store/resource.yaml +29 -0
- package/library/skills/summer-world-chat/SKILL.md +195 -0
- package/library/skills/summer-world-chat/resource.yaml +30 -0
- package/library/skills/summer-world-saves/SKILL.md +284 -0
- package/library/skills/summer-world-saves/resource.yaml +29 -0
- package/library/skills/text-to-motion/SKILL.md +99 -0
- package/library/skills/text-to-motion/prompts-and-controls.md +34 -0
- package/library/skills/text-to-motion/resource.yaml +41 -0
- package/library/skills/text-to-motion/rigging-for-text-motion.md +54 -0
- package/library/skills/tileable-texture/SKILL.md +1 -1
- package/library/skills/trailer-shot/SKILL.md +1 -1
- package/library/skills/tune-performance/SKILL.md +1 -1
- package/library/skills/ui-basics/SKILL.md +10 -1
- package/library/skills/ui-graphics/SKILL.md +1 -1
- package/library/skills/use-widget-asset/SKILL.md +1 -1
- package/library/skills/using-summer/SKILL.md +2 -2
- package/library/skills/using-summer/resource.yaml +2 -2
- package/library/skills/vehicle-model/SKILL.md +1 -1
- package/library/skills/verification-before-completion/SKILL.md +1 -1
- package/library/skills/verifying-scenes/SKILL.md +76 -2
- package/library/skills/verifying-scenes/resource.yaml +13 -2
- package/library/skills/vfx-dissolve/SKILL.md +1 -1
- package/library/skills/vfx-fire/SKILL.md +1 -1
- package/library/skills/vfx-hit-spark/SKILL.md +1 -1
- package/library/skills/vfx-lightning/SKILL.md +1 -1
- package/library/skills/vfx-magic-glow/SKILL.md +1 -1
- package/library/skills/vfx-muzzle-flash/SKILL.md +1 -1
- package/library/skills/vfx-smoke/SKILL.md +1 -1
- package/library/skills/vfx-water-ripple/SKILL.md +1 -1
- package/library/skills/voice-line/SKILL.md +1 -1
- package/library/skills/web-and-touch-input/SKILL.md +38 -0
- package/library/skills/web-and-touch-input/resource.yaml +28 -0
- package/library/skills/web-compatibility-look/SKILL.md +62 -0
- package/library/skills/web-compatibility-look/resource.yaml +30 -0
- package/library/skills/world-building-3d/SKILL.md +8 -1
- package/library/skills/world-building-3d/references/spatial-tools.md +1 -1
- package/library/skills/world-building-3d/resource.yaml +2 -1
- package/library/skills/writing-plans/SKILL.md +1 -1
- package/library/skills/writing-skills/SKILL.md +1 -1
- package/library/templates/3d-lan-multiplayer-starter/resource.yaml +2 -2
- package/library/tools/attach-to-surface/resource.yaml +142 -0
- package/library/tools/batch/resource.yaml +9 -3
- package/library/tools/connect-ports/resource.yaml +120 -0
- package/library/tools/connect-signal/resource.yaml +3 -2
- package/library/tools/debug-views/resource.yaml +94 -0
- package/library/tools/frame-nodes/resource.yaml +104 -0
- package/library/tools/frame-shot/resource.yaml +134 -0
- package/library/tools/generate-motion/resource.yaml +44 -9
- package/library/tools/get-board/resource.yaml +50 -0
- package/library/tools/get-project-context/resource.yaml +13 -2
- package/library/tools/grep/resource.yaml +77 -0
- package/library/tools/inspect-asset/resource.yaml +71 -0
- package/library/tools/inspect-node/resource.yaml +9 -2
- package/library/tools/inspect-resource/resource.yaml +16 -5
- package/library/tools/instantiate-scene/resource.yaml +27 -2
- package/library/tools/measure/resource.yaml +96 -0
- package/library/tools/place-adjacent/resource.yaml +113 -0
- package/library/tools/play/resource.yaml +15 -2
- package/library/tools/raycast/resource.yaml +101 -0
- package/library/tools/read-file/resource.yaml +36 -2
- package/library/tools/read-library/resource.yaml +2 -2
- package/library/tools/repeat-along/resource.yaml +129 -0
- package/library/tools/replace-node/resource.yaml +11 -5
- package/library/tools/scene-audit/resource.yaml +144 -0
- package/library/tools/screenshot/resource.yaml +13 -2
- package/library/tools/search-assets/resource.yaml +18 -0
- package/library/tools/shot-sheet/resource.yaml +110 -0
- package/library/tools/snap-to-surface/resource.yaml +4 -1
- package/library/tools/world-snapshot/resource.yaml +24 -3
- package/library/tools/zoom/resource.yaml +105 -0
- package/package.json +1 -1
- package/registry/generated/aliases.json +17 -3
- package/registry/generated/counts.json +3 -3
- package/registry/generated/gemini-extension.json +26 -4
- package/registry/generated/index.json +2154 -469
- package/registry/generated/marketplace.claude.json +2 -2
- package/registry/generated/plugin.claude.json +27 -5
- package/registry/generated/plugin.codex.json +28 -6
- package/registry/generated/plugin.cursor.json +27 -5
- package/registry/generated/plugin.factory.json +27 -5
- package/registry/generated/skills-index.md +36 -14
- package/registry/generated/skills-registry.json +421 -124
- package/registry/generated/templates-registry.json +2 -2
- package/library/skills/host-authoritative-state/SKILL.md +0 -332
- package/library/skills/host-authoritative-state/resource.yaml +0 -28
- package/library/skills/peer-to-peer-multiplayer/SKILL.md +0 -373
- package/library/skills/peer-to-peer-multiplayer/resource.yaml +0 -28
- package/library/skills/setup-multiplayer/SKILL.md +0 -336
- package/library/skills/setup-multiplayer/resource.yaml +0 -28
|
@@ -1,10 +1,12 @@
|
|
|
1
1
|
id: tool/snap-to-surface
|
|
2
2
|
kind: tool
|
|
3
|
-
version: 1.
|
|
3
|
+
version: 1.2.0
|
|
4
4
|
summary: Move one 3D subject along a world ray until it sits at the requested gap from the first surface (floor, ramp, shelf, table), then save the scene.
|
|
5
5
|
use_when:
|
|
6
6
|
- seating a prop on a floor, ramp, table, or shelf instead of hand-tuning its Y position
|
|
7
7
|
- grounding an imported or instantiated model that floats or sinks into its support
|
|
8
|
+
- lifting a prop that is sunk a few centimetres into the ground back onto it
|
|
9
|
+
- seating a prop without a collider (a fern, a bottle) on a PlaneMesh or other mesh-only ground
|
|
8
10
|
do_not_use_when:
|
|
9
11
|
- you only want to know whether a pose fits — summer_test_placement is read-only
|
|
10
12
|
- arranging several objects relative to each other — summer_align_distribute_3d
|
|
@@ -25,6 +27,7 @@ related:
|
|
|
25
27
|
- tool/align-distribute-3d
|
|
26
28
|
- tool/world-snapshot
|
|
27
29
|
- tool/set-prop
|
|
30
|
+
- tool/starcast
|
|
28
31
|
skills:
|
|
29
32
|
- skill/world-building-3d
|
|
30
33
|
source: official
|
|
@@ -1,11 +1,13 @@
|
|
|
1
1
|
id: tool/world-snapshot
|
|
2
2
|
kind: tool
|
|
3
|
-
version: 1.0
|
|
4
|
-
summary:
|
|
3
|
+
version: 1.1.0
|
|
4
|
+
summary: Structured scene snapshot (paths, transforms, world AABBs, fingerprints, counts), filterable by subtree, class and field; the read around every mutation.
|
|
5
5
|
use_when:
|
|
6
6
|
- taking a diffable baseline before a mutation batch, or verifying transforms/AABBs/fingerprints after one
|
|
7
7
|
- '"where exactly is everything in this scene?" — positions, sizes, bounds'
|
|
8
8
|
- '"are these two props overlapping?" / "is anything floating?"'
|
|
9
|
+
- '"where did the pieces of House3 land?" — path_prefix + fields:[pos, aabb] reads one subtree cheaply'
|
|
10
|
+
- counting instances per class in one subtree (matched_counts)
|
|
9
11
|
do_not_use_when:
|
|
10
12
|
- you only need the hierarchy shape — summer_get_scene_tree
|
|
11
13
|
- "requires an engine build with GetWorldSnapshot (Summer Engine 0.5.66 or newer); older engines return engine_lacks_op"
|
|
@@ -50,7 +52,26 @@ input_schema:
|
|
|
50
52
|
max_nodes:
|
|
51
53
|
type: integer
|
|
52
54
|
exclusiveMinimum: 0
|
|
53
|
-
description:
|
|
55
|
+
description: Most node entries to return (default 200). The engine still snapshots the whole scene for the diff baseline; the result says when the list is cut (truncated, next_offset).
|
|
56
|
+
offset:
|
|
57
|
+
type: integer
|
|
58
|
+
minimum: 0
|
|
59
|
+
description: Skip this many matching nodes (path-sorted) before listing — page with the result's next_offset.
|
|
60
|
+
path_prefix:
|
|
61
|
+
type: string
|
|
62
|
+
description: Only this subtree, the node at this scene-relative path and everything below it, e.g. 'House3' or 'Lane2/Props'.
|
|
63
|
+
classes:
|
|
64
|
+
type: array
|
|
65
|
+
items:
|
|
66
|
+
type: string
|
|
67
|
+
maxItems: 32
|
|
68
|
+
description: Only nodes of these classes, e.g. ['MeshInstance3D', 'OmniLight3D'] (* wildcards allowed).
|
|
69
|
+
fields:
|
|
70
|
+
type: array
|
|
71
|
+
items:
|
|
72
|
+
type: string
|
|
73
|
+
maxItems: 16
|
|
74
|
+
description: "Only these per-node fields (path is always kept): class, name, pos, rot_deg, scale, visible, aabb, scene_file, script_fp, material_fps, z_index, rect, view_rect, limit_rect."
|
|
54
75
|
additionalProperties: false
|
|
55
76
|
authority:
|
|
56
77
|
filesystem: false
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
id: tool/zoom
|
|
2
|
+
kind: tool
|
|
3
|
+
version: 1.0.0
|
|
4
|
+
summary: 'High-resolution close-up of exactly a frame region or of mark N, rendered as the exact sub-frustum at full resolution (real detail, not upscaled pixels).'
|
|
5
|
+
use_when:
|
|
6
|
+
- 'checking seams, gaps, floating pieces, texture resolution or tiling up close'
|
|
7
|
+
- 'looking closer at a numbered mark from a marks render (summer_frame_nodes marks:true, or summer_screenshot marks at the same size)'
|
|
8
|
+
- 'inspecting a region a difference map or debug view flagged'
|
|
9
|
+
do_not_use_when:
|
|
10
|
+
- 'the whole view — summer_shot_sheet / summer_frame_nodes'
|
|
11
|
+
- 'you have no pose yet — get one from a bookmark or summer_frame_shot first'
|
|
12
|
+
facets:
|
|
13
|
+
lifecycle:
|
|
14
|
+
- build
|
|
15
|
+
domains:
|
|
16
|
+
- verification
|
|
17
|
+
- scenes
|
|
18
|
+
- 3d
|
|
19
|
+
modalities:
|
|
20
|
+
- scenes
|
|
21
|
+
compatibility:
|
|
22
|
+
engine: ">=4.6"
|
|
23
|
+
related:
|
|
24
|
+
tools:
|
|
25
|
+
- tool/frame-nodes
|
|
26
|
+
- tool/screenshot
|
|
27
|
+
- tool/debug-views
|
|
28
|
+
- tool/shot-sheet
|
|
29
|
+
skills:
|
|
30
|
+
- skill/verifying-scenes
|
|
31
|
+
source: official
|
|
32
|
+
license: MIT
|
|
33
|
+
status: preview
|
|
34
|
+
aliases:
|
|
35
|
+
- summer_zoom
|
|
36
|
+
implementation:
|
|
37
|
+
module: src/mcp/tools/seeing-tools.ts
|
|
38
|
+
export: registerSeeingTools
|
|
39
|
+
surfaces:
|
|
40
|
+
mcp:
|
|
41
|
+
tool_name: summer_zoom
|
|
42
|
+
remote: false
|
|
43
|
+
input_schema:
|
|
44
|
+
type: object
|
|
45
|
+
properties:
|
|
46
|
+
scenePath:
|
|
47
|
+
type: string
|
|
48
|
+
description: Scene to look at, e.g. "res://levels/town.tscn" (the SAVED file). Omit for the scene open in the editor.
|
|
49
|
+
bookmark_name:
|
|
50
|
+
type: string
|
|
51
|
+
description: Pose from a camera bookmark (summer_camera_bookmark). Use INSTEAD of camera_position/camera_look_at.
|
|
52
|
+
camera_position:
|
|
53
|
+
type: string
|
|
54
|
+
description: 'Explicit pose: camera position, "Vector3(x, y, z)". Goes with camera_look_at.'
|
|
55
|
+
camera_look_at:
|
|
56
|
+
type: string
|
|
57
|
+
description: 'Explicit pose: point the camera looks at, "Vector3(x, y, z)".'
|
|
58
|
+
fov:
|
|
59
|
+
type: number
|
|
60
|
+
description: "Vertical field of view in degrees (1..179). Default: the bookmark's own, or 60."
|
|
61
|
+
region:
|
|
62
|
+
type: array
|
|
63
|
+
items:
|
|
64
|
+
type: number
|
|
65
|
+
minItems: 4
|
|
66
|
+
maxItems: 4
|
|
67
|
+
description: '[x, y, w, h] as fractions (0..1) of the frame from the same pose, x/y from the TOP-LEFT. Use this OR mark. Rendered EXACTLY (no padding by default, never widened to an aspect ratio): the image takes the region''s own aspect, with dark bars only for extreme shapes.'
|
|
68
|
+
mark:
|
|
69
|
+
type: integer
|
|
70
|
+
description: A label number from a marks:true render of the SAME pose and reference_size (summer_frame_nodes, or summer_screenshot framing free/bookmark at that size). The caption warns when that node is hidden behind other geometry at this pose.
|
|
71
|
+
reference_size:
|
|
72
|
+
type: array
|
|
73
|
+
items:
|
|
74
|
+
type: integer
|
|
75
|
+
minItems: 2
|
|
76
|
+
maxItems: 2
|
|
77
|
+
description: "[width, height] of the frame region/mark refer to (default [1024, 576]). Sets the zoom's aspect."
|
|
78
|
+
pad:
|
|
79
|
+
type: number
|
|
80
|
+
description: 'Margin added around the region on each side, as a fraction of its size (0..1; default 0 for region, 0.15 for mark). The caption''s widened_because says when the rendered window is larger than asked.'
|
|
81
|
+
view:
|
|
82
|
+
type: string
|
|
83
|
+
enum:
|
|
84
|
+
- beauty
|
|
85
|
+
- lighting
|
|
86
|
+
- unshaded
|
|
87
|
+
- normals
|
|
88
|
+
- overdraw
|
|
89
|
+
- wireframe
|
|
90
|
+
description: '"beauty" (default: real environment, lights, fog, tonemap), "lighting" (light only), "unshaded" (albedo/texture only), "normals" (world normals, x red y green z blue), "overdraw", "wireframe".'
|
|
91
|
+
max_size:
|
|
92
|
+
type: integer
|
|
93
|
+
minimum: 64
|
|
94
|
+
maximum: 4096
|
|
95
|
+
description: Longest edge of the returned JPEG in pixels (default 1024). Bigger costs more context; up to 4096 for detail work on a PC.
|
|
96
|
+
save_to:
|
|
97
|
+
type: string
|
|
98
|
+
description: Also write the returned image to res://.summer/shots/saved/<name>.jpg (1-64 of A-Z a-z 0-9 _ -; needs max_size <= 1024). Nothing is written without it, except one previous-image slot per rendered bookmark.
|
|
99
|
+
additionalProperties: false
|
|
100
|
+
authority:
|
|
101
|
+
filesystem: true
|
|
102
|
+
editor_mutation: false
|
|
103
|
+
network: false
|
|
104
|
+
credentials: false
|
|
105
|
+
publish: false
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "summer-engine",
|
|
3
|
-
"version": "3.
|
|
3
|
+
"version": "3.2.0",
|
|
4
4
|
"description": "Local Summer CLI and MCP server for Summer Engine. Install and run the engine, connect Claude Code, Cursor, Codex, Gemini, and other agents, and build real games with bundled skills, hooks, and plugins.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"summer-engine",
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"_generated": "GENERATED — do not edit; run npm run generate:registry",
|
|
3
3
|
"aliases": {
|
|
4
|
+
"animate-from-text": "skill/text-to-motion",
|
|
4
5
|
"dissolve": "skill/vfx-dissolve",
|
|
5
6
|
"docs/HEADLESS_ROUTING.md": "reference/headless-routing",
|
|
6
7
|
"docs/MCP_FRESH_CHAT_PLAYBOOK.md": "reference/mcp-fresh-chat-playbook",
|
|
@@ -52,9 +53,6 @@
|
|
|
52
53
|
"skills/gameplay-mechanics/design-mechanic": "skill/design-mechanic",
|
|
53
54
|
"skills/level-design/design-level": "skill/design-level",
|
|
54
55
|
"skills/level-design/scene-to-level": "skill/scene-to-level",
|
|
55
|
-
"skills/multiplayer-and-networking/host-authoritative-state": "skill/host-authoritative-state",
|
|
56
|
-
"skills/multiplayer-and-networking/peer-to-peer-multiplayer": "skill/peer-to-peer-multiplayer",
|
|
57
|
-
"skills/multiplayer-and-networking/setup-multiplayer": "skill/setup-multiplayer",
|
|
58
56
|
"skills/performance/tune-performance": "skill/tune-performance",
|
|
59
57
|
"skills/rendering-and-lighting/3d-lighting": "skill/3d-lighting",
|
|
60
58
|
"skills/rendering-and-lighting/art-direction": "skill/art-direction",
|
|
@@ -102,17 +100,22 @@
|
|
|
102
100
|
"summer_add_node": "tool/add-node",
|
|
103
101
|
"summer_align_distribute_3d": "tool/align-distribute-3d",
|
|
104
102
|
"summer_api_docs": "tool/api-docs",
|
|
103
|
+
"summer_attach_to_surface": "tool/attach-to-surface",
|
|
105
104
|
"summer_batch": "tool/batch",
|
|
106
105
|
"summer_camera_bookmark": "tool/camera-bookmark",
|
|
107
106
|
"summer_check_job": "tool/check-job",
|
|
108
107
|
"summer_clear_console": "tool/clear-console",
|
|
108
|
+
"summer_connect_ports": "tool/connect-ports",
|
|
109
109
|
"summer_connect_signal": "tool/connect-signal",
|
|
110
110
|
"summer_create_debug_report": "tool/create-debug-report",
|
|
111
111
|
"summer_create_scene": "tool/create-scene",
|
|
112
112
|
"summer_creator_config": "tool/creator-config",
|
|
113
113
|
"summer_creator_publish": "tool/creator-publish",
|
|
114
114
|
"summer_creator_releases": "tool/creator-releases",
|
|
115
|
+
"summer_debug_views": "tool/debug-views",
|
|
115
116
|
"summer_fabricate_3d": "tool/fabricate-3d",
|
|
117
|
+
"summer_frame_nodes": "tool/frame-nodes",
|
|
118
|
+
"summer_frame_shot": "tool/frame-shot",
|
|
116
119
|
"summer_game_control": "tool/game-control",
|
|
117
120
|
"summer_game_input": "tool/game-input",
|
|
118
121
|
"summer_game_probe": "tool/game-probe",
|
|
@@ -124,6 +127,7 @@
|
|
|
124
127
|
"summer_get_agent_playbook": "tool/get-agent-playbook",
|
|
125
128
|
"summer_get_asset": "tool/get-asset",
|
|
126
129
|
"summer_get_asset_download_url": "tool/get-asset-download-url",
|
|
130
|
+
"summer_get_board": "tool/get-board",
|
|
127
131
|
"summer_get_console": "tool/get-console",
|
|
128
132
|
"summer_get_debugger_errors": "tool/get-debugger-errors",
|
|
129
133
|
"summer_get_debugger_warnings": "tool/get-debugger-warnings",
|
|
@@ -133,12 +137,14 @@
|
|
|
133
137
|
"summer_get_scene_tree": "tool/get-scene-tree",
|
|
134
138
|
"summer_get_script_errors": "tool/get-script-errors",
|
|
135
139
|
"summer_get_studio_workflow": "tool/get-studio-workflow",
|
|
140
|
+
"summer_grep": "tool/grep",
|
|
136
141
|
"summer_import_asset": "tool/import-asset",
|
|
137
142
|
"summer_import_asset_by_id": "tool/import-asset-by-id",
|
|
138
143
|
"summer_import_from_url": "tool/import-from-url",
|
|
139
144
|
"summer_import_from_url_batch": "tool/import-from-url-batch",
|
|
140
145
|
"summer_import_hdri": "tool/import-hdri",
|
|
141
146
|
"summer_input_map_bind": "tool/input-map-bind",
|
|
147
|
+
"summer_inspect_asset": "tool/inspect-asset",
|
|
142
148
|
"summer_inspect_node": "tool/inspect-node",
|
|
143
149
|
"summer_inspect_resource": "tool/inspect-resource",
|
|
144
150
|
"summer_inspect_runtime_node": "tool/inspect-runtime-node",
|
|
@@ -146,16 +152,20 @@
|
|
|
146
152
|
"summer_is_running": "tool/is-running",
|
|
147
153
|
"summer_library_feedback": "tool/library-feedback",
|
|
148
154
|
"summer_list_my_assets": "tool/list-my-assets",
|
|
155
|
+
"summer_measure": "tool/measure",
|
|
149
156
|
"summer_navigation_probe": "tool/navigation-probe",
|
|
150
157
|
"summer_open": "tool/open",
|
|
151
158
|
"summer_open_main_scene": "tool/open-main-scene",
|
|
152
159
|
"summer_open_scene": "tool/open-scene",
|
|
160
|
+
"summer_place_adjacent": "tool/place-adjacent",
|
|
153
161
|
"summer_play": "tool/play",
|
|
154
162
|
"summer_project_setting": "tool/project-setting",
|
|
163
|
+
"summer_raycast": "tool/raycast",
|
|
155
164
|
"summer_read_file": "tool/read-file",
|
|
156
165
|
"summer_read_library": "tool/read-library",
|
|
157
166
|
"summer_recent_events": "tool/recent-events",
|
|
158
167
|
"summer_remove_node": "tool/remove-node",
|
|
168
|
+
"summer_repeat_along": "tool/repeat-along",
|
|
159
169
|
"summer_replace_node": "tool/replace-node",
|
|
160
170
|
"summer_replace_text": "tool/replace-text",
|
|
161
171
|
"summer_run_editor_script": "tool/run-editor-script",
|
|
@@ -165,12 +175,14 @@
|
|
|
165
175
|
"summer_runtime_set": "tool/runtime-set",
|
|
166
176
|
"summer_runtime_spawn": "tool/runtime-spawn",
|
|
167
177
|
"summer_save_scene": "tool/save-scene",
|
|
178
|
+
"summer_scene_audit": "tool/scene-audit",
|
|
168
179
|
"summer_screenshot": "tool/screenshot",
|
|
169
180
|
"summer_search_assets": "tool/search-assets",
|
|
170
181
|
"summer_search_library": "tool/search-library",
|
|
171
182
|
"summer_select_node": "tool/select-node",
|
|
172
183
|
"summer_set_prop": "tool/set-prop",
|
|
173
184
|
"summer_set_resource_property": "tool/set-resource-property",
|
|
185
|
+
"summer_shot_sheet": "tool/shot-sheet",
|
|
174
186
|
"summer_slice_asset_sheet": "tool/slice-asset-sheet",
|
|
175
187
|
"summer_snap_to_surface": "tool/snap-to-surface",
|
|
176
188
|
"summer_snapshot_diff": "tool/snapshot-diff",
|
|
@@ -185,6 +197,7 @@
|
|
|
185
197
|
"summer_wait_for_event": "tool/wait-for-event",
|
|
186
198
|
"summer_world_snapshot": "tool/world-snapshot",
|
|
187
199
|
"summer_write_file": "tool/write-file",
|
|
200
|
+
"summer_zoom": "tool/zoom",
|
|
188
201
|
"template-2d-brario-platformer": "template/2d-brario-platformer",
|
|
189
202
|
"template-2d-dungeon-roguelike": "template/2d-dungeon-roguelike",
|
|
190
203
|
"template-2d-grid-puzzle": "template/2d-grid-puzzle",
|
|
@@ -202,6 +215,7 @@
|
|
|
202
215
|
"template-3d-royale-clash-type": "template/3d-royale-clash-type",
|
|
203
216
|
"template-3d-third-person-controller": "template/3d-third-person-controller",
|
|
204
217
|
"template-3d-voxel-sandbox": "template/3d-voxel-sandbox",
|
|
218
|
+
"text-motion": "skill/text-to-motion",
|
|
205
219
|
"water-ripple": "skill/vfx-water-ripple"
|
|
206
220
|
}
|
|
207
221
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"_generated": "GENERATED from integrations/gemini — do not edit; npm run generate:registry",
|
|
3
3
|
"name": "summer",
|
|
4
|
-
"version": "3.
|
|
4
|
+
"version": "3.2.0",
|
|
5
5
|
"description": "Agent tooling for Summer Engine: MCP bridge, context primer, and game-dev skills. Use with the npm CLI for skill files on disk.",
|
|
6
6
|
"contextFileName": "GEMINI.md",
|
|
7
7
|
"mcpServers": {
|
|
@@ -27,6 +27,7 @@
|
|
|
27
27
|
"./library/skills/3d-lighting/",
|
|
28
28
|
"./library/skills/adaptive-music/",
|
|
29
29
|
"./library/skills/agent-playtesting/",
|
|
30
|
+
"./library/skills/ai-characters-in-games/",
|
|
30
31
|
"./library/skills/ambient-bed/",
|
|
31
32
|
"./library/skills/animated-loop/",
|
|
32
33
|
"./library/skills/animation-tree/",
|
|
@@ -37,11 +38,14 @@
|
|
|
37
38
|
"./library/skills/brainstorm-game/",
|
|
38
39
|
"./library/skills/brainstorming/",
|
|
39
40
|
"./library/skills/browse-templates/",
|
|
41
|
+
"./library/skills/camera-rigs/",
|
|
40
42
|
"./library/skills/celeste-momentum-platforming/",
|
|
41
43
|
"./library/skills/character-animation-wiring/",
|
|
42
44
|
"./library/skills/character-model/",
|
|
45
|
+
"./library/skills/character-movement/",
|
|
43
46
|
"./library/skills/character-portrait/",
|
|
44
47
|
"./library/skills/cinematic-cutscene/",
|
|
48
|
+
"./library/skills/combat-basics/",
|
|
45
49
|
"./library/skills/concept-art/",
|
|
46
50
|
"./library/skills/create-asset-sheet/",
|
|
47
51
|
"./library/skills/debug/",
|
|
@@ -63,16 +67,21 @@
|
|
|
63
67
|
"./library/skills/generate-motion/",
|
|
64
68
|
"./library/skills/godogen-visual-proof-game-generation/",
|
|
65
69
|
"./library/skills/headless-scripting/",
|
|
66
|
-
"./library/skills/
|
|
70
|
+
"./library/skills/in-game-purchases/",
|
|
67
71
|
"./library/skills/instantiate-asset-pack/",
|
|
68
72
|
"./library/skills/investigating-bugs/",
|
|
69
73
|
"./library/skills/lumera-single-image-scene-reconstruction/",
|
|
70
74
|
"./library/skills/make-game/",
|
|
75
|
+
"./library/skills/multiplayer/",
|
|
76
|
+
"./library/skills/multiplayer-movement/",
|
|
77
|
+
"./library/skills/multiplayer-project/",
|
|
78
|
+
"./library/skills/multiplayer-publish/",
|
|
79
|
+
"./library/skills/multiplayer-state/",
|
|
80
|
+
"./library/skills/multiplayer-testing/",
|
|
71
81
|
"./library/skills/music-track/",
|
|
72
82
|
"./library/skills/navigate-summer/",
|
|
73
83
|
"./library/skills/new-project/",
|
|
74
84
|
"./library/skills/organic-model/",
|
|
75
|
-
"./library/skills/peer-to-peer-multiplayer/",
|
|
76
85
|
"./library/skills/pixel-art/",
|
|
77
86
|
"./library/skills/play/",
|
|
78
87
|
"./library/skills/playtesting-a-feature/",
|
|
@@ -83,11 +92,11 @@
|
|
|
83
92
|
"./library/skills/remote-deploy/",
|
|
84
93
|
"./library/skills/retarget/",
|
|
85
94
|
"./library/skills/running-in-the-cloud/",
|
|
95
|
+
"./library/skills/save-load/",
|
|
86
96
|
"./library/skills/scene-composition/",
|
|
87
97
|
"./library/skills/scene-hierarchy-design/",
|
|
88
98
|
"./library/skills/scene-scripting/",
|
|
89
99
|
"./library/skills/scene-to-level/",
|
|
90
|
-
"./library/skills/setup-multiplayer/",
|
|
91
100
|
"./library/skills/skill-create/",
|
|
92
101
|
"./library/skills/skill-improve/",
|
|
93
102
|
"./library/skills/skill-test/",
|
|
@@ -96,6 +105,17 @@
|
|
|
96
105
|
"./library/skills/sound-effect/",
|
|
97
106
|
"./library/skills/spatial-placement/",
|
|
98
107
|
"./library/skills/sprite-sheet/",
|
|
108
|
+
"./library/skills/summer-analytics/",
|
|
109
|
+
"./library/skills/summer-friends/",
|
|
110
|
+
"./library/skills/summer-leaderboards/",
|
|
111
|
+
"./library/skills/summer-match-results/",
|
|
112
|
+
"./library/skills/summer-matchmaking/",
|
|
113
|
+
"./library/skills/summer-parties/",
|
|
114
|
+
"./library/skills/summer-player-data/",
|
|
115
|
+
"./library/skills/summer-store/",
|
|
116
|
+
"./library/skills/summer-world-chat/",
|
|
117
|
+
"./library/skills/summer-world-saves/",
|
|
118
|
+
"./library/skills/text-to-motion/",
|
|
99
119
|
"./library/skills/tileable-texture/",
|
|
100
120
|
"./library/skills/trailer-shot/",
|
|
101
121
|
"./library/skills/tune-performance/",
|
|
@@ -115,6 +135,8 @@
|
|
|
115
135
|
"./library/skills/vfx-smoke/",
|
|
116
136
|
"./library/skills/vfx-water-ripple/",
|
|
117
137
|
"./library/skills/voice-line/",
|
|
138
|
+
"./library/skills/web-and-touch-input/",
|
|
139
|
+
"./library/skills/web-compatibility-look/",
|
|
118
140
|
"./library/skills/world-building-3d/",
|
|
119
141
|
"./library/skills/writing-plans/",
|
|
120
142
|
"./library/skills/writing-skills/"
|