MediFlow locale — pacchetto privato 0.1.0
Target: Codex CLI 0.163.0 e Claude Code 2.1.306. Un solo server MCP e
Supervisor, profilo fisso plugin_local_ui. Il pacchetto apre la UI separata;
non incorpora una cartella nell'host, non restituisce CF/storia alla chat e
non permette al modello di ragionare su dati che non riceve.
Preparazione locale
Node 24.x, secondo .nvmrc e engines >=24 <25, dipendenze locali dal lockfile e build sorgente ammessa sono
prerequisiti. Non usa npx né scarica runtime al primo utilizzo. Da una
checkout sintetica pulita e ammessa:
export MEDIFLOW_DATA_DIR=/percorso/assoluto/archivio-sintetico
export MEDIFLOW_E2E_DISABLE_LEGACY_COPY=1
npm ci
npm run build
node scripts/package-local-ui-plugin.mjs /percorso/assoluto/plugin-pronto "$MEDIFLOW_DATA_DIR"
Il preparatore verifica il ledger esistente prima di creare il pacchetto,
fissa eseguibile Node, revisione e archivio in runtime.json. I manifest
portabile e Codex avviano ./bin/mediflow-local-ui: il launcher POSIX legge il
Node fissato e avvia src/launch.mjs, indipendentemente dal PATH del client.
Il percorso Node deve essere assoluto, eseguibile e rappresentabile in JSON
senza escape (niente virgolette, backslash o caratteri di controllo); gli spazi
sono ammessi. Un percorso mancante o non eseguibile produce soltanto
MediFlow navigation unavailable. su stderr. L'ingresso successivo è
source-runtime.mjs local-ui, che verifica nuovamente il payload e la revisione
prima del Supervisor. File o ledger alterati, runtime assente e input extra
falliscono con errore fisso. Non avvia MCP bare e non aggiunge un HTTP generico.
La compatibilità delle patch 24.21.0 e 24.22.0 è verificata con fixture
sintetiche di packaging e avvio. Il verificatore canonico conserva i controlli
su major, ABI, piattaforma, architettura, ledger, identità e SQLite :memory:;
il pacchetto continua a richiedere il percorso fisico Node fissato alla preparazione.
Il pacchetto sorgente senza runtime.json è una template, non un'installazione
operativa. Una build bloccata dal controllo dati non va aggirata: la preparazione
richiede una build pulita ammessa. Non modifica le impostazioni globali dei client.
Configurazioni dei client
plugin.json/mcp.json sono il formato portabile Agent Plugins 1.0.0.
.codex-plugin/plugin.json usa .mcp.codex.json con lo stesso launcher relativo.
.claude-plugin/plugin.json usa .mcp.claude.json e ${CLAUDE_PLUGIN_ROOT}.
Identità, versione e istruzioni sono gli stessi. Il manifest Claude mantiene
il comando Node assoluto e il placeholder nativo già qualificati; il nuovo
launcher POSIX riguarda soltanto i manifest portabile e Codex. Per Claude Code,
caricamento temporaneo:
claude --plugin-dir /percorso/assoluto/plugin-pronto
Codex richiede il proprio caricamento locale del plugin; l'installazione
persistente va approvata separatamente. Per uno smoke con sola configurazione
MCP di sessione, usa il Node assoluto di runtime.json e il percorso assoluto
del file src/launch.mjs: questo prova il raccordo MCP, non il caricamento
del plugin o la UI nativa dell'app Codex. CLI, app Codex, Claude Chat/Cowork e
Desktop sono superfici distinte. Nessuna directory submission o ammissione
clinica è inclusa; WUL-759 riserva il contatto a Leonardo.
Percorso del medico
Chiedi “Apri la ricerca locale di MediFlow”. Il tool accetta soltanto un
intento fra search, identity, history, prescribing e torna sempre
continue_in_mediflow. La ricevuta non attesta apertura o un esito clinico.
Il primo comando attende soltanto la readiness tecnica privata del Web, con
timeout; non attende lookup o rendering di un paziente.
Prima del login, o senza un documento connesso, si apre l'URL locale fisso
/plugin-local-ui, senza query o frammenti. Login/PIN, ricerca anche per CF e
scelta del paziente restano in MediFlow. Apri la cartella: un successivo intento
richiede una conferma locale sulla cartella visibile. Anagrafica riusa
PatientIdentityLens, storia la Timeline clinica con fonti. La guida distingue
farmaco, prestazione e protesica e rimanda ai gestori esistenti. Il medico
resta responsabile di terapia, conferma, firma e trasmissione.
Nessun intento viene conservato o ripreso alla riconnessione/login. Le
notifiche sono volatili, scadono dopo 15 secondi e vengono ritirate al cambio
contesto, revoca o disconnessione. L'interfaccia verifica l'epoch corrente prima
e dopo la conferma asincrona; non rinnova automaticamente un'intenzione superata.
Il profilo non compone operazioni, owner, lease o porte cliniche. Il precedente
grant profilo none rimane distinto e non viene chiamato local-only.
Limiti del confine
Nessun dato paziente nei risultati, metadati, risorse, progress, errori o URL del raccordo. La diagnostica Web non viene inoltrata all'host in questo profilo. Un identificativo scritto direttamente nella chat è già fuori da questo canale. Altri strumenti dell'host possono accedere a file, browser o screenshot se hanno autorità propria: il plugin non isola il Mac e non garantisce anonimato. Non usarli come ripiego a un tool negato.
Ogni istanza possiede i propri figli Web/MCP: non adotta processi preesistenti,
non crea broker residente e termina soltanto i figli posseduti. Rimuovere questo
pacchetto non elimina archivio o chiavi. Aggiornamento/rimozione e qualifica
clinica completa restano risultati separati, WUL-758/WUL-738. Il prototipo
mediflow-synthetic rimane indipendente e contiene soltanto esempi inventati.
Nomi tool nel client Claude Code
Nel server MCP l'identità resta mediflow.local_ui.navigate.v1. Claude Code
2.1.306 normalizza il nome esposto all'agente con underscore. In una
configurazione MCP di sessione con server mediflow-local-ui, l'allowlist usa
esattamente mcp__mediflow-local-ui__mediflow_local_ui_navigate_v1, non il
nome con i punti. Il file di sessione deve usare Node e launcher assoluti,
senza placeholder riservati al caricamento del plugin:
{"mcpServers":{"mediflow-local-ui":{"type":"stdio","command":"/percorso/node24","args":["/percorso/plugin-pronto/src/launch.mjs"]}}}
claude --print --no-session-persistence --setting-sources '' --tools '' \
--strict-mcp-config --mcp-config /percorso/sessione-mcp.json \
--allowedTools mcp__mediflow-local-ui__mediflow_local_ui_navigate_v1 \
'Chiama soltanto il tool MediFlow con intent search e riporta lo stato tecnico.'
Questo è uno smoke del raccordo MCP, distinto dal caricamento del plugin.
La validazione del manifest non prova l'invocazione dell'agente. Un limite
429 usage_limit_reached interrompe la qualifica: non autorizza cambi di
account, overage, pagamenti o nuovi tentativi automatici. Lo stato locale del
client può aggiornarsi anche con impostazioni caricate solo per la sessione;
non ripristinare file globali sopra lavoro concorrente.