@ozzylabs/feedradar 0.1.1 → 0.1.3

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 (78) hide show
  1. package/README.ja.md +16 -5
  2. package/README.md +16 -5
  3. package/dist/agents/_boundary.d.ts +48 -1
  4. package/dist/agents/_boundary.d.ts.map +1 -1
  5. package/dist/agents/_boundary.js +65 -0
  6. package/dist/agents/_boundary.js.map +1 -1
  7. package/dist/agents/claude-code.js +3 -3
  8. package/dist/agents/claude-code.js.map +1 -1
  9. package/dist/agents/codex-cli.js +3 -3
  10. package/dist/agents/codex-cli.js.map +1 -1
  11. package/dist/agents/copilot.js +3 -3
  12. package/dist/agents/copilot.js.map +1 -1
  13. package/dist/agents/gemini-cli.js +3 -3
  14. package/dist/agents/gemini-cli.js.map +1 -1
  15. package/dist/cli/doctor.d.ts +83 -0
  16. package/dist/cli/doctor.d.ts.map +1 -0
  17. package/dist/cli/doctor.js +260 -0
  18. package/dist/cli/doctor.js.map +1 -0
  19. package/dist/cli/index.d.ts.map +1 -1
  20. package/dist/cli/index.js +2 -2
  21. package/dist/cli/index.js.map +1 -1
  22. package/dist/cli/init.d.ts +14 -7
  23. package/dist/cli/init.d.ts.map +1 -1
  24. package/dist/cli/init.js +44 -2
  25. package/dist/cli/init.js.map +1 -1
  26. package/dist/cli/research.d.ts +10 -6
  27. package/dist/cli/research.d.ts.map +1 -1
  28. package/dist/cli/research.js +201 -35
  29. package/dist/cli/research.js.map +1 -1
  30. package/dist/cli/source.d.ts +25 -3
  31. package/dist/cli/source.d.ts.map +1 -1
  32. package/dist/cli/source.js +185 -8
  33. package/dist/cli/source.js.map +1 -1
  34. package/dist/cli/watch.d.ts +16 -0
  35. package/dist/cli/watch.d.ts.map +1 -1
  36. package/dist/cli/watch.js +3 -0
  37. package/dist/cli/watch.js.map +1 -1
  38. package/dist/core/feeds/_html-common.d.ts +30 -0
  39. package/dist/core/feeds/_html-common.d.ts.map +1 -0
  40. package/dist/core/feeds/_html-common.js +192 -0
  41. package/dist/core/feeds/_html-common.js.map +1 -0
  42. package/dist/core/feeds/html-js.d.ts +50 -0
  43. package/dist/core/feeds/html-js.d.ts.map +1 -0
  44. package/dist/core/feeds/html-js.js +135 -0
  45. package/dist/core/feeds/html-js.js.map +1 -0
  46. package/dist/core/feeds/html.d.ts +1 -7
  47. package/dist/core/feeds/html.d.ts.map +1 -1
  48. package/dist/core/feeds/html.js +25 -183
  49. package/dist/core/feeds/html.js.map +1 -1
  50. package/dist/core/feeds/index.d.ts.map +1 -1
  51. package/dist/core/feeds/index.js +2 -0
  52. package/dist/core/feeds/index.js.map +1 -1
  53. package/dist/core/feeds/rss.js +3 -3
  54. package/dist/core/feeds/rss.js.map +1 -1
  55. package/dist/core/playwright-check.d.ts +134 -0
  56. package/dist/core/playwright-check.d.ts.map +1 -0
  57. package/dist/core/playwright-check.js +98 -0
  58. package/dist/core/playwright-check.js.map +1 -0
  59. package/dist/core/templates.d.ts +10 -9
  60. package/dist/core/templates.d.ts.map +1 -1
  61. package/dist/core/templates.js +27 -12
  62. package/dist/core/templates.js.map +1 -1
  63. package/dist/core/watcher.d.ts +43 -0
  64. package/dist/core/watcher.d.ts.map +1 -1
  65. package/dist/core/watcher.js +84 -4
  66. package/dist/core/watcher.js.map +1 -1
  67. package/dist/schemas/source.d.ts +42 -0
  68. package/dist/schemas/source.d.ts.map +1 -1
  69. package/dist/schemas/source.js +42 -7
  70. package/dist/schemas/source.js.map +1 -1
  71. package/dist/schemas/state.d.ts +2 -0
  72. package/dist/schemas/state.d.ts.map +1 -1
  73. package/dist/schemas/state.js +4 -0
  74. package/dist/schemas/state.js.map +1 -1
  75. package/dist/templates/agents/AGENTS.md +4 -2
  76. package/dist/templates/digest.md +59 -0
  77. package/dist/templates/feedradar.md +4 -2
  78. package/package.json +11 -1
@@ -23,13 +23,17 @@ import { loadItems, saveItems } from "../core/items.js";
23
23
  import { loadTemplate } from "../core/templates.js";
24
24
  import { AgentIdSchema, ResearchFrontmatterSchema } from "../schemas/index.js";
25
25
  function parseArgs(args) {
26
- const out = {};
26
+ const out = { itemIds: [] };
27
27
  for (let i = 0; i < args.length; i++) {
28
28
  const a = args[i];
29
29
  if (a === "-h" || a === "--help") {
30
30
  out.help = true;
31
31
  continue;
32
32
  }
33
+ if (a === "--digest") {
34
+ out.digest = true;
35
+ continue;
36
+ }
33
37
  if (a === "--agent") {
34
38
  out.agent = args[++i];
35
39
  continue;
@@ -41,25 +45,29 @@ function parseArgs(args) {
41
45
  if (a?.startsWith("--")) {
42
46
  throw new Error(`unknown option: ${a}`);
43
47
  }
44
- if (!out.itemId) {
45
- out.itemId = a;
46
- continue;
48
+ if (a !== undefined) {
49
+ out.itemIds.push(a);
47
50
  }
48
- throw new Error(`unexpected positional argument: ${a}`);
49
51
  }
50
52
  return out;
51
53
  }
52
54
  function printHelp(log) {
53
- log("Usage: radar research <item-id> [--agent <agent-id>] [--template <template-id>]");
55
+ log("Usage:");
56
+ log(" radar research <item-id> [--agent <agent-id>] [--template <template-id>]");
57
+ log(" radar research --digest <item-id> <item-id> ... [--agent <agent-id>] [--template <id>]");
54
58
  log("");
55
59
  log("Arguments:");
56
60
  log(" <item-id> Item id (matches items/<sourceId>/<item-id>.yaml)");
61
+ log(" Pass 2 or more ids together with --digest to bundle them.");
57
62
  log("");
58
63
  log("Options:");
59
64
  log(" --agent <agent-id> claude-code | codex-cli | gemini-cli | copilot (default: claude-code)");
60
- log(" --template <id> Template id under templates/ (default: default)");
65
+ log(" --template <id> Template id under templates/ (default: default; digest: digest)");
66
+ log(" --digest Bundle multiple items into a single digest report (ADR-0011)");
61
67
  log("");
62
- log("Writes research/<YYYYMMDD>_<slug>_v1.md (ADR-0003).");
68
+ log("Output:");
69
+ log(" single-item: research/<YYYYMMDD>_<slug>_v1.md (ADR-0003)");
70
+ log(" digest: research/<YYYYMMDD>_digest_<slug>_v1.md (ADR-0011)");
63
71
  }
64
72
  async function pathExists(p) {
65
73
  try {
@@ -100,6 +108,76 @@ function buildDatePrefix(item, now) {
100
108
  const iso = item.publishedAt ?? now.toISOString();
101
109
  return iso.slice(0, 10).replace(/-/g, "");
102
110
  }
111
+ /**
112
+ * Pick `YYYYMMDD` for digest output. Per ADR-0011 §1, digest filenames use the
113
+ * **generation date** (UTC, CLI invocation time) rather than any item's
114
+ * `publishedAt`. Constituent items rarely share a publish date and the digest
115
+ * is a synthesis artifact, so the generation date is the only stable key.
116
+ */
117
+ function buildDigestDatePrefix(now) {
118
+ return now.toISOString().slice(0, 10).replace(/-/g, "");
119
+ }
120
+ /**
121
+ * Kebab-case helper used by both digest slug derivation and the clamp routine.
122
+ * Mirrors the algorithm pinned in ADR-0011 §2: lowercase, non-alphanumerics
123
+ * collapse to a single hyphen, leading/trailing hyphens are stripped.
124
+ */
125
+ function kebabCase(s) {
126
+ return s
127
+ .toLowerCase()
128
+ .replace(/[^a-z0-9]+/g, "-")
129
+ .replace(/^-+|-+$/g, "");
130
+ }
131
+ /**
132
+ * Trim a slug to `max` characters, but never end mid-word: cut at the last
133
+ * hyphen boundary inside the limit so the slug stays readable when truncated
134
+ * (ADR-0011 §2). When no hyphen is present we fall back to a hard cut.
135
+ */
136
+ function clampSlug(s, max = 60) {
137
+ if (s.length <= max)
138
+ return s;
139
+ const cut = s.slice(0, max);
140
+ const lastHyphen = cut.lastIndexOf("-");
141
+ return lastHyphen > 0 ? cut.slice(0, lastHyphen) : cut;
142
+ }
143
+ /**
144
+ * Derive the digest slug from the constituent items' `matchedKeywords`
145
+ * (ADR-0011 §2).
146
+ *
147
+ * Algorithm:
148
+ * 1. Aggregate every item's `matchedKeywords` into a frequency map keyed by
149
+ * the normalized (lowercased, trimmed) keyword. Empty strings are
150
+ * ignored so a noisy `[""]` entry cannot dominate the ranking.
151
+ * 2. Sort by frequency descending, ties broken by lexicographic ascending so
152
+ * the output is deterministic regardless of input item order.
153
+ * 3. Take the top 1-2 entries, kebab-case each, and join with `-`. If no
154
+ * keywords are present we fall back to the literal `"digest"` so the
155
+ * ADR-0011 filename pattern (`<date>_digest_<slug>_v<n>.md`) still
156
+ * produces a recognizable `<date>_digest_digest_v1.md` artifact.
157
+ * 4. Clamp to 60 chars on hyphen boundaries (`clampSlug`).
158
+ *
159
+ * Stable ordering matters because the digest id is content-addressed: the
160
+ * same item set must always yield the same filename so re-runs can detect
161
+ * collisions deterministically.
162
+ */
163
+ function deriveDigestSlug(items) {
164
+ const freq = new Map();
165
+ for (const item of items) {
166
+ for (const kw of item.matchedKeywords) {
167
+ const normalized = kw.toLowerCase().trim();
168
+ if (normalized === "")
169
+ continue;
170
+ freq.set(normalized, (freq.get(normalized) ?? 0) + 1);
171
+ }
172
+ }
173
+ const ranked = [...freq.entries()]
174
+ .sort((a, b) => b[1] - a[1] || a[0].localeCompare(b[0]))
175
+ .map(([kw]) => kw);
176
+ const top = ranked.slice(0, 2);
177
+ if (top.length === 0)
178
+ return "digest";
179
+ return clampSlug(top.map(kebabCase).join("-"));
180
+ }
103
181
  /**
104
182
  * Locate `items/<sourceId>/<item-id>.yaml` across all source directories,
105
183
  * since the CLI only takes `<item-id>` (sourceId is not on the command line).
@@ -119,17 +197,45 @@ async function findItem(cwd, itemId) {
119
197
  return { item: match };
120
198
  }
121
199
  /**
122
- * Implementation of `radar research <item-id>`.
200
+ * Locate multiple items at once. We do a single `loadItems` walk and then
201
+ * map the requested ids against the result, preserving the caller's order
202
+ * for the eventual `itemIds` frontmatter array (ADR-0011 keeps no constraint
203
+ * on order, but stable user-supplied order is the least surprising default).
204
+ *
205
+ * Returns `null` for the first missing id so the caller can emit a targeted
206
+ * error rather than walking `items/` repeatedly.
207
+ */
208
+ async function findItems(cwd, itemIds) {
209
+ const itemsDir = join(cwd, "items");
210
+ if (!(await pathExists(itemsDir)))
211
+ return { missing: itemIds[0] };
212
+ const all = await loadItems(itemsDir);
213
+ const byId = new Map(all.map((i) => [i.id, i]));
214
+ const matched = [];
215
+ for (const id of itemIds) {
216
+ const m = byId.get(id);
217
+ if (!m)
218
+ return { missing: id };
219
+ matched.push(m);
220
+ }
221
+ return { items: matched };
222
+ }
223
+ /**
224
+ * Implementation of `radar research <item-id>` (single-item) and
225
+ * `radar research --digest <id1> <id2> ...` (multi-item digest, ADR-0011).
123
226
  *
124
227
  * High-level flow (Phase 1):
125
- * 1. Parse + validate args (agent defaults to `claude-code`, template to `default`).
126
- * 2. Locate `items/<sourceId>/<item-id>.yaml` and parse it.
228
+ * 1. Parse + validate args (agent defaults to `claude-code`, template to
229
+ * `default` for single-item or `digest` for `--digest`).
230
+ * 2. Locate `items/<sourceId>/<item-id>.yaml` for each id and parse it.
127
231
  * 3. Load `templates/<template-id>.md` (empty body when default is absent).
128
- * 4. Compute `research/<YYYYMMDD>_<slug>_v1.md`; refuse to overwrite an
129
- * existing file (re-runs go through `update` per ADR-0003).
232
+ * 4. Compute the output path:
233
+ * - single-item: `research/<YYYYMMDD>_<slug>_v1.md` (ADR-0003)
234
+ * - digest: `research/<YYYYMMDD>_digest_<slug>_v1.md` (ADR-0011)
235
+ * Refuse to overwrite an existing file — re-runs go through `update`.
130
236
  * 5. Invoke the registered agent adapter; the agent writes the report.
131
237
  * 6. Validate the report's frontmatter against `ResearchFrontmatterSchema`.
132
- * 7. Transition the item: `status` → `researched` and persist.
238
+ * 7. Transition every included item: `status` → `researched` and persist.
133
239
  *
134
240
  * Any step from 4 onward that fails surfaces a non-zero exit code with a
135
241
  * targeted message so the user can debug without re-reading the source.
@@ -151,11 +257,25 @@ export async function runResearch(args, options = {}) {
151
257
  printHelp(log);
152
258
  return 0;
153
259
  }
154
- if (!parsed.itemId) {
260
+ if (parsed.itemIds.length === 0) {
155
261
  error("research: missing <item-id>");
156
262
  printHelp(error);
157
263
  return 2;
158
264
  }
265
+ // Single-item mode: enforce exactly one positional id so the existing
266
+ // behavior of `radar research <id>` is unambiguous. The user must opt into
267
+ // multi-item mode via `--digest`.
268
+ if (!parsed.digest && parsed.itemIds.length > 1) {
269
+ error(`research: multiple <item-id> arguments require --digest (got ${parsed.itemIds.length}: ${parsed.itemIds.join(", ")})`);
270
+ return 2;
271
+ }
272
+ // Digest mode: must bundle 2+ items per ADR-0011 §1 (a single-item digest
273
+ // is indistinguishable from a regular research run and would muddy the ID
274
+ // space). Reject early with exit 2 (argument error).
275
+ if (parsed.digest && parsed.itemIds.length < 2) {
276
+ error(`research: --digest requires 2 or more <item-id> arguments (got ${parsed.itemIds.length})`);
277
+ return 2;
278
+ }
159
279
  // Resolve the agent honoring the priority chain:
160
280
  // explicit --agent > radar.config.yaml defaultResearchAgent > "claude-code"
161
281
  // The explicit value is validated against AgentIdSchema first so a bogus
@@ -184,20 +304,45 @@ export async function runResearch(args, options = {}) {
184
304
  // Phase 2 sub-issues B / C / D / E ship all four adapters. AgentIdSchema
185
305
  // already rejected invalid `--agent` values upstream, so any value that
186
306
  // reaches here is supported.
187
- const templateId = parsed.template ?? "default";
188
- // Locate the item.
189
- const found = await findItem(cwd, parsed.itemId);
190
- if (!found) {
191
- error(`research: item '${parsed.itemId}' not found under items/`);
192
- return 1;
307
+ // Default template depends on mode: ADR-0011 §6 pins `digest` as the digest
308
+ // templateId so the bundled `templates/digest.md` is picked up automatically
309
+ // when the user doesn't pass `--template`.
310
+ const templateId = parsed.template ?? (parsed.digest ? "digest" : "default");
311
+ // Locate the item(s). Digest mode collects every id up front so a missing id
312
+ // fails before we invoke the agent (cheap fail-fast vs. burning tokens).
313
+ let items;
314
+ if (parsed.digest) {
315
+ const result = await findItems(cwd, parsed.itemIds);
316
+ if ("missing" in result) {
317
+ error(`research: item '${result.missing}' not found under items/`);
318
+ return 1;
319
+ }
320
+ items = result.items;
321
+ // ADR-0011 §5: a `dismissed` item must not appear in a digest. Validate
322
+ // up-front so the user can either remove the id or re-detect the source
323
+ // before re-running.
324
+ const dismissed = items.filter((i) => i.status === "dismissed");
325
+ if (dismissed.length > 0) {
326
+ error(`research: cannot include dismissed items in a digest: ${dismissed.map((i) => i.id).join(", ")}`);
327
+ return 1;
328
+ }
329
+ }
330
+ else {
331
+ const found = await findItem(cwd, parsed.itemIds[0]);
332
+ if (!found) {
333
+ error(`research: item '${parsed.itemIds[0]}' not found under items/`);
334
+ return 1;
335
+ }
336
+ items = [found.item];
193
337
  }
194
- const { item } = found;
195
338
  // Surface any prompt-injection pre-filter hits recorded by the watcher
196
339
  // (ADR-0009 M1a / M5a — Adopt). Audit-only: the agent still runs against
197
340
  // the original content, but the user gets an explicit warning so they can
198
341
  // `radar dismiss` and re-evaluate before committing tokens.
199
- if (item.injectionFlags.length > 0) {
200
- warn(`research: item '${item.id}' has ${item.injectionFlags.length} injection flag(s): ${item.injectionFlags.join(", ")} (audit-only; use \`radar dismiss\` to skip)`);
342
+ for (const item of items) {
343
+ if (item.injectionFlags.length > 0) {
344
+ warn(`research: item '${item.id}' has ${item.injectionFlags.length} injection flag(s): ${item.injectionFlags.join(", ")} (audit-only; use \`radar dismiss\` to skip)`);
345
+ }
201
346
  }
202
347
  // Load template.
203
348
  const templatesDir = join(cwd, "templates");
@@ -210,25 +355,39 @@ export async function runResearch(args, options = {}) {
210
355
  return 1;
211
356
  }
212
357
  // Compute output path. Refuse to overwrite an existing file — re-runs go
213
- // through `radar update` per ADR-0003 (immutable history).
358
+ // through `radar update` per ADR-0003 / ADR-0011 (immutable history).
214
359
  const now = new Date();
215
- const datePrefix = buildDatePrefix(item, now);
216
- const slug = buildSlug(item);
217
- const filename = `${datePrefix}_${slug}_v1.md`;
360
+ let filename;
361
+ if (parsed.digest) {
362
+ const datePrefix = buildDigestDatePrefix(now);
363
+ const slug = deriveDigestSlug(items);
364
+ filename = `${datePrefix}_digest_${slug}_v1.md`;
365
+ }
366
+ else {
367
+ const single = items[0];
368
+ const datePrefix = buildDatePrefix(single, now);
369
+ const slug = buildSlug(single);
370
+ filename = `${datePrefix}_${slug}_v1.md`;
371
+ }
218
372
  const outputPath = join(cwd, "research", filename);
219
373
  if (await pathExists(outputPath)) {
220
374
  error(`research: ${outputPath} already exists (use \`radar update\` to re-research)`);
221
375
  return 1;
222
376
  }
223
- log(`research: invoking ${agent} adapter for item '${item.id}' -> ${filename}`);
224
- // Invoke adapter.
377
+ const itemDescription = parsed.digest
378
+ ? `${items.length} items (${items.map((i) => i.id).join(", ")})`
379
+ : `item '${items[0].id}'`;
380
+ log(`research: invoking ${agent} adapter for ${itemDescription} -> ${filename}`);
381
+ // Invoke adapter. The multi-item signature lands via #140; the adapter
382
+ // already handles `items.length === 1` byte-equivalently for single-item
383
+ // callers so no branching is needed here.
225
384
  const adapter = getAgentAdapter(agent);
226
385
  try {
227
386
  await adapter.research({
228
387
  agent,
229
388
  templateId,
230
389
  templateBody: template.body,
231
- items: [item],
390
+ items,
232
391
  outputPath,
233
392
  cwd,
234
393
  });
@@ -289,12 +448,15 @@ export async function runResearch(args, options = {}) {
289
448
  }, matterOptions);
290
449
  await writeFile(outputPath, rewritten, "utf8");
291
450
  }
292
- // Transition item status.
293
- const updated = { ...item, status: "researched" };
451
+ // Transition item status. ADR-0011 §5: every included item transitions
452
+ // `detected` `researched`; terminal states (`researched` / `reviewed`)
453
+ // are protected and pass through unchanged so a digest that re-includes
454
+ // an already-researched item does not regress its status.
455
+ const updated = items.map((item) => item.status === "detected" ? { ...item, status: "researched" } : item);
294
456
  try {
295
457
  // saveItems writes by sourceId+id, so it will overwrite the existing file
296
458
  // in place. We rely on this rather than constructing the path manually.
297
- await saveItems(join(cwd, "items"), [updated]);
459
+ await saveItems(join(cwd, "items"), updated);
298
460
  }
299
461
  catch (e) {
300
462
  error(`research: failed to update item status: ${e instanceof Error ? e.message : String(e)}`);
@@ -302,7 +464,11 @@ export async function runResearch(args, options = {}) {
302
464
  return 1;
303
465
  }
304
466
  log(`research: wrote ${outputPath}`);
305
- log(`research: items/${item.sourceId}/${item.id}.yaml status -> researched`);
467
+ for (const item of updated) {
468
+ if (item.status === "researched") {
469
+ log(`research: items/${item.sourceId}/${item.id}.yaml status -> researched`);
470
+ }
471
+ }
306
472
  return 0;
307
473
  }
308
474
  export const researchCommand = {
@@ -1 +1 @@
1
- {"version":3,"file":"research.js","sourceRoot":"","sources":["../../src/cli/research.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"research.js","sourceRoot":"","sources":["../../src/cli/research.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,4 @@
1
+ import type { FetchLike } from "../core/feeds/types.js";
1
2
  import type { Command } from "./index.js";
2
3
  /**
3
4
  * Sinks for the source command's user-facing output.
@@ -19,6 +20,13 @@ export interface SourceCommandOptions {
19
20
  /** Workspace root (defaults to `process.cwd()` for the real CLI). */
20
21
  cwd?: string;
21
22
  io?: SourceIO;
23
+ /**
24
+ * Test seam: override the HTTP fetcher used by `source test`. Only the
25
+ * `test` subcommand currently needs it (it goes through `watchRun`); the
26
+ * field is declared here so `runSource` can forward the same options bag
27
+ * uniformly to every dispatcher branch.
28
+ */
29
+ fetch?: FetchLike;
22
30
  }
23
31
  /**
24
32
  * Implementation of `source add`.
@@ -45,12 +53,26 @@ export declare function listSources(args: string[], options?: SourceCommandOptio
45
53
  * never lose recorded research by toggling a source off.
46
54
  */
47
55
  export declare function removeSource(args: string[], options?: SourceCommandOptions): Promise<number>;
56
+ /**
57
+ * Implementation of `source test`.
58
+ *
59
+ * Dry-run preview for a single source: load `sources/<id>.yaml`, fetch + filter
60
+ * via `watchRun({ dryRun: true })`, and print a `fetched / filtered / matched`
61
+ * summary plus up to `--limit` matched items. Disk state is never mutated —
62
+ * neither `items/` nor `state/<id>.yaml` are written (see `watchRun`'s
63
+ * `dryRun` semantics in `src/core/watcher.ts`).
64
+ *
65
+ * Intended use case: while tuning `--keywords` on a brand-new source, run
66
+ * `radar source test <id>` to see which items would have matched before
67
+ * letting `watch run` ingest them for real.
68
+ */
69
+ export declare function testSource(args: string[], options?: SourceCommandOptions): Promise<number>;
48
70
  /**
49
71
  * Top-level dispatcher for `radar source <subcommand>`.
50
72
  *
51
- * Sub-commands are kept as named functions (addSource/listSources/removeSource)
52
- * so tests can call them directly with injected IO sinks without spawning the
53
- * full CLI.
73
+ * Sub-commands are kept as named functions (addSource/listSources/removeSource/
74
+ * testSource) so tests can call them directly with injected IO sinks without
75
+ * spawning the full CLI.
54
76
  */
55
77
  export declare function runSource(args: string[], options?: SourceCommandOptions): Promise<number>;
56
78
  export declare const sourceCommand: Command;
@@ -1 +1 @@
1
- {"version":3,"file":"source.d.ts","sourceRoot":"","sources":["../../src/cli/source.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAE1C;;;;;;;;;GASG;AACH,MAAM,WAAW,QAAQ;IACvB,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,wDAAwD;AACxD,MAAM,WAAW,oBAAoB;IACnC,qEAAqE;IACrE,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,EAAE,CAAC,EAAE,QAAQ,CAAC;CACf;AA4ND;;;;;;;GAOG;AACH,wBAAsB,SAAS,CAC7B,IAAI,EAAE,MAAM,EAAE,EACd,OAAO,GAAE,oBAAyB,GACjC,OAAO,CAAC,MAAM,CAAC,CAoHjB;AA6CD;;;;;;GAMG;AACH,wBAAsB,WAAW,CAC/B,IAAI,EAAE,MAAM,EAAE,EACd,OAAO,GAAE,oBAAyB,GACjC,OAAO,CAAC,MAAM,CAAC,CA2FjB;AA4BD;;;;;;GAMG;AACH,wBAAsB,YAAY,CAChC,IAAI,EAAE,MAAM,EAAE,EACd,OAAO,GAAE,oBAAyB,GACjC,OAAO,CAAC,MAAM,CAAC,CAmCjB;AAED;;;;;;GAMG;AACH,wBAAsB,SAAS,CAC7B,IAAI,EAAE,MAAM,EAAE,EACd,OAAO,GAAE,oBAAyB,GACjC,OAAO,CAAC,MAAM,CAAC,CAqBjB;AAED,eAAO,MAAM,aAAa,EAAE,OAI3B,CAAC"}
1
+ {"version":3,"file":"source.d.ts","sourceRoot":"","sources":["../../src/cli/source.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AAKxD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAE1C;;;;;;;;;GASG;AACH,MAAM,WAAW,QAAQ;IACvB,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,wDAAwD;AACxD,MAAM,WAAW,oBAAoB;IACnC,qEAAqE;IACrE,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,EAAE,CAAC,EAAE,QAAQ,CAAC;IACd;;;;;OAKG;IACH,KAAK,CAAC,EAAE,SAAS,CAAC;CACnB;AAgSD;;;;;;;GAOG;AACH,wBAAsB,SAAS,CAC7B,IAAI,EAAE,MAAM,EAAE,EACd,OAAO,GAAE,oBAAyB,GACjC,OAAO,CAAC,MAAM,CAAC,CAoHjB;AA6CD;;;;;;GAMG;AACH,wBAAsB,WAAW,CAC/B,IAAI,EAAE,MAAM,EAAE,EACd,OAAO,GAAE,oBAAyB,GACjC,OAAO,CAAC,MAAM,CAAC,CA2FjB;AA4BD;;;;;;GAMG;AACH,wBAAsB,YAAY,CAChC,IAAI,EAAE,MAAM,EAAE,EACd,OAAO,GAAE,oBAAyB,GACjC,OAAO,CAAC,MAAM,CAAC,CAmCjB;AAaD;;;;;;;;;;;;GAYG;AACH,wBAAsB,UAAU,CAC9B,IAAI,EAAE,MAAM,EAAE,EACd,OAAO,GAAE,oBAAyB,GACjC,OAAO,CAAC,MAAM,CAAC,CAsGjB;AAED;;;;;;GAMG;AACH,wBAAsB,SAAS,CAC7B,IAAI,EAAE,MAAM,EAAE,EACd,OAAO,GAAE,oBAAyB,GACjC,OAAO,CAAC,MAAM,CAAC,CAuBjB;AAED,eAAO,MAAM,aAAa,EAAE,OAI3B,CAAC"}