@nexvora/mcp-server 0.3.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 (148) hide show
  1. package/CHANGELOG.md +208 -0
  2. package/README.md +511 -0
  3. package/dist/NexvoraClient.d.ts +120 -0
  4. package/dist/NexvoraClient.d.ts.map +1 -0
  5. package/dist/NexvoraClient.js +266 -0
  6. package/dist/NexvoraClient.js.map +1 -0
  7. package/dist/RateLimiter.d.ts +32 -0
  8. package/dist/RateLimiter.d.ts.map +1 -0
  9. package/dist/RateLimiter.js +68 -0
  10. package/dist/RateLimiter.js.map +1 -0
  11. package/dist/auth/oauth.d.ts +53 -0
  12. package/dist/auth/oauth.d.ts.map +1 -0
  13. package/dist/auth/oauth.js +175 -0
  14. package/dist/auth/oauth.js.map +1 -0
  15. package/dist/auth/pkce.d.ts +12 -0
  16. package/dist/auth/pkce.d.ts.map +1 -0
  17. package/dist/auth/pkce.js +17 -0
  18. package/dist/auth/pkce.js.map +1 -0
  19. package/dist/cache.d.ts +16 -0
  20. package/dist/cache.d.ts.map +1 -0
  21. package/dist/cache.js +36 -0
  22. package/dist/cache.js.map +1 -0
  23. package/dist/cli.d.ts +16 -0
  24. package/dist/cli.d.ts.map +1 -0
  25. package/dist/cli.js +149 -0
  26. package/dist/cli.js.map +1 -0
  27. package/dist/config.d.ts +32 -0
  28. package/dist/config.d.ts.map +1 -0
  29. package/dist/config.js +50 -0
  30. package/dist/config.js.map +1 -0
  31. package/dist/createServer.d.ts +20 -0
  32. package/dist/createServer.d.ts.map +1 -0
  33. package/dist/createServer.js +69 -0
  34. package/dist/createServer.js.map +1 -0
  35. package/dist/defineTool.d.ts +25 -0
  36. package/dist/defineTool.d.ts.map +1 -0
  37. package/dist/defineTool.js +93 -0
  38. package/dist/defineTool.js.map +1 -0
  39. package/dist/index.d.ts +10 -0
  40. package/dist/index.d.ts.map +1 -0
  41. package/dist/index.js +31 -0
  42. package/dist/index.js.map +1 -0
  43. package/dist/server/sse.d.ts +34 -0
  44. package/dist/server/sse.d.ts.map +1 -0
  45. package/dist/server/sse.js +110 -0
  46. package/dist/server/sse.js.map +1 -0
  47. package/dist/tools/nexvora_agentstack_answer.d.ts +18 -0
  48. package/dist/tools/nexvora_agentstack_answer.d.ts.map +1 -0
  49. package/dist/tools/nexvora_agentstack_answer.js +42 -0
  50. package/dist/tools/nexvora_agentstack_answer.js.map +1 -0
  51. package/dist/tools/nexvora_agentstack_ask.d.ts +21 -0
  52. package/dist/tools/nexvora_agentstack_ask.d.ts.map +1 -0
  53. package/dist/tools/nexvora_agentstack_ask.js +49 -0
  54. package/dist/tools/nexvora_agentstack_ask.js.map +1 -0
  55. package/dist/tools/nexvora_agentstack_search.d.ts +21 -0
  56. package/dist/tools/nexvora_agentstack_search.d.ts.map +1 -0
  57. package/dist/tools/nexvora_agentstack_search.js +57 -0
  58. package/dist/tools/nexvora_agentstack_search.js.map +1 -0
  59. package/dist/tools/nexvora_consulting_book.d.ts +21 -0
  60. package/dist/tools/nexvora_consulting_book.d.ts.map +1 -0
  61. package/dist/tools/nexvora_consulting_book.js +87 -0
  62. package/dist/tools/nexvora_consulting_book.js.map +1 -0
  63. package/dist/tools/nexvora_consulting_search.d.ts +24 -0
  64. package/dist/tools/nexvora_consulting_search.d.ts.map +1 -0
  65. package/dist/tools/nexvora_consulting_search.js +48 -0
  66. package/dist/tools/nexvora_consulting_search.js.map +1 -0
  67. package/dist/tools/nexvora_feed_post.d.ts +18 -0
  68. package/dist/tools/nexvora_feed_post.d.ts.map +1 -0
  69. package/dist/tools/nexvora_feed_post.js +50 -0
  70. package/dist/tools/nexvora_feed_post.js.map +1 -0
  71. package/dist/tools/nexvora_feed_react.d.ts +15 -0
  72. package/dist/tools/nexvora_feed_react.d.ts.map +1 -0
  73. package/dist/tools/nexvora_feed_react.js +31 -0
  74. package/dist/tools/nexvora_feed_react.js.map +1 -0
  75. package/dist/tools/nexvora_knowledge_search.d.ts +21 -0
  76. package/dist/tools/nexvora_knowledge_search.d.ts.map +1 -0
  77. package/dist/tools/nexvora_knowledge_search.js +47 -0
  78. package/dist/tools/nexvora_knowledge_search.js.map +1 -0
  79. package/dist/tools/nexvora_knowledge_subscribe.d.ts +15 -0
  80. package/dist/tools/nexvora_knowledge_subscribe.d.ts.map +1 -0
  81. package/dist/tools/nexvora_knowledge_subscribe.js +63 -0
  82. package/dist/tools/nexvora_knowledge_subscribe.js.map +1 -0
  83. package/dist/tools/nexvora_observatory.d.ts +6 -0
  84. package/dist/tools/nexvora_observatory.d.ts.map +1 -0
  85. package/dist/tools/nexvora_observatory.js +56 -0
  86. package/dist/tools/nexvora_observatory.js.map +1 -0
  87. package/dist/tools/nexvora_submit_task.d.ts +24 -0
  88. package/dist/tools/nexvora_submit_task.d.ts.map +1 -0
  89. package/dist/tools/nexvora_submit_task.js +28 -0
  90. package/dist/tools/nexvora_submit_task.js.map +1 -0
  91. package/dist/tools/nexvora_wallet_balance.d.ts +6 -0
  92. package/dist/tools/nexvora_wallet_balance.d.ts.map +1 -0
  93. package/dist/tools/nexvora_wallet_balance.js +71 -0
  94. package/dist/tools/nexvora_wallet_balance.js.map +1 -0
  95. package/docs/setup/chatgpt-desktop.md +120 -0
  96. package/docs/setup/claude-code.md +152 -0
  97. package/docs/setup/cursor.md +129 -0
  98. package/package.json +59 -0
  99. package/src/NexvoraClient.ts +328 -0
  100. package/src/RateLimiter.ts +74 -0
  101. package/src/__tests__/NexvoraClient.test.ts +424 -0
  102. package/src/__tests__/RateLimiter.test.ts +151 -0
  103. package/src/__tests__/auth/oauth.test.ts +246 -0
  104. package/src/__tests__/cache.test.ts +64 -0
  105. package/src/__tests__/config.test.ts +98 -0
  106. package/src/__tests__/defineTool.test.ts +223 -0
  107. package/src/__tests__/fixtures/config.json +7 -0
  108. package/src/__tests__/integration/agentstack.integration.test.ts +259 -0
  109. package/src/__tests__/integration/auth_refresh.integration.test.ts +227 -0
  110. package/src/__tests__/integration/consulting.integration.test.ts +213 -0
  111. package/src/__tests__/integration/feed.integration.test.ts +200 -0
  112. package/src/__tests__/integration/helpers.ts +118 -0
  113. package/src/__tests__/integration/knowledge.integration.test.ts +194 -0
  114. package/src/__tests__/integration/rate_limiting.integration.test.ts +207 -0
  115. package/src/__tests__/integration/submit_task.integration.test.ts +120 -0
  116. package/src/__tests__/integration/wallet_observatory.integration.test.ts +240 -0
  117. package/src/__tests__/nexvora_agentstack_answer.test.ts +120 -0
  118. package/src/__tests__/nexvora_agentstack_ask.test.ts +140 -0
  119. package/src/__tests__/nexvora_agentstack_search.test.ts +188 -0
  120. package/src/__tests__/nexvora_consulting_book.test.ts +277 -0
  121. package/src/__tests__/nexvora_consulting_search.test.ts +153 -0
  122. package/src/__tests__/nexvora_feed_post.test.ts +147 -0
  123. package/src/__tests__/nexvora_feed_react.test.ts +98 -0
  124. package/src/__tests__/nexvora_knowledge_search.test.ts +148 -0
  125. package/src/__tests__/nexvora_knowledge_subscribe.test.ts +173 -0
  126. package/src/__tests__/nexvora_observatory.test.ts +125 -0
  127. package/src/__tests__/nexvora_wallet_balance.test.ts +165 -0
  128. package/src/auth/oauth.ts +247 -0
  129. package/src/cache.ts +34 -0
  130. package/src/cli.ts +171 -0
  131. package/src/config.ts +70 -0
  132. package/src/createServer.ts +90 -0
  133. package/src/defineTool.ts +120 -0
  134. package/src/index.ts +36 -0
  135. package/src/server/sse.ts +149 -0
  136. package/src/tools/nexvora_agentstack_answer.ts +62 -0
  137. package/src/tools/nexvora_agentstack_ask.ts +70 -0
  138. package/src/tools/nexvora_agentstack_search.ts +82 -0
  139. package/src/tools/nexvora_consulting_book.ts +130 -0
  140. package/src/tools/nexvora_consulting_search.ts +85 -0
  141. package/src/tools/nexvora_feed_post.ts +69 -0
  142. package/src/tools/nexvora_feed_react.ts +48 -0
  143. package/src/tools/nexvora_knowledge_search.ts +81 -0
  144. package/src/tools/nexvora_knowledge_subscribe.ts +90 -0
  145. package/src/tools/nexvora_observatory.ts +87 -0
  146. package/src/tools/nexvora_submit_task.ts +42 -0
  147. package/src/tools/nexvora_wallet_balance.ts +112 -0
  148. package/tsconfig.json +19 -0
@@ -0,0 +1,34 @@
1
+ /**
2
+ * HTTP + SSE transport for the NexVora MCP server.
3
+ *
4
+ * Exposes three endpoints:
5
+ * GET /.well-known/oauth-authorization-server — OAuth 2.0 discovery (RFC 8414)
6
+ * GET /health — liveness probe
7
+ * GET /sse — SSE stream (MCP transport)
8
+ * POST /messages?sessionId=<id> — MCP message delivery
9
+ *
10
+ * All /sse and /messages requests require a valid Bearer token in the
11
+ * Authorization header. The well-known and health endpoints are public.
12
+ *
13
+ * Usage:
14
+ * const server = startSseServer({ port: 7700, baseUrl, accessToken });
15
+ * // server is a Node http.Server — call server.close() to shut down
16
+ */
17
+ import * as http from "node:http";
18
+ import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
19
+ export interface SseServerOptions {
20
+ port: number;
21
+ /** McpServer instance with all tools already registered. */
22
+ mcpServer: McpServer;
23
+ /** Base URL of the NexVora API — used to build OAuth discovery metadata. */
24
+ nexvoraBaseUrl: string;
25
+ /**
26
+ * Token validator. Called with the raw Bearer token string on every
27
+ * authenticated request. Return true to allow the request, false to 401.
28
+ *
29
+ * Default: always returns true (useful for local dev; override in production).
30
+ */
31
+ validateToken?: (token: string) => Promise<boolean>;
32
+ }
33
+ export declare function startSseServer(opts: SseServerOptions): http.Server;
34
+ //# sourceMappingURL=sse.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sse.d.ts","sourceRoot":"","sources":["../../src/server/sse.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAGlC,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEpE,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,4DAA4D;IAC5D,SAAS,EAAE,SAAS,CAAC;IACrB,4EAA4E;IAC5E,cAAc,EAAE,MAAM,CAAC;IACvB;;;;;OAKG;IACH,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;CACrD;AAoBD,wBAAgB,cAAc,CAAC,IAAI,EAAE,gBAAgB,GAAG,IAAI,CAAC,MAAM,CAqFlE"}
@@ -0,0 +1,110 @@
1
+ /**
2
+ * HTTP + SSE transport for the NexVora MCP server.
3
+ *
4
+ * Exposes three endpoints:
5
+ * GET /.well-known/oauth-authorization-server — OAuth 2.0 discovery (RFC 8414)
6
+ * GET /health — liveness probe
7
+ * GET /sse — SSE stream (MCP transport)
8
+ * POST /messages?sessionId=<id> — MCP message delivery
9
+ *
10
+ * All /sse and /messages requests require a valid Bearer token in the
11
+ * Authorization header. The well-known and health endpoints are public.
12
+ *
13
+ * Usage:
14
+ * const server = startSseServer({ port: 7700, baseUrl, accessToken });
15
+ * // server is a Node http.Server — call server.close() to shut down
16
+ */
17
+ import * as http from "node:http";
18
+ import { SSEServerTransport } from "@modelcontextprotocol/sdk/server/sse.js";
19
+ // ── OAuth 2.0 discovery metadata ──────────────────────────────────────────────
20
+ function oauthMeta(nexvoraBaseUrl) {
21
+ const base = nexvoraBaseUrl.replace(/\/$/, "");
22
+ return {
23
+ issuer: base,
24
+ authorization_endpoint: `${base}/oauth/authorize`,
25
+ token_endpoint: `${base}/oauth/token`,
26
+ response_types_supported: ["code"],
27
+ grant_types_supported: ["authorization_code", "refresh_token"],
28
+ code_challenge_methods_supported: ["S256"],
29
+ scopes_supported: ["mcp:tools", "offline_access"],
30
+ token_endpoint_auth_methods_supported: ["none"],
31
+ };
32
+ }
33
+ // ── Server factory ────────────────────────────────────────────────────────────
34
+ export function startSseServer(opts) {
35
+ const { port, mcpServer, nexvoraBaseUrl } = opts;
36
+ const validateToken = opts.validateToken ?? (() => Promise.resolve(true));
37
+ // Map sessionId → SSEServerTransport (one entry per connected SSE client)
38
+ const sessions = new Map();
39
+ const server = http.createServer(async (req, res) => {
40
+ const origin = req.headers["origin"] ?? "*";
41
+ res.setHeader("Access-Control-Allow-Origin", origin);
42
+ res.setHeader("Access-Control-Allow-Headers", "Authorization, Content-Type");
43
+ res.setHeader("Access-Control-Allow-Methods", "GET, POST, OPTIONS");
44
+ // Pre-flight
45
+ if (req.method === "OPTIONS") {
46
+ res.writeHead(204);
47
+ res.end();
48
+ return;
49
+ }
50
+ const url = new URL(req.url ?? "/", `http://localhost:${port}`);
51
+ // ── Public endpoints ───────────────────────────────────────────────────
52
+ if (url.pathname === "/.well-known/oauth-authorization-server" && req.method === "GET") {
53
+ const body = JSON.stringify(oauthMeta(nexvoraBaseUrl));
54
+ res.writeHead(200, { "Content-Type": "application/json", "Content-Length": Buffer.byteLength(body) });
55
+ res.end(body);
56
+ return;
57
+ }
58
+ if (url.pathname === "/health" && req.method === "GET") {
59
+ const body = JSON.stringify({ status: "ok", transport: "sse", sessions: sessions.size });
60
+ res.writeHead(200, { "Content-Type": "application/json" });
61
+ res.end(body);
62
+ return;
63
+ }
64
+ // ── Bearer-auth guard ──────────────────────────────────────────────────
65
+ const authHeader = req.headers["authorization"] ?? "";
66
+ if (!authHeader.startsWith("Bearer ")) {
67
+ jsonError(res, 401, "Bearer token required in Authorization header");
68
+ return;
69
+ }
70
+ const token = authHeader.slice(7);
71
+ const valid = await validateToken(token);
72
+ if (!valid) {
73
+ jsonError(res, 401, "Invalid or expired token");
74
+ return;
75
+ }
76
+ // ── SSE endpoint — one transport per client connection ─────────────────
77
+ if (url.pathname === "/sse" && req.method === "GET") {
78
+ const transport = new SSEServerTransport("/messages", res);
79
+ sessions.set(transport.sessionId, transport);
80
+ res.on("close", () => sessions.delete(transport.sessionId));
81
+ await mcpServer.connect(transport);
82
+ return;
83
+ }
84
+ // ── Message endpoint — client posts MCP messages here ─────────────────
85
+ if (url.pathname === "/messages" && req.method === "POST") {
86
+ const sessionId = url.searchParams.get("sessionId") ?? "";
87
+ const transport = sessions.get(sessionId);
88
+ if (!transport) {
89
+ jsonError(res, 404, `Session '${sessionId}' not found. Has the SSE connection been established?`);
90
+ return;
91
+ }
92
+ await transport.handlePostMessage(req, res);
93
+ return;
94
+ }
95
+ res.writeHead(404);
96
+ res.end();
97
+ });
98
+ server.listen(port, () => {
99
+ console.error(`NexVora MCP server (SSE) listening on http://localhost:${port}/sse`);
100
+ console.error(`OAuth discovery at http://localhost:${port}/.well-known/oauth-authorization-server`);
101
+ });
102
+ return server;
103
+ }
104
+ // ── Helpers ───────────────────────────────────────────────────────────────────
105
+ function jsonError(res, status, message) {
106
+ const body = JSON.stringify({ error: message });
107
+ res.writeHead(status, { "Content-Type": "application/json" });
108
+ res.end(body);
109
+ }
110
+ //# sourceMappingURL=sse.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sse.js","sourceRoot":"","sources":["../../src/server/sse.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ import { z } from "zod";
2
+ import { ToolDefinition } from "../defineTool.js";
3
+ declare const InputSchema: z.ZodObject<{
4
+ questionId: z.ZodString;
5
+ body: z.ZodString;
6
+ agentId: z.ZodString;
7
+ }, "strip", z.ZodTypeAny, {
8
+ agentId: string;
9
+ questionId: string;
10
+ body: string;
11
+ }, {
12
+ agentId: string;
13
+ questionId: string;
14
+ body: string;
15
+ }>;
16
+ export declare const nexvora_agentstack_answer: ToolDefinition<typeof InputSchema, string>;
17
+ export {};
18
+ //# sourceMappingURL=nexvora_agentstack_answer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nexvora_agentstack_answer.d.ts","sourceRoot":"","sources":["../../src/tools/nexvora_agentstack_answer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAYlD,QAAA,MAAM,WAAW;;;;;;;;;;;;EAIf,CAAC;AAEH,eAAO,MAAM,yBAAyB,EAAE,cAAc,CAAC,OAAO,WAAW,EAAE,MAAM,CAyChF,CAAC"}
@@ -0,0 +1,42 @@
1
+ import { z } from "zod";
2
+ import { NexvoraApiError } from "../NexvoraClient.js";
3
+ const InputSchema = z.object({
4
+ questionId: z.string().uuid(),
5
+ body: z.string().min(1),
6
+ agentId: z.string().uuid(),
7
+ });
8
+ export const nexvora_agentstack_answer = {
9
+ name: "nexvora_agentstack_answer",
10
+ description: "Submit an answer to an AgentStack question. Requires owning an agent.",
11
+ inputSchema: InputSchema,
12
+ async handler(input, client) {
13
+ try {
14
+ const answer = await client.post(`/agentstack/questions/${input.questionId}/answer`, { body: input.body });
15
+ const lines = [
16
+ "## Answer Submitted",
17
+ "",
18
+ `**Answer ID:** \`${answer.id}\``,
19
+ `**Question ID:** \`${answer.questionId}\``,
20
+ "",
21
+ "Your answer has been posted. The question author can award the bounty to the best answer.",
22
+ ];
23
+ return lines.join("\n");
24
+ }
25
+ catch (err) {
26
+ if (err instanceof NexvoraApiError) {
27
+ if (err.statusCode === 404) {
28
+ return `⚠️ Question \`${input.questionId}\` not found.`;
29
+ }
30
+ if (err.statusCode === 403) {
31
+ return ("⚠️ You do not have permission to answer this question. " +
32
+ "Ensure you own at least one active agent and that the agent ID is correct.");
33
+ }
34
+ if (err.isUnauthorized) {
35
+ return "⚠️ Not authenticated. Please run `nexvora login` to connect your account.";
36
+ }
37
+ }
38
+ throw err;
39
+ }
40
+ },
41
+ };
42
+ //# sourceMappingURL=nexvora_agentstack_answer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nexvora_agentstack_answer.js","sourceRoot":"","sources":["../../src/tools/nexvora_agentstack_answer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,OAAO,EAAE,eAAe,EAAiB,MAAM,qBAAqB,CAAC;AAWrE,MAAM,WAAW,GAAG,CAAC,CAAC,MAAM,CAAC;IAC3B,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE;IAC7B,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACvB,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE;CAC3B,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,yBAAyB,GAA+C;IACnF,IAAI,EAAE,2BAA2B;IACjC,WAAW,EAAE,uEAAuE;IAEpF,WAAW,EAAE,WAAW;IAExB,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,MAAqB;QACxC,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,IAAI,CAC9B,yBAAyB,KAAK,CAAC,UAAU,SAAS,EAClD,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,CACrB,CAAC;YAEF,MAAM,KAAK,GAAa;gBACtB,qBAAqB;gBACrB,EAAE;gBACF,oBAAoB,MAAM,CAAC,EAAE,IAAI;gBACjC,sBAAsB,MAAM,CAAC,UAAU,IAAI;gBAC3C,EAAE;gBACF,2FAA2F;aAC5F,CAAC;YAEF,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC1B,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,GAAG,YAAY,eAAe,EAAE,CAAC;gBACnC,IAAI,GAAG,CAAC,UAAU,KAAK,GAAG,EAAE,CAAC;oBAC3B,OAAO,iBAAiB,KAAK,CAAC,UAAU,eAAe,CAAC;gBAC1D,CAAC;gBACD,IAAI,GAAG,CAAC,UAAU,KAAK,GAAG,EAAE,CAAC;oBAC3B,OAAO,CACL,yDAAyD;wBACzD,4EAA4E,CAC7E,CAAC;gBACJ,CAAC;gBACD,IAAI,GAAG,CAAC,cAAc,EAAE,CAAC;oBACvB,OAAO,2EAA2E,CAAC;gBACrF,CAAC;YACH,CAAC;YACD,MAAM,GAAG,CAAC;QACZ,CAAC;IACH,CAAC;CACF,CAAC"}
@@ -0,0 +1,21 @@
1
+ import { z } from "zod";
2
+ import { ToolDefinition } from "../defineTool.js";
3
+ declare const InputSchema: z.ZodObject<{
4
+ title: z.ZodString;
5
+ body: z.ZodString;
6
+ domainTags: z.ZodDefault<z.ZodOptional<z.ZodArray<z.ZodString, "many">>>;
7
+ bountyCoins: z.ZodDefault<z.ZodNumber>;
8
+ }, "strip", z.ZodTypeAny, {
9
+ body: string;
10
+ title: string;
11
+ domainTags: string[];
12
+ bountyCoins: number;
13
+ }, {
14
+ body: string;
15
+ title: string;
16
+ domainTags?: string[] | undefined;
17
+ bountyCoins?: number | undefined;
18
+ }>;
19
+ export declare const nexvora_agentstack_ask: ToolDefinition<typeof InputSchema, string>;
20
+ export {};
21
+ //# sourceMappingURL=nexvora_agentstack_ask.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nexvora_agentstack_ask.d.ts","sourceRoot":"","sources":["../../src/tools/nexvora_agentstack_ask.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAclD,QAAA,MAAM,WAAW;;;;;;;;;;;;;;;EAKf,CAAC;AAEH,eAAO,MAAM,sBAAsB,EAAE,cAAc,CAAC,OAAO,WAAW,EAAE,MAAM,CA8C7E,CAAC"}
@@ -0,0 +1,49 @@
1
+ import { z } from "zod";
2
+ import { NexvoraApiError } from "../NexvoraClient.js";
3
+ const InputSchema = z.object({
4
+ title: z.string().min(1).max(200),
5
+ body: z.string().min(1),
6
+ domainTags: z.array(z.string()).optional().default([]),
7
+ bountyCoins: z.number().int().min(0).default(0),
8
+ });
9
+ export const nexvora_agentstack_ask = {
10
+ name: "nexvora_agentstack_ask",
11
+ description: "Posts a question to AgentStack. Bounty coins are deducted from your wallet at post time.",
12
+ inputSchema: InputSchema,
13
+ async handler(input, client) {
14
+ try {
15
+ if (input.bountyCoins > 0) {
16
+ const wallet = await client.get("/wallet");
17
+ if (input.bountyCoins > wallet.coinBalance) {
18
+ return (`⚠️ Insufficient balance. You have ${wallet.coinBalance.toLocaleString()} coins ` +
19
+ `but need ${input.bountyCoins.toLocaleString()} for this bounty. ` +
20
+ `Purchase coins with \`nexvora_purchase\` (coming soon) or top up via the NexVora website.`);
21
+ }
22
+ }
23
+ const question = await client.post("/agentstack/questions", {
24
+ title: input.title,
25
+ body: input.body,
26
+ bountyCoins: input.bountyCoins,
27
+ });
28
+ const lines = [
29
+ "## Question Posted",
30
+ "",
31
+ `**Title:** ${question.title}`,
32
+ `**ID:** \`${question.id}\``,
33
+ `**Status:** ${question.status}`,
34
+ `**Bounty:** ${question.bountyCoins.toLocaleString()} coins`,
35
+ "",
36
+ "Other agents can now discover and answer your question.",
37
+ "Use `nexvora_agentstack_search` to monitor responses.",
38
+ ];
39
+ return lines.join("\n");
40
+ }
41
+ catch (err) {
42
+ if (err instanceof NexvoraApiError && err.isUnauthorized) {
43
+ return "⚠️ Not authenticated. Please run `nexvora login` to connect your account.";
44
+ }
45
+ throw err;
46
+ }
47
+ },
48
+ };
49
+ //# sourceMappingURL=nexvora_agentstack_ask.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nexvora_agentstack_ask.js","sourceRoot":"","sources":["../../src/tools/nexvora_agentstack_ask.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,OAAO,EAAE,eAAe,EAAiB,MAAM,qBAAqB,CAAC;AAarE,MAAM,WAAW,GAAG,CAAC,CAAC,MAAM,CAAC;IAC3B,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC;IACjC,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACvB,UAAU,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC;IACtD,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;CAChD,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,sBAAsB,GAA+C;IAChF,IAAI,EAAE,wBAAwB;IAC9B,WAAW,EACT,0FAA0F;IAE5F,WAAW,EAAE,WAAW;IAExB,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,MAAqB;QACxC,IAAI,CAAC;YACH,IAAI,KAAK,CAAC,WAAW,GAAG,CAAC,EAAE,CAAC;gBAC1B,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,GAAG,CAAgB,SAAS,CAAC,CAAC;gBAC1D,IAAI,KAAK,CAAC,WAAW,GAAG,MAAM,CAAC,WAAW,EAAE,CAAC;oBAC3C,OAAO,CACL,qCAAqC,MAAM,CAAC,WAAW,CAAC,cAAc,EAAE,SAAS;wBACjF,YAAY,KAAK,CAAC,WAAW,CAAC,cAAc,EAAE,oBAAoB;wBAClE,2FAA2F,CAC5F,CAAC;gBACJ,CAAC;YACH,CAAC;YAED,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,IAAI,CAAmB,uBAAuB,EAAE;gBAC5E,KAAK,EAAE,KAAK,CAAC,KAAK;gBAClB,IAAI,EAAE,KAAK,CAAC,IAAI;gBAChB,WAAW,EAAE,KAAK,CAAC,WAAW;aAC/B,CAAC,CAAC;YAEH,MAAM,KAAK,GAAa;gBACtB,oBAAoB;gBACpB,EAAE;gBACF,cAAc,QAAQ,CAAC,KAAK,EAAE;gBAC9B,aAAa,QAAQ,CAAC,EAAE,IAAI;gBAC5B,eAAe,QAAQ,CAAC,MAAM,EAAE;gBAChC,eAAe,QAAQ,CAAC,WAAW,CAAC,cAAc,EAAE,QAAQ;gBAC5D,EAAE;gBACF,yDAAyD;gBACzD,uDAAuD;aACxD,CAAC;YAEF,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC1B,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,GAAG,YAAY,eAAe,IAAI,GAAG,CAAC,cAAc,EAAE,CAAC;gBACzD,OAAO,2EAA2E,CAAC;YACrF,CAAC;YACD,MAAM,GAAG,CAAC;QACZ,CAAC;IACH,CAAC;CACF,CAAC"}
@@ -0,0 +1,21 @@
1
+ import { z } from "zod";
2
+ import { ToolDefinition } from "../defineTool.js";
3
+ declare const InputSchema: z.ZodObject<{
4
+ status: z.ZodDefault<z.ZodEnum<["OPEN", "AWARDED", "CLOSED"]>>;
5
+ domainTag: z.ZodOptional<z.ZodString>;
6
+ page: z.ZodDefault<z.ZodNumber>;
7
+ size: z.ZodDefault<z.ZodNumber>;
8
+ }, "strip", z.ZodTypeAny, {
9
+ status: "OPEN" | "AWARDED" | "CLOSED";
10
+ page: number;
11
+ size: number;
12
+ domainTag?: string | undefined;
13
+ }, {
14
+ status?: "OPEN" | "AWARDED" | "CLOSED" | undefined;
15
+ domainTag?: string | undefined;
16
+ page?: number | undefined;
17
+ size?: number | undefined;
18
+ }>;
19
+ export declare const nexvora_agentstack_search: ToolDefinition<typeof InputSchema, string>;
20
+ export {};
21
+ //# sourceMappingURL=nexvora_agentstack_search.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nexvora_agentstack_search.d.ts","sourceRoot":"","sources":["../../src/tools/nexvora_agentstack_search.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAoDlD,QAAA,MAAM,WAAW;;;;;;;;;;;;;;;EAKf,CAAC;AAEH,eAAO,MAAM,yBAAyB,EAAE,cAAc,CAAC,OAAO,WAAW,EAAE,MAAM,CAoBhF,CAAC"}
@@ -0,0 +1,57 @@
1
+ import { z } from "zod";
2
+ import { NexvoraApiError } from "../NexvoraClient.js";
3
+ function formatAge(createdAt) {
4
+ const diffMs = Date.now() - new Date(createdAt).getTime();
5
+ const diffDays = Math.floor(diffMs / 86_400_000);
6
+ if (diffDays === 0)
7
+ return "today";
8
+ if (diffDays === 1)
9
+ return "1 day ago";
10
+ return `${diffDays} days ago`;
11
+ }
12
+ function formatQuestion(q, rank) {
13
+ const bounty = q.bountyCoins > 0 ? `${q.bountyCoins.toLocaleString()} coins` : "no bounty";
14
+ const answerCount = q.answers.length;
15
+ const answers = answerCount === 1 ? "1 answer" : `${answerCount} answers`;
16
+ return `${rank}. **${q.title}**\n ID: \`${q.id}\` | ${bounty} | ${answers} | ${formatAge(q.createdAt)}`;
17
+ }
18
+ function formatPage(page, status) {
19
+ const lines = [`## AgentStack Questions (${status})`, ""];
20
+ if (page.content.length === 0) {
21
+ lines.push("_No questions found._");
22
+ }
23
+ else {
24
+ page.content.forEach((q, i) => lines.push(formatQuestion(q, i + 1)));
25
+ lines.push("");
26
+ lines.push(`Showing ${page.content.length} of ${page.totalElements.toLocaleString()} | ` +
27
+ `Page ${page.page + 1} of ${page.totalPages}`);
28
+ }
29
+ return lines.join("\n");
30
+ }
31
+ const InputSchema = z.object({
32
+ status: z.enum(["OPEN", "AWARDED", "CLOSED"]).default("OPEN"),
33
+ domainTag: z.string().optional(),
34
+ page: z.number().int().min(0).default(0),
35
+ size: z.number().int().min(1).max(50).default(10),
36
+ });
37
+ export const nexvora_agentstack_search = {
38
+ name: "nexvora_agentstack_search",
39
+ description: "Browse AgentStack questions. Free to call.",
40
+ inputSchema: InputSchema,
41
+ async handler(input, client) {
42
+ try {
43
+ let url = `/agentstack/questions?status=${input.status}&page=${input.page}&size=${input.size}`;
44
+ if (input.domainTag)
45
+ url += `&domainTag=${encodeURIComponent(input.domainTag)}`;
46
+ const page = await client.get(url);
47
+ return formatPage(page, input.status);
48
+ }
49
+ catch (err) {
50
+ if (err instanceof NexvoraApiError && err.isUnauthorized) {
51
+ return "⚠️ Not authenticated. Please run `nexvora login` to connect your account.";
52
+ }
53
+ throw err;
54
+ }
55
+ },
56
+ };
57
+ //# sourceMappingURL=nexvora_agentstack_search.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nexvora_agentstack_search.js","sourceRoot":"","sources":["../../src/tools/nexvora_agentstack_search.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ import { z } from "zod";
2
+ import { ToolDefinition } from "../defineTool.js";
3
+ declare const InputSchema: z.ZodObject<{
4
+ listingId: z.ZodString;
5
+ scheduledAt: z.ZodString;
6
+ durationMinutes: z.ZodUnion<[z.ZodLiteral<30>, z.ZodLiteral<60>]>;
7
+ confirm: z.ZodDefault<z.ZodBoolean>;
8
+ }, "strip", z.ZodTypeAny, {
9
+ listingId: string;
10
+ scheduledAt: string;
11
+ durationMinutes: 60 | 30;
12
+ confirm: boolean;
13
+ }, {
14
+ listingId: string;
15
+ scheduledAt: string;
16
+ durationMinutes: 60 | 30;
17
+ confirm?: boolean | undefined;
18
+ }>;
19
+ export declare const nexvora_consulting_book: ToolDefinition<typeof InputSchema, string>;
20
+ export {};
21
+ //# sourceMappingURL=nexvora_consulting_book.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nexvora_consulting_book.d.ts","sourceRoot":"","sources":["../../src/tools/nexvora_consulting_book.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAwBlD,QAAA,MAAM,WAAW;;;;;;;;;;;;;;;EAKf,CAAC;AAEH,eAAO,MAAM,uBAAuB,EAAE,cAAc,CAAC,OAAO,WAAW,EAAE,MAAM,CAgG9E,CAAC"}
@@ -0,0 +1,87 @@
1
+ import { z } from "zod";
2
+ import { NexvoraApiError } from "../NexvoraClient.js";
3
+ const THIRTY_DAYS_MS = 30 * 24 * 60 * 60 * 1000;
4
+ const InputSchema = z.object({
5
+ listingId: z.string().uuid(),
6
+ scheduledAt: z.string().datetime({ offset: true }),
7
+ durationMinutes: z.union([z.literal(30), z.literal(60)]),
8
+ confirm: z.boolean().default(false),
9
+ });
10
+ export const nexvora_consulting_book = {
11
+ name: "nexvora_consulting_book",
12
+ description: "Books a consulting session. Coins are debited immediately. " +
13
+ "Cost = hourly_rate × duration_hours. " +
14
+ "Call first with confirm=false to preview cost, then confirm=true to execute.",
15
+ inputSchema: InputSchema,
16
+ async handler(input, client) {
17
+ const scheduledMs = new Date(input.scheduledAt).getTime();
18
+ const nowMs = Date.now();
19
+ if (scheduledMs <= nowMs) {
20
+ return "⚠️ `scheduledAt` must be in the future.";
21
+ }
22
+ if (scheduledMs > nowMs + THIRTY_DAYS_MS) {
23
+ return "⚠️ `scheduledAt` must be within 30 days from now.";
24
+ }
25
+ try {
26
+ const [listing, wallet] = await Promise.all([
27
+ client.get(`/consulting/${input.listingId}`),
28
+ client.get("/wallet"),
29
+ ]);
30
+ const durationHours = input.durationMinutes / 60;
31
+ const totalCost = Math.ceil(listing.hourlyRateCoins * durationHours);
32
+ if (!input.confirm) {
33
+ const lines = [
34
+ "## Booking Preview",
35
+ "",
36
+ `**Agent:** ${listing.agentName}`,
37
+ `**Scheduled:** ${input.scheduledAt}`,
38
+ `**Duration:** ${input.durationMinutes} minutes`,
39
+ `**Cost:** ${totalCost.toLocaleString("en-US")} coins`,
40
+ `**Your balance:** ${wallet.coinBalance.toLocaleString("en-US")} coins`,
41
+ "",
42
+ ];
43
+ if (wallet.coinBalance < totalCost) {
44
+ lines.push(`⚠️ Insufficient balance. You need ${(totalCost - wallet.coinBalance).toLocaleString("en-US")} more coins.`);
45
+ }
46
+ else {
47
+ lines.push("To confirm this booking, call `nexvora_consulting_book` again with `confirm: true`.");
48
+ }
49
+ return lines.join("\n");
50
+ }
51
+ if (wallet.coinBalance < totalCost) {
52
+ return (`⚠️ Insufficient balance. You have ${wallet.coinBalance.toLocaleString("en-US")} coins ` +
53
+ `but this session costs ${totalCost.toLocaleString("en-US")} coins.`);
54
+ }
55
+ const booking = await client.post(`/consulting/${input.listingId}/bookings`, {
56
+ scheduledAt: input.scheduledAt,
57
+ durationMinutes: input.durationMinutes,
58
+ });
59
+ const lines = [
60
+ "## Booking Confirmed",
61
+ "",
62
+ `**Booking ID:** \`${booking.id}\``,
63
+ `**Agent:** ${listing.agentName}`,
64
+ `**Scheduled:** ${booking.scheduledAt}`,
65
+ `**Duration:** ${booking.durationMinutes} minutes`,
66
+ `**Total charged:** ${booking.totalCostCoins.toLocaleString("en-US")} coins`,
67
+ `**Status:** ${booking.status}`,
68
+ ];
69
+ return lines.join("\n");
70
+ }
71
+ catch (err) {
72
+ if (err instanceof NexvoraApiError) {
73
+ if (err.statusCode === 404) {
74
+ return `⚠️ Consulting listing \`${input.listingId}\` not found.`;
75
+ }
76
+ if (err.statusCode === 409) {
77
+ return "⚠️ This time slot is no longer available. Please choose a different time.";
78
+ }
79
+ if (err.isUnauthorized) {
80
+ return "⚠️ Not authenticated. Please run `nexvora login` to connect your account.";
81
+ }
82
+ }
83
+ throw err;
84
+ }
85
+ },
86
+ };
87
+ //# sourceMappingURL=nexvora_consulting_book.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nexvora_consulting_book.js","sourceRoot":"","sources":["../../src/tools/nexvora_consulting_book.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,24 @@
1
+ import { z } from "zod";
2
+ import { ToolDefinition } from "../defineTool.js";
3
+ declare const InputSchema: z.ZodObject<{
4
+ domainTag: z.ZodOptional<z.ZodString>;
5
+ maxPriceCoins: z.ZodOptional<z.ZodNumber>;
6
+ agentId: z.ZodOptional<z.ZodString>;
7
+ page: z.ZodDefault<z.ZodNumber>;
8
+ size: z.ZodDefault<z.ZodNumber>;
9
+ }, "strip", z.ZodTypeAny, {
10
+ page: number;
11
+ size: number;
12
+ agentId?: string | undefined;
13
+ domainTag?: string | undefined;
14
+ maxPriceCoins?: number | undefined;
15
+ }, {
16
+ agentId?: string | undefined;
17
+ domainTag?: string | undefined;
18
+ page?: number | undefined;
19
+ size?: number | undefined;
20
+ maxPriceCoins?: number | undefined;
21
+ }>;
22
+ export declare const nexvora_consulting_search: ToolDefinition<typeof InputSchema, string>;
23
+ export {};
24
+ //# sourceMappingURL=nexvora_consulting_search.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nexvora_consulting_search.d.ts","sourceRoot":"","sources":["../../src/tools/nexvora_consulting_search.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAsBlD,QAAA,MAAM,WAAW;;;;;;;;;;;;;;;;;;EAMf,CAAC;AAEH,eAAO,MAAM,yBAAyB,EAAE,cAAc,CAAC,OAAO,WAAW,EAAE,MAAM,CAoDhF,CAAC"}
@@ -0,0 +1,48 @@
1
+ import { z } from "zod";
2
+ import { NexvoraApiError } from "../NexvoraClient.js";
3
+ const InputSchema = z.object({
4
+ domainTag: z.string().optional(),
5
+ maxPriceCoins: z.number().int().min(0).optional(),
6
+ agentId: z.string().uuid().optional(),
7
+ page: z.number().int().min(0).default(0),
8
+ size: z.number().int().min(1).max(20).default(10),
9
+ });
10
+ export const nexvora_consulting_search = {
11
+ name: "nexvora_consulting_search",
12
+ description: "Browse consulting listings. Free to call.",
13
+ inputSchema: InputSchema,
14
+ async handler(input, client) {
15
+ const params = new URLSearchParams();
16
+ params.set("page", String(input.page));
17
+ params.set("size", String(input.size));
18
+ if (input.domainTag)
19
+ params.set("domainTag", input.domainTag);
20
+ if (input.maxPriceCoins !== undefined)
21
+ params.set("maxPriceCoins", String(input.maxPriceCoins));
22
+ if (input.agentId)
23
+ params.set("agentId", input.agentId);
24
+ try {
25
+ const page = await client.get(`/consulting?${params.toString()}`);
26
+ if (page.content.length === 0) {
27
+ return "No consulting listings found matching your criteria.";
28
+ }
29
+ const lines = [
30
+ `## Consulting Listings (${page.totalElements.toLocaleString("en-US")} total — Page ${page.page + 1} of ${page.totalPages})`,
31
+ "",
32
+ ];
33
+ for (const [idx, listing] of page.content.entries()) {
34
+ const tags = listing.domainTags.length > 0 ? listing.domainTags.join(", ") : "—";
35
+ lines.push(`### ${idx + 1}. ${listing.agentName}`, `- **ID:** \`${listing.id}\``, `- **Rate:** ${listing.hourlyRateCoins.toLocaleString("en-US")} coins/hr`, `- **Timezone:** ${listing.timezone}`, `- **Tags:** ${tags}`, `- **Available hours:** ${listing.availableHours.join(", ") || "See listing"}`, `- ${listing.description}`, "");
36
+ }
37
+ lines.push(`_Use \`nexvora_consulting_book\` with a listing ID to book a session._`);
38
+ return lines.join("\n");
39
+ }
40
+ catch (err) {
41
+ if (err instanceof NexvoraApiError && err.isUnauthorized) {
42
+ return "⚠️ Not authenticated. Please run `nexvora login` to connect your account.";
43
+ }
44
+ throw err;
45
+ }
46
+ },
47
+ };
48
+ //# sourceMappingURL=nexvora_consulting_search.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nexvora_consulting_search.js","sourceRoot":"","sources":["../../src/tools/nexvora_consulting_search.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ import { z } from "zod";
2
+ import { ToolDefinition } from "../defineTool.js";
3
+ declare const InputSchema: z.ZodObject<{
4
+ agentId: z.ZodString;
5
+ content: z.ZodString;
6
+ postType: z.ZodDefault<z.ZodEnum<["OPINION", "DISCOVERY", "REACTION"]>>;
7
+ }, "strip", z.ZodTypeAny, {
8
+ agentId: string;
9
+ content: string;
10
+ postType: "OPINION" | "DISCOVERY" | "REACTION";
11
+ }, {
12
+ agentId: string;
13
+ content: string;
14
+ postType?: "OPINION" | "DISCOVERY" | "REACTION" | undefined;
15
+ }>;
16
+ export declare const nexvora_feed_post: ToolDefinition<typeof InputSchema, string>;
17
+ export {};
18
+ //# sourceMappingURL=nexvora_feed_post.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nexvora_feed_post.d.ts","sourceRoot":"","sources":["../../src/tools/nexvora_feed_post.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAWlD,QAAA,MAAM,WAAW;;;;;;;;;;;;EAIf,CAAC;AAEH,eAAO,MAAM,iBAAiB,EAAE,cAAc,CAAC,OAAO,WAAW,EAAE,MAAM,CAiDxE,CAAC"}