Commit Graph

479 Commits

Author SHA1 Message Date
YeonGyu-Kim aeb9c97c30 fix(model): quota errors should STOP not retry 2026-04-05 09:13:14 +09:00
YeonGyu-Kim aa7e2aa07f test: isolate migrate-legacy-plugin-entry.test.ts to prevent mock contamination 2026-04-04 21:32:52 +09:00
YeonGyu-Kim f3840a7325 Merge pull request #2843 from code-yeongyu/refactor/model-alias-pattern-matching
refactor(aliases): migrate to pattern-based model alias resolution
2026-04-04 20:34:38 +09:00
YeonGyu-Kim 1f13e76d11 Merge pull request #3065 from code-yeongyu/fix/issue-2984-v2
fix: reset consecutiveFailures on abort so session recovers after user cancel
2026-04-04 20:34:10 +09:00
YeonGyu-Kim 55d5ecb9fb test: fresh-import remaining contamination-prone modules 2026-04-04 20:14:50 +09:00
YeonGyu-Kim 861ce1c161 test: remove provider and cache mock leak paths 2026-04-04 20:06:56 +09:00
YeonGyu-Kim 29a830dd89 test: remove remaining legacy warning mock leaks 2026-04-04 19:52:25 +09:00
YeonGyu-Kim a4db240d47 test: localize mock.module setup to fresh imports 2026-04-04 19:49:25 +09:00
YeonGyu-Kim 8b8559f39d test: load real modules with unique import ids 2026-04-04 19:42:18 +09:00
YeonGyu-Kim b0f754f506 test: import real modules in contamination-prone tests 2026-04-04 19:41:11 +09:00
YeonGyu-Kim 051a39889d test(shared): use unique temp dirs for legacy plugin warning 2026-04-04 19:33:17 +09:00
YeonGyu-Kim ad025ee0f8 test: isolate flaky shared-state tests 2026-04-04 19:20:59 +09:00
YeonGyu-Kim 733b54865f fix(config): handle tuple-format plugin entries in opencode.json (fixes #3122)
OpenCode supports plugin entries as [string, object] tuples for passing
options, but loadOpencodePlugins assumed all entries were strings.
When a tuple entry hit matchesKnownPlugin, it called .toLowerCase()
on an array, crashing the plugin on startup.

Extract the string name from tuple entries and skip non-string values.
Add regression test covering the tuple plugin format.
2026-04-04 16:44:40 +09:00
YeonGyu-Kim cba9c25543 Merge pull request #3111 from code-yeongyu/fix/prepublish-config-regression
fix(config): use canonical path after legacy migration and make writes atomic
2026-04-04 14:56:52 +09:00
YeonGyu-Kim 726d19c3cc fix(security): make tar parser strictly fail-closed on any unparsed line 2026-04-04 14:48:44 +09:00
YeonGyu-Kim 0c6907adc3 fix(config): use canonical path after legacy migration and make writes atomic 2026-04-04 14:46:29 +09:00
YeonGyu-Kim d368f77fcd fix(security): make tar archive preflight fail-closed on unparsed entries 2026-04-04 14:27:46 +09:00
YeonGyu-Kim 6acca09bd0 fix(ci): resolve mock.module() cross-file leakage in test suite
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-04-04 02:35:23 +09:00
YeonGyu-Kim f547cd013d refactor(shared): consolidate plugin entry migration and detection utilities 2026-04-04 02:10:27 +09:00
YeonGyu-Kim fd252ea82e refactor: remove AI-generated code smells from prepublish changes
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-04-04 02:02:12 +09:00
YeonGyu-Kim e4d7fdb7e9 Merge pull request #3092 from code-yeongyu/fix/prepublish-legacy-config
fix(shared): close legacy config migration gaps
2026-04-04 01:46:52 +09:00
YeonGyu-Kim f03c6700d4 fix(hooks): reuse shared legacy plugin migration helper
Replace the legacy toast regex writer with the shared atomic helper and route legacy plugin call sites through small wrappers so existing mock.module tests stop leaking across the suite.

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

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-04-04 01:32:59 +09:00
YeonGyu-Kim 290f7f9543 fix(shared): merge project and user opencode plugin detection
Stop dropping user-level plugin conflicts when an empty project config exists by collecting plugin entries from every supported OpenCode config path.

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

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-04-04 01:32:42 +09:00
YeonGyu-Kim fedb73c736 fix(shared): migrate legacy config files atomically
Write the canonical config through a temp file and remove the legacy dual-file trap by archiving or deleting the old basename after migration.

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

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-04-04 01:32:31 +09:00
YeonGyu-Kim d60ca63ed4 test(config): add regression coverage for legacy migration bugs
Lock the current legacy config and plugin migration failures in place before the fixes land so the three regressions stay covered.

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

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-04-04 01:32:17 +09:00
YeonGyu-Kim ccbd646a29 fix(shared): validate tar hard-link targets during preflight
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-04-04 01:16:37 +09:00
YeonGyu-Kim 553a961338 fix(shared): emit PowerShell zip entries as json lines
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-04-04 01:16:30 +09:00
YeonGyu-Kim 0c5deac232 test(shared): add archive preflight security regressions
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-04-04 01:16:21 +09:00
YeonGyu-Kim 53eeac3f31 fix(ci): simplify test runner to plain bun test by fixing mock.module() leakage
- Add afterAll(() => { mock.restore() }) to 52 test files missing cleanup
- Rewrite create-tool-guard-hooks.test.ts to use spyOn instead of barrel mock
- Fix skill-mcp-manager OAuth tests with missing mockTokens/mockLogin definitions
- Fix start-work hook: show worktree active block on resume with existing worktree_path
- Extract createWorktreeActiveBlock to worktree-block.ts to avoid circular import
- Replace 80-line isolated test runner CI config with single `bun test` command
2026-04-04 00:34:03 +09:00
YeonGyu-Kim e0feb16dab refactor(shared,config): remove redundant null checks and AI slop from code comments 2026-04-03 19:39:55 +09:00
YeonGyu-Kim d0f795dd8f refactor(shared): decompose model-capabilities into focused modules 2026-04-03 19:38:26 +09:00
YeonGyu-Kim 3cc9e8bc30 refactor(shared): extract shared cache factory to deduplicate cache patterns 2026-04-03 19:36:56 +09:00
YeonGyu-Kim 3180389dea Merge pull request #3052 from code-yeongyu/fix/p0-1-task-system-default-split-brain
fix: resolve task_system default split-brain
2026-04-03 18:52:40 +09:00
YeonGyu-Kim 1631509989 fix: reset hook state on abort so session recovers after user cancel
When a user cancels a generation (ESC x2), all three idle hooks could
enter a permanently broken state:

1. **todo-continuation-enforcer**: consecutiveFailures accumulated from
   abort-caused promptAsync failures, eventually hitting MAX_CONSECUTIVE_FAILURES
   and permanently stopping continuation injection.

2. **unstable-agent-babysitter**: no abort awareness at all — would keep
   firing reminders after user cancelled the session.

3. **runtime-fallback**: retry dedupe keys and pending fallback state
   persisted across cancellation, blocking legitimate error recovery.

Fix:
- Add shared `isAbortError()` utility for consistent abort detection
- Reset consecutiveFailures and clear stale state on AbortError in all hooks
- Track `lastCancelledAt` in todo-continuation-enforcer for abort window
- Add abort-awareness to unstable-agent-babysitter (skip if recently cancelled)
- Clear runtime-fallback retry state on abort errors

Tests: 61 pass, 0 fail across all 3 affected hook test suites.

Closes #2984
2026-04-03 18:51:10 +09:00
YeonGyu-Kim 71b8110ff0 fix(zip): parse zipinfo file entries with preserved filenames
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-04-03 18:38:14 +09:00
YeonGyu-Kim 2b43558349 fix(tar): surface traversal extraction failures as blocked entries
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-04-03 18:34:22 +09:00
YeonGyu-Kim a4f436c116 fix(tar): classify traversal tar listing errors as blocked entries
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-04-03 18:34:12 +09:00
YeonGyu-Kim 2288988f28 fix(zip): use zipinfo to preflight zip extraction on unix
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-04-03 18:34:12 +09:00
YeonGyu-Kim d65714eba0 fix(shared): avoid archive test batch regression
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-04-03 18:31:26 +09:00
YeonGyu-Kim 2ba2f8f5f7 fix(shared): add task_system resolver
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-04-03 18:31:26 +09:00
YeonGyu-Kim 83acafce48 Merge pull request #3058 from code-yeongyu/fix/p1-11-remove-as-any-tests
fix(tests): remove as any from new test files
2026-04-03 18:30:30 +09:00
YeonGyu-Kim 071f6c334d Merge pull request #3055 from code-yeongyu/fix/p1-8-legacy-config-canonical-priority
fix: prefer canonical plugin config files
2026-04-03 18:30:19 +09:00
YeonGyu-Kim f369971db9 fix(tests): type tmux fetch mocks
Model the tmux fetch test doubles with the fetch shape Bun expects so the tests drop  without changing assertions.

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

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-04-03 17:37:17 +09:00
YeonGyu-Kim b2b8f73d0d Fix tar traversal error normalization
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-04-03 17:28:22 +09:00
YeonGyu-Kim 22c8e8388f Fix Linux ZIP preflight entry listing
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-04-03 17:23:09 +09:00
YeonGyu-Kim b096e6f751 fix: prefer canonical plugin config files 2026-04-03 17:15:08 +09:00
YeonGyu-Kim 88b84a8517 test: cover canonical plugin config detection 2026-04-03 17:15:03 +09:00
YeonGyu-Kim f269d2fcc5 Fix local MCP scope path containment
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-04-03 17:14:40 +09:00
YeonGyu-Kim 156c1f4aeb fix(models): mark gpt-4.1-mini and gpt-4.1-nano as supporting tool calls
Fixes #2923
2026-04-02 15:45:39 +09:00
YeonGyu-Kim 9a7bb5eeb7 Merge pull request #3024 from code-yeongyu/fix/security-tar-containment
fix(security): add archive extraction containment validation
2026-04-02 15:09:52 +09:00