@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,69 @@
1
+ const DEFAULT_BASE_PROMPT = 'You are a coding agent that helps users with software development tasks.';
2
+ /**
3
+ * Builds a system prompt by assembling sections in order:
4
+ * 1. Base prompt
5
+ * 2. Skill instructions
6
+ * 3. Tool descriptions
7
+ * 4. Memory context
8
+ * 5. Memory instructions
9
+ * 6. Permission context
10
+ * 7. Swarm context
11
+ */
12
+ export function buildSystemPrompt(config) {
13
+ const sections = [];
14
+ // 1. Base prompt
15
+ sections.push(config.basePrompt ?? DEFAULT_BASE_PROMPT);
16
+ // 2. Skill instructions
17
+ if (config.skills && config.skills.length > 0) {
18
+ const skillBlocks = config.skills
19
+ .map((skill) => {
20
+ const promptSections = (skill.promptSections ?? [])
21
+ .map((section) => section.trim())
22
+ .filter((section) => section.length > 0);
23
+ if (!skill.description && promptSections.length === 0) {
24
+ return '';
25
+ }
26
+ const parts = [`## ${skill.id}`];
27
+ if (skill.description?.trim()) {
28
+ parts.push(skill.description.trim());
29
+ }
30
+ parts.push(...promptSections);
31
+ return parts.join('\n\n');
32
+ })
33
+ .filter((block) => block.length > 0);
34
+ if (skillBlocks.length > 0) {
35
+ sections.push(`# Active Skills\n\n${skillBlocks.join('\n\n')}`);
36
+ }
37
+ }
38
+ // 3. Tool descriptions
39
+ if (config.tools && config.tools.length > 0) {
40
+ const toolLines = config.tools.map(t => `- **${t.name}**: ${t.description}`);
41
+ sections.push(`# Available Tools\n\n${toolLines.join('\n')}`);
42
+ }
43
+ // 4. Memory context
44
+ if (config.memories && config.memories.length > 0) {
45
+ const memLines = config.memories.map(m => {
46
+ const date = new Date(m.updatedAt).toISOString().split('T')[0];
47
+ return `- [${m.source}, ${date}] ${m.memory.content}`;
48
+ });
49
+ sections.push(`# Relevant Memories\n\n${memLines.join('\n')}`);
50
+ }
51
+ // 5. Memory instructions (always)
52
+ sections.push('When the user provides feedback or corrections, remember them for future interactions. ' +
53
+ 'Use any available memory context to inform your responses.');
54
+ // 6. Permission context
55
+ if (config.permissionMode) {
56
+ sections.push(`# Permission Mode\n\nCurrent permission mode: ${config.permissionMode}. ` +
57
+ 'Respect tool permission rules when executing actions.');
58
+ }
59
+ // 7. Swarm context
60
+ if (config.swarmContext) {
61
+ let swarmSection = `# Team Context\n\nYou are part of a team. Your teammates: ${config.swarmContext.teammates.join(', ')}.`;
62
+ if (config.swarmContext.instructions) {
63
+ swarmSection += `\n\n${config.swarmContext.instructions}`;
64
+ }
65
+ sections.push(swarmSection);
66
+ }
67
+ return sections.join('\n\n');
68
+ }
69
+ //# sourceMappingURL=system-prompt.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"system-prompt.js","sourceRoot":"","sources":["../../src/context/system-prompt.ts"],"names":[],"mappings":"AAWA,MAAM,mBAAmB,GAAG,0EAA0E,CAAC;AAEvG;;;;;;;;;GASG;AACH,MAAM,UAAU,iBAAiB,CAAC,MAA0B;IAC1D,MAAM,QAAQ,GAAa,EAAE,CAAC;IAE9B,iBAAiB;IACjB,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,IAAI,mBAAmB,CAAC,CAAC;IAExD,wBAAwB;IACxB,IAAI,MAAM,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC9C,MAAM,WAAW,GAAG,MAAM,CAAC,MAAM;aAC9B,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;YACb,MAAM,cAAc,GAAG,CAAC,KAAK,CAAC,cAAc,IAAI,EAAE,CAAC;iBAChD,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;iBAChC,MAAM,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;YAE3C,IAAI,CAAC,KAAK,CAAC,WAAW,IAAI,cAAc,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACtD,OAAO,EAAE,CAAC;YACZ,CAAC;YAED,MAAM,KAAK,GAAG,CAAC,MAAM,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC;YACjC,IAAI,KAAK,CAAC,WAAW,EAAE,IAAI,EAAE,EAAE,CAAC;gBAC9B,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC,CAAC;YACvC,CAAC;YACD,KAAK,CAAC,IAAI,CAAC,GAAG,cAAc,CAAC,CAAC;YAC9B,OAAO,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAC5B,CAAC,CAAC;aACD,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QAEvC,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC3B,QAAQ,CAAC,IAAI,CAAC,sBAAsB,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QAClE,CAAC;IACH,CAAC;IAED,uBAAuB;IACvB,IAAI,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC5C,MAAM,SAAS,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,IAAI,OAAO,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC;QAC7E,QAAQ,CAAC,IAAI,CAAC,wBAAwB,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAChE,CAAC;IAED,oBAAoB;IACpB,IAAI,MAAM,CAAC,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAClD,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE;YACvC,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;YAC/D,OAAO,MAAM,CAAC,CAAC,MAAM,KAAK,IAAI,KAAK,CAAC,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;QACxD,CAAC,CAAC,CAAC;QACH,QAAQ,CAAC,IAAI,CAAC,0BAA0B,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACjE,CAAC;IAED,kCAAkC;IAClC,QAAQ,CAAC,IAAI,CACX,yFAAyF;QACzF,4DAA4D,CAC7D,CAAC;IAEF,wBAAwB;IACxB,IAAI,MAAM,CAAC,cAAc,EAAE,CAAC;QAC1B,QAAQ,CAAC,IAAI,CACX,iDAAiD,MAAM,CAAC,cAAc,IAAI;YAC1E,uDAAuD,CACxD,CAAC;IACJ,CAAC;IAED,mBAAmB;IACnB,IAAI,MAAM,CAAC,YAAY,EAAE,CAAC;QACxB,IAAI,YAAY,GAAG,6DAA6D,MAAM,CAAC,YAAY,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC;QAC5H,IAAI,MAAM,CAAC,YAAY,CAAC,YAAY,EAAE,CAAC;YACrC,YAAY,IAAI,OAAO,MAAM,CAAC,YAAY,CAAC,YAAY,EAAE,CAAC;QAC5D,CAAC;QACD,QAAQ,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;IAC9B,CAAC;IAED,OAAO,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AAC/B,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=system-prompt.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"system-prompt.test.d.ts","sourceRoot":"","sources":["../../src/context/system-prompt.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,134 @@
1
+ import { describe, it, expect } from 'vitest';
2
+ import { buildSystemPrompt } from './system-prompt.js';
3
+ import { Type } from '@sinclair/typebox';
4
+ describe('buildSystemPrompt', () => {
5
+ it('uses default base prompt when none provided', () => {
6
+ const result = buildSystemPrompt({});
7
+ expect(result).toContain('You are a coding agent');
8
+ });
9
+ it('uses provided base prompt', () => {
10
+ const result = buildSystemPrompt({ basePrompt: 'You are a helpful bot.' });
11
+ expect(result).toContain('You are a helpful bot.');
12
+ expect(result).not.toContain('You are a coding agent');
13
+ });
14
+ it('includes tool descriptions when tools provided', () => {
15
+ const tool = {
16
+ name: 'Read',
17
+ label: 'Read files',
18
+ description: 'Reads a file from disk',
19
+ capabilities: ['fs:read'],
20
+ parameters: Type.Object({}),
21
+ execute: async () => ({ content: [], details: null }),
22
+ };
23
+ const result = buildSystemPrompt({ tools: [tool] });
24
+ expect(result).toContain('# Available Tools');
25
+ expect(result).toContain('Read');
26
+ expect(result).toContain('Reads a file from disk');
27
+ });
28
+ it('excludes tool section when no tools provided', () => {
29
+ const result = buildSystemPrompt({});
30
+ expect(result).not.toContain('# Available Tools');
31
+ });
32
+ it('includes active skills when prompt sections are provided', () => {
33
+ const skills = [
34
+ {
35
+ id: 'typescript',
36
+ description: 'TypeScript house style',
37
+ promptSections: ['Prefer explicit return types on exported functions.'],
38
+ },
39
+ ];
40
+ const result = buildSystemPrompt({ skills });
41
+ expect(result).toContain('# Active Skills');
42
+ expect(result).toContain('typescript');
43
+ expect(result).toContain('TypeScript house style');
44
+ expect(result).toContain('Prefer explicit return types');
45
+ });
46
+ it('includes memory context when memories provided', () => {
47
+ const memories = [
48
+ {
49
+ memory: { name: 'pref1', description: 'User pref', type: 'user', content: 'Prefers TypeScript' },
50
+ relevanceScore: 0.9,
51
+ source: 'user-prefs.md',
52
+ updatedAt: 1700000000000,
53
+ },
54
+ ];
55
+ const result = buildSystemPrompt({ memories });
56
+ expect(result).toContain('# Relevant Memories');
57
+ expect(result).toContain('Prefers TypeScript');
58
+ expect(result).toContain('user-prefs.md');
59
+ });
60
+ it('excludes memory section when no memories provided', () => {
61
+ const result = buildSystemPrompt({});
62
+ expect(result).not.toContain('# Relevant Memories');
63
+ });
64
+ it('always includes memory instructions', () => {
65
+ const result = buildSystemPrompt({});
66
+ expect(result).toContain('memory');
67
+ });
68
+ it('includes permission context when mode provided', () => {
69
+ const result = buildSystemPrompt({ permissionMode: 'allowAll' });
70
+ expect(result).toContain('allowAll');
71
+ });
72
+ it('excludes permission section when no mode provided', () => {
73
+ const result = buildSystemPrompt({});
74
+ expect(result).not.toContain('Permission');
75
+ });
76
+ it('includes swarm context when provided', () => {
77
+ const result = buildSystemPrompt({
78
+ swarmContext: { teammates: ['worker-1', 'worker-2'], instructions: 'Coordinate tasks' },
79
+ });
80
+ expect(result).toContain('# Team Context');
81
+ expect(result).toContain('worker-1');
82
+ expect(result).toContain('worker-2');
83
+ expect(result).toContain('Coordinate tasks');
84
+ });
85
+ it('includes swarm context without instructions', () => {
86
+ const result = buildSystemPrompt({
87
+ swarmContext: { teammates: ['agent-a'] },
88
+ });
89
+ expect(result).toContain('# Team Context');
90
+ expect(result).toContain('agent-a');
91
+ });
92
+ it('excludes swarm section when no swarm context provided', () => {
93
+ const result = buildSystemPrompt({});
94
+ expect(result).not.toContain('# Team Context');
95
+ });
96
+ it('assembles all sections in correct order', () => {
97
+ const tool = {
98
+ name: 'Bash',
99
+ label: 'Bash',
100
+ description: 'Run shell commands',
101
+ capabilities: ['process:spawn'],
102
+ parameters: Type.Object({}),
103
+ execute: async () => ({ content: [], details: null }),
104
+ };
105
+ const memories = [
106
+ {
107
+ memory: { name: 'm1', description: 'd', type: 'project', content: 'Project uses ESM' },
108
+ relevanceScore: 0.8,
109
+ source: 'project.md',
110
+ updatedAt: 1700000000000,
111
+ },
112
+ ];
113
+ const result = buildSystemPrompt({
114
+ basePrompt: 'Base prompt.',
115
+ skills: [{ id: 'ts', promptSections: ['Prefer TypeScript.'] }],
116
+ tools: [tool],
117
+ memories,
118
+ permissionMode: 'rulesOnly',
119
+ swarmContext: { teammates: ['helper'] },
120
+ });
121
+ const skillsIdx = result.indexOf('# Active Skills');
122
+ const toolsIdx = result.indexOf('# Available Tools');
123
+ const memIdx = result.indexOf('# Relevant Memories');
124
+ const permIdx = result.indexOf('Permission');
125
+ const swarmIdx = result.indexOf('# Team Context');
126
+ expect(skillsIdx).toBeGreaterThan(0);
127
+ expect(toolsIdx).toBeGreaterThan(skillsIdx);
128
+ expect(toolsIdx).toBeGreaterThan(0);
129
+ expect(memIdx).toBeGreaterThan(toolsIdx);
130
+ expect(permIdx).toBeGreaterThan(memIdx);
131
+ expect(swarmIdx).toBeGreaterThan(permIdx);
132
+ });
133
+ });
134
+ //# sourceMappingURL=system-prompt.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"system-prompt.test.js","sourceRoot":"","sources":["../../src/context/system-prompt.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,24 @@
1
+ export declare class SdkError extends Error {
2
+ readonly code: string;
3
+ readonly retryable: boolean;
4
+ constructor(message: string, code: string, retryable: boolean);
5
+ }
6
+ export declare class ToolExecutionError extends SdkError {
7
+ constructor(message: string);
8
+ }
9
+ export declare class PermissionDeniedError extends SdkError {
10
+ constructor(message: string);
11
+ }
12
+ export declare class BudgetExhaustedError extends SdkError {
13
+ constructor(message: string);
14
+ }
15
+ export declare class McpConnectionError extends SdkError {
16
+ constructor(message: string);
17
+ }
18
+ export declare class SessionLoadError extends SdkError {
19
+ constructor(message: string);
20
+ }
21
+ export declare class CompressionError extends SdkError {
22
+ constructor(message: string);
23
+ }
24
+ //# sourceMappingURL=errors.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA,qBAAa,QAAS,SAAQ,KAAK;aACY,IAAI,EAAE,MAAM;aAAkB,SAAS,EAAE,OAAO;gBAAjF,OAAO,EAAE,MAAM,EAAkB,IAAI,EAAE,MAAM,EAAkB,SAAS,EAAE,OAAO;CAI9F;AAED,qBAAa,kBAAmB,SAAQ,QAAQ;gBAClC,OAAO,EAAE,MAAM;CAI5B;AAED,qBAAa,qBAAsB,SAAQ,QAAQ;gBACrC,OAAO,EAAE,MAAM;CAI5B;AAED,qBAAa,oBAAqB,SAAQ,QAAQ;gBACpC,OAAO,EAAE,MAAM;CAI5B;AAED,qBAAa,kBAAmB,SAAQ,QAAQ;gBAClC,OAAO,EAAE,MAAM;CAI5B;AAED,qBAAa,gBAAiB,SAAQ,QAAQ;gBAChC,OAAO,EAAE,MAAM;CAI5B;AAED,qBAAa,gBAAiB,SAAQ,QAAQ;gBAChC,OAAO,EAAE,MAAM;CAI5B"}
package/dist/errors.js ADDED
@@ -0,0 +1,47 @@
1
+ export class SdkError extends Error {
2
+ code;
3
+ retryable;
4
+ constructor(message, code, retryable) {
5
+ super(message);
6
+ this.code = code;
7
+ this.retryable = retryable;
8
+ this.name = 'SdkError';
9
+ }
10
+ }
11
+ export class ToolExecutionError extends SdkError {
12
+ constructor(message) {
13
+ super(message, 'TOOL_EXECUTION_ERROR', true);
14
+ this.name = 'ToolExecutionError';
15
+ }
16
+ }
17
+ export class PermissionDeniedError extends SdkError {
18
+ constructor(message) {
19
+ super(message, 'PERMISSION_DENIED', false);
20
+ this.name = 'PermissionDeniedError';
21
+ }
22
+ }
23
+ export class BudgetExhaustedError extends SdkError {
24
+ constructor(message) {
25
+ super(message, 'BUDGET_EXHAUSTED', false);
26
+ this.name = 'BudgetExhaustedError';
27
+ }
28
+ }
29
+ export class McpConnectionError extends SdkError {
30
+ constructor(message) {
31
+ super(message, 'MCP_CONNECTION_ERROR', true);
32
+ this.name = 'McpConnectionError';
33
+ }
34
+ }
35
+ export class SessionLoadError extends SdkError {
36
+ constructor(message) {
37
+ super(message, 'SESSION_LOAD_ERROR', false);
38
+ this.name = 'SessionLoadError';
39
+ }
40
+ }
41
+ export class CompressionError extends SdkError {
42
+ constructor(message) {
43
+ super(message, 'COMPRESSION_ERROR', true);
44
+ this.name = 'CompressionError';
45
+ }
46
+ }
47
+ //# sourceMappingURL=errors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.js","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,QAAS,SAAQ,KAAK;IACY;IAA8B;IAA3E,YAAY,OAAe,EAAkB,IAAY,EAAkB,SAAkB;QAC3F,KAAK,CAAC,OAAO,CAAC,CAAC;QAD4B,SAAI,GAAJ,IAAI,CAAQ;QAAkB,cAAS,GAAT,SAAS,CAAS;QAE3F,IAAI,CAAC,IAAI,GAAG,UAAU,CAAC;IACzB,CAAC;CACF;AAED,MAAM,OAAO,kBAAmB,SAAQ,QAAQ;IAC9C,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,EAAE,sBAAsB,EAAE,IAAI,CAAC,CAAC;QAC7C,IAAI,CAAC,IAAI,GAAG,oBAAoB,CAAC;IACnC,CAAC;CACF;AAED,MAAM,OAAO,qBAAsB,SAAQ,QAAQ;IACjD,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,EAAE,mBAAmB,EAAE,KAAK,CAAC,CAAC;QAC3C,IAAI,CAAC,IAAI,GAAG,uBAAuB,CAAC;IACtC,CAAC;CACF;AAED,MAAM,OAAO,oBAAqB,SAAQ,QAAQ;IAChD,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,EAAE,kBAAkB,EAAE,KAAK,CAAC,CAAC;QAC1C,IAAI,CAAC,IAAI,GAAG,sBAAsB,CAAC;IACrC,CAAC;CACF;AAED,MAAM,OAAO,kBAAmB,SAAQ,QAAQ;IAC9C,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,EAAE,sBAAsB,EAAE,IAAI,CAAC,CAAC;QAC7C,IAAI,CAAC,IAAI,GAAG,oBAAoB,CAAC;IACnC,CAAC;CACF;AAED,MAAM,OAAO,gBAAiB,SAAQ,QAAQ;IAC5C,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,EAAE,oBAAoB,EAAE,KAAK,CAAC,CAAC;QAC5C,IAAI,CAAC,IAAI,GAAG,kBAAkB,CAAC;IACjC,CAAC;CACF;AAED,MAAM,OAAO,gBAAiB,SAAQ,QAAQ;IAC5C,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,EAAE,mBAAmB,EAAE,IAAI,CAAC,CAAC;QAC1C,IAAI,CAAC,IAAI,GAAG,kBAAkB,CAAC;IACjC,CAAC;CACF"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=errors.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.test.d.ts","sourceRoot":"","sources":["../src/errors.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,68 @@
1
+ import { describe, it, expect } from 'vitest';
2
+ import { SdkError, ToolExecutionError, PermissionDeniedError, BudgetExhaustedError, McpConnectionError, SessionLoadError, CompressionError, } from './errors.js';
3
+ describe('SdkError', () => {
4
+ it('has correct name, code, and retryable', () => {
5
+ const err = new SdkError('test', 'TEST_CODE', true);
6
+ expect(err.name).toBe('SdkError');
7
+ expect(err.message).toBe('test');
8
+ expect(err.code).toBe('TEST_CODE');
9
+ expect(err.retryable).toBe(true);
10
+ expect(err).toBeInstanceOf(Error);
11
+ expect(err).toBeInstanceOf(SdkError);
12
+ });
13
+ });
14
+ describe('ToolExecutionError', () => {
15
+ it('has correct defaults', () => {
16
+ const err = new ToolExecutionError('tool failed');
17
+ expect(err.name).toBe('ToolExecutionError');
18
+ expect(err.code).toBe('TOOL_EXECUTION_ERROR');
19
+ expect(err.retryable).toBe(true);
20
+ expect(err).toBeInstanceOf(SdkError);
21
+ });
22
+ });
23
+ describe('PermissionDeniedError', () => {
24
+ it('has correct defaults', () => {
25
+ const err = new PermissionDeniedError('denied');
26
+ expect(err.name).toBe('PermissionDeniedError');
27
+ expect(err.code).toBe('PERMISSION_DENIED');
28
+ expect(err.retryable).toBe(false);
29
+ expect(err).toBeInstanceOf(SdkError);
30
+ });
31
+ });
32
+ describe('BudgetExhaustedError', () => {
33
+ it('has correct defaults', () => {
34
+ const err = new BudgetExhaustedError('no budget');
35
+ expect(err.name).toBe('BudgetExhaustedError');
36
+ expect(err.code).toBe('BUDGET_EXHAUSTED');
37
+ expect(err.retryable).toBe(false);
38
+ expect(err).toBeInstanceOf(SdkError);
39
+ });
40
+ });
41
+ describe('McpConnectionError', () => {
42
+ it('has correct defaults', () => {
43
+ const err = new McpConnectionError('connection failed');
44
+ expect(err.name).toBe('McpConnectionError');
45
+ expect(err.code).toBe('MCP_CONNECTION_ERROR');
46
+ expect(err.retryable).toBe(true);
47
+ expect(err).toBeInstanceOf(SdkError);
48
+ });
49
+ });
50
+ describe('SessionLoadError', () => {
51
+ it('has correct defaults', () => {
52
+ const err = new SessionLoadError('load failed');
53
+ expect(err.name).toBe('SessionLoadError');
54
+ expect(err.code).toBe('SESSION_LOAD_ERROR');
55
+ expect(err.retryable).toBe(false);
56
+ expect(err).toBeInstanceOf(SdkError);
57
+ });
58
+ });
59
+ describe('CompressionError', () => {
60
+ it('has correct defaults', () => {
61
+ const err = new CompressionError('compress failed');
62
+ expect(err.name).toBe('CompressionError');
63
+ expect(err.code).toBe('COMPRESSION_ERROR');
64
+ expect(err.retryable).toBe(true);
65
+ expect(err).toBeInstanceOf(SdkError);
66
+ });
67
+ });
68
+ //# sourceMappingURL=errors.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.test.js","sourceRoot":"","sources":["../src/errors.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,58 @@
1
+ import { Agent } from '@mariozechner/pi-agent-core';
2
+ import type { ThinkingLevel, StreamFn } from '@mariozechner/pi-agent-core';
3
+ import type { ImageContent, Model } from '@mariozechner/pi-ai';
4
+ import type { CostTracker, HookHandler, McpManager, McpServerConfig, MemoryManager, AgentSnapshot, PermissionMode, PermissionRule, ResolvedSkill, SdkTool, SessionManager, SwarmManager } from './types.js';
5
+ export interface AutoForkConfig {
6
+ branches: number;
7
+ /**
8
+ * Called after each LLM turn completes with the N child agents.
9
+ * Exceptions are caught and ignored — do not rely on error propagation.
10
+ */
11
+ onBranches: (agents: CodingAgent[]) => void | Promise<void>;
12
+ }
13
+ export interface CodingAgentConfig {
14
+ model: Model<any>;
15
+ systemPrompt?: string;
16
+ tools?: SdkTool<any, any>[];
17
+ permissionMode?: PermissionMode;
18
+ permissionRules?: PermissionRule[];
19
+ onPermissionAsk?: (toolName: string, args: unknown) => Promise<boolean>;
20
+ mcpServers?: McpServerConfig[];
21
+ maxContextTokens?: number;
22
+ compressionStrategy?: 'truncate' | 'summarize';
23
+ memoryDir?: string;
24
+ enableMemory?: boolean;
25
+ sessionDir?: string;
26
+ sessionId?: string;
27
+ hooks?: HookHandler[];
28
+ skills?: ResolvedSkill[];
29
+ enableSwarm?: boolean;
30
+ thinkingLevel?: ThinkingLevel;
31
+ toolExecution?: 'sequential' | 'parallel';
32
+ getApiKey?: (provider: string) => Promise<string | undefined>;
33
+ cwd?: string;
34
+ onQuestion?: (question: string) => Promise<string>;
35
+ autoFork?: AutoForkConfig;
36
+ /** Custom stream function. Useful for proxy backends and testing. */
37
+ streamFn?: StreamFn;
38
+ }
39
+ export interface CodingAgent {
40
+ agent: Agent;
41
+ mcp: McpManager;
42
+ sessions: SessionManager;
43
+ memory: MemoryManager;
44
+ swarm?: SwarmManager;
45
+ costTracker: CostTracker;
46
+ prompt(message: string, images?: ImageContent[]): Promise<void>;
47
+ dispose(): Promise<void>;
48
+ snapshot(): AgentSnapshot;
49
+ restore(snapshot: AgentSnapshot): void;
50
+ fork(message: string, n: number): Promise<CodingAgent[]>;
51
+ forkFrom(snapshot: AgentSnapshot, message: string, n: number): Promise<CodingAgent[]>;
52
+ promptFork(message: string, n: number): Promise<CodingAgent[]>;
53
+ }
54
+ /**
55
+ * Main factory function. Creates a fully wired CodingAgent.
56
+ */
57
+ export declare function createCodingAgent(config: CodingAgentConfig): Promise<CodingAgent>;
58
+ //# sourceMappingURL=factory.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"factory.d.ts","sourceRoot":"","sources":["../src/factory.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,EAAE,MAAM,6BAA6B,CAAC;AACpD,OAAO,KAAK,EAAgB,aAAa,EAAE,QAAQ,EAAE,MAAM,6BAA6B,CAAC;AACzF,OAAO,KAAK,EAAE,YAAY,EAAE,KAAK,EAAE,MAAM,qBAAqB,CAAC;AAC/D,OAAO,KAAK,EACV,WAAW,EACX,WAAW,EACX,UAAU,EACV,eAAe,EACf,aAAa,EACb,aAAa,EACb,cAAc,EACd,cAAc,EACd,aAAa,EACb,OAAO,EACP,cAAc,EACd,YAAY,EACb,MAAM,YAAY,CAAC;AAiBpB,MAAM,WAAW,cAAc;IAC7B,QAAQ,EAAE,MAAM,CAAC;IACjB;;;OAGG;IACH,UAAU,EAAE,CAAC,MAAM,EAAE,WAAW,EAAE,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC7D;AAED,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,KAAK,CAAC,EAAE,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,CAAC;IAC5B,cAAc,CAAC,EAAE,cAAc,CAAC;IAChC,eAAe,CAAC,EAAE,cAAc,EAAE,CAAC;IACnC,eAAe,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IACxE,UAAU,CAAC,EAAE,eAAe,EAAE,CAAC;IAC/B,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,mBAAmB,CAAC,EAAE,UAAU,GAAG,WAAW,CAAC;IAC/C,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,WAAW,EAAE,CAAC;IACtB,MAAM,CAAC,EAAE,aAAa,EAAE,CAAC;IACzB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B,aAAa,CAAC,EAAE,YAAY,GAAG,UAAU,CAAC;IAC1C,SAAS,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC;IAC9D,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,UAAU,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;IACnD,QAAQ,CAAC,EAAE,cAAc,CAAC;IAC1B,qEAAqE;IACrE,QAAQ,CAAC,EAAE,QAAQ,CAAC;CACrB;AAED,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,KAAK,CAAC;IACb,GAAG,EAAE,UAAU,CAAC;IAChB,QAAQ,EAAE,cAAc,CAAC;IACzB,MAAM,EAAE,aAAa,CAAC;IACtB,KAAK,CAAC,EAAE,YAAY,CAAC;IACrB,WAAW,EAAE,WAAW,CAAC;IACzB,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,YAAY,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAChE,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACzB,QAAQ,IAAI,aAAa,CAAC;IAC1B,OAAO,CAAC,QAAQ,EAAE,aAAa,GAAG,IAAI,CAAC;IACvC,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC;IACzD,QAAQ,CAAC,QAAQ,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC;IACtF,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC;CAChE;AAED;;GAEG;AACH,wBAAsB,iBAAiB,CAAC,MAAM,EAAE,iBAAiB,GAAG,OAAO,CAAC,WAAW,CAAC,CA2SvF"}