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
|
@@ -5,12 +5,24 @@
|
|
|
5
5
|
* Supports markdown (Discord/Telegram) and plain text (Slack/webhook) formats.
|
|
6
6
|
*/
|
|
7
7
|
import { basename } from "path";
|
|
8
|
-
/** ANSI CSI escape sequences
|
|
9
|
-
const ANSI_RE = /\x1b
|
|
10
|
-
/**
|
|
8
|
+
/** ANSI CSI escape sequences and two-character escapes */
|
|
9
|
+
const ANSI_RE = /\x1b(?:[@-Z\\-_]|\[[0-9;]*[A-Za-z])/g;
|
|
10
|
+
/** OMX UI chrome: spinner/progress indicator characters */
|
|
11
11
|
const SPINNER_LINE_RE = /^[●⎿✻·◼]/;
|
|
12
12
|
/** tmux expand hint injected by some pane-capture scripts */
|
|
13
13
|
const CTRL_O_RE = /ctrl\+o to expand/i;
|
|
14
|
+
/** Lines composed entirely of box-drawing characters and whitespace */
|
|
15
|
+
const BOX_DRAWING_RE = /^[\s─═│║┌┐└┘┬┴├┤╔╗╚╝╠╣╦╩╬╟╢╤╧╪━┃┏┓┗┛┣┫┳┻╋┠┨┯┷┿╂]+$/;
|
|
16
|
+
/** OMX HUD status lines: [OMX#...] or [OMX] (unversioned) */
|
|
17
|
+
const OMX_HUD_RE = /\[OMX[#\]]/;
|
|
18
|
+
/** Bypass-permissions indicator lines starting with ⏵ */
|
|
19
|
+
const BYPASS_PERM_RE = /^⏵/;
|
|
20
|
+
/** Bare shell prompt with no command after it */
|
|
21
|
+
const BARE_PROMPT_RE = /^[❯>$%#]+$/;
|
|
22
|
+
/** Minimum ratio of alphanumeric characters for a line to be "meaningful" */
|
|
23
|
+
const MIN_ALNUM_RATIO = 0.15;
|
|
24
|
+
/** Maximum number of meaningful lines to include in a notification */
|
|
25
|
+
const MAX_TAIL_LINES = 10;
|
|
14
26
|
/**
|
|
15
27
|
* Parse raw tmux pane output into clean, human-readable text suitable for
|
|
16
28
|
* inclusion in a notification message.
|
|
@@ -18,16 +30,39 @@ const CTRL_O_RE = /ctrl\+o to expand/i;
|
|
|
18
30
|
* - Strips ANSI escape codes
|
|
19
31
|
* - Removes UI chrome lines (spinner/progress characters: ●⎿✻·◼)
|
|
20
32
|
* - Removes "ctrl+o to expand" hint lines
|
|
33
|
+
* - Removes box-drawing character lines
|
|
34
|
+
* - Removes OMX HUD status lines
|
|
35
|
+
* - Removes bypass-permissions indicator lines
|
|
36
|
+
* - Removes bare shell prompt lines
|
|
37
|
+
* - Drops lines with < 15% alphanumeric density (for lines >= 8 chars)
|
|
21
38
|
* - Caps at the last 10 meaningful (non-empty) lines
|
|
22
39
|
*/
|
|
23
40
|
export function parseTmuxTail(raw) {
|
|
24
|
-
const
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
41
|
+
const meaningful = [];
|
|
42
|
+
for (const line of raw.split("\n")) {
|
|
43
|
+
const stripped = line.replace(ANSI_RE, "");
|
|
44
|
+
const trimmed = stripped.trim();
|
|
45
|
+
if (!trimmed)
|
|
46
|
+
continue;
|
|
47
|
+
if (SPINNER_LINE_RE.test(trimmed))
|
|
48
|
+
continue;
|
|
49
|
+
if (CTRL_O_RE.test(trimmed))
|
|
50
|
+
continue;
|
|
51
|
+
if (BOX_DRAWING_RE.test(trimmed))
|
|
52
|
+
continue;
|
|
53
|
+
if (OMX_HUD_RE.test(trimmed))
|
|
54
|
+
continue;
|
|
55
|
+
if (BYPASS_PERM_RE.test(trimmed))
|
|
56
|
+
continue;
|
|
57
|
+
if (BARE_PROMPT_RE.test(trimmed))
|
|
58
|
+
continue;
|
|
59
|
+
// Alphanumeric density check: drop lines mostly composed of special characters
|
|
60
|
+
const alnumCount = (trimmed.match(/[a-zA-Z0-9]/g) || []).length;
|
|
61
|
+
if (trimmed.length >= 8 && alnumCount / trimmed.length < MIN_ALNUM_RATIO)
|
|
62
|
+
continue;
|
|
63
|
+
meaningful.push(stripped.trimEnd());
|
|
64
|
+
}
|
|
65
|
+
return meaningful.slice(-MAX_TAIL_LINES).join("\n");
|
|
31
66
|
}
|
|
32
67
|
function formatDuration(ms) {
|
|
33
68
|
if (!ms)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"formatter.js","sourceRoot":"","sources":["../../src/notifications/formatter.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EAAE,QAAQ,EAAE,MAAM,MAAM,CAAC;AAEhC
|
|
1
|
+
{"version":3,"file":"formatter.js","sourceRoot":"","sources":["../../src/notifications/formatter.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Hook Notification Configuration Types
|
|
3
|
+
*
|
|
4
|
+
* Schema for the hookTemplates key in .omx-config.json — user-customizable
|
|
5
|
+
* message templates with per-event, per-platform overrides.
|
|
6
|
+
*/
|
|
7
|
+
import type { NotificationPlatform } from "./types.js";
|
|
8
|
+
/** Template variables available for interpolation in message templates. */
|
|
9
|
+
export type TemplateVariable = "event" | "sessionId" | "message" | "timestamp" | "tmuxSession" | "projectPath" | "projectName" | "modesUsed" | "contextSummary" | "durationMs" | "agentsSpawned" | "agentsCompleted" | "reason" | "activeMode" | "iteration" | "maxIterations" | "question" | "incompleteTasks" | "agentName" | "agentType" | "tmuxTail" | "tmuxPaneId" | "duration" | "time" | "modesDisplay" | "iterationDisplay" | "agentDisplay" | "projectDisplay" | "footer" | "tmuxTailBlock" | "reasonDisplay";
|
|
10
|
+
/** Per-platform message template override */
|
|
11
|
+
export interface PlatformTemplateOverride {
|
|
12
|
+
/** Message template with {{variable}} placeholders */
|
|
13
|
+
template?: string;
|
|
14
|
+
/** Whether to send this event to this platform (inherits from event-level if not set) */
|
|
15
|
+
enabled?: boolean;
|
|
16
|
+
}
|
|
17
|
+
/** Per-event hook configuration */
|
|
18
|
+
export interface HookEventConfig {
|
|
19
|
+
/** Whether this event fires notifications */
|
|
20
|
+
enabled: boolean;
|
|
21
|
+
/** Default message template for this event (all platforms) */
|
|
22
|
+
template?: string;
|
|
23
|
+
/** Per-platform template overrides */
|
|
24
|
+
platforms?: Partial<Record<NotificationPlatform, PlatformTemplateOverride>>;
|
|
25
|
+
}
|
|
26
|
+
/** Top-level schema for the hookTemplates key in .omx-config.json */
|
|
27
|
+
export interface HookNotificationConfig {
|
|
28
|
+
/** Schema version for future migration */
|
|
29
|
+
version: 1;
|
|
30
|
+
/** Global enable/disable */
|
|
31
|
+
enabled: boolean;
|
|
32
|
+
/** Default templates per event (used when no platform override exists) */
|
|
33
|
+
events?: {
|
|
34
|
+
"session-start"?: HookEventConfig;
|
|
35
|
+
"session-stop"?: HookEventConfig;
|
|
36
|
+
"session-end"?: HookEventConfig;
|
|
37
|
+
"session-idle"?: HookEventConfig;
|
|
38
|
+
"ask-user-question"?: HookEventConfig;
|
|
39
|
+
};
|
|
40
|
+
/** Global default template (fallback when event has no template) */
|
|
41
|
+
defaultTemplate?: string;
|
|
42
|
+
}
|
|
43
|
+
//# sourceMappingURL=hook-config-types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hook-config-types.d.ts","sourceRoot":"","sources":["../../src/notifications/hook-config-types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAEvD,2EAA2E;AAC3E,MAAM,MAAM,gBAAgB,GAExB,OAAO,GAAG,WAAW,GAAG,SAAS,GAAG,WAAW,GAAG,aAAa,GAC/D,aAAa,GAAG,aAAa,GAAG,WAAW,GAAG,gBAAgB,GAC9D,YAAY,GAAG,eAAe,GAAG,iBAAiB,GAClD,QAAQ,GAAG,YAAY,GAAG,WAAW,GAAG,eAAe,GACvD,UAAU,GAAG,iBAAiB,GAAG,WAAW,GAAG,WAAW,GAC1D,UAAU,GAAG,YAAY,GAEzB,UAAU,GACV,MAAM,GACN,cAAc,GACd,kBAAkB,GAClB,cAAc,GACd,gBAAgB,GAChB,QAAQ,GACR,eAAe,GACf,eAAe,CAAC;AAEpB,6CAA6C;AAC7C,MAAM,WAAW,wBAAwB;IACvC,sDAAsD;IACtD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,yFAAyF;IACzF,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,mCAAmC;AACnC,MAAM,WAAW,eAAe;IAC9B,6CAA6C;IAC7C,OAAO,EAAE,OAAO,CAAC;IACjB,8DAA8D;IAC9D,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,sCAAsC;IACtC,SAAS,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,oBAAoB,EAAE,wBAAwB,CAAC,CAAC,CAAC;CAC7E;AAED,qEAAqE;AACrE,MAAM,WAAW,sBAAsB;IACrC,0CAA0C;IAC1C,OAAO,EAAE,CAAC,CAAC;IACX,4BAA4B;IAC5B,OAAO,EAAE,OAAO,CAAC;IACjB,0EAA0E;IAC1E,MAAM,CAAC,EAAE;QACP,eAAe,CAAC,EAAE,eAAe,CAAC;QAClC,cAAc,CAAC,EAAE,eAAe,CAAC;QACjC,aAAa,CAAC,EAAE,eAAe,CAAC;QAChC,cAAc,CAAC,EAAE,eAAe,CAAC;QACjC,mBAAmB,CAAC,EAAE,eAAe,CAAC;KACvC,CAAC;IACF,oEAAoE;IACpE,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hook-config-types.js","sourceRoot":"","sources":["../../src/notifications/hook-config-types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Hook Notification Config Reader
|
|
3
|
+
*
|
|
4
|
+
* Reads hookTemplates from .omx-config.json for user-customizable message templates.
|
|
5
|
+
* Config is stored under the notifications.hookTemplates key in codexHome()/.omx-config.json.
|
|
6
|
+
* Env var OMX_HOOK_CONFIG overrides to a separate file path.
|
|
7
|
+
*/
|
|
8
|
+
import type { HookNotificationConfig } from "./hook-config-types.js";
|
|
9
|
+
import type { FullNotificationConfig, NotificationEvent, NotificationPlatform } from "./types.js";
|
|
10
|
+
/**
|
|
11
|
+
* Read and cache the hook notification config.
|
|
12
|
+
*
|
|
13
|
+
* Primary source: notifications.hookTemplates key in codexHome()/.omx-config.json
|
|
14
|
+
* Env var override: OMX_HOOK_CONFIG points to a separate file containing the
|
|
15
|
+
* HookNotificationConfig JSON directly (used for testing and advanced overrides).
|
|
16
|
+
*
|
|
17
|
+
* - Returns null when config does not exist (no error)
|
|
18
|
+
* - Returns null when config has `enabled: false`
|
|
19
|
+
* - Caches after first read for performance
|
|
20
|
+
*/
|
|
21
|
+
export declare function getHookConfig(): HookNotificationConfig | null;
|
|
22
|
+
/**
|
|
23
|
+
* Clear the cached hook config. Call in tests to reset state.
|
|
24
|
+
*/
|
|
25
|
+
export declare function resetHookConfigCache(): void;
|
|
26
|
+
/**
|
|
27
|
+
* Resolve the template for a specific event and platform.
|
|
28
|
+
*
|
|
29
|
+
* Cascade: platform override > event template > defaultTemplate > null
|
|
30
|
+
*/
|
|
31
|
+
export declare function resolveEventTemplate(hookConfig: HookNotificationConfig | null, event: NotificationEvent, platform: NotificationPlatform): string | null;
|
|
32
|
+
/**
|
|
33
|
+
* Merge hook config event enabled/disabled flags into a FullNotificationConfig.
|
|
34
|
+
*
|
|
35
|
+
* Hook config takes precedence for event gating:
|
|
36
|
+
* - hook event `enabled: false` overrides .omx-config.json event `enabled: true`
|
|
37
|
+
* - Platform credentials are NOT affected (they stay in .omx-config.json)
|
|
38
|
+
*/
|
|
39
|
+
export declare function mergeHookConfigIntoNotificationConfig(hookConfig: HookNotificationConfig, notifConfig: FullNotificationConfig): FullNotificationConfig;
|
|
40
|
+
//# sourceMappingURL=hook-config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hook-config.d.ts","sourceRoot":"","sources":["../../src/notifications/hook-config.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAKH,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,wBAAwB,CAAC;AACrE,OAAO,KAAK,EACV,sBAAsB,EACtB,iBAAiB,EACjB,oBAAoB,EACrB,MAAM,YAAY,CAAC;AAKpB;;;;;;;;;;GAUG;AACH,wBAAgB,aAAa,IAAI,sBAAsB,GAAG,IAAI,CAoD7D;AAED;;GAEG;AACH,wBAAgB,oBAAoB,IAAI,IAAI,CAE3C;AAED;;;;GAIG;AACH,wBAAgB,oBAAoB,CAClC,UAAU,EAAE,sBAAsB,GAAG,IAAI,EACzC,KAAK,EAAE,iBAAiB,EACxB,QAAQ,EAAE,oBAAoB,GAC7B,MAAM,GAAG,IAAI,CAgBf;AAED;;;;;;GAMG;AACH,wBAAgB,qCAAqC,CACnD,UAAU,EAAE,sBAAsB,EAClC,WAAW,EAAE,sBAAsB,GAClC,sBAAsB,CAkBxB"}
|
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Hook Notification Config Reader
|
|
3
|
+
*
|
|
4
|
+
* Reads hookTemplates from .omx-config.json for user-customizable message templates.
|
|
5
|
+
* Config is stored under the notifications.hookTemplates key in codexHome()/.omx-config.json.
|
|
6
|
+
* Env var OMX_HOOK_CONFIG overrides to a separate file path.
|
|
7
|
+
*/
|
|
8
|
+
import { readFileSync, existsSync } from "fs";
|
|
9
|
+
import { join } from "path";
|
|
10
|
+
import { codexHome } from "../utils/paths.js";
|
|
11
|
+
/** Cached hook config. `undefined` = not yet read, `null` = read but absent/disabled. */
|
|
12
|
+
let cachedConfig;
|
|
13
|
+
/**
|
|
14
|
+
* Read and cache the hook notification config.
|
|
15
|
+
*
|
|
16
|
+
* Primary source: notifications.hookTemplates key in codexHome()/.omx-config.json
|
|
17
|
+
* Env var override: OMX_HOOK_CONFIG points to a separate file containing the
|
|
18
|
+
* HookNotificationConfig JSON directly (used for testing and advanced overrides).
|
|
19
|
+
*
|
|
20
|
+
* - Returns null when config does not exist (no error)
|
|
21
|
+
* - Returns null when config has `enabled: false`
|
|
22
|
+
* - Caches after first read for performance
|
|
23
|
+
*/
|
|
24
|
+
export function getHookConfig() {
|
|
25
|
+
if (cachedConfig !== undefined)
|
|
26
|
+
return cachedConfig;
|
|
27
|
+
const envOverridePath = process.env.OMX_HOOK_CONFIG;
|
|
28
|
+
if (envOverridePath) {
|
|
29
|
+
// Env var: read HookNotificationConfig directly from separate file
|
|
30
|
+
if (!existsSync(envOverridePath)) {
|
|
31
|
+
cachedConfig = null;
|
|
32
|
+
return null;
|
|
33
|
+
}
|
|
34
|
+
try {
|
|
35
|
+
const raw = JSON.parse(readFileSync(envOverridePath, "utf-8"));
|
|
36
|
+
if (!raw || raw.enabled === false) {
|
|
37
|
+
cachedConfig = null;
|
|
38
|
+
return null;
|
|
39
|
+
}
|
|
40
|
+
cachedConfig = raw;
|
|
41
|
+
return cachedConfig;
|
|
42
|
+
}
|
|
43
|
+
catch {
|
|
44
|
+
cachedConfig = null;
|
|
45
|
+
return null;
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
// Primary: read from notifications.hookTemplates in .omx-config.json
|
|
49
|
+
const OMX_CONFIG_PATH = join(codexHome(), ".omx-config.json");
|
|
50
|
+
if (!existsSync(OMX_CONFIG_PATH)) {
|
|
51
|
+
cachedConfig = null;
|
|
52
|
+
return null;
|
|
53
|
+
}
|
|
54
|
+
try {
|
|
55
|
+
const raw = JSON.parse(readFileSync(OMX_CONFIG_PATH, "utf-8"));
|
|
56
|
+
if (!raw || typeof raw !== "object") {
|
|
57
|
+
cachedConfig = null;
|
|
58
|
+
return null;
|
|
59
|
+
}
|
|
60
|
+
const hookTemplates = raw.notifications
|
|
61
|
+
? raw.notifications.hookTemplates
|
|
62
|
+
: undefined;
|
|
63
|
+
if (!hookTemplates || hookTemplates.enabled === false) {
|
|
64
|
+
cachedConfig = null;
|
|
65
|
+
return null;
|
|
66
|
+
}
|
|
67
|
+
cachedConfig = hookTemplates;
|
|
68
|
+
return cachedConfig;
|
|
69
|
+
}
|
|
70
|
+
catch {
|
|
71
|
+
cachedConfig = null;
|
|
72
|
+
return null;
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Clear the cached hook config. Call in tests to reset state.
|
|
77
|
+
*/
|
|
78
|
+
export function resetHookConfigCache() {
|
|
79
|
+
cachedConfig = undefined;
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* Resolve the template for a specific event and platform.
|
|
83
|
+
*
|
|
84
|
+
* Cascade: platform override > event template > defaultTemplate > null
|
|
85
|
+
*/
|
|
86
|
+
export function resolveEventTemplate(hookConfig, event, platform) {
|
|
87
|
+
if (!hookConfig)
|
|
88
|
+
return null;
|
|
89
|
+
const eventConfig = hookConfig.events?.[event];
|
|
90
|
+
if (eventConfig) {
|
|
91
|
+
// Platform-specific override
|
|
92
|
+
const platformOverride = eventConfig.platforms?.[platform];
|
|
93
|
+
if (platformOverride?.template)
|
|
94
|
+
return platformOverride.template;
|
|
95
|
+
// Event-level template
|
|
96
|
+
if (eventConfig.template)
|
|
97
|
+
return eventConfig.template;
|
|
98
|
+
}
|
|
99
|
+
// Global default template
|
|
100
|
+
return hookConfig.defaultTemplate || null;
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* Merge hook config event enabled/disabled flags into a FullNotificationConfig.
|
|
104
|
+
*
|
|
105
|
+
* Hook config takes precedence for event gating:
|
|
106
|
+
* - hook event `enabled: false` overrides .omx-config.json event `enabled: true`
|
|
107
|
+
* - Platform credentials are NOT affected (they stay in .omx-config.json)
|
|
108
|
+
*/
|
|
109
|
+
export function mergeHookConfigIntoNotificationConfig(hookConfig, notifConfig) {
|
|
110
|
+
if (!hookConfig.events)
|
|
111
|
+
return notifConfig;
|
|
112
|
+
const merged = { ...notifConfig };
|
|
113
|
+
const events = { ...(merged.events || {}) };
|
|
114
|
+
for (const [eventName, hookEventConfig] of Object.entries(hookConfig.events)) {
|
|
115
|
+
if (!hookEventConfig)
|
|
116
|
+
continue;
|
|
117
|
+
const event = eventName;
|
|
118
|
+
const existing = events[event];
|
|
119
|
+
events[event] = {
|
|
120
|
+
...(existing || {}),
|
|
121
|
+
enabled: hookEventConfig.enabled,
|
|
122
|
+
};
|
|
123
|
+
}
|
|
124
|
+
merged.events = events;
|
|
125
|
+
return merged;
|
|
126
|
+
}
|
|
127
|
+
//# sourceMappingURL=hook-config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hook-config.js","sourceRoot":"","sources":["../../src/notifications/hook-config.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Idle Notification Cooldown
|
|
3
|
+
*
|
|
4
|
+
* Prevents flooding users with session-idle notifications by enforcing a
|
|
5
|
+
* minimum interval between dispatches. Ported from OMC persistent-mode hook.
|
|
6
|
+
*
|
|
7
|
+
* Config key : notifications.idleCooldownSeconds in ~/.codex/.omx-config.json
|
|
8
|
+
* Env var : OMX_IDLE_COOLDOWN_SECONDS (overrides config)
|
|
9
|
+
* State file : .omx/state/idle-notif-cooldown.json
|
|
10
|
+
* (session-scoped when sessionId is available)
|
|
11
|
+
*
|
|
12
|
+
* A cooldown value of 0 disables throttling entirely.
|
|
13
|
+
*/
|
|
14
|
+
/**
|
|
15
|
+
* Read the idle notification cooldown in seconds.
|
|
16
|
+
*
|
|
17
|
+
* Resolution order:
|
|
18
|
+
* 1. OMX_IDLE_COOLDOWN_SECONDS env var
|
|
19
|
+
* 2. notifications.idleCooldownSeconds in ~/.codex/.omx-config.json
|
|
20
|
+
* 3. Default: 60 seconds
|
|
21
|
+
*/
|
|
22
|
+
export declare function getIdleNotificationCooldownSeconds(): number;
|
|
23
|
+
/**
|
|
24
|
+
* Check whether the idle notification cooldown has elapsed.
|
|
25
|
+
*
|
|
26
|
+
* Returns true if the notification should be sent (cooldown has elapsed or is disabled).
|
|
27
|
+
* Returns false if the notification should be suppressed (too soon since last send).
|
|
28
|
+
*/
|
|
29
|
+
export declare function shouldSendIdleNotification(stateDir: string, sessionId?: string): boolean;
|
|
30
|
+
/**
|
|
31
|
+
* Record that an idle notification was sent at the current timestamp.
|
|
32
|
+
* Call this after a successful dispatch to arm the cooldown.
|
|
33
|
+
*/
|
|
34
|
+
export declare function recordIdleNotificationSent(stateDir: string, sessionId?: string): void;
|
|
35
|
+
//# sourceMappingURL=idle-cooldown.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"idle-cooldown.d.ts","sourceRoot":"","sources":["../../src/notifications/idle-cooldown.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AASH;;;;;;;GAOG;AACH,wBAAgB,kCAAkC,IAAI,MAAM,CA0B3D;AAaD;;;;;GAKG;AACH,wBAAgB,0BAA0B,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAuBxF;AAED;;;GAGG;AACH,wBAAgB,0BAA0B,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CASrF"}
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Idle Notification Cooldown
|
|
3
|
+
*
|
|
4
|
+
* Prevents flooding users with session-idle notifications by enforcing a
|
|
5
|
+
* minimum interval between dispatches. Ported from OMC persistent-mode hook.
|
|
6
|
+
*
|
|
7
|
+
* Config key : notifications.idleCooldownSeconds in ~/.codex/.omx-config.json
|
|
8
|
+
* Env var : OMX_IDLE_COOLDOWN_SECONDS (overrides config)
|
|
9
|
+
* State file : .omx/state/idle-notif-cooldown.json
|
|
10
|
+
* (session-scoped when sessionId is available)
|
|
11
|
+
*
|
|
12
|
+
* A cooldown value of 0 disables throttling entirely.
|
|
13
|
+
*/
|
|
14
|
+
import { existsSync, readFileSync, writeFileSync, mkdirSync } from 'fs';
|
|
15
|
+
import { join, dirname } from 'path';
|
|
16
|
+
import { codexHome } from '../utils/paths.js';
|
|
17
|
+
const DEFAULT_COOLDOWN_SECONDS = 60;
|
|
18
|
+
const SESSION_ID_SAFE_PATTERN = /^[a-zA-Z0-9][a-zA-Z0-9_-]{0,255}$/;
|
|
19
|
+
/**
|
|
20
|
+
* Read the idle notification cooldown in seconds.
|
|
21
|
+
*
|
|
22
|
+
* Resolution order:
|
|
23
|
+
* 1. OMX_IDLE_COOLDOWN_SECONDS env var
|
|
24
|
+
* 2. notifications.idleCooldownSeconds in ~/.codex/.omx-config.json
|
|
25
|
+
* 3. Default: 60 seconds
|
|
26
|
+
*/
|
|
27
|
+
export function getIdleNotificationCooldownSeconds() {
|
|
28
|
+
// 1. Environment variable override
|
|
29
|
+
const envVal = process.env.OMX_IDLE_COOLDOWN_SECONDS;
|
|
30
|
+
if (envVal !== undefined) {
|
|
31
|
+
const parsed = Number(envVal);
|
|
32
|
+
if (Number.isFinite(parsed) && parsed >= 0) {
|
|
33
|
+
return Math.floor(parsed);
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
// 2. Config file
|
|
37
|
+
try {
|
|
38
|
+
const configPath = join(codexHome(), '.omx-config.json');
|
|
39
|
+
if (existsSync(configPath)) {
|
|
40
|
+
const raw = JSON.parse(readFileSync(configPath, 'utf-8'));
|
|
41
|
+
const notifications = raw?.notifications;
|
|
42
|
+
const val = notifications?.idleCooldownSeconds;
|
|
43
|
+
if (typeof val === 'number' && Number.isFinite(val)) {
|
|
44
|
+
return Math.max(0, Math.floor(val));
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
catch {
|
|
49
|
+
// ignore parse errors — fall through to default
|
|
50
|
+
}
|
|
51
|
+
return DEFAULT_COOLDOWN_SECONDS;
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Resolve the path to the cooldown state file.
|
|
55
|
+
* Uses a session-scoped path when sessionId is provided and safe.
|
|
56
|
+
*/
|
|
57
|
+
function getCooldownStatePath(stateDir, sessionId) {
|
|
58
|
+
if (sessionId && SESSION_ID_SAFE_PATTERN.test(sessionId)) {
|
|
59
|
+
return join(stateDir, 'sessions', sessionId, 'idle-notif-cooldown.json');
|
|
60
|
+
}
|
|
61
|
+
return join(stateDir, 'idle-notif-cooldown.json');
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Check whether the idle notification cooldown has elapsed.
|
|
65
|
+
*
|
|
66
|
+
* Returns true if the notification should be sent (cooldown has elapsed or is disabled).
|
|
67
|
+
* Returns false if the notification should be suppressed (too soon since last send).
|
|
68
|
+
*/
|
|
69
|
+
export function shouldSendIdleNotification(stateDir, sessionId) {
|
|
70
|
+
const cooldownSecs = getIdleNotificationCooldownSeconds();
|
|
71
|
+
// Cooldown of 0 means disabled — always send
|
|
72
|
+
if (cooldownSecs === 0)
|
|
73
|
+
return true;
|
|
74
|
+
const cooldownPath = getCooldownStatePath(stateDir, sessionId);
|
|
75
|
+
try {
|
|
76
|
+
if (!existsSync(cooldownPath))
|
|
77
|
+
return true;
|
|
78
|
+
const data = JSON.parse(readFileSync(cooldownPath, 'utf-8'));
|
|
79
|
+
if (data?.lastSentAt && typeof data.lastSentAt === 'string') {
|
|
80
|
+
const lastSentMs = new Date(data.lastSentAt).getTime();
|
|
81
|
+
if (Number.isFinite(lastSentMs)) {
|
|
82
|
+
const elapsedSecs = (Date.now() - lastSentMs) / 1000;
|
|
83
|
+
if (elapsedSecs < cooldownSecs)
|
|
84
|
+
return false;
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
catch {
|
|
89
|
+
// ignore read/parse errors — treat as no cooldown file, allow send
|
|
90
|
+
}
|
|
91
|
+
return true;
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* Record that an idle notification was sent at the current timestamp.
|
|
95
|
+
* Call this after a successful dispatch to arm the cooldown.
|
|
96
|
+
*/
|
|
97
|
+
export function recordIdleNotificationSent(stateDir, sessionId) {
|
|
98
|
+
const cooldownPath = getCooldownStatePath(stateDir, sessionId);
|
|
99
|
+
try {
|
|
100
|
+
const dir = dirname(cooldownPath);
|
|
101
|
+
mkdirSync(dir, { recursive: true });
|
|
102
|
+
writeFileSync(cooldownPath, JSON.stringify({ lastSentAt: new Date().toISOString() }, null, 2));
|
|
103
|
+
}
|
|
104
|
+
catch {
|
|
105
|
+
// ignore write errors — best effort
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
//# sourceMappingURL=idle-cooldown.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"idle-cooldown.js","sourceRoot":"","sources":["../../src/notifications/idle-cooldown.ts"],"names":[],"mappings":"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"}
|
|
@@ -19,6 +19,9 @@ export type { SessionMapping } from "./session-registry.js";
|
|
|
19
19
|
export { startReplyListener, stopReplyListener, getReplyListenerStatus, isDaemonRunning, sanitizeReplyInput, } from "./reply-listener.js";
|
|
20
20
|
export { notify, loadNotificationConfig } from "./notifier.js";
|
|
21
21
|
export type { NotificationConfig, NotificationPayload } from "./notifier.js";
|
|
22
|
+
export { interpolateTemplate, validateTemplate, computeTemplateVariables, getDefaultTemplate, } from "./template-engine.js";
|
|
23
|
+
export { getHookConfig, resetHookConfigCache, resolveEventTemplate, mergeHookConfigIntoNotificationConfig, } from "./hook-config.js";
|
|
24
|
+
export type { HookNotificationConfig, HookEventConfig, PlatformTemplateOverride, TemplateVariable, } from "./hook-config-types.js";
|
|
22
25
|
import type { NotificationEvent, FullNotificationPayload, DispatchResult } from "./types.js";
|
|
23
26
|
/**
|
|
24
27
|
* High-level notification function for lifecycle events.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/notifications/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,YAAY,EACV,iBAAiB,EACjB,oBAAoB,EACpB,sBAAsB,EACtB,uBAAuB,EACvB,kBAAkB,EAClB,cAAc,EACd,yBAAyB,EACzB,4BAA4B,EAC5B,0BAA0B,EAC1B,uBAAuB,EACvB,yBAAyB,EACzB,uBAAuB,EACvB,WAAW,EACX,0BAA0B,EAC1B,kBAAkB,EAClB,cAAc,GACf,MAAM,YAAY,CAAC;AAEpB,OAAO,EACL,qBAAqB,EACrB,WAAW,EACX,cAAc,EACd,YAAY,EACZ,SAAS,EACT,WAAW,GACZ,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACL,kBAAkB,EAClB,kBAAkB,EAClB,iBAAiB,EACjB,gBAAgB,EAChB,iBAAiB,EACjB,qBAAqB,GACtB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACL,qBAAqB,EACrB,oBAAoB,EACpB,mBAAmB,EACnB,cAAc,EACd,eAAe,GAChB,MAAM,WAAW,CAAC;AACnB,OAAO,EACL,qBAAqB,EACrB,cAAc,EACd,mBAAmB,EACnB,cAAc,EACd,8BAA8B,EAC9B,oBAAoB,EACpB,YAAY,EACZ,oBAAoB,EACpB,YAAY,EACZ,yBAAyB,EACzB,qBAAqB,GACtB,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,eAAe,EACf,eAAe,EACf,iBAAiB,EACjB,aAAa,EACb,oBAAoB,EACpB,UAAU,GACX,MAAM,uBAAuB,CAAC;AAC/B,YAAY,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,EACL,kBAAkB,EAClB,iBAAiB,EACjB,sBAAsB,EACtB,eAAe,EACf,kBAAkB,GACnB,MAAM,qBAAqB,CAAC;AAG7B,OAAO,EAAE,MAAM,EAAE,sBAAsB,EAAE,MAAM,eAAe,CAAC;AAC/D,YAAY,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/notifications/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,YAAY,EACV,iBAAiB,EACjB,oBAAoB,EACpB,sBAAsB,EACtB,uBAAuB,EACvB,kBAAkB,EAClB,cAAc,EACd,yBAAyB,EACzB,4BAA4B,EAC5B,0BAA0B,EAC1B,uBAAuB,EACvB,yBAAyB,EACzB,uBAAuB,EACvB,WAAW,EACX,0BAA0B,EAC1B,kBAAkB,EAClB,cAAc,GACf,MAAM,YAAY,CAAC;AAEpB,OAAO,EACL,qBAAqB,EACrB,WAAW,EACX,cAAc,EACd,YAAY,EACZ,SAAS,EACT,WAAW,GACZ,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACL,kBAAkB,EAClB,kBAAkB,EAClB,iBAAiB,EACjB,gBAAgB,EAChB,iBAAiB,EACjB,qBAAqB,GACtB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACL,qBAAqB,EACrB,oBAAoB,EACpB,mBAAmB,EACnB,cAAc,EACd,eAAe,GAChB,MAAM,WAAW,CAAC;AACnB,OAAO,EACL,qBAAqB,EACrB,cAAc,EACd,mBAAmB,EACnB,cAAc,EACd,8BAA8B,EAC9B,oBAAoB,EACpB,YAAY,EACZ,oBAAoB,EACpB,YAAY,EACZ,yBAAyB,EACzB,qBAAqB,GACtB,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,eAAe,EACf,eAAe,EACf,iBAAiB,EACjB,aAAa,EACb,oBAAoB,EACpB,UAAU,GACX,MAAM,uBAAuB,CAAC;AAC/B,YAAY,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,EACL,kBAAkB,EAClB,iBAAiB,EACjB,sBAAsB,EACtB,eAAe,EACf,kBAAkB,GACnB,MAAM,qBAAqB,CAAC;AAG7B,OAAO,EAAE,MAAM,EAAE,sBAAsB,EAAE,MAAM,eAAe,CAAC;AAC/D,YAAY,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC;AAG7E,OAAO,EACL,mBAAmB,EACnB,gBAAgB,EAChB,wBAAwB,EACxB,kBAAkB,GACnB,MAAM,sBAAsB,CAAC;AAG9B,OAAO,EACL,aAAa,EACb,oBAAoB,EACpB,oBAAoB,EACpB,qCAAqC,GACtC,MAAM,kBAAkB,CAAC;AAC1B,YAAY,EACV,sBAAsB,EACtB,eAAe,EACf,wBAAwB,EACxB,gBAAgB,GACjB,MAAM,wBAAwB,CAAC;AAEhC,OAAO,KAAK,EACV,iBAAiB,EACjB,uBAAuB,EACvB,cAAc,EACf,MAAM,YAAY,CAAC;AA0BpB;;;;;GAKG;AACH,wBAAsB,eAAe,CACnC,KAAK,EAAE,iBAAiB,EACxB,IAAI,EAAE,OAAO,CAAC,uBAAuB,CAAC,GAAG;IAAE,SAAS,EAAE,MAAM,CAAA;CAAE,EAC9D,WAAW,CAAC,EAAE,MAAM,GACnB,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC,CAyGhC"}
|
|
@@ -17,11 +17,31 @@ export { registerMessage, loadAllMappings, lookupByMessageId, removeSession, rem
|
|
|
17
17
|
export { startReplyListener, stopReplyListener, getReplyListenerStatus, isDaemonRunning, sanitizeReplyInput, } from "./reply-listener.js";
|
|
18
18
|
// Re-export the legacy notifier for backward compatibility
|
|
19
19
|
export { notify, loadNotificationConfig } from "./notifier.js";
|
|
20
|
-
|
|
20
|
+
// Template engine exports
|
|
21
|
+
export { interpolateTemplate, validateTemplate, computeTemplateVariables, getDefaultTemplate, } from "./template-engine.js";
|
|
22
|
+
// Hook config exports
|
|
23
|
+
export { getHookConfig, resetHookConfigCache, resolveEventTemplate, mergeHookConfigIntoNotificationConfig, } from "./hook-config.js";
|
|
24
|
+
import { getNotificationConfig, isEventEnabled, getVerbosity, shouldIncludeTmuxTail, getActiveProfileName } from "./config.js";
|
|
21
25
|
import { formatNotification } from "./formatter.js";
|
|
22
26
|
import { dispatchNotifications } from "./dispatcher.js";
|
|
23
27
|
import { getCurrentTmuxSession, captureTmuxPane } from "./tmux.js";
|
|
24
28
|
import { basename } from "path";
|
|
29
|
+
// Suppress unused import — used by callers via re-export
|
|
30
|
+
void getActiveProfileName;
|
|
31
|
+
/**
|
|
32
|
+
* Map a NotificationEvent to an OpenClawHookEvent.
|
|
33
|
+
* Returns null for events that have no OpenClaw equivalent.
|
|
34
|
+
*/
|
|
35
|
+
function toOpenClawEvent(event) {
|
|
36
|
+
switch (event) {
|
|
37
|
+
case "session-start": return "session-start";
|
|
38
|
+
case "session-end": return "session-end";
|
|
39
|
+
case "session-idle": return "session-idle";
|
|
40
|
+
case "ask-user-question": return "ask-user-question";
|
|
41
|
+
case "session-stop": return "stop";
|
|
42
|
+
default: return null;
|
|
43
|
+
}
|
|
44
|
+
}
|
|
25
45
|
/**
|
|
26
46
|
* High-level notification function for lifecycle events.
|
|
27
47
|
*
|
|
@@ -69,6 +89,28 @@ export async function notifyLifecycle(event, data, profileName) {
|
|
|
69
89
|
}
|
|
70
90
|
payload.message = data.message || formatNotification(payload);
|
|
71
91
|
const result = await dispatchNotifications(config, event, payload);
|
|
92
|
+
// Fire-and-forget OpenClaw gateway call (if OMX_OPENCLAW=1)
|
|
93
|
+
if (process.env.OMX_OPENCLAW === "1") {
|
|
94
|
+
try {
|
|
95
|
+
const openClawEvent = toOpenClawEvent(event);
|
|
96
|
+
if (openClawEvent !== null) {
|
|
97
|
+
const { wakeOpenClaw } = await import("../openclaw/index.js");
|
|
98
|
+
// Non-blocking: do not await to avoid delaying notification return
|
|
99
|
+
void wakeOpenClaw(openClawEvent, {
|
|
100
|
+
sessionId: payload.sessionId,
|
|
101
|
+
projectPath: payload.projectPath,
|
|
102
|
+
tmuxSession: payload.tmuxSession,
|
|
103
|
+
contextSummary: payload.contextSummary,
|
|
104
|
+
reason: payload.reason,
|
|
105
|
+
question: payload.question,
|
|
106
|
+
tmuxTail: payload.tmuxTail,
|
|
107
|
+
});
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
catch {
|
|
111
|
+
// OpenClaw failures must never affect notification dispatch
|
|
112
|
+
}
|
|
113
|
+
}
|
|
72
114
|
if (result.anySuccess && payload.tmuxPaneId) {
|
|
73
115
|
try {
|
|
74
116
|
const { registerMessage } = await import("./session-registry.js");
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/notifications/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAqBH,OAAO,EACL,qBAAqB,EACrB,WAAW,EACX,cAAc,EACd,YAAY,EACZ,SAAS,EACT,WAAW,GACZ,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACL,kBAAkB,EAClB,kBAAkB,EAClB,iBAAiB,EACjB,gBAAgB,EAChB,iBAAiB,EACjB,qBAAqB,GACtB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACL,qBAAqB,EACrB,oBAAoB,EACpB,mBAAmB,EACnB,cAAc,EACd,eAAe,GAChB,MAAM,WAAW,CAAC;AACnB,OAAO,EACL,qBAAqB,EACrB,cAAc,EACd,mBAAmB,EACnB,cAAc,EACd,8BAA8B,EAC9B,oBAAoB,EACpB,YAAY,EACZ,oBAAoB,EACpB,YAAY,EACZ,yBAAyB,EACzB,qBAAqB,GACtB,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,eAAe,EACf,eAAe,EACf,iBAAiB,EACjB,aAAa,EACb,oBAAoB,EACpB,UAAU,GACX,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EACL,kBAAkB,EAClB,iBAAiB,EACjB,sBAAsB,EACtB,eAAe,EACf,kBAAkB,GACnB,MAAM,qBAAqB,CAAC;AAE7B,2DAA2D;AAC3D,OAAO,EAAE,MAAM,EAAE,sBAAsB,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/notifications/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -19,6 +19,13 @@ export interface NotificationPayload {
|
|
|
19
19
|
mode?: string;
|
|
20
20
|
projectPath?: string;
|
|
21
21
|
}
|
|
22
|
+
interface JsonHttpsRequestOptions {
|
|
23
|
+
hostname: string;
|
|
24
|
+
path: string;
|
|
25
|
+
body: string;
|
|
26
|
+
errorPrefix: string;
|
|
27
|
+
timeoutMs?: number;
|
|
28
|
+
}
|
|
22
29
|
/**
|
|
23
30
|
* Load notification config from .omx/notifications.json
|
|
24
31
|
*/
|
|
@@ -32,4 +39,6 @@ export declare function notify(payload: NotificationPayload, config?: Notificati
|
|
|
32
39
|
* Exported for unit testing.
|
|
33
40
|
*/
|
|
34
41
|
export declare function _buildDesktopArgs(title: string, message: string, platform: string): [string, string[]] | null;
|
|
42
|
+
export declare function _sendJsonHttpsRequest(options: JsonHttpsRequestOptions): Promise<void>;
|
|
43
|
+
export {};
|
|
35
44
|
//# sourceMappingURL=notifier.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"notifier.d.ts","sourceRoot":"","sources":["../../src/notifications/notifier.ts"],"names":[],"mappings":"AAAA;;;GAGG;
|
|
1
|
+
{"version":3,"file":"notifier.d.ts","sourceRoot":"","sources":["../../src/notifications/notifier.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAWH,MAAM,WAAW,kBAAkB;IACjC,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,OAAO,CAAC,EAAE;QACR,UAAU,EAAE,MAAM,CAAC;KACpB,CAAC;IACF,QAAQ,CAAC,EAAE;QACT,QAAQ,EAAE,MAAM,CAAC;QACjB,MAAM,EAAE,MAAM,CAAC;KAChB,CAAC;CACH;AAED,MAAM,WAAW,mBAAmB;IAClC,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,SAAS,GAAG,OAAO,CAAC;IAC/C,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,UAAU,uBAAuB;IAC/B,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;GAEG;AACH,wBAAsB,sBAAsB,CAAC,WAAW,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,GAAG,IAAI,CAAC,CAQrG;AAED;;GAEG;AACH,wBAAsB,MAAM,CAAC,OAAO,EAAE,mBAAmB,EAAE,MAAM,CAAC,EAAE,kBAAkB,GAAG,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAqB5G;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,MAAM,GACf,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,GAAG,IAAI,CAuB3B;AAaD,wBAAsB,qBAAqB,CAAC,OAAO,EAAE,uBAAuB,GAAG,OAAO,CAAC,IAAI,CAAC,CAwB3F"}
|