Attached multi-pane dev sessions were waking OpenClaw multiple times for
what operators experience as one session-start, prompt-submit, or stop
burst. The bridge now keeps a short-lived per-worktree dedupe ledger keyed
by tmux session (and normalized prompt for submit bursts) so the first
signal still ships while repeated pane/client echoes are collapsed before
reaching downstream native gateways.
Constraint: Duplicate bursts can come from separate panes or clients that share one tmux session
Constraint: Preserve the first lifecycle alert and avoid adding dependencies
Rejected: Deduplicate on sessionId alone | pane-local Claude sessions do not share a stable session id
Rejected: Fix only downstream Clawhip routing | duplicate traffic should be suppressed before gateway dispatch
Confidence: high
Scope-risk: narrow
Reversibility: clean
Directive: Keep prompt-submit collapse keyed on tmux session plus normalized prompt unless the UserPromptSubmit bridge contract changes
Tested: npx vitest run src/openclaw/__tests__/*.test.ts
Tested: npx vitest run src/hooks/__tests__/bridge-openclaw.test.ts
Tested: npx tsc --noEmit
Not-tested: Live OpenClaw delivery against a real attached multi-pane dev tmux session
* feat(setup): add rtk token optimization integration
* revert(setup): remove RTK integration from PR #1489
* fix(hooks): fail open on critical context exhaustion
* fix(skill): harden omc-teams tmux and agent validation
* Add Ralph critic selection for verification
* fix(doctor): accept supported omc config keys
* feat(openclaw): normalize native clawhip signals
* fix: skip legacy agent sync when plugin agents exist
* fix(hud): preserve stale usage limits on API failures
* Reduce startup OMC guidance context
* fix: clean up stale transient files on session end (#1510)
- session-end: cleanupTransientState now removes agent-replay-*.jsonl,
last-tool-error.json, hud-state.json, hud-stdin-cache.json,
idle-notif-cooldown.json, *-stop-breaker.json, cancel-signal files
inside session dirs, and empty session directories
- keyword-detector: activateState adds project_path field for parity
with TypeScript activateUltrawork in bridge.ts
- persistent-mode: readStateFileWithSession adds fallback scan of all
session directories when session-scoped path lookup fails
* fix(hud): reduce transient usage API retry hammering (#1513)
* fix(hooks): add missing continue: false to persistent-mode.cjs Stop hook
The .cjs Stop hook outputs `{ decision: "block" }` without
`continue: false` when blocking stops for active modes. The original
fix (#1216) added `continue: false` to the .mjs scripts but the .cjs
version was never updated, and subsequent commits (#1306, #1330, #1374,
#1480, #1482) did not carry over this fix.
Since hooks.json references the .cjs version, the plugin Stop hook has
been missing hard-block capability, allowing sessions to end mid-execution.
- Add `continue: false` to all 12 blocking outputs in persistent-mode.cjs
- Add `continue: false` to context-guard-stop.mjs (1 output)
- Add `continue: false` to code-simplifier.mjs and its template (1 each)
Closes#1516
* feat(doc-specialist): add first-pass context hub guidance (#1519)
* Add skill pipeline handoff metadata (#1520)
* chore: remove stale root development artifacts (#1526)
* docs(rebrand): update scoped guidance docs (#1527)
* docs: rebrand main README to oh-my-openagent (#1528)
* docs: rebrand localized readmes to oh-my-openagent (#1529)
* revert: undo unauthorized rebrand PRs 1527-1529
* docs: fix outdated install references in REFERENCE.md
- Update platform support table: "curl or npm" → "Claude Code Plugin"
for macOS/Linux, consistent with the deprecation notice at the top
of the Installation section
- Replace deprecated curl uninstall one-liner with the plugin uninstall
command (/plugin uninstall oh-my-claudecode@oh-my-claudecode)
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* docs: remove stale analytics references
* fix(team): port startup hardening from omx
* fix(team): finish runtime hardening port
* fix(team): resolve worktree mailbox trigger paths
* fix(hud): avoid repeated watch mode initialization
* feat: add session history search
* fix(team): require real startup evidence
* fix(routing): normalize explicit model IDs in all code paths (#1415)
The prior fix (PR #1464) only normalized auto-injected models but missed
two paths where full model IDs like 'claude-sonnet-4-6' leaked through:
1. enforceModel() passed explicitly-provided models as-is without
normalizing to CC aliases (sonnet/opus/haiku)
2. buildLaunchArgs() in model-contract.ts passed model directly to
--model flag for team worker launches
Extract normalizeToCcAlias() helper and apply it in both paths.
Add 5 tests covering explicit ID normalization and Bedrock ID handling.
Closes#1415
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
* chore(release): bump version to v4.7.10
Version bumps:
- package.json: 4.7.9 → 4.7.10
- .claude-plugin/plugin.json: 4.7.9 → 4.7.10
- .claude-plugin/marketplace.json: 4.7.9 → 4.7.10
- CHANGELOG.md: Updated release header
Includes rebuilt dist artifacts for:
- Bedrock model routing fixes
- Team runtime hardening
- Session history search feature
- Lazy agent loading
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
---------
Co-authored-by: ChoKhoOu <38033263+ChoKhoOu@users.noreply.github.com>
Co-authored-by: Yong <yong@levvels.com>
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
Co-authored-by: Carlos Cubas <carloscubas82@gmail.com>