From 88a1f8b33416bb2ae8886228cb008c4e00711430 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=9B=B7=E7=94=B5=E8=8A=BD=E8=A1=A3?= Date: Sat, 18 Apr 2026 23:09:59 -0400 Subject: [PATCH] refactor(connectors): drop dead CLI command field after pi-mono migration MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The CLI-adapter era `connector.command` field became vestigial once every provider dispatch went through pi-ai. The schema still required a non-empty command, so onboarding saveConnector silently rejected every Pi Mono row (which carries an empty default). Remove the field from the payload chain (renderer → IPC schema → DB CRUD → run dispatch → worker job), narrow RunJob.taskId to match EnqueueRunPayload, and drop the dead helper plus its test. Schema column stays NOT NULL for DB compatibility; seedConnectors writes a literal empty string so no migration is needed. --- src/main/connector-helpers.ts | 9 ---- src/main/connector-matching.ts | 47 ------------------- src/main/connectors.ts | 8 ---- src/main/database-base.ts | 2 +- src/main/database/connectors-crud.ts | 25 +++++----- src/main/ipc-core-admin-handlers.ts | 7 +-- src/main/orchestration/turn-context.ts | 1 - src/main/orchestration/types.ts | 1 - src/main/worker/worker-helpers.ts | 4 +- .../useConnectorCallbacks.ts | 1 - .../views/sections/ExecutionSections.tsx | 2 +- src/shared/contracts/schemas-company.ts | 1 - src/shared/types/records-core.ts | 1 - tests/integration/cross-subsystem.spec.ts | 1 - tests/integration/database.spec.ts | 1 - tests/integration/process-recovery.spec.ts | 1 - tests/unit/atomic-checkout.test.ts | 1 - tests/unit/command-paths.test.ts | 19 -------- tests/unit/connector-matching.test.ts | 32 ------------- tests/unit/connectors.spec.ts | 4 +- tests/unit/contracts.test.ts | 1 - tests/unit/database.test.ts | 2 - tests/unit/edge-case-budget.test.ts | 1 - tests/unit/edge-case-concurrent.test.ts | 1 - tests/unit/edge-case-session.test.ts | 1 - tests/unit/ipc-core-admin-handlers.test.ts | 11 ----- tests/unit/model-dispatch.test.ts | 1 - tests/unit/resolve-workspace.test.ts | 1 - tests/unit/wakeup-lifecycle.test.ts | 1 - 29 files changed, 17 insertions(+), 171 deletions(-) delete mode 100644 src/main/connector-helpers.ts delete mode 100644 tests/unit/command-paths.test.ts diff --git a/src/main/connector-helpers.ts b/src/main/connector-helpers.ts deleted file mode 100644 index a74e502b..00000000 --- a/src/main/connector-helpers.ts +++ /dev/null @@ -1,9 +0,0 @@ -/** - * Normalise a CLI command value read from the connectors table or a user form. - * - * Collapses surrounding whitespace so CLI dispatch does not fork an empty - * argument or pass leading/trailing spaces to spawn(). - */ -export function normalizeCommandValue(value: string | null | undefined): string { - return (value ?? "").trim(); -} diff --git a/src/main/connector-matching.ts b/src/main/connector-matching.ts index 62e301d4..da0c278c 100644 --- a/src/main/connector-matching.ts +++ b/src/main/connector-matching.ts @@ -16,53 +16,6 @@ export const ROLE_DEPARTMENT_HINTS: Record = { legal: "management", }; -/** - * Preferred provider ordering per task type. Resolved against `CONNECTORS` at - * module load so `TASK_TYPE_PREFERENCE` stays in sync with the pi-mono catalog - * without hard-coded id lists. - */ -const PROVIDER_PREFERENCE: Record = { - code: ["anthropic", "openai", "xai", "groq", "google", "openrouter", "mistral", "cerebras"], - research: ["google", "anthropic", "openai", "openrouter", "xai", "mistral", "groq"], - content: ["anthropic", "openai", "google", "mistral", "openrouter", "groq", "xai"], - management: ["anthropic", "openai", "google", "mistral", "openrouter", "groq", "xai"], - general: ["anthropic", "openai", "google", "openrouter", "mistral", "xai", "groq"], -}; - -function connectorsByProvider(provider: string): ConnectorId[] { - return CONNECTORS.filter((c) => c.provider === provider).map((c) => c.id); -} - -function buildPreference(taskType: TaskType): ConnectorId[] { - const preferred: ConnectorId[] = []; - const seen = new Set(); - for (const provider of PROVIDER_PREFERENCE[taskType]) { - for (const id of connectorsByProvider(provider)) { - if (!seen.has(id)) { - preferred.push(id); - seen.add(id); - } - } - } - // Ensure every catalog entry appears in the preference list so callers can - // always resolve to *some* connector even when the provider is not ranked. - for (const connector of CONNECTORS) { - if (!seen.has(connector.id)) { - preferred.push(connector.id); - seen.add(connector.id); - } - } - return preferred; -} - -export const TASK_TYPE_PREFERENCE: Record = { - code: buildPreference("code"), - research: buildPreference("research"), - content: buildPreference("content"), - management: buildPreference("management"), - general: buildPreference("general"), -}; - export function inferTaskType(department: string | null | undefined): TaskType { if (!department) return "general"; const lower = department.toLowerCase(); diff --git a/src/main/connectors.ts b/src/main/connectors.ts index ae10b013..a65309e2 100644 --- a/src/main/connectors.ts +++ b/src/main/connectors.ts @@ -31,13 +31,6 @@ const PI_MONO_CAPABILITIES: CapabilityMatrix = { costAttribution: true, }; -/** - * Legacy `ConnectorRecord.command` column. Pi-mono has no CLI command — the - * worker calls pi-ai directly — so this is an empty string that the UI - * treats as "managed by pi-mono". - */ -const PI_MONO_DEFAULT_COMMAND = ""; - export function getConnectorDefinition(id: string) { const definition = CONNECTORS.find((entry) => entry.id === id); if (!definition) { @@ -105,7 +98,6 @@ export function buildDefaultConnectorRows(existing: Array( - "select id, label, description, status, command, version, auth_state, last_checked_at, last_error, model, env_binding_text, notes from connectors order by label asc", + "select id, label, description, status, version, auth_state, last_checked_at, last_error, model, env_binding_text, notes from connectors order by label asc", ); const result: ConnectorRecord[] = []; for (const row of rows) { @@ -40,7 +39,6 @@ export function buildConnectorMethods( label: row.label, description: row.description, status: row.status, - command: normalizeCommandValue(row.command), version: row.version, authState: row.auth_state, lastCheckedAt: row.last_checked_at, @@ -60,17 +58,15 @@ export function buildConnectorMethods( saveConnector(input: { id: ConnectorId; - command: string; model: string | null; envBindingText: string; notes: string; }) { - const normalizedCommand = normalizeCommandValue(input.command); getDb() .prepare( - "update connectors set command = ?, model = ?, env_binding_text = ?, notes = ?, updated_at = ? where id = ?", + "update connectors set model = ?, env_binding_text = ?, notes = ?, updated_at = ? where id = ?", ) - .run(normalizedCommand, input.model, input.envBindingText, input.notes, nowIso(), input.id); + .run(input.model, input.envBindingText, input.notes, nowIso(), input.id); }, updateConnectorHealth(input: { @@ -90,7 +86,7 @@ export function buildConnectorMethods( findConnector(id: ConnectorId): ConnectorRecord | null { const row = getDb() .prepare( - "select id, label, description, status, command, version, auth_state, last_checked_at, last_error, model, env_binding_text, notes from connectors where id = ?", + "select id, label, description, status, version, auth_state, last_checked_at, last_error, model, env_binding_text, notes from connectors where id = ?", ) .get(id) as | { @@ -98,7 +94,6 @@ export function buildConnectorMethods( label: string; description: string; status: ConnectorRecord["status"]; - command: string; version: string | null; auth_state: ConnectorRecord["authState"]; last_checked_at: string | null; @@ -121,7 +116,6 @@ export function buildConnectorMethods( label: row.label, description: row.description, status: row.status, - command: normalizeCommandValue(row.command), version: row.version, authState: row.auth_state, lastCheckedAt: row.last_checked_at, @@ -146,18 +140,21 @@ export function buildConnectorMethods( getDb().prepare(`delete from connectors where id not in (${validIds})`).run(); const currentRows = readAll>( - "select id, label, description, status, command, version, auth_state as authState, last_checked_at as lastCheckedAt, last_error as lastError, model, env_binding_text as envBindingText, notes from connectors", + "select id, label, description, status, version, auth_state as authState, last_checked_at as lastCheckedAt, last_error as lastError, model, env_binding_text as envBindingText, notes from connectors", ); const merged = buildDefaultConnectorRows(currentRows); + // `command` column stays in the schema as NOT NULL for legacy reasons; + // pi-mono has no CLI so we always write an empty string. Column is + // never read by runtime code. const statement = getDb().prepare( - "insert or replace into connectors (id, label, description, status, command, version, auth_state, last_checked_at, last_error, model, env_binding_text, notes, updated_at) values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)", + "insert or replace into connectors (id, label, description, status, command, version, auth_state, last_checked_at, last_error, model, env_binding_text, notes, updated_at) values (?, ?, ?, ?, '', ?, ?, ?, ?, ?, ?, ?, ?)", ); const updatedAt = nowIso(); for (const row of merged) { statement.run( row.id, row.label, row.description, row.status, - row.command, row.version, row.authState, row.lastCheckedAt, + row.version, row.authState, row.lastCheckedAt, row.lastError, row.model, row.envBindingText, row.notes, updatedAt, ); } diff --git a/src/main/ipc-core-admin-handlers.ts b/src/main/ipc-core-admin-handlers.ts index 2fd40ce3..0efec5ef 100644 --- a/src/main/ipc-core-admin-handlers.ts +++ b/src/main/ipc-core-admin-handlers.ts @@ -86,10 +86,6 @@ export function registerCoreAdminHandlers({ registerHandle(IPC_CHANNELS.saveConnector, async (_event, payload) => { const parsed = connectorInputSchema.parse(payload); - const existingConnector = db.getConnector(parsed.id); - if (parsed.command !== existingConnector.command) { - return fail("CONNECTOR_COMMAND_LOCKED", `Connector command is managed by AgentCompany and must remain "${existingConnector.command}".`); - } const connectorConfigValidation = validateConnectorConfigurationModel(parsed.id, parsed.model ?? null); if (!connectorConfigValidation.ok) { return fail("CONNECTOR_MODEL_NOT_ALLOWED", connectorConfigValidation.error); @@ -99,7 +95,6 @@ export function registerCoreAdminHandlers({ // happens at run dispatch time where the company is known. db.saveConnector({ ...parsed, - command: existingConnector.command, model: parsed.model ?? null, }); db.addActivity({ @@ -108,7 +103,7 @@ export function registerCoreAdminHandlers({ action: "connector.updated", entityType: "connector", entityId: parsed.id, - detail: existingConnector.command, + detail: parsed.id, }); publishDomainChanged(); return ok(true); diff --git a/src/main/orchestration/turn-context.ts b/src/main/orchestration/turn-context.ts index 6d015329..7eb210c7 100644 --- a/src/main/orchestration/turn-context.ts +++ b/src/main/orchestration/turn-context.ts @@ -360,7 +360,6 @@ export function buildRunPayload(params: RunDispatchParams, deps: TurnContextDeps workspaceId: workspaceMode === "exclusive" ? (workspace?.id ?? null) : null, workspacePath: workspace?.localPath ?? null, workspaceMode, - command: connector.command, model: modelSelection.effectiveModel, thinkingEffort, env, diff --git a/src/main/orchestration/types.ts b/src/main/orchestration/types.ts index dfa953c5..038be0ef 100644 --- a/src/main/orchestration/types.ts +++ b/src/main/orchestration/types.ts @@ -37,7 +37,6 @@ export interface EnqueueRunPayload { workspaceId: string | null; workspacePath: string | null; workspaceMode: WorkspaceLockMode; - command: string; model: string | null; thinkingEffort: string | null; env: Record; diff --git a/src/main/worker/worker-helpers.ts b/src/main/worker/worker-helpers.ts index 26ceb292..637e37a5 100644 --- a/src/main/worker/worker-helpers.ts +++ b/src/main/worker/worker-helpers.ts @@ -3,7 +3,8 @@ import type { RunStatus } from "@shared/types"; export interface RunJob { runId: string; companyId: string; - taskId: string; + /** Null for heartbeat runs with no assigned task. Must stay aligned with EnqueueRunPayload. */ + taskId: string | null; taskTitle: string; taskDescription: string; agentId: string; @@ -12,7 +13,6 @@ export interface RunJob { workspaceId: string | null; workspacePath: string | null; workspaceMode: "exclusive" | "shared" | "none"; - command: string; model: string | null; thinkingEffort: string | null; env: Record; diff --git a/src/renderer/components/company-onboarding/useConnectorCallbacks.ts b/src/renderer/components/company-onboarding/useConnectorCallbacks.ts index 16ce3a52..46a4c155 100644 --- a/src/renderer/components/company-onboarding/useConnectorCallbacks.ts +++ b/src/renderer/components/company-onboarding/useConnectorCallbacks.ts @@ -22,7 +22,6 @@ export function useConnectorCallbacks(connectors: ProfileSnapshot["connectors"]) try { unwrap(await window.agentCompany.saveConnector({ id: connectorId as ConnectorId, - command: connector.command, model, envBindingText, notes: notes ?? connector.notes, diff --git a/src/renderer/views/sections/ExecutionSections.tsx b/src/renderer/views/sections/ExecutionSections.tsx index 92b8ace8..2ab25dd4 100644 --- a/src/renderer/views/sections/ExecutionSections.tsx +++ b/src/renderer/views/sections/ExecutionSections.tsx @@ -132,7 +132,7 @@ export function ExecutionSections({ section }: ExecutionSectionsProps) {
{connector.label}
-
{connector.command}
+
{connector.id}
diff --git a/src/shared/contracts/schemas-company.ts b/src/shared/contracts/schemas-company.ts index 0e5a9a04..eedf89db 100644 --- a/src/shared/contracts/schemas-company.ts +++ b/src/shared/contracts/schemas-company.ts @@ -53,7 +53,6 @@ export type ConnectorId = z.infer; export const connectorInputSchema = z.object({ id: connectorIdEnum, - command: z.string().min(1), model: z.string().nullable().optional(), envBindingText: z.string().default(""), notes: z.string().default(""), diff --git a/src/shared/types/records-core.ts b/src/shared/types/records-core.ts index d4c197d6..a2fe799e 100644 --- a/src/shared/types/records-core.ts +++ b/src/shared/types/records-core.ts @@ -43,7 +43,6 @@ export interface ConnectorRecord { label: string; description: string; status: ConnectorStatus; - command: string; version: string | null; authState: "unknown" | "ok" | "required" | "error"; lastCheckedAt: string | null; diff --git a/tests/integration/cross-subsystem.spec.ts b/tests/integration/cross-subsystem.spec.ts index 86dcf047..b723a7fa 100644 --- a/tests/integration/cross-subsystem.spec.ts +++ b/tests/integration/cross-subsystem.spec.ts @@ -59,7 +59,6 @@ function scaffold(db: AppDatabase, budgetAmountCents = 500): ScaffoldResult { db.saveConnector({ id: connectorId, - command: "gemini", model: "gemini-2.5-pro", envBindingText: "", notes: "Non-exempt connector for session rotation tests", diff --git a/tests/integration/database.spec.ts b/tests/integration/database.spec.ts index 6dc81921..2a58750b 100644 --- a/tests/integration/database.spec.ts +++ b/tests/integration/database.spec.ts @@ -104,7 +104,6 @@ describe("AppDatabase", () => { db.saveConnector({ id: "openai-codex", - command: "codex", model: null, envBindingText: "OPENAI_API_KEY=vault-openai", notes: "Connector note", diff --git a/tests/integration/process-recovery.spec.ts b/tests/integration/process-recovery.spec.ts index efb1c6dc..84f70d6d 100644 --- a/tests/integration/process-recovery.spec.ts +++ b/tests/integration/process-recovery.spec.ts @@ -56,7 +56,6 @@ function scaffold(db: AppDatabase): ScaffoldResult { // Connector db.saveConnector({ id: connectorId, - command: "gemini", model: "gemini-2.5-pro", envBindingText: "", notes: "Non-exempt connector for session rotation tests", diff --git a/tests/unit/atomic-checkout.test.ts b/tests/unit/atomic-checkout.test.ts index d67dbf0b..84652dd2 100644 --- a/tests/unit/atomic-checkout.test.ts +++ b/tests/unit/atomic-checkout.test.ts @@ -38,7 +38,6 @@ function createTestCompany(db: AppDatabase): string { function createTestConnector(db: AppDatabase): void { db.saveConnector({ id: "openai-codex", - command: "codex", model: "gpt-5", envBindingText: "", notes: "Test connector", diff --git a/tests/unit/command-paths.test.ts b/tests/unit/command-paths.test.ts deleted file mode 100644 index 73a294bf..00000000 --- a/tests/unit/command-paths.test.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { describe, expect, it } from "vitest"; -import { normalizeCommandValue } from "@main/connector-helpers"; - -describe("command path normalization", () => { - it("trims surrounding whitespace from command values", () => { - expect(normalizeCommandValue(" claude ")).toBe("claude"); - expect(normalizeCommandValue("\tcodex\n")).toBe("codex"); - }); - - it("keeps bare commands unchanged", () => { - expect(normalizeCommandValue("claude")).toBe("claude"); - expect(normalizeCommandValue("codex")).toBe("codex"); - }); - - it("normalizes null and undefined to empty string", () => { - expect(normalizeCommandValue(null)).toBe(""); - expect(normalizeCommandValue(undefined)).toBe(""); - }); -}); diff --git a/tests/unit/connector-matching.test.ts b/tests/unit/connector-matching.test.ts index 6bed1932..229bea1f 100644 --- a/tests/unit/connector-matching.test.ts +++ b/tests/unit/connector-matching.test.ts @@ -2,42 +2,10 @@ import { describe, expect, it } from "vitest"; import { inferTaskType, getConnectorStrengths, - TASK_TYPE_PREFERENCE, ROLE_DEPARTMENT_HINTS as _ROLE_DEPARTMENT_HINTS, } from "../../src/main/connector-matching"; describe("connector-matching", () => { - describe("TASK_TYPE_PREFERENCE", () => { - it("maps code tasks to claude-pro first", () => { - expect(TASK_TYPE_PREFERENCE.code[0]).toBe("claude-pro"); - }); - - it("maps research tasks to google first", () => { - expect(TASK_TYPE_PREFERENCE.research[0]).toBe("google"); - }); - - it("maps content tasks to claude-pro first", () => { - expect(TASK_TYPE_PREFERENCE.content[0]).toBe("claude-pro"); - }); - - it("maps management tasks to claude-pro first", () => { - expect(TASK_TYPE_PREFERENCE.management[0]).toBe("claude-pro"); - }); - - it("maps general tasks to claude-pro first", () => { - expect(TASK_TYPE_PREFERENCE.general[0]).toBe("claude-pro"); - }); - - it("includes all three core connectors for every task type", () => { - for (const key of Object.keys(TASK_TYPE_PREFERENCE)) { - const prefs = TASK_TYPE_PREFERENCE[key as keyof typeof TASK_TYPE_PREFERENCE]; - expect(prefs).toContain("claude-pro"); - expect(prefs).toContain("openai-codex"); - expect(prefs).toContain("gemini-cli"); - } - }); - }); - describe("inferTaskType", () => { it("returns code for engineering department", () => { expect(inferTaskType("engineering")).toBe("code"); diff --git a/tests/unit/connectors.spec.ts b/tests/unit/connectors.spec.ts index 7e1a1847..e6e740ed 100644 --- a/tests/unit/connectors.spec.ts +++ b/tests/unit/connectors.spec.ts @@ -18,11 +18,10 @@ describe("parseEnvBindingText", () => { }); describe("buildDefaultConnectorRows", () => { - it("preserves previously saved connector commands", () => { + it("preserves previously saved connector overrides", () => { const rows = buildDefaultConnectorRows([ { id: "openai-codex", - command: "/usr/local/bin/codex", status: "ready", notes: "custom note", }, @@ -33,7 +32,6 @@ describe("buildDefaultConnectorRows", () => { } expect(codex.id).toBe("openai-codex"); - expect(codex.command).toBe("/usr/local/bin/codex"); expect(codex.status).toBe("ready"); expect(codex.notes).toBe("custom note"); expect(codex.capabilityMatrix.structuredTranscript).toBe(true); diff --git a/tests/unit/contracts.test.ts b/tests/unit/contracts.test.ts index faa24ea6..336d6417 100644 --- a/tests/unit/contracts.test.ts +++ b/tests/unit/contracts.test.ts @@ -11,7 +11,6 @@ describe("shared contracts", () => { it("fills connector defaults for optional fields", () => { const parsed = connectorInputSchema.parse({ id: "openai-codex", - command: "codex", }); expect(parsed.model).toBeUndefined(); diff --git a/tests/unit/database.test.ts b/tests/unit/database.test.ts index cdee6806..3979c10f 100644 --- a/tests/unit/database.test.ts +++ b/tests/unit/database.test.ts @@ -96,7 +96,6 @@ describe("AppDatabase", () => { }); db.saveConnector({ id: "openai-codex", - command: "codex", model: "gpt-5", envBindingText: "OPENAI_API_KEY=vault-openai", notes: "Primary coding connector", @@ -197,7 +196,6 @@ describe("AppDatabase", () => { }); db.saveConnector({ id: "openai-codex", - command: "codex", model: "gpt-5", envBindingText: "", notes: "Test connector", diff --git a/tests/unit/edge-case-budget.test.ts b/tests/unit/edge-case-budget.test.ts index fe2e3e4e..e1f6a2be 100644 --- a/tests/unit/edge-case-budget.test.ts +++ b/tests/unit/edge-case-budget.test.ts @@ -27,7 +27,6 @@ function scaffold(db: AppDatabase) { }); db.saveConnector({ id: "gemini-cli", - command: "gemini", model: "gemini-pro", envBindingText: "", notes: "Test connector", diff --git a/tests/unit/edge-case-concurrent.test.ts b/tests/unit/edge-case-concurrent.test.ts index c1f4c245..0b98e830 100644 --- a/tests/unit/edge-case-concurrent.test.ts +++ b/tests/unit/edge-case-concurrent.test.ts @@ -38,7 +38,6 @@ function createTestCompany(db: AppDatabase): string { function createTestConnector(db: AppDatabase): void { db.saveConnector({ id: "gemini-cli", - command: "gemini", model: "gemini-pro", envBindingText: "", notes: "Test connector for concurrent checkout", diff --git a/tests/unit/edge-case-session.test.ts b/tests/unit/edge-case-session.test.ts index 79d2829d..af750c7b 100644 --- a/tests/unit/edge-case-session.test.ts +++ b/tests/unit/edge-case-session.test.ts @@ -30,7 +30,6 @@ function scaffold(db: AppDatabase, connectorId: ConnectorId = "gemini-cli") { // Always save gemini-cli (needed for most tests) db.saveConnector({ id: "gemini-cli", - command: "gemini", model: "gemini-pro", envBindingText: "", notes: "Test connector - no native context management", diff --git a/tests/unit/ipc-core-admin-handlers.test.ts b/tests/unit/ipc-core-admin-handlers.test.ts index d4f1fca0..6a49dd8d 100644 --- a/tests/unit/ipc-core-admin-handlers.test.ts +++ b/tests/unit/ipc-core-admin-handlers.test.ts @@ -55,19 +55,8 @@ describe("ipc-core-admin-handlers connector saves", () => { throw new Error("saveConnector handler was not registered."); } - // Pi-mono connectors default to an empty command; the schema requires a - // non-empty one, so seed it before hitting the IPC handler. - db.saveConnector({ - id: "anthropic", - command: "pi-mono", - model: null, - envBindingText: "", - notes: "", - }); - const result = await saveConnector(null as unknown as IpcMainInvokeEvent, { id: "anthropic", - command: "pi-mono", model: anthropicModel, envBindingText: "ANTHROPIC_BASE_URL=https://example.com/anthropic", notes: "Pi-mono connector", diff --git a/tests/unit/model-dispatch.test.ts b/tests/unit/model-dispatch.test.ts index 5c96b1ab..0d2cf6b9 100644 --- a/tests/unit/model-dispatch.test.ts +++ b/tests/unit/model-dispatch.test.ts @@ -52,7 +52,6 @@ function makeConnector(id: string): ConnectorRecord { label: id, description: "", status: "ready", - command: "", version: null, authState: "ok", lastCheckedAt: null, diff --git a/tests/unit/resolve-workspace.test.ts b/tests/unit/resolve-workspace.test.ts index f2ec16dd..792222e9 100644 --- a/tests/unit/resolve-workspace.test.ts +++ b/tests/unit/resolve-workspace.test.ts @@ -32,7 +32,6 @@ function seedCompany(db: AppDatabase) { }); db.saveConnector({ id: "openai-codex", - command: "codex", model: "gpt-5", envBindingText: "", notes: "fixture", diff --git a/tests/unit/wakeup-lifecycle.test.ts b/tests/unit/wakeup-lifecycle.test.ts index cc39bd82..aaec8bf5 100644 --- a/tests/unit/wakeup-lifecycle.test.ts +++ b/tests/unit/wakeup-lifecycle.test.ts @@ -29,7 +29,6 @@ function createTestCompany(db: AppDatabase): string { function createTestConnector(db: AppDatabase): void { db.saveConnector({ id: "openai-codex", - command: "codex", model: "gpt-5", envBindingText: "", notes: "Test connector",