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
@@ -7,9 +7,9 @@ import {
7
7
  unavailableMessageInspection
8
8
  } from './MessageAdvisory.js?v=3';
9
9
 
10
- export const COMMUNICATION_APP_CONTROLLER_ERROR_CODES=Object.freeze({
10
+ export const COMMUNICATION_APP_CONTROLLER_ERROR_CODES={
11
11
  destroyed:'ARCANE_COMMUNICATION_APP_CONTROLLER_DESTROYED'
12
- });
12
+ };
13
13
 
14
14
  function communicationAbortError(reason){
15
15
  if(
@@ -570,11 +570,7 @@ export default class CommunicationAppController{
570
570
  return;
571
571
  }
572
572
  if(service.externalUrl){
573
- const opened=globalThis.open(
574
- service.externalUrl,
575
- '_blank',
576
- 'noopener,noreferrer'
577
- );
573
+ const opened=globalThis.open(service.externalUrl,'_blank');
578
574
  if(!opened){
579
575
  this.elements.settings.setStatus(
580
576
  `Open ${service.externalUrl} to continue.`
@@ -3,14 +3,16 @@ import {
3
3
  projectArcaneDOMEvent
4
4
  } from 'arcane-os/event-manager';
5
5
 
6
+ const completeValue=(value)=>value;
7
+
6
8
  const own=(value,key)=>Object.prototype.hasOwnProperty.call(value,key);
7
9
 
8
- const STT_ACTIVATION_EVENT_TYPES=Object.freeze({
10
+ const STT_ACTIVATION_EVENT_TYPES=completeValue({
9
11
  error:'speech-stt-activation-error',
10
12
  request:'speech-stt-activation-request'
11
13
  });
12
14
 
13
- const STT_ACTIVATION_ERROR_CODES=Object.freeze({
15
+ const STT_ACTIVATION_ERROR_CODES=completeValue({
14
16
  buttonInvalid:'ARCANE_STT_ACTIVATION_BUTTON_INVALID',
15
17
  buttonListenerFailed:'ARCANE_STT_ACTIVATION_BUTTON_LISTENER_FAILED',
16
18
  domProjectionUnavailable:'ARCANE_STT_ACTIVATION_DOM_PROJECTION_UNAVAILABLE',
@@ -22,7 +24,7 @@ const STT_ACTIVATION_ERROR_CODES=Object.freeze({
22
24
  requestRejected:'ARCANE_STT_ACTIVATION_REQUEST_REJECTED'
23
25
  });
24
26
 
25
- const STT_ACTIVATION_REASONS=Object.freeze({
27
+ const STT_ACTIVATION_REASONS=completeValue({
26
28
  explicitRequest:'explicit-request',
27
29
  presentationCallbackThrew:'activation-presentation-callback-threw',
28
30
  requestRejected:'activation-request-rejected'
@@ -152,7 +154,7 @@ function stringRecord(value,defaults,label){
152
154
  return normalized;
153
155
  }
154
156
 
155
- const CHART_LABELS=Object.freeze({
157
+ const CHART_LABELS=completeValue({
156
158
  empty:'No data yet.',
157
159
  hover:'Point under cursor',
158
160
  keyboard:'Keyboard-selected point',
@@ -335,7 +337,7 @@ function normalizeDashboardDefinitions(values=[]){
335
337
  );
336
338
  }
337
339
 
338
- const DASHBOARD_LABELS=Object.freeze({
340
+ const DASHBOARD_LABELS=completeValue({
339
341
  description:'Choose which charts appear on your dashboard.',
340
342
  empty:'No dashboard items are available.',
341
343
  heading:'Configure Dashboard',
@@ -469,9 +471,9 @@ function createSTTActivationController({
469
471
 
470
472
  function visibleError(error,fallback){
471
473
  const message=typeof error?.message==='string'
472
- ?error.message.trim()
474
+ ?error.message
473
475
  :'';
474
- return (message||fallback).slice(0,240);
476
+ return message||fallback;
475
477
  }
476
478
 
477
479
  function cancellation(error){
@@ -541,11 +543,7 @@ function createSTTActivationController({
541
543
  if(!progress){
542
544
  return fallback;
543
545
  }
544
- const amount=progress.total===null
545
- ?`${progress.completed} ${progress.unit}`
546
- :`${progress.completed} of ${progress.total} ${progress.unit}`;
547
- const heartbeat=progress.heartbeat?', active heartbeat':'';
548
- return `${progress.phase}, ${amount}${heartbeat}`;
546
+ return progress.phase;
549
547
  }
550
548
 
551
549
  function status(){
@@ -588,14 +586,14 @@ function createSTTActivationController({
588
586
  }
589
587
  const generation=++requestGeneration;
590
588
  requestError='';
591
- const intent=Object.freeze(
589
+ const intent=completeValue(
592
590
  {
593
591
  role:'stt',
594
592
  action:nextAction,
595
593
  reason:'user'
596
594
  }
597
595
  );
598
- const activationRequest=Object.freeze({intent,state:role});
596
+ const activationRequest=completeValue({intent,state:role});
599
597
  const operationId=
600
598
  `${events.instanceId}:stt-activation:${(++operationSequence).toString(36)}`;
601
599
  let requestInvoked=false;
@@ -668,7 +666,7 @@ function createSTTActivationController({
668
666
  :STT_ACTIVATION_REASONS.presentationCallbackThrew;
669
667
  const errorPublication=events.dispatch(
670
668
  STT_ACTIVATION_EVENT_TYPES.error,
671
- Object.freeze(
669
+ completeValue(
672
670
  {
673
671
  request:activationRequest,
674
672
  error,
@@ -774,7 +772,7 @@ function createSTTActivationController({
774
772
  error
775
773
  );
776
774
  }
777
- return Object.freeze(
775
+ return completeValue(
778
776
  {
779
777
  get action(){return action();},
780
778
  get error(){return requestError;},
@@ -791,7 +789,7 @@ function createSTTActivationController({
791
789
  );
792
790
  }
793
791
 
794
- const VOICE_LABELS=Object.freeze({
792
+ const VOICE_LABELS=completeValue({
795
793
  complete:'Complete Transcription',
796
794
  description:'Record one or more segments. Each segment is transcribed after you press Stop.',
797
795
  empty:'Your transcription will appear here after you stop recording.',
@@ -800,7 +798,7 @@ const VOICE_LABELS=Object.freeze({
800
798
  transcription:'Voice transcription'
801
799
  });
802
800
 
803
- const VOICE_MESSAGES=Object.freeze({
801
+ const VOICE_MESSAGES=completeValue({
804
802
  cancelled:'Transcription canceled.',
805
803
  complete:'Complete.',
806
804
  completeError:'Unable to complete this transcription.',
@@ -893,26 +891,26 @@ function normalizeVoiceOptions(input={},previous={}){
893
891
  }
894
892
 
895
893
  function appendTranscription(current='',segment='',separator='\n\n'){
896
- current=text(current,'',true).trim();
897
- segment=text(segment,'',true).trim();
898
- if(!segment){
894
+ current=text(current,'',true);
895
+ segment=text(segment,'',true);
896
+ if(segment.length===0){
899
897
  return current;
900
898
  }
901
- return current?`${current}${separator}${segment}`:segment;
899
+ return current.length>0?`${current}${separator}${segment}`:segment;
902
900
  }
903
901
 
904
- const MARKDOWN_FORMATS=Object.freeze([
905
- Object.freeze({id:'heading',label:'Heading',title:'Heading',prefix:'## ',placeholder:'Heading'}),
906
- Object.freeze({id:'bold',label:'B',title:'Bold',before:'**',after:'**',placeholder:'bold text'}),
907
- Object.freeze({id:'italic',label:'I',title:'Italic',before:'_',after:'_',placeholder:'italic text'}),
908
- Object.freeze({id:'strike',label:'S',title:'Strikethrough',before:'~~',after:'~~',placeholder:'strikethrough text'}),
909
- Object.freeze({id:'code',label:'Code',title:'Inline code',before:'`',after:'`',placeholder:'code'}),
910
- Object.freeze({id:'link',label:'Link',title:'Link',before:'[',after:'](https://)',placeholder:'link text'}),
911
- Object.freeze({id:'quote',label:'Quote',title:'Quote',prefix:'> ',placeholder:'Quote'}),
912
- Object.freeze({id:'list',label:'List',title:'Bulleted list',prefix:'- ',placeholder:'List item'})
902
+ const MARKDOWN_FORMATS=completeValue([
903
+ completeValue({id:'heading',label:'Heading',title:'Heading',prefix:'## ',placeholder:'Heading'}),
904
+ completeValue({id:'bold',label:'B',title:'Bold',before:'**',after:'**',placeholder:'bold text'}),
905
+ completeValue({id:'italic',label:'I',title:'Italic',before:'_',after:'_',placeholder:'italic text'}),
906
+ completeValue({id:'strike',label:'S',title:'Strikethrough',before:'~~',after:'~~',placeholder:'strikethrough text'}),
907
+ completeValue({id:'code',label:'Code',title:'Inline code',before:'`',after:'`',placeholder:'code'}),
908
+ completeValue({id:'link',label:'Link',title:'Link',before:'[',after:'](https://)',placeholder:'link text'}),
909
+ completeValue({id:'quote',label:'Quote',title:'Quote',prefix:'> ',placeholder:'Quote'}),
910
+ completeValue({id:'list',label:'List',title:'Bulleted list',prefix:'- ',placeholder:'List item'})
913
911
  ]);
914
912
 
915
- const MARKDOWN_LABELS=Object.freeze({
913
+ const MARKDOWN_LABELS=completeValue({
916
914
  bodyPlaceholder:'Write in Markdown...',
917
915
  emptyError:'Write content before saving.',
918
916
  preview:'Markdown preview',