@creezio/tasks
v0.26.1
Published
Tâches natives plateforme Creezio — kanban human/ai/hermes + runs + AI (hors PluginTaskRecord product-hub)
Readme
@creezio/tasks
Rôle
@creezio/tasks fournit les tâches plateforme Creezio :
- store mince
PlatformTasksStorepourcore.db/api-kernel; - kanban unifié
human/ai/hermes; - synchronisation Hermes kanban ;
- runs IA (
task_runs) avec logs, HITL, quotas et runner host ; - adapter assistant pour
create_task/list_tasks; - outils MCP host-only pour piloter les collaborateurs IA ;
- UI kanban (
TasksKanbanClient,TaskDetailSheet,AiActivityPanel).
Ce package est distinct des PluginTaskRecord du Product Hub.
Périmètre kit vs marque
Kit
- Définit les statuts, exécutants, invariants d'assignation et opérations kanban.
- Gère les runs IA, logs agent, SSE, relance, annulation et human-in-the-loop.
- Fournit
createTasksHonoRoutes()etcreateTasksApiMount(). - Fournit les tools MCP host
list_ai_collaborators,create_ai_task,get_ai_task,get_ai_run_logs,answer_ai_question. - Fournit les tools MCP workspace (
mcp-workspace-tools.ts, câblés prod via@creezio/app-runtime— architecture « Hermes cerveau / task runner mains ») :workspace.open_tab,workspace.list_tabs,workspace.web_list_targets|click|type|scroll|read|screenshot(ai_user_idobligatoire — l'action s'exécute dans le workspace du collaborateur IA, garde allowlist*_WEB_ALLOWED_HOSTSen UX + défense en profondeur hostweb_host_not_allowed), et le HITL asynchroneplatform.ask_human/platform.get_human_answer(tâche kanban + run HITL détaché). - Fournit l'adapter assistant
createAssistantTasksAdapter().
Marque
- Appelle
configureTasksBrand()au boot. - Fournit DB, users, présence desktop, workspace Electron, navigation/permissions, external tabs, screencast et auth.
- Monte les routes Hono sous
/api/v1/tasks. - Monte le store
ApiMountsi elle expose la surface platform-core. - Configure les variables d'environnement préfixées pour le runner IA.
- Branche les tools MCP dans son serveur host.
Installation/build
npm run build -w @creezio/tasks
npm run typecheck -w @creezio/tasksExports :
@creezio/tasks: store, config, kanban, runner, Hono, MCP.@creezio/tasks/ui: kanban, sheet détail et activité IA.
Configuration détaillée
configureTasksBrand
import { configureTasksBrand } from "@creezio/tasks";
configureTasksBrand({
productName: "Ma Marque",
productDomain: "CRM métier",
hermesSourceLabel: "Ma Marque CRM",
hermesSkill: "brand-crm",
envPrefix: "BRAND_AI",
idempotencyPrefix: "crm",
assistantIdempotencyPrefix: "asst",
taskHref: "/taches",
examplePaths: ["/clients", "/dashboard"],
db,
users,
presence,
workspace,
navigation,
externalTabs,
screencast,
auth,
});Bindings requis :
db:getWriteDb,queryAll,queryOne,tableExists.users:getById,list,getOwner,ready.presence: état desktop et bridges en ligne.workspace: création/navigation workspace IA, tabs externes, web actions, screencast.navigation: permission requise par chemin et vérification ACL.externalTabs: résolution d'URL/site externe vers workspace params.screencast: viewer count et subscription frames.auth: session depuis Hono et helpers owner/impersonation.
Env runner IA
Le préfixe vient de envPrefix. Pour envPrefix: "BRAND_AI", le package lit notamment :
BRAND_AI_RUNNER_ENABLED=0|false|nopour désactiver le runner ;BRAND_AI_MAX_RUNS_PER_DAY;BRAND_AI_MAX_TOKENS_PER_DAY;BRAND_AI_HITL=1|truepour forcer le human-in-the-loop ;- variables modèle/limites utilisées par
ai-task-agentviatasksEnv/tasksEnvNumber.
Les valeurs non configurées utilisent les defaults du kit ou restent illimitées selon le cas.
Hermes
Le kanban Hermes utilise les fonctions de @creezio/assistant (hermesKanbanConfigured, create/list/patch/dispatch/cron). Les tâches executorKind: "hermes" n'ont pas d'assigné local et peuvent être dispatchées immédiatement.
Assistant brand binding
import { configureAssistantBrand } from "@creezio/assistant";
import { createAssistantTasksAdapter } from "@creezio/tasks";
configureAssistantBrand({
// autres bindings...
tasks: createAssistantTasksAdapter(),
});API publique avec exemples
Kanban service
import {
createTask,
listTasks,
tasksByColumn,
updateTask,
} from "@creezio/tasks";
const { task } = await createTask({
title: "Préparer la relance client",
body: "Analyser les échanges et proposer un message.",
executorKind: "ai",
assigneeUserId: "user_ai_1",
createdBy: "owner_1",
source: "ui",
});
await updateTask(task.id, { status: "in_progress" });
const board = tasksByColumn(listTasks({ includeCancelled: false }));Routes Hono
import { Hono } from "hono";
import { createTasksHonoRoutes } from "@creezio/tasks";
const api = new Hono();
api.route("/tasks", createTasksHonoRoutes());Endpoints sous /tasks :
GET /metaGET /POST /syncGET /:idPOST /PATCH /:idDELETE /:idPOST /:id/launchGET /runs/:runId,/runs/:runId/logs,/runs/:runId/streamPOST /runs/:runId/retry,/resume,/cancelGET /activity/:userId,/activity/:userId/streamGET /screencast/:aiUserId/streamPOST /runner/tickPOST /logs/purge
ApiMount platform-core
import { createTasksApiMount, createSqliteTasksStore } from "@creezio/tasks";
const store = createSqliteTasksStore({ db });
const mount = createTasksApiMount(store);Surface mince :
GET /listouGET /POST /createouPOST /GET|PATCH|DELETE /:uuid
L'acteur vient de x-creezio-user-id ou body.userId.
Runner IA
import {
enqueueAiRunForTask,
ensureAiRunnerLoop,
processAiTaskQueue,
} from "@creezio/tasks";
const run = enqueueAiRunForTask("task_id");
ensureAiRunnerLoop();
void processAiTaskQueue();MCP host tools
import { createAiTaskHostMcpTools } from "@creezio/tasks";
const registered = createAiTaskHostMcpTools({
registerTool: server.registerTool.bind(server),
getActorUserId: () => currentApiKey.user_id,
includeListTasks: true,
});UI
import { TasksKanbanClient } from "@creezio/tasks/ui";
export default function TasksPage() {
return <TasksKanbanClient />;
}Flux
Création tâche
- L'UI, l'assistant ou MCP appelle
createTask. - Le kit valide l'exécutant :
human: assigné humain si fourni ;ai: assigné IA actif obligatoire ;hermes: pas d'assigné local.
- La tâche est écrite dans le schéma local et upsertée dans le store plateforme.
- Si Hermes est choisi, le kit crée/synchronise la tâche Hermes.
- Si IA est choisie et lancée, un run est enfilé.
Runner IA
ensureAiRunnerLoopdémarre le poller.claimNextQueuedRunsélectionne un run.- Le runner vérifie quotas, modèle LLM et bridge desktop host.
- Il ouvre/assure le workspace de l'IA avec les ACL du collaborateur.
runAiTaskAgentexécute les étapes et écrit les logs.- Le run finit
succeeded,failed,cancelledou attend HITL.
MCP host
- La marque enregistre les tools avec
createAiTaskHostMcpTools. - L'actor MCP doit être owner pour créer des tâches IA.
create_ai_taskcrée et lance la tâche si demandé.get_ai_task/get_ai_run_logsservent au polling externe.answer_ai_questionreprend un run HITL.
Intégration marques
- Appeler
configureTasksBrandavant toute route, UI ou runner. - Monter
createTasksHonoRoutes()sous/api/v1/tasks. - Brancher
createAssistantTasksAdapter()dansconfigureAssistantBrand. - Démarrer le runner uniquement sur le host serveur/desktop adéquat.
- Garder les permissions dans l'adapter
navigation, pas dans le prompt. - Exposer les tools MCP host seulement côté host, avec actor owner.
- Prévoir les migrations SQL
tasksettask_runsavant d'ouvrir l'UI.
Dépendances
- Runtime :
@creezio/api-kernel,@creezio/assistant,@creezio/auth,@creezio/platform-core,@creezio/shell-ui,hono,zod. - Peer UI :
react,lucide-react,date-fns,sonner. - Intégrations : Hermes via
@creezio/assistant, desktop workspace via bindings marque.
