TradingGoose Studio v2026.07.26
Release date: 2026-07-26
Features
feat(mcp): migrate Copilot endpoint to MCP SDK (ae7a545)feat(mcp): expand local agent setup installer (34e9b56)feat(watchlists): migrate watchlists to saved entity documents (1ef7151)feat(watchlists): model lists as document containers (5ba2f2f)feat(ui): use stable entity icon colors (4df9892)feat(widgets): add contract-driven widget runtime (82e65de)feat(dashboard): persist layouts as saved entities (edb0d42)feat(copilot): add dashboard layout widget tools (390833d)feat(dashboard): drive widgets from live layout documents (dae7850)feat(dashboard): create default layout on demand (050e47d)feat(widgets): respect read-only dashboard access (63c1ed0)feat(copilot-tools): harden dashboard layout persistence (90f0440)feat(widgets): handle unknown widget keys in copilot mutations (7346192)feat(copilot-tools): support member dashboards and watchlists (0407da0)feat(copilot): add watchlist create and rename tools (c3df801)feat(copilot): accept full dashboard layout edit documents (8577504)feat(copilot-tools): split dashboard layout editing into raw structures (90da628)feat(copilot-tools): provision dashboard layouts on page load (95f5254)feat(yjs): lock saved entity lists and redact MCP secrets (df39c6d)feat(workspace): gate workflow variables by permissions (05a13e0)feat(tradinggoose): hide data-chart drawings from Copilot (ee719d1)feat(widget-contracts): tighten widget validation and error reporting (74cd92e)feat(i18n): add catalog scanner for localization coverage (983c73e)feat(i18n-catalog): expand scanner coverage and report controls (#163) (df937de)feat(yjs): sync entity list widgets through realtime snapshots (887a63d)feat(yjs): propagate workflow folder ids through list sessions (9ef293a)feat(naming): generate available default names for new entities (a498eaf)feat(indicators): sync color metadata through Yjs entity lists (f64a683)feat(folders): promote direct children on folder delete (92404e1)feat(workflows): hydrate workflow list from entity metadata (ec73297)feat(editors): default unlinked editors to first entity (5823074)feat(yjs): surface workflow descriptions in entity lists (54d2044)feat(yjs): expose entity descriptions to dropdown search (fa159f0)feat(yjs): sync MCP server metadata in entity lists (eecb620)feat(workflow-list): sort workflows newest-first (70e7d10)feat(skills): support live skill listings (e0aa357)feat(copilot): stage mutation tools for review (4bb55c8)feat(mcp): use personal API keys for device login (12d81b4)feat(editors): back entity editors with Yjs sessions (d7f4850)feat(workflows): export referenced skills from Yjs state (c39cd33)feat(copilot): refresh state after server tool mutations (cce91db)feat(mcp): issue device login keys from approval state (4ba4ee0)feat(copilot): scope environment variable mutations (c2d5b9e)feat(yjs): persist saved entity session edits (f73e357)feat(copilot): support personal scoped credential reads (d812e46)feat(yjs): persist workflow session state through the socket bridge (866dc2a)feat(api-key): remove embedded ids from generated api keys (1fcbbff)feat(auth): simplify MCP device login approval flow (1f4b72c)feat(copilot): improve workflow editing and tool routing (dc709ab)feat(workflows): persist workflow state to normalized tables (b0bb61a)feat(workflows): preserve workflow variables during import and revert (1ee6511)feat(workflow): rename workflow metadata without republishing state (2b2a14c)feat(indicators): carry color through copilot entity documents (599ffd7)feat(mcp-auth): rate-limit device login starts per requester (ef9edee)feat(copilot-mcp): allowlist external server tools (5384643)feat(api): add shared MCP rate limiting (c17de55)feat(api-key): hash stored keys and simplify auth (546049e)feat(auth): bind MCP approval to a user challenge (ecf2fc8)feat(api-key): stop exposing raw API keys in lists (c7b7033)feat(auth): sign MCP device login codes (74bd54e)feat(workflows): load workflow state through the Yjs snapshot bridge (f422fdd)feat(copilot): localize mention labels and mention search (0601a05)feat(function): support workspace-scoped execution (95cce1c)feat(copilot): localize implicit context labels (d5d5b19)feat(navbar): portal header slots into targets (c090fa2)feat(workspace): centralize current-user access checks and locale aut… (04d786b)feat(workspaces): server-side workspace bootstrap (3ee0b85)feat(auth): replace auth error cookie flow with callback route (656902d)feat(global-navbar): add sidebar user menu trigger (ec7e755)feat(i18n): canonicalize locale-prefixed routing (4de6406)feat(nav): support authenticated public navigation (d35e854)feat(workflow): allow editor run to select trigger variants (a958ea5)feat(settings): bootstrap authenticated settings on app load (383d161)feat(tradinggoose): apply preferred locale during bootstrap (6475649)feat(oauth): normalize callback paths across auth flows (84e5d65)feat(workflow): resolve editor trigger input from session snapshot (d6eedfb)feat(workflow): run selected trigger blocks (36c9cd2)feat(workflows): preserve trigger source in queued executions (2f9170c)feat(workflow): unify workflow trigger resolution (d9f952e)feat(workflows): require explicit trigger blocks for workflow runs (f1f1dde)feat(copilot): record local completion usage (6ce007c)feat(copilot): switch workflow edits to graph-only mermaid (ab2b3c1)feat(import-export): bump TradingGoose export envelope to v2 (6ddbec7)feat(copilot): clarify workflow edit topology semantics (5fa4e05)feat(copilot): standardize entity-scoped tool contracts (cd10f30)feat(copilot): persist staged tool review state (dcbde7d)feat(copilot): enhance tool validation descriptions and auto-execute … (5a3debd)
Bug Fixes
fix(mcp): resolve TypeScript type conflicts and enhance API key handl… (0d45fe9)fix: update environment variable schemas to enforce string values for… (8ee8626)fix(mcp): enhance API key validation and preserve comments in JSONC c… (8fe6271)fix(dashboard): converge layout list after mutations (da22694)fix(dashboard): protect mutation endpoints (a5cac40)fix(dashboard): project pending tab reorders (549d62b)fix(dashboard): consume layout deep links (39cf927)fix(dashboard): unlock acknowledged layout projections (352dc86)fix(dashboard): enhance layout mutation tests with additional scenari… (748d198)fix(yjs): pause raw socket during upgrade (f2fa7ec)fix(yjs): defer websocket upgrade until session admission (a452ee2)fix(yjs): buffer frames during session admission (a0a9d66)fix(watchlist): refactor dropdown actions and improve accessibility (78f675f)fix(watchlist): enhance table layout with fixed columns and improved … (b38184c)fix(dashboard): route structure mutations through HTTP (9a48e17)fix(dashboard): remove resize persistence error state (edffe95)fix(data-chart): stabilize listing resolution (43f89f7)fix(widget-lists): protect the final saved item (713478c)fix(workflow): keep the node editor above floating controls (6413936)fix(route): handle JSON parsing and add tests for dashboard structure (bf090d9)fix(ws-handler): update message handling to support RawData and enfor… (1c9aa70)fix(yjs): defer admission until websocket upgrade (320305e)fix(yjs): preserve structured dashboard bridge errors (b9ea46d)fix(yjs): preserve final saved entity (e21f0e7)fix(tools): keep watchlist execution server side (484580e)fix(copilot-tools): guard workspace entity deletes in transactions (3b9a348)fix(watchlist): reject stale watchlist ids (bb338f1)fix(watchlist): generate persisted item identities (2c824bb)fix(widgets): preserve linked-field clear intent (0072ecd)fix(widgets): respect entity editor access mode (caf545c)fix(copilot): envelope listing search results (4aa039a)fix(workflow): support reader Yjs sessions (3510750)fix(indicators): stream live entity documents (62c4db9)fix(sortable): derive announcements from item order (3b23e7b)fix(watchlist): move nested listings to root boundary (634e9db)fix(watchlist): persist imported names atomically (6aa90e1)fix(copilot): harden collaborative editing boundaries (a704887)fix(copilot): resolve layout tools by entity scope (2969966)fix(mcp): align shared credential contract (f819e36)fix(dashboard): track linked pair review fields (7571ea5)fix(layout): enforce active layout invariant (9e10430)fix(dashboard): preserve concurrent widget topology (75b5fc7)fix(workspaces): merge invitation permissions atomically (e28760f)fix(entities): make reviewed saves atomic (bdb85e9)fix(watchlists): persist Yjs edits through realtime lifecycle (d5c9252)fix(heatmap): aggregate all workspace watchlists (cd6ef8b)fix(watchlists): allow deleting the final list (1f979f1)fix(helm): enforce singleton realtime deployment (6b57063)fix(yjs): restart disconnected sessions from fresh snapshots (32c7f55)fix(copilot): stage reviewed dashboard edits before commit (21e0042)fix(realtime): drain queued updates before shutdown (0a6dcc2)fix(workflow): disable editing for reader sessions (93ea030)fix(watchlist): persist selection in widget parameters (b30f13a)fix(yjs): reject mutations on detached documents (112b235)fix(dashboard): persist widget edits atomically (8f14b41)fix(yjs): harden collaborative document ownership (f87c393)fix(dashboard-layouts): validate create review base under lock (44af3e7)fix(yjs): reconcile access and drain shutdown docs (10ddfd0)fix(watchlists): remove replaced listing rows before persist (d60a26a)fix(layout): reject invalid structure mutations (84df56d)fix(yjs): preserve live document state during saves (1604c69)fix(copilot): validate accepted creates in transactions (3df511b)fix(dashboard): serialize layout lifecycle mutations (cba8727)fix(watchlists): guard controls until documents are ready (3491a33)fix(copilot): preserve owner scope for entity list reads (33f147c)fix(watchlists): serialize root list mutations (24dffff)fix(yjs): merge concurrent dashboard document updates (a3706bd)fix(yjs): reject invalid dashboard widget updates (c5722e3)fix(yjs): validate dashboard child updates at admission (140a0bb)fix(yjs): flush persistence before document discard (57596ae)fix(dashboard): consolidate layout structure mutations (56dd3fd)fix(workflow-variables): gate variable editing by session permissions (5abd4a2)fix(yjs): serialize forced reconciliation and watchlist validation (c77c179)fix(i18n-catalog): align catalog reports with the default locale (#163) (0c647a1)fix(workflows): make cleanup notifications best-effort (64d0f55)fix(tradinggoose): use DB-backed custom tool and entity updates (1eeb288)fix(workflows): decouple folder changes from metadata sync (3043893)fix(yjs): refresh MCP servers after entity updates (b9dddec)fix(list-mcp): select new servers after entity hydration (690a138)fix(entity-list): keep entity list sessions aligned with db (df26f3e)fix(widgets): remove stale selection reset effects (5f86c90)fix(workflows): sync workflow list members through realtime helpers (6693fa4)fix(yjs): keep workflow mutations durable on socket errors (0871bb1)fix(widgets): validate requested editor entities (aa91d55)fix(yjs): reseed live entity-list sessions on upgrade (e1d97b7)fix(workflow-list): keep widget selection local (bdcb6c1)fix(workflows): require realtime sync for list projections (6fed214)fix(workflows): make live list sync best effort (a758f12)fix(yjs): skip sync wait for read providers (36dabca)fix(widgets): keep requested ids and selections in sync (0d88a3c)fix(execution): respect deployed context for saved entities (517454d)fix(workflows): hydrate and validate active workflow selection (7fbdb00)fix(widgets): handle missing requested editor entities (d713e01)fix(agent): pass deployed context through MCP tool discovery (291420d)fix(workflow): tolerate missing workflow-linked entities (9b2cdcd)fix(workflows): remove stale workflow cache (01538ed)fix(workflows): persist folder metadata through yjs sync (cef60d3)fix(widgets): clear stale selection after list updates (48c5370)fix(mcp): default deployed discover context (fb52fc2)fix(yjs): retry failed entity lists on reopen (441d3c8)fix(folders): apply workflow metadata before delete (fbd0cc7)fix(widgets): stop auto-selecting the first workflow (60dd078)fix(yjs): drop rollback handling for entity publishes (432ece6)fix(yjs): surface realtime-required errors for list refreshes (2ef7999)fix(workflows): search descriptions and preserve duplicate source (d1503cd)fix(workflow-widgets): resolve widget workflows through shared state (7988646)fix(i18n): remove obsolete workflow auth copy (219c44d)fix(ai): mark tool execution as deployed context (4fc63d2)fix(ai): preserve deployed context flag (716946c)fix(mcp): refresh tool list after server edits (92e0cf4)fix(indicator-list): open source session read-only (ad9da06)fix(mcp): invalidate discovery cache on refresh (02d0a99)fix(yjs): enforce access mode on websocket sync (7dcca3c)fix(workflow): preserve color-pair workflow selection default (36b544d)fix(mcp): retry server list and keep selected status (9ef27b7)fix(widgets): clear selection after deleting list items (e57a765)fix(yjs): surface entity-list refresh failures (67376c1)fix(yjs): discard stale entity-list projections (ce6acc3)fix(workflow-list): use shared widget state for routing (8b9baa6)fix(yjs): reopen disposable read sessions (a68e84e)fix(tradinggoose): surface entity lookup failures (0511afe)fix(tradinggoose): queue entity selections until listed (badc792)fix(agent): fail agent blocks when tool hydration fails (94469e9)fix(widgets): keep explicit entity ids exact (9732772)fix(yjs): keep shared sessions retrying until live (a8e2fc6)fix(workflow): stabilize workflow hydration on dashboard load (02ad9ba)fix(yjs): ignore missing saved entities during bootstrap (fbd5b6a)fix(yjs): serialize entity list reseeds (23143e3)fix(workflow): remove registry-backed workflow activation (ef37afe)fix(workflow): source workflow options from entity metadata (db2a179)fix(workflow): sort workflows by newest createdAt (9da06b6)fix(tradinggoose): stabilize MCP and workflow state (ca890fc)fix(yjs): keep read sessions visible while reopening (b9527b0)fix(entity-session): rename seedEntityListSession to replaceEntityLis… (3b9698d)fix(yjs): keep shared session errors visible (d69e52e)fix(mcp): reject reused device login approvals (fb8ff93)fix(workflows): avoid loading deployed workflow variables (a3c4ea1)fix(mcp): authenticate device login API keys (4ca9b51)fix(copilot): apply reviewed tool changes atomically (0835d96)fix(copilot): prevent stale server tool review acceptance (2b94ebe)fix(copilot): handle malformed MCP batch entries (164ee90)fix(copilot): prevent sensitive tool payload exposure (f34626b)fix(copilot): reject empty JSON-RPC batches (3dcf4be)fix(copilot): redact managed review secrets (6cbb24d)fix(mcp): issue device login keys during approval polling (adb0dd4)fix(workflows): preserve deployment metadata from saved state (bdf6e56)fix(mcp): use shared personal api key auth (5a4b50b)fix(workflows): preserve variables during direct yjs persistence (b87fc13)fix(workflows): persist workflow names through Yjs state (4d0241d)fix(copilot): read saved entities from bootstrapped Yjs state (fc436b4)fix(mcp): consume device login approvals when issuing keys (e78ab77)fix(yjs): fall back to direct state persistence on apply errors (d984f06)fix(custom-tools): reject duplicate titles on update (ee6fd42)fix(copilot): omit generated workflow ids from review staging (20ac127)fix(copilot): require workflow variable ids in documents (8dfcd65)fix(copilot): serialize server tool review acceptance (420d525)fix(workflows): persist normalized workflow state (db6b07c)fix(auth): preserve locale on invalid MCP authorization (62580b1)fix(copilot): reject stale accepted server tool reviews (5c7c3c6)fix(yjs): keep saved entity sessions noncanonical (b3f224c)fix(workflows): preserve deployment metadata from live state (2813eda)fix(yjs): separate saved entity draft persistence (ffebf07)fix(workflows): handle missing normalized saved state (e60fe7c)fix(copilot): scope environment variable writes to workspace (abf674f)fix(api-key): require complete key format for lookup (abe9818)fix(copilot): persist accepted reviewed entity updates (e9c16c0)fix(api-keys): bind generated key material to stored id (935c221)fix(copilot): pass workspace context to environment writes (e40590f)fix(mcp): make device login delivery idempotent (f73a113)fix(yjs): persist state before applying document updates (26809fb)fix(yjs): refresh stale saved target snapshots (e8698a9)fix(yjs): make saved entity persistence best effort (7ff5782)fix(copilot): align contracts after staging rebase (127087c)fix(copilot): align indicator runtime contracts (705863c)fix(copilot): preserve MCP server secrets in documents (6d03e1a)fix(yjs): apply snapshots before database persistence (10c32a2)fix(copilot): normalize entity document fields (ce2b89a)fix(mcp): require urls for URL transports (8f957ef)fix(yjs): persist applied snapshots from live documents (24a6c27)fix(api-key): reject malformed keys before lookup (aa089d3)fix(copilot): keep review acceptance bound to the staged execution co… (138ca5b)fix(yjs): stop deleting live sessions during cleanup (f273641)fix(yjs): restore saved entity state from db on materialization failure (c98e8a6)fix(copilot): deny inaccessible workspaces in server tools (2031c81)fix(mcp): limit delivery retries when polling device login (5495906)fix(yjs): restore workflow state after persistence failure (102ed5e)fix(workflows): load normalized workflow state consistently (4bbe32f)fix(yjs): preserve refresh error cause (02f9b0d)fix(mcp): use configured base URLs in installer flows (c02534f)fix(ui): clear help modal scroll timer (e549b39)fix(auth): generate MCP api keys at approval time (26c0803)fix(mcp): scope public MCP login starts to the deployment (421f7aa)fix(mcp): harden device login approval challenge handling (8b9764c)fix(copilot): stabilize mention submenu reload deps and add staging c… (a830a01)fix(custom-tools): treat titles as canonical tool names (effdcaa)fix(executor): resolve dynamic MCP tool ids at runtime (b5b16e6)fix(agent): require exact skill ids for skill loading (1308d70)fix(function): allow workspace-scoped function execution (19fa88c)fix(copilot): resolve custom indicators by runtime id (b9f8653)fix(custom-tools): separate runtime ids from entity ids (b806923)fix(copilot): keep deleted mentions removed (eff1fb9)fix(copilot): normalize final streamed messages (42db0b8)fix(copilot): filter markdown renderer node props (809929e)fix(agent): preserve custom tool display names (6d22b31)fix(copilot): dedupe docs context mentions (ddc1ff7)fix(function-execution): authorize requests by workflow workspace (1e52cbb)fix(mcp): persist canonical tool identifiers (a842394)fix(mcp): use explicit server and tool params for execution (c19d3b8)fix(copilot): treat punctuation as mention boundaries (14add5b)fix(mcp): preserve selected tool IDs for execution (1744f50)fix(copilot): retain contexts for repeated mentions (978fc35)fix(custom-tools): allow updates with existing titles (ffcf698)fix(copilot): reuse mention boundary detection (4d54091)fix(copilot): refresh selected mention contexts (76cd8c9)fix(custom-tools): normalize function schemas (0225d41)fix(custom-tools): normalize API custom tool titles (3a0d91d)fix(copilot): include log triggers in mention search (a2c69bf)fix(agent): preserve custom tool ids with display names (aeaa099)fix(copilot): preserve duplicate mention insertion order (72f9efa)fix(trace-spans): type tool call ids in trace output (2f69886)fix(workflows): reject invalid custom tool runtime ids (8da6e55)fix(function-execute): require write access for workspace execution (2f67321)fix(auth): pass server user into workspace socket provider (446bf56)fix(socket): improve logging for socket authentication errors (033ef6f)fix(workspace): simplify user prop handling in WorkspaceLayoutClient (78406f6)fix(auth): thread authenticated user id through navbar (28a4fc6)fix(auth): use authenticated user id for workspace dialogs (74428e3)fix(workspace-invite): prevent self-invites (a994211)fix(auth): propagate authenticated email through navbar (0bacd78)fix(auth): preserve auth recovery during workspace permissions fetch (7ac3a5f)fix(workspace-permissions): restore current user row in invite modal (01e3acb)fix(auth): wait for client auth before loading workspaces (cda6e54)fix(auth): reset workspace redirect state per user access key (8433541)fix(auth): avoid refetching session-recovery permissions (e699d94)fix(auth): gate auth-dependent queries until session matches user (b338d17)fix(workspace): gate permissions UI on matching session user (c3deb6b)fix(workspace): gate workspace data on client auth (86b9d93)fix(auth): guard workspace data on stable session state (f66e7df)fix(navbar): keep the latest header owner active (5337db1)fix(auth): scope cached billing queries by user id (c6449e6)fix(workspace): use workspace user identity in invite dialogs (e8c66ca)fix(auth): pass workspace user to global navbar (6914ca9)fix(workspace-auth): require inherited workspace sessions in nested p… (0ff8d2c)fix(workspaces): include workspace owners in access flows (6af2500)fix(workspaces): allow same-origin callback URLs (153fa81)fix(auth): scope workspace permissions to the active user (a38c8ec)fix(workspace): derive callback origin from request headers (dd5a3dc)fix(workspaces): require admin access before member deletion (d578cb9)fix(permissions): treat workspace owners as admins (2c44f3f)fix(auth): standardize reauth callbacks and permission state checks (aff9f34)fix(workspaces): roll back failed default workflow seeding (ae08aed)fix(workspaces): align admin access with workspace ownership (036b893)fix(auth): reuse workspace access checks (f58311e)fix(workflows): centralize workflow permission validation (c3c1d75)fix(workspace-permissions): route missing sessions into auth recovery (684e8e3)fix(workspace): redirect workspace roots without bootstrapping (7cecb3a)fix(copilot): treat workspace owners as workflow admins (cc609d1)fix(workspace): bootstrap root workspace on the server (1b73042)fix(auth): normalize login callback URLs from request headers (8670675)fix(auth): add reauth redirect handling for stale session cookies (f13cf41)fix(workspaces): normalize created workspace payloads (b016ba3)fix(workspaces): clean up seeded workflow on create failure (208f27d)fix(workspaces): handle Yjs seeding failures during workspace creation (21b1597)fix(auth): use canonical app session for socket token route (8b4f5ba)fix(auth): simplify unauthorized session handling (9f140d3)fix(auth): block login form until reauth cleanup finishes (e43730b)fix(auth): remove session cookie cache (4bea925)fix(auth): handle failed session creation by forcing reauth cleanup (31ac45c)fix(auth): remove reauth redirect flag and guard cleanup retries (b450439)fix(auth): route session errors through reauth cleanup (1eeb731)fix(auth): route auth provider failures through error flow (98314ea)fix(auth): preserve callback through auth error flows (1c0c60c)fix(auth): handle reauth cleanup and error callback cookies (b0eb4ee)fix(auth): unify session recovery and SSO error handling (4bcd797)fix(auth): route workspace permissions auth failures through recovery (6316b53)fix(auth): handle login reauth cleanup (e3b2790)fix(auth): remove forced uncached session reads (87493a2)fix(auth): use deployment-aware Better Auth cookies (4aa2996)fix(auth): centralize auth cookie cleanup (3508637)fix(auth): route login-page sign-out failures through reauth cleanup (b2d9497)fix(auth): redirect authenticated users from auth entry pages (14a84ea)fix(proxy): let auth entry routes reach their pages (843bc9a)fix(auth): persist locale through signup verification (6239f95)fix(urls): normalize configured app URL helpers (c72eb31)fix(email): preserve transactional text in fallback delivery (85858af)fix: handle proxy auth cleanup and preview base URL fallback (db26952)fix(tradinggoose): remove preview-only base URL fallback (015422a)fix(auth): log fallback sign-out failures (abda5e7)fix(auth): use browser origin for auth client (ed45d06)fix(i18n): add localized not-found route (5cd9085)fix(billing): settle deleted Stripe subscriptions in webhook flow (06ff221)fix(billing): avoid resetting onboarding usage for entitled subscript… (8d8ebad)fix(billing): ignore orphaned deleted stripe subscription events (118f936)fix(db): enforce unique stripe subscription ids (4b9991c)fix(billing): sync usage limits on subscription deletion (4aa8800)fix(db): enforce unique stripe subscription ids (ead4cd1)fix(billing): reject missing and duplicate deleted subscriptions (83263b1)fix(billing): skip deleted subscriptions without local rows (d677b2a)fix(billing): allow duplicate Stripe subscription rows (7be7d2c)fix(billing): settle subscription webhooks by Stripe id (63bf9f4)fix(billing): sync usage limits from settled subscription (620602f)fix(billing): enforce unique Stripe subscription lookup (5a03c10)fix(billing): use atomic upsert for enterprise subscriptions (3205733)fix(subscription): use stripe subscription id for personal upgrades (1918137)fix(workflow): improve workflow summary tooltip rendering (e90271a)fix(workflows): resolve triggers from workflow graph edges (7d29dc8)fix(settings): keep general settings loading state in sync (80bcf4e)fix(i18n): honor stored locale for authenticated locale-prefixed routes (303916a)fix(workflows): ignore chat-only triggers in editor Run (cd5f668)fix(tradinggoose): scope locale and settings state by user (8fb44b9)fix(tradinggoose): keep locale routing aligned with auth state (103027e)fix(workflows): resolve selected trigger configuration errors (7d08dca)fix(auth): preserve callback pathname during recovery flows (f695823)fix(auth): redirect authed users to their preferred locale (83b0a18)fix(socket): keep auth error handling on the latest pathname (8c48579)fix(workflows): preserve input trigger snapshot values (a6c9724)fix(workflow): stabilize workflow test execution (bde5790)fix(workflows): preserve queued trigger types (6b16362)fix(workflows): require live start block for queued webhook and sched… (2084b76)fix(workflows): remove test-input Yjs special case (14d62ec)fix(workflow): block chat-only workflows from editor run (18ca19d)fix(workflows): select trigger branch for editor Run (13cd70f)fix(workflows): resolve queued trigger identity from workflow state (6697e15)fix(workflows): reject chat triggers in editor runs (eacc094)fix(workflows): relax manual queue trigger matching (95520c1)fix(workflows): use editor test trigger for client workflow execution (6e16466)fix(workflow): preserve trigger identity and live run input (74e98db)fix(workflows): align trigger selection with trigger-mode blocks (7f5b2b0)fix(workflows): align run_workflow trigger handling (196ec1a)fix(workflows): handle missing trigger blocks consistently (123de2a)fix(workflows): preserve resolved trigger input for copilot runs (1247ccc)fix(schedules): delete orphaned schedule rows (cb2d7c8)fix(copilot): update context usage handling and remove unnecessary bi… (1313e33)fix(copilot): refactor tool approval logic and update related tests (bb07e1e)fix(copilot): remove local completion billing logic and update contex… (f276f41)fix(copilot): remove color field from indicator and workflow schemas,… (9575a4c)fix(copilot): update copilot usage handling and improve test coverage… (829a404)fix(copilot): introduce workflow graph document format and update rel… (a048520)fix(copilot): enhance edit_workflow tool with semantic validators and… (0aa0573)fix(copilot): update editWorkflowServerTool tests to reflect changes … (00a9286)fix(copilot): enhance editWorkflowServerTool with block position pres… (d6042ce)fix(copilot): update inline tool call tests and logic for review cont… (055e979)fix(copilot): improve subgraph node handling in parseVisibleWorkflowE… (45e35ae)fix(copilot): remove unused color properties from entity types and up… (3b8b321)fix(copilot): update edit_workflow description for clarity on block d… (2901b71)fix(copilot): remove color property from indicators and workflows; up… (c47905b)fix(copilot): remove color property from indicators and workflows; up… (39ae658)fix(copilot): update workflow document formats and descriptions; adju… (879fc59)fix(copilot): enhance workflow validation and update document format … (ff73078)fix(import-export): update export version from 2 to 1 across various … (0f51f24)fix(export): update export version from 2 to 1 in various components (86dc211)fix(copilot): enhance workflow documentation and validation; update t… (ceadc8e)fix(copilot): implement billing completion usage reporting and update… (b9ec108)fix(copilot): enhance completion usage reporting with validation for … (7e0e3ed)fix(import-export): update tests to ignore generated fields in transf… (8389863)fix(copilot): refine workflow graph handling and improve Mermaid docu… (a791d79)fix(copilot): improve error handling in completion usage reporting an… (8a02389)fix(copilot): rename commitLocalCopilotCompletionUsageReports to mirr… (55610d1)fix(copilot): consolidate usage reservation commits (867ac61)fix(workflows): allow condition source handles (32cd19a)fix(copilot): forward workspace id in context usage (c4b707d)fix(copilot): refine tool parameter handling and enhance error messages (e13fdc1)fix(copilot): remove obsolete custom tool schema tests and update str… (1e28ba7)fix(copilot): propagate workspace context through server tools (921f770)fix(copilot): update streaming logic and refine tool execution handling (f44b341)fix(copilot): standardize tool argument handling and remove legacy to… (973b169)fix(copilot): enhance tool argument handling and implement workspace … (3c65932)fix(copilot): update todo execution state handling in tests and state… (3202eb0)fix(copilot): update showPlanTodos logic to reflect only incomplete t… (c5e515c)fix(i18n): update waitlist text and format JSON for consistency (0790dbc)fix(copilot): enhance tool validation and auto-execution logic for ac… (54e77de)fix(copilot): streamline plan todos hydration by filtering for succes… (73da07a)fix(copilot): refactor tool execution logic and enhance message handl… (d1b3edb)fix(copilot): enhance tool call handling by ensuring unique tool call… (3d2a5d3)
Refactors
refactor(dashboard): route layout mutations through API (565d357)refactor(dashboard): clarify equal size fallback (fc82229)refactor(watchlists): move document validation contracts (8044cc4)refactor(watchlist): localize params persistence (ceea440)refactor(copilot): pass verified create context to entity creators (7b4ae01)refactor(widgets): remove legacy widget validation layers (386c14e)refactor(copilot-tools): move effective dashboard layout resolution i… (1e694cb)refactor(copilot): canonicalize entity and layout ownership (7f0918f)refactor(layout): normalize dashboard persistence boundaries (da95b43)refactor(copilot): unify dashboard layout tool results (42efd96)refactor(entities): remove obsolete REST save paths (4c6f78b)refactor(watchlists): remove obsolete quote proxy (180f068)refactor(copilot): enforce canonical entity document boundaries (23c8bb3)refactor(listing): remove dashboard hydration helpers (a25b2d1)refactor(layout): remove obsolete inline layout normalizer (cc3b0a7)refactor(dashboard): simplify layout client state (17ef71d)refactor(copilot): scope dashboard mentions to owner list (3ff78c0)refactor(yjs): route workflow edits through session transactions (555e77b)refactor(yjs): centralize saved-entity deletion flows (b70547d)refactor(tradinggoose): simplify entity and copilot access flows (07c0abb)refactor(i18n-catalog): split scanner internals into focused modules … (2d83d1e)refactor(workflow-tree): remove unused folder tree props (1d7e8f4)refactor(mcp): route server renames through saved entity fields (7702e61)refactor(yjs): share entity sessions and simplify editor selection (fcc1bef)refactor(widgets): source editor selectors from yjs entity lists (b165c90)refactor: rename persisted helper APIs (827c9f5)refactor(widgets): simplify workflow list hydration (36f54e6)refactor(workflows): decouple list-member sync from yjs snapshots (aabe204)refactor(yjs): reseed entity lists from db snapshots (d70bc4f)refactor(workflow): simplify workflow session fallback handling (aa0d277)refactor(workflows): remove marketplace publishing state (a997a76)refactor(workflow-selection): remove widget-scoped selection syncing (d7e9aca)refactor(tradinggoose): replace MCP server store with entity list state (292d628)refactor(ui): remove redundant delete selection resets (e529849)refactor(tools): move async tool lookup to package entrypoint (4e5186e)refactor(workflows): resolve workflow state from routed session (0fb4299)refactor(workflows): remove active-workflow coupling (301bc73)refactor(workflows): remove template handling from deletions (b26acc6)refactor(skills): remove the redundant skills store (8c5e816)refactor(tradinggoose): read entity lists from the database (4956a4e)refactor(tradinggoose): remove template subsystem (10dc79c)refactor(yjs): simplify saved entity state sync (321e6c6)refactor(copilot): make MCP tool exposure explicit (6d91300)refactor(operations): prefetch existing workspace entities during upsert (17cff32)refactor(workspace): split entity writes and clean up Yjs sessions (f668a29)refactor(copilot): reuse centralized mention empty states (8afafe8)refactor(mcp): use hyphenated dynamic tool ids (beedc33)refactor(indicators): remove runtime indicator names (7d1b849)refactor(workspace-permissions): thread authenticated user id through… (ff69df9)refactor(workspace-permissions): simplify initial loading fallback (e91f977)refactor(auth): use server-authenticated workspace context (15a4236)refactor(auth): stabilize login reauth callbacks (ea05100)refactor(proxy): use Better Auth session cookies (c11bc64)refactor(tradinggoose): resolve canonical URLs at runtime (301b40d)refactor(billing): centralize Stripe subscription lookup (2620ba0)refactor(environment): simplify environment store state (fc412f0)refactor(workflow): derive run target from awareness (128ce47)refactor(workflows): simplify trigger helpers (94544e4)refactor(workflows): rename workflow start target to trigger target (1c38d7c)refactor(workflow): centralize executable workflow data (504ca5d)refactor(copilot): extract completion billing helpers (94ce3e7)refactor(copilot): remove legacy assistant toolCalls state (068ce4f)refactor(copilot): simplify workflow document validators (bbad92a)
Documentation
docs(changelog): document July 24 changes (28ec5c9)docs(changelog): add feat/copilot-tools staging review (16046d5)docs(changelog): document independent layout document owners (c01ac3e)docs(changelog): add staging entry for i18n tooling (#163) (536e0f7)docs(changelog): add July 1 branch summary (e5846de)docs(changelog): document entity selection validation (36cad27)docs(changelog): note shared Yjs and workflow retry behavior (a70c23f)docs(changelog): note workflow list newest-first ordering (24d9788)docs(yjs): clarify live list snapshot freshness (3cfb320)docs(changelog): refresh July 1 entry (15b20fb)docs: update project agent testing guidance (82adab9)docs(mcp): clarify device grant retry window (9d332c6)docs(changelog): add June 24 Copilot MCP branch summary (e5bc23e)docs(api-key): remove API_ENCRYPTION_KEY references (980388e)docs(changelog): add June 23 changelog (73cedfa)docs(changelog): add June 11 2026 branch summary (3f755b0)
Other Changes
style(ui): widen API key dialogs (3f43381)test(dashboard): cover layout activation convergence (53aadda)style(watchlist): format list actions trigger (5a40d12)style(widgets): trim legacy test wording and formatting (a934a5b)style(workflow): format identifier validation deps (1b5dbf8)perf(watchlists): bootstrap identities from root rows (65940e0)style(helm): normalize yaml whitespace (c6d830c)test(copilot): align saved entity mutation expectations (95e0f30)test(yjs): consolidate entity apply-state coverage (8390188)test(widgets): consolidate layout widget coverage (5342e57)build(helm): require internal API secret for realtime (9e92671)build(helm): require longer internal api secret (b1049fc)style(i18n): align catalog tooling with biome (9455388)test(yjs): update snapshot bridge failure coverage (8bf246b)style(copilot): wrap copilot registry assertions (560b549)style(mcp): reorder authorize page imports (15af5d3)style(copilot): wrap credential prompt metadata (6bc4146)test(copilot): update test files (8fedcb9)test(copilot): cover entity document normalization (479e585)test(trading): cache the order route handler in the test (52b081a)style(yjs): reformat snapshot bridge import (477e278)build(config): remove API_ENCRYPTION_KEY from deployment samples (893d6a2)style(ui): normalize tool call and copilot route formatting (c5949b4)chore: restore recovered local changes (91d60d0)test(agent): remove stale MCP agent handler coverage (b0c1156)test(custom-tools): reject function names in imported schemas (1554689)test(copilot): align custom tool schema fixture (57bf4b6)test(generic-handler): remove stale mcp id resolution coverage (9268e89)style(custom-tools): format entity state import (360aa97)style(tools): sort utility imports (80ffffa)style: normalize formatting in agent and indicator files (f012aa9)style(indicators): format runtime imports (cb97136)test(custom-tools): align export schema fixture with canonical shape (b78c5de)test(auth): adjust auth error handler workspace permission case (c6dafaa)style(workflow): format edit-workflow-block test (d897f30)test(copilot): stabilize workflow tool suites (1f342d9)test(tradinggoose): update workflow test setup (390bf58)style(sidebar): normalize sidebar formatting (5fea951)test(global-navbar): cover compact avatar trigger outside sidebar (4c6424f)style(tradinggoose): wrap proxy route test case (4c5fa9e)test(tradinggoose): cover authenticated locale routing fallback (44df2e4)style(workspace): format integrations oauth helpers (8c91269)perf(control-bar): memoize workflow run trigger derivation (e74ef77)test(workflows): add coverage for editor trigger resolution (0e55bd8)test(yjs): cover shared workflow session bootstrap loading (c8dc570)style(workflows): reorder accessible reference imports (3f3095a)test(resolver): clarify trigger block alias expectation (17843af)