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 apps/desktop/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -32,5 +32,5 @@
"tailwindcss": "^4.0.0",
"vite-plus": "catalog:"
},
"productName": "TritonAI Code"
"productName": "TritonAI Harness"
}
4 changes: 2 additions & 2 deletions apps/desktop/scripts/electron-launcher.mjs
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
// This file mostly exists because we want dev mode to say "TritonAI Code (Dev)" instead of "electron"
// This file mostly exists because we want dev mode to say "TritonAI Harness (Dev)" instead of "electron"

import { spawnSync } from "node:child_process";
import {
Expand Down Expand Up @@ -26,7 +26,7 @@ const repoRoot = resolve(desktopDir, "..", "..");
const devBundleIdSuffix = basename(repoRoot)
.toLowerCase()
.replaceAll(/[^a-z0-9]+/g, "");
export const APP_DISPLAY_NAME = isDevelopment ? "TritonAI Code (Dev)" : "TritonAI Code";
export const APP_DISPLAY_NAME = isDevelopment ? "TritonAI Harness (Dev)" : "TritonAI Harness";
export const APP_BUNDLE_ID = isDevelopment
? `edu.ucsd.ai.tritonai-code.dev.${devBundleIdSuffix || "local"}`
: "edu.ucsd.ai.tritonai-code";
Expand Down
2 changes: 1 addition & 1 deletion apps/desktop/src/app/DesktopApp.ts
Original file line number Diff line number Diff line change
Expand Up @@ -120,7 +120,7 @@ const handleFatalStartupError = Effect.fn("desktop.startup.handleFatalStartupErr
const wasQuitting = yield* Ref.getAndSet(state.quitting, true);
if (!wasQuitting) {
yield* electronDialog.showErrorBox(
"TritonAI Code failed to start",
"TritonAI Harness failed to start",
`Stage: ${stage}\n${message}${detail}`,
);
}
Expand Down
4 changes: 2 additions & 2 deletions apps/desktop/src/app/DesktopAppIdentity.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -179,8 +179,8 @@ describe("DesktopAppIdentity", () => {
const identity = yield* DesktopAppIdentity.DesktopAppIdentity;
yield* identity.configure;

assert.deepEqual(calls.setName, ["TritonAI Code"]);
assert.equal(calls.setAboutPanelOptions[0]?.applicationName, "TritonAI Code");
assert.deepEqual(calls.setName, ["TritonAI Harness"]);
assert.equal(calls.setAboutPanelOptions[0]?.applicationName, "TritonAI Harness");
assert.equal(calls.setAboutPanelOptions[0]?.applicationVersion, "1.2.3");
assert.equal(calls.setAboutPanelOptions[0]?.version, "0123456789ab");
assert.deepEqual(calls.setDockIcon, ["/icon.png"]);
Expand Down
2 changes: 1 addition & 1 deletion apps/desktop/src/app/DesktopEnvironment.ts
Original file line number Diff line number Diff line change
Expand Up @@ -81,7 +81,7 @@ export class DesktopEnvironment extends Context.Service<
DesktopEnvironmentShape
>()("@t3tools/desktop/app/DesktopEnvironment") {}

const APP_BASE_NAME = "TritonAI Code";
const APP_BASE_NAME = "TritonAI Harness";

function resolveDesktopAppStageLabel(input: {
readonly isDevelopment: boolean;
Expand Down
3 changes: 2 additions & 1 deletion apps/desktop/src/ssh/DesktopSshPasswordPrompts.ts
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,8 @@ import * as IpcChannels from "../ipc/channels.ts";
import * as ElectronWindow from "../electron/ElectronWindow.ts";

const DEFAULT_SSH_PASSWORD_PROMPT_TIMEOUT_MS = 3 * 60 * 1000;
const WINDOW_UNAVAILABLE_MESSAGE = "TritonAI Code window is not available for SSH authentication.";
const WINDOW_UNAVAILABLE_MESSAGE =
"TritonAI Harness window is not available for SSH authentication.";

type DesktopSshPasswordPromptResolutionInput =
typeof DesktopSshPasswordPromptResolutionInputSchema.Type;
Expand Down
2 changes: 1 addition & 1 deletion apps/desktop/src/window/DesktopApplicationMenu.ts
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,7 @@ const checkForUpdatesFromMenu: Effect.Effect<
yield* electronDialog.showMessageBox({
type: "info",
title: "You're up to date!",
message: `TritonAI Code ${updateState.currentVersion} is currently the newest version available.`,
message: `TritonAI Harness ${updateState.currentVersion} is currently the newest version available.`,
buttons: ["OK"],
});
} else if (updateState.status === "error") {
Expand Down
2 changes: 1 addition & 1 deletion apps/server/src/bin.ts
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@ const connectUnavailableCommand = Command.make("connect").pipe(

export const makeCli = ({ cloudEnabled = hasCloudPublicConfig } = {}) =>
Command.make("t3", { ...sharedServerCommandFlags }).pipe(
Command.withDescription("Run the TritonAI Code server."),
Command.withDescription("Run the TritonAI Harness server."),
Command.withHandler((flags) => runServerCommand(flags)),
Command.withSubcommands([
startCommand,
Expand Down
4 changes: 2 additions & 2 deletions apps/server/src/cli/server.ts
Original file line number Diff line number Diff line change
Expand Up @@ -19,13 +19,13 @@ export const runServerCommand = (
});

export const startCommand = Command.make("start", { ...sharedServerCommandFlags }).pipe(
Command.withDescription("Run the TritonAI Code server."),
Command.withDescription("Run the TritonAI Harness server."),
Command.withHandler((flags) => runServerCommand(flags)),
);

export const serveCommand = Command.make("serve", { ...sharedServerCommandFlags }).pipe(
Command.withDescription(
"Run the TritonAI Code server without opening a browser and print headless pairing details.",
"Run the TritonAI Harness server without opening a browser and print headless pairing details.",
),
Command.withHandler((flags) =>
runServerCommand(flags, {
Expand Down
2 changes: 1 addition & 1 deletion apps/server/src/mcp/McpHttpServer.ts
Original file line number Diff line number Diff line change
Expand Up @@ -180,7 +180,7 @@ export const PreviewToolkitRegistrationLive = Layer.mergeAll(
);

const McpTransportLive = McpServer.layerHttp({
name: "T3 Code",
name: "TritonAI Harness",
version: packageJson.version,
path: "/mcp",
}).pipe(Layer.provide(McpAuthMiddlewareLive));
Expand Down
4 changes: 2 additions & 2 deletions apps/server/src/provider/CodexDeveloperInstructions.ts
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
const T3_CODE_BROWSER_TOOL_INSTRUCTIONS = `

## T3 Code collaborative browser
## TritonAI Harness collaborative browser

You are running inside T3 Code. The \`t3-code\` MCP server is the product-native collaborative browser shared with the user. When it exposes \`preview_*\` tools, prefer those tools for browser navigation, inspection, interaction, screenshots, and recordings.
You are running inside TritonAI Harness. The \`t3-code\` MCP server is the product-native collaborative browser shared with the user. When it exposes \`preview_*\` tools, prefer those tools for browser navigation, inspection, interaction, screenshots, and recordings.

For browser work, first call \`preview_status\`. If no automation-capable preview is attached, call \`preview_open\` before concluding that the browser is unavailable. Then use \`preview_navigate\`, \`preview_snapshot\`, and the focused interaction tools. Prefer snapshot-provided locators over coordinates.

Expand Down
4 changes: 2 additions & 2 deletions apps/server/src/provider/Layers/ClaudeProvider.ts
Original file line number Diff line number Diff line change
Expand Up @@ -648,7 +648,7 @@ export const checkClaudeProviderStatus = Effect.fn("checkClaudeProviderStatus")(
version: null,
status: "warning",
auth: { status: "unknown" },
message: "Claude is disabled in TritonAI Code settings.",
message: "Claude is disabled in TritonAI Harness settings.",
},
});
}
Expand Down Expand Up @@ -802,7 +802,7 @@ export const makePendingClaudeProvider = (
version: null,
status: "warning",
auth: { status: "unknown" },
message: "Claude is disabled in TritonAI Code settings.",
message: "Claude is disabled in TritonAI Harness settings.",
},
});
}
Expand Down
8 changes: 4 additions & 4 deletions apps/server/src/provider/Layers/CodexProvider.ts
Original file line number Diff line number Diff line change
Expand Up @@ -274,7 +274,7 @@ export function buildCodexInitializeParams(): CodexSchema.V1InitializeParams {
return {
clientInfo: {
name: "t3code_desktop",
title: "TritonAI Code Desktop",
title: "TritonAI Harness Desktop",
version: packageJson.version,
},
capabilities: {
Expand Down Expand Up @@ -331,7 +331,7 @@ const probeCodexAppServerProvider = Effect.fn("probeCodexAppServerProvider")(fun
const initialize = yield* client.request("initialize", {
clientInfo: {
name: "t3code_desktop",
title: "TritonAI Code Desktop",
title: "TritonAI Harness Desktop",
version: "0.1.0",
},
capabilities: {
Expand Down Expand Up @@ -407,7 +407,7 @@ const makePendingCodexProvider = (
version: null,
status: "warning",
auth: { status: "unknown" },
message: "Codex is disabled in TritonAI Code settings.",
message: "Codex is disabled in TritonAI Harness settings.",
},
});
}
Expand Down Expand Up @@ -492,7 +492,7 @@ export const checkCodexProviderStatus = Effect.fn("checkCodexProviderStatus")(fu
version: null,
status: "warning",
auth: { status: "unknown" },
message: "Codex is disabled in TritonAI Code settings.",
message: "Codex is disabled in TritonAI Harness settings.",
},
});
}
Expand Down
4 changes: 2 additions & 2 deletions apps/server/src/provider/Layers/CursorProvider.ts
Original file line number Diff line number Diff line change
Expand Up @@ -85,7 +85,7 @@ export function buildInitialCursorProviderSnapshot(
version: null,
status: "warning",
auth: { status: "unknown" },
message: "Cursor is disabled in TritonAI Code settings.",
message: "Cursor is disabled in TritonAI Harness settings.",
},
});
}
Expand Down Expand Up @@ -990,7 +990,7 @@ export const checkCursorProviderStatus = Effect.fn("checkCursorProviderStatus")(
version: null,
status: "warning",
auth: { status: "unknown" },
message: "Cursor is disabled in TritonAI Code settings.",
message: "Cursor is disabled in TritonAI Harness settings.",
},
});
}
Expand Down
4 changes: 2 additions & 2 deletions apps/server/src/provider/Layers/GrokProvider.ts
Original file line number Diff line number Diff line change
Expand Up @@ -73,7 +73,7 @@ export function buildInitialGrokProviderSnapshot(
version: null,
status: "warning",
auth: { status: "unknown" },
message: "Grok is disabled in T3 Code settings.",
message: "Grok is disabled in TritonAI Harness settings.",
},
});
}
Expand Down Expand Up @@ -183,7 +183,7 @@ export const checkGrokProviderStatus = Effect.fn("checkGrokProviderStatus")(func
version: null,
status: "warning",
auth: { status: "unknown" },
message: "Grok is disabled in T3 Code settings.",
message: "Grok is disabled in TritonAI Harness settings.",
},
});
}
Expand Down
2 changes: 1 addition & 1 deletion apps/server/src/provider/Layers/OpenCodeAdapter.ts
Original file line number Diff line number Diff line change
Expand Up @@ -1132,7 +1132,7 @@ export function makeOpenCodeAdapter(
)
: yield* runOpenCodeSdk("session.create", () =>
client.session.create({
title: `TritonAI Code ${input.threadId}`,
title: `TritonAI Harness ${input.threadId}`,
permission: buildOpenCodePermissionRules(input.runtimeMode),
}),
);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -222,7 +222,12 @@ describe("OpenCodeExternalSessionSync", () => {
makeSession({
sessionId: "session-t3-owned",
directory: KNOWN_PROJECT_ROOT,
title: `TritonAI Code ${ThreadId.make("existing-t3-thread")}`,
title: `TritonAI Harness ${ThreadId.make("existing-t3-thread")}`,
}),
makeSession({
sessionId: "session-t3-owned-legacy",
directory: KNOWN_PROJECT_ROOT,
title: `TritonAI Code ${ThreadId.make("existing-legacy-t3-thread")}`,
}),
];
const harness = makeHarnessLayer(sessions);
Expand All @@ -231,9 +236,9 @@ describe("OpenCodeExternalSessionSync", () => {
const sync = yield* OpenCodeExternalSessionSync;
const result = yield* sync.syncOnce;
expect(result).toMatchObject({
discoveredCount: 4,
discoveredCount: 5,
importedCount: 2,
skippedCount: 2,
skippedCount: 3,
failedInstanceCount: 0,
});

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@ import {
} from "../Services/OpenCodeExternalSessionSync.ts";

const OPENCODE_PROVIDER = ProviderDriverKind.make("opencode");
const T3_OWNED_SESSION_TITLE_PREFIX = "TritonAI Code ";
const T3_OWNED_SESSION_TITLE_PREFIXES = ["TritonAI Harness ", "TritonAI Code "] as const;
const DEFAULT_SYNC_INTERVAL_MS = 60_000;
const DEFAULT_SESSION_LIST_LIMIT = 200;

Expand Down Expand Up @@ -109,7 +109,7 @@ export function matchOpenCodeSessionToProject(
}

export function isT3OwnedOpenCodeSession(session: OpenCodeExternalSessionSummary): boolean {
return session.title.startsWith(T3_OWNED_SESSION_TITLE_PREFIX);
return T3_OWNED_SESSION_TITLE_PREFIXES.some((prefix) => session.title.startsWith(prefix));
}

export function externalThreadIdForOpenCodeSession(input: {
Expand Down
10 changes: 5 additions & 5 deletions apps/server/src/provider/Layers/OpenCodeProvider.ts
Original file line number Diff line number Diff line change
Expand Up @@ -418,8 +418,8 @@ export const makePendingOpenCodeProvider = (
auth: { status: "unknown" },
message:
openCodeSettings.serverUrl.trim().length > 0
? "OpenCode is disabled in TritonAI Code settings. A server URL is configured."
: "OpenCode is disabled in TritonAI Code settings.",
? "OpenCode is disabled in TritonAI Harness settings. A server URL is configured."
: "OpenCode is disabled in TritonAI Harness settings.",
},
}),
openCodeSettings,
Expand Down Expand Up @@ -495,8 +495,8 @@ export const checkOpenCodeProviderStatus = Effect.fn("checkOpenCodeProviderStatu
status: "warning",
auth: { status: "unknown" },
message: isExternalServer
? "OpenCode is disabled in TritonAI Code settings. A server URL is configured."
: "OpenCode is disabled in TritonAI Code settings.",
? "OpenCode is disabled in TritonAI Harness settings. A server URL is configured."
: "OpenCode is disabled in TritonAI Harness settings.",
},
}),
openCodeSettings,
Expand Down Expand Up @@ -532,7 +532,7 @@ export const checkOpenCodeProviderStatus = Effect.fn("checkOpenCodeProviderStatu
[
"Unable to determine OpenCode version from `opencode --version` output.",
commandDetail ? `Output: ${commandDetail}` : null,
`TritonAI Code requires OpenCode v${MINIMUM_OPENCODE_VERSION} or newer.`,
`TritonAI Harness requires OpenCode v${MINIMUM_OPENCODE_VERSION} or newer.`,
]
.filter(Boolean)
.join(" "),
Expand Down
4 changes: 2 additions & 2 deletions apps/server/src/provider/Layers/ProviderRegistry.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -1609,7 +1609,7 @@ it.layer(Layer.mergeAll(NodeServices.layer, ServerSettingsService.layerTest(), T
assert.strictEqual(cursorProvider?.status, "disabled");
assert.strictEqual(
cursorProvider?.message,
"Cursor is disabled in TritonAI Code settings.",
"Cursor is disabled in TritonAI Harness settings.",
);
assert.strictEqual(cursorSpawned, false);
}).pipe(Effect.provide(runtimeServices));
Expand All @@ -1624,7 +1624,7 @@ it.layer(Layer.mergeAll(NodeServices.layer, ServerSettingsService.layerTest(), T
assert.strictEqual(status.enabled, false);
assert.strictEqual(status.status, "disabled");
assert.strictEqual(status.installed, false);
assert.strictEqual(status.message, "Codex is disabled in TritonAI Code settings.");
assert.strictEqual(status.message, "Codex is disabled in TritonAI Harness settings.");
}),
);
});
Expand Down
2 changes: 1 addition & 1 deletion apps/server/src/provider/Layers/ProviderService.ts
Original file line number Diff line number Diff line change
Expand Up @@ -556,7 +556,7 @@ const makeProviderService = Effect.fn("makeProviderService")(function* (
if (!instanceInfo.enabled) {
return yield* toValidationError(
"ProviderService.startSession",
`Provider instance '${resolvedInstanceId}' is disabled in TritonAI Code settings.`,
`Provider instance '${resolvedInstanceId}' is disabled in TritonAI Harness settings.`,
);
}
const persistedBinding = Option.getOrUndefined(yield* directory.getBinding(threadId));
Expand Down
4 changes: 2 additions & 2 deletions apps/server/src/provider/providerMaintenanceRunner.ts
Original file line number Diff line number Diff line change
Expand Up @@ -361,9 +361,9 @@ export const make = Effect.fn("ProviderMaintenanceRunner.make")(function* () {
startedAt,
finishedAt,
message: couldNotVerify
? "Update command completed, but TritonAI Code could not verify the provider version."
? "Update command completed, but TritonAI Harness could not verify the provider version."
: stillOutdated
? "Update command completed, but TritonAI Code still detects an outdated provider version."
? "Update command completed, but TritonAI Harness still detects an outdated provider version."
: "Provider updated.",
output: commandOutput(result),
}),
Expand Down
2 changes: 1 addition & 1 deletion apps/server/src/provider/providerStatusCache.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -159,7 +159,7 @@ it.layer(NodeServices.layer)("providerStatusCache", (it) => {
version: null,
status: "disabled",
auth: { status: "unknown" },
message: "Codex is disabled in TritonAI Code settings.",
message: "Codex is disabled in TritonAI Harness settings.",
});

assert.deepStrictEqual(
Expand Down
2 changes: 1 addition & 1 deletion apps/server/src/serverRuntimeStartup.ts
Original file line number Diff line number Diff line change
Expand Up @@ -452,7 +452,7 @@ export const makeServerRuntimeStartup = Effect.gen(function* () {
const startupBrowserTarget = yield* resolveStartupBrowserTarget;
if (serverConfig.mode !== "desktop") {
yield* Effect.logInfo(
"Authentication required. Open TritonAI Code using the pairing URL.",
"Authentication required. Open TritonAI Harness using the pairing URL.",
).pipe(Effect.annotateLogs({ pairingUrl: startupBrowserTarget }));
}
yield* runStartupPhase("browser.open", maybeOpenBrowser(startupBrowserTarget));
Expand Down
2 changes: 1 addition & 1 deletion apps/server/src/startupAccess.ts
Original file line number Diff line number Diff line change
Expand Up @@ -121,7 +121,7 @@ export const renderTerminalQrCode = (value: string, margin = 2): string => {

export const formatHeadlessServeOutput = (accessInfo: HeadlessServeAccessInfo): string =>
[
"TritonAI Code server is ready.",
"TritonAI Harness server is ready.",
`Connection string: ${accessInfo.connectionString}`,
`Token: ${accessInfo.token}`,
`Pairing URL: ${accessInfo.pairingUrl}`,
Expand Down
2 changes: 1 addition & 1 deletion apps/server/src/textGeneration/OpenCodeTextGeneration.ts
Original file line number Diff line number Diff line change
Expand Up @@ -260,7 +260,7 @@ export const makeOpenCodeTextGeneration = Effect.fn("makeOpenCodeTextGeneration"
: {}),
});
const session = await client.session.create({
title: `TritonAI Code ${input.operation}`,
title: `TritonAI Harness ${input.operation}`,
permission: [{ permission: "*", pattern: "*", action: "deny" }],
});
if (!session.data) {
Expand Down
4 changes: 2 additions & 2 deletions apps/server/src/vcs/GitVcsDriver.ts
Original file line number Diff line number Diff line change
Expand Up @@ -627,9 +627,9 @@ export const makeVcsDriverShape = Effect.fn("makeGitVcsDriverShape")(function* (
const commitEnv: NodeJS.ProcessEnv = {
...process.env,
GIT_INDEX_FILE: tempIndexPath,
GIT_AUTHOR_NAME: "TritonAI Code",
GIT_AUTHOR_NAME: "TritonAI Harness",
GIT_AUTHOR_EMAIL: "t3code@users.noreply.github.com",
GIT_COMMITTER_NAME: "TritonAI Code",
GIT_COMMITTER_NAME: "TritonAI Harness",
GIT_COMMITTER_EMAIL: "t3code@users.noreply.github.com",
};

Expand Down
6 changes: 3 additions & 3 deletions apps/web/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -92,13 +92,13 @@
object-fit: contain;
}
</style>
<title>TritonAI Code</title>
<title>TritonAI Harness</title>
</head>
<body>
<div id="root">
<div id="boot-shell">
<div id="boot-shell-card" aria-label="TritonAI Code splash screen">
<img id="boot-shell-logo" src="/apple-touch-icon.png" alt="TritonAI Code" />
<div id="boot-shell-card" aria-label="TritonAI Harness splash screen">
<img id="boot-shell-logo" src="/apple-touch-icon.png" alt="TritonAI Harness" />
</div>
</div>
</div>
Expand Down
Loading
Loading