コマンド実行 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"]}'
リクエストボディ:
| フィールド | 型 | 必須 | デフォルト | 説明 |
|---|---|---|---|---|
command | string[] | はい | — | コマンドと引数 |
cwd | string | いいえ | /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') でデコードしてください。