kompass-sdk 0.1.0

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 (205) hide show
  1. package/dist/a2a/agent-card.d.ts +13 -0
  2. package/dist/a2a/agent-card.d.ts.map +1 -0
  3. package/dist/a2a/agent-card.js +52 -0
  4. package/dist/a2a/agent-card.js.map +1 -0
  5. package/dist/a2a/bridge.d.ts +52 -0
  6. package/dist/a2a/bridge.d.ts.map +1 -0
  7. package/dist/a2a/bridge.js +123 -0
  8. package/dist/a2a/bridge.js.map +1 -0
  9. package/dist/a2a/client.d.ts +34 -0
  10. package/dist/a2a/client.d.ts.map +1 -0
  11. package/dist/a2a/client.js +65 -0
  12. package/dist/a2a/client.js.map +1 -0
  13. package/dist/a2a/server.d.ts +17 -0
  14. package/dist/a2a/server.d.ts.map +1 -0
  15. package/dist/a2a/server.js +194 -0
  16. package/dist/a2a/server.js.map +1 -0
  17. package/dist/abi.d.ts +1068 -0
  18. package/dist/abi.d.ts.map +1 -0
  19. package/dist/abi.js +1372 -0
  20. package/dist/abi.js.map +1 -0
  21. package/dist/adapters/agentkit.d.ts +41 -0
  22. package/dist/adapters/agentkit.d.ts.map +1 -0
  23. package/dist/adapters/agentkit.js +67 -0
  24. package/dist/adapters/agentkit.js.map +1 -0
  25. package/dist/adapters/generic.d.ts +35 -0
  26. package/dist/adapters/generic.d.ts.map +1 -0
  27. package/dist/adapters/generic.js +47 -0
  28. package/dist/adapters/generic.js.map +1 -0
  29. package/dist/adapters/index.d.ts +5 -0
  30. package/dist/adapters/index.d.ts.map +1 -0
  31. package/dist/adapters/index.js +5 -0
  32. package/dist/adapters/index.js.map +1 -0
  33. package/dist/adapters/langchain.d.ts +26 -0
  34. package/dist/adapters/langchain.d.ts.map +1 -0
  35. package/dist/adapters/langchain.js +228 -0
  36. package/dist/adapters/langchain.js.map +1 -0
  37. package/dist/adapters/openclaw.d.ts +18 -0
  38. package/dist/adapters/openclaw.d.ts.map +1 -0
  39. package/dist/adapters/openclaw.js +168 -0
  40. package/dist/adapters/openclaw.js.map +1 -0
  41. package/dist/aggregator.d.ts +36 -0
  42. package/dist/aggregator.d.ts.map +1 -0
  43. package/dist/aggregator.js +168 -0
  44. package/dist/aggregator.js.map +1 -0
  45. package/dist/backends/acp.d.ts +29 -0
  46. package/dist/backends/acp.d.ts.map +1 -0
  47. package/dist/backends/acp.js +126 -0
  48. package/dist/backends/acp.js.map +1 -0
  49. package/dist/backends/types.d.ts +59 -0
  50. package/dist/backends/types.d.ts.map +1 -0
  51. package/dist/backends/types.js +2 -0
  52. package/dist/backends/types.js.map +1 -0
  53. package/dist/bridge.d.ts +35 -0
  54. package/dist/bridge.d.ts.map +1 -0
  55. package/dist/bridge.js +192 -0
  56. package/dist/bridge.js.map +1 -0
  57. package/dist/cli.d.ts +12 -0
  58. package/dist/cli.d.ts.map +1 -0
  59. package/dist/cli.js +331 -0
  60. package/dist/cli.js.map +1 -0
  61. package/dist/discover.d.ts +15 -0
  62. package/dist/discover.d.ts.map +1 -0
  63. package/dist/discover.js +163 -0
  64. package/dist/discover.js.map +1 -0
  65. package/dist/escrow.d.ts +45 -0
  66. package/dist/escrow.d.ts.map +1 -0
  67. package/dist/escrow.js +243 -0
  68. package/dist/escrow.js.map +1 -0
  69. package/dist/index.d.ts +63 -0
  70. package/dist/index.d.ts.map +1 -0
  71. package/dist/index.js +145 -0
  72. package/dist/index.js.map +1 -0
  73. package/dist/intents.d.ts +28 -0
  74. package/dist/intents.d.ts.map +1 -0
  75. package/dist/intents.js +111 -0
  76. package/dist/intents.js.map +1 -0
  77. package/dist/matching.d.ts +29 -0
  78. package/dist/matching.d.ts.map +1 -0
  79. package/dist/matching.js +147 -0
  80. package/dist/matching.js.map +1 -0
  81. package/dist/pipelineAbi.d.ts +113 -0
  82. package/dist/pipelineAbi.d.ts.map +1 -0
  83. package/dist/pipelineAbi.js +74 -0
  84. package/dist/pipelineAbi.js.map +1 -0
  85. package/dist/pipelines.d.ts +42 -0
  86. package/dist/pipelines.d.ts.map +1 -0
  87. package/dist/pipelines.js +185 -0
  88. package/dist/pipelines.js.map +1 -0
  89. package/dist/registry.d.ts +36 -0
  90. package/dist/registry.d.ts.map +1 -0
  91. package/dist/registry.js +187 -0
  92. package/dist/registry.js.map +1 -0
  93. package/dist/reputation.d.ts +10 -0
  94. package/dist/reputation.d.ts.map +1 -0
  95. package/dist/reputation.js +33 -0
  96. package/dist/reputation.js.map +1 -0
  97. package/dist/router.d.ts +72 -0
  98. package/dist/router.d.ts.map +1 -0
  99. package/dist/router.js +190 -0
  100. package/dist/router.js.map +1 -0
  101. package/dist/simple.d.ts +160 -0
  102. package/dist/simple.d.ts.map +1 -0
  103. package/dist/simple.js +237 -0
  104. package/dist/simple.js.map +1 -0
  105. package/dist/sources/a2a-wellknown.d.ts +8 -0
  106. package/dist/sources/a2a-wellknown.d.ts.map +1 -0
  107. package/dist/sources/a2a-wellknown.js +104 -0
  108. package/dist/sources/a2a-wellknown.js.map +1 -0
  109. package/dist/sources/acp.d.ts +7 -0
  110. package/dist/sources/acp.d.ts.map +1 -0
  111. package/dist/sources/acp.js +86 -0
  112. package/dist/sources/acp.js.map +1 -0
  113. package/dist/sources/adp.d.ts +7 -0
  114. package/dist/sources/adp.d.ts.map +1 -0
  115. package/dist/sources/adp.js +59 -0
  116. package/dist/sources/adp.js.map +1 -0
  117. package/dist/sources/erc8004.d.ts +7 -0
  118. package/dist/sources/erc8004.d.ts.map +1 -0
  119. package/dist/sources/erc8004.js +150 -0
  120. package/dist/sources/erc8004.js.map +1 -0
  121. package/dist/sources/index.d.ts +17 -0
  122. package/dist/sources/index.d.ts.map +1 -0
  123. package/dist/sources/index.js +35 -0
  124. package/dist/sources/index.js.map +1 -0
  125. package/dist/sources/kompass-registry.d.ts +8 -0
  126. package/dist/sources/kompass-registry.d.ts.map +1 -0
  127. package/dist/sources/kompass-registry.js +62 -0
  128. package/dist/sources/kompass-registry.js.map +1 -0
  129. package/dist/sources/l402-directory.d.ts +7 -0
  130. package/dist/sources/l402-directory.d.ts.map +1 -0
  131. package/dist/sources/l402-directory.js +42 -0
  132. package/dist/sources/l402-directory.js.map +1 -0
  133. package/dist/sources/mcp-registry.d.ts +8 -0
  134. package/dist/sources/mcp-registry.d.ts.map +1 -0
  135. package/dist/sources/mcp-registry.js +85 -0
  136. package/dist/sources/mcp-registry.js.map +1 -0
  137. package/dist/sources/skills.d.ts +8 -0
  138. package/dist/sources/skills.d.ts.map +1 -0
  139. package/dist/sources/skills.js +153 -0
  140. package/dist/sources/skills.js.map +1 -0
  141. package/dist/sources/types.d.ts +72 -0
  142. package/dist/sources/types.d.ts.map +1 -0
  143. package/dist/sources/types.js +8 -0
  144. package/dist/sources/types.js.map +1 -0
  145. package/dist/sources/x402-ecosystem.d.ts +7 -0
  146. package/dist/sources/x402-ecosystem.d.ts.map +1 -0
  147. package/dist/sources/x402-ecosystem.js +78 -0
  148. package/dist/sources/x402-ecosystem.js.map +1 -0
  149. package/dist/types.d.ts +133 -0
  150. package/dist/types.d.ts.map +1 -0
  151. package/dist/types.js +2 -0
  152. package/dist/types.js.map +1 -0
  153. package/dist/unified.d.ts +90 -0
  154. package/dist/unified.d.ts.map +1 -0
  155. package/dist/unified.js +107 -0
  156. package/dist/unified.js.map +1 -0
  157. package/dist/x402.d.ts +30 -0
  158. package/dist/x402.d.ts.map +1 -0
  159. package/dist/x402.js +79 -0
  160. package/dist/x402.js.map +1 -0
  161. package/package.json +61 -0
  162. package/scripts/bootstrap-agents.mjs +246 -0
  163. package/src/.gitkeep +0 -0
  164. package/src/a2a/agent-card.ts +66 -0
  165. package/src/a2a/bridge.ts +168 -0
  166. package/src/a2a/client.ts +92 -0
  167. package/src/a2a/server.ts +234 -0
  168. package/src/abi.ts +1373 -0
  169. package/src/adapters/agentkit.ts +83 -0
  170. package/src/adapters/generic.ts +62 -0
  171. package/src/adapters/index.ts +4 -0
  172. package/src/adapters/langchain.ts +282 -0
  173. package/src/adapters/openclaw.ts +203 -0
  174. package/src/aggregator.ts +203 -0
  175. package/src/backends/acp.ts +199 -0
  176. package/src/backends/types.ts +78 -0
  177. package/src/bridge.ts +263 -0
  178. package/src/cli.ts +397 -0
  179. package/src/discover.ts +187 -0
  180. package/src/escrow.ts +284 -0
  181. package/src/index.ts +245 -0
  182. package/src/intents.ts +166 -0
  183. package/src/matching.ts +192 -0
  184. package/src/pipelineAbi.ts +74 -0
  185. package/src/pipelines.ts +253 -0
  186. package/src/registry.ts +232 -0
  187. package/src/reputation.ts +43 -0
  188. package/src/router.ts +279 -0
  189. package/src/simple.ts +366 -0
  190. package/src/sources/a2a-wellknown.ts +120 -0
  191. package/src/sources/acp.ts +91 -0
  192. package/src/sources/adp.ts +64 -0
  193. package/src/sources/erc8004.ts +166 -0
  194. package/src/sources/index.ts +52 -0
  195. package/src/sources/kompass-registry.ts +67 -0
  196. package/src/sources/l402-directory.ts +51 -0
  197. package/src/sources/mcp-registry.ts +104 -0
  198. package/src/sources/skills.ts +161 -0
  199. package/src/sources/types.ts +82 -0
  200. package/src/sources/x402-ecosystem.ts +86 -0
  201. package/src/types.ts +147 -0
  202. package/src/unified.ts +155 -0
  203. package/src/x402.ts +122 -0
  204. package/tests/pipelineFlow.test.ts +239 -0
  205. package/tsconfig.json +20 -0
@@ -0,0 +1,234 @@
1
+ /**
2
+ * Kompass A2A Server
3
+ * Exposes Kompass discovery + coordination as an A2A-compatible agent.
4
+ * Any A2A client can send tasks to Kompass to discover or coordinate agents.
5
+ */
6
+
7
+ import express from "express";
8
+ import { createKompassAgentCard } from "./agent-card.js";
9
+ import { KompassUnified } from "../unified.js";
10
+ import { A2ABridge, type CoordinationStep } from "./bridge.js";
11
+ import { ProtocolBridge } from "../bridge.js";
12
+ import { AGENT_CARD_PATH } from "@a2a-js/sdk";
13
+
14
+ export interface KompassA2AServerOptions {
15
+ port?: number;
16
+ hostname?: string;
17
+ kompass?: KompassUnified;
18
+ }
19
+
20
+ export async function startA2AServer(options: KompassA2AServerOptions) {
21
+ const port = options.port ?? 3000;
22
+ const hostname = options.hostname ?? "localhost";
23
+ const baseUrl = `http://${hostname}:${port}`;
24
+
25
+ // Initialize Kompass if not provided
26
+ const kompass = options.kompass ?? (await KompassUnified.create());
27
+
28
+ // Create agent card
29
+ const agentCard = createKompassAgentCard({ url: baseUrl });
30
+
31
+ // Create A2A bridge
32
+ const protocolBridge = new ProtocolBridge();
33
+ const a2aBridge = new A2ABridge(protocolBridge);
34
+
35
+ const app = express();
36
+ app.use(express.json());
37
+
38
+ // ── Agent Card (Discovery) ─────────────────────────────
39
+
40
+ app.get(AGENT_CARD_PATH, (_req, res) => {
41
+ res.json(agentCard);
42
+ });
43
+
44
+ // Also serve at /agent-card.json for convenience
45
+ app.get("/agent-card.json", (_req, res) => {
46
+ res.json(agentCard);
47
+ });
48
+
49
+ // ── A2A JSON-RPC Endpoint ──────────────────────────────
50
+
51
+ app.post("/", async (req, res) => {
52
+ const { method, params, id } = req.body;
53
+
54
+ try {
55
+ let result: unknown;
56
+
57
+ switch (method) {
58
+ case "message/send":
59
+ case "SendMessage": {
60
+ const message = params?.message;
61
+ const text = extractText(message);
62
+
63
+ if (!text) {
64
+ res.json(jsonRpcError(id, -32602, "No text in message"));
65
+ return;
66
+ }
67
+
68
+ // Parse intent from message
69
+ result = await handleTask(text, kompass, a2aBridge);
70
+ break;
71
+ }
72
+
73
+ case "tasks/get":
74
+ case "GetTask": {
75
+ // For now, return task not found (we're stateless)
76
+ res.json(jsonRpcError(id, -32001, "Task not found — Kompass is stateless"));
77
+ return;
78
+ }
79
+
80
+ case "tasks/cancel":
81
+ case "CancelTask": {
82
+ res.json(jsonRpcError(id, -32001, "Task not cancelable"));
83
+ return;
84
+ }
85
+
86
+ default:
87
+ res.json(jsonRpcError(id, -32601, `Method not found: ${method}`));
88
+ return;
89
+ }
90
+
91
+ res.json({
92
+ jsonrpc: "2.0",
93
+ id,
94
+ result,
95
+ });
96
+ } catch (err) {
97
+ res.json(jsonRpcError(id, -32603, err instanceof Error ? err.message : String(err)));
98
+ }
99
+ });
100
+
101
+ // ── Health & Info ──────────────────────────────────────
102
+
103
+ app.get("/health", async (_req, res) => {
104
+ const sources = await kompass.sources();
105
+ const online = sources.filter((s) => s.healthy).length;
106
+ res.json({
107
+ status: "healthy",
108
+ sources: `${online}/${sources.length} online`,
109
+ protocol: "a2a",
110
+ version: "1.0.0",
111
+ });
112
+ });
113
+
114
+ // ── Start ──────────────────────────────────────────────
115
+
116
+ app.listen(port, () => {
117
+ console.log(`\n🟢 Kompass A2A Server running at ${baseUrl}`);
118
+ console.log(` Agent Card: ${baseUrl}${AGENT_CARD_PATH}`);
119
+ console.log(` JSON-RPC: POST ${baseUrl}/`);
120
+ console.log(` Health: GET ${baseUrl}/health\n`);
121
+ });
122
+
123
+ return { app, baseUrl, agentCard };
124
+ }
125
+
126
+ // ── Helpers ──────────────────────────────────────────────
127
+
128
+ function extractText(message: any): string | null {
129
+ if (!message?.parts) return null;
130
+ for (const part of message.parts) {
131
+ if (part.type === "text" && part.text) return part.text;
132
+ }
133
+ return null;
134
+ }
135
+
136
+ async function handleTask(text: string, kompass: KompassUnified, bridge: A2ABridge) {
137
+ const lower = text.toLowerCase();
138
+
139
+ // Detect intent: discovery, hire, or coordination
140
+ if (lower.startsWith("find ") || lower.startsWith("discover ") || lower.startsWith("search ")) {
141
+ // Discovery task
142
+ const query = text.replace(/^(find|discover|search)\s+/i, "");
143
+ const result = await kompass.find(query, { limit: 10 });
144
+
145
+ return {
146
+ id: `kompass-${Date.now()}`,
147
+ status: { state: "completed" },
148
+ artifacts: [
149
+ {
150
+ parts: [
151
+ {
152
+ type: "text",
153
+ text: `Found ${result.agents.length} agents across ${result.sources.length} registries:\n\n` +
154
+ result.agents
155
+ .map(
156
+ (a, i) =>
157
+ `${i + 1}. ${a.name} [${a.protocol.toUpperCase()}] (${a.source})\n ${a.description.slice(0, 100)}`
158
+ )
159
+ .join("\n\n"),
160
+ },
161
+ {
162
+ type: "data",
163
+ data: {
164
+ agents: result.agents,
165
+ sources: result.sources,
166
+ queryTimeMs: result.queryTimeMs,
167
+ },
168
+ },
169
+ ],
170
+ },
171
+ ],
172
+ };
173
+ }
174
+
175
+ if (lower.startsWith("coordinate ") || lower.startsWith("orchestrate ")) {
176
+ // Coordination task
177
+ const intent = text.replace(/^(coordinate|orchestrate)\s+/i, "");
178
+ const steps: CoordinationStep[] = [
179
+ { id: "research", role: "research", query: `research ${intent}` },
180
+ { id: "analysis", role: "analysis", query: `analyze ${intent}`, dependsOn: "research" },
181
+ ];
182
+
183
+ const result = await bridge.coordinate(steps, async (query) => {
184
+ const found = await kompass.find(query, { limit: 3 });
185
+ return found.agents[0] ?? null;
186
+ });
187
+
188
+ return {
189
+ id: `kompass-coord-${Date.now()}`,
190
+ status: { state: result.completedCount > 0 ? "completed" : "failed" },
191
+ artifacts: [
192
+ {
193
+ parts: [
194
+ {
195
+ type: "text",
196
+ text: `Coordination complete: ${result.completedCount}/${result.totalCount} steps succeeded.`,
197
+ },
198
+ { type: "data", data: result },
199
+ ],
200
+ },
201
+ ],
202
+ };
203
+ }
204
+
205
+ // Default: treat as a discovery query
206
+ const result = await kompass.find(text, { limit: 10 });
207
+
208
+ return {
209
+ id: `kompass-${Date.now()}`,
210
+ status: { state: "completed" },
211
+ artifacts: [
212
+ {
213
+ parts: [
214
+ {
215
+ type: "text",
216
+ text: `Found ${result.agents.length} agents for "${text}":\n\n` +
217
+ result.agents
218
+ .map((a) => `• ${a.name} [${a.protocol}] — ${a.description.slice(0, 80)}`)
219
+ .join("\n"),
220
+ },
221
+ { type: "data", data: { agents: result.agents, sources: result.sources } },
222
+ ],
223
+ },
224
+ ],
225
+ };
226
+ }
227
+
228
+ function jsonRpcError(id: unknown, code: number, message: string) {
229
+ return {
230
+ jsonrpc: "2.0",
231
+ id,
232
+ error: { code, message },
233
+ };
234
+ }