annotate infinite_canvas/README.md @ 282:6bd4a3990696 default tip

Add cross-platform canvas orchestration and typed composer Enable native ARM dependencies, macOS Copilot orchestration, portable service supervision, CPU dictation, and a shared N-key speak-or-type composer. Co-authored-by: Copilot <[email protected]> Copilot-Session: f68442b1-fa8f-46a0-9689-81710613bbd4
author MrJuneJune <me@mrjunejune.com>
date Thu, 20 Aug 2026 20:45:25 -0700
parents c57149ad216e
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
276
b55c22cff335 Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
1 # Infinite Canvas
b55c22cff335 Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
2
b55c22cff335 Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
3 Native and WebAssembly Raylib 6 prototype for a world-space, immediate-mode
b55c22cff335 Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
4 infinite canvas.
b55c22cff335 Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
5
b55c22cff335 Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
6 ## Build and run
b55c22cff335 Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
7
b55c22cff335 Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
8 ```bash
282
6bd4a3990696 Add cross-platform canvas orchestration and typed composer
MrJuneJune <me@mrjunejune.com>
parents: 281
diff changeset
9 # Native development build with Raygui controls. This automatically selects
6bd4a3990696 Add cross-platform canvas orchestration and typed composer
MrJuneJune <me@mrjunejune.com>
parents: 281
diff changeset
10 # Linux, macOS, or Windows and the host CPU architecture.
276
b55c22cff335 Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
11 bazel run //infinite_canvas:dev
b55c22cff335 Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
12
b55c22cff335 Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
13 # Start directly in the ten-browser stress scene
b55c22cff335 Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
14 INFINITE_CANVAS_BROWSER_STRESS=1 bazel run //infinite_canvas:dev
b55c22cff335 Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
15
b55c22cff335 Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
16 # Native build without development UI
b55c22cff335 Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
17 bazel run //infinite_canvas:app
b55c22cff335 Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
18
b55c22cff335 Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
19 # Browser build and local server
b55c22cff335 Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
20 bazel build //infinite_canvas:infinite_canvas_wasm
b55c22cff335 Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
21 bazel run //infinite_canvas:serve
b55c22cff335 Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
22 ```
b55c22cff335 Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
23
282
6bd4a3990696 Add cross-platform canvas orchestration and typed composer
MrJuneJune <me@mrjunejune.com>
parents: 281
diff changeset
24 ### Native platform support
6bd4a3990696 Add cross-platform canvas orchestration and typed composer
MrJuneJune <me@mrjunejune.com>
parents: 281
diff changeset
25
6bd4a3990696 Add cross-platform canvas orchestration and typed composer
MrJuneJune <me@mrjunejune.com>
parents: 281
diff changeset
26 | Host | Canvas and CEF | Copilot orchestration |
6bd4a3990696 Add cross-platform canvas orchestration and typed composer
MrJuneJune <me@mrjunejune.com>
parents: 281
diff changeset
27 | --- | --- | --- |
6bd4a3990696 Add cross-platform canvas orchestration and typed composer
MrJuneJune <me@mrjunejune.com>
parents: 281
diff changeset
28 | Linux x86-64 | Supported | Supported |
6bd4a3990696 Add cross-platform canvas orchestration and typed composer
MrJuneJune <me@mrjunejune.com>
parents: 281
diff changeset
29 | macOS Apple Silicon | Supported | Supported |
6bd4a3990696 Add cross-platform canvas orchestration and typed composer
MrJuneJune <me@mrjunejune.com>
parents: 281
diff changeset
30 | macOS Intel | Supported | Supported |
6bd4a3990696 Add cross-platform canvas orchestration and typed composer
MrJuneJune <me@mrjunejune.com>
parents: 281
diff changeset
31 | Windows ARM64 | Supported | Not yet; uses the explicit unavailable-service response |
6bd4a3990696 Add cross-platform canvas orchestration and typed composer
MrJuneJune <me@mrjunejune.com>
parents: 281
diff changeset
32 | Windows x86-64 | Supported | Not yet; uses the explicit unavailable-service response |
6bd4a3990696 Add cross-platform canvas orchestration and typed composer
MrJuneJune <me@mrjunejune.com>
parents: 281
diff changeset
33
6bd4a3990696 Add cross-platform canvas orchestration and typed composer
MrJuneJune <me@mrjunejune.com>
parents: 281
diff changeset
34 The default `//infinite_canvas:dev` and `//infinite_canvas:app` targets select
6bd4a3990696 Add cross-platform canvas orchestration and typed composer
MrJuneJune <me@mrjunejune.com>
parents: 281
diff changeset
35 the current host automatically. The explicit `//config:macos_arm64` and
6bd4a3990696 Add cross-platform canvas orchestration and typed composer
MrJuneJune <me@mrjunejune.com>
parents: 281
diff changeset
36 `//config:windows_arm64` platform targets are intended for CI and reproducible
6bd4a3990696 Add cross-platform canvas orchestration and typed composer
MrJuneJune <me@mrjunejune.com>
parents: 281
diff changeset
37 build selection:
6bd4a3990696 Add cross-platform canvas orchestration and typed composer
MrJuneJune <me@mrjunejune.com>
parents: 281
diff changeset
38
6bd4a3990696 Add cross-platform canvas orchestration and typed composer
MrJuneJune <me@mrjunejune.com>
parents: 281
diff changeset
39 ```bash
6bd4a3990696 Add cross-platform canvas orchestration and typed composer
MrJuneJune <me@mrjunejune.com>
parents: 281
diff changeset
40 bazel build //infinite_canvas:dev_bin --platforms=//config:macos_arm64
6bd4a3990696 Add cross-platform canvas orchestration and typed composer
MrJuneJune <me@mrjunejune.com>
parents: 281
diff changeset
41 bazel build //infinite_canvas:dev_bin --platforms=//config:windows_arm64
6bd4a3990696 Add cross-platform canvas orchestration and typed composer
MrJuneJune <me@mrjunejune.com>
parents: 281
diff changeset
42 ```
6bd4a3990696 Add cross-platform canvas orchestration and typed composer
MrJuneJune <me@mrjunejune.com>
parents: 281
diff changeset
43
6bd4a3990696 Add cross-platform canvas orchestration and typed composer
MrJuneJune <me@mrjunejune.com>
parents: 281
diff changeset
44 These commands require a matching native C/C++ toolchain. They do not imply
6bd4a3990696 Add cross-platform canvas orchestration and typed composer
MrJuneJune <me@mrjunejune.com>
parents: 281
diff changeset
45 cross-compilation from Linux. Raylib 6.0 and CEF 151 are selected by both OS
6bd4a3990696 Add cross-platform canvas orchestration and typed composer
MrJuneJune <me@mrjunejune.com>
parents: 281
diff changeset
46 and CPU, so an ARM64 host no longer links x86-64 browser or rendering
6bd4a3990696 Add cross-platform canvas orchestration and typed composer
MrJuneJune <me@mrjunejune.com>
parents: 281
diff changeset
47 libraries.
6bd4a3990696 Add cross-platform canvas orchestration and typed composer
MrJuneJune <me@mrjunejune.com>
parents: 281
diff changeset
48
276
b55c22cff335 Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
49 Open `http://127.0.0.1:4343/index.html` after starting the server. Pass a
b55c22cff335 Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
50 different port as an argument only when needed.
b55c22cff335 Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
51
b55c22cff335 Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
52 The native development target opens at 1920x1200 and starts with a gallery
b55c22cff335 Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
53 layout containing one non-overlapping example of every entity type.
b55c22cff335 Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
54
b55c22cff335 Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
55 Theme mode defaults to `auto`, which follows the OS light/dark preference at
b55c22cff335 Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
56 startup. Rendering consumes a shared semantic `Canvas_Theme` palette for the
b55c22cff335 Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
57 canvas, developer controls, and camera-pinned notifications. Until the planned
b55c22cff335 Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
58 config file lands, `INFINITE_CANVAS_THEME=light|dark|auto` provides an explicit
b55c22cff335 Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
59 override. The developer panel also includes a live light/dark mode toggle.
b55c22cff335 Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
60
b55c22cff335 Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
61 ## Controls
b55c22cff335 Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
62
b55c22cff335 Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
63 - Middle-mouse drag, or Space + left-mouse drag: pan
278
8d560f50ed4c Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents: 276
diff changeset
64 - Mouse wheel: scroll vertically
8d560f50ed4c Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents: 276
diff changeset
65 - Ctrl/Cmd + mouse wheel: zoom around the cursor
276
b55c22cff335 Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
66 - WASD or arrow keys: pan (disabled while a text area has keyboard focus)
b55c22cff335 Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
67 - Left-mouse drag on an entity: select and move it
b55c22cff335 Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
68 - `P`: pin or unpin the selected entity in screen space so it remains visible
278
8d560f50ed4c Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents: 276
diff changeset
69 while the camera pans and zooms; pinned entities show a Lucide pin glyph
280
49e9e591c9bb Add persistent dictation, prewarmed WebRTC speech input, Copilot SDK routing, animated conversation lifecycle controls, parking, and architecture coverage.
MrJuneJune <me@mrjunejune.com>
parents: 278
diff changeset
70 - `M`: show centered live dictation text and toggle microphone capture
282
6bd4a3990696 Add cross-platform canvas orchestration and typed composer
MrJuneJune <me@mrjunejune.com>
parents: 281
diff changeset
71 - `N`: open and focus the same Dictation entity for keyboard input
6bd4a3990696 Add cross-platform canvas orchestration and typed composer
MrJuneJune <me@mrjunejune.com>
parents: 281
diff changeset
72 - `Enter`: send the shared spoken or typed thought to the spatial agent
6bd4a3990696 Add cross-platform canvas orchestration and typed composer
MrJuneJune <me@mrjunejune.com>
parents: 281
diff changeset
73 - `Shift+Enter`: insert a newline while typing in the Dictation entity
280
49e9e591c9bb Add persistent dictation, prewarmed WebRTC speech input, Copilot SDK routing, animated conversation lifecycle controls, parking, and architecture coverage.
MrJuneJune <me@mrjunejune.com>
parents: 278
diff changeset
74 - `Ctrl/Cmd+Enter`: submit the selected text area's thought to Copilot
278
8d560f50ed4c Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents: 276
diff changeset
75 - `Delete`/`Backspace`: fade out and remove the selected entity
276
b55c22cff335 Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
76 - Development toolbar: spawn/clear entities, reset the camera, or restore the
278
8d560f50ed4c Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents: 276
diff changeset
77 deterministic demo scene; spawned entities fade in and Clear fades all
280
49e9e591c9bb Add persistent dictation, prewarmed WebRTC speech input, Copilot SDK routing, animated conversation lifecycle controls, parking, and architecture coverage.
MrJuneJune <me@mrjunejune.com>
parents: 278
diff changeset
78 entities out before removal. Use the header arrow to collapse the toolbar
49e9e591c9bb Add persistent dictation, prewarmed WebRTC speech input, Copilot SDK routing, animated conversation lifecycle controls, parking, and architecture coverage.
MrJuneJune <me@mrjunejune.com>
parents: 278
diff changeset
79 into a small restore button.
276
b55c22cff335 Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
80 - `View camera context`: open a live, scrollable snapshot of entities
b55c22cff335 Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
81 intersecting the camera viewport and their current semantic values
278
8d560f50ed4c Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents: 276
diff changeset
82 - `Lucide icon gallery`: create or revisit a dedicated canvas region containing
8d560f50ed4c Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents: 276
diff changeset
83 the complete searchable, scrollable Lucide 1.31.0 icon set and fit the camera
8d560f50ed4c Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents: 276
diff changeset
84 to it
276
b55c22cff335 Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
85 - `10 browser stress scene`: lay out ten compact independent browser views for
b55c22cff335 Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
86 performance testing
b55c22cff335 Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
87 - `White`/`Grid`: toggle the optional grid; the default canvas is pure white
b55c22cff335 Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
88
b55c22cff335 Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
89 Canvas primitives include shapes, lines, text, buttons, editable text areas,
b55c22cff335 Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
90 dropdowns, accordions, cards, calendars, switches, tables, notifications,
b55c22cff335 Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
91 scrollable areas, images, and web content. Accordions
b55c22cff335 Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
92 expand with eased height, chevron, divider, and content transitions; cards
b55c22cff335 Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
93 toggle emphasis, calendars select dates, and switches animate their track color
b55c22cff335 Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
94 and thumb position when toggled. The default browser build embeds
b55c22cff335 Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
95 `https://mrjunejune.com` in a camera-tracked iframe. Native builds open
b55c22cff335 Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
96 `https://www.google.com` in a CEF off-screen browser whose pixel buffer is
b55c22cff335 Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
97 uploaded into a Raylib texture. It remains inside the canvas and participates
b55c22cff335 Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
98 in pan, zoom, clipping, and entity dragging on Windows, macOS, and Linux. Web
278
8d560f50ed4c Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents: 276
diff changeset
99 views show a Raylib-rendered Lucide back/forward toolbar and current URL only
8d560f50ed4c Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents: 276
diff changeset
100 while selected. The toolbar eases open by pushing the page viewport downward
8d560f50ed4c Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents: 276
diff changeset
101 and reverses the transition when deselected. Click the URL field to edit it;
8d560f50ed4c Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents: 276
diff changeset
102 Enter navigates, Escape cancels, and standard Ctrl/Cmd clipboard and selection
8d560f50ed4c Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents: 276
diff changeset
103 shortcuts work. Drag the remaining outer edge to move the view and drag the
8d560f50ed4c Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents: 276
diff changeset
104 bottom-right handle to resize it. Embedded pages inherit the selected canvas
8d560f50ed4c Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents: 276
diff changeset
105 light or dark color scheme where the browser backend supports it. Multiple web entities have independent
276
b55c22cff335 Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
106 browser instances, URLs, focus, input, and rendering. Browser resources are
b55c22cff335 Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
107 assigned only to visible entities, off-screen views are suspended, and the
b55c22cff335 Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
108 native CEF pool supports up to twelve live browsers. Small background views
b55c22cff335 Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
109 render at a reduced frame rate, larger views receive a moderate frame budget,
b55c22cff335 Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
110 and the focused view runs at 30 FPS so scenes with ten compact browsers remain
b55c22cff335 Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
111 responsive without giving every page the maximum rendering budget. Native
b55c22cff335 Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
112 browser viewport and texture resolution follow the displayed view size in
b55c22cff335 Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
113 64-pixel buckets, capped at 1280x800, so resized views become sharper without
b55c22cff335 Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
114 reallocating continuously during a drag.
b55c22cff335 Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
115
278
8d560f50ed4c Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents: 276
diff changeset
116 The Lucide gallery is one scalable Raylib-rendered canvas entity rather than
8d560f50ed4c Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents: 276
diff changeset
117 thousands of individual scene entities or an embedded browser. Reopening it
8d560f50ed4c Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents: 276
diff changeset
118 reuses the existing entity and moves the camera back to its fitted bounds. Its
8d560f50ed4c Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents: 276
diff changeset
119 ISC-licensed vector data is generated from Lucide 1.31.0 and the visible grid
8d560f50ed4c Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents: 276
diff changeset
120 rows are drawn directly with Raylib primitives.
8d560f50ed4c Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents: 276
diff changeset
121
280
49e9e591c9bb Add persistent dictation, prewarmed WebRTC speech input, Copilot SDK routing, animated conversation lifecycle controls, parking, and architecture coverage.
MrJuneJune <me@mrjunejune.com>
parents: 278
diff changeset
122 ## Spatial agent sessions
49e9e591c9bb Add persistent dictation, prewarmed WebRTC speech input, Copilot SDK routing, animated conversation lifecycle controls, parking, and architecture coverage.
MrJuneJune <me@mrjunejune.com>
parents: 278
diff changeset
123
49e9e591c9bb Add persistent dictation, prewarmed WebRTC speech input, Copilot SDK routing, animated conversation lifecycle controls, parking, and architecture coverage.
MrJuneJune <me@mrjunejune.com>
parents: 278
diff changeset
124 Authenticate the Copilot CLI once:
49e9e591c9bb Add persistent dictation, prewarmed WebRTC speech input, Copilot SDK routing, animated conversation lifecycle controls, parking, and architecture coverage.
MrJuneJune <me@mrjunejune.com>
parents: 278
diff changeset
125
49e9e591c9bb Add persistent dictation, prewarmed WebRTC speech input, Copilot SDK routing, animated conversation lifecycle controls, parking, and architecture coverage.
MrJuneJune <me@mrjunejune.com>
parents: 278
diff changeset
126 ```bash
49e9e591c9bb Add persistent dictation, prewarmed WebRTC speech input, Copilot SDK routing, animated conversation lifecycle controls, parking, and architecture coverage.
MrJuneJune <me@mrjunejune.com>
parents: 278
diff changeset
127 bazel run //mrjunejune:run_inference_stack -- --authenticate
49e9e591c9bb Add persistent dictation, prewarmed WebRTC speech input, Copilot SDK routing, animated conversation lifecycle controls, parking, and architecture coverage.
MrJuneJune <me@mrjunejune.com>
parents: 278
diff changeset
128 ```
49e9e591c9bb Add persistent dictation, prewarmed WebRTC speech input, Copilot SDK routing, animated conversation lifecycle controls, parking, and architecture coverage.
MrJuneJune <me@mrjunejune.com>
parents: 278
diff changeset
129
49e9e591c9bb Add persistent dictation, prewarmed WebRTC speech input, Copilot SDK routing, animated conversation lifecycle controls, parking, and architecture coverage.
MrJuneJune <me@mrjunejune.com>
parents: 278
diff changeset
130 Then start dictation, the Copilot LiteLLM gateway, and the canvas with one
49e9e591c9bb Add persistent dictation, prewarmed WebRTC speech input, Copilot SDK routing, animated conversation lifecycle controls, parking, and architecture coverage.
MrJuneJune <me@mrjunejune.com>
parents: 278
diff changeset
131 target:
49e9e591c9bb Add persistent dictation, prewarmed WebRTC speech input, Copilot SDK routing, animated conversation lifecycle controls, parking, and architecture coverage.
MrJuneJune <me@mrjunejune.com>
parents: 278
diff changeset
132
49e9e591c9bb Add persistent dictation, prewarmed WebRTC speech input, Copilot SDK routing, animated conversation lifecycle controls, parking, and architecture coverage.
MrJuneJune <me@mrjunejune.com>
parents: 278
diff changeset
133 ```bash
49e9e591c9bb Add persistent dictation, prewarmed WebRTC speech input, Copilot SDK routing, animated conversation lifecycle controls, parking, and architecture coverage.
MrJuneJune <me@mrjunejune.com>
parents: 278
diff changeset
134 bazel run //infinite_canvas:orchestration_dev
49e9e591c9bb Add persistent dictation, prewarmed WebRTC speech input, Copilot SDK routing, animated conversation lifecycle controls, parking, and architecture coverage.
MrJuneJune <me@mrjunejune.com>
parents: 278
diff changeset
135 ```
49e9e591c9bb Add persistent dictation, prewarmed WebRTC speech input, Copilot SDK routing, animated conversation lifecycle controls, parking, and architecture coverage.
MrJuneJune <me@mrjunejune.com>
parents: 278
diff changeset
136
49e9e591c9bb Add persistent dictation, prewarmed WebRTC speech input, Copilot SDK routing, animated conversation lifecycle controls, parking, and architecture coverage.
MrJuneJune <me@mrjunejune.com>
parents: 278
diff changeset
137 `//infinite_canvas:agent_dev` remains an alias. Closing the canvas stops the
282
6bd4a3990696 Add cross-platform canvas orchestration and typed composer
MrJuneJune <me@mrjunejune.com>
parents: 281
diff changeset
138 supervised local services. The target selects the matching Copilot CLI and
6bd4a3990696 Add cross-platform canvas orchestration and typed composer
MrJuneJune <me@mrjunejune.com>
parents: 281
diff changeset
139 Python toolchain automatically. Dictation uses CUDA with `int8_float16` on
6bd4a3990696 Add cross-platform canvas orchestration and typed composer
MrJuneJune <me@mrjunejune.com>
parents: 281
diff changeset
140 Linux and CPU inference with `int8` on macOS.
280
49e9e591c9bb Add persistent dictation, prewarmed WebRTC speech input, Copilot SDK routing, animated conversation lifecycle controls, parking, and architecture coverage.
MrJuneJune <me@mrjunejune.com>
parents: 278
diff changeset
141
49e9e591c9bb Add persistent dictation, prewarmed WebRTC speech input, Copilot SDK routing, animated conversation lifecycle controls, parking, and architecture coverage.
MrJuneJune <me@mrjunejune.com>
parents: 278
diff changeset
142 Press `M` to start or stop the local WebRTC microphone session. The browser
49e9e591c9bb Add persistent dictation, prewarmed WebRTC speech input, Copilot SDK routing, animated conversation lifecycle controls, parking, and architecture coverage.
MrJuneJune <me@mrjunejune.com>
parents: 278
diff changeset
143 transport is prewarmed and remains hidden: it acquires the native microphone
49e9e591c9bb Add persistent dictation, prewarmed WebRTC speech input, Copilot SDK routing, animated conversation lifecycle controls, parking, and architecture coverage.
MrJuneJune <me@mrjunejune.com>
parents: 278
diff changeset
144 permission, device, signaling, ICE connection, and transcript data channel
49e9e591c9bb Add persistent dictation, prewarmed WebRTC speech input, Copilot SDK routing, animated conversation lifecycle controls, parking, and architecture coverage.
MrJuneJune <me@mrjunejune.com>
parents: 278
diff changeset
145 ahead of the first hotkey while keeping the audio track disabled. `M` therefore
49e9e591c9bb Add persistent dictation, prewarmed WebRTC speech input, Copilot SDK routing, animated conversation lifecycle controls, parking, and architecture coverage.
MrJuneJune <me@mrjunejune.com>
parents: 278
diff changeset
146 only unmutes an already-ready channel, so speech from the beginning of the
49e9e591c9bb Add persistent dictation, prewarmed WebRTC speech input, Copilot SDK routing, animated conversation lifecycle controls, parking, and architecture coverage.
MrJuneJune <me@mrjunejune.com>
parents: 278
diff changeset
147 utterance is retained. Partial and final speech appear directly as minimal centered text
49e9e591c9bb Add persistent dictation, prewarmed WebRTC speech input, Copilot SDK routing, animated conversation lifecycle controls, parking, and architecture coverage.
MrJuneJune <me@mrjunejune.com>
parents: 278
diff changeset
148 inside a retained `Dictation` text-area entity spawned near the camera center.
49e9e591c9bb Add persistent dictation, prewarmed WebRTC speech input, Copilot SDK routing, animated conversation lifecycle controls, parking, and architecture coverage.
MrJuneJune <me@mrjunejune.com>
parents: 278
diff changeset
149 The entity word-wraps, scrolls to the latest line, and can be dragged by its
49e9e591c9bb Add persistent dictation, prewarmed WebRTC speech input, Copilot SDK routing, animated conversation lifecycle controls, parking, and architecture coverage.
MrJuneJune <me@mrjunejune.com>
parents: 278
diff changeset
150 header to any position on the board. The same scratchpad is reused for every
49e9e591c9bb Add persistent dictation, prewarmed WebRTC speech input, Copilot SDK routing, animated conversation lifecycle controls, parking, and architecture coverage.
MrJuneJune <me@mrjunejune.com>
parents: 278
diff changeset
151 thought and clears after submission; it does not create duplicate dictation
49e9e591c9bb Add persistent dictation, prewarmed WebRTC speech input, Copilot SDK routing, animated conversation lifecycle controls, parking, and architecture coverage.
MrJuneJune <me@mrjunejune.com>
parents: 278
diff changeset
152 windows. A small pulsing `Listening` indicator
49e9e591c9bb Add persistent dictation, prewarmed WebRTC speech input, Copilot SDK routing, animated conversation lifecycle controls, parking, and architecture coverage.
MrJuneJune <me@mrjunejune.com>
parents: 278
diff changeset
153 remains in the bottom-left while capture is active. In-progress speech uses
49e9e591c9bb Add persistent dictation, prewarmed WebRTC speech input, Copilot SDK routing, animated conversation lifecycle controls, parking, and architecture coverage.
MrJuneJune <me@mrjunejune.com>
parents: 278
diff changeset
154 muted text; `Backspace` clears the entire current thought without stopping
49e9e591c9bb Add persistent dictation, prewarmed WebRTC speech input, Copilot SDK routing, animated conversation lifecycle controls, parking, and architecture coverage.
MrJuneJune <me@mrjunejune.com>
parents: 278
diff changeset
155 capture. Pausing with `M` and resuming appends to the same thought rather than
49e9e591c9bb Add persistent dictation, prewarmed WebRTC speech input, Copilot SDK routing, animated conversation lifecycle controls, parking, and architecture coverage.
MrJuneJune <me@mrjunejune.com>
parents: 278
diff changeset
156 replacing it. Press `Enter` to commit and send the current utterance while the
49e9e591c9bb Add persistent dictation, prewarmed WebRTC speech input, Copilot SDK routing, animated conversation lifecycle controls, parking, and architecture coverage.
MrJuneJune <me@mrjunejune.com>
parents: 278
diff changeset
157 microphone stays live for the next thought; press `M` or `Escape` to stop it.
49e9e591c9bb Add persistent dictation, prewarmed WebRTC speech input, Copilot SDK routing, animated conversation lifecycle controls, parking, and architecture coverage.
MrJuneJune <me@mrjunejune.com>
parents: 278
diff changeset
158 For typed input, select a text area and press `Ctrl/Cmd+Enter`.
49e9e591c9bb Add persistent dictation, prewarmed WebRTC speech input, Copilot SDK routing, animated conversation lifecycle controls, parking, and architecture coverage.
MrJuneJune <me@mrjunejune.com>
parents: 278
diff changeset
159 Native CEF grants audio only to the fixed loopback dictation transport; it does
49e9e591c9bb Add persistent dictation, prewarmed WebRTC speech input, Copilot SDK routing, animated conversation lifecycle controls, parking, and architecture coverage.
MrJuneJune <me@mrjunejune.com>
parents: 278
diff changeset
160 not show an inaccessible browser permission prompt or grant microphone access
49e9e591c9bb Add persistent dictation, prewarmed WebRTC speech input, Copilot SDK routing, animated conversation lifecycle controls, parking, and architecture coverage.
MrJuneJune <me@mrjunejune.com>
parents: 278
diff changeset
161 to normal canvas web entities.
49e9e591c9bb Add persistent dictation, prewarmed WebRTC speech input, Copilot SDK routing, animated conversation lifecycle controls, parking, and architecture coverage.
MrJuneJune <me@mrjunejune.com>
parents: 278
diff changeset
162
49e9e591c9bb Add persistent dictation, prewarmed WebRTC speech input, Copilot SDK routing, animated conversation lifecycle controls, parking, and architecture coverage.
MrJuneJune <me@mrjunejune.com>
parents: 278
diff changeset
163 The Copilot SDK receives the visible camera context, including existing
49e9e591c9bb Add persistent dictation, prewarmed WebRTC speech input, Copilot SDK routing, animated conversation lifecycle controls, parking, and architecture coverage.
MrJuneJune <me@mrjunejune.com>
parents: 278
diff changeset
164 conversation entity IDs, through the shared `canvas_orchestrator` prompt
49e9e591c9bb Add persistent dictation, prewarmed WebRTC speech input, Copilot SDK routing, animated conversation lifecycle controls, parking, and architecture coverage.
MrJuneJune <me@mrjunejune.com>
parents: 278
diff changeset
165 profile. It returns a routing decision to append to an existing session or
49e9e591c9bb Add persistent dictation, prewarmed WebRTC speech input, Copilot SDK routing, animated conversation lifecycle controls, parking, and architecture coverage.
MrJuneJune <me@mrjunejune.com>
parents: 278
diff changeset
166 create a new one. Requests run off the render thread through the shared
49e9e591c9bb Add persistent dictation, prewarmed WebRTC speech input, Copilot SDK routing, animated conversation lifecycle controls, parking, and architecture coverage.
MrJuneJune <me@mrjunejune.com>
parents: 278
diff changeset
167 `Inference_Bridge`. Conversation cards retain
49e9e591c9bb Add persistent dictation, prewarmed WebRTC speech input, Copilot SDK routing, animated conversation lifecycle controls, parking, and architecture coverage.
MrJuneJune <me@mrjunejune.com>
parents: 278
diff changeset
168 their own title, transcript, working state, scroll position, selection, and
49e9e591c9bb Add persistent dictation, prewarmed WebRTC speech input, Copilot SDK routing, animated conversation lifecycle controls, parking, and architecture coverage.
MrJuneJune <me@mrjunejune.com>
parents: 278
diff changeset
169 pinning state, forming the first rich-context container for future typed image
49e9e591c9bb Add persistent dictation, prewarmed WebRTC speech input, Copilot SDK routing, animated conversation lifecycle controls, parking, and architecture coverage.
MrJuneJune <me@mrjunejune.com>
parents: 278
diff changeset
170 and component resources. Runtime configuration and Copilot token paths come
49e9e591c9bb Add persistent dictation, prewarmed WebRTC speech input, Copilot SDK routing, animated conversation lifecycle controls, parking, and architecture coverage.
MrJuneJune <me@mrjunejune.com>
parents: 278
diff changeset
171 from the ignored `mrjunejune/.config`; no separate canvas environment file is
49e9e591c9bb Add persistent dictation, prewarmed WebRTC speech input, Copilot SDK routing, animated conversation lifecycle controls, parking, and architecture coverage.
MrJuneJune <me@mrjunejune.com>
parents: 278
diff changeset
172 required. The Dictation scratchpad is excluded from camera context because its
49e9e591c9bb Add persistent dictation, prewarmed WebRTC speech input, Copilot SDK routing, animated conversation lifecycle controls, parking, and architecture coverage.
MrJuneJune <me@mrjunejune.com>
parents: 278
diff changeset
173 text is submitted separately, and only visible conversation cards are eligible
49e9e591c9bb Add persistent dictation, prewarmed WebRTC speech input, Copilot SDK routing, animated conversation lifecycle controls, parking, and architecture coverage.
MrJuneJune <me@mrjunejune.com>
parents: 278
diff changeset
174 append targets. Conversation cards follow the latest appended message and can
49e9e591c9bb Add persistent dictation, prewarmed WebRTC speech input, Copilot SDK routing, animated conversation lifecycle controls, parking, and architecture coverage.
MrJuneJune <me@mrjunejune.com>
parents: 278
diff changeset
175 be collapsed from their header. The archive icon moves a session to the
49e9e591c9bb Add persistent dictation, prewarmed WebRTC speech input, Copilot SDK routing, animated conversation lifecycle controls, parking, and architecture coverage.
MrJuneJune <me@mrjunejune.com>
parents: 278
diff changeset
176 off-canvas parking lot, excluding it from context; `Parking lot (N)` in
49e9e591c9bb Add persistent dictation, prewarmed WebRTC speech input, Copilot SDK routing, animated conversation lifecycle controls, parking, and architecture coverage.
MrJuneJune <me@mrjunejune.com>
parents: 278
diff changeset
177 Developer Controls jumps there, and the restore icon returns the session to
49e9e591c9bb Add persistent dictation, prewarmed WebRTC speech input, Copilot SDK routing, animated conversation lifecycle controls, parking, and architecture coverage.
MrJuneJune <me@mrjunejune.com>
parents: 278
diff changeset
178 its previous board position. Collapse and expansion use the same eased retained
49e9e591c9bb Add persistent dictation, prewarmed WebRTC speech input, Copilot SDK routing, animated conversation lifecycle controls, parking, and architecture coverage.
MrJuneJune <me@mrjunejune.com>
parents: 278
diff changeset
179 animation model as accordion entities rather than snapping between heights.
281
c57149ad216e Copilot-Session: f68442b1-fa8f-46a0-9689-81710613bbd4
MrJuneJune <me@mrjunejune.com>
parents: 280
diff changeset
180 Canvas startup pre-creates only the persistent orchestration SDK session,
c57149ad216e Copilot-Session: f68442b1-fa8f-46a0-9689-81710613bbd4
MrJuneJune <me@mrjunejune.com>
parents: 280
diff changeset
181 moving its setup out of the first submitted thought without eagerly creating
c57149ad216e Copilot-Session: f68442b1-fa8f-46a0-9689-81710613bbd4
MrJuneJune <me@mrjunejune.com>
parents: 280
diff changeset
182 worker sessions.
c57149ad216e Copilot-Session: f68442b1-fa8f-46a0-9689-81710613bbd4
MrJuneJune <me@mrjunejune.com>
parents: 280
diff changeset
183
c57149ad216e Copilot-Session: f68442b1-fa8f-46a0-9689-81710613bbd4
MrJuneJune <me@mrjunejune.com>
parents: 280
diff changeset
184 Developer Controls can save and load named native `.zmap` snapshots. The
c57149ad216e Copilot-Session: f68442b1-fa8f-46a0-9689-81710613bbd4
MrJuneJune <me@mrjunejune.com>
parents: 280
diff changeset
185 versioned binary representation restores camera position, zoom, z-order, and
c57149ad216e Copilot-Session: f68442b1-fa8f-46a0-9689-81710613bbd4
MrJuneJune <me@mrjunejune.com>
parents: 280
diff changeset
186 retained entity state with checksum and bounds validation. Agents may also
c57149ad216e Copilot-Session: f68442b1-fa8f-46a0-9689-81710613bbd4
MrJuneJune <me@mrjunejune.com>
parents: 280
diff changeset
187 return a bounded `entities` array to showcase an answer directly with native
c57149ad216e Copilot-Session: f68442b1-fa8f-46a0-9689-81710613bbd4
MrJuneJune <me@mrjunejune.com>
parents: 280
diff changeset
188 calendar, card, table, text, image, or browser entities.
c57149ad216e Copilot-Session: f68442b1-fa8f-46a0-9689-81710613bbd4
MrJuneJune <me@mrjunejune.com>
parents: 280
diff changeset
189
c57149ad216e Copilot-Session: f68442b1-fa8f-46a0-9689-81710613bbd4
MrJuneJune <me@mrjunejune.com>
parents: 280
diff changeset
190 Agent submissions initially show only a small pulsing canvas icon. The
c57149ad216e Copilot-Session: f68442b1-fa8f-46a0-9689-81710613bbd4
MrJuneJune <me@mrjunejune.com>
parents: 280
diff changeset
191 orchestrator chooses `action` presentation for simple one-off work, replacing
c57149ad216e Copilot-Session: f68442b1-fa8f-46a0-9689-81710613bbd4
MrJuneJune <me@mrjunejune.com>
parents: 280
diff changeset
192 the icon with the result and creating no chat/session card, or `conversation`
c57149ad216e Copilot-Session: f68442b1-fa8f-46a0-9689-81710613bbd4
MrJuneJune <me@mrjunejune.com>
parents: 280
diff changeset
193 presentation for work that benefits from retained discussion. The icon has an
c57149ad216e Copilot-Session: f68442b1-fa8f-46a0-9689-81710613bbd4
MrJuneJune <me@mrjunejune.com>
parents: 280
diff changeset
194 animated hover label and can be dragged to choose the result location.
280
49e9e591c9bb Add persistent dictation, prewarmed WebRTC speech input, Copilot SDK routing, animated conversation lifecycle controls, parking, and architecture coverage.
MrJuneJune <me@mrjunejune.com>
parents: 278
diff changeset
195
276
b55c22cff335 Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
196 Tables support row selection, and notifications behave as bottom-right toast
b55c22cff335 Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
197 cards: multiple toasts overlap compactly, fan into a spaced stack on hover,
b55c22cff335 Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
198 and slide/fade away from either Undo or close. Position, size, stack expansion,
b55c22cff335 Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
199 and dismissal all use eased frame-rate-independent transitions. Scrollable areas consume the
b55c22cff335 Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
200 mouse wheel without zooming the camera. Image
b55c22cff335 Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
201 entities render HTTPS URLs or native filesystem paths through CEF; browser
b55c22cff335 Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
202 builds render URLs or paths available in the Emscripten filesystem. Override
b55c22cff335 Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
203 the demo image in native development with
b55c22cff335 Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
204 `INFINITE_CANVAS_IMAGE_SOURCE=/path/to/image.png`.
b55c22cff335 Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
205
b55c22cff335 Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
206 The first native build downloads the platform CEF 151 minimal distribution.
b55c22cff335 Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
207 Linux stages its runtime once under
b55c22cff335 Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
208 `~/.cache/zenbu/infinite-canvas/cef-151`; application state and the RGBA paint
b55c22cff335 Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
209 buffer remain owned by the Dowa arena, while CEF owns its browser internals.
b55c22cff335 Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
210
b55c22cff335 Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
211 Buttons animate on hover/press and toggle when clicked. Dropdowns open a real
b55c22cff335 Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
212 option menu with hover and selection states. Selected text areas accept typing,
278
8d560f50ed4c Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents: 276
diff changeset
213 wrap text, support click/drag selection and scrolling, and provide
8d560f50ed4c Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents: 276
diff changeset
214 Ctrl/Cmd+A/C/X/V clipboard shortcuts plus Shift selection, word navigation,
8d560f50ed4c Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents: 276
diff changeset
215 Home/End, Backspace, and Delete. Drag a text area's narrow outer padding to
8d560f50ed4c Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents: 276
diff changeset
216 move it without changing the selection.
276
b55c22cff335 Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
217
b55c22cff335 Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
218 Camera context is derived from the visible world rather than a hidden
b55c22cff335 Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
219 conversation store. Panning entities outside the viewport removes them;
b55c22cff335 Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
220 zooming out includes and concatenates newly visible entities. Each entry
b55c22cff335 Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
221 contains identity, type, placement, pin state, and type-specific state such as
b55c22cff335 Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
222 text content, dropdown selection, switch value, selected calendar date or table
b55c22cff335 Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
223 row, scroll position, image source, and browser URL. The current text format is
b55c22cff335 Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
224 intentionally provisional so it can later be replaced by the final API
b55c22cff335 Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
225 contract.
b55c22cff335 Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
226
b55c22cff335 Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
227 The prototype uses the Inter variable font under the SIL Open Font License.
b55c22cff335 Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
228
278
8d560f50ed4c Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents: 276
diff changeset
229 Agent-oriented architecture and extension notes live in
8d560f50ed4c Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents: 276
diff changeset
230 [`docs/README.md`](docs/README.md).
8d560f50ed4c Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents: 276
diff changeset
231
276
b55c22cff335 Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
232 ## Memory ownership
b55c22cff335 Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
233
b55c22cff335 Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
234 The application creates one Dowa arena. Application state and the fixed-capacity
b55c22cff335 Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
235 entity array are arena-owned, there are no per-frame first-party allocations,
b55c22cff335 Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
236 and the arena is released once during native shutdown. Browser lifetime memory
b55c22cff335 Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
237 is reclaimed with the WebAssembly runtime when the page closes.