@playcraft/cli 0.1.28 → 0.1.29

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 (314) hide show
  1. package/README.md +3 -38
  2. package/dist/agent/local-backend.js +1 -1
  3. package/dist/cli-root-help.js +0 -2
  4. package/dist/commands/build.js +4 -9
  5. package/dist/commands/create.js +33 -26
  6. package/dist/commands/image.js +6 -2
  7. package/dist/commands/login.js +42 -84
  8. package/dist/commands/skills.js +0 -2
  9. package/dist/commands/tools-3d.js +0 -11
  10. package/dist/commands/tools-generation.js +109 -68
  11. package/dist/commands/tools-image-context.js +23 -0
  12. package/dist/commands/tools.js +2 -2
  13. package/dist/config.js +4 -59
  14. package/dist/index.js +3 -34
  15. package/dist/remix/clone.js +0 -2
  16. package/dist/remix/init-template.js +0 -2
  17. package/dist/remix/pull.js +0 -2
  18. package/dist/remix/push.js +1 -21
  19. package/dist/utils/agent-api-client.js +30 -185
  20. package/dist/utils/image-asset-context.js +105 -0
  21. package/dist/utils/playcraft-http-client.js +4 -6
  22. package/package.json +3 -12
  23. package/project-template/.claude/skills/playcraft-image-generation/SKILL.md +81 -23
  24. package/project-templates/phaser/.claude/skills/playcraft-image-generation/SKILL.md +81 -23
  25. package/project-templates/threejs/.claude/skills/playcraft-image-generation/SKILL.md +81 -23
  26. package/dist/auth/account-activation.js +0 -157
  27. package/dist/auth/messages.js +0 -30
  28. package/dist/commands/platform-skills.generated.js +0 -19
  29. package/dist/commands/playable.js +0 -53
  30. package/dist/commands/tools-batch.js +0 -87
  31. package/dist/commands/video.js +0 -111
  32. package/dist/commands/workspace-runtime.js +0 -54
  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/utils/environment-endpoints.js +0 -17
  47. package/dist/utils/tool-operation-journal.js +0 -124
  48. package/dist/utils/video-evidence-git.js +0 -81
  49. package/dist/video-replication/client.js +0 -222
  50. package/dist/video-replication/comparison-evidence.js +0 -149
  51. package/dist/video-replication/comparison-files.js +0 -57
  52. package/dist/video-replication/comparison-log.js +0 -72
  53. package/dist/video-replication/comparison-messages.js +0 -104
  54. package/dist/video-replication/comparison-output.js +0 -63
  55. package/dist/video-replication/comparison-preflight.js +0 -66
  56. package/dist/video-replication/comparison.js +0 -216
  57. package/dist/video-replication/evidence.js +0 -165
  58. package/dist/video-replication/media.js +0 -111
  59. package/dist/video-replication/messages.js +0 -89
  60. package/dist/workspace-runtime/codex/app-server.js +0 -653
  61. package/dist/workspace-runtime/codex/config-toml.js +0 -107
  62. package/dist/workspace-runtime/codex/jsonrpc-stdio.js +0 -123
  63. package/dist/workspace-runtime/codex/launcher-client.js +0 -177
  64. package/dist/workspace-runtime/codex/loopback.js +0 -143
  65. package/dist/workspace-runtime/codex/model-broker.js +0 -258
  66. package/dist/workspace-runtime/codex/native-adapter.js +0 -9
  67. package/dist/workspace-runtime/main.js +0 -10
  68. package/dist/workspace-runtime/persistence/journal.js +0 -355
  69. package/dist/workspace-runtime/persistence/native-subagents.js +0 -162
  70. package/dist/workspace-runtime/persistence/sqlite-client.js +0 -77
  71. package/dist/workspace-runtime/persistence/sqlite-worker.js +0 -1057
  72. package/dist/workspace-runtime/previews/publish.js +0 -259
  73. package/dist/workspace-runtime/previews/single-file.js +0 -43
  74. package/dist/workspace-runtime/processes/managed-writes.js +0 -69
  75. package/dist/workspace-runtime/production/contracts.js +0 -17
  76. package/dist/workspace-runtime/production/controller.js +0 -207
  77. package/dist/workspace-runtime/production/dependencies.js +0 -60
  78. package/dist/workspace-runtime/production/native.js +0 -194
  79. package/dist/workspace-runtime/production/processes.js +0 -86
  80. package/dist/workspace-runtime/production/save-command.js +0 -24
  81. package/dist/workspace-runtime/production/source-copy.js +0 -91
  82. package/dist/workspace-runtime/production/stages.js +0 -202
  83. package/dist/workspace-runtime/production/storage.js +0 -32
  84. package/dist/workspace-runtime/serve.js +0 -202
  85. package/dist/workspace-runtime/server/auth.js +0 -21
  86. package/dist/workspace-runtime/server/connectivity.js +0 -201
  87. package/dist/workspace-runtime/server/desktop-host.js +0 -429
  88. package/dist/workspace-runtime/server/desktop-preview-config.js +0 -81
  89. package/dist/workspace-runtime/server/desktop-preview-service.js +0 -157
  90. package/dist/workspace-runtime/server/desktop-preview-static.js +0 -53
  91. package/dist/workspace-runtime/server/desktop-preview.js +0 -189
  92. package/dist/workspace-runtime/server/dispatch.js +0 -908
  93. package/dist/workspace-runtime/server/endpoints.js +0 -19
  94. package/dist/workspace-runtime/server/execution-group.js +0 -85
  95. package/dist/workspace-runtime/server/http.js +0 -988
  96. package/dist/workspace-runtime/server/lock.js +0 -53
  97. package/dist/workspace-runtime/server/rfb-watch-gate.js +0 -168
  98. package/dist/workspace-runtime/server/terminal-host.js +0 -366
  99. package/dist/workspace-runtime/server/types.js +0 -1
  100. package/dist/workspace-runtime/workspaces/artifact-events.js +0 -55
  101. package/dist/workspace-runtime/workspaces/artifact-files.js +0 -195
  102. package/dist/workspace-runtime/workspaces/artifact-receipts.js +0 -89
  103. package/dist/workspace-runtime/workspaces/artifacts.js +0 -260
  104. package/dist/workspace-runtime/workspaces/attachment-content.js +0 -111
  105. package/dist/workspace-runtime/workspaces/attachments.js +0 -175
  106. package/dist/workspace-runtime/workspaces/batch-commit.js +0 -142
  107. package/dist/workspace-runtime/workspaces/cli-context.js +0 -23
  108. package/dist/workspace-runtime/workspaces/cli-credentials.js +0 -111
  109. package/dist/workspace-runtime/workspaces/context-error.js +0 -2
  110. package/dist/workspace-runtime/workspaces/dependencies.js +0 -264
  111. package/dist/workspace-runtime/workspaces/developer-command.js +0 -64
  112. package/dist/workspace-runtime/workspaces/directories.js +0 -113
  113. package/dist/workspace-runtime/workspaces/directory-access.js +0 -29
  114. package/dist/workspace-runtime/workspaces/directory-maintenance.js +0 -111
  115. package/dist/workspace-runtime/workspaces/directory-stats.js +0 -49
  116. package/dist/workspace-runtime/workspaces/disk-snapshot.js +0 -31
  117. package/dist/workspace-runtime/workspaces/empty-template.js +0 -40
  118. package/dist/workspace-runtime/workspaces/files.js +0 -120
  119. package/dist/workspace-runtime/workspaces/git-credential-broker.js +0 -312
  120. package/dist/workspace-runtime/workspaces/git-credential-helper.js +0 -68
  121. package/dist/workspace-runtime/workspaces/git-direct-store.js +0 -155
  122. package/dist/workspace-runtime/workspaces/git.js +0 -517
  123. package/dist/workspace-runtime/workspaces/json5-edit.js +0 -170
  124. package/dist/workspace-runtime/workspaces/parameters.js +0 -272
  125. package/dist/workspace-runtime/workspaces/prepare.js +0 -264
  126. package/dist/workspace-runtime/workspaces/registry.js +0 -226
  127. package/dist/workspace-runtime/workspaces/revisions.js +0 -31
  128. package/dist/workspace-runtime/workspaces/skill-artifact-loader.js +0 -91
  129. package/dist/workspace-runtime/workspaces/skills.js +0 -189
  130. package/dist/workspace-runtime/workspaces/video-attachments.js +0 -49
  131. package/project-template/.claude/skills/playcraft-replica-validation/SKILL.md +0 -25
  132. package/project-template/.claude/skills/playcraft-replica-validation/references/contracts.md +0 -79
  133. package/project-template/.claude/skills/playcraft-video-understanding/SKILL.md +0 -29
  134. package/project-template/.claude/skills/playcraft-video-understanding/references/contracts.md +0 -37
  135. package/project-template-v2/.claude/agents/artist.md +0 -82
  136. package/project-template-v2/.claude/agents/developer.md +0 -153
  137. package/project-template-v2/.claude/agents/game-designer.md +0 -264
  138. package/project-template-v2/.claude/agents/refs/artist-art-style-catalog.md +0 -533
  139. package/project-template-v2/.claude/agents/refs/artist-color-audio-recipes.md +0 -153
  140. package/project-template-v2/.claude/agents/refs/artist-dimension-axis.md +0 -27
  141. package/project-template-v2/.claude/agents/refs/artist-master-composite-recipes.md +0 -208
  142. package/project-template-v2/.claude/agents/refs/atom-skill-library.md +0 -81
  143. package/project-template-v2/.claude/agents/refs/developer-impl-cookbook.md +0 -432
  144. package/project-template-v2/.claude/agents/refs/framework-5-component-filter.md +0 -252
  145. package/project-template-v2/.claude/agents/refs/framework-game-feel-juice.md +0 -266
  146. package/project-template-v2/.claude/agents/refs/framework-mda.md +0 -147
  147. package/project-template-v2/.claude/agents/refs/game-designer-gameplay-sufficiency.md +0 -123
  148. package/project-template-v2/.claude/agents/refs/ta-3d-flip-recipe.md +0 -88
  149. package/project-template-v2/.claude/agents/refs/ta-atlas-deliverable-standard.md +0 -67
  150. package/project-template-v2/.claude/agents/refs/ta-batch-pipeline-recipes.md +0 -120
  151. package/project-template-v2/.claude/agents/refs/ta-image-generation-detail.md +0 -300
  152. package/project-template-v2/.claude/agents/refs/ta-image-ops-reference.md +0 -495
  153. package/project-template-v2/.claude/agents/refs/ta-pipeline-cookbook.md +0 -1141
  154. package/project-template-v2/.claude/agents/refs/ta-tools-reference.md +0 -111
  155. package/project-template-v2/.claude/agents/refs/ta-vfx-preset-catalog.md +0 -365
  156. package/project-template-v2/.claude/agents/refs/threejs-cannon-pitfalls.md +0 -412
  157. package/project-template-v2/.claude/agents/reviewer.md +0 -75
  158. package/project-template-v2/.claude/agents/technical-artist.md +0 -86
  159. package/project-template-v2/.claude/hooks/snapshot-milestone.mjs +0 -243
  160. package/project-template-v2/.claude/hooks/user-prompt.mjs +0 -133
  161. package/project-template-v2/.claude/settings.json +0 -33
  162. package/project-template-v2/.claude/skills/brainstorming/SKILL.md +0 -161
  163. package/project-template-v2/.claude/skills/brainstorming/scripts/frame-template.html +0 -270
  164. package/project-template-v2/.claude/skills/brainstorming/scripts/helper.js +0 -177
  165. package/project-template-v2/.claude/skills/brainstorming/scripts/server.cjs +0 -354
  166. package/project-template-v2/.claude/skills/brainstorming/scripts/start-server.sh +0 -148
  167. package/project-template-v2/.claude/skills/brainstorming/scripts/stop-server.sh +0 -56
  168. package/project-template-v2/.claude/skills/brainstorming/scripts/wait-for-selection.sh +0 -62
  169. package/project-template-v2/.claude/skills/brainstorming/spec-document-reviewer-prompt.md +0 -49
  170. package/project-template-v2/.claude/skills/brainstorming/visual-companion.md +0 -309
  171. package/project-template-v2/.claude/skills/playcraft-ad-psychology/SKILL.md +0 -182
  172. package/project-template-v2/.claude/skills/playcraft-art-style-guide/SKILL.md +0 -123
  173. package/project-template-v2/.claude/skills/playcraft-asset-state-sheet/SKILL.md +0 -205
  174. package/project-template-v2/.claude/skills/playcraft-audio-generation/SKILL.md +0 -280
  175. package/project-template-v2/.claude/skills/playcraft-batch-pipeline/SKILL.md +0 -184
  176. package/project-template-v2/.claude/skills/playcraft-build-optimizer/SKILL.md +0 -306
  177. package/project-template-v2/.claude/skills/playcraft-image-generation/SKILL.md +0 -298
  178. package/project-template-v2/.claude/skills/playcraft-image-generation/reference/build-sprite-sheet.template.mjs +0 -123
  179. package/project-template-v2/.claude/skills/playcraft-image-generation/reference/compare-style.template.mjs +0 -254
  180. package/project-template-v2/.claude/skills/playcraft-image-generation/reference/gen-batch-sprite.template.mjs +0 -324
  181. package/project-template-v2/.claude/skills/playcraft-image-generation/reference/gen-batch.template.mjs +0 -97
  182. package/project-template-v2/.claude/skills/playcraft-image-generation/reference/gen-edit-variants.template.mjs +0 -118
  183. package/project-template-v2/.claude/skills/playcraft-image-generation/reference/process-batch.template.mjs +0 -137
  184. package/project-template-v2/.claude/skills/playcraft-image-generation/reference/prompt-cookbook.md +0 -397
  185. package/project-template-v2/.claude/skills/playcraft-image-generation/reference/validate-sprite-sheet.template.mjs +0 -296
  186. package/project-template-v2/.claude/skills/playcraft-image-ops/SKILL.md +0 -122
  187. package/project-template-v2/.claude/skills/playcraft-image-processing/SKILL.md +0 -219
  188. package/project-template-v2/.claude/skills/playcraft-masking/SKILL.md +0 -373
  189. package/project-template-v2/.claude/skills/playcraft-playable-optimization/SKILL.md +0 -161
  190. package/project-template-v2/.claude/skills/playcraft-research/SKILL.md +0 -215
  191. package/project-template-v2/.claude/skills/playcraft-skill-recommender/SKILL.md +0 -382
  192. package/project-template-v2/.claude/skills/playcraft-sprite-generation/SKILL.md +0 -423
  193. package/project-template-v2/.claude/skills/playcraft-sprite-remix/SKILL.md +0 -158
  194. package/project-template-v2/.claude/skills/playcraft-sprite-sheet/SKILL.md +0 -100
  195. package/project-template-v2/.claude/skills/playcraft-storyboard/SKILL.md +0 -167
  196. package/project-template-v2/.claude/skills/playcraft-style-qa/SKILL.md +0 -270
  197. package/project-template-v2/.claude/skills/playcraft-text-rendering/SKILL.md +0 -236
  198. package/project-template-v2/.claude/skills/playcraft-vfx-animation/SKILL.md +0 -130
  199. package/project-template-v2/.claude/skills/playwright-cli/SKILL.md +0 -390
  200. package/project-template-v2/.claude/skills/playwright-cli/references/element-attributes.md +0 -23
  201. package/project-template-v2/.claude/skills/playwright-cli/references/playwright-tests.md +0 -39
  202. package/project-template-v2/.claude/skills/playwright-cli/references/request-mocking.md +0 -87
  203. package/project-template-v2/.claude/skills/playwright-cli/references/running-code.md +0 -240
  204. package/project-template-v2/.claude/skills/playwright-cli/references/session-management.md +0 -226
  205. package/project-template-v2/.claude/skills/playwright-cli/references/spec-driven-testing.md +0 -308
  206. package/project-template-v2/.claude/skills/playwright-cli/references/storage-state.md +0 -275
  207. package/project-template-v2/.claude/skills/playwright-cli/references/test-generation.md +0 -134
  208. package/project-template-v2/.claude/skills/playwright-cli/references/tracing.md +0 -142
  209. package/project-template-v2/.claude/skills/playwright-cli/references/video-recording.md +0 -153
  210. package/project-template-v2/.claude/skills/session-analyzer/SKILL.md +0 -386
  211. package/project-template-v2/.claude/skills/session-analyzer/scripts/execution-breakdown.mjs +0 -182
  212. package/project-template-v2/.claude/skills/session-analyzer/scripts/find-turns.mjs +0 -72
  213. package/project-template-v2/.claude/skills/session-analyzer/scripts/heavy-output.mjs +0 -121
  214. package/project-template-v2/.claude/skills/session-analyzer/scripts/resolve-session.mjs +0 -102
  215. package/project-template-v2/.claude/skills/session-analyzer/scripts/subagent-stats.mjs +0 -127
  216. package/project-template-v2/.claude/skills/session-analyzer/scripts/subagent-tool-timeline.mjs +0 -106
  217. package/project-template-v2/.claude/skills/session-analyzer/scripts/time-gaps.mjs +0 -128
  218. package/project-template-v2/.claude/skills/session-analyzer/scripts/turn-timeline.mjs +0 -67
  219. package/project-template-v2/.claude/snapshot.mjs +0 -263
  220. package/project-template-v2/.playcraft/skills.lock.json +0 -152
  221. package/project-template-v2/CLAUDE.md +0 -146
  222. package/project-template-v2/assets/audio/bgm/.gitkeep +0 -0
  223. package/project-template-v2/assets/audio/sfx/.gitkeep +0 -0
  224. package/project-template-v2/assets/bundles/.gitkeep +0 -0
  225. package/project-template-v2/assets/images/bg/.gitkeep +0 -0
  226. package/project-template-v2/assets/images/reference/.gitkeep +0 -0
  227. package/project-template-v2/assets/images/storyboard/.gitkeep +0 -0
  228. package/project-template-v2/assets/images/tiles/.gitkeep +0 -0
  229. package/project-template-v2/assets/images/ui/.gitkeep +0 -0
  230. package/project-template-v2/assets/images/vfx/.gitkeep +0 -0
  231. package/project-template-v2/assets/models/.gitkeep +0 -0
  232. package/project-template-v2/docs/harness/iteration-1/context-flow.md +0 -254
  233. package/project-template-v2/docs/harness/iteration-1/generate-flow.md +0 -91
  234. package/project-template-v2/docs/harness/iteration-1/ideate-flow.md +0 -214
  235. package/project-template-v2/docs/harness/iteration-1/optimize-flow.md +0 -75
  236. package/project-template-v2/docs/harness/iteration-1/wrapup-flow.md +0 -63
  237. package/project-template-v2/docs/harness/iteration-2/context-flow.md +0 -223
  238. package/project-template-v2/docs/harness/iteration-2/generate-flow.md +0 -129
  239. package/project-template-v2/docs/harness/iteration-2/ideate-flow.md +0 -267
  240. package/project-template-v2/docs/harness/iteration-2/optimize-flow.md +0 -164
  241. package/project-template-v2/docs/harness/iteration-2/wrapup-flow.md +0 -115
  242. package/project-template-v2/docs/harness/orchestrator-flow.md +0 -364
  243. package/project-template-v2/docs/project-state.json +0 -60
  244. package/project-template-v2/docs/project-state.md +0 -72
  245. package/project-template-v2/docs/standards/README.md +0 -225
  246. package/project-template-v2/docs/standards/agent-behavior-standards.md +0 -174
  247. package/project-template-v2/docs/standards/artifacts/design-brief.md +0 -19
  248. package/project-template-v2/docs/standards/artifacts/design.md +0 -22
  249. package/project-template-v2/docs/standards/artifacts/game-code.md +0 -41
  250. package/project-template-v2/docs/standards/artifacts/todo-list.md +0 -41
  251. package/project-template-v2/docs/standards/iter1-agent-behavior-standards.md +0 -343
  252. package/project-template-v2/game/index.ts +0 -18
  253. package/project-template-v2/globals.d.ts +0 -51
  254. package/project-template-v2/index.css +0 -34
  255. package/project-template-v2/index.html +0 -18
  256. package/project-template-v2/main.ts +0 -9
  257. package/project-template-v2/package.json +0 -46
  258. package/project-template-v2/skills/_shared/scripts/dispatch-clear.mjs +0 -31
  259. package/project-template-v2/skills/_shared/scripts/dispatch-set.mjs +0 -86
  260. package/project-template-v2/skills/_shared/scripts/dod-check.mjs +0 -153
  261. package/project-template-v2/skills/_shared/scripts/handoff-append.mjs +0 -70
  262. package/project-template-v2/skills/_shared/scripts/lib/validator-artifacts.mjs +0 -91
  263. package/project-template-v2/skills/_shared/scripts/pipeline/dod-config.mjs +0 -131
  264. package/project-template-v2/skills/_shared/scripts/pipeline/index.mjs +0 -80
  265. package/project-template-v2/skills/_shared/scripts/pipeline/iteration-1-core.mjs +0 -90
  266. package/project-template-v2/skills/_shared/scripts/pipeline/iteration-2-wrap.mjs +0 -93
  267. package/project-template-v2/skills/_shared/scripts/pipeline/iteration-3-visual.mjs +0 -23
  268. package/project-template-v2/skills/_shared/scripts/render-project-state.mjs +0 -230
  269. package/project-template-v2/skills/_shared/scripts/state-advance-stage.mjs +0 -58
  270. package/project-template-v2/skills/_shared/scripts/state-get.mjs +0 -339
  271. package/project-template-v2/skills/_shared/scripts/state-handoff.mjs +0 -39
  272. package/project-template-v2/skills/_shared/scripts/state-set.mjs +0 -94
  273. package/project-template-v2/skills/_shared/scripts/state-store.mjs +0 -783
  274. package/project-template-v2/skills/_shared/scripts/todo-add.mjs +0 -88
  275. package/project-template-v2/skills/_shared/scripts/todo-get.mjs +0 -130
  276. package/project-template-v2/skills/_shared/scripts/todo-remove.mjs +0 -33
  277. package/project-template-v2/skills/_shared/scripts/todo-set.mjs +0 -47
  278. package/project-template-v2/skills/_shared/scripts/verify-asset-code-sync.mjs +0 -268
  279. package/project-template-v2/skills/_shared/scripts/verify-env.mjs +0 -285
  280. package/project-template-v2/skills/_shared/scripts/verify-placeholders.mjs +0 -161
  281. package/project-template-v2/skills/playable-autoplay/SKILL.md +0 -176
  282. package/project-template-v2/skills/playable-autoplay/agents/openai.yaml +0 -4
  283. package/project-template-v2/skills/playable-debug/SKILL.md +0 -116
  284. package/project-template-v2/skills/playable-debug/agents/openai.yaml +0 -4
  285. package/project-template-v2/skills/playable-debug/references/debug-config.md +0 -40
  286. package/project-template-v2/skills/playable-record/SKILL.md +0 -140
  287. package/project-template-v2/skills/playable-record/scripts/lib/dev-server.mjs +0 -104
  288. package/project-template-v2/skills/playable-record/scripts/lib/record-audio-bridge.js +0 -141
  289. package/project-template-v2/skills/playable-record/scripts/record-playable.mjs +0 -425
  290. package/project-template-v2/skills/playable-record/scripts/verify-contract.mjs +0 -261
  291. package/project-template-v2/skills/playable-record/scripts/verify-firstwin.mjs +0 -398
  292. package/project-template-v2/skills/playable-record/scripts/verify-fusion.mjs +0 -322
  293. package/project-template-v2/skills/playable-record/scripts/verify-lifecycle.mjs +0 -105
  294. package/project-template-v2/skills/playable-record/scripts/verify-vlm-video.mjs +0 -230
  295. package/project-template-v2/skills/playable-validate/SKILL.md +0 -61
  296. package/project-template-v2/skills/playable-validate/validation-rules.md +0 -14
  297. package/project-template-v2/skills/playable-verify-ui/SKILL.md +0 -63
  298. package/project-template-v2/skills/playable-verify-ui/scripts/lib/__init__.py +0 -1
  299. package/project-template-v2/skills/playable-verify-ui/scripts/lib/config_expr.js +0 -218
  300. package/project-template-v2/skills/playable-verify-ui/scripts/lib/node_utils.js +0 -51
  301. package/project-template-v2/skills/playable-verify-ui/scripts/lib/profile_loader.py +0 -59
  302. package/project-template-v2/skills/playable-verify-ui/scripts/lib/report.py +0 -106
  303. package/project-template-v2/skills/playable-verify-ui/scripts/lib/runtime_contract.js +0 -116
  304. package/project-template-v2/skills/playable-verify-ui/scripts/verify_fetch_antipatterns.py +0 -59
  305. package/project-template-v2/skills/playable-verify-ui/scripts/verify_hardcoded_layout.js +0 -64
  306. package/project-template-v2/skills/playable-verify-ui/scripts/verify_runtime_contract.js +0 -58
  307. package/project-template-v2/skills/playable-verify-ui/scripts/verify_text_overlap.py +0 -333
  308. package/project-template-v2/ta-workspace/scripts/.gitkeep +0 -0
  309. package/project-template-v2/tsconfig.json +0 -20
  310. package/project-template-v2/vite.config.ts +0 -27
  311. package/project-templates/batch-locks/phaser.yaml +0 -922
  312. package/project-templates/batch-locks/threejs.yaml +0 -978
  313. package/project-templates/empty/AGENTS.md +0 -25
  314. package/project-templates/empty/gitignore +0 -33
@@ -1,123 +0,0 @@
1
- // ============================================================
2
- // build-sprite-sheet.template.mjs — 精灵图合并 + 验证脚本模板
3
- // 用途:将处理好的图片目录合并为精灵图(PNG + JSON 元数据)
4
- //
5
- // 使用方式:
6
- // 1. cp .claude/skills/playcraft-image-generation/reference/build-sprite-sheet.template.mjs ta-workspace/scripts/build-<name>-atlas.mjs
7
- // 2. 修改下方 CONFIG 区域
8
- // 3. 如需控制帧顺序,填写 ORDERED_NAMES 数组(留空则按文件名排序)
9
- // 4. node ta-workspace/scripts/build-<name>-atlas.mjs
10
- // ============================================================
11
-
12
- import { execSync } from 'child_process';
13
- import { existsSync, readFileSync, readdirSync, mkdirSync, appendFileSync } from 'fs';
14
- import { join, extname } from 'path';
15
-
16
- // ============ CONFIG — 修改这里 ============
17
- const CONFIG = {
18
- /** 处理好的图片目录(process-batch 的输出目录) */
19
- processedDir: 'assets/images/processed',
20
- /** 输出文件路径(不含扩展名,会生成 .png 和 .json 两个文件) */
21
- outputBase: 'assets/bundles/atlas',
22
- /** 每行帧数 */
23
- columns: 8,
24
- /** 帧间距(像素) */
25
- padding: 2,
26
- /**
27
- * 精灵图背景色
28
- * - 'transparent'(默认):透明背景
29
- * - 'white' / 'black' / '#RRGGBB':固定背景色
30
- * 某些引擎(如 PlayCanvas)处理透明精灵图时可能显示为黑色,此时用 'white' 更安全
31
- */
32
- background: 'transparent',
33
- /** 文件名排序方式:'name'(字母序)或 'custom'(使用 ORDERED_NAMES) */
34
- sort: 'name',
35
- };
36
-
37
- /**
38
- * 自定义帧顺序(CONFIG.sort = 'custom' 时生效)
39
- * 填写不含扩展名的文件名,按期望顺序排列
40
- * 示例(扑克牌):['spades_A', 'spades_2', 'spades_3', ...]
41
- */
42
- const ORDERED_NAMES = [
43
- // 填写文件名(不含扩展名)...
44
- ];
45
- // ============ LOGIC — 通常不需要修改 ============
46
-
47
- const LOG_FILE = 'ta-workspace/logs/build-sprite-sheet.log';
48
- mkdirSync('ta-workspace/logs', { recursive: true });
49
-
50
- function log(msg) {
51
- const line = `[${new Date().toISOString()}] ${msg}`;
52
- console.log(line);
53
- appendFileSync(LOG_FILE, line + '\n');
54
- }
55
-
56
- // 收集输入文件
57
- let inputFiles;
58
- if (CONFIG.sort === 'custom' && ORDERED_NAMES.length > 0) {
59
- // 自定义顺序:按 ORDERED_NAMES 排列,找不到的文件跳过并警告
60
- inputFiles = [];
61
- for (const name of ORDERED_NAMES) {
62
- const candidates = ['.png', '.jpg', '.webp'].map(ext => join(CONFIG.processedDir, `${name}${ext}`));
63
- const found = candidates.find(p => existsSync(p));
64
- if (found) {
65
- inputFiles.push(found);
66
- } else {
67
- log(`[WARN] Ordered file not found: ${name} (skipping)`);
68
- }
69
- }
70
- } else {
71
- // 文件名排序
72
- inputFiles = readdirSync(CONFIG.processedDir)
73
- .filter(f => ['.png', '.jpg', '.webp'].includes(extname(f).toLowerCase()))
74
- .sort()
75
- .map(f => join(CONFIG.processedDir, f));
76
- }
77
-
78
- if (inputFiles.length === 0) {
79
- log('ERROR: No input files found in ' + CONFIG.processedDir);
80
- process.exit(1);
81
- }
82
-
83
- log(`=== Build Sprite Sheet Start ===`);
84
- log(`Frames: ${inputFiles.length} | Columns: ${CONFIG.columns} | Padding: ${CONFIG.padding} | BG: ${CONFIG.background}`);
85
-
86
- // 构建 --inputs 参数列表
87
- const inputsArg = inputFiles.map(p => `"${p}"`).join(' ');
88
-
89
- const cmd =
90
- `playcraft image sprite-sheet` +
91
- ` --inputs ${inputsArg}` +
92
- ` --output "${CONFIG.outputBase}"` +
93
- ` --columns ${CONFIG.columns}` +
94
- ` --padding ${CONFIG.padding}` +
95
- (CONFIG.background !== 'transparent' ? ` --background "${CONFIG.background}"` : '');
96
-
97
- log(`Running: playcraft image sprite-sheet ... --output ${CONFIG.outputBase}`);
98
-
99
- try {
100
- execSync(cmd, { stdio: 'inherit' });
101
- } catch (e) {
102
- log(`ERROR: sprite-sheet command failed: ${e.message}`);
103
- process.exit(1);
104
- }
105
-
106
- // 验证输出
107
- const pngPath = `${CONFIG.outputBase}.png`;
108
- const jsonPath = `${CONFIG.outputBase}.json`;
109
-
110
- if (!existsSync(pngPath) || !existsSync(jsonPath)) {
111
- log('ERROR: Output files missing! Expected ' + pngPath + ' and ' + jsonPath);
112
- process.exit(1);
113
- }
114
-
115
- const meta = JSON.parse(readFileSync(jsonPath, 'utf-8'));
116
- const frameCount = Object.keys(meta.frames ?? {}).length;
117
-
118
- log(`\n=== Sprite Sheet Built ===`);
119
- log(` Frames : ${frameCount}`);
120
- log(` PNG : ${pngPath}`);
121
- log(` JSON : ${jsonPath}`);
122
- log(` Columns : ${CONFIG.columns}`);
123
- log(` Rows : ${Math.ceil(frameCount / CONFIG.columns)}`);
@@ -1,254 +0,0 @@
1
- /**
2
- * compare-style.template.mjs
3
- *
4
- * 色彩风格一致性定量检查脚本。
5
- * 用途:TA Micro-Batch Validation 辅助工具,对 AI 补全素材与 Artist 样本做客观色彩比较。
6
- *
7
- * 使用方法:
8
- * cp .claude/skills/playcraft-image-generation/reference/compare-style.template.mjs \
9
- * ta-workspace/scripts/compare-style.mjs
10
- * # 修改下方 CONFIG 区域后运行:
11
- * node ta-workspace/scripts/compare-style.mjs
12
- *
13
- * 输出示例:
14
- * [COMPARE] tile_sample_1.png vs tile_comp_01.png
15
- * 色相距离(加权): 8.3° → ✅ 优秀(< 15°)
16
- * 明度差异: 0.06 → ✅ 优秀(< 0.10)
17
- * 饱和度差异: 0.04 → ✅ 优秀(< 0.10)
18
- * 综合一致性评分: 4.7 / 5 → ✅ 通过(≥ 3.0)
19
- *
20
- * 依赖:@gltf-transform/core(CLI 已内置)、sharp(CLI 已内置)
21
- * 若 sharp 未全局可用,运行前:npm install sharp --no-save
22
- */
23
-
24
- import { execSync } from 'child_process';
25
- import { existsSync, mkdirSync, appendFileSync } from 'fs';
26
- import path from 'path';
27
-
28
- // ─── CONFIG ───────────────────────────────────────────────────────────────────
29
-
30
- const CONFIG = {
31
- /** Artist 样本图(风格基准) */
32
- referenceImage: 'assets/images/tiles/tile_sample_1.png',
33
-
34
- /** 要检查的 TA 补全素材目录或文件列表 */
35
- targetDir: 'assets/images/tiles',
36
-
37
- /** 只检查该目录下的哪些文件(glob 后缀匹配) */
38
- targetGlob: '.png',
39
-
40
- /** 排除文件名包含这些关键词的文件(Artist 样本自身) */
41
- excludeKeywords: ['sample', 'concept', 'selected', 'storyboard'],
42
-
43
- /** 日志输出路径 */
44
- logFile: 'ta-workspace/logs/style-compare.log',
45
-
46
- /** 评分阈值(低于此值输出警告) */
47
- warnThreshold: 3.0,
48
- };
49
-
50
- // ─── HELPERS ──────────────────────────────────────────────────────────────────
51
-
52
- /**
53
- * 用 playcraft image info 提取图片的 dominant colors(HSL 列表)
54
- * 返回格式:[{ h, s, l, weight }](weight 为面积占比估算)
55
- */
56
- function extractDominantColors(imagePath) {
57
- try {
58
- const raw = execSync(
59
- `playcraft image info --input "${imagePath}" --json`,
60
- { encoding: 'utf-8', stdio: ['pipe', 'pipe', 'pipe'] }
61
- );
62
- const info = JSON.parse(raw);
63
-
64
- // playcraft image info 返回 dominantColors 数组:[{ r, g, b, hex, percent }]
65
- const colors = (info.dominantColors || []).slice(0, 5);
66
- return colors.map(c => {
67
- const hsl = rgbToHsl(c.r, c.g, c.b);
68
- return { ...hsl, weight: (c.percent || 20) / 100 };
69
- });
70
- } catch {
71
- return [];
72
- }
73
- }
74
-
75
- function rgbToHsl(r, g, b) {
76
- r /= 255; g /= 255; b /= 255;
77
- const max = Math.max(r, g, b), min = Math.min(r, g, b);
78
- const l = (max + min) / 2;
79
- if (max === min) return { h: 0, s: 0, l };
80
- const d = max - min;
81
- const s = l > 0.5 ? d / (2 - max - min) : d / (max + min);
82
- let h;
83
- switch (max) {
84
- case r: h = ((g - b) / d + (g < b ? 6 : 0)) / 6; break;
85
- case g: h = ((b - r) / d + 2) / 6; break;
86
- default: h = ((r - g) / d + 4) / 6;
87
- }
88
- return { h: h * 360, s, l };
89
- }
90
-
91
- /**
92
- * 计算两组 dominant colors 之间的加权色相距离(°)
93
- * 色相距离取最短弧(0–180°)
94
- */
95
- function weightedHueDist(colorsA, colorsB) {
96
- if (!colorsA.length || !colorsB.length) return 999;
97
- let totalDist = 0, totalWeight = 0;
98
- for (const a of colorsA) {
99
- // 找 B 中色相最近的颜色
100
- let minDist = Infinity;
101
- for (const b of colorsB) {
102
- const raw = Math.abs(a.h - b.h);
103
- const dist = raw > 180 ? 360 - raw : raw;
104
- if (dist < minDist) minDist = dist;
105
- }
106
- totalDist += minDist * a.weight;
107
- totalWeight += a.weight;
108
- }
109
- return totalWeight > 0 ? totalDist / totalWeight : 999;
110
- }
111
-
112
- /**
113
- * 计算明度 / 饱和度的加权平均差异(0–1)
114
- */
115
- function weightedChannelDiff(colorsA, colorsB, channel) {
116
- if (!colorsA.length || !colorsB.length) return 1;
117
- const avgA = colorsA.reduce((s, c) => s + c[channel] * c.weight, 0) /
118
- colorsA.reduce((s, c) => s + c.weight, 0);
119
- const avgB = colorsB.reduce((s, c) => s + c[channel] * c.weight, 0) /
120
- colorsB.reduce((s, c) => s + c.weight, 0);
121
- return Math.abs(avgA - avgB);
122
- }
123
-
124
- /**
125
- * 综合一致性评分 1–5
126
- *
127
- * 评分规则(与 playcraft-style-qa Micro-Batch 标准对齐):
128
- * 色相距离 < 15° 且 明度/饱和度差 < 0.10 → 5 分
129
- * 色相距离 < 20° 且 明度/饱和度差 < 0.15 → 4 分
130
- * 色相距离 < 30° 且 明度/饱和度差 < 0.20 → 3 分(勉强可接受)
131
- * 色相距离 < 45° 且 明度/饱和度差 < 0.30 → 2 分(需调整)
132
- * 其他 → 1 分(停止,提问 Artist)
133
- */
134
- function calcScore(hueDist, lightDiff, satDiff) {
135
- const channelOk = Math.max(lightDiff, satDiff);
136
- if (hueDist < 15 && channelOk < 0.10) return 5;
137
- if (hueDist < 20 && channelOk < 0.15) return 4;
138
- if (hueDist < 30 && channelOk < 0.20) return 3;
139
- if (hueDist < 45 && channelOk < 0.30) return 2;
140
- return 1;
141
- }
142
-
143
- function scoreLabel(score) {
144
- if (score >= 4) return '✅ 良好';
145
- if (score >= 3) return '⚠️ 可接受';
146
- return '❌ 偏差过大,需停止';
147
- }
148
-
149
- function hueLabel(dist) {
150
- if (dist < 15) return '✅ 优秀(< 15°)';
151
- if (dist < 30) return '⚠️ 偏差(< 30°)';
152
- return '❌ 严重偏差(≥ 30°)';
153
- }
154
-
155
- function channelLabel(diff) {
156
- if (diff < 0.10) return '✅ 优秀(< 0.10)';
157
- if (diff < 0.20) return '⚠️ 偏差(< 0.20)';
158
- return '❌ 严重偏差(≥ 0.20)';
159
- }
160
-
161
- // ─── MAIN ─────────────────────────────────────────────────────────────────────
162
-
163
- async function main() {
164
- const logDir = path.dirname(CONFIG.logFile);
165
- if (!existsSync(logDir)) mkdirSync(logDir, { recursive: true });
166
-
167
- const refPath = CONFIG.referenceImage;
168
- if (!existsSync(refPath)) {
169
- console.error(`[ERROR] 参考图不存在: ${refPath}`);
170
- process.exit(1);
171
- }
172
-
173
- console.log(`\n📊 色彩风格一致性检查`);
174
- console.log(` 参考图: ${refPath}\n`);
175
-
176
- const refColors = extractDominantColors(refPath);
177
- if (!refColors.length) {
178
- console.error('[ERROR] 无法从参考图提取颜色,请确认 playcraft image info 可用');
179
- process.exit(1);
180
- }
181
-
182
- // 收集目标文件
183
- let targets = [];
184
- try {
185
- const { readdirSync } = await import('fs');
186
- targets = readdirSync(CONFIG.targetDir)
187
- .filter(f => f.endsWith(CONFIG.targetGlob))
188
- .filter(f => !CONFIG.excludeKeywords.some(kw => f.includes(kw)))
189
- .map(f => path.join(CONFIG.targetDir, f));
190
- } catch {
191
- console.error(`[ERROR] 无法读取目录: ${CONFIG.targetDir}`);
192
- process.exit(1);
193
- }
194
-
195
- if (!targets.length) {
196
- console.log(' 未找到需要检查的目标文件');
197
- return;
198
- }
199
-
200
- const results = [];
201
- let failCount = 0;
202
-
203
- for (const target of targets) {
204
- const targetColors = extractDominantColors(target);
205
- if (!targetColors.length) {
206
- console.log(` [SKIP] ${path.basename(target)} — 无法提取颜色`);
207
- continue;
208
- }
209
-
210
- const hueDist = weightedHueDist(refColors, targetColors);
211
- const lightDiff = weightedChannelDiff(refColors, targetColors, 'l');
212
- const satDiff = weightedChannelDiff(refColors, targetColors, 's');
213
- const score = calcScore(hueDist, lightDiff, satDiff);
214
-
215
- if (score < CONFIG.warnThreshold) failCount++;
216
-
217
- const line = [
218
- `[COMPARE] ${path.basename(refPath)} vs ${path.basename(target)}`,
219
- ` 色相距离(加权): ${hueDist.toFixed(1)}° → ${hueLabel(hueDist)}`,
220
- ` 明度差异: ${lightDiff.toFixed(2)} → ${channelLabel(lightDiff)}`,
221
- ` 饱和度差异: ${satDiff.toFixed(2)} → ${channelLabel(satDiff)}`,
222
- ` 综合一致性评分: ${score} / 5 → ${scoreLabel(score)}`,
223
- '',
224
- ].join('\n');
225
-
226
- console.log(line);
227
- results.push({ file: path.basename(target), score, hueDist, lightDiff, satDiff });
228
- }
229
-
230
- // 汇总
231
- const avgScore = results.reduce((s, r) => s + r.score, 0) / (results.length || 1);
232
- const summary = [
233
- `=== 汇总 ===`,
234
- ` 检查文件数: ${results.length}`,
235
- ` 平均评分: ${avgScore.toFixed(1)} / 5`,
236
- ` 低于阈值数: ${failCount}(阈值 ${CONFIG.warnThreshold})`,
237
- failCount > 0
238
- ? ` ⚠️ 建议:停止低分文件类型的批量生产,调整生成参数或向 Artist 提问 ICP`
239
- : ` ✅ 全部通过,可继续批量生产`,
240
- '',
241
- ].join('\n');
242
-
243
- console.log(summary);
244
-
245
- // 写日志
246
- const timestamp = new Date().toISOString();
247
- appendFileSync(CONFIG.logFile, `\n[${timestamp}]\n${results.map(r =>
248
- `${r.file}: score=${r.score} hue=${r.hueDist.toFixed(1)}° L=${r.lightDiff.toFixed(2)} S=${r.satDiff.toFixed(2)}`
249
- ).join('\n')}\n${summary}`);
250
-
251
- if (failCount > 0) process.exit(1);
252
- }
253
-
254
- main().catch(e => { console.error(e); process.exit(1); });