@imenam/mcp-organizer 0.0.0-stage → 1.0.1
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 +529 -2
- package/dist/shared/logic/first-account.d.ts +13 -0
- package/dist/shared/logic/first-account.js +15 -0
- package/dist/shared/logic/labels.d.ts +5 -0
- package/dist/shared/logic/labels.js +17 -0
- package/dist/shared/logic/positions.d.ts +9 -0
- package/dist/shared/logic/positions.js +19 -0
- package/dist/shared/logic/spaces.d.ts +13 -0
- package/dist/shared/logic/spaces.js +48 -0
- package/dist/shared/logic/test-summary.d.ts +28 -0
- package/dist/shared/logic/test-summary.js +35 -0
- package/dist/shared/schemas/agent-api.schema.d.ts +268 -0
- package/dist/shared/schemas/agent-api.schema.js +94 -0
- package/dist/shared/schemas/agent-tools.schema.d.ts +724 -0
- package/dist/shared/schemas/agent-tools.schema.js +165 -0
- package/dist/shared/schemas/api.schema.d.ts +249 -0
- package/dist/shared/schemas/api.schema.js +116 -0
- package/dist/shared/schemas/entities.schema.d.ts +472 -0
- package/dist/shared/schemas/entities.schema.js +262 -0
- package/dist/shared/schemas/enums.schema.d.ts +135 -0
- package/dist/shared/schemas/enums.schema.js +58 -0
- package/dist/shared/schemas/gui-api.schema.d.ts +53 -0
- package/dist/shared/schemas/gui-api.schema.js +20 -0
- package/dist/shared/schemas/ideas-api.schema.d.ts +81 -0
- package/dist/shared/schemas/ideas-api.schema.js +40 -0
- package/dist/shared/schemas/notifications-api.schema.d.ts +87 -0
- package/dist/shared/schemas/notifications-api.schema.js +58 -0
- package/dist/shared/schemas/tasks-api.schema.d.ts +675 -0
- package/dist/shared/schemas/tasks-api.schema.js +225 -0
- package/dist/shared/schemas/tokens-api.schema.d.ts +106 -0
- package/dist/shared/schemas/tokens-api.schema.js +42 -0
- package/dist/shared/schemas/transcription-api.schema.d.ts +15 -0
- package/dist/shared/schemas/transcription-api.schema.js +12 -0
- package/dist/src/agent-api/checklist.d.ts +3 -0
- package/dist/src/agent-api/checklist.js +127 -0
- package/dist/src/agent-api/ideas.d.ts +3 -0
- package/dist/src/agent-api/ideas.js +93 -0
- package/dist/src/agent-api/requests.d.ts +3 -0
- package/dist/src/agent-api/requests.js +60 -0
- package/dist/src/agent-api/router.d.ts +3 -0
- package/dist/src/agent-api/router.js +40 -0
- package/dist/src/agent-api/tasks.d.ts +2 -0
- package/dist/src/agent-api/tasks.js +290 -0
- package/dist/src/agent-api/types.d.ts +41 -0
- package/dist/src/agent-api/types.js +14 -0
- package/dist/src/cli/backup.d.ts +12 -0
- package/dist/src/cli/backup.js +126 -0
- package/dist/src/cli/prompt.d.ts +7 -0
- package/dist/src/cli/prompt.js +40 -0
- package/dist/src/cli/set-user.d.ts +2 -0
- package/dist/src/cli/set-user.js +114 -0
- package/dist/src/cli/setup-mcp.d.ts +10 -0
- package/dist/src/cli/setup-mcp.js +110 -0
- package/dist/src/cli/setup.d.ts +39 -0
- package/dist/src/cli/setup.js +626 -0
- package/dist/src/core/accounts.d.ts +129 -0
- package/dist/src/core/accounts.js +284 -0
- package/dist/src/core/agent-tokens.d.ts +31 -0
- package/dist/src/core/agent-tokens.js +120 -0
- package/dist/src/core/agent.d.ts +71 -0
- package/dist/src/core/agent.js +358 -0
- package/dist/src/core/attachments.d.ts +21 -0
- package/dist/src/core/attachments.js +44 -0
- package/dist/src/core/data-dir.d.ts +5 -0
- package/dist/src/core/data-dir.js +11 -0
- package/dist/src/core/db.d.ts +13 -0
- package/dist/src/core/db.js +38 -0
- package/dist/src/core/env-file.d.ts +11 -0
- package/dist/src/core/env-file.js +36 -0
- package/dist/src/core/errors.d.ts +24 -0
- package/dist/src/core/errors.js +42 -0
- package/dist/src/core/history.d.ts +34 -0
- package/dist/src/core/history.js +279 -0
- package/dist/src/core/ideas.d.ts +16 -0
- package/dist/src/core/ideas.js +100 -0
- package/dist/src/core/ids.d.ts +2 -0
- package/dist/src/core/ids.js +5 -0
- package/dist/src/core/log-dir.d.ts +2 -0
- package/dist/src/core/log-dir.js +9 -0
- package/dist/src/core/logger.d.ts +14 -0
- package/dist/src/core/logger.js +37 -0
- package/dist/src/core/mail.d.ts +43 -0
- package/dist/src/core/mail.js +44 -0
- package/dist/src/core/mcp-entry.d.ts +20 -0
- package/dist/src/core/mcp-entry.js +15 -0
- package/dist/src/core/migrations.d.ts +18 -0
- package/dist/src/core/migrations.js +404 -0
- package/dist/src/core/native-sqlite.d.ts +2 -0
- package/dist/src/core/native-sqlite.js +23 -0
- package/dist/src/core/notifications.d.ts +46 -0
- package/dist/src/core/notifications.js +173 -0
- package/dist/src/core/project-root.d.ts +2 -0
- package/dist/src/core/project-root.js +13 -0
- package/dist/src/core/requests.d.ts +49 -0
- package/dist/src/core/requests.js +239 -0
- package/dist/src/core/snapshots.d.ts +32 -0
- package/dist/src/core/snapshots.js +35 -0
- package/dist/src/core/spaces.d.ts +66 -0
- package/dist/src/core/spaces.js +252 -0
- package/dist/src/core/store.d.ts +565 -0
- package/dist/src/core/store.js +2093 -0
- package/dist/src/core/task-history.d.ts +7 -0
- package/dist/src/core/task-history.js +41 -0
- package/dist/src/core/tasks.d.ts +58 -0
- package/dist/src/core/tasks.js +389 -0
- package/dist/src/core/test-tasks.d.ts +19 -0
- package/dist/src/core/test-tasks.js +135 -0
- package/dist/src/core/transcription.d.ts +45 -0
- package/dist/src/core/transcription.js +92 -0
- package/dist/src/deploy/env-render.d.ts +26 -0
- package/dist/src/deploy/env-render.js +98 -0
- package/dist/src/deploy/templates.d.ts +38 -0
- package/dist/src/deploy/templates.js +130 -0
- package/dist/src/gui-api.d.ts +37 -0
- package/dist/src/gui-api.js +383 -0
- package/dist/src/index.d.ts +2 -0
- package/dist/src/index.js +100 -0
- package/dist/src/mcp/client.d.ts +23 -0
- package/dist/src/mcp/client.js +81 -0
- package/dist/src/mcp/start.d.ts +14 -0
- package/dist/src/mcp/start.js +104 -0
- package/dist/src/mcp/tools.d.ts +46 -0
- package/dist/src/mcp/tools.js +348 -0
- package/dist/src/server/app.d.ts +25 -0
- package/dist/src/server/app.js +290 -0
- package/dist/src/server/config.d.ts +23 -0
- package/dist/src/server/config.js +75 -0
- package/dist/src/server/limits.d.ts +2 -0
- package/dist/src/server/limits.js +4 -0
- package/dist/src/server/login-limiter.d.ts +36 -0
- package/dist/src/server/login-limiter.js +81 -0
- package/dist/src/server/start.d.ts +5 -0
- package/dist/src/server/start.js +88 -0
- package/dist/src/version.d.ts +1 -0
- package/dist/src/version.js +16 -0
- package/gui/dist/assets/index-DwkXx4Q2.js +70 -0
- package/gui/dist/assets/index-lnvnkDdg.css +1 -0
- package/gui/dist/assets/inter-cyrillic-ext-wght-normal-BOeWTOD4.woff2 +0 -0
- package/gui/dist/assets/inter-cyrillic-wght-normal-DqGufNeO.woff2 +0 -0
- package/gui/dist/assets/inter-greek-ext-wght-normal-DlzME5K_.woff2 +0 -0
- package/gui/dist/assets/inter-greek-wght-normal-CkhJZR-_.woff2 +0 -0
- package/gui/dist/assets/inter-latin-ext-wght-normal-DO1Apj_S.woff2 +0 -0
- package/gui/dist/assets/inter-latin-wght-normal-Dx4kXJAl.woff2 +0 -0
- package/gui/dist/assets/inter-vietnamese-wght-normal-CBcvBZtf.woff2 +0 -0
- package/gui/dist/assets/jetbrains-mono-cyrillic-400-normal-BEIGL1Tu.woff2 +0 -0
- package/gui/dist/assets/jetbrains-mono-cyrillic-400-normal-ugxPyKxw.woff +0 -0
- package/gui/dist/assets/jetbrains-mono-greek-400-normal-B9oWc5Lo.woff +0 -0
- package/gui/dist/assets/jetbrains-mono-greek-400-normal-C190GLew.woff2 +0 -0
- package/gui/dist/assets/jetbrains-mono-latin-400-normal-6-qcROiO.woff +0 -0
- package/gui/dist/assets/jetbrains-mono-latin-400-normal-V6pRDFza.woff2 +0 -0
- package/gui/dist/assets/jetbrains-mono-latin-ext-400-normal-Bc8Ftmh3.woff2 +0 -0
- package/gui/dist/assets/jetbrains-mono-latin-ext-400-normal-fXTG6kC5.woff +0 -0
- package/gui/dist/assets/jetbrains-mono-vietnamese-400-normal-CqNFfHCs.woff +0 -0
- package/gui/dist/index.html +13 -0
- package/package.json +66 -4
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { TaskPriority, TaskStatus, TaskType } from "../schemas/enums.schema.js";
|
|
2
|
+
/** Libellés français des statuts, priorités et types de tâche, communs à la GUI et aux résumés des actions de l'agent. */
|
|
3
|
+
export declare const STATUS_LABELS: Record<TaskStatus, string>;
|
|
4
|
+
export declare const PRIORITY_LABELS: Record<TaskPriority, string>;
|
|
5
|
+
export declare const TYPE_LABELS: Record<TaskType, string>;
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/** Libellés français des statuts, priorités et types de tâche, communs à la GUI et aux résumés des actions de l'agent. */
|
|
2
|
+
export const STATUS_LABELS = {
|
|
3
|
+
todo: "À faire",
|
|
4
|
+
doing: "En cours",
|
|
5
|
+
review: "En revue",
|
|
6
|
+
done: "Terminé",
|
|
7
|
+
};
|
|
8
|
+
export const PRIORITY_LABELS = {
|
|
9
|
+
low: "Basse",
|
|
10
|
+
medium: "Moyenne",
|
|
11
|
+
high: "Haute",
|
|
12
|
+
critical: "Critique",
|
|
13
|
+
};
|
|
14
|
+
export const TYPE_LABELS = {
|
|
15
|
+
standard: "Standard",
|
|
16
|
+
test: "Test",
|
|
17
|
+
};
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/** Rangs fractionnaires des éléments ordonnés (tâches d'une colonne, éléments d'une checklist). */
|
|
2
|
+
/** Écart minimal entre deux rangs voisins ; en dessous, la liste est renumérotée. */
|
|
3
|
+
export declare const MIN_POSITION_GAP = 0.000001;
|
|
4
|
+
/**
|
|
5
|
+
* Rang d'un élément inséré entre `previous` et `next` (null : début ou fin de
|
|
6
|
+
* liste). Renvoie null quand l'écart entre les deux voisins est trop faible
|
|
7
|
+
* pour y loger un rang distinct : la liste doit d'abord être renumérotée.
|
|
8
|
+
*/
|
|
9
|
+
export declare function positionBetween(previous: number | null, next: number | null): number | null;
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/** Rangs fractionnaires des éléments ordonnés (tâches d'une colonne, éléments d'une checklist). */
|
|
2
|
+
/** Écart minimal entre deux rangs voisins ; en dessous, la liste est renumérotée. */
|
|
3
|
+
export const MIN_POSITION_GAP = 1e-6;
|
|
4
|
+
/**
|
|
5
|
+
* Rang d'un élément inséré entre `previous` et `next` (null : début ou fin de
|
|
6
|
+
* liste). Renvoie null quand l'écart entre les deux voisins est trop faible
|
|
7
|
+
* pour y loger un rang distinct : la liste doit d'abord être renumérotée.
|
|
8
|
+
*/
|
|
9
|
+
export function positionBetween(previous, next) {
|
|
10
|
+
if (previous === null && next === null)
|
|
11
|
+
return 1;
|
|
12
|
+
if (previous === null)
|
|
13
|
+
return next - 1;
|
|
14
|
+
if (next === null)
|
|
15
|
+
return Math.floor(previous) + 1;
|
|
16
|
+
if (next - previous < MIN_POSITION_GAP * 2)
|
|
17
|
+
return null;
|
|
18
|
+
return (previous + next) / 2;
|
|
19
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/** Logique pure des espaces, commune au serveur et à la GUI. */
|
|
2
|
+
/** Préfixe des numéros de tâche de l'espace personnel. */
|
|
3
|
+
export declare const PERSONAL_KEY_PREFIX = "PERSO";
|
|
4
|
+
/** Nom de l'espace personnel. */
|
|
5
|
+
export declare const PERSONAL_SPACE_NAME = "Personnel";
|
|
6
|
+
/**
|
|
7
|
+
* Préfixe de clé dérivé du nom d'un espace : initiales des mots significatifs
|
|
8
|
+
* (2 à 4), ou les trois premières lettres d'un nom d'un seul mot. Le préfixe
|
|
9
|
+
* commence par une lettre ; un nom sans lettre donne `ESP`.
|
|
10
|
+
*/
|
|
11
|
+
export declare function deriveKeyPrefix(name: string): string;
|
|
12
|
+
/** Initiales d'un nom affiché (deux lettres au plus), ou de l'adresse e-mail. */
|
|
13
|
+
export declare function initialsOf(displayName: string | null, email: string): string;
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
/** Logique pure des espaces, commune au serveur et à la GUI. */
|
|
2
|
+
/** Préfixe des numéros de tâche de l'espace personnel. */
|
|
3
|
+
export const PERSONAL_KEY_PREFIX = "PERSO";
|
|
4
|
+
/** Nom de l'espace personnel. */
|
|
5
|
+
export const PERSONAL_SPACE_NAME = "Personnel";
|
|
6
|
+
/** Mots ignorés pour former un préfixe à partir d'un nom. */
|
|
7
|
+
const STOP_WORDS = new Set(["de", "du", "des", "la", "le", "les", "l", "d", "et", "a", "au", "aux", "en", "the", "of", "and"]);
|
|
8
|
+
/** Lettres et chiffres d'un texte, sans accents, en majuscules, découpés en mots. */
|
|
9
|
+
function words(name) {
|
|
10
|
+
return name
|
|
11
|
+
.normalize("NFD")
|
|
12
|
+
.replace(/[̀-ͯ]/g, "")
|
|
13
|
+
.toUpperCase()
|
|
14
|
+
.split(/[^A-Z0-9]+/)
|
|
15
|
+
.filter((word) => word.length > 0);
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Préfixe de clé dérivé du nom d'un espace : initiales des mots significatifs
|
|
19
|
+
* (2 à 4), ou les trois premières lettres d'un nom d'un seul mot. Le préfixe
|
|
20
|
+
* commence par une lettre ; un nom sans lettre donne `ESP`.
|
|
21
|
+
*/
|
|
22
|
+
export function deriveKeyPrefix(name) {
|
|
23
|
+
const all = words(name).map((word) => word.replace(/^[0-9]+/, "")).filter((word) => word.length > 0);
|
|
24
|
+
const significant = all.filter((word) => !STOP_WORDS.has(word.toLowerCase()));
|
|
25
|
+
const chosen = significant.length > 0 ? significant : all;
|
|
26
|
+
if (chosen.length === 0)
|
|
27
|
+
return "ESP";
|
|
28
|
+
if (chosen.length === 1)
|
|
29
|
+
return chosen[0].slice(0, 3).padEnd(2, "X");
|
|
30
|
+
return chosen
|
|
31
|
+
.slice(0, 4)
|
|
32
|
+
.map((word) => word[0])
|
|
33
|
+
.join("");
|
|
34
|
+
}
|
|
35
|
+
/** Initiales d'un nom affiché (deux lettres au plus), ou de l'adresse e-mail. */
|
|
36
|
+
export function initialsOf(displayName, email) {
|
|
37
|
+
const source = displayName && displayName.trim() !== "" ? displayName : email.split("@")[0];
|
|
38
|
+
const parts = source
|
|
39
|
+
.normalize("NFD")
|
|
40
|
+
.replace(/[̀-ͯ]/g, "")
|
|
41
|
+
.split(/[^A-Za-z0-9]+/)
|
|
42
|
+
.filter((part) => part.length > 0);
|
|
43
|
+
if (parts.length === 0)
|
|
44
|
+
return "?";
|
|
45
|
+
if (parts.length === 1)
|
|
46
|
+
return parts[0].slice(0, 2).toUpperCase();
|
|
47
|
+
return (parts[0][0] + parts[1][0]).toUpperCase();
|
|
48
|
+
}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import type { TestResultValue } from "../schemas/enums.schema.js";
|
|
2
|
+
/** Bilan d'une tâche de test : nombre de points par résultat combiné. */
|
|
3
|
+
export interface TestSummary {
|
|
4
|
+
/** Nombre de points de vérification. */
|
|
5
|
+
total: number;
|
|
6
|
+
/** Points qui ont au moins un résultat autre que « à vérifier ». */
|
|
7
|
+
verified: number;
|
|
8
|
+
ok: number;
|
|
9
|
+
ko: number;
|
|
10
|
+
blocked: number;
|
|
11
|
+
/** Points qu'aucun testeur n'a encore vérifiés. */
|
|
12
|
+
untested: number;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Résultat combiné d'un point d'après les résultats de ses testeurs : KO si
|
|
16
|
+
* l'un d'eux a trouvé un KO, sinon Bloqué si l'un d'eux est bloqué, sinon OK
|
|
17
|
+
* si l'un d'eux l'a validé, sinon à vérifier.
|
|
18
|
+
*/
|
|
19
|
+
export declare function combinedResult(results: readonly TestResultValue[]): TestResultValue;
|
|
20
|
+
/**
|
|
21
|
+
* Bilan des points `checkpointIds`, d'après les résultats des seuls testeurs
|
|
22
|
+
* `testerIds` (les assignés de la tâche).
|
|
23
|
+
*/
|
|
24
|
+
export declare function summarizeTest(checkpointIds: readonly string[], results: readonly {
|
|
25
|
+
checkpointId: string;
|
|
26
|
+
testerId: string;
|
|
27
|
+
result: TestResultValue;
|
|
28
|
+
}[], testerIds: readonly string[]): TestSummary;
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Résultat combiné d'un point d'après les résultats de ses testeurs : KO si
|
|
3
|
+
* l'un d'eux a trouvé un KO, sinon Bloqué si l'un d'eux est bloqué, sinon OK
|
|
4
|
+
* si l'un d'eux l'a validé, sinon à vérifier.
|
|
5
|
+
*/
|
|
6
|
+
export function combinedResult(results) {
|
|
7
|
+
if (results.includes("ko"))
|
|
8
|
+
return "ko";
|
|
9
|
+
if (results.includes("blocked"))
|
|
10
|
+
return "blocked";
|
|
11
|
+
if (results.includes("ok"))
|
|
12
|
+
return "ok";
|
|
13
|
+
return "untested";
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Bilan des points `checkpointIds`, d'après les résultats des seuls testeurs
|
|
17
|
+
* `testerIds` (les assignés de la tâche).
|
|
18
|
+
*/
|
|
19
|
+
export function summarizeTest(checkpointIds, results, testerIds) {
|
|
20
|
+
const testers = new Set(testerIds);
|
|
21
|
+
const byCheckpoint = new Map();
|
|
22
|
+
for (const entry of results) {
|
|
23
|
+
if (!testers.has(entry.testerId))
|
|
24
|
+
continue;
|
|
25
|
+
byCheckpoint.set(entry.checkpointId, [...(byCheckpoint.get(entry.checkpointId) ?? []), entry.result]);
|
|
26
|
+
}
|
|
27
|
+
const summary = { total: checkpointIds.length, verified: 0, ok: 0, ko: 0, blocked: 0, untested: 0 };
|
|
28
|
+
for (const id of checkpointIds) {
|
|
29
|
+
const result = combinedResult(byCheckpoint.get(id) ?? []);
|
|
30
|
+
summary[result] += 1;
|
|
31
|
+
if (result !== "untested")
|
|
32
|
+
summary.verified += 1;
|
|
33
|
+
}
|
|
34
|
+
return summary;
|
|
35
|
+
}
|
|
@@ -0,0 +1,268 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
/** Corps des requêtes et des réponses de la file de l'agent et de l'historique dans la GUI. */
|
|
3
|
+
export declare const MAX_REQUEST_LENGTH = 10000;
|
|
4
|
+
/** Types de demande que la GUI dépose directement (la review de test et la promotion d'idée ont leur propre route). */
|
|
5
|
+
export declare const GUI_REQUEST_KINDS: readonly ["idea", "remark", "message"];
|
|
6
|
+
export declare const RequestTextSchema: z.ZodString;
|
|
7
|
+
export declare const CreateRequestSchema: z.ZodObject<{
|
|
8
|
+
kind: z.ZodEnum<{
|
|
9
|
+
idea: "idea";
|
|
10
|
+
message: "message";
|
|
11
|
+
remark: "remark";
|
|
12
|
+
}>;
|
|
13
|
+
text: z.ZodString;
|
|
14
|
+
contextTaskId: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
15
|
+
}, z.core.$strip>;
|
|
16
|
+
export type CreateRequest = z.infer<typeof CreateRequestSchema>;
|
|
17
|
+
export declare const UpdateRequestSchema: z.ZodObject<{
|
|
18
|
+
text: z.ZodString;
|
|
19
|
+
}, z.core.$strip>;
|
|
20
|
+
export type UpdateRequest = z.infer<typeof UpdateRequestSchema>;
|
|
21
|
+
/** Action de l'agent telle que l'affichent la page Agent et le panneau assistant. */
|
|
22
|
+
export declare const AgentActionViewSchema: z.ZodObject<{
|
|
23
|
+
id: z.ZodString;
|
|
24
|
+
seq: z.ZodNumber;
|
|
25
|
+
entityType: z.ZodEnum<{
|
|
26
|
+
agent_action: "agent_action";
|
|
27
|
+
agent_request: "agent_request";
|
|
28
|
+
agent_token: "agent_token";
|
|
29
|
+
attachment: "attachment";
|
|
30
|
+
checklist_item: "checklist_item";
|
|
31
|
+
comment: "comment";
|
|
32
|
+
idea: "idea";
|
|
33
|
+
invitation: "invitation";
|
|
34
|
+
membership: "membership";
|
|
35
|
+
notification: "notification";
|
|
36
|
+
space: "space";
|
|
37
|
+
tag: "tag";
|
|
38
|
+
task: "task";
|
|
39
|
+
test_checkpoint: "test_checkpoint";
|
|
40
|
+
test_result: "test_result";
|
|
41
|
+
test_review: "test_review";
|
|
42
|
+
user: "user";
|
|
43
|
+
user_settings: "user_settings";
|
|
44
|
+
}>;
|
|
45
|
+
operation: z.ZodEnum<{
|
|
46
|
+
assign: "assign";
|
|
47
|
+
create: "create";
|
|
48
|
+
delete: "delete";
|
|
49
|
+
move: "move";
|
|
50
|
+
update: "update";
|
|
51
|
+
}>;
|
|
52
|
+
label: z.ZodString;
|
|
53
|
+
summary: z.ZodString;
|
|
54
|
+
taskId: z.ZodNullable<z.ZodString>;
|
|
55
|
+
createdAt: z.ZodISODateTime;
|
|
56
|
+
undoneAt: z.ZodNullable<z.ZodISODateTime>;
|
|
57
|
+
undoneByName: z.ZodNullable<z.ZodString>;
|
|
58
|
+
}, z.core.$strip>;
|
|
59
|
+
export type AgentActionView = z.infer<typeof AgentActionViewSchema>;
|
|
60
|
+
/** Jeton d'agent tel que l'affichent la page Agent et le panneau assistant : son nom et son propriétaire. */
|
|
61
|
+
export declare const AgentRefSchema: z.ZodObject<{
|
|
62
|
+
tokenId: z.ZodString;
|
|
63
|
+
name: z.ZodString;
|
|
64
|
+
ownerName: z.ZodString;
|
|
65
|
+
}, z.core.$strip>;
|
|
66
|
+
export type AgentRef = z.infer<typeof AgentRefSchema>;
|
|
67
|
+
export declare const RequestViewSchema: z.ZodObject<{
|
|
68
|
+
id: z.ZodString;
|
|
69
|
+
kind: z.ZodEnum<{
|
|
70
|
+
idea: "idea";
|
|
71
|
+
idea_promotion: "idea_promotion";
|
|
72
|
+
message: "message";
|
|
73
|
+
remark: "remark";
|
|
74
|
+
test_review: "test_review";
|
|
75
|
+
}>;
|
|
76
|
+
status: z.ZodEnum<{
|
|
77
|
+
cancelled: "cancelled";
|
|
78
|
+
done: "done";
|
|
79
|
+
failed: "failed";
|
|
80
|
+
pending: "pending";
|
|
81
|
+
processing: "processing";
|
|
82
|
+
}>;
|
|
83
|
+
text: z.ZodString;
|
|
84
|
+
title: z.ZodString;
|
|
85
|
+
authorId: z.ZodString;
|
|
86
|
+
authorName: z.ZodString;
|
|
87
|
+
authorEmail: z.ZodString;
|
|
88
|
+
targetSpaceId: z.ZodString;
|
|
89
|
+
targetSpaceName: z.ZodString;
|
|
90
|
+
contextTask: z.ZodNullable<z.ZodObject<{
|
|
91
|
+
id: z.ZodString;
|
|
92
|
+
key: z.ZodString;
|
|
93
|
+
title: z.ZodString;
|
|
94
|
+
}, z.core.$strip>>;
|
|
95
|
+
reply: z.ZodNullable<z.ZodString>;
|
|
96
|
+
failureReason: z.ZodNullable<z.ZodString>;
|
|
97
|
+
createdAt: z.ZodISODateTime;
|
|
98
|
+
updatedAt: z.ZodISODateTime;
|
|
99
|
+
claimedAt: z.ZodNullable<z.ZodISODateTime>;
|
|
100
|
+
agent: z.ZodNullable<z.ZodObject<{
|
|
101
|
+
tokenId: z.ZodString;
|
|
102
|
+
name: z.ZodString;
|
|
103
|
+
ownerName: z.ZodString;
|
|
104
|
+
}, z.core.$strip>>;
|
|
105
|
+
completedAt: z.ZodNullable<z.ZodISODateTime>;
|
|
106
|
+
cancelledByName: z.ZodNullable<z.ZodString>;
|
|
107
|
+
canEdit: z.ZodBoolean;
|
|
108
|
+
canRelease: z.ZodBoolean;
|
|
109
|
+
canUndo: z.ZodBoolean;
|
|
110
|
+
actions: z.ZodArray<z.ZodObject<{
|
|
111
|
+
id: z.ZodString;
|
|
112
|
+
seq: z.ZodNumber;
|
|
113
|
+
entityType: z.ZodEnum<{
|
|
114
|
+
agent_action: "agent_action";
|
|
115
|
+
agent_request: "agent_request";
|
|
116
|
+
agent_token: "agent_token";
|
|
117
|
+
attachment: "attachment";
|
|
118
|
+
checklist_item: "checklist_item";
|
|
119
|
+
comment: "comment";
|
|
120
|
+
idea: "idea";
|
|
121
|
+
invitation: "invitation";
|
|
122
|
+
membership: "membership";
|
|
123
|
+
notification: "notification";
|
|
124
|
+
space: "space";
|
|
125
|
+
tag: "tag";
|
|
126
|
+
task: "task";
|
|
127
|
+
test_checkpoint: "test_checkpoint";
|
|
128
|
+
test_result: "test_result";
|
|
129
|
+
test_review: "test_review";
|
|
130
|
+
user: "user";
|
|
131
|
+
user_settings: "user_settings";
|
|
132
|
+
}>;
|
|
133
|
+
operation: z.ZodEnum<{
|
|
134
|
+
assign: "assign";
|
|
135
|
+
create: "create";
|
|
136
|
+
delete: "delete";
|
|
137
|
+
move: "move";
|
|
138
|
+
update: "update";
|
|
139
|
+
}>;
|
|
140
|
+
label: z.ZodString;
|
|
141
|
+
summary: z.ZodString;
|
|
142
|
+
taskId: z.ZodNullable<z.ZodString>;
|
|
143
|
+
createdAt: z.ZodISODateTime;
|
|
144
|
+
undoneAt: z.ZodNullable<z.ZodISODateTime>;
|
|
145
|
+
undoneByName: z.ZodNullable<z.ZodString>;
|
|
146
|
+
}, z.core.$strip>>;
|
|
147
|
+
}, z.core.$strip>;
|
|
148
|
+
export type RequestView = z.infer<typeof RequestViewSchema>;
|
|
149
|
+
export declare const RequestListResponseSchema: z.ZodObject<{
|
|
150
|
+
requests: z.ZodArray<z.ZodObject<{
|
|
151
|
+
id: z.ZodString;
|
|
152
|
+
kind: z.ZodEnum<{
|
|
153
|
+
idea: "idea";
|
|
154
|
+
idea_promotion: "idea_promotion";
|
|
155
|
+
message: "message";
|
|
156
|
+
remark: "remark";
|
|
157
|
+
test_review: "test_review";
|
|
158
|
+
}>;
|
|
159
|
+
status: z.ZodEnum<{
|
|
160
|
+
cancelled: "cancelled";
|
|
161
|
+
done: "done";
|
|
162
|
+
failed: "failed";
|
|
163
|
+
pending: "pending";
|
|
164
|
+
processing: "processing";
|
|
165
|
+
}>;
|
|
166
|
+
text: z.ZodString;
|
|
167
|
+
title: z.ZodString;
|
|
168
|
+
authorId: z.ZodString;
|
|
169
|
+
authorName: z.ZodString;
|
|
170
|
+
authorEmail: z.ZodString;
|
|
171
|
+
targetSpaceId: z.ZodString;
|
|
172
|
+
targetSpaceName: z.ZodString;
|
|
173
|
+
contextTask: z.ZodNullable<z.ZodObject<{
|
|
174
|
+
id: z.ZodString;
|
|
175
|
+
key: z.ZodString;
|
|
176
|
+
title: z.ZodString;
|
|
177
|
+
}, z.core.$strip>>;
|
|
178
|
+
reply: z.ZodNullable<z.ZodString>;
|
|
179
|
+
failureReason: z.ZodNullable<z.ZodString>;
|
|
180
|
+
createdAt: z.ZodISODateTime;
|
|
181
|
+
updatedAt: z.ZodISODateTime;
|
|
182
|
+
claimedAt: z.ZodNullable<z.ZodISODateTime>;
|
|
183
|
+
agent: z.ZodNullable<z.ZodObject<{
|
|
184
|
+
tokenId: z.ZodString;
|
|
185
|
+
name: z.ZodString;
|
|
186
|
+
ownerName: z.ZodString;
|
|
187
|
+
}, z.core.$strip>>;
|
|
188
|
+
completedAt: z.ZodNullable<z.ZodISODateTime>;
|
|
189
|
+
cancelledByName: z.ZodNullable<z.ZodString>;
|
|
190
|
+
canEdit: z.ZodBoolean;
|
|
191
|
+
canRelease: z.ZodBoolean;
|
|
192
|
+
canUndo: z.ZodBoolean;
|
|
193
|
+
actions: z.ZodArray<z.ZodObject<{
|
|
194
|
+
id: z.ZodString;
|
|
195
|
+
seq: z.ZodNumber;
|
|
196
|
+
entityType: z.ZodEnum<{
|
|
197
|
+
agent_action: "agent_action";
|
|
198
|
+
agent_request: "agent_request";
|
|
199
|
+
agent_token: "agent_token";
|
|
200
|
+
attachment: "attachment";
|
|
201
|
+
checklist_item: "checklist_item";
|
|
202
|
+
comment: "comment";
|
|
203
|
+
idea: "idea";
|
|
204
|
+
invitation: "invitation";
|
|
205
|
+
membership: "membership";
|
|
206
|
+
notification: "notification";
|
|
207
|
+
space: "space";
|
|
208
|
+
tag: "tag";
|
|
209
|
+
task: "task";
|
|
210
|
+
test_checkpoint: "test_checkpoint";
|
|
211
|
+
test_result: "test_result";
|
|
212
|
+
test_review: "test_review";
|
|
213
|
+
user: "user";
|
|
214
|
+
user_settings: "user_settings";
|
|
215
|
+
}>;
|
|
216
|
+
operation: z.ZodEnum<{
|
|
217
|
+
assign: "assign";
|
|
218
|
+
create: "create";
|
|
219
|
+
delete: "delete";
|
|
220
|
+
move: "move";
|
|
221
|
+
update: "update";
|
|
222
|
+
}>;
|
|
223
|
+
label: z.ZodString;
|
|
224
|
+
summary: z.ZodString;
|
|
225
|
+
taskId: z.ZodNullable<z.ZodString>;
|
|
226
|
+
createdAt: z.ZodISODateTime;
|
|
227
|
+
undoneAt: z.ZodNullable<z.ZodISODateTime>;
|
|
228
|
+
undoneByName: z.ZodNullable<z.ZodString>;
|
|
229
|
+
}, z.core.$strip>>;
|
|
230
|
+
}, z.core.$strip>>;
|
|
231
|
+
pendingCount: z.ZodNumber;
|
|
232
|
+
agents: z.ZodArray<z.ZodObject<{
|
|
233
|
+
tokenId: z.ZodString;
|
|
234
|
+
name: z.ZodString;
|
|
235
|
+
ownerName: z.ZodString;
|
|
236
|
+
lastUsedAt: z.ZodNullable<z.ZodISODateTime>;
|
|
237
|
+
}, z.core.$strip>>;
|
|
238
|
+
}, z.core.$strip>;
|
|
239
|
+
export type RequestListResponse = z.infer<typeof RequestListResponseSchema>;
|
|
240
|
+
/** Version d'une tâche dans son historique. */
|
|
241
|
+
export declare const TaskVersionViewSchema: z.ZodObject<{
|
|
242
|
+
version: z.ZodNumber;
|
|
243
|
+
createdAt: z.ZodISODateTime;
|
|
244
|
+
actorType: z.ZodEnum<{
|
|
245
|
+
agent: "agent";
|
|
246
|
+
user: "user";
|
|
247
|
+
}>;
|
|
248
|
+
actorName: z.ZodString;
|
|
249
|
+
requestId: z.ZodNullable<z.ZodString>;
|
|
250
|
+
changes: z.ZodArray<z.ZodString>;
|
|
251
|
+
current: z.ZodBoolean;
|
|
252
|
+
}, z.core.$strip>;
|
|
253
|
+
export type TaskVersionView = z.infer<typeof TaskVersionViewSchema>;
|
|
254
|
+
export declare const TaskVersionsResponseSchema: z.ZodObject<{
|
|
255
|
+
versions: z.ZodArray<z.ZodObject<{
|
|
256
|
+
version: z.ZodNumber;
|
|
257
|
+
createdAt: z.ZodISODateTime;
|
|
258
|
+
actorType: z.ZodEnum<{
|
|
259
|
+
agent: "agent";
|
|
260
|
+
user: "user";
|
|
261
|
+
}>;
|
|
262
|
+
actorName: z.ZodString;
|
|
263
|
+
requestId: z.ZodNullable<z.ZodString>;
|
|
264
|
+
changes: z.ZodArray<z.ZodString>;
|
|
265
|
+
current: z.ZodBoolean;
|
|
266
|
+
}, z.core.$strip>>;
|
|
267
|
+
}, z.core.$strip>;
|
|
268
|
+
export type TaskVersionsResponse = z.infer<typeof TaskVersionsResponseSchema>;
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { ActorTypeSchema, AgentOperationSchema, EntityTypeSchema, RequestKindSchema, RequestStatusSchema } from "./enums.schema.js";
|
|
3
|
+
import { IdSchema, TimestampSchema } from "./entities.schema.js";
|
|
4
|
+
import { TaskRefSchema } from "./tasks-api.schema.js";
|
|
5
|
+
/** Corps des requêtes et des réponses de la file de l'agent et de l'historique dans la GUI. */
|
|
6
|
+
export const MAX_REQUEST_LENGTH = 10_000;
|
|
7
|
+
/** Types de demande que la GUI dépose directement (la review de test et la promotion d'idée ont leur propre route). */
|
|
8
|
+
export const GUI_REQUEST_KINDS = ["idea", "remark", "message"];
|
|
9
|
+
export const RequestTextSchema = z
|
|
10
|
+
.string()
|
|
11
|
+
.trim()
|
|
12
|
+
.min(1, "La demande est vide : écrivez ce que vous voulez confier à l'agent.")
|
|
13
|
+
.max(MAX_REQUEST_LENGTH, `La demande dépasse ${MAX_REQUEST_LENGTH} caractères.`);
|
|
14
|
+
export const CreateRequestSchema = z.object({
|
|
15
|
+
kind: z.enum(GUI_REQUEST_KINDS),
|
|
16
|
+
text: RequestTextSchema,
|
|
17
|
+
/** Tâche ouverte au moment de l'écriture, que l'agent reçoit pour contexte. */
|
|
18
|
+
contextTaskId: IdSchema.nullable().optional(),
|
|
19
|
+
});
|
|
20
|
+
export const UpdateRequestSchema = z.object({ text: RequestTextSchema });
|
|
21
|
+
/** Action de l'agent telle que l'affichent la page Agent et le panneau assistant. */
|
|
22
|
+
export const AgentActionViewSchema = z.object({
|
|
23
|
+
id: IdSchema,
|
|
24
|
+
seq: z.number().int(),
|
|
25
|
+
entityType: EntityTypeSchema,
|
|
26
|
+
operation: AgentOperationSchema,
|
|
27
|
+
/** Identifiant lisible de la tâche concernée (`ORG-41`), « Idée » pour une idée. */
|
|
28
|
+
label: z.string(),
|
|
29
|
+
/** Description en français : « Statut En cours → En revue ». */
|
|
30
|
+
summary: z.string(),
|
|
31
|
+
/** Tâche concernée, si elle existe encore. */
|
|
32
|
+
taskId: IdSchema.nullable(),
|
|
33
|
+
createdAt: TimestampSchema,
|
|
34
|
+
undoneAt: TimestampSchema.nullable(),
|
|
35
|
+
undoneByName: z.string().nullable(),
|
|
36
|
+
});
|
|
37
|
+
/** Jeton d'agent tel que l'affichent la page Agent et le panneau assistant : son nom et son propriétaire. */
|
|
38
|
+
export const AgentRefSchema = z.object({
|
|
39
|
+
tokenId: IdSchema,
|
|
40
|
+
name: z.string(),
|
|
41
|
+
ownerName: z.string(),
|
|
42
|
+
});
|
|
43
|
+
export const RequestViewSchema = z.object({
|
|
44
|
+
id: IdSchema,
|
|
45
|
+
kind: RequestKindSchema,
|
|
46
|
+
status: RequestStatusSchema,
|
|
47
|
+
text: z.string(),
|
|
48
|
+
/** Ligne affichée dans la file : le texte, ou un résumé pour une review de test ou une promotion d'idée. */
|
|
49
|
+
title: z.string(),
|
|
50
|
+
authorId: IdSchema,
|
|
51
|
+
authorName: z.string(),
|
|
52
|
+
authorEmail: z.string(),
|
|
53
|
+
targetSpaceId: IdSchema,
|
|
54
|
+
targetSpaceName: z.string(),
|
|
55
|
+
contextTask: TaskRefSchema.nullable(),
|
|
56
|
+
reply: z.string().nullable(),
|
|
57
|
+
failureReason: z.string().nullable(),
|
|
58
|
+
createdAt: TimestampSchema,
|
|
59
|
+
updatedAt: TimestampSchema,
|
|
60
|
+
claimedAt: TimestampSchema.nullable(),
|
|
61
|
+
/** Jeton qui a pris la demande, en cours ou terminée ; null en attente, annulée, ou si le jeton n'existe plus. */
|
|
62
|
+
agent: AgentRefSchema.nullable(),
|
|
63
|
+
completedAt: TimestampSchema.nullable(),
|
|
64
|
+
cancelledByName: z.string().nullable(),
|
|
65
|
+
/** Vrai si l'utilisateur peut modifier ou annuler la demande (en attente, et membre de son espace). */
|
|
66
|
+
canEdit: z.boolean(),
|
|
67
|
+
/** Vrai si l'utilisateur peut libérer la demande prise par l'agent (en cours, et membre de son espace). */
|
|
68
|
+
canRelease: z.boolean(),
|
|
69
|
+
/** Vrai si l'utilisateur voit et peut annuler les actions du lot (membre de son espace, demande terminée). */
|
|
70
|
+
canUndo: z.boolean(),
|
|
71
|
+
/** Actions du lot, dans l'ordre ; vide pour qui n'est pas membre de son espace. */
|
|
72
|
+
actions: z.array(AgentActionViewSchema),
|
|
73
|
+
});
|
|
74
|
+
export const RequestListResponseSchema = z.object({
|
|
75
|
+
/** Demandes de l'espace, de la plus récente à la plus ancienne. */
|
|
76
|
+
requests: z.array(RequestViewSchema),
|
|
77
|
+
pendingCount: z.number().int().min(0),
|
|
78
|
+
/** Jetons actifs qui couvrent l'espace, du plus récemment utilisé au moins récemment. */
|
|
79
|
+
agents: z.array(AgentRefSchema.extend({ lastUsedAt: TimestampSchema.nullable() })),
|
|
80
|
+
});
|
|
81
|
+
/** Version d'une tâche dans son historique. */
|
|
82
|
+
export const TaskVersionViewSchema = z.object({
|
|
83
|
+
version: z.number().int(),
|
|
84
|
+
createdAt: TimestampSchema,
|
|
85
|
+
actorType: ActorTypeSchema,
|
|
86
|
+
/** Utilisateur auteur de la version ; pour l'agent, l'auteur de la demande. */
|
|
87
|
+
actorName: z.string(),
|
|
88
|
+
requestId: IdSchema.nullable(),
|
|
89
|
+
/** Champs modifiés par rapport à la version précédente, en français ; « Création » pour la première. */
|
|
90
|
+
changes: z.array(z.string()),
|
|
91
|
+
/** Vrai pour la version qui décrit l'état actuel. */
|
|
92
|
+
current: z.boolean(),
|
|
93
|
+
});
|
|
94
|
+
export const TaskVersionsResponseSchema = z.object({ versions: z.array(TaskVersionViewSchema) });
|