akari-video 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (492) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +81 -0
  3. package/bin/akari.mjs +14 -0
  4. package/package.json +42 -0
  5. package/src/cli.mjs +140 -0
  6. package/src/messages.mjs +100 -0
  7. package/src/path-lookup.mjs +47 -0
  8. package/src/project-state.mjs +25 -0
  9. package/src/repo-assets.mjs +59 -0
  10. package/src/task-labels.mjs +30 -0
  11. package/src/update-check.mjs +189 -0
  12. package/vendor/packages/project-scaffold/package.json +11 -0
  13. package/vendor/packages/project-scaffold/src/index.mjs +523 -0
  14. package/vendor/packages/project-scaffold/test/create-project.test.mjs +81 -0
  15. package/vendor/packages/project-scaffold/test/skill-adapter-link.test.mjs +204 -0
  16. package/vendor/packages/schemas/analysis.schema.json +475 -0
  17. package/vendor/packages/schemas/asset-meta.schema.json +225 -0
  18. package/vendor/packages/schemas/avatar-rendition.schema.json +65 -0
  19. package/vendor/packages/schemas/avatar.schema.json +178 -0
  20. package/vendor/packages/schemas/bin/validate-asset.mjs +597 -0
  21. package/vendor/packages/schemas/bin/validate-avatar.mjs +486 -0
  22. package/vendor/packages/schemas/bin/validate-captions.mjs +316 -0
  23. package/vendor/packages/schemas/bin/validate-connections.mjs +295 -0
  24. package/vendor/packages/schemas/bin/validate-edit.mjs +766 -0
  25. package/vendor/packages/schemas/bin/validate-intake.mjs +185 -0
  26. package/vendor/packages/schemas/bin/validate-interpretation.mjs +515 -0
  27. package/vendor/packages/schemas/bin/validate-plan-comments.mjs +170 -0
  28. package/vendor/packages/schemas/bin/validate-plan.mjs +365 -0
  29. package/vendor/packages/schemas/bin/validate-recipe.mjs +267 -0
  30. package/vendor/packages/schemas/bin/validate-research-plan.mjs +510 -0
  31. package/vendor/packages/schemas/bin/validate-review.mjs +427 -0
  32. package/vendor/packages/schemas/captions.schema.json +141 -0
  33. package/vendor/packages/schemas/connections.schema.json +153 -0
  34. package/vendor/packages/schemas/edit.schema.json +437 -0
  35. package/vendor/packages/schemas/examples/analysis-person-matte-valid/analysis.json +18 -0
  36. package/vendor/packages/schemas/examples/captions-text-style-background-mode-invalid/captions.json +18 -0
  37. package/vendor/packages/schemas/examples/captions-text-style-color-non-hex-invalid/captions.json +14 -0
  38. package/vendor/packages/schemas/examples/captions-text-style-default-only-valid/captions.json +27 -0
  39. package/vendor/packages/schemas/examples/captions-text-style-omitted-valid/captions.json +11 -0
  40. package/vendor/packages/schemas/examples/captions-text-style-opacity-out-of-range-invalid/captions.json +8 -0
  41. package/vendor/packages/schemas/examples/captions-text-style-record-override-valid/captions.json +27 -0
  42. package/vendor/packages/schemas/examples/captions-text-style-size-non-positive-invalid/captions.json +14 -0
  43. package/vendor/packages/schemas/examples/captions-text-style-zone-invalid/captions.json +16 -0
  44. package/vendor/packages/schemas/examples/connections-v0-invalid-auth/connections.json +32 -0
  45. package/vendor/packages/schemas/examples/connections-v0-memory-valid/connections.json +42 -0
  46. package/vendor/packages/schemas/examples/edit-beats-duplicate-id/edit.json +11 -0
  47. package/vendor/packages/schemas/examples/edit-beats-invalid-id/edit.json +10 -0
  48. package/vendor/packages/schemas/examples/edit-beats-missing-kind/edit.json +10 -0
  49. package/vendor/packages/schemas/examples/edit-beats-strength-out-of-range/edit.json +11 -0
  50. package/vendor/packages/schemas/examples/edit-beats-v0-src-present/edit.json +10 -0
  51. package/vendor/packages/schemas/examples/edit-beats-v0-valid/edit.json +29 -0
  52. package/vendor/packages/schemas/examples/edit-beats-v1-src-missing-reference/edit.json +14 -0
  53. package/vendor/packages/schemas/examples/edit-beats-v1-valid/edit.json +37 -0
  54. package/vendor/packages/schemas/examples/edit-bgm-ducking-invalid/edit.json +10 -0
  55. package/vendor/packages/schemas/examples/edit-bgm-fade-invalid/edit.json +10 -0
  56. package/vendor/packages/schemas/examples/edit-bgm-fade-valid/edit.json +10 -0
  57. package/vendor/packages/schemas/examples/edit-bgm-in-invalid/edit.json +10 -0
  58. package/vendor/packages/schemas/examples/edit-bgm-in-valid/edit.json +10 -0
  59. package/vendor/packages/schemas/examples/edit-bgm-missing-path/edit.json +10 -0
  60. package/vendor/packages/schemas/examples/edit-bgm-null-valid/edit.json +11 -0
  61. package/vendor/packages/schemas/examples/edit-bgm-sfx-gain-out-of-range/edit.json +11 -0
  62. package/vendor/packages/schemas/examples/edit-bgm-sfx-valid/edit.json +23 -0
  63. package/vendor/packages/schemas/examples/edit-chroma-key-invalid/edit.json +7 -0
  64. package/vendor/packages/schemas/examples/edit-cuts-at-negative-invalid/edit.json +7 -0
  65. package/vendor/packages/schemas/examples/edit-cuts-at-track-valid/edit.json +20 -0
  66. package/vendor/packages/schemas/examples/edit-cuts-opacity-out-of-range-invalid/edit.json +16 -0
  67. package/vendor/packages/schemas/examples/edit-cuts-track-invalid/edit.json +7 -0
  68. package/vendor/packages/schemas/examples/edit-cuts-transform-full-valid/edit.json +17 -0
  69. package/vendor/packages/schemas/examples/edit-cuts-transform-omitted-valid/edit.json +9 -0
  70. package/vendor/packages/schemas/examples/edit-cuts-transform-partial-valid/edit.json +16 -0
  71. package/vendor/packages/schemas/examples/edit-cuts-transform-rotate-invalid/edit.json +16 -0
  72. package/vendor/packages/schemas/examples/edit-cuts-transform-scale-invalid/edit.json +16 -0
  73. package/vendor/packages/schemas/examples/edit-cuts-transform-unknown-key-invalid/edit.json +16 -0
  74. package/vendor/packages/schemas/examples/edit-direction-intensity-negative/edit.json +8 -0
  75. package/vendor/packages/schemas/examples/edit-direction-intensity-not-integer/edit.json +8 -0
  76. package/vendor/packages/schemas/examples/edit-direction-intensity-out-of-range/edit.json +8 -0
  77. package/vendor/packages/schemas/examples/edit-direction-missing-preset/edit.json +8 -0
  78. package/vendor/packages/schemas/examples/edit-direction-overrides-array/edit.json +8 -0
  79. package/vendor/packages/schemas/examples/edit-direction-preset-only/edit.json +8 -0
  80. package/vendor/packages/schemas/examples/edit-direction-valid/edit.json +8 -0
  81. package/vendor/packages/schemas/examples/edit-emphasis-words-empty-word/edit.json +10 -0
  82. package/vendor/packages/schemas/examples/edit-emphasis-words-invalid-id/edit.json +10 -0
  83. package/vendor/packages/schemas/examples/edit-emphasis-words-missing-emotion/edit.json +10 -0
  84. package/vendor/packages/schemas/examples/edit-emphasis-words-range-invalid/edit.json +11 -0
  85. package/vendor/packages/schemas/examples/edit-emphasis-words-v0-src-present/edit.json +10 -0
  86. package/vendor/packages/schemas/examples/edit-emphasis-words-v0-valid/edit.json +32 -0
  87. package/vendor/packages/schemas/examples/edit-emphasis-words-v1-valid/edit.json +39 -0
  88. package/vendor/packages/schemas/examples/edit-layers-invalid-bad-blend/edit.json +17 -0
  89. package/vendor/packages/schemas/examples/edit-layers-invalid-chroma-key-on-baked/edit.json +17 -0
  90. package/vendor/packages/schemas/examples/edit-layers-invalid-duplicate-id/edit.json +11 -0
  91. package/vendor/packages/schemas/examples/edit-layers-track-invalid/edit.json +8 -0
  92. package/vendor/packages/schemas/examples/edit-layers-valid/edit.json +31 -0
  93. package/vendor/packages/schemas/examples/edit-look-invalid/edit.json +7 -0
  94. package/vendor/packages/schemas/examples/edit-master-invalid/edit.json +8 -0
  95. package/vendor/packages/schemas/examples/edit-narration-gain-out-of-range/edit.json +18 -0
  96. package/vendor/packages/schemas/examples/edit-narration-invalid-id/edit.json +17 -0
  97. package/vendor/packages/schemas/examples/edit-narration-missing-provenance/edit.json +16 -0
  98. package/vendor/packages/schemas/examples/edit-narration-valid/edit.json +36 -0
  99. package/vendor/packages/schemas/examples/edit-narration-voicevox-missing-credit/edit.json +20 -0
  100. package/vendor/packages/schemas/examples/edit-render-basics-valid/edit.json +22 -0
  101. package/vendor/packages/schemas/examples/edit-sfx-in-invalid/edit.json +10 -0
  102. package/vendor/packages/schemas/examples/edit-sfx-in-out-valid/edit.json +10 -0
  103. package/vendor/packages/schemas/examples/edit-sfx-out-invalid/edit.json +10 -0
  104. package/vendor/packages/schemas/examples/edit-sfx-out-type-invalid/edit.json +10 -0
  105. package/vendor/packages/schemas/examples/edit-sfx-t-invalid/edit.json +10 -0
  106. package/vendor/packages/schemas/examples/edit-sfx-track-invalid/edit.json +8 -0
  107. package/vendor/packages/schemas/examples/edit-speed-invalid/edit.json +7 -0
  108. package/vendor/packages/schemas/examples/edit-timeline-declared-valid/edit.json +14 -0
  109. package/vendor/packages/schemas/examples/edit-timeline-duplicate-id-invalid/edit.json +13 -0
  110. package/vendor/packages/schemas/examples/edit-timeline-interleaved-valid/edit.json +22 -0
  111. package/vendor/packages/schemas/examples/edit-timeline-omitted-valid/edit.json +7 -0
  112. package/vendor/packages/schemas/examples/edit-timeline-ref-invalid/edit.json +13 -0
  113. package/vendor/packages/schemas/examples/edit-tracks-section-invalid/edit.json +8 -0
  114. package/vendor/packages/schemas/examples/edit-tracks-section-valid/edit.json +13 -0
  115. package/vendor/packages/schemas/examples/edit-transition-invalid/edit.json +10 -0
  116. package/vendor/packages/schemas/examples/edit-v0-sample/edit.json +27 -0
  117. package/vendor/packages/schemas/examples/edit-v0-sample/overlays/cap-a.html +17 -0
  118. package/vendor/packages/schemas/examples/edit-v0-sample/overlays/cap-b.html +17 -0
  119. package/vendor/packages/schemas/examples/edit-v1-bgm-sfx-valid/edit.json +13 -0
  120. package/vendor/packages/schemas/examples/edit-v1-sample/edit.json +14 -0
  121. package/vendor/packages/schemas/examples/plan-comments-v0-sample/plan-comments.json +19 -0
  122. package/vendor/packages/schemas/examples/plan-v0-sample/plan.json +39 -0
  123. package/vendor/packages/schemas/examples/recipe-v0-sample/product-demo-quick-cuts.json +23 -0
  124. package/vendor/packages/schemas/examples/review-v1-sample/review.json +11 -0
  125. package/vendor/packages/schemas/fixtures/avatar/invalid-avatar-md-136-lines/AVATAR.md +159 -0
  126. package/vendor/packages/schemas/fixtures/avatar/invalid-avatar-md-136-lines/avatar.json +22 -0
  127. package/vendor/packages/schemas/fixtures/avatar/invalid-avatar-md-136-lines/renditions/2d-bustup/happy.png +0 -0
  128. package/vendor/packages/schemas/fixtures/avatar/invalid-avatar-md-136-lines/renditions/2d-bustup/neutral-half.png +0 -0
  129. package/vendor/packages/schemas/fixtures/avatar/invalid-avatar-md-136-lines/renditions/2d-bustup/neutral-open.png +0 -0
  130. package/vendor/packages/schemas/fixtures/avatar/invalid-avatar-md-136-lines/renditions/2d-bustup/neutral.png +0 -0
  131. package/vendor/packages/schemas/fixtures/avatar/invalid-avatar-md-136-lines/renditions/2d-bustup/rendition.json +18 -0
  132. package/vendor/packages/schemas/fixtures/avatar/invalid-avatar-md-136-lines/renditions/2d-fullbody/happy.png +0 -0
  133. package/vendor/packages/schemas/fixtures/avatar/invalid-avatar-md-136-lines/renditions/2d-fullbody/neutral-half.png +0 -0
  134. package/vendor/packages/schemas/fixtures/avatar/invalid-avatar-md-136-lines/renditions/2d-fullbody/neutral-open.png +0 -0
  135. package/vendor/packages/schemas/fixtures/avatar/invalid-avatar-md-136-lines/renditions/2d-fullbody/neutral.png +0 -0
  136. package/vendor/packages/schemas/fixtures/avatar/invalid-avatar-md-136-lines/renditions/2d-fullbody/rendition.json +18 -0
  137. package/vendor/packages/schemas/fixtures/avatar/invalid-default-role/AVATAR.md +30 -0
  138. package/vendor/packages/schemas/fixtures/avatar/invalid-default-role/avatar.json +22 -0
  139. package/vendor/packages/schemas/fixtures/avatar/invalid-default-role/renditions/2d-bustup/happy.png +0 -0
  140. package/vendor/packages/schemas/fixtures/avatar/invalid-default-role/renditions/2d-bustup/neutral-half.png +0 -0
  141. package/vendor/packages/schemas/fixtures/avatar/invalid-default-role/renditions/2d-bustup/neutral-open.png +0 -0
  142. package/vendor/packages/schemas/fixtures/avatar/invalid-default-role/renditions/2d-bustup/neutral.png +0 -0
  143. package/vendor/packages/schemas/fixtures/avatar/invalid-default-role/renditions/2d-bustup/rendition.json +18 -0
  144. package/vendor/packages/schemas/fixtures/avatar/invalid-default-role/renditions/2d-fullbody/happy.png +0 -0
  145. package/vendor/packages/schemas/fixtures/avatar/invalid-default-role/renditions/2d-fullbody/neutral-half.png +0 -0
  146. package/vendor/packages/schemas/fixtures/avatar/invalid-default-role/renditions/2d-fullbody/neutral-open.png +0 -0
  147. package/vendor/packages/schemas/fixtures/avatar/invalid-default-role/renditions/2d-fullbody/neutral.png +0 -0
  148. package/vendor/packages/schemas/fixtures/avatar/invalid-default-role/renditions/2d-fullbody/rendition.json +18 -0
  149. package/vendor/packages/schemas/fixtures/avatar/invalid-energy-out-of-range/AVATAR.md +30 -0
  150. package/vendor/packages/schemas/fixtures/avatar/invalid-energy-out-of-range/avatar.json +22 -0
  151. package/vendor/packages/schemas/fixtures/avatar/invalid-energy-out-of-range/renditions/2d-bustup/happy.png +0 -0
  152. package/vendor/packages/schemas/fixtures/avatar/invalid-energy-out-of-range/renditions/2d-bustup/neutral-half.png +0 -0
  153. package/vendor/packages/schemas/fixtures/avatar/invalid-energy-out-of-range/renditions/2d-bustup/neutral-open.png +0 -0
  154. package/vendor/packages/schemas/fixtures/avatar/invalid-energy-out-of-range/renditions/2d-bustup/neutral.png +0 -0
  155. package/vendor/packages/schemas/fixtures/avatar/invalid-energy-out-of-range/renditions/2d-bustup/rendition.json +18 -0
  156. package/vendor/packages/schemas/fixtures/avatar/invalid-energy-out-of-range/renditions/2d-fullbody/happy.png +0 -0
  157. package/vendor/packages/schemas/fixtures/avatar/invalid-energy-out-of-range/renditions/2d-fullbody/neutral-half.png +0 -0
  158. package/vendor/packages/schemas/fixtures/avatar/invalid-energy-out-of-range/renditions/2d-fullbody/neutral-open.png +0 -0
  159. package/vendor/packages/schemas/fixtures/avatar/invalid-energy-out-of-range/renditions/2d-fullbody/neutral.png +0 -0
  160. package/vendor/packages/schemas/fixtures/avatar/invalid-energy-out-of-range/renditions/2d-fullbody/rendition.json +18 -0
  161. package/vendor/packages/schemas/fixtures/avatar/invalid-missing-asset/AVATAR.md +30 -0
  162. package/vendor/packages/schemas/fixtures/avatar/invalid-missing-asset/avatar.json +22 -0
  163. package/vendor/packages/schemas/fixtures/avatar/invalid-missing-asset/renditions/2d-bustup/neutral-half.png +0 -0
  164. package/vendor/packages/schemas/fixtures/avatar/invalid-missing-asset/renditions/2d-bustup/neutral-open.png +0 -0
  165. package/vendor/packages/schemas/fixtures/avatar/invalid-missing-asset/renditions/2d-bustup/neutral.png +0 -0
  166. package/vendor/packages/schemas/fixtures/avatar/invalid-missing-asset/renditions/2d-bustup/rendition.json +18 -0
  167. package/vendor/packages/schemas/fixtures/avatar/invalid-missing-asset/renditions/2d-fullbody/happy.png +0 -0
  168. package/vendor/packages/schemas/fixtures/avatar/invalid-missing-asset/renditions/2d-fullbody/neutral-half.png +0 -0
  169. package/vendor/packages/schemas/fixtures/avatar/invalid-missing-asset/renditions/2d-fullbody/neutral-open.png +0 -0
  170. package/vendor/packages/schemas/fixtures/avatar/invalid-missing-asset/renditions/2d-fullbody/neutral.png +0 -0
  171. package/vendor/packages/schemas/fixtures/avatar/invalid-missing-asset/renditions/2d-fullbody/rendition.json +18 -0
  172. package/vendor/packages/schemas/fixtures/avatar/invalid-missing-rights/AVATAR.md +30 -0
  173. package/vendor/packages/schemas/fixtures/avatar/invalid-missing-rights/avatar.json +21 -0
  174. package/vendor/packages/schemas/fixtures/avatar/invalid-missing-rights/renditions/2d-bustup/happy.png +0 -0
  175. package/vendor/packages/schemas/fixtures/avatar/invalid-missing-rights/renditions/2d-bustup/neutral-half.png +0 -0
  176. package/vendor/packages/schemas/fixtures/avatar/invalid-missing-rights/renditions/2d-bustup/neutral-open.png +0 -0
  177. package/vendor/packages/schemas/fixtures/avatar/invalid-missing-rights/renditions/2d-bustup/neutral.png +0 -0
  178. package/vendor/packages/schemas/fixtures/avatar/invalid-missing-rights/renditions/2d-bustup/rendition.json +18 -0
  179. package/vendor/packages/schemas/fixtures/avatar/invalid-missing-rights/renditions/2d-fullbody/happy.png +0 -0
  180. package/vendor/packages/schemas/fixtures/avatar/invalid-missing-rights/renditions/2d-fullbody/neutral-half.png +0 -0
  181. package/vendor/packages/schemas/fixtures/avatar/invalid-missing-rights/renditions/2d-fullbody/neutral-open.png +0 -0
  182. package/vendor/packages/schemas/fixtures/avatar/invalid-missing-rights/renditions/2d-fullbody/neutral.png +0 -0
  183. package/vendor/packages/schemas/fixtures/avatar/invalid-missing-rights/renditions/2d-fullbody/rendition.json +18 -0
  184. package/vendor/packages/schemas/fixtures/avatar/invalid-no-avatar-json/AVATAR.md +30 -0
  185. package/vendor/packages/schemas/fixtures/avatar/invalid-person-in-catalog/catalog/avatars/impostor/AVATAR.md +30 -0
  186. package/vendor/packages/schemas/fixtures/avatar/invalid-person-in-catalog/catalog/avatars/impostor/avatar.json +22 -0
  187. package/vendor/packages/schemas/fixtures/avatar/invalid-person-in-catalog/catalog/avatars/impostor/renditions/2d-bustup/happy.png +0 -0
  188. package/vendor/packages/schemas/fixtures/avatar/invalid-person-in-catalog/catalog/avatars/impostor/renditions/2d-bustup/neutral-half.png +0 -0
  189. package/vendor/packages/schemas/fixtures/avatar/invalid-person-in-catalog/catalog/avatars/impostor/renditions/2d-bustup/neutral-open.png +0 -0
  190. package/vendor/packages/schemas/fixtures/avatar/invalid-person-in-catalog/catalog/avatars/impostor/renditions/2d-bustup/neutral.png +0 -0
  191. package/vendor/packages/schemas/fixtures/avatar/invalid-person-in-catalog/catalog/avatars/impostor/renditions/2d-bustup/rendition.json +18 -0
  192. package/vendor/packages/schemas/fixtures/avatar/invalid-person-in-catalog/catalog/avatars/impostor/renditions/2d-fullbody/happy.png +0 -0
  193. package/vendor/packages/schemas/fixtures/avatar/invalid-person-in-catalog/catalog/avatars/impostor/renditions/2d-fullbody/neutral-half.png +0 -0
  194. package/vendor/packages/schemas/fixtures/avatar/invalid-person-in-catalog/catalog/avatars/impostor/renditions/2d-fullbody/neutral-open.png +0 -0
  195. package/vendor/packages/schemas/fixtures/avatar/invalid-person-in-catalog/catalog/avatars/impostor/renditions/2d-fullbody/neutral.png +0 -0
  196. package/vendor/packages/schemas/fixtures/avatar/invalid-person-in-catalog/catalog/avatars/impostor/renditions/2d-fullbody/rendition.json +18 -0
  197. package/vendor/packages/schemas/fixtures/avatar/invalid-person-sellable/AVATAR.md +30 -0
  198. package/vendor/packages/schemas/fixtures/avatar/invalid-person-sellable/avatar.json +22 -0
  199. package/vendor/packages/schemas/fixtures/avatar/invalid-person-sellable/renditions/2d-bustup/happy.png +0 -0
  200. package/vendor/packages/schemas/fixtures/avatar/invalid-person-sellable/renditions/2d-bustup/neutral-half.png +0 -0
  201. package/vendor/packages/schemas/fixtures/avatar/invalid-person-sellable/renditions/2d-bustup/neutral-open.png +0 -0
  202. package/vendor/packages/schemas/fixtures/avatar/invalid-person-sellable/renditions/2d-bustup/neutral.png +0 -0
  203. package/vendor/packages/schemas/fixtures/avatar/invalid-person-sellable/renditions/2d-bustup/rendition.json +18 -0
  204. package/vendor/packages/schemas/fixtures/avatar/invalid-person-sellable/renditions/2d-fullbody/happy.png +0 -0
  205. package/vendor/packages/schemas/fixtures/avatar/invalid-person-sellable/renditions/2d-fullbody/neutral-half.png +0 -0
  206. package/vendor/packages/schemas/fixtures/avatar/invalid-person-sellable/renditions/2d-fullbody/neutral-open.png +0 -0
  207. package/vendor/packages/schemas/fixtures/avatar/invalid-person-sellable/renditions/2d-fullbody/neutral.png +0 -0
  208. package/vendor/packages/schemas/fixtures/avatar/invalid-person-sellable/renditions/2d-fullbody/rendition.json +18 -0
  209. package/vendor/packages/schemas/fixtures/avatar/unsupported-version/AVATAR.md +30 -0
  210. package/vendor/packages/schemas/fixtures/avatar/unsupported-version/avatar.json +22 -0
  211. package/vendor/packages/schemas/fixtures/avatar/unsupported-version/renditions/2d-bustup/happy.png +0 -0
  212. package/vendor/packages/schemas/fixtures/avatar/unsupported-version/renditions/2d-bustup/neutral-half.png +0 -0
  213. package/vendor/packages/schemas/fixtures/avatar/unsupported-version/renditions/2d-bustup/neutral-open.png +0 -0
  214. package/vendor/packages/schemas/fixtures/avatar/unsupported-version/renditions/2d-bustup/neutral.png +0 -0
  215. package/vendor/packages/schemas/fixtures/avatar/unsupported-version/renditions/2d-bustup/rendition.json +18 -0
  216. package/vendor/packages/schemas/fixtures/avatar/unsupported-version/renditions/2d-fullbody/happy.png +0 -0
  217. package/vendor/packages/schemas/fixtures/avatar/unsupported-version/renditions/2d-fullbody/neutral-half.png +0 -0
  218. package/vendor/packages/schemas/fixtures/avatar/unsupported-version/renditions/2d-fullbody/neutral-open.png +0 -0
  219. package/vendor/packages/schemas/fixtures/avatar/unsupported-version/renditions/2d-fullbody/neutral.png +0 -0
  220. package/vendor/packages/schemas/fixtures/avatar/unsupported-version/renditions/2d-fullbody/rendition.json +18 -0
  221. package/vendor/packages/schemas/fixtures/avatar/valid/AVATAR.md +30 -0
  222. package/vendor/packages/schemas/fixtures/avatar/valid/avatar.json +22 -0
  223. package/vendor/packages/schemas/fixtures/avatar/valid/renditions/2d-bustup/happy.png +0 -0
  224. package/vendor/packages/schemas/fixtures/avatar/valid/renditions/2d-bustup/neutral-half.png +0 -0
  225. package/vendor/packages/schemas/fixtures/avatar/valid/renditions/2d-bustup/neutral-open.png +0 -0
  226. package/vendor/packages/schemas/fixtures/avatar/valid/renditions/2d-bustup/neutral.png +0 -0
  227. package/vendor/packages/schemas/fixtures/avatar/valid/renditions/2d-bustup/rendition.json +18 -0
  228. package/vendor/packages/schemas/fixtures/avatar/valid/renditions/2d-fullbody/happy.png +0 -0
  229. package/vendor/packages/schemas/fixtures/avatar/valid/renditions/2d-fullbody/neutral-half.png +0 -0
  230. package/vendor/packages/schemas/fixtures/avatar/valid/renditions/2d-fullbody/neutral-open.png +0 -0
  231. package/vendor/packages/schemas/fixtures/avatar/valid/renditions/2d-fullbody/neutral.png +0 -0
  232. package/vendor/packages/schemas/fixtures/avatar/valid/renditions/2d-fullbody/rendition.json +18 -0
  233. package/vendor/packages/schemas/fixtures/avatar/valid-unknown-fields/AVATAR.md +30 -0
  234. package/vendor/packages/schemas/fixtures/avatar/valid-unknown-fields/avatar.json +23 -0
  235. package/vendor/packages/schemas/fixtures/avatar/valid-unknown-fields/renditions/2d-bustup/happy.png +0 -0
  236. package/vendor/packages/schemas/fixtures/avatar/valid-unknown-fields/renditions/2d-bustup/neutral-half.png +0 -0
  237. package/vendor/packages/schemas/fixtures/avatar/valid-unknown-fields/renditions/2d-bustup/neutral-open.png +0 -0
  238. package/vendor/packages/schemas/fixtures/avatar/valid-unknown-fields/renditions/2d-bustup/neutral.png +0 -0
  239. package/vendor/packages/schemas/fixtures/avatar/valid-unknown-fields/renditions/2d-bustup/rendition.json +18 -0
  240. package/vendor/packages/schemas/fixtures/avatar/valid-unknown-fields/renditions/2d-fullbody/happy.png +0 -0
  241. package/vendor/packages/schemas/fixtures/avatar/valid-unknown-fields/renditions/2d-fullbody/neutral-half.png +0 -0
  242. package/vendor/packages/schemas/fixtures/avatar/valid-unknown-fields/renditions/2d-fullbody/neutral-open.png +0 -0
  243. package/vendor/packages/schemas/fixtures/avatar/valid-unknown-fields/renditions/2d-fullbody/neutral.png +0 -0
  244. package/vendor/packages/schemas/fixtures/avatar/valid-unknown-fields/renditions/2d-fullbody/rendition.json +18 -0
  245. package/vendor/packages/schemas/fixtures/avatar/valid-voice-only/AVATAR.md +28 -0
  246. package/vendor/packages/schemas/fixtures/avatar/valid-voice-only/avatar.json +19 -0
  247. package/vendor/packages/schemas/fixtures/intake/invalid-duplicate-task/intake.json +8 -0
  248. package/vendor/packages/schemas/fixtures/intake/invalid-missing-submitted-at/intake.json +8 -0
  249. package/vendor/packages/schemas/fixtures/intake/invalid-target-exclusive/intake.json +8 -0
  250. package/vendor/packages/schemas/fixtures/intake/invalid-unknown-task/intake.json +8 -0
  251. package/vendor/packages/schemas/fixtures/intake/valid-draft/intake.json +8 -0
  252. package/vendor/packages/schemas/fixtures/intake/valid-submitted/intake.json +8 -0
  253. package/vendor/packages/schemas/fixtures/plan/invalid-bad-confidence-enum/plan.json +15 -0
  254. package/vendor/packages/schemas/fixtures/plan/invalid-constraint-bad-applies-to/plan.json +18 -0
  255. package/vendor/packages/schemas/fixtures/plan/invalid-dangling-media-path/plan.json +15 -0
  256. package/vendor/packages/schemas/fixtures/plan/invalid-duplicate-slot-id/plan.json +25 -0
  257. package/vendor/packages/schemas/fixtures/plan/invalid-missing-required-field/plan.json +14 -0
  258. package/vendor/packages/schemas/fixtures/plan/unsupported-version/plan.json +4 -0
  259. package/vendor/packages/schemas/fixtures/plan/valid/plan.json +40 -0
  260. package/vendor/packages/schemas/fixtures/plan/valid/scaffold/beat-01.png +1 -0
  261. package/vendor/packages/schemas/fixtures/plan/valid/scaffold/beat-01.wav +1 -0
  262. package/vendor/packages/schemas/fixtures/plan/valid/scaffold/broll.mp4 +1 -0
  263. package/vendor/packages/schemas/fixtures/plan/warns-confidence-gap/plan.json +28 -0
  264. package/vendor/packages/schemas/fixtures/plan-comments/invalid-bad-pass/plan-comments.json +6 -0
  265. package/vendor/packages/schemas/fixtures/plan-comments/invalid-bad-target-id-for-index-kind/plan-comments.json +13 -0
  266. package/vendor/packages/schemas/fixtures/plan-comments/invalid-bad-target-kind/plan-comments.json +13 -0
  267. package/vendor/packages/schemas/fixtures/plan-comments/invalid-comments-not-array/plan-comments.json +6 -0
  268. package/vendor/packages/schemas/fixtures/plan-comments/invalid-missing-comment-field/plan-comments.json +12 -0
  269. package/vendor/packages/schemas/fixtures/plan-comments/invalid-missing-version/plan-comments.json +5 -0
  270. package/vendor/packages/schemas/fixtures/plan-comments/unsupported-version/plan-comments.json +6 -0
  271. package/vendor/packages/schemas/fixtures/plan-comments/valid/plan-comments.json +19 -0
  272. package/vendor/packages/schemas/fixtures/plan-comments/valid-unknown-fields/plan-comments.json +15 -0
  273. package/vendor/packages/schemas/fixtures/recipe/invalid-bad-aspect/recipe.json +13 -0
  274. package/vendor/packages/schemas/fixtures/recipe/invalid-bad-confirmed-by/recipe.json +13 -0
  275. package/vendor/packages/schemas/fixtures/recipe/invalid-bad-name-casing/recipe.json +13 -0
  276. package/vendor/packages/schemas/fixtures/recipe/invalid-bad-workflow/recipe.json +13 -0
  277. package/vendor/packages/schemas/fixtures/recipe/invalid-duplicate-overlay-kind/recipe.json +13 -0
  278. package/vendor/packages/schemas/fixtures/recipe/invalid-empty-confirmed/recipe.json +9 -0
  279. package/vendor/packages/schemas/fixtures/recipe/invalid-empty-narration/recipe.json +13 -0
  280. package/vendor/packages/schemas/fixtures/recipe/invalid-missing-version/recipe.json +12 -0
  281. package/vendor/packages/schemas/fixtures/recipe/invalid-provenance-mismatch/recipe.json +15 -0
  282. package/vendor/packages/schemas/fixtures/recipe/invalid-source-project-path/recipe.json +13 -0
  283. package/vendor/packages/schemas/fixtures/recipe/unsupported-version/recipe.json +13 -0
  284. package/vendor/packages/schemas/fixtures/recipe/valid/recipe.json +15 -0
  285. package/vendor/packages/schemas/fixtures/recipe/valid-unknown-fields/recipe.json +16 -0
  286. package/vendor/packages/schemas/fixtures/review/invalid-malformed-canvas-target/review.json +6 -0
  287. package/vendor/packages/schemas/fixtures/review/invalid-malformed-doc-target/review.json +6 -0
  288. package/vendor/packages/schemas/fixtures/review/invalid-malformed-image-target/review.json +6 -0
  289. package/vendor/packages/schemas/fixtures/review/invalid-strokes-bad-space/review.json +6 -0
  290. package/vendor/packages/schemas/fixtures/review/invalid-strokes-canvas-rect-with-frame/review.json +6 -0
  291. package/vendor/packages/schemas/fixtures/review/invalid-strokes-image-rect-with-frame/review.json +6 -0
  292. package/vendor/packages/schemas/fixtures/review/invalid-video-null-sourcet/review.json +6 -0
  293. package/vendor/packages/schemas/fixtures/review/valid/review.json +8 -0
  294. package/vendor/packages/schemas/fixtures/review/valid-canvas-target/review.json +7 -0
  295. package/vendor/packages/schemas/fixtures/review/valid-input-session/review.json +6 -0
  296. package/vendor/packages/schemas/fixtures/review/valid-strokes/review.json +8 -0
  297. package/vendor/packages/schemas/intake.schema.json +117 -0
  298. package/vendor/packages/schemas/interpretation.schema.json +419 -0
  299. package/vendor/packages/schemas/package.json +18 -0
  300. package/vendor/packages/schemas/plan-comments.schema.json +52 -0
  301. package/vendor/packages/schemas/plan.schema.json +129 -0
  302. package/vendor/packages/schemas/recipe.schema.json +106 -0
  303. package/vendor/packages/schemas/research-plan.schema.json +230 -0
  304. package/vendor/packages/schemas/review.schema.json +227 -0
  305. package/vendor/packages/schemas/test/fixtures/asset/invalid-matched-by/audio/whoosh-transition/meta.json +31 -0
  306. package/vendor/packages/schemas/test/fixtures/asset/valid-catalog/audio/whoosh-transition/meta.json +31 -0
  307. package/vendor/packages/schemas/test/fixtures/asset/valid-library/telop/lower-third-clean/fragment.html +139 -0
  308. package/vendor/packages/schemas/test/fixtures/asset/valid-library/telop/lower-third-clean/meta.json +32 -0
  309. package/vendor/packages/schemas/test/fixtures/asset/valid-library/telop/lower-third-clean/preview.png +0 -0
  310. package/vendor/packages/schemas/test/fixtures/interpretation/invalid-analyses-missing-ref/interpretation.json +131 -0
  311. package/vendor/packages/schemas/test/fixtures/interpretation/invalid-analyses-ref-mismatch/interpretation.json +132 -0
  312. package/vendor/packages/schemas/test/fixtures/interpretation/invalid-arc-empty-refs/interpretation.json +126 -0
  313. package/vendor/packages/schemas/test/fixtures/interpretation/invalid-context-missing-interview/interpretation.json +126 -0
  314. package/vendor/packages/schemas/test/fixtures/interpretation/invalid-context-null-intake/interpretation.json +133 -0
  315. package/vendor/packages/schemas/test/fixtures/interpretation/invalid-dangling-arc-ref/interpretation.json +132 -0
  316. package/vendor/packages/schemas/test/fixtures/interpretation/invalid-duplicate-asset-ref/interpretation.json +132 -0
  317. package/vendor/packages/schemas/test/fixtures/interpretation/invalid-flag-bad-type/interpretation.json +132 -0
  318. package/vendor/packages/schemas/test/fixtures/interpretation/invalid-flag-missing-evidence/interpretation.json +131 -0
  319. package/vendor/packages/schemas/test/fixtures/interpretation/invalid-missing-required-field/interpretation.json +131 -0
  320. package/vendor/packages/schemas/test/fixtures/interpretation/invalid-open-question-answer-present-when-open/interpretation.json +133 -0
  321. package/vendor/packages/schemas/test/fixtures/interpretation/invalid-open-question-answered-without-answer/interpretation.json +131 -0
  322. package/vendor/packages/schemas/test/fixtures/interpretation/invalid-relations-dangling-target/interpretation.json +132 -0
  323. package/vendor/packages/schemas/test/fixtures/interpretation/invalid-relations-self-reference/interpretation.json +132 -0
  324. package/vendor/packages/schemas/test/fixtures/interpretation/invalid-section-end-before-start/interpretation.json +132 -0
  325. package/vendor/packages/schemas/test/fixtures/interpretation/invalid-section-mismatched-start-end/interpretation.json +131 -0
  326. package/vendor/packages/schemas/test/fixtures/interpretation/invalid-unknown-root-field/interpretation.json +133 -0
  327. package/vendor/packages/schemas/test/fixtures/interpretation/unsupported-version/interpretation.json +132 -0
  328. package/vendor/packages/schemas/test/fixtures/interpretation/valid/interpretation.json +132 -0
  329. package/vendor/packages/schemas/test/fixtures/research-plan/invalid-bad-category-enum/research-plan.json +128 -0
  330. package/vendor/packages/schemas/test/fixtures/research-plan/invalid-dangling-chapter-ref/research-plan.json +128 -0
  331. package/vendor/packages/schemas/test/fixtures/research-plan/invalid-dangling-shot-list-ref/research-plan.json +128 -0
  332. package/vendor/packages/schemas/test/fixtures/research-plan/invalid-decided-at-mismatch/research-plan.json +128 -0
  333. package/vendor/packages/schemas/test/fixtures/research-plan/invalid-duplicate-candidate-id/research-plan.json +128 -0
  334. package/vendor/packages/schemas/test/fixtures/research-plan/invalid-japan-sns-notes-empty/research-plan.json +128 -0
  335. package/vendor/packages/schemas/test/fixtures/research-plan/invalid-missing-required-field/research-plan.json +127 -0
  336. package/vendor/packages/schemas/test/fixtures/research-plan/invalid-selected-missing-candidate/research-plan.json +128 -0
  337. package/vendor/packages/schemas/test/fixtures/research-plan/invalid-structure-confirmed-mismatch/research-plan.json +128 -0
  338. package/vendor/packages/schemas/test/fixtures/research-plan/unsupported-version/research-plan.json +128 -0
  339. package/vendor/packages/schemas/test/fixtures/research-plan/valid/research-plan.json +79 -0
  340. package/vendor/packages/schemas/test/fixtures/research-plan/warns-empty-sources/research-plan.json +120 -0
  341. package/vendor/packages/schemas/test/validate-asset.test.mjs +38 -0
  342. package/vendor/packages/schemas/test/validate-avatar.test.mjs +109 -0
  343. package/vendor/packages/schemas/test/validate-captions.test.mjs +59 -0
  344. package/vendor/packages/schemas/test/validate-connections.test.mjs +31 -0
  345. package/vendor/packages/schemas/test/validate-edit.test.mjs +490 -0
  346. package/vendor/packages/schemas/test/validate-intake.test.mjs +66 -0
  347. package/vendor/packages/schemas/test/validate-interpretation.test.mjs +167 -0
  348. package/vendor/packages/schemas/test/validate-plan-comments.test.mjs +70 -0
  349. package/vendor/packages/schemas/test/validate-plan.test.mjs +67 -0
  350. package/vendor/packages/schemas/test/validate-recipe.test.mjs +107 -0
  351. package/vendor/packages/schemas/test/validate-research-plan.test.mjs +98 -0
  352. package/vendor/packages/schemas/test/validate-review.test.mjs +102 -0
  353. package/vendor/skills/.gitkeep +0 -0
  354. package/vendor/skills/address-review/SKILL.md +84 -0
  355. package/vendor/skills/address-review/bin/core/review-store.mjs +210 -0
  356. package/vendor/skills/address-review/bin/list.mjs +198 -0
  357. package/vendor/skills/address-review/bin/respond.mjs +89 -0
  358. package/vendor/skills/address-review/dev-fixtures/fixture-project/captions.json +22 -0
  359. package/vendor/skills/address-review/dev-fixtures/fixture-project/edit.json +12 -0
  360. package/vendor/skills/address-review/dev-fixtures/fixture-project/review.json +100 -0
  361. package/vendor/skills/address-review/test/review-store.test.mjs +201 -0
  362. package/vendor/skills/analyze-footage/SKILL.md +35 -0
  363. package/vendor/skills/analyze-footage/analysis-json.md +185 -0
  364. package/vendor/skills/analyze-footage/bin/person-matte/person-matte-helper.swift +343 -0
  365. package/vendor/skills/analyze-footage/bin/person-matte/person-matte.mjs +415 -0
  366. package/vendor/skills/analyze-footage/bin/speechanalyzer-helper.swift +138 -0
  367. package/vendor/skills/analyze-footage/bin/transcribe-cloud.mjs +486 -0
  368. package/vendor/skills/analyze-footage/bin/transcribe-sa.mjs +189 -0
  369. package/vendor/skills/analyze-footage/events-and-hooks.md +93 -0
  370. package/vendor/skills/analyze-footage/keyframes-and-review.md +130 -0
  371. package/vendor/skills/analyze-footage/media-and-transcript.md +219 -0
  372. package/vendor/skills/analyze-footage/person-matte.md +121 -0
  373. package/vendor/skills/analyze-footage/references/akari-data-contract.md +18 -0
  374. package/vendor/skills/analyze-footage/references/asset.meta.example.json +23 -0
  375. package/vendor/skills/analyze-footage/test/fixtures/scribe-punctuation-inflation.json +17 -0
  376. package/vendor/skills/analyze-footage/test/normalize-scribe.test.mjs +76 -0
  377. package/vendor/skills/analyze-footage/workflow.md +95 -0
  378. package/vendor/skills/analyze-project/SKILL.md +58 -0
  379. package/vendor/skills/analyze-project/collect.md +51 -0
  380. package/vendor/skills/analyze-project/decision-record.md +55 -0
  381. package/vendor/skills/analyze-project/interpretation.md +128 -0
  382. package/vendor/skills/analyze-project/interview.md +66 -0
  383. package/vendor/skills/analyze-project/references/interpretation-shape.md +42 -0
  384. package/vendor/skills/analyze-project/references/open-questions-examples.md +35 -0
  385. package/vendor/skills/analyze-project/validate-and-render.md +66 -0
  386. package/vendor/skills/bake-3d/SKILL.md +78 -0
  387. package/vendor/skills/compile-review-session/SKILL.md +78 -0
  388. package/vendor/skills/compile-review-session/bin/compile-review-session.mjs +799 -0
  389. package/vendor/skills/compile-review-session/bin/core/canvas-compiler.mjs +105 -0
  390. package/vendor/skills/compile-review-session/bin/core/compiler.mjs +221 -0
  391. package/vendor/skills/compile-review-session/bin/core/review-store.mjs +74 -0
  392. package/vendor/skills/compile-review-session/bin/core/time-mapping.mjs +370 -0
  393. package/vendor/skills/compile-review-session/bin/core/transcription.mjs +721 -0
  394. package/vendor/skills/compile-review-session/compilation-rules.md +98 -0
  395. package/vendor/skills/compile-review-session/dev-fixtures/README.md +24 -0
  396. package/vendor/skills/compile-review-session/dev-fixtures/fixture-project/review/sessions/s-0001/audio.wav +0 -0
  397. package/vendor/skills/compile-review-session/dev-fixtures/fixture-project/review/sessions/s-0001/edit.snapshot.json +12 -0
  398. package/vendor/skills/compile-review-session/dev-fixtures/fixture-project/review/sessions/s-0001/events.jsonl +2 -0
  399. package/vendor/skills/compile-review-session/dev-fixtures/fixture-project/review/sessions/s-0001/session.json +11 -0
  400. package/vendor/skills/compile-review-session/dev-fixtures/fixture-project/review/sessions/s-0002/audio.wav +0 -0
  401. package/vendor/skills/compile-review-session/dev-fixtures/fixture-project/review/sessions/s-0002/edit.snapshot.json +12 -0
  402. package/vendor/skills/compile-review-session/dev-fixtures/fixture-project/review/sessions/s-0002/events.jsonl +5 -0
  403. package/vendor/skills/compile-review-session/dev-fixtures/fixture-project/review/sessions/s-0002/session.json +11 -0
  404. package/vendor/skills/compile-review-session/dev-fixtures/fixture-project/review/sessions/s-0003/audio.wav +0 -0
  405. package/vendor/skills/compile-review-session/dev-fixtures/fixture-project/review/sessions/s-0003/edit.snapshot.json +12 -0
  406. package/vendor/skills/compile-review-session/dev-fixtures/fixture-project/review/sessions/s-0003/events.jsonl +19 -0
  407. package/vendor/skills/compile-review-session/dev-fixtures/fixture-project/review/sessions/s-0003/session.json +11 -0
  408. package/vendor/skills/compile-review-session/dev-fixtures/fixture-project/review/sessions/s-0004/audio.wav +0 -0
  409. package/vendor/skills/compile-review-session/dev-fixtures/fixture-project/review/sessions/s-0004/edit.snapshot.json +12 -0
  410. package/vendor/skills/compile-review-session/dev-fixtures/fixture-project/review/sessions/s-0004/events.jsonl +2 -0
  411. package/vendor/skills/compile-review-session/dev-fixtures/fixture-project/review/sessions/s-0004/session.json +11 -0
  412. package/vendor/skills/compile-review-session/dev-fixtures/fixture-project/review/sessions/s-0005/session.json +1 -0
  413. package/vendor/skills/compile-review-session/dev-fixtures/fixture-project/review/sessions/s-0006/audio.wav +0 -0
  414. package/vendor/skills/compile-review-session/dev-fixtures/fixture-project/review/sessions/s-0006/events.jsonl +2 -0
  415. package/vendor/skills/compile-review-session/dev-fixtures/fixture-project/review/sessions/s-0006/session.json +11 -0
  416. package/vendor/skills/compile-review-session/dev-fixtures/fixture-project/review/sessions/s-0007/audio.wav +0 -0
  417. package/vendor/skills/compile-review-session/dev-fixtures/fixture-project/review/sessions/s-0007/edit.snapshot.json +13 -0
  418. package/vendor/skills/compile-review-session/dev-fixtures/fixture-project/review/sessions/s-0007/events.jsonl +9 -0
  419. package/vendor/skills/compile-review-session/dev-fixtures/fixture-project/review/sessions/s-0007/session.json +11 -0
  420. package/vendor/skills/compile-review-session/dev-fixtures/fixture-project/review/sessions/s-0008/audio.wav +0 -0
  421. package/vendor/skills/compile-review-session/dev-fixtures/fixture-project/review/sessions/s-0008/edit.snapshot.json +12 -0
  422. package/vendor/skills/compile-review-session/dev-fixtures/fixture-project/review/sessions/s-0008/events.jsonl +2 -0
  423. package/vendor/skills/compile-review-session/dev-fixtures/fixture-project/review/sessions/s-0008/session.json +11 -0
  424. package/vendor/skills/compile-review-session/dev-fixtures/fixture-project/review/sessions/s-0008/transcript.json +9 -0
  425. package/vendor/skills/compile-review-session/dev-fixtures/fixture-project/review.json +7 -0
  426. package/vendor/skills/compile-review-session/test/canvas-compiler.test.mjs +283 -0
  427. package/vendor/skills/compile-review-session/test/compiler.test.mjs +458 -0
  428. package/vendor/skills/create-project/SKILL.md +46 -0
  429. package/vendor/skills/create-project/bin/create-project.mjs +88 -0
  430. package/vendor/skills/edit-lint/SKILL.md +73 -0
  431. package/vendor/skills/edit-plan/SKILL.md +64 -0
  432. package/vendor/skills/edit-plan/approvals-and-generation.md +106 -0
  433. package/vendor/skills/edit-plan/avatar-resolution.md +241 -0
  434. package/vendor/skills/edit-plan/beat-sync.md +545 -0
  435. package/vendor/skills/edit-plan/beats.md +197 -0
  436. package/vendor/skills/edit-plan/emphasis-detection.md +366 -0
  437. package/vendor/skills/edit-plan/execution.md +157 -0
  438. package/vendor/skills/edit-plan/expression-selection.md +290 -0
  439. package/vendor/skills/edit-plan/plan-json.md +52 -0
  440. package/vendor/skills/edit-plan/recipe.md +74 -0
  441. package/vendor/skills/edit-plan/references/asset.decisions.example.json +12 -0
  442. package/vendor/skills/edit-plan/references/event.example.json +7 -0
  443. package/vendor/skills/edit-plan/report-guide.md +192 -0
  444. package/vendor/skills/edit-plan/workflow.md +108 -0
  445. package/vendor/skills/generate-narration/SKILL.md +40 -0
  446. package/vendor/skills/generate-narration/assets/reading-script-v1.md +18 -0
  447. package/vendor/skills/generate-narration/avatar-voice.md +54 -0
  448. package/vendor/skills/generate-narration/bin/generate-narration.mjs +572 -0
  449. package/vendor/skills/generate-narration/engines.md +78 -0
  450. package/vendor/skills/generate-narration/reading-text.md +36 -0
  451. package/vendor/skills/generate-narration/voice-profile-setup.md +77 -0
  452. package/vendor/skills/harvest-asset/SKILL.md +132 -0
  453. package/vendor/skills/manage-connections/SKILL.md +75 -0
  454. package/vendor/skills/manage-connections/bin/doctor.mjs +341 -0
  455. package/vendor/skills/overlay-authoring/3d.md +143 -0
  456. package/vendor/skills/overlay-authoring/SKILL.md +30 -0
  457. package/vendor/skills/overlay-authoring/motion.md +58 -0
  458. package/vendor/skills/overlay-authoring/table.md +41 -0
  459. package/vendor/skills/overlay-authoring/telop.md +69 -0
  460. package/vendor/skills/overlay-authoring/text-behind-person.md +224 -0
  461. package/vendor/skills/overlay-authoring/thumbnail.md +126 -0
  462. package/vendor/skills/render-cut/SKILL.md +66 -0
  463. package/vendor/skills/research-plan/SKILL.md +75 -0
  464. package/vendor/skills/research-plan/competitor.md +50 -0
  465. package/vendor/skills/research-plan/ideate.md +56 -0
  466. package/vendor/skills/research-plan/shotlist.md +46 -0
  467. package/vendor/skills/research-plan/storyboard.md +48 -0
  468. package/vendor/skills/research-plan/trends.md +33 -0
  469. package/vendor/skills/setup-audio-library/SKILL.md +93 -0
  470. package/vendor/skills/setup-audio-library/candidate-list.md +72 -0
  471. package/vendor/skills/setup-audio-library/drop-folder.md +72 -0
  472. package/vendor/skills/setup-audio-library/gallery.md +43 -0
  473. package/vendor/skills/setup-library/SKILL.md +33 -0
  474. package/vendor/skills/setup-library/fetch-and-validate.md +102 -0
  475. package/vendor/skills/setup-library/starter-pack.md +55 -0
  476. package/vendor/skills/setup-library/tools-check.md +83 -0
  477. package/vendor/skills/verify/SKILL.md +137 -0
  478. package/vendor/templates/project-default/.akari/cache/.gitkeep +0 -0
  479. package/vendor/templates/project-default/.akari/connections.json +233 -0
  480. package/vendor/templates/project-default/.akari/diffs/.gitkeep +1 -0
  481. package/vendor/templates/project-default/.akari/events/.gitkeep +1 -0
  482. package/vendor/templates/project-default/.akari/reports/.gitkeep +0 -0
  483. package/vendor/templates/project-default/.akari/sidecars/.gitkeep +1 -0
  484. package/vendor/templates/project-default/.akari/work/.gitkeep +0 -0
  485. package/vendor/templates/project-default/.akari/workflow.json +48 -0
  486. package/vendor/templates/project-default/.claude/settings.json +15 -0
  487. package/vendor/templates/project-default/.claude/skills/README.md +26 -0
  488. package/vendor/templates/project-default/AGENTS.md +49 -0
  489. package/vendor/templates/project-default/CLAUDE.md +35 -0
  490. package/vendor/templates/project-default/assets/.gitkeep +1 -0
  491. package/vendor/templates/project-default/exports/.gitkeep +1 -0
  492. package/vendor/templates/project-default/planning/.gitkeep +1 -0
@@ -0,0 +1,126 @@
1
+ # サムネイル設計
2
+
3
+ サムネイルは静止画として **1280×720** で出力する。候補は複数作り、タイトル文字の差分も見せて編集判断レポートの先頭へ置く。候補数の一律閾値は契約にないため、依頼と比較したい仮説から決め、根拠のない「標準個数」を発明しない。
4
+
5
+ ## 状況から型を選ぶ
6
+
7
+ | 状況・ジャンル | 第一候補の型 | 注意点 |
8
+ |---|---|---|
9
+ | 操作解説・ソフトウェア | UI の証拠フレーム + 注目箇所 + 結果を示す短い見出し | UI 全景を縮小せず、見せたい部分を crop する |
10
+ | 商品・機能発表 | product hero + ベネフィット + 小さな category tag | ロゴ、形状、UI を生成で変形しない |
11
+ | 対談・人物解説 | 表情の読める人物 + 論点または対立軸 | 顔を過度に加工せず、視線の先に文字余白を作る |
12
+ | 比較・レビュー | split / versus + 比較対象 + 判断語 | 左右の縮尺と条件をそろえ、勝敗を捏造しない |
13
+ | before / after | 同条件の二面比較 + 変化点 | 撮影条件が違う素材を同一条件のように見せない |
14
+ | リスト・まとめ | 主役 1 点 + 数やカテゴリを示す badge | 小要素を並べすぎず、本文の一覧と混同しない |
15
+ | 事件・ストーリー・ドキュメンタリー | key object / place + 緊張を作る短い問い | 本文にない断定や偽の出来事を描かない |
16
+
17
+ 型はジャンル名だけで決めず、「何がクリック後に証明されるか」を基準にする。サムネイル単独で成立し、動画内容と約束が一致するものだけ採用する。
18
+
19
+ ## デザイン語彙
20
+
21
+ ### 背景処理
22
+
23
+ | 技法名 | 用途 | HTML/CSS 実装ヒント |
24
+ |---|---|---|
25
+ | crop / focal crop | 主役を大きく見せる | `<img>` の `object-fit: cover` と `object-position` を変数化する |
26
+ | gradient wash | 文字側のコントラストを作る | 疑似要素の linear / radial gradient を使う |
27
+ | vignette | 周辺を落として中央へ集める | 疑似要素の radial-gradient。CSS blur は使わない |
28
+ | duotone / color wash | シリーズ感を統一する | 半透明の blend layer を重ね、元の証拠を潰さない |
29
+ | cutout silhouette | 人物・商品を背景から分離する | 事前生成した alpha PNG / HEVC を使い、輪郭を検品する |
30
+ | split field | 比較対象を一目で分ける | Grid の 2 region と境界線を使う |
31
+
32
+ 背景ぼかしが必要なら、静止画像を事前処理する。動画 overlay の禁止事項である `filter: blur()` / `backdrop-filter` をデザインの前提にしない。
33
+
34
+ ### FX
35
+
36
+ | 技法名 | 用途 | HTML/CSS 実装ヒント |
37
+ |---|---|---|
38
+ | outline / keyline | 主役の輪郭分離 | alpha cutout の背面へ複製 silhouette をずらして置く |
39
+ | halftone | 情報・コミック感 | radial-gradient の pattern layer |
40
+ | speed lines | 勢い・方向 | repeating-conic / repeating-linear gradient |
41
+ | accent ray | 注目点から放射 | conic-gradient を mask して不透明度を抑える |
42
+ | hard offset shadow | 奥行き・ポップ感 | blur の小さい box/text shadow または複製 layer の translate |
43
+ | sticker / tape | 補助ラベル | transform した小さな tag。本文より強くしない |
44
+
45
+ ### 文字強調
46
+
47
+ | 技法名 | 用途 | HTML/CSS 実装ヒント |
48
+ |---|---|---|
49
+ | stroke | 背景から分離 | `-webkit-text-stroke` と通常色を併用する |
50
+ | highlight band | キーワードだけ強調 | inline span の背景色と padding |
51
+ | two-tone keyword | 意味の対比 | キーワード span の `--accent` を差し替える |
52
+ | condensed stack | 短い見出しを大きく積む | 明示改行と line-height。自動折返し任せにしない |
53
+ | label + headline | 種別と主張を分離 | 小 tag と大見出しを別 hierarchy にする |
54
+ | hard shadow | 小サイズでも輪郭を残す | 複製文字を `aria-hidden` で背面へ offset する |
55
+
56
+ 日本語の最終文字は HTML で組む。画像生成モデルへ見出し、ロゴ、UI の正確な描画を任せない。
57
+
58
+ ## 経路を選ぶ
59
+
60
+ ### 経路 A — 実フレーム + HTML 文字組
61
+
62
+ 次の場合に選ぶ。
63
+
64
+ - 動画内に顔、商品、UI、結果などの強い証拠フレームがある。
65
+ - 日本語、数字、ロゴ、UI を正確に見せる必要がある。
66
+ - 生成による事実改変を避ける必要がある。
67
+
68
+ 実フレームを crop / grade し、文字、badge、矢印、比較線だけを HTML/CSS で重ねる。
69
+
70
+ ### 経路 B — Codex 画像生成
71
+
72
+ 次の場合に選ぶ。
73
+
74
+ - 使用可能な実フレームがない。
75
+ - 抽象概念、世界観、イラストが主役で、写真の証拠性を要求しない。
76
+ - 生成物であることと provenance を記録できる。
77
+
78
+ 文字なしの構図を生成し、生成手、prompt、日時を記録する。API key の直叩きへ fallback しない。画像生成が使えなければ A または制作保留に戻す。
79
+
80
+ > **実測済み(2026-07-14)**: `codex exec --skip-git-repo-check` 経由で 16:9・文字なしの背景 PNG(1664×936、1.7MB)が約 93 秒で実ファイル出力されることを視認確認済み。呼び出し形・事前確認・既知の失敗モード(アカウント使用量上限)は [edit-plan/approvals-and-generation.md](../edit-plan/approvals-and-generation.md) の「手 1(Codex 画像生成)の実働確認」を参照。
81
+
82
+ ### 混成 — B の背景 + A の文字
83
+
84
+ 独自背景は必要だが、日本語、ブランド、数値は正確に保つ場合に選ぶ。B では文字・ロゴ・UI を入れず余白を指定し、A の HTML layer で最終文字と正式 asset を置く。
85
+
86
+ ## `examples/` の HTML → スクショ手順
87
+
88
+ 現在はサムネ専用 CLI がないため、既存 `scripts/render-overlays.mjs` の static Chrome と同じ方式を使う。`render-overlays.mjs` 自体は manifest 必須の overlay renderer であり、サムネ用 CLI として直接呼ばない。
89
+
90
+ 1. `examples/local/thumbnails/<slug>/index.html` を作る。`examples/local/` は gitignore 対象の試作場所である。
91
+ 2. `html, body` と単一 sheet を 1280×720、margin 0、overflow hidden にする。背景を明示し、画像・font は同ディレクトリ以下のローカル相対 URL にする。
92
+ 3. 文字、色、crop、accent を CSS 変数化する。日本語は HTML text として置く。
93
+ 4. font と画像が load 済みになる構造にし、headless Chrome の virtual time 内で安定するようにする。
94
+ 5. 次の実装済み flags で単発 PNG を撮る。
95
+
96
+ ```sh
97
+ CHROME="${AKARI_CHROME_BIN:-/Applications/Google Chrome.app/Contents/MacOS/Google Chrome}"
98
+ test -x "$CHROME"
99
+ "$CHROME" --headless \
100
+ --allow-file-access-from-files \
101
+ --disable-background-networking \
102
+ --force-device-scale-factor=1 \
103
+ --hide-scrollbars \
104
+ --no-first-run \
105
+ --no-default-browser-check \
106
+ --window-size=1280,720 \
107
+ --virtual-time-budget=10000 \
108
+ --run-all-compositor-stages-before-draw \
109
+ --screenshot="$PWD/examples/local/thumbnails/<slug>/thumbnail.png" \
110
+ "file://$PWD/examples/local/thumbnails/<slug>/index.html"
111
+ ```
112
+
113
+ 6. `sips -g pixelWidth -g pixelHeight .../thumbnail.png` で **1280×720** を確認する。
114
+ 7. PNG を実見し、文字欠け、font fallback、crop、コントラスト、誤字、safe zone を確認する。採用 PNG は gitignore 外の案件成果物へ移す。
115
+
116
+ YouTube 広告向けの公式 thumbnail 推奨値も 1280×720、16:9 であるが、このスキルではユーザー指定の AKARI 出力契約として 1280×720 を固定する。出典: [Google Ads Help — About video ad specs](https://support.google.com/google-ads/answer/13547298?hl=en)
117
+
118
+ ## よくある間違い
119
+
120
+ - 本文にない結果、感情、人物、UI を生成して事実のように見せる。
121
+ - 日本語やロゴを画像生成モデルに描かせる。
122
+ - 背景、人物、文字、矢印、badge をすべて同じ強さにする。
123
+ - 実フレーム全景を縮小して、小さな UI を読ませようとする。
124
+ - 16:9 sheet を CSS transform で拡縮し、最終 PNG の実寸を確認しない。
125
+ - network font / CDN 画像へ依存し、headless で欠落する。
126
+ - `examples/local` の試作 PNG を最終成果物の保存先と思い込む。
@@ -0,0 +1,66 @@
1
+ ---
2
+ name: render-cut
3
+ description: 承認済み edit.json と edit-lint PASS を入力に、最終 MP4 の計画、明示承認、ローカル書き出し、ffprobe 検証、キーフレーム視認を完了する。編集が承認済みで、納品用動画の書き出しや最終レンダーを求められたときに使う。
4
+ ---
5
+
6
+ # 承認済み編集を書き出す
7
+
8
+ > **Language**: Respond in the user's language — 対話・質問・承認確認・レポートはユーザーの使用言語に合わせる(例: 英語で話しかけられたら英語で応答する)。
9
+
10
+ ## ハードルール
11
+
12
+ 1. **edit.json を正本に決定的コマンド生成。自然言語からの即興 ffmpeg 禁止**
13
+ (エージェントが ffmpeg コマンドを手書きして「これで書き出しました」は契約違反)
14
+ 2. **plan なしの render 禁止**(validate→plan→承認→render の順を飛ばさない)
15
+ 3. **edit-lint FAIL のままの render 禁止**(override は承認ゲート + render.json 記録)
16
+ 4. **レンダー後の ffprobe 機械検証必須**。verify fail の成果物を納品可能と報告しない
17
+ 5. **既定はローカル ffmpeg のみ**。クラウド有償 API(Rendi 等)は v0 不採用
18
+ (将来はオプトイン + manage-connections の承認ゲート経由でのみ検討)
19
+ 6. **原本 source からレンダ**(proxy を最終レンダに使わない)
20
+ 7. **状態は render.json・HTML は可視化のみ**(新規サーフェス機構を輸入しない)
21
+ 8. **外部候補のコード転写禁止**(Kinocut / json-to-ffmpeg は構造参考のみ)
22
+ 9. **既存成果物の silent 上書き禁止**
23
+ 10. カット連結・合成・verify の ffmpeg / ffprobe は**本体直叩き**(ラッパーライブラリ
24
+ 禁止。分析・書き出し・検証の各工程で共通の方針)。
25
+ **例外は HTML ラスタライズ段の HyperFrames のみ**(依存は
26
+ `packages/render-cut/` 内に隔離し、リポの他所へ波及させない)
27
+ 11. **3D overlay は puppeteer-core 経路で焼かれる**(HyperFrames より速度差があり得る点に注意)
28
+
29
+ ## 実行手順
30
+
31
+ 1. 対象プロジェクトの `edit.json` が承認済みで、`.akari/lint.json` の `verdict` が `pass` であることを確認する。PASS でなければ `edit-lint` を実行して修正する。`--force` は lint 結果を上書きする明示承認を得た場合だけ使う。
32
+ 2. リポジトリルートから plan だけを生成する。
33
+
34
+ ```sh
35
+ node packages/render-cut/bin/render-cut.mjs <project-root> --plan-only
36
+ ```
37
+
38
+ 3. `<project>/.akari/render.json` と `<project>/.akari/reports/render-report.html` を読み、予測尺、出力先、ffmpeg コマンド列、中間物、ラスタライズ候補、入力ハッシュを提示する。
39
+ 4. **今回の書き出し実行に対する人間の明示承認を得て停止を解除する。** 無応答、過去の包括承認、plan 以前の承認を今回の承認に読み替えない。
40
+ 5. 承認後だけ書き出しを実行する。
41
+
42
+ ```sh
43
+ node packages/render-cut/bin/render-cut.mjs <project-root>
44
+ ```
45
+
46
+ 出力を明示する場合だけ `--out <path>` を加える。CLI の validate → plan → render → verify を分解して手作業で代替しない。
47
+ 6. exit code と `.akari/render.json` を確認する。`0` は完走して verify PASS、`1` は拒否または verify FAIL、`2` は実行エラーを表す。`provenance.rasterizer` で採用手段と上位候補を落とした理由を確認する。
48
+ 7. verify PASS 後に成果物から少なくとも冒頭、各カット境界の前後、各オーバーレイまたは字幕の表示中をキーフレームとして抽出し、実画像を視認する。カット元時刻、文字、位置、欠落、透明合成を確認する。
49
+ 8. 機械検証値、成果物 SHA-256、採用したラスタライズ手段、フォールバック理由、キーフレーム視認結果を報告する。verify FAIL の場合は納品可能と表現せず、`.akari/render-tmp/` を保持して原因を報告する。
50
+
51
+ ## 出力契約
52
+
53
+ - 成果物は既定で `<project>/exports/<source-name>.mp4` に置く。既存名があれば連番を使う。
54
+ - 状態の正本は `<project>/.akari/render.json` とする。HTML レポートは可視化専用とする。
55
+ - 成功時だけ `<project>/.akari/render-tmp/` を削除する。失敗時は診断用に保持する。
56
+ - 字幕は `captions.json` から決定的な HTML へ生成し、他のオーバーレイと同じ経路で焼き込む。
57
+ - 視認用に抽出するキーフレーム静止画は `<project>/.akari/reports/` へ置く。CLI 自身が使う
58
+ `.akari/render-tmp/` とは別に、確認用の一時スクリプトや実験的な中間生成物を人が作る場合は
59
+ `<project>/.akari/work/` へ置く([project-structure-v0 契約](../../docs/contract-2026-07-25-project-structure-v0.md) §1)。
60
+ いずれもプロジェクトルート直下には置かない。
61
+
62
+ ## 公開契約
63
+
64
+ - [edit.json v0 と書き出し段構成](../../docs/contract-2026-07-13-m1-m4.md)
65
+ - [edit.json v1 拡張メモ](../../docs/notes-2026-07-13-edit-json-v1.md)
66
+ - [字幕とカット編集](../../docs/notes-2026-07-14-captions-and-cut-editing.md)
@@ -0,0 +1,75 @@
1
+ ---
2
+ name: research-plan
3
+ description: 動画の企画・調査工程(ネタ出し → ターゲット/競合/トレンド調査 → 企画書・構成案・絵コンテ・撮影リスト)を headless で一周するときに発動する router。ネタ選定と構成の確定は decision-cards 型承認ゲート(HTML レポート + decisions.json)で人間の判断を受け取る。
4
+ ---
5
+
6
+ # 企画・調査を一周する
7
+
8
+ > **Language**: Respond in the user's language — 対話・質問・承認確認・レポートはユーザーの使用言語に合わせる(例: 英語で話しかけられたら英語で応答する)。
9
+
10
+ > 本スキルは暫定で雛形同梱(v0)。スキルカタログ + setup インストール機構が立った時点で参照配布へ移行する。同梱は暫定運用であり、leaf を含めテキストのみ・バイナリ資産なし。
11
+
12
+ ## ハードルール
13
+
14
+ 1. **有償 API を呼ぶ前に想定コストを明示し、状態ファイル(`.decisions.json` 等)の承認後にのみ実行する。** チャット上の承認だけで課金を実行しない。
15
+ 2. **接続は [manage-connections](../manage-connections/SKILL.md)(`.akari/connections.json`)経由のみを使う。** `.env` 探索・API キー直書きをしない。
16
+ 3. **出力は JSON + HTML に限定し、GUI アプリを起動しない**(headless-first 不変条件。アプリを一切インストールしなくても本工程が完結する)。
17
+ 4. **参考にした外部スキル・リポジトリのコード・文面を転記しない。** Hub/Hero/Help 分類、並列ギャップ分析、収益化ポテンシャル付きランキングといった**工程分解の型だけ**を抽出する(例外は検証済み MIT/Apache のみ)。出力スキーマは自社統一。
18
+ 5. **日本語 SNS 事情を必須調査軸に含める。** `research-plan.json` の `target.japan_sns.notes` を空にしない(無償手段で確認できない場合もその旨と理由を書く)。
19
+ 6. **CLAUDE.md / AGENTS.md に触らない。**
20
+ 7. **無償枠のみで一周が成立する既定にする。** 有償手段が使えない環境でも停止しない(結果は劣化してよいが、完走はする)。
21
+ 8. **差し戻しはチャットと `plan-comments.json` の二重経路。** 承認チェックポイントの再提示前は、チャット返信の解釈より先に `<plan-dir>/plan-comments.json`(在れば)を読む([storyboard.md](storyboard.md) §5)。
22
+ 9. **ネタ出しの冒頭で recipe の recall を行う。** [ideate.md](ideate.md) の手順に入る前に、`workflow: "research"` のレシピ([edit-plan/recipe.md](../edit-plan/recipe.md) の recall 手順と同じ規律)が `~/.akari/recipes/` に在るか確認し、在れば出所付きの推奨として添える。今回の依頼を上書きせず、必須調査軸(§5 の日本語 SNS 事情等)をスキップさせない。
23
+ 10. **同じ冒頭で memory connection の読み合わせを行う。** `.akari/connections.json` に `memory` 宣言([contract-2026-07-25-memory-connection-v0.md](../../docs/contract-2026-07-25-memory-connection-v0.md))があれば、`entry`(省略時 `INDEX.md`)起点で `include`/`exclude` の範囲だけを読み、参照したファイルパスを `research-plan.json` の `sources[]` に出所として記録する。全文投入は禁止。宣言が無ければ何もしない(error にしない)。
24
+
25
+ ## 実行順と目次
26
+
27
+ 現在の工程に必要なリーフだけを読み、後工程を先回りして実行しない。
28
+
29
+ 1. [ideate.md](ideate.md) を読み、ネタ出し(Hub/Hero/Help 分類 + 収益化ポテンシャル軸)で候補をランキングする。`topic.candidates[]` に落とす。
30
+ 2. [competitor.md](competitor.md) を読み、ターゲットと競合を調査・構造化する(4 並列ギャップ分析 + 日本語 SNS 事情)。`target` に落とす。
31
+ 3. [trends.md](trends.md) を読み、無償手段を既定にトレンドを取得する。知見は専用フィールドを持たず、候補の `rationale` / 競合の `gap` に溶け込ませ、出典だけ `sources[]` に残す。
32
+ 4. レポートを起票し(下記「レポートと承認ゲート」)、`topic-select` 決定カードで**ネタ選定**の承認を人間から受ける。`completedAt` が入るまで次工程へ進まない。
33
+ 5. [storyboard.md](storyboard.md) を読み、承認済みネタから企画書・構成案・絵コンテのショットカードを作る(`structure.chapters[]` / `structure.shots[]`)。同じレポートに `structure-confirm` 決定カードを追加し、**構成の確定**の承認を受ける。
34
+ 6. [shotlist.md](shotlist.md) を読み、確定した絵コンテから撮影リスト・収録チェックリストを作る(`shot_list[]`)。
35
+ 7. `research-plan.json` へ確定内容を書き、`node packages/schemas/bin/validate-research-plan.mjs <パス>` で検証する(exit 0 を確認するまで完了扱いにしない)。
36
+
37
+ ## レポートと承認ゲート(decision-cards 型の再利用)
38
+
39
+ 新しい承認機構は作らない。[edit-plan](../edit-plan/SKILL.md) が使う仕組みをそのまま再利用する。
40
+
41
+ - [report-template.html](../../packages/decision-cards/report-template.html) を複製し、`node packages/decision-cards/report-helper.mjs <レポートパス>` で提示する。カードの data 属性・雛形の書式・「全部おまかせ」+ 要約ビュー必須・`decision_log` 追記専用の規律は [edit-plan/report-guide.md](../edit-plan/report-guide.md) と同型(`byDefault` / `completedAt` / ポーリング / ヘルパー不通時のチャット代替も同じ)。
42
+ - レポートは固定 5 面を順守する(空でも省略せず理由を書く):
43
+ 1. **候補ネタランキング表**([ideate.md](ideate.md) の証拠。`topic-select` カードが載る)
44
+ 2. **競合分析サマリー**([competitor.md](competitor.md) の証拠。日本語 SNS 事情を含む。決定カードは持たない評価面)
45
+ 3. **構成案タイムライン**([storyboard.md](storyboard.md) の証拠。`structure-confirm` カードの一部)
46
+ 4. **絵コンテのショットカード**([storyboard.md](storyboard.md) の証拠。`structure-confirm` カードの一部)
47
+ 5. **撮影チェックリスト**([shotlist.md](shotlist.md) の証拠。決定カードは持たない評価面 — 変更したい場合は `shot_list` を直接編集し、次ラウンドの状態差分として拾う)
48
+ - 決定カードは 2 枚のみ(契約上の判断点は「ネタ選定」「構成の確定」の 2 点で固定)。
49
+ - `topic-select`: `answer` は `{ "choice": "<topic.candidates[].id>", "requestMore": false, "note": null }`。AI 推奨(ランキング 1 位の候補)に `data-default="true"` を付ける。
50
+ - `structure-confirm`: `answer` は `{ "chapters": [{ "id": "<structure.chapters[].id>", "adopt": true }], "openingHook": "<key>" | null }`。
51
+ - `completedAt` が非 null になるまで、当該チェックポイント以降の工程(`topic-select` なら競合/トレンド確定後の企画着手、`structure-confirm` なら撮影リスト作成)に進まない。ヘルパー不通・decisions.json 破損時はチャットの明示承認で代替し、その旨をレポート内の `decision_log` に記録する。
52
+ - 未承認のまま `research-plan.json` の `topic.selected` / `structure.confirmed` を書かない。`decided_at` / `confirmed_at` は decision-cards の確定時刻(またはチャット承認時刻)をそのまま転記する。
53
+
54
+ ## 成果物
55
+
56
+ プロジェクトの `planning/` 配下に置く。
57
+
58
+ ```
59
+ planning/
60
+ ├── research-plan-report.html # 固定 5 面のレポート
61
+ ├── research-plan-report.html.decisions.json
62
+ └── research-plan.json # 企画の SSOT。version 必須
63
+ ```
64
+
65
+ - **由来記録**: 外部調査の出典(URL・取得日時・無償/有償の別)を `research-plan.json` の `sources[]` に残す。トレンド調査専用のフィールドは持たない。
66
+ - **後段接続**: `research-plan.json` は撮影後の footage 突合、編集構成案の参照から読める形にする。配信後分析からの還流フィールドは `feedback`(`reserved: true`)に予約のみで、v0 では実装しない。
67
+
68
+ ## よくある間違い
69
+
70
+ - Hub/Hero/Help や 4 並列ギャップ分析の**説明文まで**参考ソースから転記する(型だけを自分の言葉で書く)。
71
+ - `topic.selected` を人間の承認前に埋める、または `decided_at` を確定時刻より前に記入する。
72
+ - `target.japan_sns.notes` を空にする、または「省略」で済ませる。
73
+ - 有償トレンド API・有償検索 API を承認前に呼ぶ。
74
+ - レポートの 5 面のうち評価専用の面(競合分析サマリー・撮影チェックリスト)にも決定カードを追加し、承認ゲートを 2 点から増やす。
75
+ - `research-plan.json` を書いた後に `validate-research-plan.mjs` を通さない。
@@ -0,0 +1,50 @@
1
+ # ターゲット・競合調査
2
+
3
+ [SKILL.md](SKILL.md) の実行順 2. からだけ読む。成果物は `target`(`audience` / `competitors[]` / `japan_sns`)。[ideate.md](ideate.md) の候補出しと相互に参照してよい(競合調査で見つけた隙間が新しい候補の根拠になり、候補の方向性がここで見る競合の絞り込みに使われる)。
4
+
5
+ ## 1. ターゲットを絞る
6
+
7
+ 依頼文脈から次を埋め、`target.audience` に 1〜2 文でまとめる。情報が薄い場合は無理に確定させず、`null` のまま次工程へ進み理由をレポートに残してよい。
8
+
9
+ - 年齢層・属性
10
+ - 抱えている悩み・欲求
11
+ - 主にどのプラットフォームで動画を見るか
12
+
13
+ ## 2. 競合を収集する
14
+
15
+ 対象ジャンルの競合を 3〜5 件程度、無償で確認できる範囲(公開チャンネル・公開動画・検索結果)で集める。各競合について `target.competitors[]` に次を記録する。
16
+
17
+ - `name`: チャンネル名・発信者名
18
+ - `url`: 公開ページの URL。オフライン観察のみで URL が特定できない場合は `null` にし、`notes` に出所を書く
19
+ - `notes`: 観察できた事実(更新頻度・尺・演出の傾向など)
20
+ - `gap`: 次節の 4 軸ギャップ分析の所見
21
+
22
+ 外部調査で使った出典は `sources[]` に URL・取得日時・`cost`(`free` / `paid`)を記録する。有償の調査ツール・API を使う前に [manage-connections](../manage-connections/SKILL.md) の承認ゲートを通す。
23
+
24
+ ## 3. 4 並列ギャップ分析
25
+
26
+ 競合を並べて次の 4 軸で同時に見比べ、自分たちが取れる隙間を `gap` に書く。軸ごとの厳密な enum は持たず自由記述にする(表現の幅を残す)。
27
+
28
+ 1. **コンテンツテーマ**: 競合が扱っていない切り口・悩みがあるか
29
+ 2. **フォーマット・尺**: 競合の尺・構成に対して短尺/長尺どちらの隙間があるか
30
+ 3. **投稿頻度**: 競合の更新間隔に対して自分たちが優位を取れるか
31
+ 4. **訴求軸**: 競合のサムネ・タイトルの打ち出し方に対する差別化点はあるか
32
+
33
+ ヒットしない軸があっても空欄にせず「差分なし」と明記する。捏造した優位性を書かない。
34
+
35
+ ## 4. 日本語 SNS 事情(必須調査軸)
36
+
37
+ `target.japan_sns` は空にできない必須フィールドである(ハードルール)。次を埋める。
38
+
39
+ - `platforms`: ターゲット層が実際に使っているプラットフォーム(例: X、Instagram、TikTok、YouTube Shorts、LINE VOOM 等)
40
+ - `notes`: 日本語圏特有の傾向(プラットフォームごとの温度感、季節性、短尺再編集の需要など)。**無償手段で確認できる範囲**(公開トレンドページ、プラットフォーム公式の急上昇一覧、既存の一般知識)で埋め、有償のソーシャルリスニングツールは [manage-connections](../manage-connections/SKILL.md) の承認ゲートを経てオプトインで使う。
41
+
42
+ 無償手段でも一切確認できなかった場合は、`notes` に「無償手段で確認できず、理由は〜」と正直に書く。空文字・省略は validate-research-plan.mjs でエラーになる。
43
+
44
+ ## よくある間違い
45
+
46
+ - 競合を 1 件しか見ず「ギャップ分析」と称する。
47
+ - 4 軸のうち都合の良い軸だけ書き、残りを省略する。
48
+ - `japan_sns.notes` を「調査中」で済ませて先へ進む。
49
+ - 有償ソーシャルリスニング API を承認前に叩く。
50
+ - 見つからなかった競合の URL を推測で埋める。
@@ -0,0 +1,56 @@
1
+ # ネタ出しと候補ランキング
2
+
3
+ [SKILL.md](SKILL.md) の実行順 1. からだけ読む。ここでの成果物は `topic.candidates[]`(配列順 = ランキング順、最有力を先頭に置く)と `topic.selected` / `topic.decided_at`(decision-cards の `topic-select` カード確定後にのみ埋める)。
4
+
5
+ ## 0. recipe の recall(候補を出す前に一度)
6
+
7
+ 候補出しに入る前に、[edit-plan/recipe.md](../edit-plan/recipe.md) の recall 手順と同じ規律で
8
+ `~/.akari/recipes/` を確認する。`workflow: "research"` のレシピだけを対象にし、無ければ
9
+ 何もせず通常どおり進む(error にしない)。見つかれば `confirmed`(`target_duration_band` /
10
+ `aspect` / `overlay_kinds` 等)を出所付きの推奨としてチャットで添えるが、**今回の依頼を
11
+ 上書きせず**、候補出し・競合調査・日本語 SNS 事情確認などの必須工程をスキップさせない。
12
+ 採用は人間が「前回と同じで」等を明示したときだけ、対応フィールドを一括で反映してよい。
13
+
14
+ ## 1. 候補を出す
15
+
16
+ 依頼の主題・チャンネルの既存傾向・[competitor.md](competitor.md) / [trends.md](trends.md) の途中知見があればそれも踏まえ、候補を複数(目安 3〜7 件)出す。候補ゼロや 1 件だけで確定しない。根拠のない候補を「調査済み」と偽らない — 依頼文脈からの推測は推測と明記する。
17
+
18
+ 各候補に次を記録する。
19
+
20
+ - `id`: 候補を指す短い識別子(他の候補と重複しない)
21
+ - `title`: 動画の仮タイトル
22
+ - `category`: 下記の分類
23
+ - `monetization_potential`: `high` / `medium` / `low`
24
+ - `rationale`: 分類・収益ポテンシャルの判断根拠。トレンド調査で得た知見を使った場合は根拠に含め、出典は `sources[]` に記録する
25
+
26
+ ## 2. Hub/Hero/Help で分類する
27
+
28
+ チャンネル運用でよく使われる 3 分類の型を使う。
29
+
30
+ - **Hub**: 定期配信でファン化・関係構築を狙う企画。単体の収益貢献は弱くてよい
31
+ - **Hero**: 話題性・拡散を狙う一点突破企画。バズれば新規流入が跳ねるが再現性は低い
32
+ - **Help**: 検索・具体的な悩み解決を狙う企画。息の長い流入源になりやすい
33
+
34
+ 3 分類のバランスを見て、既存チャンネルに欠けている分類があれば `rationale` にその旨を書く。全候補が同じ分類に偏っている場合も黙って進めず、理由を残す。
35
+
36
+ ## 3. 収益化ポテンシャル軸でランキングする
37
+
38
+ `monetization_potential` は次のような観点の合成で判断し、`rationale` にどの観点を重く見たかを書く。厳密な数式は持たない(v0 は推定ランキングまでで、実データ連携は非スコープ)。
39
+
40
+ - 広告主・商材との親和性(レビュー導線・アフィリエイト導線が作りやすいか)
41
+ - 息の長さ(季節性・一過性のトレンド依存か、通年で効くか)
42
+ - 制作コストとの釣り合い(収録・生成の手間に見合うリターンか)
43
+ - 既存チャンネル資産との相乗効果(過去動画・登録者属性と噛み合うか)
44
+
45
+ ランキングは `topic.candidates[]` の配列順で表現する(`rank` フィールドは持たない)。最有力候補を先頭に置き、レポートの候補ネタランキング表もこの順で描画する。
46
+
47
+ ## 4. 承認を受けるまで確定しない
48
+
49
+ `topic.selected` / `topic.decided_at` は [SKILL.md](SKILL.md) の `topic-select` 決定カードが確定する(`completedAt` 非 null、またはチャット明示承認)までは書かない。AI 推奨(配列先頭の候補)を `data-default="true"` にした候補選択カードを用意し、人間の選択がそのまま候補になる設計にする。
50
+
51
+ ## よくある間違い
52
+
53
+ - 候補を 1 件だけ出して「これで確定」と即断する。
54
+ - Hub/Hero/Help の分類根拠を書かず、ラベルだけ貼る。
55
+ - `monetization_potential` を勘だけで決め、`rationale` に判断材料を残さない。
56
+ - 承認前に `topic.selected` を仮埋めし、後から書き換える運用にする(承認ゲートの意味が消える)。
@@ -0,0 +1,46 @@
1
+ # 撮影リスト・収録チェックリスト
2
+
3
+ [SKILL.md](SKILL.md) の実行順 6. からだけ読む。`structure-confirm` カードの `completedAt` が非 null(またはチャット明示承認)になり、`structure.confirmed` が確定した後にだけ着手する。成果物は `shot_list[]`。承認済みの絵コンテショットカード(`structure.shots[]`)を撮影実務に落とす工程であり、ここでは新しい表現判断を作らない。
4
+
5
+ ## 1. ショットごとに実務項目を書く
6
+
7
+ `structure.shots[]` の各ショットに対応する実務エントリを `shot_list[]` に書く(1 ショット = 1 エントリが基本。同一ショットを複数カット割りする場合はエントリを増やしてよい)。
8
+
9
+ - `id`: エントリを指す短い識別子
10
+ - `ref_shot_id`: 対応する `structure.shots[].id`。企画段階に無い撮り増しカットなら `null`
11
+ - `location`: 撮影場所。未定なら `null`
12
+ - `equipment`: 必要機材(三脚・照明・マイク等)の配列
13
+ - `checklist`: 収録時に確認する項目の配列(下記のたたき台を対象に応じて増減する)
14
+ - `status`: `planned`(既定)/ `ok`(撮影済み・OK)/ `ng`(撮り直し必要)
15
+
16
+ ## 2. チェックリストのたたき台
17
+
18
+ 対象の性質に応じて増減してよいが、次の観点は落とさない。
19
+
20
+ - 音声レベル(環境音・声量が適切か)
21
+ - 画角・水平(意図した構図で撮れているか)
22
+ - 光量・ホワイトバランス
23
+ - NG 時の撮り直し方針(同ポジションで撮り直すか、別カットで代替するか)
24
+
25
+ 外部ツール(ExifTool・ffprobe 等でメタデータを機械的に吸い上げる撮影支援)は本スキルの対象外。それらとの ID 共有は将来の別スキルの領分であり、ここでは `ref_shot_id` を安定した参照キーとして残すことだけを担う。
26
+
27
+ ## 3. `status` は撮影後の運用に委ねる
28
+
29
+ v0 では `status` の初期値は常に `planned`。実際の撮影結果に応じた `ok` / `ng` への更新は、本スキルの一周が終わった後の運用(人間による直接編集、または将来の撮影支援スキル)で行う。ここで架空の撮影結果を書かない。
30
+
31
+ ## 4. 最終確認
32
+
33
+ `research-plan.json` に `topic` / `target` / `structure` / `shot_list` / `sources` / `feedback` の全フィールドを書き終えたら、必ず検証する。
34
+
35
+ ```sh
36
+ node packages/schemas/bin/validate-research-plan.mjs <research-plan.json のパス>
37
+ ```
38
+
39
+ exit code が `0` になるまで完了扱いにしない(warning は許容されるが完了報告に列挙する)。
40
+
41
+ ## よくある間違い
42
+
43
+ - `structure.confirmed` が確定する前に撮影リストを作り始める。
44
+ - `status` に撮影していない結果を推測で書く。
45
+ - `ref_shot_id` を書かず、絵コンテとの対応関係が追えなくする。
46
+ - `validate-research-plan.mjs` を通さずに完了報告する。
@@ -0,0 +1,48 @@
1
+ # 企画書・構成案・絵コンテ
2
+
3
+ [SKILL.md](SKILL.md) の実行順 5. からだけ読む。`topic-select` カードの `completedAt` が非 null(またはチャット明示承認)になり、`topic.selected` が確定した後にだけ着手する。成果物は `structure`(`chapters[]` / `shots[]` / `opening_hook` / `confirmed` / `confirmed_at`)。
4
+
5
+ ## 1. 構成案(チャプター)を組む
6
+
7
+ 確定したネタから、動画の構成ビートを `structure.chapters[]` に配列順(= タイムライン順)で書く。各チャプターに次を持たせる。
8
+
9
+ - `id`: チャプターを指す短い識別子
10
+ - `title`: チャプター名
11
+ - `duration_estimate_seconds`: 想定尺(秒)。未確定なら `null`
12
+ - `notes`: 演出方針・テロップ方針など
13
+
14
+ [ideate.md](ideate.md) で分類した Hub/Hero/Help の型に沿ったテンポ・尺を意識する(例: Hero は冒頭フックを強く、Help は手順の網羅性を優先する)。
15
+
16
+ ## 2. オープニングフックを決める
17
+
18
+ `opening_hook` に、視聴継続を左右する冒頭の見せ方を 1 文で書く(例: 「完成映像を最初の 3 秒で見せる」)。採らない場合は `null` にし、理由をレポート本文に残す。
19
+
20
+ ## 3. 絵コンテのショットカードを作る
21
+
22
+ 各チャプターに対応する主要ショットを `structure.shots[]` に書く。ショットは映像の設計図であり、次節の撮影実務リスト([shotlist.md](shotlist.md))とは別物 — ここでは「何をどう見せるか」だけを扱う。
23
+
24
+ - `id`: ショットを指す短い識別子
25
+ - `chapter_id`: 対応する `structure.chapters[].id`。未割当なら `null`
26
+ - `shot_type`: ショットサイズ・アングルの自由記述(例: `close-up` / `overhead` / `wide`)。厳密な enum にしない
27
+ - `description`: 画面に映るものの説明
28
+ - `duration_estimate_seconds`: 想定尺(秒)。未確定なら `null`
29
+ - `image_path`: 任意の概念画像パス。**v0 の既定は文字だけのショットカード**(無償・headless 完結を優先)。概念画像を生成する場合だけ [edit-plan/approvals-and-generation.md](../edit-plan/approvals-and-generation.md) の Decision Communication Contract(対象・使う手・理由・代替案・影響の宣言)と手の優先順(Codex 画像生成 → Akari Cloud)に従い、provenance を記録する。画像なしなら `null` のままにする
30
+
31
+ ## 4. 承認を受けるまで確定しない
32
+
33
+ `structure.confirmed` / `structure.confirmed_at` は [SKILL.md](SKILL.md) の `structure-confirm` 決定カードが確定するまで書かない。カードの `answer` はチャプターの採否(`chapters[].adopt`)とオープニングフックの選択を持つ。人間が一部チャプターを不採用にした場合も、`structure.chapters[]` からは削除せず、レポートの `decision_log` に不採用の記録を残す運用にする(削除すると採否の経緯が消える)。
34
+
35
+ ## 5. `structure-confirm` の差し戻し受領手順(plan-comments.json)
36
+
37
+ `structure-confirm` 決定カードの再提示に着手する前に、`<plan-dir>/plan-comments.json` の有無を確認する(**チャット返信の解釈より先に本ファイルを読む**)。ライフサイクル・データ形の正本は [contract-2026-07-25-plan-comments-v0.md](../../docs/contract-2026-07-25-plan-comments-v0.md)。
38
+
39
+ - `pass: "structure"` の `plan-comments.json` が在れば、`comments[].target_kind: "shot"` で名指しされた `structure.shots[]`(配列インデックスが `target_id`)**だけ**を改訂する。名指しされていないチャプター・ショットは無変更のまま次の提示に進む。
40
+ - 改訂が終わったら **`plan-comments.json` を削除**してから、更新後の `structure-confirm` 決定カードを再提示する。
41
+ - ファイルが無い回は、従来どおりチャットの差し戻し指示のみを解釈する。
42
+
43
+ ## よくある間違い
44
+
45
+ - 承認前に `structure.confirmed: true` を書く。
46
+ - 絵コンテのショットカードと撮影実務リストを混同し、`shot_type` に機材名や撮影地を書く。
47
+ - 概念画像の生成前に Decision Communication Contract を宣言しない。
48
+ - 想定尺が不明なのに `duration_estimate_seconds` へ根拠のない数値を入れる(`null` にして「未確定」と明記する方が正直)。
@@ -0,0 +1,33 @@
1
+ # トレンド取得
2
+
3
+ [SKILL.md](SKILL.md) の実行順 3. からだけ読む。**専用の `trends` フィールドは持たない。** ここで得た知見は [ideate.md](ideate.md) の `topic.candidates[].rationale` や [competitor.md](competitor.md) の `target.competitors[].gap` に溶け込ませ、出典だけを `sources[]` に残す。トレンドそのものを別セクションとしてレポートに独立掲載しない(候補ネタランキング表・競合分析サマリーの根拠として吸収される)。
4
+
5
+ ## 1. 無償手段を既定にする(ハードルール)
6
+
7
+ 既定のトレンド取得は無償枠のみで完結させる。
8
+
9
+ - 一般公開されているトレンドページ・急上昇一覧の閲覧
10
+ - 検索エンジンの一般公開結果
11
+ - 既に持っている一般知識(学習時点の傾向。取得日時が不明な場合はその旨を `sources[]` の `note` に明記し、`url` は `null` にする)
12
+
13
+ 無償手段だけでも一周は成立させる。有償のトレンド API(有償枠のソーシャルリスニング・キーワードボリュームツール等)が使えない、または承認が得られない環境でも、ここで停止せず「無償手段のみで確認した」範囲を明記して次工程へ進む。
14
+
15
+ ## 2. 有償手段はオプトイン
16
+
17
+ 有償のトレンド取得手段を使う場合は、[manage-connections](../manage-connections/SKILL.md) の承認ゲート(対象・使う手・理由・代替案・見積費用・待ち時間・外部送信の宣言 → 明示承認)を先に通す。承認が無いまま有償呼び出しをしない。承認後に使った場合は `sources[]` の `cost` に `paid` を記録する。
18
+
19
+ ## 3. 出典を残す
20
+
21
+ トレンド調査で参照した情報は必ず `sources[]` に 1 件として記録する。
22
+
23
+ - `url`: 参照ページの URL。URL の無い一般知識由来なら `null`
24
+ - `retrieved_at`: 取得日時(ISO 8601)。不明なら `null`
25
+ - `cost`: `free` / `paid`
26
+ - `note`: 何を確認したか、どの候補・競合の根拠に使ったか
27
+
28
+ ## よくある間違い
29
+
30
+ - トレンド調査結果を独立したレポート面として作り、固定 5 面から逸脱する。
31
+ - 有償トレンド API を承認前に呼ぶ、または承認ゲートを経ずに「無償枠だから」と誤認して有償枠を使う。
32
+ - 取得日時不明の知見を、あたかも今調べたかのように `retrieved_at` を捏造する。
33
+ - 無償手段で何も見つからなかった場合に、そのまま `sources[]` へ何も残さず知見だけ書く(出典なしの主張を作らない)。
@@ -0,0 +1,93 @@
1
+ ---
2
+ name: setup-audio-library
3
+ description: BGM・効果音の音源ライブラリを増やしたいときに発動する。フリー配布元の候補リスト HTML を生成し、ユーザー自身が手動でダウンロードしたファイルをドロップフォルダから照合・登録し、試聴ギャラリーで keep/drop するまでの半自動セットアップを行う。setup-library / harvest-asset の姉妹スキル(音源だけ流儀が異なるため独立)。
4
+ ---
5
+
6
+ # FORBIDDEN 級ハードルール
7
+
8
+ > **Language**: Respond in the user's language — 対話・質問・承認確認・レポートはユーザーの使用言語に合わせる(例: 英語で話しかけられたら英語で応答する)。
9
+
10
+ 次のいずれかに違反する形で音源セットアップを進めない。詳細リーフより常に優先する。
11
+
12
+ 1. **AI による自動取得は、ユーザーの明示指示がある場合に限り、条件付きで許可する**
13
+ (2026-07-22 オーナー裁定により改訂。旧ルール「AI は自動・一括ダウンロードしない」を
14
+ 置き換え)。既定はやはり「候補リスト HTML を生成する」「ドロップフォルダを走査する」
15
+ だけであり、以下の全条件を満たさない限り `curl` 等で配布元から直接音声を取得しない:
16
+ - **ユーザー本人が当該取得タスクを明示的に指示していること**(「候補を見て後で自分で
17
+ ダウンロードする」という既定フローを AI が勝手に取得フローへ切り替えない)
18
+ - **bot/自動収集を規約で明記禁止するサイト、および robots.txt で自動化ボット向けに
19
+ アクセス制限を明示しているサイトへは一切アクセスしない。** `robots.txt` は毎回
20
+ 取得前に確認すること。ToS が自動化について沈黙している「候補一覧上の許可サイト」
21
+ であっても、`robots.txt` が named bot(`ClaudeBot` 等 AI クローラ名を含む)に対して
22
+ 個別に `Disallow` を明記している場合は、一般 UA を騙って回避してはいけない
23
+ (2026-07-22 の実地確認で、効果音ラボの `robots.txt` が `ClaudeBot` を含む主要 AI
24
+ ボットに対し `Disallow: /*.mp3$` を明記していたことが判明。ToS 沈黙だけで
25
+ 「許可サイト」と判定してはいけない教訓として記録)
26
+ - **直列取得・リクエスト間 3〜5 秒スリープ・通常ブラウザ相当 UA・失敗はリトライ 1 回
27
+ まで。** 一括・並列取得はしない
28
+ - **取得元ページ URL・取得日時・ライセンス・クレジット要否を来歴として必ず記録する**
29
+ (`~/.akari/assets/audio/_staging/<site>/<id>/` 等の評価用ステージングに
30
+ `.meta.json` を添える)
31
+ - **評価後、keep 以外は破棄する。** 取得はあくまで「まとめて試聴して選ぶ」ための
32
+ 一時ステージングであり、無条件の永続保存ではない
33
+ - ページからファイル URL を実際に読み取れた曲のみ取得する。**当て推量で URL を
34
+ 組み立てて取得しない**(本ルール自体は不変)
35
+ - フォーム送信・Referer 付与など「実ブラウザが行う標準的な操作の忠実な再現」は
36
+ 許容されるが、認証回避・レート制限回避・robots.txt 迂回を目的にしたヘッダー偽装や
37
+ UA 偽装は行わない
38
+ 2. **候補リストのリンクは必ずダウンロードページ URL にする。** 音声ファイルへの直リンクは
39
+ 張らない(効果音ラボ・甘茶の音楽工房・H/MIX GALLERY 等の「直リンク禁止」規約対応)。
40
+ 3. **在庫・実在を捏造しない。** `catalog/audio/candidates.json` に無いサイト・URL・
41
+ ライセンス表記を発明しない。ページの実在やファイル名を確認できない場合は
42
+ `confidence: "blocked_unverifiable"` 等、不確かである旨をそのまま記録する。
43
+ 4. **`ai_training_allowed` を安全側に倒す。** 配布元の規約が AI 学習利用を明示的に許可して
44
+ いない限り `false` にする(未許諾を許可とみなさない)。CC0 明記のみ `true`。
45
+ 5. **音声実体を本リポにコミットしない。** 実ファイルは常にリポジトリ外
46
+ (`~/.akari/assets/audio/<id>/` 等の user スコープ)へ置く。`catalog/audio/` には
47
+ `remote: true` の参照メタしか置かない。
48
+ 6. **既存の `catalog/audio/<id>/` を無断で上書きしない。** id が衝突したら書き込みをスキップし
49
+ ログに残す(harvest-asset / setup-library と同じ規律)。
50
+ 7. **`node packages/schemas/bin/validate-asset.mjs` を通さずに「登録完了」と報告しない。**
51
+ (library scope の実体エントリのみ対象。`remote: true` のカタログ参照エントリは
52
+ validator 側の設計で preview.png チェックが免除される)
53
+
54
+ # 実行順リーフ
55
+
56
+ 1. [candidate-list.md](candidate-list.md) — `catalog/audio/candidates.json` を元に候補リスト
57
+ HTML を生成する。既所有(catalog 登録済み)はグレーアウト表示になる
58
+ 2. [drop-folder.md](drop-folder.md) — ユーザーがドロップフォルダへ保存したファイルを走査し、
59
+ 候補と照合してライブラリ配置 + catalog メタ登録、または隔離する
60
+ 3. [gallery.md](gallery.md) — 登録済み音源を試聴し、keep/drop を記録する
61
+
62
+ 詳細を先読みせず、現在の工程に対応するファイルだけを読む。
63
+
64
+ ## setup-library / harvest-asset との関係(意図的に独立スキルにした理由)
65
+
66
+ このスキルは `../setup-library/` や `../harvest-asset/` の meta.json v0 契約・スコープ階層
67
+ (`local` / `shared` / `user` / `builtin`)・validator をそのまま流用する。**ただし取得フロー
68
+ そのものは別スキルとして独立させた**。理由:
69
+
70
+ - `setup-library` は「その場でカタログを提示 → 承認 → 直接取得 or ログイン誘導」という
71
+ 単一セッション完結のフローを前提にしている。音源は「候補リストを見て、後日ゆっくり
72
+ ダウンロードして、気づいたときにまとめて登録する」という**非同期・複数セッション**の
73
+ 運用になり、フローの形が本質的に異なる(`starter-pack.md` / `fetch-and-validate.md`
74
+ へ無理に追記すると分岐が増えすぎる)。
75
+ - ドロップフォルダ走査・ファイル名照合・隔離(出典不明リスト)・試聴ギャラリーは、
76
+ 他カテゴリ(3d/font/broll 等)には無い音源固有の機構。
77
+ - 既存 2 スキルのファイルは変更していない(`setup-library/SKILL.md` にこのスキルへの
78
+ 参照リンクを追加することは今回のタスク境界外のため見送った。ユーザー・オーナーが
79
+ 必要と判断すれば別途追加できる)。
80
+
81
+ ## 根拠
82
+
83
+ - 内部リサーチ: `research/2026-07-22-free-sfx-bgm-sources.md`(内部リポ、配布元ごとの
84
+ 規約判定・自動化適性・52 候補の一次情報)
85
+ - 公開契約: [`docs/contract-2026-07-13-asset-library.md`](../../docs/contract-2026-07-13-asset-library.md)
86
+ 「カタログと取得スキル」§・「アセットのスコープ階層」§
87
+ - 同型の既存実装(node:http ヘルパー + 静的 HTML の流儀):
88
+ [`packages/decision-cards/`](../../packages/decision-cards/README.md)、
89
+ [`packages/intake-form/`](../../packages/intake-form/README.md)
90
+ - ドロップフォルダによる半自動取得の先例:
91
+ [`../generate-narration/voice-profile-setup.md`](../generate-narration/voice-profile-setup.md)
92
+ (mtime ベースの拾いルール。本スキルはファイル名照合ベースだが「ユーザーに取得させ、
93
+ 後からエージェントが拾う」という設計思想は同じ)