KASUGAI Canvas v6.17.0

AI ツール仕様 — 内蔵AIが制御できる全55ツールの定義

🤖 概要

内蔵AI(Gemini または OpenAI互換プロバイダの function/tool calling)が呼び出せるツールは web/app.js の CHAT_TOOLS に宣言された 55 種です。このページはその宣言の仕様ミラーであり、CHAT_TOOLS を変更したらここも更新してください。概要・体験説明は V3: AI 連携、キー供給経路は 【API】内蔵AI(Google 連携・AI) を参照。

実行モデル:ユーザーの発言 → AI がツール呼び出しを返す → ブラウザが kasugaiApi 経由で実行 → 結果を AI に返す、の function calling ループ(OpenAI互換選択時は宣言を OpenAI tools 形式へ変換し、往復結果は tool メッセージとして返送)。ツール実行の上限往復数は既定10(管理 → AI → チャット の「ツール実行の上限往復数」または AI への指示で setToolMaxSteps により 1〜20 で変更可)。上限到達時はユーザーに継続確認が出て、承認なら同じ往復数を1枠追加して続行、拒否なら中断します。推論はすべてブラウザ側。破壊的ツールは実行前に確認ダイアログを挟み、最終判断はユーザーにあります。

提供条件(activeChatTools で絞り込み)

条件対象ツール
常時(50ツール)下記以外のすべて
Google Maps API キー設定時searchPlaces・openStreetView
ローカルサーバー版(capabilities の fileWrite)listDataFiles・saveDataFile・deleteDataFile
ローカルサーバー版(capabilities の pluginWrite)publishPlugin
GSI Maps エンジン(?engine=gsimaps・調整中)listGsiLayers・importGsiLayers・setGsiLayerOpacity・moveGsiLayer・removeGsiLayer・listGsiCatalog・addGsiLayer・listGsiSakuzu・importGsiSakuzu・listGsiBasemaps・setGsiBasemap・importGsiCatalog・setGsiLayerHidden・removeGsiSakuzu・getGsiElevation・getGsiShareUrl・setGsiGlobe

公開環境には「その人のセッション内に閉じる安全な機能」のみが渡ります(ティア分けはリポジトリの AGENTS.md「AI 機能のティア分け」参照)。

📷 カメラ・視点(6)

ツール引数(*=必須)説明
flyTolatitude*, longitude*, height, pitch, headingカメラを指定座標へ移動。height/pitch 省略時はドローン視点(対象地上+200m・-30°)。pitch=-90 で真上俯瞰
flyToFeaturelatitude*, longitude*, height, pitch, heading指定座標が画面中央に来るよう後退補正して移動。地点・地物を見せる場合はこちら
zoomToExtentwest*, south*, east*, north*緯度経度の矩形範囲が画面に収まるようカメラを移動(矩形ズーム相当)
flyToPresetname*登録済みカメラプリセット名で移動(listCameraPresets で確認)
listCameraPresetsなし登録済みカメラプリセット名の一覧を取得
getCameraなし現在のカメラ位置(緯度・経度・高さ・方位・ピッチ)を取得

🗂 レイヤー(9)

ツール引数説明
listLayersなし登録レイヤー一覧(名前・表示状態・適用中の絞り込み条件 filter)を取得。条件別凡例を持つレイヤーは legend(label・visible)も返す
setLayerFiltername*, filter*クエリ系レイヤー(duckdb/sql/gpkg 等)の絞り込み条件を変更。レイヤー行の ⏷ ボタンと同じ操作。sql 型はクエリ全文、それ以外は WHERE 式を指定(空文字で解除・sql 型は空文字不可)
setLayerVisiblename*, visible*レイヤー名指定で表示/非表示を切替
setLayerLegendVisiblename*, label*, visible*style=(QML) の分類・段階・ルールレンダラを持つレイヤーで、凡例の条件別シンボル単位に表示/非表示を切替。レイヤー行の凡例チェックボックスと同じ操作。label は listLayers の legend で確認
focusLayername*レイヤー名または ID 指定で全体が収まるようカメラ移動。非表示レイヤーは自動表示してから移動
addLayertitle*, target*, type, optionsベクターレイヤーを追加して即適用。type: geojson(既定)/layer/geoparquet/flatgeobuf/gpkg/duckdb/sql。target は URL または DATA/ 相対パス(sql は SELECT 文)。options は where=/limit=/format=/bbox=auto/proxy=on/render=primitive/attr=出典 等を | 区切りで指定。http(s) URL は実行前に実在確認され、到達不能なものは拒否される。インスペクター設定に反映されるためユーザー明示時のみ
addGeoJsonLayertitle*, url*GeoJSON レイヤーを URL 指定(DATA/ 相対パスまたは外部 URL)で追加して即適用。http(s) URL は実行前に実在確認され、到達不能なものは拒否される。他形式は addLayer
applyInspectortext*インスペクターの設定テキスト(.kasc 形式)を登録・適用。新規追加されるデータレイヤー行の http(s) URL は適用前に実在確認され、到達不能なものがあると拒否される。設定全体が上書きされるためユーザー明示時のみ。書式は .kasc 設定仕様
exportInspectorなし現在の設定を .kasc ファイルとしてエクスポート(ダウンロード)

🗾 GSI Maps エンジン(17・調整中)

iframe 内の地理院地図(同一オリジンの vendored 版)を GSI.GLOBALS 内部 API 経由で操作する専用ツール群。vendored コードは無改変で、すべて中間層からのフック。レイヤーの「表示中」状態は地理院地図側の表示中レイヤーパネルと常に同期する。現在調整中: 内部 API 依存のため AI 制御の安定化が難しく、ツール仕様・挙動は今後変更される可能性があります。

ツール引数説明
listGsiLayersなし地理院地図で現在表示中のレイヤ一覧(id・タイトル・タイルURL・透過率・取込可否)を取得
importGsiLayersids表示中レイヤーを Canvas レイヤー(xyz: 行)として取り込み、インスペクタ(.kasc)へ追記して永続化。ids に取り込むレイヤの id またはタイトルを指定(省略時は取込可能な全レイヤー)。積み順・透過率・非表示状態を再現。cocotile(geojsonタイル)・KML・時系列表示は未対応で unsupported として返る
setGsiLayerOpacityid*, opacity*表示中レイヤーの透過率を変更(表示中レイヤーパネルの透過率スライダと同じ操作。ベースマップにも可)。opacity は不透明度 0〜1
moveGsiLayerid*, position*表示中レイヤーの積み順を変更。position: top/front=最前面・bottom/back=最背面・up/down=1段・数値=位置index
removeGsiLayerid*表示中レイヤーを解除(レイヤツリーでチェックを外すのと同じ。ベースマップは対象外)
listGsiCatalogfilterレイヤカタログ(layers.txt 全件)を id/タイトル部分一致で検索。URL・layerType・表示中か・確認要否(needsConfirm)を返す
addGsiLayerid*, hiddenカタログから直接表示(レイヤツリーのチェックと同じ)。hidden=true で非表示のまま追加。要確認レイヤは confirmPending で返り地理院地図側ダイアログの承認が必要
listGsiSakuzuなし作図(sakuzu)リストを取得。ユーザーが GSI 側で描いた点線面・テキストを importGsiSakuzu で取り込める。ours=true は Canvas 管理レイヤ由来で取込対象外
importGsiSakuzuindices作図を GeoJSON として Canvas レイヤーへ取り込む(元の作図は二重描画防止で非表示化)。ローカルサーバー版では DATA/ へ保存し geojson: 行で .kasc 永続化、静的配信環境では一時レイヤー。indices 省略時は全作図
listGsiBasemapsなし地理院地図のベースマップ(地図の種類: 標準地図/淡色地図/白地図/写真/English 等)の一覧を取得。active=GSI 側で表示中・selected=Canvas のベースマップ選択中・imported=.kasc の base: 行あり
setGsiBasemapid*地理院地図のベースマップを id/タイトルで切替える。対応する base: 行が .kasc に無ければ自動で追記され、他エンジンでも同じベースマップが再現される。汎用 setBasemap も .kasc 未登録の GSI ベースマップ名はこのツールへフォールバックする
importGsiCatalogids*レイヤカタログから id/タイトル指定で xyz: 行として直接取り込む(GSI 側に表示していなくても可)。表示中レイヤの取り込みは importGsiLayers、ベースマップは setGsiBasemap を使う
setGsiLayerHiddenid*, hidden*表示中レイヤーを解除せず一時的に非表示/再表示(表示中レイヤーパネルの非表示チェックと同じ操作。ベースマップは対象外)
removeGsiSakuzuindices作図(sakuzu)を削除。indices は index またはタイトル(省略時は全作図)。Canvas 管理レイヤ由来(ours=true)は対象外
getGsiElevationlatitude*, longitude*地理院地図の標高 API で指定地点の標高(m)を取得。source はメッシュ種別(例: 5mメッシュ(レーザ))
getGsiShareUrlなし現在の視点・ベースマップ・表示中レイヤを maps.gsi.go.jp の共有 URL(#z/lat/lon/&base=&ls=&disp= 形式)として返す。実サイトで同じ状態が開ける
setGsiGlobeon*地理院地図の Globe(3D)表示へ進入/復帰。true で現在の視点・ベース・表示中レイヤを引き継いで Globe へ、false で「2D地図に戻る」と同じ復帰(Globe の視点を引き継ぐ)

🌍 ベースマップ・地形・効果(6)

ツール引数説明
listBasemapsなし選択可能なベースマップ一覧と現在の選択を取得(「ベースマップなし」none・「ベースマップ透明」transparent の特殊モードを含む)
setBasemapname*ベースマップを名前または ID で切替。none=ベースマップなし、transparent=ベースマップ透明(地表・大気・背景を透明に)も指定可
setTerrainenabled*地形(DEM)表示の ON/OFF
setEffectname*, enabled*表示効果の ON/OFF。name は lighting(地形照明)/ translucency(地下透過)/ fog(霧)/ atmosphere(大気)/ shadows(影)/ depthTest(地形深度テスト)
setUndergroundtransparency, dive地下表示の設定。transparency は地表の透過率 0〜1、dive は地下への移動許可
setCliptype*カメラ中心に断面クリップを作成・解除。type は ns / ew / h / clear

✈ Fly・プレゼン(7)

ツール引数説明
listFlyPathsなし登録済みフライパス(巡視ルート)一覧を取得
playFlyPathname*フライパスを名前または番号で再生し Fly モードで自動走行
stopFlyなしFly モード・フライパス再生を停止して Orbit(3D)モードへ戻る
toggleDrawModeなしDraw モード(地図上へのルート描画)を ON/OFF
addFlyPathname*, geojson*, speed, height, pitch, loop, viewGeoJSON LineString から飛行ルートを作成。手描きルートと同じ IndexedDB ストアに保存されるためリロード後も復元される。speed は km/h・省略時はルート総距離から自動設定(80〜2000)。view は camera(一人称・既定)/ center(ルート中心俯瞰)。「○○を巡るルート」生成→playFlyPath の連携に使う
flyRoutewaypoints*, name, agl, spacing, speed, height, pitch, loop, view, autoplay, provider地点A→B(経由地可)の飛行ルートを自動生成して再生。waypoints は座標・地名(query: ジオコーディング)・読込済み地物名(feature: vectorSearch)を混在指定可。経由地間を直線補間し地形標高をサンプリングして各点に高度を焼き込む(山岳部でも埋まらない)。speed/agl 省略時は総距離から自動決定(80〜2000km/h・50m〜10km)。「AからBまで飛んで」「Cを経由して」等に使う高レベルツール
setFlySettingsname, speed, agl, height, pitch, loop, viewフライパスの速度・地上高・ピッチ等を変更(name 省略時は再生中/選択中のルート)。agl は地形追従の目標地上高で高度オフセットへ自動変換される。「もっと速く」「地上50mで飛んで」等に使う。描画ルートは設定が GeoJSON へ保存されリロード後も維持

🔍 検索(4)

ツール引数説明
searchLocationquery*, provider住所・地名・施設名を検索し候補(名称・住所・緯度経度)を返す。provider: gsi/google/places/yahoo(省略時は検索タブの選択。google=Geocoding+Places ハイブリッド、places=Places のみ)。結果へは flyTo/flyToFeature で移動
vectorSearchquery*読み込み済みベクトルデータの属性を検索し、該当する属性名・値・位置を返す。結果の緯度経度へは flyToFeature で移動
searchPlaces 🔑query*Google Places API(テキスト検索)で施設・店舗・観光地等を検索。Maps API キー設定時のみ
openStreetView 🔑latitude*, longitude*指定座標の Google ストリートビューを別タブで開く。Maps API キー設定時のみ

🔑 = Google Maps API キー必須(管理 → Google Maps で設定)

📄 共有・資料生成(3)

ツール引数説明
getShareUrlなし現在のカメラ位置・プロジェクトを含む共有 URL を取得
buildShareUrllatitude*, longitude*, height, pitch, heading, project指定座標・視点の共有 URL を組み立てる。省略引数は現在視点を使用。資料の各節に視点別パーマリンクを埋め込む用途
showReporttitle*, content*, format生成した資料をモーダル表示+ダウンロード可能にする。「資料を作って」等の指示に対し、平面・内容・解決案の構成で content に本文(Markdown/HTML、各節に視点パーマリンクを含める)

架空・サンプル GeoJSON を生成する場合は、feature の properties に dataSource・generatedAt・aiGenerated:true の出典スタンプが必須付与されます(システム指示)。

📁 プロジェクト(2)

ツール引数説明
listProjectsなし切替可能なプロジェクト一覧を取得
switchProjectprojectId*プロジェクトを切替。レイヤー・カメラプリセット等の設定全体が入れ替わるためユーザー明示時のみ

🔄 データ取得・加工(4)

ツール引数説明
fetchDataurl*外部 URL からテキスト/JSON/CSV 等を取得(CORS 許可サイトのみ・約400KB で打切り)。取得データは runCode で加工し addDataLayer で表示
getLayerGeoJsonname*読み込み済みレイヤーの地物を GeoJSON で取得。属性検索より前にデータ全体が必要な時・変換加工の入力に
addDataLayertitle*, geojson*GeoJSON オブジェクトを新規レイヤーとして直接表示(URL 不要の一時レイヤー・.kasc には含まれない)。feature の properties に simplestyle 属性(marker-color/marker-size/stroke/fill/fill-opacity/description 等)で色分け・ポップアップ制御
removeDataLayername*addDataLayer で追加した一時レイヤーを削除

🗃 データファイル(3)

ツール引数説明
listDataFiles 💻なしプロジェクトの DATA/ フォルダ内ファイル一覧(名前・サイズ・更新時刻)
saveDataFile 💻name*, content*テキストを DATA/ へ保存(.geojson 等・サブフォルダ可)。既存ファイルの上書き時はユーザー確認
deleteDataFile 💻name*DATA/ 内ファイルを削除。実行前にユーザー確認

💻 = ローカルサーバー版のみ(capabilities の fileWrite)

🧩 コード実行・プラグイン(7)

ツール引数説明
runCodecode*ブラウザ内サンドボックスで JavaScript を実行し戻り値と console 出力を返す。データ加工・集計・座標計算に。api.<関数名>(kasugaiApi と同じ)で地図操作が非同期呼出し可。DOM・localStorage・外部 fetch は不可
savePluginid*, code*, name, layer, enableプラグインをブラウザ内 IndexedDB に保存・有効化する自己拡張ツール。code は export async function init(api, manifest){} 形式の ES モジュール。layer 指定でプラグイン専用レイヤー自動登録。保存前にコード確認ダイアログ。既存 id は上書き+再読み込み
listPluginsなし起動中・保存済みプラグイン一覧(id/name/source/enabled/lastError)と、plugin: 行で指定できる同梱プラグインカタログ(catalog: id/name/version/auto)
getPluginCodeid*保存済みプラグインのコードと設定を取得(修正→ savePlugin 再保存の修正ループ用)
removePluginid*保存済みプラグインを削除。確認ダイアログあり
setPluginEnabledid*, enabled*保存済みプラグインの有効/無効切替
publishPlugin 💻id*保存済みプラグインを配布用 PLUGIN/ に書き込み全利用者に公開(ローカルサーバー版のみ・取り消しは開発者作業)。確認ダイアログあり

プラグインの昇格ルート:AI 生成 → IndexedDB(ブラウザローカル草稿)→ .kasp エクスポート可 → レビュー後にローカル版で PLUGIN/ へ公開。

🖥 UI 操作(2)

ツール引数説明
listUiControlsfilterアプリ内の操作可能な UI 要素(ボタン・入力欄・セレクト・パネルタブ等)を target/kind/label/value/checked/options/disabled/hidden 付きで列挙。filter は target・ラベルの部分一致。レイヤー行等の動的生成行は含まない(専用ツールで操作)。data-ui-bridge 属性を持つ同一オリジン iframe 内の要素は #<iframeId>/ 接頭辞付きの target で列挙される(gsimaps エンジンでは地理院地図側 UI が対象)
controlUitarget*, action, valueUI 要素を直接操作する汎用ツール。target は listUiControls の target(要素 id・[data-panel="…"] 等・#<iframeId>/<セレクタ> 形式の iframe 内要素)。action: click(ボタン/タブ/リンク押下・チェックボックストグル)/ set(値設定。checkbox は boolean、select は option 値、入力欄は文字列・数値)/ get(現在値・表示テキスト取得)。省略時は value 指定で set、ボタン系で click、それ以外で get。DEM ソース・ドレープ設定・3D Tiles 描画パラメータ・言語・各種モデル選択など、専用ツールを持たない設定項目すべてに使える。ファイル/フォルダピッカーは開けるが選択自体はユーザー操作

専用ツールが無い UI 項目はこの2ツールで網羅する設計です。新規 UI は「id またはタブ用 data-* 属性+ click/change/input ハンドラ」で実装すればツール追加なしに AI 制御可能になります(リポジトリの AGENTS.md「UI方針」参照)。パスワード欄は値を返しません。

⚙ システム(4)

ツール引数説明
checkUpdateなしアプリの最新バージョンを確認
installUpdateなし最新版をインストール(更新がある場合のみ有効)
shutdownAppなしアプリを停止。確認ダイアログが出るのでユーザーが最終判断。破壊的操作のためユーザー明示時のみ
setToolMaxStepssteps*ツール実行の上限往復数を 1〜20 で変更(Gemini 設定パネルの「ツール実行の上限往復数」と同じ設定)。「上限を上げて/下げて」等の指示に使用

🔗 関連仕様