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 packages/agent/CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,15 @@

## [Unreleased]

### Added

- Added explicit runtime telemetry contexts and nested run, turn, request, and tool spans ([#95](https://github.com/diffexai/diffex/pull/95)).

### Changed

- Updated runtime dependencies, including file-ignore matching, schema handling, YAML parsing, and diff generation ([#272](https://github.com/diffexai/diffex/pull/272), [#274](https://github.com/diffexai/diffex/pull/274)).
- Changed package licensing to MIT ([#280](https://github.com/diffexai/diffex/pull/280)).

## [0.3.2] - 2026-09-29

### Added
Expand Down
18 changes: 18 additions & 0 deletions packages/ai/CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,24 @@

## [Unreleased]

### Added

- Added GPT-6 Astra, Luna, Sol, and GPT-6.1 Sol to the Codex catalog for ChatGPT authentication.
- Added `isRetryableProviderErrorMessage` for classifying transient provider and transport failures ([#161](https://github.com/diffexai/diffex/pull/161)).

### Changed

- Updated provider SDKs and runtime dependencies ([#272](https://github.com/diffexai/diffex/pull/272), [#273](https://github.com/diffexai/diffex/pull/273), [#274](https://github.com/diffexai/diffex/pull/274)).
- Anthropic requests now omit unsupported sampling parameters, including the unified `temperature` option. Google Gemini and Vertex AI disable automatic SDK continuations; Anthropic context-window limits and Google continuation limits map to `length`.
See [Provider SDK migration notes](README.md#provider-sdk-migration-notes) ([#273](https://github.com/diffexai/diffex/pull/273)).
- Changed package licensing to MIT ([#280](https://github.com/diffexai/diffex/pull/280)).

### Fixed

- Fixed cancelled authentication and lazy provider setup being reported as errors instead of `aborted` responses.
- Preserved Kimi Coding catalog generation after the upstream source key changed.
- Fixed Google model streaming through OpenCode Go by registering its Google API implementation ([#265](https://github.com/diffexai/diffex/pull/265)).

## [0.3.2] - 2026-09-29

## [0.3.1] - 2026-09-20
Expand Down
135 changes: 135 additions & 0 deletions packages/ai/src/image-models.generated.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,36 @@ import type { ImagesApi, ImagesModel } from "./types.ts";

export const IMAGE_MODELS = {
openrouter: {
"black-forest-labs/flux-3-image": {
id: "black-forest-labs/flux-3-image",
name: "Black Forest Labs: FLUX 3 Image",
api: "openrouter-images",
provider: "openrouter",
baseUrl: "https://openrouter.ai/api/v1",
input: ["text", "image"],
output: ["image"],
cost: {
input: 0,
output: 0,
cacheRead: 0,
cacheWrite: 0,
},
} satisfies ImagesModel<"openrouter-images">,
"black-forest-labs/flux-3-image-klein": {
id: "black-forest-labs/flux-3-image-klein",
name: "Black Forest Labs: FLUX 3 Image Klein",
api: "openrouter-images",
provider: "openrouter",
baseUrl: "https://openrouter.ai/api/v1",
input: ["text", "image"],
output: ["image"],
cost: {
input: 0,
output: 0,
cacheRead: 0,
cacheWrite: 0,
},
} satisfies ImagesModel<"openrouter-images">,
"black-forest-labs/flux.2-flex": {
id: "black-forest-labs/flux.2-flex",
name: "Black Forest Labs: FLUX.2 Flex",
Expand Down Expand Up @@ -80,6 +110,21 @@ export const IMAGE_MODELS = {
cacheWrite: 0,
},
} satisfies ImagesModel<"openrouter-images">,
"bytedance-seed/seedream-5-0-flash": {
id: "bytedance-seed/seedream-5-0-flash",
name: "ByteDance Seed: Seedream 5.0 Flash",
api: "openrouter-images",
provider: "openrouter",
baseUrl: "https://openrouter.ai/api/v1",
input: ["text", "image"],
output: ["image"],
cost: {
input: 0,
output: 0,
cacheRead: 0,
cacheWrite: 0,
},
} satisfies ImagesModel<"openrouter-images">,
"bytedance-seed/seedream-5-0-lite": {
id: "bytedance-seed/seedream-5-0-lite",
name: "ByteDance Seed: Seedream 5.0 Lite",
Expand Down Expand Up @@ -200,6 +245,36 @@ export const IMAGE_MODELS = {
cacheWrite: 0,
},
} satisfies ImagesModel<"openrouter-images">,
"google/gemini-nano-banana-2.1": {
id: "google/gemini-nano-banana-2.1",
name: "Google: Nano Banana 2.1",
api: "openrouter-images",
provider: "openrouter",
baseUrl: "https://openrouter.ai/api/v1",
input: ["image", "text"],
output: ["image", "text"],
cost: {
input: 1.5,
output: 7.5,
cacheRead: 0,
cacheWrite: 0,
},
} satisfies ImagesModel<"openrouter-images">,
"krea/k3-edit": {
id: "krea/k3-edit",
name: "Krea: K3 Edit",
api: "openrouter-images",
provider: "openrouter",
baseUrl: "https://openrouter.ai/api/v1",
input: ["text", "image"],
output: ["image"],
cost: {
input: 0,
output: 0,
cacheRead: 0,
cacheWrite: 0,
},
} satisfies ImagesModel<"openrouter-images">,
"krea/krea-2-large": {
id: "krea/krea-2-large",
name: "Krea: Krea 2 Large",
Expand Down Expand Up @@ -470,6 +545,36 @@ export const IMAGE_MODELS = {
cacheWrite: 0,
},
} satisfies ImagesModel<"openrouter-images">,
"qwen/qwen-image-2.1-pro": {
id: "qwen/qwen-image-2.1-pro",
name: "Qwen: Qwen Image 2.1 Pro",
api: "openrouter-images",
provider: "openrouter",
baseUrl: "https://openrouter.ai/api/v1",
input: ["text", "image"],
output: ["image"],
cost: {
input: 0,
output: 0,
cacheRead: 0,
cacheWrite: 0,
},
} satisfies ImagesModel<"openrouter-images">,
"qwen/qwen-image-2.1-turbo": {
id: "qwen/qwen-image-2.1-turbo",
name: "Qwen: Qwen Image 2.1 Turbo",
api: "openrouter-images",
provider: "openrouter",
baseUrl: "https://openrouter.ai/api/v1",
input: ["text", "image"],
output: ["image"],
cost: {
input: 0,
output: 0,
cacheRead: 0,
cacheWrite: 0,
},
} satisfies ImagesModel<"openrouter-images">,
"qwen/qwen-image-3": {
id: "qwen/qwen-image-3",
name: "Qwen: Qwen Image 3",
Expand Down Expand Up @@ -650,6 +755,21 @@ export const IMAGE_MODELS = {
cacheWrite: 0,
},
} satisfies ImagesModel<"openrouter-images">,
"recraft/recraft-v4.1-flash": {
id: "recraft/recraft-v4.1-flash",
name: "Recraft: Recraft V4.1 Flash",
api: "openrouter-images",
provider: "openrouter",
baseUrl: "https://openrouter.ai/api/v1",
input: ["text"],
output: ["image"],
cost: {
input: 0,
output: 0,
cacheRead: 0,
cacheWrite: 0,
},
} satisfies ImagesModel<"openrouter-images">,
"recraft/recraft-v4.1-pro": {
id: "recraft/recraft-v4.1-pro",
name: "Recraft: Recraft V4.1 Pro",
Expand Down Expand Up @@ -785,6 +905,21 @@ export const IMAGE_MODELS = {
cacheWrite: 0,
},
} satisfies ImagesModel<"openrouter-images">,
"tencent/hy-image-v3.5-preview": {
id: "tencent/hy-image-v3.5-preview",
name: "Tencent: Hy Image 3.5 Preview",
api: "openrouter-images",
provider: "openrouter",
baseUrl: "https://openrouter.ai/api/v1",
input: ["text", "image"],
output: ["image"],
cost: {
input: 0,
output: 0,
cacheRead: 0,
cacheWrite: 0,
},
} satisfies ImagesModel<"openrouter-images">,
"x-ai/grok-imagine-image-2.0": {
id: "x-ai/grok-imagine-image-2.0",
name: "xAI: Grok Imagine Image 2.0",
Expand Down
29 changes: 28 additions & 1 deletion packages/coding-agent/CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,36 @@

## [Unreleased]

### New Features

- Added GPT-6 Astra, Luna, Sol, and GPT-6.1 Sol to the model list for ChatGPT login.
See [Providers](docs/providers.md).
- Added cache-preserving harness updates: background memory and evolved-skill changes apply after successful compaction or in a new session, with pending-update notices in the TUI.
See [Request boundaries](docs/evolution.md#request-boundaries) ([#260](https://github.com/diffexai/diffex/pull/260) by [@Issacboy123](https://github.com/Issacboy123)).
- Retained lessons and evolved skills longer before score-based grooming removes them, while keeping existing capacity limits.
See [Lesson feedback and grooming](docs/evolution.md#lesson-feedback-and-grooming) and [Private skill feedback](docs/evolution.md#private-skill-feedback).

### Added

- Added GPT-6 Astra, Luna, Sol, and GPT-6.1 Sol to the Codex model list for ChatGPT login.

### Changed

- Regular root sessions now reconcile selected harness memory and evolved skills at construction, idle reload, and eligible manual compaction boundaries.
- Deferred background harness memory and evolved-skill updates until successful manual or automatic compaction or a new session, preserving the active conversation's input cache. The TUI announces pending updates; `/clear` starts with the latest revision and `/version` still switches immediately.
See [Request boundaries](docs/evolution.md#request-boundaries) ([#260](https://github.com/diffexai/diffex/pull/260) by [@Issacboy123](https://github.com/Issacboy123)).
- Retained lessons and evolved skills longer by lowering grooming removal thresholds from -5 to -7 for lessons and from -8 to -11 for skills, without changing capacity limits.
See [Lesson feedback and grooming](docs/evolution.md#lesson-feedback-and-grooming) and [Private skill feedback](docs/evolution.md#private-skill-feedback).
- Updated provider SDKs and runtime dependencies, including terminal rendering, syntax highlighting, credential storage, and HTTP libraries ([#272](https://github.com/diffexai/diffex/pull/272), [#273](https://github.com/diffexai/diffex/pull/273), [#274](https://github.com/diffexai/diffex/pull/274)).
- Anthropic requests now omit unsupported sampling parameters, including `temperature`. Google Gemini and Vertex AI requests no longer perform automatic SDK continuations; continuation and context-window limits are reported as `length`.
See [Provider SDK migration notes](../ai/README.md#provider-sdk-migration-notes) ([#273](https://github.com/diffexai/diffex/pull/273)).
- Changed project and package licensing to MIT ([#280](https://github.com/diffexai/diffex/pull/280)).

### Fixed

- Fixed Google model streaming through OpenCode Go by registering its Google API implementation ([#265](https://github.com/diffexai/diffex/pull/265)).
- Fixed failed evolution evidence scans being skipped permanently; bounded retries preserve the failed cursor and expose retry status in `/evolve` ([#258](https://github.com/diffexai/diffex/pull/258) by [@Issacboy123](https://github.com/Issacboy123)).
- Enabled short prompt-cache retention for background evolution model calls ([#259](https://github.com/diffexai/diffex/pull/259) by [@Issacboy123](https://github.com/Issacboy123)).
- Updated vulnerable CLI dependencies, including Undici and Zod, and patched shell-quote in the sandbox extension example ([#262](https://github.com/diffexai/diffex/pull/262), [#272](https://github.com/diffexai/diffex/pull/272), [#274](https://github.com/diffexai/diffex/pull/274), [#281](https://github.com/diffexai/diffex/pull/281)).

## [0.3.2] - 2026-09-29

Expand Down
10 changes: 10 additions & 0 deletions packages/tui/CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,16 @@

## [Unreleased]

### Added

- Added atomic editor tokens with compact display labels that expand on submission, including `EditorTextPart`, `EditorTextToken`, and optional `EditorComponent.setTextWithTokens` ([#132](https://github.com/diffexai/diffex/pull/132)).
- Added configurable placeholder-cursor styling and shared selected-list prefix exports ([#58](https://github.com/diffexai/diffex/pull/58)).

### Changed

- Updated Markdown parsing and character-width dependencies ([#272](https://github.com/diffexai/diffex/pull/272)).
- Changed package licensing to MIT ([#280](https://github.com/diffexai/diffex/pull/280)).

## [0.3.2] - 2026-09-29

## [0.3.1] - 2026-09-20
Expand Down
4 changes: 2 additions & 2 deletions scripts/artifact-acceptance.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -183,7 +183,7 @@ export function installConsumer(
manager === "npm"
? ["install", "--omit=dev", "--ignore-scripts", "--no-audit", "--no-fund"]
: ["install", "--production", "--ignore-scripts", "--network-concurrency=8"],
{ cwd: directory, env, stdio: "inherit", timeout: 180_000 },
{ cwd: directory, env, stdio: "inherit", timeout: 600_000 },
);
for (const pkg of selected) {
const installed = join(directory, "node_modules", pkg.name);
Expand Down Expand Up @@ -329,7 +329,7 @@ export function acceptArtifacts(artifactDirectory, outputDirectory, { managers =
outputDirectory,
...(managers.includes("bun") ? [] : ["--skip-bun"]),
],
{ cwd: root, stdio: "inherit", timeout: 600000 },
{ cwd: root, stdio: "inherit", timeout: 3_600_000 },
);
verifyTarballs(tarballDirectory, records, packages);
writeFileSync(
Expand Down
8 changes: 7 additions & 1 deletion scripts/npm-lifecycle.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -104,7 +104,13 @@ await new Promise((done) => server.listen(0, "127.0.0.1", done));
async function command(command, args, extra = {}) {
try {
console.log(`Lifecycle: ${command} ${args.join(" ")}`);
const result = await run(command, args, { ...options, ...extra });
const packageManagerOperation =
(["npm", "bun"].includes(command) && args.includes("install")) || args.includes("--self");
const result = await run(command, args, {
...options,
timeout: packageManagerOperation ? 600_000 : options.timeout,
...extra,
});
evidence.commands.push({ command, args, exitCode: 0 });
return result.stdout;
} catch (error) {
Expand Down
2 changes: 1 addition & 1 deletion scripts/release-source.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -102,7 +102,7 @@ export function pushPreparedRelease(tag) {
const commit = git("rev-parse", `refs/tags/${tag}^{commit}`);
if (
git("rev-parse", "HEAD^") !== commit ||
git("log", "-1", "--format=%s") !== "Add [Unreleased] section for next cycle"
git("log", "-1", "--format=%s") !== "docs(coding-agent): start next release cycle"
)
throw new Error("Prepared main must contain exactly the next-cycle commit after the release tag");
const changed = git("diff-tree", "--no-commit-id", "--name-only", "-r", "HEAD").split("\n");
Expand Down
2 changes: 1 addition & 1 deletion scripts/release-source.test.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -220,7 +220,7 @@ for (const failure of ["rejected transaction", "lost acknowledgement"])
"# Changelog\n\n## [Unreleased]\n\n## [0.0.3]\n\n- Fixture\n",
);
f.git("add", "packages/ai/CHANGELOG.md");
f.git("commit", "-m", "Add [Unreleased] section for next cycle");
f.git("commit", "-m", "docs(coding-agent): start next release cycle");
const final = f.git("rev-parse", "HEAD");
const hook = join(f.remote, "hooks/pre-receive");
if (failure === "rejected transaction") writeFileSync(hook, "#!/bin/sh\nexit 1\n", { mode: 0o755 });
Expand Down
4 changes: 2 additions & 2 deletions scripts/release.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -224,7 +224,7 @@ if (
)
throw new Error("origin/main changed during preparation; review the new main before releasing");
stageReleaseOutputs(intendedOutputs);
run(`git commit -m "Release v${version}"`);
run(`git commit -m "fix(coding-agent): release v${version}"`);
run(`git tag v${version}`);
console.log();

Expand All @@ -236,7 +236,7 @@ console.log();
// Commit
console.log("Committing changelog updates...");
stageReleaseOutputs(new Set(getChangelogs()));
run(`git commit -m "Add [Unreleased] section for next cycle"`);
run(`git commit -m "docs(coding-agent): start next release cycle"`);
console.log();

// Push
Expand Down
Loading