メインコンテンツまでスキップ

コマンド実行 API

ワンショット実行

コマンドを実行して結果を取得します。

curl -X POST https://api.nanoterm.dev/api/workspaces/ws_a1b2c3d4/exec \
-H 'Authorization: Bearer nt_xxx' \
-H 'Content-Type: application/json' \
-d '{"command": ["npm", "test"]}'

リクエストボディ:

フィールド必須デフォルト説明
commandstring[]はいコマンドと引数
cwdstringいいえ/workspaceワークスペース内の作業ディレクトリ。絶対パス必須、.. は拒否

レスポンス: 200 OK

{
"stdout": "PASS src/index.test.ts\nTests: 12 passed, 12 total\n",
"stderr": "",
"exitCode": 0
}

シェルパイプライン(パイプ・リダイレクト・&&)を使う場合は ["bash", "-lc", "<one-liner>"]command に渡してください。 ランタイムは argv を直接実行し、シェルを介しません。

対話型ターミナル (WebSocket)

WebSocket 経由で PTY セッションを接続します。

ws://api.nanoterm.dev/api/workspaces/ws_a1b2c3d4/terminal

メッセージプロトコル

すべてのメッセージは JSON 形式です。バイナリデータ(stdin/stdout)は base64 エンコードされます。

クライアント → サーバー:

// キーボード入力
{ "type": "stdin", "data": "bHMgLWxhCg==" }

// ターミナルリサイズ
{ "type": "resize", "cols": 120, "rows": 40 }

サーバー → クライアント:

// ターミナル出力
{ "type": "stdout", "data": "dG90YWwgMTYK..." }

// エラー
{ "type": "error", "message": "Workspace not running" }
注記

data フィールドは base64 エンコーディングです。ブラウザでは atob() で、Node.js では Buffer.from(data, 'base64') でデコードしてください。