@ozzylabs/feedradar 0.1.6 → 0.1.8
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.md +2 -1
- package/dist/agents/_boundary.d.ts +74 -1
- package/dist/agents/_boundary.d.ts.map +1 -1
- package/dist/agents/_boundary.js +152 -0
- package/dist/agents/_boundary.js.map +1 -1
- package/dist/claude-skills/dismiss/SKILL.md +18 -12
- package/dist/claude-skills/research/SKILL.md +21 -1
- package/dist/claude-skills/review/SKILL.md +23 -1
- package/dist/claude-skills/update/SKILL.md +24 -2
- package/dist/cli/_commit-path.d.ts +33 -0
- package/dist/cli/_commit-path.d.ts.map +1 -0
- package/dist/cli/_commit-path.js +43 -0
- package/dist/cli/_commit-path.js.map +1 -0
- package/dist/cli/dismiss.d.ts +38 -7
- package/dist/cli/dismiss.d.ts.map +1 -1
- package/dist/cli/dismiss.js +239 -54
- package/dist/cli/dismiss.js.map +1 -1
- package/dist/cli/index.d.ts.map +1 -1
- package/dist/cli/index.js +7 -1
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/items.d.ts +44 -0
- package/dist/cli/items.d.ts.map +1 -0
- package/dist/cli/items.js +288 -0
- package/dist/cli/items.js.map +1 -0
- package/dist/cli/research.d.ts +21 -0
- package/dist/cli/research.d.ts.map +1 -1
- package/dist/cli/research.js +360 -54
- package/dist/cli/research.js.map +1 -1
- package/dist/cli/review.d.ts +23 -0
- package/dist/cli/review.d.ts.map +1 -1
- package/dist/cli/review.js +462 -2
- package/dist/cli/review.js.map +1 -1
- package/dist/cli/source.d.ts.map +1 -1
- package/dist/cli/source.js +18 -0
- package/dist/cli/source.js.map +1 -1
- package/dist/cli/triage.d.ts +136 -0
- package/dist/cli/triage.d.ts.map +1 -0
- package/dist/cli/triage.js +1110 -0
- package/dist/cli/triage.js.map +1 -0
- package/dist/cli/undismiss.d.ts +30 -0
- package/dist/cli/undismiss.d.ts.map +1 -0
- package/dist/cli/undismiss.js +133 -0
- package/dist/cli/undismiss.js.map +1 -0
- package/dist/cli/update.d.ts.map +1 -1
- package/dist/cli/update.js +429 -141
- package/dist/cli/update.js.map +1 -1
- package/dist/cli/workflow/generate-combined-with-triage.d.ts +163 -0
- package/dist/cli/workflow/generate-combined-with-triage.d.ts.map +1 -0
- package/dist/cli/workflow/generate-combined-with-triage.js +582 -0
- package/dist/cli/workflow/generate-combined-with-triage.js.map +1 -0
- package/dist/cli/workflow.d.ts +6 -5
- package/dist/cli/workflow.d.ts.map +1 -1
- package/dist/cli/workflow.js +13 -8
- package/dist/cli/workflow.js.map +1 -1
- package/dist/core/feeds/json-api.d.ts +5 -2
- package/dist/core/feeds/json-api.d.ts.map +1 -1
- package/dist/core/feeds/json-api.js +99 -13
- package/dist/core/feeds/json-api.js.map +1 -1
- package/dist/core/feeds/types.d.ts +26 -0
- package/dist/core/feeds/types.d.ts.map +1 -1
- package/dist/core/recipes.d.ts.map +1 -1
- package/dist/core/recipes.js +6 -0
- package/dist/core/recipes.js.map +1 -1
- package/dist/core/transitions.d.ts +30 -0
- package/dist/core/transitions.d.ts.map +1 -0
- package/dist/core/transitions.js +103 -0
- package/dist/core/transitions.js.map +1 -0
- package/dist/core/triage/adapter.d.ts +80 -0
- package/dist/core/triage/adapter.d.ts.map +1 -0
- package/dist/core/triage/adapter.js +128 -0
- package/dist/core/triage/adapter.js.map +1 -0
- package/dist/core/triage/index.d.ts +105 -0
- package/dist/core/triage/index.d.ts.map +1 -0
- package/dist/core/triage/index.js +246 -0
- package/dist/core/triage/index.js.map +1 -0
- package/dist/core/triage/prompt.d.ts +30 -0
- package/dist/core/triage/prompt.d.ts.map +1 -0
- package/dist/core/triage/prompt.js +157 -0
- package/dist/core/triage/prompt.js.map +1 -0
- package/dist/core/triage/response.d.ts +114 -0
- package/dist/core/triage/response.d.ts.map +1 -0
- package/dist/core/triage/response.js +188 -0
- package/dist/core/triage/response.js.map +1 -0
- package/dist/gemini-commands/research.toml +1 -1
- package/dist/gemini-commands/review.toml +1 -1
- package/dist/gemini-commands/update.toml +1 -1
- package/dist/recipes/aws-whats-new.yaml +36 -1
- package/dist/recipes/dev-to.yaml +24 -0
- package/dist/schemas/item.d.ts +151 -5
- package/dist/schemas/item.d.ts.map +1 -1
- package/dist/schemas/item.js +164 -4
- package/dist/schemas/item.js.map +1 -1
- package/dist/schemas/recipe.d.ts +11 -1
- package/dist/schemas/recipe.d.ts.map +1 -1
- package/dist/schemas/recipe.js +10 -1
- package/dist/schemas/recipe.js.map +1 -1
- package/dist/schemas/source.d.ts +65 -4
- package/dist/schemas/source.d.ts.map +1 -1
- package/dist/schemas/source.js +65 -3
- package/dist/schemas/source.js.map +1 -1
- package/dist/skills/research/SKILL.md +57 -1
- package/dist/skills/review/SKILL.md +65 -1
- package/dist/skills/update/SKILL.md +54 -1
- package/dist/templates/agents/AGENTS.md +30 -0
- package/dist/templates/workflows/combined-with-triage.template.yaml.tmpl +132 -0
- package/package.json +1 -1
|
@@ -0,0 +1,288 @@
|
|
|
1
|
+
import { access } from "node:fs/promises";
|
|
2
|
+
import { join } from "node:path";
|
|
3
|
+
import { loadItems } from "../core/items.js";
|
|
4
|
+
import { ItemStatusSchema } from "../schemas/index.js";
|
|
5
|
+
function parseIntFlag(flag, raw, min) {
|
|
6
|
+
if (raw === undefined)
|
|
7
|
+
throw new Error(`option ${flag} requires a value`);
|
|
8
|
+
const n = Number(raw);
|
|
9
|
+
if (!Number.isInteger(n) || n < min) {
|
|
10
|
+
throw new Error(`option ${flag} expects an integer >= ${min}, got '${raw}'`);
|
|
11
|
+
}
|
|
12
|
+
return n;
|
|
13
|
+
}
|
|
14
|
+
function parseListArgs(args) {
|
|
15
|
+
const out = {};
|
|
16
|
+
for (let i = 0; i < args.length; i++) {
|
|
17
|
+
const a = args[i];
|
|
18
|
+
if (a === "-h" || a === "--help") {
|
|
19
|
+
out.help = true;
|
|
20
|
+
continue;
|
|
21
|
+
}
|
|
22
|
+
if (a === "--status") {
|
|
23
|
+
const value = args[++i];
|
|
24
|
+
if (value === undefined)
|
|
25
|
+
throw new Error(`option ${a} requires a value`);
|
|
26
|
+
out.status = value;
|
|
27
|
+
continue;
|
|
28
|
+
}
|
|
29
|
+
if (a === "--source") {
|
|
30
|
+
const value = args[++i];
|
|
31
|
+
if (value === undefined)
|
|
32
|
+
throw new Error(`option ${a} requires a value`);
|
|
33
|
+
out.source = value;
|
|
34
|
+
continue;
|
|
35
|
+
}
|
|
36
|
+
if (a === "--triage-group") {
|
|
37
|
+
const value = args[++i];
|
|
38
|
+
if (value === undefined)
|
|
39
|
+
throw new Error(`option ${a} requires a value`);
|
|
40
|
+
out.triageGroup = value;
|
|
41
|
+
continue;
|
|
42
|
+
}
|
|
43
|
+
if (a === "--since") {
|
|
44
|
+
const value = args[++i];
|
|
45
|
+
if (value === undefined)
|
|
46
|
+
throw new Error(`option ${a} requires a value`);
|
|
47
|
+
out.since = value;
|
|
48
|
+
continue;
|
|
49
|
+
}
|
|
50
|
+
if (a === "--limit") {
|
|
51
|
+
out.limit = parseIntFlag(a, args[++i], 1);
|
|
52
|
+
continue;
|
|
53
|
+
}
|
|
54
|
+
if (a === "--json") {
|
|
55
|
+
out.json = true;
|
|
56
|
+
continue;
|
|
57
|
+
}
|
|
58
|
+
if (a === "--field") {
|
|
59
|
+
const value = args[++i];
|
|
60
|
+
if (value === undefined)
|
|
61
|
+
throw new Error(`option ${a} requires a value`);
|
|
62
|
+
out.field = value;
|
|
63
|
+
continue;
|
|
64
|
+
}
|
|
65
|
+
if (a?.startsWith("--")) {
|
|
66
|
+
throw new Error(`unknown option: ${a}`);
|
|
67
|
+
}
|
|
68
|
+
throw new Error(`unexpected positional argument: ${a}`);
|
|
69
|
+
}
|
|
70
|
+
return out;
|
|
71
|
+
}
|
|
72
|
+
function printListHelp(log) {
|
|
73
|
+
log("Usage: radar items list [filters] [output options]");
|
|
74
|
+
log("");
|
|
75
|
+
log("Filters:");
|
|
76
|
+
log(" --status <status> detected | triaged_research | triaged_digest |");
|
|
77
|
+
log(" triaged_unsure | researched | reviewed | dismissed");
|
|
78
|
+
log(" --source <id> limit to one source");
|
|
79
|
+
log(" --triage-group <name> items whose triage.group == <name>");
|
|
80
|
+
log(" (used by digest workflow)");
|
|
81
|
+
log(" --since <duration> drop items older than the cutoff (e.g. 7d, 24h)");
|
|
82
|
+
log(" --limit N cap result count");
|
|
83
|
+
log("");
|
|
84
|
+
log("Output options:");
|
|
85
|
+
log(" --json emit JSON array (one object per item)");
|
|
86
|
+
log(" --field <expr> emit one item field per row (e.g. id, sourceId,");
|
|
87
|
+
log(" triage.decision). Supports nested dot paths.");
|
|
88
|
+
}
|
|
89
|
+
function printItemsHelp(log) {
|
|
90
|
+
log("Usage: radar items <list> [...]");
|
|
91
|
+
log("");
|
|
92
|
+
log("Subcommands:");
|
|
93
|
+
log(" list [filters] List items matching the supplied filters");
|
|
94
|
+
}
|
|
95
|
+
async function pathExists(p) {
|
|
96
|
+
try {
|
|
97
|
+
await access(p);
|
|
98
|
+
return true;
|
|
99
|
+
}
|
|
100
|
+
catch {
|
|
101
|
+
return false;
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* Parse `Nd` / `Nh` / `Nm` / `Ns` cutoff strings to a `Date` representing
|
|
106
|
+
* the threshold (= now - duration). Returns `null` on unparsable input so
|
|
107
|
+
* the caller can surface a clear error.
|
|
108
|
+
*/
|
|
109
|
+
function parseSinceCutoff(value, now = new Date()) {
|
|
110
|
+
const match = value.match(/^(\d+)([smhd])$/);
|
|
111
|
+
if (!match)
|
|
112
|
+
return null;
|
|
113
|
+
const n = Number(match[1]);
|
|
114
|
+
const unit = match[2];
|
|
115
|
+
const ms = unit === "s"
|
|
116
|
+
? n * 1000
|
|
117
|
+
: unit === "m"
|
|
118
|
+
? n * 60_000
|
|
119
|
+
: unit === "h"
|
|
120
|
+
? n * 3_600_000
|
|
121
|
+
: n * 86_400_000;
|
|
122
|
+
return new Date(now.getTime() - ms);
|
|
123
|
+
}
|
|
124
|
+
/**
|
|
125
|
+
* Resolve a dot-path expression like `triage.decision` against an item.
|
|
126
|
+
* Used by `--field <expr>`. Missing intermediate fields return `undefined`
|
|
127
|
+
* (silently — the caller renders `-` for missing values).
|
|
128
|
+
*/
|
|
129
|
+
function resolveField(item, expr) {
|
|
130
|
+
let current = item;
|
|
131
|
+
for (const part of expr.split(".")) {
|
|
132
|
+
if (current === undefined || current === null)
|
|
133
|
+
return undefined;
|
|
134
|
+
if (typeof current !== "object")
|
|
135
|
+
return undefined;
|
|
136
|
+
current = current[part];
|
|
137
|
+
}
|
|
138
|
+
return current;
|
|
139
|
+
}
|
|
140
|
+
function pad(value, width) {
|
|
141
|
+
if (value.length >= width)
|
|
142
|
+
return value.slice(0, width);
|
|
143
|
+
return value + " ".repeat(width - value.length);
|
|
144
|
+
}
|
|
145
|
+
function renderJsonValue(value) {
|
|
146
|
+
if (value === undefined || value === null)
|
|
147
|
+
return "-";
|
|
148
|
+
if (typeof value === "string")
|
|
149
|
+
return value;
|
|
150
|
+
return JSON.stringify(value);
|
|
151
|
+
}
|
|
152
|
+
/**
|
|
153
|
+
* Top-level dispatcher for `radar items <subcommand>`.
|
|
154
|
+
*/
|
|
155
|
+
export async function runItems(args, options = {}) {
|
|
156
|
+
const log = options.io?.log ?? ((m) => console.log(m));
|
|
157
|
+
const error = options.io?.error ?? ((m) => console.error(m));
|
|
158
|
+
const [sub, ...rest] = args;
|
|
159
|
+
if (!sub || sub === "-h" || sub === "--help" || sub === "help") {
|
|
160
|
+
printItemsHelp(log);
|
|
161
|
+
return sub ? 0 : 2;
|
|
162
|
+
}
|
|
163
|
+
switch (sub) {
|
|
164
|
+
case "list":
|
|
165
|
+
return runItemsList(rest, options);
|
|
166
|
+
default:
|
|
167
|
+
error(`items: unknown subcommand '${sub}'`);
|
|
168
|
+
printItemsHelp(error);
|
|
169
|
+
return 2;
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
/**
|
|
173
|
+
* Implementation of `radar items list`.
|
|
174
|
+
*/
|
|
175
|
+
export async function runItemsList(args, options = {}) {
|
|
176
|
+
const cwd = options.cwd ?? process.cwd();
|
|
177
|
+
const log = options.io?.log ?? ((m) => console.log(m));
|
|
178
|
+
const error = options.io?.error ?? ((m) => console.error(m));
|
|
179
|
+
let parsed;
|
|
180
|
+
try {
|
|
181
|
+
parsed = parseListArgs(args);
|
|
182
|
+
}
|
|
183
|
+
catch (e) {
|
|
184
|
+
error(`items list: ${e instanceof Error ? e.message : String(e)}`);
|
|
185
|
+
return 2;
|
|
186
|
+
}
|
|
187
|
+
if (parsed.help) {
|
|
188
|
+
printListHelp(log);
|
|
189
|
+
return 0;
|
|
190
|
+
}
|
|
191
|
+
// Validate --status against the schema enum early so typos like
|
|
192
|
+
// "triaged_reasearch" fail fast with a list of valid values.
|
|
193
|
+
let statusFilter;
|
|
194
|
+
if (parsed.status !== undefined) {
|
|
195
|
+
const v = ItemStatusSchema.safeParse(parsed.status);
|
|
196
|
+
if (!v.success) {
|
|
197
|
+
error(`items list: invalid --status '${parsed.status}' (expected: ${ItemStatusSchema.options.join(" | ")})`);
|
|
198
|
+
return 2;
|
|
199
|
+
}
|
|
200
|
+
statusFilter = v.data;
|
|
201
|
+
}
|
|
202
|
+
const itemsDir = join(cwd, "items");
|
|
203
|
+
if (!(await pathExists(itemsDir))) {
|
|
204
|
+
if (parsed.json) {
|
|
205
|
+
log("[]");
|
|
206
|
+
return 0;
|
|
207
|
+
}
|
|
208
|
+
log("items list: no items/ directory (run `radar init` first)");
|
|
209
|
+
return 0;
|
|
210
|
+
}
|
|
211
|
+
let items;
|
|
212
|
+
try {
|
|
213
|
+
items = await loadItems(itemsDir, parsed.source);
|
|
214
|
+
}
|
|
215
|
+
catch (e) {
|
|
216
|
+
error(`items list: ${e instanceof Error ? e.message : String(e)}`);
|
|
217
|
+
return 1;
|
|
218
|
+
}
|
|
219
|
+
// Apply filters in cheap-first order.
|
|
220
|
+
if (statusFilter) {
|
|
221
|
+
items = items.filter((i) => i.status === statusFilter);
|
|
222
|
+
}
|
|
223
|
+
if (parsed.triageGroup) {
|
|
224
|
+
items = items.filter((i) => i.triage?.group === parsed.triageGroup);
|
|
225
|
+
}
|
|
226
|
+
if (parsed.since) {
|
|
227
|
+
const cutoff = parseSinceCutoff(parsed.since);
|
|
228
|
+
if (!cutoff) {
|
|
229
|
+
error(`items list: invalid --since '${parsed.since}' (expected Ns | Nm | Nh | Nd)`);
|
|
230
|
+
return 2;
|
|
231
|
+
}
|
|
232
|
+
items = items.filter((i) => {
|
|
233
|
+
const ts = i.publishedAt ?? i.fetchedAt;
|
|
234
|
+
return new Date(ts) >= cutoff;
|
|
235
|
+
});
|
|
236
|
+
}
|
|
237
|
+
// Deterministic order: publishedAt desc (newest first), with fetchedAt as
|
|
238
|
+
// fallback and id as the final tie-breaker. Stable order matters for
|
|
239
|
+
// pipelines that diff the output across runs.
|
|
240
|
+
items.sort((a, b) => {
|
|
241
|
+
const aTs = a.publishedAt ?? a.fetchedAt;
|
|
242
|
+
const bTs = b.publishedAt ?? b.fetchedAt;
|
|
243
|
+
if (aTs !== bTs)
|
|
244
|
+
return bTs.localeCompare(aTs);
|
|
245
|
+
return a.id.localeCompare(b.id);
|
|
246
|
+
});
|
|
247
|
+
if (parsed.limit !== undefined && items.length > parsed.limit) {
|
|
248
|
+
items = items.slice(0, parsed.limit);
|
|
249
|
+
}
|
|
250
|
+
// Output dispatch.
|
|
251
|
+
if (parsed.field) {
|
|
252
|
+
for (const item of items) {
|
|
253
|
+
const v = resolveField(item, parsed.field);
|
|
254
|
+
log(renderJsonValue(v));
|
|
255
|
+
}
|
|
256
|
+
return 0;
|
|
257
|
+
}
|
|
258
|
+
if (parsed.json) {
|
|
259
|
+
log(JSON.stringify(items, null, 2));
|
|
260
|
+
return 0;
|
|
261
|
+
}
|
|
262
|
+
if (items.length === 0) {
|
|
263
|
+
log("items list: no items match the filter");
|
|
264
|
+
return 0;
|
|
265
|
+
}
|
|
266
|
+
// Default tabular output.
|
|
267
|
+
const headers = ["ID", "STATUS", "SOURCE", "PUBLISHED", "MATCHED", "TRIAGE"];
|
|
268
|
+
const rows = items.map((i) => [
|
|
269
|
+
i.id,
|
|
270
|
+
i.status,
|
|
271
|
+
i.sourceId,
|
|
272
|
+
i.publishedAt ?? i.fetchedAt,
|
|
273
|
+
i.matchedKeywords.join(",") || "-",
|
|
274
|
+
i.triage?.decision ?? "-",
|
|
275
|
+
]);
|
|
276
|
+
const widths = headers.map((h, idx) => Math.max(h.length, ...rows.map((r) => (r[idx] ?? "").length)));
|
|
277
|
+
log(headers.map((h, idx) => pad(h, widths[idx] ?? 0)).join(" "));
|
|
278
|
+
for (const row of rows) {
|
|
279
|
+
log(row.map((c, idx) => pad(c, widths[idx] ?? 0)).join(" "));
|
|
280
|
+
}
|
|
281
|
+
return 0;
|
|
282
|
+
}
|
|
283
|
+
export const itemsCommand = {
|
|
284
|
+
name: "items",
|
|
285
|
+
summary: "Inspect items in the workspace (list | ...)",
|
|
286
|
+
run: (args) => runItems(args),
|
|
287
|
+
};
|
|
288
|
+
//# sourceMappingURL=items.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"items.js","sourceRoot":"","sources":["../../src/cli/items.ts"],"names":[],"mappings":"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"}
|
package/dist/cli/research.d.ts
CHANGED
|
@@ -10,6 +10,27 @@ import type { Command } from "./index.js";
|
|
|
10
10
|
* cap also applies when the YAML is hand-edited.
|
|
11
11
|
*/
|
|
12
12
|
export declare const RESEARCH_BATCH_DEFAULT_MAX_ITEMS = 10;
|
|
13
|
+
/**
|
|
14
|
+
* Whitelist of `Item.status` values accepted by `radar research --batch
|
|
15
|
+
* --status <status>`.
|
|
16
|
+
*
|
|
17
|
+
* Constrained to the two "ready-to-research" statuses defined by the
|
|
18
|
+
* ADR-0008 / ADR-0018 state machine:
|
|
19
|
+
*
|
|
20
|
+
* - `detected` — legacy pre-triage path (`radar research` directly)
|
|
21
|
+
* - `triaged_research` — triage adapter promoted the item for research
|
|
22
|
+
* (ADR-0018 §W-B); workflow YAML generated by
|
|
23
|
+
* `radar workflow generate combined-with-triage`
|
|
24
|
+
* drives this branch (PR #249).
|
|
25
|
+
*
|
|
26
|
+
* Other statuses (`researched`, `reviewed`, `dismissed`, `triaged_digest`,
|
|
27
|
+
* `triaged_unsure`) are rejected with an explicit error rather than silently
|
|
28
|
+
* matching zero items, so a typo in scheduled YAML fails loud instead of
|
|
29
|
+
* decaying into a silent no-op (issue #250). `triaged_digest` requires
|
|
30
|
+
* `--digest` aggregation per group and is intentionally not a `--batch`
|
|
31
|
+
* single-item input; the workflow YAML walks groups explicitly.
|
|
32
|
+
*/
|
|
33
|
+
export declare const RESEARCH_BATCH_ALLOWED_STATUSES: readonly ["detected", "triaged_research"];
|
|
13
34
|
/** Sinks for the research command's user-facing output. Tests inject capturing sinks. */
|
|
14
35
|
export interface ResearchIO {
|
|
15
36
|
log?: (message: string) => void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"research.d.ts","sourceRoot":"","sources":["../../src/cli/research.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"research.d.ts","sourceRoot":"","sources":["../../src/cli/research.ts"],"names":[],"mappings":"AAyBA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAc5D,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAE1C;;;;;;;;GAQG;AACH,eAAO,MAAM,gCAAgC,KAAK,CAAC;AAEnD;;;;;;;;;;;;;;;;;;;GAmBG;AACH,eAAO,MAAM,+BAA+B,2CAA4C,CAAC;AAGzF,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;AA01BD,wBAAsB,WAAW,CAC/B,IAAI,EAAE,MAAM,EAAE,EACd,OAAO,GAAE,sBAA2B,GACnC,OAAO,CAAC,MAAM,CAAC,CAmLjB;AAED,eAAO,MAAM,eAAe,EAAE,OAI7B,CAAC"}
|