@playcraft/cli 0.1.53-beta → 0.1.54

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 (400) hide show
  1. package/README.md +3 -62
  2. package/dist/agent/local-backend.js +1 -1
  3. package/dist/cli-root-help.js +0 -2
  4. package/dist/commands/build-all.js +19 -5
  5. package/dist/commands/build.js +28 -15
  6. package/dist/commands/create.js +33 -26
  7. package/dist/commands/login.js +42 -84
  8. package/dist/commands/skills.js +0 -4
  9. package/dist/commands/tools-3d.js +0 -11
  10. package/dist/commands/tools-generation.js +0 -6
  11. package/dist/commands/tools.js +0 -2
  12. package/dist/config.js +4 -59
  13. package/dist/index.js +3 -42
  14. package/dist/remix/clone.js +0 -2
  15. package/dist/remix/init-template.js +0 -2
  16. package/dist/remix/pull.js +0 -2
  17. package/dist/remix/push.js +1 -21
  18. package/dist/utils/agent-api-client.js +30 -210
  19. package/dist/utils/playcraft-http-client.js +4 -6
  20. package/package.json +5 -15
  21. package/SKILLS_REGISTRY.md +0 -149
  22. package/dist/auth/account-activation.js +0 -157
  23. package/dist/auth/messages.js +0 -30
  24. package/dist/commands/build-temp.js +0 -26
  25. package/dist/commands/platform-skills.generated.js +0 -19
  26. package/dist/commands/playable.js +0 -53
  27. package/dist/commands/preview-runtime.js +0 -21
  28. package/dist/commands/tools-batch.js +0 -113
  29. package/dist/commands/video.js +0 -122
  30. package/dist/commands/workspace-runtime.js +0 -54
  31. package/dist/commands/workspace.js +0 -40
  32. package/dist/preview-runtime/distribution.js +0 -77
  33. package/dist/project-skills/builtin-import.js +0 -225
  34. package/dist/project-skills/commands.js +0 -77
  35. package/dist/project-skills/lifecycle.js +0 -28
  36. package/dist/project-skills/local-run.js +0 -112
  37. package/dist/project-skills/local-store.js +0 -221
  38. package/dist/project-skills/messages.js +0 -80
  39. package/dist/project-skills/reconcile.js +0 -62
  40. package/dist/project-skills/remote-cache.js +0 -51
  41. package/dist/project-skills/validation.js +0 -19
  42. package/dist/recording/messages.js +0 -40
  43. package/dist/recording/project-digest.js +0 -85
  44. package/dist/recording/recorder.js +0 -293
  45. package/dist/recording/scenario.js +0 -50
  46. package/dist/skill-registry/client.js +0 -345
  47. package/dist/skill-registry/commands.js +0 -180
  48. package/dist/skill-registry/evaluation-client.js +0 -156
  49. package/dist/skill-registry/evaluation-commands.js +0 -174
  50. package/dist/skill-registry/messages.js +0 -177
  51. package/dist/skill-registry/package.js +0 -275
  52. package/dist/skill-registry/platform-package.js +0 -100
  53. package/dist/utils/environment-endpoints.js +0 -17
  54. package/dist/utils/error-diagnostics.js +0 -20
  55. package/dist/utils/tool-operation-journal.js +0 -124
  56. package/dist/utils/video-evidence-git.js +0 -81
  57. package/dist/video-replication/client.js +0 -234
  58. package/dist/video-replication/comparison-evidence.js +0 -149
  59. package/dist/video-replication/comparison-files.js +0 -57
  60. package/dist/video-replication/comparison-log.js +0 -72
  61. package/dist/video-replication/comparison-messages.js +0 -104
  62. package/dist/video-replication/comparison-output.js +0 -63
  63. package/dist/video-replication/comparison-preflight.js +0 -66
  64. package/dist/video-replication/comparison.js +0 -230
  65. package/dist/video-replication/diagnostics.js +0 -41
  66. package/dist/video-replication/evidence.js +0 -165
  67. package/dist/video-replication/media.js +0 -112
  68. package/dist/video-replication/messages.js +0 -97
  69. package/dist/workspace/messages.js +0 -67
  70. package/dist/workspace/transfer-client.js +0 -237
  71. package/dist/workspace/transfer-errors.js +0 -48
  72. package/dist/workspace-runtime/batch/content-changes.js +0 -30
  73. package/dist/workspace-runtime/batch/control.js +0 -86
  74. package/dist/workspace-runtime/batch/deliver.js +0 -173
  75. package/dist/workspace-runtime/batch/freeze.js +0 -101
  76. package/dist/workspace-runtime/batch/generate.js +0 -249
  77. package/dist/workspace-runtime/batch/git.js +0 -40
  78. package/dist/workspace-runtime/batch/occupancy.js +0 -8
  79. package/dist/workspace-runtime/batch/policy.js +0 -70
  80. package/dist/workspace-runtime/batch/prepare.js +0 -317
  81. package/dist/workspace-runtime/batch/processes.js +0 -72
  82. package/dist/workspace-runtime/batch/records.js +0 -113
  83. package/dist/workspace-runtime/batch/routes.js +0 -61
  84. package/dist/workspace-runtime/batch/source-candidate.js +0 -86
  85. package/dist/workspace-runtime/batch/source-capture.js +0 -146
  86. package/dist/workspace-runtime/batch/source-failure.js +0 -43
  87. package/dist/workspace-runtime/batch/source-publish.js +0 -130
  88. package/dist/workspace-runtime/codex/app-server.js +0 -1065
  89. package/dist/workspace-runtime/codex/compact.js +0 -46
  90. package/dist/workspace-runtime/codex/config-toml.js +0 -107
  91. package/dist/workspace-runtime/codex/delivery-tools.js +0 -144
  92. package/dist/workspace-runtime/codex/jsonrpc-stdio.js +0 -145
  93. package/dist/workspace-runtime/codex/launcher-client.js +0 -177
  94. package/dist/workspace-runtime/codex/loopback.js +0 -146
  95. package/dist/workspace-runtime/codex/mcp-config.js +0 -39
  96. package/dist/workspace-runtime/codex/model-broker.js +0 -263
  97. package/dist/workspace-runtime/codex/native-adapter.js +0 -9
  98. package/dist/workspace-runtime/codex/permissions.js +0 -79
  99. package/dist/workspace-runtime/codex/thread-image.js +0 -38
  100. package/dist/workspace-runtime/codex/tool-response.js +0 -10
  101. package/dist/workspace-runtime/codex/ui-instructions.js +0 -4
  102. package/dist/workspace-runtime/codex/ui-tools.js +0 -203
  103. package/dist/workspace-runtime/codex/work-mode.js +0 -15
  104. package/dist/workspace-runtime/main.js +0 -10
  105. package/dist/workspace-runtime/persistence/journal.js +0 -365
  106. package/dist/workspace-runtime/persistence/native-subagents.js +0 -162
  107. package/dist/workspace-runtime/persistence/sqlite-client.js +0 -77
  108. package/dist/workspace-runtime/persistence/sqlite-worker.js +0 -1161
  109. package/dist/workspace-runtime/persistence/stopped-execution.js +0 -77
  110. package/dist/workspace-runtime/previews/diagnostics.js +0 -44
  111. package/dist/workspace-runtime/previews/output.js +0 -36
  112. package/dist/workspace-runtime/previews/publish.js +0 -283
  113. package/dist/workspace-runtime/previews/runtime-preview.js +0 -251
  114. package/dist/workspace-runtime/previews/single-file.js +0 -43
  115. package/dist/workspace-runtime/processes/managed-writes.js +0 -69
  116. package/dist/workspace-runtime/serve.js +0 -441
  117. package/dist/workspace-runtime/server/accept-operation.js +0 -61
  118. package/dist/workspace-runtime/server/asset-transfers.js +0 -63
  119. package/dist/workspace-runtime/server/auth.js +0 -21
  120. package/dist/workspace-runtime/server/connectivity.js +0 -211
  121. package/dist/workspace-runtime/server/desktop-host.js +0 -429
  122. package/dist/workspace-runtime/server/desktop-preview-config.js +0 -81
  123. package/dist/workspace-runtime/server/desktop-preview-service.js +0 -157
  124. package/dist/workspace-runtime/server/desktop-preview-static.js +0 -53
  125. package/dist/workspace-runtime/server/desktop-preview.js +0 -189
  126. package/dist/workspace-runtime/server/dispatch.js +0 -1655
  127. package/dist/workspace-runtime/server/endpoints.js +0 -21
  128. package/dist/workspace-runtime/server/execution-group.js +0 -90
  129. package/dist/workspace-runtime/server/http.js +0 -1339
  130. package/dist/workspace-runtime/server/lock.js +0 -53
  131. package/dist/workspace-runtime/server/operation-record.js +0 -33
  132. package/dist/workspace-runtime/server/rfb-watch-gate.js +0 -168
  133. package/dist/workspace-runtime/server/session-restore.js +0 -84
  134. package/dist/workspace-runtime/server/source-uploader.js +0 -138
  135. package/dist/workspace-runtime/server/submit-operation.js +0 -41
  136. package/dist/workspace-runtime/server/terminal-host.js +0 -366
  137. package/dist/workspace-runtime/server/types.js +0 -1
  138. package/dist/workspace-runtime/server/workspace-transfer.js +0 -168
  139. package/dist/workspace-runtime/verify-artifact.js +0 -59
  140. package/dist/workspace-runtime/workspaces/append-only-log.js +0 -62
  141. package/dist/workspace-runtime/workspaces/archive.js +0 -207
  142. package/dist/workspace-runtime/workspaces/artifact-events.js +0 -55
  143. package/dist/workspace-runtime/workspaces/artifact-files.js +0 -199
  144. package/dist/workspace-runtime/workspaces/artifact-receipts.js +0 -89
  145. package/dist/workspace-runtime/workspaces/artifacts.js +0 -282
  146. package/dist/workspace-runtime/workspaces/asset-library-import.js +0 -387
  147. package/dist/workspace-runtime/workspaces/asset-publication-access.js +0 -25
  148. package/dist/workspace-runtime/workspaces/asset-transfer-dependencies.js +0 -81
  149. package/dist/workspace-runtime/workspaces/asset-transfer-publish.js +0 -438
  150. package/dist/workspace-runtime/workspaces/asset-transfer-storage.js +0 -389
  151. package/dist/workspace-runtime/workspaces/attachment-content.js +0 -73
  152. package/dist/workspace-runtime/workspaces/attachments.js +0 -185
  153. package/dist/workspace-runtime/workspaces/batch-commit.js +0 -142
  154. package/dist/workspace-runtime/workspaces/binary-content.js +0 -65
  155. package/dist/workspace-runtime/workspaces/binary-write.js +0 -117
  156. package/dist/workspace-runtime/workspaces/cli-context.js +0 -23
  157. package/dist/workspace-runtime/workspaces/cli-credentials.js +0 -115
  158. package/dist/workspace-runtime/workspaces/composer-context.js +0 -147
  159. package/dist/workspace-runtime/workspaces/context-error.js +0 -2
  160. package/dist/workspace-runtime/workspaces/delivery-build.js +0 -331
  161. package/dist/workspace-runtime/workspaces/delivery-store.js +0 -168
  162. package/dist/workspace-runtime/workspaces/delivery.js +0 -64
  163. package/dist/workspace-runtime/workspaces/dependencies.js +0 -279
  164. package/dist/workspace-runtime/workspaces/developer-command.js +0 -98
  165. package/dist/workspace-runtime/workspaces/directories.js +0 -132
  166. package/dist/workspace-runtime/workspaces/directory-access.js +0 -37
  167. package/dist/workspace-runtime/workspaces/directory-attachments.js +0 -245
  168. package/dist/workspace-runtime/workspaces/directory-create.js +0 -57
  169. package/dist/workspace-runtime/workspaces/directory-maintenance.js +0 -111
  170. package/dist/workspace-runtime/workspaces/directory-mutations.js +0 -238
  171. package/dist/workspace-runtime/workspaces/directory-revisions.js +0 -56
  172. package/dist/workspace-runtime/workspaces/directory-stats.js +0 -49
  173. package/dist/workspace-runtime/workspaces/disk-snapshot.js +0 -31
  174. package/dist/workspace-runtime/workspaces/empty-template.js +0 -42
  175. package/dist/workspace-runtime/workspaces/file-content.js +0 -48
  176. package/dist/workspace-runtime/workspaces/files-search.js +0 -116
  177. package/dist/workspace-runtime/workspaces/files.js +0 -150
  178. package/dist/workspace-runtime/workspaces/git-credential-broker.js +0 -312
  179. package/dist/workspace-runtime/workspaces/git-credential-helper.js +0 -68
  180. package/dist/workspace-runtime/workspaces/git-direct-store.js +0 -155
  181. package/dist/workspace-runtime/workspaces/git.js +0 -670
  182. package/dist/workspace-runtime/workspaces/instructions.js +0 -56
  183. package/dist/workspace-runtime/workspaces/json5-edit.js +0 -313
  184. package/dist/workspace-runtime/workspaces/library-attachments.js +0 -268
  185. package/dist/workspace-runtime/workspaces/operation-log.js +0 -23
  186. package/dist/workspace-runtime/workspaces/optional-platform-skills.js +0 -14
  187. package/dist/workspace-runtime/workspaces/parameter-agent-inputs.js +0 -97
  188. package/dist/workspace-runtime/workspaces/parameter-agent-protocol.js +0 -40
  189. package/dist/workspace-runtime/workspaces/parameter-agent-store.js +0 -58
  190. package/dist/workspace-runtime/workspaces/parameter-agent.js +0 -284
  191. package/dist/workspace-runtime/workspaces/parameter-assets.js +0 -189
  192. package/dist/workspace-runtime/workspaces/parameters.js +0 -329
  193. package/dist/workspace-runtime/workspaces/prepare.js +0 -278
  194. package/dist/workspace-runtime/workspaces/registry.js +0 -251
  195. package/dist/workspace-runtime/workspaces/remix-references.js +0 -301
  196. package/dist/workspace-runtime/workspaces/revisions.js +0 -31
  197. package/dist/workspace-runtime/workspaces/session-image.js +0 -104
  198. package/dist/workspace-runtime/workspaces/shared-git.js +0 -40
  199. package/dist/workspace-runtime/workspaces/skill-artifact-loader.js +0 -95
  200. package/dist/workspace-runtime/workspaces/skills.js +0 -191
  201. package/dist/workspace-runtime/workspaces/theme-asset-index.js +0 -157
  202. package/dist/workspace-runtime/workspaces/transfer-quota.js +0 -69
  203. package/dist/workspace-runtime/workspaces/transfer.js +0 -471
  204. package/dist/workspace-runtime/workspaces/turn-changes.js +0 -75
  205. package/dist/workspace-runtime/workspaces/video-attachments.js +0 -49
  206. package/project-template/.claude/skills/playcraft-replica-validation/SKILL.md +0 -25
  207. package/project-template/.claude/skills/playcraft-replica-validation/references/contracts.md +0 -79
  208. package/project-template/.claude/skills/playcraft-video-understanding/SKILL.md +0 -29
  209. package/project-template/.claude/skills/playcraft-video-understanding/references/contracts.md +0 -37
  210. package/project-template-v2/.claude/agents/artist.md +0 -82
  211. package/project-template-v2/.claude/agents/developer.md +0 -153
  212. package/project-template-v2/.claude/agents/game-designer.md +0 -264
  213. package/project-template-v2/.claude/agents/refs/artist-art-style-catalog.md +0 -533
  214. package/project-template-v2/.claude/agents/refs/artist-color-audio-recipes.md +0 -153
  215. package/project-template-v2/.claude/agents/refs/artist-dimension-axis.md +0 -27
  216. package/project-template-v2/.claude/agents/refs/artist-master-composite-recipes.md +0 -208
  217. package/project-template-v2/.claude/agents/refs/atom-skill-library.md +0 -81
  218. package/project-template-v2/.claude/agents/refs/developer-impl-cookbook.md +0 -432
  219. package/project-template-v2/.claude/agents/refs/framework-5-component-filter.md +0 -252
  220. package/project-template-v2/.claude/agents/refs/framework-game-feel-juice.md +0 -266
  221. package/project-template-v2/.claude/agents/refs/framework-mda.md +0 -147
  222. package/project-template-v2/.claude/agents/refs/game-designer-gameplay-sufficiency.md +0 -123
  223. package/project-template-v2/.claude/agents/refs/ta-3d-flip-recipe.md +0 -88
  224. package/project-template-v2/.claude/agents/refs/ta-atlas-deliverable-standard.md +0 -67
  225. package/project-template-v2/.claude/agents/refs/ta-batch-pipeline-recipes.md +0 -120
  226. package/project-template-v2/.claude/agents/refs/ta-image-generation-detail.md +0 -300
  227. package/project-template-v2/.claude/agents/refs/ta-image-ops-reference.md +0 -495
  228. package/project-template-v2/.claude/agents/refs/ta-pipeline-cookbook.md +0 -1141
  229. package/project-template-v2/.claude/agents/refs/ta-tools-reference.md +0 -111
  230. package/project-template-v2/.claude/agents/refs/ta-vfx-preset-catalog.md +0 -365
  231. package/project-template-v2/.claude/agents/refs/threejs-cannon-pitfalls.md +0 -412
  232. package/project-template-v2/.claude/agents/reviewer.md +0 -75
  233. package/project-template-v2/.claude/agents/technical-artist.md +0 -86
  234. package/project-template-v2/.claude/hooks/snapshot-milestone.mjs +0 -243
  235. package/project-template-v2/.claude/hooks/user-prompt.mjs +0 -133
  236. package/project-template-v2/.claude/settings.json +0 -33
  237. package/project-template-v2/.claude/skills/brainstorming/SKILL.md +0 -161
  238. package/project-template-v2/.claude/skills/brainstorming/scripts/frame-template.html +0 -270
  239. package/project-template-v2/.claude/skills/brainstorming/scripts/helper.js +0 -177
  240. package/project-template-v2/.claude/skills/brainstorming/scripts/server.cjs +0 -354
  241. package/project-template-v2/.claude/skills/brainstorming/scripts/start-server.sh +0 -148
  242. package/project-template-v2/.claude/skills/brainstorming/scripts/stop-server.sh +0 -56
  243. package/project-template-v2/.claude/skills/brainstorming/scripts/wait-for-selection.sh +0 -62
  244. package/project-template-v2/.claude/skills/brainstorming/spec-document-reviewer-prompt.md +0 -49
  245. package/project-template-v2/.claude/skills/brainstorming/visual-companion.md +0 -309
  246. package/project-template-v2/.claude/skills/playcraft-ad-psychology/SKILL.md +0 -182
  247. package/project-template-v2/.claude/skills/playcraft-art-style-guide/SKILL.md +0 -123
  248. package/project-template-v2/.claude/skills/playcraft-asset-state-sheet/SKILL.md +0 -205
  249. package/project-template-v2/.claude/skills/playcraft-audio-generation/SKILL.md +0 -280
  250. package/project-template-v2/.claude/skills/playcraft-batch-pipeline/SKILL.md +0 -184
  251. package/project-template-v2/.claude/skills/playcraft-build-optimizer/SKILL.md +0 -306
  252. package/project-template-v2/.claude/skills/playcraft-image-generation/SKILL.md +0 -370
  253. package/project-template-v2/.claude/skills/playcraft-image-generation/reference/build-sprite-sheet.template.mjs +0 -123
  254. package/project-template-v2/.claude/skills/playcraft-image-generation/reference/compare-style.template.mjs +0 -254
  255. package/project-template-v2/.claude/skills/playcraft-image-generation/reference/gen-batch-sprite.template.mjs +0 -333
  256. package/project-template-v2/.claude/skills/playcraft-image-generation/reference/gen-batch.template.mjs +0 -95
  257. package/project-template-v2/.claude/skills/playcraft-image-generation/reference/gen-edit-variants.template.mjs +0 -118
  258. package/project-template-v2/.claude/skills/playcraft-image-generation/reference/process-batch.template.mjs +0 -136
  259. package/project-template-v2/.claude/skills/playcraft-image-generation/reference/prompt-cookbook.md +0 -397
  260. package/project-template-v2/.claude/skills/playcraft-image-generation/reference/validate-sprite-sheet.template.mjs +0 -296
  261. package/project-template-v2/.claude/skills/playcraft-image-ops/SKILL.md +0 -122
  262. package/project-template-v2/.claude/skills/playcraft-image-processing/SKILL.md +0 -219
  263. package/project-template-v2/.claude/skills/playcraft-masking/SKILL.md +0 -373
  264. package/project-template-v2/.claude/skills/playcraft-playable-optimization/SKILL.md +0 -161
  265. package/project-template-v2/.claude/skills/playcraft-research/SKILL.md +0 -215
  266. package/project-template-v2/.claude/skills/playcraft-skill-recommender/SKILL.md +0 -382
  267. package/project-template-v2/.claude/skills/playcraft-sprite-generation/SKILL.md +0 -423
  268. package/project-template-v2/.claude/skills/playcraft-sprite-remix/SKILL.md +0 -158
  269. package/project-template-v2/.claude/skills/playcraft-sprite-sheet/SKILL.md +0 -100
  270. package/project-template-v2/.claude/skills/playcraft-storyboard/SKILL.md +0 -167
  271. package/project-template-v2/.claude/skills/playcraft-style-qa/SKILL.md +0 -270
  272. package/project-template-v2/.claude/skills/playcraft-text-rendering/SKILL.md +0 -236
  273. package/project-template-v2/.claude/skills/playcraft-vfx-animation/SKILL.md +0 -130
  274. package/project-template-v2/.claude/skills/playwright-cli/SKILL.md +0 -390
  275. package/project-template-v2/.claude/skills/playwright-cli/references/element-attributes.md +0 -23
  276. package/project-template-v2/.claude/skills/playwright-cli/references/playwright-tests.md +0 -39
  277. package/project-template-v2/.claude/skills/playwright-cli/references/request-mocking.md +0 -87
  278. package/project-template-v2/.claude/skills/playwright-cli/references/running-code.md +0 -240
  279. package/project-template-v2/.claude/skills/playwright-cli/references/session-management.md +0 -226
  280. package/project-template-v2/.claude/skills/playwright-cli/references/spec-driven-testing.md +0 -308
  281. package/project-template-v2/.claude/skills/playwright-cli/references/storage-state.md +0 -275
  282. package/project-template-v2/.claude/skills/playwright-cli/references/test-generation.md +0 -134
  283. package/project-template-v2/.claude/skills/playwright-cli/references/tracing.md +0 -142
  284. package/project-template-v2/.claude/skills/playwright-cli/references/video-recording.md +0 -153
  285. package/project-template-v2/.claude/skills/session-analyzer/SKILL.md +0 -386
  286. package/project-template-v2/.claude/skills/session-analyzer/scripts/execution-breakdown.mjs +0 -182
  287. package/project-template-v2/.claude/skills/session-analyzer/scripts/find-turns.mjs +0 -72
  288. package/project-template-v2/.claude/skills/session-analyzer/scripts/heavy-output.mjs +0 -121
  289. package/project-template-v2/.claude/skills/session-analyzer/scripts/resolve-session.mjs +0 -102
  290. package/project-template-v2/.claude/skills/session-analyzer/scripts/subagent-stats.mjs +0 -127
  291. package/project-template-v2/.claude/skills/session-analyzer/scripts/subagent-tool-timeline.mjs +0 -106
  292. package/project-template-v2/.claude/skills/session-analyzer/scripts/time-gaps.mjs +0 -128
  293. package/project-template-v2/.claude/skills/session-analyzer/scripts/turn-timeline.mjs +0 -67
  294. package/project-template-v2/.claude/snapshot.mjs +0 -263
  295. package/project-template-v2/.playcraft/skills.lock.json +0 -152
  296. package/project-template-v2/CLAUDE.md +0 -146
  297. package/project-template-v2/assets/audio/bgm/.gitkeep +0 -0
  298. package/project-template-v2/assets/audio/sfx/.gitkeep +0 -0
  299. package/project-template-v2/assets/bundles/.gitkeep +0 -0
  300. package/project-template-v2/assets/images/bg/.gitkeep +0 -0
  301. package/project-template-v2/assets/images/reference/.gitkeep +0 -0
  302. package/project-template-v2/assets/images/storyboard/.gitkeep +0 -0
  303. package/project-template-v2/assets/images/tiles/.gitkeep +0 -0
  304. package/project-template-v2/assets/images/ui/.gitkeep +0 -0
  305. package/project-template-v2/assets/images/vfx/.gitkeep +0 -0
  306. package/project-template-v2/assets/models/.gitkeep +0 -0
  307. package/project-template-v2/docs/harness/iteration-1/context-flow.md +0 -254
  308. package/project-template-v2/docs/harness/iteration-1/generate-flow.md +0 -91
  309. package/project-template-v2/docs/harness/iteration-1/ideate-flow.md +0 -214
  310. package/project-template-v2/docs/harness/iteration-1/optimize-flow.md +0 -75
  311. package/project-template-v2/docs/harness/iteration-1/wrapup-flow.md +0 -63
  312. package/project-template-v2/docs/harness/iteration-2/context-flow.md +0 -223
  313. package/project-template-v2/docs/harness/iteration-2/generate-flow.md +0 -129
  314. package/project-template-v2/docs/harness/iteration-2/ideate-flow.md +0 -267
  315. package/project-template-v2/docs/harness/iteration-2/optimize-flow.md +0 -164
  316. package/project-template-v2/docs/harness/iteration-2/wrapup-flow.md +0 -115
  317. package/project-template-v2/docs/harness/orchestrator-flow.md +0 -364
  318. package/project-template-v2/docs/project-state.json +0 -60
  319. package/project-template-v2/docs/project-state.md +0 -72
  320. package/project-template-v2/docs/standards/README.md +0 -225
  321. package/project-template-v2/docs/standards/agent-behavior-standards.md +0 -174
  322. package/project-template-v2/docs/standards/artifacts/design-brief.md +0 -19
  323. package/project-template-v2/docs/standards/artifacts/design.md +0 -22
  324. package/project-template-v2/docs/standards/artifacts/game-code.md +0 -41
  325. package/project-template-v2/docs/standards/artifacts/todo-list.md +0 -41
  326. package/project-template-v2/docs/standards/iter1-agent-behavior-standards.md +0 -343
  327. package/project-template-v2/game/index.ts +0 -18
  328. package/project-template-v2/globals.d.ts +0 -51
  329. package/project-template-v2/index.css +0 -34
  330. package/project-template-v2/index.html +0 -18
  331. package/project-template-v2/main.ts +0 -9
  332. package/project-template-v2/package.json +0 -46
  333. package/project-template-v2/skills/_shared/scripts/dispatch-clear.mjs +0 -31
  334. package/project-template-v2/skills/_shared/scripts/dispatch-set.mjs +0 -86
  335. package/project-template-v2/skills/_shared/scripts/dod-check.mjs +0 -153
  336. package/project-template-v2/skills/_shared/scripts/handoff-append.mjs +0 -70
  337. package/project-template-v2/skills/_shared/scripts/lib/validator-artifacts.mjs +0 -91
  338. package/project-template-v2/skills/_shared/scripts/pipeline/dod-config.mjs +0 -131
  339. package/project-template-v2/skills/_shared/scripts/pipeline/index.mjs +0 -80
  340. package/project-template-v2/skills/_shared/scripts/pipeline/iteration-1-core.mjs +0 -90
  341. package/project-template-v2/skills/_shared/scripts/pipeline/iteration-2-wrap.mjs +0 -93
  342. package/project-template-v2/skills/_shared/scripts/pipeline/iteration-3-visual.mjs +0 -23
  343. package/project-template-v2/skills/_shared/scripts/render-project-state.mjs +0 -230
  344. package/project-template-v2/skills/_shared/scripts/state-advance-stage.mjs +0 -58
  345. package/project-template-v2/skills/_shared/scripts/state-get.mjs +0 -339
  346. package/project-template-v2/skills/_shared/scripts/state-handoff.mjs +0 -39
  347. package/project-template-v2/skills/_shared/scripts/state-set.mjs +0 -94
  348. package/project-template-v2/skills/_shared/scripts/state-store.mjs +0 -783
  349. package/project-template-v2/skills/_shared/scripts/todo-add.mjs +0 -88
  350. package/project-template-v2/skills/_shared/scripts/todo-get.mjs +0 -130
  351. package/project-template-v2/skills/_shared/scripts/todo-remove.mjs +0 -33
  352. package/project-template-v2/skills/_shared/scripts/todo-set.mjs +0 -47
  353. package/project-template-v2/skills/_shared/scripts/verify-asset-code-sync.mjs +0 -268
  354. package/project-template-v2/skills/_shared/scripts/verify-env.mjs +0 -285
  355. package/project-template-v2/skills/_shared/scripts/verify-placeholders.mjs +0 -161
  356. package/project-template-v2/skills/playable-autoplay/SKILL.md +0 -176
  357. package/project-template-v2/skills/playable-autoplay/agents/openai.yaml +0 -4
  358. package/project-template-v2/skills/playable-debug/SKILL.md +0 -116
  359. package/project-template-v2/skills/playable-debug/agents/openai.yaml +0 -4
  360. package/project-template-v2/skills/playable-debug/references/debug-config.md +0 -40
  361. package/project-template-v2/skills/playable-record/SKILL.md +0 -140
  362. package/project-template-v2/skills/playable-record/scripts/lib/dev-server.mjs +0 -104
  363. package/project-template-v2/skills/playable-record/scripts/lib/record-audio-bridge.js +0 -141
  364. package/project-template-v2/skills/playable-record/scripts/record-playable.mjs +0 -425
  365. package/project-template-v2/skills/playable-record/scripts/verify-contract.mjs +0 -261
  366. package/project-template-v2/skills/playable-record/scripts/verify-firstwin.mjs +0 -398
  367. package/project-template-v2/skills/playable-record/scripts/verify-fusion.mjs +0 -322
  368. package/project-template-v2/skills/playable-record/scripts/verify-lifecycle.mjs +0 -105
  369. package/project-template-v2/skills/playable-record/scripts/verify-vlm-video.mjs +0 -230
  370. package/project-template-v2/skills/playable-validate/SKILL.md +0 -61
  371. package/project-template-v2/skills/playable-validate/validation-rules.md +0 -14
  372. package/project-template-v2/skills/playable-verify-ui/SKILL.md +0 -63
  373. package/project-template-v2/skills/playable-verify-ui/scripts/lib/__init__.py +0 -1
  374. package/project-template-v2/skills/playable-verify-ui/scripts/lib/config_expr.js +0 -218
  375. package/project-template-v2/skills/playable-verify-ui/scripts/lib/node_utils.js +0 -51
  376. package/project-template-v2/skills/playable-verify-ui/scripts/lib/profile_loader.py +0 -59
  377. package/project-template-v2/skills/playable-verify-ui/scripts/lib/report.py +0 -106
  378. package/project-template-v2/skills/playable-verify-ui/scripts/lib/runtime_contract.js +0 -116
  379. package/project-template-v2/skills/playable-verify-ui/scripts/verify_fetch_antipatterns.py +0 -59
  380. package/project-template-v2/skills/playable-verify-ui/scripts/verify_hardcoded_layout.js +0 -64
  381. package/project-template-v2/skills/playable-verify-ui/scripts/verify_runtime_contract.js +0 -58
  382. package/project-template-v2/skills/playable-verify-ui/scripts/verify_text_overlap.py +0 -333
  383. package/project-template-v2/ta-workspace/scripts/.gitkeep +0 -0
  384. package/project-template-v2/tsconfig.json +0 -20
  385. package/project-template-v2/vite.config.ts +0 -27
  386. package/project-templates/batch-locks/phaser.yaml +0 -922
  387. package/project-templates/batch-locks/threejs.yaml +0 -978
  388. package/project-templates/empty/AGENTS.md +0 -41
  389. package/project-templates/empty/gitignore +0 -33
  390. package/templates/preview-runtime/v1/README.md +0 -71
  391. package/templates/preview-runtime/v1/build-preview.mjs +0 -1324
  392. package/templates/preview-runtime/v1/manifest.json +0 -17
  393. package/templates/preview-runtime/v1/release-guard.mjs +0 -87
  394. package/templates/preview-runtime/v1/runtime.d.mts +0 -3
  395. package/templates/preview-runtime/v1/runtime.d.ts +0 -3
  396. package/templates/preview-runtime/v1/runtime.mjs +0 -1121
  397. package/templates/preview-runtime/v1/types/adapters.d.ts +0 -26
  398. package/templates/preview-runtime/v1/types/preview.d.ts +0 -23
  399. package/templates/preview-runtime/v1/types/protocol.d.ts +0 -94
  400. package/templates/preview-runtime/v1/types/runtime.d.ts +0 -14
@@ -1,296 +0,0 @@
1
- /**
2
- * validate-sprite-sheet.template.mjs
3
- *
4
- * 精灵图技术正确性验证脚本。
5
- * TA 在 Compliance Gate 前运行,确认精灵图尺寸、帧数、通道数均符合要求。
6
- *
7
- * 使用方法:
8
- * cp .claude/skills/playcraft-image-generation/reference/validate-sprite-sheet.template.mjs \
9
- * ta-workspace/scripts/validate-sprite-sheet.mjs
10
- * # 修改下方 SHEETS 数组后运行:
11
- * node ta-workspace/scripts/validate-sprite-sheet.mjs
12
- *
13
- * 输出示例:
14
- * [VALIDATE] tile_bounce_anim.png
15
- * 尺寸验算: 512×256 = 4cols × 128px × 2rows × 128px ✅
16
- * 通道数: 4 (RGBA) ✅
17
- * 帧数: 8 帧(JSON 验证: N/A — animate 命令无 JSON)
18
- * 帧内容抽查 (帧 0, 4, 7): 全部非空 ✅
19
- * [VALIDATE] explosion_small.png
20
- * 尺寸验算: 预设 4cols × 8frames → 期望 W=cols×frameW ✅
21
- * 通道数: 4 (RGBA) ✅
22
- *
23
- * 注意:脚本使用 `playcraft image info --json` 获取图片信息。
24
- * JSON 验证仅适用于 `sprite-sheet` 命令输出(有配套 .json 文件)。
25
- */
26
-
27
- import { execSync } from 'child_process';
28
- import { existsSync, readFileSync, appendFileSync, mkdirSync } from 'fs';
29
- import path from 'path';
30
-
31
- // ─── CONFIG ───────────────────────────────────────────────────────────────────
32
-
33
- /**
34
- * 每个条目描述一张精灵图的期望参数。
35
- * source: 'sprite-sheet' | 'animate' | 'use-vfx'
36
- * - sprite-sheet: 有配套 JSON,可做完整验证
37
- * - animate: 无 JSON,从 stdout 记录的参数验证
38
- * - use-vfx: 无 JSON,从 list-vfx --json 记录的参数验证
39
- */
40
- const SHEETS = [
41
- {
42
- file: 'assets/images/tiles/tile_bounce_anim.png',
43
- source: 'animate', // 'sprite-sheet' | 'animate' | 'use-vfx'
44
- columns: 4,
45
- frameWidth: 128,
46
- frameHeight: 128,
47
- frameCount: 8,
48
- padding: 0,
49
- jsonFile: null, // animate 无 JSON,填 null
50
- },
51
- {
52
- file: 'assets/images/vfx/explosion.png',
53
- source: 'use-vfx',
54
- columns: 4,
55
- frameWidth: 128, // use-vfx 预设宽高需用 playcraft image info 确认
56
- frameHeight: 128,
57
- frameCount: 8,
58
- padding: 0,
59
- jsonFile: null,
60
- },
61
- // sprite-sheet 示例(有 JSON):
62
- // {
63
- // file: 'assets/images/tiles/tile_atlas.png',
64
- // source: 'sprite-sheet',
65
- // columns: 6,
66
- // frameWidth: 128,
67
- // frameHeight: 128,
68
- // frameCount: 34,
69
- // padding: 2,
70
- // jsonFile: 'assets/images/tiles/tile_atlas.json',
71
- // },
72
- ];
73
-
74
- const LOG_FILE = 'ta-workspace/logs/sprite-validate.log';
75
-
76
- // ─── HELPERS ──────────────────────────────────────────────────────────────────
77
-
78
- function imageInfo(filePath) {
79
- try {
80
- const raw = execSync(
81
- `playcraft image info --input "${filePath}" --json`,
82
- { encoding: 'utf-8', stdio: ['pipe', 'pipe', 'pipe'] },
83
- );
84
- return JSON.parse(raw);
85
- } catch {
86
- return null;
87
- }
88
- }
89
-
90
- function pass(msg) { return `✅ ${msg}`; }
91
- function fail(msg) { return `❌ ${msg}`; }
92
-
93
- // ─── VALIDATION ───────────────────────────────────────────────────────────────
94
-
95
- async function validateSheet(sheet) {
96
- const lines = [`\n[VALIDATE] ${sheet.file} (source: ${sheet.source})`];
97
- let allPassed = true;
98
-
99
- if (!existsSync(sheet.file)) {
100
- lines.push(` ${fail('文件不存在 — 请先完成资产生产')}`);
101
- return { passed: false, lines };
102
- }
103
-
104
- // ── 1. 获取实际图片信息 ────────────────────────────────────────────────
105
- const info = imageInfo(sheet.file);
106
- if (!info) {
107
- lines.push(` ${fail('无法读取图片信息(playcraft image info 失败)')}`);
108
- return { passed: false, lines };
109
- }
110
-
111
- const actualW = info.width;
112
- const actualH = info.height;
113
- const actualChannels = info.channels ?? 4;
114
-
115
- // ── 2. 尺寸数学验算 ────────────────────────────────────────────────────
116
- const rows = Math.ceil(sheet.frameCount / sheet.columns);
117
- const expectedW = sheet.columns * sheet.frameWidth + (sheet.columns - 1) * sheet.padding;
118
- const expectedH = rows * sheet.frameHeight + (rows - 1) * sheet.padding;
119
-
120
- const dimOk = actualW === expectedW && actualH === expectedH;
121
- if (dimOk) {
122
- lines.push(
123
- ` ${pass(`尺寸验算: ${actualW}×${actualH} = ${sheet.columns}cols×${sheet.frameWidth}px + ${rows}rows×${sheet.frameHeight}px (padding=${sheet.padding}px)`)}`
124
- );
125
- } else {
126
- allPassed = false;
127
- lines.push(
128
- ` ${fail(`尺寸不匹配: 实际 ${actualW}×${actualH},期望 ${expectedW}×${expectedH}`)}`
129
- );
130
- lines.push(` → 检查 columns/frameWidth/frameHeight/padding 参数是否与生成命令一致`);
131
- lines.push(` → animate 命令 padding 固定为 0;sprite-sheet 命令默认 padding 为 0`);
132
- }
133
-
134
- // ── 3. 通道数验证 ──────────────────────────────────────────────────────
135
- if (actualChannels === 4) {
136
- lines.push(` ${pass(`通道数: 4 (RGBA,支持透明背景)`)}`);
137
- } else {
138
- allPassed = false;
139
- lines.push(
140
- ` ${fail(`通道数: ${actualChannels}(不是 4/RGBA)— 透明区域将渲染为黑色`)}`
141
- );
142
- lines.push(` → 如果原图有透明背景,确认去背景步骤正确(remove-background 或生成时使用绿幕策略)`);
143
- }
144
-
145
- // ── 4. JSON 验证(仅 sprite-sheet 命令)────────────────────────────────
146
- if (sheet.source === 'sprite-sheet') {
147
- const jsonPath = sheet.jsonFile || sheet.file.replace(/\.png$/i, '.json');
148
- if (!existsSync(jsonPath)) {
149
- allPassed = false;
150
- lines.push(` ${fail(`JSON 文件不存在: ${jsonPath}`)}`);
151
- lines.push(` → sprite-sheet 命令应自动生成 .json,确认命令执行成功`);
152
- } else {
153
- try {
154
- const json = JSON.parse(readFileSync(jsonPath, 'utf-8'));
155
- const frameKeys = Object.keys(json.frames ?? {});
156
- const jsonFrameCount = frameKeys.length;
157
-
158
- if (jsonFrameCount === sheet.frameCount) {
159
- lines.push(` ${pass(`JSON 帧数: ${jsonFrameCount} 帧`)}`);
160
- } else {
161
- allPassed = false;
162
- lines.push(
163
- ` ${fail(`JSON 帧数不匹配: JSON 中 ${jsonFrameCount} 帧,期望 ${sheet.frameCount} 帧`)}`
164
- );
165
- }
166
-
167
- // 验证 meta.size
168
- const metaW = json.meta?.size?.w;
169
- const metaH = json.meta?.size?.h;
170
- if (metaW === actualW && metaH === actualH) {
171
- lines.push(` ${pass(`JSON meta.size: ${metaW}×${metaH} 与实际图片一致`)}`);
172
- } else {
173
- allPassed = false;
174
- lines.push(
175
- ` ${fail(`JSON meta.size 不匹配: JSON 中 ${metaW}×${metaH},实际 ${actualW}×${actualH}`)}`
176
- );
177
- }
178
-
179
- // 帧名字典序警告(数字后缀需补零)
180
- const hasUnpaddedNumbers = frameKeys.some(k => /[^0]_\d\.png$/.test(k));
181
- if (hasUnpaddedNumbers) {
182
- lines.push(
183
- ` ⚠️ 帧名警告: 检测到未补零的数字后缀(如 _1.png vs _10.png)`
184
- );
185
- lines.push(
186
- ` → 字典序下 f_10.png 排在 f_2.png 之前,导致动画帧乱序`
187
- );
188
- lines.push(` → 输入帧文件名应补零对齐(f_01.png, f_02.png...)`);
189
- }
190
- } catch {
191
- allPassed = false;
192
- lines.push(` ${fail(`JSON 文件解析失败: ${jsonPath}`)}`);
193
- }
194
- }
195
- } else {
196
- lines.push(
197
- ` ℹ️ JSON 验证: 跳过(${sheet.source} 命令不输出 JSON)— 网格参数已记录在 ta-log.md`
198
- );
199
- }
200
-
201
- // ── 5. 帧内容抽查(随机 3 帧,验证非透明像素 > 1%)─────────────────────
202
- if (dimOk && sheet.frameWidth > 0 && sheet.frameHeight > 0) {
203
- const sampleFrameIndices = [
204
- 0,
205
- Math.floor(sheet.frameCount / 2),
206
- sheet.frameCount - 1,
207
- ].filter((v, i, a) => a.indexOf(v) === i);
208
-
209
- const emptyFrames = [];
210
- for (const frameIdx of sampleFrameIndices) {
211
- const col = frameIdx % sheet.columns;
212
- const row = Math.floor(frameIdx / sheet.columns);
213
- const x = col * (sheet.frameWidth + sheet.padding);
214
- const y = row * (sheet.frameHeight + sheet.padding);
215
-
216
- try {
217
- // 裁剪单帧并检查非透明像素比例
218
- const cropResult = execSync(
219
- `playcraft image crop \
220
- --input "${sheet.file}" \
221
- --output ta-workspace/tmp/_frame_check_${frameIdx}.png \
222
- --x ${x} --y ${y} \
223
- --width ${sheet.frameWidth} --height ${sheet.frameHeight}`,
224
- { encoding: 'utf-8', stdio: ['pipe', 'pipe', 'pipe'] },
225
- );
226
-
227
- const frameInfo = imageInfo(`ta-workspace/tmp/_frame_check_${frameIdx}.png`);
228
- // playcraft image info 返回的 dominantColors 可以间接判断非空
229
- // 简单启发式:如果 dominant colors 存在且有非透明颜色,认为帧非空
230
- const nonEmpty = frameInfo && (frameInfo.dominantColors?.length > 0 || frameInfo.hasAlpha === false);
231
- if (!nonEmpty) emptyFrames.push(frameIdx);
232
- } catch {
233
- // 裁剪失败跳过
234
- }
235
- }
236
-
237
- if (emptyFrames.length === 0) {
238
- lines.push(
239
- ` ${pass(`帧内容抽查 (帧 ${sampleFrameIndices.join(', ')}): 全部非空`)}`
240
- );
241
- } else {
242
- allPassed = false;
243
- lines.push(
244
- ` ${fail(`帧内容抽查: 帧 ${emptyFrames.join(', ')} 疑似全透明/空帧`)}`
245
- );
246
- lines.push(` → 检查对应帧位置坐标是否正确,或去背景是否过激(tolerance 过高)`);
247
- }
248
-
249
- // 清理临时文件
250
- try {
251
- execSync(`rm -f ta-workspace/tmp/_frame_check_*.png`, { stdio: 'ignore' });
252
- } catch { /* ignore */ }
253
- }
254
-
255
- return { passed: allPassed, lines };
256
- }
257
-
258
- // ─── MAIN ─────────────────────────────────────────────────────────────────────
259
-
260
- async function main() {
261
- mkdirSync('ta-workspace/logs', { recursive: true });
262
- mkdirSync('ta-workspace/tmp', { recursive: true });
263
-
264
- console.log('\n🔍 精灵图技术验证');
265
- console.log(` 检查 ${SHEETS.length} 张精灵图\n`);
266
-
267
- let passCount = 0;
268
- let failCount = 0;
269
- const allLines = [];
270
-
271
- for (const sheet of SHEETS) {
272
- const { passed, lines } = await validateSheet(sheet);
273
- lines.forEach(l => console.log(l));
274
- allLines.push(...lines);
275
- if (passed) passCount++;
276
- else failCount++;
277
- }
278
-
279
- const summary = [
280
- `\n=== 验证汇总 ===`,
281
- ` 总计: ${SHEETS.length} 张 通过: ${passCount} 失败: ${failCount}`,
282
- failCount > 0
283
- ? ` ❌ 存在问题的精灵图需在 Compliance Gate 前修复`
284
- : ` ✅ 全部通过,可继续 Compliance Gate`,
285
- '',
286
- ].join('\n');
287
-
288
- console.log(summary);
289
-
290
- const timestamp = new Date().toISOString();
291
- appendFileSync(LOG_FILE, `\n[${timestamp}]\n${allLines.join('\n')}\n${summary}`);
292
-
293
- if (failCount > 0) process.exit(1);
294
- }
295
-
296
- main().catch(e => { console.error(e); process.exit(1); });
@@ -1,122 +0,0 @@
1
- ---
2
- name: playcraft-image-ops
3
- description: TA 图形操作生产上下文指南。按可玩广告流水线阶段(提取/标准化/变换/合成/验证)组织 playcraft image 子命令,说明 WHEN 和 WHY 而非仅 HOW。完整 CLI 参数速查表见 refs/ta-image-ops-reference.md。
4
- triggers: 裁剪,crop,叠图,合成,overlay,扩画布,pad,去白边,trim,旋转,rotate,翻转,flip,模糊,blur,色调,tint,灰度,grayscale,反色,negate,居中裁,等比裁,图层叠加,画布,像素级操作,图形处理,decompose-layers,图层分层,提取,extract
5
- ---
6
-
7
- # PlayCraft 图形操作 — 生产上下文指南
8
-
9
- ## 0. 在流水线中的位置
10
-
11
- 所有命令均为 `playcraft image <子命令>` 格式,基于 sharp 本地处理,无需后端。
12
-
13
- ```
14
- TA Production Pipeline:
15
- Extract (从 Composite/ASR 提取)
16
- -> decompose-layers (302 整图语义分层,Master Composite;见 playcraft-masking skill)
17
- -> crop (ASR 网格 / 已知 bbox 的像素级裁切)
18
- -> segment (SAM3 单对象蒙版,见 playcraft-masking skill)
19
-
20
- Process (标准化处理)
21
- -> trim (去除多余透明边)
22
- -> resize (统一到 assetSpec 尺寸)
23
- -> pad (补齐到等宽画布)
24
- -> remove-background -> 见 playcraft-masking skill
25
-
26
- Transform (变体生成)
27
- -> flip horizontal (左右镜像,节省生成成本)
28
- -> rotate (方向调整)
29
- -> tint (色调变体 / 禁用状态)
30
- -> grayscale (锁定 / 未解锁状态)
31
-
32
- Compose (合成叠加)
33
- -> overlay (多层合成:背景 + 角色 + UI)
34
-
35
- Verify (验证)
36
- -> info (检查尺寸 / 格式 / 文件大小)
37
- -> convert (最终格式转换 -- 生产阶段保持 PNG)
38
- ```
39
-
40
- ---
41
-
42
- ## 1. 按阶段命令速查
43
-
44
- | Stage | Command | One-liner | Key Param |
45
- | --------- | ------------------ | --------------------------------------------------------------------------------- | ---------------------------------- |
46
- | Extract | `decompose-layers` | `playcraft image decompose-layers --input X --output-dir ./layers --num-layers 4` | 后端 302;`--input` 宜为 HTTPS URL |
47
- | Extract | `crop` | `playcraft image crop --input X --output Y --x N --y N --width W --height H` | x,y = 左上角原点 |
48
- | Process | `trim` | `playcraft image trim --input X --output Y --threshold 10` | threshold: 0-255 |
49
- | Process | `resize` | `playcraft image resize --input X --output Y --width W --height H` | 或 `--scale 0.5` |
50
- | Process | `pad` | `playcraft image pad --input X --output Y --all 16` | 或 --top/bottom/left/right |
51
- | Transform | `flip` | `playcraft image flip --input X --output Y --direction horizontal` | horizontal / vertical |
52
- | Transform | `rotate` | `playcraft image rotate --input X --output Y --angle 90` | 角度(顺时针),背景默认透明 |
53
- | Transform | `tint` | `playcraft image tint --input X --output Y --color "#FFD700"` | hex 颜色值 |
54
- | Transform | `grayscale` | `playcraft image grayscale --input X --output Y` | 无额外参数 |
55
- | Compose | `overlay` | `playcraft image overlay --base BG --overlay FG --output Y --gravity center` | 或 --x --y 精确坐标 |
56
- | Verify | `info` | `playcraft image info --input X` | --json 供脚本解析 |
57
- | Verify | `convert` | `playcraft image convert --input X --output Y --format webp --quality 85` | 生产阶段保持 PNG |
58
-
59
- **overlay gravity 值**:center(默认) / north / south / east / west / northeast / northwest / southeast / southwest。
60
- 指定 --x + --y 时 gravity 被忽略,叠加图左上角放置在底图 (x, y) 坐标处。
61
-
62
- ---
63
-
64
- ## 2. 最常用配方
65
-
66
- ### 配方 A:标准化精灵尺寸 (trim -> info -> pad)
67
-
68
- **场景**:AI 生成或分割提取的素材尺寸不一,需要统一到 assetSpec 指定的画布大小。
69
-
70
- ```bash
71
- playcraft image trim --input raw_sprite.png --output /tmp/trimmed.png
72
- playcraft image info --input /tmp/trimmed.png --json
73
- # 根据 info 输出计算 pad 值:top/bottom = (目标高 - 当前高) / 2,left/right 同理
74
- playcraft image pad --input /tmp/trimmed.png --output assets/images/tiles/sprite_128x128.png \
75
- --top 8 --bottom 8 --left 16 --right 16
76
- ```
77
-
78
- **为什么这个顺序**:先 trim 去掉 AI 生成图的冗余透明边,再 pad 到精确尺寸。反过来做会把冗余透明边也算进画布。
79
-
80
- ### 配方 B:多层合成 (overlay chain: bg -> character -> UI)
81
-
82
- **场景**:将背景、角色、UI 元素按层合成为最终画面。Layout Spec 中的 composite 通常需要这个流程。
83
-
84
- ```bash
85
- playcraft image overlay --base assets/images/bg/background.png \
86
- --overlay assets/images/character.png --output /tmp/step1.png --gravity center
87
- playcraft image overlay --base /tmp/step1.png \
88
- --overlay assets/images/ui/cta_button.png --output assets/images/final.png --gravity south
89
- ```
90
-
91
- **为什么逐层叠加**:overlay 每次只接受一个叠加层。从最底层开始,每一步的输出作为下一步的 base,保证 z-order 正确。
92
-
93
- ### 配方 C:镜像动画帧 (flip horizontal)
94
-
95
- **场景**:已有 run_right 动画序列帧,需要 run_left。翻转比重新生成节省时间和 API 调用。
96
-
97
- ```bash
98
- for f in assets/images/character/run_right_*.png; do
99
- name=$(basename "$f" .png)
100
- playcraft image flip --input "$f" \
101
- --output "assets/images/character/${name/right/left}.png" \
102
- --direction horizontal
103
- done
104
- ```
105
-
106
- **为什么用 flip 而不重新生成**:AI 生成的镜像帧可能出现风格不一致,而 flip 保证像素级对称,且零 API 成本。
107
-
108
- ---
109
-
110
- ## 3. 关键注意事项
111
-
112
- - **crop 不支持 batch**:`playcraft image batch --steps` 中 crop 会报 `unsupported command`。批量裁切用 for 循环或 Node.js 脚本。
113
- - **生产阶段保持 PNG**:所有中间产物和最终资产用 PNG。WebP/AVIF 转换交给构建阶段 `playcraft build --convert-webp`。
114
- - **tint 是混合不是替换**:深色图像 tint 效果弱,需要颜色替换时用 overlay + 纯色图层。
115
- - **居中裁公式**:`x = (原图宽 - 目标宽) / 2`,`y = (原图高 - 目标高) / 2`(取整)。
116
-
117
- ---
118
-
119
- ## 4. 完整参考
120
-
121
- 完整 CLI 参数速查表、所有 gravity 值、rotation 选项、滤镜命令(blur / negate)及更多组合配方:
122
- 读取 `refs/ta-image-ops-reference.md`。
@@ -1,219 +0,0 @@
1
- ---
2
- name: playcraft-image-processing
3
- description: 可玩广告流程步骤 6。对生成的图片进行后处理:缩放、裁剪、旋转、翻转、填充、格式转换、滤镜、合成等。所有操作通过 `playcraft image` CLI 命令在沙箱本地执行,无需 backend,速度快。
4
- compatibility: agent,opencode
5
- ---
6
-
7
- ## Skill Definition
8
-
9
- tools:
10
-
11
- - bash
12
- - read
13
- prompt_extension: |
14
- 你是图像处理工程师。不得向 /project/ 写入;所有输出路径必须在 ta-workspace(技术美术角色)。
15
- 通过 bash 工具运行 `playcraft image <command>` CLI 命令进行图片处理,所有操作在沙箱本地执行,无需往返 backend。
16
-
17
- ## 我做什么
18
-
19
- - 对生成的图片进行后处理,使其符合游戏引擎和可玩广告的规格
20
- - 支持:缩放、裁剪、旋转、翻转、填充边距、格式转换、灰度化、模糊、色调叠加、反色、图片合成、像素化、自动裁边
21
-
22
- ## 何时用我
23
-
24
- 当 `playcraft tools generate-image` 生成的图片需要进一步处理时:
25
-
26
- - 尺寸不符合纹理要求(如需 2 的幂次、特定分辨率)
27
- - 需要像素风效果
28
- - 需要旋转/镜像翻转(如左右角色复用同一张图)
29
- - 需要统一多帧尺寸后合并精灵图
30
- - 需要格式转换(png → webp 优化体积)
31
- - 需要裁掉透明边界、叠加合成等
32
-
33
- ## 命令速查
34
-
35
- 所有命令格式:`playcraft image <command> --input <路径> --output <路径> [选项]`
36
-
37
- ### 几何变换
38
-
39
- ```bash
40
- # 缩放(支持比例或指定宽高)
41
- playcraft image resize --input src.png --output out.png --scale 0.5
42
- playcraft image resize --input src.png --output out.png --width 512 --height 512 --fit contain
43
-
44
- # 裁剪(指定区域)
45
- playcraft image crop --input src.png --output out.png --x 0 --y 0 --width 256 --height 256
46
-
47
- # 旋转(任意角度,默认背景透明)
48
- playcraft image rotate --input src.png --output out.png --angle 90
49
- playcraft image rotate --input src.png --output out.png --angle 45 --background "#ffffff"
50
-
51
- # 镜像翻转
52
- playcraft image flip --input src.png --output out.png --direction horizontal
53
- playcraft image flip --input src.png --output out.png --direction vertical
54
-
55
- # 扩展画布/加边距(统一精灵尺寸常用)
56
- playcraft image pad --input src.png --output out.png --all 16
57
- playcraft image pad --input src.png --output out.png --top 8 --bottom 8 --left 0 --right 0
58
-
59
- # 自动裁掉透明/纯色边界
60
- playcraft image trim --input src.png --output out.png --threshold 10
61
- ```
62
-
63
- ### 格式与质量
64
-
65
- ```bash
66
- # 格式转换 + 压缩质量(png/jpg/webp/avif)
67
- playcraft image convert --input src.png --output out.webp --quality 85
68
- playcraft image convert --input src.jpg --output out.png
69
- ```
70
-
71
- ### 滤镜与色彩
72
-
73
- ```bash
74
- # 灰度化
75
- playcraft image grayscale --input src.png --output out.png
76
-
77
- # 高斯模糊(背景虚化等)
78
- playcraft image blur --input src.png --output out.png --sigma 5
79
-
80
- # 色调叠加(做角色不同颜色变体)
81
- playcraft image tint --input src.png --output out.png --color "#ff4400"
82
-
83
- # 反色
84
- playcraft image negate --input src.png --output out.png
85
-
86
- # 像素化(像素风格)
87
- playcraft image pixelate --input src.png --output out.png --pixel-size 8
88
- ```
89
-
90
- ### 合成
91
-
92
- ```bash
93
- # 将一张图叠在另一张图上(居中对齐)
94
- playcraft image overlay --base bg.png --overlay icon.png --output out.png
95
-
96
- # 指定坐标叠加
97
- playcraft image overlay --base bg.png --overlay icon.png --output out.png --x 100 --y 200
98
- ```
99
-
100
- ### 语义分割(SAM3)
101
-
102
- 通过 SAM3(Segment Anything Model 3)对图片进行**开放词汇语义分割**:用文字或框 prompt 精确抠出任意对象,返回 mask 和 RGBA 透明图。
103
- 需要经由 backend 代理,首次冷启动约 15s,热启动约 5-10s。
104
-
105
- ```bash
106
- # ── 单 prompt — 文本 ──
107
- # 找到图中所有"logo"区域,输出 mask + RGBA
108
- playcraft image segment \
109
- --input ta-workspace/banner.png \
110
- --text "logo" \
111
- --output-dir ta-workspace/segment-out
112
-
113
- # ── 单 prompt — 框选区域 ──
114
- # 用 [x1,y1,x2,y2] 绝对像素坐标指定目标区域
115
- playcraft image segment \
116
- --input ta-workspace/banner.png \
117
- --boxes "[[50,100,300,400]]" \
118
- --output-dir ta-workspace/segment-out
119
-
120
- # ── 多 prompt 批量(一次调用,多个目标)──
121
- playcraft image segment \
122
- --input ta-workspace/banner.png \
123
- --prompts '[{"text":"icon"},{"text":"button"},{"text":"logo"}]' \
124
- --output-dir ta-workspace/segment-out
125
-
126
- # ── 调节得分阈值(默认 0.3,越低召回越多)──
127
- playcraft image segment \
128
- --input ta-workspace/hero.png \
129
- --text "character" \
130
- --threshold 0.2 \
131
- --output-dir ta-workspace/segment-out
132
-
133
- # ── 不需要 RGBA 抠图,只要 mask ──
134
- playcraft image segment \
135
- --input ta-workspace/hero.png \
136
- --text "character" \
137
- --no-rgba \
138
- --output-dir ta-workspace/segment-out
139
- ```
140
-
141
- **输出目录结构**:
142
-
143
- ```
144
- segment-out/
145
- prompt_0_logo/
146
- 00_mask.png ← 二值 mask(白色为前景)
147
- 00_rgba.png ← RGBA 透明抠图
148
- 01_mask.png ← 同一 prompt 的第二个实例(若有多个)
149
- 01_rgba.png
150
- prompt_1_button/
151
- 00_mask.png
152
- 00_rgba.png
153
- segment-meta.json ← 汇总:image_size、prompts、instances count、scores、bbox
154
- ```
155
-
156
- **使用要点**:
157
-
158
- - **冷启动**:SAM3 缩容后首次调用约 15s,命令会自动等待,无需手动 ping
159
- - **热启动**:模型就绪后约 5-10s 完成分割
160
- - **抠图直接可用**:`rgba.png` 已是透明背景,可直接用于游戏资产,无需再跑 `remove-background`
161
- - **多实例**:同一 prompt 可能检测到多个对象(如图中有 3 个 logo),每个实例单独输出 `00_`、`01_`…
162
- - **bbox 信息**:`segment-meta.json` 包含每个实例的 bbox 坐标,可用于后续裁切定位
163
-
164
- **与 remove-background 的对比**:
165
-
166
- | 场景 | 推荐方案 |
167
- | -------------------------------------------------- | -------------------------------------- |
168
- | 去除纯色/渐变/棋盘格背景(AI 生成图) | `remove-background --method floodfill` |
169
- | 去除复杂真实照片背景 | `remove-background --method ai` |
170
- | **精确分割特定对象**(如从 UI 截图中提取某个按钮) | `segment --text "button"` |
171
- | **批量提取多个不同对象** | `segment --prompts '[...]'` |
172
- | **需要 mask 做遮罩特效** | `segment`(直接输出 mask.png) |
173
-
174
- ### 背景移除
175
-
176
- 支持两种方法,根据图片类型选择:
177
-
178
- ```bash
179
- # ── floodfill(默认)— 本地执行,AI 生成素材首选 ──
180
- # 从边缘 flood-fill 移除纯色/渐变/棋盘格背景,前景纹理零损失
181
- playcraft image remove-background --input ta-workspace/hero_raw.png --output ta-workspace/hero.png
182
-
183
- # 调节容差(背景与前景颜色接近时增大)
184
- playcraft image remove-background --input ta-workspace/tile.png --output ta-workspace/tile.png --tolerance 40
185
-
186
- # 关闭边缘平滑(需要硬边像素风时)
187
- playcraft image remove-background --input ta-workspace/pixel_art.png --output ta-workspace/pixel_art.png --edge-smooth 0
188
-
189
- # ── ai — 调用 backend AI 模型,复杂背景照片用 ──
190
- playcraft image remove-background --input ta-workspace/photo.jpg --output ta-workspace/photo.png --method ai
191
- ```
192
-
193
- **方法选择指南**:
194
- | 方法 | 适用场景 | 速度 | 纹理保真度 |
195
- |------|---------|------|-----------|
196
- | `floodfill`(默认) | AI 生成的素材(纯色/灰色/棋盘格背景) | <0.5s | 零损失 |
197
- | `ai` | 真实照片、复杂背景 | ~1-3s | 可能褪色 |
198
-
199
- > **注意**:`--method ai` 会调用 backend API(需要沙箱 token);`floodfill` 完全本地执行。
200
-
201
- ## 可玩广告常见规格
202
-
203
- - 纹理尺寸:建议 2 的幂次(256×256、512×512、1024×1024)
204
- - 像素风:`--pixel-size 8` 到 `16` 常见
205
- - WebP 转换:通常比 PNG 小 30–50%,可玩广告体积敏感时优先用 webp
206
- - 统一精灵帧尺寸:先 `resize` → 再 `sprite-sheet` 合并
207
-
208
- ## 典型流程
209
-
210
- ```bash
211
- # 生成图片 → 缩放到规格 → 转 webp 压缩
212
- playcraft tools generate-image --prompt "cute hero character, transparent background" --output ta-workspace/hero_raw.png
213
- playcraft image resize --input ta-workspace/hero_raw.png --output ta-workspace/hero_512.png --width 512 --height 512 --fit contain
214
- playcraft image convert --input ta-workspace/hero_512.png --output ta-workspace/hero_512.webp --quality 85
215
-
216
- # 制作角色颜色变体
217
- playcraft image tint --input ta-workspace/hero_512.png --output ta-workspace/hero_blue.png --color "#0055ff"
218
- playcraft image tint --input ta-workspace/hero_512.png --output ta-workspace/hero_red.png --color "#ff2200"
219
- ```