Commit Graph

5808 Commits

Author SHA1 Message Date
github-actions[bot] d8ba0d2152 @jollyxenon has signed the CLA in code-yeongyu/oh-my-openagent#3875 2026-05-08 16:41:29 +00:00
github-actions[bot] 00033d5483 @x-x-gpu has signed the CLA in code-yeongyu/oh-my-openagent#3872 2026-05-08 12:52:54 +00:00
github-actions[bot] 68b64f183d @rshks has signed the CLA in code-yeongyu/oh-my-openagent#3866 2026-05-08 12:02:03 +00:00
github-actions[bot] 0a1c69eb49 @cvqluu has signed the CLA in code-yeongyu/oh-my-openagent#3870 2026-05-08 11:45:33 +00:00
YeonGyu-Kim 85c77007f0 feat(web): add MDX components for documentation rendering 2026-05-08 17:44:40 +09:00
YeonGyu-Kim b7c7cb221d feat(delegate-task): add model string parser for variants 2026-05-08 17:44:37 +09:00
YeonGyu-Kim 8ada977b37 feat(plugin): add plugin disposal with graceful cleanup 2026-05-08 17:44:35 +09:00
YeonGyu-Kim 93169a30ef feat(delegate-task): add call ID resolution utility 2026-05-08 17:44:26 +09:00
YeonGyu-Kim 1bb36314bd feat(tmux-subagent): add event handlers for session lifecycle 2026-05-08 17:44:19 +09:00
YeonGyu-Kim 0e59f26971 Merge pull request #3865 from code-yeongyu/fix/manifesto-domain
docs(manifesto): canonical domain is ohmyopenagent.com (no dashes)
2026-05-08 17:39:26 +09:00
YeonGyu-Kim 4181993324 docs(manifesto): use ohmyopenagent.com (no dashes) for the project domain
The manifesto's project-context block carried the typo `oh-my-openagent.com`.
The actual canonical domain has no dashes:

- DNS: `ohmyopenagent.com` resolves (Cloudflare).
- DNS: `oh-my-openagent.com` does not resolve.
- web/wrangler.toml routes ohmyopenagent.com + ohmyopencode.org.
- web/middleware.ts redirects ohmyopencode.org -> ohmyopenagent.com.

Same fix for the legacy alias (ohmyopencode.org, also no dashes) plus an
explicit note that the legacy host 308-redirects to the canonical one so
nobody pastes the dashed form anywhere.

The project-context block had been sitting as a stale local working-tree
edit from earlier audit work and never landed on dev. Promoting it as a
clean commit so the manifesto carries the same project-context summary
the README does.
2026-05-08 17:34:04 +09:00
YeonGyu-Kim 41d152c27e Merge pull request #3864 from code-yeongyu/fix/docs-correct-urls
fix(docs): schema URL is oh-my-opencode.schema.json (file never renamed)
2026-05-08 17:16:15 +09:00
YeonGyu-Kim 1aeb2fd274 Merge pull request #3862 from code-yeongyu/codex/cpu-usage-optimization
[codex] perf(plugin): trim cold init CPU overhead
2026-05-08 17:11:54 +09:00
YeonGyu-Kim 268ee57c04 fix(docs): revert wrong schema URL canonicalization (file is oh-my-opencode.schema.json)
In #3859 I bulk-replaced `oh-my-opencode.schema.json` ->
`oh-my-openagent.schema.json` across docs/, on the false assumption
that the schema file had been renamed alongside the package.

It hadn't. Repo state on dev:

- assets/oh-my-opencode.schema.json (only file present)
- package.json export `./schema.json` -> `./dist/oh-my-opencode.schema.json`
- script/build-schema.ts emits the same legacy basename
- root AGENTS.md line 135 documents the same legacy URL

So every doc that pointed at `oh-my-openagent.schema.json` was
returning HTTP 404 for any user copying the example into their config.

Verified live:

  https://raw.githubusercontent.com/code-yeongyu/oh-my-openagent/dev/assets/oh-my-openagent.schema.json -> 404
  https://raw.githubusercontent.com/code-yeongyu/oh-my-openagent/dev/assets/oh-my-opencode.schema.json -> 200

Files reverted to canonical legacy URL:

- docs/examples/{coding,default,planning}-focused.jsonc
- docs/guide/{overview,installation,agent-model-matching}.md
- docs/reference/configuration.md (2 occurrences)
2026-05-08 17:10:53 +09:00
YeonGyu-Kim b405fc76f5 Merge pull request #3861 from code-yeongyu/fix/web-docs-marked-no-eval
fix(web): swap next-mdx-remote for marked to dodge CF Workers eval ban
2026-05-08 17:03:17 +09:00
YeonGyu-Kim 2efe8a80d4 test(index): stabilize openclaw bootstrap smoke test 2026-05-08 16:58:50 +09:00
YeonGyu-Kim 5cf86234ff perf(skill): reuse precomputed command list 2026-05-08 16:58:50 +09:00
YeonGyu-Kim 8eadf2056f perf(shared): avoid spawning opencode for version checks 2026-05-08 16:58:50 +09:00
YeonGyu-Kim 9848803f4f fix(web): replace next-mdx-remote with marked + raw HTML to avoid CF Workers eval ban
The /docs deploy from #3860 still returned HTTP 500 with
`EvalError: Code generation from strings disallowed for this context`
(captured via `wrangler tail`).

`next-mdx-remote/rsc` compiles MDX to JSX *at runtime* using
`new Function()` style code generation. Cloudflare Workers' security
sandbox bans all dynamic code generation from strings, even from inside
trusted code, so any worker invocation that touched the docs page
threw immediately.

Switch to a build-time markdown -> HTML pipeline:

- Drop `next-mdx-remote` and `gray-matter`. Add `marked` (pure-JS,
  no eval).
- `web/scripts/generate-docs-content.mjs` now runs each markdown
  source through `marked.parse()` (gfm enabled) at build time and
  writes the resulting HTML strings into
  `web/lib/docs-content.generated.ts`.
- `web/app/[locale]/docs/page.tsx` renders each section as
  `<article className="docs-content" dangerouslySetInnerHTML={{ __html: section.html }} />`.
  No MDX runtime, no JSX compilation at request time, just static HTML
  injection.
- `web/app/globals.css` adds a `@layer components` block targeting
  `.docs-content h1..h4, p, a, ul, ol, li, blockquote, code, pre, table,
  thead, th, td, hr, strong`. Same shadcn-themed look that the dropped
  `mdx-components.tsx` provided, applied via CSS instead of React
  component overrides.
- `web/components/docs/mdx-components.tsx` removed.

We lose MDX features (JSX inside markdown), but the docs are pure
markdown anyway. `docs/` remains the SoT; the marketing site renders
identical content with no eval and no fs at runtime.
2026-05-08 16:57:28 +09:00
YeonGyu-Kim 222f5d07df Merge pull request #3860 from code-yeongyu/fix/web-docs-bundle-at-build
fix(web): bundle docs at build time, worker has no fs to call
2026-05-08 16:51:05 +09:00
YeonGyu-Kim c01a89ba43 feat(atlas): mandate parallel delegation and add per-model variants
Atlas was delegating tasks one-by-one because the workflow framed parallel
as a conditional ("if tasks can run in parallel..."), letting models default
to the safer sequential path. The new shared ATLAS_PARALLEL_BY_DEFAULT block
flips the default: parallel is mandatory; sequential requires a NAMED
blocking dependency (input dependency or file conflict).

Adds two new prompt variants — kimi (K2.6 thinking-mode calibration:
commitment framing + concrete budgets) and opus-4-7 (counters 4.7's lower
default subagent count and literal-following bias). Recalibrates default
(Claude 4.6 family), gpt (GPT-5.5 outcome-first / decision rules over
absolutes), and gemini (preserves TOOL_CALL_MANDATE; replaces stale
session_id with task_id). All five variants share the parallel mandate
positioned BEFORE the workflow so "mandate above" references resolve.

Strengthens the orchestrator-direct-edit reminder hooks
(ORCHESTRATOR_DELEGATION_REQUIRED + DIRECT_WORK_REMINDER) with the central
challenge "Do you ACTUALLY need to be the one doing this?" — replacing the
previous bullet-heavy framing.

Tests now parametrized over all 5 variants. Adds prompt-routing.test
covering GPT/Gemini/Kimi/Opus 4.7/default routing and edge cases, plus a
session_id rejection test (every variant must use task_id for retries).
2026-05-08 16:50:41 +09:00
YeonGyu-Kim 65fc0d9434 ci: generate docs content before web checks; bun prepare hook for local dev
The first build of #3860 failed at type-check because the generated
`lib/docs-content.generated.ts` is gitignored (regenerated on every
build) and CI's `type-check` step runs before `build`. Two fixes:

- web-ci.yml: explicit `Generate docs content from repo-root docs/`
  step right after `bun install` so format-check, lint, and type-check
  all see the file.
- web/package.json: add `prepare` lifecycle script. `bun install`
  invokes it automatically, so a fresh local checkout boots into a
  working state too.

Build still re-runs the generator via prebuild, so docs/ edits land in
the bundle without an explicit dev action.
2026-05-08 16:46:05 +09:00
YeonGyu-Kim 57b9d42537 fix(web): bundle docs sources at build time so the worker has no fs
The worker deploy from #3859 returned HTTP 500 on /docs with
`Error: [unenv] fs.readFile is not implemented yet!` (captured via
`wrangler tail`). `loadDocSource` was calling `node:fs/promises`
`readFile` inside an RSC; even though the page is generated as SSG
(`●`), Cloudflare Workers' unenv shim does not implement filesystem
reads, so any code path that reaches the worker (cache miss, prerender
fallback) fails.

Move the read to a prebuild step that emits a TypeScript module:

- `web/scripts/generate-docs-content.mjs` reads each section's source
  from `<repo-root>/docs/` and writes
  `web/lib/docs-content.generated.ts` containing
  `export const DOC_SOURCES: Record<string, string>`.
- `web/scripts/prepare-build.mjs` invokes the generator after the
  cache prune, so every `bun run build` and `bunx opennextjs-cloudflare
  build` regenerates the constant module from the live `docs/`.
- `web/lib/docs-source.ts` now reads `DOC_SOURCES[file]` synchronously
  with no Node I/O.
- `web/app/[locale]/docs/page.tsx` drops the `Promise.all` since reads
  are synchronous.
- `web/.gitignore` excludes the generated file (kept generated, not
  source-of-truth).

Effect: the bundle ships every doc as a string literal. The worker has
no `fs.readFile` call to fail. `docs/` remains the only place an
editor needs to touch.
2026-05-08 16:38:14 +09:00
YeonGyu-Kim 770825422d Merge pull request #3859 from code-yeongyu/feat/web-mdx-docs-sot
feat(web): unify docs SoT in repo-root docs/, render via build-time MDX
2026-05-08 16:31:17 +09:00
YeonGyu-Kim 70be16dd6b docs(agent-model-matching): Hephaestus chain is gpt-5.5 only
Hephaestus's fallbackChain in src/shared/model-requirements.ts has a
single entry: gpt-5.5. The previous wording said "GPT-5.4/5.5" which
implied either was acceptable; only gpt-5.5 is. Note OpenAI API access
as an alternative to ChatGPT Plus/Pro for clarity.
2026-05-08 16:23:54 +09:00
YeonGyu-Kim 46683d7e4b Merge branch 'dev' into feat/web-mdx-docs-sot
Resolves conflicts after #3858 (configurable agent ordering) merged
into dev:

- docs/reference/configuration.md: take dev's reorganized + expanded
  reference (1040 lines covering the new agent ordering config) over
  this branch's earlier trim. Re-apply this branch's schema URL
  canonicalization (`oh-my-opencode.schema.json` -> `oh-my-openagent.schema.json`).
- docs/reference/features.md: auto-merged cleanly.
2026-05-08 16:22:34 +09:00
YeonGyu-Kim aadcbbfcc6 chore(workflows): trigger web CI + deploy on docs/ changes
Now that docs/ is the single source of truth that the marketing site
renders at build time, edits to those files must run web CI and trigger
the Cloudflare deploy. Add `docs/**` to the paths filter in both
web-ci.yml and web-deploy.yml.

A markdown-only fix in docs/ is now sufficient to redeploy
oh-my-openagent.com — no companion web/ change needed.
2026-05-08 16:15:54 +09:00
YeonGyu-Kim e5369f3a63 feat(web): render docs from repo-root docs/ as MDX SoT at build time
Replace the bespoke 16-section /docs page that pulled prose from
`messages/{locale}.json` with a build-time MDX renderer that reads the
canonical markdown in repo-root `docs/`. Each markdown file becomes
one section of the docs page, scrolled-to via the existing DocsShell
sidebar. Section data structure stays in `lib/docs-sections.ts` so the
sidebar / scroll-spy keeps working with no client changes.

Why this layout:

- One source of truth: `docs/guide/*.md`, `docs/reference/*.md`,
  `docs/manifesto.md`. Edits land in one place; the website redeploys
  pick them up automatically via the existing web-deploy workflow.
- Build-time only: `MDXRemote` is rendered inside an RSC and the page
  is statically generated (`●` SSG). Cloudflare Workers serves the
  rendered HTML; no MDX compiler runs at request time.
- next-intl unchanged for everything else: only the docs prose moves
  out. `mobileHeader` and `searchPlaceholder` strings stay in
  `messages/{locale}.json`; the 18 stale section keys are removed.

Files:

- web/lib/docs-sections.ts: 9 sections matching docs/ files, typed
  `DocSection` with `{ id, title, file }`.
- web/lib/docs-source.ts: `loadDocSource(file)` reads
  `<repo-root>/docs/<file>` at build time via `node:fs/promises`.
- web/components/docs/mdx-components.tsx: shadcn-styled overrides for
  every markdown element (h1-h4, p, a, ul/ol/li, blockquote, code, pre,
  table, hr, strong) so the rendered output matches the rest of the
  site.
- web/app/[locale]/docs/page.tsx: rewritten as an async RSC that loads
  every section's source in parallel and renders one MDXRemote per
  section inside DocsShell.
- web/messages/{en,ja,ko,zh}.json: `docs` key trimmed from 20 entries
  to 2 (mobileHeader, searchPlaceholder).
- web/package.json: + next-mdx-remote, + gray-matter.

Local verification: `bun run format:check`, `bun run lint`,
`bun run type-check`, `bun run build`, `bunx opennextjs-cloudflare
build` all pass; `/[locale]/docs` builds as static for all 4 locales
at 4.12 kB / 132 kB First Load.
2026-05-08 16:14:55 +09:00
YeonGyu-Kim 36867d46f3 Merge pull request #3858 from code-yeongyu/feature/configurable-agent-ordering
feat(config): add configurable agent ordering
2026-05-08 16:14:48 +09:00
YeonGyu-Kim 810e3c7a51 docs: refresh user-facing guide + reference for current code state
Audit pass against root AGENTS.md (regenerated 2026-05-08) and the
canonical sources in src/shared/model-requirements.ts,
src/features/team-mode/, src/cli/, src/config/schema/. Each touched file
keeps its existing tone but corrects stale facts:

- guide/overview.md: project name + dual-package transition reality
- guide/installation.md: bun-only invocation, dual oh-my-openagent /
  oh-my-opencode CLI surface, current doctor categories
- guide/orchestration.md: 11 agents, category routing through
  sisyphus-junior, background concurrency, team-mode link
- guide/agent-model-matching.md: Metis primary -> claude-sonnet-4-6
  (matches src/shared/model-requirements.ts fallback chain)
- guide/team-mode.md: full schema, member eligibility tiers, 12 team_*
  tools added when enabled
- reference/cli.md: trim to current Commander surface (install, doctor,
  run, mcp-oauth, refresh-model-capabilities, get-local-version)
- reference/configuration.md: trim to schema-driven reference, JSONC
  rules, multi-level merge order, mcp_env_allowlist user-only constraint
- reference/features.md: 5-tier hook composition counts, 3-tier MCPs,
  hashline edit, IntentGate, OpenClaw bidirectional dispatcher

Cross-cutting: every `oh-my-opencode.schema.json` URL replaced with
the canonical `oh-my-openagent.schema.json` (legacy package name in
text bodies preserved where it documents the dual-publish transition).
2026-05-08 16:14:30 +09:00
YeonGyu-Kim 3a738e7047 Merge remote-tracking branch 'origin/dev' into feature/configurable-agent-ordering 2026-05-08 16:08:26 +09:00
YeonGyu-Kim 9522dd4ca4 feat(config): add configurable agent ordering 2026-05-08 16:08:18 +09:00
YeonGyu-Kim 457836b965 Merge pull request #3857 from code-yeongyu/fix/web-next15-runtime
fix(web): downgrade Next.js 16.2.6 -> 15.5.18 to unblock Cloudflare deploy
2026-05-08 15:31:01 +09:00
YeonGyu-Kim e02166d6b7 fix(web): downgrade Next.js 16.2.6 -> 15.5.18 to unblock Cloudflare deploy
The first auto-deploy from PR #3855 returned HTTP 500 on every page
with the runtime error `TypeError: components.ComponentMod.handler is
not a function`. Captured via `wrangler tail`.

Root cause: Next.js 16.2.6 was published 2026-05-07 19:01 UTC, *after*
@opennextjs/cloudflare 1.19.8 was published earlier the same day at
11:33 UTC. OpenNext 1.19.8's peerDependency declares
`next: '>=15.5.16 <16 || >=16.2.5'` — 16.2.6 falls inside the range
syntactically, but the route component module export shape changed in
that patch and OpenNext has not caught up yet.

Pin Next + eslint-config-next to 15.5.18 (latest 15.x LTS, the other
half of OpenNext's supported range). Revert the migration-only changes
that came with the 16 bump:

- eslint.config.mjs: `nextPlugin.configs["core-web-vitals"]` (v16
  shape) -> `nextPlugin.flatConfig.coreWebVitals` (v15 shape).
- tsconfig.json: `jsx: "react-jsx"` -> `jsx: "preserve"` (Next 15
  default).
- tsconfig.json: add `noUncheckedSideEffectImports: false` because
  TypeScript 6 enabled this option under `strict` and Next 15's
  bundled types do not declare ambient CSS modules (Next 16 does).

All other web/ deps stay at latest. lucide-react remains pinned at
0.577.0 from #3853 for the same brand-icon reason. Re-evaluate Next 16
when @opennextjs/cloudflare ships a release explicitly tested against
\>= 16.2.6.
2026-05-08 15:25:51 +09:00
YeonGyu-Kim 3134d9d6e1 Merge pull request #3854 from code-yeongyu/fix/team-mode-fsync-eperm
fix: tolerate EPERM during fsync on synced folders (iCloud, OneDrive, Desktop sync)
2026-05-08 15:17:54 +09:00
YeonGyu-Kim 43b0529557 feat(hooks): surface fsync-skip warnings to AI agent via tool output
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-05-08 15:08:34 +09:00
YeonGyu-Kim 6b69505940 feat(shared): wire tolerantFsync to record skips with path classification
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-05-08 15:08:19 +09:00
YeonGyu-Kim 20ae3f8ba5 feat(shared): add fsync-skip tracker and path-environment classifier
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-05-08 15:08:05 +09:00
YeonGyu-Kim 5d8d2b6a82 Merge pull request #3855 from code-yeongyu/chore/web-deploy-on-dev
chore(workflows): trigger web-deploy on dev push
2026-05-08 15:06:09 +09:00
YeonGyu-Kim 7fe197d8f1 chore(workflows): trigger web-deploy on dev push too
PRs land on `dev` (master is blocked by `block-master-pr`), but the
deploy workflow only listened to `master` pushes — so #3853's web/
dependency bumps merged to dev with no Cloudflare deployment ever
running.

Add `dev` to the push branches list. The existing `paths` filter
keeps the deploy from firing on non-web changes, and `workflow_dispatch`
is preserved as the manual fallback.
2026-05-08 14:57:58 +09:00
YeonGyu-Kim 8667d7e5b8 Merge pull request #3853 from code-yeongyu/chore/web-bump-deps
chore(web): bump every dependency to latest
2026-05-08 14:51:08 +09:00
YeonGyu-Kim 81a1f6668f fix(web): truly pin lucide-react at 0.577.0
"lucide-react": "0" is npm shorthand for >=0.0.0 <1.0.0, so the
dependency was still floating across all 0.x releases. A future
lockfile refresh could pull a newer 0.x that quietly changes brand-icon
inventory.

Pin exact 0.577.0 (no caret) so the lockfile cannot drift until we
explicitly migrate to a brand-icon library compatible with lucide-react
v1.x (which removed Github, X, etc.).

Identified by cubic.
2026-05-08 14:44:29 +09:00
YeonGyu-Kim 7735b2abd5 fix(shared): tolerate EPERM during fsync in writeFileAtomically
Replaces fsyncSync(tempFileDescriptor) with tolerantFsyncSync, allowing
EPERM/EACCES/ENOTSUP/EINVAL during fsync while still propagating real
errors. Adds an optional deps.fsyncSync injection point used solely by
the new EPERM tolerance regression tests.

Without this fix, plugin startup itself can fail on synced folders
because writeFileAtomically is used by config migrations and posthog
activity state — the same EPERM-on-fsync failure pattern reported for
team_create.
2026-05-08 14:09:17 +09:00
YeonGyu-Kim c69d6bd964 fix(team-mode): tolerate EPERM during fsync in atomicWrite and acquireLock
Replaces direct fileHandle.sync() calls in acquireLock and atomicWrite
with tolerantFsync. Users on iCloud Drive / OneDrive / Desktop sync
folders were hitting 'EPERM: operation not permitted, fsync' during
team_create, which propagated up and aborted the entire team_create
flow even though the actual write+rename had succeeded.

Reported on Discord (omo 4.0.0, opencode desktop 1.14.41, project on
synced Desktop). atomicity is preserved by the temp-file rename; only
the durability hint is now best-effort on filesystems that disallow
fsync.
2026-05-08 14:09:16 +09:00
YeonGyu-Kim 9d83255426 feat(shared): add tolerant-fsync utility for synced-folder filesystems
Adds isToleratedFsyncError, tolerantFsync (async, FileHandle), and
tolerantFsyncSync (sync, fd) helpers that swallow filesystem-limitation
errors during fsync (EPERM, EACCES, ENOTSUP, EINVAL) while still
propagating real errors (EIO, ENOSPC, EBADF, etc.). Synced folders
like iCloud Drive, OneDrive, and antivirus-locked files reject fsync
with EPERM even though the underlying write+rename succeeded; for the
runtime data this codebase persists, losing the durability hint is
acceptable in exchange for not blocking the operation entirely.

The helper is intentionally not barrel-exported (consumers import the
file directly), matching the existing convention for write-file-atomically.
2026-05-08 14:09:16 +09:00
YeonGyu-Kim dff2acf38a chore(web): apply prettier 3.8 + Next 16 tsconfig auto-formatting
Side effects from `bun run format` (prettier 3.8) and `bun run build`
(Next 16) that I missed in the prior commit:

- web/components/ui/badge.tsx, web/components/ui/button.tsx: prettier 3.8
  inlines short interface `extends` lists onto a single line.
- web/tsconfig.json: Next 16's build step auto-modernizes tsconfig:
  `jsx: "preserve"` → `jsx: "react-jsx"` and reformats `lib`/`paths`
  arrays to multi-line. Build is identical either way; committing the
  modernized shape so subsequent `next build` runs do not produce
  spurious diffs.
2026-05-08 14:09:14 +09:00
YeonGyu-Kim e5eda117be chore(web): bump every dependency to latest
Bumped via `bun update --latest` then resolved breakage from two
major-version jumps:

1. Next.js 15.5 → 16.2 + @next/eslint-plugin-next 16: dropped the
   `flatConfig` namespace. Updated web/eslint.config.mjs to use
   `nextPlugin.configs["core-web-vitals"]` per the new export shape.

2. lucide-react 0.553 → 1.x: lucide upstream removed all brand icons
   (Github, etc.) — they are now expected to come from a separate brand
   icon library. Pinned lucide-react at the last 0.x (0.577.0) for now;
   migrating to a brand-icon library is tracked as a follow-up.

All other deps to latest:
- react/react-dom 19.2.4 → 19.2.6
- next-intl 4.8 → 4.11
- motion 12.35 → 12.38
- tailwind-merge 3.4 → 3.5
- geist 1.5 → 1.7
- @radix-ui/* unchanged (already latest within their ranges)
- @opennextjs/cloudflare 1.17 → 1.19.8
- @playwright/test 1.56 → 1.59
- @tailwindcss/postcss + tailwindcss 4.1 → 4.2.4
- @types/node 22 → 25.6
- @types/react 19 → 19.2.14
- eslint 9 → 10.3 (works because we now reference @next/eslint-plugin-next
  configs directly, not eslint-config-next)
- eslint-plugin-prettier 5.5.4 → 5.5.5
- globals 16 → 17.6
- postcss 8.5.6 → 8.5.14
- prettier 3.6.2 → 3.8.3 (no formatting changes detected by --check)
- prettier-plugin-tailwindcss 0.6 → 0.8
- typescript 5.9.3 → 6.0.3
- typescript-eslint 8.56 → 8.59
- wrangler 4.71 → 4.90

Verified locally:
- bun install --frozen-lockfile: 685 packages, no errors
- bun run format:check: pass (no diffs after `bun run format`)
- bun run lint: pass
- bun run type-check: pass (TypeScript 6 + @types/node 25)
- bun run build: pass (Next 16 build, 21 static pages, all 4 locales)
- bunx opennextjs-cloudflare build: pass (.open-next/worker.js produced)

Note: Next 16 `build` log relabels the Middleware row to "Proxy
(Middleware)" — purely cosmetic, no behavior change.
2026-05-08 14:06:25 +09:00
YeonGyu-Kim 172976c183 Merge pull request #3852 from code-yeongyu/feature/add-web-frontend
feat(web): import marketing site + add CI/deploy workflows
2026-05-08 13:57:40 +09:00
YeonGyu-Kim f7d16c5a99 fix(web): actually ignore .wrangler/ as web/AGENTS.md claims
Code-quality review flagged that web/AGENTS.md ANTI-PATTERNS section
asserts `.wrangler/` is gitignored, but the rule was missing from
web/.gitignore. Adding the rule alongside the other Cloudflare/Next
build-output rules so the doc and the file agree.
2026-05-08 13:52:33 +09:00
YeonGyu-Kim 39cf5a89bf fix(test): update model-fallback snapshots after metis switch to claude-sonnet-4-6
Commit 2dfa6336f changed Metis primary model from claude-opus-4-7 max
to claude-sonnet-4-6 in src/shared/model-requirements.ts but only
updated the unit test in model-requirements.test.ts. The CLI installer
end-to-end snapshot test (src/cli/model-fallback.test.ts) generates
configs from those same fallback chains via generateModelConfig and
captures them as snapshots, so 17 snapshot assertions broke.

Snapshots regenerated with `bun test src/cli/model-fallback.test.ts -u`.
Verified 86/86 pass across model-requirements + model-fallback +
openai-only-model-catalog test files.

The change is a no-op for the web import that this PR is primarily
about — including it here to unblock CI on dev (where the breakage
landed) rather than spinning up a separate hotfix PR.
2026-05-08 13:41:14 +09:00