arcane-os 0.42.0 → 0.42.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.
- package/CHANGELOG.md +20 -0
- package/README.md +1 -1
- package/docs/reference/runtime-components.md +7 -0
- package/docs/reference/runtime-modules.md +4 -3
- package/package.json +2 -2
- package/runtime/arcane/components/browser-ai-setup.html +1 -1
- package/runtime/arcane/components/calculator.html +1 -1
- package/runtime/arcane/components/chart.html +1 -1
- package/runtime/arcane/components/chat.html +34 -9
- package/runtime/arcane/components/conversation-view.html +1 -1
- package/runtime/arcane/components/dashboard-config.html +4 -4
- package/runtime/arcane/components/data-maintenance.html +3 -3
- package/runtime/arcane/components/data-view.html +3 -3
- package/runtime/arcane/components/directory-picker.html +2 -2
- package/runtime/arcane/components/file-drop.html +1 -1
- package/runtime/arcane/components/file-inspector.html +1 -1
- package/runtime/arcane/components/file-manager.html +3 -3
- package/runtime/arcane/components/integration-settings.html +1 -1
- package/runtime/arcane/components/local-ai-status.html +1 -1
- package/runtime/arcane/components/markdown-document.html +4 -4
- package/runtime/arcane/components/markdown-editor.html +2 -2
- package/runtime/arcane/components/media-embed.html +1 -1
- package/runtime/arcane/components/modal.html +1 -1
- package/runtime/arcane/components/output-panel.html +1 -1
- package/runtime/arcane/components/preferences-form.html +1 -1
- package/runtime/arcane/components/pwa-install.html +2 -2
- package/runtime/arcane/components/screen-capture.html +1 -1
- package/runtime/arcane/components/source-code-viewer.html +3 -3
- package/runtime/arcane/components/speech.html +1 -1
- package/runtime/arcane/components/summary-strip.html +1 -1
- package/runtime/arcane/components/table.html +1 -1
- package/runtime/arcane/components/task-progress.html +1 -1
- package/runtime/arcane/components/terminal-workspace.html +1 -1
- package/runtime/arcane/components/theme-editor.html +1 -1
- package/runtime/arcane/components/unified-inbox.html +1 -1
- package/runtime/arcane/components/voice-transcription.html +2 -2
- package/runtime/arcane/components/weather-widget.html +1 -1
- package/runtime/arcane/components/web-navigator.html +2 -2
- package/runtime/arcane/modules/ArcaneNavigationPolicy.js +1 -1
- package/runtime/arcane/modules/CommunicationAppController.js +2 -2
- package/runtime/arcane/modules/CommunicationHub.js +1 -1
- package/runtime/arcane/modules/ConversationClosingReport.js +1 -1
- package/runtime/arcane/modules/Errors.js +1 -1
- package/runtime/arcane/modules/HTMLImport.js +19 -38
- package/runtime/arcane/modules/LocalAIReadinessController.js +1 -1
- package/runtime/arcane/modules/ScamRiskPolicy.js +1 -1
- package/src/dev-server.mjs +2 -2
- package/src/import-map.mjs +66 -145
- package/src/packager/core.mjs +3 -4
- package/src/templates/workspace-template.mjs +5 -5
- package/src/workspace-runtime.mjs +6 -9
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,25 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 0.42.2
|
|
4
|
+
|
|
5
|
+
- Stop generating SDK cache suffixes in import maps, materialized runtime,
|
|
6
|
+
source serving, packaged resources, scaffold references and shared components.
|
|
7
|
+
Remove retired local `arcaneVersion` fields while preserving complete
|
|
8
|
+
functional queries, including caller-owned `v`, URL spelling and fragments.
|
|
9
|
+
- Preserve external URLs and resources under an external document base,
|
|
10
|
+
public method signatures, semantic version metadata, conditional HTTP caching
|
|
11
|
+
and stable application caches. Regenerate managed references through the
|
|
12
|
+
public package workflow after updating the SDK.
|
|
13
|
+
|
|
14
|
+
## 0.42.1
|
|
15
|
+
|
|
16
|
+
- Keep Enter as native newline input on phones and tablets using the shared
|
|
17
|
+
browser-device classification. The visible Send button still submits.
|
|
18
|
+
- Submit desktop Enter before native newline insertion while preserving
|
|
19
|
+
Shift+Enter, input-method composition, complete draft text, and existing
|
|
20
|
+
Send, speech and programmatic submission routes. Held Enter does not submit
|
|
21
|
+
repeatedly; input changes resize the composer through its existing lifecycle.
|
|
22
|
+
|
|
3
23
|
## 0.42.0
|
|
4
24
|
|
|
5
25
|
- Accept the optional boolean `responseToUsersPromptComplete` in conversation
|
package/README.md
CHANGED
|
@@ -19,7 +19,7 @@ version-locked SDK runtime, while an integrated Arcane checkout uses its live
|
|
|
19
19
|
`arcane/` runtime. Both profiles share the theme, packaging, event, cancellation,
|
|
20
20
|
and browser run contracts while retaining their selected application layout.
|
|
21
21
|
|
|
22
|
-
This checkout defines the `0.42.
|
|
22
|
+
This checkout defines the `0.42.2` SDK contract. Applications pin one exact npm
|
|
23
23
|
version and lockfile; registry state is deliberately not baked into application
|
|
24
24
|
artifacts.
|
|
25
25
|
|
|
@@ -314,6 +314,13 @@ extension callbacks. The component installs warning-only defaults when the host
|
|
|
314
314
|
does not supply them; applications may instead consume the corresponding
|
|
315
315
|
`chat-send-message` and `chat-language-changed` events.
|
|
316
316
|
|
|
317
|
+
The composer uses the shared browser-device classification: Enter inserts a
|
|
318
|
+
newline on mobile devices and tablets; desktop Enter submits before the native
|
|
319
|
+
newline is inserted. Shift+Enter and input-method composition retain native
|
|
320
|
+
editing. The visible Send button remains available on every device. Input
|
|
321
|
+
changes resize the composer without submitting; held desktop Enter does not
|
|
322
|
+
submit repeatedly. All input listeners follow the component's existing cleanup.
|
|
323
|
+
|
|
317
324
|
Before any session binding begins, callback-mode `sessionStatus` follows the
|
|
318
325
|
selected sticky LLM role and the existing application-owned `modelName` label
|
|
319
326
|
(or the selected model ID). Assigning `modelName` refreshes that status even
|
|
@@ -2444,9 +2444,10 @@ module URLs reuse and export the registered constructor, including overlapping
|
|
|
2444
2444
|
application startup and developer error-dialog imports. Existing component
|
|
2445
2445
|
instances, loading, readiness events, and teardown keep that same constructor.
|
|
2446
2446
|
|
|
2447
|
-
Local component resources use
|
|
2448
|
-
|
|
2449
|
-
remain intact.
|
|
2447
|
+
Local component resources use stable URLs. The loader removes retired SDK-owned
|
|
2448
|
+
`arcaneVersion` fields and adds no cache suffix. Functional query fields,
|
|
2449
|
+
including caller-owned `v` fields, and fragments remain intact. External resource
|
|
2450
|
+
URLs retain their complete query. Ordinary HTTP conditional caching is unchanged.
|
|
2450
2451
|
|
|
2451
2452
|
Exact exports: `default`.
|
|
2452
2453
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "arcane-os",
|
|
3
|
-
"version": "0.42.
|
|
3
|
+
"version": "0.42.2",
|
|
4
4
|
"description": "Arcane OS JavaScript SDK, project-local CLI, browser runtime, and repository-portable application packager.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./src/index.mjs",
|
|
@@ -86,7 +86,7 @@
|
|
|
86
86
|
"test": "npm run test:unit && npm run test:functional && npm run test:integration && npm run test:regression",
|
|
87
87
|
"test:release": "node ./bin/arcane-test.mjs test/npm-release.test.mjs",
|
|
88
88
|
"test:unit": "node ./bin/arcane-test.mjs test/app-descriptor.test.mjs test/app-schema.test.mjs test/app-selection.test.mjs test/contracts.test.mjs test/conversation-closing-report.test.mjs test/doctor.test.mjs test/mail-credentials.test.mjs test/mail-outbox.test.mjs test/mail-public-api.test.mjs test/mail-send.test.mjs test/mail-transport.test.mjs test/targets.test.mjs test/workspace-operation-lock.test.mjs",
|
|
89
|
-
"test:functional": "node ./bin/arcane-test.mjs test/ai-request-model.test.mjs test/ai-request-retry.test.mjs test/ai-stream-cancellation.test.mjs test/browser-speech-providers.test.mjs test/browser-wasm-gpu-notice.test.mjs test/browser-wasm-download-resume.test.mjs test/chat-stream-speech.test.mjs test/chat-transcript-scroll.test.mjs test/chat-transient-retention.test.mjs test/cli.test.mjs test/continuous-voice-capture.test.mjs test/dbopfs-document-library.test.mjs test/dbopfs-png.test.mjs test/dbopfs.test.mjs test/dev-server.test.mjs test/dev-pwa.test.mjs test/dom-event-instrumentation.test.mjs test/event-manager.test.mjs test/events.test.mjs test/file-preview.test.mjs test/import-map.test.mjs test/mail-cli.test.mjs test/mail-runtime.test.mjs test/mail-server.test.mjs test/markdown-editor.test.mjs test/markdown-source-map.test.mjs test/modal.test.mjs test/packaging.test.mjs test/pwa-packaging.test.mjs test/pwa-client.test.mjs test/pwa-install.test.mjs test/pwa-worker.test.mjs test/persistent-ai-chat-session.test.mjs test/reference-completeness.test.mjs test/runtime-api-behavior.test.mjs test/runtime.test.mjs test/scaffold.test.mjs test/speech-playback.test.mjs test/site.test.mjs test/twin-cloud.test.mjs test/update-check.test.mjs test/user-explicit-updates.test.mjs",
|
|
89
|
+
"test:functional": "node ./bin/arcane-test.mjs test/ai-request-model.test.mjs test/ai-request-retry.test.mjs test/ai-stream-cancellation.test.mjs test/browser-speech-providers.test.mjs test/browser-wasm-gpu-notice.test.mjs test/browser-wasm-download-resume.test.mjs test/chat-input.test.mjs test/chat-stream-speech.test.mjs test/chat-transcript-scroll.test.mjs test/chat-transient-retention.test.mjs test/cli.test.mjs test/continuous-voice-capture.test.mjs test/dbopfs-document-library.test.mjs test/dbopfs-png.test.mjs test/dbopfs.test.mjs test/dev-server.test.mjs test/dev-pwa.test.mjs test/dom-event-instrumentation.test.mjs test/event-manager.test.mjs test/events.test.mjs test/file-preview.test.mjs test/import-map.test.mjs test/mail-cli.test.mjs test/mail-runtime.test.mjs test/mail-server.test.mjs test/markdown-editor.test.mjs test/markdown-source-map.test.mjs test/modal.test.mjs test/packaging.test.mjs test/pwa-packaging.test.mjs test/pwa-client.test.mjs test/pwa-install.test.mjs test/pwa-worker.test.mjs test/persistent-ai-chat-session.test.mjs test/reference-completeness.test.mjs test/runtime-api-behavior.test.mjs test/runtime.test.mjs test/scaffold.test.mjs test/speech-playback.test.mjs test/site.test.mjs test/twin-cloud.test.mjs test/update-check.test.mjs test/user-explicit-updates.test.mjs",
|
|
90
90
|
"test:integration": "node ./bin/arcane-test.mjs test/installed-package-runtime.test.mjs test/root-app-layout.test.mjs test/integrated-shared.test.mjs test/integrated-workspace.test.mjs test/mail-browser.test.mjs test/native-plan.test.mjs test/native-provider-loader.test.mjs test/npm-release.test.mjs test/release-bundle.test.mjs test/release-capability-smoke.test.mjs test/shared-payload-batch.test.mjs test/tarball.test.mjs test/browser-wasm-cpu.test.mjs test/wllama-webgpu-runtime.test.mjs",
|
|
91
91
|
"test:regression": "node ./bin/arcane-test.mjs test/channel-workflows.test.mjs test/html-import-registration.test.mjs test/logging-regression.test.mjs test/markdown-speech.test.mjs test/prepared-speech.test.mjs test/native-provider-generation.test.mjs test/speech-queue-regression.test.mjs test/testing.test.mjs test/test-sets.test.mjs",
|
|
92
92
|
"check": "node tools/check-source.mjs && npm test",
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
<link rel="stylesheet" href="./arcane/css/theme.css
|
|
1
|
+
<link rel="stylesheet" href="./arcane/css/theme.css"><link rel="stylesheet" href="./arcane/css/primitives.css">
|
|
2
2
|
<style>:host{display:block;max-width:34rem}.calculator{display:grid;gap:var(--arcane-space-3);padding:var(--arcane-space-4)}.display{display:grid;gap:var(--arcane-space-2)}.display input{font:600 1.3rem/1.4 ui-monospace,monospace;text-align:right}.result{min-height:2.5rem;margin:0;text-align:right;font-size:1.8rem;font-weight:750;overflow-wrap:anywhere}.keys{display:grid;gap:var(--arcane-space-2);grid-template-columns:repeat(5,1fr)}.keys button{min-width:0;padding:.7rem .35rem}.status{min-height:1.4rem;margin:0;color:var(--arcane-muted)}@media(max-width:28rem){.keys{grid-template-columns:repeat(4,1fr)}}</style>
|
|
3
3
|
<section class="calculator arcane-card"><div class="display arcane-field"><label for="expression">Expression</label><input id="expression" inputmode="decimal" autocomplete="off" spellcheck="false" value=""><p id="result" class="result" aria-live="polite">0</p></div><div id="keys" class="keys" aria-label="Calculator keypad"></div><p id="status" class="status" role="status"></p></section>
|
|
4
4
|
<script type="module">const host=this,root=host.shadowRoot,input=root.querySelector('#expression'),result=root.querySelector('#result'),status=root.querySelector('#status'),keys=root.querySelector('#keys');const {default:CalculatorEngine}=await import('../modules/CalculatorEngine.js');const {createArcaneEventSource,projectArcaneDOMEvent}=await import('arcane-os/event-manager');const events=createArcaneEventSource(host,{source:'arcane.component.calculator',eventTypes:['calculation-complete','calculation-error','calculator-ready']}),lifecycleController=new AbortController();const engine=new CalculatorEngine(),definitions=['7','8','9','/','sqrt(','4','5','6','*','^','1','2','3','-','%','0','.','(',')','+','pi','e','C','⌫','='];let destroyed=false,operationSequence=0;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
<link rel="stylesheet" href="./arcane/css/layout.css
|
|
1
|
+
<link rel="stylesheet" href="./arcane/css/layout.css" />
|
|
2
2
|
<style>
|
|
3
3
|
:host {
|
|
4
4
|
display: block;
|
|
@@ -842,7 +842,7 @@
|
|
|
842
842
|
speechImport.id='speech';
|
|
843
843
|
speechImport.setAttribute(
|
|
844
844
|
'href',
|
|
845
|
-
new URL('./speech.html
|
|
845
|
+
new URL('./speech.html',componentURL).href
|
|
846
846
|
);
|
|
847
847
|
speechMount.replaceWith(speechImport);
|
|
848
848
|
const events=createArcaneEventSource(
|
|
@@ -889,14 +889,17 @@
|
|
|
889
889
|
{default:FileEntity},
|
|
890
890
|
{ConversationSubmissionBarrier,requireConversationTimeboxDelivery},
|
|
891
891
|
{requestAIRuntimeIntent,subscribeAIRuntimeState},
|
|
892
|
-
{createPersistentAIChatSession}
|
|
892
|
+
{createPersistentAIChatSession},
|
|
893
|
+
{getBrowserDeviceClass}
|
|
893
894
|
]=await Promise.all([
|
|
894
895
|
import('../modules/MD.js'),
|
|
895
896
|
import('../entities/File.js'),
|
|
896
897
|
import('../modules/ConversationTimebox.js'),
|
|
897
898
|
import('../modules/AIRuntimeState.js'),
|
|
898
|
-
import('../modules/PersistentAIChatSession.js')
|
|
899
|
+
import('../modules/PersistentAIChatSession.js'),
|
|
900
|
+
import('arcane-os/browser-device')
|
|
899
901
|
]);
|
|
902
|
+
const browserDeviceClass = getBrowserDeviceClass();
|
|
900
903
|
|
|
901
904
|
host.language=host.language||'English';
|
|
902
905
|
host.name = host.name||'User';
|
|
@@ -2997,7 +3000,13 @@
|
|
|
2997
3000
|
}
|
|
2998
3001
|
|
|
2999
3002
|
textArea.addEventListener(
|
|
3000
|
-
'
|
|
3003
|
+
'keydown',
|
|
3004
|
+
handleChatKeyDown,
|
|
3005
|
+
{signal:aiRuntimeStateAbortController.signal}
|
|
3006
|
+
);
|
|
3007
|
+
|
|
3008
|
+
textArea.addEventListener(
|
|
3009
|
+
'input',
|
|
3001
3010
|
resizeTextArea,
|
|
3002
3011
|
{signal:aiRuntimeStateAbortController.signal}
|
|
3003
3012
|
);
|
|
@@ -3140,12 +3149,28 @@
|
|
|
3140
3149
|
{signal:aiRuntimeStateAbortController.signal}
|
|
3141
3150
|
);
|
|
3142
3151
|
|
|
3143
|
-
|
|
3144
|
-
if(
|
|
3145
|
-
|
|
3146
|
-
|
|
3152
|
+
function handleChatKeyDown(event) {
|
|
3153
|
+
if(browserDeviceClass === 'mobile'
|
|
3154
|
+
|| event.key !== 'Enter'
|
|
3155
|
+
|| event.shiftKey
|
|
3156
|
+
|| event.isComposing
|
|
3157
|
+
|| event.keyCode === 229
|
|
3158
|
+
|| send.disabled) {
|
|
3159
|
+
return;
|
|
3160
|
+
}
|
|
3161
|
+
|
|
3162
|
+
event.preventDefault();
|
|
3163
|
+
if(event.repeat) {
|
|
3164
|
+
return;
|
|
3147
3165
|
}
|
|
3166
|
+
void submitMessage(
|
|
3167
|
+
'',
|
|
3168
|
+
{source: 'keyboard'}
|
|
3169
|
+
);
|
|
3170
|
+
resizeTextArea();
|
|
3171
|
+
}
|
|
3148
3172
|
|
|
3173
|
+
async function resizeTextArea() {
|
|
3149
3174
|
// Reset height to shrink to content size
|
|
3150
3175
|
trackTranscriptScrollPosition();
|
|
3151
3176
|
textArea.style.height = 'auto';
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
<link rel="stylesheet" href="./arcane/css/primitives.css
|
|
1
|
+
<link rel="stylesheet" href="./arcane/css/primitives.css">
|
|
2
2
|
<style>
|
|
3
3
|
:host{display:block;min-width:0;height:100%}.shell{display:grid;grid-template-rows:auto 1fr auto;height:100%;min-height:32rem}.heading{align-items:center;display:flex;gap:.75rem;justify-content:space-between;padding:1rem;border-bottom:1px solid var(--border-color,#ccd4df)}.heading h2,.heading p{margin:0}.heading p{color:var(--muted-text-color,#607080)}.badge{border:1px solid var(--border-color,#ccd4df);border-radius:999px;padding:.25rem .55rem;font-size:.72rem;text-transform:uppercase}.messages{display:flex;flex-direction:column;gap:.8rem;overflow:auto;padding:1rem}.message{align-self:flex-start;max-width:min(78%,42rem);padding:.75rem .9rem;border:1px solid var(--border-color,#ccd4df);border-radius:.9rem;background:var(--modal-background,#fff)}.message.outbound{align-self:flex-end;color:var(--button-text-color,#fff);background:var(--primary-color,#172238)}.message p{margin:0;white-space:pre-wrap;overflow-wrap:anywhere}.message footer{display:flex;gap:.5rem;justify-content:flex-end;margin-top:.4rem;font-size:.7rem;opacity:.72}.advisory{display:grid;gap:.45rem;margin-top:.7rem;padding:.7rem;border:2px solid var(--border-color,#ccd4df);border-radius:.65rem;background:var(--background-color,#f5f7fa);color:var(--text-color,#172238)}.advisory[data-level="critical"],.advisory[data-level="high"]{border-color:rgb(174,48,52)}.advisory[data-level="caution"]{border-color:rgb(190,120,34)}.advisory strong,.advisory p{margin:0}.advisory ul{margin:.1rem 0;padding-left:1.2rem}.advisory button{justify-self:start}.composer{display:grid;gap:.6rem;padding:1rem;border-top:1px solid var(--border-color,#ccd4df)}textarea{min-height:5rem;resize:vertical}.composer-row{align-items:center;display:flex;gap:.75rem;justify-content:space-between}.status{color:var(--muted-text-color,#607080);margin:0}.blank{display:grid;place-items:center;height:100%;padding:2rem;text-align:center}.blank p{color:var(--muted-text-color,#607080)}
|
|
4
4
|
</style>
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
<link rel="stylesheet" href="./arcane/css/layout.css
|
|
2
|
-
<link rel="stylesheet" href="./arcane/css/dashboard-config.css
|
|
1
|
+
<link rel="stylesheet" href="./arcane/css/layout.css">
|
|
2
|
+
<link rel="stylesheet" href="./arcane/css/dashboard-config.css">
|
|
3
3
|
<style>
|
|
4
4
|
:host{
|
|
5
5
|
display:block;
|
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
</style>
|
|
8
8
|
|
|
9
9
|
<button id="openConfig" type="button" aria-haspopup="dialog" disabled></button>
|
|
10
|
-
<html-import id="configModal" class="modal" href="./arcane/components/modal.html
|
|
10
|
+
<html-import id="configModal" class="modal" href="./arcane/components/modal.html"></html-import>
|
|
11
11
|
|
|
12
12
|
<script type="module">
|
|
13
13
|
const {default:Is}=await import('strong-type');
|
|
@@ -233,7 +233,7 @@
|
|
|
233
233
|
const items=document.createElement('section');
|
|
234
234
|
|
|
235
235
|
styles.rel='stylesheet';
|
|
236
|
-
styles.href=new URL('../css/dashboard-config.css
|
|
236
|
+
styles.href=new URL('../css/dashboard-config.css',componentHref).href;
|
|
237
237
|
heading.dataset.dashboardConfigHeading='';
|
|
238
238
|
message.dataset.dashboardConfigDescription='';
|
|
239
239
|
empty.className='dashboard-config-empty';
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
<link rel="stylesheet" href="./arcane/css/layout.css
|
|
1
|
+
<link rel="stylesheet" href="./arcane/css/layout.css">
|
|
2
2
|
<style>
|
|
3
3
|
:host{
|
|
4
4
|
display:block;
|
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
</style>
|
|
11
11
|
|
|
12
12
|
<button id="openMaintenance" type="button" aria-haspopup="dialog">Maintenance</button>
|
|
13
|
-
<html-import id="maintenanceModal" class="modal" href="./arcane/components/modal.html
|
|
13
|
+
<html-import id="maintenanceModal" class="modal" href="./arcane/components/modal.html"></html-import>
|
|
14
14
|
|
|
15
15
|
<script type="module">
|
|
16
16
|
const {arcaneLogging}=await import('arcane-os/logging');
|
|
@@ -19,7 +19,7 @@
|
|
|
19
19
|
const openButton=host.shadowRoot.querySelector('#openMaintenance');
|
|
20
20
|
const maintenanceModal=host.shadowRoot.querySelector('#maintenanceModal');
|
|
21
21
|
const {default:waitForComponent}=await import('../modules/WaitForComponent.js');
|
|
22
|
-
const {clearEmptyChatsAndMemories}=await import('../modules/DataMaintenance.js
|
|
22
|
+
const {clearEmptyChatsAndMemories}=await import('../modules/DataMaintenance.js');
|
|
23
23
|
const {createArcaneEventSource,projectArcaneDOMEvent}=await import('arcane-os/event-manager');
|
|
24
24
|
const events=createArcaneEventSource(host,{source:'arcane.component.data-maintenance',eventTypes:['data-maintenance-complete','data-maintenance-ready']});
|
|
25
25
|
const lifecycleController=new AbortController();
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
<link rel="stylesheet" href="./arcane/css/layout.css
|
|
1
|
+
<link rel="stylesheet" href="./arcane/css/layout.css">
|
|
2
2
|
<style>
|
|
3
3
|
:host{
|
|
4
4
|
display:flex;
|
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
</style>
|
|
12
12
|
|
|
13
13
|
<button id="openData" type="button" aria-haspopup="dialog"></button>
|
|
14
|
-
<html-import id="dataModal" class="modal" href="./arcane/components/modal.html
|
|
14
|
+
<html-import id="dataModal" class="modal" href="./arcane/components/modal.html"></html-import>
|
|
15
15
|
|
|
16
16
|
<script type="module">
|
|
17
17
|
const {default:Is}=await import('strong-type');
|
|
@@ -90,7 +90,7 @@
|
|
|
90
90
|
fileManager.dataset.layout=host.dataset.layout||'files';
|
|
91
91
|
fileManager.setAttribute(
|
|
92
92
|
'href',
|
|
93
|
-
new URL('./file-manager.html
|
|
93
|
+
new URL('./file-manager.html',componentHref).href
|
|
94
94
|
);
|
|
95
95
|
|
|
96
96
|
content.append(heading,fileManager);
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
<link rel="stylesheet" href="./arcane/css/theme.css
|
|
2
|
-
<link rel="stylesheet" href="./arcane/css/primitives.css
|
|
1
|
+
<link rel="stylesheet" href="./arcane/css/theme.css">
|
|
2
|
+
<link rel="stylesheet" href="./arcane/css/primitives.css">
|
|
3
3
|
<style>
|
|
4
4
|
:host{display:block;min-width:0}
|
|
5
5
|
.directory-picker{min-width:0}
|
|
@@ -435,9 +435,9 @@
|
|
|
435
435
|
|
|
436
436
|
<input id="fileUpload" type="file" hidden multiple>
|
|
437
437
|
|
|
438
|
-
<html-import id="directoryModal" class="modal" href="./arcane/components/modal.html
|
|
439
|
-
<html-import id="fileModal" class="modal" href="./arcane/components/modal.html
|
|
440
|
-
<html-import id="deleteModal" class="modal" href="./arcane/components/modal.html
|
|
438
|
+
<html-import id="directoryModal" class="modal" href="./arcane/components/modal.html"></html-import>
|
|
439
|
+
<html-import id="fileModal" class="modal" href="./arcane/components/modal.html"></html-import>
|
|
440
|
+
<html-import id="deleteModal" class="modal" href="./arcane/components/modal.html"></html-import>
|
|
441
441
|
|
|
442
442
|
<script type="module">
|
|
443
443
|
const {default:Is}=await import('strong-type');
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
<link rel="stylesheet" href="./arcane/css/primitives.css
|
|
1
|
+
<link rel="stylesheet" href="./arcane/css/primitives.css">
|
|
2
2
|
<style>
|
|
3
3
|
:host{display:block}.heading{align-items:flex-start;display:flex;gap:1rem;justify-content:space-between}.heading h2,.heading p{margin:0}.services{display:grid;gap:.75rem}.service{display:grid;gap:.65rem;padding:1rem;border:1px solid var(--border-color,#ccd4df);border-radius:.7rem}.service-head{align-items:flex-start;display:flex;gap:.75rem}.service-head input{height:1.25rem;width:1.25rem}.service-copy{flex:1}.service-copy strong{display:block}.service-copy p{color:var(--muted-text-color,#607080);margin:.2rem 0 0}.fields{display:grid;gap:.6rem;grid-template-columns:repeat(auto-fit,minmax(13rem,1fr))}.status{border-radius:999px;padding:.2rem .55rem;background:var(--secondary-color,#e8edf4);font-size:.72rem}.actions{display:flex;gap:.5rem;justify-content:flex-end}.notice{padding:.75rem;border-left:.25rem solid var(--focus-color,#7657d5);background:var(--secondary-color,#e8edf4)}
|
|
4
4
|
</style>
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
<link rel="stylesheet" href="./arcane/css/layout.css
|
|
2
|
-
<link rel="stylesheet" href="./arcane/css/theme.css
|
|
3
|
-
<link rel="stylesheet" href="./arcane/css/primitives.css
|
|
1
|
+
<link rel="stylesheet" href="./arcane/css/layout.css">
|
|
2
|
+
<link rel="stylesheet" href="./arcane/css/theme.css">
|
|
3
|
+
<link rel="stylesheet" href="./arcane/css/primitives.css">
|
|
4
4
|
|
|
5
5
|
<style>
|
|
6
6
|
:host{
|
|
@@ -219,7 +219,7 @@
|
|
|
219
219
|
const host=this;
|
|
220
220
|
host.ready=false;
|
|
221
221
|
|
|
222
|
-
const {default:MD}=await import('../modules/MD.js
|
|
222
|
+
const {default:MD}=await import('../modules/MD.js');
|
|
223
223
|
const {createArcaneEventSource,projectArcaneDOMEvent}=await import('arcane-os/event-manager');
|
|
224
224
|
const events=createArcaneEventSource(host,{source:'arcane.component.markdown-document',eventTypes:['markdown-document-state','markdown-document-empty','markdown-document-error','markdown-document-loading','markdown-document-rendered','markdown-document-navigate','markdown-document-ready']});
|
|
225
225
|
const lifecycleController=new AbortController();
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
<link rel="stylesheet" href="./arcane/css/layout.css
|
|
1
|
+
<link rel="stylesheet" href="./arcane/css/layout.css">
|
|
2
2
|
<style>
|
|
3
3
|
:host{
|
|
4
4
|
display:block;
|
|
@@ -129,7 +129,7 @@
|
|
|
129
129
|
const {arcaneLogging}=await import('arcane-os/logging');
|
|
130
130
|
|
|
131
131
|
const host=this;
|
|
132
|
-
const {default:MD}=await import('../modules/MD.js
|
|
132
|
+
const {default:MD}=await import('../modules/MD.js');
|
|
133
133
|
const {
|
|
134
134
|
applyMarkdownFormat,
|
|
135
135
|
normalizeMarkdownOptions
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
<link rel="stylesheet" href="./arcane/css/theme.css
|
|
1
|
+
<link rel="stylesheet" href="./arcane/css/theme.css"><link rel="stylesheet" href="./arcane/css/primitives.css">
|
|
2
2
|
<style>:host{display:block}.player-shell{display:grid;gap:var(--arcane-space-4)}.loader{display:flex;gap:var(--arcane-space-2)}.loader input{min-width:0;width:100%}.player{aspect-ratio:16/9;display:grid;place-items:center;background:var(--arcane-surface-muted);border:1px solid var(--arcane-border);border-radius:var(--arcane-radius-large)}iframe{width:100%;height:100%;border:0}.empty{text-align:center;color:var(--arcane-muted);padding:var(--arcane-space-5)}.footer{align-items:center;display:flex;gap:var(--arcane-space-3);justify-content:space-between}.status{margin:0;color:var(--arcane-muted)}@media(max-width:36rem){.loader,.footer{align-items:stretch;flex-direction:column}}</style>
|
|
3
3
|
<section class="player-shell"><form id="loader" class="loader"><label class="visually-hidden" for="mediaUrl">Video or playlist address</label><input id="mediaUrl" type="text" inputmode="url" autocomplete="off" spellcheck="false" placeholder="Paste a YouTube video or playlist URL"><button class="arcane-button" type="submit">Play</button></form><div class="player"><div id="empty" class="empty"><strong>Choose something to play</strong><p>Paste a YouTube or YouTube Music video or playlist address.</p></div><iframe id="frame" title="Embedded media player" hidden allow="autoplay; encrypted-media; picture-in-picture; fullscreen" allowfullscreen></iframe></div><div class="footer"><p id="status" class="status" role="status" aria-live="polite">Nothing loaded.</p><button id="platform" class="arcane-button arcane-button--secondary" type="button">Open platform</button></div></section>
|
|
4
4
|
<script type="module">const host=this,root=host.shadowRoot,form=root.querySelector('#loader'),input=root.querySelector('#mediaUrl'),frame=root.querySelector('#frame'),empty=root.querySelector('#empty'),status=root.querySelector('#status');const {parseYouTubeMedia,youtubeEmbedUrl}=await import('../modules/YouTubeMedia.js');const {createArcaneEventSource,projectArcaneDOMEvent}=await import('arcane-os/event-manager');const events=createArcaneEventSource(host,{source:'arcane.component.media-embed',eventTypes:['media-open-platform','media-load','media-error','media-embed-ready']}),lifecycleController=new AbortController();let platformUrl='https://www.youtube.com/',privacyEnhanced=false,destroyed=false,operationSequence=0;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
<link rel="stylesheet" href="./arcane/css/theme.css
|
|
2
|
-
<link rel="stylesheet" href="./arcane/css/primitives.css
|
|
1
|
+
<link rel="stylesheet" href="./arcane/css/theme.css">
|
|
2
|
+
<link rel="stylesheet" href="./arcane/css/primitives.css">
|
|
3
3
|
<style>
|
|
4
4
|
:host{
|
|
5
5
|
display:block;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
<link rel="stylesheet" href="./arcane/css/theme.css
|
|
1
|
+
<link rel="stylesheet" href="./arcane/css/theme.css"><link rel="stylesheet" href="./arcane/css/primitives.css">
|
|
2
2
|
<style>:host{display:block}.capture{display:grid;gap:var(--arcane-space-4)}.actions{display:grid;gap:var(--arcane-space-3);grid-template-columns:repeat(3,minmax(0,1fr))}.action{display:grid;gap:var(--arcane-space-2);padding:var(--arcane-space-4);text-align:left}.action strong{font-size:1.05rem}.action span{color:var(--arcane-muted);font-size:.85rem}.recording{align-items:center;display:flex;gap:var(--arcane-space-3);justify-content:space-between;padding:var(--arcane-space-3);border:1px solid var(--arcane-border);border-radius:var(--arcane-radius-medium)}.preview{display:grid;place-items:center;min-height:16rem;overflow:auto;background:var(--arcane-surface-muted);border:1px solid var(--arcane-border);border-radius:var(--arcane-radius-large)}.preview :where(img,video){display:block}.empty{color:var(--arcane-muted);text-align:center}.status{margin:0;color:var(--arcane-muted)}@media(max-width:44rem){.actions{grid-template-columns:1fr}}</style>
|
|
3
3
|
<section class="capture"><div class="actions"><button class="action arcane-card" type="button" data-capture="image"><strong>Screenshot</strong><span>Capture the selected display as PNG.</span></button><button class="action arcane-card" type="button" data-capture="video"><strong>Record video</strong><span>Record the selected display in a browser-supported video format.</span></button><button class="action arcane-card" type="button" data-capture="gif"><strong>Record GIF</strong><span>Record the selected display as an animated GIF.</span></button></div><div id="recording" class="recording" hidden><span id="recordingLabel">Recording…</span><button id="stop" class="arcane-button" type="button">Stop recording</button></div><div id="preview" class="preview"><div class="empty"><strong>No capture yet</strong><p>Your capture remains on this device unless you choose to save it.</p></div></div><p id="status" class="status" role="status" aria-live="polite">Choose a capture type. Your browser will ask which display to share.</p></section>
|
|
4
4
|
<script type="module">
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
<link rel="stylesheet" href="./arcane/css/layout.css
|
|
2
|
-
<link rel="stylesheet" href="./arcane/css/theme.css
|
|
3
|
-
<link rel="stylesheet" href="./arcane/css/primitives.css
|
|
1
|
+
<link rel="stylesheet" href="./arcane/css/layout.css">
|
|
2
|
+
<link rel="stylesheet" href="./arcane/css/theme.css">
|
|
3
|
+
<link rel="stylesheet" href="./arcane/css/primitives.css">
|
|
4
4
|
|
|
5
5
|
<style>
|
|
6
6
|
:host{
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
<link rel="stylesheet" href="./arcane/css/primitives.css
|
|
1
|
+
<link rel="stylesheet" href="./arcane/css/primitives.css">
|
|
2
2
|
<style>
|
|
3
3
|
:host{display:block;height:100%;min-height:18rem;--terminal-bg:var(--background,rgb(244, 246, 251));--terminal-fg:var(--text-color,rgb(23, 34, 56));--terminal-muted:var(--muted-text-color,rgb(95, 107, 130));--terminal-accent:var(--focus-color,rgb(118, 87, 213));--terminal-danger:var(--danger-color,rgb(165, 56, 56));--terminal-font:ui-monospace,"Cascadia Code","SFMono-Regular",Consolas,monospace;--terminal-font-size:14px;--terminal-line-height:1.55;--terminal-opacity:1}
|
|
4
4
|
*{box-sizing:border-box}.workspace{background:color-mix(in srgb,var(--terminal-bg) calc(var(--terminal-opacity)*100%),transparent);border:1px solid color-mix(in srgb,var(--terminal-accent) 20%,transparent);border-radius:.85rem;color:var(--terminal-fg);display:grid;grid-template-rows:auto auto minmax(0,1fr) auto;height:100%;overflow:visible;box-shadow:0 1.5rem 5rem rgba(0,0,0,.28)}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
<link rel="stylesheet" href="./arcane/css/primitives.css
|
|
1
|
+
<link rel="stylesheet" href="./arcane/css/primitives.css">
|
|
2
2
|
<style>
|
|
3
3
|
:host{display:block;min-width:0}.intro{display:grid;gap:var(--arcane-space-1)}.intro p{margin:0}.editor{display:grid;gap:var(--arcane-space-4)}.identity{display:grid;gap:var(--arcane-space-4);grid-template-columns:2fr 1fr}.colors{display:grid;gap:var(--arcane-space-3);grid-template-columns:repeat(auto-fit,minmax(11rem,1fr))}.color-field{align-items:center;display:grid;gap:.65rem;grid-template-columns:2.5rem minmax(0,1fr)}.color-field input{height:2.5rem;padding:.15rem;width:2.5rem}.color-field label{font-weight:650}.status{margin-right:auto;min-height:1.4em}.preview{border:1px solid var(--border-color);border-radius:var(--arcane-radius-medium);display:flex;gap:.6rem;padding:.8rem;background:var(--background);color:var(--text-color)}.preview span{border-radius:.4rem;padding:.5rem .7rem;background:var(--secondary-color)}.preview strong{border-radius:.4rem;padding:.5rem .7rem;background:var(--primary-color);color:var(--button-text-color)}@media(max-width:36rem){.identity{grid-template-columns:1fr}}
|
|
4
4
|
</style>
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
<link rel="stylesheet" href="./arcane/css/primitives.css
|
|
1
|
+
<link rel="stylesheet" href="./arcane/css/primitives.css">
|
|
2
2
|
<style>
|
|
3
3
|
:host{display:block;min-width:0}.toolbar{display:grid;gap:.75rem;padding:1rem;border-bottom:1px solid var(--border-color,#ccd4df)}.toolbar-row{display:flex;gap:.5rem}.toolbar input{min-width:0;width:100%}.filters{display:flex;flex-wrap:wrap;gap:.4rem}.filters button{overflow-wrap:anywhere}.list{display:grid}.thread{display:grid;gap:.35rem;width:100%;padding:1rem;border:0;border-bottom:1px solid var(--border-color,#ccd4df);color:inherit;background:transparent;text-align:left}.thread:hover,.thread[aria-current="true"]{background:var(--secondary-color,#e8edf4)}.thread:focus-visible{outline:.18rem solid var(--focus-color,#7657d5);outline-offset:-.2rem}.line{align-items:center;display:flex;flex-wrap:wrap;gap:.5rem;justify-content:space-between}.title{font-weight:750;overflow-wrap:anywhere}.preview{color:var(--muted-text-color,#607080);overflow-wrap:anywhere}.meta{align-items:center;display:flex;flex-wrap:wrap;gap:.4rem;font-size:.75rem}.badge{border:1px solid var(--border-color,#ccd4df);border-radius:999px;padding:.15rem .45rem;text-transform:uppercase}.unread{display:grid;place-items:center;min-width:1.4rem;height:1.4rem;border-radius:999px;color:var(--button-text-color,#fff);background:var(--focus-color,#7657d5);font-weight:800}.empty{padding:2rem;text-align:center}.empty p{color:var(--muted-text-color,#607080)}
|
|
4
4
|
</style>
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
<link rel="stylesheet" href="./arcane/css/layout.css
|
|
1
|
+
<link rel="stylesheet" href="./arcane/css/layout.css">
|
|
2
2
|
<style>
|
|
3
3
|
:host{
|
|
4
4
|
display:block;
|
|
@@ -138,7 +138,7 @@
|
|
|
138
138
|
{requestAIRuntimeIntent,subscribeAIRuntimeState},
|
|
139
139
|
{default:ContinuousVoiceCapture}
|
|
140
140
|
]=await Promise.all([
|
|
141
|
-
import('../modules/MD.js
|
|
141
|
+
import('../modules/MD.js'),
|
|
142
142
|
import('../modules/ComponentContracts.js'),
|
|
143
143
|
import('../modules/AIRuntimeState.js'),
|
|
144
144
|
import('../modules/ContinuousVoiceCapture.js')
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
<link rel="stylesheet" href="./arcane/css/theme.css
|
|
1
|
+
<link rel="stylesheet" href="./arcane/css/theme.css"><link rel="stylesheet" href="./arcane/css/primitives.css">
|
|
2
2
|
<style>:host{display:block}.widget{display:grid;gap:var(--arcane-space-4)}.current{align-items:center;display:grid;gap:var(--arcane-space-4);grid-template-columns:auto 1fr auto}.symbol{font-size:clamp(2.5rem,8vw,5rem);line-height:1}.temperature{font-size:clamp(2.2rem,7vw,4.5rem);font-weight:760;line-height:1}.location h2,.location p{margin:0}.location p,.details{color:var(--arcane-muted)}.details{display:grid;gap:var(--arcane-space-1);text-align:right}.forecast{display:grid;gap:var(--arcane-space-2);grid-template-columns:repeat(7,minmax(5.5rem,1fr));overflow:auto}.day{display:grid;gap:var(--arcane-space-2);padding:var(--arcane-space-3);text-align:center;background:var(--arcane-surface-muted);border:1px solid var(--arcane-border);border-radius:var(--arcane-radius-medium)}.day strong{white-space:nowrap}.day-symbol{font-size:1.8rem}.empty{padding:var(--arcane-space-6);text-align:center;color:var(--arcane-muted)}.footer{display:flex;align-items:center;justify-content:space-between;gap:var(--arcane-space-3)}@media(max-width:36rem){.current{grid-template-columns:auto 1fr}.details{grid-column:1/-1;text-align:left;grid-template-columns:repeat(3,1fr)}}</style>
|
|
3
3
|
<section class="widget arcane-card"><div id="empty" class="empty"><strong>Weather is ready for a location</strong><p>Search for a city or postal code to load current conditions and the forecast.</p></div><div id="content" hidden><div class="arcane-card__body current"><span id="symbol" class="symbol" aria-hidden="true"></span><div class="location"><h2 id="location" class="arcane-section-heading"></h2><p id="condition"></p><div><span id="temperature" class="temperature"></span></div></div><div class="details"><span id="feels"></span><span id="humidity"></span><span id="wind"></span></div></div><div id="forecast" class="arcane-card__body forecast"></div><footer class="arcane-card__footer footer"><span id="source" class="arcane-help"></span><button id="refresh" class="arcane-button arcane-button--secondary" type="button">Refresh</button></footer></div></section>
|
|
4
4
|
<script type="module">const host=this,root=host.shadowRoot,empty=root.querySelector('#empty'),content=root.querySelector('#content'),forecast=root.querySelector('#forecast');const {createArcaneEventSource,projectArcaneDOMEvent}=await import('arcane-os/event-manager');const events=createArcaneEventSource(host,{source:'arcane.component.weather-widget',eventTypes:['weather-refresh','weather-widget-ready']});let weather=null,destroyed=false;const conditions=new Map([[0,['Clear','☀️']],[1,['Mostly clear','🌤️']],[2,['Partly cloudy','⛅']],[3,['Overcast','☁️']],[45,['Fog','🌫️']],[48,['Freezing fog','🌫️']],[51,['Light drizzle','🌦️']],[53,['Drizzle','🌦️']],[55,['Heavy drizzle','🌧️']],[61,['Light rain','🌦️']],[63,['Rain','🌧️']],[65,['Heavy rain','🌧️']],[71,['Light snow','🌨️']],[73,['Snow','🌨️']],[75,['Heavy snow','❄️']],[80,['Rain showers','🌦️']],[81,['Rain showers','🌧️']],[82,['Heavy showers','⛈️']],[95,['Thunderstorm','⛈️']],[96,['Thunderstorm with hail','⛈️']],[99,['Severe thunderstorm','⛈️']]]);
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
<link rel="stylesheet" href="./arcane/css/theme.css
|
|
2
|
-
<link rel="stylesheet" href="./arcane/css/primitives.css
|
|
1
|
+
<link rel="stylesheet" href="./arcane/css/theme.css">
|
|
2
|
+
<link rel="stylesheet" href="./arcane/css/primitives.css">
|
|
3
3
|
<style>
|
|
4
4
|
:host{display:block;height:100%;min-height:30rem}
|
|
5
5
|
.navigator{display:grid;grid-template-rows:auto 1fr auto;height:100%;min-height:30rem}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import Is from 'strong-type';
|
|
2
2
|
const is=new Is(false);
|
|
3
3
|
|
|
4
|
-
import * as ArcaneNetworkPolicy from './ArcaneNetworkPolicy.js
|
|
4
|
+
import * as ArcaneNetworkPolicy from './ArcaneNetworkPolicy.js';
|
|
5
5
|
|
|
6
6
|
function completeText(value,fallback){
|
|
7
7
|
return is.string(value)&&value.length>0?value:fallback;
|
|
@@ -3,13 +3,13 @@ const is=new Is(false);
|
|
|
3
3
|
|
|
4
4
|
import { arcaneLogging } from 'arcane-os/logging';
|
|
5
5
|
import ArcaneCommunicationBridge from './ArcaneCommunicationBridge.js';
|
|
6
|
-
import CommunicationHub from './CommunicationHub.js
|
|
6
|
+
import CommunicationHub from './CommunicationHub.js';
|
|
7
7
|
import CommunicationPreferences from './CommunicationPreferences.js';
|
|
8
8
|
import {loadAndApplyTheme} from './ThemeManager.js';
|
|
9
9
|
import {
|
|
10
10
|
inspectMessageRecords,
|
|
11
11
|
unavailableMessageInspection
|
|
12
|
-
} from './MessageAdvisory.js
|
|
12
|
+
} from './MessageAdvisory.js';
|
|
13
13
|
|
|
14
14
|
export const COMMUNICATION_APP_CONTROLLER_ERROR_CODES={
|
|
15
15
|
destroyed:'ARCANE_COMMUNICATION_APP_CONTROLLER_DESTROYED'
|
|
@@ -4,7 +4,7 @@ const is=new Is(false);
|
|
|
4
4
|
import {createArcaneEventSource} from 'arcane-os/event-manager';
|
|
5
5
|
import CommunicationMessage from '../entities/CommunicationMessage.js';
|
|
6
6
|
import CommunicationThread from '../entities/CommunicationThread.js';
|
|
7
|
-
import CommunicationProviderRegistry from './CommunicationProviderRegistry.js
|
|
7
|
+
import CommunicationProviderRegistry from './CommunicationProviderRegistry.js';
|
|
8
8
|
|
|
9
9
|
const communicationHubEvents={
|
|
10
10
|
refreshCancelled:'communications-refresh-cancelled',
|
|
@@ -4,7 +4,7 @@ const is=new Is(false);
|
|
|
4
4
|
import {
|
|
5
5
|
CONVERSATION_ACTION_ITEM_BASES,
|
|
6
6
|
normalizeRememberedConversationActions
|
|
7
|
-
} from './ConversationActionItems.js
|
|
7
|
+
} from './ConversationActionItems.js';
|
|
8
8
|
|
|
9
9
|
const DEFAULT_TOOL_NAME='prepare_conversation_closing_report';
|
|
10
10
|
const TOOL_NAME_PATTERN=/^[a-z][a-z0-9_]*$/;
|
|
@@ -11,7 +11,7 @@ import {
|
|
|
11
11
|
const DEFAULT_DELAY_MS=2_000;
|
|
12
12
|
const LEDGER_STORAGE_KEY='arcane-global-errors-v1';
|
|
13
13
|
const HANDLER_MARKER=Symbol.for('arcane.global-errors.handler');
|
|
14
|
-
const DEVELOPER_MODAL_HREF=new URL('../components/modal.html
|
|
14
|
+
const DEVELOPER_MODAL_HREF=new URL('../components/modal.html',import.meta.url).href;
|
|
15
15
|
const ERROR_EVENT_TYPES={
|
|
16
16
|
browserErrorCaptured:'arcane-error-captured',
|
|
17
17
|
unhandledRejectionCaptured:'arcane-unhandled-rejection-captured'
|