oh-my-codex 0.7.6 → 0.8.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.de.md +315 -0
- package/README.es.md +296 -17
- package/README.fr.md +315 -0
- package/README.it.md +315 -0
- package/README.ja.md +297 -18
- package/README.ko.md +296 -17
- package/README.md +110 -13
- package/README.pt.md +296 -17
- package/README.ru.md +296 -17
- package/README.tr.md +315 -0
- package/README.vi.md +297 -18
- package/README.zh-TW.md +362 -0
- package/README.zh.md +293 -17
- package/dist/catalog/__tests__/generator.test.js +2 -0
- package/dist/catalog/__tests__/generator.test.js.map +1 -1
- package/dist/catalog/__tests__/schema.test.js +7 -0
- package/dist/catalog/__tests__/schema.test.js.map +1 -1
- package/dist/cli/__tests__/ask.test.d.ts +2 -0
- package/dist/cli/__tests__/ask.test.d.ts.map +1 -0
- package/dist/cli/__tests__/ask.test.js +236 -0
- package/dist/cli/__tests__/ask.test.js.map +1 -0
- package/dist/cli/__tests__/doctor-warning-copy.test.d.ts +2 -0
- package/dist/cli/__tests__/doctor-warning-copy.test.d.ts.map +1 -0
- package/dist/cli/__tests__/doctor-warning-copy.test.js +45 -0
- package/dist/cli/__tests__/doctor-warning-copy.test.js.map +1 -0
- package/dist/cli/__tests__/index.test.js +85 -2
- package/dist/cli/__tests__/index.test.js.map +1 -1
- package/dist/cli/__tests__/ralph-prd-deep-interview.test.d.ts +2 -0
- package/dist/cli/__tests__/ralph-prd-deep-interview.test.d.ts.map +1 -0
- package/dist/cli/__tests__/ralph-prd-deep-interview.test.js +15 -0
- package/dist/cli/__tests__/ralph-prd-deep-interview.test.js.map +1 -0
- package/dist/cli/__tests__/ralph.test.js +19 -43
- package/dist/cli/__tests__/ralph.test.js.map +1 -1
- package/dist/cli/__tests__/setup-scope.test.js +2 -0
- package/dist/cli/__tests__/setup-scope.test.js.map +1 -1
- package/dist/cli/__tests__/team.test.js +219 -1
- package/dist/cli/__tests__/team.test.js.map +1 -1
- package/dist/cli/__tests__/version.test.d.ts +2 -0
- package/dist/cli/__tests__/version.test.d.ts.map +1 -0
- package/dist/cli/__tests__/version.test.js +21 -0
- package/dist/cli/__tests__/version.test.js.map +1 -0
- package/dist/cli/ask.d.ts +13 -0
- package/dist/cli/ask.d.ts.map +1 -0
- package/dist/cli/ask.js +174 -0
- package/dist/cli/ask.js.map +1 -0
- package/dist/cli/constants.d.ts +10 -0
- package/dist/cli/constants.d.ts.map +1 -0
- package/dist/cli/constants.js +10 -0
- package/dist/cli/constants.js.map +1 -0
- package/dist/cli/doctor.js +16 -5
- package/dist/cli/doctor.js.map +1 -1
- package/dist/cli/index.d.ts +8 -2
- package/dist/cli/index.d.ts.map +1 -1
- package/dist/cli/index.js +150 -52
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/ralph.d.ts +3 -11
- package/dist/cli/ralph.d.ts.map +1 -1
- package/dist/cli/ralph.js +64 -45
- package/dist/cli/ralph.js.map +1 -1
- package/dist/cli/setup.d.ts.map +1 -1
- package/dist/cli/setup.js +17 -18
- package/dist/cli/setup.js.map +1 -1
- package/dist/cli/team.d.ts.map +1 -1
- package/dist/cli/team.js +257 -0
- package/dist/cli/team.js.map +1 -1
- package/dist/hooks/__tests__/deep-interview-contract.test.d.ts +2 -0
- package/dist/hooks/__tests__/deep-interview-contract.test.d.ts.map +1 -0
- package/dist/hooks/__tests__/deep-interview-contract.test.js +55 -0
- package/dist/hooks/__tests__/deep-interview-contract.test.js.map +1 -0
- package/dist/hooks/__tests__/emulator.test.js +6 -0
- package/dist/hooks/__tests__/emulator.test.js.map +1 -1
- package/dist/hooks/__tests__/keyword-detector.test.js +44 -22
- package/dist/hooks/__tests__/keyword-detector.test.js.map +1 -1
- package/dist/hooks/__tests__/notify-hook-all-workers-idle.test.js +23 -7
- package/dist/hooks/__tests__/notify-hook-all-workers-idle.test.js.map +1 -1
- package/dist/hooks/__tests__/notify-hook-session-scope.test.js +59 -0
- package/dist/hooks/__tests__/notify-hook-session-scope.test.js.map +1 -1
- package/dist/hooks/__tests__/notify-hook-team-dispatch.test.js +264 -1
- package/dist/hooks/__tests__/notify-hook-team-dispatch.test.js.map +1 -1
- package/dist/hooks/__tests__/notify-hook-team-leader-nudge.test.js +61 -1
- package/dist/hooks/__tests__/notify-hook-team-leader-nudge.test.js.map +1 -1
- package/dist/hooks/__tests__/notify-hook-worker-idle.test.js +17 -7
- package/dist/hooks/__tests__/notify-hook-worker-idle.test.js.map +1 -1
- package/dist/hooks/__tests__/openclaw-setup-contract.test.d.ts +2 -0
- package/dist/hooks/__tests__/openclaw-setup-contract.test.d.ts.map +1 -0
- package/dist/hooks/__tests__/openclaw-setup-contract.test.js +61 -0
- package/dist/hooks/__tests__/openclaw-setup-contract.test.js.map +1 -0
- package/dist/hooks/__tests__/pre-context-gate-skills.test.d.ts +2 -0
- package/dist/hooks/__tests__/pre-context-gate-skills.test.d.ts.map +1 -0
- package/dist/hooks/__tests__/pre-context-gate-skills.test.js +34 -0
- package/dist/hooks/__tests__/pre-context-gate-skills.test.js.map +1 -0
- package/dist/hooks/__tests__/visual-verdict-loop.test.d.ts +2 -0
- package/dist/hooks/__tests__/visual-verdict-loop.test.d.ts.map +1 -0
- package/dist/hooks/__tests__/visual-verdict-loop.test.js +35 -0
- package/dist/hooks/__tests__/visual-verdict-loop.test.js.map +1 -0
- package/dist/hooks/agents-overlay.d.ts.map +1 -1
- package/dist/hooks/agents-overlay.js +18 -16
- package/dist/hooks/agents-overlay.js.map +1 -1
- package/dist/hooks/codebase-map.d.ts.map +1 -1
- package/dist/hooks/codebase-map.js +6 -2
- package/dist/hooks/codebase-map.js.map +1 -1
- package/dist/hooks/emulator.d.ts.map +1 -1
- package/dist/hooks/emulator.js +2 -0
- package/dist/hooks/emulator.js.map +1 -1
- package/dist/hooks/extensibility/sdk.d.ts.map +1 -1
- package/dist/hooks/extensibility/sdk.js +2 -1
- package/dist/hooks/extensibility/sdk.js.map +1 -1
- package/dist/hooks/keyword-registry.d.ts.map +1 -1
- package/dist/hooks/keyword-registry.js +6 -0
- package/dist/hooks/keyword-registry.js.map +1 -1
- package/dist/hud/index.d.ts.map +1 -1
- package/dist/hud/index.js +2 -24
- package/dist/hud/index.js.map +1 -1
- package/dist/mcp/__tests__/path-traversal.test.js +9 -227
- package/dist/mcp/__tests__/path-traversal.test.js.map +1 -1
- package/dist/mcp/__tests__/state-server-schema.test.js +16 -20
- package/dist/mcp/__tests__/state-server-schema.test.js.map +1 -1
- package/dist/mcp/__tests__/state-server-team-tools.test.js +30 -487
- package/dist/mcp/__tests__/state-server-team-tools.test.js.map +1 -1
- package/dist/mcp/code-intel-server.d.ts.map +1 -1
- package/dist/mcp/code-intel-server.js +18 -8
- package/dist/mcp/code-intel-server.js.map +1 -1
- package/dist/mcp/memory-server.js +72 -11
- package/dist/mcp/memory-server.js.map +1 -1
- package/dist/mcp/state-paths.d.ts.map +1 -1
- package/dist/mcp/state-paths.js +4 -1
- package/dist/mcp/state-paths.js.map +1 -1
- package/dist/mcp/state-server.d.ts +179 -0
- package/dist/mcp/state-server.d.ts.map +1 -1
- package/dist/mcp/state-server.js +221 -1111
- package/dist/mcp/state-server.js.map +1 -1
- package/dist/mcp/team-server.d.ts.map +1 -1
- package/dist/mcp/team-server.js +9 -3
- package/dist/mcp/team-server.js.map +1 -1
- package/dist/mcp/trace-server.d.ts.map +1 -1
- package/dist/mcp/trace-server.js +8 -3
- package/dist/mcp/trace-server.js.map +1 -1
- package/dist/notifications/__tests__/dispatch-cooldown.test.d.ts +5 -0
- package/dist/notifications/__tests__/dispatch-cooldown.test.d.ts.map +1 -0
- package/dist/notifications/__tests__/dispatch-cooldown.test.js +100 -0
- package/dist/notifications/__tests__/dispatch-cooldown.test.js.map +1 -0
- package/dist/notifications/__tests__/temp-mode.test.d.ts +2 -0
- package/dist/notifications/__tests__/temp-mode.test.d.ts.map +1 -0
- package/dist/notifications/__tests__/temp-mode.test.js +172 -0
- package/dist/notifications/__tests__/temp-mode.test.js.map +1 -0
- package/dist/notifications/config.d.ts.map +1 -1
- package/dist/notifications/config.js +67 -7
- package/dist/notifications/config.js.map +1 -1
- package/dist/notifications/dispatch-cooldown.d.ts +36 -0
- package/dist/notifications/dispatch-cooldown.d.ts.map +1 -0
- package/dist/notifications/dispatch-cooldown.js +109 -0
- package/dist/notifications/dispatch-cooldown.js.map +1 -0
- package/dist/notifications/dispatcher.d.ts.map +1 -1
- package/dist/notifications/dispatcher.js +4 -4
- package/dist/notifications/dispatcher.js.map +1 -1
- package/dist/notifications/index.d.ts +5 -0
- package/dist/notifications/index.d.ts.map +1 -1
- package/dist/notifications/index.js +39 -8
- package/dist/notifications/index.js.map +1 -1
- package/dist/notifications/reply-listener.d.ts.map +1 -1
- package/dist/notifications/reply-listener.js +6 -2
- package/dist/notifications/reply-listener.js.map +1 -1
- package/dist/notifications/session-registry.d.ts.map +1 -1
- package/dist/notifications/session-registry.js +2 -2
- package/dist/notifications/session-registry.js.map +1 -1
- package/dist/notifications/temp-contract.d.ts +22 -0
- package/dist/notifications/temp-contract.d.ts.map +1 -0
- package/dist/notifications/temp-contract.js +147 -0
- package/dist/notifications/temp-contract.js.map +1 -0
- package/dist/notifications/tmux.js +2 -2
- package/dist/notifications/tmux.js.map +1 -1
- package/dist/notifications/types.d.ts +18 -0
- package/dist/notifications/types.d.ts.map +1 -1
- package/dist/openclaw/__tests__/config.test.js +81 -0
- package/dist/openclaw/__tests__/config.test.js.map +1 -1
- package/dist/openclaw/__tests__/dispatcher.test.js +40 -1
- package/dist/openclaw/__tests__/dispatcher.test.js.map +1 -1
- package/dist/openclaw/config.d.ts +4 -0
- package/dist/openclaw/config.d.ts.map +1 -1
- package/dist/openclaw/config.js +110 -16
- package/dist/openclaw/config.js.map +1 -1
- package/dist/openclaw/dispatcher.d.ts +9 -3
- package/dist/openclaw/dispatcher.d.ts.map +1 -1
- package/dist/openclaw/dispatcher.js +42 -9
- package/dist/openclaw/dispatcher.js.map +1 -1
- package/dist/openclaw/types.d.ts +5 -1
- package/dist/openclaw/types.d.ts.map +1 -1
- package/dist/ralph/__tests__/persistence.test.js +28 -1
- package/dist/ralph/__tests__/persistence.test.js.map +1 -1
- package/dist/ralph/persistence.d.ts +21 -0
- package/dist/ralph/persistence.d.ts.map +1 -1
- package/dist/ralph/persistence.js +85 -2
- package/dist/ralph/persistence.js.map +1 -1
- package/dist/state/paths.d.ts +3 -0
- package/dist/state/paths.d.ts.map +1 -0
- package/dist/state/paths.js +2 -0
- package/dist/state/paths.js.map +1 -0
- package/dist/team/__tests__/api-interop.test.d.ts +2 -0
- package/dist/team/__tests__/api-interop.test.d.ts.map +1 -0
- package/dist/team/__tests__/api-interop.test.js +1052 -0
- package/dist/team/__tests__/api-interop.test.js.map +1 -0
- package/dist/team/__tests__/idle-nudge.test.d.ts +2 -0
- package/dist/team/__tests__/idle-nudge.test.d.ts.map +1 -0
- package/dist/team/__tests__/idle-nudge.test.js +225 -0
- package/dist/team/__tests__/idle-nudge.test.js.map +1 -0
- package/dist/team/__tests__/mcp-comm.test.js +30 -0
- package/dist/team/__tests__/mcp-comm.test.js.map +1 -1
- package/dist/team/__tests__/runtime.test.js +33 -26
- package/dist/team/__tests__/runtime.test.js.map +1 -1
- package/dist/team/__tests__/state-root.test.d.ts +2 -0
- package/dist/team/__tests__/state-root.test.d.ts.map +1 -0
- package/dist/team/__tests__/state-root.test.js +9 -0
- package/dist/team/__tests__/state-root.test.js.map +1 -0
- package/dist/team/__tests__/state.test.js +52 -17
- package/dist/team/__tests__/state.test.js.map +1 -1
- package/dist/team/__tests__/team-ops-contract.test.d.ts +2 -0
- package/dist/team/__tests__/team-ops-contract.test.d.ts.map +1 -0
- package/dist/team/__tests__/team-ops-contract.test.js +90 -0
- package/dist/team/__tests__/team-ops-contract.test.js.map +1 -0
- package/dist/team/__tests__/tmux-claude-workers-demo.test.d.ts +2 -0
- package/dist/team/__tests__/tmux-claude-workers-demo.test.d.ts.map +1 -0
- package/dist/team/__tests__/tmux-claude-workers-demo.test.js +176 -0
- package/dist/team/__tests__/tmux-claude-workers-demo.test.js.map +1 -0
- package/dist/team/__tests__/tmux-session.test.js +8 -0
- package/dist/team/__tests__/tmux-session.test.js.map +1 -1
- package/dist/team/__tests__/worker-bootstrap.test.js +29 -0
- package/dist/team/__tests__/worker-bootstrap.test.js.map +1 -1
- package/dist/team/__tests__/worktree.test.js +54 -1
- package/dist/team/__tests__/worktree.test.js.map +1 -1
- package/dist/team/api-interop.d.ts +19 -0
- package/dist/team/api-interop.d.ts.map +1 -0
- package/dist/team/api-interop.js +578 -0
- package/dist/team/api-interop.js.map +1 -0
- package/dist/team/mcp-comm.d.ts.map +1 -1
- package/dist/team/mcp-comm.js +32 -2
- package/dist/team/mcp-comm.js.map +1 -1
- package/dist/team/orchestrator.d.ts +1 -10
- package/dist/team/orchestrator.d.ts.map +1 -1
- package/dist/team/orchestrator.js +8 -0
- package/dist/team/orchestrator.js.map +1 -1
- package/dist/team/runtime-cli.js +14 -8
- package/dist/team/runtime-cli.js.map +1 -1
- package/dist/team/runtime.d.ts +2 -1
- package/dist/team/runtime.d.ts.map +1 -1
- package/dist/team/runtime.js +103 -30
- package/dist/team/runtime.js.map +1 -1
- package/dist/team/scaling.d.ts.map +1 -1
- package/dist/team/scaling.js +33 -12
- package/dist/team/scaling.js.map +1 -1
- package/dist/team/state/approvals.d.ts +25 -0
- package/dist/team/state/approvals.d.ts.map +1 -0
- package/dist/team/state/approvals.js +31 -0
- package/dist/team/state/approvals.js.map +1 -0
- package/dist/team/state/config.d.ts +2 -0
- package/dist/team/state/config.d.ts.map +1 -0
- package/dist/team/state/config.js +2 -0
- package/dist/team/state/config.js.map +1 -0
- package/dist/team/state/dispatch-lock.d.ts +3 -0
- package/dist/team/state/dispatch-lock.d.ts.map +1 -0
- package/dist/team/state/dispatch-lock.js +81 -0
- package/dist/team/state/dispatch-lock.js.map +1 -0
- package/dist/team/state/dispatch.d.ts +61 -0
- package/dist/team/state/dispatch.d.ts.map +1 -0
- package/dist/team/state/dispatch.js +158 -0
- package/dist/team/state/dispatch.js.map +1 -0
- package/dist/team/state/events.d.ts +2 -0
- package/dist/team/state/events.d.ts.map +1 -0
- package/dist/team/state/events.js +2 -0
- package/dist/team/state/events.js.map +1 -0
- package/dist/team/state/index.d.ts +11 -0
- package/dist/team/state/index.d.ts.map +1 -0
- package/dist/team/state/index.js +11 -0
- package/dist/team/state/index.js.map +1 -0
- package/dist/team/state/io.d.ts +2 -0
- package/dist/team/state/io.d.ts.map +1 -0
- package/dist/team/state/io.js +2 -0
- package/dist/team/state/io.js.map +1 -0
- package/dist/team/state/locks.d.ts +16 -0
- package/dist/team/state/locks.d.ts.map +1 -0
- package/dist/team/state/locks.js +201 -0
- package/dist/team/state/locks.js.map +1 -0
- package/dist/team/state/mailbox.d.ts +39 -0
- package/dist/team/state/mailbox.d.ts.map +1 -0
- package/dist/team/state/mailbox.js +58 -0
- package/dist/team/state/mailbox.js.map +1 -0
- package/dist/team/state/monitor.d.ts +96 -0
- package/dist/team/state/monitor.d.ts.map +1 -0
- package/dist/team/state/monitor.js +163 -0
- package/dist/team/state/monitor.js.map +1 -0
- package/dist/team/state/shutdown.d.ts +2 -0
- package/dist/team/state/shutdown.d.ts.map +1 -0
- package/dist/team/state/shutdown.js +2 -0
- package/dist/team/state/shutdown.js.map +1 -0
- package/dist/team/state/summary.d.ts +2 -0
- package/dist/team/state/summary.d.ts.map +1 -0
- package/dist/team/state/summary.js +2 -0
- package/dist/team/state/summary.js.map +1 -0
- package/dist/team/state/tasks.d.ts +49 -0
- package/dist/team/state/tasks.d.ts.map +1 -0
- package/dist/team/state/tasks.js +182 -0
- package/dist/team/state/tasks.js.map +1 -0
- package/dist/team/state/types.d.ts +281 -0
- package/dist/team/state/types.d.ts.map +1 -0
- package/dist/team/state/types.js +3 -0
- package/dist/team/state/types.js.map +1 -0
- package/dist/team/state/workers.d.ts +2 -0
- package/dist/team/state/workers.d.ts.map +1 -0
- package/dist/team/state/workers.js +2 -0
- package/dist/team/state/workers.js.map +1 -0
- package/dist/team/state-root.d.ts +5 -0
- package/dist/team/state-root.d.ts.map +1 -0
- package/dist/team/state-root.js +8 -0
- package/dist/team/state-root.js.map +1 -0
- package/dist/team/state.d.ts +4 -1
- package/dist/team/state.d.ts.map +1 -1
- package/dist/team/state.js +200 -881
- package/dist/team/state.js.map +1 -1
- package/dist/team/tmux-session.d.ts.map +1 -1
- package/dist/team/tmux-session.js +11 -10
- package/dist/team/tmux-session.js.map +1 -1
- package/dist/team/worker-bootstrap.d.ts.map +1 -1
- package/dist/team/worker-bootstrap.js +58 -26
- package/dist/team/worker-bootstrap.js.map +1 -1
- package/dist/team/worktree.d.ts.map +1 -1
- package/dist/team/worktree.js +43 -1
- package/dist/team/worktree.js.map +1 -1
- package/dist/utils/safe-json.d.ts +3 -0
- package/dist/utils/safe-json.d.ts.map +1 -0
- package/dist/utils/safe-json.js +19 -0
- package/dist/utils/safe-json.js.map +1 -0
- package/dist/utils/sleep.d.ts +3 -0
- package/dist/utils/sleep.d.ts.map +1 -0
- package/dist/utils/sleep.js +15 -0
- package/dist/utils/sleep.js.map +1 -0
- package/dist/visual/__tests__/verdict.test.d.ts +2 -0
- package/dist/visual/__tests__/verdict.test.d.ts.map +1 -0
- package/dist/visual/__tests__/verdict.test.js +81 -0
- package/dist/visual/__tests__/verdict.test.js.map +1 -0
- package/dist/visual/constants.d.ts +4 -0
- package/dist/visual/constants.d.ts.map +1 -0
- package/dist/visual/constants.js +3 -0
- package/dist/visual/constants.js.map +1 -0
- package/dist/visual/verdict.d.ts +17 -0
- package/dist/visual/verdict.d.ts.map +1 -0
- package/dist/visual/verdict.js +61 -0
- package/dist/visual/verdict.js.map +1 -0
- package/package.json +10 -3
- package/scripts/ask-claude.sh +17 -0
- package/scripts/ask-gemini.sh +14 -0
- package/scripts/demo-claude-workers.sh +241 -0
- package/scripts/demo-team-e2e.sh +179 -0
- package/scripts/fixtures/ask-advisor-stub.js +12 -0
- package/scripts/notify-hook/team-dispatch.js +234 -12
- package/scripts/notify-hook/team-leader-nudge.js +42 -2
- package/scripts/notify-hook/team-worker.js +63 -4
- package/scripts/notify-hook/visual-verdict.js +50 -1
- package/scripts/notify-hook.js +1 -0
- package/scripts/run-provider-advisor.js +179 -0
- package/skills/ask-claude/SKILL.md +61 -0
- package/skills/ask-gemini/SKILL.md +61 -0
- package/skills/autopilot/SKILL.md +32 -2
- package/skills/configure-notifications/SKILL.md +188 -186
- package/skills/deep-interview/SKILL.md +247 -0
- package/skills/omx-setup/SKILL.md +1 -1
- package/skills/ralph/SKILL.md +42 -11
- package/skills/ralplan/SKILL.md +17 -0
- package/skills/team/SKILL.md +64 -5
- package/skills/visual-verdict/SKILL.md +76 -0
- package/skills/web-clone/SKILL.md +366 -0
- package/skills/worker/SKILL.md +42 -11
- package/templates/AGENTS.md +9 -0
- package/templates/catalog-manifest.json +39 -18
- package/skills/configure-discord/SKILL.md +0 -256
- package/skills/configure-openclaw/SKILL.md +0 -267
- package/skills/configure-slack/SKILL.md +0 -226
- package/skills/configure-telegram/SKILL.md +0 -232
|
@@ -24,255 +24,257 @@ triggers:
|
|
|
24
24
|
|
|
25
25
|
# Configure OMX Notifications
|
|
26
26
|
|
|
27
|
-
Unified entry point for
|
|
28
|
-
OMX can notify you on Discord, Telegram, Slack, or your own OpenClaw gateway.
|
|
27
|
+
Unified and only entry point for notification setup.
|
|
29
28
|
|
|
30
|
-
|
|
29
|
+
- **Native integrations (first-class):** Discord, Telegram, Slack
|
|
30
|
+
- **Generic extensibility integrations:** `custom_webhook_command`, `custom_cli_command`
|
|
31
31
|
|
|
32
|
-
|
|
33
|
-
appropriate platform skill. It also handles cross-cutting settings like verbosity,
|
|
34
|
-
notification profiles, reply listener, and idle cooldown.
|
|
32
|
+
> Standalone configure skills (`configure-discord`, `configure-telegram`, `configure-slack`, `configure-openclaw`) are removed.
|
|
35
33
|
|
|
36
|
-
## Step 1:
|
|
34
|
+
## Step 1: Inspect Current State
|
|
37
35
|
|
|
38
36
|
```bash
|
|
39
37
|
CONFIG_FILE="$HOME/.codex/.omx-config.json"
|
|
40
38
|
|
|
41
39
|
if [ -f "$CONFIG_FILE" ]; then
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
echo "OPENCLAW_ENABLED=$OPENCLAW_ENABLED"
|
|
58
|
-
echo "VERBOSITY=$VERBOSITY"
|
|
59
|
-
echo "COOLDOWN=$COOLDOWN"
|
|
60
|
-
echo "REPLY_ENABLED=$REPLY_ENABLED"
|
|
40
|
+
jq -r '
|
|
41
|
+
{
|
|
42
|
+
notifications_enabled: (.notifications.enabled // false),
|
|
43
|
+
discord: (.notifications.discord.enabled // false),
|
|
44
|
+
discord_bot: (.notifications["discord-bot"].enabled // false),
|
|
45
|
+
telegram: (.notifications.telegram.enabled // false),
|
|
46
|
+
slack: (.notifications.slack.enabled // false),
|
|
47
|
+
openclaw: (.notifications.openclaw.enabled // false),
|
|
48
|
+
custom_webhook_command: (.notifications.custom_webhook_command.enabled // false),
|
|
49
|
+
custom_cli_command: (.notifications.custom_cli_command.enabled // false),
|
|
50
|
+
verbosity: (.notifications.verbosity // "session"),
|
|
51
|
+
idleCooldownSeconds: (.notifications.idleCooldownSeconds // 60),
|
|
52
|
+
reply_enabled: (.notifications.reply.enabled // false)
|
|
53
|
+
}
|
|
54
|
+
' "$CONFIG_FILE"
|
|
61
55
|
else
|
|
62
56
|
echo "NO_CONFIG_FILE"
|
|
63
57
|
fi
|
|
64
58
|
```
|
|
65
59
|
|
|
66
|
-
## Step 2:
|
|
60
|
+
## Step 2: Main Menu
|
|
67
61
|
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
```
|
|
71
|
-
OMX Notification Status
|
|
72
|
-
───────────────────────
|
|
73
|
-
Discord webhook: enabled / not configured
|
|
74
|
-
Discord bot: enabled / not configured
|
|
75
|
-
Telegram: enabled / not configured
|
|
76
|
-
Slack: enabled / not configured
|
|
77
|
-
OpenClaw: enabled / not configured
|
|
78
|
-
|
|
79
|
-
Verbosity: session (default)
|
|
80
|
-
Idle cooldown: 60s
|
|
81
|
-
Reply listener: disabled
|
|
82
|
-
```
|
|
83
|
-
|
|
84
|
-
Then use AskUserQuestion:
|
|
62
|
+
Use AskUserQuestion:
|
|
85
63
|
|
|
86
64
|
**Question:** "What would you like to configure?"
|
|
87
65
|
|
|
88
66
|
**Options:**
|
|
89
|
-
1. **Discord** -
|
|
90
|
-
2. **Telegram** -
|
|
91
|
-
3. **Slack** -
|
|
92
|
-
4. **
|
|
93
|
-
5. **
|
|
94
|
-
6. **
|
|
67
|
+
1. **Discord (native)** - webhook or bot
|
|
68
|
+
2. **Telegram (native)** - bot token + chat id
|
|
69
|
+
3. **Slack (native)** - incoming webhook
|
|
70
|
+
4. **Generic webhook command** - `custom_webhook_command`
|
|
71
|
+
5. **Generic CLI command** - `custom_cli_command`
|
|
72
|
+
6. **Cross-cutting settings** - verbosity, idle cooldown, profiles, reply listener
|
|
73
|
+
7. **Disable all notifications** - set `notifications.enabled = false`
|
|
95
74
|
|
|
96
|
-
## Step 3:
|
|
75
|
+
## Step 3: Configure Native Platforms (Discord / Telegram / Slack)
|
|
97
76
|
|
|
98
|
-
|
|
77
|
+
Collect and validate platform-specific values, then write directly under native keys:
|
|
99
78
|
|
|
100
|
-
-
|
|
101
|
-
-
|
|
102
|
-
-
|
|
103
|
-
-
|
|
104
|
-
- **Cross-cutting settings** → continue with Step 4 below
|
|
105
|
-
- **Disable all** → continue with Step 5 below
|
|
79
|
+
- Discord webhook: `notifications.discord`
|
|
80
|
+
- Discord bot: `notifications["discord-bot"]`
|
|
81
|
+
- Telegram: `notifications.telegram`
|
|
82
|
+
- Slack: `notifications.slack`
|
|
106
83
|
|
|
107
|
-
|
|
84
|
+
Do not write these as generic command/webhook aliases.
|
|
108
85
|
|
|
109
|
-
## Step 4:
|
|
86
|
+
## Step 4: Configure Generic Extensibility
|
|
110
87
|
|
|
111
|
-
|
|
88
|
+
### 4a) `custom_webhook_command`
|
|
112
89
|
|
|
113
|
-
|
|
90
|
+
Use AskUserQuestion to collect:
|
|
91
|
+
- URL
|
|
92
|
+
- Optional headers
|
|
93
|
+
- Optional method (`POST` default, or `PUT`)
|
|
94
|
+
- Optional event list (`session-end`, `ask-user-question`, `session-start`, `session-idle`, `stop`)
|
|
95
|
+
- Optional instruction template
|
|
114
96
|
|
|
115
|
-
|
|
97
|
+
Write:
|
|
116
98
|
|
|
117
|
-
|
|
99
|
+
```bash
|
|
100
|
+
jq \
|
|
101
|
+
--arg url "$URL" \
|
|
102
|
+
--arg method "${METHOD:-POST}" \
|
|
103
|
+
--arg instruction "${INSTRUCTION:-OMX event {{event}} for {{projectPath}}}" \
|
|
104
|
+
'.notifications = (.notifications // {enabled: true}) |
|
|
105
|
+
.notifications.enabled = true |
|
|
106
|
+
.notifications.custom_webhook_command = {
|
|
107
|
+
enabled: true,
|
|
108
|
+
url: $url,
|
|
109
|
+
method: $method,
|
|
110
|
+
instruction: $instruction,
|
|
111
|
+
events: ["session-end", "ask-user-question"]
|
|
112
|
+
}' "$CONFIG_FILE" > "$CONFIG_FILE.tmp" && mv "$CONFIG_FILE.tmp" "$CONFIG_FILE"
|
|
113
|
+
```
|
|
118
114
|
|
|
119
|
-
|
|
120
|
-
1. **session (Recommended)** - Start, idle, stop, end events + tmux snippet
|
|
121
|
-
2. **minimal** - Start, stop, end only (no idle events, no tmux tail)
|
|
122
|
-
3. **agent** - All session events plus ask-user-question prompts
|
|
123
|
-
4. **verbose** - Everything including tool call output
|
|
115
|
+
### 4b) `custom_cli_command`
|
|
124
116
|
|
|
125
|
-
|
|
117
|
+
Use AskUserQuestion to collect:
|
|
118
|
+
- Command template (supports `{{event}}`, `{{instruction}}`, `{{sessionId}}`, `{{projectPath}}`)
|
|
119
|
+
- Optional event list
|
|
120
|
+
- Optional instruction template
|
|
121
|
+
|
|
122
|
+
Write:
|
|
126
123
|
|
|
127
124
|
```bash
|
|
128
|
-
|
|
129
|
-
--arg
|
|
130
|
-
|
|
125
|
+
jq \
|
|
126
|
+
--arg command "$COMMAND_TEMPLATE" \
|
|
127
|
+
--arg instruction "${INSTRUCTION:-OMX event {{event}} for {{projectPath}}}" \
|
|
128
|
+
'.notifications = (.notifications // {enabled: true}) |
|
|
129
|
+
.notifications.enabled = true |
|
|
130
|
+
.notifications.custom_cli_command = {
|
|
131
|
+
enabled: true,
|
|
132
|
+
command: $command,
|
|
133
|
+
instruction: $instruction,
|
|
134
|
+
events: ["session-end", "ask-user-question"]
|
|
135
|
+
}' "$CONFIG_FILE" > "$CONFIG_FILE.tmp" && mv "$CONFIG_FILE.tmp" "$CONFIG_FILE"
|
|
131
136
|
```
|
|
132
137
|
|
|
133
|
-
|
|
138
|
+
> Activation gate: OpenClaw-backed dispatch is active only when `OMX_OPENCLAW=1`.
|
|
139
|
+
> For command gateways, also require `OMX_OPENCLAW_COMMAND=1`.
|
|
140
|
+
> Optional timeout env override: `OMX_OPENCLAW_COMMAND_TIMEOUT_MS` (ms).
|
|
134
141
|
|
|
135
|
-
### 4b
|
|
142
|
+
### 4b-1) OpenClaw + Clawdbot Agent Workflow (recommended for dev)
|
|
136
143
|
|
|
137
|
-
|
|
144
|
+
If the user explicitly asks to route hook notifications through **clawdbot agent turns**
|
|
145
|
+
(not direct message/webhook forwarding), use a command gateway that invokes
|
|
146
|
+
`clawdbot agent` and delivers back to Discord.
|
|
138
147
|
|
|
139
|
-
|
|
148
|
+
Notes:
|
|
149
|
+
- Hook name mapping is intentional: notifications `session-stop` -> OpenClaw hook `stop`.
|
|
150
|
+
- OMX shell-escapes template substitutions for command gateways (including `{{instruction}}`).
|
|
151
|
+
- Keep `instruction` templates concise and avoid untrusted shell metacharacters.
|
|
152
|
+
- During troubleshooting, avoid swallowing command output; route it to a log file.
|
|
153
|
+
- Timeout precedence: `gateways.<name>.timeout` > `OMX_OPENCLAW_COMMAND_TIMEOUT_MS` > `5000`.
|
|
154
|
+
- For clawdbot agent workflows, set `gateways.<name>.timeout` to `120000` (recommended).
|
|
155
|
+
- For dev operations, enforce Korean output in all hook instructions.
|
|
156
|
+
- Include both `session={{sessionId}}` and `tmux={{tmuxSession}}` in hook text for traceability.
|
|
157
|
+
- If follow-up is needed, explicitly instruct clawdbot to consult `SOUL.md` and continue in `#omc-dev`.
|
|
140
158
|
|
|
141
|
-
|
|
142
|
-
1. **60 seconds (default)** - At most once per minute
|
|
143
|
-
2. **300 seconds** - At most once per 5 minutes
|
|
144
|
-
3. **0 (disabled)** - Send every turn with no throttling
|
|
145
|
-
4. **Custom** - Enter a number of seconds
|
|
146
|
-
|
|
147
|
-
Write the cooldown to config:
|
|
159
|
+
Example (targeting `#omc-dev`):
|
|
148
160
|
|
|
149
161
|
```bash
|
|
150
|
-
|
|
151
|
-
--
|
|
152
|
-
'.notifications
|
|
162
|
+
jq \
|
|
163
|
+
--arg command "(clawdbot agent --session-id omx-hooks --message {{instruction}} --thinking minimal --deliver --reply-channel discord --reply-to '#omc-dev' --timeout 120 --json >/tmp/omx-openclaw-agent.log 2>&1)" \
|
|
164
|
+
'.notifications = (.notifications // {enabled: true}) |
|
|
165
|
+
.notifications.enabled = true |
|
|
166
|
+
.notifications.verbosity = "verbose" |
|
|
167
|
+
.notifications.events = (.notifications.events // {}) |
|
|
168
|
+
.notifications.events["session-start"] = {enabled: true} |
|
|
169
|
+
.notifications.events["session-idle"] = {enabled: true} |
|
|
170
|
+
.notifications.events["ask-user-question"] = {enabled: true} |
|
|
171
|
+
.notifications.events["session-stop"] = {enabled: true} |
|
|
172
|
+
.notifications.events["session-end"] = {enabled: true} |
|
|
173
|
+
.notifications.openclaw = (.notifications.openclaw // {}) |
|
|
174
|
+
.notifications.openclaw.enabled = true |
|
|
175
|
+
.notifications.openclaw.gateways = (.notifications.openclaw.gateways // {}) |
|
|
176
|
+
.notifications.openclaw.gateways["local"] = {
|
|
177
|
+
type: "command",
|
|
178
|
+
command: $command,
|
|
179
|
+
timeout: 120000
|
|
180
|
+
} |
|
|
181
|
+
.notifications.openclaw.hooks = (.notifications.openclaw.hooks // {}) |
|
|
182
|
+
.notifications.openclaw.hooks["session-start"] = {
|
|
183
|
+
enabled: true,
|
|
184
|
+
gateway: "local",
|
|
185
|
+
instruction: "OMX hook=session-start project={{projectName}} session={{sessionId}} tmux={{tmuxSession}}. 한국어로 상태를 공유하고 SOUL.md를 참고해 필요한 후속 조치를 #omc-dev에 안내하세요."
|
|
186
|
+
} |
|
|
187
|
+
.notifications.openclaw.hooks["session-idle"] = {
|
|
188
|
+
enabled: true,
|
|
189
|
+
gateway: "local",
|
|
190
|
+
instruction: "OMX hook=session-idle project={{projectName}} session={{sessionId}} tmux={{tmuxSession}}. 한국어로 idle 상황을 간단히 공유하고 진행중인 작업 팔로업을 안내하세요."
|
|
191
|
+
} |
|
|
192
|
+
.notifications.openclaw.hooks["ask-user-question"] = {
|
|
193
|
+
enabled: true,
|
|
194
|
+
gateway: "local",
|
|
195
|
+
instruction: "OMX hook=ask-user-question session={{sessionId}} tmux={{tmuxSession}} question={{question}}. 한국어로 사용자 응답 필요를 #omc-dev에 알리고 즉시 액션 아이템을 제시하세요."
|
|
196
|
+
} |
|
|
197
|
+
.notifications.openclaw.hooks["stop"] = {
|
|
198
|
+
enabled: true,
|
|
199
|
+
gateway: "local",
|
|
200
|
+
instruction: "OMX hook=session-stop project={{projectName}} session={{sessionId}} tmux={{tmuxSession}}. 한국어로 중단 상태와 정리 액션을 SOUL.md 기준으로 전달하세요."
|
|
201
|
+
} |
|
|
202
|
+
.notifications.openclaw.hooks["session-end"] = {
|
|
203
|
+
enabled: true,
|
|
204
|
+
gateway: "local",
|
|
205
|
+
instruction: "OMX hook=session-end project={{projectName}} session={{sessionId}} tmux={{tmuxSession}} reason={{reason}}. 한국어로 완료 요약을 1줄로 남기고 필요한 후속 조치를 안내하세요."
|
|
206
|
+
}' "$CONFIG_FILE" > "$CONFIG_FILE.tmp" && mv "$CONFIG_FILE.tmp" "$CONFIG_FILE"
|
|
153
207
|
```
|
|
154
208
|
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
### 4c. Notification Profiles
|
|
209
|
+
Verification for this mode:
|
|
158
210
|
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
Notification Profiles
|
|
163
|
-
─────────────────────
|
|
164
|
-
Profiles let you switch notification targets based on context.
|
|
165
|
-
For example: a "work" profile for your work Slack, a "personal"
|
|
166
|
-
profile for your personal Telegram.
|
|
167
|
-
|
|
168
|
-
Activate a profile with: OMX_NOTIFY_PROFILE=work
|
|
169
|
-
or set a default: .omx-config.json > notifications.defaultProfile
|
|
211
|
+
```bash
|
|
212
|
+
clawdbot agent --session-id omx-hooks --message "OMX hook test via clawdbot agent path" \
|
|
213
|
+
--thinking minimal --deliver --reply-channel discord --reply-to '#omc-dev' --timeout 120 --json
|
|
170
214
|
```
|
|
171
215
|
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
**Question:** "Would you like to configure notification profiles?"
|
|
175
|
-
|
|
176
|
-
**Options:**
|
|
177
|
-
1. **Yes** - Set up named profiles
|
|
178
|
-
2. **No, use flat config** - Keep the current single-config setup
|
|
179
|
-
|
|
180
|
-
If yes, guide the user to manually add profiles under `notifications.profiles` in `.omx-config.json`, and set `defaultProfile`.
|
|
216
|
+
Dev runbook (Korean + tmux follow-up):
|
|
181
217
|
|
|
182
|
-
|
|
218
|
+
```bash
|
|
219
|
+
# 1) identify active OMX tmux sessions
|
|
220
|
+
tmux list-sessions -F '#{session_name}' | rg '^omx-' || true
|
|
183
221
|
|
|
184
|
-
|
|
222
|
+
# 2) confirm hook templates include session/tmux context
|
|
223
|
+
jq '.notifications.openclaw.hooks' "$CONFIG_FILE"
|
|
185
224
|
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
──────────────
|
|
189
|
-
The reply listener lets you send messages back to Codex from
|
|
190
|
-
Discord (bot) or Telegram. When OMX asks for input, you can
|
|
191
|
-
reply directly from your phone or messaging app.
|
|
192
|
-
|
|
193
|
-
Requires:
|
|
194
|
-
- Discord Bot or Telegram platform configured
|
|
195
|
-
- OMX_REPLY_ENABLED=true in your shell profile
|
|
196
|
-
- For Discord: OMX_REPLY_DISCORD_USER_IDS=<your user ID>
|
|
197
|
-
(only messages from these IDs are accepted for security)
|
|
225
|
+
# 3) inspect agent logs when delivery looks broken
|
|
226
|
+
tail -n 120 /tmp/omx-openclaw-agent.log
|
|
198
227
|
```
|
|
199
228
|
|
|
200
|
-
|
|
229
|
+
### 4c) Compatibility + precedence contract
|
|
201
230
|
|
|
202
|
-
|
|
231
|
+
OMX accepts both:
|
|
232
|
+
- explicit `notifications.openclaw` schema (legacy/runtime shape)
|
|
233
|
+
- generic aliases (`custom_webhook_command`, `custom_cli_command`)
|
|
203
234
|
|
|
204
|
-
|
|
205
|
-
1. **
|
|
206
|
-
2.
|
|
235
|
+
Deterministic precedence:
|
|
236
|
+
1. `notifications.openclaw` **wins** when present and valid.
|
|
237
|
+
2. Generic aliases are ignored in that case (with warning).
|
|
207
238
|
|
|
208
|
-
|
|
239
|
+
## Step 5: Cross-Cutting Settings
|
|
209
240
|
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
'.notifications.reply = (.notifications.reply // {}) |
|
|
213
|
-
.notifications.reply.enabled = true' > "$CONFIG_FILE"
|
|
214
|
-
```
|
|
215
|
-
|
|
216
|
-
And remind them to set `OMX_REPLY_ENABLED=true` and (for Discord) `OMX_REPLY_DISCORD_USER_IDS`.
|
|
241
|
+
### Verbosity
|
|
242
|
+
- minimal / session (recommended) / agent / verbose
|
|
217
243
|
|
|
218
|
-
|
|
244
|
+
### Idle cooldown
|
|
245
|
+
- `notifications.idleCooldownSeconds`
|
|
219
246
|
|
|
220
|
-
|
|
247
|
+
### Profiles
|
|
248
|
+
- `notifications.profiles`
|
|
249
|
+
- `notifications.defaultProfile`
|
|
221
250
|
|
|
222
|
-
|
|
251
|
+
### Reply listener
|
|
252
|
+
- `notifications.reply.enabled`
|
|
253
|
+
- env gates: `OMX_REPLY_ENABLED=true`, and for Discord `OMX_REPLY_DISCORD_USER_IDS=...`
|
|
223
254
|
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
**Options:**
|
|
227
|
-
1. **Yes, disable all** - Set notifications.enabled = false
|
|
228
|
-
2. **No, go back** - Return to the main menu
|
|
229
|
-
|
|
230
|
-
If confirmed:
|
|
255
|
+
## Step 6: Disable All Notifications
|
|
231
256
|
|
|
232
257
|
```bash
|
|
233
|
-
|
|
234
|
-
'.notifications.enabled = false' > "$CONFIG_FILE"
|
|
258
|
+
jq '.notifications.enabled = false' "$CONFIG_FILE" > "$CONFIG_FILE.tmp" && mv "$CONFIG_FILE.tmp" "$CONFIG_FILE"
|
|
235
259
|
```
|
|
236
260
|
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
## Step 6: After Configuration
|
|
240
|
-
|
|
241
|
-
After completing any platform or setting configuration, offer to configure another:
|
|
242
|
-
|
|
243
|
-
Use AskUserQuestion:
|
|
261
|
+
## Step 7: Verification Guidance
|
|
244
262
|
|
|
245
|
-
|
|
263
|
+
After writing config, run a smoke check:
|
|
246
264
|
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
265
|
+
```bash
|
|
266
|
+
npm run build
|
|
267
|
+
```
|
|
250
268
|
|
|
251
|
-
|
|
269
|
+
For OpenClaw-like HTTP integrations, verify both:
|
|
270
|
+
- `/hooks/wake` smoke test
|
|
271
|
+
- `/hooks/agent` delivery verification
|
|
252
272
|
|
|
253
|
-
|
|
273
|
+
## Final Summary Template
|
|
254
274
|
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
Verbosity: session
|
|
263
|
-
Idle cooldown: 60s
|
|
264
|
-
Reply listener: disabled
|
|
265
|
-
|
|
266
|
-
Config saved to: ~/.codex/.omx-config.json
|
|
267
|
-
|
|
268
|
-
Quick reference — env vars:
|
|
269
|
-
OMX_DISCORD_WEBHOOK_URL=...
|
|
270
|
-
OMX_TELEGRAM_BOT_TOKEN=...
|
|
271
|
-
OMX_TELEGRAM_CHAT_ID=...
|
|
272
|
-
OMX_SLACK_WEBHOOK_URL=...
|
|
273
|
-
OMX_NOTIFY_VERBOSITY=session
|
|
274
|
-
OMX_IDLE_COOLDOWN_SECONDS=60
|
|
275
|
-
OMX_OPENCLAW=1
|
|
276
|
-
|
|
277
|
-
Run /configure-notifications again to update any settings.
|
|
278
|
-
```
|
|
275
|
+
Show:
|
|
276
|
+
- Native platforms enabled
|
|
277
|
+
- Generic aliases enabled (`custom_webhook_command`, `custom_cli_command`)
|
|
278
|
+
- Whether explicit `notifications.openclaw` exists (and therefore overrides aliases)
|
|
279
|
+
- Verbosity + idle cooldown + reply listener state
|
|
280
|
+
- Config path (`~/.codex/.omx-config.json`)
|