@researchcomputer/agents-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 (274) hide show
  1. package/README.md +60 -0
  2. package/dist/agents/messages.d.ts +29 -0
  3. package/dist/agents/messages.d.ts.map +1 -0
  4. package/dist/agents/messages.js +56 -0
  5. package/dist/agents/messages.js.map +1 -0
  6. package/dist/agents/messages.test.d.ts +2 -0
  7. package/dist/agents/messages.test.d.ts.map +1 -0
  8. package/dist/agents/messages.test.js +80 -0
  9. package/dist/agents/messages.test.js.map +1 -0
  10. package/dist/agents/subagent.d.ts +16 -0
  11. package/dist/agents/subagent.d.ts.map +1 -0
  12. package/dist/agents/subagent.js +46 -0
  13. package/dist/agents/subagent.js.map +1 -0
  14. package/dist/agents/swarm.d.ts +22 -0
  15. package/dist/agents/swarm.d.ts.map +1 -0
  16. package/dist/agents/swarm.js +140 -0
  17. package/dist/agents/swarm.js.map +1 -0
  18. package/dist/agents/tools.d.ts +6 -0
  19. package/dist/agents/tools.d.ts.map +1 -0
  20. package/dist/agents/tools.js +71 -0
  21. package/dist/agents/tools.js.map +1 -0
  22. package/dist/agents/tools.test.d.ts +2 -0
  23. package/dist/agents/tools.test.d.ts.map +1 -0
  24. package/dist/agents/tools.test.js +70 -0
  25. package/dist/agents/tools.test.js.map +1 -0
  26. package/dist/bridge/config.d.ts +21 -0
  27. package/dist/bridge/config.d.ts.map +1 -0
  28. package/dist/bridge/config.js +35 -0
  29. package/dist/bridge/config.js.map +1 -0
  30. package/dist/bridge/config.test.d.ts +2 -0
  31. package/dist/bridge/config.test.d.ts.map +1 -0
  32. package/dist/bridge/config.test.js +79 -0
  33. package/dist/bridge/config.test.js.map +1 -0
  34. package/dist/bridge/server.d.ts +3 -0
  35. package/dist/bridge/server.d.ts.map +1 -0
  36. package/dist/bridge/server.js +316 -0
  37. package/dist/bridge/server.js.map +1 -0
  38. package/dist/context/compression.d.ts +27 -0
  39. package/dist/context/compression.d.ts.map +1 -0
  40. package/dist/context/compression.js +117 -0
  41. package/dist/context/compression.js.map +1 -0
  42. package/dist/context/compression.test.d.ts +2 -0
  43. package/dist/context/compression.test.d.ts.map +1 -0
  44. package/dist/context/compression.test.js +170 -0
  45. package/dist/context/compression.test.js.map +1 -0
  46. package/dist/context/converter.d.ts +11 -0
  47. package/dist/context/converter.d.ts.map +1 -0
  48. package/dist/context/converter.js +40 -0
  49. package/dist/context/converter.js.map +1 -0
  50. package/dist/context/converter.test.d.ts +2 -0
  51. package/dist/context/converter.test.d.ts.map +1 -0
  52. package/dist/context/converter.test.js +110 -0
  53. package/dist/context/converter.test.js.map +1 -0
  54. package/dist/context/run-context.d.ts +9 -0
  55. package/dist/context/run-context.d.ts.map +1 -0
  56. package/dist/context/run-context.js +14 -0
  57. package/dist/context/run-context.js.map +1 -0
  58. package/dist/context/run-context.test.d.ts +2 -0
  59. package/dist/context/run-context.test.d.ts.map +1 -0
  60. package/dist/context/run-context.test.js +34 -0
  61. package/dist/context/run-context.test.js.map +1 -0
  62. package/dist/context/system-prompt.d.ts +24 -0
  63. package/dist/context/system-prompt.d.ts.map +1 -0
  64. package/dist/context/system-prompt.js +69 -0
  65. package/dist/context/system-prompt.js.map +1 -0
  66. package/dist/context/system-prompt.test.d.ts +2 -0
  67. package/dist/context/system-prompt.test.d.ts.map +1 -0
  68. package/dist/context/system-prompt.test.js +134 -0
  69. package/dist/context/system-prompt.test.js.map +1 -0
  70. package/dist/errors.d.ts +24 -0
  71. package/dist/errors.d.ts.map +1 -0
  72. package/dist/errors.js +47 -0
  73. package/dist/errors.js.map +1 -0
  74. package/dist/errors.test.d.ts +2 -0
  75. package/dist/errors.test.d.ts.map +1 -0
  76. package/dist/errors.test.js +68 -0
  77. package/dist/errors.test.js.map +1 -0
  78. package/dist/factory.d.ts +58 -0
  79. package/dist/factory.d.ts.map +1 -0
  80. package/dist/factory.js +282 -0
  81. package/dist/factory.js.map +1 -0
  82. package/dist/factory.test.d.ts +2 -0
  83. package/dist/factory.test.d.ts.map +1 -0
  84. package/dist/factory.test.js +63 -0
  85. package/dist/factory.test.js.map +1 -0
  86. package/dist/fork.test.d.ts +2 -0
  87. package/dist/fork.test.d.ts.map +1 -0
  88. package/dist/fork.test.js +456 -0
  89. package/dist/fork.test.js.map +1 -0
  90. package/dist/index.d.ts +29 -0
  91. package/dist/index.d.ts.map +1 -0
  92. package/dist/index.js +32 -0
  93. package/dist/index.js.map +1 -0
  94. package/dist/mcp/client.d.ts +3 -0
  95. package/dist/mcp/client.d.ts.map +1 -0
  96. package/dist/mcp/client.js +75 -0
  97. package/dist/mcp/client.js.map +1 -0
  98. package/dist/mcp/schema-convert.d.ts +3 -0
  99. package/dist/mcp/schema-convert.d.ts.map +1 -0
  100. package/dist/mcp/schema-convert.js +73 -0
  101. package/dist/mcp/schema-convert.js.map +1 -0
  102. package/dist/mcp/schema-convert.test.d.ts +2 -0
  103. package/dist/mcp/schema-convert.test.d.ts.map +1 -0
  104. package/dist/mcp/schema-convert.test.js +95 -0
  105. package/dist/mcp/schema-convert.test.js.map +1 -0
  106. package/dist/mcp/tools.d.ts +14 -0
  107. package/dist/mcp/tools.d.ts.map +1 -0
  108. package/dist/mcp/tools.js +23 -0
  109. package/dist/mcp/tools.js.map +1 -0
  110. package/dist/mcp/tools.test.d.ts +2 -0
  111. package/dist/mcp/tools.test.d.ts.map +1 -0
  112. package/dist/mcp/tools.test.js +45 -0
  113. package/dist/mcp/tools.test.js.map +1 -0
  114. package/dist/memory/memory.d.ts +3 -0
  115. package/dist/memory/memory.d.ts.map +1 -0
  116. package/dist/memory/memory.js +130 -0
  117. package/dist/memory/memory.js.map +1 -0
  118. package/dist/memory/memory.test.d.ts +2 -0
  119. package/dist/memory/memory.test.d.ts.map +1 -0
  120. package/dist/memory/memory.test.js +94 -0
  121. package/dist/memory/memory.test.js.map +1 -0
  122. package/dist/middleware/hooks.d.ts +18 -0
  123. package/dist/middleware/hooks.d.ts.map +1 -0
  124. package/dist/middleware/hooks.js +71 -0
  125. package/dist/middleware/hooks.js.map +1 -0
  126. package/dist/middleware/hooks.test.d.ts +2 -0
  127. package/dist/middleware/hooks.test.d.ts.map +1 -0
  128. package/dist/middleware/hooks.test.js +172 -0
  129. package/dist/middleware/hooks.test.js.map +1 -0
  130. package/dist/middleware/index.d.ts +7 -0
  131. package/dist/middleware/index.d.ts.map +1 -0
  132. package/dist/middleware/index.js +5 -0
  133. package/dist/middleware/index.js.map +1 -0
  134. package/dist/middleware/permission-middleware.d.ts +11 -0
  135. package/dist/middleware/permission-middleware.d.ts.map +1 -0
  136. package/dist/middleware/permission-middleware.js +56 -0
  137. package/dist/middleware/permission-middleware.js.map +1 -0
  138. package/dist/middleware/permission-middleware.test.d.ts +2 -0
  139. package/dist/middleware/permission-middleware.test.d.ts.map +1 -0
  140. package/dist/middleware/permission-middleware.test.js +170 -0
  141. package/dist/middleware/permission-middleware.test.js.map +1 -0
  142. package/dist/middleware/permissions.d.ts +14 -0
  143. package/dist/middleware/permissions.d.ts.map +1 -0
  144. package/dist/middleware/permissions.js +118 -0
  145. package/dist/middleware/permissions.js.map +1 -0
  146. package/dist/middleware/permissions.test.d.ts +2 -0
  147. package/dist/middleware/permissions.test.d.ts.map +1 -0
  148. package/dist/middleware/permissions.test.js +187 -0
  149. package/dist/middleware/permissions.test.js.map +1 -0
  150. package/dist/middleware/pipeline.d.ts +13 -0
  151. package/dist/middleware/pipeline.d.ts.map +1 -0
  152. package/dist/middleware/pipeline.js +28 -0
  153. package/dist/middleware/pipeline.js.map +1 -0
  154. package/dist/middleware/pipeline.test.d.ts +2 -0
  155. package/dist/middleware/pipeline.test.d.ts.map +1 -0
  156. package/dist/middleware/pipeline.test.js +189 -0
  157. package/dist/middleware/pipeline.test.js.map +1 -0
  158. package/dist/observability/cost-tracker.d.ts +3 -0
  159. package/dist/observability/cost-tracker.d.ts.map +1 -0
  160. package/dist/observability/cost-tracker.js +26 -0
  161. package/dist/observability/cost-tracker.js.map +1 -0
  162. package/dist/observability/cost-tracker.test.d.ts +2 -0
  163. package/dist/observability/cost-tracker.test.d.ts.map +1 -0
  164. package/dist/observability/cost-tracker.test.js +49 -0
  165. package/dist/observability/cost-tracker.test.js.map +1 -0
  166. package/dist/observability/trace.d.ts +2 -0
  167. package/dist/observability/trace.d.ts.map +1 -0
  168. package/dist/observability/trace.js +5 -0
  169. package/dist/observability/trace.js.map +1 -0
  170. package/dist/session/session.d.ts +3 -0
  171. package/dist/session/session.d.ts.map +1 -0
  172. package/dist/session/session.js +62 -0
  173. package/dist/session/session.js.map +1 -0
  174. package/dist/session/session.test.d.ts +2 -0
  175. package/dist/session/session.test.d.ts.map +1 -0
  176. package/dist/session/session.test.js +84 -0
  177. package/dist/session/session.test.js.map +1 -0
  178. package/dist/skills.d.ts +14 -0
  179. package/dist/skills.d.ts.map +1 -0
  180. package/dist/skills.js +31 -0
  181. package/dist/skills.js.map +1 -0
  182. package/dist/skills.test.d.ts +2 -0
  183. package/dist/skills.test.d.ts.map +1 -0
  184. package/dist/skills.test.js +61 -0
  185. package/dist/skills.test.js.map +1 -0
  186. package/dist/tools/ask-user.d.ts +10 -0
  187. package/dist/tools/ask-user.d.ts.map +1 -0
  188. package/dist/tools/ask-user.js +27 -0
  189. package/dist/tools/ask-user.js.map +1 -0
  190. package/dist/tools/bash.d.ts +11 -0
  191. package/dist/tools/bash.d.ts.map +1 -0
  192. package/dist/tools/bash.js +54 -0
  193. package/dist/tools/bash.js.map +1 -0
  194. package/dist/tools/bash.test.d.ts +2 -0
  195. package/dist/tools/bash.test.d.ts.map +1 -0
  196. package/dist/tools/bash.test.js +63 -0
  197. package/dist/tools/bash.test.js.map +1 -0
  198. package/dist/tools/edit.d.ts +10 -0
  199. package/dist/tools/edit.d.ts.map +1 -0
  200. package/dist/tools/edit.js +65 -0
  201. package/dist/tools/edit.js.map +1 -0
  202. package/dist/tools/edit.test.d.ts +2 -0
  203. package/dist/tools/edit.test.d.ts.map +1 -0
  204. package/dist/tools/edit.test.js +60 -0
  205. package/dist/tools/edit.test.js.map +1 -0
  206. package/dist/tools/glob.d.ts +8 -0
  207. package/dist/tools/glob.d.ts.map +1 -0
  208. package/dist/tools/glob.js +43 -0
  209. package/dist/tools/glob.js.map +1 -0
  210. package/dist/tools/glob.test.d.ts +2 -0
  211. package/dist/tools/glob.test.d.ts.map +1 -0
  212. package/dist/tools/glob.test.js +54 -0
  213. package/dist/tools/glob.test.js.map +1 -0
  214. package/dist/tools/grep.d.ts +9 -0
  215. package/dist/tools/grep.d.ts.map +1 -0
  216. package/dist/tools/grep.js +74 -0
  217. package/dist/tools/grep.js.map +1 -0
  218. package/dist/tools/grep.test.d.ts +2 -0
  219. package/dist/tools/grep.test.d.ts.map +1 -0
  220. package/dist/tools/grep.test.js +48 -0
  221. package/dist/tools/grep.test.js.map +1 -0
  222. package/dist/tools/index.d.ts +25 -0
  223. package/dist/tools/index.d.ts.map +1 -0
  224. package/dist/tools/index.js +40 -0
  225. package/dist/tools/index.js.map +1 -0
  226. package/dist/tools/index.test.d.ts +2 -0
  227. package/dist/tools/index.test.d.ts.map +1 -0
  228. package/dist/tools/index.test.js +102 -0
  229. package/dist/tools/index.test.js.map +1 -0
  230. package/dist/tools/notebook-edit.d.ts +9 -0
  231. package/dist/tools/notebook-edit.d.ts.map +1 -0
  232. package/dist/tools/notebook-edit.js +55 -0
  233. package/dist/tools/notebook-edit.js.map +1 -0
  234. package/dist/tools/read.d.ts +9 -0
  235. package/dist/tools/read.d.ts.map +1 -0
  236. package/dist/tools/read.js +48 -0
  237. package/dist/tools/read.js.map +1 -0
  238. package/dist/tools/read.test.d.ts +2 -0
  239. package/dist/tools/read.test.d.ts.map +1 -0
  240. package/dist/tools/read.test.js +68 -0
  241. package/dist/tools/read.test.js.map +1 -0
  242. package/dist/tools/util.d.ts +19 -0
  243. package/dist/tools/util.d.ts.map +1 -0
  244. package/dist/tools/util.js +44 -0
  245. package/dist/tools/util.js.map +1 -0
  246. package/dist/tools/util.test.d.ts +2 -0
  247. package/dist/tools/util.test.d.ts.map +1 -0
  248. package/dist/tools/util.test.js +75 -0
  249. package/dist/tools/util.test.js.map +1 -0
  250. package/dist/tools/web-fetch.d.ts +7 -0
  251. package/dist/tools/web-fetch.d.ts.map +1 -0
  252. package/dist/tools/web-fetch.js +35 -0
  253. package/dist/tools/web-fetch.js.map +1 -0
  254. package/dist/tools/web-search.d.ts +7 -0
  255. package/dist/tools/web-search.d.ts.map +1 -0
  256. package/dist/tools/web-search.js +20 -0
  257. package/dist/tools/web-search.js.map +1 -0
  258. package/dist/tools/write.d.ts +8 -0
  259. package/dist/tools/write.d.ts.map +1 -0
  260. package/dist/tools/write.js +33 -0
  261. package/dist/tools/write.js.map +1 -0
  262. package/dist/tools/write.test.d.ts +2 -0
  263. package/dist/tools/write.test.d.ts.map +1 -0
  264. package/dist/tools/write.test.js +49 -0
  265. package/dist/tools/write.test.js.map +1 -0
  266. package/dist/types.d.ts +257 -0
  267. package/dist/types.d.ts.map +1 -0
  268. package/dist/types.js +2 -0
  269. package/dist/types.js.map +1 -0
  270. package/dist/types.test.d.ts +2 -0
  271. package/dist/types.test.d.ts.map +1 -0
  272. package/dist/types.test.js +69 -0
  273. package/dist/types.test.js.map +1 -0
  274. package/package.json +51 -0
@@ -0,0 +1,456 @@
1
+ import { describe, it, expect } from 'vitest';
2
+ import { getModel } from '@mariozechner/pi-ai';
3
+ import { createCodingAgent } from './factory.js';
4
+ import { createAssistantMessageEventStream } from '@mariozechner/pi-ai';
5
+ // ---------------------------------------------------------------------------
6
+ // Helpers
7
+ // ---------------------------------------------------------------------------
8
+ function makeUserMessage(text) {
9
+ return { role: 'user', content: [{ type: 'text', text }] };
10
+ }
11
+ function makeAssistantMessage(text) {
12
+ return {
13
+ role: 'assistant',
14
+ content: [{ type: 'text', text }],
15
+ stopReason: 'stop',
16
+ api: 'openai-completions',
17
+ provider: 'openai',
18
+ model: 'gpt-4o-mini',
19
+ timestamp: Date.now(),
20
+ usage: { input: 1, output: 1, cacheRead: 0, cacheWrite: 0, totalTokens: 2, cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0, total: 0 } },
21
+ };
22
+ }
23
+ async function makeAgent() {
24
+ return createCodingAgent({
25
+ model: getModel('openai', 'gpt-4o-mini'),
26
+ permissionMode: 'allowAll',
27
+ enableMemory: false,
28
+ });
29
+ }
30
+ // ---------------------------------------------------------------------------
31
+ // No-op stream function for fork tests
32
+ // ---------------------------------------------------------------------------
33
+ function makeNoOpStreamFn() {
34
+ return (model, _messages, _options) => {
35
+ const stream = createAssistantMessageEventStream();
36
+ const msg = {
37
+ role: 'assistant',
38
+ content: [{ type: 'text', text: 'ok' }],
39
+ stopReason: 'stop',
40
+ api: model.api,
41
+ provider: model.provider,
42
+ model: model.id,
43
+ timestamp: Date.now(),
44
+ usage: { input: 1, output: 1, cacheRead: 0, cacheWrite: 0, totalTokens: 2, cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0, total: 0 } },
45
+ };
46
+ stream.push({ type: 'start', partial: msg });
47
+ stream.push({ type: 'done', reason: 'stop', message: msg });
48
+ return stream;
49
+ };
50
+ }
51
+ async function makeAgentWithStream() {
52
+ return createCodingAgent({
53
+ model: getModel('openai', 'gpt-4o-mini'),
54
+ permissionMode: 'allowAll',
55
+ enableMemory: false,
56
+ streamFn: makeNoOpStreamFn(),
57
+ });
58
+ }
59
+ // ---------------------------------------------------------------------------
60
+ // snapshot()
61
+ // ---------------------------------------------------------------------------
62
+ describe('snapshot()', () => {
63
+ it('returns a snapshot with the current messages and a uuid id', async () => {
64
+ const agent = await makeAgent();
65
+ const msgs = [makeUserMessage('hello'), makeAssistantMessage('world')];
66
+ agent.agent.replaceMessages(msgs);
67
+ const snap = agent.snapshot();
68
+ expect(snap.id).toMatch(/^[0-9a-f-]{36}$/); // uuid format
69
+ expect(snap.messages).toHaveLength(2);
70
+ expect(snap.messages[0]).toEqual(msgs[0]);
71
+ expect(snap.createdAt).toBeGreaterThan(0);
72
+ await agent.dispose();
73
+ });
74
+ it('snapshot messages are a deep clone — mutating original does not affect snapshot', async () => {
75
+ const agent = await makeAgent();
76
+ const msgs = [makeUserMessage('original')];
77
+ agent.agent.replaceMessages(msgs);
78
+ const snap = agent.snapshot();
79
+ // mutate original
80
+ agent.agent.replaceMessages([makeUserMessage('mutated')]);
81
+ expect(snap.messages[0]).toEqual(makeUserMessage('original'));
82
+ await agent.dispose();
83
+ });
84
+ it('throws if agent is currently streaming', async () => {
85
+ const agent = await makeAgent();
86
+ // Force isStreaming to true by directly mutating internal state
87
+ agent.agent.state.isStreaming = true;
88
+ expect(() => agent.snapshot()).toThrow('snapshot: cannot snapshot while agent is streaming');
89
+ agent.agent.state.isStreaming = false;
90
+ await agent.dispose();
91
+ });
92
+ });
93
+ // ---------------------------------------------------------------------------
94
+ // restore()
95
+ // ---------------------------------------------------------------------------
96
+ describe('restore()', () => {
97
+ it('replaces agent messages with snapshot messages', async () => {
98
+ const agent = await makeAgent();
99
+ const original = [makeUserMessage('before')];
100
+ agent.agent.replaceMessages(original);
101
+ const snap = agent.snapshot();
102
+ agent.agent.replaceMessages([makeUserMessage('after')]);
103
+ agent.restore(snap);
104
+ expect(agent.agent.state.messages).toHaveLength(1);
105
+ expect(agent.agent.state.messages[0]).toEqual(makeUserMessage('before'));
106
+ await agent.dispose();
107
+ });
108
+ it('restore uses a deep clone — mutating snapshot after restore does not affect agent', async () => {
109
+ const agent = await makeAgent();
110
+ agent.agent.replaceMessages([makeUserMessage('snap')]);
111
+ const snap = agent.snapshot();
112
+ agent.restore(snap);
113
+ // mutate the snapshot's messages array
114
+ snap.messages.push(makeUserMessage('extra'));
115
+ expect(agent.agent.state.messages).toHaveLength(1);
116
+ await agent.dispose();
117
+ });
118
+ it('throws if agent is currently streaming', async () => {
119
+ const agent = await makeAgent();
120
+ const snap = agent.snapshot();
121
+ agent.agent.state.isStreaming = true;
122
+ expect(() => agent.restore(snap)).toThrow('restore: cannot restore while agent is streaming');
123
+ agent.agent.state.isStreaming = false;
124
+ await agent.dispose();
125
+ });
126
+ });
127
+ // ---------------------------------------------------------------------------
128
+ // fork() edge cases
129
+ // ---------------------------------------------------------------------------
130
+ describe('fork() edge cases', () => {
131
+ it('returns empty array when n = 0', async () => {
132
+ const agent = await makeAgentWithStream();
133
+ const children = await agent.fork('hello', 0);
134
+ expect(children).toEqual([]);
135
+ await agent.dispose();
136
+ });
137
+ it('throws RangeError when n < 0', async () => {
138
+ const agent = await makeAgentWithStream();
139
+ await expect(agent.fork('hello', -1)).rejects.toThrow(RangeError);
140
+ await agent.dispose();
141
+ });
142
+ });
143
+ // ---------------------------------------------------------------------------
144
+ // fork() happy path
145
+ // ---------------------------------------------------------------------------
146
+ describe('fork() happy path', () => {
147
+ it('returns n independent CodingAgent instances', async () => {
148
+ const agent = await makeAgentWithStream();
149
+ agent.agent.replaceMessages([makeUserMessage('parent context')]);
150
+ const children = await agent.fork('branch now', 2);
151
+ expect(children).toHaveLength(2);
152
+ // Each is a proper CodingAgent
153
+ for (const child of children) {
154
+ expect(typeof child.prompt).toBe('function');
155
+ expect(typeof child.snapshot).toBe('function');
156
+ expect(typeof child.fork).toBe('function');
157
+ expect(typeof child.dispose).toBe('function');
158
+ }
159
+ for (const child of children)
160
+ await child.dispose();
161
+ await agent.dispose();
162
+ });
163
+ it('parent message history is unchanged after fork', async () => {
164
+ const agent = await makeAgentWithStream();
165
+ agent.agent.replaceMessages([makeUserMessage('parent context')]);
166
+ const parentMsgsBefore = structuredClone(agent.agent.state.messages);
167
+ await agent.fork('branch', 2);
168
+ expect(agent.agent.state.messages).toEqual(parentMsgsBefore);
169
+ await agent.dispose();
170
+ });
171
+ it('children start with parent message history', async () => {
172
+ const agent = await makeAgentWithStream();
173
+ agent.agent.replaceMessages([makeUserMessage('parent context')]);
174
+ const children = await agent.fork('branch', 2);
175
+ // Each child history starts with the parent context message
176
+ for (const child of children) {
177
+ expect(child.agent.state.messages[0]).toEqual(makeUserMessage('parent context'));
178
+ }
179
+ for (const child of children)
180
+ await child.dispose();
181
+ await agent.dispose();
182
+ });
183
+ });
184
+ // ---------------------------------------------------------------------------
185
+ // promptFork() — alias for fork()
186
+ // ---------------------------------------------------------------------------
187
+ describe('promptFork()', () => {
188
+ it('returns same result as fork() — is an alias', async () => {
189
+ const agent = await makeAgentWithStream();
190
+ const children = await agent.promptFork('test', 2);
191
+ expect(children).toHaveLength(2);
192
+ for (const child of children)
193
+ await child.dispose();
194
+ await agent.dispose();
195
+ });
196
+ it('returns empty array when n = 0', async () => {
197
+ const agent = await makeAgentWithStream();
198
+ const children = await agent.promptFork('test', 0);
199
+ expect(children).toEqual([]);
200
+ await agent.dispose();
201
+ });
202
+ });
203
+ // ---------------------------------------------------------------------------
204
+ // forkFrom()
205
+ // ---------------------------------------------------------------------------
206
+ describe('forkFrom()', () => {
207
+ it('parent messages are untouched after forkFrom', async () => {
208
+ const agent = await makeAgentWithStream();
209
+ const initial = [makeUserMessage('initial')];
210
+ agent.agent.replaceMessages(initial);
211
+ // Take snapshot, then advance parent
212
+ const snap = agent.snapshot();
213
+ agent.agent.replaceMessages([makeUserMessage('advanced'), makeUserMessage('more')]);
214
+ const parentMsgsBefore = structuredClone(agent.agent.state.messages);
215
+ await agent.forkFrom(snap, 'branch from snapshot', 2);
216
+ expect(agent.agent.state.messages).toEqual(parentMsgsBefore);
217
+ await agent.dispose();
218
+ });
219
+ it('children start with snapshot message history', async () => {
220
+ const agent = await makeAgentWithStream();
221
+ agent.agent.replaceMessages([makeUserMessage('snap context')]);
222
+ const snap = agent.snapshot();
223
+ // Advance parent past snapshot
224
+ agent.agent.replaceMessages([makeUserMessage('advanced')]);
225
+ const children = await agent.forkFrom(snap, 'branch', 2);
226
+ for (const child of children) {
227
+ expect(child.agent.state.messages[0]).toEqual(makeUserMessage('snap context'));
228
+ }
229
+ for (const child of children)
230
+ await child.dispose();
231
+ await agent.dispose();
232
+ });
233
+ it('returns empty array when n = 0', async () => {
234
+ const agent = await makeAgentWithStream();
235
+ const snap = agent.snapshot();
236
+ const children = await agent.forkFrom(snap, 'test', 0);
237
+ expect(children).toEqual([]);
238
+ await agent.dispose();
239
+ });
240
+ it('throws RangeError when n < 0', async () => {
241
+ const agent = await makeAgentWithStream();
242
+ const snap = agent.snapshot();
243
+ await expect(agent.forkFrom(snap, 'test', -1)).rejects.toThrow(RangeError);
244
+ await agent.dispose();
245
+ });
246
+ });
247
+ // ---------------------------------------------------------------------------
248
+ // Child isolation
249
+ // ---------------------------------------------------------------------------
250
+ describe('child isolation', () => {
251
+ it('children have independent message histories after fork', async () => {
252
+ const agent = await makeAgentWithStream();
253
+ agent.agent.replaceMessages([makeUserMessage('shared context')]);
254
+ const children = await agent.fork('diverge', 2);
255
+ // Mutate child 0's messages directly
256
+ children[0].agent.replaceMessages([
257
+ ...children[0].agent.state.messages,
258
+ makeUserMessage('only in child 0'),
259
+ ]);
260
+ // child 1 should NOT see child 0's extra message
261
+ const child1Texts = children[1].agent.state.messages.map((m) => m.content?.[0]?.text);
262
+ expect(child1Texts).not.toContain('only in child 0');
263
+ // parent should NOT see either child's changes
264
+ const parentTexts = agent.agent.state.messages.map((m) => m.content?.[0]?.text);
265
+ expect(parentTexts).not.toContain('only in child 0');
266
+ for (const child of children)
267
+ await child.dispose();
268
+ await agent.dispose();
269
+ });
270
+ it('children have independent cost trackers', async () => {
271
+ const agent = await makeAgentWithStream();
272
+ const children = await agent.fork('go', 2);
273
+ const parentCost = agent.costTracker.total();
274
+ const child0Cost = children[0].costTracker.total();
275
+ const child1Cost = children[1].costTracker.total();
276
+ // Each child's cost tracker is its own instance
277
+ expect(children[0].costTracker).not.toBe(agent.costTracker);
278
+ expect(children[0].costTracker).not.toBe(children[1].costTracker);
279
+ for (const child of children)
280
+ await child.dispose();
281
+ await agent.dispose();
282
+ });
283
+ it('fork with n=1 returns a single child', async () => {
284
+ const agent = await makeAgentWithStream();
285
+ agent.agent.replaceMessages([makeUserMessage('context')]);
286
+ const children = await agent.fork('solo branch', 1);
287
+ expect(children).toHaveLength(1);
288
+ expect(children[0].agent.state.messages[0]).toEqual(makeUserMessage('context'));
289
+ await children[0].dispose();
290
+ await agent.dispose();
291
+ });
292
+ });
293
+ // ---------------------------------------------------------------------------
294
+ // Nested forking
295
+ // ---------------------------------------------------------------------------
296
+ describe('nested forking', () => {
297
+ it('child agents can fork further (2 levels deep)', async () => {
298
+ const agent = await makeAgentWithStream();
299
+ agent.agent.replaceMessages([makeUserMessage('root')]);
300
+ const level1 = await agent.fork('level 1', 1);
301
+ expect(level1).toHaveLength(1);
302
+ const level2 = await level1[0].fork('level 2', 2);
303
+ expect(level2).toHaveLength(2);
304
+ // Level 2 children should have root context in their history
305
+ for (const grandchild of level2) {
306
+ expect(grandchild.agent.state.messages[0]).toEqual(makeUserMessage('root'));
307
+ }
308
+ for (const grandchild of level2)
309
+ await grandchild.dispose();
310
+ await level1[0].dispose();
311
+ await agent.dispose();
312
+ });
313
+ });
314
+ // ---------------------------------------------------------------------------
315
+ // Snapshot/restore round-trips with prompt()
316
+ // ---------------------------------------------------------------------------
317
+ describe('snapshot + restore + prompt round-trip', () => {
318
+ it('can snapshot, prompt, then restore to pre-prompt state', async () => {
319
+ const agent = await makeAgentWithStream();
320
+ agent.agent.replaceMessages([makeUserMessage('setup')]);
321
+ const snap = agent.snapshot();
322
+ const msgCountBefore = snap.messages.length;
323
+ // prompt adds messages (user + assistant)
324
+ await agent.prompt('do something');
325
+ expect(agent.agent.state.messages.length).toBeGreaterThan(msgCountBefore);
326
+ // restore rolls back
327
+ agent.restore(snap);
328
+ expect(agent.agent.state.messages).toHaveLength(msgCountBefore);
329
+ expect(agent.agent.state.messages[0]).toEqual(makeUserMessage('setup'));
330
+ await agent.dispose();
331
+ });
332
+ it('can restore and then prompt again from restored state', async () => {
333
+ const agent = await makeAgentWithStream();
334
+ agent.agent.replaceMessages([makeUserMessage('checkpoint')]);
335
+ const snap = agent.snapshot();
336
+ await agent.prompt('first attempt');
337
+ agent.restore(snap);
338
+ await agent.prompt('second attempt');
339
+ // After restore + re-prompt, messages should contain the checkpoint
340
+ // plus whatever the second prompt added — NOT the first attempt
341
+ const texts = agent.agent.state.messages.map((m) => m.content?.[0]?.text);
342
+ expect(texts).toContain('checkpoint');
343
+ expect(texts).toContain('second attempt');
344
+ expect(texts).not.toContain('first attempt');
345
+ await agent.dispose();
346
+ });
347
+ it('multiple snapshots are independent', async () => {
348
+ const agent = await makeAgentWithStream();
349
+ agent.agent.replaceMessages([makeUserMessage('state A')]);
350
+ const snapA = agent.snapshot();
351
+ agent.agent.replaceMessages([makeUserMessage('state B')]);
352
+ const snapB = agent.snapshot();
353
+ // Restore A
354
+ agent.restore(snapA);
355
+ expect(agent.agent.state.messages[0]).toEqual(makeUserMessage('state A'));
356
+ // Restore B
357
+ agent.restore(snapB);
358
+ expect(agent.agent.state.messages[0]).toEqual(makeUserMessage('state B'));
359
+ // snapA still intact
360
+ expect(snapA.messages[0]).toEqual(makeUserMessage('state A'));
361
+ await agent.dispose();
362
+ });
363
+ });
364
+ // ---------------------------------------------------------------------------
365
+ // forkFrom with prompt round-trip
366
+ // ---------------------------------------------------------------------------
367
+ describe('forkFrom + snapshot integration', () => {
368
+ it('can fork from an older snapshot after parent has advanced', async () => {
369
+ const agent = await makeAgentWithStream();
370
+ agent.agent.replaceMessages([makeUserMessage('v1')]);
371
+ const snapV1 = agent.snapshot();
372
+ // Advance parent
373
+ await agent.prompt('advance to v2');
374
+ // Fork from old snapshot — children should start from v1, not v2
375
+ const children = await agent.forkFrom(snapV1, 'explore from v1', 2);
376
+ for (const child of children) {
377
+ expect(child.agent.state.messages[0]).toEqual(makeUserMessage('v1'));
378
+ }
379
+ // Parent should still be at v2 (advanced state)
380
+ expect(agent.agent.state.messages.length).toBeGreaterThan(1);
381
+ for (const child of children)
382
+ await child.dispose();
383
+ await agent.dispose();
384
+ });
385
+ });
386
+ // ---------------------------------------------------------------------------
387
+ // autoFork config
388
+ // ---------------------------------------------------------------------------
389
+ describe('autoFork config', () => {
390
+ it('calls onBranches after each LLM turn with n child agents', async () => {
391
+ let resolveFork;
392
+ const forkPromise = new Promise(res => { resolveFork = res; });
393
+ const agent = await createCodingAgent({
394
+ model: getModel('openai', 'gpt-4o-mini'),
395
+ permissionMode: 'allowAll',
396
+ enableMemory: false,
397
+ streamFn: makeNoOpStreamFn(),
398
+ autoFork: {
399
+ branches: 2,
400
+ onBranches: async (agents) => {
401
+ resolveFork(agents);
402
+ },
403
+ },
404
+ });
405
+ await agent.prompt('hello');
406
+ // Wait for onBranches to be called (no setTimeout — resolves when fork completes)
407
+ const children = await forkPromise;
408
+ expect(children).toHaveLength(2);
409
+ for (const child of children)
410
+ await child.dispose();
411
+ await agent.dispose();
412
+ });
413
+ it('errors in onBranches do not throw or affect the parent', async () => {
414
+ const agent = await createCodingAgent({
415
+ model: getModel('openai', 'gpt-4o-mini'),
416
+ permissionMode: 'allowAll',
417
+ enableMemory: false,
418
+ streamFn: makeNoOpStreamFn(),
419
+ autoFork: {
420
+ branches: 1,
421
+ onBranches: async () => {
422
+ throw new Error('onBranches exploded');
423
+ },
424
+ },
425
+ });
426
+ // Should not throw
427
+ await expect(agent.prompt('hello')).resolves.not.toThrow();
428
+ await agent.dispose();
429
+ });
430
+ it('does not fork recursively in child agents', async () => {
431
+ const forkCount = { count: 0 };
432
+ let resolveNoRecursion;
433
+ const noRecursionPromise = new Promise(res => { resolveNoRecursion = res; });
434
+ const agent = await createCodingAgent({
435
+ model: getModel('openai', 'gpt-4o-mini'),
436
+ permissionMode: 'allowAll',
437
+ enableMemory: false,
438
+ streamFn: makeNoOpStreamFn(),
439
+ autoFork: {
440
+ branches: 2,
441
+ onBranches: async (agents) => {
442
+ forkCount.count++;
443
+ for (const child of agents)
444
+ await child.dispose();
445
+ resolveNoRecursion();
446
+ },
447
+ },
448
+ });
449
+ await agent.prompt('hello');
450
+ await noRecursionPromise;
451
+ // Only 1 fork from the parent — children should not auto-fork
452
+ expect(forkCount.count).toBe(1);
453
+ await agent.dispose();
454
+ });
455
+ });
456
+ //# sourceMappingURL=fork.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fork.test.js","sourceRoot":"","sources":["../src/fork.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,29 @@
1
+ export type { Capability, SdkTool, PermissionMode, PermissionResult, PermissionRule, PermissionTarget, PermissionDecision, HookEvent, HookContext, HookResult, HookHandler, ResolvedSkill, RunContext, CostTracker, MemoryType, Memory, MemorySelection, MemoryManager, SessionSnapshot, SessionManager, SegmentType, TranscriptSegment, CompressionConfig, McpServerConfig, McpConnection, McpManager, TaskBudget, TeammateConfig, TeamAgent, Team, TeamConfig, SwarmManager, ToolOptions, SchemaConversionResult, MemoryInjectionMessage, CompactionSummaryMessage, AgentSnapshot, SwarmReportMessage, } from './types.js';
2
+ export { SdkError, ToolExecutionError, PermissionDeniedError, BudgetExhaustedError, McpConnectionError, SessionLoadError, CompressionError, } from './errors.js';
3
+ export { createCostTracker } from './observability/cost-tracker.js';
4
+ export { generateTraceId } from './observability/trace.js';
5
+ export { createRunContext } from './context/run-context.js';
6
+ export type { RunContextOptions } from './context/run-context.js';
7
+ export { convertToLlm } from './context/converter.js';
8
+ export { buildSystemPrompt } from './context/system-prompt.js';
9
+ export type { SystemPromptConfig } from './context/system-prompt.js';
10
+ export { createCompressionMiddleware, estimateTokens } from './context/compression.js';
11
+ export { matchRule, findMatchingRule, evaluatePermission, createPermissionMiddleware, runPreToolUseHooks, runPostToolUseHooks, runLifecycleHooks, composePipeline, } from './middleware/index.js';
12
+ export type { PermissionMiddlewareConfig, PipelineConfig, Pipeline } from './middleware/index.js';
13
+ export { createMemoryManager } from './memory/memory.js';
14
+ export { createSessionManager } from './session/session.js';
15
+ export { jsonSchemaToTypeBox } from './mcp/schema-convert.js';
16
+ export { wrapMcpTool } from './mcp/tools.js';
17
+ export type { McpToolDefinition, CallToolFn } from './mcp/tools.js';
18
+ export { createMcpManager } from './mcp/client.js';
19
+ export { resolvePath, isPathAllowed, truncateOutput, isBinaryContent, createReadTool, createWriteTool, createEditTool, createBashTool, createGlobTool, createGrepTool, createWebFetchTool, createWebSearchTool, createNotebookEditTool, createAskUserTool, getAllTools, } from './tools/index.js';
20
+ export type { BashToolOptions, AskUserToolOptions, GetAllToolsOptions } from './tools/index.js';
21
+ export { composeCodingAgentConfig } from './skills.js';
22
+ export type { ComposeCodingAgentConfigOptions, ComposedCodingAgentConfig } from './skills.js';
23
+ export { createCodingAgent } from './factory.js';
24
+ export type { CodingAgentConfig, CodingAgent, AutoForkConfig } from './factory.js';
25
+ export { createSwarmManager } from './agents/swarm.js';
26
+ export { createSwarmTools } from './agents/tools.js';
27
+ export { runSubAgent } from './agents/subagent.js';
28
+ export { AsyncQueue } from './agents/messages.js';
29
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/index.js ADDED
@@ -0,0 +1,32 @@
1
+ // Errors
2
+ export { SdkError, ToolExecutionError, PermissionDeniedError, BudgetExhaustedError, McpConnectionError, SessionLoadError, CompressionError, } from './errors.js';
3
+ // Observability
4
+ export { createCostTracker } from './observability/cost-tracker.js';
5
+ export { generateTraceId } from './observability/trace.js';
6
+ // Context
7
+ export { createRunContext } from './context/run-context.js';
8
+ export { convertToLlm } from './context/converter.js';
9
+ export { buildSystemPrompt } from './context/system-prompt.js';
10
+ export { createCompressionMiddleware, estimateTokens } from './context/compression.js';
11
+ // Middleware
12
+ export { matchRule, findMatchingRule, evaluatePermission, createPermissionMiddleware, runPreToolUseHooks, runPostToolUseHooks, runLifecycleHooks, composePipeline, } from './middleware/index.js';
13
+ // Memory
14
+ export { createMemoryManager } from './memory/memory.js';
15
+ // Session
16
+ export { createSessionManager } from './session/session.js';
17
+ // MCP
18
+ export { jsonSchemaToTypeBox } from './mcp/schema-convert.js';
19
+ export { wrapMcpTool } from './mcp/tools.js';
20
+ export { createMcpManager } from './mcp/client.js';
21
+ // Tools
22
+ export { resolvePath, isPathAllowed, truncateOutput, isBinaryContent, createReadTool, createWriteTool, createEditTool, createBashTool, createGlobTool, createGrepTool, createWebFetchTool, createWebSearchTool, createNotebookEditTool, createAskUserTool, getAllTools, } from './tools/index.js';
23
+ // Skills
24
+ export { composeCodingAgentConfig } from './skills.js';
25
+ // Factory
26
+ export { createCodingAgent } from './factory.js';
27
+ // Swarm
28
+ export { createSwarmManager } from './agents/swarm.js';
29
+ export { createSwarmTools } from './agents/tools.js';
30
+ export { runSubAgent } from './agents/subagent.js';
31
+ export { AsyncQueue } from './agents/messages.js';
32
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AA0CA,SAAS;AACT,OAAO,EACL,QAAQ,EACR,kBAAkB,EAClB,qBAAqB,EACrB,oBAAoB,EACpB,kBAAkB,EAClB,gBAAgB,EAChB,gBAAgB,GACjB,MAAM,aAAa,CAAC;AAErB,gBAAgB;AAChB,OAAO,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAC;AACpE,OAAO,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAE3D,UAAU;AACV,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAE5D,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AACtD,OAAO,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AAE/D,OAAO,EAAE,2BAA2B,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAEvF,aAAa;AACb,OAAO,EACL,SAAS,EACT,gBAAgB,EAChB,kBAAkB,EAClB,0BAA0B,EAC1B,kBAAkB,EAClB,mBAAmB,EACnB,iBAAiB,EACjB,eAAe,GAChB,MAAM,uBAAuB,CAAC;AAG/B,SAAS;AACT,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAEzD,UAAU;AACV,OAAO,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAE5D,MAAM;AACN,OAAO,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAC9D,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAE7C,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAEnD,QAAQ;AACR,OAAO,EACL,WAAW,EACX,aAAa,EACb,cAAc,EACd,eAAe,EACf,cAAc,EACd,eAAe,EACf,cAAc,EACd,cAAc,EACd,cAAc,EACd,cAAc,EACd,kBAAkB,EAClB,mBAAmB,EACnB,sBAAsB,EACtB,iBAAiB,EACjB,WAAW,GACZ,MAAM,kBAAkB,CAAC;AAG1B,SAAS;AACT,OAAO,EAAE,wBAAwB,EAAE,MAAM,aAAa,CAAC;AAGvD,UAAU;AACV,OAAO,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAGjD,QAAQ;AACR,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACnD,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { McpManager } from '../types.js';
2
+ export declare function createMcpManager(): McpManager;
3
+ //# sourceMappingURL=client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/mcp/client.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAiB,UAAU,EAA4B,MAAM,aAAa,CAAC;AASvF,wBAAgB,gBAAgB,IAAI,UAAU,CA4E7C"}
@@ -0,0 +1,75 @@
1
+ import { Client } from '@modelcontextprotocol/sdk/client/index.js';
2
+ import { StdioClientTransport } from '@modelcontextprotocol/sdk/client/stdio.js';
3
+ import { SSEClientTransport } from '@modelcontextprotocol/sdk/client/sse.js';
4
+ import { McpConnectionError } from '../errors.js';
5
+ import { wrapMcpTool } from './tools.js';
6
+ export function createMcpManager() {
7
+ const connections = new Map();
8
+ return {
9
+ async connect(config) {
10
+ try {
11
+ let transport;
12
+ if (config.transport === 'stdio') {
13
+ if (!config.command) {
14
+ throw new McpConnectionError(`stdio transport requires a command for server: ${config.name}`);
15
+ }
16
+ transport = new StdioClientTransport({
17
+ command: config.command,
18
+ args: config.args,
19
+ env: config.env,
20
+ });
21
+ }
22
+ else if (config.transport === 'sse') {
23
+ if (!config.url) {
24
+ throw new McpConnectionError(`SSE transport requires a url for server: ${config.name}`);
25
+ }
26
+ transport = new SSEClientTransport(new URL(config.url));
27
+ }
28
+ else {
29
+ throw new McpConnectionError(`Unsupported transport: ${config.transport}`);
30
+ }
31
+ const client = new Client({ name: '@researchcomputer/agents-sdk', version: '0.1.0' });
32
+ await client.connect(transport);
33
+ const { tools: mcpTools } = await client.listTools();
34
+ const wrappedTools = mcpTools.map((mcpTool) => wrapMcpTool(config.name, mcpTool, async (name, args) => {
35
+ const result = await client.callTool({ name, arguments: args });
36
+ return result;
37
+ }));
38
+ const connection = {
39
+ name: config.name,
40
+ config,
41
+ client,
42
+ tools: wrappedTools,
43
+ async close() {
44
+ await client.close();
45
+ },
46
+ };
47
+ connections.set(config.name, connection);
48
+ return connection;
49
+ }
50
+ catch (err) {
51
+ if (err instanceof McpConnectionError)
52
+ throw err;
53
+ throw new McpConnectionError(`Failed to connect to MCP server ${config.name}: ${err.message}`);
54
+ }
55
+ },
56
+ async disconnect(name) {
57
+ const conn = connections.get(name);
58
+ if (conn) {
59
+ await conn.close();
60
+ connections.delete(name);
61
+ }
62
+ },
63
+ getTools() {
64
+ const allTools = [];
65
+ for (const conn of connections.values()) {
66
+ allTools.push(...conn.tools);
67
+ }
68
+ return allTools;
69
+ },
70
+ getConnections() {
71
+ return Array.from(connections.values());
72
+ },
73
+ };
74
+ }
75
+ //# sourceMappingURL=client.js.map