@terminals-tech/agent-zero 1.0.0 → 2.0.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 (130) hide show
  1. package/LICENSE +21 -0
  2. package/THEORY.md +207 -0
  3. package/dist/agency/commandRouter.d.ts +10 -0
  4. package/dist/agency/commandRouter.d.ts.map +1 -1
  5. package/dist/agency/commandRouter.js +206 -0
  6. package/dist/agency/commandRouter.js.map +1 -1
  7. package/dist/agency/runtime.d.ts +26 -0
  8. package/dist/agency/runtime.d.ts.map +1 -1
  9. package/dist/agency/runtime.js +138 -6
  10. package/dist/agency/runtime.js.map +1 -1
  11. package/dist/channels/gemini.d.ts +73 -0
  12. package/dist/channels/gemini.d.ts.map +1 -0
  13. package/dist/channels/gemini.js +246 -0
  14. package/dist/channels/gemini.js.map +1 -0
  15. package/dist/channels/sms.d.ts.map +1 -1
  16. package/dist/channels/sms.js +1 -2
  17. package/dist/channels/sms.js.map +1 -1
  18. package/dist/interop/a2a.d.ts +133 -0
  19. package/dist/interop/a2a.d.ts.map +1 -0
  20. package/dist/interop/a2a.js +357 -0
  21. package/dist/interop/a2a.js.map +1 -0
  22. package/dist/interop/index.d.ts +10 -0
  23. package/dist/interop/index.d.ts.map +1 -0
  24. package/dist/interop/index.js +10 -0
  25. package/dist/interop/index.js.map +1 -0
  26. package/dist/interop/mcp.d.ts +111 -0
  27. package/dist/interop/mcp.d.ts.map +1 -0
  28. package/dist/interop/mcp.js +337 -0
  29. package/dist/interop/mcp.js.map +1 -0
  30. package/dist/moltbook/approvalGate.d.ts +23 -0
  31. package/dist/moltbook/approvalGate.d.ts.map +1 -1
  32. package/dist/moltbook/approvalGate.js +45 -0
  33. package/dist/moltbook/approvalGate.js.map +1 -1
  34. package/dist/moltbook/attentionField.d.ts +14 -0
  35. package/dist/moltbook/attentionField.d.ts.map +1 -1
  36. package/dist/moltbook/attentionField.js +37 -1
  37. package/dist/moltbook/attentionField.js.map +1 -1
  38. package/dist/moltbook/daemon.d.ts +27 -0
  39. package/dist/moltbook/daemon.d.ts.map +1 -1
  40. package/dist/moltbook/daemon.js +184 -5
  41. package/dist/moltbook/daemon.js.map +1 -1
  42. package/dist/moltbook/responseComposer.d.ts +7 -2
  43. package/dist/moltbook/responseComposer.d.ts.map +1 -1
  44. package/dist/moltbook/responseComposer.js +36 -7
  45. package/dist/moltbook/responseComposer.js.map +1 -1
  46. package/dist/moltbook/strategicContext.d.ts +89 -0
  47. package/dist/moltbook/strategicContext.d.ts.map +1 -0
  48. package/dist/moltbook/strategicContext.js +283 -0
  49. package/dist/moltbook/strategicContext.js.map +1 -0
  50. package/dist/primitives/index.d.ts +6 -2
  51. package/dist/primitives/index.d.ts.map +1 -1
  52. package/dist/primitives/index.js +6 -2
  53. package/dist/primitives/index.js.map +1 -1
  54. package/dist/rail/persistence.d.ts +70 -1
  55. package/dist/rail/persistence.d.ts.map +1 -1
  56. package/dist/rail/persistence.js +270 -3
  57. package/dist/rail/persistence.js.map +1 -1
  58. package/dist/rail/plugin.d.ts +76 -0
  59. package/dist/rail/plugin.d.ts.map +1 -0
  60. package/dist/rail/plugin.js +141 -0
  61. package/dist/rail/plugin.js.map +1 -0
  62. package/dist/rail/server.d.ts +121 -30
  63. package/dist/rail/server.d.ts.map +1 -1
  64. package/dist/rail/server.js +404 -28
  65. package/dist/rail/server.js.map +1 -1
  66. package/dist/rail/wsServer.d.ts +7 -0
  67. package/dist/rail/wsServer.d.ts.map +1 -1
  68. package/dist/rail/wsServer.js +233 -11
  69. package/dist/rail/wsServer.js.map +1 -1
  70. package/dist/resonance/globalKuramoto.d.ts +20 -0
  71. package/dist/resonance/globalKuramoto.d.ts.map +1 -1
  72. package/dist/resonance/globalKuramoto.js +95 -2
  73. package/dist/resonance/globalKuramoto.js.map +1 -1
  74. package/dist/resonance/kuramoto.d.ts +6 -0
  75. package/dist/resonance/kuramoto.d.ts.map +1 -1
  76. package/dist/resonance/kuramoto.js +25 -0
  77. package/dist/resonance/kuramoto.js.map +1 -1
  78. package/dist/routing/index.d.ts +2 -0
  79. package/dist/routing/index.d.ts.map +1 -1
  80. package/dist/routing/index.js +1 -0
  81. package/dist/routing/index.js.map +1 -1
  82. package/dist/routing/modelRegistry.d.ts +54 -0
  83. package/dist/routing/modelRegistry.d.ts.map +1 -0
  84. package/dist/routing/modelRegistry.js +150 -0
  85. package/dist/routing/modelRegistry.js.map +1 -0
  86. package/dist/routing/thermodynamic.d.ts +14 -3
  87. package/dist/routing/thermodynamic.d.ts.map +1 -1
  88. package/dist/routing/thermodynamic.js +26 -12
  89. package/dist/routing/thermodynamic.js.map +1 -1
  90. package/dist/runtime/agent-zero.d.ts +38 -2
  91. package/dist/runtime/agent-zero.d.ts.map +1 -1
  92. package/dist/runtime/agent-zero.js +110 -7
  93. package/dist/runtime/agent-zero.js.map +1 -1
  94. package/dist/runtime/contextWindow.d.ts +62 -0
  95. package/dist/runtime/contextWindow.d.ts.map +1 -0
  96. package/dist/runtime/contextWindow.js +125 -0
  97. package/dist/runtime/contextWindow.js.map +1 -0
  98. package/dist/runtime/identity.d.ts +65 -0
  99. package/dist/runtime/identity.d.ts.map +1 -0
  100. package/dist/runtime/identity.js +199 -0
  101. package/dist/runtime/identity.js.map +1 -0
  102. package/dist/runtime/index.d.ts +6 -0
  103. package/dist/runtime/index.d.ts.map +1 -1
  104. package/dist/runtime/index.js +6 -0
  105. package/dist/runtime/index.js.map +1 -1
  106. package/dist/runtime/sessionStore.d.ts +70 -0
  107. package/dist/runtime/sessionStore.d.ts.map +1 -0
  108. package/dist/runtime/sessionStore.js +134 -0
  109. package/dist/runtime/sessionStore.js.map +1 -0
  110. package/dist/security/capabilities.d.ts +46 -0
  111. package/dist/security/capabilities.d.ts.map +1 -1
  112. package/dist/security/capabilities.js +176 -0
  113. package/dist/security/capabilities.js.map +1 -1
  114. package/dist/security/combinators.d.ts +89 -0
  115. package/dist/security/combinators.d.ts.map +1 -0
  116. package/dist/security/combinators.js +168 -0
  117. package/dist/security/combinators.js.map +1 -0
  118. package/dist/security/index.d.ts +7 -1
  119. package/dist/security/index.d.ts.map +1 -1
  120. package/dist/security/index.js +4 -1
  121. package/dist/security/index.js.map +1 -1
  122. package/dist/security/isolation.d.ts +76 -0
  123. package/dist/security/isolation.d.ts.map +1 -0
  124. package/dist/security/isolation.js +118 -0
  125. package/dist/security/isolation.js.map +1 -0
  126. package/dist/security/sandbox.d.ts +38 -1
  127. package/dist/security/sandbox.d.ts.map +1 -1
  128. package/dist/security/sandbox.js +68 -8
  129. package/dist/security/sandbox.js.map +1 -1
  130. package/package.json +13 -3
@@ -0,0 +1,133 @@
1
+ /**
2
+ * A2A (Agent-to-Agent) Protocol Bridge
3
+ *
4
+ * Translates between Google's A2A protocol and Agent Zero's AXON message protocol.
5
+ * Enables interop with any A2A-compliant agent without modifying core rail infrastructure.
6
+ *
7
+ * A2A Spec: https://github.com/google/A2A
8
+ * AXON: Agent Zero eXtended Object Notation (see primitives/types.ts)
9
+ */
10
+ import type { Message, MessageKind } from '../primitives/types.js';
11
+ /** A2A Agent Card — describes an agent's capabilities and endpoint */
12
+ export interface A2AAgentCard {
13
+ name: string;
14
+ description: string;
15
+ url: string;
16
+ version: string;
17
+ capabilities: {
18
+ streaming: boolean;
19
+ pushNotifications: boolean;
20
+ stateTransitionHistory: boolean;
21
+ };
22
+ skills: Array<{
23
+ id: string;
24
+ name: string;
25
+ description: string;
26
+ inputSchema?: Record<string, unknown>;
27
+ outputSchema?: Record<string, unknown>;
28
+ }>;
29
+ securitySchemes?: Record<string, {
30
+ type: 'apiKey' | 'http' | 'oauth2';
31
+ in?: 'header' | 'query';
32
+ name?: string;
33
+ }>;
34
+ }
35
+ /** A2A Task — unit of work in the A2A protocol */
36
+ export interface A2ATask {
37
+ id: string;
38
+ status: A2ATaskStatus;
39
+ artifacts?: Array<{
40
+ name?: string;
41
+ parts: Array<{
42
+ type: 'text';
43
+ text: string;
44
+ } | {
45
+ type: 'data';
46
+ data: string;
47
+ mimeType: string;
48
+ }>;
49
+ }>;
50
+ history?: Array<{
51
+ role: 'user' | 'agent';
52
+ parts: Array<{
53
+ type: 'text';
54
+ text: string;
55
+ }>;
56
+ }>;
57
+ metadata?: Record<string, unknown>;
58
+ }
59
+ export type A2ATaskStatus = 'working' | 'completed' | 'failed' | 'canceled' | 'rejected' | 'input_required' | 'auth_required';
60
+ /**
61
+ * Map an A2A task status to the corresponding AXON MessageKind.
62
+ */
63
+ export declare function a2aStatusToAxonKind(status: A2ATaskStatus): MessageKind;
64
+ /**
65
+ * Map an AXON MessageKind to the corresponding A2A task status.
66
+ */
67
+ export declare function axonKindToA2AStatus(kind: MessageKind): A2ATaskStatus;
68
+ /**
69
+ * Convert an A2A Agent Card to a rail enrollment record.
70
+ */
71
+ export declare function agentCardToEnrollment(card: A2AAgentCard): {
72
+ agentId: string;
73
+ agentName: string;
74
+ capabilities: string[];
75
+ platform: string;
76
+ };
77
+ /**
78
+ * Convert a rail enrollment record to an A2A Agent Card.
79
+ */
80
+ export declare function enrollmentToAgentCard(enrollment: {
81
+ agentId: string;
82
+ agentName: string;
83
+ capabilities: string[];
84
+ }): A2AAgentCard;
85
+ /**
86
+ * Convert an A2A Task to an AXON Message.
87
+ */
88
+ export declare function a2aTaskToAxon(task: A2ATask, fromAgentId: string): Message;
89
+ /**
90
+ * Convert an AXON Message to an A2A Task.
91
+ */
92
+ export declare function axonToA2ATask(message: Message, taskId?: string): A2ATask;
93
+ export declare class A2ABridge {
94
+ private tasks;
95
+ private agentCards;
96
+ /**
97
+ * Register an external A2A agent by its Agent Card.
98
+ * Returns the generated enrollment record for the rail.
99
+ */
100
+ registerAgent(card: A2AAgentCard): {
101
+ agentId: string;
102
+ agentName: string;
103
+ };
104
+ /**
105
+ * Translate an incoming A2A JSON-RPC method + params to an AXON Message.
106
+ * Supports: tasks/send, tasks/sendSubscribe, tasks/get, tasks/cancel.
107
+ */
108
+ fromA2A(method: string, params: unknown): Message | null;
109
+ /**
110
+ * Translate an outgoing AXON Message to A2A JSON-RPC format.
111
+ */
112
+ toA2A(message: Message): {
113
+ method: string;
114
+ params: unknown;
115
+ } | null;
116
+ /**
117
+ * Evict oldest tasks when the map exceeds MAX_TASKS.
118
+ */
119
+ private evictIfNeeded;
120
+ /**
121
+ * Get a task by ID.
122
+ */
123
+ getTask(taskId: string): A2ATask | undefined;
124
+ /**
125
+ * Update a task's status.
126
+ */
127
+ updateTaskStatus(taskId: string, status: A2ATaskStatus): void;
128
+ /**
129
+ * Get all registered A2A Agent Cards.
130
+ */
131
+ getAgentCards(): A2AAgentCard[];
132
+ }
133
+ //# sourceMappingURL=a2a.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"a2a.d.ts","sourceRoot":"","sources":["../../src/interop/a2a.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,357 @@
1
+ /**
2
+ * A2A (Agent-to-Agent) Protocol Bridge
3
+ *
4
+ * Translates between Google's A2A protocol and Agent Zero's AXON message protocol.
5
+ * Enables interop with any A2A-compliant agent without modifying core rail infrastructure.
6
+ *
7
+ * A2A Spec: https://github.com/google/A2A
8
+ * AXON: Agent Zero eXtended Object Notation (see primitives/types.ts)
9
+ */
10
+ import { randomUUID } from 'crypto';
11
+ // ============================================================================
12
+ // STATUS MAPPING
13
+ // ============================================================================
14
+ const a2aStatusToAxonKindMap = {
15
+ working: 'think',
16
+ completed: 'crystallize',
17
+ failed: 'halt',
18
+ canceled: 'halt',
19
+ rejected: 'halt',
20
+ input_required: 'gradient',
21
+ auth_required: 'gradient',
22
+ };
23
+ const axonKindToA2AStatusMap = {
24
+ think: 'working',
25
+ act: 'working',
26
+ percept: 'working',
27
+ spawn: 'working',
28
+ resonate: 'working',
29
+ attune: 'working',
30
+ broadcast: 'working',
31
+ crystallize: 'completed',
32
+ halt: 'failed',
33
+ invoke: 'input_required',
34
+ gradient: 'input_required',
35
+ };
36
+ /**
37
+ * Map an A2A task status to the corresponding AXON MessageKind.
38
+ */
39
+ export function a2aStatusToAxonKind(status) {
40
+ return a2aStatusToAxonKindMap[status];
41
+ }
42
+ /**
43
+ * Map an AXON MessageKind to the corresponding A2A task status.
44
+ */
45
+ export function axonKindToA2AStatus(kind) {
46
+ return axonKindToA2AStatusMap[kind] ?? 'working';
47
+ }
48
+ // ============================================================================
49
+ // TRANSLATION FUNCTIONS
50
+ // ============================================================================
51
+ /**
52
+ * Convert an A2A Agent Card to a rail enrollment record.
53
+ */
54
+ export function agentCardToEnrollment(card) {
55
+ const capabilities = card.skills.map(s => s.id);
56
+ if (card.capabilities.streaming)
57
+ capabilities.push('streaming');
58
+ if (card.capabilities.pushNotifications)
59
+ capabilities.push('push_notifications');
60
+ if (card.capabilities.stateTransitionHistory)
61
+ capabilities.push('state_history');
62
+ return {
63
+ agentId: `a2a:${card.name.toLowerCase().replace(/\s+/g, '-')}`,
64
+ agentName: card.name,
65
+ capabilities,
66
+ platform: 'a2a',
67
+ };
68
+ }
69
+ /**
70
+ * Convert a rail enrollment record to an A2A Agent Card.
71
+ */
72
+ export function enrollmentToAgentCard(enrollment) {
73
+ const skills = enrollment.capabilities
74
+ .filter(c => c !== 'streaming' && c !== 'push_notifications' && c !== 'state_history')
75
+ .map(cap => ({
76
+ id: cap,
77
+ name: cap,
78
+ description: `Capability: ${cap}`,
79
+ }));
80
+ return {
81
+ name: enrollment.agentName,
82
+ description: `Agent Zero agent: ${enrollment.agentName}`,
83
+ url: '',
84
+ version: '1.0.0',
85
+ capabilities: {
86
+ streaming: enrollment.capabilities.includes('streaming'),
87
+ pushNotifications: enrollment.capabilities.includes('push_notifications'),
88
+ stateTransitionHistory: enrollment.capabilities.includes('state_history'),
89
+ },
90
+ skills,
91
+ };
92
+ }
93
+ /**
94
+ * Convert an A2A Task to an AXON Message.
95
+ */
96
+ export function a2aTaskToAxon(task, fromAgentId) {
97
+ const kind = a2aStatusToAxonKind(task.status);
98
+ // Extract text content from artifacts or history
99
+ let content;
100
+ if (task.artifacts && task.artifacts.length > 0) {
101
+ const textParts = [];
102
+ for (const artifact of task.artifacts) {
103
+ for (const part of artifact.parts) {
104
+ if (part.type === 'text') {
105
+ textParts.push(part.text);
106
+ }
107
+ }
108
+ }
109
+ if (textParts.length > 0) {
110
+ content = textParts.join('\n');
111
+ }
112
+ }
113
+ if (!content && task.history && task.history.length > 0) {
114
+ const lastEntry = task.history[task.history.length - 1];
115
+ const textParts = lastEntry.parts
116
+ .filter((p) => p.type === 'text')
117
+ .map(p => p.text);
118
+ if (textParts.length > 0) {
119
+ content = textParts.join('\n');
120
+ }
121
+ }
122
+ return {
123
+ id: task.id,
124
+ kind,
125
+ from: fromAgentId,
126
+ payload: {
127
+ content: content ?? '',
128
+ a2aTaskId: task.id,
129
+ a2aStatus: task.status,
130
+ metadata: task.metadata,
131
+ },
132
+ timestamp: Date.now(),
133
+ };
134
+ }
135
+ /**
136
+ * Convert an AXON Message to an A2A Task.
137
+ */
138
+ export function axonToA2ATask(message, taskId) {
139
+ const status = axonKindToA2AStatus(message.kind);
140
+ const payload = message.payload;
141
+ const content = typeof payload?.content === 'string'
142
+ ? payload.content
143
+ : typeof message.payload === 'string'
144
+ ? message.payload
145
+ : '';
146
+ const task = {
147
+ id: taskId ?? message.id,
148
+ status,
149
+ metadata: {
150
+ axonKind: message.kind,
151
+ axonFrom: message.from,
152
+ ...(typeof payload?.metadata === 'object' && payload.metadata !== null
153
+ ? payload.metadata
154
+ : {}),
155
+ },
156
+ };
157
+ if (content) {
158
+ task.artifacts = [
159
+ {
160
+ parts: [{ type: 'text', text: content }],
161
+ },
162
+ ];
163
+ }
164
+ return task;
165
+ }
166
+ // ============================================================================
167
+ // A2A BRIDGE CLASS
168
+ // ============================================================================
169
+ /**
170
+ * Bidirectional bridge between A2A JSON-RPC protocol and AXON messages.
171
+ * Manages task state and agent card registry.
172
+ */
173
+ /** Maximum number of tasks to retain in memory before LRU eviction */
174
+ const MAX_TASKS = 10_000;
175
+ export class A2ABridge {
176
+ tasks = new Map();
177
+ agentCards = new Map();
178
+ /**
179
+ * Register an external A2A agent by its Agent Card.
180
+ * Returns the generated enrollment record for the rail.
181
+ */
182
+ registerAgent(card) {
183
+ const enrollment = agentCardToEnrollment(card);
184
+ this.agentCards.set(enrollment.agentId, card);
185
+ return { agentId: enrollment.agentId, agentName: enrollment.agentName };
186
+ }
187
+ /**
188
+ * Translate an incoming A2A JSON-RPC method + params to an AXON Message.
189
+ * Supports: tasks/send, tasks/sendSubscribe, tasks/get, tasks/cancel.
190
+ */
191
+ fromA2A(method, params) {
192
+ const p = params;
193
+ switch (method) {
194
+ case 'tasks/send':
195
+ case 'tasks/sendSubscribe': {
196
+ if (!p)
197
+ return null;
198
+ const taskId = p.id ?? randomUUID();
199
+ const message = p.message;
200
+ if (!message)
201
+ return null;
202
+ const textParts = message.parts
203
+ .filter(part => part.type === 'text' && part.text)
204
+ .map(part => part.text);
205
+ const content = textParts.join('\n');
206
+ // Create or update task
207
+ const existingTask = this.tasks.get(taskId);
208
+ const task = existingTask ?? {
209
+ id: taskId,
210
+ status: 'working',
211
+ history: [],
212
+ };
213
+ task.history = task.history ?? [];
214
+ task.history.push({
215
+ role: message.role,
216
+ parts: message.parts.filter((pt) => pt.type === 'text' && typeof pt.text === 'string'),
217
+ });
218
+ this.tasks.set(taskId, task);
219
+ this.evictIfNeeded();
220
+ const fromId = p.agentId ?? 'a2a:external';
221
+ return {
222
+ id: randomUUID(),
223
+ kind: 'percept',
224
+ from: fromId,
225
+ payload: {
226
+ content,
227
+ a2aTaskId: taskId,
228
+ a2aMethod: method,
229
+ },
230
+ timestamp: Date.now(),
231
+ };
232
+ }
233
+ case 'tasks/get': {
234
+ if (!p)
235
+ return null;
236
+ const taskId = p.id;
237
+ if (!taskId)
238
+ return null;
239
+ return {
240
+ id: randomUUID(),
241
+ kind: 'gradient',
242
+ from: 'a2a:external',
243
+ payload: {
244
+ content: '',
245
+ a2aTaskId: taskId,
246
+ a2aMethod: method,
247
+ },
248
+ timestamp: Date.now(),
249
+ };
250
+ }
251
+ case 'tasks/cancel': {
252
+ if (!p)
253
+ return null;
254
+ const taskId = p.id;
255
+ if (!taskId)
256
+ return null;
257
+ const task = this.tasks.get(taskId);
258
+ if (task) {
259
+ task.status = 'canceled';
260
+ this.tasks.set(taskId, task);
261
+ }
262
+ return {
263
+ id: randomUUID(),
264
+ kind: 'halt',
265
+ from: 'a2a:external',
266
+ payload: {
267
+ content: '',
268
+ a2aTaskId: taskId,
269
+ a2aMethod: method,
270
+ },
271
+ timestamp: Date.now(),
272
+ };
273
+ }
274
+ default:
275
+ return null;
276
+ }
277
+ }
278
+ /**
279
+ * Translate an outgoing AXON Message to A2A JSON-RPC format.
280
+ */
281
+ toA2A(message) {
282
+ const payload = message.payload;
283
+ const a2aTaskId = payload?.a2aTaskId ?? message.id;
284
+ const content = typeof payload?.content === 'string'
285
+ ? payload.content
286
+ : typeof message.payload === 'string'
287
+ ? message.payload
288
+ : '';
289
+ const status = axonKindToA2AStatus(message.kind);
290
+ // Update internal task state
291
+ let task = this.tasks.get(a2aTaskId);
292
+ if (!task) {
293
+ task = { id: a2aTaskId, status };
294
+ this.tasks.set(a2aTaskId, task);
295
+ this.evictIfNeeded();
296
+ }
297
+ else {
298
+ task.status = status;
299
+ }
300
+ if (content) {
301
+ task.artifacts = [
302
+ {
303
+ parts: [{ type: 'text', text: content }],
304
+ },
305
+ ];
306
+ }
307
+ return {
308
+ method: 'tasks/statusUpdate',
309
+ params: {
310
+ id: a2aTaskId,
311
+ status,
312
+ artifacts: task.artifacts,
313
+ metadata: {
314
+ axonKind: message.kind,
315
+ axonFrom: message.from,
316
+ },
317
+ },
318
+ };
319
+ }
320
+ /**
321
+ * Evict oldest tasks when the map exceeds MAX_TASKS.
322
+ */
323
+ evictIfNeeded() {
324
+ if (this.tasks.size <= MAX_TASKS)
325
+ return;
326
+ const excess = this.tasks.size - MAX_TASKS;
327
+ const keys = this.tasks.keys();
328
+ for (let i = 0; i < excess; i++) {
329
+ const { value, done } = keys.next();
330
+ if (done)
331
+ break;
332
+ this.tasks.delete(value);
333
+ }
334
+ }
335
+ /**
336
+ * Get a task by ID.
337
+ */
338
+ getTask(taskId) {
339
+ return this.tasks.get(taskId);
340
+ }
341
+ /**
342
+ * Update a task's status.
343
+ */
344
+ updateTaskStatus(taskId, status) {
345
+ const task = this.tasks.get(taskId);
346
+ if (task) {
347
+ task.status = status;
348
+ }
349
+ }
350
+ /**
351
+ * Get all registered A2A Agent Cards.
352
+ */
353
+ getAgentCards() {
354
+ return Array.from(this.agentCards.values());
355
+ }
356
+ }
357
+ //# sourceMappingURL=a2a.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"a2a.js","sourceRoot":"","sources":["../../src/interop/a2a.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * @terminals-tech/agent-zero/interop
3
+ *
4
+ * Protocol bridges for A2A (Google) and MCP v2 (Streamable HTTP).
5
+ */
6
+ export { A2ABridge, a2aStatusToAxonKind, axonKindToA2AStatus, agentCardToEnrollment, enrollmentToAgentCard, a2aTaskToAxon, axonToA2ATask, } from './a2a.js';
7
+ export type { A2AAgentCard, A2ATask, A2ATaskStatus, } from './a2a.js';
8
+ export { McpStreamableAdapter, } from './mcp.js';
9
+ export type { McpSession, McpTool, McpRequest, McpResponse, McpRailCallbacks, } from './mcp.js';
10
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/interop/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EACL,SAAS,EACT,mBAAmB,EACnB,mBAAmB,EACnB,qBAAqB,EACrB,qBAAqB,EACrB,aAAa,EACb,aAAa,GACd,MAAM,UAAU,CAAC;AAElB,YAAY,EACV,YAAY,EACZ,OAAO,EACP,aAAa,GACd,MAAM,UAAU,CAAC;AAGlB,OAAO,EACL,oBAAoB,GACrB,MAAM,UAAU,CAAC;AAElB,YAAY,EACV,UAAU,EACV,OAAO,EACP,UAAU,EACV,WAAW,EACX,gBAAgB,GACjB,MAAM,UAAU,CAAC"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * @terminals-tech/agent-zero/interop
3
+ *
4
+ * Protocol bridges for A2A (Google) and MCP v2 (Streamable HTTP).
5
+ */
6
+ // A2A Protocol Bridge
7
+ export { A2ABridge, a2aStatusToAxonKind, axonKindToA2AStatus, agentCardToEnrollment, enrollmentToAgentCard, a2aTaskToAxon, axonToA2ATask, } from './a2a.js';
8
+ // MCP v2 Streamable HTTP Adapter
9
+ export { McpStreamableAdapter, } from './mcp.js';
10
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/interop/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,sBAAsB;AACtB,OAAO,EACL,SAAS,EACT,mBAAmB,EACnB,mBAAmB,EACnB,qBAAqB,EACrB,qBAAqB,EACrB,aAAa,EACb,aAAa,GACd,MAAM,UAAU,CAAC;AAQlB,iCAAiC;AACjC,OAAO,EACL,oBAAoB,GACrB,MAAM,UAAU,CAAC"}
@@ -0,0 +1,111 @@
1
+ /**
2
+ * MCP v2 Streamable HTTP Adapter
3
+ *
4
+ * Exposes Resonance Rail functionality as MCP tools via the Streamable HTTP transport.
5
+ * Self-contained adapter that accepts callbacks for rail operations — does not import
6
+ * or modify any rail internals.
7
+ *
8
+ * MCP Spec: https://modelcontextprotocol.io/specification/2025-11-05
9
+ */
10
+ export interface McpSession {
11
+ id: string;
12
+ createdAt: number;
13
+ lastActivity: number;
14
+ capabilities: {
15
+ streaming: boolean;
16
+ elicitation: boolean;
17
+ };
18
+ }
19
+ export interface McpTool {
20
+ name: string;
21
+ description: string;
22
+ inputSchema: Record<string, unknown>;
23
+ }
24
+ export interface McpRequest {
25
+ jsonrpc: '2.0';
26
+ id: string | number;
27
+ method: string;
28
+ params?: unknown;
29
+ }
30
+ export interface McpResponse {
31
+ jsonrpc: '2.0';
32
+ id: string | number;
33
+ result?: unknown;
34
+ error?: {
35
+ code: number;
36
+ message: string;
37
+ data?: unknown;
38
+ };
39
+ }
40
+ export interface McpRailCallbacks {
41
+ searchTraces: (embedding: number[], limit?: number) => Promise<unknown[]>;
42
+ getAgents: () => Array<{
43
+ id: string;
44
+ name: string;
45
+ platform: string;
46
+ }>;
47
+ getCoherence: () => {
48
+ coherence: number;
49
+ meanPhase: number;
50
+ agentCount: number;
51
+ };
52
+ sendMessage: (message: unknown) => void;
53
+ getStatus: () => Record<string, unknown>;
54
+ }
55
+ export declare class McpStreamableAdapter {
56
+ private sessions;
57
+ private tools;
58
+ private callbacks;
59
+ private cleanupTimer?;
60
+ constructor(callbacks: McpRailCallbacks);
61
+ /**
62
+ * Remove sessions that have been inactive longer than SESSION_TTL.
63
+ */
64
+ private cleanupStaleSessions;
65
+ /**
66
+ * Stop the cleanup timer. Call when shutting down.
67
+ */
68
+ destroy(): void;
69
+ /**
70
+ * Handle an incoming MCP request.
71
+ * Routes to the appropriate handler based on method.
72
+ */
73
+ handleRequest(request: McpRequest, sessionId?: string): Promise<{
74
+ type: 'json' | 'sse';
75
+ sessionId: string;
76
+ response?: McpResponse;
77
+ stream?: AsyncGenerator<McpResponse>;
78
+ }>;
79
+ /**
80
+ * Handle the MCP initialize handshake.
81
+ */
82
+ handleInitialize(request: McpRequest): McpResponse;
83
+ /**
84
+ * Handle tools/list — return all available MCP tools.
85
+ */
86
+ handleToolsList(request?: McpRequest): McpResponse;
87
+ /**
88
+ * Handle tools/call — dispatch to the appropriate rail callback.
89
+ */
90
+ handleToolCall(request: McpRequest): Promise<McpResponse>;
91
+ /**
92
+ * Execute a tool by name with the given arguments.
93
+ */
94
+ private executeTool;
95
+ /**
96
+ * Get or create an MCP session.
97
+ * If sessionId is provided and matches an existing session, returns it.
98
+ * Otherwise creates a new session.
99
+ */
100
+ getOrCreateSession(sessionId?: string): McpSession;
101
+ /**
102
+ * Terminate and remove a session.
103
+ */
104
+ terminateSession(sessionId: string): void;
105
+ /**
106
+ * Generate a cryptographically secure session ID.
107
+ * Format: mcp_{32 random hex characters}
108
+ */
109
+ private generateSessionId;
110
+ }
111
+ //# sourceMappingURL=mcp.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp.d.ts","sourceRoot":"","sources":["../../src/interop/mcp.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAQH,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE;QACZ,SAAS,EAAE,OAAO,CAAC;QACnB,WAAW,EAAE,OAAO,CAAC;KACtB,CAAC;CACH;AAED,MAAM,WAAW,OAAO;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACtC;AAED,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,KAAK,CAAC;IACf,EAAE,EAAE,MAAM,GAAG,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,KAAK,CAAC;IACf,EAAE,EAAE,MAAM,GAAG,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,OAAO,CAAA;KAAE,CAAC;CAC3D;AAED,MAAM,WAAW,gBAAgB;IAC/B,YAAY,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,EAAE,KAAK,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;IAC1E,SAAS,EAAE,MAAM,KAAK,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACvE,YAAY,EAAE,MAAM;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,CAAC;IACjF,WAAW,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,CAAC;IACxC,SAAS,EAAE,MAAM,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAC1C;AA0GD,qBAAa,oBAAoB;IAC/B,OAAO,CAAC,QAAQ,CAAsC;IACtD,OAAO,CAAC,KAAK,CAAY;IACzB,OAAO,CAAC,SAAS,CAAmB;IACpC,OAAO,CAAC,YAAY,CAAC,CAAiC;gBAE1C,SAAS,EAAE,gBAAgB;IAMvC;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAS5B;;OAEG;IACH,OAAO,IAAI,IAAI;IAOf;;;OAGG;IACG,aAAa,CAAC,OAAO,EAAE,UAAU,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;QACpE,IAAI,EAAE,MAAM,GAAG,KAAK,CAAC;QACrB,SAAS,EAAE,MAAM,CAAC;QAClB,QAAQ,CAAC,EAAE,WAAW,CAAC;QACvB,MAAM,CAAC,EAAE,cAAc,CAAC,WAAW,CAAC,CAAC;KACtC,CAAC;IAyCF;;OAEG;IACH,gBAAgB,CAAC,OAAO,EAAE,UAAU,GAAG,WAAW;IAmBlD;;OAEG;IACH,eAAe,CAAC,OAAO,CAAC,EAAE,UAAU,GAAG,WAAW;IAUlD;;OAEG;IACG,cAAc,CAAC,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,WAAW,CAAC;IA0D/D;;OAEG;YACW,WAAW;IAoCzB;;;;OAIG;IACH,kBAAkB,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,UAAU;IAuBlD;;OAEG;IACH,gBAAgB,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;IAIzC;;;OAGG;IACH,OAAO,CAAC,iBAAiB;CAG1B"}