@zerobuild/mcp 2.6.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 (50) hide show
  1. package/README.md +114 -0
  2. package/dist/client.d.ts +79 -0
  3. package/dist/client.d.ts.map +1 -0
  4. package/dist/client.js +137 -0
  5. package/dist/client.js.map +1 -0
  6. package/dist/index.d.ts +3 -0
  7. package/dist/index.d.ts.map +1 -0
  8. package/dist/index.js +171 -0
  9. package/dist/index.js.map +1 -0
  10. package/dist/prompts/index.d.ts +4 -0
  11. package/dist/prompts/index.d.ts.map +1 -0
  12. package/dist/prompts/index.js +164 -0
  13. package/dist/prompts/index.js.map +1 -0
  14. package/dist/resources/channels.d.ts +4 -0
  15. package/dist/resources/channels.d.ts.map +1 -0
  16. package/dist/resources/channels.js +58 -0
  17. package/dist/resources/channels.js.map +1 -0
  18. package/dist/resources/contacts.d.ts +4 -0
  19. package/dist/resources/contacts.d.ts.map +1 -0
  20. package/dist/resources/contacts.js +73 -0
  21. package/dist/resources/contacts.js.map +1 -0
  22. package/dist/resources/conversations.d.ts +4 -0
  23. package/dist/resources/conversations.d.ts.map +1 -0
  24. package/dist/resources/conversations.js +97 -0
  25. package/dist/resources/conversations.js.map +1 -0
  26. package/dist/resources/documents.d.ts +4 -0
  27. package/dist/resources/documents.d.ts.map +1 -0
  28. package/dist/resources/documents.js +63 -0
  29. package/dist/resources/documents.js.map +1 -0
  30. package/dist/resources/search.d.ts +4 -0
  31. package/dist/resources/search.d.ts.map +1 -0
  32. package/dist/resources/search.js +44 -0
  33. package/dist/resources/search.js.map +1 -0
  34. package/dist/tools/conversations.d.ts +4 -0
  35. package/dist/tools/conversations.d.ts.map +1 -0
  36. package/dist/tools/conversations.js +124 -0
  37. package/dist/tools/conversations.js.map +1 -0
  38. package/dist/tools/documents.d.ts +4 -0
  39. package/dist/tools/documents.d.ts.map +1 -0
  40. package/dist/tools/documents.js +75 -0
  41. package/dist/tools/documents.js.map +1 -0
  42. package/dist/tools/messages.d.ts +4 -0
  43. package/dist/tools/messages.d.ts.map +1 -0
  44. package/dist/tools/messages.js +31 -0
  45. package/dist/tools/messages.js.map +1 -0
  46. package/dist/tools/search.d.ts +4 -0
  47. package/dist/tools/search.d.ts.map +1 -0
  48. package/dist/tools/search.js +37 -0
  49. package/dist/tools/search.js.map +1 -0
  50. package/package.json +37 -0
@@ -0,0 +1,164 @@
1
+ import { z } from "zod";
2
+ export function registerPrompts(server, client) {
3
+ server.prompt("summarize-conversation", "Summarize a live chat conversation with full customer context", { conversationId: z.string().uuid().describe("Conversation UUID") }, async ({ conversationId }) => {
4
+ const [conversation, messages] = await Promise.all([
5
+ client.getConversation(conversationId),
6
+ client.getConversationMessages(conversationId, { limit: 100 }),
7
+ ]);
8
+ const contact = conversation.contact;
9
+ const msgList = Array.isArray(messages) ? messages : messages.data || [];
10
+ const contextLines = [];
11
+ contextLines.push(`Contact: ${contact?.name || "Unknown"} (${contact?.email || "no email"})`);
12
+ contextLines.push(`Status: ${conversation.status}`);
13
+ contextLines.push(`Assigned: ${conversation.assignedAgentName || "Unassigned"}`);
14
+ if (conversation.tags?.length) {
15
+ contextLines.push(`Tags: ${conversation.tags.map((t) => t.name).join(", ")}`);
16
+ }
17
+ contextLines.push("");
18
+ contextLines.push("Messages:");
19
+ for (const msg of msgList) {
20
+ const time = new Date(msg.createdAt).toLocaleString();
21
+ const author = msg.author?.name || "System";
22
+ const prefix = msg.isInternalNote ? "[INTERNAL] " : "";
23
+ contextLines.push(`[${time}] ${prefix}${author}: ${msg.content}`);
24
+ }
25
+ return {
26
+ messages: [
27
+ {
28
+ role: "user",
29
+ content: {
30
+ type: "text",
31
+ text: `Summarize the following customer conversation. Include:\n- Customer info and context\n- Key issues or questions raised\n- Current status and any pending actions\n- Sentiment assessment\n\n${contextLines.join("\n")}`,
32
+ },
33
+ },
34
+ ],
35
+ };
36
+ });
37
+ server.prompt("draft-reply", "Draft a reply to a customer based on conversation history and available canned responses", {
38
+ conversationId: z.string().uuid().describe("Conversation UUID"),
39
+ tone: z
40
+ .enum(["friendly", "professional", "concise"])
41
+ .optional()
42
+ .describe("Reply tone"),
43
+ }, async ({ conversationId, tone }) => {
44
+ const [conversation, messages, canned] = await Promise.all([
45
+ client.getConversation(conversationId),
46
+ client.getConversationMessages(conversationId, { limit: 50 }),
47
+ client.listCannedResponses(),
48
+ ]);
49
+ const msgList = Array.isArray(messages) ? messages : messages.data || [];
50
+ const cannedList = Array.isArray(canned) ? canned : [];
51
+ const contextLines = [];
52
+ contextLines.push("## Conversation");
53
+ contextLines.push(`Customer: ${conversation.contact?.name || conversation.contact?.email || "Unknown"}`);
54
+ contextLines.push("");
55
+ for (const msg of msgList) {
56
+ const author = msg.author?.name || "Customer";
57
+ const prefix = msg.isInternalNote ? "[INTERNAL] " : "";
58
+ contextLines.push(`${prefix}${author}: ${msg.content}`);
59
+ }
60
+ if (cannedList.length > 0) {
61
+ contextLines.push("");
62
+ contextLines.push("## Available Canned Responses");
63
+ for (const cr of cannedList) {
64
+ contextLines.push(`- /${cr.shortcut}: ${cr.title} — "${cr.content}"`);
65
+ }
66
+ }
67
+ const toneInstruction = tone
68
+ ? `Use a ${tone} tone.`
69
+ : "Use a professional and helpful tone.";
70
+ return {
71
+ messages: [
72
+ {
73
+ role: "user",
74
+ content: {
75
+ type: "text",
76
+ text: `Draft a reply to the customer's last message. ${toneInstruction}\n\nIf a canned response fits, you can adapt it. Keep the reply concise and helpful.\n\n${contextLines.join("\n")}`,
77
+ },
78
+ },
79
+ ],
80
+ };
81
+ });
82
+ server.prompt("find-related", "Find conversations and documents related to a topic", { topic: z.string().describe("Topic or keywords to search for") }, async ({ topic }) => {
83
+ const result = await client.search({ q: topic, type: "all", limit: 20 });
84
+ const results = result.results || [];
85
+ const contextLines = [`Search results for "${topic}":\n`];
86
+ for (const r of results) {
87
+ contextLines.push(`[${r.type}] ${r.title || r.id}`);
88
+ if (r.snippet)
89
+ contextLines.push(` ${r.snippet}`);
90
+ contextLines.push("");
91
+ }
92
+ return {
93
+ messages: [
94
+ {
95
+ role: "user",
96
+ content: {
97
+ type: "text",
98
+ text: `Analyze these search results and identify the most relevant conversations and documents related to "${topic}". Group by theme and highlight any patterns or connections.\n\n${contextLines.join("\n")}`,
99
+ },
100
+ },
101
+ ],
102
+ };
103
+ });
104
+ server.prompt("conversation-handoff", "Generate a handoff summary for transferring a conversation to another agent", { conversationId: z.string().uuid().describe("Conversation UUID") }, async ({ conversationId }) => {
105
+ const [conversation, messages] = await Promise.all([
106
+ client.getConversation(conversationId),
107
+ client.getConversationMessages(conversationId, { limit: 100 }),
108
+ ]);
109
+ const contact = conversation.contact;
110
+ const msgList = Array.isArray(messages) ? messages : messages.data || [];
111
+ const contextLines = [];
112
+ contextLines.push(`Customer: ${contact?.name || "Unknown"} (${contact?.email || "no email"})`);
113
+ contextLines.push(`Assigned: ${conversation.assignedAgentName || "Unassigned"}`);
114
+ contextLines.push(`Tags: ${conversation.tags?.map((t) => t.name).join(", ") || "none"}`);
115
+ contextLines.push("");
116
+ for (const msg of msgList) {
117
+ const author = msg.author?.name || "Customer";
118
+ const prefix = msg.isInternalNote ? "[INTERNAL] " : "";
119
+ contextLines.push(`${prefix}${author}: ${msg.content}`);
120
+ }
121
+ return {
122
+ messages: [
123
+ {
124
+ role: "user",
125
+ content: {
126
+ type: "text",
127
+ text: `Generate a structured handoff summary for this conversation. Include:\n- Customer background\n- Issue summary\n- What's been tried or discussed\n- Recommended next steps\n\n${contextLines.join("\n")}`,
128
+ },
129
+ },
130
+ ],
131
+ };
132
+ });
133
+ server.prompt("daily-digest", "Generate a digest of today's conversation activity", {}, async () => {
134
+ const [open, closed] = await Promise.all([
135
+ client.listConversations({ status: "open", limit: 50 }),
136
+ client.listConversations({ status: "closed", limit: 50 }),
137
+ ]);
138
+ const contextLines = [];
139
+ contextLines.push(`## Open Conversations (${open.conversations.length})`);
140
+ for (const c of open.conversations) {
141
+ const contact = c.contact?.name || c.contact?.email || "Unknown";
142
+ const assigned = c.assignedAgentName || "Unassigned";
143
+ contextLines.push(`- ${contact} → ${assigned} (since ${new Date(c.createdAt).toLocaleDateString()})`);
144
+ }
145
+ contextLines.push("");
146
+ contextLines.push(`## Recently Closed (${closed.conversations.length})`);
147
+ for (const c of closed.conversations) {
148
+ const contact = c.contact?.name || c.contact?.email || "Unknown";
149
+ contextLines.push(`- ${contact} (closed ${new Date(c.closedAt || c.updatedAt).toLocaleDateString()})`);
150
+ }
151
+ return {
152
+ messages: [
153
+ {
154
+ role: "user",
155
+ content: {
156
+ type: "text",
157
+ text: `Generate a daily digest of conversation activity. Summarize:\n- New and open conversations requiring attention\n- Recently resolved conversations\n- Any patterns or observations\n\n${contextLines.join("\n")}`,
158
+ },
159
+ },
160
+ ],
161
+ };
162
+ });
163
+ }
164
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/prompts/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB,MAAM,UAAU,eAAe,CAC7B,MAAiB,EACjB,MAAuB;IAEvB,MAAM,CAAC,MAAM,CACX,wBAAwB,EACxB,+DAA+D,EAC/D,EAAE,cAAc,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,QAAQ,CAAC,mBAAmB,CAAC,EAAE,EACnE,KAAK,EAAE,EAAE,cAAc,EAAE,EAAE,EAAE;QAC3B,MAAM,CAAC,YAAY,EAAE,QAAQ,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;YACjD,MAAM,CAAC,eAAe,CAAC,cAAc,CAAC;YACtC,MAAM,CAAC,uBAAuB,CAAC,cAAc,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC;SAC/D,CAAC,CAAC;QAEH,MAAM,OAAO,GAAG,YAAY,CAAC,OAAO,CAAC;QACrC,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAE,QAAgB,CAAC,IAAI,IAAI,EAAE,CAAC;QAElF,MAAM,YAAY,GAAG,EAAE,CAAC;QACxB,YAAY,CAAC,IAAI,CAAC,YAAY,OAAO,EAAE,IAAI,IAAI,SAAS,KAAK,OAAO,EAAE,KAAK,IAAI,UAAU,GAAG,CAAC,CAAC;QAC9F,YAAY,CAAC,IAAI,CAAC,WAAW,YAAY,CAAC,MAAM,EAAE,CAAC,CAAC;QACpD,YAAY,CAAC,IAAI,CAAC,aAAa,YAAY,CAAC,iBAAiB,IAAI,YAAY,EAAE,CAAC,CAAC;QACjF,IAAI,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC;YAC9B,YAAY,CAAC,IAAI,CAAC,SAAS,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACrF,CAAC;QACD,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACtB,YAAY,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QAC/B,KAAK,MAAM,GAAG,IAAI,OAAO,EAAE,CAAC;YAC1B,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,cAAc,EAAE,CAAC;YACtD,MAAM,MAAM,GAAG,GAAG,CAAC,MAAM,EAAE,IAAI,IAAI,QAAQ,CAAC;YAC5C,MAAM,MAAM,GAAG,GAAG,CAAC,cAAc,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,CAAC;YACvD,YAAY,CAAC,IAAI,CAAC,IAAI,IAAI,KAAK,MAAM,GAAG,MAAM,KAAK,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;QACpE,CAAC;QAED,OAAO;YACL,QAAQ,EAAE;gBACR;oBACE,IAAI,EAAE,MAAe;oBACrB,OAAO,EAAE;wBACP,IAAI,EAAE,MAAe;wBACrB,IAAI,EAAE,+LAA+L,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;qBAC/N;iBACF;aACF;SACF,CAAC;IACJ,CAAC,CACF,CAAC;IAEF,MAAM,CAAC,MAAM,CACX,aAAa,EACb,0FAA0F,EAC1F;QACE,cAAc,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,QAAQ,CAAC,mBAAmB,CAAC;QAC/D,IAAI,EAAE,CAAC;aACJ,IAAI,CAAC,CAAC,UAAU,EAAE,cAAc,EAAE,SAAS,CAAC,CAAC;aAC7C,QAAQ,EAAE;aACV,QAAQ,CAAC,YAAY,CAAC;KAC1B,EACD,KAAK,EAAE,EAAE,cAAc,EAAE,IAAI,EAAE,EAAE,EAAE;QACjC,MAAM,CAAC,YAAY,EAAE,QAAQ,EAAE,MAAM,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;YACzD,MAAM,CAAC,eAAe,CAAC,cAAc,CAAC;YACtC,MAAM,CAAC,uBAAuB,CAAC,cAAc,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC;YAC7D,MAAM,CAAC,mBAAmB,EAAE;SAC7B,CAAC,CAAC;QAEH,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAE,QAAgB,CAAC,IAAI,IAAI,EAAE,CAAC;QAClF,MAAM,UAAU,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;QAEvD,MAAM,YAAY,GAAG,EAAE,CAAC;QACxB,YAAY,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;QACrC,YAAY,CAAC,IAAI,CAAC,aAAa,YAAY,CAAC,OAAO,EAAE,IAAI,IAAI,YAAY,CAAC,OAAO,EAAE,KAAK,IAAI,SAAS,EAAE,CAAC,CAAC;QACzG,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACtB,KAAK,MAAM,GAAG,IAAI,OAAO,EAAE,CAAC;YAC1B,MAAM,MAAM,GAAG,GAAG,CAAC,MAAM,EAAE,IAAI,IAAI,UAAU,CAAC;YAC9C,MAAM,MAAM,GAAG,GAAG,CAAC,cAAc,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,CAAC;YACvD,YAAY,CAAC,IAAI,CAAC,GAAG,MAAM,GAAG,MAAM,KAAK,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;QAC1D,CAAC;QAED,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC1B,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACtB,YAAY,CAAC,IAAI,CAAC,+BAA+B,CAAC,CAAC;YACnD,KAAK,MAAM,EAAE,IAAI,UAAU,EAAE,CAAC;gBAC5B,YAAY,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,KAAK,OAAO,EAAE,CAAC,OAAO,GAAG,CAAC,CAAC;YACxE,CAAC;QACH,CAAC;QAED,MAAM,eAAe,GAAG,IAAI;YAC1B,CAAC,CAAC,SAAS,IAAI,QAAQ;YACvB,CAAC,CAAC,sCAAsC,CAAC;QAE3C,OAAO;YACL,QAAQ,EAAE;gBACR;oBACE,IAAI,EAAE,MAAe;oBACrB,OAAO,EAAE;wBACP,IAAI,EAAE,MAAe;wBACrB,IAAI,EAAE,iDAAiD,eAAe,2FAA2F,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;qBAC3L;iBACF;aACF;SACF,CAAC;IACJ,CAAC,CACF,CAAC;IAEF,MAAM,CAAC,MAAM,CACX,cAAc,EACd,qDAAqD,EACrD,EAAE,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,iCAAiC,CAAC,EAAE,EACjE,KAAK,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE;QAClB,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC;QACzE,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,IAAI,EAAE,CAAC;QAErC,MAAM,YAAY,GAAG,CAAC,uBAAuB,KAAK,MAAM,CAAC,CAAC;QAC1D,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;YACxB,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACpD,IAAI,CAAC,CAAC,OAAO;gBAAE,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;YACnD,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACxB,CAAC;QAED,OAAO;YACL,QAAQ,EAAE;gBACR;oBACE,IAAI,EAAE,MAAe;oBACrB,OAAO,EAAE;wBACP,IAAI,EAAE,MAAe;wBACrB,IAAI,EAAE,uGAAuG,KAAK,mEAAmE,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;qBAC/M;iBACF;aACF;SACF,CAAC;IACJ,CAAC,CACF,CAAC;IAEF,MAAM,CAAC,MAAM,CACX,sBAAsB,EACtB,6EAA6E,EAC7E,EAAE,cAAc,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,QAAQ,CAAC,mBAAmB,CAAC,EAAE,EACnE,KAAK,EAAE,EAAE,cAAc,EAAE,EAAE,EAAE;QAC3B,MAAM,CAAC,YAAY,EAAE,QAAQ,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;YACjD,MAAM,CAAC,eAAe,CAAC,cAAc,CAAC;YACtC,MAAM,CAAC,uBAAuB,CAAC,cAAc,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC;SAC/D,CAAC,CAAC;QAEH,MAAM,OAAO,GAAG,YAAY,CAAC,OAAO,CAAC;QACrC,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAE,QAAgB,CAAC,IAAI,IAAI,EAAE,CAAC;QAElF,MAAM,YAAY,GAAG,EAAE,CAAC;QACxB,YAAY,CAAC,IAAI,CAAC,aAAa,OAAO,EAAE,IAAI,IAAI,SAAS,KAAK,OAAO,EAAE,KAAK,IAAI,UAAU,GAAG,CAAC,CAAC;QAC/F,YAAY,CAAC,IAAI,CAAC,aAAa,YAAY,CAAC,iBAAiB,IAAI,YAAY,EAAE,CAAC,CAAC;QACjF,YAAY,CAAC,IAAI,CAAC,SAAS,YAAY,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,MAAM,EAAE,CAAC,CAAC;QAC9F,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACtB,KAAK,MAAM,GAAG,IAAI,OAAO,EAAE,CAAC;YAC1B,MAAM,MAAM,GAAG,GAAG,CAAC,MAAM,EAAE,IAAI,IAAI,UAAU,CAAC;YAC9C,MAAM,MAAM,GAAG,GAAG,CAAC,cAAc,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,CAAC;YACvD,YAAY,CAAC,IAAI,CAAC,GAAG,MAAM,GAAG,MAAM,KAAK,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;QAC1D,CAAC;QAED,OAAO;YACL,QAAQ,EAAE;gBACR;oBACE,IAAI,EAAE,MAAe;oBACrB,OAAO,EAAE;wBACP,IAAI,EAAE,MAAe;wBACrB,IAAI,EAAE,gLAAgL,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;qBAChN;iBACF;aACF;SACF,CAAC;IACJ,CAAC,CACF,CAAC;IAEF,MAAM,CAAC,MAAM,CACX,cAAc,EACd,oDAAoD,EACpD,EAAE,EACF,KAAK,IAAI,EAAE;QACT,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;YACvC,MAAM,CAAC,iBAAiB,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC;YACvD,MAAM,CAAC,iBAAiB,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC;SAC1D,CAAC,CAAC;QAEH,MAAM,YAAY,GAAG,EAAE,CAAC;QACxB,YAAY,CAAC,IAAI,CAAC,0BAA0B,IAAI,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC,CAAC;QAC1E,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;YACnC,MAAM,OAAO,GAAG,CAAC,CAAC,OAAO,EAAE,IAAI,IAAI,CAAC,CAAC,OAAO,EAAE,KAAK,IAAI,SAAS,CAAC;YACjE,MAAM,QAAQ,GAAG,CAAC,CAAC,iBAAiB,IAAI,YAAY,CAAC;YACrD,YAAY,CAAC,IAAI,CAAC,KAAK,OAAO,MAAM,QAAQ,WAAW,IAAI,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,kBAAkB,EAAE,GAAG,CAAC,CAAC;QACxG,CAAC;QAED,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACtB,YAAY,CAAC,IAAI,CAAC,uBAAuB,MAAM,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC,CAAC;QACzE,KAAK,MAAM,CAAC,IAAI,MAAM,CAAC,aAAa,EAAE,CAAC;YACrC,MAAM,OAAO,GAAG,CAAC,CAAC,OAAO,EAAE,IAAI,IAAI,CAAC,CAAC,OAAO,EAAE,KAAK,IAAI,SAAS,CAAC;YACjE,YAAY,CAAC,IAAI,CAAC,KAAK,OAAO,YAAY,IAAI,IAAI,CAAC,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC,SAAS,CAAC,CAAC,kBAAkB,EAAE,GAAG,CAAC,CAAC;QACzG,CAAC;QAED,OAAO;YACL,QAAQ,EAAE;gBACR;oBACE,IAAI,EAAE,MAAe;oBACrB,OAAO,EAAE;wBACP,IAAI,EAAE,MAAe;wBACrB,IAAI,EAAE,wLAAwL,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;qBACxN;iBACF;aACF;SACF,CAAC;IACJ,CAAC,CACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,4 @@
1
+ import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ import type { ZerobuildClient } from "../client.js";
3
+ export declare function registerChannelResources(server: McpServer, client: ZerobuildClient): void;
4
+ //# sourceMappingURL=channels.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"channels.d.ts","sourceRoot":"","sources":["../../src/resources/channels.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAEpD,wBAAgB,wBAAwB,CACtC,MAAM,EAAE,SAAS,EACjB,MAAM,EAAE,eAAe,QAqExB"}
@@ -0,0 +1,58 @@
1
+ import { ResourceTemplate } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ export function registerChannelResources(server, client) {
3
+ // List channels
4
+ server.resource("channels", "zerobuild://channels", { description: "List of team chat channels" }, async () => {
5
+ const channels = await client.listChannels();
6
+ const list = Array.isArray(channels) ? channels : [];
7
+ const lines = ["# Channels\n"];
8
+ if (list.length === 0) {
9
+ lines.push("No channels found.");
10
+ }
11
+ else {
12
+ lines.push("| ID | Name | Description | Private |");
13
+ lines.push("|---|---|---|---|");
14
+ for (const ch of list) {
15
+ const desc = ch.description || "-";
16
+ lines.push(`| ${ch.id} | #${ch.name} | ${desc} | ${ch.isPrivate ? "Yes" : "No"} |`);
17
+ }
18
+ }
19
+ return {
20
+ contents: [
21
+ {
22
+ uri: "zerobuild://channels",
23
+ mimeType: "text/markdown",
24
+ text: lines.join("\n"),
25
+ },
26
+ ],
27
+ };
28
+ });
29
+ // Channel messages
30
+ server.resource("channel-messages", new ResourceTemplate("zerobuild://channels/{channelId}/messages", { list: undefined }), { description: "Recent messages in a channel" }, async (uri, variables) => {
31
+ const channelId = variables.channelId;
32
+ const messages = await client.getChannelMessages(channelId, { limit: 50 });
33
+ const list = Array.isArray(messages) ? messages : messages.data || [];
34
+ const lines = [`# Channel Messages\n`];
35
+ if (list.length === 0) {
36
+ lines.push("No messages in this channel.");
37
+ }
38
+ else {
39
+ for (const msg of list) {
40
+ const time = new Date(msg.createdAt).toLocaleString();
41
+ const author = msg.author?.name || "System";
42
+ lines.push(`**[${time}] ${author}:**`);
43
+ lines.push(msg.content);
44
+ lines.push("");
45
+ }
46
+ }
47
+ return {
48
+ contents: [
49
+ {
50
+ uri: uri.href,
51
+ mimeType: "text/markdown",
52
+ text: lines.join("\n"),
53
+ },
54
+ ],
55
+ };
56
+ });
57
+ }
58
+ //# sourceMappingURL=channels.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"channels.js","sourceRoot":"","sources":["../../src/resources/channels.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ import type { ZerobuildClient } from "../client.js";
3
+ export declare function registerContactResources(server: McpServer, client: ZerobuildClient): void;
4
+ //# sourceMappingURL=contacts.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"contacts.d.ts","sourceRoot":"","sources":["../../src/resources/contacts.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAEpD,wBAAgB,wBAAwB,CACtC,MAAM,EAAE,SAAS,EACjB,MAAM,EAAE,eAAe,QAqFxB"}
@@ -0,0 +1,73 @@
1
+ import { ResourceTemplate } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ export function registerContactResources(server, client) {
3
+ // List contacts
4
+ server.resource("contacts", "zerobuild://contacts", { description: "List of all contacts (customers)" }, async () => {
5
+ const contacts = await client.listContacts({ limit: 100 });
6
+ const list = Array.isArray(contacts) ? contacts : contacts.data || [];
7
+ const lines = ["# Contacts\n"];
8
+ if (list.length === 0) {
9
+ lines.push("No contacts found.");
10
+ }
11
+ else {
12
+ lines.push("| ID | Name | Email | First Seen | Last Seen |");
13
+ lines.push("|---|---|---|---|---|");
14
+ for (const c of list) {
15
+ const name = c.name || "-";
16
+ const email = c.email || "-";
17
+ const firstSeen = new Date(c.firstSeenAt).toLocaleDateString();
18
+ const lastSeen = new Date(c.lastSeenAt).toLocaleDateString();
19
+ lines.push(`| ${c.id} | ${name} | ${email} | ${firstSeen} | ${lastSeen} |`);
20
+ }
21
+ }
22
+ return {
23
+ contents: [
24
+ {
25
+ uri: "zerobuild://contacts",
26
+ mimeType: "text/markdown",
27
+ text: lines.join("\n"),
28
+ },
29
+ ],
30
+ };
31
+ });
32
+ // Contact detail
33
+ server.resource("contact-detail", new ResourceTemplate("zerobuild://contacts/{contactId}", { list: undefined }), { description: "Contact detail with conversation history" }, async (uri, variables) => {
34
+ const contactId = variables.contactId;
35
+ const contact = await client.getContact(contactId);
36
+ const lines = [
37
+ `# Contact: ${contact.name || contact.email || "Unknown"}`,
38
+ "",
39
+ ];
40
+ if (contact.name)
41
+ lines.push(`- **Name:** ${contact.name}`);
42
+ if (contact.email)
43
+ lines.push(`- **Email:** ${contact.email}`);
44
+ lines.push(`- **First seen:** ${new Date(contact.firstSeenAt).toLocaleDateString()}`);
45
+ lines.push(`- **Last seen:** ${new Date(contact.lastSeenAt).toLocaleDateString()}`);
46
+ if (contact.customFields && Object.keys(contact.customFields).length > 0) {
47
+ lines.push("", "## Custom Fields");
48
+ for (const [key, value] of Object.entries(contact.customFields)) {
49
+ lines.push(`- **${key}:** ${value}`);
50
+ }
51
+ }
52
+ if (contact.conversations?.length) {
53
+ lines.push("", "## Conversations");
54
+ lines.push("| ID | Status | Subject | Created |");
55
+ lines.push("|---|---|---|---|");
56
+ for (const conv of contact.conversations) {
57
+ const subject = conv.subject || "-";
58
+ const created = new Date(conv.createdAt).toLocaleDateString();
59
+ lines.push(`| ${conv.id} | ${conv.status} | ${subject} | ${created} |`);
60
+ }
61
+ }
62
+ return {
63
+ contents: [
64
+ {
65
+ uri: uri.href,
66
+ mimeType: "text/markdown",
67
+ text: lines.join("\n"),
68
+ },
69
+ ],
70
+ };
71
+ });
72
+ }
73
+ //# sourceMappingURL=contacts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"contacts.js","sourceRoot":"","sources":["../../src/resources/contacts.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ import type { ZerobuildClient } from "../client.js";
3
+ export declare function registerConversationResources(server: McpServer, client: ZerobuildClient): void;
4
+ //# sourceMappingURL=conversations.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"conversations.d.ts","sourceRoot":"","sources":["../../src/resources/conversations.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAEpD,wBAAgB,6BAA6B,CAC3C,MAAM,EAAE,SAAS,EACjB,MAAM,EAAE,eAAe,QAoHxB"}
@@ -0,0 +1,97 @@
1
+ import { ResourceTemplate } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ export function registerConversationResources(server, client) {
3
+ // List open conversations
4
+ server.resource("conversations", "zerobuild://conversations", { description: "List of open live chat conversations" }, async () => {
5
+ const result = await client.listConversations({
6
+ status: "open",
7
+ limit: 50,
8
+ });
9
+ const conversations = result.conversations;
10
+ const lines = ["# Open Conversations\n"];
11
+ if (conversations.length === 0) {
12
+ lines.push("No open conversations.");
13
+ }
14
+ else {
15
+ lines.push("| ID | Contact | Assigned | Tags | Last Message | Created |");
16
+ lines.push("|---|---|---|---|---|---|");
17
+ for (const c of conversations) {
18
+ const contact = c.contact?.name || c.contact?.email || "Unknown";
19
+ const assigned = c.assignedAgentName || "Unassigned";
20
+ const tags = c.tags?.map((t) => t.name).join(", ") || "-";
21
+ const lastMsg = c.lastMessage
22
+ ? c.lastMessage.content?.slice(0, 60) + (c.lastMessage.content?.length > 60 ? "..." : "")
23
+ : "-";
24
+ const created = new Date(c.createdAt).toLocaleDateString();
25
+ lines.push(`| ${c.id} | ${contact} | ${assigned} | ${tags} | ${lastMsg} | ${created} |`);
26
+ }
27
+ }
28
+ return {
29
+ contents: [
30
+ {
31
+ uri: "zerobuild://conversations",
32
+ mimeType: "text/markdown",
33
+ text: lines.join("\n"),
34
+ },
35
+ ],
36
+ };
37
+ });
38
+ // Conversation detail with messages
39
+ server.resource("conversation-detail", new ResourceTemplate("zerobuild://conversations/{conversationId}", { list: undefined }), { description: "Conversation detail with messages and customer context" }, async (uri, variables) => {
40
+ const conversationId = variables.conversationId;
41
+ const [conversation, messages] = await Promise.all([
42
+ client.getConversation(conversationId),
43
+ client.getConversationMessages(conversationId, { limit: 50 }),
44
+ ]);
45
+ const contact = conversation.contact;
46
+ const visitor = conversation.visitorMetadata;
47
+ const lines = [
48
+ `# Conversation with ${contact?.name || contact?.email || "Unknown"}`,
49
+ "",
50
+ `**Status:** ${conversation.status} | **Assigned:** ${conversation.assignedAgentName || "Unassigned"}`,
51
+ ];
52
+ if (conversation.tags?.length) {
53
+ lines.push(`**Tags:** ${conversation.tags.map((t) => t.name).join(", ")}`);
54
+ }
55
+ if (visitor) {
56
+ const visitorParts = [];
57
+ if (visitor.browser)
58
+ visitorParts.push(`${visitor.browser} on ${visitor.os || "unknown OS"}`);
59
+ if (visitor.city || visitor.country)
60
+ visitorParts.push([visitor.city, visitor.country].filter(Boolean).join(", "));
61
+ if (visitor.pageUrl)
62
+ visitorParts.push(`Page: ${visitor.pageUrl}`);
63
+ if (visitorParts.length)
64
+ lines.push(`**Visitor:** ${visitorParts.join(" | ")}`);
65
+ }
66
+ if (contact) {
67
+ lines.push("");
68
+ lines.push("## Contact");
69
+ if (contact.name)
70
+ lines.push(`- **Name:** ${contact.name}`);
71
+ if (contact.email)
72
+ lines.push(`- **Email:** ${contact.email}`);
73
+ lines.push(`- **First seen:** ${new Date(contact.firstSeenAt).toLocaleDateString()}`);
74
+ lines.push(`- **Last seen:** ${new Date(contact.lastSeenAt).toLocaleDateString()}`);
75
+ }
76
+ lines.push("", "## Messages", "");
77
+ const msgList = Array.isArray(messages) ? messages : messages.data || [];
78
+ for (const msg of msgList) {
79
+ const time = new Date(msg.createdAt).toLocaleString();
80
+ const author = msg.author?.name || "System";
81
+ const prefix = msg.isInternalNote ? "[INTERNAL NOTE] " : "";
82
+ lines.push(`**[${time}] ${prefix}${author}:**`);
83
+ lines.push(msg.content);
84
+ lines.push("");
85
+ }
86
+ return {
87
+ contents: [
88
+ {
89
+ uri: uri.href,
90
+ mimeType: "text/markdown",
91
+ text: lines.join("\n"),
92
+ },
93
+ ],
94
+ };
95
+ });
96
+ }
97
+ //# sourceMappingURL=conversations.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"conversations.js","sourceRoot":"","sources":["../../src/resources/conversations.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ import type { ZerobuildClient } from "../client.js";
3
+ export declare function registerDocumentResources(server: McpServer, client: ZerobuildClient): void;
4
+ //# sourceMappingURL=documents.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"documents.d.ts","sourceRoot":"","sources":["../../src/resources/documents.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAgBpD,wBAAgB,yBAAyB,CACvC,MAAM,EAAE,SAAS,EACjB,MAAM,EAAE,eAAe,QAkExB"}
@@ -0,0 +1,63 @@
1
+ import { ResourceTemplate } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ function formatDocTree(docs, indent = 0) {
3
+ const lines = [];
4
+ for (const doc of docs) {
5
+ const prefix = " ".repeat(indent);
6
+ const icon = doc.isFolder ? "[folder]" : "[doc]";
7
+ const updated = new Date(doc.updatedAt).toLocaleDateString();
8
+ lines.push(`${prefix}${icon} ${doc.title} (${doc.id}) — updated ${updated}`);
9
+ if (doc.children?.length) {
10
+ lines.push(...formatDocTree(doc.children, indent + 1));
11
+ }
12
+ }
13
+ return lines;
14
+ }
15
+ export function registerDocumentResources(server, client) {
16
+ // Document tree
17
+ server.resource("documents", "zerobuild://documents", { description: "Document and folder tree" }, async () => {
18
+ const docs = await client.listDocuments();
19
+ const list = Array.isArray(docs) ? docs : [];
20
+ const lines = ["# Documents\n"];
21
+ if (list.length === 0) {
22
+ lines.push("No documents found.");
23
+ }
24
+ else {
25
+ lines.push(...formatDocTree(list));
26
+ }
27
+ return {
28
+ contents: [
29
+ {
30
+ uri: "zerobuild://documents",
31
+ mimeType: "text/markdown",
32
+ text: lines.join("\n"),
33
+ },
34
+ ],
35
+ };
36
+ });
37
+ // Document detail
38
+ server.resource("document-detail", new ResourceTemplate("zerobuild://documents/{documentId}", { list: undefined }), { description: "Document content" }, async (uri, variables) => {
39
+ const documentId = variables.documentId;
40
+ const doc = await client.getDocument(documentId);
41
+ const lines = [`# ${doc.title}`, ""];
42
+ if (doc.isFolder) {
43
+ lines.push("*This is a folder.*");
44
+ }
45
+ else if (doc.contentText) {
46
+ lines.push(doc.contentText);
47
+ }
48
+ else {
49
+ lines.push("*Empty document.*");
50
+ }
51
+ lines.push("", "---", `Last updated: ${new Date(doc.updatedAt).toLocaleString()}`);
52
+ return {
53
+ contents: [
54
+ {
55
+ uri: uri.href,
56
+ mimeType: "text/markdown",
57
+ text: lines.join("\n"),
58
+ },
59
+ ],
60
+ };
61
+ });
62
+ }
63
+ //# sourceMappingURL=documents.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"documents.js","sourceRoot":"","sources":["../../src/resources/documents.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ import type { ZerobuildClient } from "../client.js";
3
+ export declare function registerSearchResource(server: McpServer, client: ZerobuildClient): void;
4
+ //# sourceMappingURL=search.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"search.d.ts","sourceRoot":"","sources":["../../src/resources/search.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAEpD,wBAAgB,sBAAsB,CACpC,MAAM,EAAE,SAAS,EACjB,MAAM,EAAE,eAAe,QAgDxB"}
@@ -0,0 +1,44 @@
1
+ import { ResourceTemplate } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ export function registerSearchResource(server, client) {
3
+ server.resource("search", new ResourceTemplate("zerobuild://search/{query}", { list: undefined }), { description: "Search across messages, documents, contacts, and people" }, async (uri, variables) => {
4
+ const query = variables.query;
5
+ const result = await client.search({ q: query, type: "all", limit: 20 });
6
+ const results = result.results || [];
7
+ const lines = [`# Search Results for "${query}"\n`];
8
+ lines.push(`Found ${result.total || results.length} results.\n`);
9
+ if (results.length === 0) {
10
+ lines.push("No results found.");
11
+ }
12
+ else {
13
+ // Group by type
14
+ const grouped = {};
15
+ for (const r of results) {
16
+ const type = r.type || "other";
17
+ if (!grouped[type])
18
+ grouped[type] = [];
19
+ grouped[type].push(r);
20
+ }
21
+ for (const [type, items] of Object.entries(grouped)) {
22
+ lines.push(`## ${type.charAt(0).toUpperCase() + type.slice(1)}s\n`);
23
+ for (const item of items) {
24
+ lines.push(`- **${item.title || item.id}**`);
25
+ if (item.snippet)
26
+ lines.push(` ${item.snippet}`);
27
+ if (item.authorName)
28
+ lines.push(` *by ${item.authorName} at ${new Date(item.timestamp).toLocaleString()}*`);
29
+ lines.push("");
30
+ }
31
+ }
32
+ }
33
+ return {
34
+ contents: [
35
+ {
36
+ uri: uri.href,
37
+ mimeType: "text/markdown",
38
+ text: lines.join("\n"),
39
+ },
40
+ ],
41
+ };
42
+ });
43
+ }
44
+ //# sourceMappingURL=search.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"search.js","sourceRoot":"","sources":["../../src/resources/search.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,yCAAyC,CAAC;AAI3E,MAAM,UAAU,sBAAsB,CACpC,MAAiB,EACjB,MAAuB;IAEvB,MAAM,CAAC,QAAQ,CACb,QAAQ,EACR,IAAI,gBAAgB,CAAC,4BAA4B,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,EACvE,EAAE,WAAW,EAAE,yDAAyD,EAAE,EAC1E,KAAK,EAAE,GAAG,EAAE,SAAS,EAAE,EAAE;QACvB,MAAM,KAAK,GAAG,SAAS,CAAC,KAAe,CAAC;QACxC,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC;QAEzE,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,IAAI,EAAE,CAAC;QACrC,MAAM,KAAK,GAAG,CAAC,yBAAyB,KAAK,KAAK,CAAC,CAAC;QACpD,KAAK,CAAC,IAAI,CAAC,SAAS,MAAM,CAAC,KAAK,IAAI,OAAO,CAAC,MAAM,aAAa,CAAC,CAAC;QAEjE,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACzB,KAAK,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;QAClC,CAAC;aAAM,CAAC;YACN,gBAAgB;YAChB,MAAM,OAAO,GAA0B,EAAE,CAAC;YAC1C,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;gBACxB,MAAM,IAAI,GAAG,CAAC,CAAC,IAAI,IAAI,OAAO,CAAC;gBAC/B,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC;oBAAE,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC;gBACvC,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YACxB,CAAC;YAED,KAAK,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;gBACpD,KAAK,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;gBACpE,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;oBACzB,KAAK,CAAC,IAAI,CAAC,OAAO,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,EAAE,IAAI,CAAC,CAAC;oBAC7C,IAAI,IAAI,CAAC,OAAO;wBAAE,KAAK,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;oBAClD,IAAI,IAAI,CAAC,UAAU;wBACjB,KAAK,CAAC,IAAI,CAAC,SAAS,IAAI,CAAC,UAAU,OAAO,IAAI,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,cAAc,EAAE,GAAG,CAAC,CAAC;oBAC1F,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;gBACjB,CAAC;YACH,CAAC;QACH,CAAC;QAED,OAAO;YACL,QAAQ,EAAE;gBACR;oBACE,GAAG,EAAE,GAAG,CAAC,IAAI;oBACb,QAAQ,EAAE,eAAe;oBACzB,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC;iBACvB;aACF;SACF,CAAC;IACJ,CAAC,CACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,4 @@
1
+ import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ import type { ZerobuildClient } from "../client.js";
3
+ export declare function registerConversationTools(server: McpServer, client: ZerobuildClient): void;
4
+ //# sourceMappingURL=conversations.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"conversations.d.ts","sourceRoot":"","sources":["../../src/tools/conversations.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAEpD,wBAAgB,yBAAyB,CACvC,MAAM,EAAE,SAAS,EACjB,MAAM,EAAE,eAAe,QAoKxB"}