{
  "schemaVersion": 1,
  "source": {
    "authority": "sdk-canonical",
    "repository": "https://github.com/TheWizardNexus/arcane-os-sdk.git",
    "branch": "main",
    "path": "runtime/arcane",
    "sdkVersion": "0.5.18",
    "protocol": "arcane/1"
  },
  "artifactCount": 85,
  "javascriptArtifactCount": 83,
  "esmExportCount": 352,
  "artifacts": [
    {
      "file": "runtime/arcane/modules/AI.js",
      "name": "AI.js",
      "kind": "esm",
      "exports": [
        "AI_BROWSER_SPEECH_CONFIGURATION_PROTOCOL",
        "AI_BROWSER_SPEECH_ERROR_CODES",
        "AI_BROWSER_SPEECH_EVENT_TYPES",
        "AI_BROWSER_SPEECH_REASONS",
        "AI_INITIALIZATION_ERROR_CODES",
        "AI_INITIALIZATION_REASONS",
        "AI_READY_EVENT",
        "default"
      ],
      "summary": "Owns provider-selectable chat and the one-time caller-authority browser STT/TTS configuration, lifecycle, synthesis, transcription, and playback boundary.",
      "availability": "Browser + native bridge + TWiN Cloud",
      "protocol": "arcane-ai-browser-speech-configuration/1, AIProviderRuntime arcane-ai-provider/2 routes, globalThis.arcaneEvents, TWiN Cloud HTTPS, Arcane.ollama, Arcane.speech, Android WebView bridge",
      "normalization": "Complete mutable caller-owned browser speech authority, SDK-owned provider registration/replacement/disposal, explicit STT/TTS activation, normalized Kokoro TTS execution with default capacity 4, explicit provider-neutral execution snapshots through status(role,{execution:true}), sticky readiness, canonical window.user readiness without compatibility-event object-identity admission or polling, exact ordered structural calls with required arguments.message, atomic nonblank all-ID tool-result sequencing, complete all-choice streaming/data validation, native Ollama structural adaptation, complete-response then all validated tool callbacks then completion ordering, observed async callbacks, Blob/File transcription, automatic repeated-formatting-mark removal from cloned outbound TTS input while caller and visible content stays exact, immediate exact-segment synthesis, per-call voice/speed capture, optional final-segment pause on the existing audio clock, optional per-call terminal playback completion, detached preparation with complete semantic DBOPFS audio reuse and same-owner pending request sharing, independent prepared playback without a model load for cached audio, ordered audio-clock scheduling, playable audio, active-generation TTS operation-failure routing, mute, and cancellation are normalized; provider/model/runtime/voice policy remains caller-owned.",
      "surface": "Browser-speech protocol/event/error/reason constants; default `AI`; read-only `providerRuntime`, `browserSpeechConfiguration`, and `browserSpeechDescriptor`; explicit `providerRuntime.status(role,{execution:true})` snapshots; `streamTTS(text,end,options={})` with optional voice, speed, pauseAfterMs, and waitForPlayback; automatic speech-input cleanup with SDK-internal preparation metadata; `prepareTTS({parts,storage,identity,signal,onState})` returning ordered segments, state, ready, getAudio(index), and cancel(); `playPreparedTTS(prepared,{signal,onState})` returning state, error, finished, pause(), resume(), and stop() with one playback lane per AI and observational state/error callbacks; configure/dispose speech, route lifecycle, declaration-validated chat/stream requests with exact ordered calls, synthesis/transcription, and playback controls; initializes from current canonical user readiness, installs `window.ai`, and projects `ai-ready` plus active-generation `ai-tts-failure`."
    },
    {
      "file": "runtime/arcane/modules/AIPreferenceRuntime.js",
      "name": "AIPreferenceRuntime.js",
      "kind": "esm",
      "exports": [
        "getAIPreferencesForRuntime",
        "setAIPreferenceRuntimeOverride"
      ],
      "summary": "Applies and reads non-persistent per-user AI preference overrides.",
      "availability": "Cross-host",
      "protocol": "In-process only",
      "normalization": "Normalized six-slot preference state.",
      "surface": "`setAIPreferenceRuntimeOverride()`, `getAIPreferencesForRuntime()`."
    },
    {
      "file": "runtime/arcane/modules/AIPreferenceTuple.js",
      "name": "AIPreferenceTuple.js",
      "kind": "esm",
      "exports": [
        "AI_PREFERENCE_SLOT_KEYS",
        "aiPreferenceTuplesEqual",
        "normalizeAIPreferenceTuple"
      ],
      "summary": "Normalizes and compares the six provider/model preference slots.",
      "availability": "Cross-host",
      "protocol": "In-process only",
      "normalization": "Fully normalized frozen tuple.",
      "surface": "`AI_PREFERENCE_SLOT_KEYS`, `normalizeAIPreferenceTuple()`, `aiPreferenceTuplesEqual()`."
    },
    {
      "file": "runtime/arcane/modules/AIProviderRuntime.js",
      "name": "AIProviderRuntime.js",
      "kind": "esm",
      "exports": [
        "AI_MODEL_AUTHORITY_PROTOCOL",
        "AI_PROVIDER_PROTOCOL",
        "AI_PROVIDER_RUNTIME_PROTOCOL",
        "AIProviderRuntime",
        "aiProviderRuntime",
        "getAIProviderRuntime"
      ],
      "summary": "Provider-neutral selection, lifecycle, routing, startup, request, streaming, cancellation, and independent LLM/STT/TTS state.",
      "availability": "Cross-host in-process runtime; registered providers remain browser, native, or cloud specific",
      "protocol": "arcane-ai-runtime/2, arcane-ai-provider/2, arcane-ai-model-authority/1",
      "normalization": "Normalizes mutable complete per-role routes, lifecycle/status, cancellation, streaming cleanup, capacity-1 FIFO LLM/STT lanes, bounded provider-declared parallel TTS requests with FIFO overflow, automatic repeated-formatting-mark removal from cloned direct TTS payloads, local-only selection, direct LLM history/declaration/terminal structural contracts, complete all-choice content/reasoning FIFO iteration, private automatic provider draining with result-first buffering, terminal-only structural calls, exact per-choice observed/terminal correlation, and a separate complete validated terminal result without creating a fallback.",
      "surface": "Protocol constants; singleton-only `AIProviderRuntime`; `aiProviderRuntime`; `getAIProviderRuntime()`; provider registration/identity/selection, closed three-role and STT/TTS-only validation/configuration/replacement, status/catalog/inspection, startup, per-role load/unload/dispose/cancel, dispose-all, request/stream/speech aliases, SDK-internal speech-input preparation metadata, and mute controls."
    },
    {
      "file": "runtime/arcane/modules/AIResponseURLPolicy.js",
      "name": "AIResponseURLPolicy.js",
      "kind": "esm",
      "exports": [
        "auditAIResponseLinks",
        "decodeHTMLCharacterReferences",
        "extractAIResponseLinks",
        "normalizeAIResponseLink"
      ],
      "summary": "Extracts and audits links from AI Markdown, rendered HTML, CSS, srcset, bare URLs, and email text.",
      "availability": "Cross-host",
      "protocol": "In-process; bundled Marked parser and native HTML parsing when a document is available",
      "normalization": "Mutable audit with exact link comparison after entity and Markdown escape decoding, without URI canonicalization or response mutation. Browsers use native HTML parsing; hosts without a document retain lexical extraction and the existing limited entity decoder. Already decoded rendered values are not decoded again. Authored links retain source offsets; DOM-only attribute links use document order after authored links.",
      "surface": "`auditAIResponseLinks()`, `extractAIResponseLinks()`, `normalizeAIResponseLink()`, `decodeHTMLCharacterReferences()`."
    },
    {
      "file": "runtime/arcane/modules/AIRuntimeState.js",
      "name": "AIRuntimeState.js",
      "kind": "esm",
      "exports": [
        "AI_RUNTIME_INTENT_EVENT",
        "AI_RUNTIME_PROTOCOL",
        "AI_RUNTIME_ROLES",
        "AI_RUNTIME_STARTUP_EVENT",
        "AI_RUNTIME_STATES",
        "AI_RUNTIME_STATE_EVENT",
        "getAIRuntimeState",
        "publishAIRuntimeRoleState",
        "publishAIRuntimeRolesState",
        "requestAIRuntimeIntent",
        "startAIRuntime",
        "subscribeAIRuntimeIntents",
        "subscribeAIRuntimeState"
      ],
      "summary": "Sticky mutable LLM, speech-to-text, and text-to-speech lifecycle snapshots, intents, subscriptions, and startup-settlement barriers.",
      "availability": "Cross-host in-process state contract; actual role readiness remains provider specific",
      "protocol": "arcane-ai-runtime-state/1 over the per-realm globalThis.arcaneEvents authority",
      "normalization": "Closed monotonic sticky role snapshots, transient lifecycle intents, synchronous current-state replay, AbortSignal cleanup, and startup settlement are normalized; events report state but grant no authority.",
      "surface": "Protocol/event/role/state constants; snapshot, state subscribe/publish, intent request/subscribe, and `startAIRuntime({startMuted,startTranscription,signal})` returning `{barrier,settled,cancel}`."
    },
    {
      "file": "runtime/arcane/modules/AnsiText.js",
      "name": "AnsiText.js",
      "kind": "esm",
      "exports": [
        "parseAnsi",
        "stripAnsi"
      ],
      "summary": "Parses terminal ANSI sequences into display spans or strips them to plain text.",
      "availability": "Cross-host",
      "protocol": "In-process only",
      "normalization": "Normalized text/span output.",
      "surface": "`parseAnsi()`, `stripAnsi()`."
    },
    {
      "file": "runtime/arcane/modules/ApiModelDatabase.js",
      "name": "ApiModelDatabase.js",
      "kind": "esm",
      "exports": [
        "API_MODEL_ERRORS",
        "API_MODEL_EVENTS",
        "appendParameters",
        "default",
        "publicEndpoint"
      ],
      "summary": "Fetches an injectable HTTP JSON model with parser, cache, redacted public endpoint records, and request lifecycle events.",
      "availability": "Browser / native WebView / server with fetch",
      "protocol": "HTTP(S) fetch + per-realm globalThis.arcaneEvents authority",
      "normalization": "Request records are normalized; fetch/provider failures remain mixed.",
      "surface": "`API_MODEL_EVENTS`, `API_MODEL_ERRORS`, default `ApiModelDatabase`; `setEndpoint()`, `fetch()`, `cached()`, and `dispose()`; state-free EventTarget/on compatibility for request, success, and error occurrences."
    },
    {
      "file": "runtime/arcane/modules/AppDataScope.js",
      "name": "AppDataScope.js",
      "kind": "esm",
      "exports": [
        "APPLICATION_ID_MAX_LENGTH",
        "APPLICATION_ID_PATTERN",
        "APP_DATA_DIRECTORY",
        "APP_LOCAL_STORAGE_PREFIX",
        "canonicalApplicationId",
        "declaredApplicationId",
        "openApplicationDataDirectory",
        "resolveApplicationId",
        "resolveApplicationLocalStorageKey",
        "resolveBrowserApplicationId"
      ],
      "summary": "Reconciles declared and native application identity and scopes OPFS/localStorage ownership fail-closed.",
      "availability": "Browser / native WebView hybrid",
      "protocol": "Arcane.app.current, DOM declaration, OPFS",
      "normalization": "Strict normalized identifiers and coded mismatch failures.",
      "surface": "Identity constants and `canonicalApplicationId()`, `resolveApplicationId()`, `resolveApplicationLocalStorageKey()`, `openApplicationDataDirectory()`."
    },
    {
      "file": "runtime/arcane/modules/AppearancePreferences.js",
      "name": "AppearancePreferences.js",
      "kind": "esm",
      "exports": [
        "appearancePreferenceSchema",
        "applyAppearancePreferences",
        "createAppearancePreferenceStore",
        "loadAndApplyAppearancePreferences"
      ],
      "summary": "Defines, stores, and applies color scheme, density, reduced motion, and large-text preferences.",
      "availability": "Browser / native WebView hybrid",
      "protocol": "PreferenceStore, DOM, optional Arcane preferences",
      "normalization": "Normalized values; storage/host failures remain mixed.",
      "surface": "`appearancePreferenceSchema`, `createAppearancePreferenceStore()`, `applyAppearancePreferences()`, `loadAndApplyAppearancePreferences()`."
    },
    {
      "file": "runtime/arcane/modules/ArcaneCommunicationBridge.js",
      "name": "ArcaneCommunicationBridge.js",
      "kind": "esm",
      "exports": [
        "default"
      ],
      "summary": "Maps provider HTTP threads/messages/connect/disconnect endpoints to normalized communication entities.",
      "availability": "Browser / native WebView / server with fetch",
      "protocol": "JSON HTTP(S), default loopback 127.0.0.1:8020",
      "normalization": "Entity results are normalized; provider/transport failures remain mixed.",
      "surface": "default `ArcaneCommunicationBridge`; `request()`, `listThreads()`, `getMessages()`, `send()`, `connect()`, `disconnect()`."
    },
    {
      "file": "runtime/arcane/modules/ArcaneNavigationPolicy.js",
      "name": "ArcaneNavigationPolicy.js",
      "kind": "esm",
      "exports": [
        "createArcaneNavigationGuard"
      ],
      "summary": "Creates an HTTP(S) navigation guard with explicit secure-mode domain and CIDR policy decisions.",
      "availability": "Cross-host",
      "protocol": "Arcane network-policy document",
      "normalization": "Complete mutable allow/block decision; ordinary mode warns and continues, while explicitly selected secure:true fails closed.",
      "surface": "`createArcaneNavigationGuard({ secure })`."
    },
    {
      "file": "runtime/arcane/modules/ArcaneNetworkPolicy.js",
      "name": "ArcaneNetworkPolicy.js",
      "kind": "esm",
      "exports": [
        "ARCANE_NETWORK_POLICY_SCHEMA_VERSION",
        "ARCANE_NETWORK_POLICY_URL",
        "canonicalNetworkHostname",
        "emptyArcaneNetworkPolicy",
        "findDeniedDomainRule",
        "findDeniedNetworkRule",
        "invalidateArcaneNetworkPolicyCache",
        "loadArcaneNetworkPolicy",
        "validateArcaneNetworkPolicy"
      ],
      "summary": "Validates the Arcane domain/network deny policy and matches domain, IPv4/IPv6 CIDR, protocol, and port rules.",
      "availability": "Cross-host",
      "protocol": "Same-origin policy fetch",
      "normalization": "Strict coded normalization.",
      "surface": "Policy constants plus validate/load/cache/match helpers."
    },
    {
      "file": "runtime/arcane/modules/AsyncBoundary.js",
      "name": "AsyncBoundary.js",
      "kind": "esm",
      "exports": [
        "AsyncBoundaryAbortError",
        "AsyncBoundaryTimeoutError",
        "asyncBoundaryDefaults",
        "default",
        "runAsyncBoundary"
      ],
      "summary": "Runs one asynchronous operation with timeout, abort, result validation, and stable boundary errors.",
      "availability": "Cross-host",
      "protocol": "AbortController and timers",
      "normalization": "Fully normalized timeout/abort errors.",
      "surface": "`AsyncBoundaryTimeoutError`, `AsyncBoundaryAbortError`, defaults, `runAsyncBoundary()`, and default alias."
    },
    {
      "file": "runtime/arcane/modules/BrowserTestSuite.js",
      "name": "BrowserTestSuite.js",
      "kind": "esm",
      "exports": [
        "BROWSER_TEST_SUITE_ERROR_CODES",
        "BROWSER_TEST_SUITE_EVENT_TYPES",
        "BROWSER_TEST_SUITE_REASONS",
        "assertionError",
        "default",
        "skipError"
      ],
      "summary": "Runs a complete sequential browser test list with explicit cancellation and full-detail lifecycle events.",
      "availability": "Browser / standard Web APIs",
      "protocol": "Explicit AbortSignal cancellation + per-realm globalThis.arcaneEvents authority",
      "normalization": "Complete mutable descriptors, results, lifecycle events, and context; malformed result and skip/assertion errors remain normalized.",
      "surface": "Event/error/reason constants; default `BrowserTestSuite`; `list()`, `run()`, and `dispose()`; state-free EventTarget/on compatibility for suite/test lifecycle occurrences."
    },
    {
      "file": "runtime/arcane/modules/CalculatorEngine.js",
      "name": "CalculatorEngine.js",
      "kind": "esm",
      "exports": [
        "CALCULATOR_ENGINE_ERROR_CODES",
        "default",
        "evaluateExpression"
      ],
      "summary": "Evaluates complete arithmetic expressions, powers, constants, and common functions without `eval`.",
      "availability": "Cross-host",
      "protocol": "arcane-event-source/1 on the per-realm globalThis.arcaneEvents authority",
      "normalization": "Mutable complete canonical result/error details, source-instance operation IDs, and exact parser/evaluation error codes.",
      "surface": "CALCULATOR_ENGINE_ERROR_CODES; default CalculatorEngine with calculate() and dispose()/destroy(); evaluateExpression()."
    },
    {
      "file": "runtime/arcane/modules/ChartLibrary.js",
      "name": "ChartLibrary.js",
      "kind": "esm",
      "exports": [
        "default"
      ],
      "summary": "Loads the bundled uPlot classic script once and returns its global constructor.",
      "availability": "Browser / native WebView",
      "protocol": "DOM script injection",
      "normalization": "Load state/errors normalized; uPlot result is vendor-native.",
      "surface": "default `loadChartLibrary()`."
    },
    {
      "file": "runtime/arcane/modules/ChatRecords.js",
      "name": "ChatRecords.js",
      "kind": "esm",
      "exports": [
        "hasConversationEntry",
        "hasUserEntry",
        "recurringChatMessages"
      ],
      "summary": "Detects conversation entries and projects retained state into provider-safe recurring chat context.",
      "availability": "Cross-host",
      "protocol": "In-process only",
      "normalization": "Boolean conversation-entry results and recurring provider context are normalized.",
      "surface": "`hasUserEntry()`, `hasConversationEntry()`, and `recurringChatMessages(chat,{settleCompleteToolTail=false}={})`; the optional flag settles a completed restored tail that has no active provider continuation."
    },
    {
      "file": "runtime/arcane/modules/CommunicationAppController.js",
      "name": "CommunicationAppController.js",
      "kind": "esm",
      "exports": [
        "COMMUNICATION_APP_CONTROLLER_ERROR_CODES",
        "default"
      ],
      "summary": "Binds shared inbox, conversation, settings, theme, and provider workflows into one UI controller.",
      "availability": "Browser / native WebView hybrid",
      "protocol": "DOM plus communication providers",
      "normalization": "Controller state normalized; provider/DOM failures mixed.",
      "surface": "default controller with `start()`, `bind()`, `configure()`, `refresh()`, `select()`, `send()`, and settings actions."
    },
    {
      "file": "runtime/arcane/modules/CommunicationHub.js",
      "name": "CommunicationHub.js",
      "kind": "esm",
      "exports": [
        "COMMUNICATION_HUB_ERROR_CODES",
        "COMMUNICATION_HUB_EVENTS",
        "COMMUNICATION_HUB_REFRESH_REASONS",
        "COMMUNICATION_HUB_REFRESH_STATES",
        "default"
      ],
      "summary": "Fans out provider refresh/send operations and aggregates normalized threads/messages.",
      "availability": "Cross-host with injected providers",
      "protocol": "Injected provider contract + per-realm globalThis.arcaneEvents authority",
      "normalization": "Normalized aggregates; refresh contains per-provider failures.",
      "surface": "Event/state/reason/error constants; default `CommunicationHub`; provider enablement, `refresh()`, `messages()`, `send()`, state-free EventTarget/on compatibility, and `dispose()`."
    },
    {
      "file": "runtime/arcane/modules/CommunicationPreferences.js",
      "name": "CommunicationPreferences.js",
      "kind": "esm",
      "exports": [
        "default"
      ],
      "summary": "Stores app-scoped, non-secret communication provider preferences.",
      "availability": "Browser / native WebView hybrid",
      "protocol": "Arcane.preferences or localStorage",
      "normalization": "Normalized preference record; storage failures mixed.",
      "surface": "default `CommunicationPreferences`; `load()`, `save()`."
    },
    {
      "file": "runtime/arcane/modules/CommunicationProviderRegistry.js",
      "name": "CommunicationProviderRegistry.js",
      "kind": "esm",
      "exports": [
        "default"
      ],
      "summary": "Registers and queries validated provider definitions, channels, and required methods.",
      "availability": "Cross-host",
      "protocol": "In-process only",
      "normalization": "Strict normalized registry.",
      "surface": "default registry with `register()`, `get()`, `has()`, `list()`."
    },
    {
      "file": "runtime/arcane/modules/ComponentContracts.js",
      "name": "ComponentContracts.js",
      "kind": "esm",
      "exports": [
        "CHART_LABELS",
        "DASHBOARD_LABELS",
        "MARKDOWN_FORMATS",
        "MARKDOWN_LABELS",
        "STT_ACTIVATION_ERROR_CODES",
        "STT_ACTIVATION_EVENT_TYPES",
        "STT_ACTIVATION_REASONS",
        "VOICE_LABELS",
        "VOICE_MESSAGES",
        "appendTranscription",
        "applyMarkdownFormat",
        "createSTTActivationController",
        "effectiveDashboardVisibility",
        "formatAIRuntimeProgress",
        "normalizeChartOptions",
        "normalizeChartRows",
        "normalizeDashboardDefinitions",
        "normalizeDashboardOptions",
        "normalizeDashboardVisibility",
        "normalizeMarkdownFormats",
        "normalizeMarkdownOptions",
        "normalizeVoiceOptions"
      ],
      "summary": "Owns normalized configuration/value contracts and shared explicit STT activation behavior for chart, dashboard, Markdown, and voice components.",
      "availability": "Cross-host with an injected event constructor outside DOM hosts",
      "protocol": "In-process only",
      "normalization": "Fully normalized labels, rows, definitions, visibility, formats, editor and voice options, plus capability-neutral STT activation intent and presentation state. Complete finite progress measures remain visible, including fractional and over-total values.",
      "surface": "Constant sets plus normalization, complete finite-progress formatting, and explicit STT activation helpers."
    },
    {
      "file": "runtime/arcane/modules/ConfiguredAIChatSession.js",
      "name": "ConfiguredAIChatSession.js",
      "kind": "esm",
      "exports": [
        "normalizeStructuralToolCall",
        "default"
      ],
      "summary": "Owns complete ordinary visible recurring AI turns, one active structural continuation, context construction, provider response preservation, and atomic history commit.",
      "availability": "Native bridge by default; cross-host with injected chat",
      "protocol": "Arcane.ai.chat or injected provider",
      "normalization": "Complete mutable session/result; declarations and emitted calls require nonempty user-facing arguments.message; ordered parallel calls and their exact IDs/names/arguments/extensions remain raw only through the active matching tool continuation, then settled recurrence becomes complete ordinary visible content; one atomic result batch must settle every pending ID; per-turn request options cannot replace session-owned messages or signal; persisted sequencing has stable coded failures; and provider rejection remains visible.",
      "surface": "default `ConfiguredAIChatSession`, named `normalizeStructuralToolCall`; constructor accepts complete initial messages and one unresolved ordered structural-call tail; history/clear/prepare/send; per-turn request overrides preserve session-owned messages/signal; every pending ID requires exactly one matching nonblank role=tool result in the same request batch; settled raw protocol does not recur."
    },
    {
      "file": "runtime/arcane/modules/ConversationActionItems.js",
      "name": "ConversationActionItems.js",
      "kind": "esm",
      "exports": [
        "CONVERSATION_ACTION_ITEM_BASES",
        "CONVERSATION_ACTION_ITEM_PRESENTATION_COOLDOWN_MS",
        "CONVERSATION_ACTION_ITEM_STATUSES",
        "conversationActionItemsInstruction",
        "createConversationActionItem",
        "formatConversationActionItemCheckIn",
        "markConversationActionItemsPresented",
        "normalizeConversationActionItem",
        "normalizeConversationActionItems",
        "normalizeRememberedConversationActions",
        "outstandingConversationActionItems",
        "rememberConversationActionItems",
        "removeConversationActionItem",
        "selectConversationActionItemsForPresentation",
        "updateConversationActionItem"
      ],
      "summary": "Normalizes, creates, updates, remembers, selects, and formats complete conversation action items.",
      "availability": "Cross-host",
      "protocol": "In-process only",
      "normalization": "Fully normalized status/base/presentation contract.",
      "surface": "Action-item constants and lifecycle/formatting helpers."
    },
    {
      "file": "runtime/arcane/modules/ConversationClosingReport.js",
      "name": "ConversationClosingReport.js",
      "kind": "esm",
      "exports": [
        "CONVERSATION_CLOSING_REPORT_TOOL_NAME",
        "classifyConversationClosingReportCalls",
        "conversationClosingReportInstruction",
        "createConversationClosingReportTool",
        "formatConversationClosingReport",
        "normalizeConversationClosingReport"
      ],
      "summary": "Defines the closing-report tool, instruction, result normalizer, call classifier, and formatter.",
      "availability": "Cross-host",
      "protocol": "In-process only",
      "normalization": "Required user-facing message remains distinct from the complete final_message; normalized results expose message, finalMessage, and rememberedActions.",
      "surface": "Six constants/helpers for closing reports; the sole-call schema requires message and final_message."
    },
    {
      "file": "runtime/arcane/modules/ConversationTimebox.js",
      "name": "ConversationTimebox.js",
      "kind": "esm",
      "exports": [
        "CONVERSATION_TIMEBOX_ERROR_CODES",
        "CONVERSATION_TIMEBOX_EVENT_TYPES",
        "CONVERSATION_TIMEBOX_LIMIT_MESSAGE",
        "CONVERSATION_TIMEBOX_OPENING_INSTRUCTION",
        "CONVERSATION_TIMEBOX_REASONS",
        "CONVERSATION_TIMEBOX_TOOL_NAME",
        "ConversationSubmissionBarrier",
        "appendConversationTimeboxOpeningInstruction",
        "consumeConversationTimeboxCall",
        "conversationTimeboxSubmissionKey",
        "conversationTimeboxTool",
        "createConversationTimeboxControlMessage",
        "default",
        "formatConversationElapsed",
        "normalizeConversationTimeboxCommand",
        "requireConversationTimeboxDelivery"
      ],
      "summary": "Owns conversation limits, control messages, submission barriers, elapsed formatting, and delivery proof.",
      "availability": "Cross-host",
      "protocol": "Clock/timers, callbacks, and per-realm globalThis.arcaneEvents authority",
      "normalization": "State/command/delivery errors plus exact required user-facing message are normalized.",
      "surface": "Event/error/reason constants; default `ConversationTimebox`, `ConversationSubmissionBarrier`, control constants/helpers, required message tool schema, state-free on/addEventListener compatibility, and `dispose()`."
    },
    {
      "file": "runtime/arcane/modules/CoreLocalModelCatalog.js",
      "name": "CoreLocalModelCatalog.js",
      "kind": "esm",
      "exports": [
        "USER_MANAGED_LOOPBACK_PROVIDER_MODE",
        "getCoreLocalModelCatalog",
        "getCoreLocalModelCatalogWithAdmissionFailures",
        "getCoreLocalSpeechAvailability",
        "isUserManagedLoopbackLocalAIStatus"
      ],
      "summary": "Projects Core local-AI status into UI-safe admitted model and speech availability catalogs.",
      "availability": "Cross-host",
      "protocol": "In-process projection of Core status",
      "normalization": "Fully normalized descriptors and stable admission labels.",
      "surface": "Provider-mode constant and four catalog/availability helpers."
    },
    {
      "file": "runtime/arcane/modules/DataMaintenance.js",
      "name": "DataMaintenance.js",
      "kind": "esm",
      "exports": [
        "clearEmptyChatsAndMemories",
        "hasConversationEntry",
        "hasMemoryContent",
        "hasUserEntry"
      ],
      "summary": "Deletes empty chats and associated/empty memory records inside the current app data scope.",
      "availability": "Browser / native WebView",
      "protocol": "Global DBOPFS",
      "normalization": "Normalized counts; destructive storage failures preserved.",
      "surface": "`clearEmptyChatsAndMemories()` plus content predicates."
    },
    {
      "file": "runtime/arcane/modules/DBLS.js",
      "name": "DBLS.js",
      "kind": "esm",
      "exports": [
        "DBLS_EVENT_TYPES",
        "DBLS_REASONS",
        "default"
      ],
      "summary": "Provides app-scoped localStorage tables, batch reads/writes, filtering, deletion, and counts.",
      "availability": "Browser / native WebView",
      "protocol": "localStorage + AppDataScope + per-realm globalThis.arcaneEvents authority",
      "normalization": "Scoped keys and values normalized; storage failures mixed.",
      "surface": "default `DBLS`; installs `window.dbls`, emits `dbls-ready`; CRUD/batch/key APIs."
    },
    {
      "file": "runtime/arcane/modules/DBOPFS.js",
      "name": "DBOPFS.js",
      "kind": "esm",
      "exports": [
        "DBOPFS_EVENT_TYPES",
        "DBOPFS_REASONS",
        "default"
      ],
      "summary": "Provides app-scoped OPFS tables, worker I/O, backup/restore, compression, and CRUD/batch APIs.",
      "availability": "Browser / native WebView",
      "protocol": "OPFS, DBOPFSWorker, Compression Streams, and per-realm globalThis.arcaneEvents authority",
      "normalization": "App scope and recognized file parsing are normalized; nonblank unreadable JSONL rows remain complete raw strings, and DOM/storage errors are preserved.",
      "surface": "default `DBOPFS`; installs `window.dbopfs`, emits `dbopfs-ready`; table/file/backup APIs."
    },
    {
      "file": "runtime/arcane/modules/DBOPFSDocumentLibrary.js",
      "name": "DBOPFSDocumentLibrary.js",
      "kind": "esm",
      "exports": [
        "DBOPFSDocumentLibrary",
        "createDBOPFSDocumentLibrary",
        "default",
        "normalizeDBOPFSDocumentSchema"
      ],
      "summary": "Application-defined complete document corpus bootstrap, caller-source evaluation, atomic DBOPFS generations, lexical search, and request-context construction.",
      "availability": "Browser or compatible host with an existing DBOPFS-style database adapter",
      "protocol": "Existing DBOPFS get/set/getAllKeys/delete methods; no new storage protocol",
      "normalization": "Preserves DBOPFS method semantics, commits a completion manifest last, rejects malformed stored generations, exposes explicit reject or default preserve-readable read-failure policy, and returns complete mutable context.",
      "surface": "`DBOPFSDocumentLibrary`, `createDBOPFSDocumentLibrary()`, `normalizeDBOPFSDocumentSchema()`; `schema`, `bootstrap()`, `search()`, `evaluate()`, `buildContext()`, and `createContextBuilder()`."
    },
    {
      "file": "runtime/arcane/modules/DBOPFSWorker.js",
      "name": "DBOPFSWorker.js",
      "kind": "worker",
      "exports": [],
      "summary": "Serializes OPFS sync-handle read/write requests from a MessagePort.",
      "availability": "Dedicated worker",
      "protocol": "MessageChannel + OPFS sync access handle",
      "normalization": "Responses normalize to `{success,fileData?}` or `{error:{name,message}}`.",
      "surface": "No ESM exports; accepts `read` and `write` port requests."
    },
    {
      "file": "runtime/arcane/modules/DevelopmentWorkspace.js",
      "name": "DevelopmentWorkspace.js",
      "kind": "esm",
      "exports": [
        "contextQuery",
        "default",
        "setupTaskId",
        "workspaceRoot"
      ],
      "summary": "Provides complete workspace inspection, context, setup task, and Node installer clients without arbitrary command execution.",
      "availability": "Native bridge",
      "protocol": "Arcane.development",
      "normalization": "Complete plain-text inputs and provider result/error preserved.",
      "surface": "default `DevelopmentWorkspace` and input validators; `inspect()`, `context()`, `setup()`, `installNode()`."
    },
    {
      "file": "runtime/arcane/modules/DirectoryPicker.js",
      "name": "DirectoryPicker.js",
      "kind": "esm",
      "exports": [
        "default",
        "normalizeDirectoryPickerOptions",
        "normalizeDirectorySelection"
      ],
      "summary": "Wraps the provider-owned native directory chooser and normalizes selected/cancelled/error results.",
      "availability": "Native bridge",
      "protocol": "Arcane.filesystem.selectDirectory",
      "normalization": "Complete mutable caller options and provider result fields; coded cancellation and malformed-result errors.",
      "surface": "default `DirectoryPicker`, `normalizeDirectoryPickerOptions()`, `normalizeDirectorySelection()`."
    },
    {
      "file": "runtime/arcane/modules/DocumentLexicalSearch.js",
      "name": "DocumentLexicalSearch.js",
      "kind": "esm",
      "exports": [
        "DOCUMENT_SEARCH_FIELD_ORDER",
        "DocumentLexicalSearch",
        "createDocumentLexicalIndex",
        "default",
        "documentContextExcerpt",
        "documentSearchTokens",
        "normalizedDocumentSearchText",
        "scoreDocumentBody",
        "scoreDocumentLexicalIndex"
      ],
      "summary": "Dependency-free deterministic document indexing, complete ranked metadata/body search, complete excerpts, and stable tie-breaking.",
      "availability": "Cross-host in-process only",
      "protocol": "In-process mutable record contract",
      "normalization": "Normalizes text and filters, preserves deterministic field priority, and returns complete mutable results without network, storage, or provider side effects.",
      "surface": "Search-field constant; `DocumentLexicalSearch`; index/token/score/excerpt helpers; complete `rank()` and `search()`."
    },
    {
      "file": "runtime/arcane/modules/DocumentNavigation.js",
      "name": "DocumentNavigation.js",
      "kind": "esm",
      "exports": [
        "applyDocumentNavigationFilter",
        "bindDocumentNavigation",
        "clearDocumentNavigationFilter",
        "initializeDocumentNavigation",
        "revealCurrentDocumentNavigationItem"
      ],
      "summary": "Binds document navigation, filtering, history, current-item reveal, and load initialization.",
      "availability": "Browser / native WebView",
      "protocol": "DOM and history",
      "normalization": "Normalized filter/navigation state; DOM effects preserved.",
      "surface": "Five binding/filter/reveal helpers."
    },
    {
      "file": "runtime/arcane/modules/Errors.js",
      "name": "Errors.js",
      "kind": "esm",
      "exports": [
        "GLOBAL_ERROR_EVENT_CODES",
        "GLOBAL_ERROR_EVENT_TYPES",
        "GLOBAL_ERROR_REASONS",
        "default",
        "normalizeErrorEvent",
        "normalizeRejectionEvent"
      ],
      "summary": "Normalizes global errors/rejections, assigns occurrence identifiers, persists a ledger, and performs bounded delivery.",
      "availability": "Browser / native WebView hybrid",
      "protocol": "Window error input, DBOPFS, Mail, and per-realm globalThis.arcaneEvents authority",
      "normalization": "Incident records normalized; storage/mail failures isolated.",
      "surface": "Global error event/code/reason constants; default `Errors`; event normalizers plus lifecycle, capture, delivery, state-free compatibility observation, and teardown methods."
    },
    {
      "file": "runtime/arcane/modules/GifEncoder.js",
      "name": "GifEncoder.js",
      "kind": "esm",
      "exports": [
        "default",
        "indexPixels",
        "lzw"
      ],
      "summary": "Encodes indexed frames into a bounded animated GIF using palette mapping and LZW.",
      "availability": "Cross-host",
      "protocol": "In-process only",
      "normalization": "Normalized byte output and bounds.",
      "surface": "default `GifEncoder`, `indexPixels()`, `lzw()`."
    },
    {
      "file": "runtime/arcane/modules/HTMLImport.js",
      "name": "HTMLImport.js",
      "kind": "esm",
      "exports": [
        "default"
      ],
      "summary": "Defines the same-origin `<html-import>` loader with open shadow root, inline script execution, and readiness/error events.",
      "availability": "Browser / native WebView",
      "protocol": "Same-origin fetch + DOM",
      "normalization": "Public error detail normalized; fetch/DOM failure preserved.",
      "surface": "default `HTMLImport`; registers `html-import`; `connectedCallback()` and `ready`."
    },
    {
      "file": "runtime/arcane/modules/InMemoryCommunicationProvider.js",
      "name": "InMemoryCommunicationProvider.js",
      "kind": "esm",
      "exports": [
        "default"
      ],
      "summary": "Implements deterministic in-memory thread/message/send behavior for demos and tests.",
      "availability": "Cross-host",
      "protocol": "In-process only",
      "normalization": "Normalized communication entities.",
      "surface": "default provider with `listThreads()`, `getMessages()`, `send()`."
    },
    {
      "file": "runtime/arcane/modules/IsolatedModelQuestionRunner.js",
      "name": "IsolatedModelQuestionRunner.js",
      "kind": "esm",
      "exports": [
        "IsolatedModelQuestionRunner",
        "countSentences",
        "default"
      ],
      "summary": "Inspects one exact model and runs one isolated question while preserving complete results.",
      "availability": "Native bridge or injected provider",
      "protocol": "localAI isolated-model methods",
      "normalization": "Complete inspection/question forwarding, complete provider results, informative sentence counts, and coded malformed-result errors are normalized.",
      "surface": "default/named runner, `countSentences()`, `inspectModel()`, `runQuestion()`."
    },
    {
      "file": "runtime/arcane/modules/LocalAIReadiness.js",
      "name": "LocalAIReadiness.js",
      "kind": "esm",
      "exports": [
        "LOCAL_AI_BROWSER_ENDPOINTS",
        "checkLocalAIReadiness",
        "deriveLocalAIRequirements",
        "evaluateLocalSpeechHealth"
      ],
      "summary": "Derives selected AI requirements and returns a complete readiness/recovery report across browser, desktop, and Android modes.",
      "availability": "Browser/native hybrid",
      "protocol": "Arcane.localAI, Arcane.speech, complete browser speech health",
      "normalization": "Fully normalized report and stable error codes; browsers never probe Ollama.",
      "surface": "Endpoint constant plus requirements, speech-health, and readiness helpers."
    },
    {
      "file": "runtime/arcane/modules/LocalAIReadinessController.js",
      "name": "LocalAIReadinessController.js",
      "kind": "esm",
      "exports": [
        "LOCAL_AI_READINESS_CONTROLLER_ERROR_CODES",
        "LOCAL_AI_READINESS_CONTROLLER_EVENT_TYPES",
        "LOCAL_AI_READINESS_CONTROLLER_REASONS",
        "availabilityFromReport",
        "createLocalAIReadinessController"
      ],
      "summary": "Coordinates local-AI status component checks, ensured recovery, availability projection, and teardown.",
      "availability": "Browser/native hybrid",
      "protocol": "LocalAIReadiness + per-realm globalThis.arcaneEvents authority + one-way component projections",
      "normalization": "Normalized controller state and change events.",
      "surface": "Event/error/reason constants, `createLocalAIReadinessController()`, and `availabilityFromReport()`; returned controller owns abort, refresh/ensure, subscription, and `destroy()` cleanup."
    },
    {
      "file": "runtime/arcane/modules/Mail.js",
      "name": "Mail.js",
      "kind": "esm",
      "exports": [
        "default",
        "resolveMailConfig"
      ],
      "summary": "Builds complete reports and prefers the native mail capability with an explicit HTTP transport fallback.",
      "availability": "Browser/native hybrid + cloud",
      "protocol": "Arcane.mail.send or MailTransport HTTP(S)",
      "normalization": "Mail inputs/results normalized; transport failures mixed.",
      "surface": "default `Mail`, `resolveMailConfig()`; installs `window.mail`; `send()`."
    },
    {
      "file": "runtime/arcane/modules/MailOutbox.mjs",
      "name": "MailOutbox.mjs",
      "kind": "esm",
      "exports": [
        "MAIL_OUTBOX_IDEMPOTENCY_WINDOW_MS",
        "MAIL_OUTBOX_PROTOCOL",
        "MAIL_OUTBOX_STATES",
        "MAIL_OUTBOX_TABLE",
        "MailOutbox",
        "createMailOutbox",
        "default"
      ],
      "summary": "Persists complete mail reports before delivery and normalizes idempotent enqueue, retry, reconciliation, and invalid-record maintenance.",
      "availability": "Browser/native WebView or compatible injected host with durable storage, Web Locks, and a delivery function",
      "protocol": "arcane-mail-outbox/1 + injected durable storage + Web Locks + AbortSignal + online EventTarget",
      "normalization": "Complete records, idempotency and retry/reconciliation state, full drains/inventory, cancellation, and invalid-record maintenance are normalized; storage, lock, and delivery failures are coded.",
      "surface": "Protocol/table/window/state constants; `MailOutbox`, factory/default; read-only lifecycle diagnostics; record inspection and maintenance; enqueue, drain, start, and stop."
    },
    {
      "file": "runtime/arcane/modules/MailTransport.mjs",
      "name": "MailTransport.mjs",
      "kind": "esm",
      "exports": [
        "MailTransportError",
        "normalizeMailEndpoint",
        "serializeMailReport",
        "sendMailReport"
      ],
      "summary": "Sends one complete mail report to a normalized HTTP(S) endpoint with timeout and complete response handling.",
      "availability": "Browser/server with fetch + cloud",
      "protocol": "HTTP(S) fetch + AbortController",
      "normalization": "Endpoint, timeout, cancellation, network, HTTP, and response-contract errors are normalized.",
      "surface": "`MailTransportError`, `normalizeMailEndpoint()`, `serializeMailReport()`, and `sendMailReport()`."
    },
    {
      "file": "runtime/arcane/modules/MarkdownSpeech.js",
      "name": "MarkdownSpeech.js",
      "kind": "esm",
      "exports": [
        "MarkdownSpeech"
      ],
      "summary": "Re-exports the shared MarkdownSpeech class that removes repeated same formatting marks from streamed narration before speech segmentation.",
      "availability": "Cross-host",
      "protocol": "Shared arcane-os/speech-text package entrypoint",
      "normalization": "The runtime projection and public package subpath share speech-only filtering of repeated *, #, _, backtick, and ~ runs across chunks; single marks and all other characters remain literal; terminal flush and reset clear pending formatting state.",
      "surface": "`MarkdownSpeech`; `append(text='',end=false)`, `reset()`."
    },
    {
      "file": "runtime/arcane/modules/Marked.min.js",
      "name": "Marked.min.js",
      "kind": "esm",
      "exports": [
        "Hooks",
        "Lexer",
        "Marked",
        "Parser",
        "Renderer",
        "TextRenderer",
        "Tokenizer",
        "defaults",
        "getDefaults",
        "lexer",
        "marked",
        "options",
        "parse",
        "parseInline",
        "parser",
        "setOptions",
        "use",
        "walkTokens"
      ],
      "summary": "Vendored Marked 18.0.5 Markdown lexer, parser, renderer, extension, and walk-token API.",
      "availability": "Cross-host vendor module",
      "protocol": "In-process only",
      "normalization": "Vendor-native Marked contract.",
      "surface": "Twenty named/default-style Marked exports; see bundled license notice."
    },
    {
      "file": "runtime/arcane/modules/MD.js",
      "name": "MD.js",
      "kind": "esm",
      "exports": [
        "default"
      ],
      "summary": "Renders complete Markdown with Marked and exposes the complete rendered markup.",
      "availability": "Browser / native WebView",
      "protocol": "Marked",
      "normalization": "Complete raw and rendered Marked values; parse errors remain vendor-native.",
      "surface": "default `MD`; `raw`, `rendered`, `safeRendered`, `append()`."
    },
    {
      "file": "runtime/arcane/modules/MemoryRecords.js",
      "name": "MemoryRecords.js",
      "kind": "esm",
      "exports": [
        "hasMemoryContent",
        "normalizeMemoryContent"
      ],
      "summary": "Normalizes memory content and detects meaningful stored memory.",
      "availability": "Cross-host",
      "protocol": "In-process only",
      "normalization": "Fully normalized string/boolean results.",
      "surface": "`normalizeMemoryContent()`, `hasMemoryContent()`."
    },
    {
      "file": "runtime/arcane/modules/MessageAdvisory.js",
      "name": "MessageAdvisory.js",
      "kind": "esm",
      "exports": [
        "inspectMessageRecords",
        "normalizeContentAdvisory",
        "unavailableMessageInspection"
      ],
      "summary": "Normalizes message content advisories and contains per-message inspection failures.",
      "availability": "Cross-host",
      "protocol": "Injected inspector",
      "normalization": "Complete mutable advisory records preserve all supplied text and signals; inspector failures become unavailable results.",
      "surface": "Three advisory/inspection helpers."
    },
    {
      "file": "runtime/arcane/modules/ModelDefinition.js",
      "name": "ModelDefinition.js",
      "kind": "esm",
      "exports": [
        "loadModelDefinitionSystemPrompt",
        "parseModelDefinition"
      ],
      "summary": "Parses the deterministic packaged Modelfile subset and extracts the SYSTEM prompt.",
      "availability": "Cross-host",
      "protocol": "Optional ordinary read-only fetch",
      "normalization": "Complete mutable definition data with coded syntax errors for malformed input.",
      "surface": "`parseModelDefinition()`, `loadModelDefinitionSystemPrompt()`."
    },
    {
      "file": "runtime/arcane/modules/Ollama.js",
      "name": "Ollama.js",
      "kind": "esm",
      "exports": [
        "OLLAMA_EVENT_TYPES",
        "OLLAMA_REASONS",
        "Ollama",
        "default",
        "ollama"
      ],
      "summary": "Provides the first-class Arcane Ollama client without direct access to localhost:11434.",
      "availability": "Native bridge",
      "protocol": "Arcane.ollama through Core + per-realm globalThis.arcaneEvents authority",
      "normalization": "Principal methods preserve provider-native envelopes; readiness/text/unload helpers normalize.",
      "surface": "`Ollama`, singleton/default `ollama`; 24 methods; installs `globalThis.arcaneOllama`, emits `arcane-ollama-ready`."
    },
    {
      "file": "runtime/arcane/modules/OllamaModelIdentifier.js",
      "name": "OllamaModelIdentifier.js",
      "kind": "esm",
      "exports": [
        "isOllamaModelIdentifier",
        "normalizeOllamaModelIdentifier"
      ],
      "summary": "Validates and canonicalizes the syntax of Ollama model identifiers without granting model admission.",
      "availability": "Cross-host",
      "protocol": "In-process only",
      "normalization": "Fully normalized string/boolean result.",
      "surface": "`normalizeOllamaModelIdentifier()`, `isOllamaModelIdentifier()`."
    },
    {
      "file": "runtime/arcane/modules/OllamaSettings.js",
      "name": "OllamaSettings.js",
      "kind": "esm",
      "exports": [
        "arcaneBrainModelName",
        "ollamaRuntimeSchema",
        "ollamaServiceSchema"
      ],
      "summary": "Defines bounded runtime/service preference schemas and deterministic Arcane brain alias names.",
      "availability": "Cross-host",
      "protocol": "In-process only",
      "normalization": "Fully normalized settings/name contract.",
      "surface": "`ollamaRuntimeSchema`, `ollamaServiceSchema`, `arcaneBrainModelName()`."
    },
    {
      "file": "runtime/arcane/modules/OpenMeteoWeatherProvider.js",
      "name": "OpenMeteoWeatherProvider.js",
      "kind": "esm",
      "exports": [
        "OPEN_METEO_ENDPOINTS",
        "OPEN_METEO_WEATHER_ERRORS",
        "OPEN_METEO_WEATHER_EVENTS",
        "default",
        "mapForecast"
      ],
      "summary": "Searches and loads Open-Meteo data into complete mutable Arcane weather entities.",
      "availability": "Browser / native WebView / server with fetch + cloud",
      "protocol": "Open-Meteo HTTPS + per-realm globalThis.arcaneEvents authority",
      "normalization": "Provider data normalized to entities; transport errors mixed.",
      "surface": "Endpoint/event/error constants, default provider, `mapForecast()`; search/load methods, state-free EventTarget/on lifecycle compatibility, and `dispose()`."
    },
    {
      "file": "runtime/arcane/modules/PersistentAIChatSession.js",
      "name": "PersistentAIChatSession.js",
      "kind": "esm",
      "exports": [
        "PersistentAIChatSession",
        "createPersistentAIChatSession",
        "default"
      ],
      "summary": "Composes complete configured chat with an existing ChatEntity so each user, assistant, and structural tool turn has an explicit persistence and transport policy.",
      "availability": "Browser or native WebView with the projected ChatEntity, DBOPFS, and a configured chat function or normalized Arcane.ai surface",
      "protocol": "Existing ChatEntity/DBOPFS methods plus provider-neutral chat request/result records",
      "normalization": "Preserves complete ordinary visible recurring provider history, one active raw structural continuation, every sanitized timestamped transcript record, and arbitrary nonempty caller-owned chat file names; commits live context atomically; falls back from optional streaming to configured non-stream transport; carries per-turn generation options while owning lifecycle callbacks; exposes complete data callbacks; accepts terminal-only structural calls; correlates every observed per-choice call against the exact validated terminal envelope before callback/persistence; atomically settles every pending ID once; and keeps malformed stored records readable without inventing or rewriting messages.",
      "surface": "Default/named `PersistentAIChatSession`, `createPersistentAIChatSession()`; `create()`, `ai`, `chatEntity`, `fileName`, `ready()`, `history()`, `transcript()`, `settleMemory()`, `send()`, and `stream()`."
    },
    {
      "file": "runtime/arcane/modules/PreferenceStore.js",
      "name": "PreferenceStore.js",
      "kind": "esm",
      "exports": [
        "PREFERENCE_STORE_ERROR_CODES",
        "PREFERENCE_STORE_EVENT_TYPES",
        "Preference",
        "default",
        "preferenceSchema"
      ],
      "summary": "Loads and updates schema-defined app preferences through native storage with a narrow browser fallback.",
      "availability": "Browser/native hybrid",
      "protocol": "Arcane.preferences or app-scoped localStorage + per-realm globalThis.arcaneEvents authority",
      "normalization": "Complete ordinary values remain mutable; setAll uses one optional atomic adapter batch for every selected value when advertised, otherwise retains complete serial per-key compatibility, never retries a rejected dispatched batch serially, and only exact unsupported native capability changes future operations to the browser fallback.",
      "surface": "Event/error constants, default `PreferenceStore`, re-exported `Preference`/schema; load/set/setAll/reset APIs, required adapter get/set/delete plus optional setMany, state-free EventTarget/on compatibility, and `dispose()`."
    },
    {
      "file": "runtime/arcane/modules/PreparedSpeech.js",
      "name": "PreparedSpeech.js",
      "kind": "esm",
      "exports": [
        "prepareSpeech"
      ],
      "summary": "Owns detached ordered speech preparation, complete semantic audio reuse, and per-caller cancellation behind AI.prepareTTS.",
      "availability": "Browser or native WebView with Blob, AbortController, an injected synthesis callback, and optional ready DBOPFS",
      "protocol": "In-process preparation handle plus caller-owned DBOPFS raw audio and version-1 semantic manifest",
      "normalization": "Preserves complete original parts and JSON-compatible semantic context, shares pending matching work on the same owner/storage group, admits segments in order, stores complete Blobs and MIME metadata, retains successful audio after failure or cancellation, and separates generation readiness from playback.",
      "surface": "Named prepareSpeech({owner,parts,originalParts,selection,segmentation,storage,identity,signal,onState,synthesize}) returns {segments,state,ready,getAudio(index),cancel()}; applications use AI.prepareTTS and AI.playPreparedTTS so the shared AI owner retains segmentation, provider readiness, capacity, and playback."
    },
    {
      "file": "runtime/arcane/modules/QRCode.min.js",
      "name": "QRCode.min.js",
      "kind": "classic-script",
      "exports": [],
      "summary": "Vendored QRCode generator for DOM, canvas, SVG, and image output.",
      "availability": "Browser vendor script",
      "protocol": "Classic script global + DOM/canvas/SVG",
      "normalization": "Vendor-native.",
      "surface": "No ESM exports; global `QRCode`, `makeCode()`, `makeImage()`, `clear()`, `CorrectLevel`."
    },
    {
      "file": "runtime/arcane/modules/Questionnaire.js",
      "name": "Questionnaire.js",
      "kind": "esm",
      "exports": [
        "DEFAULT_QUESTIONNAIRE_NOTIFICATION_TIME_MS",
        "Questionnaire"
      ],
      "summary": "Evaluates whether a one-time questionnaire prompt is due without performing the prompt.",
      "availability": "Cross-host",
      "protocol": "In-process clock only",
      "normalization": "Normalized fail-closed boolean.",
      "surface": "Notification default and `Questionnaire` with timing/check methods."
    },
    {
      "file": "runtime/arcane/modules/RecordLinkIndex.js",
      "name": "RecordLinkIndex.js",
      "kind": "esm",
      "exports": [
        "buildRecordLinkIndex",
        "parseRecordLinks"
      ],
      "summary": "Parses record links and builds their normalized index.",
      "availability": "Cross-host",
      "protocol": "In-process only",
      "normalization": "Supported URLs and bare video IDs normalize to mutable locators; ordinary hosting is the default and privacy enhancement is opt-in.",
      "surface": "`parseRecordLinks()`, `buildRecordLinkIndex()`."
    },
    {
      "file": "runtime/arcane/modules/RecordPassageIndex.js",
      "name": "RecordPassageIndex.js",
      "kind": "esm",
      "exports": [
        "cleanExcerpt",
        "extractDateMentions",
        "findRulePassages",
        "pageAtLine",
        "pageMarkers",
        "parseDateMention",
        "textLines",
        "validIsoDate"
      ],
      "summary": "Indexes text lines, page markers, dates, rules, and excerpts for record review.",
      "availability": "Cross-host",
      "protocol": "In-process only",
      "normalization": "Complete selected excerpts and every unique date/rule finding are preserved without character or result-count caps.",
      "surface": "Eight text/page/date/rule helper exports."
    },
    {
      "file": "runtime/arcane/modules/RecordReviewStore.js",
      "name": "RecordReviewStore.js",
      "kind": "esm",
      "exports": [
        "RECORD_REVIEW_STORE_ERROR_CODES",
        "RECORD_REVIEW_STORE_EVENT_TYPES",
        "default",
        "normalizeRecordId",
        "normalizeReview"
      ],
      "summary": "Stores normalized record-review decisions through native storage or app-scoped local fallback.",
      "availability": "Browser/native hybrid",
      "protocol": "Arcane.storage or localStorage + per-realm globalThis.arcaneEvents authority",
      "normalization": "Complete records preserved; unreadable stored content fails observably.",
      "surface": "Event/error constants, default store, record/review normalizers; `load()`, `get()`, `set()`, `snapshot()`, state-free EventTarget/on change compatibility, and `dispose()`."
    },
    {
      "file": "runtime/arcane/modules/RiskSignalAnalyzer.js",
      "name": "RiskSignalAnalyzer.js",
      "kind": "esm",
      "exports": [
        "DEFAULT_LEVELS",
        "analyzeRiskSignals"
      ],
      "summary": "Matches configured risk signals and levels against complete text.",
      "availability": "Cross-host",
      "protocol": "In-process only",
      "normalization": "Fully normalized.",
      "surface": "`DEFAULT_LEVELS`, `analyzeRiskSignals()`."
    },
    {
      "file": "runtime/arcane/modules/ScamRiskPolicy.js",
      "name": "ScamRiskPolicy.js",
      "kind": "esm",
      "exports": [
        "assessScamRisk",
        "loadScamNetworkPolicy",
        "scamRiskSignals",
        "scamSafetyGuidance"
      ],
      "summary": "Combines deterministic scam signals with optional Arcane blocked-domain evidence and safety guidance.",
      "availability": "Cross-host",
      "protocol": "Arcane network policy fetch",
      "normalization": "Complete mutable results; blocked-domain policy requires secure:true.",
      "surface": "Signals plus load, assess, and guidance helpers."
    },
    {
      "file": "runtime/arcane/modules/ScopedOPFSCache.js",
      "name": "ScopedOPFSCache.js",
      "kind": "esm",
      "exports": [
        "default"
      ],
      "summary": "Provides a narrow exact-key JSON cache inside one app-owned OPFS namespace.",
      "availability": "Browser / native WebView",
      "protocol": "OPFS + AppDataScope",
      "normalization": "Filename-safe scope and key segments, complete JSON values, and malformed-cache cleanup are normalized; storage errors remain mixed.",
      "surface": "default `ScopedOPFSCache`; support check and get/set/delete APIs."
    },
    {
      "file": "runtime/arcane/modules/ScreenCapture.js",
      "name": "ScreenCapture.js",
      "kind": "esm",
      "exports": [
        "SCREEN_CAPTURE_ERROR_CODES",
        "SCREEN_CAPTURE_ERRORS",
        "SCREEN_CAPTURE_EVENT_TYPES",
        "SCREEN_CAPTURE_IMAGE_TYPE_FALLBACK",
        "SCREEN_CAPTURE_REASONS",
        "SCREEN_CAPTURE_STATUSES",
        "default"
      ],
      "summary": "Captures a display surface as image, video, or GIF with explicit lifecycle events.",
      "availability": "Browser / native WebView",
      "protocol": "getDisplayMedia, MediaRecorder, canvas, GifEncoder, and per-realm globalThis.arcaneEvents authority",
      "normalization": "State/events normalized; permission and codec errors mixed.",
      "surface": "Event/status/error/reason and image-fallback constants; default `ScreenCapture`; acquire/capture/start/stop/reset methods, state-free EventTarget/on compatibility, and `destroy()`."
    },
    {
      "file": "runtime/arcane/modules/SpeechPlayback.js",
      "name": "SpeechPlayback.js",
      "kind": "esm",
      "exports": [
        "SPEECH_PLAYBACK_STATE_EVENT",
        "SPEECH_VOICE_ALIASES",
        "SPEECH_VOICE_OPTIONS",
        "SpeechPlayback",
        "default",
        "splitSpeechText"
      ],
      "summary": "Preserves exact nonblank stored segment text; removes repeated formatting marks from only each outbound synthesis copy; eagerly submits complete parts to a capacity-advertising fetchTTS provider while keeping playback indexed; and retains serialized one-segment lookahead for other clients.",
      "availability": "Browser + compatible AI/native bridge",
      "protocol": "AI.fetchTTS plus providerRuntime TTS execution capacity, or compatible serialized Arcane.speech.synthesize; globalThis.arcaneEvents, Blob URLs, audio element",
      "normalization": "Exact nonblank split/part input strings are preserved in mutable records. Each synthesis request clones that part, removes repeated formatting marks from only the outbound input, and carries SDK-internal preparation metadata to prevent a second cleanup pass. A capable provider receives complete segments immediately and owns bounded FIFO admission; URLs and playback stay in exact input order. Native/custom clients remain serialized. Canonical state dispatch precedes the optional synchronous onState callback. Cancellation, Replay recovery, Blob results, and lifecycle state are normalized; provider failures remain external.",
      "surface": "SpeechPlayback class/default, mutable `SPEECH_VOICE_OPTIONS` records, mutable `SPEECH_VOICE_ALIASES` membership, `SPEECH_PLAYBACK_STATE_EVENT`, optional constructor `onState(detail)`, `splitSpeechText()`, canonical playback lifecycle events, cancellation, and destroy APIs."
    },
    {
      "file": "runtime/arcane/modules/StaticDocumentCatalog.js",
      "name": "StaticDocumentCatalog.js",
      "kind": "esm",
      "exports": [
        "CATALOG_SCHEMA_VERSION",
        "default",
        "normalizeStaticDocumentCatalog",
        "staticDocumentCacheKey"
      ],
      "summary": "Loads a positive static document inventory with complete cache, search, hydration, and context content.",
      "availability": "Browser / native WebView / server with fetch",
      "protocol": "HTTP(S), optional cache",
      "normalization": "Complete mutable catalog, hydration, search, and context content; malformed catalog/cache data and transport failures remain visible.",
      "surface": "default catalog, schema constant, catalog normalizer/cache-key; list/get/search/hydrate/context APIs."
    },
    {
      "file": "runtime/arcane/modules/SystemAppearance.js",
      "name": "SystemAppearance.js",
      "kind": "esm",
      "exports": [
        "default"
      ],
      "summary": "Reads or applies native appearance, returning an explicit unsupported browser state when no bridge exists.",
      "availability": "Browser/native hybrid",
      "protocol": "Arcane.appearance",
      "normalization": "Absent bridge normalized; native result/error preserved.",
      "surface": "default `SystemAppearance`; `available()`, `current()`, `apply()`."
    },
    {
      "file": "runtime/arcane/modules/SystemPlatformPresentation.js",
      "name": "SystemPlatformPresentation.js",
      "kind": "classic-script",
      "exports": [],
      "summary": "Maps kernel names to presentation labels/classes without granting platform authority.",
      "availability": "Browser / native WebView classic script",
      "protocol": "DOM",
      "normalization": "Fully normalized presentation only.",
      "surface": "No ESM exports; global `ArcaneSystemPlatformPresentation` with `kernelType()`, `displayName()`, `apply()`."
    },
    {
      "file": "runtime/arcane/modules/SystemToolRegistry.js",
      "name": "SystemToolRegistry.js",
      "kind": "esm",
      "exports": [
        "default",
        "quoteArgument"
      ],
      "summary": "Registers validated command builders and constructs command strings without executing them.",
      "availability": "Cross-host",
      "protocol": "In-process only",
      "normalization": "Fully normalized definitions/quoting.",
      "surface": "default registry, `quoteArgument()`, register/list/get/build APIs."
    },
    {
      "file": "runtime/arcane/modules/TerminalClient.js",
      "name": "TerminalClient.js",
      "kind": "esm",
      "exports": [
        "TERMINAL_CLIENT_ERROR_CODES",
        "TERMINAL_CLIENT_EVENT_TYPES",
        "TERMINAL_CLIENT_REASONS",
        "default"
      ],
      "summary": "Maps native terminal sessions and Arcane events into an EventTarget client.",
      "availability": "Native bridge",
      "protocol": "Arcane.terminal host transport projected once through the per-realm globalThis.arcaneEvents authority",
      "normalization": "Client events/state normalized; native result/error mixed.",
      "surface": "Event/error/reason constants; default `TerminalClient`; start/write/resize/signal/close/receive/destroy APIs and state-free EventTarget/on terminal compatibility."
    },
    {
      "file": "runtime/arcane/modules/TerminalCommandRegistry.js",
      "name": "TerminalCommandRegistry.js",
      "kind": "esm",
      "exports": [
        "default",
        "splitCommandLine"
      ],
      "summary": "Routes parsed command lines to injected handlers and provides definitions/completions.",
      "availability": "Cross-host",
      "protocol": "Injected handlers",
      "normalization": "Parsing/routing normalized; handler result/error preserved.",
      "surface": "default registry, `splitCommandLine()`, register/resolve/definitions/completions/execute APIs."
    },
    {
      "file": "runtime/arcane/modules/ThemeBootstrap.js",
      "name": "ThemeBootstrap.js",
      "kind": "esm",
      "exports": [
        "arcaneThemeReady",
        "bootstrapArcaneTheme",
        "default",
        "disposeArcaneThemeBootstrap"
      ],
      "summary": "Performs import-time Arcane theme loading and subscribes to native appearance changes.",
      "availability": "Browser/native hybrid",
      "protocol": "ThemeManager + host Arcane.events projected once through the per-realm globalThis.arcaneEvents authority",
      "normalization": "Theme state normalized; storage/native errors mixed.",
      "surface": "`bootstrapArcaneTheme()`, `disposeArcaneThemeBootstrap()`, `arcaneThemeReady`, and default ready promise."
    },
    {
      "file": "runtime/arcane/modules/ThemeManager.js",
      "name": "ThemeManager.js",
      "kind": "esm",
      "exports": [
        "default",
        "loadAndApplyTheme"
      ],
      "summary": "Loads, applies, previews, saves, resets, and synchronizes semantic Arcane themes.",
      "availability": "Browser/native hybrid",
      "protocol": "PreferenceStore, DOM, Arcane.appearance",
      "normalization": "Theme values/events normalized; storage/native failures mixed.",
      "surface": "default `ThemeManager`, `loadAndApplyTheme()`; scheme/custom/system APIs and `arcane-theme-change`."
    },
    {
      "file": "runtime/arcane/modules/TimeGuard.js",
      "name": "TimeGuard.js",
      "kind": "esm",
      "exports": [
        "default"
      ],
      "summary": "Persists and evaluates clock rollback and grace-period state.",
      "availability": "Browser / native WebView",
      "protocol": "User + DBOPFS",
      "normalization": "Time decisions normalized; storage lifecycle mixed.",
      "surface": "default `TimeGuard`; installs `window.timeguard`, emits `time-guard-ready`; clock methods."
    },
    {
      "file": "runtime/arcane/modules/ToolCallRouter.js",
      "name": "ToolCallRouter.js",
      "kind": "esm",
      "exports": [
        "handleResponse",
        "handleStreamedCalls",
        "parseArguments"
      ],
      "summary": "Parses OpenAI-style tool calls and dispatches complete or streamed calls to injected handlers.",
      "availability": "Cross-host",
      "protocol": "Injected handlers",
      "normalization": "Object.prototype or null-prototype argument records require a nonempty user-facing message and retain every field unchanged; handler results are returned or all-settled.",
      "surface": "`parseArguments()`, `handleResponse()`, `handleStreamedCalls()`; invalid or missing message fails `AI_TOOL_MESSAGE_REQUIRED`."
    },
    {
      "file": "runtime/arcane/modules/uPlot.iife.min.js",
      "name": "uPlot.iife.min.js",
      "kind": "classic-script",
      "exports": [],
      "summary": "Vendored uPlot chart constructor and rendering runtime.",
      "availability": "Browser vendor script",
      "protocol": "Classic script + canvas/DOM",
      "normalization": "Vendor-native.",
      "surface": "No ESM exports; global `uPlot` with data/series/scale/cursor/hook/selection/destroy APIs."
    },
    {
      "file": "runtime/arcane/modules/uPlot.LICENSE.txt",
      "name": "uPlot.LICENSE.txt",
      "kind": "license",
      "exports": [],
      "summary": "License companion for the bundled uPlot vendor runtime.",
      "availability": "Documentation asset",
      "protocol": "None",
      "normalization": "Not executable.",
      "surface": "MIT license text."
    },
    {
      "file": "runtime/arcane/modules/uPlot.min.css",
      "name": "uPlot.min.css",
      "kind": "stylesheet",
      "exports": [],
      "summary": "Bundled uPlot presentation stylesheet.",
      "availability": "Browser stylesheet",
      "protocol": "CSS",
      "normalization": "Presentation only.",
      "surface": "Load with a stylesheet link before rendering uPlot charts."
    },
    {
      "file": "runtime/arcane/modules/WaitForComponent.js",
      "name": "WaitForComponent.js",
      "kind": "esm",
      "exports": [
        "COMPONENT_WAIT_ERROR_CODES",
        "COMPONENT_WAIT_REASONS",
        "default"
      ],
      "summary": "Waits for a component property, method, or readiness event with optional error event and bounded timeout.",
      "availability": "Cross-host EventTarget / browser component",
      "protocol": "EventTarget + timers",
      "normalization": "Normalized coded readiness, error, and timeout results.",
      "surface": "default `waitForComponent()`."
    },
    {
      "file": "runtime/arcane/modules/YouTubeMedia.js",
      "name": "YouTubeMedia.js",
      "kind": "esm",
      "exports": [
        "parseYouTubeMedia",
        "youtubeEmbedUrl"
      ],
      "summary": "Parses YouTube video/playlist locators and constructs ordinary embed URLs with opt-in privacy enhancement.",
      "availability": "Cross-host",
      "protocol": "URL construction only",
      "normalization": "Fully normalized.",
      "surface": "`parseYouTubeMedia()`, `youtubeEmbedUrl()`."
    }
  ]
}
