YeonGyu-Kim
bd2e23584b
docs: update AGENTS.md metadata
...
🤖 Generated with assistance of [OhMyOpenCode](https://github.com/code-yeongyu/oh-my-opencode )
2026-02-19 10:46:40 +09:00
YeonGyu-Kim
2034cf137a
docs: add module-level AGENTS.md for config-manager, keyword-detector, ralph-loop, session-recovery, todo-continuation-enforcer
...
🤖 Generated with assistance of [OhMyOpenCode](https://github.com/code-yeongyu/oh-my-opencode )
2026-02-19 10:46:40 +09:00
YeonGyu-Kim
a28e989f83
docs: add module-level AGENTS.md for mcp-oauth, atlas, rules-injector, background-task, call-omo-agent, lsp
...
🤖 Generated with assistance of [OhMyOpenCode](https://github.com/code-yeongyu/oh-my-opencode )
2026-02-19 10:46:40 +09:00
YeonGyu-Kim
6df7f73f81
refactor: remove dead ultrawork model override code
...
Remove ultrawork-model-override hook and per-agent ultrawork model swap
config that relied on zen opencode.ai free tier (no longer functional).
Removed:
- src/hooks/ultrawork-model-override/ (hook, test, index)
- ultrawork field from AgentOverrideConfigSchema
- ultrawork-model-override from HookNameSchema
- UltraworkConfig type from model-fallback-types
- Non-max20 sonnet+ultrawork-opus codepath from model-fallback
- Claude subscription model table from installation docs
- All references in plugin-interface, create-session-hooks, schema.json
- Related test cases and updated snapshots
2026-02-19 03:17:40 +09:00
YeonGyu-Kim
b4183339e7
fix(tests): stabilize auto-update-checker isolation under bun
2026-02-19 01:40:58 +09:00
YeonGyu-Kim
6e16087779
fix(tests): update atlas hook and auto-update-checker tests
...
- atlas hook: update verification reminder assertions to match new
4-phase QA system (MANDATORY -> PHASE 1/2, LIE -> LYING)
- auto-update-checker: add missing revertPinnedVersion mock export
to fix SyntaxError in background-update-check tests
Note: 4 auto-update-checker tests fail only when run alongside
checker.test.ts due to bun mock.module isolation issue (pre-existing
in v3.7.3, not a regression)
2026-02-18 23:13:16 +09:00
YeonGyu-Kim
096db59399
fix(run): inherit main-session tool permissions for continuation prompts
2026-02-18 21:10:21 +09:00
YeonGyu-Kim
305d036577
Merge pull request #1549 from MoerAI/fix/windows-path-absolute-check
...
fix(hooks): use path.isAbsolute() for cross-platform path detection on Windows
2026-02-18 18:04:13 +09:00
YeonGyu-Kim
a493227fe4
Merge pull request #1822 from Strocs/fix/non-interactive-env-hook-duplication
...
fix(non-interactive-env): prevent environment variable duplication on repeated executions
2026-02-18 18:03:50 +09:00
YeonGyu-Kim
75ff6e1be1
feat(atlas): enforce 4-phase critical QA with mandatory hands-on verification
...
Rewrite Atlas GPT verification from a checklist to a 4-phase protocol:
Phase 1 (Read Code First), Phase 2 (Automated Checks), Phase 3 (Hands-On QA),
Phase 4 (Gate Decision). Hands-on QA is now mandatory for user-facing changes,
not 'if applicable'. Hook message reinforces subagent distrust and requires
actually running deliverables before proceeding to next task.
2026-02-18 17:50:26 +09:00
YeonGyu-Kim
376bd7428a
test(hooks): add ultrawork-model-override unit tests
2026-02-18 17:47:08 +09:00
YeonGyu-Kim
e863fe2013
feat(hooks): add ultrawork-model-override hook for per-agent model swap
2026-02-18 17:47:08 +09:00
YeonGyu-Kim
a60a153d19
refactor(hooks): rename sisyphus-gpt-hephaestus-reminder to no-sisyphus-gpt
...
Shorter hook name, disableable via disabled_hooks config, migration added
for backward compatibility. Also forces agent switch to Hephaestus on
Sisyphus + GPT detection. Docs updated with new hook name.
2026-02-18 16:33:16 +09:00
YeonGyu-Kim
a49e05fd56
fix(hooks): fix sisyphus-gpt-hephaestus-reminder never matching agent name
...
Use getAgentConfigKey() to normalize display names (e.g. 'Sisyphus (Ultraworker)')
back to config keys before comparison. Update toast to 10s duration with clearer
line-broken messaging.
2026-02-18 16:26:47 +09:00
YeonGyu-Kim
96ff1e00cc
chore: upgrade claude-sonnet-4-5 to claude-sonnet-4-6 across codebase
2026-02-18 15:51:24 +09:00
YeonGyu-Kim
3313ec3e4f
chore: regenerate AGENTS.md knowledge base
...
🤖 Generated with [OhMyOpenCode](https://github.com/code-yeongyu/oh-my-opencode ) assistance
2026-02-18 01:26:19 +09:00
YeonGyu-Kim
0bffdc441e
feat(hooks): add sisyphus-gpt-hephaestus-reminder hook
...
Shows error toast when Sisyphus runs with a GPT model, nudging user to
use Hephaestus instead.
🤖 Generated with [OhMyOpenCode](https://github.com/code-yeongyu/oh-my-opencode )
2026-02-18 01:08:40 +09:00
YeonGyu-Kim
d0bd24bede
fix(cli-run): rely on continuation markers for completion
...
Use hook-written continuation marker state to gate run completion checks and remove the noisy event-stream shutdown timeout log in run mode.
2026-02-17 17:50:47 +09:00
YeonGyu-Kim
f4eef9f534
Merge pull request #1907 from BowTiedSwan/fix/json-retry-loop
...
feat(hooks): add json-error-recovery hook to prevent infinite retry loops
2026-02-17 15:59:44 +09:00
YeonGyu-Kim
5f939f900a
fix(hooks): harden json-error-recovery matching and scope
2026-02-17 15:46:21 +09:00
YeonGyu-Kim
462e2ec2b0
refactor: remove 3 orphaned files and prefix unused parameter
2026-02-17 14:09:12 +09:00
YeonGyu-Kim
aac79f03b5
docs: regenerate all AGENTS.md files from comprehensive codebase exploration
...
- Fired 33 parallel explore agents across all major directories
- Analyzed 1164 TS files, 133k LOC, 41 hooks, 26 tools, 11 agents, 18 features
- Regenerated 13 AGENTS.md files with 905 total lines
- Root: plugin architecture, initialization flow, 7 OpenCode hook handlers
- src/: entry point orchestration, hook composition pipeline
- agents/: 11 agent inventory with tool restrictions and factory patterns
- hooks/: 41 hooks organized by 5 tiers, key complex hooks documented
- tools/: 26 tools across 14 directories, delegation categories
- features/: 18 modules mapped by complexity (HIGH/MEDIUM/LOW)
- shared/: 101 utilities in 13 categories, model resolution pipeline
- config/: 22 schema files, Zod v4 validation system
- cli/: 5 commands, doctor checks, model fallback system
- mcp/: 3-tier MCP system architecture
- plugin-handlers/: 6-phase config loading pipeline
- claude-code-hooks/: CC settings.json compatibility layer
- claude-tasks/: task schema + file-based persistence
🤖 Generated with assistance of oh-my-opencode
2026-02-17 11:17:01 +09:00
YeonGyu-Kim
d786691260
fix: read anthropic 1m flag from live model cache state
2026-02-17 10:51:01 +09:00
YeonGyu-Kim
363016681b
test: cover model-cache and env fallback context limits
2026-02-17 10:51:01 +09:00
YeonGyu-Kim
b444899153
fix: use model cache context flag for runtime context limits
2026-02-17 10:51:01 +09:00
bowtiedswan
86f2a93fc9
feat(hooks): add json-error-recovery hook to prevent infinite retry loops
2026-02-16 21:35:58 +02:00
YeonGyu-Kim
2b5887aca3
fix: prevent overlapping poll cycles in managers
...
Guarding polling re-entry avoids stacked async polls under slow responses, and unref on pending-call cleanup timer reduces idle wakeups.
2026-02-17 03:06:40 +09:00
YeonGyu-Kim
c44509b397
fix: skip startup toasts in CLI run mode for auto-update-checker
...
Add OPENCODE_CLI_RUN_MODE environment variable check to skip all startup
toasts and version checks when running in CLI mode. This prevents
notification spam during automated CLI run sessions.
Includes comprehensive test coverage for CLI run mode behavior.
🤖 Generated with OhMyOpenCode assistance
2026-02-17 02:34:39 +09:00
YeonGyu-Kim
b7497d0f9f
Merge branch 'dev' into fix/1700-vertex-anthropic
2026-02-17 01:54:11 +09:00
YeonGyu-Kim
d672eb1c12
fix: recognize google-vertex-anthropic as Claude provider ( #1700 )
2026-02-17 01:28:27 +09:00
YeonGyu-Kim
af7b1ee620
refactor(hashline): override native edit tool instead of separate tool + disabler hook
...
Replace 3-component hashline system (separate hashline_edit tool + edit
disabler hook + OpenAI-exempted read enhancer) with 2-component system
that directly overrides the native edit tool key, matching the
delegate_task pattern.
- Register hashline tool as 'edit' key to override native edit
- Delete hashline-edit-disabler hook (no longer needed)
- Delete hashline-provider-state module (no remaining consumers)
- Remove OpenAI exemption from read enhancer (explicit opt-in means all providers)
- Remove setProvider wiring from chat-params
2026-02-17 00:03:10 +09:00
YeonGyu-Kim
51dde4d43f
feat(hashline): port hashline edit tool from oh-my-pi
...
This PR ports the hashline edit tool from oh-my-pi to oh-my-opencode as an experimental feature.
## Features
- New experimental.hashline_edit config flag
- hashline_edit tool with 4 operations: set_line, replace_lines, insert_after, replace
- Hash-based line anchors for safe concurrent editing
- Edit tool disabler for non-OpenAI providers
- Read output enhancer with LINE:HASH prefixes
- Provider state tracking module
## Technical Details
- xxHash32-based 2-char hex hashes
- Bottom-up edit application to prevent index shifting
- OpenAI provider exemption (uses native apply_patch)
- 90 tests covering all operations and edge cases
- All files under 200 LOC limit
## Files Added/Modified
- src/tools/hashline-edit/ (7 files, ~400 LOC)
- src/hooks/hashline-edit-disabler/ (4 files, ~200 LOC)
- src/hooks/hashline-read-enhancer/ (3 files, ~400 LOC)
- src/features/hashline-provider-state.ts (13 LOC)
- src/config/schema/experimental.ts (hashline_edit flag)
- src/config/schema/hooks.ts (2 new hook names)
- src/plugin/tool-registry.ts (conditional registration)
- src/plugin/chat-params.ts (provider state tracking)
- src/tools/index.ts (export)
- src/hooks/index.ts (exports)
2026-02-17 00:03:10 +09:00
YeonGyu-Kim
158ca3f22b
refactor: remove unused params/imports/types from lsp-tools, task-tools, delegate-task, skill-loader, context-window-monitor, plugin-config
2026-02-16 22:12:21 +09:00
YeonGyu-Kim
9dbb9552b8
refactor: remove unused imports from auto-update-checker, claude-code-hooks, mcp
2026-02-16 22:11:38 +09:00
YeonGyu-Kim
bfabad7681
refactor: remove unused imports from interactive-bash-session, session-recovery, start-work
2026-02-16 22:11:35 +09:00
YeonGyu-Kim
169c07ebf8
refactor: remove unused imports from injector, tool-result-storage-sdk, session-notification-utils, model-resolver
2026-02-16 22:11:05 +09:00
YeonGyu-Kim
8dd3d07efd
refactor: remove unused hasIgnoredParts variables from context-window-limit-recovery
2026-02-16 22:10:44 +09:00
YeonGyu-Kim
560d13dc70
Normalize agent name comparisons to handle display name keys
...
Hooks and tools now use getAgentConfigKey() to resolve agent names (which may
be display names like 'Atlas (Plan Executor)') to lowercase config keys
before comparison.
- session-utils: orchestrator check uses getAgentConfigKey
- atlas event-handler: boulder agent matching uses config keys
- category-skill-reminder: target agent check uses config keys
- todo-continuation-enforcer: skipAgents comparison normalized
- subagent-resolver: resolves 'metis' -> 'Metis (Plan Consultant)' for lookup
2026-02-16 20:43:09 +09:00
YeonGyu-Kim
66e66e5d73
test: add tests for SDK recovery modules (empty-content-recovery, recover-empty-content-message)
2026-02-16 18:20:32 +09:00
YeonGyu-Kim
1a6810535c
refactor: create normalizeSDKResponse helper and replace scattered patterns across 37 files
2026-02-16 18:20:19 +09:00
YeonGyu-Kim
eb6067b6a6
fix: rename prompt_async to promptAsync for SDK compatibility
2026-02-16 16:52:06 +09:00
YeonGyu-Kim
c1681ef9ec
fix: normalize SDK response shape in readMessagesFromSDK
...
Use response.data ?? response to handle both object and array-shaped
SDK responses, consistent with all other SDK readers.
2026-02-16 16:13:40 +09:00
YeonGyu-Kim
9889ac0dd9
fix: handle array-shaped SDK responses in getSdkMessages & dedup getMessageDir
...
- getSdkMessages now handles both response.data and direct array
responses from SDK
- Consolidated getMessageDir: storage.ts now re-exports from shared
opencode-message-dir.ts (with path traversal guards)
2026-02-16 16:13:40 +09:00
YeonGyu-Kim
5a6a9e9800
fix: defensive SDK response handling & parts-reader normalization
...
- Replace all response.data ?? [] with (response.data ?? response)
pattern across 14 files to handle SDK array-shaped responses
- Normalize SDK parts in parts-reader.ts by injecting sessionID/
messageID before validation (P1: SDK parts lack these fields)
- Treat unknown part types as having content in
recover-empty-content-message-sdk.ts to prevent false placeholder
injection on image/file parts
- Replace local isRecord with shared import in parts-reader.ts
2026-02-16 16:13:40 +09:00
YeonGyu-Kim
8edf6ed96f
fix: address 5 SDK compatibility issues from Cubic round 8
...
- P1: Use compacted timestamp check instead of nonexistent truncated
field in target-token-truncation.ts
- P1: Use defensive (response.data ?? response) pattern in
hook-message-injector/injector.ts to match codebase convention
- P2: Filter by tool type in countTruncatedResultsFromSDK to avoid
counting non-tool compacted parts
- P2: Treat thinking/meta-only messages as empty in both
empty-content-recovery-sdk.ts and message-builder.ts to align
SDK path with file-based logic
2026-02-16 16:13:40 +09:00
YeonGyu-Kim
cfb8164d9a
docs: regenerate all 13 AGENTS.md files from deep codebase exploration
2026-02-16 16:13:40 +09:00
YeonGyu-Kim
c2012c6027
fix: address 8-domain Oracle review findings (C1, C2, M1-M4)
...
- C1: thinking-prepend unique part IDs per message (global PK collision)
- C2: recover-thinking-disabled-violation try/catch guard on SDK call
- M1: remove non-schema truncated/originalSize fields from SDK interfaces
- M2: messageHasContentFromSDK treats thinking-only messages as non-empty
- M3: syncAllTasksToTodos persists finalTodos + no-id rename dedup guard
- M4: AbortSignal.timeout(30s) on HTTP fetch calls in opencode-http-api
All 2739 tests pass, typecheck clean.
2026-02-16 16:13:40 +09:00
YeonGyu-Kim
106cd5c8b1
fix: re-read fresh messages before empty scan & dedup isRecord import
...
- Re-read messages from SDK after injectTextPartAsync to prevent stale
snapshot from causing duplicate placeholder injection (P2)
- Replace local isRecord with shared import from record-type-guard (P3)
2026-02-16 16:13:40 +09:00
YeonGyu-Kim
c799584e61
fix: address Cubic round-6 P2/P3 issues
...
- P2: treat unknown part types as non-content in message-builder messageHasContentFromSDK
- P3: reuse shared isRecord from record-type-guard.ts in opencode-http-api
2026-02-16 16:13:40 +09:00
YeonGyu-Kim
3fe9c1f6e4
fix: address Cubic round-5 P1/P2 issues
...
- P1: add path traversal guard to getMessageDir (reject .., /, \)
- P2: treat unknown part types as non-content in messageHasContentFromSDK
2026-02-16 16:13:40 +09:00