@indexnetwork/protocol 0.4.0-rc.13.1 → 0.4.0-rc.15.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/dist/chat/chat.agent.d.ts.map +1 -1
- package/dist/chat/chat.agent.js +7 -6
- package/dist/chat/chat.agent.js.map +1 -1
- package/dist/index.d.ts +3 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -2
- package/dist/index.js.map +1 -1
- package/dist/negotiation/negotiation.agent.d.ts +30 -0
- package/dist/negotiation/negotiation.agent.d.ts.map +1 -0
- package/dist/negotiation/negotiation.agent.js +92 -0
- package/dist/negotiation/negotiation.agent.js.map +1 -0
- package/dist/negotiation/negotiation.graph.d.ts +138 -166
- package/dist/negotiation/negotiation.graph.d.ts.map +1 -1
- package/dist/negotiation/negotiation.graph.js +85 -80
- package/dist/negotiation/negotiation.graph.js.map +1 -1
- package/dist/negotiation/negotiation.state.d.ts +128 -34
- package/dist/negotiation/negotiation.state.d.ts.map +1 -1
- package/dist/negotiation/negotiation.state.js +45 -14
- package/dist/negotiation/negotiation.state.js.map +1 -1
- package/dist/negotiation/negotiation.tools.d.ts.map +1 -1
- package/dist/negotiation/negotiation.tools.js +183 -172
- package/dist/negotiation/negotiation.tools.js.map +1 -1
- package/dist/opportunity/opportunity.evaluator.d.ts.map +1 -1
- package/dist/opportunity/opportunity.evaluator.js +35 -10
- package/dist/opportunity/opportunity.evaluator.js.map +1 -1
- package/dist/opportunity/opportunity.graph.d.ts +1 -2
- package/dist/opportunity/opportunity.graph.d.ts.map +1 -1
- package/dist/opportunity/opportunity.graph.js +4 -10
- package/dist/opportunity/opportunity.graph.js.map +1 -1
- package/dist/shared/agent/model.config.d.ts +1 -4
- package/dist/shared/agent/model.config.d.ts.map +1 -1
- package/dist/shared/agent/model.config.js +1 -2
- package/dist/shared/agent/model.config.js.map +1 -1
- package/dist/shared/agent/tool.factory.d.ts.map +1 -1
- package/dist/shared/agent/tool.factory.js +7 -6
- package/dist/shared/agent/tool.factory.js.map +1 -1
- package/dist/shared/agent/tool.helpers.d.ts +6 -9
- package/dist/shared/agent/tool.helpers.d.ts.map +1 -1
- package/dist/shared/agent/tool.helpers.js.map +1 -1
- package/dist/shared/interfaces/agent-dispatcher.interface.d.ts +68 -0
- package/dist/shared/interfaces/agent-dispatcher.interface.d.ts.map +1 -0
- package/dist/shared/interfaces/agent-dispatcher.interface.js +9 -0
- package/dist/shared/interfaces/agent-dispatcher.interface.js.map +1 -0
- package/dist/shared/interfaces/database.interface.d.ts +1 -1
- package/dist/shared/interfaces/database.interface.d.ts.map +1 -1
- package/dist/shared/interfaces/negotiation-events.interface.d.ts +2 -34
- package/dist/shared/interfaces/negotiation-events.interface.d.ts.map +1 -1
- package/dist/shared/interfaces/negotiation-events.interface.js +2 -2
- package/package.json +1 -1
- package/dist/negotiation/negotiation.proposer.d.ts +0 -26
- package/dist/negotiation/negotiation.proposer.d.ts.map +0 -1
- package/dist/negotiation/negotiation.proposer.js +0 -67
- package/dist/negotiation/negotiation.proposer.js.map +0 -1
- package/dist/negotiation/negotiation.responder.d.ts +0 -26
- package/dist/negotiation/negotiation.responder.d.ts.map +0 -1
- package/dist/negotiation/negotiation.responder.js +0 -71
- package/dist/negotiation/negotiation.responder.js.map +0 -1
|
@@ -1,9 +1,58 @@
|
|
|
1
1
|
import { z } from "zod";
|
|
2
2
|
/** Zod schema for a single negotiation turn (DataPart payload in A2A message). */
|
|
3
3
|
export declare const NegotiationTurnSchema: z.ZodObject<{
|
|
4
|
+
action: z.ZodEnum<["propose", "accept", "reject", "counter", "question"]>;
|
|
5
|
+
assessment: z.ZodObject<{
|
|
6
|
+
reasoning: z.ZodString;
|
|
7
|
+
suggestedRoles: z.ZodObject<{
|
|
8
|
+
ownUser: z.ZodEnum<["agent", "patient", "peer"]>;
|
|
9
|
+
otherUser: z.ZodEnum<["agent", "patient", "peer"]>;
|
|
10
|
+
}, "strip", z.ZodTypeAny, {
|
|
11
|
+
ownUser: "agent" | "patient" | "peer";
|
|
12
|
+
otherUser: "agent" | "patient" | "peer";
|
|
13
|
+
}, {
|
|
14
|
+
ownUser: "agent" | "patient" | "peer";
|
|
15
|
+
otherUser: "agent" | "patient" | "peer";
|
|
16
|
+
}>;
|
|
17
|
+
}, "strip", z.ZodTypeAny, {
|
|
18
|
+
reasoning: string;
|
|
19
|
+
suggestedRoles: {
|
|
20
|
+
ownUser: "agent" | "patient" | "peer";
|
|
21
|
+
otherUser: "agent" | "patient" | "peer";
|
|
22
|
+
};
|
|
23
|
+
}, {
|
|
24
|
+
reasoning: string;
|
|
25
|
+
suggestedRoles: {
|
|
26
|
+
ownUser: "agent" | "patient" | "peer";
|
|
27
|
+
otherUser: "agent" | "patient" | "peer";
|
|
28
|
+
};
|
|
29
|
+
}>;
|
|
30
|
+
message: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
31
|
+
}, "strip", z.ZodTypeAny, {
|
|
32
|
+
action: "propose" | "accept" | "reject" | "counter" | "question";
|
|
33
|
+
assessment: {
|
|
34
|
+
reasoning: string;
|
|
35
|
+
suggestedRoles: {
|
|
36
|
+
ownUser: "agent" | "patient" | "peer";
|
|
37
|
+
otherUser: "agent" | "patient" | "peer";
|
|
38
|
+
};
|
|
39
|
+
};
|
|
40
|
+
message?: string | null | undefined;
|
|
41
|
+
}, {
|
|
42
|
+
action: "propose" | "accept" | "reject" | "counter" | "question";
|
|
43
|
+
assessment: {
|
|
44
|
+
reasoning: string;
|
|
45
|
+
suggestedRoles: {
|
|
46
|
+
ownUser: "agent" | "patient" | "peer";
|
|
47
|
+
otherUser: "agent" | "patient" | "peer";
|
|
48
|
+
};
|
|
49
|
+
};
|
|
50
|
+
message?: string | null | undefined;
|
|
51
|
+
}>;
|
|
52
|
+
/** Restricted turn schema for the system agent (no question action). */
|
|
53
|
+
export declare const SystemNegotiationTurnSchema: z.ZodObject<{
|
|
4
54
|
action: z.ZodEnum<["propose", "accept", "reject", "counter"]>;
|
|
5
55
|
assessment: z.ZodObject<{
|
|
6
|
-
fitScore: z.ZodNumber;
|
|
7
56
|
reasoning: z.ZodString;
|
|
8
57
|
suggestedRoles: z.ZodObject<{
|
|
9
58
|
ownUser: z.ZodEnum<["agent", "patient", "peer"]>;
|
|
@@ -17,45 +66,93 @@ export declare const NegotiationTurnSchema: z.ZodObject<{
|
|
|
17
66
|
}>;
|
|
18
67
|
}, "strip", z.ZodTypeAny, {
|
|
19
68
|
reasoning: string;
|
|
20
|
-
fitScore: number;
|
|
21
69
|
suggestedRoles: {
|
|
22
70
|
ownUser: "agent" | "patient" | "peer";
|
|
23
71
|
otherUser: "agent" | "patient" | "peer";
|
|
24
72
|
};
|
|
25
73
|
}, {
|
|
26
74
|
reasoning: string;
|
|
27
|
-
fitScore: number;
|
|
28
75
|
suggestedRoles: {
|
|
29
76
|
ownUser: "agent" | "patient" | "peer";
|
|
30
77
|
otherUser: "agent" | "patient" | "peer";
|
|
31
78
|
};
|
|
32
79
|
}>;
|
|
80
|
+
message: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
33
81
|
}, "strip", z.ZodTypeAny, {
|
|
34
82
|
action: "propose" | "accept" | "reject" | "counter";
|
|
35
83
|
assessment: {
|
|
36
84
|
reasoning: string;
|
|
37
|
-
fitScore: number;
|
|
38
85
|
suggestedRoles: {
|
|
39
86
|
ownUser: "agent" | "patient" | "peer";
|
|
40
87
|
otherUser: "agent" | "patient" | "peer";
|
|
41
88
|
};
|
|
42
89
|
};
|
|
90
|
+
message?: string | null | undefined;
|
|
43
91
|
}, {
|
|
44
92
|
action: "propose" | "accept" | "reject" | "counter";
|
|
45
93
|
assessment: {
|
|
46
94
|
reasoning: string;
|
|
47
|
-
fitScore: number;
|
|
48
95
|
suggestedRoles: {
|
|
49
96
|
ownUser: "agent" | "patient" | "peer";
|
|
50
97
|
otherUser: "agent" | "patient" | "peer";
|
|
51
98
|
};
|
|
52
99
|
};
|
|
100
|
+
message?: string | null | undefined;
|
|
101
|
+
}>;
|
|
102
|
+
/** Turn schema for system agent's final allowed turn (must decide). */
|
|
103
|
+
export declare const FinalNegotiationTurnSchema: z.ZodObject<{
|
|
104
|
+
action: z.ZodEnum<["accept", "reject"]>;
|
|
105
|
+
assessment: z.ZodObject<{
|
|
106
|
+
reasoning: z.ZodString;
|
|
107
|
+
suggestedRoles: z.ZodObject<{
|
|
108
|
+
ownUser: z.ZodEnum<["agent", "patient", "peer"]>;
|
|
109
|
+
otherUser: z.ZodEnum<["agent", "patient", "peer"]>;
|
|
110
|
+
}, "strip", z.ZodTypeAny, {
|
|
111
|
+
ownUser: "agent" | "patient" | "peer";
|
|
112
|
+
otherUser: "agent" | "patient" | "peer";
|
|
113
|
+
}, {
|
|
114
|
+
ownUser: "agent" | "patient" | "peer";
|
|
115
|
+
otherUser: "agent" | "patient" | "peer";
|
|
116
|
+
}>;
|
|
117
|
+
}, "strip", z.ZodTypeAny, {
|
|
118
|
+
reasoning: string;
|
|
119
|
+
suggestedRoles: {
|
|
120
|
+
ownUser: "agent" | "patient" | "peer";
|
|
121
|
+
otherUser: "agent" | "patient" | "peer";
|
|
122
|
+
};
|
|
123
|
+
}, {
|
|
124
|
+
reasoning: string;
|
|
125
|
+
suggestedRoles: {
|
|
126
|
+
ownUser: "agent" | "patient" | "peer";
|
|
127
|
+
otherUser: "agent" | "patient" | "peer";
|
|
128
|
+
};
|
|
129
|
+
}>;
|
|
130
|
+
message: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
131
|
+
}, "strip", z.ZodTypeAny, {
|
|
132
|
+
action: "accept" | "reject";
|
|
133
|
+
assessment: {
|
|
134
|
+
reasoning: string;
|
|
135
|
+
suggestedRoles: {
|
|
136
|
+
ownUser: "agent" | "patient" | "peer";
|
|
137
|
+
otherUser: "agent" | "patient" | "peer";
|
|
138
|
+
};
|
|
139
|
+
};
|
|
140
|
+
message?: string | null | undefined;
|
|
141
|
+
}, {
|
|
142
|
+
action: "accept" | "reject";
|
|
143
|
+
assessment: {
|
|
144
|
+
reasoning: string;
|
|
145
|
+
suggestedRoles: {
|
|
146
|
+
ownUser: "agent" | "patient" | "peer";
|
|
147
|
+
otherUser: "agent" | "patient" | "peer";
|
|
148
|
+
};
|
|
149
|
+
};
|
|
150
|
+
message?: string | null | undefined;
|
|
53
151
|
}>;
|
|
54
152
|
export type NegotiationTurn = z.infer<typeof NegotiationTurnSchema>;
|
|
55
153
|
/** Zod schema for the negotiation outcome (Artifact payload on COMPLETED task). */
|
|
56
154
|
export declare const NegotiationOutcomeSchema: z.ZodObject<{
|
|
57
155
|
hasOpportunity: z.ZodBoolean;
|
|
58
|
-
finalScore: z.ZodNumber;
|
|
59
156
|
agreedRoles: z.ZodArray<z.ZodObject<{
|
|
60
157
|
userId: z.ZodString;
|
|
61
158
|
role: z.ZodEnum<["agent", "patient", "peer"]>;
|
|
@@ -68,27 +165,25 @@ export declare const NegotiationOutcomeSchema: z.ZodObject<{
|
|
|
68
165
|
}>, "many">;
|
|
69
166
|
reasoning: z.ZodString;
|
|
70
167
|
turnCount: z.ZodNumber;
|
|
71
|
-
reason: z.ZodOptional<z.
|
|
168
|
+
reason: z.ZodOptional<z.ZodEnum<["turn_cap", "timeout"]>>;
|
|
72
169
|
}, "strip", z.ZodTypeAny, {
|
|
73
170
|
reasoning: string;
|
|
74
171
|
hasOpportunity: boolean;
|
|
75
|
-
finalScore: number;
|
|
76
172
|
agreedRoles: {
|
|
77
173
|
userId: string;
|
|
78
174
|
role: "agent" | "patient" | "peer";
|
|
79
175
|
}[];
|
|
80
176
|
turnCount: number;
|
|
81
|
-
reason?:
|
|
177
|
+
reason?: "timeout" | "turn_cap" | undefined;
|
|
82
178
|
}, {
|
|
83
179
|
reasoning: string;
|
|
84
180
|
hasOpportunity: boolean;
|
|
85
|
-
finalScore: number;
|
|
86
181
|
agreedRoles: {
|
|
87
182
|
userId: string;
|
|
88
183
|
role: "agent" | "patient" | "peer";
|
|
89
184
|
}[];
|
|
90
185
|
turnCount: number;
|
|
91
|
-
reason?:
|
|
186
|
+
reason?: "timeout" | "turn_cap" | undefined;
|
|
92
187
|
}>;
|
|
93
188
|
export type NegotiationOutcome = z.infer<typeof NegotiationOutcomeSchema>;
|
|
94
189
|
/** Context each agent receives about its user. */
|
|
@@ -110,7 +205,6 @@ export interface UserNegotiationContext {
|
|
|
110
205
|
}
|
|
111
206
|
/** Seed assessment from the evaluator pre-filter. */
|
|
112
207
|
export interface SeedAssessment {
|
|
113
|
-
score: number;
|
|
114
208
|
reasoning: string;
|
|
115
209
|
valencyRole: string;
|
|
116
210
|
actors?: Array<{
|
|
@@ -128,9 +222,10 @@ export interface NegotiationGraphLike {
|
|
|
128
222
|
prompt: string;
|
|
129
223
|
};
|
|
130
224
|
seedAssessment: Omit<SeedAssessment, "actors">;
|
|
225
|
+
discoveryQuery?: string;
|
|
226
|
+
opportunityId?: string;
|
|
131
227
|
maxTurns?: number;
|
|
132
|
-
|
|
133
|
-
yieldForExternal?: boolean;
|
|
228
|
+
timeoutMs?: number;
|
|
134
229
|
}): Promise<{
|
|
135
230
|
outcome: NegotiationOutcome | null;
|
|
136
231
|
messages?: NegotiationMessage[];
|
|
@@ -159,83 +254,82 @@ export declare const NegotiationGraphState: import("@langchain/langgraph").Annot
|
|
|
159
254
|
prompt: string;
|
|
160
255
|
}>, unknown>;
|
|
161
256
|
seedAssessment: import("@langchain/langgraph").BaseChannel<SeedAssessment, SeedAssessment | import("@langchain/langgraph").OverwriteValue<SeedAssessment>, unknown>;
|
|
257
|
+
/** The explicit search query that triggered discovery (if any). */
|
|
258
|
+
discoveryQuery: import("@langchain/langgraph").BaseChannel<string | undefined, string | import("@langchain/langgraph").OverwriteValue<string | undefined> | undefined, unknown>;
|
|
259
|
+
opportunityId: import("@langchain/langgraph").BaseChannel<string, string | import("@langchain/langgraph").OverwriteValue<string>, unknown>;
|
|
162
260
|
conversationId: import("@langchain/langgraph").BaseChannel<string, string | import("@langchain/langgraph").OverwriteValue<string>, unknown>;
|
|
163
261
|
taskId: import("@langchain/langgraph").BaseChannel<string, string | import("@langchain/langgraph").OverwriteValue<string>, unknown>;
|
|
164
262
|
messages: import("@langchain/langgraph").BaseChannel<NegotiationMessage[], NegotiationMessage[] | import("@langchain/langgraph").OverwriteValue<NegotiationMessage[]>, unknown>;
|
|
165
263
|
turnCount: import("@langchain/langgraph").BaseChannel<number, number | import("@langchain/langgraph").OverwriteValue<number>, unknown>;
|
|
166
|
-
maxTurns: import("@langchain/langgraph").BaseChannel<number, number | import("@langchain/langgraph").OverwriteValue<number
|
|
264
|
+
maxTurns: import("@langchain/langgraph").BaseChannel<number | undefined, number | import("@langchain/langgraph").OverwriteValue<number | undefined> | undefined, unknown>;
|
|
265
|
+
/** Timeout per dispatch attempt in milliseconds. Short for chat (30s), long for background (24h). */
|
|
266
|
+
timeoutMs: import("@langchain/langgraph").BaseChannel<number, number | import("@langchain/langgraph").OverwriteValue<number>, unknown>;
|
|
167
267
|
currentSpeaker: import("@langchain/langgraph").BaseChannel<"source" | "candidate", "source" | "candidate" | import("@langchain/langgraph").OverwriteValue<"source" | "candidate">, unknown>;
|
|
168
268
|
lastTurn: import("@langchain/langgraph").BaseChannel<{
|
|
169
|
-
action: "propose" | "accept" | "reject" | "counter";
|
|
269
|
+
action: "propose" | "accept" | "reject" | "counter" | "question";
|
|
170
270
|
assessment: {
|
|
171
271
|
reasoning: string;
|
|
172
|
-
fitScore: number;
|
|
173
272
|
suggestedRoles: {
|
|
174
273
|
ownUser: "agent" | "patient" | "peer";
|
|
175
274
|
otherUser: "agent" | "patient" | "peer";
|
|
176
275
|
};
|
|
177
276
|
};
|
|
277
|
+
message?: string | null | undefined;
|
|
178
278
|
} | null, {
|
|
179
|
-
action: "propose" | "accept" | "reject" | "counter";
|
|
279
|
+
action: "propose" | "accept" | "reject" | "counter" | "question";
|
|
180
280
|
assessment: {
|
|
181
281
|
reasoning: string;
|
|
182
|
-
fitScore: number;
|
|
183
282
|
suggestedRoles: {
|
|
184
283
|
ownUser: "agent" | "patient" | "peer";
|
|
185
284
|
otherUser: "agent" | "patient" | "peer";
|
|
186
285
|
};
|
|
187
286
|
};
|
|
287
|
+
message?: string | null | undefined;
|
|
188
288
|
} | import("@langchain/langgraph").OverwriteValue<{
|
|
189
|
-
action: "propose" | "accept" | "reject" | "counter";
|
|
289
|
+
action: "propose" | "accept" | "reject" | "counter" | "question";
|
|
190
290
|
assessment: {
|
|
191
291
|
reasoning: string;
|
|
192
|
-
fitScore: number;
|
|
193
292
|
suggestedRoles: {
|
|
194
293
|
ownUser: "agent" | "patient" | "peer";
|
|
195
294
|
otherUser: "agent" | "patient" | "peer";
|
|
196
295
|
};
|
|
197
296
|
};
|
|
297
|
+
message?: string | null | undefined;
|
|
198
298
|
} | null> | null, unknown>;
|
|
199
299
|
/**
|
|
200
|
-
* Graph status.
|
|
201
|
-
* for an external response (e.g. user input via MCP tool), or finished.
|
|
300
|
+
* Graph status.
|
|
202
301
|
* - `active` — agents are exchanging turns (default)
|
|
203
|
-
* - `
|
|
204
|
-
* - `completed` — negotiation finalized (accept/reject/turn-cap)
|
|
302
|
+
* - `waiting_for_agent` — graph suspended; awaiting external agent response or timeout
|
|
303
|
+
* - `completed` — negotiation finalized (accept/reject/turn-cap/timeout)
|
|
205
304
|
*/
|
|
206
|
-
status: import("@langchain/langgraph").BaseChannel<"active" | "
|
|
207
|
-
/** When false, always run the built-in AI agent instead of yielding for external agents (webhooks). */
|
|
208
|
-
yieldForExternal: import("@langchain/langgraph").BaseChannel<boolean, boolean | import("@langchain/langgraph").OverwriteValue<boolean>, unknown>;
|
|
305
|
+
status: import("@langchain/langgraph").BaseChannel<"active" | "waiting_for_agent" | "completed", "active" | "waiting_for_agent" | "completed" | import("@langchain/langgraph").OverwriteValue<"active" | "waiting_for_agent" | "completed">, unknown>;
|
|
209
306
|
outcome: import("@langchain/langgraph").BaseChannel<{
|
|
210
307
|
reasoning: string;
|
|
211
308
|
hasOpportunity: boolean;
|
|
212
|
-
finalScore: number;
|
|
213
309
|
agreedRoles: {
|
|
214
310
|
userId: string;
|
|
215
311
|
role: "agent" | "patient" | "peer";
|
|
216
312
|
}[];
|
|
217
313
|
turnCount: number;
|
|
218
|
-
reason?:
|
|
314
|
+
reason?: "timeout" | "turn_cap" | undefined;
|
|
219
315
|
} | null, {
|
|
220
316
|
reasoning: string;
|
|
221
317
|
hasOpportunity: boolean;
|
|
222
|
-
finalScore: number;
|
|
223
318
|
agreedRoles: {
|
|
224
319
|
userId: string;
|
|
225
320
|
role: "agent" | "patient" | "peer";
|
|
226
321
|
}[];
|
|
227
322
|
turnCount: number;
|
|
228
|
-
reason?:
|
|
323
|
+
reason?: "timeout" | "turn_cap" | undefined;
|
|
229
324
|
} | import("@langchain/langgraph").OverwriteValue<{
|
|
230
325
|
reasoning: string;
|
|
231
326
|
hasOpportunity: boolean;
|
|
232
|
-
finalScore: number;
|
|
233
327
|
agreedRoles: {
|
|
234
328
|
userId: string;
|
|
235
329
|
role: "agent" | "patient" | "peer";
|
|
236
330
|
}[];
|
|
237
331
|
turnCount: number;
|
|
238
|
-
reason?:
|
|
332
|
+
reason?: "timeout" | "turn_cap" | undefined;
|
|
239
333
|
} | null> | null, unknown>;
|
|
240
334
|
error: import("@langchain/langgraph").BaseChannel<string | null, string | import("@langchain/langgraph").OverwriteValue<string | null> | null, unknown>;
|
|
241
335
|
}>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"negotiation.state.d.ts","sourceRoot":"","sources":["../../src/negotiation/negotiation.state.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,kFAAkF;AAClF,eAAO,MAAM,qBAAqB
|
|
1
|
+
{"version":3,"file":"negotiation.state.d.ts","sourceRoot":"","sources":["../../src/negotiation/negotiation.state.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,27 +2,50 @@ import { Annotation } from "@langchain/langgraph";
|
|
|
2
2
|
import { z } from "zod";
|
|
3
3
|
/** Zod schema for a single negotiation turn (DataPart payload in A2A message). */
|
|
4
4
|
export const NegotiationTurnSchema = z.object({
|
|
5
|
+
action: z.enum(["propose", "accept", "reject", "counter", "question"]),
|
|
6
|
+
assessment: z.object({
|
|
7
|
+
reasoning: z.string(),
|
|
8
|
+
suggestedRoles: z.object({
|
|
9
|
+
ownUser: z.enum(["agent", "patient", "peer"]),
|
|
10
|
+
otherUser: z.enum(["agent", "patient", "peer"]),
|
|
11
|
+
}),
|
|
12
|
+
}),
|
|
13
|
+
message: z.string().nullable().optional(),
|
|
14
|
+
});
|
|
15
|
+
/** Restricted turn schema for the system agent (no question action). */
|
|
16
|
+
export const SystemNegotiationTurnSchema = z.object({
|
|
5
17
|
action: z.enum(["propose", "accept", "reject", "counter"]),
|
|
6
18
|
assessment: z.object({
|
|
7
|
-
fitScore: z.number().min(0).max(100),
|
|
8
19
|
reasoning: z.string(),
|
|
9
20
|
suggestedRoles: z.object({
|
|
10
21
|
ownUser: z.enum(["agent", "patient", "peer"]),
|
|
11
22
|
otherUser: z.enum(["agent", "patient", "peer"]),
|
|
12
23
|
}),
|
|
13
24
|
}),
|
|
25
|
+
message: z.string().nullable().optional(),
|
|
26
|
+
});
|
|
27
|
+
/** Turn schema for system agent's final allowed turn (must decide). */
|
|
28
|
+
export const FinalNegotiationTurnSchema = z.object({
|
|
29
|
+
action: z.enum(["accept", "reject"]),
|
|
30
|
+
assessment: z.object({
|
|
31
|
+
reasoning: z.string(),
|
|
32
|
+
suggestedRoles: z.object({
|
|
33
|
+
ownUser: z.enum(["agent", "patient", "peer"]),
|
|
34
|
+
otherUser: z.enum(["agent", "patient", "peer"]),
|
|
35
|
+
}),
|
|
36
|
+
}),
|
|
37
|
+
message: z.string().nullable().optional(),
|
|
14
38
|
});
|
|
15
39
|
/** Zod schema for the negotiation outcome (Artifact payload on COMPLETED task). */
|
|
16
40
|
export const NegotiationOutcomeSchema = z.object({
|
|
17
41
|
hasOpportunity: z.boolean(),
|
|
18
|
-
finalScore: z.number().min(0).max(100),
|
|
19
42
|
agreedRoles: z.array(z.object({
|
|
20
43
|
userId: z.string(),
|
|
21
44
|
role: z.enum(["agent", "patient", "peer"]),
|
|
22
45
|
})),
|
|
23
46
|
reasoning: z.string(),
|
|
24
47
|
turnCount: z.number(),
|
|
25
|
-
reason: z.
|
|
48
|
+
reason: z.enum(["turn_cap", "timeout"]).optional(),
|
|
26
49
|
});
|
|
27
50
|
/** LangGraph state annotation for the negotiation graph. */
|
|
28
51
|
export const NegotiationGraphState = Annotation.Root({
|
|
@@ -40,7 +63,16 @@ export const NegotiationGraphState = Annotation.Root({
|
|
|
40
63
|
}),
|
|
41
64
|
seedAssessment: Annotation({
|
|
42
65
|
reducer: (curr, next) => next ?? curr,
|
|
43
|
-
default: () => ({
|
|
66
|
+
default: () => ({ reasoning: "", valencyRole: "" }),
|
|
67
|
+
}),
|
|
68
|
+
/** The explicit search query that triggered discovery (if any). */
|
|
69
|
+
discoveryQuery: Annotation({
|
|
70
|
+
reducer: (curr, next) => next ?? curr,
|
|
71
|
+
default: () => undefined,
|
|
72
|
+
}),
|
|
73
|
+
opportunityId: Annotation({
|
|
74
|
+
reducer: (curr, next) => next ?? curr,
|
|
75
|
+
default: () => "",
|
|
44
76
|
}),
|
|
45
77
|
conversationId: Annotation({
|
|
46
78
|
reducer: (curr, next) => next ?? curr,
|
|
@@ -60,7 +92,12 @@ export const NegotiationGraphState = Annotation.Root({
|
|
|
60
92
|
}),
|
|
61
93
|
maxTurns: Annotation({
|
|
62
94
|
reducer: (curr, next) => next ?? curr,
|
|
63
|
-
default: () =>
|
|
95
|
+
default: () => undefined,
|
|
96
|
+
}),
|
|
97
|
+
/** Timeout per dispatch attempt in milliseconds. Short for chat (30s), long for background (24h). */
|
|
98
|
+
timeoutMs: Annotation({
|
|
99
|
+
reducer: (curr, next) => next ?? curr,
|
|
100
|
+
default: () => 24 * 60 * 60 * 1000,
|
|
64
101
|
}),
|
|
65
102
|
currentSpeaker: Annotation({
|
|
66
103
|
reducer: (curr, next) => next ?? curr,
|
|
@@ -71,21 +108,15 @@ export const NegotiationGraphState = Annotation.Root({
|
|
|
71
108
|
default: () => null,
|
|
72
109
|
}),
|
|
73
110
|
/**
|
|
74
|
-
* Graph status.
|
|
75
|
-
* for an external response (e.g. user input via MCP tool), or finished.
|
|
111
|
+
* Graph status.
|
|
76
112
|
* - `active` — agents are exchanging turns (default)
|
|
77
|
-
* - `
|
|
78
|
-
* - `completed` — negotiation finalized (accept/reject/turn-cap)
|
|
113
|
+
* - `waiting_for_agent` — graph suspended; awaiting external agent response or timeout
|
|
114
|
+
* - `completed` — negotiation finalized (accept/reject/turn-cap/timeout)
|
|
79
115
|
*/
|
|
80
116
|
status: Annotation({
|
|
81
117
|
reducer: (curr, next) => next ?? curr,
|
|
82
118
|
default: () => 'active',
|
|
83
119
|
}),
|
|
84
|
-
/** When false, always run the built-in AI agent instead of yielding for external agents (webhooks). */
|
|
85
|
-
yieldForExternal: Annotation({
|
|
86
|
-
reducer: (curr, next) => next ?? curr,
|
|
87
|
-
default: () => true,
|
|
88
|
-
}),
|
|
89
120
|
outcome: Annotation({
|
|
90
121
|
reducer: (curr, next) => next ?? curr,
|
|
91
122
|
default: () => null,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"negotiation.state.js","sourceRoot":"","sources":["../../src/negotiation/negotiation.state.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAClD,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,kFAAkF;AAClF,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC5C,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,QAAQ,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"negotiation.state.js","sourceRoot":"","sources":["../../src/negotiation/negotiation.state.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"negotiation.tools.d.ts","sourceRoot":"","sources":["../../src/negotiation/negotiation.tools.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,iCAAiC,CAAC;AAS5E;;;GAGG;AACH,wBAAgB,sBAAsB,CAAC,UAAU,EAAE,UAAU,EAAE,IAAI,EAAE,QAAQ,
|
|
1
|
+
{"version":3,"file":"negotiation.tools.d.ts","sourceRoot":"","sources":["../../src/negotiation/negotiation.tools.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,iCAAiC,CAAC;AAS5E;;;GAGG;AACH,wBAAgB,sBAAsB,CAAC,UAAU,EAAE,UAAU,EAAE,IAAI,EAAE,QAAQ,4BAslB5E"}
|