ドキュメント
建築
実行境界、リクエスト フロー、永続性、デスクトップ、サイドカー、モバイル コンパニオン、ドキュメント サイトにわたる拡張ポイント。
英語から自動翻訳されています。 英語の原文を見る
プロセスと信頼境界
Tauri は、ネイティブ ウィンドウ統合、安全な認証情報コマンド、メニュー、アップデート、サイドカー ライフサイクルを所有しています。その Web ビューは SolidJS アプリケーションを実行します。コンパイルされた Bun サイドカーはデータベースを開き、HTTP を提供します。 127.0.0.1 オペレーティングシステムによって割り当てられたポートを使用します。フロントエンドは SQLite を開きません。
サイドカーのエントリーポイントは apps/sidecar/src/main.ts。 HTTP サーバーを作成し、アプリケーション層を構築し、プローブします。 /api/health、選択したポートを含む JSON 準備状況イベントを出力します。ログは stderr にルーティングされるため、stdout はシェル プロトコルで利用可能なままになります。
モバイル コンパニオンは、明示的にペアリングされたデスクトップ ゲートウェイに到達します。そのネイティブ トランスポートとデバイスの認証情報は、デスクトップ Web ビューのループバック接続とは別のものです。ドキュメント Worker は別個のデプロイメントであり、ユーザーのデスクトップへの暗黙的な接続はありません。
ライブラリの依存関係
@cadcamfun/core cAD、図面、CAM 計算が含まれます。それはスキーマと境界統合の効果に依存します。アルゴリズム ループは通常の TypeScript です。 @cadcamfun/api コアタイプとスキーマをインポートして、HTTP 入力、出力、エラー、ストリームを宣言します。
@cadcamfun/db アプリケーション データベース サービス、スキーマ、および移行ロジックを所有します。サイドカーは、それをコア、API、AI、プラグイン SDK、VCS、およびワークフロー パッケージと組み合わせます。そのリポジトリはデータベース サービスを使用します。ハンドラーはリポジトリとサービスに委任します。
デスクトップは両方をインポートします @cadcamfun/api そして @cadcamfun/core。実行時に Effect クライアントを通じて API を使用し、CAD/CAM 機能とビューポートでコア ジオメトリを使用します。モバイルは API パッケージに依存し、コンパニオン リクエストをクライアントでラップします。スタンドアロンの nikcli プラグインは、バックエンド実装をインポートするのではなく、HTTP 経由で実行中のアプリケーションのアクション カタログを検出します。
HTTPリクエストのライフサイクル
- Web ビューは、ネイティブ シェルからサイドカー接続を取得します。
apps/desktop/src/app/client.tsベアラー認証とオプションのアカウント セッション トークンを使用して、Effect HttpApi クライアントを構築します。packages/api/src/client.ts他の消費者に再利用可能な契約クライアントを提供します。apps/sidecar/src/layers.ts組み立てるServedApi、ハンドラー、認可、CORS、および共有サービス層。- ハンドラーはコントラクト入力を検証し、サービスを解決し、計算または永続化を実行し、宣言された成功またはエラーの表現を返します。ストリーミング エンドポイントは、宣言されたストリーム プロトコルを保持します。
CORS では、Tauri 本番オリジンと開発で使用される HTTP ループバック オリジンが許可されます。これは承認に代わるものではありません。 API は、いくつかの応答エンベロープ スタイルを公開します。消費者は、すべての応答が同じ形状であると想定するのではなく、各エンドポイントのスキーマに従う必要があります。
サービスのライフサイクルとストレージ
エフェクト レイヤーは、アプリケーション スコープ内のデータベースと共有サービスを取得します。データベース層は親ディレクトリを作成し、WAL と外部キーを有効にし、オプションで移行を適用し、クエリの失敗を操作名でラップします。ファイナライズでは、WAL チェックポイントの切り捨てが試行され、SQLite ハンドルが閉じられます。
の DatabaseLive レイヤー選択 dataDir/cadcamfun.db。起動時に移行を適用するには、移行フォルダーを指定する必要があります。 AI 認証情報、プラグインの状態、VCS オブジェクト、ワークフローの実行、およびファイル ストレージは、それぞれのサービス インターフェイスを通じて処理されます。ストレージの詳細については、モジュールのページで説明されています。
の地元スタジオ packages/web/script/studio-server.ts Bunの追加プロセスです。構成済みの既存のアプリケーション データベースを直接開き、認証された概要データをループバック ポート 4396 で提供します。その開発プロキシと Cookie セッションは、Tauri サイドカー接続から独立しています。
ライブ プロジェクト イベント (プル リクエスト、コミット、ワークフロー実行、アシスタント セッション フェーズ) は、インプロセス イベント サービスを通じて公開されます。新しいサブスクライバーは、最初に最大 20 個の最新の一致イベントを受信し、次にライブ イベントを受信します。オプションでプロジェクトとイベント タイプでフィルタリングできます(apps/sidecar/src/services/live-events.ts).
拡張境界
2 つのプラグイン統合があります。アプリケーション プラグイン SDK は、マニフェスト、機能、アクティベーション、およびホスト コントラクトを定義します。 nikcli ブリッジは、登録された CAD/CAM アクションを外部アシスタントに公開します。 HTTP レジストリ ルートを介したプラグインのインストールは、ランタイム ホストでのモジュールのアクティブ化とは別の操作です。
ワークフローの解析とスケジュール設定が有効です packages/workflow。サービスバックされたステップはサイドカー レイヤーによって登録されますが、純粋なプロジェクトおよび CAM ステップは、提供された入力を使用して実行できます。 VCS は、ライブラリ内のオブジェクトのハッシュ、差分、マージ、および GitHub トランスポート操作を計算します。サイドカー サービスは、これらの操作をプロジェクトの永続性に接続します。
Web ドキュメント アシスタントは、レンダリングされたドキュメントを取得し、ストレージが構成されているときにガイド アーティファクトを公開できます。ドキュメントに関する質問に答えます。 CAD/CAM アプリケーションのローカル プロジェクト アクセスは継承されません。
接続と資格情報の境界
| 資格情報 | 目的 | 境界 |
|---|---|---|
| アプリケーションベアラートークン | ローカル アプリケーションを保護されたサイドカー ルートに許可します。 | サイドカーの起動のために生成/提供されます。 WebView はネイティブ接続を通じてそれを取得します。 |
x-session-token | 許可されたアプリケーションの背後で動作するアカウントを選択します。 | 存在しないセッション、無効なセッション、期限切れのセッション、または孤立したセッションは、ローカル プロファイルにフォールバックします。 |
| コンパニオンデバイストークン | 個別にペアリングされた電話機をゲートウェイ ルートに許可します。 | 別の HTTPS ゲートウェイとそのメソッド/パス許可リストによってチェックされます。 |
| AIブリッジトークン | 単一プロジェクトに対して許可されたアクションを外部エージェントに公開します。 | 2 つのアクション ブリッジ エンドポイントを許可し、読み取りまたは読み取り/書き込みスコープを強制します。 |
| プロバイダーAPIキー | アウトバウンドのモデル呼び出しを認証します。 | サイドカー資格情報サービスによって管理されます。アプリケーションの承認に代わるものではありません。 |
| GitHubトークン | 要求されたミラー操作を実行します。 | その通話に提供されるのは、 x-github-token;プロジェクトのスナップショット データではありません。 |
認可は階層化されています。ベアラー ミドルウェアを渡すことは、特定の図面またはプロジェクトの所有権を証明するものではありません。ハンドラーとリポジトリはそれらのリソースをチェックします。同様に、ペアリングしても電話機は無制限のサイドカー クライアントにはなりません。認証情報を選択する前に、特定のエンドポイントとコンパニオン ポリシーを確認してください。
認証アダプターは apps/sidecar/src/http/authorization.ts。コンパニオンとブリッジの決定は、それぞれのサービス内で行われます。これらのパスを分離しておくと、AI プロバイダーのシークレットを置き換えることなく、紛失したデバイスや統合トークンを取り消すことができます。
障害の分離
準備イベント前の障害は、サイドカーの初期化 (構成、データベースのアップグレード、サービスの構築、または HTTP の起動) に属します。準備完了後の障害は、プロバイダー、ファイルシステム操作、エンドポイント、またはクライアント セッションに固有である可能性があります。シェルのライフサイクルと WebView の接続再試行バジェットは異なります。再起動によってリスニング ポートが変更されたときに両方を検査します。
AI ストリームが切断されても、必ずしもサーバー側の会話が停止するとは限りません。編集指示を再送信する前にセッション状態を回復してください。失敗したワークフローは、トリガーとなったコミットをロールバックしません。リモート プッシュが失敗しても、ローカル履歴は消去されません。これらの区別により、ネットワーク障害が永続的な操作がまったく発生しなかったかのように処理されるのを防ぎます。
失敗した API リクエストの場合は、そのメソッド、パス、ステータス、エンドポイント ID、および関連する非シークレット識別子を記録します。走りを比較してみる /api/openapi.json と 文書化契約のスナップショット クライアントとサーバーのバージョンが異なる場合。以前のサイドカー起動のトークンを使用したトラブルシューティングは避けてください。
ソースパス別のアーキテクチャスナップショット
| エリア | どこに住んでいるのか | 最初に読むもの |
|---|---|---|
| デスクトップシェル (Rust) | apps/desktop/src-tauri/src/ | sidecar.rs (スーパーバイザー)、 commands.rs, updater.rs, menu.rs, tray.rs, secrets.rs |
| デスクトップUI | apps/desktop/src/ | app/, features/ (cAD、CAM、AI、チャット、プロジェクト、ツールパス、プラグインなど)、 viewport/, shared/ |
| サイドカー入場 | apps/sidecar/src/main.ts | ハンドシェイクの準備完了、レイヤー入り layers.tsの設定 config.ts |
| HTTPハンドラー | apps/sidecar/src/http/ | グループごとに 1 つのファイル、例: toolpath-generator.ts, ai.ts, kv.ts |
| サービスとリポジトリ | apps/sidecar/src/services/, repos/ | cam-program.ts, companion.ts, auth-tokens.ts, storage.ts |
| 契約 | packages/api/src/ | index.ts, groups/, errors.ts, client.ts |
| カーネル | packages/core/src/ | cad/history.ts, cad/sketch.ts, cam/kernel/, cam/post/ |
| アシスタント | packages/ai/src/ | actions/, tools/, nikcli/, prompts/ |
| ストレージ | packages/db/src/ | index.ts, upgrade.ts, schema.ts |
| 歴史 | packages/vcs/, packages/workflow/ | リポジトリ API、マージ、ワークフロー スキーマ |
| 仲間 | apps/mobile/ | app/ ルート、 lib/ 接続とペアリング |
トレース: 起動から最初のリクエストまで
- Tauri がスタートし、スーパーバイザーが就任
sidecar.rsランダムなトークンを生成します。 - それはスポーンします
sidecar-<triple>とCADCAMFUN_TOKEN,CADCAMFUN_DATA_DIRそしてCADCAMFUN_MIGRATIONS_DIR. - サイドカーはその構成を読み取り、SQLite (WAL、外部キー) を開き、必要に応じてバックアップと移行を行い、サービス層を構築します。
- それは結合します
127.0.0.1一時ポート上で JSON Ready 行を標準出力に出力します。スーパーバイザは最大 60 秒待機します。 - スーパーバイザーが発する
sidecar-status{ state: "ready", port }; webView の呼び出しget_sidecar_endpointのために{ baseUrl, token }. - WebView のビルド
ApiClient.layer({ baseUrl, token })そしてプロジェクトのロードを開始します。
サイドカーが終了すると、スーパーバイザはサイドカーを一度再起動し、新しいポートをアナウンスします。 2 回目の失敗ではステータスはそのままになります failed。終了時に、スーパーバイザはシャットダウン行を書き込み、2 秒待ってからプロセスを取得します。データベース層は、スコープが閉じるときに WAL にチェックポイントを作成します。
トレース: 製造リクエスト
- CAM ワークスペースは描画要素とストックをキャプチャし、呼び出します
POST /api/toolpaths/manufacture. - ベアラーミドルウェアはリクエストを受け入れます。ボディはデコードされています
CamKernelRequest. runKernelRequestでservices/cam-program.ts電話cam.kernel.jobOfSnapshot;準備の問題は 400 になります。cam.kernel.runJob操作を計画またはフォローし、切削データを計算し、ツールパスを生成し、機械のダイアレクトの NC をポストし、それをボクセル ストック上で再生してクレームを評価します。- 結果は次のようにデコードされます。
CamKernelResultそして戻ってきました。クライアントが移植可能なドキュメントを含むツールパスを保存するまで何も保存されません。保存された時点で、サイドカーはキャプチャされたリクエストを再実行して比較します。