@ozzylabs/feedradar 0.1.4 → 0.1.5

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 (117) hide show
  1. package/README.ja.md +12 -6
  2. package/README.md +10 -5
  3. package/dist/agents/claude-code.d.ts +12 -1
  4. package/dist/agents/claude-code.d.ts.map +1 -1
  5. package/dist/agents/claude-code.js +9 -5
  6. package/dist/agents/claude-code.js.map +1 -1
  7. package/dist/agents/codex-cli.d.ts +7 -1
  8. package/dist/agents/codex-cli.d.ts.map +1 -1
  9. package/dist/agents/codex-cli.js +9 -5
  10. package/dist/agents/codex-cli.js.map +1 -1
  11. package/dist/agents/copilot.d.ts +7 -1
  12. package/dist/agents/copilot.d.ts.map +1 -1
  13. package/dist/agents/copilot.js +9 -5
  14. package/dist/agents/copilot.js.map +1 -1
  15. package/dist/agents/gemini-cli.d.ts +7 -1
  16. package/dist/agents/gemini-cli.d.ts.map +1 -1
  17. package/dist/agents/gemini-cli.js +9 -5
  18. package/dist/agents/gemini-cli.js.map +1 -1
  19. package/dist/agents/index.d.ts +1 -1
  20. package/dist/agents/index.d.ts.map +1 -1
  21. package/dist/agents/types.d.ts +33 -0
  22. package/dist/agents/types.d.ts.map +1 -1
  23. package/dist/cli/_progress.d.ts +138 -0
  24. package/dist/cli/_progress.d.ts.map +1 -0
  25. package/dist/cli/_progress.js +176 -0
  26. package/dist/cli/_progress.js.map +1 -0
  27. package/dist/cli/index.d.ts.map +1 -1
  28. package/dist/cli/index.js +2 -0
  29. package/dist/cli/index.js.map +1 -1
  30. package/dist/cli/research.d.ts +18 -20
  31. package/dist/cli/research.d.ts.map +1 -1
  32. package/dist/cli/research.js +318 -203
  33. package/dist/cli/research.js.map +1 -1
  34. package/dist/cli/review.d.ts +7 -0
  35. package/dist/cli/review.d.ts.map +1 -1
  36. package/dist/cli/review.js +46 -1
  37. package/dist/cli/review.js.map +1 -1
  38. package/dist/cli/source.d.ts +23 -2
  39. package/dist/cli/source.d.ts.map +1 -1
  40. package/dist/cli/source.js +425 -7
  41. package/dist/cli/source.js.map +1 -1
  42. package/dist/cli/update.d.ts +7 -0
  43. package/dist/cli/update.d.ts.map +1 -1
  44. package/dist/cli/update.js +41 -1
  45. package/dist/cli/update.js.map +1 -1
  46. package/dist/cli/watch.d.ts.map +1 -1
  47. package/dist/cli/watch.js +65 -3
  48. package/dist/cli/watch.js.map +1 -1
  49. package/dist/cli/workflow/generate-combined.d.ts +100 -0
  50. package/dist/cli/workflow/generate-combined.d.ts.map +1 -0
  51. package/dist/cli/workflow/generate-combined.js +387 -0
  52. package/dist/cli/workflow/generate-combined.js.map +1 -0
  53. package/dist/cli/workflow/generate-watch.d.ts +142 -0
  54. package/dist/cli/workflow/generate-watch.d.ts.map +1 -0
  55. package/dist/cli/workflow/generate-watch.js +338 -0
  56. package/dist/cli/workflow/generate-watch.js.map +1 -0
  57. package/dist/cli/workflow.d.ts +29 -0
  58. package/dist/cli/workflow.d.ts.map +1 -0
  59. package/dist/cli/workflow.js +66 -0
  60. package/dist/cli/workflow.js.map +1 -0
  61. package/dist/core/feeds/_fetch.d.ts +10 -0
  62. package/dist/core/feeds/_fetch.d.ts.map +1 -1
  63. package/dist/core/feeds/_fetch.js +182 -0
  64. package/dist/core/feeds/_fetch.js.map +1 -1
  65. package/dist/core/feeds/_jsonpath.d.ts +57 -0
  66. package/dist/core/feeds/_jsonpath.d.ts.map +1 -0
  67. package/dist/core/feeds/_jsonpath.js +207 -0
  68. package/dist/core/feeds/_jsonpath.js.map +1 -0
  69. package/dist/core/feeds/html-js.d.ts +8 -0
  70. package/dist/core/feeds/html-js.d.ts.map +1 -1
  71. package/dist/core/feeds/html-js.js +47 -1
  72. package/dist/core/feeds/html-js.js.map +1 -1
  73. package/dist/core/feeds/index.d.ts +1 -1
  74. package/dist/core/feeds/index.d.ts.map +1 -1
  75. package/dist/core/feeds/index.js +4 -0
  76. package/dist/core/feeds/index.js.map +1 -1
  77. package/dist/core/feeds/json-api.d.ts +3 -0
  78. package/dist/core/feeds/json-api.d.ts.map +1 -0
  79. package/dist/core/feeds/json-api.js +723 -0
  80. package/dist/core/feeds/json-api.js.map +1 -0
  81. package/dist/core/feeds/json-feed.d.ts +11 -0
  82. package/dist/core/feeds/json-feed.d.ts.map +1 -0
  83. package/dist/core/feeds/json-feed.js +242 -0
  84. package/dist/core/feeds/json-feed.js.map +1 -0
  85. package/dist/core/feeds/types.d.ts +123 -0
  86. package/dist/core/feeds/types.d.ts.map +1 -1
  87. package/dist/core/progress.d.ts +101 -0
  88. package/dist/core/progress.d.ts.map +1 -0
  89. package/dist/core/progress.js +212 -0
  90. package/dist/core/progress.js.map +1 -0
  91. package/dist/core/recipes.d.ts +138 -0
  92. package/dist/core/recipes.d.ts.map +1 -0
  93. package/dist/core/recipes.js +238 -0
  94. package/dist/core/recipes.js.map +1 -0
  95. package/dist/core/watcher.d.ts +61 -1
  96. package/dist/core/watcher.d.ts.map +1 -1
  97. package/dist/core/watcher.js +99 -2
  98. package/dist/core/watcher.js.map +1 -1
  99. package/dist/recipes/aws-whats-new.yaml +61 -0
  100. package/dist/recipes/dev-to.yaml +40 -0
  101. package/dist/schemas/index.d.ts +1 -0
  102. package/dist/schemas/index.d.ts.map +1 -1
  103. package/dist/schemas/index.js +1 -0
  104. package/dist/schemas/index.js.map +1 -1
  105. package/dist/schemas/recipe.d.ts +115 -0
  106. package/dist/schemas/recipe.d.ts.map +1 -0
  107. package/dist/schemas/recipe.js +54 -0
  108. package/dist/schemas/recipe.js.map +1 -0
  109. package/dist/schemas/source.d.ts +130 -0
  110. package/dist/schemas/source.d.ts.map +1 -1
  111. package/dist/schemas/source.js +130 -0
  112. package/dist/schemas/source.js.map +1 -1
  113. package/dist/templates/agents/AGENTS.md +31 -3
  114. package/dist/templates/feedradar.md +23 -8
  115. package/dist/templates/workflows/combined.template.yaml.tmpl +110 -0
  116. package/dist/templates/workflows/watch.template.yaml.tmpl +103 -0
  117. package/package.json +1 -2
@@ -0,0 +1,138 @@
1
+ import type { AgentProgressCallback } from "../agents/types.js";
2
+ import { noopProgressReporter, type ProgressLevel, type ProgressReporter } from "../core/progress.js";
3
+ /**
4
+ * Shared progress helpers for `radar research` / `review` / `update`.
5
+ *
6
+ * #197 wires `ProgressReporter` (ADR-0015) into the three agent-driven CLIs.
7
+ * The CLIs each follow the same phase-marker sequence (Loaded item / Loaded
8
+ * template / Spawning / Agent running / Agent completed / Frontmatter
9
+ * validated / Status transition), so the boilerplate lives here:
10
+ *
11
+ * - {@link parseProgressFlags} normalises `--verbose` / `--quiet` parsing
12
+ * (extracting them from `argv` so the per-command `parseArgs` sees a clean
13
+ * array)
14
+ * - {@link buildReporter} centralises the priority chain `RADAR_NO_PROGRESS=1`
15
+ * > `--quiet` > `--verbose` > default. The reporter writes to `stderr` so it
16
+ * never collides with the existing `io.log()` / `io.warn()` / `io.error()`
17
+ * sinks that tests inject (those still drive stdout-like channels).
18
+ * - {@link buildAgentProgressCallback} adapts the adapter's
19
+ * {@link AgentProgressCallback} (which receives raw stdout/stderr chunks)
20
+ * into reporter calls. It tracks cumulative stdout bytes so the spinner row
21
+ * shows `stdout: 4.2 KB`, and forwards chunks verbatim via `reporter.raw()`
22
+ * when the reporter is in verbose mode.
23
+ * - {@link pollOutputFileSize} starts a 500ms `fs.stat` poll so the spinner
24
+ * row can show how big the agent's output file is growing. The agent CLIs
25
+ * write the report to disk as they go (or atomically at the end); polling
26
+ * the file size is the only stream-agnostic way to surface "something is
27
+ * actually happening" because most agent runners only emit chatty stdout
28
+ * for tool calls, not for the report body itself.
29
+ *
30
+ * Naming convention follows ADR-0015 D4: every phase marker uses the verb-
31
+ * forms documented there (`Loaded …`, `Spawning …`, `Agent running…`,
32
+ * `Agent completed (…)`, `Status: … → …`).
33
+ */
34
+ export interface ProgressFlagState {
35
+ /** Argv with `--verbose` / `--quiet` stripped. */
36
+ rest: string[];
37
+ /** Resolved verbosity level. */
38
+ level: ProgressLevel;
39
+ /** Saw `--verbose` flag explicitly. */
40
+ verbose: boolean;
41
+ /** Saw `--quiet` flag explicitly. */
42
+ quiet: boolean;
43
+ }
44
+ export declare class ProgressFlagError extends Error {
45
+ constructor(message: string);
46
+ }
47
+ /**
48
+ * Strip `--verbose` / `--quiet` from `argv` and return the resolved
49
+ * {@link ProgressLevel} plus the remaining argv for the command's own parser.
50
+ *
51
+ * Mutually exclusive: passing both raises {@link ProgressFlagError} so the
52
+ * caller can convert it into an exit-code-2 usage error consistent with the
53
+ * existing `parseArgs` style. `RADAR_NO_PROGRESS=1` is honoured at reporter
54
+ * construction time (see {@link buildReporter}); we do not mix env handling
55
+ * into argv parsing because env is global and argv is per-invocation.
56
+ */
57
+ export declare function parseProgressFlags(argv: string[]): ProgressFlagState;
58
+ export interface BuildReporterOptions {
59
+ level: ProgressLevel;
60
+ /** Test-only TTY override. Falls back to `process.stderr.isTTY` at runtime. */
61
+ tty?: boolean;
62
+ /** Test-only output stream override. Defaults to `process.stderr`. */
63
+ stream?: NodeJS.WritableStream;
64
+ }
65
+ /**
66
+ * Construct a {@link ProgressReporter} for a CLI invocation. Thin wrapper
67
+ * around {@link createProgressReporter} that records the helper's existence
68
+ * for grep-discoverability — production callers route through here so the
69
+ * defaulting logic stays in one place.
70
+ *
71
+ * `level: "quiet"` and `RADAR_NO_PROGRESS=1` both produce a no-op reporter
72
+ * (the env check happens inside `createProgressReporter`); the CLI keeps its
73
+ * pre-existing 1-line `io.log("research: wrote …")` summary as the only
74
+ * surviving signal, satisfying the issue's acceptance criterion 8.
75
+ */
76
+ export declare function buildReporter(opts: BuildReporterOptions): ProgressReporter;
77
+ /**
78
+ * Render a byte count for the spinner row. Uses binary prefixes (KiB / MiB)
79
+ * but renders them as `KB` / `MB` for readability — the spinner is a UX
80
+ * affordance, not a precise meter, and the ADR-0015 D4 examples show `4.2 KB`
81
+ * without binary-suffix pedantry.
82
+ */
83
+ export declare function formatBytes(n: number): string;
84
+ /**
85
+ * Bridge {@link AgentProgressCallback} (raw stdout / stderr chunks) to a
86
+ * {@link ProgressReporter}.
87
+ *
88
+ * On every chunk:
89
+ * - cumulative stdout byte count is folded into the spinner row via
90
+ * `reporter.update({ stdout: "<formatted>" })`
91
+ * - `reporter.raw(text)` forwards the chunk verbatim. The reporter swallows
92
+ * the call unless verbosity is `verbose`, so non-verbose callers pay only
93
+ * the cost of the bridge function itself (no extra stderr writes).
94
+ *
95
+ * stderr chunks are also passed to `reporter.raw()` so `--verbose` users see
96
+ * agent CLI warnings inline. They don't update the `stdout:` metric (that
97
+ * key is intentionally tied to actual stdout volume so the spinner row stays
98
+ * comparable across runs).
99
+ */
100
+ export declare function buildAgentProgressCallback(reporter: ProgressReporter): AgentProgressCallback;
101
+ export interface OutputSizePollHandle {
102
+ /** Stop the poll loop. Safe to call multiple times. */
103
+ stop: () => void;
104
+ }
105
+ export interface OutputSizePollOptions {
106
+ /** Path to `fs.stat`. The agent should be writing here. */
107
+ path: string;
108
+ reporter: ProgressReporter;
109
+ /** Poll interval in milliseconds (default 500ms per ADR-0015 D5 / #197). */
110
+ intervalMs?: number;
111
+ /**
112
+ * Metric key on the spinner row. Defaults to `output` so the row reads
113
+ * `output: 4.2 KB`. Tests override for deterministic assertions.
114
+ */
115
+ metricKey?: string;
116
+ }
117
+ /**
118
+ * Poll the agent's output file with `fs.stat` every 500ms (configurable) and
119
+ * push the latest size onto the spinner row.
120
+ *
121
+ * Why polling instead of `fs.watch`: `fs.watch` is platform-flaky (Linux
122
+ * needs inotify, macOS uses FSEvents, WSL has its own quirks) and the agent
123
+ * may write atomically at the end with no intermediate `change` events. A
124
+ * 500ms `fs.stat` poll is reliable everywhere and the cost (one syscall per
125
+ * tick) is negligible next to the agent CLI spawn.
126
+ *
127
+ * The poll silently ignores `ENOENT` because the agent writes the file part-
128
+ * way through the run; we only start showing sizes once the file exists. Any
129
+ * other stat error is also swallowed (best-effort UX, the reporter must
130
+ * never abort the actual research operation).
131
+ */
132
+ export declare function pollOutputFileSize(opts: OutputSizePollOptions): OutputSizePollHandle;
133
+ /**
134
+ * Convenience: return a no-op reporter typed as a {@link ProgressReporter}.
135
+ * Re-exported here so CLI modules don't have to import from two places.
136
+ */
137
+ export { noopProgressReporter };
138
+ //# sourceMappingURL=_progress.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"_progress.d.ts","sourceRoot":"","sources":["../../src/cli/_progress.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAChE,OAAO,EAEL,oBAAoB,EACpB,KAAK,aAAa,EAClB,KAAK,gBAAgB,EACtB,MAAM,qBAAqB,CAAC;AAE7B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AAEH,MAAM,WAAW,iBAAiB;IAChC,kDAAkD;IAClD,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,gCAAgC;IAChC,KAAK,EAAE,aAAa,CAAC;IACrB,uCAAuC;IACvC,OAAO,EAAE,OAAO,CAAC;IACjB,qCAAqC;IACrC,KAAK,EAAE,OAAO,CAAC;CAChB;AAED,qBAAa,iBAAkB,SAAQ,KAAK;gBAC9B,OAAO,EAAE,MAAM;CAI5B;AAED;;;;;;;;;GASG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,iBAAiB,CAuBpE;AAED,MAAM,WAAW,oBAAoB;IACnC,KAAK,EAAE,aAAa,CAAC;IACrB,+EAA+E;IAC/E,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,sEAAsE;IACtE,MAAM,CAAC,EAAE,MAAM,CAAC,cAAc,CAAC;CAChC;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,oBAAoB,GAAG,gBAAgB,CAM1E;AAKD;;;;;GAKG;AACH,wBAAgB,WAAW,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAI7C;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,0BAA0B,CAAC,QAAQ,EAAE,gBAAgB,GAAG,qBAAqB,CAS5F;AAED,MAAM,WAAW,oBAAoB;IACnC,uDAAuD;IACvD,IAAI,EAAE,MAAM,IAAI,CAAC;CAClB;AAED,MAAM,WAAW,qBAAqB;IACpC,2DAA2D;IAC3D,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,gBAAgB,CAAC;IAC3B,4EAA4E;IAC5E,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB;;;OAGG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,qBAAqB,GAAG,oBAAoB,CAgDpF;AAED;;;GAGG;AACH,OAAO,EAAE,oBAAoB,EAAE,CAAC"}
@@ -0,0 +1,176 @@
1
+ import { stat } from "node:fs/promises";
2
+ import { createProgressReporter, noopProgressReporter, } from "../core/progress.js";
3
+ export class ProgressFlagError extends Error {
4
+ constructor(message) {
5
+ super(message);
6
+ this.name = "ProgressFlagError";
7
+ }
8
+ }
9
+ /**
10
+ * Strip `--verbose` / `--quiet` from `argv` and return the resolved
11
+ * {@link ProgressLevel} plus the remaining argv for the command's own parser.
12
+ *
13
+ * Mutually exclusive: passing both raises {@link ProgressFlagError} so the
14
+ * caller can convert it into an exit-code-2 usage error consistent with the
15
+ * existing `parseArgs` style. `RADAR_NO_PROGRESS=1` is honoured at reporter
16
+ * construction time (see {@link buildReporter}); we do not mix env handling
17
+ * into argv parsing because env is global and argv is per-invocation.
18
+ */
19
+ export function parseProgressFlags(argv) {
20
+ const rest = [];
21
+ let verbose = false;
22
+ let quiet = false;
23
+ for (const arg of argv) {
24
+ if (arg === "--verbose") {
25
+ verbose = true;
26
+ continue;
27
+ }
28
+ if (arg === "--quiet") {
29
+ quiet = true;
30
+ continue;
31
+ }
32
+ rest.push(arg);
33
+ }
34
+ if (verbose && quiet) {
35
+ throw new ProgressFlagError("--verbose and --quiet are mutually exclusive");
36
+ }
37
+ let level;
38
+ if (quiet)
39
+ level = "quiet";
40
+ else if (verbose)
41
+ level = "verbose";
42
+ else
43
+ level = "normal";
44
+ return { rest, level, verbose, quiet };
45
+ }
46
+ /**
47
+ * Construct a {@link ProgressReporter} for a CLI invocation. Thin wrapper
48
+ * around {@link createProgressReporter} that records the helper's existence
49
+ * for grep-discoverability — production callers route through here so the
50
+ * defaulting logic stays in one place.
51
+ *
52
+ * `level: "quiet"` and `RADAR_NO_PROGRESS=1` both produce a no-op reporter
53
+ * (the env check happens inside `createProgressReporter`); the CLI keeps its
54
+ * pre-existing 1-line `io.log("research: wrote …")` summary as the only
55
+ * surviving signal, satisfying the issue's acceptance criterion 8.
56
+ */
57
+ export function buildReporter(opts) {
58
+ return createProgressReporter({
59
+ level: opts.level,
60
+ tty: opts.tty,
61
+ stream: opts.stream,
62
+ });
63
+ }
64
+ const KIB = 1024;
65
+ const MIB = KIB * 1024;
66
+ /**
67
+ * Render a byte count for the spinner row. Uses binary prefixes (KiB / MiB)
68
+ * but renders them as `KB` / `MB` for readability — the spinner is a UX
69
+ * affordance, not a precise meter, and the ADR-0015 D4 examples show `4.2 KB`
70
+ * without binary-suffix pedantry.
71
+ */
72
+ export function formatBytes(n) {
73
+ if (n < KIB)
74
+ return `${n} B`;
75
+ if (n < MIB)
76
+ return `${(n / KIB).toFixed(1)} KB`;
77
+ return `${(n / MIB).toFixed(1)} MB`;
78
+ }
79
+ /**
80
+ * Bridge {@link AgentProgressCallback} (raw stdout / stderr chunks) to a
81
+ * {@link ProgressReporter}.
82
+ *
83
+ * On every chunk:
84
+ * - cumulative stdout byte count is folded into the spinner row via
85
+ * `reporter.update({ stdout: "<formatted>" })`
86
+ * - `reporter.raw(text)` forwards the chunk verbatim. The reporter swallows
87
+ * the call unless verbosity is `verbose`, so non-verbose callers pay only
88
+ * the cost of the bridge function itself (no extra stderr writes).
89
+ *
90
+ * stderr chunks are also passed to `reporter.raw()` so `--verbose` users see
91
+ * agent CLI warnings inline. They don't update the `stdout:` metric (that
92
+ * key is intentionally tied to actual stdout volume so the spinner row stays
93
+ * comparable across runs).
94
+ */
95
+ export function buildAgentProgressCallback(reporter) {
96
+ let stdoutBytes = 0;
97
+ return (kind, text) => {
98
+ if (kind === "stdout") {
99
+ stdoutBytes += Buffer.byteLength(text, "utf8");
100
+ reporter.update({ stdout: formatBytes(stdoutBytes) });
101
+ }
102
+ reporter.raw(text);
103
+ };
104
+ }
105
+ /**
106
+ * Poll the agent's output file with `fs.stat` every 500ms (configurable) and
107
+ * push the latest size onto the spinner row.
108
+ *
109
+ * Why polling instead of `fs.watch`: `fs.watch` is platform-flaky (Linux
110
+ * needs inotify, macOS uses FSEvents, WSL has its own quirks) and the agent
111
+ * may write atomically at the end with no intermediate `change` events. A
112
+ * 500ms `fs.stat` poll is reliable everywhere and the cost (one syscall per
113
+ * tick) is negligible next to the agent CLI spawn.
114
+ *
115
+ * The poll silently ignores `ENOENT` because the agent writes the file part-
116
+ * way through the run; we only start showing sizes once the file exists. Any
117
+ * other stat error is also swallowed (best-effort UX, the reporter must
118
+ * never abort the actual research operation).
119
+ */
120
+ export function pollOutputFileSize(opts) {
121
+ const intervalMs = opts.intervalMs ?? 500;
122
+ const metricKey = opts.metricKey ?? "output";
123
+ let stopped = false;
124
+ let timer = null;
125
+ let lastReportedSize = -1;
126
+ const tick = async () => {
127
+ if (stopped)
128
+ return;
129
+ try {
130
+ const s = await stat(opts.path);
131
+ if (s.size !== lastReportedSize) {
132
+ lastReportedSize = s.size;
133
+ opts.reporter.update({ [metricKey]: formatBytes(s.size) });
134
+ }
135
+ }
136
+ catch {
137
+ // ENOENT during the early phase of the agent run, or transient stat
138
+ // failure — silently ignore so the spinner UX never crashes the real
139
+ // operation.
140
+ }
141
+ };
142
+ // First tick on next macrotask so callers can return the handle before the
143
+ // poll begins. setInterval also schedules; we add the immediate call so the
144
+ // spinner picks up an existing file without waiting a full interval.
145
+ const startup = setTimeout(() => {
146
+ if (!stopped) {
147
+ void tick();
148
+ timer = setInterval(() => {
149
+ void tick();
150
+ }, intervalMs);
151
+ // Don't keep the event loop alive just for the poll.
152
+ if (typeof timer.unref === "function") {
153
+ timer.unref();
154
+ }
155
+ }
156
+ }, 0);
157
+ if (typeof startup.unref === "function") {
158
+ startup.unref();
159
+ }
160
+ return {
161
+ stop() {
162
+ stopped = true;
163
+ clearTimeout(startup);
164
+ if (timer) {
165
+ clearInterval(timer);
166
+ timer = null;
167
+ }
168
+ },
169
+ };
170
+ }
171
+ /**
172
+ * Convenience: return a no-op reporter typed as a {@link ProgressReporter}.
173
+ * Re-exported here so CLI modules don't have to import from two places.
174
+ */
175
+ export { noopProgressReporter };
176
+ //# sourceMappingURL=_progress.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"_progress.js","sourceRoot":"","sources":["../../src/cli/_progress.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"AAYA,MAAM,WAAW,OAAO;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,GAAG,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;CAC1C;AAoCD,wBAAsB,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAoBvD"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"AAaA,MAAM,WAAW,OAAO;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,GAAG,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;CAC1C;AAqCD,wBAAsB,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAoBvD"}
package/dist/cli/index.js CHANGED
@@ -9,6 +9,7 @@ import { reviewCommand } from "./review.js";
9
9
  import { sourceCommand } from "./source.js";
10
10
  import { updateCommand } from "./update.js";
11
11
  import { watchCommand } from "./watch.js";
12
+ import { workflowCommand } from "./workflow.js";
12
13
  const commands = [
13
14
  initCommand,
14
15
  sourceCommand,
@@ -18,6 +19,7 @@ const commands = [
18
19
  reviewCommand,
19
20
  updateCommand,
20
21
  doctorCommand,
22
+ workflowCommand,
21
23
  ];
22
24
  // Read the installed package's version at runtime so `radar --version`
23
25
  // tracks release-please bumps without a parallel source edit. The bin
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,15 @@
1
+ import type { ProgressReporter } from "../core/progress.js";
1
2
  import type { Command } from "./index.js";
3
+ /**
4
+ * Default hard-cap for `radar research --batch`.
5
+ *
6
+ * ADR-0014 D3a pins the default to 10: 2-10x the empirical detection rate
7
+ * (1-5 items per cron tick) while keeping LLM cost-per-tick bounded
8
+ * (~$0.01/item * 10 ~= $0.1). Generated workflow YAML embeds this same
9
+ * literal via `combined.template.yaml`, but the CLI re-enforces it so the
10
+ * cap also applies when the YAML is hand-edited.
11
+ */
12
+ export declare const RESEARCH_BATCH_DEFAULT_MAX_ITEMS = 10;
2
13
  /** Sinks for the research command's user-facing output. Tests inject capturing sinks. */
3
14
  export interface ResearchIO {
4
15
  log?: (message: string) => void;
@@ -8,27 +19,14 @@ export interface ResearchIO {
8
19
  export interface ResearchCommandOptions {
9
20
  cwd?: string;
10
21
  io?: ResearchIO;
22
+ /**
23
+ * Test-only override for the {@link ProgressReporter}. When omitted, the
24
+ * CLI constructs one from `--verbose` / `--quiet` / `RADAR_NO_PROGRESS`
25
+ * and the TTY auto-detection table (ADR-0015 D2). Tests pin a no-op or a
26
+ * capturing reporter so assertions are deterministic.
27
+ */
28
+ progress?: ProgressReporter;
11
29
  }
12
- /**
13
- * Implementation of `radar research <item-id>` (single-item) and
14
- * `radar research --digest <id1> <id2> ...` (multi-item digest, ADR-0011).
15
- *
16
- * High-level flow (Phase 1):
17
- * 1. Parse + validate args (agent defaults to `claude-code`, template to
18
- * `default` for single-item or `digest` for `--digest`).
19
- * 2. Locate `items/<sourceId>/<item-id>.yaml` for each id and parse it.
20
- * 3. Load `templates/<template-id>.md` (empty body when default is absent).
21
- * 4. Compute the output path:
22
- * - single-item: `research/<YYYYMMDD>_<slug>_v1.md` (ADR-0003)
23
- * - digest: `research/<YYYYMMDD>_digest_<slug>_v1.md` (ADR-0011)
24
- * Refuse to overwrite an existing file — re-runs go through `update`.
25
- * 5. Invoke the registered agent adapter; the agent writes the report.
26
- * 6. Validate the report's frontmatter against `ResearchFrontmatterSchema`.
27
- * 7. Transition every included item: `status` → `researched` and persist.
28
- *
29
- * Any step from 4 onward that fails surfaces a non-zero exit code with a
30
- * targeted message so the user can debug without re-reading the source.
31
- */
32
30
  export declare function runResearch(args: string[], options?: ResearchCommandOptions): Promise<number>;
33
31
  export declare const researchCommand: Command;
34
32
  //# sourceMappingURL=research.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"research.d.ts","sourceRoot":"","sources":["../../src/cli/research.ts"],"names":[],"mappings":"AA4BA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAE1C,yFAAyF;AACzF,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,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,EAAE,CAAC,EAAE,UAAU,CAAC;CACjB;AAyND;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAsB,WAAW,CAC/B,IAAI,EAAE,MAAM,EAAE,EACd,OAAO,GAAE,sBAA2B,GACnC,OAAO,CAAC,MAAM,CAAC,CAiQjB;AAED,eAAO,MAAM,eAAe,EAAE,OAI7B,CAAC"}
1
+ {"version":3,"file":"research.d.ts","sourceRoot":"","sources":["../../src/cli/research.ts"],"names":[],"mappings":"AAwBA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAY5D,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAE1C;;;;;;;;GAQG;AACH,eAAO,MAAM,gCAAgC,KAAK,CAAC;AAEnD,yFAAyF;AACzF,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,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,EAAE,CAAC,EAAE,UAAU,CAAC;IAChB;;;;;OAKG;IACH,QAAQ,CAAC,EAAE,gBAAgB,CAAC;CAC7B;AA4hBD,wBAAsB,WAAW,CAC/B,IAAI,EAAE,MAAM,EAAE,EACd,OAAO,GAAE,sBAA2B,GACnC,OAAO,CAAC,MAAM,CAAC,CAyHjB;AAED,eAAO,MAAM,eAAe,EAAE,OAI7B,CAAC"}