Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
61 commits
Select commit Hold shift + click to select a range
73f7e38
docs: Project Direction for the toolboxmd workspace fork (#5)
lukemaj Sep 25, 2026
1f0ae75
docs: name the fork Chromeria and record the product family (#11)
lukemaj Sep 25, 2026
648b9fa
feat(desktop): brand the fork build as Chromeria (#12)
lukemaj Sep 25, 2026
e2ab0a7
test(brand): expect the Chromeria web icons in production builds (#13)
lukemaj Sep 25, 2026
0b4371b
feat(threads): production child threads in Agents panel plus threads …
lukemaj Sep 25, 2026
959f022
feat(web): show Chromeria as the product name in the web UI (#14)
lukemaj Sep 25, 2026
e280b4b
docs(fork): Chromeria install, rebase routine and GitHub-hosted CI (#9)
lukemaj Sep 25, 2026
1041bbb
feat(server): add project-scoped thread supervision (#15) (#16)
lukemaj Sep 25, 2026
bee197f
feat(web): Prism spawns, collapsed child tree and parent breadcrumb (…
lukemaj Sep 25, 2026
d30910f
feat(server): Prism MCP toolkit, spawn_thread(role), role kits and pr…
lukemaj Sep 25, 2026
cc73c95
feat(web): configure Prism role preferences and view capacity (#23)
lukemaj Sep 25, 2026
e24e010
feat(fork): map fork features and report upstream overlap (#24)
lukemaj Sep 25, 2026
6b31e31
feat(web): Prism settings in the Providers layout, lanes only for Wor…
lukemaj Sep 25, 2026
bbead6b
fix(ci): fetch enough upstream history for the fork stack check (#39)
lukemaj Sep 26, 2026
5c47ced
feat(web): GitHub Issues next to PRs, linked to threads, with compute…
lukemaj Sep 26, 2026
42b9c64
fix(web): open PRs from Issues and chat links in the app (#40) (#41)
lukemaj Sep 27, 2026
8518d0d
fix(web): Issues filters use the PR Filters menu (#42) (#43)
lukemaj Sep 27, 2026
864722e
fix(web): PR panel no longer shows "All fibers interrupted" on open (…
lukemaj Sep 27, 2026
f81f18b
fix(server): child threads keep reporting to their parent after a res…
lukemaj Sep 27, 2026
d11ac07
feat(server): tell agents when to use the t3-code tools (#46) (#53)
lukemaj Sep 27, 2026
dcf22be
chore(fork): remove fork stack commit-count cap
lukemaj Sep 27, 2026
19a04dc
feat(server): Prism stream clock for worker liveness, plus prism_canc…
lukemaj Sep 28, 2026
6693567
fix(server): child threads no longer flood the mobile thread list (#60)
lukemaj Sep 28, 2026
ca3706f
feat(server): threads resume on their own after a usage limit resets …
lukemaj Sep 28, 2026
26b5c3f
feat(server): detect stale worker turns and notify their parent (#65)
lukemaj Sep 28, 2026
f8a22e9
feat(server): delegation tools are always loaded and name the shell C…
lukemaj Sep 29, 2026
5273318
fix: prism_submit names its workspace default; linked Issues show the…
lukemaj Sep 29, 2026
e4cd329
feat(web): linked Issue rows read like the pull request rows (#76)
lukemaj Sep 29, 2026
0cf01db
fix(web): Chromeria mark is readable in the sidebar; project icon is …
lukemaj Sep 29, 2026
1b86938
docs: AGENTS.md lets agents stage the merged build on the maintainer'…
lukemaj Sep 29, 2026
cd93d8a
fix(ci): main passes the fork stack and unused-code checks again (#80)
lukemaj Sep 29, 2026
7bb6a21
fix(ci): drop fork allowlist entries duplicated by #78 and #80 (#81)
lukemaj Sep 29, 2026
bc71a9d
feat(server): Prism guidance tells the planner to report router defec…
lukemaj Sep 29, 2026
6eb7c90
feat(web): links panel shows what child threads linked (#83)
lukemaj Sep 29, 2026
2211614
feat(server): prism_submit selects the dispatcher mode (#84) (#85)
lukemaj Sep 29, 2026
c0132ad
feat(server): planner confirms router defects, files them and starts …
lukemaj Sep 30, 2026
40c2b29
fix(server): children start in full access; drop agent- and kit-set r…
lukemaj Oct 1, 2026
dacd73d
fix(web): render Mermaid diagrams as images (#90) (#91)
lukemaj Oct 1, 2026
2e560f6
docs: Prism is the fork's router; retire the Python runner (#92) (#99)
lukemaj Oct 1, 2026
a3882be
docs: Objective covers both dispatch modes and their comparison (#92)…
lukemaj Oct 1, 2026
4898339
feat(server): every Prism role has every thread tool; roles use six n…
lukemaj Oct 1, 2026
9f1f2c4
feat(server): interrupt_thread stops a thread's running turn (#95) (#…
lukemaj Oct 1, 2026
ca2372f
fix(server): report-back reaches the parent exactly once across a res…
lukemaj Oct 1, 2026
5f2dae5
feat(server): route delegated work through spawn_thread roles (#104)
lukemaj Oct 1, 2026
0dcf6ae
feat(server): direct child threads resume on their own after a usage …
lukemaj Oct 1, 2026
97fc049
chore(server): remove the Model Router runner hooks (#97) (#107)
lukemaj Oct 1, 2026
c210585
docs: Objective is the Promachos working in Chromeria (#112)
lukemaj Oct 1, 2026
0db8b3f
docs: glossary names the Promachos, Satrapies and Libraries (#111)
lukemaj Oct 1, 2026
93bcc9b
fix(web): open Issue links beside their thread (#124)
lukemaj Oct 1, 2026
6f56eb9
feat(server): spawn threads into another project (#126)
lukemaj Oct 1, 2026
c66f6b3
feat(prism): select the initial Promachos conversation model (#125)
lukemaj Oct 1, 2026
6acb2cf
fix(agents): retire a stopped thread subtree (#129)
lukemaj Oct 1, 2026
763faa7
feat(web): Promachos mode chats in paragraph bubbles (#128)
lukemaj Oct 1, 2026
e5cf87a
feat(server): continue idle threads in Wight mode (#127)
lukemaj Oct 1, 2026
08fc76b
feat(spectrum): add council and free discussions (#130)
lukemaj Oct 1, 2026
7f0a8ff
feat: person picker and shared threads for Luke and Pauli (#131)
lukemaj Oct 1, 2026
86d3269
feat(server): run scheduled tasks until their checks pass (#132)
lukemaj Oct 2, 2026
d0fbed7
fix(server): agent-started turns keep the thread's stored effort (#134)
lukemaj Oct 2, 2026
dafca35
fix(server): recognize remotes in partial clones (#138)
lukemaj Oct 2, 2026
7dd561e
fix(server): Spectrum recovery stop no longer ends a newer Drafter re…
lukemaj Oct 2, 2026
0dccad9
docs: bring mobile builds into the Objective's scope
lukemaj Oct 2, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
18 changes: 10 additions & 8 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ concurrency:
jobs:
check:
name: Check
runs-on: blacksmith-8vcpu-ubuntu-2404
runs-on: ubuntu-24.04
timeout-minutes: 10
steps:
- name: Checkout
Expand Down Expand Up @@ -75,7 +75,7 @@ jobs:
# limit stays at the default 4 so peak load per runner is unchanged.
test:
name: Test
runs-on: blacksmith-8vcpu-ubuntu-2404
runs-on: ubuntu-24.04
timeout-minutes: 10
steps:
- name: Checkout
Expand Down Expand Up @@ -110,15 +110,17 @@ jobs:
run: node --test .github/scripts/check-nightly-release.test.cjs

- name: Test
run: vp run --parallel --concurrency-limit 4 --filter '!t3' --filter '!@t3tools/monorepo' test
# Fork: GitHub-hosted runners are about 2-3x slower than Blacksmith, so
# generated-data tests need more than vitest's 5s default.
run: vp run --parallel --concurrency-limit 4 --filter '!t3' --filter '!@t3tools/monorepo' test --testTimeout=20000

# apps/server sets `fileParallelism: false`, so its 239 files run strictly
# one at a time. Sharding spreads them over separate runners instead of
# separate workers, so no two server test files ever share a machine and the
# isolation that flag buys is preserved exactly.
test_server:
name: Test Server ${{ matrix.shard }}
runs-on: blacksmith-8vcpu-ubuntu-2404
runs-on: ubuntu-24.04
timeout-minutes: 10
strategy:
fail-fast: false
Expand Down Expand Up @@ -185,7 +187,7 @@ jobs:
# for checks that take under 3s, on the critical path of every PR.
rust:
name: Rust
runs-on: blacksmith-4vcpu-ubuntu-2404
runs-on: ubuntu-24.04
timeout-minutes: 10
steps:
- name: Checkout
Expand Down Expand Up @@ -219,7 +221,7 @@ jobs:
# the diff cannot be resolved, the lint runs.
mobile_native_changes:
name: Mobile Native Changes
runs-on: blacksmith-2vcpu-ubuntu-2404
runs-on: ubuntu-24.04
timeout-minutes: 5
permissions:
contents: read
Expand Down Expand Up @@ -297,7 +299,7 @@ jobs:
# Skip only on an explicit "no": a gate job that failed or errored leaves the
# output empty, and that must run the lint rather than silently skip it.
if: ${{ !cancelled() && needs.mobile_native_changes.outputs.changed != 'false' }}
runs-on: blacksmith-6vcpu-macos-26
runs-on: macos-15
timeout-minutes: 10
steps:
- name: Checkout
Expand Down Expand Up @@ -325,7 +327,7 @@ jobs:

release_smoke:
name: Release Smoke
runs-on: blacksmith-8vcpu-ubuntu-2404
runs-on: ubuntu-24.04
timeout-minutes: 10
steps:
- name: Checkout
Expand Down
33 changes: 33 additions & 0 deletions .github/workflows/fork.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
name: Fork

on:
pull_request:
push:
branches:
- main

permissions:
contents: read

# Runs alongside upstream's own CI: ci.yml covers the project's checks and
# tests, this workflow covers the fork-stack model. Both must be green.
jobs:
fork-model:
name: Fork Stack Model
runs-on: ubuntu-24.04
timeout-minutes: 5
steps:
- name: Checkout
uses: actions/checkout@v6
with:
fetch-depth: 0
# Check the PR head itself; the default PR merge ref is a merge commit.
ref: ${{ github.event.pull_request.head.sha || github.sha }}

- name: Fetch upstream base
run: |
git remote add upstream https://github.com/pingdotgg/t3code.git 2>/dev/null || true
git fetch --filter=blob:none upstream main

- name: Check fork stack
run: bash scripts/fork-check.sh --upstream upstream
2 changes: 1 addition & 1 deletion .github/workflows/mobile-fingerprint-check.yml
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ concurrency:
jobs:
fingerprint:
name: Native fingerprint diff
runs-on: blacksmith-8vcpu-ubuntu-2404
runs-on: ubuntu-24.04
permissions:
contents: read
issues: write
Expand Down
5 changes: 5 additions & 0 deletions AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -76,6 +76,7 @@ The most common defect in this repo is a change that works on the path you teste

## Dev servers

- In a worktree or agent shell where `vp` is not on PATH, run it as `pnpm exec vp`.
- `vp i` installs. Worktrees get this from the t3.json setup script; if module resolution looks broken, it probably did not run.
- `vp run dev` starts server and web. In a worktree, state defaults to that worktree's gitignored `.t3`, which deliberately outranks an ambient `T3CODE_HOME` so you cannot land on shared state by accident. An explicit `--home-dir` still wins.
- Ports derive from the worktree path and are stable across restarts, but read the real ones from the `[dev-runner]` line since occupied ports shift.
Expand Down Expand Up @@ -140,6 +141,10 @@ Most code changes do not need an internal documentation change. Agents can read
- Track active maintainer work in the GitHub issue or project item that owns it. External proposals follow `CONTRIBUTING.md` and belong in Ideas discussions.
- A merged PR is the implementation record. Close or update its tracking item when the work lands; do not preserve a second checklist in the repository.

## Installing on the maintainer's Mac

This fork (Chromeria) runs as the maintainer's daily app. After a PR merges to `main`, Delivery Authority includes installing it without another prompt: build `main` and stage it at `/Applications/Chromeria.app.new` with the one-shot swap-on-quit job, following `~/dev/runbook/cavallo/CHROMERIA.md`, then record it in that runbook. Never quit, restart or replace the running app; the staged build swaps in when the user quits Chromeria.

## How it works

Clients send typed WebSocket requests. The server turns them into _commands_, a pure _decider_ turns commands into persisted _events_, and a _projector_ derives the read model the UI renders. Provider CLIs run as subprocesses; per-provider _adapters_ translate their native protocols into orchestration events. Side effects run in queue-backed _reactors_ that emit _receipts_ when milestones land. Each turn ends with a _checkpoint_, a hidden git ref, so the app can diff and restore.
Expand Down
21 changes: 21 additions & 0 deletions GLOSSARY.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
# Glossary

Canonical terms for the toolboxmd fork. Names follow the Lightbringer series
by Brent Weeks, the source of the company name.

| Term | Meaning | Avoid |
| -------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------ |
| Luxin | The company; also the work agents produce (code, PRs). | |
| Chromeria | This app: the gateway where the user directs every agent across harnesses, with more interfaces (such as the OpenBot mode) over time. Built from the T3 Code fork. | T3 Code Fork, Bridge |
| Promachos | The one bot the user talks to: a colleague with its own personality who works across every Satrapy, does work itself and hands larger chunks to Drafters through Prism. | bot, assistant, Blackguard |
| Promachos home | The Promachos's own repo and T3 project. It holds the persona the Promachos edits as it learns, and its conversations run there. | bot home |
| Satrapy | One area of the user's work, such as a business or a product line, kept in its own repo with its direction, its Library and its tasks. Shown as Area in the UI. | business, space, workspace, domain |
| Library | A Satrapy's own skills, playbooks and tools, kept in that Satrapy's repo. | shared folder |
| Great Library | Skills, playbooks and tools used by two or more Satrapies, kept once and available to every Satrapy. | shared layer, global skills |
| Wight mode | The continuous mode in which the Promachos keeps working one Satrapy on its own, nudged by continue until its time box or quota line runs out. | Deep Work, autopilot, always-on loop |
| Spectrum | A disposable thread where Drafters of several Colors talk with each other, either as a moderated council or freely. | room, channel, group chat |
| Color | One harness, model and effort used together, such as Claude Opus 5.5 at high effort. A Drafter runs on one Color. | model config, route |
| Drafter | An agent working for the user on one harness and model, such as one the Promachos hands work to. | worker, subagent, helper, bot |
| Prism | The router: picks the model, harness and effort for each delegated role and falls back when capacity runs out. | Model Router |
| Toolbox | Planned name for the user's own future harness. | |
| T3 Code | The upstream project this fork tracks (`pingdotgg/t3code`). | |
14 changes: 14 additions & 0 deletions MISSION.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
# Mission

The toolboxmd fork of T3 Code is the user's working surface. It stays a thin,
rebasable layer on upstream `pingdotgg/t3code`: features live in new files and
packages, upstream files carry the smallest possible edits, and generic
extension points are offered upstream so the patch set shrinks over time.

On T3's core the fork adds what the user's tools need instead of rebuilding
harness plumbing: Prism, the fork's router, chooses the model, harness and
effort for every delegated role from measured evidence, falls back when
capacity fails, and runs every agent as a visible T3 thread; OpenBot becomes
a mode switched in the UI, bringing Bots, Channels and the Computer; further
capabilities such as VMs follow. AgentsMD plugins extend the fork rather than
competing with it.
12 changes: 12 additions & 0 deletions OBJECTIVE.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
# Objective

The Promachos works in Chromeria.

The Objective is complete when:

- Promachos mode chats in bubbles, with his persona loaded from his home.
- Wight mode keeps a thread working until its timer or a subscription limit stops it.
- Drafters start in any project, as children or top-level threads.
- A Spectrum runs council and free modes, compared in judged tests.

VMs stay outside.
5 changes: 5 additions & 0 deletions VISION.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
# Vision

One workspace where a person does all their coding, project handling and work
with bots: every harness, every machine and every agent in one place, built on
the open T3 Code core.
2 changes: 1 addition & 1 deletion apps/desktop/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -40,5 +40,5 @@
"tailwindcss": "^4.0.0",
"vite-plus": "catalog:"
},
"productName": "T3 Code (Alpha)"
"productName": "Chromeria"
}
12 changes: 5 additions & 7 deletions apps/desktop/src/app/DesktopAppIdentity.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -129,9 +129,7 @@ const withIdentity = <A, E, R>(
exists: (path) =>
input.legacyPathProbeError
? Effect.fail(input.legacyPathProbeError)
: Effect.succeed(
input.legacyPathExists === true && path.includes("T3 Code (Alpha)"),
),
: Effect.succeed(input.legacyPathExists === true && path.includes("Chromeria")),
readFileString: () =>
Effect.succeed(input.packageJson ?? '{"t3codeCommitHash":"abcdef1234567890"}'),
}),
Expand All @@ -151,14 +149,14 @@ describe("DesktopAppIdentity", () => {
const identity = yield* DesktopAppIdentity.DesktopAppIdentity;
const userDataPath = yield* identity.resolveUserDataPath;

assert.equal(userDataPath, "/Users/alice/Library/Application Support/T3 Code (Alpha)");
assert.equal(userDataPath, "/Users/alice/Library/Application Support/Chromeria");
}),
{ legacyPathExists: true },
),
);

it.effect("preserves failures while inspecting the legacy userData path", () => {
const legacyPath = "/Users/alice/Library/Application Support/T3 Code (Alpha)";
const legacyPath = "/Users/alice/Library/Application Support/Chromeria";
const cause = PlatformError.systemError({
_tag: "PermissionDenied",
module: "FileSystem",
Expand Down Expand Up @@ -196,8 +194,8 @@ describe("DesktopAppIdentity", () => {
const identity = yield* DesktopAppIdentity.DesktopAppIdentity;
yield* identity.configure;

assert.deepEqual(calls.setName, ["T3 Code (Alpha)"]);
assert.equal(calls.setAboutPanelOptions[0]?.applicationName, "T3 Code (Alpha)");
assert.deepEqual(calls.setName, ["Chromeria"]);
assert.equal(calls.setAboutPanelOptions[0]?.applicationName, "Chromeria");
assert.equal(calls.setAboutPanelOptions[0]?.applicationVersion, "1.2.3");
assert.equal(calls.setAboutPanelOptions[0]?.version, "0123456789ab");
// Packaged: the bundle's own icon stands, so a custom one the user
Expand Down
13 changes: 9 additions & 4 deletions apps/desktop/src/app/DesktopEnvironment.ts
Original file line number Diff line number Diff line change
Expand Up @@ -95,7 +95,9 @@ export class DesktopEnvironment extends Context.Service<
}
>()("@t3tools/desktop/app/DesktopEnvironment") {}

const APP_BASE_NAME = "T3 Code";
// Chromeria (toolboxmd fork): product name shown in window titles, menus and
// the About panel. The stable build shows the bare name without "(Alpha)".
const APP_BASE_NAME = "Chromeria";

function resolveDesktopAppStageLabel(input: {
readonly isDevelopment: boolean;
Expand All @@ -116,7 +118,7 @@ export function resolveDesktopAppBranding(input: {
return {
baseName: APP_BASE_NAME,
stageLabel,
displayName: `${APP_BASE_NAME} (${stageLabel})`,
displayName: stageLabel === "Alpha" ? APP_BASE_NAME : `${APP_BASE_NAME} (${stageLabel})`,
};
}

Expand Down Expand Up @@ -188,8 +190,11 @@ const make = Effect.fn("desktop.environment.make")(function* (
joinPath: path.join,
t3Home: config.t3Home,
});
const userDataDirName = isDevelopment ? "t3code-dev" : "t3code";
const legacyUserDataDirName = isDevelopment ? "T3 Code (Dev)" : "T3 Code (Alpha)";
// Chromeria keeps its own Electron userData directory so it can run beside
// upstream T3 Code, which holds a single-instance lock on "t3code". Threads
// and settings live in the shared T3 home (stateDir), not here.
const userDataDirName = isDevelopment ? "t3code-dev" : "chromeria";
const legacyUserDataDirName = isDevelopment ? "T3 Code (Dev)" : "Chromeria";
const linuxApplicationsDir = path.join(
Option.getOrElse(config.xdgDataHome, () => path.join(homeDirectory, ".local", "share")),
"applications",
Expand Down
2 changes: 1 addition & 1 deletion apps/desktop/src/app/DesktopPreReadyPlatform.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -103,7 +103,7 @@ describe("DesktopPreReadyPlatform", () => {
const identity = yield* Effect.promise(() => portalIdentity);
assert.equal(identity.desktopName, "com.t3tools.T3Code.desktop");
assert.include(identity.desktopEntry ?? "", 'Exec="/Applications/current.AppImage" %U');
assert.include(identity.desktopEntry ?? "", "Name=T3 Code (Alpha)");
assert.include(identity.desktopEntry ?? "", "Name=Chromeria");
assert.include(identity.desktopEntry ?? "", "MimeType=x-scheme-handler/t3code;");
}),
).pipe(Effect.ensuring(Effect.sync(() => vi.unstubAllEnvs())));
Expand Down
1 change: 1 addition & 0 deletions apps/mobile/src/connection/environment-cache-store.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -87,6 +87,7 @@ describe("mobile SQLite environment cache store", () => {
const snapshot: OrchestrationThreadDetailSnapshot = {
snapshotSequence: 2,
thread: {
coOwners: [],
id: ThreadId.make("thread-1"),
projectId: ProjectId.make("project-1"),
title: "Thread",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@ function makeThread(
Pick<OrchestrationThreadShell, "id" | "projectId" | "title">,
): OrchestrationThreadShell {
return {
coOwners: [],
modelSelection: { instanceId: ProviderInstanceId.make("codex"), model: "gpt-5.4" },
runtimeMode: "full-access",
interactionMode: "default",
Expand Down
1 change: 1 addition & 0 deletions apps/mobile/src/features/home/homeThreadList.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@ function makeThread(
Pick<EnvironmentThreadShell, "environmentId" | "id" | "projectId" | "title">,
): EnvironmentThreadShell {
return {
coOwners: [],
modelSelection: { instanceId: ProviderInstanceId.make("codex"), model: "gpt-5.4" },
runtimeMode: "full-access",
interactionMode: "default",
Expand Down
1 change: 1 addition & 0 deletions apps/mobile/src/features/threads/threadListV2.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,7 @@ function makeThread(
input: Partial<EnvironmentThreadShell> & Pick<EnvironmentThreadShell, "id" | "title">,
): EnvironmentThreadShell {
return {
coOwners: [],
environmentId,
projectId: ProjectId.make("project-1"),
modelSelection: { instanceId: ProviderInstanceId.make("codex"), model: "gpt-5.4" },
Expand Down
1 change: 1 addition & 0 deletions apps/mobile/src/lib/threadActivity.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -268,6 +268,7 @@ function makeThread(
input: Partial<OrchestrationThread> & Pick<OrchestrationThread, "id" | "projectId" | "title">,
): OrchestrationThread {
return {
coOwners: [],
modelSelection: { instanceId: ProviderInstanceId.make("codex"), model: "gpt-5.4" },
runtimeMode: "full-access",
interactionMode: "default",
Expand Down
9 changes: 8 additions & 1 deletion apps/mobile/src/lib/threadActivity.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,11 @@ import {
requestKindFromRequestType,
type PendingApproval,
} from "@t3tools/client-runtime/pending-requests";
import { UserInputAttachmentAnswerPayload, isToolLifecycleItemType } from "@t3tools/contracts";
import {
PRISM_STREAM_STATS_ACTIVITY_KIND,
UserInputAttachmentAnswerPayload,
isToolLifecycleItemType,
} from "@t3tools/contracts";
import type {
OrchestrationLatestTurn,
OrchestrationThread,
Expand Down Expand Up @@ -441,6 +445,9 @@ function deriveWorkLogEntries(
if (activity.kind === "task.updated" && !isTerminalTaskUpdate(activity)) continue;
if (activity.kind === "tool.progress") continue;
if (activity.kind === "context-window.updated") continue;
if (activity.kind === PRISM_STREAM_STATS_ACTIVITY_KIND) continue;
// Spectrum scheduler bookkeeping; the transcript itself is the visible record.
if (activity.kind === "spectrum.state" || activity.kind === "spectrum.turn-bound") continue;
if (activity.summary === "Checkpoint captured") continue;
if (isNoContentRuntimeWarning(activity)) continue;
if (isPlanBoundaryToolActivity(activity)) continue;
Expand Down
1 change: 1 addition & 0 deletions apps/mobile/src/state/pending-thread-creation.ts
Original file line number Diff line number Diff line change
Expand Up @@ -137,6 +137,7 @@ export function pendingThreadCreationShell(
return null;
}
return {
coOwners: [],
environmentId: message.environmentId,
id: message.threadId,
projectId: creation.projectId,
Expand Down
1 change: 1 addition & 0 deletions apps/mobile/src/state/use-thread-selection.ts
Original file line number Diff line number Diff line change
Expand Up @@ -54,6 +54,7 @@ function threadDetailToShell(
thread: OrchestrationThread,
): EnvironmentThreadShell {
return {
coOwners: thread.coOwners,
environmentId,
id: thread.id,
projectId: thread.projectId,
Expand Down
Loading
Loading