hungry-ghost-hive 0.18.2 → 0.19.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 (135) hide show
  1. package/README.md +31 -0
  2. package/dist/agents/tech-lead.js +2 -2
  3. package/dist/agents/tech-lead.js.map +1 -1
  4. package/dist/cli/commands/assign.d.ts.map +1 -1
  5. package/dist/cli/commands/assign.js +12 -0
  6. package/dist/cli/commands/assign.js.map +1 -1
  7. package/dist/cli/commands/cluster.d.ts +3 -0
  8. package/dist/cli/commands/cluster.d.ts.map +1 -0
  9. package/dist/cli/commands/cluster.js +84 -0
  10. package/dist/cli/commands/cluster.js.map +1 -0
  11. package/dist/cli/commands/index.d.ts +1 -0
  12. package/dist/cli/commands/index.d.ts.map +1 -1
  13. package/dist/cli/commands/index.js +1 -0
  14. package/dist/cli/commands/index.js.map +1 -1
  15. package/dist/cli/commands/manager.d.ts.map +1 -1
  16. package/dist/cli/commands/manager.js +80 -100
  17. package/dist/cli/commands/manager.js.map +1 -1
  18. package/dist/cli/commands/pr.d.ts.map +1 -1
  19. package/dist/cli/commands/pr.js +30 -19
  20. package/dist/cli/commands/pr.js.map +1 -1
  21. package/dist/cli/commands/req.d.ts.map +1 -1
  22. package/dist/cli/commands/req.js +22 -6
  23. package/dist/cli/commands/req.js.map +1 -1
  24. package/dist/cli/commands/resume.d.ts.map +1 -1
  25. package/dist/cli/commands/resume.js +3 -2
  26. package/dist/cli/commands/resume.js.map +1 -1
  27. package/dist/cli-runtimes/index.d.ts +12 -0
  28. package/dist/cli-runtimes/index.d.ts.map +1 -1
  29. package/dist/cli-runtimes/index.js +43 -0
  30. package/dist/cli-runtimes/index.js.map +1 -1
  31. package/dist/cli-runtimes/index.test.js +33 -1
  32. package/dist/cli-runtimes/index.test.js.map +1 -1
  33. package/dist/cluster/distributed-edge-cases.test.d.ts +2 -0
  34. package/dist/cluster/distributed-edge-cases.test.d.ts.map +1 -0
  35. package/dist/cluster/distributed-edge-cases.test.js +476 -0
  36. package/dist/cluster/distributed-edge-cases.test.js.map +1 -0
  37. package/dist/cluster/distributed-runtime-coverage.test.d.ts +2 -0
  38. package/dist/cluster/distributed-runtime-coverage.test.d.ts.map +1 -0
  39. package/dist/cluster/distributed-runtime-coverage.test.js +614 -0
  40. package/dist/cluster/distributed-runtime-coverage.test.js.map +1 -0
  41. package/dist/cluster/distributed-system.test.d.ts +2 -0
  42. package/dist/cluster/distributed-system.test.d.ts.map +1 -0
  43. package/dist/cluster/distributed-system.test.js +505 -0
  44. package/dist/cluster/distributed-system.test.js.map +1 -0
  45. package/dist/cluster/index.d.ts +4 -0
  46. package/dist/cluster/index.d.ts.map +1 -0
  47. package/dist/cluster/index.js +2 -0
  48. package/dist/cluster/index.js.map +1 -0
  49. package/dist/cluster/integration.test.d.ts +2 -0
  50. package/dist/cluster/integration.test.d.ts.map +1 -0
  51. package/dist/cluster/integration.test.js +170 -0
  52. package/dist/cluster/integration.test.js.map +1 -0
  53. package/dist/cluster/raft-store.d.ts +61 -0
  54. package/dist/cluster/raft-store.d.ts.map +1 -0
  55. package/dist/cluster/raft-store.js +195 -0
  56. package/dist/cluster/raft-store.js.map +1 -0
  57. package/dist/cluster/replication.d.ts +26 -0
  58. package/dist/cluster/replication.d.ts.map +1 -0
  59. package/dist/cluster/replication.js +944 -0
  60. package/dist/cluster/replication.js.map +1 -0
  61. package/dist/cluster/replication.test.d.ts +2 -0
  62. package/dist/cluster/replication.test.d.ts.map +1 -0
  63. package/dist/cluster/replication.test.js +113 -0
  64. package/dist/cluster/replication.test.js.map +1 -0
  65. package/dist/cluster/runtime.d.ts +83 -0
  66. package/dist/cluster/runtime.d.ts.map +1 -0
  67. package/dist/cluster/runtime.js +561 -0
  68. package/dist/cluster/runtime.js.map +1 -0
  69. package/dist/cluster/runtime.test.d.ts +2 -0
  70. package/dist/cluster/runtime.test.d.ts.map +1 -0
  71. package/dist/cluster/runtime.test.js +138 -0
  72. package/dist/cluster/runtime.test.js.map +1 -0
  73. package/dist/config/loader.d.ts.map +1 -1
  74. package/dist/config/loader.js +15 -0
  75. package/dist/config/loader.js.map +1 -1
  76. package/dist/config/loader.test.d.ts +2 -0
  77. package/dist/config/loader.test.d.ts.map +1 -0
  78. package/dist/config/loader.test.js +44 -0
  79. package/dist/config/loader.test.js.map +1 -0
  80. package/dist/config/schema.d.ts +164 -0
  81. package/dist/config/schema.d.ts.map +1 -1
  82. package/dist/config/schema.js +62 -2
  83. package/dist/config/schema.js.map +1 -1
  84. package/dist/config/schema.test.js +33 -2
  85. package/dist/config/schema.test.js.map +1 -1
  86. package/dist/context-files/index.test.js +14 -0
  87. package/dist/context-files/index.test.js.map +1 -1
  88. package/dist/db/client.d.ts.map +1 -1
  89. package/dist/db/client.js +8 -0
  90. package/dist/db/client.js.map +1 -1
  91. package/dist/index.js +2 -1
  92. package/dist/index.js.map +1 -1
  93. package/dist/orchestrator/scheduler.d.ts +2 -3
  94. package/dist/orchestrator/scheduler.d.ts.map +1 -1
  95. package/dist/orchestrator/scheduler.js +11 -19
  96. package/dist/orchestrator/scheduler.js.map +1 -1
  97. package/dist/orchestrator/scheduler.test.js +15 -1
  98. package/dist/orchestrator/scheduler.test.js.map +1 -1
  99. package/dist/utils/pr-sync.d.ts.map +1 -1
  100. package/dist/utils/pr-sync.js +47 -22
  101. package/dist/utils/pr-sync.js.map +1 -1
  102. package/dist/utils/pr-sync.test.js +33 -0
  103. package/dist/utils/pr-sync.test.js.map +1 -1
  104. package/package.json +1 -1
  105. package/src/agents/tech-lead.ts +2 -2
  106. package/src/cli/commands/assign.ts +21 -0
  107. package/src/cli/commands/cluster.ts +124 -0
  108. package/src/cli/commands/index.ts +1 -0
  109. package/src/cli/commands/manager.ts +118 -127
  110. package/src/cli/commands/pr.ts +32 -19
  111. package/src/cli/commands/req.ts +38 -6
  112. package/src/cli/commands/resume.ts +11 -2
  113. package/src/cli-runtimes/index.test.ts +43 -0
  114. package/src/cli-runtimes/index.ts +47 -0
  115. package/src/cluster/distributed-edge-cases.test.ts +675 -0
  116. package/src/cluster/distributed-runtime-coverage.test.ts +768 -0
  117. package/src/cluster/distributed-system.test.ts +730 -0
  118. package/src/cluster/index.ts +3 -0
  119. package/src/cluster/integration.test.ts +231 -0
  120. package/src/cluster/raft-store.ts +282 -0
  121. package/src/cluster/replication.test.ts +179 -0
  122. package/src/cluster/replication.ts +1279 -0
  123. package/src/cluster/runtime.test.ts +174 -0
  124. package/src/cluster/runtime.ts +773 -0
  125. package/src/config/loader.test.ts +57 -0
  126. package/src/config/loader.ts +21 -0
  127. package/src/config/schema.test.ts +37 -2
  128. package/src/config/schema.ts +66 -2
  129. package/src/context-files/index.test.ts +14 -0
  130. package/src/db/client.ts +16 -0
  131. package/src/index.ts +2 -0
  132. package/src/orchestrator/scheduler.test.ts +18 -1
  133. package/src/orchestrator/scheduler.ts +15 -15
  134. package/src/utils/pr-sync.test.ts +44 -0
  135. package/src/utils/pr-sync.ts +75 -32
package/README.md CHANGED
@@ -209,6 +209,10 @@ hive manager health
209
209
  # Nudge a specific agent
210
210
  hive manager nudge <session>
211
211
  hive manager nudge hive-senior-alpha -m "Check the failing tests"
212
+
213
+ # Cluster status (when cluster.enabled=true)
214
+ hive cluster status
215
+ hive cluster status --json
212
216
  ```
213
217
 
214
218
  ### Communication
@@ -309,8 +313,35 @@ qa:
309
313
  - npm run type-check
310
314
  build_command: npm run build
311
315
  test_command: npm test
316
+
317
+ # Optional distributed mode (HTTP + peer replication)
318
+ cluster:
319
+ enabled: false
320
+ node_id: node-a
321
+ listen_host: 0.0.0.0
322
+ listen_port: 8787
323
+ public_url: http://203.0.113.10:8787
324
+ peers:
325
+ - id: node-b
326
+ url: http://198.51.100.20:8787
327
+ - id: node-c
328
+ url: http://192.0.2.30:8787
329
+ heartbeat_interval_ms: 2000
330
+ election_timeout_min_ms: 3000
331
+ election_timeout_max_ms: 6000
332
+ sync_interval_ms: 5000
333
+ request_timeout_ms: 5000
334
+ story_similarity_threshold: 0.92
312
335
  ```
313
336
 
337
+ ### Distributed Mode
338
+
339
+ - Run `hive manager start` on every host in the same cluster.
340
+ - Each host runs manager/scheduler runtime, but only one node is elected leader at a time.
341
+ - Leader is the only node allowed to run orchestration decisions (`assign`, scheduler loops, tech lead spawn).
342
+ - Followers stay in sync and do not schedule work.
343
+ - State replication is logical row/event sync over HTTP (no centralized DB).
344
+
314
345
  ## Escalation Protocol
315
346
 
316
347
  When agents get stuck, they escalate:
@@ -1,4 +1,4 @@
1
- import { getCliRuntimeBuilder } from '../cli-runtimes/index.js';
1
+ import { getCliRuntimeBuilder, resolveRuntimeModelForCli } from '../cli-runtimes/index.js';
2
2
  import { loadConfig } from '../config/index.js';
3
3
  import { queryAll } from '../db/client.js';
4
4
  import { createAgent, getAgentsByType, updateAgent } from '../db/queries/agents.js';
@@ -215,7 +215,7 @@ Respond in JSON format:
215
215
  const config = loadConfig(paths.hiveDir);
216
216
  const agentConfig = config.models.senior;
217
217
  const cliTool = agentConfig.cli_tool;
218
- const model = agentConfig.model;
218
+ const model = resolveRuntimeModelForCli(agentConfig.model, cliTool);
219
219
  // Build spawn command using CLI runtime builder (spawn fresh session, will be resumed later)
220
220
  const runtimeBuilder = getCliRuntimeBuilder(cliTool);
221
221
  const commandArray = runtimeBuilder.buildSpawnCommand(model);
@@ -1 +1 @@
1
- {"version":3,"file":"tech-lead.js","sourceRoot":"","sources":["../../src/agents/tech-lead.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"tech-lead.js","sourceRoot":"","sources":["../../src/agents/tech-lead.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"assign.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/assign.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAUpC,eAAO,MAAM,aAAa,SAsJtB,CAAC"}
1
+ {"version":3,"file":"assign.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/assign.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAWpC,eAAO,MAAM,aAAa,SA0KtB,CAAC"}
@@ -1,6 +1,7 @@
1
1
  import chalk from 'chalk';
2
2
  import { Command } from 'commander';
3
3
  import ora from 'ora';
4
+ import { fetchLocalClusterStatus } from '../../cluster/runtime.js';
4
5
  import { loadConfig } from '../../config/loader.js';
5
6
  import { getRequirementById } from '../../db/queries/requirements.js';
6
7
  import { getPlannedStories } from '../../db/queries/stories.js';
@@ -18,6 +19,17 @@ export const assignCommand = new Command('assign')
18
19
  const spinner = ora('Assigning stories...').start();
19
20
  try {
20
21
  const config = loadConfig(paths.hiveDir);
22
+ if (config.cluster.enabled) {
23
+ const clusterStatus = await fetchLocalClusterStatus(config.cluster);
24
+ if (!clusterStatus) {
25
+ spinner.fail(chalk.red('Cluster mode is enabled, but local cluster runtime is unavailable. Start manager first.'));
26
+ process.exit(1);
27
+ }
28
+ if (!clusterStatus.is_leader) {
29
+ spinner.fail(chalk.red(`Only the cluster leader can assign stories (leader: ${clusterStatus.leader_id || 'unknown'}).`));
30
+ process.exit(1);
31
+ }
32
+ }
21
33
  // Check if godmode is active
22
34
  const plannedStories = getPlannedStories(db.db);
23
35
  let godmodeActive = false;
@@ -1 +1 @@
1
- {"version":3,"file":"assign.js","sourceRoot":"","sources":["../../../src/cli/commands/assign.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"assign.js","sourceRoot":"","sources":["../../../src/cli/commands/assign.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { Command } from 'commander';
2
+ export declare const clusterCommand: Command;
3
+ //# sourceMappingURL=cluster.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cluster.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/cluster.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAYpC,eAAO,MAAM,cAAc,SAAuE,CAAC"}
@@ -0,0 +1,84 @@
1
+ import chalk from 'chalk';
2
+ import { Command } from 'commander';
3
+ import { fetchClusterStatusFromUrl, fetchLocalClusterStatus } from '../../cluster/runtime.js';
4
+ import { loadConfig } from '../../config/loader.js';
5
+ import { findHiveRoot, getHivePaths } from '../../utils/paths.js';
6
+ export const clusterCommand = new Command('cluster').description('Distributed cluster operations');
7
+ clusterCommand
8
+ .command('status')
9
+ .description('Show local and peer cluster status')
10
+ .option('--json', 'Output as JSON')
11
+ .action(async (options) => {
12
+ const root = findHiveRoot();
13
+ if (!root) {
14
+ console.error(chalk.red('Not in a Hive workspace.'));
15
+ process.exit(1);
16
+ }
17
+ const paths = getHivePaths(root);
18
+ const config = loadConfig(paths.hiveDir);
19
+ if (!config.cluster.enabled) {
20
+ if (options.json) {
21
+ console.log(JSON.stringify({
22
+ enabled: false,
23
+ message: 'Cluster mode is disabled (set cluster.enabled=true in .hive/hive.config.yaml).',
24
+ }, null, 2));
25
+ }
26
+ else {
27
+ console.log(chalk.yellow('Cluster mode is disabled.'));
28
+ console.log(chalk.gray('Set `cluster.enabled: true` in `.hive/hive.config.yaml` to enable.'));
29
+ }
30
+ return;
31
+ }
32
+ const local = await fetchLocalClusterStatus(config.cluster);
33
+ const peerStatuses = await Promise.all(config.cluster.peers.map(async (peer) => {
34
+ const status = await fetchClusterStatusFromUrl(`${peer.url.replace(/\/$/, '')}/cluster/v1/status`, {
35
+ authToken: config.cluster.auth_token,
36
+ timeoutMs: config.cluster.request_timeout_ms,
37
+ });
38
+ return {
39
+ id: peer.id,
40
+ url: peer.url,
41
+ reachable: status !== null,
42
+ status,
43
+ };
44
+ }));
45
+ const payload = {
46
+ enabled: true,
47
+ quorum: Math.floor((config.cluster.peers.length + 1) / 2) + 1,
48
+ local,
49
+ peers: peerStatuses,
50
+ };
51
+ if (options.json) {
52
+ console.log(JSON.stringify(payload, null, 2));
53
+ return;
54
+ }
55
+ console.log(chalk.bold('\nCluster Status\n'));
56
+ console.log(chalk.gray(`Node ID: ${config.cluster.node_id}`));
57
+ console.log(chalk.gray(`Public URL: ${config.cluster.public_url}`));
58
+ console.log(chalk.gray(`Quorum: ${payload.quorum}`));
59
+ if (!local) {
60
+ console.log(chalk.red('\nLocal runtime: unavailable'));
61
+ console.log(chalk.gray('Start it with: hive manager start'));
62
+ }
63
+ else {
64
+ const roleColor = local.is_leader ? chalk.green : chalk.yellow;
65
+ console.log(chalk.bold('\nLocal Runtime'));
66
+ console.log(`${roleColor(local.role.toUpperCase())} term=${local.term} leader=${local.leader_id || 'unknown'} voted_for=${local.voted_for || '-'}`);
67
+ console.log(chalk.gray(`Raft: commit=${local.raft_commit_index} applied=${local.raft_last_applied} last_log=${local.raft_last_log_index}`));
68
+ }
69
+ console.log(chalk.bold('\nPeers'));
70
+ if (peerStatuses.length === 0) {
71
+ console.log(chalk.gray('No peers configured.'));
72
+ return;
73
+ }
74
+ for (const peer of peerStatuses) {
75
+ if (!peer.reachable || !peer.status) {
76
+ console.log(`${chalk.red('UNREACHABLE')} ${peer.id} ${chalk.gray(peer.url)}`);
77
+ continue;
78
+ }
79
+ const marker = peer.status.is_leader ? chalk.green('LEADER') : chalk.yellow(peer.status.role);
80
+ console.log(`${marker} ${peer.id} term=${peer.status.term} leader=${peer.status.leader_id || 'unknown'} ${chalk.gray(peer.url)}`);
81
+ }
82
+ console.log();
83
+ });
84
+ //# sourceMappingURL=cluster.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cluster.js","sourceRoot":"","sources":["../../../src/cli/commands/cluster.ts"],"names":[],"mappings":"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"}
@@ -2,6 +2,7 @@ export { addRepoCommand } from './add-repo.js';
2
2
  export { agentsCommand } from './agents.js';
3
3
  export { assignCommand } from './assign.js';
4
4
  export { cleanupCommand } from './cleanup.js';
5
+ export { clusterCommand } from './cluster.js';
5
6
  export { configCommand } from './config.js';
6
7
  export { escalationsCommand } from './escalations.js';
7
8
  export { initCommand } from './init.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AACtD,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AACxC,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AACtC,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACnD,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AACxC,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AACpC,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AACtC,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC1C,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AACtD,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AACxC,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AACtC,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACnD,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AACxC,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AACpC,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AACtC,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC1C,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC"}
@@ -2,6 +2,7 @@ export { addRepoCommand } from './add-repo.js';
2
2
  export { agentsCommand } from './agents.js';
3
3
  export { assignCommand } from './assign.js';
4
4
  export { cleanupCommand } from './cleanup.js';
5
+ export { clusterCommand } from './cluster.js';
5
6
  export { configCommand } from './config.js';
6
7
  export { escalationsCommand } from './escalations.js';
7
8
  export { initCommand } from './init.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/cli/commands/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AACtD,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AACxC,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AACtC,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACnD,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AACxC,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AACpC,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AACtC,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC1C,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/cli/commands/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AACtD,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AACxC,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AACtC,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACnD,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AACxC,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AACpC,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AACtC,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC1C,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"manager.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/manager.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAiGpC,eAAO,MAAM,cAAc,SAE1B,CAAC"}
1
+ {"version":3,"file":"manager.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/manager.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA4FpC,eAAO,MAAM,cAAc,SAE1B,CAAC"}
@@ -1,7 +1,7 @@
1
1
  import chalk from 'chalk';
2
2
  import { Command } from 'commander';
3
- import { execa } from 'execa';
4
3
  import { join } from 'path';
4
+ import { ClusterRuntime, fetchLocalClusterStatus } from '../../cluster/runtime.js';
5
5
  import { loadConfig } from '../../config/loader.js';
6
6
  import { queryAll, withTransaction } from '../../db/client.js';
7
7
  import { acquireLock } from '../../db/lock.js';
@@ -11,14 +11,12 @@ import { createLog } from '../../db/queries/logs.js';
11
11
  import { getAllPendingMessages, markMessagesRead, } from '../../db/queries/messages.js';
12
12
  import { backfillGithubPrNumbers, getMergeQueue, getPullRequestsByStatus, updatePullRequest, } from '../../db/queries/pull-requests.js';
13
13
  import { getStoriesByStatus, updateStory, updateStoryAssignment, } from '../../db/queries/stories.js';
14
- import { getAllTeams } from '../../db/queries/teams.js';
15
14
  import { Scheduler } from '../../orchestrator/scheduler.js';
16
- import { autoApprovePermission, captureTmuxPane, forceBypassMode, getHiveSessions, isManagerRunning, killTmuxSession, sendEnterToTmuxSession, sendMessageWithConfirmation, sendToTmuxSession, stopManager as stopManagerSession, } from '../../tmux/manager.js';
15
+ import { autoApprovePermission, captureTmuxPane, forceBypassMode, getHiveSessions, isManagerRunning, isTmuxSessionRunning, killTmuxSession, sendEnterToTmuxSession, sendMessageWithConfirmation, sendToTmuxSession, stopManager as stopManagerSession, } from '../../tmux/manager.js';
17
16
  import { autoMergeApprovedPRs } from '../../utils/auto-merge.js';
18
17
  import { ClaudeCodeState, detectClaudeCodeState, getStateDescription, } from '../../utils/claude-code-state.js';
19
18
  import { buildAutoRecoveryReminder, getAvailableCommands, } from '../../utils/cli-commands.js';
20
- import { getExistingPRIdentifiers, syncOpenGitHubPRs } from '../../utils/pr-sync.js';
21
- import { extractStoryIdFromBranch } from '../../utils/story-id.js';
19
+ import { syncAllTeamOpenPRs, syncMergedPRsFromGitHub } from '../../utils/pr-sync.js';
22
20
  import { withHiveContext, withHiveRoot } from '../../utils/with-hive-context.js';
23
21
  // --- Named constants (extracted from inline magic numbers) ---
24
22
  /** Number of tmux pane lines to capture for agent state detection */
@@ -37,10 +35,6 @@ const IDLE_SPINDOWN_DELAY_MS = 500;
37
35
  const POST_NUDGE_DELAY_MS = 100;
38
36
  /** Delay in ms between forwarding messages to an agent */
39
37
  const MESSAGE_FORWARD_DELAY_MS = 100;
40
- /** Limit for GitHub PR list queries */
41
- const GITHUB_PR_LIST_LIMIT = 20;
42
- /** Minutes a story can be in_progress before being considered stuck */
43
- const STUCK_STORY_THRESHOLD_MINUTES = 30;
44
38
  // In-memory state tracking per agent session
45
39
  const agentStates = new Map();
46
40
  export const managerCommand = new Command('manager').description('Micromanager daemon that keeps agents productive');
@@ -54,6 +48,7 @@ managerCommand
54
48
  const { root, paths } = withHiveRoot(ctx => ctx);
55
49
  // Load config first to get all settings
56
50
  const config = loadConfig(paths.hiveDir);
51
+ let clusterRuntime = null;
57
52
  const lockPath = join(paths.hiveDir, 'manager.lock');
58
53
  // Acquire manager lock to ensure singleton
59
54
  let releaseLock = null;
@@ -72,20 +67,30 @@ managerCommand
72
67
  await releaseLock();
73
68
  console.log(chalk.gray('\nManager lock released'));
74
69
  }
70
+ if (clusterRuntime) {
71
+ await clusterRuntime.stop();
72
+ }
75
73
  process.exit(0);
76
74
  };
77
75
  process.on('SIGINT', cleanup);
78
76
  process.on('SIGTERM', cleanup);
77
+ if (config.cluster.enabled) {
78
+ clusterRuntime = new ClusterRuntime(config.cluster, { hiveDir: paths.hiveDir });
79
+ await clusterRuntime.start();
80
+ console.log(chalk.gray(`Cluster runtime started for ${config.cluster.node_id} (${config.cluster.public_url})`));
81
+ }
79
82
  // Support two modes: legacy single-interval and new two-tier polling
80
83
  const useTwoTier = options.interval === '60' && config.manager;
81
84
  if (useTwoTier) {
82
85
  // Two-tier polling - use slow interval (60s) by default to reduce interruptions
83
- const slowInterval = config.manager.slow_poll_interval;
86
+ const slowInterval = config.cluster.enabled
87
+ ? Math.min(config.manager.slow_poll_interval, config.cluster.sync_interval_ms)
88
+ : config.manager.slow_poll_interval;
84
89
  console.log(chalk.cyan(`Manager started (polling every ${slowInterval / 1000}s)`));
85
90
  console.log(chalk.gray('Press Ctrl+C to stop\n'));
86
91
  const runCheck = async () => {
87
92
  try {
88
- await managerCheck(root, config);
93
+ await managerCheck(root, config, clusterRuntime);
89
94
  }
90
95
  catch (err) {
91
96
  console.error(chalk.red('Manager error:'), err);
@@ -97,16 +102,22 @@ managerCommand
97
102
  }
98
103
  else if (releaseLock) {
99
104
  await releaseLock();
105
+ if (clusterRuntime) {
106
+ await clusterRuntime.stop();
107
+ }
100
108
  }
101
109
  }
102
110
  else {
103
111
  // Legacy mode: single interval
104
- const interval = parseInt(options.interval, 10) * 1000;
105
- console.log(chalk.cyan(`Manager started (checking every ${options.interval}s)`));
112
+ const requestedInterval = parseInt(options.interval, 10) * 1000;
113
+ const interval = config.cluster.enabled
114
+ ? Math.min(requestedInterval, config.cluster.sync_interval_ms)
115
+ : requestedInterval;
116
+ console.log(chalk.cyan(`Manager started (checking every ${interval / 1000}s)`));
106
117
  console.log(chalk.gray('Press Ctrl+C to stop\n'));
107
118
  const runCheck = async () => {
108
119
  try {
109
- await managerCheck(root, config);
120
+ await managerCheck(root, config, clusterRuntime);
110
121
  }
111
122
  catch (err) {
112
123
  console.error(chalk.red('Manager error:'), err);
@@ -118,6 +129,9 @@ managerCommand
118
129
  }
119
130
  else if (releaseLock) {
120
131
  await releaseLock();
132
+ if (clusterRuntime) {
133
+ await clusterRuntime.stop();
134
+ }
121
135
  }
122
136
  }
123
137
  });
@@ -128,6 +142,17 @@ managerCommand
128
142
  .action(async () => {
129
143
  const { root, paths } = withHiveRoot(ctx => ctx);
130
144
  const config = loadConfig(paths.hiveDir);
145
+ if (config.cluster.enabled) {
146
+ const clusterStatus = await fetchLocalClusterStatus(config.cluster);
147
+ if (!clusterStatus) {
148
+ console.error(chalk.red('Cluster mode is enabled, but local cluster runtime is unavailable. Start manager first.'));
149
+ process.exit(1);
150
+ }
151
+ if (!clusterStatus.is_leader) {
152
+ console.log(chalk.yellow(`Skipping manager check on follower node (leader: ${clusterStatus.leader_id || 'unknown'}).`));
153
+ return;
154
+ }
155
+ }
131
156
  await managerCheck(root, config);
132
157
  });
133
158
  // Run health check to sync agents with tmux
@@ -137,6 +162,17 @@ managerCommand
137
162
  .action(async () => {
138
163
  await withHiveContext(async ({ root, paths, db }) => {
139
164
  const config = loadConfig(paths.hiveDir);
165
+ if (config.cluster.enabled) {
166
+ const clusterStatus = await fetchLocalClusterStatus(config.cluster);
167
+ if (!clusterStatus) {
168
+ console.error(chalk.red('Cluster mode is enabled, but local cluster runtime is unavailable. Start manager first.'));
169
+ process.exit(1);
170
+ }
171
+ if (!clusterStatus.is_leader) {
172
+ console.log(chalk.yellow(`Skipping health orchestration on follower node (leader: ${clusterStatus.leader_id || 'unknown'}).`));
173
+ return;
174
+ }
175
+ }
140
176
  const scheduler = new Scheduler(db.db, {
141
177
  scaling: config.scaling,
142
178
  models: config.models,
@@ -204,7 +240,7 @@ managerCommand
204
240
  console.log(chalk.green(`Nudged ${session}`));
205
241
  });
206
242
  });
207
- async function managerCheck(root, config) {
243
+ async function managerCheck(root, config, clusterRuntime) {
208
244
  const timestamp = new Date().toLocaleTimeString();
209
245
  console.log(chalk.gray(`[${timestamp}] Manager checking...`));
210
246
  await withHiveContext(async ({ paths, db }) => {
@@ -212,6 +248,30 @@ async function managerCheck(root, config) {
212
248
  if (!config) {
213
249
  config = loadConfig(paths.hiveDir);
214
250
  }
251
+ if (clusterRuntime?.isEnabled()) {
252
+ const syncResult = await clusterRuntime.sync(db.db);
253
+ if (!clusterRuntime.isLeader()) {
254
+ const status = clusterRuntime.getStatus();
255
+ if (await isTmuxSessionRunning('hive-tech-lead')) {
256
+ await killTmuxSession('hive-tech-lead');
257
+ }
258
+ const details = [];
259
+ if (syncResult.local_events_emitted > 0) {
260
+ details.push(`${syncResult.local_events_emitted} local events`);
261
+ }
262
+ if (syncResult.imported_events_applied > 0) {
263
+ details.push(`${syncResult.imported_events_applied} imported events`);
264
+ }
265
+ if (syncResult.merged_duplicate_stories > 0) {
266
+ details.push(`${syncResult.merged_duplicate_stories} merged stories`);
267
+ }
268
+ console.log(chalk.gray(` Cluster follower mode (leader: ${status.leader_id || 'unknown'})${details.length > 0 ? `, ${details.join(', ')}` : ''}`));
269
+ db.save();
270
+ return;
271
+ }
272
+ const leaderStatus = clusterRuntime.getStatus();
273
+ console.log(chalk.gray(` Cluster leader mode (${leaderStatus.node_id}, term ${leaderStatus.term})`));
274
+ }
215
275
  const ctx = {
216
276
  root,
217
277
  config,
@@ -294,13 +354,13 @@ async function runAutoMerge(ctx) {
294
354
  }
295
355
  }
296
356
  async function syncMergedPRs(ctx) {
297
- const mergedSynced = await syncMergedPRsFromGitHub(ctx.root, ctx.db);
357
+ const mergedSynced = await syncMergedPRsFromGitHub(ctx.root, ctx.db.db, () => ctx.db.save());
298
358
  if (mergedSynced > 0) {
299
359
  console.log(chalk.green(` Synced ${mergedSynced} merged story(ies) from GitHub`));
300
360
  }
301
361
  }
302
362
  async function syncOpenPRs(ctx) {
303
- const syncedPRs = await syncGitHubPRs(ctx.root, ctx.db, ctx.paths.hiveDir);
363
+ const syncedPRs = await syncAllTeamOpenPRs(ctx.root, ctx.db.db, () => ctx.db.save());
304
364
  if (syncedPRs > 0) {
305
365
  console.log(chalk.yellow(` Synced ${syncedPRs} GitHub PR(s) into merge queue`));
306
366
  await ctx.scheduler.checkMergeQueue();
@@ -605,9 +665,11 @@ async function spinDownIdleAgents(ctx) {
605
665
  }
606
666
  }
607
667
  async function nudgeStuckStories(ctx) {
668
+ const stuckThresholdMs = Math.max(1, ctx.config.manager.stuck_threshold_ms);
669
+ const staleUpdatedAt = new Date(Date.now() - stuckThresholdMs).toISOString();
608
670
  const stuckStories = queryAll(ctx.db.db, `SELECT * FROM stories
609
671
  WHERE status = 'in_progress'
610
- AND updated_at < datetime('now', '-${STUCK_STORY_THRESHOLD_MINUTES} minutes')`).filter(story => !['merged', 'completed'].includes(story.status));
672
+ AND updated_at < ?`, [staleUpdatedAt]).filter(story => !['merged', 'completed'].includes(story.status));
611
673
  for (const story of stuckStories) {
612
674
  if (!story.assigned_agent_id)
613
675
  continue;
@@ -723,87 +785,5 @@ async function forwardMessages(sessionName, messages, cliTool = 'claude') {
723
785
  await new Promise(resolve => setTimeout(resolve, MESSAGE_FORWARD_DELAY_MS));
724
786
  }
725
787
  }
726
- async function syncMergedPRsFromGitHub(root, db) {
727
- const teams = getAllTeams(db.db);
728
- if (teams.length === 0)
729
- return 0;
730
- let storiesUpdated = 0;
731
- for (const team of teams) {
732
- if (!team.repo_path)
733
- continue;
734
- const repoDir = `${root}/${team.repo_path}`;
735
- try {
736
- // Get recently merged PRs from GitHub
737
- const result = await execa('gh', [
738
- 'pr',
739
- 'list',
740
- '--json',
741
- 'number,headRefName,mergedAt',
742
- '--state',
743
- 'merged',
744
- '--limit',
745
- String(GITHUB_PR_LIST_LIMIT),
746
- ], {
747
- cwd: repoDir,
748
- });
749
- const mergedPRs = JSON.parse(result.stdout);
750
- for (const pr of mergedPRs) {
751
- // Extract story ID from branch name using unified pattern
752
- const storyId = extractStoryIdFromBranch(pr.headRefName);
753
- if (!storyId)
754
- continue;
755
- // Check if story exists and isn't already merged
756
- const story = queryAll(db.db, "SELECT * FROM stories WHERE id = ? AND status != 'merged'", [storyId]);
757
- if (story.length > 0) {
758
- // Update story to merged (atomic transaction)
759
- await withTransaction(db.db, () => {
760
- updateStory(db.db, storyId, { status: 'merged', assignedAgentId: null });
761
- // Log the sync
762
- createLog(db.db, {
763
- agentId: 'manager',
764
- storyId: storyId,
765
- eventType: 'STORY_MERGED',
766
- message: `Story synced to merged from GitHub PR #${pr.number}`,
767
- });
768
- });
769
- storiesUpdated++;
770
- }
771
- }
772
- }
773
- catch (_error) {
774
- // gh CLI might not be authenticated or repo might not have remote
775
- continue;
776
- }
777
- }
778
- if (storiesUpdated > 0) {
779
- db.save();
780
- }
781
- return storiesUpdated;
782
- }
783
- async function syncGitHubPRs(root, db, _hiveDir) {
784
- const teams = getAllTeams(db.db);
785
- if (teams.length === 0)
786
- return 0;
787
- // Include ALL branch names (including merged/closed) to prevent duplicate entries
788
- const { existingBranches, existingPrNumbers } = getExistingPRIdentifiers(db.db, true);
789
- let synced = 0;
790
- for (const team of teams) {
791
- if (!team.repo_path)
792
- continue;
793
- const repoDir = `${root}/${team.repo_path}`;
794
- try {
795
- const result = await syncOpenGitHubPRs(db.db, repoDir, team.id, existingBranches, existingPrNumbers);
796
- synced += result.synced;
797
- }
798
- catch (_error) {
799
- // gh CLI might not be authenticated or repo might not have remote
800
- continue;
801
- }
802
- }
803
- if (synced > 0) {
804
- db.save();
805
- }
806
- return synced;
807
- }
808
788
  // autoMergeApprovedPRs moved to src/utils/auto-merge.ts for reuse in pr.ts
809
789
  //# sourceMappingURL=manager.js.map