name: fantasia-action-manager description: >- Centralized renderer action manager: registry, sync FIFO queue, fire-and-forget async dispatch, unified error reporting (single console row + single toast), session-only action history, and the DialogActionMonitor surface. Use when adding or migrating user-meaningful UI actions, when a save/dialog needs consistent failure surfacing, or when working on the in-app action monitor.
Fantasia Archive — action manager (faActionManager)
What exists today
- Registry:
types/I_faActionManagerDomain.ts(FA_ACTION_IDS,T_faActionId,I_faActionPayloadMap) - Definitions:
faActionDefinitions.ts+ handlersfaActionDefinitionHandlers.ts; lookupfindFaActionDefinition - Run APIs:
faActionManagerRun.ts—runFaAction(fire-and-forget),runFaActionAwait→boolean - Sync queue:
faActionManagerSyncQueue.ts— FIFO,FA_ACTION_SYNC_TIMEOUT_MS = 30_000, max 32, opt-indedup,awaitSyncQueueDrain() - Async: immediate dispatch; tracked in
S_FaActionManager.inFlightAsyncActions - Error reporting:
faActionManagerErrorReporting_manager.ts— oneconsole.error+ oneNotify.createper failure viareportFaActionFailure - History:
faActionManagerHistory.ts— session ring (FA_ACTION_HISTORY_MAX = 500),snapshotActionHistory() - Store:
S_FaActionManager.ts— mirrors runtime state; orchestration inactionManager/scripts - Bridge:
faActionManagerStoreBridge.ts—resolveFaActionManagerStore()boot/test safe - DialogActionMonitor:
src/components/dialogs/DialogActionMonitor/— snapshot on@show; storytags: ['skip-visual'] - Menu: Help / Info → Action Monitor →
runFaAction('openActionMonitorDialog')
Single-toast rule
Action manager = only error toasts for registered actions. Handlers throw or return false; stores must not emit duplicate negative Notify. Success toasts may stay in store when user-relevant.
saveProjectSettings: project name + optional worlds snapshot via faProjectWorldsPersistSnapshotFromDialog.
Migrated call sites (today)
- Async: dev tools, settings dialogs, markdown docs, saves, window chrome, language, Action Monitor, …
- Sync: close app, refresh after language change
- Keybinds:
faKeybindRunCommand.ts→FA_KEYBIND_COMMAND_TO_ACTION_ID→runFaAction
Adding a new action (checklist)
types/I_faActionManagerDomain.ts— append id + payload map entryfaActionDefinitionHandlers.ts+ row infaActionDefinitions.ts(kind, optionaldedup)- Call sites →
runFaAction/runFaActionAwait - i18n: reuse
globalFunctionality.faActionManager.actionFailedtemplate - Tests:
src/scripts/actionManager/_tests/+ call site tests; keybind routes →faKeybindRunCommandtests - Strip duplicate negative
Notifyfrom handlers/stores
File map
- Domain:
types/I_faActionManagerDomain.ts - Manager:
src/scripts/actionManager/(definitions, run, queue, error reporting, history, store bridge) - Store:
src/stores/S_FaActionManager.ts - Monitor UI:
DialogActionMonitor/ - Menu:
AppControlMenus/_data/helpInfo.ts - Keybinds:
faKeybindRunCommand.ts - i18n:
L_faActionManager.ts,L_DialogActionMonitor.ts
Tests
Key suites: faActionDefinitions, faActionManagerRun, faActionManagerSyncQueue, faActionManagerHistory, faActionManagerErrorReporting*, faActionManagerStoreBridge, migrated call sites, DialogActionMonitor Vitest/Playwright, checkActionMonitor.playwright.spec.ts
Related
Types
Shared types → types/. See types-folder.mdc.