@multiplayer-app/agent 0.1.9 → 0.1.11

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 +106 -0
  2. package/dist/agent/definition.d.ts +22 -0
  3. package/dist/agent/definition.d.ts.map +1 -0
  4. package/dist/agent/definition.js +3 -0
  5. package/dist/agent/definition.js.map +1 -0
  6. package/dist/agent/definition.test.d.ts +2 -0
  7. package/dist/agent/definition.test.d.ts.map +1 -0
  8. package/dist/agent/definition.test.js +40 -0
  9. package/dist/agent/definition.test.js.map +1 -0
  10. package/dist/agent/model-failure.d.ts +10 -0
  11. package/dist/agent/model-failure.d.ts.map +1 -0
  12. package/dist/agent/model-failure.js +50 -0
  13. package/dist/agent/model-failure.js.map +1 -0
  14. package/dist/agent/profiles/coding.d.ts +4 -0
  15. package/dist/agent/profiles/coding.d.ts.map +1 -0
  16. package/dist/agent/profiles/coding.js +17 -0
  17. package/dist/agent/profiles/coding.js.map +1 -0
  18. package/dist/agent/profiles/index.d.ts +4 -0
  19. package/dist/agent/profiles/index.d.ts.map +1 -0
  20. package/dist/agent/profiles/index.js +9 -0
  21. package/dist/agent/profiles/index.js.map +1 -0
  22. package/dist/agent/profiles/research.d.ts +4 -0
  23. package/dist/agent/profiles/research.d.ts.map +1 -0
  24. package/dist/agent/profiles/research.js +53 -0
  25. package/dist/agent/profiles/research.js.map +1 -0
  26. package/dist/agent/progress-reminder.test.d.ts +2 -0
  27. package/dist/agent/progress-reminder.test.d.ts.map +1 -0
  28. package/dist/agent/progress-reminder.test.js +20 -0
  29. package/dist/agent/progress-reminder.test.js.map +1 -0
  30. package/dist/agent/turn-runner.d.ts +54 -0
  31. package/dist/agent/turn-runner.d.ts.map +1 -0
  32. package/dist/agent/turn-runner.js +147 -0
  33. package/dist/agent/turn-runner.js.map +1 -0
  34. package/dist/agent/turn-runner.test.d.ts +2 -0
  35. package/dist/agent/turn-runner.test.d.ts.map +1 -0
  36. package/dist/agent/turn-runner.test.js +181 -0
  37. package/dist/agent/turn-runner.test.js.map +1 -0
  38. package/dist/context-pruning.d.ts +13 -0
  39. package/dist/context-pruning.d.ts.map +1 -0
  40. package/dist/context-pruning.js +61 -0
  41. package/dist/context-pruning.js.map +1 -0
  42. package/dist/context-pruning.test.d.ts +2 -0
  43. package/dist/context-pruning.test.d.ts.map +1 -0
  44. package/dist/context-pruning.test.js +48 -0
  45. package/dist/context-pruning.test.js.map +1 -0
  46. package/dist/index.d.ts +11 -6
  47. package/dist/index.d.ts.map +1 -1
  48. package/dist/index.js +18 -10
  49. package/dist/index.js.map +1 -1
  50. package/dist/models/attribution.d.ts.map +1 -0
  51. package/dist/models/attribution.js.map +1 -0
  52. package/dist/{model.d.ts → models/resolve-model.d.ts} +2 -2
  53. package/dist/models/resolve-model.d.ts.map +1 -0
  54. package/dist/{model.js → models/resolve-model.js} +4 -2
  55. package/dist/models/resolve-model.js.map +1 -0
  56. package/dist/models/usage.d.ts +11 -0
  57. package/dist/models/usage.d.ts.map +1 -0
  58. package/dist/models/usage.js +19 -0
  59. package/dist/models/usage.js.map +1 -0
  60. package/dist/{git-sync.d.ts → persistence/git-sync.d.ts} +1 -1
  61. package/dist/persistence/git-sync.d.ts.map +1 -0
  62. package/dist/persistence/git-sync.js.map +1 -0
  63. package/dist/persistence/git-sync.test.d.ts.map +1 -0
  64. package/dist/{git-sync.test.js → persistence/git-sync.test.js} +2 -2
  65. package/dist/persistence/git-sync.test.js.map +1 -0
  66. package/dist/{session-storage-sync.d.ts → persistence/snapshot-sync.d.ts} +2 -2
  67. package/dist/persistence/snapshot-sync.d.ts.map +1 -0
  68. package/dist/{session-storage-sync.js → persistence/snapshot-sync.js} +1 -1
  69. package/dist/persistence/snapshot-sync.js.map +1 -0
  70. package/dist/persistence/snapshot-sync.test.d.ts +2 -0
  71. package/dist/persistence/snapshot-sync.test.d.ts.map +1 -0
  72. package/dist/{session-storage-sync.test.js → persistence/snapshot-sync.test.js} +3 -3
  73. package/dist/persistence/snapshot-sync.test.js.map +1 -0
  74. package/dist/persistence/workspace.d.ts +17 -0
  75. package/dist/persistence/workspace.d.ts.map +1 -0
  76. package/dist/persistence/workspace.js +26 -0
  77. package/dist/persistence/workspace.js.map +1 -0
  78. package/dist/persistence/workspace.test.d.ts +2 -0
  79. package/dist/persistence/workspace.test.d.ts.map +1 -0
  80. package/dist/persistence/workspace.test.js +38 -0
  81. package/dist/persistence/workspace.test.js.map +1 -0
  82. package/dist/research/extract-texts.d.ts +41 -0
  83. package/dist/research/extract-texts.d.ts.map +1 -0
  84. package/dist/research/extract-texts.js +239 -0
  85. package/dist/research/extract-texts.js.map +1 -0
  86. package/dist/research/extract-texts.test.d.ts +2 -0
  87. package/dist/research/extract-texts.test.d.ts.map +1 -0
  88. package/dist/research/extract-texts.test.js +120 -0
  89. package/dist/research/extract-texts.test.js.map +1 -0
  90. package/dist/research/extraction-tool.d.ts +6 -0
  91. package/dist/research/extraction-tool.d.ts.map +1 -0
  92. package/dist/research/extraction-tool.js +41 -0
  93. package/dist/research/extraction-tool.js.map +1 -0
  94. package/dist/research/extraction-tool.test.d.ts +2 -0
  95. package/dist/research/extraction-tool.test.d.ts.map +1 -0
  96. package/dist/research/extraction-tool.test.js +102 -0
  97. package/dist/research/extraction-tool.test.js.map +1 -0
  98. package/dist/research/filingramp/attachment-tools.d.ts +4 -0
  99. package/dist/research/filingramp/attachment-tools.d.ts.map +1 -0
  100. package/dist/research/filingramp/attachment-tools.js +198 -0
  101. package/dist/research/filingramp/attachment-tools.js.map +1 -0
  102. package/dist/research/filingramp/document-search-tool.d.ts +4 -0
  103. package/dist/research/filingramp/document-search-tool.d.ts.map +1 -0
  104. package/dist/research/filingramp/document-search-tool.js +231 -0
  105. package/dist/research/filingramp/document-search-tool.js.map +1 -0
  106. package/dist/research/filingramp/filing-detail-tool.d.ts +8 -0
  107. package/dist/research/filingramp/filing-detail-tool.d.ts.map +1 -0
  108. package/dist/research/filingramp/filing-detail-tool.js +161 -0
  109. package/dist/research/filingramp/filing-detail-tool.js.map +1 -0
  110. package/dist/research/filingramp/filing-search-tools.d.ts +4 -0
  111. package/dist/research/filingramp/filing-search-tools.d.ts.map +1 -0
  112. package/dist/research/filingramp/filing-search-tools.js +207 -0
  113. package/dist/research/filingramp/filing-search-tools.js.map +1 -0
  114. package/dist/research/filingramp/shared.d.ts +64 -0
  115. package/dist/research/filingramp/shared.d.ts.map +1 -0
  116. package/dist/research/filingramp/shared.js +130 -0
  117. package/dist/research/filingramp/shared.js.map +1 -0
  118. package/dist/research/filingramp-client.d.ts +1 -1
  119. package/dist/research/filingramp-client.d.ts.map +1 -1
  120. package/dist/research/filingramp-contract.d.ts.map +1 -1
  121. package/dist/research/filingramp-contract.js +8 -2
  122. package/dist/research/filingramp-contract.js.map +1 -1
  123. package/dist/research/filingramp-tools.d.ts +4 -8
  124. package/dist/research/filingramp-tools.d.ts.map +1 -1
  125. package/dist/research/filingramp-tools.js +19 -597
  126. package/dist/research/filingramp-tools.js.map +1 -1
  127. package/dist/research/filingramp-tools.test.js +138 -2
  128. package/dist/research/filingramp-tools.test.js.map +1 -1
  129. package/dist/research/prompt.d.ts +1 -1
  130. package/dist/research/prompt.d.ts.map +1 -1
  131. package/dist/research/prompt.js +16 -7
  132. package/dist/research/prompt.js.map +1 -1
  133. package/dist/research/scope.d.ts +1 -1
  134. package/dist/research/scope.d.ts.map +1 -1
  135. package/dist/runtime/cli.d.ts.map +1 -0
  136. package/dist/{cli.js → runtime/cli.js} +3 -3
  137. package/dist/runtime/cli.js.map +1 -0
  138. package/dist/{config.d.ts → runtime/config.d.ts} +1 -1
  139. package/dist/runtime/config.d.ts.map +1 -0
  140. package/dist/{config.js → runtime/config.js} +1 -1
  141. package/dist/runtime/config.js.map +1 -0
  142. package/dist/{runtime.d.ts → runtime/index.d.ts} +2 -2
  143. package/dist/runtime/index.d.ts.map +1 -0
  144. package/dist/{runtime.js → runtime/index.js} +7 -7
  145. package/dist/runtime/index.js.map +1 -0
  146. package/dist/runtime/lambda-microvm.d.ts +3 -0
  147. package/dist/runtime/lambda-microvm.d.ts.map +1 -0
  148. package/dist/{lambda-microvm-entrypoint.js → runtime/lambda-microvm.js} +4 -4
  149. package/dist/runtime/lambda-microvm.js.map +1 -0
  150. package/dist/runtime/lifecycle.test.d.ts.map +1 -0
  151. package/dist/{lifecycle.test.js → runtime/lifecycle.test.js} +5 -5
  152. package/dist/runtime/lifecycle.test.js.map +1 -0
  153. package/dist/session/checkpoint-timer.test.d.ts.map +1 -0
  154. package/dist/{checkpoint-timer.test.js → session/checkpoint-timer.test.js} +8 -8
  155. package/dist/session/checkpoint-timer.test.js.map +1 -0
  156. package/dist/session/conversation.d.ts +15 -0
  157. package/dist/session/conversation.d.ts.map +1 -0
  158. package/dist/session/conversation.js +61 -0
  159. package/dist/session/conversation.js.map +1 -0
  160. package/dist/session/conversation.test.d.ts +2 -0
  161. package/dist/session/conversation.test.d.ts.map +1 -0
  162. package/dist/session/conversation.test.js +53 -0
  163. package/dist/session/conversation.test.js.map +1 -0
  164. package/dist/session/idle-checkpoint.test.d.ts.map +1 -0
  165. package/dist/{idle-checkpoint.test.js → session/idle-checkpoint.test.js} +8 -4
  166. package/dist/session/idle-checkpoint.test.js.map +1 -0
  167. package/dist/session/index.d.ts +7 -0
  168. package/dist/session/index.d.ts.map +1 -0
  169. package/dist/session/index.js +16 -0
  170. package/dist/session/index.js.map +1 -0
  171. package/dist/session/runtime.d.ts +58 -0
  172. package/dist/session/runtime.d.ts.map +1 -0
  173. package/dist/session/runtime.js +292 -0
  174. package/dist/session/runtime.js.map +1 -0
  175. package/dist/session/runtime.test.d.ts +2 -0
  176. package/dist/session/runtime.test.d.ts.map +1 -0
  177. package/dist/session/runtime.test.js +201 -0
  178. package/dist/session/runtime.test.js.map +1 -0
  179. package/dist/session/tool-context.d.ts +12 -0
  180. package/dist/session/tool-context.d.ts.map +1 -0
  181. package/dist/session/tool-context.js +3 -0
  182. package/dist/session/tool-context.js.map +1 -0
  183. package/dist/session/tools.d.ts +6 -0
  184. package/dist/session/tools.d.ts.map +1 -0
  185. package/dist/session/tools.js +97 -0
  186. package/dist/session/tools.js.map +1 -0
  187. package/dist/session/tools.test.d.ts +2 -0
  188. package/dist/session/tools.test.d.ts.map +1 -0
  189. package/dist/session/tools.test.js +55 -0
  190. package/dist/session/tools.test.js.map +1 -0
  191. package/dist/task/loop.d.ts +6 -0
  192. package/dist/task/loop.d.ts.map +1 -0
  193. package/dist/{loop.js → task/loop.js} +6 -6
  194. package/dist/task/loop.js.map +1 -0
  195. package/dist/tool-call-repair.d.ts +11 -0
  196. package/dist/tool-call-repair.d.ts.map +1 -0
  197. package/dist/tool-call-repair.js +91 -0
  198. package/dist/tool-call-repair.js.map +1 -0
  199. package/dist/tool-call-repair.test.d.ts +2 -0
  200. package/dist/tool-call-repair.test.d.ts.map +1 -0
  201. package/dist/tool-call-repair.test.js +50 -0
  202. package/dist/tool-call-repair.test.js.map +1 -0
  203. package/dist/tools/exec-tools.d.ts +1 -0
  204. package/dist/tools/exec-tools.d.ts.map +1 -1
  205. package/dist/tools/exec-tools.js +23 -3
  206. package/dist/tools/exec-tools.js.map +1 -1
  207. package/dist/transport/link.d.ts.map +1 -0
  208. package/dist/transport/link.js.map +1 -0
  209. package/dist/{protocol.d.ts → transport/protocol.d.ts} +4 -0
  210. package/dist/transport/protocol.d.ts.map +1 -0
  211. package/dist/transport/protocol.js.map +1 -0
  212. package/dist/transport/protocol.test.d.ts.map +1 -0
  213. package/dist/transport/protocol.test.js.map +1 -0
  214. package/dist/{report.d.ts → transport/reporter.d.ts} +1 -1
  215. package/dist/transport/reporter.d.ts.map +1 -0
  216. package/dist/{report.js → transport/reporter.js} +1 -1
  217. package/dist/transport/reporter.js.map +1 -0
  218. package/package.json +11 -11
  219. package/dist/attribution.d.ts.map +0 -1
  220. package/dist/attribution.js.map +0 -1
  221. package/dist/checkpoint-timer.test.d.ts.map +0 -1
  222. package/dist/checkpoint-timer.test.js.map +0 -1
  223. package/dist/cli.d.ts.map +0 -1
  224. package/dist/cli.js.map +0 -1
  225. package/dist/config.d.ts.map +0 -1
  226. package/dist/config.js.map +0 -1
  227. package/dist/git-sync.d.ts.map +0 -1
  228. package/dist/git-sync.js.map +0 -1
  229. package/dist/git-sync.test.d.ts.map +0 -1
  230. package/dist/git-sync.test.js.map +0 -1
  231. package/dist/idle-checkpoint.test.d.ts.map +0 -1
  232. package/dist/idle-checkpoint.test.js.map +0 -1
  233. package/dist/lambda-microvm-entrypoint.d.ts +0 -3
  234. package/dist/lambda-microvm-entrypoint.d.ts.map +0 -1
  235. package/dist/lambda-microvm-entrypoint.js.map +0 -1
  236. package/dist/lifecycle.test.d.ts.map +0 -1
  237. package/dist/lifecycle.test.js.map +0 -1
  238. package/dist/link.d.ts.map +0 -1
  239. package/dist/link.js.map +0 -1
  240. package/dist/loop.d.ts +0 -6
  241. package/dist/loop.d.ts.map +0 -1
  242. package/dist/loop.js.map +0 -1
  243. package/dist/model.d.ts.map +0 -1
  244. package/dist/model.js.map +0 -1
  245. package/dist/protocol.d.ts.map +0 -1
  246. package/dist/protocol.js.map +0 -1
  247. package/dist/protocol.test.d.ts.map +0 -1
  248. package/dist/protocol.test.js.map +0 -1
  249. package/dist/report.d.ts.map +0 -1
  250. package/dist/report.js.map +0 -1
  251. package/dist/runtime.d.ts.map +0 -1
  252. package/dist/runtime.js.map +0 -1
  253. package/dist/session-storage-sync.d.ts.map +0 -1
  254. package/dist/session-storage-sync.js.map +0 -1
  255. package/dist/session-storage-sync.test.d.ts +0 -2
  256. package/dist/session-storage-sync.test.d.ts.map +0 -1
  257. package/dist/session-storage-sync.test.js.map +0 -1
  258. package/dist/session.d.ts +0 -46
  259. package/dist/session.d.ts.map +0 -1
  260. package/dist/session.js +0 -512
  261. package/dist/session.js.map +0 -1
  262. /package/dist/{attribution.d.ts → models/attribution.d.ts} +0 -0
  263. /package/dist/{attribution.js → models/attribution.js} +0 -0
  264. /package/dist/{git-sync.js → persistence/git-sync.js} +0 -0
  265. /package/dist/{git-sync.test.d.ts → persistence/git-sync.test.d.ts} +0 -0
  266. /package/dist/{cli.d.ts → runtime/cli.d.ts} +0 -0
  267. /package/dist/{lifecycle.test.d.ts → runtime/lifecycle.test.d.ts} +0 -0
  268. /package/dist/{checkpoint-timer.test.d.ts → session/checkpoint-timer.test.d.ts} +0 -0
  269. /package/dist/{idle-checkpoint.test.d.ts → session/idle-checkpoint.test.d.ts} +0 -0
  270. /package/dist/{link.d.ts → transport/link.d.ts} +0 -0
  271. /package/dist/{link.js → transport/link.js} +0 -0
  272. /package/dist/{protocol.js → transport/protocol.js} +0 -0
  273. /package/dist/{protocol.test.d.ts → transport/protocol.test.d.ts} +0 -0
  274. /package/dist/{protocol.test.js → transport/protocol.test.js} +0 -0
@@ -5,7 +5,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  const strict_1 = __importDefault(require("node:assert/strict"));
7
7
  const node_test_1 = require("node:test");
8
- const runtime_1 = require("./runtime");
8
+ const index_1 = require("./index");
9
9
  (0, node_test_1.describe)('Lambda suspend/terminate checkpoint', () => {
10
10
  for (const hook of ['suspend', 'terminate']) {
11
11
  (0, node_test_1.it)(`waits for both startup and Git before completing ${hook}`, async () => {
@@ -18,7 +18,7 @@ const runtime_1 = require("./runtime");
18
18
  const push = new Promise((resolve) => {
19
19
  pushed = resolve;
20
20
  });
21
- const request = (0, runtime_1.checkpointBeforeFreeze)(startup, hook).then(() => {
21
+ const request = (0, index_1.checkpointBeforeFreeze)(startup, hook).then(() => {
22
22
  finished = true;
23
23
  });
24
24
  await Promise.resolve();
@@ -35,12 +35,12 @@ const runtime_1 = require("./runtime");
35
35
  });
36
36
  }
37
37
  (0, node_test_1.it)('rejects the lifecycle request if startup or the Git push fails', async () => {
38
- await strict_1.default.rejects((0, runtime_1.checkpointBeforeFreeze)(undefined, 'suspend'), /has not started/);
39
- await strict_1.default.rejects((0, runtime_1.checkpointBeforeFreeze)(Promise.reject(new Error('restore failed')), 'suspend'), /restore failed/);
38
+ await strict_1.default.rejects((0, index_1.checkpointBeforeFreeze)(undefined, 'suspend'), /has not started/);
39
+ await strict_1.default.rejects((0, index_1.checkpointBeforeFreeze)(Promise.reject(new Error('restore failed')), 'suspend'), /restore failed/);
40
40
  const agent = { session: { checkpoint: async () => {
41
41
  throw new Error('push failed');
42
42
  } } };
43
- await strict_1.default.rejects((0, runtime_1.checkpointBeforeFreeze)(Promise.resolve(agent), 'terminate'), /push failed/);
43
+ await strict_1.default.rejects((0, index_1.checkpointBeforeFreeze)(Promise.resolve(agent), 'terminate'), /push failed/);
44
44
  });
45
45
  });
46
46
  //# sourceMappingURL=lifecycle.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lifecycle.test.js","sourceRoot":"","sources":["../../src/runtime/lifecycle.test.ts"],"names":[],"mappings":";;;;;AAAA,gEAAuC;AACvC,yCAAwC;AACxC,mCAAmE;AAEnE,IAAA,oBAAQ,EAAC,qCAAqC,EAAE,GAAG,EAAE;IACnD,KAAK,MAAM,IAAI,IAAI,CAAC,SAAS,EAAE,WAAW,CAAC,EAAE,CAAC;QAC5C,IAAA,cAAE,EAAC,oDAAoD,IAAI,EAAE,EAAE,KAAK,IAAI,EAAE;YACxE,IAAI,OAAuC,CAAA;YAC3C,IAAI,MAAmB,CAAA;YACvB,IAAI,QAAQ,GAAG,KAAK,CAAA;YACpB,MAAM,OAAO,GAAG,IAAI,OAAO,CAAe,CAAC,OAAO,EAAE,EAAE;gBACpD,OAAO,GAAG,OAAO,CAAA;YACnB,CAAC,CAAC,CAAA;YACF,MAAM,IAAI,GAAG,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE;gBACzC,MAAM,GAAG,OAAO,CAAA;YAClB,CAAC,CAAC,CAAA;YACF,MAAM,OAAO,GAAG,IAAA,8BAAsB,EAAC,OAAO,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE;gBAC9D,QAAQ,GAAG,IAAI,CAAA;YACjB,CAAC,CAAC,CAAA;YACF,MAAM,OAAO,CAAC,OAAO,EAAE,CAAA;YACvB,gBAAM,CAAC,KAAK,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAA;YAC7B,OAAO,CAAC,EAAE,OAAO,EAAE,EAAE,UAAU,EAAE,KAAK,EAAE,MAAc,EAAE,EAAE;wBACxD,gBAAM,CAAC,KAAK,CAAC,MAAM,EAAE,IAAI,CAAC,CAAA;wBAC1B,MAAM,IAAI,CAAA;oBACZ,CAAC,EAAE,EAA6B,CAAC,CAAA;YACjC,MAAM,OAAO,CAAC,OAAO,EAAE,CAAA;YACvB,gBAAM,CAAC,KAAK,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAA;YAC7B,MAAM,EAAE,CAAA;YACR,MAAM,OAAO,CAAA;YACb,gBAAM,CAAC,KAAK,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAA;QAC9B,CAAC,CAAC,CAAA;IACJ,CAAC;IAED,IAAA,cAAE,EAAC,gEAAgE,EAAE,KAAK,IAAI,EAAE;QAC9E,MAAM,gBAAM,CAAC,OAAO,CAAC,IAAA,8BAAsB,EAAC,SAAS,EAAE,SAAS,CAAC,EAAE,iBAAiB,CAAC,CAAA;QACrF,MAAM,gBAAM,CAAC,OAAO,CAAC,IAAA,8BAAsB,EAAC,OAAO,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,gBAAgB,CAAC,CAAC,EAAE,SAAS,CAAC,EAAE,gBAAgB,CAAC,CAAA;QACtH,MAAM,KAAK,GAAG,EAAE,OAAO,EAAE,EAAE,UAAU,EAAE,KAAK,IAAI,EAAE;oBAChD,MAAM,IAAI,KAAK,CAAC,aAAa,CAAC,CAAA;gBAChC,CAAC,EAAE,EAA6B,CAAA;QAChC,MAAM,gBAAM,CAAC,OAAO,CAAC,IAAA,8BAAsB,EAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,WAAW,CAAC,EAAE,aAAa,CAAC,CAAA;IAClG,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"checkpoint-timer.test.d.ts","sourceRoot":"","sources":["../../src/session/checkpoint-timer.test.ts"],"names":[],"mappings":""}
@@ -9,13 +9,13 @@ const node_os_1 = __importDefault(require("node:os"));
9
9
  const node_path_1 = __importDefault(require("node:path"));
10
10
  const promises_1 = require("node:timers/promises");
11
11
  const node_test_1 = require("node:test");
12
- const session_1 = require("./session");
13
- const git_sync_1 = require("./git-sync");
12
+ const index_1 = require("./index");
13
+ const git_sync_1 = require("../persistence/git-sync");
14
14
  (0, node_test_1.it)('checkpoints idle sessions every five minutes without overlapping slow pushes, and stops the timer on shutdown', async (t) => {
15
15
  const dir = await node_fs_1.promises.mkdtemp(node_path_1.default.join(node_os_1.default.tmpdir(), 'agent-checkpoint-timer-'));
16
16
  t.after(() => node_fs_1.promises.rm(dir, { recursive: true, force: true }));
17
17
  t.mock.timers.enable({ apis: ['setTimeout', 'Date'], now: 1000000 });
18
- const agent = new session_1.SessionAgent({
18
+ const agent = new index_1.SessionAgent({
19
19
  sessionId: 's', mode: 'session', profile: 'coding', workspaceDir: dir,
20
20
  model: 'unused', extractionModel: 'unused', mcpConnections: [], provider: {},
21
21
  }, { send() { }, onCommand() { }, async ready() { }, async close() { } });
@@ -25,21 +25,21 @@ const git_sync_1 = require("./git-sync");
25
25
  });
26
26
  const checkpoint = t.mock.method(agent, 'checkpoint', async () => push);
27
27
  await agent.start();
28
- t.mock.timers.tick(session_1.PERIODIC_CHECKPOINT_MS - 1);
28
+ t.mock.timers.tick(index_1.PERIODIC_CHECKPOINT_MS - 1);
29
29
  strict_1.default.equal(checkpoint.mock.callCount(), 0);
30
30
  t.mock.timers.tick(1);
31
31
  strict_1.default.equal(checkpoint.mock.callCount(), 1);
32
32
  strict_1.default.deepEqual(checkpoint.mock.calls[0].arguments, ['periodic']);
33
- t.mock.timers.tick(session_1.PERIODIC_CHECKPOINT_MS * 3);
33
+ t.mock.timers.tick(index_1.PERIODIC_CHECKPOINT_MS * 3);
34
34
  strict_1.default.equal(checkpoint.mock.callCount(), 1);
35
35
  release();
36
36
  await (0, promises_1.setImmediate)();
37
- t.mock.timers.tick(session_1.PERIODIC_CHECKPOINT_MS);
37
+ t.mock.timers.tick(index_1.PERIODIC_CHECKPOINT_MS);
38
38
  strict_1.default.equal(checkpoint.mock.callCount(), 2);
39
39
  await (0, promises_1.setImmediate)();
40
40
  await agent.stop();
41
41
  const count = checkpoint.mock.callCount();
42
- t.mock.timers.tick(session_1.PERIODIC_CHECKPOINT_MS * 3);
42
+ t.mock.timers.tick(index_1.PERIODIC_CHECKPOINT_MS * 3);
43
43
  strict_1.default.equal(checkpoint.mock.callCount(), count);
44
44
  });
45
45
  (0, node_test_1.it)('defers periodic work until five minutes after a successful turn/lifecycle checkpoint', async (t) => {
@@ -49,7 +49,7 @@ const git_sync_1 = require("./git-sync");
49
49
  t.mock.method(git_sync_1.GitSync.prototype, 'restore', async () => false);
50
50
  const commit = t.mock.method(git_sync_1.GitSync.prototype, 'commit', async () => 'sha');
51
51
  let checkpointed;
52
- const agent = new session_1.SessionAgent({
52
+ const agent = new index_1.SessionAgent({
53
53
  sessionId: 's', mode: 'session', profile: 'coding', workspaceDir: dir,
54
54
  model: 'unused', extractionModel: 'unused', mcpConnections: [], provider: {},
55
55
  git: { dir, serverUrl: 'unused', repository: 'unused', branch: 'session/s', token: 'unused' },
@@ -0,0 +1 @@
1
+ {"version":3,"file":"checkpoint-timer.test.js","sourceRoot":"","sources":["../../src/session/checkpoint-timer.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ import type { ModelMessage } from 'ai';
2
+ export interface PersistedConversation {
3
+ version: 1;
4
+ messages: ModelMessage[];
5
+ usedTokens: number;
6
+ budget?: number;
7
+ budgetPaused?: boolean;
8
+ }
9
+ /** Drops the oldest turns (user message + everything up to the next user message) past the cap, keeping the first one. */
10
+ export declare function limitConversation(messages: ModelMessage[], charBudget?: number): ModelMessage[];
11
+ /** Missing conversation means a new session; corrupt state must fail startup. */
12
+ export declare function readConversation(workspaceDir: string): Promise<PersistedConversation | undefined>;
13
+ /** Replace atomically so recovery never reads half of a conversation. The caller serializes writes. */
14
+ export declare function writeConversation(workspaceDir: string, getConversation: () => PersistedConversation): Promise<void>;
15
+ //# sourceMappingURL=conversation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"conversation.d.ts","sourceRoot":"","sources":["../../src/session/conversation.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,IAAI,CAAA;AAMtC,MAAM,WAAW,qBAAqB;IACpC,OAAO,EAAE,CAAC,CAAA;IACV,QAAQ,EAAE,YAAY,EAAE,CAAA;IACxB,UAAU,EAAE,MAAM,CAAA;IAClB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,YAAY,CAAC,EAAE,OAAO,CAAA;CACvB;AAMD,0HAA0H;AAC1H,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,YAAY,EAAE,EAAE,UAAU,SAAsB,GAAG,YAAY,EAAE,CAa5G;AAED,iFAAiF;AACjF,wBAAsB,gBAAgB,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,qBAAqB,GAAG,SAAS,CAAC,CAavG;AAED,uGAAuG;AACvG,wBAAsB,iBAAiB,CAAC,YAAY,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,qBAAqB,GAAG,OAAO,CAAC,IAAI,CAAC,CAOzH"}
@@ -0,0 +1,61 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.limitConversation = limitConversation;
7
+ exports.readConversation = readConversation;
8
+ exports.writeConversation = writeConversation;
9
+ const node_fs_1 = require("node:fs");
10
+ const node_path_1 = __importDefault(require("node:path"));
11
+ const CONVERSATION_FILE = '.builder/conversation.json';
12
+ /** Rough context cap (chars ≈ tokens × 4): older turns are dropped, the first question is kept. */
13
+ const CONTEXT_CHAR_BUDGET = 480000;
14
+ function approxChars(message) {
15
+ return JSON.stringify(message).length;
16
+ }
17
+ /** Drops the oldest turns (user message + everything up to the next user message) past the cap, keeping the first one. */
18
+ function limitConversation(messages, charBudget = CONTEXT_CHAR_BUDGET) {
19
+ var _a;
20
+ let total = messages.reduce((sum, message) => sum + approxChars(message), 0);
21
+ if (total <= charBudget)
22
+ return messages;
23
+ const result = [...messages];
24
+ while (total > charBudget) {
25
+ const userIndexes = result.map((m, i) => (m.role === 'user' ? i : -1)).filter((i) => i >= 0);
26
+ if (userIndexes.length < 2)
27
+ break;
28
+ const start = userIndexes[1];
29
+ const end = (_a = userIndexes[2]) !== null && _a !== void 0 ? _a : result.length;
30
+ const removed = result.splice(start, end - start);
31
+ total -= removed.reduce((sum, message) => sum + approxChars(message), 0);
32
+ }
33
+ return result;
34
+ }
35
+ /** Missing conversation means a new session; corrupt state must fail startup. */
36
+ async function readConversation(workspaceDir) {
37
+ let raw;
38
+ try {
39
+ raw = await node_fs_1.promises.readFile(node_path_1.default.join(workspaceDir, CONVERSATION_FILE), 'utf8');
40
+ }
41
+ catch (error) {
42
+ if (error.code === 'ENOENT')
43
+ return undefined;
44
+ throw error;
45
+ }
46
+ const parsed = JSON.parse(raw);
47
+ if (parsed.version !== 1 || !Array.isArray(parsed.messages)) {
48
+ throw new Error('Invalid saved session conversation');
49
+ }
50
+ return parsed;
51
+ }
52
+ /** Replace atomically so recovery never reads half of a conversation. The caller serializes writes. */
53
+ async function writeConversation(workspaceDir, getConversation) {
54
+ const target = node_path_1.default.join(workspaceDir, CONVERSATION_FILE);
55
+ await node_fs_1.promises.mkdir(node_path_1.default.dirname(target), { recursive: true });
56
+ // Read messages and token counters together after the directory is ready. A model step
57
+ // may finish during mkdir; capturing counters earlier would pair them with newer messages.
58
+ await node_fs_1.promises.writeFile(`${target}.tmp`, JSON.stringify(getConversation()));
59
+ await node_fs_1.promises.rename(`${target}.tmp`, target);
60
+ }
61
+ //# sourceMappingURL=conversation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"conversation.js","sourceRoot":"","sources":["../../src/session/conversation.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=conversation.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"conversation.test.d.ts","sourceRoot":"","sources":["../../src/session/conversation.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,53 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const strict_1 = __importDefault(require("node:assert/strict"));
7
+ const node_fs_1 = require("node:fs");
8
+ const node_os_1 = __importDefault(require("node:os"));
9
+ const node_path_1 = __importDefault(require("node:path"));
10
+ const node_test_1 = require("node:test");
11
+ const conversation_1 = require("./conversation");
12
+ (0, node_test_1.it)('trims whole turns without mutating history or separating tool calls from their results', () => {
13
+ const first = { role: 'user', content: 'Original research question' };
14
+ const latest = { role: 'user', content: 'Continue' };
15
+ const history = [
16
+ first,
17
+ { role: 'user', content: 'An older follow-up' },
18
+ { role: 'assistant', content: [{ type: 'tool-call', toolCallId: 'call', toolName: 'read_file', input: { path: 'notes' } }] },
19
+ { role: 'tool', content: [{ type: 'tool-result', toolCallId: 'call', toolName: 'read_file', output: { type: 'text', value: 'Notes' } }] },
20
+ latest,
21
+ ];
22
+ const original = structuredClone(history);
23
+ const budget = JSON.stringify(first).length + JSON.stringify(latest).length;
24
+ strict_1.default.deepEqual((0, conversation_1.limitConversation)(history, budget), [first, latest]);
25
+ strict_1.default.deepEqual(history, original);
26
+ strict_1.default.equal((0, conversation_1.limitConversation)(history), history);
27
+ strict_1.default.deepEqual((0, conversation_1.limitConversation)([first], 1), [first], 'the original question survives even if it exceeds the cap');
28
+ });
29
+ (0, node_test_1.it)('persists conversation and budget together and leaves no partial checkpoint behind', async (t) => {
30
+ const dir = await node_fs_1.promises.mkdtemp(node_path_1.default.join(node_os_1.default.tmpdir(), 'agent-conversation-'));
31
+ t.after(() => node_fs_1.promises.rm(dir, { recursive: true, force: true }));
32
+ strict_1.default.equal(await (0, conversation_1.readConversation)(dir), undefined);
33
+ const saved = {
34
+ version: 1,
35
+ messages: [{ role: 'user', content: 'Research' }, { role: 'assistant', content: 'Findings' }],
36
+ usedTokens: 120,
37
+ budget: 100,
38
+ budgetPaused: true,
39
+ };
40
+ await (0, conversation_1.writeConversation)(dir, () => saved);
41
+ strict_1.default.deepEqual(await (0, conversation_1.readConversation)(dir), saved);
42
+ strict_1.default.deepEqual(await node_fs_1.promises.readdir(node_path_1.default.join(dir, '.builder')), ['conversation.json']);
43
+ });
44
+ (0, node_test_1.it)('rejects corrupt or unsupported saved conversations instead of treating them as new sessions', async (t) => {
45
+ const dir = await node_fs_1.promises.mkdtemp(node_path_1.default.join(node_os_1.default.tmpdir(), 'agent-conversation-invalid-'));
46
+ t.after(() => node_fs_1.promises.rm(dir, { recursive: true, force: true }));
47
+ await node_fs_1.promises.mkdir(node_path_1.default.join(dir, '.builder'));
48
+ for (const raw of ['{', '{"version":2,"messages":[]}', '{"version":1,"messages":"invalid"}']) {
49
+ await node_fs_1.promises.writeFile(node_path_1.default.join(dir, '.builder/conversation.json'), raw);
50
+ await strict_1.default.rejects((0, conversation_1.readConversation)(dir));
51
+ }
52
+ });
53
+ //# sourceMappingURL=conversation.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"conversation.test.js","sourceRoot":"","sources":["../../src/session/conversation.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"idle-checkpoint.test.d.ts","sourceRoot":"","sources":["../../src/session/idle-checkpoint.test.ts"],"names":[],"mappings":""}
@@ -5,10 +5,10 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  const strict_1 = __importDefault(require("node:assert/strict"));
7
7
  const node_test_1 = require("node:test");
8
- const session_1 = require("./session");
8
+ const index_1 = require("./index");
9
9
  function fixture(withGit = true) {
10
10
  const events = [];
11
- const agent = new session_1.SessionAgent({
11
+ const agent = new index_1.SessionAgent({
12
12
  sessionId: 'test', workspaceDir: '/unused',
13
13
  ...(withGit ? { git: { serverUrl: 'https://example.test', repository: 'sessions', branch: 'session/test', token: 'test', dir: '/unused' } } : {}),
14
14
  }, {
@@ -46,10 +46,14 @@ function fixture(withGit = true) {
46
46
  });
47
47
  (0, node_test_1.it)('rejects a failed push and cancels when a turn starts during the push', async (t) => {
48
48
  const { agent, state, events } = fixture();
49
- const checkpoint = t.mock.method(agent, 'checkpoint', async () => { throw new Error('Git unavailable'); });
49
+ const checkpoint = t.mock.method(agent, 'checkpoint', async () => {
50
+ throw new Error('Git unavailable');
51
+ });
50
52
  await strict_1.default.rejects(agent.checkpointIfIdle(1000, 'request'), /Git unavailable/);
51
53
  strict_1.default.equal(events.length, 0);
52
- checkpoint.mock.mockImplementation(async () => { state.current = {}; });
54
+ checkpoint.mock.mockImplementation(async () => {
55
+ state.current = {};
56
+ });
53
57
  await agent.checkpointIfIdle(1000, 'request');
54
58
  strict_1.default.deepEqual(events, [{ type: 'checkpointed', requestId: 'request', skipped: true, idleConfirmed: false }]);
55
59
  });
@@ -0,0 +1 @@
1
+ {"version":3,"file":"idle-checkpoint.test.js","sourceRoot":"","sources":["../../src/session/idle-checkpoint.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ import type { AgentRuntimeConfig } from '../runtime/config';
2
+ import type { SessionLink } from '../transport/link';
3
+ import { SessionRuntime } from './runtime';
4
+ export { SessionRuntime as SessionAgent, PERIODIC_CHECKPOINT_MS } from './runtime';
5
+ export { limitConversation } from './conversation';
6
+ export declare function runSessionAgent(config: AgentRuntimeConfig, link: SessionLink): Promise<SessionRuntime>;
7
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/session/index.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAA;AAC3D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AACpD,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAA;AAE1C,OAAO,EAAE,cAAc,IAAI,YAAY,EAAE,sBAAsB,EAAE,MAAM,WAAW,CAAA;AAClF,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAA;AAElD,wBAAsB,eAAe,CAAC,MAAM,EAAE,kBAAkB,EAAE,IAAI,EAAE,WAAW,GAAG,OAAO,CAAC,cAAc,CAAC,CAI5G"}
@@ -0,0 +1,16 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.limitConversation = exports.PERIODIC_CHECKPOINT_MS = exports.SessionAgent = void 0;
4
+ exports.runSessionAgent = runSessionAgent;
5
+ const runtime_1 = require("./runtime");
6
+ var runtime_2 = require("./runtime");
7
+ Object.defineProperty(exports, "SessionAgent", { enumerable: true, get: function () { return runtime_2.SessionRuntime; } });
8
+ Object.defineProperty(exports, "PERIODIC_CHECKPOINT_MS", { enumerable: true, get: function () { return runtime_2.PERIODIC_CHECKPOINT_MS; } });
9
+ var conversation_1 = require("./conversation");
10
+ Object.defineProperty(exports, "limitConversation", { enumerable: true, get: function () { return conversation_1.limitConversation; } });
11
+ async function runSessionAgent(config, link) {
12
+ const session = new runtime_1.SessionRuntime(config, link);
13
+ await session.start();
14
+ return session;
15
+ }
16
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/session/index.ts"],"names":[],"mappings":";;;AAQA,0CAIC;AATD,uCAA0C;AAE1C,qCAAkF;AAAzE,uGAAA,cAAc,OAAgB;AAAE,iHAAA,sBAAsB,OAAA;AAC/D,+CAAkD;AAAzC,iHAAA,iBAAiB,OAAA;AAEnB,KAAK,UAAU,eAAe,CAAC,MAA0B,EAAE,IAAiB;IACjF,MAAM,OAAO,GAAG,IAAI,wBAAc,CAAC,MAAM,EAAE,IAAI,CAAC,CAAA;IAChD,MAAM,OAAO,CAAC,KAAK,EAAE,CAAA;IACrB,OAAO,OAAO,CAAA;AAChB,CAAC"}
@@ -0,0 +1,58 @@
1
+ import type { AgentDefinition } from '../agent/definition';
2
+ import type { AgentRuntimeConfig } from '../runtime/config';
3
+ import type { SessionLink } from '../transport/link';
4
+ import { TurnRunner } from '../agent/turn-runner';
5
+ import { type WorkspacePersistence } from '../persistence/workspace';
6
+ export declare const PERIODIC_CHECKPOINT_MS: number;
7
+ export interface SessionRuntimeDependencies {
8
+ definition?: AgentDefinition;
9
+ persistence?: WorkspacePersistence;
10
+ turnRunner?: Pick<TurnRunner, 'run'>;
11
+ }
12
+ export declare class SessionRuntime {
13
+ private readonly config;
14
+ private readonly link;
15
+ private messages;
16
+ private usedTokens;
17
+ private budget?;
18
+ private budgetPaused;
19
+ private current?;
20
+ private readonly queue;
21
+ private readonly persistence?;
22
+ private readonly definition;
23
+ private readonly turnRunner;
24
+ private systemPrompt;
25
+ private periodic?;
26
+ private stopped;
27
+ private turnTask?;
28
+ private checkpointTask;
29
+ private lastCheckpointAt;
30
+ private lastActivityAt;
31
+ constructor(config: AgentRuntimeConfig, link: SessionLink, dependencies?: SessionRuntimeDependencies);
32
+ private get workspaceDir();
33
+ start(): Promise<void>;
34
+ /** Lifecycle hooks (suspend / terminate) call this; it is safe to call repeatedly. */
35
+ checkpoint(reason: string, requestId?: string): Promise<void>;
36
+ stop(): Promise<void>;
37
+ /** Idle policy never aborts a turn, and rechecks after a potentially slow storage push. */
38
+ checkpointIfIdle(idleForMs: number, requestId?: string): Promise<void>;
39
+ private scheduleCheckpoint;
40
+ private handle;
41
+ /** One task owns the queue, including turns arriving while the previous turn checkpoints. */
42
+ private startQueuedTurns;
43
+ private drainQueue;
44
+ private budgetExceeded;
45
+ private nearBudget;
46
+ /**
47
+ * The budget pause as a question with an answer form, like the agent's own request_clarification:
48
+ * the platform routes the answer straight back here (answer-research-question.ts) instead of to
49
+ * the chat's orchestrator, which would otherwise decide for itself whether to resume.
50
+ */
51
+ private askBudgetQuestion;
52
+ private runTurn;
53
+ /** `detail` is the failure as reported (log only); `message` is what reaches the chat. */
54
+ private reportTurnError;
55
+ private loadConversation;
56
+ private saveConversation;
57
+ }
58
+ //# sourceMappingURL=runtime.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../../src/session/runtime.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAA;AAC1D,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAA;AAC3D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAIpD,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAA;AAEjD,OAAO,EAA8B,KAAK,oBAAoB,EAAE,MAAM,0BAA0B,CAAA;AAEhG,eAAO,MAAM,sBAAsB,QAAa,CAAA;AAEhD,MAAM,WAAW,0BAA0B;IACzC,UAAU,CAAC,EAAE,eAAe,CAAA;IAC5B,WAAW,CAAC,EAAE,oBAAoB,CAAA;IAClC,UAAU,CAAC,EAAE,IAAI,CAAC,UAAU,EAAE,KAAK,CAAC,CAAA;CACrC;AAeD,qBAAa,cAAc;IAmBvB,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,IAAI;IAnBvB,OAAO,CAAC,QAAQ,CAAqB;IACrC,OAAO,CAAC,UAAU,CAAI;IACtB,OAAO,CAAC,MAAM,CAAC,CAAQ;IACvB,OAAO,CAAC,YAAY,CAAQ;IAC5B,OAAO,CAAC,OAAO,CAAC,CAAY;IAC5B,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAsB;IAC5C,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAsB;IACnD,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAiB;IAC5C,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAyB;IACpD,OAAO,CAAC,YAAY,CAAK;IACzB,OAAO,CAAC,QAAQ,CAAC,CAAgB;IACjC,OAAO,CAAC,OAAO,CAAQ;IACvB,OAAO,CAAC,QAAQ,CAAC,CAAe;IAChC,OAAO,CAAC,cAAc,CAAmC;IACzD,OAAO,CAAC,gBAAgB,CAAI;IAC5B,OAAO,CAAC,cAAc,CAAa;gBAGhB,MAAM,EAAE,kBAAkB,EAC1B,IAAI,EAAE,WAAW,EAClC,YAAY,GAAE,0BAA+B;IAQ/C,OAAO,KAAK,YAAY,GAEvB;IAEK,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAkB5B,sFAAsF;IACtF,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAiBvD,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAU3B,2FAA2F;IACrF,gBAAgB,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAe5E,OAAO,CAAC,kBAAkB;YAgBZ,MAAM;IAuBpB,6FAA6F;IAC7F,OAAO,CAAC,gBAAgB;YASV,UAAU;IAOxB,OAAO,CAAC,cAAc;IAItB,OAAO,CAAC,UAAU;IAIlB;;;;OAIG;IACH,OAAO,CAAC,iBAAiB;YAgBX,OAAO;IA2ErB,0FAA0F;IAC1F,OAAO,CAAC,eAAe;YAKT,gBAAgB;IAU9B,OAAO,CAAC,gBAAgB;CASzB"}