@indexnetwork/protocol 1.0.0-rc.122.1 → 1.2.0-rc.124.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-streaming.types.d.ts +62 -3
- package/dist/chat/chat-streaming.types.d.ts.map +1 -1
- package/dist/chat/chat-streaming.types.js +17 -1
- package/dist/chat/chat-streaming.types.js.map +1 -1
- package/dist/chat/chat.agent.d.ts +35 -1
- package/dist/chat/chat.agent.d.ts.map +1 -1
- package/dist/chat/chat.agent.js +54 -1
- package/dist/chat/chat.agent.js.map +1 -1
- package/dist/chat/chat.graph.d.ts +2 -0
- package/dist/chat/chat.graph.d.ts.map +1 -1
- package/dist/chat/chat.prompt.modules.d.ts.map +1 -1
- package/dist/chat/chat.prompt.modules.js +2 -0
- package/dist/chat/chat.prompt.modules.js.map +1 -1
- package/dist/chat/chat.streamer.d.ts.map +1 -1
- package/dist/chat/chat.streamer.js +17 -2
- package/dist/chat/chat.streamer.js.map +1 -1
- package/dist/index.d.ts +5 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/mcp/elicitation.builder.d.ts +54 -0
- package/dist/mcp/elicitation.builder.d.ts.map +1 -0
- package/dist/mcp/elicitation.builder.js +75 -0
- package/dist/mcp/elicitation.builder.js.map +1 -0
- package/dist/mcp/elicitation.dispatcher.d.ts +37 -0
- package/dist/mcp/elicitation.dispatcher.d.ts.map +1 -0
- package/dist/mcp/elicitation.dispatcher.js +87 -0
- package/dist/mcp/elicitation.dispatcher.js.map +1 -0
- package/dist/mcp/mcp.server.d.ts +18 -0
- package/dist/mcp/mcp.server.d.ts.map +1 -1
- package/dist/mcp/mcp.server.js +76 -0
- package/dist/mcp/mcp.server.js.map +1 -1
- package/dist/negotiation/negotiation.graph.d.ts +9 -1
- package/dist/negotiation/negotiation.graph.d.ts.map +1 -1
- package/dist/negotiation/negotiation.graph.js +29 -2
- package/dist/negotiation/negotiation.graph.js.map +1 -1
- package/dist/opportunity/discovery-question.helper.d.ts +17 -0
- package/dist/opportunity/discovery-question.helper.d.ts.map +1 -0
- package/dist/opportunity/discovery-question.helper.js +27 -0
- package/dist/opportunity/discovery-question.helper.js.map +1 -0
- package/dist/opportunity/negotiation-summary.builder.d.ts +38 -0
- package/dist/opportunity/negotiation-summary.builder.d.ts.map +1 -0
- package/dist/opportunity/negotiation-summary.builder.js +67 -0
- package/dist/opportunity/negotiation-summary.builder.js.map +1 -0
- package/dist/opportunity/opportunity.discover.d.ts +22 -0
- package/dist/opportunity/opportunity.discover.d.ts.map +1 -1
- package/dist/opportunity/opportunity.discover.js +113 -0
- package/dist/opportunity/opportunity.discover.js.map +1 -1
- package/dist/opportunity/opportunity.graph.d.ts +20 -0
- package/dist/opportunity/opportunity.graph.d.ts.map +1 -1
- package/dist/opportunity/opportunity.graph.js +81 -39
- package/dist/opportunity/opportunity.graph.js.map +1 -1
- package/dist/opportunity/opportunity.state.d.ts +13 -0
- package/dist/opportunity/opportunity.state.d.ts.map +1 -1
- package/dist/opportunity/opportunity.state.js +18 -0
- package/dist/opportunity/opportunity.state.js.map +1 -1
- package/dist/opportunity/opportunity.tools.d.ts.map +1 -1
- package/dist/opportunity/opportunity.tools.js +18 -0
- package/dist/opportunity/opportunity.tools.js.map +1 -1
- package/dist/shared/agent/tool.factory.d.ts.map +1 -1
- package/dist/shared/agent/tool.factory.js +2 -0
- package/dist/shared/agent/tool.factory.js.map +1 -1
- package/dist/shared/agent/tool.helpers.d.ts +12 -0
- 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/chat-message-writer.interface.d.ts +19 -0
- package/dist/shared/interfaces/chat-message-writer.interface.d.ts.map +1 -0
- package/dist/shared/interfaces/chat-message-writer.interface.js +2 -0
- package/dist/shared/interfaces/chat-message-writer.interface.js.map +1 -0
- package/dist/shared/interfaces/question-generator.interface.d.ts +18 -0
- package/dist/shared/interfaces/question-generator.interface.d.ts.map +1 -0
- package/dist/shared/interfaces/question-generator.interface.js +2 -0
- package/dist/shared/interfaces/question-generator.interface.js.map +1 -0
- package/package.json +1 -1
|
@@ -100,6 +100,8 @@ When the user asks to review, revise, check, or see their current opportunities,
|
|
|
100
100
|
|
|
101
101
|
When either tool returns \`\`\`opportunity code blocks, include them verbatim in your reply so they render as cards.
|
|
102
102
|
|
|
103
|
+
When \`discover_opportunities\` returns a \`questions\` array, do **not** rephrase or summarize them in your prose. The frontend renders them as an interactive decision card surface. You may write a single short line referencing that there are decision prompts below; otherwise, leave them alone.
|
|
104
|
+
|
|
103
105
|
Draft or latent opportunities can be sent (update_opportunity with status='pending'). Status translation: draft/latent → "draft", pending → "sent", accepted → "connected"
|
|
104
106
|
|
|
105
107
|
**CRITICAL: Only describe what the tool response confirms happened.** "pending" sends a notification — not a message or invite. "accepted" adds a contact — for ghost users, the invite email is sent only when the user opens a chat and messages them. Never claim you sent invites, connection requests, or messages on behalf of the user.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chat.prompt.modules.js","sourceRoot":"","sources":["../../src/chat/chat.prompt.modules.ts"],"names":[],"mappings":"AAsCA,kFAAkF;AAClF,aAAa;AACb,kFAAkF;AAElF;;;;;;;;;GASG;AACH,MAAM,UAAU,sBAAsB,CACpC,QAAuB;IAEvB,0CAA0C;IAC1C,IAAI,YAAY,GAAG,CAAC,CAAC,CAAC;IACtB,KAAK,IAAI,CAAC,GAAG,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QAC9C,IAAI,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,KAAK,OAAO,EAAE,CAAC;YACvC,YAAY,GAAG,CAAC,CAAC;YACjB,MAAM;QACR,CAAC;IACH,CAAC;IAED,qEAAqE;IACrE,MAAM,SAAS,GAA2D,EAAE,CAAC;IAC7E,MAAM,QAAQ,GAAG,YAAY,GAAG,CAAC,CAAC;IAElC,KAAK,IAAI,CAAC,GAAG,QAAQ,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QAChD,MAAM,GAAG,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;QACxB,IAAI,GAAG,CAAC,QAAQ,EAAE,KAAK,IAAI,EAAE,CAAC;YAC5B,MAAM,KAAK,GAAG,GAAgB,CAAC;YAC/B,MAAM,KAAK,GAAG,KAAK,CAAC,UAAU,IAAI,EAAE,CAAC;YACrC,KAAK,MAAM,EAAE,IAAI,KAAK,EAAE,CAAC;gBACvB,SAAS,CAAC,IAAI,CAAC;oBACb,IAAI,EAAE,EAAE,CAAC,IAAI;oBACb,IAAI,EAAE,CAAC,EAAE,CAAC,IAAI,IAAI,EAAE,CAA4B;iBACjD,CAAC,CAAC;YACL,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,kFAAkF;AAClF,UAAU;AACV,kFAAkF;AAElF;;;GAGG;AACH,SAAS,mBAAmB,CAAC,WAA4C;IACvE,OAAO,WAAW,CAAC,IAAI,CACrB,CAAC,CAAC,EAAE,EAAE,CACJ,CAAC,CAAC,IAAI,KAAK,wBAAwB;QACnC,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,IAAI,CAAC,CAAC,IAAI,CAAC,iBAAiB,CAAC,CACpD,CAAC;AACJ,CAAC;AAED,kFAAkF;AAClF,qBAAqB;AACrB,kFAAkF;AAElF,MAAM,eAAe,GAAiB;IACpC,EAAE,EAAE,WAAW;IACf,QAAQ,EAAE,CAAC,wBAAwB,EAAE,oBAAoB,EAAE,oBAAoB,CAAC;IAChF,aAAa,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,mBAAmB,CAAC,OAAO,CAAC,WAAW,CAAC;IACrE,OAAO,EAAE,GAAG,EAAE,CAAC
|
|
1
|
+
{"version":3,"file":"chat.prompt.modules.js","sourceRoot":"","sources":["../../src/chat/chat.prompt.modules.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chat.streamer.d.ts","sourceRoot":"","sources":["../../src/chat/chat.streamer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAa,WAAW,EAAgB,MAAM,0BAA0B,CAAC;AAChF,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAE3D,OAAO,KAAK,EACV,eAAe,
|
|
1
|
+
{"version":3,"file":"chat.streamer.d.ts","sourceRoot":"","sources":["../../src/chat/chat.streamer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAa,WAAW,EAAgB,MAAM,0BAA0B,CAAC;AAChF,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAE3D,OAAO,KAAK,EACV,eAAe,EAKhB,MAAM,2BAA2B,CAAC;AA+BnC;;;;;;;GAOG;AACH,qBAAa,YAAY;IAErB,OAAO,CAAC,kBAAkB;IAI1B,OAAO,CAAC,oBAAoB;gBAJpB,kBAAkB,EAAE,CAC1B,SAAS,EAAE,MAAM,EACjB,WAAW,EAAE,MAAM,KAChB,OAAO,CAAC,WAAW,EAAE,CAAC,EACnB,oBAAoB,EAAE,CAC5B,YAAY,CAAC,EAAE,mBAAmB,KAC/B,GAAG;IAGV;;;;;;;;OAQG;IACW,2BAA2B,CACvC,KAAK,EAAE;QACL,MAAM,EAAE,MAAM,CAAC;QACf,OAAO,EAAE,MAAM,CAAC;QAChB,SAAS,EAAE,MAAM,CAAC;QAClB,kBAAkB,CAAC,EAAE,MAAM,CAAC;QAC5B,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,eAAe,CAAC,EAAE,KAAK,CAAC;YAAE,IAAI,EAAE,WAAW,GAAG,MAAM,CAAC;YAAC,OAAO,EAAE,MAAM,CAAA;SAAE,CAAC,CAAC;KAC1E,EACD,YAAY,CAAC,EAAE,mBAAmB,EAClC,MAAM,CAAC,EAAE,WAAW,GACnB,cAAc,CAAC,eAAe,CAAC;IA4DlC;;;;;;;;;;;;OAYG;IACW,gBAAgB,CAC5B,KAAK,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,WAAW,EAAE,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE,EACtE,SAAS,EAAE,MAAM,EACjB,YAAY,CAAC,EAAE,mBAAmB,EAClC,MAAM,CAAC,EAAE,WAAW,GACnB,cAAc,CAAC,eAAe,CAAC;CA6LnC"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { AIMessage, HumanMessage } from "@langchain/core/messages";
|
|
2
2
|
import { protocolLogger } from "../shared/observability/protocol.logger.js";
|
|
3
|
-
import { createAgentEndEvent, createAgentStartEvent, createDebugMetaEvent, createErrorEvent, createGraphEndEvent, createGraphStartEvent, createIterationStartEvent, createLlmStartEvent, createLlmEndEvent, createResponseCompleteEvent, createResponseResetEvent, createHallucinationDetectedEvent, createStatusEvent, createTokenEvent, createToolActivityEvent, } from "./chat-streaming.types.js";
|
|
3
|
+
import { createAgentEndEvent, createAgentStartEvent, createDebugMetaEvent, createDecisionQuestionsEvent, createErrorEvent, createGraphEndEvent, createGraphStartEvent, createIterationStartEvent, createLlmStartEvent, createLlmEndEvent, createResponseCompleteEvent, createResponseResetEvent, createHallucinationDetectedEvent, createStatusEvent, createTokenEvent, createToolActivityEvent, createChatSummarizerStartEvent, createChatSummarizerEndEvent, createQuestionGeneratorStartEvent, createQuestionGeneratorEndEvent, } from "./chat-streaming.types.js";
|
|
4
4
|
const logger = protocolLogger("ChatStreamer");
|
|
5
5
|
// ══════════════════════════════════════════════════════════════════════════════
|
|
6
6
|
// CHAT STREAMER (Streaming Narration Architecture)
|
|
@@ -142,6 +142,21 @@ export class ChatStreamer {
|
|
|
142
142
|
if (event.type === "agent_end") {
|
|
143
143
|
yield createAgentEndEvent(sessionId, event.name, event.durationMs, event.summary);
|
|
144
144
|
}
|
|
145
|
+
if (event.type === "decision_questions") {
|
|
146
|
+
yield createDecisionQuestionsEvent(sessionId, { questions: event.questions });
|
|
147
|
+
}
|
|
148
|
+
if (event.type === "chat_summarizer_start") {
|
|
149
|
+
yield createChatSummarizerStartEvent(sessionId, event.payload);
|
|
150
|
+
}
|
|
151
|
+
if (event.type === "chat_summarizer_end") {
|
|
152
|
+
yield createChatSummarizerEndEvent(sessionId, event.payload);
|
|
153
|
+
}
|
|
154
|
+
if (event.type === "question_generator_start") {
|
|
155
|
+
yield createQuestionGeneratorStartEvent(sessionId, event.payload);
|
|
156
|
+
}
|
|
157
|
+
if (event.type === "question_generator_end") {
|
|
158
|
+
yield createQuestionGeneratorEndEvent(sessionId, event.payload);
|
|
159
|
+
}
|
|
145
160
|
}
|
|
146
161
|
// ─────────────────────────────────────────────────────────────────
|
|
147
162
|
// UPDATES: final state from agentLoopNode
|
|
@@ -166,7 +181,7 @@ export class ChatStreamer {
|
|
|
166
181
|
if (debugMeta?.graph != null &&
|
|
167
182
|
typeof debugMeta.iterations === "number") {
|
|
168
183
|
const llmFallback = { calls: 0, totalDurationMs: 0, resets: [], hallucinations: [] };
|
|
169
|
-
yield createDebugMetaEvent(sessionId, debugMeta.graph, debugMeta.iterations, Array.isArray(debugMeta.tools) ? debugMeta.tools : [], debugMeta.llm ?? llmFallback, debugMeta.orchestratorNegotiations);
|
|
184
|
+
yield createDebugMetaEvent(sessionId, debugMeta.graph, debugMeta.iterations, Array.isArray(debugMeta.tools) ? debugMeta.tools : [], debugMeta.llm ?? llmFallback, debugMeta.orchestratorNegotiations, debugMeta.discoveryQuestions);
|
|
170
185
|
}
|
|
171
186
|
logger.verbose("Agent loop complete (updates)", {
|
|
172
187
|
responseLength: responseText.length,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chat.streamer.js","sourceRoot":"","sources":["../../src/chat/chat.streamer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAe,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAEhF,OAAO,EAAE,cAAc,EAAE,MAAM,4CAA4C,CAAC;
|
|
1
|
+
{"version":3,"file":"chat.streamer.js","sourceRoot":"","sources":["../../src/chat/chat.streamer.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -8,6 +8,8 @@ export type * from "./shared/interfaces/auth.interface.js";
|
|
|
8
8
|
export type * from "./shared/interfaces/cache.interface.js";
|
|
9
9
|
export type * from "./shared/interfaces/chat-session.interface.js";
|
|
10
10
|
export type { ChatSummaryReader } from "./shared/interfaces/chat-summary.interface.js";
|
|
11
|
+
export type { ChatMessageWriter } from "./shared/interfaces/chat-message-writer.interface.js";
|
|
12
|
+
export type { QuestionGeneratorReader } from "./shared/interfaces/question-generator.interface.js";
|
|
11
13
|
export type * from "./shared/interfaces/contact.interface.js";
|
|
12
14
|
export type * from "./shared/interfaces/database.interface.js";
|
|
13
15
|
export type * from "./shared/interfaces/embedder.interface.js";
|
|
@@ -73,6 +75,9 @@ export { AMBIENT_PARK_WINDOW_MS } from './negotiation/negotiation.tools.js';
|
|
|
73
75
|
export { normalizeTelegramHandle } from './shared/utils/telegram-handle.js';
|
|
74
76
|
export { createMcpServer, computeAgentIndexScope } from "./mcp/mcp.server.js";
|
|
75
77
|
export type { ScopedDepsFactory } from "./mcp/mcp.server.js";
|
|
78
|
+
export { buildElicitationCreate, flattenChoice } from "./mcp/elicitation.builder.js";
|
|
79
|
+
export { dispatchElicitations } from "./mcp/elicitation.dispatcher.js";
|
|
80
|
+
export type { ElicitResultLike, ElicitInputFn, DispatchElicitationsParams } from "./mcp/elicitation.dispatcher.js";
|
|
76
81
|
export type { UserNegotiationContext, NegotiationTurn, NegotiationOutcome, SeedAssessment, NegotiationGraphLike, } from "./negotiation/negotiation.state.js";
|
|
77
82
|
export { ChatStreamer } from "./chat/chat.streamer.js";
|
|
78
83
|
export { ResponseStreamer } from "./shared/agent/response.streamer.js";
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AACjE,OAAO,EAAE,iBAAiB,EAAE,YAAY,EAAE,MAAM,gCAAgC,CAAC;AACjF,YAAY,EAAE,SAAS,EAAE,MAAM,gCAAgC,CAAC;AAChE,YAAY,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,gCAAgC,CAAC;AACjF,YAAY,EACV,WAAW,EACX,mBAAmB,EACnB,QAAQ,EACR,YAAY,EACZ,UAAU,EACV,iBAAiB,EACjB,YAAY,GACb,MAAM,gCAAgC,CAAC;AACxC,OAAO,EAAE,sBAAsB,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAC;AAI5F,mBAAmB,uCAAuC,CAAC;AAC3D,mBAAmB,wCAAwC,CAAC;AAC5D,mBAAmB,+CAA+C,CAAC;AACnE,YAAY,EAAE,iBAAiB,EAAE,MAAM,+CAA+C,CAAC;AACvF,YAAY,EAAE,iBAAiB,EAAE,MAAM,sDAAsD,CAAC;AAC9F,YAAY,EAAE,uBAAuB,EAAE,MAAM,qDAAqD,CAAC;AACnG,mBAAmB,0CAA0C,CAAC;AAC9D,mBAAmB,2CAA2C,CAAC;AAC/D,mBAAmB,2CAA2C,CAAC;AAC/D,mBAAmB,6CAA6C,CAAC;AACjE,mBAAmB,8CAA8C,CAAC;AAClE,mBAAmB,wCAAwC,CAAC;AAC5D,mBAAmB,0CAA0C,CAAC;AAC9D,mBAAmB,0CAA0C,CAAC;AAC9D,mBAAmB,kDAAkD,CAAC;AACtE,mBAAmB,+CAA+C,CAAC;AACnE,mBAAmB,qDAAqD,CAAC;AACzE,YAAY,EAAE,eAAe,EAAE,mBAAmB,EAAE,sBAAsB,EAAE,MAAM,mDAAmD,CAAC;AACtI,YAAY,EACV,WAAW,EACX,oBAAoB,EACpB,qBAAqB,EACrB,kBAAkB,EAClB,gBAAgB,EAChB,oBAAoB,EACpB,oBAAoB,EACpB,aAAa,GACd,MAAM,wCAAwC,CAAC;AAChD,OAAO,EAAE,gBAAgB,EAAE,MAAM,wCAAwC,CAAC;AAI1E,OAAO,EACL,uBAAuB,EACvB,KAAK,iBAAiB,GACvB,MAAM,yCAAyC,CAAC;AACjD,OAAO,EACL,oBAAoB,EACpB,cAAc,EACd,sBAAsB,EACtB,0BAA0B,EAC1B,+BAA+B,EAC/B,KAAK,QAAQ,EACb,KAAK,cAAc,EACnB,KAAK,gBAAgB,EACrB,KAAK,oBAAoB,EACzB,KAAK,yBAAyB,EAC9B,KAAK,wBAAwB,GAC9B,MAAM,qCAAqC,CAAC;AAI7C,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AACxD,OAAO,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAC;AACpE,OAAO,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AAC/D,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AACjE,OAAO,EAAE,6BAA6B,EAAE,MAAM,0CAA0C,CAAC;AACzF,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAC9D,OAAO,EAAE,yBAAyB,EAAE,MAAM,oCAAoC,CAAC;AAC/E,OAAO,EAAE,uBAAuB,EAAE,MAAM,oCAAoC,CAAC;AAC7E,YAAY,EACV,wBAAwB,EACxB,qBAAqB,EACrB,qBAAqB,GACtB,MAAM,oCAAoC,CAAC;AAC5C,OAAO,EAAE,uBAAuB,EAAE,6BAA6B,EAAE,mBAAmB,EAAE,MAAM,oCAAoC,CAAC;AACjI,OAAO,EAAE,uBAAuB,EAAE,MAAM,oCAAoC,CAAC;AAC7E,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AAIjE,OAAO,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAC;AACpE,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAC3D,YAAY,EAAE,mBAAmB,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAC5F,OAAO,EAAE,aAAa,EAAE,MAAM,iCAAiC,CAAC;AAChE,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAC/D,YAAY,EAAE,wBAAwB,EAAE,MAAM,0BAA0B,CAAC;AACzE,OAAO,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAC;AACrE,YAAY,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAC;AAC9E,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAC3D,OAAO,EAAE,YAAY,EAAE,MAAM,gCAAgC,CAAC;AAC9D,OAAO,EAAE,4BAA4B,EAAE,MAAM,oCAAoC,CAAC;AAClF,YAAY,EAAE,iBAAiB,EAAE,MAAM,oCAAoC,CAAC;AAC5E,OAAO,EAAE,eAAe,EAAE,MAAM,oCAAoC,CAAC;AACrE,YAAY,EAAE,qBAAqB,EAAE,MAAM,oCAAoC,CAAC;AAChF,OAAO,EAAE,oBAAoB,EAAE,MAAM,wCAAwC,CAAC;AAC9E,YAAY,EACV,cAAc,EACd,sCAAsC,GACvC,MAAM,wCAAwC,CAAC;AAChD,OAAO,EAAE,oBAAoB,EAAE,sBAAsB,EAAE,MAAM,wCAAwC,CAAC;AACtG,YAAY,EAAE,iBAAiB,EAAE,MAAM,wCAAwC,CAAC;AAChF,OAAO,EAAE,iBAAiB,EAAE,MAAM,qCAAqC,CAAC;AACxE,YAAY,EACV,sBAAsB,EACtB,oBAAoB,EACpB,gBAAgB,EAChB,aAAa,EACb,gBAAgB,EAChB,sBAAsB,EACtB,eAAe,GAChB,MAAM,kCAAkC,CAAC;AAI1C,OAAO,EACL,qBAAqB,EACrB,qBAAqB,EACrB,yBAAyB,EACzB,mBAAmB,EACnB,mBAAmB,EACnB,iBAAiB,GAClB,MAAM,oCAAoC,CAAC;AAC5C,OAAO,EAAE,qBAAqB,EAAE,MAAM,qCAAqC,CAAC;AAC5E,OAAO,EAAE,iBAAiB,EAAE,MAAM,mCAAmC,CAAC;AACtE,YAAY,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,mCAAmC,CAAC;AAC3F,OAAO,EACL,0BAA0B,EAC1B,4BAA4B,EAC5B,sBAAsB,EACtB,sBAAsB,EACtB,0BAA0B,EAC1B,2BAA2B,GAC5B,MAAM,yCAAyC,CAAC;AACjD,YAAY,EACV,2BAA2B,EAC3B,wBAAwB,EACxB,kBAAkB,GACnB,MAAM,yCAAyC,CAAC;AACjD,OAAO,EAAE,oBAAoB,EAAE,MAAM,sCAAsC,CAAC;AAC5E,OAAO,EAAE,kBAAkB,EAAE,MAAM,2CAA2C,CAAC;AAC/E,YAAY,EAAE,QAAQ,EAAE,MAAM,2CAA2C,CAAC;AAC1E,OAAO,EAAE,UAAU,EAAE,uBAAuB,EAAE,MAAM,2CAA2C,CAAC;AAChG,OAAO,EACL,4BAA4B,EAC5B,uBAAuB,EACvB,KAAK,kBAAkB,EACvB,KAAK,sBAAsB,GAC5B,MAAM,sCAAsC,CAAC;AAI9C,OAAO,EAAE,kBAAkB,EAAE,MAAM,iCAAiC,CAAC;AACrE,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,EAAE,sBAAsB,EAAE,MAAM,oCAAoC,CAAC;AAC5E,OAAO,EAAE,uBAAuB,EAAE,MAAM,mCAAmC,CAAC;AAI5E,OAAO,EAAE,eAAe,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAC;AAC9E,YAAY,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,EAAE,sBAAsB,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AACrF,OAAO,EAAE,oBAAoB,EAAE,MAAM,iCAAiC,CAAC;AACvE,YAAY,EAAE,gBAAgB,EAAE,aAAa,EAAE,0BAA0B,EAAE,MAAM,iCAAiC,CAAC;AAInH,YAAY,EACV,sBAAsB,EACtB,eAAe,EACf,kBAAkB,EAClB,cAAc,EACd,oBAAoB,GACrB,MAAM,oCAAoC,CAAC;AAI5C,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AACvD,OAAO,EAAE,gBAAgB,EAAE,MAAM,qCAAqC,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -47,6 +47,8 @@ export { AMBIENT_PARK_WINDOW_MS } from './negotiation/negotiation.tools.js';
|
|
|
47
47
|
export { normalizeTelegramHandle } from './shared/utils/telegram-handle.js';
|
|
48
48
|
// ─── MCP ──────────────────────────────────────────────────────────────────────
|
|
49
49
|
export { createMcpServer, computeAgentIndexScope } from "./mcp/mcp.server.js";
|
|
50
|
+
export { buildElicitationCreate, flattenChoice } from "./mcp/elicitation.builder.js";
|
|
51
|
+
export { dispatchElicitations } from "./mcp/elicitation.dispatcher.js";
|
|
50
52
|
// ─── Streamers ────────────────────────────────────────────────────────────────
|
|
51
53
|
export { ChatStreamer } from "./chat/chat.streamer.js";
|
|
52
54
|
export { ResponseStreamer } from "./shared/agent/response.streamer.js";
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,iFAAiF;AAEjF,OAAO,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AACjE,OAAO,EAAE,iBAAiB,EAAE,YAAY,EAAE,MAAM,gCAAgC,CAAC;AAYjF,OAAO,EAAE,sBAAsB,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import type { Question } from "../shared/schemas/question.schema.js";
|
|
2
|
+
type SingleChoiceSchema = {
|
|
3
|
+
type: "string";
|
|
4
|
+
enum: string[];
|
|
5
|
+
description: string;
|
|
6
|
+
};
|
|
7
|
+
type MultiChoiceSchema = {
|
|
8
|
+
type: "array";
|
|
9
|
+
items: {
|
|
10
|
+
type: "string";
|
|
11
|
+
enum: string[];
|
|
12
|
+
};
|
|
13
|
+
description: string;
|
|
14
|
+
};
|
|
15
|
+
type ChoiceSchema = SingleChoiceSchema | MultiChoiceSchema;
|
|
16
|
+
/**
|
|
17
|
+
* Translates a Question into an MCP `elicitation/create` request payload.
|
|
18
|
+
* The schema has one property named `choice` — a string-with-enum for
|
|
19
|
+
* single-select, an array-of-enum-strings for multi-select.
|
|
20
|
+
*
|
|
21
|
+
* Per-option `description` text is packed into the property `description`
|
|
22
|
+
* joined by ` | ` (MCP `requestedSchema` has no slot for per-option
|
|
23
|
+
* descriptions; this is the spec's accepted lossy mapping).
|
|
24
|
+
*
|
|
25
|
+
* @param q - The question to translate.
|
|
26
|
+
* @returns An MCP `elicitation/create` request payload.
|
|
27
|
+
*/
|
|
28
|
+
export declare function buildElicitationCreate(q: Question): {
|
|
29
|
+
message: string;
|
|
30
|
+
requestedSchema: {
|
|
31
|
+
type: "object";
|
|
32
|
+
properties: {
|
|
33
|
+
choice: ChoiceSchema;
|
|
34
|
+
};
|
|
35
|
+
required: ["choice"];
|
|
36
|
+
};
|
|
37
|
+
};
|
|
38
|
+
/**
|
|
39
|
+
* Flattens an accepted elicitation `choice` value into the user-message
|
|
40
|
+
* format Slice 4 produces. Returns `null` when the choice is missing,
|
|
41
|
+
* empty, or contains no values that match `q.options` — MCP clients can
|
|
42
|
+
* be buggy or non-conformant, so values are validated against the
|
|
43
|
+
* declared enum before being persisted as a user message.
|
|
44
|
+
*
|
|
45
|
+
* For multi-select questions, items that are not strings or not in the
|
|
46
|
+
* options list are dropped silently; if no items remain, returns null.
|
|
47
|
+
*
|
|
48
|
+
* @param q - The question the choice answers.
|
|
49
|
+
* @param choice - The raw value from the elicitation response.
|
|
50
|
+
* @returns A formatted string or `null` if no valid choice remains.
|
|
51
|
+
*/
|
|
52
|
+
export declare function flattenChoice(q: Question, choice: unknown): string | null;
|
|
53
|
+
export {};
|
|
54
|
+
//# sourceMappingURL=elicitation.builder.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"elicitation.builder.d.ts","sourceRoot":"","sources":["../../src/mcp/elicitation.builder.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,sCAAsC,CAAC;AAErE,KAAK,kBAAkB,GAAG;IACxB,IAAI,EAAE,QAAQ,CAAC;IACf,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;CACrB,CAAC;AAEF,KAAK,iBAAiB,GAAG;IACvB,IAAI,EAAE,OAAO,CAAC;IACd,KAAK,EAAE;QAAE,IAAI,EAAE,QAAQ,CAAC;QAAC,IAAI,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC;IAC1C,WAAW,EAAE,MAAM,CAAC;CACrB,CAAC;AAEF,KAAK,YAAY,GAAG,kBAAkB,GAAG,iBAAiB,CAAC;AAE3D;;;;;;;;;;;GAWG;AACH,wBAAgB,sBAAsB,CAAC,CAAC,EAAE,QAAQ,GAAG;IACnD,OAAO,EAAE,MAAM,CAAC;IAChB,eAAe,EAAE;QACf,IAAI,EAAE,QAAQ,CAAC;QACf,UAAU,EAAE;YAAE,MAAM,EAAE,YAAY,CAAA;SAAE,CAAC;QACrC,QAAQ,EAAE,CAAC,QAAQ,CAAC,CAAC;KACtB,CAAC;CACH,CA2BA;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,aAAa,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,GAAG,MAAM,GAAG,IAAI,CAsBzE"}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Translates a Question into an MCP `elicitation/create` request payload.
|
|
3
|
+
* The schema has one property named `choice` — a string-with-enum for
|
|
4
|
+
* single-select, an array-of-enum-strings for multi-select.
|
|
5
|
+
*
|
|
6
|
+
* Per-option `description` text is packed into the property `description`
|
|
7
|
+
* joined by ` | ` (MCP `requestedSchema` has no slot for per-option
|
|
8
|
+
* descriptions; this is the spec's accepted lossy mapping).
|
|
9
|
+
*
|
|
10
|
+
* @param q - The question to translate.
|
|
11
|
+
* @returns An MCP `elicitation/create` request payload.
|
|
12
|
+
*/
|
|
13
|
+
export function buildElicitationCreate(q) {
|
|
14
|
+
const propertyDescription = q.options
|
|
15
|
+
.map((opt) => `${opt.label}: ${opt.description}`)
|
|
16
|
+
.join(" | ");
|
|
17
|
+
const labels = q.options.map((o) => o.label);
|
|
18
|
+
const choiceSchema = q.multiSelect
|
|
19
|
+
? {
|
|
20
|
+
type: "array",
|
|
21
|
+
items: { type: "string", enum: labels },
|
|
22
|
+
description: propertyDescription,
|
|
23
|
+
}
|
|
24
|
+
: {
|
|
25
|
+
type: "string",
|
|
26
|
+
enum: labels,
|
|
27
|
+
description: propertyDescription,
|
|
28
|
+
};
|
|
29
|
+
return {
|
|
30
|
+
message: `${q.title}: ${q.prompt}`,
|
|
31
|
+
requestedSchema: {
|
|
32
|
+
type: "object",
|
|
33
|
+
properties: { choice: choiceSchema },
|
|
34
|
+
required: ["choice"],
|
|
35
|
+
},
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Flattens an accepted elicitation `choice` value into the user-message
|
|
40
|
+
* format Slice 4 produces. Returns `null` when the choice is missing,
|
|
41
|
+
* empty, or contains no values that match `q.options` — MCP clients can
|
|
42
|
+
* be buggy or non-conformant, so values are validated against the
|
|
43
|
+
* declared enum before being persisted as a user message.
|
|
44
|
+
*
|
|
45
|
+
* For multi-select questions, items that are not strings or not in the
|
|
46
|
+
* options list are dropped silently; if no items remain, returns null.
|
|
47
|
+
*
|
|
48
|
+
* @param q - The question the choice answers.
|
|
49
|
+
* @param choice - The raw value from the elicitation response.
|
|
50
|
+
* @returns A formatted string or `null` if no valid choice remains.
|
|
51
|
+
*/
|
|
52
|
+
export function flattenChoice(q, choice) {
|
|
53
|
+
const prefix = `${q.title} (${q.prompt})`;
|
|
54
|
+
const allowedLabels = new Set(q.options.map((o) => o.label));
|
|
55
|
+
if (Array.isArray(choice)) {
|
|
56
|
+
// Only multi-select questions accept arrays. A single-select question
|
|
57
|
+
// receiving an array means a non-conformant client — reject the response
|
|
58
|
+
// rather than recording an impossible multi-answer.
|
|
59
|
+
if (!q.multiSelect)
|
|
60
|
+
return null;
|
|
61
|
+
const validItems = choice.filter((c) => typeof c === "string" && allowedLabels.has(c));
|
|
62
|
+
if (validItems.length === 0)
|
|
63
|
+
return null;
|
|
64
|
+
return `${prefix}: ${validItems.join(", ")}`;
|
|
65
|
+
}
|
|
66
|
+
if (typeof choice === "string" && allowedLabels.has(choice)) {
|
|
67
|
+
// Symmetric guard: multi-select questions must receive arrays. A bare
|
|
68
|
+
// string here means a non-conformant client; reject for the same reason.
|
|
69
|
+
if (q.multiSelect)
|
|
70
|
+
return null;
|
|
71
|
+
return `${prefix}: ${choice}`;
|
|
72
|
+
}
|
|
73
|
+
return null;
|
|
74
|
+
}
|
|
75
|
+
//# sourceMappingURL=elicitation.builder.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"elicitation.builder.js","sourceRoot":"","sources":["../../src/mcp/elicitation.builder.ts"],"names":[],"mappings":"AAgBA;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,sBAAsB,CAAC,CAAW;IAQhD,MAAM,mBAAmB,GAAG,CAAC,CAAC,OAAO;SAClC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,KAAK,KAAK,GAAG,CAAC,WAAW,EAAE,CAAC;SAChD,IAAI,CAAC,KAAK,CAAC,CAAC;IAEf,MAAM,MAAM,GAAG,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;IAE7C,MAAM,YAAY,GAAiB,CAAC,CAAC,WAAW;QAC9C,CAAC,CAAC;YACE,IAAI,EAAE,OAAO;YACb,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE;YACvC,WAAW,EAAE,mBAAmB;SACjC;QACH,CAAC,CAAC;YACE,IAAI,EAAE,QAAQ;YACd,IAAI,EAAE,MAAM;YACZ,WAAW,EAAE,mBAAmB;SACjC,CAAC;IAEN,OAAO;QACL,OAAO,EAAE,GAAG,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,MAAM,EAAE;QAClC,eAAe,EAAE;YACf,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE,EAAE,MAAM,EAAE,YAAY,EAAE;YACpC,QAAQ,EAAE,CAAC,QAAQ,CAAC;SACrB;KACF,CAAC;AACJ,CAAC;AAED;;;;;;;;;;;;;GAaG;AACH,MAAM,UAAU,aAAa,CAAC,CAAW,EAAE,MAAe;IACxD,MAAM,MAAM,GAAG,GAAG,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,MAAM,GAAG,CAAC;IAC1C,MAAM,aAAa,GAAG,IAAI,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;IAE7D,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;QAC1B,sEAAsE;QACtE,yEAAyE;QACzE,oDAAoD;QACpD,IAAI,CAAC,CAAC,CAAC,WAAW;YAAE,OAAO,IAAI,CAAC;QAChC,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,CAC9B,CAAC,CAAC,EAAe,EAAE,CAAC,OAAO,CAAC,KAAK,QAAQ,IAAI,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,CAClE,CAAC;QACF,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,IAAI,CAAC;QACzC,OAAO,GAAG,MAAM,KAAK,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;IAC/C,CAAC;IACD,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,aAAa,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;QAC5D,sEAAsE;QACtE,yEAAyE;QACzE,IAAI,CAAC,CAAC,WAAW;YAAE,OAAO,IAAI,CAAC;QAC/B,OAAO,GAAG,MAAM,KAAK,MAAM,EAAE,CAAC;IAChC,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import type { Question } from "../shared/schemas/question.schema.js";
|
|
2
|
+
import type { ChatMessageWriter } from "../shared/interfaces/chat-message-writer.interface.js";
|
|
3
|
+
import { buildElicitationCreate } from "./elicitation.builder.js";
|
|
4
|
+
export type ElicitResultLike = {
|
|
5
|
+
action: "accept";
|
|
6
|
+
content?: {
|
|
7
|
+
choice?: unknown;
|
|
8
|
+
};
|
|
9
|
+
} | {
|
|
10
|
+
action: "decline";
|
|
11
|
+
} | {
|
|
12
|
+
action: "cancel";
|
|
13
|
+
};
|
|
14
|
+
export type ElicitInputFn = (params: ReturnType<typeof buildElicitationCreate>) => Promise<ElicitResultLike>;
|
|
15
|
+
export interface DispatchElicitationsParams {
|
|
16
|
+
userId: string;
|
|
17
|
+
questions: Question[];
|
|
18
|
+
elicitInput: ElicitInputFn;
|
|
19
|
+
/**
|
|
20
|
+
* Optional. When absent, elicitations still dispatch (so users aren't
|
|
21
|
+
* left mid-flow on a misconfiguration), but accepted answers are dropped
|
|
22
|
+
* with a one-shot warn. See dispatcher body.
|
|
23
|
+
*/
|
|
24
|
+
chatMessageWriter?: ChatMessageWriter;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Sequentially dispatches one `elicitation/create` per question. On accept,
|
|
28
|
+
* flattens the choice and posts it via the ChatMessageWriter. `cancel` breaks
|
|
29
|
+
* the loop; `decline` is a no-op. A transport throw breaks the loop with a
|
|
30
|
+
* warning. An addUserMessage throw logs and continues (doesn't halt the loop).
|
|
31
|
+
* Empty `questions` is a no-op.
|
|
32
|
+
*
|
|
33
|
+
* Caller is responsible for the capability check — this function only knows
|
|
34
|
+
* how to dispatch.
|
|
35
|
+
*/
|
|
36
|
+
export declare function dispatchElicitations({ userId, questions, elicitInput, chatMessageWriter, }: DispatchElicitationsParams): Promise<void>;
|
|
37
|
+
//# sourceMappingURL=elicitation.dispatcher.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"elicitation.dispatcher.d.ts","sourceRoot":"","sources":["../../src/mcp/elicitation.dispatcher.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,sCAAsC,CAAC;AACrE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,uDAAuD,CAAC;AAE/F,OAAO,EAAE,sBAAsB,EAAiB,MAAM,0BAA0B,CAAC;AAIjF,MAAM,MAAM,gBAAgB,GACxB;IAAE,MAAM,EAAE,QAAQ,CAAC;IAAC,OAAO,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,OAAO,CAAA;KAAE,CAAA;CAAE,GACpD;IAAE,MAAM,EAAE,SAAS,CAAA;CAAE,GACrB;IAAE,MAAM,EAAE,QAAQ,CAAA;CAAE,CAAC;AAEzB,MAAM,MAAM,aAAa,GAAG,CAC1B,MAAM,EAAE,UAAU,CAAC,OAAO,sBAAsB,CAAC,KAC9C,OAAO,CAAC,gBAAgB,CAAC,CAAC;AAE/B,MAAM,WAAW,0BAA0B;IACzC,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,QAAQ,EAAE,CAAC;IACtB,WAAW,EAAE,aAAa,CAAC;IAC3B;;;;OAIG;IACH,iBAAiB,CAAC,EAAE,iBAAiB,CAAC;CACvC;AASD;;;;;;;;;GASG;AACH,wBAAsB,oBAAoB,CAAC,EACzC,MAAM,EACN,SAAS,EACT,WAAW,EACX,iBAAiB,GAClB,EAAE,0BAA0B,GAAG,OAAO,CAAC,IAAI,CAAC,CAgE5C"}
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
import { protocolLogger } from "../shared/observability/protocol.logger.js";
|
|
2
|
+
import { buildElicitationCreate, flattenChoice } from "./elicitation.builder.js";
|
|
3
|
+
const logger = protocolLogger("McpElicitation");
|
|
4
|
+
/** Narrowing guard for elicitation replies received from MCP clients. */
|
|
5
|
+
function isElicitResult(value) {
|
|
6
|
+
if (typeof value !== "object" || value === null)
|
|
7
|
+
return false;
|
|
8
|
+
const action = value.action;
|
|
9
|
+
return action === "accept" || action === "decline" || action === "cancel";
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Sequentially dispatches one `elicitation/create` per question. On accept,
|
|
13
|
+
* flattens the choice and posts it via the ChatMessageWriter. `cancel` breaks
|
|
14
|
+
* the loop; `decline` is a no-op. A transport throw breaks the loop with a
|
|
15
|
+
* warning. An addUserMessage throw logs and continues (doesn't halt the loop).
|
|
16
|
+
* Empty `questions` is a no-op.
|
|
17
|
+
*
|
|
18
|
+
* Caller is responsible for the capability check — this function only knows
|
|
19
|
+
* how to dispatch.
|
|
20
|
+
*/
|
|
21
|
+
export async function dispatchElicitations({ userId, questions, elicitInput, chatMessageWriter, }) {
|
|
22
|
+
if (questions.length === 0)
|
|
23
|
+
return;
|
|
24
|
+
if (!chatMessageWriter) {
|
|
25
|
+
// Misconfiguration: composition root forgot to wire the writer. We still
|
|
26
|
+
// proceed with elicitations so the user isn't silently left hanging, but
|
|
27
|
+
// surface the gap once at loop start so it's visible in protocol logs.
|
|
28
|
+
logger.warn("chat_message_writer_absent_responses_will_drop", {
|
|
29
|
+
userId,
|
|
30
|
+
questionCount: questions.length,
|
|
31
|
+
});
|
|
32
|
+
}
|
|
33
|
+
for (const question of questions) {
|
|
34
|
+
const elicitation = buildElicitationCreate(question);
|
|
35
|
+
let rawReply;
|
|
36
|
+
try {
|
|
37
|
+
rawReply = await elicitInput(elicitation);
|
|
38
|
+
}
|
|
39
|
+
catch (err) {
|
|
40
|
+
logger.warn("elicitation_failed", {
|
|
41
|
+
title: question.title,
|
|
42
|
+
error: err instanceof Error ? err.message : String(err),
|
|
43
|
+
});
|
|
44
|
+
break;
|
|
45
|
+
}
|
|
46
|
+
// The reply is runtime data from the MCP client — validate the shape
|
|
47
|
+
// before branching. A malformed reply (null, missing action, unknown
|
|
48
|
+
// action) is treated as a no-op so we don't persist anything unsafe.
|
|
49
|
+
if (!isElicitResult(rawReply)) {
|
|
50
|
+
logger.warn("elicitation_response_malformed", { title: question.title });
|
|
51
|
+
continue;
|
|
52
|
+
}
|
|
53
|
+
const reply = rawReply;
|
|
54
|
+
if (reply.action === "cancel")
|
|
55
|
+
break;
|
|
56
|
+
// Require an explicit `accept` — `decline` and any future / unknown
|
|
57
|
+
// action both fall through to no-op rather than being treated as
|
|
58
|
+
// accepted responses.
|
|
59
|
+
if (reply.action !== "accept")
|
|
60
|
+
continue;
|
|
61
|
+
const flat = flattenChoice(question, reply.content?.choice);
|
|
62
|
+
if (flat === null)
|
|
63
|
+
continue;
|
|
64
|
+
if (!chatMessageWriter)
|
|
65
|
+
continue;
|
|
66
|
+
try {
|
|
67
|
+
const writeResult = await chatMessageWriter.addUserMessage(userId, flat);
|
|
68
|
+
if (writeResult === null) {
|
|
69
|
+
// User has no chat session — the accepted answer is dropped here.
|
|
70
|
+
// Day-one behavior: log and continue. Future iterations may surface
|
|
71
|
+
// the answer back through the tool result envelope for clients to
|
|
72
|
+
// resurface, but that's out of scope for this slice.
|
|
73
|
+
logger.warn("chat_message_write_skipped_no_session", {
|
|
74
|
+
userId,
|
|
75
|
+
title: question.title,
|
|
76
|
+
});
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
catch (err) {
|
|
80
|
+
logger.warn("chat_message_write_failed", {
|
|
81
|
+
title: question.title,
|
|
82
|
+
error: err instanceof Error ? err.message : String(err),
|
|
83
|
+
});
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
//# sourceMappingURL=elicitation.dispatcher.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"elicitation.dispatcher.js","sourceRoot":"","sources":["../../src/mcp/elicitation.dispatcher.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,cAAc,EAAE,MAAM,4CAA4C,CAAC;AAC5E,OAAO,EAAE,sBAAsB,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAEjF,MAAM,MAAM,GAAG,cAAc,CAAC,gBAAgB,CAAC,CAAC;AAuBhD,yEAAyE;AACzE,SAAS,cAAc,CAAC,KAAc;IACpC,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI;QAAE,OAAO,KAAK,CAAC;IAC9D,MAAM,MAAM,GAAI,KAA8B,CAAC,MAAM,CAAC;IACtD,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,SAAS,IAAI,MAAM,KAAK,QAAQ,CAAC;AAC5E,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,CAAC,KAAK,UAAU,oBAAoB,CAAC,EACzC,MAAM,EACN,SAAS,EACT,WAAW,EACX,iBAAiB,GACU;IAC3B,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO;IAEnC,IAAI,CAAC,iBAAiB,EAAE,CAAC;QACvB,yEAAyE;QACzE,yEAAyE;QACzE,uEAAuE;QACvE,MAAM,CAAC,IAAI,CAAC,gDAAgD,EAAE;YAC5D,MAAM;YACN,aAAa,EAAE,SAAS,CAAC,MAAM;SAChC,CAAC,CAAC;IACL,CAAC;IAED,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;QACjC,MAAM,WAAW,GAAG,sBAAsB,CAAC,QAAQ,CAAC,CAAC;QACrD,IAAI,QAAiB,CAAC;QACtB,IAAI,CAAC;YACH,QAAQ,GAAG,MAAM,WAAW,CAAC,WAAW,CAAC,CAAC;QAC5C,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,CAAC,IAAI,CAAC,oBAAoB,EAAE;gBAChC,KAAK,EAAE,QAAQ,CAAC,KAAK;gBACrB,KAAK,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC;aACxD,CAAC,CAAC;YACH,MAAM;QACR,CAAC;QAED,qEAAqE;QACrE,qEAAqE;QACrE,qEAAqE;QACrE,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC9B,MAAM,CAAC,IAAI,CAAC,gCAAgC,EAAE,EAAE,KAAK,EAAE,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAC;YACzE,SAAS;QACX,CAAC;QACD,MAAM,KAAK,GAAG,QAAQ,CAAC;QAEvB,IAAI,KAAK,CAAC,MAAM,KAAK,QAAQ;YAAE,MAAM;QACrC,oEAAoE;QACpE,iEAAiE;QACjE,sBAAsB;QACtB,IAAI,KAAK,CAAC,MAAM,KAAK,QAAQ;YAAE,SAAS;QAExC,MAAM,IAAI,GAAG,aAAa,CAAC,QAAQ,EAAE,KAAK,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QAC5D,IAAI,IAAI,KAAK,IAAI;YAAE,SAAS;QAC5B,IAAI,CAAC,iBAAiB;YAAE,SAAS;QAEjC,IAAI,CAAC;YACH,MAAM,WAAW,GAAG,MAAM,iBAAiB,CAAC,cAAc,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;YACzE,IAAI,WAAW,KAAK,IAAI,EAAE,CAAC;gBACzB,kEAAkE;gBAClE,oEAAoE;gBACpE,kEAAkE;gBAClE,qDAAqD;gBACrD,MAAM,CAAC,IAAI,CAAC,uCAAuC,EAAE;oBACnD,MAAM;oBACN,KAAK,EAAE,QAAQ,CAAC,KAAK;iBACtB,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,CAAC,IAAI,CAAC,2BAA2B,EAAE;gBACvC,KAAK,EAAE,QAAQ,CAAC,KAAK;gBACrB,KAAK,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC;aACxD,CAAC,CAAC;QACL,CAAC;IACH,CAAC;AACH,CAAC"}
|
package/dist/mcp/mcp.server.d.ts
CHANGED
|
@@ -7,6 +7,7 @@
|
|
|
7
7
|
import { McpServer } from '@modelcontextprotocol/server';
|
|
8
8
|
import type { McpAuthResolver } from '../shared/interfaces/auth.interface.js';
|
|
9
9
|
import type { ToolDeps, ResolvedToolContext } from '../shared/agent/tool.helpers.js';
|
|
10
|
+
import type { Question } from '../shared/schemas/question.schema.js';
|
|
10
11
|
/**
|
|
11
12
|
* Strips internal `_`-prefixed keys from `data` and promotes `isError`
|
|
12
13
|
* from the inner `success: false` signal to the MCP envelope level.
|
|
@@ -16,6 +17,23 @@ export declare function sanitizeMcpResult(text: string): {
|
|
|
16
17
|
text: string;
|
|
17
18
|
isError: boolean;
|
|
18
19
|
};
|
|
20
|
+
/**
|
|
21
|
+
* Extracts decision questions from a parsed tool-result text, if present.
|
|
22
|
+
* Validates each entry against `QuestionSchema` and drops malformed items;
|
|
23
|
+
* caps the array at `MAX_DECISION_QUESTIONS` (defense-in-depth — Slice 2's
|
|
24
|
+
* generator already caps at 3, but we don't trust the cast here).
|
|
25
|
+
*
|
|
26
|
+
* Returns null when the text isn't JSON, has no `data.questions`, or
|
|
27
|
+
* contains zero valid questions after validation.
|
|
28
|
+
*/
|
|
29
|
+
export declare function extractDecisionQuestions(text: string): Question[] | null;
|
|
30
|
+
/**
|
|
31
|
+
* Renders the JSON-envelope text block appended to the tool result content
|
|
32
|
+
* when decision questions are present. The leading sentinel string lets the
|
|
33
|
+
* LLM client recognize and surface the questions in prose for clients
|
|
34
|
+
* without elicitation support.
|
|
35
|
+
*/
|
|
36
|
+
export declare function renderQuestionsEnvelope(questions: Question[]): string;
|
|
19
37
|
/**
|
|
20
38
|
* Factory for creating per-request scoped database instances.
|
|
21
39
|
* Injected from the controller/handler layer to keep the protocol layer
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mcp.server.d.ts","sourceRoot":"","sources":["../../src/mcp/mcp.server.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EAAE,SAAS,EAAkB,MAAM,8BAA8B,CAAC;AAGzE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wCAAwC,CAAC;AAC9E,OAAO,KAAK,EAAE,QAAQ,EAAE,mBAAmB,EAAE,MAAM,iCAAiC,CAAC;
|
|
1
|
+
{"version":3,"file":"mcp.server.d.ts","sourceRoot":"","sources":["../../src/mcp/mcp.server.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EAAE,SAAS,EAAkB,MAAM,8BAA8B,CAAC;AAGzE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wCAAwC,CAAC;AAC9E,OAAO,KAAK,EAAE,QAAQ,EAAE,mBAAmB,EAAE,MAAM,iCAAiC,CAAC;AAErF,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,sCAAsC,CAAC;AAoFrE;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,OAAO,CAAA;CAAE,CAqBlF;AAKD;;;;;;;;GAQG;AACH,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,MAAM,GAAG,QAAQ,EAAE,GAAG,IAAI,CAkBxE;AAED;;;;;GAKG;AACH,wBAAgB,uBAAuB,CAAC,SAAS,EAAE,QAAQ,EAAE,GAAG,MAAM,CAErE;AAMD;;;;GAIG;AACH,MAAM,WAAW,iBAAiB;IAChC,6EAA6E;IAC7E,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC,QAAQ,EAAE,QAAQ,GAAG,UAAU,CAAC,CAAC;CACrF;AAED;;;;;GAKG;AACH,eAAO,MAAM,sBAAsB,GACjC,cAAc;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,UAAU,CAAC,EAAE,OAAO,GAAG,IAAI,CAAA;CAAE,EAAE,EAClE,gBAAgB,MAAM,GAAG,IAAI,GAAG,SAAS,KACxC,MAAM,EAOR,CAAC;AAEF;;;;;;;;;;;;;GAaG;AACH,eAAO,MAAM,0BAA0B,GACrC,SAAS,mBAAmB,EAC5B,gBAAgB,MAAM,GAAG,IAAI,GAAG,SAAS,KACxC,IAiBF,CAAC;AAEF;;;;;;;;GAQG;AACH,eAAO,MAAM,gBAAgB,QA0CrB,CAAC;AAET,wBAAgB,eAAe,CAC7B,IAAI,EAAE,QAAQ,EACd,YAAY,EAAE,eAAe,EAC7B,iBAAiB,EAAE,iBAAiB,GACnC,SAAS,CAwKX"}
|
package/dist/mcp/mcp.server.js
CHANGED
|
@@ -7,6 +7,8 @@
|
|
|
7
7
|
import { z } from 'zod';
|
|
8
8
|
import { McpServer, fromJsonSchema } from '@modelcontextprotocol/server';
|
|
9
9
|
import { resolveChatContext } from '../shared/agent/tool.helpers.js';
|
|
10
|
+
import { QuestionSchema } from '../shared/schemas/question.schema.js';
|
|
11
|
+
import { dispatchElicitations } from './elicitation.dispatcher.js';
|
|
10
12
|
import { createToolRegistry } from '../shared/agent/tool.registry.js';
|
|
11
13
|
import { protocolLogger } from '../shared/observability/protocol.logger.js';
|
|
12
14
|
const logger = protocolLogger('McpServer');
|
|
@@ -117,6 +119,47 @@ export function sanitizeMcpResult(text) {
|
|
|
117
119
|
return { text, isError: false };
|
|
118
120
|
}
|
|
119
121
|
}
|
|
122
|
+
/** Spec cap on the number of decision questions surfaced per turn. */
|
|
123
|
+
const MAX_DECISION_QUESTIONS = 3;
|
|
124
|
+
/**
|
|
125
|
+
* Extracts decision questions from a parsed tool-result text, if present.
|
|
126
|
+
* Validates each entry against `QuestionSchema` and drops malformed items;
|
|
127
|
+
* caps the array at `MAX_DECISION_QUESTIONS` (defense-in-depth — Slice 2's
|
|
128
|
+
* generator already caps at 3, but we don't trust the cast here).
|
|
129
|
+
*
|
|
130
|
+
* Returns null when the text isn't JSON, has no `data.questions`, or
|
|
131
|
+
* contains zero valid questions after validation.
|
|
132
|
+
*/
|
|
133
|
+
export function extractDecisionQuestions(text) {
|
|
134
|
+
let parsed;
|
|
135
|
+
try {
|
|
136
|
+
parsed = JSON.parse(text);
|
|
137
|
+
}
|
|
138
|
+
catch {
|
|
139
|
+
return null;
|
|
140
|
+
}
|
|
141
|
+
const rawQs = parsed?.data?.questions;
|
|
142
|
+
if (!Array.isArray(rawQs) || rawQs.length === 0)
|
|
143
|
+
return null;
|
|
144
|
+
const valid = [];
|
|
145
|
+
for (const raw of rawQs) {
|
|
146
|
+
const result = QuestionSchema.safeParse(raw);
|
|
147
|
+
if (result.success)
|
|
148
|
+
valid.push(result.data);
|
|
149
|
+
if (valid.length === MAX_DECISION_QUESTIONS)
|
|
150
|
+
break;
|
|
151
|
+
}
|
|
152
|
+
return valid.length > 0 ? valid : null;
|
|
153
|
+
}
|
|
154
|
+
/**
|
|
155
|
+
* Renders the JSON-envelope text block appended to the tool result content
|
|
156
|
+
* when decision questions are present. The leading sentinel string lets the
|
|
157
|
+
* LLM client recognize and surface the questions in prose for clients
|
|
158
|
+
* without elicitation support.
|
|
159
|
+
*/
|
|
160
|
+
export function renderQuestionsEnvelope(questions) {
|
|
161
|
+
return `Decision questions (structured): ${JSON.stringify({ questions })}`;
|
|
162
|
+
}
|
|
120
163
|
/**
|
|
121
164
|
* Computes the index scope passed to the per-request scoped DB factory. When
|
|
122
165
|
* `networkScopeId` is non-null, the agent is bound to a single network and
|
|
@@ -304,6 +347,39 @@ export function createMcpServer(deps, authResolver, scopedDepsFactory) {
|
|
|
304
347
|
// Execute the tool handler
|
|
305
348
|
const result = await requestTool.handler({ context, query: validatedArgs });
|
|
306
349
|
const { text: sanitizedText, isError: toolIsError } = sanitizeMcpResult(result);
|
|
350
|
+
// Slice 5: decision questions post-processing for discover_opportunities only.
|
|
351
|
+
if (toolName === "discover_opportunities" && !toolIsError) {
|
|
352
|
+
const questions = extractDecisionQuestions(sanitizedText);
|
|
353
|
+
if (questions) {
|
|
354
|
+
const envelopeBlock = {
|
|
355
|
+
type: "text",
|
|
356
|
+
text: renderQuestionsEnvelope(questions),
|
|
357
|
+
};
|
|
358
|
+
const supportsElicitation = !!server.server.getClientCapabilities()?.elicitation;
|
|
359
|
+
// Capture into a local const so TS preserves the narrowing
|
|
360
|
+
// inside the callback below. Optional chains don't survive
|
|
361
|
+
// across closure boundaries under strict mode.
|
|
362
|
+
const elicitInput = ctx.mcpReq?.elicitInput;
|
|
363
|
+
if (supportsElicitation && elicitInput) {
|
|
364
|
+
// Sequential — never parallel (day-one rule). We await the loop
|
|
365
|
+
// before returning the tool result so test harnesses can observe
|
|
366
|
+
// the dispatched calls deterministically.
|
|
367
|
+
await dispatchElicitations({
|
|
368
|
+
userId,
|
|
369
|
+
questions,
|
|
370
|
+
elicitInput: (params) => elicitInput(params),
|
|
371
|
+
chatMessageWriter: deps.chatMessageWriter,
|
|
372
|
+
});
|
|
373
|
+
}
|
|
374
|
+
return {
|
|
375
|
+
content: [
|
|
376
|
+
{ type: "text", text: sanitizedText },
|
|
377
|
+
envelopeBlock,
|
|
378
|
+
],
|
|
379
|
+
...(toolIsError ? { isError: true } : {}),
|
|
380
|
+
};
|
|
381
|
+
}
|
|
382
|
+
}
|
|
307
383
|
return {
|
|
308
384
|
content: [{ type: 'text', text: sanitizedText }],
|
|
309
385
|
...(toolIsError ? { isError: true } : {}),
|