@ozzylabs/feedradar 0.1.4 → 0.1.6
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.
- package/README.ja.md +12 -6
- package/README.md +11 -6
- package/dist/agents/claude-code.d.ts +12 -1
- package/dist/agents/claude-code.d.ts.map +1 -1
- package/dist/agents/claude-code.js +9 -5
- package/dist/agents/claude-code.js.map +1 -1
- package/dist/agents/codex-cli.d.ts +7 -1
- package/dist/agents/codex-cli.d.ts.map +1 -1
- package/dist/agents/codex-cli.js +9 -5
- package/dist/agents/codex-cli.js.map +1 -1
- package/dist/agents/copilot.d.ts +7 -1
- package/dist/agents/copilot.d.ts.map +1 -1
- package/dist/agents/copilot.js +9 -5
- package/dist/agents/copilot.js.map +1 -1
- package/dist/agents/gemini-cli.d.ts +7 -1
- package/dist/agents/gemini-cli.d.ts.map +1 -1
- package/dist/agents/gemini-cli.js +9 -5
- package/dist/agents/gemini-cli.js.map +1 -1
- package/dist/agents/index.d.ts +1 -1
- package/dist/agents/index.d.ts.map +1 -1
- package/dist/agents/types.d.ts +33 -0
- package/dist/agents/types.d.ts.map +1 -1
- package/dist/cli/_progress.d.ts +138 -0
- package/dist/cli/_progress.d.ts.map +1 -0
- package/dist/cli/_progress.js +176 -0
- package/dist/cli/_progress.js.map +1 -0
- package/dist/cli/index.d.ts.map +1 -1
- package/dist/cli/index.js +2 -0
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/research.d.ts +18 -20
- package/dist/cli/research.d.ts.map +1 -1
- package/dist/cli/research.js +318 -203
- package/dist/cli/research.js.map +1 -1
- package/dist/cli/review.d.ts +7 -0
- package/dist/cli/review.d.ts.map +1 -1
- package/dist/cli/review.js +46 -1
- package/dist/cli/review.js.map +1 -1
- package/dist/cli/source.d.ts +23 -2
- package/dist/cli/source.d.ts.map +1 -1
- package/dist/cli/source.js +428 -7
- package/dist/cli/source.js.map +1 -1
- package/dist/cli/update.d.ts +7 -0
- package/dist/cli/update.d.ts.map +1 -1
- package/dist/cli/update.js +41 -1
- package/dist/cli/update.js.map +1 -1
- package/dist/cli/watch.d.ts.map +1 -1
- package/dist/cli/watch.js +67 -3
- package/dist/cli/watch.js.map +1 -1
- package/dist/cli/workflow/generate-combined.d.ts +100 -0
- package/dist/cli/workflow/generate-combined.d.ts.map +1 -0
- package/dist/cli/workflow/generate-combined.js +387 -0
- package/dist/cli/workflow/generate-combined.js.map +1 -0
- package/dist/cli/workflow/generate-watch.d.ts +142 -0
- package/dist/cli/workflow/generate-watch.d.ts.map +1 -0
- package/dist/cli/workflow/generate-watch.js +338 -0
- package/dist/cli/workflow/generate-watch.js.map +1 -0
- package/dist/cli/workflow.d.ts +29 -0
- package/dist/cli/workflow.d.ts.map +1 -0
- package/dist/cli/workflow.js +66 -0
- package/dist/cli/workflow.js.map +1 -0
- package/dist/core/feeds/_fetch.d.ts +10 -0
- package/dist/core/feeds/_fetch.d.ts.map +1 -1
- package/dist/core/feeds/_fetch.js +182 -0
- package/dist/core/feeds/_fetch.js.map +1 -1
- package/dist/core/feeds/_jsonpath.d.ts +57 -0
- package/dist/core/feeds/_jsonpath.d.ts.map +1 -0
- package/dist/core/feeds/_jsonpath.js +207 -0
- package/dist/core/feeds/_jsonpath.js.map +1 -0
- package/dist/core/feeds/html-js.d.ts +8 -0
- package/dist/core/feeds/html-js.d.ts.map +1 -1
- package/dist/core/feeds/html-js.js +47 -1
- package/dist/core/feeds/html-js.js.map +1 -1
- package/dist/core/feeds/index.d.ts +1 -1
- package/dist/core/feeds/index.d.ts.map +1 -1
- package/dist/core/feeds/index.js +4 -0
- package/dist/core/feeds/index.js.map +1 -1
- package/dist/core/feeds/json-api.d.ts +29 -0
- package/dist/core/feeds/json-api.d.ts.map +1 -0
- package/dist/core/feeds/json-api.js +860 -0
- package/dist/core/feeds/json-api.js.map +1 -0
- package/dist/core/feeds/json-feed.d.ts +11 -0
- package/dist/core/feeds/json-feed.d.ts.map +1 -0
- package/dist/core/feeds/json-feed.js +242 -0
- package/dist/core/feeds/json-feed.js.map +1 -0
- package/dist/core/feeds/types.d.ts +123 -0
- package/dist/core/feeds/types.d.ts.map +1 -1
- package/dist/core/progress.d.ts +101 -0
- package/dist/core/progress.d.ts.map +1 -0
- package/dist/core/progress.js +212 -0
- package/dist/core/progress.js.map +1 -0
- package/dist/core/recipes.d.ts +138 -0
- package/dist/core/recipes.d.ts.map +1 -0
- package/dist/core/recipes.js +242 -0
- package/dist/core/recipes.js.map +1 -0
- package/dist/core/watcher.d.ts +61 -1
- package/dist/core/watcher.d.ts.map +1 -1
- package/dist/core/watcher.js +99 -2
- package/dist/core/watcher.js.map +1 -1
- package/dist/recipes/aws-whats-new.yaml +87 -0
- package/dist/recipes/dev-to.yaml +40 -0
- package/dist/schemas/index.d.ts +1 -0
- package/dist/schemas/index.d.ts.map +1 -1
- package/dist/schemas/index.js +1 -0
- package/dist/schemas/index.js.map +1 -1
- package/dist/schemas/recipe.d.ts +127 -0
- package/dist/schemas/recipe.d.ts.map +1 -0
- package/dist/schemas/recipe.js +57 -0
- package/dist/schemas/recipe.js.map +1 -0
- package/dist/schemas/source.d.ts +222 -0
- package/dist/schemas/source.d.ts.map +1 -1
- package/dist/schemas/source.js +234 -0
- package/dist/schemas/source.js.map +1 -1
- package/dist/templates/agents/AGENTS.md +33 -3
- package/dist/templates/feedradar.md +23 -8
- package/dist/templates/workflows/combined.template.yaml.tmpl +110 -0
- package/dist/templates/workflows/watch.template.yaml.tmpl +103 -0
- package/package.json +1 -2
package/dist/core/watcher.d.ts
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import type { Item, Source, SourceState } from "../schemas/index.js";
|
|
2
|
-
import type { FeedAdapter, FetchLike } from "./feeds/index.js";
|
|
2
|
+
import type { FeedAdapter, FeedFetchDiag, FetchLike } from "./feeds/index.js";
|
|
3
3
|
import { installChromium, type ProbeOptions } from "./playwright-check.js";
|
|
4
|
+
import type { ProgressReporter } from "./progress.js";
|
|
4
5
|
export interface WorkspacePaths {
|
|
5
6
|
/** Workspace root; defaults to process.cwd() at the CLI layer. */
|
|
6
7
|
cwd: string;
|
|
@@ -17,6 +18,20 @@ export interface WatchRunOptions extends WorkspacePaths {
|
|
|
17
18
|
* backlogs (ADR-0008 §運用: 初回ノイズ抑制).
|
|
18
19
|
*/
|
|
19
20
|
bootstrap?: boolean;
|
|
21
|
+
/**
|
|
22
|
+
* Backfill mode (ADR-0012 §D4): walk paginated sources to ingest all
|
|
23
|
+
* available history into items/. Emits items AND updates state, unlike
|
|
24
|
+
* `bootstrap` which only updates state. Mutually exclusive with
|
|
25
|
+
* `bootstrap`; the CLI layer enforces the exclusivity, the watcher accepts
|
|
26
|
+
* whichever flag was passed.
|
|
27
|
+
*/
|
|
28
|
+
backfill?: boolean;
|
|
29
|
+
/**
|
|
30
|
+
* Override the per-source `pagination.maxPages` cap. Threaded straight
|
|
31
|
+
* through to adapters that paginate (json-api / github-releases /
|
|
32
|
+
* npm-registry). Only honored when `backfill` is true.
|
|
33
|
+
*/
|
|
34
|
+
maxPagesOverride?: number;
|
|
20
35
|
/**
|
|
21
36
|
* Dry-run mode: run the full fetch + filter pipeline but do not persist
|
|
22
37
|
* anything to disk — neither item YAMLs under `items/` nor the updated
|
|
@@ -52,6 +67,17 @@ export interface WatchRunOptions extends WorkspacePaths {
|
|
|
52
67
|
* records invocation without actually spawning `npx playwright install`.
|
|
53
68
|
*/
|
|
54
69
|
installChromiumImpl?: typeof installChromium;
|
|
70
|
+
/**
|
|
71
|
+
* Optional progress reporter for per-source fetch phases (#198 /
|
|
72
|
+
* ADR-0015). The watcher gates wiring on a heuristic
|
|
73
|
+
* ({@link shouldEnableProgress}) so the typical small / fast workspace
|
|
74
|
+
* never sees flicker: progress is enabled only when at least 3 sources
|
|
75
|
+
* run together OR any source uses a slow kind (`html-js` / `json-api`).
|
|
76
|
+
*
|
|
77
|
+
* When the reporter is unset (or the heuristic is off) every source runs
|
|
78
|
+
* with no progress wiring — byte-equivalent to the pre-#198 behaviour.
|
|
79
|
+
*/
|
|
80
|
+
progress?: ProgressReporter;
|
|
55
81
|
}
|
|
56
82
|
export interface WatchRunResult {
|
|
57
83
|
/** Map of sourceId → detected (filter-passing, not previously seen) items. */
|
|
@@ -78,6 +104,17 @@ export interface WatchRunResult {
|
|
|
78
104
|
fetched: number;
|
|
79
105
|
filtered: number;
|
|
80
106
|
}>;
|
|
107
|
+
/**
|
|
108
|
+
* Per-source diagnostic payload returned by adapters that produce one
|
|
109
|
+
* (currently only `kind: json-api` — see `FeedFetchDiag`). Populated for
|
|
110
|
+
* every source whose fetch returned a `diag` field; missing entries are
|
|
111
|
+
* legal and indicate the adapter does not surface diagnostics.
|
|
112
|
+
*
|
|
113
|
+
* Consumers (`radar source test --show-content`) render this alongside
|
|
114
|
+
* the matched-items preview so users can audit which default selector
|
|
115
|
+
* chain candidate was adopted and how pagination would advance.
|
|
116
|
+
*/
|
|
117
|
+
diag: Record<string, FeedFetchDiag>;
|
|
81
118
|
}
|
|
82
119
|
/**
|
|
83
120
|
* Load all enabled sources from `sources/*.yaml`.
|
|
@@ -87,6 +124,29 @@ export interface WatchRunResult {
|
|
|
87
124
|
* behaves (see `src/cli/source.ts`).
|
|
88
125
|
*/
|
|
89
126
|
export declare function loadSources(sourcesDir: string, onError: (message: string) => void): Promise<Source[]>;
|
|
127
|
+
/**
|
|
128
|
+
* Heuristic: should the watcher actively report per-source progress to the
|
|
129
|
+
* supplied {@link ProgressReporter}?
|
|
130
|
+
*
|
|
131
|
+
* The typical small workspace (1-2 RSS sources, ~3 seconds end-to-end)
|
|
132
|
+
* gains nothing from a spinner that flashes in and out faster than the eye
|
|
133
|
+
* can track. We therefore enable progress only when:
|
|
134
|
+
*
|
|
135
|
+
* 1. There are 3 or more sources to fetch in this run — at that scale the
|
|
136
|
+
* user wants per-source orientation as the loop iterates, OR
|
|
137
|
+
* 2. Any source uses a slow kind — `html-js` (Playwright launch + render =
|
|
138
|
+
* seconds-to-tens-of-seconds) or `json-api` in `--backfill` mode
|
|
139
|
+
* (~80 page traversal). Even a single one of these makes the per-source
|
|
140
|
+
* indicator worth the noise.
|
|
141
|
+
*
|
|
142
|
+
* The heuristic is intentionally NOT user-configurable (ADR-0015 D5 /
|
|
143
|
+
* issue #198 note). `--quiet` / `RADAR_NO_PROGRESS=1` are the documented
|
|
144
|
+
* escape hatches when even the heuristic-on output is undesirable.
|
|
145
|
+
*
|
|
146
|
+
* Exported so the watcher / CLI can share one definition; tests pin
|
|
147
|
+
* behaviour against this single source of truth.
|
|
148
|
+
*/
|
|
149
|
+
export declare function shouldEnableProgress(sources: Source[], backfill: boolean): boolean;
|
|
90
150
|
/**
|
|
91
151
|
* Execute one full watch cycle.
|
|
92
152
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"watcher.d.ts","sourceRoot":"","sources":["../../src/core/watcher.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAErE,OAAO,KAAK,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"watcher.d.ts","sourceRoot":"","sources":["../../src/core/watcher.ts"],"names":[],"mappings":"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"}
|
package/dist/core/watcher.js
CHANGED
|
@@ -97,6 +97,39 @@ export async function loadSources(sourcesDir, onError) {
|
|
|
97
97
|
}
|
|
98
98
|
return sources;
|
|
99
99
|
}
|
|
100
|
+
/**
|
|
101
|
+
* Heuristic: should the watcher actively report per-source progress to the
|
|
102
|
+
* supplied {@link ProgressReporter}?
|
|
103
|
+
*
|
|
104
|
+
* The typical small workspace (1-2 RSS sources, ~3 seconds end-to-end)
|
|
105
|
+
* gains nothing from a spinner that flashes in and out faster than the eye
|
|
106
|
+
* can track. We therefore enable progress only when:
|
|
107
|
+
*
|
|
108
|
+
* 1. There are 3 or more sources to fetch in this run — at that scale the
|
|
109
|
+
* user wants per-source orientation as the loop iterates, OR
|
|
110
|
+
* 2. Any source uses a slow kind — `html-js` (Playwright launch + render =
|
|
111
|
+
* seconds-to-tens-of-seconds) or `json-api` in `--backfill` mode
|
|
112
|
+
* (~80 page traversal). Even a single one of these makes the per-source
|
|
113
|
+
* indicator worth the noise.
|
|
114
|
+
*
|
|
115
|
+
* The heuristic is intentionally NOT user-configurable (ADR-0015 D5 /
|
|
116
|
+
* issue #198 note). `--quiet` / `RADAR_NO_PROGRESS=1` are the documented
|
|
117
|
+
* escape hatches when even the heuristic-on output is undesirable.
|
|
118
|
+
*
|
|
119
|
+
* Exported so the watcher / CLI can share one definition; tests pin
|
|
120
|
+
* behaviour against this single source of truth.
|
|
121
|
+
*/
|
|
122
|
+
export function shouldEnableProgress(sources, backfill) {
|
|
123
|
+
if (sources.length >= 3)
|
|
124
|
+
return true;
|
|
125
|
+
for (const s of sources) {
|
|
126
|
+
if (s.kind === "html-js")
|
|
127
|
+
return true;
|
|
128
|
+
if (s.kind === "json-api" && backfill)
|
|
129
|
+
return true;
|
|
130
|
+
}
|
|
131
|
+
return false;
|
|
132
|
+
}
|
|
100
133
|
/**
|
|
101
134
|
* Execute one full watch cycle.
|
|
102
135
|
*
|
|
@@ -130,9 +163,22 @@ export async function watchRun(options) {
|
|
|
130
163
|
else {
|
|
131
164
|
log("watch run: no sources defined (use `radar source add ...`)");
|
|
132
165
|
}
|
|
133
|
-
return { detected: {}, states: {}, errors: [], stats: {} };
|
|
166
|
+
return { detected: {}, states: {}, errors: [], stats: {}, diag: {} };
|
|
134
167
|
}
|
|
135
|
-
const result = {
|
|
168
|
+
const result = {
|
|
169
|
+
detected: {},
|
|
170
|
+
states: {},
|
|
171
|
+
errors: [],
|
|
172
|
+
stats: {},
|
|
173
|
+
diag: {},
|
|
174
|
+
};
|
|
175
|
+
// Heuristic gate: only wire the reporter when the run is worth narrating.
|
|
176
|
+
// Without this guard, `radar watch run` on a 1-source RSS workspace would
|
|
177
|
+
// spam the spinner for ~3 seconds straight with no informational value.
|
|
178
|
+
// `options.progress` being unset already means no output regardless.
|
|
179
|
+
const progress = options.progress && shouldEnableProgress(filtered, options.backfill === true)
|
|
180
|
+
? options.progress
|
|
181
|
+
: undefined;
|
|
136
182
|
// Lazy Playwright probe cache. We only run the probe when the first
|
|
137
183
|
// `html-js` source comes up so RSS / GitHub / npm-only workspaces never pay
|
|
138
184
|
// for the dynamic import. The result is reused across every subsequent
|
|
@@ -204,17 +250,58 @@ export async function watchRun(options) {
|
|
|
204
250
|
let fetched;
|
|
205
251
|
let nextStatePatch;
|
|
206
252
|
let notModified = false;
|
|
253
|
+
// Per-source phase markers (#198). `Fetching…` is the start-of-source
|
|
254
|
+
// boundary the user sees in the spinner; the adapter may emit its own
|
|
255
|
+
// sub-phases (html-js Chromium lifecycle, json-api page x/n) between
|
|
256
|
+
// here and `Completed`. Side metrics for the spinner row default to
|
|
257
|
+
// the source kind so even non-paginating adapters surface useful info.
|
|
258
|
+
progress?.phase(`[${source.id}] Fetching…`, `kind: ${source.kind}`);
|
|
259
|
+
progress?.start(`[${source.id}] ${source.kind}`);
|
|
260
|
+
const sourceStartedAt = Date.now();
|
|
207
261
|
try {
|
|
208
262
|
const fetchResult = await adapter.fetch(source, {
|
|
209
263
|
fetch: options.fetch,
|
|
210
264
|
state: previousState,
|
|
265
|
+
backfill: options.backfill,
|
|
266
|
+
maxPagesOverride: options.maxPagesOverride,
|
|
267
|
+
env: options.env,
|
|
268
|
+
// In dry-run mode (`radar source test`), paginating adapters fetch
|
|
269
|
+
// only page 0 so the preview never walks past the recipe's first
|
|
270
|
+
// window. Non-paginating adapters ignore the flag.
|
|
271
|
+
dryRun: options.dryRun,
|
|
272
|
+
// Surface adapter-level non-fatal hints (default-selector misses on
|
|
273
|
+
// json-api, etc.) through the same warn sink we use for
|
|
274
|
+
// schema-mismatch / playwright-skip messages.
|
|
275
|
+
warn: (m) => warn(`watch run: ${m}`),
|
|
276
|
+
// Forward the source-scoped reporter so adapter phases nest under
|
|
277
|
+
// the parent `[<source-id>] …` marker. html-js uses it for the
|
|
278
|
+
// Chromium lifecycle; other kinds currently ignore it.
|
|
279
|
+
onProgress: progress,
|
|
280
|
+
// Per-page hook for paginating adapters (json-api). We translate
|
|
281
|
+
// each page event into a phase marker so non-TTY logs preserve the
|
|
282
|
+
// narrative ("Page 3/80: 100 items") and TTY rows pick up the
|
|
283
|
+
// metric on the spinner.
|
|
284
|
+
onPage: progress
|
|
285
|
+
? ({ pageIndex, pageTotal, items: pageItems }) => {
|
|
286
|
+
const human = `Page ${pageIndex + 1}/${pageTotal}: ${pageItems} items fetched`;
|
|
287
|
+
progress.phase(`[${source.id}] ${human}`);
|
|
288
|
+
progress.update({
|
|
289
|
+
page: `${pageIndex + 1}/${pageTotal}`,
|
|
290
|
+
items: String(pageItems),
|
|
291
|
+
});
|
|
292
|
+
}
|
|
293
|
+
: undefined,
|
|
211
294
|
});
|
|
212
295
|
fetched = fetchResult.items;
|
|
213
296
|
nextStatePatch = fetchResult.state;
|
|
214
297
|
notModified = fetchResult.notModified ?? false;
|
|
298
|
+
if (fetchResult.diag) {
|
|
299
|
+
result.diag[source.id] = fetchResult.diag;
|
|
300
|
+
}
|
|
215
301
|
}
|
|
216
302
|
catch (e) {
|
|
217
303
|
const message = e instanceof Error ? e.message : String(e);
|
|
304
|
+
progress?.fail(`[${source.id}] Failed`, message);
|
|
218
305
|
error(`watch run: '${source.id}' fetch failed: ${message}`);
|
|
219
306
|
result.errors.push({ sourceId: source.id, message });
|
|
220
307
|
continue;
|
|
@@ -298,6 +385,16 @@ export async function watchRun(options) {
|
|
|
298
385
|
result.detected[source.id] = detectedItems;
|
|
299
386
|
result.states[source.id] = nextState;
|
|
300
387
|
result.stats[source.id] = { fetched: fetched.length, filtered: filteredCount };
|
|
388
|
+
// Per-source completion phase. We use the reporter's `succeed()` so the
|
|
389
|
+
// spinner row stops cleanly and the user gets a single summary line
|
|
390
|
+
// (`[<source-id>] Completed: <items> total, <new> new (<duration>)`).
|
|
391
|
+
// The legacy plain log lines further up the loop are intentionally
|
|
392
|
+
// preserved (acceptance criterion #7) so scripts that grep stdout
|
|
393
|
+
// continue to work.
|
|
394
|
+
if (progress) {
|
|
395
|
+
const duration = Date.now() - sourceStartedAt;
|
|
396
|
+
progress.succeed(`[${source.id}] Completed: ${fetched.length} total, ${detectedItems.length} new`, duration);
|
|
397
|
+
}
|
|
301
398
|
}
|
|
302
399
|
return result;
|
|
303
400
|
}
|
package/dist/core/watcher.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"watcher.js","sourceRoot":"","sources":["../../src/core/watcher.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"watcher.js","sourceRoot":"","sources":["../../src/core/watcher.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
name: AWS What's New
|
|
2
|
+
description: AWS What's New announcements (page-based JSON API, full-history backfill capable)
|
|
3
|
+
kind: json-api
|
|
4
|
+
# `whats-new-v2` is the active directoryId that backs the current
|
|
5
|
+
# aws.amazon.com/new/ landing page. The legacy `whats-new` directoryId is
|
|
6
|
+
# frozen at 2024-05-17 (16,281 items) and no longer ingests new posts. We
|
|
7
|
+
# discovered v2 by grepping the rendered HTML of /new/ for `whats-new-v2`.
|
|
8
|
+
url: https://aws.amazon.com/api/dirs/items/search?item.directoryId=whats-new-v2&sort_by=item.additionalFields.postDateTime&sort_order=desc&size=100&page=0&item.locale=en_US
|
|
9
|
+
tags:
|
|
10
|
+
- aws
|
|
11
|
+
- cloud
|
|
12
|
+
# `filters.keywords` is intentionally left empty — `radar source add` callers
|
|
13
|
+
# pick keywords per workspace via `--keywords` (ADR-0012 §D3 strategy A). For
|
|
14
|
+
# reference, common Bedrock / Claude / agent-watching keyword sets:
|
|
15
|
+
#
|
|
16
|
+
# --keywords "Bedrock,Claude,agents,Inferentia"
|
|
17
|
+
# --keywords "RDS,Aurora,DynamoDB" # database watchers
|
|
18
|
+
# --keywords "Lambda,Step Functions" # serverless watchers
|
|
19
|
+
#
|
|
20
|
+
# Empty keywords match every item — useful for raw firehose ingest, but
|
|
21
|
+
# almost every user will want to narrow this.
|
|
22
|
+
filters:
|
|
23
|
+
keywords: []
|
|
24
|
+
excludeKeywords: []
|
|
25
|
+
matchMode: word
|
|
26
|
+
matchFields:
|
|
27
|
+
- title
|
|
28
|
+
- summary
|
|
29
|
+
caseSensitive: false
|
|
30
|
+
http:
|
|
31
|
+
method: GET
|
|
32
|
+
headers:
|
|
33
|
+
accept: application/json
|
|
34
|
+
pagination:
|
|
35
|
+
type: page
|
|
36
|
+
param: page
|
|
37
|
+
start: 0
|
|
38
|
+
pageSize: 100
|
|
39
|
+
pageSizeParam: size
|
|
40
|
+
# PER-FACET inner cap (ADR-0017). The 10,000-item offset cap is
|
|
41
|
+
# circumvented by the year-by-year facet sweep below — each year holds
|
|
42
|
+
# at most ~2,345 items (2024), which fits in ≤24 pages at pageSize=100.
|
|
43
|
+
# 30 leaves ~25% headroom for the largest year. Previous value 250 was
|
|
44
|
+
# dictated by full-history sweep on a single axis (PR #232) and is
|
|
45
|
+
# superseded by the facet sweep approach in ADR-0017. `--backfill
|
|
46
|
+
# --max-pages N` applies to this inner cap, not the outer year axis.
|
|
47
|
+
maxPages: 30
|
|
48
|
+
# `metadata.totalHits` is the AWS-reported total per facet value; the
|
|
49
|
+
# adapter uses it to short-circuit backfill once `ceil(totalHits /
|
|
50
|
+
# pageSize)` pages have been walked (ADR-0012 §D2 backfill early-stop
|
|
51
|
+
# hint). With the year facet active, each year reports its own
|
|
52
|
+
# totalHits (~2,000-2,300 for active years).
|
|
53
|
+
totalPath: $.metadata.totalHits
|
|
54
|
+
# Facet sweep (ADR-0017). The AWS dirs API enforces a hard
|
|
55
|
+
# `(page + 1) * size <= 10000` cap, making the upper ~half of the catalog
|
|
56
|
+
# (totalHits 21,834 vs reachable 10,000) unreachable via inner pagination
|
|
57
|
+
# alone. Sweeping year-by-year recovers full coverage with zero gap: each
|
|
58
|
+
# year holds well under 10,000 items, so the inner traversal never bumps
|
|
59
|
+
# the AWS-side limit. Range covers 2004 (AWS's first announcement year)
|
|
60
|
+
# through the current year; out-of-range years simply return 0 items and
|
|
61
|
+
# the inner loop terminates immediately.
|
|
62
|
+
facets:
|
|
63
|
+
year:
|
|
64
|
+
type: range
|
|
65
|
+
range: [2004, 2026]
|
|
66
|
+
step: 1
|
|
67
|
+
param: tags.id
|
|
68
|
+
template: "whats-new-v2#year#{}"
|
|
69
|
+
jsonSelectors:
|
|
70
|
+
# Each result is wrapped in `{ "item": { ... } }`, so we dereference one
|
|
71
|
+
# extra level inside `items[*].item` to keep the per-element selectors
|
|
72
|
+
# rooted at the actual record.
|
|
73
|
+
items: $.items[*].item
|
|
74
|
+
title: $.additionalFields.headline
|
|
75
|
+
# `headlineUrl` is a relative path like `/about-aws/whats-new/.../`. The
|
|
76
|
+
# json-api adapter resolves it against `linkBase` so `Item.url` lands as
|
|
77
|
+
# an absolute URL (#204). `source.url` points at the API endpoint
|
|
78
|
+
# (`aws.amazon.com/api/...`) which would also work as the implicit
|
|
79
|
+
# fallback base, but we declare `linkBase` explicitly here so the recipe
|
|
80
|
+
# documents the intent and is robust if the API endpoint host ever drifts
|
|
81
|
+
# away from the public site host.
|
|
82
|
+
link: $.additionalFields.headlineUrl
|
|
83
|
+
linkBase: https://aws.amazon.com
|
|
84
|
+
publishedAt: $.additionalFields.postDateTime
|
|
85
|
+
summary: $.additionalFields.postBody
|
|
86
|
+
publisherId: $.id
|
|
87
|
+
trustLevel: untrusted
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
name: dev.to articles
|
|
2
|
+
description: dev.to public articles API (page-based, zero-config via default selector chain)
|
|
3
|
+
kind: json-api
|
|
4
|
+
# dev.to returns an array of article objects directly at the JSON root, so the
|
|
5
|
+
# default selector chain `$[*]` matches without an explicit `jsonSelectors.items`.
|
|
6
|
+
# Each article has `title` / `url` / `description` / `published_at` at the top
|
|
7
|
+
# level, which the default per-field chains pick up automatically.
|
|
8
|
+
url: https://dev.to/api/articles?per_page=30&page=1
|
|
9
|
+
tags:
|
|
10
|
+
- blog
|
|
11
|
+
# Empty keywords match every article — narrow with `--keywords` per workspace.
|
|
12
|
+
# Suggested keyword sets for common tag follows:
|
|
13
|
+
#
|
|
14
|
+
# --keywords "Claude,Anthropic,Claude Code"
|
|
15
|
+
# --keywords "rust,axum,tokio"
|
|
16
|
+
# --keywords "kubernetes,helm,istio"
|
|
17
|
+
#
|
|
18
|
+
# You can also point the URL at a specific tag (e.g. add `&tag=claude` to
|
|
19
|
+
# the `url` above) when overriding the source after `--recipe`.
|
|
20
|
+
filters:
|
|
21
|
+
keywords: []
|
|
22
|
+
excludeKeywords: []
|
|
23
|
+
matchMode: word
|
|
24
|
+
matchFields:
|
|
25
|
+
- title
|
|
26
|
+
- summary
|
|
27
|
+
caseSensitive: false
|
|
28
|
+
pagination:
|
|
29
|
+
type: page
|
|
30
|
+
param: page
|
|
31
|
+
start: 1
|
|
32
|
+
pageSize: 30
|
|
33
|
+
pageSizeParam: per_page
|
|
34
|
+
# 10 pages * 30 items = 300 items, comfortably above dev.to's normal
|
|
35
|
+
# "what's new" reading horizon. Bump via `--backfill --max-pages N` for
|
|
36
|
+
# deeper history (the API serves several thousand pages back).
|
|
37
|
+
maxPages: 10
|
|
38
|
+
# `jsonSelectors` omitted intentionally: the default chain (ADR-0012 §D2 /
|
|
39
|
+
# #174) handles the dev.to shape end-to-end.
|
|
40
|
+
trustLevel: untrusted
|
package/dist/schemas/index.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/schemas/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,WAAW,CAAC;AAC1B,cAAc,eAAe,CAAC;AAC9B,cAAc,aAAa,CAAC;AAC5B,cAAc,YAAY,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/schemas/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,WAAW,CAAC;AAC1B,cAAc,aAAa,CAAC;AAC5B,cAAc,eAAe,CAAC;AAC9B,cAAc,aAAa,CAAC;AAC5B,cAAc,YAAY,CAAC"}
|
package/dist/schemas/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/schemas/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,WAAW,CAAC;AAC1B,cAAc,eAAe,CAAC;AAC9B,cAAc,aAAa,CAAC;AAC5B,cAAc,YAAY,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/schemas/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,WAAW,CAAC;AAC1B,cAAc,aAAa,CAAC;AAC5B,cAAc,eAAe,CAAC;AAC9B,cAAc,aAAa,CAAC;AAC5B,cAAc,YAAY,CAAC"}
|
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
/**
|
|
3
|
+
* Schema for a bundled recipe YAML file (ADR-0012 §D3, strategy A —
|
|
4
|
+
* "リポ同梱").
|
|
5
|
+
*
|
|
6
|
+
* Recipes are partial-Source templates that live in `recipes/*.yaml` and
|
|
7
|
+
* are applied via `radar source add <id> --recipe <name>`. The recipe
|
|
8
|
+
* supplies the heavy lifting fields (`kind`, `url`, `pagination`,
|
|
9
|
+
* `jsonSelectors`, ...) while the caller picks an `id` and may override a
|
|
10
|
+
* small whitelist of "ergonomic" fields (`name` / `tags` / `filters`).
|
|
11
|
+
*
|
|
12
|
+
* The schema is intentionally a near-mirror of `SourceSchema` minus `id` —
|
|
13
|
+
* the id is supplied by the caller at `source add` time, never by the
|
|
14
|
+
* recipe itself. `id` baked into a recipe would conflict with user-chosen
|
|
15
|
+
* ids in shared workspaces and forces a per-install rename ritual that
|
|
16
|
+
* defeats the whole "one-liner add" promise.
|
|
17
|
+
*
|
|
18
|
+
* `name` here is the recipe's *display name*, mirroring `Source.name`.
|
|
19
|
+
* The recipe's identifier — what `--recipe <name>` matches against — is
|
|
20
|
+
* the YAML filename stem, never a YAML field. This keeps the recipe
|
|
21
|
+
* authoring contract simple (rename the file = rename the recipe) and
|
|
22
|
+
* avoids the foot-gun where a recipe's filename and inner `name` field
|
|
23
|
+
* diverge.
|
|
24
|
+
*
|
|
25
|
+
* `description` is recipe-only metadata surfaced by `radar source recipes`
|
|
26
|
+
* for discovery. It does NOT propagate to the generated source YAML.
|
|
27
|
+
*/
|
|
28
|
+
export declare const RecipeFileSchema: z.ZodObject<{
|
|
29
|
+
name: z.ZodOptional<z.ZodString>;
|
|
30
|
+
description: z.ZodOptional<z.ZodString>;
|
|
31
|
+
kind: z.ZodEnum<{
|
|
32
|
+
rss: "rss";
|
|
33
|
+
html: "html";
|
|
34
|
+
"html-js": "html-js";
|
|
35
|
+
"github-releases": "github-releases";
|
|
36
|
+
"npm-registry": "npm-registry";
|
|
37
|
+
"json-feed": "json-feed";
|
|
38
|
+
"json-api": "json-api";
|
|
39
|
+
}>;
|
|
40
|
+
url: z.ZodString;
|
|
41
|
+
tags: z.ZodDefault<z.ZodArray<z.ZodString>>;
|
|
42
|
+
filters: z.ZodDefault<z.ZodObject<{
|
|
43
|
+
keywords: z.ZodDefault<z.ZodArray<z.ZodString>>;
|
|
44
|
+
excludeKeywords: z.ZodDefault<z.ZodArray<z.ZodString>>;
|
|
45
|
+
matchMode: z.ZodDefault<z.ZodEnum<{
|
|
46
|
+
word: "word";
|
|
47
|
+
substring: "substring";
|
|
48
|
+
regex: "regex";
|
|
49
|
+
}>>;
|
|
50
|
+
matchFields: z.ZodDefault<z.ZodArray<z.ZodEnum<{
|
|
51
|
+
title: "title";
|
|
52
|
+
summary: "summary";
|
|
53
|
+
body: "body";
|
|
54
|
+
tags: "tags";
|
|
55
|
+
}>>>;
|
|
56
|
+
caseSensitive: z.ZodDefault<z.ZodBoolean>;
|
|
57
|
+
}, z.core.$strip>>;
|
|
58
|
+
selectors: z.ZodOptional<z.ZodObject<{
|
|
59
|
+
item: z.ZodString;
|
|
60
|
+
title: z.ZodString;
|
|
61
|
+
link: z.ZodString;
|
|
62
|
+
summary: z.ZodOptional<z.ZodString>;
|
|
63
|
+
publishedAt: z.ZodOptional<z.ZodString>;
|
|
64
|
+
body: z.ZodOptional<z.ZodString>;
|
|
65
|
+
tags: z.ZodOptional<z.ZodString>;
|
|
66
|
+
}, z.core.$strip>>;
|
|
67
|
+
js: z.ZodOptional<z.ZodObject<{
|
|
68
|
+
waitFor: z.ZodOptional<z.ZodString>;
|
|
69
|
+
waitUntil: z.ZodDefault<z.ZodEnum<{
|
|
70
|
+
load: "load";
|
|
71
|
+
domcontentloaded: "domcontentloaded";
|
|
72
|
+
networkidle: "networkidle";
|
|
73
|
+
}>>;
|
|
74
|
+
timeout: z.ZodDefault<z.ZodNumber>;
|
|
75
|
+
userAgent: z.ZodOptional<z.ZodString>;
|
|
76
|
+
}, z.core.$strip>>;
|
|
77
|
+
http: z.ZodOptional<z.ZodObject<{
|
|
78
|
+
method: z.ZodDefault<z.ZodLiteral<"GET">>;
|
|
79
|
+
headers: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodString>>;
|
|
80
|
+
}, z.core.$strip>>;
|
|
81
|
+
pagination: z.ZodOptional<z.ZodObject<{
|
|
82
|
+
type: z.ZodEnum<{
|
|
83
|
+
page: "page";
|
|
84
|
+
offset: "offset";
|
|
85
|
+
cursor: "cursor";
|
|
86
|
+
"link-header": "link-header";
|
|
87
|
+
token: "token";
|
|
88
|
+
none: "none";
|
|
89
|
+
}>;
|
|
90
|
+
param: z.ZodOptional<z.ZodString>;
|
|
91
|
+
start: z.ZodOptional<z.ZodNumber>;
|
|
92
|
+
pageSize: z.ZodOptional<z.ZodNumber>;
|
|
93
|
+
pageSizeParam: z.ZodOptional<z.ZodString>;
|
|
94
|
+
nextCursorPath: z.ZodOptional<z.ZodString>;
|
|
95
|
+
totalPath: z.ZodOptional<z.ZodString>;
|
|
96
|
+
maxPages: z.ZodDefault<z.ZodNumber>;
|
|
97
|
+
}, z.core.$strip>>;
|
|
98
|
+
jsonSelectors: z.ZodOptional<z.ZodObject<{
|
|
99
|
+
items: z.ZodOptional<z.ZodString>;
|
|
100
|
+
title: z.ZodOptional<z.ZodString>;
|
|
101
|
+
link: z.ZodOptional<z.ZodString>;
|
|
102
|
+
publisherId: z.ZodOptional<z.ZodString>;
|
|
103
|
+
summary: z.ZodOptional<z.ZodString>;
|
|
104
|
+
publishedAt: z.ZodOptional<z.ZodString>;
|
|
105
|
+
body: z.ZodOptional<z.ZodString>;
|
|
106
|
+
tags: z.ZodOptional<z.ZodString>;
|
|
107
|
+
linkBase: z.ZodOptional<z.ZodString>;
|
|
108
|
+
}, z.core.$strip>>;
|
|
109
|
+
facets: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodDiscriminatedUnion<[z.ZodObject<{
|
|
110
|
+
type: z.ZodLiteral<"range">;
|
|
111
|
+
param: z.ZodString;
|
|
112
|
+
template: z.ZodString;
|
|
113
|
+
range: z.ZodTuple<[z.ZodNumber, z.ZodNumber], null>;
|
|
114
|
+
step: z.ZodDefault<z.ZodNumber>;
|
|
115
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
116
|
+
type: z.ZodLiteral<"enum">;
|
|
117
|
+
param: z.ZodString;
|
|
118
|
+
template: z.ZodString;
|
|
119
|
+
values: z.ZodArray<z.ZodUnion<readonly [z.ZodString, z.ZodNumber]>>;
|
|
120
|
+
}, z.core.$strip>], "type">>>;
|
|
121
|
+
trustLevel: z.ZodDefault<z.ZodEnum<{
|
|
122
|
+
trusted: "trusted";
|
|
123
|
+
untrusted: "untrusted";
|
|
124
|
+
}>>;
|
|
125
|
+
}, z.core.$strip>;
|
|
126
|
+
export type RecipeFile = z.infer<typeof RecipeFileSchema>;
|
|
127
|
+
//# sourceMappingURL=recipe.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"recipe.d.ts","sourceRoot":"","sources":["../../src/schemas/recipe.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAaxB;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBA2B3B,CAAC;AAEH,MAAM,MAAM,UAAU,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,gBAAgB,CAAC,CAAC"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { SourceFacetsSchema, SourceFiltersSchema, SourceHttpOptionsSchema, SourceJsOptionsSchema, SourceJsonApiSelectorsSchema, SourceKindSchema, SourcePaginationSchema, SourceSelectorsSchema, TrustLevelSchema, } from "./source.js";
|
|
3
|
+
/**
|
|
4
|
+
* Schema for a bundled recipe YAML file (ADR-0012 §D3, strategy A —
|
|
5
|
+
* "リポ同梱").
|
|
6
|
+
*
|
|
7
|
+
* Recipes are partial-Source templates that live in `recipes/*.yaml` and
|
|
8
|
+
* are applied via `radar source add <id> --recipe <name>`. The recipe
|
|
9
|
+
* supplies the heavy lifting fields (`kind`, `url`, `pagination`,
|
|
10
|
+
* `jsonSelectors`, ...) while the caller picks an `id` and may override a
|
|
11
|
+
* small whitelist of "ergonomic" fields (`name` / `tags` / `filters`).
|
|
12
|
+
*
|
|
13
|
+
* The schema is intentionally a near-mirror of `SourceSchema` minus `id` —
|
|
14
|
+
* the id is supplied by the caller at `source add` time, never by the
|
|
15
|
+
* recipe itself. `id` baked into a recipe would conflict with user-chosen
|
|
16
|
+
* ids in shared workspaces and forces a per-install rename ritual that
|
|
17
|
+
* defeats the whole "one-liner add" promise.
|
|
18
|
+
*
|
|
19
|
+
* `name` here is the recipe's *display name*, mirroring `Source.name`.
|
|
20
|
+
* The recipe's identifier — what `--recipe <name>` matches against — is
|
|
21
|
+
* the YAML filename stem, never a YAML field. This keeps the recipe
|
|
22
|
+
* authoring contract simple (rename the file = rename the recipe) and
|
|
23
|
+
* avoids the foot-gun where a recipe's filename and inner `name` field
|
|
24
|
+
* diverge.
|
|
25
|
+
*
|
|
26
|
+
* `description` is recipe-only metadata surfaced by `radar source recipes`
|
|
27
|
+
* for discovery. It does NOT propagate to the generated source YAML.
|
|
28
|
+
*/
|
|
29
|
+
export const RecipeFileSchema = z.object({
|
|
30
|
+
/** Display name (mirrors `Source.name`). Optional. */
|
|
31
|
+
name: z.string().optional(),
|
|
32
|
+
/**
|
|
33
|
+
* One-line description shown by `radar source recipes`. Recipe-only
|
|
34
|
+
* metadata — never written to the generated `sources/<id>.yaml`.
|
|
35
|
+
*/
|
|
36
|
+
description: z.string().optional(),
|
|
37
|
+
kind: SourceKindSchema,
|
|
38
|
+
url: z.string().min(1),
|
|
39
|
+
tags: z.array(z.string()).default([]),
|
|
40
|
+
filters: SourceFiltersSchema.default({
|
|
41
|
+
keywords: [],
|
|
42
|
+
excludeKeywords: [],
|
|
43
|
+
matchMode: "word",
|
|
44
|
+
matchFields: ["title", "summary"],
|
|
45
|
+
caseSensitive: false,
|
|
46
|
+
}),
|
|
47
|
+
selectors: SourceSelectorsSchema.optional(),
|
|
48
|
+
js: SourceJsOptionsSchema.optional(),
|
|
49
|
+
http: SourceHttpOptionsSchema.optional(),
|
|
50
|
+
pagination: SourcePaginationSchema.optional(),
|
|
51
|
+
jsonSelectors: SourceJsonApiSelectorsSchema.optional(),
|
|
52
|
+
// Facet sweep recipe extension (ADR-0017). Optional so existing recipes
|
|
53
|
+
// without `facets:` keep working unchanged.
|
|
54
|
+
facets: SourceFacetsSchema.optional(),
|
|
55
|
+
trustLevel: TrustLevelSchema.default("untrusted"),
|
|
56
|
+
});
|
|
57
|
+
//# sourceMappingURL=recipe.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"recipe.js","sourceRoot":"","sources":["../../src/schemas/recipe.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EACL,kBAAkB,EAClB,mBAAmB,EACnB,uBAAuB,EACvB,qBAAqB,EACrB,4BAA4B,EAC5B,gBAAgB,EAChB,sBAAsB,EACtB,qBAAqB,EACrB,gBAAgB,GACjB,MAAM,aAAa,CAAC;AAErB;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,CAAC,MAAM,CAAC;IACvC,sDAAsD;IACtD,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC3B;;;OAGG;IACH,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAClC,IAAI,EAAE,gBAAgB;IACtB,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACtB,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC;IACrC,OAAO,EAAE,mBAAmB,CAAC,OAAO,CAAC;QACnC,QAAQ,EAAE,EAAE;QACZ,eAAe,EAAE,EAAE;QACnB,SAAS,EAAE,MAAM;QACjB,WAAW,EAAE,CAAC,OAAO,EAAE,SAAS,CAAC;QACjC,aAAa,EAAE,KAAK;KACrB,CAAC;IACF,SAAS,EAAE,qBAAqB,CAAC,QAAQ,EAAE;IAC3C,EAAE,EAAE,qBAAqB,CAAC,QAAQ,EAAE;IACpC,IAAI,EAAE,uBAAuB,CAAC,QAAQ,EAAE;IACxC,UAAU,EAAE,sBAAsB,CAAC,QAAQ,EAAE;IAC7C,aAAa,EAAE,4BAA4B,CAAC,QAAQ,EAAE;IACtD,wEAAwE;IACxE,4CAA4C;IAC5C,MAAM,EAAE,kBAAkB,CAAC,QAAQ,EAAE;IACrC,UAAU,EAAE,gBAAgB,CAAC,OAAO,CAAC,WAAW,CAAC;CAClD,CAAC,CAAC"}
|