@playcraft/cli 0.1.50-beta → 0.1.52

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 (406) 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/image.js +6 -2
  8. package/dist/commands/login.js +42 -84
  9. package/dist/commands/skills.js +0 -4
  10. package/dist/commands/tools-3d.js +0 -11
  11. package/dist/commands/tools-generation.js +137 -69
  12. package/dist/commands/tools-image-context.js +29 -0
  13. package/dist/commands/tools-utils.js +12 -0
  14. package/dist/commands/tools.js +2 -2
  15. package/dist/config.js +4 -59
  16. package/dist/index.js +3 -40
  17. package/dist/remix/clone.js +0 -2
  18. package/dist/remix/init-template.js +0 -2
  19. package/dist/remix/pull.js +0 -2
  20. package/dist/remix/push.js +1 -21
  21. package/dist/utils/agent-api-client.js +30 -210
  22. package/dist/utils/image-asset-context.js +228 -0
  23. package/dist/utils/playcraft-http-client.js +4 -6
  24. package/package.json +5 -15
  25. package/project-template/.claude/agents/refs/ta-image-generation-detail.md +67 -123
  26. package/project-template/.claude/skills/playcraft-image-generation/SKILL.md +135 -63
  27. package/project-template/.claude/skills/playcraft-image-generation/reference/gen-batch-sprite.template.mjs +42 -33
  28. package/project-template/.claude/skills/playcraft-image-generation/reference/gen-batch.template.mjs +18 -20
  29. package/project-template/.claude/skills/playcraft-image-generation/reference/process-batch.template.mjs +6 -7
  30. package/project-template/.claude/skills/playcraft-image-generation/reference/prompt-cookbook.md +39 -39
  31. package/project-templates/phaser/.claude/agents/refs/ta-image-generation-detail.md +59 -59
  32. package/project-templates/phaser/.claude/skills/playcraft-image-generation/SKILL.md +135 -63
  33. package/project-templates/phaser/.claude/skills/playcraft-image-generation/reference/gen-batch-sprite.template.mjs +42 -33
  34. package/project-templates/phaser/.claude/skills/playcraft-image-generation/reference/gen-batch.template.mjs +18 -20
  35. package/project-templates/phaser/.claude/skills/playcraft-image-generation/reference/process-batch.template.mjs +6 -7
  36. package/project-templates/phaser/.claude/skills/playcraft-image-generation/reference/prompt-cookbook.md +39 -39
  37. package/project-templates/threejs/.claude/agents/refs/ta-image-generation-detail.md +59 -59
  38. package/project-templates/threejs/.claude/skills/playcraft-image-generation/SKILL.md +135 -63
  39. package/project-templates/threejs/.claude/skills/playcraft-image-generation/reference/gen-batch-sprite.template.mjs +42 -33
  40. package/project-templates/threejs/.claude/skills/playcraft-image-generation/reference/gen-batch.template.mjs +18 -20
  41. package/project-templates/threejs/.claude/skills/playcraft-image-generation/reference/process-batch.template.mjs +6 -7
  42. package/project-templates/threejs/.claude/skills/playcraft-image-generation/reference/prompt-cookbook.md +39 -39
  43. package/SKILLS_REGISTRY.md +0 -149
  44. package/dist/auth/account-activation.js +0 -157
  45. package/dist/auth/messages.js +0 -30
  46. package/dist/commands/build-temp.js +0 -26
  47. package/dist/commands/platform-skills.generated.js +0 -19
  48. package/dist/commands/playable.js +0 -53
  49. package/dist/commands/tools-batch.js +0 -113
  50. package/dist/commands/video.js +0 -122
  51. package/dist/commands/workspace-runtime.js +0 -54
  52. package/dist/commands/workspace.js +0 -40
  53. package/dist/project-skills/builtin-import.js +0 -225
  54. package/dist/project-skills/commands.js +0 -77
  55. package/dist/project-skills/lifecycle.js +0 -28
  56. package/dist/project-skills/local-run.js +0 -112
  57. package/dist/project-skills/local-store.js +0 -221
  58. package/dist/project-skills/messages.js +0 -80
  59. package/dist/project-skills/reconcile.js +0 -62
  60. package/dist/project-skills/remote-cache.js +0 -51
  61. package/dist/project-skills/validation.js +0 -19
  62. package/dist/recording/messages.js +0 -40
  63. package/dist/recording/project-digest.js +0 -85
  64. package/dist/recording/recorder.js +0 -293
  65. package/dist/recording/scenario.js +0 -50
  66. package/dist/skill-registry/client.js +0 -345
  67. package/dist/skill-registry/commands.js +0 -180
  68. package/dist/skill-registry/evaluation-client.js +0 -156
  69. package/dist/skill-registry/evaluation-commands.js +0 -174
  70. package/dist/skill-registry/messages.js +0 -177
  71. package/dist/skill-registry/package.js +0 -275
  72. package/dist/skill-registry/platform-package.js +0 -100
  73. package/dist/utils/environment-endpoints.js +0 -17
  74. package/dist/utils/error-diagnostics.js +0 -20
  75. package/dist/utils/tool-operation-journal.js +0 -124
  76. package/dist/utils/video-evidence-git.js +0 -81
  77. package/dist/video-replication/client.js +0 -234
  78. package/dist/video-replication/comparison-evidence.js +0 -149
  79. package/dist/video-replication/comparison-files.js +0 -57
  80. package/dist/video-replication/comparison-log.js +0 -72
  81. package/dist/video-replication/comparison-messages.js +0 -104
  82. package/dist/video-replication/comparison-output.js +0 -63
  83. package/dist/video-replication/comparison-preflight.js +0 -66
  84. package/dist/video-replication/comparison.js +0 -230
  85. package/dist/video-replication/diagnostics.js +0 -41
  86. package/dist/video-replication/evidence.js +0 -165
  87. package/dist/video-replication/media.js +0 -112
  88. package/dist/video-replication/messages.js +0 -97
  89. package/dist/workspace/messages.js +0 -67
  90. package/dist/workspace/transfer-client.js +0 -233
  91. package/dist/workspace/transfer-errors.js +0 -48
  92. package/dist/workspace-runtime/batch/content-changes.js +0 -30
  93. package/dist/workspace-runtime/batch/control.js +0 -86
  94. package/dist/workspace-runtime/batch/deliver.js +0 -173
  95. package/dist/workspace-runtime/batch/freeze.js +0 -101
  96. package/dist/workspace-runtime/batch/generate.js +0 -249
  97. package/dist/workspace-runtime/batch/git.js +0 -40
  98. package/dist/workspace-runtime/batch/occupancy.js +0 -8
  99. package/dist/workspace-runtime/batch/policy.js +0 -70
  100. package/dist/workspace-runtime/batch/prepare.js +0 -317
  101. package/dist/workspace-runtime/batch/processes.js +0 -72
  102. package/dist/workspace-runtime/batch/records.js +0 -113
  103. package/dist/workspace-runtime/batch/routes.js +0 -61
  104. package/dist/workspace-runtime/batch/source-candidate.js +0 -86
  105. package/dist/workspace-runtime/batch/source-capture.js +0 -146
  106. package/dist/workspace-runtime/batch/source-failure.js +0 -43
  107. package/dist/workspace-runtime/batch/source-publish.js +0 -130
  108. package/dist/workspace-runtime/codex/app-server.js +0 -1065
  109. package/dist/workspace-runtime/codex/compact.js +0 -46
  110. package/dist/workspace-runtime/codex/config-toml.js +0 -107
  111. package/dist/workspace-runtime/codex/delivery-tools.js +0 -144
  112. package/dist/workspace-runtime/codex/jsonrpc-stdio.js +0 -145
  113. package/dist/workspace-runtime/codex/launcher-client.js +0 -177
  114. package/dist/workspace-runtime/codex/loopback.js +0 -146
  115. package/dist/workspace-runtime/codex/mcp-config.js +0 -39
  116. package/dist/workspace-runtime/codex/model-broker.js +0 -263
  117. package/dist/workspace-runtime/codex/native-adapter.js +0 -9
  118. package/dist/workspace-runtime/codex/permissions.js +0 -79
  119. package/dist/workspace-runtime/codex/thread-image.js +0 -38
  120. package/dist/workspace-runtime/codex/tool-response.js +0 -10
  121. package/dist/workspace-runtime/codex/ui-instructions.js +0 -4
  122. package/dist/workspace-runtime/codex/ui-tools.js +0 -203
  123. package/dist/workspace-runtime/codex/work-mode.js +0 -15
  124. package/dist/workspace-runtime/main.js +0 -10
  125. package/dist/workspace-runtime/persistence/journal.js +0 -365
  126. package/dist/workspace-runtime/persistence/native-subagents.js +0 -162
  127. package/dist/workspace-runtime/persistence/sqlite-client.js +0 -77
  128. package/dist/workspace-runtime/persistence/sqlite-worker.js +0 -1161
  129. package/dist/workspace-runtime/persistence/stopped-execution.js +0 -77
  130. package/dist/workspace-runtime/previews/diagnostics.js +0 -44
  131. package/dist/workspace-runtime/previews/output.js +0 -36
  132. package/dist/workspace-runtime/previews/publish.js +0 -283
  133. package/dist/workspace-runtime/previews/runtime-preview.js +0 -177
  134. package/dist/workspace-runtime/previews/single-file.js +0 -43
  135. package/dist/workspace-runtime/processes/managed-writes.js +0 -69
  136. package/dist/workspace-runtime/serve.js +0 -441
  137. package/dist/workspace-runtime/server/accept-operation.js +0 -61
  138. package/dist/workspace-runtime/server/asset-transfers.js +0 -63
  139. package/dist/workspace-runtime/server/auth.js +0 -21
  140. package/dist/workspace-runtime/server/connectivity.js +0 -209
  141. package/dist/workspace-runtime/server/desktop-host.js +0 -429
  142. package/dist/workspace-runtime/server/desktop-preview-config.js +0 -81
  143. package/dist/workspace-runtime/server/desktop-preview-service.js +0 -157
  144. package/dist/workspace-runtime/server/desktop-preview-static.js +0 -53
  145. package/dist/workspace-runtime/server/desktop-preview.js +0 -189
  146. package/dist/workspace-runtime/server/dispatch.js +0 -1632
  147. package/dist/workspace-runtime/server/endpoints.js +0 -21
  148. package/dist/workspace-runtime/server/execution-group.js +0 -90
  149. package/dist/workspace-runtime/server/http.js +0 -1340
  150. package/dist/workspace-runtime/server/lock.js +0 -53
  151. package/dist/workspace-runtime/server/operation-record.js +0 -33
  152. package/dist/workspace-runtime/server/rfb-watch-gate.js +0 -168
  153. package/dist/workspace-runtime/server/session-restore.js +0 -84
  154. package/dist/workspace-runtime/server/source-uploader.js +0 -138
  155. package/dist/workspace-runtime/server/submit-operation.js +0 -41
  156. package/dist/workspace-runtime/server/terminal-host.js +0 -366
  157. package/dist/workspace-runtime/server/types.js +0 -1
  158. package/dist/workspace-runtime/server/workspace-transfer.js +0 -168
  159. package/dist/workspace-runtime/verify-artifact.js +0 -59
  160. package/dist/workspace-runtime/workspaces/append-only-log.js +0 -62
  161. package/dist/workspace-runtime/workspaces/archive.js +0 -207
  162. package/dist/workspace-runtime/workspaces/artifact-events.js +0 -55
  163. package/dist/workspace-runtime/workspaces/artifact-files.js +0 -199
  164. package/dist/workspace-runtime/workspaces/artifact-receipts.js +0 -89
  165. package/dist/workspace-runtime/workspaces/artifacts.js +0 -282
  166. package/dist/workspace-runtime/workspaces/asset-library-import.js +0 -366
  167. package/dist/workspace-runtime/workspaces/asset-transfer-dependencies.js +0 -81
  168. package/dist/workspace-runtime/workspaces/asset-transfer-publish.js +0 -434
  169. package/dist/workspace-runtime/workspaces/asset-transfer-storage.js +0 -389
  170. package/dist/workspace-runtime/workspaces/attachment-content.js +0 -73
  171. package/dist/workspace-runtime/workspaces/attachments.js +0 -185
  172. package/dist/workspace-runtime/workspaces/batch-commit.js +0 -142
  173. package/dist/workspace-runtime/workspaces/binary-content.js +0 -65
  174. package/dist/workspace-runtime/workspaces/binary-write.js +0 -112
  175. package/dist/workspace-runtime/workspaces/cli-context.js +0 -23
  176. package/dist/workspace-runtime/workspaces/cli-credentials.js +0 -115
  177. package/dist/workspace-runtime/workspaces/composer-context.js +0 -147
  178. package/dist/workspace-runtime/workspaces/context-error.js +0 -2
  179. package/dist/workspace-runtime/workspaces/delivery-build.js +0 -331
  180. package/dist/workspace-runtime/workspaces/delivery-store.js +0 -168
  181. package/dist/workspace-runtime/workspaces/delivery.js +0 -64
  182. package/dist/workspace-runtime/workspaces/dependencies.js +0 -279
  183. package/dist/workspace-runtime/workspaces/developer-command.js +0 -98
  184. package/dist/workspace-runtime/workspaces/directories.js +0 -132
  185. package/dist/workspace-runtime/workspaces/directory-access.js +0 -37
  186. package/dist/workspace-runtime/workspaces/directory-attachments.js +0 -245
  187. package/dist/workspace-runtime/workspaces/directory-create.js +0 -57
  188. package/dist/workspace-runtime/workspaces/directory-maintenance.js +0 -111
  189. package/dist/workspace-runtime/workspaces/directory-mutations.js +0 -238
  190. package/dist/workspace-runtime/workspaces/directory-revisions.js +0 -56
  191. package/dist/workspace-runtime/workspaces/directory-stats.js +0 -49
  192. package/dist/workspace-runtime/workspaces/disk-snapshot.js +0 -31
  193. package/dist/workspace-runtime/workspaces/empty-template.js +0 -42
  194. package/dist/workspace-runtime/workspaces/file-content.js +0 -48
  195. package/dist/workspace-runtime/workspaces/files-search.js +0 -116
  196. package/dist/workspace-runtime/workspaces/files.js +0 -150
  197. package/dist/workspace-runtime/workspaces/git-credential-broker.js +0 -312
  198. package/dist/workspace-runtime/workspaces/git-credential-helper.js +0 -68
  199. package/dist/workspace-runtime/workspaces/git-direct-store.js +0 -155
  200. package/dist/workspace-runtime/workspaces/git.js +0 -670
  201. package/dist/workspace-runtime/workspaces/instructions.js +0 -56
  202. package/dist/workspace-runtime/workspaces/json5-edit.js +0 -313
  203. package/dist/workspace-runtime/workspaces/library-attachments.js +0 -268
  204. package/dist/workspace-runtime/workspaces/operation-log.js +0 -23
  205. package/dist/workspace-runtime/workspaces/optional-platform-skills.js +0 -14
  206. package/dist/workspace-runtime/workspaces/parameter-agent-inputs.js +0 -87
  207. package/dist/workspace-runtime/workspaces/parameter-agent-protocol.js +0 -29
  208. package/dist/workspace-runtime/workspaces/parameter-agent-store.js +0 -58
  209. package/dist/workspace-runtime/workspaces/parameter-agent.js +0 -282
  210. package/dist/workspace-runtime/workspaces/parameters.js +0 -295
  211. package/dist/workspace-runtime/workspaces/prepare.js +0 -278
  212. package/dist/workspace-runtime/workspaces/registry.js +0 -251
  213. package/dist/workspace-runtime/workspaces/remix-references.js +0 -301
  214. package/dist/workspace-runtime/workspaces/revisions.js +0 -31
  215. package/dist/workspace-runtime/workspaces/session-image.js +0 -104
  216. package/dist/workspace-runtime/workspaces/shared-git.js +0 -40
  217. package/dist/workspace-runtime/workspaces/skill-artifact-loader.js +0 -95
  218. package/dist/workspace-runtime/workspaces/skills.js +0 -191
  219. package/dist/workspace-runtime/workspaces/transfer-quota.js +0 -69
  220. package/dist/workspace-runtime/workspaces/transfer.js +0 -471
  221. package/dist/workspace-runtime/workspaces/turn-changes.js +0 -75
  222. package/dist/workspace-runtime/workspaces/video-attachments.js +0 -49
  223. package/project-template/.claude/skills/playcraft-replica-validation/SKILL.md +0 -25
  224. package/project-template/.claude/skills/playcraft-replica-validation/references/contracts.md +0 -79
  225. package/project-template/.claude/skills/playcraft-video-understanding/SKILL.md +0 -29
  226. package/project-template/.claude/skills/playcraft-video-understanding/references/contracts.md +0 -37
  227. package/project-template-v2/.claude/agents/artist.md +0 -82
  228. package/project-template-v2/.claude/agents/developer.md +0 -153
  229. package/project-template-v2/.claude/agents/game-designer.md +0 -264
  230. package/project-template-v2/.claude/agents/refs/artist-art-style-catalog.md +0 -533
  231. package/project-template-v2/.claude/agents/refs/artist-color-audio-recipes.md +0 -153
  232. package/project-template-v2/.claude/agents/refs/artist-dimension-axis.md +0 -27
  233. package/project-template-v2/.claude/agents/refs/artist-master-composite-recipes.md +0 -208
  234. package/project-template-v2/.claude/agents/refs/atom-skill-library.md +0 -81
  235. package/project-template-v2/.claude/agents/refs/developer-impl-cookbook.md +0 -432
  236. package/project-template-v2/.claude/agents/refs/framework-5-component-filter.md +0 -252
  237. package/project-template-v2/.claude/agents/refs/framework-game-feel-juice.md +0 -266
  238. package/project-template-v2/.claude/agents/refs/framework-mda.md +0 -147
  239. package/project-template-v2/.claude/agents/refs/game-designer-gameplay-sufficiency.md +0 -123
  240. package/project-template-v2/.claude/agents/refs/ta-3d-flip-recipe.md +0 -88
  241. package/project-template-v2/.claude/agents/refs/ta-atlas-deliverable-standard.md +0 -67
  242. package/project-template-v2/.claude/agents/refs/ta-batch-pipeline-recipes.md +0 -120
  243. package/project-template-v2/.claude/agents/refs/ta-image-generation-detail.md +0 -300
  244. package/project-template-v2/.claude/agents/refs/ta-image-ops-reference.md +0 -495
  245. package/project-template-v2/.claude/agents/refs/ta-pipeline-cookbook.md +0 -1141
  246. package/project-template-v2/.claude/agents/refs/ta-tools-reference.md +0 -111
  247. package/project-template-v2/.claude/agents/refs/ta-vfx-preset-catalog.md +0 -365
  248. package/project-template-v2/.claude/agents/refs/threejs-cannon-pitfalls.md +0 -412
  249. package/project-template-v2/.claude/agents/reviewer.md +0 -75
  250. package/project-template-v2/.claude/agents/technical-artist.md +0 -86
  251. package/project-template-v2/.claude/hooks/snapshot-milestone.mjs +0 -243
  252. package/project-template-v2/.claude/hooks/user-prompt.mjs +0 -133
  253. package/project-template-v2/.claude/settings.json +0 -33
  254. package/project-template-v2/.claude/skills/brainstorming/SKILL.md +0 -161
  255. package/project-template-v2/.claude/skills/brainstorming/scripts/frame-template.html +0 -270
  256. package/project-template-v2/.claude/skills/brainstorming/scripts/helper.js +0 -177
  257. package/project-template-v2/.claude/skills/brainstorming/scripts/server.cjs +0 -354
  258. package/project-template-v2/.claude/skills/brainstorming/scripts/start-server.sh +0 -148
  259. package/project-template-v2/.claude/skills/brainstorming/scripts/stop-server.sh +0 -56
  260. package/project-template-v2/.claude/skills/brainstorming/scripts/wait-for-selection.sh +0 -62
  261. package/project-template-v2/.claude/skills/brainstorming/spec-document-reviewer-prompt.md +0 -49
  262. package/project-template-v2/.claude/skills/brainstorming/visual-companion.md +0 -309
  263. package/project-template-v2/.claude/skills/playcraft-ad-psychology/SKILL.md +0 -182
  264. package/project-template-v2/.claude/skills/playcraft-art-style-guide/SKILL.md +0 -123
  265. package/project-template-v2/.claude/skills/playcraft-asset-state-sheet/SKILL.md +0 -205
  266. package/project-template-v2/.claude/skills/playcraft-audio-generation/SKILL.md +0 -280
  267. package/project-template-v2/.claude/skills/playcraft-batch-pipeline/SKILL.md +0 -184
  268. package/project-template-v2/.claude/skills/playcraft-build-optimizer/SKILL.md +0 -306
  269. package/project-template-v2/.claude/skills/playcraft-image-generation/SKILL.md +0 -298
  270. package/project-template-v2/.claude/skills/playcraft-image-generation/reference/build-sprite-sheet.template.mjs +0 -123
  271. package/project-template-v2/.claude/skills/playcraft-image-generation/reference/compare-style.template.mjs +0 -254
  272. package/project-template-v2/.claude/skills/playcraft-image-generation/reference/gen-batch-sprite.template.mjs +0 -324
  273. package/project-template-v2/.claude/skills/playcraft-image-generation/reference/gen-batch.template.mjs +0 -97
  274. package/project-template-v2/.claude/skills/playcraft-image-generation/reference/gen-edit-variants.template.mjs +0 -118
  275. package/project-template-v2/.claude/skills/playcraft-image-generation/reference/process-batch.template.mjs +0 -137
  276. package/project-template-v2/.claude/skills/playcraft-image-generation/reference/prompt-cookbook.md +0 -397
  277. package/project-template-v2/.claude/skills/playcraft-image-generation/reference/validate-sprite-sheet.template.mjs +0 -296
  278. package/project-template-v2/.claude/skills/playcraft-image-ops/SKILL.md +0 -122
  279. package/project-template-v2/.claude/skills/playcraft-image-processing/SKILL.md +0 -219
  280. package/project-template-v2/.claude/skills/playcraft-masking/SKILL.md +0 -373
  281. package/project-template-v2/.claude/skills/playcraft-playable-optimization/SKILL.md +0 -161
  282. package/project-template-v2/.claude/skills/playcraft-research/SKILL.md +0 -215
  283. package/project-template-v2/.claude/skills/playcraft-skill-recommender/SKILL.md +0 -382
  284. package/project-template-v2/.claude/skills/playcraft-sprite-generation/SKILL.md +0 -423
  285. package/project-template-v2/.claude/skills/playcraft-sprite-remix/SKILL.md +0 -158
  286. package/project-template-v2/.claude/skills/playcraft-sprite-sheet/SKILL.md +0 -100
  287. package/project-template-v2/.claude/skills/playcraft-storyboard/SKILL.md +0 -167
  288. package/project-template-v2/.claude/skills/playcraft-style-qa/SKILL.md +0 -270
  289. package/project-template-v2/.claude/skills/playcraft-text-rendering/SKILL.md +0 -236
  290. package/project-template-v2/.claude/skills/playcraft-vfx-animation/SKILL.md +0 -130
  291. package/project-template-v2/.claude/skills/playwright-cli/SKILL.md +0 -390
  292. package/project-template-v2/.claude/skills/playwright-cli/references/element-attributes.md +0 -23
  293. package/project-template-v2/.claude/skills/playwright-cli/references/playwright-tests.md +0 -39
  294. package/project-template-v2/.claude/skills/playwright-cli/references/request-mocking.md +0 -87
  295. package/project-template-v2/.claude/skills/playwright-cli/references/running-code.md +0 -240
  296. package/project-template-v2/.claude/skills/playwright-cli/references/session-management.md +0 -226
  297. package/project-template-v2/.claude/skills/playwright-cli/references/spec-driven-testing.md +0 -308
  298. package/project-template-v2/.claude/skills/playwright-cli/references/storage-state.md +0 -275
  299. package/project-template-v2/.claude/skills/playwright-cli/references/test-generation.md +0 -134
  300. package/project-template-v2/.claude/skills/playwright-cli/references/tracing.md +0 -142
  301. package/project-template-v2/.claude/skills/playwright-cli/references/video-recording.md +0 -153
  302. package/project-template-v2/.claude/skills/session-analyzer/SKILL.md +0 -386
  303. package/project-template-v2/.claude/skills/session-analyzer/scripts/execution-breakdown.mjs +0 -182
  304. package/project-template-v2/.claude/skills/session-analyzer/scripts/find-turns.mjs +0 -72
  305. package/project-template-v2/.claude/skills/session-analyzer/scripts/heavy-output.mjs +0 -121
  306. package/project-template-v2/.claude/skills/session-analyzer/scripts/resolve-session.mjs +0 -102
  307. package/project-template-v2/.claude/skills/session-analyzer/scripts/subagent-stats.mjs +0 -127
  308. package/project-template-v2/.claude/skills/session-analyzer/scripts/subagent-tool-timeline.mjs +0 -106
  309. package/project-template-v2/.claude/skills/session-analyzer/scripts/time-gaps.mjs +0 -128
  310. package/project-template-v2/.claude/skills/session-analyzer/scripts/turn-timeline.mjs +0 -67
  311. package/project-template-v2/.claude/snapshot.mjs +0 -263
  312. package/project-template-v2/.playcraft/skills.lock.json +0 -152
  313. package/project-template-v2/CLAUDE.md +0 -146
  314. package/project-template-v2/assets/audio/bgm/.gitkeep +0 -0
  315. package/project-template-v2/assets/audio/sfx/.gitkeep +0 -0
  316. package/project-template-v2/assets/bundles/.gitkeep +0 -0
  317. package/project-template-v2/assets/images/bg/.gitkeep +0 -0
  318. package/project-template-v2/assets/images/reference/.gitkeep +0 -0
  319. package/project-template-v2/assets/images/storyboard/.gitkeep +0 -0
  320. package/project-template-v2/assets/images/tiles/.gitkeep +0 -0
  321. package/project-template-v2/assets/images/ui/.gitkeep +0 -0
  322. package/project-template-v2/assets/images/vfx/.gitkeep +0 -0
  323. package/project-template-v2/assets/models/.gitkeep +0 -0
  324. package/project-template-v2/docs/harness/iteration-1/context-flow.md +0 -254
  325. package/project-template-v2/docs/harness/iteration-1/generate-flow.md +0 -91
  326. package/project-template-v2/docs/harness/iteration-1/ideate-flow.md +0 -214
  327. package/project-template-v2/docs/harness/iteration-1/optimize-flow.md +0 -75
  328. package/project-template-v2/docs/harness/iteration-1/wrapup-flow.md +0 -63
  329. package/project-template-v2/docs/harness/iteration-2/context-flow.md +0 -223
  330. package/project-template-v2/docs/harness/iteration-2/generate-flow.md +0 -129
  331. package/project-template-v2/docs/harness/iteration-2/ideate-flow.md +0 -267
  332. package/project-template-v2/docs/harness/iteration-2/optimize-flow.md +0 -164
  333. package/project-template-v2/docs/harness/iteration-2/wrapup-flow.md +0 -115
  334. package/project-template-v2/docs/harness/orchestrator-flow.md +0 -364
  335. package/project-template-v2/docs/project-state.json +0 -60
  336. package/project-template-v2/docs/project-state.md +0 -72
  337. package/project-template-v2/docs/standards/README.md +0 -225
  338. package/project-template-v2/docs/standards/agent-behavior-standards.md +0 -174
  339. package/project-template-v2/docs/standards/artifacts/design-brief.md +0 -19
  340. package/project-template-v2/docs/standards/artifacts/design.md +0 -22
  341. package/project-template-v2/docs/standards/artifacts/game-code.md +0 -41
  342. package/project-template-v2/docs/standards/artifacts/todo-list.md +0 -41
  343. package/project-template-v2/docs/standards/iter1-agent-behavior-standards.md +0 -343
  344. package/project-template-v2/game/index.ts +0 -18
  345. package/project-template-v2/globals.d.ts +0 -51
  346. package/project-template-v2/index.css +0 -34
  347. package/project-template-v2/index.html +0 -18
  348. package/project-template-v2/main.ts +0 -9
  349. package/project-template-v2/package.json +0 -46
  350. package/project-template-v2/skills/_shared/scripts/dispatch-clear.mjs +0 -31
  351. package/project-template-v2/skills/_shared/scripts/dispatch-set.mjs +0 -86
  352. package/project-template-v2/skills/_shared/scripts/dod-check.mjs +0 -153
  353. package/project-template-v2/skills/_shared/scripts/handoff-append.mjs +0 -70
  354. package/project-template-v2/skills/_shared/scripts/lib/validator-artifacts.mjs +0 -91
  355. package/project-template-v2/skills/_shared/scripts/pipeline/dod-config.mjs +0 -131
  356. package/project-template-v2/skills/_shared/scripts/pipeline/index.mjs +0 -80
  357. package/project-template-v2/skills/_shared/scripts/pipeline/iteration-1-core.mjs +0 -90
  358. package/project-template-v2/skills/_shared/scripts/pipeline/iteration-2-wrap.mjs +0 -93
  359. package/project-template-v2/skills/_shared/scripts/pipeline/iteration-3-visual.mjs +0 -23
  360. package/project-template-v2/skills/_shared/scripts/render-project-state.mjs +0 -230
  361. package/project-template-v2/skills/_shared/scripts/state-advance-stage.mjs +0 -58
  362. package/project-template-v2/skills/_shared/scripts/state-get.mjs +0 -339
  363. package/project-template-v2/skills/_shared/scripts/state-handoff.mjs +0 -39
  364. package/project-template-v2/skills/_shared/scripts/state-set.mjs +0 -94
  365. package/project-template-v2/skills/_shared/scripts/state-store.mjs +0 -783
  366. package/project-template-v2/skills/_shared/scripts/todo-add.mjs +0 -88
  367. package/project-template-v2/skills/_shared/scripts/todo-get.mjs +0 -130
  368. package/project-template-v2/skills/_shared/scripts/todo-remove.mjs +0 -33
  369. package/project-template-v2/skills/_shared/scripts/todo-set.mjs +0 -47
  370. package/project-template-v2/skills/_shared/scripts/verify-asset-code-sync.mjs +0 -268
  371. package/project-template-v2/skills/_shared/scripts/verify-env.mjs +0 -285
  372. package/project-template-v2/skills/_shared/scripts/verify-placeholders.mjs +0 -161
  373. package/project-template-v2/skills/playable-autoplay/SKILL.md +0 -176
  374. package/project-template-v2/skills/playable-autoplay/agents/openai.yaml +0 -4
  375. package/project-template-v2/skills/playable-debug/SKILL.md +0 -116
  376. package/project-template-v2/skills/playable-debug/agents/openai.yaml +0 -4
  377. package/project-template-v2/skills/playable-debug/references/debug-config.md +0 -40
  378. package/project-template-v2/skills/playable-record/SKILL.md +0 -140
  379. package/project-template-v2/skills/playable-record/scripts/lib/dev-server.mjs +0 -104
  380. package/project-template-v2/skills/playable-record/scripts/lib/record-audio-bridge.js +0 -141
  381. package/project-template-v2/skills/playable-record/scripts/record-playable.mjs +0 -425
  382. package/project-template-v2/skills/playable-record/scripts/verify-contract.mjs +0 -261
  383. package/project-template-v2/skills/playable-record/scripts/verify-firstwin.mjs +0 -398
  384. package/project-template-v2/skills/playable-record/scripts/verify-fusion.mjs +0 -322
  385. package/project-template-v2/skills/playable-record/scripts/verify-lifecycle.mjs +0 -105
  386. package/project-template-v2/skills/playable-record/scripts/verify-vlm-video.mjs +0 -230
  387. package/project-template-v2/skills/playable-validate/SKILL.md +0 -61
  388. package/project-template-v2/skills/playable-validate/validation-rules.md +0 -14
  389. package/project-template-v2/skills/playable-verify-ui/SKILL.md +0 -63
  390. package/project-template-v2/skills/playable-verify-ui/scripts/lib/__init__.py +0 -1
  391. package/project-template-v2/skills/playable-verify-ui/scripts/lib/config_expr.js +0 -218
  392. package/project-template-v2/skills/playable-verify-ui/scripts/lib/node_utils.js +0 -51
  393. package/project-template-v2/skills/playable-verify-ui/scripts/lib/profile_loader.py +0 -59
  394. package/project-template-v2/skills/playable-verify-ui/scripts/lib/report.py +0 -106
  395. package/project-template-v2/skills/playable-verify-ui/scripts/lib/runtime_contract.js +0 -116
  396. package/project-template-v2/skills/playable-verify-ui/scripts/verify_fetch_antipatterns.py +0 -59
  397. package/project-template-v2/skills/playable-verify-ui/scripts/verify_hardcoded_layout.js +0 -64
  398. package/project-template-v2/skills/playable-verify-ui/scripts/verify_runtime_contract.js +0 -58
  399. package/project-template-v2/skills/playable-verify-ui/scripts/verify_text_overlap.py +0 -333
  400. package/project-template-v2/ta-workspace/scripts/.gitkeep +0 -0
  401. package/project-template-v2/tsconfig.json +0 -20
  402. package/project-template-v2/vite.config.ts +0 -27
  403. package/project-templates/batch-locks/phaser.yaml +0 -922
  404. package/project-templates/batch-locks/threejs.yaml +0 -978
  405. package/project-templates/empty/AGENTS.md +0 -41
  406. package/project-templates/empty/gitignore +0 -33
package/README.md CHANGED
@@ -7,38 +7,14 @@
7
7
 
8
8
  PlayCraft CLI(Command-Line Interface,命令行工具)支持本地代码与云端编辑器实时同步,以及将 PlayCanvas/PlayCraft 项目打包为多平台 Playable Ads。
9
9
 
10
- ## 云端工作台 Runtime
10
+ ## 云端工作台 Runtime(计划能力)
11
11
 
12
- `playcraft workspace-runtime serve --config <json>` 已注册。它前台常驻、跳过升级检查,读取 Runtime Server 下发的引导配置,只绑定回环并校验 control token。`runtime.ensure` 会执行到终态;设置 `PLAYCRAFT_NATIVE_ADAPTER=loopback` 或测试注入 loopback 适配器后,可跑会话 create/turn/interrupt/审批,以及本地 journal 检查点/恢复/销毁。工作空间相对路径的 `file.write` 与文件检查点不依赖 loopback。相同幂等键上的 `uncertain` 操作不会新开 turn。这不是 Codex App Server。现有 `playcraft start` 仍用于单项目本地开发,二者不要混用。
12
+ 云端工作台计划以 `@playcraft/cli` 承载自定义 AGS(Agent Sandbox,Agent 沙箱服务)内的常驻运行服务,新增 `playcraft workspace-runtime serve` 命令,管理多个 Workspace、一个 Codex App Server、文件/Git/终端/预览及持久恢复。该命令尚未实现,当前发布版本不可调用;现有 `playcraft start` 仍用于单项目本地开发。
13
13
 
14
- 实现与模块边界见 [Sandbox Agent Server](./src/workspace-runtime/README.md);契约见 [云端工作台后端架构方案](../../docs/architecture/backend/cloud-workspace/backend-architecture.md#cli-runtime)。
15
-
16
- ## 下载云工作区并推送本地修改
17
-
18
- 文件面板的下载弹窗可复制下列命令。需要发布包含 `workspace` 命令的新版 `@playcraft/cli`,并部署对应的工作区传输端点;旧版 Remix 命令保持兼容。
19
-
20
- ```bash
21
- npx @playcraft/cli@latest login --url 'https://playcraft.example.com/__env/test-a'
22
- npx @playcraft/cli@latest workspace clone --workspace-id '<workspace-id>' --directory root --url 'https://playcraft.example.com/__env/test-a' --dir './my-workspace'
23
- cd './my-workspace'
24
- # 完成本地编辑后提交,再同步回原工作区
25
- git add -A
26
- git commit -m 'Update workspace'
27
- npx @playcraft/cli@latest workspace push
28
- ```
29
-
30
- `--directory root` 下载整个工作区的工程目录;也可指定 `basic` 或已有工程目录。独立工作区无需关联平台项目。下载包含当前未提交文件、二进制素材和 `dist/` 产物,使用只有当前快照的新 Git 历史;排除 `.git`、`node_modules`、凭据文件和运行时路由信息。本地 `.playcraft-workspace.json` 保存目标工作区、目录、完整环境基址和快照摘要,不含访问令牌,默认不进入提交。服务基址的环境路径前缀会完整保留。
31
-
32
- `workspace push` 要求本地修改已经提交,按上次确认的文件树生成增量包,只传输变化的文件内容,并将新增、修改和删除同步回同一个云工作区。旧克隆保留的 `.playcraft-workspace.json` 中已有文件树摘要,可继续使用新版命令推送。大文件随增量包传输,无需 Git LFS(Large File Storage,大文件存储),也无需为本地克隆配置真实远程 Git 仓库。
33
-
34
- 工作区传输容量按管理员配置的工作区存储额度和沙箱剩余磁盘空间判断。管理员可通过 `PLAYCRAFT_WORKSPACE_STORAGE_QUOTA_BYTES` 设置每个工作区的存储总量上限,值为正整数字节数;额度覆盖整个工作区的实际文件,包括依赖和 Git 元数据。该设置在新沙箱创建时下发,修改环境变量不会自动更新已有沙箱。未设置时,仍检查沙箱可用磁盘空间,并保留总容量的 10% 作为运行余量。传输包与临时快照也需要磁盘空间;容量不足时,应清理不再需要的文件或由管理员调整额度。弹窗中的直接下载用于导出文件,不能代替推送本地修改。
35
-
36
- 云端文件变化或有正在运行的任务时,推送会拒绝覆盖,需重新克隆并合并后再推送。云端现有 Git 仓库和分支元数据会保留,保存到远端项目仍使用工作区原有保存流程;针对项目分支的操作可继续使用 `remix clone` / `remix push`。命令支持 `--token`、`--dir` 与 `--json`。
14
+ 新服务采用固定版本、前台非交互运行,由镜像监管器启动;独立 Runtime Server 在沙箱外部署。具体代码归属、进程权限、发布与恢复契约见 [云端工作台后端架构方案](../../docs/architecture/backend/cloud-workspace/backend-architecture.md#cli-runtime)。
37
15
 
38
16
  ## ✨ 特性
39
17
 
40
- 远程技能的上传、更新、发布、审核、查询与下载见 [技能注册表命令](./SKILLS_REGISTRY.md)。入口为 `playcraft skills registry`,复用已有登录;本地技能发现与项目技能命令保持原有语义。
41
-
42
18
  - 🚀 **本地开发隧道** - 在本地 IDE 编写代码,云端编辑器实时预览与热更新
43
19
  - 📦 **Playable Ads 打包** - 支持 10 个主流广告平台的一键打包
44
20
  - 🎬 **智能场景选择** - 交互式场景选择,可减小 30-60% 文件大小(**新功能**)
@@ -165,17 +141,6 @@ playcraft login --url https://your-playcraft.example.com
165
141
 
166
142
  登录成功后,`tools`、`recommend`、`fix-ids` 等所有需要后端 API 的命令均无需额外配置,直接使用。
167
143
 
168
- 账号提示待激活时,使用同一目标环境及已保存的个人访问令牌主动激活:
169
-
170
- ```bash
171
- playcraft login --activate
172
- playcraft login --activate --url https://your-playcraft.example.com
173
- ```
174
-
175
- 也可通过 `PLAYCRAFT_TOKEN` 提供个人访问令牌。激活只发送一次请求,成功后重新执行原业务命令;该动作不会打开浏览器或续签令牌。目标服务须已接入身份服务的激活入口;封禁、停用账号及沙箱执行令牌不能用于激活。
176
-
177
- 若本地、全局或环境变量配置冲突,激活会要求明确指定 `--url`、所需的 `PLAYCRAFT_ENV` 和对应的个人访问令牌。
178
-
179
144
  ### 沙箱环境(CI / Agent)
180
145
 
181
146
  在沙箱或 CI 中可通过 `.playcraft.json` 或环境变量配置:
@@ -223,30 +188,6 @@ echo '{"token":"<sandbox-jwt>","apiUrl":"https://..."}' > .playcraft.json
223
188
  | `recommend improvements` | Tag 改进建议 | `playcraft recommend improvements --channel Facebook` |
224
189
  | `recommend random` | 随机 Tag 组合推荐 | `playcraft recommend random --channel Google` |
225
190
 
226
- ### 业务工具请求恢复
227
-
228
- 业务工具写请求要求服务支持持久操作协议。命令行先保存请求编号、路径和输入摘要到 `~/.playcraft/tool-requests/`,再发送请求;记录不包含凭证或请求正文。可用绝对路径环境变量 `PLAYCRAFT_TOOL_REQUEST_DIR` 指定可持久保留的目录。
229
-
230
- 原样重跑同一条命令(路径与参数都相同)时,命令行按上一次的结果决定是否沿用原请求编号:
231
-
232
- | 上一次的结果 | 原样重跑时 |
233
- | -------------------------------------------------------------------- | -------------------------------------------------------- |
234
- | 成功(2xx) | 新操作 |
235
- | 请求被拒绝(4xx,下列 409 除外):请求没有被执行 | 新操作 |
236
- | 服务端错误(5xx)、超时或连接中断:结果未知 | 沿用原编号,不会另起一次操作;服务端按下文的恢复方式处理 |
237
- | 409 `business_operation_in_progress`:原操作仍在执行 | 沿用原编号,稍后重跑取得结果 |
238
- | 409 `business_operation_requires_reconciliation`:结果未知,需要核对 | 沿用原编号,不会再执行 |
239
-
240
- 沿用原编号时,服务端按原操作的状态处理:已完成则返回原结果;仍在执行则返回 409 `business_operation_in_progress`;没有拿到结果就结束时,按该工具声明的恢复方式决定,可以安全重做的工具(生图、构建、发布到 COS 等)用原编号再执行一次,其余返回 409 `business_operation_requires_reconciliation`。原调用的执行租约有效期间(执行中每 20 秒续期,60 秒未续即过期),同一编号不会被再次执行;续期因服务或数据库故障中断超过 60 秒时,重做可能与仍在运行的原调用重叠。
241
-
242
- 需要核对的操作,只有确认它没有生效后,才可设置 `PLAYCRAFT_TOOL_NEW_REQUEST=1` 强制发起新操作;不要删除记录来绕过。也可以显式指定编号,只查询原操作的确定结果(不会重新执行;声明了恢复方式的工具若上次报错,返回那次的错误)。只查询时即使是可以安全重做的工具,没有结果也返回需要核对;去掉 `PLAYCRAFT_TOOL_REQUEST_ID` 原样重跑即可续做:
243
-
244
- ```bash
245
- PLAYCRAFT_TOOL_REQUEST_ID=<错误中显示的请求编号> playcraft tools build-project --project-id <原项目编号>
246
- ```
247
-
248
- 能力检查失败时命令会明确说明尚未发送操作。服务不兼容时命令会在发送业务请求前停止;沙箱命令行与 Business 须排空旧调用后同步升级。
249
-
250
191
  ### 构建相关
251
192
 
252
193
  | 命令 | 说明 | 示例 |
@@ -2,7 +2,7 @@ import express from 'express';
2
2
  import crypto from 'node:crypto';
3
3
  import path from 'node:path';
4
4
  import fs from 'node:fs/promises';
5
- import { eq, inArray } from '@playcraft/common/database/operators';
5
+ import { eq, inArray } from 'drizzle-orm';
6
6
  import pc from 'picocolors';
7
7
  import { createSqliteAdapter } from '@playcraft/common/database';
8
8
  import { AssetModel, ProjectModel, SceneModel } from '@playcraft/common/models';
@@ -5,10 +5,8 @@ export function getCliTopicsHelpText() {
5
5
  '',
6
6
  ' 本地开发 create, init, start, stop, status, logs, config, sync, fix-ids',
7
7
  ' 素材 tools generate-* | image <子命令> | audio <子命令> | prefab <子命令>',
8
- ' 视频理解 video models | video understand | video jobs get/cancel',
9
8
  ' 平台 build, build-base, build-playable, build-all, analyze, inspect, upgrade',
10
9
  ' tools 除 generate-* 外(Git / 沙箱构建 / 发布 / 列表 / Prefab 等,需后端 API)',
11
- ' 沙箱常驻 workspace-runtime serve(Cloud Workspace,由 Runtime 引导配置启动)',
12
10
  '',
13
11
  '也可运行: playcraft topics',
14
12
  '',
@@ -4,7 +4,6 @@ import pc from 'picocolors';
4
4
  import ora from 'ora';
5
5
  import { BaseBuilder, ViteBuilder, PlayableBuilder, EngineDetector, detectAmmoUsage, } from '@playcraft/build';
6
6
  import { loadBuildConfig } from '../build-config.js';
7
- import { cleanupBuildTempDirectory, createBuildTempDirectory } from './build-temp.js';
8
7
  import inquirer from 'inquirer';
9
8
  /**
10
9
  * 所有可用的渠道平台
@@ -142,7 +141,6 @@ export async function buildAllCommand(projectPath, options) {
142
141
  const spinner = ora(pc.cyan('🚀 批量打渠道包...')).start();
143
142
  let isBaseBuild = false;
144
143
  let baseBuildDir;
145
- let tempBuildDir;
146
144
  try {
147
145
  // 1. 确定要构建的平台列表
148
146
  let targetPlatforms;
@@ -417,9 +415,9 @@ export async function buildAllCommand(projectPath, options) {
417
415
  }
418
416
  else {
419
417
  spinner.text = pc.cyan('执行阶段1: 基础构建(仅一次)...');
420
- tempBuildDir = await createBuildTempDirectory(resolvedProjectPath);
418
+ const tempDir = path.join(resolvedProjectPath, '.playcraft-temp', `base-build-${Date.now()}`);
421
419
  const baseBuilder = new BaseBuilder(resolvedProjectPath, {
422
- outputDir: tempBuildDir,
420
+ outputDir: tempDir,
423
421
  selectedScenes,
424
422
  analyze: options.analyze,
425
423
  });
@@ -595,7 +593,6 @@ export async function buildAllCommand(projectPath, options) {
595
593
  if (failCount > 0) {
596
594
  process.exit(1);
597
595
  }
598
- await cleanupBuildTempDirectory(tempBuildDir);
599
596
  }
600
597
  catch (error) {
601
598
  spinner.fail(pc.red('批量构建失败'));
@@ -605,4 +602,21 @@ export async function buildAllCommand(projectPath, options) {
605
602
  }
606
603
  process.exit(1);
607
604
  }
605
+ finally {
606
+ // 清理临时目录,避免磁盘空间浪费
607
+ if (!isBaseBuild && baseBuildDir && baseBuildDir.includes('.playcraft-temp')) {
608
+ try {
609
+ await fs.rm(baseBuildDir, { recursive: true, force: true });
610
+ // 如果 .playcraft-temp 父目录为空,也一并清理
611
+ const tempParent = path.dirname(baseBuildDir);
612
+ const remaining = await fs.readdir(tempParent);
613
+ if (remaining.length === 0) {
614
+ await fs.rm(tempParent, { recursive: true, force: true });
615
+ }
616
+ }
617
+ catch {
618
+ // 清理失败不影响构建结果
619
+ }
620
+ }
621
+ }
608
622
  }
@@ -4,7 +4,6 @@ import pc from 'picocolors';
4
4
  import ora from 'ora';
5
5
  import { BaseBuilder, ViteBuilder, PlayableBuilder, PlayableAnalyzer, EngineDetector, detectAmmoUsage } from '@playcraft/build';
6
6
  import { loadBuildConfig } from '../build-config.js';
7
- import { cleanupBuildTempDirectory, createBuildTempDirectory } from './build-temp.js';
8
7
  import inquirer from 'inquirer';
9
8
  /**
10
9
  * 类型守卫:检查对象是否符合 PlayableScriptsConfig 类型
@@ -251,7 +250,6 @@ export async function buildCommand(projectPath, options) {
251
250
  const spinner = ora(pc.cyan('🔨 开始打包 Playable Ad...')).start();
252
251
  // 清理选项(默认为 false,使用覆盖模式)
253
252
  const shouldClean = options.clean === true;
254
- let tempBuildDir;
255
253
  try {
256
254
  // ====== 引擎 + 构建工具检测 ======
257
255
  spinner.text = pc.cyan('检测项目引擎类型...');
@@ -452,7 +450,6 @@ export async function buildCommand(projectPath, options) {
452
450
  const shouldRunPlayableOnly = options.mode === 'playable';
453
451
  // 验证平台
454
452
  const validPlatforms = [
455
- 'playcraft',
456
453
  'facebook',
457
454
  'snapchat',
458
455
  'ironsource',
@@ -476,7 +473,6 @@ export async function buildCommand(projectPath, options) {
476
473
  // 注:Facebook 在 Phaser(playable-scripts devkit)下的产物格式由其 devkit 输入配置决定(恒为 ZIP),
477
474
  // 平台侧不在此处做引擎判断。
478
475
  const platformFormatConfig = {
479
- playcraft: { formats: ['html'], default: 'html' },
480
476
  facebook: { formats: ['html', 'zip'], default: 'html' },
481
477
  applovin: { formats: ['html'], default: 'html' },
482
478
  ironsource: { formats: ['html'], default: 'html' },
@@ -588,11 +584,8 @@ export async function buildCommand(projectPath, options) {
588
584
  console.log(pc.dim(' 无主题目录,跳过主题选择'));
589
585
  }
590
586
  }
591
- // 输入商店跳转地址(CTA)- 如果配置文件中没有则必填;通用预览(playcraft)不面向渠道,可不填
592
- if (selectedPlatform === 'playcraft' && !options.storeUrls) {
593
- console.log(pc.dim('\nℹ️ 通用预览不需要商店地址'));
594
- }
595
- else if (!options.storeUrls) {
587
+ // 输入商店跳转地址(CTA)- 如果配置文件中没有则必填
588
+ if (!options.storeUrls) {
596
589
  console.log(pc.cyan('\n🔗 商店跳转地址(CTA 按钮目标)'));
597
590
  console.log(pc.dim(' iOS 和 Android 地址均为必填'));
598
591
  const storeUrlAnswer = await inquirer.prompt([
@@ -643,8 +636,8 @@ export async function buildCommand(projectPath, options) {
643
636
  // 未指定格式,使用默认值
644
637
  options.format = formatConfig.default;
645
638
  }
646
- // 如果命令行未传入 storeUrls,交互式输入(必填);通用预览(playcraft)不面向渠道,可不填
647
- if (!options.storeUrls && options.platform !== 'playcraft') {
639
+ // 如果命令行未传入 storeUrls,交互式输入(必填)
640
+ if (!options.storeUrls) {
648
641
  spinner.stop();
649
642
  console.log(pc.cyan('\n🔗 商店跳转地址(CTA 按钮目标)'));
650
643
  console.log(pc.dim(' iOS 和 Android 地址均为必填'));
@@ -749,7 +742,7 @@ export async function buildCommand(projectPath, options) {
749
742
  // 输入是源代码或官方构建,先执行阶段1
750
743
  spinner.text = pc.cyan('执行阶段1: 基础构建...');
751
744
  // 将临时目录放在项目所在目录下,避免跨盘符路径问题(Windows 上 C:\Temp 和 D:\project 会导致 Vite 路径计算错误)
752
- tempBuildDir = await createBuildTempDirectory(resolvedProjectPath);
745
+ const tempDir = path.join(resolvedProjectPath, '.playcraft-temp', `base-build-${Date.now()}`);
753
746
  // 构建 playableScriptsConfig,合并 CLI 选择的参数
754
747
  const playableScriptsConfig = buildPlayableScriptsConfig(fileConfig?.playableScripts, {
755
748
  platform: options.platform,
@@ -757,7 +750,7 @@ export async function buildCommand(projectPath, options) {
757
750
  selectedThemes,
758
751
  });
759
752
  const baseBuilder = new BaseBuilder(resolvedProjectPath, {
760
- outputDir: tempBuildDir,
753
+ outputDir: tempDir,
761
754
  selectedScenes,
762
755
  analyze: buildOptions.analyze,
763
756
  analyzeReportPath: buildOptions.analyze ? 'base-bundle-report.html' : undefined,
@@ -802,7 +795,16 @@ export async function buildCommand(projectPath, options) {
802
795
  }
803
796
  console.log('\n' + pc.green(`输出目录: ${finalOutputDir}`));
804
797
  console.log(pc.dim('💡 产物已包含渠道适配、MRAID 注入、代码混淆和 fflate 压缩'));
805
- await cleanupBuildTempDirectory(tempBuildDir);
798
+ // 清理临时目录
799
+ try {
800
+ const tempBaseDir = path.join(resolvedProjectPath, '.playcraft-temp');
801
+ await fs.rm(tempBaseDir, { recursive: true, force: true });
802
+ console.log(pc.dim(`\n🗑️ 已清理临时目录`));
803
+ }
804
+ catch (error) {
805
+ // 记录清理错误信息
806
+ console.log(pc.dim(`\n⚠️ 清理临时目录失败: ${error instanceof Error ? error.message : String(error)}`));
807
+ }
806
808
  return;
807
809
  }
808
810
  spinner.text = pc.cyan('✅ 阶段1完成,开始阶段2...');
@@ -974,7 +976,18 @@ export async function buildCommand(projectPath, options) {
974
976
  console.log(pc.yellow(`\n⚠️ 检测到 Ammo.js,建议替换为 ${analysis.suggestedEngine}`));
975
977
  }
976
978
  }
977
- await cleanupBuildTempDirectory(tempBuildDir);
979
+ // 清理临时目录(调试时注释掉)
980
+ if (!isBaseBuild && baseBuildDir.includes('.playcraft-temp')) {
981
+ // 调试:暂时保留临时目录
982
+ console.log(pc.yellow(`[DEBUG] 临时目录保留在: ${baseBuildDir}`));
983
+ // try {
984
+ // // 清理整个 .playcraft-temp 目录
985
+ // const tempBaseDir = path.join(resolvedProjectPath, '.playcraft-temp');
986
+ // await fs.rm(tempBaseDir, { recursive: true, force: true });
987
+ // } catch (error) {
988
+ // // 忽略清理错误
989
+ // }
990
+ }
978
991
  }
979
992
  catch (error) {
980
993
  spinner.fail(pc.red('打包失败'));
@@ -1,4 +1,3 @@
1
- import { prepareLocalSkillLifecycle } from '../project-skills/lifecycle.js';
2
1
  import { execFileSync, execSync } from 'child_process';
3
2
  import inquirer from 'inquirer';
4
3
  import fs from 'fs/promises';
@@ -7,11 +6,8 @@ import { fileURLToPath } from 'url';
7
6
  import pc from 'picocolors';
8
7
  import ora from 'ora';
9
8
  import { resolveCreateTemplate, resolveCreateTemplateDir, } from '../scaffold/templates.js';
10
- import { PLATFORM_SKILL_DIRS } from './platform-skills.generated.js';
11
9
  const __filename = fileURLToPath(import.meta.url);
12
10
  const __dirname = path.dirname(__filename);
13
- /** `@playcraft/skills` 包内 Platform Skill 的目录名(与 Atom Skill 的 `skills/` 区分)。 */
14
- const PLATFORM_SKILLS_DIRNAME = 'playcraft-skills';
15
11
  /** 生成一个本地占位 Project ID(99xxxxxx),后续可通过 playcraft config set 更新为真实 ID */
16
12
  function generateMockProjectId() {
17
13
  const suffix = Math.floor(Math.random() * 90_000_000) + 10_000_000;
@@ -853,7 +849,7 @@ function extractSkillBodyForCursor(content) {
853
849
  * @param cliCommandsDir CLI 命令所在目录(用于解析 skills 包位置)
854
850
  * @param configDir 配置目录名(如 '.claude' 或 '.codebuddy')
855
851
  */
856
- export async function setupPlatformSkillLinksInner(targetDir, cliCommandsDir, configDir) {
852
+ async function setupPlatformSkillLinksInner(targetDir, cliCommandsDir, configDir) {
857
853
  const skillsLinkDir = path.join(targetDir, configDir, 'skills');
858
854
  await fs.mkdir(skillsLinkDir, { recursive: true });
859
855
  // 以下 Skill 在项目模板中以静态目录形式存在,不创建软连接覆盖它们。
@@ -872,12 +868,11 @@ export async function setupPlatformSkillLinksInner(targetDir, cliCommandsDir, co
872
868
  'playcraft-image-generation',
873
869
  'playcraft-audio-generation',
874
870
  ]);
875
- // Platform Skill 住在 playcraft-skills/,与 Atom Skill 的 skills/ 是两个目录。
876
- // 尝试从 CLI 安装包的位置定位它(monorepo 内或与 CLI 平级安装时可解析)。
871
+ // 尝试从 CLI 安装包的位置定位 @playcraft/skills/skills 目录
877
872
  const candidateDirs = [
878
- path.resolve(cliCommandsDir, '..', '..', '..', '..', 'skills', PLATFORM_SKILLS_DIRNAME),
879
- path.resolve(cliCommandsDir, '..', '..', '..', 'skills', PLATFORM_SKILLS_DIRNAME),
880
- path.resolve(cliCommandsDir, '..', '..', 'skills', PLATFORM_SKILLS_DIRNAME),
873
+ path.resolve(cliCommandsDir, '..', '..', '..', '..', 'skills', 'skills'),
874
+ path.resolve(cliCommandsDir, '..', '..', '..', 'skills', 'skills'),
875
+ path.resolve(cliCommandsDir, '..', '..', 'skills', 'skills'),
881
876
  ];
882
877
  let resolvedSkillsDir = null;
883
878
  for (const dir of candidateDirs) {
@@ -890,24 +885,18 @@ export async function setupPlatformSkillLinksInner(targetDir, cliCommandsDir, co
890
885
  // 继续下一个候选
891
886
  }
892
887
  }
893
- // 相对路径(指向 npm install 后的 node_modules)作为安装后激活的备用
894
- const relativeSkillsBase = path.join('..', '..', 'node_modules', '@playcraft', 'skills', PLATFORM_SKILLS_DIRNAME);
888
+ // 相对路径(指向 npm install 后的 node_modules)始终创建,作为安装后激活的备用
889
+ const relativeSkillsBase = path.join('..', '..', 'node_modules', '@playcraft', 'skills', 'skills');
895
890
  if (resolvedSkillsDir) {
896
- // 能立即解析 → 以真实目录为准创建绝对路径软连接,当下即可使用。
897
- // 按「是否含 SKILL.md」判定而非 playcraft- 前缀:sound-effects 无前缀但同样是平台技能。
891
+ // 能立即解析 → 创建指向绝对路径的软连接,当下即可使用
898
892
  const entries = await fs.readdir(resolvedSkillsDir, { withFileTypes: true });
899
893
  for (const entry of entries) {
900
- if (!entry.isDirectory() || staticSkills.has(entry.name))
894
+ if (!entry.name.startsWith('playcraft-') || staticSkills.has(entry.name))
901
895
  continue;
896
+ const linkPath = path.join(skillsLinkDir, entry.name);
902
897
  const targetPath = path.join(resolvedSkillsDir, entry.name);
903
898
  try {
904
- await fs.access(path.join(targetPath, 'SKILL.md'));
905
- }
906
- catch {
907
- continue;
908
- }
909
- try {
910
- await fs.symlink(targetPath, path.join(skillsLinkDir, entry.name), 'dir');
899
+ await fs.symlink(targetPath, linkPath, 'dir');
911
900
  }
912
901
  catch {
913
902
  // 已存在则跳过
@@ -915,9 +904,28 @@ export async function setupPlatformSkillLinksInner(targetDir, cliCommandsDir, co
915
904
  }
916
905
  }
917
906
  else {
918
- // 无法立即解析 → 指向 node_modules 的相对路径软连接,npm install 后自动激活。
919
- // 清单由 scripts/generate-platform-skills.mjs 从真实目录生成并由 CI 校验,不要手写。
920
- for (const name of PLATFORM_SKILL_DIRS) {
907
+ // 无法立即解析 → 创建指向 node_modules 的相对路径软连接,npm install 后自动激活
908
+ const knownPlatformTools = [
909
+ 'playcraft-asset-management',
910
+ 'playcraft-audio-generation',
911
+ 'playcraft-build',
912
+ 'playcraft-code-editor',
913
+ 'playcraft-create-remix',
914
+ 'playcraft-deploy',
915
+ 'playcraft-image-generation',
916
+ 'playcraft-image-processing',
917
+ 'playcraft-platform-intro',
918
+ 'playcraft-prefab',
919
+ 'playcraft-project-management',
920
+ 'playcraft-remix-workflow',
921
+ 'playcraft-save',
922
+ 'playcraft-skill-recommender',
923
+ 'playcraft-sprite-generation',
924
+ 'playcraft-sprite-remix',
925
+ 'playcraft-sprite-sheet',
926
+ 'playcraft-3d-flip-sprite',
927
+ ];
928
+ for (const name of knownPlatformTools) {
921
929
  if (staticSkills.has(name))
922
930
  continue;
923
931
  const linkPath = path.join(skillsLinkDir, name);
@@ -1281,7 +1289,6 @@ export async function createCommand(projectName, options) {
1281
1289
  smokeSpinner.warn(`Harness 自检跳过: ${message}`);
1282
1290
  }
1283
1291
  }
1284
- await prepareLocalSkillLifecycle(targetDir, 'create');
1285
1292
  const gitSpinner = ora(isWorktreeMode ? '提交项目分支...' : '初始化 Git 仓库...').start();
1286
1293
  try {
1287
1294
  if (isWorktreeMode) {
@@ -677,7 +677,9 @@ async function runBatchStep(cmd, args, inputPath, outputPath) {
677
677
  const meta = await sharp(inputPath).metadata();
678
678
  const targetW = scale ? Math.round((meta.width ?? 64) * scale) : w;
679
679
  const targetH = scale ? Math.round((meta.height ?? 64) * scale) : h;
680
- await safeToFile(sharp(inputPath).resize(targetW, targetH, { fit }), outputPath, inputPath);
680
+ await safeToFile(sharp(inputPath).resize(targetW, targetH, {
681
+ fit, background: { r: 0, g: 0, b: 0, alpha: 0 },
682
+ }), outputPath, inputPath);
681
683
  break;
682
684
  }
683
685
  case 'crop': {
@@ -836,7 +838,9 @@ export function registerImageCommands(program) {
836
838
  process.exit(1);
837
839
  }
838
840
  const fit = parseResizeFitOption(opts.fit);
839
- await safeToFile(sharp(opts.input).resize(targetW, targetH, { fit }), opts.output, opts.input);
841
+ await safeToFile(sharp(opts.input).resize(targetW, targetH, {
842
+ fit, background: { r: 0, g: 0, b: 0, alpha: 0 },
843
+ }), opts.output, opts.input);
840
844
  const outSz = statSync(resolveSandboxPath(opts.output)).size;
841
845
  console.log(`Resized ${w}x${h} → ${targetW ?? '?'}x${targetH ?? '?'} — ${opts.output} (${sizeLabelBytes(outSz)})`);
842
846
  }