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/index.mjs CHANGED
@@ -1,7 +1,6 @@
1
1
  export {
2
2
  ARCANE_MACHINE_BUNDLE_VERSION,
3
3
  ARCANE_PROTOCOL,
4
- ARCANE_UPSTREAM_COMMIT,
5
4
  ARCANE_UPSTREAM_REPOSITORY,
6
5
  CLI_EVENT_PROTOCOL,
7
6
  CLI_NAME,
@@ -63,7 +62,6 @@ export {
63
62
  PLAYBACK_RECORD_EVENT,
64
63
  PLAYBACK_STARTED_EVENT,
65
64
  projectArcaneDOMEvent,
66
- TIME_TRAVEL_OVERFLOW_EVENT,
67
65
  TIME_TRAVEL_SEEK_EVENT
68
66
  } from './event-manager.mjs';
69
67
  export {runProcess} from './process.mjs';
@@ -102,8 +100,6 @@ export {
102
100
  export {
103
101
  assertIntegratedNativeToolchain,
104
102
  assertIntegratedPortableToolchain,
105
- assertNativeApplicationToolchainCompatibility,
106
- assertPortableToolchainCompatibility,
107
103
  buildApplication,
108
104
  bundleApplication,
109
105
  checkApplication,
@@ -116,6 +112,7 @@ export {
116
112
  doctorNativeTarget,
117
113
  executeOperation,
118
114
  initializeApplication,
115
+ upgradeApplication,
119
116
  packageApplication,
120
117
  planApplication,
121
118
  prepareNativeTarget,
@@ -130,12 +127,21 @@ export {
130
127
  } from './toolchain.mjs';
131
128
  export {createWorkspace,initWorkspace} from './scaffold.mjs';
132
129
  export {
133
- authenticateRuntimeReceipt,
134
130
  getSdkRoot,
131
+ listRuntimeFiles,
135
132
  loadRuntimeRelease,
136
- readVerifiedRuntimeFile,
137
- verifyRuntime
133
+ readRuntimeFile
138
134
  } from './runtime.mjs';
135
+ export {
136
+ getSdkBrowserRuntimeRoot,
137
+ listSdkBrowserRuntimeFiles,
138
+ loadSdkBrowserRuntimeRelease,
139
+ readSdkBrowserRuntimeFile
140
+ } from './sdk-browser-runtime.mjs';
141
+ export {
142
+ materializeWorkspaceRuntime,
143
+ materializeWorkspaceRuntimeContent
144
+ } from './workspace-runtime.mjs';
139
145
  export {
140
146
  discoverApps,
141
147
  inspectWorkspaceProfile,
@@ -145,11 +151,10 @@ export {
145
151
  } from './workspace.mjs';
146
152
  export {materializeInstalledSdkRuntime} from './installed-sdk-runtime.mjs';
147
153
  export {startDevServer} from './dev-server.mjs';
154
+ export {startSourceExampleServer} from './source-server.mjs';
148
155
  export {
149
156
  NATIVE_BUILD_PLAN_PROTOCOL,
150
157
  NATIVE_BUILDER_PROTOCOL,
151
- assertNativeToolchainCompatibility,
152
- authenticateNativeBuildPlan,
153
158
  createNativeBuildPlan,
154
159
  executeNativeBuildPlan,
155
160
  validateNativeBuilder
@@ -157,21 +162,15 @@ export {
157
162
  export {
158
163
  APP_DESCRIPTOR_NAME,
159
164
  APP_DESCRIPTOR_SCHEMA_VERSION,
160
- appDescriptorSha256,
161
165
  loadAppDescriptor,
162
166
  projectNativeDescriptor,
163
167
  projectPackageManifest,
164
168
  validateAppDescriptor
165
169
  } from './app-descriptor.mjs';
166
170
  export {
167
- authenticateAppReleaseAuthority,
168
- authenticateAppReleaseReceipt,
169
- authenticateSharedPayloadSnapshot,
170
171
  discoverApps as discoverPackagerApps,
171
172
  inspectApp,
172
173
  packageApp,
173
- prepareSharedPayloadSnapshot,
174
- readVerifiedAppReleaseFile,
175
174
  verifyApp
176
175
  } from './packager/core.mjs';
177
176
  export {
@@ -179,7 +178,6 @@ export {
179
178
  APP_BUNDLE_EXTENSION,
180
179
  APP_BUNDLE_FORMAT,
181
180
  APP_BUNDLE_KIND,
182
- APP_BUNDLE_LIMITS,
183
181
  APP_BUNDLE_MANIFEST_NAME,
184
182
  APP_BUNDLE_RELEASE_PATH,
185
183
  APP_BUNDLE_SCHEMA_VERSION,
@@ -1,8 +1,7 @@
1
- import {lstat,readFile,realpath} from 'node:fs/promises';
1
+ import {readFile,realpath,stat} from 'node:fs/promises';
2
2
  import path from 'node:path';
3
- import {verifyRuntime} from './runtime.mjs';
4
- import {verifySdkBrowserRuntime} from './sdk-browser-runtime.mjs';
5
- import {materializeWorkspaceRuntime} from './workspace-runtime.mjs';
3
+ import {materializeWorkspaceRuntimeContent} from './workspace-runtime.mjs';
4
+ import {withWorkspaceOperationLock} from './workspace-operation-lock.mjs';
6
5
  import {
7
6
  resolveInstalledSdkInstallation,
8
7
  resolveSdkPackageDeclaration
@@ -21,92 +20,71 @@ function throwIfAborted(signal){
21
20
  throw error;
22
21
  }
23
22
 
24
- function samePath(left,right){
25
- const normalize=value=>path.resolve(value).replaceAll('\\','/');
26
- const a=normalize(left);
27
- const b=normalize(right);
28
- return process.platform==='win32'?a.toLowerCase()===b.toLowerCase():a===b;
29
- }
30
-
31
23
  async function canonicalWorkspaceRoot(workspaceRoot){
32
24
  if(typeof workspaceRoot!=='string'||!workspaceRoot.trim()){
33
25
  fail('workspaceRoot is required to materialize an installed SDK runtime.');
34
26
  }
35
27
  const requested=path.resolve(workspaceRoot);
36
28
  let info;
37
- try{info=await lstat(requested);}
29
+ try{info=await stat(requested);}
38
30
  catch(error){
39
31
  if(error?.code==='ENOENT')fail(`Workspace root does not exist: ${requested}.`);
40
32
  throw error;
41
33
  }
42
- if(info.isSymbolicLink()||!info.isDirectory()){
43
- fail(`Workspace root must be a real directory: ${requested}.`);
44
- }
45
- const canonical=await realpath(requested);
46
- if(!samePath(requested,canonical)){
47
- fail(`Workspace root must not resolve through another path: ${requested}.`);
48
- }
49
- return canonical;
34
+ if(!info.isDirectory())fail(`Workspace root must be a directory: ${requested}.`);
35
+ return realpath(requested);
50
36
  }
51
37
 
52
38
  async function readRootPackage(workspaceRoot){
53
39
  const packagePath=path.join(workspaceRoot,'package.json');
54
- let info;
55
- try{info=await lstat(packagePath);}
40
+ let document;
41
+ try{document=JSON.parse(await readFile(packagePath,'utf8'));}
56
42
  catch(error){
57
43
  if(error?.code==='ENOENT')fail(`Workspace package.json is missing: ${packagePath}.`);
58
- throw error;
59
- }
60
- if(info.isSymbolicLink()||!info.isFile()){
61
- fail('Workspace package.json must be a real file.');
44
+ fail(`Workspace package.json is not valid JSON: ${error.message}`);
62
45
  }
63
- try{return JSON.parse(await readFile(packagePath,'utf8'));}
64
- catch(error){fail(`Workspace package.json is not valid JSON: ${error.message}`);}
46
+ return document;
47
+ }
48
+
49
+ async function installedSdkAuthority(canonicalRoot,{sdkPackageSource}={}){
50
+ const declaration=resolveSdkPackageDeclaration(
51
+ await readRootPackage(canonicalRoot),
52
+ sdkPackageSource===undefined?{}:{packageSource:sdkPackageSource}
53
+ );
54
+ const installation=await resolveInstalledSdkInstallation(canonicalRoot,declaration);
55
+ return {declaration,installation};
65
56
  }
66
57
 
67
- /**
68
- * Resolves the workspace's one exact installed Arcane SDK declaration, verifies
69
- * both physical runtime receipts, and materializes their dynamic inventories.
70
- */
71
58
  export async function materializeInstalledSdkRuntime({
72
59
  workspaceRoot,
73
60
  sdkPackageSource,
61
+ workspaceOperationLease,
74
62
  signal,
75
63
  onEvent
76
64
  }={}){
77
65
  throwIfAborted(signal);
78
66
  const canonicalRoot=await canonicalWorkspaceRoot(workspaceRoot);
79
- const rootPackage=await readRootPackage(canonicalRoot);
80
- const declaration=resolveSdkPackageDeclaration(rootPackage,
81
- sdkPackageSource===undefined?{}:{packageSource:sdkPackageSource});
82
- const installation=await resolveInstalledSdkInstallation(canonicalRoot,declaration);
83
- const [runtimeReceipt,sdkBrowserRuntimeReceipt]=await Promise.all([
84
- verifyRuntime({
85
- runtimeRoot:installation.runtimeRoot,
86
- signal,
87
- onEvent
88
- }),
89
- verifySdkBrowserRuntime({
90
- browserRuntimeRoot:installation.browserRuntimeRoot,
91
- signal,
92
- onEvent
93
- })
94
- ]);
95
- const workspaceRuntimeReceipt=await materializeWorkspaceRuntime({
67
+ return withWorkspaceOperationLock({
96
68
  workspaceRoot:canonicalRoot,
97
- runtimeRoot:installation.runtimeRoot,
98
- runtimeReceipt,
99
- browserRuntimeRoot:installation.browserRuntimeRoot,
100
- sdkBrowserRuntimeReceipt,
69
+ operation:'installed-sdk-runtime',
101
70
  signal,
102
- onEvent
103
- });
104
- return Object.freeze({
105
- schemaVersion:1,
106
- kind:'arcane-installed-sdk-runtime-materialization',
107
- installation,
108
- runtimeReceipt,
109
- sdkBrowserRuntimeReceipt,
110
- workspaceRuntimeReceipt
71
+ onEvent,
72
+ workspaceOperationLease
73
+ },async()=>{
74
+ const authority=await installedSdkAuthority(canonicalRoot,{sdkPackageSource});
75
+ const workspaceRuntime=await materializeWorkspaceRuntimeContent({
76
+ workspaceRoot:canonicalRoot,
77
+ runtimeRoot:authority.installation.runtimeRoot,
78
+ browserRuntimeRoot:authority.installation.browserRuntimeRoot,
79
+ signal,
80
+ onEvent
81
+ });
82
+ return {
83
+ schemaVersion:1,
84
+ kind:'arcane-installed-sdk-runtime-materialization',
85
+ status:'materialized',
86
+ installation:authority.installation,
87
+ workspaceRuntime
88
+ };
111
89
  });
112
90
  }