@bradygaster/squad-cli 0.9.2-insider.6 → 0.9.4-insider.1
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/doctor.d.ts +2 -0
- package/dist/cli/commands/doctor.d.ts.map +1 -1
- package/dist/cli/commands/doctor.js +27 -5
- package/dist/cli/commands/doctor.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 +207 -0
- package/dist/cli/commands/externalize.js.map +1 -0
- package/dist/cli/commands/loop.d.ts +56 -0
- package/dist/cli/commands/loop.d.ts.map +1 -0
- package/dist/cli/commands/loop.js +352 -0
- package/dist/cli/commands/loop.js.map +1 -0
- package/dist/cli/commands/migrate.js +2 -2
- package/dist/cli/commands/migrate.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/watch/capabilities/cleanup.d.ts +18 -0
- package/dist/cli/commands/watch/capabilities/cleanup.d.ts.map +1 -0
- package/dist/cli/commands/watch/capabilities/cleanup.js +135 -0
- package/dist/cli/commands/watch/capabilities/cleanup.js.map +1 -0
- package/dist/cli/commands/watch/capabilities/execute.d.ts +15 -3
- package/dist/cli/commands/watch/capabilities/execute.d.ts.map +1 -1
- package/dist/cli/commands/watch/capabilities/execute.js +106 -86
- package/dist/cli/commands/watch/capabilities/execute.js.map +1 -1
- package/dist/cli/commands/watch/capabilities/fleet-dispatch.d.ts +20 -0
- package/dist/cli/commands/watch/capabilities/fleet-dispatch.d.ts.map +1 -0
- package/dist/cli/commands/watch/capabilities/fleet-dispatch.js +144 -0
- package/dist/cli/commands/watch/capabilities/fleet-dispatch.js.map +1 -0
- package/dist/cli/commands/watch/capabilities/index.d.ts +0 -2
- package/dist/cli/commands/watch/capabilities/index.d.ts.map +1 -1
- package/dist/cli/commands/watch/capabilities/index.js +4 -12
- package/dist/cli/commands/watch/capabilities/index.js.map +1 -1
- package/dist/cli/commands/watch/capabilities/self-pull.d.ts +4 -1
- package/dist/cli/commands/watch/capabilities/self-pull.d.ts.map +1 -1
- package/dist/cli/commands/watch/capabilities/self-pull.js +53 -5
- package/dist/cli/commands/watch/capabilities/self-pull.js.map +1 -1
- package/dist/cli/commands/watch/config.d.ts +10 -15
- package/dist/cli/commands/watch/config.d.ts.map +1 -1
- package/dist/cli/commands/watch/config.js +14 -47
- package/dist/cli/commands/watch/config.js.map +1 -1
- package/dist/cli/commands/watch/health.d.ts +41 -0
- package/dist/cli/commands/watch/health.d.ts.map +1 -0
- package/dist/cli/commands/watch/health.js +141 -0
- package/dist/cli/commands/watch/health.js.map +1 -0
- package/dist/cli/commands/watch/index.d.ts +9 -16
- package/dist/cli/commands/watch/index.d.ts.map +1 -1
- package/dist/cli/commands/watch/index.js +117 -63
- package/dist/cli/commands/watch/index.js.map +1 -1
- package/dist/cli/commands/watch/types.d.ts +2 -0
- package/dist/cli/commands/watch/types.d.ts.map +1 -1
- package/dist/cli/commands/watch/verbose.d.ts +12 -0
- package/dist/cli/commands/watch/verbose.d.ts.map +1 -0
- package/dist/cli/commands/watch/verbose.js +28 -0
- package/dist/cli/commands/watch/verbose.js.map +1 -0
- package/dist/cli/core/detect-squad-dir.d.ts.map +1 -1
- package/dist/cli/core/detect-squad-dir.js +9 -12
- package/dist/cli/core/detect-squad-dir.js.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/init.d.ts.map +1 -1
- package/dist/cli/core/init.js +4 -1
- 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 +20 -0
- package/dist/cli/core/upgrade.d.ts.map +1 -1
- package/dist/cli/core/upgrade.js +141 -15
- package/dist/cli/core/upgrade.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 +201 -89
- 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 -0
- package/templates/fact-checker-charter.md +83 -0
- package/templates/issue-lifecycle.md +2 -1
- package/templates/loop.md +46 -0
- package/templates/ralph-triage.js +3 -1
- package/templates/scribe-charter.md +20 -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 +9 -7
- package/templates/workflows/squad-triage.yml +4 -2
- package/templates/workflows/sync-squad-labels.yml +3 -1
- 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
|
@@ -2,8 +2,6 @@
|
|
|
2
2
|
* Capability barrel — registers all built-in capabilities.
|
|
3
3
|
*/
|
|
4
4
|
import { CapabilityRegistry } from '../registry.js';
|
|
5
|
-
export { RatePool } from './rate-pool.js';
|
|
6
|
-
export type { RatePoolConfig, PoolStatus } from './rate-pool.js';
|
|
7
5
|
/** Create a registry pre-loaded with all built-in capabilities. */
|
|
8
6
|
export declare function createDefaultRegistry(): CapabilityRegistry;
|
|
9
7
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/cli/commands/watch/capabilities/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/cli/commands/watch/capabilities/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AAapD,mEAAmE;AACnE,wBAAgB,qBAAqB,IAAI,kBAAkB,CAc1D"}
|
|
@@ -4,6 +4,7 @@
|
|
|
4
4
|
import { CapabilityRegistry } from '../registry.js';
|
|
5
5
|
import { SelfPullCapability } from './self-pull.js';
|
|
6
6
|
import { ExecuteCapability } from './execute.js';
|
|
7
|
+
import { FleetDispatchCapability } from './fleet-dispatch.js';
|
|
7
8
|
import { BoardCapability } from './board.js';
|
|
8
9
|
import { MonitorTeamsCapability } from './monitor-teams.js';
|
|
9
10
|
import { MonitorEmailCapability } from './monitor-email.js';
|
|
@@ -11,18 +12,13 @@ import { TwoPassCapability } from './two-pass.js';
|
|
|
11
12
|
import { WaveDispatchCapability } from './wave-dispatch.js';
|
|
12
13
|
import { RetroCapability } from './retro.js';
|
|
13
14
|
import { DecisionHygieneCapability } from './decision-hygiene.js';
|
|
14
|
-
|
|
15
|
-
import { HealthCheckCapability } from './health-check.js';
|
|
16
|
-
import { StaleReclaimCapability } from './stale-reclaim.js';
|
|
17
|
-
import { HeartbeatCapability } from './heartbeat.js';
|
|
18
|
-
import { WebhookAlertCapability } from './webhook-alerts.js';
|
|
19
|
-
// Re-export rate pool for direct consumption (utility, not a phase capability)
|
|
20
|
-
export { RatePool } from './rate-pool.js';
|
|
15
|
+
import { CleanupCapability } from './cleanup.js';
|
|
21
16
|
/** Create a registry pre-loaded with all built-in capabilities. */
|
|
22
17
|
export function createDefaultRegistry() {
|
|
23
18
|
const registry = new CapabilityRegistry();
|
|
24
19
|
registry.register(new SelfPullCapability());
|
|
25
20
|
registry.register(new ExecuteCapability());
|
|
21
|
+
registry.register(new FleetDispatchCapability());
|
|
26
22
|
registry.register(new BoardCapability());
|
|
27
23
|
registry.register(new MonitorTeamsCapability());
|
|
28
24
|
registry.register(new MonitorEmailCapability());
|
|
@@ -30,11 +26,7 @@ export function createDefaultRegistry() {
|
|
|
30
26
|
registry.register(new WaveDispatchCapability());
|
|
31
27
|
registry.register(new RetroCapability());
|
|
32
28
|
registry.register(new DecisionHygieneCapability());
|
|
33
|
-
|
|
34
|
-
registry.register(new HealthCheckCapability());
|
|
35
|
-
registry.register(new StaleReclaimCapability());
|
|
36
|
-
registry.register(new HeartbeatCapability());
|
|
37
|
-
registry.register(new WebhookAlertCapability());
|
|
29
|
+
registry.register(new CleanupCapability());
|
|
38
30
|
return registry;
|
|
39
31
|
}
|
|
40
32
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/cli/commands/watch/capabilities/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AACpD,OAAO,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AACpD,OAAO,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AACjD,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/cli/commands/watch/capabilities/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AACpD,OAAO,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AACpD,OAAO,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AACjD,OAAO,EAAE,uBAAuB,EAAE,MAAM,qBAAqB,CAAC;AAC9D,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAC7C,OAAO,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;AAC5D,OAAO,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;AAC5D,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAClD,OAAO,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;AAC5D,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAC7C,OAAO,EAAE,yBAAyB,EAAE,MAAM,uBAAuB,CAAC;AAClE,OAAO,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAEjD,mEAAmE;AACnE,MAAM,UAAU,qBAAqB;IACnC,MAAM,QAAQ,GAAG,IAAI,kBAAkB,EAAE,CAAC;IAC1C,QAAQ,CAAC,QAAQ,CAAC,IAAI,kBAAkB,EAAE,CAAC,CAAC;IAC5C,QAAQ,CAAC,QAAQ,CAAC,IAAI,iBAAiB,EAAE,CAAC,CAAC;IAC3C,QAAQ,CAAC,QAAQ,CAAC,IAAI,uBAAuB,EAAE,CAAC,CAAC;IACjD,QAAQ,CAAC,QAAQ,CAAC,IAAI,eAAe,EAAE,CAAC,CAAC;IACzC,QAAQ,CAAC,QAAQ,CAAC,IAAI,sBAAsB,EAAE,CAAC,CAAC;IAChD,QAAQ,CAAC,QAAQ,CAAC,IAAI,sBAAsB,EAAE,CAAC,CAAC;IAChD,QAAQ,CAAC,QAAQ,CAAC,IAAI,iBAAiB,EAAE,CAAC,CAAC;IAC3C,QAAQ,CAAC,QAAQ,CAAC,IAAI,sBAAsB,EAAE,CAAC,CAAC;IAChD,QAAQ,CAAC,QAAQ,CAAC,IAAI,eAAe,EAAE,CAAC,CAAC;IACzC,QAAQ,CAAC,QAAQ,CAAC,IAAI,yBAAyB,EAAE,CAAC,CAAC;IACnD,QAAQ,CAAC,QAAQ,CAAC,IAAI,iBAAiB,EAAE,CAAC,CAAC;IAC3C,OAAO,QAAQ,CAAC;AAClB,CAAC"}
|
|
@@ -1,5 +1,8 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* SelfPull capability — git fetch + pull --ff-only
|
|
2
|
+
* SelfPull capability — git stash + fetch + pull --ff-only + stash pop.
|
|
3
|
+
*
|
|
4
|
+
* Matches PS1 behavior: stashes local changes before pulling, pops after,
|
|
5
|
+
* and warns if watch source files changed (restart recommended).
|
|
3
6
|
*/
|
|
4
7
|
import type { WatchCapability, WatchContext, PreflightResult, CapabilityResult } from '../types.js';
|
|
5
8
|
export declare class SelfPullCapability implements WatchCapability {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"self-pull.d.ts","sourceRoot":"","sources":["../../../../../src/cli/commands/watch/capabilities/self-pull.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"self-pull.d.ts","sourceRoot":"","sources":["../../../../../src/cli/commands/watch/capabilities/self-pull.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,EAAE,eAAe,EAAE,YAAY,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAEpG,qBAAa,kBAAmB,YAAW,eAAe;IACxD,QAAQ,CAAC,IAAI,eAAe;IAC5B,QAAQ,CAAC,WAAW,6DAA6D;IACjF,QAAQ,CAAC,WAAW,EAAG,SAAS,CAAU;IAC1C,QAAQ,CAAC,QAAQ,WAAW;IAC5B,QAAQ,CAAC,KAAK,EAAG,UAAU,CAAU;IAE/B,SAAS,CAAC,QAAQ,EAAE,YAAY,GAAG,OAAO,CAAC,eAAe,CAAC;IAQ3D,OAAO,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,gBAAgB,CAAC;CAkEhE"}
|
|
@@ -1,7 +1,10 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* SelfPull capability — git fetch + pull --ff-only
|
|
2
|
+
* SelfPull capability — git stash + fetch + pull --ff-only + stash pop.
|
|
3
|
+
*
|
|
4
|
+
* Matches PS1 behavior: stashes local changes before pulling, pops after,
|
|
5
|
+
* and warns if watch source files changed (restart recommended).
|
|
3
6
|
*/
|
|
4
|
-
import { execFile } from 'node:child_process';
|
|
7
|
+
import { execFile, execFileSync } from 'node:child_process';
|
|
5
8
|
export class SelfPullCapability {
|
|
6
9
|
name = 'self-pull';
|
|
7
10
|
description = 'Git fetch/pull at round start to keep work-tree current';
|
|
@@ -16,14 +19,59 @@ export class SelfPullCapability {
|
|
|
16
19
|
});
|
|
17
20
|
}
|
|
18
21
|
async execute(context) {
|
|
22
|
+
const cwd = context.teamRoot;
|
|
19
23
|
try {
|
|
24
|
+
// Capture HEAD before pull for change detection
|
|
25
|
+
let headBefore = '';
|
|
26
|
+
try {
|
|
27
|
+
headBefore = execFileSync('git', ['rev-parse', 'HEAD'], { cwd, encoding: 'utf-8' }).trim();
|
|
28
|
+
}
|
|
29
|
+
catch { /* non-fatal */ }
|
|
30
|
+
// Stash if there are local changes
|
|
31
|
+
let didStash = false;
|
|
32
|
+
try {
|
|
33
|
+
const status = execFileSync('git', ['status', '--porcelain'], { cwd, encoding: 'utf-8' }).trim();
|
|
34
|
+
if (status.length > 0) {
|
|
35
|
+
execFileSync('git', ['stash', '--include-untracked'], { cwd, encoding: 'utf-8' });
|
|
36
|
+
didStash = true;
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
catch { /* non-fatal — proceed without stash */ }
|
|
40
|
+
// Fetch + pull
|
|
20
41
|
await new Promise((resolve, reject) => {
|
|
21
|
-
execFile('git', ['fetch', '--quiet'], { cwd
|
|
42
|
+
execFile('git', ['fetch', '--quiet'], { cwd }, (err) => err ? reject(err) : resolve());
|
|
22
43
|
});
|
|
23
44
|
await new Promise((resolve, reject) => {
|
|
24
|
-
execFile('git', ['pull', '--ff-only', '--quiet'], { cwd
|
|
45
|
+
execFile('git', ['pull', '--ff-only', '--quiet'], { cwd }, (err) => err ? reject(err) : resolve());
|
|
25
46
|
});
|
|
26
|
-
|
|
47
|
+
// Pop stash if we created one
|
|
48
|
+
if (didStash) {
|
|
49
|
+
try {
|
|
50
|
+
execFileSync('git', ['stash', 'pop'], { cwd, encoding: 'utf-8' });
|
|
51
|
+
}
|
|
52
|
+
catch {
|
|
53
|
+
console.log('⚠️ git stash pop failed (possible merge conflict) — changes remain in stash');
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
// Check if watch source files changed
|
|
57
|
+
let sourceChanged = false;
|
|
58
|
+
if (headBefore) {
|
|
59
|
+
try {
|
|
60
|
+
const headAfter = execFileSync('git', ['rev-parse', 'HEAD'], { cwd, encoding: 'utf-8' }).trim();
|
|
61
|
+
if (headBefore !== headAfter) {
|
|
62
|
+
const diff = execFileSync('git', ['diff', '--name-only', headBefore, headAfter, '--', 'packages/squad-cli/src/'], { cwd, encoding: 'utf-8' }).trim();
|
|
63
|
+
if (diff.length > 0) {
|
|
64
|
+
sourceChanged = true;
|
|
65
|
+
console.log('⚠️ Watch source changed — restart recommended for latest behavior');
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
catch { /* non-fatal */ }
|
|
70
|
+
}
|
|
71
|
+
return {
|
|
72
|
+
success: true,
|
|
73
|
+
summary: sourceChanged ? 'git pull ok (source changed — restart recommended)' : 'git pull ok',
|
|
74
|
+
};
|
|
27
75
|
}
|
|
28
76
|
catch {
|
|
29
77
|
return { success: true, summary: 'git pull skipped (not on tracking branch or conflicts)' };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"self-pull.js","sourceRoot":"","sources":["../../../../../src/cli/commands/watch/capabilities/self-pull.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"self-pull.js","sourceRoot":"","sources":["../../../../../src/cli/commands/watch/capabilities/self-pull.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,6 +3,8 @@
|
|
|
3
3
|
*
|
|
4
4
|
* Priority: CLI flag > .squad/config.json "watch" section > defaults.
|
|
5
5
|
*/
|
|
6
|
+
/** Dispatch strategy for issue execution. */
|
|
7
|
+
export type DispatchMode = 'task' | 'fleet' | 'hybrid';
|
|
6
8
|
/** Fully-resolved watch configuration. */
|
|
7
9
|
export interface WatchConfig {
|
|
8
10
|
interval: number;
|
|
@@ -12,23 +14,16 @@ export interface WatchConfig {
|
|
|
12
14
|
copilotFlags?: string;
|
|
13
15
|
/** Hidden — fully override the agent command. */
|
|
14
16
|
agentCmd?: string;
|
|
17
|
+
/** Dispatch mode: 'task' (default 1:1), 'fleet' (batch read-only), 'hybrid' (auto-classify). */
|
|
18
|
+
dispatchMode?: DispatchMode;
|
|
19
|
+
/** Optional path to a log file. When set, console output is tee'd to the file with timestamps. */
|
|
20
|
+
logFile?: string;
|
|
15
21
|
/** Per-capability config: `true` / `false` / object with sub-options. */
|
|
16
22
|
capabilities: Record<string, boolean | Record<string, unknown>>;
|
|
17
|
-
/**
|
|
18
|
-
|
|
19
|
-
/**
|
|
20
|
-
|
|
21
|
-
/** Max issues to execute per round (default: 5). */
|
|
22
|
-
maxBudget?: number;
|
|
23
|
-
/** Explicit machine capabilities list (e.g., ["gpu", "docker"]). */
|
|
24
|
-
machineCapabilities?: string[];
|
|
25
|
-
/** Cooperative rate pool settings for multi-instance coordination. */
|
|
26
|
-
ratePool?: {
|
|
27
|
-
/** Max API calls per interval window (default: 50). */
|
|
28
|
-
maxCallsPerInterval: number;
|
|
29
|
-
/** Interval window in seconds (default: 600). */
|
|
30
|
-
intervalSeconds: number;
|
|
31
|
-
};
|
|
23
|
+
/** Enable verbose diagnostic output for debugging. */
|
|
24
|
+
verbose?: boolean;
|
|
25
|
+
/** Preferred auth user for platform operations (e.g. gh auth switch --user). */
|
|
26
|
+
authUser?: string;
|
|
32
27
|
}
|
|
33
28
|
/**
|
|
34
29
|
* Load watch config from `.squad/config.json` then merge CLI overrides.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/watch/config.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAOH,0CAA0C;AAC1C,MAAM,WAAW,WAAW;IAC1B,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,OAAO,CAAC;IACjB,aAAa,EAAE,MAAM,CAAC;IACtB,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,iDAAiD;IACjD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/watch/config.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAOH,6CAA6C;AAC7C,MAAM,MAAM,YAAY,GAAG,MAAM,GAAG,OAAO,GAAG,QAAQ,CAAC;AAEvD,0CAA0C;AAC1C,MAAM,WAAW,WAAW;IAC1B,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,OAAO,CAAC;IACjB,aAAa,EAAE,MAAM,CAAC;IACtB,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,iDAAiD;IACjD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,gGAAgG;IAChG,YAAY,CAAC,EAAE,YAAY,CAAC;IAC5B,kGAAkG;IAClG,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,yEAAyE;IACzE,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IAChE,sDAAsD;IACtD,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,gFAAgF;IAChF,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAWD;;;;;GAKG;AACH,wBAAgB,eAAe,CAC7B,QAAQ,EAAE,MAAM,EAChB,YAAY,EAAE,OAAO,CAAC,WAAW,CAAC,GACjC,WAAW,CAmCb"}
|
|
@@ -11,13 +11,8 @@ const DEFAULTS = {
|
|
|
11
11
|
execute: false,
|
|
12
12
|
maxConcurrent: 1,
|
|
13
13
|
timeout: 30,
|
|
14
|
+
dispatchMode: undefined,
|
|
14
15
|
capabilities: {},
|
|
15
|
-
alertThreshold: 3,
|
|
16
|
-
maxBudget: 5,
|
|
17
|
-
ratePool: {
|
|
18
|
-
maxCallsPerInterval: 50,
|
|
19
|
-
intervalSeconds: 600,
|
|
20
|
-
},
|
|
21
16
|
};
|
|
22
17
|
/**
|
|
23
18
|
* Load watch config from `.squad/config.json` then merge CLI overrides.
|
|
@@ -48,32 +43,15 @@ export function loadWatchConfig(teamRoot, cliOverrides) {
|
|
|
48
43
|
timeout: cliOverrides.timeout ?? fileConfig.timeout ?? DEFAULTS.timeout,
|
|
49
44
|
copilotFlags: cliOverrides.copilotFlags ?? fileConfig.copilotFlags ?? DEFAULTS.copilotFlags,
|
|
50
45
|
agentCmd: cliOverrides.agentCmd ?? fileConfig.agentCmd ?? DEFAULTS.agentCmd,
|
|
46
|
+
dispatchMode: cliOverrides.dispatchMode ?? fileConfig.dispatchMode ?? DEFAULTS.dispatchMode,
|
|
47
|
+
logFile: cliOverrides.logFile ?? fileConfig.logFile ?? DEFAULTS.logFile,
|
|
51
48
|
capabilities: {
|
|
52
49
|
...DEFAULTS.capabilities,
|
|
53
50
|
...(fileConfig.capabilities ?? {}),
|
|
54
51
|
...(cliOverrides.capabilities ?? {}),
|
|
55
52
|
},
|
|
56
|
-
|
|
57
|
-
webhookUrl: cliOverrides.webhookUrl ?? fileConfig.webhookUrl ?? DEFAULTS.webhookUrl,
|
|
58
|
-
alertThreshold: cliOverrides.alertThreshold ?? fileConfig.alertThreshold ?? DEFAULTS.alertThreshold,
|
|
59
|
-
maxBudget: cliOverrides.maxBudget ?? fileConfig.maxBudget ?? DEFAULTS.maxBudget,
|
|
60
|
-
machineCapabilities: cliOverrides.machineCapabilities ?? fileConfig.machineCapabilities ?? DEFAULTS.machineCapabilities,
|
|
61
|
-
ratePool: {
|
|
62
|
-
maxCallsPerInterval: cliOverrides.ratePool?.maxCallsPerInterval
|
|
63
|
-
?? fileConfig.ratePool?.maxCallsPerInterval
|
|
64
|
-
?? DEFAULTS.ratePool.maxCallsPerInterval,
|
|
65
|
-
intervalSeconds: cliOverrides.ratePool?.intervalSeconds
|
|
66
|
-
?? fileConfig.ratePool?.intervalSeconds
|
|
67
|
-
?? DEFAULTS.ratePool.intervalSeconds,
|
|
68
|
-
},
|
|
53
|
+
verbose: cliOverrides.verbose ?? fileConfig.verbose ?? false,
|
|
69
54
|
};
|
|
70
|
-
// Wire webhook-alerts capability config from top-level flags
|
|
71
|
-
if (merged.webhookUrl && !merged.capabilities['webhook-alerts']) {
|
|
72
|
-
merged.capabilities['webhook-alerts'] = {
|
|
73
|
-
webhookUrl: merged.webhookUrl,
|
|
74
|
-
alertThreshold: merged.alertThreshold ?? 3,
|
|
75
|
-
};
|
|
76
|
-
}
|
|
77
55
|
return merged;
|
|
78
56
|
}
|
|
79
57
|
/** Normalise the raw JSON "watch" object into a typed Partial<WatchConfig>. */
|
|
@@ -91,30 +69,19 @@ function normalizeFileConfig(raw) {
|
|
|
91
69
|
result.copilotFlags = raw['copilotFlags'];
|
|
92
70
|
if (typeof raw['agentCmd'] === 'string')
|
|
93
71
|
result.agentCmd = raw['agentCmd'];
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
if (Array.isArray(raw['machineCapabilities'])) {
|
|
102
|
-
result.machineCapabilities = raw['machineCapabilities'];
|
|
103
|
-
}
|
|
104
|
-
// Rate pool sub-object
|
|
105
|
-
if (typeof raw['ratePool'] === 'object' && raw['ratePool'] !== null && !Array.isArray(raw['ratePool'])) {
|
|
106
|
-
const rp = raw['ratePool'];
|
|
107
|
-
result.ratePool = {
|
|
108
|
-
maxCallsPerInterval: typeof rp['maxCallsPerInterval'] === 'number' ? rp['maxCallsPerInterval'] : 50,
|
|
109
|
-
intervalSeconds: typeof rp['intervalSeconds'] === 'number' ? rp['intervalSeconds'] : 600,
|
|
110
|
-
};
|
|
72
|
+
if (typeof raw['verbose'] === 'boolean')
|
|
73
|
+
result.verbose = raw['verbose'];
|
|
74
|
+
if (typeof raw['dispatchMode'] === 'string') {
|
|
75
|
+
const mode = raw['dispatchMode'];
|
|
76
|
+
if (mode === 'fleet' || mode === 'task' || mode === 'hybrid') {
|
|
77
|
+
result.dispatchMode = mode;
|
|
78
|
+
}
|
|
111
79
|
}
|
|
80
|
+
if (typeof raw['logFile'] === 'string')
|
|
81
|
+
result.logFile = raw['logFile'];
|
|
112
82
|
// Everything else is a capability key
|
|
113
83
|
const caps = {};
|
|
114
|
-
const reserved = new Set([
|
|
115
|
-
'interval', 'execute', 'maxConcurrent', 'timeout', 'copilotFlags', 'agentCmd',
|
|
116
|
-
'webhookUrl', 'alertThreshold', 'maxBudget', 'machineCapabilities', 'ratePool',
|
|
117
|
-
]);
|
|
84
|
+
const reserved = new Set(['interval', 'execute', 'maxConcurrent', 'timeout', 'copilotFlags', 'agentCmd', 'verbose', 'dispatchMode', 'logFile']);
|
|
118
85
|
for (const [key, value] of Object.entries(raw)) {
|
|
119
86
|
if (reserved.has(key))
|
|
120
87
|
continue;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../../../src/cli/commands/watch/config.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAE3D,MAAM,OAAO,GAAG,IAAI,iBAAiB,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../../../src/cli/commands/watch/config.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Watch health check — reports status of a running watch instance.
|
|
3
|
+
*
|
|
4
|
+
* Reads the PID file (stored in OS temp dir) written at watch startup to
|
|
5
|
+
* determine whether a watch process is alive, its uptime, auth account, and
|
|
6
|
+
* whether auth has drifted since launch.
|
|
7
|
+
*/
|
|
8
|
+
/** Shape of the PID file written by runWatch at startup. */
|
|
9
|
+
export interface WatchPidInfo {
|
|
10
|
+
pid: number;
|
|
11
|
+
startedAt: string;
|
|
12
|
+
user: string;
|
|
13
|
+
interval: number;
|
|
14
|
+
capabilities: string[];
|
|
15
|
+
repo: string;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Path to the PID file in the OS temp directory.
|
|
19
|
+
* Uses an MD5 hash of the repo path so different clones/worktrees get
|
|
20
|
+
* unique PID files without polluting the repo (avoids accidental commits).
|
|
21
|
+
*/
|
|
22
|
+
export declare function getPidPath(teamRoot: string): string;
|
|
23
|
+
/**
|
|
24
|
+
* Write the PID file at watch startup.
|
|
25
|
+
* The caller is responsible for registering exit handlers to clean up.
|
|
26
|
+
*/
|
|
27
|
+
export declare function writePidFile(teamRoot: string, info: WatchPidInfo): void;
|
|
28
|
+
/** Remove the PID file (best-effort, swallows errors). */
|
|
29
|
+
export declare function removePidFile(teamRoot: string): void;
|
|
30
|
+
/**
|
|
31
|
+
* Check if a process with the given PID is still alive.
|
|
32
|
+
* Uses `process.kill(pid, 0)` — signal 0 tests existence without killing.
|
|
33
|
+
*/
|
|
34
|
+
export declare function isProcessAlive(pid: number): boolean;
|
|
35
|
+
/**
|
|
36
|
+
* Run the watch health check and return a formatted status string.
|
|
37
|
+
*
|
|
38
|
+
* @param teamRoot - The repository root (directory containing `.squad/`).
|
|
39
|
+
*/
|
|
40
|
+
export declare function getWatchHealth(teamRoot: string): string;
|
|
41
|
+
//# sourceMappingURL=health.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"health.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/watch/health.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAQH,4DAA4D;AAC5D,MAAM,WAAW,YAAY;IAC3B,GAAG,EAAE,MAAM,CAAC;IACZ,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,IAAI,EAAE,MAAM,CAAC;CACd;AAED;;;;GAIG;AACH,wBAAgB,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAGnD;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,YAAY,GAAG,IAAI,CAGvE;AAED,0DAA0D;AAC1D,wBAAgB,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAEpD;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAWnD;AAgCD;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAwDvD"}
|
|
@@ -0,0 +1,141 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Watch health check — reports status of a running watch instance.
|
|
3
|
+
*
|
|
4
|
+
* Reads the PID file (stored in OS temp dir) written at watch startup to
|
|
5
|
+
* determine whether a watch process is alive, its uptime, auth account, and
|
|
6
|
+
* whether auth has drifted since launch.
|
|
7
|
+
*/
|
|
8
|
+
import fs from 'node:fs';
|
|
9
|
+
import path from 'node:path';
|
|
10
|
+
import os from 'node:os';
|
|
11
|
+
import crypto from 'node:crypto';
|
|
12
|
+
import { execFileSync } from 'node:child_process';
|
|
13
|
+
/**
|
|
14
|
+
* Path to the PID file in the OS temp directory.
|
|
15
|
+
* Uses an MD5 hash of the repo path so different clones/worktrees get
|
|
16
|
+
* unique PID files without polluting the repo (avoids accidental commits).
|
|
17
|
+
*/
|
|
18
|
+
export function getPidPath(teamRoot) {
|
|
19
|
+
const hash = crypto.createHash('md5').update(teamRoot).digest('hex').slice(0, 12);
|
|
20
|
+
return path.join(os.tmpdir(), `squad-watch-${hash}.json`);
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Write the PID file at watch startup.
|
|
24
|
+
* The caller is responsible for registering exit handlers to clean up.
|
|
25
|
+
*/
|
|
26
|
+
export function writePidFile(teamRoot, info) {
|
|
27
|
+
const pidPath = getPidPath(teamRoot);
|
|
28
|
+
fs.writeFileSync(pidPath, JSON.stringify(info, null, 2));
|
|
29
|
+
}
|
|
30
|
+
/** Remove the PID file (best-effort, swallows errors). */
|
|
31
|
+
export function removePidFile(teamRoot) {
|
|
32
|
+
try {
|
|
33
|
+
fs.unlinkSync(getPidPath(teamRoot));
|
|
34
|
+
}
|
|
35
|
+
catch { /* already gone */ }
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Check if a process with the given PID is still alive.
|
|
39
|
+
* Uses `process.kill(pid, 0)` — signal 0 tests existence without killing.
|
|
40
|
+
*/
|
|
41
|
+
export function isProcessAlive(pid) {
|
|
42
|
+
try {
|
|
43
|
+
process.kill(pid, 0);
|
|
44
|
+
return true;
|
|
45
|
+
}
|
|
46
|
+
catch (e) {
|
|
47
|
+
// EPERM means the process exists but we lack permission to signal it
|
|
48
|
+
if (e && typeof e === 'object' && 'code' in e && e.code === 'EPERM') {
|
|
49
|
+
return true;
|
|
50
|
+
}
|
|
51
|
+
return false;
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
/** Format a duration in milliseconds to a human-readable string. */
|
|
55
|
+
function formatUptime(ms) {
|
|
56
|
+
const totalMinutes = Math.floor(ms / 60_000);
|
|
57
|
+
const hours = Math.floor(totalMinutes / 60);
|
|
58
|
+
const minutes = totalMinutes % 60;
|
|
59
|
+
if (hours > 0)
|
|
60
|
+
return `${hours}h ${minutes}m`;
|
|
61
|
+
return `${minutes}m`;
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Returns the currently active `gh` account, or undefined.
|
|
65
|
+
* Duplicated from index.ts to avoid circular imports — the canonical
|
|
66
|
+
* version lives in `getActiveGhUser()` in the watch index.
|
|
67
|
+
*/
|
|
68
|
+
/** Probes gh auth status — captures both stdout and stderr since gh may write to either. */
|
|
69
|
+
function probeCurrentGhUser() {
|
|
70
|
+
try {
|
|
71
|
+
const result = execFileSync('gh', ['auth', 'status', '--active'], {
|
|
72
|
+
encoding: 'utf-8',
|
|
73
|
+
stdio: ['pipe', 'pipe', 'pipe'],
|
|
74
|
+
});
|
|
75
|
+
const match = result.match(/account\s+(\S+)/);
|
|
76
|
+
return match?.[1];
|
|
77
|
+
}
|
|
78
|
+
catch (e) {
|
|
79
|
+
const stderr = e.stderr ?? '';
|
|
80
|
+
const match = stderr.match(/account\s+(\S+)/);
|
|
81
|
+
return match?.[1];
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* Run the watch health check and return a formatted status string.
|
|
86
|
+
*
|
|
87
|
+
* @param teamRoot - The repository root (directory containing `.squad/`).
|
|
88
|
+
*/
|
|
89
|
+
export function getWatchHealth(teamRoot) {
|
|
90
|
+
const pidPath = getPidPath(teamRoot);
|
|
91
|
+
if (!fs.existsSync(pidPath)) {
|
|
92
|
+
return '📋 No watch instance detected.\n Start one with: squad watch --execute --interval 5';
|
|
93
|
+
}
|
|
94
|
+
let info;
|
|
95
|
+
try {
|
|
96
|
+
info = JSON.parse(fs.readFileSync(pidPath, 'utf-8'));
|
|
97
|
+
}
|
|
98
|
+
catch {
|
|
99
|
+
return `⚠ Corrupt PID file — cannot read watch status.\n Delete ${pidPath} and restart.`;
|
|
100
|
+
}
|
|
101
|
+
// Validate minimal fields
|
|
102
|
+
if (typeof info.pid !== 'number') {
|
|
103
|
+
return `⚠ Invalid PID file (missing pid).\n Delete ${pidPath} and restart.`;
|
|
104
|
+
}
|
|
105
|
+
// Check if the process is actually running
|
|
106
|
+
if (!isProcessAlive(info.pid)) {
|
|
107
|
+
// Stale PID file — process died without cleanup
|
|
108
|
+
removePidFile(teamRoot);
|
|
109
|
+
return `⚠ Stale watch detected (PID ${info.pid} is dead). Cleaned up.\n Restart with: squad watch --execute --interval 5`;
|
|
110
|
+
}
|
|
111
|
+
// Process is alive — build status report
|
|
112
|
+
// Validate startedAt before computing uptime
|
|
113
|
+
if (!info.startedAt || isNaN(new Date(info.startedAt).getTime())) {
|
|
114
|
+
return `⚠ Invalid PID file (bad startedAt).
|
|
115
|
+
Delete ${pidPath} and restart.`;
|
|
116
|
+
}
|
|
117
|
+
const uptime = formatUptime(Date.now() - new Date(info.startedAt).getTime());
|
|
118
|
+
const lines = [
|
|
119
|
+
'🔄 Watch Instance — RUNNING',
|
|
120
|
+
'━━━━━━━━━━━━━━━━━━━━━━━━━━━━',
|
|
121
|
+
` PID: ${info.pid}`,
|
|
122
|
+
` Uptime: ${uptime}`,
|
|
123
|
+
` Auth: ${info.user}`,
|
|
124
|
+
` Interval: ${info.interval}m`,
|
|
125
|
+
` Repo: ${info.repo}`,
|
|
126
|
+
` Capabilities: ${(info.capabilities ?? []).join(', ') || '(none)'}`,
|
|
127
|
+
];
|
|
128
|
+
// Auth drift detection — compare current gh user vs recorded
|
|
129
|
+
const currentUser = probeCurrentGhUser();
|
|
130
|
+
if (currentUser && currentUser !== info.user) {
|
|
131
|
+
lines.push(` ⚠ AUTH DRIFT: Expected ${info.user}, current is ${currentUser}`);
|
|
132
|
+
}
|
|
133
|
+
else if (currentUser) {
|
|
134
|
+
lines.push(' Auth status: ✓ matches expected');
|
|
135
|
+
}
|
|
136
|
+
else {
|
|
137
|
+
lines.push(' Auth status: ? could not verify');
|
|
138
|
+
}
|
|
139
|
+
return lines.join('\n');
|
|
140
|
+
}
|
|
141
|
+
//# sourceMappingURL=health.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"health.js","sourceRoot":"","sources":["../../../../src/cli/commands/watch/health.ts"],"names":[],"mappings":"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"}
|
|
@@ -12,20 +12,8 @@ export { loadWatchConfig } from './config.js';
|
|
|
12
12
|
export type { WatchCapability, WatchContext, WatchPhase, PreflightResult, CapabilityResult } from './types.js';
|
|
13
13
|
export { CapabilityRegistry } from './registry.js';
|
|
14
14
|
export { createDefaultRegistry } from './capabilities/index.js';
|
|
15
|
-
export {
|
|
16
|
-
export
|
|
17
|
-
export { HealthCheckCapability } from './capabilities/health-check.js';
|
|
18
|
-
export { scoreIssue, rankIssues } from './capabilities/priority.js';
|
|
19
|
-
export type { ScoredIssue, PriorityConfig } from './capabilities/priority.js';
|
|
20
|
-
export { detectCapabilities, checkMachineCapability } from './capabilities/machine-capabilities.js';
|
|
21
|
-
export type { MachineCapabilityConfig, MachineCapabilityResult } from './capabilities/machine-capabilities.js';
|
|
22
|
-
export { StaleReclaimCapability } from './capabilities/stale-reclaim.js';
|
|
23
|
-
export { HeartbeatCapability } from './capabilities/heartbeat.js';
|
|
24
|
-
export { WebhookAlertCapability } from './capabilities/webhook-alerts.js';
|
|
25
|
-
export { checkBudget } from './capabilities/budget-check.js';
|
|
26
|
-
export type { BudgetConfig, BudgetResult } from './capabilities/budget-check.js';
|
|
27
|
-
export { acquireLock, updateLock, releaseLock } from './capabilities/lockfile.js';
|
|
28
|
-
export { runPostFailureRemediation } from './capabilities/post-failure.js';
|
|
15
|
+
export { createVerboseLogger, type VerboseLogger } from './verbose.js';
|
|
16
|
+
export { getWatchHealth, writePidFile, removePidFile, getPidPath, isProcessAlive, type WatchPidInfo } from './health.js';
|
|
29
17
|
/** Normalized work item for watch operations. */
|
|
30
18
|
export interface WatchWorkItem {
|
|
31
19
|
number: number;
|
|
@@ -67,7 +55,12 @@ export interface BoardState {
|
|
|
67
55
|
readyToMerge: number;
|
|
68
56
|
executed: number;
|
|
69
57
|
}
|
|
70
|
-
export
|
|
58
|
+
export interface ReportBoardOptions {
|
|
59
|
+
notifyLevel?: 'all' | 'important' | 'none';
|
|
60
|
+
machineName?: string;
|
|
61
|
+
repoName?: string;
|
|
62
|
+
}
|
|
63
|
+
export declare function reportBoard(state: BoardState, round: number, options?: ReportBoardOptions): void;
|
|
71
64
|
/**
|
|
72
65
|
* Legacy WatchOptions type — still accepted by runWatch for backward
|
|
73
66
|
* compatibility. New code should use {@link WatchConfig} instead.
|
|
@@ -89,7 +82,7 @@ export interface WatchOptions {
|
|
|
89
82
|
decisionHygiene?: boolean;
|
|
90
83
|
channelRouting?: boolean;
|
|
91
84
|
}
|
|
92
|
-
export { findExecutableIssues } from './capabilities/execute.js';
|
|
85
|
+
export { findExecutableIssues, classifyIssue } from './capabilities/execute.js';
|
|
93
86
|
export declare function buildAgentCommand(issue: WatchWorkItem, teamRoot: string, options: WatchOptions): {
|
|
94
87
|
cmd: string;
|
|
95
88
|
args: string[];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/watch/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/watch/index.ts"],"names":[],"mappings":"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"}
|