@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 @@
1
+ {"version":3,"file":"json-api.js","sourceRoot":"","sources":["../../../src/core/feeds/json-api.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ import type { Item, Source } from "../../schemas/index.js";
2
+ import type { FeedAdapter } from "./types.js";
3
+ /**
4
+ * Parse a single JSON Feed document into `Item[]` (no pagination). Exposed
5
+ * for unit tests so fixtures can exercise the parser without a fetch stub.
6
+ */
7
+ export declare function parseJsonFeed(body: string, source: Source, fetchedAt: string): Item[];
8
+ /** Extract `next_url` if it is a non-empty string; ignore non-string / empty. */
9
+ export declare function extractNextUrl(body: string): string | undefined;
10
+ export declare const jsonFeedAdapter: FeedAdapter;
11
+ //# sourceMappingURL=json-feed.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"json-feed.d.ts","sourceRoot":"","sources":["../../../src/core/feeds/json-feed.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAC;AAI3D,OAAO,KAAK,EAAE,WAAW,EAAiC,MAAM,YAAY,CAAC;AA4J7E;;;GAGG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI,EAAE,CAkBrF;AAED,iFAAiF;AACjF,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAO/D;AAgCD,eAAO,MAAM,eAAe,EAAE,WAqD7B,CAAC"}
@@ -0,0 +1,242 @@
1
+ import { ItemSchema } from "../../schemas/index.js";
2
+ import { fetchWithRetry } from "./_fetch.js";
3
+ import { deriveItemId, deriveStableKey } from "./derive-id.js";
4
+ /**
5
+ * `kind: json-feed` adapter — JSON Feed 1.0 / 1.1 zero-config parser.
6
+ *
7
+ * JSON Feed (https://jsonfeed.org/version/1.1) is a standardized JSON-based
8
+ * feed format. Because it is a real standard with a fixed schema, a single
9
+ * adapter can handle every conforming site with **URL only** — no recipe,
10
+ * no per-site config (ADR-0012 L0 tier, alongside `kind: rss`).
11
+ *
12
+ * What this adapter handles:
13
+ * - JSON Feed 1.0 (`version: "https://jsonfeed.org/version/1"`) and 1.1
14
+ * (`"https://jsonfeed.org/version/1.1"`). Both share the same item shape,
15
+ * so version is only validated up-front for fail-fast safety.
16
+ * - `items[].{id, url, title, content_text, content_html, date_published,
17
+ * tags}` — the fields downstream filters / research / dedup actually use.
18
+ * - `next_url` pagination: when present, we follow links transitively up to
19
+ * `MAX_PAGES` to gather full history in a single fetch round.
20
+ *
21
+ * What is intentionally NOT handled:
22
+ * - JSON Feed extensions (`_*` keys, `author`, `attachments`, …). The full
23
+ * payload is preserved in `Item.raw` so future code can grow into them
24
+ * without breaking persisted state.
25
+ * - HTTP `next_url` cycles or unbounded chains — both are bounded by
26
+ * `MAX_PAGES` to keep memory and rate-limit usage predictable.
27
+ */
28
+ const USER_AGENT = "feedradar/0.0.0 (+https://github.com/ozzy-labs/feedradar)";
29
+ /**
30
+ * Page-traversal cap for `next_url`. Each page is a single JSON parse + items
31
+ * loop, so 50 pages with the default ~100 items/page is well below the OOM
32
+ * threshold while still covering history-heavy personal blogs in one fetch.
33
+ * Higher caps belong behind the `--backfill` flag (#173) when it lands.
34
+ */
35
+ const MAX_PAGES = 50;
36
+ /**
37
+ * Accepted `version` URIs. JSON Feed has only ever published 1.0 and 1.1;
38
+ * both share the item schema fields this adapter reads, so we accept either.
39
+ * Anything else (typo, `application/json` mistakenly served, future major
40
+ * version) is rejected so we fail fast instead of silently producing junk.
41
+ */
42
+ const VERSION_PREFIX = "https://jsonfeed.org/version/";
43
+ /** Treat empty / whitespace-only strings as missing, like other adapters do. */
44
+ function asString(value) {
45
+ if (typeof value !== "string")
46
+ return undefined;
47
+ const trimmed = value.trim();
48
+ return trimmed.length === 0 ? undefined : trimmed;
49
+ }
50
+ /** Normalize `tags` to a `string[]`, dropping non-string entries silently. */
51
+ function asTags(value) {
52
+ if (!Array.isArray(value))
53
+ return [];
54
+ return value.map((t) => (typeof t === "string" ? t.trim() : "")).filter((t) => t.length > 0);
55
+ }
56
+ /** Parse `date_published` (ISO 8601 per spec) into our canonical ISO string. */
57
+ function toIsoDate(value) {
58
+ const s = asString(value);
59
+ if (!s)
60
+ return undefined;
61
+ const date = new Date(s);
62
+ if (Number.isNaN(date.getTime()))
63
+ return undefined;
64
+ return date.toISOString();
65
+ }
66
+ /**
67
+ * Validate the top-level `version` field. Returns `true` for the two
68
+ * published versions, `false` for anything else (including missing).
69
+ *
70
+ * We do strict equality on the canonical version URIs rather than a prefix
71
+ * match because the spec defines exactly two values; a future 2.0 will need
72
+ * an explicit code change here so we never quietly mis-parse.
73
+ */
74
+ function isAcceptedVersion(value) {
75
+ const s = asString(value);
76
+ if (!s)
77
+ return false;
78
+ return s === `${VERSION_PREFIX}1` || s === `${VERSION_PREFIX}1.1`;
79
+ }
80
+ /**
81
+ * Normalize one JSON Feed item into our canonical `Item`.
82
+ *
83
+ * Stable id derivation follows ADR-0002 §"Item ID 派生のコントラクト":
84
+ * - `publisherId`: `item.id` — JSON Feed spec mandates this is unique per
85
+ * item, so it is the strongest identity signal we have.
86
+ * - `url`: `item.url` — preferred fallback when `id` is missing (some
87
+ * real-world feeds skip `id` even though spec requires it; we mirror
88
+ * the lenient parsing of mainstream readers).
89
+ * - Title slug: prefer `item.title`; spec marks it optional so we tolerate
90
+ * missing titles and fall through to hash-only id via `deriveItemId`.
91
+ */
92
+ function itemToItem(raw, source, fetchedAt) {
93
+ const id = asString(raw.id);
94
+ const url = asString(raw.url);
95
+ if (!url)
96
+ return null; // Item.url is required by our schema (z.string().url()).
97
+ const title = asString(raw.title) ?? "";
98
+ // content_html wins over content_text when both are present (per issue
99
+ // #177 spec). When only one exists, use that one. Falling back to
100
+ // `summary` keeps short-form feeds (microblogs) from producing empty items.
101
+ const html = asString(raw.content_html);
102
+ const text = asString(raw.content_text);
103
+ const summary = html ?? text ?? asString(raw.summary);
104
+ const publishedAt = toIsoDate(raw.date_published);
105
+ // Normalize `tags` defensively (drop non-strings, trim, drop empties) so a
106
+ // malformed `tags` array does not poison the downstream `raw` consumers.
107
+ // The Item schema does not yet surface a structured `tags` field, so the
108
+ // normalized value lives inside `raw` for now; ADR-0006 marks tag-filter
109
+ // routing as a future extension. See issue #177.
110
+ const tags = asTags(raw.tags);
111
+ const normalizedRaw = { ...raw, tags };
112
+ const stableKey = deriveStableKey({
113
+ publisherId: id,
114
+ url,
115
+ fallbackHashInputs: [title, publishedAt],
116
+ });
117
+ const itemId = deriveItemId(title, stableKey);
118
+ const candidate = {
119
+ id: itemId,
120
+ sourceId: source.id,
121
+ title,
122
+ url,
123
+ summary,
124
+ publishedAt,
125
+ fetchedAt,
126
+ raw: normalizedRaw,
127
+ };
128
+ // Items that fail validation (malformed URL etc.) are dropped silently — the
129
+ // alternative is failing the whole feed for one bad entry, which surprises
130
+ // users running large feeds where one broken entry is common.
131
+ const result = ItemSchema.safeParse(candidate);
132
+ return result.success ? result.data : null;
133
+ }
134
+ /**
135
+ * Parse a single JSON Feed document into `Item[]` (no pagination). Exposed
136
+ * for unit tests so fixtures can exercise the parser without a fetch stub.
137
+ */
138
+ export function parseJsonFeed(body, source, fetchedAt) {
139
+ let doc;
140
+ try {
141
+ doc = JSON.parse(body);
142
+ }
143
+ catch (e) {
144
+ throw new Error(`json-feed adapter: failed to parse JSON: ${e instanceof Error ? e.message : String(e)}`);
145
+ }
146
+ if (!isAcceptedVersion(doc.version)) {
147
+ throw new Error(`json-feed adapter: unsupported or missing 'version' field (expected ${VERSION_PREFIX}1 or ${VERSION_PREFIX}1.1)`);
148
+ }
149
+ const items = Array.isArray(doc.items) ? doc.items : [];
150
+ return items
151
+ .map((entry) => itemToItem(entry, source, fetchedAt))
152
+ .filter((i) => i !== null);
153
+ }
154
+ /** Extract `next_url` if it is a non-empty string; ignore non-string / empty. */
155
+ export function extractNextUrl(body) {
156
+ try {
157
+ const doc = JSON.parse(body);
158
+ return asString(doc.next_url);
159
+ }
160
+ catch {
161
+ return undefined;
162
+ }
163
+ }
164
+ /**
165
+ * Issue an HTTP GET with conditional headers, honoring previously stored
166
+ * `ETag` / `Last-Modified` so well-behaved servers can reply 304 and let us
167
+ * skip parsing work. Shared fetch wrapper supplies timeout + retry.
168
+ */
169
+ async function fetchJsonFeed(url, fetchImpl, options = {}) {
170
+ const headers = {
171
+ accept: "application/feed+json, application/json;q=0.9, */*;q=0.5",
172
+ "user-agent": USER_AGENT,
173
+ };
174
+ if (options.etag)
175
+ headers["if-none-match"] = options.etag;
176
+ if (options.lastModified)
177
+ headers["if-modified-since"] = options.lastModified;
178
+ const response = await fetchWithRetry(fetchImpl, url, { headers, signal: options.signal });
179
+ const etag = response.headers.get("etag");
180
+ const lastModified = response.headers.get("last-modified");
181
+ if (response.status === 304) {
182
+ return { status: 304, body: "", etag, lastModified };
183
+ }
184
+ if (response.status < 200 || response.status >= 300) {
185
+ throw new Error(`json-feed adapter: HTTP ${response.status} from ${url}`);
186
+ }
187
+ const body = await response.text();
188
+ return { status: response.status, body, etag, lastModified };
189
+ }
190
+ export const jsonFeedAdapter = {
191
+ kind: "json-feed",
192
+ fetch: async (source, options = {}) => {
193
+ const fetchImpl = options.fetch ?? globalThis.fetch;
194
+ if (typeof fetchImpl !== "function") {
195
+ throw new Error("json-feed adapter: no fetch implementation available (Node 22+ required)");
196
+ }
197
+ const previous = options.state;
198
+ const fetchedAt = new Date().toISOString();
199
+ // First page uses conditional headers; subsequent pages do not (the
200
+ // server-side `next_url` chain is page-specific, not feed-wide, so a 304
201
+ // would be meaningless after the first hop).
202
+ const response = await fetchJsonFeed(source.url, fetchImpl, {
203
+ etag: previous?.lastEtag,
204
+ lastModified: previous?.lastModified,
205
+ });
206
+ if (response.status === 304) {
207
+ return {
208
+ items: [],
209
+ notModified: true,
210
+ state: {
211
+ lastFetchedAt: fetchedAt,
212
+ lastEtag: response.etag ?? previous?.lastEtag,
213
+ lastModified: response.lastModified ?? previous?.lastModified,
214
+ },
215
+ };
216
+ }
217
+ const collected = parseJsonFeed(response.body, source, fetchedAt);
218
+ let nextUrl = extractNextUrl(response.body);
219
+ const visited = new Set([source.url]);
220
+ let pages = 1;
221
+ while (nextUrl && pages < MAX_PAGES && !visited.has(nextUrl)) {
222
+ visited.add(nextUrl);
223
+ const pageResponse = await fetchJsonFeed(nextUrl, fetchImpl);
224
+ // 304 has no body so we just stop walking the chain.
225
+ if (pageResponse.status === 304)
226
+ break;
227
+ const pageItems = parseJsonFeed(pageResponse.body, source, fetchedAt);
228
+ collected.push(...pageItems);
229
+ nextUrl = extractNextUrl(pageResponse.body);
230
+ pages += 1;
231
+ }
232
+ return {
233
+ items: collected,
234
+ state: {
235
+ lastFetchedAt: fetchedAt,
236
+ lastEtag: response.etag ?? previous?.lastEtag,
237
+ lastModified: response.lastModified ?? previous?.lastModified,
238
+ },
239
+ };
240
+ },
241
+ };
242
+ //# sourceMappingURL=json-feed.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"json-feed.js","sourceRoot":"","sources":["../../../src/core/feeds/json-feed.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,5 @@
1
1
  import type { Item, Source, SourceState } from "../../schemas/index.js";
2
+ import type { ProgressReporter } from "../progress.js";
2
3
  /**
3
4
  * Minimal `fetch` signature an adapter needs.
4
5
  *
@@ -16,6 +17,40 @@ export type FetchLike = (input: string | URL, init?: {
16
17
  };
17
18
  text(): Promise<string>;
18
19
  }>;
20
+ /**
21
+ * Per-fetch diagnostic information surfaced by an adapter for tooling
22
+ * (`radar source test --show-content`), never persisted to state/items.
23
+ *
24
+ * Currently used by `kind: json-api` to expose which fallback selector
25
+ * matched per field (so users can audit the default-chain decision) and how
26
+ * pagination would advance (`Link` header / `nextCursor` extraction) without
27
+ * the dry-run actually walking past page 0.
28
+ */
29
+ export interface FeedFetchDiag {
30
+ /**
31
+ * For each output field (`items`, `title`, `link`, `publishedAt`,
32
+ * `summary`), the JSONPath expression the adapter ended up using. The
33
+ * value is either the path from the recipe (when explicit) or a default
34
+ * chain candidate (when fallback). `null` means "all candidates returned
35
+ * undefined" — useful for debugging totally-unmapped fields.
36
+ */
37
+ selectorAdoption?: Record<string, string | null>;
38
+ /**
39
+ * Pagination preview surfaced from page 0 only. Lets `source test` show
40
+ * whether the recipe's `pagination` block would advance correctly without
41
+ * actually fetching page 1 (which would mutate state on real runs).
42
+ */
43
+ paginationPreview?: {
44
+ /** The pagination strategy declared by the recipe. */
45
+ strategy: string;
46
+ /** Computed next-page URL (or null when traversal would end here). */
47
+ nextUrl: string | null;
48
+ /** `Link: <...>; rel="next"` parse result, when strategy is `link-header`. */
49
+ linkHeaderNext?: string | null;
50
+ /** Cursor / token value extracted from `nextCursorPath`, when applicable. */
51
+ nextCursor?: string | null;
52
+ };
53
+ }
19
54
  /** Result of a single adapter fetch — the items plus the next state to persist. */
20
55
  export interface FeedFetchResult {
21
56
  items: Item[];
@@ -31,12 +66,100 @@ export interface FeedFetchResult {
31
66
  * while still bumping `lastFetchedAt`.
32
67
  */
33
68
  notModified?: boolean;
69
+ /**
70
+ * Optional diagnostic payload. Adapters fill this in when they have useful
71
+ * tooling info (json-api's selector adoption + pagination preview); other
72
+ * adapters leave it undefined. The watcher propagates it to
73
+ * `WatchRunResult.diag[sourceId]` so `source test` can render it.
74
+ */
75
+ diag?: FeedFetchDiag;
34
76
  }
35
77
  export interface FeedAdapterOptions {
36
78
  /** Caller-supplied fetch (defaults to global fetch). Injected by tests. */
37
79
  fetch?: FetchLike;
38
80
  /** Previous state for this source (`state/<id>.yaml`). */
39
81
  state?: SourceState;
82
+ /**
83
+ * Backfill hint (ADR-0012 §D4). When true, adapters that support page
84
+ * traversal walk all available history pages until `pagination.maxPages`
85
+ * (or `maxPagesOverride`) is exhausted, emitting items rather than only
86
+ * the most-recent page. The watcher / CLI propagates this from
87
+ * `radar watch run --backfill`.
88
+ *
89
+ * Adapters that do not support backfill (rss / html / html-js — feed
90
+ * formats with no pagination contract) simply ignore the flag.
91
+ */
92
+ backfill?: boolean;
93
+ /**
94
+ * Optional override for the per-source `pagination.maxPages` cap. Used by
95
+ * `--max-pages N` to widen / narrow the backfill traversal without editing
96
+ * the source YAML. Adapters that do not paginate ignore this field.
97
+ */
98
+ maxPagesOverride?: number;
99
+ /**
100
+ * Environment lookup for `${VAR}` interpolation inside `http.headers`
101
+ * (json-api adapter, ADR-0012 §D5c). Defaults to `process.env`; tests
102
+ * inject a controlled record so credential-shaped values never escape into
103
+ * test output / fixtures.
104
+ */
105
+ env?: Record<string, string | undefined>;
106
+ /**
107
+ * Dry-run hint (#174). When true, paginating adapters fetch only page 0
108
+ * (preserving the `radar source test` "no state mutation" contract for
109
+ * `kind: json-api` where pagination would otherwise walk multiple pages).
110
+ * Adapters that do not paginate ignore the flag. Tooling can inspect the
111
+ * computed next-page URL via `FeedFetchResult.diag.paginationPreview`
112
+ * without an extra round-trip.
113
+ */
114
+ dryRun?: boolean;
115
+ /**
116
+ * Diagnostic warning sink (#174). Adapters call this for non-fatal
117
+ * surprises like "all default selector candidates resolved to null". The
118
+ * watcher / CLI route it to `console.warn` so users notice. Defaults to
119
+ * a no-op when unset.
120
+ */
121
+ warn?: (message: string) => void;
122
+ /**
123
+ * Optional progress reporter for long-running fetches (ADR-0015 D3 / #198).
124
+ *
125
+ * - `kind: html-js` calls `phase()` around Playwright Chromium lifecycle
126
+ * (`Launching Chromium…` / `Navigating to <url>…` / `Waiting for
127
+ * selector "<sel>" (timeout: <ms>ms)…` / `Capturing page content…` /
128
+ * `Closing browser…`).
129
+ * - `kind: json-api` in `--backfill` mode fires page-level progress via
130
+ * {@link FeedAdapterOptions.onPage} (see below) and uses `phase()` for
131
+ * one-shot start/stop markers.
132
+ * - Other adapters (rss / atom / html / github-releases / npm-registry)
133
+ * currently ignore the reporter — fetches complete in a single
134
+ * short-lived HTTP round trip with no meaningful intermediate phase.
135
+ *
136
+ * Unset is byte-equivalent to the pre-#198 behaviour (no progress output).
137
+ */
138
+ onProgress?: ProgressReporter;
139
+ /**
140
+ * Per-page progress callback for paginating adapters (json-api / future
141
+ * github-releases / npm-registry). Fired after each page is fetched and
142
+ * normalized so the watcher / CLI can update a `Page <i>/<n>: <items>`
143
+ * spinner row without the adapter needing to know about the
144
+ * `ProgressReporter` shape.
145
+ *
146
+ * - `pageIndex` is 0-based (page 0 = the first response).
147
+ * - `pageTotal` is the recipe-implied cap (`pagination.maxPages` or
148
+ * `--max-pages`); when `totalPath` resolves on page 0 it tightens
149
+ * further so the user sees a meaningful denominator instead of the
150
+ * conservative cap.
151
+ * - `items` is the count of items extracted from this page (post-schema
152
+ * validation, pre-filter / pre-dedup).
153
+ *
154
+ * Unset means no per-page callback. Independent of `onProgress`: callers
155
+ * that want the spinner but not per-page metrics can wire one and not the
156
+ * other.
157
+ */
158
+ onPage?: (info: {
159
+ pageIndex: number;
160
+ pageTotal: number;
161
+ items: number;
162
+ }) => void;
40
163
  }
41
164
  export interface FeedAdapter {
42
165
  kind: Source["kind"];
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/core/feeds/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAExE;;;;;;GAMG;AACH,MAAM,MAAM,SAAS,GAAG,CACtB,KAAK,EAAE,MAAM,GAAG,GAAG,EACnB,IAAI,CAAC,EAAE;IAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAAC,MAAM,CAAC,EAAE,WAAW,CAAA;CAAE,KAC9D,OAAO,CAAC;IACX,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE;QAAE,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAA;KAAE,CAAC;IAC9C,IAAI,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC;CACzB,CAAC,CAAC;AAEH,mFAAmF;AACnF,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,IAAI,EAAE,CAAC;IACd;;;;OAIG;IACH,KAAK,EAAE,OAAO,CAAC,WAAW,CAAC,CAAC;IAC5B;;;;OAIG;IACH,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAED,MAAM,WAAW,kBAAkB;IACjC,2EAA2E;IAC3E,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,0DAA0D;IAC1D,KAAK,CAAC,EAAE,WAAW,CAAC;CACrB;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;IACrB,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,kBAAkB,KAAK,OAAO,CAAC,eAAe,CAAC,CAAC;CACnF"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/core/feeds/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACxE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAEvD;;;;;;GAMG;AACH,MAAM,MAAM,SAAS,GAAG,CACtB,KAAK,EAAE,MAAM,GAAG,GAAG,EACnB,IAAI,CAAC,EAAE;IAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAAC,MAAM,CAAC,EAAE,WAAW,CAAA;CAAE,KAC9D,OAAO,CAAC;IACX,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE;QAAE,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAA;KAAE,CAAC;IAC9C,IAAI,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC;CACzB,CAAC,CAAC;AAEH;;;;;;;;GAQG;AACH,MAAM,WAAW,aAAa;IAC5B;;;;;;OAMG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC,CAAC;IACjD;;;;OAIG;IACH,iBAAiB,CAAC,EAAE;QAClB,sDAAsD;QACtD,QAAQ,EAAE,MAAM,CAAC;QACjB,sEAAsE;QACtE,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;QACvB,8EAA8E;QAC9E,cAAc,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;QAC/B,6EAA6E;QAC7E,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;KAC5B,CAAC;CACH;AAED,mFAAmF;AACnF,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,IAAI,EAAE,CAAC;IACd;;;;OAIG;IACH,KAAK,EAAE,OAAO,CAAC,WAAW,CAAC,CAAC;IAC5B;;;;OAIG;IACH,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB;;;;;OAKG;IACH,IAAI,CAAC,EAAE,aAAa,CAAC;CACtB;AAED,MAAM,WAAW,kBAAkB;IACjC,2EAA2E;IAC3E,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,0DAA0D;IAC1D,KAAK,CAAC,EAAE,WAAW,CAAC;IACpB;;;;;;;;;OASG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB;;;;OAIG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B;;;;;OAKG;IACH,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC;IACzC;;;;;;;OAOG;IACH,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB;;;;;OAKG;IACH,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IACjC;;;;;;;;;;;;;;;OAeG;IACH,UAAU,CAAC,EAAE,gBAAgB,CAAC;IAC9B;;;;;;;;;;;;;;;;;;OAkBG;IACH,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,KAAK,IAAI,CAAC;CAClF;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;IACrB,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,kBAAkB,KAAK,OAAO,CAAC,eAAe,CAAC,CAAC;CACnF"}
@@ -0,0 +1,101 @@
1
+ /**
2
+ * ProgressReporter — UX abstraction for long-running CLI operations.
3
+ *
4
+ * Implements [ADR-0015 Progress Reporting UX](../../docs/adr/0015-progress-reporting-ux.md):
5
+ *
6
+ * - 3-layer model (phase markers / heartbeat spinner / side metrics)
7
+ * - TTY auto-detection with env / flag overrides (`RADAR_NO_PROGRESS=1`,
8
+ * `--quiet`, `--verbose`)
9
+ * - CI / non-TTY safe degradation: spinner becomes plain text and `\r`
10
+ * same-line updates are disabled
11
+ * - Zero new runtime dependencies — the spinner frame set
12
+ * (`⠋⠙⠹⠸⠼⠴⠦⠧⠇⠏`) is rotated by an internal `setInterval` and rendered via
13
+ * `process.stderr.write` + ANSI escape `\x1b[K\r`
14
+ *
15
+ * This is the **base** (#196) — only the interface, the factory, and the
16
+ * default reporter implementation. CLI integration (`research` / `review` /
17
+ * `update`) ships in #197, feed adapter integration in #198. Adapter call
18
+ * sites in `src/agents/*.ts` consume the optional `onProgress` callback
19
+ * defined alongside this module (see `src/agents/types.ts`).
20
+ */
21
+ export type ProgressLevel = "quiet" | "normal" | "verbose";
22
+ /**
23
+ * Public API surface used by CLI / adapter integrations. Six methods cover
24
+ * the three UX layers from ADR-0015:
25
+ *
26
+ * - `phase`: structured milestone, always rendered (TTY and non-TTY)
27
+ * - `start` / `succeed` / `fail`: spinner lifecycle for a single sub-task.
28
+ * On TTY, `start` begins same-line spinner animation; `succeed` / `fail`
29
+ * stop it and emit a single completion line.
30
+ * - `update`: side metrics (page x/N, stdout bytes, ...) — merged into the
31
+ * spinner row on TTY, suppressed or printed as plain text on non-TTY
32
+ * - `raw`: agent stdout / stderr pass-through. Only printed in `verbose`
33
+ * level. Default reporter pipes the chunk to `process.stderr` verbatim.
34
+ */
35
+ export interface ProgressReporter {
36
+ /** Structured milestone. e.g. `"Spawning claude-code"` */
37
+ phase(name: string, info?: string): void;
38
+ /** Begin a spinner-tracked sub-task. e.g. `"Agent running…"` */
39
+ start(label: string): void;
40
+ /** Update side metrics for the active spinner row. */
41
+ update(metrics: Record<string, string>): void;
42
+ /** Stop the spinner and emit a success line. `duration` is milliseconds. */
43
+ succeed(label: string, duration?: number): void;
44
+ /** Stop the spinner and emit a failure line. */
45
+ fail(label: string, reason: string): void;
46
+ /** Pass-through agent stdout / stderr text (verbose only). */
47
+ raw(text: string): void;
48
+ }
49
+ export interface CreateProgressReporterOptions {
50
+ /**
51
+ * TTY override. If unspecified, falls back to `process.stderr.isTTY`.
52
+ * Always overridable so tests can pin the value.
53
+ */
54
+ tty?: boolean;
55
+ /** Verbosity. `quiet` = phase markers off; `verbose` = `raw()` enabled. */
56
+ level: ProgressLevel;
57
+ /**
58
+ * Output stream. Defaults to `process.stderr` so progress does not pollute
59
+ * piped stdout (`radar research > out.md`). Tests pass an in-memory stream.
60
+ */
61
+ stream?: NodeJS.WritableStream;
62
+ /**
63
+ * Heartbeat interval in milliseconds (default 1000ms / 1s). Tests can
64
+ * shorten this to verify spinner rotation without burning real time.
65
+ * Negative or zero disables the heartbeat (still renders a static first
66
+ * frame on `start`).
67
+ */
68
+ heartbeatMs?: number;
69
+ /** `Date.now()` override for deterministic elapsed-time rendering. */
70
+ now?: () => number;
71
+ }
72
+ /**
73
+ * No-op reporter. Used by:
74
+ *
75
+ * - tests that do not care about progress output
76
+ * - `--quiet` / `RADAR_NO_PROGRESS=1` paths (see `createProgressReporter`)
77
+ * - adapter call sites where the caller did not opt into progress
78
+ *
79
+ * All six methods return immediately so wiring a `noopProgressReporter()` to
80
+ * an existing adapter is byte-equivalent to passing `undefined`.
81
+ */
82
+ export declare function noopProgressReporter(): ProgressReporter;
83
+ /**
84
+ * Construct a `ProgressReporter` honouring the ADR-0015 D2 priority table:
85
+ *
86
+ * env (`RADAR_NO_PROGRESS=1`) > flag (`level`) > TTY auto-detect
87
+ *
88
+ * - `level: "quiet"` → no-op (callers want zero output)
89
+ * - `RADAR_NO_PROGRESS=1` → no-op (CI escape hatch)
90
+ * - non-TTY + `level: "normal"` → plain text (phase markers + completion
91
+ * lines, NO spinner animation, NO `\r` overwrite)
92
+ * - TTY + `level: "normal"` → phase markers + spinner + same-line update
93
+ * - `level: "verbose"` → phase markers + spinner (if TTY) + `raw()` pass-
94
+ * through enabled (regardless of TTY)
95
+ *
96
+ * The reporter is self-contained: callers should not depend on internal
97
+ * state (e.g. the active spinner timer). The contract is the 6-method
98
+ * interface above.
99
+ */
100
+ export declare function createProgressReporter(opts: CreateProgressReporterOptions): ProgressReporter;
101
+ //# sourceMappingURL=progress.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"progress.d.ts","sourceRoot":"","sources":["../../src/core/progress.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,MAAM,MAAM,aAAa,GAAG,OAAO,GAAG,QAAQ,GAAG,SAAS,CAAC;AAE3D;;;;;;;;;;;;GAYG;AACH,MAAM,WAAW,gBAAgB;IAC/B,0DAA0D;IAC1D,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACzC,gEAAgE;IAChE,KAAK,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,sDAAsD;IACtD,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI,CAAC;IAC9C,4EAA4E;IAC5E,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAChD,gDAAgD;IAChD,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1C,8DAA8D;IAC9D,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;CACzB;AAED,MAAM,WAAW,6BAA6B;IAC5C;;;OAGG;IACH,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,2EAA2E;IAC3E,KAAK,EAAE,aAAa,CAAC;IACrB;;;OAGG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC,cAAc,CAAC;IAC/B;;;;;OAKG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,sEAAsE;IACtE,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;CACpB;AAKD;;;;;;;;;GASG;AACH,wBAAgB,oBAAoB,IAAI,gBAAgB,CASvD;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,6BAA6B,GAAG,gBAAgB,CA8I5F"}