@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 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** — Phase 1-5 まで実装済み(7 サブコマンド + 4 agent × 4 source kind + cron 雛形 + [ADR-0009](./docs/adr/0009-untrusted-external-content-handling.md) Adopt 策)。Phase 6 進行中: 初回 `v0.1.0` は手動 publish 予定、2 回目以降は sibling-style `release.yaml` OIDC 自動 publish(手順: [docs/release.md](./docs/release.md))。
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
- ブログ・公式アップデート・リリースフィードを監視し、キーワードヒットを 4 種の AI エージェント (Claude Code / Codex / Gemini / Copilot) に渡して **Markdown 調査レポートを書かせる CLI**。
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
- 複数の公式ブログ・ドキュメント・リリースノートを横断的に追い、変更点を要約する作業は AI エージェントとの相性が良いが、ソース管理・差分検出・テンプレート適用・複数エージェントへの委譲を毎回手作業で組むのは煩雑になる。`radar` はこのループを CLI として固定化し、ユーザーの調査ディレクトリに Markdown レポートを蓄積する。
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
- - **多エージェント対応**: Claude Code / Codex CLI / Gemini CLI / GitHub Copilot CLI adapter 経由で切り替え。
14
- - **複数フィード種別**: RSS / HTML スクレイプ / GitHub Releases / npm registry を同一の `Source` 抽象で扱う。
15
- - **ユーザー側データ管理**: `sources/` `items/` `state/` `research/` `templates/` **ユーザーの任意ディレクトリ** に置き、本パッケージは engine のみを提供する。
16
- - **npm 単体配布**: OIDC Trusted Publishers で `@ozzylabs/feedradar` を公開予定(Phase 6)。
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
- 開発中は本リポを clone し、`pnpm install && pnpm run build` `dist/index.js` を生成して `node dist/index.js <command>` で起動する。
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
- # クイックスタート (anthropics/anthropic-sdk-python GitHub Releases を監視)
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> # 不要 item dismissed に遷移(LLM 不要)
42
- radar review <research-id> # レポートを別エージェントで相互レビュー
43
- radar update <research-id> # 既存レポートを最新 item で更新(v+1
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
- 7 サブコマンドが実装済み。詳細は [docs/user-guide.md](./docs/user-guide.md) を参照。
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 でビルド(dist/)
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
- # ローカルで CLI を呼ぶ場合 (build)
58
- pnpm radar --help # = node dist/index.js --help (package.json scripts alias)
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
- > ローカルの `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` 等が走る事故になる)。
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 load / save
74
- templates.ts research テンプレートの読み込み
75
- state.ts state/<sourceId>.yaml load / save
76
- config.ts radar.config.yaml load / 検証
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 adaptersclaude-code / codex-cli / gemini-cli / copilot
80
- schemas/ Zod スキーマ(Source / Item / State / Research
81
- skills/ engine SKILL bundle (research / review / update; init .agents/skills/ に配布)
82
- claude-skills/ Claude Code slash-command 雛形 (init .claude/skills/ に配布)
83
- gemini-commands/ Gemini CLI TOML slash-command 雛形 (init .gemini/commands/ に配布)
84
- templates/ workspace 既定テンプレート (init templates/ に配布)
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) — システム全体図 / モジュール責務 / データフロー / Phase 別スコープ
90
- - [docs/user-guide.md](./docs/user-guide.md) — インストール / クイックスタート / コマンド仕様
91
- - [docs/adr/](./docs/adr/README.md) — FeedRadar 内部の設計判断記録(Agent / Source / Output / Schedule / User Data / Filter / Skill Bundling / Status State Machine / Untrusted External Content Handling)
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
- - **言語**: TypeScript ESM / Node.js 22+ / pnpm
96
- - **コミット**: Conventional Commits(`commitlint` で強制)
97
- - **ブランチ**: GitHub Flow(`main` + feature branch、squash merge のみ)
98
- - **配布**: npm `@ozzylabs/feedradar`、OIDC Trusted Publishers(`NPM_TOKEN` は使わない)
99
- - **共通設定**: [`ozzy-labs/commons`](https://github.com/ozzy-labs/commons) から `sync.sh` で配布。
100
- - **共通スキル**: [`ozzy-labs/skills`](https://github.com/ozzy-labs/skills) `@ozzylabs/skills` Renovate preset で取り込み。
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
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ozzylabs/feedradar",
3
- "version": "0.1.0",
3
+ "version": "0.1.1",
4
4
  "description": "Multi-agent CLI that watches blogs and release feeds, then turns keyword hits into Markdown research reports",
5
5
  "type": "module",
6
6
  "publishConfig": {