@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,566 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createTasksHonoRoutes = createTasksHonoRoutes;
4
+ /**
5
+ * API Kanban unifié « Tâches » — exécutants human / ai / hermes,
6
+ * runs IA (poll + SSE) et synchronisation Hermes.
7
+ * Factory : les marques montent `createTasksHonoRoutes()` sous /api/v1/tasks.
8
+ */
9
+ const hono_1 = require("hono");
10
+ const zod_1 = require("zod");
11
+ const assistant_1 = require("@creezio/assistant");
12
+ const config_js_1 = require("./brand/config.js");
13
+ const ai_task_runner_js_1 = require("./ai-task-runner.js");
14
+ const kanban_service_js_1 = require("./kanban-service.js");
15
+ const task_runs_js_1 = require("./task-runs.js");
16
+ function queryOne(sql, params = []) {
17
+ return (0, config_js_1.requireTasksBrand)().db.queryOne(sql, params);
18
+ }
19
+ function getUserById(id) {
20
+ return (0, config_js_1.requireTasksBrand)().users.getById(id);
21
+ }
22
+ function listUsers() {
23
+ return (0, config_js_1.requireTasksBrand)().users.list();
24
+ }
25
+ function usersReady() {
26
+ return (0, config_js_1.requireTasksBrand)().users.ready();
27
+ }
28
+ function getSessionFromContext(c) {
29
+ return (0, config_js_1.requireTasksBrand)().auth.getSessionFromContext(c);
30
+ }
31
+ function sessionActorIsOwner(session) {
32
+ return (0, config_js_1.requireTasksBrand)().auth.sessionActorIsOwner(session);
33
+ }
34
+ function sessionIsImpersonating(session) {
35
+ return (0, config_js_1.requireTasksBrand)().auth.sessionIsImpersonating(session);
36
+ }
37
+ function screencastViewerCount(aiUserId) {
38
+ return (0, config_js_1.requireTasksBrand)().screencast.viewerCount(aiUserId);
39
+ }
40
+ function subscribeScreencast(aiUserId, listener) {
41
+ return (0, config_js_1.requireTasksBrand)().screencast.subscribe(aiUserId, listener);
42
+ }
43
+ function startScreencastOnHost(aiUserId) {
44
+ return (0, config_js_1.requireTasksBrand)().workspace.startScreencast(aiUserId);
45
+ }
46
+ function stopScreencastOnHost(aiUserId) {
47
+ return (0, config_js_1.requireTasksBrand)().workspace.stopScreencast(aiUserId);
48
+ }
49
+ function createTasksHonoRoutes() {
50
+ const tasksRoutes = new hono_1.Hono();
51
+ async function getTaskActor(c) {
52
+ const session = await getSessionFromContext(c);
53
+ if (session) {
54
+ return { userId: session.sub, role: session.role, via: "session" };
55
+ }
56
+ const key = c.get("apiKey");
57
+ if (key?.user_id) {
58
+ const u = getUserById(key.user_id);
59
+ if (u)
60
+ return { userId: u.id, role: u.role, via: "api_key" };
61
+ }
62
+ return null;
63
+ }
64
+ tasksRoutes.use("*", async (_c, next) => {
65
+ (0, ai_task_runner_js_1.ensureAiRunnerLoop)();
66
+ await next();
67
+ });
68
+ function sseResponse(c, setup) {
69
+ const encoder = new TextEncoder();
70
+ let cleanup = null;
71
+ let heartbeat = null;
72
+ const stream = new ReadableStream({
73
+ start(controller) {
74
+ const send = (event, data) => {
75
+ try {
76
+ controller.enqueue(encoder.encode(`event: ${event}\ndata: ${JSON.stringify(data)}\n\n`));
77
+ }
78
+ catch {
79
+ /* fermé */
80
+ }
81
+ };
82
+ send("ready", { ok: true, ts: Date.now() });
83
+ cleanup = setup(send);
84
+ heartbeat = setInterval(() => send("ping", { ts: Date.now() }), 20_000);
85
+ c.req.raw.signal.addEventListener("abort", () => {
86
+ if (heartbeat)
87
+ clearInterval(heartbeat);
88
+ cleanup?.();
89
+ try {
90
+ controller.close();
91
+ }
92
+ catch {
93
+ /* ignore */
94
+ }
95
+ });
96
+ },
97
+ cancel() {
98
+ if (heartbeat)
99
+ clearInterval(heartbeat);
100
+ cleanup?.();
101
+ },
102
+ });
103
+ return new Response(stream, {
104
+ headers: {
105
+ "Content-Type": "text/event-stream",
106
+ "Cache-Control": "no-cache, no-transform",
107
+ Connection: "keep-alive",
108
+ },
109
+ });
110
+ }
111
+ tasksRoutes.get("/meta", async (c) => {
112
+ const session = await getSessionFromContext(c);
113
+ if (!session)
114
+ return c.json({ error: "Non authentifié" }, 401);
115
+ const assignable = usersReady()
116
+ ? listUsers().filter((u) => u.role === "collaborator" && u.active)
117
+ : [];
118
+ return c.json({
119
+ ready: (0, kanban_service_js_1.tasksReady)() && (0, task_runs_js_1.taskRunsReady)(),
120
+ columns: kanban_service_js_1.KANBAN_COLUMNS,
121
+ executors: kanban_service_js_1.EXECUTOR_KINDS,
122
+ host_bridge_ready: (0, ai_task_runner_js_1.hostBridgeReady)(),
123
+ hermes_configured: (0, assistant_1.hermesKanbanConfigured)(),
124
+ max_concurrent: (0, task_runs_js_1.maxConcurrentAiRuns)(),
125
+ assignable_users: assignable.map((u) => ({
126
+ id: u.id,
127
+ username: u.username,
128
+ kind: u.kind,
129
+ })),
130
+ });
131
+ });
132
+ tasksRoutes.get("/", async (c) => {
133
+ const session = await getSessionFromContext(c);
134
+ if (!session)
135
+ return c.json({ error: "Non authentifié" }, 401);
136
+ if (!(0, kanban_service_js_1.tasksReady)()) {
137
+ return c.json({ error: "schéma tasks plateforme requis", tasks: [], columns: {} }, 503);
138
+ }
139
+ // Rafraîchit les tâches Hermes à chaque board (comme l'ancien /todos),
140
+ // sauf sync=0 explicite.
141
+ let syncMeta = null;
142
+ if (c.req.query("sync") !== "0" && (0, assistant_1.hermesKanbanConfigured)()) {
143
+ syncMeta = await (0, kanban_service_js_1.syncHermesTasks)();
144
+ }
145
+ const tasks = (0, kanban_service_js_1.listTasks)({
146
+ status: c.req.query("status") || undefined,
147
+ assigneeUserId: c.req.query("assignee") || undefined,
148
+ executor: c.req.query("executor") || undefined,
149
+ });
150
+ return c.json({
151
+ tasks,
152
+ columns: (0, kanban_service_js_1.tasksByColumn)(tasks),
153
+ host_bridge_ready: (0, ai_task_runner_js_1.hostBridgeReady)(),
154
+ hermes_configured: (0, assistant_1.hermesKanbanConfigured)(),
155
+ max_concurrent: (0, task_runs_js_1.maxConcurrentAiRuns)(),
156
+ sync: syncMeta,
157
+ });
158
+ });
159
+ tasksRoutes.post("/sync", async (c) => {
160
+ const session = await getSessionFromContext(c);
161
+ if (!session)
162
+ return c.json({ error: "Non authentifié" }, 401);
163
+ if (!(0, kanban_service_js_1.tasksReady)())
164
+ return c.json({ error: "schéma tasks plateforme requis" }, 503);
165
+ const sync = await (0, kanban_service_js_1.syncHermesTasks)();
166
+ const tasks = (0, kanban_service_js_1.listTasks)();
167
+ return c.json({ ok: true, sync, tasks, columns: (0, kanban_service_js_1.tasksByColumn)(tasks) });
168
+ });
169
+ tasksRoutes.get("/runs/:runId/stream", async (c) => {
170
+ const session = await getSessionFromContext(c);
171
+ if (!session)
172
+ return c.json({ error: "Non authentifié" }, 401);
173
+ const runId = c.req.param("runId");
174
+ const run = (0, task_runs_js_1.getTaskRun)(runId);
175
+ if (!run)
176
+ return c.json({ error: "Run introuvable" }, 404);
177
+ return sseResponse(c, (send) => {
178
+ send("run", { run: (0, task_runs_js_1.getTaskRun)(runId) });
179
+ const after = Number(c.req.query("after") || "0") || 0;
180
+ for (const log of (0, task_runs_js_1.listAgentLogs)(runId, after)) {
181
+ send("log", { log, run: (0, task_runs_js_1.getTaskRun)(runId) });
182
+ }
183
+ const offLog = (0, task_runs_js_1.subscribeAgentLogs)(runId, (ev) => {
184
+ send("log", { log: ev.log, run: ev.run });
185
+ });
186
+ const offRun = (0, task_runs_js_1.subscribeTaskRuns)(runId, (r) => {
187
+ send("run", { run: r });
188
+ });
189
+ return () => {
190
+ offLog();
191
+ offRun();
192
+ };
193
+ });
194
+ });
195
+ tasksRoutes.get("/runs/:runId/logs", async (c) => {
196
+ const actor = await getTaskActor(c);
197
+ if (!actor)
198
+ return c.json({ error: "Non authentifié" }, 401);
199
+ const run = (0, task_runs_js_1.getTaskRun)(c.req.param("runId"));
200
+ if (!run)
201
+ return c.json({ error: "Run introuvable" }, 404);
202
+ const after = Number(c.req.query("after") || "0") || 0;
203
+ const logs = (0, task_runs_js_1.listAgentLogs)(run.id, after);
204
+ return c.json({ run, logs, host_bridge_ready: (0, ai_task_runner_js_1.hostBridgeReady)() });
205
+ });
206
+ tasksRoutes.get("/runs/:runId", async (c) => {
207
+ const actor = await getTaskActor(c);
208
+ if (!actor)
209
+ return c.json({ error: "Non authentifié" }, 401);
210
+ const run = (0, task_runs_js_1.getTaskRun)(c.req.param("runId"));
211
+ if (!run)
212
+ return c.json({ error: "Run introuvable" }, 404);
213
+ return c.json({ task: (0, kanban_service_js_1.getTask)(run.task_id), run });
214
+ });
215
+ tasksRoutes.post("/runs/:runId/retry", async (c) => {
216
+ const session = await getSessionFromContext(c);
217
+ if (!session)
218
+ return c.json({ error: "Non authentifié" }, 401);
219
+ let run;
220
+ try {
221
+ run = (0, ai_task_runner_js_1.retryFailedRun)(c.req.param("runId"));
222
+ }
223
+ catch (e) {
224
+ const msg = e instanceof Error ? e.message : String(e);
225
+ if (msg.startsWith("quota_exceeded")) {
226
+ return c.json({ error: msg, code: "quota_exceeded" }, 429);
227
+ }
228
+ return c.json({ error: msg }, 400);
229
+ }
230
+ if (!run) {
231
+ return c.json({ error: "Retry impossible (run non failed/cancelled ou tâche absente)" }, 400);
232
+ }
233
+ void (0, ai_task_runner_js_1.processAiTaskQueue)();
234
+ return c.json({
235
+ ok: true,
236
+ run,
237
+ task: (0, kanban_service_js_1.getTask)(run.task_id),
238
+ host_bridge_ready: (0, ai_task_runner_js_1.hostBridgeReady)(),
239
+ });
240
+ });
241
+ tasksRoutes.post("/runs/:runId/resume", async (c) => {
242
+ const actor = await getTaskActor(c);
243
+ if (!actor)
244
+ return c.json({ error: "Non authentifié" }, 401);
245
+ const body = await c.req.json().catch(() => ({}));
246
+ const response = typeof body.response === "string"
247
+ ? body.response
248
+ : "ok";
249
+ const run = (0, task_runs_js_1.resumeHitlRun)(c.req.param("runId"), response);
250
+ if (!run) {
251
+ return c.json({ error: "Aucune pause HITL active sur ce run" }, 400);
252
+ }
253
+ return c.json({ ok: true, run });
254
+ });
255
+ tasksRoutes.post("/runs/:runId/cancel", async (c) => {
256
+ const session = await getSessionFromContext(c);
257
+ if (!session)
258
+ return c.json({ error: "Non authentifié" }, 401);
259
+ const run = (0, task_runs_js_1.cancelTaskRun)(c.req.param("runId"));
260
+ if (!run)
261
+ return c.json({ error: "Run introuvable" }, 404);
262
+ return c.json({ ok: true, run });
263
+ });
264
+ tasksRoutes.get("/activity/:userId/stream", async (c) => {
265
+ const session = await getSessionFromContext(c);
266
+ if (!session)
267
+ return c.json({ error: "Non authentifié" }, 401);
268
+ const userId = c.req.param("userId");
269
+ return sseResponse(c, (send) => {
270
+ const { run, task } = (0, ai_task_runner_js_1.getAiActivityForUser)(userId);
271
+ let currentRunId = run?.id || null;
272
+ if (!run) {
273
+ const last = queryOne(`SELECT id FROM task_runs WHERE assignee_user_id = ?
274
+ ORDER BY created_at DESC LIMIT 1`, [userId]);
275
+ if (last) {
276
+ const lastRun = (0, task_runs_js_1.getTaskRun)(last.id);
277
+ currentRunId = lastRun?.id || null;
278
+ send("snapshot", {
279
+ run: lastRun,
280
+ task: lastRun ? (0, kanban_service_js_1.getTask)(lastRun.task_id) : null,
281
+ logs: lastRun ? (0, task_runs_js_1.listAgentLogs)(lastRun.id, 0) : [],
282
+ });
283
+ }
284
+ else {
285
+ send("snapshot", { run: null, task: null, logs: [] });
286
+ }
287
+ }
288
+ else {
289
+ send("snapshot", {
290
+ run,
291
+ task,
292
+ logs: (0, task_runs_js_1.listAgentLogs)(run.id, 0),
293
+ });
294
+ }
295
+ const offLog = (0, task_runs_js_1.subscribeAgentLogs)(userId, (ev) => {
296
+ currentRunId = ev.run.id;
297
+ send("log", { log: ev.log, run: ev.run });
298
+ });
299
+ const offRun = (0, task_runs_js_1.subscribeTaskRuns)(userId, (r) => {
300
+ currentRunId = r.id;
301
+ send("run", { run: r, task: (0, kanban_service_js_1.getTask)(r.task_id) });
302
+ });
303
+ return () => {
304
+ offLog();
305
+ offRun();
306
+ void currentRunId;
307
+ };
308
+ });
309
+ });
310
+ /**
311
+ * Vue live (lecture seule) d'un espace IA : frames JPEG en SSE.
312
+ * Le screencast desktop est démarré au 1er spectateur et arrêté au dernier
313
+ * (l'app desktop a en plus son auto-stop si les frames ne servent à personne).
314
+ */
315
+ tasksRoutes.get("/screencast/:aiUserId/stream", async (c) => {
316
+ const session = await getSessionFromContext(c);
317
+ if (!session)
318
+ return c.json({ error: "Non authentifié" }, 401);
319
+ const aiUserId = c.req.param("aiUserId");
320
+ const ai = getUserById(aiUserId);
321
+ if (!ai || ai.kind !== "ai") {
322
+ return c.json({ error: "Collaborateur IA introuvable" }, 404);
323
+ }
324
+ return sseResponse(c, (send) => {
325
+ const firstViewer = screencastViewerCount(aiUserId) === 0;
326
+ const off = subscribeScreencast(aiUserId, (frame) => {
327
+ send("frame", { seq: frame.seq, ts: frame.ts, data: frame.data });
328
+ });
329
+ if (firstViewer) {
330
+ void startScreencastOnHost(aiUserId).then((r) => {
331
+ if (r && r.ok !== true) {
332
+ send("status", {
333
+ ok: false,
334
+ error: r.error || "Screencast indisponible",
335
+ code: r.code || null,
336
+ });
337
+ }
338
+ else {
339
+ send("status", { ok: true });
340
+ }
341
+ });
342
+ }
343
+ else {
344
+ send("status", { ok: true });
345
+ }
346
+ return () => {
347
+ off();
348
+ if (screencastViewerCount(aiUserId) === 0) {
349
+ void stopScreencastOnHost(aiUserId);
350
+ }
351
+ };
352
+ });
353
+ });
354
+ tasksRoutes.get("/activity/:userId", async (c) => {
355
+ const session = await getSessionFromContext(c);
356
+ if (!session)
357
+ return c.json({ error: "Non authentifié" }, 401);
358
+ const { run, task } = (0, ai_task_runner_js_1.getAiActivityForUser)(c.req.param("userId"));
359
+ const after = Number(c.req.query("after") || "0") || 0;
360
+ const logs = run ? (0, task_runs_js_1.listAgentLogs)(run.id, after) : [];
361
+ if (!run && (0, task_runs_js_1.taskRunsReady)()) {
362
+ const last = queryOne(`SELECT id FROM task_runs WHERE assignee_user_id = ?
363
+ ORDER BY created_at DESC LIMIT 1`, [c.req.param("userId")]);
364
+ if (last) {
365
+ const lastRun = (0, task_runs_js_1.getTaskRun)(last.id);
366
+ const lastLogs = lastRun ? (0, task_runs_js_1.listAgentLogs)(lastRun.id, after) : [];
367
+ return c.json({
368
+ run: lastRun,
369
+ task: lastRun ? (0, kanban_service_js_1.getTask)(lastRun.task_id) : null,
370
+ logs: lastLogs,
371
+ host_bridge_ready: (0, ai_task_runner_js_1.hostBridgeReady)(),
372
+ });
373
+ }
374
+ }
375
+ return c.json({
376
+ run,
377
+ task,
378
+ logs,
379
+ host_bridge_ready: (0, ai_task_runner_js_1.hostBridgeReady)(),
380
+ });
381
+ });
382
+ tasksRoutes.post("/runner/tick", async (c) => {
383
+ const session = await getSessionFromContext(c);
384
+ if (!session)
385
+ return c.json({ error: "Non authentifié" }, 401);
386
+ const result = await (0, ai_task_runner_js_1.processAiTaskQueue)();
387
+ return c.json({
388
+ ok: true,
389
+ ...result,
390
+ host_bridge_ready: (0, ai_task_runner_js_1.hostBridgeReady)(),
391
+ max_concurrent: (0, task_runs_js_1.maxConcurrentAiRuns)(),
392
+ });
393
+ });
394
+ tasksRoutes.post("/logs/purge", async (c) => {
395
+ const session = await getSessionFromContext(c);
396
+ if (!session)
397
+ return c.json({ error: "Non authentifié" }, 401);
398
+ if (sessionIsImpersonating(session)) {
399
+ return c.json({ error: "Revenez à votre compte pour cette action" }, 403);
400
+ }
401
+ if (!sessionActorIsOwner(session)) {
402
+ return c.json({ error: "Réservé au compte principal" }, 403);
403
+ }
404
+ const body = await c.req.json().catch(() => ({}));
405
+ const days = Number(body.days ?? 30) || 30;
406
+ const result = (0, task_runs_js_1.purgeAgentLogsOlderThan)(days);
407
+ return c.json({ ok: true, days, ...result });
408
+ });
409
+ tasksRoutes.get("/:id", async (c) => {
410
+ const actor = await getTaskActor(c);
411
+ if (!actor)
412
+ return c.json({ error: "Non authentifié" }, 401);
413
+ const detail = await (0, kanban_service_js_1.getTaskDetail)(c.req.param("id"));
414
+ if (!detail)
415
+ return c.json({ error: "Tâche introuvable" }, 404);
416
+ const runs = (0, task_runs_js_1.taskRunsReady)() ? (0, task_runs_js_1.listTaskRunsForTask)(detail.task.id) : [];
417
+ const subtasks = (0, kanban_service_js_1.listTasks)({
418
+ parentTaskId: detail.task.id,
419
+ includeCancelled: true,
420
+ });
421
+ return c.json({ ...detail, runs, subtasks });
422
+ });
423
+ const createSchema = zod_1.z.object({
424
+ title: zod_1.z.string().min(1).max(300),
425
+ body: zod_1.z.string().max(8000).optional(),
426
+ status: zod_1.z.enum(kanban_service_js_1.TASK_STATUSES).optional(),
427
+ executor_kind: zod_1.z.enum(kanban_service_js_1.EXECUTOR_KINDS).optional(),
428
+ assignee_user_id: zod_1.z.string().min(1).nullable().optional(),
429
+ parent_task_id: zod_1.z.string().min(1).nullable().optional(),
430
+ priority: zod_1.z.number().int().optional(),
431
+ recurring_schedule: zod_1.z.string().max(120).nullable().optional(),
432
+ dispatch: zod_1.z.boolean().optional(),
433
+ launch: zod_1.z.boolean().optional(),
434
+ });
435
+ tasksRoutes.post("/", async (c) => {
436
+ const actor = await getTaskActor(c);
437
+ if (!actor)
438
+ return c.json({ error: "Non authentifié" }, 401);
439
+ const body = await c.req.json().catch(() => ({}));
440
+ const parsed = createSchema.safeParse(body);
441
+ if (!parsed.success) {
442
+ return c.json({ error: "Payload invalide", details: parsed.error.issues }, 400);
443
+ }
444
+ try {
445
+ const { task, hermes, warning } = await (0, kanban_service_js_1.createTask)({
446
+ title: parsed.data.title,
447
+ body: parsed.data.body,
448
+ status: parsed.data.status,
449
+ executorKind: parsed.data.executor_kind,
450
+ assigneeUserId: parsed.data.assignee_user_id,
451
+ parentTaskId: parsed.data.parent_task_id,
452
+ createdBy: actor.userId,
453
+ priority: parsed.data.priority,
454
+ recurringSchedule: parsed.data.recurring_schedule,
455
+ dispatch: parsed.data.dispatch,
456
+ source: "ui",
457
+ });
458
+ let run = null;
459
+ const shouldLaunch = parsed.data.launch || parsed.data.status === "in_progress";
460
+ if (shouldLaunch && task.executor_kind === "ai") {
461
+ if (task.status === "backlog") {
462
+ await (0, kanban_service_js_1.updateTask)(task.id, { status: "in_progress" });
463
+ }
464
+ run = (0, ai_task_runner_js_1.enqueueAiRunForTask)(task.id);
465
+ void (0, ai_task_runner_js_1.processAiTaskQueue)();
466
+ }
467
+ return c.json({
468
+ ok: true,
469
+ task: (0, kanban_service_js_1.getTask)(task.id),
470
+ run,
471
+ hermes_task_id: hermes?.id || null,
472
+ warning: warning || null,
473
+ }, 201);
474
+ }
475
+ catch (e) {
476
+ return c.json({ error: e instanceof Error ? e.message : String(e) }, 400);
477
+ }
478
+ });
479
+ tasksRoutes.patch("/:id", async (c) => {
480
+ const session = await getSessionFromContext(c);
481
+ if (!session)
482
+ return c.json({ error: "Non authentifié" }, 401);
483
+ const body = await c.req.json().catch(() => ({}));
484
+ const parsed = zod_1.z
485
+ .object({
486
+ title: zod_1.z.string().min(1).max(300).optional(),
487
+ body: zod_1.z.string().max(8000).optional(),
488
+ status: zod_1.z.enum(kanban_service_js_1.TASK_STATUSES).optional(),
489
+ assignee_user_id: zod_1.z.string().min(1).nullable().optional(),
490
+ priority: zod_1.z.number().int().optional(),
491
+ result: zod_1.z.string().max(8000).optional(),
492
+ launch: zod_1.z.boolean().optional(),
493
+ })
494
+ .safeParse(body);
495
+ if (!parsed.success) {
496
+ return c.json({ error: "Payload invalide", details: parsed.error.issues }, 400);
497
+ }
498
+ try {
499
+ const before = (0, kanban_service_js_1.getTask)(c.req.param("id"));
500
+ if (!before)
501
+ return c.json({ error: "Tâche introuvable" }, 404);
502
+ const task = await (0, kanban_service_js_1.updateTask)(c.req.param("id"), {
503
+ title: parsed.data.title,
504
+ body: parsed.data.body,
505
+ status: parsed.data.status,
506
+ assigneeUserId: parsed.data.assignee_user_id,
507
+ priority: parsed.data.priority,
508
+ result: parsed.data.result,
509
+ });
510
+ let run = null;
511
+ const movedToProgress = parsed.data.status === "in_progress" && before.status !== "in_progress";
512
+ if ((parsed.data.launch || movedToProgress) &&
513
+ task.executor_kind === "ai") {
514
+ run = (0, ai_task_runner_js_1.enqueueAiRunForTask)(task.id);
515
+ void (0, ai_task_runner_js_1.processAiTaskQueue)();
516
+ }
517
+ return c.json({ ok: true, task, run });
518
+ }
519
+ catch (e) {
520
+ return c.json({ error: e instanceof Error ? e.message : String(e) }, 400);
521
+ }
522
+ });
523
+ tasksRoutes.delete("/:id", async (c) => {
524
+ const session = await getSessionFromContext(c);
525
+ if (!session)
526
+ return c.json({ error: "Non authentifié" }, 401);
527
+ const ok = await (0, kanban_service_js_1.deleteTask)(c.req.param("id"));
528
+ if (!ok)
529
+ return c.json({ error: "Tâche introuvable" }, 404);
530
+ return c.json({ ok: true });
531
+ });
532
+ tasksRoutes.post("/:id/launch", async (c) => {
533
+ const actor = await getTaskActor(c);
534
+ if (!actor)
535
+ return c.json({ error: "Non authentifié" }, 401);
536
+ const task = (0, kanban_service_js_1.getTask)(c.req.param("id"));
537
+ if (!task)
538
+ return c.json({ error: "Tâche introuvable" }, 404);
539
+ if (task.executor_kind !== "ai" || !task.assignee || task.assignee.kind !== "ai") {
540
+ return c.json({ error: "La tâche doit être assignée à un collaborateur IA" }, 400);
541
+ }
542
+ if (task.status === "backlog" || task.status === "done") {
543
+ await (0, kanban_service_js_1.updateTask)(task.id, { status: "in_progress" });
544
+ }
545
+ let run;
546
+ try {
547
+ run = (0, ai_task_runner_js_1.enqueueAiRunForTask)(task.id);
548
+ }
549
+ catch (e) {
550
+ const msg = e instanceof Error ? e.message : String(e);
551
+ if (msg.startsWith("quota_exceeded")) {
552
+ return c.json({ error: msg, code: "quota_exceeded" }, 429);
553
+ }
554
+ return c.json({ error: msg }, 400);
555
+ }
556
+ void (0, ai_task_runner_js_1.processAiTaskQueue)();
557
+ return c.json({
558
+ ok: true,
559
+ task: (0, kanban_service_js_1.getTask)(task.id),
560
+ run,
561
+ host_bridge_ready: (0, ai_task_runner_js_1.hostBridgeReady)(),
562
+ });
563
+ });
564
+ return tasksRoutes;
565
+ }
566
+ //# sourceMappingURL=hono-routes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hono-routes.js","sourceRoot":"","sources":["../src/hono-routes.ts"],"names":[],"mappings":"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"}