YeonGyu-Kim
36e373cdbb
feat(workspace): point planning guardrails at omo
2026-05-16 17:41:35 +09:00
Enoch
d11613999a
fix tool execute after hook boundary
2026-05-15 23:37:45 +09:00
YeonGyu-Kim
c580b8f2ce
fix(session): ignore internal synthetic turns
2026-05-15 23:16:05 +09:00
YeonGyu-Kim
2bd4944bad
fix(prompt-gate): scope reservation releases
2026-05-15 21:52:29 +09:00
rshks
b504fb1deb
fix(tool-pair-validator): emit schema-compatible synthetic tool results
2026-05-15 21:04:03 +09:00
YeonGyu-Kim
8dcbccf063
fix(tmux): inject pane action dependencies
2026-05-15 17:54:43 +09:00
YeonGyu-Kim
462b55efc7
Merge pull request #4040 from code-yeongyu/cleanup/typescript-ai-slop-20260515
...
Refactor TypeScript cleanup patterns
2026-05-15 16:42:10 +09:00
YeonGyu-Kim
a9886ccbb7
refactor(plugin): remove metadata assertions
...
Guard optional plugin metadata and pane identifiers before passing them to cleanup and warning paths.
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent )
Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai >
2026-05-15 16:31:13 +09:00
YeonGyu-Kim
d8f52aae7f
test: run suite without split runner
2026-05-15 16:26:57 +09:00
YeonGyu-Kim
15e7330ff0
fix(team-mode): gate status injection by keyword
2026-05-15 15:35:35 +09:00
YeonGyu-Kim
9f6d0d2281
docs(agents-md): refresh hierarchical knowledge base for v4.1.2
...
- Bump root AGENTS.md header: 2026-05-14 → 2026-05-15, commit 5ffbe0e24 → 53a740636 , release v4.1.1 → v4.1.2
- Update file counts: 2034 (1337+697) → 2041 (1340+701), LOC ~292k → ~294k
- Fix STRUCTURE: openclaw lives at src/openclaw/ (not src/features/); list more accurate feature modules in the parenthetical
- Clarify interactive_bash gate: tmux binary on PATH via isInteractiveBashEnabled() (not 'tmux enabled')
- Fix docs/reference/features.md hook counts: Tool Guard 14→16, Total base 52→54, total with team-mode 59→61
- Bump 'Generated' date on all 43 subdir AGENTS.md files to 2026-05-15
- Preserve promptAsync injection cautions verbatim (per request)
2026-05-15 13:48:11 +09:00
YeonGyu-Kim
c2aa180e7e
fix(prompt-gate): pin duplicate prompt dispatches
...
Keep prompt reservations briefly after successful dispatch so rapid idle/message/error transitions cannot inject the same follow-up twice.
Route all production session prompt calls through the shared gate, restore skipped background resume state, release holds after abort/recovery paths, and preserve Ralph/ULW loop state when a dispatch is deferred.
Add regression coverage for session routing, static prompt route auditing, team-mode live messaging, model suggestion retries, call-omo-agent reuse, background parent wakes, runtime fallback, compaction recovery, Atlas, and Ralph/ULW loops.
2026-05-15 13:19:10 +09:00
YeonGyu-Kim
edf3e530d4
fix(hooks): gate sync injected prompts
2026-05-15 12:55:56 +09:00
YeonGyu-Kim
dd6271bbf4
fix(babysitter): gate reminder prompts
2026-05-15 12:55:56 +09:00
YeonGyu-Kim
c75f548863
fix(fallback): gate model retry prompts
2026-05-15 12:55:56 +09:00
YeonGyu-Kim
23dfe7eec2
fix(fallback): skip duplicate fallback re-arms
...
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent )
Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai >
2026-05-15 11:45:21 +09:00
YeonGyu-Kim
b7482ea727
test(fallback): type chat output assertions
...
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent )
Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai >
2026-05-15 11:28:18 +09:00
YeonGyu-Kim
26bb6231b6
fix(fallback): preserve provider-specific fallback retries
...
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent )
Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai >
2026-05-15 11:14:26 +09:00
YeonGyu-Kim
005d16dd96
fix(fallback): dedupe providerless fallback errors
...
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent )
Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai >
2026-05-15 11:14:26 +09:00
YeonGyu-Kim
da339204bb
fix(fallback): dedupe overlapping fallback continuations
...
Guard model fallback continuation dispatch so overlapping message.updated/session.error surfaces issue only one abort+promptAsync cycle for the same failed fallback.
Refs https://github.com/code-yeongyu/oh-my-openagent/issues/4019
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent )
Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai >
2026-05-15 11:14:26 +09:00
YeonGyu-Kim
1e7a7600a2
docs(agents-md): regenerate hierarchical AGENTS.md knowledge base for v4.1.1
...
Refresh all AGENTS.md files to reflect codebase state at 5ffbe0e24 (was cd31d2a1a , 197 commits behind).
Key drift corrections across 45 modified + 1 new file:
Root AGENTS.md:
- TS file counts: 1967 -> 2034 in src/ (1337 source + 697 test)
- LOC: 278k -> 292k
- Barrel index.ts: 120 -> 122
- Hook tier composition: 52/59 -> 54/61 (base/with team-mode)
- Tool Guard hooks: 14 -> 16 (add fsync-skip-warning, bash-file-read-guard)
- Add boulder feature, agent-ordering schema, .agents/ directory, v4.1.1 release tag
- Add generated/ directory entry
src/AGENTS.md:
- Subsystem inventory: agents 96->102, hooks 570->581, tools 306->314,
features 389->400, shared 258->278, cli 150->158, plugin 55->56
- LOC totals refreshed for every subsystem
- Schema files: 32 -> 30
src/hooks/AGENTS.md:
- Tier 2 (Tool Guard): 14 -> 16 hooks, add fsyncSkipWarning row
- Total: 52 base / 59 team-mode -> 54 base / 61 team-mode
- zauc-mocks count: 7 -> 5
src/features/AGENTS.md:
- background-agent: 47 -> 57 files, mention archive fallback
- opencode-skill-loader: 33 -> 30
- tmux-subagent: 34 -> 32
src/plugin/AGENTS.md:
- Tool Guard composer count: 14 -> 16
- Aggregator total: 43 -> 45
src/cli/AGENTS.md:
- Add new boulder subcommand (BoulderState inspector)
- Command count: 6 -> 7
NEW: src/features/boulder-state/AGENTS.md
- Document the new Boulder work tracking feature
- Schema v2 with BoulderState/BoulderWorkState/TaskSessionState
- Lifecycle, storage, integration points with atlas/ralph-loop hooks
All other AGENTS.md files: Generated date 2026-05-08 -> 2026-05-14.
2026-05-14 12:57:46 +09:00
YeonGyu-Kim
5ffbe0e24e
fix(fallback): guard duplicate prompt injections
2026-05-14 01:03:19 +09:00
YeonGyu-Kim
36f51ddb16
fix(continuation): mark fallback resumes synthetic
2026-05-13 13:36:25 +09:00
YeonGyu-Kim
d5fbada13d
test: make unsafe test coercion explicit
...
Move test coercion out of a hidden global and require each test to import the helper so review tools and runtime scripts can see the unsafe boundary.
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent )
Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai >
2026-05-12 15:51:31 +09:00
YeonGyu-Kim
f05aeaa63a
test(plugin): remove unsafe test assertions
...
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent )
Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai >
2026-05-12 15:41:17 +09:00
YeonGyu-Kim
9ffef79dbb
fix(ralph-loop): ignore synthetic idle replays
2026-05-12 15:28:46 +09:00
YeonGyu-Kim
4da48555ee
fix(plugin): normalize event session ids
...
Handle OpenCode session events that carry the session ID under properties.info.id or properties.info.sessionID so background tasks and continuation hooks do not miss idle/error/delete events.
Add regression coverage for nested session.idle events completing background tasks and waking continuation hooks.
2026-05-12 12:32:26 +09:00
YeonGyu-Kim
3ed4651b7a
fix(compaction): skip autocontinue for compaction agent
2026-05-11 18:46:29 +09:00
YeonGyu-Kim
0fd918ea80
fix(delegate-task): preserve native task metadata
2026-05-11 13:08:56 +09:00
YeonGyu-Kim
954aa1f121
fix(compaction): isolate preservation hook failures
2026-05-11 12:54:32 +09:00
YeonGyu-Kim
4b281f949e
Merge pull request #3914 from code-yeongyu/fix/max-output-tokens
...
fix: prevent non-positive maxOutputTokens from leaking to SDK
2026-05-11 09:22:39 +09:00
YeonGyu-Kim
50dffc9952
Merge pull request #3911 from code-yeongyu/fix/todo-diag-blocked-alert
...
fix(plugin): allow real session.idle after synthetic idle within dedup window
2026-05-11 09:22:31 +09:00
YeonGyu-Kim
2f8ce576dc
fix(chat-params): use conservative token fallback for invalid limits
...
Avoid inflating non-positive maxOutputTokens values to model capability maxima by always falling back to a safe fixed budget.
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent )
Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai >
2026-05-11 08:47:49 +09:00
YeonGyu-Kim
2168040ac6
fix(plugin): scope synthetic-idle dedup bypass to matching marker
...
Only clear recentAnyIdles when the stored marker matches the synthetic idle timestamp for the same session, preventing accidental clobbering of newer idle markers. Add a regression test to verify other sessions keep their dedup state during this bypass path.
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent )
Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai >
2026-05-11 08:45:34 +09:00
acamq
299275094f
Revert "fix(tool-execute-after): cap excessively long tool output to prevent TUI flooding ( fixes #3586 )"
2026-05-10 17:33:36 -06:00
YeonGyu-Kim
41629b5262
fix(plugin): guard assistant prefill message tails
2026-05-10 15:54:29 +09:00
YeonGyu-Kim
279f0d150f
fix(chat-params): guard non-positive max output tokens
2026-05-10 15:03:01 +09:00
YeonGyu-Kim
a196d84c2e
fix(plugin): allow real session.idle after synthetic idle within dedup window
...
When session.status(idle) is converted to synthetic session.idle and recorded in recentAnyIdles, a real session.idle arriving within 500ms was being dropped by the dedup logic. recentSyntheticIdles was cleared but recentAnyIdles persisted, causing TODO-DIAG to red-alert with 'no todossession.idle event'.
Fix: when real session.idle arrives, also clear recentAnyIdles entry so dedup does not drop it. Test renamed and expected dispatchCalls updated 1 → 2.
Fixes #2667
2026-05-10 14:54:01 +09:00
YeonGyu-Kim
dd29e9b96a
fix(compaction): restore context and todos before continue
2026-05-10 13:54:27 +09:00
YeonGyu-Kim
43b0529557
feat(hooks): surface fsync-skip warnings to AI agent via tool output
...
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent )
Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai >
2026-05-08 15:08:34 +09:00
YeonGyu-Kim
838b5ae216
docs(agents): refresh hierarchical AGENTS.md with team-mode coverage
...
Update root + 43 directory-level AGENTS.md files to reflect current state:
- Root AGENTS.md rewritten with accurate counts (1967 TS files, 1304 source +
663 test, 278k LOC, 120 barrel index.ts), 7-step init flow, 5-tier hook
composition, and full Team Mode section (12 team_* tools, eligibility,
storage layout, config gate)
- src/AGENTS.md adds team-mode init step, current per-subdir file/LOC table
- src/tools/AGENTS.md documents conditional gates (team-mode +12, task
system +4, hashline +1, interactive_bash +1, look_at +1) with always-on
baseline of 20
- src/hooks/AGENTS.md splits into 5 tiers + 4 conditional team-mode hooks
- src/features/team-mode/AGENTS.md surfaces 12 tools, eligible agents,
spawn-race-safe invariants, and integration points
- src/features/builtin-skills/AGENTS.md tracks 10 skills incl. team-mode
- src/agents/AGENTS.md, src/plugin/AGENTS.md, src/config/AGENTS.md updated
for team-mode awareness, accurate counts, and current schema field list
- All other AGENTS.md files refreshed to 2026-05-08 generation date
2026-05-08 12:08:42 +09:00
YeonGyu-Kim
ee938aa097
fix full-suite isolation regressions
2026-05-07 18:36:03 +09:00
herjarsa
3a93a40e68
fix(desktop): hide bun:sqlite import from Node.js/Electron ESM loader
...
Uses new Function() to prevent the static ESM loader from seeing
the bun: protocol import at parse time. In Electron/Node.js, the
import() call is evaluated at runtime and gracefully returns null
when bun:sqlite is unavailable.
Fixes #3829 , likely fixes #3762
2026-05-07 10:38:31 +02:00
YeonGyu-Kim
1ad0fd4ac8
Merge pull request #3748 from code-yeongyu/fix/simple-github-bugs-1948-3564
...
fix: resolve simple triaged GitHub bugs
2026-05-06 18:43:58 +09:00
YeonGyu-Kim
9dd0e9fb0e
Merge pull request #3622 from MoerAI/fix/truncate-tool-error-output
...
fix(tool-execute-after): cap excessively long tool output to prevent TUI flooding (fixes #3586 )
2026-05-06 17:22:53 +09:00
YeonGyu-Kim
62a7356de3
Merge pull request #3621 from MoerAI/fix/skill-tool-respects-plugins-config
...
fix(tool-registry): pass plugins config to skill tool for proper command filtering (fixes #3582 )
2026-05-06 17:15:01 +09:00
Samuele Domenico Ruffino
6cd40df4cb
feat(opencode-go): upgrade glm-5 → glm-5.1 and kimi-k2.5 → kimi-k2.6 in fallback chains
2026-05-06 16:45:30 +09:00
YeonGyu-Kim
267745fa2f
test(plugin): remove forbidden assertions in event tests
...
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent )
Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai >
2026-05-06 14:20:50 +09:00
YeonGyu-Kim
91b7fcab3a
fix(plugin): replace any type with explicit summarize overloads in event handler
...
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent )
Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai >
2026-05-06 14:20:50 +09:00
YeonGyu-Kim
91c0d75588
feat(keyword-detector): add per-keyword disable config
...
Adds keyword_detector.disabled_keywords config so users can opt out of
specific keyword detectors individually without disabling the entire
keyword-detector hook. Allowed values: 'ultrawork', 'search', 'analyze',
'team'. Default empty/missing -> all four detectors active (no behavior
change for existing configs).
Motivation: an audit revealed search and analyze patterns trigger on
~30-60% of normal conversational user messages (e.g. 'how to', 'why is',
'show me', '왜', '어떻게'). The disable list is the immediate kill switch
while the patterns themselves are tightened in a separate PR.
Schema follows the existing per-feature config block convention shared
by team_mode, ralph_loop, runtime_fallback, and comment_checker. The
KeywordType enum (z.enum) lives next to the config schema and is
re-imported by the detector to keep the union type in lockstep with the
schema.
Threading:
pluginConfig.keyword_detector
-> create-transform-hooks.ts (factory wiring)
-> createKeywordDetectorHook(config)
-> detectKeywordsWithType(text, agent, model, disabledKeywords)
-> Set-based filter at the source-of-truth detector
Adds 8 regression tests covering per-keyword disable, multi-keyword
disable, partial disable (one keyword off, another still firing),
ultrawork toast suppression, undefined config, and empty array.
2026-05-06 14:19:40 +09:00