Skip to content
| Marketplace
Sign in
Visual Studio Code>Other>都立AINew to Visual Studio Code? Get it now.
都立AI

都立AI

Hiromichi-ngs

|
1 install
| (0) | Free
都立AIの授業用APIと連携する非公式クライアント。コード説明、選択範囲編集、サイドバーチャットに対応。
Installation
Launch VS Code Quick Open (Ctrl+P), paste the following command, and press enter.
Copied to clipboard
More Info

都立AI VS Code Extension

個人開発の非公式クライアントです。東京都・GovTech東京の公式拡張ではありません。Marketplaceの発行者は hrmcngs です。

都立AIの授業用APIキーを登録するだけで使い始められます。接続先が未設定の場合は起動時に授業用APIを自動設定し、URL・モデルIDの入力や接続先の選択は求めません。すでに別のAPIを設定している場合は、その設定を維持します。

一時停止・再開・依頼の変更

回答生成中の停止ボタンは一時停止として動作します。途中の回答と入力内容を残し、チャットの表示と回答の確定・ファイル適用を止めます。入力を変えずに送信すると同じリクエストの続きを表示し、入力を変更して送信すると古い生成結果を破棄して新しい依頼で生成し直します。編集中は送信ボタンを押すまで新しいAPIリクエストを送りません。

一時停止は拡張側の表示・適用を止める機能です。APIにはサーバー計算を一時停止する制御を確認できていないため、停止中も通信・生成・利用回数や料金の計上が続く場合があります。受信済みの回答はメモリ上に保持し、再開するまで履歴へ確定したりファイルへ適用したりしません。APIのエラー・タイムアウトが発生した場合は、再開時にエラーを表示します。

キー変更、ビュー破棄、VS Code終了では途中状態を破棄します。ファイル操作・資料読込・承認待ちの停止は従来の中断操作です。適用済みの編集を停止ボタンで巻き戻すことはありません。

TypeScript / VS Code Extension APIによるコード説明、選択範囲の自然言語編集、サイドバーチャット。 VS Code 1.106以上のデスクトップ版に対応。開発・パッケージ作成にはNode.js 22以上とnpmを使用します。

チャットの順次表示

OpenAI互換APIでは stream: true で送信し、SSEで届いた文章をチャットへ順次表示します。生成中のコード本文は表示せず、ファイル名と準備中の表示にまとめます。完成したファイルカードや通常のコードブロックも初期状態では折りたたみ、クリックしたときだけコードを表示します。途中の文字列からファイルを作成・編集することはありません。

現在の授業用APIの接続実装は一括応答です。この場合は回答の受信後に少しずつ表示し、画面には「回答を表示中(受信済み)」と表示します。これは表示上の演出であり、サーバーの生成途中を取得する機能ではありません。最初の応答待ち時間は短縮しません。

受信後の表示は約32ミリ秒ごとに4文字ずつ進みます。長い回答でもまとめて表示せず、一時停止・再開できます。

キー変更・チャットビュー破棄時は表示と通信を中断します。未完了の回答を成功した履歴として保存せず、ファイルにも適用しません。ストリーミング非対応のOpenAI互換APIでは toritsuAI.streamResponses をオフにしてください。失敗時の自動再送は行いません。

SSEの改行とUTF-8の処理は HTML Standard を参照しています。実サービスでのストリーミングは未検証です。

他のユーザーに配布する

配布するのは toritsu-ai.vsix です。受け取る側はNode.jsやソースコードのビルドを必要としません。VS Code 1.106以上のデスクトップ版を用意してください。この拡張は非公式のクライアントです。

  1. VS Codeで Extensions: Install from VSIX... を実行し、受け取ったファイルを選びます。
  2. 必要なら Developer: Reload Window を実行します。作業フォルダーを開いた場合は、信頼できるフォルダーか確認してください(制限モードでは動作しません)。
  3. Toritsu AI: Open Chat →「APIキーを登録」で、本人が発行したキーを登録します。
  4. そのままチャットを使えます。授業用APIのURL・モデルIDは入力不要です。別のAPIを使う場合だけ歯車から接続先を変更してください。
  5. Toritsu AI: Check Connection を実行し、確認に同意すると短いテストメッセージを送信します。有効な応答を受信した場合だけ成功と表示します。利用回数・料金が発生する場合があります。
  6. チャットへ質問するか、コードを選択して Explain Code / Edit Selection を実行します。

APIキー、ユーザー設定、チャット履歴はVSIXに含めません。配布者のキー・設定フォルダーを他の人に渡さないでください。受け取った側で利用権限と有効なAPIキーが必要です。授業用APIのキー発行画面は https://ai.metro.tokyo.lg.jp/chat/public-api です。

接続設定を途中で閉じても、保存済みのAPIキーは削除されません。情報通知の「接続設定を再開」、または歯車の「接続設定を始める」から続けられます。「接続未確認」はキーが無効という意味ではなく、まだ有効なAPI応答を確認していない状態です。

接続設定をやり直す場合は Toritsu AI: Setup Connection、キーを削除する場合は Toritsu AI: Remove API Key を使います。接続先を変更するときは、その接続先用のキーへ更新してください。

問題がある場合:

  • ボタンが見つからない: コマンドパレットから Toritsu AI: Open Chat を実行してください。
  • 拡張が動かない: VS Codeのバージョン、ワークスペースの信頼状態、ウィンドウの再読み込みを確認してください。
  • HTTP 400: サーバーが送信内容を拒否しています。「Toritsu AI: Check Connection」で短いテスト文が通るか確認してください。短文も失敗する場合はキー・利用条件・API仕様、短文だけ成功する場合は入力や会話の長さを切り分けます。授業用APIではモデルIDの入力は不要です。JSON応答の既知のエラー理由だけを分類して表示し、サーバー本文やキーは表示しません。
  • HTTP 401/403: キーの有効期限・権限・接続先を確認してください。キーはサポート用メッセージに貼らないでください。
  • タイムアウト: 学校・組織のネットワーク制限や接続先の稼働状況を確認してください。
  • 授業用APIで画像を送れない: 現在の授業用文字生成API接続はテキストのみ対応しています。

配布時の動作確認: macOS / VS Code 1.139.1の空プロファイルで、配布VSIXから展開した拡張を起動し、全コマンドの登録・チャットを開く操作・必須ファイルの同梱・利用者個人の接続先・モデル設定を引き継がないことを確認しました。 VS Code公式の拡張テスト方式を使用しています。

Windows/Linuxと実際の授業用APIへの接続は、実機検証範囲に含みません。VSIXの受け渡しは利用を許可された相手に行ってください。

既存ファイルへの作成依頼

AIが既存ファイルを新規作成として提案した場合も、編集として提案した場合も、手動で添付し直す必要はありません。新規作成候補が同じ内容なら「変更なし」と表示します。実ファイルを読み込む必要がある場合は該当ファイルだけを読み込み、現在の内容を基にAIへ編集案を再生成させます(APIを追加で1回使用)。毎回確認モードでは追加送信と適用を確認します。未保存の編集、パスの変更、読込後の競合は引き続き保護します。

既存ファイルを編集

単一フォルダーを開き、生成先・添付を指定していない場合、「追加して」「修正して」などの依頼でコードを自動収集します。開いているソースと、index.html・App.tsx・CSSなどの代表的なファイルから最大4件・合計20,000文字の全文を送信します。隠しパス、リンク、ワークスペース外、上限を超えるファイルは自動収集しません。対象が見つからない場合や複数フォルダーの場合は「+」から対象を選択してください。プランモードでは自動収集しません。毎回確認モードではAPI送信・変更適用に承認が必要です。

「index.htmlの○○を変更して」のように依頼してください。指定先内の既存ファイルは、手動で添付しなくても対象ファイルだけを自動で読み込み、実際の内容に基づいて編集案を生成します。「+」→「ファイル」で明示的に添付する方法も使えます。現在のファイルを「ファイルを添付」で全文送信した場合も対象にできます。保存先パスの指定があればそれを使い、未指定ならワークスペース、どちらもなければ最初の添付ファイルの親フォルダーを基準にします。

新規作成と既存編集を同時に依頼できます。既存編集は読み込んでAPIに送った元の全文が現在の内容と一致するファイルだけに適用します。未添付の場合は自動読込と編集案の再生成のためAPIを追加で1回使います。毎回確認では追加送信と適用を確認し、自動承認・フルアクセスでは指定先内の編集を自動適用します。未保存の編集があるファイルや、読込後・承認待ち中に変更されたファイルには適用しません。生成カードと毎回確認のカードでは - / + の差分を表示します。

自動承認・フルアクセスでは対象の編集を自動適用し、毎回確認ではチャット内で許可・拒否を選びます。既存ファイルへの変更はVS Codeの編集として適用して自動保存します。Undoも利用できます。保存に失敗した場合は編集内容を残してエラーを表示します。他の開いているファイルは保存しません。新規ファイルは指定先へ作成されます。

生成ファイルの見やすい表示

AIのファイル生成用JSONを、そのまま表示せずファイル名・行数・内容のカードに変換します。1ファイルの場合は本文を展開し、複数の場合はファイル名をクリックして読みたい内容だけ展開できます。エスケープされた改行も通常の改行として表示し、コードは等幅フォントで表示します。保存済みの会話にも適用されます。カードは作成候補の表示であり、作成結果はチャット下部の通知で確認できます。

承認モードとチャット内確認

自動承認ではAPI送信と指定先への新規ファイル作成を確認なしで実行します。ワークスペース外の選択編集は確認します。フルアクセスでは選択編集を含めて確認を省略します。既存ファイルの保護・パス検証は引き続き有効です。保存先が未指定の場合は場所を選ぶ必要があります。

毎回確認では、チャット内のカードに操作内容・保存先・ファイルを表示します。各ファイルを展開して内容を読み、「許可」「拒否」を選べます。API送信・リンク取得・選択編集の確認も同じカードを使用します。停止・キー変更・画面を閉じた場合は待機中の操作を拒否します。チャット画面が開いていないコマンド操作ではVS Codeの確認画面を使用します。

送信状態の表示

送信すると質問がすぐ会話欄に移動し、「送信中・回答待ち」と待機表示が出ます。回答を受信すると「✓ 送信済み」へ切り替わります。一時停止・失敗した場合はその状態を質問に表示し、入力欄へ元の文章を戻すので編集して再送できます。停止後に編集した文章は上書きしません。

生成先パスを指定

チャットの「+」→「生成先のパス」で、例えば ~/Desktop/my-app を入力してください。未作成のパスも指定できます。その後「src/main.ts と README.md を作って」などと依頼すると、承認モードに従って、保存先と必要な子フォルダーをまとめて作成します。既存ファイルの編集は下記の条件を満たす場合に限ります。

フォルダーを開いていない場合は絶対パスまたは ~/ から始まるパスを指定してください。ワークスペースフォルダーが1つの場合は、そのフォルダーを基準とした相対パスも使えます。入力欄の上に表示される「生成先」を押すと変更でき、空欄で解除できます。パスは現在のセッション内で保持し、キーや接続先の変更時に解除します。生成先が未指定の場合は保存先を選択します。

フォルダーを開かずにファイル作成

ファイルやフォルダーを事前に開く必要はありません。チャットで作成を依頼すると、ワークスペースがない場合は保存先フォルダーの選択画面が開きます。保存先を選んでください。毎回確認モードでは生成内容を確認して「許可」を押します。選択したフォルダーをワークスペースとして開き直す必要はありません。

質問の呼び出し・停止して編集

入力欄の先頭行で ↑ を押すと、現在の会話の直前の質問を呼び出せます。続けて↑で以前の質問へ、↓で新しい質問へ移動し、最後には呼び出し前の下書きへ戻ります。日本語変換中・文字選択中は履歴へ移動しません。複数行の2行目以降では通常どおりカーソルが動きます。新しく保存した質問は添付ファイル名などの補足を除いた元の入力を呼び出します。

応答待ち中に 停止ボタン(■) を押すと一時停止し、途中の回答と入力を残したまま編集できます。同じ内容を送れば続きの表示を再開し、変更して送れば新しい内容で生成し直します。

ファイルを作成

チャットに「index.html と style.css を新規ファイルとして作って」などと依頼してください。作成候補がチャット内のファイルカードに表示されます。毎回確認モードでは保存先・ファイル名・内容を確認して「許可」を押すと作成します。自動承認・フルアクセスでは指定先へ自動で作成します。複数のワークスペースフォルダーがある場合は保存先を選択します。

新規テキストファイルは最大20件・合計1MiBまで作成できます。指定先の外への保存、シンボリックリンク経由の保存、シェル実行は対象外です。既存ファイルの変更には、元の内容との一致確認など「既存ファイルを編集」の条件が適用されます。プランモードでは作成せず、履歴を開いても再作成しません。

実際に作成できた場合だけチャット下部へ「作成しました」と表示します。応答の形式が不正な場合はファイルを作成せず、エラーを表示します。

授業用の都立AI API

https://ai.metro.tokyo.lg.jp/chat/public-api で発行したキーは、「APIキーを登録」だけで利用できます。保存済みキーは再入力不要です。接続先が既に設定されている場合は詳細設定で以下を指定してください。

  • toritsuAI.baseUrl: https://ai-api.metro.tokyo.lg.jp
  • toritsuAI.chatEndpoint: /api/v1/public/message

提示された公式Pythonサンプルに基づき、Bearer認証で { input, conversation_id: "" } を送り、応答の message を表示します。モデル指定・モデル一覧取得は行いません。会話はローカル履歴を文字列化して毎回送り、サーバーの会話IDは再利用しません。画像添付・画像生成はこの接続方式では未対応です。キーには有効期限と利用回数制限があります。

授業用APIでは入力欄右下から「高速モード/推論モード」を選択できます。これはアプリ側の回答方針と履歴量の切替です。高速は直近4,000文字以内の履歴と簡潔な回答、推論は24,000文字以内の履歴と整合性・例外・検証を重視する指示を使います。履歴は会話単位で減らし、最新の依頼・添付コードは切り捨てません。設定は toritsuAI.responseMode に保存し、次回送信から適用します。生成中は切り替えできません。

実モデルは都立AI側に任せます。モデル名の取得・ブラウザ版の高速/推論切替をAPIに指定する方法は未確認であり、アプリ側の切替がモデルや推論能力・速度を変える保証はありません。同じAPI仕様が維持される限り、提供側のモデル更新に伴うモデルIDの変更は不要です。以下のOpenAI互換形式の説明は、その他のAPI接続向けです。

通常のVS Codeにインストール

npm ci、npm run package で toritsu-ai.vsix を生成します。 VS Codeのコマンドパレットで Extensions: Install from VSIX... を実行して選択し、 Developer: Reload Window を実行してください。普段のウィンドウに都立AIボタンが表示されます。 インストール後はF5を押す必要はありません。

開発用ウィンドウで起動

  1. このフォルダで npm install、続いて npm test を実行します。
  2. VS Codeでこのフォルダを開き、F5(Run Toritsu AI)を実行します。
  3. 起動したExtension Development Hostで信頼済みの作業フォルダを開きます。
  4. 右上のAIボタンを押し、「APIキーを登録」を選択します。Microsoftログインは不要です。
  5. 授業用APIでは追加設定なしでチャットを使えます。別のAPIを利用する場合だけ接続先・モデルを設定します。
  6. キーの更新は Toritsu AI: Set API Key、接続設定は Toritsu AI: Setup Connection からも行えます。
  7. ファイルを開き、以下のコマンドを実行します。

Run Toritsu AI はデバッガーの接続待ちで停止しないよう、デバッグなしで起動します。 ブレークポイントを使う場合は .vscode/launch.json の noDebug を false に変更してください。

{
  "toritsuAI.baseUrl": "https://your-ai-server.example",
  "toritsuAI.model": "your-model-id",
  "toritsuAI.chatEndpoint": "/v1/chat/completions",
  "toritsuAI.authHeader": "Authorization",
  "toritsuAI.apiKeyPrefix": "Bearer"
}

URLとモデルは例示です。実在する都立AIの接続先とモデルを設定してください。 baseUrl末尾にchatEndpointを追加します。baseUrlに /v1 を含める場合、endpointは /chat/completions にしてください。 HTTPはlocalhost/127.0.0.1/::1のみ許可します。接続設定はユーザー・マシン単位です。

コマンド

コマンド 動作
Toritsu AI: Set API Key APIキーをSecretStorageに保存・上書き
Toritsu AI: Explain Code 選択があれば選択部分、なければ全文を説明。結果をMarkdownエディターで表示
Toritsu AI: Edit Selection 1か所の選択範囲を自然言語の指示で置換。全文、選択、言語、パス、指示を送信
Toritsu AI: Open Chat 右側のセカンダリサイドバーに都立AIチャットを表示
Toritsu AI: Connect with API Key APIキーを登録(旧Sign Inの互換コマンド)
Toritsu AI: Setup Connection 接続先・キー・モデル一覧の設定
Toritsu AI: Show History 保存したチャット履歴を開く
Toritsu AI: Remove API Key 保存キーを削除し、通信・画面の会話を破棄

エディター右上のツールバーにも、吹き出しに「AI」と描かれた都立AIボタンを表示します。 クリックするとサイドバーチャットが開きます。ライト・ダークテーマに対応しています。 ツールバーの幅が狭い場合はVS Codeのレイアウトにより … メニュー内に入ることがあります。 チャットは右側に独立した「都立AI」タブとして表示され、境界をドラッグして幅を変更できます。 入力欄は下部に固定され、Enterで送信、Shift + Enterで改行します(Cmd/Ctrl + Enterも利用可能)。日本語変換中は送信しません。入力欄は内容に応じて伸縮します。Escまたは停止ボタンで一時停止し、内容を変更して再送できます。添付・リンク・現在のファイルは「+」から選びます。履歴から直近の会話を開き直せます。回答の「コピー」で全文をコピーできます。過去の回答を読み返している間は自動スクロールせず、「最新へ」で末尾に戻れます。

リンクを参考に作成

  1. チャットにWebページ・PDFのURLと、「この資料を参考に○○を作って」などの指示を入力します。
  2. 入力欄の「リンクを読み込む」を押します。入力欄にURLがない場合はURL入力ボックスが開きます。
  3. 追加された参考資料カードを開くと、抽出した本文・URL・文字数を確認できます。
  4. 内容を確認して送信します。本文をAIのコンテキストに含め、コード・文章の作成に利用します。

リンクは3件、1ファイル10MBまで。PDFは最大100ページ、各資料は4万文字まで、合計8万文字までです。 切り詰めた資料は「抜粋」と表示します。Webページ・テキスト・文字を含むPDFに対応します。 スキャンPDFのOCR、JavaScriptでのみ表示される本文、ログインが必要なページは未対応です。 APIキー・ブラウザのCookieをリンク先には送信しません。 公開HTTP/HTTPSの標準ポートのみ対応し、ローカル・プライベートIPへの接続を拒否します。 リダイレクト先も確認します。1リンクの読み込みは30秒を目安にタイムアウトし、中止ボタンで止められます。 PDF解析は専用の子プロセスで行い、解析開始から15秒を超えた場合やキャンセル時には強制終了します。 子プロセスのV8 old-spaceヒープは256MiBに制限し、APIキーなどの環境変数は引き継ぎません。 この設定はプロセス全体のメモリ(RSS)を制限するものではなく、OSのセキュリティサンドボックスでもありません。

リンク先の取得とAIへの送信は別の操作です。毎回確認モードでは両方で確認します。 リンクを含む質問は、先に資料を読み込んでから送信してください。 資料の本文はその送信のみに付加し、会話履歴には出典URLだけを残します。継続して参照する場合は再度読み込んでください。 送信失敗時は資料を保持し、成功・新規チャット・履歴切替・キー削除で破棄します。 取得したHTMLは実行せず、抽出テキストとして表示します。参考資料内の命令は指示として扱わないようプロンプトを分離します。

モデルの切り替え

入力欄右下のモデル名をクリックし、「高速モデル」「推論モデル」を選びます。 初回は接続先のモデル一覧を取得し、選択画面を表示します。IDの手入力は不要です。一度登録すると次回からクリックだけで切り替わります。 高速モデルは toritsuAI.fastModel、推論モデルは toritsuAI.reasoningModel、現在使用するIDは toritsuAI.model に保存します。チャット・説明・編集の次のリクエストから適用されます。 送信中はメニューから変更できません。

「利用可能なモデルから選ぶ…」で一覧を再取得してモデルを変更できます。「モデル設定を開く…」から接続設定も変更できます。 「設定済み」はモデルIDが登録された状態を表し、APIでの利用権限・画像対応・推論機能を保証するものではありません。 一覧の取得にはAPIの接続先とキーの設定が必要です。既定は GET /v1/models、応答は { "data": [{ "id": "モデルID" }] } を想定します。パスは toritsuAI.modelsEndpoint で変更できます。都立AI固有の一覧API仕様は未確定です。 一覧が取得できない場合は登録済みモデルだけを表示し、登録もなければエラーを表示します。モデルIDの入力画面へは戻りません。名前から高速・推論の能力を推測せず、利用者が各プリセットへ割り当てます。

画像の添付

画像をチャット画面へドラッグ&ドロップするか、入力欄左下の「+」で選択できます。 クリップボードから画像を貼り付ける操作にも対応します。添付前にAPIキーを登録してください。 PNG・JPEG・WebPに対応し、1枚5MB、最大4枚・合計10MBまでです。 サムネイルの「×」で削除できます。文章なしで画像だけを送信することもできます。 画像の読み込み・ドロップだけではAPIに送信されず、送信ボタンを押した時点で送ります。 送信失敗時は添付を保持し、送信成功・新しい会話・キー削除時に破棄します。

画像対応のモデルと、OpenAI互換の image_url 入力に対応したAPIが必要です。 テキストとBase64の画像を messages[].content 配列に含めます。 形式の参照: OpenAIの画像入力仕様。 画像本体はその送信にのみ含め、後続の会話履歴にはファイル名だけを残します。 画像の内容について続けて質問する場合は、必要な画像を再添付してください。

操作の承認設定

入力欄左下の「自動承認」から、画像のポップアップのようにモードを選べます。 toritsuAI.approvalMode としてユーザー設定に保存し、チャット・説明・選択編集に共通で適用します。

モード 動作
毎回確認 (ask) リンク読込・API送信の前と、選択編集の適用前に確認
自動承認 (auto、既定) API送信とワークスペース内の選択編集は確認を省略。外部ファイルは適用前に確認
フルアクセス (full) 対応するAPI送信・選択編集の確認を省略。切り替え時に一度確認

任意ファイル操作・シェル実行機能はありません。ユーザーが指定した公開URLの資料読み込みに対応します。 フルアクセスでもAPIキー登録必須、ファイル変更競合の検出、画像の容量制限は有効です。 自動承認ではファイルの実パスも確認し、ワークスペース外に向くシンボリックリンクは承認を求めます。 未保存ファイル・実パスを確認できないファイルも確認対象です。

APIキーでの利用

Microsoftログインは不要です。APIキーはVS CodeのSecretStorageに保存し、画面・設定ファイル・履歴にキー自体を渡しません。 「APIキー登録済み(接続未確認)」は保存状態を示します。有効性と利用権限は接続先APIが判定します。 キーの削除・変更や接続先の変更では、進行中のリクエストを中断して結果を破棄します。 画面上部の「キーを削除」または Toritsu AI: Remove API Key でSecretStorageからキーを削除できます。 履歴はアカウント・APIキー・接続先に紐付けず、このPCの都立AI拡張内で共有します。キーを削除しても保存済みの履歴は消えず、別のキーを登録しても引き継がれます。 ブラウザの都立AIアカウントとは連携しません。拡張内の通信には、API提供元から発行されたキーと対応するAPIのURLが必要です。

選択編集も適用後に対象ファイルを自動保存し、Undoで戻せます。対象ファイルに元からある未保存の内容も一緒に保存されます。リクエスト開始後に元ファイルが変更・クローズされた場合は適用しません。 選択範囲を後から移動しても、取得時の範囲を編集します。複数選択と空選択は拒否します。 通知からキャンセルできます。空の応答で選択範囲を削除することはできません。

チャットの「ファイルを添付」は既定でオフです。オンの場合、現在のエディター (サイドバーにフォーカスした場合は最後に利用したエディター)の未保存内容を含む全文・選択・言語・パスを送ります。 直近10チャットを保持し、各会話で成功した直近10往復をAPI接続別に保存して次の質問に付加します。添付全文はその送信にだけ付加し、 後続の履歴には保持しません。失敗時は入力を残して再送できます。中止・履歴消去に対応します。 ビューを閉じたりウィンドウを再読み込みしても、このPCに保存した共通の履歴を復元できます。 回答はHTMLとして解釈せずプレーンテキスト表示します。APIキーはWebviewへ渡しません。

APIと構成

都立AIの仕様が未確定のため、次のOpenAI互換仕様を使用しています。

POST /v1/chat/completions
Authorization: Bearer <API_KEY>
Content-Type: application/json
{"model":"your-model-id","messages":[{"role":"user","content":"こんにちは"}],"temperature":0.2}
{"choices":[{"message":{"content":"こんにちは。"}}]}
  • src/services/llmClient.ts: VS Codeに依存しないクライアントインターフェース。
  • src/services/authService.ts: APIキーの準備状態と接続先別の識別。
  • src/services/authenticatedClient.ts: キー未登録の送信阻止、キー削除時のキャンセル。
  • src/services/chatHistory.ts: 会話単位の履歴管理。
  • src/services/approvalService.ts: 承認モードの保存とAPI送信・編集の確認。
  • src/services/imageAttachments.ts: 画像形式・容量のホスト側検証。
  • src/services/linkReader.ts: 公開リンクの取得、HTML・PDF本文の抽出。
  • src/services/pdfParser.ts / pdfWorker.ts: PDF解析用の子プロセス、時間制限とキャンセル。
  • src/services/toritsuAiClient.ts: HTTP、認証、タイムアウト、応答変換。専用API対応の変更箇所。
  • src/services/promptBuilder.ts: 用途ごとのプロンプト。
  • src/services/contextCollector.ts: 未保存内容を含むエディター情報収集。
  • src/commands/: コマンド。
  • src/providers/chatViewProvider.ts、media/: サイドバー。
  • src/extension.ts: 依存注入と登録。将来のinline completionでも同じLlmClientを利用できます。

APIエラー、タイムアウト(チャットは既定180秒、モデル一覧は30秒)、不正な応答、未設定時には日本語で表示します。 レスポンス本文やキーをログ出力しません。自動再試行、ストリーミング、ツール実行は行いません。 APIキーは設定ファイルに書かずSecretStorageに保存します。コードは設定したAPIへ送信されます。

検証

npm test で型チェックとNode.jsのテストを実行します。 実際のAPIキー・接続先が必要な実通信とVS Code UIは、F5で以下を確認してください。

  1. キー未登録では送信できず、APIキーの登録だけで入力できる。
  2. キー未設定・URL未設定時にエラーが表示される。
  3. 選択あり/なしで説明対象が変わる。
  4. 選択編集が反映され、Undoで戻せる。
  5. 応答待ち中にファイルを変更すると、編集が拒否される。
  6. チャット履歴、全文チェック、中止、履歴消去が動く。
  7. キー削除後に入力・コード編集が禁止され、履歴表示が消え、別のキーを登録しても履歴を復元できる。
  8. 画像のドロップ・選択・貼り付け・削除、画像だけの送信、失敗時の再送が動く。
  9. 承認モードを変更し、送信・編集の確認を取り消すと処理が実行されない。

VS Code APIの参照: https://code.visualstudio.com/api/references/vscode-api

チャット履歴

上部の「履歴」、または Toritsu AI: Show History で一覧を開き、会話を選ぶと続きから相談できます。 「新しいチャット」で別の会話を始められます。各行の「削除」と「履歴をすべて削除」は確認後に削除します。 直近10チャット、各チャット直近10往復、1メッセージ最大2万文字を保存します。上限を超えた文章は省略表示されます。 履歴は同じPC・同じVS Codeプロファイルのローカル拡張ストレージに共通保存します。アカウント・APIキー・接続先を変えても、再起動後も引き継ぎます。別PCや別のOSユーザー、別のVS Codeプロファイルへの同期は行いません。Settings Syncの対象には登録しません。 過去のキー・アカウント別の保存形式が残っている場合は、更新日時の新しい順に直近10チャットを統合します。共通履歴を削除した後に古い保存形式から復活することはありません。同じVS Codeプロファイルを使う人は共通履歴を閲覧できます。 保存するのは質問・回答・添付のファイル名や参照URLです。画像本体・ファイル全文のコンテキスト・取得資料の本文は履歴に保存しませんが、質問やAIの回答に含まれたコード・資料の引用は保存されます。 履歴はSecretStorageによる暗号化保存ではありません。機密情報を含む会話は、利用後に履歴から削除してください。

「+」追加メニュー

入力欄の「+」を押すと、画像のように上へ開くメニューから機能を選べます。矢印キーで選択し、Escapeで閉じられます。

  • ファイル / フォルダー:選んだローカルのUTF-8テキストを添付。本文を展開して確認し、個別に外せます。追加した時点ではAIへ送信せず、送信ボタンで本文を渡します。
  • 画像 / リンク:画像選択、公開Webページ・PDFの読み込みに対応します。
  • 目標:現在の会話の各送信に目標を付加します。目標表示を押すと編集でき、空欄で解除できます。自動で繰り返し実行する機能ではありません。
  • プランモード:コードを作る前に、要件・変更対象・実装手順・検証方法を相談します。メニューまたは入力欄の表示から解除できます。
  • スケッチ:マウスやペンで描き、PNG画像として添付します。画像対応モデルが必要です。

ファイルは最大20件・1件100KiB・合計8万文字。フォルダーは深さ5階層・最大500項目を調べ、隠しファイル、依存・ビルドフォルダー、ロックファイル、シンボリックリンク、バイナリなどを除外します。省略があれば画面に表示します。未保存の編集ではなくディスク上の内容を読みます。 ファイル本文は今回の送信のみで、送信成功後は添付から外れ、履歴にはファイル名を残します。質問・回答に引用された内容は履歴に残ります。 目標・プラン設定は新規チャット、履歴切替、キー削除で解除されます。外部プラグイン連携は今回の追加対象に含みません。

接続先とモデル

APIキー方式を使用し、ブラウザ版への自動引き継ぎは行いません。 API提供元のURLとキーを設定し、モデル一覧から選択してください。一覧API非対応時はモデルIDの確認が必要です。 添付されたライセンス一覧からモデルIDは特定できません。ライブラリの「Model License」はAIモデル名ではありません。

チャットの待機時間は toritsuAI.requestTimeoutSeconds(10〜600秒)、モデル一覧は toritsuAI.modelListTimeoutSeconds(5〜120秒)で変更できます。中止・キー削除は待機時間に関係なく通信を中断します。これらは拡張側の制限で、サーバーが返すHTTP 504等や、認証仕様の不一致を解決する設定ではありません。

セキュリティと運用の前提

  • 機密情報・個人情報を不用意に送信しないでください。選択編集は選択範囲だけでなくファイル全文・言語・パスを送信します。
  • 生成結果は必ず人間が確認し、著作権やライセンスにも注意してください。
  • 公開環境へ送れる情報と閉域環境だけで扱う情報を分け、接続先の利用条件・組織の運用ルールに従ってください。
  • 入力が再学習に使われないこと、通信経路の情報管理、学習データと著作権配慮の透明性を、利用するサービスの契約・規約・運用資料で確認してください。本拡張がこれらを保証するものではありません。条件を確認できない接続先には保護対象データを送らないでください。
  • APIキーはSecretStorageへ保存します。設定ファイル・ソースコードに書かないでください。通信はHTTPS前提です(ローカル開発のみHTTPを許可)。

接続部品と今後の拡張

正式な都立AIの外部API仕様、接続先、モデルIDは未確定です。OpenAI互換の仮実装であり、ブラウザ版のURLやログイン情報だけで接続できることは保証しません。 services/apiProtocol.ts の ApiProtocol が認証ヘッダー・リクエスト生成・レスポンス解析を分離しています。ToritsuAiClient の第3引数へ専用実装を渡すことで差し替えられます。未確定APIに関するTODOはこの部品に記載しています。

baseUrl と chatEndpoint で専用ゲートウェイのURL・パスを、authHeader と apiKeyPrefix で認証形式を設定できます。Azure等の追加パラメータ・認証フロー・プロキシの特殊要件は対応するクライアント実装を追加してください。Azureへの直接接続を実装済みという意味ではありません。 共通の LlmClient.complete を使うため、通信方式を変更してもコマンドとUIを維持できます。モデル一覧APIが独自仕様の場合は ApiModelCatalog も差し替えます。

今後の拡張案:

  • InlineCompletionItemProvider から共通クライアントを呼び、キャンセル対応のインライン補完を追加する。
  • 選択編集の beforeApply フックを使って差分確認画面を表示し、現在のバージョン検証後に適用する。
  • LlmClient のラッパーで監査ログを集約する。本文やキーは保存せず、利用規定に合わせて結果・時間など必要最小限の記録を扱う。現在、監査ログ送信は行わない。
  • 閉域向けゲートウェイや正式な都立AI認証はクライアント層に実装し、画面・コマンドから切り離す。

A1専用クライアント(正式API仕様未確認)

A1は、ここで利用している都立学校の授業用APIと同一のAPIとは扱いません。A1の詳細仕様は未確認のため、A1Client.chat() と独立したアダプターを追加しています。既存チャットの接続先をA1へ自動変更する機能ではありません。A1への実接続は未検証です。

  • 型: src/types/a1.ts
  • 呼び出し・モード別コンテキスト制御: src/services/a1/client.ts
  • 仮の通信形式: src/services/a1/adapter.ts
  • VS Code設定・SecretStorageからの注入: src/services/a1/settings.ts

toritsuAI.a1 配下に baseUrl, chatEndpoint, authHeader, authPrefix, fastModel, reasoningModel, timeoutMs を設定します。接続先とモデルには架空のA1既定値を設定していません。提供元で利用可能な値を指定してください。認証キーは toritsuAI.a1.apiKey という専用SecretStorage項目に保存し、授業用キーを流用しません。

拡張コードからの使用例(context は vscode.ExtensionContext):

import * as vscode from 'vscode';
import { A1_API_KEY_SECRET, createA1Client } from './services/a1/settings';

export async function exampleA1(context: vscode.ExtensionContext): Promise<string | undefined> {
  const key = await vscode.window.showInputBox({ prompt: 'A1接続先のAPIキー', password: true, ignoreFocusOut: true });
  if (!key?.trim()) return;
  await context.secrets.store(A1_API_KEY_SECRET, key.trim());
  const client = createA1Client(context.secrets);
  return client.chat({
    messages: [{ role: 'user', content: 'この関数の設計を検討してください。' }],
    mode: 'reasoning', temperature: 0.2, maxTokens: 4096
  });
}

fast はfastModel・16,000文字・既定出力1,024トークン、reasoning はreasoningModel・64,000文字・既定出力4,096トークンを使用します。これはアプリの方針でありA1公式の制限やモードではありません。fastModelには軽量モデル、reasoningModelには高性能モデルを管理者が設定します。性能・応答時間は実際のモデルとサービスに依存します。model や maxTokens をリクエストで明示すると既定値を上書きします。

コンテキスト超過時は古い会話から削除し、system指示と最新の依頼を保持します。それでも収まらない場合はエラーにし、コード本文を途中で切りません。仮アダプターはOpenAI互換JSONを送信し、架空の mode パラメータは送りません。ストリーミングは実装していません。

正式仕様が分かったら A1Adapter の認証・request・responseを実装して createA1Client(secrets, adapter) に注入できます。アダプターには解決済みのmodeも渡るため、公式modeパラメータがある場合に変換できます。URL等は設定注入を維持します。正式ストリーミング対応には、その仕様に合わせた通信処理の追加も必要です。

提示されたA1のデータ非学習・情報管理の前提は、任意のOpenAI互換接続先に自動的に当てはまるものではありません。実際の接続先の利用条件、入力データの扱い、運用ルールを確認してください。

バージョン更新とMarketplace自動公開

mainに実装・配布設定をpushすると、GitHub Actionsの Publish Extension がテスト、公開権限確認、パッチ番号の更新、VSIX作成、Marketplaceへの公開を実行します。package.jsonとpackage-lock.jsonの番号はbotが同時に更新します。botのGITHUB_TOKENによるpushは公開ワークフローを再実行しません。README・CODE.mdだけの変更では公開せず、Actionsから手動実行できます。

初回のみ、GitHubリポジトリの Settings → Secrets and variables → Actions → New repository secret で VSCE_PAT を登録してください。値は発行者 hrmcngs に公開できるアカウントのMarketplace Manage権限付きトークンです。都立AIのAPIキーとは別物です。チャットやソースコードに貼らないでください。MC Mod UtilityリポジトリのSecretは、このリポジトリには自動共有されません。

Secret未登録・権限不足・テスト失敗では番号を更新しません。ブランチ保護でbotのmainへのpushが拒否された場合も公開前に止まります。公開自体に失敗した場合、番号を記録するコミットだけが残ることがあります。原因を解消後、Actions → Publish Extension → Run workflow → main で再実行してください。その場合は次のパッチ番号を使用します。タグ付けだけ失敗した場合は、Marketplaceの公開状況を確認してください。作成したVSIXは各実行のArtifactsから取得できます。

Marketplaceから導入した利用者への更新は、VS Code側で拡張機能の自動更新が有効な場合に配信されます。ローカルファイルの編集だけでは公開しません。

  • Contact us
  • Jobs
  • Privacy
  • Manage cookies
  • Terms of use
  • Trademarks
  • Your Privacy Choices
  • Consumer Health Privacy
© 2026 Microsoft