@affectively/aeon-flux 1.1.1 → 1.1.3
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 +64 -48
- package/README.md +47 -0
- package/package.json +5 -1
package/CHANGELOG.md
CHANGED
|
@@ -5,71 +5,87 @@ All notable changes to this project will be documented in this file.
|
|
|
5
5
|
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
|
6
6
|
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
7
7
|
|
|
8
|
-
## [
|
|
8
|
+
## [1.1.3] - 2026-02-07
|
|
9
9
|
|
|
10
10
|
### Added
|
|
11
11
|
|
|
12
|
-
|
|
12
|
+
- `/esi` export path for ESI hooks (`useESITier`, `useESIEmotionState`, etc.)
|
|
13
13
|
|
|
14
|
-
|
|
15
|
-
- `offline/types.ts` - Type definitions for offline operations, queue config, sync, conflicts, network state
|
|
16
|
-
- `offline/encryption.ts` - AES-256-GCM encryption using Web Crypto API with UCAN or session-based key derivation
|
|
17
|
-
- `offline/encrypted-queue.ts` - Priority queuing (high/normal/low) with 50MB capacity, automatic compaction, retry logic
|
|
14
|
+
## [1.1.2] - 2026-02-07
|
|
18
15
|
|
|
19
|
-
|
|
20
|
-
- `sync/coordinator.ts` - Network state tracking, bandwidth profiling, adaptive batch sizing
|
|
21
|
-
- `sync/conflict-resolver.ts` - Conflict detection with resolution strategies (local-wins, remote-wins, merge, last-modified, manual)
|
|
16
|
+
### Documentation
|
|
22
17
|
|
|
23
|
-
-
|
|
24
|
-
|
|
25
|
-
|
|
18
|
+
- Added ESI Global State injection pattern to README
|
|
19
|
+
- Documented tier-based hooks (`useESITier`, `useESIEmotionState`, `useESIFeature`, `useGlobalESIState`)
|
|
20
|
+
- Added `/esi` export path documentation
|
|
26
21
|
|
|
27
|
-
|
|
28
|
-
- `POST /sync-queue` - Receive offline queue batch
|
|
29
|
-
- `GET /queue-status` - Return pending operations and conflicts
|
|
30
|
-
- `POST /resolve-conflict` - Manual conflict resolution
|
|
22
|
+
## [1.1.1] - 2026-02-07
|
|
31
23
|
|
|
32
|
-
|
|
33
|
-
- `PushOptions` - Push notification configuration
|
|
34
|
-
- `InstallOptions` - PWA install prompt configuration
|
|
35
|
-
- Enhanced `OfflineOptions` with encryption, sync, and storage sub-configs
|
|
24
|
+
### Fixed
|
|
36
25
|
|
|
37
|
-
|
|
26
|
+
- CLI binary path corrected to `packages/cli/dist/index.js`
|
|
38
27
|
|
|
39
|
-
-
|
|
40
|
-
- `useNetworkState` - Network state and bandwidth monitoring
|
|
41
|
-
- `useConflicts` - Conflict management with resolution methods
|
|
28
|
+
## [1.1.0] - 2026-02-07
|
|
42
29
|
|
|
43
|
-
|
|
44
|
-
- `InstallPrompt` - PWA install prompt with iOS detection (+ `useInstallPrompt` hook)
|
|
45
|
-
- `PushNotifications` - Push subscription management (+ `usePushNotifications` hook)
|
|
46
|
-
- `OfflineDiagnostics` - Composable diagnostic panels for network, service worker, cache, queue, and conflicts
|
|
30
|
+
### Added
|
|
47
31
|
|
|
48
|
-
|
|
32
|
+
- **Edge Side Inference (ESI)** - AI inference at render time
|
|
33
|
+
- `<ESI.Infer>` - Basic inference with caching
|
|
34
|
+
- `<ESI.Structured>` - Zod schema validation for structured output
|
|
35
|
+
- `<ESI.If>` - Conditional rendering based on AI decisions
|
|
36
|
+
- `<ESI.Collaborative>` - Presence-aware inference
|
|
37
|
+
- `<ESI.Optimize>` - Self-improving content generation
|
|
38
|
+
- **Tier-based feature gating** - Control features by user tier (free/starter/pro/enterprise)
|
|
39
|
+
- **Global state injection** - `window.__AEON_ESI_STATE__` for zero-CLS personalization
|
|
49
40
|
|
|
50
|
-
|
|
51
|
-
- `offline/encryption.test.ts` - 20 tests
|
|
52
|
-
- `offline/encrypted-queue.test.ts` - 35 tests
|
|
53
|
-
- `sync/conflict-resolver.test.ts` - 38 tests
|
|
54
|
-
- `sync/coordinator.test.ts` - 33 tests
|
|
41
|
+
## [1.0.0] - 2026-02-01
|
|
55
42
|
|
|
56
|
-
|
|
43
|
+
### Core Features
|
|
57
44
|
|
|
58
|
-
|
|
45
|
+
- **Zero-Dependency Rendering** - Single HTML with inline CSS, assets, fonts
|
|
46
|
+
- **Hyperpersonalized Routing** - Routes adapt based on user context
|
|
47
|
+
- **~20KB WASM Runtime** - Rust-compiled WebAssembly for performance
|
|
48
|
+
- **Multi-layer Caching** - KV (1ms) -> D1 (5ms) -> Session (50ms)
|
|
49
|
+
- **Speculative Pre-rendering** - Zero-latency navigation via prediction
|
|
50
|
+
- **Real-time Collaboration** - CRDT-based conflict-free editing
|
|
51
|
+
- **GitHub PR Publishing** - Visual edits compile to TSX and create PRs
|
|
52
|
+
|
|
53
|
+
### Runtime
|
|
59
54
|
|
|
60
|
-
-
|
|
61
|
-
-
|
|
62
|
-
- Real-time collaboration via WebSocket
|
|
63
|
-
- CRDT-based conflict resolution
|
|
55
|
+
- Durable Objects for session management
|
|
56
|
+
- WebSocket-based real-time sync
|
|
64
57
|
- Service worker with total preload strategy
|
|
65
|
-
-
|
|
66
|
-
- CLI for project scaffolding and builds
|
|
67
|
-
- Build system with pre-rendering support
|
|
58
|
+
- Speculation Rules API support
|
|
68
59
|
|
|
69
|
-
|
|
60
|
+
### React Integration
|
|
70
61
|
|
|
71
|
-
|
|
62
|
+
- `useAeonPage()` - Full page context with presence and sync
|
|
63
|
+
- `usePresence()` - Collaborative cursors and editing state
|
|
64
|
+
- `useAeonData<T>()` - Typed collaborative data store
|
|
65
|
+
- `useCollaborativeInput()` - Ready-to-use collaborative inputs
|
|
66
|
+
- `useOfflineStatus()` - Network awareness
|
|
67
|
+
|
|
68
|
+
### CLI
|
|
69
|
+
|
|
70
|
+
- `aeon init` - Project scaffolding
|
|
71
|
+
- `aeon dev` - Development server with hot reload
|
|
72
|
+
- `aeon build` - Production build for Cloudflare Workers
|
|
73
|
+
- `aeon start` - Production server
|
|
74
|
+
|
|
75
|
+
### Offline Support
|
|
76
|
+
|
|
77
|
+
- Encrypted offline queue with AES-256-GCM
|
|
78
|
+
- Priority-based sync (high/normal/low)
|
|
79
|
+
- Conflict resolution strategies (local-wins, remote-wins, merge, manual)
|
|
80
|
+
- Push notifications with background sync
|
|
81
|
+
|
|
82
|
+
### Performance
|
|
72
83
|
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
84
|
+
| Metric | Value |
|
|
85
|
+
|--------|-------|
|
|
86
|
+
| Requests per page | 1 |
|
|
87
|
+
| Bundle size | ~110KB |
|
|
88
|
+
| TTFB | 50ms |
|
|
89
|
+
| First Paint | <100ms |
|
|
90
|
+
| TTI | <300ms |
|
|
91
|
+
| CLS | 0 |
|
package/README.md
CHANGED
|
@@ -346,6 +346,49 @@ export default function Page() {
|
|
|
346
346
|
| `useOfflineStatus()` | Offline awareness |
|
|
347
347
|
| `useESI()` | ESI context |
|
|
348
348
|
| `useESIInfer()` | Programmatic inference |
|
|
349
|
+
| `useESITier()` | User tier for feature gating |
|
|
350
|
+
| `useESIEmotionState()` | Current emotional context |
|
|
351
|
+
| `useESIFeature(name)` | Check feature availability |
|
|
352
|
+
| `useGlobalESIState()` | Full ESI state object |
|
|
353
|
+
|
|
354
|
+
## ESI Global State Injection
|
|
355
|
+
|
|
356
|
+
For zero-CLS tier-aware rendering, inject ESI state in the `<head>`:
|
|
357
|
+
|
|
358
|
+
```html
|
|
359
|
+
<script>
|
|
360
|
+
window.__AEON_ESI_STATE__ = {
|
|
361
|
+
userTier: 'pro', // free | starter | pro | enterprise
|
|
362
|
+
emotionState: {
|
|
363
|
+
primary: 'focused',
|
|
364
|
+
valence: 0.3,
|
|
365
|
+
arousal: 0.6
|
|
366
|
+
},
|
|
367
|
+
preferences: {
|
|
368
|
+
theme: 'dark',
|
|
369
|
+
reducedMotion: false
|
|
370
|
+
},
|
|
371
|
+
sessionId: 'abc123',
|
|
372
|
+
localHour: 14,
|
|
373
|
+
timezone: 'America/New_York'
|
|
374
|
+
};
|
|
375
|
+
</script>
|
|
376
|
+
```
|
|
377
|
+
|
|
378
|
+
Then use in components:
|
|
379
|
+
|
|
380
|
+
```tsx
|
|
381
|
+
import { useESITier } from '@affectively/aeon-flux/esi';
|
|
382
|
+
|
|
383
|
+
function PremiumFeature() {
|
|
384
|
+
const tier = useESITier();
|
|
385
|
+
|
|
386
|
+
if (tier === 'free') {
|
|
387
|
+
return <UpgradePrompt />;
|
|
388
|
+
}
|
|
389
|
+
|
|
390
|
+
return <AdvancedAnalytics />;
|
|
391
|
+
}
|
|
349
392
|
|
|
350
393
|
## Configuration
|
|
351
394
|
|
|
@@ -390,6 +433,10 @@ export default {
|
|
|
390
433
|
|
|
391
434
|
| Package | Description |
|
|
392
435
|
|---------|-------------|
|
|
436
|
+
| `@affectively/aeon-flux` | Main package (npm) |
|
|
437
|
+
| `@affectively/aeon-flux/esi` | ESI hooks for tier gating |
|
|
438
|
+
| `@affectively/aeon-flux/react` | React bindings |
|
|
439
|
+
| `@affectively/aeon-flux/server` | Server utilities |
|
|
393
440
|
| `@affectively/aeon-pages-runtime` | Runtime (npm) |
|
|
394
441
|
| `@affectively/aeon-pages-runtime/router` | Personalized routing + ESI |
|
|
395
442
|
| `@affectively/aeon-pages-runtime/server` | Server utilities |
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@affectively/aeon-flux",
|
|
3
|
-
"version": "1.1.
|
|
3
|
+
"version": "1.1.3",
|
|
4
4
|
"description": "The CMS IS the website. Collaborative page framework with CRDT-based flux state and zero-CLS skeleton rendering.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"workspaces": [
|
|
@@ -16,6 +16,10 @@
|
|
|
16
16
|
"import": "./packages/runtime/dist/index.js",
|
|
17
17
|
"types": "./packages/runtime/dist/index.d.ts"
|
|
18
18
|
},
|
|
19
|
+
"./esi": {
|
|
20
|
+
"import": "./packages/runtime/dist/router/index.js",
|
|
21
|
+
"types": "./packages/runtime/dist/router/index.d.ts"
|
|
22
|
+
},
|
|
19
23
|
"./server": {
|
|
20
24
|
"import": "./packages/runtime/dist/server.js",
|
|
21
25
|
"types": "./packages/runtime/dist/server.d.ts"
|