openpencil/src/ai
Danila Poyarkov fd44d7b853 Deduplicate: 47 → 28 clones, 1.37% → 0.61% duplication
Extracted shared helpers to eliminate copy-pasted code:

Core:
- computeAbsoluteBounds() in geometry.ts — replaces 4 bounding box loops
- makeDocumentNodeChange/makeCanvasNodeChange in kiwi-serialize.ts
- parseFigBuffer/parseFigKiwiContainer in kiwi/fig-parse-core.ts
  (fig-parse-worker.ts: 103 → 11 lines)
- createDefaultEditorState() — shared between core + app store
- calcClusterConfidence() in tools/analyze.ts
- retryWithNormalizedFamily() in fonts.ts
- getVectorNode() in tools/vector.ts
- renderFills() helper in renderer/scene.ts
- withNodeBounds() helper in renderer/overlays.ts
- drawNodeHighlightRect() in renderer/highlight-rect.ts
- isInViewport() in renderer/label-cache.ts

App:
- decodeTauriStderr() in utils/tauri.ts
- printNodeResults() in cli format.ts

Remaining 28 clones are: text-editor cursor movement (inherent),
xpath DOM traversal (inherent), small 5-line patterns too
context-specific to extract.
2026-03-17 11:10:11 +03:00
..
acp-map-update.ts Clean up ACP branch: gate debug log, fix capitalizations, harden types 2026-03-15 18:24:37 +03:00
acp-permission.ts Harden ACP transport, MCP server, and add permission dialog 2026-03-15 16:49:43 +03:00
acp-transport.ts Deduplicate: 47 → 28 clones, 1.37% → 0.61% duplication 2026-03-17 11:10:11 +03:00
chat-debug.ts AI chat polishing: skeleton workflow, batched tools, visual feedback, stock photos (#111) 2026-03-15 15:42:41 +03:00
system-prompt.md AI chat polishing: skeleton workflow, batched tools, visual feedback, stock photos (#111) 2026-03-15 15:42:41 +03:00
tools.ts AI chat polishing: skeleton workflow, batched tools, visual feedback, stock photos (#111) 2026-03-15 15:42:41 +03:00