arcane-os 0.1.0-dev.5
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 +154 -0
- package/COMMERCIAL-LICENSE.md +13 -0
- package/LICENSE +661 -0
- package/NOTICE +70 -0
- package/README.md +448 -0
- package/bin/arcane-test.mjs +741 -0
- package/bin/arcane.mjs +5 -0
- package/docs/architecture.md +234 -0
- package/docs/compatibility.md +36 -0
- package/docs/event-manager.md +166 -0
- package/docs/platform-targets.md +108 -0
- package/docs/publishing.md +203 -0
- package/docs/reference/README.md +117 -0
- package/docs/reference/arcane-ollama.md +288 -0
- package/docs/reference/availability-and-normalization.md +123 -0
- package/docs/reference/behavioral-testing.md +86 -0
- package/docs/reference/cli.md +569 -0
- package/docs/reference/core/README.md +62 -0
- package/docs/reference/core/arcane-ai-contracts.md +873 -0
- package/docs/reference/core/arcane-api.md +601 -0
- package/docs/reference/core/arcane-entities.md +65 -0
- package/docs/reference/core/arcane-events.md +134 -0
- package/docs/reference/core/ollama-module.md +181 -0
- package/docs/reference/core/reference/arcane-api/ai-and-ollama.md +1909 -0
- package/docs/reference/core/reference/arcane-api/applications-terminal-capabilities.md +1057 -0
- package/docs/reference/core/reference/arcane-api/core-and-events.md +320 -0
- package/docs/reference/core/reference/arcane-api/filesystem-storage-preferences-appearance.md +610 -0
- package/docs/reference/core/reference/arcane-api/namespaces.md +1157 -0
- package/docs/reference/core/reference/arcane-api/platform-installation-users-system.md +1423 -0
- package/docs/reference/core/reference/arcane-api/session-provisioning-diagnostics-development.md +315 -0
- package/docs/reference/event-manager.md +957 -0
- package/docs/reference/inventory/package-api.json +2632 -0
- package/docs/reference/inventory/runtime-components.json +934 -0
- package/docs/reference/inventory/runtime-entities.json +26 -0
- package/docs/reference/inventory/runtime-modules.json +1249 -0
- package/docs/reference/protocols.md +242 -0
- package/docs/reference/runtime-components.md +1098 -0
- package/docs/reference/runtime-entities.md +303 -0
- package/docs/reference/runtime-modules.md +2010 -0
- package/docs/reference/sdk-api.md +4901 -0
- package/docs/roadmap.md +79 -0
- package/docs/work-amplification.md +124 -0
- package/node_modules/event-pubsub/CHANGELOG.md +55 -0
- package/node_modules/event-pubsub/MIGRATION.md +70 -0
- package/node_modules/event-pubsub/README.md +363 -0
- package/node_modules/event-pubsub/SECURITY.md +37 -0
- package/node_modules/event-pubsub/index.js +141 -0
- package/node_modules/event-pubsub/licence +21 -0
- package/node_modules/event-pubsub/package.json +59 -0
- package/node_modules/strong-type/README.md +408 -0
- package/node_modules/strong-type/assets/strong-type-header.png +0 -0
- package/node_modules/strong-type/index.js +1151 -0
- package/node_modules/strong-type/licence +21 -0
- package/node_modules/strong-type/node.js +125 -0
- package/node_modules/strong-type/package.json +61 -0
- package/package.json +95 -0
- package/runtime/ARCANE_RUNTIME_RELEASE.json +791 -0
- package/runtime/arcane/components/app-bar.html +468 -0
- package/runtime/arcane/components/assistant-panel.html +715 -0
- package/runtime/arcane/components/calculator.html +8 -0
- package/runtime/arcane/components/chart.html +655 -0
- package/runtime/arcane/components/chat.html +1225 -0
- package/runtime/arcane/components/conversation-view.html +13 -0
- package/runtime/arcane/components/dashboard-config.html +341 -0
- package/runtime/arcane/components/data-maintenance.html +112 -0
- package/runtime/arcane/components/data-view.html +92 -0
- package/runtime/arcane/components/directory-picker.html +197 -0
- package/runtime/arcane/components/document-inspector.html +252 -0
- package/runtime/arcane/components/file-drop.html +264 -0
- package/runtime/arcane/components/file-inspector.html +293 -0
- package/runtime/arcane/components/file-manager.html +1715 -0
- package/runtime/arcane/components/header.html +142 -0
- package/runtime/arcane/components/integration-settings.html +14 -0
- package/runtime/arcane/components/local-ai-status.html +360 -0
- package/runtime/arcane/components/markdown-document.html +1048 -0
- package/runtime/arcane/components/markdown-editor.html +360 -0
- package/runtime/arcane/components/media-embed.html +8 -0
- package/runtime/arcane/components/modal.html +402 -0
- package/runtime/arcane/components/output-panel.html +259 -0
- package/runtime/arcane/components/preferences-form.html +135 -0
- package/runtime/arcane/components/record-timeline.html +105 -0
- package/runtime/arcane/components/relationship-board.html +116 -0
- package/runtime/arcane/components/screen-capture.html +8 -0
- package/runtime/arcane/components/source-code-viewer.html +441 -0
- package/runtime/arcane/components/source-explanation.html +124 -0
- package/runtime/arcane/components/speech.html +365 -0
- package/runtime/arcane/components/summary-strip.html +177 -0
- package/runtime/arcane/components/table.html +77 -0
- package/runtime/arcane/components/task-progress.html +282 -0
- package/runtime/arcane/components/terminal-workspace.html +65 -0
- package/runtime/arcane/components/theme-editor.html +41 -0
- package/runtime/arcane/components/theme-switcher.html +46 -0
- package/runtime/arcane/components/unified-inbox.html +20 -0
- package/runtime/arcane/components/voice-transcription.html +476 -0
- package/runtime/arcane/components/weather-widget.html +8 -0
- package/runtime/arcane/components/web-navigator.html +239 -0
- package/runtime/arcane/css/communications.css +1 -0
- package/runtime/arcane/css/dashboard-config.css +45 -0
- package/runtime/arcane/css/document-site.css +981 -0
- package/runtime/arcane/css/layout.css +438 -0
- package/runtime/arcane/css/primitives.css +321 -0
- package/runtime/arcane/css/theme.css +112 -0
- package/runtime/arcane/css/utility-workspace.css +1 -0
- package/runtime/arcane/entities/ApiModelRecord.js +20 -0
- package/runtime/arcane/entities/Calculation.js +13 -0
- package/runtime/arcane/entities/Chat.js +581 -0
- package/runtime/arcane/entities/CommunicationMessage.js +29 -0
- package/runtime/arcane/entities/CommunicationThread.js +21 -0
- package/runtime/arcane/entities/Document.js +10 -0
- package/runtime/arcane/entities/File.js +143 -0
- package/runtime/arcane/entities/Image.js +135 -0
- package/runtime/arcane/entities/IntentEnvelope.js +834 -0
- package/runtime/arcane/entities/Preference.js +83 -0
- package/runtime/arcane/entities/TWiNPolicyDecision.js +1092 -0
- package/runtime/arcane/entities/TerminalSession.js +46 -0
- package/runtime/arcane/entities/Theme.js +107 -0
- package/runtime/arcane/entities/User.js +1046 -0
- package/runtime/arcane/entities/Weather.js +23 -0
- package/runtime/arcane/img/arcane-os-everywhere.png +0 -0
- package/runtime/arcane/img/arrow-left.png +0 -0
- package/runtime/arcane/img/arrow-right.png +0 -0
- package/runtime/arcane/img/doc.svg +5 -0
- package/runtime/arcane/img/folder.svg +4 -0
- package/runtime/arcane/img/image.svg +5 -0
- package/runtime/arcane/img/refresh.png +0 -0
- package/runtime/arcane/img/send.svg +9 -0
- package/runtime/arcane/img/trash.svg +5 -0
- package/runtime/arcane/img/upload.svg +5 -0
- package/runtime/arcane/modules/AI.js +2048 -0
- package/runtime/arcane/modules/AIPreferenceRuntime.js +32 -0
- package/runtime/arcane/modules/AIPreferenceTuple.js +92 -0
- package/runtime/arcane/modules/AIResponseLength.js +42 -0
- package/runtime/arcane/modules/AIResponseURLPolicy.js +626 -0
- package/runtime/arcane/modules/AnsiText.js +53 -0
- package/runtime/arcane/modules/ApiModelDatabase.js +25 -0
- package/runtime/arcane/modules/AppDataScope.js +245 -0
- package/runtime/arcane/modules/AppearancePreferences.js +28 -0
- package/runtime/arcane/modules/ArcaneCommunicationBridge.js +22 -0
- package/runtime/arcane/modules/ArcaneNavigationPolicy.js +135 -0
- package/runtime/arcane/modules/ArcaneNetworkPolicy.js +255 -0
- package/runtime/arcane/modules/AsyncBoundary.js +161 -0
- package/runtime/arcane/modules/BrowserTestSuite.js +326 -0
- package/runtime/arcane/modules/CalculatorEngine.js +20 -0
- package/runtime/arcane/modules/CaseEvidenceIndexer.js +134 -0
- package/runtime/arcane/modules/ChartLibrary.js +35 -0
- package/runtime/arcane/modules/ChatRecords.js +13 -0
- package/runtime/arcane/modules/CommunicationAppController.js +43 -0
- package/runtime/arcane/modules/CommunicationHub.js +16 -0
- package/runtime/arcane/modules/CommunicationPreferences.js +13 -0
- package/runtime/arcane/modules/CommunicationProviderRegistry.js +16 -0
- package/runtime/arcane/modules/ComponentContracts.js +586 -0
- package/runtime/arcane/modules/ConfiguredAIChatSession.js +288 -0
- package/runtime/arcane/modules/ConversationActionItems.js +488 -0
- package/runtime/arcane/modules/ConversationClosingReport.js +274 -0
- package/runtime/arcane/modules/ConversationTimebox.js +527 -0
- package/runtime/arcane/modules/CoreLocalModelCatalog.js +255 -0
- package/runtime/arcane/modules/DBLS.js +171 -0
- package/runtime/arcane/modules/DBOPFS.js +1154 -0
- package/runtime/arcane/modules/DBOPFSWorker.js +116 -0
- package/runtime/arcane/modules/DataMaintenance.js +91 -0
- package/runtime/arcane/modules/DevelopmentWorkspace.js +74 -0
- package/runtime/arcane/modules/DirectoryPicker.js +109 -0
- package/runtime/arcane/modules/DocumentNavigation.js +223 -0
- package/runtime/arcane/modules/Errors.js +1025 -0
- package/runtime/arcane/modules/GifEncoder.js +29 -0
- package/runtime/arcane/modules/HTMLImport.js +114 -0
- package/runtime/arcane/modules/InMemoryCommunicationProvider.js +14 -0
- package/runtime/arcane/modules/IsolatedModelQuestionRunner.js +275 -0
- package/runtime/arcane/modules/LocalAIReadiness.js +870 -0
- package/runtime/arcane/modules/LocalAIReadinessController.js +156 -0
- package/runtime/arcane/modules/MD.js +111 -0
- package/runtime/arcane/modules/Mail.js +352 -0
- package/runtime/arcane/modules/MailTransport.mjs +180 -0
- package/runtime/arcane/modules/Marked.min.js +71 -0
- package/runtime/arcane/modules/MemoryRecords.js +44 -0
- package/runtime/arcane/modules/MessageAdvisory.js +38 -0
- package/runtime/arcane/modules/ModelDefinition.js +189 -0
- package/runtime/arcane/modules/Ollama.js +74 -0
- package/runtime/arcane/modules/OllamaModelIdentifier.js +21 -0
- package/runtime/arcane/modules/OllamaSettings.js +24 -0
- package/runtime/arcane/modules/OpenMeteoWeatherProvider.js +14 -0
- package/runtime/arcane/modules/PreferenceStore.js +109 -0
- package/runtime/arcane/modules/QRCode.min.js +1 -0
- package/runtime/arcane/modules/Questionnaire.js +61 -0
- package/runtime/arcane/modules/RecordLinkIndex.js +24 -0
- package/runtime/arcane/modules/RecordPassageIndex.js +222 -0
- package/runtime/arcane/modules/RecordReviewStore.js +94 -0
- package/runtime/arcane/modules/RevocableProjectionLedger.js +1623 -0
- package/runtime/arcane/modules/RiskSignalAnalyzer.js +37 -0
- package/runtime/arcane/modules/ScamRiskPolicy.js +62 -0
- package/runtime/arcane/modules/ScopedOPFSCache.js +183 -0
- package/runtime/arcane/modules/ScreenCapture.js +20 -0
- package/runtime/arcane/modules/SpeechPlayback.js +581 -0
- package/runtime/arcane/modules/StaticDocumentCatalog.js +1248 -0
- package/runtime/arcane/modules/SystemAppearance.js +20 -0
- package/runtime/arcane/modules/SystemPlatformPresentation.js +51 -0
- package/runtime/arcane/modules/SystemToolRegistry.js +28 -0
- package/runtime/arcane/modules/TerminalClient.js +52 -0
- package/runtime/arcane/modules/TerminalCommandRegistry.js +50 -0
- package/runtime/arcane/modules/ThemeBootstrap.js +26 -0
- package/runtime/arcane/modules/ThemeManager.js +131 -0
- package/runtime/arcane/modules/TimeGuard.js +149 -0
- package/runtime/arcane/modules/ToolCallRouter.js +83 -0
- package/runtime/arcane/modules/WaitForComponent.js +102 -0
- package/runtime/arcane/modules/YouTubeMedia.js +16 -0
- package/runtime/arcane/modules/uPlot.LICENSE.txt +21 -0
- package/runtime/arcane/modules/uPlot.iife.min.js +2 -0
- package/runtime/arcane/modules/uPlot.min.css +1 -0
- package/runtime/arcane/security/arcane-network-policy.json +6 -0
- package/runtime/strong-type/index.js +352 -0
- package/runtime/strong-type/licence +21 -0
- package/runtime/strong-type/package.json +45 -0
- package/schemas/arcane-app-bundle.schema.json +125 -0
- package/schemas/arcane-app.schema.json +329 -0
- package/schemas/arcane-lock.schema.json +86 -0
- package/schemas/arcane-package.schema.json +224 -0
- package/schemas/cli-event.schema.json +122 -0
- package/schemas/event-stack.schema.json +152 -0
- package/schemas/native-build-plan.schema.json +176 -0
- package/schemas/target-adapter.schema.json +117 -0
- package/src/app-descriptor.mjs +500 -0
- package/src/cli/main.mjs +561 -0
- package/src/constants.mjs +31 -0
- package/src/dev-server.mjs +718 -0
- package/src/doctor.mjs +315 -0
- package/src/dom-event-instrumentation.mjs +594 -0
- package/src/errors.mjs +75 -0
- package/src/event-manager.mjs +1342 -0
- package/src/event-queue.mjs +138 -0
- package/src/events.mjs +219 -0
- package/src/index.mjs +177 -0
- package/src/integrated-provider-loader.mjs +432 -0
- package/src/native-plan.mjs +698 -0
- package/src/native-provider-loader.mjs +1126 -0
- package/src/packager/core.mjs +2691 -0
- package/src/process.mjs +353 -0
- package/src/release-bundle.mjs +2523 -0
- package/src/repository.mjs +90 -0
- package/src/runtime.mjs +452 -0
- package/src/scaffold.mjs +380 -0
- package/src/targets/index.mjs +436 -0
- package/src/templates/assets/app-icon.png +0 -0
- package/src/templates/workspace-template.mjs +388 -0
- package/src/testing-loader.mjs +9 -0
- package/src/testing.mjs +427 -0
- package/src/toolchain.mjs +1335 -0
- package/src/update-check.mjs +307 -0
- package/src/workspace.mjs +449 -0
package/docs/roadmap.md
ADDED
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
# Development roadmap
|
|
2
|
+
|
|
3
|
+
The SDK contract keeps target names and operations stable while each current
|
|
4
|
+
development provider gathers its remaining promotion evidence. Each item below
|
|
5
|
+
is small enough to become a GitHub issue without combining every platform into
|
|
6
|
+
one unbounded build.
|
|
7
|
+
|
|
8
|
+
## Publication prerequisites
|
|
9
|
+
|
|
10
|
+
- Mark the Arcane OS monorepo root package private or give it an internal-only
|
|
11
|
+
package name before the first `arcane-os` publication.
|
|
12
|
+
- Decide and document the license that permits proprietary applications to
|
|
13
|
+
bundle the synchronized Arcane runtime.
|
|
14
|
+
- Publish one fresh, never-reused prerelease candidate under only the npm `dev`
|
|
15
|
+
tag, verify the tarball and
|
|
16
|
+
provenance, add a second appropriate npm owner, and configure the exact
|
|
17
|
+
trusted-publisher workflow.
|
|
18
|
+
|
|
19
|
+
## App admission and native extraction
|
|
20
|
+
|
|
21
|
+
- Keep the implemented process-local `arcane-native-build-plan/1` and
|
|
22
|
+
`arcane-native-builder/1` lifecycle as the single provider seam for the CLI,
|
|
23
|
+
GUI, CI, and Codex. Portable, Windows x64, Linux x64, Linux ARM64, and Android
|
|
24
|
+
ARM64 pair only through an explicit compatible Arcane root and a matching
|
|
25
|
+
canonical scaffold descriptor.
|
|
26
|
+
- Migrate built-in apps from the implemented schema-2 `arcane-app.json`
|
|
27
|
+
descriptor fallback to authored descriptors without changing exact v1 release
|
|
28
|
+
or native-host artifacts.
|
|
29
|
+
- Update Arcane's exact-key consumers to project the new descriptor into the
|
|
30
|
+
current catalog while preserving v1 app-release admission during migration.
|
|
31
|
+
- Preserve the implemented portable, Windows x64, Linux x64, Linux ARM64, and
|
|
32
|
+
Android ARM64 providers as one selected app plus its exact declared dependency
|
|
33
|
+
closure. Add new providers without weakening that release-reader boundary.
|
|
34
|
+
- Extend the implemented same-process retained receipt lifecycle through an
|
|
35
|
+
authenticated Arcane host broker only when persistent cross-process reuse or
|
|
36
|
+
restartable app-scoped Core sessions are required.
|
|
37
|
+
- Preserve exact packaged-artifact authority across browser and native plan,
|
|
38
|
+
verify, and run boundaries; never regress to treating a mutable path or
|
|
39
|
+
manifest file as a reusable receipt.
|
|
40
|
+
- Add a manifest-declared origin policy for native enforcement and an optional
|
|
41
|
+
policy-faithful development mode. The current capability-gated loopback host
|
|
42
|
+
deliberately uses a broad development-only policy so the shared runtime can
|
|
43
|
+
exercise remote providers, media, WebSockets, and embeds.
|
|
44
|
+
|
|
45
|
+
## Platform adapters
|
|
46
|
+
|
|
47
|
+
- `portable`: keep the available verified app-scoped Core directory reproducible
|
|
48
|
+
from an external packed-SDK install and an explicit compatible Arcane checkout;
|
|
49
|
+
do not present it as an executable or direct-run target.
|
|
50
|
+
- `windows-x64`: keep the implemented retained toolchain broker, EXE bundle,
|
|
51
|
+
authenticated host-readiness signal, and owned same-process cancellation
|
|
52
|
+
reproducible. Production signing and installation remain separate work.
|
|
53
|
+
- `linux-x64`: keep the implemented single-app WebKitGTK host, verified amd64
|
|
54
|
+
DEB, user-owned extraction, and same-process cancellation reproducible. Add
|
|
55
|
+
AppImage and RPM only as distinct later format requests.
|
|
56
|
+
- `linux-arm64`: keep the implemented unsigned-local-test ARM64 DEB provider,
|
|
57
|
+
focused provider tests, and exact-SHA native build/verification/readiness/
|
|
58
|
+
cancellation workflow reproducible on a compatible native ARM64 toolchain.
|
|
59
|
+
Keep AppImage, RPM, and production signing as separate future requests.
|
|
60
|
+
- `android-arm64`: keep the implemented single-app, development-signed APK path
|
|
61
|
+
and exact-SHA physical/native ARM64 build/readiness/cleanup evidence
|
|
62
|
+
reproducible. The APK contains no native ABI and is architecture-neutral. Add
|
|
63
|
+
AAB, release signing, store publishing, and update continuity only as explicit
|
|
64
|
+
later promotion work.
|
|
65
|
+
|
|
66
|
+
## Developer experience
|
|
67
|
+
|
|
68
|
+
- Keep the integrated shared/Core profile explicit through `--scope shared`:
|
|
69
|
+
one exact repository-relative focused test or Arcane's one canonical
|
|
70
|
+
development check, never app discovery or an arbitrary package-script loop.
|
|
71
|
+
- Add the Arcane Developer control panel as a client of the same operation API;
|
|
72
|
+
it stores local repository paths per user and never becomes a second builder.
|
|
73
|
+
- Add authenticated GitHub artifact admission so Arcane OS installs verified
|
|
74
|
+
releases without cloning proprietary source.
|
|
75
|
+
- Preserve the implemented integrated app-scoped native path: `--workspace` and
|
|
76
|
+
`--arcane-root` identify the same checkout, one app and one target are
|
|
77
|
+
selected, and `--output-root` remains outside the checkout. Future GUI clients
|
|
78
|
+
must use that path rather than introducing a second builder or an implicit
|
|
79
|
+
all-target build.
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
# Work-amplification review
|
|
2
|
+
|
|
3
|
+
The default cardinality is:
|
|
4
|
+
|
|
5
|
+
```text
|
|
6
|
+
1 workspace x 1 app x 1 command x 1 target x 1 architecture x 1 format x 1 signing profile
|
|
7
|
+
```
|
|
8
|
+
|
|
9
|
+
There is no implicit all-app, all-target, or Android-flavor loop.
|
|
10
|
+
Selecting `android-arm64` produces exactly one architecture-neutral APK with no
|
|
11
|
+
native ABI fan-out. It does not build one artifact per ABI, an AAB, a release
|
|
12
|
+
signing variant, or a publication/update artifact. Every native invocation also
|
|
13
|
+
selects one explicit compatible `--arcane-root` and one app descriptor that
|
|
14
|
+
already declares that target; a target list never causes provider discovery or
|
|
15
|
+
additional builds.
|
|
16
|
+
|
|
17
|
+
The SDK repository test cardinality is:
|
|
18
|
+
|
|
19
|
+
```text
|
|
20
|
+
1 repository x 4 named sets x each assigned test file exactly once
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
Unit, functional, integration, and regression scripts form one validated,
|
|
24
|
+
non-overlapping inventory. The complete command adds three lightweight set
|
|
25
|
+
coordinator launches compared with the former single discovery pass, but it
|
|
26
|
+
does not repeat a test file, assertion, package installation, provider scan,
|
|
27
|
+
build, or fixture. Smaller nested `vanilla-test` cases reuse their parent
|
|
28
|
+
file's already-owned setup and cleanup boundary.
|
|
29
|
+
|
|
30
|
+
Shared/Core development has a separate integrated-only cardinality:
|
|
31
|
+
|
|
32
|
+
```text
|
|
33
|
+
1 integrated workspace x 1 fixed provider generation x 1 operation x 1 owned process tree
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
The focused-test operation selects exactly one repository-relative
|
|
37
|
+
`.test.mjs`; the development-check operation selects only Arcane's canonical
|
|
38
|
+
check. The 14,465-byte provider is read and hashed once for the process
|
|
39
|
+
generation, then its unchanged filesystem identity is checked without rereading
|
|
40
|
+
or rehashing its bytes around import and execution. Preparation reads Arcane's
|
|
41
|
+
10,270-byte package manifest once and launches one owned process tree. A focused
|
|
42
|
+
fixture completed in about 0.14 seconds on the development laptop; the canonical
|
|
43
|
+
check owns its nested npm/test process tree and intentionally costs the complete
|
|
44
|
+
Arcane development gate. Within one SDK process, one checkout admits only one
|
|
45
|
+
such process tree at a time, so concurrent requests fail busy instead of
|
|
46
|
+
multiplying that gate. Shared scope has no app, package, target, architecture,
|
|
47
|
+
format, or signing loop and does not produce app output.
|
|
48
|
+
|
|
49
|
+
## Cold-path budget
|
|
50
|
+
|
|
51
|
+
- Scaffold: approximately 15-25 files, less than 100 KiB, target under one
|
|
52
|
+
second before an optional dependency installation.
|
|
53
|
+
- Shared browser payload: 158 files / 3,359,960 bytes, comprising the exact
|
|
54
|
+
155-file / 3,320,994-byte dev.4 runtime receipt plus three SDK licensing files
|
|
55
|
+
/ 38,966 bytes, verified once per exact SDK installation state.
|
|
56
|
+
- Small browser package: app bytes plus the shared runtime, copied and inventoried
|
|
57
|
+
once into an atomic staging directory.
|
|
58
|
+
- Portable build: one explicitly selected app and one host platform request. In
|
|
59
|
+
a fresh packed-SDK external-repository run on Windows, the SDK's Arcane 0.8.11
|
|
60
|
+
runtime produced a 153-file, 3,236,727-byte selected release against the newer
|
|
61
|
+
compatible Arcane 0.8.12 toolchain. The verified portable result contained
|
|
62
|
+
160 files and 4,570,320 bytes. The complete pack, install, Ollama doctor, app
|
|
63
|
+
check, toolchain preparation, build, and verification sequence completed in
|
|
64
|
+
approximately 9.2 seconds. This is development evidence, not a cross-machine
|
|
65
|
+
performance guarantee.
|
|
66
|
+
- Shared native closure packaging: one retained shared-payload snapshot reads
|
|
67
|
+
and hashes the current manifest-bound runtime and licensing inventory once. A
|
|
68
|
+
two-app closure reuses that snapshot instead of repeating those source reads
|
|
69
|
+
for each app; each distinct app release still writes and inventories its own
|
|
70
|
+
output once.
|
|
71
|
+
- Windows x64 executable: one cold development request retained 2,530 toolchain
|
|
72
|
+
files / 218,292,008 bytes once, compiled one 22-file / 60,488,912-byte
|
|
73
|
+
external artifact, reused its verified receipt, reached authenticated host
|
|
74
|
+
readiness, and cancelled the owned process tree in 11.8 seconds. The selected
|
|
75
|
+
app release contained seven files, each read once.
|
|
76
|
+
- Linux x64 executable: one WSL development request produced one 23,577,108-byte
|
|
77
|
+
amd64 DEB with 328 verified installed files / 82,783,539 uncompressed bytes.
|
|
78
|
+
Toolchain preparation took 7.1 seconds, build plus verification took 15.7
|
|
79
|
+
seconds, repeat verification reused the identical receipt in 0 ms, and the
|
|
80
|
+
WSLg host ran for eight seconds before owned cancellation.
|
|
81
|
+
- Linux ARM64 executable: exact-SHA workflow run `31842361832` authenticated one
|
|
82
|
+
seven-file / 5,143-byte release with seven provider reads and two retained
|
|
83
|
+
browser-runtime source reads, each exactly once. It retained 2,461 toolchain
|
|
84
|
+
files / 113,959,126 bytes, compiled a 149,720-byte AArch64 host and 71,240-byte
|
|
85
|
+
AArch64 bridge, and built one retained-verified 21,232,932-byte ARM64 DEB.
|
|
86
|
+
Preparation took 6,304 ms, build 16,868 ms, verification 447 ms, WebKit
|
|
87
|
+
readiness 1,972 ms, and the complete build/readiness/cancellation lifecycle
|
|
88
|
+
25,625 ms. The owned leader and process group were live at readiness and
|
|
89
|
+
absent after cancellation. The workflow kept Ubuntu's AppArmor
|
|
90
|
+
user-namespace restriction enabled while loading the packaged Bubblewrap
|
|
91
|
+
profile. This is development evidence for source revision
|
|
92
|
+
`4382043c09285ea203aa6daba1732660966ac409`, not Linux signing, installation,
|
|
93
|
+
release, or promotion evidence.
|
|
94
|
+
- Android ARM64 application: one exact-SHA development request authenticated a
|
|
95
|
+
five-file / 611-byte synthetic external release with five release reads,
|
|
96
|
+
prepared one retained offline Gradle/toolchain closure in 159.4 seconds,
|
|
97
|
+
built one 1,438,324-byte APK in 69.9 seconds, reused verification evidence in
|
|
98
|
+
3 ms, and reached exact process/generation/nonce-bound content-and-bridge
|
|
99
|
+
readiness on a physical ARM64/API 37 device in 4.5 seconds. The APK contained
|
|
100
|
+
64 ZIP entries and zero native ABI entries. The 234.2-second total also proved
|
|
101
|
+
owned cancellation, force-stop, uninstall, and post-run package absence. This
|
|
102
|
+
is development evidence for source revision `be6732ab71cbecb43d037aaad994ade5f2f4d1b6`,
|
|
103
|
+
not Android release, store, update, or promotion evidence.
|
|
104
|
+
|
|
105
|
+
Invariant work includes SDK/runtime resolution and each selected provider
|
|
106
|
+
generation, snapshotted once per prepared toolchain state. The portable
|
|
107
|
+
provider's 20 required Arcane toolchain inputs remain one such snapshot. App
|
|
108
|
+
source validation, tests, and release inventory are identity-bound once per app
|
|
109
|
+
state. Portable assembly, Windows/Linux compilation, and Android APK assembly
|
|
110
|
+
and development signing are identity-bound once per requested target. Final
|
|
111
|
+
artifact verification authenticates and reuses the retained receipt instead of
|
|
112
|
+
repeating toolchain preparation or final inventory work. Compatible file
|
|
113
|
+
traversal is batched with bounded sequential streaming.
|
|
114
|
+
|
|
115
|
+
Runtime verification binds version, source identity, inventory, and hashes. The
|
|
116
|
+
schema-1 app-release manifest binds its packaged inventory and content digest.
|
|
117
|
+
Because an ordinary filesystem tree can change after a process-local receipt is
|
|
118
|
+
issued, the browser consumer performs one bounded read/hash/post-identity check
|
|
119
|
+
for the exact response bytes before headers. That creates the response's
|
|
120
|
+
immutable state; it is not a second package-inventory pass. At most four files
|
|
121
|
+
of 64 MiB each can be active, and additional requests wait in a bounded queue.
|
|
122
|
+
Future reusable cross-process receipts must additionally bind and retain the
|
|
123
|
+
canonical location, filesystem identity, policy, toolchain, platform,
|
|
124
|
+
architecture, signer, and generation, and must be invalidated before mutation.
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
## 6.1.0 — 2026-08-21
|
|
4
|
+
|
|
5
|
+
Published to npm as the current registry release from the verified `main` source. No separate 6.1.0 GitHub tag or release was created.
|
|
6
|
+
|
|
7
|
+
- Added direct CommonJS `require('event-pubsub')` support while keeping one native ESM implementation for both module systems.
|
|
8
|
+
|
|
9
|
+
- Restored `strong-type` 2.0.0 as the sole production dependency and preserved the original package-shaped `../strong-type/index.js` Node/browser shim.
|
|
10
|
+
- Kept wildcard and typed registrations together in one null-prototype registry, with the real wildcard stored under `Symbol.for('event-pubsub-all')`.
|
|
11
|
+
- Moved one-shot state from user functions into per-registration `{handler, once}` records and removed each one-shot registration before invocation.
|
|
12
|
+
- Restored delegated public validation; invalid-input `TypeError` messages can differ from the direct checks in 6.0.0.
|
|
13
|
+
- Restored live-array dispatch behavior while making duplicate removal linear and registry reset constant-time.
|
|
14
|
+
- Set the production and development floor to Node.js 22.12.0, where synchronous ESM can be loaded directly through `require()` without a duplicate build.
|
|
15
|
+
- Expanded the shared Node/Chrome inventory to 119 cases, including mixed once/persistent handlers, live mutation, strict wildcard removal, stale cleanup, and throwing-handler regressions.
|
|
16
|
+
- Kept `copyfiles` out of the runtime and development dependency trees.
|
|
17
|
+
|
|
18
|
+
## 6.0.0 — 2026-08-21
|
|
19
|
+
|
|
20
|
+
Published as the GitHub source release after complete `main` verification. At that milestone npm latest remained 5.0.3; 6.1.0 later became the registry release.
|
|
21
|
+
|
|
22
|
+
### Runtime
|
|
23
|
+
|
|
24
|
+
- Rebuilt the event registry and hot dispatch paths for modern Node.js and browsers.
|
|
25
|
+
- Preserved wildcard-first synchronous execution and fluent public methods.
|
|
26
|
+
- Removed one-shot metadata mutation from user-provided functions.
|
|
27
|
+
- Removed one-shot records before invocation for reentrant and throwing-handler safety.
|
|
28
|
+
- Deferred handlers added during dispatch and skipped handlers removed before their turn.
|
|
29
|
+
- Regression-tested the existing fluent `emit` return contract, including wildcard-only and missing-type dispatch.
|
|
30
|
+
- Made `list` return isolated handler-array snapshots.
|
|
31
|
+
- Made prototype-like event names safe.
|
|
32
|
+
- Removed the runtime dependency and replaced delegated hot-path validation with direct native checks.
|
|
33
|
+
|
|
34
|
+
### Verification
|
|
35
|
+
|
|
36
|
+
- Replaced duplicated legacy tests with one shared 110-case registry.
|
|
37
|
+
- Split verification into Unit (16), Functional (26), Integration (14), Regression (34), and Interface (20) suites.
|
|
38
|
+
- Updated to exact `vanilla-test` 2.1.1.
|
|
39
|
+
- Added independent Node and real-Chrome native V8 coverage with 100% per-runtime gates.
|
|
40
|
+
- Added a packed npm consumer smoke test.
|
|
41
|
+
- Added eight fixed-count hot-path benchmarks with execution-only timing boundaries, nanoseconds-per-operation summaries, raw samples, and machine-readable schema v2 results.
|
|
42
|
+
- Added a Node 22.12/24, Ubuntu/macOS/Windows CI matrix.
|
|
43
|
+
|
|
44
|
+
### Documentation
|
|
45
|
+
|
|
46
|
+
- Added a focused 21-page GitHub Pages site, robust event-console and mutation-scenario playgrounds, live shared-suite runner, coverage reports, latency charts, migration guide, and security policy.
|
|
47
|
+
- Migrated the repository default branch from `master` to `main` while preserving the legacy branch.
|
|
48
|
+
- Removed stale committed c8 output and legacy copy-based test emulation.
|
|
49
|
+
- Removed `c8`, `copyfiles`, and the test-only static server from development dependencies.
|
|
50
|
+
|
|
51
|
+
## 5.0.3 — 2020-11-26
|
|
52
|
+
|
|
53
|
+
- Published the prior 5.x npm package with ESM Node/browser examples and the original vanilla-test checks.
|
|
54
|
+
|
|
55
|
+
Earlier release lines remain available in Git tags and historical branches.
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
# Migrating from event-pubsub 5.x to 6.x
|
|
2
|
+
|
|
3
|
+
Version 6 preserves the public method names and synchronous wildcard-first model while formalizing previously inconsistent edge behavior. The 6.1.0 npm release restores the original delegated validation and package layout while adding shared-source CommonJS consumption.
|
|
4
|
+
|
|
5
|
+
## Requirements
|
|
6
|
+
|
|
7
|
+
- Use Node.js 22.12.0 or newer for production and repository development.
|
|
8
|
+
- Install the current 6.x package from your configured registry:
|
|
9
|
+
|
|
10
|
+
```sh
|
|
11
|
+
npm install event-pubsub@6
|
|
12
|
+
```
|
|
13
|
+
|
|
14
|
+
- Continue importing the default or named ESM export, or require the same source directly from CommonJS:
|
|
15
|
+
|
|
16
|
+
```js
|
|
17
|
+
import EventPubSub, {EventPubSub as NamedEventPubSub} from 'event-pubsub';
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
```js
|
|
21
|
+
const EventPubSub = require('event-pubsub');
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
### Package layout
|
|
25
|
+
|
|
26
|
+
The package keeps its historical ESM entry at `event-pubsub/index.js` without a restrictive export map. Applications should normally import `event-pubsub`; repository-only paths are not part of the supported API.
|
|
27
|
+
|
|
28
|
+
## Behavior to review
|
|
29
|
+
|
|
30
|
+
### `emit` remains fluent
|
|
31
|
+
|
|
32
|
+
`emit(type, ...payload)` continues to return the current instance, including when no typed subscriber exists. Version 6 adds regression coverage for this established contract; no migration is required.
|
|
33
|
+
|
|
34
|
+
### One-shot state is internal
|
|
35
|
+
|
|
36
|
+
Version 5 wrote `Symbol.for('event-pubsub-once')` onto handler functions. Version 6.1.0 stores one-shot state in internal `{handler, once}` registration records, so frozen and nonextensible functions work. Code that inspected or changed that undocumented symbol must stop doing so.
|
|
37
|
+
|
|
38
|
+
### One-shot removal happens before invocation
|
|
39
|
+
|
|
40
|
+
A one-shot subscriber cannot run again through a reentrant emit. It also stays removed if it throws.
|
|
41
|
+
|
|
42
|
+
### Validation is delegated again
|
|
43
|
+
|
|
44
|
+
Public argument checks again come from `strong-type` 2.0.0. Invalid inputs still throw `TypeError`, but applications must not depend on the exact error text introduced by the direct checks in the 6.0.0 source release.
|
|
45
|
+
|
|
46
|
+
### Dispatch remains live
|
|
47
|
+
|
|
48
|
+
- A subscriber appended to the active array can run in the same emit.
|
|
49
|
+
- A specifically removed subscriber does not run if its turn has not arrived. Removing a whole bucket detaches it from future lookup while an already-active array finishes.
|
|
50
|
+
- `reset()` replaces the registry, but an array already being dispatched continues. If reset happens in the wildcard phase, the old typed bucket is not looked up afterward.
|
|
51
|
+
|
|
52
|
+
### `list` is an isolated snapshot
|
|
53
|
+
|
|
54
|
+
Each `list` access creates a null-prototype object with copied handler arrays. Mutating or deleting snapshot values no longer mutates the live registry. Use `Object.hasOwn(snapshot, type)` instead of calling `snapshot.hasOwnProperty(...)`. The wildcard entry remains available through `Symbol.for('event-pubsub-all')`.
|
|
55
|
+
|
|
56
|
+
### Browser package imports
|
|
57
|
+
|
|
58
|
+
The 6.1.0 release restores `strong-type` 2.0.0 as the sole production dependency and preserves the deliberate `../strong-type/index.js` include shim. Node installs both packages as siblings. For an unbundled browser, serve the same sibling directories and map the public `event-pubsub` name to its `index.js`; the relative validator import then resolves without a second package-name mapping.
|
|
59
|
+
|
|
60
|
+
## Tooling cleanup
|
|
61
|
+
|
|
62
|
+
- `vanilla-test` is now pinned exactly at 2.1.1.
|
|
63
|
+
- Native Node and Chrome coverage replaces c8.
|
|
64
|
+
- The old `copyfiles` dependency is gone; a dependency-free staging script now verifies the package-shaped Node/browser layout.
|
|
65
|
+
- `copyfiles`, `c8`, and the test-only `node-http-server` dependency are removed.
|
|
66
|
+
- Production installs contain exactly one dependency: `strong-type` 2.0.0. They do not install `copyfiles` or the development-only `vanilla-test`.
|
|
67
|
+
|
|
68
|
+
## Suggested migration test
|
|
69
|
+
|
|
70
|
+
Run your application suite after the upgrade, paying particular attention to reentrant emit flows, handler removal during dispatch, synchronous throws, asynchronous rejections, list inspection, and browsers that use unbundled ESM.
|