64 lines
4.7 KiB
Markdown
64 lines
4.7 KiB
Markdown
# UJSX Research Index
|
|
|
|
All research documents for the `@alkdev/ujsx` rewrite. This project is a universal JSX IR that treats JSX as an intermediate representation for multi-target rendering (markdown primary, graph/HTML/etc. future).
|
|
|
|
## Architecture & Design
|
|
|
|
| Doc | Description |
|
|
|-----|-------------|
|
|
| [agent-hud-architecture.md](./agent-hud-architecture.md) | Full HUD architecture: event log, adaptive density, cache-aware system prompt, plugin integration |
|
|
| [ujsx-v2-typebox-rewrite.md](./ujsx-v2-typebox-rewrite.md) | The rewrite plan: TypeBox-schema-driven UJSX, bi-directional transforms, JSX syntax, HTML-agnostic core |
|
|
| [signals-ujsx-reactive-pipeline.md](./signals-ujsx-reactive-pipeline.md) | Preact Signals integration: `computed()` components, reactive transform pipeline, signals+TypeBox interaction |
|
|
|
|
## Ecosystem & Feasibility
|
|
|
|
| Doc | Description |
|
|
|-----|-------------|
|
|
| [unist-ecosystem-jsx-to-markdown.md](./unist-ecosystem-jsx-to-markdown.md) | hast/mdast/syntax-tree ecosystem, pipeline feasibility, element mappings, alternative approaches |
|
|
| [hono-jsx-ssr-llm-hud.md](./hono-jsx-ssr-llm-hud.md) | Hono JSXNode internals, SSR pipeline, custom walker feasibility for markdown rendering |
|
|
|
|
## TypeBox Patterns
|
|
|
|
| Doc | Description |
|
|
|-----|-------------|
|
|
| [typebox-module-type-registry.md](./typebox-module-type-registry.md) | `Type.Module` as type registry, `Import` mechanics, runtime schema access, implications for UJSX |
|
|
| [typebox-module-valuepointer.md](./typebox-module-valuepointer.md) | `TModule` + `ValuePointer` API, `ComputeModuleProperties`, Function types, practical patterns |
|
|
|
|
## Prior Art & Source Reference
|
|
|
|
| Doc | Description |
|
|
|-----|-------------|
|
|
| [prior-poc-source-reference.md](./prior-poc-source-reference.md) | Code from `/workspace/aui/ujsx` POC: what to preserve, what to remove/rewrite, TypeBox research examples |
|
|
|
|
## External Resources
|
|
|
|
| Location | Description |
|
|
|----------|-------------|
|
|
| `/workspace/aui/ujsx/` | Prior POC: core types, h() factory, HostConfig, Graphology host, TransformRegistry, StreamingTransformer |
|
|
| `/workspace/aui/SUMMARY.md` | POC summary with architecture, strengths, gaps, recommendations |
|
|
| `/workspace/research/typebox_research/ujsx/` | TypeBox Module examples: `unist.ts` (unist schema), `ujsx.ts` (UJSX schema draft) |
|
|
| `/workspace/@alkdev/typebox/` | TypeBox fork source: Module, ValuePointer, Value system |
|
|
| `/workspace/signals/packages/core/` | Preact Signals core: signal, computed, effect, batch, createModel |
|
|
| `/workspace/conversations/research/` | Original research docs from conversation session |
|
|
|
|
## Reconciler Implementation Plan
|
|
|
|
| Doc | Description |
|
|
|-----|-------------|
|
|
| [reconciler/README.md](./reconciler/README.md) | **Index** — Phase overview, dependency graph, parallelism opportunities, key design decisions |
|
|
| [reconciler/00-KEY-FIELD-DESIGN.md](./reconciler/00-KEY-FIELD-DESIGN.md) | Phase 0: Add `key?: string` as first-class field on `UElement` |
|
|
| [reconciler/01-reactive-host-bridge.md](./reconciler/01-reactive-host-bridge.md) | Phase 1: Connect reactive layer to HostConfig reconciler via fiber tree |
|
|
| [reconciler/02-key-based-children-reconciliation.md](./reconciler/02-key-based-children-reconciliation.md) | Phase 2: Key-based children matching with LIS algorithm for move detection |
|
|
| [reconciler/03-unmount-dispose-support.md](./reconciler/03-unmount-dispose-support.md) | Phase 3: Proper disposal — unmount, signal cleanup, instance teardown |
|
|
| [reconciler/04-typebox-optimization-layer.md](./reconciler/04-typebox-optimization-layer.md) | Phase 4: TypeBox Value primitives as incremental performance optimizations |
|
|
| [reconciler/05-flowgraph-host-configs.md](./reconciler/05-flowgraph-host-configs.md) | Phase 5: Flowgraph HostConfig implementations (graphology DAG, reactive executor) |
|
|
|
|
## Key Decisions from Prior Discussion
|
|
|
|
1. **TypeBox Module IS the type registry** — no separate registry needed. `ValuePointer.Get/Set` for runtime access, `Module.Import` for resolved schemas.
|
|
2. **Signals for reactivity** — `computed()` wrapping component functions so unchanged inputs skip re-evaluation. NOT in the registry, but in the transformation process.
|
|
3. **Bi-directional transforms** — same registry, `direction` parameter. UJSX↔mdast, UJSX↔hast. Rules match on TypeBox schemas, not string tags.
|
|
4. **HTML-agnostic core** — no onClick, className, aria-* in UniversalProps. Hosts handle platform specifics.
|
|
5. **Actual JSX syntax** — `jsxImportSource: "@alkdev/ujsx"` with jsx-runtime exports.
|
|
6. **HostConfig preserved** — same reconciler pattern from POC, but mount-only → full reconciliation.
|
|
7. **Platform agnostic** — no Deno/Node-specific APIs in core. Published as `@alkdev/ujsx`. |