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 @@ -10,7 +10,7 @@ body:
id: version
attributes:
label: T4 Code version
placeholder: "0.1.15"
placeholder: "0.1.16"
validations:
required: true
- type: dropdown
Expand Down
34 changes: 17 additions & 17 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,35 +4,35 @@ 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.15**](https://github.com/LycaonLLC/t4-code/releases/tag/v0.1.15) · [**Docs**](https://t4code.net/docs) · [**Get the source**](#build-from-source)
[**Download v0.1.16**](https://github.com/LycaonLLC/t4-code/releases/tag/v0.1.16) · [**Docs**](https://t4code.net/docs) · [**Get the source**](#build-from-source)

## Requirements

T4 Code needs an OMP build with desktop appserver support. For v0.1.15, use the public integration build below.
T4 Code needs an OMP build with desktop appserver support. For v0.1.16, use the public integration build below.

T4 Code v0.1.15 was verified with OMP 16.5.2 built from [`f9322817`](https://github.com/lyc-aon/oh-my-pi/commit/f9322817981e16bf3f1e3d77684f4269f026aa64), tagged [`t4code-16.5.2-appserver-2`](https://github.com/lyc-aon/oh-my-pi/tree/t4code-16.5.2-appserver-2). That public integration is based on the official upstream [`v16.5.2`](https://github.com/can1357/oh-my-pi/tree/v16.5.2) tag at [`7d02778c`](https://github.com/can1357/oh-my-pi/commit/7d02778c60f4b5db60f84bedbca79d6e64cb91f5). It carries forward T4's appserver, lifecycle, image, session-control, and atomic maintenance integration, then adds bounded child-agent transcript streaming. Tool results preserve sanitized structured details, subagent RPC reads have byte and record ceilings, and child-transcript image digests use the same verified image-read path as the parent session. The official upstream v16.5.2 tag has no `appserver` command, so it cannot host T4 Code. The verified runtime is a normal build from the public `lyc-aon/oh-my-pi` source; T4 Code does not depend on private home-directory files, an auth broker, or a custom Codex CLI fork. T4 Code vendors `@oh-my-pi/app-wire` 0.5.5 from integration commit [`6a87fa64`](https://github.com/lyc-aon/oh-my-pi/commit/6a87fa6407ebff20417b4d52885a6bb3091003ea), source tree `a2495fe8781c979184fe7fb9a6d37d8f33bad30f`.
T4 Code v0.1.16 was verified with OMP 16.5.2 built from [`264958b2`](https://github.com/lyc-aon/oh-my-pi/commit/264958b23acac16baaf3bf0024129dc1a57f9d14), tagged [`t4code-16.5.2-appserver-4`](https://github.com/lyc-aon/oh-my-pi/tree/t4code-16.5.2-appserver-4). That public integration is based on the official upstream [`v16.5.2`](https://github.com/can1357/oh-my-pi/tree/v16.5.2) tag at [`7d02778c`](https://github.com/can1357/oh-my-pi/commit/7d02778c60f4b5db60f84bedbca79d6e64cb91f5). The transcript behavior introduced in appserver-2 remains unchanged: tool results preserve sanitized structured details, subagent RPC reads have byte and record ceilings, and child-transcript image digests use the same verified image-read path as the parent session. Appserver-4 fixes the appserver clean-source TypeScript/build check and makes the appserver type check plus full runtime tests mandatory before OMP release binaries can publish. It also carries forward T4's appserver, lifecycle, image, session-control, and atomic maintenance integration. The official upstream v16.5.2 tag has no `appserver` command, so it cannot host T4 Code. The verified runtime is a normal build from the public `lyc-aon/oh-my-pi` source; T4 Code does not depend on private home-directory files, an auth broker, or a custom Codex CLI fork. T4 Code vendors `@oh-my-pi/app-wire` 0.5.5 from integration commit [`6a87fa64`](https://github.com/lyc-aon/oh-my-pi/commit/6a87fa6407ebff20417b4d52885a6bb3091003ea), source tree `a2495fe8781c979184fe7fb9a6d37d8f33bad30f`.

| Platform | Arch | Package |
| -------- | --------------------- | ---------------------------------------- |
| Android | arm64, armv7, x86_64 | `.apk` (**signed**) |
| Linux | x86_64 | `.deb`, AppImage |
| macOS | Apple Silicon (arm64) | `.dmg`, `.zip` (**unsigned, see below**) |

No Windows build and no Intel Mac build in v0.1.15. The iOS TestFlight build is coming soon.
No Windows build and no Intel Mac build in v0.1.16. The iOS TestFlight build is coming soon.

## What changed in v0.1.15
## What changed in v0.1.16

- Known tools now have dedicated transcript views for patches, task lists, child-agent work, file reads, shell commands, searches, and fetched sources. Arguments and structured results stay readable without opening raw JSON.
- The Agents pane follows child-agent transcript events and hydrates durable transcript records on demand. It uses the same message, tool, and image components as the main transcript.
- The matching OMP runtime preserves sanitized structured tool details, bounds subagent transcript reads by bytes and records, and serves authorized child-transcript images through the established image path.
- The release keeps the verified atomic maintainer and Android identity checks introduced in the previous release.
- This follow-up release pins T4 Code to the exact appserver-4 runtime source and keeps the tool-aware transcript and child-agent behavior shipped in v0.1.15.
- Appserver-4 fixes its clean-source TypeScript/build check so the appserver package is checked from a fresh checkout.
- OMP release binaries now require the appserver type check and full runtime tests to pass before publication.
- App-wire remains at 0.5.5; no wire-format change is required for this release.

## Install

### 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.15-android.apk`](https://github.com/LycaonLLC/t4-code/releases/download/v0.1.15/T4-Code-0.1.15-android.apk).
2. Download [`T4-Code-0.1.16-android.apk`](https://github.com/LycaonLLC/t4-code/releases/download/v0.1.16/T4-Code-0.1.16-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.

Expand All @@ -41,26 +41,26 @@ The APK does not contain an appserver or expose one to the public internet. It c
### Linux (Debian/Ubuntu)

```sh
wget https://github.com/LycaonLLC/t4-code/releases/download/v0.1.15/T4-Code-0.1.15-linux-amd64.deb
sudo apt install ./T4-Code-0.1.15-linux-amd64.deb
wget https://github.com/LycaonLLC/t4-code/releases/download/v0.1.16/T4-Code-0.1.16-linux-amd64.deb
sudo apt install ./T4-Code-0.1.16-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.15/T4-Code-0.1.15-linux-x86_64.AppImage
chmod +x T4-Code-0.1.15-linux-x86_64.AppImage
./T4-Code-0.1.15-linux-x86_64.AppImage
wget https://github.com/LycaonLLC/t4-code/releases/download/v0.1.16/T4-Code-0.1.16-linux-x86_64.AppImage
chmod +x T4-Code-0.1.16-linux-x86_64.AppImage
./T4-Code-0.1.16-linux-x86_64.AppImage
```

### macOS (Apple Silicon)

> [!WARNING]
> **The macOS v0.1.15 build is unsigned and unnotarized.** Apple has not signed or notarized it, so Gatekeeper can report a "damaged" app or an unidentified developer. Only continue if you trust the release from this repository. You can always build from source instead.
> **The macOS v0.1.16 build is unsigned and unnotarized.** Apple has not signed or notarized it, so Gatekeeper can report a "damaged" app or an unidentified developer. Only continue if you trust the release from this repository. You can always build from source instead.

1. Download [`T4-Code-0.1.15-mac-arm64.dmg`](https://github.com/LycaonLLC/t4-code/releases/download/v0.1.15/T4-Code-0.1.15-mac-arm64.dmg) (or [`T4-Code-0.1.15-mac-arm64.zip`](https://github.com/LycaonLLC/t4-code/releases/download/v0.1.15/T4-Code-0.1.15-mac-arm64.zip)).
1. Download [`T4-Code-0.1.16-mac-arm64.dmg`](https://github.com/LycaonLLC/t4-code/releases/download/v0.1.16/T4-Code-0.1.16-mac-arm64.dmg) (or [`T4-Code-0.1.16-mac-arm64.zip`](https://github.com/LycaonLLC/t4-code/releases/download/v0.1.16/T4-Code-0.1.16-mac-arm64.zip)).
2. Drag `T4 Code.app` into `/Applications`.
3. If Gatekeeper blocks the app and you choose to proceed, remove the quarantine attributes from the copied app bundle:

Expand Down
2 changes: 1 addition & 1 deletion SECURITY.md
Original file line number Diff line number Diff line change
Expand Up @@ -26,4 +26,4 @@ We read every report and will reply to tell you what happens next. This is a sma

- T4 Code is a desktop client. The OMP runtime is a separate project; runtime vulnerabilities belong at <https://github.com/can1357/oh-my-pi>.
- Pairing credentials are encrypted with the OS keychain via Electron `safeStorage`. Reports about credential handling, the pairing flow, or the `t4-code://` deep-link handler are especially welcome.
- The macOS v0.1.15 build is unsigned and unnotarized; that is a known, disclosed limitation, not a vulnerability report. Removing `com.apple.quarantine` changes Gatekeeper handling but does not sign, notarize, or verify the app.
- The macOS v0.1.16 build is unsigned and unnotarized; that is a known, disclosed limitation, not a vulnerability report. Removing `com.apple.quarantine` changes Gatekeeper handling but does not sign, notarize, or verify the app.
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.15",
"version": "0.1.16",
"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 @@ -339,7 +339,7 @@ export class DesktopTargetManager {
capabilities: requestedCapabilities,
requestedFeatures: REQUESTED_FEATURES,
compatibilityRequestedFeatures: COMPATIBILITY_FEATURES,
client: { name: "T4 Code", version: "0.1.15", build: "desktop", platform: process.platform },
client: { name: "T4 Code", version: "0.1.16", build: "desktop", platform: process.platform },
reconnect: { attemptCap: 12, 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.15",
"appendUserAgent": " T4CodeMobile/0.1.16",
"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.15",
"version": "0.1.16",
"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.15",
"version": "0.1.16",
"private": true,
"type": "module",
"scripts": {
Expand Down
18 changes: 9 additions & 9 deletions apps/site/src/release.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,15 +6,15 @@ export const DOCS_URL = `${SITE_URL}/docs`;
export const REPO_URL = "https://github.com/LycaonLLC/t4-code";
export const OMP_URL = "https://github.com/can1357/oh-my-pi";
export const OMP_RUNTIME_VERSION = "16.5.2";
export const OMP_RUNTIME_COMMIT = "f9322817981e16bf3f1e3d77684f4269f026aa64";
export const OMP_RUNTIME_TAG = "t4code-16.5.2-appserver-2";
export const OMP_RUNTIME_COMMIT = "264958b23acac16baaf3bf0024129dc1a57f9d14";
export const OMP_RUNTIME_TAG = "t4code-16.5.2-appserver-4";
export const OMP_RUNTIME_URL = `https://github.com/lyc-aon/oh-my-pi/tree/${OMP_RUNTIME_TAG}`;
export const OMP_UPSTREAM_TAG = "v16.5.2";
export const OMP_UPSTREAM_COMMIT = "7d02778c60f4b5db60f84bedbca79d6e64cb91f5";
export const OMP_UPSTREAM_URL = `${OMP_URL}/tree/${OMP_UPSTREAM_TAG}`;
export const APP_WIRE_VERSION = "0.5.5";
export const RELEASE_TAG = "v0.1.15";
export const RELEASE_VERSION = "0.1.15";
export const RELEASE_TAG = "v0.1.16";
export const RELEASE_VERSION = "0.1.16";
export const RELEASES_URL = `${REPO_URL}/releases/tag/${RELEASE_TAG}`;

export type Platform = "android" | "linux" | "mac";
Expand Down Expand Up @@ -48,11 +48,11 @@ function asset(
}

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

export function assetsFor(platform: Platform): readonly ReleaseAsset[] {
Expand Down
24 changes: 12 additions & 12 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.15 asset names and URLs, and the
// Release contract guard: exact v0.1.16 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 @@ -19,13 +19,13 @@ import {
} from "../src/release.ts";

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

Expand All @@ -37,8 +37,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.15");
expect(RELEASE_VERSION).toBe("0.1.15");
expect(RELEASE_TAG).toBe("v0.1.16");
expect(RELEASE_VERSION).toBe("0.1.16");
});

it("splits assets by platform with correct architectures", () => {
Expand All @@ -59,10 +59,10 @@ describe("release assets", () => {

describe("OMP integration contract", () => {
it("pins the verified runtime tag, commit, and app-wire package", () => {
expect(OMP_RUNTIME_TAG).toBe("t4code-16.5.2-appserver-2");
expect(OMP_RUNTIME_COMMIT).toBe("f9322817981e16bf3f1e3d77684f4269f026aa64");
expect(OMP_RUNTIME_TAG).toBe("t4code-16.5.2-appserver-4");
expect(OMP_RUNTIME_COMMIT).toBe("264958b23acac16baaf3bf0024129dc1a57f9d14");
expect(OMP_RUNTIME_URL).toBe(
"https://github.com/lyc-aon/oh-my-pi/tree/t4code-16.5.2-appserver-2",
"https://github.com/lyc-aon/oh-my-pi/tree/t4code-16.5.2-appserver-4",
);
expect(OMP_UPSTREAM_TAG).toBe("v16.5.2");
expect(OMP_UPSTREAM_COMMIT).toBe("7d02778c60f4b5db60f84bedbca79d6e64cb91f5");
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.15",
"version": "0.1.16",
"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 @@ -279,7 +279,7 @@ export function createBrowserShellPort(
},
client: {
name: "T4 Code",
version: "0.1.15",
version: "0.1.16",
build: mobilePlatform ?? "browser",
platform: mobilePlatform ?? (platform === "darwin" ? "darwin" : "linux"),
},
Expand Down
12 changes: 7 additions & 5 deletions compat/omp-app-matrix.json
Original file line number Diff line number Diff line change
Expand Up @@ -14,9 +14,9 @@
"package": "omp",
"version": "16.5.2",
"sourceRepository": "https://github.com/lyc-aon/oh-my-pi",
"sourceCommit": "f9322817981e16bf3f1e3d77684f4269f026aa64",
"sourceUrl": "https://github.com/lyc-aon/oh-my-pi/commit/f9322817981e16bf3f1e3d77684f4269f026aa64",
"sourceTag": "t4code-16.5.2-appserver-2",
"sourceCommit": "264958b23acac16baaf3bf0024129dc1a57f9d14",
"sourceUrl": "https://github.com/lyc-aon/oh-my-pi/commit/264958b23acac16baaf3bf0024129dc1a57f9d14",
"sourceTag": "t4code-16.5.2-appserver-4",
"upstreamRepository": "https://github.com/can1357/oh-my-pi",
"upstreamTag": "v16.5.2",
"upstreamCommit": "7d02778c60f4b5db60f84bedbca79d6e64cb91f5",
Expand Down Expand Up @@ -52,12 +52,14 @@
"structured-tool-result-details",
"agent-transcript-streaming",
"bounded-subagent-rpc-reads",
"child-transcript-image-reads"
"child-transcript-image-reads",
"clean-source-appserver-typecheck",
"required-appserver-runtime-release-gates"
],
"upstreamTagContainsIntegrationPatches": false
},
"desktop": {
"package": "@t4-code/protocol",
"version": "0.1.15"
"version": "0.1.16"
}
}
8 changes: 4 additions & 4 deletions docs/CURRENT_RELEASE_NOTES.md
Original file line number Diff line number Diff line change
@@ -1,16 +1,16 @@
## Tool-aware transcripts and child agents
## Runtime release-gate hardening

T4 Code v0.1.15 gives known tools dedicated transcript views. Patch operations, task lists, child-agent work, file reads, shell commands, searches, and fetched sources show their useful arguments and structured results without exposing raw event payloads.
T4 Code v0.1.16 keeps the tool-aware transcript views and child-agent behavior shipped in v0.1.15. Patch operations, task lists, child-agent work, file reads, shell commands, searches, and fetched sources show their useful arguments and structured results without exposing raw event payloads.

The Agents pane follows child-agent transcript events as they arrive and hydrates durable transcript records when opened. Child messages, tools, and images use the same rendering path as the main transcript. Subagent RPC reads have byte and record ceilings, so long-running agents remain responsive without unbounded transcript fetches.

The runtime preserves sanitized structured tool-result details while omitting embedded image bytes from those details. Authorized image digests from child transcripts remain available through the established session image-read path.

## Runtime compatibility

T4 Code v0.1.15 vendors app-wire 0.5.5 from integration commit [6a87fa64](https://github.com/lyc-aon/oh-my-pi/commit/6a87fa6407ebff20417b4d52885a6bb3091003ea), source tree `a2495fe8781c979184fe7fb9a6d37d8f33bad30f`. Image prompts activate only when the host advertises the additive image capability; the compatibility handshake keeps older appservers available.
T4 Code v0.1.16 vendors app-wire 0.5.5 from integration commit [6a87fa64](https://github.com/lyc-aon/oh-my-pi/commit/6a87fa6407ebff20417b4d52885a6bb3091003ea), source tree `a2495fe8781c979184fe7fb9a6d37d8f33bad30f`. Image prompts activate only when the host advertises the additive image capability; the compatibility handshake keeps older appservers available.

The matching OMP 16.5.2 runtime is built from [f9322817](https://github.com/lyc-aon/oh-my-pi/commit/f9322817981e16bf3f1e3d77684f4269f026aa64) and tagged [t4code-16.5.2-appserver-2](https://github.com/lyc-aon/oh-my-pi/tree/t4code-16.5.2-appserver-2). It carries forward T4's appserver, lifecycle, image, session-control, and atomic maintenance integration, then adds bounded child-agent transcript streaming and structured tool-result details.
The matching OMP 16.5.2 runtime is built from [264958b2](https://github.com/lyc-aon/oh-my-pi/commit/264958b23acac16baaf3bf0024129dc1a57f9d14) and tagged [t4code-16.5.2-appserver-4](https://github.com/lyc-aon/oh-my-pi/tree/t4code-16.5.2-appserver-4). The semantic runtime feature remains the appserver-2 implementation: bounded child-agent transcript streaming, structured tool-result details, bounded subagent reads, and verified child-transcript image reads. Appserver-4 fixes the clean-source TypeScript/build check and permanently adds the appserver type check plus full runtime tests to the gates that must pass before OMP release binaries publish.

The integration is based on the official upstream [v16.5.2 tag](https://github.com/can1357/oh-my-pi/tree/v16.5.2), commit [7d02778c](https://github.com/can1357/oh-my-pi/commit/7d02778c60f4b5db60f84bedbca79d6e64cb91f5). Official upstream OMP v16.5.2 has no `appserver` command and cannot host T4 Code.

Expand Down
Loading
Loading