Skip to content
This repository was archived by the owner on Apr 17, 2026. It is now read-only.

feat: resync from upstream oh-my-opencode v3.14.0 (3185 commits)#1

Open
frankxai wants to merge 3188 commits into
mainfrom
merge-upstream-20260327
Open

feat: resync from upstream oh-my-opencode v3.14.0 (3185 commits)#1
frankxai wants to merge 3188 commits into
mainfrom
merge-upstream-20260327

Conversation

@frankxai
Copy link
Copy Markdown
Owner

Summary

  • Resynced from code-yeongyu/oh-my-opencode v3.14.0+43 (3185 commits)
  • Resolved 15 merge conflicts preserving Arcanea persona system
  • Upstream restructure: new agents (hephaestus, atlas, sisyphus-junior), modular config schema
  • Arcanea overlay files preserved in src/agents/arcanea/

Follow-up needed

  • Re-integrate 18 Arcanea agent factories into new builtin-agents.ts architecture
  • The old utils.ts with agent factories was deleted by upstream restructure

Test plan

  • Build passes
  • Arcanea orchestrator agent loads
  • Persona system functional

🤖 Generated with claude-flow

github-actions Bot and others added 30 commits March 23, 2026 04:28
- Check disabled_tools for 'question' in tool-config-handler permission logic
- Strip Question tool code examples from Prometheus prompts when disabled
- Pass disabled_tools through prometheus agent config builder pipeline
- Add tests for disabled_tools question permission handling
fix: validate serverUrl port before tmux pane spawn (fixes #2729)
fix: clarify Prometheus file permission error message (fixes #2150)
fix: respect OPENCODE_DISABLE_CLAUDE_CODE env vars (fixes #2037)
fix: add oh-my-openagent.jsonc config file detection (fixes #2624)
fix: skip keyword injection for non-OMO agents (fixes #2024)
fix: trigger compaction before continue after session error recovery (fixes #390)
fix: respect disabled_tools config in agent prompts (fixes #2742)
fix: emit formatter events from hashline-edit tool (fixes #2117)
The first test case 'non-TUI mode: should show warning but continue when
OpenCode binary not found' was missing a globalThis.fetch mock, causing it
to make a real HTTP request to npm registry via fetchNpmDistTags().
The npm fetch timeout (5s) collided with the test timeout (5s), causing
flaky CI failures.

Added the same fetch mock pattern already used by the other two test cases.
Test runtime dropped from 5000ms+ to ~2ms.
Tests 'should use default timeout when config not provided' (manager.test.ts)
and 'should use DEFAULT_MESSAGE_STALENESS_TIMEOUT_MS when not configured'
(task-poller.test.ts) failed in CI because Date.now() drifted between
test setup (when creating timestamps like Date.now() - 46*60*1000) and
actual execution inside checkAndInterruptStaleTasks().

On slower CI machines, this drift pushed borderline values across
the threshold, causing tasks that should be stale to remain 'running'.

Fix: Mock Date.now with spyOn to return a fixed time, ensuring
consistent timeout calculations regardless of execution speed.
fix: add fetch mock to install test to prevent CI timeout
…ut-defaults

fix: stabilize background-agent stale timeout tests (Date.now race condition)
… deep task refusal

- #2741: Pass inheritedModel as fallback in subagent-resolver when user hasn't
  configured an override, ensuring custom provider models take priority
- #2648: Fix getPlanProgress to treat plans with 0 checkboxes as incomplete
  instead of complete (total > 0 && completed === total)
- #2779: Relax Hephaestus single-task guard to accept multi-step sub-tasks
  from Atlas delegation, only rejecting genuinely independent tasks

Fixes #2741, fixes #2648, fixes #2779
- Remove leading pipe characters (|) from duplicated CORRECT block
- Remove duplicated ## Hard Constraints and ### Task Scope Clarification sections
- Properly place Task Scope Clarification section between CORRECT list and Hard Constraints

Addresses review comments by cubic-dev-ai[bot] on PR #2780
Same issue as gpt.ts and gpt-5-4.ts: duplicated CORRECT block with pipe
characters and duplicated Hard Constraints/Task Scope Clarification sections.
github-actions Bot and others added 24 commits March 27, 2026 03:37
Models frequently hallucinate a 'directory' parameter alongside filePath,
causing hard failures. Instead of rejecting, accept directory as an alias
for filePath and gracefully handle when both are provided (prefer filePath).

This prevents the 'filePath and directory are mutually exclusive' error
that users hit when models pass both parameters.

Fixes model confusion with lsp_diagnostics tool parameters.
- Document object-style fallback_models with per-model settings
- Add model-settings compatibility normalization docs
- Document file:// URI support for prompt and prompt_append
- Add deterministic core-agent order (Tab cycling) docs
- Update rename compatibility notes (legacy plugin warning)
- Document doctor legacy package name detection
- Add models.dev-backed capability cache documentation
- Update Hephaestus default to gpt-5.4 (medium)
- Correct MiniMax M2.7/M2.5 usage across all docs
- Update all agent/category provider chain tables
- Fix stale CLI install/doctor options to match source
- Add refresh-model-capabilities command to CLI reference

Co-authored-by: Sisyphus <sisyphus@oh-my-opencode>
- fix(context-limit): check modelContextLimitsCache for all Anthropic
  models, not just GA-model set; user config/cache wins over 200K default
  (fixes #2836)

- fix(agent-key-remapper): preserve config key aliases alongside display
  names so `opencode run --agent sisyphus` resolves correctly
  (fixes #2858)

- fix(tool-config): respect host permission.skill=deny by disabling
  skill/skill_mcp tools when host denies them (fixes #2873)

- test: update context-limit and agent-key-remapper tests to match new
  behavior
…ubagents

- fix(switcher): use lastIndexOf for multi-slash model IDs (e.g. aws/anthropic/claude-sonnet-4)
- fix(model-resolution): same lastIndexOf fix in doctor parseProviderModel
- fix(call-omo-agent): resolve model from agent config and forward to both
  background and sync executors via DelegatedModelConfig
- fix(subagent-resolver): inherit category model/variant when agent uses
  category reference without explicit model override
- test: add model override forwarding tests for call-omo-agent
- test: add multi-slash model ID test for switcher
…moval

When .sisyphus/ is gitignored, task state written during worktree execution
is lost when the worktree is removed. Fix:

- add worktree-sync.ts: syncSisyphusStateFromWorktree() copies .sisyphus/
  contents from worktree to main repo directory
- update start-work.ts template: documents the sync step as CRITICAL when
  worktree_path is set in boulder.json
- update work-with-pr/SKILL.md: adds explicit sync step before worktree removal
- export from boulder-state index
- test: 5 scenarios covering no-.sisyphus, nested dirs, overwrite stale state
…rocess

The server-health module used module-level state for inProcessServerRunning,
which doesn't survive when Bun loads separate module instances in the same
process. Fix: use globalThis with Symbol.for key so the flag is truly
process-global.

- server-health.ts: replace module-level boolean with globalThis[Symbol.for()]
- export markServerRunningInProcess from tmux-utils barrel
- test: verify flag skips HTTP fetch, verify globalThis persistence
…re try

lastCompactionTime was only set on successful compaction. When compaction
failed (rate limit, timeout, etc.), no cooldown was recorded, causing
immediate retries in an infinite loop.

Fix: set lastCompactionTime before the try block so both success and
failure respect the cooldown window.

- test: add failed-compaction cooldown enforcement test
- test: fix timeout retry test to advance past cooldown
Background subagents (explore/librarian) failed with auth errors because
resolveModelForDelegateTask() always picked the first fallback entry when
availableModels was empty — often an unauthenticated provider like xai
or opencode-go.

Fix: when connectedProvidersCache is populated, iterate fallback chain
and pick the first entry whose provider is in the connected set.
Legacy behavior preserved when cache is null (not yet populated).

- model-selection.ts: use readConnectedProvidersCache to filter fallback chain
- test: 4 new tests for connected-provider-aware resolution
Two issues fixed:
1. process-cleanup.ts used fire-and-forget void Promise for shutdown
   handlers — now properly collects and awaits all cleanup promises
   via Promise.allSettled, with dedup guard to prevent double cleanup
2. TmuxSessionManager was never registered for process cleanup —
   now registered in create-managers.ts via registerManagerForCleanup

Also fixed setTimeout().unref() which could let the process exit
before cleanup completes.
- logLegacyPluginStartupWarning now emits console.warn (visible to user,
  not just log file) when oh-my-opencode is detected in opencode.json
- Auto-migrates opencode.json plugin entry from oh-my-opencode to
  oh-my-openagent (with backup)
- plugin-config.ts: add console.warn when loading legacy config filename
- test: 10 tests covering migration, console output, edge cases
When a subagent session disappears from the status registry (process
crashed), the main agent was waiting the full stale timeout before
acting. Fix:

- Add sessionGoneTimeoutMs config option (default 60s, vs 30min normal)
- task-poller: use shorter timeout when session is gone from status
- manager: verify session existence when gone, fail crashed tasks
  immediately with descriptive error
- Add legacy-plugin-toast hook for #2823 migration warnings
- Update schema with new config option
- completedTaskSummaries now includes status and error info
- notifyParentSession: noReply=false for failed tasks so parent reacts
- Batch notification distinguishes successful vs failed/cancelled tasks
- notification-template updated to show task errors
- task-poller: session-gone tests (85 new lines)
- CI: add Bun shim to PATH for legacy plugin migration tests
…ault model

subagent-resolver: when falling back to matchedAgent.model for custom
subagents, verify the model is actually available via fuzzyMatchModel
before setting it as categoryModel. Prevents delegate_task from using
an unavailable model when the user's custom agent config references
a model they don't have access to.

Test updated to include the target model in available models mock.
…untime

TTL (pruneStaleTasksAndNotifications) now resets on last activity:
- Uses task.progress.lastUpdate as TTL anchor for running tasks
  (was always using startedAt, causing 30-min hard deadline)
- Added taskTtlMs config option for user-adjustable TTL
- Error message shows actual TTL duration, not hardcoded '30 minutes'
- 3 new tests for the new behavior
…kill paths

resolveSkillPathReferences: add looksLikeFilePath() guard that requires
a file extension or trailing slash before resolving @scope/package
references. npm packages like @mycom/my_mcp_tools@beta were incorrectly
being rewritten to absolute paths in skill templates.

2 new tests.
task_system now defaults to true instead of false. Users on opencode-go
or other plans were unable to invoke oracle or use subagent delegation
because experimental.task_system defaulted off.

The task system is the primary mechanism for oracle, explore, and other
subagent invocations — it should not be behind an experimental flag.

Users can still explicitly set experimental.task_system: false to opt out.
The skill tool previously only merged disk-discovered skills and preloaded
options.skills, so skills registered natively via ctx.skills (for example
from config.skills.paths or other plugins) were prompt-visible but not
discoverable by skill().

Fix:
- pass ctx.skills from tool-registry into createSkillTool
- extend SkillLoadOptions with nativeSkills accessor
- merge nativeSkills.all() results into getSkills()
- add test covering native PluginInput skill discovery
skill-context already filtered browser-related skills using the configured
browser provider, but the skill tool rebuilt discovery without forwarding
browserProvider. That caused skills like agent-browser to be prompt-visible
while skill() could still fail to resolve them unless browser_automation_engine.provider
was explicitly threaded through both paths.

Fix:
- pass skillContext.browserProvider from tool-registry into createSkillTool
- extend SkillLoadOptions with browserProvider
- forward browserProvider to getAllSkills()
- add regression tests for execution and description visibility
The installer wrapper and postinstall script still hardcoded the old
oh-my-opencode-* platform package family. When users installed the renamed
npm package oh-my-openagent (for example via npx oh-my-openagent install on
WSL2/Linux), the main package installed correctly but the wrapper looked for
nonexistent optional binaries like oh-my-opencode-linux-x64.

Fix:
- derive packageBaseName from package.json at runtime in wrapper/postinstall
- thread packageBaseName through platform package candidate resolution
- keep legacy oh-my-opencode default as fallback
- add regression test for renamed package family
…solation

Verified: bun test src/plugin/event.test.ts src/hooks/runtime-fallback/index.test.ts -- 68/68 pass. tsc clean.
Merge 3185 upstream commits from code-yeongyu/oh-my-opencode dev branch.
Accept upstream structural refactors while preserving Arcanea branding
in package.json. Arcanea agent overlay files preserved in src/agents/arcanea/.

Resolved conflicts:
- package.json: keep Arcanea name/URLs, accept upstream deps/version
- src/agents/: accept upstream restructure (utils.ts deleted, builtin-agents.ts added)
- src/config/schema.ts: accept modular schema/ directory restructure
- src/shared/config-path.ts: removed (upstream deleted, functionality moved)
- src/tools/lsp/utils.ts: removed (upstream deleted, functionality split)

Co-Authored-By: claude-flow <ruv@ruv.net>
@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented Mar 27, 2026

Thank you for your contribution! Before we can merge this PR, we need you to sign our Contributor License Agreement (CLA).

To sign the CLA, please comment on this PR with:

I have read the CLA Document and I hereby sign the CLA

This is a one-time requirement. Once signed, all your future contributions will be automatically accepted.


I have read the CLA Document and I hereby sign the CLA


2 out of 3 committers have signed the CLA.
✅ (MoerAI)[https://github.com/MoerAI]
✅ (code-yeongyu)[https://github.com/code-yeongyu]
@guazi04
You can retrigger this bot by commenting recheck in this Pull Request. Posted by the CLA Assistant Lite bot.

Copy link
Copy Markdown

@gemini-code-assist gemini-code-assist Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code Review

This pull request introduces significant updates to the project, including a rename from oh-my-opencode to oh-my-openagent, the addition of a new arXiv MCP, and the implementation of a pre-publish review system. My feedback highlights a potential data loss issue in the gh_fetch.py pagination logic and suggests reverting the repository URL change in CONTRIBUTING.md until the rename is fully consistent across the entire repository to avoid confusion.

Comment on lines +124 to +183
"""Fetch ALL items with exhaustive pagination."""
all_items: list[dict] = []
page = 1

progress.update(task_id, description=f"[cyan]Fetching {item_type}s page {page}...")
items = await fetch_items_page(repo, item_type, state, BATCH_SIZE)
fetched_count = len(items)
all_items.extend(items)

console.print(f"[dim]Page {page}: fetched {fetched_count} {item_type}s[/dim]")

while fetched_count == BATCH_SIZE:
page += 1
progress.update(
task_id, description=f"[cyan]Fetching {item_type}s page {page}..."
)

last_created = all_items[-1].get("createdAt", "")
if not last_created:
break

search_filter = f"created:<{last_created}"
items = await fetch_items_page(
repo, item_type, state, BATCH_SIZE, search_filter
)
fetched_count = len(items)

if fetched_count == 0:
break

existing_numbers = {item["number"] for item in all_items}
new_items = [item for item in items if item["number"] not in existing_numbers]
all_items.extend(new_items)

console.print(
f"[dim]Page {page}: fetched {fetched_count}, added {len(new_items)} new (total: {len(all_items)})[/dim]"
)

if page > 20:
console.print("[yellow]Safety limit reached (20 pages)[/yellow]")
break

if hours is not None:
cutoff = datetime.now(UTC) - timedelta(hours=hours)
cutoff_str = cutoff.isoformat()

original_count = len(all_items)
all_items = [
item
for item in all_items
if item.get("createdAt", "") >= cutoff_str
or item.get("updatedAt", "") >= cutoff_str
]
filtered_count = original_count - len(all_items)
if filtered_count > 0:
console.print(
f"[dim]Filtered out {filtered_count} items older than {hours} hours[/dim]"
)

return all_items
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

high

The pagination logic in fetch_all_items relies on filtering by created:<{last_created}, which is not a reliable method for exhaustive pagination. If multiple items share the same creation timestamp at a page boundary, some items may be missed. This could lead to incomplete triage results.

For more robust pagination, consider using cursor-based pagination via the gh api command with the --paginate flag. This is the recommended approach for iterating through all items in a list from the GitHub API and will prevent potential data loss.

Comment thread CONTRIBUTING.md
Comment on lines +66 to +67
git clone https://github.com/code-yeongyu/oh-my-openagent.git
cd oh-my-openagent
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

medium

The repository URL in the clone command has been updated to oh-my-openagent, but other parts of the project, including the PR description and other files, still refer to oh-my-opencode. This inconsistency can be confusing for new contributors. While FIX-BLOCKS.md acknowledges this as a "Package Identity Split-Brain", it would be better to either make the rename consistent throughout this PR or add a note to the PR description clarifying the transition status. To maintain consistency for now, I suggest reverting this change until the rename is complete across the repository.

Suggested change
git clone https://github.com/code-yeongyu/oh-my-openagent.git
cd oh-my-openagent
git clone https://github.com/code-yeongyu/oh-my-opencode.git
cd oh-my-opencode

…gents architecture

Wire all Arcanea agents (4 dev, 4 creative, 4 writing, 4 research, 1 master orchestrator,
1 orchestrator) into the new BuiltinAgentName type, agentSources registry, and agentMetadata
map following the exact upstream factory pattern with static .mode properties.

Co-Authored-By: claude-flow <ruv@ruv.net>
@coderabbitai
Copy link
Copy Markdown

coderabbitai Bot commented Mar 27, 2026

Important

Review skipped

Too many files!

This PR contains 294 files, which is 144 over the limit of 150.

⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: 5b4d4ef0-90ad-4198-94ba-5dd05d6c6ea0

📥 Commits

Reviewing files that changed from the base of the PR and between aeb1168 and c72d101.

⛔ Files ignored due to path filters (6)
  • .github/assets/building-in-public.png is excluded by !**/*.png
  • .github/assets/elestyle.jpg is excluded by !**/*.jpg
  • .github/assets/hephaestus.png is excluded by !**/*.png
  • .github/assets/orchestrator-atlas.png is excluded by !**/*.png
  • bun.lock is excluded by !**/*.lock
  • src/cli/__snapshots__/model-fallback.test.ts.snap is excluded by !**/*.snap
📒 Files selected for processing (294)
  • .github/ISSUE_TEMPLATE/bug_report.yml
  • .github/ISSUE_TEMPLATE/feature_request.yml
  • .github/ISSUE_TEMPLATE/general.yml
  • .github/workflows/ci.yml
  • .github/workflows/cla.yml
  • .github/workflows/publish-platform.yml
  • .github/workflows/publish.yml
  • .github/workflows/refresh-model-capabilities.yml
  • .github/workflows/sisyphus-agent.yml
  • .gitignore
  • .opencode/command/get-unpublished-changes.md
  • .opencode/command/publish.md
  • .opencode/command/remove-deadcode.md
  • .opencode/skills/github-triage/SKILL.md
  • .opencode/skills/github-triage/scripts/gh_fetch.py
  • .opencode/skills/pre-publish-review/SKILL.md
  • .opencode/skills/work-with-pr-workspace/evals/evals.json
  • .opencode/skills/work-with-pr-workspace/iteration-1/benchmark.json
  • .opencode/skills/work-with-pr-workspace/iteration-1/benchmark.md
  • .opencode/skills/work-with-pr-workspace/iteration-1/eval-1/eval_metadata.json
  • .opencode/skills/work-with-pr-workspace/iteration-1/eval-1/with_skill/grading.json
  • .opencode/skills/work-with-pr-workspace/iteration-1/eval-1/with_skill/outputs/code-changes.md
  • .opencode/skills/work-with-pr-workspace/iteration-1/eval-1/with_skill/outputs/execution-plan.md
  • .opencode/skills/work-with-pr-workspace/iteration-1/eval-1/with_skill/outputs/pr-description.md
  • .opencode/skills/work-with-pr-workspace/iteration-1/eval-1/with_skill/outputs/verification-strategy.md
  • .opencode/skills/work-with-pr-workspace/iteration-1/eval-1/with_skill/timing.json
  • .opencode/skills/work-with-pr-workspace/iteration-1/eval-1/without_skill/grading.json
  • .opencode/skills/work-with-pr-workspace/iteration-1/eval-1/without_skill/outputs/code-changes.md
  • .opencode/skills/work-with-pr-workspace/iteration-1/eval-1/without_skill/outputs/execution-plan.md
  • .opencode/skills/work-with-pr-workspace/iteration-1/eval-1/without_skill/outputs/pr-description.md
  • .opencode/skills/work-with-pr-workspace/iteration-1/eval-1/without_skill/outputs/verification-strategy.md
  • .opencode/skills/work-with-pr-workspace/iteration-1/eval-1/without_skill/timing.json
  • .opencode/skills/work-with-pr-workspace/iteration-1/eval-2/eval_metadata.json
  • .opencode/skills/work-with-pr-workspace/iteration-1/eval-2/with_skill/grading.json
  • .opencode/skills/work-with-pr-workspace/iteration-1/eval-2/with_skill/outputs/code-changes.md
  • .opencode/skills/work-with-pr-workspace/iteration-1/eval-2/with_skill/outputs/execution-plan.md
  • .opencode/skills/work-with-pr-workspace/iteration-1/eval-2/with_skill/outputs/pr-description.md
  • .opencode/skills/work-with-pr-workspace/iteration-1/eval-2/with_skill/outputs/verification-strategy.md
  • .opencode/skills/work-with-pr-workspace/iteration-1/eval-2/with_skill/timing.json
  • .opencode/skills/work-with-pr-workspace/iteration-1/eval-2/without_skill/grading.json
  • .opencode/skills/work-with-pr-workspace/iteration-1/eval-2/without_skill/outputs/code-changes.md
  • .opencode/skills/work-with-pr-workspace/iteration-1/eval-2/without_skill/outputs/execution-plan.md
  • .opencode/skills/work-with-pr-workspace/iteration-1/eval-2/without_skill/outputs/pr-description.md
  • .opencode/skills/work-with-pr-workspace/iteration-1/eval-2/without_skill/outputs/verification-strategy.md
  • .opencode/skills/work-with-pr-workspace/iteration-1/eval-2/without_skill/timing.json
  • .opencode/skills/work-with-pr-workspace/iteration-1/eval-3/eval_metadata.json
  • .opencode/skills/work-with-pr-workspace/iteration-1/eval-3/with_skill/grading.json
  • .opencode/skills/work-with-pr-workspace/iteration-1/eval-3/with_skill/outputs/code-changes.md
  • .opencode/skills/work-with-pr-workspace/iteration-1/eval-3/with_skill/outputs/execution-plan.md
  • .opencode/skills/work-with-pr-workspace/iteration-1/eval-3/with_skill/outputs/pr-description.md
  • .opencode/skills/work-with-pr-workspace/iteration-1/eval-3/with_skill/outputs/verification-strategy.md
  • .opencode/skills/work-with-pr-workspace/iteration-1/eval-3/with_skill/timing.json
  • .opencode/skills/work-with-pr-workspace/iteration-1/eval-3/without_skill/grading.json
  • .opencode/skills/work-with-pr-workspace/iteration-1/eval-3/without_skill/outputs/code-changes.md
  • .opencode/skills/work-with-pr-workspace/iteration-1/eval-3/without_skill/outputs/execution-plan.md
  • .opencode/skills/work-with-pr-workspace/iteration-1/eval-3/without_skill/outputs/pr-description.md
  • .opencode/skills/work-with-pr-workspace/iteration-1/eval-3/without_skill/outputs/verification-strategy.md
  • .opencode/skills/work-with-pr-workspace/iteration-1/eval-3/without_skill/timing.json
  • .opencode/skills/work-with-pr-workspace/iteration-1/eval-4/eval_metadata.json
  • .opencode/skills/work-with-pr-workspace/iteration-1/eval-4/with_skill/grading.json
  • .opencode/skills/work-with-pr-workspace/iteration-1/eval-4/with_skill/outputs/code-changes.md
  • .opencode/skills/work-with-pr-workspace/iteration-1/eval-4/with_skill/outputs/execution-plan.md
  • .opencode/skills/work-with-pr-workspace/iteration-1/eval-4/with_skill/outputs/pr-description.md
  • .opencode/skills/work-with-pr-workspace/iteration-1/eval-4/with_skill/outputs/verification-strategy.md
  • .opencode/skills/work-with-pr-workspace/iteration-1/eval-4/with_skill/timing.json
  • .opencode/skills/work-with-pr-workspace/iteration-1/eval-4/without_skill/grading.json
  • .opencode/skills/work-with-pr-workspace/iteration-1/eval-4/without_skill/outputs/code-changes.md
  • .opencode/skills/work-with-pr-workspace/iteration-1/eval-4/without_skill/outputs/execution-plan.md
  • .opencode/skills/work-with-pr-workspace/iteration-1/eval-4/without_skill/outputs/pr-description.md
  • .opencode/skills/work-with-pr-workspace/iteration-1/eval-4/without_skill/outputs/verification-strategy.md
  • .opencode/skills/work-with-pr-workspace/iteration-1/eval-4/without_skill/timing.json
  • .opencode/skills/work-with-pr-workspace/iteration-1/eval-5/eval_metadata.json
  • .opencode/skills/work-with-pr-workspace/iteration-1/eval-5/with_skill/grading.json
  • .opencode/skills/work-with-pr-workspace/iteration-1/eval-5/with_skill/outputs/code-changes.md
  • .opencode/skills/work-with-pr-workspace/iteration-1/eval-5/with_skill/outputs/execution-plan.md
  • .opencode/skills/work-with-pr-workspace/iteration-1/eval-5/with_skill/outputs/pr-description.md
  • .opencode/skills/work-with-pr-workspace/iteration-1/eval-5/with_skill/outputs/verification-strategy.md
  • .opencode/skills/work-with-pr-workspace/iteration-1/eval-5/with_skill/timing.json
  • .opencode/skills/work-with-pr-workspace/iteration-1/eval-5/without_skill/grading.json
  • .opencode/skills/work-with-pr-workspace/iteration-1/eval-5/without_skill/outputs/code-changes.md
  • .opencode/skills/work-with-pr-workspace/iteration-1/eval-5/without_skill/outputs/execution-plan.md
  • .opencode/skills/work-with-pr-workspace/iteration-1/eval-5/without_skill/outputs/pr-description.md
  • .opencode/skills/work-with-pr-workspace/iteration-1/eval-5/without_skill/outputs/verification-strategy.md
  • .opencode/skills/work-with-pr-workspace/iteration-1/eval-5/without_skill/timing.json
  • .opencode/skills/work-with-pr-workspace/iteration-1/review.html
  • .opencode/skills/work-with-pr/SKILL.md
  • .sisyphus/rules/modular-code-enforcement.md
  • AGENTS.md
  • CONTRIBUTING.md
  • FIX-BLOCKS.md
  • README.ja.md
  • README.ko.md
  • README.md
  • README.ru.md
  • README.zh-cn.md
  • assets/arcanea-opencode.schema.json
  • bin/oh-my-opencode.js
  • bin/platform.d.ts
  • bin/platform.js
  • bin/platform.test.ts
  • bun-test.d.ts
  • bunfig.toml
  • docs/category-skill-guide.md
  • docs/cli-guide.md
  • docs/examples/coding-focused.jsonc
  • docs/examples/default.jsonc
  • docs/examples/planning-focused.jsonc
  • docs/guide/agent-model-matching.md
  • docs/guide/installation.md
  • docs/guide/orchestration.md
  • docs/guide/overview.md
  • docs/manifesto.md
  • docs/model-capabilities-maintenance.md
  • docs/orchestration-guide.md
  • docs/reference/cli.md
  • docs/reference/configuration.md
  • docs/reference/features.md
  • docs/superpowers/plans/2026-03-17-model-settings-compatibility-resolver.md
  • docs/superpowers/specs/2026-03-17-model-settings-compatibility-design.md
  • docs/troubleshooting/ollama.md
  • opencode.json
  • package.json
  • packages/darwin-arm64/bin/.gitkeep
  • packages/darwin-arm64/package.json
  • packages/darwin-x64-baseline/package.json
  • packages/darwin-x64/bin/.gitkeep
  • packages/darwin-x64/package.json
  • packages/linux-arm64-musl/bin/.gitkeep
  • packages/linux-arm64-musl/package.json
  • packages/linux-arm64/bin/.gitkeep
  • packages/linux-arm64/package.json
  • packages/linux-x64-baseline/package.json
  • packages/linux-x64-musl-baseline/package.json
  • packages/linux-x64-musl/bin/.gitkeep
  • packages/linux-x64-musl/package.json
  • packages/linux-x64/bin/.gitkeep
  • packages/linux-x64/package.json
  • packages/windows-x64-baseline/package.json
  • packages/windows-x64/bin/.gitkeep
  • packages/windows-x64/package.json
  • postinstall.mjs
  • script/build-binaries.test.ts
  • script/build-binaries.ts
  • script/build-model-capabilities.ts
  • script/build-schema-document.ts
  • script/build-schema.test.ts
  • script/build-schema.ts
  • script/generate-changelog.ts
  • script/publish.ts
  • signatures/cla.json
  • src/AGENTS.md
  • src/agents/AGENTS.md
  • src/agents/agent-builder.ts
  • src/agents/anti-duplication.test.ts
  • src/agents/arcanea/arcanea-orchestrator.ts
  • src/agents/arcanea/index.ts
  • src/agents/atlas/agent.ts
  • src/agents/atlas/atlas-prompt.test.ts
  • src/agents/atlas/default.ts
  • src/agents/atlas/gemini.ts
  • src/agents/atlas/gpt.ts
  • src/agents/atlas/index.ts
  • src/agents/atlas/prompt-checkbox-enforcement.test.ts
  • src/agents/atlas/prompt-section-builder.ts
  • src/agents/build-prompt.ts
  • src/agents/builtin-agents.ts
  • src/agents/builtin-agents/agent-overrides.ts
  • src/agents/builtin-agents/atlas-agent.ts
  • src/agents/builtin-agents/available-skills.ts
  • src/agents/builtin-agents/environment-context.ts
  • src/agents/builtin-agents/general-agents.ts
  • src/agents/builtin-agents/hephaestus-agent.ts
  • src/agents/builtin-agents/model-resolution.ts
  • src/agents/builtin-agents/resolve-file-uri.test.ts
  • src/agents/builtin-agents/resolve-file-uri.ts
  • src/agents/builtin-agents/sisyphus-agent.ts
  • src/agents/custom-agent-summaries.ts
  • src/agents/delegation-trust-prompt.test.ts
  • src/agents/document-writer.ts
  • src/agents/dynamic-agent-prompt-builder.test.ts
  • src/agents/dynamic-agent-prompt-builder.ts
  • src/agents/env-context.test.ts
  • src/agents/env-context.ts
  • src/agents/explore.ts
  • src/agents/hephaestus/agent.test.ts
  • src/agents/hephaestus/agent.ts
  • src/agents/hephaestus/gpt-5-3-codex.ts
  • src/agents/hephaestus/gpt-5-4.ts
  • src/agents/hephaestus/gpt.ts
  • src/agents/hephaestus/index.ts
  • src/agents/index.ts
  • src/agents/librarian.ts
  • src/agents/metis.ts
  • src/agents/momus.test.ts
  • src/agents/momus.ts
  • src/agents/multimodal-looker.ts
  • src/agents/oracle.ts
  • src/agents/orchestrator-sisyphus.ts
  • src/agents/plan-prompt.ts
  • src/agents/prometheus-prompt.test.ts
  • src/agents/prometheus-prompt.ts
  • src/agents/prometheus/behavioral-summary.ts
  • src/agents/prometheus/gemini.ts
  • src/agents/prometheus/gpt.ts
  • src/agents/prometheus/high-accuracy-mode.ts
  • src/agents/prometheus/identity-constraints.ts
  • src/agents/prometheus/index.ts
  • src/agents/prometheus/interview-mode.ts
  • src/agents/prometheus/plan-generation.ts
  • src/agents/prometheus/plan-template.ts
  • src/agents/prometheus/system-prompt.test.ts
  • src/agents/prometheus/system-prompt.ts
  • src/agents/sisyphus-junior.ts
  • src/agents/sisyphus-junior/agent.ts
  • src/agents/sisyphus-junior/default.ts
  • src/agents/sisyphus-junior/gemini.ts
  • src/agents/sisyphus-junior/gpt-5-3-codex.ts
  • src/agents/sisyphus-junior/gpt-5-4.ts
  • src/agents/sisyphus-junior/gpt.ts
  • src/agents/sisyphus-junior/index.test.ts
  • src/agents/sisyphus-junior/index.ts
  • src/agents/sisyphus-prompt-builder.ts
  • src/agents/sisyphus.ts
  • src/agents/sisyphus/default.ts
  • src/agents/sisyphus/gemini.ts
  • src/agents/sisyphus/gpt-5-4.ts
  • src/agents/sisyphus/index.ts
  • src/agents/tool-restrictions.test.ts
  • src/agents/types.test.ts
  • src/agents/types.ts
  • src/agents/utils.test.ts
  • src/agents/utils.ts
  • src/auth/AGENTS.md
  • src/auth/antigravity/accounts.test.ts
  • src/auth/antigravity/accounts.ts
  • src/auth/antigravity/browser.test.ts
  • src/auth/antigravity/browser.ts
  • src/auth/antigravity/cli.test.ts
  • src/auth/antigravity/cli.ts
  • src/auth/antigravity/constants.test.ts
  • src/auth/antigravity/constants.ts
  • src/auth/antigravity/fetch.ts
  • src/auth/antigravity/index.ts
  • src/auth/antigravity/integration.test.ts
  • src/auth/antigravity/message-converter.ts
  • src/auth/antigravity/oauth.test.ts
  • src/auth/antigravity/oauth.ts
  • src/auth/antigravity/plugin.ts
  • src/auth/antigravity/project.ts
  • src/auth/antigravity/request.test.ts
  • src/auth/antigravity/request.ts
  • src/auth/antigravity/response.ts
  • src/auth/antigravity/storage.test.ts
  • src/auth/antigravity/storage.ts
  • src/auth/antigravity/thinking.test.ts
  • src/auth/antigravity/thinking.ts
  • src/auth/antigravity/thought-signature-store.ts
  • src/auth/antigravity/token.test.ts
  • src/auth/antigravity/token.ts
  • src/auth/antigravity/tools.ts
  • src/auth/antigravity/types.ts
  • src/cli/AGENTS.md
  • src/cli/cli-installer.test.ts
  • src/cli/cli-installer.ts
  • src/cli/cli-program.ts
  • src/cli/commands/auth.ts
  • src/cli/config-manager.test.ts
  • src/cli/config-manager.ts
  • src/cli/config-manager/AGENTS.md
  • src/cli/config-manager/add-plugin-to-opencode-config.ts
  • src/cli/config-manager/bun-install.test.ts
  • src/cli/config-manager/bun-install.ts
  • src/cli/config-manager/config-context.ts
  • src/cli/config-manager/deep-merge-record.ts
  • src/cli/config-manager/detect-current-config.ts
  • src/cli/config-manager/ensure-config-directory-exists.ts
  • src/cli/config-manager/format-error-with-suggestion.ts
  • src/cli/config-manager/generate-omo-config.test.ts
  • src/cli/config-manager/generate-omo-config.ts
  • src/cli/config-manager/npm-dist-tags.test.ts
  • src/cli/config-manager/npm-dist-tags.ts
  • src/cli/config-manager/opencode-binary.ts
  • src/cli/config-manager/opencode-config-format.ts
  • src/cli/config-manager/parse-opencode-config-file.ts
  • src/cli/config-manager/plugin-detection.test.ts
  • src/cli/config-manager/plugin-name-with-version.test.ts
  • src/cli/config-manager/plugin-name-with-version.ts
  • src/cli/config-manager/write-omo-config.test.ts
  • src/cli/config-manager/write-omo-config.ts
  • src/cli/doctor/checks/auth.test.ts
  • src/cli/doctor/checks/auth.ts
  • src/cli/doctor/checks/config.test.ts
  • src/cli/doctor/checks/config.ts
  • src/cli/doctor/checks/dependencies.test.ts

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch merge-upstream-20260327

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

Copy link
Copy Markdown

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: c6de52e67c

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

log("Running on-complete hook", { command: trimmedCommand })

try {
const proc = spawnWithWindowsHide(["sh", "-c", trimmedCommand], {
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Use a platform-native shell for on-complete hooks

Hardcoding "sh", "-c" here makes --on-complete unreliable on Windows environments that do not have a POSIX shell installed (common outside Git Bash/MSYS). In that case the hook command fails before execution and is silently downgraded to a log entry, so users do not get their completion automation even though the run itself succeeds.

Useful? React with 👍 / 👎.

- name: Download artifact
id: download
if: steps.check.outputs.skip_all != 'true'
continue-on-error: true
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Fail publish job when required artifact download fails

Marking artifact download as continue-on-error: true lets this matrix leg finish successfully even when an artifact is missing or download fails, and the later publish steps are then skipped by steps.download.outcome == 'success'. That can produce a green workflow with one or more platform packages silently unpublished when skip_all is false.

Useful? React with 👍 / 👎.

- Add arcanea-buddy hook (src/hooks/arcanea-buddy/index.ts)
  - Reads shared buddy state from tmpdir
  - Injects <arcanea-buddy> context into chat messages
  - Tracks tool usage → feeds buddy XP
  - Session lifecycle integration (streak, XP)
- Wire buddy hook into create-hooks.ts plugin pipeline
- Fix persona.ts pre-existing type error (local PersonaConfig)
- Update opencode.json with 7 free Zen models:
  - mimo-v2-pro-free (build), qwen3.6-plus-free (plan),
  - minimax-m2.5-free (debug), big-pickle (review),
  - nemotron-3-super-free (quick)
- Add Guardian → model routing for all agents

Co-Authored-By: claude-flow <ruv@ruv.net>
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

7 participants