@ozzylabs/feedradar 0.1.0 → 0.1.1
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 +106 -0
- package/README.md +53 -51
- package/dist/index.js +0 -0
- package/package.json +1 -1
package/README.ja.md
ADDED
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
[English](README.md) | 日本語
|
|
2
|
+
|
|
3
|
+
# FeedRadar
|
|
4
|
+
|
|
5
|
+
> **Status: alpha** — Phase 1-6 完了(7 サブコマンド + 4 agent × 4 source kind + cron 雛形 + [ADR-0009](./docs/adr/0009-untrusted-external-content-handling.md) Adopt 策 + `@ozzylabs/feedradar` v0.1.0 を npm 公開)。以降のリリースは sibling-style `release.yaml` で OIDC Trusted Publishers 自動 publish(手順: [docs/release.md](./docs/release.md))。
|
|
6
|
+
|
|
7
|
+
ブログ・公式アップデート・リリースフィードを監視し、キーワードヒットを 4 種の AI エージェント (Claude Code / Codex / Gemini / Copilot) に渡して **Markdown 調査レポートを書かせる CLI**。
|
|
8
|
+
|
|
9
|
+
## 解決する課題
|
|
10
|
+
|
|
11
|
+
複数の公式ブログ・ドキュメント・リリースノートを横断的に追い、変更点を要約する作業は AI エージェントとの相性が良いが、ソース管理・差分検出・テンプレート適用・複数エージェントへの委譲を毎回手作業で組むのは煩雑になる。`radar` はこのループを CLI として固定化し、ユーザーの調査ディレクトリに Markdown レポートを蓄積する。
|
|
12
|
+
|
|
13
|
+
## 主な特徴
|
|
14
|
+
|
|
15
|
+
- **多エージェント対応**: Claude Code / Codex CLI / Gemini CLI / GitHub Copilot CLI を adapter 経由で切り替え。
|
|
16
|
+
- **複数フィード種別**: RSS / HTML スクレイプ / GitHub Releases / npm registry を同一の `Source` 抽象で扱う。
|
|
17
|
+
- **ユーザー側データ管理**: `sources/` `items/` `state/` `research/` `templates/` は **ユーザーの任意ディレクトリ** に置き、本パッケージは engine のみを提供する。
|
|
18
|
+
- **npm 単体配布**: OIDC Trusted Publishers で `@ozzylabs/feedradar` を npm 配布。
|
|
19
|
+
|
|
20
|
+
## インストール
|
|
21
|
+
|
|
22
|
+
```bash
|
|
23
|
+
npm i -g @ozzylabs/feedradar
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
開発中は本リポを clone し、`pnpm install && pnpm run build` で `dist/index.js` を生成して `node dist/index.js <command>` で起動する。
|
|
27
|
+
|
|
28
|
+
## 使い方
|
|
29
|
+
|
|
30
|
+
```bash
|
|
31
|
+
# クイックスタート (anthropics/anthropic-sdk-python の GitHub Releases を監視)
|
|
32
|
+
radar init
|
|
33
|
+
radar source add anthropic-sdk \
|
|
34
|
+
--kind github-releases \
|
|
35
|
+
--url https://github.com/anthropics/anthropic-sdk-python \
|
|
36
|
+
--keywords "feat,fix,release"
|
|
37
|
+
radar watch run
|
|
38
|
+
radar research <item-id>
|
|
39
|
+
|
|
40
|
+
# その他のサブコマンド
|
|
41
|
+
radar source list # ソース一覧
|
|
42
|
+
radar dismiss <item-id> # 不要 item を dismissed に遷移(LLM 不要)
|
|
43
|
+
radar review <research-id> # レポートを別エージェントで相互レビュー
|
|
44
|
+
radar update <research-id> # 既存レポートを最新 item で更新(v+1)
|
|
45
|
+
radar --help # ヘルプ
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
全 7 サブコマンドが実装済み。詳細は [docs/user-guide.md](./docs/user-guide.md) を参照。
|
|
49
|
+
|
|
50
|
+
## 開発
|
|
51
|
+
|
|
52
|
+
```bash
|
|
53
|
+
pnpm install # 依存関係インストール
|
|
54
|
+
pnpm run build # tsc でビルド(dist/)
|
|
55
|
+
pnpm run typecheck # 型チェック
|
|
56
|
+
pnpm run test # vitest run
|
|
57
|
+
|
|
58
|
+
# ローカルで CLI を呼ぶ場合 (build 後)
|
|
59
|
+
pnpm radar --help # = node dist/index.js --help (package.json scripts の alias)
|
|
60
|
+
node dist/index.js --help # 等価
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
> ローカルの `pnpm radar <cmd>` は `package.json` の `scripts.radar`(`node dist/index.js`)を呼ぶ alias で、事前に `pnpm run build` で `dist/index.js` を生成しておく必要がある。配布版 (`npm i -g @ozzylabs/feedradar`) でユーザーが直接叩く `radar <cmd>` は `package.json` の `bin.radar` 経由で、こちらは publish 済み `dist/` を参照するため build 不要。両者は同名だがレイヤーが違う。なお `pnpm --prefix <path> radar <cmd>` は CWD を `<path>` に切り替えてから scripts を実行する仕様なので、別ディレクトリ(例えば smoke test 用の空ワークスペース)で scripts alias を呼びたい場合は `pnpm --prefix` ではなく `node <repo-root>/dist/index.js <cmd>` を直接呼ぶこと(前者はリポ root に対して `init` 等が走る事故になる)。
|
|
64
|
+
|
|
65
|
+
## アーキテクチャ概要
|
|
66
|
+
|
|
67
|
+
```text
|
|
68
|
+
src/
|
|
69
|
+
index.ts CLI entry point (#!/usr/bin/env node)
|
|
70
|
+
cli/ init / source / watch / research / dismiss / review / update
|
|
71
|
+
core/
|
|
72
|
+
watcher.ts source → adapter → items
|
|
73
|
+
filter.ts keyword / excludeKeyword
|
|
74
|
+
items.ts items の load / save
|
|
75
|
+
templates.ts research テンプレートの読み込み
|
|
76
|
+
state.ts state/<sourceId>.yaml の load / save
|
|
77
|
+
config.ts radar.config.yaml の load / 検証
|
|
78
|
+
injection-detector.ts prompt injection regex pre-filter (ADR-0009 M1a)
|
|
79
|
+
feeds/ rss / html / github-releases / npm-registry
|
|
80
|
+
agents/ 4 CLI adapters(claude-code / codex-cli / gemini-cli / copilot)
|
|
81
|
+
schemas/ Zod スキーマ(Source / Item / State / Research)
|
|
82
|
+
skills/ engine SKILL bundle (research / review / update; init で .agents/skills/ に配布)
|
|
83
|
+
claude-skills/ Claude Code 用 slash-command 雛形 (init で .claude/skills/ に配布)
|
|
84
|
+
gemini-commands/ Gemini CLI 用 TOML slash-command 雛形 (init で .gemini/commands/ に配布)
|
|
85
|
+
templates/ workspace 既定テンプレート (init で templates/ に配布)
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
## ドキュメント
|
|
89
|
+
|
|
90
|
+
- [docs/architecture.md](./docs/architecture.md) — システム全体図 / モジュール責務 / データフロー / Phase 別スコープ
|
|
91
|
+
- [docs/user-guide.md](./docs/user-guide.md) — インストール / クイックスタート / コマンド仕様
|
|
92
|
+
- [docs/release.md](./docs/release.md) — リリース手順(初回手動 publish + Trusted Publisher 登録 + 以降の OIDC 自動化)
|
|
93
|
+
- [docs/adr/](./docs/adr/README.md) — FeedRadar 内部の設計判断記録(Agent / Source / Output / Schedule / User Data / Filter / Skill Bundling / Status State Machine / Untrusted External Content Handling)
|
|
94
|
+
|
|
95
|
+
## 規約
|
|
96
|
+
|
|
97
|
+
- **言語**: TypeScript ESM / Node.js 22+ / pnpm
|
|
98
|
+
- **コミット**: Conventional Commits(`commitlint` で強制)
|
|
99
|
+
- **ブランチ**: GitHub Flow(`main` + feature branch、squash merge のみ)
|
|
100
|
+
- **配布**: npm `@ozzylabs/feedradar`、OIDC Trusted Publishers(`NPM_TOKEN` は使わない)
|
|
101
|
+
- **共通設定**: [`ozzy-labs/commons`](https://github.com/ozzy-labs/commons) から `sync.sh` で配布。
|
|
102
|
+
- **共通スキル**: [`ozzy-labs/skills`](https://github.com/ozzy-labs/skills) を `@ozzylabs/skills` Renovate preset で取り込み。
|
|
103
|
+
|
|
104
|
+
## License
|
|
105
|
+
|
|
106
|
+
MIT — see [LICENSE](./LICENSE).
|
package/README.md
CHANGED
|
@@ -1,33 +1,34 @@
|
|
|
1
|
+
English | [日本語](README.ja.md)
|
|
2
|
+
|
|
1
3
|
# FeedRadar
|
|
2
4
|
|
|
3
|
-
> **Status: alpha** —
|
|
5
|
+
> **Status: alpha** — Phases 1-6 complete (7 subcommands × 4 agent adapters × 4 feed kinds + cron scaffolding + [ADR-0009](./docs/adr/0009-untrusted-external-content-handling.md) adoption + `@ozzylabs/feedradar` v0.1.0 published to npm). Subsequent releases publish automatically via OIDC Trusted Publishers in the sibling-style `release.yaml` (procedure: [docs/release.md](./docs/release.md)).
|
|
4
6
|
|
|
5
|
-
|
|
7
|
+
CLI that watches blogs, official update streams, and release feeds, then hands keyword hits to one of four AI agents (Claude Code / Codex / Gemini / Copilot) to **produce Markdown research reports**.
|
|
6
8
|
|
|
7
|
-
##
|
|
9
|
+
## Problem it solves
|
|
8
10
|
|
|
9
|
-
|
|
11
|
+
Tracking multiple official blogs, docs, and release notes — and summarizing what actually changed — is a good fit for AI agents, but wiring up source management, diffing, template application, and multi-agent delegation by hand every time gets tedious. `radar` fixes that loop in a CLI and accumulates Markdown reports in your research directory.
|
|
10
12
|
|
|
11
|
-
##
|
|
13
|
+
## Highlights
|
|
12
14
|
|
|
13
|
-
-
|
|
14
|
-
-
|
|
15
|
-
-
|
|
16
|
-
- **npm
|
|
15
|
+
- **Multi-agent**: switch between Claude Code / Codex CLI / Gemini CLI / GitHub Copilot CLI via adapters.
|
|
16
|
+
- **Multiple feed kinds**: RSS / HTML scraping / GitHub Releases / npm registry are all driven through the same `Source` abstraction.
|
|
17
|
+
- **User-owned data**: `sources/` `items/` `state/` `research/` `templates/` live in **your workspace directory**. This package ships only the engine.
|
|
18
|
+
- **Single npm package**: distributed as `@ozzylabs/feedradar` via OIDC Trusted Publishers.
|
|
17
19
|
|
|
18
|
-
##
|
|
20
|
+
## Install
|
|
19
21
|
|
|
20
22
|
```bash
|
|
21
|
-
# 初版公開後に有効化される
|
|
22
23
|
npm i -g @ozzylabs/feedradar
|
|
23
24
|
```
|
|
24
25
|
|
|
25
|
-
|
|
26
|
+
While developing locally, clone this repo and run `pnpm install && pnpm run build` to produce `dist/index.js`, then invoke `node dist/index.js <command>`.
|
|
26
27
|
|
|
27
|
-
##
|
|
28
|
+
## Usage
|
|
28
29
|
|
|
29
30
|
```bash
|
|
30
|
-
#
|
|
31
|
+
# Quickstart (watch anthropics/anthropic-sdk-python GitHub Releases)
|
|
31
32
|
radar init
|
|
32
33
|
radar source add anthropic-sdk \
|
|
33
34
|
--kind github-releases \
|
|
@@ -36,32 +37,32 @@ radar source add anthropic-sdk \
|
|
|
36
37
|
radar watch run
|
|
37
38
|
radar research <item-id>
|
|
38
39
|
|
|
39
|
-
#
|
|
40
|
-
radar source list #
|
|
41
|
-
radar dismiss <item-id> #
|
|
42
|
-
radar review <research-id> #
|
|
43
|
-
radar update <research-id> #
|
|
44
|
-
radar --help #
|
|
40
|
+
# Other subcommands
|
|
41
|
+
radar source list # list sources
|
|
42
|
+
radar dismiss <item-id> # move an item to dismissed (no LLM)
|
|
43
|
+
radar review <research-id> # cross-review a report with a different agent
|
|
44
|
+
radar update <research-id> # refresh an existing report against the latest item (v+1)
|
|
45
|
+
radar --help # help
|
|
45
46
|
```
|
|
46
47
|
|
|
47
|
-
|
|
48
|
+
All 7 subcommands are implemented. See [docs/user-guide.md](./docs/user-guide.md) for the full spec.
|
|
48
49
|
|
|
49
|
-
##
|
|
50
|
+
## Development
|
|
50
51
|
|
|
51
52
|
```bash
|
|
52
|
-
pnpm install #
|
|
53
|
-
pnpm run build # tsc
|
|
54
|
-
pnpm run typecheck #
|
|
53
|
+
pnpm install # install dependencies
|
|
54
|
+
pnpm run build # tsc build (dist/)
|
|
55
|
+
pnpm run typecheck # type check
|
|
55
56
|
pnpm run test # vitest run
|
|
56
57
|
|
|
57
|
-
#
|
|
58
|
-
pnpm radar --help # = node dist/index.js --help (package.json scripts
|
|
59
|
-
node dist/index.js --help #
|
|
58
|
+
# Invoking the CLI locally (after build)
|
|
59
|
+
pnpm radar --help # = node dist/index.js --help (package.json scripts alias)
|
|
60
|
+
node dist/index.js --help # equivalent
|
|
60
61
|
```
|
|
61
62
|
|
|
62
|
-
>
|
|
63
|
+
> The local `pnpm radar <cmd>` form is the `package.json` `scripts.radar` alias (`node dist/index.js`) and requires you to have run `pnpm run build` first to produce `dist/index.js`. The distributed `radar <cmd>` that end users invoke after `npm i -g @ozzylabs/feedradar` goes through `package.json` `bin.radar`, which points at the published `dist/`, so no build step is needed there. The two share a name but belong to different layers. Note also that `pnpm --prefix <path> radar <cmd>` switches CWD to `<path>` *before* running scripts, so when you want the scripts alias to run in a different directory (for example a smoke-test scratch workspace) you must call `node <repo-root>/dist/index.js <cmd>` directly — using `pnpm --prefix` would cause `init` et al. to run against the repo root by accident.
|
|
63
64
|
|
|
64
|
-
##
|
|
65
|
+
## Architecture overview
|
|
65
66
|
|
|
66
67
|
```text
|
|
67
68
|
src/
|
|
@@ -70,34 +71,35 @@ src/
|
|
|
70
71
|
core/
|
|
71
72
|
watcher.ts source → adapter → items
|
|
72
73
|
filter.ts keyword / excludeKeyword
|
|
73
|
-
items.ts items
|
|
74
|
-
templates.ts research
|
|
75
|
-
state.ts state/<sourceId>.yaml
|
|
76
|
-
config.ts radar.config.yaml
|
|
74
|
+
items.ts items load / save
|
|
75
|
+
templates.ts research template loader
|
|
76
|
+
state.ts state/<sourceId>.yaml load / save
|
|
77
|
+
config.ts radar.config.yaml load / validate
|
|
77
78
|
injection-detector.ts prompt injection regex pre-filter (ADR-0009 M1a)
|
|
78
79
|
feeds/ rss / html / github-releases / npm-registry
|
|
79
|
-
agents/ 4 CLI adapters
|
|
80
|
-
schemas/ Zod
|
|
81
|
-
skills/ engine SKILL bundle (research / review / update; init
|
|
82
|
-
claude-skills/ Claude Code
|
|
83
|
-
gemini-commands/ Gemini CLI
|
|
84
|
-
templates/ workspace
|
|
80
|
+
agents/ 4 CLI adapters (claude-code / codex-cli / gemini-cli / copilot)
|
|
81
|
+
schemas/ Zod schemas (Source / Item / State / Research)
|
|
82
|
+
skills/ engine SKILL bundle (research / review / update; init copies into .agents/skills/)
|
|
83
|
+
claude-skills/ Claude Code slash-command wrappers (init copies into .claude/skills/)
|
|
84
|
+
gemini-commands/ Gemini CLI TOML slash-command wrappers (init copies into .gemini/commands/)
|
|
85
|
+
templates/ default workspace templates (init copies into templates/)
|
|
85
86
|
```
|
|
86
87
|
|
|
87
|
-
##
|
|
88
|
+
## Documentation
|
|
88
89
|
|
|
89
|
-
- [docs/architecture.md](./docs/architecture.md) —
|
|
90
|
-
- [docs/user-guide.md](./docs/user-guide.md) —
|
|
91
|
-
- [docs/
|
|
90
|
+
- [docs/architecture.md](./docs/architecture.md) — system diagrams / module responsibilities / data flow / per-phase scope
|
|
91
|
+
- [docs/user-guide.md](./docs/user-guide.md) — install / quickstart / command reference
|
|
92
|
+
- [docs/release.md](./docs/release.md) — release procedure (manual initial publish + Trusted Publisher registration + subsequent OIDC automation)
|
|
93
|
+
- [docs/adr/](./docs/adr/README.md) — FeedRadar design-decision records (Agent / Source / Output / Schedule / User Data / Filter / Skill Bundling / Status State Machine / Untrusted External Content Handling)
|
|
92
94
|
|
|
93
|
-
##
|
|
95
|
+
## Conventions
|
|
94
96
|
|
|
95
|
-
-
|
|
96
|
-
-
|
|
97
|
-
-
|
|
98
|
-
-
|
|
99
|
-
-
|
|
100
|
-
-
|
|
97
|
+
- **Language**: TypeScript ESM / Node.js 22+ / pnpm
|
|
98
|
+
- **Commits**: Conventional Commits (enforced via `commitlint`)
|
|
99
|
+
- **Branching**: GitHub Flow (`main` + feature branches, squash-merge only)
|
|
100
|
+
- **Distribution**: npm `@ozzylabs/feedradar`, OIDC Trusted Publishers (no `NPM_TOKEN`)
|
|
101
|
+
- **Shared config**: distributed from [`ozzy-labs/commons`](https://github.com/ozzy-labs/commons) via `sync.sh`
|
|
102
|
+
- **Shared skills**: pulled in from [`ozzy-labs/skills`](https://github.com/ozzy-labs/skills) via the `@ozzylabs/skills` Renovate preset
|
|
101
103
|
|
|
102
104
|
## License
|
|
103
105
|
|
package/dist/index.js
CHANGED
|
File without changes
|
package/package.json
CHANGED