diff --git a/README.md b/README.md index e380b57..cb280f9 100644 --- a/README.md +++ b/README.md @@ -12,6 +12,8 @@ T4 Code needs an OMP build with desktop appserver support. For v0.1.24, use the T4 Code v0.1.24 was verified with OMP 17.0.4 built from [`d57dcd85`](https://github.com/lyc-aon/oh-my-pi/commit/d57dcd855006c673d8d530237d474fe5ba5645c4), tagged [`t4code-17.0.4-appserver-5`](https://github.com/lyc-aon/oh-my-pi/tree/t4code-17.0.4-appserver-5). That public integration is based on the official upstream [`v17.0.4`](https://github.com/can1357/oh-my-pi/tree/v17.0.4) tag at [`3fdd85ab`](https://github.com/can1357/oh-my-pi/commit/3fdd85ab6c6bab6c0cdee80abbbec0981740a5c0). It adds redacted Codex transport diagnostics, the versioned Agent View lifecycle contract, session-owned cancellation, macOS system-temp aliases, workspace-native build artifacts, retry-safe release metadata, lock-aware session observation, complete transcript reconciliation, missing-lock-only promotion, 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.4 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 vendors `@oh-my-pi/app-wire` 0.6.0 from integration commit [`ae4b53b4`](https://github.com/lyc-aon/oh-my-pi/commit/ae4b53b416f32b200865a32ed9baabd5a4666fa4), source tree `2b8a5f697273f5044789b8ae638b6c264f9f8499`. +The current source tree advances the vendored contract to `@oh-my-pi/app-wire` 0.6.1 from integration commit [`e3e15c03`](https://github.com/lyc-aon/oh-my-pi/commit/e3e15c03ae95ebbda5f26495cd21213cc53518b1), source tree `e0f32b279eb4b8cbc403e47d765a226bee99c99f`. This adds the bounded cross-session transcript search and historical context contract. + | Platform | Arch | Package | | -------- | --------------------- | ----------------------------------------- | | Android | arm64, armv7, x86_64 | `.apk` (**signed**) | diff --git a/THIRD_PARTY_NOTICES.md b/THIRD_PARTY_NOTICES.md index f2a7fa2..3ac7a34 100644 --- a/THIRD_PARTY_NOTICES.md +++ b/THIRD_PARTY_NOTICES.md @@ -6,7 +6,7 @@ T3 Code is selectively referenced for future ports from https://github.com/pingd ## Oh My Pi -Future adaptations of OMP source use the OMP repository under its repository license. OMP remains runtime authority; adapted files retain OMP attribution and the applicable source license. The vendored `@oh-my-pi/app-wire@0.6.0` package is packed from the public `lyc-aon/oh-my-pi` integration commit `ae4b53b416f32b200865a32ed9baabd5a4666fa4`, source tree `2b8a5f697273f5044789b8ae638b6c264f9f8499`; tarball SHA-256 `92256497bb8086ab9cefa30e4890293060a52b9d0c5349743ee94ae3224ca32c`; golden corpus SHA-256 `7ebd5fa6cbc37ae0f28cf1d957d9cab841b875581cb42ffbe81cea66f1dc2ef1`. Target integration commit is recorded in the Desktop commit history and compatibility matrix. +Future adaptations of OMP source use the OMP repository under its repository license. OMP remains runtime authority; adapted files retain OMP attribution and the applicable source license. The vendored `@oh-my-pi/app-wire@0.6.1` package is packed from the public `lyc-aon/oh-my-pi` integration commit `e3e15c03ae95ebbda5f26495cd21213cc53518b1`, source tree `e0f32b279eb4b8cbc403e47d765a226bee99c99f`; tarball SHA-256 `78ec6223e7ad0f4f9e14526a822eaa45b363c856065c08196b2817a2f42740b9`; golden corpus SHA-256 `d5e674095de3d9b3b56a5668bc91cbbf1904b409ea9ea6456c2eabdf272e7870`. Target integration commit is recorded in the Desktop commit history and compatibility matrix. ## Oh My Pi icon diff --git a/apps/desktop/test/target-manager.test.ts b/apps/desktop/test/target-manager.test.ts index 33dcfa4..627f3bf 100644 --- a/apps/desktop/test/target-manager.test.ts +++ b/apps/desktop/test/target-manager.test.ts @@ -464,8 +464,10 @@ describe("desktop target manager boundaries", () => { }; expect(firstHello.requestedFeatures).toContain("prompt.images"); expect(firstHello.requestedFeatures).toContain("transcript.images"); + expect(firstHello.requestedFeatures).toContain("transcript.search"); expect(fallbackHello.requestedFeatures).not.toContain("prompt.images"); expect(fallbackHello.requestedFeatures).not.toContain("transcript.images"); + expect(fallbackHello.requestedFeatures).toContain("transcript.search"); await runtime.close(); }); diff --git a/apps/web/src/components/CommandPalette.tsx b/apps/web/src/components/CommandPalette.tsx index 1aea3a4..8c22f53 100644 --- a/apps/web/src/components/CommandPalette.tsx +++ b/apps/web/src/components/CommandPalette.tsx @@ -3,10 +3,12 @@ // focus (dialog primitive owns the focus contract). import { cn, Dialog, DialogPopup, StatusPill } from "@t4-code/ui"; import { useNavigate } from "@tanstack/react-router"; -import { CornerDownLeft } from "lucide-react"; +import { CornerDownLeft, Search } from "lucide-react"; import { type ReactNode, useEffect, useMemo, useRef, useState } from "react"; import type { ProjectGroup } from "../lib/session-tree.ts"; +import { handoffTranscriptSearchQuery } from "../features/transcript-search/index.ts"; +import { TRANSCRIPT_SEARCH_ROUTE } from "../features/transcript-search/route.ts"; import { useWorkspace, workspaceStore } from "../state/store-instance.ts"; import { resolveTheme } from "../theme/theme.ts"; interface PaletteItem { @@ -21,6 +23,7 @@ function buildItems( groups: readonly ProjectGroup[], navigate: (sessionId: string) => void, openInbox: () => void, + openTranscriptSearch: (query: string) => void, openAgentView: () => void, openSettings: () => void, ): PaletteItem[] { @@ -66,6 +69,13 @@ function buildItems( status: null, run: openInbox, }, + { + id: "action:transcript-search", + label: "Open transcript search", + hint: "Prior decisions and code discussions", + status: