@proletariat/cli 0.3.105 → 0.3.109
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/dist/commands/agent/cleanup.js +13 -1
- package/dist/commands/agent/cleanup.js.map +1 -1
- package/dist/commands/claude/index.js +2 -2
- package/dist/commands/claude/index.js.map +1 -1
- package/dist/commands/feedback/list.js +4 -9
- package/dist/commands/feedback/list.js.map +1 -1
- package/dist/commands/feedback/submit.js +4 -9
- package/dist/commands/feedback/submit.js.map +1 -1
- package/dist/commands/feedback/view.js +4 -9
- package/dist/commands/feedback/view.js.map +1 -1
- package/dist/commands/gc.d.ts +1 -0
- package/dist/commands/gc.js +34 -1
- package/dist/commands/gc.js.map +1 -1
- package/dist/commands/notify/connect.d.ts +34 -0
- package/dist/commands/notify/connect.js +166 -0
- package/dist/commands/notify/connect.js.map +1 -0
- package/dist/commands/notify/disconnect.d.ts +16 -0
- package/dist/commands/notify/disconnect.js +45 -0
- package/dist/commands/notify/disconnect.js.map +1 -0
- package/dist/commands/notify/list.d.ts +15 -0
- package/dist/commands/notify/list.js +101 -0
- package/dist/commands/notify/list.js.map +1 -0
- package/dist/commands/notify/rules/add.d.ts +26 -0
- package/dist/commands/notify/rules/add.js +95 -0
- package/dist/commands/notify/rules/add.js.map +1 -0
- package/dist/commands/notify/rules/list.d.ts +14 -0
- package/dist/commands/notify/rules/list.js +82 -0
- package/dist/commands/notify/rules/list.js.map +1 -0
- package/dist/commands/notify/rules/remove.d.ts +16 -0
- package/dist/commands/notify/rules/remove.js +44 -0
- package/dist/commands/notify/rules/remove.js.map +1 -0
- package/dist/commands/notify/test.d.ts +16 -0
- package/dist/commands/notify/test.js +63 -0
- package/dist/commands/notify/test.js.map +1 -0
- package/dist/commands/orchestrate/index.js +11 -6
- package/dist/commands/orchestrate/index.js.map +1 -1
- package/dist/commands/orchestrate/machine.d.ts +29 -0
- package/dist/commands/orchestrate/machine.js +230 -0
- package/dist/commands/orchestrate/machine.js.map +1 -0
- package/dist/commands/pr/checks.js +4 -8
- package/dist/commands/pr/checks.js.map +1 -1
- package/dist/commands/pr/close.js +4 -8
- package/dist/commands/pr/close.js.map +1 -1
- package/dist/commands/pr/create.js +4 -8
- package/dist/commands/pr/create.js.map +1 -1
- package/dist/commands/pr/index.js +1 -1
- package/dist/commands/pr/index.js.map +1 -1
- package/dist/commands/pr/link.js +4 -8
- package/dist/commands/pr/link.js.map +1 -1
- package/dist/commands/pr/list.js +5 -9
- package/dist/commands/pr/list.js.map +1 -1
- package/dist/commands/pr/merge.d.ts +5 -0
- package/dist/commands/pr/merge.js +35 -11
- package/dist/commands/pr/merge.js.map +1 -1
- package/dist/commands/pr/status.js +5 -4
- package/dist/commands/pr/status.js.map +1 -1
- package/dist/commands/qa/index.js +2 -2
- package/dist/commands/qa/index.js.map +1 -1
- package/dist/commands/repo/create.js +4 -8
- package/dist/commands/repo/create.js.map +1 -1
- package/dist/commands/session/list.js +81 -41
- package/dist/commands/session/list.js.map +1 -1
- package/dist/commands/session/poke.d.ts +1 -11
- package/dist/commands/session/poke.js +20 -78
- package/dist/commands/session/poke.js.map +1 -1
- package/dist/commands/session/prune.js +3 -0
- package/dist/commands/session/prune.js.map +1 -1
- package/dist/commands/ticket/move.d.ts +12 -0
- package/dist/commands/ticket/move.js +75 -2
- package/dist/commands/ticket/move.js.map +1 -1
- package/dist/commands/work/drop.js +2 -2
- package/dist/commands/work/drop.js.map +1 -1
- package/dist/commands/work/ready.js +3 -3
- package/dist/commands/work/ready.js.map +1 -1
- package/dist/commands/work/rebase.js +4 -8
- package/dist/commands/work/rebase.js.map +1 -1
- package/dist/commands/work/run.d.ts +58 -0
- package/dist/commands/work/run.js +411 -0
- package/dist/commands/work/run.js.map +1 -0
- package/dist/commands/work/ship.d.ts +6 -0
- package/dist/commands/work/ship.js +93 -51
- package/dist/commands/work/ship.js.map +1 -1
- package/dist/commands/work/start.d.ts +1 -0
- package/dist/commands/work/start.js +126 -13
- package/dist/commands/work/start.js.map +1 -1
- package/dist/lib/agents/commands.d.ts +6 -0
- package/dist/lib/agents/commands.js +55 -2
- package/dist/lib/agents/commands.js.map +1 -1
- package/dist/lib/database/credential-store.js +2 -3
- package/dist/lib/database/credential-store.js.map +1 -1
- package/dist/lib/database/db-safety.d.ts +25 -0
- package/dist/lib/database/db-safety.js +35 -0
- package/dist/lib/database/db-safety.js.map +1 -1
- package/dist/lib/database/driver.js +6 -12
- package/dist/lib/database/driver.js.map +1 -1
- package/dist/lib/database/drizzle-schema.d.ts +3 -3
- package/dist/lib/database/drizzle.js +3 -3
- package/dist/lib/database/drizzle.js.map +1 -1
- package/dist/lib/database/index.d.ts +1 -1
- package/dist/lib/database/index.js +1 -1
- package/dist/lib/database/index.js.map +1 -1
- package/dist/lib/database/migrations/0021_notification_system.d.ts +2 -0
- package/dist/lib/database/migrations/0021_notification_system.js +39 -0
- package/dist/lib/database/migrations/0021_notification_system.js.map +1 -0
- package/dist/lib/database/migrations/0022_hook_mode_tiers.d.ts +11 -0
- package/dist/lib/database/migrations/0022_hook_mode_tiers.js +53 -0
- package/dist/lib/database/migrations/0022_hook_mode_tiers.js.map +1 -0
- package/dist/lib/database/migrations/index.js +4 -0
- package/dist/lib/database/migrations/index.js.map +1 -1
- package/dist/lib/database/pmo-bootstrap.js +6 -2
- package/dist/lib/database/pmo-bootstrap.js.map +1 -1
- package/dist/lib/database/workspace.js +5 -13
- package/dist/lib/database/workspace.js.map +1 -1
- package/dist/lib/events/emitting-runner.js +10 -0
- package/dist/lib/events/emitting-runner.js.map +1 -1
- package/dist/lib/execution/cc-version.d.ts +62 -0
- package/dist/lib/execution/cc-version.js +103 -0
- package/dist/lib/execution/cc-version.js.map +1 -0
- package/dist/lib/execution/devcontainer.js +2 -1
- package/dist/lib/execution/devcontainer.js.map +1 -1
- package/dist/lib/execution/runners/devcontainer.js +4 -1
- package/dist/lib/execution/runners/devcontainer.js.map +1 -1
- package/dist/lib/execution/runners/docker-management.js +10 -46
- package/dist/lib/execution/runners/docker-management.js.map +1 -1
- package/dist/lib/execution/runners/orchestrator.js +13 -39
- package/dist/lib/execution/runners/orchestrator.js.map +1 -1
- package/dist/lib/execution/session-utils.d.ts +88 -1
- package/dist/lib/execution/session-utils.js +120 -46
- package/dist/lib/execution/session-utils.js.map +1 -1
- package/dist/lib/execution/storage.js +20 -2
- package/dist/lib/execution/storage.js.map +1 -1
- package/dist/lib/flags/resolver.d.ts +8 -1
- package/dist/lib/flags/resolver.js +35 -2
- package/dist/lib/flags/resolver.js.map +1 -1
- package/dist/lib/gc/cascade.d.ts +99 -0
- package/dist/lib/gc/cascade.js +357 -0
- package/dist/lib/gc/cascade.js.map +1 -0
- package/dist/lib/gc/config.d.ts +69 -0
- package/dist/lib/gc/config.js +134 -0
- package/dist/lib/gc/config.js.map +1 -0
- package/dist/lib/gc/index.d.ts +36 -0
- package/dist/lib/gc/index.js +209 -1
- package/dist/lib/gc/index.js.map +1 -1
- package/dist/lib/init/index.js +10 -1
- package/dist/lib/init/index.js.map +1 -1
- package/dist/lib/machine-db.d.ts +144 -0
- package/dist/lib/machine-db.js +338 -0
- package/dist/lib/machine-db.js.map +1 -0
- package/dist/lib/machine-orchestrator.d.ts +35 -0
- package/dist/lib/machine-orchestrator.js +139 -0
- package/dist/lib/machine-orchestrator.js.map +1 -0
- package/dist/lib/notifications/dispatcher.d.ts +29 -0
- package/dist/lib/notifications/dispatcher.js +281 -0
- package/dist/lib/notifications/dispatcher.js.map +1 -0
- package/dist/lib/notifications/index.d.ts +13 -0
- package/dist/lib/notifications/index.js +18 -0
- package/dist/lib/notifications/index.js.map +1 -0
- package/dist/lib/notifications/manager.d.ts +46 -0
- package/dist/lib/notifications/manager.js +200 -0
- package/dist/lib/notifications/manager.js.map +1 -0
- package/dist/lib/notifications/storage.d.ts +60 -0
- package/dist/lib/notifications/storage.js +182 -0
- package/dist/lib/notifications/storage.js.map +1 -0
- package/dist/lib/notifications/types.d.ts +126 -0
- package/dist/lib/notifications/types.js +16 -0
- package/dist/lib/notifications/types.js.map +1 -0
- package/dist/lib/orchestrate/actions.js +182 -3
- package/dist/lib/orchestrate/actions.js.map +1 -1
- package/dist/lib/orchestrate/config-loader.js +9 -35
- package/dist/lib/orchestrate/config-loader.js.map +1 -1
- package/dist/lib/orchestrate/engine.d.ts +53 -1
- package/dist/lib/orchestrate/engine.js +74 -3
- package/dist/lib/orchestrate/engine.js.map +1 -1
- package/dist/lib/orchestrate/escalation.d.ts +87 -0
- package/dist/lib/orchestrate/escalation.js +63 -0
- package/dist/lib/orchestrate/escalation.js.map +1 -0
- package/dist/lib/orchestrate/index.d.ts +2 -0
- package/dist/lib/orchestrate/index.js +1 -0
- package/dist/lib/orchestrate/index.js.map +1 -1
- package/dist/lib/orchestrate/llm-agent.d.ts +101 -0
- package/dist/lib/orchestrate/llm-agent.js +295 -0
- package/dist/lib/orchestrate/llm-agent.js.map +1 -0
- package/dist/lib/orchestrate/presets.d.ts +4 -3
- package/dist/lib/orchestrate/presets.js +13 -8
- package/dist/lib/orchestrate/presets.js.map +1 -1
- package/dist/lib/orchestrate/types.d.ts +7 -1
- package/dist/lib/orchestrate/types.js +1 -0
- package/dist/lib/orchestrate/types.js.map +1 -1
- package/dist/lib/pmo/base-command.js +1 -1
- package/dist/lib/pmo/base-command.js.map +1 -1
- package/dist/lib/pmo/find-pmo.d.ts +8 -0
- package/dist/lib/pmo/find-pmo.js +63 -2
- package/dist/lib/pmo/find-pmo.js.map +1 -1
- package/dist/lib/pmo/index.d.ts +1 -1
- package/dist/lib/pmo/index.js +1 -1
- package/dist/lib/pmo/index.js.map +1 -1
- package/dist/lib/pmo/pmo-context.js +1 -1
- package/dist/lib/pmo/pmo-context.js.map +1 -1
- package/dist/lib/pmo/storage/index.js +2 -1
- package/dist/lib/pmo/storage/index.js.map +1 -1
- package/dist/lib/pr/index.d.ts +32 -0
- package/dist/lib/pr/index.js +45 -0
- package/dist/lib/pr/index.js.map +1 -1
- package/dist/lib/registry/index.js +0 -1
- package/dist/lib/registry/index.js.map +1 -1
- package/dist/lib/signal-handler.d.ts +8 -0
- package/dist/lib/signal-handler.js +33 -0
- package/dist/lib/signal-handler.js.map +1 -1
- package/dist/lib/themes.js +8 -1
- package/dist/lib/themes.js.map +1 -1
- package/dist/lib/work-lifecycle/container-cleanup-hook.d.ts +17 -7
- package/dist/lib/work-lifecycle/container-cleanup-hook.js +64 -11
- package/dist/lib/work-lifecycle/container-cleanup-hook.js.map +1 -1
- package/dist/lib/work-lifecycle/hooks/executor.d.ts +22 -2
- package/dist/lib/work-lifecycle/hooks/executor.js +46 -8
- package/dist/lib/work-lifecycle/hooks/executor.js.map +1 -1
- package/dist/lib/work-lifecycle/hooks/manager.d.ts +62 -3
- package/dist/lib/work-lifecycle/hooks/manager.js +285 -4
- package/dist/lib/work-lifecycle/hooks/manager.js.map +1 -1
- package/dist/lib/work-lifecycle/hooks/types.d.ts +36 -5
- package/dist/lib/work-lifecycle/hooks/types.js +1 -1
- package/dist/lib/work-lifecycle/hooks/types.js.map +1 -1
- package/dist/lib/workspace-resolution.d.ts +73 -0
- package/dist/lib/workspace-resolution.js +188 -0
- package/dist/lib/workspace-resolution.js.map +1 -0
- package/oclif.manifest.json +2830 -2142
- package/package.json +1 -1
|
@@ -0,0 +1,166 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* prlt notify connect — Connect a notification provider.
|
|
3
|
+
*
|
|
4
|
+
* Configures a notification channel (Slack, Email, SMS, etc.)
|
|
5
|
+
* and stores it in the workspace database.
|
|
6
|
+
*
|
|
7
|
+
* Examples:
|
|
8
|
+
* prlt notify connect slack --webhook-url https://hooks.slack.com/...
|
|
9
|
+
* prlt notify connect email --provider sendgrid --api-key sk-... --from alerts@example.com --to team@example.com
|
|
10
|
+
* prlt notify connect sms --account-sid AC... --auth-token ... --from +1234567890 --to +0987654321
|
|
11
|
+
*/
|
|
12
|
+
import { Args, Flags } from '@oclif/core';
|
|
13
|
+
import { RuntimeCommand, machineOutputFlags } from '../../lib/runtime-command.js';
|
|
14
|
+
import { shouldOutputJson, outputSuccessAsJson, outputErrorAsJson, createMetadata, } from '../../lib/prompt-json.js';
|
|
15
|
+
import { styles } from '../../lib/styles.js';
|
|
16
|
+
import { NotificationStorage, NOTIFICATION_PROVIDER_TYPES } from '../../lib/notifications/index.js';
|
|
17
|
+
export default class NotifyConnect extends RuntimeCommand {
|
|
18
|
+
static description = 'Connect a notification provider (Slack, Email, SMS, etc.)';
|
|
19
|
+
static examples = [
|
|
20
|
+
'<%= config.bin %> notify connect slack --webhook-url https://hooks.slack.com/...',
|
|
21
|
+
'<%= config.bin %> notify connect email --provider sendgrid --api-key sk-... --from alerts@co.com --to team@co.com',
|
|
22
|
+
'<%= config.bin %> notify connect sms --account-sid AC... --auth-token ... --from +1234567890 --to +0987654321',
|
|
23
|
+
'<%= config.bin %> notify connect terminal',
|
|
24
|
+
'<%= config.bin %> notify connect slack --name my-slack --webhook-url https://...',
|
|
25
|
+
];
|
|
26
|
+
static args = {
|
|
27
|
+
type: Args.string({
|
|
28
|
+
description: 'Provider type',
|
|
29
|
+
required: true,
|
|
30
|
+
options: NOTIFICATION_PROVIDER_TYPES,
|
|
31
|
+
}),
|
|
32
|
+
};
|
|
33
|
+
static flags = {
|
|
34
|
+
...machineOutputFlags,
|
|
35
|
+
name: Flags.string({
|
|
36
|
+
description: 'Provider name (defaults to type)',
|
|
37
|
+
}),
|
|
38
|
+
// Slack
|
|
39
|
+
'webhook-url': Flags.string({
|
|
40
|
+
description: 'Slack webhook URL',
|
|
41
|
+
}),
|
|
42
|
+
channel: Flags.string({
|
|
43
|
+
description: 'Slack channel override',
|
|
44
|
+
}),
|
|
45
|
+
username: Flags.string({
|
|
46
|
+
description: 'Slack username override',
|
|
47
|
+
}),
|
|
48
|
+
// Email
|
|
49
|
+
provider: Flags.string({
|
|
50
|
+
description: 'Email provider (sendgrid or ses)',
|
|
51
|
+
options: ['sendgrid', 'ses'],
|
|
52
|
+
}),
|
|
53
|
+
'api-key': Flags.string({
|
|
54
|
+
description: 'API key for email/SMS provider',
|
|
55
|
+
}),
|
|
56
|
+
from: Flags.string({
|
|
57
|
+
description: 'Sender address (email or phone)',
|
|
58
|
+
}),
|
|
59
|
+
to: Flags.string({
|
|
60
|
+
description: 'Recipient(s), comma-separated',
|
|
61
|
+
multiple: true,
|
|
62
|
+
}),
|
|
63
|
+
// SMS
|
|
64
|
+
'account-sid': Flags.string({
|
|
65
|
+
description: 'Twilio account SID',
|
|
66
|
+
}),
|
|
67
|
+
'auth-token': Flags.string({
|
|
68
|
+
description: 'Twilio auth token',
|
|
69
|
+
}),
|
|
70
|
+
};
|
|
71
|
+
async execute() {
|
|
72
|
+
const { args, flags } = await this.parse(NotifyConnect);
|
|
73
|
+
const jsonMode = shouldOutputJson(flags);
|
|
74
|
+
const db = this.requireDB();
|
|
75
|
+
const providerType = args.type;
|
|
76
|
+
const providerName = flags.name || providerType;
|
|
77
|
+
// Build config based on type
|
|
78
|
+
let config;
|
|
79
|
+
switch (providerType) {
|
|
80
|
+
case 'slack': {
|
|
81
|
+
if (!flags['webhook-url']) {
|
|
82
|
+
if (jsonMode) {
|
|
83
|
+
outputErrorAsJson('MISSING_WEBHOOK_URL', 'Slack requires --webhook-url', createMetadata('notify connect', flags));
|
|
84
|
+
return;
|
|
85
|
+
}
|
|
86
|
+
this.error('Slack requires --webhook-url');
|
|
87
|
+
}
|
|
88
|
+
config = {
|
|
89
|
+
webhook_url: flags['webhook-url'],
|
|
90
|
+
...(flags.channel ? { channel: flags.channel } : {}),
|
|
91
|
+
...(flags.username ? { username: flags.username } : {}),
|
|
92
|
+
};
|
|
93
|
+
break;
|
|
94
|
+
}
|
|
95
|
+
case 'email': {
|
|
96
|
+
if (!flags['api-key'] || !flags.from || !flags.to?.length) {
|
|
97
|
+
if (jsonMode) {
|
|
98
|
+
outputErrorAsJson('MISSING_EMAIL_CONFIG', 'Email requires --api-key, --from, and --to', createMetadata('notify connect', flags));
|
|
99
|
+
return;
|
|
100
|
+
}
|
|
101
|
+
this.error('Email requires --api-key, --from, and --to');
|
|
102
|
+
}
|
|
103
|
+
config = {
|
|
104
|
+
provider: flags.provider || 'sendgrid',
|
|
105
|
+
api_key: flags['api-key'],
|
|
106
|
+
from: flags.from,
|
|
107
|
+
to: flags.to,
|
|
108
|
+
};
|
|
109
|
+
break;
|
|
110
|
+
}
|
|
111
|
+
case 'sms': {
|
|
112
|
+
if (!flags['account-sid'] || !flags['auth-token'] || !flags.from || !flags.to?.length) {
|
|
113
|
+
if (jsonMode) {
|
|
114
|
+
outputErrorAsJson('MISSING_SMS_CONFIG', 'SMS requires --account-sid, --auth-token, --from, and --to', createMetadata('notify connect', flags));
|
|
115
|
+
return;
|
|
116
|
+
}
|
|
117
|
+
this.error('SMS requires --account-sid, --auth-token, --from, and --to');
|
|
118
|
+
}
|
|
119
|
+
config = {
|
|
120
|
+
account_sid: flags['account-sid'],
|
|
121
|
+
auth_token: flags['auth-token'],
|
|
122
|
+
from: flags.from,
|
|
123
|
+
to: flags.to,
|
|
124
|
+
};
|
|
125
|
+
break;
|
|
126
|
+
}
|
|
127
|
+
case 'terminal': {
|
|
128
|
+
config = {};
|
|
129
|
+
break;
|
|
130
|
+
}
|
|
131
|
+
case 'browser_push': {
|
|
132
|
+
config = {};
|
|
133
|
+
break;
|
|
134
|
+
}
|
|
135
|
+
default: {
|
|
136
|
+
if (jsonMode) {
|
|
137
|
+
outputErrorAsJson('INVALID_TYPE', `Unknown provider type: ${providerType}`, createMetadata('notify connect', flags));
|
|
138
|
+
return;
|
|
139
|
+
}
|
|
140
|
+
this.error(`Unknown provider type: ${providerType}`);
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
const storage = new NotificationStorage(db);
|
|
144
|
+
// Check for existing provider with same name
|
|
145
|
+
const existing = storage.getProviderByName(providerName);
|
|
146
|
+
if (existing) {
|
|
147
|
+
// Update existing provider
|
|
148
|
+
storage.updateProvider(existing.id, { config, enabled: true });
|
|
149
|
+
if (jsonMode) {
|
|
150
|
+
outputSuccessAsJson({ provider: { ...existing, config, enabled: true }, updated: true }, createMetadata('notify connect', flags));
|
|
151
|
+
return;
|
|
152
|
+
}
|
|
153
|
+
this.log(styles.success(`Updated notification provider "${providerName}" (${providerType})`));
|
|
154
|
+
return;
|
|
155
|
+
}
|
|
156
|
+
// Create new provider
|
|
157
|
+
const provider = storage.createProvider({ type: providerType, name: providerName, config });
|
|
158
|
+
if (jsonMode) {
|
|
159
|
+
outputSuccessAsJson({ provider: { id: provider.id, type: provider.type, name: provider.name, enabled: provider.enabled }, created: true }, createMetadata('notify connect', flags));
|
|
160
|
+
return;
|
|
161
|
+
}
|
|
162
|
+
this.log(styles.success(`Connected notification provider "${providerName}" (${providerType})`));
|
|
163
|
+
this.log(styles.muted(` Test it with: prlt notify test ${providerName}`));
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
//# sourceMappingURL=connect.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"connect.js","sourceRoot":"","sources":["../../../src/commands/notify/connect.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* prlt notify disconnect — Remove a notification provider.
|
|
3
|
+
*/
|
|
4
|
+
import { RuntimeCommand } from '../../lib/runtime-command.js';
|
|
5
|
+
export default class NotifyDisconnect extends RuntimeCommand {
|
|
6
|
+
static description: string;
|
|
7
|
+
static examples: string[];
|
|
8
|
+
static args: {
|
|
9
|
+
name: import("@oclif/core/interfaces").Arg<string, Record<string, unknown>>;
|
|
10
|
+
};
|
|
11
|
+
static flags: {
|
|
12
|
+
json: import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
13
|
+
machine: import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
14
|
+
};
|
|
15
|
+
execute(): Promise<void>;
|
|
16
|
+
}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* prlt notify disconnect — Remove a notification provider.
|
|
3
|
+
*/
|
|
4
|
+
import { Args } from '@oclif/core';
|
|
5
|
+
import { RuntimeCommand, machineOutputFlags } from '../../lib/runtime-command.js';
|
|
6
|
+
import { shouldOutputJson, outputSuccessAsJson, outputErrorAsJson, createMetadata, } from '../../lib/prompt-json.js';
|
|
7
|
+
import { styles } from '../../lib/styles.js';
|
|
8
|
+
import { NotificationStorage } from '../../lib/notifications/index.js';
|
|
9
|
+
export default class NotifyDisconnect extends RuntimeCommand {
|
|
10
|
+
static description = 'Remove a notification provider';
|
|
11
|
+
static examples = [
|
|
12
|
+
'<%= config.bin %> notify disconnect slack',
|
|
13
|
+
'<%= config.bin %> notify disconnect my-slack',
|
|
14
|
+
];
|
|
15
|
+
static args = {
|
|
16
|
+
name: Args.string({
|
|
17
|
+
description: 'Provider name to disconnect',
|
|
18
|
+
required: true,
|
|
19
|
+
}),
|
|
20
|
+
};
|
|
21
|
+
static flags = {
|
|
22
|
+
...machineOutputFlags,
|
|
23
|
+
};
|
|
24
|
+
async execute() {
|
|
25
|
+
const { args, flags } = await this.parse(NotifyDisconnect);
|
|
26
|
+
const jsonMode = shouldOutputJson(flags);
|
|
27
|
+
const db = this.requireDB();
|
|
28
|
+
const storage = new NotificationStorage(db);
|
|
29
|
+
const provider = storage.getProviderByName(args.name);
|
|
30
|
+
if (!provider) {
|
|
31
|
+
if (jsonMode) {
|
|
32
|
+
outputErrorAsJson('PROVIDER_NOT_FOUND', `No provider named "${args.name}"`, createMetadata('notify disconnect', flags));
|
|
33
|
+
return;
|
|
34
|
+
}
|
|
35
|
+
this.error(`No provider named "${args.name}"`);
|
|
36
|
+
}
|
|
37
|
+
storage.deleteProvider(provider.id);
|
|
38
|
+
if (jsonMode) {
|
|
39
|
+
outputSuccessAsJson({ deleted: { id: provider.id, name: provider.name, type: provider.type } }, createMetadata('notify disconnect', flags));
|
|
40
|
+
return;
|
|
41
|
+
}
|
|
42
|
+
this.log(styles.success(`Disconnected notification provider "${provider.name}" (${provider.type})`));
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
//# sourceMappingURL=disconnect.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"disconnect.js","sourceRoot":"","sources":["../../../src/commands/notify/disconnect.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,IAAI,EAAE,MAAM,aAAa,CAAA;AAClC,OAAO,EAAE,cAAc,EAAE,kBAAkB,EAAE,MAAM,8BAA8B,CAAA;AACjF,OAAO,EACL,gBAAgB,EAChB,mBAAmB,EACnB,iBAAiB,EACjB,cAAc,GACf,MAAM,0BAA0B,CAAA;AACjC,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAA;AAC5C,OAAO,EAAE,mBAAmB,EAAE,MAAM,kCAAkC,CAAA;AAEtE,MAAM,CAAC,OAAO,OAAO,gBAAiB,SAAQ,cAAc;IAC1D,MAAM,CAAC,WAAW,GAAG,gCAAgC,CAAA;IAErD,MAAM,CAAC,QAAQ,GAAG;QAChB,2CAA2C;QAC3C,8CAA8C;KAC/C,CAAA;IAED,MAAM,CAAC,IAAI,GAAG;QACZ,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC;YAChB,WAAW,EAAE,6BAA6B;YAC1C,QAAQ,EAAE,IAAI;SACf,CAAC;KACH,CAAA;IAED,MAAM,CAAC,KAAK,GAAG;QACb,GAAG,kBAAkB;KACtB,CAAA;IAED,KAAK,CAAC,OAAO;QACX,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAA;QAC1D,MAAM,QAAQ,GAAG,gBAAgB,CAAC,KAAK,CAAC,CAAA;QACxC,MAAM,EAAE,GAAG,IAAI,CAAC,SAAS,EAAE,CAAA;QAC3B,MAAM,OAAO,GAAG,IAAI,mBAAmB,CAAC,EAAE,CAAC,CAAA;QAE3C,MAAM,QAAQ,GAAG,OAAO,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QACrD,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,IAAI,QAAQ,EAAE,CAAC;gBACb,iBAAiB,CAAC,oBAAoB,EAAE,sBAAsB,IAAI,CAAC,IAAI,GAAG,EAAE,cAAc,CAAC,mBAAmB,EAAE,KAAK,CAAC,CAAC,CAAA;gBACvH,OAAM;YACR,CAAC;YACD,IAAI,CAAC,KAAK,CAAC,sBAAsB,IAAI,CAAC,IAAI,GAAG,CAAC,CAAA;QAChD,CAAC;QAED,OAAO,CAAC,cAAc,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAA;QAEnC,IAAI,QAAQ,EAAE,CAAC;YACb,mBAAmB,CACjB,EAAE,OAAO,EAAE,EAAE,EAAE,EAAE,QAAQ,CAAC,EAAE,EAAE,IAAI,EAAE,QAAQ,CAAC,IAAI,EAAE,IAAI,EAAE,QAAQ,CAAC,IAAI,EAAE,EAAE,EAC1E,cAAc,CAAC,mBAAmB,EAAE,KAAK,CAAC,CAC3C,CAAA;YACD,OAAM;QACR,CAAC;QAED,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,uCAAuC,QAAQ,CAAC,IAAI,MAAM,QAAQ,CAAC,IAAI,GAAG,CAAC,CAAC,CAAA;IACtG,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* prlt notify list — List configured notification providers and rules.
|
|
3
|
+
*/
|
|
4
|
+
import { RuntimeCommand } from '../../lib/runtime-command.js';
|
|
5
|
+
export default class NotifyList extends RuntimeCommand {
|
|
6
|
+
static description: string;
|
|
7
|
+
static examples: string[];
|
|
8
|
+
static flags: {
|
|
9
|
+
type: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
10
|
+
rules: import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
11
|
+
json: import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
12
|
+
machine: import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
13
|
+
};
|
|
14
|
+
execute(): Promise<void>;
|
|
15
|
+
}
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* prlt notify list — List configured notification providers and rules.
|
|
3
|
+
*/
|
|
4
|
+
import { Flags } from '@oclif/core';
|
|
5
|
+
import { RuntimeCommand, machineOutputFlags } from '../../lib/runtime-command.js';
|
|
6
|
+
import { shouldOutputJson, outputSuccessAsJson, createMetadata, } from '../../lib/prompt-json.js';
|
|
7
|
+
import { styles } from '../../lib/styles.js';
|
|
8
|
+
import { NotificationStorage } from '../../lib/notifications/index.js';
|
|
9
|
+
export default class NotifyList extends RuntimeCommand {
|
|
10
|
+
static description = 'List configured notification providers and rules';
|
|
11
|
+
static examples = [
|
|
12
|
+
'<%= config.bin %> notify list',
|
|
13
|
+
'<%= config.bin %> notify list --rules',
|
|
14
|
+
'<%= config.bin %> notify list --type slack',
|
|
15
|
+
];
|
|
16
|
+
static flags = {
|
|
17
|
+
...machineOutputFlags,
|
|
18
|
+
type: Flags.string({
|
|
19
|
+
description: 'Filter providers by type',
|
|
20
|
+
options: ['slack', 'email', 'sms', 'terminal', 'browser_push'],
|
|
21
|
+
}),
|
|
22
|
+
rules: Flags.boolean({
|
|
23
|
+
description: 'Also show notification rules',
|
|
24
|
+
default: false,
|
|
25
|
+
}),
|
|
26
|
+
};
|
|
27
|
+
async execute() {
|
|
28
|
+
const { flags } = await this.parse(NotifyList);
|
|
29
|
+
const jsonMode = shouldOutputJson(flags);
|
|
30
|
+
const db = this.requireDB();
|
|
31
|
+
const storage = new NotificationStorage(db);
|
|
32
|
+
const providers = storage.listProviders({
|
|
33
|
+
type: flags.type,
|
|
34
|
+
});
|
|
35
|
+
const rules = flags.rules ? storage.listRules() : [];
|
|
36
|
+
if (jsonMode) {
|
|
37
|
+
outputSuccessAsJson({
|
|
38
|
+
providers: providers.map(p => ({
|
|
39
|
+
id: p.id,
|
|
40
|
+
type: p.type,
|
|
41
|
+
name: p.name,
|
|
42
|
+
enabled: p.enabled,
|
|
43
|
+
createdAt: p.createdAt,
|
|
44
|
+
})),
|
|
45
|
+
...(flags.rules ? {
|
|
46
|
+
rules: rules.map(r => ({
|
|
47
|
+
id: r.id,
|
|
48
|
+
event: r.event,
|
|
49
|
+
providerId: r.providerId,
|
|
50
|
+
priority: r.priority,
|
|
51
|
+
escalationDelaySeconds: r.escalationDelaySeconds,
|
|
52
|
+
escalationGroup: r.escalationGroup,
|
|
53
|
+
enabled: r.enabled,
|
|
54
|
+
})),
|
|
55
|
+
} : {}),
|
|
56
|
+
count: providers.length,
|
|
57
|
+
}, createMetadata('notify list', flags));
|
|
58
|
+
return;
|
|
59
|
+
}
|
|
60
|
+
if (providers.length === 0) {
|
|
61
|
+
this.log(styles.info('No notification providers configured.'));
|
|
62
|
+
this.log(styles.muted(' Connect one with: prlt notify connect slack --webhook-url ...'));
|
|
63
|
+
return;
|
|
64
|
+
}
|
|
65
|
+
this.log(styles.title('Notification Providers'));
|
|
66
|
+
this.log('');
|
|
67
|
+
for (const provider of providers) {
|
|
68
|
+
const status = provider.enabled ? styles.success('enabled') : styles.muted('disabled');
|
|
69
|
+
this.log(` ${styles.emphasis(provider.name)} ${styles.muted(`(${provider.type})`)} ${status}`);
|
|
70
|
+
}
|
|
71
|
+
if (flags.rules && rules.length > 0) {
|
|
72
|
+
this.log('');
|
|
73
|
+
this.log(styles.title('Notification Rules'));
|
|
74
|
+
this.log('');
|
|
75
|
+
// Group by event
|
|
76
|
+
const grouped = {};
|
|
77
|
+
for (const rule of rules) {
|
|
78
|
+
if (!grouped[rule.event])
|
|
79
|
+
grouped[rule.event] = [];
|
|
80
|
+
grouped[rule.event].push(rule);
|
|
81
|
+
}
|
|
82
|
+
for (const [event, eventRules] of Object.entries(grouped)) {
|
|
83
|
+
this.log(` ${styles.emphasis(event)}`);
|
|
84
|
+
for (const rule of eventRules) {
|
|
85
|
+
const provider = providers.find(p => p.id === rule.providerId);
|
|
86
|
+
const providerLabel = provider ? `${provider.name} (${provider.type})` : rule.providerId;
|
|
87
|
+
const delay = rule.escalationDelaySeconds
|
|
88
|
+
? styles.muted(` after ${rule.escalationDelaySeconds}s`)
|
|
89
|
+
: '';
|
|
90
|
+
const group = rule.escalationGroup
|
|
91
|
+
? styles.muted(` [escalation: ${rule.escalationGroup}]`)
|
|
92
|
+
: '';
|
|
93
|
+
this.log(` -> ${styles.code(providerLabel)}${delay}${group}`);
|
|
94
|
+
}
|
|
95
|
+
this.log('');
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
this.log(styles.muted(` ${providers.length} provider${providers.length === 1 ? '' : 's'} configured`));
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
//# sourceMappingURL=list.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"list.js","sourceRoot":"","sources":["../../../src/commands/notify/list.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* prlt notify rules add — Add a notification rule mapping an event to a provider.
|
|
3
|
+
*
|
|
4
|
+
* Examples:
|
|
5
|
+
* prlt notify rules add on_agent_died --provider slack
|
|
6
|
+
* prlt notify rules add on_ci_failed --provider email
|
|
7
|
+
* prlt notify rules add on_human_approval_needed --provider slack --escalation-group approval --delay 0
|
|
8
|
+
* prlt notify rules add on_human_approval_needed --provider sms --escalation-group approval --delay 600
|
|
9
|
+
*/
|
|
10
|
+
import { RuntimeCommand } from '../../../lib/runtime-command.js';
|
|
11
|
+
export default class NotifyRulesAdd extends RuntimeCommand {
|
|
12
|
+
static description: string;
|
|
13
|
+
static examples: string[];
|
|
14
|
+
static args: {
|
|
15
|
+
event: import("@oclif/core/interfaces").Arg<string, Record<string, unknown>>;
|
|
16
|
+
};
|
|
17
|
+
static flags: {
|
|
18
|
+
provider: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
|
|
19
|
+
priority: import("@oclif/core/interfaces").OptionFlag<number, import("@oclif/core/interfaces").CustomOptions>;
|
|
20
|
+
delay: import("@oclif/core/interfaces").OptionFlag<number | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
21
|
+
'escalation-group': import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
22
|
+
json: import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
23
|
+
machine: import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
24
|
+
};
|
|
25
|
+
execute(): Promise<void>;
|
|
26
|
+
}
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* prlt notify rules add — Add a notification rule mapping an event to a provider.
|
|
3
|
+
*
|
|
4
|
+
* Examples:
|
|
5
|
+
* prlt notify rules add on_agent_died --provider slack
|
|
6
|
+
* prlt notify rules add on_ci_failed --provider email
|
|
7
|
+
* prlt notify rules add on_human_approval_needed --provider slack --escalation-group approval --delay 0
|
|
8
|
+
* prlt notify rules add on_human_approval_needed --provider sms --escalation-group approval --delay 600
|
|
9
|
+
*/
|
|
10
|
+
import { Args, Flags } from '@oclif/core';
|
|
11
|
+
import { RuntimeCommand, machineOutputFlags } from '../../../lib/runtime-command.js';
|
|
12
|
+
import { shouldOutputJson, outputSuccessAsJson, outputErrorAsJson, createMetadata, } from '../../../lib/prompt-json.js';
|
|
13
|
+
import { styles } from '../../../lib/styles.js';
|
|
14
|
+
import { NotificationStorage } from '../../../lib/notifications/index.js';
|
|
15
|
+
import { ORCHESTRATE_EVENTS } from '../../../lib/orchestrate/types.js';
|
|
16
|
+
export default class NotifyRulesAdd extends RuntimeCommand {
|
|
17
|
+
static description = 'Add a notification rule for an event';
|
|
18
|
+
static examples = [
|
|
19
|
+
'<%= config.bin %> notify rules add on_agent_died --provider slack',
|
|
20
|
+
'<%= config.bin %> notify rules add on_ci_failed --provider email --priority 1',
|
|
21
|
+
'<%= config.bin %> notify rules add on_agent_died --provider sms --escalation-group agent-down --delay 600',
|
|
22
|
+
];
|
|
23
|
+
static args = {
|
|
24
|
+
event: Args.string({
|
|
25
|
+
description: 'Event to trigger notification',
|
|
26
|
+
required: true,
|
|
27
|
+
}),
|
|
28
|
+
};
|
|
29
|
+
static flags = {
|
|
30
|
+
...machineOutputFlags,
|
|
31
|
+
provider: Flags.string({
|
|
32
|
+
description: 'Provider name to notify',
|
|
33
|
+
required: true,
|
|
34
|
+
}),
|
|
35
|
+
priority: Flags.integer({
|
|
36
|
+
description: 'Priority (lower = higher priority)',
|
|
37
|
+
default: 0,
|
|
38
|
+
}),
|
|
39
|
+
delay: Flags.integer({
|
|
40
|
+
description: 'Escalation delay in seconds (0 = immediate)',
|
|
41
|
+
}),
|
|
42
|
+
'escalation-group': Flags.string({
|
|
43
|
+
description: 'Escalation group name (rules in same group escalate sequentially)',
|
|
44
|
+
}),
|
|
45
|
+
};
|
|
46
|
+
async execute() {
|
|
47
|
+
const { args, flags } = await this.parse(NotifyRulesAdd);
|
|
48
|
+
const jsonMode = shouldOutputJson(flags);
|
|
49
|
+
const db = this.requireDB();
|
|
50
|
+
const storage = new NotificationStorage(db);
|
|
51
|
+
// Validate event name
|
|
52
|
+
const validEvents = ORCHESTRATE_EVENTS;
|
|
53
|
+
if (!validEvents.includes(args.event)) {
|
|
54
|
+
if (jsonMode) {
|
|
55
|
+
outputErrorAsJson('INVALID_EVENT', `Unknown event: ${args.event}. Valid events: ${validEvents.join(', ')}`, createMetadata('notify rules add', flags));
|
|
56
|
+
return;
|
|
57
|
+
}
|
|
58
|
+
this.error(`Unknown event: ${args.event}.\nValid events: ${validEvents.join(', ')}`);
|
|
59
|
+
}
|
|
60
|
+
// Resolve provider
|
|
61
|
+
const provider = storage.getProviderByName(flags.provider);
|
|
62
|
+
if (!provider) {
|
|
63
|
+
if (jsonMode) {
|
|
64
|
+
outputErrorAsJson('PROVIDER_NOT_FOUND', `No provider named "${flags.provider}"`, createMetadata('notify rules add', flags));
|
|
65
|
+
return;
|
|
66
|
+
}
|
|
67
|
+
this.error(`No provider named "${flags.provider}". Run "prlt notify list" to see configured providers.`);
|
|
68
|
+
}
|
|
69
|
+
const rule = storage.createRule({
|
|
70
|
+
event: args.event,
|
|
71
|
+
providerId: provider.id,
|
|
72
|
+
priority: flags.priority,
|
|
73
|
+
escalationDelaySeconds: flags.delay ?? null,
|
|
74
|
+
escalationGroup: flags['escalation-group'] ?? null,
|
|
75
|
+
});
|
|
76
|
+
if (jsonMode) {
|
|
77
|
+
outputSuccessAsJson({
|
|
78
|
+
rule: {
|
|
79
|
+
id: rule.id,
|
|
80
|
+
event: rule.event,
|
|
81
|
+
providerId: rule.providerId,
|
|
82
|
+
providerName: provider.name,
|
|
83
|
+
priority: rule.priority,
|
|
84
|
+
escalationDelaySeconds: rule.escalationDelaySeconds,
|
|
85
|
+
escalationGroup: rule.escalationGroup,
|
|
86
|
+
},
|
|
87
|
+
}, createMetadata('notify rules add', flags));
|
|
88
|
+
return;
|
|
89
|
+
}
|
|
90
|
+
const delayStr = rule.escalationDelaySeconds !== null ? ` (delay: ${rule.escalationDelaySeconds}s)` : '';
|
|
91
|
+
const groupStr = rule.escalationGroup ? ` [group: ${rule.escalationGroup}]` : '';
|
|
92
|
+
this.log(styles.success(`Rule added: ${args.event} -> ${provider.name} (${provider.type})${delayStr}${groupStr}`));
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
//# sourceMappingURL=add.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"add.js","sourceRoot":"","sources":["../../../../src/commands/notify/rules/add.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* prlt notify rules list — List notification rules.
|
|
3
|
+
*/
|
|
4
|
+
import { RuntimeCommand } from '../../../lib/runtime-command.js';
|
|
5
|
+
export default class NotifyRulesList extends RuntimeCommand {
|
|
6
|
+
static description: string;
|
|
7
|
+
static examples: string[];
|
|
8
|
+
static flags: {
|
|
9
|
+
event: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
10
|
+
json: import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
11
|
+
machine: import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
12
|
+
};
|
|
13
|
+
execute(): Promise<void>;
|
|
14
|
+
}
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* prlt notify rules list — List notification rules.
|
|
3
|
+
*/
|
|
4
|
+
import { Flags } from '@oclif/core';
|
|
5
|
+
import { RuntimeCommand, machineOutputFlags } from '../../../lib/runtime-command.js';
|
|
6
|
+
import { shouldOutputJson, outputSuccessAsJson, createMetadata, } from '../../../lib/prompt-json.js';
|
|
7
|
+
import { styles } from '../../../lib/styles.js';
|
|
8
|
+
import { NotificationStorage } from '../../../lib/notifications/index.js';
|
|
9
|
+
export default class NotifyRulesList extends RuntimeCommand {
|
|
10
|
+
static description = 'List notification rules';
|
|
11
|
+
static examples = [
|
|
12
|
+
'<%= config.bin %> notify rules list',
|
|
13
|
+
'<%= config.bin %> notify rules list --event on_agent_died',
|
|
14
|
+
];
|
|
15
|
+
static flags = {
|
|
16
|
+
...machineOutputFlags,
|
|
17
|
+
event: Flags.string({
|
|
18
|
+
description: 'Filter by event name',
|
|
19
|
+
}),
|
|
20
|
+
};
|
|
21
|
+
async execute() {
|
|
22
|
+
const { flags } = await this.parse(NotifyRulesList);
|
|
23
|
+
const jsonMode = shouldOutputJson(flags);
|
|
24
|
+
const db = this.requireDB();
|
|
25
|
+
const storage = new NotificationStorage(db);
|
|
26
|
+
const rules = storage.listRules({ event: flags.event });
|
|
27
|
+
const providers = storage.listProviders();
|
|
28
|
+
const providerMap = new Map(providers.map(p => [p.id, p]));
|
|
29
|
+
if (jsonMode) {
|
|
30
|
+
outputSuccessAsJson({
|
|
31
|
+
rules: rules.map(r => {
|
|
32
|
+
const p = providerMap.get(r.providerId);
|
|
33
|
+
return {
|
|
34
|
+
id: r.id,
|
|
35
|
+
event: r.event,
|
|
36
|
+
providerId: r.providerId,
|
|
37
|
+
providerName: p?.name,
|
|
38
|
+
providerType: p?.type,
|
|
39
|
+
priority: r.priority,
|
|
40
|
+
escalationDelaySeconds: r.escalationDelaySeconds,
|
|
41
|
+
escalationGroup: r.escalationGroup,
|
|
42
|
+
enabled: r.enabled,
|
|
43
|
+
};
|
|
44
|
+
}),
|
|
45
|
+
count: rules.length,
|
|
46
|
+
}, createMetadata('notify rules list', flags));
|
|
47
|
+
return;
|
|
48
|
+
}
|
|
49
|
+
if (rules.length === 0) {
|
|
50
|
+
this.log(styles.info('No notification rules configured.'));
|
|
51
|
+
this.log(styles.muted(' Add one with: prlt notify rules add on_agent_died --provider slack'));
|
|
52
|
+
return;
|
|
53
|
+
}
|
|
54
|
+
this.log(styles.title('Notification Rules'));
|
|
55
|
+
this.log('');
|
|
56
|
+
// Group by event
|
|
57
|
+
const grouped = {};
|
|
58
|
+
for (const rule of rules) {
|
|
59
|
+
if (!grouped[rule.event])
|
|
60
|
+
grouped[rule.event] = [];
|
|
61
|
+
grouped[rule.event].push(rule);
|
|
62
|
+
}
|
|
63
|
+
for (const [event, eventRules] of Object.entries(grouped)) {
|
|
64
|
+
this.log(` ${styles.emphasis(event)}`);
|
|
65
|
+
for (const rule of eventRules) {
|
|
66
|
+
const provider = providerMap.get(rule.providerId);
|
|
67
|
+
const providerLabel = provider ? `${provider.name} (${provider.type})` : rule.providerId;
|
|
68
|
+
const delay = rule.escalationDelaySeconds !== null
|
|
69
|
+
? styles.muted(` after ${rule.escalationDelaySeconds}s`)
|
|
70
|
+
: '';
|
|
71
|
+
const group = rule.escalationGroup
|
|
72
|
+
? styles.muted(` [${rule.escalationGroup}]`)
|
|
73
|
+
: '';
|
|
74
|
+
const status = rule.enabled ? '' : ` ${styles.muted('(disabled)')}`;
|
|
75
|
+
this.log(` -> ${styles.code(providerLabel)}${delay}${group}${status}`);
|
|
76
|
+
}
|
|
77
|
+
this.log('');
|
|
78
|
+
}
|
|
79
|
+
this.log(styles.muted(` ${rules.length} rule${rules.length === 1 ? '' : 's'} configured`));
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
//# sourceMappingURL=list.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"list.js","sourceRoot":"","sources":["../../../../src/commands/notify/rules/list.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* prlt notify rules remove — Remove a notification rule.
|
|
3
|
+
*/
|
|
4
|
+
import { RuntimeCommand } from '../../../lib/runtime-command.js';
|
|
5
|
+
export default class NotifyRulesRemove extends RuntimeCommand {
|
|
6
|
+
static description: string;
|
|
7
|
+
static examples: string[];
|
|
8
|
+
static args: {
|
|
9
|
+
id: import("@oclif/core/interfaces").Arg<string, Record<string, unknown>>;
|
|
10
|
+
};
|
|
11
|
+
static flags: {
|
|
12
|
+
json: import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
13
|
+
machine: import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
14
|
+
};
|
|
15
|
+
execute(): Promise<void>;
|
|
16
|
+
}
|