Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
100 commits
Select commit Hold shift + click to select a range
4867a12
docs: add public community and release guides
Obed0101 Jun 13, 2026
5436921
ci: harden release supply chain gates
Obed0101 Jun 13, 2026
2e0ae10
docs: expand MendCode customization guide (#69)
Obed0101 Jun 13, 2026
ad9d4cd
docs: show mascot only in README header (#71)
Obed0101 Jun 13, 2026
1758ed5
docs: remove README mascot header (#74)
Obed0101 Jun 13, 2026
6b0e0b8
fix: show MendCode version on welcome
Obed0101 Jun 13, 2026
5c5e907
fix: align MendCode version and CLI name (#76)
Obed0101 Jun 13, 2026
60ca445
chore: sync main back to dev (#79)
Obed0101 Jun 13, 2026
b1da5d7
docs: add MendCode release flow skill (#81)
Obed0101 Jun 13, 2026
120c218
Add Agent View welcome date context (#80)
Obed0101 Jun 13, 2026
bfa5fd4
[codex] Backport OpenCode terminal and SDK fixes (#83)
Obed0101 Jun 13, 2026
f319f37
fix: prepare v0.1.4 compaction and prompt fixes (#85)
Obed0101 Jun 13, 2026
a745852
Backport OpenCode runtime updates for v0.1.5 (#88)
Obed0101 Jun 13, 2026
4923808
fix: release v0.1.6 memory injection (#91)
Obed0101 Jun 14, 2026
f58608f
feat: add usage insights dashboard (#95)
Obed0101 Jun 14, 2026
2d06971
fix: release v0.1.7 setup memory UX (#98)
Obed0101 Jun 14, 2026
3026de0
fix: complete v0.1.7 memory and docs (#100)
Obed0101 Jun 14, 2026
da84090
fix: release v0.1.8 stats cache and installer
Obed0101 Jun 14, 2026
14ce846
fix: simplify public cli and compaction resume (#107)
Obed0101 Jun 14, 2026
0096300
docs: add v0.1.9 changelog (#110)
Obed0101 Jun 14, 2026
37fa1cc
feat: prepare v0.1.10 tui and memory updates (#112)
Obed0101 Jun 15, 2026
cb0d14b
fix: prepare v0.1.11 tui and mflow updates (#115)
Obed0101 Jun 15, 2026
8f50f67
feat: prepare v0.1.12 rendering and installer updates (#118)
Obed0101 Jun 16, 2026
81543d6
chore: unblock v0.1.12 release dependencies (#122)
Obed0101 Jun 16, 2026
5a64c04
feat: prepare v0.1.13 release
Obed0101 Jun 16, 2026
20c6c6c
fix: update hono for v0.1.13 release
Obed0101 Jun 16, 2026
3cf5668
feat: prepare v0.1.14 package registry release (#132)
Obed0101 Jun 17, 2026
fb18a00
fix: update protobufjs for v0.1.14 release (#136)
Obed0101 Jun 17, 2026
741eedc
release: prepare v0.1.15
Obed0101 Jun 20, 2026
ff6b51c
fix: sync release dependency gates to dev
Obed0101 Jun 20, 2026
6ef1f04
fix: sync final OSV versions to dev
Obed0101 Jun 20, 2026
e8e9a86
fix: allow urgent OSV release versions through age gate (#145) (#146)
Obed0101 Jun 20, 2026
1bde962
Add Usage Insights screenshot (#147)
Obed0101 Jun 20, 2026
1eb370a
docs: sync v0.1.15 summary to dev (#149)
Obed0101 Jun 20, 2026
9b495a0
docs: expand memory center side agent guidance (#150)
Obed0101 Jun 20, 2026
e184095
fix: apply dream schedule proposals (#152)
Obed0101 Jun 20, 2026
e842d8f
docs: update website domain (#155)
Obed0101 Jun 20, 2026
96cb067
docs: remove personal release examples (#158)
Obed0101 Jun 20, 2026
eb8cab2
feat: add loop workflows and changes review
Obed0101 Jun 23, 2026
4c9a564
docs: add workflow screenshots (#163)
Obed0101 Jun 23, 2026
09a9f8a
fix: harden loop workflows (#165)
Obed0101 Jun 23, 2026
825d9b3
fix: keep loops cursor out of detail rows (#168)
Obed0101 Jun 24, 2026
d8a3920
fix: remove loops dashboard cursor sink (#171)
Obed0101 Jun 24, 2026
650323f
feat(loop): add goal budgets and optimize release ci
Obed0101 Jun 24, 2026
58eadd8
release: prepare v0.1.19 (#176)
Obed0101 Jun 26, 2026
9f49990
release: prepare v0.1.20 (#179)
Obed0101 Jul 27, 2026
69b7761
docs(readme): move branding to top and bottom (#181)
Obed0101 Jul 27, 2026
d30f242
fix: harden release dependencies and binary patches (#184)
Obed0101 Jul 28, 2026
0f99ed8
fix: update release dependency pins (#187)
Obed0101 Jul 28, 2026
47f40d6
docs: sync v0.1.20 changelog metadata (#189)
Obed0101 Jul 28, 2026
c7b27e7
feat: consolidate v0.1.20 TUI and runtime updates
Obed0101 Jul 28, 2026
6ace97a
fix: prevent hidden prompt leakage during questions (#194)
Obed0101 Jul 28, 2026
963afc6
docs: refresh README screenshots
Obed0101 Jul 29, 2026
21ba618
release: prepare v0.1.21
Obed0101 Jul 30, 2026
4e9f59f
fix(upgrade): show patch update notifications by default (#205)
Obed0101 Jul 30, 2026
d4fcff5
sync: carry v0.1.22 release fixes back to dev (#209)
Obed0101 Jul 30, 2026
38d47b5
release: prepare v0.1.23 session reliability update (#210)
Obed0101 Jul 31, 2026
582b0e6
fix(release): validate public help output across platforms (#213)
Obed0101 Jul 31, 2026
0e3abe3
fix(release): make help smoke test platform-independent (#215)
Obed0101 Jul 31, 2026
472e889
fix: harden runtime cleanup and session state (#218)
Obed0101 Aug 1, 2026
3743231
fix: repair compacted session cancellation state (#221)
Obed0101 Aug 1, 2026
5a9c608
fix(upgrade): make in-app updates transport-independent (#224)
Obed0101 Aug 2, 2026
e978f36
release: prepare v0.1.27 TUI reliability update (#226)
Obed0101 Aug 2, 2026
42386a5
feat: add durable workflows and harden background lifecycle (#230)
Obed0101 Aug 4, 2026
1d84441
fix: patch vulnerable release dependencies (#232)
Obed0101 Aug 4, 2026
df86414
fix(installer): skip setup prompt without TTY (#235)
Obed0101 Aug 4, 2026
4135338
fix(installer): make Windows downloads resilient
Obed0101 Aug 4, 2026
18ce846
release: prepare v0.1.29 Windows installer fixes
Obed0101 Aug 4, 2026
005bedf
release: prepare v0.1.30 runtime reliability update (#241)
Obed0101 Aug 5, 2026
0cd8ecf
fix(release): build Windows assets on native architectures (#244)
Obed0101 Aug 5, 2026
2cca2e4
fix(release): harden Windows baseline and long-running TUI state (#246)
Obed0101 Aug 5, 2026
1c371c3
fix(release): finalize v0.1.30 TUI recovery and notes (#249)
Obed0101 Aug 5, 2026
1f3ea62
fix(runtime): harden session and workflow recovery (#252)
Obed0101 Aug 8, 2026
50effea
release: integrate v0.1.30 runtime and TUI improvements (#254)
Obed0101 Aug 18, 2026
fa70a2f
chore(deps): bump dompurify to 3.4.13 (#258)
Obed0101 Aug 18, 2026
a40ca02
fix(deps): synchronize DOMPurify lockfile (#259) (#260)
Obed0101 Aug 18, 2026
7d07d19
fix(deps): patch release dependency vulnerabilities (#261) (#262)
Obed0101 Aug 18, 2026
08a736c
fix: stabilize Mermaid interaction and test isolation (#264)
Obed0101 Aug 18, 2026
5d65f77
release: prepare v0.1.31 Loop and Workflow verification (#266)
Obed0101 Aug 19, 2026
d050452
fix: harden long-running session controls (#269)
Obed0101 Aug 20, 2026
65ee075
fix: ship v0.1.33 reliability hotfix (#271)
Obed0101 Aug 20, 2026
ebe810c
fix: size short reasoning blocks (#274)
Obed0101 Aug 21, 2026
b21289f
fix: preserve v prefix in release names (#277)
Obed0101 Aug 21, 2026
2029d45
release: prepare v0.1.35 (#279)
Obed0101 Aug 22, 2026
d4b4cf1
release: prepare v0.1.36 (#281)
Obed0101 Aug 23, 2026
16e6bee
release: prepare v0.1.37
Obed0101 Aug 24, 2026
57a9f3a
release: prepare v0.1.38 (#288)
Obed0101 Aug 25, 2026
4bf92e3
docs: reorganize navigation and Mermaid fixtures
Obed0101 Aug 25, 2026
93bd6cd
release: prepare v0.1.39
Obed0101 Aug 26, 2026
741fcc2
release: prepare v0.1.40 (#297)
Obed0101 Aug 26, 2026
2cc07aa
🐛 fix(release): ship v0.1.41 session and branding hotfix (#299)
Obed0101 Aug 29, 2026
34129d6
🔒 fix(deps): upgrade pacote to 21.5.1 (#301)
Obed0101 Aug 29, 2026
412283c
fix: prevent deletion of unregistered worktree directories (#304)
Obed0101 Sep 3, 2026
354c63a
release: prepare v0.1.42 (#305)
Obed0101 Sep 3, 2026
f203832
fix: refresh release dependency security pins (#308)
Obed0101 Sep 3, 2026
d2f3899
fix: refresh toml security pin (#310)
Obed0101 Sep 3, 2026
cf6d689
fix: make v0.1.42 release installs reproducible (#311)
Obed0101 Sep 3, 2026
e87414c
fix: verify release attestations one artifact at a time
Obed0101 Sep 4, 2026
9a88189
release: prepare v0.1.43 (#315)
Obed0101 Sep 4, 2026
e9971bd
release: promote v0.1.43 to main
Obed0101 Sep 4, 2026
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
30 changes: 30 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,35 @@
# Changelog

## 0.1.43 - 2026-09-04

MendCode v0.1.43 adds the current OpenAI GPT-5.6 family and GPT-6 Astra to
the model and Codex OAuth surfaces while keeping the terminal session view
compact during concurrent work.

### Changed

- Add GPT-6 Astra plus GPT-5.6 Sol, Terra, and Luna API and ChatGPT OAuth
presets with documented limits, pricing, reasoning levels, and fast/pro
variants where the provider exposes them.
- Keep the OpenAI model picker populated from an in-process fallback when a
cached or bundled `models.dev` catalog predates the current model family;
live provider metadata still takes precedence.
- Keep Commands history in the Ctrl+T horizontal widget tray with a direct
action to open the originating session.
- Record the Codex CLI `0.153.3` comparison and the compatibility decisions in
the release audit.

### Fixed

- Allow GPT-6 Astra through the ChatGPT OAuth model filter with its documented
context and input limits while retaining the existing Responses Lite scope
for GPT-5.6 tiers.

### Tests

- Add model-catalog fallback, model-preset, Astra OAuth filtering, mode
normalization, and context-limit regressions.

## 0.1.42 - 2026-09-03

MendCode v0.1.42 makes queued prompts, cancellation, reconnection, and communication between sessions reliable under concurrent work.
Expand Down
1 change: 1 addition & 0 deletions docs/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,7 @@ Use this index by intent. **Use MendCode** explains the public workflow, **Featu
- [Package index](package-index.md): workspace packages versus runtime `.mendcode` packages.
- [MendCode Source Map](source-map.md): one maintained map from public features to implementation and test paths.
- [Releasing](releasing.md): installer contract, checksums, release notes, and public installer smoke tests.
- [Codex CLI and model audit](audits/codex-cli-0.153.3-gpt56-2026-09-04.md): upstream comparison and the GPT-5.6/GPT-6 Astra compatibility decisions for 0.1.43.
- [Changelog](../CHANGELOG.md): versioned behavior changes and regression coverage for recent releases.
- [Supply chain security](supply-chain-security.md): provenance, SBOM, pinned actions, dependency review, and scanner policy.
- [Public readiness audit](public-readiness-audit.md): branch, secret, dependency, legacy-reference, and public-surface checks.
Expand Down
46 changes: 46 additions & 0 deletions docs/audits/codex-cli-0.153.3-gpt56-2026-09-04.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
# Codex CLI and OpenAI model audit — 2026-09-04

This audit records the upstream Codex CLI comparison used for the 0.1.43
release. The reference CLI stable release was `0.153.3` (`rust-v0.153.3`).
OpenAI's current model pages identify the flagship model as `gpt-6-astra` and
the 5.6 family as `gpt-5.6`/Sol, Terra, and Luna.

## Ported in 0.1.43

- Add `gpt-6-astra`, `gpt-5.6`, `gpt-5.6-sol`, `gpt-5.6-terra`, and
`gpt-5.6-luna` to the OpenAI catalog fallback. A stale cache or bundled
`models.dev` snapshot no longer hides these models from the picker.
- Preserve live `models.dev` entries when they exist, so the fallback cannot
replace newer provider metadata.
- Add API and ChatGPT OAuth presets with documented context limits and API
prices. GPT-6 Astra keeps its 1.05M context/922K input limit; ChatGPT OAuth
Sol, Terra, and Luna keep the existing 256K effective limit imposed by the
Responses Lite adapter.
- Recognize Astra and its documented `fast` variant in the ChatGPT OAuth
catalog. Astra stays on the standard Codex Responses transport; the current
MendCode Responses Lite compatibility contract is limited to the 5.6 tiers.
- Keep the compact Commands history in the Ctrl+T horizontal widget tray,
including its direct session-open action.

## Reviewed and intentionally not ported

- Upstream's asynchronous model-picker refresh (`5fc7840cf6d0`) is a larger
TUI/server contract change. MendCode already refreshes `models.dev` in the
provider service; this release adds the static safety net without changing
picker lifecycle or selection state.
- Luna Reserve usage fallback, app-server collaboration-mode discovery, live
context-compaction status, rate-limit banners, permission-profile discovery,
startup warning condensation, automatic thread naming, and submission-ID
steer acknowledgement were reviewed from the upstream history. Each needs a
separate MendCode contract and regression surface, so none is represented as
shipped behavior here.
- The upstream CLI version is not copied into MendCode's `version` request
header. The existing `0.144.0` value belongs to MendCode's internal
Responses Lite compatibility contract, and the upstream source contains no
equivalent current header contract to justify changing it.

## Sources

- [OpenAI GPT-6 Astra model documentation](https://developers.openai.com/api/docs/models/gpt-6-astra)
- [OpenAI GPT-5.6 Sol model documentation](https://developers.openai.com/api/docs/models/gpt-5.6-sol)
- [OpenAI Codex CLI releases](https://github.com/openai/codex/releases)
4 changes: 3 additions & 1 deletion docs/features.md
Original file line number Diff line number Diff line change
Expand Up @@ -433,7 +433,9 @@ MendCode normalizes supported model aliases, preserves session affinity while th
effective instructions stay the same, and rotates that affinity when instructions
change. GPT-5.6 OAuth models expose a 256K effective input/context limit and a
provider-aware compaction threshold so long sessions compact before the provider
rejects the request.
rejects the request. GPT-6 Astra is also available when the OpenAI catalog or
ChatGPT account exposes it, with its documented 1.05M context and 922K input
limits.

## Model Roles

Expand Down
12 changes: 6 additions & 6 deletions src/mendcode/packages/extensions/zed/extension.toml
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
id = "mendcode"
name = "MendCode"
description = "The open source coding agent."
version = "0.1.42"
version = "0.1.43"
schema_version = 1
authors = ["MendCode"]
repository = "https://github.com/MendCode/MendCode"
Expand All @@ -11,26 +11,26 @@ name = "MendCode"
icon = "./icons/opencode.svg"

[agent_servers.mendcode.targets.darwin-aarch64]
archive = "https://github.com/MendCode/MendCode/releases/download/v0.1.42/mendcode-darwin-arm64.zip"
archive = "https://github.com/MendCode/MendCode/releases/download/v0.1.43/mendcode-darwin-arm64.zip"
cmd = "./mendcode"
args = ["acp"]

[agent_servers.mendcode.targets.darwin-x86_64]
archive = "https://github.com/MendCode/MendCode/releases/download/v0.1.42/mendcode-darwin-x64.zip"
archive = "https://github.com/MendCode/MendCode/releases/download/v0.1.43/mendcode-darwin-x64.zip"
cmd = "./mendcode"
args = ["acp"]

[agent_servers.mendcode.targets.linux-aarch64]
archive = "https://github.com/MendCode/MendCode/releases/download/v0.1.42/mendcode-linux-arm64.tar.gz"
archive = "https://github.com/MendCode/MendCode/releases/download/v0.1.43/mendcode-linux-arm64.tar.gz"
cmd = "./mendcode"
args = ["acp"]

[agent_servers.mendcode.targets.linux-x86_64]
archive = "https://github.com/MendCode/MendCode/releases/download/v0.1.42/mendcode-linux-x64.tar.gz"
archive = "https://github.com/MendCode/MendCode/releases/download/v0.1.43/mendcode-linux-x64.tar.gz"
cmd = "./mendcode"
args = ["acp"]

[agent_servers.mendcode.targets.windows-x86_64]
archive = "https://github.com/MendCode/MendCode/releases/download/v0.1.42/mendcode-windows-x64.zip"
archive = "https://github.com/MendCode/MendCode/releases/download/v0.1.43/mendcode-windows-x64.zip"
cmd = "./mendcode.exe"
args = ["acp"]
2 changes: 1 addition & 1 deletion src/mendcode/packages/opencode/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"$schema": "https://json.schemastore.org/package.json",
"version": "0.1.42",
"version": "0.1.43",
"name": "mendcode",
"type": "module",
"license": "MIT",
Expand Down
2 changes: 1 addition & 1 deletion src/mendcode/packages/opencode/script/dev-rearm-smoke.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ import { createServer, type IncomingMessage, type ServerResponse } from "node:ht
import { once } from "node:events"
import { probeRuntime } from "./dev-rearm"

const VERSION = "0.1.42"
const VERSION = "0.1.43"
const PROJECT = "/tmp/mendcode-dev-rearm-smoke-project"

function assert(condition: unknown, message: string): asserts condition {
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,141 @@
import { createMemo, createSignal, For, Show } from "solid-js"
import type { TuiThemeCurrent } from "@mendcode/plugin/tui"
import { Locale } from "@/util/locale"
import {
agentViewCommandStateRank,
formatAgentViewCommandSummary,
isAgentViewCommandActionable,
type AgentViewCommand,
} from "../util/agent-view"

export function AgentCommandPanel(props: {
commands: readonly AgentViewCommand[]
sessionID: string
width: number
height?: number
busyID?: string
theme: Pick<TuiThemeCurrent, "text" | "textMuted" | "accent" | "error">
onUpdate: (command: AgentViewCommand, state: "accepted" | "rejected") => void
onOpenSession?: (sessionID: string) => void
}) {
const [expanded, setExpanded] = createSignal(false)
const active = createMemo(() =>
props.commands
.filter((command) => agentViewCommandStateRank(command) < 2)
.toSorted(
(a, b) =>
Number(b.targetSessionID === props.sessionID && isAgentViewCommandActionable(b)) -
Number(a.targetSessionID === props.sessionID && isAgentViewCommandActionable(a)) ||
agentViewCommandStateRank(a) - agentViewCommandStateRank(b) ||
b.time.updated - a.time.updated,
),
)
const history = createMemo(() =>
props.commands
.filter((command) => agentViewCommandStateRank(command) >= 2)
.toSorted((a, b) => b.time.updated - a.time.updated),
)
const visible = createMemo(() => [...active().slice(0, 4), ...(expanded() ? history().slice(0, 4) : [])])
const rows = () => (
<>
<For each={visible()}>
{(command) => {
const incoming = () => command.targetSessionID === props.sessionID
const actionable = () => incoming() && isAgentViewCommandActionable(command)
const busy = () => props.busyID === command.id
const sender = () =>
incoming() ? command.payload?.sourceTitle || command.sourceSessionID : command.targetSessionID
const relatedSessionID = () => (incoming() ? command.sourceSessionID : command.targetSessionID)
const canOpen = () =>
Boolean(props.onOpenSession && relatedSessionID() && relatedSessionID() !== props.sessionID)
const trailingWidth = () => (canOpen() ? 7 : 0) + (actionable() ? 19 : 0)
return (
<box width="100%" flexDirection="column" flexShrink={0}>
<box width="100%" flexDirection="row" gap={1}>
<text fg={props.theme.text} wrapMode="none" flexGrow={1} minWidth={0}>
{Locale.truncate(
`${incoming() ? "←" : "→"} ${Locale.truncate(sender().replace(/\s+/g, " "), 24)} · ${formatAgentViewCommandSummary(command)}`,
Math.max(1, props.width - trailingWidth()),
)}
</text>
<Show when={canOpen()}>
<text
id={`agent-command-open-${command.id}`}
fg={props.theme.textMuted}
wrapMode="none"
flexShrink={0}
onMouseUp={() => {
const sessionID = relatedSessionID()
if (sessionID) props.onOpenSession?.(sessionID)
}}
>
[open]
</text>
</Show>
<Show when={actionable()}>
<text
id={`agent-command-accept-${command.id}`}
fg={busy() ? props.theme.textMuted : props.theme.accent}
wrapMode="none"
flexShrink={0}
onMouseUp={() => {
if (!busy()) props.onUpdate(command, "accepted")
}}
>
[accept]
</text>
<text
id={`agent-command-reject-${command.id}`}
fg={busy() ? props.theme.textMuted : props.theme.error}
wrapMode="none"
flexShrink={0}
onMouseUp={() => {
if (!busy()) props.onUpdate(command, "rejected")
}}
>
[reject]
</text>
</Show>
</box>
<Show when={expanded() && command.error}>
<text fg={props.theme.textMuted} wrapMode="none">
{Locale.truncate(command.error!.replace(/\s+/g, " "), props.width)}
</text>
</Show>
</box>
)
}}
</For>
<Show when={active().length > 4 || (expanded() && history().length > 4)}>
<text fg={props.theme.textMuted} wrapMode="none">
More commands in Agent View
</text>
</Show>
</>
)

return (
<Show when={props.commands.length > 0}>
<box width={props.width} height={props.height} flexDirection="column" flexShrink={0}>
<text
id="agent-command-history-toggle"
fg={props.theme.textMuted}
wrapMode="none"
onMouseUp={() => setExpanded((value) => !value)}
>
{history().length > 0 ? (expanded() ? "▾ " : "▸ ") : ""}Commands
{active().length > 0 ? ` · ${active().length} active` : ""}
{history().length > 0 ? ` · ${history().length} past` : ""}
</text>
<Show
when={props.height !== undefined}
fallback={rows()}
>
<scrollbox height={Math.max(1, props.height! - 1)} width="100%">
{rows()}
</scrollbox>
</Show>
</box>
</Show>
)
}
Original file line number Diff line number Diff line change
Expand Up @@ -231,7 +231,7 @@ const titleOverrides: Record<string, string> = {
"session.context": "View Context Usage",
"session.permission.status": "Change Approval Mode",
"session.toggle.sticky_user_header": "Toggle Sticky User Header",
"session.toggle.todos": "Toggle Todos",
"session.toggle.todos": "Toggle Session Widgets",
"session.toggle.thinking": "Toggle Thinking",
"session.toggle.timestamps": "Toggle Timestamps",
"session.toggle.actions": "Toggle Tool Details",
Expand Down
Loading
Loading