Commit Graph

5677 Commits

Author SHA1 Message Date
YeonGyu-Kim b0c7c9f0cd Merge pull request #3811 from code-yeongyu/feat/readme-dori-image-update-v2
docs(readme): replace dated star-count copy in banner with timeless site catchphrases
2026-05-06 16:39:19 +09:00
YeonGyu-Kim abba70cb1e Merge pull request #3691 from islee23520/chore/gpt-5.5-followup-cleanup
docs: align GPT-5.5 model references
2026-05-06 16:39:03 +09:00
YeonGyu-Kim 4deecdf99d Merge pull request #3358 from lrq3000/patch-1
docs(install): Update installation commands for humans in documentation to oh-my-openagent
2026-05-06 16:37:04 +09:00
YeonGyu-Kim 5624393367 Merge pull request #3783 from matchai/feat/walk-up-config-discovery
feat(config): walk up directory tree to merge ancestor plugin configs
2026-05-06 16:37:01 +09:00
YeonGyu-Kim c04f77237b docs(readme): replace dated star-count copy in banner with timeless site catchphrases
The previous banner ('Meet Dori. He ships to 56k stars.' + 'The first AI
agent maintainer of a 56k-star repo.') hard-coded the star count into the
image, which dates instantly as the repo grows.

Regenerate the banner to use only the timeless catchphrases that appear on
sisyphuslabs.ai/en:
- Headline: 'Meet Dori. / Not a demo. / Subscribes to everything.'
- Tagline: 'Just tell him what to do.'

Same SISYPHUS LABS wordmark, greek-column motif, @dori chat mockup, and
Merged badge. No star references anywhere in the image.

- Refresh README alt text to match the new banner copy.
- Bump cache-bust query (?v=3 -> ?v=4) so existing readers re-fetch.
- Apply consistently across all five language READMEs (en/ko/ja/ru/zh-cn).
2026-05-06 16:34:16 +09:00
YeonGyu-Kim 2bdd9121ba docs(install): extend rebrand to all bunx/npx oh-my-* commands for consistency
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-05-06 16:33:38 +09:00
ilseob lee 766cdaf893 docs: align GPT-5.5 model references 2026-05-06 16:33:07 +09:00
YeonGyu-Kim 3aa6ff9005 Merge pull request #3741 from hashen10/patch-1
fix: update bug report template for openagent
2026-05-06 16:31:36 +09:00
Stephen Karl Larroque f940cb433a docs(install): Update installation commands for humans in documentation to oh-my-openagent
Previously was oh-my-opencode, rebranded to oh-my-openagent
2026-05-06 16:30:05 +09:00
Matan Kushner 13c70cff12 docs(config): document hierarchical config discovery
Update the README quick-overview bullet and the dedicated File Locations
section in docs/reference/configuration.md to describe the walk-up
behaviour added in #417: configs under `.opencode/` are discovered by
walking from the working directory up to $HOME, with closer configs
winning.

Includes a hierarchical example (`~/.config/opencode/` global,
`~/work/.opencode/` work overrides, repo-specific overrides under that)
and a security note explaining why `mcp_env_allowlist` remains
extensible only from the canonical user config.
2026-05-06 16:29:06 +09:00
Matan Kushner eb1e104742 refactor(config): tighten walk-up config discovery from oracle review
Stop the walk at the start directory when it sits outside $HOME so the
walker never falls through to filesystem root. Without this guard a
project at /tmp/x or /opt/projects/foo would surface unrelated configs
in /tmp, /opt, or / itself.

Also clean up reviewer-flagged friction:

- Rename ancestor path/override variables to *NearestFirst /
  *FarthestFirst so the merge order is self-documenting and the
  mid-flight `.slice().reverse()` is no longer surprising.
- Rename `migrateLegacyAndResolveCanonicalPath` to
  `resolveConfigPathAfterLegacyMigration` to reflect that the helper
  returns the path to load, which may still be the legacy path when
  migration could not run.
- Replace `Object.assign({}, ...overrides)` with a named accumulator
  loop so the closer-wins ordering is obvious from the code instead of
  relying on a comment.

Tests added:

- start directory outside $HOME does not walk above itself
- multi-ancestor git_master merge order (closer wins, distant fields
  still flow through)
- agent_definitions in an ancestor resolves against that ancestor's own
  .opencode/ base path, not the start directory's
2026-05-06 16:29:06 +09:00
Matan Kushner cc1d9cf030 feat(config): walk up directory tree to merge ancestor plugin configs
Closes #417.

The user config (`~/.config/opencode/oh-my-openagent.json[c]`) is no
longer the only level above the project. `loadPluginConfig` now walks
from the working directory up to `$HOME` (inclusive), collecting every
`.opencode/oh-my-openagent.json[c]` it finds along the way. Configs
closer to the working directory override configs farther up, allowing
per-tree setups like:

    ~/work/.opencode/oh-my-openagent.json     # work credentials
    ~/dev/.opencode/oh-my-openagent.json      # personal credentials
    ~/.config/opencode/oh-my-openagent.json   # global fallback

This subsumes the previous single project-config load: the project's
own config is just the closest hit of the walk. `agent_definitions`
relative paths resolve against each ancestor's own `.opencode/` base,
`git_master` overrides accumulate across the walk (closer wins), and
legacy basenames are migrated wherever they appear.

`mcp_env_allowlist` is intentionally NOT extensible from walked
ancestors. It remains user-only as a security boundary so a malicious
or untrusted parent directory cannot extend the env var allowlist used
during ${VAR} expansion in `.mcp.json` files. The existing test that
pins this behaviour is extended to cover the multi-ancestor case.

`os.homedir()` caches in Bun, so the stop directory is resolved by
reading `process.env.HOME` directly. Production behaviour is unchanged
because the OS sets HOME at startup; tests can now redirect the walk
boundary by setting HOME to a temp directory before each call.
2026-05-06 16:28:11 +09:00
YeonGyu-Kim 47b5c56660 fix(ralph-loop): retry runtime errors immediately
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-05-06 16:27:45 +09:00
YeonGyu-Kim 3bf0b897c7 Merge pull request #3809 from code-yeongyu/feat/readme-dori-image-update
docs(readme): update Sisyphus Labs banner to new Dori branding
2026-05-06 16:24:35 +09:00
YeonGyu-Kim a0be4963b6 docs(readme): update Sisyphus Labs banner to new Dori branding
The banner now reflects sisyphuslabs.ai/en's current 'Meet Dori' identity
(headline 'Meet Dori. He ships to 56k stars.' + tagline 'The first AI agent
maintainer of a 56k-star repo.') instead of the older 'Sisyphus is the agent
that codes like your team.' visual, which no longer matches the live site.

- Regenerate .github/assets/sisyphuslabs.png with the new Dori-themed hero
  (Sisyphus Labs wordmark, Greek-column motif, @dori chat mockup, Merged badge).
- Refresh alt text to describe the new banner.
- Bump cache-bust query (?v=2 -> ?v=3) so existing readers re-fetch the asset.
- Apply consistently across all five language READMEs (en/ko/ja/ru/zh-cn).
2026-05-06 16:01:15 +09:00
YeonGyu-Kim 53fc2a5791 fix(bug-report): keep required: true for latest version checkbox 2026-05-06 15:55:06 +09:00
Hashen fe0fcd5654 Update bug report template for openagent 2026-05-06 15:54:21 +09:00
Matan Kushner 01c8a2a927 feat(shared): add findProjectOpencodePluginConfigFiles walker
Walks up the directory tree from a start directory looking for
.opencode/oh-my-openagent.json[c] (or legacy basename) files. Returns
detected paths in nearest-first order, optionally stopping at a
caller-provided directory.

Reuses detectPluginConfigFile so canonical/legacy basename detection,
caching, and JSONC vs JSON precedence stay consistent with existing
config loading. Foundation for #417 hierarchical config discovery.
2026-05-06 15:53:53 +09:00
YeonGyu-Kim 44216a538e Merge pull request #3578 from xiaolai/fix/nlpm-agents-missing-frontmatter
docs(agents): add YAML frontmatter to AGENTS.md documentation files
2026-05-06 15:44:57 +09:00
YeonGyu-Kim 3749656a2b Merge pull request #3784 from matchai/chore/remove-redundant-env-restore
test: remove redundant local env restoration
2026-05-06 15:44:54 +09:00
YeonGyu-Kim 9e4a621fdb Merge pull request #3008 from YanzheL/fix/configuration-schema-issues
docs(configuration): fix invalid JSON examples and schema issues
2026-05-06 15:42:19 +09:00
YeonGyu-Kim 573a53019f Merge pull request #3006 from YanzheL/docs/fix-sisyphus-tasks-config-reference
docs: fix Sisyphus Tasks config reference to match actual schema
2026-05-06 15:41:48 +09:00
YeonGyu-Kim 227c114949 Merge pull request #3044 from haimingZZ/docs/fix-install-guide-link
docs: fix install guide model-matching link
2026-05-06 15:41:44 +09:00
YeonGyu-Kim 17f51acd0a Merge pull request #3009 from YanzheL/fix/ollama-ndjson-markup
docs(ollama): fix NDJSON code block language identifier
2026-05-06 15:41:41 +09:00
YeonGyu-Kim 3dd125450d Merge pull request #3007 from YanzheL/fix/example-schema-urls
docs(examples): fix schema URLs to use oh-my-openagent
2026-05-06 15:39:25 +09:00
YeonGyu-Kim cedcd2d879 Merge pull request #3808 from code-yeongyu/feat/team-mode
docs(readme): add Vercel to adopters list
2026-05-06 15:25:22 +09:00
YeonGyu-Kim 35426eb2ff docs(readme): add Vercel to adopters list across all languages 2026-05-06 15:25:02 +09:00
YeonGyu-Kim cf3e05c904 Merge pull request #3807 from code-yeongyu/feat/team-mode
docs(readme): rebrand Sisyphus Labs banner to Dori across all languages
2026-05-06 15:08:28 +09:00
YeonGyu-Kim 44de4c531b docs(readme): rebrand Sisyphus Labs banner to Dori across all languages 2026-05-06 15:07:41 +09:00
YeonGyu-Kim 612680a82c Merge pull request #3493 from code-yeongyu/feat/team-mode
feat(team-mode): Claude Code Agent Teams parity (OFF by default, 12 team_* tools)
2026-05-06 14:49:32 +09:00
YeonGyu-Kim 8bcd236b14 docs(readme): align English banner wording with Korean source of truth 2026-05-06 14:49:20 +09:00
YeonGyu-Kim 4e5980d7a9 fix(tmux): avoid Bun global in runner bundle
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-05-06 14:30:29 +09:00
YeonGyu-Kim 8003d1a147 test(ci): isolate stateful tests in CI runner
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-05-06 14:20:50 +09:00
YeonGyu-Kim 786b06518a test(background-task): mock notification shell chain
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-05-06 14:20:50 +09:00
YeonGyu-Kim 2fd6be06c2 test(cli): update model fallback snapshots
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-05-06 14:20:50 +09:00
YeonGyu-Kim 2d37df48c1 refactor(team-mode): use dedicated focus and grid windows for team layout
Replace in-window pane splitting with two purpose-built windows
(focus: main-vertical, grid: tiled) created off the target session,
so leader pane is never disturbed and layouts no longer collapse
under teammate count.

🤖 Generated with assistance of [OhMyOpenCode](https://github.com/code-yeongyu/oh-my-opencode)
2026-05-06 14:20:50 +09:00
YeonGyu-Kim 503df29195 fix(team-mode): register spawned sessions early 2026-05-06 14:20:50 +09:00
YeonGyu-Kim cb819307ff fix(team-mode): stop tmux freeze when many teammates spawn
Drop the per-pane select-pane title shuffle and the cyan border styling that leaked to window scope, then switch from main-vertical to tiled when there are 4 or more teammates so each pane keeps a usable height for the opencode TUI.

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

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-05-06 14:20:50 +09:00
YeonGyu-Kim e6cd50cc15 fix(team-mode): preserve tmux focus during layout
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-05-06 14:20:50 +09:00
YeonGyu-Kim b99325f206 fix(skills): make hyperplan deep member optional
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-05-06 14:20:50 +09:00
YeonGyu-Kim 124845002b fix(keyword-detector): pin hyperplan roster hint
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-05-06 14:20:50 +09:00
YeonGyu-Kim 8f48277e6c fix(builtin-commands): pin hyperplan roster contract
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-05-06 14:20:50 +09:00
YeonGyu-Kim ca8732f8fe fix(team-mode): reject incomplete hyperplan teams
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-05-06 14:20:50 +09:00
YeonGyu-Kim ea5e3e034e fix(model): allow artistry category fallbacks
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-05-06 14:20:50 +09:00
YeonGyu-Kim 267745fa2f test(plugin): remove forbidden assertions in event tests
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-05-06 14:20:50 +09:00
YeonGyu-Kim d737f2e214 test(background-agent): remove forbidden assertions in manager tests
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-05-06 14:20:50 +09:00
YeonGyu-Kim c90be7f9a6 feat(team-mode): align member and lead prompts with Claude Code free-code reference
Bring the team member addendum and the team-mode skill in line with the
Claude Code experimental Agent Teams reference (../free-code) on the
behavioral framing the LLM needs, while keeping every omo-specific
constraint (TeamRunId param, lead-only tool blocklist, eligibility
registry, sisyphus-junior routing) intact.

Member addendum (src/features/team-mode/member-guidance.ts) — adopt
free-code teammatePromptAddendum.ts wisdom that was missing:

- "User interacts primarily with the team lead" — members no longer try
  to address the user directly; they coordinate via task system + DMs.
- Stronger emphasis that plain assistant text is invisible to the team;
  team_send_message is mandatory, not optional.
- Broadcast (`to: "*"`) called out explicitly with "sparingly" guidance
  and the lead-only constraint.
- "Idle is normal" section: idle ≠ done, idle teammates can still
  receive messages, the lead must not treat idle as an error.
- "Communication rules" section forbidding structured JSON status
  messages and forbidding terminal tools as a peer-inspection backdoor;
  always reference teammates by NAME, not session ID.
- Auto-delivery framing: messages arrive as new turns, no manual inbox
  polling, no need to quote a teammate's message back to the lead.

Team-mode skill (src/features/builtin-skills/skills/team-mode.ts) —
adopt free-code TeamCreateTool/prompt.ts sections that were missing:

- Task ownership: any agent can set/change `owner` via team_task_update.
- Automatic message delivery: <peer_message ...> envelope flow.
- Teammate idle state: idle is the expected post-turn state; peer DM
  summaries surface in the lead's idle notification.
- Discovering team members: team_status + ~/.omo/teams/ config; refer by
  name, never raw session IDs.
- Task list coordination: claim by ID order (lowest first), check after
  every completion, escalate blocking deadlocks to the lead.
- Communication rules: same anti-patterns as the member addendum, scoped
  for the lead's awareness (no JSON status, no terminal peer-inspection,
  no delegate-task from inside members).

Test (create.test.ts) updated to track the renamed section header
("Lead-only tools you must NOT call") and to lock the new free-code
parity assertions ("user interacts primarily with the team lead",
"Idle is normal", "structured JSON status messages").

All other contract tests (team-mode skill keyword/section tests,
member parser, runtime tests) untouched and still passing.

Generated with assistance of [OhMyOpenCode](https://github.com/code-yeongyu/oh-my-opencode).
2026-05-06 14:20:50 +09:00
YeonGyu-Kim f6643e7e77 fix(keyword-detector): yield to slash commands so /hyperplan executes its template
When user types /hyperplan something, two pipelines race for the message:
  1. keyword-detector hook (chat.message): the regex \b(hyperplan|hpp)\b
     matches /hyperplan because \b is satisfied by the / boundary, so the
     hook prepends <hyperplan-mode> to the text part.
  2. auto-slash-command hook (chat.message, runs immediately after):
     detectSlashCommand() checks `text.trimStart().startsWith("/")`. After
     keyword-detector's prepend, the part now starts with <hyperplan-mode>
     and the slash check fails, so the builtin command template
     (with $ARGUMENTS substituted) is never injected.

The visible symptom: /hyperplan refactor X never runs the actual
HYPERPLAN_TEMPLATE - the user sees only the keyword-detector wrapper, which
is similar but not identical, and the slash command's $ARGUMENTS payload
is silently lost.

Fix: at the top of the keyword-detector hook, after isSystemDirective() but
before any keyword scan, bail out if the prompt text starts with a slash
command (^\s*\/[a-zA-Z][\w-]*\b). Slash commands are explicit invocations
and own their own mode-injection path; the keyword detector must not race
them. Free-form mentions like "hyperplan: refactor X" still trigger
keyword detection - only the leading-slash form is suppressed.

Lock the contract with three regression tests:
  - /hyperplan refactor ... must NOT inject <hyperplan-mode>
  - /hpp investigate ... must NOT inject (shorthand slash command)
  - "hyperplan: refactor src/auth/handler.ts" still injects (free-form)

Generated with assistance of [OhMyOpenCode](https://github.com/code-yeongyu/oh-my-opencode).
2026-05-06 14:20:50 +09:00
YeonGyu-Kim d8f89b6965 fix(team-mode): preserve per-category model for kind:"category" members
The shared resolveCategoryExecution path treats `agents.sisyphus-junior.model`
(plugin config) as a higher-precedence override than the category default. That
ranking is correct for plain `task(category=...)` delegations - it lets users
pin sisyphus-junior to their preferred general model - but in team-mode it
collapses every kind:"category" member onto the same model.

Hyperplan was the visible victim: skeptic/validator/researcher/architect/creative
are routed through sisyphus-junior with five distinct categories
(unspecified-low / unspecified-high / deep / ultrabrain / artistry). With any
sisyphus-junior model configured, all five resolved to that single override
model instead of their category defaults, defeating the multi-model adversarial
debate.

Strip the override at the team-mode boundary in resolveMember rather than
changing resolveCategoryExecution itself, so:
- delegate-task callers keep the existing override semantics (3 regression
  tests at tools.test.ts:2832, 2958, 3020 stay green)
- per-category user overrides (`categories[X].model`) and explicit fallback
  chains continue to apply
- only the `kind:"category"` team-mode path opts out of the global override

Lock the contract with a regression test in resolve-member.test.ts.

Generated with assistance of [OhMyOpenCode](https://github.com/code-yeongyu/oh-my-opencode).
2026-05-06 14:20:50 +09:00
YeonGyu-Kim cc1780868a chore(schema): regenerate JSON schema for hyperplan-ultrawork keyword 2026-05-06 14:20:50 +09:00