Die Regeln
- Nur einfache Dateien. Eine Datei wächst höchstens, während sie aufzeichnet — der
records.jsonleines Datenstroms, seine Mediendatei, diemembers.jsonleines Laufs. Es gibt keine versteckten Datenbanken, Verweisdateien oder Bündel. - Verweise sind Pfade und IDs. Ein Lauf verwendet die Datei, die jetzt an seinem Pfad liegt; nichts fixiert einen Hash.
- Der Ordner ist das Projekt. Der Aufbau eines Projekts ist nicht fest in der Werkbank verdrahtet.
- Ebenen. Jede Definition, Welt und Einstellung kann in der Cloud oder lokal existieren, auf globaler, Benutzer- und Projektebene, und sie werden von breit nach spezifisch zusammengeführt.
Geräte
devices/<id>/definition.tsx, mit seinen Dateien daneben in devices/<id>/assets/ (zum Beispiel model.glb). Eine Definition ist Code: Die Werkbank führt ihn aus und liest das <device>, das er deklariert.
Eine Definition nennt die Maschine (name, manufacturer, model_number, product_url …), ihr 3D-model und ihre 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 ist in, out oder duplex; medium ist records, video, audio oder bytes. Eine Einheit in einer Welt kann einen Kanal überschreiben.
Welten
worlds/<id>/world.tsx, Code, der genau eine <world> deklariert:
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>
);Jede Änderung in der Werkbank wird als kleinste Änderung zurück in den Code geschrieben.
kind ist physical oder simulation. Eine Welt kann eine 3D-Szene nennen (model, eine .3d.tsx) und, wenn sie eine Simulation ist, eine Simulationsdatei (sim, eine .sim.json). Eine Welt ist kein 3D-Modell, und ein Lauf ist keine Welt.
Läufe und Datenströme
runs/<run>/ ist ein Lauf in einer Welt:
| Datei | enthält |
|---|---|
run.json | id, world, kind (session, recipe oder thread), started, ended, from (der Lauf und die Zeit, aus denen er abgezweigt wurde) |
members.jsonl | wer und was teilgenommen hat, angehängt, sobald es beitritt |
steps.jsonl | die Schritte eines Rezepts |
streams/<uid>.<channel>@<replica>/ | ein Datenstrom: stream.json plus seine Daten — records.jsonl, oder eine video.webm/.mp4, audio.webm/.mp4 oder data.bin |
streams/chat@<replica>/ | die Unterhaltung einer Unterhaltung |
streams/sim@<replica>/, streams/sim-input@<replica>/ | die Frames einer Simulation und die Eingaben, die auf sie angewendet wurden |
evidence/ | als Nachweis aufbewahrte Dateien |
Ein Datensatz ist eine Zeile JSON:
{ "t": 7.180, "seq": 41, "hlc": "001790561647180-00000", "src": "operator", "kind": "note", "text": "agent:night-shift: run_program", "by": "agent:night-shift" }src ist device, sim oder operator; kind ist command, event, ack, reply, state, evidence oder note; seq steigt streng monoton. Ein unbekannter Zustand wird als { "kind": "state", "status": "unknown" } geschrieben.
Dokumente
Jedes Editor-Dokument ist eine JSON-Datei — { "format": "commandagi-document", "kind", "title", "meta", "body" } — mit großen Dateien in einem Ordner <name>.assets/ daneben.
| Erweiterung | öffnet in |
|---|---|
.3d.tsx | 3D-Design (Teile, Baugruppen, Szenen) |
.cam.tsx, .slice.tsx | 3D-Design im CAM- und Slicing-Modus; Programme werden daneben als .gcode gespeichert |
.nest.tsx | der Nesting-Modus der Vektor-App (Laser- und Blechaufträge), im Code |
.draw.tsx, .paint.tsx, .img.tsx | Zeichnen, Malen und Bildbearbeitung, im Code; Pixel bleiben Bilddateien daneben |
.vid.tsx | der Videoeditor, im Code; Medien bleiben Dateien daneben |
.mus.tsx | Musik, im Code |
.geo.tsx | Geoökonomie-Arbeitsbereiche |
Weitere Formate
| Datei | was sie ist |
|---|---|
<name>.sch.tsx + <name>.pcb.tsx | ein Schaltkreis im Code: der Schaltplan und seine Leiterplatte, die ihn nennt |
<name>.sheet.tsx, <name>.page.tsx, <name>.deck.tsx | eine Arbeitsmappe, eine Seite und eine Folienpräsentation, als Code geschrieben: Die Editoren für Tabellen, Dokumente und Präsentationen schreiben jede Änderung in die Datei |
<name>.sim.json | eine Simulation |
<name>.trials.json | ein Experiment: viele simulierte Läufe über eine Parameterreihe |
<name>.graph.json | ein Graph (Wissen, Gedächtnis) |
<name>.dashboard.tsx | ein Dashboard im Code: Bereiche und die Dateien, die sie zeigen |
<name>.geo.tsx | ein Geoökonomie-Projekt im Code |
<name>.opgraph.tsx | ein Knotengraph im Code |
<name>.task.tsx, <name>.project.tsx | eine Aufgabe und ein Projekt, im Code |
<name>.market.jsonl | das Band, das Buch, die Aufträge und die Positionen eines Marktes |
calendar/<calendar>/<event>.ics, contacts/<email>.vcf | Kalender und Kontakte |
.xlsx, .md, .pdf, .ipynb, .gcode, .step, .stl, .glb … | werden unverändert geöffnet, im Editor für ihre Art |
Einstellungen
Einstellungen sind settings.json-Dateien im Stil von VS Code (Kommentare erlaubt), eine pro Ebene, von breit nach spezifisch zusammengeführt: die globalen Ebenen in der Cloud und lokal, Ihre Organisationen, Ihr Konto, dann dieser Computer (~/.commandagi/settings.json) und dieses Projekt (.commandagi/settings.json).
{
"workbench.theme": "dark",
"threads.agentControl": false,
"devices.lanListener": true,
"[.gcode]": { "editor.default": "gcode" }
}Ein "[.ext]"-Block überschreibt die Einstellungen für eine Dateierweiterung.