@creezio/tasks 0.22.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (106) hide show
  1. package/README.md +279 -0
  2. package/dist/.creezio-src-hash.json +4 -0
  3. package/dist/ai-task-agent.d.ts +47 -0
  4. package/dist/ai-task-agent.d.ts.map +1 -0
  5. package/dist/ai-task-agent.js +558 -0
  6. package/dist/ai-task-agent.js.map +1 -0
  7. package/dist/ai-task-runner.d.ts +78 -0
  8. package/dist/ai-task-runner.d.ts.map +1 -0
  9. package/dist/ai-task-runner.js +645 -0
  10. package/dist/ai-task-runner.js.map +1 -0
  11. package/dist/api-mount.d.ts +4 -0
  12. package/dist/api-mount.d.ts.map +1 -0
  13. package/dist/api-mount.js +91 -0
  14. package/dist/api-mount.js.map +1 -0
  15. package/dist/assistant-adapter.d.ts +7 -0
  16. package/dist/assistant-adapter.d.ts.map +1 -0
  17. package/dist/assistant-adapter.js +96 -0
  18. package/dist/assistant-adapter.js.map +1 -0
  19. package/dist/brand/config.d.ts +165 -0
  20. package/dist/brand/config.d.ts.map +1 -0
  21. package/dist/brand/config.js +39 -0
  22. package/dist/brand/config.js.map +1 -0
  23. package/dist/env-bridge.d.ts +12 -0
  24. package/dist/env-bridge.d.ts.map +1 -0
  25. package/dist/env-bridge.js +33 -0
  26. package/dist/env-bridge.js.map +1 -0
  27. package/dist/hono-routes.d.ts +8 -0
  28. package/dist/hono-routes.d.ts.map +1 -0
  29. package/dist/hono-routes.js +563 -0
  30. package/dist/hono-routes.js.map +1 -0
  31. package/dist/index.d.ts +29 -0
  32. package/dist/index.d.ts.map +1 -0
  33. package/dist/index.js +21 -0
  34. package/dist/index.js.map +1 -0
  35. package/dist/kanban-service.d.ts +136 -0
  36. package/dist/kanban-service.d.ts.map +1 -0
  37. package/dist/kanban-service.js +580 -0
  38. package/dist/kanban-service.js.map +1 -0
  39. package/dist/mcp-host-tools.d.ts +59 -0
  40. package/dist/mcp-host-tools.d.ts.map +1 -0
  41. package/dist/mcp-host-tools.js +326 -0
  42. package/dist/mcp-host-tools.js.map +1 -0
  43. package/dist/mcp-workspace-tools.d.ts +15 -0
  44. package/dist/mcp-workspace-tools.d.ts.map +1 -0
  45. package/dist/mcp-workspace-tools.js +338 -0
  46. package/dist/mcp-workspace-tools.js.map +1 -0
  47. package/dist/memory-store.d.ts +3 -0
  48. package/dist/memory-store.d.ts.map +1 -0
  49. package/dist/memory-store.js +75 -0
  50. package/dist/memory-store.js.map +1 -0
  51. package/dist/sqlite-driver.d.ts +13 -0
  52. package/dist/sqlite-driver.d.ts.map +1 -0
  53. package/dist/sqlite-driver.js +13 -0
  54. package/dist/sqlite-driver.js.map +1 -0
  55. package/dist/sqlite-store.d.ts +15 -0
  56. package/dist/sqlite-store.d.ts.map +1 -0
  57. package/dist/sqlite-store.js +113 -0
  58. package/dist/sqlite-store.js.map +1 -0
  59. package/dist/task-runs.d.ts +108 -0
  60. package/dist/task-runs.d.ts.map +1 -0
  61. package/dist/task-runs.js +427 -0
  62. package/dist/task-runs.js.map +1 -0
  63. package/dist/types.d.ts +35 -0
  64. package/dist/types.d.ts.map +1 -0
  65. package/dist/types.js +15 -0
  66. package/dist/types.js.map +1 -0
  67. package/dist-cjs/ai-task-agent.js +569 -0
  68. package/dist-cjs/ai-task-agent.js.map +1 -0
  69. package/dist-cjs/ai-task-runner.js +660 -0
  70. package/dist-cjs/ai-task-runner.js.map +1 -0
  71. package/dist-cjs/api-mount.js +94 -0
  72. package/dist-cjs/api-mount.js.map +1 -0
  73. package/dist-cjs/assistant-adapter.js +99 -0
  74. package/dist-cjs/assistant-adapter.js.map +1 -0
  75. package/dist-cjs/brand/config.js +47 -0
  76. package/dist-cjs/brand/config.js.map +1 -0
  77. package/dist-cjs/env-bridge.js +36 -0
  78. package/dist-cjs/env-bridge.js.map +1 -0
  79. package/dist-cjs/hono-routes.js +566 -0
  80. package/dist-cjs/hono-routes.js.map +1 -0
  81. package/dist-cjs/index.js +117 -0
  82. package/dist-cjs/index.js.map +1 -0
  83. package/dist-cjs/kanban-service.js +601 -0
  84. package/dist-cjs/kanban-service.js.map +1 -0
  85. package/dist-cjs/mcp-host-tools.js +333 -0
  86. package/dist-cjs/mcp-host-tools.js.map +1 -0
  87. package/dist-cjs/mcp-workspace-tools.js +342 -0
  88. package/dist-cjs/mcp-workspace-tools.js.map +1 -0
  89. package/dist-cjs/memory-store.js +81 -0
  90. package/dist-cjs/memory-store.js.map +1 -0
  91. package/dist-cjs/package.json +3 -0
  92. package/dist-cjs/sqlite-driver.js +16 -0
  93. package/dist-cjs/sqlite-driver.js.map +1 -0
  94. package/dist-cjs/sqlite-store.js +119 -0
  95. package/dist-cjs/sqlite-store.js.map +1 -0
  96. package/dist-cjs/task-runs.js +457 -0
  97. package/dist-cjs/task-runs.js.map +1 -0
  98. package/dist-cjs/types.js +18 -0
  99. package/dist-cjs/types.js.map +1 -0
  100. package/package.json +79 -0
  101. package/scripts/port-from-tempoflow.mjs +405 -0
  102. package/ui/ai-activity-panel.tsx +559 -0
  103. package/ui/index.ts +7 -0
  104. package/ui/task-detail-sheet.tsx +668 -0
  105. package/ui/tasks-kanban-client.tsx +647 -0
  106. package/ui/tasks-types.ts +120 -0
@@ -0,0 +1,333 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.CREEZIO_LIST_TASKS_MCP_TOOL_NAME = exports.CREEZIO_AI_TASK_HOST_MCP_TOOL_NAMES = void 0;
4
+ exports.aiTaskToolJsonSchema = aiTaskToolJsonSchema;
5
+ exports.parseAiTaskToolInput = parseAiTaskToolInput;
6
+ exports.actorIsOwner = actorIsOwner;
7
+ exports.createAiTaskHostMcpTools = createAiTaskHostMcpTools;
8
+ /**
9
+ * D-P18 — tools MCP host-only pour workflows tâches IA.
10
+ * Partagé TF/CV (ex-jumeaux hono-host-tools). Métier marque reste hors kit.
11
+ *
12
+ * Prérequis : `configureTasksBrand()` déjà appelé (users + runtime kanban).
13
+ */
14
+ const zod_1 = require("zod");
15
+ const config_js_1 = require("./brand/config.js");
16
+ const kanban_service_js_1 = require("./kanban-service.js");
17
+ const ai_task_runner_js_1 = require("./ai-task-runner.js");
18
+ const task_runs_js_1 = require("./task-runs.js");
19
+ exports.CREEZIO_AI_TASK_HOST_MCP_TOOL_NAMES = [
20
+ "list_ai_collaborators",
21
+ "create_ai_task",
22
+ "get_ai_task",
23
+ "get_ai_run_logs",
24
+ "answer_ai_question",
25
+ ];
26
+ /** Optionnel (Certivan) — liste kanban générique. */
27
+ exports.CREEZIO_LIST_TASKS_MCP_TOOL_NAME = "list_tasks";
28
+ /**
29
+ * JSON Schema d'un `inputSchema` de tool host (zod v4 `toJSONSchema`).
30
+ * Exposé ici pour que les intégrateurs (façade MCP kit, marques) n'aient pas
31
+ * besoin d'importer la même instance zod que @creezio/tasks.
32
+ */
33
+ function aiTaskToolJsonSchema(shape) {
34
+ try {
35
+ const schema = zod_1.z.toJSONSchema(zod_1.z.object(shape));
36
+ delete schema["$schema"];
37
+ return schema;
38
+ }
39
+ catch {
40
+ return { type: "object" };
41
+ }
42
+ }
43
+ /** Valide/normalise des arguments contre un `inputSchema` de tool host. */
44
+ function parseAiTaskToolInput(shape, args) {
45
+ if (!Object.keys(shape).length)
46
+ return { ok: true, input: args || {} };
47
+ const parsed = zod_1.z.object(shape).safeParse(args || {});
48
+ if (!parsed.success) {
49
+ return {
50
+ ok: false,
51
+ error: `invalid_arguments: ${parsed.error.issues
52
+ .map((i) => `${i.path.join(".") || "(racine)"} ${i.message}`)
53
+ .join(" ; ")}`,
54
+ };
55
+ }
56
+ return { ok: true, input: parsed.data };
57
+ }
58
+ const sleep = (ms) => new Promise((r) => setTimeout(r, ms));
59
+ function jsonResult(data) {
60
+ return {
61
+ content: [{ type: "text", text: JSON.stringify(data, null, 1) }],
62
+ };
63
+ }
64
+ function errorResult(message) {
65
+ return {
66
+ content: [
67
+ {
68
+ type: "text",
69
+ text: JSON.stringify({ error: message }),
70
+ },
71
+ ],
72
+ isError: true,
73
+ };
74
+ }
75
+ /**
76
+ * Gate acteur des tools host « qui agissent » : l'acteur doit être l'owner.
77
+ *
78
+ * Décision H1 (« Hermes cerveau unique ») : la clé CRM service Hermes
79
+ * (provisionnée par `ensure-crm-key-db`, `user_id NULL` + scopes `full`) est
80
+ * MAPPÉE SUR L'OWNER par le résolveur Bearer de la façade MCP
81
+ * (`createApiKeyBearerActorResolver`, @creezio/app-runtime) — même niveau de
82
+ * confiance que l'API REST CRM complète qu'elle ouvre déjà (parité TF2 gold).
83
+ * Pas de scope `tasks:run` dédié : `normalizeScopes` côté auth ne conserve
84
+ * que `full`/`crm:*`, et une clé restreinte (`crm:read`/`crm:write`) n'est
85
+ * PAS mappée owner → refusée ici (fail-closed).
86
+ */
87
+ function actorIsOwner(actorId) {
88
+ if (!actorId)
89
+ return false;
90
+ const { users } = (0, config_js_1.requireTasksBrand)();
91
+ const actor = users.getById(actorId);
92
+ const owner = users.getOwner();
93
+ return Boolean(actor && owner && actor.role === "owner" && actor.id === owner.id);
94
+ }
95
+ /**
96
+ * Enregistre les tools MCP host tâches IA (SoT kit).
97
+ * Retourne la liste des noms enregistrés.
98
+ */
99
+ function createAiTaskHostMcpTools(options) {
100
+ const { registerTool, getActorUserId, includeListTasks = false } = options;
101
+ const registered = [];
102
+ if (includeListTasks) {
103
+ registerTool(exports.CREEZIO_LIST_TASKS_MCP_TOOL_NAME, {
104
+ title: "Lister les tâches",
105
+ description: "Liste les tâches du kanban CRM (humaines et IA), avec filtres optionnels.",
106
+ inputSchema: {
107
+ status: zod_1.z.string().optional(),
108
+ assignee_user_id: zod_1.z.string().optional(),
109
+ executor: zod_1.z.string().optional(),
110
+ include_cancelled: zod_1.z.boolean().optional(),
111
+ },
112
+ }, async (input) => {
113
+ const tasks = (0, kanban_service_js_1.listTasks)({
114
+ status: input.status,
115
+ assigneeUserId: input.assignee_user_id,
116
+ executor: input.executor,
117
+ includeCancelled: Boolean(input.include_cancelled),
118
+ }).map((task) => ({
119
+ id: task.id,
120
+ title: task.title,
121
+ status: task.status,
122
+ executor_kind: task.executor_kind,
123
+ assignee_user_id: task.assignee_user_id,
124
+ priority: task.priority,
125
+ updated_at: task.updated_at,
126
+ created_at: task.created_at,
127
+ }));
128
+ return jsonResult({ tasks, total: tasks.length });
129
+ });
130
+ registered.push(exports.CREEZIO_LIST_TASKS_MCP_TOOL_NAME);
131
+ }
132
+ registerTool("list_ai_collaborators", {
133
+ title: "Lister les collaborateurs IA",
134
+ description: "Liste les collaborateurs IA actifs. À appeler avant create_ai_task.",
135
+ inputSchema: {},
136
+ }, async () => {
137
+ const { users } = (0, config_js_1.requireTasksBrand)();
138
+ const ais = users.list().filter((u) => u.kind === "ai" && u.active);
139
+ const collaborators = ais.map((u) => {
140
+ const { run, task } = (0, ai_task_runner_js_1.getAiActivityForUser)(u.id);
141
+ return {
142
+ id: u.id,
143
+ username: u.username,
144
+ permissions: u.permissions,
145
+ busy: Boolean(run),
146
+ current_task: task
147
+ ? { id: task.id, title: task.title, status: task.status }
148
+ : null,
149
+ };
150
+ });
151
+ return jsonResult({
152
+ collaborators,
153
+ host_bridge_ready: (0, ai_task_runner_js_1.hostBridgeReady)(),
154
+ });
155
+ });
156
+ registered.push("list_ai_collaborators");
157
+ registerTool("create_ai_task", {
158
+ title: "Créer une tâche pour un collaborateur IA",
159
+ description: "Crée (et lance par défaut) une tâche exécutée par un collaborateur IA. Réservé owner.",
160
+ inputSchema: {
161
+ title: zod_1.z.string().min(1).max(300).describe("Titre court de la tâche"),
162
+ brief: zod_1.z.string().max(8000).optional(),
163
+ assignee: zod_1.z.string().optional(),
164
+ launch: zod_1.z.boolean().default(true),
165
+ require_confirmation: zod_1.z.boolean().optional(),
166
+ recurring: zod_1.z.string().max(60).optional(),
167
+ },
168
+ }, async (input) => {
169
+ const actorId = getActorUserId();
170
+ if (!actorIsOwner(actorId)) {
171
+ return errorResult("Réservé au compte principal (owner)");
172
+ }
173
+ const { users } = (0, config_js_1.requireTasksBrand)();
174
+ const ais = users.list().filter((u) => u.kind === "ai" && u.active);
175
+ if (ais.length === 0)
176
+ return errorResult("Aucun collaborateur IA actif");
177
+ let assignee = ais[0];
178
+ if (input.assignee) {
179
+ const wanted = String(input.assignee).trim();
180
+ const found = ais.find((u) => u.id === wanted ||
181
+ u.username.toLowerCase() === wanted.toLowerCase());
182
+ if (!found) {
183
+ return errorResult(`Collaborateur IA « ${wanted} » introuvable ou inactif`);
184
+ }
185
+ assignee = found;
186
+ }
187
+ let brief = typeof input.brief === "string" ? input.brief : "";
188
+ if (input.require_confirmation && !/\[\[(confirm|hitl)\]\]/i.test(brief)) {
189
+ brief = `${brief}\n\n[[confirm]]`.trim();
190
+ }
191
+ const recurring = typeof input.recurring === "string" ? input.recurring.trim() : "";
192
+ if (recurring && !(0, ai_task_runner_js_1.parseRecurringSchedule)(recurring)) {
193
+ return errorResult(`Récurrence « ${recurring} » invalide`);
194
+ }
195
+ try {
196
+ const { task } = await (0, kanban_service_js_1.createTask)({
197
+ title: input.title,
198
+ body: brief,
199
+ executorKind: "ai",
200
+ assigneeUserId: assignee.id,
201
+ createdBy: actorId,
202
+ source: "assistant",
203
+ recurringSchedule: recurring || null,
204
+ });
205
+ let run = null;
206
+ if (input.launch !== false) {
207
+ if (task.status === "backlog") {
208
+ await (0, kanban_service_js_1.updateTask)(task.id, { status: "in_progress" });
209
+ }
210
+ run = (0, ai_task_runner_js_1.enqueueAiRunForTask)(task.id);
211
+ (0, ai_task_runner_js_1.ensureAiRunnerLoop)();
212
+ void (0, ai_task_runner_js_1.processAiTaskQueue)();
213
+ }
214
+ const bridgeReady = (0, ai_task_runner_js_1.hostBridgeReady)();
215
+ return jsonResult({
216
+ ok: true,
217
+ task_id: task.id,
218
+ run_id: run?.id || null,
219
+ status: (0, kanban_service_js_1.getTask)(task.id)?.status || task.status,
220
+ assignee: { id: assignee.id, username: assignee.username },
221
+ host_bridge_ready: bridgeReady,
222
+ warning: bridgeReady
223
+ ? null
224
+ : "Aucun hôte desktop connecté pour l'instant",
225
+ hint: "Appelle get_ai_task(task_id) toutes les 15-30 s jusqu'à status done/failed.",
226
+ });
227
+ }
228
+ catch (error) {
229
+ return errorResult(error instanceof Error ? error.message : String(error));
230
+ }
231
+ });
232
+ registered.push("create_ai_task");
233
+ registerTool("get_ai_task", {
234
+ title: "État et résultat d'une tâche IA",
235
+ description: "Poll jusqu'à done/failed. wait_seconds ≤ 20.",
236
+ inputSchema: {
237
+ task_id: zod_1.z.string().min(1),
238
+ wait_seconds: zod_1.z.coerce.number().int().min(0).max(20).default(0),
239
+ logs_after_seq: zod_1.z.coerce.number().int().min(0).optional(),
240
+ },
241
+ }, async (input) => {
242
+ const task = (0, kanban_service_js_1.getTask)(input.task_id);
243
+ if (!task)
244
+ return errorResult(`tâche ${input.task_id} introuvable`);
245
+ const runs = (0, task_runs_js_1.listTaskRunsForTask)(task.id);
246
+ let run = runs[0] ?? null;
247
+ const deadline = Date.now() + (input.wait_seconds || 0) * 1000;
248
+ const initialStatus = run?.status || null;
249
+ while (run &&
250
+ (run.status === "queued" || run.status === "running") &&
251
+ run.status === initialStatus &&
252
+ Date.now() < deadline) {
253
+ await sleep(1000);
254
+ run = (0, task_runs_js_1.getTaskRun)(run.id);
255
+ const fresh = (0, kanban_service_js_1.getTask)(task.id);
256
+ if (fresh && fresh.status === "done")
257
+ break;
258
+ }
259
+ const fresh = (0, kanban_service_js_1.getTask)(task.id) || task;
260
+ const afterSeq = input.logs_after_seq ?? 0;
261
+ const logs = run
262
+ ? (0, task_runs_js_1.listAgentLogs)(run.id, afterSeq, 30).map((l) => ({
263
+ seq: l.seq,
264
+ level: l.level,
265
+ event_type: l.event_type,
266
+ message: l.message.slice(0, 500),
267
+ }))
268
+ : [];
269
+ return jsonResult({
270
+ task_id: fresh.id,
271
+ title: fresh.title,
272
+ status: fresh.status,
273
+ result: fresh.result || null,
274
+ run: run
275
+ ? {
276
+ id: run.id,
277
+ status: run.status,
278
+ last_error: run.last_error,
279
+ step_count: run.step_count,
280
+ hitl_prompt: run.hitl_prompt,
281
+ }
282
+ : null,
283
+ logs,
284
+ awaiting_human: Boolean(run?.hitl_prompt),
285
+ });
286
+ });
287
+ registered.push("get_ai_task");
288
+ registerTool("get_ai_run_logs", {
289
+ title: "Logs d'un run IA",
290
+ description: "Journal détaillé d'un run IA.",
291
+ inputSchema: {
292
+ run_id: zod_1.z.string().min(1),
293
+ after_seq: zod_1.z.coerce.number().int().min(0).default(0),
294
+ },
295
+ }, async (input) => {
296
+ const run = (0, task_runs_js_1.getTaskRun)(input.run_id);
297
+ if (!run)
298
+ return errorResult(`run ${input.run_id} introuvable`);
299
+ const logs = (0, task_runs_js_1.listAgentLogs)(run.id, input.after_seq || 0, 100).map((l) => ({
300
+ seq: l.seq,
301
+ level: l.level,
302
+ event_type: l.event_type,
303
+ message: l.message.slice(0, 800),
304
+ }));
305
+ const last = logs[logs.length - 1];
306
+ return jsonResult({
307
+ run_id: run.id,
308
+ status: run.status,
309
+ logs,
310
+ last_seq: last ? last.seq : input.after_seq || 0,
311
+ });
312
+ });
313
+ registered.push("get_ai_run_logs");
314
+ registerTool("answer_ai_question", {
315
+ title: "Répondre à une question d'un collaborateur IA (HITL)",
316
+ description: "Reprend un run en pause HITL. Réservé owner.",
317
+ inputSchema: {
318
+ run_id: zod_1.z.string().min(1),
319
+ response: zod_1.z.string().min(1).max(2000),
320
+ },
321
+ }, async (input) => {
322
+ if (!actorIsOwner(getActorUserId())) {
323
+ return errorResult("Réservé au compte principal (owner)");
324
+ }
325
+ const run = (0, task_runs_js_1.resumeHitlRun)(input.run_id, input.response);
326
+ if (!run)
327
+ return errorResult("Aucune pause HITL active sur ce run");
328
+ return jsonResult({ ok: true, run_id: run.id, status: run.status });
329
+ });
330
+ registered.push("answer_ai_question");
331
+ return registered;
332
+ }
333
+ //# sourceMappingURL=mcp-host-tools.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp-host-tools.js","sourceRoot":"","sources":["../src/mcp-host-tools.ts"],"names":[],"mappings":"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"}