@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.
- package/README.md +279 -0
- package/dist/.creezio-src-hash.json +4 -0
- package/dist/ai-task-agent.d.ts +47 -0
- package/dist/ai-task-agent.d.ts.map +1 -0
- package/dist/ai-task-agent.js +558 -0
- package/dist/ai-task-agent.js.map +1 -0
- package/dist/ai-task-runner.d.ts +78 -0
- package/dist/ai-task-runner.d.ts.map +1 -0
- package/dist/ai-task-runner.js +645 -0
- package/dist/ai-task-runner.js.map +1 -0
- package/dist/api-mount.d.ts +4 -0
- package/dist/api-mount.d.ts.map +1 -0
- package/dist/api-mount.js +91 -0
- package/dist/api-mount.js.map +1 -0
- package/dist/assistant-adapter.d.ts +7 -0
- package/dist/assistant-adapter.d.ts.map +1 -0
- package/dist/assistant-adapter.js +96 -0
- package/dist/assistant-adapter.js.map +1 -0
- package/dist/brand/config.d.ts +165 -0
- package/dist/brand/config.d.ts.map +1 -0
- package/dist/brand/config.js +39 -0
- package/dist/brand/config.js.map +1 -0
- package/dist/env-bridge.d.ts +12 -0
- package/dist/env-bridge.d.ts.map +1 -0
- package/dist/env-bridge.js +33 -0
- package/dist/env-bridge.js.map +1 -0
- package/dist/hono-routes.d.ts +8 -0
- package/dist/hono-routes.d.ts.map +1 -0
- package/dist/hono-routes.js +563 -0
- package/dist/hono-routes.js.map +1 -0
- package/dist/index.d.ts +29 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +21 -0
- package/dist/index.js.map +1 -0
- package/dist/kanban-service.d.ts +136 -0
- package/dist/kanban-service.d.ts.map +1 -0
- package/dist/kanban-service.js +580 -0
- package/dist/kanban-service.js.map +1 -0
- package/dist/mcp-host-tools.d.ts +59 -0
- package/dist/mcp-host-tools.d.ts.map +1 -0
- package/dist/mcp-host-tools.js +326 -0
- package/dist/mcp-host-tools.js.map +1 -0
- package/dist/mcp-workspace-tools.d.ts +15 -0
- package/dist/mcp-workspace-tools.d.ts.map +1 -0
- package/dist/mcp-workspace-tools.js +338 -0
- package/dist/mcp-workspace-tools.js.map +1 -0
- package/dist/memory-store.d.ts +3 -0
- package/dist/memory-store.d.ts.map +1 -0
- package/dist/memory-store.js +75 -0
- package/dist/memory-store.js.map +1 -0
- package/dist/sqlite-driver.d.ts +13 -0
- package/dist/sqlite-driver.d.ts.map +1 -0
- package/dist/sqlite-driver.js +13 -0
- package/dist/sqlite-driver.js.map +1 -0
- package/dist/sqlite-store.d.ts +15 -0
- package/dist/sqlite-store.d.ts.map +1 -0
- package/dist/sqlite-store.js +113 -0
- package/dist/sqlite-store.js.map +1 -0
- package/dist/task-runs.d.ts +108 -0
- package/dist/task-runs.d.ts.map +1 -0
- package/dist/task-runs.js +427 -0
- package/dist/task-runs.js.map +1 -0
- package/dist/types.d.ts +35 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +15 -0
- package/dist/types.js.map +1 -0
- package/dist-cjs/ai-task-agent.js +569 -0
- package/dist-cjs/ai-task-agent.js.map +1 -0
- package/dist-cjs/ai-task-runner.js +660 -0
- package/dist-cjs/ai-task-runner.js.map +1 -0
- package/dist-cjs/api-mount.js +94 -0
- package/dist-cjs/api-mount.js.map +1 -0
- package/dist-cjs/assistant-adapter.js +99 -0
- package/dist-cjs/assistant-adapter.js.map +1 -0
- package/dist-cjs/brand/config.js +47 -0
- package/dist-cjs/brand/config.js.map +1 -0
- package/dist-cjs/env-bridge.js +36 -0
- package/dist-cjs/env-bridge.js.map +1 -0
- package/dist-cjs/hono-routes.js +566 -0
- package/dist-cjs/hono-routes.js.map +1 -0
- package/dist-cjs/index.js +117 -0
- package/dist-cjs/index.js.map +1 -0
- package/dist-cjs/kanban-service.js +601 -0
- package/dist-cjs/kanban-service.js.map +1 -0
- package/dist-cjs/mcp-host-tools.js +333 -0
- package/dist-cjs/mcp-host-tools.js.map +1 -0
- package/dist-cjs/mcp-workspace-tools.js +342 -0
- package/dist-cjs/mcp-workspace-tools.js.map +1 -0
- package/dist-cjs/memory-store.js +81 -0
- package/dist-cjs/memory-store.js.map +1 -0
- package/dist-cjs/package.json +3 -0
- package/dist-cjs/sqlite-driver.js +16 -0
- package/dist-cjs/sqlite-driver.js.map +1 -0
- package/dist-cjs/sqlite-store.js +119 -0
- package/dist-cjs/sqlite-store.js.map +1 -0
- package/dist-cjs/task-runs.js +457 -0
- package/dist-cjs/task-runs.js.map +1 -0
- package/dist-cjs/types.js +18 -0
- package/dist-cjs/types.js.map +1 -0
- package/package.json +79 -0
- package/scripts/port-from-tempoflow.mjs +405 -0
- package/ui/ai-activity-panel.tsx +559 -0
- package/ui/index.ts +7 -0
- package/ui/task-detail-sheet.tsx +668 -0
- package/ui/tasks-kanban-client.tsx +647 -0
- package/ui/tasks-types.ts +120 -0
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
export declare const RUN_STATUSES: readonly ["queued", "running", "succeeded", "failed", "cancelled"];
|
|
2
|
+
export type RunStatus = (typeof RUN_STATUSES)[number];
|
|
3
|
+
export type TaskRunRow = {
|
|
4
|
+
id: string;
|
|
5
|
+
task_id: string;
|
|
6
|
+
assignee_user_id: string;
|
|
7
|
+
status: RunStatus;
|
|
8
|
+
host_device_id: string | null;
|
|
9
|
+
started_at: string | null;
|
|
10
|
+
finished_at: string | null;
|
|
11
|
+
last_error: string | null;
|
|
12
|
+
step_count: number;
|
|
13
|
+
hitl_prompt: string | null;
|
|
14
|
+
hitl_response: string | null;
|
|
15
|
+
retry_of: string | null;
|
|
16
|
+
created_at: string;
|
|
17
|
+
updated_at: string;
|
|
18
|
+
};
|
|
19
|
+
export type AgentLogLevel = "debug" | "info" | "warn" | "error" | "tool" | "decision" | "nav";
|
|
20
|
+
export type AgentSessionLog = {
|
|
21
|
+
id: string;
|
|
22
|
+
run_id: string;
|
|
23
|
+
seq: number;
|
|
24
|
+
level: AgentLogLevel;
|
|
25
|
+
event_type: string;
|
|
26
|
+
message: string;
|
|
27
|
+
payload_json: string | null;
|
|
28
|
+
created_at: string;
|
|
29
|
+
};
|
|
30
|
+
export type AgentLogEvent = {
|
|
31
|
+
run: TaskRunRow;
|
|
32
|
+
log: AgentSessionLog;
|
|
33
|
+
};
|
|
34
|
+
type LogListener = (ev: AgentLogEvent) => void;
|
|
35
|
+
type RunListener = (run: TaskRunRow) => void;
|
|
36
|
+
/** Abonne aux logs d'un run, d'un user (assignee) ou `*` (tous). */
|
|
37
|
+
export declare function subscribeAgentLogs(key: string, fn: LogListener): () => void;
|
|
38
|
+
export declare function subscribeTaskRuns(key: string, fn: RunListener): () => void;
|
|
39
|
+
export declare function taskRunsReady(): boolean;
|
|
40
|
+
export declare function taskRunsHitlReady(): boolean;
|
|
41
|
+
/** Colonne usage_tokens présente (migration 031). */
|
|
42
|
+
export declare function taskRunsTokensReady(): boolean;
|
|
43
|
+
/** Runs créés depuis minuit UTC (quota MAX_RUNS_PER_DAY (envPrefix)). */
|
|
44
|
+
export declare function countRunsCreatedToday(): number;
|
|
45
|
+
/** Tokens LLM consommés depuis minuit UTC (quota MAX_TOKENS_PER_DAY (envPrefix)). */
|
|
46
|
+
export declare function sumUsageTokensToday(): number;
|
|
47
|
+
export declare function getTaskRun(id: string): TaskRunRow | null;
|
|
48
|
+
export declare function listTaskRunsForTask(taskId: string): TaskRunRow[];
|
|
49
|
+
export declare function getActiveRunForAssignee(assigneeUserId: string): TaskRunRow | null;
|
|
50
|
+
export declare function countRunningRuns(): number;
|
|
51
|
+
export declare function listRunningRuns(): TaskRunRow[];
|
|
52
|
+
export declare function getRunningRun(): TaskRunRow | null;
|
|
53
|
+
/** Défaut 2 ; plafond dur 8. Env MAX_CONCURRENT (envPrefix). */
|
|
54
|
+
export declare function maxConcurrentAiRuns(): number;
|
|
55
|
+
export declare function enqueueTaskRun(input: {
|
|
56
|
+
taskId: string;
|
|
57
|
+
assigneeUserId: string;
|
|
58
|
+
retryOf?: string | null;
|
|
59
|
+
}): TaskRunRow;
|
|
60
|
+
/**
|
|
61
|
+
* H4 « Hermes cerveau unique » — run HITL DÉTACHÉ : question posée par un
|
|
62
|
+
* service (tool MCP `platform.ask_human`) sans boucle agent derrière.
|
|
63
|
+
*
|
|
64
|
+
* Réutilise l'infra `task_runs.hitl_prompt` (choix documenté : même canal de
|
|
65
|
+
* réponse humain que le runner — kanban « en attente humain » +
|
|
66
|
+
* `answer_ai_question`/`resumeHitlRun` — zéro table ni UI parallèle). Le run
|
|
67
|
+
* est inséré directement en `running` + `hitl_prompt` (jamais `queued`, pour
|
|
68
|
+
* que la boucle runner ne le claim pas). La réponse est relue par
|
|
69
|
+
* `platform.get_human_answer`, qui clôt le run.
|
|
70
|
+
*/
|
|
71
|
+
export declare function openDetachedHitlRun(input: {
|
|
72
|
+
taskId: string;
|
|
73
|
+
assigneeUserId: string;
|
|
74
|
+
prompt: string;
|
|
75
|
+
}): TaskRunRow | null;
|
|
76
|
+
/**
|
|
77
|
+
* Claim atomique d'un run queued si le nombre de runs running < maxConcurrent.
|
|
78
|
+
*/
|
|
79
|
+
export declare function claimNextQueuedRun(maxConcurrent?: number): TaskRunRow | null;
|
|
80
|
+
export declare function finishTaskRun(id: string, result: {
|
|
81
|
+
status: "succeeded" | "failed" | "cancelled";
|
|
82
|
+
lastError?: string | null;
|
|
83
|
+
hostDeviceId?: string | null;
|
|
84
|
+
stepCount?: number;
|
|
85
|
+
/** Tokens LLM consommés par la boucle (quota journalier). */
|
|
86
|
+
usageTokens?: number;
|
|
87
|
+
}): TaskRunRow | null;
|
|
88
|
+
export declare function setHitlPrompt(id: string, prompt: string): TaskRunRow | null;
|
|
89
|
+
export declare function resumeHitlRun(id: string, response?: string): TaskRunRow | null;
|
|
90
|
+
export declare function clearHitlResponse(id: string): void;
|
|
91
|
+
export declare function cancelTaskRun(id: string): TaskRunRow | null;
|
|
92
|
+
export declare function bumpRunStepCount(id: string): number;
|
|
93
|
+
export declare function appendAgentLog(input: {
|
|
94
|
+
runId: string;
|
|
95
|
+
level?: AgentLogLevel;
|
|
96
|
+
eventType: string;
|
|
97
|
+
message: string;
|
|
98
|
+
payload?: unknown;
|
|
99
|
+
}): AgentSessionLog;
|
|
100
|
+
export declare function listAgentLogs(runId: string, afterSeq?: number, limit?: number): AgentSessionLog[];
|
|
101
|
+
/** Purge logs (+ runs terminés) plus vieux que N jours. */
|
|
102
|
+
export declare function purgeAgentLogsOlderThan(days: number): {
|
|
103
|
+
logsDeleted: number;
|
|
104
|
+
runsDeleted: number;
|
|
105
|
+
};
|
|
106
|
+
export declare function isHitlPaused(run: TaskRunRow | null | undefined): boolean;
|
|
107
|
+
export {};
|
|
108
|
+
//# sourceMappingURL=task-runs.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"task-runs.d.ts","sourceRoot":"","sources":["../src/task-runs.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,427 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Runs d'exécution des tâches IA + logs session agent.
|
|
3
|
+
*/
|
|
4
|
+
import { randomUUID } from "node:crypto";
|
|
5
|
+
import { requireTasksBrand, tasksEnv } from "./brand/config.js";
|
|
6
|
+
function getWriteDb() {
|
|
7
|
+
return requireTasksBrand().db.getWriteDb();
|
|
8
|
+
}
|
|
9
|
+
function queryAll(sql, params = []) {
|
|
10
|
+
return requireTasksBrand().db.queryAll(sql, params);
|
|
11
|
+
}
|
|
12
|
+
function queryOne(sql, params = []) {
|
|
13
|
+
return requireTasksBrand().db.queryOne(sql, params);
|
|
14
|
+
}
|
|
15
|
+
function tableExists(name) {
|
|
16
|
+
return requireTasksBrand().db.tableExists(name);
|
|
17
|
+
}
|
|
18
|
+
export const RUN_STATUSES = [
|
|
19
|
+
"queued",
|
|
20
|
+
"running",
|
|
21
|
+
"succeeded",
|
|
22
|
+
"failed",
|
|
23
|
+
"cancelled",
|
|
24
|
+
];
|
|
25
|
+
const g = globalThis;
|
|
26
|
+
const logListeners = g.__creezioTasksAgentLogListeners ?? new Map();
|
|
27
|
+
g.__creezioTasksAgentLogListeners = logListeners;
|
|
28
|
+
const runListeners = g.__creezioTasksAgentRunListeners ?? new Map();
|
|
29
|
+
g.__creezioTasksAgentRunListeners = runListeners;
|
|
30
|
+
function notifyLog(ev) {
|
|
31
|
+
const keys = [ev.run.id, ev.run.assignee_user_id, "*"];
|
|
32
|
+
for (const key of keys) {
|
|
33
|
+
const set = logListeners.get(key);
|
|
34
|
+
if (!set)
|
|
35
|
+
continue;
|
|
36
|
+
for (const fn of Array.from(set)) {
|
|
37
|
+
try {
|
|
38
|
+
fn(ev);
|
|
39
|
+
}
|
|
40
|
+
catch {
|
|
41
|
+
/* ignore */
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
function notifyRun(run) {
|
|
47
|
+
const keys = [run.id, run.assignee_user_id, "*"];
|
|
48
|
+
for (const key of keys) {
|
|
49
|
+
const set = runListeners.get(key);
|
|
50
|
+
if (!set)
|
|
51
|
+
continue;
|
|
52
|
+
for (const fn of Array.from(set)) {
|
|
53
|
+
try {
|
|
54
|
+
fn(run);
|
|
55
|
+
}
|
|
56
|
+
catch {
|
|
57
|
+
/* ignore */
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
/** Abonne aux logs d'un run, d'un user (assignee) ou `*` (tous). */
|
|
63
|
+
export function subscribeAgentLogs(key, fn) {
|
|
64
|
+
let set = logListeners.get(key);
|
|
65
|
+
if (!set) {
|
|
66
|
+
set = new Set();
|
|
67
|
+
logListeners.set(key, set);
|
|
68
|
+
}
|
|
69
|
+
set.add(fn);
|
|
70
|
+
return () => {
|
|
71
|
+
set.delete(fn);
|
|
72
|
+
if (set.size === 0)
|
|
73
|
+
logListeners.delete(key);
|
|
74
|
+
};
|
|
75
|
+
}
|
|
76
|
+
export function subscribeTaskRuns(key, fn) {
|
|
77
|
+
let set = runListeners.get(key);
|
|
78
|
+
if (!set) {
|
|
79
|
+
set = new Set();
|
|
80
|
+
runListeners.set(key, set);
|
|
81
|
+
}
|
|
82
|
+
set.add(fn);
|
|
83
|
+
return () => {
|
|
84
|
+
set.delete(fn);
|
|
85
|
+
if (set.size === 0)
|
|
86
|
+
runListeners.delete(key);
|
|
87
|
+
};
|
|
88
|
+
}
|
|
89
|
+
function normalizeRun(row) {
|
|
90
|
+
if (!row)
|
|
91
|
+
return null;
|
|
92
|
+
return {
|
|
93
|
+
...row,
|
|
94
|
+
hitl_prompt: row.hitl_prompt ?? null,
|
|
95
|
+
hitl_response: row.hitl_response ?? null,
|
|
96
|
+
retry_of: row.retry_of ?? null,
|
|
97
|
+
};
|
|
98
|
+
}
|
|
99
|
+
export function taskRunsReady() {
|
|
100
|
+
return tableExists("task_runs") && tableExists("agent_session_logs");
|
|
101
|
+
}
|
|
102
|
+
export function taskRunsHitlReady() {
|
|
103
|
+
if (!taskRunsReady())
|
|
104
|
+
return false;
|
|
105
|
+
try {
|
|
106
|
+
const cols = queryAll(`PRAGMA table_info(task_runs)`);
|
|
107
|
+
return cols.some((c) => c.name === "hitl_prompt");
|
|
108
|
+
}
|
|
109
|
+
catch {
|
|
110
|
+
return false;
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
/** Colonne usage_tokens présente (migration 031). */
|
|
114
|
+
export function taskRunsTokensReady() {
|
|
115
|
+
if (!taskRunsReady())
|
|
116
|
+
return false;
|
|
117
|
+
try {
|
|
118
|
+
const cols = queryAll(`PRAGMA table_info(task_runs)`);
|
|
119
|
+
return cols.some((c) => c.name === "usage_tokens");
|
|
120
|
+
}
|
|
121
|
+
catch {
|
|
122
|
+
return false;
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
/** Runs créés depuis minuit UTC (quota MAX_RUNS_PER_DAY (envPrefix)). */
|
|
126
|
+
export function countRunsCreatedToday() {
|
|
127
|
+
if (!taskRunsReady())
|
|
128
|
+
return 0;
|
|
129
|
+
const row = queryOne(`SELECT COUNT(*) AS c FROM task_runs WHERE created_at >= date('now')`);
|
|
130
|
+
return row?.c ?? 0;
|
|
131
|
+
}
|
|
132
|
+
/** Tokens LLM consommés depuis minuit UTC (quota MAX_TOKENS_PER_DAY (envPrefix)). */
|
|
133
|
+
export function sumUsageTokensToday() {
|
|
134
|
+
if (!taskRunsTokensReady())
|
|
135
|
+
return 0;
|
|
136
|
+
const row = queryOne(`SELECT COALESCE(SUM(usage_tokens), 0) AS s FROM task_runs
|
|
137
|
+
WHERE created_at >= date('now')`);
|
|
138
|
+
return row?.s ?? 0;
|
|
139
|
+
}
|
|
140
|
+
export function getTaskRun(id) {
|
|
141
|
+
if (!taskRunsReady())
|
|
142
|
+
return null;
|
|
143
|
+
return normalizeRun(queryOne(`SELECT * FROM task_runs WHERE id = ?`, [id]) ?? null);
|
|
144
|
+
}
|
|
145
|
+
export function listTaskRunsForTask(taskId) {
|
|
146
|
+
if (!taskRunsReady())
|
|
147
|
+
return [];
|
|
148
|
+
return queryAll(`SELECT * FROM task_runs WHERE task_id = ? ORDER BY created_at DESC`, [taskId]).map((r) => normalizeRun(r));
|
|
149
|
+
}
|
|
150
|
+
export function getActiveRunForAssignee(assigneeUserId) {
|
|
151
|
+
if (!taskRunsReady())
|
|
152
|
+
return null;
|
|
153
|
+
return normalizeRun(queryOne(`SELECT * FROM task_runs
|
|
154
|
+
WHERE assignee_user_id = ? AND status IN ('queued','running')
|
|
155
|
+
ORDER BY
|
|
156
|
+
CASE status WHEN 'running' THEN 0 ELSE 1 END,
|
|
157
|
+
created_at ASC
|
|
158
|
+
LIMIT 1`, [assigneeUserId]) ?? null);
|
|
159
|
+
}
|
|
160
|
+
export function countRunningRuns() {
|
|
161
|
+
if (!taskRunsReady())
|
|
162
|
+
return 0;
|
|
163
|
+
const row = queryOne(`SELECT COUNT(*) AS c FROM task_runs WHERE status = 'running'`);
|
|
164
|
+
return row?.c ?? 0;
|
|
165
|
+
}
|
|
166
|
+
export function listRunningRuns() {
|
|
167
|
+
if (!taskRunsReady())
|
|
168
|
+
return [];
|
|
169
|
+
return queryAll(`SELECT * FROM task_runs WHERE status = 'running' ORDER BY started_at ASC`).map((r) => normalizeRun(r));
|
|
170
|
+
}
|
|
171
|
+
export function getRunningRun() {
|
|
172
|
+
return listRunningRuns()[0] ?? null;
|
|
173
|
+
}
|
|
174
|
+
/** Défaut 2 ; plafond dur 8. Env MAX_CONCURRENT (envPrefix). */
|
|
175
|
+
export function maxConcurrentAiRuns() {
|
|
176
|
+
const raw = Number(tasksEnv("MAX_CONCURRENT", "2") || "2");
|
|
177
|
+
if (!Number.isFinite(raw) || raw < 1)
|
|
178
|
+
return 2;
|
|
179
|
+
return Math.min(8, Math.floor(raw));
|
|
180
|
+
}
|
|
181
|
+
export function enqueueTaskRun(input) {
|
|
182
|
+
if (!taskRunsReady()) {
|
|
183
|
+
throw new Error("schéma task_runs plateforme requis (task_runs)");
|
|
184
|
+
}
|
|
185
|
+
const existing = queryOne(`SELECT * FROM task_runs
|
|
186
|
+
WHERE task_id = ? AND status IN ('queued','running')
|
|
187
|
+
LIMIT 1`, [input.taskId]);
|
|
188
|
+
if (existing)
|
|
189
|
+
return normalizeRun(existing);
|
|
190
|
+
const id = randomUUID();
|
|
191
|
+
if (taskRunsHitlReady()) {
|
|
192
|
+
getWriteDb()
|
|
193
|
+
.prepare(`INSERT INTO task_runs (id, task_id, assignee_user_id, status, retry_of)
|
|
194
|
+
VALUES (?, ?, ?, 'queued', ?)`)
|
|
195
|
+
.run(id, input.taskId, input.assigneeUserId, input.retryOf ?? null);
|
|
196
|
+
}
|
|
197
|
+
else {
|
|
198
|
+
getWriteDb()
|
|
199
|
+
.prepare(`INSERT INTO task_runs (id, task_id, assignee_user_id, status)
|
|
200
|
+
VALUES (?, ?, ?, 'queued')`)
|
|
201
|
+
.run(id, input.taskId, input.assigneeUserId);
|
|
202
|
+
}
|
|
203
|
+
const run = getTaskRun(id);
|
|
204
|
+
notifyRun(run);
|
|
205
|
+
return run;
|
|
206
|
+
}
|
|
207
|
+
/**
|
|
208
|
+
* H4 « Hermes cerveau unique » — run HITL DÉTACHÉ : question posée par un
|
|
209
|
+
* service (tool MCP `platform.ask_human`) sans boucle agent derrière.
|
|
210
|
+
*
|
|
211
|
+
* Réutilise l'infra `task_runs.hitl_prompt` (choix documenté : même canal de
|
|
212
|
+
* réponse humain que le runner — kanban « en attente humain » +
|
|
213
|
+
* `answer_ai_question`/`resumeHitlRun` — zéro table ni UI parallèle). Le run
|
|
214
|
+
* est inséré directement en `running` + `hitl_prompt` (jamais `queued`, pour
|
|
215
|
+
* que la boucle runner ne le claim pas). La réponse est relue par
|
|
216
|
+
* `platform.get_human_answer`, qui clôt le run.
|
|
217
|
+
*/
|
|
218
|
+
export function openDetachedHitlRun(input) {
|
|
219
|
+
if (!taskRunsReady() || !taskRunsHitlReady())
|
|
220
|
+
return null;
|
|
221
|
+
const id = randomUUID();
|
|
222
|
+
getWriteDb()
|
|
223
|
+
.prepare(`INSERT INTO task_runs
|
|
224
|
+
(id, task_id, assignee_user_id, status, started_at, hitl_prompt)
|
|
225
|
+
VALUES (?, ?, ?, 'running', datetime('now'), ?)`)
|
|
226
|
+
.run(id, input.taskId, input.assigneeUserId, input.prompt.slice(0, 4000));
|
|
227
|
+
const run = getTaskRun(id);
|
|
228
|
+
if (run)
|
|
229
|
+
notifyRun(run);
|
|
230
|
+
return run;
|
|
231
|
+
}
|
|
232
|
+
/**
|
|
233
|
+
* Claim atomique d'un run queued si le nombre de runs running < maxConcurrent.
|
|
234
|
+
*/
|
|
235
|
+
export function claimNextQueuedRun(maxConcurrent = maxConcurrentAiRuns()) {
|
|
236
|
+
if (!taskRunsReady())
|
|
237
|
+
return null;
|
|
238
|
+
if (countRunningRuns() >= maxConcurrent)
|
|
239
|
+
return null;
|
|
240
|
+
const next = queryOne(`SELECT * FROM task_runs WHERE status = 'queued'
|
|
241
|
+
ORDER BY created_at ASC LIMIT 1`);
|
|
242
|
+
if (!next)
|
|
243
|
+
return null;
|
|
244
|
+
const r = getWriteDb()
|
|
245
|
+
.prepare(`UPDATE task_runs
|
|
246
|
+
SET status = 'running',
|
|
247
|
+
started_at = datetime('now'),
|
|
248
|
+
updated_at = datetime('now')
|
|
249
|
+
WHERE id = ? AND status = 'queued'
|
|
250
|
+
AND (
|
|
251
|
+
SELECT COUNT(*) FROM task_runs WHERE status = 'running' AND id != ?
|
|
252
|
+
) < ?`)
|
|
253
|
+
.run(next.id, next.id, maxConcurrent);
|
|
254
|
+
if (r.changes === 0)
|
|
255
|
+
return null;
|
|
256
|
+
const run = getTaskRun(next.id);
|
|
257
|
+
if (run)
|
|
258
|
+
notifyRun(run);
|
|
259
|
+
return run;
|
|
260
|
+
}
|
|
261
|
+
export function finishTaskRun(id, result) {
|
|
262
|
+
if (!taskRunsReady())
|
|
263
|
+
return null;
|
|
264
|
+
if (typeof result.usageTokens === "number" &&
|
|
265
|
+
result.usageTokens > 0 &&
|
|
266
|
+
taskRunsTokensReady()) {
|
|
267
|
+
getWriteDb()
|
|
268
|
+
.prepare(`UPDATE task_runs SET usage_tokens = ? WHERE id = ?`)
|
|
269
|
+
.run(Math.round(result.usageTokens), id);
|
|
270
|
+
}
|
|
271
|
+
if (taskRunsHitlReady()) {
|
|
272
|
+
getWriteDb()
|
|
273
|
+
.prepare(`UPDATE task_runs
|
|
274
|
+
SET status = ?,
|
|
275
|
+
last_error = ?,
|
|
276
|
+
host_device_id = COALESCE(?, host_device_id),
|
|
277
|
+
step_count = COALESCE(?, step_count),
|
|
278
|
+
hitl_prompt = NULL,
|
|
279
|
+
finished_at = datetime('now'),
|
|
280
|
+
updated_at = datetime('now')
|
|
281
|
+
WHERE id = ?`)
|
|
282
|
+
.run(result.status, result.lastError ?? null, result.hostDeviceId ?? null, result.stepCount ?? null, id);
|
|
283
|
+
}
|
|
284
|
+
else {
|
|
285
|
+
getWriteDb()
|
|
286
|
+
.prepare(`UPDATE task_runs
|
|
287
|
+
SET status = ?,
|
|
288
|
+
last_error = ?,
|
|
289
|
+
host_device_id = COALESCE(?, host_device_id),
|
|
290
|
+
step_count = COALESCE(?, step_count),
|
|
291
|
+
finished_at = datetime('now'),
|
|
292
|
+
updated_at = datetime('now')
|
|
293
|
+
WHERE id = ?`)
|
|
294
|
+
.run(result.status, result.lastError ?? null, result.hostDeviceId ?? null, result.stepCount ?? null, id);
|
|
295
|
+
}
|
|
296
|
+
const run = getTaskRun(id);
|
|
297
|
+
if (run)
|
|
298
|
+
notifyRun(run);
|
|
299
|
+
return run;
|
|
300
|
+
}
|
|
301
|
+
export function setHitlPrompt(id, prompt) {
|
|
302
|
+
if (!taskRunsHitlReady())
|
|
303
|
+
return null;
|
|
304
|
+
getWriteDb()
|
|
305
|
+
.prepare(`UPDATE task_runs
|
|
306
|
+
SET hitl_prompt = ?,
|
|
307
|
+
hitl_response = NULL,
|
|
308
|
+
updated_at = datetime('now')
|
|
309
|
+
WHERE id = ? AND status = 'running'`)
|
|
310
|
+
.run(prompt, id);
|
|
311
|
+
const run = getTaskRun(id);
|
|
312
|
+
if (run)
|
|
313
|
+
notifyRun(run);
|
|
314
|
+
return run;
|
|
315
|
+
}
|
|
316
|
+
export function resumeHitlRun(id, response = "ok") {
|
|
317
|
+
if (!taskRunsHitlReady())
|
|
318
|
+
return null;
|
|
319
|
+
const current = getTaskRun(id);
|
|
320
|
+
if (!current || current.status !== "running" || !current.hitl_prompt) {
|
|
321
|
+
return null;
|
|
322
|
+
}
|
|
323
|
+
getWriteDb()
|
|
324
|
+
.prepare(`UPDATE task_runs
|
|
325
|
+
SET hitl_prompt = NULL,
|
|
326
|
+
hitl_response = ?,
|
|
327
|
+
updated_at = datetime('now')
|
|
328
|
+
WHERE id = ? AND status = 'running'`)
|
|
329
|
+
.run(response.slice(0, 2000), id);
|
|
330
|
+
const run = getTaskRun(id);
|
|
331
|
+
if (run)
|
|
332
|
+
notifyRun(run);
|
|
333
|
+
return run;
|
|
334
|
+
}
|
|
335
|
+
export function clearHitlResponse(id) {
|
|
336
|
+
if (!taskRunsHitlReady())
|
|
337
|
+
return;
|
|
338
|
+
getWriteDb()
|
|
339
|
+
.prepare(`UPDATE task_runs SET hitl_response = NULL, updated_at = datetime('now')
|
|
340
|
+
WHERE id = ?`)
|
|
341
|
+
.run(id);
|
|
342
|
+
}
|
|
343
|
+
export function cancelTaskRun(id) {
|
|
344
|
+
const run = getTaskRun(id);
|
|
345
|
+
if (!run)
|
|
346
|
+
return null;
|
|
347
|
+
if (run.status !== "queued" && run.status !== "running")
|
|
348
|
+
return run;
|
|
349
|
+
return finishTaskRun(id, {
|
|
350
|
+
status: "cancelled",
|
|
351
|
+
lastError: "cancelled_by_user",
|
|
352
|
+
});
|
|
353
|
+
}
|
|
354
|
+
export function bumpRunStepCount(id) {
|
|
355
|
+
getWriteDb()
|
|
356
|
+
.prepare(`UPDATE task_runs
|
|
357
|
+
SET step_count = step_count + 1, updated_at = datetime('now')
|
|
358
|
+
WHERE id = ?`)
|
|
359
|
+
.run(id);
|
|
360
|
+
const row = getTaskRun(id);
|
|
361
|
+
return row?.step_count ?? 0;
|
|
362
|
+
}
|
|
363
|
+
export function appendAgentLog(input) {
|
|
364
|
+
if (!taskRunsReady()) {
|
|
365
|
+
throw new Error("schéma task_runs plateforme requis (agent_session_logs)");
|
|
366
|
+
}
|
|
367
|
+
const seqRow = queryOne(`SELECT MAX(seq) AS m FROM agent_session_logs WHERE run_id = ?`, [input.runId]);
|
|
368
|
+
const seq = (seqRow?.m ?? 0) + 1;
|
|
369
|
+
const id = randomUUID();
|
|
370
|
+
let payloadJson = null;
|
|
371
|
+
if (input.payload !== undefined) {
|
|
372
|
+
try {
|
|
373
|
+
payloadJson = JSON.stringify(input.payload);
|
|
374
|
+
}
|
|
375
|
+
catch {
|
|
376
|
+
payloadJson = null;
|
|
377
|
+
}
|
|
378
|
+
}
|
|
379
|
+
getWriteDb()
|
|
380
|
+
.prepare(`INSERT INTO agent_session_logs
|
|
381
|
+
(id, run_id, seq, level, event_type, message, payload_json)
|
|
382
|
+
VALUES (?, ?, ?, ?, ?, ?, ?)`)
|
|
383
|
+
.run(id, input.runId, seq, input.level || "info", input.eventType, input.message, payloadJson);
|
|
384
|
+
bumpRunStepCount(input.runId);
|
|
385
|
+
const log = {
|
|
386
|
+
id,
|
|
387
|
+
run_id: input.runId,
|
|
388
|
+
seq,
|
|
389
|
+
level: input.level || "info",
|
|
390
|
+
event_type: input.eventType,
|
|
391
|
+
message: input.message,
|
|
392
|
+
payload_json: payloadJson,
|
|
393
|
+
created_at: new Date().toISOString(),
|
|
394
|
+
};
|
|
395
|
+
const run = getTaskRun(input.runId);
|
|
396
|
+
if (run)
|
|
397
|
+
notifyLog({ run, log });
|
|
398
|
+
return log;
|
|
399
|
+
}
|
|
400
|
+
export function listAgentLogs(runId, afterSeq = 0, limit = 200) {
|
|
401
|
+
if (!taskRunsReady())
|
|
402
|
+
return [];
|
|
403
|
+
return queryAll(`SELECT * FROM agent_session_logs
|
|
404
|
+
WHERE run_id = ? AND seq > ?
|
|
405
|
+
ORDER BY seq ASC
|
|
406
|
+
LIMIT ?`, [runId, afterSeq, limit]);
|
|
407
|
+
}
|
|
408
|
+
/** Purge logs (+ runs terminés) plus vieux que N jours. */
|
|
409
|
+
export function purgeAgentLogsOlderThan(days) {
|
|
410
|
+
if (!taskRunsReady())
|
|
411
|
+
return { logsDeleted: 0, runsDeleted: 0 };
|
|
412
|
+
const d = Math.max(1, Math.floor(days));
|
|
413
|
+
const logs = getWriteDb()
|
|
414
|
+
.prepare(`DELETE FROM agent_session_logs
|
|
415
|
+
WHERE created_at < datetime('now', ?)`)
|
|
416
|
+
.run(`-${d} days`);
|
|
417
|
+
const runs = getWriteDb()
|
|
418
|
+
.prepare(`DELETE FROM task_runs
|
|
419
|
+
WHERE status IN ('succeeded','failed','cancelled')
|
|
420
|
+
AND COALESCE(finished_at, created_at) < datetime('now', ?)`)
|
|
421
|
+
.run(`-${d} days`);
|
|
422
|
+
return { logsDeleted: logs.changes, runsDeleted: runs.changes };
|
|
423
|
+
}
|
|
424
|
+
export function isHitlPaused(run) {
|
|
425
|
+
return Boolean(run?.status === "running" && run.hitl_prompt);
|
|
426
|
+
}
|
|
427
|
+
//# sourceMappingURL=task-runs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"task-runs.js","sourceRoot":"","sources":["../src/task-runs.ts"],"names":[],"mappings":"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"}
|
package/dist/types.d.ts
ADDED
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
export type PlatformTaskStatus = "open" | "done" | "cancelled";
|
|
2
|
+
export type PlatformTask = {
|
|
3
|
+
id: string;
|
|
4
|
+
userId: string;
|
|
5
|
+
title: string;
|
|
6
|
+
body: string;
|
|
7
|
+
status: PlatformTaskStatus;
|
|
8
|
+
createdAt: string;
|
|
9
|
+
updatedAt: string;
|
|
10
|
+
};
|
|
11
|
+
export type PlatformTasksStore = {
|
|
12
|
+
create(input: {
|
|
13
|
+
userId: string;
|
|
14
|
+
title: string;
|
|
15
|
+
body?: string;
|
|
16
|
+
}): PlatformTask;
|
|
17
|
+
/**
|
|
18
|
+
* C1 — upsert avec id fixe (bridge marque : même UUID brand/kit).
|
|
19
|
+
* Pas de contrôle actor (écritures host / migrate).
|
|
20
|
+
*/
|
|
21
|
+
upsertWithId?(input: {
|
|
22
|
+
id: string;
|
|
23
|
+
userId: string;
|
|
24
|
+
title: string;
|
|
25
|
+
body?: string;
|
|
26
|
+
status?: PlatformTaskStatus;
|
|
27
|
+
}): PlatformTask;
|
|
28
|
+
list(userId: string): PlatformTask[];
|
|
29
|
+
get(id: string): PlatformTask | undefined;
|
|
30
|
+
update(id: string, patch: Partial<Pick<PlatformTask, "title" | "body" | "status">>, actorUserId: string): PlatformTask;
|
|
31
|
+
remove(id: string, actorUserId: string): boolean;
|
|
32
|
+
};
|
|
33
|
+
/** DDL optionnel sqlite core. */
|
|
34
|
+
export declare const PLATFORM_TASKS_CORE_SQL = "\nCREATE TABLE IF NOT EXISTS creezio_platform_tasks (\n id TEXT PRIMARY KEY,\n user_id TEXT NOT NULL,\n title TEXT NOT NULL,\n body TEXT NOT NULL DEFAULT '',\n status TEXT NOT NULL DEFAULT 'open',\n created_at TEXT NOT NULL,\n updated_at TEXT NOT NULL\n);\nCREATE INDEX IF NOT EXISTS idx_creezio_platform_tasks_user\n ON creezio_platform_tasks(user_id, status);\n";
|
|
35
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,kBAAkB,GAAG,MAAM,GAAG,MAAM,GAAG,WAAW,CAAC;AAE/D,MAAM,MAAM,YAAY,GAAG;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,kBAAkB,CAAC;IAC3B,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG;IAC/B,MAAM,CAAC,KAAK,EAAE;QACZ,MAAM,EAAE,MAAM,CAAC;QACf,KAAK,EAAE,MAAM,CAAC;QACd,IAAI,CAAC,EAAE,MAAM,CAAC;KACf,GAAG,YAAY,CAAC;IACjB;;;OAGG;IACH,YAAY,CAAC,CAAC,KAAK,EAAE;QACnB,EAAE,EAAE,MAAM,CAAC;QACX,MAAM,EAAE,MAAM,CAAC;QACf,KAAK,EAAE,MAAM,CAAC;QACd,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,MAAM,CAAC,EAAE,kBAAkB,CAAC;KAC7B,GAAG,YAAY,CAAC;IACjB,IAAI,CAAC,MAAM,EAAE,MAAM,GAAG,YAAY,EAAE,CAAC;IACrC,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,YAAY,GAAG,SAAS,CAAC;IAC1C,MAAM,CACJ,EAAE,EAAE,MAAM,EACV,KAAK,EAAE,OAAO,CAAC,IAAI,CAAC,YAAY,EAAE,OAAO,GAAG,MAAM,GAAG,QAAQ,CAAC,CAAC,EAC/D,WAAW,EAAE,MAAM,GAClB,YAAY,CAAC;IAChB,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC;CAClD,CAAC;AAEF,iCAAiC;AACjC,eAAO,MAAM,uBAAuB,wXAYnC,CAAC"}
|
package/dist/types.js
ADDED
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/** DDL optionnel sqlite core. */
|
|
2
|
+
export const PLATFORM_TASKS_CORE_SQL = `
|
|
3
|
+
CREATE TABLE IF NOT EXISTS creezio_platform_tasks (
|
|
4
|
+
id TEXT PRIMARY KEY,
|
|
5
|
+
user_id TEXT NOT NULL,
|
|
6
|
+
title TEXT NOT NULL,
|
|
7
|
+
body TEXT NOT NULL DEFAULT '',
|
|
8
|
+
status TEXT NOT NULL DEFAULT 'open',
|
|
9
|
+
created_at TEXT NOT NULL,
|
|
10
|
+
updated_at TEXT NOT NULL
|
|
11
|
+
);
|
|
12
|
+
CREATE INDEX IF NOT EXISTS idx_creezio_platform_tasks_user
|
|
13
|
+
ON creezio_platform_tasks(user_id, status);
|
|
14
|
+
`;
|
|
15
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAuCA,iCAAiC;AACjC,MAAM,CAAC,MAAM,uBAAuB,GAAG;;;;;;;;;;;;CAYtC,CAAC"}
|