Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
171 commits
Select commit Hold shift + click to select a range
00582a5
feat: add 9Router provider and first-run onboarding wizard
johnnykang101 Mar 26, 2026
477e13c
fix: remove Paperclip references from 9Router dialog
johnnykang101 Mar 26, 2026
d39610c
fix: 9Router is URL-only, no API key required
johnnykang101 Mar 26, 2026
c700bfb
feat: dynamic model discovery for 9Router provider
johnnykang101 Mar 26, 2026
30f6553
ux: rename Fetch Models to Test Connection, show connection status
johnnykang101 Mar 26, 2026
ad55ab0
fix: resolve TypeScript errors in onboarding and 9Router dialog
johnnykang101 Mar 26, 2026
b7ae155
feat: add opencode onboard CLI command
johnnykang101 Mar 26, 2026
daeb5d1
chore: add onboard script for local dev testing
johnnykang101 Mar 26, 2026
f48e40a
fix: add provider to enabled_providers when onboarding
johnnykang101 Mar 26, 2026
c49c15d
ci: add CI and CD workflows for trunk-based development
johnnykang101 Mar 26, 2026
ae40cd7
ci: add weekly upstream sync workflow
johnnykang101 Mar 26, 2026
aa59bae
ci: use cb-v prefix for CoBuilder releases to avoid upstream tag coll…
johnnykang101 Mar 26, 2026
06050c6
feat: rename CLI to cobuilder + binary release pipeline + install.sh
johnnykang101 Mar 26, 2026
0986dcc
ci: generate commit-based release notes scoped to cb-v tags
johnnykang101 Mar 26, 2026
2bc6006
ci: clean release notes following Keep a Changelog best practices
johnnykang101 Mar 26, 2026
a999f54
feat: add security module inspired by OpenFang security architecture
johnnykang101 Mar 26, 2026
7bac0dc
fix: create release before build so binary upload finds existing release
johnnykang101 Mar 26, 2026
52d85ba
feat: add auto-dream crash recovery
johnnykang101 Mar 26, 2026
2c9516e
fix: use COBUILDER_RELEASE_TAG env var for binary upload
johnnykang101 Mar 26, 2026
9040c1b
feat: implement cross-session memory system
johnnykang101 Mar 26, 2026
747c9ab
docs: rewrite README for CoBuilder with enterprise features and insta…
johnnykang101 Mar 26, 2026
ad45a8a
docs: polish README with prose-first layout and detailed security exp…
johnnykang101 Mar 26, 2026
dd69fd6
assets: add CoBuilder logo SVG and fix README image path
johnnykang101 Mar 26, 2026
041f29c
docs: remove redundant CoBuilder heading below logo wordmark
johnnykang101 Mar 26, 2026
37d05a1
assets: add Jindo dog mascot SVG for CoBuilder
johnnykang101 Mar 26, 2026
d0f0f50
assets: redesign mascot as digital terminal-style holographic Jindo
johnnykang101 Mar 26, 2026
fb68e9f
assets: redesign mascot as pixel art Jindo matching CobuilderLabs org…
johnnykang101 Mar 26, 2026
2f4a532
assets: simplify mascot to Jindo headshot pixel art
johnnykang101 Mar 26, 2026
8d038d0
docs: add Jindo mascot alongside logo in README header
johnnykang101 Mar 26, 2026
d32901d
rebrand: blend Jindo mascot into logo icon
johnnykang101 Mar 26, 2026
f155577
fix: remove clipPath — GitHub SVG sanitizer strips it
johnnykang101 Mar 26, 2026
2de9351
rebrand: logo, CI/CD path filters, branch policy docs (#1)
johnnykang101 Mar 26, 2026
dfc1d79
rebrand: two-tone mascot + download section (#2)
johnnykang101 Mar 26, 2026
4dd2a3f
feat: update mascot with two-tone cream face patch
johnnykang101 Mar 26, 2026
4d45140
docs: add GitHub Copilot to AI Providers section
johnnykang101 Mar 26, 2026
5c2eecc
docs: add link and description for 9Router
johnnykang101 Mar 26, 2026
fcd049e
chore: initialize GSD project planning
johnnykang101 Mar 26, 2026
72a8784
chore: add GSD phase plans (modular security + workflow plugins)
johnnykang101 Mar 26, 2026
b7a566f
chore: fix GSD plan filenames and ROADMAP format
johnnykang101 Mar 26, 2026
3d6d05b
feat: Phase 1 — Modular Security System
johnnykang101 Mar 26, 2026
0f3fea2
feat: Phase 2 — Workflow Plugin System
johnnykang101 Mar 26, 2026
f367e27
fix: rename release assets from opencode- to cobuilder- prefix
johnnykang101 Mar 26, 2026
bb1a524
feat: Phase 3 — UI/UX Polish (13 issues fixed)
johnnykang101 Mar 26, 2026
eeeb02f
feat: Phase 4 — UI/UX Polish II
johnnykang101 Mar 26, 2026
8fd7064
fix: rename bin/opencode to bin/cobuilder and fix install.sh asset names
johnnykang101 Mar 26, 2026
f80ca55
fix: guard Config.get() against missing instance context on startup
johnnykang101 Mar 26, 2026
3fb9414
fix(build): replace pkg.name with literal "cobuilder" in Bun compile …
johnnykang101 Mar 26, 2026
16cd513
fix(install): re-attach /dev/tty so onboard works via curl | bash
johnnykang101 Mar 26, 2026
3092881
fix: rename all remaining opencode references to cobuilder
johnnykang101 Mar 26, 2026
1391a8f
fix(workflow): remove fake registry aliases pointing to non-existent …
johnnykang101 Mar 26, 2026
608a6b7
fix(workflow): restore gsd alias pointing to CobuilderLabs/gsd-workflow
johnnykang101 Mar 26, 2026
ecafcbb
feat(skills): add cobuilder skills install/list/remove command
johnnykang101 Mar 26, 2026
aad5a9e
fix(onboard): remove ralph-loop and gstack from wizard
johnnykang101 Mar 26, 2026
fc84970
feat(system-prompt): inject installed command packages into AI context
johnnykang101 Mar 26, 2026
93d707c
fix: pass OPENCODE_VERSION and OPENCODE_CHANNEL=latest to build step …
johnnykang101 Mar 26, 2026
967417e
chore: update AGENTS.md
johnnykang101 Mar 26, 2026
d3341fb
fix(install): scan recent releases for asset instead of blindly trust…
johnnykang101 Mar 26, 2026
23c8826
fix(cd): create release as draft, publish only after all binaries upl…
johnnykang101 Mar 26, 2026
afc900a
fix(install): use GitHub API asset list instead of HTTP probing to fi…
johnnykang101 Mar 26, 2026
4280c5b
fix(cd): add --publish never to electron-builder package steps
johnnykang101 Mar 26, 2026
a9b97d7
fix(install): revert to simple /releases/latest — draft-release CD fi…
johnnykang101 Mar 26, 2026
093013b
fix(deps): add react and react-dom to opencode package dependencies
johnnykang101 Mar 26, 2026
bc1b83a
fix(install): check /dev/tty is actually readable before redirecting
johnnykang101 Mar 26, 2026
3798562
fix(install): use redirect test to check /dev/tty accessibility
johnnykang101 Mar 26, 2026
c8983ba
fix(install): use stty to verify /dev/tty is a functional terminal
johnnykang101 Mar 26, 2026
9be9e21
feat: autopilot mode, Claude prefill fix, e2e tests, wizard validatio…
johnnykang101 Mar 27, 2026
5a6da70
fix: guard Config.get() in security headers middleware against missin…
johnnykang101 Mar 27, 2026
e276e41
ci: add concurrency group to beta workflow to prevent queue pile-up
johnnykang101 Mar 27, 2026
9786556
ci: add concurrency groups to all high-risk workflows
johnnykang101 Mar 27, 2026
a76740a
fix: onboard wizard, Claude trailing message fix, skills in system pr…
johnnykang101 Mar 27, 2026
a89c8a4
fix(ui): show plain text fallback when DOMPurify unavailable or parse…
johnnykang101 Mar 27, 2026
46f7f08
feat: UX parity with Claude Code (5 improvements) (#20)
johnnykang101 Mar 27, 2026
3c18aa4
feat(ux): Wave B — smart empty state, session branch map, history sea…
johnnykang101 Mar 27, 2026
b8ece6f
feat(ux): Wave C — Cmd+K palette, file hover preview, tool search, co…
johnnykang101 Mar 27, 2026
ea54bf7
feat(ux): Wave A — ambient title progress, jump-to-active scroll, str…
johnnykang101 Mar 27, 2026
53ebe85
chore: merge dev into main — resolve conflicts keeping all features
johnnykang101 Mar 27, 2026
389a3f3
ci: fix sync-upstream to target main and protect CoBuilder files
johnnykang101 Mar 27, 2026
9f9f0a1
ci: rewrite sync-upstream to use dev branch and PR flow (upstream → d…
johnnykang101 Mar 27, 2026
7e41bda
chore: sync upstream/dev into dev (conflicts need review)
github-actions[bot] Mar 27, 2026
b26e125
ci: fix sync-upstream PR creation — add --repo flag to gh pr create
johnnykang101 Mar 27, 2026
de980af
chore: merge upstream dev — resolve conflicts (keep CoBuilder UX defa…
johnnykang101 Mar 27, 2026
de55f6c
fix: resolve pre-existing merge conflict markers in config.ts and ind…
johnnykang101 Mar 27, 2026
f8b7ef9
fix: resolve merge conflict markers in i18n files (keep CoBuilder bra…
johnnykang101 Mar 27, 2026
a35982b
fix: remove obsolete state block from config.ts, preserve CoBuilder w…
johnnykang101 Mar 27, 2026
bdc81a2
ci: remove 32 upstream noise workflows, optimize CI/CD with bun cachi…
johnnykang101 Mar 27, 2026
75ef17a
fix(cd): handle existing release tag gracefully — re-upload assets if…
Mar 27, 2026
a1d16f8
fix(onboard): guard Config.get() against missing instance context in …
Mar 27, 2026
79f20f9
fix(cd): use npm install + npx electron-vite on Windows to resolve pi…
Mar 27, 2026
d84e6e9
fix(cd): add picocolors to desktop-electron on Windows to fix electro…
Mar 27, 2026
abdd849
fix(ci): change pr-standards workflow ref from dev to main
Mar 27, 2026
5387fa0
fix(cd): set NODE_PATH to workspace node_modules on Windows to fix el…
Mar 27, 2026
eea369c
fix(desktop): add picocolors as explicit devDependency to fix electro…
Mar 27, 2026
ddee779
fix(ci): skip pr-standards checks for repo collaborators with write a…
Mar 27, 2026
95d5112
chore: set johnnykang101 as sole code owner
Mar 27, 2026
3e7673f
fix(cd): copy picocolors into electron-vite Bun cache dir on Windows
Mar 27, 2026
41f2bec
feat(ci): auto-approve PRs from repo collaborators via GitHub App bot
Mar 27, 2026
a28d9da
fix(cd): use bun x electron-vite on Windows to fix module resolution
Mar 27, 2026
7526d3a
fix(cd): use npm install + npx electron-vite on Windows to fix picoco…
Mar 27, 2026
7ac03b6
docs(cd): guard against reverting npm+npx Windows build fix
Mar 27, 2026
8eeb29c
perf(ci): optimize pipelines — skip non-releasable CD runs, add timeo…
Mar 27, 2026
cfc3005
fix(cd): resolve catalog: entries before npm install on Windows deskt…
Mar 27, 2026
31e63d0
fix(cd): fix YAML syntax error in catalog comment
Mar 27, 2026
da754d1
fix(cd): revert Windows build to original bun run build — was working…
Mar 27, 2026
0cc82c2
chore: remove upstream CODEOWNERS — referenced non-CobuilderLabs cont…
johnnykang101 Mar 27, 2026
820b126
fix: replace OpenCode branding with CoBuilder in TUI and fix update c…
johnnykang101 Mar 27, 2026
f9d1423
ci: auto-enable squash merge and update branch in auto-approve workflow
johnnykang101 Mar 27, 2026
b59acd5
fix(desktop): add picocolors as explicit devDependency to resolve Win…
johnnykang101 Mar 27, 2026
800792b
ci: fix auto-approve — use GITHUB_TOKEN for auto-merge, catch errors …
johnnykang101 Mar 27, 2026
b0ac6be
fix: comment out anomalyco Homebrew tap references (#30)
johnnykang101 Mar 27, 2026
2316dff
fix: replace opencode with cobuilder in TUI exit message (#31)
johnnykang101 Mar 27, 2026
cb94421
ci: add workflow_dispatch trigger to CD for manual runs
johnnykang101 Mar 27, 2026
81610b9
docs: add manual resume commands to crash recovery section
johnnykang101 Mar 27, 2026
26777b8
fix(cd): use npm+npx on Windows desktop build to fix picocolors resol…
johnnykang101 Mar 27, 2026
f3e9bc3
ci: add workflow_run fallback trigger to CD to prevent silent push dr…
johnnykang101 Mar 27, 2026
2733967
fix(cd): npm-install electron-vite+picocolors directly on Windows — n…
johnnykang101 Mar 27, 2026
dc12846
docs: rewrite README to clearly position CoBuilder as an AI agent wit…
johnnykang101 Mar 27, 2026
b1254c2
docs: clarify macOS desktop app not yet available
johnnykang101 Mar 27, 2026
c8aaa44
ci: replace TEAM_MEMBERS file lookup with collaborator permission che…
johnnykang101 Mar 27, 2026
dc19036
chore: remove 30 upstream-only workflows (#38)
johnnykang101 Mar 27, 2026
f3cd076
fix(cd): restore Desktop jobs + fix Windows electron-vite via npm in …
johnnykang101 Mar 27, 2026
576779f
ci(cd): disable Linux desktop job temporarily — focus on Windows
johnnykang101 Mar 27, 2026
3e3ecc6
ci(cd): skip bun install + CLI build during Windows validation
johnnykang101 Mar 27, 2026
4f3067d
fix(cd): copy vite peer deps as real files to fix Windows bun symlink…
johnnykang101 Mar 27, 2026
30f9234
ci: add test-windows-build workflow for rapid iteration
johnnykang101 Mar 27, 2026
7eb2489
fix(cd): replace all bun junctions with real npm copies on Windows
johnnykang101 Mar 27, 2026
790efc5
ci: replace all bun junctions via PowerShell (not just electron-vite …
johnnykang101 Mar 27, 2026
ddfbf18
ci: remove all junction hacks — use default PowerShell shell (was the…
johnnykang101 Mar 27, 2026
15ef00c
ci: fix cache key bun.lockb→bun.lock, delete stale Windows cache
johnnykang101 Mar 27, 2026
f308f49
fix(cd): fix cache key bun.lock + remove Windows vite workaround (def…
johnnykang101 Mar 27, 2026
66ed506
ci(cd): restore full pipeline — desktop-linux back, remove temp TODO …
johnnykang101 Mar 27, 2026
a8977b3
ci: remove test-windows-build workflow — Windows build confirmed fixed
johnnykang101 Mar 27, 2026
4db2652
fix(cd): don't cache node_modules on Windows — bun junctions break on…
johnnykang101 Mar 27, 2026
1144a44
feat(cd): add macOS desktop build job (unsigned) (#40)
johnnykang101 Mar 27, 2026
a0cda71
feat(cd): restore CLI + web binary builds for all platforms (#41)
johnnykang101 Mar 27, 2026
0af2e27
ci(cd): use area-based release notes sections (TUI, Desktop, Core, Misc)
johnnykang101 Mar 27, 2026
a3de4c4
ci(cd): remove Full Changelog link from release notes
johnnykang101 Mar 27, 2026
f98e6af
ci: switch auto-merge from squash to merge commit
johnnykang101 Mar 27, 2026
5c9047a
ci(test): switch to ubuntu-latest/windows-latest, fix invalid concurr…
johnnykang101 Mar 27, 2026
e24f397
ci(pr-management): switch to ubuntu-latest, replace composite setup-b…
johnnykang101 Mar 27, 2026
4c1ec1f
fix(upgrade): point upgrade to CobuilderLabs releases + fix auto-merge
Mar 27, 2026
2a35897
fix(ci): use bunx turbo instead of bun turbo for unit tests
Mar 27, 2026
f96f55c
test: skip brew tap unit tests
Mar 27, 2026
95727b1
Merge pull request #43 from CobuilderLabs/fix/upgrade-and-automerge-v2
johnnykang101 Mar 27, 2026
0bada04
fix(ci): add bun install step to unit and e2e test jobs
Mar 27, 2026
f3c56a1
Merge pull request #44 from CobuilderLabs/fix/ci-add-bun-install
github-actions[bot] Mar 27, 2026
15966ac
fix(tests): update installation tests for cb-v prefix and fix NUL byt…
Mar 27, 2026
e7ac8b6
fix(onboard): force stdin raw mode for Bun compiled binary
Mar 27, 2026
0c93571
fix(tests): fix Filesystem.contains for Windows + skip broken MCP oau…
Mar 27, 2026
165c8a0
Merge pull request #45 from CobuilderLabs/fix/unit-test-failures
github-actions[bot] Mar 27, 2026
9a7778e
feat: restore CoBuilder-specific features lost in upstream sync
johnnykang101 Mar 27, 2026
11a1bcf
feat(ux): Wave A — title progress, jump-to-active, streaming tok/s
Mar 27, 2026
246d173
fix(ui): add missing turnUsage memo used by tok/s streaming feature
johnnykang101 Mar 27, 2026
e5899b0
chore: add CoBuilder patch protection against upstream sync overwrites
johnnykang101 Mar 27, 2026
66a80bd
fix: rebrand system prompts and truncate TUI tool output
johnnykang101 Mar 27, 2026
ac8dd75
chore: regenerate CoBuilder patch set (0127 patches)
johnnykang101 Mar 27, 2026
c574d9a
fix: rebrand copilot-gpt-5 prompt and remove anomalyco brew references
johnnykang101 Mar 27, 2026
77ad68a
chore: regenerate CoBuilder patch set (0128 patches)
johnnykang101 Mar 27, 2026
2cf7744
feat: add Zen and GitHub Copilot providers to onboard wizard
johnnykang101 Mar 27, 2026
15ce7d7
chore: regenerate CoBuilder patch set (0130 patches)
johnnykang101 Mar 27, 2026
84a0f8e
fix: onboard — add provider to enabled_providers, write 9Router auth …
johnnykang101 Mar 27, 2026
488b498
fix: show all providers in /connect regardless of enabled_providers
johnnykang101 Mar 27, 2026
085a26d
fix: show all providers in /connect TUI dialog (server-side fix)
johnnykang101 Mar 27, 2026
456c56a
fix: show URL prompt for 9Router in /connect dialog
johnnykang101 Mar 27, 2026
a33de7f
fix: rebrand session exit hint and widen 9Router URL check
johnnykang101 Mar 27, 2026
7d7178d
fix: /connect 9Router — show live model list and let user select
johnnykang101 Mar 27, 2026
5a97f00
fix: use correct 'config' field for sdk.client.config.update calls
johnnykang101 Mar 27, 2026
5eb9b64
fix(e2e): resolve Windows CI failures caused by content-visibility: auto
johnnykang101 Mar 28, 2026
1732541
fix(e2e): resolve Windows CI failures caused by content-visibility: auto
johnnykang101 Mar 28, 2026
4dcb891
fix(install): scan releases for CLI asset instead of blindly using la…
Mar 28, 2026
4234f21
fix(cd): create release as draft, restore CLI builds, publish only af…
Mar 28, 2026
53514d1
fix(e2e): fix Windows CI flakiness in playwright tests
Mar 28, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  

Large diffs are not rendered by default.

1,030 changes: 1,030 additions & 0 deletions .cobuilder/patches/0002-effectify-Config-service-19139.patch

Large diffs are not rendered by default.

87 changes: 87 additions & 0 deletions .cobuilder/patches/0003-chore-generate.patch
Original file line number Diff line number Diff line change
@@ -0,0 +1,87 @@
From 9f94bdb49634bda90a2804585b8d739228dde876 Mon Sep 17 00:00:00 2001
From: "opencode-agent[bot]" <opencode-agent[bot]@users.noreply.github.com>
Date: Thu, 26 Mar 2026 17:08:33 +0000
Subject: [PATCH 003/131] chore: generate

---
packages/opencode/specs/effect-migration.md | 5 +++--
packages/opencode/src/config/config.ts | 17 ++++-------------
2 files changed, 7 insertions(+), 15 deletions(-)

diff --git a/packages/opencode/specs/effect-migration.md b/packages/opencode/specs/effect-migration.md
index a73f8ea39..176190437 100644
--- a/packages/opencode/specs/effect-migration.md
+++ b/packages/opencode/specs/effect-migration.md
@@ -127,10 +127,10 @@ Use `Effect.cached` when multiple concurrent callers should share a single in-fl

```ts
// Inside the layer — yield* to initialize the memo
-let cached = yield* Effect.cached(loadExpensive())
+let cached = yield * Effect.cached(loadExpensive())

const get = Effect.fn("Foo.get")(function* () {
- return yield* cached // concurrent callers share the same fiber
+ return yield* cached // concurrent callers share the same fiber
})

// To invalidate: swap in a fresh memo
@@ -140,6 +140,7 @@ const invalidate = Effect.fn("Foo.invalidate")(function* () {
```

Prefer `Effect.cached` over these patterns:
+
- Storing a `Fiber.Fiber | undefined` with manual check-and-fork (e.g. `file/index.ts` `ensure`)
- Storing a `Promise<void>` task for deduplication (e.g. `skill/index.ts` `ensure`)
- `let cached: X | undefined` with check-and-load (races when two callers see `undefined` before either resolves)
diff --git a/packages/opencode/src/config/config.ts b/packages/opencode/src/config/config.ts
index c398d4219..645ae8814 100644
--- a/packages/opencode/src/config/config.ts
+++ b/packages/opencode/src/config/config.ts
@@ -1231,10 +1231,7 @@ export namespace Config {
if (provider && model) result.model = `${provider}/${model}`
result["$schema"] = "https://opencode.ai/config.json"
result = mergeDeep(result, rest)
- await fsNode.writeFile(
- path.join(Global.Path.config, "config.json"),
- JSON.stringify(result, null, 2),
- )
+ await fsNode.writeFile(path.join(Global.Path.config, "config.json"), JSON.stringify(result, null, 2))
await fsNode.unlink(legacy)
})
.catch(() => {}),
@@ -1244,9 +1241,7 @@ export namespace Config {
return result
})

- let cachedGlobal = yield* Effect.cached(
- loadGlobal().pipe(Effect.orElseSucceed(() => ({}) as Info)),
- )
+ let cachedGlobal = yield* Effect.cached(loadGlobal().pipe(Effect.orElseSucceed(() => ({}) as Info)))

const getGlobal = Effect.fn("Config.getGlobal")(function* () {
return yield* cachedGlobal
@@ -1440,9 +1435,7 @@ export namespace Config {
})

const waitForDependencies = Effect.fn("Config.waitForDependencies")(function* () {
- yield* InstanceState.useEffect(state, (s) =>
- Effect.promise(() => Promise.all(s.deps).then(() => undefined)),
- )
+ yield* InstanceState.useEffect(state, (s) => Effect.promise(() => Promise.all(s.deps).then(() => undefined)))
})

const update = Effect.fn("Config.update")(function* (config: Info) {
@@ -1453,9 +1446,7 @@ export namespace Config {
})

const invalidate = Effect.fn("Config.invalidate")(function* (wait?: boolean) {
- cachedGlobal = yield* Effect.cached(
- loadGlobal().pipe(Effect.orElseSucceed(() => ({}) as Info)),
- )
+ cachedGlobal = yield* Effect.cached(loadGlobal().pipe(Effect.orElseSucceed(() => ({}) as Info)))
const task = Instance.disposeAll()
.catch(() => undefined)
.finally(() =>
--
2.43.0

Original file line number Diff line number Diff line change
@@ -0,0 +1,119 @@
From 1ebc92fd36837b1e31e7dbab52f378cd62aa7157 Mon Sep 17 00:00:00 2001
From: Kit Langton <kit.langton@gmail.com>
Date: Thu, 26 Mar 2026 14:05:47 -0400
Subject: [PATCH 004/131] refactor(config): use cachedInvalidateWithTTL, bump
effect to beta.37 (#19322)

---
bun.lock | 10 +++++-----
package.json | 4 ++--
packages/opencode/src/config/config.ts | 14 +++++++++++---
3 files changed, 18 insertions(+), 10 deletions(-)

diff --git a/bun.lock b/bun.lock
index 1c122b731..605263350 100644
--- a/bun.lock
+++ b/bun.lock
@@ -599,7 +599,7 @@
},
"catalog": {
"@cloudflare/workers-types": "4.20251008.0",
- "@effect/platform-node": "4.0.0-beta.35",
+ "@effect/platform-node": "4.0.0-beta.37",
"@hono/zod-validator": "0.4.2",
"@kobalte/core": "0.13.11",
"@octokit/rest": "22.0.0",
@@ -623,7 +623,7 @@
"dompurify": "3.3.1",
"drizzle-kit": "1.0.0-beta.19-d95b7a4",
"drizzle-orm": "1.0.0-beta.19-d95b7a4",
- "effect": "4.0.0-beta.35",
+ "effect": "4.0.0-beta.37",
"fuzzysort": "3.1.0",
"hono": "4.10.7",
"hono-openapi": "1.1.2",
@@ -981,9 +981,9 @@

"@effect/language-service": ["@effect/language-service@0.79.0", "", { "bin": { "effect-language-service": "cli.js" } }, "sha512-DEmIOsg1GjjP6s9HXH1oJrW+gDmzkhVv9WOZl6to5eNyyCrjz1S2PDqQ7aYrW/HuifhfwI5Bik1pK4pj7Z+lrg=="],

- "@effect/platform-node": ["@effect/platform-node@4.0.0-beta.35", "", { "dependencies": { "@effect/platform-node-shared": "^4.0.0-beta.35", "mime": "^4.1.0", "undici": "^7.24.0" }, "peerDependencies": { "effect": "^4.0.0-beta.35", "ioredis": "^5.7.0" } }, "sha512-HPc2xZASl9F9y/xJ01bQgFD6Jf9XP4Fcv/BlVTvG0Yr/uN63lwKZYr/VXor5K5krHfBDeCBD8y7/SICPYZoq3A=="],
+ "@effect/platform-node": ["@effect/platform-node@4.0.0-beta.37", "", { "dependencies": { "@effect/platform-node-shared": "^4.0.0-beta.37", "mime": "^4.1.0", "undici": "^7.24.0" }, "peerDependencies": { "effect": "^4.0.0-beta.37", "ioredis": "^5.7.0" } }, "sha512-dCfTNYGAT+1K+nu/0jw3FL/0DJXcobZCJs9SD5XJbj1DewWPhR9/AptP6zLGj8vdP8hXem6Aa53nze3HSujW3w=="],

- "@effect/platform-node-shared": ["@effect/platform-node-shared@4.0.0-beta.35", "", { "dependencies": { "@types/ws": "^8.18.1", "ws": "^8.19.0" }, "peerDependencies": { "effect": "^4.0.0-beta.35" } }, "sha512-9bPqNV988itKJ7MQoJuzmR014DB9EZRDOnhJt/+iJlb8qLoR9HnCzNJb9gfBdYhFmVYc8DMsQxG81rdJzpv9tg=="],
+ "@effect/platform-node-shared": ["@effect/platform-node-shared@4.0.0-beta.40", "", { "dependencies": { "@types/ws": "^8.18.1", "ws": "^8.19.0" }, "peerDependencies": { "effect": "^4.0.0-beta.40" } }, "sha512-WMRVG7T8ZDALKCOacsx2ZZj3Ccaoq8YGeD9q7ZL4q8RwQv8Nmrl+4+KZl95/zHCqXzgK9oUJOlBfQ7CZr6PQOQ=="],

"@electron/asar": ["@electron/asar@3.4.1", "", { "dependencies": { "commander": "^5.0.0", "glob": "^7.1.6", "minimatch": "^3.0.4" }, "bin": { "asar": "bin/asar.js" } }, "sha512-i4/rNPRS84t0vSRa2HorerGRXWyF4vThfHesw0dmcWHp+cspK743UanA0suA5Q5y8kzY2y6YKrvbIUn69BCAiA=="],

@@ -2759,7 +2759,7 @@

"ee-first": ["ee-first@1.1.1", "", {}, "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow=="],

- "effect": ["effect@4.0.0-beta.35", "", { "dependencies": { "@standard-schema/spec": "^1.1.0", "fast-check": "^4.5.3", "find-my-way-ts": "^0.1.6", "ini": "^6.0.0", "kubernetes-types": "^1.30.0", "msgpackr": "^1.11.8", "multipasta": "^0.2.7", "toml": "^3.0.0", "uuid": "^13.0.0", "yaml": "^2.8.2" } }, "sha512-64j8dgJmoEMeq6Y3WLYcZIRqPZ5E/lqnULCf6QW5te3hQ/sa13UodWLGwBEviEqBoq72U8lArhVX+T7ntzhJGQ=="],
+ "effect": ["effect@4.0.0-beta.37", "", { "dependencies": { "@standard-schema/spec": "^1.1.0", "fast-check": "^4.5.3", "find-my-way-ts": "^0.1.6", "ini": "^6.0.0", "kubernetes-types": "^1.30.0", "msgpackr": "^1.11.8", "multipasta": "^0.2.7", "toml": "^3.0.0", "uuid": "^13.0.0", "yaml": "^2.8.2" } }, "sha512-AVMXXtb6n62W4uvo1EvT7FJ41HfDvQRX8IY2FGPvfP361dtBArKK2JtE5vmFXTsxkW90WUdvJZYpVATGIzr/BA=="],

"ejs": ["ejs@3.1.10", "", { "dependencies": { "jake": "^10.8.5" }, "bin": { "ejs": "bin/cli.js" } }, "sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA=="],

diff --git a/package.json b/package.json
index 915e2ef0a..dfc9840c2 100644
--- a/package.json
+++ b/package.json
@@ -25,7 +25,7 @@
"packages/slack"
],
"catalog": {
- "@effect/platform-node": "4.0.0-beta.35",
+ "@effect/platform-node": "4.0.0-beta.37",
"@types/bun": "1.3.11",
"@octokit/rest": "22.0.0",
"@hono/zod-validator": "0.4.2",
@@ -45,7 +45,7 @@
"dompurify": "3.3.1",
"drizzle-kit": "1.0.0-beta.19-d95b7a4",
"drizzle-orm": "1.0.0-beta.19-d95b7a4",
- "effect": "4.0.0-beta.35",
+ "effect": "4.0.0-beta.37",
"ai": "5.0.124",
"hono": "4.10.7",
"hono-openapi": "1.1.2",
diff --git a/packages/opencode/src/config/config.ts b/packages/opencode/src/config/config.ts
index 645ae8814..67f298b42 100644
--- a/packages/opencode/src/config/config.ts
+++ b/packages/opencode/src/config/config.ts
@@ -40,7 +40,7 @@ import { Lock } from "@/util/lock"
import { AppFileSystem } from "@/filesystem"
import { InstanceState } from "@/effect/instance-state"
import { makeRuntime } from "@/effect/run-service"
-import { Effect, Layer, ServiceMap } from "effect"
+import { Duration, Effect, Layer, ServiceMap } from "effect"

export namespace Config {
const ModelId = z.string().meta({ $ref: "https://models.dev/model-schema.json#/$defs/Model" })
@@ -1241,7 +1241,15 @@ export namespace Config {
return result
})

- let cachedGlobal = yield* Effect.cached(loadGlobal().pipe(Effect.orElseSucceed(() => ({}) as Info)))
+ const [cachedGlobal, invalidateGlobal] = yield* Effect.cachedInvalidateWithTTL(
+ loadGlobal().pipe(
+ Effect.tapError((error) =>
+ Effect.sync(() => log.error("failed to load global config, using defaults", { error: String(error) })),
+ ),
+ Effect.orElseSucceed((): Info => ({})),
+ ),
+ Duration.infinity,
+ )

const getGlobal = Effect.fn("Config.getGlobal")(function* () {
return yield* cachedGlobal
@@ -1446,7 +1454,7 @@ export namespace Config {
})

const invalidate = Effect.fn("Config.invalidate")(function* (wait?: boolean) {
- cachedGlobal = yield* Effect.cached(loadGlobal().pipe(Effect.orElseSucceed(() => ({}) as Info)))
+ yield* invalidateGlobal
const task = Instance.disposeAll()
.catch(() => undefined)
.finally(() =>
--
2.43.0

Loading
Loading