oh-my-codex 0.3.9 → 0.4.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 +25 -0
- package/dist/cli/__tests__/doctor-team.test.js +58 -0
- package/dist/cli/__tests__/doctor-team.test.js.map +1 -1
- package/dist/cli/__tests__/index.test.js +9 -3
- package/dist/cli/__tests__/index.test.js.map +1 -1
- package/dist/cli/__tests__/lifecycle-notifications.test.d.ts +2 -0
- package/dist/cli/__tests__/lifecycle-notifications.test.d.ts.map +1 -0
- package/dist/cli/__tests__/lifecycle-notifications.test.js +48 -0
- package/dist/cli/__tests__/lifecycle-notifications.test.js.map +1 -0
- package/dist/cli/doctor.js +28 -0
- package/dist/cli/doctor.js.map +1 -1
- package/dist/cli/hooks.d.ts +4 -0
- package/dist/cli/hooks.d.ts.map +1 -0
- package/dist/cli/hooks.js +201 -0
- package/dist/cli/hooks.js.map +1 -0
- package/dist/cli/index.d.ts +1 -1
- package/dist/cli/index.d.ts.map +1 -1
- package/dist/cli/index.js +181 -2
- package/dist/cli/index.js.map +1 -1
- package/dist/config/__tests__/models.test.d.ts +2 -0
- package/dist/config/__tests__/models.test.d.ts.map +1 -0
- package/dist/config/__tests__/models.test.js +69 -0
- package/dist/config/__tests__/models.test.js.map +1 -0
- package/dist/config/models.d.ts +24 -0
- package/dist/config/models.d.ts.map +1 -0
- package/dist/config/models.js +53 -0
- package/dist/config/models.js.map +1 -0
- package/dist/hooks/__tests__/notify-hook-linked-sync.test.js +6 -0
- package/dist/hooks/__tests__/notify-hook-linked-sync.test.js.map +1 -1
- package/dist/hooks/__tests__/notify-hook-session-scope.test.js +6 -0
- package/dist/hooks/__tests__/notify-hook-session-scope.test.js.map +1 -1
- package/dist/hooks/__tests__/notify-hook-team-leader-nudge.test.js +224 -36
- package/dist/hooks/__tests__/notify-hook-team-leader-nudge.test.js.map +1 -1
- package/dist/hooks/__tests__/notify-hook-tmux-heal.test.js +4 -0
- package/dist/hooks/__tests__/notify-hook-tmux-heal.test.js.map +1 -1
- package/dist/hooks/__tests__/tmux-hook-engine.test.js +1 -1
- package/dist/hooks/__tests__/tmux-hook-engine.test.js.map +1 -1
- package/dist/hooks/extensibility/__tests__/example-hook-plugins.test.d.ts +2 -0
- package/dist/hooks/extensibility/__tests__/example-hook-plugins.test.d.ts.map +1 -0
- package/dist/hooks/extensibility/__tests__/example-hook-plugins.test.js +153 -0
- package/dist/hooks/extensibility/__tests__/example-hook-plugins.test.js.map +1 -0
- package/dist/hooks/extensibility/dispatcher.d.ts +4 -0
- package/dist/hooks/extensibility/dispatcher.d.ts.map +1 -0
- package/dist/hooks/extensibility/dispatcher.js +223 -0
- package/dist/hooks/extensibility/dispatcher.js.map +1 -0
- package/dist/hooks/extensibility/events.d.ts +18 -0
- package/dist/hooks/extensibility/events.d.ts.map +1 -0
- package/dist/hooks/extensibility/events.js +53 -0
- package/dist/hooks/extensibility/events.js.map +1 -0
- package/dist/hooks/extensibility/index.d.ts +6 -0
- package/dist/hooks/extensibility/index.d.ts.map +1 -0
- package/dist/hooks/extensibility/index.js +6 -0
- package/dist/hooks/extensibility/index.js.map +1 -0
- package/dist/hooks/extensibility/loader.d.ts +14 -0
- package/dist/hooks/extensibility/loader.d.ts.map +1 -0
- package/dist/hooks/extensibility/loader.js +102 -0
- package/dist/hooks/extensibility/loader.js.map +1 -0
- package/dist/hooks/extensibility/logging.d.ts +4 -0
- package/dist/hooks/extensibility/logging.d.ts.map +1 -0
- package/dist/hooks/extensibility/logging.js +16 -0
- package/dist/hooks/extensibility/logging.js.map +1 -0
- package/dist/hooks/extensibility/plugin-runner.d.ts +2 -0
- package/dist/hooks/extensibility/plugin-runner.d.ts.map +1 -0
- package/dist/hooks/extensibility/plugin-runner.js +69 -0
- package/dist/hooks/extensibility/plugin-runner.js.map +1 -0
- package/dist/hooks/extensibility/runtime.d.ts +3 -0
- package/dist/hooks/extensibility/runtime.d.ts.map +1 -0
- package/dist/hooks/extensibility/runtime.js +29 -0
- package/dist/hooks/extensibility/runtime.js.map +1 -0
- package/dist/hooks/extensibility/sdk.d.ts +11 -0
- package/dist/hooks/extensibility/sdk.d.ts.map +1 -0
- package/dist/hooks/extensibility/sdk.js +240 -0
- package/dist/hooks/extensibility/sdk.js.map +1 -0
- package/dist/hooks/extensibility/types.d.ts +122 -0
- package/dist/hooks/extensibility/types.d.ts.map +1 -0
- package/dist/hooks/extensibility/types.js +2 -0
- package/dist/hooks/extensibility/types.js.map +1 -0
- package/dist/mcp/__tests__/state-paths.test.js +21 -1
- package/dist/mcp/__tests__/state-paths.test.js.map +1 -1
- package/dist/mcp/__tests__/state-server-team-tools.test.js +53 -1
- package/dist/mcp/__tests__/state-server-team-tools.test.js.map +1 -1
- package/dist/mcp/state-paths.d.ts +1 -0
- package/dist/mcp/state-paths.d.ts.map +1 -1
- package/dist/mcp/state-paths.js +34 -1
- 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 +46 -11
- package/dist/mcp/state-server.js.map +1 -1
- package/dist/notifications/__tests__/config.test.d.ts +2 -0
- package/dist/notifications/__tests__/config.test.d.ts.map +1 -0
- package/dist/notifications/__tests__/config.test.js +186 -0
- package/dist/notifications/__tests__/config.test.js.map +1 -0
- package/dist/notifications/__tests__/dispatcher.test.d.ts +2 -0
- package/dist/notifications/__tests__/dispatcher.test.d.ts.map +1 -0
- package/dist/notifications/__tests__/dispatcher.test.js +202 -0
- package/dist/notifications/__tests__/dispatcher.test.js.map +1 -0
- package/dist/notifications/__tests__/formatter.test.d.ts +2 -0
- package/dist/notifications/__tests__/formatter.test.d.ts.map +1 -0
- package/dist/notifications/__tests__/formatter.test.js +103 -0
- package/dist/notifications/__tests__/formatter.test.js.map +1 -0
- package/dist/notifications/__tests__/notifier.test.d.ts +2 -0
- package/dist/notifications/__tests__/notifier.test.d.ts.map +1 -0
- package/dist/notifications/__tests__/notifier.test.js +104 -0
- package/dist/notifications/__tests__/notifier.test.js.map +1 -0
- package/dist/notifications/__tests__/profiles.test.d.ts +2 -0
- package/dist/notifications/__tests__/profiles.test.d.ts.map +1 -0
- package/dist/notifications/__tests__/profiles.test.js +404 -0
- package/dist/notifications/__tests__/profiles.test.js.map +1 -0
- package/dist/notifications/__tests__/reply-listener.test.d.ts +2 -0
- package/dist/notifications/__tests__/reply-listener.test.d.ts.map +1 -0
- package/dist/notifications/__tests__/reply-listener.test.js +58 -0
- package/dist/notifications/__tests__/reply-listener.test.js.map +1 -0
- package/dist/notifications/__tests__/session-registry.test.d.ts +2 -0
- package/dist/notifications/__tests__/session-registry.test.d.ts.map +1 -0
- package/dist/notifications/__tests__/session-registry.test.js +147 -0
- package/dist/notifications/__tests__/session-registry.test.js.map +1 -0
- package/dist/notifications/__tests__/tmux-detector.test.d.ts +2 -0
- package/dist/notifications/__tests__/tmux-detector.test.d.ts.map +1 -0
- package/dist/notifications/__tests__/tmux-detector.test.js +77 -0
- package/dist/notifications/__tests__/tmux-detector.test.js.map +1 -0
- package/dist/notifications/__tests__/tmux.test.d.ts +2 -0
- package/dist/notifications/__tests__/tmux.test.d.ts.map +1 -0
- package/dist/notifications/__tests__/tmux.test.js +90 -0
- package/dist/notifications/__tests__/tmux.test.js.map +1 -0
- package/dist/notifications/config.d.ts +44 -0
- package/dist/notifications/config.d.ts.map +1 -0
- package/dist/notifications/config.js +407 -0
- package/dist/notifications/config.js.map +1 -0
- package/dist/notifications/dispatcher.d.ts +15 -0
- package/dist/notifications/dispatcher.d.ts.map +1 -0
- package/dist/notifications/dispatcher.js +410 -0
- package/dist/notifications/dispatcher.js.map +1 -0
- package/dist/notifications/formatter.d.ts +14 -0
- package/dist/notifications/formatter.d.ts.map +1 -0
- package/dist/notifications/formatter.js +134 -0
- package/dist/notifications/formatter.js.map +1 -0
- package/dist/notifications/index.d.ts +32 -0
- package/dist/notifications/index.d.ts.map +1 -0
- package/dist/notifications/index.js +93 -0
- package/dist/notifications/index.js.map +1 -0
- package/dist/notifications/reply-listener.d.ts +47 -0
- package/dist/notifications/reply-listener.d.ts.map +1 -0
- package/dist/notifications/reply-listener.js +656 -0
- package/dist/notifications/reply-listener.js.map +1 -0
- package/dist/notifications/session-registry.d.ts +26 -0
- package/dist/notifications/session-registry.d.ts.map +1 -0
- package/dist/notifications/session-registry.js +275 -0
- package/dist/notifications/session-registry.js.map +1 -0
- package/dist/notifications/tmux-detector.d.ts +17 -0
- package/dist/notifications/tmux-detector.d.ts.map +1 -0
- package/dist/notifications/tmux-detector.js +82 -0
- package/dist/notifications/tmux-detector.js.map +1 -0
- package/dist/notifications/tmux.d.ts +28 -0
- package/dist/notifications/tmux.d.ts.map +1 -0
- package/dist/notifications/tmux.js +210 -0
- package/dist/notifications/tmux.js.map +1 -0
- package/dist/notifications/types.d.ts +181 -0
- package/dist/notifications/types.d.ts.map +1 -0
- package/dist/notifications/types.js +9 -0
- package/dist/notifications/types.js.map +1 -0
- package/dist/team/__tests__/runtime.test.js +54 -2
- package/dist/team/__tests__/runtime.test.js.map +1 -1
- package/dist/team/__tests__/state.test.js +30 -0
- package/dist/team/__tests__/state.test.js.map +1 -1
- package/dist/team/__tests__/worker-bootstrap.test.js +2 -0
- package/dist/team/__tests__/worker-bootstrap.test.js.map +1 -1
- package/dist/team/runtime.d.ts +2 -2
- package/dist/team/runtime.d.ts.map +1 -1
- package/dist/team/runtime.js +19 -12
- package/dist/team/runtime.js.map +1 -1
- package/dist/team/state.d.ts +1 -1
- package/dist/team/state.d.ts.map +1 -1
- package/dist/team/state.js +5 -0
- package/dist/team/state.js.map +1 -1
- package/dist/team/tmux-session.d.ts.map +1 -1
- package/dist/team/tmux-session.js +59 -15
- 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 +4 -0
- package/dist/team/worker-bootstrap.js.map +1 -1
- package/package.json +1 -1
- package/scripts/hook-derived-watcher.js +335 -0
- package/scripts/notify-hook.js +168 -7
- package/scripts/tmux-hook-engine.js +3 -2
|
@@ -0,0 +1,407 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Notification Configuration Reader
|
|
3
|
+
*
|
|
4
|
+
* Reads notification config from .omx-config.json and provides
|
|
5
|
+
* backward compatibility with the old stopHookCallbacks format.
|
|
6
|
+
*/
|
|
7
|
+
import { readFileSync, existsSync } from "fs";
|
|
8
|
+
import { join } from "path";
|
|
9
|
+
import { codexHome } from "../utils/paths.js";
|
|
10
|
+
const CONFIG_FILE = join(codexHome(), ".omx-config.json");
|
|
11
|
+
function readRawConfig() {
|
|
12
|
+
if (!existsSync(CONFIG_FILE))
|
|
13
|
+
return null;
|
|
14
|
+
try {
|
|
15
|
+
return JSON.parse(readFileSync(CONFIG_FILE, "utf-8"));
|
|
16
|
+
}
|
|
17
|
+
catch {
|
|
18
|
+
return null;
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
function migrateStopHookCallbacks(raw) {
|
|
22
|
+
const callbacks = raw.stopHookCallbacks;
|
|
23
|
+
if (!callbacks)
|
|
24
|
+
return null;
|
|
25
|
+
const config = {
|
|
26
|
+
enabled: true,
|
|
27
|
+
events: {
|
|
28
|
+
"session-end": { enabled: true },
|
|
29
|
+
},
|
|
30
|
+
};
|
|
31
|
+
const telegram = callbacks.telegram;
|
|
32
|
+
if (telegram?.enabled) {
|
|
33
|
+
const telegramConfig = {
|
|
34
|
+
enabled: true,
|
|
35
|
+
botToken: telegram.botToken || "",
|
|
36
|
+
chatId: telegram.chatId || "",
|
|
37
|
+
};
|
|
38
|
+
config.telegram = telegramConfig;
|
|
39
|
+
}
|
|
40
|
+
const discord = callbacks.discord;
|
|
41
|
+
if (discord?.enabled) {
|
|
42
|
+
const discordConfig = {
|
|
43
|
+
enabled: true,
|
|
44
|
+
webhookUrl: discord.webhookUrl || "",
|
|
45
|
+
};
|
|
46
|
+
config.discord = discordConfig;
|
|
47
|
+
}
|
|
48
|
+
return config;
|
|
49
|
+
}
|
|
50
|
+
function normalizeOptional(value) {
|
|
51
|
+
const trimmed = value?.trim();
|
|
52
|
+
return trimmed || undefined;
|
|
53
|
+
}
|
|
54
|
+
export function validateMention(raw) {
|
|
55
|
+
const mention = normalizeOptional(raw);
|
|
56
|
+
if (!mention)
|
|
57
|
+
return undefined;
|
|
58
|
+
if (/^<@!?\d{17,20}>$/.test(mention) || /^<@&\d{17,20}>$/.test(mention)) {
|
|
59
|
+
return mention;
|
|
60
|
+
}
|
|
61
|
+
return undefined;
|
|
62
|
+
}
|
|
63
|
+
export function parseMentionAllowedMentions(mention) {
|
|
64
|
+
if (!mention)
|
|
65
|
+
return {};
|
|
66
|
+
const userMatch = mention.match(/^<@!?(\d{17,20})>$/);
|
|
67
|
+
if (userMatch)
|
|
68
|
+
return { users: [userMatch[1]] };
|
|
69
|
+
const roleMatch = mention.match(/^<@&(\d{17,20})>$/);
|
|
70
|
+
if (roleMatch)
|
|
71
|
+
return { roles: [roleMatch[1]] };
|
|
72
|
+
return {};
|
|
73
|
+
}
|
|
74
|
+
export function buildConfigFromEnv() {
|
|
75
|
+
const config = { enabled: false };
|
|
76
|
+
let hasAnyPlatform = false;
|
|
77
|
+
const discordMention = validateMention(process.env.OMX_DISCORD_MENTION);
|
|
78
|
+
const discordBotToken = process.env.OMX_DISCORD_NOTIFIER_BOT_TOKEN;
|
|
79
|
+
const discordChannel = process.env.OMX_DISCORD_NOTIFIER_CHANNEL;
|
|
80
|
+
if (discordBotToken && discordChannel) {
|
|
81
|
+
config["discord-bot"] = {
|
|
82
|
+
enabled: true,
|
|
83
|
+
botToken: discordBotToken,
|
|
84
|
+
channelId: discordChannel,
|
|
85
|
+
mention: discordMention,
|
|
86
|
+
};
|
|
87
|
+
hasAnyPlatform = true;
|
|
88
|
+
}
|
|
89
|
+
const discordWebhook = process.env.OMX_DISCORD_WEBHOOK_URL;
|
|
90
|
+
if (discordWebhook) {
|
|
91
|
+
config.discord = {
|
|
92
|
+
enabled: true,
|
|
93
|
+
webhookUrl: discordWebhook,
|
|
94
|
+
mention: discordMention,
|
|
95
|
+
};
|
|
96
|
+
hasAnyPlatform = true;
|
|
97
|
+
}
|
|
98
|
+
const telegramToken = process.env.OMX_TELEGRAM_BOT_TOKEN ||
|
|
99
|
+
process.env.OMX_TELEGRAM_NOTIFIER_BOT_TOKEN;
|
|
100
|
+
const telegramChatId = process.env.OMX_TELEGRAM_CHAT_ID ||
|
|
101
|
+
process.env.OMX_TELEGRAM_NOTIFIER_CHAT_ID ||
|
|
102
|
+
process.env.OMX_TELEGRAM_NOTIFIER_UID;
|
|
103
|
+
if (telegramToken && telegramChatId) {
|
|
104
|
+
config.telegram = {
|
|
105
|
+
enabled: true,
|
|
106
|
+
botToken: telegramToken,
|
|
107
|
+
chatId: telegramChatId,
|
|
108
|
+
};
|
|
109
|
+
hasAnyPlatform = true;
|
|
110
|
+
}
|
|
111
|
+
const slackWebhook = process.env.OMX_SLACK_WEBHOOK_URL;
|
|
112
|
+
if (slackWebhook) {
|
|
113
|
+
config.slack = {
|
|
114
|
+
enabled: true,
|
|
115
|
+
webhookUrl: slackWebhook,
|
|
116
|
+
};
|
|
117
|
+
hasAnyPlatform = true;
|
|
118
|
+
}
|
|
119
|
+
if (!hasAnyPlatform)
|
|
120
|
+
return null;
|
|
121
|
+
config.enabled = true;
|
|
122
|
+
return config;
|
|
123
|
+
}
|
|
124
|
+
function mergeEnvIntoFileConfig(fileConfig, envConfig) {
|
|
125
|
+
const merged = { ...fileConfig };
|
|
126
|
+
if (!merged["discord-bot"] && envConfig["discord-bot"]) {
|
|
127
|
+
merged["discord-bot"] = envConfig["discord-bot"];
|
|
128
|
+
}
|
|
129
|
+
else if (merged["discord-bot"] && envConfig["discord-bot"]) {
|
|
130
|
+
merged["discord-bot"] = {
|
|
131
|
+
...merged["discord-bot"],
|
|
132
|
+
botToken: merged["discord-bot"].botToken || envConfig["discord-bot"].botToken,
|
|
133
|
+
channelId: merged["discord-bot"].channelId || envConfig["discord-bot"].channelId,
|
|
134
|
+
mention: merged["discord-bot"].mention !== undefined
|
|
135
|
+
? validateMention(merged["discord-bot"].mention)
|
|
136
|
+
: envConfig["discord-bot"].mention,
|
|
137
|
+
};
|
|
138
|
+
}
|
|
139
|
+
if (!merged.discord && envConfig.discord) {
|
|
140
|
+
merged.discord = envConfig.discord;
|
|
141
|
+
}
|
|
142
|
+
else if (merged.discord && envConfig.discord) {
|
|
143
|
+
merged.discord = {
|
|
144
|
+
...merged.discord,
|
|
145
|
+
webhookUrl: merged.discord.webhookUrl || envConfig.discord.webhookUrl,
|
|
146
|
+
mention: merged.discord.mention !== undefined
|
|
147
|
+
? validateMention(merged.discord.mention)
|
|
148
|
+
: envConfig.discord.mention,
|
|
149
|
+
};
|
|
150
|
+
}
|
|
151
|
+
else if (merged.discord) {
|
|
152
|
+
merged.discord = {
|
|
153
|
+
...merged.discord,
|
|
154
|
+
mention: validateMention(merged.discord.mention),
|
|
155
|
+
};
|
|
156
|
+
}
|
|
157
|
+
if (!merged.telegram && envConfig.telegram) {
|
|
158
|
+
merged.telegram = envConfig.telegram;
|
|
159
|
+
}
|
|
160
|
+
if (!merged.slack && envConfig.slack) {
|
|
161
|
+
merged.slack = envConfig.slack;
|
|
162
|
+
}
|
|
163
|
+
return merged;
|
|
164
|
+
}
|
|
165
|
+
/**
|
|
166
|
+
* Resolve a named profile from the notifications block.
|
|
167
|
+
*
|
|
168
|
+
* Priority:
|
|
169
|
+
* 1. Explicit `profileName` argument
|
|
170
|
+
* 2. OMX_NOTIFY_PROFILE environment variable
|
|
171
|
+
* 3. `defaultProfile` field in config
|
|
172
|
+
* 4. null (no profile selected → fall back to flat config)
|
|
173
|
+
*/
|
|
174
|
+
export function resolveProfileConfig(notifications, profileName) {
|
|
175
|
+
const profiles = notifications.profiles;
|
|
176
|
+
if (!profiles || Object.keys(profiles).length === 0) {
|
|
177
|
+
return null; // no profiles defined, use flat config
|
|
178
|
+
}
|
|
179
|
+
const name = profileName ||
|
|
180
|
+
process.env.OMX_NOTIFY_PROFILE ||
|
|
181
|
+
notifications.defaultProfile;
|
|
182
|
+
if (!name) {
|
|
183
|
+
return null; // no profile selected, use flat config
|
|
184
|
+
}
|
|
185
|
+
const profile = profiles[name];
|
|
186
|
+
if (!profile) {
|
|
187
|
+
console.warn(`[notifications] Profile "${name}" not found. Available: ${Object.keys(profiles).join(", ")}`);
|
|
188
|
+
return null;
|
|
189
|
+
}
|
|
190
|
+
return profile;
|
|
191
|
+
}
|
|
192
|
+
/**
|
|
193
|
+
* List available profile names from the config file.
|
|
194
|
+
*/
|
|
195
|
+
export function listProfiles() {
|
|
196
|
+
const raw = readRawConfig();
|
|
197
|
+
if (!raw)
|
|
198
|
+
return [];
|
|
199
|
+
const notifications = raw.notifications;
|
|
200
|
+
if (!notifications?.profiles)
|
|
201
|
+
return [];
|
|
202
|
+
return Object.keys(notifications.profiles);
|
|
203
|
+
}
|
|
204
|
+
/**
|
|
205
|
+
* Get the active profile name based on resolution priority.
|
|
206
|
+
* Returns null if no profile is active (flat config mode).
|
|
207
|
+
*/
|
|
208
|
+
export function getActiveProfileName() {
|
|
209
|
+
if (process.env.OMX_NOTIFY_PROFILE) {
|
|
210
|
+
return process.env.OMX_NOTIFY_PROFILE;
|
|
211
|
+
}
|
|
212
|
+
const raw = readRawConfig();
|
|
213
|
+
if (!raw)
|
|
214
|
+
return null;
|
|
215
|
+
const notifications = raw.notifications;
|
|
216
|
+
if (!notifications?.profiles || Object.keys(notifications.profiles).length === 0) {
|
|
217
|
+
return null;
|
|
218
|
+
}
|
|
219
|
+
return notifications.defaultProfile || null;
|
|
220
|
+
}
|
|
221
|
+
export function getNotificationConfig(profileName) {
|
|
222
|
+
const raw = readRawConfig();
|
|
223
|
+
if (raw) {
|
|
224
|
+
const notifications = raw.notifications;
|
|
225
|
+
if (notifications) {
|
|
226
|
+
// Try profile resolution first
|
|
227
|
+
const profileConfig = resolveProfileConfig(notifications, profileName);
|
|
228
|
+
if (profileConfig) {
|
|
229
|
+
if (typeof profileConfig.enabled !== "boolean") {
|
|
230
|
+
return null;
|
|
231
|
+
}
|
|
232
|
+
const envConfig = buildConfigFromEnv();
|
|
233
|
+
if (envConfig) {
|
|
234
|
+
return mergeEnvIntoFileConfig(profileConfig, envConfig);
|
|
235
|
+
}
|
|
236
|
+
return profileConfig;
|
|
237
|
+
}
|
|
238
|
+
// Fall back to flat config (backward compatible)
|
|
239
|
+
if (typeof notifications.enabled !== "boolean") {
|
|
240
|
+
return null;
|
|
241
|
+
}
|
|
242
|
+
const envConfig = buildConfigFromEnv();
|
|
243
|
+
if (envConfig) {
|
|
244
|
+
return mergeEnvIntoFileConfig(notifications, envConfig);
|
|
245
|
+
}
|
|
246
|
+
const envMention = validateMention(process.env.OMX_DISCORD_MENTION);
|
|
247
|
+
if (envMention) {
|
|
248
|
+
const patched = { ...notifications };
|
|
249
|
+
if (patched["discord-bot"] && patched["discord-bot"].mention === undefined) {
|
|
250
|
+
patched["discord-bot"] = { ...patched["discord-bot"], mention: envMention };
|
|
251
|
+
}
|
|
252
|
+
if (patched.discord && patched.discord.mention === undefined) {
|
|
253
|
+
patched.discord = { ...patched.discord, mention: envMention };
|
|
254
|
+
}
|
|
255
|
+
return patched;
|
|
256
|
+
}
|
|
257
|
+
return notifications;
|
|
258
|
+
}
|
|
259
|
+
}
|
|
260
|
+
const envConfig = buildConfigFromEnv();
|
|
261
|
+
if (envConfig)
|
|
262
|
+
return envConfig;
|
|
263
|
+
if (raw) {
|
|
264
|
+
return migrateStopHookCallbacks(raw);
|
|
265
|
+
}
|
|
266
|
+
return null;
|
|
267
|
+
}
|
|
268
|
+
export function isEventEnabled(config, event) {
|
|
269
|
+
if (!config.enabled)
|
|
270
|
+
return false;
|
|
271
|
+
const eventConfig = config.events?.[event];
|
|
272
|
+
if (eventConfig && eventConfig.enabled === false)
|
|
273
|
+
return false;
|
|
274
|
+
if (!eventConfig) {
|
|
275
|
+
return !!(config.discord?.enabled ||
|
|
276
|
+
config["discord-bot"]?.enabled ||
|
|
277
|
+
config.telegram?.enabled ||
|
|
278
|
+
config.slack?.enabled ||
|
|
279
|
+
config.webhook?.enabled);
|
|
280
|
+
}
|
|
281
|
+
if (eventConfig.discord?.enabled ||
|
|
282
|
+
eventConfig["discord-bot"]?.enabled ||
|
|
283
|
+
eventConfig.telegram?.enabled ||
|
|
284
|
+
eventConfig.slack?.enabled ||
|
|
285
|
+
eventConfig.webhook?.enabled) {
|
|
286
|
+
return true;
|
|
287
|
+
}
|
|
288
|
+
return !!(config.discord?.enabled ||
|
|
289
|
+
config["discord-bot"]?.enabled ||
|
|
290
|
+
config.telegram?.enabled ||
|
|
291
|
+
config.slack?.enabled ||
|
|
292
|
+
config.webhook?.enabled);
|
|
293
|
+
}
|
|
294
|
+
export function getEnabledPlatforms(config, event) {
|
|
295
|
+
if (!config.enabled)
|
|
296
|
+
return [];
|
|
297
|
+
const platforms = [];
|
|
298
|
+
const eventConfig = config.events?.[event];
|
|
299
|
+
if (eventConfig && eventConfig.enabled === false)
|
|
300
|
+
return [];
|
|
301
|
+
const checkPlatform = (platform) => {
|
|
302
|
+
const eventPlatform = eventConfig?.[platform];
|
|
303
|
+
if (eventPlatform &&
|
|
304
|
+
typeof eventPlatform === "object" &&
|
|
305
|
+
"enabled" in eventPlatform) {
|
|
306
|
+
if (eventPlatform.enabled) {
|
|
307
|
+
platforms.push(platform);
|
|
308
|
+
}
|
|
309
|
+
return;
|
|
310
|
+
}
|
|
311
|
+
const topLevel = config[platform];
|
|
312
|
+
if (topLevel &&
|
|
313
|
+
typeof topLevel === "object" &&
|
|
314
|
+
"enabled" in topLevel &&
|
|
315
|
+
topLevel.enabled) {
|
|
316
|
+
platforms.push(platform);
|
|
317
|
+
}
|
|
318
|
+
};
|
|
319
|
+
checkPlatform("discord");
|
|
320
|
+
checkPlatform("discord-bot");
|
|
321
|
+
checkPlatform("telegram");
|
|
322
|
+
checkPlatform("slack");
|
|
323
|
+
checkPlatform("webhook");
|
|
324
|
+
return platforms;
|
|
325
|
+
}
|
|
326
|
+
const REPLY_PLATFORM_EVENTS = [
|
|
327
|
+
"session-start",
|
|
328
|
+
"ask-user-question",
|
|
329
|
+
"session-stop",
|
|
330
|
+
"session-idle",
|
|
331
|
+
"session-end",
|
|
332
|
+
];
|
|
333
|
+
function getEnabledReplyPlatformConfig(config, platform) {
|
|
334
|
+
const topLevel = config[platform];
|
|
335
|
+
if (topLevel?.enabled) {
|
|
336
|
+
return topLevel;
|
|
337
|
+
}
|
|
338
|
+
for (const event of REPLY_PLATFORM_EVENTS) {
|
|
339
|
+
const eventConfig = config.events?.[event];
|
|
340
|
+
const eventPlatform = eventConfig?.[platform];
|
|
341
|
+
if (eventPlatform &&
|
|
342
|
+
typeof eventPlatform === "object" &&
|
|
343
|
+
"enabled" in eventPlatform &&
|
|
344
|
+
eventPlatform.enabled) {
|
|
345
|
+
return eventPlatform;
|
|
346
|
+
}
|
|
347
|
+
}
|
|
348
|
+
return undefined;
|
|
349
|
+
}
|
|
350
|
+
export function getReplyListenerPlatformConfig(config) {
|
|
351
|
+
if (!config)
|
|
352
|
+
return {};
|
|
353
|
+
const telegramConfig = getEnabledReplyPlatformConfig(config, "telegram");
|
|
354
|
+
const discordBotConfig = getEnabledReplyPlatformConfig(config, "discord-bot");
|
|
355
|
+
return {
|
|
356
|
+
telegramBotToken: telegramConfig?.botToken || config.telegram?.botToken,
|
|
357
|
+
telegramChatId: telegramConfig?.chatId || config.telegram?.chatId,
|
|
358
|
+
discordBotToken: discordBotConfig?.botToken || config["discord-bot"]?.botToken,
|
|
359
|
+
discordChannelId: discordBotConfig?.channelId || config["discord-bot"]?.channelId,
|
|
360
|
+
discordMention: discordBotConfig?.mention || config["discord-bot"]?.mention,
|
|
361
|
+
};
|
|
362
|
+
}
|
|
363
|
+
function parseDiscordUserIds(envValue, configValue) {
|
|
364
|
+
if (envValue) {
|
|
365
|
+
const ids = envValue
|
|
366
|
+
.split(",")
|
|
367
|
+
.map((id) => id.trim())
|
|
368
|
+
.filter((id) => /^\d{17,20}$/.test(id));
|
|
369
|
+
if (ids.length > 0)
|
|
370
|
+
return ids;
|
|
371
|
+
}
|
|
372
|
+
if (Array.isArray(configValue)) {
|
|
373
|
+
const ids = configValue
|
|
374
|
+
.filter((id) => typeof id === "string" && /^\d{17,20}$/.test(id));
|
|
375
|
+
if (ids.length > 0)
|
|
376
|
+
return ids;
|
|
377
|
+
}
|
|
378
|
+
return [];
|
|
379
|
+
}
|
|
380
|
+
export function getReplyConfig() {
|
|
381
|
+
const notifConfig = getNotificationConfig();
|
|
382
|
+
if (!notifConfig?.enabled)
|
|
383
|
+
return null;
|
|
384
|
+
const hasDiscordBot = !!getEnabledReplyPlatformConfig(notifConfig, "discord-bot");
|
|
385
|
+
const hasTelegram = !!getEnabledReplyPlatformConfig(notifConfig, "telegram");
|
|
386
|
+
if (!hasDiscordBot && !hasTelegram)
|
|
387
|
+
return null;
|
|
388
|
+
const raw = readRawConfig();
|
|
389
|
+
const replyRaw = raw?.notifications?.reply;
|
|
390
|
+
const enabled = process.env.OMX_REPLY_ENABLED === "true" || replyRaw?.enabled === true;
|
|
391
|
+
if (!enabled)
|
|
392
|
+
return null;
|
|
393
|
+
const authorizedDiscordUserIds = parseDiscordUserIds(process.env.OMX_REPLY_DISCORD_USER_IDS, replyRaw?.authorizedDiscordUserIds);
|
|
394
|
+
if (hasDiscordBot && authorizedDiscordUserIds.length === 0) {
|
|
395
|
+
console.warn("[notifications] Discord reply listening disabled: authorizedDiscordUserIds is empty. " +
|
|
396
|
+
"Set OMX_REPLY_DISCORD_USER_IDS or add to .omx-config.json notifications.reply.authorizedDiscordUserIds");
|
|
397
|
+
}
|
|
398
|
+
return {
|
|
399
|
+
enabled: true,
|
|
400
|
+
pollIntervalMs: parseInt(process.env.OMX_REPLY_POLL_INTERVAL_MS || "") || replyRaw?.pollIntervalMs || 3000,
|
|
401
|
+
maxMessageLength: replyRaw?.maxMessageLength || 500,
|
|
402
|
+
rateLimitPerMinute: parseInt(process.env.OMX_REPLY_RATE_LIMIT || "") || replyRaw?.rateLimitPerMinute || 10,
|
|
403
|
+
includePrefix: process.env.OMX_REPLY_INCLUDE_PREFIX !== "false" && (replyRaw?.includePrefix !== false),
|
|
404
|
+
authorizedDiscordUserIds,
|
|
405
|
+
};
|
|
406
|
+
}
|
|
407
|
+
//# sourceMappingURL=config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/notifications/config.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Notification Dispatcher
|
|
3
|
+
*
|
|
4
|
+
* Sends notifications to configured platforms (Discord, Telegram, Slack, webhook).
|
|
5
|
+
* All sends are non-blocking with timeouts. Failures are swallowed to avoid
|
|
6
|
+
* blocking hooks.
|
|
7
|
+
*/
|
|
8
|
+
import type { DiscordNotificationConfig, DiscordBotNotificationConfig, TelegramNotificationConfig, SlackNotificationConfig, WebhookNotificationConfig, FullNotificationPayload, NotificationResult, DispatchResult, FullNotificationConfig, NotificationEvent } from "./types.js";
|
|
9
|
+
export declare function sendDiscord(config: DiscordNotificationConfig, payload: FullNotificationPayload): Promise<NotificationResult>;
|
|
10
|
+
export declare function sendDiscordBot(config: DiscordBotNotificationConfig, payload: FullNotificationPayload): Promise<NotificationResult>;
|
|
11
|
+
export declare function sendTelegram(config: TelegramNotificationConfig, payload: FullNotificationPayload): Promise<NotificationResult>;
|
|
12
|
+
export declare function sendSlack(config: SlackNotificationConfig, payload: FullNotificationPayload): Promise<NotificationResult>;
|
|
13
|
+
export declare function sendWebhook(config: WebhookNotificationConfig, payload: FullNotificationPayload): Promise<NotificationResult>;
|
|
14
|
+
export declare function dispatchNotifications(config: FullNotificationConfig, event: NotificationEvent, payload: FullNotificationPayload): Promise<DispatchResult>;
|
|
15
|
+
//# sourceMappingURL=dispatcher.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dispatcher.d.ts","sourceRoot":"","sources":["../../src/notifications/dispatcher.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,KAAK,EACV,yBAAyB,EACzB,4BAA4B,EAC5B,0BAA0B,EAC1B,uBAAuB,EACvB,yBAAyB,EACzB,uBAAuB,EACvB,kBAAkB,EAElB,cAAc,EACd,sBAAsB,EACtB,iBAAiB,EAClB,MAAM,YAAY,CAAC;AAoFpB,wBAAsB,WAAW,CAC/B,MAAM,EAAE,yBAAyB,EACjC,OAAO,EAAE,uBAAuB,GAC/B,OAAO,CAAC,kBAAkB,CAAC,CA8C7B;AAED,wBAAsB,cAAc,CAClC,MAAM,EAAE,4BAA4B,EACpC,OAAO,EAAE,uBAAuB,GAC/B,OAAO,CAAC,kBAAkB,CAAC,CAwD7B;AAED,wBAAsB,YAAY,CAChC,MAAM,EAAE,0BAA0B,EAClC,OAAO,EAAE,uBAAuB,GAC/B,OAAO,CAAC,kBAAkB,CAAC,CAmF7B;AAED,wBAAsB,SAAS,CAC7B,MAAM,EAAE,uBAAuB,EAC/B,OAAO,EAAE,uBAAuB,GAC/B,OAAO,CAAC,kBAAkB,CAAC,CAyC7B;AAED,wBAAsB,WAAW,CAC/B,MAAM,EAAE,yBAAyB,EACjC,OAAO,EAAE,uBAAuB,GAC/B,OAAO,CAAC,kBAAkB,CAAC,CAuD7B;AAqBD,wBAAsB,qBAAqB,CACzC,MAAM,EAAE,sBAAsB,EAC9B,KAAK,EAAE,iBAAiB,EACxB,OAAO,EAAE,uBAAuB,GAC/B,OAAO,CAAC,cAAc,CAAC,CAsGzB"}
|