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
package/src/cli/main.mjs CHANGED
@@ -45,7 +45,7 @@ const FLAG_OPTIONS=new Set([
45
45
  const REPORTABLE_COMMANDS=new Set([
46
46
  'build','bundle','check','dev','doctor','help','import-map','init','mail',
47
47
  'native-doctor','native-prepare','new','package','repo','run','targets','test',
48
- 'update-check','verify','verify-bundle','version'
48
+ 'update-check','upgrade','verify','verify-bundle','version'
49
49
  ]);
50
50
 
51
51
  export const HELP_TEXT=`Arcane OS application SDK ${SDK_VERSION}
@@ -53,6 +53,7 @@ export const HELP_TEXT=`Arcane OS application SDK ${SDK_VERSION}
53
53
  Usage:
54
54
  ${CLI_NAME} new <id> [--path <directory>] [--display-name <name>] [--target <target>] [--git]
55
55
  ${CLI_NAME} init [id] [--workspace <directory>] [--display-name <name>] [--target <target>]
56
+ ${CLI_NAME} upgrade [--workspace <directory>] [--app <id>]
56
57
  ${CLI_NAME} doctor [--workspace <directory>] [--arcane-root <directory>]
57
58
  ${CLI_NAME} import-map [--workspace <directory>] [--app <id>]
58
59
  ${CLI_NAME} dev [--app <id>] [--host 127.0.0.1] [--port 8000] [--sdk-runtime-source <sdk-root>]
@@ -187,13 +188,10 @@ function readRequestTimeout(value,defaultValue){
187
188
  return timeout;
188
189
  }
189
190
 
190
- const MAX_MAIL_SECRET_BYTES=8_192;
191
- const MAX_MAIL_REPORT_BYTES=52*1024*1024;
192
-
193
191
  function normalizedSecret(value){
194
192
  const secret=String(value??'').trim();
195
- if(!secret||Buffer.byteLength(secret,'utf8')>MAX_MAIL_SECRET_BYTES){
196
- usage(`Mail credential input must contain 1-${MAX_MAIL_SECRET_BYTES} UTF-8 bytes.`);
193
+ if(!secret){
194
+ usage('Mail credential input must not be empty.');
197
195
  }
198
196
  return secret;
199
197
  }
@@ -201,7 +199,6 @@ function normalizedSecret(value){
201
199
  function readPipedMailSecret(input,signal){
202
200
  return new Promise((resolve,reject)=>{
203
201
  const chunks=[];
204
- let byteLength=0;
205
202
  let settled=false;
206
203
 
207
204
  const cleanup=function cleanupMailSecretRead(){
@@ -217,16 +214,7 @@ function readPipedMailSecret(input,signal){
217
214
  callback(value);
218
215
  };
219
216
  const onData=function collectMailSecretChunk(chunk){
220
- const bytes=Buffer.isBuffer(chunk)?chunk:Buffer.from(chunk);
221
- byteLength+=bytes.byteLength;
222
- if(byteLength>MAX_MAIL_SECRET_BYTES+2){
223
- finish(reject,new ArcaneError(
224
- ERROR_CODES.usage,
225
- `Mail credential input cannot exceed ${MAX_MAIL_SECRET_BYTES} UTF-8 bytes.`
226
- ));
227
- return;
228
- }
229
- chunks.push(bytes);
217
+ chunks.push(Buffer.isBuffer(chunk)?chunk:Buffer.from(chunk));
230
218
  };
231
219
  const onEnd=function finishPipedMailSecret(){
232
220
  try{
@@ -310,10 +298,7 @@ function readMaskedMailSecret(input,output,signal,label,stdinOption){
310
298
  continue;
311
299
  }
312
300
  if(character>=' '&&character!=='\u007f'){
313
- const candidate=secret+character;
314
- if(Buffer.byteLength(candidate,'utf8')<=MAX_MAIL_SECRET_BYTES){
315
- secret=candidate;
316
- }
301
+ secret+=character;
317
302
  }
318
303
  }
319
304
  };
@@ -340,7 +325,6 @@ export function readMailSecretInput({input=process.stdin,output=process.stderr,
340
325
  function readPipedMailReport(input,signal){
341
326
  return new Promise((resolve,reject)=>{
342
327
  const chunks=[];
343
- let byteLength=0;
344
328
  let settled=false;
345
329
 
346
330
  const cleanup=function cleanupMailReportRead(){
@@ -356,16 +340,7 @@ function readPipedMailReport(input,signal){
356
340
  callback(value);
357
341
  };
358
342
  const onData=function collectMailReportChunk(chunk){
359
- const bytes=Buffer.isBuffer(chunk)?chunk:Buffer.from(chunk);
360
- byteLength+=bytes.byteLength;
361
- if(byteLength>MAX_MAIL_REPORT_BYTES){
362
- finish(reject,new ArcaneError(
363
- ERROR_CODES.usage,
364
- `Mail report input cannot exceed ${MAX_MAIL_REPORT_BYTES} UTF-8 bytes.`
365
- ));
366
- return;
367
- }
368
- chunks.push(bytes);
343
+ chunks.push(Buffer.isBuffer(chunk)?chunk:Buffer.from(chunk));
369
344
  };
370
345
  const onEnd=function finishPipedMailReport(){
371
346
  try{
@@ -468,6 +443,9 @@ function operationOptions(command,parsed,cwd){
468
443
  if(flags.has('overwrite')&&command!=='bundle'){
469
444
  usage('--overwrite is supported only by bundle.');
470
445
  }
446
+ if(flags.has('skip-tests')&&command!=='check'){
447
+ usage('--skip-tests is supported only by check.');
448
+ }
471
449
  const mailOnlyOptions=['profile','from','origin','allow-to','report-key','request-timeout'];
472
450
  if(command!=='mail'&&mailOnlyOptions.some(name=>values[name]!==undefined)){
473
451
  usage(`Mail options are supported only by the mail command.`);
@@ -515,6 +493,10 @@ function operationOptions(command,parsed,cwd){
515
493
  noExtraPositionals(command,positionals);
516
494
  return common;
517
495
  }
496
+ if(command==='upgrade'){
497
+ noExtraPositionals(command,positionals);
498
+ return common;
499
+ }
518
500
  if(command==='dev'){
519
501
  noExtraPositionals(command,positionals);
520
502
  return {
@@ -719,28 +701,28 @@ function operationOptions(command,parsed,cwd){
719
701
  usage(`Unknown command. Run ${CLI_NAME} --help for usage.`);
720
702
  }
721
703
 
722
- const NATIVE_REQUESTS=Object.freeze({
723
- 'windows-x64':Object.freeze({
704
+ const NATIVE_REQUESTS={
705
+ 'windows-x64':{
724
706
  platform:'windows',architecture:'x64',defaultFormat:'exe',formats:new Set(['exe']),
725
707
  defaultSigning:'unsigned-local-test',defaultProfileId:null,
726
708
  signingModes:new Set(['unsigned-local-test'])
727
- }),
728
- 'linux-x64':Object.freeze({
709
+ },
710
+ 'linux-x64':{
729
711
  platform:'linux',architecture:'x64',defaultFormat:'deb',formats:new Set(['deb']),
730
712
  defaultSigning:'unsigned-local-test',defaultProfileId:null,
731
713
  signingModes:new Set(['unsigned-local-test'])
732
- }),
733
- 'linux-arm64':Object.freeze({
714
+ },
715
+ 'linux-arm64':{
734
716
  platform:'linux',architecture:'arm64',defaultFormat:'deb',formats:new Set(['deb']),
735
717
  defaultSigning:'unsigned-local-test',defaultProfileId:null,
736
718
  signingModes:new Set(['unsigned-local-test'])
737
- }),
738
- 'android-arm64':Object.freeze({
719
+ },
720
+ 'android-arm64':{
739
721
  platform:'android',architecture:'arm64',defaultFormat:'apk',formats:new Set(['apk']),
740
722
  defaultSigning:'development',defaultProfileId:'arcane-android-development-v1',
741
723
  signingModes:new Set(['development'])
742
- })
743
- });
724
+ }
725
+ };
744
726
 
745
727
  function portableRequestDefinition(){
746
728
  const platform=process.platform==='win32'?'windows':process.platform;
@@ -781,13 +763,13 @@ export function createNativeTargetRequest({target,format,signing}={}){
781
763
  +`Expected ${[...definition.signingModes].join(', ')}.`
782
764
  );
783
765
  }
784
- return Object.freeze({
766
+ return {
785
767
  target,
786
768
  platform:definition.platform,
787
769
  architecture:definition.architecture,
788
770
  format:selectedFormat,
789
- signing:Object.freeze({mode:signingMode,profileId:definition.defaultProfileId})
790
- });
771
+ signing:{mode:signingMode,profileId:definition.defaultProfileId}
772
+ };
791
773
  }
792
774
 
793
775
  async function pairNativeProvider(command,options,loadProvider,{signal,onEvent}={}){
@@ -811,7 +793,6 @@ async function pairNativeProvider(command,options,loadProvider,{signal,onEvent}=
811
793
  return {
812
794
  ...options,
813
795
  nativeBuilder:loaded.nativeBuilder,
814
- providerGeneration:loaded.providerGeneration,
815
796
  toolchainRoot:loaded.toolchainRoot,
816
797
  targetRequest
817
798
  };
package/src/constants.mjs CHANGED
@@ -14,18 +14,17 @@ export const ARCANE_PROTOCOL='arcane/1';
14
14
  export const CLI_EVENT_PROTOCOL='arcane-cli-events/1';
15
15
  export const TARGET_ADAPTER_PROTOCOL='arcane-target-adapter/1';
16
16
  export const ARCANE_MACHINE_BUNDLE_VERSION='0.8.12';
17
- export const ARCANE_UPSTREAM_COMMIT='c540014afe69f14cf5ae60493b7295f36dbcec64';
18
17
  export const ARCANE_UPSTREAM_REPOSITORY='https://github.com/TheWizardNexus/ARCANE-OS.git';
19
18
 
20
19
  export const SDK_ROOT=path.resolve(path.dirname(fileURLToPath(import.meta.url)),'..');
21
20
  export const RUNTIME_ROOT=path.join(SDK_ROOT,'runtime');
22
21
 
23
- export const OUTPUT_MODES=Object.freeze(['human','json','ndjson']);
24
- export const TARGET_IDS=Object.freeze([
22
+ export const OUTPUT_MODES=['human','json','ndjson'];
23
+ export const TARGET_IDS=[
25
24
  'browser',
26
25
  'portable',
27
26
  'windows-x64',
28
27
  'linux-x64',
29
28
  'linux-arm64',
30
29
  'android-arm64'
31
- ]);
30
+ ];