Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
94 commits
Select commit Hold shift + click to select a range
94d7d77
chore: delete dead weight — orphaned playwright-injected vendor tree,…
bradhallett Sep 16, 2026
6da4bb4
refactor: move the attachment wire protocol to shared/attachments.ts …
bradhallett Sep 16, 2026
8dfd1da
refactor(drivers): one shared session runtime and one ACP protocol mo…
bradhallett Sep 16, 2026
d4bf40c
refactor(drivers): claude and codex ride the shared session runtime —…
bradhallett Sep 16, 2026
913d69d
refactor(server): canonical http helpers and the first route extracti…
bradhallett Sep 16, 2026
00e4c60
refactor(server): one computer-backend module behind the three CUA ba…
bradhallett Sep 16, 2026
420ef35
refactor(server): split store.ts into server/store/ slices behind a 6…
bradhallett Sep 16, 2026
01e924b
refactor(state): collapse nine overlay toggles into one overlays slic…
bradhallett Sep 16, 2026
44f8f52
refactor(server): extract the whole /api/internal family from index.t…
bradhallett Sep 16, 2026
d749a3b
refactor(state): first modules out of store.tsx — the overlays slice …
bradhallett Sep 16, 2026
d7d62f1
refactor(scripts): one shared server-endpoint resolver — validateBase…
bradhallett Sep 16, 2026
45001b3
refactor(server): first turn-engine modules out of index.ts — interna…
bradhallett Sep 16, 2026
f36f1be
refactor(components): Sidebar under a thousand lines — ten sections m…
bradhallett Sep 16, 2026
6430137
refactor(drivers): agents-proxy callTool becomes a registry lookup — …
bradhallett Sep 16, 2026
d6ccfd8
refactor(server): a composition root for the index singletons — serve…
bradhallett Sep 16, 2026
88e3589
refactor(components): GroupView and PhoneSetupFlow decomposed — five …
bradhallett Sep 16, 2026
6526157
refactor(scripts): the MCP server tool switch becomes a registry — tw…
bradhallett Sep 16, 2026
db378d7
refactor(components): ComputerPanel terminal phases become pure decid…
bradhallett Sep 16, 2026
31533cb
refactor(server): turn cleanup and the provider fleet leave index.ts …
bradhallett Sep 17, 2026
e8e884a
refactor(state): store.tsx decomposed into model and reducer modules …
bradhallett Sep 17, 2026
fba90ec
refactor(acp): the ACP wire is typed end to end — discriminated frame…
bradhallett Sep 17, 2026
fc4cf84
refactor(server): the startTurn engine leaves index.ts — the 986-line…
bradhallett Sep 17, 2026
bc183a3
refactor(components): ComputerPanel decomposed into thirteen hook and…
bradhallett Sep 17, 2026
a6a94eb
refactor(state): the async API client leaves the store provider — Api…
bradhallett Sep 17, 2026
13f21a0
refactor(server): the event fold and routine wiring leave index.ts — …
bradhallett Sep 17, 2026
70d56ad
refactor(drivers): agents-proxy back under the thousand-line bar — ro…
bradhallett Sep 17, 2026
b94bfb8
refactor(state): the reducer becomes a dispatcher over domain modules…
bradhallett Sep 17, 2026
79efe23
refactor(server): extract delegation-watch and screen-pollers from index
bradhallett Sep 17, 2026
f4fe03d
refactor(state): extract task-write queue from store provider
bradhallett Sep 17, 2026
16fcf91
refactor(server): decompose startTurn into named phase functions
bradhallett Sep 17, 2026
78e20c6
refactor(server): split start-turn phases into per-stage modules
bradhallett Sep 17, 2026
5fbd843
refactor(server): split event-fold into handler-family modules
bradhallett Sep 17, 2026
1cba188
refactor(server): extract group turn engine from index
bradhallett Sep 17, 2026
e2bae07
fix(server): fail loud on unreadable config and strict fleet-agent bo…
bradhallett Sep 17, 2026
00567ab
refactor(server): split group-turn into family modules
bradhallett Sep 17, 2026
9bb5c87
refactor(server): extract computer lifecycle from index
bradhallett Sep 17, 2026
f7b0826
refactor(server): split routines into schedule, persistence, prompt, …
bradhallett Sep 17, 2026
6bc01b2
refactor(server): split internal routes into family modules
bradhallett Sep 17, 2026
2f72f86
refactor(server): extract deferred-resume queues from index
bradhallett Sep 17, 2026
312004d
refactor(routines): split RoutineCalendarPage into routine-calendar m…
bradhallett Sep 17, 2026
6d92f89
refactor(server): extract checked-input validators and desktop approv…
bradhallett Sep 17, 2026
d27e4b7
refactor(drivers): split claude driver into focused modules behind ba…
bradhallett Sep 17, 2026
8455f5b
refactor(chat): split ChatView subcomponents into chat-view modules
bradhallett Sep 17, 2026
8a14628
refactor(mascot): split CursorAvatar into cursor-avatar modules
bradhallett Sep 17, 2026
21430bb
refactor(server): split box module into focused modules behind barrel
bradhallett Sep 17, 2026
d2e32e6
refactor(settings): split LocalComputerSection into local-computer mo…
bradhallett Sep 17, 2026
3fb20a7
refactor(server): split routine-requests into focused modules behind …
bradhallett Sep 17, 2026
9942a15
refactor(server): split skills module into focused modules behind barrel
bradhallett Sep 17, 2026
e1ea70c
refactor(drivers): split codex driver into focused modules behind barrel
bradhallett Sep 17, 2026
f036fed
refactor(server): split vps-computer into focused modules behind barrel
bradhallett Sep 17, 2026
76086fa
fix(drivers): mark codex config import type-only for node strip-types
bradhallett Sep 17, 2026
b3b50cc
refactor(server): extract turn integrations and direct-turn dispatch …
bradhallett Sep 17, 2026
65d737a
refactor(server): split container-computer into focused modules behin…
bradhallett Sep 17, 2026
ac34a6f
refactor(routines): extract receipt ledger and run helpers from manager
bradhallett Sep 17, 2026
45d2283
refactor(server): extract group coordination registry and policy from…
bradhallett Sep 17, 2026
a5cc080
refactor(state): extract peripheral sync and live hydration from stor…
bradhallett Sep 17, 2026
36017da
refactor(cli): split cli command families behind barrel
bradhallett Sep 17, 2026
dc5df59
refactor(server): extract bot wire views and approval policy from index
bradhallett Sep 17, 2026
0529f46
refactor(composio): split connector families behind barrel
bradhallett Sep 17, 2026
141440b
refactor(acp): extract wire and log-sanitize helpers from driver core
bradhallett Sep 17, 2026
15b62db
refactor(composer): extract picker, steer, and attachment hooks
bradhallett Sep 17, 2026
d7acceb
refactor(config): split config families behind barrel
bradhallett Sep 17, 2026
d0f9995
refactor(server): extract group turn operation machinery from index
bradhallett Sep 17, 2026
fb3e77d
refactor(electron): extract window, secure-config, and crash-log subs…
bradhallett Sep 17, 2026
9503b3d
refactor(codex): extract wire and snapshot helpers from driver
bradhallett Sep 17, 2026
e54b1f7
test(electron): point credential parity check at config family module
bradhallett Sep 17, 2026
92bd3a6
refactor(server): extract pre-router turn and config helpers from index
bradhallett Sep 17, 2026
92c202b
refactor(server): extract calendar, webhook, search, and team-library…
bradhallett Sep 17, 2026
399f3c1
refactor(electron): extract companion, server runtime, and viewer sub…
bradhallett Sep 17, 2026
a3809aa
refactor(server): extract instance, mcp, tts, and connector routes fr…
bradhallett Sep 17, 2026
e459f99
refactor(electron): extract environments, workspace, and diagnostics …
bradhallett Sep 17, 2026
f08f5c5
refactor(electron): extract company backup subsystem and repoint slic…
bradhallett Sep 17, 2026
8ac266c
refactor(server): extract usage reports and config routes from index
bradhallett Sep 17, 2026
850050f
refactor(electron): extract badge, server boot, and cua media subsyst…
bradhallett Sep 17, 2026
c4914a1
refactor(server): extract message feed and upload routes from index
bradhallett Sep 17, 2026
1f4fc6f
refactor(electron): extract desktop surface ipc handlers from main
bradhallett Sep 17, 2026
f2a36d9
refactor(server): extract team and bot action routes from index
bradhallett Sep 17, 2026
4a973c8
refactor(electron): extract createWindow from main.mjs
bradhallett Sep 17, 2026
2996f04
refactor(server): extract bot management routes from index.ts
bradhallett Sep 17, 2026
852308a
refactor(server): extract session, computer, and system routes from i…
bradhallett Sep 17, 2026
7ee6b24
test(verification): scan all server route modules for registered routes
bradhallett Sep 17, 2026
d3a4ad9
test(server): retry browser-runtime self-recovery inside a bounded wi…
bradhallett Sep 18, 2026
4773f65
test(server): poll the fake CLI dump until its JSON is whole
bradhallett Sep 18, 2026
dde68e7
refactor(server): inject the login stop grace and widen its test budgets
bradhallett Sep 19, 2026
0570f00
test(server): widen stubborn stop budgets against loaded runners
bradhallett Sep 19, 2026
e82c382
fix(ci): give the Electron relaunch test a session bus on headless Linux
bradhallett Sep 19, 2026
46db486
fix(ios): seed queued sends in the thread preview fixture
bradhallett Sep 19, 2026
2e10ee4
test(server): poll the routine delegation dump until its JSON is whole
bradhallett Sep 19, 2026
cba070b
test(e2e): keep renderer smoke resilient on loaded runners
bradhallett Sep 19, 2026
6b1c9f2
test(electron): normalise CRLF checkouts in the company backup guard
bradhallett Sep 19, 2026
45c26ba
test(verification): scan only the route modules this branch has
bradhallett Sep 19, 2026
49a6614
Merge remote-tracking branch 'origin/main' into HEAD
bradhallett Sep 19, 2026
968019f
Merge commit 'ee6a39ba' into HEAD
bradhallett Sep 19, 2026
d7dd318
Merge commit 'ec62fcf2' into HEAD
bradhallett Sep 19, 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
  •  
  •  
  •  
9 changes: 5 additions & 4 deletions electron/app-permissions.node-test.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -79,10 +79,11 @@ test("web links reject embedded credentials and non-web schemes", () => {
});

test("both external-link entry points use the policy and IPC retains the local-origin gate", () => {
const main = readFileSync(new URL("./main.mjs", import.meta.url), "utf8");
assert.match(main, /ipcMain\.handle\("desktop:open-external", localOnly\("desktop:open-external"/);
assert.match(main, /shell\.openExternal\(externalWebUrl\(rawUrl\)\)/);
assert.match(main, /shell\.openExternal\(externalWebUrl\(url\)\)/);
const createWindowModule = readFileSync(new URL("./main/create-window.mjs", import.meta.url), "utf8");
const desktopIpc = readFileSync(new URL("./main/desktop-ipc.mjs", import.meta.url), "utf8");
assert.match(desktopIpc, /ipcMain\.handle\("desktop:open-external", localOnly\("desktop:open-external"/);
assert.match(desktopIpc, /shell\.openExternal\(externalWebUrl\(rawUrl\)\)/);
assert.match(createWindowModule, /shell\.openExternal\(externalWebUrl\(url\)\)/);
});

test("fails closed on unparsable or opaque origins", () => {
Expand Down
14 changes: 8 additions & 6 deletions electron/company-backup-main.node-test.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -12,15 +12,17 @@ import { createCompanyBackupSchedule } from "./company-backup-schedule.mjs";
// importing Electron main (which would start the app). All IO, connection state,
// and transfer results are synthetic; these tests do not prove archive transport,
// OS keychain storage, or a renderer workflow.
const mainSource = readFileSync(new URL("./main.mjs", import.meta.url), "utf8");
function section(start, end) {
const from = mainSource.indexOf(start);
const to = mainSource.indexOf(end, from + start.length);
// A Windows checkout under core.autocrlf hands us CRLF, and the section anchors
// below slice on literal "\n" boundaries, so normalise the source first.
const moduleSource = readFileSync(new URL("./main/company-backup.mjs", import.meta.url), "utf8").replaceAll("\r\n", "\n");
function section(start, end, includeEnd = false) {
const from = moduleSource.indexOf(start);
const to = moduleSource.indexOf(end, from + start.length);
assert.ok(from >= 0 && to > from, `Main-process test section moved: ${start}`);
return mainSource.slice(from, to);
return moduleSource.slice(from, includeEnd ? to + end.length : to);
}
const functions = section("function ensureManagedDesktop()", "function syncDesktopMutationToken(");
const registrations = section("const workspaceOnly =", "const savedWorkspace =");
const registrations = section("const workspaceOnly =", " } finally { companyRestoreCommitting = false; }\n}));", true);
const ORIGIN = "http://127.0.0.1:48799";
const STAGE = "11111111-1111-4111-8111-111111111111";
const DEVICE = "22222222-2222-4222-8222-222222222222";
Expand Down
7 changes: 4 additions & 3 deletions electron/diagnostics.test.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -18,12 +18,13 @@ const {
} = require("./diagnostics.mjs");

// The desktop shell cannot import TypeScript, so its credential list is a
// hand copy of server/config.ts WORKSPACE_CREDENTIAL_ENV. This test is the
// hand copy of WORKSPACE_CREDENTIAL_ENV (server/config/credentials.ts).
// This test is the
// drift alarm: a name added server-side without updating the copy here would
// otherwise ship an unredacted export path.
describe("credential env parity with server/config.ts", () => {
describe("credential env parity with server/config/credentials.ts", () => {
it("matches WORKSPACE_CREDENTIAL_ENV exactly", () => {
const config = readFileSync(new URL("../server/config.ts", import.meta.url), "utf8");
const config = readFileSync(new URL("../server/config/credentials.ts", import.meta.url), "utf8");
const match = config.match(/WORKSPACE_CREDENTIAL_ENV = \[([\s\S]*?)\] as const/);
expect(match).not.toBeNull();
const names = [...match[1].matchAll(/"([A-Z0-9_]+)"/g)].map((m) => m[1]);
Expand Down
Loading
Loading