Expose bundled application documentation through the existing Skill repository and Session workspace. Materialize versioned resources across platforms, keep built-ins out of installed-skill management and writes, and preserve user Skill macros and saved visibility choices.
Include the maintained knowledge packages and deterministic documentation checks. New assistant profiles enable knowledge reading by default.
Validation: pnpm run check; Android aarch64 check; macOS dev and packaged application checks.
Tavern Studio builds its TauriTavern vendor image from a local checkout
because no release carries the web frontend.
Stable and canary releases now build it in a web job and attach
TauriTavern-<version>-web.zip (canary: -canary-web.zip). The archive is
src/ after pnpm web:build, the same frontend the native app embeds. The
release asset collector requires it, so a release cannot publish
without it. WebHost.md describes the asset and how to verify it.
Validation: node --test tests/ci-release-assets.test.mjs; both
workflows parse.
Tavern Studio previews the TauriTavern frontend in a browser, where there
is no Tauri. The frontend reaches its host only through tauri-bridge.js,
so a browser host has one seam to provide.
src/tauri/web-host provides that side for the startup path: from boot to
an open character chat with its linked lorebook, including the settings
save that startup triggers. Data goes to the embedder's backend with
SillyTavern HTTP semantics, and TT settings live in an opaque document the
embedder keeps. Other commands reject as Unsupported. The settings
defaults come from the Rust DTO, and a test keeps that copy current.
The browser test harness now starts every test through the Web Host
instead of a hand-written __TAURI__, and a startup test covers the desktop
and Android identities. The byte wire constants, the Persona projection
and the avatar file name now each have one definition, shared by the
frontend and the Web Host. The settings save contract now states that
Personas are sent as a delta. The other docs stay host-neutral;
docs/CurrentState/WebHost.md describes the Web Host and when it needs
changes.
Validation: pnpm run check.
Tavern Studio needs the same snapshot and interaction engine inside its
preview pages. The engine, its tests and the cursor move to
packages/app-use, an independently versioned AGPL package that imports
no TT modules. The in-app assistant consumes it from the workspace, and
the old ui/ directory is removed.
TT differences arrive as options: the [data-tt-sensitive] marker, the
assistant history area, the control-shell surface and #chat scrolling.
scrollChatSurfaceTo is exposed on the page context, so interact no
longer imports /script.js and runs synchronously. The package exports
the four tool definitions; the assistant appends its own notes and
implements evaluate and read_logs. The cursor follows SmartTheme
colors, and its CSS is bundled with the assistant's styles.
Pushing an app-use-v<VERSION> tag publishes the package through npm
trusted publishing.
Validation: pnpm run check; browser iframe checks; the packed tarball
works outside the repository.
The frontend checked at runtime whether it ran in Tauri, but init.js,
the only entry, set __TAURI_RUNNING__ unconditionally. The upstream
branches never ran, yet a missing flag would have switched to them
silently; settings would then save without a revision. Native globals
were also read beside tauri-bridge.js in 13 modules.
Native capabilities now come only from tauri-bridge.js, enforced by
check:frontend. The Android speech shim, injected before the module
graph, is the one exemption. The is-Tauri checks and their upstream
branches, the bridge fallbacks, initializeBridge, the is_ready and
get_version commands, tauri-ready.js and backend-readiness.js are
removed; startup awaits host readiness once. Text Completion profiles
are rejected in validateProfile, caption no longer offers Local or
Horde, and the unreachable login page is deleted. __TAURI_RUNNING__
stays as an external marker.
init.js also inferred a dev session from the URL and registered
tt-ext-sw.js at scope /, replacing any embedder's worker. The dev server
now injects dev-sw-bootstrap.js, which installs the bridge only on
documents served at devUrl (mobile dev uses the app protocol, whose
resource hook serves these paths) and publishes
__TAURITAVERN_DEV_SW_READY__ for init.js. An uncontrolled page asks the
worker to claim it, and message delivery starts during parsing, since
head stylesheets may load through the window proxy.
Validation: pnpm run check.
The tauri, wry, tao and plugins forks merge Tauri 2.12.3, wry 0.57.0,
tao 0.37.1 and the 2026-10-10 plugin releases, so they satisfy the
versions the app declares again. Tao now comes from a fork as well:
tauri-apps/tao has no OpenHarmony branch for 0.37. Pin the Darkatse
branches until LeenHawk merges them.
Validation: x86_64 debug HAP on the API 26 emulator, installed over the
2.11.6 build: storage survives the upgrade and a force stop; chat save
beyond the frame budget, chunked upload and fs 2.7 reads, native and
<input> file pickers, clipboard, opener, fullscreen and back, keyboard
resize and system bar strips. Pending: aarch64 and devices.
Bring OpenHarmony onto the contract Android and iOS already follow.
ArkUI lays the Web out in the safe area, ArkWeb's RESIZE_CONTENT
shrinks the layout viewport by the docked keyboard's overlap, and an
app-owned window-layout plugin publishes window snapshots and draws
wallpaper strips behind the system bars.
- Share the window-layout plugin transport between Android and OHOS.
- Drop the remaining OHOS branches in Rust and the frontend.
- Rotate with the sensor, within the system rotation lock.
The ability and plugins-workspace pins point at the Darkatse forks
until LeenHawk/openharmony-ability#1 and LeenHawk/plugins-workspace#1
merge.
Scan frontend and Rust sources for noncanonical host detection, platform
category shortcuts and incomplete platform matches. Point each violation
to the documented rule and its intended replacement.
Run the guard through pnpm check and replace the legacy mobile exclusion
in generation-background setup with explicit desktop and OHOS branches.
Centralize file picking, staging and delivery across platforms, with explicit cancellation outcomes and source ownership.
Remove superseded platform bridges and redundant tests, and document the shared contract and platform differences.
Validation: pnpm run check; Android aarch64 cargo check; 117 host tests.
* feat: add experimental OpenHarmony application build
* build(ohos): isolate experimental NAPI dependencies
* ci(ohos): build in this repository with public toolchain image
* ci: run existing checks for OHOS adaptation
* fix(ohos): generate QuickJS bindings for the OHOS target
* fix(ohos): use private caches and exclude desktop migration logs
* feat(ohos): restore native plugins and trusted endpoint confirmation
* ci(ohos): verify native plugin integration with existing checks
* chore(ohos): remove completed one-off validation workflow
* fix(ohos): clean dependency warnings and enable HAP LTO
* fix(ohos): retain shared plugin callbacks for the native bridge
* refactor(ohos): keep the native project and align the framework baseline
* fix(ohos): pin frame authorization and name the launcher entry
* fix(ohos): bind native builds and HAP packaging to the selected ABI
* fix(ohos): pin ordered Tauri bridge initialization
* fix(ohos): compress native libraries in HAP packages
* refactor(ohos): simplify HAP builds and Canary publishing
Build Rust once through the OHOS CLI and derive HAP versions from its merged
configuration. Replace the demo with the application page and remove generated
configuration writes, CMake scaffolding, and redundant preparation steps.
Keep ARM64 HAPs optional for Canary, report unsupported dev-log exports clearly,
and document the current build and host contracts.
Validated with pnpm run check, a local x86_64 HAP build and simulator smoke checks,
and Windows notification smoke checks.
---------
Co-authored-by: Darkatse <39111369+Darkatse@users.noreply.github.com>
Manage lazy session creation, durable history and live responses independently of the UI. Add the default assistant profile and page evaluation/log tools, with focused state-boundary tests and TypeScript checks.
Unify Bashkit and QuickJS behind WorkspaceFs, retain the existing skill entry point during migration, and clarify Agent tool descriptions and errors.
Validation: pnpm run check.
Run shell commands and jq against the shared, scoped workspace. Integrate per-round automatic commits and cancellation that finishes active file writes before returning.
Move database ownership, blocking IO and TQL binding into tt-adapter-triviumdb
and upgrade the native engine to 0.8.8. Preserve the plugin API capabilities
with awaited open, numeric IDs and explicit shared-namespace lifecycle.
Coordinate archive IO with database maintenance and restore each namespace
as a complete file group. Keep behavior tests for persistence, parameter
binding, transactions and recovery instead of per-method forwarding tests.
Validated with pnpm run check and tauri-pilot against the macOS app using
the real data root; temporary test namespaces were removed afterward.
On Windows hosts with NTFS last-access updates enabled (fsutil behavior
DisableLastAccess 0/2), every read of a file under src/ updates its
last-access time, and recursive fs.watch reports that as a change event.
The dev server then reloaded the page for any non-bundled path: fonts,
styles, images and other static assets fetched by the page itself.
Each reload fetched those assets again, producing a reload -> fetch ->
last-access -> reload feedback loop where any UI interaction kept
refreshing the page.
Two guards in handleFrontendChange:
- Directory-level change events arrive with a null filename and cannot
identify a reloadable file; ignore them instead of reloading.
- A last-access update never changes mtime, so a change event whose
mtime is far in the past is read noise, not an edit. Only reload for
files written within the last 30 seconds. Trade-off: writers that
deliberately preserve mtime no longer trigger a reload.
Verified on Windows (DisableLastAccess=2): two rounds of fetching 12
static assets produced zero reload events (previously 8 in one round),
while a real file write still triggered exactly one reload.
The boundary script previously only listed quickjs as a forbidden dependency of tt-application, so the crate's own dependency tree and source boundaries were never checked. Register it with a full rule set banning other adapters, host layers, and infra packages.
Also stop inheriting the workspace tokio full feature: the adapter only needs spawn_blocking (rt) and #[tokio::test] (macros).
Allow the QuickJS feature release to publish whatever succeeded instead of requiring every platform to build: add --best-effort to the desktop asset collector, run desktop/mobile with continue-on-error, gate publish on prepare success rather than all jobs, and relax the Linux deb/rpm count check to at least one.
Align the QuickJS feature branch release with the canary desktop pipeline:
- desktop-only matrix (win, mac x64/arm64, linux x64/arm64) with portable builds
- no signing / notarization, no apt/rpm repo publish, no nix, no Codex
- deterministic commit-based release notes
- move QuickJS-Feature tag via gh api PATCH (force) instead of git push
- fix missing linux-version step reference
- add desktop-only asset collector (scripts/ci/collect-desktop-release-assets.mjs)