Initial TrueGrowth source import

This commit is contained in:
2026-07-07 09:36:36 +08:00
commit 3b6781d695
2283 changed files with 691996 additions and 0 deletions

View File

@@ -0,0 +1,173 @@
## ADDED Requirements
### Requirement: Unified Asset Center
The system SHALL expose a first-class "资产中心" that replaces the old navigation-facing "素材库" while preserving the real media-library data source.
#### Scenario: User opens the asset center
- **WHEN** the user opens `/assets`
- **THEN** the page title and navigation label show "资产中心"
- **AND** the page provides first-level sections for "素材", "作品", and "已发布"
- **AND** the page keeps media filters for image, video, and audio assets
#### Scenario: Published assets are filtered by state
- **GIVEN** an asset was included in a successful publish target
- **WHEN** the user opens the "已发布" asset section
- **THEN** the asset is visible through its published marker
- **AND** the system does not create a duplicate copied asset library
#### Scenario: Asset source tags are available
- **WHEN** assets are displayed or selected for publishing
- **THEN** the system can distinguish source tags for "主体", "本地", "AI", "数字人", and "剪辑"
- **AND** legacy assets without new metadata remain compatible by falling back to local or AI source information
### Requirement: Auto Publishing Navigation
The system SHALL provide a first-class workbench entry named "自动发布" in the left navigation and application center.
#### Scenario: User opens auto publishing
- **WHEN** the user clicks "自动发布" in the left navigation
- **THEN** the workbench shows the auto publishing workspace
- **AND** the page uses the same visual system, navigation behavior, theme behavior, and responsive layout conventions as the existing workbench pages
### Requirement: Unified Finished Asset Hub
The system SHALL aggregate publishable finished image and video outputs from digital avatar, AI canvas, AI image, AI video, clipping, media library, and task/history sources into the asset center and publish-task selector.
#### Scenario: Completed generated media appears in the hub
- **GIVEN** an image or video generation task has completed with a result URL, thumbnail, or local asset reference
- **WHEN** the user opens the asset center "作品" view or the publish-task asset selector
- **THEN** the media appears as a publishable asset
- **AND** the item shows its media type, source module, title, created time, preview, and existing publish state
#### Scenario: Duplicate media is normalized
- **GIVEN** the same media is visible through task history and the media library
- **WHEN** the finished asset hub is loaded
- **THEN** the media appears once
- **AND** the item keeps references to every known source record
### Requirement: Multiple Social Account Authorization
The system SHALL let users manage multiple authorized accounts per social channel.
#### Scenario: User authorizes a channel account
- **WHEN** the user starts login for a supported channel account alias
- **THEN** the system starts the local social upload authorization flow
- **AND** the account row records platform, alias, status, last check time, and supported publishing capabilities
- **AND** the frontend does not store raw cookies or secrets
#### Scenario: User checks account status
- **WHEN** the user checks an existing account
- **THEN** the system verifies authorization through the local social upload bridge
- **AND** the UI shows whether the account is available, expired, failed, or needs user action
#### Scenario: Account list loads before validation completes
- **WHEN** the user opens account authorization
- **THEN** the system may show cached or quick-loaded account rows immediately
- **AND** slower authorization validation updates each row without blocking the page
#### Scenario: Login requires QR or browser action
- **WHEN** the local bridge reports QR data, browser-login progress, or a user-action message
- **THEN** the account dialog shows that progress in place
- **AND** updates the account row when the bridge reports success or failure
### Requirement: Multi-Channel Publish Composer
The system SHALL allow users to select one or more assets from the asset center or local upload and create a publish draft targeting multiple channels and accounts.
#### Scenario: User prepares a video campaign
- **GIVEN** the user selected a video asset
- **WHEN** the user selects multiple authorized channel accounts and enters title, description, tags, and optional schedule time
- **THEN** the composer validates channel requirements
- **AND** the user can enqueue one campaign containing one publish target per selected account
#### Scenario: User prepares an image-note campaign
- **GIVEN** the user selected one or more image assets
- **WHEN** the user selects channels that support image-note publishing and enters title, note body, tags, and optional schedule time
- **THEN** the composer validates channel requirements
- **AND** unsupported channels are disabled or reported before submission
#### Scenario: User manages multiple campaign drafts
- **WHEN** the user creates several publishing drafts before submission
- **THEN** the composer keeps each draft's selected assets, accounts, platform options, title, text, topics, and schedule independently
- **AND** the user can submit drafts individually or as a batch
#### Scenario: User chooses generated or uploaded material
- **WHEN** the user adds media to a draft
- **THEN** the system offers asset-center content first
- **AND** allows local upload fallback for media that was not generated in TrueGrowth
#### Scenario: User opens publish center
- **WHEN** the user opens `/publish`
- **THEN** only "发布任务" and "账号授权" tabs are visible
- **AND** "发布任务" is the default view
- **AND** publish records are shown beside the publish form, not as a separate tab
#### Scenario: User drafts social copy
- **WHEN** the user edits a video description or image-note body
- **THEN** the system provides knowledge-base fill and an intelligent copywriting dialog
- **AND** generated copy is shaped for external social publishing rather than internal generation prompts
### Requirement: Social Auto Upload Runtime Bridge
The system SHALL integrate bundled `vendor/social-auto-upload` source through a local runtime bridge compatible with the upstream `sau` command flow.
#### Scenario: Runtime resolves bundled sau
- **WHEN** the local runtime starts or checks publishing status
- **THEN** it resolves `sau` from `SOCIAL_AUTO_UPLOAD_COMMAND` only when explicitly configured for development
- **AND** otherwise runs the bundled `vendor/social-auto-upload/sau_cli.py`
- **AND** it does not depend on a system PATH `sau`
#### Scenario: Bundled sau source is missing
- **WHEN** `vendor/social-auto-upload` or its CLI entry is missing
- **THEN** the runtime reports an internal bundled publishing module error
- **AND** the UI must not instruct the user to install `sau` manually
#### Scenario: Runtime invokes video upload
- **GIVEN** a publish target uses a channel account with video upload support
- **WHEN** the job starts
- **THEN** the runtime materializes the media to a local file if needed
- **AND** invokes the equivalent `sau <platform> upload-video` command with account, file, title, description, tags, and supported channel options
- **AND** streams status and logs back to the workbench
#### Scenario: Runtime invokes image-note upload
- **GIVEN** a publish target uses a channel account with image-note support
- **WHEN** the job starts
- **THEN** the runtime invokes the equivalent `sau <platform> upload-note` command with account, image files, title, note body, tags, and supported channel options
- **AND** streams status and logs back to the workbench
#### Scenario: Runtime maps channel-specific options
- **GIVEN** a target includes supported options such as schedule time, cover image, Bilibili partition, Douyin product link, Douyin product title, original declaration, or draft-only intent
- **WHEN** the runtime builds the upload command
- **THEN** it passes only the options supported by that target channel
- **AND** records omitted unsupported options in validation output before the job starts
### Requirement: Publish Job Tracking
The system SHALL track publishing campaigns and per-channel jobs from draft submission through completion.
#### Scenario: One target fails in a multi-channel campaign
- **GIVEN** a campaign has multiple publish targets
- **WHEN** one target fails and another succeeds
- **THEN** the campaign remains visible with mixed status
- **AND** each target shows its own status, error/log summary, retry action, and source asset reference
#### Scenario: User retries a failed target
- **GIVEN** a publish target failed
- **WHEN** the user retries it
- **THEN** the system reuses the original asset and target metadata
- **AND** appends a new attempt to the target history
#### Scenario: User cancels batch publishing
- **GIVEN** multiple campaign drafts are being submitted as a batch
- **WHEN** the user cancels the batch
- **THEN** the system stops enqueueing remaining drafts where possible
- **AND** shows completed, failed, cancelled, and not-started target counts separately
### Requirement: Channel Capability Guardrails
The system SHALL expose platform-specific publishing capabilities and prevent invalid submissions.
#### Scenario: Unsupported schedule is selected
- **GIVEN** a selected channel does not support scheduled publishing through the configured bridge
- **WHEN** the user selects a scheduled publish time
- **THEN** the composer warns that the target cannot use scheduling
- **AND** the target must be changed, excluded, or switched to immediate publish before enqueueing
#### Scenario: Unsupported media type is selected
- **GIVEN** a selected channel account does not support the selected media type
- **WHEN** the user validates the draft
- **THEN** the target is marked invalid
- **AND** no job is created for that target until the issue is resolved