Plugin OpenClaw: Tugas sederhana (simple-tasks)
Dokumen ini menjelaskan bagaimana proses plugin berjalan dari sisi gateway OpenClaw sampai eksekusi kode Anda.
Ringkasan
Plugin ini mendaftarkan beberapa tool (fungsi yang bisa dipanggil model/agen) untuk mengelola daftar tugas in-memory di dalam proses Node.js yang menjalankan gateway. Tidak ada basis data atau layanan eksternal: semua data hilang saat proses gateway dihentikan.
- ID plugin:
simple-tasks(harus cocok denganplugins.allowjika Anda memakai allowlist). - Entry:
./index.ts(diarahkan dari blokopenclaw.extensionsdipackage.json). - State: satu instance
createTaskStoredibuat saat modul extension dimuat; dipakai bersama oleh semua pemanggilan tool dalam proses yang sama.
Alur tingkat tinggi
sequenceDiagram
participant Admin
participant Gateway as Gateway OpenClaw
participant Ext as index.ts
participant Store as store.ts
participant Agent as Agen / model
Admin->>Gateway: plugins install + restart
Gateway->>Ext: muat extension, import default definePluginEntry
Ext->>Ext: hitung maxTasks, buat store
Ext->>Gateway: register(api) mendaftarkan tool
Agent->>Gateway: panggil tool mis. simple_task_add
Gateway->>Ext: execute(toolCallId, params, ...)
Ext->>Store: add / list / complete / ...
Store-->>Ext: hasil
Ext-->>Gateway: jsonResult(payload)
Gateway-->>Agent: AgentToolResult (content + details)
Tahap 1: Instalasi dan pemuatan gateway
- Paket npm berisi
package.jsondengan blokopenclawdanextensionsmenunjuk ke./index.ts. - Perintah seperti
openclaw plugins install <path>memasang plugin ke konfigurasi gateway. - Saat gateway start, runtime memuat file extension tersebut.
- Jika konfigurasi memakai allowlist plugin, id
simple-tasksharus diizinkan; jika tidak, extension tidak aktif.
Tahap 2: Eksekusi sekali saat modul dimuat
Saat index.ts pertama kali dievaluasi:
- Batas tugas dihitung dari variabel lingkungan
OPENCLAW_SIMPLE_TASKS_MAX(angka positif, dipotong maksimal 10.000). Jika tidak diset, dipakai 200. createTaskStore(maxTasks)membuat struktur internal berupa array tugas di closure (tidak diekspor ke dunia luar).- Schema Typebox (
simpleTaskAddParams, dll.) didefinisikan untuk dokumentasi argumen tool dan validasi di sisi runtime OpenClaw.
Langkah ini terjadi sekali per proses; restart gateway mengulang dari awal (store kosong lagi).
Tahap 3: definePluginEntry dan register(api)
Ekspor default adalah hasil definePluginEntry({ id, name, description, register }). OpenClaw memanggil register(api) saat plugin diaktifkan.
Di dalam register:
api.registerTool({ name, label, description, parameters, execute })menambahkan tool ke registry gateway.- Tool
simple_task_clearjuga menerima argumen kedua{ optional: true }agar diperlakukan sebagai tool opsional (misalnya tidak selalu ditawarkan ke model).
Setelah registrasi selesai, nama tool seperti simple_task_add dikenal oleh agen yang terhubung ke gateway ini.
Tahap 4: Satu kali pemanggilan tool (request → response)
Ketika agen memutuskan memanggil sebuah tool:
- Gateway memetakan nama tool ke fungsi
executeyang Anda daftarkan. - Argumen JSON dari pemanggilan divalidasi terhadap
parameters(Typebox). executedijalankan denganparamsyang sudah sesuai skema (di kode ditanggapi denganStatic<typeof ...>).- Hasil dikembalikan sebagai
jsonResult(payload)dariopenclaw/plugin-sdk/core, yang menghasilkanAgentToolResult: blok teks untuk model plusdetailsberisi payload yang sama (berguna untuk log/UI).
Alur ini sinkron dengan satu pemanggilan tool; beberapa chat atau sesi di gateway yang sama berbagi store yang sama jika mereka berada dalam proses gateway yang sama.
Isi tiap tool (ringkas)
| Tool | Peran di store | Catatan |
|---|---|---|
simple_task_add | add(title, notes) | Judul kosong setelah trim → { ok: false, reason: "title_empty" }. Penuh → reason: "limit". |
simple_task_list | list(filter) | filter default pending; total = jumlah semua tugas di memori. |
simple_task_complete | complete(task_id) | ID tidak ada → not_found. Sudah selesai → ok: true, already: true. |
simple_task_stats | stats() | Total, pending, done, maxTasks. |
simple_task_clear | clear() | Perlu confirm: "yes"; tool bersifat opsional di registry. |
Model data di src/store.ts
- Setiap tugas:
idunik,title,notes,status(pending|done),createdAt(ISO string). - Tugas baru dimasukkan di depan daftar (
unshift). - Tidak ada persistensi: hanya memori proses.
Metadata tambahan
openclaw.plugin.json: id, nama, deskripsi, dan skema konfigurasi untuk UI/docs (mis.maxTasks); nilai runtime batas tugas saat ini mengikuti env diindex.ts, bukan otomatis dari file ini, kecuali Anda nanti mengaitkannya di kode.
Pengembangan lokal
npm install
npx tsc --noEmit
Instal ke gateway (contoh):
openclaw plugins install /path/ke/openclaw-plugin-rag-lab
Lalu pastikan simple-tasks di allowlist (jika dipakai) dan restart gateway.