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
YeonGyu-Kim
d861d51959
fix(security): add archive extraction containment validation
...
Validate tar and zip entries before extraction to prevent path traversal:
- Reject absolute paths in archives
- Reject .. traversal paths
- Reject symlinks pointing outside extraction dir
- New archive-entry-validator module with comprehensive tests
Addresses: security audit finding for unsafe archive extraction.
2026-04-02 15:01:15 +09:00
YeonGyu-Kim
98659783c0
fix(security): confine file resolution to project roots
...
Block traversal, out-of-root absolute path, and symlink escapes for @file references, file:// URIs, and config skill file loading while logging rejected attempts.
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent )
Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai >
2026-04-02 14:55:35 +09:00