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.
- package/LICENSE +21 -0
- package/README.md +81 -0
- package/bin/akari.mjs +14 -0
- package/package.json +42 -0
- package/src/cli.mjs +140 -0
- package/src/messages.mjs +100 -0
- package/src/path-lookup.mjs +47 -0
- package/src/project-state.mjs +25 -0
- package/src/repo-assets.mjs +59 -0
- package/src/task-labels.mjs +30 -0
- package/src/update-check.mjs +189 -0
- package/vendor/packages/project-scaffold/package.json +11 -0
- package/vendor/packages/project-scaffold/src/index.mjs +523 -0
- package/vendor/packages/project-scaffold/test/create-project.test.mjs +81 -0
- package/vendor/packages/project-scaffold/test/skill-adapter-link.test.mjs +204 -0
- package/vendor/packages/schemas/analysis.schema.json +475 -0
- package/vendor/packages/schemas/asset-meta.schema.json +225 -0
- package/vendor/packages/schemas/avatar-rendition.schema.json +65 -0
- package/vendor/packages/schemas/avatar.schema.json +178 -0
- package/vendor/packages/schemas/bin/validate-asset.mjs +597 -0
- package/vendor/packages/schemas/bin/validate-avatar.mjs +486 -0
- package/vendor/packages/schemas/bin/validate-captions.mjs +316 -0
- package/vendor/packages/schemas/bin/validate-connections.mjs +295 -0
- package/vendor/packages/schemas/bin/validate-edit.mjs +766 -0
- package/vendor/packages/schemas/bin/validate-intake.mjs +185 -0
- package/vendor/packages/schemas/bin/validate-interpretation.mjs +515 -0
- package/vendor/packages/schemas/bin/validate-plan-comments.mjs +170 -0
- package/vendor/packages/schemas/bin/validate-plan.mjs +365 -0
- package/vendor/packages/schemas/bin/validate-recipe.mjs +267 -0
- package/vendor/packages/schemas/bin/validate-research-plan.mjs +510 -0
- package/vendor/packages/schemas/bin/validate-review.mjs +427 -0
- package/vendor/packages/schemas/captions.schema.json +141 -0
- package/vendor/packages/schemas/connections.schema.json +153 -0
- package/vendor/packages/schemas/edit.schema.json +437 -0
- package/vendor/packages/schemas/examples/analysis-person-matte-valid/analysis.json +18 -0
- package/vendor/packages/schemas/examples/captions-text-style-background-mode-invalid/captions.json +18 -0
- package/vendor/packages/schemas/examples/captions-text-style-color-non-hex-invalid/captions.json +14 -0
- package/vendor/packages/schemas/examples/captions-text-style-default-only-valid/captions.json +27 -0
- package/vendor/packages/schemas/examples/captions-text-style-omitted-valid/captions.json +11 -0
- package/vendor/packages/schemas/examples/captions-text-style-opacity-out-of-range-invalid/captions.json +8 -0
- package/vendor/packages/schemas/examples/captions-text-style-record-override-valid/captions.json +27 -0
- package/vendor/packages/schemas/examples/captions-text-style-size-non-positive-invalid/captions.json +14 -0
- package/vendor/packages/schemas/examples/captions-text-style-zone-invalid/captions.json +16 -0
- package/vendor/packages/schemas/examples/connections-v0-invalid-auth/connections.json +32 -0
- package/vendor/packages/schemas/examples/connections-v0-memory-valid/connections.json +42 -0
- package/vendor/packages/schemas/examples/edit-beats-duplicate-id/edit.json +11 -0
- package/vendor/packages/schemas/examples/edit-beats-invalid-id/edit.json +10 -0
- package/vendor/packages/schemas/examples/edit-beats-missing-kind/edit.json +10 -0
- package/vendor/packages/schemas/examples/edit-beats-strength-out-of-range/edit.json +11 -0
- package/vendor/packages/schemas/examples/edit-beats-v0-src-present/edit.json +10 -0
- package/vendor/packages/schemas/examples/edit-beats-v0-valid/edit.json +29 -0
- package/vendor/packages/schemas/examples/edit-beats-v1-src-missing-reference/edit.json +14 -0
- package/vendor/packages/schemas/examples/edit-beats-v1-valid/edit.json +37 -0
- package/vendor/packages/schemas/examples/edit-bgm-ducking-invalid/edit.json +10 -0
- package/vendor/packages/schemas/examples/edit-bgm-fade-invalid/edit.json +10 -0
- package/vendor/packages/schemas/examples/edit-bgm-fade-valid/edit.json +10 -0
- package/vendor/packages/schemas/examples/edit-bgm-in-invalid/edit.json +10 -0
- package/vendor/packages/schemas/examples/edit-bgm-in-valid/edit.json +10 -0
- package/vendor/packages/schemas/examples/edit-bgm-missing-path/edit.json +10 -0
- package/vendor/packages/schemas/examples/edit-bgm-null-valid/edit.json +11 -0
- package/vendor/packages/schemas/examples/edit-bgm-sfx-gain-out-of-range/edit.json +11 -0
- package/vendor/packages/schemas/examples/edit-bgm-sfx-valid/edit.json +23 -0
- package/vendor/packages/schemas/examples/edit-chroma-key-invalid/edit.json +7 -0
- package/vendor/packages/schemas/examples/edit-cuts-at-negative-invalid/edit.json +7 -0
- package/vendor/packages/schemas/examples/edit-cuts-at-track-valid/edit.json +20 -0
- package/vendor/packages/schemas/examples/edit-cuts-opacity-out-of-range-invalid/edit.json +16 -0
- package/vendor/packages/schemas/examples/edit-cuts-track-invalid/edit.json +7 -0
- package/vendor/packages/schemas/examples/edit-cuts-transform-full-valid/edit.json +17 -0
- package/vendor/packages/schemas/examples/edit-cuts-transform-omitted-valid/edit.json +9 -0
- package/vendor/packages/schemas/examples/edit-cuts-transform-partial-valid/edit.json +16 -0
- package/vendor/packages/schemas/examples/edit-cuts-transform-rotate-invalid/edit.json +16 -0
- package/vendor/packages/schemas/examples/edit-cuts-transform-scale-invalid/edit.json +16 -0
- package/vendor/packages/schemas/examples/edit-cuts-transform-unknown-key-invalid/edit.json +16 -0
- package/vendor/packages/schemas/examples/edit-direction-intensity-negative/edit.json +8 -0
- package/vendor/packages/schemas/examples/edit-direction-intensity-not-integer/edit.json +8 -0
- package/vendor/packages/schemas/examples/edit-direction-intensity-out-of-range/edit.json +8 -0
- package/vendor/packages/schemas/examples/edit-direction-missing-preset/edit.json +8 -0
- package/vendor/packages/schemas/examples/edit-direction-overrides-array/edit.json +8 -0
- package/vendor/packages/schemas/examples/edit-direction-preset-only/edit.json +8 -0
- package/vendor/packages/schemas/examples/edit-direction-valid/edit.json +8 -0
- package/vendor/packages/schemas/examples/edit-emphasis-words-empty-word/edit.json +10 -0
- package/vendor/packages/schemas/examples/edit-emphasis-words-invalid-id/edit.json +10 -0
- package/vendor/packages/schemas/examples/edit-emphasis-words-missing-emotion/edit.json +10 -0
- package/vendor/packages/schemas/examples/edit-emphasis-words-range-invalid/edit.json +11 -0
- package/vendor/packages/schemas/examples/edit-emphasis-words-v0-src-present/edit.json +10 -0
- package/vendor/packages/schemas/examples/edit-emphasis-words-v0-valid/edit.json +32 -0
- package/vendor/packages/schemas/examples/edit-emphasis-words-v1-valid/edit.json +39 -0
- package/vendor/packages/schemas/examples/edit-layers-invalid-bad-blend/edit.json +17 -0
- package/vendor/packages/schemas/examples/edit-layers-invalid-chroma-key-on-baked/edit.json +17 -0
- package/vendor/packages/schemas/examples/edit-layers-invalid-duplicate-id/edit.json +11 -0
- package/vendor/packages/schemas/examples/edit-layers-track-invalid/edit.json +8 -0
- package/vendor/packages/schemas/examples/edit-layers-valid/edit.json +31 -0
- package/vendor/packages/schemas/examples/edit-look-invalid/edit.json +7 -0
- package/vendor/packages/schemas/examples/edit-master-invalid/edit.json +8 -0
- package/vendor/packages/schemas/examples/edit-narration-gain-out-of-range/edit.json +18 -0
- package/vendor/packages/schemas/examples/edit-narration-invalid-id/edit.json +17 -0
- package/vendor/packages/schemas/examples/edit-narration-missing-provenance/edit.json +16 -0
- package/vendor/packages/schemas/examples/edit-narration-valid/edit.json +36 -0
- package/vendor/packages/schemas/examples/edit-narration-voicevox-missing-credit/edit.json +20 -0
- package/vendor/packages/schemas/examples/edit-render-basics-valid/edit.json +22 -0
- package/vendor/packages/schemas/examples/edit-sfx-in-invalid/edit.json +10 -0
- package/vendor/packages/schemas/examples/edit-sfx-in-out-valid/edit.json +10 -0
- package/vendor/packages/schemas/examples/edit-sfx-out-invalid/edit.json +10 -0
- package/vendor/packages/schemas/examples/edit-sfx-out-type-invalid/edit.json +10 -0
- package/vendor/packages/schemas/examples/edit-sfx-t-invalid/edit.json +10 -0
- package/vendor/packages/schemas/examples/edit-sfx-track-invalid/edit.json +8 -0
- package/vendor/packages/schemas/examples/edit-speed-invalid/edit.json +7 -0
- package/vendor/packages/schemas/examples/edit-timeline-declared-valid/edit.json +14 -0
- package/vendor/packages/schemas/examples/edit-timeline-duplicate-id-invalid/edit.json +13 -0
- package/vendor/packages/schemas/examples/edit-timeline-interleaved-valid/edit.json +22 -0
- package/vendor/packages/schemas/examples/edit-timeline-omitted-valid/edit.json +7 -0
- package/vendor/packages/schemas/examples/edit-timeline-ref-invalid/edit.json +13 -0
- package/vendor/packages/schemas/examples/edit-tracks-section-invalid/edit.json +8 -0
- package/vendor/packages/schemas/examples/edit-tracks-section-valid/edit.json +13 -0
- package/vendor/packages/schemas/examples/edit-transition-invalid/edit.json +10 -0
- package/vendor/packages/schemas/examples/edit-v0-sample/edit.json +27 -0
- package/vendor/packages/schemas/examples/edit-v0-sample/overlays/cap-a.html +17 -0
- package/vendor/packages/schemas/examples/edit-v0-sample/overlays/cap-b.html +17 -0
- package/vendor/packages/schemas/examples/edit-v1-bgm-sfx-valid/edit.json +13 -0
- package/vendor/packages/schemas/examples/edit-v1-sample/edit.json +14 -0
- package/vendor/packages/schemas/examples/plan-comments-v0-sample/plan-comments.json +19 -0
- package/vendor/packages/schemas/examples/plan-v0-sample/plan.json +39 -0
- package/vendor/packages/schemas/examples/recipe-v0-sample/product-demo-quick-cuts.json +23 -0
- package/vendor/packages/schemas/examples/review-v1-sample/review.json +11 -0
- package/vendor/packages/schemas/fixtures/avatar/invalid-avatar-md-136-lines/AVATAR.md +159 -0
- package/vendor/packages/schemas/fixtures/avatar/invalid-avatar-md-136-lines/avatar.json +22 -0
- package/vendor/packages/schemas/fixtures/avatar/invalid-avatar-md-136-lines/renditions/2d-bustup/happy.png +0 -0
- package/vendor/packages/schemas/fixtures/avatar/invalid-avatar-md-136-lines/renditions/2d-bustup/neutral-half.png +0 -0
- package/vendor/packages/schemas/fixtures/avatar/invalid-avatar-md-136-lines/renditions/2d-bustup/neutral-open.png +0 -0
- package/vendor/packages/schemas/fixtures/avatar/invalid-avatar-md-136-lines/renditions/2d-bustup/neutral.png +0 -0
- package/vendor/packages/schemas/fixtures/avatar/invalid-avatar-md-136-lines/renditions/2d-bustup/rendition.json +18 -0
- package/vendor/packages/schemas/fixtures/avatar/invalid-avatar-md-136-lines/renditions/2d-fullbody/happy.png +0 -0
- package/vendor/packages/schemas/fixtures/avatar/invalid-avatar-md-136-lines/renditions/2d-fullbody/neutral-half.png +0 -0
- package/vendor/packages/schemas/fixtures/avatar/invalid-avatar-md-136-lines/renditions/2d-fullbody/neutral-open.png +0 -0
- package/vendor/packages/schemas/fixtures/avatar/invalid-avatar-md-136-lines/renditions/2d-fullbody/neutral.png +0 -0
- package/vendor/packages/schemas/fixtures/avatar/invalid-avatar-md-136-lines/renditions/2d-fullbody/rendition.json +18 -0
- package/vendor/packages/schemas/fixtures/avatar/invalid-default-role/AVATAR.md +30 -0
- package/vendor/packages/schemas/fixtures/avatar/invalid-default-role/avatar.json +22 -0
- package/vendor/packages/schemas/fixtures/avatar/invalid-default-role/renditions/2d-bustup/happy.png +0 -0
- package/vendor/packages/schemas/fixtures/avatar/invalid-default-role/renditions/2d-bustup/neutral-half.png +0 -0
- package/vendor/packages/schemas/fixtures/avatar/invalid-default-role/renditions/2d-bustup/neutral-open.png +0 -0
- package/vendor/packages/schemas/fixtures/avatar/invalid-default-role/renditions/2d-bustup/neutral.png +0 -0
- package/vendor/packages/schemas/fixtures/avatar/invalid-default-role/renditions/2d-bustup/rendition.json +18 -0
- package/vendor/packages/schemas/fixtures/avatar/invalid-default-role/renditions/2d-fullbody/happy.png +0 -0
- package/vendor/packages/schemas/fixtures/avatar/invalid-default-role/renditions/2d-fullbody/neutral-half.png +0 -0
- package/vendor/packages/schemas/fixtures/avatar/invalid-default-role/renditions/2d-fullbody/neutral-open.png +0 -0
- package/vendor/packages/schemas/fixtures/avatar/invalid-default-role/renditions/2d-fullbody/neutral.png +0 -0
- package/vendor/packages/schemas/fixtures/avatar/invalid-default-role/renditions/2d-fullbody/rendition.json +18 -0
- package/vendor/packages/schemas/fixtures/avatar/invalid-energy-out-of-range/AVATAR.md +30 -0
- package/vendor/packages/schemas/fixtures/avatar/invalid-energy-out-of-range/avatar.json +22 -0
- package/vendor/packages/schemas/fixtures/avatar/invalid-energy-out-of-range/renditions/2d-bustup/happy.png +0 -0
- package/vendor/packages/schemas/fixtures/avatar/invalid-energy-out-of-range/renditions/2d-bustup/neutral-half.png +0 -0
- package/vendor/packages/schemas/fixtures/avatar/invalid-energy-out-of-range/renditions/2d-bustup/neutral-open.png +0 -0
- package/vendor/packages/schemas/fixtures/avatar/invalid-energy-out-of-range/renditions/2d-bustup/neutral.png +0 -0
- package/vendor/packages/schemas/fixtures/avatar/invalid-energy-out-of-range/renditions/2d-bustup/rendition.json +18 -0
- package/vendor/packages/schemas/fixtures/avatar/invalid-energy-out-of-range/renditions/2d-fullbody/happy.png +0 -0
- package/vendor/packages/schemas/fixtures/avatar/invalid-energy-out-of-range/renditions/2d-fullbody/neutral-half.png +0 -0
- package/vendor/packages/schemas/fixtures/avatar/invalid-energy-out-of-range/renditions/2d-fullbody/neutral-open.png +0 -0
- package/vendor/packages/schemas/fixtures/avatar/invalid-energy-out-of-range/renditions/2d-fullbody/neutral.png +0 -0
- package/vendor/packages/schemas/fixtures/avatar/invalid-energy-out-of-range/renditions/2d-fullbody/rendition.json +18 -0
- package/vendor/packages/schemas/fixtures/avatar/invalid-missing-asset/AVATAR.md +30 -0
- package/vendor/packages/schemas/fixtures/avatar/invalid-missing-asset/avatar.json +22 -0
- package/vendor/packages/schemas/fixtures/avatar/invalid-missing-asset/renditions/2d-bustup/neutral-half.png +0 -0
- package/vendor/packages/schemas/fixtures/avatar/invalid-missing-asset/renditions/2d-bustup/neutral-open.png +0 -0
- package/vendor/packages/schemas/fixtures/avatar/invalid-missing-asset/renditions/2d-bustup/neutral.png +0 -0
- package/vendor/packages/schemas/fixtures/avatar/invalid-missing-asset/renditions/2d-bustup/rendition.json +18 -0
- package/vendor/packages/schemas/fixtures/avatar/invalid-missing-asset/renditions/2d-fullbody/happy.png +0 -0
- package/vendor/packages/schemas/fixtures/avatar/invalid-missing-asset/renditions/2d-fullbody/neutral-half.png +0 -0
- package/vendor/packages/schemas/fixtures/avatar/invalid-missing-asset/renditions/2d-fullbody/neutral-open.png +0 -0
- package/vendor/packages/schemas/fixtures/avatar/invalid-missing-asset/renditions/2d-fullbody/neutral.png +0 -0
- package/vendor/packages/schemas/fixtures/avatar/invalid-missing-asset/renditions/2d-fullbody/rendition.json +18 -0
- package/vendor/packages/schemas/fixtures/avatar/invalid-missing-rights/AVATAR.md +30 -0
- package/vendor/packages/schemas/fixtures/avatar/invalid-missing-rights/avatar.json +21 -0
- package/vendor/packages/schemas/fixtures/avatar/invalid-missing-rights/renditions/2d-bustup/happy.png +0 -0
- package/vendor/packages/schemas/fixtures/avatar/invalid-missing-rights/renditions/2d-bustup/neutral-half.png +0 -0
- package/vendor/packages/schemas/fixtures/avatar/invalid-missing-rights/renditions/2d-bustup/neutral-open.png +0 -0
- package/vendor/packages/schemas/fixtures/avatar/invalid-missing-rights/renditions/2d-bustup/neutral.png +0 -0
- package/vendor/packages/schemas/fixtures/avatar/invalid-missing-rights/renditions/2d-bustup/rendition.json +18 -0
- package/vendor/packages/schemas/fixtures/avatar/invalid-missing-rights/renditions/2d-fullbody/happy.png +0 -0
- package/vendor/packages/schemas/fixtures/avatar/invalid-missing-rights/renditions/2d-fullbody/neutral-half.png +0 -0
- package/vendor/packages/schemas/fixtures/avatar/invalid-missing-rights/renditions/2d-fullbody/neutral-open.png +0 -0
- package/vendor/packages/schemas/fixtures/avatar/invalid-missing-rights/renditions/2d-fullbody/neutral.png +0 -0
- package/vendor/packages/schemas/fixtures/avatar/invalid-missing-rights/renditions/2d-fullbody/rendition.json +18 -0
- package/vendor/packages/schemas/fixtures/avatar/invalid-no-avatar-json/AVATAR.md +30 -0
- package/vendor/packages/schemas/fixtures/avatar/invalid-person-in-catalog/catalog/avatars/impostor/AVATAR.md +30 -0
- package/vendor/packages/schemas/fixtures/avatar/invalid-person-in-catalog/catalog/avatars/impostor/avatar.json +22 -0
- package/vendor/packages/schemas/fixtures/avatar/invalid-person-in-catalog/catalog/avatars/impostor/renditions/2d-bustup/happy.png +0 -0
- package/vendor/packages/schemas/fixtures/avatar/invalid-person-in-catalog/catalog/avatars/impostor/renditions/2d-bustup/neutral-half.png +0 -0
- package/vendor/packages/schemas/fixtures/avatar/invalid-person-in-catalog/catalog/avatars/impostor/renditions/2d-bustup/neutral-open.png +0 -0
- package/vendor/packages/schemas/fixtures/avatar/invalid-person-in-catalog/catalog/avatars/impostor/renditions/2d-bustup/neutral.png +0 -0
- package/vendor/packages/schemas/fixtures/avatar/invalid-person-in-catalog/catalog/avatars/impostor/renditions/2d-bustup/rendition.json +18 -0
- package/vendor/packages/schemas/fixtures/avatar/invalid-person-in-catalog/catalog/avatars/impostor/renditions/2d-fullbody/happy.png +0 -0
- package/vendor/packages/schemas/fixtures/avatar/invalid-person-in-catalog/catalog/avatars/impostor/renditions/2d-fullbody/neutral-half.png +0 -0
- package/vendor/packages/schemas/fixtures/avatar/invalid-person-in-catalog/catalog/avatars/impostor/renditions/2d-fullbody/neutral-open.png +0 -0
- package/vendor/packages/schemas/fixtures/avatar/invalid-person-in-catalog/catalog/avatars/impostor/renditions/2d-fullbody/neutral.png +0 -0
- package/vendor/packages/schemas/fixtures/avatar/invalid-person-in-catalog/catalog/avatars/impostor/renditions/2d-fullbody/rendition.json +18 -0
- package/vendor/packages/schemas/fixtures/avatar/invalid-person-sellable/AVATAR.md +30 -0
- package/vendor/packages/schemas/fixtures/avatar/invalid-person-sellable/avatar.json +22 -0
- package/vendor/packages/schemas/fixtures/avatar/invalid-person-sellable/renditions/2d-bustup/happy.png +0 -0
- package/vendor/packages/schemas/fixtures/avatar/invalid-person-sellable/renditions/2d-bustup/neutral-half.png +0 -0
- package/vendor/packages/schemas/fixtures/avatar/invalid-person-sellable/renditions/2d-bustup/neutral-open.png +0 -0
- package/vendor/packages/schemas/fixtures/avatar/invalid-person-sellable/renditions/2d-bustup/neutral.png +0 -0
- package/vendor/packages/schemas/fixtures/avatar/invalid-person-sellable/renditions/2d-bustup/rendition.json +18 -0
- package/vendor/packages/schemas/fixtures/avatar/invalid-person-sellable/renditions/2d-fullbody/happy.png +0 -0
- package/vendor/packages/schemas/fixtures/avatar/invalid-person-sellable/renditions/2d-fullbody/neutral-half.png +0 -0
- package/vendor/packages/schemas/fixtures/avatar/invalid-person-sellable/renditions/2d-fullbody/neutral-open.png +0 -0
- package/vendor/packages/schemas/fixtures/avatar/invalid-person-sellable/renditions/2d-fullbody/neutral.png +0 -0
- package/vendor/packages/schemas/fixtures/avatar/invalid-person-sellable/renditions/2d-fullbody/rendition.json +18 -0
- package/vendor/packages/schemas/fixtures/avatar/unsupported-version/AVATAR.md +30 -0
- package/vendor/packages/schemas/fixtures/avatar/unsupported-version/avatar.json +22 -0
- package/vendor/packages/schemas/fixtures/avatar/unsupported-version/renditions/2d-bustup/happy.png +0 -0
- package/vendor/packages/schemas/fixtures/avatar/unsupported-version/renditions/2d-bustup/neutral-half.png +0 -0
- package/vendor/packages/schemas/fixtures/avatar/unsupported-version/renditions/2d-bustup/neutral-open.png +0 -0
- package/vendor/packages/schemas/fixtures/avatar/unsupported-version/renditions/2d-bustup/neutral.png +0 -0
- package/vendor/packages/schemas/fixtures/avatar/unsupported-version/renditions/2d-bustup/rendition.json +18 -0
- package/vendor/packages/schemas/fixtures/avatar/unsupported-version/renditions/2d-fullbody/happy.png +0 -0
- package/vendor/packages/schemas/fixtures/avatar/unsupported-version/renditions/2d-fullbody/neutral-half.png +0 -0
- package/vendor/packages/schemas/fixtures/avatar/unsupported-version/renditions/2d-fullbody/neutral-open.png +0 -0
- package/vendor/packages/schemas/fixtures/avatar/unsupported-version/renditions/2d-fullbody/neutral.png +0 -0
- package/vendor/packages/schemas/fixtures/avatar/unsupported-version/renditions/2d-fullbody/rendition.json +18 -0
- package/vendor/packages/schemas/fixtures/avatar/valid/AVATAR.md +30 -0
- package/vendor/packages/schemas/fixtures/avatar/valid/avatar.json +22 -0
- package/vendor/packages/schemas/fixtures/avatar/valid/renditions/2d-bustup/happy.png +0 -0
- package/vendor/packages/schemas/fixtures/avatar/valid/renditions/2d-bustup/neutral-half.png +0 -0
- package/vendor/packages/schemas/fixtures/avatar/valid/renditions/2d-bustup/neutral-open.png +0 -0
- package/vendor/packages/schemas/fixtures/avatar/valid/renditions/2d-bustup/neutral.png +0 -0
- package/vendor/packages/schemas/fixtures/avatar/valid/renditions/2d-bustup/rendition.json +18 -0
- package/vendor/packages/schemas/fixtures/avatar/valid/renditions/2d-fullbody/happy.png +0 -0
- package/vendor/packages/schemas/fixtures/avatar/valid/renditions/2d-fullbody/neutral-half.png +0 -0
- package/vendor/packages/schemas/fixtures/avatar/valid/renditions/2d-fullbody/neutral-open.png +0 -0
- package/vendor/packages/schemas/fixtures/avatar/valid/renditions/2d-fullbody/neutral.png +0 -0
- package/vendor/packages/schemas/fixtures/avatar/valid/renditions/2d-fullbody/rendition.json +18 -0
- package/vendor/packages/schemas/fixtures/avatar/valid-unknown-fields/AVATAR.md +30 -0
- package/vendor/packages/schemas/fixtures/avatar/valid-unknown-fields/avatar.json +23 -0
- package/vendor/packages/schemas/fixtures/avatar/valid-unknown-fields/renditions/2d-bustup/happy.png +0 -0
- package/vendor/packages/schemas/fixtures/avatar/valid-unknown-fields/renditions/2d-bustup/neutral-half.png +0 -0
- package/vendor/packages/schemas/fixtures/avatar/valid-unknown-fields/renditions/2d-bustup/neutral-open.png +0 -0
- package/vendor/packages/schemas/fixtures/avatar/valid-unknown-fields/renditions/2d-bustup/neutral.png +0 -0
- package/vendor/packages/schemas/fixtures/avatar/valid-unknown-fields/renditions/2d-bustup/rendition.json +18 -0
- package/vendor/packages/schemas/fixtures/avatar/valid-unknown-fields/renditions/2d-fullbody/happy.png +0 -0
- package/vendor/packages/schemas/fixtures/avatar/valid-unknown-fields/renditions/2d-fullbody/neutral-half.png +0 -0
- package/vendor/packages/schemas/fixtures/avatar/valid-unknown-fields/renditions/2d-fullbody/neutral-open.png +0 -0
- package/vendor/packages/schemas/fixtures/avatar/valid-unknown-fields/renditions/2d-fullbody/neutral.png +0 -0
- package/vendor/packages/schemas/fixtures/avatar/valid-unknown-fields/renditions/2d-fullbody/rendition.json +18 -0
- package/vendor/packages/schemas/fixtures/avatar/valid-voice-only/AVATAR.md +28 -0
- package/vendor/packages/schemas/fixtures/avatar/valid-voice-only/avatar.json +19 -0
- package/vendor/packages/schemas/fixtures/intake/invalid-duplicate-task/intake.json +8 -0
- package/vendor/packages/schemas/fixtures/intake/invalid-missing-submitted-at/intake.json +8 -0
- package/vendor/packages/schemas/fixtures/intake/invalid-target-exclusive/intake.json +8 -0
- package/vendor/packages/schemas/fixtures/intake/invalid-unknown-task/intake.json +8 -0
- package/vendor/packages/schemas/fixtures/intake/valid-draft/intake.json +8 -0
- package/vendor/packages/schemas/fixtures/intake/valid-submitted/intake.json +8 -0
- package/vendor/packages/schemas/fixtures/plan/invalid-bad-confidence-enum/plan.json +15 -0
- package/vendor/packages/schemas/fixtures/plan/invalid-constraint-bad-applies-to/plan.json +18 -0
- package/vendor/packages/schemas/fixtures/plan/invalid-dangling-media-path/plan.json +15 -0
- package/vendor/packages/schemas/fixtures/plan/invalid-duplicate-slot-id/plan.json +25 -0
- package/vendor/packages/schemas/fixtures/plan/invalid-missing-required-field/plan.json +14 -0
- package/vendor/packages/schemas/fixtures/plan/unsupported-version/plan.json +4 -0
- package/vendor/packages/schemas/fixtures/plan/valid/plan.json +40 -0
- package/vendor/packages/schemas/fixtures/plan/valid/scaffold/beat-01.png +1 -0
- package/vendor/packages/schemas/fixtures/plan/valid/scaffold/beat-01.wav +1 -0
- package/vendor/packages/schemas/fixtures/plan/valid/scaffold/broll.mp4 +1 -0
- package/vendor/packages/schemas/fixtures/plan/warns-confidence-gap/plan.json +28 -0
- package/vendor/packages/schemas/fixtures/plan-comments/invalid-bad-pass/plan-comments.json +6 -0
- package/vendor/packages/schemas/fixtures/plan-comments/invalid-bad-target-id-for-index-kind/plan-comments.json +13 -0
- package/vendor/packages/schemas/fixtures/plan-comments/invalid-bad-target-kind/plan-comments.json +13 -0
- package/vendor/packages/schemas/fixtures/plan-comments/invalid-comments-not-array/plan-comments.json +6 -0
- package/vendor/packages/schemas/fixtures/plan-comments/invalid-missing-comment-field/plan-comments.json +12 -0
- package/vendor/packages/schemas/fixtures/plan-comments/invalid-missing-version/plan-comments.json +5 -0
- package/vendor/packages/schemas/fixtures/plan-comments/unsupported-version/plan-comments.json +6 -0
- package/vendor/packages/schemas/fixtures/plan-comments/valid/plan-comments.json +19 -0
- package/vendor/packages/schemas/fixtures/plan-comments/valid-unknown-fields/plan-comments.json +15 -0
- package/vendor/packages/schemas/fixtures/recipe/invalid-bad-aspect/recipe.json +13 -0
- package/vendor/packages/schemas/fixtures/recipe/invalid-bad-confirmed-by/recipe.json +13 -0
- package/vendor/packages/schemas/fixtures/recipe/invalid-bad-name-casing/recipe.json +13 -0
- package/vendor/packages/schemas/fixtures/recipe/invalid-bad-workflow/recipe.json +13 -0
- package/vendor/packages/schemas/fixtures/recipe/invalid-duplicate-overlay-kind/recipe.json +13 -0
- package/vendor/packages/schemas/fixtures/recipe/invalid-empty-confirmed/recipe.json +9 -0
- package/vendor/packages/schemas/fixtures/recipe/invalid-empty-narration/recipe.json +13 -0
- package/vendor/packages/schemas/fixtures/recipe/invalid-missing-version/recipe.json +12 -0
- package/vendor/packages/schemas/fixtures/recipe/invalid-provenance-mismatch/recipe.json +15 -0
- package/vendor/packages/schemas/fixtures/recipe/invalid-source-project-path/recipe.json +13 -0
- package/vendor/packages/schemas/fixtures/recipe/unsupported-version/recipe.json +13 -0
- package/vendor/packages/schemas/fixtures/recipe/valid/recipe.json +15 -0
- package/vendor/packages/schemas/fixtures/recipe/valid-unknown-fields/recipe.json +16 -0
- package/vendor/packages/schemas/fixtures/review/invalid-malformed-canvas-target/review.json +6 -0
- package/vendor/packages/schemas/fixtures/review/invalid-malformed-doc-target/review.json +6 -0
- package/vendor/packages/schemas/fixtures/review/invalid-malformed-image-target/review.json +6 -0
- package/vendor/packages/schemas/fixtures/review/invalid-strokes-bad-space/review.json +6 -0
- package/vendor/packages/schemas/fixtures/review/invalid-strokes-canvas-rect-with-frame/review.json +6 -0
- package/vendor/packages/schemas/fixtures/review/invalid-strokes-image-rect-with-frame/review.json +6 -0
- package/vendor/packages/schemas/fixtures/review/invalid-video-null-sourcet/review.json +6 -0
- package/vendor/packages/schemas/fixtures/review/valid/review.json +8 -0
- package/vendor/packages/schemas/fixtures/review/valid-canvas-target/review.json +7 -0
- package/vendor/packages/schemas/fixtures/review/valid-input-session/review.json +6 -0
- package/vendor/packages/schemas/fixtures/review/valid-strokes/review.json +8 -0
- package/vendor/packages/schemas/intake.schema.json +117 -0
- package/vendor/packages/schemas/interpretation.schema.json +419 -0
- package/vendor/packages/schemas/package.json +18 -0
- package/vendor/packages/schemas/plan-comments.schema.json +52 -0
- package/vendor/packages/schemas/plan.schema.json +129 -0
- package/vendor/packages/schemas/recipe.schema.json +106 -0
- package/vendor/packages/schemas/research-plan.schema.json +230 -0
- package/vendor/packages/schemas/review.schema.json +227 -0
- package/vendor/packages/schemas/test/fixtures/asset/invalid-matched-by/audio/whoosh-transition/meta.json +31 -0
- package/vendor/packages/schemas/test/fixtures/asset/valid-catalog/audio/whoosh-transition/meta.json +31 -0
- package/vendor/packages/schemas/test/fixtures/asset/valid-library/telop/lower-third-clean/fragment.html +139 -0
- package/vendor/packages/schemas/test/fixtures/asset/valid-library/telop/lower-third-clean/meta.json +32 -0
- package/vendor/packages/schemas/test/fixtures/asset/valid-library/telop/lower-third-clean/preview.png +0 -0
- package/vendor/packages/schemas/test/fixtures/interpretation/invalid-analyses-missing-ref/interpretation.json +131 -0
- package/vendor/packages/schemas/test/fixtures/interpretation/invalid-analyses-ref-mismatch/interpretation.json +132 -0
- package/vendor/packages/schemas/test/fixtures/interpretation/invalid-arc-empty-refs/interpretation.json +126 -0
- package/vendor/packages/schemas/test/fixtures/interpretation/invalid-context-missing-interview/interpretation.json +126 -0
- package/vendor/packages/schemas/test/fixtures/interpretation/invalid-context-null-intake/interpretation.json +133 -0
- package/vendor/packages/schemas/test/fixtures/interpretation/invalid-dangling-arc-ref/interpretation.json +132 -0
- package/vendor/packages/schemas/test/fixtures/interpretation/invalid-duplicate-asset-ref/interpretation.json +132 -0
- package/vendor/packages/schemas/test/fixtures/interpretation/invalid-flag-bad-type/interpretation.json +132 -0
- package/vendor/packages/schemas/test/fixtures/interpretation/invalid-flag-missing-evidence/interpretation.json +131 -0
- package/vendor/packages/schemas/test/fixtures/interpretation/invalid-missing-required-field/interpretation.json +131 -0
- package/vendor/packages/schemas/test/fixtures/interpretation/invalid-open-question-answer-present-when-open/interpretation.json +133 -0
- package/vendor/packages/schemas/test/fixtures/interpretation/invalid-open-question-answered-without-answer/interpretation.json +131 -0
- package/vendor/packages/schemas/test/fixtures/interpretation/invalid-relations-dangling-target/interpretation.json +132 -0
- package/vendor/packages/schemas/test/fixtures/interpretation/invalid-relations-self-reference/interpretation.json +132 -0
- package/vendor/packages/schemas/test/fixtures/interpretation/invalid-section-end-before-start/interpretation.json +132 -0
- package/vendor/packages/schemas/test/fixtures/interpretation/invalid-section-mismatched-start-end/interpretation.json +131 -0
- package/vendor/packages/schemas/test/fixtures/interpretation/invalid-unknown-root-field/interpretation.json +133 -0
- package/vendor/packages/schemas/test/fixtures/interpretation/unsupported-version/interpretation.json +132 -0
- package/vendor/packages/schemas/test/fixtures/interpretation/valid/interpretation.json +132 -0
- package/vendor/packages/schemas/test/fixtures/research-plan/invalid-bad-category-enum/research-plan.json +128 -0
- package/vendor/packages/schemas/test/fixtures/research-plan/invalid-dangling-chapter-ref/research-plan.json +128 -0
- package/vendor/packages/schemas/test/fixtures/research-plan/invalid-dangling-shot-list-ref/research-plan.json +128 -0
- package/vendor/packages/schemas/test/fixtures/research-plan/invalid-decided-at-mismatch/research-plan.json +128 -0
- package/vendor/packages/schemas/test/fixtures/research-plan/invalid-duplicate-candidate-id/research-plan.json +128 -0
- package/vendor/packages/schemas/test/fixtures/research-plan/invalid-japan-sns-notes-empty/research-plan.json +128 -0
- package/vendor/packages/schemas/test/fixtures/research-plan/invalid-missing-required-field/research-plan.json +127 -0
- package/vendor/packages/schemas/test/fixtures/research-plan/invalid-selected-missing-candidate/research-plan.json +128 -0
- package/vendor/packages/schemas/test/fixtures/research-plan/invalid-structure-confirmed-mismatch/research-plan.json +128 -0
- package/vendor/packages/schemas/test/fixtures/research-plan/unsupported-version/research-plan.json +128 -0
- package/vendor/packages/schemas/test/fixtures/research-plan/valid/research-plan.json +79 -0
- package/vendor/packages/schemas/test/fixtures/research-plan/warns-empty-sources/research-plan.json +120 -0
- package/vendor/packages/schemas/test/validate-asset.test.mjs +38 -0
- package/vendor/packages/schemas/test/validate-avatar.test.mjs +109 -0
- package/vendor/packages/schemas/test/validate-captions.test.mjs +59 -0
- package/vendor/packages/schemas/test/validate-connections.test.mjs +31 -0
- package/vendor/packages/schemas/test/validate-edit.test.mjs +490 -0
- package/vendor/packages/schemas/test/validate-intake.test.mjs +66 -0
- package/vendor/packages/schemas/test/validate-interpretation.test.mjs +167 -0
- package/vendor/packages/schemas/test/validate-plan-comments.test.mjs +70 -0
- package/vendor/packages/schemas/test/validate-plan.test.mjs +67 -0
- package/vendor/packages/schemas/test/validate-recipe.test.mjs +107 -0
- package/vendor/packages/schemas/test/validate-research-plan.test.mjs +98 -0
- package/vendor/packages/schemas/test/validate-review.test.mjs +102 -0
- package/vendor/skills/.gitkeep +0 -0
- package/vendor/skills/address-review/SKILL.md +84 -0
- package/vendor/skills/address-review/bin/core/review-store.mjs +210 -0
- package/vendor/skills/address-review/bin/list.mjs +198 -0
- package/vendor/skills/address-review/bin/respond.mjs +89 -0
- package/vendor/skills/address-review/dev-fixtures/fixture-project/captions.json +22 -0
- package/vendor/skills/address-review/dev-fixtures/fixture-project/edit.json +12 -0
- package/vendor/skills/address-review/dev-fixtures/fixture-project/review.json +100 -0
- package/vendor/skills/address-review/test/review-store.test.mjs +201 -0
- package/vendor/skills/analyze-footage/SKILL.md +35 -0
- package/vendor/skills/analyze-footage/analysis-json.md +185 -0
- package/vendor/skills/analyze-footage/bin/person-matte/person-matte-helper.swift +343 -0
- package/vendor/skills/analyze-footage/bin/person-matte/person-matte.mjs +415 -0
- package/vendor/skills/analyze-footage/bin/speechanalyzer-helper.swift +138 -0
- package/vendor/skills/analyze-footage/bin/transcribe-cloud.mjs +486 -0
- package/vendor/skills/analyze-footage/bin/transcribe-sa.mjs +189 -0
- package/vendor/skills/analyze-footage/events-and-hooks.md +93 -0
- package/vendor/skills/analyze-footage/keyframes-and-review.md +130 -0
- package/vendor/skills/analyze-footage/media-and-transcript.md +219 -0
- package/vendor/skills/analyze-footage/person-matte.md +121 -0
- package/vendor/skills/analyze-footage/references/akari-data-contract.md +18 -0
- package/vendor/skills/analyze-footage/references/asset.meta.example.json +23 -0
- package/vendor/skills/analyze-footage/test/fixtures/scribe-punctuation-inflation.json +17 -0
- package/vendor/skills/analyze-footage/test/normalize-scribe.test.mjs +76 -0
- package/vendor/skills/analyze-footage/workflow.md +95 -0
- package/vendor/skills/analyze-project/SKILL.md +58 -0
- package/vendor/skills/analyze-project/collect.md +51 -0
- package/vendor/skills/analyze-project/decision-record.md +55 -0
- package/vendor/skills/analyze-project/interpretation.md +128 -0
- package/vendor/skills/analyze-project/interview.md +66 -0
- package/vendor/skills/analyze-project/references/interpretation-shape.md +42 -0
- package/vendor/skills/analyze-project/references/open-questions-examples.md +35 -0
- package/vendor/skills/analyze-project/validate-and-render.md +66 -0
- package/vendor/skills/bake-3d/SKILL.md +78 -0
- package/vendor/skills/compile-review-session/SKILL.md +78 -0
- package/vendor/skills/compile-review-session/bin/compile-review-session.mjs +799 -0
- package/vendor/skills/compile-review-session/bin/core/canvas-compiler.mjs +105 -0
- package/vendor/skills/compile-review-session/bin/core/compiler.mjs +221 -0
- package/vendor/skills/compile-review-session/bin/core/review-store.mjs +74 -0
- package/vendor/skills/compile-review-session/bin/core/time-mapping.mjs +370 -0
- package/vendor/skills/compile-review-session/bin/core/transcription.mjs +721 -0
- package/vendor/skills/compile-review-session/compilation-rules.md +98 -0
- package/vendor/skills/compile-review-session/dev-fixtures/README.md +24 -0
- package/vendor/skills/compile-review-session/dev-fixtures/fixture-project/review/sessions/s-0001/audio.wav +0 -0
- package/vendor/skills/compile-review-session/dev-fixtures/fixture-project/review/sessions/s-0001/edit.snapshot.json +12 -0
- package/vendor/skills/compile-review-session/dev-fixtures/fixture-project/review/sessions/s-0001/events.jsonl +2 -0
- package/vendor/skills/compile-review-session/dev-fixtures/fixture-project/review/sessions/s-0001/session.json +11 -0
- package/vendor/skills/compile-review-session/dev-fixtures/fixture-project/review/sessions/s-0002/audio.wav +0 -0
- package/vendor/skills/compile-review-session/dev-fixtures/fixture-project/review/sessions/s-0002/edit.snapshot.json +12 -0
- package/vendor/skills/compile-review-session/dev-fixtures/fixture-project/review/sessions/s-0002/events.jsonl +5 -0
- package/vendor/skills/compile-review-session/dev-fixtures/fixture-project/review/sessions/s-0002/session.json +11 -0
- package/vendor/skills/compile-review-session/dev-fixtures/fixture-project/review/sessions/s-0003/audio.wav +0 -0
- package/vendor/skills/compile-review-session/dev-fixtures/fixture-project/review/sessions/s-0003/edit.snapshot.json +12 -0
- package/vendor/skills/compile-review-session/dev-fixtures/fixture-project/review/sessions/s-0003/events.jsonl +19 -0
- package/vendor/skills/compile-review-session/dev-fixtures/fixture-project/review/sessions/s-0003/session.json +11 -0
- package/vendor/skills/compile-review-session/dev-fixtures/fixture-project/review/sessions/s-0004/audio.wav +0 -0
- package/vendor/skills/compile-review-session/dev-fixtures/fixture-project/review/sessions/s-0004/edit.snapshot.json +12 -0
- package/vendor/skills/compile-review-session/dev-fixtures/fixture-project/review/sessions/s-0004/events.jsonl +2 -0
- package/vendor/skills/compile-review-session/dev-fixtures/fixture-project/review/sessions/s-0004/session.json +11 -0
- package/vendor/skills/compile-review-session/dev-fixtures/fixture-project/review/sessions/s-0005/session.json +1 -0
- package/vendor/skills/compile-review-session/dev-fixtures/fixture-project/review/sessions/s-0006/audio.wav +0 -0
- package/vendor/skills/compile-review-session/dev-fixtures/fixture-project/review/sessions/s-0006/events.jsonl +2 -0
- package/vendor/skills/compile-review-session/dev-fixtures/fixture-project/review/sessions/s-0006/session.json +11 -0
- package/vendor/skills/compile-review-session/dev-fixtures/fixture-project/review/sessions/s-0007/audio.wav +0 -0
- package/vendor/skills/compile-review-session/dev-fixtures/fixture-project/review/sessions/s-0007/edit.snapshot.json +13 -0
- package/vendor/skills/compile-review-session/dev-fixtures/fixture-project/review/sessions/s-0007/events.jsonl +9 -0
- package/vendor/skills/compile-review-session/dev-fixtures/fixture-project/review/sessions/s-0007/session.json +11 -0
- package/vendor/skills/compile-review-session/dev-fixtures/fixture-project/review/sessions/s-0008/audio.wav +0 -0
- package/vendor/skills/compile-review-session/dev-fixtures/fixture-project/review/sessions/s-0008/edit.snapshot.json +12 -0
- package/vendor/skills/compile-review-session/dev-fixtures/fixture-project/review/sessions/s-0008/events.jsonl +2 -0
- package/vendor/skills/compile-review-session/dev-fixtures/fixture-project/review/sessions/s-0008/session.json +11 -0
- package/vendor/skills/compile-review-session/dev-fixtures/fixture-project/review/sessions/s-0008/transcript.json +9 -0
- package/vendor/skills/compile-review-session/dev-fixtures/fixture-project/review.json +7 -0
- package/vendor/skills/compile-review-session/test/canvas-compiler.test.mjs +283 -0
- package/vendor/skills/compile-review-session/test/compiler.test.mjs +458 -0
- package/vendor/skills/create-project/SKILL.md +46 -0
- package/vendor/skills/create-project/bin/create-project.mjs +88 -0
- package/vendor/skills/edit-lint/SKILL.md +73 -0
- package/vendor/skills/edit-plan/SKILL.md +64 -0
- package/vendor/skills/edit-plan/approvals-and-generation.md +106 -0
- package/vendor/skills/edit-plan/avatar-resolution.md +241 -0
- package/vendor/skills/edit-plan/beat-sync.md +545 -0
- package/vendor/skills/edit-plan/beats.md +197 -0
- package/vendor/skills/edit-plan/emphasis-detection.md +366 -0
- package/vendor/skills/edit-plan/execution.md +157 -0
- package/vendor/skills/edit-plan/expression-selection.md +290 -0
- package/vendor/skills/edit-plan/plan-json.md +52 -0
- package/vendor/skills/edit-plan/recipe.md +74 -0
- package/vendor/skills/edit-plan/references/asset.decisions.example.json +12 -0
- package/vendor/skills/edit-plan/references/event.example.json +7 -0
- package/vendor/skills/edit-plan/report-guide.md +192 -0
- package/vendor/skills/edit-plan/workflow.md +108 -0
- package/vendor/skills/generate-narration/SKILL.md +40 -0
- package/vendor/skills/generate-narration/assets/reading-script-v1.md +18 -0
- package/vendor/skills/generate-narration/avatar-voice.md +54 -0
- package/vendor/skills/generate-narration/bin/generate-narration.mjs +572 -0
- package/vendor/skills/generate-narration/engines.md +78 -0
- package/vendor/skills/generate-narration/reading-text.md +36 -0
- package/vendor/skills/generate-narration/voice-profile-setup.md +77 -0
- package/vendor/skills/harvest-asset/SKILL.md +132 -0
- package/vendor/skills/manage-connections/SKILL.md +75 -0
- package/vendor/skills/manage-connections/bin/doctor.mjs +341 -0
- package/vendor/skills/overlay-authoring/3d.md +143 -0
- package/vendor/skills/overlay-authoring/SKILL.md +30 -0
- package/vendor/skills/overlay-authoring/motion.md +58 -0
- package/vendor/skills/overlay-authoring/table.md +41 -0
- package/vendor/skills/overlay-authoring/telop.md +69 -0
- package/vendor/skills/overlay-authoring/text-behind-person.md +224 -0
- package/vendor/skills/overlay-authoring/thumbnail.md +126 -0
- package/vendor/skills/render-cut/SKILL.md +66 -0
- package/vendor/skills/research-plan/SKILL.md +75 -0
- package/vendor/skills/research-plan/competitor.md +50 -0
- package/vendor/skills/research-plan/ideate.md +56 -0
- package/vendor/skills/research-plan/shotlist.md +46 -0
- package/vendor/skills/research-plan/storyboard.md +48 -0
- package/vendor/skills/research-plan/trends.md +33 -0
- package/vendor/skills/setup-audio-library/SKILL.md +93 -0
- package/vendor/skills/setup-audio-library/candidate-list.md +72 -0
- package/vendor/skills/setup-audio-library/drop-folder.md +72 -0
- package/vendor/skills/setup-audio-library/gallery.md +43 -0
- package/vendor/skills/setup-library/SKILL.md +33 -0
- package/vendor/skills/setup-library/fetch-and-validate.md +102 -0
- package/vendor/skills/setup-library/starter-pack.md +55 -0
- package/vendor/skills/setup-library/tools-check.md +83 -0
- package/vendor/skills/verify/SKILL.md +137 -0
- package/vendor/templates/project-default/.akari/cache/.gitkeep +0 -0
- package/vendor/templates/project-default/.akari/connections.json +233 -0
- package/vendor/templates/project-default/.akari/diffs/.gitkeep +1 -0
- package/vendor/templates/project-default/.akari/events/.gitkeep +1 -0
- package/vendor/templates/project-default/.akari/reports/.gitkeep +0 -0
- package/vendor/templates/project-default/.akari/sidecars/.gitkeep +1 -0
- package/vendor/templates/project-default/.akari/work/.gitkeep +0 -0
- package/vendor/templates/project-default/.akari/workflow.json +48 -0
- package/vendor/templates/project-default/.claude/settings.json +15 -0
- package/vendor/templates/project-default/.claude/skills/README.md +26 -0
- package/vendor/templates/project-default/AGENTS.md +49 -0
- package/vendor/templates/project-default/CLAUDE.md +35 -0
- package/vendor/templates/project-default/assets/.gitkeep +1 -0
- package/vendor/templates/project-default/exports/.gitkeep +1 -0
- package/vendor/templates/project-default/planning/.gitkeep +1 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Ryoma Nakajima (AkariLabs)
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
# akari-launcher(`akari` コマンド)
|
|
2
|
+
|
|
3
|
+
「UI に依存したくない。Claude Code 単体でも、どんなディレクトリでも始められるように」を
|
|
4
|
+
実現する薄いラッパー CLI。npm パッケージ名は `akari-video`、提供するコマンド名は `akari`
|
|
5
|
+
(npm の `akari` は別プロダクトが取得済みのため。オーナー裁定 2026-07-21 §8-2)。
|
|
6
|
+
|
|
7
|
+
## やること
|
|
8
|
+
|
|
9
|
+
```
|
|
10
|
+
akari
|
|
11
|
+
│
|
|
12
|
+
├─ 1. doctor: カレントディレクトリが AKARI Video プロジェクトかを判定する
|
|
13
|
+
│ (.akari/connections.json の有無)
|
|
14
|
+
│
|
|
15
|
+
├─ 2. 未セットアップなら:
|
|
16
|
+
│ 日本語で案内 → project-scaffold を呼んで雛形を作成
|
|
17
|
+
│ (.akari/intake.json は status: "draft" で生成される)
|
|
18
|
+
│
|
|
19
|
+
├─ 3. 接続状態を確認する:
|
|
20
|
+
│ skills/manage-connections/bin/doctor.mjs を再利用して
|
|
21
|
+
│ .akari/connections.json の doctor ブロックを更新・表示する
|
|
22
|
+
│ (キーの値は一切表示しない)
|
|
23
|
+
│
|
|
24
|
+
└─ 4. 最後に claude を exec する
|
|
25
|
+
(PATH に claude が無ければ、インストール案内を出して終了する)
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
`akari` に渡した引数はそのまま `claude` に転送する(例: `akari --continue` は
|
|
29
|
+
`claude --continue` を起動する)。
|
|
30
|
+
|
|
31
|
+
## 3 入口の対応表
|
|
32
|
+
|
|
33
|
+
AKARI Video は「同じファイル契約(`.akari/` 配下の JSON)に収束する 3 つの入口」を
|
|
34
|
+
持つ(上位契約 §5)。
|
|
35
|
+
|
|
36
|
+
| 入口 | 実体 | 発動方法 |
|
|
37
|
+
|---|---|---|
|
|
38
|
+
| ターミナル | この `akari` ランチャー CLI | シェルで `akari` と打つ(`npm i -g akari-video` または `npx akari-video` 相当。器のみ、npm publish は本タスクのスコープ外) |
|
|
39
|
+
| セッション内 | プラグインの `/akari` スラッシュコマンド、または発話 | Claude Code セッション内で `/akari` と打つ、または普通に話しかけて `create-project` スキルを発動させる |
|
|
40
|
+
| アプリ | 接続ボタン(AKARI Video アプリ) | アプリの「はじめる」画面から接続 → はじめかた選択 |
|
|
41
|
+
|
|
42
|
+
3 つとも最終的に同じもの(`.akari/connections.json` / `.akari/intake.json` /
|
|
43
|
+
`skills/create-project`)を読み書きするため、どの入口から始めても続きは他の入口から
|
|
44
|
+
再開できる。
|
|
45
|
+
|
|
46
|
+
## インストール(現状の到達点)
|
|
47
|
+
|
|
48
|
+
npm publish は本タスクのスコープ外(「器まで」)。現状は次のいずれかで実行できる:
|
|
49
|
+
|
|
50
|
+
```sh
|
|
51
|
+
# モノレポ checkout 内から、bin を直接実行する
|
|
52
|
+
node packages/akari-launcher/bin/akari.mjs
|
|
53
|
+
|
|
54
|
+
# 将来 npm publish された場合の想定コマンド(現状は publish していないため未検証)
|
|
55
|
+
npm i -g akari-video && akari
|
|
56
|
+
npx akari-video
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
`package.json` は `"private": true` のままにしてある(誤って publish されることを防ぐ
|
|
60
|
+
セーフティネット)。実際に npm へ配信する契約が別途 approve されたときに、まず
|
|
61
|
+
この 1 行を外すところから始める。
|
|
62
|
+
|
|
63
|
+
## 既知の制約
|
|
64
|
+
|
|
65
|
+
- **配布パッケージとしての自己完結性は未整備**: `akari` はスキル正本・
|
|
66
|
+
`templates/project-default`・`packages/schemas` を、自分の checkout 位置からの
|
|
67
|
+
相対パスで解決する(`skills/create-project/bin/create-project.mjs` と同じ方式)。
|
|
68
|
+
これはこのリポジトリの checkout 内で実行される前提であり、npm レジストリ経由で
|
|
69
|
+
単体インストールされた場合にこれらのアセットを同梱する build/vendor 手順はまだ
|
|
70
|
+
実装していない(マーケットプレイス配布・審査は上位契約 §7 でスコープ外)。
|
|
71
|
+
- Windows での動作は未検証(`claude.exe` / `claude.cmd` の探索ロジックはあるが
|
|
72
|
+
実機確認していない)。
|
|
73
|
+
|
|
74
|
+
## テスト
|
|
75
|
+
|
|
76
|
+
```sh
|
|
77
|
+
node --test test/*.mjs
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
`doctor` 分岐(セットアップ済み/未セットアップ)・scaffold 呼び出し(実 project-scaffold
|
|
81
|
+
を使った統合テストを含む)・`claude` 不在時の案内、の 3 系統 + 補助的な単体テストを含む。
|
package/bin/akari.mjs
ADDED
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import { run, runUpdateCommand } from '../src/cli.mjs';
|
|
3
|
+
|
|
4
|
+
const argv = process.argv.slice(2);
|
|
5
|
+
// `akari update` は claude へ転送せず、更新の案内だけを行う専用サブコマンド
|
|
6
|
+
// (契約 §4-1)。それ以外の引数はすべて従来どおり claude へ転送する。
|
|
7
|
+
const invoke = argv[0] === 'update' ? runUpdateCommand(argv.slice(1)) : run(argv);
|
|
8
|
+
|
|
9
|
+
const result = await invoke.catch((error) => {
|
|
10
|
+
console.error(error instanceof Error ? error.message : String(error));
|
|
11
|
+
return { exitCode: 1 };
|
|
12
|
+
});
|
|
13
|
+
|
|
14
|
+
process.exitCode = result.exitCode ?? 0;
|
package/package.json
ADDED
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "akari-video",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "AKARI Video launcher CLI — start an AI-edited video project from any directory: scaffold, connection check, then hand over to Claude Code. AKARI Video を Claude Code 単体・どのディレクトリからでも始めるための `akari` ランチャー CLI。接続確認(doctor)→ 未セットアップならプロジェクト雛形を作成 → `claude` を起動する。外部 npm 依存ゼロ(Node.js 組み込みモジュールのみ)。",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"bin": {
|
|
7
|
+
"akari": "bin/akari.mjs"
|
|
8
|
+
},
|
|
9
|
+
"files": [
|
|
10
|
+
"bin",
|
|
11
|
+
"src",
|
|
12
|
+
"vendor",
|
|
13
|
+
"README.md"
|
|
14
|
+
],
|
|
15
|
+
"license": "MIT",
|
|
16
|
+
"repository": {
|
|
17
|
+
"type": "git",
|
|
18
|
+
"url": "git+https://github.com/AkariLabs/akari-video.git",
|
|
19
|
+
"directory": "packages/akari-launcher"
|
|
20
|
+
},
|
|
21
|
+
"homepage": "https://github.com/AkariLabs/akari-video#readme",
|
|
22
|
+
"bugs": {
|
|
23
|
+
"url": "https://github.com/AkariLabs/akari-video/issues"
|
|
24
|
+
},
|
|
25
|
+
"keywords": [
|
|
26
|
+
"video",
|
|
27
|
+
"video-editing",
|
|
28
|
+
"ai",
|
|
29
|
+
"agent",
|
|
30
|
+
"claude",
|
|
31
|
+
"claude-code",
|
|
32
|
+
"cli"
|
|
33
|
+
],
|
|
34
|
+
"engines": {
|
|
35
|
+
"node": ">=20"
|
|
36
|
+
},
|
|
37
|
+
"scripts": {
|
|
38
|
+
"prepack": "node scripts/prepack.mjs",
|
|
39
|
+
"postpack": "node scripts/prepack.mjs clean",
|
|
40
|
+
"test": "node --test test/*.mjs"
|
|
41
|
+
}
|
|
42
|
+
}
|
package/src/cli.mjs
ADDED
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
import { spawnSync } from 'node:child_process';
|
|
2
|
+
import { existsSync } from 'node:fs';
|
|
3
|
+
import { pathToFileURL } from 'node:url';
|
|
4
|
+
|
|
5
|
+
import { resolveLauncherAssets } from './repo-assets.mjs';
|
|
6
|
+
import { detectProjectState } from './project-state.mjs';
|
|
7
|
+
import { findClaudeExecutable } from './path-lookup.mjs';
|
|
8
|
+
import { loadTaskLabels } from './task-labels.mjs';
|
|
9
|
+
import { describeIntake, claudeMissingGuidance, describeUpdateCommand, describeVersionStatus, formatUpdateNotice } from './messages.mjs';
|
|
10
|
+
import {
|
|
11
|
+
checkForUpdateSync,
|
|
12
|
+
readCacheSync,
|
|
13
|
+
readOwnVersion,
|
|
14
|
+
recordDismissalSync,
|
|
15
|
+
resolveCachePath,
|
|
16
|
+
triggerBackgroundRefresh
|
|
17
|
+
} from './update-check.mjs';
|
|
18
|
+
|
|
19
|
+
/**
|
|
20
|
+
* `akari` ランチャーの本体。3 入口契約(ターミナル `akari` / セッション内 `/akari` /
|
|
21
|
+
* アプリ接続ボタン)のうち、ターミナル入口を実装する:
|
|
22
|
+
* doctor(接続チェック)→ 未セットアップなら案内 + scaffold → 最後に `claude` を exec。
|
|
23
|
+
*
|
|
24
|
+
* すべての副作用(scaffold・doctor 実行・claude 起動・claude 探索)は options 経由で
|
|
25
|
+
* 差し替え可能にしてあり、node --test から実プロセスを起動せずに分岐を検証できる。
|
|
26
|
+
*/
|
|
27
|
+
export async function run(args, options = {}) {
|
|
28
|
+
const projectRoot = options.projectRoot ?? process.cwd();
|
|
29
|
+
const log = options.log ?? ((line) => console.log(line));
|
|
30
|
+
const assets = options.assets ?? resolveLauncherAssets();
|
|
31
|
+
const scaffold = options.scaffold ?? defaultScaffold;
|
|
32
|
+
const runDoctor = options.runDoctor ?? defaultRunDoctor;
|
|
33
|
+
const resolveClaude = options.resolveClaude ?? (() => findClaudeExecutable());
|
|
34
|
+
const spawnClaude = options.spawnClaude ?? defaultSpawnClaude;
|
|
35
|
+
const env = options.env ?? process.env;
|
|
36
|
+
const currentVersion = options.currentVersion ?? readOwnVersion();
|
|
37
|
+
|
|
38
|
+
let state = detectProjectState(projectRoot);
|
|
39
|
+
|
|
40
|
+
if (!state.scaffolded) {
|
|
41
|
+
log(`このフォルダーは AKARI Video プロジェクトとしてまだセットアップされていません: ${projectRoot}`);
|
|
42
|
+
if (!assets.templateDir || !assets.scaffoldModulePath) {
|
|
43
|
+
log('プロジェクト雛形が見つからないため、雛形の作成をスキップしました。');
|
|
44
|
+
} else {
|
|
45
|
+
log('プロジェクトの雛形を作成します…');
|
|
46
|
+
try {
|
|
47
|
+
const report = await scaffold(projectRoot, assets);
|
|
48
|
+
log(`プロジェクトを作成しました(コピー ${report.copy.copiedFiles.length} 件 / 補完 ${report.fallback.writtenFiles.length} 件 / git: ${report.git.action})。`);
|
|
49
|
+
} catch (error) {
|
|
50
|
+
// scaffold の失敗で claude 起動まで止めない(「最後に claude を exec」は不変条件)。
|
|
51
|
+
log(`プロジェクトの雛形作成でエラーが発生しました(続行します): ${error instanceof Error ? error.message : String(error)}`);
|
|
52
|
+
}
|
|
53
|
+
state = detectProjectState(projectRoot);
|
|
54
|
+
}
|
|
55
|
+
} else {
|
|
56
|
+
log(`既存の AKARI Video プロジェクトを検出しました: ${projectRoot}`);
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
const taskLabels = loadTaskLabels(assets.schemasSourceDir);
|
|
60
|
+
log(describeIntake(state.intake, taskLabels));
|
|
61
|
+
|
|
62
|
+
if (state.scaffolded && assets.doctorScript) {
|
|
63
|
+
log('接続状態を確認します…');
|
|
64
|
+
try {
|
|
65
|
+
runDoctor(assets.doctorScript, projectRoot);
|
|
66
|
+
} catch (error) {
|
|
67
|
+
log(`接続確認でエラーが発生しました(続行します): ${error instanceof Error ? error.message : String(error)}`);
|
|
68
|
+
}
|
|
69
|
+
log(describeVersionStatus(currentVersion, readCacheSync(resolveCachePath(env))));
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
// 新版通知(契約 §4-1): キャッシュの読み比較のみ・ネットワークには一切触れない
|
|
73
|
+
// (起動をブロックしない)。fetch は detached な子プロセスへ切り離し、
|
|
74
|
+
// 結果は次回セッションで効く。
|
|
75
|
+
const updateNotice = formatUpdateNotice((options.checkUpdate ?? checkForUpdateSync)({ currentVersion, env }));
|
|
76
|
+
if (updateNotice) {
|
|
77
|
+
log(updateNotice);
|
|
78
|
+
}
|
|
79
|
+
(options.refreshUpdate ?? triggerBackgroundRefresh)({ env });
|
|
80
|
+
|
|
81
|
+
log('Claude Code を起動します…');
|
|
82
|
+
const claudePath = resolveClaude();
|
|
83
|
+
if (!claudePath) {
|
|
84
|
+
log(claudeMissingGuidance());
|
|
85
|
+
return { exitCode: 1, scaffolded: state.scaffolded, claudeLaunched: false };
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
const result = spawnClaude(claudePath, args, projectRoot);
|
|
89
|
+
const exitCode = typeof result.status === 'number' ? result.status : (result.error ? 1 : 0);
|
|
90
|
+
return { exitCode, scaffolded: state.scaffolded, claudeLaunched: true };
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
async function defaultScaffold(projectRoot, assets) {
|
|
94
|
+
// scaffold 実装はパッケージ外(モノレポ workspace)と vendor 同梱(npm 配布時)の
|
|
95
|
+
// 両方があり得るため、静的 import ではなく assets で解決したパスを動的 import する。
|
|
96
|
+
const { createProject } = await import(pathToFileURL(assets.scaffoldModulePath).href);
|
|
97
|
+
const scaffoldOptions = assets.skillsSourceDir
|
|
98
|
+
? { skillsSourceDir: assets.skillsSourceDir, schemasSourceDir: assets.schemasSourceDir ?? undefined }
|
|
99
|
+
: {};
|
|
100
|
+
return createProject(projectRoot, assets.templateDir, scaffoldOptions);
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
function defaultRunDoctor(doctorScript, projectRoot) {
|
|
104
|
+
if (!existsSync(doctorScript)) {
|
|
105
|
+
return { status: 0 };
|
|
106
|
+
}
|
|
107
|
+
return spawnSync(process.execPath, [doctorScript, projectRoot], { stdio: 'inherit' });
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
function defaultSpawnClaude(claudePath, args, projectRoot) {
|
|
111
|
+
return spawnSync(claudePath, args, { stdio: 'inherit', cwd: projectRoot });
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
/**
|
|
115
|
+
* `akari update`: 現在版・最新版・リリースノート URL を表示し、更新手順を**案内するだけ**
|
|
116
|
+
* (自動実行はしない — 契約 §4-1)。`--dismiss` を渡すと、キャッシュに載っている最新版の
|
|
117
|
+
* 通知を今後出さないよう記録する。ネットワークには一切触れない
|
|
118
|
+
* (表示に使う情報はすべて既存キャッシュ由来 — 最新情報は `akari` 起動時のバックグラウンド
|
|
119
|
+
* fetch で更新される)。
|
|
120
|
+
*/
|
|
121
|
+
export async function runUpdateCommand(args, options = {}) {
|
|
122
|
+
const log = options.log ?? ((line) => console.log(line));
|
|
123
|
+
const env = options.env ?? process.env;
|
|
124
|
+
const currentVersion = options.currentVersion ?? readOwnVersion();
|
|
125
|
+
const cachePath = resolveCachePath(env);
|
|
126
|
+
const cache = readCacheSync(cachePath);
|
|
127
|
+
const dismissRequested = args.includes('--dismiss');
|
|
128
|
+
|
|
129
|
+
let dismissed = false;
|
|
130
|
+
if (dismissRequested && typeof cache?.feed?.product === 'string') {
|
|
131
|
+
recordDismissalSync({ version: cache.feed.product, env });
|
|
132
|
+
dismissed = true;
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
const finalCache = dismissed ? readCacheSync(cachePath) : cache;
|
|
136
|
+
for (const line of describeUpdateCommand({ currentVersion, cache: finalCache, dismissed })) {
|
|
137
|
+
log(line);
|
|
138
|
+
}
|
|
139
|
+
return { exitCode: 0 };
|
|
140
|
+
}
|
package/src/messages.mjs
ADDED
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
import { compareVersions } from './update-check.mjs';
|
|
2
|
+
|
|
3
|
+
const AUTONOMY_LABELS = {
|
|
4
|
+
'full-auto': 'すべておまかせ',
|
|
5
|
+
checkpoint: '要所で確認(既定)',
|
|
6
|
+
collaborative: '相談しながら'
|
|
7
|
+
};
|
|
8
|
+
|
|
9
|
+
/** channel が prerelease のときだけ付ける版名の注記(CLI・シェルで共通の規則)。 */
|
|
10
|
+
function channelSuffix(channel) {
|
|
11
|
+
return channel === 'prerelease' ? '(プレリリース)' : '';
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* `.akari/intake.json`(進め方フォーム)の状態を、利用者の言葉で 1 段落に要約する。
|
|
16
|
+
*/
|
|
17
|
+
export function describeIntake(intake, taskLabels) {
|
|
18
|
+
if (!intake) {
|
|
19
|
+
return '進め方フォーム(.akari/intake.json)がまだありません。';
|
|
20
|
+
}
|
|
21
|
+
if (intake.status !== 'submitted') {
|
|
22
|
+
return '進め方はまだ未確定です(.akari/intake.json: draft)。intake フォーム、または対話で「やること・尺・おまかせ度」を確定してください。';
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
const tasks = Array.isArray(intake.tasks) ? intake.tasks : [];
|
|
26
|
+
const taskText = tasks.length > 0
|
|
27
|
+
? tasks.map((id) => taskLabels?.[id] ?? id).join('、')
|
|
28
|
+
: '(やること未選択)';
|
|
29
|
+
const autonomyText = AUTONOMY_LABELS[intake.autonomy] ?? intake.autonomy ?? '未設定';
|
|
30
|
+
const target = intake.target ?? {};
|
|
31
|
+
const targetText = target.keep_length
|
|
32
|
+
? '尺は素材のまま'
|
|
33
|
+
: typeof target.duration_s === 'number'
|
|
34
|
+
? `目標尺 ${target.duration_s} 秒`
|
|
35
|
+
: '尺は未指定';
|
|
36
|
+
|
|
37
|
+
return `進め方: ${taskText} / ${targetText} / 進め方は${autonomyText}。この内容で進めます。`;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
export function claudeMissingGuidance() {
|
|
41
|
+
return [
|
|
42
|
+
'claude コマンドが見つかりませんでした。',
|
|
43
|
+
'Claude Code をインストールしてください: https://claude.ai/install.sh',
|
|
44
|
+
'インストール後、このフォルダーで再度 `akari` を実行してください。'
|
|
45
|
+
].join('\n');
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
/**
|
|
49
|
+
* `akari` 起動時、claude 起動直前に出す 1 行通知(契約 §4-1)。
|
|
50
|
+
* `checkForUpdateSync` が返す状態から組み立てる。新版が無ければ null。
|
|
51
|
+
*/
|
|
52
|
+
export function formatUpdateNotice(status) {
|
|
53
|
+
if (!status?.available) {
|
|
54
|
+
return null;
|
|
55
|
+
}
|
|
56
|
+
return `⬆ AKARI Video v${status.latestVersion}${channelSuffix(status.channel)}があります(現在 v${status.currentVersion})→ 詳細: akari update`;
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
/** `akari doctor` 系出力に足す 1 行(現在版 + フィード取得状態)。 */
|
|
60
|
+
export function describeVersionStatus(currentVersion, cache) {
|
|
61
|
+
if (!cache?.feed) {
|
|
62
|
+
return `バージョン: v${currentVersion}(更新フィード: 未取得)`;
|
|
63
|
+
}
|
|
64
|
+
const fetchedAt = typeof cache.fetched_at === 'string' ? cache.fetched_at : '不明';
|
|
65
|
+
return `バージョン: v${currentVersion}(更新フィード: 取得済み・${fetchedAt} 時点)`;
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
/**
|
|
69
|
+
* `akari update` の出力本文(複数行)。フィード未取得・最新・新版ありで案内が変わる。
|
|
70
|
+
* `dismissed` は今回の実行で dismiss 記録を書いたかどうか(表示文言の切り替えのみに使う)。
|
|
71
|
+
*/
|
|
72
|
+
export function describeUpdateCommand({ currentVersion, cache, dismissed }) {
|
|
73
|
+
const lines = [`現在のバージョン: v${currentVersion}`];
|
|
74
|
+
const feed = cache?.feed;
|
|
75
|
+
if (!feed) {
|
|
76
|
+
lines.push('最新情報をまだ取得できていません(オフライン、または初回起動直後の可能性があります)。');
|
|
77
|
+
lines.push('少し待ってから、もう一度 `akari` を実行すると次回チェックされます。');
|
|
78
|
+
return lines;
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
lines.push(`最新バージョン: v${feed.product}${channelSuffix(feed.channel)}`);
|
|
82
|
+
if (feed.notes_url) {
|
|
83
|
+
lines.push(`リリースノート: ${feed.notes_url}`);
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
if (compareVersions(feed.product, currentVersion) <= 0) {
|
|
87
|
+
lines.push('お使いのバージョンは最新です。');
|
|
88
|
+
return lines;
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
const tarballUrl = feed.components?.cli?.tarball?.url;
|
|
92
|
+
lines.push('更新するには、次のコマンドを実行してください(自動実行はしません):');
|
|
93
|
+
lines.push(tarballUrl ? ` npm i -g ${tarballUrl}` : ' npm i -g akari-video@latest');
|
|
94
|
+
lines.push(
|
|
95
|
+
dismissed
|
|
96
|
+
? `この版(v${feed.product})の通知は今後表示しません。`
|
|
97
|
+
: 'この版の通知を今後出さない場合は `akari update --dismiss` を実行してください。'
|
|
98
|
+
);
|
|
99
|
+
return lines;
|
|
100
|
+
}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import { accessSync, constants as fsConstants } from 'node:fs';
|
|
2
|
+
import path from 'node:path';
|
|
3
|
+
|
|
4
|
+
const DEFAULT_WINDOWS_EXTENSIONS = ['.exe', '.cmd', '.bat'];
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Windows の実行可能拡張子一覧を決める。`PATHEXT` があればそれに従い(実 OS の
|
|
8
|
+
* CreateProcess 拡張子解決と同じ規約)、無ければ既定セットへ fallback する。
|
|
9
|
+
* `PATHEXT` は Windows 上では常に `;` 区切り(`path.delimiter` はホスト OS 依存の
|
|
10
|
+
* ため、posix ホストから win32 分岐をテストする際は一致しない)。
|
|
11
|
+
*/
|
|
12
|
+
function resolveWindowsExtensions(pathExt) {
|
|
13
|
+
const parsed = (pathExt ?? '')
|
|
14
|
+
.split(';')
|
|
15
|
+
.map((extension) => extension.trim())
|
|
16
|
+
.filter(Boolean);
|
|
17
|
+
return parsed.length > 0 ? parsed : DEFAULT_WINDOWS_EXTENSIONS;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
/**
|
|
21
|
+
* PATH 上に `claude` 実行ファイルがあるかを探す。純粋関数(`pathEnv` / `platform` /
|
|
22
|
+
* `pathExt` を引数として渡せる)にして、実 PATH やシェル alias に依存せずテストできる
|
|
23
|
+
* ようにする。シェル alias(例: 対話シェルの `alias claude=...`)は子プロセス起動では
|
|
24
|
+
* 解決されないため、ここでは実ファイルの存在と実行権限だけを見る。
|
|
25
|
+
*
|
|
26
|
+
* win32 では拡張子なしの `claude` は候補に含めない: CreateProcess は拡張子で実行方式
|
|
27
|
+
* を判定するため、拡張子なしファイル(npm の POSIX シムなど)は直接 spawn できない。
|
|
28
|
+
*/
|
|
29
|
+
export function findClaudeExecutable(pathEnv = process.env.PATH ?? '', platform = process.platform, pathExt = process.env.PATHEXT) {
|
|
30
|
+
const directories = pathEnv.split(path.delimiter).filter(Boolean);
|
|
31
|
+
const candidateNames = platform === 'win32'
|
|
32
|
+
? resolveWindowsExtensions(pathExt).map((extension) => `claude${extension.toLowerCase()}`)
|
|
33
|
+
: ['claude'];
|
|
34
|
+
|
|
35
|
+
for (const directory of directories) {
|
|
36
|
+
for (const name of candidateNames) {
|
|
37
|
+
const candidate = path.join(directory, name);
|
|
38
|
+
try {
|
|
39
|
+
accessSync(candidate, fsConstants.X_OK);
|
|
40
|
+
return candidate;
|
|
41
|
+
} catch {
|
|
42
|
+
// このディレクトリには無い。次を探す。
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
return null;
|
|
47
|
+
}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { existsSync, readFileSync } from 'node:fs';
|
|
2
|
+
import path from 'node:path';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* カレントプロジェクトが AKARI Video プロジェクトとしてセットアップ済みかを判定する。
|
|
6
|
+
* `.akari/connections.json` の有無を「セットアップ済み」の判定基準にする
|
|
7
|
+
* (`create-project` / `project-scaffold` が必ずこのファイルを雛形から生成するため)。
|
|
8
|
+
*/
|
|
9
|
+
export function detectProjectState(projectRoot) {
|
|
10
|
+
const akariDir = path.join(projectRoot, '.akari');
|
|
11
|
+
const connectionsPath = path.join(akariDir, 'connections.json');
|
|
12
|
+
const intakePath = path.join(akariDir, 'intake.json');
|
|
13
|
+
|
|
14
|
+
const scaffolded = existsSync(connectionsPath);
|
|
15
|
+
let intake = null;
|
|
16
|
+
if (existsSync(intakePath)) {
|
|
17
|
+
try {
|
|
18
|
+
intake = JSON.parse(readFileSync(intakePath, 'utf8'));
|
|
19
|
+
} catch {
|
|
20
|
+
intake = null;
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
return { projectRoot, scaffolded, intake, connectionsPath, intakePath };
|
|
25
|
+
}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import { existsSync } from 'node:fs';
|
|
2
|
+
import path from 'node:path';
|
|
3
|
+
import { fileURLToPath } from 'node:url';
|
|
4
|
+
|
|
5
|
+
// このファイルの場所(packages/akari-launcher/src/)から見て、モノレポの checkout
|
|
6
|
+
// なら 2 つ上がリポジトリルート。`skills/create-project/bin/create-project.mjs` と
|
|
7
|
+
// 同じ「スクリプト自身の位置からの相対解決」方式(cwd には依存しない — cwd は
|
|
8
|
+
// スキャフォールド先のプロジェクトルートであり、リポ checkout の位置とは無関係)。
|
|
9
|
+
const PACKAGE_ROOT = path.resolve(path.dirname(fileURLToPath(import.meta.url)), '..');
|
|
10
|
+
const DEFAULT_REPO_ROOT_CANDIDATE = path.resolve(PACKAGE_ROOT, '..', '..');
|
|
11
|
+
|
|
12
|
+
// npm 配布時は prepack(scripts/prepack.mjs)がモノレポ同梱物を同一レイアウトで
|
|
13
|
+
// vendor/ に焼き込む。checkout に見えない場合はこちらを「リポジトリルート」として使う。
|
|
14
|
+
const DEFAULT_VENDOR_ROOT = path.join(PACKAGE_ROOT, 'vendor');
|
|
15
|
+
|
|
16
|
+
const SKILLS_MARKER = path.join('skills', 'analyze-footage', 'SKILL.md');
|
|
17
|
+
// 雛形マーカーに .gitignore を使わない: npm は tarball 生成時に .gitignore という名前の
|
|
18
|
+
// ファイルを無条件に除外するため、vendor 同梱(npm 配布時)では存在し得ない。
|
|
19
|
+
// 雛形側の .gitignore 実体は project-scaffold の writeFallbackTemplate が補完する。
|
|
20
|
+
const TEMPLATE_MARKER = path.join('templates', 'project-default', 'CLAUDE.md');
|
|
21
|
+
const SCHEMAS_MARKER = path.join('packages', 'schemas', 'analysis.schema.json');
|
|
22
|
+
const DOCTOR_SCRIPT_RELATIVE = path.join('skills', 'manage-connections', 'bin', 'doctor.mjs');
|
|
23
|
+
const SCAFFOLD_MODULE_RELATIVE = path.join('packages', 'project-scaffold', 'src', 'index.mjs');
|
|
24
|
+
|
|
25
|
+
/**
|
|
26
|
+
* 指定ルート配下に同梱されているスキル正本・雛形・schemas・scaffold 実装を探す。
|
|
27
|
+
* 見つからないフィールドは null になり、呼び出し側はそれに応じて機能をスキップする。
|
|
28
|
+
*/
|
|
29
|
+
export function resolveRepoAssets(repoRoot = DEFAULT_REPO_ROOT_CANDIDATE) {
|
|
30
|
+
const hasSkills = existsSync(path.join(repoRoot, SKILLS_MARKER));
|
|
31
|
+
const hasTemplate = existsSync(path.join(repoRoot, TEMPLATE_MARKER));
|
|
32
|
+
const hasSchemas = existsSync(path.join(repoRoot, SCHEMAS_MARKER));
|
|
33
|
+
const doctorScript = path.join(repoRoot, DOCTOR_SCRIPT_RELATIVE);
|
|
34
|
+
const scaffoldModulePath = path.join(repoRoot, SCAFFOLD_MODULE_RELATIVE);
|
|
35
|
+
|
|
36
|
+
return {
|
|
37
|
+
repoRoot,
|
|
38
|
+
skillsSourceDir: hasSkills ? path.join(repoRoot, 'skills') : null,
|
|
39
|
+
templateDir: hasTemplate ? path.join(repoRoot, 'templates', 'project-default') : null,
|
|
40
|
+
schemasSourceDir: hasSchemas ? path.join(repoRoot, 'packages', 'schemas') : null,
|
|
41
|
+
doctorScript: existsSync(doctorScript) ? doctorScript : null,
|
|
42
|
+
scaffoldModulePath: existsSync(scaffoldModulePath) ? scaffoldModulePath : null
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
/**
|
|
47
|
+
* ランチャー実行時の同梱物解決: モノレポ checkout(開発時)→ vendor/(npm 配布時)の
|
|
48
|
+
* 順で探し、最初に何かしら見つかったルートを採用する。テストからは candidateRoot /
|
|
49
|
+
* vendorRoot を注入して両分岐を実ディレクトリ無しで検証できる。
|
|
50
|
+
*/
|
|
51
|
+
export function resolveLauncherAssets({
|
|
52
|
+
candidateRoot = DEFAULT_REPO_ROOT_CANDIDATE,
|
|
53
|
+
vendorRoot = DEFAULT_VENDOR_ROOT
|
|
54
|
+
} = {}) {
|
|
55
|
+
const checkout = resolveRepoAssets(candidateRoot);
|
|
56
|
+
const found = checkout.skillsSourceDir || checkout.templateDir || checkout.schemasSourceDir
|
|
57
|
+
|| checkout.doctorScript || checkout.scaffoldModulePath;
|
|
58
|
+
return found ? checkout : resolveRepoAssets(vendorRoot);
|
|
59
|
+
}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { existsSync, readFileSync } from 'node:fs';
|
|
2
|
+
import path from 'node:path';
|
|
3
|
+
|
|
4
|
+
// packages/schemas/intake.schema.json の x-akari-labels(安定 ID ↔ 日本語ラベル)が
|
|
5
|
+
// 唯一の出典(オーナー裁定 2026-07-21 §8-3)。読めない場合だけ、この最小フォールバックを使う。
|
|
6
|
+
const FALLBACK_LABELS = {
|
|
7
|
+
'transcribe-captions': '文字起こし・テロップ',
|
|
8
|
+
'silence-cut': 'いらない間・NG のカット',
|
|
9
|
+
'bgm-sfx': 'BGM・効果音',
|
|
10
|
+
narration: 'ナレーション(自分の声 / 既製の声)',
|
|
11
|
+
'3d-inserts': '3D・画面はめ込みの演出'
|
|
12
|
+
};
|
|
13
|
+
|
|
14
|
+
export function loadTaskLabels(schemasSourceDir) {
|
|
15
|
+
if (schemasSourceDir) {
|
|
16
|
+
const schemaPath = path.join(schemasSourceDir, 'intake.schema.json');
|
|
17
|
+
if (existsSync(schemaPath)) {
|
|
18
|
+
try {
|
|
19
|
+
const schema = JSON.parse(readFileSync(schemaPath, 'utf8'));
|
|
20
|
+
const labels = schema?.['x-akari-labels'];
|
|
21
|
+
if (labels && typeof labels === 'object' && !Array.isArray(labels)) {
|
|
22
|
+
return labels;
|
|
23
|
+
}
|
|
24
|
+
} catch {
|
|
25
|
+
// 破損している場合はフォールバックへ。
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
return FALLBACK_LABELS;
|
|
30
|
+
}
|