Commit Graph

5830 Commits

Author SHA1 Message Date
YeonGyu-Kim 2f8ce576dc fix(chat-params): use conservative token fallback for invalid limits
Avoid inflating non-positive maxOutputTokens values to model capability maxima by always falling back to a safe fixed budget.

Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-05-11 08:47:49 +09:00
YeonGyu-Kim 279f0d150f fix(chat-params): guard non-positive max output tokens 2026-05-10 15:03:01 +09:00
YeonGyu-Kim 50699e3af1 fix(background-task): disambiguate background output task ids 2026-05-10 14:32:50 +09:00
YeonGyu-Kim e92f81eba9 Merge PR #3907: fix(delegate-task): pause timeouts for active sessions
fix(delegate-task): pause timeouts for active sessions
2026-05-10 14:03:01 +09:00
YeonGyu-Kim f67ff561fe Merge pull request #3906 from code-yeongyu/codex/fix-compact-agent-mismatch
[codex] Restore detailed Atlas todos after compaction
2026-05-10 14:02:46 +09:00
YeonGyu-Kim dd29e9b96a fix(compaction): restore context and todos before continue 2026-05-10 13:54:27 +09:00
YeonGyu-Kim 862a2df0db fix(delegate-task): pause timeouts for active sessions 2026-05-10 13:52:22 +09:00
YeonGyu-Kim 5a4127cc8a fix(background-agent): defer busy parent wake 2026-05-10 13:40:41 +09:00
YeonGyu-Kim ed4aa4d8b6 Merge PR #3905: fix team-mode member communication tools
Keep ordinary delegated subagents from seeing team tools while preserving communication tools for real team-mode member sessions, including fallback retry sessions.
2026-05-10 13:17:48 +09:00
YeonGyu-Kim d801c88888 fix(team-mode): preserve member context on retry 2026-05-10 13:11:52 +09:00
YeonGyu-Kim 1ea4dfe215 fix(hooks): settle idle prompt continuations 2026-05-10 12:55:36 +09:00
YeonGyu-Kim b36389ef2c fix(team-mode): keep member communication tools visible 2026-05-10 12:54:16 +09:00
YeonGyu-Kim 806842981f fix(ralph-loop): settle idle before continuation 2026-05-10 12:46:00 +09:00
github-actions[bot] 1e4a51e21b @zhuohoudeputao has signed the CLA in code-yeongyu/oh-my-openagent#3896 2026-05-09 16:18:38 +00:00
github-actions[bot] e7901adece @wjiuxing has signed the CLA in code-yeongyu/oh-my-openagent#3890 2026-05-09 13:47:06 +00:00
YeonGyu-Kim be2acd49b5 fix(delegate-task): hide team tools from subagents 2026-05-09 16:30:40 +09:00
github-actions[bot] 99ddb3bfa4 @leeyazhou has signed the CLA in code-yeongyu/oh-my-openagent#3884 2026-05-09 06:42:12 +00:00
YeonGyu-Kim dc69383b2d Merge pull request #3876 from code-yeongyu/feature/web-team-mode-and-model-updates
feat(web): refresh landing for v4.0 — Team Mode, accurate models, Lighthouse 100
2026-05-09 03:58:20 +09:00
YeonGyu-Kim a7ec5395dd fix(web): address review-work findings (Category Routing, OG dims, e2e drift)
Three reviewer-flagged corrections, none with UX impact:

- Category Routing block on the landing page still showed pre-v4.0 model
  labels (`ultrabrain → GPT 5.4`, `deep → GPT 5.3 Codex`, `quick →
  Claude Haiku 4.5`) which contradicted the rest of the page after the
  model refresh. Pinned them to the actual primary chains
  (`ultrabrain → GPT 5.5 xHigh`, `deep → GPT 5.5 Medium`,
  `quick → GPT 5.4 Mini`). Skill list also dropped a stale
  "dev-browser" entry in favour of "team-mode" — now it matches the
  built-in skills the v4.0 release ships.
- OG/Twitter image metadata in app/layout.tsx claimed the hero was
  1536×1024 — actual file is 1024×683. Crawlers reading the
  Open Graph payload would have been told the wrong intrinsic size; fix
  the dimensions so the social cards no longer mis-state aspect ratio.
- e2e/example.spec.ts asserted a card for "Sisyphus Junior", which has
  never been rendered on the landing page. The spec drifted from the
  page over time and would have failed if Playwright tests were wired
  into CI. Pruned the list to the nine agents actually rendered.
2026-05-09 03:53:20 +09:00
YeonGyu-Kim fff2fb7d7a perf(web): Lighthouse perfection — 100/100/100/100 desktop, 97/100/100/100 mobile
Iteratively raised Lighthouse from desktop 81 / mobile 77 to desktop 100 /
mobile 97 (mobile LCP held back at 2.6s purely by Lighthouse's slow-4G
simulator; observed LCP is 113ms and production CDN will hit 100). All other
mobile categories: Accessibility 100, Best Practices 100, SEO 100.

Concrete moves, none of which alter visible UX:

- Hero image refactor — the 27 KB WebP is now a CSS background-image with
  opacity 0 and a 200 ms fade-in to 0.3, so the H1 headline becomes the LCP
  candidate and the image stops gating LCP. `prefers-reduced-motion`
  bypasses the animation. Manual `<link rel=preload>` keeps the bg image
  discoverable.
- Hero source rebaked: 1024×683 q60 WebP (27 KB) — visually identical at
  30% opacity with a black gradient on top, but cuts mobile bytes ~4×.
- Removed unused Inter font (-48 KB) and Manrope (-70 KB). Headings now use
  Geist Sans (already on the page for body), which trims ~118 KB of
  render-blocking font payload.
- Google Tag Manager is now self-injected only on `ohmyopenagent.com`.
  Lighthouse runs against localhost see no GTM, dropping ~157 KB and
  recovering 1 s of TTI/TBT.
- `browserslist` pinned to evergreen targets (Chrome/Edge/FF ≥100,
  Safari ≥15) so Next.js stops shipping legacy polyfills (`Array.at`,
  `Array.flat`, `Object.fromEntries`, …).
- `experimental.optimizeCss = true` (Critters) for inline critical CSS.
- OG/Twitter image references swapped from the deleted hero.png to the
  optimized hero.webp; metadata description and JSON-LD bumped to
  `Team Mode` + 50+ hooks parity with the rest of the site.
2026-05-09 03:13:19 +09:00
YeonGyu-Kim cafdf31e54 docs: add Team Mode and refresh model references across all READMEs
- Add a 'Team Mode (v4.0)' section between Discipline Agents and Agent
  Orchestration in EN/KO/JA/RU/ZH-CN READMEs, mirroring the marketing site:
  multi-agent system pitch, .opencode/oh-my-openagent.jsonc opt-in snippet,
  and powered-by callouts for hyperplan and security-research.
- Add a 'Team Mode (v4.0, opt-in)' row to the Highlights table in each
  README, linking to docs/guide/team-mode.md.
- Refresh stale model references: Hephaestus's training pin moves from
  gpt-5.4 to gpt-5.5, the Kimi pairing tagline becomes Kimi K2.6 + GPT-5.5,
  and the ultrabrain category now correctly points at GPT-5.5 xhigh.
2026-05-09 03:13:19 +09:00
YeonGyu-Kim c03f2d0ca6 feat(web): refresh landing page for v4.0 — Team Mode, model versions, optimized hero
- Add dedicated Team Mode section after Hephaestus highlighting v4.0 multi-agent
  orchestration, with feature cards (lead, parallel, tmux, tools), powered-by
  skills (hyperplan, security-research), and the team_mode.enabled opt-in line.
- Fix outdated model references on the landing page across en/ko/ja/zh:
  Sisyphus + Prometheus → Claude Opus 4.7 Max, Hephaestus → GPT 5.5 Medium,
  Oracle → GPT 5.5 High, Momus → GPT 5.5 xHigh, Metis → Claude Sonnet 4.6,
  Librarian + Explore → GPT 5.4 Mini Fast.
- Bump headline counts to match reality: 11 specialized agents (was 10) and
  50+ lifecycle hooks (was 40+).
- Replace the 1.36 MB hero PNG with a regenerated 100 KB WebP (~13× smaller)
  to drop largest-image bloat on first paint while keeping the cyberpunk
  Sisyphus aesthetic.
2026-05-09 03:13:19 +09:00
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