基本ルール
- 普通のファイルだけを使います。 ファイルが記録中に大きくなることが、最も大きな動きです。対象は、ストリームの
records.jsonl、メディアファイル、実行のmembers.jsonlです。隠れたデータベース、ポインタファイル、バンドルはありません。 - 参照はパスと ID で示します。 実行は、いまそのパスにあるアセットを使います。ハッシュは固定しません。
- フォルダがプロジェクトです。 プロジェクトの構成は、ワークベンチに固定されていません。
- レベル。 すべての定義、ワールド、設定は、クラウドまたはローカルに、グローバル、ユーザー、プロジェクトの各レベルで置けます。広いレベルから具体的なレベルへ順にマージされます。
デバイス
devices/<id>/definition.tsx です。そのアセットは devices/<id>/assets/ に置きます(例: model.glb)。定義はコードです。ワークベンチがそれを実行し、定義された <device> を読み取ります。
定義では、機械の情報(name、manufacturer、model_number、product_url など)、3D の model、channels を指定します。
export default () => (
<device name="CNC 3018" manufacturer="…">
<channel id="gcode" dir="duplex" medium="records" format="gcode-chat" dialect="grbl" transport="serial" baud={115200} />
</device>
);dir は in、out、duplex のいずれかです。medium は records、video、audio、bytes のいずれかです。ワールドのユニットは、チャンネルを上書きできます。
ワールド
worlds/<id>/world.tsx です。一つの <world> を宣言するコードです。
export default () => (
<world name="Shop floor" kind="physical">
<space origin_mm={[0, 0, 0]} size_mm={[6000, 4000, 3000]} />
<unit uid="mill-1" name="Mill" device="../../devices/cnc-3018/definition.tsx" position={[1200, 800, 0]} rotation={0} />
</world>
);ワークベンチでの編集は、最小の変更としてコードに書き戻されます。
kind は physical または simulation です。ワールドは 3D シーン(model、.3d.tsx)を指定できます。シミュレーションの場合は、シミュレーションファイル(sim、.sim.json)も指定できます。ワールドは 3D モデルではなく、実行はワールドではありません。
実行とストリーム
runs/<run>/ は、一つのワールドでの一つの実行です。
| ファイル | 内容 |
|---|---|
run.json | id、world、kind(session、recipe、thread のいずれか)、started、ended、from(分岐元の実行と時刻) |
members.jsonl | 参加した人と物。参加するたびに追記されます |
steps.jsonl | レシピの手順 |
streams/<uid>.<channel>@<replica>/ | 一つのストリームです。stream.json と、そのデータ(records.jsonl、または一つの video.webm/.mp4、audio.webm/.mp4、data.bin)を含みます |
streams/chat@<replica>/ | 会話のスレッドです |
streams/sim@<replica>/、streams/sim-input@<replica>/ | シミュレーションのフレームと、それに適用された入力です |
evidence/ | 証拠として保存されたファイルです |
レコードは、JSON の一行です。
{ "t": 7.180, "seq": 41, "hlc": "001790561647180-00000", "src": "operator", "kind": "note", "text": "agent:night-shift: run_program", "by": "agent:night-shift" }src は device、sim、operator のいずれかです。kind は command、event、ack、reply、state、evidence、note のいずれかです。seq は必ず増えます。不明な状態は { "kind": "state", "status": "unknown" } と書きます。
ドキュメント
エディターのドキュメントは、それぞれ一つの JSON ファイルです。{ "format": "commandagi-document", "kind", "title", "meta", "body" } の形です。大きなアセットは、その横の <name>.assets/ フォルダに入ります。
| 拡張子 | 開くもの |
|---|---|
.3d.tsx | 3D 設計(パーツ、アセンブリ、シーン) |
.cam.tsx、.slice.tsx | CAM と スライシング モードの 3D 設計です。プログラムは、その横に .gcode として保存されます |
.nest.tsx | ベクター アプリのネスティング モード(レーザーとシートの加工)です。コードで書きます |
.draw.tsx、.paint.tsx、.img.tsx | 描画、ペイント、画像編集です。コードで書きます。ピクセルは、その横の画像ファイルに残ります |
.vid.tsx | 動画エディターです。コードで書きます。メディアは、その横のファイルに残ります |
.mus.tsx | 音楽です。コードで書きます |
.geo.tsx | 地経済のワークスペースです |
その他の形式
| ファイル | 内容 |
|---|---|
<name>.sch.tsx + <name>.pcb.tsx | コードで書いた回路です。回路図と、それを指定する基板です |
<name>.sheet.tsx、<name>.page.tsx、<name>.deck.tsx | コードで書いたワークブック、ページ、スライド デッキです。シート、ドキュメント、デッキのエディターが、編集のたびにファイルへ書き込みます |
<name>.sim.json | シミュレーションです |
<name>.trials.json | 実験です。パラメーターを変えた多数のシミュレーション実行です |
<name>.graph.json | グラフ(知識、メモリ)です |
<name>.dashboard.tsx | コードで書いたダッシュボードです。ペインと、それが表示するファイルを含みます |
<name>.geo.tsx | コードで書いた地経済のプロジェクトです |
<name>.opgraph.tsx | コードで書いたノード グラフです |
<name>.task.tsx、<name>.project.tsx | コードで書いたタスクとプロジェクトです |
<name>.market.jsonl | 市場のテープ、板、注文、ポジションです |
calendar/<calendar>/<event>.ics、contacts/<email>.vcf | カレンダーと連絡先です |
.xlsx、.md、.pdf、.ipynb、.gcode、.step、.stl、.glb など | そのまま開きます。種類ごとのエディターで開きます |
設定
設定は、VS Code と同じ settings.json ファイルです(コメントを使えます)。レベルごとに一つあり、広いレベルから具体的なレベルへ順にマージされます。順番は、クラウドとローカルのグローバル レベル、所属する組織、アカウント、このコンピューター(~/.commandagi/settings.json)、このプロジェクト(.commandagi/settings.json)です。
{
"workbench.theme": "dark",
"threads.agentControl": false,
"devices.lanListener": true,
"[.gcode]": { "editor.default": "gcode" }
}"[.ext]" のブロックは、一つのファイル拡張子の設定を上書きします。