Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .github/ISSUE_TEMPLATE/bug_report.yml
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ body:
attributes:
label: Omperator version
description: Use the displayed T4 Code version while the application rebrand is in progress.
placeholder: "0.1.31"
placeholder: "0.1.32"
validations:
required: true
- type: dropdown
Expand Down
2 changes: 1 addition & 1 deletion .github/ISSUE_TEMPLATE/question.yml
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ body:
attributes:
label: Omperator version
description: Use the displayed T4 Code version while the application rebrand is in progress.
placeholder: "0.1.31"
placeholder: "0.1.32"
- type: dropdown
id: platform
attributes:
Expand Down
23 changes: 13 additions & 10 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,13 +4,13 @@ T4 Code is a free, open-source (MIT) desktop app for [Oh My Pi](https://github.c

![T4 Code main window](docs/assets/t4-code-main.png)

[**Download v0.1.31**](https://github.com/LycaonLLC/t4-code/releases/tag/v0.1.31) · [**Docs**](https://t4code.net/docs) · [**Get the source**](#build-from-source)
[**Download v0.1.32**](https://github.com/LycaonLLC/t4-code/releases/tag/v0.1.32) · [**Docs**](https://t4code.net/docs) · [**Get the source**](#build-from-source)

## Requirements

The installed Apple Silicon Mac app packages its own standalone `t4-host` and matching OMP authority runtime. Source builds, Linux hosts, and remote hosts need the matching OMP build with the smaller authority bridge.

T4 Code v0.1.31 was verified with OMP 17.0.5 built from [`fc0c3913`](https://github.com/wolfiesch/oh-my-pi/commit/fc0c391334c08ab260057756aa84bd2b07741ee7), tagged [`t4code-17.0.5-appserver-13`](https://github.com/wolfiesch/oh-my-pi/tree/t4code-17.0.5-appserver-13). That integration is based on the official upstream [`v17.0.5`](https://github.com/can1357/oh-my-pi/tree/v17.0.5) tag at [`9fd6e971`](https://github.com/can1357/oh-my-pi/commit/9fd6e97113f5ed3a847e66d346970efdf8afcad9). It exposes the bounded `t4-omp-authority/1` bridge used by T4's standalone host and removes the old public OMP appserver launchers. It also includes snapshot-consistent paged authority inventories with explicit partial-state metadata, stale-lock lifecycle recovery, sparse authority-side session lists, atomic `xd://` mount publication, bounded newest-first transcript paging, stale-owner recovery, privacy-safe project reveal, fast lazy session indexing, cross-session attention and transcript search, the negotiated browser-preview command surface, redacted Codex transport diagnostics, the versioned Agent View lifecycle contract, session-owned cancellation, lock-aware session observation, complete transcript reconciliation, the cooperative `/continue-in-t4` handoff, and deterministic session ordering. Fork CI verifies the exact upstream base, ancestry, release gates, and published binaries. The official upstream v17.0.5 tag has no `appserver` command, so it cannot host T4 Code. It also does not include the authority bridge needed by T4's standalone host. T4 Code vendors `@oh-my-pi/app-wire` 0.7.0 from integration commit [`796bb7dc`](https://github.com/lyc-aon/oh-my-pi/commit/796bb7dca45027bd4b7b94017cdf41ef214a11f2), source tree `0c195a01ba0bb98fbf4d4863aee59bf23a6e81b7`.
T4 Code v0.1.32 was verified with OMP 17.0.5 built from [`fc0c3913`](https://github.com/wolfiesch/oh-my-pi/commit/fc0c391334c08ab260057756aa84bd2b07741ee7), tagged [`t4code-17.0.5-appserver-13`](https://github.com/wolfiesch/oh-my-pi/tree/t4code-17.0.5-appserver-13). That integration is based on the official upstream [`v17.0.5`](https://github.com/can1357/oh-my-pi/tree/v17.0.5) tag at [`9fd6e971`](https://github.com/can1357/oh-my-pi/commit/9fd6e97113f5ed3a847e66d346970efdf8afcad9). It exposes the bounded `t4-omp-authority/1` bridge used by T4's standalone host and removes the old public OMP appserver launchers. It also includes snapshot-consistent paged authority inventories with explicit partial-state metadata, stale-lock lifecycle recovery, sparse authority-side session lists, atomic `xd://` mount publication, bounded newest-first transcript paging, stale-owner recovery, privacy-safe project reveal, fast lazy session indexing, cross-session attention and transcript search, the negotiated browser-preview command surface, redacted Codex transport diagnostics, the versioned Agent View lifecycle contract, session-owned cancellation, lock-aware session observation, complete transcript reconciliation, the cooperative `/continue-in-t4` handoff, and deterministic session ordering. Fork CI verifies the exact upstream base, ancestry, release gates, and published binaries. The official upstream v17.0.5 tag has no `appserver` command, so it cannot host T4 Code. It also does not include the authority bridge needed by T4's standalone host. T4 Code vendors `@oh-my-pi/app-wire` 0.7.0 from integration commit [`796bb7dc`](https://github.com/lyc-aon/oh-my-pi/commit/796bb7dca45027bd4b7b94017cdf41ef214a11f2), source tree `0c195a01ba0bb98fbf4d4863aee59bf23a6e81b7`.

T4 owns the client wire, generic host service, and standalone daemon in `@t4-code/host-wire`, `@t4-code/host-service`, and `@t4-code/host-daemon`. The frozen `@oh-my-pi/app-wire` 0.7.0 tarball remains only as compatibility evidence. The released package still launches `t4-host` against the strict `t4-omp-authority/1` bridge, while OMP owns session files, locks, agent execution, and takeover decisions. A separately pinned unmodified official OMP 17.0.9 now passes T4's direct RPC and packaged-host behavior gates on macOS ARM64 and Linux x64/ARM64; packaged desktop and managed-session cutover proofs remain before that path replaces the released fallback.

Expand All @@ -23,8 +23,11 @@ T4 owns the client wire, generic host service, and standalone daemon in `@t4-cod
No Windows build, Intel Mac build, or native iOS application is currently shipped. iPhone and iPad
access use the responsive Tailnet browser/PWA compatibility client.

## What changed in v0.1.31
## What changed in v0.1.32

- New desktop-created sessions restore their current thinking level and fast-mode state after attachment and reconnect, so those controls work without manual recovery.
- Attaching to an existing or TUI-owned session remains observer-only and no longer risks claiming the legacy OMP session lock.
- Client runtime changes now select both current and pinned-legacy bridge continuity gates in pull-request CI.
- The session rail now matches the Codex desktop organization model: search, activity filters, sort controls, collapsible projects, flat and grouped views, and persistent preferences.
- Project menus can create sessions, open folders in the system file manager, collapse a group, or hide it from the rail. Hidden projects remain recoverable through the filter menu.
- Large sessions paint their newest saved transcript entries before older history finishes loading.
Expand Down Expand Up @@ -53,7 +56,7 @@ access use the responsive Tailnet browser/PWA compatibility client.
### Android

1. On the Android phone, sign in to Tailscale with an account that can reach the T4 Code host.
2. Download [`T4-Code-0.1.31-android.apk`](https://github.com/LycaonLLC/t4-code/releases/download/v0.1.31/T4-Code-0.1.31-android.apk).
2. Download [`T4-Code-0.1.32-android.apk`](https://github.com/LycaonLLC/t4-code/releases/download/v0.1.32/T4-Code-0.1.32-android.apk).
3. If Android asks, allow your browser or file manager to install unknown apps, then install the APK.
4. Open T4 Code and enter the host's HTTPS Tailscale address, including its port. The app saves the address; you can add more hosts later and switch between them.

Expand All @@ -62,23 +65,23 @@ The APK does not contain a host daemon or expose one to the public internet. It
### Linux (Debian/Ubuntu)

```sh
wget https://github.com/LycaonLLC/t4-code/releases/download/v0.1.31/T4-Code-0.1.31-linux-amd64.deb
sudo apt install ./T4-Code-0.1.31-linux-amd64.deb
wget https://github.com/LycaonLLC/t4-code/releases/download/v0.1.32/T4-Code-0.1.32-linux-amd64.deb
sudo apt install ./T4-Code-0.1.32-linux-amd64.deb
```

Use `apt install` rather than `dpkg -i` so system dependencies resolve automatically.

### Linux (AppImage)

```sh
wget https://github.com/LycaonLLC/t4-code/releases/download/v0.1.31/T4-Code-0.1.31-linux-x86_64.AppImage
chmod +x T4-Code-0.1.31-linux-x86_64.AppImage
./T4-Code-0.1.31-linux-x86_64.AppImage
wget https://github.com/LycaonLLC/t4-code/releases/download/v0.1.32/T4-Code-0.1.32-linux-x86_64.AppImage
chmod +x T4-Code-0.1.32-linux-x86_64.AppImage
./T4-Code-0.1.32-linux-x86_64.AppImage
```

### macOS (Apple Silicon)

1. Download [`T4-Code-0.1.31-mac-arm64.dmg`](https://github.com/LycaonLLC/t4-code/releases/download/v0.1.31/T4-Code-0.1.31-mac-arm64.dmg) (or [`T4-Code-0.1.31-mac-arm64.zip`](https://github.com/LycaonLLC/t4-code/releases/download/v0.1.31/T4-Code-0.1.31-mac-arm64.zip)).
1. Download [`T4-Code-0.1.32-mac-arm64.dmg`](https://github.com/LycaonLLC/t4-code/releases/download/v0.1.32/T4-Code-0.1.32-mac-arm64.dmg) (or [`T4-Code-0.1.32-mac-arm64.zip`](https://github.com/LycaonLLC/t4-code/releases/download/v0.1.32/T4-Code-0.1.32-mac-arm64.zip)).
2. Drag `T4 Code.app` into `/Applications`.
3. Open T4 Code normally. The release workflow verifies the pinned publisher, hardened runtime, secure timestamp, Apple notarization, stapled ticket, and Gatekeeper acceptance before publication.
4. To start terminal or CMUX sessions that can hand off to T4 Code, open **Settings → Hosts** and choose **Install t4-omp**. This adds `~/.local/bin/t4-omp` and leaves any existing `omp` command unchanged.
Expand Down
2 changes: 1 addition & 1 deletion apps/desktop/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@t4-code/desktop",
"version": "0.1.31",
"version": "0.1.32",
"private": true,
"type": "module",
"main": "dist-electron/main.cjs",
Expand Down
2 changes: 1 addition & 1 deletion apps/desktop/src/target-manager.ts
Original file line number Diff line number Diff line change
Expand Up @@ -408,7 +408,7 @@ export class DesktopTargetManager {
capabilities: requestedCapabilities,
requestedFeatures: this.requestedFeatures,
compatibilityRequestedFeatures: this.compatibilityRequestedFeatures,
client: { name: "T4 Code", version: "0.1.31", build: "desktop", platform: process.platform },
client: { name: "T4 Code", version: "0.1.32", build: "desktop", platform: process.platform },
reconnect: { baseMs: 250, maxMs: 10_000 },
};
const client = createOmpClient(clientOptions);
Expand Down
2 changes: 1 addition & 1 deletion apps/mobile/capacitor.config.json
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
"appName": "T4 Code",
"webDir": "dist",
"loggingBehavior": "debug",
"appendUserAgent": " T4CodeMobile/0.1.31",
"appendUserAgent": " T4CodeMobile/0.1.32",
"android": {
"path": "android",
"minWebViewVersion": 60,
Expand Down
2 changes: 1 addition & 1 deletion apps/mobile/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@t4-code/mobile",
"version": "0.1.31",
"version": "0.1.32",
"private": true,
"type": "module",
"scripts": {
Expand Down
2 changes: 1 addition & 1 deletion apps/site/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@t4-code/site",
"version": "0.1.31",
"version": "0.1.32",
"private": true,
"type": "module",
"scripts": {
Expand Down
14 changes: 7 additions & 7 deletions apps/site/src/release.ts
Original file line number Diff line number Diff line change
Expand Up @@ -13,8 +13,8 @@ export const OMP_UPSTREAM_TAG = "v17.0.5";
export const OMP_UPSTREAM_COMMIT = "9fd6e97113f5ed3a847e66d346970efdf8afcad9";
export const OMP_UPSTREAM_URL = `${OMP_URL}/tree/${OMP_UPSTREAM_TAG}`;
export const APP_WIRE_VERSION = "0.7.0";
export const RELEASE_TAG = "v0.1.31";
export const RELEASE_VERSION = "0.1.31";
export const RELEASE_TAG = "v0.1.32";
export const RELEASE_VERSION = "0.1.32";
export const RELEASES_URL = `${REPO_URL}/releases/tag/${RELEASE_TAG}`;
export const RELEASE_MANIFEST_URL = `${SITE_URL}/releases/latest.json`;

Expand Down Expand Up @@ -49,11 +49,11 @@ function asset(
}

export const RELEASE_ASSETS: readonly ReleaseAsset[] = [
asset("android", "apk", "universal", "T4-Code-0.1.31-android.apk", "Android APK"),
asset("linux", "deb", "x86_64", "T4-Code-0.1.31-linux-amd64.deb", "Linux .deb"),
asset("linux", "appimage", "x86_64", "T4-Code-0.1.31-linux-x86_64.AppImage", "Linux AppImage"),
asset("mac", "dmg", "arm64", "T4-Code-0.1.31-mac-arm64.dmg", "macOS .dmg"),
asset("mac", "zip", "arm64", "T4-Code-0.1.31-mac-arm64.zip", "macOS .zip"),
asset("android", "apk", "universal", "T4-Code-0.1.32-android.apk", "Android APK"),
asset("linux", "deb", "x86_64", "T4-Code-0.1.32-linux-amd64.deb", "Linux .deb"),
asset("linux", "appimage", "x86_64", "T4-Code-0.1.32-linux-x86_64.AppImage", "Linux AppImage"),
asset("mac", "dmg", "arm64", "T4-Code-0.1.32-mac-arm64.dmg", "macOS .dmg"),
asset("mac", "zip", "arm64", "T4-Code-0.1.32-mac-arm64.zip", "macOS .zip"),
];

export function assetsFor(platform: Platform): readonly ReleaseAsset[] {
Expand Down
18 changes: 9 additions & 9 deletions apps/site/test/release.test.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
// Release contract guard: exact v0.1.31 asset names and URLs, and the
// Release contract guard: exact v0.1.32 asset names and URLs, and the
// platform-detection rule the hero download button relies on.
import { describe, expect, it } from "vite-plus/test";
import {
Expand All @@ -20,13 +20,13 @@ import {
} from "../src/release.ts";

describe("release assets", () => {
it("carries the five contracted v0.1.31 filenames", () => {
it("carries the five contracted v0.1.32 filenames", () => {
expect(RELEASE_ASSETS.map((a) => a.filename)).toEqual([
"T4-Code-0.1.31-android.apk",
"T4-Code-0.1.31-linux-amd64.deb",
"T4-Code-0.1.31-linux-x86_64.AppImage",
"T4-Code-0.1.31-mac-arm64.dmg",
"T4-Code-0.1.31-mac-arm64.zip",
"T4-Code-0.1.32-android.apk",
"T4-Code-0.1.32-linux-amd64.deb",
"T4-Code-0.1.32-linux-x86_64.AppImage",
"T4-Code-0.1.32-mac-arm64.dmg",
"T4-Code-0.1.32-mac-arm64.zip",
]);
});

Expand All @@ -38,8 +38,8 @@ describe("release assets", () => {

it("targets the public LycaonLLC repo", () => {
expect(REPO_URL).toBe("https://github.com/LycaonLLC/t4-code");
expect(RELEASE_TAG).toBe("v0.1.31");
expect(RELEASE_VERSION).toBe("0.1.31");
expect(RELEASE_TAG).toBe("v0.1.32");
expect(RELEASE_VERSION).toBe("0.1.32");
expect(RELEASE_MANIFEST_URL).toBe("https://t4code.net/releases/latest.json");
});

Expand Down
2 changes: 1 addition & 1 deletion apps/web/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@t4-code/web",
"version": "0.1.31",
"version": "0.1.32",
"private": true,
"type": "module",
"scripts": {
Expand Down
2 changes: 1 addition & 1 deletion apps/web/src/platform/browser-shell-port.ts
Original file line number Diff line number Diff line change
Expand Up @@ -339,7 +339,7 @@ export function createBrowserShellPort(
},
client: {
name: "T4 Code",
version: "0.1.31",
version: "0.1.32",
build: mobilePlatform ?? "browser",
platform: mobilePlatform ?? (platform === "darwin" ? "darwin" : "linux"),
},
Expand Down
8 changes: 4 additions & 4 deletions compat/omp-app-matrix.json
Original file line number Diff line number Diff line change
Expand Up @@ -266,12 +266,12 @@
},
"t4Host": {
"wirePackage": "@t4-code/host-wire",
"wirePackageVersion": "0.1.31",
"wirePackageVersion": "0.1.32",
"wireSchemaVersion": "0.7.0",
"servicePackage": "@t4-code/host-service",
"servicePackageVersion": "0.1.31",
"servicePackageVersion": "0.1.32",
"daemonPackage": "@t4-code/host-daemon",
"daemonPackageVersion": "0.1.31",
"daemonPackageVersion": "0.1.32",
"protocol": "omp-app/1",
"authorityBridgeProtocol": "t4-omp-authority/1",
"sourcePaths": [
Expand All @@ -291,6 +291,6 @@
},
"desktop": {
"package": "@t4-code/protocol",
"version": "0.1.31"
"version": "0.1.32"
}
}
2 changes: 1 addition & 1 deletion deploy/charts/t4-cluster/Chart.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,6 @@ apiVersion: v2
name: t4-cluster
description: Default-off portable T4 Kubernetes operator and stateless cluster gateway
version: 0.1.0
appVersion: "0.1.31"
appVersion: "0.1.32"
type: application
kubeVersion: ">=1.30.0-0"
14 changes: 12 additions & 2 deletions docs/CURRENT_RELEASE_NOTES.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,9 +10,19 @@ session and transcript behavior, native Browser workspace, terminal, files, revi
credentials, and signed update path. The public demo now builds from the same React client shipped
inside Electron, eliminating a second product implementation.

## Session controls without lock takeover

New sessions created in T4 Code now restore their semantic thinking-level and fast-mode state after
attachment and transport reconnects. Existing sessions, including sessions owned by an OMP TUI,
remain observer-only: T4 does not issue the legacy state read that can start a supervisor and claim
the session lock.

Pull-request CI now treats client runtime changes as bridge-boundary changes and runs both the
current-runtime and pinned-legacy continuity gates.

## A session rail built for large libraries

T4 Code v0.1.31 makes a large session library easier to navigate. The rail now supports text search, activity filters, newest/oldest sorting, grouped and flat layouts, collapsible project folders, and saved display preferences. Those controls follow the Codex desktop organization model while keeping OMP as the source of truth.
T4 Code v0.1.32 makes a large session library easier to navigate. The rail now supports text search, activity filters, newest/oldest sorting, grouped and flat layouts, collapsible project folders, and saved display preferences. Those controls follow the Codex desktop organization model while keeping OMP as the source of truth.

Project menus can create a session in that folder, reveal the folder in the system file manager, collapse the group, or hide it from the rail. Hidden projects are not deleted and can be restored from the filter menu. The reveal action is deliberately narrow: the host accepts only project paths already present in its session catalog.

Expand Down Expand Up @@ -48,7 +58,7 @@ Session-linked Host Browser Previews continue to open in their dedicated workspa

## Runtime provenance

T4 Code v0.1.31 vendors app-wire 0.7.0 from integration commit [796bb7dc](https://github.com/lyc-aon/oh-my-pi/commit/796bb7dca45027bd4b7b94017cdf41ef214a11f2), source tree `0c195a01ba0bb98fbf4d4863aee59bf23a6e81b7`. The frozen package remains compatibility evidence; T4 owns the active `omp-app/1` wire schema.
T4 Code v0.1.32 vendors app-wire 0.7.0 from integration commit [796bb7dc](https://github.com/lyc-aon/oh-my-pi/commit/796bb7dca45027bd4b7b94017cdf41ef214a11f2), source tree `0c195a01ba0bb98fbf4d4863aee59bf23a6e81b7`. The frozen package remains compatibility evidence; T4 owns the active `omp-app/1` wire schema.

The verified OMP 17.0.5 runtime is built from commit [fc0c3913](https://github.com/wolfiesch/oh-my-pi/commit/fc0c391334c08ab260057756aa84bd2b07741ee7) and tagged [t4code-17.0.5-appserver-13](https://github.com/wolfiesch/oh-my-pi/tree/t4code-17.0.5-appserver-13). It provides the bounded authority bridge used by T4's standalone host and no longer exposes the old public appserver launchers. It pages snapshot-consistent session inventories across bounded frames, marks over-limit inventories partial, and allows lifecycle actions only when a lock is missing or provably stale. It also keeps session-list metadata sparse before bridge encoding, publishes `xd://` mounts atomically with their transport tools, and preserves bounded newest-first transcript paging, stale-owner recovery, privacy-safe local project reveal, lazy session indexing, cross-session attention and transcript search, and the negotiated browser-preview command surface. Unsupported optional capabilities remain hidden when the host does not advertise them.

Expand Down
2 changes: 1 addition & 1 deletion docs/OMP_BRIDGE.md
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,7 @@ The simplified rollout does not weaken the hard boundaries. We retain strict pro

## Released product state

T4 v0.1.31 is paired with immutable OMP tag `t4code-17.0.5-appserver-13` at commit `fc0c391334c08ab260057756aa84bd2b07741ee7`. Its published Apple Silicon binary is 120,893,008 bytes with SHA-256 `60ce5193eadc2884a4313289ff1166b6a1daae97f3a3ec66dc260ea5c5713756`.
T4 v0.1.32 is paired with immutable OMP tag `t4code-17.0.5-appserver-13` at commit `fc0c391334c08ab260057756aa84bd2b07741ee7`. Its published Apple Silicon binary is 120,893,008 bytes with SHA-256 `60ce5193eadc2884a4313289ff1166b6a1daae97f3a3ec66dc260ea5c5713756`.

The standalone OMP release carries an ad-hoc integrity signature because the fork release workflow does not have a Developer ID identity. The protected T4 product build remains the distribution-signing boundary: it must sign both the bundled OMP executable and `t4-host` with T4's Developer ID identity before shipping the macOS app.

Expand Down
Loading
Loading