@indexnetwork/protocol 0.3.3 → 0.4.0-rc.12.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.
Files changed (71) hide show
  1. package/README.md +8 -3
  2. package/dist/contact/contact.tools.d.ts.map +1 -1
  3. package/dist/contact/contact.tools.js +37 -22
  4. package/dist/contact/contact.tools.js.map +1 -1
  5. package/dist/index.d.ts +3 -1
  6. package/dist/index.d.ts.map +1 -1
  7. package/dist/index.js.map +1 -1
  8. package/dist/integration/integration.tools.d.ts.map +1 -1
  9. package/dist/integration/integration.tools.js +10 -8
  10. package/dist/integration/integration.tools.js.map +1 -1
  11. package/dist/intent/intent.tools.d.ts.map +1 -1
  12. package/dist/intent/intent.tools.js +112 -23
  13. package/dist/intent/intent.tools.js.map +1 -1
  14. package/dist/mcp/mcp.server.d.ts.map +1 -1
  15. package/dist/mcp/mcp.server.js +2 -1
  16. package/dist/mcp/mcp.server.js.map +1 -1
  17. package/dist/negotiation/negotiation.graph.d.ts +37 -1
  18. package/dist/negotiation/negotiation.graph.d.ts.map +1 -1
  19. package/dist/negotiation/negotiation.graph.js +48 -6
  20. package/dist/negotiation/negotiation.graph.js.map +1 -1
  21. package/dist/negotiation/negotiation.state.d.ts +12 -0
  22. package/dist/negotiation/negotiation.state.d.ts.map +1 -1
  23. package/dist/negotiation/negotiation.state.js +16 -0
  24. package/dist/negotiation/negotiation.state.js.map +1 -1
  25. package/dist/negotiation/negotiation.tools.d.ts +7 -0
  26. package/dist/negotiation/negotiation.tools.d.ts.map +1 -0
  27. package/dist/negotiation/negotiation.tools.js +547 -0
  28. package/dist/negotiation/negotiation.tools.js.map +1 -0
  29. package/dist/network/network.tools.d.ts.map +1 -1
  30. package/dist/network/network.tools.js +65 -21
  31. package/dist/network/network.tools.js.map +1 -1
  32. package/dist/opportunity/opportunity.graph.d.ts.map +1 -1
  33. package/dist/opportunity/opportunity.graph.js +4 -2
  34. package/dist/opportunity/opportunity.graph.js.map +1 -1
  35. package/dist/opportunity/opportunity.tools.d.ts.map +1 -1
  36. package/dist/opportunity/opportunity.tools.js +50 -26
  37. package/dist/opportunity/opportunity.tools.js.map +1 -1
  38. package/dist/profile/profile.graph.d.ts +12 -12
  39. package/dist/profile/profile.graph.d.ts.map +1 -1
  40. package/dist/profile/profile.graph.js +22 -15
  41. package/dist/profile/profile.graph.js.map +1 -1
  42. package/dist/profile/profile.tools.d.ts.map +1 -1
  43. package/dist/profile/profile.tools.js +50 -18
  44. package/dist/profile/profile.tools.js.map +1 -1
  45. package/dist/shared/agent/tool.factory.d.ts.map +1 -1
  46. package/dist/shared/agent/tool.factory.js +12 -1
  47. package/dist/shared/agent/tool.factory.js.map +1 -1
  48. package/dist/shared/agent/tool.helpers.d.ts +22 -0
  49. package/dist/shared/agent/tool.helpers.d.ts.map +1 -1
  50. package/dist/shared/agent/tool.helpers.js.map +1 -1
  51. package/dist/shared/agent/tool.registry.d.ts.map +1 -1
  52. package/dist/shared/agent/tool.registry.js +4 -0
  53. package/dist/shared/agent/tool.registry.js.map +1 -1
  54. package/dist/shared/agent/utility.tools.d.ts.map +1 -1
  55. package/dist/shared/agent/utility.tools.js +215 -46
  56. package/dist/shared/agent/utility.tools.js.map +1 -1
  57. package/dist/shared/interfaces/database.interface.d.ts +52 -0
  58. package/dist/shared/interfaces/database.interface.d.ts.map +1 -1
  59. package/dist/shared/interfaces/negotiation-events.interface.d.ts +58 -0
  60. package/dist/shared/interfaces/negotiation-events.interface.d.ts.map +1 -0
  61. package/dist/shared/interfaces/negotiation-events.interface.js +7 -0
  62. package/dist/shared/interfaces/negotiation-events.interface.js.map +1 -0
  63. package/dist/shared/interfaces/webhook.interface.d.ts +25 -0
  64. package/dist/shared/interfaces/webhook.interface.d.ts.map +1 -0
  65. package/dist/shared/interfaces/webhook.interface.js +2 -0
  66. package/dist/shared/interfaces/webhook.interface.js.map +1 -0
  67. package/dist/webhook/webhook.tools.d.ts +7 -0
  68. package/dist/webhook/webhook.tools.d.ts.map +1 -0
  69. package/dist/webhook/webhook.tools.js +127 -0
  70. package/dist/webhook/webhook.tools.js.map +1 -0
  71. package/package.json +4 -2
@@ -0,0 +1,547 @@
1
+ import { z } from 'zod';
2
+ import { success, error } from '../shared/agent/tool.helpers.js';
3
+ import { NegotiationProposer } from './negotiation.proposer.js';
4
+ import { NegotiationResponder } from './negotiation.responder.js';
5
+ import { protocolLogger } from '../shared/observability/protocol.logger.js';
6
+ const logger = protocolLogger('NegotiationTools');
7
+ /**
8
+ * Creates negotiation MCP tools for external agent access.
9
+ * Exposes negotiation state for listing, reading, and responding to bilateral negotiations.
10
+ */
11
+ export function createNegotiationTools(defineTool, deps) {
12
+ const { negotiationDatabase } = deps;
13
+ const list_negotiations = defineTool({
14
+ name: 'list_negotiations',
15
+ description: 'List bilateral negotiations the authenticated user is involved in, either as the source (initiator) or candidate (responder). ' +
16
+ 'Negotiations are turn-based exchanges where two AI agents negotiate on behalf of their users to determine if there is a ' +
17
+ 'mutual opportunity for collaboration.\n\n' +
18
+ '**Statuses:**\n' +
19
+ '- `active` — Negotiation is in progress, agents are exchanging turns.\n' +
20
+ '- `waiting_for_external` — The graph has yielded and is waiting for an external response (e.g. from the user via respond_to_negotiation) or a timeout.\n' +
21
+ '- `completed` — Negotiation has concluded (accepted, rejected, or reached turn cap).\n\n' +
22
+ '**When to use:** To see ongoing and past negotiations, check which negotiations need attention, ' +
23
+ 'or find a negotiation ID for get_negotiation or respond_to_negotiation.',
24
+ querySchema: z.object({
25
+ status: z.enum(['active', 'waiting_for_external', 'completed', 'all']).optional()
26
+ .describe('Filter by negotiation status. Omit or use "all" to return all negotiations.'),
27
+ }),
28
+ handler: async ({ context, query }) => {
29
+ try {
30
+ // Map tool status filter to task state query
31
+ const stateFilter = query.status && query.status !== 'all' ? query.status : undefined;
32
+ // For 'active', query 'working' state tasks
33
+ const dbState = stateFilter === 'active' ? 'working'
34
+ : stateFilter === 'waiting_for_external' ? 'waiting_for_external'
35
+ : stateFilter === 'completed' ? 'completed'
36
+ : undefined;
37
+ const tasks = await negotiationDatabase.getTasksForUser(context.userId, dbState ? { state: dbState } : undefined);
38
+ const negotiations = await Promise.all(tasks.map(async (task) => {
39
+ const meta = task.metadata;
40
+ if (meta?.type !== 'negotiation')
41
+ return null;
42
+ const isSource = meta.sourceUserId === context.userId;
43
+ const counterpartyId = isSource ? meta.candidateUserId : meta.sourceUserId;
44
+ // Get latest message for preview
45
+ const messages = await negotiationDatabase.getMessagesForConversation(task.conversationId);
46
+ const lastMessage = messages[messages.length - 1];
47
+ const lastTurnData = lastMessage
48
+ ? lastMessage.parts?.find(p => p.kind === 'data')?.data
49
+ : undefined;
50
+ // Determine whose turn it is based on message count (alternating source/candidate)
51
+ const turnCount = messages.length;
52
+ const currentSpeaker = turnCount % 2 === 0 ? 'source' : 'candidate';
53
+ const isUsersTurn = (isSource && currentSpeaker === 'source') || (!isSource && currentSpeaker === 'candidate');
54
+ // Map task state to tool status
55
+ const status = task.state === 'working' ? 'active'
56
+ : task.state === 'waiting_for_external' ? 'waiting_for_external'
57
+ : task.state === 'completed' ? 'completed'
58
+ : task.state;
59
+ return {
60
+ id: task.id,
61
+ counterpartyId: counterpartyId ?? 'unknown',
62
+ role: isSource ? 'source' : 'candidate',
63
+ turnCount,
64
+ status,
65
+ isUsersTurn,
66
+ latestAction: lastTurnData?.action ?? null,
67
+ latestMessagePreview: lastTurnData?.assessment?.reasoning
68
+ ? lastTurnData.assessment.reasoning.substring(0, 150) + (lastTurnData.assessment.reasoning.length > 150 ? '...' : '')
69
+ : null,
70
+ createdAt: task.createdAt,
71
+ updatedAt: task.updatedAt,
72
+ };
73
+ }));
74
+ const filtered = negotiations.filter(Boolean);
75
+ return success({
76
+ count: filtered.length,
77
+ negotiations: filtered,
78
+ });
79
+ }
80
+ catch (err) {
81
+ return error(`Failed to list negotiations: ${err instanceof Error ? err.message : String(err)}`);
82
+ }
83
+ },
84
+ });
85
+ const get_negotiation = defineTool({
86
+ name: 'get_negotiation',
87
+ description: 'Get the full details of a specific negotiation, including all turns, messages, counterparty info, and current state. ' +
88
+ 'Negotiations are bilateral exchanges where two AI agents negotiate on behalf of users. Each turn contains an action ' +
89
+ '(propose, accept, reject, counter) and an assessment with a fit score, reasoning, and suggested roles.\n\n' +
90
+ '**Access control:** You must be a party to the negotiation (source or candidate) to view it.\n\n' +
91
+ '**When to use:** To review the full negotiation history before responding, to understand why a negotiation was ' +
92
+ 'accepted or rejected, or to see the current state of an active negotiation.',
93
+ querySchema: z.object({
94
+ negotiationId: z.string().describe('The negotiation task ID (from list_negotiations results).'),
95
+ }),
96
+ handler: async ({ context, query }) => {
97
+ try {
98
+ const task = await negotiationDatabase.getTask(query.negotiationId);
99
+ if (!task) {
100
+ return error('Negotiation not found.');
101
+ }
102
+ const meta = task.metadata;
103
+ if (meta?.type !== 'negotiation') {
104
+ return error('Negotiation not found.');
105
+ }
106
+ // Access control: user must be source or candidate
107
+ const isSource = meta.sourceUserId === context.userId;
108
+ const isCandidate = meta.candidateUserId === context.userId;
109
+ if (!isSource && !isCandidate) {
110
+ return error('Access denied: you are not a party to this negotiation.');
111
+ }
112
+ const counterpartyId = isSource ? meta.candidateUserId : meta.sourceUserId;
113
+ // Load messages and artifacts
114
+ const [messages, artifacts] = await Promise.all([
115
+ negotiationDatabase.getMessagesForConversation(task.conversationId),
116
+ negotiationDatabase.getArtifactsForTask(task.id),
117
+ ]);
118
+ // Parse turns from messages
119
+ const turns = messages.map((m, idx) => {
120
+ const dataPart = m.parts?.find(p => p.kind === 'data');
121
+ const turnData = dataPart?.data;
122
+ const turnNumber = idx + 1;
123
+ const speaker = turnNumber % 2 === 1 ? 'source' : 'candidate';
124
+ return {
125
+ turnNumber,
126
+ speaker,
127
+ senderId: m.senderId,
128
+ action: turnData?.action ?? 'unknown',
129
+ fitScore: turnData?.assessment?.fitScore ?? null,
130
+ reasoning: turnData?.assessment?.reasoning ?? null,
131
+ suggestedRoles: turnData?.assessment?.suggestedRoles ?? null,
132
+ createdAt: m.createdAt,
133
+ };
134
+ });
135
+ // Extract outcome from artifacts if completed
136
+ const outcomeArtifact = artifacts.find(a => a.name === 'negotiation-outcome');
137
+ const outcome = outcomeArtifact
138
+ ? outcomeArtifact.parts?.find(p => p.kind === 'data')?.data
139
+ : null;
140
+ // Determine whose turn it is
141
+ const turnCount = messages.length;
142
+ const currentSpeaker = turnCount % 2 === 0 ? 'source' : 'candidate';
143
+ const isUsersTurn = (isSource && currentSpeaker === 'source') || (!isSource && currentSpeaker === 'candidate');
144
+ const status = task.state === 'working' ? 'active'
145
+ : task.state === 'waiting_for_external' ? 'waiting_for_external'
146
+ : task.state === 'completed' ? 'completed'
147
+ : task.state;
148
+ return success({
149
+ id: task.id,
150
+ conversationId: task.conversationId,
151
+ status,
152
+ role: isSource ? 'source' : 'candidate',
153
+ counterpartyId: counterpartyId ?? 'unknown',
154
+ turnCount,
155
+ isUsersTurn,
156
+ turns,
157
+ outcome,
158
+ createdAt: task.createdAt,
159
+ updatedAt: task.updatedAt,
160
+ });
161
+ }
162
+ catch (err) {
163
+ return error(`Failed to get negotiation: ${err instanceof Error ? err.message : String(err)}`);
164
+ }
165
+ },
166
+ });
167
+ const respond_to_negotiation = defineTool({
168
+ name: 'respond_to_negotiation',
169
+ description: 'Respond to a negotiation that is waiting for external input. This tool allows users to influence the negotiation ' +
170
+ 'by accepting, rejecting, or countering the current proposal.\n\n' +
171
+ '**Turn-based model:** Negotiations alternate between source and candidate agents. When the graph yields with ' +
172
+ '`waiting_for_external` status, the user whose turn it is can respond.\n\n' +
173
+ '**Valid actions:**\n' +
174
+ '- `accept` — Accept the current proposal. The negotiation will be finalized as an opportunity.\n' +
175
+ '- `reject` — Reject the current proposal. The negotiation will end without creating an opportunity.\n' +
176
+ '- `counter` — Counter the proposal with a message (message is required for counter). The negotiation will continue.\n\n' +
177
+ '**What happens after:** Accept/reject finalizes the negotiation immediately. Counter continues the negotiation — ' +
178
+ 'if the counterparty has an external agent, the negotiation yields again; otherwise the AI agent responds inline.',
179
+ querySchema: z.object({
180
+ negotiationId: z.string().describe('The negotiation task ID to respond to.'),
181
+ action: z.enum(['accept', 'reject', 'counter']).describe('The response action: accept the proposal, reject it, or counter with a new message.'),
182
+ message: z.string().optional().describe('Required for "counter" action. Your counter-proposal message explaining what you want to change.'),
183
+ fitScore: z.number().min(0).max(100).optional().describe('Optional fit score (0-100) for your assessment. Defaults to 100 for accept, 0 for reject, 50 for counter.'),
184
+ }),
185
+ handler: async ({ context, query }) => {
186
+ try {
187
+ const task = await negotiationDatabase.getTask(query.negotiationId);
188
+ if (!task) {
189
+ return error('Negotiation not found.');
190
+ }
191
+ const meta = task.metadata;
192
+ if (meta?.type !== 'negotiation') {
193
+ return error('Negotiation not found.');
194
+ }
195
+ // Validate negotiation is waiting for external input
196
+ if (task.state !== 'waiting_for_external') {
197
+ return error(`Negotiation is not waiting for a response. Current status: ${task.state}`);
198
+ }
199
+ // Access control: user must be a party
200
+ const isSource = meta.sourceUserId === context.userId;
201
+ const isCandidate = meta.candidateUserId === context.userId;
202
+ if (!isSource && !isCandidate) {
203
+ return error('Access denied: you are not a party to this negotiation.');
204
+ }
205
+ // Determine whose turn it is
206
+ const messages = await negotiationDatabase.getMessagesForConversation(task.conversationId);
207
+ const turnCount = messages.length;
208
+ const currentSpeaker = turnCount % 2 === 0 ? 'source' : 'candidate';
209
+ const isUsersTurn = (isSource && currentSpeaker === 'source') || (!isSource && currentSpeaker === 'candidate');
210
+ if (!isUsersTurn) {
211
+ return error('It is not your turn to respond in this negotiation.');
212
+ }
213
+ // Validate counter has a message
214
+ if (query.action === 'counter' && !query.message?.trim()) {
215
+ return error('A message is required when countering a proposal. Explain what you want to change.');
216
+ }
217
+ // ── Cancel pending timeout ──
218
+ if (deps.negotiationTimeoutQueue) {
219
+ await deps.negotiationTimeoutQueue.cancelTimeout(task.id);
220
+ }
221
+ // ── Build and persist the external agent's turn ──
222
+ const defaultFitScore = query.action === 'accept' ? 100 : query.action === 'reject' ? 0 : 50;
223
+ const turnData = {
224
+ action: query.action,
225
+ assessment: {
226
+ fitScore: query.fitScore ?? defaultFitScore,
227
+ reasoning: query.message ?? `User ${query.action}ed the proposal.`,
228
+ suggestedRoles: { ownUser: 'peer', otherUser: 'peer' },
229
+ },
230
+ };
231
+ const senderId = `agent:${context.userId}`;
232
+ const turnMessage = await negotiationDatabase.createMessage({
233
+ conversationId: task.conversationId,
234
+ senderId,
235
+ role: 'agent',
236
+ parts: [{ kind: 'data', data: turnData }],
237
+ taskId: task.id,
238
+ });
239
+ const newTurnCount = turnCount + 1;
240
+ // ── Handle accept/reject: finalize immediately ──
241
+ if (query.action === 'accept' || query.action === 'reject') {
242
+ const allMessages = [...messages, { id: turnMessage.id, senderId: turnMessage.senderId, role: turnMessage.role, parts: turnMessage.parts, createdAt: turnMessage.createdAt }];
243
+ const history = allMessages.map(m => {
244
+ const dp = m.parts?.find(p => p.kind === 'data');
245
+ return dp?.data;
246
+ }).filter(Boolean);
247
+ const nextSpeaker = currentSpeaker === 'source' ? 'candidate' : 'source';
248
+ const outcome = buildNegotiationOutcome(history, newTurnCount, query.action, meta.sourceUserId, meta.candidateUserId, nextSpeaker);
249
+ await negotiationDatabase.updateTaskState(task.id, 'completed');
250
+ await negotiationDatabase.createArtifact({
251
+ taskId: task.id,
252
+ name: 'negotiation-outcome',
253
+ parts: [{ kind: 'data', data: outcome }],
254
+ metadata: { hasOpportunity: outcome.hasOpportunity, turnCount: newTurnCount },
255
+ });
256
+ // Emit completed event for both parties
257
+ if (deps.negotiationEvents) {
258
+ const outcomeStr = query.action === 'accept' ? 'accepted' : 'rejected';
259
+ deps.negotiationEvents.emitCompleted({
260
+ negotiationId: task.id,
261
+ userId: meta.sourceUserId,
262
+ outcome: outcomeStr,
263
+ finalScore: outcome.finalScore,
264
+ turnCount: newTurnCount,
265
+ });
266
+ deps.negotiationEvents.emitCompleted({
267
+ negotiationId: task.id,
268
+ userId: meta.candidateUserId,
269
+ outcome: outcomeStr,
270
+ finalScore: outcome.finalScore,
271
+ turnCount: newTurnCount,
272
+ });
273
+ }
274
+ return success({
275
+ message: query.action === 'accept'
276
+ ? 'Negotiation accepted. An opportunity has been created.'
277
+ : 'Negotiation rejected.',
278
+ negotiationId: task.id,
279
+ action: query.action,
280
+ turnNumber: newTurnCount,
281
+ outcome,
282
+ });
283
+ }
284
+ // ── Handle counter: check if under max turns ──
285
+ const maxTurns = 6; // Default max turns (matches graph default)
286
+ if (newTurnCount >= maxTurns) {
287
+ // Max turns reached — finalize with turn_cap
288
+ const allMessages = [...messages, { id: turnMessage.id, senderId: turnMessage.senderId, role: turnMessage.role, parts: turnMessage.parts, createdAt: turnMessage.createdAt }];
289
+ const history = allMessages.map(m => {
290
+ const dp = m.parts?.find(p => p.kind === 'data');
291
+ return dp?.data;
292
+ }).filter(Boolean);
293
+ const nextSpeakerForCap = currentSpeaker === 'source' ? 'candidate' : 'source';
294
+ const outcome = buildNegotiationOutcome(history, newTurnCount, 'counter', meta.sourceUserId, meta.candidateUserId, nextSpeakerForCap);
295
+ await negotiationDatabase.updateTaskState(task.id, 'completed');
296
+ await negotiationDatabase.createArtifact({
297
+ taskId: task.id,
298
+ name: 'negotiation-outcome',
299
+ parts: [{ kind: 'data', data: outcome }],
300
+ metadata: { hasOpportunity: false, turnCount: newTurnCount },
301
+ });
302
+ if (deps.negotiationEvents) {
303
+ deps.negotiationEvents.emitCompleted({
304
+ negotiationId: task.id,
305
+ userId: meta.sourceUserId,
306
+ outcome: 'turn_cap',
307
+ finalScore: 0,
308
+ turnCount: newTurnCount,
309
+ });
310
+ deps.negotiationEvents.emitCompleted({
311
+ negotiationId: task.id,
312
+ userId: meta.candidateUserId,
313
+ outcome: 'turn_cap',
314
+ finalScore: 0,
315
+ turnCount: newTurnCount,
316
+ });
317
+ }
318
+ return success({
319
+ message: 'Maximum turns reached. Negotiation finalized without opportunity.',
320
+ negotiationId: task.id,
321
+ action: 'counter',
322
+ turnNumber: newTurnCount,
323
+ outcome,
324
+ });
325
+ }
326
+ // ── Counter under max turns: determine counterparty's next turn ──
327
+ const counterpartyUserId = isSource ? meta.candidateUserId : meta.sourceUserId;
328
+ const counterpartySpeaker = isSource ? 'candidate' : 'source';
329
+ // Check if counterparty has an external agent
330
+ const counterpartyHasWebhook = deps.webhookLookup
331
+ ? await deps.webhookLookup.hasWebhookForEvent(counterpartyUserId, 'negotiation.turn_received')
332
+ : false;
333
+ if (counterpartyHasWebhook) {
334
+ // Yield again for the counterparty's external agent
335
+ await negotiationDatabase.updateTaskState(task.id, 'waiting_for_external');
336
+ const deadline = new Date(Date.now() + 24 * 60 * 60 * 1000).toISOString();
337
+ if (deps.negotiationEvents) {
338
+ deps.negotiationEvents.emitTurnReceived({
339
+ negotiationId: task.id,
340
+ userId: counterpartyUserId,
341
+ turnNumber: newTurnCount + 1,
342
+ counterpartyAction: 'counter',
343
+ counterpartyMessage: query.message,
344
+ deadline,
345
+ });
346
+ }
347
+ if (deps.negotiationTimeoutQueue) {
348
+ await deps.negotiationTimeoutQueue.enqueueTimeout(task.id, newTurnCount, 24 * 60 * 60 * 1000);
349
+ }
350
+ return success({
351
+ message: 'Counter-proposal submitted. Waiting for counterparty response.',
352
+ negotiationId: task.id,
353
+ action: 'counter',
354
+ turnNumber: newTurnCount,
355
+ waitingForExternal: true,
356
+ });
357
+ }
358
+ // ── No external agent for counterparty: run AI agent inline ──
359
+ await negotiationDatabase.updateTaskState(task.id, 'working');
360
+ const allMessages = [...messages, { id: turnMessage.id, senderId: turnMessage.senderId, role: turnMessage.role, parts: turnMessage.parts, createdAt: turnMessage.createdAt }];
361
+ const history = allMessages.map(m => {
362
+ const dp = m.parts?.find(p => p.kind === 'data');
363
+ return dp?.data;
364
+ }).filter(Boolean);
365
+ // Build user contexts from task metadata for AI agent invocation
366
+ // Note: we use minimal context here since we don't have full user profiles in the tool.
367
+ // The AI agent will work with the history which contains all the reasoning.
368
+ const counterpartyIsSource = counterpartySpeaker === 'source';
369
+ const agent = counterpartyIsSource ? new NegotiationProposer() : new NegotiationResponder();
370
+ const ownUserCtx = { id: counterpartyUserId, intents: [], profile: {} };
371
+ const otherUserCtx = { id: context.userId, intents: [], profile: {} };
372
+ const seedAssessment = { score: 50, reasoning: 'Continued negotiation', valencyRole: 'peer' };
373
+ const aiTurn = await agent.invoke({
374
+ ownUser: ownUserCtx,
375
+ otherUser: otherUserCtx,
376
+ indexContext: { networkId: '', prompt: '' },
377
+ seedAssessment,
378
+ history,
379
+ });
380
+ // Persist AI turn
381
+ const aiSenderId = `agent:${counterpartyUserId}`;
382
+ await negotiationDatabase.createMessage({
383
+ conversationId: task.conversationId,
384
+ senderId: aiSenderId,
385
+ role: 'agent',
386
+ parts: [{ kind: 'data', data: aiTurn }],
387
+ taskId: task.id,
388
+ });
389
+ const finalTurnCount = newTurnCount + 1;
390
+ // Evaluate AI response
391
+ if (aiTurn.action === 'accept' || aiTurn.action === 'reject') {
392
+ const fullHistory = [...history, aiTurn];
393
+ const outcome = buildNegotiationOutcome(fullHistory, finalTurnCount, aiTurn.action, meta.sourceUserId, meta.candidateUserId, counterpartySpeaker === 'source' ? 'candidate' : 'source');
394
+ await negotiationDatabase.updateTaskState(task.id, 'completed');
395
+ await negotiationDatabase.createArtifact({
396
+ taskId: task.id,
397
+ name: 'negotiation-outcome',
398
+ parts: [{ kind: 'data', data: outcome }],
399
+ metadata: { hasOpportunity: outcome.hasOpportunity, turnCount: finalTurnCount },
400
+ });
401
+ if (deps.negotiationEvents) {
402
+ const outcomeStr = aiTurn.action === 'accept' ? 'accepted' : 'rejected';
403
+ deps.negotiationEvents.emitCompleted({
404
+ negotiationId: task.id,
405
+ userId: meta.sourceUserId,
406
+ outcome: outcomeStr,
407
+ finalScore: outcome.finalScore,
408
+ turnCount: finalTurnCount,
409
+ });
410
+ deps.negotiationEvents.emitCompleted({
411
+ negotiationId: task.id,
412
+ userId: meta.candidateUserId,
413
+ outcome: outcomeStr,
414
+ finalScore: outcome.finalScore,
415
+ turnCount: finalTurnCount,
416
+ });
417
+ }
418
+ return success({
419
+ message: `Counter submitted. AI agent responded with ${aiTurn.action}.`,
420
+ negotiationId: task.id,
421
+ action: query.action,
422
+ turnNumber: newTurnCount,
423
+ aiResponse: { action: aiTurn.action, fitScore: aiTurn.assessment.fitScore, reasoning: aiTurn.assessment.reasoning },
424
+ outcome,
425
+ });
426
+ }
427
+ // AI countered — check if max turns reached
428
+ if (finalTurnCount >= maxTurns) {
429
+ const fullHistory = [...history, aiTurn];
430
+ const outcome = buildNegotiationOutcome(fullHistory, finalTurnCount, 'counter', meta.sourceUserId, meta.candidateUserId, counterpartySpeaker === 'source' ? 'candidate' : 'source');
431
+ await negotiationDatabase.updateTaskState(task.id, 'completed');
432
+ await negotiationDatabase.createArtifact({
433
+ taskId: task.id,
434
+ name: 'negotiation-outcome',
435
+ parts: [{ kind: 'data', data: outcome }],
436
+ metadata: { hasOpportunity: false, turnCount: finalTurnCount },
437
+ });
438
+ if (deps.negotiationEvents) {
439
+ deps.negotiationEvents.emitCompleted({
440
+ negotiationId: task.id,
441
+ userId: meta.sourceUserId,
442
+ outcome: 'turn_cap',
443
+ finalScore: 0,
444
+ turnCount: finalTurnCount,
445
+ });
446
+ deps.negotiationEvents.emitCompleted({
447
+ negotiationId: task.id,
448
+ userId: meta.candidateUserId,
449
+ outcome: 'turn_cap',
450
+ finalScore: 0,
451
+ turnCount: finalTurnCount,
452
+ });
453
+ }
454
+ return success({
455
+ message: 'AI agent countered but max turns reached. Negotiation finalized.',
456
+ negotiationId: task.id,
457
+ action: query.action,
458
+ turnNumber: newTurnCount,
459
+ aiResponse: { action: aiTurn.action, fitScore: aiTurn.assessment.fitScore, reasoning: aiTurn.assessment.reasoning },
460
+ outcome,
461
+ });
462
+ }
463
+ // AI countered, user's turn again — check if user has webhook to yield
464
+ const userHasWebhook = deps.webhookLookup
465
+ ? await deps.webhookLookup.hasWebhookForEvent(context.userId, 'negotiation.turn_received')
466
+ : false;
467
+ if (userHasWebhook) {
468
+ await negotiationDatabase.updateTaskState(task.id, 'waiting_for_external');
469
+ const deadline = new Date(Date.now() + 24 * 60 * 60 * 1000).toISOString();
470
+ if (deps.negotiationEvents) {
471
+ deps.negotiationEvents.emitTurnReceived({
472
+ negotiationId: task.id,
473
+ userId: context.userId,
474
+ turnNumber: finalTurnCount + 1,
475
+ counterpartyAction: aiTurn.action,
476
+ counterpartyMessage: aiTurn.assessment.reasoning,
477
+ deadline,
478
+ });
479
+ }
480
+ if (deps.negotiationTimeoutQueue) {
481
+ await deps.negotiationTimeoutQueue.enqueueTimeout(task.id, finalTurnCount, 24 * 60 * 60 * 1000);
482
+ }
483
+ return success({
484
+ message: 'Counter submitted. AI agent countered back. Waiting for your next response.',
485
+ negotiationId: task.id,
486
+ action: query.action,
487
+ turnNumber: newTurnCount,
488
+ aiResponse: { action: aiTurn.action, fitScore: aiTurn.assessment.fitScore, reasoning: aiTurn.assessment.reasoning },
489
+ waitingForExternal: true,
490
+ });
491
+ }
492
+ // No webhook for user either — set back to working so graph can continue
493
+ await negotiationDatabase.updateTaskState(task.id, 'working');
494
+ return success({
495
+ message: 'Counter submitted. AI agent countered back. Negotiation continues.',
496
+ negotiationId: task.id,
497
+ action: query.action,
498
+ turnNumber: newTurnCount,
499
+ aiResponse: { action: aiTurn.action, fitScore: aiTurn.assessment.fitScore, reasoning: aiTurn.assessment.reasoning },
500
+ });
501
+ }
502
+ catch (err) {
503
+ return error(`Failed to respond to negotiation: ${err instanceof Error ? err.message : String(err)}`);
504
+ }
505
+ },
506
+ });
507
+ return [list_negotiations, get_negotiation, respond_to_negotiation];
508
+ }
509
+ /**
510
+ * Build a NegotiationOutcome from the full turn history.
511
+ * Mirrors the logic in the graph's finalizeNode for consistency.
512
+ *
513
+ * @param history - All negotiation turns
514
+ * @param turnCount - Total number of turns
515
+ * @param lastAction - The last turn's action (accept/reject/counter)
516
+ * @param sourceUserId - Source user ID
517
+ * @param candidateUserId - Candidate user ID
518
+ * @param currentSpeaker - Who would speak next (the person after the accepter/rejector)
519
+ */
520
+ function buildNegotiationOutcome(history, turnCount, lastAction, sourceUserId, candidateUserId, currentSpeaker) {
521
+ const hasOpportunity = lastAction === 'accept';
522
+ const atCap = lastAction === 'counter';
523
+ const scores = history.map(t => t.assessment.fitScore);
524
+ const avgScore = scores.length > 0 ? Math.round(scores.reduce((a, b) => a + b, 0) / scores.length) : 0;
525
+ let agreedRoles = [];
526
+ if (hasOpportunity && history.length >= 2) {
527
+ const acceptTurn = history[history.length - 1];
528
+ const precedingTurn = history[history.length - 2];
529
+ const accepterIsSource = currentSpeaker === 'candidate';
530
+ const [sourceRole, candidateRole] = accepterIsSource
531
+ ? [acceptTurn.assessment.suggestedRoles.ownUser, precedingTurn.assessment.suggestedRoles.ownUser]
532
+ : [precedingTurn.assessment.suggestedRoles.ownUser, acceptTurn.assessment.suggestedRoles.ownUser];
533
+ agreedRoles = [
534
+ { userId: sourceUserId, role: sourceRole },
535
+ { userId: candidateUserId, role: candidateRole },
536
+ ];
537
+ }
538
+ return {
539
+ hasOpportunity,
540
+ finalScore: hasOpportunity ? avgScore : 0,
541
+ agreedRoles,
542
+ reasoning: history[history.length - 1]?.assessment.reasoning ?? '',
543
+ turnCount,
544
+ ...(atCap && { reason: 'turn_cap' }),
545
+ };
546
+ }
547
+ //# sourceMappingURL=negotiation.tools.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"negotiation.tools.js","sourceRoot":"","sources":["../../src/negotiation/negotiation.tools.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"network.tools.d.ts","sourceRoot":"","sources":["../../src/network/network.tools.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,iCAAiC,CAAC;AAG5E,wBAAgB,kBAAkB,CAAC,UAAU,EAAE,UAAU,EAAE,IAAI,EAAE,QAAQ,gDA6dxE"}
1
+ {"version":3,"file":"network.tools.d.ts","sourceRoot":"","sources":["../../src/network/network.tools.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,iCAAiC,CAAC;AAG5E,wBAAgB,kBAAkB,CAAC,UAAU,EAAE,UAAU,EAAE,IAAI,EAAE,QAAQ,gDA+gBxE"}