agilab-source-connectors の俯瞰
AGIラボの運営データソース(agi-backend / Discord / note / X / Instagram / Cloudflare / Supabase / Drive)を read-only で 1 ソースずつ aggregate snapshot 化していくための connector フレームワーク。 万能アダプタを 1 個書くのではなく、 「1 source = 1 connector」 の小さなアダプタを揃え、上位のレポートやスコアカード側で組み合わせる設計。
目的とスコープ
AGIラボには既に backend / Discord / note / X / vault / Cloudflare / Supabase など、データを持っている場所が散らばっている。 それぞれに API・CLI・vault skill・OSS が既にある。 このワークスペースは、その 「読む側のインターフェース」 を 1 ヶ所に揃える役割を持つ。 新しいデータ源を作るのではなく、既存ソースを compact / 一定の形 / 安全な経路 でアクセスできるようにすることが目的。
In scope
- ·外部ソースの read-only ラッパ
- ·aggregate snapshot 生成(count / rate / median / latest)
- ·health check スクリプト
- ·credential 取り扱いの境界線
Out of scope
- ·書き込み系 API(deploy / DB write / production post)
- ·新しいデータプラットフォームの自作
- ·credentials を workspace 内に保存すること
- ·connector に分析ロジックを詰め込むこと
Workspace の構造
connectors/ がソース別アダプタの本体、sources/ は参照用の外部 repo checkout、state/ は生成 snapshot、logs/ と tmp/ はランタイム作業領域。 書き込み可能なのは connectors/ と state/ のみで、それ以外は read-only の慣習。
- .env / .env.* — Workspace 外(machine-level env file)に保管する。
- sources/*/.dev.vars — 外部 repo の secrets も commit しない。
- state/* と logs/* と tmp/* — README 以外は ignore(生成物は再生成可能なものだけ残す)。
- sources/* / node_modules / .wrangler — 外部 checkout と dependency は repo に入れない。
Connector の解剖
Connector は 1 source = 1 connector の原則で作る。 1 つの connector に全てを知らせず、上位レイヤで複数 connector の出力を組み合わせる方針。 CLI 風のインターフェース(実装が API ラッパでも script でも)を共通化することで、呼び出し側のコードを安定させる。
default_mode / safe_commands / blocked_without_explicit_instruction など。/state を使い、connector 配下に閉じる必要がある時だけ作る。Build 原則 — 4 つ
全ソースを同時に着手するのではなく、 1 つずつ 「最初に役に立つ snapshot」 まで持っていく。 これを破ると、 connector が中途半端な状態で並んで、 どれも使えない状況になりがち。
safe_commands に並ぶ。ソース catalog — 8 sources
全 8 ソースの推奨 build order と、各ソースで最初に達成する「役に立つ snapshot」の定義。 Discord は vault 側に既に強い資産があるので 「rebuild せず wrap する」 のが規律。 Instagram は最後に着手して、 X / note の出力 schema が固まってから合流する。
| # | Source | Status | Existing assets | First useful snapshot | Gap / note |
|---|---|---|---|---|---|
| 1 | agi-backend | setup | Cloudflare Worker / Supabase schema / D1 worker tables / note sync / X OAuth / Discord webhook | Membership・subscription・app activity の aggregate | backend を 「source」として使う。 万能 connector の置き場にしない。 |
| 2 | Discord | planned | vault skill: discord-log-export / discord-project-search / agi-lab-discord-context / agi-lab-discord-post |
コミュニティ activity サマリ | 既に資産があるので wrap して normalize。 新規ツールは書かない。 |
| 3 | note | planned | agi-backend/note-extract によるメンバー抽出、 vault に note baseline |
会員数と sync 状態 → 後に記事 analytics | 記事 analytics(PV / 読了率 等)の取得経路が 未確定。 手動 CSV ingest も視野。 |
| 4 | X | planned | agi-backend の X OAuth routes、 vault の note-x-promo |
account public metrics snapshot | posting / automation は read 経路が信頼できるまで out of scope。 |
| 5 | blocked | 確認済みのローカル connector なし | account / media public metrics or campaign response | 公式 API / CLI / OSS のどれを採るか、 auth 境界も含めて 意思決定が必要。 | |
| 6 | Cloudflare | planned | agi-backend が Wrangler と Workers config を持っている |
Worker deploy / cron / log の health サマリ | read 系 Wrangler / API のみ。 default では deploy しない。 |
| 7 | Supabase | planned | agi-backend の schema と client コード |
read-only な aggregate クエリ | backend API が安全な aggregate を出せない箇所 だけ 使う。 |
| 8 | Google Drive / Docs / Sheets | planned | Codex 側の Google Drive connector、 vault に canonical doc | canonical ops file の鮮度 + campaign sheet サマリ | connector がローカルコードではなく app 経由になる可能性が高い。 |
Current Priority — 4 ステップ
state/agi-backend/ に最初に書く。 これが他 connector の参照雛形になる。実例 — agi-backend connector
最初に組み立てた connector。 connectors/agi-backend/ 配下に README / manifest / check スクリプトが揃っている。 まだ aggregate snapshot 出力は実装されておらず、 ローカルテストの状況を見ながら次に進む段階。
github.com/tempi-tech/agi-backendcheckout:
sources/agi-backend
credential policy: 既存の machine-level env のみ参照、 workspace 内には保存しない。
git status --shortgit pull --ff-onlynpm test -- --run./node_modules/.bin/wrangler --version
- wrangler deploy
- remote database writes
- KV writes
- member sync writes
- Discord production posts
- membership
- subscription
- app_activity
- worker_runs
- note_sync
- repo cloned, npm install 済
- 17 / 19 test files pass
- 108 tests pass / 1 fail / 2 isolated-storage errors
- failure:
connections.match_modeNOT NULL constraint
Health check スクリプト — scripts/check.sh
#!/usr/bin/env bash set -euo pipefail SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" WORKSPACE_ROOT="$(cd "$SCRIPT_DIR/../../.." && pwd)" REPO="${AGI_BACKEND_REPO:-$WORKSPACE_ROOT/sources/agi-backend}" if [[ ! -d "$REPO/.git" ]]; then echo "missing_repo path=$REPO" exit 1 fi cd "$REPO" echo "repo=$REPO" echo "head=$(git rev-parse --short HEAD)" echo "status=$(git status --short | wc -l | tr -d ' ') changed_files" if [[ -x ./node_modules/.bin/wrangler ]]; then echo "wrangler=$(./node_modules/.bin/wrangler --version)" else echo "wrangler=missing" fi if [[ "${1:-}" == "--test" ]]; then npm test -- --run fi
Next useful step
- read-only な集計スクリプトを 1 本作る — 既存 env を読み、 aggregate counts のみを問い合わせる。
- 出力先は
state/agi-backend/*.json— 1 ファイル 1 snapshot、 再生成可能な形に縮約する。 - Discord log export はここに追加しない — vault 側の skill が既に強いので分離維持。
- 万能 note connector にしない — note 専用 connector で別に扱う。
運用規律
connector を増やしていく途中で、 ここを甘くすると 1 ヶ月後に「何を信じていいか分からない workspace」になりがち。 4 つの境界線を最低限維持する。
- 1 source per connector。 万能 connector を作らない。 上位レイヤで組み合わせる。
- aggregate snapshot first。 raw dump を呼び出し側に渡さない(count / rate / median / latest のみ)。
- credentials は workspace 外。 machine-level env か upstream secret store を使う。
.envを repo に置かない。 - 外部 checkout は読み専。
sources/配下の repo を変更指示なく書き換えない。 deploy も default では行わない。 - 既存資産が先。 既存 CLI / API / OSS / vault skill を wrap してから新規実装を考える。
- 言語は source に合わせる。 Go / TypeScript / Python / shell — 言語選択そのものを目的化しない。
探索方法
このページから何を読み始めればよいか、 役割別の最短ルート。 ローカルに repo がある場合のコマンド例も載せている。
README.md →
HANDOVER.md →
connectors/source-catalog.md
connectors/README.md →
このページの 03 / 04 / 07 セクション
connectors/agi-backend/ を雛形にコピー →
manifest.json と README.md から書く →
最後に scripts/ を作る
connectors/agi-backend/scripts/check.sh を実行 →
head / status / wrangler version が返る
# 1. ワークスペースに移動 cd /Users/kai/Develop/airi-source-connectors # 2. agi-backend connector の health check (read-only) connectors/agi-backend/scripts/check.sh # 3. オプション: upstream tests を流す connectors/agi-backend/scripts/check.sh --test # 4. 設計を眺める cat connectors/README.md cat connectors/source-catalog.md cat HANDOVER.md