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
9 changes: 9 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,13 +4,22 @@ All notable changes to Wirebot are documented in this file.

## [Unreleased]

## [0.3.4] - 2026-09-23

### Added

- Slack: `@Wirebot new` inside a thread and plain `new` in the bot DM restart the conversation's
Codex task. The next message there carries the thread's messages from before the restart (the
recent messages, in a DM) as plain-text context, so the fresh task knows the discussion without
the previous task's memory. `/wirebot new` and `@Wirebot /new` gained the same carry-over.

### Changed

- Updated the bundled Codex CLI from 0.155.1 to 0.156.1 and regenerated the app-server
protocol bindings. Codex retired the Friendly and Pragmatic personality choices, so the
Model settings page no longer offers a style selector that Codex ignores. Existing Codex
configuration files are left intact.

## [0.3.3] - 2026-09-21

### Changed
Expand Down
2 changes: 1 addition & 1 deletion codex.version
Original file line number Diff line number Diff line change
@@ -1 +1 @@
0.155.1
0.156.1
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "wirebot",
"version": "0.3.3",
"version": "0.3.4",
"private": true,
"type": "module",
"packageManager": "bun@1.4.0",
Expand Down
3 changes: 0 additions & 3 deletions src/codex/config-service.ts
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,6 @@ const sandboxModeSchema = z.enum(["read-only", "workspace-write", "danger-full-a
const webSearchSchema = z.enum(["disabled", "cached", "indexed", "live"]);
const reasoningSummarySchema = z.enum(["auto", "concise", "detailed", "none"]);
const verbositySchema = z.enum(["low", "medium", "high"]);
const personalitySchema = z.enum(["none", "friendly", "pragmatic"]);
const windowsSandboxSchema = z.enum(["unelevated", "elevated"]);

const nullableIdentifierSchema = z
Expand Down Expand Up @@ -90,7 +89,6 @@ const editableCodexConfigSchema = z.strictObject({
model_reasoning_summary: reasoningSummarySchema.nullable(),
model_verbosity: verbositySchema.nullable(),
service_tier: nullableIdentifierSchema,
personality: personalitySchema.nullable(),
windows_sandbox: windowsSandboxSchema.nullable(),
shell_environment_include_only: environmentPatternsSchema,
features: featureValuesSchema,
Expand Down Expand Up @@ -209,7 +207,6 @@ const scalarConfigPaths = Object.freeze([
["model_reasoning_summary", "model_reasoning_summary"],
["model_verbosity", "model_verbosity"],
["service_tier", "service_tier"],
["personality", "personality"],
["windows_sandbox", "windows.sandbox"],
["shell_environment_include_only", "shell_environment_policy.include_only"],
] as const satisfies readonly (readonly [
Expand Down
8 changes: 0 additions & 8 deletions src/codex/runtime-service.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@
import type { Personality } from "../generated/codex/Personality.js";
import type { ServerNotification } from "../generated/codex/ServerNotification.js";
import type { Config } from "../generated/codex/v2/Config.js";
import type { ConfigBatchWriteParams } from "../generated/codex/v2/ConfigBatchWriteParams.js";
Expand Down Expand Up @@ -527,7 +526,6 @@ function bankedReset(credit: RateLimitResetCredit): CodexBankedReset {
}

function settingsFromConfig(config: Config): EffectiveCodexSettings {
const personality = isPersonality(config.personality) ? config.personality : null;
return {
thread: {
model: config.model,
Expand All @@ -538,7 +536,6 @@ function settingsFromConfig(config: Config): EffectiveCodexSettings {
sandbox: config.sandbox_mode,
baseInstructions: config.instructions,
developerInstructions: config.developer_instructions,
personality,
},
turn: {
model: config.model,
Expand All @@ -547,15 +544,10 @@ function settingsFromConfig(config: Config): EffectiveCodexSettings {
approvalsReviewer: config.approvals_reviewer,
effort: config.model_reasoning_effort,
summary: config.model_reasoning_summary,
personality,
},
};
}

function isPersonality(value: unknown): value is Personality {
return value === "none" || value === "friendly" || value === "pragmatic";
}

function escapeRegExp(value: string): string {
return value.replaceAll(/[.*+?^${}()|[\]\\]/g, "\\$&");
}
2 changes: 0 additions & 2 deletions src/codex/service.ts
Original file line number Diff line number Diff line change
Expand Up @@ -123,7 +123,6 @@ type CodexThreadSettings = Readonly<
| "sandbox"
| "baseInstructions"
| "developerInstructions"
| "personality"
>
>;

Expand All @@ -137,7 +136,6 @@ type CodexTurnSettings = Readonly<
| "serviceTier"
| "effort"
| "summary"
| "personality"
>
>;

Expand Down
3 changes: 1 addition & 2 deletions src/generated/codex/ClientRequest.ts

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion src/generated/codex/ContentItem.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,4 +3,4 @@
// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually.
import type { ImageDetail } from "./ImageDetail";

export type ContentItem = { "type": "input_text", text: string, } | { "type": "input_image", image_url: string, detail?: ImageDetail, } | { "type": "input_audio", audio_url: string, } | { "type": "output_text", text: string, };
export type ContentItem = { "type": "input_text", text: string, } | { "type": "input_image", detail?: ImageDetail, } & ({ image_url: string, } | { file_id: string, }) | { "type": "input_audio", audio_url: string, } | { "type": "output_text", text: string, };
2 changes: 1 addition & 1 deletion src/generated/codex/FunctionCallOutputContentItem.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,4 +7,4 @@ import type { ImageDetail } from "./ImageDetail";
* Responses API compatible content items that can be returned by a tool call.
* This is a subset of ContentItem with the types we support as function call outputs.
*/
export type FunctionCallOutputContentItem = { "type": "input_text", text: string, } | { "type": "input_image", image_url: string, detail?: ImageDetail, } | { "type": "input_audio", audio_url: string, } | { "type": "encrypted_content", encrypted_content: string, };
export type FunctionCallOutputContentItem = { "type": "input_text", text: string, } | { "type": "input_image", detail?: ImageDetail, } & ({ image_url: string, } | { file_id: string, }) | { "type": "input_audio", audio_url: string, } | { "type": "encrypted_content", encrypted_content: string, };
3 changes: 3 additions & 0 deletions src/generated/codex/Personality.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,4 +2,7 @@

// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually.

/**
* Deprecated: `friendly` and `pragmatic` no longer select a style.
*/
export type Personality = "none" | "friendly" | "pragmatic";
8 changes: 8 additions & 0 deletions src/generated/codex/ToolExposureSurface.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
// GENERATED CODE! DO NOT MODIFY BY HAND!

// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually.

/**
* A model-facing surface on which a tool can be exposed.
*/
export type ToolExposureSurface = "code_mode" | "deferred" | "direct";
1 change: 1 addition & 0 deletions src/generated/codex/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -85,6 +85,7 @@ export type { SubAgentSource } from "./SubAgentSource";
export type { ThreadId } from "./ThreadId";
export type { ThreadMemoryMode } from "./ThreadMemoryMode";
export type { Tool } from "./Tool";
export type { ToolExposureSurface } from "./ToolExposureSurface";
export type { Verbosity } from "./Verbosity";
export type { WebSearchAction } from "./WebSearchAction";
export type { WebSearchContextSize } from "./WebSearchContextSize";
Expand Down
3 changes: 1 addition & 2 deletions src/generated/codex/protocol-manifest.json
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
{
"codexVersion": "0.155.1",
"codexVersion": "0.156.1",
"methods": {
"clientRequests": [
"account/login/cancel",
Expand Down Expand Up @@ -91,7 +91,6 @@
"thread/read",
"thread/resume",
"thread/revert",
"thread/rollback",
"thread/section/move",
"thread/shellCommand",
"thread/start",
Expand Down
8 changes: 8 additions & 0 deletions src/generated/codex/v2/AccountRoutingOverride.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
// GENERATED CODE! DO NOT MODIFY BY HAND!

// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually.

/**
* Backend routing policy. Wire values match the accounts/check contract.
*/
export type AccountRoutingOverride = "NO_CONSTRAINT" | "us" | "us_cr";
7 changes: 6 additions & 1 deletion src/generated/codex/v2/AppsConfig.ts
Original file line number Diff line number Diff line change
@@ -1,13 +1,18 @@
// GENERATED CODE! DO NOT MODIFY BY HAND!

// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually.
import type { ToolExposureSurface } from "../ToolExposureSurface";
import type { AppLinksConfig } from "./AppLinksConfig";
import type { AppToolApproval } from "./AppToolApproval";
import type { AppToolsConfig } from "./AppToolsConfig";
import type { ApprovalsReviewer } from "./ApprovalsReviewer";
import type { AppsDefaultConfig } from "./AppsDefaultConfig";

export type AppsConfig = { _default: AppsDefaultConfig | null, } & ({ [key in string]?: { enabled: boolean, approvals_reviewer: ApprovalsReviewer | null, destructive_enabled: boolean | null, open_world_enabled: boolean | null, default_tools_approval_mode: AppToolApproval | null, default_tools_enabled: boolean | null, tools: AppToolsConfig | null,
export type AppsConfig = { _default: AppsDefaultConfig | null, } & ({ [key in string]?: { enabled: boolean,
/**
* Additional model-facing surfaces omitted for this connector's tools.
*/
omit_tools_from: Array<ToolExposureSurface> | null, approvals_reviewer: ApprovalsReviewer | null, destructive_enabled: boolean | null, open_world_enabled: boolean | null, default_tools_approval_mode: AppToolApproval | null, default_tools_enabled: boolean | null, tools: AppToolsConfig | null,
/**
* Per-account approval settings keyed by link ID.
*/
Expand Down
4 changes: 2 additions & 2 deletions src/generated/codex/v2/ConfigBatchWriteParams.ts
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ export type ConfigBatchWriteParams = { edits: Array<ConfigEdit>,
filePath?: string | null, expectedVersion?: string | null,
/**
* When true, hot-reload updated runtime settings into loaded threads after writing.
* Session-static model, reasoning-effort, Plan-mode reasoning-effort, service-tier, and
* personality defaults are not reloaded.
* Session-static model, reasoning-effort, Plan-mode reasoning-effort, and service-tier
* defaults are not reloaded. The deprecated personality setting is also not reloaded.
*/
reloadUserConfig?: boolean, };
16 changes: 14 additions & 2 deletions src/generated/codex/v2/ConfigRequirements.ts
Original file line number Diff line number Diff line change
@@ -1,8 +1,10 @@
// GENERATED CODE! DO NOT MODIFY BY HAND!

// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually.
import type { ForcedLoginMethod } from "../ForcedLoginMethod";
import type { PathUri } from "../PathUri";
import type { WebSearchMode } from "../WebSearchMode";
import type { JsonValue } from "../serde_json/JsonValue";
import type { AskForApproval } from "./AskForApproval";
import type { AutoReviewRequirements } from "./AutoReviewRequirements";
import type { BrowserUseRequirements } from "./BrowserUseRequirements";
Expand All @@ -13,6 +15,16 @@ import type { InAppBrowserRequirements } from "./InAppBrowserRequirements";
import type { ModelsRequirements } from "./ModelsRequirements";
import type { ResidencyRequirement } from "./ResidencyRequirement";
import type { SandboxMode } from "./SandboxMode";
import type { WindowsSandboxSetupMode } from "./WindowsSandboxSetupMode";
import type { WindowsSandboxImplementation } from "./WindowsSandboxImplementation";

export type ConfigRequirements = {cliAuthCredentialsStore: CliAuthCredentialsStoreMode | null, chatgptBaseUrl: string | null, additionalDeveloperInstructions: string | null, allowedApprovalPolicies: Array<AskForApproval> | null, allowedSandboxModes: Array<SandboxMode> | null, allowedWindowsSandboxImplementations: Array<WindowsSandboxSetupMode> | null, allowedPermissionProfiles: { [key in string]?: boolean } | null, defaultPermissions: string | null, allowedWebSearchModes: Array<WebSearchMode> | null, allowManagedHooksOnly: boolean | null, allowBrowserAndComputerUse: boolean | null, allowAppshots: boolean | null, allowRemoteControl: boolean | null, computerUse: ComputerUseRequirements | null, browserUse: BrowserUseRequirements | null, inAppBrowser: InAppBrowserRequirements | null, featureRequirements: { [key in string]?: boolean } | null, enforceResidency: ResidencyRequirement | null, autoReview: AutoReviewRequirements | null, models: ModelsRequirements | null, sqliteHome: PathUri | null, logDir: PathUri | null, modelCatalogJson: PathUri | null, checkForUpdateOnStartup: boolean | null, allowLoginShell: boolean | null, feedback: FeedbackRequirements | null, windowsSandboxPrivateDesktop: boolean | null};
export type ConfigRequirements = {/**
* Exact provider selection required by managed policy.
*/
modelProvider: string | null, /**
* Complete required provider definitions, using config.toml field names.
*/
modelProviders: { [key in string]?: JsonValue } | null, /**
* Effective login methods after managed, forced-login, and workspace restrictions.
* An empty list permits no login method. Older servers may omit this field.
*/
allowedLoginMethods: Array<ForcedLoginMethod> | null, cliAuthCredentialsStore: CliAuthCredentialsStoreMode | null, chatgptBaseUrl: string | null, additionalDeveloperInstructions: string | null, allowedApprovalPolicies: Array<AskForApproval> | null, allowedSandboxModes: Array<SandboxMode> | null, allowedWindowsSandboxImplementations: Array<WindowsSandboxImplementation> | null, allowedPermissionProfiles: { [key in string]?: boolean } | null, defaultPermissions: string | null, allowedWebSearchModes: Array<WebSearchMode> | null, allowManagedHooksOnly: boolean | null, allowBrowserAndComputerUse: boolean | null, allowAppshots: boolean | null, allowRemoteControl: boolean | null, computerUse: ComputerUseRequirements | null, browserUse: BrowserUseRequirements | null, inAppBrowser: InAppBrowserRequirements | null, featureRequirements: { [key in string]?: boolean } | null, enforceResidency: ResidencyRequirement | null, autoReview: AutoReviewRequirements | null, models: ModelsRequirements | null, sqliteHome: PathUri | null, logDir: PathUri | null, modelCatalogJson: PathUri | null, checkForUpdateOnStartup: boolean | null, allowLoginShell: boolean | null, feedback: FeedbackRequirements | null};
2 changes: 1 addition & 1 deletion src/generated/codex/v2/GetAccountResponse.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,4 +3,4 @@
// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually.
import type { Account } from "./Account";

export type GetAccountResponse = { account: Account | null, requiresOpenaiAuth: boolean, };
export type GetAccountResponse = {account: Account | null, requiresOpenaiAuth: boolean};
5 changes: 5 additions & 0 deletions src/generated/codex/v2/McpAppDisplayMode.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
// GENERATED CODE! DO NOT MODIFY BY HAND!

// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually.

export type McpAppDisplayMode = "inline" | "fullscreen";
9 changes: 9 additions & 0 deletions src/generated/codex/v2/McpAppUi.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
// GENERATED CODE! DO NOT MODIFY BY HAND!

// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually.
import type { McpAppDisplayMode } from "./McpAppDisplayMode";

/**
* UI resource and display preference for model invocations, captured from the tool descriptor.
*/
export type McpAppUi = { resourceUri: string, preferredModelDisplayMode: McpAppDisplayMode, };
7 changes: 6 additions & 1 deletion src/generated/codex/v2/McpServerStatus.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,14 +5,19 @@ import type { McpServerInfo } from "../McpServerInfo";
import type { Resource } from "../Resource";
import type { ResourceTemplate } from "../ResourceTemplate";
import type { Tool } from "../Tool";
import type { JsonValue } from "../serde_json/JsonValue";
import type { McpAuthStatus } from "./McpAuthStatus";
import type { McpServerConnectionStatus } from "./McpServerConnectionStatus";

export type McpServerStatus = { name: string,
/**
* Current thread-runtime connection state; null when unavailable or the configuration changed.
*/
runtimeStatus: McpServerConnectionStatus | null, pluginId: string | null, serverInfo: McpServerInfo | null, tools: { [key in string]?: Tool },
runtimeStatus: McpServerConnectionStatus | null, pluginId: string | null, serverInfo: McpServerInfo | null,
/**
* Capabilities advertised by the initialized MCP server; null when unavailable.
*/
serverCapabilities: JsonValue | null, tools: { [key in string]?: Tool },
/**
* Tool discovery failed and no catalog was returned.
* Null when a catalog is returned, including cached or empty catalogs.
Expand Down
13 changes: 11 additions & 2 deletions src/generated/codex/v2/Model.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,13 +3,18 @@
// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually.
import type { InputModality } from "../InputModality";
import type { ReasoningEffort } from "../ReasoningEffort";
import type { ModelAccessPrograms } from "./ModelAccessPrograms";
import type { ModelAvailabilityNux } from "./ModelAvailabilityNux";
import type { ModelServiceTier } from "./ModelServiceTier";
import type { ModelUpgradeInfo } from "./ModelUpgradeInfo";
import type { MultiAgentVersion } from "./MultiAgentVersion";
import type { ReasoningEffortOption } from "./ReasoningEffortOption";

export type Model = { id: string, model: string, upgrade: string | null, upgradeInfo: ModelUpgradeInfo | null, availabilityNux: ModelAvailabilityNux | null, displayName: string, description: string, modelSpecialty: string | null, hidden: boolean, supportedReasoningEfforts: Array<ReasoningEffortOption>, defaultReasoningEffort: ReasoningEffort, inputModalities: Array<InputModality>, supportsPersonality: boolean,
export type Model = { id: string, model: string, upgrade: string | null, upgradeInfo: ModelUpgradeInfo | null, availabilityNux: ModelAvailabilityNux | null, displayName: string, description: string, modelSpecialty: string | null, hidden: boolean, supportedReasoningEfforts: Array<ReasoningEffortOption>, defaultReasoningEffort: ReasoningEffort, inputModalities: Array<InputModality>,
/**
* @deprecated Always false; models no longer support personality selection.
*/
supportsPersonality: boolean,
/**
* Multi-agent runtime declared by this model, when available.
*/
Expand All @@ -21,4 +26,8 @@ additionalSpeedTiers: Array<string>, serviceTiers: Array<ModelServiceTier>,
/**
* Catalog default service tier id for this model, when one is configured.
*/
defaultServiceTier: string | null, isDefault: boolean, };
defaultServiceTier: string | null,
/**
* Null when the catalog does not provide access-program metadata.
*/
availableAccessPrograms: ModelAccessPrograms | null, isDefault: boolean, };
13 changes: 13 additions & 0 deletions src/generated/codex/v2/ModelAccessPrograms.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
// GENERATED CODE! DO NOT MODIFY BY HAND!

// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually.
import type { CyberAccessProgram } from "./CyberAccessProgram";

/**
* Caller-specific explicit access programs advertised by model discovery.
*/
export type ModelAccessPrograms = {
/**
* Accepted explicit selections.
*/
cyber: Array<CyberAccessProgram>, };
6 changes: 5 additions & 1 deletion src/generated/codex/v2/PluginDetail.ts
Original file line number Diff line number Diff line change
Expand Up @@ -9,4 +9,8 @@ import type { PluginSummary } from "./PluginSummary";
import type { ScheduledTaskSummary } from "./ScheduledTaskSummary";
import type { SkillSummary } from "./SkillSummary";

export type PluginDetail = { marketplaceName: string, marketplacePath: AbsolutePathBuf | null, summary: PluginSummary, shareUrl: string | null, description: string | null, skills: Array<SkillSummary>, hooks: Array<PluginHookSummary>, apps: Array<AppSummary>, appTemplates: Array<AppTemplateSummary>, mcpServers: Array<string>, scheduledTasks: Array<ScheduledTaskSummary> | null, };
export type PluginDetail = { marketplaceName: string, marketplacePath: AbsolutePathBuf | null, summary: PluginSummary, shareUrl: string | null, description: string | null, skills: Array<SkillSummary>,
/**
* The declared onboarding skill, when the plugin and visible skill are enabled.
*/
onboardingSkill: SkillSummary | null, hooks: Array<PluginHookSummary>, apps: Array<AppSummary>, appTemplates: Array<AppTemplateSummary>, mcpServers: Array<string>, scheduledTasks: Array<ScheduledTaskSummary> | null, };
2 changes: 1 addition & 1 deletion src/generated/codex/v2/Thread.ts
Original file line number Diff line number Diff line change
Expand Up @@ -96,7 +96,7 @@ gitInfo: GitInfo | null, /**
* Optional user-facing thread title.
*/
name: string | null, /**
* Only populated on `thread/resume`, `thread/rollback`, `thread/fork`, and `thread/read`
* Only populated on `thread/resume`, `thread/fork`, and `thread/read`
* (when `includeTurns` is true) responses.
* For all other responses and notifications returning a Thread,
* the turns field will be an empty list.
Expand Down
5 changes: 4 additions & 1 deletion src/generated/codex/v2/ThreadForkResponse.ts
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,10 @@ import type { AskForApproval } from "./AskForApproval";
import type { SandboxPolicy } from "./SandboxPolicy";
import type { Thread } from "./Thread";

export type ThreadForkResponse = {thread: Thread, model: string, modelProvider: string, serviceTier: string | null, cwd: AbsolutePathBuf, /**
export type ThreadForkResponse = {thread: Thread, model: string, modelProvider: string, serviceTier: string | null, /**
* Saved list of disabled plugin IDs. Does not yet filter plugin capabilities.
*/
disabledPluginIds: Array<string>, cwd: AbsolutePathBuf, /**
* Environment-native paths to instruction source files currently loaded for this thread.
*/
instructionSources: Array<LegacyAppPathString>, approvalPolicy: AskForApproval, /**
Expand Down
Loading
Loading