omnius 1.0.867 → 1.0.868

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.
Files changed (27) hide show
  1. package/dist/api/py-embed.js +13 -0
  2. package/dist/index.js +2 -2
  3. package/dist/library.js +220 -194
  4. package/dist/tui/native/worker.js +857 -143
  5. package/dist/update-worker.js +128 -77
  6. package/docs/DISCOVERY.json +1069 -139
  7. package/docs/DISCOVERY.md +26 -7
  8. package/docs/design/media-unification-TODO.md +26 -6
  9. package/docs/design/media-unification-design.md +89 -0
  10. package/docs/design/update-operation-cancellation.md +40 -0
  11. package/docs/design/update-session-restoration-TODO.md +30 -0
  12. package/docs/work-orders/evidence/instrument-media-live-20261016/media-audio-playing.png +0 -0
  13. package/docs/work-orders/evidence/instrument-media-live-20261016/media-image-100x30.png +0 -0
  14. package/docs/work-orders/evidence/instrument-media-live-20261016/media-image-120x36.png +0 -0
  15. package/docs/work-orders/evidence/instrument-media-live-20261016/media-image-160x48.png +0 -0
  16. package/docs/work-orders/evidence/instrument-media-live-20261016/media-image-60x20.png +0 -0
  17. package/docs/work-orders/evidence/instrument-media-live-20261016/media-image-80x24.png +0 -0
  18. package/docs/work-orders/evidence/instrument-media-live-20261016/media-progress-collapsed.png +0 -0
  19. package/docs/work-orders/evidence/instrument-media-live-20261016/media-video-frame-a.png +0 -0
  20. package/docs/work-orders/evidence/instrument-media-live-20261016/media-video-frame-b.png +0 -0
  21. package/docs/work-orders/evidence/instrument-media-live-20261016/media-voice-autocomplete-junction.png +0 -0
  22. package/docs/work-orders/evidence/instrument-media-live-20261016/report.json +813 -0
  23. package/docs/work-orders/evidence/instrument-media-verification-20261016.json +59 -0
  24. package/docs/work-orders/evidence/native-interface-state-verification-20261016.json +59 -0
  25. package/docs/work-orders/evidence/project-media-unification-20261016.json +108 -0
  26. package/npm-shrinkwrap.json +2 -2
  27. package/package.json +1 -1
package/docs/DISCOVERY.md CHANGED
@@ -161,18 +161,20 @@ Daemon equivalents are `GET /v1/discovery/bootstrap`, `GET /v1/discovery?q=<inte
161
161
  | `api.v1-mcps` | /v1/mcps | List MCP servers (PT-03) |
162
162
  | `api.v1-mcps-name` | /v1/mcps/{name} | Get MCP server details (PT-03) |
163
163
  | `api.v1-mcps-name-call` | /v1/mcps/{name}/call | Invoke a tool on an MCP server (PT-03) |
164
- | `api.v1-media-audio` | /v1/media/audio | Generate a sound effect — body {prompt, model?, backend?, duration?, seed?} |
164
+ | `api.v1-media-audio` | /v1/media/audio | Generate sound — body {projectRoot,prompt,request_id?,session_id?,model?,backend?,duration?,seed?} |
165
165
  | `api.v1-media-av-analyze` | /v1/media/av/analyze | Analyze a media file into a grounded entity/event/evidence answer (AV entity-comprehension) — body {path\|mediaUri, question?}; reports per-role live-vs-mock adapter status |
166
- | `api.v1-media-file` | /v1/media/file | Stream an exact owned gallery file — query {kind,name}; Validate an exact gallery identity and MIME before acquisition; Delete only a selected saved gallery file and matching metadata |
167
- | `api.v1-media-gallery` | /v1/media/gallery | List previously generated media from the global store, newest first |
168
- | `api.v1-media-image` | /v1/media/image | Generate an image — body {prompt, model?, backend?, width?, height?, steps?, guidance?, seed?, aspect_ratio?} |
166
+ | `api.v1-media-file` | /v1/media/file | Stream an exact artifact — query {projectRoot,kind,name} or {scope:'legacy-global',kind,name}; Validate exact project/archive identity, MIME and ETag before acquisition; Delete a selected project artifact or explicit legacy copy and matching metadata |
167
+ | `api.v1-media-gallery` | /v1/media/gallery | Discover existing artifacts in a registered project, or the explicit legacy global archive |
168
+ | `api.v1-media-generations-cancel` | /v1/media/generations/cancel | Request daemon-owned Stop — JSON {projectRoot,request_id\|generation_id,session_id?} |
169
+ | `api.v1-media-generations-status` | /v1/media/generations/status | Read actual daemon-owned generation settlement for captured project and request identity |
170
+ | `api.v1-media-image` | /v1/media/image | Generate an image in a registered project — body {projectRoot,prompt,request_id?,session_id?,model?,backend?,width?,height?,steps?,guidance?,seed?,aspect_ratio?} |
169
171
  | `api.v1-media-migrate` | /v1/media/migrate | Dedup + migrate legacy per-group media caches into the unified store — body {dryRun?, roots?, maxDepth?} |
170
172
  | `api.v1-media-models` | /v1/media/models | List available generative media models per kind (image/video/audio/music) |
171
- | `api.v1-media-music` | /v1/media/music | Generate music — body {prompt, model?, backend?, duration?, seed?} |
173
+ | `api.v1-media-music` | /v1/media/music | Generate music — body {projectRoot,prompt,request_id?,session_id?,model?,backend?,duration?,seed?} |
172
174
  | `api.v1-media-relocate` | /v1/media/relocate | Relocate the whole media store (weights/venvs/gallery) to a chosen folder — body {newRoot, dryRun?}; streams media.relocate_progress and returns 202 + job_id |
173
175
  | `api.v1-media-relocate-status` | /v1/media/relocate/status | Status of the in-flight (or last) media-store relocation job |
174
176
  | `api.v1-media-store` | /v1/media/store | Resolved media/model/gallery roots and disk information |
175
- | `api.v1-media-video` | /v1/media/video | Generate a video — body {prompt, model?, backend?, num_frames?, fps?, width?, height?, steps?, guidance?, seed?} |
177
+ | `api.v1-media-video` | /v1/media/video | Generate video — body {projectRoot,prompt,request_id?,session_id?,model?,backend?,num_frames?,fps?,width?,height?,steps?,guidance?,seed?} |
176
178
  | `api.v1-media-weights` | /v1/media/weights | Inspect an exact media model's actual cache paths, physical bytes, known dependencies, sharing and supported actions; Delete an exact cached dependency while retaining its catalog entry |
177
179
  | `api.v1-media-weights-download` | /v1/media/weights/download | Start or reattach a durable network/disk-only weight download |
178
180
  | `api.v1-media-weights-jobs-id` | /v1/media/weights/jobs/{id} | Read durable download state and restart interruption status |
@@ -431,7 +433,10 @@ Daemon equivalents are `GET /v1/discovery/bootstrap`, `GET /v1/discovery?q=<inte
431
433
  | `guide.design-dashboard-reconstruction-plan` | Dashboard reconstruction plan | 2026-10-16 · source implementation only; publishing remains with the user. |
432
434
  | `guide.design-dashboard-styleguide` | Omnius browser instrument design system | Version 1 · 2026-10-16 · implementation contract |
433
435
  | `guide.design-dashboard-todo-uppercase` | Dashboard reconstruction — durable TODO | Updated: 2026-10-16. Contract: styleguide. Scope and sequence: plan. |
434
- | `guide.design-media-unification-todo-uppercase` | Next phase: media storage and generation interface unification | Requested 2026-10-16. Queued after the current browser dashboard reconstruction; do not divert the current delivery into this work. These items are not implemented or verified by the dashboard reconstruction receipt. |
436
+ | `guide.design-media-unification-design` | Unified media: project artifacts, shared models, deliberate presentation | Status: implementation contract, 2026-10-16. Follows the delivered dashboard reconstruction (6cfaebbd). Track verification in media-unification-TODO.md. |
437
+ | `guide.design-media-unification-todo-uppercase` | Next phase: media storage and generation interface unification | Requested 2026-10-16. Active after dashboard reconstruction delivery 6cfaebbd. Contract: media unification design. The preceding dashboard receipt does not count as verification of this phase. |
438
+ | `guide.design-update-operation-cancellation` | Owned update cancellation and restart | The native update dialog stays present while an operation is running. Escape, Ctrl+C and outside clicks do not dismiss it. Its top-right Cancel control sends an explicit request; it shows cancellation pending until the owned work settles. An error remains in the same dialog with a Close action. Ordinary menu dismissal and native frame animation remain unchan |
439
+ | `guide.design-update-session-restoration-todo-uppercase` | Queued next: update lifecycle and exact session restoration | Requested 2026-10-16. Implement after the active media-unification phase; keep this requirement durable without diverting the current work. |
435
440
  | `guide.discovery-agent-map` | Agent Map | Bundled Omnius documentation artifact: docs/discovery/agent-map.json. |
436
441
  | `guide.discovery-catalog-overrides` | Discovery Catalog Curated Source | Curated aliases, relationships, invocation modes, and conceptual entries merged into the generated catalog. |
437
442
  | `guide.discovery-json` | Omnius Machine Discovery Catalog | Generated JSON catalog consumed by the CLI, REST discovery API, JavaScript API, and offline agents. |
@@ -567,6 +572,18 @@ Daemon equivalents are `GET /v1/discovery/bootstrap`, `GET /v1/discovery?q=<inte
567
572
  | `guide.work-orders-evidence-instrument-divider-collapsed-160x48` | Instrument Divider Collapsed 160x48 | Bundled Omnius documentation artifact: docs/work-orders/evidence/instrument-divider-collapsed-160x48.png. |
568
573
  | `guide.work-orders-evidence-instrument-divider-resized-160x48` | Instrument Divider Resized 160x48 | Bundled Omnius documentation artifact: docs/work-orders/evidence/instrument-divider-resized-160x48.png. |
569
574
  | `guide.work-orders-evidence-instrument-help-scroll-120x36` | Instrument Help Scroll 120x36 | Bundled Omnius documentation artifact: docs/work-orders/evidence/instrument-help-scroll-120x36.png. |
575
+ | `guide.work-orders-evidence-instrument-media-live-20261016-media-audio-playing` | Media Audio Playing | Bundled Omnius documentation artifact: docs/work-orders/evidence/instrument-media-live-20261016/media-audio-playing.png. |
576
+ | `guide.work-orders-evidence-instrument-media-live-20261016-media-image-100x30` | Media Image 100x30 | Bundled Omnius documentation artifact: docs/work-orders/evidence/instrument-media-live-20261016/media-image-100x30.png. |
577
+ | `guide.work-orders-evidence-instrument-media-live-20261016-media-image-120x36` | Media Image 120x36 | Bundled Omnius documentation artifact: docs/work-orders/evidence/instrument-media-live-20261016/media-image-120x36.png. |
578
+ | `guide.work-orders-evidence-instrument-media-live-20261016-media-image-160x48` | Media Image 160x48 | Bundled Omnius documentation artifact: docs/work-orders/evidence/instrument-media-live-20261016/media-image-160x48.png. |
579
+ | `guide.work-orders-evidence-instrument-media-live-20261016-media-image-60x20` | Media Image 60x20 | Bundled Omnius documentation artifact: docs/work-orders/evidence/instrument-media-live-20261016/media-image-60x20.png. |
580
+ | `guide.work-orders-evidence-instrument-media-live-20261016-media-image-80x24` | Media Image 80x24 | Bundled Omnius documentation artifact: docs/work-orders/evidence/instrument-media-live-20261016/media-image-80x24.png. |
581
+ | `guide.work-orders-evidence-instrument-media-live-20261016-media-progress-collapsed` | Media Progress Collapsed | Bundled Omnius documentation artifact: docs/work-orders/evidence/instrument-media-live-20261016/media-progress-collapsed.png. |
582
+ | `guide.work-orders-evidence-instrument-media-live-20261016-media-video-frame-a` | Media Video Frame A | Bundled Omnius documentation artifact: docs/work-orders/evidence/instrument-media-live-20261016/media-video-frame-a.png. |
583
+ | `guide.work-orders-evidence-instrument-media-live-20261016-media-video-frame-b` | Media Video Frame B | Bundled Omnius documentation artifact: docs/work-orders/evidence/instrument-media-live-20261016/media-video-frame-b.png. |
584
+ | `guide.work-orders-evidence-instrument-media-live-20261016-media-voice-autocomplete-junction` | Media Voice Autocomplete Junction | Bundled Omnius documentation artifact: docs/work-orders/evidence/instrument-media-live-20261016/media-voice-autocomplete-junction.png. |
585
+ | `guide.work-orders-evidence-instrument-media-live-20261016-report` | Report | Bundled Omnius documentation artifact: docs/work-orders/evidence/instrument-media-live-20261016/report.json. |
586
+ | `guide.work-orders-evidence-instrument-media-verification-20261016` | Instrument Media Verification 20261016 | Bundled Omnius documentation artifact: docs/work-orders/evidence/instrument-media-verification-20261016.json. |
570
587
  | `guide.work-orders-evidence-instrument-package-artifact-20261016` | Instrument Package Artifact 20261016 | Bundled Omnius documentation artifact: docs/work-orders/evidence/instrument-package-artifact-20261016.json. |
571
588
  | `guide.work-orders-evidence-instrument-package-install-20261016` | Instrument Package Install 20261016 | Bundled Omnius documentation artifact: docs/work-orders/evidence/instrument-package-install-20261016.json. |
572
589
  | `guide.work-orders-evidence-instrument-package-install-20261016-updated` | Instrument Package Install 20261016 Updated | Bundled Omnius documentation artifact: docs/work-orders/evidence/instrument-package-install-20261016-updated.json. |
@@ -602,6 +619,7 @@ Daemon equivalents are `GET /v1/discovery/bootstrap`, `GET /v1/discovery?q=<inte
602
619
  | `guide.work-orders-evidence-local-recovery-production-routes-20261014` | Local Recovery Production Routes 20261014 | Bundled Omnius documentation artifact: docs/work-orders/evidence/local-recovery-production-routes-20261014.json. |
603
620
  | `guide.work-orders-evidence-native-conversation-prompt-audit-20261012` | Native Conversation Prompt Audit 20261012 | Bundled Omnius documentation artifact: docs/work-orders/evidence/native-conversation-prompt-audit-20261012.json. |
604
621
  | `guide.work-orders-evidence-native-goal-contract-probe-20261012` | Native Goal Contract Probe 20261012 | Bundled Omnius documentation artifact: docs/work-orders/evidence/native-goal-contract-probe-20261012.json. |
622
+ | `guide.work-orders-evidence-native-interface-state-verification-20261016` | Native Interface State Verification 20261016 | Bundled Omnius documentation artifact: docs/work-orders/evidence/native-interface-state-verification-20261016.json. |
605
623
  | `guide.work-orders-evidence-native-reconciliation-readonly-live-20261014` | Native Reconciliation Readonly Live 20261014 | Bundled Omnius documentation artifact: docs/work-orders/evidence/native-reconciliation-readonly-live-20261014.json. |
606
624
  | `guide.work-orders-evidence-native-session-lifecycle-verification-20261016` | Native Session Lifecycle Verification 20261016 | Bundled Omnius documentation artifact: docs/work-orders/evidence/native-session-lifecycle-verification-20261016.json. |
607
625
  | `guide.work-orders-evidence-native-session-regression-verification-20261016` | Native Session Regression Verification 20261016 | Bundled Omnius documentation artifact: docs/work-orders/evidence/native-session-regression-verification-20261016.json. |
@@ -631,6 +649,7 @@ Daemon equivalents are `GET /v1/discovery/bootstrap`, `GET /v1/discovery?q=<inte
631
649
  | `guide.work-orders-evidence-opencode-step-rate-limited-diagnostic-20261012` | Opencode Step Rate Limited Diagnostic 20261012 | Bundled Omnius documentation artifact: docs/work-orders/evidence/opencode-step-rate-limited-diagnostic-20261012.json. |
632
650
  | `guide.work-orders-evidence-ovh-production-compatibility-20261012` | Ovh Production Compatibility 20261012 | Bundled Omnius documentation artifact: docs/work-orders/evidence/ovh-production-compatibility-20261012.json. |
633
651
  | `guide.work-orders-evidence-ovh-structured-context-compatibility-20261012` | Ovh Structured Context Compatibility 20261012 | Bundled Omnius documentation artifact: docs/work-orders/evidence/ovh-structured-context-compatibility-20261012.json. |
652
+ | `guide.work-orders-evidence-project-media-unification-20261016` | Project Media Unification 20261016 | Bundled Omnius documentation artifact: docs/work-orders/evidence/project-media-unification-20261016.json. |
634
653
  | `guide.work-orders-evidence-public-review-after-20261012` | Public Review After 20261012 | Bundled Omnius documentation artifact: docs/work-orders/evidence/public-review-after-20261012.json. |
635
654
  | `guide.work-orders-evidence-public-review-before-20261012` | Public Review Before 20261012 | Bundled Omnius documentation artifact: docs/work-orders/evidence/public-review-before-20261012.json. |
636
655
  | `guide.work-orders-evidence-session-tabs-installation-20261016` | Session Tabs Installation 20261016 | Bundled Omnius documentation artifact: docs/work-orders/evidence/session-tabs-installation-20261016.json. |
@@ -1,12 +1,12 @@
1
1
  # Next phase: media storage and generation interface unification
2
2
 
3
- Requested 2026-10-16. Queued after the current browser dashboard reconstruction;
4
- do not divert the current delivery into this work. These items are not implemented
5
- or verified by the dashboard reconstruction receipt.
3
+ Requested 2026-10-16. Active after dashboard reconstruction delivery `6cfaebbd`.
4
+ Contract: [media unification design](media-unification-design.md). The preceding
5
+ dashboard receipt does not count as verification of this phase.
6
6
 
7
7
  ## Storage contract
8
8
 
9
- - [ ] Trace browser, TUI, tool and session generation/output paths for image,
9
+ - [x] Trace browser, TUI, tool and session generation/output paths for image,
10
10
  video, audio and music before choosing a migration strategy.
11
11
  - [ ] Share model weights across Omnius sessions and project locations through
12
12
  one configured model store; expose its actual path consistently.
@@ -36,7 +36,7 @@ or verified by the dashboard reconstruction receipt.
36
36
  including after terminal resize and sidebar dragging; retain aspect ratio.
37
37
  - [ ] Support click/Open actions and a subtle hover Open affordance, plus
38
38
  keyboard access and clear local file handling.
39
- - [ ] Investigate OpenTUI audio streaming APIs for generated audio playback and
39
+ - [x] Investigate OpenTUI audio streaming APIs for generated audio playback and
40
40
  visualization: https://opentui.com/docs/application-apis/audio-streaming/.
41
41
  - [ ] Implement video playback via updating frames using the same media module,
42
42
  with bounded work, explicit play/pause and cleanup when hidden or closed.
@@ -45,7 +45,7 @@ or verified by the dashboard reconstruction receipt.
45
45
 
46
46
  ## Verification and delivery
47
47
 
48
- - [ ] Update the design contract before edits, recording ownership, migration,
48
+ - [x] Update the design contract before edits, recording ownership, migration,
49
49
  progress, preview and playback semantics.
50
50
  - [ ] Test storage identity, legacy discovery, concurrency, cancellation,
51
51
  authorization, deletion scope and failure recovery with isolated fixtures.
@@ -56,3 +56,23 @@ or verified by the dashboard reconstruction receipt.
56
56
  preflight gate; report fixture tests separately from real inference.
57
57
  - [ ] Make scoped verified commits and push the tracked branch. Leave publishing
58
58
  to the user unless subsequently instructed otherwise.
59
+
60
+ ## Progress log
61
+
62
+ - Dashboard source delivery completed first through `6cfaebbd` on `origin/main`.
63
+ - `0a6e9ada`: shared incremental media progress framing and owned image-worker
64
+ cancellation pushed. 67 tests across eight execution suites passed, including
65
+ real disposable Node subprocess Stop/timeout checks. No inference ran.
66
+ - Current backend work replaces browser global work/copy behavior with explicit
67
+ registered-project identity and a labeled legacy gallery scope. Shared weights
68
+ stay in their configured store. Alias canonicalization is being repaired so
69
+ configured symlink roots share one lease.
70
+ - Current terminal work retains one invocation module with bounded diagnostics,
71
+ responsive previews and local playback. Native model modules separate selection,
72
+ file-only download and preparation; their six isolated control tests pass.
73
+ - Media artifact persistence round-trip: five disk-state tests pass. This is
74
+ media-block compatibility, not a claim that the queued full session-restoration
75
+ overhaul is complete.
76
+ - Include the newly reported disconnected sidebar rule through suggestions,
77
+ scrolling and enabled Voice rows in this phase's terminal validation.
78
+ - Queued after this phase: [update and session restoration](update-session-restoration-TODO.md).
@@ -0,0 +1,89 @@
1
+ # Unified media: project artifacts, shared models, deliberate presentation
2
+
3
+ Status: implementation contract, 2026-10-16. Follows the delivered dashboard
4
+ reconstruction (`6cfaebbd`). Track verification in `media-unification-TODO.md`.
5
+
6
+ ## Ownership and discovery
7
+
8
+ Model weights and runtimes remain in the existing configured shared media store.
9
+ Changing projects or opening another session must not create a second model cache.
10
+ Generated images belong to `<project>/.omnius/images`, video to `.omnius/videos`,
11
+ and sound/music to `.omnius/audio`, matching the existing execution tools.
12
+
13
+ Browser requests capture the selected project when the operation starts. The
14
+ daemon resolves that identity through the project registry; a request cannot
15
+ substitute an arbitrary filesystem root. Generation, gallery, preview, download
16
+ and deletion carry the same captured identity. Switching projects while a job or
17
+ preview is pending must not attach its result to the new project's gallery.
18
+
19
+ Existing project artifacts are discoverable without import or duplication.
20
+ Metadata sidecars enrich records but cannot redirect file access outside the
21
+ project. File operations validate actual containment, supported extensions and
22
+ regular files, rejecting symlinks/traversal. Existing global gallery copies stay
23
+ available through an explicitly labeled legacy scope; they are not moved or
24
+ deleted automatically. Deletion confirmations state the actual selected artifact
25
+ and scope. Shared weight deletion remains a separate control.
26
+
27
+ The REST project registry is an access boundary: admin scope is required to
28
+ register, rename or unregister roots, and to write project preferences that
29
+ create discovery sentinels. Switching an existing registered project and listing
30
+ or scanning projects remain read operations; scanning does not register its
31
+ results. `registerIfMissing` on project switching requires admin scope. Local
32
+ trusted project discovery remains separate from these REST operations.
33
+
34
+ Media APIs require the captured `projectRoot`; they never fall back to the
35
+ daemon's current project. Project-root aliases resolve to the same physical
36
+ artifact identity. Optional known `session_id` values must belong to that
37
+ project. New requests carry a bounded `request_id` alongside the server's
38
+ `generation_id`, and all terminal receipts retain that identity. Preview and
39
+ deletion accept `If-Match` against the inspected artifact revision; video
40
+ deletion also removes its exact derived regular thumbnail, never a path supplied
41
+ by a sidecar. Legacy global gallery access requires `scope=legacy-global` and
42
+ does not accept a project attribution.
43
+
44
+ Configured shared-store root aliases resolve to one physical lease. Nested cache
45
+ and lease-file symlinks are rejected. The existing conservative store lease
46
+ serializes generation with weight/cache mutation because generation can download
47
+ or evict weights; it does not add a per-project model cache. Stop receipts remain
48
+ `stopping` until the owned invocation actually settles. Generation status records
49
+ are bounded in daemon memory and do not survive a daemon restart.
50
+
51
+ ## Generation lifecycle
52
+
53
+ One invocation has one updating module in its parent turn. The module shows kind,
54
+ model, a single current phase and measured progress, then output controls. It
55
+ does not append every subprocess line to the transcript. Raw warnings and bounded
56
+ diagnostics live in an explicit disclosure. Download, runtime setup, loading,
57
+ inference steps and saving are distinct phases. Unknown progress stays unknown.
58
+ Heartbeat updates preserve the latest meaningful phase; they do not regress from
59
+ inference to a stale “downloading/loading” label. Subprocess records must survive
60
+ split lines and UTF-8 chunks.
61
+
62
+ Model browsing uses the existing nested module pattern. Selecting weights,
63
+ downloading files, deploying a runner and generating output are distinct actions;
64
+ their state labels must describe actual behavior. Existing broker and live
65
+ inference hardware gates still apply. No visual test should load a model.
66
+
67
+ ## Media presentation
68
+
69
+ Image/video previews derive dimensions from the available content width and
70
+ aspect ratio. Sidebar dragging and terminal/browser resizing update that fit.
71
+ Opening media is an explicit clickable preview or Open action, with keyboard
72
+ access and a quiet hover treatment. File location is available in the module,
73
+ not repeatedly injected as log lines. The browser uses the same artifact identity
74
+ and exposes preview, download and scoped delete actions together.
75
+
76
+ Generated audio uses OpenTUI's native audio stream API with bounded PCM decoding
77
+ when the file format requires it, and measured waveform/progress visualization.
78
+ OpenTUI streaming has no pause/resume API; file transport must implement any such
79
+ control explicitly by disposing and restarting at a captured position. Decoder,
80
+ stream, timer and device cleanup belongs to the module lifecycle.
81
+
82
+ Video updates the native image frame while playing, at a bounded cadence. Only
83
+ active visible playback does decoding work; pause, navigation, removal and exit
84
+ must stop owned decoder processes/timers. Playback failures stay inside the media
85
+ module with a usable Open fallback. Tests exercise real fixture decoding and
86
+ native rendering without claiming audible output or actual model inference.
87
+
88
+ Reference: https://opentui.com/docs/application-apis/audio-streaming/ (checked
89
+ against the installed `@opentui/core` 0.6.6 audio declarations).
@@ -0,0 +1,40 @@
1
+ # Owned update cancellation and restart
2
+
3
+ The native update dialog stays present while an operation is running. Escape,
4
+ Ctrl+C and outside clicks do not dismiss it. Its top-right Cancel control sends
5
+ an explicit request; it shows cancellation pending until the owned work settles.
6
+ An error remains in the same dialog with a Close action. Ordinary menu dismissal
7
+ and native frame animation remain unchanged for other dialogs.
8
+
9
+ The initiating client creates a private cancellation capability. Durable update
10
+ state contains only its hash. Cancellation requests carry the exact operation
11
+ identity and require the capability; clients adopting an existing shared update
12
+ receive progress without cancellation authority. The worker observes a private,
13
+ operation-specific request file, aborts its own installer process group, waits for
14
+ process close, and attempts recovery of a daemon it quiesced. Status remains
15
+ `running` during `cancelling` and `recovering`, then becomes `cancelled`. No UI
16
+ client signals an arbitrary recorded PID. Interrupted package changes are
17
+ retained; cancellation never claims package rollback. A recovery failure remains
18
+ explicit in the terminal receipt.
19
+
20
+ Quick Update waits for durable terminal settlement rather than treating a polling
21
+ timeout as proof of termination. A cancelled transaction does not restart the
22
+ client. Safe task admission, checkpointing, failure resume and the acknowledged
23
+ verified launcher handoff stay in the shared restart flow. The replacement keeps
24
+ the current configuration, environment, arguments, working directory and session
25
+ identity; native interface and transcript persistence are separate checkpoints.
26
+
27
+ `/update full` is now an alias for the coordinated package, daemon and indicator
28
+ transaction. It no longer automatically updates Ollama, Python, Cloudflared or
29
+ subordinate packages, or deletes global package directories and daemon artifacts.
30
+ Explicit `/update deps`, `/update rebuild`, `/update python`, individual dependency
31
+ menu actions and `/update ollama` remain available. Owned npm/pip maintenance
32
+ commands use the same process-group cancellation mechanism. Interactive privilege
33
+ and system-runtime setup prompts temporarily borrow the terminal through the
34
+ existing explicit handoff; these prompts keep their own terminal controls.
35
+
36
+ Verification uses scratch state directories, injected installers/service receipts,
37
+ actual native renderer input and harmless Node process groups. It does not install
38
+ an Omnius release, change services, load models or exercise CUDA. POSIX process
39
+ group escalation is tested locally; Windows uses its owned PID's task tree via
40
+ `taskkill`, with a direct-child fallback if that command is unavailable.
@@ -0,0 +1,30 @@
1
+ # Queued next: update lifecycle and exact session restoration
2
+
3
+ Requested 2026-10-16. Implement after the active media-unification phase; keep
4
+ this requirement durable without diverting the current work.
5
+
6
+ - [ ] Make the update modal non-dismissible by outside click while an update is
7
+ running. Ordinary modal dismissal must not hide or retire the operation.
8
+ - [ ] Provide an explicit top-right Cancel button. Cancellation must stop the
9
+ owned update operation safely and reflect its actual outcome; do not equate
10
+ hiding the modal with cancelling the update.
11
+ - [ ] Define behavior for Escape and other close shortcuts consistently with
12
+ the non-dismissible running-update state.
13
+ - [ ] Capture the exact interface/session state before update and restore it
14
+ after reload/restart: active project, session/tabs and selected agent,
15
+ transcript content and scroll position, draft/cursor, sidebar/layout,
16
+ expanded sections and other meaningful view state.
17
+ - [ ] Resume old sessions from their complete persisted message/tool/media
18
+ history and saved interface state. Do not substitute a summary for the
19
+ visible conversation. Model-context compaction and visible history are
20
+ separate concerns.
21
+ - [ ] Identify legacy sessions with incomplete saved history and report actual
22
+ availability honestly; never invent missing turns.
23
+ - [ ] Verify running-update outside-click rejection, explicit cancellation,
24
+ restart restoration and old-session full-history reconstruction with
25
+ isolated fixtures plus live terminal interaction tests.
26
+ - [ ] Commit and push verified changes, preserving the user's publishing work.
27
+
28
+ Additional reproduction: the browser dashboard loads the session transcript, but
29
+ resuming that same saved session in the TUI does not restore it. Trace both
30
+ loaders against the same saved session and verify full-history parity.