steroids-cli 0.12.6 → 0.12.7

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 (182) hide show
  1. package/README.md +52 -0
  2. package/dist/commands/gc.d.ts.map +1 -1
  3. package/dist/commands/gc.js +10 -0
  4. package/dist/commands/gc.js.map +1 -1
  5. package/dist/commands/llm-content.d.ts +2 -0
  6. package/dist/commands/llm-content.d.ts.map +1 -0
  7. package/dist/commands/llm-content.js +319 -0
  8. package/dist/commands/llm-content.js.map +1 -0
  9. package/dist/commands/llm.d.ts.map +1 -1
  10. package/dist/commands/llm.js +22 -290
  11. package/dist/commands/llm.js.map +1 -1
  12. package/dist/commands/loop-phases-coder.js +1 -1
  13. package/dist/commands/loop-phases-coder.js.map +1 -1
  14. package/dist/commands/loop-phases-reviewer-follow-ups.d.ts +7 -0
  15. package/dist/commands/loop-phases-reviewer-follow-ups.d.ts.map +1 -0
  16. package/dist/commands/loop-phases-reviewer-follow-ups.js +44 -0
  17. package/dist/commands/loop-phases-reviewer-follow-ups.js.map +1 -0
  18. package/dist/commands/loop-phases-reviewer.d.ts.map +1 -1
  19. package/dist/commands/loop-phases-reviewer.js +6 -45
  20. package/dist/commands/loop-phases-reviewer.js.map +1 -1
  21. package/dist/config/loader.d.ts +4 -0
  22. package/dist/config/loader.d.ts.map +1 -1
  23. package/dist/config/loader.js +27 -0
  24. package/dist/config/loader.js.map +1 -1
  25. package/dist/config/schema.d.ts.map +1 -1
  26. package/dist/config/schema.js +111 -0
  27. package/dist/config/schema.js.map +1 -1
  28. package/dist/config/validator.d.ts.map +1 -1
  29. package/dist/config/validator.js +74 -0
  30. package/dist/config/validator.js.map +1 -1
  31. package/dist/database/intake-queries.d.ts +51 -0
  32. package/dist/database/intake-queries.d.ts.map +1 -0
  33. package/dist/database/intake-queries.js +250 -0
  34. package/dist/database/intake-queries.js.map +1 -0
  35. package/dist/database/queries.d.ts +4 -0
  36. package/dist/database/queries.d.ts.map +1 -1
  37. package/dist/database/queries.js.map +1 -1
  38. package/dist/database/schema.d.ts +2 -2
  39. package/dist/database/schema.d.ts.map +1 -1
  40. package/dist/database/schema.js +49 -0
  41. package/dist/database/schema.js.map +1 -1
  42. package/dist/git/section-pr.d.ts +3 -2
  43. package/dist/git/section-pr.d.ts.map +1 -1
  44. package/dist/git/section-pr.js +95 -15
  45. package/dist/git/section-pr.js.map +1 -1
  46. package/dist/hooks/events.d.ts +10 -1
  47. package/dist/hooks/events.d.ts.map +1 -1
  48. package/dist/hooks/events.js +23 -1
  49. package/dist/hooks/events.js.map +1 -1
  50. package/dist/hooks/integration.d.ts +22 -0
  51. package/dist/hooks/integration.d.ts.map +1 -1
  52. package/dist/hooks/integration.js +52 -0
  53. package/dist/hooks/integration.js.map +1 -1
  54. package/dist/hooks/payload-factories.d.ts +17 -0
  55. package/dist/hooks/payload-factories.d.ts.map +1 -0
  56. package/dist/hooks/payload-factories.js +69 -0
  57. package/dist/hooks/payload-factories.js.map +1 -0
  58. package/dist/hooks/payload-types.d.ts +169 -0
  59. package/dist/hooks/payload-types.d.ts.map +1 -0
  60. package/dist/hooks/payload-types.js +3 -0
  61. package/dist/hooks/payload-types.js.map +1 -0
  62. package/dist/hooks/payload-validation.d.ts +6 -0
  63. package/dist/hooks/payload-validation.d.ts.map +1 -0
  64. package/dist/hooks/payload-validation.js +186 -0
  65. package/dist/hooks/payload-validation.js.map +1 -0
  66. package/dist/hooks/payload.d.ts +6 -334
  67. package/dist/hooks/payload.d.ts.map +1 -1
  68. package/dist/hooks/payload.js +21 -307
  69. package/dist/hooks/payload.js.map +1 -1
  70. package/dist/hooks/template-resolvers.d.ts +9 -0
  71. package/dist/hooks/template-resolvers.d.ts.map +1 -0
  72. package/dist/hooks/template-resolvers.js +133 -0
  73. package/dist/hooks/template-resolvers.js.map +1 -0
  74. package/dist/hooks/templates.d.ts +13 -0
  75. package/dist/hooks/templates.d.ts.map +1 -1
  76. package/dist/hooks/templates.js +40 -118
  77. package/dist/hooks/templates.js.map +1 -1
  78. package/dist/index.js +2 -0
  79. package/dist/index.js.map +1 -1
  80. package/dist/intake/github-gate-api.d.ts +37 -0
  81. package/dist/intake/github-gate-api.d.ts.map +1 -0
  82. package/dist/intake/github-gate-api.js +210 -0
  83. package/dist/intake/github-gate-api.js.map +1 -0
  84. package/dist/intake/github-gate.d.ts +22 -0
  85. package/dist/intake/github-gate.d.ts.map +1 -0
  86. package/dist/intake/github-gate.js +261 -0
  87. package/dist/intake/github-gate.js.map +1 -0
  88. package/dist/intake/github-issues-connector.d.ts +26 -0
  89. package/dist/intake/github-issues-connector.d.ts.map +1 -0
  90. package/dist/intake/github-issues-connector.js +350 -0
  91. package/dist/intake/github-issues-connector.js.map +1 -0
  92. package/dist/intake/index.d.ts +10 -0
  93. package/dist/intake/index.d.ts.map +1 -0
  94. package/dist/intake/index.js +26 -0
  95. package/dist/intake/index.js.map +1 -0
  96. package/dist/intake/pipeline-glue.d.ts +61 -0
  97. package/dist/intake/pipeline-glue.d.ts.map +1 -0
  98. package/dist/intake/pipeline-glue.js +137 -0
  99. package/dist/intake/pipeline-glue.js.map +1 -0
  100. package/dist/intake/poller.d.ts +28 -0
  101. package/dist/intake/poller.d.ts.map +1 -0
  102. package/dist/intake/poller.js +186 -0
  103. package/dist/intake/poller.js.map +1 -0
  104. package/dist/intake/post-pr.d.ts +17 -0
  105. package/dist/intake/post-pr.d.ts.map +1 -0
  106. package/dist/intake/post-pr.js +78 -0
  107. package/dist/intake/post-pr.js.map +1 -0
  108. package/dist/intake/registry.d.ts +17 -0
  109. package/dist/intake/registry.d.ts.map +1 -0
  110. package/dist/intake/registry.js +57 -0
  111. package/dist/intake/registry.js.map +1 -0
  112. package/dist/intake/reviewer-approval.d.ts +10 -0
  113. package/dist/intake/reviewer-approval.d.ts.map +1 -0
  114. package/dist/intake/reviewer-approval.js +70 -0
  115. package/dist/intake/reviewer-approval.js.map +1 -0
  116. package/dist/intake/task-reference.d.ts +10 -0
  117. package/dist/intake/task-reference.d.ts.map +1 -0
  118. package/dist/intake/task-reference.js +23 -0
  119. package/dist/intake/task-reference.js.map +1 -0
  120. package/dist/intake/task-templates.d.ts +25 -0
  121. package/dist/intake/task-templates.d.ts.map +1 -0
  122. package/dist/intake/task-templates.js +98 -0
  123. package/dist/intake/task-templates.js.map +1 -0
  124. package/dist/intake/types.d.ts +103 -0
  125. package/dist/intake/types.d.ts.map +1 -0
  126. package/dist/intake/types.js +3 -0
  127. package/dist/intake/types.js.map +1 -0
  128. package/dist/orchestrator/coder.d.ts +2 -0
  129. package/dist/orchestrator/coder.d.ts.map +1 -1
  130. package/dist/orchestrator/coder.js +25 -2
  131. package/dist/orchestrator/coder.js.map +1 -1
  132. package/dist/providers/gemini.d.ts.map +1 -1
  133. package/dist/providers/gemini.js +7 -14
  134. package/dist/providers/gemini.js.map +1 -1
  135. package/dist/providers/interface.d.ts.map +1 -1
  136. package/dist/providers/interface.js +50 -0
  137. package/dist/providers/interface.js.map +1 -1
  138. package/dist/runners/orchestrator-loop.d.ts.map +1 -1
  139. package/dist/runners/orchestrator-loop.js +7 -0
  140. package/dist/runners/orchestrator-loop.js.map +1 -1
  141. package/dist/runners/system-pressure.d.ts +26 -0
  142. package/dist/runners/system-pressure.d.ts.map +1 -0
  143. package/dist/runners/system-pressure.js +128 -0
  144. package/dist/runners/system-pressure.js.map +1 -0
  145. package/dist/runners/wakeup-checks.d.ts.map +1 -1
  146. package/dist/runners/wakeup-checks.js +16 -1
  147. package/dist/runners/wakeup-checks.js.map +1 -1
  148. package/dist/runners/wakeup-global-cleanup.d.ts +20 -0
  149. package/dist/runners/wakeup-global-cleanup.d.ts.map +1 -0
  150. package/dist/runners/wakeup-global-cleanup.js +317 -0
  151. package/dist/runners/wakeup-global-cleanup.js.map +1 -0
  152. package/dist/runners/wakeup-needed.d.ts +5 -0
  153. package/dist/runners/wakeup-needed.d.ts.map +1 -0
  154. package/dist/runners/wakeup-needed.js +42 -0
  155. package/dist/runners/wakeup-needed.js.map +1 -0
  156. package/dist/runners/wakeup-project-parallel.d.ts +13 -0
  157. package/dist/runners/wakeup-project-parallel.d.ts.map +1 -0
  158. package/dist/runners/wakeup-project-parallel.js +238 -0
  159. package/dist/runners/wakeup-project-parallel.js.map +1 -0
  160. package/dist/runners/wakeup-project.d.ts +10 -0
  161. package/dist/runners/wakeup-project.d.ts.map +1 -0
  162. package/dist/runners/wakeup-project.js +209 -0
  163. package/dist/runners/wakeup-project.js.map +1 -0
  164. package/dist/runners/wakeup-registration.d.ts +2 -0
  165. package/dist/runners/wakeup-registration.d.ts.map +1 -0
  166. package/dist/runners/wakeup-registration.js +42 -0
  167. package/dist/runners/wakeup-registration.js.map +1 -0
  168. package/dist/runners/wakeup-types.d.ts +25 -0
  169. package/dist/runners/wakeup-types.d.ts.map +1 -0
  170. package/dist/runners/wakeup-types.js +3 -0
  171. package/dist/runners/wakeup-types.js.map +1 -0
  172. package/dist/runners/wakeup.d.ts +4 -24
  173. package/dist/runners/wakeup.d.ts.map +1 -1
  174. package/dist/runners/wakeup.js +25 -601
  175. package/dist/runners/wakeup.js.map +1 -1
  176. package/dist/workspace/pool.d.ts.map +1 -1
  177. package/dist/workspace/pool.js +37 -4
  178. package/dist/workspace/pool.js.map +1 -1
  179. package/migrations/025_add_intake_tables.sql +51 -0
  180. package/migrations/026_add_section_coder_and_pr_fields.sql +11 -0
  181. package/migrations/manifest.json +18 -2
  182. package/package.json +1 -1
@@ -0,0 +1,186 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.pollIntakeProject = pollIntakeProject;
4
+ exports.countPersistedIntakeReports = countPersistedIntakeReports;
5
+ const intake_queries_js_1 = require("../database/intake-queries.js");
6
+ const registry_js_1 = require("./registry.js");
7
+ const integration_js_1 = require("../hooks/integration.js");
8
+ const DEFAULT_POLL_INTERVAL_MINUTES = 15;
9
+ const DEFAULT_MAX_REPORTS_PER_POLL = 50;
10
+ function normalizePositiveInteger(value, fallback) {
11
+ if (Number.isInteger(value) && value !== undefined && value > 0) {
12
+ return value;
13
+ }
14
+ return fallback;
15
+ }
16
+ function parseTimestampMs(value) {
17
+ if (!value) {
18
+ return null;
19
+ }
20
+ const parsed = Date.parse(value);
21
+ return Number.isFinite(parsed) ? parsed : null;
22
+ }
23
+ function shouldPollConnector(lastPolledAt, pollIntervalMs, nowMs) {
24
+ const lastPolledAtMs = parseTimestampMs(lastPolledAt);
25
+ if (lastPolledAtMs === null) {
26
+ return true;
27
+ }
28
+ return nowMs - lastPolledAtMs >= pollIntervalMs;
29
+ }
30
+ function summarizePollResults(results) {
31
+ if (results.length === 0) {
32
+ return {
33
+ status: 'skipped',
34
+ reason: 'No enabled intake connectors',
35
+ totalReportsPersisted: 0,
36
+ connectorResults: [],
37
+ };
38
+ }
39
+ const totalReportsPersisted = results.reduce((sum, result) => sum + result.reportsPersisted, 0);
40
+ const successCount = results.filter((result) => result.status === 'success').length;
41
+ const errorCount = results.filter((result) => result.status === 'error').length;
42
+ if (successCount === 0 && errorCount === 0) {
43
+ return {
44
+ status: 'skipped',
45
+ reason: 'No intake connectors were due for polling',
46
+ totalReportsPersisted,
47
+ connectorResults: results,
48
+ };
49
+ }
50
+ if (errorCount === 0) {
51
+ return {
52
+ status: 'success',
53
+ reason: `Persisted ${totalReportsPersisted} intake report(s) across ${successCount} connector(s)`,
54
+ totalReportsPersisted,
55
+ connectorResults: results,
56
+ };
57
+ }
58
+ if (successCount === 0) {
59
+ return {
60
+ status: 'error',
61
+ reason: `Intake polling failed for ${errorCount} connector(s)`,
62
+ totalReportsPersisted,
63
+ connectorResults: results,
64
+ };
65
+ }
66
+ return {
67
+ status: 'partial',
68
+ reason: `Persisted ${totalReportsPersisted} intake report(s); ${errorCount} connector(s) failed`,
69
+ totalReportsPersisted,
70
+ connectorResults: results,
71
+ };
72
+ }
73
+ async function pollIntakeProject(options) {
74
+ const { projectDb, config, dryRun = false, now = () => new Date(), createRegistry = registry_js_1.createIntakeRegistry, } = options;
75
+ if (dryRun) {
76
+ return {
77
+ status: 'skipped',
78
+ reason: 'Dry-run mode does not poll intake connectors',
79
+ totalReportsPersisted: 0,
80
+ connectorResults: [],
81
+ };
82
+ }
83
+ if (config.intake?.enabled !== true) {
84
+ return {
85
+ status: 'skipped',
86
+ reason: 'Intake disabled',
87
+ totalReportsPersisted: 0,
88
+ connectorResults: [],
89
+ };
90
+ }
91
+ let registry;
92
+ try {
93
+ registry = createRegistry(config);
94
+ }
95
+ catch (error) {
96
+ return {
97
+ status: 'error',
98
+ reason: error instanceof Error ? error.message : String(error),
99
+ totalReportsPersisted: 0,
100
+ connectorResults: [],
101
+ };
102
+ }
103
+ const pollIntervalMinutes = normalizePositiveInteger(config.intake.pollIntervalMinutes, DEFAULT_POLL_INTERVAL_MINUTES);
104
+ const maxReportsPerPoll = normalizePositiveInteger(config.intake.maxReportsPerPoll, DEFAULT_MAX_REPORTS_PER_POLL);
105
+ const pollIntervalMs = pollIntervalMinutes * 60_000;
106
+ const connectorResults = [];
107
+ const connectors = registry
108
+ .getAll()
109
+ .filter((connector) => connector.capabilities.pull)
110
+ .sort((left, right) => left.source.localeCompare(right.source));
111
+ for (const connector of connectors) {
112
+ const startedAt = now().toISOString();
113
+ const state = (0, intake_queries_js_1.getIntakePollState)(projectDb, connector.source);
114
+ if (!shouldPollConnector(state?.lastPolledAt, pollIntervalMs, Date.parse(startedAt))) {
115
+ connectorResults.push({
116
+ source: connector.source,
117
+ status: 'skipped',
118
+ reportsPersisted: 0,
119
+ nextCursor: state?.cursor ?? null,
120
+ reason: 'Poll interval has not elapsed',
121
+ });
122
+ continue;
123
+ }
124
+ try {
125
+ // lastSuccessAt only advances when a connector sweep reaches its terminal page.
126
+ // This keeps page-based cursor continuation anchored to the last completed watermark.
127
+ const pullResult = await connector.pullReports({
128
+ cursor: state?.cursor ?? undefined,
129
+ limit: maxReportsPerPoll,
130
+ since: state?.lastSuccessAt ?? undefined,
131
+ });
132
+ const newlyReceived = projectDb.transaction(() => {
133
+ const reportsToTrigger = [];
134
+ for (const report of pullResult.reports) {
135
+ const existing = (0, intake_queries_js_1.getIntakeReport)(projectDb, report.source, report.externalId);
136
+ const stored = (0, intake_queries_js_1.upsertIntakeReport)(projectDb, report);
137
+ if (!existing) {
138
+ reportsToTrigger.push(stored);
139
+ }
140
+ }
141
+ (0, intake_queries_js_1.upsertIntakePollState)(projectDb, {
142
+ source: connector.source,
143
+ cursor: pullResult.nextCursor ?? null,
144
+ lastPolledAt: startedAt,
145
+ lastSuccessAt: pullResult.nextCursor ? state?.lastSuccessAt ?? null : startedAt,
146
+ lastErrorAt: null,
147
+ lastErrorMessage: null,
148
+ });
149
+ return reportsToTrigger;
150
+ })();
151
+ for (const report of newlyReceived) {
152
+ await (0, integration_js_1.triggerHooksSafely)(() => (0, integration_js_1.triggerIntakeReceived)(report, { projectPath: options.projectPath }), { verbose: false });
153
+ }
154
+ connectorResults.push({
155
+ source: connector.source,
156
+ status: 'success',
157
+ reportsPersisted: pullResult.reports.length,
158
+ nextCursor: pullResult.nextCursor ?? null,
159
+ reason: pullResult.reports.length > 0
160
+ ? `Persisted ${pullResult.reports.length} report(s)`
161
+ : 'No updated reports',
162
+ });
163
+ }
164
+ catch (error) {
165
+ const message = error instanceof Error ? error.message : String(error);
166
+ (0, intake_queries_js_1.upsertIntakePollState)(projectDb, {
167
+ source: connector.source,
168
+ lastPolledAt: startedAt,
169
+ lastErrorAt: startedAt,
170
+ lastErrorMessage: message,
171
+ });
172
+ connectorResults.push({
173
+ source: connector.source,
174
+ status: 'error',
175
+ reportsPersisted: 0,
176
+ nextCursor: state?.cursor ?? null,
177
+ reason: message,
178
+ });
179
+ }
180
+ }
181
+ return summarizePollResults(connectorResults);
182
+ }
183
+ function countPersistedIntakeReports(projectDb) {
184
+ return (0, intake_queries_js_1.listIntakeReports)(projectDb).length;
185
+ }
186
+ //# sourceMappingURL=poller.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"poller.js","sourceRoot":"","sources":["../../src/intake/poller.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ import type Database from 'better-sqlite3';
2
+ import type { SteroidsConfig } from '../config/loader.js';
3
+ import { type IntakeRegistry } from './registry.js';
4
+ export interface HandleIntakePostPROptions {
5
+ db: Database.Database;
6
+ sectionId: string | null | undefined;
7
+ prNumber: number | null;
8
+ config: SteroidsConfig;
9
+ projectPath?: string;
10
+ createRegistry?: (config: Partial<SteroidsConfig>) => IntakeRegistry;
11
+ }
12
+ export interface IntakePostPRResult {
13
+ handled: boolean;
14
+ reportsResolved: number;
15
+ }
16
+ export declare function handleIntakePostPR(options: HandleIntakePostPROptions): Promise<IntakePostPRResult>;
17
+ //# sourceMappingURL=post-pr.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"post-pr.d.ts","sourceRoot":"","sources":["../../src/intake/post-pr.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAC;AAC3C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAG1D,OAAO,EAAwB,KAAK,cAAc,EAAE,MAAM,eAAe,CAAC;AAI1E,MAAM,WAAW,yBAAyB;IACxC,EAAE,EAAE,QAAQ,CAAC,QAAQ,CAAC;IACtB,SAAS,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;IACrC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,MAAM,EAAE,cAAc,CAAC;IACvB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,cAAc,CAAC,EAAE,CAAC,MAAM,EAAE,OAAO,CAAC,cAAc,CAAC,KAAK,cAAc,CAAC;CACtE;AAED,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,OAAO,CAAC;IACjB,eAAe,EAAE,MAAM,CAAC;CACzB;AAsBD,wBAAsB,kBAAkB,CACtC,OAAO,EAAE,yBAAyB,GACjC,OAAO,CAAC,kBAAkB,CAAC,CA4E7B"}
@@ -0,0 +1,78 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.handleIntakePostPR = handleIntakePostPR;
4
+ const intake_queries_js_1 = require("../database/intake-queries.js");
5
+ const queries_js_1 = require("../database/queries.js");
6
+ const registry_js_1 = require("./registry.js");
7
+ const task_reference_js_1 = require("./task-reference.js");
8
+ const integration_js_1 = require("../hooks/integration.js");
9
+ function buildResolutionMessage(prNumber) {
10
+ return `Fixed in PR #${prNumber}.`;
11
+ }
12
+ function collectFixTaskReferences(tasks) {
13
+ const references = tasks
14
+ .map((task) => (0, task_reference_js_1.parseIntakeTaskReference)(task))
15
+ .filter((reference) => (reference !== null && reference.phase === 'fix'));
16
+ return references.filter((reference, index) => (references.findIndex((candidate) => candidate.source === reference.source && candidate.externalId === reference.externalId) === index));
17
+ }
18
+ async function handleIntakePostPR(options) {
19
+ const { db, sectionId, prNumber, config, createRegistry = registry_js_1.createIntakeRegistry } = options;
20
+ if (!sectionId || prNumber === null) {
21
+ return { handled: false, reportsResolved: 0 };
22
+ }
23
+ const section = (0, queries_js_1.getSection)(db, sectionId);
24
+ if (!section) {
25
+ return { handled: false, reportsResolved: 0 };
26
+ }
27
+ const references = collectFixTaskReferences((0, queries_js_1.listTasks)(db, { sectionId, status: 'all' }));
28
+ if (references.length === 0) {
29
+ return { handled: false, reportsResolved: 0 };
30
+ }
31
+ let registry = null;
32
+ try {
33
+ registry = createRegistry(config);
34
+ }
35
+ catch (error) {
36
+ console.warn(`[intake-post-pr] Failed to initialize intake registry for section "${section.name}":`, error instanceof Error ? error.message : String(error));
37
+ return { handled: false, reportsResolved: 0 };
38
+ }
39
+ let reportsResolved = 0;
40
+ for (const reference of references) {
41
+ const report = (0, intake_queries_js_1.getIntakeReport)(db, reference.source, reference.externalId);
42
+ if (!report || report.status === 'resolved') {
43
+ continue;
44
+ }
45
+ const resolvedAt = new Date().toISOString();
46
+ const connector = registry?.tryGet(report.source);
47
+ if (connector?.capabilities.resolutionNotifications) {
48
+ try {
49
+ await connector.notifyResolution({
50
+ report: {
51
+ source: report.source,
52
+ externalId: report.externalId,
53
+ url: report.url,
54
+ },
55
+ resolvedAt,
56
+ resolution: 'fixed',
57
+ message: buildResolutionMessage(prNumber),
58
+ metadata: { prNumber },
59
+ });
60
+ }
61
+ catch (error) {
62
+ console.warn(`[intake-post-pr] Failed to notify ${report.source} for ${report.source}#${report.externalId}:`, error instanceof Error ? error.message : String(error));
63
+ continue;
64
+ }
65
+ }
66
+ const updated = (0, intake_queries_js_1.updateIntakeReportState)(db, report.source, report.externalId, {
67
+ status: 'resolved',
68
+ resolvedAt,
69
+ });
70
+ await (0, integration_js_1.triggerHooksSafely)(() => (0, integration_js_1.triggerIntakePRCreated)(updated, prNumber, { projectPath: options.projectPath }), { verbose: false });
71
+ reportsResolved += 1;
72
+ }
73
+ return {
74
+ handled: reportsResolved > 0,
75
+ reportsResolved,
76
+ };
77
+ }
78
+ //# sourceMappingURL=post-pr.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"post-pr.js","sourceRoot":"","sources":["../../src/intake/post-pr.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ import type { SteroidsConfig } from '../config/loader.js';
2
+ import type { IntakeConnector, IntakeSource } from './types.js';
3
+ export interface CreateIntakeRegistryOptions {
4
+ env?: NodeJS.ProcessEnv;
5
+ runGitHubCommand?: (args: string[], env: NodeJS.ProcessEnv) => string;
6
+ }
7
+ export declare class IntakeRegistry {
8
+ private readonly connectors;
9
+ register(connector: IntakeConnector): void;
10
+ get(source: IntakeSource): IntakeConnector;
11
+ tryGet(source: IntakeSource): IntakeConnector | undefined;
12
+ has(source: IntakeSource): boolean;
13
+ getSources(): IntakeSource[];
14
+ getAll(): IntakeConnector[];
15
+ }
16
+ export declare function createIntakeRegistry(config: Partial<SteroidsConfig>, options?: CreateIntakeRegistryOptions): IntakeRegistry;
17
+ //# sourceMappingURL=registry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/intake/registry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAE1D,OAAO,KAAK,EAEV,eAAe,EACf,YAAY,EACb,MAAM,YAAY,CAAC;AAEpB,MAAM,WAAW,2BAA2B;IAC1C,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;IACxB,gBAAgB,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,GAAG,EAAE,MAAM,CAAC,UAAU,KAAK,MAAM,CAAC;CACvE;AAED,qBAAa,cAAc;IACzB,OAAO,CAAC,QAAQ,CAAC,UAAU,CAA4C;IAEvE,QAAQ,CAAC,SAAS,EAAE,eAAe,GAAG,IAAI;IAQ1C,GAAG,CAAC,MAAM,EAAE,YAAY,GAAG,eAAe;IAU1C,MAAM,CAAC,MAAM,EAAE,YAAY,GAAG,eAAe,GAAG,SAAS;IAIzD,GAAG,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO;IAIlC,UAAU,IAAI,YAAY,EAAE;IAI5B,MAAM,IAAI,eAAe,EAAE;CAG5B;AAYD,wBAAgB,oBAAoB,CAClC,MAAM,EAAE,OAAO,CAAC,cAAc,CAAC,EAC/B,OAAO,GAAE,2BAAgC,GACxC,cAAc,CAmBhB"}
@@ -0,0 +1,57 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.IntakeRegistry = void 0;
4
+ exports.createIntakeRegistry = createIntakeRegistry;
5
+ const github_issues_connector_js_1 = require("./github-issues-connector.js");
6
+ class IntakeRegistry {
7
+ connectors = new Map();
8
+ register(connector) {
9
+ if (this.connectors.has(connector.source)) {
10
+ throw new Error(`Intake connector '${connector.source}' is already registered`);
11
+ }
12
+ this.connectors.set(connector.source, connector);
13
+ }
14
+ get(source) {
15
+ const connector = this.connectors.get(source);
16
+ if (!connector) {
17
+ const available = this.getSources().join(', ');
18
+ throw new Error(`Intake connector '${source}' not found. Available connectors: ${available || 'none'}`);
19
+ }
20
+ return connector;
21
+ }
22
+ tryGet(source) {
23
+ return this.connectors.get(source);
24
+ }
25
+ has(source) {
26
+ return this.connectors.has(source);
27
+ }
28
+ getSources() {
29
+ return Array.from(this.connectors.keys());
30
+ }
31
+ getAll() {
32
+ return Array.from(this.connectors.values());
33
+ }
34
+ }
35
+ exports.IntakeRegistry = IntakeRegistry;
36
+ function normalizeGitHubConfig(config) {
37
+ if (!config?.enabled) {
38
+ return null;
39
+ }
40
+ return config;
41
+ }
42
+ function createIntakeRegistry(config, options = {}) {
43
+ const registry = new IntakeRegistry();
44
+ const connectors = config.intake?.connectors;
45
+ const githubConfig = normalizeGitHubConfig(connectors?.github);
46
+ if (githubConfig) {
47
+ registry.register(new github_issues_connector_js_1.GitHubIssuesConnector(githubConfig, {
48
+ env: options.env,
49
+ runGhCommand: options.runGitHubCommand,
50
+ }));
51
+ }
52
+ if (connectors?.sentry?.enabled) {
53
+ throw new Error("Intake connector 'sentry' is enabled but not implemented in this workspace");
54
+ }
55
+ return registry;
56
+ }
57
+ //# sourceMappingURL=registry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/intake/registry.ts"],"names":[],"mappings":";;;AA6DA,oDAsBC;AAlFD,6EAAqE;AAYrE,MAAa,cAAc;IACR,UAAU,GAAG,IAAI,GAAG,EAAiC,CAAC;IAEvE,QAAQ,CAAC,SAA0B;QACjC,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC;YAC1C,MAAM,IAAI,KAAK,CAAC,qBAAqB,SAAS,CAAC,MAAM,yBAAyB,CAAC,CAAC;QAClF,CAAC;QAED,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,SAAS,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;IACnD,CAAC;IAED,GAAG,CAAC,MAAoB;QACtB,MAAM,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAC9C,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,MAAM,SAAS,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC/C,MAAM,IAAI,KAAK,CAAC,qBAAqB,MAAM,sCAAsC,SAAS,IAAI,MAAM,EAAE,CAAC,CAAC;QAC1G,CAAC;QAED,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,MAAM,CAAC,MAAoB;QACzB,OAAO,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IACrC,CAAC;IAED,GAAG,CAAC,MAAoB;QACtB,OAAO,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IACrC,CAAC;IAED,UAAU;QACR,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC,CAAC;IAC5C,CAAC;IAED,MAAM;QACJ,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC,CAAC;IAC9C,CAAC;CACF;AApCD,wCAoCC;AAED,SAAS,qBAAqB,CAC5B,MAA+C;IAE/C,IAAI,CAAC,MAAM,EAAE,OAAO,EAAE,CAAC;QACrB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAgB,oBAAoB,CAClC,MAA+B,EAC/B,UAAuC,EAAE;IAEzC,MAAM,QAAQ,GAAG,IAAI,cAAc,EAAE,CAAC;IACtC,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC;IAE7C,MAAM,YAAY,GAAG,qBAAqB,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;IAC/D,IAAI,YAAY,EAAE,CAAC;QACjB,QAAQ,CAAC,QAAQ,CACf,IAAI,kDAAqB,CAAC,YAAY,EAAE;YACtC,GAAG,EAAE,OAAO,CAAC,GAAG;YAChB,YAAY,EAAE,OAAO,CAAC,gBAAgB;SACvC,CAAC,CACH,CAAC;IACJ,CAAC;IAED,IAAI,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC;QAChC,MAAM,IAAI,KAAK,CAAC,4EAA4E,CAAC,CAAC;IAChG,CAAC;IAED,OAAO,QAAQ,CAAC;AAClB,CAAC"}
@@ -0,0 +1,10 @@
1
+ import type Database from 'better-sqlite3';
2
+ import type { Task } from '../database/queries.js';
3
+ import { type IntakePipelineTransition } from './pipeline-glue.js';
4
+ export interface IntakeTaskApprovalResult {
5
+ handled: boolean;
6
+ transition?: IntakePipelineTransition;
7
+ createdTaskId?: string;
8
+ }
9
+ export declare function handleIntakeTaskApproval(db: Database.Database, task: Pick<Task, 'id' | 'title' | 'source_file'>, projectPath: string): IntakeTaskApprovalResult;
10
+ //# sourceMappingURL=reviewer-approval.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reviewer-approval.d.ts","sourceRoot":"","sources":["../../src/intake/reviewer-approval.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAC;AAC3C,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,wBAAwB,CAAC;AAQnD,OAAO,EAGL,KAAK,wBAAwB,EAC9B,MAAM,oBAAoB,CAAC;AAS5B,MAAM,WAAW,wBAAwB;IACvC,OAAO,EAAE,OAAO,CAAC;IACjB,UAAU,CAAC,EAAE,wBAAwB,CAAC;IACtC,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AA4CD,wBAAgB,wBAAwB,CACtC,EAAE,EAAE,QAAQ,CAAC,QAAQ,EACrB,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,GAAG,aAAa,CAAC,EAChD,WAAW,EAAE,MAAM,GAClB,wBAAwB,CAyC1B"}
@@ -0,0 +1,70 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.handleIntakeTaskApproval = handleIntakeTaskApproval;
4
+ const queries_js_1 = require("../database/queries.js");
5
+ const intake_queries_js_1 = require("../database/intake-queries.js");
6
+ const pipeline_glue_js_1 = require("./pipeline-glue.js");
7
+ const task_templates_js_1 = require("./task-templates.js");
8
+ const task_reference_js_1 = require("./task-reference.js");
9
+ function getOrCreateSectionId(db, sectionName) {
10
+ const existing = (0, queries_js_1.getSectionByName)(db, sectionName);
11
+ if (existing) {
12
+ return existing.id;
13
+ }
14
+ return (0, queries_js_1.createSection)(db, sectionName).id;
15
+ }
16
+ function parseRetryAttemptFromTitle(title) {
17
+ const match = title.match(/\(retry (\d+)\)$/);
18
+ if (!match) {
19
+ return 1;
20
+ }
21
+ const retryAttempt = Number.parseInt(match[1], 10);
22
+ return Number.isInteger(retryAttempt) && retryAttempt >= 2 ? retryAttempt : 1;
23
+ }
24
+ function createNextIntakeTask(db, nextPhase, report, options = {}) {
25
+ const retryAttempt = options.retry
26
+ ? parseRetryAttemptFromTitle(options.currentTaskTitle ?? '') + 1
27
+ : undefined;
28
+ const template = (0, task_templates_js_1.buildIntakeTaskTemplate)(nextPhase, report, { retryAttempt });
29
+ const sectionId = getOrCreateSectionId(db, (0, task_templates_js_1.getIntakeTaskSectionName)(nextPhase));
30
+ const nextTask = (0, queries_js_1.createTask)(db, options.nextTaskTitle ?? template.title, {
31
+ sectionId,
32
+ sourceFile: template.sourceFile,
33
+ });
34
+ return nextTask.id;
35
+ }
36
+ function handleIntakeTaskApproval(db, task, projectPath) {
37
+ const reference = (0, task_reference_js_1.parseIntakeTaskReference)(task);
38
+ if (!reference || reference.phase === 'fix') {
39
+ return { handled: false };
40
+ }
41
+ const report = (0, intake_queries_js_1.getIntakeReport)(db, reference.source, reference.externalId);
42
+ if (!report) {
43
+ throw new Error(`Intake pipeline task refers to missing report ${reference.source}#${reference.externalId}`);
44
+ }
45
+ const result = (0, pipeline_glue_js_1.parseIntakeResultFile)(projectPath);
46
+ if (result.phase !== reference.phase) {
47
+ throw new Error(`Intake result phase "${result.phase}" does not match approved task phase "${reference.phase}" for ${reference.source}#${reference.externalId}`);
48
+ }
49
+ const transition = (0, pipeline_glue_js_1.deriveIntakePipelineTransition)(result);
50
+ if (transition.action === 'complete') {
51
+ (0, intake_queries_js_1.updateIntakeReportState)(db, report.source, report.externalId, {
52
+ status: transition.resolutionCode === 'fixed' ? 'resolved' : 'ignored',
53
+ resolvedAt: new Date().toISOString(),
54
+ linkedTaskId: task.id,
55
+ });
56
+ return { handled: true, transition };
57
+ }
58
+ const createdTaskId = createNextIntakeTask(db, transition.nextPhase, report, {
59
+ currentTaskTitle: task.title,
60
+ nextTaskTitle: transition.nextTaskTitle,
61
+ retry: transition.action === 'retry',
62
+ });
63
+ (0, intake_queries_js_1.updateIntakeReportState)(db, report.source, report.externalId, {
64
+ status: 'in_progress',
65
+ resolvedAt: null,
66
+ linkedTaskId: createdTaskId,
67
+ });
68
+ return { handled: true, transition, createdTaskId };
69
+ }
70
+ //# sourceMappingURL=reviewer-approval.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reviewer-approval.js","sourceRoot":"","sources":["../../src/intake/reviewer-approval.ts"],"names":[],"mappings":";;AAsEA,4DA6CC;AAjHD,uDAIgC;AAChC,qEAAyF;AAEzF,yDAI4B;AAC5B,2DAI6B;AAE7B,2DAA+D;AAQ/D,SAAS,oBAAoB,CAAC,EAAqB,EAAE,WAAmB;IACtE,MAAM,QAAQ,GAAG,IAAA,6BAAgB,EAAC,EAAE,EAAE,WAAW,CAAC,CAAC;IACnD,IAAI,QAAQ,EAAE,CAAC;QACb,OAAO,QAAQ,CAAC,EAAE,CAAC;IACrB,CAAC;IAED,OAAO,IAAA,0BAAa,EAAC,EAAE,EAAE,WAAW,CAAC,CAAC,EAAE,CAAC;AAC3C,CAAC;AAED,SAAS,0BAA0B,CAAC,KAAa;IAC/C,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC;IAC9C,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,OAAO,CAAC,CAAC;IACX,CAAC;IAED,MAAM,YAAY,GAAG,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IACnD,OAAO,MAAM,CAAC,SAAS,CAAC,YAAY,CAAC,IAAI,YAAY,IAAI,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC;AAChF,CAAC;AAED,SAAS,oBAAoB,CAC3B,EAAqB,EACrB,SAA6C,EAC7C,MAA0B,EAC1B,UAII,EAAE;IAEN,MAAM,YAAY,GAAG,OAAO,CAAC,KAAK;QAChC,CAAC,CAAC,0BAA0B,CAAC,OAAO,CAAC,gBAAgB,IAAI,EAAE,CAAC,GAAG,CAAC;QAChE,CAAC,CAAC,SAAS,CAAC;IACd,MAAM,QAAQ,GAAG,IAAA,2CAAuB,EAAC,SAAS,EAAE,MAAM,EAAE,EAAE,YAAY,EAAE,CAAC,CAAC;IAC9E,MAAM,SAAS,GAAG,oBAAoB,CAAC,EAAE,EAAE,IAAA,4CAAwB,EAAC,SAAS,CAAC,CAAC,CAAC;IAChF,MAAM,QAAQ,GAAG,IAAA,uBAAU,EAAC,EAAE,EAAE,OAAO,CAAC,aAAa,IAAI,QAAQ,CAAC,KAAK,EAAE;QACvE,SAAS;QACT,UAAU,EAAE,QAAQ,CAAC,UAAU;KAChC,CAAC,CAAC;IAEH,OAAO,QAAQ,CAAC,EAAE,CAAC;AACrB,CAAC;AAED,SAAgB,wBAAwB,CACtC,EAAqB,EACrB,IAAgD,EAChD,WAAmB;IAEnB,MAAM,SAAS,GAAG,IAAA,4CAAwB,EAAC,IAAI,CAAC,CAAC;IACjD,IAAI,CAAC,SAAS,IAAI,SAAS,CAAC,KAAK,KAAK,KAAK,EAAE,CAAC;QAC5C,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;IAC5B,CAAC;IAED,MAAM,MAAM,GAAG,IAAA,mCAAe,EAAC,EAAE,EAAE,SAAS,CAAC,MAAM,EAAE,SAAS,CAAC,UAAU,CAAC,CAAC;IAC3E,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,MAAM,IAAI,KAAK,CAAC,iDAAiD,SAAS,CAAC,MAAM,IAAI,SAAS,CAAC,UAAU,EAAE,CAAC,CAAC;IAC/G,CAAC;IAED,MAAM,MAAM,GAAG,IAAA,wCAAqB,EAAC,WAAW,CAAC,CAAC;IAClD,IAAI,MAAM,CAAC,KAAK,KAAK,SAAS,CAAC,KAAK,EAAE,CAAC;QACrC,MAAM,IAAI,KAAK,CACb,wBAAwB,MAAM,CAAC,KAAK,yCAAyC,SAAS,CAAC,KAAK,SAAS,SAAS,CAAC,MAAM,IAAI,SAAS,CAAC,UAAU,EAAE,CAChJ,CAAC;IACJ,CAAC;IAED,MAAM,UAAU,GAAG,IAAA,iDAA8B,EAAC,MAAM,CAAC,CAAC;IAC1D,IAAI,UAAU,CAAC,MAAM,KAAK,UAAU,EAAE,CAAC;QACrC,IAAA,2CAAuB,EAAC,EAAE,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,UAAU,EAAE;YAC5D,MAAM,EAAE,UAAU,CAAC,cAAc,KAAK,OAAO,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS;YACtE,UAAU,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;YACpC,YAAY,EAAE,IAAI,CAAC,EAAE;SACtB,CAAC,CAAC;QAEH,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC;IACvC,CAAC;IAED,MAAM,aAAa,GAAG,oBAAoB,CAAC,EAAE,EAAE,UAAU,CAAC,SAAS,EAAE,MAAM,EAAE;QAC3E,gBAAgB,EAAE,IAAI,CAAC,KAAK;QAC5B,aAAa,EAAE,UAAU,CAAC,aAAa;QACvC,KAAK,EAAE,UAAU,CAAC,MAAM,KAAK,OAAO;KACrC,CAAC,CAAC;IACH,IAAA,2CAAuB,EAAC,EAAE,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,UAAU,EAAE;QAC5D,MAAM,EAAE,aAAa;QACrB,UAAU,EAAE,IAAI;QAChB,YAAY,EAAE,aAAa;KAC5B,CAAC,CAAC;IAEH,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,aAAa,EAAE,CAAC;AACtD,CAAC"}
@@ -0,0 +1,10 @@
1
+ import type { Task } from '../database/queries.js';
2
+ import { type IntakeTaskPhase } from './task-templates.js';
3
+ import type { IntakeSource } from './types.js';
4
+ export interface IntakeTaskReference {
5
+ phase: IntakeTaskPhase;
6
+ source: IntakeSource;
7
+ externalId: string;
8
+ }
9
+ export declare function parseIntakeTaskReference(task: Pick<Task, 'title' | 'source_file'>): IntakeTaskReference | null;
10
+ //# sourceMappingURL=task-reference.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"task-reference.d.ts","sourceRoot":"","sources":["../../src/intake/task-reference.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,wBAAwB,CAAC;AACnD,OAAO,EAAuC,KAAK,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAChG,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAE/C,MAAM,WAAW,mBAAmB;IAClC,KAAK,EAAE,eAAe,CAAC;IACvB,MAAM,EAAE,YAAY,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;CACpB;AAKD,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,OAAO,GAAG,aAAa,CAAC,GAAG,mBAAmB,GAAG,IAAI,CAmB9G"}
@@ -0,0 +1,23 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.parseIntakeTaskReference = parseIntakeTaskReference;
4
+ const task_templates_js_1 = require("./task-templates.js");
5
+ const INTAKE_TASK_TITLE_PATTERN = /^(Triage|Reproduce|Fix) intake report (github|sentry)#([^:]+): /;
6
+ function parseIntakeTaskReference(task) {
7
+ if (task.source_file !== task_templates_js_1.DEFAULT_INTAKE_PIPELINE_SOURCE_FILE) {
8
+ return null;
9
+ }
10
+ const match = task.title.match(INTAKE_TASK_TITLE_PATTERN);
11
+ if (!match) {
12
+ return null;
13
+ }
14
+ const phase = match[1] === 'Triage'
15
+ ? 'triage'
16
+ : (match[1] === 'Reproduce' ? 'reproduction' : 'fix');
17
+ return {
18
+ phase,
19
+ source: match[2],
20
+ externalId: match[3],
21
+ };
22
+ }
23
+ //# sourceMappingURL=task-reference.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"task-reference.js","sourceRoot":"","sources":["../../src/intake/task-reference.ts"],"names":[],"mappings":";;AAaA,4DAmBC;AA/BD,2DAAgG;AAShG,MAAM,yBAAyB,GAC7B,iEAAiE,CAAC;AAEpE,SAAgB,wBAAwB,CAAC,IAAyC;IAChF,IAAI,IAAI,CAAC,WAAW,KAAK,uDAAmC,EAAE,CAAC;QAC7D,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,yBAAyB,CAAC,CAAC;IAC1D,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,KAAK,QAAQ;QACjC,CAAC,CAAC,QAAQ;QACV,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,WAAW,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;IAExD,OAAO;QACL,KAAK;QACL,MAAM,EAAE,KAAK,CAAC,CAAC,CAAiB;QAChC,UAAU,EAAE,KAAK,CAAC,CAAC,CAAC;KACrB,CAAC;AACJ,CAAC"}
@@ -0,0 +1,25 @@
1
+ import type { IntakeReportReference, IntakeReportStatus, IntakeSeverity } from './types.js';
2
+ export declare const DEFAULT_INTAKE_PIPELINE_SOURCE_FILE = "docs/plans/bug-intake/pipeline.md";
3
+ export type IntakeTaskPhase = 'triage' | 'reproduction' | 'fix';
4
+ export interface IntakeTaskTemplateReport extends IntakeReportReference {
5
+ title: string;
6
+ summary?: string;
7
+ severity: IntakeSeverity;
8
+ status: IntakeReportStatus;
9
+ }
10
+ export interface IntakeTaskTemplate {
11
+ phase: IntakeTaskPhase;
12
+ sectionName: string;
13
+ title: string;
14
+ sourceFile: string;
15
+ description: string;
16
+ }
17
+ export interface BuildIntakeTaskTemplateOptions {
18
+ sourceFile?: string;
19
+ retryAttempt?: number;
20
+ }
21
+ export declare function getIntakeTaskSectionName(phase: IntakeTaskPhase): string;
22
+ export declare function buildIntakeTaskTitle(phase: IntakeTaskPhase, report: IntakeTaskTemplateReport, options?: Pick<BuildIntakeTaskTemplateOptions, 'retryAttempt'>): string;
23
+ export declare function buildIntakeTaskDescription(phase: IntakeTaskPhase, report: IntakeTaskTemplateReport, options?: Pick<BuildIntakeTaskTemplateOptions, 'retryAttempt'>): string;
24
+ export declare function buildIntakeTaskTemplate(phase: IntakeTaskPhase, report: IntakeTaskTemplateReport, options?: BuildIntakeTaskTemplateOptions): IntakeTaskTemplate;
25
+ //# sourceMappingURL=task-templates.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"task-templates.d.ts","sourceRoot":"","sources":["../../src/intake/task-templates.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,qBAAqB,EACrB,kBAAkB,EAClB,cAAc,EACf,MAAM,YAAY,CAAC;AAEpB,eAAO,MAAM,mCAAmC,sCAAsC,CAAC;AAEvF,MAAM,MAAM,eAAe,GAAG,QAAQ,GAAG,cAAc,GAAG,KAAK,CAAC;AAEhE,MAAM,WAAW,wBAAyB,SAAQ,qBAAqB;IACrE,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,cAAc,CAAC;IACzB,MAAM,EAAE,kBAAkB,CAAC;CAC5B;AAED,MAAM,WAAW,kBAAkB;IACjC,KAAK,EAAE,eAAe,CAAC;IACvB,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,8BAA8B;IAC7C,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AA2ED,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,eAAe,GAAG,MAAM,CAEvE;AAED,wBAAgB,oBAAoB,CAClC,KAAK,EAAE,eAAe,EACtB,MAAM,EAAE,wBAAwB,EAChC,OAAO,GAAE,IAAI,CAAC,8BAA8B,EAAE,cAAc,CAAM,GACjE,MAAM,CAIR;AAED,wBAAgB,0BAA0B,CACxC,KAAK,EAAE,eAAe,EACtB,MAAM,EAAE,wBAAwB,EAChC,OAAO,GAAE,IAAI,CAAC,8BAA8B,EAAE,cAAc,CAAM,GACjE,MAAM,CAUR;AAED,wBAAgB,uBAAuB,CACrC,KAAK,EAAE,eAAe,EACtB,MAAM,EAAE,wBAAwB,EAChC,OAAO,GAAE,8BAAmC,GAC3C,kBAAkB,CAQpB"}