Branch:
feature_apikey
TEST-s
TEST-x
codex/popi-tv-header-logo
feature/071
feature/0710
feature/260608
feature/627
feature/add_agent_md
feature/add_provider_popi
feature/canvas-chatbot-copilot
feature/composer
feature/gateway
feature/group
feature/handle
feature/handleReconstruction
feature/interaction
feature/new_node
feature/remove
feature/workflow
feature_apikey
feature_gateway-migration
feature_login
handoff-20260429-1057
master
songxh-popiart-node-canvas
test-0523
video_node
xuzhijie-popiart-node-canvas
${ noResults }
19 Commits (feature_apikey)
| Author | SHA1 | Message | Date |
|---|---|---|---|
|
|
f4179a4623 |
增加打印日志
|
2 months ago |
|
|
7f0d615444 |
Make output nodes expose connected media results
Output nodes were collapsing multiple connected media inputs into one visible result, which made image/video/audio/3D connections look ignored. The node now preserves each connected media kind and presents explicit result switching with current/all download actions. Constraint: Output node remains a result endpoint and does not transform media or create hidden downstream behavior Rejected: Auto-merge media into one combined preview | would hide workflow structure and violate the endpoint-only product model Confidence: high Scope-risk: moderate Directive: Keep output node behavior as explicit result display; route further processing through visible downstream nodes Tested: npm test -- --run src/components/__tests__/OutputNode.test.tsx src/store/execution/__tests__/simpleNodeExecutors.test.ts Tested: npm run build Tested: npm run test:run Tested: Playwright localhost smoke with no page or console errors |
2 months ago |
|
|
d81e035299 |
Align canvas media workflow with Popi-only product direction
The accumulated fixes move the test build toward the current product shape: Popi models are the default provider surface, remote community workflow APIs are removed from the local template flow, media nodes expose accurate preview/preview-modal behavior, and Generate Video owns first-class duration, resolution, and sound defaults instead of burying those values in provider schemas. The test suite was brought back in line with the product mode split: Popi provider mode is the default runtime, while multi-provider model search remains covered explicitly under multi mode. Constraint: Product direction is canvas-owned workflow structure with Popi Models as the tested default provider path. Rejected: Keep legacy community workflow API surface | user requested removing remote data paths and retaining local templates. Rejected: Treat video duration/resolution/sound as hidden provider params | these are user-facing Generate Video controls. Confidence: high Scope-risk: broad Directive: Do not reintroduce remote community template loading without a product decision on hosted templates and i18n ownership. Tested: npm test -- --run src/store/utils/__tests__/nodeDefaults.test.ts src/store/execution/__tests__/generateVideoExecutor.test.ts src/components/__tests__/GenerateVideoNode.test.tsx src/components/__tests__/GenerationComposer.test.tsx Tested: npm run build Tested: npm test -- --run src/components/__tests__/ModelSearchDialog.test.tsx src/store/utils/__tests__/localStorage.test.ts Tested: npm run test:run Not-tested: Live provider generation calls against paid external APIs. |
2 months ago |
|
|
87b56a4d3f |
Keep new Popi users on tested gateway defaults
New users now land on Popi gateway defaults that match the tested production-style path: APIYI Nano Banana 2 for images, Doubao Seedance for video, and Doubao Seed 2.0 Lite for LLM chat/tool use. Settings and FTUX screens render these effective defaults instead of empty placeholders, while existing local node defaults keep taking precedence. The same pass keeps provider-overload errors user-facing by formatting the model name that the node currently displays, so fallback and switched-model failures are easier to understand across media nodes. Constraint: Popi mode should hide internal NewApiWG naming and default to models available through the Popi gateway. Rejected: Persist default values into localStorage for every new user | would make future system default changes harder and could overwrite explicit user preferences. Confidence: high Scope-risk: moderate Directive: Do not change these defaults without checking the Popi gateway model ids and www.popi.art login/model-routing assumptions. Tested: npm run test:run -- src/lib/__tests__/llmModels.test.ts src/store/utils/__tests__/nodeDefaults.test.ts src/store/execution/__tests__/generateVideoExecutor.test.ts src/components/__tests__/ProjectSetupModal.test.tsx src/components/__tests__/GenerationComposer.test.tsx src/app/api/chat/__tests__/route.test.ts src/components/__tests__/LLMGenerateNode.test.tsx src/utils/__tests__/userFacingErrors.test.ts Tested: PROVIDER_MODE=popi NEXT_PUBLIC_PROVIDER_MODE=popi npm run build Tested: git diff --check Not-tested: npm run lint currently fails because next lint is no longer a valid project command in this Next.js setup |
2 months ago |
|
|
efee30391f |
Make the canvas assistant safe enough to edit and run workflows
The right-side assistant now uses the existing chat/tooling path as a docked canvas surface instead of a hidden floating experiment. It can prepare workflow edits, prepare run actions, and keep all mutations behind an explicit preview/apply step. A shared chat node schema keeps the model prompt and local edit validator aligned with real node types, while the context builder strips broader media payloads before chat requests. Constraint: Keep the deployed master/TEST-s version stable while this work proceeds on a feature branch Constraint: No new dependencies and no broad canvas rewrite Rejected: Directly applying model-suggested edits | local validation and preview remain the safety boundary Rejected: Full multimodal image upload in the first pass | current implementation only exposes media metadata and failure state Confidence: high Scope-risk: moderate Reversibility: clean Directive: Add new AI-editable node fields through src/lib/chat/nodeSchema.ts before exposing them in prompts Tested: npm run test:run -- src/lib/chat/contextBuilder.test.ts src/lib/chat/tools.test.ts src/lib/chat/editOperations.test.ts src/components/__tests__/ChatPanel.test.tsx src/components/__tests__/WorkflowCanvas.test.tsx src/app/api/chat/__tests__/route.test.ts Tested: PROVIDER_MODE=popi NEXT_PUBLIC_PROVIDER_MODE=popi npm run build Tested: Browser smoke on http://localhost:3000 verified docked assistant, close/reopen, selected-node focus, and run controls Not-tested: Live LLM tool-call execution against the gateway |
2 months ago |
|
|
6ca4406ee9 |
Consolidate the product around the Popi model gateway
Default provider mode now exposes only Popi Models while preserving the existing multi-provider implementation behind an explicit multi mode. The model browser, project settings, onboarding, node badges, and model API all share the same provider-mode decision so the test deployment matches the www.popi.art login-aligned direction. This also includes the pending UI and i18n node-label changes already present in the tracked worktree so the committed state matches the verified build. Constraint: Product entry must align with www.popi.art by exposing Popi Models instead of internal NewApiWG naming Constraint: Test deployment should match the full tracked working tree that passed build Rejected: Delete legacy provider code | multi-provider internals remain useful behind PROVIDER_MODE=multi Rejected: UI-only hiding | API and store layers now enforce Popi mode too Confidence: high Scope-risk: broad Reversibility: clean Directive: Keep NewApiWG as the internal provider id unless the gateway API/env contract is migrated Tested: npm run test:run -- src/components/__tests__/ProjectSetupModal.test.tsx src/app/api/models/__tests__/route.test.ts src/lib/__tests__/llmModels.test.ts Tested: npm run test:run -- src/components/__tests__/GenerateImageNode.test.tsx src/components/__tests__/GenerateVideoNode.test.tsx src/components/__tests__/GenerateAudioNode.test.tsx src/components/__tests__/Generate3DNode.test.tsx src/components/__tests__/LLMGenerateNode.test.tsx Tested: npm run test:run -- src/lib/chat/tools.test.ts Tested: PROVIDER_MODE=popi NEXT_PUBLIC_PROVIDER_MODE=popi npm run build Tested: Browser smoke on http://localhost:3000 verified Project Settings and Model Search only expose Popi Models Not-tested: Direct npx tsc --noEmit remains blocked by pre-existing test typing errors outside this change |
2 months ago |
|
|
5206e1472e |
Localize annotation controls
|
2 months ago |
|
|
f54266f150 |
Preserve explicit media workflow handoffs
P0 regressions showed several workflow paths needed to stay visible and deterministic: language switching had a hardcoded composer label, Video Trim hid controls before media loaded, and media handoffs to LLM needed real canvas edges rather than implicit conversion. P1 fixes keep canvas-owned structure by adding explicit image/video LLM handles, audio composer validation, 3D output/file routing, and Chat proposal cards that require user apply before mutating nodes. Constraint: User asked to stop new feature work and only repair P0/P1 product-fit gaps. Rejected: Auto-convert image or video directly into text for LLM | hides workflow structure and violates the visible-node product model. Rejected: Let Chat tool calls silently add or edit nodes | canvas structure must be previewed and explicitly applied. Confidence: high Scope-risk: moderate Directive: Keep media transformations represented by visible handles, nodes, and edges; do not add silent Chat or media mutation paths without product review. Tested: Browser automation for language switch, video input to Generate Video, prompt to Generate Video, LLM default model, Video Trim controls, and video media to LLM input. Tested: npm run test:run -- src/components/__tests__/ConnectionDropMenu.test.tsx src/components/__tests__/GenerationComposer.test.tsx src/components/__tests__/VideoTrimNode.test.tsx src/components/__tests__/LLMGenerateNode.test.tsx src/store/execution/__tests__/llmGenerateExecutor.test.ts src/app/api/llm/__tests__/route.test.ts src/store/execution/__tests__/generateAudioExecutor.test.ts src/store/execution/__tests__/generate3dExecutor.test.ts src/store/execution/__tests__/simpleNodeExecutors.test.ts src/components/__tests__/OutputNode.test.tsx src/components/__tests__/Generate3DNode.test.tsx src/components/__tests__/ChatPanel.test.tsx src/lib/chat/tools.test.ts src/lib/chat/editOperations.test.ts src/lib/__tests__/llmModels.test.ts src/store/utils/__tests__/nodeDefaults.test.ts Tested: npm run build Tested: git diff --cached --check Not-tested: npm run lint, because the existing script calls removed Next.js lint command and exits with invalid project directory /lint. Not-tested: Live paid provider calls for LLM, audio, and 3D generation. |
2 months ago |
|
|
ca0b039a88 |
Restore reliable high-priority generation paths
P0/P1 reports clustered around unavailable LLM defaults, video media connections, and missing controls on the generation surface. This routes the default NewApiWG LLM away from the unavailable Doubao channel, makes video a first-class schema and canvas connection type, carries request ids into node errors, and fills the composer, trim, audio, and 3D gaps without changing the canvas workflow model. Constraint: NewApiWG Doubao channels are not reliably routed in the default gateway Constraint: Video model schemas expose video fields that must not flow through image handles Rejected: Continue accepting video through image handles | hides incorrect graph types and loses schema-specific dynamic inputs Confidence: high Scope-risk: moderate Directive: Keep media handle types explicit; add schema mapping when adding a new connectable media type Tested: npm run test:run -- src/store/execution/__tests__/generateVideoExecutor.test.ts src/store/utils/__tests__/connectedInputs.test.ts src/store/execution/__tests__/generateAudioExecutor.test.ts src/store/execution/__tests__/llmGenerateExecutor.test.ts src/store/__tests__/workflowStore.integration.test.ts src/lib/__tests__/llmModels.test.ts src/store/utils/__tests__/nodeDefaults.test.ts src/components/__tests__/GenerationComposer.test.tsx src/app/api/chat/__tests__/route.test.ts src/app/api/llm/__tests__/route.test.ts src/app/api/models/[modelId]/__tests__/route.test.ts src/app/api/generate/providers/__tests__/newapiwg.test.ts Tested: npm run build Tested: git diff --check Not-tested: npm run lint | package script calls removed Next 16 next lint command Not-tested: npx tsc --noEmit | existing test type errors remain; changed runtime files filtered clean |
2 months ago |
|
|
6365b511d6 |
Keep web projects on the operator device
The hosted app should not save each operator's project into the shared test server filesystem when the browser can grant local folder access. Project creation now requires a browser-selected local folder in supported browsers, remembers that folder as the project browser root, and the workflow browser can list and load projects from File System Access handles. Server filesystem APIs remain as a fallback for unsupported browsers. Constraint: Hosted users need per-operator local project storage instead of shared server paths. Rejected: Keep manual absolute path entry on supported browsers | it can silently target the server filesystem in the deployed app. Confidence: high Scope-risk: moderate Directive: Do not re-enable server path entry for hosted browsers without adding per-user isolation and auth boundaries. Tested: npm test -- --run src/components/__tests__/ProjectSetupModal.test.tsx src/components/__tests__/QuickstartTemplatesView.test.tsx src/store/utils/__tests__/localStorage.test.ts Tested: npx tsc --noEmit --pretty false filtered to changed files |
2 months ago |
|
|
f5cf6017a0 |
Route generation defaults through NewApiWG
This aligns image, video, and text defaults with the PopiArt NewApi gateway while keeping provider-specific escape hatches available. Chat now uses the OpenAI-compatible NewApiWG route so workflow editing and LLM generation share the same Doubao-first text default. The canvas composer and quick-add controls are tightened so visible actions map to real clickable behavior, while temporarily unused header actions stay hidden. Constraint: Text/chat requests must prefer Doubao-Seed-2.0-lite through NewApiWG. Constraint: Image and video defaults should prefer PopiArt NewApi gateway models when configured. Rejected: Keep /api/chat on Gemini 3 Flash | conflicts with the requested NewApiWG text/chat default. Rejected: Hand-roll AI SDK chat streaming | would risk tool-call and UI stream compatibility. Confidence: high Scope-risk: moderate Directive: Do not add new text/chat defaults without updating src/lib/llmModels.ts and the chat route together. Tested: npm test -- --run src/app/api/chat/__tests__/route.test.ts src/components/__tests__/LLMGenerateNode.test.tsx src/lib/__tests__/llmModels.test.ts src/store/utils/__tests__/nodeDefaults.test.ts src/components/__tests__/GenerationComposer.test.tsx src/lib/chat/tools.test.ts Tested: npm test -- --run src/lib/__tests__/llmModels.test.ts src/store/utils/__tests__/nodeDefaults.test.ts src/components/__tests__/GenerationComposer.test.tsx src/lib/quickstart/__tests__/templates.test.ts src/lib/quickstart/__tests__/validation.test.ts src/lib/quickstart/__tests__/prompts.test.ts src/components/__tests__/ProjectSetupModal.test.tsx Tested: npm test -- --run src/components/__tests__/WorkflowCanvas.test.tsx Not-tested: Full suite; repository has pre-existing unrelated type/test warnings outside this change. |
2 months ago |
|
|
bc1a2d42d7 |
调整图片多角度入口到连接菜单
|
2 months ago |
|
|
e009cb5046 |
Clarify processing-node controls in the composer
The bottom composer now treats video stitch and ease curve as processing-node inspectors instead of unsupported prompt editors. The connection menu also keeps video streams and ease-curve settings on separate handle paths so downstream creation matches the node graph semantics. Constraint: Processing nodes should run existing local media operations and must not expose model or prompt controls Constraint: Ease curve Settings handles carry curve parameters, not video media Rejected: Let Settings handles reuse generic video/text drop options | creates misleading nodes and invalid graph intent Rejected: Make Video Input a downstream target from Video Out | Video Input is an import/source node, not a processing destination Confidence: high Scope-risk: moderate Directive: Keep media handles and settings handles separated in connection menus and validation Tested: npm run test:run -- src/components/__tests__/ConnectionDropMenu.test.tsx Tested: npm run test:run -- src/components/__tests__/GenerationComposer.test.tsx Tested: npm run test:run -- src/components/__tests__/WorkflowCanvas.test.tsx Tested: npm run build Tested: git diff --check Not-tested: npm run lint still uses the existing Next 16-incompatible next lint script |
2 months ago |
|
|
95e152842b |
Make the canvas composer the selected-node console
The bottom composer now edits and reruns the current generation node while canvas-visible actions own downstream node creation. NewApiWG media normalization, video frame extraction, and node quick-add keep generated media flows explicit and connected rather than hidden behind the prompt box. Constraint: Composer must not call providers directly or create hidden downstream branches when a node is selected Constraint: NewApiWG video families use inconsistent media schemas, so common media aliases are normalized in the provider adapter Rejected: Let the bottom composer create next-step nodes from selected outputs | hides graph mutation and conflicts with the PRD source-of-truth rules Rejected: Put NewApiWG model-family payload rules in the composer | provider-specific schemas would leak into UI state Confidence: high Scope-risk: moderate Directive: Keep provider payload normalization in provider/executor layers; do not move it into GenerationComposer Tested: npm run test:run -- src/components/__tests__/GenerationComposer.test.tsx Tested: npm run test:run -- src/components/__tests__/WorkflowCanvas.test.tsx Tested: npm run test:run -- src/components/__tests__/GenerateVideoNode.test.tsx Tested: npm run test:run -- src/app/api/generate/providers/__tests__/newapiwg.test.ts src/app/api/generate/__tests__/route.test.ts Tested: npm run test:run -- src/store/execution/__tests__/videoProcessingExecutors.test.ts Tested: npm run build Not-tested: npm run lint fails because next lint is incompatible with the current Next 16 script configuration |
2 months ago |
|
|
53fb160d03 |
Make NewApiWG media models usable end to end
NewApiWG image and video models need to work against the PopiArt test gateway, with generated remote media visible in the canvas and UI text localized for Chinese users. This wires the gateway-specific image/video paths, model fallback display, remote media proxying, and related i18n cleanup into one releaseable change. Constraint: Test gateway exposes image and video models through mixed OpenAI-compatible and Gemini-native response shapes Constraint: Browser video playback can fail when loading signed third-party media URLs directly Rejected: Keep remote video URLs as direct <video> sources | CORS and range handling made successful generations appear unloaded Confidence: high Scope-risk: moderate Directive: Do not remove the media proxy without validating remote video playback, trimming, and stitching against signed CDN URLs Tested: npm run build Tested: npx vitest run src/components/__tests__/OutputNode.test.tsx src/components/__tests__/GenerateVideoNode.test.tsx src/components/__tests__/VideoStitchNode.test.tsx Tested: npx vitest run src/components/__tests__/WorkflowCanvas.test.tsx src/store/execution/__tests__/generateVideoExecutor.test.ts Tested: npx vitest run src/app/api/generate/providers/__tests__/newapiwg.test.ts Not-tested: Live browser replay after pushing to remote deployment |
3 months ago |
|
|
7c2c9b0bc9 |
feat: adapt NewApiWG model capabilities
|
3 months ago |