Agent API (window.midas)
AI エージェントや Playwright などの外部ツールから MIDAS をプログラムで操作するための API です。
概要
window.midas は、ブラウザの DevTools コンソールや Playwright などの自動化ツールから MIDAS の機能にアクセスするための JavaScript API です。データセットの操作、タブの管理、統計モデルの実行、レポートの編集などを行えます。
API が利用可能なタイミング
- プロジェクト画面: すべてのメソッドが利用可能
- ランチャー画面:
help()のみ利用可能。他のメソッドはNO_PROJECTエラーを返す
使い方
DevTools コンソールから使う
ブラウザの DevTools を開き、コンソールで直接呼び出します。
// プロジェクトの状態を確認
const result = await window.midas.status();
console.log(result.data);
// { datasets: 3, tabs: 2, models: 1, ... }
Playwright から使う
const result = await page.evaluate(async () => {
return await window.midas.datasets.list();
});
console.log(result.data);
// [{ id: '...', name: 'Iris', rows: 150, columns: 5, type: 'primary' }, ...]
ヘルプを表示する
help() メソッドで、利用可能なメソッドの一覧とシグネチャを確認できます。
const help = window.midas.help();
console.log(help);
レスポンス形式
help() を除くすべてのメソッドは非同期で、APIResult<T> 型の統一されたレスポンスを返します。help() のみ同期メソッドで、HelpInfo オブジェクトを直接返します。
// 成功時
{
success: true,
message: "Found 3 datasets",
data: [...]
}
// 失敗時
{
success: false,
message: "Dataset not found",
error: {
code: "NOT_FOUND",
message: "No dataset with ID 'abc'",
suggestion: "Use datasets.list() to see available datasets"
}
}
warnings フィールドが含まれる場合もあります。処理自体は成功していますが、注意が必要な点を示します。
メソッド一覧
status()
プロジェクトの状態を取得します。
const result = await window.midas.status();
// result.data:
// {
// datasets: 3,
// derivedDatasets: 1,
// tabs: 2,
// models: 1,
// reports: 1,
// activeDatasetId: 'ds_001',
// activeTabId: 'tab_001'
// }
datasets
datasets.list()
プロジェクト内のデータセット一覧を取得します。
const result = await window.midas.datasets.list();
// result.data: [{ id, name, rows, columns, type }, ...]
type は 'primary'(読み込んだデータ)、'derived'(SQL やその他の操作で作成)、'ephemeral'(一時的)のいずれかです。
datasets.describe(id)
データセットの詳細情報を取得します。
const result = await window.midas.datasets.describe('ds_001');
// result.data:
// {
// id: 'ds_001',
// name: 'Iris',
// type: 'primary',
// rowCount: 150,
// columns: [
// { id: 'col_001', name: 'sepal_length', type: 'float64', scale: 'ratio' },
// { id: 'col_002', name: 'species', type: 'string', scale: 'nominal' },
// ...
// ]
// }
datasets.query(sql, name, options?)
SQL クエリを実行し、結果を新しい派生データセットとして保存します。
const result = await window.midas.datasets.query(
'SELECT species, AVG(sepal_length) as avg_sl FROM Iris GROUP BY species',
'Species Averages'
);
// result.data: { datasetId: 'derived_...', name: 'Species Averages', rowCount: 3, columnCount: 2 }
テーブル名はデータセット名から自動解決されます(大文字小文字を区別しません)。デフォルトでは同名の派生データセットが存在する場合に自動的に上書き(既存を削除して新規作成)します。options.overwrite を false にすると、同名の派生データセットが既に存在する場合にエラーを返します。
tabs
tabs.list()
開いているタブの一覧を取得します。
const result = await window.midas.tabs.list();
// result.data: [{ id, type, title }, ...]
tabs.open(config)
新しいタブを開きます。
// Graph Builder を開く
const result = await window.midas.tabs.open({
type: 'graph-builder',
title: 'My Graph',
datasetId: 'ds_001'
});
// result.data: { tabId: 'tab_...', type: 'graph-builder', title: 'My Graph' }
// SQL Editor を開く
const result2 = await window.midas.tabs.open({
type: 'sql-editor',
initialQuery: 'SELECT * FROM Iris LIMIT 10',
initialOutputName: 'Preview'
});
利用可能なタブタイプは help() で確認できます。
tabs.close(id)
タブを閉じます。
await window.midas.tabs.close('tab_001');
tabs.closeOthers(keepTabId)
指定したタブ以外をすべて閉じます。
const result = await window.midas.tabs.closeOthers('tab_001');
// result.data: { closedCount: 3 }
tabs.getGraphBuilder(tabId)
Graph Builder タブの設定を取得します。
const result = await window.midas.tabs.getGraphBuilder('tab_001');
// result.data: { tabId, graphType, datasetId, config, aspectRatio }
tabs.updateGraphBuilder(tabId, config)
Graph Builder タブの設定を更新します。
await window.midas.tabs.updateGraphBuilder('tab_001', {
graphType: 'custom',
datasetId: 'ds_001'
});
tabs.addGraphLayer(tabId, layer)
カスタムグラフにレイヤーを追加します。graphType が 'custom' のタブでのみ使用できます。
const result = await window.midas.tabs.addGraphLayer('tab_001', {
geom: { type: 'point' },
aes: { x: 'col_sepal_length', y: 'col_sepal_width', color: 'col_species' },
stats: [{ type: 'identity' }]
});
// result.data: { layerIndex: 0 }
Aesthetic マッピング (aes) ではカラム ID を指定します。固定色を使う場合は { fixedColor: '#FF0000' } 形式で指定できます。
tabs.updateGraphLayer(tabId, layerIndex, layer)
既存のレイヤーを部分更新します。
await window.midas.tabs.updateGraphLayer('tab_001', 0, {
geom: { type: 'line' }
});
tabs.removeGraphLayer(tabId, layerIndex)
レイヤーを削除します。
await window.midas.tabs.removeGraphLayer('tab_001', 0);
tabs.moveToPane(tabId, toPaneId)
タブを別のペインに移動します。layout.split() で作成したペインの ID を指定します。
await window.midas.tabs.moveToPane('tab_001', 'pane_002');
models
models.list()
訓練済みモデルの一覧を取得します。
const result = await window.midas.models.list();
// result.data: [{ id, type, name, datasetId, family }, ...]
models.run(config)
統計モデルを実行します。カラムは名前で指定でき、大文字小文字を区別しません。
const result = await window.midas.models.run({
type: 'glm',
datasetId: 'ds_001',
yColumn: 'sepal_length',
xColumns: ['sepal_width', 'petal_length'],
family: 'gaussian'
});
// result.data: { tabId: 'tab_...', type: 'glm', title: 'GLM' }
type は 'glm'、'glmm'、'random-forest' のいずれかです。family は GLM の場合に指定し、'gaussian'、'binomial'、'poisson'、'gamma'、'negative-binomial' から選択します。link でリンク関数('identity'、'logit'、'log'、'inverse'、'probit')を指定できます。GLMM の場合は groupColumn でグループ変数を指定します。
models.describe(id)
モデルの詳細を取得します。GLM、GLMM、Random Forest に対応しています。レスポンス構造はモデルタイプにより異なります(result.data.type で判別)。
GLM: 係数、適合度指標(AIC, BIC, deviance)、診断サマリーを返します。
GLMM: 固定効果(GLM の係数と同形式)、ランダム効果(グループ変数、分散、ICC、BLUP)、適合度指標(AIC, BIC, deviance, REML 対数尤度)、診断サマリーを返します。
Random Forest: タスクタイプ(classification/regression)、ハイパーパラメータ、変数重要度(保存されている場合)を返します。
const result = await window.midas.models.describe('model_001');
// GLM の例 - result.data:
// {
// type: 'glm',
// coefficients: [
// { variable: '(Intercept)', estimate: 2.25, se: 0.31, z: 7.23, p: 0.0001 },
// { variable: 'sepal_width', estimate: 0.60, se: 0.09, z: 6.45, p: 0.0001 },
// ...
// ],
// fit: { aic: 183.94, bic: 193.47, converged: true, ... },
// ...
// }
reports
reports.list()
レポートの一覧を取得します。
const result = await window.midas.reports.list();
// result.data: [{ id, name, elementCount }, ...]
reports.addContent(reportId, markdown)
レポートに Markdown テキストを追加します。
await window.midas.reports.addContent('report_001', '## Analysis Results\n\nThe model shows...');
reports.addModelSummary(reportId, modelId)
モデルのサマリーを Markdown としてレポートに追加します。GLM、GLMM、Random Forest に対応しています。
await window.midas.reports.addModelSummary('report_001', 'model_001');
layout
layout.split(config)
ペインを分割して新しい領域を作成します。
const result = await window.midas.layout.split({
tabId: 'tab_001',
direction: 'horizontal' // 'horizontal' または 'vertical'
});
// result.data: { newPaneId: 'pane_...', originalPaneId: 'pane_...' }
返された newPaneId を tabs.moveToPane() に渡すことで、タブを新しいペインに配置できます。
主要なエラーコード
| コード | 説明 |
|---|---|
NO_PROJECT | プロジェクトが読み込まれていない |
NOT_FOUND | 指定したリソースが見つからない |
COLUMN_NOT_FOUND | カラムが見つからない |
INVALID_TAB_TYPE | タブタイプが無効 |
INVALID_GRAPH_TYPE | カスタムグラフ以外でレイヤー操作を試みた |
INDEX_OUT_OF_RANGE | レイヤーインデックスが範囲外 |
DATASET_ALREADY_EXISTS | 同名のデータセットが既に存在する(overwrite: false 時) |
AMBIGUOUS_TABLE_NAME | テーブル名に case-insensitive で複数のデータセットがマッチした |
EXECUTION_ERROR | SQL 実行エラー |
UNSUPPORTED_MODEL_TYPE | 未対応のモデルタイプ |
参考
- ライブリファレンス: プロジェクト画面で
window.midas.help()を実行 - 型定義:
src/app/agent-api/types.ts