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/server/src/bin.ts
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ const CliRuntimeLayer = Layer.mergeAll(NodeServices.layer, NetService.layer);

const makeCli = () =>
Command.make("mate", { ...sharedServerCommandFlags }).pipe(
Command.withDescription("Run the T3 Code server."),
Command.withDescription("Run the Zerops Mate server."),
Command.withHandler((flags) => runServerCommand(flags)),
Command.withSubcommands([
startCommand,
Expand Down
2 changes: 1 addition & 1 deletion apps/server/src/cli/config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@ export const hostFlag = Flag.String("host").pipe(
);
export const baseDirFlag = Flag.String("base-dir").pipe(
Flag.withDescription(
"Explicit T3 Code data directory; runtime state is stored under userdata (equivalent to T3CODE_HOME).",
"Explicit Zerops Mate data directory; runtime state is stored under userdata (equivalent to T3CODE_HOME).",
),
Flag.optional,
);
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 T3 Code server."),
Command.withDescription("Run the Zerops Mate server."),
Command.withHandler((flags) => runServerCommand(flags)),
);

export const serveCommand = Command.make("serve", { ...sharedServerCommandFlags }).pipe(
Command.withDescription(
"Run the T3 Code server without opening a browser and print headless pairing details.",
"Run the Zerops Mate 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/cli/triage.ts
Original file line number Diff line number Diff line change
Expand Up @@ -169,7 +169,7 @@ export const triageCommand = Command.make("triage", {
model: modelFlag,
}).pipe(
Command.withDescription(
"Investigate a T3 Code problem on this machine with claude or codex, and help file a good issue.",
"Investigate a Zerops Mate problem on this machine with claude or codex, and help file a good issue.",
),
Command.withHandler((flags) =>
Effect.gen(function* () {
Expand Down
6 changes: 3 additions & 3 deletions apps/server/src/cloud/cliAuthHtml.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,9 +7,9 @@ function resolveLoopbackAuthorizationStage(): LoopbackAuthorizationStage {
}

const stageBrands = {
dev: "T3 Code (Dev)",
nightly: "T3 Code (Nightly)",
latest: "T3 Code",
dev: "Zerops Mate (Dev)",
nightly: "Zerops Mate (Nightly)",
latest: "Zerops Mate",
} as const satisfies Record<LoopbackAuthorizationStage, string>;

export function renderLoopbackAuthorizationCompleteHtml(
Expand Down
4 changes: 2 additions & 2 deletions apps/server/src/provider/CodexDeveloperInstructions.ts
Original file line number Diff line number Diff line change
Expand Up @@ -159,7 +159,7 @@ export function buildCodexDeveloperInstructions(interactionMode: ProviderInterac
}

/**
* T3 Code context for `turn/start.additionalContext`. Codex renders each entry
* Mate's context for `turn/start.additionalContext`. Codex renders each entry
* as a `<key>value</key>` developer message and resends it only when the value
* changes.
*
Expand All @@ -171,7 +171,7 @@ export function buildCodexAdditionalContext(
runtime: CodexRuntimeInfo,
): Record<string, V2TurnStartParams__AdditionalContextEntry> {
return {
t3_code_runtime: {
mate_runtime: {
kind: "application",
value: buildRuntimeInstructions({ harness: "Codex", ...runtime }),
},
Expand Down
2 changes: 1 addition & 1 deletion apps/server/src/provider/Layers/AntigravityProvider.ts
Original file line number Diff line number Diff line change
Expand Up @@ -149,7 +149,7 @@ export const makeAntigravityProvider = Effect.fn("makeAntigravityProvider")(func
auth: { status: "unknown", ...(options.auth ? { type: options.auth.type } : {}) },
message: settings.enabled
? "Checking Antigravity availability."
: "Antigravity is disabled in T3 Code settings.",
: "Antigravity is disabled in settings.",
},
}),
setup: { canAuthenticate: true, canInstall: true },
Expand Down
2 changes: 1 addition & 1 deletion apps/server/src/provider/Layers/ClaudeAdapter.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -469,7 +469,7 @@ describe("ClaudeAdapterLive", () => {
type: "preset",
preset: "claude_code",
append:
"<runtime_info>In case you're asked: you are running in T3 Code through the Claude Code harness. No need to mention this otherwise. You can embed images and videos in your response using Markdown with absolute file paths.</runtime_info>",
"<runtime_info>In case you're asked: you are running in Zerops Mate through the Claude Code harness. No need to mention this otherwise. You can embed images and videos in your response using Markdown with absolute file paths.</runtime_info>",
});
assert.equal(createInput?.options.permissionMode, "bypassPermissions");
assert.equal(createInput?.options.allowDangerouslySkipPermissions, true);
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 @@ -453,7 +453,7 @@ export const checkClaudeProviderStatus = Effect.fn("checkClaudeProviderStatus")(
version: null,
status: "warning",
auth: { status: "unknown" },
message: "Claude is disabled in T3 Code settings.",
message: "Claude is disabled in settings.",
},
});
}
Expand Down Expand Up @@ -625,7 +625,7 @@ export const makePendingClaudeProvider = (
version: null,
status: "warning",
auth: { status: "unknown" },
message: "Claude is disabled in T3 Code settings.",
message: "Claude is disabled in settings.",
},
});
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -934,7 +934,7 @@ describe("CodexSessionRuntime compaction", () => {
assert.lengthOf(texts, 1);
assert.match(
texts[0] ?? "",
/^<t3_code_runtime><runtime_info>.*as GPT-5\.6 Sol \(model slug: gpt-5\.6-sol\).*<\/t3_code_runtime>$/s,
/^<mate_runtime><runtime_info>.*as GPT-5\.6 Sol \(model slug: gpt-5\.6-sol\).*<\/mate_runtime>$/s,
);

yield* runtime.close;
Expand Down
6 changes: 3 additions & 3 deletions apps/server/src/provider/Layers/CodexProvider.ts
Original file line number Diff line number Diff line change
Expand Up @@ -344,7 +344,7 @@ export function buildCodexInitializeParams(): CodexSchema.V1InitializeParams {
return {
clientInfo: {
name: "t3code_desktop",
title: "T3 Code Desktop",
title: "Zerops Mate",
version: packageJson.version,
},
capabilities: {
Expand Down Expand Up @@ -508,7 +508,7 @@ const makePendingCodexProvider = (
version: null,
status: "warning",
auth: { status: "unknown" },
message: "Codex is disabled in T3 Code settings.",
message: "Codex is disabled in settings.",
},
});
}
Expand Down Expand Up @@ -594,7 +594,7 @@ export const checkCodexProviderStatus = Effect.fn("checkCodexProviderStatus")(fu
version: null,
status: "warning",
auth: { status: "unknown" },
message: "Codex is disabled in T3 Code settings.",
message: "Codex is disabled in settings.",
},
});
}
Expand Down
10 changes: 5 additions & 5 deletions apps/server/src/provider/Layers/CodexSessionRuntime.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -308,7 +308,7 @@ describe("buildTurnStartParams", () => {
NodeAssert.equal(settings?.model, DEFAULT_MODEL);
NodeAssert.equal(settings?.reasoning_effort, "medium");
NodeAssert.ok(
params.additionalContext?.t3_code_runtime?.value.includes(`as ${DEFAULT_MODEL} with medium`),
params.additionalContext?.mate_runtime?.value.includes(`as ${DEFAULT_MODEL} with medium`),
);
});

Expand All @@ -324,7 +324,7 @@ describe("buildTurnStartParams", () => {
});

NodeAssert.match(
params.additionalContext?.t3_code_runtime?.value ?? "",
params.additionalContext?.mate_runtime?.value ?? "",
/as GPT-5\.3-Codex \(model slug: gpt-5\.3-codex\) with high reasoning effort/,
);
}),
Expand Down Expand Up @@ -596,12 +596,12 @@ describe("buildCodexDeveloperInstructions", () => {
describe("buildCodexAdditionalContext", () => {
const runtime = { model: "gpt-5.3-codex", reasoningEffort: "high" };
const runtimeValue = (context: ReturnType<typeof buildCodexAdditionalContext>) =>
context.t3_code_runtime?.value ?? "";
context.mate_runtime?.value ?? "";

it("describes the harness, model, effort, and Markdown media support", () => {
const context = buildCodexAdditionalContext(runtime);

NodeAssert.equal(context.t3_code_runtime?.kind, "application");
NodeAssert.equal(context.mate_runtime?.kind, "application");
NodeAssert.match(
runtimeValue(context),
/<runtime_info>.*Codex harness, as gpt-5\.3-codex with high reasoning effort.*embed images and videos.*Markdown.*<\/runtime_info>/,
Expand Down Expand Up @@ -639,7 +639,7 @@ describe("Codex developer instructions never mention preview tools", () => {
it("Codex developer instructions never mention preview tools", () => {
const runtime = { model: "gpt-5.3-codex", reasoningEffort: "medium" };
const context = buildCodexAdditionalContext(runtime);
NodeAssert.deepStrictEqual(Object.keys(context), ["t3_code_runtime"]);
NodeAssert.deepStrictEqual(Object.keys(context), ["mate_runtime"]);
for (const instructions of [
buildCodexDeveloperInstructions("default"),
buildCodexDeveloperInstructions("plan"),
Expand Down
4 changes: 2 additions & 2 deletions apps/server/src/provider/Layers/CursorProvider.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -309,14 +309,14 @@ const baseCursorSettings: CursorSettings = {
};
const cursorAcpDiscoveryFailedMessage = [
"Cursor ACP model discovery failed.",
"Cursor CLI setup may be incomplete; install or enable the Cursor CLI, restart T3 Code, and try again.",
"Cursor CLI setup may be incomplete; install or enable the Cursor CLI, restart Zerops Mate, and try again.",
"See https://cursor.com/docs/cli/installation.",
"Check server logs for ACP details.",
].join(" ");
const missingCursorBinaryPath = "/definitely/not/installed/t3-cursor-agent";
const cursorCliCommandMissingMessage = [
`Cursor CLI command \`${missingCursorBinaryPath}\` was not found.`,
`Install or enable the Cursor CLI, make sure \`${missingCursorBinaryPath}\` is on PATH, then restart T3 Code.`,
`Install or enable the Cursor CLI, make sure \`${missingCursorBinaryPath}\` is on PATH, then restart Zerops Mate.`,
"See https://cursor.com/docs/cli/installation.",
].join(" ");

Expand Down
8 changes: 4 additions & 4 deletions apps/server/src/provider/Layers/CursorProvider.ts
Original file line number Diff line number Diff line change
Expand Up @@ -158,7 +158,7 @@ const CURSOR_PARAMETERIZED_MODEL_PICKER_MIN_VERSION_DATE = 2026_04_08;
const CURSOR_CLI_INSTALLATION_DOCS_URL = "https://cursor.com/docs/cli/installation";
const CURSOR_ACP_MODEL_DISCOVERY_FAILED_MESSAGE = [
"Cursor ACP model discovery failed.",
"Cursor CLI setup may be incomplete; install or enable the Cursor CLI, restart T3 Code, and try again.",
"Cursor CLI setup may be incomplete; install or enable the Cursor CLI, restart Zerops Mate, and try again.",
`See ${CURSOR_CLI_INSTALLATION_DOCS_URL}.`,
"Check server logs for ACP details.",
].join(" ");
Expand Down Expand Up @@ -186,7 +186,7 @@ export function buildInitialCursorProviderSnapshot(
version: null,
status: "warning",
auth: { status: "unknown" },
message: "Cursor is disabled in T3 Code settings.",
message: "Cursor is disabled in settings.",
},
});
}
Expand Down Expand Up @@ -731,7 +731,7 @@ function joinProviderMessages(...messages: ReadonlyArray<string | undefined>): s
function buildCursorCliCommandMissingMessage(binaryPath: string): string {
return [
`Cursor CLI command \`${binaryPath}\` was not found.`,
`Install or enable the Cursor CLI, make sure \`${binaryPath}\` is on PATH, then restart T3 Code.`,
`Install or enable the Cursor CLI, make sure \`${binaryPath}\` is on PATH, then restart Zerops Mate.`,
`See ${CURSOR_CLI_INSTALLATION_DOCS_URL}.`,
].join(" ");
}
Expand Down Expand Up @@ -1122,7 +1122,7 @@ export const checkCursorProviderStatus = Effect.fn("checkCursorProviderStatus")(
version: null,
status: "warning",
auth: { status: "unknown" },
message: "Cursor is disabled in T3 Code settings.",
message: "Cursor is disabled in 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 @@ -86,7 +86,7 @@ export function buildInitialGrokProviderSnapshot(
version: null,
status: "warning",
auth: { status: "unknown" },
message: "Grok is disabled in T3 Code settings.",
message: "Grok is disabled in settings.",
},
});
}
Expand Down Expand Up @@ -386,7 +386,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 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 @@ -1207,7 +1207,7 @@ export function makeOpenCodeAdapter(
return;
}
const detail =
"OpenCode accepted the prompt, but T3 Code could not confirm its message or session status.";
"OpenCode accepted the prompt, but Zerops Mate could not confirm its message or session status.";
const abortExit = yield* Effect.exit(
runOpenCodeSdk("session.abort", (signal) =>
context.client.session.abort({ sessionID: context.openCodeSessionId }, { signal }),
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 @@ -360,8 +360,8 @@ export const makePendingOpenCodeProvider = (
auth: { status: "unknown" },
message:
openCodeSettings.serverUrl.trim().length > 0
? "OpenCode is disabled in T3 Code settings. A server URL is configured."
: "OpenCode is disabled in T3 Code settings.",
? "OpenCode is disabled in settings. A server URL is configured."
: "OpenCode is disabled in settings.",
},
});
}
Expand Down Expand Up @@ -435,8 +435,8 @@ export const checkOpenCodeProviderStatus = Effect.fn("checkOpenCodeProviderStatu
status: "warning",
auth: { status: "unknown" },
message: isExternalServer
? "OpenCode is disabled in T3 Code settings. A server URL is configured."
: "OpenCode is disabled in T3 Code settings.",
? "OpenCode is disabled in settings. A server URL is configured."
: "OpenCode is disabled in settings.",
},
});
}
Expand Down Expand Up @@ -473,7 +473,7 @@ export const checkOpenCodeProviderStatus = Effect.fn("checkOpenCodeProviderStatu
if (!version) {
return fallback(
new Error(
`Unable to determine OpenCode version from \`opencode --version\` output. T3 Code requires OpenCode v${MINIMUM_OPENCODE_VERSION} or newer.`,
`Unable to determine OpenCode version from \`opencode --version\` output. Zerops Mate requires OpenCode v${MINIMUM_OPENCODE_VERSION} or newer.`,
),
null,
);
Expand Down
2 changes: 1 addition & 1 deletion apps/server/src/provider/Layers/ProviderAuthService.ts
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ export const makeProviderAuthService = Effect.gen(function* () {
instanceId,
operation,
detail: instance
? "This provider does not support sign-in in T3 Code."
? "This provider does not support sign-in in Zerops Mate."
: "This provider instance is no longer available.",
});
}
Expand Down
7 changes: 2 additions & 5 deletions apps/server/src/provider/Layers/ProviderRegistry.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2649,10 +2649,7 @@ it.layer(Layer.mergeAll(NodeServices.layer, ServerSettingsModule.layerTest(), Te
]);
assert.strictEqual(cursorProvider?.enabled, false);
assert.strictEqual(cursorProvider?.status, "disabled");
assert.strictEqual(
cursorProvider?.message,
"Cursor is disabled in T3 Code settings.",
);
assert.strictEqual(cursorProvider?.message, "Cursor is disabled in settings.");
assert.strictEqual(cursorSpawned, false);
}).pipe(Effect.provide(runtimeServices));
}),
Expand All @@ -2666,7 +2663,7 @@ it.layer(Layer.mergeAll(NodeServices.layer, ServerSettingsModule.layerTest(), Te
assert.strictEqual(status.enabled, false);
assert.strictEqual(status.status, "disabled");
assert.strictEqual(status.installed, false);
assert.strictEqual(status.message, "Codex is disabled in T3 Code settings.");
assert.strictEqual(status.message, "Codex is disabled in 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 @@ -705,7 +705,7 @@ const makeProviderService = Effect.fn("makeProviderService")(function* (
if (!instanceInfo.enabled) {
return yield* toValidationError(
"ProviderService.startSession",
`Provider instance '${resolvedInstanceId}' is disabled in T3 Code settings.`,
`Provider instance '${resolvedInstanceId}' is disabled in settings.`,
);
}
const persistedBinding = Option.getOrUndefined(yield* directory.getBinding(threadId));
Expand Down
2 changes: 1 addition & 1 deletion apps/server/src/provider/RuntimeInstructions.ts
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ export function buildRuntimeInstructions(runtime: {
modelName && modelName !== model ? `${modelName} (model slug: ${model})` : model;
const modelInfo = model && model !== "auto" && model !== "default" ? `, as ${modelLabel}` : "";
const effortInfo = effort ? ` with ${effort} reasoning effort` : "";
return `<runtime_info>In case you're asked: you are running in T3 Code through the ${harness} harness${modelInfo}${effortInfo}. No need to mention this otherwise. You can embed images and videos in your response using Markdown with absolute file paths.</runtime_info>`;
return `<runtime_info>In case you're asked: you are running in Zerops Mate through the ${harness} harness${modelInfo}${effortInfo}. No need to mention this otherwise. You can embed images and videos in your response using Markdown with absolute file paths.</runtime_info>`;
}

function toSingleLine(value: string): string {
Expand Down
4 changes: 2 additions & 2 deletions apps/server/src/provider/opencodeRuntime.ts
Original file line number Diff line number Diff line change
Expand Up @@ -158,15 +158,15 @@ export const verifyOpenCodeServerVersion = Effect.fn("verifyOpenCodeServerVersio
(cause) =>
new OpenCodeRuntimeError({
operation: "global.health",
detail: `OpenCode server returned an invalid health response. T3 Code requires OpenCode v${MINIMUM_OPENCODE_VERSION} or newer.`,
detail: `OpenCode server returned an invalid health response. Zerops Mate requires OpenCode v${MINIMUM_OPENCODE_VERSION} or newer.`,
cause,
}),
),
);
if (parseSemver(health.version) === null) {
return yield* new OpenCodeRuntimeError({
operation: "global.health",
detail: `OpenCode server returned an invalid version. T3 Code requires OpenCode v${MINIMUM_OPENCODE_VERSION} or newer.`,
detail: `OpenCode server returned an invalid version. Zerops Mate requires OpenCode v${MINIMUM_OPENCODE_VERSION} or newer.`,
});
}
if (compareSemverVersions(health.version, MINIMUM_OPENCODE_VERSION) < 0) {
Expand Down
6 changes: 3 additions & 3 deletions apps/server/src/provider/providerCompatibility.ts
Original file line number Diff line number Diff line change
Expand Up @@ -82,11 +82,11 @@ export function resolveProviderCompatibility(
: "unknown";
const message =
status === "broken"
? "This provider version is known to be incompatible with this T3 Code release."
? "This provider version is known to be incompatible with this Zerops Mate release."
: status === "unsupported"
? "This provider version is outside the supported range for this T3 Code release."
? "This provider version is outside the supported range for this Zerops Mate release."
: status === "graceful"
? "This provider version has limited compatibility with this T3 Code release."
? "This provider version has limited compatibility with this Zerops Mate release."
: null;
const recommendedVersion = policy.recommendedVersion ?? null;
const recommendedRange = policy.recommendedRange ?? null;
Expand Down
2 changes: 1 addition & 1 deletion apps/server/src/provider/providerInstallation.ts
Original file line number Diff line number Diff line change
Expand Up @@ -79,7 +79,7 @@ export const makeProviderInstallation = Effect.fn("makeProviderInstallation")(fu
instanceId,
operation,
detail:
"This instance uses a custom executable. Clear its binary path to manage installation in T3 Code.",
"This instance uses a custom executable. Clear its binary path to manage installation in Zerops Mate.",
});
}
});
Expand Down
Loading
Loading