Documentació tècnica — la porta dels agents
Una taula de mescles que un agent d'edició pot llegir i un arbre que respon amb la seva pròpia llei.
OpenMixer inclou un servidor MCP per stdio. Les seves eines llegeixen una taula de mescles en marxa a través del contracte REST de la mateixa taula i llegeixen el disseny que governa el repositori (el mapa d'especificacions, les decisions, els paranys, les bateries de conformitat, el registre de feines) en el moment en què se'ls demana. No decideix res: cada resposta són dades que la taula o l'arbre ja tenen, amb l'indicació d'on surten.
01
Com s'executa.
És un paquet de l'espai de treball, @openmixer/mcp-server. Parla MCP per stdio: un client MCP engega el procés i s'hi comunica per la canonada. No hi ha cap port ni cap dimoni, ni res que calgui deixar en marxa.
# Des de l'arrel de l'espai de treball.
pnpm -r --filter "@openmixer/mcp-server..." build
# stdio: un client MCP l'engega i s'hi comunica per la canonada.
node packages/mcp-server/dist/main.js
El servidor puja des del seu directori de treball fins a l'arrel de l'espai de treball i llegeix les lleis d'aquell arbre. Així, una segona còpia de treball respon amb els seus propis registres de disseny i no hi ha res empaquetat dins el paquet.
| Variable | Significat | Per defecte |
|---|---|---|
| OPENMIXER_CONSOLE | base URL of the console the console_*/rig_* tools talk to; named in every result | http://127.0.0.1:8080 (core's DEFAULT_WEB_PORT) |
| OPENMIXER_KNOWLEDGE_MCP | Streamable-HTTP URL of the knowledge MCP rulings_search asks first | a site-local address |
02
16 eines, en dues meitats.
Una meitat és la porta REST de les entitats tal com és ara: la llista, una fila, els seus recorreguts declarats, un fotograma d'una fila amb mesura. L'altra meitat és el material de disseny del mateix arbre. La taula següent es genera a partir de la taula d'eines registrades del paquet, no s'escriu a mà. La prova del mateix paquet rebutja qualsevol descripció que s'hagi desviat del registre.
La taula de mescles
| Eina | Arguments | Què respon |
|---|---|---|
| console_discover | filter | The served entity roster from the console's own contract (OPTIONS /api/): every path template it serves, which rows are pump-fed (measured only while watched), and which carry declared travels and defaults. Optional substring filter over paths. |
| console_get | path | GET one row by path (e.g. /channel/input/3/fader). The console's status, Allow header and body come back as they are. |
| console_options | path | OPTIONS one row: what it MAY be — its methods, fields, travels (limit/taper), writability and instances, as the console declares them. |
| console_patchescriu | path, body, confirm | PATCH one row with a JSON delta. A REAL WRITE to a desk, sent exactly once and never retried; the console's answer — status, Allow, and the body with its fault, refusal and reason — is returned verbatim. A fire on a confirm-gated row (a channel-config apply that would move gain/trim/pan) is REFUSED BY THE CONSOLE with 409 CONFIRM_REQUIRED while its preview lists moves and the operator's sign-off is on; the body carries the preview. Re-call with confirm: true — it rides the delta as the row's own confirm argument — to apply anyway. |
| console_health | — | The console's health row: engine, graph and xrun state as it reports them. Reads /health when the contract serves it; answers the console's no-such-resource fault when it does not. |
| console_warnings | — | The console's current warnings. Reads /warnings when the contract serves it; answers the console's no-such-resource fault when it does not. |
| console_meters | strips | One reading of the meter frame, decoded through the windows /meters declares on OPTIONS, projected to the strips asked for (channel keys like "input/1"; all strips when omitted). A pump-fed row measures only while watched, so an unmeasured GET is followed by ONE watch that is closed the moment the first measured frame lands — no stream is held. |
| console_takes | — | The recorder's take library. Reads /takes when the contract serves it; answers the console's no-such-resource fault when it does not. |
| console_history | — | Where the desk sits in its journal: the undo/redo cursor. Reads /history/cursor when the contract serves it; answers the console's no-such-resource fault when it does not. |
L'equip
| Eina | Arguments | Què respon |
|---|---|---|
| rig_journal | — | The history ring: the journal newest-first, with the cursor and the ring's bound. Reads /history when the contract serves it; answers the console's no-such-resource fault when it does not. |
| rig_links | — | The patchbay as the console serves it: the external route memory (/patchbay/external, the links the graph showed) and the node view (/patchbay/nodes). Read through REST rows only; a row the contract does not serve is named under "unserved". |
El disseny que governa
| Eina | Arguments | Què respon |
|---|---|---|
| law_governs | paths | The governing spec and the law line for each path, from the design gate’s spec map with the design gate's own matching (a shell glob as a prefix, first row wins). An ungoverned path is reported as such. |
El corpus de disseny
| Eina | Arguments | Què respon |
|---|---|---|
| rulings_search | query, limit | Search the design corpus (the design specs and the working notes, archive excluded). Mode "rag" asks the knowledge MCP on the cluster when it is reachable AND indexes an openmixer source; otherwise mode "local" ranks paragraphs in the tree. Every result names its mode and what searched. |
Els paranys
| Eina | Arguments | Què respon |
|---|---|---|
| traps_recall | query, limit | The traps that have cost real time, from the "traps" section of the tree’s own working notes, ranked against the query (empty query: all of them). Read at call time; a tree without the file says so. |
Abans d'una edició
| Eina | Arguments | Què respon |
|---|---|---|
| compliance_preflight | paths | Before editing: for each path, the governing spec and law, the traps its words recall, and the conformance/ratchet suites that reach it (with the evidence: an import, a named prefix, or a tree walk). The suites listed are the ones to run after the edit. |
El registre de feines
| Eina | Arguments | Què respon |
|---|---|---|
| jobs_proofs | job | The job-level round-trip ledger as data: an internal design record, row by row, with the tier number, whether the job is proven (tier 1) or owed, the test a proven row cites and the shadow probe the deploy gate runs for it. |
03
Només una eina escriu i ho fa una sola vegada.
Quinze de les setze eines llegeixen. La setzena, console_patch, envia una escriptura real a una taula real. Per això envia exactament una petició, no la reintenta mai i retorna l'estat de la taula de mescles, la seva capçalera Allow i el cos tal com han arribat. Un refús és la decisió de la taula i es retorna literalment, sense interpretar-lo: és el mateix contracte amb què treballen tots els altres clients. La taula de mescles decideix i el que torna és el que ha decidit.
L'eina no retén res pel seu compte. Una escriptura que dispara una operació controlada per la fitxa confirms de la mateixa taula (l'exemple és aplicar una configuració de canal que mouria el guany, el trim o el pan) s'envia igualment. La taula la refusa amb CONFIRM_REQUIRED mentre la previsualització mostri moviments i la conformitat de l'operador estigui activada. El refús torna amb la previsualització al cos, com qualsevol altra resposta. Si es torna a cridar amb confirm: true (que viatja dins el delta com a argument de confirmació de la mateixa fila), s'aplica, perquè ara a l'agent ja se li ha mostrat què accepta. El control és de la taula, de manera que un agent, un navegador i una superfície OSC reben el mateix refús i responen de la mateixa manera: no hi ha cap política al costat del client que calgui mantenir sincronitzada.
La fila amb mesura és l'únic cas en què una lectura no és un simple GET. Una fila alimentada per bombament només mesura mentre algú l'observa. Per això, a un fotograma sense mesurar el segueix una sola observació que es tanca en el moment en què arriba el primer fotograma mesurat. No queda cap flux obert.
Les eines es proven sobre una taula de mescles falsa amb les formes de la real. Es comproven a través del cable amb valors, no amb formes: una lectura de −20 dBFS s'ha de descodificar com a −20. Una taula en directe no forma part d'aquesta bateria de proves.
04
Les pautes de procés que porta l'arbre.
Al costat del servidor, el repositori guarda la seva disciplina de treball en documents llegibles, un per tema, desats al costat del codi que regeixen. Cadascun existeix perquè alguna cosa va anar malament per l'altre camí. Es llisten aquí perquè descriuen com es construeix aquest projecte, no perquè el lector els hagi d'executar.
- design-first
- Resoldre el disseny que governa una tasca abans de llegir o escriure una sola línia. Són tres preguntes (a quina primitiva pertany això, si necessita una paraula nova al vocabulari i per què no és una cosa existent configurada d'una altra manera) més una cerca del tema a les especificacions i al registre abans de construir res. La setmana que la va originar va perdre gran part del temps tornant a deduir decisions que ja eren escrites.
- design-ruling
- Registrar una decisió allà on l'automatització la llegeix. Quan s'escriu o s'esmena una especificació, canvia un camp del contracte o una llei en substitueix una altra, la decisió va als registres de disseny i al mapa d'especificacions que consulta el control previ a l'edició. Si no, a la persona següent que toqui aquell fitxer li arribarà la llei antiga.
- false-signals
- La norma de la casa per a un senyal que no observa el que diu observar. Una bateria de proves en verd sobre una funció buida, un grep que no troba res perquè està trencat, una sonda que informa de silenci perquè apuntava al canal equivocat: cadascun ens ha costat una nit. La norma que imposa és demostrar que una comprovació és capaç de detectar una presència abans de creure el que diu d'una absència.
- round-trip-proof
- Una funció està acabada quan s'ha mesurat de punta a punta tota la feina de l'operador, no quan en passen les parts. És la pauta que cal llegir abans de donar res per acabat. També és la que regeix qualsevol mesura d'àudio que doni un nul, una ràtio o una sorpresa: una prova de guany necessita un senyal real ben per sobre del soroll de fons perquè la diferència vulgui dir alguna cosa.
- openmixer-dev-discipline
- L'estil de la casa en un sol lloc: com entra un canvi a git, com ha de ser el TypeScript i el C, les regles dels components de la superfície i de les seves traduccions, quin nivell de proves li toca a cada canvi i com es manté parametritzat l'empaquetament. El primer principi és l'autoritat de l'operador: la taula de mescles exposa el cost d'una opció i deixa que l'operador triï, en lloc de vetar-la. L'única excepció, molt acotada, és qualsevol cosa irreversible que afecti persones que no són a la taula.
- lane-discipline
- Com es manté separable la feina en paral·lel. Cada línia de treball té el seu worktree i la seva branca, fa commits sovint amb camins explícits, guarda les proves al repositori en lloc d'un fitxer de proves temporal i no fusiona mai la seva feina a la branca d'integració. Es va escriure després que un repartiment de feina perdés una nit de troballes que només existien fora del repositori.
- settle-gate
- El procediment que posa una branca d'integració a la taula de mescles en directe. Expressament, no és una cosa que pugui invocar una línia de treball: compila abans de desplegar, verifica amb una pregunta que només pot respondre el commit nou (no amb una comprovació de salut) i talla l'àudio real si s'equivoca.
El repositori encara no és públic, així que aquests documents viuen en un arbre que avui no podeu clonar. S'anomenen en lloc d'ometre'ls amb un resum, perquè el nom és el que permetrà comprovar la descripció el dia que s'obri.