Skip to content

Commit 5b136fe

Browse files
shuv1337fwangactions-userLeonMueller-OneAndOnlyEduard-Voiculescu
authored
Sync upstream v1.1.20 (#301)
* sync * sync * Update Nix flake.lock and x86_64-linux hash * Update aarch64-darwin hash * fix(TUI): make tui work when OPENCODE_SERVER_PASSWORD is set (anomalyco#8179) * chore: generate * wip: black * docs: Update plan mode restrictions (anomalyco#8290) * docs: add 302ai provider (anomalyco#8142) * fix: add missing metadata() and ask() defintions to ToolContext type (anomalyco#8269) * fix(tui): track all timeouts in Footer to prevent memory leak (anomalyco#8255) * fix: deduplicate file refs in sent prompts (anomalyco#8303) * chore: generate * wip: black * wip: black * release: v1.1.17 * add fullscreen view to permission prompt * chore: generate * fix(desktop): correct health check endpoint URL to /global/health (anomalyco#8231) * feat(desktop): Adding Provider Icons (anomalyco#8215) * chore: generate * console: reduce desktop download cache ttl to 5 minutes * fix(github): add persist-credentials: false to workflow templates (anomalyco#8202) * release: v1.1.18 * fix(desktop): Revert provider icon on select model dialog (anomalyco#8245) * feat: add Undertale and Deltarune built-in themes (anomalyco#8240) * chore: generate * feat(desktop): Ask Question Tool Support (anomalyco#8232) * fix(mcp): close existing client before reassignment to prevent leaks (anomalyco#8253) * fix(state): delete key from recordsByKey on instance disposal (anomalyco#8252) * docs: document ~/.claude/CLAUDE.md compatibility behavior (anomalyco#8268) * feat: Add GitLab Duo Agentic Chat Provider Support (anomalyco#7333) Co-authored-by: Aiden Cline <63023139+rekram1-node@users.noreply.github.com> Co-authored-by: Aiden Cline <aidenpcline@gmail.com> * fix(cli): mcp auth duplicate radio button icon (anomalyco#8273) * Update Nix flake.lock and x86_64-linux hash * Update aarch64-darwin hash * tweak: ensure external dir and bash tool invocations render workdir details * tweak: external dir permission rendering in tui * add family to gpt 5.2 codex in codex plugin * fix(prompt-input): handle Shift+Enter before IME check to prevent stuck state (anomalyco#8275) * feat: add plan mode with enter/exit tools (anomalyco#8281) * chore: generate * test: fix plan agent test path from .opencode/plan/* to .opencode/plans/* * remove plan * fix: update User-Agent string to latest Chrome version in webfetch (anomalyco#8284) * fix: Add Plugin Mocks to Provider Tests (anomalyco#8276) * chore: generate * tweak: prompt for explore agent better * do not allow agent to ask custom-less questions * release: v1.1.19 * fix(TUI): make tui work when OPENCODE_SERVER_PASSWORD is set (anomalyco#8179) * chore: generate * docs: Update plan mode restrictions (anomalyco#8290) * docs: add 302ai provider (anomalyco#8142) * fix: add missing metadata() and ask() defintions to ToolContext type (anomalyco#8269) * fix(tui): track all timeouts in Footer to prevent memory leak (anomalyco#8255) * fix: deduplicate file refs in sent prompts (anomalyco#8303) * chore: generate * chore: generate * Update Nix flake.lock and x86_64-linux hash * Update aarch64-darwin hash * fix(session): skip duplicate system prompt for Codex OAuth sessions (anomalyco#8357) Co-authored-by: Claude <noreply@anthropic.com> * feat: show connected providers in /connect dialog (anomalyco#8351) * fix(opencode): fix docker image after sst rename in tips (anomalyco#8376) * chore: generate * ignore: update download stats 2026-01-14 * docs(prd): mark codex token refresh PR task as complete - PR created at #298 - Fix includes: write token refresh to openai provider ID, fallback to legacy codex entry - Tests pass (744 pass, 1 skip, 0 fail) * test(auth): verify backwards compatibility for OAuth metadata fields - Add test confirming minimal OAuth results (without optional email, name, plan, orgName fields) persist correctly in auth storage - All new metadata fields are optional in plugin types and auth schema - Provider auth handler uses conditional checks before setting optional fields - Verify 745 pass, 1 skip, 0 fail * chore(prd): mark extractUserInfo tasks as complete The extractUserInfo function is already implemented in codex.ts:92-105. It parses id_token, extracts email, name, and accountId from claims, and returns a UserInfo object. All tests pass. * chore(prd): mark OAuth callback integration tasks as complete OAuth callback already calls extractUserInfo(tokens) after token exchange and includes email, name, accountId in the success payload. * fix(app): file listing (anomalyco#8309) * chore(prd): mark normalizePlanType tasks as complete normalizePlanType function maps plan values to standardized tiers (free, plus, pro, team, enterprise, unknown) and handles case variations. * feat(server): add GET /auth/info/:providerID endpoint for account metadata - Added endpoint in server.ts that returns auth metadata (authenticated, type, email, plan, accountId) - Returns 404 with authenticated: false if provider not found - Generated openapi.json with new endpoint definition - Regenerated SDK with auth.info method and types (AuthInfoData, AuthInfoResponses) - Updated prd.json to mark SDK generation tasks as complete - Tests pass: 745 pass, 1 skip, 0 fail * chore(prd): mark PR merge and SDK tasks as complete - Marked "Merge PR before starting Phase 1" as complete (PR #298 already merged) - Updated verification steps for auth.info endpoint implementation * chore(prd): mark legacy codex cleanup task as complete - Verified migration copies codex to openai, Auth.remove('codex') available for manual cleanup - Removal is intentionally manual to prevent data loss if migration fails * chore: mark session complete * chore(prd): mark background task implementation as complete - Verified fetchChatGPTUserInfo background task at codex.ts:606-632 - Task spawns via 'void updatePlan().catch(() => {})' - non-blocking - Updates auth metadata via auth.set when plan/orgName retrieved - OAuth success returns immediately regardless of background task result * chore(prd): mark manifest.ts creation as complete - Verified manifest.ts exists with InstalledSkill and SkillManifest interfaces - Implements loadManifest, saveManifest, getInstalled, addInstalled, removeInstalled - Used by skill installer to track installed skills and their metadata * chore(prd): mark skill index and installer files as complete - Verified skill/index.ts exists with SkillIndex interface and caching logic - Implements loadIndex (cache with TTL), buildIndex (fetch and write), search (fuzzysort) - Verified skill/installer.ts exists with installSkill and uninstallSkill functions - Copies skill files to SKILLS_DIR and updates manifest with installed metadata * fix plan mode when not in git worktree * chore(prd): mark github fetcher as complete - Verified skill/fetcher/github.ts exists with 200 lines implementing git and tarball fetching - fetchRegistry() entry point with hasGit() check and tarball fallback - scanSkills() walks directories matching SKILL.md globs with minimatch - parseSkillFile() extracts YAML frontmatter for skill metadata * chore(prd): mark clawdhub and url fetchers as complete - Verified skill/fetcher/clawdhub.ts exists with stub fetchRegistry returning [] - Verified skill/fetcher/url.ts exists with stub fetchRegistry returning [] - Both are TODO stubs awaiting API contract confirmation and implementation * fix(ui): layout-bottom icons (anomalyco#8330) * fix(desktop): "load more" button behavior in desktop sidebar (anomalyco#8430) * chore: generate * release: v1.1.20 * sync: record last synced tag v1.1.20 * fix: suppress TS2589 type recursion error in server route chain --------- Co-authored-by: Frank <frank@anoma.ly> Co-authored-by: Github Action <action@github.com> Co-authored-by: Leonidas <77194479+LeonMueller-OneAndOnly@users.noreply.github.com> Co-authored-by: Eduard Voiculescu <eduardvoiculescu95@gmail.com> Co-authored-by: ⌞L⌝ <151412975+mthezi@users.noreply.github.com> Co-authored-by: Daniel M Brasil <danielmbrasil@protonmail.com> Co-authored-by: Daniel Sauer <81422812+sauerdaniel@users.noreply.github.com> Co-authored-by: Felix Sanchez <felix.sanchez.dev@gmail.com> Co-authored-by: opencode <opencode@sst.dev> Co-authored-by: Dax Raad <d@ironbay.co> Co-authored-by: usvimal <usvimal@gmail.com> Co-authored-by: Daniel Polito <danielbpolito@gmail.com> Co-authored-by: Brendan Allan <git@brendonovich.dev> Co-authored-by: cmdr-chara <legend.alkalex07@gmail.com> Co-authored-by: Zeke Sikelianos <zeke@sikelianos.com> Co-authored-by: Vladimir Glafirov <vglafirov@gitlab.com> Co-authored-by: Aiden Cline <63023139+rekram1-node@users.noreply.github.com> Co-authored-by: Aiden Cline <aidenpcline@gmail.com> Co-authored-by: Dillon Mulroy <dillon.mulroy@gmail.com> Co-authored-by: Joe Harrison <22684038+josephbharrison@users.noreply.github.com> Co-authored-by: Dax <mail@thdxr.com> Co-authored-by: Alan <alan.thiec@gmail.com> Co-authored-by: zerone0x <hi@trine.dev> Co-authored-by: Claude <noreply@anthropic.com> Co-authored-by: Akshar Patel <123344143+AksharP5@users.noreply.github.com> Co-authored-by: Goni Zahavy <goni1993@gmail.com> Co-authored-by: Filip <34747899+neriousy@users.noreply.github.com> Co-authored-by: Andrew Jazbec <andrew@jazbec.io> Co-authored-by: Shane Bishop <71288697+shanebishop1@users.noreply.github.com>
1 parent df300ff commit 5b136fe

68 files changed

Lines changed: 16328 additions & 437 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.github/last-synced-tag

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
v1.1.19
1+
v1.1.20

.ralph-done

Whitespace-only changes.

STATS.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -200,3 +200,4 @@
200200
| 2026-01-11 | 2,836,394 (+204,371) | 1,530,479 (+26,809) | 4,366,873 (+231,180) |
201201
| 2026-01-12 | 3,053,594 (+217,200) | 1,553,671 (+23,192) | 4,607,265 (+240,392) |
202202
| 2026-01-13 | 3,297,078 (+243,484) | 1,595,062 (+41,391) | 4,892,140 (+284,875) |
203+
| 2026-01-14 | 3,568,928 (+271,850) | 1,645,362 (+50,300) | 5,214,290 (+322,150) |

flake.lock

Lines changed: 3 additions & 3 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

infra/console.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -122,6 +122,7 @@ const ZEN_MODELS = [
122122
]
123123
const ZEN_BLACK = new sst.Secret("ZEN_BLACK")
124124
const STRIPE_SECRET_KEY = new sst.Secret("STRIPE_SECRET_KEY")
125+
const STRIPE_PUBLISHABLE_KEY = new sst.Secret("STRIPE_PUBLISHABLE_KEY")
125126
const AUTH_API_URL = new sst.Linkable("AUTH_API_URL", {
126127
properties: { value: auth.url.apply((url) => url!) },
127128
})
@@ -177,6 +178,7 @@ new sst.cloudflare.x.SolidStart("Console", {
177178
//VITE_DOCS_URL: web.url.apply((url) => url!),
178179
//VITE_API_URL: gateway.url.apply((url) => url!),
179180
VITE_AUTH_URL: auth.url.apply((url) => url!),
181+
VITE_STRIPE_PUBLISHABLE_KEY: STRIPE_PUBLISHABLE_KEY.value,
180182
},
181183
transform: {
182184
server: {

nix/hashes.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"nodeModules": {
3-
"x86_64-linux": "sha256-x6A/XT1i3bjakfAj0A1wV4n2s9rpflMDceTeppdP6tE=",
4-
"aarch64-darwin": "sha256-RkamQYbpjJqpHHf76em9lPgeI9k4/kaCf7T+4xHaizY="
3+
"x86_64-linux": "sha256-wENwhwRVfgoVyA9YNGcG+fAfu46JxK4xvNgiPbRt//s=",
4+
"aarch64-darwin": "sha256-vm1DYl1erlbaqz5NHHlnZEMuFmidr/UkS84nIqLJ96Q="
55
}
66
}

packages/app/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@opencode-ai/app",
3-
"version": "1.1.19",
3+
"version": "1.1.20",
44
"description": "",
55
"type": "module",
66
"exports": {

packages/app/src/context/global-sync.tsx

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@ type State = {
4242
config: Config
4343
path: Path
4444
session: Session[]
45+
sessionTotal: number
4546
session_status: {
4647
[sessionID: string]: SessionStatus
4748
}
@@ -110,6 +111,7 @@ function createGlobalSync() {
110111
agent: [],
111112
command: [],
112113
session: [],
114+
sessionTotal: 0,
113115
session_status: {},
114116
session_diff: {},
115117
todo: {},
@@ -131,8 +133,10 @@ function createGlobalSync() {
131133

132134
async function loadSessions(directory: string) {
133135
const [store, setStore] = child(directory)
134-
globalSDK.client.session
135-
.list({ directory })
136+
const limit = store.limit
137+
138+
return globalSDK.client.session
139+
.list({ directory, roots: true })
136140
.then((x) => {
137141
const fourHoursAgo = Date.now() - 4 * 60 * 60 * 1000
138142
const data = Array.isArray(x.data) ? x.data : []
@@ -143,10 +147,12 @@ function createGlobalSync() {
143147
.sort((a, b) => a.id.localeCompare(b.id))
144148
// Include up to the limit, plus any updated in the last 4 hours
145149
const sessions = nonArchived.filter((s, i) => {
146-
if (i < store.limit) return true
150+
if (i < limit) return true
147151
const updated = new Date(s.time?.updated ?? s.time?.created).getTime()
148152
return updated > fourHoursAgo
149153
})
154+
// Store total session count (used for "load more" pagination)
155+
setStore("sessionTotal", nonArchived.length)
150156
setStore("session", reconcile(sessions, { key: "id" }))
151157
})
152158
.catch((err) => {

packages/app/src/pages/layout.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -955,7 +955,7 @@ export default function Layout(props: ParentProps) {
955955
.toSorted(sortSessions),
956956
)
957957
const rootSessions = createMemo(() => sessions().filter((s) => !s.parentID))
958-
const hasMoreSessions = createMemo(() => store.session.length >= store.limit)
958+
const hasMoreSessions = createMemo(() => store.sessionTotal > store.session.length)
959959
const loadMoreSessions = async () => {
960960
setProjectStore("limit", (limit) => limit + 5)
961961
await globalSync.project.loadSessions(props.project.worktree)

packages/console/app/package.json

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
11
{
22
"name": "@opencode-ai/console-app",
3-
"version": "1.1.19",
3+
"version": "1.1.20",
44
"type": "module",
55
"license": "MIT",
66
"scripts": {
77
"typecheck": "tsgo --noEmit",
88
"dev": "vite dev --host 0.0.0.0",
9-
"dev:remote": "VITE_AUTH_URL=https://auth.dev.opencode.ai bun sst shell --stage=dev bun dev",
9+
"dev:remote": "VITE_AUTH_URL=https://auth.dev.opencode.ai VITE_STRIPE_PUBLISHABLE_KEY=pk_test_51RtuLNE7fOCwHSD4mewwzFejyytjdGoSDK7CAvhbffwaZnPbNb2rwJICw6LTOXCmWO320fSNXvb5NzI08RZVkAxd00syfqrW7t bun sst shell --stage=dev bun dev",
1010
"build": "./script/generate-sitemap.ts && vite build && ../../opencode/script/schema.ts ./.output/public/config.json",
1111
"start": "vite start"
1212
},
@@ -23,10 +23,12 @@
2323
"@solidjs/meta": "catalog:",
2424
"@solidjs/router": "catalog:",
2525
"@solidjs/start": "catalog:",
26+
"@stripe/stripe-js": "8.6.1",
2627
"chart.js": "4.5.1",
2728
"nitro": "3.0.1-alpha.1",
2829
"solid-js": "catalog:",
2930
"solid-list": "0.3.0",
31+
"solid-stripe": "0.8.1",
3032
"vite": "catalog:",
3133
"zod": "catalog:"
3234
},

0 commit comments

Comments
 (0)