3.5 KiB
| id | title | status | assignee | created_date | updated_date | labels | milestone | dependencies | references | priority | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| TASK-42 | Implement Data Pipes: typed data flow through arrows | Done | 2026-02-18 20:06 | 2026-03-11 23:01 |
|
m-1 |
|
|
high |
Description
Transform folk-arrow from visual-only connector into a typed data conduit between shapes.
New file lib/data-types.ts:
- DataType enum: string, number, boolean, image-url, video-url, text, json, trigger, any
- Type compatibility matrix and isCompatible() function
Add port mixin to FolkShape:
- ports map, getPort(), setPortValue(), onPortValueChanged()
- Port values stored in Automerge: doc.shapes[id].ports[name].value
- 100ms debounce on port propagation to prevent keystroke thrashing
Enhance folk-arrow:
- sourcePort/targetPort fields referencing named ports
- Listen for port-value-changed on source, push to target
- Type compatibility check before pushing
- Visual: arrows tinted by data type, flow animation when active
- Port handle UI during connect mode
Add port descriptors to AI shapes:
- folk-image-gen: input "prompt" (text), output "image" (image-url)
- folk-video-gen: input "prompt" (text), input "image" (image-url), output "video" (video-url)
- folk-prompt: input "context" (text), output "response" (text)
- folk-transcription: output "transcript" (text)
Example pipeline: Transcription →[text]→ Prompt →[text]→ ImageGen →[image-url]→ VideoGen
Acceptance Criteria
- #1 DataType system with compatibility matrix works
- #2 Shapes can declare input/output ports via registration
- #3 setPortValue() writes to Automerge and dispatches event
- #4 folk-arrow pipes data from source port to target port
- #5 Type incompatible connections show warning
- #6 Arrows visually indicate data type and active flow
- #7 Port values sync to remote clients via Automerge
- #8 100ms debounce prevents thrashing on rapid changes
Final Summary
Completed: Data Pipes — typed data flow through arrows
Created lib/data-types.ts — DataType union, PortDescriptor interface, isCompatible() type matrix, dataTypeColor() for arrow tints.
Added port mixin to FolkShape: static portDescriptors, #ports Map, initPorts(), setPortValue() (dispatches port-value-changed CustomEvent), getPortValue(), setPortValueSilent(), getInputPorts(), getOutputPorts(). toJSON() includes port values; applyData() restores silently (no event dispatch = no sync loops).
Enhanced FolkArrow: sourcePort/targetPort properties, #setupPipe() listener for port-value-changed, isCompatible() type check, 100ms debounce, arrow color tinted by dataTypeColor(). Listener cleanup on disconnect. toJSON/fromData/applyData include port fields.
AI shape port descriptors:
folk-prompt: inputcontext(text) → outputresponse(text)folk-image-gen: inputprompt(text) → outputimage(image-url)folk-video-gen: inputprompt(text) +image(image-url) → outputvideo(video-url)folk-transcription: outputtranscript(text)
Extended ShapeData interface with sourcePort, targetPort, ports fields.
Commit: c4717e3