@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,569 @@
1
+ "use strict";
2
+ /**
3
+ * Agent LLM d'un collaborateur IA — exécute une tâche du kanban dans SON
4
+ * workspace Electron (partition dédiée, fake-cursor visible via « Voir
5
+ * comme IA »), avec les ACL de SON persona (jamais celles de l'owner).
6
+ *
7
+ * Outils : navigation CRM, inspection/action UI (UiDriver), onglets web,
8
+ * délégation Hermes (sous-tâche), HITL, fin de tâche explicite (D4 :
9
+ * `done` seulement sur finish_task(success=true)).
10
+ */
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.setAiTaskModelCaller = setAiTaskModelCaller;
13
+ exports.hasAiAgentModel = hasAiAgentModel;
14
+ exports.aiTaskModel = aiTaskModel;
15
+ exports.aiTaskMaxSteps = aiTaskMaxSteps;
16
+ exports.aiTaskTimeoutMs = aiTaskTimeoutMs;
17
+ exports.aiTaskMaxTokens = aiTaskMaxTokens;
18
+ exports.aiWebHostAllowed = aiWebHostAllowed;
19
+ exports.buildAiTaskTools = buildAiTaskTools;
20
+ exports.runAiTaskAgent = runAiTaskAgent;
21
+ const assistant_1 = require("@creezio/assistant");
22
+ const assistant_2 = require("@creezio/assistant");
23
+ const assistant_3 = require("@creezio/assistant");
24
+ const config_js_1 = require("./brand/config.js");
25
+ const kanban_service_js_1 = require("./kanban-service.js");
26
+ function navigateAiWorkspace(opts) {
27
+ return (0, config_js_1.requireTasksBrand)().workspace.navigate(opts);
28
+ }
29
+ function openTabInAiWorkspace(opts) {
30
+ return (0, config_js_1.requireTasksBrand)().workspace.openTab(opts);
31
+ }
32
+ function listTabsInAiWorkspace(opts) {
33
+ return (0, config_js_1.requireTasksBrand)().workspace.listTabs(opts);
34
+ }
35
+ function webActionInAiWorkspace(opts) {
36
+ return (0, config_js_1.requireTasksBrand)().workspace.webAction(opts);
37
+ }
38
+ function hasPermission(permissions, required) {
39
+ return (0, config_js_1.requireTasksBrand)().navigation.hasPermission(permissions, required);
40
+ }
41
+ function permissionForPath(pathname) {
42
+ return (0, config_js_1.requireTasksBrand)().navigation.permissionForPath(pathname);
43
+ }
44
+ function resolveOpenTabRequest(input) {
45
+ return (0, config_js_1.requireTasksBrand)().externalTabs.resolve(input);
46
+ }
47
+ function toSupplierOpenTabParams(resolved) {
48
+ const { ok: _ok, ...rest } = resolved;
49
+ void _ok;
50
+ return (0, config_js_1.requireTasksBrand)().externalTabs.toWorkspaceParams(rest);
51
+ }
52
+ /** Stub LLM injectable par les tests (sinon OpenAI BYOK). */
53
+ let modelCallerOverride = null;
54
+ function setAiTaskModelCaller(fn) {
55
+ modelCallerOverride = fn;
56
+ }
57
+ /** Un modèle est disponible (BYOK OpenAI ou stub de test). */
58
+ function hasAiAgentModel() {
59
+ if (modelCallerOverride)
60
+ return true;
61
+ return Boolean((process.env.OPENAI_API_KEY || "").trim());
62
+ }
63
+ function aiTaskModel() {
64
+ return (0, config_js_1.tasksEnv)("MODEL") || (0, assistant_2.defaultModel)();
65
+ }
66
+ function aiTaskMaxSteps() {
67
+ const raw = (0, config_js_1.tasksEnvNumber)("MAX_STEPS", 20);
68
+ return Number.isFinite(raw) && raw > 0 ? Math.min(raw, 60) : 20;
69
+ }
70
+ function aiTaskTimeoutMs() {
71
+ const raw = (0, config_js_1.tasksEnvNumber)("RUN_TIMEOUT_MS", 10 * 60 * 1000);
72
+ return Number.isFinite(raw) && raw > 10_000 ? raw : 10 * 60 * 1000;
73
+ }
74
+ function aiTaskMaxTokens() {
75
+ const raw = (0, config_js_1.tasksEnvNumber)("MAX_TOKENS", 150_000);
76
+ return Number.isFinite(raw) && raw > 1000 ? raw : 150_000;
77
+ }
78
+ /**
79
+ * Allowlist optionnelle des hôtes web accessibles à l'agent
80
+ * (${requireTasksBrand().envPrefix}_WEB_ALLOWED_HOSTS, CSV, sous-domaines inclus). Vide = tout https.
81
+ */
82
+ function aiWebAllowedHosts() {
83
+ const raw = (0, config_js_1.tasksEnv)("WEB_ALLOWED_HOSTS");
84
+ if (!raw)
85
+ return null;
86
+ const hosts = raw
87
+ .split(",")
88
+ .map((h) => h.trim().toLowerCase().replace(/^\*\./, ""))
89
+ .filter(Boolean);
90
+ return hosts.length ? hosts : null;
91
+ }
92
+ function aiWebHostAllowed(url) {
93
+ const allowed = aiWebAllowedHosts();
94
+ if (!allowed)
95
+ return { ok: true };
96
+ let host = "";
97
+ try {
98
+ host = new URL(url).hostname.toLowerCase();
99
+ }
100
+ catch {
101
+ return { ok: false, error: "URL invalide" };
102
+ }
103
+ const match = allowed.some((h) => host === h || host.endsWith(`.${h}`));
104
+ return match
105
+ ? { ok: true }
106
+ : {
107
+ ok: false,
108
+ error: `Hôte « ${host} » hors de l'allowlist ${(0, config_js_1.requireTasksBrand)().envPrefix}_WEB_ALLOWED_HOSTS — demande à l'humain si nécessaire`,
109
+ };
110
+ }
111
+ function buildSystemPrompt(ctx) {
112
+ const perms = ctx.assignee.permissions || [];
113
+ const brand = (0, config_js_1.requireTasksBrand)();
114
+ return `Tu es « ${ctx.assignee.username} », collaborateur IA de ${brand.productName} (${brand.productDomain}).
115
+ Tu travailles dans TON espace de travail dédié (l'utilisateur peut t'observer via « Voir comme IA »).
116
+
117
+ ## Ta mission
118
+ Exécute la tâche du kanban qui t'est assignée, puis termine par \`finish_task\`.
119
+
120
+ ## Règles
121
+ - Tu as les permissions d'un collaborateur : ${perms.length ? perms.join(", ") : "(aucune)"}. Les navigations hors permission sont refusées — n'insiste pas, note la limite.
122
+ - Travaille par petites étapes : \`navigate\` vers la page utile, \`list_targets\` pour voir la page, \`click\` / \`type_text\` pour agir, re-\`list_targets\` pour vérifier l'effet.
123
+ - SITES WEB EXTERNES (fournisseurs, banques, outils SaaS) : \`open_tab\` pour ouvrir l'URL, puis les outils \`web_*\` (web_list_targets, web_click, web_type, web_scroll, web_read, web_screenshot). Les outils sans préfixe web_ ne pilotent QUE les pages CRM.
124
+ - Les onglets web utilisent TA session à toi (partition isolée). Si une page te demande de te connecter, présente un captcha, une 2FA, ou si une action est risquée/irréversible (paiement, envoi, suppression) : \`ask_human\` — ne tente JAMAIS de contourner.
125
+ - \`web_screenshot\` est utile quand \`web_list_targets\`/\`web_read\` ne suffisent pas (mise en page complexe, vérification visuelle). Utilise-le avec parcimonie.
126
+ - Pour une mission longue, un scraping web lourd ou une automation backend : délègue à l'agent central via \`delegate_to_hermes\` (crée une sous-tâche liée) et mentionne-le dans ton résumé.
127
+ - Si tu as besoin d'une décision ou validation humaine : \`ask_human\` (le run est mis en pause).
128
+ - OBLIGATOIRE : termine TOUJOURS par \`finish_task(success, summary)\`. success=true seulement si la mission est réellement accomplie ; sinon success=false avec le motif précis. Jamais de succès de complaisance.
129
+ - Réponds en français.
130
+
131
+ ## Contexte
132
+ - Kanban des tâches : ${brand.taskHref}
133
+ - Titre de ta tâche : ${ctx.task.title}`;
134
+ }
135
+ function buildUserPrompt(ctx) {
136
+ return [
137
+ `Tâche : ${ctx.task.title}`,
138
+ ctx.task.body?.trim() ? `\nBrief :\n${ctx.task.body.trim()}` : "",
139
+ `\nPriorité : ${ctx.task.priority}`,
140
+ ]
141
+ .filter(Boolean)
142
+ .join("\n");
143
+ }
144
+ function uiAction(ctx, uiType, uiParams) {
145
+ return (0, assistant_3.dispatchSupplierAction)("ai_workspace_ui_action", {
146
+ ai_user_id: ctx.assignee.id,
147
+ ui_type: uiType,
148
+ ui_params: uiParams,
149
+ }, undefined, { targetUserId: ctx.hostUserId, requireTargetOnline: true });
150
+ }
151
+ function webAction(ctx, webType, params, tabId) {
152
+ return webActionInAiWorkspace({
153
+ aiUserId: ctx.assignee.id,
154
+ hostUserId: ctx.hostUserId,
155
+ webType,
156
+ tabId,
157
+ params,
158
+ });
159
+ }
160
+ const optStr = (v) => v != null && String(v) ? String(v) : undefined;
161
+ function buildAiTaskTools(ctx) {
162
+ const perms = ctx.assignee.permissions || [];
163
+ return [
164
+ {
165
+ definition: {
166
+ type: "function",
167
+ function: {
168
+ name: "navigate",
169
+ description: "Navigue vers une page CRM dans TON espace (fake-cursor visible). Chemins relatifs : /taches, /produits, /marketplaces, /panier…",
170
+ parameters: {
171
+ type: "object",
172
+ properties: {
173
+ path: { type: "string", description: "Chemin CRM (ex. /produits)" },
174
+ },
175
+ required: ["path"],
176
+ },
177
+ },
178
+ },
179
+ execute: async (args) => {
180
+ const path = String(args.path || "").trim();
181
+ if (!path.startsWith("/")) {
182
+ return { ok: false, error: "path CRM requis (ex. /produits)" };
183
+ }
184
+ const needed = permissionForPath(path);
185
+ if (!hasPermission(perms, needed)) {
186
+ return {
187
+ ok: false,
188
+ error: `Permission manquante pour ${path} (${needed}) — hors de ton périmètre`,
189
+ code: "acl_denied",
190
+ };
191
+ }
192
+ return navigateAiWorkspace({
193
+ aiUserId: ctx.assignee.id,
194
+ hostUserId: ctx.hostUserId,
195
+ href: path,
196
+ });
197
+ },
198
+ },
199
+ {
200
+ definition: {
201
+ type: "function",
202
+ function: {
203
+ name: "list_targets",
204
+ description: "Inventaire des éléments actionnables de la page CRM courante de TON espace (refs t1, t2… pour click/type_text). À rappeler après chaque action pour voir l'état.",
205
+ parameters: {
206
+ type: "object",
207
+ properties: {
208
+ q: { type: "string", description: "Filtre optionnel sur les libellés" },
209
+ },
210
+ required: [],
211
+ },
212
+ },
213
+ },
214
+ execute: (args) => uiAction(ctx, "list_targets", {
215
+ q: args.q != null ? String(args.q) : undefined,
216
+ }),
217
+ },
218
+ {
219
+ definition: {
220
+ type: "function",
221
+ function: {
222
+ name: "click",
223
+ description: "Clique un élément via la souris virtuelle (ref de list_targets prioritaire, sinon libellé exact).",
224
+ parameters: {
225
+ type: "object",
226
+ properties: {
227
+ ref: { type: "string", description: "Ref (ex. t12)" },
228
+ label: { type: "string", description: "Libellé visible si ref inconnue" },
229
+ },
230
+ required: [],
231
+ },
232
+ },
233
+ },
234
+ execute: (args) => uiAction(ctx, "click", {
235
+ ref: args.ref != null ? String(args.ref) : undefined,
236
+ label: args.label != null ? String(args.label) : undefined,
237
+ }),
238
+ },
239
+ {
240
+ definition: {
241
+ type: "function",
242
+ function: {
243
+ name: "type_text",
244
+ description: "Tape du texte dans un champ visible (clic + frappe simulée).",
245
+ parameters: {
246
+ type: "object",
247
+ properties: {
248
+ ref: { type: "string" },
249
+ label: { type: "string" },
250
+ text: { type: "string" },
251
+ submit: { type: "boolean", description: "Entrée après la frappe" },
252
+ },
253
+ required: ["text"],
254
+ },
255
+ },
256
+ },
257
+ execute: (args) => uiAction(ctx, "type", {
258
+ ref: args.ref != null ? String(args.ref) : undefined,
259
+ label: args.label != null ? String(args.label) : undefined,
260
+ text: String(args.text || ""),
261
+ submit: args.submit === true,
262
+ }),
263
+ },
264
+ {
265
+ definition: {
266
+ type: "function",
267
+ function: {
268
+ name: "scroll",
269
+ description: "Fait défiler la page de TON espace (révéler des éléments).",
270
+ parameters: {
271
+ type: "object",
272
+ properties: {
273
+ direction: { type: "string", enum: ["up", "down"] },
274
+ },
275
+ required: ["direction"],
276
+ },
277
+ },
278
+ },
279
+ execute: (args) => uiAction(ctx, "scroll", {
280
+ direction: args.direction === "up" ? "up" : "down",
281
+ }),
282
+ },
283
+ {
284
+ definition: {
285
+ type: "function",
286
+ function: {
287
+ name: "open_tab",
288
+ description: "Ouvre une URL web (https) dans un onglet de TON espace (sites fournisseurs, docs).",
289
+ parameters: {
290
+ type: "object",
291
+ properties: {
292
+ url: { type: "string" },
293
+ title: { type: "string" },
294
+ },
295
+ required: ["url"],
296
+ },
297
+ },
298
+ },
299
+ execute: async (args) => {
300
+ const url = String(args.url || "");
301
+ const allowed = aiWebHostAllowed(url);
302
+ if (!allowed.ok) {
303
+ return { ok: false, error: allowed.error, code: "host_not_allowed" };
304
+ }
305
+ const resolved = resolveOpenTabRequest({
306
+ url,
307
+ title: args.title != null ? String(args.title) : undefined,
308
+ });
309
+ if (!resolved.ok) {
310
+ return { ok: false, error: resolved.error || "URL refusée" };
311
+ }
312
+ return openTabInAiWorkspace({
313
+ aiUserId: ctx.assignee.id,
314
+ hostUserId: ctx.hostUserId,
315
+ params: toSupplierOpenTabParams(resolved),
316
+ });
317
+ },
318
+ },
319
+ {
320
+ definition: {
321
+ type: "function",
322
+ function: {
323
+ name: "list_tabs",
324
+ description: "Liste les onglets ouverts dans TON espace.",
325
+ parameters: { type: "object", properties: {}, required: [] },
326
+ },
327
+ },
328
+ execute: () => listTabsInAiWorkspace({
329
+ aiUserId: ctx.assignee.id,
330
+ hostUserId: ctx.hostUserId,
331
+ }),
332
+ },
333
+ {
334
+ definition: {
335
+ type: "function",
336
+ function: {
337
+ name: "web_list_targets",
338
+ description: "Inventaire des éléments actionnables de l'onglet WEB actif de TON espace (refs s1-1, s1-2… pour web_click/web_type). À rappeler après chaque action web.",
339
+ parameters: {
340
+ type: "object",
341
+ properties: {
342
+ q: { type: "string", description: "Filtre optionnel sur les libellés" },
343
+ tab_id: { type: "string", description: "Onglet ciblé (défaut : actif)" },
344
+ },
345
+ required: [],
346
+ },
347
+ },
348
+ },
349
+ execute: (args) => webAction(ctx, "external_list_targets", { q: optStr(args.q) }, optStr(args.tab_id)),
350
+ },
351
+ {
352
+ definition: {
353
+ type: "function",
354
+ function: {
355
+ name: "web_click",
356
+ description: "Clique un élément de l'onglet web actif (clic trusted via CDP). ref de web_list_targets prioritaire, sinon libellé visible.",
357
+ parameters: {
358
+ type: "object",
359
+ properties: {
360
+ ref: { type: "string", description: "Ref (ex. s1-12)" },
361
+ label: { type: "string", description: "Libellé visible si ref inconnue" },
362
+ tab_id: { type: "string" },
363
+ },
364
+ required: [],
365
+ },
366
+ },
367
+ },
368
+ execute: (args) => webAction(ctx, "external_click", { ref: optStr(args.ref), label: optStr(args.label) }, optStr(args.tab_id)),
369
+ },
370
+ {
371
+ definition: {
372
+ type: "function",
373
+ function: {
374
+ name: "web_type",
375
+ description: "Tape du texte dans un champ de l'onglet web actif (clic + frappe trusted, champ vidé avant).",
376
+ parameters: {
377
+ type: "object",
378
+ properties: {
379
+ ref: { type: "string" },
380
+ label: { type: "string" },
381
+ text: { type: "string" },
382
+ submit: { type: "boolean", description: "Entrée après la frappe" },
383
+ tab_id: { type: "string" },
384
+ },
385
+ required: ["text"],
386
+ },
387
+ },
388
+ },
389
+ execute: (args) => webAction(ctx, "external_type", {
390
+ ref: optStr(args.ref),
391
+ label: optStr(args.label),
392
+ text: String(args.text || ""),
393
+ submit: args.submit === true,
394
+ }, optStr(args.tab_id)),
395
+ },
396
+ {
397
+ definition: {
398
+ type: "function",
399
+ function: {
400
+ name: "web_scroll",
401
+ description: "Fait défiler l'onglet web actif (révéler des éléments).",
402
+ parameters: {
403
+ type: "object",
404
+ properties: {
405
+ direction: { type: "string", enum: ["up", "down"] },
406
+ tab_id: { type: "string" },
407
+ },
408
+ required: ["direction"],
409
+ },
410
+ },
411
+ },
412
+ execute: (args) => webAction(ctx, "external_scroll", { direction: args.direction === "up" ? "up" : "down" }, optStr(args.tab_id)),
413
+ },
414
+ {
415
+ definition: {
416
+ type: "function",
417
+ function: {
418
+ name: "web_read",
419
+ description: "Lit le texte visible de l'onglet web actif (option q : blocs autour des lignes qui matchent).",
420
+ parameters: {
421
+ type: "object",
422
+ properties: {
423
+ q: { type: "string", description: "Filtre contextuel optionnel" },
424
+ max_chars: { type: "number", description: "Plafond de texte (défaut 6000)" },
425
+ tab_id: { type: "string" },
426
+ },
427
+ required: [],
428
+ },
429
+ },
430
+ },
431
+ execute: (args) => webAction(ctx, "external_read", {
432
+ q: optStr(args.q),
433
+ maxChars: typeof args.max_chars === "number" ? args.max_chars : undefined,
434
+ }, optStr(args.tab_id)),
435
+ },
436
+ {
437
+ definition: {
438
+ type: "function",
439
+ function: {
440
+ name: "web_screenshot",
441
+ description: "Capture d'écran de l'onglet web actif, jointe en image à la conversation (vision). À utiliser quand web_list_targets/web_read ne suffisent pas.",
442
+ parameters: {
443
+ type: "object",
444
+ properties: {
445
+ tab_id: { type: "string" },
446
+ },
447
+ required: [],
448
+ },
449
+ },
450
+ },
451
+ execute: (args) => webAction(ctx, "external_screenshot", {}, optStr(args.tab_id)),
452
+ },
453
+ {
454
+ definition: {
455
+ type: "function",
456
+ function: {
457
+ name: "delegate_to_hermes",
458
+ description: "Délègue une sous-mission à l'agent central Hermes (scraping lourd, batch, automation backend). Crée une sous-tâche liée sur /taches.",
459
+ parameters: {
460
+ type: "object",
461
+ properties: {
462
+ title: { type: "string", description: "Titre court de la sous-mission" },
463
+ body: { type: "string", description: "Consignes détaillées pour Hermes" },
464
+ },
465
+ required: ["title"],
466
+ },
467
+ },
468
+ },
469
+ execute: async (args) => {
470
+ const title = String(args.title || "").trim();
471
+ if (!title)
472
+ return { ok: false, error: "title requis" };
473
+ const { task, hermes, warning } = await (0, kanban_service_js_1.createTask)({
474
+ title,
475
+ body: args.body != null ? String(args.body) : "",
476
+ executorKind: "hermes",
477
+ parentTaskId: ctx.task.id,
478
+ createdBy: ctx.assignee.id,
479
+ source: "assistant",
480
+ idempotencyKey: `run:${ctx.runId}:${title.slice(0, 60)}`,
481
+ });
482
+ return {
483
+ ok: true,
484
+ subtask_id: task.id,
485
+ status: task.status,
486
+ hermes_task_id: hermes?.id || null,
487
+ warning: warning || null,
488
+ };
489
+ },
490
+ },
491
+ {
492
+ definition: {
493
+ type: "function",
494
+ function: {
495
+ name: "ask_human",
496
+ description: "Pose une question à l'humain et met le run en pause (HITL) jusqu'à sa réponse. À utiliser avant toute action risquée ou ambiguë.",
497
+ parameters: {
498
+ type: "object",
499
+ properties: {
500
+ question: { type: "string" },
501
+ },
502
+ required: ["question"],
503
+ },
504
+ },
505
+ },
506
+ execute: async (args) => {
507
+ const question = String(args.question || "").trim() || "Validation requise.";
508
+ const res = await ctx.askHuman(question);
509
+ if (res.outcome === "resumed") {
510
+ return { ok: true, response: res.response || "ok" };
511
+ }
512
+ return {
513
+ ok: false,
514
+ error: res.outcome === "timeout"
515
+ ? "Pas de réponse humaine (timeout HITL)"
516
+ : "Run annulé pendant l'attente humaine",
517
+ code: `hitl_${res.outcome}`,
518
+ };
519
+ },
520
+ },
521
+ {
522
+ definition: {
523
+ type: "function",
524
+ function: {
525
+ name: "finish_task",
526
+ description: "Termine le run. success=true UNIQUEMENT si la mission est réellement accomplie ; sinon success=false + motif.",
527
+ parameters: {
528
+ type: "object",
529
+ properties: {
530
+ success: { type: "boolean" },
531
+ summary: { type: "string", description: "Résumé factuel du travail" },
532
+ },
533
+ required: ["success", "summary"],
534
+ },
535
+ },
536
+ },
537
+ terminal: true,
538
+ execute: async (args) => ({
539
+ ok: true,
540
+ success: args.success === true,
541
+ summary: String(args.summary || ""),
542
+ }),
543
+ },
544
+ ];
545
+ }
546
+ /** Déroule la boucle LLM pour un run. Ne lève pas (statuts explicites). */
547
+ async function runAiTaskAgent(ctx) {
548
+ const loop = await (0, assistant_1.runAgentLoop)({
549
+ model: aiTaskModel(),
550
+ systemPrompt: buildSystemPrompt(ctx),
551
+ userPrompt: buildUserPrompt(ctx),
552
+ tools: buildAiTaskTools(ctx),
553
+ maxSteps: aiTaskMaxSteps(),
554
+ timeoutMs: aiTaskTimeoutMs(),
555
+ maxTokens: aiTaskMaxTokens(),
556
+ signal: ctx.signal,
557
+ onStep: ctx.onStep,
558
+ callModel: modelCallerOverride || assistant_1.callOpenAiModel,
559
+ });
560
+ const success = loop.status === "finished" && loop.terminal?.success === true;
561
+ const summary = (loop.status === "finished" && typeof loop.terminal?.summary === "string"
562
+ ? loop.terminal.summary
563
+ : "") ||
564
+ (loop.status === "finished"
565
+ ? "Run terminé sans résumé"
566
+ : `Run interrompu (${loop.status}${loop.error ? ` — ${loop.error}` : ""})`);
567
+ return { loop, success, summary };
568
+ }
569
+ //# sourceMappingURL=ai-task-agent.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ai-task-agent.js","sourceRoot":"","sources":["../src/ai-task-agent.ts"],"names":[],"mappings":"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"}