agentic-api 2.0.314 → 2.0.491
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/dist/src/agents/prompts.d.ts +1 -1
- package/dist/src/agents/prompts.js +9 -7
- package/dist/src/agents/simulator.d.ts +7 -3
- package/dist/src/agents/simulator.executor.d.ts +9 -3
- package/dist/src/agents/simulator.executor.js +43 -17
- package/dist/src/agents/simulator.js +47 -19
- package/dist/src/agents/simulator.prompts.d.ts +9 -8
- package/dist/src/agents/simulator.prompts.js +68 -62
- package/dist/src/agents/simulator.types.d.ts +4 -1
- package/dist/src/agents/simulator.utils.js +0 -2
- package/dist/src/execute/helpers.d.ts +75 -0
- package/dist/src/execute/helpers.js +139 -0
- package/dist/src/execute/index.d.ts +11 -0
- package/dist/src/execute/index.js +44 -0
- package/dist/src/execute/legacy.d.ts +46 -0
- package/dist/src/{execute.js → execute/legacy.js} +130 -232
- package/dist/src/execute/modelconfig.d.ts +19 -0
- package/dist/src/execute/modelconfig.js +56 -0
- package/dist/src/execute/responses.d.ts +55 -0
- package/dist/src/execute/responses.js +594 -0
- package/dist/src/execute/shared.d.ts +83 -0
- package/dist/src/execute/shared.js +188 -0
- package/dist/src/index.js +1 -1
- package/dist/src/pricing.llm.d.ts +1 -1
- package/dist/src/pricing.llm.js +39 -18
- package/dist/src/rag/embeddings.js +8 -2
- package/dist/src/rag/rag.manager.js +27 -15
- package/dist/src/rules/git/git.e2e.helper.js +21 -2
- package/dist/src/rules/git/git.health.d.ts +4 -2
- package/dist/src/rules/git/git.health.js +58 -16
- package/dist/src/rules/git/index.d.ts +1 -1
- package/dist/src/rules/git/index.js +3 -2
- package/dist/src/rules/git/repo.d.ts +46 -3
- package/dist/src/rules/git/repo.js +264 -23
- package/dist/src/rules/git/repo.pr.js +117 -13
- package/dist/src/rules/types.d.ts +11 -0
- package/dist/src/rules/utils.matter.js +16 -7
- package/dist/src/scrapper.js +1 -0
- package/dist/src/stategraph/stategraph.d.ts +26 -1
- package/dist/src/stategraph/stategraph.js +43 -2
- package/dist/src/stategraph/stategraph.storage.js +4 -0
- package/dist/src/stategraph/types.d.ts +5 -0
- package/dist/src/types.d.ts +42 -7
- package/dist/src/types.js +8 -7
- package/dist/src/usecase.js +1 -1
- package/dist/src/utils.js +28 -4
- package/package.json +9 -7
- package/dist/src/execute.d.ts +0 -63
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
import { AgentStateGraph } from '../stategraph';
|
|
2
|
+
import { AgentConfig, AgenticContext, ExecutionAction } from '../types';
|
|
3
|
+
/**
|
|
4
|
+
* OPTIM: Accumule l'usage des tokens et met à jour stateGraph + discussion.usage
|
|
5
|
+
*
|
|
6
|
+
* Centralise la logique d'accumulation des tokens qui était dupliquée
|
|
7
|
+
* à plusieurs endroits dans le code original
|
|
8
|
+
*
|
|
9
|
+
* @param stateGraph - Instance du StateGraph
|
|
10
|
+
* @param discussion - Discussion courante
|
|
11
|
+
* @param agentName - Nom de l'agent (discussionRootAgent)
|
|
12
|
+
* @param model - Nom du modèle (pour calcul du coût)
|
|
13
|
+
* @param usage - Usage retourné par l'API (prompt_tokens, completion_tokens, total_tokens)
|
|
14
|
+
*/
|
|
15
|
+
export declare function accumulateUsageTokens(stateGraph: AgentStateGraph, discussion: any, agentName: string, model: string, usage: any): void;
|
|
16
|
+
/**
|
|
17
|
+
* OPTIM: Convertit les steps du stateGraph en actions ExecutionResult
|
|
18
|
+
*
|
|
19
|
+
* Centralise la logique de conversion qui était dupliquée
|
|
20
|
+
* à plusieurs endroits dans le code original
|
|
21
|
+
*
|
|
22
|
+
* TODO/FIXME [Phase 3 - Normalisation]: Normaliser l'interface ExecutionAction
|
|
23
|
+
* Actuellement on fait un mapping manuel (tool→action, context→content, reason→feedback)
|
|
24
|
+
* À terme, utiliser directement le type StepTrail (tool, context, reason) partout
|
|
25
|
+
* au lieu d'ExecutionAction (action, content, feedback).
|
|
26
|
+
* Cela simplifiera le code et évitera les conversions répétées.
|
|
27
|
+
*
|
|
28
|
+
* @param stateGraph - Instance du StateGraph
|
|
29
|
+
* @param agentName - Nom de l'agent (discussionRootAgent)
|
|
30
|
+
* @returns Array d'actions pour ExecutionResult
|
|
31
|
+
*/
|
|
32
|
+
export declare function stepsToActions(stateGraph: AgentStateGraph, agentName: string): ExecutionAction[];
|
|
33
|
+
/**
|
|
34
|
+
* OPTIM: Traite tous les tool calls en batch et retourne les résultats
|
|
35
|
+
*
|
|
36
|
+
* Exploite parallel_tool_calls pour optimiser les follow-ups :
|
|
37
|
+
* - Parse tous les arguments JSON une seule fois
|
|
38
|
+
* - Traite tous les tool calls
|
|
39
|
+
* - Accumule les messages pour un seul follow-up stream
|
|
40
|
+
*
|
|
41
|
+
* Au lieu de :
|
|
42
|
+
* for (toolCall) {
|
|
43
|
+
* handleTransferCall(toolCall)
|
|
44
|
+
* followUpStream() // ← Un stream par tool call (séquentiel)
|
|
45
|
+
* }
|
|
46
|
+
*
|
|
47
|
+
* On fait :
|
|
48
|
+
* batchProcessToolCalls(allToolCalls)
|
|
49
|
+
* followUpStream() // ← Un seul stream pour tous les résultats (batch)
|
|
50
|
+
*
|
|
51
|
+
* ✅ NEW: Support de submitToolOutputs (Responses API)
|
|
52
|
+
* Si responseId et openai sont fournis, utilise submitToolOutputs pour
|
|
53
|
+
* soumettre les résultats directement à l'API au lieu de les accumuler
|
|
54
|
+
* dans le stateGraph. Sinon, utilise l'approche classique (fallback).
|
|
55
|
+
*
|
|
56
|
+
* @param toolCalls - Array de tool calls retournés par l'API
|
|
57
|
+
* @param agents - Liste de tous les agents
|
|
58
|
+
* @param stateGraph - Instance du StateGraph
|
|
59
|
+
* @param agentName - Nom de l'agent (discussionRootAgent)
|
|
60
|
+
* @param context - Context (AgenticContext, doit contenir discussionRootAgent, currentAgent et stateGraph)
|
|
61
|
+
* @param responseId - (Optional) Response ID pour submitToolOutputs (Responses API)
|
|
62
|
+
* @param verbose - (Optional) Mode verbose pour logs
|
|
63
|
+
* @returns Résultats de tous les tool calls + flag needsFollowUp + parsedCalls (avec args parsés)
|
|
64
|
+
*/
|
|
65
|
+
export declare function batchProcessToolCalls(toolCalls: any[], agents: AgentConfig[], stateGraph: AgentStateGraph, agentName: string, context: AgenticContext, responseId?: string, verbose?: boolean): Promise<{
|
|
66
|
+
results: any[];
|
|
67
|
+
needsFollowUp: boolean;
|
|
68
|
+
parsedCalls: any[];
|
|
69
|
+
transferAgentName: string;
|
|
70
|
+
hasTransfer: boolean;
|
|
71
|
+
toolOutputs: Array<{
|
|
72
|
+
call_id: string;
|
|
73
|
+
output: string;
|
|
74
|
+
}>;
|
|
75
|
+
}>;
|
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.accumulateUsageTokens = accumulateUsageTokens;
|
|
4
|
+
exports.stepsToActions = stepsToActions;
|
|
5
|
+
exports.batchProcessToolCalls = batchProcessToolCalls;
|
|
6
|
+
const pricing_llm_1 = require("../pricing.llm");
|
|
7
|
+
const utils_1 = require("../utils");
|
|
8
|
+
/**
|
|
9
|
+
* OPTIM: Accumule l'usage des tokens et met à jour stateGraph + discussion.usage
|
|
10
|
+
*
|
|
11
|
+
* Centralise la logique d'accumulation des tokens qui était dupliquée
|
|
12
|
+
* à plusieurs endroits dans le code original
|
|
13
|
+
*
|
|
14
|
+
* @param stateGraph - Instance du StateGraph
|
|
15
|
+
* @param discussion - Discussion courante
|
|
16
|
+
* @param agentName - Nom de l'agent (discussionRootAgent)
|
|
17
|
+
* @param model - Nom du modèle (pour calcul du coût)
|
|
18
|
+
* @param usage - Usage retourné par l'API (prompt_tokens, completion_tokens, total_tokens)
|
|
19
|
+
*/
|
|
20
|
+
function accumulateUsageTokens(stateGraph, discussion, agentName, model, usage) {
|
|
21
|
+
(0, pricing_llm_1.accumulateCost)(discussion.usage, model, usage);
|
|
22
|
+
stateGraph.updateTokens(agentName, {
|
|
23
|
+
prompt: usage?.prompt_tokens || 0,
|
|
24
|
+
completion: usage?.completion_tokens || 0,
|
|
25
|
+
total: usage?.total_tokens || 0,
|
|
26
|
+
cost: 0 // Already accumulated in discussion.usage
|
|
27
|
+
});
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* OPTIM: Convertit les steps du stateGraph en actions ExecutionResult
|
|
31
|
+
*
|
|
32
|
+
* Centralise la logique de conversion qui était dupliquée
|
|
33
|
+
* à plusieurs endroits dans le code original
|
|
34
|
+
*
|
|
35
|
+
* TODO/FIXME [Phase 3 - Normalisation]: Normaliser l'interface ExecutionAction
|
|
36
|
+
* Actuellement on fait un mapping manuel (tool→action, context→content, reason→feedback)
|
|
37
|
+
* À terme, utiliser directement le type StepTrail (tool, context, reason) partout
|
|
38
|
+
* au lieu d'ExecutionAction (action, content, feedback).
|
|
39
|
+
* Cela simplifiera le code et évitera les conversions répétées.
|
|
40
|
+
*
|
|
41
|
+
* @param stateGraph - Instance du StateGraph
|
|
42
|
+
* @param agentName - Nom de l'agent (discussionRootAgent)
|
|
43
|
+
* @returns Array d'actions pour ExecutionResult
|
|
44
|
+
*/
|
|
45
|
+
function stepsToActions(stateGraph, agentName) {
|
|
46
|
+
return stateGraph.steps(agentName).map(step => ({
|
|
47
|
+
action: step.tool,
|
|
48
|
+
content: step.context,
|
|
49
|
+
feedback: step.reason
|
|
50
|
+
}));
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* OPTIM: Traite tous les tool calls en batch et retourne les résultats
|
|
54
|
+
*
|
|
55
|
+
* Exploite parallel_tool_calls pour optimiser les follow-ups :
|
|
56
|
+
* - Parse tous les arguments JSON une seule fois
|
|
57
|
+
* - Traite tous les tool calls
|
|
58
|
+
* - Accumule les messages pour un seul follow-up stream
|
|
59
|
+
*
|
|
60
|
+
* Au lieu de :
|
|
61
|
+
* for (toolCall) {
|
|
62
|
+
* handleTransferCall(toolCall)
|
|
63
|
+
* followUpStream() // ← Un stream par tool call (séquentiel)
|
|
64
|
+
* }
|
|
65
|
+
*
|
|
66
|
+
* On fait :
|
|
67
|
+
* batchProcessToolCalls(allToolCalls)
|
|
68
|
+
* followUpStream() // ← Un seul stream pour tous les résultats (batch)
|
|
69
|
+
*
|
|
70
|
+
* ✅ NEW: Support de submitToolOutputs (Responses API)
|
|
71
|
+
* Si responseId et openai sont fournis, utilise submitToolOutputs pour
|
|
72
|
+
* soumettre les résultats directement à l'API au lieu de les accumuler
|
|
73
|
+
* dans le stateGraph. Sinon, utilise l'approche classique (fallback).
|
|
74
|
+
*
|
|
75
|
+
* @param toolCalls - Array de tool calls retournés par l'API
|
|
76
|
+
* @param agents - Liste de tous les agents
|
|
77
|
+
* @param stateGraph - Instance du StateGraph
|
|
78
|
+
* @param agentName - Nom de l'agent (discussionRootAgent)
|
|
79
|
+
* @param context - Context (AgenticContext, doit contenir discussionRootAgent, currentAgent et stateGraph)
|
|
80
|
+
* @param responseId - (Optional) Response ID pour submitToolOutputs (Responses API)
|
|
81
|
+
* @param verbose - (Optional) Mode verbose pour logs
|
|
82
|
+
* @returns Résultats de tous les tool calls + flag needsFollowUp + parsedCalls (avec args parsés)
|
|
83
|
+
*/
|
|
84
|
+
async function batchProcessToolCalls(toolCalls, agents, stateGraph, agentName, context, responseId, verbose) {
|
|
85
|
+
const results = [];
|
|
86
|
+
let needsFollowUp = false;
|
|
87
|
+
let transferAgentName = '';
|
|
88
|
+
let hasTransfer = false; // ✅ Flag pour détecter les transfers
|
|
89
|
+
//
|
|
90
|
+
// ✅ Récupérer discussion depuis stateGraph
|
|
91
|
+
const discussion = stateGraph.createOrRestore(agentName);
|
|
92
|
+
//
|
|
93
|
+
// ✅ Créer currentAgentRef depuis agentName (référence mutable pour handleTransferCall)
|
|
94
|
+
const currentAgentRef = { name: agentName };
|
|
95
|
+
//
|
|
96
|
+
// OPTIM: Parse tous les args une seule fois
|
|
97
|
+
const parsedCalls = toolCalls.map(tc => ({
|
|
98
|
+
...tc,
|
|
99
|
+
args: JSON.parse(tc?.function?.arguments || '{}')
|
|
100
|
+
}));
|
|
101
|
+
//
|
|
102
|
+
// ✅ Préparer les tool_outputs pour submitToolOutputs
|
|
103
|
+
const toolOutputs = [];
|
|
104
|
+
//
|
|
105
|
+
// Traiter tous les tool calls
|
|
106
|
+
for (const toolCall of parsedCalls) {
|
|
107
|
+
const result = await (0, utils_1.handleTransferCall)(discussion, currentAgentRef, agents, toolCall, context);
|
|
108
|
+
results.push(result);
|
|
109
|
+
// ✅ Détecter les transfers
|
|
110
|
+
if (result.did_transfer && result.destination_agent) {
|
|
111
|
+
hasTransfer = true;
|
|
112
|
+
transferAgentName = result.destination_agent;
|
|
113
|
+
}
|
|
114
|
+
//
|
|
115
|
+
// Accumuler les messages pour le follow-up
|
|
116
|
+
// ✅ IMPORTANT: Toujours ajouter l'output même si content est undefined
|
|
117
|
+
// Car un ToolContractOutput peut ne pas avoir de content mais avoir rawResult
|
|
118
|
+
if (result.content || result.did_transfer || result.rawResult) {
|
|
119
|
+
needsFollowUp = true;
|
|
120
|
+
// ✅ Préparer les outputs pour function_call_output
|
|
121
|
+
// Si content existe, l'utiliser (texte formaté)
|
|
122
|
+
// Sinon, sérialiser rawResult si présent (ToolContractOutput), sinon result complet
|
|
123
|
+
toolOutputs.push({
|
|
124
|
+
call_id: toolCall.id,
|
|
125
|
+
// ⚠️ ATTENTION: rawResult contient le résultat brut du tool (ToolContractOutput)
|
|
126
|
+
// Si content est undefined, on sérialise rawResult pour préserver la structure JSON complète
|
|
127
|
+
// Sinon, on utilise result complet comme fallback
|
|
128
|
+
output: result.content || JSON.stringify(result.rawResult || result)
|
|
129
|
+
});
|
|
130
|
+
}
|
|
131
|
+
//
|
|
132
|
+
// ✅ Les steps sont ajoutés APRÈS le follow-up dans readCompletionsStream
|
|
133
|
+
// pour éviter que le LLM pense que l'outil a déjà été exécuté
|
|
134
|
+
}
|
|
135
|
+
// ✅ NOTE: On ne gère PAS submitToolOutputs ici
|
|
136
|
+
// C'est readCompletionsStream qui décide selon hasTransfer
|
|
137
|
+
// On retourne juste les données nécessaires
|
|
138
|
+
return { results, needsFollowUp, parsedCalls, transferAgentName, hasTransfer, toolOutputs };
|
|
139
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Point d'entrée du module execute avec feature toggle
|
|
3
|
+
*
|
|
4
|
+
* Feature toggle : basculer entre Chat Completions (legacy) et Responses API
|
|
5
|
+
* Contrôlé par la variable d'environnement USE_RESPONSES_API
|
|
6
|
+
*/
|
|
7
|
+
export declare const USE_RESPONSES_API: boolean;
|
|
8
|
+
export * from './shared';
|
|
9
|
+
export * from './helpers';
|
|
10
|
+
export * from './modelconfig';
|
|
11
|
+
export * from './responses';
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* @fileoverview Point d'entrée du module execute avec feature toggle
|
|
4
|
+
*
|
|
5
|
+
* Feature toggle : basculer entre Chat Completions (legacy) et Responses API
|
|
6
|
+
* Contrôlé par la variable d'environnement USE_RESPONSES_API
|
|
7
|
+
*/
|
|
8
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
9
|
+
if (k2 === undefined) k2 = k;
|
|
10
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
11
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
12
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
13
|
+
}
|
|
14
|
+
Object.defineProperty(o, k2, desc);
|
|
15
|
+
}) : (function(o, m, k, k2) {
|
|
16
|
+
if (k2 === undefined) k2 = k;
|
|
17
|
+
o[k2] = m[k];
|
|
18
|
+
}));
|
|
19
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
20
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
21
|
+
};
|
|
22
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
23
|
+
exports.USE_RESPONSES_API = void 0;
|
|
24
|
+
//
|
|
25
|
+
// Feature toggle: basculer entre legacy et responses
|
|
26
|
+
// Par défaut : Responses API (meilleur support reasoning models)
|
|
27
|
+
// Pour revenir à legacy : USE_RESPONSES_API=false
|
|
28
|
+
exports.USE_RESPONSES_API = process.env.USE_RESPONSES_API !== 'false';
|
|
29
|
+
//
|
|
30
|
+
// Exports des utilitaires partagés
|
|
31
|
+
__exportStar(require("./shared"), exports);
|
|
32
|
+
__exportStar(require("./helpers"), exports);
|
|
33
|
+
__exportStar(require("./modelconfig"), exports);
|
|
34
|
+
//
|
|
35
|
+
// Exports conditionnels selon le feature flag
|
|
36
|
+
// Par défaut : responses.ts (Responses API)
|
|
37
|
+
// Si USE_RESPONSES_API=false → legacy.ts (Chat Completions)
|
|
38
|
+
// const implementation = USE_RESPONSES_API
|
|
39
|
+
// ? require('./responses')
|
|
40
|
+
// : require('./legacy');
|
|
41
|
+
__exportStar(require("./responses"), exports);
|
|
42
|
+
// export const executeQuery = implementation.executeQuery;
|
|
43
|
+
// export const executeAgent = implementation.executeAgent;
|
|
44
|
+
// export const executeAgentSet = implementation.executeAgentSet;
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Legacy Implementation - Chat Completions API (beta.chat.completions)
|
|
3
|
+
*
|
|
4
|
+
* ⚠️ Cette implémentation utilise openai.beta.chat.completions.stream (ancienne API)
|
|
5
|
+
* Pour les nouveaux projets, Responses API (responses.ts) est recommandée.
|
|
6
|
+
*
|
|
7
|
+
* Code optimisé depuis execute.ts original avec les améliorations suivantes:
|
|
8
|
+
* - OPTIM: Helpers centralisés (accumulateUsageTokens, stepsToActions)
|
|
9
|
+
* - BUG FIX: executionResultMerge fusionne actions correctement (corrigé dans types.ts)
|
|
10
|
+
* - BUG FIX: moreThinkin supprimé (obsolète, reasoning_effort fait le job)
|
|
11
|
+
* - BUG FIX: Suppression de la boucle do...while(moreThinkin)
|
|
12
|
+
* - BUG FIX: Suppression de la ligne reasoning_effort dupliquée (ligne 425 originale)
|
|
13
|
+
*
|
|
14
|
+
* TODO [Optimisation future]: Remplacer la boucle for séquentielle par batchProcessToolCalls
|
|
15
|
+
* pour exploiter pleinement parallel_tool_calls et réduire la latence
|
|
16
|
+
*/
|
|
17
|
+
import { AgentConfig, AgenticContext, ExecuteAgentResult, ExecutionResult } from "../types";
|
|
18
|
+
import { ReadCompletionsStreamOptions, ExecuteAgentSetParams } from "./shared";
|
|
19
|
+
export declare function readCompletionsStream(params: ReadCompletionsStreamOptions): Promise<ExecutionResult>;
|
|
20
|
+
/**
|
|
21
|
+
* Parameters for executing an agent set
|
|
22
|
+
*/
|
|
23
|
+
export interface ExecuteAgentSetParamsLegacy {
|
|
24
|
+
enrichWithMemory?: (role: string, agent: AgentConfig, context: AgenticContext) => Promise<string>;
|
|
25
|
+
query: string;
|
|
26
|
+
home?: string;
|
|
27
|
+
thinking?: boolean;
|
|
28
|
+
model?: string;
|
|
29
|
+
stdout: any;
|
|
30
|
+
messages?: any[];
|
|
31
|
+
verbose?: boolean;
|
|
32
|
+
json?: boolean;
|
|
33
|
+
schema?: any;
|
|
34
|
+
debug?: boolean;
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Executes a set of agents to process a user query
|
|
38
|
+
*
|
|
39
|
+
* OPTIMIZED: Sans boucle do...while(moreThinkin), reasoning_effort fait le job
|
|
40
|
+
*/
|
|
41
|
+
export declare function executeAgentSet(agentSet: AgentConfig[], context: AgenticContext, params: ExecuteAgentSetParams): Promise<ExecutionResult>;
|
|
42
|
+
export declare function executeAgent(agentSet: AgentConfig[], params: ExecuteAgentSetParams): Promise<ExecuteAgentResult>;
|
|
43
|
+
/**
|
|
44
|
+
* Executes a simple query without agent orchestration or tool handling
|
|
45
|
+
*/
|
|
46
|
+
export declare function executeQuery(params: ExecuteAgentSetParams): Promise<ExecuteAgentResult>;
|