@aswless_854771076/ai_short_studio_cli 0.1.98 → 0.1.100
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/README.md +15 -313
- package/dist/base-command.d.ts +0 -6
- package/dist/base-command.js +1 -39
- package/dist/client/api-client.js +2 -19
- package/dist/commands/auth/login.d.ts +1 -2
- package/dist/commands/auth/login.js +2 -5
- package/dist/commands/auth/logout.d.ts +0 -1
- package/dist/commands/auth/signup.d.ts +0 -1
- package/dist/commands/auth/status.d.ts +0 -1
- package/dist/commands/canvas/apply.d.ts +0 -1
- package/dist/commands/canvas/asset/get.d.ts +0 -1
- package/dist/commands/canvas/asset/list.d.ts +0 -1
- package/dist/commands/canvas/asset/select.d.ts +1 -3
- package/dist/commands/canvas/asset/select.js +3 -22
- package/dist/commands/canvas/asset/upload.d.ts +0 -14
- package/dist/commands/canvas/asset/upload.js +3 -43
- package/dist/commands/canvas/continuity/analyze.d.ts +0 -1
- package/dist/commands/canvas/edge/connect.d.ts +0 -1
- package/dist/commands/canvas/edge/disconnect.d.ts +0 -1
- package/dist/commands/canvas/edge/list.d.ts +0 -1
- package/dist/commands/canvas/edge/list.js +1 -4
- package/dist/commands/canvas/episode/create.d.ts +0 -1
- package/dist/commands/canvas/episode/list.d.ts +0 -1
- package/dist/commands/canvas/folder/copy-cross-project.d.ts +0 -1
- package/dist/commands/canvas/folder/create.d.ts +0 -1
- package/dist/commands/canvas/folder/delete.d.ts +0 -1
- package/dist/commands/canvas/folder/list.d.ts +0 -1
- package/dist/commands/canvas/folder/move.d.ts +0 -1
- package/dist/commands/canvas/folder/rename.d.ts +0 -1
- package/dist/commands/canvas/folder/restore.d.ts +0 -1
- package/dist/commands/canvas/get.d.ts +0 -1
- package/dist/commands/canvas/inspect.d.ts +0 -1
- package/dist/commands/canvas/node/add.d.ts +1 -1
- package/dist/commands/canvas/node/add.js +2 -2
- package/dist/commands/canvas/node/delete.d.ts +0 -1
- package/dist/commands/canvas/node/edit-resource.d.ts +0 -2
- package/dist/commands/canvas/node/edit-resource.js +1 -9
- package/dist/commands/canvas/node/edit-shot.d.ts +0 -1
- package/dist/commands/canvas/node/get.d.ts +0 -1
- package/dist/commands/canvas/node/list.d.ts +0 -5
- package/dist/commands/canvas/node/list.js +2 -43
- package/dist/commands/canvas/node/run.d.ts +0 -15
- package/dist/commands/canvas/node/run.js +6 -142
- package/dist/commands/canvas/node/types.d.ts +0 -1
- package/dist/commands/canvas/node/update-many.d.ts +0 -1
- package/dist/commands/canvas/node/update.d.ts +0 -1
- package/dist/commands/canvas/settings/get.d.ts +0 -1
- package/dist/commands/canvas/settings/set.d.ts +0 -24
- package/dist/commands/canvas/settings/set.js +1 -60
- package/dist/commands/config/get.d.ts +0 -1
- package/dist/commands/config/set.d.ts +0 -2
- package/dist/commands/config/set.js +2 -55
- package/dist/commands/preflight.d.ts +0 -1
- package/dist/commands/preflight.js +1 -9
- package/dist/commands/project/create.d.ts +0 -1
- package/dist/commands/project/delete.d.ts +0 -1
- package/dist/commands/project/get.d.ts +0 -1
- package/dist/commands/project/list.d.ts +0 -1
- package/dist/commands/project/update.d.ts +0 -1
- package/dist/commands/skill/install.d.ts +0 -1
- package/dist/commands/skill/install.js +0 -1
- package/dist/commands/skill/path.d.ts +0 -1
- package/dist/commands/skill/path.js +0 -1
- package/dist/commands/skill/status.d.ts +0 -1
- package/dist/commands/skill/status.js +0 -1
- package/dist/commands/task/cancel.d.ts +0 -1
- package/dist/commands/task/get.d.ts +0 -1
- package/dist/commands/task/wait.d.ts +0 -2
- package/dist/commands/task/wait.js +1 -6
- package/dist/domain/vvicat-api.d.ts +3 -63
- package/dist/domain/vvicat-api.js +9 -74
- package/dist/output/formatter.d.ts +0 -11
- package/dist/output/formatter.js +0 -20
- package/dist/preflight.d.ts +0 -1
- package/dist/preflight.js +1 -14
- package/dist/skill/command-flags.js +4 -7
- package/dist/skill/skill-manager.d.ts +2 -75
- package/dist/skill/skill-manager.js +15 -60
- package/package.json +3 -4
- package/scripts/postinstall.mjs +12 -7
- package/skills/using-vvicat-ai-short-studio-cli/SKILL.md +67 -27
- package/skills/using-vvicat-ai-short-studio-cli/references/commands/canvas.md +4 -3
- package/skills/using-vvicat-ai-short-studio-cli/references/commands/project.md +2 -26
- package/skills/using-vvicat-ai-short-studio-cli/references/commands.md +2 -2
- package/skills/using-vvicat-ai-short-studio-cli/references/editing-delivery.md +1 -1
- package/skills/using-vvicat-ai-short-studio-cli/references/h3-video-delivery.md +1 -1
- package/skills/using-vvicat-ai-short-studio-cli/references/humanizer/humanizer.md +9 -0
- package/skills/using-vvicat-ai-short-studio-cli/references/hypit/SKILL.md +447 -0
- package/skills/using-vvicat-ai-short-studio-cli/references/hypit/creation/brief.md +93 -0
- package/skills/using-vvicat-ai-short-studio-cli/references/hypit/creation/project-files.md +246 -0
- package/skills/using-vvicat-ai-short-studio-cli/references/hypit/creation/reference-video.md +266 -0
- package/skills/using-vvicat-ai-short-studio-cli/references/hypit/creation/script-and-time.md +253 -0
- package/skills/using-vvicat-ai-short-studio-cli/references/hypit/creation/transformations.md +141 -0
- package/skills/using-vvicat-ai-short-studio-cli/references/hypit/environment/distribution.md +176 -0
- package/skills/using-vvicat-ai-short-studio-cli/references/hypit/environment/local-tools.md +411 -0
- package/skills/using-vvicat-ai-short-studio-cli/references/hypit/environment/model-and-provider.md +275 -0
- package/skills/using-vvicat-ai-short-studio-cli/references/hypit/environment/profile.md +286 -0
- package/skills/using-vvicat-ai-short-studio-cli/references/hypit/playbooks/craft/asset-and-shot-preproduction.md +193 -0
- package/skills/using-vvicat-ai-short-studio-cli/references/hypit/playbooks/craft/b-roll.md +94 -0
- package/skills/using-vvicat-ai-short-studio-cli/references/hypit/playbooks/craft/caption-tracking.md +125 -0
- package/skills/using-vvicat-ai-short-studio-cli/references/hypit/playbooks/craft/captions.md +252 -0
- package/skills/using-vvicat-ai-short-studio-cli/references/hypit/playbooks/craft/examples/conversation-images.md +218 -0
- package/skills/using-vvicat-ai-short-studio-cli/references/hypit/playbooks/craft/examples/h3-base-prompt-writing.md +222 -0
- package/skills/using-vvicat-ai-short-studio-cli/references/hypit/playbooks/craft/examples/h3-reference-prompt-writing.md +341 -0
- package/skills/using-vvicat-ai-short-studio-cli/references/hypit/playbooks/craft/examples/image-direction.md +123 -0
- package/skills/using-vvicat-ai-short-studio-cli/references/hypit/playbooks/craft/generated-dependencies.md +38 -0
- package/skills/using-vvicat-ai-short-studio-cli/references/hypit/playbooks/craft/graphic-compositions.md +85 -0
- package/skills/using-vvicat-ai-short-studio-cli/references/hypit/playbooks/craft/h3-prompt-writing.md +54 -0
- package/skills/using-vvicat-ai-short-studio-cli/references/hypit/playbooks/craft/image-direction.md +95 -0
- package/skills/using-vvicat-ai-short-studio-cli/references/hypit/playbooks/craft/motion-graphics.md +68 -0
- package/skills/using-vvicat-ai-short-studio-cli/references/hypit/playbooks/craft/recreation-policy.md +51 -0
- package/skills/using-vvicat-ai-short-studio-cli/references/hypit/playbooks/craft/screen-demonstrations.md +51 -0
- package/skills/using-vvicat-ai-short-studio-cli/references/hypit/playbooks/craft/shot-production-contracts.md +161 -0
- package/skills/using-vvicat-ai-short-studio-cli/references/hypit/playbooks/craft/sound-mix.md +76 -0
- package/skills/using-vvicat-ai-short-studio-cli/references/hypit/playbooks/craft/video-direction.md +433 -0
- package/skills/using-vvicat-ai-short-studio-cli/references/hypit/playbooks/craft/voice-and-performance.md +224 -0
- package/skills/using-vvicat-ai-short-studio-cli/references/hypit/playbooks/craft/voice-direction.md +99 -0
- package/skills/using-vvicat-ai-short-studio-cli/references/hypit/playbooks/formats/narration-led-demo.md +87 -0
- package/skills/using-vvicat-ai-short-studio-cli/references/hypit/playbooks/formats/presenter-led-explainer.md +160 -0
- package/skills/using-vvicat-ai-short-studio-cli/references/hypit/playbooks/formats/ranking-listicle.md +71 -0
- package/skills/using-vvicat-ai-short-studio-cli/references/hypit/playbooks/formats/reference-recreation-canvas.md +8 -0
- package/skills/using-vvicat-ai-short-studio-cli/references/hypit/playbooks/formats/short-drama-workflow.md +165 -0
- package/skills/using-vvicat-ai-short-studio-cli/references/hypit/playbooks/formats/short-drama.md +88 -0
- package/skills/using-vvicat-ai-short-studio-cli/references/hypit/playbooks/formats/street-interview.md +92 -0
- package/skills/using-vvicat-ai-short-studio-cli/references/hypit/playbooks/formats/talking-head.md +82 -0
- package/skills/using-vvicat-ai-short-studio-cli/references/hypit/playbooks/formats/two-person-podcast.md +101 -0
- package/skills/using-vvicat-ai-short-studio-cli/references/hypit/playbooks/index.md +77 -0
- package/skills/using-vvicat-ai-short-studio-cli/references/hypit/production/audio-presentation.md +49 -0
- package/skills/using-vvicat-ai-short-studio-cli/references/hypit/production/authoring.md +228 -0
- package/skills/using-vvicat-ai-short-studio-cli/references/hypit/production/browser-capture.md +112 -0
- package/skills/using-vvicat-ai-short-studio-cli/references/hypit/production/builds.md +330 -0
- package/skills/using-vvicat-ai-short-studio-cli/references/hypit/production/caption-authoring.md +156 -0
- package/skills/using-vvicat-ai-short-studio-cli/references/hypit/production/caption-presentation.md +66 -0
- package/skills/using-vvicat-ai-short-studio-cli/references/hypit/production/component-design.md +217 -0
- package/skills/using-vvicat-ai-short-studio-cli/references/hypit/production/component-sharing.md +150 -0
- package/skills/using-vvicat-ai-short-studio-cli/references/hypit/production/component-visuals.md +152 -0
- package/skills/using-vvicat-ai-short-studio-cli/references/hypit/production/examples/detail.svrun +8 -0
- package/skills/using-vvicat-ai-short-studio-cli/references/hypit/production/examples/direction.svs +14 -0
- package/skills/using-vvicat-ai-short-studio-cli/references/hypit/production/examples/look.svs +6 -0
- package/skills/using-vvicat-ai-short-studio-cli/references/hypit/production/examples/material.svrun +5 -0
- package/skills/using-vvicat-ai-short-studio-cli/references/hypit/production/examples/production.svml +73 -0
- package/skills/using-vvicat-ai-short-studio-cli/references/hypit/production/examples/production.svrun +5 -0
- package/skills/using-vvicat-ai-short-studio-cli/references/hypit/production/examples/visuals.ts +62 -0
- package/skills/using-vvicat-ai-short-studio-cli/references/hypit/production/fonts-and-text.md +138 -0
- package/skills/using-vvicat-ai-short-studio-cli/references/hypit/production/image-operations.md +102 -0
- package/skills/using-vvicat-ai-short-studio-cli/references/hypit/production/index.md +73 -0
- package/skills/using-vvicat-ai-short-studio-cli/references/hypit/production/media-presentation.md +111 -0
- package/skills/using-vvicat-ai-short-studio-cli/references/hypit/production/media.md +246 -0
- package/skills/using-vvicat-ai-short-studio-cli/references/hypit/production/performance.md +114 -0
- package/skills/using-vvicat-ai-short-studio-cli/references/hypit/production/prompt-kits.md +165 -0
- package/skills/using-vvicat-ai-short-studio-cli/references/hypit/production/rendering.md +141 -0
- package/skills/using-vvicat-ai-short-studio-cli/references/hypit/production/review.md +211 -0
- package/skills/using-vvicat-ai-short-studio-cli/references/hypit/production/runs.md +151 -0
- package/skills/using-vvicat-ai-short-studio-cli/references/hypit/production/script-syntax.md +236 -0
- package/skills/using-vvicat-ai-short-studio-cli/references/hypit/production/snapshots.md +90 -0
- package/skills/using-vvicat-ai-short-studio-cli/references/hypit/production/sound.md +75 -0
- package/skills/using-vvicat-ai-short-studio-cli/references/hypit/production/source-syntax.md +163 -0
- package/skills/using-vvicat-ai-short-studio-cli/references/hypit/production/spatial.md +189 -0
- package/skills/using-vvicat-ai-short-studio-cli/references/hypit/production/studio-companions.md +186 -0
- package/skills/using-vvicat-ai-short-studio-cli/references/hypit/production/studio.md +249 -0
- package/skills/using-vvicat-ai-short-studio-cli/references/hypit/production/system.md +169 -0
- package/skills/using-vvicat-ai-short-studio-cli/references/hypit/production/timeline.md +74 -0
- package/skills/using-vvicat-ai-short-studio-cli/references/hypit/production/timing.md +96 -0
- package/skills/using-vvicat-ai-short-studio-cli/references/hypit/production/track-authoring.md +215 -0
- package/skills/using-vvicat-ai-short-studio-cli/references/hypit/production/tracks.md +67 -0
- package/skills/using-vvicat-ai-short-studio-cli/references/hypit/production/video-downloads.md +47 -0
- package/skills/using-vvicat-ai-short-studio-cli/references/hypit/production/vocabulary.md +119 -0
- package/skills/using-vvicat-ai-short-studio-cli/references/project-and-canvas.md +1 -1
- package/skills/using-vvicat-ai-short-studio-cli/references/short-drama/README.md +11 -0
- package/skills/using-vvicat-ai-short-studio-cli/references/short-drama/SKILL.md +102 -0
- package/skills/using-vvicat-ai-short-studio-cli/references/short-drama/art-styles.json +585 -0
- package/skills/using-vvicat-ai-short-studio-cli/references/short-drama/assets/generate-character-images.md +11 -0
- package/skills/using-vvicat-ai-short-studio-cli/references/short-drama/assets/generate-character-profiles/character-profile-output.schema.json +99 -0
- package/skills/using-vvicat-ai-short-studio-cli/references/short-drama/assets/generate-character-profiles.md +7 -0
- package/skills/using-vvicat-ai-short-studio-cli/references/short-drama/assets/generate-drama-art-style.md +9 -0
- package/skills/using-vvicat-ai-short-studio-cli/references/short-drama/assets/generate-prop-assets.md +11 -0
- package/skills/using-vvicat-ai-short-studio-cli/references/short-drama/assets/generate-scene-assets.md +13 -0
- package/skills/using-vvicat-ai-short-studio-cli/references/short-drama/assets/manage-drama-art-styles.md +9 -0
- package/skills/using-vvicat-ai-short-studio-cli/references/short-drama/assets/manage-drama-assets.md +9 -0
- package/skills/using-vvicat-ai-short-studio-cli/references/short-drama/assets/modules/analyze-drama-source/prompts/source_analysis.en.txt +24 -0
- package/skills/using-vvicat-ai-short-studio-cli/references/short-drama/assets/modules/analyze-drama-source/prompts/source_analysis.zh.txt +24 -0
- package/skills/using-vvicat-ai-short-studio-cli/references/short-drama/assets/modules/build-drama-storyboard/prompts/agent_acting_direction.en.txt +61 -0
- package/skills/using-vvicat-ai-short-studio-cli/references/short-drama/assets/modules/build-drama-storyboard/prompts/agent_acting_direction.zh.txt +79 -0
- package/skills/using-vvicat-ai-short-studio-cli/references/short-drama/assets/modules/build-drama-storyboard/prompts/agent_cinematographer.en.txt +101 -0
- package/skills/using-vvicat-ai-short-studio-cli/references/short-drama/assets/modules/build-drama-storyboard/prompts/agent_cinematographer.zh.txt +150 -0
- package/skills/using-vvicat-ai-short-studio-cli/references/short-drama/assets/modules/build-drama-storyboard/prompts/agent_storyboard_detail.en.txt +114 -0
- package/skills/using-vvicat-ai-short-studio-cli/references/short-drama/assets/modules/build-drama-storyboard/prompts/agent_storyboard_detail.zh.txt +89 -0
- package/skills/using-vvicat-ai-short-studio-cli/references/short-drama/assets/modules/build-drama-storyboard/prompts/agent_storyboard_plan.en.txt +114 -0
- package/skills/using-vvicat-ai-short-studio-cli/references/short-drama/assets/modules/build-drama-storyboard/prompts/agent_storyboard_plan.zh.txt +389 -0
- package/skills/using-vvicat-ai-short-studio-cli/references/short-drama/assets/modules/build-drama-storyboard/prompts/professional_storyboard.en.txt +40 -0
- package/skills/using-vvicat-ai-short-studio-cli/references/short-drama/assets/modules/build-drama-storyboard/prompts/professional_storyboard.zh.txt +40 -0
- package/skills/using-vvicat-ai-short-studio-cli/references/short-drama/assets/modules/define-drama-brief/prompts/drama_brief.en.txt +24 -0
- package/skills/using-vvicat-ai-short-studio-cli/references/short-drama/assets/modules/define-drama-brief/prompts/drama_brief.zh.txt +24 -0
- package/skills/using-vvicat-ai-short-studio-cli/references/short-drama/assets/modules/design-drama-audio/prompts/character_voice_description.en.txt +19 -0
- package/skills/using-vvicat-ai-short-studio-cli/references/short-drama/assets/modules/design-drama-audio/prompts/character_voice_description.zh.txt +19 -0
- package/skills/using-vvicat-ai-short-studio-cli/references/short-drama/assets/modules/design-drama-audio/prompts/character_voice_recommend.en.txt +26 -0
- package/skills/using-vvicat-ai-short-studio-cli/references/short-drama/assets/modules/design-drama-audio/prompts/character_voice_recommend.zh.txt +26 -0
- package/skills/using-vvicat-ai-short-studio-cli/references/short-drama/assets/modules/design-drama-audio/prompts/music_track_design.en.txt +33 -0
- package/skills/using-vvicat-ai-short-studio-cli/references/short-drama/assets/modules/design-drama-audio/prompts/music_track_design.zh.txt +33 -0
- package/skills/using-vvicat-ai-short-studio-cli/references/short-drama/assets/modules/design-drama-audio/prompts/voice_analysis.en.txt +36 -0
- package/skills/using-vvicat-ai-short-studio-cli/references/short-drama/assets/modules/design-drama-audio/prompts/voice_analysis.zh.txt +36 -0
- package/skills/using-vvicat-ai-short-studio-cli/references/short-drama/assets/modules/design-drama-bible/prompts/ai_story_expand.en.txt +33 -0
- package/skills/using-vvicat-ai-short-studio-cli/references/short-drama/assets/modules/design-drama-bible/prompts/ai_story_expand.zh.txt +33 -0
- package/skills/using-vvicat-ai-short-studio-cli/references/short-drama/assets/modules/generate-character-images/prompts/agent_character_visual.en.txt +26 -0
- package/skills/using-vvicat-ai-short-studio-cli/references/short-drama/assets/modules/generate-character-images/prompts/agent_character_visual.zh.txt +26 -0
- package/skills/using-vvicat-ai-short-studio-cli/references/short-drama/assets/modules/generate-character-images/prompts/character_asset_sheet.en.txt +21 -0
- package/skills/using-vvicat-ai-short-studio-cli/references/short-drama/assets/modules/generate-character-images/prompts/character_asset_sheet.zh.txt +21 -0
- package/skills/using-vvicat-ai-short-studio-cli/references/short-drama/assets/modules/generate-character-images/prompts/character_create.en.txt +12 -0
- package/skills/using-vvicat-ai-short-studio-cli/references/short-drama/assets/modules/generate-character-images/prompts/character_create.zh.txt +12 -0
- package/skills/using-vvicat-ai-short-studio-cli/references/short-drama/assets/modules/generate-character-images/prompts/character_description_update.en.txt +13 -0
- package/skills/using-vvicat-ai-short-studio-cli/references/short-drama/assets/modules/generate-character-images/prompts/character_description_update.zh.txt +13 -0
- package/skills/using-vvicat-ai-short-studio-cli/references/short-drama/assets/modules/generate-character-images/prompts/character_image_to_description.en.txt +11 -0
- package/skills/using-vvicat-ai-short-studio-cli/references/short-drama/assets/modules/generate-character-images/prompts/character_image_to_description.zh.txt +11 -0
- package/skills/using-vvicat-ai-short-studio-cli/references/short-drama/assets/modules/generate-character-images/prompts/character_modify.en.txt +15 -0
- package/skills/using-vvicat-ai-short-studio-cli/references/short-drama/assets/modules/generate-character-images/prompts/character_modify.zh.txt +15 -0
- package/skills/using-vvicat-ai-short-studio-cli/references/short-drama/assets/modules/generate-character-images/prompts/character_regenerate.en.txt +14 -0
- package/skills/using-vvicat-ai-short-studio-cli/references/short-drama/assets/modules/generate-character-images/prompts/character_regenerate.zh.txt +14 -0
- package/skills/using-vvicat-ai-short-studio-cli/references/short-drama/assets/modules/generate-character-profiles/prompts/agent_character_profile.en.txt +50 -0
- package/skills/using-vvicat-ai-short-studio-cli/references/short-drama/assets/modules/generate-character-profiles/prompts/agent_character_profile.zh.txt +50 -0
- package/skills/using-vvicat-ai-short-studio-cli/references/short-drama/assets/modules/generate-drama-art-style/prompts/art_style_decision.en.txt +18 -0
- package/skills/using-vvicat-ai-short-studio-cli/references/short-drama/assets/modules/generate-drama-art-style/prompts/art_style_decision.zh.txt +18 -0
- package/skills/using-vvicat-ai-short-studio-cli/references/short-drama/assets/modules/generate-drama-art-style/prompts/config_generation.en.txt +67 -0
- package/skills/using-vvicat-ai-short-studio-cli/references/short-drama/assets/modules/generate-drama-art-style/prompts/config_generation.zh.txt +67 -0
- package/skills/using-vvicat-ai-short-studio-cli/references/short-drama/assets/modules/generate-prop-assets/prompts/prop_description_update.en.txt +14 -0
- package/skills/using-vvicat-ai-short-studio-cli/references/short-drama/assets/modules/generate-prop-assets/prompts/prop_description_update.zh.txt +14 -0
- package/skills/using-vvicat-ai-short-studio-cli/references/short-drama/assets/modules/generate-prop-assets/prompts/prop_generate.en.txt +16 -0
- package/skills/using-vvicat-ai-short-studio-cli/references/short-drama/assets/modules/generate-prop-assets/prompts/prop_generate.zh.txt +16 -0
- package/skills/using-vvicat-ai-short-studio-cli/references/short-drama/assets/modules/generate-prop-assets/prompts/select_prop.en.txt +17 -0
- package/skills/using-vvicat-ai-short-studio-cli/references/short-drama/assets/modules/generate-prop-assets/prompts/select_prop.zh.txt +17 -0
- package/skills/using-vvicat-ai-short-studio-cli/references/short-drama/assets/modules/generate-scene-assets/prompts/location_create.en.txt +11 -0
- package/skills/using-vvicat-ai-short-studio-cli/references/short-drama/assets/modules/generate-scene-assets/prompts/location_create.zh.txt +11 -0
- package/skills/using-vvicat-ai-short-studio-cli/references/short-drama/assets/modules/generate-scene-assets/prompts/location_description_update.en.txt +14 -0
- package/skills/using-vvicat-ai-short-studio-cli/references/short-drama/assets/modules/generate-scene-assets/prompts/location_description_update.zh.txt +14 -0
- package/skills/using-vvicat-ai-short-studio-cli/references/short-drama/assets/modules/generate-scene-assets/prompts/location_modify.en.txt +13 -0
- package/skills/using-vvicat-ai-short-studio-cli/references/short-drama/assets/modules/generate-scene-assets/prompts/location_modify.zh.txt +13 -0
- package/skills/using-vvicat-ai-short-studio-cli/references/short-drama/assets/modules/generate-scene-assets/prompts/location_regenerate.en.txt +12 -0
- package/skills/using-vvicat-ai-short-studio-cli/references/short-drama/assets/modules/generate-scene-assets/prompts/location_regenerate.zh.txt +12 -0
- package/skills/using-vvicat-ai-short-studio-cli/references/short-drama/assets/modules/generate-scene-assets/prompts/scene_asset_sheet.en.txt +19 -0
- package/skills/using-vvicat-ai-short-studio-cli/references/short-drama/assets/modules/generate-scene-assets/prompts/scene_asset_sheet.zh.txt +19 -0
- package/skills/using-vvicat-ai-short-studio-cli/references/short-drama/assets/modules/generate-scene-assets/prompts/select_location.en.txt +18 -0
- package/skills/using-vvicat-ai-short-studio-cli/references/short-drama/assets/modules/generate-scene-assets/prompts/select_location.zh.txt +17 -0
- package/skills/using-vvicat-ai-short-studio-cli/references/short-drama/assets/modules/generate-storyboard-images/prompts/panel_grid_enhance.en.txt +29 -0
- package/skills/using-vvicat-ai-short-studio-cli/references/short-drama/assets/modules/generate-storyboard-images/prompts/panel_grid_enhance.zh.txt +29 -0
- package/skills/using-vvicat-ai-short-studio-cli/references/short-drama/assets/modules/generate-storyboard-images/prompts/panel_grid_image.en.txt +77 -0
- package/skills/using-vvicat-ai-short-studio-cli/references/short-drama/assets/modules/generate-storyboard-images/prompts/panel_grid_image.zh.txt +77 -0
- package/skills/using-vvicat-ai-short-studio-cli/references/short-drama/assets/modules/generate-storyboard-images/prompts/panel_storyboard_image.en.txt +109 -0
- package/skills/using-vvicat-ai-short-studio-cli/references/short-drama/assets/modules/generate-storyboard-images/prompts/panel_storyboard_image.zh.txt +109 -0
- package/skills/using-vvicat-ai-short-studio-cli/references/short-drama/assets/modules/ideate-drama-from-market/prompts/market_inspiration.en.txt +23 -0
- package/skills/using-vvicat-ai-short-studio-cli/references/short-drama/assets/modules/ideate-drama-from-market/prompts/market_inspiration.zh.txt +23 -0
- package/skills/using-vvicat-ai-short-studio-cli/references/short-drama/assets/modules/outline-drama-series/prompts/episode_split.en.txt +42 -0
- package/skills/using-vvicat-ai-short-studio-cli/references/short-drama/assets/modules/outline-drama-series/prompts/episode_split.zh.txt +42 -0
- package/skills/using-vvicat-ai-short-studio-cli/references/short-drama/assets/modules/plan-drama-assets/prompts/asset_analysis.en.txt +55 -0
- package/skills/using-vvicat-ai-short-studio-cli/references/short-drama/assets/modules/plan-drama-assets/prompts/asset_analysis.zh.txt +55 -0
- package/skills/using-vvicat-ai-short-studio-cli/references/short-drama/assets/modules/plan-drama-production/prompts/production_plan.en.txt +49 -0
- package/skills/using-vvicat-ai-short-studio-cli/references/short-drama/assets/modules/plan-drama-production/prompts/production_plan.zh.txt +52 -0
- package/skills/using-vvicat-ai-short-studio-cli/references/short-drama/assets/modules/plan-shot-continuity/prompts/continuity_plan.en.txt +37 -0
- package/skills/using-vvicat-ai-short-studio-cli/references/short-drama/assets/modules/plan-shot-continuity/prompts/continuity_plan.zh.txt +37 -0
- package/skills/using-vvicat-ai-short-studio-cli/references/short-drama/assets/modules/review-drama-script/prompts/review_drama_script.en.txt +28 -0
- package/skills/using-vvicat-ai-short-studio-cli/references/short-drama/assets/modules/review-drama-script/prompts/review_drama_script.zh.txt +28 -0
- package/skills/using-vvicat-ai-short-studio-cli/references/short-drama/assets/modules/revise-drama-storyboards/prompts/agent_shot_variant_analysis.en.txt +57 -0
- package/skills/using-vvicat-ai-short-studio-cli/references/short-drama/assets/modules/revise-drama-storyboards/prompts/agent_shot_variant_analysis.zh.txt +169 -0
- package/skills/using-vvicat-ai-short-studio-cli/references/short-drama/assets/modules/revise-drama-storyboards/prompts/agent_shot_variant_generate.en.txt +64 -0
- package/skills/using-vvicat-ai-short-studio-cli/references/short-drama/assets/modules/revise-drama-storyboards/prompts/agent_shot_variant_generate.zh.txt +117 -0
- package/skills/using-vvicat-ai-short-studio-cli/references/short-drama/assets/modules/revise-drama-storyboards/prompts/agent_storyboard_insert.en.txt +34 -0
- package/skills/using-vvicat-ai-short-studio-cli/references/short-drama/assets/modules/revise-drama-storyboards/prompts/agent_storyboard_insert.zh.txt +34 -0
- package/skills/using-vvicat-ai-short-studio-cli/references/short-drama/assets/modules/revise-drama-storyboards/prompts/storyboard_edit.en.txt +18 -0
- package/skills/using-vvicat-ai-short-studio-cli/references/short-drama/assets/modules/revise-drama-storyboards/prompts/storyboard_edit.zh.txt +13 -0
- package/skills/using-vvicat-ai-short-studio-cli/references/short-drama/assets/modules/transform-drama-media/prompts/2d_to_live_action.en.txt +7 -0
- package/skills/using-vvicat-ai-short-studio-cli/references/short-drama/assets/modules/transform-drama-media/prompts/2d_to_live_action.zh.txt +7 -0
- package/skills/using-vvicat-ai-short-studio-cli/references/short-drama/assets/modules/transform-drama-media/prompts/image_prompt_modify.en.txt +28 -0
- package/skills/using-vvicat-ai-short-studio-cli/references/short-drama/assets/modules/transform-drama-media/prompts/image_prompt_modify.zh.txt +42 -0
- package/skills/using-vvicat-ai-short-studio-cli/references/short-drama/assets/modules/write-drama-director-book/prompts/director_book.en.txt +35 -0
- package/skills/using-vvicat-ai-short-studio-cli/references/short-drama/assets/modules/write-drama-director-book/prompts/director_book.zh.txt +35 -0
- package/skills/using-vvicat-ai-short-studio-cli/references/short-drama/assets/modules/write-drama-episode/prompts/agent_clip.en.txt +21 -0
- package/skills/using-vvicat-ai-short-studio-cli/references/short-drama/assets/modules/write-drama-episode/prompts/agent_clip.zh.txt +21 -0
- package/skills/using-vvicat-ai-short-studio-cli/references/short-drama/assets/modules/write-drama-episode/prompts/screenplay_conversion.en.txt +39 -0
- package/skills/using-vvicat-ai-short-studio-cli/references/short-drama/assets/modules/write-drama-episode/prompts/screenplay_conversion.zh.txt +39 -0
- package/skills/using-vvicat-ai-short-studio-cli/references/short-drama/assets/modules/write-drama-video-prompts/prompts/h3_video.en.txt +49 -0
- package/skills/using-vvicat-ai-short-studio-cli/references/short-drama/assets/modules/write-drama-video-prompts/prompts/h3_video.zh.txt +48 -0
- package/skills/using-vvicat-ai-short-studio-cli/references/short-drama/assets/modules/write-drama-video-prompts/prompts/panel_grid_video.en.txt +51 -0
- package/skills/using-vvicat-ai-short-studio-cli/references/short-drama/assets/modules/write-drama-video-prompts/prompts/panel_grid_video.zh.txt +51 -0
- package/skills/using-vvicat-ai-short-studio-cli/references/short-drama/assets/modules/write-drama-video-prompts/prompts/panel_storyboard_video.en.txt +50 -0
- package/skills/using-vvicat-ai-short-studio-cli/references/short-drama/assets/modules/write-drama-video-prompts/prompts/panel_storyboard_video.zh.txt +50 -0
- package/skills/using-vvicat-ai-short-studio-cli/references/short-drama/assets/modules/write-drama-video-prompts/prompts/seedance2_video.en.txt +48 -0
- package/skills/using-vvicat-ai-short-studio-cli/references/short-drama/assets/modules/write-drama-video-prompts/prompts/seedance2_video.zh.txt +46 -0
- package/skills/using-vvicat-ai-short-studio-cli/references/short-drama/assets/plan-drama-assets.md +7 -0
- package/skills/using-vvicat-ai-short-studio-cli/references/short-drama/codex-contracts.md +14 -0
- package/skills/using-vvicat-ai-short-studio-cli/references/short-drama/comfly-provider.md +12 -0
- package/skills/using-vvicat-ai-short-studio-cli/references/short-drama/controlled-vocabulary.json +115 -0
- package/skills/using-vvicat-ai-short-studio-cli/references/short-drama/creation/analyze-drama-source.md +7 -0
- package/skills/using-vvicat-ai-short-studio-cli/references/short-drama/creation/define-drama-brief.md +8 -0
- package/skills/using-vvicat-ai-short-studio-cli/references/short-drama/creation/design-drama-bible.md +5 -0
- package/skills/using-vvicat-ai-short-studio-cli/references/short-drama/creation/humanizer.md +9 -0
- package/skills/using-vvicat-ai-short-studio-cli/references/short-drama/creation/outline-drama-series.md +5 -0
- package/skills/using-vvicat-ai-short-studio-cli/references/short-drama/creation/short-drama.md +13 -0
- package/skills/using-vvicat-ai-short-studio-cli/references/short-drama/creation/write-drama-director-book.md +6 -0
- package/skills/using-vvicat-ai-short-studio-cli/references/short-drama/creation/write-drama-episode.md +6 -0
- package/skills/using-vvicat-ai-short-studio-cli/references/short-drama/director-composition.md +794 -0
- package/skills/using-vvicat-ai-short-studio-cli/references/short-drama/editing/edit-deliver-drama.md +5 -0
- package/skills/using-vvicat-ai-short-studio-cli/references/short-drama/editing/edit-drama-timeline.md +22 -0
- package/skills/using-vvicat-ai-short-studio-cli/references/short-drama/editing/remotion-best-practices.md +12 -0
- package/skills/using-vvicat-ai-short-studio-cli/references/short-drama/editing-workflow.md +56 -0
- package/skills/using-vvicat-ai-short-studio-cli/references/short-drama/feature-completeness.md +111 -0
- package/skills/using-vvicat-ai-short-studio-cli/references/short-drama/generation/configure-generation-providers.md +17 -0
- package/skills/using-vvicat-ai-short-studio-cli/references/short-drama/generation/design-drama-audio.md +11 -0
- package/skills/using-vvicat-ai-short-studio-cli/references/short-drama/generation/drama-generation-service.md +13 -0
- package/skills/using-vvicat-ai-short-studio-cli/references/short-drama/generation/generate-drama-videos.md +9 -0
- package/skills/using-vvicat-ai-short-studio-cli/references/short-drama/generation/generate-storyboard-images.md +11 -0
- package/skills/using-vvicat-ai-short-studio-cli/references/short-drama/generation/monitor-drama-tasks.md +15 -0
- package/skills/using-vvicat-ai-short-studio-cli/references/short-drama/generation/transform-drama-media.md +9 -0
- package/skills/using-vvicat-ai-short-studio-cli/references/short-drama/generation/write-drama-video-prompts.md +50 -0
- package/skills/using-vvicat-ai-short-studio-cli/references/short-drama/market/analyze-drama-market/market-report.schema.json +46 -0
- package/skills/using-vvicat-ai-short-studio-cli/references/short-drama/market/analyze-drama-market/methodology.md +24 -0
- package/skills/using-vvicat-ai-short-studio-cli/references/short-drama/market/analyze-drama-market.md +47 -0
- package/skills/using-vvicat-ai-short-studio-cli/references/short-drama/market/ideate-drama-from-market/market-inspiration.schema.json +109 -0
- package/skills/using-vvicat-ai-short-studio-cli/references/short-drama/market/ideate-drama-from-market.md +15 -0
- package/skills/using-vvicat-ai-short-studio-cli/references/short-drama/module-map.json +595 -0
- package/skills/using-vvicat-ai-short-studio-cli/references/short-drama/music-catalog-providers.md +16 -0
- package/skills/using-vvicat-ai-short-studio-cli/references/short-drama/operations/manage-drama-projects.md +11 -0
- package/skills/using-vvicat-ai-short-studio-cli/references/short-drama/operations/orchestrate-short-drama.md +20 -0
- package/skills/using-vvicat-ai-short-studio-cli/references/short-drama/operations/recover-drama-pipeline.md +5 -0
- package/skills/using-vvicat-ai-short-studio-cli/references/short-drama/operations/short-drama-skill-index.md +29 -0
- package/skills/using-vvicat-ai-short-studio-cli/references/short-drama/operations/use-short-drama-studio.md +15 -0
- package/skills/using-vvicat-ai-short-studio-cli/references/short-drama/pipeline.md +85 -0
- package/skills/using-vvicat-ai-short-studio-cli/references/short-drama/project-spec-v1.md +217 -0
- package/skills/using-vvicat-ai-short-studio-cli/references/short-drama/prompt-skill-index.md +62 -0
- package/skills/using-vvicat-ai-short-studio-cli/references/short-drama/recreation/publish-drama-references/litterbox.md +5 -0
- package/skills/using-vvicat-ai-short-studio-cli/references/short-drama/review/review-drama-script.md +7 -0
- package/skills/using-vvicat-ai-short-studio-cli/references/short-drama/review/review-drama-shots.md +39 -0
- package/skills/using-vvicat-ai-short-studio-cli/references/short-drama/runninghub-provider.md +33 -0
- package/skills/using-vvicat-ai-short-studio-cli/references/short-drama/starrouter-provider.md +53 -0
- package/skills/using-vvicat-ai-short-studio-cli/references/short-drama/storyboard/build-drama-storyboard.md +13 -0
- package/skills/using-vvicat-ai-short-studio-cli/references/short-drama/storyboard/design-fight-video.md +19 -0
- package/skills/using-vvicat-ai-short-studio-cli/references/short-drama/storyboard/direct-blender-previz/action-previz.md +39 -0
- package/skills/using-vvicat-ai-short-studio-cli/references/short-drama/storyboard/direct-blender-previz/direction-contract.md +96 -0
- package/skills/using-vvicat-ai-short-studio-cli/references/short-drama/storyboard/direct-blender-previz/weapons-vfx.md +23 -0
- package/skills/using-vvicat-ai-short-studio-cli/references/short-drama/storyboard/direct-blender-previz.md +15 -0
- package/skills/using-vvicat-ai-short-studio-cli/references/short-drama/storyboard/generate-blender-previz.md +20 -0
- package/skills/using-vvicat-ai-short-studio-cli/references/short-drama/storyboard/plan-drama-production.md +21 -0
- package/skills/using-vvicat-ai-short-studio-cli/references/short-drama/storyboard/plan-shot-continuity.md +15 -0
- package/skills/using-vvicat-ai-short-studio-cli/references/short-drama/storyboard/revise-drama-storyboards.md +5 -0
- package/skills/using-vvicat-ai-short-studio-cli/references/short-drama/usage-guide.md +107 -0
- package/skills/using-vvicat-ai-short-studio-cli/references/special-workflows.md +2 -8
- package/skills/using-vvicat-ai-short-studio-cli/references/troubleshooting.md +0 -1
- package/dist/auth/login-provider.d.ts +0 -2
- package/dist/auth/login-provider.js +0 -3
- package/dist/commands/canvas/node/quote.d.ts +0 -17
- package/dist/commands/canvas/node/quote.js +0 -13
- package/dist/commands/config/ai-provider/capabilities.d.ts +0 -60
- package/dist/commands/config/ai-provider/capabilities.js +0 -124
- package/dist/commands/config/ai-provider/get.d.ts +0 -22
- package/dist/commands/config/ai-provider/get.js +0 -21
- package/dist/commands/config/ai-provider/list.d.ts +0 -21
- package/dist/commands/config/ai-provider/list.js +0 -19
- package/dist/commands/config/ai-provider/models.d.ts +0 -22
- package/dist/commands/config/ai-provider/models.js +0 -21
- package/dist/commands/config/ai-provider/set.d.ts +0 -41
- package/dist/commands/config/ai-provider/set.js +0 -65
- package/dist/commands/config/ai-provider/test.d.ts +0 -25
- package/dist/commands/config/ai-provider/test.js +0 -24
- package/dist/commands/project/provider/get.d.ts +0 -15
- package/dist/commands/project/provider/get.js +0 -12
- package/dist/commands/project/provider/set.d.ts +0 -16
- package/dist/commands/project/provider/set.js +0 -18
- package/dist/commands/project/provider/test.d.ts +0 -15
- package/dist/commands/project/provider/test.js +0 -12
- package/dist/domain/ai-provider-capabilities.d.ts +0 -109
- package/dist/domain/ai-provider-capabilities.js +0 -180
- package/dist/domain/ai-provider-command-helpers.d.ts +0 -27
- package/dist/domain/ai-provider-command-helpers.js +0 -55
- package/skills/using-vvicat-ai-short-studio-cli/references/b-roll-and-screen.md +0 -9
- package/skills/using-vvicat-ai-short-studio-cli/references/caption-and-graphics-direction.md +0 -11
- package/skills/using-vvicat-ai-short-studio-cli/references/composition-and-shot-review.md +0 -17
- package/skills/using-vvicat-ai-short-studio-cli/references/craft-index.md +0 -20
- package/skills/using-vvicat-ai-short-studio-cli/references/drama-canvas.md +0 -19
- package/skills/using-vvicat-ai-short-studio-cli/references/format-relationships.md +0 -15
- package/skills/using-vvicat-ai-short-studio-cli/references/h3-prompts.md +0 -7
- package/skills/using-vvicat-ai-short-studio-cli/references/image-and-reference-direction.md +0 -9
- package/skills/using-vvicat-ai-short-studio-cli/references/licensed-music.md +0 -9
- package/skills/using-vvicat-ai-short-studio-cli/references/licenses/oh-my-short-drama-MIT.txt +0 -21
- package/skills/using-vvicat-ai-short-studio-cli/references/licenses/short-drama-MIT.txt +0 -21
- package/skills/using-vvicat-ai-short-studio-cli/references/media-provenance-and-review.md +0 -22
- package/skills/using-vvicat-ai-short-studio-cli/references/paid-plan.md +0 -7
- package/skills/using-vvicat-ai-short-studio-cli/references/production-specialties.md +0 -25
- package/skills/using-vvicat-ai-short-studio-cli/references/recreation.md +0 -21
- package/skills/using-vvicat-ai-short-studio-cli/references/reference-analysis-and-timing.md +0 -19
- package/skills/using-vvicat-ai-short-studio-cli/references/remotion-editing.md +0 -18
- package/skills/using-vvicat-ai-short-studio-cli/references/shot-production.md +0 -9
- package/skills/using-vvicat-ai-short-studio-cli/references/sound-and-captions.md +0 -7
- package/skills/using-vvicat-ai-short-studio-cli/references/sources.md +0 -6
- package/skills/using-vvicat-ai-short-studio-cli/references/story-craft/canvas-production.md +0 -9
- package/skills/using-vvicat-ai-short-studio-cli/references/story-craft/guide.md +0 -7
- package/skills/using-vvicat-ai-short-studio-cli/references/story-craft/index.md +0 -13
- package/skills/using-vvicat-ai-short-studio-cli/references/video-and-performance-direction.md +0 -9
- package/skills/using-vvicat-ai-short-studio-cli/references/voice-and-sound-direction.md +0 -9
- package/skills/using-vvicat-ai-short-studio-cli/references/writing-polish.md +0 -15
- /package/skills/using-vvicat-ai-short-studio-cli/references/{licenses/humanizer-MIT.txt → short-drama/assets/modules/humanizer/LICENSE} +0 -0
- /package/skills/using-vvicat-ai-short-studio-cli/references/{story-craft → short-drama/writing}/compliance-checklist.md +0 -0
- /package/skills/using-vvicat-ai-short-studio-cli/references/{story-craft → short-drama/writing}/genre-guide.md +0 -0
- /package/skills/using-vvicat-ai-short-studio-cli/references/{story-craft → short-drama/writing}/hook-design.md +0 -0
- /package/skills/using-vvicat-ai-short-studio-cli/references/{story-craft → short-drama/writing}/opening-rules.md +0 -0
- /package/skills/using-vvicat-ai-short-studio-cli/references/{story-craft → short-drama/writing}/paywall-design.md +0 -0
- /package/skills/using-vvicat-ai-short-studio-cli/references/{story-craft → short-drama/writing}/rhythm-curve.md +0 -0
- /package/skills/using-vvicat-ai-short-studio-cli/references/{story-craft → short-drama/writing}/satisfaction-matrix.md +0 -0
- /package/skills/using-vvicat-ai-short-studio-cli/references/{story-craft → short-drama/writing}/villain-design.md +0 -0
|
@@ -1,25 +1,6 @@
|
|
|
1
1
|
import { Args, Flags } from '@oclif/core';
|
|
2
2
|
import { BaseCommand } from '../../../base-command.js';
|
|
3
3
|
import { commandApi, mapConcurrent, projectFlag } from '../../../command-helpers.js';
|
|
4
|
-
/**
|
|
5
|
-
* P1-2 契约:调用方必须能从 stdout JSON 直接区分
|
|
6
|
-
* 「已等待到终态」与「仅提交、仍在服务端排队」。
|
|
7
|
-
* 因此每次输出都带 waited / pending / pendingNodeIds / reason,
|
|
8
|
-
* 不再允许出现「空 tasks + exit 0」这种伪装成同步完成的输出。
|
|
9
|
-
*/
|
|
10
|
-
export function withWaitState(payload, state) {
|
|
11
|
-
const base = payload && typeof payload === 'object' && !Array.isArray(payload)
|
|
12
|
-
? payload
|
|
13
|
-
: { result: payload };
|
|
14
|
-
const pending = state.pendingNodeIds.length > 0;
|
|
15
|
-
return {
|
|
16
|
-
...base,
|
|
17
|
-
waited: state.waited,
|
|
18
|
-
pending,
|
|
19
|
-
...(pending ? { pendingNodeIds: state.pendingNodeIds } : {}),
|
|
20
|
-
...(state.reason ? { reason: state.reason } : {}),
|
|
21
|
-
};
|
|
22
|
-
}
|
|
23
4
|
export default class CanvasNodeRun extends BaseCommand {
|
|
24
5
|
static args = { nodeId: Args.string({ required: false }) };
|
|
25
6
|
static flags = {
|
|
@@ -29,18 +10,6 @@ export default class CanvasNodeRun extends BaseCommand {
|
|
|
29
10
|
concurrency: Flags.integer({ description: '批量提交并发数', default: 4, min: 1, max: 16 }),
|
|
30
11
|
wait: Flags.boolean({ default: false }),
|
|
31
12
|
interval: Flags.integer({ default: 1000 }),
|
|
32
|
-
'max-wait-ms': Flags.integer({
|
|
33
|
-
description: '单次 waitTask 最大等待毫秒数;0 表示不超时(保留旧行为)。例如 --wait --max-wait-ms 180000 表示 3 分钟超时。',
|
|
34
|
-
default: 0,
|
|
35
|
-
}),
|
|
36
|
-
'max-attempts': Flags.integer({
|
|
37
|
-
description: 'retryable 失败时,最大重新执行节点次数。0=不重试;>0 时配合 --max-wait-ms 使用。',
|
|
38
|
-
default: 0,
|
|
39
|
-
}),
|
|
40
|
-
'auto-select-version': Flags.boolean({
|
|
41
|
-
description: '节点跑完且 task.result 含 assetId/versionId 时,自动调 canvas asset select-version 让下游 cvd 拿到 profile。默认 false,避免误选。',
|
|
42
|
-
default: false,
|
|
43
|
-
}),
|
|
44
13
|
};
|
|
45
14
|
async run() {
|
|
46
15
|
const { args, flags } = await this.parse(CanvasNodeRun);
|
|
@@ -48,126 +17,21 @@ export default class CanvasNodeRun extends BaseCommand {
|
|
|
48
17
|
if (!nodeIds.length)
|
|
49
18
|
throw new Error('请提供 nodeId 或至少一个 --node');
|
|
50
19
|
const { api } = await commandApi(flags);
|
|
51
|
-
// 简化:批量 + retry 的组合会让 race 复杂化。带 --node 多值 + --max-attempts > 0
|
|
52
|
-
// 时只对第一个节点生效并打印警告,保持职责简单。
|
|
53
|
-
if (flags.wait && flags['max-attempts'] > 0 && nodeIds.length > 1) {
|
|
54
|
-
this.log('warn: --max-attempts 仅对单节点生效;批量模式下自动忽略');
|
|
55
|
-
}
|
|
56
20
|
const submissions = await mapConcurrent(nodeIds, flags.concurrency, async (nodeId) => ({
|
|
57
21
|
nodeId,
|
|
58
22
|
result: await api.runNode(flags.project, nodeId),
|
|
59
23
|
}));
|
|
60
24
|
if (!flags.wait) {
|
|
61
|
-
|
|
62
|
-
this.print(withWaitState(payload, { waited: false, pendingNodeIds: nodeIds, reason: '未传 --wait,任务仅已提交,仍在服务端排队' }));
|
|
25
|
+
this.print(nodeIds.length === 1 ? submissions[0].result : { submissions });
|
|
63
26
|
return;
|
|
64
27
|
}
|
|
65
|
-
const maxWaitMs = flags['max-wait-ms'] > 0 ? flags['max-wait-ms'] : Number.POSITIVE_INFINITY;
|
|
66
|
-
// 病灶(P1-2):旧实现用 filter 静默丢掉没有 task.id 的提交项,
|
|
67
|
-
// tasks 变成空数组后命令打印 {"tasks": []} 并 exit 0,agent 误以为已同步完成。
|
|
68
|
-
// 现在缺 task.id 的节点必须进 pendingNodeIds 并让命令以非零码退出。
|
|
69
28
|
const tasks = submissions.filter((item) => item.result.task?.id);
|
|
70
|
-
const
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
let attempt = 0;
|
|
74
|
-
const maxAttempts = flags['max-attempts'] > 0 ? flags['max-attempts'] : 1;
|
|
75
|
-
// 职责分离:
|
|
76
|
-
// - waitTask 只负责按 interval 轮询并在 maxWaitMs 到达时抛 'wait timeout'。
|
|
77
|
-
// - 本循环负责 retry 决策(task.error?.retryable && attempt < maxAttempts 时
|
|
78
|
-
// cancel + 重新 runNode 并继续 wait)。
|
|
79
|
-
// 关键点:'wait timeout' 不应该被外层 catch 当作任务失败,也不应该触发整批
|
|
80
|
-
// mapConcurrent 的 reject(否则 agent 看到 exit 0 + 空输出)。这里把 timeout
|
|
81
|
-
// 视为"还在跑",让 while 继续下一轮 wait;只在 task.status === 'failed' 时
|
|
82
|
-
// 才根据 retryable 决定是否退。
|
|
83
|
-
// eslint-disable-next-line no-constant-condition
|
|
84
|
-
while (true) {
|
|
85
|
-
attempt += 1;
|
|
86
|
-
const taskId = currentSubmission.task?.id;
|
|
87
|
-
if (!taskId)
|
|
88
|
-
throw new Error(`节点 ${item.nodeId} 未返回 task id`);
|
|
89
|
-
let task;
|
|
90
|
-
try {
|
|
91
|
-
task = (await api.waitTask(taskId, flags.interval, { maxWaitMs }));
|
|
92
|
-
}
|
|
93
|
-
catch (error) {
|
|
94
|
-
if (error instanceof Error && error.message.startsWith('wait timeout')) {
|
|
95
|
-
// wait 还没拿到终态:视为任务仍在跑,消耗一次 attempt 后重新 wait。
|
|
96
|
-
// 即使 maxAttempts 已耗尽,只要不是真的 failed + retryable,就继续 wait,
|
|
97
|
-
// 直到任务真的结束(completed / failed / canceled)。这样长任务在
|
|
98
|
-
// 较小 maxWaitMs 下不会突然退出整批 mapConcurrent。
|
|
99
|
-
if (attempt > maxAttempts * 8) {
|
|
100
|
-
// 防御性兜底:避免无限循环(例如 waitTask 永远拿不到终态)。
|
|
101
|
-
// 仅在 attempt 数远超 maxAttempts 时才退,并把 timeout 信息透出。
|
|
102
|
-
const err = new Error(`节点 ${item.nodeId} 等待超时(attempt=${attempt})`);
|
|
103
|
-
Object.assign(err, { taskId, attempts: attempt });
|
|
104
|
-
throw err;
|
|
105
|
-
}
|
|
106
|
-
continue;
|
|
107
|
-
}
|
|
108
|
-
throw error;
|
|
109
|
-
}
|
|
110
|
-
if (task.status === 'completed') {
|
|
111
|
-
return { nodeId: item.nodeId, task, attempts: attempt };
|
|
112
|
-
}
|
|
113
|
-
if (task.status === 'failed' && task.error?.retryable === true && attempt < maxAttempts) {
|
|
114
|
-
// 取消旧任务后重新执行节点,再重新跑一次 wait。waitTask 不做 cancel/retry 决策。
|
|
115
|
-
try {
|
|
116
|
-
await api.cancelTask(taskId);
|
|
117
|
-
}
|
|
118
|
-
catch { /* 旧任务可能已终态,忽略 */ }
|
|
119
|
-
const newSubmission = await api.runNode(flags.project, item.nodeId);
|
|
120
|
-
currentSubmission = newSubmission;
|
|
121
|
-
continue;
|
|
122
|
-
}
|
|
123
|
-
return { nodeId: item.nodeId, task, attempts: attempt };
|
|
124
|
-
}
|
|
125
|
-
});
|
|
126
|
-
// 有节点缺 task.id:这些任务确实已提交但 CLI 无从轮询,不能装作等到了。
|
|
127
|
-
const incomplete = completed.filter((item) => item.task.status !== 'completed');
|
|
128
|
-
const payload = nodeIds.length === 1 && !pendingNodeIds.length
|
|
129
|
-
? completed[0]
|
|
130
|
-
: { submissions, tasks: completed };
|
|
131
|
-
const pendingReason = pendingNodeIds.length
|
|
132
|
-
? `服务端提交响应缺少 task id,无法轮询:${pendingNodeIds.join(', ')}`
|
|
133
|
-
: '';
|
|
134
|
-
this.print(withWaitState(payload, {
|
|
135
|
-
waited: !pendingNodeIds.length,
|
|
136
|
-
pendingNodeIds,
|
|
137
|
-
reason: pendingReason,
|
|
29
|
+
const completed = await mapConcurrent(tasks, flags.concurrency, async (item) => ({
|
|
30
|
+
nodeId: item.nodeId,
|
|
31
|
+
task: await api.waitTask(item.result.task.id, flags.interval),
|
|
138
32
|
}));
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
if (incomplete.length)
|
|
33
|
+
this.print(nodeIds.length === 1 ? completed[0]?.task ?? submissions[0].result : { submissions, tasks: completed });
|
|
34
|
+
if (completed.some((item) => item.task.status !== 'completed'))
|
|
142
35
|
this.error('部分任务未成功完成', { exit: 8 });
|
|
143
|
-
// --auto-select-version:节点成功跑完后,若 task.result 含 assetId + versionId,
|
|
144
|
-
// 自动调 canvas asset select-version,让下游 cvd 节点能读到 character profile。
|
|
145
|
-
// 服务端可能已经物化 resource,但 selectedOutputVersionId 不一定自动 set,所以
|
|
146
|
-
// 这里走显式 PATCH;只对 completed 的任务生效,避免在 failed 任务上误选。
|
|
147
|
-
if (flags['auto-select-version']) {
|
|
148
|
-
const selectedVersions = [];
|
|
149
|
-
for (const item of completed) {
|
|
150
|
-
if (item.task.status !== 'completed')
|
|
151
|
-
continue;
|
|
152
|
-
const assetId = item.task.result?.assetId;
|
|
153
|
-
const versionId = item.task.result?.versionId;
|
|
154
|
-
if (!assetId || !versionId)
|
|
155
|
-
continue;
|
|
156
|
-
try {
|
|
157
|
-
await api.selectAssetVersion(flags.project, assetId, versionId);
|
|
158
|
-
selectedVersions.push({ nodeId: item.nodeId, assetId, versionId });
|
|
159
|
-
}
|
|
160
|
-
catch (error) {
|
|
161
|
-
// 选版失败不阻塞主流程;仅 warn。
|
|
162
|
-
this.log(`warn: 节点 ${item.nodeId} 自动 select-version 失败:${error instanceof Error ? error.message : String(error)}`);
|
|
163
|
-
}
|
|
164
|
-
}
|
|
165
|
-
if (selectedVersions.length) {
|
|
166
|
-
// 在已经 print 过的 completed 输出之外,额外把 selectedVersion 列表输出,
|
|
167
|
-
// 让 agent 能立即知道哪个 nodeId 对应哪个 assetId/versionId。
|
|
168
|
-
// 不影响默认行为,仅 --auto-select-version=true 时出现。
|
|
169
|
-
this.log(`auto-selected versions: ${JSON.stringify(selectedVersions)}`);
|
|
170
|
-
}
|
|
171
|
-
}
|
|
172
36
|
}
|
|
173
37
|
}
|
|
@@ -10,7 +10,6 @@ export default class CanvasNodeTypes extends BaseCommand {
|
|
|
10
10
|
locale: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
|
|
11
11
|
profile: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
12
12
|
episode: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
13
|
-
output: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
14
13
|
};
|
|
15
14
|
run(): Promise<void>;
|
|
16
15
|
}
|
|
@@ -9,7 +9,6 @@ export default class CanvasNodeUpdateMany extends BaseCommand {
|
|
|
9
9
|
locale: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
|
|
10
10
|
profile: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
11
11
|
episode: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
12
|
-
output: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
13
12
|
};
|
|
14
13
|
run(): Promise<void>;
|
|
15
14
|
}
|
|
@@ -16,7 +16,6 @@ export default class CanvasNodeUpdate extends BaseCommand {
|
|
|
16
16
|
locale: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
|
|
17
17
|
profile: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
18
18
|
episode: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
19
|
-
output: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
20
19
|
};
|
|
21
20
|
run(): Promise<void>;
|
|
22
21
|
}
|
|
@@ -7,7 +7,6 @@ export default class CanvasSettingsGet extends BaseCommand {
|
|
|
7
7
|
locale: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
|
|
8
8
|
profile: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
9
9
|
episode: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
10
|
-
output: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
11
10
|
};
|
|
12
11
|
run(): Promise<void>;
|
|
13
12
|
}
|
|
@@ -7,41 +7,17 @@ type CanvasSettingsFlags = {
|
|
|
7
7
|
type ReadInput = (file?: string) => Promise<Record<string, unknown>>;
|
|
8
8
|
export declare function parseSettingFlagValue(value: string): unknown;
|
|
9
9
|
export declare function buildCanvasSettingsInput(flags: CanvasSettingsFlags, readInput?: ReadInput): Promise<Record<string, unknown>>;
|
|
10
|
-
/**
|
|
11
|
-
* 服务端把 productionCanvas.version 同时当作画布版本与 settings 乐观锁
|
|
12
|
-
* (src/lib/freeform-canvas/settings.ts),而任何画布节点写入都会 +1 这个 version。
|
|
13
|
-
* 因此 CLI 不能把「上一步读到的版本号」当成稳定基线:
|
|
14
|
-
* - 未显式给 expectedVersion:写前重读一次当前版本,冲突后最多自动重试 1 次;
|
|
15
|
-
* - 显式给 expectedVersion(含 --file/stdin 里自带该字段):保持严格乐观锁,
|
|
16
|
-
* 绝不静默重试,否则用户主动声明的并发保护会被悄悄绕过。
|
|
17
|
-
*/
|
|
18
|
-
export declare function isVersionConflict(error: unknown): boolean;
|
|
19
|
-
export interface CanvasSettingsWriteApi {
|
|
20
|
-
canvasSettings(projectId: string): Promise<Record<string, unknown>>;
|
|
21
|
-
updateCanvasSettings(projectId: string, input: Record<string, unknown>): Promise<Record<string, unknown>>;
|
|
22
|
-
}
|
|
23
|
-
export declare function writeCanvasSettingsWithVersionGuard(input: {
|
|
24
|
-
api: CanvasSettingsWriteApi;
|
|
25
|
-
projectId: string;
|
|
26
|
-
input: Record<string, unknown>;
|
|
27
|
-
explicitVersion?: number;
|
|
28
|
-
}): Promise<{
|
|
29
|
-
response: Record<string, unknown>;
|
|
30
|
-
retriedAfterConflict: boolean;
|
|
31
|
-
}>;
|
|
32
10
|
export default class CanvasSettingsSet extends BaseCommand {
|
|
33
11
|
static flags: {
|
|
34
12
|
project: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
|
|
35
13
|
field: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
36
14
|
value: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
37
15
|
file: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
38
|
-
'expected-version': import("@oclif/core/interfaces").OptionFlag<number | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
39
16
|
'base-url': import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
40
17
|
json: import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
41
18
|
locale: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
|
|
42
19
|
profile: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
43
20
|
episode: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
44
|
-
output: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
45
21
|
};
|
|
46
22
|
run(): Promise<void>;
|
|
47
23
|
}
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import { Flags } from '@oclif/core';
|
|
2
2
|
import { BaseCommand } from '../../../base-command.js';
|
|
3
|
-
import { CliApiError } from '../../../client/errors.js';
|
|
4
3
|
import { commandApi, projectFlag, readJsonInput } from '../../../command-helpers.js';
|
|
5
4
|
export function parseSettingFlagValue(value) {
|
|
6
5
|
const input = value.trim();
|
|
@@ -40,49 +39,6 @@ export async function buildCanvasSettingsInput(flags, readInput = readJsonInput)
|
|
|
40
39
|
return { values: { [flags.field]: parseSettingFlagValue(flags.value) } };
|
|
41
40
|
return readInput(flags.file);
|
|
42
41
|
}
|
|
43
|
-
/**
|
|
44
|
-
* 服务端把 productionCanvas.version 同时当作画布版本与 settings 乐观锁
|
|
45
|
-
* (src/lib/freeform-canvas/settings.ts),而任何画布节点写入都会 +1 这个 version。
|
|
46
|
-
* 因此 CLI 不能把「上一步读到的版本号」当成稳定基线:
|
|
47
|
-
* - 未显式给 expectedVersion:写前重读一次当前版本,冲突后最多自动重试 1 次;
|
|
48
|
-
* - 显式给 expectedVersion(含 --file/stdin 里自带该字段):保持严格乐观锁,
|
|
49
|
-
* 绝不静默重试,否则用户主动声明的并发保护会被悄悄绕过。
|
|
50
|
-
*/
|
|
51
|
-
export function isVersionConflict(error) {
|
|
52
|
-
return error instanceof CliApiError && error.status === 409;
|
|
53
|
-
}
|
|
54
|
-
function readSettingsVersion(response) {
|
|
55
|
-
const data = response?.data;
|
|
56
|
-
const version = data && typeof data === 'object' && !Array.isArray(data)
|
|
57
|
-
? data.version
|
|
58
|
-
: undefined;
|
|
59
|
-
return typeof version === 'number' ? version : undefined;
|
|
60
|
-
}
|
|
61
|
-
export async function writeCanvasSettingsWithVersionGuard(input) {
|
|
62
|
-
const { api, projectId } = input;
|
|
63
|
-
// 显式版本:严格模式,不预读也不重试。
|
|
64
|
-
if (input.explicitVersion !== undefined) {
|
|
65
|
-
return {
|
|
66
|
-
response: await api.updateCanvasSettings(projectId, { ...input.input, expectedVersion: input.explicitVersion }),
|
|
67
|
-
retriedAfterConflict: false,
|
|
68
|
-
};
|
|
69
|
-
}
|
|
70
|
-
let expectedVersion = readSettingsVersion(await api.canvasSettings(projectId));
|
|
71
|
-
try {
|
|
72
|
-
return {
|
|
73
|
-
response: await api.updateCanvasSettings(projectId, { ...input.input, expectedVersion }),
|
|
74
|
-
retriedAfterConflict: false,
|
|
75
|
-
};
|
|
76
|
-
}
|
|
77
|
-
catch (error) {
|
|
78
|
-
if (!isVersionConflict(error))
|
|
79
|
-
throw error;
|
|
80
|
-
// 写入与预读之间又有别的画布写入推进了版本:重读一次再重试,仅此一次。
|
|
81
|
-
expectedVersion = readSettingsVersion(await api.canvasSettings(projectId));
|
|
82
|
-
const response = await api.updateCanvasSettings(projectId, { ...input.input, expectedVersion });
|
|
83
|
-
return { response, retriedAfterConflict: true };
|
|
84
|
-
}
|
|
85
|
-
}
|
|
86
42
|
export default class CanvasSettingsSet extends BaseCommand {
|
|
87
43
|
static flags = {
|
|
88
44
|
...BaseCommand.baseFlags,
|
|
@@ -90,25 +46,10 @@ export default class CanvasSettingsSet extends BaseCommand {
|
|
|
90
46
|
field: Flags.string({ description: '要更新的设置字段;outputLanguage 支持 pt-BR 等 BCP 47 标签', dependsOn: ['value'], exclusive: ['file'] }),
|
|
91
47
|
value: Flags.string({ description: '字段值', dependsOn: ['field'], exclusive: ['file'] }),
|
|
92
48
|
file: Flags.string({ description: '设置 JSON 文件;省略时读取 stdin', exclusive: ['field', 'value'] }),
|
|
93
|
-
'expected-version': Flags.integer({
|
|
94
|
-
description: 'settings 乐观锁版本号。省略时 CLI 先读取当前版本再写,遇版本冲突自动重读重试一次(输出中标注 retriedAfterConflict)。显式传入则保持严格乐观锁,不预读、不重试。',
|
|
95
|
-
min: 0,
|
|
96
|
-
}),
|
|
97
49
|
};
|
|
98
50
|
async run() {
|
|
99
51
|
const { flags } = await this.parse(CanvasSettingsSet);
|
|
100
52
|
const { api } = await commandApi(flags);
|
|
101
|
-
|
|
102
|
-
const inputVersion = typeof settingsInput.expectedVersion === 'number'
|
|
103
|
-
? settingsInput.expectedVersion
|
|
104
|
-
: undefined;
|
|
105
|
-
const explicitVersion = flags['expected-version'] ?? inputVersion;
|
|
106
|
-
const { response, retriedAfterConflict } = await writeCanvasSettingsWithVersionGuard({
|
|
107
|
-
api,
|
|
108
|
-
projectId: flags.project,
|
|
109
|
-
input: settingsInput,
|
|
110
|
-
explicitVersion,
|
|
111
|
-
});
|
|
112
|
-
this.print(retriedAfterConflict ? { ...response, retriedAfterConflict: true } : response);
|
|
53
|
+
this.print(await api.updateCanvasSettings(flags.project, await buildCanvasSettingsInput(flags)));
|
|
113
54
|
}
|
|
114
55
|
}
|
|
@@ -6,7 +6,6 @@ export default class ConfigGet extends BaseCommand {
|
|
|
6
6
|
locale: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
|
|
7
7
|
profile: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
8
8
|
episode: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
9
|
-
output: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
10
9
|
};
|
|
11
10
|
run(): Promise<void>;
|
|
12
11
|
}
|
|
@@ -2,13 +2,11 @@ import { BaseCommand } from '../../base-command.js';
|
|
|
2
2
|
export default class ConfigSet extends BaseCommand {
|
|
3
3
|
static flags: {
|
|
4
4
|
file: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
5
|
-
verify: import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
6
5
|
'base-url': import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
7
6
|
json: import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
8
7
|
locale: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
|
|
9
8
|
profile: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
10
9
|
episode: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
11
|
-
output: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
12
10
|
};
|
|
13
11
|
run(): Promise<void>;
|
|
14
12
|
}
|
|
@@ -1,60 +1,7 @@
|
|
|
1
1
|
import { Flags } from '@oclif/core';
|
|
2
2
|
import { BaseCommand } from '../../base-command.js';
|
|
3
3
|
import { commandApi, readJsonInput } from '../../command-helpers.js';
|
|
4
|
-
// 服务端 GET /api/user/api-config 会自动"修复"无效的 defaultModels;客户端拿到
|
|
5
|
-
// success=true 但实际配置可能被覆盖。--verify 在 set 成功后立刻 GET 一次,
|
|
6
|
-
// 输出"用户请求值 vs 服务端实际值" diff,让 agent 能看到真相。
|
|
7
|
-
// 不影响默认行为;只是给 agent 一个验证工具。
|
|
8
4
|
export default class ConfigSet extends BaseCommand {
|
|
9
|
-
static flags = {
|
|
10
|
-
|
|
11
|
-
file: Flags.string({ description: '配置 JSON;省略时读取 stdin' }),
|
|
12
|
-
verify: Flags.boolean({
|
|
13
|
-
description: 'set 成功后立刻 GET 一次,diff 用户请求值 vs 服务端实际值。默认 false。',
|
|
14
|
-
default: false,
|
|
15
|
-
}),
|
|
16
|
-
};
|
|
17
|
-
async run() {
|
|
18
|
-
const { flags } = await this.parse(ConfigSet);
|
|
19
|
-
const { api } = await commandApi(flags);
|
|
20
|
-
const requested = await readJsonInput(flags.file);
|
|
21
|
-
const result = await api.updateConfig(requested);
|
|
22
|
-
if (!flags.verify) {
|
|
23
|
-
this.print(result);
|
|
24
|
-
return;
|
|
25
|
-
}
|
|
26
|
-
// --verify:再 GET 一次,把 effective vs requested diff 出来。
|
|
27
|
-
// 服务端会修复 invalid defaultModels / capabilityDefaults,所以 effective
|
|
28
|
-
// 可能 ≠ requested。这里**只递归遍历 requested 的 keys**,避免 effective
|
|
29
|
-
// 中多出的 models / providers / capabilityDefaults 等造成噪声。
|
|
30
|
-
const effective = (await api.config());
|
|
31
|
-
const diff = diffJsonRequested(requested, effective, '');
|
|
32
|
-
this.print({ requested, effective, diff });
|
|
33
|
-
}
|
|
34
|
-
}
|
|
35
|
-
// 只递归遍历 requested 的 keys;effective 中多余 keys 不输出。
|
|
36
|
-
// 这样客户端能直接看到"用户请求的字段"与"服务端实际值"的差异,不会被服务端
|
|
37
|
-
// 补充的默认值 / 自动修复字段污染 diff。
|
|
38
|
-
function diffJsonRequested(requested, effective, prefix) {
|
|
39
|
-
const out = [];
|
|
40
|
-
for (const key of Object.keys(requested ?? {})) {
|
|
41
|
-
const path = prefix ? `${prefix}.${key}` : key;
|
|
42
|
-
const r = (requested ?? {})[key];
|
|
43
|
-
const e = (effective ?? {})[key];
|
|
44
|
-
if (r === undefined)
|
|
45
|
-
continue;
|
|
46
|
-
if (e === undefined) {
|
|
47
|
-
out.push(`${path}: requested=${JSON.stringify(r)}, effective=<missing>`);
|
|
48
|
-
}
|
|
49
|
-
else if (isPlainObject(r) && isPlainObject(e)) {
|
|
50
|
-
out.push(...diffJsonRequested(r, e, path));
|
|
51
|
-
}
|
|
52
|
-
else if (JSON.stringify(r) !== JSON.stringify(e)) {
|
|
53
|
-
out.push(`${path}: requested=${JSON.stringify(r)}, effective=${JSON.stringify(e)}`);
|
|
54
|
-
}
|
|
55
|
-
}
|
|
56
|
-
return out;
|
|
57
|
-
}
|
|
58
|
-
function isPlainObject(value) {
|
|
59
|
-
return !!value && typeof value === 'object' && !Array.isArray(value);
|
|
5
|
+
static flags = { ...BaseCommand.baseFlags, file: Flags.string({ description: '配置 JSON;省略时读取 stdin' }) };
|
|
6
|
+
async run() { const { flags } = await this.parse(ConfigSet); const { api } = await commandApi(flags); this.print(await api.updateConfig(await readJsonInput(flags.file))); }
|
|
60
7
|
}
|
|
@@ -8,7 +8,6 @@ export default class Preflight extends BaseCommand {
|
|
|
8
8
|
locale: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
|
|
9
9
|
profile: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
10
10
|
episode: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
11
|
-
output: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
12
11
|
};
|
|
13
12
|
run(): Promise<void>;
|
|
14
13
|
}
|
|
@@ -18,15 +18,7 @@ export default class Preflight extends BaseCommand {
|
|
|
18
18
|
const bootstrap = await fetchBootstrap(baseUrl);
|
|
19
19
|
const current = await readCurrentPackageIdentity();
|
|
20
20
|
const hasUpdate = compareStableVersions(current.version, bootstrap.cli.latestVersion) < 0;
|
|
21
|
-
|
|
22
|
-
// 低于该版本即说明当前 CLI 与服务端契约不兼容 —— 强制升级(不可跳过,
|
|
23
|
-
// 与 hasUpdate 的软提示本质不同)。bump 时机由 cli-contract-gate 与
|
|
24
|
-
// CLI-Impact trailer 联动控制(verified-none 无需 bump;deferred 补
|
|
25
|
-
// 适配时随适配 PR bump)。
|
|
26
|
-
const minimum = bootstrap.cli.minCliVersion;
|
|
27
|
-
const forcedUpdate = minimum !== undefined && compareStableVersions(current.version, minimum) < 0;
|
|
28
|
-
const shouldUpdate = flags.update || forcedUpdate;
|
|
29
|
-
const version = shouldUpdate
|
|
21
|
+
const version = flags.update
|
|
30
22
|
? updateCliPackage({ current, latest: bootstrap.cli })
|
|
31
23
|
: {
|
|
32
24
|
updated: false,
|
|
@@ -8,7 +8,6 @@ export default class ProjectCreate extends BaseCommand {
|
|
|
8
8
|
locale: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
|
|
9
9
|
profile: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
10
10
|
episode: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
11
|
-
output: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
12
11
|
};
|
|
13
12
|
run(): Promise<void>;
|
|
14
13
|
}
|
|
@@ -10,7 +10,6 @@ export default class ProjectDelete extends BaseCommand {
|
|
|
10
10
|
locale: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
|
|
11
11
|
profile: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
12
12
|
episode: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
13
|
-
output: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
14
13
|
};
|
|
15
14
|
run(): Promise<void>;
|
|
16
15
|
}
|
|
@@ -9,7 +9,6 @@ export default class ProjectGet extends BaseCommand {
|
|
|
9
9
|
locale: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
|
|
10
10
|
profile: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
11
11
|
episode: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
12
|
-
output: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
13
12
|
};
|
|
14
13
|
run(): Promise<void>;
|
|
15
14
|
}
|
|
@@ -10,7 +10,6 @@ export default class ProjectList extends BaseCommand {
|
|
|
10
10
|
locale: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
|
|
11
11
|
profile: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
12
12
|
episode: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
13
|
-
output: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
14
13
|
};
|
|
15
14
|
run(): Promise<void>;
|
|
16
15
|
}
|
|
@@ -11,7 +11,6 @@ export default class ProjectUpdate extends BaseCommand {
|
|
|
11
11
|
locale: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
|
|
12
12
|
profile: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
13
13
|
episode: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
14
|
-
output: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
15
14
|
};
|
|
16
15
|
run(): Promise<void>;
|
|
17
16
|
}
|
|
@@ -11,7 +11,6 @@ export default class SkillInstall extends BaseCommand {
|
|
|
11
11
|
locale: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
|
|
12
12
|
profile: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
13
13
|
episode: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
14
|
-
output: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
15
14
|
};
|
|
16
15
|
run(): Promise<void>;
|
|
17
16
|
}
|
|
@@ -7,7 +7,6 @@ export default class SkillInstall extends BaseCommand {
|
|
|
7
7
|
async run() {
|
|
8
8
|
const { flags } = await this.parse(SkillInstall);
|
|
9
9
|
if (flags.directory) {
|
|
10
|
-
selectedSkillNames(flags.skill);
|
|
11
10
|
this.print(await installSkill({ target: flags.directory, force: flags.force }));
|
|
12
11
|
return;
|
|
13
12
|
}
|
|
@@ -10,7 +10,6 @@ export default class SkillPath extends BaseCommand {
|
|
|
10
10
|
locale: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
|
|
11
11
|
profile: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
12
12
|
episode: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
13
|
-
output: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
14
13
|
};
|
|
15
14
|
run(): Promise<void>;
|
|
16
15
|
}
|
|
@@ -10,7 +10,6 @@ export default class SkillStatus extends BaseCommand {
|
|
|
10
10
|
locale: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
|
|
11
11
|
profile: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
12
12
|
episode: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
13
|
-
output: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
14
13
|
};
|
|
15
14
|
run(): Promise<void>;
|
|
16
15
|
}
|
|
@@ -10,7 +10,6 @@ export default class TaskCancel extends BaseCommand {
|
|
|
10
10
|
locale: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
|
|
11
11
|
profile: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
12
12
|
episode: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
13
|
-
output: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
14
13
|
};
|
|
15
14
|
run(): Promise<void>;
|
|
16
15
|
}
|
|
@@ -9,7 +9,6 @@ export default class TaskGet extends BaseCommand {
|
|
|
9
9
|
locale: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
|
|
10
10
|
profile: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
11
11
|
episode: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
12
|
-
output: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
13
12
|
};
|
|
14
13
|
run(): Promise<void>;
|
|
15
14
|
}
|
|
@@ -7,13 +7,11 @@ export default class TaskWait extends BaseCommand {
|
|
|
7
7
|
task: import("@oclif/core/interfaces").OptionFlag<string[] | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
8
8
|
concurrency: import("@oclif/core/interfaces").OptionFlag<number, import("@oclif/core/interfaces").CustomOptions>;
|
|
9
9
|
interval: import("@oclif/core/interfaces").OptionFlag<number, import("@oclif/core/interfaces").CustomOptions>;
|
|
10
|
-
'max-wait-ms': import("@oclif/core/interfaces").OptionFlag<number, import("@oclif/core/interfaces").CustomOptions>;
|
|
11
10
|
'base-url': import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
12
11
|
json: import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
13
12
|
locale: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
|
|
14
13
|
profile: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
15
14
|
episode: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
16
|
-
output: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
17
15
|
};
|
|
18
16
|
run(): Promise<void>;
|
|
19
17
|
}
|
|
@@ -8,10 +8,6 @@ export default class TaskWait extends BaseCommand {
|
|
|
8
8
|
task: Flags.string({ description: '任务 ID,可重复指定以批量等待', multiple: true }),
|
|
9
9
|
concurrency: Flags.integer({ description: '批量轮询并发数', default: 4, min: 1, max: 16 }),
|
|
10
10
|
interval: Flags.integer({ default: 1000 }),
|
|
11
|
-
'max-wait-ms': Flags.integer({
|
|
12
|
-
description: '单次 waitTask 最大等待毫秒数;0 表示不超时(保留旧行为)。',
|
|
13
|
-
default: 0,
|
|
14
|
-
}),
|
|
15
11
|
};
|
|
16
12
|
async run() {
|
|
17
13
|
const { args, flags } = await this.parse(TaskWait);
|
|
@@ -19,8 +15,7 @@ export default class TaskWait extends BaseCommand {
|
|
|
19
15
|
if (!taskIds.length)
|
|
20
16
|
throw new Error('请提供 taskId 或至少一个 --task');
|
|
21
17
|
const { api } = await commandApi(flags);
|
|
22
|
-
const
|
|
23
|
-
const tasks = await mapConcurrent(taskIds, flags.concurrency, async (taskId) => await api.waitTask(taskId, flags.interval, { maxWaitMs }));
|
|
18
|
+
const tasks = await mapConcurrent(taskIds, flags.concurrency, async (taskId) => await api.waitTask(taskId, flags.interval));
|
|
24
19
|
this.print(tasks.length === 1 ? tasks[0] : { tasks });
|
|
25
20
|
if (tasks.some((task) => task.status !== 'completed'))
|
|
26
21
|
this.error('部分任务未成功完成', { exit: 8 });
|