Plugin-SDK
Bauen Sie das fehlende Stück, in KeelOps.
Ein Plugin ist ein Ordner mit JavaScript, den KeelOps in seinen eigenen Prozess lädt: Es nutzt dessen Anmeldung, Berechtigungen und Aussehen, liest dessen Daten und erscheint dort, wo gearbeitet wird — im Menü, auf einer Projektseite, im Detail einer Aufgabe, in der oberen Leiste. Kein zweiter Server, keine Tokens zu verteilen, keine Abhängigkeiten zu installieren. Das SDK ist frei (AGPL), und ein Plugin gibt in seinem Manifest an, ob es die Pro-Edition voraussetzt.
Was Sie bauen können
Was nur Ihr Team braucht, mit dem ganzen Rest von KeelOps drumherum.
Eine Seite im Menü
Ein Eintrag mit eigenem Symbol, eine Seite, die sich in der Anwendung öffnet und deren Farben, das helle oder dunkle Design und die Sprache des Lesers übernimmt.
Mitten in der Arbeit
Ein Befehl auf einer Projektseite, ein Bereich im Detail einer Aufgabe, eine Schaltfläche bei den Anhängen eines Angebots, eine Kachel im Tagesüberblick: Anker bringen das Plugin dorthin, wo es gebraucht wird.
Eigene Daten
Eigene Tabellen in derselben Datenbank, mit ihren Migrationen, auf beiden Engines — SQLite und MariaDB. Das Backup von KeelOps nimmt sie mit.
Berichte und Release Notes
Die erledigte Arbeit wird zu einem Dokument, das man liest, geschrieben von KI-Modellen auf Ihrem Server: für Nutzer, für die Verwaltung, für den Vertrieb.
Werkzeuge für Assistenten
Ein Plugin bietet anderen Werkzeuge an, über den Kern: So lesen Claude, ChatGPT und Mistral die Qualitätsdaten von QABox, mit den Berechtigungen der fragenden Person.
Die Arbeit des Kerns, mit seinen Regeln
Eine Aufgabe anlegen, ein erzeugtes Dokument anhängen, eine eigene Gruppe von Personen haben: Das Plugin geht durch die Türen des Kerns, mit den gewohnten Berechtigungen, Benachrichtigungen und dem Verlauf.
Ein Beispiel
Die Aufgabenkarte: ein Plugin in einer Projektseite.
Sie hat keinen Menüeintrag: Sie öffnet sich über das ⋯-Menü eines Projekts. Sie liest die Aufgaben mit den Berechtigungen der betrachtenden Person, gewinnt mit den lokalen Modellen die Themen aus dem Text und zeichnet sie als Netz — Hierarchie, Zeitfenster, wer mit wem gearbeitet hat, und die Verbindungen, die sie vorschlägt.

Lokale KI
Die erledigte Arbeit wird zu einem Dokument, das man liest.
KeelOps weiß, was getan wurde, für wen, in welcher Woche. Ein Modell auf Ihrem eigenen Server — Ollama, nichts verlässt das Unternehmen — macht daraus Text für die, die ihn lesen müssen.
- Release Notes für die Nutzer eines Produkts, Woche für Woche, aufgeteilt in Neuerungen und Korrekturen.
- Der Monat eines Kunden für die Verwaltung: offene Anfragen, erledigte Arbeit, Stunden pro Tätigkeit, in einfachen Worten.
- Die Woche der Angebote für den Vertrieb: was sich bewegt hat, was feststeckt, wen man zurückrufen sollte.
- Die Abweichungen des Monats für die Qualität, mit den Maßnahmen, die sie geschlossen haben.
Das Modell schreibt die Sätze; was ins Dokument kommt und die Zahlen entscheidet der Code. Ohne Modell entsteht das Dokument trotzdem, mit den Titeln anstelle der Sätze, und sagt es. Es ist dasselbe Rezept wie bei den Release Notes, die KeelOps schon erzeugt — daneben eine echte, an die Nutzer eines Produkts verschickt.

Wo man anfängt
Ein Plugin in zwanzig Zeilen.
Ein Manifest, das sagt, wer es ist und wo es erscheint, und eine Funktion create(ctx), die vom Kern die Datenbank, die Sitzung und die Türen erhält und ihre Routen zurückgibt. Den Namen in PLUGINS eintragen, neu starten, und der Eintrag steht im Menü.
// 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
};
}
Code und Kommentare der Plugins sind auf Englisch, wie die Dokumentation; die Seiten werden mit einem einzigen Mechanismus des SDK in die fünf Sprachen von KeelOps übersetzt.
Die Regeln
Im Prozess, innerhalb der Regeln.
Eine eingezäunte Datenbank
Lesezugriffe laufen über eine Verbindung, die nicht schreiben kann; Schreibzugriffe nur in die Tabellen des Plugins, und die Sperre liest jede Anweisung, bevor sie sie durchlässt.
Die KeelOps-Sitzung
Jede Route geht durch die Sitzungsprüfung des Kerns. Portalkunden erreichen keine Plugins, und ein Plugin zeigt nur, was die Person sehen darf.
Alles über das SDK
Kein direkter Zugriff auf die Datenbank, die Serverumgebung oder die Modelle: Ein Test im Kern liest die Quellen jedes Plugins und stoppt bei einem verbotenen Import.
Ein- und ausschalten
Auf der Seite System sieht die Administration Version, Lizenz und Beschreibung jedes Plugins und schaltet es ohne Neustart aus. Ausgeschaltet verschwindet es; seine Daten bleiben.
Die Dokumentation.
Schritt-für-Schritt-Anleitungen, Beispiele, die Regeln und die vollständige API-Referenz, in elf Kapiteln. Sie ist auf Englisch, der Sprache derer, die Code schreiben.