Commit graph

1023 commits

Author SHA1 Message Date
Danila Poyarkov 6e4fab40dc style(ui): sort imports after family moves 2026-09-06 17:54:22 +03:00
Danila Poyarkov 3fdac60afa Merge branch 'refactor/settings-workflows' into refactor-ui-families
# Conflicts:
#	src/app/ai/models/settings/profile-editor/selection.ts
2026-09-06 16:46:02 +03:00
Danila Poyarkov cc4dc933e8 fix(settings): revalidate queued credentials and handle status failures 2026-09-06 16:41:50 +03:00
Danila Poyarkov 2b4e5240e7 style(settings): separate composable responsibilities 2026-09-06 15:41:15 +03:00
Danila Poyarkov 95fbd06dc3 fix(settings): share MCP mutation queues across editors 2026-09-06 15:41:15 +03:00
Danila Poyarkov b5391f7305 fix(settings): persist credentials before enabling connections 2026-09-06 15:18:18 +03:00
Danila Poyarkov 8407f23fd1 refactor(ai): colocate catalog service and composable 2026-09-06 14:56:09 +03:00
Danila Poyarkov 742d544342 Merge branch 'refactor/settings-workflows' into refactor-ui-families 2026-09-06 14:45:03 +03:00
Danila Poyarkov 24df07ac41 fix(settings): guard asynchronous credential workflows 2026-09-06 14:34:32 +03:00
Danila Poyarkov 8c8a4754d7 refactor(ui): organize components and themes by family 2026-09-06 14:26:56 +03:00
Danila Poyarkov 61c1e9839b refactor(settings): separate credential services from chat 2026-09-06 14:00:09 +03:00
Danila Poyarkov a338f57f4b refactor(settings): extract domain workflows 2026-09-05 21:49:30 +03:00
Danila Poyarkov 904c90c329 refactor(settings): extract model profile workflows 2026-09-05 21:25:46 +03:00
Danila Poyarkov f674f8c99d feat(ai): modernize model picker 2026-09-04 18:45:03 +03:00
Danila Poyarkov 039c810f5c fix(storybook): synchronize chat light theme
- Drive the app theme store from Storybook's theme toolbar\n- Use OpenPencil surface tokens for readable inline code in light mode\n- Verify light Shiki and inline-code contrast in the visual workshop
2026-09-04 18:32:33 +03:00
Danila Poyarkov b7879ac026 feat(chat): add visual Markdown workshop
- Override inline code through the renderer component API instead of CSS cascade fights\n- Add light and dark Storybook states for prose, inline code, fenced code, streaming, messages, and attachments\n- Keep fenced Shiki rendering separate from compact inline tokens
2026-09-04 18:15:24 +03:00
Danila Poyarkov 6ea68d1f81 fix(chat): compact inline code typography
- Match inline monospace tokens to the 11px chat body scale\n- Reduce inline code padding without changing fenced Shiki blocks
2026-09-04 17:53:55 +03:00
Danila Poyarkov 6be82c115e fix(automation): avoid redundant MCP restarts
- Keep the healthy Portless child when browser configuration is unchanged\n- Allow genuine configuration restarts enough time to register their replacement service\n- Cover configuration equality and delayed health readiness
2026-09-04 17:23:53 +03:00
Danila Poyarkov 61f11e7d24 fix(ai): surface actionable provider failures
- Classify authentication, access, model, rate-limit, network, and credit errors\n- Preserve the original provider error across the no-output stream consequence\n- Add optional toast actions for opening model settings\n- Consume handled chat send rejections to avoid global unhandled errors\n- Localize provider failure guidance and cover the authentication flow
2026-09-04 16:41:03 +03:00
Danila Poyarkov db68b71ae1 refactor(chat): extract submission and attachment state
- Move send orchestration, cancellation, Vision analysis, and optimistic history into a submission composable\n- Move composer image and node draft ownership into an attachment composable\n- Replace positional submit arguments with a named ChatSubmission payload
2026-09-04 11:16:32 +03:00
Danila Poyarkov bd24220b9a feat(chat): preserve node attachments in history
- Generalize transcript presentations across image and node attachments\n- Snapshot referenced nodes when sending so history survives graph changes\n- Reuse one attachment card and viewer for both attachment kinds\n- Localize attachment actions and remove image-processing details from the viewer
2026-09-04 10:55:42 +03:00
Danila Poyarkov c5158edc82 fix(chat): redesign Design profile picker
- Give configured profiles a full-width multiline selection surface\n- Show resolved model and provider metadata with a stable selection indicator\n- Keep Vision capability compact and link back to model-role settings\n- Split chat Markdown and profile themes into focused domain files
2026-09-03 20:58:32 +03:00
Danila Poyarkov 5951f45d64 fix(automation): wait for Portless MCP readiness
- Hold Vite startup and MCP restarts until the sibling service health endpoint responds\n- Tolerate transient Portless 404 responses during service registration\n- Cover worktree-origin CORS preflight and restart health polling
2026-09-03 20:33:06 +03:00
Danila Poyarkov f5db783797 fix(chat): align vision and model role UX
- Restore attachment inset spacing through the InputGroup theme slot\n- Mark curated multimodal models as Vision-capable and repair saved capability metadata\n- Default Vision to the Design profile when that profile accepts images\n- Use configured Design profiles in the composer instead of raw provider models\n- Surface missing Vision configuration directly in Settings\n\nCo-authored-by: Jason Kneen <jason.kneen@bouncingfish.com>
2026-09-03 19:58:09 +03:00
Danila Poyarkov a8c7fedadb feat(chat): unify composer attachments
- Render node references and images with one attachment-card layout\n- Generate live previews for referenced scene nodes\n- Make the current-selection control toggle its active selection\n\nCo-authored-by: Jason Kneen <jason.kneen@bouncingfish.com>
2026-09-03 19:05:10 +03:00
Danila Poyarkov 743078255f refactor(chat): layer Markdown integration styles
- Import upstream Markdown CSS through the components cascade layer\n- Keep compact semantic overrides in a dedicated chat stylesheet\n- Preserve Shiki backgrounds through its supported theme variable\n\nCo-authored-by: Jason Kneen <jason.kneen@bouncingfish.com>
2026-09-03 17:37:44 +03:00
Danila Poyarkov b1522c8f34 fix(chat): tighten Markdown block chrome
- Reduce code header controls, labels, icons, and body spacing\n- Scope block-code overrides away from inline code\n- Compact horizontal-rule spacing for chat messages\n\nCo-authored-by: Jason Kneen <jason.kneen@bouncingfish.com>
2026-09-03 16:44:36 +03:00
Danila Poyarkov 1b43c25efa fix(chat): compact Markdown typography
- Map upstream document typography to the editor chat scale\n- Reduce code block text, spacing, header labels, and controls\n- Keep chat Markdown styling in the typed chat theme\n\nCo-authored-by: Jason Kneen <jason.kneen@bouncingfish.com>
2026-09-03 15:40:52 +03:00
Danila Poyarkov 21b1d25bff fix(chat): derive Markdown image origin at runtime
- Restrict assistant-rendered images to the active deployment origin\n- Cover local and self-hosted origins without hardcoded production hosts\n- Verify cross-origin, insecure, and data image rejection in browser tests\n\nCo-authored-by: Jason Kneen <jason.kneen@bouncingfish.com>
2026-09-03 14:12:14 +03:00
Danila Poyarkov dd53d08474 refactor(chat): adopt upstream Markdown v2
- Replace the fork-era Markdown integration with Comark and an explicit Shiki extension\n- Centralize OpenPencil theming, parser lifecycle, controls, and URL hardening\n- Remove Mermaid stubs and bundled math or diagram dependencies\n- Address contextual composer review findings and extend browser coverage\n\nCo-authored-by: Jason Kneen <jason.kneen@bouncingfish.com>
2026-09-03 13:34:55 +03:00
Danila Poyarkov 9dccf09eb6 style(chat): apply composer formatting
Co-authored-by: Jason Kneen <jason.kneen@bouncingfish.com>
2026-09-03 13:11:48 +03:00
Danila Poyarkov f0afe3c4d7 feat(chat): adopt contextual composer improvements
- Pin selected layers as bounded context without exposing metadata in transcript bubbles
- Show collapsible reasoning and copy individual assistant responses
- Autosize multiline prompts and cover the new chat states in browser tests

Co-authored-by: Jason Kneen <jason.kneen@bouncingfish.com>
2026-09-03 11:40:50 +03:00
Danila Poyarkov 9a3d7ca702 fix(ai): require closed stock photo vectors
- Reject open vector networks before contacting the provider\n- Cover closed and open vector targets explicitly\n- Label the stock photo prompt example code fence
2026-09-03 08:46:10 +03:00
Danila Poyarkov 90b608863e fix(ai): validate stock photo targets
- Reject text, line, structural, and populated container targets before provider requests\n- Preserve closed shape and Boolean geometry support without mutating target bounds\n- Cover accepted and rejected node families with focused tests
2026-09-03 08:46:10 +03:00
Danila Poyarkov 0686a2d630
fix(app): remove misleading browser font warning
* fix(app): remove misleading browser font warning

* fix(app): remove duplicate font constant import

* docs: keep unreleased changelog categories intact
2026-09-02 13:14:06 +03:00
Danila Poyarkov 75d555900f fix(editor): preserve mutation parents and font layout 2026-09-02 08:27:52 +03:00
Danila Poyarkov 4ecbc9e583 fix(ai): prepare fonts before mutation layout 2026-09-02 02:12:28 +03:00
Danila Poyarkov 8a5daa7472 fix(automation): load fonts before scoped layout 2026-09-02 02:09:05 +03:00
Danila Poyarkov 0f070f9f97 refactor(ai): share mutation layout reconciliation 2026-09-02 02:06:08 +03:00
Danila Poyarkov 9e2fd9b471 Merge remote-tracking branch 'origin/master' into shared-mutation-impact 2026-09-02 01:58:51 +03:00
Danila Poyarkov edb608e992 refactor(editor): centralize mutation layout reconciliation 2026-09-02 01:58:50 +03:00
Danila Poyarkov 3caf5c99d9 fix: resolve lint warnings 2026-09-02 01:49:37 +03:00
Danila Poyarkov 0e9c0ee6cf
feat: add searchable command palette
Adds a localized, Fuse-powered command palette for app actions and a reusable Vue SDK primitive, with Storybook and Playwright coverage.
2026-09-01 23:08:32 +03:00
Danila Poyarkov 9bb9478833
refactor: replace complex conditional object spreads
- Add a typed, modular custom Oxlint rule package with direct regression coverage
- Replace complex conditional object spreads with explicit construction across the repository
- Preserve all existing custom rule registrations and diagnostic behavior
2026-09-01 19:49:57 +03:00
Danila Poyarkov 410d6171e4 fix: close structured override review gaps 2026-09-01 15:23:08 +03:00
Danila Poyarkov 5b074e967d fix: harden structured override decoding 2026-09-01 14:11:19 +03:00
Danila Poyarkov e93d3ea6e1 fix: preserve structured overrides across JSON boundaries 2026-09-01 13:35:09 +03:00
Danila Poyarkov be942783dc
refactor(i18n): migrate app copy to domain namespaces
* refactor(i18n): migrate app copy to domain namespaces

- Replace the monolithic dialogs catalog with 16 flat product-domain catalogs
- Preserve every translated locale value while moving all 356 messages
- Expose narrow domain composables and retain useI18n as a compatibility aggregate
- Document namespace ownership and admission rules

* fix(i18n): complete migrated locale coverage

- Translate exposed MCP automation, code editor, credential, and media placeholders
- Restore missing German, Spanish, French, Italian, Polish, and Russian diacritics
- Preserve technical product terms and interpolation placeholders

* fix(i18n): polish remaining locale wording

- Correct the mixed-language German code source label
- Preserve stock_photo and Pexels semantics in German and Polish
- Improve Italian MCP and code-editor grammar
- Use the standard Russian term for MCP endpoint

* fix(i18n): migrate diagnostics copy after rebase

- Add a diagnostics domain for newly merged usage and telemetry settings
- Keep settings navigation labels in the settings domain
- Preserve translated diagnostics catalogs from current master

* style(app): format rebased settings components

* refactor(i18n): simplify domain message keys

- Remove redundant domain prefixes from settings, diagnostics, automation, and integration catalogs
- Move feature-specific actions out of the common namespace
- Preserve current-master language picker and diagnostics copy across every locale
- Update consumers to concise semantic keys

* fix(app): preserve font and updater contracts

- Restore browser and abort-aware font loading from current master
- Remove the unused parameter helper from common messages
- Update updater tests for semantic domain keys

* fix(i18n): finish semantic diagnostics access

* refactor(i18n): derive active MCP status message

* fix(i18n): preserve rendering settings after rebase

- Add a rendering domain for tiled canvas preferences
- Preserve the current-master language and rendering settings UI
- Move every translated renderer preference out of the retired dialogs catalog

* fix(i18n): polish reviewed locale semantics

* test(i18n): enforce translation completeness baseline

- Fail on interpolation placeholder drift and suspicious mixed-script values
- Reject new source-identical translations while tracking existing debt explicitly
- Report translated-message coverage for every supported locale
- Require baseline cleanup when existing placeholders are translated

* refactor(i18n): baseline reviewed mixed-script messages

- Replace brittle product-vocabulary exceptions with Unicode script detection
- Track reviewed mixed-script messages by stable locale and message identity
- Reject new entries and stale baseline debt without hardcoded terminology

* fix(fig): resolve relocated stroke test helper
2026-08-31 23:54:14 +03:00
Danila Poyarkov 3702f9c93a fix(canvas): include arrow caps in bounds and controls 2026-08-31 21:25:38 +03:00
Ed-Key 9b48e47329 feat(canvas): render arrow stroke caps on lines and open vectors
ARROW_LINES and ARROW_EQUILATERAL stroke caps were accepted by the schema
and round-tripped from .fig files, but the renderer mapped every cap to
Butt, so imported arrows lost their heads and arrows could not be drawn
locally.

Add a pure arrow-cap geometry module to scene-graph (open-endpoint
collection with per-vertex cap overrides, weight-scaled head geometry)
and draw heads in the stroke color for LINE nodes and open VECTOR
centerline strokes, including the dashed-centerline path. Fold the head
reach into strokeOverflow and the node picture margin so heads are not
cropped by visual bounds, caches, or culling. Round-trip per-vertex
stroke caps through the .fig vector style override table so one-ended
Figma arrows import correctly. Expose both caps in the stroke inspector
cap picker with localized labels, and cover the renderer with an
arrow-stroke-caps Playwright canvas snapshot.

Claude-Session: https://claude.ai/code/session_012zjEbyLSBYyPpJP4fu1XNB
2026-08-31 21:25:38 +03:00