@bradygaster/squad-cli 0.9.3-insider.1 → 0.9.4
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 +33 -0
- package/dist/cli/commands/cast.d.ts.map +1 -1
- package/dist/cli/commands/cast.js +9 -2
- package/dist/cli/commands/cast.js.map +1 -1
- package/dist/cli/commands/externalize.d.ts +27 -0
- package/dist/cli/commands/externalize.d.ts.map +1 -0
- package/dist/cli/commands/externalize.js +209 -0
- package/dist/cli/commands/externalize.js.map +1 -0
- package/dist/cli/commands/loop.d.ts +6 -1
- package/dist/cli/commands/loop.d.ts.map +1 -1
- package/dist/cli/commands/loop.js +13 -13
- package/dist/cli/commands/loop.js.map +1 -1
- package/dist/cli/commands/migrate.js +2 -2
- package/dist/cli/commands/migrate.js.map +1 -1
- package/dist/cli/commands/plugin.d.ts.map +1 -1
- package/dist/cli/commands/plugin.js +2 -1
- package/dist/cli/commands/plugin.js.map +1 -1
- package/dist/cli/commands/rc.js +2 -2
- package/dist/cli/commands/rc.js.map +1 -1
- package/dist/cli/commands/skill.d.ts +31 -0
- package/dist/cli/commands/skill.d.ts.map +1 -0
- package/dist/cli/commands/skill.js +497 -0
- package/dist/cli/commands/skill.js.map +1 -0
- package/dist/cli/commands/start.d.ts.map +1 -1
- package/dist/cli/commands/start.js +31 -5
- package/dist/cli/commands/start.js.map +1 -1
- package/dist/cli/commands/watch/agent-spawn.d.ts +62 -0
- package/dist/cli/commands/watch/agent-spawn.d.ts.map +1 -0
- package/dist/cli/commands/watch/agent-spawn.js +127 -0
- package/dist/cli/commands/watch/agent-spawn.js.map +1 -0
- package/dist/cli/commands/watch/capabilities/decision-hygiene.js +3 -3
- package/dist/cli/commands/watch/capabilities/decision-hygiene.js.map +1 -1
- package/dist/cli/commands/watch/capabilities/execute.d.ts.map +1 -1
- package/dist/cli/commands/watch/capabilities/execute.js +15 -5
- package/dist/cli/commands/watch/capabilities/execute.js.map +1 -1
- package/dist/cli/commands/watch/capabilities/monitor-email.js +3 -3
- package/dist/cli/commands/watch/capabilities/monitor-email.js.map +1 -1
- package/dist/cli/commands/watch/capabilities/monitor-teams.js +3 -3
- package/dist/cli/commands/watch/capabilities/monitor-teams.js.map +1 -1
- package/dist/cli/commands/watch/capabilities/retro.js +3 -3
- package/dist/cli/commands/watch/capabilities/retro.js.map +1 -1
- package/dist/cli/commands/watch/capabilities/wave-dispatch.js +3 -3
- package/dist/cli/commands/watch/capabilities/wave-dispatch.js.map +1 -1
- package/dist/cli/commands/watch/config.d.ts +10 -8
- package/dist/cli/commands/watch/config.d.ts.map +1 -1
- package/dist/cli/commands/watch/config.js +27 -5
- package/dist/cli/commands/watch/config.js.map +1 -1
- package/dist/cli/commands/watch/external-loader.d.ts +14 -0
- package/dist/cli/commands/watch/external-loader.d.ts.map +1 -0
- package/dist/cli/commands/watch/external-loader.js +85 -0
- package/dist/cli/commands/watch/external-loader.js.map +1 -0
- package/dist/cli/commands/watch/health.js +10 -9
- package/dist/cli/commands/watch/health.js.map +1 -1
- package/dist/cli/commands/watch/index.d.ts +10 -0
- package/dist/cli/commands/watch/index.d.ts.map +1 -1
- package/dist/cli/commands/watch/index.js +53 -7
- package/dist/cli/commands/watch/index.js.map +1 -1
- package/dist/cli/commands/watch/pid-tracker.d.ts +35 -0
- package/dist/cli/commands/watch/pid-tracker.d.ts.map +1 -0
- package/dist/cli/commands/watch/pid-tracker.js +127 -0
- package/dist/cli/commands/watch/pid-tracker.js.map +1 -0
- package/dist/cli/commands/watch/types.d.ts +5 -0
- package/dist/cli/commands/watch/types.d.ts.map +1 -1
- package/dist/cli/core/email-scrub.js +2 -2
- package/dist/cli/core/email-scrub.js.map +1 -1
- package/dist/cli/core/gh-cli.d.ts +2 -1
- package/dist/cli/core/gh-cli.d.ts.map +1 -1
- package/dist/cli/core/gh-cli.js +3 -2
- package/dist/cli/core/gh-cli.js.map +1 -1
- package/dist/cli/core/init.d.ts.map +1 -1
- package/dist/cli/core/init.js +26 -31
- package/dist/cli/core/init.js.map +1 -1
- package/dist/cli/core/migrations.js +1 -1
- package/dist/cli/core/migrations.js.map +1 -1
- package/dist/cli/core/nap.js +2 -2
- package/dist/cli/core/nap.js.map +1 -1
- package/dist/cli/core/project-type.js +1 -1
- package/dist/cli/core/project-type.js.map +1 -1
- package/dist/cli/core/templates.d.ts.map +1 -1
- package/dist/cli/core/templates.js +48 -0
- package/dist/cli/core/templates.js.map +1 -1
- package/dist/cli/core/upgrade.d.ts +4 -2
- package/dist/cli/core/upgrade.d.ts.map +1 -1
- package/dist/cli/core/upgrade.js +46 -21
- package/dist/cli/core/upgrade.js.map +1 -1
- package/dist/cli/shell/index.d.ts.map +1 -1
- package/dist/cli/shell/index.js +22 -0
- package/dist/cli/shell/index.js.map +1 -1
- package/dist/cli/shell/session-store.js +2 -2
- package/dist/cli/shell/session-store.js.map +1 -1
- package/dist/cli-entry.js +101 -83
- package/dist/cli-entry.js.map +1 -1
- package/package.json +6 -2
- package/templates/casting-reference.md +104 -104
- package/templates/ceremonies.md +28 -28
- package/templates/fact-checker-charter.md +83 -0
- package/templates/mcp-config.md +0 -2
- package/templates/scribe-charter.md +1 -1
- package/templates/skills/external-comms/SKILL.md +329 -329
- package/templates/skills/gh-auth-isolation/SKILL.md +183 -183
- package/templates/skills/humanizer/SKILL.md +105 -105
- package/templates/skills/pr-review-response/SKILL.md +268 -0
- package/templates/skills/pr-screenshots/SKILL.md +149 -149
- package/templates/skills/versioning-policy/SKILL.md +119 -0
- package/templates/squad.agent.md.template +13 -6
- package/dist/cli/commands/watch/capabilities/budget-check.d.ts +0 -29
- package/dist/cli/commands/watch/capabilities/budget-check.d.ts.map +0 -1
- package/dist/cli/commands/watch/capabilities/budget-check.js +0 -38
- package/dist/cli/commands/watch/capabilities/budget-check.js.map +0 -1
- package/dist/cli/commands/watch/capabilities/circuit-breaker.d.ts +0 -52
- package/dist/cli/commands/watch/capabilities/circuit-breaker.d.ts.map +0 -1
- package/dist/cli/commands/watch/capabilities/circuit-breaker.js +0 -152
- package/dist/cli/commands/watch/capabilities/circuit-breaker.js.map +0 -1
- package/dist/cli/commands/watch/capabilities/health-check.d.ts +0 -29
- package/dist/cli/commands/watch/capabilities/health-check.d.ts.map +0 -1
- package/dist/cli/commands/watch/capabilities/health-check.js +0 -139
- package/dist/cli/commands/watch/capabilities/health-check.js.map +0 -1
- package/dist/cli/commands/watch/capabilities/heartbeat.d.ts +0 -48
- package/dist/cli/commands/watch/capabilities/heartbeat.d.ts.map +0 -1
- package/dist/cli/commands/watch/capabilities/heartbeat.js +0 -115
- package/dist/cli/commands/watch/capabilities/heartbeat.js.map +0 -1
- package/dist/cli/commands/watch/capabilities/lockfile.d.ts +0 -30
- package/dist/cli/commands/watch/capabilities/lockfile.d.ts.map +0 -1
- package/dist/cli/commands/watch/capabilities/lockfile.js +0 -100
- package/dist/cli/commands/watch/capabilities/lockfile.js.map +0 -1
- package/dist/cli/commands/watch/capabilities/machine-capabilities.d.ts +0 -30
- package/dist/cli/commands/watch/capabilities/machine-capabilities.d.ts.map +0 -1
- package/dist/cli/commands/watch/capabilities/machine-capabilities.js +0 -103
- package/dist/cli/commands/watch/capabilities/machine-capabilities.js.map +0 -1
- package/dist/cli/commands/watch/capabilities/post-failure.d.ts +0 -19
- package/dist/cli/commands/watch/capabilities/post-failure.d.ts.map +0 -1
- package/dist/cli/commands/watch/capabilities/post-failure.js +0 -58
- package/dist/cli/commands/watch/capabilities/post-failure.js.map +0 -1
- package/dist/cli/commands/watch/capabilities/priority.d.ts +0 -59
- package/dist/cli/commands/watch/capabilities/priority.d.ts.map +0 -1
- package/dist/cli/commands/watch/capabilities/priority.js +0 -101
- package/dist/cli/commands/watch/capabilities/priority.js.map +0 -1
- package/dist/cli/commands/watch/capabilities/rate-pool.d.ts +0 -67
- package/dist/cli/commands/watch/capabilities/rate-pool.d.ts.map +0 -1
- package/dist/cli/commands/watch/capabilities/rate-pool.js +0 -187
- package/dist/cli/commands/watch/capabilities/rate-pool.js.map +0 -1
- package/dist/cli/commands/watch/capabilities/stale-reclaim.d.ts +0 -23
- package/dist/cli/commands/watch/capabilities/stale-reclaim.d.ts.map +0 -1
- package/dist/cli/commands/watch/capabilities/stale-reclaim.js +0 -87
- package/dist/cli/commands/watch/capabilities/stale-reclaim.js.map +0 -1
- package/dist/cli/commands/watch/capabilities/webhook-alerts.d.ts +0 -29
- package/dist/cli/commands/watch/capabilities/webhook-alerts.d.ts.map +0 -1
- package/dist/cli/commands/watch/capabilities/webhook-alerts.js +0 -114
- package/dist/cli/commands/watch/capabilities/webhook-alerts.js.map +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"webhook-alerts.d.ts","sourceRoot":"","sources":["../../../../../src/cli/commands/watch/capabilities/webhook-alerts.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAGH,OAAO,KAAK,EAAE,eAAe,EAAE,YAAY,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAGpG,qBAAa,sBAAuB,YAAW,eAAe;IAC5D,QAAQ,CAAC,IAAI,oBAAoB;IACjC,QAAQ,CAAC,WAAW,6DAA6D;IACjF,QAAQ,CAAC,WAAW,EAAG,QAAQ,CAAU;IACzC,QAAQ,CAAC,QAAQ,UAAM;IACvB,QAAQ,CAAC,KAAK,EAAG,cAAc,CAAU;IAEnC,SAAS,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,eAAe,CAAC;IAS1D,OAAO,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,gBAAgB,CAAC;CAkFhE"}
|
|
@@ -1,114 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Webhook alerts capability — POST to a webhook URL on consecutive failures.
|
|
3
|
-
*
|
|
4
|
-
* Ported from ralph-watch.ps1 Teams alert logic in `Invoke-PostFailureRemediation`.
|
|
5
|
-
* Org-agnostic: works with any webhook that accepts JSON POST (Slack, Discord,
|
|
6
|
-
* Teams Incoming Webhook, generic HTTP endpoint).
|
|
7
|
-
*
|
|
8
|
-
* Runs in the `housekeeping` phase.
|
|
9
|
-
*
|
|
10
|
-
* Config (via squad.config.ts → watch.capabilities["webhook-alerts"]):
|
|
11
|
-
* webhookUrl – URL to POST to (also settable via --webhook-url flag)
|
|
12
|
-
* alertThreshold – consecutive failures before alerting (default: 3, also --alert-threshold)
|
|
13
|
-
* includeHostname – include machine hostname in payload (default: true)
|
|
14
|
-
*
|
|
15
|
-
* CLI flags:
|
|
16
|
-
* --webhook-url <url> Override webhook URL
|
|
17
|
-
* --alert-threshold <n> Override failure threshold
|
|
18
|
-
*/
|
|
19
|
-
import * as os from 'node:os';
|
|
20
|
-
import { getConsecutiveFailures } from './heartbeat.js';
|
|
21
|
-
export class WebhookAlertCapability {
|
|
22
|
-
name = 'webhook-alerts';
|
|
23
|
-
description = 'POST to webhook on consecutive failures above threshold';
|
|
24
|
-
configShape = 'object';
|
|
25
|
-
requires = [];
|
|
26
|
-
phase = 'housekeeping';
|
|
27
|
-
async preflight(context) {
|
|
28
|
-
const config = context.config;
|
|
29
|
-
const url = config['webhookUrl'];
|
|
30
|
-
if (!url) {
|
|
31
|
-
return { ok: false, reason: 'No webhookUrl configured (use --webhook-url or config)' };
|
|
32
|
-
}
|
|
33
|
-
return { ok: true };
|
|
34
|
-
}
|
|
35
|
-
async execute(context) {
|
|
36
|
-
const config = context.config;
|
|
37
|
-
const webhookUrl = config['webhookUrl'];
|
|
38
|
-
const threshold = config['alertThreshold'] ?? 3;
|
|
39
|
-
const includeHostname = config['includeHostname'] ?? true;
|
|
40
|
-
const failures = getConsecutiveFailures();
|
|
41
|
-
if (failures < threshold) {
|
|
42
|
-
return {
|
|
43
|
-
success: true,
|
|
44
|
-
summary: `${failures} failure(s) — below threshold (${threshold})`,
|
|
45
|
-
};
|
|
46
|
-
}
|
|
47
|
-
// Build generic JSON payload (works with Slack, Discord, Teams, etc.)
|
|
48
|
-
const hostname = includeHostname ? os.hostname() : 'unknown';
|
|
49
|
-
const payload = {
|
|
50
|
-
text: `🚨 Squad Watch Alert: ${failures} consecutive failures on ${hostname} (round ${context.round})`,
|
|
51
|
-
// Slack-compatible fields
|
|
52
|
-
blocks: [
|
|
53
|
-
{
|
|
54
|
-
type: 'section',
|
|
55
|
-
text: {
|
|
56
|
-
type: 'mrkdwn',
|
|
57
|
-
text: `*🚨 Squad Watch Alert*\n${failures} consecutive failures`,
|
|
58
|
-
},
|
|
59
|
-
},
|
|
60
|
-
{
|
|
61
|
-
type: 'section',
|
|
62
|
-
fields: [
|
|
63
|
-
{ type: 'mrkdwn', text: `*Machine:* ${hostname}` },
|
|
64
|
-
{ type: 'mrkdwn', text: `*Round:* ${context.round}` },
|
|
65
|
-
{ type: 'mrkdwn', text: `*Failures:* ${failures}` },
|
|
66
|
-
{ type: 'mrkdwn', text: `*Timestamp:* ${new Date().toISOString()}` },
|
|
67
|
-
],
|
|
68
|
-
},
|
|
69
|
-
],
|
|
70
|
-
// Teams-compatible fields (MessageCard format)
|
|
71
|
-
'@type': 'MessageCard',
|
|
72
|
-
'@context': 'https://schema.org/extensions',
|
|
73
|
-
summary: `Squad Watch: ${failures} consecutive failures on ${hostname}`,
|
|
74
|
-
themeColor: 'FF0000',
|
|
75
|
-
title: `🚨 Squad Watch Alert — ${hostname}`,
|
|
76
|
-
sections: [
|
|
77
|
-
{
|
|
78
|
-
activityTitle: `${failures} consecutive failures detected`,
|
|
79
|
-
facts: [
|
|
80
|
-
{ name: 'Machine', value: hostname },
|
|
81
|
-
{ name: 'Round', value: String(context.round) },
|
|
82
|
-
{ name: 'Consecutive Failures', value: String(failures) },
|
|
83
|
-
{ name: 'Timestamp', value: new Date().toISOString() },
|
|
84
|
-
],
|
|
85
|
-
},
|
|
86
|
-
],
|
|
87
|
-
};
|
|
88
|
-
try {
|
|
89
|
-
const response = await fetch(webhookUrl, {
|
|
90
|
-
method: 'POST',
|
|
91
|
-
headers: { 'Content-Type': 'application/json' },
|
|
92
|
-
body: JSON.stringify(payload),
|
|
93
|
-
signal: AbortSignal.timeout(10_000),
|
|
94
|
-
});
|
|
95
|
-
if (!response.ok) {
|
|
96
|
-
return {
|
|
97
|
-
success: false,
|
|
98
|
-
summary: `Webhook POST failed: ${response.status} ${response.statusText}`,
|
|
99
|
-
};
|
|
100
|
-
}
|
|
101
|
-
return {
|
|
102
|
-
success: true,
|
|
103
|
-
summary: `Alert sent (${failures} failures, threshold ${threshold})`,
|
|
104
|
-
};
|
|
105
|
-
}
|
|
106
|
-
catch (e) {
|
|
107
|
-
return {
|
|
108
|
-
success: false,
|
|
109
|
-
summary: `Webhook error: ${e.message}`,
|
|
110
|
-
};
|
|
111
|
-
}
|
|
112
|
-
}
|
|
113
|
-
}
|
|
114
|
-
//# sourceMappingURL=webhook-alerts.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"webhook-alerts.js","sourceRoot":"","sources":["../../../../../src/cli/commands/watch/capabilities/webhook-alerts.ts"],"names":[],"mappings":"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"}
|