@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.
Files changed (141) hide show
  1. package/README.md +33 -0
  2. package/dist/cli/commands/doctor.d.ts +2 -0
  3. package/dist/cli/commands/doctor.d.ts.map +1 -1
  4. package/dist/cli/commands/doctor.js +27 -5
  5. package/dist/cli/commands/doctor.js.map +1 -1
  6. package/dist/cli/commands/externalize.d.ts +27 -0
  7. package/dist/cli/commands/externalize.d.ts.map +1 -0
  8. package/dist/cli/commands/externalize.js +207 -0
  9. package/dist/cli/commands/externalize.js.map +1 -0
  10. package/dist/cli/commands/loop.d.ts +56 -0
  11. package/dist/cli/commands/loop.d.ts.map +1 -0
  12. package/dist/cli/commands/loop.js +352 -0
  13. package/dist/cli/commands/loop.js.map +1 -0
  14. package/dist/cli/commands/migrate.js +2 -2
  15. package/dist/cli/commands/migrate.js.map +1 -1
  16. package/dist/cli/commands/rc.js +2 -2
  17. package/dist/cli/commands/rc.js.map +1 -1
  18. package/dist/cli/commands/watch/capabilities/cleanup.d.ts +18 -0
  19. package/dist/cli/commands/watch/capabilities/cleanup.d.ts.map +1 -0
  20. package/dist/cli/commands/watch/capabilities/cleanup.js +135 -0
  21. package/dist/cli/commands/watch/capabilities/cleanup.js.map +1 -0
  22. package/dist/cli/commands/watch/capabilities/execute.d.ts +15 -3
  23. package/dist/cli/commands/watch/capabilities/execute.d.ts.map +1 -1
  24. package/dist/cli/commands/watch/capabilities/execute.js +106 -86
  25. package/dist/cli/commands/watch/capabilities/execute.js.map +1 -1
  26. package/dist/cli/commands/watch/capabilities/fleet-dispatch.d.ts +20 -0
  27. package/dist/cli/commands/watch/capabilities/fleet-dispatch.d.ts.map +1 -0
  28. package/dist/cli/commands/watch/capabilities/fleet-dispatch.js +144 -0
  29. package/dist/cli/commands/watch/capabilities/fleet-dispatch.js.map +1 -0
  30. package/dist/cli/commands/watch/capabilities/index.d.ts +0 -2
  31. package/dist/cli/commands/watch/capabilities/index.d.ts.map +1 -1
  32. package/dist/cli/commands/watch/capabilities/index.js +4 -12
  33. package/dist/cli/commands/watch/capabilities/index.js.map +1 -1
  34. package/dist/cli/commands/watch/capabilities/self-pull.d.ts +4 -1
  35. package/dist/cli/commands/watch/capabilities/self-pull.d.ts.map +1 -1
  36. package/dist/cli/commands/watch/capabilities/self-pull.js +53 -5
  37. package/dist/cli/commands/watch/capabilities/self-pull.js.map +1 -1
  38. package/dist/cli/commands/watch/config.d.ts +10 -15
  39. package/dist/cli/commands/watch/config.d.ts.map +1 -1
  40. package/dist/cli/commands/watch/config.js +14 -47
  41. package/dist/cli/commands/watch/config.js.map +1 -1
  42. package/dist/cli/commands/watch/health.d.ts +41 -0
  43. package/dist/cli/commands/watch/health.d.ts.map +1 -0
  44. package/dist/cli/commands/watch/health.js +141 -0
  45. package/dist/cli/commands/watch/health.js.map +1 -0
  46. package/dist/cli/commands/watch/index.d.ts +9 -16
  47. package/dist/cli/commands/watch/index.d.ts.map +1 -1
  48. package/dist/cli/commands/watch/index.js +117 -63
  49. package/dist/cli/commands/watch/index.js.map +1 -1
  50. package/dist/cli/commands/watch/types.d.ts +2 -0
  51. package/dist/cli/commands/watch/types.d.ts.map +1 -1
  52. package/dist/cli/commands/watch/verbose.d.ts +12 -0
  53. package/dist/cli/commands/watch/verbose.d.ts.map +1 -0
  54. package/dist/cli/commands/watch/verbose.js +28 -0
  55. package/dist/cli/commands/watch/verbose.js.map +1 -0
  56. package/dist/cli/core/detect-squad-dir.d.ts.map +1 -1
  57. package/dist/cli/core/detect-squad-dir.js +9 -12
  58. package/dist/cli/core/detect-squad-dir.js.map +1 -1
  59. package/dist/cli/core/email-scrub.js +2 -2
  60. package/dist/cli/core/email-scrub.js.map +1 -1
  61. package/dist/cli/core/init.d.ts.map +1 -1
  62. package/dist/cli/core/init.js +4 -1
  63. package/dist/cli/core/init.js.map +1 -1
  64. package/dist/cli/core/migrations.js +1 -1
  65. package/dist/cli/core/migrations.js.map +1 -1
  66. package/dist/cli/core/nap.js +2 -2
  67. package/dist/cli/core/nap.js.map +1 -1
  68. package/dist/cli/core/project-type.js +1 -1
  69. package/dist/cli/core/project-type.js.map +1 -1
  70. package/dist/cli/core/templates.d.ts.map +1 -1
  71. package/dist/cli/core/templates.js +48 -0
  72. package/dist/cli/core/templates.js.map +1 -1
  73. package/dist/cli/core/upgrade.d.ts +20 -0
  74. package/dist/cli/core/upgrade.d.ts.map +1 -1
  75. package/dist/cli/core/upgrade.js +141 -15
  76. package/dist/cli/core/upgrade.js.map +1 -1
  77. package/dist/cli/shell/session-store.js +2 -2
  78. package/dist/cli/shell/session-store.js.map +1 -1
  79. package/dist/cli-entry.js +201 -89
  80. package/dist/cli-entry.js.map +1 -1
  81. package/package.json +6 -2
  82. package/templates/casting-reference.md +104 -104
  83. package/templates/ceremonies.md +28 -0
  84. package/templates/fact-checker-charter.md +83 -0
  85. package/templates/issue-lifecycle.md +2 -1
  86. package/templates/loop.md +46 -0
  87. package/templates/ralph-triage.js +3 -1
  88. package/templates/scribe-charter.md +20 -1
  89. package/templates/skills/external-comms/SKILL.md +329 -329
  90. package/templates/skills/gh-auth-isolation/SKILL.md +183 -183
  91. package/templates/skills/humanizer/SKILL.md +105 -105
  92. package/templates/skills/pr-review-response/SKILL.md +268 -0
  93. package/templates/skills/pr-screenshots/SKILL.md +149 -149
  94. package/templates/skills/versioning-policy/SKILL.md +119 -0
  95. package/templates/squad.agent.md.template +9 -7
  96. package/templates/workflows/squad-triage.yml +4 -2
  97. package/templates/workflows/sync-squad-labels.yml +3 -1
  98. package/dist/cli/commands/watch/capabilities/budget-check.d.ts +0 -29
  99. package/dist/cli/commands/watch/capabilities/budget-check.d.ts.map +0 -1
  100. package/dist/cli/commands/watch/capabilities/budget-check.js +0 -38
  101. package/dist/cli/commands/watch/capabilities/budget-check.js.map +0 -1
  102. package/dist/cli/commands/watch/capabilities/circuit-breaker.d.ts +0 -52
  103. package/dist/cli/commands/watch/capabilities/circuit-breaker.d.ts.map +0 -1
  104. package/dist/cli/commands/watch/capabilities/circuit-breaker.js +0 -152
  105. package/dist/cli/commands/watch/capabilities/circuit-breaker.js.map +0 -1
  106. package/dist/cli/commands/watch/capabilities/health-check.d.ts +0 -29
  107. package/dist/cli/commands/watch/capabilities/health-check.d.ts.map +0 -1
  108. package/dist/cli/commands/watch/capabilities/health-check.js +0 -139
  109. package/dist/cli/commands/watch/capabilities/health-check.js.map +0 -1
  110. package/dist/cli/commands/watch/capabilities/heartbeat.d.ts +0 -48
  111. package/dist/cli/commands/watch/capabilities/heartbeat.d.ts.map +0 -1
  112. package/dist/cli/commands/watch/capabilities/heartbeat.js +0 -115
  113. package/dist/cli/commands/watch/capabilities/heartbeat.js.map +0 -1
  114. package/dist/cli/commands/watch/capabilities/lockfile.d.ts +0 -30
  115. package/dist/cli/commands/watch/capabilities/lockfile.d.ts.map +0 -1
  116. package/dist/cli/commands/watch/capabilities/lockfile.js +0 -100
  117. package/dist/cli/commands/watch/capabilities/lockfile.js.map +0 -1
  118. package/dist/cli/commands/watch/capabilities/machine-capabilities.d.ts +0 -30
  119. package/dist/cli/commands/watch/capabilities/machine-capabilities.d.ts.map +0 -1
  120. package/dist/cli/commands/watch/capabilities/machine-capabilities.js +0 -103
  121. package/dist/cli/commands/watch/capabilities/machine-capabilities.js.map +0 -1
  122. package/dist/cli/commands/watch/capabilities/post-failure.d.ts +0 -19
  123. package/dist/cli/commands/watch/capabilities/post-failure.d.ts.map +0 -1
  124. package/dist/cli/commands/watch/capabilities/post-failure.js +0 -58
  125. package/dist/cli/commands/watch/capabilities/post-failure.js.map +0 -1
  126. package/dist/cli/commands/watch/capabilities/priority.d.ts +0 -59
  127. package/dist/cli/commands/watch/capabilities/priority.d.ts.map +0 -1
  128. package/dist/cli/commands/watch/capabilities/priority.js +0 -101
  129. package/dist/cli/commands/watch/capabilities/priority.js.map +0 -1
  130. package/dist/cli/commands/watch/capabilities/rate-pool.d.ts +0 -67
  131. package/dist/cli/commands/watch/capabilities/rate-pool.d.ts.map +0 -1
  132. package/dist/cli/commands/watch/capabilities/rate-pool.js +0 -187
  133. package/dist/cli/commands/watch/capabilities/rate-pool.js.map +0 -1
  134. package/dist/cli/commands/watch/capabilities/stale-reclaim.d.ts +0 -23
  135. package/dist/cli/commands/watch/capabilities/stale-reclaim.d.ts.map +0 -1
  136. package/dist/cli/commands/watch/capabilities/stale-reclaim.js +0 -87
  137. package/dist/cli/commands/watch/capabilities/stale-reclaim.js.map +0 -1
  138. package/dist/cli/commands/watch/capabilities/webhook-alerts.d.ts +0 -29
  139. package/dist/cli/commands/watch/capabilities/webhook-alerts.d.ts.map +0 -1
  140. package/dist/cli/commands/watch/capabilities/webhook-alerts.js +0 -114
  141. 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;AAkBpD,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,YAAY,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAEjE,mEAAmE;AACnE,wBAAgB,qBAAqB,IAAI,kBAAkB,CAkB1D"}
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
- // ── Watch parity capabilities (ported from ralph-watch.ps1, #743) ──
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
- // Watch parity capabilities (#743)
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,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;AAElE,sEAAsE;AACtE,OAAO,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AAC1D,OAAO,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;AAC5D,OAAO,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AACrD,OAAO,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAC;AAE7D,+EAA+E;AAC/E,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAG1C,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,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;IAEnD,mCAAmC;IACnC,QAAQ,CAAC,QAAQ,CAAC,IAAI,qBAAqB,EAAE,CAAC,CAAC;IAC/C,QAAQ,CAAC,QAAQ,CAAC,IAAI,sBAAsB,EAAE,CAAC,CAAC;IAChD,QAAQ,CAAC,QAAQ,CAAC,IAAI,mBAAmB,EAAE,CAAC,CAAC;IAC7C,QAAQ,CAAC,QAAQ,CAAC,IAAI,sBAAsB,EAAE,CAAC,CAAC;IAChD,OAAO,QAAQ,CAAC;AAClB,CAAC"}
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 at round start.
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;;GAEG;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;CAiBhE"}
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 at round start.
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: context.teamRoot }, (err) => err ? reject(err) : resolve());
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: context.teamRoot }, (err) => err ? reject(err) : resolve());
45
+ execFile('git', ['pull', '--ff-only', '--quiet'], { cwd }, (err) => err ? reject(err) : resolve());
25
46
  });
26
- return { success: true, summary: 'git pull ok' };
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;;GAEG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAG9C,MAAM,OAAO,kBAAkB;IACpB,IAAI,GAAG,WAAW,CAAC;IACnB,WAAW,GAAG,yDAAyD,CAAC;IACxE,WAAW,GAAG,SAAkB,CAAC;IACjC,QAAQ,GAAG,CAAC,KAAK,CAAC,CAAC;IACnB,KAAK,GAAG,UAAmB,CAAC;IAErC,KAAK,CAAC,SAAS,CAAC,QAAsB;QACpC,OAAO,IAAI,OAAO,CAAkB,CAAC,OAAO,EAAE,EAAE;YAC9C,QAAQ,CAAC,KAAK,EAAE,CAAC,WAAW,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE;gBACrC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,eAAe,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;YACvE,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,OAAqB;QACjC,IAAI,CAAC;YACH,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;gBAC1C,QAAQ,CAAC,KAAK,EAAE,CAAC,OAAO,EAAE,SAAS,CAAC,EAAE,EAAE,GAAG,EAAE,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CACvE,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,CAC9B,CAAC;YACJ,CAAC,CAAC,CAAC;YACH,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;gBAC1C,QAAQ,CAAC,KAAK,EAAE,CAAC,MAAM,EAAE,WAAW,EAAE,SAAS,CAAC,EAAE,EAAE,GAAG,EAAE,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CACnF,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,CAC9B,CAAC;YACJ,CAAC,CAAC,CAAC;YACH,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,aAAa,EAAE,CAAC;QACnD,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,wDAAwD,EAAE,CAAC;QAC9F,CAAC;IACH,CAAC;CACF"}
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
- /** Webhook URL for failure alerts. */
18
- webhookUrl?: string;
19
- /** Consecutive failures before webhook alert (default: 3). */
20
- alertThreshold?: number;
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,yEAAyE;IACzE,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IAEhE,sCAAsC;IACtC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,8DAA8D;IAC9D,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,oDAAoD;IACpD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,oEAAoE;IACpE,mBAAmB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC/B,sEAAsE;IACtE,QAAQ,CAAC,EAAE;QACT,uDAAuD;QACvD,mBAAmB,EAAE,MAAM,CAAC;QAC5B,iDAAiD;QACjD,eAAe,EAAE,MAAM,CAAC;KACzB,CAAC;CACH;AAgBD;;;;;GAKG;AACH,wBAAgB,eAAe,CAC7B,QAAQ,EAAE,MAAM,EAChB,YAAY,EAAE,OAAO,CAAC,WAAW,CAAC,GACjC,WAAW,CAuDb"}
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
- // Watch parity fields (#743)
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
- // Watch parity fields (#743)
95
- if (typeof raw['webhookUrl'] === 'string')
96
- result.webhookUrl = raw['webhookUrl'];
97
- if (typeof raw['alertThreshold'] === 'number')
98
- result.alertThreshold = raw['alertThreshold'];
99
- if (typeof raw['maxBudget'] === 'number')
100
- result.maxBudget = raw['maxBudget'];
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":"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"}
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;AA0BxC,MAAM,QAAQ,GAAgB;IAC5B,QAAQ,EAAE,EAAE;IACZ,OAAO,EAAE,KAAK;IACd,aAAa,EAAE,CAAC;IAChB,OAAO,EAAE,EAAE;IACX,YAAY,EAAE,SAAS;IACvB,YAAY,EAAE,EAAE;CACjB,CAAC;AAEF;;;;;GAKG;AACH,MAAM,UAAU,eAAe,CAC7B,QAAgB,EAChB,YAAkC;IAElC,IAAI,UAAU,GAAyB,EAAE,CAAC;IAE1C,IAAI,CAAC;QACH,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,QAAQ,EAAE,aAAa,CAAC,CAAC;QAChE,MAAM,GAAG,GAAG,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;QACzC,IAAI,GAAG,EAAE,CAAC;YACR,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAwC,CAAC;YACtE,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;gBACjB,UAAU,GAAG,mBAAmB,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YACjD,CAAC;QACH,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,+CAA+C;IACjD,CAAC;IAED,+BAA+B;IAC/B,MAAM,MAAM,GAAgB;QAC1B,QAAQ,EAAE,YAAY,CAAC,QAAQ,IAAI,UAAU,CAAC,QAAQ,IAAI,QAAQ,CAAC,QAAQ;QAC3E,OAAO,EAAE,YAAY,CAAC,OAAO,IAAI,UAAU,CAAC,OAAO,IAAI,QAAQ,CAAC,OAAO;QACvE,aAAa,EAAE,YAAY,CAAC,aAAa,IAAI,UAAU,CAAC,aAAa,IAAI,QAAQ,CAAC,aAAa;QAC/F,OAAO,EAAE,YAAY,CAAC,OAAO,IAAI,UAAU,CAAC,OAAO,IAAI,QAAQ,CAAC,OAAO;QACvE,YAAY,EAAE,YAAY,CAAC,YAAY,IAAI,UAAU,CAAC,YAAY,IAAI,QAAQ,CAAC,YAAY;QAC3F,QAAQ,EAAE,YAAY,CAAC,QAAQ,IAAI,UAAU,CAAC,QAAQ,IAAI,QAAQ,CAAC,QAAQ;QAC3E,YAAY,EAAE,YAAY,CAAC,YAAY,IAAI,UAAU,CAAC,YAAY,IAAI,QAAQ,CAAC,YAAY;QAC3F,OAAO,EAAE,YAAY,CAAC,OAAO,IAAI,UAAU,CAAC,OAAO,IAAI,QAAQ,CAAC,OAAO;QACvE,YAAY,EAAE;YACZ,GAAG,QAAQ,CAAC,YAAY;YACxB,GAAG,CAAC,UAAU,CAAC,YAAY,IAAI,EAAE,CAAC;YAClC,GAAG,CAAC,YAAY,CAAC,YAAY,IAAI,EAAE,CAAC;SACrC;QACD,OAAO,EAAE,YAAY,CAAC,OAAO,IAAI,UAAU,CAAC,OAAO,IAAI,KAAK;KAC7D,CAAC;IAEF,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,+EAA+E;AAC/E,SAAS,mBAAmB,CAAC,GAA4B;IACvD,MAAM,MAAM,GAAyB,EAAE,CAAC;IAExC,IAAI,OAAO,GAAG,CAAC,UAAU,CAAC,KAAK,QAAQ;QAAE,MAAM,CAAC,QAAQ,GAAG,GAAG,CAAC,UAAU,CAAC,CAAC;IAC3E,IAAI,OAAO,GAAG,CAAC,SAAS,CAAC,KAAK,SAAS;QAAE,MAAM,CAAC,OAAO,GAAG,GAAG,CAAC,SAAS,CAAC,CAAC;IACzE,IAAI,OAAO,GAAG,CAAC,eAAe,CAAC,KAAK,QAAQ;QAAE,MAAM,CAAC,aAAa,GAAG,GAAG,CAAC,eAAe,CAAC,CAAC;IAC1F,IAAI,OAAO,GAAG,CAAC,SAAS,CAAC,KAAK,QAAQ;QAAE,MAAM,CAAC,OAAO,GAAG,GAAG,CAAC,SAAS,CAAC,CAAC;IACxE,IAAI,OAAO,GAAG,CAAC,cAAc,CAAC,KAAK,QAAQ;QAAE,MAAM,CAAC,YAAY,GAAG,GAAG,CAAC,cAAc,CAAC,CAAC;IACvF,IAAI,OAAO,GAAG,CAAC,UAAU,CAAC,KAAK,QAAQ;QAAE,MAAM,CAAC,QAAQ,GAAG,GAAG,CAAC,UAAU,CAAC,CAAC;IAC3E,IAAI,OAAO,GAAG,CAAC,SAAS,CAAC,KAAK,SAAS;QAAE,MAAM,CAAC,OAAO,GAAG,GAAG,CAAC,SAAS,CAAC,CAAC;IACzE,IAAI,OAAO,GAAG,CAAC,cAAc,CAAC,KAAK,QAAQ,EAAE,CAAC;QAC5C,MAAM,IAAI,GAAG,GAAG,CAAC,cAAc,CAAW,CAAC;QAC3C,IAAI,IAAI,KAAK,OAAO,IAAI,IAAI,KAAK,MAAM,IAAI,IAAI,KAAK,QAAQ,EAAE,CAAC;YAC7D,MAAM,CAAC,YAAY,GAAG,IAAI,CAAC;QAC7B,CAAC;IACH,CAAC;IACD,IAAI,OAAO,GAAG,CAAC,SAAS,CAAC,KAAK,QAAQ;QAAE,MAAM,CAAC,OAAO,GAAG,GAAG,CAAC,SAAS,CAAC,CAAC;IAExE,sCAAsC;IACtC,MAAM,IAAI,GAAsD,EAAE,CAAC;IACnE,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,CAAC,UAAU,EAAE,SAAS,EAAE,eAAe,EAAE,SAAS,EAAE,cAAc,EAAE,UAAU,EAAE,SAAS,EAAE,cAAc,EAAE,SAAS,CAAC,CAAC,CAAC;IAChJ,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;QAC/C,IAAI,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC;YAAE,SAAS;QAChC,IAAI,OAAO,KAAK,KAAK,SAAS,IAAI,CAAC,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC;YACzG,IAAI,CAAC,GAAG,CAAC,GAAG,KAA0C,CAAC;QACzD,CAAC;IACH,CAAC;IACD,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC;QAAE,MAAM,CAAC,YAAY,GAAG,IAAI,CAAC;IAE7D,OAAO,MAAM,CAAC;AAChB,CAAC"}
@@ -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 { ModelCircuitBreaker } from './capabilities/circuit-breaker.js';
16
- export type { ModelCircuitBreakerState, CircuitBreakerConfig } from './capabilities/circuit-breaker.js';
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 declare function reportBoard(state: BoardState, round: number): void;
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":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/watch/index.ts"],"names":[],"mappings":"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"}