@inneranimalmedia/agentsam-sdk 2.6.7 → 2.6.9

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 (371) hide show
  1. package/README.md +37 -0
  2. package/apps/README.md +25 -0
  3. package/apps/cad-creator/shared/cad/package.json +1 -1
  4. package/apps/client-cms-editor/backend/package.json +4 -6
  5. package/apps/client-cms-editor/frontend/package.json +6 -8
  6. package/apps/client-cms-editor/frontend/tsconfig.json +27 -8
  7. package/apps/client-cms-editor/package.json +1 -1
  8. package/apps/client-cms-editor/shared/cms/package.json +4 -6
  9. package/docs/LOCAL_ENGINE_COMPUTE_AUDIT_PLAN.md +299 -0
  10. package/docs/REPO_FILE_MAP.txt +132 -0
  11. package/migrations/d1/0018_goap_control_plane_remaster.sql +40 -0
  12. package/migrations/d1/0019_agentsam_agent_run_plan_todo.sql +14 -0
  13. package/migrations/d1/README_PORTABLE_CONTROL_PLANE.md +20 -9
  14. package/migrations/runtime/0002_goap_blackboard_v1.sql +15 -0
  15. package/migrations/runtime/0004_agent_run_plan_linkage.sql +8 -0
  16. package/native/agentsam-machine/cli/Cargo.toml +8 -1
  17. package/native/agentsam-machine/cli/README.md +21 -0
  18. package/native/agentsam-machine/core/Cargo.toml +7 -0
  19. package/native/agentsam-machine/core/README.md +14 -0
  20. package/native/agentsam-machine/core/build.rs +33 -0
  21. package/native/agentsam-machine/core/contracts/source-types.v1.json +353 -0
  22. package/native/agentsam-machine/core/src/lib.rs +6 -0
  23. package/native/agentsam-machine/core/src/source_types.rs +2 -2
  24. package/package.json +31 -10
  25. package/packages/agentsam-brand/package.json +1 -1
  26. package/packages/agentsam-contracts/package.json +71 -20
  27. package/packages/agentsam-contracts/scripts/build.mjs +18 -0
  28. package/packages/agentsam-contracts/test/contracts.test.mjs +4 -1
  29. package/packages/agentsam-contracts/test/repository.test.mjs +4 -1
  30. package/packages/agentsam-contracts/tsconfig.build.json +10 -0
  31. package/packages/agentsam-errors/package.json +3 -2
  32. package/packages/agentsam-errors/src/index.js +1 -0
  33. package/packages/agentsam-errors/src/tool.js +56 -0
  34. package/packages/agentsam-errors/test/tool.test.mjs +58 -0
  35. package/packages/agentsam-goap/README.md +52 -0
  36. package/packages/agentsam-goap/package.json +37 -0
  37. package/packages/agentsam-goap/src/adapters/d1-sqlite.js +570 -0
  38. package/packages/agentsam-goap/src/adapters/memory.js +199 -0
  39. package/packages/agentsam-goap/src/contracts.js +226 -0
  40. package/packages/agentsam-goap/src/control-plane.js +112 -0
  41. package/packages/agentsam-goap/src/errors.js +157 -0
  42. package/packages/agentsam-goap/src/index.js +5 -0
  43. package/packages/agentsam-goap/src/world.js +202 -0
  44. package/packages/agentsam-goap/test/goap-control-plane.test.mjs +245 -0
  45. package/packages/agentsam-goap/test/world.test.mjs +79 -0
  46. package/packages/agentsam-knowledge/package.json +3 -2
  47. package/packages/agentsam-nav/package.json +1 -1
  48. package/packages/agentsam-queue-control/package.json +1 -1
  49. package/packages/agentsam-rapid-rust/src/main.rs +1 -0
  50. package/packages/agentsam-repository/package.json +3 -2
  51. package/packages/agentsam-repository/src/goap.js +13 -14
  52. package/packages/agentsam-repository/src/tickets.js +15 -22
  53. package/packages/agentsam-repository/test/goap-tickets-workspace-state.test.mjs +19 -8
  54. package/packages/agentsam-vault/package.json +8 -5
  55. package/packages/agentsam-workbench/package.json +44 -17
  56. package/packages/connectors/cloudflare/package.json +4 -2
  57. package/packages/heuristic-theme/package.json +1 -1
  58. package/packages/identity/package.json +4 -3
  59. package/packages/identity/tests/lane1-packed-consumer.test.mjs +10 -2
  60. package/packages/providers/completeful/package.json +1 -1
  61. package/packages/theme-church-site/README.md +2 -2
  62. package/packages/theme-church-site/package.json +3 -4
  63. package/packages/theme-church-site/src/index.js +1 -1
  64. package/packages/theme-church-site/test/theme.test.mjs +1 -1
  65. package/packages/theme-companions-site/README.md +2 -2
  66. package/packages/theme-companions-site/package.json +3 -4
  67. package/packages/theme-companions-site/src/index.js +1 -1
  68. package/packages/theme-companions-site/test/theme.test.mjs +1 -1
  69. package/packages/theme-floors-site/README.md +2 -2
  70. package/packages/theme-floors-site/package.json +3 -4
  71. package/packages/theme-floors-site/src/index.js +1 -1
  72. package/packages/theme-floors-site/test/theme.test.mjs +1 -1
  73. package/packages/theme-fuelnfree-site/README.md +2 -2
  74. package/packages/theme-fuelnfree-site/package.json +3 -4
  75. package/packages/theme-fuelnfree-site/src/index.js +1 -1
  76. package/packages/theme-fuelnfree-site/test/theme.test.mjs +1 -1
  77. package/packages/theme-handyman-site/README.md +2 -2
  78. package/packages/theme-handyman-site/package.json +3 -4
  79. package/packages/theme-handyman-site/src/index.js +1 -1
  80. package/packages/theme-handyman-site/test/theme.test.mjs +1 -1
  81. package/packages/theme-insurance-site/README.md +2 -2
  82. package/packages/theme-insurance-site/package.json +3 -4
  83. package/packages/theme-insurance-site/src/index.js +1 -1
  84. package/packages/theme-insurance-site/test/theme.test.mjs +1 -1
  85. package/packages/theme-scenes/package.json +1 -1
  86. package/packages/theme-shinshu-site/README.md +2 -2
  87. package/packages/theme-shinshu-site/package.json +3 -4
  88. package/packages/theme-shinshu-site/src/index.js +1 -1
  89. package/packages/theme-shinshu-site/test/theme.test.mjs +1 -1
  90. package/packages/work-graph/package.json +3 -2
  91. package/protocol/local-engine/benchmark.v1.schema.json +14 -0
  92. package/protocol/local-engine/engine.v1.schema.json +17 -0
  93. package/python/agentsam_sdk/repository/intelligence/discovery.py +27 -2
  94. package/python/agentsam_sdk/repository/intelligence/git.py +4 -0
  95. package/python/tests/test_repository_intelligence.py +30 -0
  96. package/src/cli/command-catalog.js +3 -1
  97. package/src/cli.js +20 -1
  98. package/src/commands/app.js +10 -0
  99. package/src/commands/engine.js +10 -0
  100. package/src/commands/goap-world.js +134 -0
  101. package/src/commands/goap.js +11 -4
  102. package/src/commands/machine-binary.js +33 -27
  103. package/src/commands/machine-runtime.js +266 -0
  104. package/src/commands/machine.js +155 -51
  105. package/src/commands/package.js +537 -0
  106. package/src/commands/plan-ledger.js +370 -0
  107. package/src/commands/plan.js +183 -0
  108. package/src/commands/runtime.js +25 -10
  109. package/src/commands/setup.js +30 -6
  110. package/src/commands/skill.js +78 -17
  111. package/src/commands/terminal.js +20 -8
  112. package/src/errors/contract.js +4 -4
  113. package/src/errors/diagnostic.js +1 -1
  114. package/src/errors/index.js +1 -1
  115. package/src/index.js +20 -0
  116. package/src/indexing/ingest/materials.js +237 -30
  117. package/src/knowledge/source.js +1 -1
  118. package/src/lib/setup/runtime.js +4 -2
  119. package/src/lib/slash-commands.js +1 -1
  120. package/src/local/runtime-store.js +24 -2
  121. package/src/local/sqlite.js +17 -0
  122. package/src/local-engine/assets.js +37 -0
  123. package/src/local-engine/audit.js +133 -0
  124. package/src/local-engine/benchmark.js +26 -0
  125. package/src/local-engine/contracts.js +101 -0
  126. package/src/local-engine/engines.js +142 -0
  127. package/src/local-engine/index.js +18 -0
  128. package/src/local-engine/runtime.js +39 -0
  129. package/src/sam/operations/package-audit.js +41 -0
  130. package/src/sam/seed.js +2 -0
  131. package/skills/grok-auth/SKILL.md +0 -110
  132. package/skills/grok-auth/agentsam.skill.json +0 -25
  133. package/skills/grok-auth/references/grok-identity.md +0 -64
  134. package/skills/grok-auth/references/per-user-data.md +0 -49
  135. package/skills/grok-auth/references/prewired-and-env.md +0 -54
  136. package/skills/grok-auth/references/session-ui.md +0 -133
  137. package/skills/grok-auth/references/sign-in-methods.md +0 -55
  138. package/skills/grok-auth/references/wiring.md +0 -71
  139. package/skills/grok-building-games/SKILL.md +0 -213
  140. package/skills/grok-building-games/agentsam.skill.json +0 -25
  141. package/skills/grok-building-games/references/3d-libs.md +0 -64
  142. package/skills/grok-building-games/references/ai-pathfinding.md +0 -122
  143. package/skills/grok-building-games/references/audio.md +0 -129
  144. package/skills/grok-building-games/references/babylon.md +0 -202
  145. package/skills/grok-building-games/references/collision-physics.md +0 -122
  146. package/skills/grok-building-games/references/ecs-architecture.md +0 -111
  147. package/skills/grok-building-games/references/game-feel-juice.md +0 -110
  148. package/skills/grok-building-games/references/genres/board-card-chess.md +0 -89
  149. package/skills/grok-building-games/references/genres/endless-runner.md +0 -83
  150. package/skills/grok-building-games/references/genres/fps.md +0 -105
  151. package/skills/grok-building-games/references/genres/platformer-2d.md +0 -97
  152. package/skills/grok-building-games/references/genres/puzzle-match3-tetris.md +0 -131
  153. package/skills/grok-building-games/references/genres/racing-kart.md +0 -106
  154. package/skills/grok-building-games/references/genres/topdown-twin-stick.md +0 -97
  155. package/skills/grok-building-games/references/genres/tower-defense.md +0 -84
  156. package/skills/grok-building-games/references/genres/voxel-minecraft.md +0 -89
  157. package/skills/grok-building-games/references/input.md +0 -139
  158. package/skills/grok-building-games/references/phaser.md +0 -277
  159. package/skills/grok-building-games/references/procedural-generation.md +0 -141
  160. package/skills/grok-building-games/references/save-persistence.md +0 -108
  161. package/skills/grok-building-games/references/threejs-foundational.md +0 -148
  162. package/skills/grok-controls/SKILL.md +0 -274
  163. package/skills/grok-controls/agentsam.skill.json +0 -25
  164. package/skills/grok-design-ui/SKILL.md +0 -122
  165. package/skills/grok-design-ui/agentsam.skill.json +0 -25
  166. package/skills/grok-design-ui/references/animations.md +0 -379
  167. package/skills/grok-design-ui/references/performance.md +0 -88
  168. package/skills/grok-design-ui/references/refined-ui.md +0 -384
  169. package/skills/grok-design-ui/references/surfaces.md +0 -247
  170. package/skills/grok-design-ui/references/typography.md +0 -123
  171. package/skills/grok-game-animation-frames/SKILL.md +0 -84
  172. package/skills/grok-game-animation-frames/agentsam.skill.json +0 -25
  173. package/skills/grok-game-asset-core/SKILL.md +0 -69
  174. package/skills/grok-game-asset-core/agentsam.skill.json +0 -25
  175. package/skills/grok-game-character-consistency/SKILL.md +0 -69
  176. package/skills/grok-game-character-consistency/agentsam.skill.json +0 -25
  177. package/skills/grok-game-tilesets/SKILL.md +0 -65
  178. package/skills/grok-game-tilesets/agentsam.skill.json +0 -25
  179. package/skills/grok-game-ui-icons/SKILL.md +0 -56
  180. package/skills/grok-game-ui-icons/agentsam.skill.json +0 -25
  181. package/skills/grok-generate2dmap/LICENSE +0 -21
  182. package/skills/grok-generate2dmap/SKILL.md +0 -120
  183. package/skills/grok-generate2dmap/SOURCE.md +0 -6
  184. package/skills/grok-generate2dmap/agentsam.skill.json +0 -25
  185. package/skills/grok-generate2dmap/references/deliverables.md +0 -101
  186. package/skills/grok-generate2dmap/references/layered-map-contract.md +0 -209
  187. package/skills/grok-generate2dmap/references/map-strategies.md +0 -341
  188. package/skills/grok-generate2dmap/references/object-production-gate.md +0 -24
  189. package/skills/grok-generate2dmap/references/pipeline.md +0 -149
  190. package/skills/grok-generate2dmap/references/prop-pack-contract.md +0 -174
  191. package/skills/grok-generate2dmap/references/side-scroll-stages.md +0 -29
  192. package/skills/grok-generate2dmap/scripts/compose_layered_preview.py +0 -157
  193. package/skills/grok-generate2dmap/scripts/extract_prop_pack.py +0 -369
  194. package/skills/grok-generate2dsprite/LICENSE +0 -21
  195. package/skills/grok-generate2dsprite/SKILL.md +0 -313
  196. package/skills/grok-generate2dsprite/SOURCE.md +0 -6
  197. package/skills/grok-generate2dsprite/agentsam.skill.json +0 -25
  198. package/skills/grok-generate2dsprite/references/modes.md +0 -124
  199. package/skills/grok-generate2dsprite/references/prompt-rules.md +0 -315
  200. package/skills/grok-generate2dsprite/scripts/generate2dsprite.py +0 -1031
  201. package/skills/grok-generate2dsprite/scripts/make_layout_guide.py +0 -109
  202. package/skills/grok-imagine/SKILL.md +0 -201
  203. package/skills/grok-imagine/agentsam.skill.json +0 -25
  204. package/skills/grok-multiplayer-p2p/SKILL.md +0 -111
  205. package/skills/grok-multiplayer-p2p/agentsam.skill.json +0 -25
  206. package/skills/grok-multiplayer-p2p/references/react-binding.md +0 -144
  207. package/skills/grok-multiplayer-p2p/references/signaling-relay.md +0 -269
  208. package/skills/grok-neon/SKILL.md +0 -157
  209. package/skills/grok-neon/agentsam.skill.json +0 -25
  210. package/skills/grok-og/SKILL.md +0 -102
  211. package/skills/grok-og/agentsam.skill.json +0 -25
  212. package/skills/grok-og/references/brand-pass.md +0 -53
  213. package/skills/grok-og/references/custom-card.md +0 -107
  214. package/skills/grok-og/references/favicon-and-icons.md +0 -48
  215. package/skills/grok-og/references/og-type-contract.md +0 -18
  216. package/skills/grok-og/references/placeholder-card.md +0 -21
  217. package/skills/grok-og/references/x-banner.md +0 -41
  218. package/skills/grok-threejs/SKILL.md +0 -67
  219. package/skills/grok-threejs/agentsam.skill.json +0 -25
  220. package/skills/grok-threejs/references/llms-full.txt +0 -2780
  221. package/skills/grok-video2dsprite/LICENSE +0 -21
  222. package/skills/grok-video2dsprite/SKILL.md +0 -236
  223. package/skills/grok-video2dsprite/SOURCE.md +0 -6
  224. package/skills/grok-video2dsprite/agentsam.skill.json +0 -25
  225. package/skills/grok-video2dsprite/references/pipeline.md +0 -90
  226. package/skills/grok-video2dsprite/references/prompt-rules.md +0 -63
  227. package/skills/grok-video2dsprite/scripts/video2dsprite.py +0 -490
  228. package/skills/grok-xai-api/SKILL.md +0 -152
  229. package/skills/grok-xai-api/agentsam.skill.json +0 -25
  230. package/test/account-session.test.mjs +0 -101
  231. package/test/agent-capabilities.test.mjs +0 -67
  232. package/test/app-authority-context.test.mjs +0 -32
  233. package/test/app-building-skills.test.mjs +0 -61
  234. package/test/apps-scaffold-contract.test.mjs +0 -115
  235. package/test/blender-cad.test.mjs +0 -146
  236. package/test/cad-docker.test.mjs +0 -96
  237. package/test/capabilities.test.mjs +0 -133
  238. package/test/cli/api-key-env-whoami.test.mjs +0 -129
  239. package/test/cli/catalog-authority.test.mjs +0 -64
  240. package/test/cli/codebaseindex-plan-ux.test.mjs +0 -37
  241. package/test/cli/eval-live.test.mjs +0 -219
  242. package/test/cli/go.test.mjs +0 -128
  243. package/test/cli/local-vault-and-provider-setup.test.mjs +0 -268
  244. package/test/cli/machine-command.test.mjs +0 -34
  245. package/test/cli/mcp-client.test.mjs +0 -256
  246. package/test/cli/preferences-runtime.test.mjs +0 -11
  247. package/test/cli/runtime-persist.test.mjs +0 -56
  248. package/test/cli/runtime-ui.test.mjs +0 -141
  249. package/test/cli/rust-command.test.mjs +0 -21
  250. package/test/cli/skill-npm-and-env.test.mjs +0 -52
  251. package/test/cli/status-actions.test.mjs +0 -88
  252. package/test/cli/wireframes-go-registry.test.mjs +0 -139
  253. package/test/cli-preferences.test.mjs +0 -46
  254. package/test/cloudflare-connector.test.mjs +0 -93
  255. package/test/cloudflare-runtime.test.mjs +0 -82
  256. package/test/context.test.mjs +0 -159
  257. package/test/credentials-audit.test.mjs +0 -113
  258. package/test/deploy-health-scan.test.mjs +0 -95
  259. package/test/deploy-receipt.test.mjs +0 -91
  260. package/test/dockerize.test.mjs +0 -93
  261. package/test/error-diagnostics.test.mjs +0 -124
  262. package/test/eval-context.test.mjs +0 -37
  263. package/test/execution-approvals.test.mjs +0 -27
  264. package/test/fixtures/cad/courtyard-house.json +0 -208
  265. package/test/fixtures/knowledge-rpc-worker.mjs +0 -16
  266. package/test/fixtures/project-authority/customer-app/.agentsam/app.json +0 -5
  267. package/test/fixtures/project-authority/customer-app/apps/my-product/index.ts +0 -1
  268. package/test/fixtures/project-authority/customer-app/wrangler.toml +0 -17
  269. package/test/gcloud-auth.test.mjs +0 -111
  270. package/test/go/build-source-identity.test.mjs +0 -31
  271. package/test/go/cloudflare-probe.test.mjs +0 -317
  272. package/test/go/distribution.test.mjs +0 -28
  273. package/test/google-cloud-connection.test.mjs +0 -83
  274. package/test/google-cloud-inventory.test.mjs +0 -64
  275. package/test/indexing-provider.test.mjs +0 -29
  276. package/test/init-options.test.mjs +0 -35
  277. package/test/integration/ai-access-onboarding.test.mjs +0 -47
  278. package/test/integration/app-command.test.mjs +0 -85
  279. package/test/integration/autorag-project-authority.integration.test.mjs +0 -51
  280. package/test/integration/autorag-runtime-discovery.test.mjs +0 -107
  281. package/test/integration/cad-discovery.test.mjs +0 -158
  282. package/test/integration/cad-docker-executor.test.mjs +0 -249
  283. package/test/integration/cad-execution.test.mjs +0 -184
  284. package/test/integration/cad-project-app.test.mjs +0 -31
  285. package/test/integration/cad-project-d1.test.mjs +0 -25
  286. package/test/integration/cad-project-native.test.mjs +0 -24
  287. package/test/integration/cad-project-workflow.test.mjs +0 -9
  288. package/test/integration/cad-project.test.mjs +0 -85
  289. package/test/integration/cli-help.test.mjs +0 -41
  290. package/test/integration/cms-app-scaffold.test.mjs +0 -77
  291. package/test/integration/cms-site-tenancy-contract.test.mjs +0 -268
  292. package/test/integration/codebaseindex-ingest.test.mjs +0 -255
  293. package/test/integration/core-client.integration.test.mjs +0 -55
  294. package/test/integration/database-hosted-honesty.test.mjs +0 -49
  295. package/test/integration/desktop-keychain-boundary.test.mjs +0 -45
  296. package/test/integration/error-runtime-rpc.test.mjs +0 -71
  297. package/test/integration/features-resolve.test.mjs +0 -147
  298. package/test/integration/hosted-work-host-authority.test.mjs +0 -47
  299. package/test/integration/icon-registry.test.mjs +0 -67
  300. package/test/integration/ingest-discover-models.test.mjs +0 -30
  301. package/test/integration/inspect-path-cli.test.mjs +0 -46
  302. package/test/integration/install-script.test.mjs +0 -110
  303. package/test/integration/inventory-core.test.mjs +0 -53
  304. package/test/integration/inventory-eligibility.test.mjs +0 -59
  305. package/test/integration/inventory-evidence.test.mjs +0 -125
  306. package/test/integration/knowledge-rpc.test.mjs +0 -112
  307. package/test/integration/local-fs.test.mjs +0 -113
  308. package/test/integration/local-provider-bridge.test.mjs +0 -65
  309. package/test/integration/local-studio-settings-production.test.mjs +0 -40
  310. package/test/integration/lockfile-sync.test.mjs +0 -26
  311. package/test/integration/merkle-cli.test.mjs +0 -61
  312. package/test/integration/merkle-persistence-identity.test.mjs +0 -48
  313. package/test/integration/plugins-cloudflare.integration.test.mjs +0 -28
  314. package/test/integration/provider-env-cli.test.mjs +0 -60
  315. package/test/integration/provider-factory.test.mjs +0 -197
  316. package/test/integration/repository-company-graph.test.mjs +0 -90
  317. package/test/integration/runtime-migrations.test.mjs +0 -87
  318. package/test/integration/runtime-status.integration.test.mjs +0 -227
  319. package/test/integration/sam-activity-recovery.test.mjs +0 -147
  320. package/test/integration/sam-decision.test.mjs +0 -584
  321. package/test/integration/sam-kernel.test.mjs +0 -99
  322. package/test/integration/sam-planning-astar.test.mjs +0 -279
  323. package/test/integration/scaffold-cloudflare.test.mjs +0 -46
  324. package/test/integration/skill-runtime.test.mjs +0 -240
  325. package/test/integration/storage-architecture.test.mjs +0 -154
  326. package/test/integration/store-discovery.test.mjs +0 -44
  327. package/test/integration/studio-fs-pty-e2e.test.mjs +0 -294
  328. package/test/integration/terminal-exec.integration.test.mjs +0 -86
  329. package/test/integration/theme-package-registry.test.mjs +0 -31
  330. package/test/integration/tool-runtime.test.mjs +0 -124
  331. package/test/integration/tool-schema.test.mjs +0 -59
  332. package/test/jr-dev-skill.test.mjs +0 -26
  333. package/test/knowledge-context-pack.test.mjs +0 -19
  334. package/test/knowledge-postgres.test.mjs +0 -40
  335. package/test/knowledge-service.test.mjs +0 -110
  336. package/test/knowledge.test.mjs +0 -206
  337. package/test/live/terminal-transport.live.test.mjs +0 -24
  338. package/test/local-sessions.test.mjs +0 -57
  339. package/test/local-studio-deploy.test.mjs +0 -83
  340. package/test/loopback-oauth.test.mjs +0 -53
  341. package/test/merkle-render.test.mjs +0 -31
  342. package/test/mini.test.mjs +0 -140
  343. package/test/model-catalog.test.mjs +0 -70
  344. package/test/models.test.mjs +0 -309
  345. package/test/npm10-lock.test.mjs +0 -29
  346. package/test/ollama.test.mjs +0 -137
  347. package/test/open-url.test.mjs +0 -64
  348. package/test/openai-responses.test.mjs +0 -155
  349. package/test/portable-context.test.mjs +0 -94
  350. package/test/project-config.test.mjs +0 -81
  351. package/test/project-rules.test.mjs +0 -44
  352. package/test/provider-credentials.test.mjs +0 -106
  353. package/test/rehydrate.test.mjs +0 -25
  354. package/test/release-hygiene.test.mjs +0 -42
  355. package/test/repository-snapshot-view.test.mjs +0 -112
  356. package/test/responses-runner.test.mjs +0 -465
  357. package/test/runtime-activity.test.mjs +0 -98
  358. package/test/sdk-worker-contract.test.mjs +0 -72
  359. package/test/security.test.mjs +0 -266
  360. package/test/setup-planner.test.mjs +0 -74
  361. package/test/setup-runtime.test.mjs +0 -51
  362. package/test/shell.test.mjs +0 -281
  363. package/test/skills.test.mjs +0 -22
  364. package/test/smoke.mjs +0 -122
  365. package/test/telemetry.test.mjs +0 -79
  366. package/test/terminal/local-pty.mock.test.mjs +0 -153
  367. package/test/terminal-machine-identity.test.mjs +0 -88
  368. package/test/theme-portability.test.mjs +0 -14
  369. package/test/tools-search.test.mjs +0 -73
  370. package/test/unit/website-assets-bindings.test.mjs +0 -60
  371. package/test/whoami-resume.test.mjs +0 -157
@@ -1,120 +0,0 @@
1
- ---
2
- name: generate2dmap
3
- description: >
4
- Generate production-oriented 2D game maps with `imagine_text_to_image`: RPG/top-down maps,
5
- side-scroller parallax stages, tilemaps, layered raster maps, prop packs,
6
- collision zones, and walkable areas. Use when building browser games that
7
- need real map art (not pure code-drawn tiles), layered props, or map
8
- collision metadata. Triggers on "map", "level", "stage", "tilemap",
9
- "overworld", "dungeon", "side scroller background", "prop pack", "2D map".
10
- metadata:
11
- short-description: "2D game maps: layered art, props, collision metadata"
12
- user-invocable: false
13
- ---
14
-
15
- # Generate2dmap
16
-
17
- ## App-builder / Grok environment
18
-
19
- | Item | Value |
20
- | --- | --- |
21
- | Skill dir / scripts | `.grok/skills/generate2dmap/`, run as `python3 .grok/skills/generate2dmap/scripts/<script>.py …` |
22
- | Image tools | `imagine_text_to_image` / `imagine_image_to_image` (path-based; see **`imagine`**); inspect output with `read_file` on the PNG path (not Codex view_image) |
23
- | Generated image path | `imagine_text_to_image` → sandbox `file_path` → copy into `assets/map/`; Pillow is preinstalled |
24
- | Default `engine_target` | `raw_canvas` or `Phaser` for this TanStack browser sandbox — only use Godot/Unity/Tiled when the user explicitly wants those exports |
25
- | Related skills | **`generate2dsprite`** (character/FX sprites; prop packs still use this skill's extract script), **`building-games`**, **`imagine`** |
26
-
27
- ## Decide the pipeline first
28
-
29
- Build the smallest playable map bundle that satisfies the game: choose a
30
- product-level `map_mode`, then the lower-level axes (`visual_model`,
31
- `runtime_object_model`, `collision_model`, `engine_target`).
32
-
33
- - `tile_mode` — editable tile/grid maps: Pokemon-like routes, top-down RPG towns, platformer tilemaps, or any project already on Tiled/LDtk/Godot/Unity/Phaser tilemaps.
34
- - `scene_mode` — foundation base plus separate props: tower defense, survivors-like arenas, cozy top-down showcase maps.
35
- - `side_scroll_mode` — parallax side-scroller stages: Mega Man-like, action platformers, Metroidvania rooms, runners, brawlers.
36
- - `grid_mode` — rule-heavy grids: tactical RPGs, factory/automation, board/card battlers, build grids.
37
- - `room_chunk_mode` — modular rooms/chunks: roguelike dungeons, Metroidvania networks, procedural assembly.
38
- - `baked_scene_mode` — explicitly flat, non-playable scenes only: title/menu screens, battle backdrops, visual-novel scenes, concept art.
39
-
40
- Use user-specified parameters when present; otherwise infer the lightest playable
41
- pipeline from the existing game, camera, collision needs, map scale, and editing
42
- needs. When mode and axes disagree, the mode's playable/editable contract wins.
43
- Genre routing, per-mode axis defaults, presets, and the escalation heuristic are in
44
- `references/map-strategies.md` — read it whenever the choice is not obvious.
45
-
46
- **A playable map is never one baked image.** For any request implying a playable
47
- map, level, stage, room, prototype, or engine scene, the deliverable must expose
48
- gameplay geometry and objects as separate layers, props, tile/object data,
49
- collision, zones, or engine-native scene nodes. A baked image may be a background,
50
- reference, or preview artifact — never the runtime map — unless the user
51
- explicitly asked for a flat background only.
52
-
53
- **Scenes and maps only.** Do not generate character, enemy, boss, NPC, player,
54
- projectile, or animation sprites here; those belong to `$generate2dsprite`. Maps
55
- carry scene hooks (spawn markers, patrol/encounter zones, arena entrances, gates,
56
- exits, camera triggers) as **metadata**, not as drawn art.
57
-
58
- ## Art comes from image generation, and you write the prompts
59
-
60
- - `imagine_text_to_image` is the default art source for base maps, parallax plates,
61
- references, prop sheets, and tileset art. Default `art_style` is `clean_hd`
62
- (hand-painted HD, sharp readable shapes, low texture noise, no chunky pixels);
63
- use `pixel_inspired` or `retro_pixel` only when asked.
64
- - **Write every creative prompt yourself.** Scripts may assemble, slice,
65
- chroma-key, crop, validate, compose previews, and emit JSON/engine files — never
66
- write creative prompts or draw final art. Procedural/placeholder art only when
67
- the user explicitly asks for placeholders, fixtures, debug maps, or scaffolding.
68
- With a tile engine target, generate the tileset art first, then script only the
69
- layers, collision, zones, and scene wiring.
70
- - Save each prompt beside its asset as `<asset>.prompt.txt` (or an explicit
71
- manifest field) whenever the run creates new visual assets.
72
- - **A reference handoff is a file path, not a sentence.** To build on an earlier
73
- image, pass its sandbox `file_path` to `imagine_image_to_image` (and `read_file`
74
- it so you can see it), then name the concrete features to preserve: camera
75
- framing, horizon, road/water shapes, terrain boundaries, entrances/exits,
76
- landmarks. A filename, "based on the map", or the image merely being visible in
77
- conversation is **not** a handoff — stop and pass the path.
78
-
79
- ## Keep runtime objects out of the base layer
80
-
81
- The first generated base/background/foundation image may hold only stable, non-interactive
82
- foundation art — ground material, paths, roads, water, cliffs, floor patterns, lane
83
- markings and build pads; for side views sky, far/mid scenery, silhouettes, atmosphere; for
84
- tilemaps tileset art as editable layers. It must **not** contain tall props, buildings,
85
- trees, rocks, crates, signs, doors, gates, pickups, chests, checkpoints, hazards, traps,
86
- turrets, ladders, foreground occluders, destructibles, actors, enemies, NPCs, UI, labels,
87
- or anything needing collision, interaction, reuse, y-sorting, animation, or its own render
88
- order — regenerate a foundation-only base, or demote such an image to a reference
89
- artifact.
90
-
91
- ## Reference mockups are checkpoints, not deliverables
92
-
93
- Dressed references (top-down) and stage references (side-view) plan placement in-world:
94
- natural game-world objects or subtle blockout geometry, at most **9 distinct visible
95
- object candidates** (repeats count once, then recur in placement metadata), **no
96
- annotation graphics** (circles, arrows, outlines, labels, text, callouts, legends,
97
- measurement lines), and no non-visual metadata — spawns, triggers, patrol hints, camera
98
- bounds are written later as scene hooks.
99
-
100
- **Having generated one, do not stop there.** Continue through
101
- `references/object-production-gate.md`: re-`read_file` both images, build the object
102
- list, generate the final separate objects, write placement / collision / scene-hook
103
- metadata, compose the QA preview. Reference-only output is an incomplete run unless
104
- the user explicitly asked for a concept image.
105
-
106
- ## Depth for the pipeline you picked — open these before producing assets
107
-
108
- - Layered raster maps → `references/layered-map-contract.md` (layer types, base and
109
- prop prompt patterns, prop metadata, render order, collision, QA checklist).
110
- - `side_scroll_mode` → `references/side-scroll-stages.md`: the `stage_canvas`
111
- decision, the named scenery-only parallax layers, and the mandatory in-world
112
- stage reference before any platform/object work.
113
- - Any prop or scene-object generation → classify each object first, then follow
114
- `references/prop-pack-contract.md`: only compact props may share a square prop
115
- pack; platforms, floors, bridges, gates, buildings and anything collision-aligned
116
- go one-by-one, as a platform strip, a custom wide pack, or tile/object layers.
117
- - Parameters, the step-by-step workflow, and the `extract_prop_pack.py` /
118
- `compose_layered_preview.py` commands → `references/pipeline.md`.
119
- - Deliverable lists per pipeline and the validation checklist →
120
- `references/deliverables.md`; run both before calling a map done.
@@ -1,6 +0,0 @@
1
- # Source
2
-
3
- Vendored from [agent-sprite-forge](https://github.com/0x0funky/agent-sprite-forge) (`53dce6055984c610d833e77887939cbd0fb1c92b`).
4
- MIT License — see `LICENSE`.
5
-
6
- Adapted for Grok Build / app-builder sandbox (image tool paths, `read_file` for image inspection, workspace-relative script paths).
@@ -1,25 +0,0 @@
1
- {
2
- "schema": "agentsam.skill.v1",
3
- "id": "grok-generate2dmap",
4
- "name": "Grok \u00b7 generate2dmap",
5
- "description": "2D game maps: layered art, props, collision metadata",
6
- "icon": "skill",
7
- "slash": {
8
- "suggested": "/grok-generate2dmap"
9
- },
10
- "instructions": {
11
- "source": "local_file",
12
- "ref": "SKILL.md"
13
- },
14
- "execution": {
15
- "mode": "turn",
16
- "tools": [],
17
- "operations": [],
18
- "capabilities": []
19
- },
20
- "provenance": {
21
- "source": "apps/local-studio/.grok/skills",
22
- "vendor": "grok",
23
- "status": "imported"
24
- }
25
- }
@@ -1,101 +0,0 @@
1
- # Expected deliverables and validation
2
-
3
- Check the deliverable list for the pipeline you chose before calling a map
4
- done, then run the validation list against what you actually wrote.
5
-
6
- For a baked raster map:
7
-
8
- - `assets/map/<name>.png`
9
- - optional `<name>.prompt.txt`
10
- - optional `data/<name>-collision.json` or `data/<name>-zones.json`
11
- - code changes that load/use the image
12
-
13
- Use this deliverable only for non-playable backgrounds or explicitly requested flat images. If actors must move through the scene, collide with level geometry, jump on platforms, collect items, trigger doors, or edit the level later, upgrade to a layered, parallax-stage, tilemap, or engine-native deliverable.
14
-
15
- For a layered raster map:
16
-
17
- - `assets/map/<name>-base.png`
18
- - `assets/map/<name>-base.prompt.txt`
19
- - optional `assets/map/<name>-dressed-reference.png` for prop planning
20
- - `assets/props/<prop>/prop.png` folders, from one-by-one props or extracted prop packs
21
- - `data/<name>-props.json` placement metadata
22
- - `data/<name>-collision.json` and/or `data/<name>-zones.json` when gameplay needs them
23
- - `assets/map/<name>-layered-preview.png`
24
- - code changes that load the base, props, y-sorted renderables, collision, and zones
25
-
26
- For a tilemap or layered tilemap:
27
-
28
- - image-generated or user-supplied `assets/tilesets/<name>.png`
29
- - optional tile slicing/atlas metadata
30
- - engine-native tile layer data such as Tiled JSON, LDtk data, Godot TileMap scene data, Unity tile placement data, or project-native JSON
31
- - object layers for spawns, exits, interactables, blockers, and zones
32
- - a flattened preview assembled from the visual tileset and layer data
33
- - no script-drawn final tileset art unless the user explicitly asked for procedural placeholders
34
-
35
- For a playable side-view scrolling/action stage:
36
-
37
- - image-generated parallax scenery layers such as `assets/map/<name>-sky.png`, `assets/map/<name>-far-bg.png`, `assets/map/<name>-mid-bg.png`, `assets/map/<name>-near-bg.png`, and optional `assets/map/<name>-foreground-overlay.png`
38
- - one recorded `stage_canvas` shared by the primary parallax layers, `stage-reference`, and `stage-preview`
39
- - `assets/map/<name>-background.prompt.txt` and prompt files/manifests for other generated visual assets
40
- - `assets/map/<name>-stage-reference.png` as an in-world reference mockup for platform/object placement
41
- - separate image-generated platform, terrain-chunk, foreground-occluder, hazard, door, pickup, checkpoint, gate, and exit sprites when these are visible scene objects
42
- - `data/<name>-objects.json` or engine-native object layers for platforms, terrain chunks, hazards, pickups, doors, checkpoints, gates, exits, and foreground occluders
43
- - `data/<name>-scene-hooks.json` or engine-native metadata for player spawns, actor spawn marker metadata, encounter/arena triggers, camera bounds, and exit links
44
- - `data/<name>-collision.json` with explicit platform/solid geometry independent from the background pixels
45
- - `assets/map/<name>-stage-preview.png` composed from the background plus objects for QA only
46
- - code or scene changes that load the background, render object layers, and use the collision/object data as runtime gameplay data
47
-
48
- Do not accept a single generated side-view action/platformer stage image plus collision rectangles as the final playable map. The stage must expose platforms or walkable lanes, hazards, doors, pickups, checkpoints, gates, exits, scene hooks, and camera bounds as separate runtime objects, tile/object layers, or metadata. Runtime `background` fields must point to the scenery-only background or parallax layer, never to `stage-reference` or `stage-preview`; previews are QA artifacts only.
49
-
50
- For `grid_mode`:
51
-
52
- - image-generated or user-supplied tileset/grid art
53
- - grid dimensions, cell size, and map data in project-native JSON, Tiled JSON, LDtk, Godot TileMap, Unity Tilemap, or equivalent
54
- - cell metadata for walkable/buildable, movement cost, terrain effects, resources, collision, and placement rules
55
- - object layers for units, buildings, machines, cards/board slots, exits, spawns, and triggers
56
- - a QA preview that can show optional debug grid/collision overlays
57
-
58
- For `room_chunk_mode`:
59
-
60
- - reusable chunk art or tile/object layers
61
- - chunk metadata with `chunk_id`, size, entrances/exits, connection sockets, spawn markers, blockers, hazards, and camera bounds
62
- - collision and seam validation metadata
63
- - a chunk preview and, when multiple chunks exist, an assembled layout preview
64
-
65
- For `scene_mode`:
66
-
67
- - foundation-only `assets/map/<name>-base.png`
68
- - in-world `assets/map/<name>-dressed-reference.png`
69
- - separate props/interactables/blockers from one-by-one assets or compact prop packs
70
- - placement, collision, zones, exits, camera bounds, and scene-hook metadata
71
- - a QA preview composed from the base plus final runtime objects
72
-
73
- For a prop pack:
74
-
75
- - raw generated sheet with solid `#FF00FF` background
76
- - extracted `assets/props/<prop>/prop.png` files
77
- - `prop-pack.json` extraction manifest
78
- - no `edge_touch` entries for accepted props
79
-
80
- ## Validation
81
-
82
- Always validate what the chosen pipeline requires:
83
-
84
- - map files exist and have expected dimensions
85
- - prompt files or prompt manifest fields exist for generated visible assets
86
- - transparent props contain alpha
87
- - prop pack manifests parse and accepted props do not touch cell edges
88
- - placement JSON parses and referenced prop files exist
89
- - collision/zones JSON parses when present
90
- - critical spawn, path, entrance, blocker, and zone points behave as expected
91
- - playable/editable layered maps use a foundation-only base/background and do not bake runtime-controlled props, interactables, hazards, doors, gates, pickups, actors, foreground occluders, or reusable scene objects into the base
92
- - playable stages have explicit runtime objects or metadata for every gameplay-relevant platform or walkable lane, blocker, hazard, door, pickup, checkpoint, gate, exit, player spawn, actor spawn marker, encounter/arena trigger, and camera bound
93
- - playable side-view backgrounds are scenery-only and do not contain baked-in foreground gameplay platforms, hazards, pickups, doors, gates, checkpoints, or other reusable runtime objects
94
- - `side_scroll_mode` primary parallax layers, stage references, and stage previews match the recorded `stage_canvas`; any repeatable strips or differently sized foreground sprites declare display size, anchor, scale, and repeat policy
95
- - `side_scroll_mode` parallax layers have explicit render order, scroll factors, dimensions, loop/repeat policy, and are not used as collision sources
96
- - `grid_mode` outputs include grid dimensions, cell size, cell metadata, object layers, and validation of critical walkable/buildable cells
97
- - `room_chunk_mode` outputs include chunk dimensions, exits/connection sockets, seam validation, collision, and at least one assembled or per-chunk preview
98
- - stage-reference maps preserve the background dimensions and their object plan matches the final object/collision metadata
99
- - stage-reference and dressed-reference mockups contain no more than 9 distinct visible runtime prop/object candidates unless the user explicitly requested a larger pass
100
- - reference mockups are followed by final props/objects, placement metadata, collision/scene-hook metadata, and a QA preview unless the user explicitly requested reference-only output
101
- - flattened preview looks coherent at the game's camera size
@@ -1,209 +0,0 @@
1
- # Layered Raster Map Contract
2
-
3
- Use this contract for hand-painted or generated 2D RPG scenes, monster-taming exploration maps, shrine/town/dungeon maps, and any top-down scene where actors must interact with props.
4
-
5
- ## Layer Types
6
-
7
- 1. `base`: one raster image containing only terrain and ground-level details.
8
- 2. `props`: transparent sprites anchored in map coordinates.
9
- 3. `actors`: player, NPCs, monsters, pickups, and moving objects.
10
- 4. `foreground`: optional transparent sprites that must cover actors.
11
- 5. `collision`: structured metadata, not pixels.
12
- 6. `zones`: structured metadata for encounters, rest, triggers, exits, and dialogue.
13
- 7. `preview`: flattened QA artifact only.
14
-
15
- ## Base Map Prompt Pattern
16
-
17
- Default to clean HD maps for gameplay readability unless the user explicitly asks for pixel art:
18
-
19
- ```text
20
- Create a clean hand-painted top-down 2D RPG game map.
21
- This is a BASE GROUND MAP ONLY for a layered raster exploration scene.
22
- Style: clean HD game asset style, sharp readable terrain shapes, crisp silhouettes, smooth painted surfaces, low texture noise, controlled accent lighting.
23
- Do not make pixel art. Avoid chunky pixels, retro dithering, noisy microtexture, tiny debris, clutter, blurry painterly mush, and over-detailed grime.
24
- Include terrain, paths, grass/water/floor materials, ground markings, floor patterns, and flat anchor pads.
25
- Do not include tall collidable objects: no buildings, gates, fences, lanterns, trees, signs, barrels, NPCs, monsters, UI, or text.
26
- Leave clear empty spaces where props will be placed later.
27
- Make walkable paths and zone boundaries easy to trace.
28
- ```
29
-
30
- If the user wants a pixel-adjacent look, use `clean modern pixel-art-inspired` and still forbid heavy dithering and noisy microtexture. Use `16-bit pixel art`, `retro JRPG pixel art`, or similar terms only when the user explicitly asks for a retro pixel look.
31
-
32
- ## Prop Generation
33
-
34
- Use `$generate2dsprite` when the map needs reusable transparent props. Choose one of two approaches:
35
-
36
- - One-by-one props: safest for large, important, irregular, animated, or identity-critical props.
37
- - Prop packs: faster for sets of small/medium static environmental props.
38
-
39
- Read [prop-pack-contract.md](prop-pack-contract.md) before batching props.
40
-
41
- ## Dressed Reference Pass
42
-
43
- For generated layered raster maps, use a dressed reference pass before final prop extraction:
44
-
45
- 1. Generate the base as ground-only terrain.
46
- 2. Hand the base to built-in `imagine_image_to_image` as a real reference: pass its sandbox `file_path` to `imagine_image_to_image`. Also call `read_file` so you can see it. Do not expect a filesystem path in the prompt, or the image merely being visible in conversation, to work as the visual reference.
47
- 3. Ask for a dressed-reference version of the same map by adding props only.
48
- 4. Preserve exact camera, framing, dimensions, terrain, paths, water, anchor pads, collision-relevant boundaries, and map edges.
49
- 5. Use the dressed reference to choose prop identities and placement coordinates, but compose the final runtime preview from the original base plus extracted transparent props.
50
-
51
- The dressed reference is a planning artifact. Do not ship it as the only runtime map when props need collision, y-sort, occlusion, or reuse.
52
-
53
- Prompt shape:
54
-
55
- ```text
56
- Use the provided reference image as the exact base map reference.
57
- Create a dressed-reference version of the same map by adding props only.
58
- Preserve exactly: camera, framing, image size, terrain, paths, water, anchor pads, rocks, map boundaries, and all walkable routes.
59
- Do not crop, zoom, rotate, repaint, or redesign the terrain.
60
- Add these props naturally on top of the existing map: <list>.
61
- Props should feel intentionally placed along paths, landmarks, encounter-zone edges, rest points, and entrances.
62
- No UI, no text, no labels, no watermark.
63
- ```
64
-
65
- ## One-By-One Prop Prompt Pattern
66
-
67
- ```text
68
- Create a single <prop> prop for a top-down 2D RPG map.
69
- Use the same selected map art style: clean HD hand-painted by default, pixel-inspired only when requested, retro pixel only when explicitly requested.
70
- Mostly front-facing top-down RPG object view: upright objects are vertical and centered, with only a small visible top face. Avoid strong isometric diagonal rotation.
71
- Full object visible, centered, crisp but not chunky outlines.
72
- Background must be 100% solid flat #FF00FF magenta, no gradients, no texture, no shadows, no floor plane.
73
- No text, labels, UI, or watermark.
74
- Entire prop must fit fully inside the image with generous magenta margin on all sides; no part may touch or cross the image edge.
75
- ```
76
-
77
- Recommended processing:
78
-
79
- ```bash
80
- python /path/to/generate2dsprite.py process \
81
- --input <raw.png> \
82
- --target asset \
83
- --mode single \
84
- --rows 1 \
85
- --cols 1 \
86
- --cell-size 256 \
87
- --output-dir assets/props/<prop> \
88
- --fit-scale 0.9 \
89
- --align feet \
90
- --component-mode largest \
91
- --component-padding 8 \
92
- --min-component-area 200 \
93
- --threshold 100 \
94
- --edge-threshold 150 \
95
- --edge-clean-depth 2
96
- ```
97
-
98
- Use a larger `--cell-size` for buildings, trees, gates, statues, or large signs.
99
-
100
- ## Prop Metadata
101
-
102
- Use explicit map-space dimensions:
103
-
104
- ```json
105
- {
106
- "props": [
107
- {
108
- "id": "torii",
109
- "image": "assets/props/torii/prop.png",
110
- "x": 836,
111
- "y": 850,
112
- "w": 380,
113
- "h": 306,
114
- "sortY": 850,
115
- "layer": "props"
116
- }
117
- ]
118
- }
119
- ```
120
-
121
- Anchor conventions:
122
-
123
- - `x`: center of the prop's base/feet.
124
- - `y`: bottom of the prop in map coordinates.
125
- - `w`, `h`: rendered size in map units.
126
- - `sortY`: y-depth used for render ordering. Use base `y` for normal props.
127
- - `layer`: `props` for y-sorted objects, `foreground` for always-over actors overlays.
128
-
129
- ## Render Order
130
-
131
- Recommended order:
132
-
133
- ```text
134
- base map
135
- ground effects / zone glimmers
136
- renderables sorted by sortY:
137
- props
138
- actors
139
- foreground overlays
140
- debug collision
141
- HUD/UI
142
- ```
143
-
144
- If an NPC must always appear above the player, draw that NPC after the y-sorted pass or set a high `sortY`.
145
-
146
- ## Collision Metadata
147
-
148
- Keep collision readable and hand-editable:
149
-
150
- ```json
151
- {
152
- "mapSize": { "width": 1672, "height": 941 },
153
- "spawn": { "x": 836, "y": 782 },
154
- "walkBounds": [
155
- { "id": "main-courtyard", "type": "ellipse", "x": 838, "y": 548, "rx": 604, "ry": 304 }
156
- ],
157
- "blockers": [
158
- { "id": "torii-left-pillar", "type": "rect", "x": 704, "y": 668, "w": 52, "h": 176 }
159
- ],
160
- "zones": {
161
- "grass": { "type": "rect", "x": 180, "y": 306, "w": 382, "h": 302 },
162
- "rest": { "type": "circle", "x": 760, "y": 548, "radius": 122 }
163
- }
164
- }
165
- ```
166
-
167
- Guidelines:
168
-
169
- - Use blockers for prop bases, not full sprite silhouettes.
170
- - Keep entrances open by testing path centers.
171
- - Use ellipses for lanterns, rocks, trees, and basins.
172
- - Use rectangles for fences, walls, buildings, gates, bridges, and posts.
173
- - Use polygons only when rects/ellipses produce poor walkability.
174
-
175
- ## Preview Composition
176
-
177
- Use `scripts/compose_layered_preview.py` to flatten a base map and placement JSON:
178
-
179
- ```bash
180
- python3 .grok/skills/generate2dmap/scripts/compose_layered_preview.py \
181
- --base assets/map/shrine-base.png \
182
- --placements data/shrine-props.json \
183
- --output assets/map/shrine-layered-preview.png
184
- ```
185
-
186
- The script assumes prop placement uses center-bottom anchoring unless a prop explicitly sets another anchor.
187
-
188
- ## QA Checklist
189
-
190
- - Spawn point is walkable.
191
- - Main path centers are walkable.
192
- - Gate centers are walkable if the player should pass through.
193
- - Gate pillars block.
194
- - Fences block but entrances remain open.
195
- - Interactables block at their base but can be approached.
196
- - Encounter/rest zones are reachable.
197
- - Actors sort correctly when walking in front of and behind tall props.
198
- - The flattened preview matches the in-game layered render closely enough for visual review.
199
-
200
- ## Anti-Patterns
201
-
202
- Avoid:
203
-
204
- - Cutting props out of a fully baked generated map.
205
- - Using a complete flattened map as the only source when collision/occlusion matters.
206
- - Baking text, signs, UI, NPCs, or monsters into the base.
207
- - Letting prop sprites touch image edges.
208
- - Treating transparent PNG bounding boxes as collision automatically.
209
- - Updating art without updating collision and critical point tests.