Built-in design generation now runs as an agentic MCP tool-loop (reusing the agent-rs BuiltInProvider), gated behind OPENPENCIL_DESIGN_AGENT_LOOP / the Settings experimental toggle; the orchestrator stays the default. - design-agent system prompt + in-process design toolset (parity-locked with the MCP surface) + flag-gated Intent::Design routing - spawn_agents execution as sequential sub-loops + live creation-mode badges (per-agent glow + 'N/M designing...' header) - new MCP tools: get_guidelines, ToolSearch, get_screenshot, get_editor_state, export_nodes, spawn_agents; style-guide local audit - #27 AI panel restyle: rounded tool cards + green check-rings, gray user bubbles, model-pill bottom toolbar, header, empty-state pills, the PARALLEL AGENTS (agent_team_size) 1x-6x chip dropdown - multi-chat tabs: ChatSessions model (Deref-to-active) + tab row UI (switch / close / + / Cmd+T) with each run bound to its tab Large checkpoint commit spanning the working tree (Rust shell crates).
4.4 KiB
4.4 KiB
Packages
Shared libraries consumed by apps/web and apps/desktop. All re-exported via @zseven-w/pen-sdk.
pen-types (pen-types/src/)
Type definitions (9 files):
pen.ts— PenDocument/PenNode (frame, group, rectangle, ellipse, line, polygon, path, text, image, ref), ContainerProps,PenPage;PenDocument.variables,PenDocument.themes,PenDocument.pagescanvas.ts— ToolType, ViewportState, SelectionState, CanvasInteractionstyles.ts— PenFill (solid, linear_gradient, radial_gradient), PenStroke, PenEffect, BlendMode, StyledTextSegmentvariables.ts—VariableDefinition,ThemedValue,VariableValueuikit.ts— UIKit, KitComponent, ComponentCategory typesagent-settings.ts— AI provider config typeselectron.d.ts— Electron IPC bridge typestheme-preset.ts— Theme preset typesopencode-sdk.d.ts— Type declarations for @opencode-ai/sdk
pen-core (pen-core/src/)
Core document operations (11 files + layout/ + variables/ subdirs):
tree-utils.ts— Pure tree helpers:findNodeInTree,findParentInTree,removeNodeFromTree,updateNodeInTree,flattenNodes,insertNodeInTree,isDescendantOf,getNodeBounds,findClearX,scaleChildrenInPlace,rotateChildrenInPlace,createEmptyDocument,DEFAULT_FRAME_ID; Clone utilities:deepCloneNode,cloneNodeWithNewIds,cloneNodesWithNewIds(canonical source for all node cloning)normalize.ts— Pen file normalization (format fixes only, preserves$variablerefs)boolean-ops.ts— Union/subtract/intersect via Paper.jssync-lock.ts— Prevents circular sync loopsarc-path.ts— SVG arc utilitiesfont-utils.ts— Font utilitiesnode-helpers.ts— Node helper functionsconstants.ts— Core constantsid.ts— ID generation (nanoid)layout/engine.ts— Auto-layout computation:resolvePadding,getNodeWidth/Height,computeLayoutPositionslayout/text-measure.ts— Text width/height estimation, CJK detection,parseSizingvariables/resolve.ts— Core resolution:resolveVariableRef,resolveNodeForCanvas,getDefaultTheme,isVariableRefvariables/replace-refs.ts—replaceVariableRefsInTree: recursively walk node tree to replace/resolve$refs
pen-codegen (pen-codegen/src/)
Multi-platform code generators (9 files, output var(--name) for $variable refs):
react-generator.ts— React + Tailwind CSShtml-generator.ts— HTML + CSScss-variables-generator.ts— CSS Variables from design tokensvue-generator.ts— Vue 3 + CSSsvelte-generator.ts— Svelte + CSSflutter-generator.ts— Flutter/Dartswiftui-generator.ts— SwiftUIcompose-generator.ts— Android Jetpack Composereact-native-generator.ts— React Native
pen-figma (pen-figma/src/)
Figma .fig file import pipeline (17 files):
fig-parser.ts— Binary.figfile parserfigma-node-mapper.ts— Maps Figma nodes to PenNodes (uses injectable icon lookup viasetIconLookup())figma-node-converters.ts— Figma node conversion utilitiesfigma-fill-mapper.ts,figma-stroke-mapper.ts,figma-effect-mapper.ts— Style convertersfigma-layout-mapper.ts— Maps Figma auto-layout to PenNode layout propsfigma-text-mapper.ts— Converts Figma text stylesfigma-vector-decoder.ts— Decodes Figma vector geometryfigma-color-utils.ts— Color space conversion utilitiesfigma-image-resolver.ts— Resolves image blob referencesfigma-clipboard.ts— Figma clipboard paste handlingfigma-tree-builder.ts— Figma document tree buildingfigma-types.ts— Figma internal type definitions
pen-renderer (pen-renderer/src/)
Standalone CanvasKit/Skia renderer (13 files):
renderer.ts— Core renderer classdocument-flattener.ts— Document tree flattening with layout resolutionnode-renderer.ts— Node-level draw callstext-renderer.ts— Text renderingpaint-utils.ts— Color parsing, gradient creationpath-utils.ts— SVG path conversionimage-loader.ts— Async image loading and cachingfont-manager.ts— Font managementspatial-index.ts— R-tree backed spatial queriesviewport.ts— Viewport mathinit.ts— CanvasKit WASM loadertypes.ts— Renderer-specific types
pen-sdk (pen-sdk/src/)
Umbrella SDK (1 file): index.ts re-exports all packages.