Tree:
7d32fc9e3b
TEST-s
TEST-x
codex/popi-tv-header-logo
feature-img
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/video-erase
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 }
10 Commits (7d32fc9e3ba3cc3b7856e8769a8618687ac8c21d)
| Author | SHA1 | Message | Date |
|---|---|---|---|
|
|
9c64d38452 |
Align node editing with the canvas-first generation flow
This keeps the testing branch aligned with the current Popi.TV interaction direction: generation is controlled from the selected node context, model/provider selection is simplified around the NewAPI gateway path, Popiai embedding can hydrate workflow state, and media nodes expose names plus dimensions in the canvas header. Constraint: Testing branch needs the full current source state, not runtime logs or local browser artifacts Rejected: Commit logs, browserfs state, and handoff bundles | they are local runtime artifacts rather than application source Confidence: high Scope-risk: moderate Reversibility: clean Directive: Keep model selection consolidated around the NewAPI gateway unless supplier-specific behavior is intentionally reintroduced Tested: npm run test:run -- src/components/__tests__/FloatingNodeHeader.test.tsx src/components/__tests__/nodeHeaderMedia.test.ts src/components/__tests__/WorkflowCanvas.test.tsx Tested: npm run test:run -- src/components/__tests__/ImageInputNode.test.tsx src/components/__tests__/GenerateVideoNode.test.tsx src/components/__tests__/GenerateImageNode.test.tsx Tested: npm run build Tested: git diff --check -- src Not-tested: npm run lint | existing script uses next lint and resolves to nonexistent ./lint directory |
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 |
|
|
c2bf435d19 |
Use routable Doubao LLM model ids
The LLM selector exposed display-style Doubao model names that the NewApiWG test gateway cannot route. The UI now stores the gateway model ids returned by /models, while the API route maps legacy saved selector values to those ids so existing workflows do not keep failing. Constraint: Preserve GPT-4.1 Mini as the NewApiWG default and keep old workflow JSON compatible. Rejected: Remove Doubao from the LLM selector | the gateway exposes working Doubao chat model ids, so the issue is stale ids rather than product support. Confidence: high Scope-risk: narrow Directive: LLM selector values must be callable provider ids; use labels only for display text. Tested: Live NewApiWG chat completion with doubao-seed-2-0-lite-260428 and doubao-seed-2-0-pro-260215. Tested: npm run test:run -- src/lib/__tests__/llmModels.test.ts src/app/api/llm/__tests__/route.test.ts src/components/__tests__/LLMGenerateNode.test.tsx src/store/utils/__tests__/nodeDefaults.test.ts Tested: npm run build Tested: git diff --check |
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 |
|
|
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 |
|
|
b1ee33ed37 |
test: remove redundant and brittle component tests
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> |
4 months ago |
|
|
d22bc0b781 |
feat: parallel workflow execution for independent nodes
- Add level-based topological sort (groupNodesByLevel) to identify nodes that can execute concurrently - Change state from currentNodeId to currentNodeIds[] for tracking multiple executing nodes - Execute nodes in batches using Promise.allSettled with configurable concurrency limit (default 3, adjustable 1-10) - Integrate AbortController for fail-fast cancellation on errors - Pass abort signals to API fetch calls for proper request cancellation - Update UI: multiple nodes show execution border, FloatingActionBar shows "N nodes" during parallel execution - Add concurrency slider in Project Settings > Node Defaults tab - Store concurrency preference in localStorage Workflows with independent generate nodes (e.g., 3 parallel image generations) now complete in ~20-25s instead of ~60-90s sequential. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com> |
5 months ago |
|
|
fa481498cd |
feat: improve LLM and prompt node functionality
LLMGenerateNode improvements: - Add collapsible parameters section with temperature and max tokens sliders - Add copy to clipboard button for output text - Clean up UI organization PromptNode improvements: - Add text input handle to receive incoming text connections - Auto-populate prompt when connected to a text source (e.g., another LLM) ConnectionDropMenu: - Add Prompt as a target option for text connections ProjectSetupModal: - Add max tokens slider for LLM default settings Test updates: - Update mocks to include edges and getConnectedInputs - Fix tests for collapsible parameters section - Update wrap-around test for new menu options Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com> |
6 months ago |
|
|
9b4718e279 |
feat: Template Explorer, Comment Navigation, and Output Node Improvements
## Template Explorer Enhancements - Add rich metadata and thumbnails for community workflows - Create communityWorkflows.ts config for workflow metadata - Reuse TemplateCard for community workflows with tag filtering - Search now includes workflow descriptions ## Comment Navigation System - Add comment navigation icon in header with unviewed count badge - Navigate between nodes with comments using prev/next controls - Tooltips show comment preview on hover ## Output Node Improvements - Add custom filename and createDirectory options for output saves - Remove default React Flow styling from output nodes - Fix video output node connections - Preserve node height on resize ## Image Handling Fixes - Resolve image history race condition and duplicate images on save - Preserve image history IDs when saving to new directory - Verify outputImageRef matches selected history index on save - Persist useExternalImageStorage setting in workflow config - Paste images directly into selected imageInput nodes ## Model & Generation Fixes - Use selectedModel.modelId for Gemini generation - Return 200 with notFound flag instead of 404 for missing files ## Other - Add git-lfs tracking for large workflow files - Remove deprecated example workflows Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com> |
6 months ago |
|
|
6669ee080f |
test(17-04): add LLMGenerateNode component tests
- Basic rendering with title and handles (text/image input, text output) - Provider selector (Google, OpenAI) with model switching - Model selector dropdown based on selected provider - Temperature slider rendering and editing - Loading state with spinner - Error state display with fallback message - Output text display with regenerate and clear buttons - Custom title editing functionality - Model fallback when current model is invalid for provider Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com> |
6 months ago |