Commit Graph

3991 Commits

Author SHA1 Message Date
YeonGyu-Kim f7270a0f97 fix(model-error-classifier): scope forbidden-provider retry to specific phrase
Bare "403" and "forbidden" substring patterns (added in 034744cb to
retry the "Selected provider is forbidden" case from PR #3706) matched
any error message containing those tokens — tool-level 403s, file-perm
"forbidden" messages, unrelated upstream errors that happened to spell
"forbidden". The legacy model-fallback path then armed setPendingModelFallback
on those unrelated errors, jumping Sisyphus to claude-opus-4-7 (first
entry of its fallback chain) regardless of the user's configured model.

Replace the bare patterns with the specific phrases PR #3706 actually
targeted, and add regression tests asserting unrelated 403/forbidden
messages stay non-retryable.

Reported-by: ilove_borshch on Discord (#omo-help)
2026-05-01 01:25:01 +09:00
YeonGyu-Kim 1a64060cc2 feat(agents): strengthen gpt-5.5 prompts with manual QA gate, dig-deeper trio, anti-fallback
- Add Manual QA Gate as a non-negotiable surface-tool mapping
  (interactive_bash for TUI, playwright for browser, curl for HTTP,
  driver script for library) to Hephaestus, Sisyphus-Junior, and
  Sisyphus' direct-execution mode.
- Restore the dig-deeper trio (tool persistence / dig deeper /
  dependency checks) as orthogonal paragraphs so each carries its
  own cognitive trigger instead of a fused single statement.
- Harden investigate-before-acting from a soft phrase to a dedicated
  block: never speculate about unread code, re-read on every
  task hand-off, the worktree may have changed.
- Add 'Parallelize aggressively' as its own block. Reads, searches,
  diagnostics, and background sub-agents all batch into a single
  response by default.
- Add 'No defensive code, no speculative legacy' to discourage
  speculative backward-compatibility branches and unrequested
  defensive validation.
- Absorb review-intent and frontend anti-slop coverage so the
  prompt stays self-sufficient when the omo agent prompt replaces
  the provider prompt.
- Replace literal apply_patch instructions with GPT_APPLY_PATCH_GUIDANCE
  (use edit/write tools) so the prompt no longer contradicts the
  apply_patch deny that the agent permission applies on GPT models.
- Sisyphus-Junior gains a Review tasks block and a default-behavior
  fallback for when the runtime category context is missing or sparse.
- Sisyphus gains an explicit Hard invariants block listing type-
  suppression bans, destructive-git bans, and Oracle-completion gating.
- Restore dynamic injections that round out the orchestrator/worker
  context: category+skills delegation guide, delegation table,
  Oracle dynamic guidance, key triggers, non-Claude planner
  reminder. Hephaestus regains optional category delegation while
  keeping direct execution as the default.
- Drop em dashes; search guidance points at rg directly throughout.
2026-04-30 20:30:57 +09:00
Ivan Smetanin 5291ee7d3d fix(auto-update-checker): prefer loaded module's package.json over flat-install candidates
The startup toast and `omo --version` were reading from the legacy flat install
at <CACHE_DIR>/node_modules/<pkg>/package.json, but OpenCode actually loads
plugins from a per-plugin sandbox at <CACHE_DIR>/<plugin-entry>/node_modules/
<pkg>/package.json. The two install layers can drift independently when bun
re-resolves "latest" against the flat install while the sandbox's package.json
stays pinned to a literal version baked in at first install.

In practice this means the toast can announce a version the runtime is not
running. Concrete reproduction: with `"oh-my-openagent@latest"` in the plugin
list, the sandbox stayed on 3.17.5 while the parallel flat install advanced to
3.17.6, so the startup toast confidently reported v3.17.6 even though the
loaded plugin code was 3.17.5.

Walking up from `import.meta.url` always reflects the actually-loaded module,
so reorder `getCachedVersion()` to try that first and fall back to the flat-
install candidates and execPath walk-up as before. The fallback chain is
preserved for bundled environments where the module-relative lookup may fail.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-29 09:17:21 +01:00
YeonGyu-Kim d65bc8730c feat(agents): add gpt-5.5 native deep category prompt
Hephaestus 5.5 was rewritten as an outcome-first delegation contract in c3fabaaf. The deep category (spawned as sisyphus-junior under gpt-5.5) now receives a matching prose-driven category context lifted from drafts/gpt-5-5/deep.md instead of the legacy gpt-5.4-era threat-frame version.

Selection happens via a new model-aware resolvePromptAppend hook on BuiltinCategoryDefinition. When the resolved category model is gpt-5.5 the new DEEP_CATEGORY_PROMPT_APPEND_GPT_5_5 is used; older models keep the legacy DEEP_CATEGORY_PROMPT_APPEND. User prompt_append remains preserved on top of either base.
2026-04-29 15:49:27 +09:00
YeonGyu-Kim 05a15f7598 Merge branch 'dev' into fix/retry-recovery-and-observability 2026-04-29 14:54:24 +09:00
YeonGyu-Kim 6850cb6d21 Merge branch 'dev' into fix/fallback-credit-exhaustion 2026-04-29 14:38:42 +09:00
Choi Kijin / 최 기진 / チョイ キジン 7adb725960 Merge remote-tracking branch 'origin/dev' into fix/retry-recovery-and-observability 2026-04-29 12:25:02 +09:00
Choi Kijin / 최 기진 / チョイ キジン 0dd455e725 fix(delegate-task): ignore stale sync session errors
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-04-28 21:43:10 +09:00
Choi Kijin / 최 기진 / チョイ キジン 185665707c fix(model-fallback): clone session fallback chains
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-04-28 21:43:10 +09:00
Choi Kijin / 최 기진 / チョイ キジン 2237c1accd fix(background-agent): guard stale launch errors and retry links
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-04-28 21:43:09 +09:00
Choi Kijin / 최 기진 / チョイ キジン 27fb2d5e79 test(plugin): clean up event handler test helpers
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-04-28 19:09:02 +09:00
Choi Kijin / 최 기진 / チョイ キジン 078e49629e fix(delegate-task): replay sync retry session registration
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-04-28 19:09:01 +09:00
YeonGyu-Kim fbaeb032c0 fix(todo-continuation): avoid duplicate progress reset
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-04-28 18:00:47 +09:00
YeonGyu-Kim ebcd6edf5a perf(hashline): use write metadata line counts
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-04-28 18:00:21 +09:00
YeonGyu-Kim 24201ea951 perf(background-agent): index tasks by parent session
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-04-28 18:00:04 +09:00
YeonGyu-Kim eb722aa977 perf(compaction): reuse message update parts for no-text tails
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-04-28 17:59:50 +09:00
YeonGyu-Kim ece8fd4f25 perf(shared): cache context window usage per session
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-04-28 17:59:25 +09:00
Choi Kijin / 최 기진 / チョイ キジン 3fc9e6bafd Merge remote-tracking branch 'origin/dev' into opencode/mighty-wolf 2026-04-28 15:47:58 +09:00
Choi Kijin / 최 기진 / チョイ キジン 79054ea3e5 feat(background-task): render retry timelines and links
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-04-28 15:29:49 +09:00
Choi Kijin / 최 기진 / チョイ キジン 25548f2561 fix(model-fallback): retry forbidden provider errors
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-04-28 15:29:33 +09:00
Choi Kijin / 최 기진 / チョイ キジン 613e4a6c12 fix(delegate-task): retry sync tasks after runtime session errors
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-04-28 15:28:20 +09:00
Choi Kijin / 최 기진 / チョイ キジン a4968a3d1d feat(background-task): track retry attempts across sessions
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-04-28 15:27:35 +09:00
Choi Kijin / 최 기진 / チョイ キジン cc3cca7cb7 fix(model-fallback): expose session fallback chains to background tasks
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-04-28 15:27:34 +09:00
YeonGyu-Kim 4eb597b10f Merge pull request #3698 from code-yeongyu/fix/posthog-cost-reduction
fix(telemetry): cut PostHog cost via HAU removal + plugin_loaded daily dedupe
2026-04-28 15:08:55 +09:00
YeonGyu-Kim 90c2c9c31a Merge pull request #3697 from code-yeongyu/feat/sisyphus-kimi-k2-6
feat(sisyphus): add Kimi K2.x prompt variant
2026-04-28 15:04:29 +09:00
YeonGyu-Kim 669e0667be fix(telemetry): dedupe plugin_loaded event to once per UTC day
The plugin_loaded event was emitted on every plugin reload, generating
high event volume on PostHog (proportional to opencode restarts per
user per day). With MAU > 60K and active power users restarting
frequently, this drove unnecessary event spend.

Add a separate daily dedup state field (lastPluginLoadedDayUTC) so the
plugin_loaded capture only fires once per UTC day per machine. The
existing daily activity dedup (lastActiveDayUTC, used by
omo_daily_active) is preserved as an independent gate so the two
dimensions cannot overwrite each other in the activity state file.
2026-04-28 15:01:40 +09:00
YeonGyu-Kim 7a3a835a22 feat(sisyphus): add Kimi K2.x prompt variant
- New src/agents/sisyphus/kimi-k2-6.ts based on gpt-5-4.ts 8-block architecture
- New src/agents/sisyphus-junior/kimi-k2-6.ts worker variant
- Preserves 4 pillars: intent gate + verbalization, parallel tools, verification
- Adds <re_entry_rule>: suppress re-verbalization for already-resolved turns
- Adds <exploration_budget>: hard stop conditions alongside aggressive parallelism
- Tiered <verification_loop> (V1/V2/V3): V3 keeps full rigor with harsh enforcement
- Adds <token_economy>: verbalization explicitly excluded from trim mandate
- isKimiK2Model in types.ts: matches kimi, k2p5/k2p6 variants (case-insensitive)
- Routing in sisyphus.ts + sisyphus-junior/agent.ts
- Tests: 3 new kimi routing cases in sisyphus-junior/index.test.ts (all pass)

Motivation: K2.x was post-trained with Toggle RL (~25-30% token reduction) and a
GRM scoring appropriate detail + intent inference. Reusing Claude-style prompts
double-taxes the model — external strictness on top of RL-learned strictness causes
over-deliberation on already-resolved requests. The re-entry rule and exploration
budget fix this without weakening verification rigor.

Refs: kimi.com/blog/kimi-k2-6, arxiv 2602.02276 §4.4.2 (Toggle, GRM)
2026-04-28 14:57:17 +09:00
YeonGyu-Kim 58e4b8f519 fix(telemetry): remove PostHog HAU tracking, keep DAU only 2026-04-28 14:51:33 +09:00
YeonGyu-Kim 84287f1da7 test(todo-continuation): make countdown toast test deterministic
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-04-28 13:59:52 +09:00
YeonGyu-Kim 2483dc7360 fix(agents): restore Opus Sisyphus prompt contracts
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-04-28 13:39:52 +09:00
YeonGyu-Kim c3fabaafaa refactor(agents): rewrite Hephaestus gpt-5.5 around outcome-first delegation contract 2026-04-28 13:29:35 +09:00
YeonGyu-Kim 6103df05f2 feat(agents): restore deep-work emphasis on Hephaestus gpt-5.5
The Codex 5.2 restyle in ad9df3f68 watered down the four deep-work
exhortations from gpt-5.4 (tool_call_philosophy, tool_persistence,
dependency_checks, dig_deeper) into a single bullet, leaving the
'deep worker' identity without behavioral teeth.

Restore them as Codex-style sub-sections under Exploration:
- Tool-call discipline: more calls = more accuracy, retry on partial,
  read more files than needed.
- Dig deeper: don't stop at first plausible answer, check second-order
  issues, prefer root over symptom (with concrete example).
- Dependency checks: resolve prerequisites before acting.
- Anti-duplication: extracted from inline paragraph to its own block.

LSP clean. 267 -> 315 lines.
2026-04-28 10:37:16 +09:00
YeonGyu-Kim 7a89b98165 refactor(agents): re-style Hephaestus gpt-5.5 in Codex 5.2 prompt structure
Previous prose-dense rewrite went too far in stripping bullet structure.
Codex 5.1/5.2 prompts (the closest reference for an OpenAI deep-worker
prompt) actually use bullets liberally - just well-grouped (4-6 per list)
with prose introductions on each section. Restructure 5.5 to mirror that
style and tone while preserving Hephaestus's identity and all behavioral
rules from the prior round.

Sections lifted directly from Codex 5.1/5.2 organization:
- # How you work / ## Personality at the top for tonal priming
- # AGENTS.md spec as a standalone section with its own bullets
- ## Autonomy and Persistence with prose intro + Three-attempt sub-protocol
- ## Responsiveness with Frequency, Tone, Content, Examples sub-blocks
  (examples rewritten to Hephaestus voice: 'Walking the agents/ tree',
  'Found the dispatch in createSisyphusAgent', etc.)
- ## Plan tool with 'use a plan when' bullet list
- ## Validating your work with approval-mode granularity
  (non-interactive / interactive / test-related)
- ## Presenting your work with categorical Final answer rules
  (Section Headers / Bullets / Monospace / File references / Tone /
  Verbosity / Don't)
- # Tool Guidelines as separate top-level section

Hephaestus-specific content preserved verbatim:
- Forge god identity, deep-worker / executor framing
- task() restricted to research subagents only
- Three-attempt failure protocol
- End-to-end usage gate (interactive_bash / playwright / curl / driver)
- Anti-duplication rule on parallel exploration

Amp-derived rules kept compact in their own ## Pragmatism and Scope:
- Smallest correct change, duplication > premature abstraction
- Default-no-tests with explicit exceptions
- WIP-not-legacy rule
- Multi-agent dirty worktree safety

Metrics: 110 -> 267 lines (still -14% from original 312), 4 -> 100 bullets
(grouped Codex-style, not scattered), 24 headers. 38/38 verification
checks pass; LSP clean.

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

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-04-28 10:37:16 +09:00
YeonGyu-Kim 4aae402547 refactor(agents): rewrite Hephaestus gpt-5.5 prose-dense from Codex 5.2 + Amp distillation
Prior 5.5 prompt enumerated rules across 60+ bullets and 312 lines, which
fights GPT-5.5's strength: it follows prose instructions reliably and does
not need rule-by-rule cataloging. Rewrite as flowing paragraphs while
preserving the deep-worker identity and every load-bearing behavior.

Identity preserved:
- Forge god mythology ("Your boulder is code", "forge it until done")
- Direct executor, not orchestrator (research subagents only)
- Senior-colleague tone, end-to-end persistence

Behaviors preserved (compressed to prose):
- Three-attempt failure protocol → 1 paragraph
- Anti-duplication on parallel exploration
- End-to-end usage gate (interactive_bash / playwright / curl / driver)
- Implementation gate: when delegated, execute directly, no draft loop

Net additions distilled from Amp + Codex 5.2 evolution:
- Pragmatism block: smallest correct change, duplication > premature
  abstraction, do not over-engineer, do not validate impossible scenarios
- Default-no-tests: add tests only when user asks, fixes a subtle bug,
  or protects an important boundary; never to codebases without tests
- WIP-not-legacy: earlier unreleased shapes in the same turn are drafts,
  not legacy contracts requiring backward compatibility
- Multi-agent worktree: continue task without reverting unknown changes
- Code-review mode trigger: "review" → findings-first, severity-sorted
- Personality-first opener (Codex 5.2 pattern) for tonal priming

Metrics: 312 → 110 lines (-65%), 60+ bullets → 4 bullets, 21,803 → 15,654
chars (-28%). 26/26 verification checks pass.

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

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-04-28 10:37:16 +09:00
YeonGyu-Kim 6775dd12bb feat(agents): mandate end-to-end usage validation on Hephaestus gpt-5.5 delegation
Hephaestus is the autonomous deep-worker - everything it receives is a
delegation. Existing 'Manual behavior' bullet vaguely said 'actually run
it' but left the validation surface unspecified, which lets a checked-in
diff plus passing tests masquerade as completion on user-visible work.

Add a dedicated 'End-to-end usage is the gate' subsection in Codex prose
style (no threats/CAPS, contract frames). Surface determines tool:

- TUI / CLI → interactive_bash (tmux), drive it like a real user
- Web / browser / UI → playwright skill, drive a real browser session
- HTTP API / service → curl or integration script against running service
- Library / SDK → minimal driver script

Reinforce in Forbidden stops trailer: when receiving a delegation,
execute directly and validate through the gate; do not loop back with
a draft when the work is yours to do.

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

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-04-27 21:38:50 +09:00
YeonGyu-Kim c3b98c4bfb feat(agents): mandate surface-matched manual QA tools on Opus 4.7 full delegation
The existing FULL DELEGATION manual-QA rule said 'use it yourself' but
left the choice of tool implicit. Make it explicit and non-optional, so
the agent cannot satisfy the gate by reading the source instead of
running the artifact.

Surface → tool mapping:
- TUI / CLI work → interactive_bash (tmux). Launch in real terminal,
  send keystrokes, run happy path, try bad input, hit --help.
- Web / browser / UI work → playwright skill. Drive a real browser,
  click elements, fill forms, watch console, screenshot if helpful.
- HTTP API / service work → curl or integration script against the
  running service.
- Library / SDK work → minimal driver script that imports + executes.
- Other surfaces → ask how a real user would discover it works, then
  do that.

Frame the gate as a contract violation when bypassed: reporting
'implementation complete' without using the matching tool is the same
failure pattern as deleting a failing test for a green build.

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

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-04-27 21:38:49 +09:00
YeonGyu-Kim 9e7b39102b feat(agents): require manual end-to-end QA on full-delegation Opus 4.7 tasks
Existing <verification> required tests pass + lsp clean + build green, but
that is insufficient for end-to-end delegation. Tests cover known cases;
they do not cover whether the user-visible feature actually works.

Add a NON-NEGOTIABLE rule: when the user hands off end-to-end ("ulw",
"implement and finish", "do the whole thing", "make it work", "ship it"),
verification escalates to:

1. BUILD the actual artifact
2. USE IT YOURSELF as a real user would
3. VERIFY end-to-end behavior matches the spec
4. TASK NOT DONE until usage confirms it works

Reporting "implementation complete" without having USED the artifact is
explicitly framed as a contract violation. Defects discovered during this
QA pass are the agent's to fix in the same turn.

This complements the existing 'lsp_diagnostics catches type errors, not
logic bugs' line by giving full-delegation cases a sharper, named gate.

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

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-04-27 21:30:48 +09:00
YeonGyu-Kim 9feb9f6fe5 refactor(agents): distill SMART production-prompt patterns into Opus 4.7 Sisyphus
Replace verbose v1 prompt with prose-dense, strong-directive version
that pulls in production-grade rules from a captured SMART agent prompt
while keeping all OhMyOpenCode-specific orchestration content.

Net additions:
- <autonomy_and_persistence>: redirect-as-refinement, never-revert-others-work,
  diagnose-before-retry. Critical for multi-agent worktree safety.
- <investigate_before_acting>: never speculate, ground every claim in tool output.
- <pragmatism_and_scope>: anti-overengineering rules. DUPLICATION > PREMATURE
  ABSTRACTION. Pairs naturally with Opus 4.7 literal-following.
- <verification>: report faithfully, never game tests, evidence requirements.
- <executing_actions_with_care>: reversibility framework with destructive examples.
- <using_subagents>: tighter spawning rules + summarize-result mandate.
- <file_links>: fluent file:// linking format for clickable references.

Trims:
- Mythology and redundant identity bullets compressed in <role>.
- <self_knowledge> stripped of redundancies (parallel/effort/progress/tone
  duplicated elsewhere); kept only literal-following + fewer-subagents.
- <example_subagent_spawning> reduced from 4 examples to 1.
- <example_session_continuity> dropped (prose covered it).
- <communication_style> compressed from 30 lines to 5 strong directives.
- Code Changes redundant rules removed (already in hardBlocks).

Strong-directive style: bold/CAPS on load-bearing rules per user preference.

Net result: 20,527 chars (down from 26,310 v1) yet richer behavioral coverage.
40/40 sacred-behavior + SMART-addition checks pass. LSP clean.

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

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-04-27 21:26:58 +09:00
YeonGyu-Kim 241fb70a4a test(delegate-task): add background-task test coverage
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-04-27 21:15:42 +09:00
YeonGyu-Kim e1b2fa9a14 test(call-omo-agent): add sync-executor test coverage
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-04-27 21:15:41 +09:00
YeonGyu-Kim bda7fdbbda test(background-agent): add spawner test coverage
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-04-27 21:15:40 +09:00
YeonGyu-Kim 2024c0cb84 feat(agents): wire Claude Opus 4.7 support into Sisyphus agent
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-04-27 21:15:38 +09:00
YeonGyu-Kim 41d4cbe811 feat(agents): add Claude Opus 4.7 native Sisyphus prompt builder
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-04-27 21:15:35 +09:00
YeonGyu-Kim 215c8f2315 feat(agents): add isClaudeOpus47Model type guard
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-04-27 21:15:31 +09:00
YeonGyu-Kim 8ad50b7e93 docs(agents): replace ZWSP policy with sort-shim policy
Document the canonical ordering mechanism (Array.prototype.toSorted/sort shim in src/shared/agent-sort-shim.ts) and forbid ZWSP, U+2060, U+00AD, ANSI escape, and ASCII space prefixes. Reference sst/opencode#19127 as the upstream fix that will obsolete the shim.

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

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-04-27 18:59:49 +09:00
YeonGyu-Kim 333ad3aadd refactor(agents): drop ZWSP prefixes from agent display names
The sort shim from the previous commit enforces canonical core ordering at runtime, so ZWSP prefixes are no longer needed. Removing them eliminates the Bun.stringWidth vs terminal-width drift that broke the TUI status bar (#3259).

Drop AGENT_LIST_SORT_PREFIXES and getAgentRuntimeName from agent-display-names; switch all call sites to getAgentDisplayName. getAgentListDisplayName stays as a thin alias for external importers.

Keep stripInvisibleAgentCharacters and the ZWSP regex paths so legacy session state and configs from v3.14.0-v3.16.0 still resolve.

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

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-04-27 18:59:49 +09:00
YeonGyu-Kim dffe5a305b feat(agents): add narrowly-scoped agent sort shim and install at plugin entry
OpenCode 1.4.x ignores the agent `order` field (sst/opencode#19127), so its
`Agent.list()` sorts purely by `agent.name` via Remeda `sortBy` which uses
native string `<`/`>` comparison. Without intervention, the four core agents
fall into alphabetical order (Atlas -> Hephaestus -> Prometheus -> Sisyphus),
which is not the canonical sisyphus -> hephaestus -> prometheus -> atlas order
the project ships.

Prior attempts to bias the sort key with invisible characters (ZWSP,
U+2060 WORD JOINER, U+00AD SOFT HYPHEN, ANSI escape) all caused
`Bun.stringWidth()` vs terminal-width drift, producing visible gaps and
column truncation in the TUI status bar (#3259, #3238).

Solution: a narrowly-scoped shim of `Array.prototype.toSorted` and
`Array.prototype.sort` that activates only when the array contains two or
more agent objects whose `.name` matches a canonical core display name.
The activation predicate guards against mixed-type arrays so unrelated
`.sort()` / `.toSorted()` calls (string arrays, number arrays, mixed
objects) execute native behavior unchanged. Install is idempotent.

Cubic P1 mitigations from PR #3267:
- `isAgentArray` rejects any array with non-object or null elements,
  eliminating the throw-on-mixed-array failure mode.
- Strict activation predicate (>= 2 ranked elements) keeps the global
  prototype patch from affecting unrelated sort calls.

Remove this shim once OpenCode honors the agent `order` field
(sst/opencode#19127).

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

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-04-27 18:55:33 +09:00
YeonGyu-Kim 557d66fc4c Merge pull request #3675 from code-yeongyu/fix/ralph-loop-remove-recovery-window
fix(ralph-loop): remove redundant recovery window that stalls loop after errors (fixes #3235)
2026-04-27 18:53:02 +09:00
YeonGyu-Kim c2a41a3519 Merge pull request #3674 from code-yeongyu/fix/doctor-parse-multi-slash-model
fix(doctor): parse provider/model with indexOf for multi-slash IDs (fixes #3380)
2026-04-27 18:52:58 +09:00
YeonGyu-Kim bde2955f8c fix(ralph-loop): remove stale error recovery window
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-04-27 18:22:53 +09:00