discord-ops 0.5.0 → 0.6.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/CHANGELOG.md CHANGED
@@ -1,5 +1,18 @@
1
1
  # discord-ops
2
2
 
3
+ ## 0.6.0
4
+
5
+ ### Minor Changes
6
+
7
+ - 5a05546: Message template system with 17 built-in Discord embed templates
8
+ - `send_template` tool — send styled embeds using project routing (45 tools total)
9
+ - `list_templates` tool — discover templates with required/optional variables
10
+ - DevOps templates: release, deploy, ci_build, incident, incident_resolved, maintenance, status_update, review
11
+ - Team templates: celebration, welcome, shoutout, quote, announcement, changelog, milestone, tip, poll
12
+ - Curated color palette (success green, error red, celebration pink, premium gold, etc.)
13
+ - All templates support project routing, notification routing, and direct channel targeting
14
+ - 25 new template tests (235 total)
15
+
3
16
  ## 0.5.0
4
17
 
5
18
  ### Minor Changes
package/README.md CHANGED
@@ -8,7 +8,7 @@ Agency-grade Discord MCP server with multi-guild project routing.
8
8
 
9
9
  ## Features
10
10
 
11
- - **43 MCP tools** — messaging, channels, moderation, roles, webhooks, audit log, threads, guilds, invites, permissions, search, project introspection
11
+ - **45 MCP tools** — messaging, channels, moderation, roles, webhooks, audit log, threads, guilds, invites, permissions, search, templates, project introspection
12
12
  - **Multi-guild project routing** — `send_message({ project: "my-app", channel: "builds" })` instead of raw channel IDs
13
13
  - **Notification routing** — map notification types (ci_build, deploy, error) to channels per project
14
14
  - **Multi-bot support** — manage multiple Discord bots from a single MCP server with per-project tokens
@@ -180,7 +180,7 @@ send_message({ channel_id: "123456789", content: "Hello" })
180
180
 
181
181
  ## Tools
182
182
 
183
- ### Messaging (8 tools)
183
+ ### Messaging (10 tools)
184
184
 
185
185
  | Tool | Description |
186
186
  | ----------------- | ------------------------------------------------- |
@@ -192,6 +192,8 @@ send_message({ channel_id: "123456789", content: "Hello" })
192
192
  | `pin_message` | Pin a message in a channel |
193
193
  | `unpin_message` | Unpin a message |
194
194
  | `search_messages` | Search messages by content, author, or date range |
195
+ | `send_template` | Send a styled embed using a built-in template |
196
+ | `list_templates` | List available templates with required variables |
195
197
 
196
198
  ### Channels (8 tools)
197
199
 
@@ -317,6 +319,56 @@ DRY_RUN=true discord-ops
317
319
 
318
320
  In dry-run mode, destructive tools return a simulated success response showing what would have happened.
319
321
 
322
+ ## Message Templates
323
+
324
+ 17 built-in embed templates for polished Discord messages. Use `send_template` with project routing.
325
+
326
+ ### DevOps Templates
327
+
328
+ | Template | Description | Key Vars |
329
+ | ------------------- | -------------------------------------------- | ----------------------------------------------- |
330
+ | `release` | Version release announcement | `version`, `name`, `notes`, `highlights`, `npm` |
331
+ | `deploy` | Deployment success/failure | `status`, `environment`, `version`, `commit` |
332
+ | `ci_build` | CI build result | `status`, `branch`, `tests`, `coverage` |
333
+ | `incident` | Incident alert | `title`, `severity`, `status`, `service` |
334
+ | `incident_resolved` | Incident resolution | `title`, `duration`, `root_cause`, `resolution` |
335
+ | `maintenance` | Scheduled maintenance | `title`, `start`, `end`, `services` |
336
+ | `status_update` | Service status (operational/degraded/outage) | `status`, `services`, `uptime` |
337
+ | `review` | PR review request | `title`, `repo`, `author`, `branch`, `url` |
338
+
339
+ ### Team & Community Templates
340
+
341
+ | Template | Description | Key Vars |
342
+ | -------------- | -------------------------------- | ---------------------------------------- |
343
+ | `celebration` | Celebrate wins and milestones | `title`, `message`, `achievement` |
344
+ | `welcome` | Welcome new team members | `name`, `role`, `team`, `mention` |
345
+ | `shoutout` | Recognize outstanding work | `name`, `achievement`, `mention` |
346
+ | `quote` | Inspirational/motivational quote | `text`, `author`, `source` |
347
+ | `announcement` | General announcement | `title`, `message`, `action`, `deadline` |
348
+ | `changelog` | What's new (added/changed/fixed) | `version`, `added`, `changed`, `fixed` |
349
+ | `milestone` | Project milestone reached | `title`, `metric`, `target`, `next` |
350
+ | `tip` | Pro tip with code example | `message`, `title`, `example`, `link` |
351
+ | `poll` | Quick poll with numbered options | `question`, `options` (pipe-separated) |
352
+
353
+ ### Example
354
+
355
+ ```
356
+ send_template({
357
+ template: "release",
358
+ vars: {
359
+ version: "0.6.0",
360
+ name: "discord-ops",
361
+ notes: "Template system for beautiful Discord embeds",
362
+ highlights: "17 templates, 45 tools",
363
+ npm: "discord-ops@0.6.0"
364
+ },
365
+ project: "my-app",
366
+ channel: "releases"
367
+ })
368
+ ```
369
+
370
+ All templates support project routing (`project`, `channel`, `notification_type`, `channel_id`).
371
+
320
372
  ## Multi-Organization Troubleshooting
321
373
 
322
374
  ### Validating your config
@@ -0,0 +1,14 @@
1
+ import type { TemplateRenderer, RenderedTemplate } from "./types.js";
2
+ export interface TemplateInfo {
3
+ name: string;
4
+ category: string;
5
+ description: string;
6
+ requiredVars: string[];
7
+ optionalVars: string[];
8
+ render: TemplateRenderer;
9
+ }
10
+ export declare const templates: Record<string, TemplateInfo>;
11
+ export declare function getTemplate(name: string): TemplateInfo | undefined;
12
+ export declare function listTemplates(): TemplateInfo[];
13
+ export declare function renderTemplate(name: string, vars: Record<string, string>): RenderedTemplate;
14
+ //# sourceMappingURL=registry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/templates/registry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AA8WrE,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,MAAM,EAAE,gBAAgB,CAAC;CAC1B;AAED,eAAO,MAAM,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAgMlD,CAAC;AAEF,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,YAAY,GAAG,SAAS,CAElE;AAED,wBAAgB,aAAa,IAAI,YAAY,EAAE,CAE9C;AAED,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,gBAAgB,CAa3F"}
@@ -0,0 +1,547 @@
1
+ import { Colors } from "./types.js";
2
+ /**
3
+ * All built-in templates.
4
+ * Each template is a function that takes string key-value vars and returns embeds.
5
+ *
6
+ * Required vars are documented in the description — the tool exposes these
7
+ * so the AI knows what to pass.
8
+ */
9
+ // ─── DevOps ──────────────────────────────────────────────────────────
10
+ const release = (vars) => ({
11
+ embeds: [
12
+ {
13
+ title: `🚀 ${vars.name ?? "Release"} ${vars.version}`,
14
+ description: vars.notes ?? "A new version has been released.",
15
+ color: Colors.success,
16
+ fields: [
17
+ ...(vars.highlights ? [{ name: "Highlights", value: vars.highlights }] : []),
18
+ ...(vars.breaking ? [{ name: "⚠️ Breaking Changes", value: vars.breaking }] : []),
19
+ ...(vars.link
20
+ ? [{ name: "Links", value: `[Release Notes](${vars.link})`, inline: true }]
21
+ : []),
22
+ ...(vars.npm
23
+ ? [{ name: "Install", value: `\`npm install ${vars.npm}\``, inline: true }]
24
+ : []),
25
+ ],
26
+ footer: { text: vars.footer ?? "Release Pipeline" },
27
+ timestamp: new Date().toISOString(),
28
+ },
29
+ ],
30
+ });
31
+ const deploy = (vars) => {
32
+ const success = (vars.status ?? "success") === "success";
33
+ return {
34
+ embeds: [
35
+ {
36
+ title: `${success ? "✅" : "❌"} Deploy ${success ? "Succeeded" : "Failed"}`,
37
+ description: vars.message ??
38
+ `Deployment to **${vars.environment ?? "production"}** ${success ? "completed" : "failed"}.`,
39
+ color: success ? Colors.success : Colors.error,
40
+ fields: [
41
+ { name: "Environment", value: vars.environment ?? "production", inline: true },
42
+ ...(vars.version ? [{ name: "Version", value: vars.version, inline: true }] : []),
43
+ ...(vars.duration ? [{ name: "Duration", value: vars.duration, inline: true }] : []),
44
+ ...(vars.commit
45
+ ? [{ name: "Commit", value: `\`${vars.commit.slice(0, 8)}\``, inline: true }]
46
+ : []),
47
+ ...(vars.url ? [{ name: "URL", value: `[View Deployment](${vars.url})` }] : []),
48
+ ],
49
+ footer: { text: vars.footer ?? "Deployment Pipeline" },
50
+ timestamp: new Date().toISOString(),
51
+ },
52
+ ],
53
+ };
54
+ };
55
+ const ciBuild = (vars) => {
56
+ const passed = (vars.status ?? "passed") === "passed";
57
+ return {
58
+ embeds: [
59
+ {
60
+ title: `${passed ? "🟢" : "🔴"} Build ${passed ? "Passed" : "Failed"} — ${vars.branch ?? "main"}`,
61
+ description: vars.message ?? undefined,
62
+ color: passed ? Colors.success : Colors.error,
63
+ fields: [
64
+ ...(vars.repo ? [{ name: "Repository", value: vars.repo, inline: true }] : []),
65
+ ...(vars.branch ? [{ name: "Branch", value: `\`${vars.branch}\``, inline: true }] : []),
66
+ ...(vars.duration ? [{ name: "Duration", value: vars.duration, inline: true }] : []),
67
+ ...(vars.tests ? [{ name: "Tests", value: vars.tests, inline: true }] : []),
68
+ ...(vars.coverage ? [{ name: "Coverage", value: vars.coverage, inline: true }] : []),
69
+ ...(vars.commit
70
+ ? [{ name: "Commit", value: `\`${vars.commit.slice(0, 8)}\``, inline: true }]
71
+ : []),
72
+ ...(vars.url ? [{ name: "Details", value: `[View Build](${vars.url})` }] : []),
73
+ ],
74
+ footer: { text: vars.footer ?? "CI Pipeline" },
75
+ timestamp: new Date().toISOString(),
76
+ },
77
+ ],
78
+ };
79
+ };
80
+ const incident = (vars) => ({
81
+ embeds: [
82
+ {
83
+ title: `🚨 Incident: ${vars.title ?? "Service Disruption"}`,
84
+ description: vars.description ?? "An incident has been detected.",
85
+ color: Colors.error,
86
+ fields: [
87
+ { name: "Severity", value: vars.severity ?? "high", inline: true },
88
+ { name: "Status", value: vars.status ?? "investigating", inline: true },
89
+ ...(vars.service ? [{ name: "Service", value: vars.service, inline: true }] : []),
90
+ ...(vars.impact ? [{ name: "Impact", value: vars.impact }] : []),
91
+ ...(vars.url ? [{ name: "Status Page", value: `[View Status](${vars.url})` }] : []),
92
+ ],
93
+ footer: { text: vars.footer ?? "Incident Management" },
94
+ timestamp: new Date().toISOString(),
95
+ },
96
+ ],
97
+ });
98
+ const incidentResolved = (vars) => ({
99
+ embeds: [
100
+ {
101
+ title: `✅ Resolved: ${vars.title ?? "Incident"}`,
102
+ description: vars.description ?? "The incident has been resolved.",
103
+ color: Colors.success,
104
+ fields: [
105
+ ...(vars.duration ? [{ name: "Duration", value: vars.duration, inline: true }] : []),
106
+ ...(vars.root_cause ? [{ name: "Root Cause", value: vars.root_cause }] : []),
107
+ ...(vars.resolution ? [{ name: "Resolution", value: vars.resolution }] : []),
108
+ ...(vars.url ? [{ name: "Postmortem", value: `[View Details](${vars.url})` }] : []),
109
+ ],
110
+ footer: { text: vars.footer ?? "Incident Management" },
111
+ timestamp: new Date().toISOString(),
112
+ },
113
+ ],
114
+ });
115
+ const maintenance = (vars) => ({
116
+ embeds: [
117
+ {
118
+ title: `🔧 Scheduled Maintenance: ${vars.title ?? "System Update"}`,
119
+ description: vars.description ?? "Scheduled maintenance window.",
120
+ color: Colors.warning,
121
+ fields: [
122
+ ...(vars.start ? [{ name: "Start", value: vars.start, inline: true }] : []),
123
+ ...(vars.end ? [{ name: "End", value: vars.end, inline: true }] : []),
124
+ ...(vars.services ? [{ name: "Affected Services", value: vars.services }] : []),
125
+ ...(vars.impact ? [{ name: "Expected Impact", value: vars.impact }] : []),
126
+ ],
127
+ footer: { text: vars.footer ?? "Infrastructure" },
128
+ timestamp: new Date().toISOString(),
129
+ },
130
+ ],
131
+ });
132
+ // ─── Team & Community ────────────────────────────────────────────────
133
+ const celebration = (vars) => ({
134
+ content: vars.mention ?? undefined,
135
+ embeds: [
136
+ {
137
+ title: `🎉 ${vars.title ?? "Celebration!"}`,
138
+ description: vars.message ?? "Something amazing just happened!",
139
+ color: Colors.celebration,
140
+ ...(vars.image ? { image: { url: vars.image } } : {}),
141
+ fields: [
142
+ ...(vars.achievement ? [{ name: "🏆 Achievement", value: vars.achievement }] : []),
143
+ ...(vars.details ? [{ name: "Details", value: vars.details }] : []),
144
+ ],
145
+ footer: { text: vars.footer ?? "🥂 Cheers!" },
146
+ timestamp: new Date().toISOString(),
147
+ },
148
+ ],
149
+ });
150
+ const welcome = (vars) => ({
151
+ content: vars.mention ?? undefined,
152
+ embeds: [
153
+ {
154
+ title: `👋 Welcome${vars.name ? `, ${vars.name}` : ""}!`,
155
+ description: vars.message ?? "We're excited to have you here!",
156
+ color: Colors.ocean,
157
+ ...(vars.avatar ? { thumbnail: { url: vars.avatar } } : {}),
158
+ fields: [
159
+ ...(vars.role ? [{ name: "Role", value: vars.role, inline: true }] : []),
160
+ ...(vars.team ? [{ name: "Team", value: vars.team, inline: true }] : []),
161
+ ...(vars.intro ? [{ name: "About", value: vars.intro }] : []),
162
+ ...(vars.resources ? [{ name: "📚 Getting Started", value: vars.resources }] : []),
163
+ ],
164
+ footer: { text: vars.footer ?? "Welcome aboard!" },
165
+ timestamp: new Date().toISOString(),
166
+ },
167
+ ],
168
+ });
169
+ const shoutout = (vars) => ({
170
+ content: vars.mention ?? undefined,
171
+ embeds: [
172
+ {
173
+ title: `⭐ Shoutout${vars.name ? ` to ${vars.name}` : ""}!`,
174
+ description: vars.message ?? "Outstanding work!",
175
+ color: Colors.premium,
176
+ fields: [
177
+ ...(vars.achievement ? [{ name: "🏅 For", value: vars.achievement }] : []),
178
+ ...(vars.impact ? [{ name: "Impact", value: vars.impact }] : []),
179
+ ],
180
+ footer: { text: vars.footer ?? "Recognition" },
181
+ timestamp: new Date().toISOString(),
182
+ },
183
+ ],
184
+ });
185
+ const quote = (vars) => ({
186
+ embeds: [
187
+ {
188
+ description: `> *${vars.text ?? "The best way to predict the future is to invent it."}*`,
189
+ color: Colors.lavender,
190
+ footer: {
191
+ text: vars.author
192
+ ? `— ${vars.author}${vars.source ? `, ${vars.source}` : ""}`
193
+ : (vars.footer ?? "💭"),
194
+ },
195
+ },
196
+ ],
197
+ });
198
+ const announcement = (vars) => ({
199
+ content: vars.mention ?? undefined,
200
+ embeds: [
201
+ {
202
+ title: `📢 ${vars.title ?? "Announcement"}`,
203
+ description: vars.message ?? "",
204
+ color: Colors.info,
205
+ ...(vars.image ? { image: { url: vars.image } } : {}),
206
+ fields: [
207
+ ...(vars.details ? [{ name: "Details", value: vars.details }] : []),
208
+ ...(vars.action ? [{ name: "⚡ Action Required", value: vars.action }] : []),
209
+ ...(vars.deadline ? [{ name: "📅 Deadline", value: vars.deadline, inline: true }] : []),
210
+ ...(vars.link
211
+ ? [{ name: "🔗 Link", value: `[Learn More](${vars.link})`, inline: true }]
212
+ : []),
213
+ ],
214
+ footer: { text: vars.footer ?? "Announcement" },
215
+ timestamp: new Date().toISOString(),
216
+ },
217
+ ],
218
+ });
219
+ const changelog = (vars) => ({
220
+ embeds: [
221
+ {
222
+ title: `📋 ${vars.title ?? "What's New"} ${vars.version ?? ""}`.trim(),
223
+ description: vars.summary ?? "",
224
+ color: Colors.mint,
225
+ fields: [
226
+ ...(vars.added ? [{ name: "✨ Added", value: vars.added }] : []),
227
+ ...(vars.changed ? [{ name: "🔄 Changed", value: vars.changed }] : []),
228
+ ...(vars.fixed ? [{ name: "🐛 Fixed", value: vars.fixed }] : []),
229
+ ...(vars.removed ? [{ name: "🗑️ Removed", value: vars.removed }] : []),
230
+ ...(vars.security ? [{ name: "🔒 Security", value: vars.security }] : []),
231
+ ...(vars.link ? [{ name: "Full Changelog", value: `[View on GitHub](${vars.link})` }] : []),
232
+ ],
233
+ footer: { text: vars.footer ?? "Changelog" },
234
+ timestamp: new Date().toISOString(),
235
+ },
236
+ ],
237
+ });
238
+ const milestone = (vars) => ({
239
+ content: vars.mention ?? undefined,
240
+ embeds: [
241
+ {
242
+ title: `🏁 Milestone: ${vars.title ?? "Reached!"}`,
243
+ description: vars.message ?? "A major milestone has been achieved!",
244
+ color: Colors.premium,
245
+ fields: [
246
+ ...(vars.metric ? [{ name: "📊 Metric", value: vars.metric, inline: true }] : []),
247
+ ...(vars.target ? [{ name: "🎯 Target", value: vars.target, inline: true }] : []),
248
+ ...(vars.next ? [{ name: "⏭️ Next Goal", value: vars.next }] : []),
249
+ ...(vars.contributors ? [{ name: "👥 Contributors", value: vars.contributors }] : []),
250
+ ],
251
+ footer: { text: vars.footer ?? "Milestones" },
252
+ timestamp: new Date().toISOString(),
253
+ },
254
+ ],
255
+ });
256
+ const statusUpdate = (vars) => {
257
+ const statusColors = {
258
+ operational: Colors.success,
259
+ degraded: Colors.warning,
260
+ outage: Colors.error,
261
+ maintenance: Colors.frost,
262
+ };
263
+ const statusIcons = {
264
+ operational: "🟢",
265
+ degraded: "🟡",
266
+ outage: "🔴",
267
+ maintenance: "🔵",
268
+ };
269
+ const status = vars.status ?? "operational";
270
+ return {
271
+ embeds: [
272
+ {
273
+ title: `${statusIcons[status] ?? "⚪"} Status: ${vars.title ?? status.charAt(0).toUpperCase() + status.slice(1)}`,
274
+ description: vars.message ?? undefined,
275
+ color: statusColors[status] ?? Colors.frost,
276
+ fields: [
277
+ ...(vars.services ? [{ name: "Services", value: vars.services }] : []),
278
+ ...(vars.uptime ? [{ name: "Uptime", value: vars.uptime, inline: true }] : []),
279
+ ...(vars.response_time
280
+ ? [{ name: "Response Time", value: vars.response_time, inline: true }]
281
+ : []),
282
+ ...(vars.url ? [{ name: "Status Page", value: `[View Dashboard](${vars.url})` }] : []),
283
+ ],
284
+ footer: { text: vars.footer ?? "Status Monitor" },
285
+ timestamp: new Date().toISOString(),
286
+ },
287
+ ],
288
+ };
289
+ };
290
+ const tip = (vars) => ({
291
+ embeds: [
292
+ {
293
+ title: `💡 ${vars.title ?? "Pro Tip"}`,
294
+ description: vars.message ?? "",
295
+ color: Colors.sunset,
296
+ fields: [
297
+ ...(vars.example ? [{ name: "Example", value: `\`\`\`\n${vars.example}\n\`\`\`` }] : []),
298
+ ...(vars.link ? [{ name: "📖 Learn More", value: `[Documentation](${vars.link})` }] : []),
299
+ ],
300
+ footer: { text: vars.footer ?? "Tips & Tricks" },
301
+ },
302
+ ],
303
+ });
304
+ const poll = (vars) => {
305
+ const options = (vars.options ?? "").split("|").filter(Boolean);
306
+ const emojis = ["1️⃣", "2️⃣", "3️⃣", "4️⃣", "5️⃣", "6️⃣", "7️⃣", "8️⃣", "9️⃣", "🔟"];
307
+ return {
308
+ embeds: [
309
+ {
310
+ title: `📊 ${vars.question ?? "Poll"}`,
311
+ description: options.length > 0
312
+ ? options.map((opt, i) => `${emojis[i] ?? `${i + 1}.`} ${opt.trim()}`).join("\n")
313
+ : (vars.message ?? "React to vote!"),
314
+ color: Colors.info,
315
+ ...(vars.deadline ? { fields: [{ name: "⏰ Ends", value: vars.deadline }] } : {}),
316
+ footer: { text: vars.footer ?? "React to vote!" },
317
+ },
318
+ ],
319
+ };
320
+ };
321
+ const review = (vars) => ({
322
+ embeds: [
323
+ {
324
+ title: `🔍 PR Review: ${vars.title ?? "Pull Request"}`,
325
+ description: vars.summary ?? undefined,
326
+ color: Colors.info,
327
+ fields: [
328
+ ...(vars.repo ? [{ name: "Repository", value: vars.repo, inline: true }] : []),
329
+ ...(vars.author ? [{ name: "Author", value: vars.author, inline: true }] : []),
330
+ ...(vars.branch ? [{ name: "Branch", value: `\`${vars.branch}\``, inline: true }] : []),
331
+ ...(vars.changes ? [{ name: "Changes", value: vars.changes }] : []),
332
+ ...(vars.url ? [{ name: "Review", value: `[Open PR](${vars.url})` }] : []),
333
+ ],
334
+ footer: { text: vars.footer ?? "Code Review" },
335
+ timestamp: new Date().toISOString(),
336
+ },
337
+ ],
338
+ });
339
+ export const templates = {
340
+ // DevOps
341
+ release: {
342
+ name: "release",
343
+ category: "devops",
344
+ description: "Version release announcement with highlights, breaking changes, and install instructions",
345
+ requiredVars: ["version"],
346
+ optionalVars: ["name", "notes", "highlights", "breaking", "link", "npm", "footer"],
347
+ render: release,
348
+ },
349
+ deploy: {
350
+ name: "deploy",
351
+ category: "devops",
352
+ description: "Deployment notification with status, environment, duration, and commit info",
353
+ requiredVars: [],
354
+ optionalVars: [
355
+ "status",
356
+ "environment",
357
+ "version",
358
+ "duration",
359
+ "commit",
360
+ "url",
361
+ "message",
362
+ "footer",
363
+ ],
364
+ render: deploy,
365
+ },
366
+ ci_build: {
367
+ name: "ci_build",
368
+ category: "devops",
369
+ description: "CI build result with branch, tests, coverage, and duration",
370
+ requiredVars: [],
371
+ optionalVars: [
372
+ "status",
373
+ "branch",
374
+ "repo",
375
+ "duration",
376
+ "tests",
377
+ "coverage",
378
+ "commit",
379
+ "url",
380
+ "message",
381
+ "footer",
382
+ ],
383
+ render: ciBuild,
384
+ },
385
+ incident: {
386
+ name: "incident",
387
+ category: "devops",
388
+ description: "Incident alert with severity, status, service, and impact details",
389
+ requiredVars: ["title"],
390
+ optionalVars: ["description", "severity", "status", "service", "impact", "url", "footer"],
391
+ render: incident,
392
+ },
393
+ incident_resolved: {
394
+ name: "incident_resolved",
395
+ category: "devops",
396
+ description: "Incident resolution with root cause, duration, and postmortem link",
397
+ requiredVars: ["title"],
398
+ optionalVars: ["description", "duration", "root_cause", "resolution", "url", "footer"],
399
+ render: incidentResolved,
400
+ },
401
+ maintenance: {
402
+ name: "maintenance",
403
+ category: "devops",
404
+ description: "Scheduled maintenance notice with time window and affected services",
405
+ requiredVars: ["title"],
406
+ optionalVars: ["description", "start", "end", "services", "impact", "footer"],
407
+ render: maintenance,
408
+ },
409
+ status_update: {
410
+ name: "status_update",
411
+ category: "devops",
412
+ description: "Service status update (operational/degraded/outage/maintenance) with uptime and response time",
413
+ requiredVars: ["status"],
414
+ optionalVars: ["title", "message", "services", "uptime", "response_time", "url", "footer"],
415
+ render: statusUpdate,
416
+ },
417
+ review: {
418
+ name: "review",
419
+ category: "devops",
420
+ description: "Pull request review request with repo, author, branch, and change summary",
421
+ requiredVars: ["title"],
422
+ optionalVars: ["summary", "repo", "author", "branch", "changes", "url", "footer"],
423
+ render: review,
424
+ },
425
+ // Team & Community
426
+ celebration: {
427
+ name: "celebration",
428
+ category: "team",
429
+ description: "Celebrate wins, milestones, and achievements with style",
430
+ requiredVars: [],
431
+ optionalVars: ["title", "message", "achievement", "details", "image", "mention", "footer"],
432
+ render: celebration,
433
+ },
434
+ welcome: {
435
+ name: "welcome",
436
+ category: "team",
437
+ description: "Welcome a new team member with role, team, and onboarding resources",
438
+ requiredVars: [],
439
+ optionalVars: [
440
+ "name",
441
+ "message",
442
+ "role",
443
+ "team",
444
+ "intro",
445
+ "resources",
446
+ "avatar",
447
+ "mention",
448
+ "footer",
449
+ ],
450
+ render: welcome,
451
+ },
452
+ shoutout: {
453
+ name: "shoutout",
454
+ category: "team",
455
+ description: "Recognize someone's outstanding work with a gold-themed shoutout",
456
+ requiredVars: [],
457
+ optionalVars: ["name", "message", "achievement", "impact", "mention", "footer"],
458
+ render: shoutout,
459
+ },
460
+ quote: {
461
+ name: "quote",
462
+ category: "team",
463
+ description: "Share an inspirational or motivational quote with attribution",
464
+ requiredVars: ["text"],
465
+ optionalVars: ["author", "source", "footer"],
466
+ render: quote,
467
+ },
468
+ announcement: {
469
+ name: "announcement",
470
+ category: "team",
471
+ description: "General announcement with action items, deadlines, and links",
472
+ requiredVars: ["title"],
473
+ optionalVars: [
474
+ "message",
475
+ "details",
476
+ "action",
477
+ "deadline",
478
+ "link",
479
+ "image",
480
+ "mention",
481
+ "footer",
482
+ ],
483
+ render: announcement,
484
+ },
485
+ changelog: {
486
+ name: "changelog",
487
+ category: "team",
488
+ description: "What's new — added, changed, fixed, removed, security updates",
489
+ requiredVars: [],
490
+ optionalVars: [
491
+ "title",
492
+ "version",
493
+ "summary",
494
+ "added",
495
+ "changed",
496
+ "fixed",
497
+ "removed",
498
+ "security",
499
+ "link",
500
+ "footer",
501
+ ],
502
+ render: changelog,
503
+ },
504
+ milestone: {
505
+ name: "milestone",
506
+ category: "team",
507
+ description: "Project milestone with metrics, targets, and next goals",
508
+ requiredVars: ["title"],
509
+ optionalVars: ["message", "metric", "target", "next", "contributors", "mention", "footer"],
510
+ render: milestone,
511
+ },
512
+ tip: {
513
+ name: "tip",
514
+ category: "team",
515
+ description: "Share a pro tip with optional code example and documentation link",
516
+ requiredVars: ["message"],
517
+ optionalVars: ["title", "example", "link", "footer"],
518
+ render: tip,
519
+ },
520
+ poll: {
521
+ name: "poll",
522
+ category: "team",
523
+ description: "Quick poll with numbered options (pipe-separated) and deadline",
524
+ requiredVars: ["question"],
525
+ optionalVars: ["options", "message", "deadline", "footer"],
526
+ render: poll,
527
+ },
528
+ };
529
+ export function getTemplate(name) {
530
+ return templates[name];
531
+ }
532
+ export function listTemplates() {
533
+ return Object.values(templates);
534
+ }
535
+ export function renderTemplate(name, vars) {
536
+ const template = templates[name];
537
+ if (!template) {
538
+ throw new Error(`Unknown template "${name}". Available: ${Object.keys(templates).join(", ")}`);
539
+ }
540
+ // Validate required vars
541
+ const missing = template.requiredVars.filter((v) => !vars[v]);
542
+ if (missing.length > 0) {
543
+ throw new Error(`Template "${name}" requires: ${missing.join(", ")}`);
544
+ }
545
+ return template.render(vars);
546
+ }
547
+ //# sourceMappingURL=registry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/templates/registry.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,56 @@
1
+ import { z } from "zod";
2
+ /**
3
+ * Discord embed color palette — curated for visual impact.
4
+ */
5
+ export declare const Colors: {
6
+ readonly success: 5763719;
7
+ readonly error: 15548997;
8
+ readonly warning: 16705372;
9
+ readonly info: 5793266;
10
+ readonly celebration: 16023551;
11
+ readonly premium: 15774002;
12
+ readonly calm: 3092790;
13
+ readonly ocean: 3447003;
14
+ readonly mint: 1752220;
15
+ readonly sunset: 15105570;
16
+ readonly lavender: 10181046;
17
+ readonly ember: 15158332;
18
+ readonly frost: 10070709;
19
+ };
20
+ export interface TemplateEmbed {
21
+ title?: string;
22
+ description?: string;
23
+ color?: number;
24
+ url?: string;
25
+ thumbnail?: {
26
+ url: string;
27
+ };
28
+ image?: {
29
+ url: string;
30
+ };
31
+ footer?: {
32
+ text: string;
33
+ icon_url?: string;
34
+ };
35
+ timestamp?: string;
36
+ author?: {
37
+ name: string;
38
+ icon_url?: string;
39
+ url?: string;
40
+ };
41
+ fields?: Array<{
42
+ name: string;
43
+ value: string;
44
+ inline?: boolean;
45
+ }>;
46
+ }
47
+ export interface RenderedTemplate {
48
+ content?: string;
49
+ embeds: TemplateEmbed[];
50
+ }
51
+ export type TemplateRenderer = (vars: Record<string, string>) => RenderedTemplate;
52
+ /**
53
+ * Zod schema for template variables — all string key-value pairs.
54
+ */
55
+ export declare const templateVarsSchema: z.ZodRecord<z.ZodString, z.ZodString>;
56
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/templates/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB;;GAEG;AACH,eAAO,MAAM,MAAM;;;;;;;;;;;;;;CAiBT,CAAC;AAEX,MAAM,WAAW,aAAa;IAC5B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,SAAS,CAAC,EAAE;QAAE,GAAG,EAAE,MAAM,CAAA;KAAE,CAAC;IAC5B,KAAK,CAAC,EAAE;QAAE,GAAG,EAAE,MAAM,CAAA;KAAE,CAAC;IACxB,MAAM,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAC7C,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;QAAC,GAAG,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAC3D,MAAM,CAAC,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,OAAO,CAAA;KAAE,CAAC,CAAC;CACnE;AAED,MAAM,WAAW,gBAAgB;IAC/B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,aAAa,EAAE,CAAC;CACzB;AAED,MAAM,MAAM,gBAAgB,GAAG,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,KAAK,gBAAgB,CAAC;AAElF;;GAEG;AACH,eAAO,MAAM,kBAAkB,uCAEmE,CAAC"}
@@ -0,0 +1,28 @@
1
+ import { z } from "zod";
2
+ /**
3
+ * Discord embed color palette — curated for visual impact.
4
+ */
5
+ export const Colors = {
6
+ // Status
7
+ success: 0x57f287, // Green
8
+ error: 0xed4245, // Red
9
+ warning: 0xfee75c, // Yellow
10
+ info: 0x5865f2, // Blurple
11
+ // Vibes
12
+ celebration: 0xf47fff, // Pink/magenta
13
+ premium: 0xf0b132, // Gold
14
+ calm: 0x2f3136, // Dark embed
15
+ ocean: 0x3498db, // Blue
16
+ mint: 0x1abc9c, // Teal
17
+ sunset: 0xe67e22, // Orange
18
+ lavender: 0x9b59b6, // Purple
19
+ ember: 0xe74c3c, // Deep red
20
+ frost: 0x99aab5, // Silver/gray
21
+ };
22
+ /**
23
+ * Zod schema for template variables — all string key-value pairs.
24
+ */
25
+ export const templateVarsSchema = z
26
+ .record(z.string(), z.string())
27
+ .describe("Template variables as key-value pairs (see template descriptions for required vars)");
28
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/templates/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB;;GAEG;AACH,MAAM,CAAC,MAAM,MAAM,GAAG;IACpB,SAAS;IACT,OAAO,EAAE,QAAQ,EAAE,QAAQ;IAC3B,KAAK,EAAE,QAAQ,EAAE,MAAM;IACvB,OAAO,EAAE,QAAQ,EAAE,SAAS;IAC5B,IAAI,EAAE,QAAQ,EAAE,UAAU;IAE1B,QAAQ;IACR,WAAW,EAAE,QAAQ,EAAE,eAAe;IACtC,OAAO,EAAE,QAAQ,EAAE,OAAO;IAC1B,IAAI,EAAE,QAAQ,EAAE,aAAa;IAC7B,KAAK,EAAE,QAAQ,EAAE,OAAO;IACxB,IAAI,EAAE,QAAQ,EAAE,OAAO;IACvB,MAAM,EAAE,QAAQ,EAAE,SAAS;IAC3B,QAAQ,EAAE,QAAQ,EAAE,SAAS;IAC7B,KAAK,EAAE,QAAQ,EAAE,WAAW;IAC5B,KAAK,EAAE,QAAQ,EAAE,cAAc;CACvB,CAAC;AAsBX;;GAEG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC;KAChC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC;KAC9B,QAAQ,CAAC,qFAAqF,CAAC,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAiEjD,eAAO,MAAM,QAAQ,EAAE,cAAc,EA+DpC,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAmEjD,eAAO,MAAM,QAAQ,EAAE,cAAc,EAiEpC,CAAC"}
@@ -7,6 +7,8 @@ import { addReaction } from "./messaging/add-reaction.js";
7
7
  import { pinMessage } from "./messaging/pin.js";
8
8
  import { unpinMessage } from "./messaging/unpin.js";
9
9
  import { searchMessages } from "./messaging/search.js";
10
+ import { sendTemplate } from "./messaging/send-template.js";
11
+ import { listTemplatesCmd } from "./messaging/list-templates.js";
10
12
  // Channels
11
13
  import { listChannels } from "./channels/list-channels.js";
12
14
  import { getChannel } from "./channels/get-channel.js";
@@ -61,6 +63,8 @@ export const allTools = [
61
63
  pinMessage,
62
64
  unpinMessage,
63
65
  searchMessages,
66
+ sendTemplate,
67
+ listTemplatesCmd,
64
68
  // Channels
65
69
  listChannels,
66
70
  getChannel,
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { ToolDefinition } from "../types.js";
2
+ export declare const listTemplatesCmd: ToolDefinition;
3
+ //# sourceMappingURL=list-templates.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list-templates.d.ts","sourceRoot":"","sources":["../../../src/tools/messaging/list-templates.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAWlD,eAAO,MAAM,gBAAgB,EAAE,cA0B9B,CAAC"}
@@ -0,0 +1,33 @@
1
+ import { z } from "zod";
2
+ import { toolResultJson } from "../types.js";
3
+ import { listTemplates } from "../../templates/registry.js";
4
+ const inputSchema = z.object({
5
+ category: z
6
+ .enum(["devops", "team", "all"])
7
+ .optional()
8
+ .describe("Filter by category: devops, team, or all (default: all)"),
9
+ });
10
+ export const listTemplatesCmd = {
11
+ name: "list_templates",
12
+ description: "List all available message templates with their required/optional variables. Use with send_template to send formatted Discord embeds.",
13
+ category: "messaging",
14
+ inputSchema,
15
+ handle: async (input, _ctx) => {
16
+ let allTemplates = listTemplates();
17
+ if (input.category && input.category !== "all") {
18
+ allTemplates = allTemplates.filter((t) => t.category === input.category);
19
+ }
20
+ const result = allTemplates.map((t) => ({
21
+ name: t.name,
22
+ category: t.category,
23
+ description: t.description,
24
+ required_vars: t.requiredVars,
25
+ optional_vars: t.optionalVars,
26
+ }));
27
+ return toolResultJson({
28
+ count: result.length,
29
+ templates: result,
30
+ });
31
+ },
32
+ };
33
+ //# sourceMappingURL=list-templates.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list-templates.js","sourceRoot":"","sources":["../../../src/tools/messaging/list-templates.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAE5D,MAAM,WAAW,GAAG,CAAC,CAAC,MAAM,CAAC;IAC3B,QAAQ,EAAE,CAAC;SACR,IAAI,CAAC,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC;SAC/B,QAAQ,EAAE;SACV,QAAQ,CAAC,yDAAyD,CAAC;CACvE,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,gBAAgB,GAAmB;IAC9C,IAAI,EAAE,gBAAgB;IACtB,WAAW,EACT,uIAAuI;IACzI,QAAQ,EAAE,WAAW;IACrB,WAAW;IACX,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;QAC5B,IAAI,YAAY,GAAG,aAAa,EAAE,CAAC;QAEnC,IAAI,KAAK,CAAC,QAAQ,IAAI,KAAK,CAAC,QAAQ,KAAK,KAAK,EAAE,CAAC;YAC/C,YAAY,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,KAAK,CAAC,QAAQ,CAAC,CAAC;QAC3E,CAAC;QAED,MAAM,MAAM,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACtC,IAAI,EAAE,CAAC,CAAC,IAAI;YACZ,QAAQ,EAAE,CAAC,CAAC,QAAQ;YACpB,WAAW,EAAE,CAAC,CAAC,WAAW;YAC1B,aAAa,EAAE,CAAC,CAAC,YAAY;YAC7B,aAAa,EAAE,CAAC,CAAC,YAAY;SAC9B,CAAC,CAAC,CAAC;QAEJ,OAAO,cAAc,CAAC;YACpB,KAAK,EAAE,MAAM,CAAC,MAAM;YACpB,SAAS,EAAE,MAAM;SAClB,CAAC,CAAC;IACL,CAAC;CACF,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { ToolDefinition } from "../types.js";
2
+ export declare const sendTemplate: ToolDefinition;
3
+ //# sourceMappingURL=send-template.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"send-template.d.ts","sourceRoot":"","sources":["../../../src/tools/messaging/send-template.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAoBlD,eAAO,MAAM,YAAY,EAAE,cA4B1B,CAAC"}
@@ -0,0 +1,42 @@
1
+ import { z } from "zod";
2
+ import { toolResultJson } from "../types.js";
3
+ import { resolveTarget } from "../../routing/resolver.js";
4
+ import { renderTemplate } from "../../templates/registry.js";
5
+ import { templateVarsSchema } from "../../templates/types.js";
6
+ const inputSchema = z.object({
7
+ template: z
8
+ .string()
9
+ .describe("Template name: release, deploy, ci_build, incident, incident_resolved, maintenance, status_update, review, celebration, welcome, shoutout, quote, announcement, changelog, milestone, tip, poll"),
10
+ vars: templateVarsSchema,
11
+ channel_id: z.string().optional().describe("Direct channel ID"),
12
+ guild_id: z.string().optional().describe("Direct guild ID"),
13
+ project: z.string().optional().describe("Project name for routing"),
14
+ channel: z.string().optional().describe("Channel alias within project"),
15
+ notification_type: z.string().optional().describe("Notification type for auto-routing"),
16
+ });
17
+ export const sendTemplate = {
18
+ name: "send_template",
19
+ description: "Send a beautifully formatted Discord embed using a built-in template. Templates include: release, deploy, ci_build, incident, celebration, welcome, shoutout, quote, announcement, changelog, milestone, status_update, maintenance, tip, poll, review. Use list_templates for full details.",
20
+ category: "messaging",
21
+ inputSchema,
22
+ handle: async (input, ctx) => {
23
+ const target = resolveTarget(input, ctx.config);
24
+ if ("error" in target) {
25
+ return { content: [{ type: "text", text: target.error }], isError: true };
26
+ }
27
+ const rendered = renderTemplate(input.template, input.vars);
28
+ const channel = await ctx.discord.getChannel(target.channelId, target.token);
29
+ const message = await channel.send({
30
+ content: rendered.content,
31
+ embeds: rendered.embeds,
32
+ });
33
+ return toolResultJson({
34
+ id: message.id,
35
+ channel_id: message.channelId,
36
+ template: input.template,
37
+ timestamp: message.createdAt.toISOString(),
38
+ ...(target.project ? { project: target.project } : {}),
39
+ });
40
+ },
41
+ };
42
+ //# sourceMappingURL=send-template.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"send-template.js","sourceRoot":"","sources":["../../../src/tools/messaging/send-template.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAC1D,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAC7D,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAE9D,MAAM,WAAW,GAAG,CAAC,CAAC,MAAM,CAAC;IAC3B,QAAQ,EAAE,CAAC;SACR,MAAM,EAAE;SACR,QAAQ,CACP,iMAAiM,CAClM;IACH,IAAI,EAAE,kBAAkB;IACxB,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,mBAAmB,CAAC;IAC/D,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,iBAAiB,CAAC;IAC3D,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,0BAA0B,CAAC;IACnE,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,8BAA8B,CAAC;IACvE,iBAAiB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,oCAAoC,CAAC;CACxF,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,YAAY,GAAmB;IAC1C,IAAI,EAAE,eAAe;IACrB,WAAW,EACT,8RAA8R;IAChS,QAAQ,EAAE,WAAW;IACrB,WAAW;IACX,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE;QAC3B,MAAM,MAAM,GAAG,aAAa,CAAC,KAAK,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;QAChD,IAAI,OAAO,IAAI,MAAM,EAAE,CAAC;YACtB,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;QAC5E,CAAC;QAED,MAAM,QAAQ,GAAG,cAAc,CAAC,KAAK,CAAC,QAAQ,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;QAC5D,MAAM,OAAO,GAAG,MAAM,GAAG,CAAC,OAAO,CAAC,UAAU,CAAC,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC;QAE7E,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC;YACjC,OAAO,EAAE,QAAQ,CAAC,OAAO;YACzB,MAAM,EAAE,QAAQ,CAAC,MAAM;SACxB,CAAC,CAAC;QAEH,OAAO,cAAc,CAAC;YACpB,EAAE,EAAE,OAAO,CAAC,EAAE;YACd,UAAU,EAAE,OAAO,CAAC,SAAS;YAC7B,QAAQ,EAAE,KAAK,CAAC,QAAQ;YACxB,SAAS,EAAE,OAAO,CAAC,SAAS,CAAC,WAAW,EAAE;YAC1C,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SACvD,CAAC,CAAC;IACL,CAAC;CACF,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "discord-ops",
3
- "version": "0.5.0",
3
+ "version": "0.6.0",
4
4
  "description": "Agency-grade Discord MCP server with multi-guild project routing",
5
5
  "type": "module",
6
6
  "license": "MIT",