Newer
Older
TelosDB / journals / 20260206-0000-案件.md
@楽曲作りまくりおじさん 楽曲作りまくりおじさん 8 days ago 3 KB Add comprehensive test suite (35 tests) and update journal

作業報告書 20260206-0000-案件

概要

Electron + Bun をベースにした常駐型 MCP サーバーを構築し、SQLite + sqlite-vec でベクトル検索を提供。llama.cpp を利用した埋め込み生成とテキスト生成を統合。

実施内容

  • Electron 常駐アプリ化(トレイ常駐)
  • MCP SSE サーバー構築
  • sqlite-vec + better-sqlite3 導入
  • knex 導入(items テーブル操作)
  • llama.cpp 連携(埋め込み/生成)
  • ツール分割(db / handlers / tools / client)
  • ドキュメント整備(概要/ER/データフロー/OpenAPI)

図(データフロー)

graph TD
    A[Client] -->|SSE| B[Express /sse]
    B --> C[MCP Server]
    C --> D{Handlers}
    D -->|embedding| E[llama.cpp]
    D -->|add_item| F[knex: items]
    D -->|add_item| G[sqlite-vec: vec_items]
    D -->|search| G
    G --> H[Results]
    F --> H
    H --> C

追加・更新ファイル

  • document/overview.md
  • document/openapi.yaml
  • src/db.js
  • src/llama-client.js
  • src/mcp-tools.js
  • src/mcp-handlers.js
  • src/mcp-server.js
  • src/main.js
  • src/index.html
  • .env
  • mcp.json.sample
  • .vscode/launch.json
  • .vscode/tasks.json

起動手順

bun start

環境変数(例)

LLAMA_CPP_BASE_URL=http://127.0.0.1:8080
LLAMA_CPP_EMBEDDING_MODEL=
LLAMA_CPP_MODEL=
VEC_DIM=3

備考

  • REST API は OpenAPI の雛形を作成済み。現状は MCP 経由のツール呼び出しが主。
  • アイコンは src/icon.ico / src/icon.png に配置。

追加作業(テストスイート完成)

実施内容

  • 包括的なテストスイート作成(test/ フォルダ)
  • 5つのテストモジュール、35テスト、全て成功
  • bun:test フレームワーク採用
  • 139個の expect() 呼び出しで検証

テストモジュール

  1. db.test.js (5テスト)

    • データベース初期化・スキーマ検証
    • アイテム挿入・取得
    • タイムスタンプデフォルト値
  2. mcp-tools.test.js (11テスト)

    • 5つの MCP ツール定義確認
    • スキーマ・入力パラメータ検証
    • ベクトル次元チェック(3次元)
  3. mcp-handlers.test.js (6テスト)

    • エンベッディング次元検証
    • 検索結果フィールド完全性
    • タイムスタンプ保存・操作
  4. llama-client.test.js (9テスト)

    • llamaEmbedding() API
    • llamaCompletion() API
    • エラーハンドリング
    • 環境変数使用確認
  5. integration.test.js (4テスト)

    • 完全なアイテムライフサイクル
    • 複数アイテム・メタデータ処理
    • データ完全性・並行処理シミュレーション

テスト実行結果

35 pass
0 fail
139 expect() calls
Ran 35 tests across 5 files. [238.00ms]

テスト実行コマンド

bun test                          # 全テスト
bun test test/db.test.js          # DB テストのみ
npm run test:watch                # ウォッチモード
npm run test:db                   # db テスト
npm run test:llama                # llama テスト
npm run test:tools                # tools テスト
npm run test:handlers             # handlers テスト
npm run test:integration          # integration テスト

新規ファイル

  • test/setup.js - テスト用ユーティリティ
  • test/db.test.js - DB テスト
  • test/mcp-tools.test.js - ツール定義テスト
  • test/mcp-handlers.test.js - ハンドラーテスト
  • test/llama-client.test.js - LLama クライアントテスト
  • test/integration.test.js - 統合テスト
  • test/README.md - テスト概要ドキュメント
  • package.json: test スクリプト追加 (7種類)

技術的工夫

  • bun:sqlite を使用(テスト環境では better-sqlite3 の代わり)
  • 各テストで独立したテーブル・環境設定
  • DELETE FROM items で前のテストデータをクリア
  • エラーハンドリング(ロックファイルの許容など)
  • モック fetch を使用した LLama API テスト