# ワークスペースアプリの発表 (/docs/ja/posts/announcing-workspace-widgets)



# ワークスペースアプリの発表 [#ワークスペースアプリの発表]

本日、**ワークスペースアプリ**を提供開始します。ライブでインタラクティブなアプリを、エージェントやチャットと並べて Robutler のワークスペース・キャンバス上に直接配置できる仕組みです。

<!-- more -->

## 何が変わったのか [#何が変わったのか]

これまでワークスペースは、エージェントと対話し、後で見るコンテンツをピン留めしておくのに適した場所でした。アプリの登場により、それは小さな組み合わせ可能な部品から自分で組み立てる、本物のデスクトップになります。

* タブ内で動作する **Python カーネル**。numpy と matplotlib がプリインストール済みです。グラフを描くと、ターミナルのペインに埋もれるのではなく、キャンバス上に隣接するアプリとして現れます。
* 自分のマシン上のデーモンに接続する**ローカルシェル**。
* 繰り返しアクセスする本番環境のための **SSH アプリ**。従来のターミナルと同じ鍵とホストの管理方式ですが、より洗練されています。
* よく使うダッシュボードのための**ブラウザ埋め込み**。
* テキストとコードを素早く編集するための **CodeMirror エディタ**。
* キャンバス上で計画をスケッチするための**付箋**、**図形**、**コネクタ**（Figjam のようですが、エージェントのすぐ隣にあります）。
* そして、アーケード風のゲームをいくつか（スネーク、テトリス、スペースインベーダー）。ワークスペースは楽しくあるべきですから。

`+` ボタン → **アプリ** からカタログを検索して起動できます。

## エージェント開発者向けの新機能 [#エージェント開発者向けの新機能]

アプリは人間だけのものではありません。エージェントは次のことができます。

* **キャンバス上にアプリを生成する**。`present.*` ツール群を通じて行います。`present.image`、`present.code`、`present.url`、`present.chart`、`present.note`、および汎用の `present.widget` ヘルパーにより、エージェントは会話と並べて視覚的な成果物を投稿できます。
* **Python カーネルを操作する**。`workspace_widgets_invoke(id, 'eval' | 'run', ...)` を通じて行います。`stdout` / `stderr` / `display` イベントを購読すれば、matplotlib の図がリアルタイムで直接キャンバスへストリーミングされます。
* **シェルコマンドを実行する**。デーモンおよび SSH アプリ上で、同じ `workspace_widgets_invoke(id, 'run', ...)` ツールを使います。すべてのコマンドは監査用の `widget.agent_command` 通知を書き出すため、何が実行されたかを正確に確認できます。

エージェントファクトリーはこの新しい面に対応しています。いくつかのプロンプトのヒントからアプリを構築し、状態管理のために `host.kv` を配線し、ネイティブの iOS / Android 版 Robutler アプリ向けに DSL プロジェクションを出力できます。

## 既定は信頼、リスクはオプトイン [#既定は信頼リスクはオプトイン]

エージェントにシェルコマンドを実行させることは、トグルが常にオンであれば危険です。そこで私たちは逆の既定値を採用しました。すべてのデーモンおよび SSH アプリは、**エージェントによるコマンド実行の許可**がオフの状態で始まります。準備ができたらアプリごとにオンにし、終わったらオフに戻してください。

Python カーネルは既定でオンです。タブ内でサンドボックス化されているため、どれほど暴走したエージェントでも Pyodide の外には出られません。共有セッションでカーネルを固く制限したい場合のために、トグル自体は用意されています。

許可されたエージェントコマンドも、拒否されたコマンドも、すべて監査行を書き出します。通知フィードを開いて `widget.agent_command` を検索すれば、週次の履歴を確認できます。

## クロスプラットフォーム対応のアプリ [#クロスプラットフォーム対応のアプリ]

アプリは任意で**プロジェクション**を同梱できます。JS 関数からコンパイルされる、小さな宣言的ツリーです。プロジェクションは 3 つのことを可能にします。

. iframe 全体を読み込まずにキャンバス上でレンダリングされる軽量プレビュー（多数のアプリをピン留めしている場合、パフォーマンス面で大きな効果があります）。
. 今年後半に登場予定の iOS / Android 版 Robutler アプリにおける、ネイティブウィジェットの描画。アプリは定期的にプロジェクションをポーリングし、本物の iOS / Android ウィジェットタイルとして表示します。
. ドック用プロジェクション。アプリをドックにピン留めするとプロジェクションが引き継ぐため、iframe 全体をメモリに載せずに状態をひと目で把握できます。

今からアプリを書くなら、プロジェクションを返すことは任意ですが推奨されます。DSL の文法については[ホスト SDK ガイド](/guides/widgets/host-sdk/)をご覧ください。

## 試してみる [#試してみる]

[ワークスペース](/workspace)を開き、`+` ボタンをタップして**アプリ**を選んでください。あるいはエージェントにこう頼むだけでも構いません。「NVDA の株価チャートを見せて」。Python カーネルが起動し、matplotlib の図が現れ、エージェントがその隣にキャプションを付けるのを見届けてください。

皆さんが何を作るのか、楽しみにしています。

Robutler チーム
