@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
package/dist/cli/dismiss.js
CHANGED
|
@@ -1,78 +1,259 @@
|
|
|
1
|
-
import { access } from "node:fs/promises";
|
|
2
1
|
import { join } from "node:path";
|
|
3
2
|
import { loadItems, saveItems } from "../core/items.js";
|
|
3
|
+
import { allowedTransitions, isValidTransition } from "../core/transitions.js";
|
|
4
|
+
/**
|
|
5
|
+
* Default hard-cap for `radar dismiss --batch`.
|
|
6
|
+
*
|
|
7
|
+
* Mirrors `RESEARCH_BATCH_DEFAULT_MAX_ITEMS` / `REVIEW_BATCH_DEFAULT_MAX_ITEMS`
|
|
8
|
+
* (ADR-0014 D3a). dismiss is agent-free so cost is not the driver, but pinning
|
|
9
|
+
* the same literal keeps the batch surface symmetric across commands: a user
|
|
10
|
+
* who learned `--max-items 10` from `research --batch` gets the same default
|
|
11
|
+
* here. A runaway `--backfill` that floods `detected` cannot be cleared in a
|
|
12
|
+
* single unbounded pass — the cap forces an explicit `--max-items` bump.
|
|
13
|
+
*/
|
|
14
|
+
export const DISMISS_BATCH_DEFAULT_MAX_ITEMS = 10;
|
|
15
|
+
/**
|
|
16
|
+
* Whitelist of `Item.status` values accepted by `radar dismiss --batch
|
|
17
|
+
* --status <status>` and by the single/multi-id path.
|
|
18
|
+
*
|
|
19
|
+
* Derived from the ADR-0008 / ADR-0018 state machine: an item may transition
|
|
20
|
+
* to `dismissed` only from `detected` or `triaged_unsure`
|
|
21
|
+
* (`isValidTransition(<status>, "dismissed")`). The two `triaged_research` /
|
|
22
|
+
* `triaged_digest` statuses are NOT dismissible — they flow to `researched`
|
|
23
|
+
* (a triage decision already promoted them), so dismissing them would
|
|
24
|
+
* contradict the classifier; the human path for those is `radar triage --redo`
|
|
25
|
+
* back to `detected` first.
|
|
26
|
+
*
|
|
27
|
+
* Constraining `--batch --status` to this same set means a typo in scheduled
|
|
28
|
+
* YAML fails loud with an explicit allow-list message instead of silently
|
|
29
|
+
* matching zero items (mirrors research/review #250).
|
|
30
|
+
*/
|
|
31
|
+
export const DISMISS_ALLOWED_STATUSES = [
|
|
32
|
+
"detected",
|
|
33
|
+
"triaged_unsure",
|
|
34
|
+
];
|
|
4
35
|
function parseArgs(args) {
|
|
5
|
-
const out = {};
|
|
36
|
+
const out = { itemIds: [] };
|
|
6
37
|
for (let i = 0; i < args.length; i++) {
|
|
7
38
|
const a = args[i];
|
|
8
39
|
if (a === "-h" || a === "--help") {
|
|
9
40
|
out.help = true;
|
|
10
41
|
continue;
|
|
11
42
|
}
|
|
43
|
+
if (a === "--batch") {
|
|
44
|
+
out.batch = true;
|
|
45
|
+
continue;
|
|
46
|
+
}
|
|
47
|
+
if (a === "--status") {
|
|
48
|
+
out.status = args[++i];
|
|
49
|
+
continue;
|
|
50
|
+
}
|
|
51
|
+
if (a === "--max-items") {
|
|
52
|
+
out.maxItems = args[++i];
|
|
53
|
+
continue;
|
|
54
|
+
}
|
|
55
|
+
if (a === "--filter-tags") {
|
|
56
|
+
out.filterTags = args[++i];
|
|
57
|
+
continue;
|
|
58
|
+
}
|
|
12
59
|
if (a?.startsWith("--")) {
|
|
13
60
|
throw new Error(`unknown option: ${a}`);
|
|
14
61
|
}
|
|
15
|
-
if (
|
|
16
|
-
out.
|
|
17
|
-
continue;
|
|
62
|
+
if (a !== undefined) {
|
|
63
|
+
out.itemIds.push(a);
|
|
18
64
|
}
|
|
19
|
-
throw new Error(`unexpected positional argument: ${a}`);
|
|
20
65
|
}
|
|
21
66
|
return out;
|
|
22
67
|
}
|
|
23
68
|
function printHelp(log) {
|
|
24
|
-
log("Usage:
|
|
69
|
+
log("Usage:");
|
|
70
|
+
log(" radar dismiss <item-id> [<item-id> ...]");
|
|
71
|
+
log(" radar dismiss --batch [--status <status>] [--max-items N] [--filter-tags <list>]");
|
|
25
72
|
log("");
|
|
26
73
|
log("Arguments:");
|
|
27
74
|
log(" <item-id> Item id (matches items/<sourceId>/<item-id>.yaml)");
|
|
75
|
+
log(" Pass 2 or more ids to dismiss them in one call.");
|
|
76
|
+
log(" Omit positional ids with --batch — items are discovered.");
|
|
77
|
+
log("");
|
|
78
|
+
log("Options:");
|
|
79
|
+
log(" --batch Dismiss every item matching --status (and --filter-tags)");
|
|
80
|
+
log(` respecting the --max-items hard-cap (default: ${DISMISS_BATCH_DEFAULT_MAX_ITEMS}).`);
|
|
81
|
+
log(" --status <status> Batch-mode filter: detected | triaged_unsure (default: detected).");
|
|
82
|
+
log(" Only these two statuses can transition to `dismissed`");
|
|
83
|
+
log(" per the ADR-0008 / ADR-0018 state machine; other values");
|
|
84
|
+
log(" are rejected.");
|
|
85
|
+
log(` --max-items N Batch-mode hard-cap on processed items (default: ${DISMISS_BATCH_DEFAULT_MAX_ITEMS}).`);
|
|
86
|
+
log(" Excess items are dropped and announced via warn() so a runaway");
|
|
87
|
+
log(" --backfill cannot blow the cap from inside a workflow.");
|
|
88
|
+
log(" --filter-tags <list> Batch-mode comma-separated allow-list matched against");
|
|
89
|
+
log(" each item's matchedKeywords (case-insensitive). Default: all.");
|
|
28
90
|
log("");
|
|
29
|
-
log("Transitions the item's status
|
|
30
|
-
log("
|
|
91
|
+
log("Transitions the item's status to `dismissed` (ADR-0008). Valid from `detected`");
|
|
92
|
+
log("or `triaged_unsure`; items in `researched` / `reviewed` / `dismissed` /");
|
|
93
|
+
log("`triaged_research` / `triaged_digest` cannot be dismissed.");
|
|
94
|
+
log("");
|
|
95
|
+
log("Inverse: `radar undismiss <item-id> [--force]` (ADR-0018 §W6).");
|
|
31
96
|
}
|
|
32
|
-
|
|
97
|
+
/**
|
|
98
|
+
* Locate `items/<sourceId>/<item-id>.yaml` files for the given ids across all
|
|
99
|
+
* source directories. `loadItems` walks every source subdir, so the caller
|
|
100
|
+
* only needs `<item-id>` (sourceId is inferred from the loaded item).
|
|
101
|
+
*
|
|
102
|
+
* Returns the matched items in the requested order, or `{ missing }` for the
|
|
103
|
+
* first id that has no matching file.
|
|
104
|
+
*/
|
|
105
|
+
async function findItems(cwd, itemIds) {
|
|
106
|
+
const itemsDir = join(cwd, "items");
|
|
107
|
+
const all = await loadItems(itemsDir);
|
|
108
|
+
const byId = new Map(all.map((i) => [i.id, i]));
|
|
109
|
+
const matched = [];
|
|
110
|
+
for (const id of itemIds) {
|
|
111
|
+
const m = byId.get(id);
|
|
112
|
+
if (!m)
|
|
113
|
+
return { missing: id };
|
|
114
|
+
matched.push(m);
|
|
115
|
+
}
|
|
116
|
+
return { items: matched };
|
|
117
|
+
}
|
|
118
|
+
function parseMaxItems(raw, error) {
|
|
119
|
+
if (raw === undefined)
|
|
120
|
+
return DISMISS_BATCH_DEFAULT_MAX_ITEMS;
|
|
121
|
+
if (!/^[0-9]+$/.test(raw)) {
|
|
122
|
+
error(`dismiss: invalid --max-items '${raw}' (expected positive integer)`);
|
|
123
|
+
return null;
|
|
124
|
+
}
|
|
125
|
+
const n = Number.parseInt(raw, 10);
|
|
126
|
+
if (!Number.isFinite(n) || n <= 0) {
|
|
127
|
+
error(`dismiss: invalid --max-items '${raw}' (must be > 0)`);
|
|
128
|
+
return null;
|
|
129
|
+
}
|
|
130
|
+
return n;
|
|
131
|
+
}
|
|
132
|
+
function parseFilterTags(raw) {
|
|
133
|
+
if (raw === undefined || raw.trim() === "")
|
|
134
|
+
return [];
|
|
135
|
+
return [
|
|
136
|
+
...new Set(raw
|
|
137
|
+
.split(",")
|
|
138
|
+
.map((s) => s.trim().toLowerCase())
|
|
139
|
+
.filter((s) => s.length > 0)),
|
|
140
|
+
];
|
|
141
|
+
}
|
|
142
|
+
/**
|
|
143
|
+
* Transition a resolved set of items to `dismissed` and persist them.
|
|
144
|
+
*
|
|
145
|
+
* Each item is re-checked against `isValidTransition(status, "dismissed")` —
|
|
146
|
+
* the ADR-0008 / ADR-0018 state machine SSoT — so a stale id (e.g. an item that
|
|
147
|
+
* moved past `detected` between discovery and write) is rejected with a
|
|
148
|
+
* user-friendly message rather than corrupted. The whole batch is validated
|
|
149
|
+
* before any write, so a single offending id fails the call without leaving a
|
|
150
|
+
* partial mutation behind.
|
|
151
|
+
*/
|
|
152
|
+
async function dismissItems(cwd, items, log, error) {
|
|
153
|
+
const offenders = items.filter((i) => !isValidTransition(i.status, "dismissed"));
|
|
154
|
+
if (offenders.length > 0) {
|
|
155
|
+
for (const item of offenders) {
|
|
156
|
+
error(`dismiss: item '${item.id}' is in status '${item.status}', expected one of ${DISMISS_ALLOWED_STATUSES.join(" | ")} (dismiss transitions to 'dismissed' only from these; ADR-0008 / ADR-0018). Valid next statuses for '${item.status}': ${allowedTransitions(item.status).join(", ") || "(none)"}`);
|
|
157
|
+
}
|
|
158
|
+
return 1;
|
|
159
|
+
}
|
|
160
|
+
const updated = items.map((item) => ({ ...item, status: "dismissed" }));
|
|
33
161
|
try {
|
|
34
|
-
await
|
|
35
|
-
return true;
|
|
162
|
+
await saveItems(join(cwd, "items"), updated);
|
|
36
163
|
}
|
|
37
|
-
catch {
|
|
38
|
-
|
|
164
|
+
catch (e) {
|
|
165
|
+
error(`dismiss: failed to update item status: ${e instanceof Error ? e.message : String(e)}`);
|
|
166
|
+
return 1;
|
|
39
167
|
}
|
|
168
|
+
for (const item of updated) {
|
|
169
|
+
log(`dismiss: items/${item.sourceId}/${item.id}.yaml status -> dismissed`);
|
|
170
|
+
}
|
|
171
|
+
return 0;
|
|
40
172
|
}
|
|
41
173
|
/**
|
|
42
|
-
*
|
|
174
|
+
* Implementation of `radar dismiss --batch` (#259).
|
|
43
175
|
*
|
|
44
|
-
* Mirrors
|
|
45
|
-
*
|
|
46
|
-
*
|
|
176
|
+
* Mirrors `research --batch` shape:
|
|
177
|
+
* 1. Validate `--status` against `DISMISS_ALLOWED_STATUSES`.
|
|
178
|
+
* 2. Load items, keep those whose status matches.
|
|
179
|
+
* 3. Apply `--filter-tags` allow-list (case-insensitive) against
|
|
180
|
+
* `matchedKeywords`.
|
|
181
|
+
* 4. Cap at `--max-items` (drops excess + warns).
|
|
182
|
+
* 5. Transition the selected items to `dismissed` in one write.
|
|
183
|
+
*
|
|
184
|
+
* Designed to absorb the large `detected` backlog produced by
|
|
185
|
+
* `radar watch run --backfill` without the user shelling out a per-id loop.
|
|
47
186
|
*/
|
|
48
|
-
async function
|
|
187
|
+
async function runDismissBatch(parsed, cwd, log, warn, error) {
|
|
188
|
+
if (parsed.itemIds.length > 0) {
|
|
189
|
+
error(`dismiss: --batch is incompatible with positional <item-id> arguments (got ${parsed.itemIds.length})`);
|
|
190
|
+
return 2;
|
|
191
|
+
}
|
|
192
|
+
const rawStatus = parsed.status ?? "detected";
|
|
193
|
+
if (!DISMISS_ALLOWED_STATUSES.includes(rawStatus)) {
|
|
194
|
+
error(`dismiss: invalid --status '${rawStatus}' (expected: ${DISMISS_ALLOWED_STATUSES.join(" | ")})`);
|
|
195
|
+
return 2;
|
|
196
|
+
}
|
|
197
|
+
const status = rawStatus;
|
|
198
|
+
const maxItems = parseMaxItems(parsed.maxItems, error);
|
|
199
|
+
if (maxItems === null)
|
|
200
|
+
return 2;
|
|
201
|
+
const filterTags = parseFilterTags(parsed.filterTags);
|
|
49
202
|
const itemsDir = join(cwd, "items");
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
203
|
+
const all = await loadItems(itemsDir);
|
|
204
|
+
const matches = all
|
|
205
|
+
.filter((it) => it.status === status)
|
|
206
|
+
.filter((it) => {
|
|
207
|
+
if (filterTags.length === 0)
|
|
208
|
+
return true;
|
|
209
|
+
const haystack = new Set(it.matchedKeywords.map((k) => k.toLowerCase()));
|
|
210
|
+
return filterTags.some((t) => haystack.has(t));
|
|
211
|
+
})
|
|
212
|
+
.sort((a, b) => {
|
|
213
|
+
const ap = a.publishedAt ?? a.fetchedAt;
|
|
214
|
+
const bp = b.publishedAt ?? b.fetchedAt;
|
|
215
|
+
if (ap !== bp)
|
|
216
|
+
return ap < bp ? -1 : 1;
|
|
217
|
+
return a.id.localeCompare(b.id);
|
|
218
|
+
});
|
|
219
|
+
if (matches.length === 0) {
|
|
220
|
+
log(`dismiss: no items matched --batch filters (status=${status}${filterTags.length > 0 ? `, tags=${filterTags.join(",")}` : ""})`);
|
|
221
|
+
return 0;
|
|
222
|
+
}
|
|
223
|
+
let selected = matches;
|
|
224
|
+
if (matches.length > maxItems) {
|
|
225
|
+
const dropped = matches.length - maxItems;
|
|
226
|
+
warn(`dismiss: --max-items ${maxItems} cap reached; dropping ${dropped} excess item(s) (matched ${matches.length})`);
|
|
227
|
+
selected = matches.slice(0, maxItems);
|
|
228
|
+
}
|
|
229
|
+
log(`dismiss: --batch will process ${selected.length} item(s) (status=${status}${filterTags.length > 0 ? `, tags=${filterTags.join(",")}` : ""}, cap=${maxItems})`);
|
|
230
|
+
const code = await dismissItems(cwd, selected, log, error);
|
|
231
|
+
if (code !== 0)
|
|
232
|
+
return code;
|
|
233
|
+
log(`dismiss: --batch completed ${selected.length} item(s)`);
|
|
234
|
+
return 0;
|
|
57
235
|
}
|
|
58
236
|
/**
|
|
59
|
-
* Implementation of `radar dismiss <item-id
|
|
237
|
+
* Implementation of `radar dismiss <item-id> [<item-id> ...]` and
|
|
238
|
+
* `radar dismiss --batch` (#259).
|
|
60
239
|
*
|
|
61
|
-
* Triggers the `detected → dismissed` state transition
|
|
62
|
-
* is intentionally agent-free: it only
|
|
63
|
-
* so users can prune noise from
|
|
240
|
+
* Triggers the `detected | triaged_unsure → dismissed` state transition
|
|
241
|
+
* (ADR-0008 / ADR-0018). The command is intentionally agent-free: it only
|
|
242
|
+
* mutates `items/<sourceId>/<item-id>.yaml` so users can prune noise from
|
|
243
|
+
* `watch run` output (including a `--backfill` backlog) without spending agent
|
|
64
244
|
* tokens.
|
|
65
245
|
*
|
|
66
246
|
* Flow:
|
|
67
247
|
* 1. Parse + validate args.
|
|
68
|
-
* 2.
|
|
69
|
-
*
|
|
70
|
-
*
|
|
248
|
+
* 2. `--batch`: discover items by `--status` / `--filter-tags`.
|
|
249
|
+
* Otherwise: resolve the positional `<item-id>` arguments.
|
|
250
|
+
* 3. Reject any item not in a dismissible status (state-machine guard).
|
|
71
251
|
* 4. Write back with `status: dismissed`.
|
|
72
252
|
*/
|
|
73
253
|
export async function runDismiss(args, options = {}) {
|
|
74
254
|
const cwd = options.cwd ?? process.cwd();
|
|
75
255
|
const log = options.io?.log ?? ((m) => console.log(m));
|
|
256
|
+
const warn = options.io?.warn ?? ((m) => console.warn(m));
|
|
76
257
|
const error = options.io?.error ?? ((m) => console.error(m));
|
|
77
258
|
let parsed;
|
|
78
259
|
try {
|
|
@@ -86,37 +267,41 @@ export async function runDismiss(args, options = {}) {
|
|
|
86
267
|
printHelp(log);
|
|
87
268
|
return 0;
|
|
88
269
|
}
|
|
89
|
-
if (
|
|
90
|
-
|
|
91
|
-
|
|
270
|
+
if (parsed.batch) {
|
|
271
|
+
return runDismissBatch(parsed, cwd, log, warn, error);
|
|
272
|
+
}
|
|
273
|
+
// Surface the batch-only flags when used outside `--batch`; matches
|
|
274
|
+
// research/review's "no silent ignore" stance so a typo does not become a
|
|
275
|
+
// no-op.
|
|
276
|
+
if (parsed.status !== undefined) {
|
|
277
|
+
error("dismiss: --status requires --batch");
|
|
92
278
|
return 2;
|
|
93
279
|
}
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
return 1;
|
|
280
|
+
if (parsed.maxItems !== undefined) {
|
|
281
|
+
error("dismiss: --max-items requires --batch");
|
|
282
|
+
return 2;
|
|
98
283
|
}
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
return 1;
|
|
284
|
+
if (parsed.filterTags !== undefined) {
|
|
285
|
+
error("dismiss: --filter-tags requires --batch");
|
|
286
|
+
return 2;
|
|
103
287
|
}
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
await saveItems(join(cwd, "items"), [updated]);
|
|
288
|
+
if (parsed.itemIds.length === 0) {
|
|
289
|
+
error("dismiss: missing <item-id>");
|
|
290
|
+
printHelp(error);
|
|
291
|
+
return 2;
|
|
109
292
|
}
|
|
110
|
-
|
|
111
|
-
|
|
293
|
+
// De-dupe positional ids so `radar dismiss a a` does not double-process.
|
|
294
|
+
const uniqueIds = [...new Set(parsed.itemIds)];
|
|
295
|
+
const found = await findItems(cwd, uniqueIds);
|
|
296
|
+
if ("missing" in found) {
|
|
297
|
+
error(`dismiss: item '${found.missing}' not found under items/`);
|
|
112
298
|
return 1;
|
|
113
299
|
}
|
|
114
|
-
|
|
115
|
-
return 0;
|
|
300
|
+
return dismissItems(cwd, found.items, log, error);
|
|
116
301
|
}
|
|
117
302
|
export const dismissCommand = {
|
|
118
303
|
name: "dismiss",
|
|
119
|
-
summary: "Mark
|
|
304
|
+
summary: "Mark detected items as dismissed (single id, multiple ids, or --batch)",
|
|
120
305
|
run: (args) => runDismiss(args),
|
|
121
306
|
};
|
|
122
307
|
//# sourceMappingURL=dismiss.js.map
|
package/dist/cli/dismiss.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dismiss.js","sourceRoot":"","sources":["../../src/cli/dismiss.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"dismiss.js","sourceRoot":"","sources":["../../src/cli/dismiss.ts"],"names":[],"mappings":"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"}
|
package/dist/cli/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"AAgBA,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;AAwCD,wBAAsB,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAoBvD"}
|
package/dist/cli/index.js
CHANGED
|
@@ -4,9 +4,12 @@ import { fileURLToPath } from "node:url";
|
|
|
4
4
|
import { dismissCommand } from "./dismiss.js";
|
|
5
5
|
import { doctorCommand } from "./doctor.js";
|
|
6
6
|
import { initCommand } from "./init.js";
|
|
7
|
+
import { itemsCommand } from "./items.js";
|
|
7
8
|
import { researchCommand } from "./research.js";
|
|
8
9
|
import { reviewCommand } from "./review.js";
|
|
9
10
|
import { sourceCommand } from "./source.js";
|
|
11
|
+
import { triageCommand } from "./triage.js";
|
|
12
|
+
import { undismissCommand } from "./undismiss.js";
|
|
10
13
|
import { updateCommand } from "./update.js";
|
|
11
14
|
import { watchCommand } from "./watch.js";
|
|
12
15
|
import { workflowCommand } from "./workflow.js";
|
|
@@ -15,7 +18,10 @@ const commands = [
|
|
|
15
18
|
sourceCommand,
|
|
16
19
|
watchCommand,
|
|
17
20
|
researchCommand,
|
|
21
|
+
triageCommand,
|
|
18
22
|
dismissCommand,
|
|
23
|
+
undismissCommand,
|
|
24
|
+
itemsCommand,
|
|
19
25
|
reviewCommand,
|
|
20
26
|
updateCommand,
|
|
21
27
|
doctorCommand,
|
|
@@ -35,7 +41,7 @@ function printHelp() {
|
|
|
35
41
|
console.log("");
|
|
36
42
|
console.log("Commands:");
|
|
37
43
|
for (const c of commands) {
|
|
38
|
-
console.log(` ${c.name.padEnd(
|
|
44
|
+
console.log(` ${c.name.padEnd(12)} ${c.summary}`);
|
|
39
45
|
}
|
|
40
46
|
console.log("");
|
|
41
47
|
console.log("Options:");
|
package/dist/cli/index.js.map
CHANGED
|
@@ -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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"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import type { Command } from "./index.js";
|
|
2
|
+
/**
|
|
3
|
+
* `radar items list` (ADR-0018 PR-3).
|
|
4
|
+
*
|
|
5
|
+
* Lists items from `items/` with composable filters. Designed both for
|
|
6
|
+
* humans (default tabular output) and for piping into workflow generators
|
|
7
|
+
* (`--json` / `--field`).
|
|
8
|
+
*
|
|
9
|
+
* Filter semantics:
|
|
10
|
+
*
|
|
11
|
+
* - `--status <status>`: exact match on `Item.status`. Multiple statuses
|
|
12
|
+
* are not supported; pipe through `grep -E` if needed.
|
|
13
|
+
* - `--source <id>`: matches `Item.sourceId`.
|
|
14
|
+
* - `--triage-group <name>`: matches `Item.triage.group`. Used by the
|
|
15
|
+
* digest workflow to gather every item in a group.
|
|
16
|
+
* - `--since <duration>`: cutoff in `Nd` / `Nh` form, applied to
|
|
17
|
+
* `publishedAt ?? fetchedAt`. Items older than the cutoff are dropped.
|
|
18
|
+
* - `--limit N`: caps result count after filtering.
|
|
19
|
+
*
|
|
20
|
+
* Output:
|
|
21
|
+
*
|
|
22
|
+
* - default: fixed-width table (id, status, source, publishedAt,
|
|
23
|
+
* matched_keywords, triage.decision when present)
|
|
24
|
+
* - `--json`: JSON array (one object per item)
|
|
25
|
+
* - `--field <expr>`: print one item field per row (used for piping)
|
|
26
|
+
*/
|
|
27
|
+
export interface ItemsIO {
|
|
28
|
+
log?: (message: string) => void;
|
|
29
|
+
error?: (message: string) => void;
|
|
30
|
+
}
|
|
31
|
+
export interface ItemsCommandOptions {
|
|
32
|
+
cwd?: string;
|
|
33
|
+
io?: ItemsIO;
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Top-level dispatcher for `radar items <subcommand>`.
|
|
37
|
+
*/
|
|
38
|
+
export declare function runItems(args: string[], options?: ItemsCommandOptions): Promise<number>;
|
|
39
|
+
/**
|
|
40
|
+
* Implementation of `radar items list`.
|
|
41
|
+
*/
|
|
42
|
+
export declare function runItemsList(args: string[], options?: ItemsCommandOptions): Promise<number>;
|
|
43
|
+
export declare const itemsCommand: Command;
|
|
44
|
+
//# sourceMappingURL=items.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"items.d.ts","sourceRoot":"","sources":["../../src/cli/items.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAE1C;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAEH,MAAM,WAAW,OAAO;IACtB,GAAG,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IAChC,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;CACnC;AAED,MAAM,WAAW,mBAAmB;IAClC,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,EAAE,CAAC,EAAE,OAAO,CAAC;CACd;AA6JD;;GAEG;AACH,wBAAsB,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,OAAO,GAAE,mBAAwB,GAAG,OAAO,CAAC,MAAM,CAAC,CAiBjG;AAED;;GAEG;AACH,wBAAsB,YAAY,CAChC,IAAI,EAAE,MAAM,EAAE,EACd,OAAO,GAAE,mBAAwB,GAChC,OAAO,CAAC,MAAM,CAAC,CAoHjB;AAED,eAAO,MAAM,YAAY,EAAE,OAI1B,CAAC"}
|