arcane-os 0.3.0 → 0.3.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (153) hide show
  1. package/CHANGELOG.md +27 -0
  2. package/README.md +86 -117
  3. package/bin/arcane-test.mjs +170 -46
  4. package/browser-runtime/ai/browser-speech-artifacts.mjs +887 -909
  5. package/browser-runtime/ai/browser-speech-providers.mjs +96 -152
  6. package/browser-runtime/ai/browser-wasm-llm-provider.mjs +627 -819
  7. package/browser-runtime/ai/browser-wasm.mjs +24 -35
  8. package/browser-runtime/ai/browser-wllama-runtime.mjs +64 -316
  9. package/browser-runtime/ai/model-controller.mjs +584 -181
  10. package/browser-runtime/ai/speech-worker-client.mjs +8 -146
  11. package/browser-runtime/ai/speech-worker-runtime.mjs +643 -363
  12. package/browser-runtime/dom-event-instrumentation.mjs +55 -147
  13. package/browser-runtime/event-manager.mjs +239 -624
  14. package/package.json +5 -6
  15. package/runtime/arcane/components/app-bar.html +3 -15
  16. package/runtime/arcane/components/assistant-panel.html +10 -10
  17. package/runtime/arcane/components/calculator.html +1 -1
  18. package/runtime/arcane/components/chat.html +1359 -135
  19. package/runtime/arcane/components/conversation-view.html +2 -2
  20. package/runtime/arcane/components/document-inspector.html +11 -17
  21. package/runtime/arcane/components/file-manager.html +13 -56
  22. package/runtime/arcane/components/markdown-document.html +82 -281
  23. package/runtime/arcane/components/markdown-editor.html +7 -10
  24. package/runtime/arcane/components/media-embed.html +6 -6
  25. package/runtime/arcane/components/screen-capture.html +4 -4
  26. package/runtime/arcane/components/source-explanation.html +2 -2
  27. package/runtime/arcane/components/speech.html +112 -68
  28. package/runtime/arcane/components/terminal-workspace.html +4 -4
  29. package/runtime/arcane/components/theme-editor.html +1 -1
  30. package/runtime/arcane/components/unified-inbox.html +2 -2
  31. package/runtime/arcane/components/voice-transcription.html +31 -21
  32. package/runtime/arcane/entities/Calculation.js +2 -3
  33. package/runtime/arcane/entities/Chat.js +228 -43
  34. package/runtime/arcane/entities/Preference.js +3 -5
  35. package/runtime/arcane/entities/Weather.js +5 -5
  36. package/runtime/arcane/modules/AI.js +1050 -427
  37. package/runtime/arcane/modules/AIProviderRuntime.js +658 -363
  38. package/runtime/arcane/modules/AIResponseLength.js +9 -19
  39. package/runtime/arcane/modules/AIRuntimeState.js +109 -72
  40. package/runtime/arcane/modules/ArcaneNavigationPolicy.js +45 -32
  41. package/runtime/arcane/modules/BrowserTestSuite.js +78 -122
  42. package/runtime/arcane/modules/CalculatorEngine.js +9 -9
  43. package/runtime/arcane/modules/CommunicationAppController.js +3 -7
  44. package/runtime/arcane/modules/ComponentContracts.js +30 -32
  45. package/runtime/arcane/modules/ConfiguredAIChatSession.js +281 -230
  46. package/runtime/arcane/modules/ConversationActionItems.js +26 -59
  47. package/runtime/arcane/modules/ConversationClosingReport.js +34 -61
  48. package/runtime/arcane/modules/ConversationTimebox.js +27 -15
  49. package/runtime/arcane/modules/DBOPFSDocumentLibrary.js +152 -344
  50. package/runtime/arcane/modules/DocumentLexicalSearch.js +25 -91
  51. package/runtime/arcane/modules/HTMLImport.js +54 -1
  52. package/runtime/arcane/modules/IsolatedModelQuestionRunner.js +40 -203
  53. package/runtime/arcane/modules/LocalAIReadiness.js +40 -60
  54. package/runtime/arcane/modules/LocalAIReadinessController.js +15 -13
  55. package/runtime/arcane/modules/MD.js +1 -45
  56. package/runtime/arcane/modules/Mail.js +51 -103
  57. package/runtime/arcane/modules/MailOutbox.mjs +95 -193
  58. package/runtime/arcane/modules/MailTransport.mjs +36 -57
  59. package/runtime/arcane/modules/ModelDefinition.js +22 -106
  60. package/runtime/arcane/modules/OpenMeteoWeatherProvider.js +39 -101
  61. package/runtime/arcane/modules/PersistentAIChatSession.js +281 -18
  62. package/runtime/arcane/modules/PreferenceStore.js +102 -30
  63. package/runtime/arcane/modules/RiskSignalAnalyzer.js +8 -9
  64. package/runtime/arcane/modules/ScopedOPFSCache.js +7 -42
  65. package/runtime/arcane/modules/ScreenCapture.js +175 -128
  66. package/runtime/arcane/modules/SpeechPlayback.js +46 -149
  67. package/runtime/arcane/modules/StaticDocumentCatalog.js +173 -407
  68. package/runtime/arcane/modules/ToolCallRouter.js +25 -12
  69. package/runtime/arcane/modules/YouTubeMedia.js +6 -5
  70. package/schemas/arcane-app-bundle.schema.json +13 -78
  71. package/schemas/arcane-app.schema.json +9 -25
  72. package/schemas/arcane-lock.schema.json +18 -151
  73. package/schemas/arcane-package.schema.json +2 -16
  74. package/schemas/native-build-plan.schema.json +119 -122
  75. package/src/app-descriptor.mjs +75 -132
  76. package/src/application-tests.mjs +200 -0
  77. package/src/cli/main.mjs +27 -46
  78. package/src/constants.mjs +3 -4
  79. package/src/dev-server.mjs +30 -324
  80. package/src/doctor.mjs +92 -154
  81. package/src/dom-event-instrumentation.mjs +55 -147
  82. package/src/errors.mjs +2 -3
  83. package/src/event-manager.mjs +239 -624
  84. package/src/event-queue.mjs +3 -3
  85. package/src/import-map.mjs +273 -1028
  86. package/src/index.mjs +14 -16
  87. package/src/installed-sdk-runtime.mjs +40 -62
  88. package/src/integrated-provider-loader.mjs +53 -382
  89. package/src/mail-api.mjs +0 -2
  90. package/src/mail-server.mjs +224 -580
  91. package/src/mail.mjs +4 -10
  92. package/src/native-plan.mjs +163 -598
  93. package/src/native-provider-loader.mjs +104 -1063
  94. package/src/packager/core.mjs +485 -3229
  95. package/src/process.mjs +5 -10
  96. package/src/release-bundle.mjs +292 -2405
  97. package/src/runtime.mjs +76 -396
  98. package/src/scaffold.mjs +30 -80
  99. package/src/sdk-browser-runtime.mjs +70 -626
  100. package/src/source-server.mjs +588 -0
  101. package/src/targets/index.mjs +78 -188
  102. package/src/templates/workspace-template.mjs +19 -135
  103. package/src/testing-loader.mjs +164 -0
  104. package/src/testing.mjs +1 -1
  105. package/src/toolchain.mjs +131 -544
  106. package/src/update-check.mjs +26 -64
  107. package/src/workspace-operation-lock.mjs +139 -430
  108. package/src/workspace-runtime.mjs +112 -779
  109. package/src/workspace.mjs +40 -302
  110. package/browser-runtime/ARCANE_SDK_BROWSER_RELEASE.json +0 -218
  111. package/browser-runtime/ai/ARCANE_AI_BROWSER_SPEECH_COMPONENTS.json +0 -203
  112. package/browser-runtime/ai/ARCANE_AI_BROWSER_WASM_COMPONENTS.json +0 -80
  113. package/browser-runtime/ai/internal/sha256.mjs +0 -166
  114. package/docs/architecture.md +0 -344
  115. package/docs/compatibility.md +0 -36
  116. package/docs/event-manager.md +0 -294
  117. package/docs/platform-targets.md +0 -108
  118. package/docs/publishing.md +0 -201
  119. package/docs/reference/README.md +0 -187
  120. package/docs/reference/ai/browser-speech-package-authority.json +0 -835
  121. package/docs/reference/ai/browser-speech.md +0 -1252
  122. package/docs/reference/ai/browser-wasm.md +0 -530
  123. package/docs/reference/arcane-ollama.md +0 -288
  124. package/docs/reference/availability-and-normalization.md +0 -183
  125. package/docs/reference/behavioral-testing.md +0 -133
  126. package/docs/reference/cli.md +0 -779
  127. package/docs/reference/core/README.md +0 -62
  128. package/docs/reference/core/arcane-ai-contracts.md +0 -907
  129. package/docs/reference/core/arcane-api.md +0 -601
  130. package/docs/reference/core/arcane-entities.md +0 -65
  131. package/docs/reference/core/arcane-events.md +0 -134
  132. package/docs/reference/core/ollama-module.md +0 -181
  133. package/docs/reference/core/reference/arcane-api/ai-and-ollama.md +0 -1909
  134. package/docs/reference/core/reference/arcane-api/applications-terminal-capabilities.md +0 -1057
  135. package/docs/reference/core/reference/arcane-api/core-and-events.md +0 -320
  136. package/docs/reference/core/reference/arcane-api/filesystem-storage-preferences-appearance.md +0 -610
  137. package/docs/reference/core/reference/arcane-api/namespaces.md +0 -1157
  138. package/docs/reference/core/reference/arcane-api/platform-installation-users-system.md +0 -1423
  139. package/docs/reference/core/reference/arcane-api/session-provisioning-diagnostics-development.md +0 -315
  140. package/docs/reference/event-manager.md +0 -1511
  141. package/docs/reference/inventory/package-api.json +0 -3284
  142. package/docs/reference/inventory/runtime-components.json +0 -1011
  143. package/docs/reference/inventory/runtime-entities.json +0 -26
  144. package/docs/reference/inventory/runtime-modules.json +0 -1431
  145. package/docs/reference/mail.md +0 -316
  146. package/docs/reference/protocols.md +0 -677
  147. package/docs/reference/runtime-components.md +0 -1366
  148. package/docs/reference/runtime-entities.md +0 -303
  149. package/docs/reference/runtime-modules.md +0 -2960
  150. package/docs/reference/sdk-api.md +0 -6694
  151. package/docs/roadmap.md +0 -79
  152. package/docs/work-amplification.md +0 -129
  153. package/runtime/ARCANE_RUNTIME_RELEASE.json +0 -826
@@ -1,1366 +0,0 @@
1
- # Arcane runtime component catalog
2
-
3
- Arcane components are reusable HTML fragments loaded through the shared `<html-import>` element. They are browser UI, so they run in an ordinary supported browser renderer and in native Arcane WebViews. They do not run in Node or as cloud services.
4
-
5
- A component file does not register its own custom element. The `<html-import>` host fetches the fragment from the same origin, attaches an open shadow root, runs its inline scripts with `this` bound to the host, and publishes `html-import-ready` or `html-import-error`. Component methods and properties are attached to that host.
6
-
7
- ## Basic loading pattern
8
-
9
- ```html
10
- <script type="module">
11
- import '/arcane/modules/HTMLImport.js';
12
- </script>
13
-
14
- <html-import id="widget" href="/arcane/components/weather-widget.html"></html-import>
15
-
16
- <script type="module">
17
- const widget = document.querySelector('#widget');
18
- widget.addEventListener('html-import-ready', () => {
19
- console.log('Component methods are attached.', typeof widget.setWeather);
20
- }, {once: true});
21
- </script>
22
- ```
23
-
24
- ## Shared semantic-event and lifecycle contract
25
-
26
- Except for the legacy `header.html` and platform-owned `theme-switcher.html`,
27
- each component owns exactly one source created through
28
- `createArcaneEventSource(host,{source:'arcane.component.<name>',eventTypes})`.
29
- That source publishes synchronously to the realm's branded
30
- `globalThis.arcaneEvents` authority. Component DOM events are one-way
31
- compatibility projections of the same canonical occurrence; they are never
32
- republished into the authority. Every projected detail has the canonical
33
- `occurrenceId`, `arcaneSource`, `instanceId`, and `operationId` fields and a
34
- frozen outer record. A compatibility payload's existing `source` field remains
35
- source-local and may differ from `arcaneSource`; the payload may additionally
36
- retain source-local browser or provider objects.
37
-
38
- When a component uses a cancelable event as an admission gate, cancellation on
39
- either the canonical occurrence or its DOM projection makes the publication
40
- unaccepted, and the component does not continue the guarded operation. A
41
- cancelable compatibility notification emitted after committed work does not
42
- roll that work back unless its component section explicitly says otherwise.
43
- Asynchronous work keeps its own `AbortSignal`, operation generation, and
44
- promise ownership; canonical publication is synchronous and does not become an
45
- async queue.
46
-
47
- Every singleton-backed component publishes its ready event only after its host
48
- members are installed. Its idempotent `destroy()` (unless a more specific
49
- return is documented) disposes the canonical source and marks the host
50
- unready. Cleanup of owned listeners, pending work, nested subscriptions, and
51
- controllers is component-specific and is stated below where it forms part of
52
- that component's public contract. Removing an `<html-import>` host calls an
53
- imported component's `destroy()` through `HTMLImport`; callers that invoke
54
- `destroy()` directly retain responsibility for removing the element when
55
- appropriate.
56
-
57
- ## Canonical inventory
58
-
59
- | Component | Capability | Principal methods | Events | Normalization |
60
- | --- | --- | --- | --- | --- |
61
- | [`app-bar.html`](#app-barhtml) | Responsive application navigation, route state, status, and trailing actions. | `setNavigation()`<br>`setActiveRoute()`<br>`setStatus()`<br>`refresh()`<br>`destroy()` | `app-bar-ready` | DOM-normalized |
62
- | [`assistant-panel.html`](#assistant-panelhtml) | Reusable assistant drawer, message area, composer, pending/streaming/empty/error state, and actions. | `open()`<br>`close()`<br>`toggle()`<br>`send()`<br>`clear()`<br>`setState()`<br>`focusComposer()`<br>`scrollToEnd()`<br>`destroy()` | `assistant-ready`<br>`assistant-opened`<br>`assistant-closed`<br>`assistant-send`<br>`assistant-clear` | DOM-normalized; caller/provider results remain external |
63
- | [`calculator.html`](#calculatorhtml) | Calculator keypad and result/error event surface backed by CalculatorEngine. | `calculate()`<br>`destroy()` | `calculator-ready`<br>`calculation-complete`<br>`calculation-error` | Normalized Calculation/error events |
64
- | [`chart.html`](#charthtml) | Accessible uPlot line, area, or point chart with normalized options and rows. | `configure()`<br>`populate()`<br>`setData()`<br>`addData()`<br>`update()`<br>`destroy()` | `chart-ready`<br>`chart-remove` | Options/rows normalized; uPlot rendering is vendor-native |
65
- | [`chat.html`](#chathtml) | Shared chat, visible selected-model activation request, file upload, streaming, speech, language, availability, and conversation-timebox surface. | `streamMessage()`<br>`setMessageProgress()`<br>`setAIAvailability()`<br>`setInitialSpeechMuted()`<br>`setConversationComplete()`<br>`bindConversationTimebox()`<br>`submitMessage()`<br>`sendMessage()`<br>`languageChanged()`<br>`requestAIActivation()`<br>`destroy()` | `chat-ready`<br>`chat-send-message`<br>`chat-send-error`<br>`chat-file-uploaded`<br>`chat-file-upload-error`<br>`chat-language-changed`<br>`chat-language-change-error`<br>`chat-ai-activation-request`<br>`chat-ai-activation-error`<br>`chat-speech-synthesis-error`<br>`conversation-timebox-error` | UI/runtime state and explicit user activation intent normalized; AI/storage/media behavior mixed |
66
- | [`conversation-view.html`](#conversation-viewhtml) | Provider-neutral conversation display, advisory actions, composer, busy state, and status. | `setConversation()`<br>`setBusy()`<br>`setStatus()`<br>`clearComposer()`<br>`destroy()` | `conversation-view-ready`<br>`communication-send`<br>`communication-advisory-action` | DOM-normalized |
67
- | [`dashboard-config.html`](#dashboard-confightml) | Selects which normalized chart definitions are visible on a dashboard. | `configure()`<br>`setDefinitions()`<br>`setVisibility()`<br>`getChartOptions()`<br>`getEffectiveVisibility()`<br>`open()`<br>`close()`<br>`destroy()` | `dashboard-config-ready`<br>`dashboard-config-opened`<br>`dashboard-config-closed`<br>`dashboard-config-change` | Fully normalized definitions and visibility |
68
- | [`data-maintenance.html`](#data-maintenancehtml) | Runs destructive cleanup of empty chats and memories inside the current app data scope. | `open()`<br>`destroy()` | `data-maintenance-ready`<br>`data-maintenance-complete` | Normalized counts; DBOPFS failures mixed |
69
- | [`data-view.html`](#data-viewhtml) | Opens a generic modal-style data view around an injected provider. | `beforeOpen()`<br>`open()`<br>`destroy()` | `data-view-ready` | DOM-native result |
70
- | [`directory-picker.html`](#directory-pickerhtml) | Presents the provider-owned OS directory chooser with change/cancel/error states. | `configure()`<br>`focus()`<br>`select()`<br>`destroy()` | `directory-picker-ready`<br>`directory-picker-change`<br>`directory-picker-cancel`<br>`directory-picker-error` | Strict normalized native selection/error |
71
- | [`document-inspector.html`](#document-inspectorhtml) | Inspects PDF, text, or source documents and records review state. | `loadDocument()`<br>`selectView()`<br>`markSaved()`<br>`destroy()` | `document-inspector-ready`<br>`document-review-change` | Document state normalized; browser document APIs mixed |
72
- | [`file-drop.html`](#file-drophtml) | Acquires files by drag/drop or picker and presents busy, progress, error, and cleared state. | `configure()`<br>`openPicker()`<br>`clear()`<br>`setBusy()`<br>`setError()`<br>`setProgress()`<br>`destroy()` | `file-drop-ready`<br>`file-drop-selected`<br>`file-drop-progress`<br>`file-drop-state`<br>`file-drop-error` | State normalized; browser File/drop errors mixed |
73
- | [`file-inspector.html`](#file-inspectorhtml) | Displays file metadata, preview, busy/error state, and caller-defined actions. | `configure()`<br>`show()`<br>`clear()`<br>`setActions()`<br>`setBusy()`<br>`setError()`<br>`setPreview()`<br>`destroy()` | `file-inspector-ready`<br>`file-inspector-action`<br>`file-inspector-change`<br>`file-inspector-cleared`<br>`file-inspector-error` | State normalized; preview/provider behavior mixed |
74
- | [`file-manager.html`](#file-managerhtml) | Browses, filters, selects, opens, and acts on app-scoped files. | `setProvider()`<br>`loadAll()`<br>`setFilter()`<br>`select()`<br>`clearSelection()`<br>`destroy()` | `file-manager-ready`<br>`file-manager-select`<br>`file-manager-open`<br>`file-manager-action` | Selection/filter state normalized; storage/provider behavior mixed |
75
- | [`header.html`](#headerhtml) | Legacy title bar with history, reload, online marker, presentation labels, and 988 link. | None | No component-specific event | Browser/platform-native behavior; no component-ready contract |
76
- | [`integration-settings.html`](#integration-settingshtml) | Edits non-secret communication service configuration and service actions. | `configure()`<br>`getValues()`<br>`setStatus()`<br>`destroy()` | `integration-settings-ready`<br>`integration-settings-save`<br>`integration-settings-close`<br>`integration-action` | Normalized non-secret values |
77
- | [`local-ai-status.html`](#local-ai-statushtml) | Presents local-AI standby, failure, recovery, guidance, retry, and dismissal states. | `configure()`<br>`begin()`<br>`present()`<br>`destroy()`<br>`hidden` | `local-ai-status-ready`<br>`local-ai-status-dismissed`<br>`local-ai-retry` | Fully normalized LocalAIReadiness report |
78
- | [`markdown-document.html`](#markdown-documenthtml) | Safely renders and navigates a Markdown document with focusable fragments. | `configure()`<br>`load()`<br>`render()`<br>`clear()`<br>`fail()`<br>`focus()`<br>`focusFragment()`<br>`destroy()` | `markdown-document-ready`<br>`markdown-document-state`<br>`markdown-document-loading`<br>`markdown-document-rendered`<br>`markdown-document-empty`<br>`markdown-document-error`<br>`markdown-document-navigate` | State/sanitized output normalized; Marked/DOM failures mixed |
79
- | [`markdown-editor.html`](#markdown-editorhtml) | Configurable Markdown authoring, toolbar, preview, title, and save surface. | `configure()`<br>`focus()`<br>`clear()`<br>`saveEntry()`<br>`destroy()` | `markdown-editor-ready`<br>`markdown-editor-change`<br>`markdown-editor-saved` | Editor values normalized; injected save result mixed |
80
- | [`media-embed.html`](#media-embedhtml) | Loads a validated YouTube video or playlist embed and exposes external-platform action. | `configure()`<br>`load()`<br>`destroy()` | `media-embed-ready`<br>`media-load`<br>`media-error`<br>`media-open-platform` | URL/error normalized; iframe/platform behavior native |
81
- | [`modal.html`](#modalhtml) | Generic modal with population, open/close, actions, and sequential task execution. | `populate()`<br>`open()`<br>`close()`<br>`runTasks()`<br>`destroy()` | `modal-ready`<br>`modal-opened`<br>`modal-closed`<br>`modal-action` | Modal state normalized; injected task results mixed |
82
- | [`output-panel.html`](#output-panelhtml) | Presents status, output, body, coverage, actions, pending, error, and cleared states. | `configure()`<br>`setOutput()`<br>`setBody()`<br>`setCoverage()`<br>`setActions()`<br>`setPending()`<br>`setStatus()`<br>`setError()`<br>`clear()`<br>`destroy()` | `output-panel-ready`<br>`output-panel-state`<br>`output-panel-change`<br>`output-panel-action`<br>`output-panel-error`<br>`output-panel-cleared` | DOM-normalized |
83
- | [`preferences-form.html`](#preferences-formhtml) | Builds a schema-driven preferences form with submit, reset, busy, and status behavior. | `configure()`<br>`getValues()`<br>`setValues()`<br>`setBusy()`<br>`setStatus()`<br>`destroy()` | `preferences-form-ready`<br>`preferences-change`<br>`preferences-submit`<br>`preferences-reset` | Normalized form values |
84
- | [`record-timeline.html`](#record-timelinehtml) | Displays chronological records/evidence and emits open actions. | `setItems()`<br>`populate()`<br>`destroy()` | `record-timeline-ready`<br>`record-timeline-open` | DOM-normalized |
85
- | [`relationship-board.html`](#relationship-boardhtml) | Displays normalized relationship nodes/edges in graph and list forms. | `setGraph()`<br>`populate()`<br>`destroy()` | `relationship-board-ready`<br>`relationship-node-open`<br>`relationship-edge-open` | DOM-normalized |
86
- | [`screen-capture.html`](#screen-capturehtml) | Presents image, video, or GIF display-capture workflow. | `capture` (`ScreenCapture` instance)<br>`destroy()` | `screen-capture-ready`<br>`screen-capture-result` | State/result normalized; media permission/codec failures mixed |
87
- | [`source-code-viewer.html`](#source-code-viewerhtml) | Renders line-addressable source code with load, error, focus, and state behavior. | `configure()`<br>`load()`<br>`render()`<br>`clear()`<br>`fail()`<br>`focus()`<br>`focusLine()`<br>`destroy()` | `source-code-viewer-ready`<br>`source-code-viewer-state`<br>`source-code-viewer-state-loading`<br>`source-code-viewer-state-ready`<br>`source-code-viewer-state-empty`<br>`source-code-viewer-state-error` | Normalized source/state |
88
- | [`source-explanation.html`](#source-explanationhtml) | Presents an evidence finding, source selection, explanation, and save state. | `showFinding()`<br>`populate()`<br>`selectSource()`<br>`markSaved()`<br>`destroy()` | `source-explanation-ready`<br>`source-explanation-save`<br>`source-explanation-source-selected` | DOM-normalized |
89
- | [`speech.html`](#speechhtml) | Coordinates explicit STT activation, speech controls, transcription completion, mute state, and microphone availability. | `configure()`<br>`setAvailability()`<br>`setMuted()`<br>`reportTTSError()`<br>`requestSTTActivation()`<br>`destroy()`<br>`availability`<br>`muted`<br>`initialMuted`<br>`componentReady` | `speech-ready`<br>`speech-transcription-complete`<br>`speech-transcription-error`<br>`speech-transcription-cancelled`<br>`speech-microphone-unavailable`<br>`speech-stt-activation-request`<br>`speech-stt-activation-error`<br>`speech-tts-lifecycle-error`<br>`speech-synthesis-error` | Sticky runtime speech readiness, explicit STT activation, request cancellation, and TTS mute lifecycle intent normalized; provider/model authority and media behavior remain external |
90
- | [`summary-strip.html`](#summary-striphtml) | Displays compact selectable KPI or summary items. | `configure()`<br>`setItems()`<br>`updateItem()`<br>`clear()`<br>`destroy()` | `summary-strip-ready`<br>`summary-strip-change`<br>`summary-strip-select` | DOM-normalized |
91
- | [`table.html`](#tablehtml) | Builds and updates a simple header/body table. | `buildHeader()`<br>`buildTable()`<br>`destroy()` | `table-ready`<br>`header-update`<br>`body-update` | DOM-normalized |
92
- | [`task-progress.html`](#task-progresshtml) | Runs and displays a task list with started/change/complete/error state. | `configure()`<br>`setTasks()`<br>`updateTask()`<br>`runTasks()`<br>`clear()`<br>`destroy()` | `task-progress-ready`<br>`task-progress-started`<br>`task-progress-change`<br>`task-progress-complete`<br>`task-progress-error` | Task state normalized; injected task results mixed |
93
- | [`terminal-workspace.html`](#terminal-workspacehtml) | Presents multiple terminal sessions, output, active selection, theme, and terminal actions. | `configure()`<br>`addSession()`<br>`removeSession()`<br>`activateSession()`<br>`append()`<br>`clear()`<br>`setState()`<br>`setTheme()`<br>`focus()`<br>`destroy()` | `terminal-workspace-ready`<br>`terminal-submit`<br>`terminal-interrupt`<br>`terminal-clear`<br>`terminal-session-new`<br>`terminal-session-close`<br>`terminal-session-select`<br>`terminal-settings` | UI/session state normalized; native command results supplied externally |
94
- | [`theme-editor.html`](#theme-editorhtml) | Edits, previews, saves, and resets semantic custom theme tokens. | `configure()`<br>`getTheme()`<br>`setTheme()`<br>`setBusy()`<br>`setStatus()`<br>`destroy()` | `theme-editor-ready`<br>`theme-preview`<br>`theme-save`<br>`theme-reset` | Fully normalized Theme values |
95
- | [`theme-switcher.html`](#theme-switcherhtml) | Selects and refreshes system, light, dark, or custom theme mode. | `setMode()`<br>`refresh()` | No component-specific event | Preference/native appearance behavior mixed; no component-ready contract |
96
- | [`unified-inbox.html`](#unified-inboxhtml) | Displays provider-neutral communication threads with active/loading state. | `configure()`<br>`setThreads()`<br>`setActive()`<br>`setLoading()`<br>`destroy()` | `unified-inbox-ready`<br>`inbox-refresh`<br>`thread-select` | DOM-normalized |
97
- | [`voice-transcription.html`](#voice-transcriptionhtml) | Records segmented microphone audio only after authoritative STT admission, exposes explicit selected-STT activation, transcribes with cancellation, persists, and completes a combined transcript. | `configure()`<br>`requestSTTActivation()`<br>`startRecording()`<br>`stopRecording()`<br>`save()`<br>`completeTranscription()/complete()`<br>`clear()`<br>`reset()`<br>`destroy()` | `voice-transcription-ready`<br>`voice-transcription-state`<br>`voice-transcription-segment`<br>`voice-transcription-change`<br>`voice-transcription-complete`<br>`speech-transcription-complete`<br>`speech-transcription-cancelled`<br>`speech-stt-activation-request`<br>`speech-stt-activation-error` | Sticky runtime STT readiness, explicit activation, request cancellation, and state/text are normalized; media/provider behavior remains external |
98
- | [`weather-widget.html`](#weather-widgethtml) | Displays normalized current and daily weather with refresh intent. | `setWeather()`<br>`clear()`<br>`destroy()` | `weather-widget-ready`<br>`weather-refresh` | Display normalized; provider supplied externally |
99
- | [`web-navigator.html`](#web-navigatorhtml) | Guards embedded/external navigation and surfaces allow/block/open intents. | `configure()`<br>`navigate()`<br>`currentUrl()`<br>`destroy()` | `web-navigator-ready`<br>`web-navigate`<br>`web-navigation-blocked`<br>`web-open-external` | Navigation intent/decision normalized; browser navigation result platform-native |
100
-
101
- ## app-bar.html
102
-
103
- ### Overview
104
-
105
- Responsive application navigation, route state, status, and trailing actions.
106
-
107
- ### Public surface
108
-
109
- Methods/properties: `setNavigation()`, `setActiveRoute()`, `setStatus()`, `refresh()`, `destroy()`.
110
-
111
- Events: `app-bar-ready`.
112
-
113
- Slots: `brand-mark`, `product-name`, `navigation`, `status`, `trailing`.
114
-
115
- ### Availability and normalization
116
-
117
- **Browser and supported native WebViews.** DOM-normalized. HTMLImport + DOM; injected Arcane/provider modules where listed. Native methods remain subject to the bound app's capabilities. [Deep protocol details](protocols.md).
118
-
119
- ### Example
120
-
121
- ```html
122
- <html-import
123
- id="app-bar.html"
124
- href="/arcane/components/app-bar.html">
125
- </html-import>
126
- ```
127
-
128
- ## assistant-panel.html
129
-
130
- ### Overview
131
-
132
- Reusable assistant drawer, message area, composer, pending/streaming/empty/error state, and actions.
133
-
134
- ### Public surface
135
-
136
- Methods/properties: `open()`, `close()`, `toggle()`, `send()`, `clear()`, `setState()`, `focusComposer()`, `scrollToEnd()`, `destroy()`.
137
-
138
- Events: `assistant-ready`, `assistant-opened`, `assistant-closed`,
139
- `assistant-send`, `assistant-clear`.
140
-
141
- Slots: `title`, `subtitle`, `identity`, `messages/message`, `composer`, `actions`, `pending`, `streaming`, `empty`, `error`, `footer`.
142
-
143
- ### Availability and normalization
144
-
145
- **Browser and supported native WebViews.** DOM-normalized; caller/provider results remain external. HTMLImport + DOM; injected Arcane/provider modules where listed. Native methods remain subject to the bound app's capabilities. [Deep protocol details](protocols.md).
146
-
147
- ### Example
148
-
149
- ```html
150
- <html-import
151
- id="assistant-panel.html"
152
- href="/arcane/components/assistant-panel.html">
153
- </html-import>
154
- ```
155
-
156
- ## calculator.html
157
-
158
- ### Overview
159
-
160
- Calculator keypad and result/error event surface backed by CalculatorEngine.
161
-
162
- ### Public surface
163
-
164
- Methods/properties: `calculate()`, `destroy()`.
165
-
166
- Events: `calculator-ready`, `calculation-complete`, `calculation-error`.
167
-
168
- Shared dependencies: [`CalculatorEngine.js`](runtime-modules.md#calculatorenginejs).
169
-
170
- ### Availability and normalization
171
-
172
- **Browser and supported native WebViews.** Normalized Calculation/error events. HTMLImport + DOM; injected Arcane/provider modules where listed. Native methods remain subject to the bound app's capabilities. [Deep protocol details](protocols.md).
173
-
174
- ### Example
175
-
176
- ```html
177
- <html-import
178
- id="calculator.html"
179
- href="/arcane/components/calculator.html">
180
- </html-import>
181
- ```
182
-
183
- ## chart.html
184
-
185
- ### Overview
186
-
187
- Accessible uPlot line, area, or point chart with normalized options and rows.
188
-
189
- ### Public surface
190
-
191
- Methods/properties: `configure()`, `populate()`, `setData()`, `addData()`, `update()`, `destroy()`.
192
-
193
- Events: `chart-ready`, `chart-remove`.
194
-
195
- Shared dependencies: [`ChartLibrary.js`](runtime-modules.md#chartlibraryjs), [`ComponentContracts.js`](runtime-modules.md#componentcontractsjs).
196
-
197
- ### Availability and normalization
198
-
199
- **Browser and supported native WebViews.** Options/rows normalized; uPlot rendering is vendor-native. HTMLImport + DOM; injected Arcane/provider modules where listed. Native methods remain subject to the bound app's capabilities. [Deep protocol details](protocols.md).
200
-
201
- ### Example
202
-
203
- ```html
204
- <html-import
205
- id="chart.html"
206
- href="/arcane/components/chart.html">
207
- </html-import>
208
- ```
209
-
210
- ## chat.html
211
-
212
- ### Overview
213
-
214
- Shared chat, visible selected-model activation request, file upload, streaming,
215
- speech, language, availability, and conversation-timebox surface.
216
-
217
- ### Public surface
218
-
219
- Methods/properties: `streamMessage()`, `setMessageProgress()`,
220
- `setAIAvailability()`, `setInitialSpeechMuted()`,
221
- `setConversationComplete()`, `bindConversationTimebox()`, `submitMessage()`,
222
- `sendMessage()`, `languageChanged()`, `requestAIActivation()`, and `destroy()`.
223
-
224
- `sendMessage(text)` and `languageChanged(text)` are host-overridable async
225
- extension callbacks. The component installs warning-only defaults when the host
226
- does not supply them; applications may instead consume the corresponding
227
- `chat-send-message` and `chat-language-changed` events.
228
-
229
- `submitMessage(textOverride='',context={})` returns `Promise<boolean>`.
230
- `context` accepts `source`, `preserveDraft`, `synthetic`, an optional exact
231
- `operationId`, and an optional caller-owned `AbortSignal`. The component owns a
232
- derived signal for each submission, supplies it in the frozen compatibility
233
- `{message,context}` detail, and aborts it on canonical/DOM cancellation,
234
- component destruction, or caller cancellation. `chat-send-message` is
235
- cancelable and is the gate before `sendMessage(text,context)`; a canceled event
236
- never reaches the host callback. Rejected host promises are observed as
237
- `chat-send-error`, and stale settlement after abort or destruction is
238
- suppressed.
239
-
240
- `setAIAvailability()` remains an LLM compatibility input, but selected sticky
241
- `AIRuntimeState` LLM state wins over that boolean. STT and TTS readiness always
242
- comes from sticky runtime role state; the method never forwards compatibility
243
- speech booleans or synthesizes ready speech roles without an admitted, loaded
244
- provider.
245
-
246
- When a selected LLM route is `unloaded` or in `error`, the component exposes a
247
- keyboard-operable Start/Try again control while Send stays disabled. During
248
- `loading`, the control becomes Cancel loading and reflects sticky progress.
249
- The default `requestAIActivation(intent)` forwards frozen
250
- `{role:'llm',action:'load'|'unload',reason:'user'}` to
251
- `requestAIRuntimeIntent()`. A host may replace that callback.
252
-
253
- Before the callback, the component dispatches the bubbles/composed/cancelable
254
- `chat-ai-activation-request` event with frozen `{intent,state}` detail.
255
- `preventDefault()` suppresses the callback. A callback failure dispatches the
256
- bubbles/composed, noncancelable `chat-ai-activation-error` event with frozen
257
- `{request,error,message}`. A recognized canceled load whose current route is
258
- `unloaded` or `unloading` is not reported as an activation error.
259
-
260
- `destroy()` aborts the component's AI-runtime-state subscription, destroys the
261
- activation controller, removes its `pagehide` listener, calls the optional
262
- speech controller's `destroy()`, sets `ready` to `false`, and returns
263
- `undefined`. It does not initiate a provider load or unload.
264
-
265
- Events: `chat-ready`, `chat-send-message`, `chat-send-error`,
266
- `chat-file-uploaded`, `chat-file-upload-error`, `chat-language-changed`,
267
- `chat-language-change-error`, `chat-ai-activation-request`,
268
- `chat-ai-activation-error`, `chat-speech-synthesis-error`, and
269
- `conversation-timebox-error`.
270
-
271
- All chat operation ids have the form
272
- `<component-instance-id>:<kind>:<sequence>`. The stable public reasons are
273
- `chat-ready`, `message-submission-requested`,
274
- `message-submission-cancelled`, `caller-signal-aborted`,
275
- `component-destroyed`, `host-message-submission-rejected`,
276
- `file-storage-completed`, `file-storage-rejected`,
277
- `language-change-requested`, `language-change-callback-rejected`,
278
- `language-model-activation-requested`,
279
- `language-model-activation-rejected`, `speech-synthesis-rejected`, and
280
- `conversation-timebox-delivery-rejected`.
281
-
282
- The stable chat boundary codes are:
283
-
284
- - `ARCANE_CHAT_MESSAGE_SUBMISSION_ABORTED` for the owned submission signal;
285
- - `ARCANE_CHAT_LANGUAGE_MODEL_ACTIVATION_REQUEST_REJECTED`;
286
- - `ARCANE_CHAT_HOST_MESSAGE_SUBMISSION_REJECTED`;
287
- - `ARCANE_CHAT_FILE_STORAGE_REJECTED`;
288
- - `ARCANE_CHAT_LANGUAGE_CHANGE_CALLBACK_REJECTED`;
289
- - `ARCANE_CHAT_SPEECH_SYNTHESIS_REQUEST_REJECTED`;
290
- - `ARCANE_CHAT_CONVERSATION_TIMEBOX_DELIVERY_REJECTED`.
291
-
292
- Error projections expose the boundary `code` and include `causeCode` only when
293
- the rejected dependency supplies a distinct code. File projections expose only
294
- size/type metadata canonically while retaining the live `File` locally.
295
- Language and LLM activation request projections are cancelable gates before
296
- their host callbacks. Every public detail is frozen by the canonical authority.
297
-
298
- Shared dependencies: [`MD.js`](runtime-modules.md#mdjs), [`File.js`](runtime-entities.md#filejs), [`ConversationTimebox.js`](runtime-modules.md#conversationtimeboxjs), [`AIRuntimeState.js`](runtime-modules.md#airuntimestatejs).
299
-
300
- ### Availability and normalization
301
-
302
- **Browser and supported native WebViews.** UI and provider-runtime state are
303
- normalized; AI/storage/media behavior remains mixed. The component emits no
304
- activation request on import or startup. After the user operates the visible
305
- control and the component event is not canceled, it publishes a
306
- capability-neutral user intent; a provider/runtime owner decides whether and
307
- how to execute the requested load or unload. HTMLImport + DOM; injected
308
- Arcane/provider modules where listed. Native methods remain subject to the
309
- bound app's capabilities. [Deep protocol details](protocols.md).
310
-
311
- ### Example
312
-
313
- ```html
314
- <html-import
315
- id="chat.html"
316
- href="/arcane/components/chat.html">
317
- </html-import>
318
- ```
319
-
320
- ## conversation-view.html
321
-
322
- ### Overview
323
-
324
- Provider-neutral conversation display, advisory actions, composer, busy state, and status.
325
-
326
- ### Public surface
327
-
328
- Methods/properties: `setConversation()`, `setBusy()`, `setStatus()`, `clearComposer()`, `destroy()`.
329
-
330
- Events: `conversation-view-ready`, `communication-send`, `communication-advisory-action`.
331
-
332
- ### Availability and normalization
333
-
334
- **Browser and supported native WebViews.** DOM-normalized. HTMLImport + DOM; injected Arcane/provider modules where listed. Native methods remain subject to the bound app's capabilities. [Deep protocol details](protocols.md).
335
-
336
- ### Example
337
-
338
- ```html
339
- <html-import
340
- id="conversation-view.html"
341
- href="/arcane/components/conversation-view.html">
342
- </html-import>
343
- ```
344
-
345
- ## dashboard-config.html
346
-
347
- ### Overview
348
-
349
- Selects which normalized chart definitions are visible on a dashboard.
350
-
351
- ### Public surface
352
-
353
- Methods/properties: `configure()`, `setDefinitions()`, `setVisibility()`, `getChartOptions()`, `getEffectiveVisibility()`, `open()`, `close()`, `destroy()`.
354
-
355
- Events: `dashboard-config-ready`, `dashboard-config-opened`, `dashboard-config-closed`, `dashboard-config-change`.
356
-
357
- Shared dependencies: [`ComponentContracts.js`](runtime-modules.md#componentcontractsjs), [`WaitForComponent.js`](runtime-modules.md#waitforcomponentjs).
358
-
359
- ### Availability and normalization
360
-
361
- **Browser and supported native WebViews.** Fully normalized definitions and visibility. HTMLImport + DOM; injected Arcane/provider modules where listed. Native methods remain subject to the bound app's capabilities. [Deep protocol details](protocols.md).
362
-
363
- ### Example
364
-
365
- ```html
366
- <html-import
367
- id="dashboard-config.html"
368
- href="/arcane/components/dashboard-config.html">
369
- </html-import>
370
- ```
371
-
372
- ## data-maintenance.html
373
-
374
- ### Overview
375
-
376
- Runs destructive cleanup of empty chats and memories inside the current app data scope.
377
-
378
- ### Public surface
379
-
380
- Methods/properties: `open()`, `destroy()`.
381
-
382
- Events: `data-maintenance-ready`, `data-maintenance-complete`.
383
-
384
- Shared dependencies: [`DataMaintenance.js`](runtime-modules.md#datamaintenancejs), [`WaitForComponent.js`](runtime-modules.md#waitforcomponentjs).
385
-
386
- ### Availability and normalization
387
-
388
- **Browser and supported native WebViews.** Normalized counts; DBOPFS failures mixed. HTMLImport + DOM; injected Arcane/provider modules where listed. Native methods remain subject to the bound app's capabilities. [Deep protocol details](protocols.md).
389
-
390
- ### Example
391
-
392
- ```html
393
- <html-import
394
- id="data-maintenance.html"
395
- href="/arcane/components/data-maintenance.html">
396
- </html-import>
397
- ```
398
-
399
- ## data-view.html
400
-
401
- ### Overview
402
-
403
- Opens a generic modal-style data view around an injected provider.
404
-
405
- ### Public surface
406
-
407
- Methods/properties: `beforeOpen()`, `open()`, `destroy()`.
408
-
409
- Events: `data-view-ready`.
410
-
411
- Shared dependencies: [`WaitForComponent.js`](runtime-modules.md#waitforcomponentjs).
412
-
413
- ### Availability and normalization
414
-
415
- **Browser and supported native WebViews.** DOM-native result. HTMLImport + DOM; injected Arcane/provider modules where listed. Native methods remain subject to the bound app's capabilities. [Deep protocol details](protocols.md).
416
-
417
- ### Example
418
-
419
- ```html
420
- <html-import
421
- id="data-view.html"
422
- href="/arcane/components/data-view.html">
423
- </html-import>
424
- ```
425
-
426
- ## directory-picker.html
427
-
428
- ### Overview
429
-
430
- Presents the provider-owned OS directory chooser with change/cancel/error states.
431
-
432
- ### Public surface
433
-
434
- Methods/properties: `configure()`, `focus()`, `select()`, `destroy()`.
435
-
436
- Events: `directory-picker-ready`, `directory-picker-change`, `directory-picker-cancel`, `directory-picker-error`.
437
-
438
- Shared dependencies: [`DirectoryPicker.js`](runtime-modules.md#directorypickerjs).
439
-
440
- ### Availability and normalization
441
-
442
- **Browser and supported native WebViews.** Strict normalized native selection/error. HTMLImport + DOM; injected Arcane/provider modules where listed. Native methods remain subject to the bound app's capabilities. [Deep protocol details](protocols.md).
443
-
444
- ### Example
445
-
446
- ```html
447
- <html-import
448
- id="directory-picker.html"
449
- href="/arcane/components/directory-picker.html">
450
- </html-import>
451
- ```
452
-
453
- ## document-inspector.html
454
-
455
- ### Overview
456
-
457
- Inspects PDF, text, or source documents and records review state.
458
-
459
- ### Public surface
460
-
461
- Methods/properties: `loadDocument()`, `selectView()`, `markSaved()`, `destroy()`.
462
-
463
- Events: `document-inspector-ready`, `document-review-change`.
464
-
465
- Shared dependencies: [`MD.js`](runtime-modules.md#mdjs).
466
-
467
- ### Availability and normalization
468
-
469
- **Browser and supported native WebViews.** Document state normalized; browser document APIs mixed. HTMLImport + DOM; injected Arcane/provider modules where listed. Native methods remain subject to the bound app's capabilities. [Deep protocol details](protocols.md).
470
-
471
- ### Example
472
-
473
- ```html
474
- <html-import
475
- id="document-inspector.html"
476
- href="/arcane/components/document-inspector.html">
477
- </html-import>
478
- ```
479
-
480
- ## file-drop.html
481
-
482
- ### Overview
483
-
484
- Acquires files by drag/drop or picker and presents busy, progress, error, and cleared state.
485
-
486
- ### Public surface
487
-
488
- Methods/properties: `configure()`, `openPicker()`, `clear()`, `setBusy()`, `setError()`, `setProgress()`, `destroy()`.
489
-
490
- Events: `file-drop-ready`, `file-drop-selected`, `file-drop-progress`, `file-drop-state`, `file-drop-error`.
491
-
492
- ### Availability and normalization
493
-
494
- **Browser and supported native WebViews.** State normalized; browser File/drop errors mixed. HTMLImport + DOM; injected Arcane/provider modules where listed. Native methods remain subject to the bound app's capabilities. [Deep protocol details](protocols.md).
495
-
496
- ### Example
497
-
498
- ```html
499
- <html-import
500
- id="file-drop.html"
501
- href="/arcane/components/file-drop.html">
502
- </html-import>
503
- ```
504
-
505
- ## file-inspector.html
506
-
507
- ### Overview
508
-
509
- Displays file metadata, preview, busy/error state, and caller-defined actions.
510
-
511
- ### Public surface
512
-
513
- Methods/properties: `configure()`, `show()`, `clear()`, `setActions()`, `setBusy()`, `setError()`, `setPreview()`, `destroy()`.
514
-
515
- Events: `file-inspector-ready`, `file-inspector-action`, `file-inspector-change`, `file-inspector-cleared`, `file-inspector-error`.
516
-
517
- Slots: `title`, `preview`, `metadata`, `actions`.
518
-
519
- ### Availability and normalization
520
-
521
- **Browser and supported native WebViews.** State normalized; preview/provider behavior mixed. HTMLImport + DOM; injected Arcane/provider modules where listed. Native methods remain subject to the bound app's capabilities. [Deep protocol details](protocols.md).
522
-
523
- ### Example
524
-
525
- ```html
526
- <html-import
527
- id="file-inspector.html"
528
- href="/arcane/components/file-inspector.html">
529
- </html-import>
530
- ```
531
-
532
- ## file-manager.html
533
-
534
- ### Overview
535
-
536
- Browses, filters, selects, opens, and acts on app-scoped files.
537
-
538
- ### Public surface
539
-
540
- Methods/properties: `setProvider()`, `loadAll()`, `setFilter()`, `select()`, `clearSelection()`, `destroy()`.
541
-
542
- Events: `file-manager-ready`, `file-manager-select`, `file-manager-open`, `file-manager-action`.
543
-
544
- Shared dependencies: [`DBOPFS.js`](runtime-modules.md#dbopfsjs), [`File.js`](runtime-entities.md#filejs), [`WaitForComponent.js`](runtime-modules.md#waitforcomponentjs).
545
-
546
- ### Availability and normalization
547
-
548
- **Browser and supported native WebViews.** Selection/filter state normalized; storage/provider behavior mixed. HTMLImport + DOM; injected Arcane/provider modules where listed. Native methods remain subject to the bound app's capabilities. [Deep protocol details](protocols.md).
549
-
550
- ### Example
551
-
552
- ```html
553
- <html-import
554
- id="file-manager.html"
555
- href="/arcane/components/file-manager.html">
556
- </html-import>
557
- ```
558
-
559
- ## header.html
560
-
561
- ### Overview
562
-
563
- Legacy title bar with history, reload, online marker, presentation labels, and 988 link.
564
-
565
- ### Public surface
566
-
567
- This fragment declares no public host method.
568
-
569
- This fragment declares no component-specific readiness or action event; use the loader's `html-import-ready` only to know that import execution completed.
570
-
571
- ### Availability and normalization
572
-
573
- **Browser and supported native WebViews.** Browser/platform-native behavior; no component-ready contract. HTMLImport + DOM; injected Arcane/provider modules where listed. Native methods remain subject to the bound app's capabilities. [Deep protocol details](protocols.md).
574
-
575
- ### Example
576
-
577
- ```html
578
- <html-import
579
- id="header.html"
580
- href="/arcane/components/header.html">
581
- </html-import>
582
- ```
583
-
584
- ## integration-settings.html
585
-
586
- ### Overview
587
-
588
- Edits non-secret communication service configuration and service actions.
589
-
590
- ### Public surface
591
-
592
- Methods/properties: `configure()`, `getValues()`, `setStatus()`, `destroy()`.
593
-
594
- Events: `integration-settings-ready`, `integration-settings-save`, `integration-settings-close`, `integration-action`.
595
-
596
- ### Availability and normalization
597
-
598
- **Browser and supported native WebViews.** Normalized non-secret values. HTMLImport + DOM; injected Arcane/provider modules where listed. Native methods remain subject to the bound app's capabilities. [Deep protocol details](protocols.md).
599
-
600
- ### Example
601
-
602
- ```html
603
- <html-import
604
- id="integration-settings.html"
605
- href="/arcane/components/integration-settings.html">
606
- </html-import>
607
- ```
608
-
609
- ## local-ai-status.html
610
-
611
- ### Overview
612
-
613
- Presents local-AI standby, failure, recovery, guidance, retry, and dismissal states.
614
-
615
- ### Public surface
616
-
617
- Methods/properties: `configure()`, `begin()`, `present()`, `destroy()`, and the `hidden` property.
618
-
619
- Events: `local-ai-status-ready`, `local-ai-status-dismissed`, `local-ai-retry`.
620
-
621
- Shared dependencies: [`LocalAIReadiness.js`](runtime-modules.md#localaireadinessjs).
622
-
623
- ### Availability and normalization
624
-
625
- **Browser and supported native WebViews.** Fully normalized LocalAIReadiness report. HTMLImport + DOM; injected Arcane/provider modules where listed. Native methods remain subject to the bound app's capabilities. [Deep protocol details](protocols.md).
626
-
627
- ### Example
628
-
629
- ```html
630
- <html-import
631
- id="local-ai-status.html"
632
- href="/arcane/components/local-ai-status.html">
633
- </html-import>
634
- ```
635
-
636
- ## markdown-document.html
637
-
638
- ### Overview
639
-
640
- Safely renders and navigates a Markdown document with focusable fragments.
641
-
642
- ### Public surface
643
-
644
- Methods/properties: `configure()`, `load()`, `render()`, `clear()`, `fail()`, `focus()`, `focusFragment()`, `destroy()`.
645
-
646
- Events: `markdown-document-ready`, `markdown-document-state`,
647
- `markdown-document-loading`, `markdown-document-rendered`,
648
- `markdown-document-empty`, `markdown-document-error`, and
649
- `markdown-document-navigate`.
650
-
651
- Shared dependencies: [`MD.js`](runtime-modules.md#mdjs).
652
-
653
- ### Availability and normalization
654
-
655
- **Browser and supported native WebViews.** State/sanitized output normalized; Marked/DOM failures mixed. HTMLImport + DOM; injected Arcane/provider modules where listed. Native methods remain subject to the bound app's capabilities. [Deep protocol details](protocols.md).
656
-
657
- ### Example
658
-
659
- ```html
660
- <html-import
661
- id="markdown-document.html"
662
- href="/arcane/components/markdown-document.html">
663
- </html-import>
664
- ```
665
-
666
- ## markdown-editor.html
667
-
668
- ### Overview
669
-
670
- Configurable Markdown authoring, toolbar, preview, title, and save surface.
671
-
672
- ### Public surface
673
-
674
- Methods/properties: `configure()`, `focus()`, `clear()`, `saveEntry()`, `destroy()`.
675
-
676
- Events: `markdown-editor-ready`, `markdown-editor-change`, `markdown-editor-saved`.
677
-
678
- Shared dependencies: [`MD.js`](runtime-modules.md#mdjs), [`ComponentContracts.js`](runtime-modules.md#componentcontractsjs).
679
-
680
- ### Availability and normalization
681
-
682
- **Browser and supported native WebViews.** Editor values normalized; injected save result mixed. HTMLImport + DOM; injected Arcane/provider modules where listed. Native methods remain subject to the bound app's capabilities. [Deep protocol details](protocols.md).
683
-
684
- ### Example
685
-
686
- ```html
687
- <html-import
688
- id="markdown-editor.html"
689
- href="/arcane/components/markdown-editor.html">
690
- </html-import>
691
- ```
692
-
693
- ## media-embed.html
694
-
695
- ### Overview
696
-
697
- Loads a validated YouTube video or playlist embed and exposes external-platform action.
698
-
699
- ### Public surface
700
-
701
- Methods/properties: `configure()`, `load()`, `destroy()`.
702
-
703
- Events: `media-embed-ready`, `media-load`, `media-error`, `media-open-platform`.
704
-
705
- Shared dependencies: [`YouTubeMedia.js`](runtime-modules.md#youtubemediajs).
706
-
707
- ### Availability and normalization
708
-
709
- **Browser and supported native WebViews.** URL/error normalized; iframe/platform behavior native. HTMLImport + DOM; injected Arcane/provider modules where listed. Native methods remain subject to the bound app's capabilities. [Deep protocol details](protocols.md).
710
-
711
- ### Example
712
-
713
- ```html
714
- <html-import
715
- id="media-embed.html"
716
- href="/arcane/components/media-embed.html">
717
- </html-import>
718
- ```
719
-
720
- ## modal.html
721
-
722
- ### Overview
723
-
724
- Generic modal with population, open/close, actions, and sequential task execution.
725
-
726
- ### Public surface
727
-
728
- Methods/properties: `populate()`, `open()`, `close()`, `runTasks()`, `destroy()`.
729
-
730
- Events: `modal-ready`, `modal-opened`, `modal-closed`, `modal-action`.
731
-
732
- Slots: `header`, `body`, `footer`.
733
-
734
- ### Availability and normalization
735
-
736
- **Browser and supported native WebViews.** Modal state normalized; injected task results mixed. HTMLImport + DOM; injected Arcane/provider modules where listed. Native methods remain subject to the bound app's capabilities. [Deep protocol details](protocols.md).
737
-
738
- ### Example
739
-
740
- ```html
741
- <html-import
742
- id="modal.html"
743
- href="/arcane/components/modal.html">
744
- </html-import>
745
- ```
746
-
747
- ## output-panel.html
748
-
749
- ### Overview
750
-
751
- Presents status, output, body, coverage, actions, pending, error, and cleared states.
752
-
753
- ### Public surface
754
-
755
- Methods/properties: `configure()`, `setOutput()`, `setBody()`, `setCoverage()`, `setActions()`, `setPending()`, `setStatus()`, `setError()`, `clear()`, `destroy()`.
756
-
757
- Events: `output-panel-ready`, `output-panel-state`, `output-panel-change`, `output-panel-action`, `output-panel-error`, `output-panel-cleared`.
758
-
759
- Slots: `title`, `header-actions`, `body`, `coverage`, `actions`.
760
-
761
- ### Availability and normalization
762
-
763
- **Browser and supported native WebViews.** DOM-normalized. HTMLImport + DOM; injected Arcane/provider modules where listed. Native methods remain subject to the bound app's capabilities. [Deep protocol details](protocols.md).
764
-
765
- ### Example
766
-
767
- ```html
768
- <html-import
769
- id="output-panel.html"
770
- href="/arcane/components/output-panel.html">
771
- </html-import>
772
- ```
773
-
774
- ## preferences-form.html
775
-
776
- ### Overview
777
-
778
- Builds a schema-driven preferences form with submit, reset, busy, and status behavior.
779
-
780
- ### Public surface
781
-
782
- Methods/properties: `configure()`, `getValues()`, `setValues()`, `setBusy()`, `setStatus()`, `destroy()`.
783
-
784
- Events: `preferences-form-ready`, `preferences-change`, `preferences-submit`, `preferences-reset`.
785
-
786
- ### Availability and normalization
787
-
788
- **Browser and supported native WebViews.** Normalized form values. HTMLImport + DOM; injected Arcane/provider modules where listed. Native methods remain subject to the bound app's capabilities. [Deep protocol details](protocols.md).
789
-
790
- ### Example
791
-
792
- ```html
793
- <html-import
794
- id="preferences-form.html"
795
- href="/arcane/components/preferences-form.html">
796
- </html-import>
797
- ```
798
-
799
- ## record-timeline.html
800
-
801
- ### Overview
802
-
803
- Displays chronological records/evidence and emits open actions.
804
-
805
- ### Public surface
806
-
807
- Methods/properties: `setItems()`, `populate()`, `destroy()`.
808
-
809
- Events: `record-timeline-ready`, `record-timeline-open`.
810
-
811
- ### Availability and normalization
812
-
813
- **Browser and supported native WebViews.** DOM-normalized. HTMLImport + DOM; injected Arcane/provider modules where listed. Native methods remain subject to the bound app's capabilities. [Deep protocol details](protocols.md).
814
-
815
- ### Example
816
-
817
- ```html
818
- <html-import
819
- id="record-timeline.html"
820
- href="/arcane/components/record-timeline.html">
821
- </html-import>
822
- ```
823
-
824
- ## relationship-board.html
825
-
826
- ### Overview
827
-
828
- Displays normalized relationship nodes/edges in graph and list forms.
829
-
830
- ### Public surface
831
-
832
- Methods/properties: `setGraph()`, `populate()`, `destroy()`.
833
-
834
- Events: `relationship-board-ready`, `relationship-node-open`, `relationship-edge-open`.
835
-
836
- ### Availability and normalization
837
-
838
- **Browser and supported native WebViews.** DOM-normalized. HTMLImport + DOM; injected Arcane/provider modules where listed. Native methods remain subject to the bound app's capabilities. [Deep protocol details](protocols.md).
839
-
840
- ### Example
841
-
842
- ```html
843
- <html-import
844
- id="relationship-board.html"
845
- href="/arcane/components/relationship-board.html">
846
- </html-import>
847
- ```
848
-
849
- ## screen-capture.html
850
-
851
- ### Overview
852
-
853
- Presents image, video, or GIF display-capture workflow.
854
-
855
- ### Public surface
856
-
857
- Methods/properties: `capture` (the component-owned `ScreenCapture` instance) and `destroy()`.
858
-
859
- Events: `screen-capture-ready`, `screen-capture-result`.
860
-
861
- Ready uses operation id `screen-capture-ready-<component-instance-id>`;
862
- capture results use the current instance-owned generation. `destroy()`
863
- invalidates that generation, aborts UI listeners, revokes the preview URL,
864
- destroys the `ScreenCapture` instance, disposes the source, marks the host
865
- unready, and returns `true`; repeated calls return `false`.
866
-
867
- Shared dependencies: [`ScreenCapture.js`](runtime-modules.md#screencapturejs).
868
-
869
- ### Availability and normalization
870
-
871
- **Browser and supported native WebViews.** State/result normalized; media permission/codec failures mixed. HTMLImport + DOM; injected Arcane/provider modules where listed. Native methods remain subject to the bound app's capabilities. [Deep protocol details](protocols.md).
872
-
873
- ### Example
874
-
875
- ```html
876
- <html-import
877
- id="screen-capture.html"
878
- href="/arcane/components/screen-capture.html">
879
- </html-import>
880
- ```
881
-
882
- ## source-code-viewer.html
883
-
884
- ### Overview
885
-
886
- Renders line-addressable source code with load, error, focus, and state behavior.
887
-
888
- ### Public surface
889
-
890
- Methods/properties: `configure()`, `load()`, `render()`, `clear()`, `fail()`, `focus()`, `focusLine()`, `destroy()`.
891
-
892
- Events: `source-code-viewer-ready`, `source-code-viewer-state`,
893
- `source-code-viewer-state-loading`, `source-code-viewer-state-ready`,
894
- `source-code-viewer-state-empty`, and `source-code-viewer-state-error`.
895
-
896
- ### Availability and normalization
897
-
898
- **Browser and supported native WebViews.** Normalized source/state. HTMLImport + DOM; injected Arcane/provider modules where listed. Native methods remain subject to the bound app's capabilities. [Deep protocol details](protocols.md).
899
-
900
- ### Example
901
-
902
- ```html
903
- <html-import
904
- id="source-code-viewer.html"
905
- href="/arcane/components/source-code-viewer.html">
906
- </html-import>
907
- ```
908
-
909
- ## source-explanation.html
910
-
911
- ### Overview
912
-
913
- Presents an evidence finding, source selection, explanation, and save state.
914
-
915
- ### Public surface
916
-
917
- Methods/properties: `showFinding()`, `populate()`, `selectSource()`, `markSaved()`, `destroy()`.
918
-
919
- Events: `source-explanation-ready`, `source-explanation-save`, `source-explanation-source-selected`.
920
-
921
- ### Availability and normalization
922
-
923
- **Browser and supported native WebViews.** DOM-normalized. HTMLImport + DOM; injected Arcane/provider modules where listed. Native methods remain subject to the bound app's capabilities. [Deep protocol details](protocols.md).
924
-
925
- ### Example
926
-
927
- ```html
928
- <html-import
929
- id="source-explanation.html"
930
- href="/arcane/components/source-explanation.html">
931
- </html-import>
932
- ```
933
-
934
- ## speech.html
935
-
936
- ### Overview
937
-
938
- Coordinates explicit speech-to-text activation, speech controls, transcription
939
- completion, mute state, and microphone availability.
940
-
941
- ### Public surface
942
-
943
- Methods/properties: `configure()`, `setAvailability()`, `setMuted()`,
944
- `reportTTSError(error,boundary='synthesis')`, `requestSTTActivation()`,
945
- `destroy()`, `availability`, `muted`, `initialMuted`, and `componentReady`.
946
-
947
- Events: `speech-ready`, `speech-transcription-complete`,
948
- `speech-transcription-error`, `speech-transcription-cancelled`,
949
- `speech-microphone-unavailable`, `speech-stt-activation-request`,
950
- `speech-stt-activation-error`, `speech-tts-lifecycle-error`, and
951
- `speech-synthesis-error`.
952
-
953
- Shared dependencies: [`AI.js`](runtime-modules.md#aijs),
954
- [`AIRuntimeState.js`](runtime-modules.md#airuntimestatejs),
955
- [`ComponentContracts.js`](runtime-modules.md#componentcontractsjs), and
956
- [`DBLS.js`](runtime-modules.md#dblsjs).
957
-
958
- The Hold to talk control remains disabled unless sticky STT state is `ready`,
959
- the role is not busy, and microphone capture is available. For an explicitly
960
- selected STT route, a separate keyboard-operable control presents Start
961
- transcription while `unloaded`, Cancel loading while `loading`, a disabled
962
- Canceling state while `unloading`, and Try again with the sticky error while
963
- `error`. Selected-unloaded, busy, and error states are shown as distinct facts;
964
- none is treated as ready.
965
-
966
- The default `requestSTTActivation(intent)` forwards the frozen
967
- `{role:'stt',action:'load'|'unload',reason:'user'}` record to
968
- `requestAIRuntimeIntent()`. Before calling it, the component emits a bubbling,
969
- composed, cancelable `speech-stt-activation-request` event with frozen
970
- `{intent,state}` detail. `preventDefault()` suppresses the callback and intent.
971
- Callback failure emits `speech-stt-activation-error` with frozen
972
- `{request,error,message}` detail. Cancel loading publishes an `unload` intent;
973
- only subsequent sticky `unloading` or `unloaded` state confirms lifecycle
974
- progress, and callback return never proves provider work stopped.
975
-
976
- The component emits no activation request on import or state observation.
977
- Provider registration and selection remain inert, and default
978
- `startTranscription=false` does not request STT during runtime startup. The
979
- provider/runtime owner decides whether and how to execute a user intent; the
980
- component never selects a runtime or model, downloads artifacts, reloads after
981
- failure, or falls back to another provider.
982
-
983
- `setAvailability()` is compatibility-only for microphone and negative
984
- unselected-role reports. Positive STT/TTS booleans cannot manufacture a ready
985
- role, and no compatibility value can replace a selected sticky role. Hold to
986
- talk stays disabled without sticky ready STT, and compatibility input cannot
987
- enable a no-selection TTS role or bypass explicit TTS activation.
988
-
989
- Each transcription request owns an `AbortController`; its signal is passed as
990
- the third argument to `AI.fetchSTT()`. Cancel, a newer capture, and `destroy()`
991
- abort that controller and suppress late results. This proves request delivery
992
- was canceled, not that an uncooperative provider stopped underlying work.
993
-
994
- User Unmute calls the shared `AI.setSpeechMuted(false)` lifecycle owner before
995
- or with publishing the TTS load intent, so the runtime can legally load TTS.
996
- Mute calls `AI.setSpeechMuted(true)`, stops playback, cancels active TTS work,
997
- and unloads the selected TTS role. Lifecycle failures remain visible through
998
- `speech-tts-lifecycle-error` and sticky role state.
999
-
1000
- Speech operation ids are
1001
- `<component-instance-id>:<kind>:<sequence>`. Canonical cancellation reasons are
1002
- `stt-role-unready`, `stt-provider-transcription-cancelled`, `stt-role-busy`,
1003
- `microphone-unavailable`, `component-destroyed`, and
1004
- `stt-transcription-cancelled`. Microphone capture-failure reasons are
1005
- `microphone-input-missing`, `microphone-input-unavailable`,
1006
- `microphone-capture-denied`, and `microphone-capture-rejected`. Component
1007
- boundary codes are `ARCANE_SPEECH_MICROPHONE_CAPTURE_REJECTED`,
1008
- `ARCANE_SPEECH_STT_TRANSCRIPTION_REQUEST_REJECTED`,
1009
- `ARCANE_SPEECH_TTS_LOAD_REJECTED`, `ARCANE_SPEECH_TTS_UNLOAD_REJECTED`,
1010
- `ARCANE_SPEECH_TTS_SYNTHESIS_REQUEST_REJECTED`, and
1011
- `ARCANE_SPEECH_TTS_PLAYBACK_RESUME_REJECTED`. Each of those component-boundary
1012
- public projections keeps the exact boundary in `code` and preserves a distinct
1013
- string code from the browser, runtime, or provider additively as `causeCode`.
1014
- A missing STT method therefore uses boundary
1015
- `ARCANE_SPEECH_STT_TRANSCRIPTION_REQUEST_REJECTED` with
1016
- `causeCode:'ARCANE_SPEECH_STT_RUNTIME_METHOD_UNAVAILABLE'`.
1017
-
1018
- Stable rejection reasons are `stt-transcription-rejected`,
1019
- `tts-load-rejected`, `tts-unload-rejected`, `tts-synthesis-rejected`, and
1020
- `tts-playback-resume-rejected`. Shared activation rejection uses
1021
- `ARCANE_STT_ACTIVATION_REQUEST_REJECTED` and `activation-request-rejected`.
1022
-
1023
- ### Availability and normalization
1024
-
1025
- **Browser and supported native WebViews.** UI/runtime state and explicit user
1026
- STT activation intent are normalized; provider/model authority and media
1027
- behavior remain external. HTMLImport + DOM; injected Arcane/provider modules
1028
- where listed. Native methods remain subject to the bound app's capabilities.
1029
- [Deep protocol details](protocols.md).
1030
-
1031
- ### Example
1032
-
1033
- ```html
1034
- <html-import
1035
- id="speech.html"
1036
- href="/arcane/components/speech.html">
1037
- </html-import>
1038
- ```
1039
-
1040
- ## summary-strip.html
1041
-
1042
- ### Overview
1043
-
1044
- Displays compact selectable KPI or summary items.
1045
-
1046
- ### Public surface
1047
-
1048
- Methods/properties: `configure()`, `setItems()`, `updateItem()`, `clear()`, `destroy()`.
1049
-
1050
- Events: `summary-strip-ready`, `summary-strip-change`, `summary-strip-select`.
1051
-
1052
- ### Availability and normalization
1053
-
1054
- **Browser and supported native WebViews.** DOM-normalized. HTMLImport + DOM; injected Arcane/provider modules where listed. Native methods remain subject to the bound app's capabilities. [Deep protocol details](protocols.md).
1055
-
1056
- ### Example
1057
-
1058
- ```html
1059
- <html-import
1060
- id="summary-strip.html"
1061
- href="/arcane/components/summary-strip.html">
1062
- </html-import>
1063
- ```
1064
-
1065
- ## table.html
1066
-
1067
- ### Overview
1068
-
1069
- Builds and updates a simple header/body table.
1070
-
1071
- ### Public surface
1072
-
1073
- Methods/properties: `buildHeader()`, `buildTable()`, `destroy()`.
1074
-
1075
- Events: `table-ready`, `header-update`, `body-update`.
1076
-
1077
- ### Availability and normalization
1078
-
1079
- **Browser and supported native WebViews.** DOM-normalized. HTMLImport + DOM; injected Arcane/provider modules where listed. Native methods remain subject to the bound app's capabilities. [Deep protocol details](protocols.md).
1080
-
1081
- ### Example
1082
-
1083
- ```html
1084
- <html-import
1085
- id="table.html"
1086
- href="/arcane/components/table.html">
1087
- </html-import>
1088
- ```
1089
-
1090
- ## task-progress.html
1091
-
1092
- ### Overview
1093
-
1094
- Runs and displays a task list with started/change/complete/error state.
1095
-
1096
- ### Public surface
1097
-
1098
- Methods/properties: `configure()`, `setTasks()`, `updateTask()`, `runTasks()`, `clear()`, `destroy()`.
1099
-
1100
- Events: `task-progress-ready`, `task-progress-started`, `task-progress-change`, `task-progress-complete`, `task-progress-error`.
1101
-
1102
- ### Availability and normalization
1103
-
1104
- **Browser and supported native WebViews.** Task state normalized; injected task results mixed. HTMLImport + DOM; injected Arcane/provider modules where listed. Native methods remain subject to the bound app's capabilities. [Deep protocol details](protocols.md).
1105
-
1106
- ### Example
1107
-
1108
- ```html
1109
- <html-import
1110
- id="task-progress.html"
1111
- href="/arcane/components/task-progress.html">
1112
- </html-import>
1113
- ```
1114
-
1115
- ## terminal-workspace.html
1116
-
1117
- ### Overview
1118
-
1119
- Presents multiple terminal sessions, output, active selection, theme, and terminal actions.
1120
-
1121
- ### Public surface
1122
-
1123
- Methods/properties: `configure()`, `addSession()`, `removeSession()`, `activateSession()`, `append()`, `clear()`, `setState()`, `setTheme()`, `focus()`, `destroy()`.
1124
-
1125
- Events: `terminal-workspace-ready`, `terminal-submit`, `terminal-interrupt`, `terminal-clear`, `terminal-session-new`, `terminal-session-close`, `terminal-session-select`, `terminal-settings`.
1126
-
1127
- Shared dependencies: [`AnsiText.js`](runtime-modules.md#ansitextjs).
1128
-
1129
- ### Availability and normalization
1130
-
1131
- **Browser and supported native WebViews.** UI/session state normalized; native command results supplied externally. HTMLImport + DOM; injected Arcane/provider modules where listed. Native methods remain subject to the bound app's capabilities. [Deep protocol details](protocols.md).
1132
-
1133
- ### Example
1134
-
1135
- ```html
1136
- <html-import
1137
- id="terminal-workspace.html"
1138
- href="/arcane/components/terminal-workspace.html">
1139
- </html-import>
1140
- ```
1141
-
1142
- ## theme-editor.html
1143
-
1144
- ### Overview
1145
-
1146
- Edits, previews, saves, and resets semantic custom theme tokens.
1147
-
1148
- ### Public surface
1149
-
1150
- Methods/properties: `configure()`, `getTheme()`, `setTheme()`, `setBusy()`, `setStatus()`, `destroy()`.
1151
-
1152
- Events: `theme-editor-ready`, `theme-preview`, `theme-save`, `theme-reset`.
1153
-
1154
- Shared dependencies: [`Theme.js`](runtime-entities.md#themejs).
1155
-
1156
- ### Availability and normalization
1157
-
1158
- **Browser and supported native WebViews.** Fully normalized Theme values. HTMLImport + DOM; injected Arcane/provider modules where listed. Native methods remain subject to the bound app's capabilities. [Deep protocol details](protocols.md).
1159
-
1160
- ### Example
1161
-
1162
- ```html
1163
- <html-import
1164
- id="theme-editor.html"
1165
- href="/arcane/components/theme-editor.html">
1166
- </html-import>
1167
- ```
1168
-
1169
- ## theme-switcher.html
1170
-
1171
- ### Overview
1172
-
1173
- Selects and refreshes system, light, dark, or custom theme mode.
1174
-
1175
- ### Public surface
1176
-
1177
- Methods/properties: `setMode()`, `refresh()`.
1178
-
1179
- This fragment declares no component-specific readiness or action event; use the loader's `html-import-ready` only to know that import execution completed.
1180
-
1181
- Shared dependencies: [`ThemeManager.js`](runtime-modules.md#thememanagerjs).
1182
-
1183
- ### Availability and normalization
1184
-
1185
- **Browser and supported native WebViews.** Preference/native appearance behavior mixed; no component-ready contract. HTMLImport + DOM; injected Arcane/provider modules where listed. Native methods remain subject to the bound app's capabilities. [Deep protocol details](protocols.md).
1186
-
1187
- ### Example
1188
-
1189
- ```html
1190
- <html-import
1191
- id="theme-switcher.html"
1192
- href="/arcane/components/theme-switcher.html">
1193
- </html-import>
1194
- ```
1195
-
1196
- ## unified-inbox.html
1197
-
1198
- ### Overview
1199
-
1200
- Displays provider-neutral communication threads with active/loading state.
1201
-
1202
- ### Public surface
1203
-
1204
- Methods/properties: `configure()`, `setThreads()`, `setActive()`, `setLoading()`, `destroy()`.
1205
-
1206
- Events: `unified-inbox-ready`, `inbox-refresh`, `thread-select`.
1207
-
1208
- ### Availability and normalization
1209
-
1210
- **Browser and supported native WebViews.** DOM-normalized. HTMLImport + DOM; injected Arcane/provider modules where listed. Native methods remain subject to the bound app's capabilities. [Deep protocol details](protocols.md).
1211
-
1212
- ### Example
1213
-
1214
- ```html
1215
- <html-import
1216
- id="unified-inbox.html"
1217
- href="/arcane/components/unified-inbox.html">
1218
- </html-import>
1219
- ```
1220
-
1221
- ## voice-transcription.html
1222
-
1223
- ### Overview
1224
-
1225
- Records segmented microphone audio only after authoritative STT admission,
1226
- exposes explicit selected-STT activation, transcribes with cancellation,
1227
- persists, and completes a combined transcript.
1228
-
1229
- ### Public surface
1230
-
1231
- Methods/properties: `configure()`, `requestSTTActivation()`, `startRecording()`,
1232
- `stopRecording()`, `save()`, `completeTranscription()/complete()`, `clear()`,
1233
- `reset()`, `destroy()`.
1234
-
1235
- Events: `voice-transcription-ready`, `voice-transcription-state`,
1236
- `voice-transcription-segment`, `voice-transcription-change`,
1237
- `voice-transcription-complete`, `speech-transcription-complete`,
1238
- `speech-transcription-cancelled`, `speech-stt-activation-request`, and
1239
- `speech-stt-activation-error`.
1240
-
1241
- Shared dependencies: [`MD.js`](runtime-modules.md#mdjs),
1242
- [`ComponentContracts.js`](runtime-modules.md#componentcontractsjs),
1243
- [`AIRuntimeState.js`](runtime-modules.md#airuntimestatejs), and
1244
- [`AI.js`](runtime-modules.md#aijs).
1245
-
1246
- ### Availability and normalization
1247
-
1248
- **Browser and supported native WebViews.** The component subscribes
1249
- synchronously to sticky `AIRuntimeState.roles.stt`; its recording Start button
1250
- and public `startRecording()` both fail closed unless that role is exactly
1251
- `ready` and not busy. A configured `transcribe(file,context)` callback remains
1252
- request plumbing rather than readiness authority. Its context now includes the
1253
- owned `signal` additively. The default route calls
1254
- `AI.fetchSTT(file,undefined,signal)` so the callback position remains valid and
1255
- readiness loss or destruction can abort delivery.
1256
-
1257
- For a selected `unloaded`, `loading`, `unloading`, or `error` role, the component
1258
- keeps recording Start disabled and presents the same keyboard-operable Start
1259
- transcription/Try again or Cancel loading control as `speech.html`. Both use the
1260
- shared `createSTTActivationController()` contract. User operation emits the
1261
- cancelable `speech-stt-activation-request` event with frozen `{intent,state}`;
1262
- `preventDefault()` suppresses the callback. The default
1263
- `requestSTTActivation(intent)` publishes the frozen
1264
- `{role:'stt',action:'load'|'unload',reason:'user'}` intent. Callback failure emits
1265
- `speech-stt-activation-error` with frozen `{request,error,message}`. Import and
1266
- state observation emit no activation request and never begin a model download.
1267
-
1268
- If sticky readiness is lost during microphone acquisition, capture, or the STT
1269
- request, the component invalidates the session, aborts the owned request signal,
1270
- releases media, discards late completion, and emits
1271
- `speech-transcription-cancelled`. Its local compatibility reason is
1272
- `runtime-unready`, while its canonical/public reason is `stt-role-unready`. A
1273
- busy role uses `stt-role-busy` in both views. A current provider cancellation
1274
- returns the component workflow to `idle` with local
1275
- `stt-provider-request-cancelled` and canonical/public
1276
- `stt-provider-transcription-cancelled`; destruction uses
1277
- `component-destroyed` in both views. Replacing configuration without an
1278
- `initialValue` during active work uses `configuration-replaced` in both views.
1279
- Stale teardown results remain suppressed. A
1280
- current save failure, including `AbortError`, enters the visible `error` state.
1281
- Readiness loss after transcription has finished does not invalidate an already
1282
- pending application save or completion callback: its settlement remains
1283
- observable, while any new recording remains gated by current sticky readiness.
1284
- Assigning `value` or calling `configure({initialValue})` explicitly supersedes
1285
- an in-flight microphone start, STT request, save, or completion. The component
1286
- advances its generation, aborts owned STT delivery, releases owned media, emits
1287
- `speech-transcription-cancelled` with
1288
- `reason:'transcript-replaced'`, and suppresses
1289
- late settlement before publishing the assigned transcript. Assigning transcript
1290
- text during active recording preserves that recording and changes the transcript
1291
- to which the captured segment will be appended.
1292
- `destroy()` aborts the state subscription, cancels active work, removes the
1293
- activation listener, sets component `ready` to `false`, and returns `true`;
1294
- repeated destruction is
1295
- idempotent. Destruction is terminal: Start, activation, and Complete remain
1296
- disabled and status remains unavailable. `voice-transcription-state` detail is
1297
- the frozen `{message,state,stt}` record, where `state` remains the component
1298
- workflow and `stt` is the authoritative immutable role record. Transcript
1299
- completion stays available when STT is unavailable before destruction.
1300
- State/text, explicit activation, and request cancellation are normalized;
1301
- provider/model authority and media behavior remain external. HTMLImport + DOM;
1302
- injected Arcane/provider modules where listed.
1303
- Native methods remain subject to the bound app's capabilities. [Deep protocol details](protocols.md).
1304
-
1305
- ### Example
1306
-
1307
- ```html
1308
- <html-import
1309
- id="voice-transcription.html"
1310
- href="/arcane/components/voice-transcription.html">
1311
- </html-import>
1312
- ```
1313
-
1314
- ## weather-widget.html
1315
-
1316
- ### Overview
1317
-
1318
- Displays normalized current and daily weather with refresh intent.
1319
-
1320
- ### Public surface
1321
-
1322
- Methods/properties: `setWeather()`, `clear()`, `destroy()`.
1323
-
1324
- Events: `weather-widget-ready`, `weather-refresh`.
1325
-
1326
- ### Availability and normalization
1327
-
1328
- **Browser and supported native WebViews.** Display normalized; provider supplied externally. HTMLImport + DOM; injected Arcane/provider modules where listed. Native methods remain subject to the bound app's capabilities. [Deep protocol details](protocols.md).
1329
-
1330
- ### Example
1331
-
1332
- ```html
1333
- <html-import
1334
- id="weather-widget.html"
1335
- href="/arcane/components/weather-widget.html">
1336
- </html-import>
1337
- ```
1338
-
1339
- ## web-navigator.html
1340
-
1341
- ### Overview
1342
-
1343
- Guards embedded/external navigation and surfaces allow/block/open intents.
1344
-
1345
- ### Public surface
1346
-
1347
- Methods/properties: `configure()`, `navigate()`, `currentUrl()`, `destroy()`.
1348
-
1349
- Events: `web-navigator-ready`, `web-navigate`, `web-navigation-blocked`, `web-open-external`.
1350
-
1351
- ### Availability and normalization
1352
-
1353
- **Browser and supported native WebViews.** Navigation intent/decision normalized; browser navigation result platform-native. HTMLImport + DOM; injected Arcane/provider modules where listed. Native methods remain subject to the bound app's capabilities. [Deep protocol details](protocols.md).
1354
-
1355
- ### Example
1356
-
1357
- ```html
1358
- <html-import
1359
- id="web-navigator.html"
1360
- href="/arcane/components/web-navigator.html">
1361
- </html-import>
1362
- ```
1363
-
1364
- ## Readiness caveats
1365
-
1366
- `header.html` and `theme-switcher.html` do not currently publish a component-specific ready event/property. Consumers can observe `html-import-ready` for completed fragment execution and then feature-detect their methods. Other fragments publish the exact ready event listed above.