oh-my-codex 0.6.3 → 0.7.0
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.md +19 -9
- package/bin/omx.js +3 -5
- package/dist/agents/__tests__/definitions.test.d.ts +2 -0
- package/dist/agents/__tests__/definitions.test.d.ts.map +1 -0
- package/dist/agents/__tests__/definitions.test.js +35 -0
- package/dist/agents/__tests__/definitions.test.js.map +1 -0
- package/dist/agents/__tests__/native-config.test.d.ts +2 -0
- package/dist/agents/__tests__/native-config.test.d.ts.map +1 -0
- package/dist/agents/__tests__/native-config.test.js +48 -0
- package/dist/agents/__tests__/native-config.test.js.map +1 -0
- package/dist/catalog/__tests__/schema.test.js +15 -0
- package/dist/catalog/__tests__/schema.test.js.map +1 -1
- package/dist/catalog/schema.d.ts.map +1 -1
- package/dist/catalog/schema.js +6 -0
- package/dist/catalog/schema.js.map +1 -1
- package/dist/cli/__tests__/catalog-contract.test.d.ts +2 -0
- package/dist/cli/__tests__/catalog-contract.test.d.ts.map +1 -0
- package/dist/cli/__tests__/catalog-contract.test.js +18 -0
- package/dist/cli/__tests__/catalog-contract.test.js.map +1 -0
- package/dist/cli/__tests__/doctor-team.test.js +3 -2
- package/dist/cli/__tests__/doctor-team.test.js.map +1 -1
- package/dist/cli/__tests__/error-handling-warnings.test.d.ts +2 -0
- package/dist/cli/__tests__/error-handling-warnings.test.d.ts.map +1 -0
- package/dist/cli/__tests__/error-handling-warnings.test.js +35 -0
- package/dist/cli/__tests__/error-handling-warnings.test.js.map +1 -0
- package/dist/cli/__tests__/index.test.js +81 -8
- package/dist/cli/__tests__/index.test.js.map +1 -1
- package/dist/cli/__tests__/setup-agents-overwrite.test.d.ts +2 -0
- package/dist/cli/__tests__/setup-agents-overwrite.test.d.ts.map +1 -0
- package/dist/cli/__tests__/setup-agents-overwrite.test.js +124 -0
- package/dist/cli/__tests__/setup-agents-overwrite.test.js.map +1 -0
- package/dist/cli/__tests__/setup-scope.test.js +79 -21
- package/dist/cli/__tests__/setup-scope.test.js.map +1 -1
- package/dist/cli/__tests__/setup-skills-overwrite.test.d.ts +2 -0
- package/dist/cli/__tests__/setup-skills-overwrite.test.d.ts.map +1 -0
- package/dist/cli/__tests__/setup-skills-overwrite.test.js +32 -0
- package/dist/cli/__tests__/setup-skills-overwrite.test.js.map +1 -0
- package/dist/cli/__tests__/star-prompt.test.js +74 -0
- package/dist/cli/__tests__/star-prompt.test.js.map +1 -1
- package/dist/cli/__tests__/team.test.js +8 -0
- package/dist/cli/__tests__/team.test.js.map +1 -1
- package/dist/cli/doctor.d.ts.map +1 -1
- package/dist/cli/doctor.js +75 -18
- package/dist/cli/doctor.js.map +1 -1
- package/dist/cli/index.d.ts +10 -1
- package/dist/cli/index.d.ts.map +1 -1
- package/dist/cli/index.js +153 -45
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/setup.d.ts +2 -1
- package/dist/cli/setup.d.ts.map +1 -1
- package/dist/cli/setup.js +104 -60
- package/dist/cli/setup.js.map +1 -1
- package/dist/cli/star-prompt.d.ts +21 -1
- package/dist/cli/star-prompt.d.ts.map +1 -1
- package/dist/cli/star-prompt.js +34 -13
- package/dist/cli/star-prompt.js.map +1 -1
- package/dist/cli/team.d.ts.map +1 -1
- package/dist/cli/team.js +10 -3
- package/dist/cli/team.js.map +1 -1
- package/dist/cli/update.d.ts.map +1 -1
- package/dist/cli/update.js.map +1 -1
- package/dist/config/__tests__/generator-notify.test.js +16 -0
- package/dist/config/__tests__/generator-notify.test.js.map +1 -1
- package/dist/config/__tests__/models.test.js +9 -1
- package/dist/config/__tests__/models.test.js.map +1 -1
- package/dist/config/generator.js +9 -10
- package/dist/config/generator.js.map +1 -1
- package/dist/config/models.d.ts +8 -1
- package/dist/config/models.d.ts.map +1 -1
- package/dist/config/models.js +27 -5
- package/dist/config/models.js.map +1 -1
- package/dist/hooks/__tests__/agents-overlay.test.js +24 -0
- package/dist/hooks/__tests__/agents-overlay.test.js.map +1 -1
- package/dist/hooks/__tests__/consensus-execution-handoff.test.d.ts +18 -0
- package/dist/hooks/__tests__/consensus-execution-handoff.test.d.ts.map +1 -0
- package/dist/hooks/__tests__/consensus-execution-handoff.test.js +204 -0
- package/dist/hooks/__tests__/consensus-execution-handoff.test.js.map +1 -0
- package/dist/hooks/__tests__/emulator.test.d.ts +2 -0
- package/dist/hooks/__tests__/emulator.test.d.ts.map +1 -0
- package/dist/hooks/__tests__/emulator.test.js +47 -0
- package/dist/hooks/__tests__/emulator.test.js.map +1 -0
- package/dist/hooks/__tests__/keyword-detector.test.js +330 -4
- package/dist/hooks/__tests__/keyword-detector.test.js.map +1 -1
- package/dist/hooks/__tests__/notify-hook-auto-nudge.test.js +101 -0
- package/dist/hooks/__tests__/notify-hook-auto-nudge.test.js.map +1 -1
- package/dist/hooks/__tests__/notify-hook-cross-worktree-heartbeat.test.js +13 -7
- package/dist/hooks/__tests__/notify-hook-cross-worktree-heartbeat.test.js.map +1 -1
- package/dist/hooks/__tests__/notify-hook-modules.test.js +61 -0
- package/dist/hooks/__tests__/notify-hook-modules.test.js.map +1 -1
- package/dist/hooks/__tests__/notify-hook-session-scope.test.js +47 -0
- package/dist/hooks/__tests__/notify-hook-session-scope.test.js.map +1 -1
- package/dist/hooks/__tests__/notify-hook-worker-idle.test.d.ts +2 -0
- package/dist/hooks/__tests__/notify-hook-worker-idle.test.d.ts.map +1 -0
- package/dist/hooks/__tests__/notify-hook-worker-idle.test.js +560 -0
- package/dist/hooks/__tests__/notify-hook-worker-idle.test.js.map +1 -0
- package/dist/hooks/__tests__/session.test.d.ts +2 -0
- package/dist/hooks/__tests__/session.test.d.ts.map +1 -0
- package/dist/hooks/__tests__/session.test.js +161 -0
- package/dist/hooks/__tests__/session.test.js.map +1 -0
- package/dist/hooks/__tests__/task-size-detector.test.d.ts +2 -0
- package/dist/hooks/__tests__/task-size-detector.test.d.ts.map +1 -0
- package/dist/hooks/__tests__/task-size-detector.test.js +336 -0
- package/dist/hooks/__tests__/task-size-detector.test.js.map +1 -0
- package/dist/hooks/__tests__/tmux-hook-engine-types-sync.test.d.ts +2 -0
- package/dist/hooks/__tests__/tmux-hook-engine-types-sync.test.d.ts.map +1 -0
- package/dist/hooks/__tests__/tmux-hook-engine-types-sync.test.js +24 -0
- package/dist/hooks/__tests__/tmux-hook-engine-types-sync.test.js.map +1 -0
- package/dist/hooks/agents-overlay.d.ts.map +1 -1
- package/dist/hooks/agents-overlay.js +46 -2
- package/dist/hooks/agents-overlay.js.map +1 -1
- package/dist/hooks/code-simplifier/__tests__/index.test.js +67 -15
- package/dist/hooks/code-simplifier/__tests__/index.test.js.map +1 -1
- package/dist/hooks/code-simplifier/index.d.ts +10 -4
- package/dist/hooks/code-simplifier/index.d.ts.map +1 -1
- package/dist/hooks/code-simplifier/index.js +38 -12
- package/dist/hooks/code-simplifier/index.js.map +1 -1
- package/dist/hooks/codebase-map.d.ts.map +1 -1
- package/dist/hooks/codebase-map.js +5 -32
- package/dist/hooks/codebase-map.js.map +1 -1
- package/dist/hooks/emulator.d.ts.map +1 -1
- package/dist/hooks/emulator.js +11 -18
- package/dist/hooks/emulator.js.map +1 -1
- package/dist/hooks/extensibility/__tests__/dispatcher.test.js +59 -1
- package/dist/hooks/extensibility/__tests__/dispatcher.test.js.map +1 -1
- package/dist/hooks/extensibility/__tests__/loader.test.js +19 -0
- package/dist/hooks/extensibility/__tests__/loader.test.js.map +1 -1
- package/dist/hooks/extensibility/dispatcher.d.ts.map +1 -1
- package/dist/hooks/extensibility/dispatcher.js +51 -39
- package/dist/hooks/extensibility/dispatcher.js.map +1 -1
- package/dist/hooks/extensibility/loader.d.ts.map +1 -1
- package/dist/hooks/extensibility/loader.js +25 -13
- package/dist/hooks/extensibility/loader.js.map +1 -1
- package/dist/hooks/extensibility/logging.d.ts.map +1 -1
- package/dist/hooks/extensibility/logging.js +6 -1
- package/dist/hooks/extensibility/logging.js.map +1 -1
- package/dist/hooks/extensibility/sdk.js.map +1 -1
- package/dist/hooks/keyword-detector.d.ts +87 -0
- package/dist/hooks/keyword-detector.d.ts.map +1 -1
- package/dist/hooks/keyword-detector.js +235 -23
- package/dist/hooks/keyword-detector.js.map +1 -1
- package/dist/hooks/keyword-registry.d.ts +15 -0
- package/dist/hooks/keyword-registry.d.ts.map +1 -0
- package/dist/hooks/keyword-registry.js +41 -0
- package/dist/hooks/keyword-registry.js.map +1 -0
- package/dist/hooks/session.d.ts +18 -2
- package/dist/hooks/session.d.ts.map +1 -1
- package/dist/hooks/session.js +84 -11
- package/dist/hooks/session.js.map +1 -1
- package/dist/hooks/task-size-detector.d.ts +72 -0
- package/dist/hooks/task-size-detector.d.ts.map +1 -0
- package/dist/hooks/task-size-detector.js +204 -0
- package/dist/hooks/task-size-detector.js.map +1 -0
- package/dist/hud/__tests__/colors.test.js +1 -103
- package/dist/hud/__tests__/colors.test.js.map +1 -1
- package/dist/hud/__tests__/index.test.d.ts +2 -0
- package/dist/hud/__tests__/index.test.d.ts.map +1 -0
- package/dist/hud/__tests__/index.test.js +131 -0
- package/dist/hud/__tests__/index.test.js.map +1 -0
- package/dist/hud/__tests__/render.test.js +53 -0
- package/dist/hud/__tests__/render.test.js.map +1 -1
- package/dist/hud/__tests__/watch.test.d.ts +2 -0
- package/dist/hud/__tests__/watch.test.d.ts.map +1 -0
- package/dist/hud/__tests__/watch.test.js +63 -0
- package/dist/hud/__tests__/watch.test.js.map +1 -0
- package/dist/hud/colors.d.ts +2 -9
- package/dist/hud/colors.d.ts.map +1 -1
- package/dist/hud/colors.js +19 -34
- package/dist/hud/colors.js.map +1 -1
- package/dist/hud/constants.d.ts +1 -0
- package/dist/hud/constants.d.ts.map +1 -1
- package/dist/hud/constants.js +1 -0
- package/dist/hud/constants.js.map +1 -1
- package/dist/hud/index.d.ts +27 -0
- package/dist/hud/index.d.ts.map +1 -1
- package/dist/hud/index.js +149 -9
- package/dist/hud/index.js.map +1 -1
- package/dist/hud/render.d.ts.map +1 -1
- package/dist/hud/render.js +20 -7
- package/dist/hud/render.js.map +1 -1
- package/dist/mcp/__tests__/bootstrap.test.d.ts +2 -0
- package/dist/mcp/__tests__/bootstrap.test.d.ts.map +1 -0
- package/dist/mcp/__tests__/bootstrap.test.js +25 -0
- package/dist/mcp/__tests__/bootstrap.test.js.map +1 -0
- package/dist/mcp/__tests__/code-intel-server.test.d.ts +2 -0
- package/dist/mcp/__tests__/code-intel-server.test.d.ts.map +1 -0
- package/dist/mcp/__tests__/code-intel-server.test.js +43 -0
- package/dist/mcp/__tests__/code-intel-server.test.js.map +1 -0
- package/dist/mcp/__tests__/memory-server.test.d.ts +2 -0
- package/dist/mcp/__tests__/memory-server.test.d.ts.map +1 -0
- package/dist/mcp/__tests__/memory-server.test.js +34 -0
- package/dist/mcp/__tests__/memory-server.test.js.map +1 -0
- package/dist/mcp/__tests__/memory-validation.test.d.ts +2 -0
- package/dist/mcp/__tests__/memory-validation.test.d.ts.map +1 -0
- package/dist/mcp/__tests__/memory-validation.test.js +29 -0
- package/dist/mcp/__tests__/memory-validation.test.js.map +1 -0
- package/dist/mcp/__tests__/path-traversal.test.js +55 -0
- package/dist/mcp/__tests__/path-traversal.test.js.map +1 -1
- package/dist/mcp/__tests__/state-paths.test.js +43 -6
- package/dist/mcp/__tests__/state-paths.test.js.map +1 -1
- package/dist/mcp/__tests__/state-server-ralph-phase.test.js +50 -0
- package/dist/mcp/__tests__/state-server-ralph-phase.test.js.map +1 -1
- package/dist/mcp/__tests__/state-server-schema.test.js +3 -7
- package/dist/mcp/__tests__/state-server-schema.test.js.map +1 -1
- package/dist/mcp/__tests__/state-server.test.js +30 -1
- package/dist/mcp/__tests__/state-server.test.js.map +1 -1
- package/dist/mcp/__tests__/trace-server.test.js +58 -0
- package/dist/mcp/__tests__/trace-server.test.js.map +1 -1
- package/dist/mcp/bootstrap.d.ts +3 -0
- package/dist/mcp/bootstrap.d.ts.map +1 -0
- package/dist/mcp/bootstrap.js +13 -0
- package/dist/mcp/bootstrap.js.map +1 -0
- package/dist/mcp/code-intel-server.d.ts +8 -0
- package/dist/mcp/code-intel-server.d.ts.map +1 -1
- package/dist/mcp/code-intel-server.js +50 -24
- package/dist/mcp/code-intel-server.js.map +1 -1
- package/dist/mcp/memory-server.js +34 -13
- package/dist/mcp/memory-server.js.map +1 -1
- package/dist/mcp/memory-validation.d.ts +9 -0
- package/dist/mcp/memory-validation.d.ts.map +1 -0
- package/dist/mcp/memory-validation.js +11 -0
- package/dist/mcp/memory-validation.js.map +1 -0
- package/dist/mcp/state-paths.d.ts +2 -0
- package/dist/mcp/state-paths.d.ts.map +1 -1
- package/dist/mcp/state-paths.js +83 -12
- package/dist/mcp/state-paths.js.map +1 -1
- package/dist/mcp/state-server.d.ts.map +1 -1
- package/dist/mcp/state-server.js +85 -47
- package/dist/mcp/state-server.js.map +1 -1
- package/dist/mcp/trace-server.d.ts +16 -0
- package/dist/mcp/trace-server.d.ts.map +1 -1
- package/dist/mcp/trace-server.js +84 -24
- package/dist/mcp/trace-server.js.map +1 -1
- package/dist/modes/__tests__/base-ralph-contract.test.d.ts +2 -0
- package/dist/modes/__tests__/base-ralph-contract.test.d.ts.map +1 -0
- package/dist/modes/__tests__/base-ralph-contract.test.js +49 -0
- package/dist/modes/__tests__/base-ralph-contract.test.js.map +1 -0
- package/dist/modes/__tests__/base-tmux-pane.test.js +13 -1
- package/dist/modes/__tests__/base-tmux-pane.test.js.map +1 -1
- package/dist/modes/base.d.ts +0 -4
- package/dist/modes/base.d.ts.map +1 -1
- package/dist/modes/base.js +31 -11
- package/dist/modes/base.js.map +1 -1
- package/dist/notifications/__tests__/config.test.js +47 -1
- package/dist/notifications/__tests__/config.test.js.map +1 -1
- package/dist/notifications/__tests__/formatter.test.js +54 -2
- package/dist/notifications/__tests__/formatter.test.js.map +1 -1
- package/dist/notifications/__tests__/hook-config.test.d.ts +5 -0
- package/dist/notifications/__tests__/hook-config.test.d.ts.map +1 -0
- package/dist/notifications/__tests__/hook-config.test.js +139 -0
- package/dist/notifications/__tests__/hook-config.test.js.map +1 -0
- package/dist/notifications/__tests__/idle-cooldown.test.d.ts +5 -0
- package/dist/notifications/__tests__/idle-cooldown.test.d.ts.map +1 -0
- package/dist/notifications/__tests__/idle-cooldown.test.js +100 -0
- package/dist/notifications/__tests__/idle-cooldown.test.js.map +1 -0
- package/dist/notifications/__tests__/notifier.test.js +89 -1
- package/dist/notifications/__tests__/notifier.test.js.map +1 -1
- package/dist/notifications/__tests__/reply-config.test.d.ts +2 -0
- package/dist/notifications/__tests__/reply-config.test.d.ts.map +1 -0
- package/dist/notifications/__tests__/reply-config.test.js +79 -0
- package/dist/notifications/__tests__/reply-config.test.js.map +1 -0
- package/dist/notifications/__tests__/reply-listener.test.js +35 -1
- package/dist/notifications/__tests__/reply-listener.test.js.map +1 -1
- package/dist/notifications/__tests__/session-registry.test.js +40 -0
- package/dist/notifications/__tests__/session-registry.test.js.map +1 -1
- package/dist/notifications/__tests__/template-engine.test.d.ts +5 -0
- package/dist/notifications/__tests__/template-engine.test.d.ts.map +1 -0
- package/dist/notifications/__tests__/template-engine.test.js +147 -0
- package/dist/notifications/__tests__/template-engine.test.js.map +1 -0
- package/dist/notifications/config.d.ts +8 -0
- package/dist/notifications/config.d.ts.map +1 -1
- package/dist/notifications/config.js +110 -19
- package/dist/notifications/config.js.map +1 -1
- package/dist/notifications/formatter.d.ts +5 -0
- package/dist/notifications/formatter.d.ts.map +1 -1
- package/dist/notifications/formatter.js +45 -10
- package/dist/notifications/formatter.js.map +1 -1
- package/dist/notifications/hook-config-types.d.ts +43 -0
- package/dist/notifications/hook-config-types.d.ts.map +1 -0
- package/dist/notifications/hook-config-types.js +8 -0
- package/dist/notifications/hook-config-types.js.map +1 -0
- package/dist/notifications/hook-config.d.ts +40 -0
- package/dist/notifications/hook-config.d.ts.map +1 -0
- package/dist/notifications/hook-config.js +127 -0
- package/dist/notifications/hook-config.js.map +1 -0
- package/dist/notifications/idle-cooldown.d.ts +35 -0
- package/dist/notifications/idle-cooldown.d.ts.map +1 -0
- package/dist/notifications/idle-cooldown.js +108 -0
- package/dist/notifications/idle-cooldown.js.map +1 -0
- package/dist/notifications/index.d.ts +3 -0
- package/dist/notifications/index.d.ts.map +1 -1
- package/dist/notifications/index.js +43 -1
- package/dist/notifications/index.js.map +1 -1
- package/dist/notifications/notifier.d.ts +9 -0
- package/dist/notifications/notifier.d.ts.map +1 -1
- package/dist/notifications/notifier.js +36 -30
- package/dist/notifications/notifier.js.map +1 -1
- package/dist/notifications/reply-listener.d.ts +3 -0
- package/dist/notifications/reply-listener.d.ts.map +1 -1
- package/dist/notifications/reply-listener.js +61 -7
- package/dist/notifications/reply-listener.js.map +1 -1
- package/dist/notifications/session-registry.d.ts +1 -1
- package/dist/notifications/session-registry.d.ts.map +1 -1
- package/dist/notifications/session-registry.js +18 -6
- package/dist/notifications/session-registry.js.map +1 -1
- package/dist/notifications/template-engine.d.ts +34 -0
- package/dist/notifications/template-engine.d.ts.map +1 -0
- package/dist/notifications/template-engine.js +246 -0
- package/dist/notifications/template-engine.js.map +1 -0
- package/dist/notifications/types.d.ts +6 -0
- package/dist/notifications/types.d.ts.map +1 -1
- package/dist/openclaw/__tests__/config.test.d.ts +6 -0
- package/dist/openclaw/__tests__/config.test.d.ts.map +1 -0
- package/dist/openclaw/__tests__/config.test.js +174 -0
- package/dist/openclaw/__tests__/config.test.js.map +1 -0
- package/dist/openclaw/__tests__/dispatcher.test.d.ts +5 -0
- package/dist/openclaw/__tests__/dispatcher.test.d.ts.map +1 -0
- package/dist/openclaw/__tests__/dispatcher.test.js +104 -0
- package/dist/openclaw/__tests__/dispatcher.test.js.map +1 -0
- package/dist/openclaw/__tests__/index.test.d.ts +6 -0
- package/dist/openclaw/__tests__/index.test.d.ts.map +1 -0
- package/dist/openclaw/__tests__/index.test.js +131 -0
- package/dist/openclaw/__tests__/index.test.js.map +1 -0
- package/dist/openclaw/config.d.ts +37 -0
- package/dist/openclaw/config.d.ts.map +1 -0
- package/dist/openclaw/config.js +106 -0
- package/dist/openclaw/config.js.map +1 -0
- package/dist/openclaw/dispatcher.d.ts +63 -0
- package/dist/openclaw/dispatcher.d.ts.map +1 -0
- package/dist/openclaw/dispatcher.js +223 -0
- package/dist/openclaw/dispatcher.js.map +1 -0
- package/dist/openclaw/index.d.ts +27 -0
- package/dist/openclaw/index.d.ts.map +1 -0
- package/dist/openclaw/index.js +130 -0
- package/dist/openclaw/index.js.map +1 -0
- package/dist/openclaw/types.d.ts +105 -0
- package/dist/openclaw/types.d.ts.map +1 -0
- package/dist/openclaw/types.js +12 -0
- package/dist/openclaw/types.js.map +1 -0
- package/dist/ralph/contract.d.ts.map +1 -1
- package/dist/ralph/contract.js +13 -4
- package/dist/ralph/contract.js.map +1 -1
- package/dist/team/__tests__/phase-controller.test.js +14 -0
- package/dist/team/__tests__/phase-controller.test.js.map +1 -1
- package/dist/team/__tests__/runtime.test.js +328 -1
- package/dist/team/__tests__/runtime.test.js.map +1 -1
- package/dist/team/__tests__/scaling.test.d.ts +2 -0
- package/dist/team/__tests__/scaling.test.d.ts.map +1 -0
- package/dist/team/__tests__/scaling.test.js +295 -0
- package/dist/team/__tests__/scaling.test.js.map +1 -0
- package/dist/team/__tests__/state.test.js +62 -1
- package/dist/team/__tests__/state.test.js.map +1 -1
- package/dist/team/__tests__/tmux-session.test.js +219 -14
- package/dist/team/__tests__/tmux-session.test.js.map +1 -1
- package/dist/team/__tests__/worker-bootstrap.test.js +4 -0
- package/dist/team/__tests__/worker-bootstrap.test.js.map +1 -1
- package/dist/team/contracts.d.ts +14 -0
- package/dist/team/contracts.d.ts.map +1 -0
- package/dist/team/contracts.js +30 -0
- package/dist/team/contracts.js.map +1 -0
- package/dist/team/model-contract.d.ts +1 -0
- package/dist/team/model-contract.d.ts.map +1 -1
- package/dist/team/model-contract.js +5 -1
- package/dist/team/model-contract.js.map +1 -1
- package/dist/team/phase-controller.d.ts +2 -0
- package/dist/team/phase-controller.d.ts.map +1 -1
- package/dist/team/phase-controller.js +16 -2
- package/dist/team/phase-controller.js.map +1 -1
- package/dist/team/runtime.d.ts.map +1 -1
- package/dist/team/runtime.js +356 -65
- package/dist/team/runtime.js.map +1 -1
- package/dist/team/scaling.d.ts +58 -0
- package/dist/team/scaling.d.ts.map +1 -0
- package/dist/team/scaling.js +319 -0
- package/dist/team/scaling.js.map +1 -0
- package/dist/team/state.d.ts +11 -2
- package/dist/team/state.d.ts.map +1 -1
- package/dist/team/state.js +97 -27
- package/dist/team/state.js.map +1 -1
- package/dist/team/team-ops.d.ts +2 -0
- package/dist/team/team-ops.d.ts.map +1 -1
- package/dist/team/team-ops.js +4 -0
- package/dist/team/team-ops.js.map +1 -1
- package/dist/team/tmux-session.d.ts +34 -5
- package/dist/team/tmux-session.d.ts.map +1 -1
- package/dist/team/tmux-session.js +177 -49
- 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 +20 -0
- package/dist/team/worker-bootstrap.js.map +1 -1
- package/dist/utils/__tests__/paths.test.js +8 -1
- package/dist/utils/__tests__/paths.test.js.map +1 -1
- package/dist/utils/paths.d.ts.map +1 -1
- package/dist/utils/paths.js +14 -6
- package/dist/utils/paths.js.map +1 -1
- package/dist/verification/__tests__/verifier.test.js +20 -1
- package/dist/verification/__tests__/verifier.test.js.map +1 -1
- package/dist/verification/verifier.d.ts +5 -0
- package/dist/verification/verifier.d.ts.map +1 -1
- package/dist/verification/verifier.js +19 -0
- package/dist/verification/verifier.js.map +1 -1
- package/package.json +2 -1
- package/prompts/architect.md +11 -0
- package/prompts/critic.md +14 -1
- package/prompts/planner.md +21 -0
- package/scripts/notify-hook/auto-nudge.js +80 -1
- package/scripts/notify-hook/payload-parser.js +21 -0
- package/scripts/notify-hook/team-worker.js +142 -0
- package/scripts/notify-hook/tmux-injection.js +3 -3
- package/scripts/notify-hook.js +55 -4
- package/skills/configure-notifications/SKILL.md +278 -0
- package/skills/configure-openclaw/SKILL.md +267 -0
- package/skills/configure-slack/SKILL.md +226 -0
- package/skills/omx-setup/SKILL.md +14 -19
- package/skills/plan/SKILL.md +57 -33
- package/skills/ralplan/SKILL.md +107 -21
- package/skills/team/SKILL.md +10 -1
- package/templates/AGENTS.md +11 -3
|
@@ -0,0 +1,267 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: configure-openclaw
|
|
3
|
+
description: Configure OpenClaw notification gateway via natural language
|
|
4
|
+
triggers:
|
|
5
|
+
- "configure openclaw"
|
|
6
|
+
- "setup openclaw"
|
|
7
|
+
- "openclaw notifications"
|
|
8
|
+
- "openclaw gateway"
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
# Configure OpenClaw Notifications
|
|
12
|
+
|
|
13
|
+
Set up OpenClaw as a notification gateway so OMX can route session events through your own HTTP endpoint or CLI command.
|
|
14
|
+
|
|
15
|
+
## What is OpenClaw?
|
|
16
|
+
|
|
17
|
+
OpenClaw is a self-hosted notification gateway that lets you receive OMX events however you want — HTTP webhooks to your own server, shell commands, or any integration you build. Unlike platform-specific notifiers (Discord, Slack), OpenClaw gives you full control over message routing and format.
|
|
18
|
+
|
|
19
|
+
**Two gateway modes:**
|
|
20
|
+
- **HTTP Gateway** — OMX POSTs JSON events to your HTTP endpoint
|
|
21
|
+
- **CLI Command Gateway** — OMX runs a shell command with event data as arguments or stdin
|
|
22
|
+
|
|
23
|
+
## How This Skill Works
|
|
24
|
+
|
|
25
|
+
This is an interactive, natural-language configuration skill. Walk the user through setup by asking questions with AskUserQuestion. Write the result to `~/.codex/.omx-config.json`.
|
|
26
|
+
|
|
27
|
+
## Step 1: Detect Existing Configuration
|
|
28
|
+
|
|
29
|
+
```bash
|
|
30
|
+
CONFIG_FILE="$HOME/.codex/.omx-config.json"
|
|
31
|
+
|
|
32
|
+
if [ -f "$CONFIG_FILE" ]; then
|
|
33
|
+
HAS_OPENCLAW=$(jq -r '.notifications.openclaw.enabled // false' "$CONFIG_FILE" 2>/dev/null)
|
|
34
|
+
GATEWAY_TYPE=$(jq -r '.notifications.openclaw.gatewayType // empty' "$CONFIG_FILE" 2>/dev/null)
|
|
35
|
+
ENDPOINT=$(jq -r '.notifications.openclaw.endpoint // empty' "$CONFIG_FILE" 2>/dev/null)
|
|
36
|
+
COMMAND=$(jq -r '.notifications.openclaw.command // empty' "$CONFIG_FILE" 2>/dev/null)
|
|
37
|
+
|
|
38
|
+
if [ "$HAS_OPENCLAW" = "true" ]; then
|
|
39
|
+
echo "EXISTING_CONFIG=true"
|
|
40
|
+
echo "GATEWAY_TYPE=$GATEWAY_TYPE"
|
|
41
|
+
[ -n "$ENDPOINT" ] && echo "ENDPOINT=$ENDPOINT"
|
|
42
|
+
[ -n "$COMMAND" ] && echo "COMMAND=$COMMAND"
|
|
43
|
+
else
|
|
44
|
+
echo "EXISTING_CONFIG=false"
|
|
45
|
+
fi
|
|
46
|
+
else
|
|
47
|
+
echo "NO_CONFIG_FILE"
|
|
48
|
+
fi
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
If existing config is found, show the user what's currently configured and ask if they want to update or reconfigure.
|
|
52
|
+
|
|
53
|
+
## Step 2: Choose Gateway Type
|
|
54
|
+
|
|
55
|
+
Use AskUserQuestion:
|
|
56
|
+
|
|
57
|
+
**Question:** "Which OpenClaw gateway mode do you want to use?"
|
|
58
|
+
|
|
59
|
+
**Options:**
|
|
60
|
+
1. **HTTP Gateway** - OMX sends a POST request with JSON to your endpoint. Good for web servers, n8n, Zapier webhooks, or any HTTP-capable service.
|
|
61
|
+
2. **CLI Command Gateway** - OMX runs a shell command you specify. Good for local scripts, custom notification tools, or anything shell-scriptable.
|
|
62
|
+
|
|
63
|
+
## Step 3A: HTTP Gateway Setup
|
|
64
|
+
|
|
65
|
+
If user chose HTTP:
|
|
66
|
+
|
|
67
|
+
Use AskUserQuestion:
|
|
68
|
+
|
|
69
|
+
**Question:** "Enter your OpenClaw HTTP endpoint URL. OMX will POST JSON event data to this URL."
|
|
70
|
+
|
|
71
|
+
The user types their URL in the "Other" field.
|
|
72
|
+
|
|
73
|
+
**Validate** the URL:
|
|
74
|
+
- Must start with `http://` or `https://`
|
|
75
|
+
- If invalid, explain the format and ask again
|
|
76
|
+
|
|
77
|
+
### Optional: Secret Header
|
|
78
|
+
|
|
79
|
+
Use AskUserQuestion:
|
|
80
|
+
|
|
81
|
+
**Question:** "Add an authorization header to secure requests? (Optional)"
|
|
82
|
+
|
|
83
|
+
**Options:**
|
|
84
|
+
1. **Yes, add Bearer token** - Sends `Authorization: Bearer <token>`
|
|
85
|
+
2. **Yes, add custom header** - Specify header name and value
|
|
86
|
+
3. **No auth header** - Open endpoint (use firewall rules or IP allowlist instead)
|
|
87
|
+
|
|
88
|
+
If they want a Bearer token or custom header, collect the values.
|
|
89
|
+
|
|
90
|
+
## Step 3B: CLI Command Gateway Setup
|
|
91
|
+
|
|
92
|
+
If user chose CLI Command:
|
|
93
|
+
|
|
94
|
+
Use AskUserQuestion:
|
|
95
|
+
|
|
96
|
+
**Question:** "Enter the shell command OMX should run for each notification event. Use these placeholders:
|
|
97
|
+
- `{event}` — event name (e.g. session-end)
|
|
98
|
+
- `{session_id}` — session identifier
|
|
99
|
+
- `{project}` — project name/path
|
|
100
|
+
- `{message}` — formatted notification message
|
|
101
|
+
|
|
102
|
+
Example: `notify-send 'OMX: {event}' '{message}'`
|
|
103
|
+
Example: `~/.local/bin/my-notifier --event {event} --msg '{message}'`"
|
|
104
|
+
|
|
105
|
+
The user types their command in the "Other" field.
|
|
106
|
+
|
|
107
|
+
**IMPORTANT: Dual activation gate for CLI Command gateways**
|
|
108
|
+
|
|
109
|
+
CLI command gateways require TWO environment variables to be set:
|
|
110
|
+
- `OMX_OPENCLAW=1` — enables the OpenClaw gateway
|
|
111
|
+
- `OMX_OPENCLAW_COMMAND=1` — specifically enables CLI command execution
|
|
112
|
+
|
|
113
|
+
This two-gate design prevents accidental command execution when only the config file is present. Remind the user to set both in their shell profile.
|
|
114
|
+
|
|
115
|
+
## Step 4: Map Events
|
|
116
|
+
|
|
117
|
+
Use AskUserQuestion with multiSelect:
|
|
118
|
+
|
|
119
|
+
**Question:** "Which events should be routed through OpenClaw?"
|
|
120
|
+
|
|
121
|
+
**Options (multiSelect: true):**
|
|
122
|
+
1. **Session end (Recommended)** - When a Codex session finishes
|
|
123
|
+
2. **Input needed** - When Codex is waiting for your response
|
|
124
|
+
3. **Session start** - When a new session begins
|
|
125
|
+
4. **Session continuing** - When a persistent mode keeps the session alive
|
|
126
|
+
|
|
127
|
+
Default selection: session-end + ask-user-question.
|
|
128
|
+
|
|
129
|
+
## Step 5: Write Configuration
|
|
130
|
+
|
|
131
|
+
Read the existing config, merge the OpenClaw settings, and write back:
|
|
132
|
+
|
|
133
|
+
```bash
|
|
134
|
+
CONFIG_FILE="$HOME/.codex/.omx-config.json"
|
|
135
|
+
mkdir -p "$(dirname "$CONFIG_FILE")"
|
|
136
|
+
|
|
137
|
+
if [ -f "$CONFIG_FILE" ]; then
|
|
138
|
+
EXISTING=$(cat "$CONFIG_FILE")
|
|
139
|
+
else
|
|
140
|
+
EXISTING='{}'
|
|
141
|
+
fi
|
|
142
|
+
```
|
|
143
|
+
|
|
144
|
+
### For HTTP Gateway:
|
|
145
|
+
|
|
146
|
+
```bash
|
|
147
|
+
# ENDPOINT, AUTH_HEADER_NAME, AUTH_HEADER_VALUE are collected from user
|
|
148
|
+
echo "$EXISTING" | jq \
|
|
149
|
+
--arg endpoint "$ENDPOINT" \
|
|
150
|
+
--arg headerName "$AUTH_HEADER_NAME" \
|
|
151
|
+
--arg headerValue "$AUTH_HEADER_VALUE" \
|
|
152
|
+
'.notifications = (.notifications // {enabled: true}) |
|
|
153
|
+
.notifications.enabled = true |
|
|
154
|
+
.notifications.openclaw = {
|
|
155
|
+
enabled: true,
|
|
156
|
+
gatewayType: "http",
|
|
157
|
+
endpoint: $endpoint,
|
|
158
|
+
headers: (if $headerName == "" then null else {($headerName): $headerValue} end)
|
|
159
|
+
}' > "$CONFIG_FILE"
|
|
160
|
+
```
|
|
161
|
+
|
|
162
|
+
### For CLI Command Gateway:
|
|
163
|
+
|
|
164
|
+
```bash
|
|
165
|
+
# COMMAND is collected from user
|
|
166
|
+
echo "$EXISTING" | jq \
|
|
167
|
+
--arg command "$COMMAND" \
|
|
168
|
+
'.notifications = (.notifications // {enabled: true}) |
|
|
169
|
+
.notifications.enabled = true |
|
|
170
|
+
.notifications.openclaw = {
|
|
171
|
+
enabled: true,
|
|
172
|
+
gatewayType: "command",
|
|
173
|
+
command: $command
|
|
174
|
+
}' > "$CONFIG_FILE"
|
|
175
|
+
```
|
|
176
|
+
|
|
177
|
+
### Add event-specific config if user didn't select all events:
|
|
178
|
+
|
|
179
|
+
```bash
|
|
180
|
+
# Example: disable session-start if not selected
|
|
181
|
+
echo "$(cat "$CONFIG_FILE")" | jq \
|
|
182
|
+
'.notifications.events = (.notifications.events // {}) |
|
|
183
|
+
.notifications.events["session-start"] = {enabled: false}' > "$CONFIG_FILE"
|
|
184
|
+
```
|
|
185
|
+
|
|
186
|
+
## Step 6: Explain Activation Gates
|
|
187
|
+
|
|
188
|
+
Regardless of gateway type, explain the activation model:
|
|
189
|
+
|
|
190
|
+
```
|
|
191
|
+
OpenClaw Activation Gates
|
|
192
|
+
─────────────────────────
|
|
193
|
+
OpenClaw requires environment variables to be set before it activates.
|
|
194
|
+
This prevents accidental notifications in shared or CI environments.
|
|
195
|
+
|
|
196
|
+
For HTTP Gateway:
|
|
197
|
+
export OMX_OPENCLAW=1
|
|
198
|
+
|
|
199
|
+
For CLI Command Gateway (requires both):
|
|
200
|
+
export OMX_OPENCLAW=1
|
|
201
|
+
export OMX_OPENCLAW_COMMAND=1
|
|
202
|
+
|
|
203
|
+
Add these to your ~/.zshrc or ~/.bashrc.
|
|
204
|
+
```
|
|
205
|
+
|
|
206
|
+
## Step 7: Test the Configuration
|
|
207
|
+
|
|
208
|
+
After writing config, offer to test:
|
|
209
|
+
|
|
210
|
+
Use AskUserQuestion:
|
|
211
|
+
|
|
212
|
+
**Question:** "Send a test notification through OpenClaw to verify the setup?"
|
|
213
|
+
|
|
214
|
+
**Options:**
|
|
215
|
+
1. **Yes, test now (Recommended)** - Run a test dispatch
|
|
216
|
+
2. **No, I'll test later** - Skip testing
|
|
217
|
+
|
|
218
|
+
### If testing HTTP Gateway:
|
|
219
|
+
|
|
220
|
+
```bash
|
|
221
|
+
curl -s -o /dev/null -w "%{http_code}" \
|
|
222
|
+
-H "Content-Type: application/json" \
|
|
223
|
+
${AUTH_HEADER_NAME:+-H "$AUTH_HEADER_NAME: $AUTH_HEADER_VALUE"} \
|
|
224
|
+
-d '{"event":"test","message":"OMX OpenClaw test notification","session_id":"test"}' \
|
|
225
|
+
"$ENDPOINT"
|
|
226
|
+
```
|
|
227
|
+
|
|
228
|
+
### If testing CLI Command Gateway:
|
|
229
|
+
|
|
230
|
+
Replace placeholders in the command with test values and run it.
|
|
231
|
+
|
|
232
|
+
Report success or failure. If it fails, help debug (check URL accessibility, command path, permissions).
|
|
233
|
+
|
|
234
|
+
## Step 8: Confirm
|
|
235
|
+
|
|
236
|
+
Display the final configuration summary:
|
|
237
|
+
|
|
238
|
+
```
|
|
239
|
+
OpenClaw Gateway Configured!
|
|
240
|
+
|
|
241
|
+
Type: HTTP / CLI Command
|
|
242
|
+
Endpoint: https://your-server/omx-hook (HTTP only)
|
|
243
|
+
Command: notify-send 'OMX' '{message}' (CLI only)
|
|
244
|
+
Events: session-end, ask-user-question
|
|
245
|
+
|
|
246
|
+
Config saved to: ~/.codex/.omx-config.json
|
|
247
|
+
|
|
248
|
+
Activation (add to ~/.zshrc or ~/.bashrc):
|
|
249
|
+
export OMX_OPENCLAW=1
|
|
250
|
+
export OMX_OPENCLAW_COMMAND=1 # CLI Command gateways only
|
|
251
|
+
|
|
252
|
+
To reconfigure: /configure-openclaw
|
|
253
|
+
To configure other platforms: /configure-notifications
|
|
254
|
+
```
|
|
255
|
+
|
|
256
|
+
## Environment Variable Reference
|
|
257
|
+
|
|
258
|
+
```bash
|
|
259
|
+
# Required for all OpenClaw gateways
|
|
260
|
+
export OMX_OPENCLAW=1
|
|
261
|
+
|
|
262
|
+
# Required additionally for CLI Command gateways
|
|
263
|
+
export OMX_OPENCLAW_COMMAND=1
|
|
264
|
+
|
|
265
|
+
# HTTP gateway: override endpoint URL
|
|
266
|
+
export OMX_OPENCLAW_URL="https://your-server/omx-hook"
|
|
267
|
+
```
|
|
@@ -0,0 +1,226 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: configure-slack
|
|
3
|
+
description: Configure Slack webhook notifications via natural language
|
|
4
|
+
triggers:
|
|
5
|
+
- "configure slack"
|
|
6
|
+
- "setup slack"
|
|
7
|
+
- "slack notifications"
|
|
8
|
+
- "slack webhook"
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
# Configure Slack Notifications
|
|
12
|
+
|
|
13
|
+
Set up Slack notifications so OMX can ping you when sessions end, need input, or complete background tasks.
|
|
14
|
+
|
|
15
|
+
## How This Skill Works
|
|
16
|
+
|
|
17
|
+
This is an interactive, natural-language configuration skill. Walk the user through setup by asking questions with AskUserQuestion. Write the result to `~/.codex/.omx-config.json`.
|
|
18
|
+
|
|
19
|
+
## Step 1: Detect Existing Configuration
|
|
20
|
+
|
|
21
|
+
```bash
|
|
22
|
+
CONFIG_FILE="$HOME/.codex/.omx-config.json"
|
|
23
|
+
|
|
24
|
+
if [ -f "$CONFIG_FILE" ]; then
|
|
25
|
+
HAS_SLACK=$(jq -r '.notifications.slack.enabled // false' "$CONFIG_FILE" 2>/dev/null)
|
|
26
|
+
WEBHOOK_URL=$(jq -r '.notifications.slack.webhookUrl // empty' "$CONFIG_FILE" 2>/dev/null)
|
|
27
|
+
CHANNEL=$(jq -r '.notifications.slack.channel // empty' "$CONFIG_FILE" 2>/dev/null)
|
|
28
|
+
USERNAME=$(jq -r '.notifications.slack.username // empty' "$CONFIG_FILE" 2>/dev/null)
|
|
29
|
+
MENTION=$(jq -r '.notifications.slack.mention // empty' "$CONFIG_FILE" 2>/dev/null)
|
|
30
|
+
|
|
31
|
+
if [ "$HAS_SLACK" = "true" ]; then
|
|
32
|
+
echo "EXISTING_CONFIG=true"
|
|
33
|
+
[ -n "$WEBHOOK_URL" ] && echo "WEBHOOK_URL=$WEBHOOK_URL"
|
|
34
|
+
[ -n "$CHANNEL" ] && echo "CHANNEL=$CHANNEL"
|
|
35
|
+
[ -n "$USERNAME" ] && echo "USERNAME=$USERNAME"
|
|
36
|
+
[ -n "$MENTION" ] && echo "MENTION=$MENTION"
|
|
37
|
+
else
|
|
38
|
+
echo "EXISTING_CONFIG=false"
|
|
39
|
+
fi
|
|
40
|
+
else
|
|
41
|
+
echo "NO_CONFIG_FILE"
|
|
42
|
+
fi
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
If existing config is found, show the user what's currently configured and ask if they want to update or reconfigure.
|
|
46
|
+
|
|
47
|
+
## Step 2: Collect Webhook URL
|
|
48
|
+
|
|
49
|
+
Use AskUserQuestion:
|
|
50
|
+
|
|
51
|
+
**Question:** "Paste your Slack Incoming Webhook URL. To create one: Go to api.slack.com/apps > Your App > Incoming Webhooks > Add New Webhook to Workspace > Copy URL"
|
|
52
|
+
|
|
53
|
+
The user will type their webhook URL in the "Other" field.
|
|
54
|
+
|
|
55
|
+
**Validate** the URL:
|
|
56
|
+
- Must start with `https://hooks.slack.com/services/` or `https://hooks.slack.com/workflows/`
|
|
57
|
+
- If invalid, explain the format and ask again
|
|
58
|
+
|
|
59
|
+
## Step 3: Configure Channel (Optional)
|
|
60
|
+
|
|
61
|
+
Use AskUserQuestion:
|
|
62
|
+
|
|
63
|
+
**Question:** "Which Slack channel should receive notifications? (Optional — leave blank to use the webhook's default channel)"
|
|
64
|
+
|
|
65
|
+
**Options:**
|
|
66
|
+
1. **Use webhook default** - The channel configured in the Slack app integration
|
|
67
|
+
2. **Specify a channel** - Enter a channel name (e.g. `#dev-alerts`) or channel ID
|
|
68
|
+
|
|
69
|
+
Note: Overriding the channel requires the webhook to have permission for that channel.
|
|
70
|
+
|
|
71
|
+
## Step 4: Configure Mention (Optional)
|
|
72
|
+
|
|
73
|
+
Use AskUserQuestion:
|
|
74
|
+
|
|
75
|
+
**Question:** "Would you like notifications to mention (ping) someone?"
|
|
76
|
+
|
|
77
|
+
**Options:**
|
|
78
|
+
1. **Yes, mention a user** - Tag a user with `<@UXXXXXXXX>`
|
|
79
|
+
2. **Yes, mention a channel** - Tag everyone with `<!channel>` or `<!here>`
|
|
80
|
+
3. **No mentions** - Just post the message without pinging anyone
|
|
81
|
+
|
|
82
|
+
### If user wants to mention a user:
|
|
83
|
+
|
|
84
|
+
Ask: "What is the Slack member ID to mention? (Click the user's profile > More > Copy member ID)"
|
|
85
|
+
|
|
86
|
+
Format: `<@UXXXXXXXX>` (e.g. `<@U012AB3CD>`)
|
|
87
|
+
|
|
88
|
+
### If user wants a channel mention:
|
|
89
|
+
|
|
90
|
+
Choose between:
|
|
91
|
+
- `<!channel>` — notifies all channel members regardless of online status
|
|
92
|
+
- `<!here>` — notifies only currently active channel members
|
|
93
|
+
|
|
94
|
+
## Step 5: Configure Display Name (Optional)
|
|
95
|
+
|
|
96
|
+
Use AskUserQuestion:
|
|
97
|
+
|
|
98
|
+
**Question:** "Custom bot display name in Slack? (Shows as the message sender)"
|
|
99
|
+
|
|
100
|
+
**Options:**
|
|
101
|
+
1. **OMX (default)** - Display as "OMX"
|
|
102
|
+
2. **Codex CLI** - Display as "Codex CLI"
|
|
103
|
+
3. **Custom** - Enter a custom name
|
|
104
|
+
|
|
105
|
+
## Step 6: Configure Events
|
|
106
|
+
|
|
107
|
+
Use AskUserQuestion with multiSelect:
|
|
108
|
+
|
|
109
|
+
**Question:** "Which events should trigger Slack notifications?"
|
|
110
|
+
|
|
111
|
+
**Options (multiSelect: true):**
|
|
112
|
+
1. **Session end (Recommended)** - When a Codex session finishes
|
|
113
|
+
2. **Input needed** - When Codex is waiting for your response (great for long-running tasks)
|
|
114
|
+
3. **Session start** - When a new session begins
|
|
115
|
+
4. **Session continuing** - When a persistent mode keeps the session alive
|
|
116
|
+
|
|
117
|
+
Default selection: session-end + ask-user-question.
|
|
118
|
+
|
|
119
|
+
## Step 7: Write Configuration
|
|
120
|
+
|
|
121
|
+
Read the existing config, merge the new Slack settings, and write back:
|
|
122
|
+
|
|
123
|
+
```bash
|
|
124
|
+
CONFIG_FILE="$HOME/.codex/.omx-config.json"
|
|
125
|
+
mkdir -p "$(dirname "$CONFIG_FILE")"
|
|
126
|
+
|
|
127
|
+
if [ -f "$CONFIG_FILE" ]; then
|
|
128
|
+
EXISTING=$(cat "$CONFIG_FILE")
|
|
129
|
+
else
|
|
130
|
+
EXISTING='{}'
|
|
131
|
+
fi
|
|
132
|
+
|
|
133
|
+
# WEBHOOK_URL, CHANNEL, MENTION, USERNAME are collected from user
|
|
134
|
+
echo "$EXISTING" | jq \
|
|
135
|
+
--arg url "$WEBHOOK_URL" \
|
|
136
|
+
--arg channel "$CHANNEL" \
|
|
137
|
+
--arg mention "$MENTION" \
|
|
138
|
+
--arg username "$USERNAME" \
|
|
139
|
+
'.notifications = (.notifications // {enabled: true}) |
|
|
140
|
+
.notifications.enabled = true |
|
|
141
|
+
.notifications.slack = {
|
|
142
|
+
enabled: true,
|
|
143
|
+
webhookUrl: $url,
|
|
144
|
+
channel: (if $channel == "" then null else $channel end),
|
|
145
|
+
mention: (if $mention == "" then null else $mention end),
|
|
146
|
+
username: (if $username == "" then null else $username end)
|
|
147
|
+
}' > "$CONFIG_FILE"
|
|
148
|
+
```
|
|
149
|
+
|
|
150
|
+
### Add event-specific config if user didn't select all events:
|
|
151
|
+
|
|
152
|
+
For each event NOT selected, disable it:
|
|
153
|
+
|
|
154
|
+
```bash
|
|
155
|
+
# Example: disable session-start if not selected
|
|
156
|
+
echo "$(cat "$CONFIG_FILE")" | jq \
|
|
157
|
+
'.notifications.events = (.notifications.events // {}) |
|
|
158
|
+
.notifications.events["session-start"] = {enabled: false}' > "$CONFIG_FILE"
|
|
159
|
+
```
|
|
160
|
+
|
|
161
|
+
## Step 8: Test the Configuration
|
|
162
|
+
|
|
163
|
+
After writing config, offer to send a test notification:
|
|
164
|
+
|
|
165
|
+
Use AskUserQuestion:
|
|
166
|
+
|
|
167
|
+
**Question:** "Send a test notification to verify the setup?"
|
|
168
|
+
|
|
169
|
+
**Options:**
|
|
170
|
+
1. **Yes, test now (Recommended)** - Send a test message to your Slack channel
|
|
171
|
+
2. **No, I'll test later** - Skip testing
|
|
172
|
+
|
|
173
|
+
### If testing:
|
|
174
|
+
|
|
175
|
+
```bash
|
|
176
|
+
RESPONSE=$(curl -s -o /dev/null -w "%{http_code}" \
|
|
177
|
+
-H "Content-Type: application/json" \
|
|
178
|
+
-d "{\"text\": \"${MENTION:+$MENTION\\n}OMX test notification - Slack is configured!\", \"username\": \"${USERNAME:-OMX}\"}" \
|
|
179
|
+
"$WEBHOOK_URL")
|
|
180
|
+
|
|
181
|
+
if [ "$RESPONSE" = "200" ]; then
|
|
182
|
+
echo "Test notification sent successfully!"
|
|
183
|
+
else
|
|
184
|
+
echo "Failed (HTTP $RESPONSE). Check the webhook URL and channel permissions."
|
|
185
|
+
fi
|
|
186
|
+
```
|
|
187
|
+
|
|
188
|
+
Report success or failure. Common issues:
|
|
189
|
+
- **400 Bad Request**: Malformed JSON or invalid channel override
|
|
190
|
+
- **403 Forbidden**: Channel override not permitted by the webhook
|
|
191
|
+
- **404 Not Found**: Webhook URL is invalid or revoked — regenerate it in Slack
|
|
192
|
+
|
|
193
|
+
## Step 9: Confirm
|
|
194
|
+
|
|
195
|
+
Display the final configuration summary:
|
|
196
|
+
|
|
197
|
+
```
|
|
198
|
+
Slack Notifications Configured!
|
|
199
|
+
|
|
200
|
+
Webhook: https://hooks.slack.com/services/...
|
|
201
|
+
Channel: #dev-alerts (or "webhook default")
|
|
202
|
+
Mention: <!channel> (or "none")
|
|
203
|
+
Username: OMX
|
|
204
|
+
Events: session-end, ask-user-question
|
|
205
|
+
|
|
206
|
+
Config saved to: ~/.codex/.omx-config.json
|
|
207
|
+
|
|
208
|
+
You can also set these via environment variables:
|
|
209
|
+
OMX_SLACK_WEBHOOK_URL=https://hooks.slack.com/services/...
|
|
210
|
+
OMX_SLACK_MENTION=<!channel>
|
|
211
|
+
|
|
212
|
+
To reconfigure: /configure-slack
|
|
213
|
+
To configure Discord: /configure-discord
|
|
214
|
+
To configure Telegram: /configure-telegram
|
|
215
|
+
```
|
|
216
|
+
|
|
217
|
+
## Environment Variable Alternative
|
|
218
|
+
|
|
219
|
+
Users can skip this wizard entirely by setting env vars in their shell profile:
|
|
220
|
+
|
|
221
|
+
```bash
|
|
222
|
+
export OMX_SLACK_WEBHOOK_URL="https://hooks.slack.com/services/..."
|
|
223
|
+
export OMX_SLACK_MENTION="<!channel>" # optional
|
|
224
|
+
```
|
|
225
|
+
|
|
226
|
+
Env vars are auto-detected by the notification system without needing `.omx-config.json`.
|
|
@@ -10,14 +10,14 @@ Use this skill when users want to install or refresh oh-my-codex for the **curre
|
|
|
10
10
|
## Command
|
|
11
11
|
|
|
12
12
|
```bash
|
|
13
|
-
omx setup [--force] [--dry-run] [--verbose] [--scope <user|project
|
|
13
|
+
omx setup [--force] [--dry-run] [--verbose] [--scope <user|project>]
|
|
14
14
|
```
|
|
15
15
|
|
|
16
16
|
Supported setup flags (current implementation):
|
|
17
17
|
- `--force`: overwrite/reinstall managed artifacts where applicable
|
|
18
18
|
- `--dry-run`: print actions without mutating files
|
|
19
19
|
- `--verbose`: print per-file/per-step details
|
|
20
|
-
- `--scope`: choose install scope (`user`, `project
|
|
20
|
+
- `--scope`: choose install scope (`user`, `project`)
|
|
21
21
|
|
|
22
22
|
## What this setup actually does
|
|
23
23
|
|
|
@@ -25,31 +25,26 @@ Supported setup flags (current implementation):
|
|
|
25
25
|
|
|
26
26
|
1. Resolve setup scope:
|
|
27
27
|
- `--scope` explicit value
|
|
28
|
-
- else persisted `./.omx/setup-scope.json`
|
|
28
|
+
- else persisted `./.omx/setup-scope.json` (with automatic migration of legacy values)
|
|
29
29
|
- else interactive prompt on TTY (default `user`)
|
|
30
30
|
- else default `user` (safe for CI/tests)
|
|
31
|
-
2. Create
|
|
32
|
-
3.
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
- install skills
|
|
37
|
-
- merge OMX config.toml
|
|
38
|
-
4. For `project` scope: skip prompt/skill/config/native-agent installs with console messages
|
|
39
|
-
6. Verify required team MCP comm tool exports exist in built `dist/mcp/state-server.js`
|
|
40
|
-
7. Generate project-root `./AGENTS.md` from `templates/AGENTS.md` (or skip when existing and no force)
|
|
41
|
-
8. Configure notify hook references and write `./.omx/hud-config.json`
|
|
31
|
+
2. Create directories and persist effective scope
|
|
32
|
+
3. Install prompts, native agent configs, skills, and merge config.toml (scope determines target directories)
|
|
33
|
+
4. Verify required team MCP comm tool exports exist in built `dist/mcp/state-server.js`
|
|
34
|
+
5. Generate project-root `./AGENTS.md` from `templates/AGENTS.md` (or skip when existing and no force)
|
|
35
|
+
6. Configure notify hook references and write `./.omx/hud-config.json`
|
|
42
36
|
|
|
43
37
|
## Important behavior notes
|
|
44
38
|
|
|
45
39
|
- `omx setup` only prompts for scope when no scope is provided/persisted and stdin/stdout are TTY.
|
|
46
40
|
- Local project orchestration file is `./AGENTS.md` (project root).
|
|
41
|
+
- If `AGENTS.md` exists and `--force` is not used, interactive TTY runs ask whether to overwrite. Non-interactive runs preserve the file.
|
|
47
42
|
- Scope targets:
|
|
48
43
|
- `user`: user directories (`~/.codex`, `~/.agents/skills`, `~/.omx/agents`)
|
|
49
|
-
- `project
|
|
50
|
-
|
|
51
|
-
- If persisted scope is `project-local`, `omx` launch automatically uses `CODEX_HOME=./.codex` unless user explicitly overrides `CODEX_HOME`.
|
|
44
|
+
- `project`: local directories (`./.codex`, `./.agents/skills`, `./.omx/agents`)
|
|
45
|
+
- If persisted scope is `project`, `omx` launch automatically uses `CODEX_HOME=./.codex` unless user explicitly overrides `CODEX_HOME`.
|
|
52
46
|
- With `--force`, AGENTS overwrite may still be skipped if an active OMX session is detected (safety guard).
|
|
47
|
+
- Legacy persisted scope values (`project-local`) are automatically migrated to `project` with a one-time warning.
|
|
53
48
|
|
|
54
49
|
## Recommended workflow
|
|
55
50
|
|
|
@@ -70,8 +65,8 @@ omx doctor
|
|
|
70
65
|
## Expected verification indicators
|
|
71
66
|
|
|
72
67
|
From `omx doctor`, expect:
|
|
73
|
-
- Prompts installed (scope-dependent: user or project
|
|
74
|
-
- Skills installed (scope-dependent: user or project
|
|
68
|
+
- Prompts installed (scope-dependent: user or project)
|
|
69
|
+
- Skills installed (scope-dependent: user or project)
|
|
75
70
|
- AGENTS.md found in project root
|
|
76
71
|
- `.omx/state` exists
|
|
77
72
|
- OMX MCP servers configured in scope target `config.toml` (`~/.codex/config.toml` or `./.codex/config.toml`)
|