hungry-ghost-hive 0.43.0 → 0.43.2

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 (133) hide show
  1. package/dist/cli/commands/agents.d.ts.map +1 -1
  2. package/dist/cli/commands/agents.js +4 -11
  3. package/dist/cli/commands/agents.js.map +1 -1
  4. package/dist/cli/commands/approach.d.ts.map +1 -1
  5. package/dist/cli/commands/approach.js +2 -6
  6. package/dist/cli/commands/approach.js.map +1 -1
  7. package/dist/cli/commands/init.d.ts.map +1 -1
  8. package/dist/cli/commands/init.js +9 -0
  9. package/dist/cli/commands/init.js.map +1 -1
  10. package/dist/cli/commands/init.test.js +3 -0
  11. package/dist/cli/commands/init.test.js.map +1 -1
  12. package/dist/cli/commands/manager/index.d.ts +2 -27
  13. package/dist/cli/commands/manager/index.d.ts.map +1 -1
  14. package/dist/cli/commands/manager/index.js +23 -1519
  15. package/dist/cli/commands/manager/index.js.map +1 -1
  16. package/dist/cli/commands/manager/manager-utils.d.ts +9 -0
  17. package/dist/cli/commands/manager/manager-utils.d.ts.map +1 -0
  18. package/dist/cli/commands/manager/manager-utils.js +49 -0
  19. package/dist/cli/commands/manager/manager-utils.js.map +1 -0
  20. package/dist/cli/commands/manager/pr-sync-orchestrator.d.ts +7 -0
  21. package/dist/cli/commands/manager/pr-sync-orchestrator.d.ts.map +1 -0
  22. package/dist/cli/commands/manager/pr-sync-orchestrator.js +537 -0
  23. package/dist/cli/commands/manager/pr-sync-orchestrator.js.map +1 -0
  24. package/dist/cli/commands/manager/qa-review-handler.d.ts +15 -0
  25. package/dist/cli/commands/manager/qa-review-handler.d.ts.map +1 -0
  26. package/dist/cli/commands/manager/qa-review-handler.js +290 -0
  27. package/dist/cli/commands/manager/qa-review-handler.js.map +1 -0
  28. package/dist/cli/commands/manager/stuck-story-helpers.d.ts +32 -0
  29. package/dist/cli/commands/manager/stuck-story-helpers.d.ts.map +1 -0
  30. package/dist/cli/commands/manager/stuck-story-helpers.js +163 -0
  31. package/dist/cli/commands/manager/stuck-story-helpers.js.map +1 -0
  32. package/dist/cli/commands/manager/stuck-story-processor.d.ts +8 -0
  33. package/dist/cli/commands/manager/stuck-story-processor.d.ts.map +1 -0
  34. package/dist/cli/commands/manager/stuck-story-processor.js +392 -0
  35. package/dist/cli/commands/manager/stuck-story-processor.js.map +1 -0
  36. package/dist/cli/commands/manager/tech-lead-lifecycle.d.ts +3 -0
  37. package/dist/cli/commands/manager/tech-lead-lifecycle.d.ts.map +1 -0
  38. package/dist/cli/commands/manager/tech-lead-lifecycle.js +141 -0
  39. package/dist/cli/commands/manager/tech-lead-lifecycle.js.map +1 -0
  40. package/dist/cli/commands/my-stories.d.ts.map +1 -1
  41. package/dist/cli/commands/my-stories.js +5 -20
  42. package/dist/cli/commands/my-stories.js.map +1 -1
  43. package/dist/cli/commands/pr.js +7 -22
  44. package/dist/cli/commands/pr.js.map +1 -1
  45. package/dist/cli/commands/progress.d.ts.map +1 -1
  46. package/dist/cli/commands/progress.js +2 -5
  47. package/dist/cli/commands/progress.js.map +1 -1
  48. package/dist/cli/commands/resume.d.ts.map +1 -1
  49. package/dist/cli/commands/resume.js +3 -6
  50. package/dist/cli/commands/resume.js.map +1 -1
  51. package/dist/cli/commands/status.d.ts.map +1 -1
  52. package/dist/cli/commands/status.js +2 -5
  53. package/dist/cli/commands/status.js.map +1 -1
  54. package/dist/cli/commands/stories.d.ts.map +1 -1
  55. package/dist/cli/commands/stories.js +2 -5
  56. package/dist/cli/commands/stories.js.map +1 -1
  57. package/dist/cluster/adapters.d.ts +3 -2
  58. package/dist/cluster/adapters.d.ts.map +1 -1
  59. package/dist/cluster/adapters.js +2 -11
  60. package/dist/cluster/adapters.js.map +1 -1
  61. package/dist/cluster/cluster-http-server.d.ts +20 -0
  62. package/dist/cluster/cluster-http-server.d.ts.map +1 -0
  63. package/dist/cluster/cluster-http-server.js +140 -0
  64. package/dist/cluster/cluster-http-server.js.map +1 -0
  65. package/dist/cluster/heartbeat-manager.d.ts +24 -0
  66. package/dist/cluster/heartbeat-manager.d.ts.map +1 -0
  67. package/dist/cluster/heartbeat-manager.js +74 -0
  68. package/dist/cluster/heartbeat-manager.js.map +1 -0
  69. package/dist/cluster/raft-state-machine.d.ts +48 -0
  70. package/dist/cluster/raft-state-machine.d.ts.map +1 -0
  71. package/dist/cluster/raft-state-machine.js +207 -0
  72. package/dist/cluster/raft-state-machine.js.map +1 -0
  73. package/dist/cluster/runtime.d.ts +5 -29
  74. package/dist/cluster/runtime.d.ts.map +1 -1
  75. package/dist/cluster/runtime.js +58 -406
  76. package/dist/cluster/runtime.js.map +1 -1
  77. package/dist/integrations/jira/sync.d.ts +2 -5
  78. package/dist/integrations/jira/sync.d.ts.map +1 -1
  79. package/dist/integrations/jira/sync.js +116 -178
  80. package/dist/integrations/jira/sync.js.map +1 -1
  81. package/dist/utils/cli-helpers.d.ts +19 -0
  82. package/dist/utils/cli-helpers.d.ts.map +1 -0
  83. package/dist/utils/cli-helpers.js +51 -0
  84. package/dist/utils/cli-helpers.js.map +1 -0
  85. package/dist/utils/cli-helpers.test.d.ts +2 -0
  86. package/dist/utils/cli-helpers.test.d.ts.map +1 -0
  87. package/dist/utils/cli-helpers.test.js +100 -0
  88. package/dist/utils/cli-helpers.test.js.map +1 -0
  89. package/dist/utils/github-cli.d.ts +3 -0
  90. package/dist/utils/github-cli.d.ts.map +1 -0
  91. package/dist/utils/github-cli.js +4 -0
  92. package/dist/utils/github-cli.js.map +1 -0
  93. package/dist/utils/pr-sync.d.ts.map +1 -1
  94. package/dist/utils/pr-sync.js +1 -2
  95. package/dist/utils/pr-sync.js.map +1 -1
  96. package/dist/utils/story-status.d.ts +19 -0
  97. package/dist/utils/story-status.d.ts.map +1 -0
  98. package/dist/utils/story-status.js +58 -0
  99. package/dist/utils/story-status.js.map +1 -0
  100. package/dist/utils/story-status.test.d.ts +2 -0
  101. package/dist/utils/story-status.test.d.ts.map +1 -0
  102. package/dist/utils/story-status.test.js +65 -0
  103. package/dist/utils/story-status.test.js.map +1 -0
  104. package/package.json +1 -1
  105. package/src/cli/commands/agents.ts +3 -11
  106. package/src/cli/commands/approach.ts +2 -7
  107. package/src/cli/commands/init.test.ts +4 -0
  108. package/src/cli/commands/init.ts +9 -0
  109. package/src/cli/commands/manager/index.ts +166 -2236
  110. package/src/cli/commands/manager/manager-utils.ts +85 -0
  111. package/src/cli/commands/manager/pr-sync-orchestrator.ts +659 -0
  112. package/src/cli/commands/manager/qa-review-handler.ts +399 -0
  113. package/src/cli/commands/manager/stuck-story-helpers.ts +255 -0
  114. package/src/cli/commands/manager/stuck-story-processor.ts +604 -0
  115. package/src/cli/commands/manager/tech-lead-lifecycle.ts +210 -0
  116. package/src/cli/commands/my-stories.ts +5 -30
  117. package/src/cli/commands/pr.ts +6 -22
  118. package/src/cli/commands/progress.ts +2 -7
  119. package/src/cli/commands/resume.ts +3 -6
  120. package/src/cli/commands/status.ts +2 -5
  121. package/src/cli/commands/stories.ts +2 -5
  122. package/src/cluster/adapters.ts +3 -12
  123. package/src/cluster/cluster-http-server.ts +187 -0
  124. package/src/cluster/heartbeat-manager.ts +112 -0
  125. package/src/cluster/raft-state-machine.ts +267 -0
  126. package/src/cluster/runtime.ts +71 -515
  127. package/src/integrations/jira/sync.ts +157 -215
  128. package/src/utils/cli-helpers.test.ts +138 -0
  129. package/src/utils/cli-helpers.ts +61 -0
  130. package/src/utils/github-cli.ts +4 -0
  131. package/src/utils/pr-sync.ts +1 -3
  132. package/src/utils/story-status.test.ts +74 -0
  133. package/src/utils/story-status.ts +62 -0
@@ -9,63 +9,13 @@ import { createLog } from '../../db/queries/logs.js';
9
9
  import { getStoryById, updateStory } from '../../db/queries/stories.js';
10
10
  import * as logger from '../../utils/logger.js';
11
11
  import { getHivePaths } from '../../utils/paths.js';
12
+ import { isForwardTransition, isStatusRegression } from '../../utils/story-status.js';
12
13
  import { JiraClient } from './client.js';
13
14
  import { createSubtask, postComment } from './comments.js';
14
15
  import { getIssue } from './issues.js';
15
16
  import { syncRequirementToJira, tryMoveToActiveSprint } from './stories.js';
16
17
  import { syncStoryStatusToJira, transitionJiraIssue } from './transitions.js';
17
- /**
18
- * Ordered lifecycle stages for Hive stories.
19
- * Used to prevent bidirectional sync from regressing story status.
20
- */
21
- const STATUS_LIFECYCLE_ORDER = [
22
- 'draft',
23
- 'estimated',
24
- 'planned',
25
- 'in_progress',
26
- 'review',
27
- 'qa',
28
- 'qa_failed',
29
- 'pr_submitted',
30
- 'merged',
31
- ];
32
- /**
33
- * Check if transitioning from currentStatus to newStatus would be a regression.
34
- * Returns true if the new status is earlier in the lifecycle than the current one.
35
- */
36
- function isStatusRegression(currentStatus, newStatus) {
37
- const currentIdx = STATUS_LIFECYCLE_ORDER.indexOf(currentStatus);
38
- const newIdx = STATUS_LIFECYCLE_ORDER.indexOf(newStatus);
39
- // If either status is unknown, allow the transition
40
- if (currentIdx === -1 || newIdx === -1)
41
- return false;
42
- return newIdx < currentIdx;
43
- }
44
- /**
45
- * Status progression order for the Hive pipeline.
46
- * Higher numbers represent further progress. Used to prevent
47
- * Jira sync from regressing stories backward.
48
- */
49
- const STATUS_ORDER = {
50
- draft: 0,
51
- estimated: 1,
52
- planned: 2,
53
- in_progress: 3,
54
- review: 4,
55
- pr_submitted: 5,
56
- qa: 6,
57
- qa_failed: 4, // allowed as a backward step from qa
58
- merged: 7,
59
- };
60
- /**
61
- * Check whether transitioning from currentStatus to newStatus is a
62
- * forward (or lateral) move in the pipeline.
63
- */
64
- export function isForwardTransition(currentStatus, newStatus) {
65
- const currentOrder = STATUS_ORDER[currentStatus] ?? -1;
66
- const newOrder = STATUS_ORDER[newStatus] ?? -1;
67
- return newOrder >= currentOrder;
68
- }
18
+ export { isForwardTransition };
69
19
  /**
70
20
  * Convert a Jira status name to a Hive status using the configured status mapping.
71
21
  * @param jiraStatusName - The Jira status name (e.g., "In Progress")
@@ -82,6 +32,66 @@ export function jiraStatusToHiveStatus(jiraStatusName, statusMapping) {
82
32
  }
83
33
  return null;
84
34
  }
35
+ /**
36
+ * Create a JiraClient from environment variables.
37
+ * Shared by all sync functions in this module.
38
+ */
39
+ function createJiraClient(tokenStore) {
40
+ loadEnvIntoProcess();
41
+ return new JiraClient({
42
+ tokenStore,
43
+ clientId: process.env.JIRA_CLIENT_ID || '',
44
+ clientSecret: process.env.JIRA_CLIENT_SECRET || '',
45
+ });
46
+ }
47
+ /**
48
+ * Shared loop used by both bidirectional sync functions.
49
+ *
50
+ * For each story, fetches the current Jira status, converts it to a Hive status
51
+ * via the configured mapping, skips if unmapped, then delegates to `onMappedStatus`
52
+ * for the direction-specific action. Catches and logs per-story errors so one
53
+ * failing story does not abort the entire batch.
54
+ *
55
+ * @param db - Database instance (used for error logging)
56
+ * @param client - Authenticated JiraClient
57
+ * @param config - Jira configuration with status_mapping
58
+ * @param stories - Stories to process
59
+ * @param getIssueKey - Returns the Jira issue key for a given story row
60
+ * @param onMappedStatus - Called when a Jira status is successfully mapped;
61
+ * returns true if the story was acted upon (counted toward the return value)
62
+ * @returns Number of stories acted upon
63
+ */
64
+ async function processBidirectionalStatusSync(db, client, config, stories, getIssueKey, onMappedStatus) {
65
+ let count = 0;
66
+ for (const story of stories) {
67
+ const issueKey = getIssueKey(story);
68
+ try {
69
+ const jiraIssue = await getIssue(client, issueKey, ['status']);
70
+ const jiraStatusName = jiraIssue.fields.status.name;
71
+ const mappedHiveStatus = jiraStatusToHiveStatus(jiraStatusName, config.status_mapping);
72
+ if (!mappedHiveStatus) {
73
+ logger.debug(`No Hive status mapping for Jira status "${jiraStatusName}" (${issueKey}), skipping`);
74
+ continue;
75
+ }
76
+ if (await onMappedStatus(story, issueKey, jiraStatusName, mappedHiveStatus)) {
77
+ count++;
78
+ }
79
+ }
80
+ catch (err) {
81
+ const message = err instanceof Error ? err.message : String(err);
82
+ logger.warn(`Failed to sync Jira status for story ${story.id} (${issueKey}): ${message}`);
83
+ createLog(db, {
84
+ agentId: 'manager',
85
+ storyId: story.id,
86
+ eventType: 'JIRA_SYNC_WARNING',
87
+ status: 'warn',
88
+ message: `Failed to sync status: ${message}`,
89
+ metadata: { jiraKey: issueKey, error: message },
90
+ });
91
+ }
92
+ }
93
+ return count;
94
+ }
85
95
  /**
86
96
  * Sync Jira issue statuses back to the Hive database.
87
97
  * This detects manual status changes in Jira (e.g., dragging cards on the board)
@@ -103,71 +113,40 @@ export async function syncJiraStatusesToHive(db, tokenStore, config) {
103
113
  if (storiesWithJira.length === 0) {
104
114
  return 0;
105
115
  }
106
- loadEnvIntoProcess();
107
- const client = new JiraClient({
108
- tokenStore,
109
- clientId: process.env.JIRA_CLIENT_ID || '',
110
- clientSecret: process.env.JIRA_CLIENT_SECRET || '',
111
- });
112
- let updatedCount = 0;
113
- for (const story of storiesWithJira) {
114
- try {
115
- // Fetch current Jira issue status
116
- const jiraIssue = await getIssue(client, story.external_issue_key, ['status']);
117
- const jiraStatusName = jiraIssue.fields.status.name;
118
- // Convert Jira status to Hive status
119
- const mappedHiveStatus = jiraStatusToHiveStatus(jiraStatusName, config.status_mapping);
120
- if (!mappedHiveStatus) {
121
- logger.debug(`No Hive status mapping for Jira status "${jiraStatusName}" (${story.external_issue_key}), skipping`);
122
- continue;
123
- }
124
- // Check if status differs from current Hive status
125
- // Guard: never regress status backward in the lifecycle
126
- if (isStatusRegression(story.status, mappedHiveStatus)) {
127
- logger.debug(`Skipping Jira sync for ${story.id}: would regress ${story.status} → ${mappedHiveStatus}`);
128
- continue;
129
- }
130
- if (mappedHiveStatus !== story.status) {
131
- // Only allow forward transitions — never regress stories backward
132
- if (!isForwardTransition(story.status, mappedHiveStatus)) {
133
- logger.debug(`Skipping backward Jira sync for story ${story.id} (${story.external_issue_key}): ` +
134
- `would regress ${story.status} → ${mappedHiveStatus} (Jira: "${jiraStatusName}")`);
135
- continue;
136
- }
137
- // Update the story status in Hive
138
- await withTransaction(db, () => {
139
- updateStory(db, story.id, { status: mappedHiveStatus });
140
- createLog(db, {
141
- agentId: 'manager',
142
- storyId: story.id,
143
- eventType: 'JIRA_SYNC_COMPLETED',
144
- message: `Synced status from Jira: ${story.status} → ${mappedHiveStatus} (Jira: "${jiraStatusName}")`,
145
- metadata: {
146
- jiraKey: story.external_issue_key,
147
- oldHiveStatus: story.status,
148
- newHiveStatus: mappedHiveStatus,
149
- jiraStatus: jiraStatusName,
150
- },
151
- });
152
- });
153
- logger.debug(`Synced Jira status for story ${story.id} (${story.external_issue_key}): ${story.status} → ${mappedHiveStatus}`);
154
- updatedCount++;
155
- }
116
+ const client = createJiraClient(tokenStore);
117
+ return processBidirectionalStatusSync(db, client, config, storiesWithJira, story => story.external_issue_key, async (story, issueKey, jiraStatusName, mappedHiveStatus) => {
118
+ // Guard: never regress status backward in the lifecycle
119
+ if (isStatusRegression(story.status, mappedHiveStatus)) {
120
+ logger.debug(`Skipping Jira sync for ${story.id}: would regress ${story.status} ${mappedHiveStatus}`);
121
+ return false;
156
122
  }
157
- catch (err) {
158
- const message = err instanceof Error ? err.message : String(err);
159
- logger.warn(`Failed to sync Jira status for story ${story.id} (${story.external_issue_key}): ${message}`);
123
+ if (mappedHiveStatus === story.status)
124
+ return false;
125
+ // Only allow forward transitions never regress stories backward
126
+ if (!isForwardTransition(story.status, mappedHiveStatus)) {
127
+ logger.debug(`Skipping backward Jira sync for story ${story.id} (${issueKey}): ` +
128
+ `would regress ${story.status} → ${mappedHiveStatus} (Jira: "${jiraStatusName}")`);
129
+ return false;
130
+ }
131
+ // Update the story status in Hive
132
+ await withTransaction(db, () => {
133
+ updateStory(db, story.id, { status: mappedHiveStatus });
160
134
  createLog(db, {
161
135
  agentId: 'manager',
162
136
  storyId: story.id,
163
- eventType: 'JIRA_SYNC_WARNING',
164
- status: 'warn',
165
- message: `Failed to sync status from Jira: ${message}`,
166
- metadata: { jiraKey: story.external_issue_key, error: message },
137
+ eventType: 'JIRA_SYNC_COMPLETED',
138
+ message: `Synced status from Jira: ${story.status} → ${mappedHiveStatus} (Jira: "${jiraStatusName}")`,
139
+ metadata: {
140
+ jiraKey: issueKey,
141
+ oldHiveStatus: story.status,
142
+ newHiveStatus: mappedHiveStatus,
143
+ jiraStatus: jiraStatusName,
144
+ },
167
145
  });
168
- }
169
- }
170
- return updatedCount;
146
+ });
147
+ logger.debug(`Synced Jira status for story ${story.id} (${issueKey}): ${story.status} → ${mappedHiveStatus}`);
148
+ return true;
149
+ });
171
150
  }
172
151
  /**
173
152
  * Detect stories that exist in the Hive DB but have no Jira issue key,
@@ -280,12 +259,7 @@ export async function repairMissedAssignmentHooks(db, tokenStore, config) {
280
259
  return 0;
281
260
  }
282
261
  logger.info(`Found ${storiesMissingSubtasks.length} assigned story(ies) missing Jira subtasks — repairing`);
283
- loadEnvIntoProcess();
284
- const client = new JiraClient({
285
- tokenStore,
286
- clientId: process.env.JIRA_CLIENT_ID || '',
287
- clientSecret: process.env.JIRA_CLIENT_SECRET || '',
288
- });
262
+ const client = createJiraClient(tokenStore);
289
263
  let repairedCount = 0;
290
264
  for (const story of storiesMissingSubtasks) {
291
265
  try {
@@ -364,12 +338,7 @@ export async function retrySprintAssignment(db, tokenStore, config) {
364
338
  return 0;
365
339
  }
366
340
  logger.info(`Found ${storiesNotInSprint.length} story(ies) not in sprint — retrying assignment`);
367
- loadEnvIntoProcess();
368
- const client = new JiraClient({
369
- tokenStore,
370
- clientId: process.env.JIRA_CLIENT_ID || '',
371
- clientSecret: process.env.JIRA_CLIENT_SECRET || '',
372
- });
341
+ const client = createJiraClient(tokenStore);
373
342
  const issueKeys = storiesNotInSprint.map(s => s.jira_issue_key).filter(Boolean);
374
343
  const moved = await tryMoveToActiveSprint(client, config, issueKeys);
375
344
  if (moved) {
@@ -401,66 +370,35 @@ export async function syncHiveStatusesToJira(db, tokenStore, config) {
401
370
  if (storiesWithJira.length === 0) {
402
371
  return 0;
403
372
  }
404
- loadEnvIntoProcess();
405
- const client = new JiraClient({
406
- tokenStore,
407
- clientId: process.env.JIRA_CLIENT_ID || '',
408
- clientSecret: process.env.JIRA_CLIENT_SECRET || '',
409
- });
410
- let pushedCount = 0;
411
- for (const story of storiesWithJira) {
412
- try {
413
- // Fetch current Jira issue status
414
- const jiraIssue = await getIssue(client, story.jira_issue_key, ['status']);
415
- const jiraStatusName = jiraIssue.fields.status.name;
416
- // Convert Jira status to Hive status to compare
417
- const jiraStatusAsHiveStatus = jiraStatusToHiveStatus(jiraStatusName, config.status_mapping);
418
- if (!jiraStatusAsHiveStatus) {
419
- logger.debug(`No Hive status mapping for Jira status "${jiraStatusName}" (${story.jira_issue_key}), skipping`);
420
- continue;
421
- }
422
- // Check if Hive status is ahead of Jira status
423
- if (story.status !== jiraStatusAsHiveStatus) {
424
- // Only push forward transitions — never regress Jira backward
425
- if (!isForwardTransition(jiraStatusAsHiveStatus, story.status)) {
426
- logger.debug(`Skipping Hive-to-Jira push for story ${story.id} (${story.jira_issue_key}): ` +
427
- `would regress Jira from ${jiraStatusAsHiveStatus} → ${story.status} (Jira: "${jiraStatusName}")`);
428
- continue;
429
- }
430
- // Push the Hive status to Jira
431
- const transitioned = await transitionJiraIssue(client, story.jira_issue_key, story.status, config.status_mapping);
432
- if (transitioned) {
433
- createLog(db, {
434
- agentId: 'manager',
435
- storyId: story.id,
436
- eventType: 'JIRA_SYNC_COMPLETED',
437
- message: `Pushed status to Jira: ${jiraStatusAsHiveStatus} → ${story.status} (was Jira: "${jiraStatusName}")`,
438
- metadata: {
439
- jiraKey: story.jira_issue_key,
440
- oldJiraStatus: jiraStatusName,
441
- oldHiveStatus: jiraStatusAsHiveStatus,
442
- newHiveStatus: story.status,
443
- },
444
- });
445
- logger.debug(`Pushed Hive status to Jira for story ${story.id} (${story.jira_issue_key}): ${jiraStatusAsHiveStatus} → ${story.status}`);
446
- pushedCount++;
447
- }
448
- }
373
+ const client = createJiraClient(tokenStore);
374
+ return processBidirectionalStatusSync(db, client, config, storiesWithJira, story => story.jira_issue_key, async (story, issueKey, jiraStatusName, jiraStatusAsHiveStatus) => {
375
+ if (story.status === jiraStatusAsHiveStatus)
376
+ return false;
377
+ // Only push forward transitions — never regress Jira backward
378
+ if (!isForwardTransition(jiraStatusAsHiveStatus, story.status)) {
379
+ logger.debug(`Skipping Hive-to-Jira push for story ${story.id} (${issueKey}): ` +
380
+ `would regress Jira from ${jiraStatusAsHiveStatus} → ${story.status} (Jira: "${jiraStatusName}")`);
381
+ return false;
449
382
  }
450
- catch (err) {
451
- const message = err instanceof Error ? err.message : String(err);
452
- logger.warn(`Failed to push Hive status to Jira for story ${story.id} (${story.jira_issue_key}): ${message}`);
383
+ // Push the Hive status to Jira
384
+ const transitioned = await transitionJiraIssue(client, issueKey, story.status, config.status_mapping);
385
+ if (transitioned) {
453
386
  createLog(db, {
454
387
  agentId: 'manager',
455
388
  storyId: story.id,
456
- eventType: 'JIRA_SYNC_WARNING',
457
- status: 'warn',
458
- message: `Failed to push status to Jira: ${message}`,
459
- metadata: { jiraKey: story.jira_issue_key, error: message },
389
+ eventType: 'JIRA_SYNC_COMPLETED',
390
+ message: `Pushed status to Jira: ${jiraStatusAsHiveStatus} → ${story.status} (was Jira: "${jiraStatusName}")`,
391
+ metadata: {
392
+ jiraKey: issueKey,
393
+ oldJiraStatus: jiraStatusName,
394
+ oldHiveStatus: jiraStatusAsHiveStatus,
395
+ newHiveStatus: story.status,
396
+ },
460
397
  });
398
+ logger.debug(`Pushed Hive status to Jira for story ${story.id} (${issueKey}): ${jiraStatusAsHiveStatus} → ${story.status}`);
461
399
  }
462
- }
463
- return pushedCount;
400
+ return transitioned;
401
+ });
464
402
  }
465
403
  /**
466
404
  * Top-level entry point for Jira bidirectional sync.
@@ -1 +1 @@
1
- {"version":3,"file":"sync.js","sourceRoot":"","sources":["../../../src/integrations/jira/sync.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"sync.js","sourceRoot":"","sources":["../../../src/integrations/jira/sync.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ import type { Database } from 'sql.js';
2
+ import type { AgentRow, PullRequestRow, StoryRow } from '../db/client.js';
3
+ /**
4
+ * Require a story by ID, exit with error if not found.
5
+ */
6
+ export declare function requireStory(db: Database, storyId: string): StoryRow;
7
+ /**
8
+ * Require an agent by ID, exit with error if not found.
9
+ */
10
+ export declare function requireAgent(db: Database, agentId: string): AgentRow;
11
+ /**
12
+ * Require an active agent by tmux session name, exit with error if not found or terminated.
13
+ */
14
+ export declare function requireAgentBySession(db: Database, session: string): AgentRow;
15
+ /**
16
+ * Require a pull request by ID, exit with error if not found.
17
+ */
18
+ export declare function requirePullRequest(db: Database, prId: string): PullRequestRow;
19
+ //# sourceMappingURL=cli-helpers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli-helpers.d.ts","sourceRoot":"","sources":["../../src/utils/cli-helpers.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAC;AACvC,OAAO,KAAK,EAAE,QAAQ,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAM1E;;GAEG;AACH,wBAAgB,YAAY,CAAC,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,GAAG,QAAQ,CAOpE;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,GAAG,QAAQ,CAOpE;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,GAAG,QAAQ,CAW7E;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,GAAG,cAAc,CAO7E"}
@@ -0,0 +1,51 @@
1
+ // Licensed under the Hungry Ghost Hive License. See LICENSE.
2
+ import chalk from 'chalk';
3
+ import { queryOne } from '../db/client.js';
4
+ import { getAgentById } from '../db/queries/agents.js';
5
+ import { getPullRequestById } from '../db/queries/pull-requests.js';
6
+ import { getStoryById } from '../db/queries/stories.js';
7
+ /**
8
+ * Require a story by ID, exit with error if not found.
9
+ */
10
+ export function requireStory(db, storyId) {
11
+ const story = getStoryById(db, storyId);
12
+ if (!story) {
13
+ console.error(chalk.red(`Story not found: ${storyId}`));
14
+ process.exit(1);
15
+ }
16
+ return story;
17
+ }
18
+ /**
19
+ * Require an agent by ID, exit with error if not found.
20
+ */
21
+ export function requireAgent(db, agentId) {
22
+ const agent = getAgentById(db, agentId);
23
+ if (!agent) {
24
+ console.error(chalk.red(`Agent not found: ${agentId}`));
25
+ process.exit(1);
26
+ }
27
+ return agent;
28
+ }
29
+ /**
30
+ * Require an active agent by tmux session name, exit with error if not found or terminated.
31
+ */
32
+ export function requireAgentBySession(db, session) {
33
+ const agent = queryOne(db, "SELECT * FROM agents WHERE tmux_session = ? AND status != 'terminated'", [session]);
34
+ if (!agent) {
35
+ console.error(chalk.red(`No agent found with session: ${session}`));
36
+ process.exit(1);
37
+ }
38
+ return agent;
39
+ }
40
+ /**
41
+ * Require a pull request by ID, exit with error if not found.
42
+ */
43
+ export function requirePullRequest(db, prId) {
44
+ const pr = getPullRequestById(db, prId);
45
+ if (!pr) {
46
+ console.error(chalk.red(`PR not found: ${prId}`));
47
+ process.exit(1);
48
+ }
49
+ return pr;
50
+ }
51
+ //# sourceMappingURL=cli-helpers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli-helpers.js","sourceRoot":"","sources":["../../src/utils/cli-helpers.ts"],"names":[],"mappings":"AAAA,6DAA6D;AAE7D,OAAO,KAAK,MAAM,OAAO,CAAC;AAG1B,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAC3C,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AACvD,OAAO,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAC;AACpE,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAExD;;GAEG;AACH,MAAM,UAAU,YAAY,CAAC,EAAY,EAAE,OAAe;IACxD,MAAM,KAAK,GAAG,YAAY,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;IACxC,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,oBAAoB,OAAO,EAAE,CAAC,CAAC,CAAC;QACxD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,YAAY,CAAC,EAAY,EAAE,OAAe;IACxD,MAAM,KAAK,GAAG,YAAY,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;IACxC,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,oBAAoB,OAAO,EAAE,CAAC,CAAC,CAAC;QACxD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,qBAAqB,CAAC,EAAY,EAAE,OAAe;IACjE,MAAM,KAAK,GAAG,QAAQ,CACpB,EAAE,EACF,wEAAwE,EACxE,CAAC,OAAO,CAAC,CACV,CAAC;IACF,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,gCAAgC,OAAO,EAAE,CAAC,CAAC,CAAC;QACpE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,kBAAkB,CAAC,EAAY,EAAE,IAAY;IAC3D,MAAM,EAAE,GAAG,kBAAkB,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;IACxC,IAAI,CAAC,EAAE,EAAE,CAAC;QACR,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,iBAAiB,IAAI,EAAE,CAAC,CAAC,CAAC;QAClD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IACD,OAAO,EAAE,CAAC;AACZ,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=cli-helpers.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli-helpers.test.d.ts","sourceRoot":"","sources":["../../src/utils/cli-helpers.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,100 @@
1
+ // Licensed under the Hungry Ghost Hive License. See LICENSE.
2
+ import { beforeEach, describe, expect, it, vi } from 'vitest';
3
+ vi.mock('../db/client.js', () => ({
4
+ queryOne: vi.fn(),
5
+ }));
6
+ vi.mock('../db/queries/agents.js', () => ({
7
+ getAgentById: vi.fn(),
8
+ }));
9
+ vi.mock('../db/queries/pull-requests.js', () => ({
10
+ getPullRequestById: vi.fn(),
11
+ }));
12
+ vi.mock('../db/queries/stories.js', () => ({
13
+ getStoryById: vi.fn(),
14
+ }));
15
+ import { queryOne } from '../db/client.js';
16
+ import { getAgentById } from '../db/queries/agents.js';
17
+ import { getPullRequestById } from '../db/queries/pull-requests.js';
18
+ import { getStoryById } from '../db/queries/stories.js';
19
+ import { requireAgent, requireAgentBySession, requirePullRequest, requireStory, } from './cli-helpers.js';
20
+ const mockDb = {};
21
+ beforeEach(() => {
22
+ vi.clearAllMocks();
23
+ });
24
+ describe('requireStory', () => {
25
+ it('returns the story when found', () => {
26
+ const story = { id: 'STORY-1', title: 'Test' };
27
+ vi.mocked(getStoryById).mockReturnValue(story);
28
+ const result = requireStory(mockDb, 'STORY-1');
29
+ expect(result).toBe(story);
30
+ expect(getStoryById).toHaveBeenCalledWith(mockDb, 'STORY-1');
31
+ });
32
+ it('exits with error when story not found', () => {
33
+ vi.mocked(getStoryById).mockReturnValue(undefined);
34
+ const errorSpy = vi.spyOn(console, 'error').mockImplementation(() => { });
35
+ const exitSpy = vi.spyOn(process, 'exit').mockImplementation((() => {
36
+ throw new Error('process.exit called');
37
+ }));
38
+ expect(() => requireStory(mockDb, 'STORY-99')).toThrow('process.exit called');
39
+ expect(errorSpy).toHaveBeenCalledWith(expect.stringContaining('Story not found: STORY-99'));
40
+ expect(exitSpy).toHaveBeenCalledWith(1);
41
+ });
42
+ });
43
+ describe('requireAgent', () => {
44
+ it('returns the agent when found', () => {
45
+ const agent = { id: 'agent-1', type: 'senior' };
46
+ vi.mocked(getAgentById).mockReturnValue(agent);
47
+ const result = requireAgent(mockDb, 'agent-1');
48
+ expect(result).toBe(agent);
49
+ expect(getAgentById).toHaveBeenCalledWith(mockDb, 'agent-1');
50
+ });
51
+ it('exits with error when agent not found', () => {
52
+ vi.mocked(getAgentById).mockReturnValue(undefined);
53
+ const errorSpy = vi.spyOn(console, 'error').mockImplementation(() => { });
54
+ const exitSpy = vi.spyOn(process, 'exit').mockImplementation((() => {
55
+ throw new Error('process.exit called');
56
+ }));
57
+ expect(() => requireAgent(mockDb, 'agent-99')).toThrow('process.exit called');
58
+ expect(errorSpy).toHaveBeenCalledWith(expect.stringContaining('Agent not found: agent-99'));
59
+ expect(exitSpy).toHaveBeenCalledWith(1);
60
+ });
61
+ });
62
+ describe('requireAgentBySession', () => {
63
+ it('returns the agent when session matches', () => {
64
+ const agent = { id: 'agent-1', tmux_session: 'hive-senior-team' };
65
+ vi.mocked(queryOne).mockReturnValue(agent);
66
+ const result = requireAgentBySession(mockDb, 'hive-senior-team');
67
+ expect(result).toBe(agent);
68
+ expect(queryOne).toHaveBeenCalledWith(mockDb, expect.stringContaining("status != 'terminated'"), ['hive-senior-team']);
69
+ });
70
+ it('exits with error when session not found', () => {
71
+ vi.mocked(queryOne).mockReturnValue(undefined);
72
+ const errorSpy = vi.spyOn(console, 'error').mockImplementation(() => { });
73
+ const exitSpy = vi.spyOn(process, 'exit').mockImplementation((() => {
74
+ throw new Error('process.exit called');
75
+ }));
76
+ expect(() => requireAgentBySession(mockDb, 'unknown-session')).toThrow('process.exit called');
77
+ expect(errorSpy).toHaveBeenCalledWith(expect.stringContaining('No agent found with session: unknown-session'));
78
+ expect(exitSpy).toHaveBeenCalledWith(1);
79
+ });
80
+ });
81
+ describe('requirePullRequest', () => {
82
+ it('returns the PR when found', () => {
83
+ const pr = { id: 'pr-1', branch_name: 'feature/test' };
84
+ vi.mocked(getPullRequestById).mockReturnValue(pr);
85
+ const result = requirePullRequest(mockDb, 'pr-1');
86
+ expect(result).toBe(pr);
87
+ expect(getPullRequestById).toHaveBeenCalledWith(mockDb, 'pr-1');
88
+ });
89
+ it('exits with error when PR not found', () => {
90
+ vi.mocked(getPullRequestById).mockReturnValue(undefined);
91
+ const errorSpy = vi.spyOn(console, 'error').mockImplementation(() => { });
92
+ const exitSpy = vi.spyOn(process, 'exit').mockImplementation((() => {
93
+ throw new Error('process.exit called');
94
+ }));
95
+ expect(() => requirePullRequest(mockDb, 'pr-99')).toThrow('process.exit called');
96
+ expect(errorSpy).toHaveBeenCalledWith(expect.stringContaining('PR not found: pr-99'));
97
+ expect(exitSpy).toHaveBeenCalledWith(1);
98
+ });
99
+ });
100
+ //# sourceMappingURL=cli-helpers.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli-helpers.test.js","sourceRoot":"","sources":["../../src/utils/cli-helpers.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ /** Default timeout in ms for GitHub CLI operations */
2
+ export declare const GH_CLI_TIMEOUT_MS = 30000;
3
+ //# sourceMappingURL=github-cli.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"github-cli.d.ts","sourceRoot":"","sources":["../../src/utils/github-cli.ts"],"names":[],"mappings":"AAEA,sDAAsD;AACtD,eAAO,MAAM,iBAAiB,QAAQ,CAAC"}
@@ -0,0 +1,4 @@
1
+ // Licensed under the Hungry Ghost Hive License. See LICENSE.
2
+ /** Default timeout in ms for GitHub CLI operations */
3
+ export const GH_CLI_TIMEOUT_MS = 30000;
4
+ //# sourceMappingURL=github-cli.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"github-cli.js","sourceRoot":"","sources":["../../src/utils/github-cli.ts"],"names":[],"mappings":"AAAA,6DAA6D;AAE7D,sDAAsD;AACtD,MAAM,CAAC,MAAM,iBAAiB,GAAG,KAAK,CAAC"}