{"_id":"@a0n/aeon","_rev":"4-8c477a104b561c9e562c084b51e7c1a1","name":"@a0n/aeon","dist-tags":{"latest":"5.0.2"},"versions":{"5.0.1":{"name":"@a0n/aeon","version":"5.0.1","keywords":["distributed","synchronization","sync","replication","versioning","migration","schema","crdt","collaboration","real-time","conflict-resolution","offline-first"],"author":{"name":"Affectively AI"},"license":"MIT","_id":"@a0n/aeon@5.0.1","maintainers":[{"name":"buley","email":"buley@outlook.com"}],"homepage":"https://github.com/forkjoin-ai/aeon#readme","bugs":{"url":"https://github.com/forkjoin-ai/aeon/issues"},"dist":{"shasum":"812ba2fbca3c233cad2ce88f02f68a7a605b6985","tarball":"https://registry.npmjs.org/@a0n/aeon/-/aeon-5.0.1.tgz","fileCount":73,"integrity":"sha512-nOjIlIMzP2S1gmGJamFmjVY/Jsyj2WLZpLyuSKpHLDaKD/IWWolMAI3C5YEg95nZWY8u8vsfUL50YfJQAlXDSg==","signatures":[{"sig":"MEYCIQDHEROUeTV2ahPcSmXmakNKyyDTHPMpN8hOG94z2d5bnwIhANN5gSeZWlnHNNIuOFNWQEjJ/I6aAT0M5ITBH1SltQan","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":4283779},"main":"./dist/index.cjs","type":"module","_from":"file:a0n-aeon-5.0.1.tgz","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=18.0.0"},"exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}},"./core":{"import":{"types":"./dist/core/index.d.ts","default":"./dist/core/index.js"},"require":{"types":"./dist/core/index.d.cts","default":"./dist/core/index.cjs"}},"./utils":{"import":{"types":"./dist/utils/index.d.ts","default":"./dist/utils/index.js"},"require":{"types":"./dist/utils/index.d.cts","default":"./dist/utils/index.cjs"}},"./crypto":{"import":{"types":"./dist/crypto/index.d.ts","default":"./dist/crypto/index.js"},"require":{"types":"./dist/crypto/index.d.cts","default":"./dist/crypto/index.cjs"}},"./offline":{"import":{"types":"./dist/offline/index.d.ts","default":"./dist/offline/index.js"},"require":{"types":"./dist/offline/index.d.cts","default":"./dist/offline/index.cjs"}},"./presence":{"import":{"types":"./dist/presence/index.d.ts","default":"./dist/presence/index.js"},"require":{"types":"./dist/presence/index.d.cts","default":"./dist/presence/index.cjs"}},"./versioning":{"import":{"types":"./dist/versioning/index.d.ts","default":"./dist/versioning/index.js"},"require":{"types":"./dist/versioning/index.d.cts","default":"./dist/versioning/index.cjs"}},"./compression":{"import":{"types":"./dist/compression/index.d.ts","default":"./dist/compression/index.js"},"require":{"types":"./dist/compression/index.d.cts","default":"./dist/compression/index.cjs"}},"./distributed":{"import":{"types":"./dist/distributed/index.d.ts","default":"./dist/distributed/index.js"},"require":{"types":"./dist/distributed/index.d.cts","default":"./dist/distributed/index.cjs"}},"./persistence":{"import":{"types":"./dist/persistence/index.d.ts","default":"./dist/persistence/index.js"},"require":{"types":"./dist/persistence/index.d.cts","default":"./dist/persistence/index.cjs"}},"./optimization":{"import":{"types":"./dist/optimization/index.d.ts","default":"./dist/optimization/index.js"},"require":{"types":"./dist/optimization/index.d.cts","default":"./dist/optimization/index.cjs"}}},"scripts":{"dev":"tsup --watch","lint":"eslint src --ext .ts","test":"vitest run","build":"tsup","clean":"rm -rf dist","format":"prettier --write src","lint:fix":"eslint src --ext .ts --fix","test:watch":"vitest","type-check":"tsc --noEmit","test:coverage":"vitest run --coverage"},"_npmUser":{"name":"buley","email":"buley@outlook.com"},"_resolved":"/private/var/folders/kf/tkq8cmd54fl9c1wh414dj3240000gn/T/41b809a91b617aa85555c617ff2c8631/a0n-aeon-5.0.1.tgz","_integrity":"sha512-nOjIlIMzP2S1gmGJamFmjVY/Jsyj2WLZpLyuSKpHLDaKD/IWWolMAI3C5YEg95nZWY8u8vsfUL50YfJQAlXDSg==","deprecated":"This package is deprecated and no longer supported. Do not use.","repository":{"url":"git+https://github.com/forkjoin-ai/aeon.git","type":"git"},"workspaces":["packages/*"],"_npmVersion":"11.11.0","description":"Distributed synchronization, schema versioning, and conflict resolution for real-time collaborative applications","directories":{},"_nodeVersion":"25.8.0","dependencies":{"eventemitter3":"^5.0.4"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","eslint":"^9.0.0","vitest":"^2.0.0","prettier":"^3.0.0","typescript":"^5.6.0","@types/node":"^22.0.0"},"peerDependencies":{"@affectively/auth":"^0.1.0","@a0n/aeon-flux-react":"5.0.0"},"peerDependenciesMeta":{"@affectively/auth":{"optional":true},"@a0n/aeon-flux-react":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/aeon_5.0.1_1773802045475_0.3283100704658799","host":"s3://npm-registry-packages-npm-production"}},"5.0.2":{"name":"@a0n/aeon","version":"5.0.2","keywords":["distributed","synchronization","sync","replication","versioning","migration","schema","crdt","collaboration","real-time","conflict-resolution","offline-first"],"author":{"name":"Affectively AI"},"license":"MIT","_id":"@a0n/aeon@5.0.2","maintainers":[{"name":"buley","email":"buley@outlook.com"}],"homepage":"https://github.com/forkjoin-ai/aeon#readme","bugs":{"url":"https://github.com/forkjoin-ai/aeon/issues"},"dist":{"shasum":"47c911972a04c16fa0d95936c4869ca339f5a40b","tarball":"https://registry.npmjs.org/@a0n/aeon/-/aeon-5.0.2.tgz","fileCount":77,"integrity":"sha512-bR+t2T9bYoWdfxnmyopwRwtFCvr4mnHHiVW+DlU0wsJHQmiSIoc8w6oMNQJh/27EMomhT3H4EWVTyl+K62ANDA==","signatures":[{"sig":"MEUCIAxsHC0y+eHTtjZ+uX/4RHD8YGxU2w4gFDhZrkxo11TBAiEAoZ8YJTQsEUXXRiOgWXFY/UbkMEXGZ/IgpwSrRo5zP4Q=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":4388013},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=18.0.0"},"exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}},"./core":{"import":{"types":"./dist/core/index.d.ts","default":"./dist/core/index.js"},"require":{"types":"./dist/core/index.d.cts","default":"./dist/core/index.cjs"}},"./utils":{"import":{"types":"./dist/utils/index.d.ts","default":"./dist/utils/index.js"},"require":{"types":"./dist/utils/index.d.cts","default":"./dist/utils/index.cjs"}},"./crypto":{"import":{"types":"./dist/crypto/index.d.ts","default":"./dist/crypto/index.js"},"require":{"types":"./dist/crypto/index.d.cts","default":"./dist/crypto/index.cjs"}},"./offline":{"import":{"types":"./dist/offline/index.d.ts","default":"./dist/offline/index.js"},"require":{"types":"./dist/offline/index.d.cts","default":"./dist/offline/index.cjs"}},"./presence":{"import":{"types":"./dist/presence/index.d.ts","default":"./dist/presence/index.js"},"require":{"types":"./dist/presence/index.d.cts","default":"./dist/presence/index.cjs"}},"./versioning":{"import":{"types":"./dist/versioning/index.d.ts","default":"./dist/versioning/index.js"},"require":{"types":"./dist/versioning/index.d.cts","default":"./dist/versioning/index.cjs"}},"./compression":{"import":{"types":"./dist/compression/index.d.ts","default":"./dist/compression/index.js"},"require":{"types":"./dist/compression/index.d.cts","default":"./dist/compression/index.cjs"}},"./distributed":{"import":{"types":"./dist/distributed/index.d.ts","default":"./dist/distributed/index.js"},"require":{"types":"./dist/distributed/index.d.cts","default":"./dist/distributed/index.cjs"}},"./persistence":{"import":{"types":"./dist/persistence/index.d.ts","default":"./dist/persistence/index.js"},"require":{"types":"./dist/persistence/index.d.cts","default":"./dist/persistence/index.cjs"}},"./optimization":{"import":{"types":"./dist/optimization/index.d.ts","default":"./dist/optimization/index.js"},"require":{"types":"./dist/optimization/index.d.cts","default":"./dist/optimization/index.cjs"}}},"scripts":{"dev":"tsup --watch","lint":"eslint src --ext .ts","test":"vitest run","build":"tsup","clean":"rm -rf dist","format":"prettier --write src","lint:fix":"eslint src --ext .ts --fix","test:watch":"vitest","type-check":"tsc --noEmit","test:coverage":"vitest run --coverage","prepublishOnly":"npm run build"},"_npmUser":{"name":"buley","email":"buley@outlook.com"},"deprecated":"This package is deprecated and no longer supported. Do not use.","repository":{"url":"git+https://github.com/forkjoin-ai/aeon.git","type":"git"},"workspaces":["packages/*"],"_npmVersion":"11.11.0","description":"Distributed synchronization, schema versioning, and conflict resolution for real-time collaborative applications","directories":{},"_nodeVersion":"25.8.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","eslint":"^9.0.0","vitest":"^2.0.0","prettier":"^3.0.0","typescript":"^5.6.0","@types/node":"^22.0.0"},"peerDependencies":{"@affectively/auth":"^0.1.0","@a0n/aeon-flux-react":"workspace:*"},"peerDependenciesMeta":{"@affectively/auth":{"optional":true},"@a0n/aeon-flux-react":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/aeon_5.0.2_1773803809417_0.36685803262512584","host":"s3://npm-registry-packages-npm-production"}}},"time":{"created":"2026-03-18T02:47:25.373Z","modified":"2026-03-27T20:44:28.447Z","5.0.1":"2026-03-18T02:47:25.653Z","5.0.2":"2026-03-18T03:16:49.625Z"},"bugs":{"url":"https://github.com/forkjoin-ai/aeon/issues"},"author":{"name":"Affectively AI"},"license":"MIT","homepage":"https://github.com/forkjoin-ai/aeon#readme","keywords":["distributed","synchronization","sync","replication","versioning","migration","schema","crdt","collaboration","real-time","conflict-resolution","offline-first"],"repository":{"url":"git+https://github.com/forkjoin-ai/aeon.git","type":"git"},"description":"Distributed synchronization, schema versioning, and conflict resolution for real-time collaborative applications","maintainers":[{"name":"buley","email":"buley@outlook.com"}],"readme":"# Aeon\n\nA TypeScript toolkit for collaborative systems. At its center: **Aeon Flow**, a multiplexed frame protocol for moving many independent streams over one transport.\n\nThe package covers ground teams usually assemble themselves: transport, sync, offline queues, compression, presence, versioning, persistence, crypto, and topology analysis.\n\n## Install\n\n```bash\nbun add @a0n/aeon\n```\n\n```bash\nnpm install @a0n/aeon   # or yarn / pnpm\n```\n\n## Aeon Flow\n\nOne connection. Many independent streams. Less waiting behind unrelated work.\n\n```text\n┌──────────────────────────────────────────────────────────┐\n│                   10-byte Flow Frame                     │\n├──────────┬──────────┬───────┬────────────────────────────┤\n│ stream_id│ sequence │ flags │ length    │    payload ...  │\n│  (u16)   │  (u32)   │ (u8)  │ (u24)    │                 │\n└──────────┴──────────┴───────┴────────────────────────────┘\n```\n\n- Streams progress independently -- no head-of-line blocking\n- Frames can arrive out of order and reassemble correctly\n- Protocol overhead stays small (10 bytes per frame)\n- Same framing works across UDP, WebSocket, WebTransport, IPC\n\nThe UDP path includes MTU-aware fragmentation, ACK bitmaps, AIMD congestion control, and per-stream reassembly.\n\n### Quick Start: Flow Protocol\n\n```ts\nimport { AeonFlowProtocol, UDPFlowTransport } from '@a0n/aeon';\n\n// Set up transport\nconst transport = new UDPFlowTransport({\n  host: '0.0.0.0',\n  port: 4242,\n  remoteHost: 'target.example.com',\n  remotePort: 4242,\n  reliable: true,\n});\nawait transport.bind();\n\n// Create protocol instance\nconst flow = new AeonFlowProtocol(transport, {\n  role: 'client',\n  maxConcurrentStreams: 256,\n});\n\n// Open a parent stream and fork 3 children\nconst parentId = flow.open();\nconst childIds = flow.fork(parentId, 3);\n\n// Race: first child to complete wins, losers are vented\nconst { winner, result } = await flow.race(childIds);\n\n// Or fold: wait for all, merge results\nconst merged = await flow.fold(childIds, (results) => {\n  // results: Map<streamId, Uint8Array>\n  return concatBuffers([...results.values()]);\n});\n```\n\n### Quick Start: Sync Coordination\n\n```ts\nimport { SyncCoordinator } from '@a0n/aeon';\n\nconst coordinator = new SyncCoordinator();\n\ncoordinator.registerNode({\n  id: 'node-1',\n  address: 'localhost',\n  port: 3000,\n  status: 'online',\n  lastHeartbeat: new Date().toISOString(),\n  version: '1.0.0',\n  capabilities: ['sync', 'replicate'],\n});\n\nconst session = coordinator.createSyncSession('node-1', ['node-2', 'node-3']);\n```\n\n### Quick Start: Recovery Ledger\n\n```ts\nimport { RecoveryLedger } from '@a0n/aeon';\n\nconst ledger = new RecoveryLedger({\n  objectId: 'asset:app.bundle.js',\n  dataShardCount: 4,\n  parityShardCount: 2,\n});\n\nledger.registerRequest('req-a');\nledger.registerRequest('req-b');\n\nledger.recordShardObservation({\n  shardRole: 'data',\n  shardIndex: 0,\n  digest: 'sha256:data-0',\n  observedBy: 'edge-a',\n});\n\nledger.recordShardObservation({\n  shardRole: 'parity',\n  shardIndex: 0,\n  digest: 'sha256:parity-0',\n  observedBy: 'edge-b',\n});\n\nconst status = ledger.getStatus();\nif (status.canReconstruct) {\n  // Fold the request family once the merged shard ledger crosses threshold.\n}\n```\n\n### Quick Start: Schema Migrations\n\n```ts\nimport { MigrationEngine } from '@a0n/aeon';\n\nconst engine = new MigrationEngine();\n\nengine.registerMigration({\n  id: 'add-status-field',\n  version: '2.0.0',\n  name: 'Add user status field',\n  up: (data) => ({ ...data, status: 'active' }),\n  down: (data) => {\n    const { status, ...rest } = data;\n    return rest;\n  },\n  timestamp: new Date().toISOString(),\n  description: 'Adds status field to all user records',\n});\n```\n\n## Modules\n\nEverything is available from the root import. Subpath imports are available for tree-shaking:\n\n| Import | What it does |\n|--------|-------------|\n| `@a0n/aeon` | Everything (barrel export) |\n| `@a0n/aeon/core` | Core types and interfaces |\n| `@a0n/aeon/distributed` | Sync coordination, replication, conflict resolution, and recovery ledgers |\n| `@a0n/aeon/versioning` | Schema versions, migrations, tracking |\n| `@a0n/aeon/offline` | Queued work for unreliable or offline periods |\n| `@a0n/aeon/compression` | Compression and delta-sync helpers |\n| `@a0n/aeon/persistence` | In-memory and storage adapter surfaces |\n| `@a0n/aeon/presence` | Real-time node and session state |\n| `@a0n/aeon/crypto` | Signing and UCAN-related primitives |\n\nThe flow protocol, topology analysis, transport helpers, and federation modules are exported from the root barrel.\n\n## Related Packages\n\n| Package | Description |\n|---------|-------------|\n| [`@a0n/aeon-pipelines`](https://github.com/forkjoin-ai/aeon-pipelines) | Execution engine for fork/race/fold as computation primitives (race on speed, value, or any lambda) |\n| [`packages/shootoff`](./packages/shootoff/README.md) | Side-by-side protocol benchmarks against HTTP/1.1 and HTTP/2 |\n| [`packages/wall`](./packages/wall/README.md) | Command-line client and benchmark harness for Aeon Flow, including native raw-path Aeon blasts, preconnected launch-gate benchmarking, mixed UDP+TCP transport races, and direct bearer or `X-Aeon-*` auth injection |\n| `packages/nginx-flow-aeon` | nginx bridge for Aeon Flow behind HTTP infrastructure |\n| [`aeon-bazaar`](https://github.com/forkjoin-ai/aeon-bazaar) | Unbounded negotiation engine -- void walking, complement distributions |\n| [`aeon-neutral`](https://github.com/forkjoin-ai/aeon-neutral) | Bounded dispute resolution -- three-walker Skyrms mediation with convergence certificates |\n\n## Formal Surface\n\nTLA+ specifications for negotiation convergence (in `companion-tests/formal/`):\n\n| Spec | What it models |\n|------|---------------|\n| `NegotiationConvergence.tla` | Single-party fork/race/fold with BATNA threshold |\n| `MetacognitiveWalker.tla` | c0-c3 cognitive loop, kurtosis convergence |\n| `SkyrmsNadir.tla` | Two walkers converging via accumulated failure |\n| `SkyrmsThreeWalker.tla` | Mediator as third walker on the convergence site |\n\n## Documentation\n\n- [docs/README.md](./docs/README.md) -- repo docs index\n- [src/README.md](./src/README.md) -- source tree index\n- [Manuscript source](./docs/ebooks/145-log-rolling-pipelined-prefill/ch17-arxiv-manuscript.md) -- Chapter 17 formal manuscript\n- [Companion tests](./docs/ebooks/145-log-rolling-pipelined-prefill/companion-tests/README.md) -- reproducibility suite\n- [ROADMAP.md](./ROADMAP.md) -- near-term direction\n\n## License\n\nCopyright Taylor William Buley. All rights reserved.\n\nMIT\n","readmeFilename":"README.md"}