@ozzylabs/feedradar 0.1.6 → 0.1.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 (75) hide show
  1. package/dist/cli/dismiss.d.ts +2 -1
  2. package/dist/cli/dismiss.d.ts.map +1 -1
  3. package/dist/cli/dismiss.js +4 -1
  4. package/dist/cli/dismiss.js.map +1 -1
  5. package/dist/cli/index.d.ts.map +1 -1
  6. package/dist/cli/index.js +7 -1
  7. package/dist/cli/index.js.map +1 -1
  8. package/dist/cli/items.d.ts +44 -0
  9. package/dist/cli/items.d.ts.map +1 -0
  10. package/dist/cli/items.js +288 -0
  11. package/dist/cli/items.js.map +1 -0
  12. package/dist/cli/research.d.ts +21 -0
  13. package/dist/cli/research.d.ts.map +1 -1
  14. package/dist/cli/research.js +54 -10
  15. package/dist/cli/research.js.map +1 -1
  16. package/dist/cli/review.d.ts +23 -0
  17. package/dist/cli/review.d.ts.map +1 -1
  18. package/dist/cli/review.js +293 -2
  19. package/dist/cli/review.js.map +1 -1
  20. package/dist/cli/triage.d.ts +136 -0
  21. package/dist/cli/triage.d.ts.map +1 -0
  22. package/dist/cli/triage.js +1110 -0
  23. package/dist/cli/triage.js.map +1 -0
  24. package/dist/cli/undismiss.d.ts +30 -0
  25. package/dist/cli/undismiss.d.ts.map +1 -0
  26. package/dist/cli/undismiss.js +133 -0
  27. package/dist/cli/undismiss.js.map +1 -0
  28. package/dist/cli/workflow/generate-combined-with-triage.d.ts +115 -0
  29. package/dist/cli/workflow/generate-combined-with-triage.d.ts.map +1 -0
  30. package/dist/cli/workflow/generate-combined-with-triage.js +446 -0
  31. package/dist/cli/workflow/generate-combined-with-triage.js.map +1 -0
  32. package/dist/cli/workflow.d.ts +6 -5
  33. package/dist/cli/workflow.d.ts.map +1 -1
  34. package/dist/cli/workflow.js +13 -8
  35. package/dist/cli/workflow.js.map +1 -1
  36. package/dist/core/recipes.d.ts.map +1 -1
  37. package/dist/core/recipes.js +6 -0
  38. package/dist/core/recipes.js.map +1 -1
  39. package/dist/core/transitions.d.ts +30 -0
  40. package/dist/core/transitions.d.ts.map +1 -0
  41. package/dist/core/transitions.js +103 -0
  42. package/dist/core/transitions.js.map +1 -0
  43. package/dist/core/triage/adapter.d.ts +80 -0
  44. package/dist/core/triage/adapter.d.ts.map +1 -0
  45. package/dist/core/triage/adapter.js +128 -0
  46. package/dist/core/triage/adapter.js.map +1 -0
  47. package/dist/core/triage/index.d.ts +105 -0
  48. package/dist/core/triage/index.d.ts.map +1 -0
  49. package/dist/core/triage/index.js +246 -0
  50. package/dist/core/triage/index.js.map +1 -0
  51. package/dist/core/triage/prompt.d.ts +30 -0
  52. package/dist/core/triage/prompt.d.ts.map +1 -0
  53. package/dist/core/triage/prompt.js +157 -0
  54. package/dist/core/triage/prompt.js.map +1 -0
  55. package/dist/core/triage/response.d.ts +114 -0
  56. package/dist/core/triage/response.d.ts.map +1 -0
  57. package/dist/core/triage/response.js +188 -0
  58. package/dist/core/triage/response.js.map +1 -0
  59. package/dist/recipes/aws-whats-new.yaml +29 -0
  60. package/dist/recipes/dev-to.yaml +24 -0
  61. package/dist/schemas/item.d.ts +151 -5
  62. package/dist/schemas/item.d.ts.map +1 -1
  63. package/dist/schemas/item.js +164 -4
  64. package/dist/schemas/item.js.map +1 -1
  65. package/dist/schemas/recipe.d.ts +10 -0
  66. package/dist/schemas/recipe.d.ts.map +1 -1
  67. package/dist/schemas/recipe.js +10 -1
  68. package/dist/schemas/recipe.js.map +1 -1
  69. package/dist/schemas/source.d.ts +43 -0
  70. package/dist/schemas/source.d.ts.map +1 -1
  71. package/dist/schemas/source.js +34 -0
  72. package/dist/schemas/source.js.map +1 -1
  73. package/dist/templates/agents/AGENTS.md +30 -0
  74. package/dist/templates/workflows/combined-with-triage.template.yaml.tmpl +133 -0
  75. package/package.json +1 -1
@@ -0,0 +1,446 @@
1
+ import { access, mkdir, readFile, writeFile } from "node:fs/promises";
2
+ import { dirname, isAbsolute, join, normalize, relative, resolve } from "node:path";
3
+ import { fileURLToPath } from "node:url";
4
+ import { RESEARCH_BATCH_DEFAULT_MAX_ITEMS } from "../research.js";
5
+ import { SUPPORTED_AGENTS } from "./generate-watch.js";
6
+ /**
7
+ * `radar workflow generate combined-with-triage` (ADR-0018 §W5 / #241).
8
+ *
9
+ * Extends the `combined` generator with the LLM triage layer. The emitted
10
+ * workflow chains 5 steps in one job:
11
+ *
12
+ * watch run -> triage --apply -> research --batch (status=triaged_research)
13
+ * -> research --digest per triage-group -> review --batch (status=researched)
14
+ *
15
+ * Three distinct agents can be wired (triage / research / review) so the
16
+ * cheap-model channel handles triage while heavier models do the LoC-heavy
17
+ * research and the cross-agent review. The job-level `env:` block exposes
18
+ * every selected agent's API key once so each step inherits without
19
+ * per-step duplication (ADR-0014 D5 — API key auth only, never OAuth).
20
+ *
21
+ * A trailing `if: always()` notify step counts the `triaged_unsure` queue
22
+ * depth and (optionally) POSTs it to a Slack webhook so the human-review
23
+ * backlog cannot grow unnoticed. The notify step degrades silently when
24
+ * no webhook is configured.
25
+ */
26
+ /** Default watch cron — 06:00 UTC daily, matching the #241 example. */
27
+ const DEFAULT_WATCH_CRON = "0 6 * * *";
28
+ /** Default output path under `.github/workflows/`. */
29
+ const DEFAULT_OUTPUT = join(".github", "workflows", "feedradar-daily.yaml");
30
+ /**
31
+ * Per-agent `env:` entries (single line each, no surrounding `env:` header).
32
+ *
33
+ * Used by `buildEnvBlock` to assemble a deduped job-level `env:` body that
34
+ * exposes every required secret across the three agent roles. Each line is
35
+ * 10-space indented so it sits under ` env:` (8 spaces, then 2-space
36
+ * map child indentation) when concatenated into the template.
37
+ *
38
+ * `claude-code` / `codex-cli` / `gemini-cli` each declare their API key.
39
+ * Every agent also gets `GITHUB_TOKEN` so the `github-releases` adapter
40
+ * lifts to the 5000 req/h ceiling; the watch step is the same one used in
41
+ * the `combined` generator, so the contract there carries over.
42
+ *
43
+ * `copilot` rides `secrets.GITHUB_TOKEN` natively (its CLI authenticates
44
+ * via the workflow's GH token), so it contributes no additional secret
45
+ * beyond the shared `GITHUB_TOKEN` line everybody gets.
46
+ */
47
+ const AGENT_ENV_LINES = {
48
+ "claude-code": [" ANTHROPIC_API_KEY: $" + "{{ secrets.ANTHROPIC_API_KEY }}"],
49
+ "codex-cli": [" OPENAI_API_KEY: $" + "{{ secrets.OPENAI_API_KEY }}"],
50
+ "gemini-cli": [" GEMINI_API_KEY: $" + "{{ secrets.GEMINI_API_KEY }}"],
51
+ copilot: [],
52
+ };
53
+ /** Always-present line: every step benefits from a higher GH rate limit. */
54
+ const SHARED_GITHUB_TOKEN_LINE = " GITHUB_TOKEN: $" + "{{ secrets.GITHUB_TOKEN }}";
55
+ /**
56
+ * Per-agent human-readable secret names surfaced after a successful
57
+ * generation. Mirrors `generate-combined.ts` so the experience is
58
+ * consistent across both generators.
59
+ */
60
+ const AGENT_SECRET_NAMES = {
61
+ "claude-code": ["ANTHROPIC_API_KEY"],
62
+ "codex-cli": ["OPENAI_API_KEY"],
63
+ "gemini-cli": ["GEMINI_API_KEY"],
64
+ copilot: [],
65
+ };
66
+ async function pathExists(p) {
67
+ try {
68
+ await access(p);
69
+ return true;
70
+ }
71
+ catch {
72
+ return false;
73
+ }
74
+ }
75
+ async function resolveTemplatesRoot() {
76
+ const here = dirname(fileURLToPath(import.meta.url));
77
+ return resolve(here, "..", "..", "templates");
78
+ }
79
+ /**
80
+ * Validate a 5-field POSIX cron expression. Same grammar check as
81
+ * `generate-combined.ts` / `generate-watch.ts`. Range bounds (e.g. month
82
+ * 1-12) are NOT enforced here; GitHub Actions rejects out-of-range
83
+ * expressions on workflow load.
84
+ */
85
+ export function isValidCron(expr) {
86
+ const trimmed = expr.trim();
87
+ if (trimmed.length === 0)
88
+ return false;
89
+ const fields = trimmed.split(/\s+/);
90
+ if (fields.length !== 5)
91
+ return false;
92
+ const tokenPattern = /^(?:\*|\d+(?:-\d+)?)(?:\/\d+)?$/;
93
+ for (const field of fields) {
94
+ if (field.length === 0)
95
+ return false;
96
+ const tokens = field.split(",");
97
+ for (const token of tokens) {
98
+ if (token.length === 0)
99
+ return false;
100
+ if (!tokenPattern.test(token))
101
+ return false;
102
+ }
103
+ }
104
+ return true;
105
+ }
106
+ /**
107
+ * Validate that the requested `--output` path lands under
108
+ * `.github/workflows/`. Mirrors `isSafeWorkflowPath` in `generate-watch.ts`
109
+ * — kept inline here so the two generators don't accidentally drift on
110
+ * the safety contract.
111
+ */
112
+ export function isSafeWorkflowPath(outputPath, cwd) {
113
+ if (isAbsolute(outputPath)) {
114
+ const allowedDir = resolve(cwd, ".github", "workflows");
115
+ const resolved = resolve(outputPath);
116
+ const rel = relative(allowedDir, resolved);
117
+ if (rel.startsWith("..") || isAbsolute(rel))
118
+ return false;
119
+ return /\.(ya?ml)$/i.test(resolved);
120
+ }
121
+ const normalized = normalize(outputPath);
122
+ if (normalized.split(/[\\/]/).includes(".."))
123
+ return false;
124
+ const required = `${join(".github", "workflows")}/`;
125
+ const unixified = normalized.replace(/\\/g, "/");
126
+ if (!unixified.startsWith(required.replace(/\\/g, "/")))
127
+ return false;
128
+ return /\.(ya?ml)$/i.test(unixified);
129
+ }
130
+ /**
131
+ * Validate `--max-items` as a positive integer (mirrors
132
+ * `parseMaxItems` in `src/cli/research.ts`).
133
+ */
134
+ export function isValidMaxItems(raw) {
135
+ if (!/^[0-9]+$/.test(raw))
136
+ return false;
137
+ const n = Number.parseInt(raw, 10);
138
+ return Number.isFinite(n) && n > 0;
139
+ }
140
+ /**
141
+ * Validate `--slack-webhook` shape. Required form: `secrets.<NAME>` (no
142
+ * leading `${{`, no trailing `}}`). The generator wraps the name into a
143
+ * proper GitHub Actions expression at render time so the user does not
144
+ * have to spell it out (and so we cannot accidentally double-wrap).
145
+ *
146
+ * Exported for unit testing.
147
+ */
148
+ export function isValidSlackWebhookRef(raw) {
149
+ return /^secrets\.[A-Z_][A-Z0-9_]*$/i.test(raw);
150
+ }
151
+ /**
152
+ * Build the deduped job-level `env:` body from the chosen triage /
153
+ * research / review agents. Lines are already 6-space indented (so they
154
+ * sit at ` env:` -> ` KEY: value` once the template inserts
155
+ * them at column 0 with `{{envBlock}}`).
156
+ *
157
+ * Order is deterministic (sorted) so generated workflows diff stably
158
+ * across regenerations. `GITHUB_TOKEN` is always last because shared
159
+ * lines come after agent-specific ones.
160
+ */
161
+ export function buildEnvBlock(triageAgent, researchAgent, reviewAgent) {
162
+ const lines = new Set();
163
+ for (const agent of [triageAgent, researchAgent, reviewAgent]) {
164
+ for (const line of AGENT_ENV_LINES[agent]) {
165
+ lines.add(line);
166
+ }
167
+ }
168
+ lines.add(SHARED_GITHUB_TOKEN_LINE);
169
+ return [...lines].sort().join("\n");
170
+ }
171
+ /**
172
+ * Convert a `--slack-webhook secrets.<NAME>` ref into the GitHub Actions
173
+ * expression literal the template needs. Returns an empty string when no
174
+ * webhook was supplied so the `[ -n "..." ]` guard in the rendered
175
+ * notify step short-circuits cleanly.
176
+ */
177
+ export function buildSlackWebhookExpr(raw) {
178
+ if (raw === undefined || raw.trim() === "")
179
+ return '""';
180
+ const trimmed = raw.trim();
181
+ // `secrets.X` -> `${{ secrets.X }}` (full Actions expression literal).
182
+ // biome-ignore lint/style/useTemplate: GitHub Actions expression literal — collapsing into a single template literal would re-trigger noTemplateCurlyInString
183
+ return "$" + `{{ ${trimmed} }}`;
184
+ }
185
+ /**
186
+ * Render the bundled template by substituting `{{watchCron}}` /
187
+ * `{{maxItems}}` / `{{triageAgent}}` / `{{researchAgent}}` /
188
+ * `{{reviewAgent}}` / `{{envBlock}}` / `{{slackWebhookExpr}}`.
189
+ */
190
+ export function renderCombinedWithTriageTemplate(template, values) {
191
+ return template
192
+ .replaceAll("{{watchCron}}", values.watchCron)
193
+ .replaceAll("{{maxItems}}", String(values.maxItems))
194
+ .replaceAll("{{triageAgent}}", values.triageAgent)
195
+ .replaceAll("{{researchAgent}}", values.researchAgent)
196
+ .replaceAll("{{reviewAgent}}", values.reviewAgent)
197
+ .replaceAll("{{envBlock}}", values.envBlock)
198
+ .replaceAll("{{slackWebhookExpr}}", values.slackWebhookExpr);
199
+ }
200
+ /**
201
+ * Core implementation of `radar workflow generate combined-with-triage`.
202
+ *
203
+ * Validates inputs, reads the bundled template, substitutes placeholders,
204
+ * and writes the result. The completion stdout enumerates every secret the
205
+ * user must register (across all three agent roles plus the optional
206
+ * Slack webhook) so they do not have to grep the YAML.
207
+ */
208
+ export async function generateCombinedWithTriage(options) {
209
+ const { cwd, watchCron, output, triageAgent, researchAgent, reviewAgent, maxItems, force } = options;
210
+ const log = options.io?.log ?? ((m) => console.log(m));
211
+ const warn = options.io?.warn ?? ((m) => console.warn(m));
212
+ if (!isValidCron(watchCron)) {
213
+ throw new Error(`invalid --watch-cron expression '${watchCron}' (expected 5-field POSIX cron, e.g. "0 6 * * *")`);
214
+ }
215
+ if (!isSafeWorkflowPath(output, cwd)) {
216
+ throw new Error(`invalid --output '${output}' (must be a relative path under .github/workflows/ ending in .yaml or .yml)`);
217
+ }
218
+ if (!Number.isInteger(maxItems) || maxItems <= 0) {
219
+ throw new Error(`invalid --max-items '${maxItems}' (must be a positive integer)`);
220
+ }
221
+ if (options.slackWebhook !== undefined && !isValidSlackWebhookRef(options.slackWebhook)) {
222
+ throw new Error(`invalid --slack-webhook '${options.slackWebhook}' (expected 'secrets.<NAME>', e.g. 'secrets.SLACK_WEBHOOK')`);
223
+ }
224
+ const templatesRoot = options.templatesRoot ?? (await resolveTemplatesRoot());
225
+ const templatePath = join(templatesRoot, "workflows", "combined-with-triage.template.yaml.tmpl");
226
+ if (!(await pathExists(templatePath))) {
227
+ throw new Error(`bundled template not found: ${templatePath}`);
228
+ }
229
+ const template = await readFile(templatePath, "utf8");
230
+ const envBlock = buildEnvBlock(triageAgent, researchAgent, reviewAgent);
231
+ const slackWebhookExpr = buildSlackWebhookExpr(options.slackWebhook);
232
+ const rendered = renderCombinedWithTriageTemplate(template, {
233
+ watchCron,
234
+ maxItems,
235
+ triageAgent,
236
+ researchAgent,
237
+ reviewAgent,
238
+ envBlock,
239
+ slackWebhookExpr,
240
+ });
241
+ const destAbs = isAbsolute(output) ? output : join(cwd, output);
242
+ const destRel = isAbsolute(output) ? relative(cwd, output) : output;
243
+ if ((await pathExists(destAbs)) && !force) {
244
+ throw new Error(`output file already exists: ${destRel} (use --force to overwrite)`);
245
+ }
246
+ if ((await pathExists(destAbs)) && force) {
247
+ warn(`workflow generate combined-with-triage: overwriting existing file ${destRel}`);
248
+ }
249
+ await mkdir(dirname(destAbs), { recursive: true });
250
+ await writeFile(destAbs, rendered, "utf8");
251
+ // Deduped secret list across all three agent roles + optional Slack.
252
+ const secrets = new Set();
253
+ for (const agent of [triageAgent, researchAgent, reviewAgent]) {
254
+ for (const s of AGENT_SECRET_NAMES[agent])
255
+ secrets.add(s);
256
+ }
257
+ if (options.slackWebhook !== undefined) {
258
+ // strip the `secrets.` prefix when surfacing to the user.
259
+ secrets.add(options.slackWebhook.replace(/^secrets\./, ""));
260
+ }
261
+ const sortedSecrets = [...secrets].sort();
262
+ log(`workflow generate combined-with-triage: wrote ${destRel}`);
263
+ log(` watch-cron: ${watchCron}`);
264
+ log(` triage-agent: ${triageAgent}`);
265
+ log(` research-agent: ${researchAgent}`);
266
+ log(` review-agent: ${reviewAgent}`);
267
+ log(` max-items: ${maxItems}`);
268
+ log(` slack-webhook: ${options.slackWebhook ?? "(none — notify step no-ops)"}`);
269
+ log("");
270
+ log("Required GitHub Actions secrets (Settings → Secrets and variables → Actions):");
271
+ if (sortedSecrets.length === 0) {
272
+ log(" (none — every selected agent rides the auto-provisioned GITHUB_TOKEN)");
273
+ }
274
+ else {
275
+ for (const s of sortedSecrets) {
276
+ log(` ${s}`);
277
+ }
278
+ }
279
+ log(" GITHUB_TOKEN (auto-provisioned, no setup needed)");
280
+ warn("workflow generate combined-with-triage: the --max-items cap is also enforced by `radar research --batch`; editing the YAML alone will not raise it");
281
+ return { outputPath: destRel, requiredSecrets: sortedSecrets };
282
+ }
283
+ /**
284
+ * Parse `workflow generate combined-with-triage` flags.
285
+ *
286
+ * Throws on missing values, unknown flags, unsupported agent choices, and
287
+ * malformed numeric / slack-webhook input so the caller can surface
288
+ * validation errors before any IO happens.
289
+ */
290
+ export function parseGenerateCombinedWithTriageArgs(args) {
291
+ let watchCron = DEFAULT_WATCH_CRON;
292
+ let output = DEFAULT_OUTPUT;
293
+ let triageAgent = "gemini-cli";
294
+ let researchAgent = "claude-code";
295
+ let reviewAgent = "codex-cli";
296
+ let maxItems = RESEARCH_BATCH_DEFAULT_MAX_ITEMS;
297
+ let slackWebhook;
298
+ let force = false;
299
+ let help = false;
300
+ function parseAgentFlag(flag, value) {
301
+ if (value === undefined)
302
+ throw new Error(`option ${flag} requires a value`);
303
+ if (!SUPPORTED_AGENTS.includes(value)) {
304
+ throw new Error(`option ${flag} expects one of: ${SUPPORTED_AGENTS.join(" | ")}, got '${value}'`);
305
+ }
306
+ return value;
307
+ }
308
+ for (let i = 0; i < args.length; i++) {
309
+ const a = args[i];
310
+ if (a === "-h" || a === "--help") {
311
+ help = true;
312
+ continue;
313
+ }
314
+ if (a === "--watch-cron") {
315
+ const value = args[++i];
316
+ if (value === undefined)
317
+ throw new Error(`option ${a} requires a value`);
318
+ watchCron = value;
319
+ continue;
320
+ }
321
+ if (a === "--output") {
322
+ const value = args[++i];
323
+ if (value === undefined)
324
+ throw new Error(`option ${a} requires a value`);
325
+ output = value;
326
+ continue;
327
+ }
328
+ if (a === "--triage-agent") {
329
+ triageAgent = parseAgentFlag(a, args[++i]);
330
+ continue;
331
+ }
332
+ if (a === "--research-agent") {
333
+ researchAgent = parseAgentFlag(a, args[++i]);
334
+ continue;
335
+ }
336
+ if (a === "--review-agent") {
337
+ reviewAgent = parseAgentFlag(a, args[++i]);
338
+ continue;
339
+ }
340
+ if (a === "--max-items") {
341
+ const value = args[++i];
342
+ if (value === undefined)
343
+ throw new Error(`option ${a} requires a value`);
344
+ if (!isValidMaxItems(value)) {
345
+ throw new Error(`option --max-items expects a positive integer, got '${value}'`);
346
+ }
347
+ maxItems = Number.parseInt(value, 10);
348
+ continue;
349
+ }
350
+ if (a === "--slack-webhook") {
351
+ const value = args[++i];
352
+ if (value === undefined)
353
+ throw new Error(`option ${a} requires a value`);
354
+ if (!isValidSlackWebhookRef(value)) {
355
+ throw new Error(`option --slack-webhook expects 'secrets.<NAME>', got '${value}'`);
356
+ }
357
+ slackWebhook = value;
358
+ continue;
359
+ }
360
+ if (a === "--force" || a === "-f") {
361
+ force = true;
362
+ continue;
363
+ }
364
+ if (a?.startsWith("--") || a?.startsWith("-")) {
365
+ throw new Error(`unknown option: ${a}`);
366
+ }
367
+ throw new Error(`unexpected positional argument: ${a}`);
368
+ }
369
+ return {
370
+ watchCron,
371
+ output,
372
+ triageAgent,
373
+ researchAgent,
374
+ reviewAgent,
375
+ maxItems,
376
+ slackWebhook,
377
+ force,
378
+ help,
379
+ };
380
+ }
381
+ export function printGenerateCombinedWithTriageHelp(log) {
382
+ log("Usage: radar workflow generate combined-with-triage [options]");
383
+ log("");
384
+ log("Generates a GitHub Actions workflow that chains `radar watch run` ->");
385
+ log("`radar triage --apply` -> `radar research --batch --status triaged_research` ->");
386
+ log("per-group `radar research --digest` -> `radar review --batch` in one job");
387
+ log("(ADR-0018 §W5).");
388
+ log("");
389
+ log("Options:");
390
+ log(` --watch-cron <expression> 5-field cron expression (default: "${DEFAULT_WATCH_CRON}")`);
391
+ log(" --output <path> Output file under .github/workflows/");
392
+ log(` (default: ${DEFAULT_OUTPUT})`);
393
+ log(" --triage-agent <name> claude-code | codex-cli | gemini-cli | copilot (default: gemini-cli)");
394
+ log(" --research-agent <name> claude-code | codex-cli | gemini-cli | copilot (default: claude-code)");
395
+ log(" --review-agent <name> claude-code | codex-cli | gemini-cli | copilot (default: codex-cli)");
396
+ log(` --max-items N Hard cap on research --batch per run (default: ${RESEARCH_BATCH_DEFAULT_MAX_ITEMS})`);
397
+ log(" --slack-webhook <ref> Secret reference (e.g. secrets.SLACK_WEBHOOK) for the");
398
+ log(" triaged_unsure-queue alert (optional)");
399
+ log(" --force, -f Overwrite existing output file");
400
+ log("");
401
+ log("Required secrets (Settings → Secrets and variables → Actions):");
402
+ log(" ANTHROPIC_API_KEY when any role uses --agent claude-code");
403
+ log(" OPENAI_API_KEY when any role uses --agent codex-cli");
404
+ log(" GEMINI_API_KEY when any role uses --agent gemini-cli (default for triage)");
405
+ log(" GITHUB_TOKEN auto-provisioned (no manual setup needed)");
406
+ }
407
+ /**
408
+ * Entry point invoked by `runWorkflow` when the user types
409
+ * `radar workflow generate combined-with-triage`.
410
+ */
411
+ export async function runGenerateCombinedWithTriage(args, io = {}, cwd = process.cwd()) {
412
+ const log = io.log ?? ((m) => console.log(m));
413
+ const error = io.error ?? ((m) => console.error(m));
414
+ let parsed;
415
+ try {
416
+ parsed = parseGenerateCombinedWithTriageArgs(args);
417
+ }
418
+ catch (e) {
419
+ error(`workflow generate combined-with-triage: ${e instanceof Error ? e.message : String(e)}`);
420
+ return 2;
421
+ }
422
+ if (parsed.help) {
423
+ printGenerateCombinedWithTriageHelp(log);
424
+ return 0;
425
+ }
426
+ try {
427
+ await generateCombinedWithTriage({
428
+ cwd,
429
+ watchCron: parsed.watchCron,
430
+ output: parsed.output,
431
+ triageAgent: parsed.triageAgent,
432
+ researchAgent: parsed.researchAgent,
433
+ reviewAgent: parsed.reviewAgent,
434
+ maxItems: parsed.maxItems,
435
+ slackWebhook: parsed.slackWebhook,
436
+ force: parsed.force,
437
+ io,
438
+ });
439
+ return 0;
440
+ }
441
+ catch (e) {
442
+ error(`workflow generate combined-with-triage: ${e instanceof Error ? e.message : String(e)}`);
443
+ return 1;
444
+ }
445
+ }
446
+ //# sourceMappingURL=generate-combined-with-triage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generate-combined-with-triage.js","sourceRoot":"","sources":["../../../src/cli/workflow/generate-combined-with-triage.ts"],"names":[],"mappings":"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"}
@@ -17,12 +17,13 @@ export interface WorkflowCommandOptions {
17
17
  /**
18
18
  * Dispatcher for `radar workflow <subcommand>`.
19
19
  *
20
- * Today the supported subcommands are `generate watch` (#188) and
21
- * `generate combined` (this issue, #189). Additional `<type>` values
22
- * (`research` / `review` per #191) will land as new branches in the
23
- * `generate` switch without changing the surface.
20
+ * Supported subcommands: `generate watch` (#188), `generate combined`
21
+ * (#189), and `generate combined-with-triage` (#241 / ADR-0018 §W5).
22
+ * Additional `<type>` values (`research` / `review` per #191) will land
23
+ * as new branches in the `generate` switch without changing the surface.
24
24
  *
25
- * See ADR-0014 (workflow generate sub-command) for the full design rationale.
25
+ * See ADR-0014 (workflow generate sub-command) and ADR-0018 (LLM-based
26
+ * triage extension) for the full design rationale.
26
27
  */
27
28
  export declare function runWorkflow(args: string[], options?: WorkflowCommandOptions): Promise<number>;
28
29
  export declare const workflowCommand: Command;
@@ -1 +1 @@
1
- {"version":3,"file":"workflow.d.ts","sourceRoot":"","sources":["../../src/cli/workflow.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAI1C;;;;GAIG;AACH,MAAM,WAAW,UAAU;IACzB,GAAG,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IAChC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IACjC,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;CACnC;AAED,MAAM,WAAW,sBAAsB;IACrC,qEAAqE;IACrE,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,EAAE,CAAC,EAAE,UAAU,CAAC;CACjB;AAsBD;;;;;;;;;GASG;AACH,wBAAsB,WAAW,CAC/B,IAAI,EAAE,MAAM,EAAE,EACd,OAAO,GAAE,sBAA2B,GACnC,OAAO,CAAC,MAAM,CAAC,CAiCjB;AAED,eAAO,MAAM,eAAe,EAAE,OAI7B,CAAC"}
1
+ {"version":3,"file":"workflow.d.ts","sourceRoot":"","sources":["../../src/cli/workflow.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAK1C;;;;GAIG;AACH,MAAM,WAAW,UAAU;IACzB,GAAG,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IAChC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IACjC,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;CACnC;AAED,MAAM,WAAW,sBAAsB;IACrC,qEAAqE;IACrE,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,EAAE,CAAC,EAAE,UAAU,CAAC;CACjB;AA6BD;;;;;;;;;;GAUG;AACH,wBAAsB,WAAW,CAC/B,IAAI,EAAE,MAAM,EAAE,EACd,OAAO,GAAE,sBAA2B,GACnC,OAAO,CAAC,MAAM,CAAC,CAmCjB;AAED,eAAO,MAAM,eAAe,EAAE,OAI7B,CAAC"}
@@ -1,11 +1,12 @@
1
1
  import { runGenerateCombined } from "./workflow/generate-combined.js";
2
+ import { runGenerateCombinedWithTriage } from "./workflow/generate-combined-with-triage.js";
2
3
  import { runGenerateWatch } from "./workflow/generate-watch.js";
3
4
  function printWorkflowHelp(log) {
4
5
  log("Usage: radar workflow <subcommand> [...]");
5
6
  log("");
6
7
  log("Subcommands:");
7
8
  log(" generate <type> Generate a GitHub Actions workflow YAML");
8
- log(" Types: watch | combined (more types in future sub-issues)");
9
+ log(" Types: watch | combined | combined-with-triage");
9
10
  log("");
10
11
  log("Run `radar workflow generate <type> --help` for type-specific options.");
11
12
  }
@@ -13,20 +14,22 @@ function printGenerateHelp(log) {
13
14
  log("Usage: radar workflow generate <type> [options]");
14
15
  log("");
15
16
  log("Types:");
16
- log(" watch Periodic `radar watch run` (cron + state commit with rebase retry)");
17
- log(" combined Periodic `radar watch run` -> auto research --batch with hard cap (ADR-0014)");
17
+ log(" watch Periodic `radar watch run` (cron + state commit with rebase retry)");
18
+ log(" combined Periodic `radar watch run` -> auto research --batch with hard cap (ADR-0014)");
19
+ log(" combined-with-triage `watch run` -> `triage --apply` -> `research --batch` -> per-group `research --digest` -> `review --batch` in one job (ADR-0018 §W5)");
18
20
  log("");
19
21
  log("Run `radar workflow generate <type> --help` for type-specific options.");
20
22
  }
21
23
  /**
22
24
  * Dispatcher for `radar workflow <subcommand>`.
23
25
  *
24
- * Today the supported subcommands are `generate watch` (#188) and
25
- * `generate combined` (this issue, #189). Additional `<type>` values
26
- * (`research` / `review` per #191) will land as new branches in the
27
- * `generate` switch without changing the surface.
26
+ * Supported subcommands: `generate watch` (#188), `generate combined`
27
+ * (#189), and `generate combined-with-triage` (#241 / ADR-0018 §W5).
28
+ * Additional `<type>` values (`research` / `review` per #191) will land
29
+ * as new branches in the `generate` switch without changing the surface.
28
30
  *
29
- * See ADR-0014 (workflow generate sub-command) for the full design rationale.
31
+ * See ADR-0014 (workflow generate sub-command) and ADR-0018 (LLM-based
32
+ * triage extension) for the full design rationale.
30
33
  */
31
34
  export async function runWorkflow(args, options = {}) {
32
35
  const cwd = options.cwd ?? process.cwd();
@@ -52,6 +55,8 @@ export async function runWorkflow(args, options = {}) {
52
55
  return runGenerateWatch(typeArgs, options.io ?? {}, cwd);
53
56
  case "combined":
54
57
  return runGenerateCombined(typeArgs, options.io ?? {}, cwd);
58
+ case "combined-with-triage":
59
+ return runGenerateCombinedWithTriage(typeArgs, options.io ?? {}, cwd);
55
60
  default:
56
61
  error(`workflow generate: unknown type '${type}'`);
57
62
  printGenerateHelp(error);
@@ -1 +1 @@
1
- {"version":3,"file":"workflow.js","sourceRoot":"","sources":["../../src/cli/workflow.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"workflow.js","sourceRoot":"","sources":["../../src/cli/workflow.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"recipes.d.ts","sourceRoot":"","sources":["../../src/core/recipes.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,KAAK,UAAU,EAAoB,MAAM,sBAAsB,CAAC;AAEzE;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AAEH,8EAA8E;AAC9E,MAAM,WAAW,YAAY;IAC3B,qEAAqE;IACrE,IAAI,EAAE,MAAM,CAAC;IACb,mEAAmE;IACnE,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,UAAU,CAAC;CACpB;AAED,mFAAmF;AACnF,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,6EAA6E;IAC7E,MAAM,EAAE,UAAU,GAAG,IAAI,CAAC;IAC1B,sEAAsE;IACtE,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,uFAAuF;AACvF,MAAM,WAAW,mBAAmB;IAClC,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED;;;;;;;;;;GAUG;AACH,wBAAsB,kBAAkB,IAAI,OAAO,CAAC,MAAM,CAAC,CAS1D;AAWD;;;;;;;;;;;;;;GAcG;AACH,wBAAsB,WAAW,CAAC,IAAI,GAAE,mBAAwB,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC,CA8D5F;AAED;;;;;;;;;;;GAWG;AACH,wBAAsB,UAAU,CAC9B,IAAI,EAAE,MAAM,EACZ,IAAI,GAAE,mBAAwB,GAC7B,OAAO,CAAC,YAAY,CAAC,CAyDvB;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,WAAW,eAAe;IAC9B,qDAAqD;IACrD,EAAE,EAAE,MAAM,CAAC;IACX,0DAA0D;IAC1D,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,sEAAsE;IACtE,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,2EAA2E;IAC3E,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,kFAAkF;IAClF,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;CAC5B;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,wBAAwB,CACtC,MAAM,EAAE,UAAU,EAClB,SAAS,EAAE,eAAe,GACzB,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAkDzB"}
1
+ {"version":3,"file":"recipes.d.ts","sourceRoot":"","sources":["../../src/core/recipes.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,KAAK,UAAU,EAAoB,MAAM,sBAAsB,CAAC;AAEzE;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AAEH,8EAA8E;AAC9E,MAAM,WAAW,YAAY;IAC3B,qEAAqE;IACrE,IAAI,EAAE,MAAM,CAAC;IACb,mEAAmE;IACnE,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,UAAU,CAAC;CACpB;AAED,mFAAmF;AACnF,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,6EAA6E;IAC7E,MAAM,EAAE,UAAU,GAAG,IAAI,CAAC;IAC1B,sEAAsE;IACtE,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,uFAAuF;AACvF,MAAM,WAAW,mBAAmB;IAClC,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED;;;;;;;;;;GAUG;AACH,wBAAsB,kBAAkB,IAAI,OAAO,CAAC,MAAM,CAAC,CAS1D;AAWD;;;;;;;;;;;;;;GAcG;AACH,wBAAsB,WAAW,CAAC,IAAI,GAAE,mBAAwB,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC,CA8D5F;AAED;;;;;;;;;;;GAWG;AACH,wBAAsB,UAAU,CAC9B,IAAI,EAAE,MAAM,EACZ,IAAI,GAAE,mBAAwB,GAC7B,OAAO,CAAC,YAAY,CAAC,CAyDvB;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,WAAW,eAAe;IAC9B,qDAAqD;IACrD,EAAE,EAAE,MAAM,CAAC;IACX,0DAA0D;IAC1D,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,sEAAsE;IACtE,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,2EAA2E;IAC3E,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,kFAAkF;IAClF,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;CAC5B;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,wBAAwB,CACtC,MAAM,EAAE,UAAU,EAClB,SAAS,EAAE,eAAe,GACzB,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAuDzB"}
@@ -237,6 +237,12 @@ export function mergeRecipeWithOverrides(recipe, overrides) {
237
237
  if (recipe.facets !== undefined)
238
238
  candidate.facets = recipe.facets;
239
239
  candidate.trustLevel = recipe.trustLevel;
240
+ // ADR-0018 §W3 / #241: propagate the bundled triagePolicy so the user's
241
+ // `sources/<id>.yaml` carries the default policy after
242
+ // `radar source add --recipe`. Optional in `RecipeFileSchema`; absent
243
+ // when the recipe author did not author one (older bundled recipes).
244
+ if (recipe.triagePolicy !== undefined)
245
+ candidate.triagePolicy = recipe.triagePolicy;
240
246
  return candidate;
241
247
  }
242
248
  //# sourceMappingURL=recipes.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"recipes.js","sourceRoot":"","sources":["../../src/core/recipes.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC7D,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,KAAK,IAAI,SAAS,EAAE,MAAM,MAAM,CAAC;AAC1C,OAAO,EAAmB,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAwDzE;;;;;;;;;;GAUG;AACH,MAAM,CAAC,KAAK,UAAU,kBAAkB;IACtC,MAAM,IAAI,GAAG,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;IACrD,MAAM,QAAQ,GAAG,OAAO,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC;IAC7C,IAAI,MAAM,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC/B,OAAO,QAAQ,CAAC;IAClB,CAAC;IACD,uEAAuE;IACvE,kDAAkD;IAClD,OAAO,OAAO,CAAC,IAAI,EAAE,eAAe,CAAC,CAAC;AACxC,CAAC;AAED,KAAK,UAAU,UAAU,CAAC,CAAS;IACjC,IAAI,CAAC;QACH,MAAM,MAAM,CAAC,CAAC,CAAC,CAAC;QAChB,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED;;;;;;;;;;;;;;GAcG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,OAA4B,EAAE;IAC9D,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,IAAI,CAAC,MAAM,kBAAkB,EAAE,CAAC,CAAC;IAC9D,IAAI,CAAC,CAAC,MAAM,UAAU,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC;QAC9B,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,IAAI,OAAiB,CAAC;IACtB,IAAI,CAAC;QACH,OAAO,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAChC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,uEAAuE;IACvE,iEAAiE;IACjE,gBAAgB;IAChB,MAAM,SAAS,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IAEpE,MAAM,OAAO,GAAsB,EAAE,CAAC;IACtC,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;QACjC,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;QAClC,MAAM,IAAI,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QAChD,IAAI,GAAW,CAAC;QAChB,IAAI,CAAC;YACH,GAAG,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QACrC,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,OAAO,CAAC,IAAI,CAAC;gBACX,IAAI;gBACJ,IAAI;gBACJ,MAAM,EAAE,IAAI;gBACZ,KAAK,EAAE,mBAAmB,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE;aACvE,CAAC,CAAC;YACH,SAAS;QACX,CAAC;QACD,IAAI,MAAe,CAAC;QACpB,IAAI,CAAC;YACH,MAAM,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC;QAC1B,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,OAAO,CAAC,IAAI,CAAC;gBACX,IAAI;gBACJ,IAAI;gBACJ,MAAM,EAAE,IAAI;gBACZ,KAAK,EAAE,iBAAiB,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE;aACrE,CAAC,CAAC;YACH,SAAS;QACX,CAAC;QACD,MAAM,MAAM,GAAG,gBAAgB,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;QAClD,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YACpB,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM;iBAC/B,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,QAAQ,KAAK,CAAC,CAAC,OAAO,EAAE,CAAC;iBAC3D,IAAI,CAAC,IAAI,CAAC,CAAC;YACd,OAAO,CAAC,IAAI,CAAC;gBACX,IAAI;gBACJ,IAAI;gBACJ,MAAM,EAAE,IAAI;gBACZ,KAAK,EAAE,6BAA6B,MAAM,EAAE;aAC7C,CAAC,CAAC;YACH,SAAS;QACX,CAAC;QACD,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;IACpD,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED;;;;;;;;;;;GAWG;AACH,MAAM,CAAC,KAAK,UAAU,UAAU,CAC9B,IAAY,EACZ,OAA4B,EAAE;IAE9B,uEAAuE;IACvE,sEAAsE;IACtE,oEAAoE;IACpE,yBAAyB;IACzB,IAAI,CAAC,8BAA8B,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;QACtE,MAAM,IAAI,KAAK,CAAC,wBAAwB,IAAI,2CAA2C,CAAC,CAAC;IAC3F,CAAC;IAED,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,IAAI,CAAC,MAAM,kBAAkB,EAAE,CAAC,CAAC;IAC9D,IAAI,CAAC,CAAC,MAAM,UAAU,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC;QAC9B,MAAM,IAAI,KAAK,CACb,uDAAuD,IAAI,cAAc,IAAI,sBAAsB,CACpG,CAAC;IACJ,CAAC;IAED,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE,GAAG,IAAI,OAAO,CAAC,CAAC;IACxC,IAAI,CAAC,CAAC,MAAM,UAAU,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC;QAC9B,sEAAsE;QACtE,kEAAkE;QAClE,iEAAiE;QACjE,IAAI,SAAS,GAAa,EAAE,CAAC;QAC7B,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,MAAM,WAAW,CAAC,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC;YACrD,SAAS,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QACrC,CAAC;QAAC,MAAM,CAAC;YACP,uDAAuD;QACzD,CAAC;QACD,MAAM,IAAI,GAAG,SAAS,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,gBAAgB,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC;QACnF,MAAM,IAAI,KAAK,CAAC,WAAW,IAAI,cAAc,IAAI,EAAE,CAAC,CAAC;IACvD,CAAC;IAED,IAAI,GAAW,CAAC;IAChB,IAAI,CAAC;QACH,GAAG,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IACrC,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,MAAM,IAAI,KAAK,CACb,0BAA0B,IAAI,MAAM,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CACjF,CAAC;IACJ,CAAC;IACD,IAAI,MAAe,CAAC;IACpB,IAAI,CAAC;QACH,MAAM,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC;IAC1B,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,MAAM,IAAI,KAAK,CACb,2BAA2B,IAAI,MAAM,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAClF,CAAC;IACJ,CAAC;IACD,MAAM,MAAM,GAAG,gBAAgB,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;IAClD,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;QACpB,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM;aAC/B,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,QAAQ,KAAK,CAAC,CAAC,OAAO,EAAE,CAAC;aAC3D,IAAI,CAAC,IAAI,CAAC,CAAC;QACd,MAAM,IAAI,KAAK,CAAC,WAAW,IAAI,+BAA+B,MAAM,EAAE,CAAC,CAAC;IAC1E,CAAC;IAED,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,IAAI,EAAE,CAAC;AAC7C,CAAC;AAkCD;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,wBAAwB,CACtC,MAAkB,EAClB,SAA0B;IAE1B,qEAAqE;IACrE,sEAAsE;IACtE,sCAAsC;IACtC,MAAM,SAAS,GAA4B;QACzC,EAAE,EAAE,SAAS,CAAC,EAAE;QAChB,IAAI,EAAE,MAAM,CAAC,IAAI;QACjB,GAAG,EAAE,MAAM,CAAC,GAAG;KAChB,CAAC;IAEF,sEAAsE;IACtE,IAAI,SAAS,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;QACjC,SAAS,CAAC,IAAI,GAAG,SAAS,CAAC,IAAI,CAAC;IAClC,CAAC;SAAM,IAAI,MAAM,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;QACrC,SAAS,CAAC,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC;IAC/B,CAAC;IAED,yEAAyE;IACzE,qEAAqE;IACrE,yCAAyC;IACzC,MAAM,IAAI,GAAG,SAAS,CAAC,IAAI,IAAI,MAAM,CAAC,IAAI,CAAC;IAC3C,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACpB,SAAS,CAAC,IAAI,GAAG,IAAI,CAAC;IACxB,CAAC;IAED,qEAAqE;IACrE,wEAAwE;IACxE,uEAAuE;IACvE,kBAAkB;IAClB,MAAM,aAAa,GAAG;QACpB,GAAG,MAAM,CAAC,OAAO;QACjB,QAAQ,EAAE,SAAS,CAAC,QAAQ,IAAI,MAAM,CAAC,OAAO,CAAC,QAAQ;QACvD,eAAe,EAAE,SAAS,CAAC,eAAe,IAAI,MAAM,CAAC,OAAO,CAAC,eAAe;KAC7E,CAAC;IACF,SAAS,CAAC,OAAO,GAAG,aAAa,CAAC;IAElC,oEAAoE;IACpE,kDAAkD;IAClD,IAAI,MAAM,CAAC,SAAS,KAAK,SAAS;QAAE,SAAS,CAAC,SAAS,GAAG,MAAM,CAAC,SAAS,CAAC;IAC3E,IAAI,MAAM,CAAC,EAAE,KAAK,SAAS;QAAE,SAAS,CAAC,EAAE,GAAG,MAAM,CAAC,EAAE,CAAC;IACtD,IAAI,MAAM,CAAC,IAAI,KAAK,SAAS;QAAE,SAAS,CAAC,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC;IAC5D,IAAI,MAAM,CAAC,UAAU,KAAK,SAAS;QAAE,SAAS,CAAC,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;IAC9E,IAAI,MAAM,CAAC,aAAa,KAAK,SAAS;QAAE,SAAS,CAAC,aAAa,GAAG,MAAM,CAAC,aAAa,CAAC;IACvF,uEAAuE;IACvE,wEAAwE;IACxE,IAAI,MAAM,CAAC,MAAM,KAAK,SAAS;QAAE,SAAS,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;IAElE,SAAS,CAAC,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;IAEzC,OAAO,SAAS,CAAC;AACnB,CAAC"}
1
+ {"version":3,"file":"recipes.js","sourceRoot":"","sources":["../../src/core/recipes.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,30 @@
1
+ import type { ItemStatus, TriageDecisionValue } from "../schemas/item.js";
2
+ /**
3
+ * Return `true` when transitioning `from → to` is allowed by the state
4
+ * machine. Same-state transitions return `false` — callers should short-
5
+ * circuit before invoking the state machine in idempotent paths.
6
+ */
7
+ export declare function isValidTransition(from: ItemStatus, to: ItemStatus): boolean;
8
+ /**
9
+ * Return the set of statuses an item in `from` is allowed to transition to.
10
+ * Useful for CLI error messages ("Cannot dismiss a researched item; valid
11
+ * next statuses are: reviewed").
12
+ */
13
+ export declare function allowedTransitions(from: ItemStatus): ItemStatus[];
14
+ /**
15
+ * Status set produced by the triage layer (ADR-0018 §W-B). Excludes
16
+ * `dismissed` because that is shared with the human-dismiss path — the
17
+ * origin is distinguished at the `dismissedBy` field on `Item`, not by
18
+ * status.
19
+ */
20
+ export declare const TRIAGE_INTERMEDIATE_STATUSES: readonly ItemStatus[];
21
+ /**
22
+ * Map a triage decision to the resulting `Item.status` post-triage.
23
+ *
24
+ * - `research` / `digest` / `unsure` → corresponding intermediate status
25
+ * - `dismiss` → `dismissed` (the triage origin is recorded separately in
26
+ * `Item.dismissedBy`; the status itself is shared with the human-dismiss
27
+ * path so existing `undismiss` / filter UX continues to work)
28
+ */
29
+ export declare function statusForTriageDecision(decision: TriageDecisionValue): ItemStatus;
30
+ //# sourceMappingURL=transitions.d.ts.map