CoOp:Anything
게임을 검색해 협동 플레이 가능한 모드·단계·품질·커뮤니티 평점을 확인합니다
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기Jev(TypeSafe AI)で水平思考クイズの質問を判定するアプリ
저장소 README에서 가져옴
README 전체를 불러오는 중입니다.
README 전문 보기 ↗水平思考クイズ(ウミガメのスープ)をひとりで遊べる Web アプリ。 プレイヤーの質問を、TypeSafe AI の Jev が「YES / NO / どちらともいえない」で判定する。
docs/app-design.md(§1 が決定の記録)research/what-is-jev.md、research/poc-results.mddocs/app-design.md §6.4、docs/design/mockups/npm install
cp .env.local.example .env.local # TYPESAFE_API_KEY を設定する
npm run dev # http://localhost:3000
| 環境変数 | 内容 |
|---|---|
JEV_PROVIDER | Jev の呼び出し経路。direct(TypeSafe 直接 API、既定)か gateway(Vercel AI Gateway)。gateway は、その経路で評価を回してから使う |
TYPESAFE_API_KEY | direct のときの鍵 |
AI_GATEWAY_API_KEY | gateway のときの鍵 |
KV_REST_API_URL、KV_REST_API_TOKEN | いいねの数の保存先(Upstash Redis)。Vercel Marketplace で追加すると入る。UPSTASH_REDIS_REST_URL/_TOKEN でもよい。空のときはメモリで数える(開発用。再起動で消える) |
NEXT_PUBLIC_GA_MEASUREMENT_ID | アクセス解析(Google Analytics 4)の測定 ID。空のときは読み込まず、計測しない。本番(Production)にだけ設定する(docs/analytics.md) |
npm run dev # 開発サーバー
npm run build # 本番ビルド
npm test # テスト(vitest。Jev は呼ばない)
npm run typecheck # 型チェック
npm run check:puzzles # 問題データの検証(必須項目、id とファイル名、評価ケースの有無)
npm run eval # 判定の精度評価(調整用データ・baseline)。実際に Jev を呼ぶので、わずかな費用がかかる
npm run eval -- --all # baseline / no-facts / en / yesno を比較
npm run eval -- --repeat=3 # 3 回実行し、最小値と平均を出す
npm run eval -- --split=holdout --repeat=3 --confirm-holdout # 確認用データ。閾値を凍結した後に 1 回だけ
評価ケースは調整用(split: "dev")と確認用(split: "holdout")に分かれている。
確認用の結果を見て閾値や問いの文言を直したら、新しい確認用データを用意する(設計書 §7.2)。
評価は、カテゴリ別の正答率、混同行列、確信度の較正表、正解判定の結果、誤判定の一覧、レイテンシ、コストを出力し、
詳細を eval/results/ に保存する(git の管理対象外)。要約は research/poc-results.md に書く。
| メソッド・パス | 入力 | 出力 |
|---|---|---|
GET /api/puzzles | なし | 問題の一覧(id、title、problem) |
POST /api/ask | puzzleId、question(200 文字まで) | verdict(yes / no / unknown / invalid) |
POST /api/solve | puzzleId、answer(500 文字まで) | solved、matched、total、正解時のみ truth |
POST /api/reveal | puzzleId | truth |
GET /api/likes | なし | counts(問題 ID → いいねの数) |
POST /api/likes | puzzleId、liked(true で押す、false で取り消す) | 変えた後の count |
Jev が混み合っている・タイムアウトしたときは 503、それ以外の失敗(いいねの保存先の失敗を含む)は 500 を返す。
curl -X POST localhost:3000/api/ask -H 'Content-Type: application/json' \
-d '{"puzzleId":"umigame","question":"男は自殺しましたか?"}'
Vercel Hobby に、GitHub のリポジトリを取り込んで公開している(設計書 §7.4、D7)。master に入った変更は自動でデプロイされる。
JEV_PROVIDER=direct と TYPESAFE_API_KEY(Sensitive)を設定する。変えたら再デプロイする。
いいねの保存先は、「Storage」(Marketplace)から Upstash Redis(無料枠)を追加してプロジェクトにつなぐ。KV_REST_API_URL・KV_REST_API_TOKEN が自動で入る。/api/ で始まるリクエストを、IP ごとに 60 秒あたり 60 回まで。NEXT_PUBLIC_GA_MEASUREMENT_ID として Production にだけ 設定する(ビルド時に埋め込まれるので、設定後に再デプロイする)。GA の管理画面では、Google シグナルを無効、データ保持期間を 2 か月にする。puzzle_solved をキーイベントにし、イベントの引数 puzzle_id・verdict をカスタムディメンション、question_count をカスタム指標に登録する(docs/analytics.md)。soup-of-jev.kanterbury.com は、kanterbury.com の DNS を管理している Route 53 に CNAME を登録している。公開前に、その URL で通しプレイ(質問・回答・真相を見る・やり直す、PC 幅とスマホ幅)を確かめる。 コマンドラインから API を試すときは、日本語が UTF-8 で送られることを確かめる(Windows の curl に日本語を直接渡すと文字化けし、判定がすべて「どちらともいえない」のように見える)。
src/app/page.tsx — 問題一覧。進行状況の表示は PuzzleCardStatus.tsx(クライアント)src/app/puzzles/[id]/ — プレイ画面(PlayView.tsx)src/app/api/ — 判定 APIsrc/components/ — 判定の表示(VerdictLabel.tsx)、真相の表示、飾りsrc/lib/jev/client.ts — Jev の呼び出し(直接 API / Vercel AI Gateway を JevClient の裏で切り替える)src/lib/judge.ts — 質問判定と正解判定src/lib/progress.ts — 進行状況と、いいねを押したかの保存(ブラウザの localStorage)src/lib/likes.ts — いいねの数の保存(Upstash Redis。なければメモリ)。ブラウザ側で数を持つのは src/lib/likeCounts.tssrc/lib/analytics.ts — アクセス解析(Google Analytics 4)に送るイベントの型と送信。質問文・回答文は送らないdata/puzzles/ — 問題(truth / facts / keyPoints はサーバーの外に出さない)eval/cases/ — 評価ケース。否定疑問文の期待値は日本語の慣習に従う(「〜ではないのですか?」の内容が成り立てば yes)