SDK dei plugin
Costruisci il pezzo che manca, dentro KeelOps.
Un plugin è una cartella di JavaScript che KeelOps carica nel suo stesso processo: usa la sua autenticazione, i suoi permessi e il suo aspetto, legge i suoi dati, e compare dove si lavora — nel menu, nella pagina di un progetto, nel dettaglio di un task, nella barra in alto. Niente secondo server, niente token da distribuire, niente dipendenze da installare. L'SDK è libero (AGPL), e un plugin dichiara nel manifesto se richiede l'edizione pro.
Cosa puoi costruire
Quello che serve solo a voi, con tutto il resto di KeelOps attorno.
Una pagina nel menu
Una voce con la sua icona, una pagina che si apre dentro l'applicazione e ne prende i colori, il tema chiaro o scuro e la lingua di chi guarda.
Dentro il lavoro
Un comando nella pagina di un progetto, un riquadro nel dettaglio di un task, un bottone fra gli allegati di un'offerta, una casella nella giornata: le ancore portano il plugin dove serve.
Dati tuoi
Tabelle proprie nello stesso database, con le loro migrazioni, sui due motori — SQLite e MariaDB. Il backup di KeelOps le porta con sé.
Report e note di rilascio
Il lavoro chiuso diventa un documento che si legge, scritto dai modelli AI sul tuo server: per gli utenti, per l'amministrazione, per i commerciali.
Strumenti per gli assistenti
Un plugin offre strumenti agli altri, attraverso il core: così Claude, ChatGPT e Mistral leggono i dati della qualità di QABox, con i permessi di chi chiede.
Il lavoro del core, con le sue regole
Creare un task, allegare un documento generato, avere un gruppo di persone: il plugin passa dalle porte del core, con i permessi, le notifiche e lo storico di sempre.
Un esempio
La mappa dei task: un plugin dentro la pagina di un progetto.
Non ha una voce nel menu: si apre dal menu ⋯ di un progetto. Legge i task con i permessi di chi guarda, ne ricava i temi dal testo con i modelli locali, e li disegna come una rete — gerarchia, finestre di tempo, chi ha lavorato con chi, e i legami che suggerisce di aggiungere.

AI locale
Il lavoro fatto diventa un documento che si legge.
KeelOps sa cosa è stato fatto, per chi, in quale settimana. Un modello che gira sul tuo server — Ollama, niente che esca dall'azienda — lo trasforma in testo per chi deve leggerlo.
- Note di rilascio per gli utenti di un prodotto, settimana per settimana, divise in novità e correzioni.
- Il mese di un cliente per l'amministrazione: richieste aperte, lavoro svolto, ore per attività, detto in parole.
- La settimana delle offerte per i commerciali: cosa si è mosso, cosa è fermo, chi richiamare.
- Le non conformità del mese per la qualità, con le azioni che le hanno chiuse.
Il modello scrive le frasi; cosa entra nel documento e i numeri li decide il codice. Senza modello il documento esce lo stesso, con i titoli al posto delle frasi, e lo dice. È la stessa ricetta delle note di rilascio che KeelOps genera già — accanto, una vera, mandata agli utenti di un prodotto.

Da dove si comincia
Un plugin in venti righe.
Un manifesto che dice chi è e dove compare, e una funzione create(ctx) che riceve dal core il database, la sessione e le porte, e restituisce le sue rotte. Si aggiunge il nome a PLUGINS, si riavvia, e la voce è nel menu.
// plugins/Hello/plugin.mjs
export const manifest = { nome: "Hello", versione: "0.1.0", ui: { voce: "Hello", icona: "puzzle" } };
export async function create(ctx) {
const { json } = await import(`${ctx.sdkDir}/http.mjs`);
return {
routes: [
["GET", /^\/api\/summary$/, async (req, res) => {
const user = await ctx.sessionUser(req); // the real KeelOps session
if (!user) return json(res, 401, { error: "no session" });
const row = await ctx.db.get( // the KeelOps database, read-only
"SELECT COUNT(*) AS open FROM Task t JOIN TaskStatus s ON s.id = t.statusId " +
"WHERE t.assigneeId = ? AND s.isClosed = 0 AND t.deletedAt IS NULL", user.id);
json(res, 200, { name: user.name, open: row.open });
}],
],
staticDir: new URL("./ui", import.meta.url).pathname, // a page, inside the app
};
}
Il codice e i commenti dei plugin sono in inglese, come la documentazione; le pagine si traducono nelle cinque lingue di KeelOps con un meccanismo solo, fornito dall'SDK.
Le regole
Dentro il processo, dentro le regole.
Database recintato
Le letture passano da una connessione che non sa scrivere; le scritture solo nelle tabelle del plugin, e il cancello legge ogni istruzione prima di lasciarla passare.
La sessione di KeelOps
Ogni rotta passa dalla guardia di sessione del core. I clienti del portale non arrivano ai plugin, e un plugin mostra solo quello che la persona può vedere.
Tutto dall'SDK
Niente accesso diretto al database, all'ambiente del server o ai modelli: una prova nel core legge i sorgenti di ogni plugin e si ferma su un import proibito.
Si accende e si spegne
Dalla pagina Sistema l'amministratore vede versione, licenza e descrizione di ogni plugin e lo spegne senza riavviare. Spento sparisce; i suoi dati restano.
La documentazione.
Guide passo passo, esempi, le regole e il riferimento completo dell'API, in undici capitoli. È in inglese, la lingua di chi scrive codice.