pinecall 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 (431) hide show
  1. package/LICENSE +202 -0
  2. package/README.md +134 -0
  3. package/dist/agent/accepts.d.ts +32 -0
  4. package/dist/agent/accepts.d.ts.map +1 -0
  5. package/dist/agent/accepts.js +28 -0
  6. package/dist/agent/accepts.js.map +1 -0
  7. package/dist/agent/agent.d.ts +189 -0
  8. package/dist/agent/agent.d.ts.map +1 -0
  9. package/dist/agent/agent.js +262 -0
  10. package/dist/agent/agent.js.map +1 -0
  11. package/dist/agent/authors.d.ts +12 -0
  12. package/dist/agent/authors.d.ts.map +1 -0
  13. package/dist/agent/authors.js +28 -0
  14. package/dist/agent/authors.js.map +1 -0
  15. package/dist/agent/decorators.d.ts +22 -0
  16. package/dist/agent/decorators.d.ts.map +1 -0
  17. package/dist/agent/decorators.js +49 -0
  18. package/dist/agent/decorators.js.map +1 -0
  19. package/dist/agent/docstrings.d.ts +43 -0
  20. package/dist/agent/docstrings.d.ts.map +1 -0
  21. package/dist/agent/docstrings.js +311 -0
  22. package/dist/agent/docstrings.js.map +1 -0
  23. package/dist/agent/lifecycle.d.ts +29 -0
  24. package/dist/agent/lifecycle.d.ts.map +1 -0
  25. package/dist/agent/lifecycle.js +11 -0
  26. package/dist/agent/lifecycle.js.map +1 -0
  27. package/dist/agent/stages.d.ts +28 -0
  28. package/dist/agent/stages.d.ts.map +1 -0
  29. package/dist/agent/stages.js +32 -0
  30. package/dist/agent/stages.js.map +1 -0
  31. package/dist/agent/state.d.ts +43 -0
  32. package/dist/agent/state.d.ts.map +1 -0
  33. package/dist/agent/state.js +104 -0
  34. package/dist/agent/state.js.map +1 -0
  35. package/dist/agent/tools.d.ts +66 -0
  36. package/dist/agent/tools.d.ts.map +1 -0
  37. package/dist/agent/tools.js +148 -0
  38. package/dist/agent/tools.js.map +1 -0
  39. package/dist/agent/visibility.d.ts +40 -0
  40. package/dist/agent/visibility.d.ts.map +1 -0
  41. package/dist/agent/visibility.js +89 -0
  42. package/dist/agent/visibility.js.map +1 -0
  43. package/dist/call/call.d.ts +55 -0
  44. package/dist/call/call.d.ts.map +1 -0
  45. package/dist/call/call.js +108 -0
  46. package/dist/call/call.js.map +1 -0
  47. package/dist/call/history.d.ts +34 -0
  48. package/dist/call/history.d.ts.map +1 -0
  49. package/dist/call/history.js +38 -0
  50. package/dist/call/history.js.map +1 -0
  51. package/dist/call/room.d.ts +58 -0
  52. package/dist/call/room.d.ts.map +1 -0
  53. package/dist/call/room.js +68 -0
  54. package/dist/call/room.js.map +1 -0
  55. package/dist/cli/browser.d.ts +8 -0
  56. package/dist/cli/browser.d.ts.map +1 -0
  57. package/dist/cli/browser.js +27 -0
  58. package/dist/cli/browser.js.map +1 -0
  59. package/dist/cli/callbacks.d.ts +26 -0
  60. package/dist/cli/callbacks.d.ts.map +1 -0
  61. package/dist/cli/callbacks.js +68 -0
  62. package/dist/cli/callbacks.js.map +1 -0
  63. package/dist/cli/chat.d.ts +21 -0
  64. package/dist/cli/chat.d.ts.map +1 -0
  65. package/dist/cli/chat.js +214 -0
  66. package/dist/cli/chat.js.map +1 -0
  67. package/dist/cli/config.d.ts +16 -0
  68. package/dist/cli/config.d.ts.map +1 -0
  69. package/dist/cli/config.js +94 -0
  70. package/dist/cli/config.js.map +1 -0
  71. package/dist/cli/connected.d.ts +30 -0
  72. package/dist/cli/connected.d.ts.map +1 -0
  73. package/dist/cli/connected.js +32 -0
  74. package/dist/cli/connected.js.map +1 -0
  75. package/dist/cli/credentials.d.ts +41 -0
  76. package/dist/cli/credentials.d.ts.map +1 -0
  77. package/dist/cli/credentials.js +98 -0
  78. package/dist/cli/credentials.js.map +1 -0
  79. package/dist/cli/ear.d.ts +3 -0
  80. package/dist/cli/ear.d.ts.map +1 -0
  81. package/dist/cli/ear.js +59 -0
  82. package/dist/cli/ear.js.map +1 -0
  83. package/dist/cli/env.d.ts +40 -0
  84. package/dist/cli/env.d.ts.map +1 -0
  85. package/dist/cli/env.js +45 -0
  86. package/dist/cli/env.js.map +1 -0
  87. package/dist/cli/eval.d.ts +37 -0
  88. package/dist/cli/eval.d.ts.map +1 -0
  89. package/dist/cli/eval.js +83 -0
  90. package/dist/cli/eval.js.map +1 -0
  91. package/dist/cli/groups.d.ts +17 -0
  92. package/dist/cli/groups.d.ts.map +1 -0
  93. package/dist/cli/groups.js +38 -0
  94. package/dist/cli/groups.js.map +1 -0
  95. package/dist/cli/index.d.ts +16 -0
  96. package/dist/cli/index.d.ts.map +1 -0
  97. package/dist/cli/index.js +169 -0
  98. package/dist/cli/index.js.map +1 -0
  99. package/dist/cli/keys.d.ts +28 -0
  100. package/dist/cli/keys.d.ts.map +1 -0
  101. package/dist/cli/keys.js +137 -0
  102. package/dist/cli/keys.js.map +1 -0
  103. package/dist/cli/knowledge.d.ts +35 -0
  104. package/dist/cli/knowledge.d.ts.map +1 -0
  105. package/dist/cli/knowledge.js +174 -0
  106. package/dist/cli/knowledge.js.map +1 -0
  107. package/dist/cli/line.d.ts +33 -0
  108. package/dist/cli/line.d.ts.map +1 -0
  109. package/dist/cli/line.js +134 -0
  110. package/dist/cli/line.js.map +1 -0
  111. package/dist/cli/listening.d.ts +38 -0
  112. package/dist/cli/listening.d.ts.map +1 -0
  113. package/dist/cli/listening.js +124 -0
  114. package/dist/cli/listening.js.map +1 -0
  115. package/dist/cli/load.d.ts +38 -0
  116. package/dist/cli/load.d.ts.map +1 -0
  117. package/dist/cli/load.js +99 -0
  118. package/dist/cli/load.js.map +1 -0
  119. package/dist/cli/login.d.ts +30 -0
  120. package/dist/cli/login.d.ts.map +1 -0
  121. package/dist/cli/login.js +158 -0
  122. package/dist/cli/login.js.map +1 -0
  123. package/dist/cli/machine.d.ts +8 -0
  124. package/dist/cli/machine.d.ts.map +1 -0
  125. package/dist/cli/machine.js +41 -0
  126. package/dist/cli/machine.js.map +1 -0
  127. package/dist/cli/memory.d.ts +26 -0
  128. package/dist/cli/memory.d.ts.map +1 -0
  129. package/dist/cli/memory.js +148 -0
  130. package/dist/cli/memory.js.map +1 -0
  131. package/dist/cli/numbers.d.ts +25 -0
  132. package/dist/cli/numbers.d.ts.map +1 -0
  133. package/dist/cli/numbers.js +132 -0
  134. package/dist/cli/numbers.js.map +1 -0
  135. package/dist/cli/personas.d.ts +5 -0
  136. package/dist/cli/personas.d.ts.map +1 -0
  137. package/dist/cli/personas.js +94 -0
  138. package/dist/cli/personas.js.map +1 -0
  139. package/dist/cli/pipeline.d.ts +52 -0
  140. package/dist/cli/pipeline.d.ts.map +1 -0
  141. package/dist/cli/pipeline.js +184 -0
  142. package/dist/cli/pipeline.js.map +1 -0
  143. package/dist/cli/profiles.d.ts +70 -0
  144. package/dist/cli/profiles.d.ts.map +1 -0
  145. package/dist/cli/profiles.js +210 -0
  146. package/dist/cli/profiles.js.map +1 -0
  147. package/dist/cli/prompt.d.ts +20 -0
  148. package/dist/cli/prompt.d.ts.map +1 -0
  149. package/dist/cli/prompt.js +58 -0
  150. package/dist/cli/prompt.js.map +1 -0
  151. package/dist/cli/providers.d.ts +14 -0
  152. package/dist/cli/providers.d.ts.map +1 -0
  153. package/dist/cli/providers.js +116 -0
  154. package/dist/cli/providers.js.map +1 -0
  155. package/dist/cli/remember.d.ts +29 -0
  156. package/dist/cli/remember.d.ts.map +1 -0
  157. package/dist/cli/remember.js +112 -0
  158. package/dist/cli/remember.js.map +1 -0
  159. package/dist/cli/run.d.ts +20 -0
  160. package/dist/cli/run.d.ts.map +1 -0
  161. package/dist/cli/run.js +347 -0
  162. package/dist/cli/run.js.map +1 -0
  163. package/dist/cli/runs/candidate.d.ts +51 -0
  164. package/dist/cli/runs/candidate.d.ts.map +1 -0
  165. package/dist/cli/runs/candidate.js +127 -0
  166. package/dist/cli/runs/candidate.js.map +1 -0
  167. package/dist/cli/runs/drift.d.ts +75 -0
  168. package/dist/cli/runs/drift.d.ts.map +1 -0
  169. package/dist/cli/runs/drift.js +151 -0
  170. package/dist/cli/runs/drift.js.map +1 -0
  171. package/dist/cli/runs/index.d.ts +5 -0
  172. package/dist/cli/runs/index.d.ts.map +1 -0
  173. package/dist/cli/runs/index.js +99 -0
  174. package/dist/cli/runs/index.js.map +1 -0
  175. package/dist/cli/runs/suites.d.ts +16 -0
  176. package/dist/cli/runs/suites.d.ts.map +1 -0
  177. package/dist/cli/runs/suites.js +63 -0
  178. package/dist/cli/runs/suites.js.map +1 -0
  179. package/dist/cli/secret.d.ts +18 -0
  180. package/dist/cli/secret.d.ts.map +1 -0
  181. package/dist/cli/secret.js +41 -0
  182. package/dist/cli/secret.js.map +1 -0
  183. package/dist/cli/sessions.d.ts +21 -0
  184. package/dist/cli/sessions.d.ts.map +1 -0
  185. package/dist/cli/sessions.js +174 -0
  186. package/dist/cli/sessions.js.map +1 -0
  187. package/dist/cli/signup.d.ts +25 -0
  188. package/dist/cli/signup.d.ts.map +1 -0
  189. package/dist/cli/signup.js +122 -0
  190. package/dist/cli/signup.js.map +1 -0
  191. package/dist/cli/simulate.d.ts +45 -0
  192. package/dist/cli/simulate.d.ts.map +1 -0
  193. package/dist/cli/simulate.js +320 -0
  194. package/dist/cli/simulate.js.map +1 -0
  195. package/dist/cli/supervise.d.ts +18 -0
  196. package/dist/cli/supervise.d.ts.map +1 -0
  197. package/dist/cli/supervise.js +134 -0
  198. package/dist/cli/supervise.js.map +1 -0
  199. package/dist/cli/test.d.ts +12 -0
  200. package/dist/cli/test.d.ts.map +1 -0
  201. package/dist/cli/test.js +128 -0
  202. package/dist/cli/test.js.map +1 -0
  203. package/dist/cli/testing/caller.d.ts +28 -0
  204. package/dist/cli/testing/caller.d.ts.map +1 -0
  205. package/dist/cli/testing/caller.js +30 -0
  206. package/dist/cli/testing/caller.js.map +1 -0
  207. package/dist/cli/testing/gateway.d.ts +172 -0
  208. package/dist/cli/testing/gateway.d.ts.map +1 -0
  209. package/dist/cli/testing/gateway.js +96 -0
  210. package/dist/cli/testing/gateway.js.map +1 -0
  211. package/dist/cli/testing/goldens.d.ts +61 -0
  212. package/dist/cli/testing/goldens.d.ts.map +1 -0
  213. package/dist/cli/testing/goldens.js +54 -0
  214. package/dist/cli/testing/goldens.js.map +1 -0
  215. package/dist/cli/testing/latency.d.ts +15 -0
  216. package/dist/cli/testing/latency.d.ts.map +1 -0
  217. package/dist/cli/testing/latency.js +44 -0
  218. package/dist/cli/testing/latency.js.map +1 -0
  219. package/dist/cli/testing/matrix.d.ts +12 -0
  220. package/dist/cli/testing/matrix.d.ts.map +1 -0
  221. package/dist/cli/testing/matrix.js +103 -0
  222. package/dist/cli/testing/matrix.js.map +1 -0
  223. package/dist/cli/testing/progress.d.ts +26 -0
  224. package/dist/cli/testing/progress.d.ts.map +1 -0
  225. package/dist/cli/testing/progress.js +185 -0
  226. package/dist/cli/testing/progress.js.map +1 -0
  227. package/dist/cli/testing/reproduction.d.ts +19 -0
  228. package/dist/cli/testing/reproduction.d.ts.map +1 -0
  229. package/dist/cli/testing/reproduction.js +65 -0
  230. package/dist/cli/testing/reproduction.js.map +1 -0
  231. package/dist/cli/testing/score.d.ts +11 -0
  232. package/dist/cli/testing/score.d.ts.map +1 -0
  233. package/dist/cli/testing/score.js +54 -0
  234. package/dist/cli/testing/score.js.map +1 -0
  235. package/dist/cli/testing/seeding.d.ts +32 -0
  236. package/dist/cli/testing/seeding.d.ts.map +1 -0
  237. package/dist/cli/testing/seeding.js +44 -0
  238. package/dist/cli/testing/seeding.js.map +1 -0
  239. package/dist/cli/testing/suite.d.ts +40 -0
  240. package/dist/cli/testing/suite.d.ts.map +1 -0
  241. package/dist/cli/testing/suite.js +103 -0
  242. package/dist/cli/testing/suite.js.map +1 -0
  243. package/dist/cli/testing/voice.d.ts +37 -0
  244. package/dist/cli/testing/voice.d.ts.map +1 -0
  245. package/dist/cli/testing/voice.js +53 -0
  246. package/dist/cli/testing/voice.js.map +1 -0
  247. package/dist/cli/ui/admin/assets/index-C3WMXdfL.css +1 -0
  248. package/dist/cli/ui/admin/assets/index-DR1mxoAh.js +58 -0
  249. package/dist/cli/ui/admin/index.html +20 -0
  250. package/dist/cli/ui/asked.d.ts +16 -0
  251. package/dist/cli/ui/asked.d.ts.map +1 -0
  252. package/dist/cli/ui/asked.js +53 -0
  253. package/dist/cli/ui/asked.js.map +1 -0
  254. package/dist/cli/ui/browser.d.ts +10 -0
  255. package/dist/cli/ui/browser.d.ts.map +1 -0
  256. package/dist/cli/ui/browser.js +30 -0
  257. package/dist/cli/ui/browser.js.map +1 -0
  258. package/dist/cli/ui/chatting.d.ts +62 -0
  259. package/dist/cli/ui/chatting.d.ts.map +1 -0
  260. package/dist/cli/ui/chatting.js +171 -0
  261. package/dist/cli/ui/chatting.js.map +1 -0
  262. package/dist/cli/ui/console/assets/index-DCTnou52.css +1 -0
  263. package/dist/cli/ui/console/assets/index-dOcE4usU.js +99 -0
  264. package/dist/cli/ui/console/index.html +20 -0
  265. package/dist/cli/ui/console/logo-mark.png +0 -0
  266. package/dist/cli/ui/doors.d.ts +37 -0
  267. package/dist/cli/ui/doors.d.ts.map +1 -0
  268. package/dist/cli/ui/doors.js +70 -0
  269. package/dist/cli/ui/doors.js.map +1 -0
  270. package/dist/cli/ui/drifting.d.ts +23 -0
  271. package/dist/cli/ui/drifting.d.ts.map +1 -0
  272. package/dist/cli/ui/drifting.js +33 -0
  273. package/dist/cli/ui/drifting.js.map +1 -0
  274. package/dist/cli/ui/index.d.ts +15 -0
  275. package/dist/cli/ui/index.d.ts.map +1 -0
  276. package/dist/cli/ui/index.js +117 -0
  277. package/dist/cli/ui/index.js.map +1 -0
  278. package/dist/cli/ui/knowing.d.ts +36 -0
  279. package/dist/cli/ui/knowing.d.ts.map +1 -0
  280. package/dist/cli/ui/knowing.js +86 -0
  281. package/dist/cli/ui/knowing.js.map +1 -0
  282. package/dist/cli/ui/promoting.d.ts +26 -0
  283. package/dist/cli/ui/promoting.d.ts.map +1 -0
  284. package/dist/cli/ui/promoting.js +44 -0
  285. package/dist/cli/ui/promoting.js.map +1 -0
  286. package/dist/cli/ui/refusal.d.ts +18 -0
  287. package/dist/cli/ui/refusal.d.ts.map +1 -0
  288. package/dist/cli/ui/refusal.js +26 -0
  289. package/dist/cli/ui/refusal.js.map +1 -0
  290. package/dist/cli/ui/refused.d.ts +8 -0
  291. package/dist/cli/ui/refused.d.ts.map +1 -0
  292. package/dist/cli/ui/refused.js +11 -0
  293. package/dist/cli/ui/refused.js.map +1 -0
  294. package/dist/cli/ui/remembering.d.ts +38 -0
  295. package/dist/cli/ui/remembering.d.ts.map +1 -0
  296. package/dist/cli/ui/remembering.js +87 -0
  297. package/dist/cli/ui/remembering.js.map +1 -0
  298. package/dist/cli/ui/reproducing.d.ts +23 -0
  299. package/dist/cli/ui/reproducing.d.ts.map +1 -0
  300. package/dist/cli/ui/reproducing.js +52 -0
  301. package/dist/cli/ui/reproducing.js.map +1 -0
  302. package/dist/cli/ui/server.d.ts +22 -0
  303. package/dist/cli/ui/server.d.ts.map +1 -0
  304. package/dist/cli/ui/server.js +211 -0
  305. package/dist/cli/ui/server.js.map +1 -0
  306. package/dist/cli/ui/simulating.d.ts +47 -0
  307. package/dist/cli/ui/simulating.d.ts.map +1 -0
  308. package/dist/cli/ui/simulating.js +86 -0
  309. package/dist/cli/ui/simulating.js.map +1 -0
  310. package/dist/cli/ui/testing.d.ts +49 -0
  311. package/dist/cli/ui/testing.d.ts.map +1 -0
  312. package/dist/cli/ui/testing.js +104 -0
  313. package/dist/cli/ui/testing.js.map +1 -0
  314. package/dist/cli/view.d.ts +43 -0
  315. package/dist/cli/view.d.ts.map +1 -0
  316. package/dist/cli/view.js +137 -0
  317. package/dist/cli/view.js.map +1 -0
  318. package/dist/cli/whoami.d.ts +37 -0
  319. package/dist/cli/whoami.d.ts.map +1 -0
  320. package/dist/cli/whoami.js +78 -0
  321. package/dist/cli/whoami.js.map +1 -0
  322. package/dist/cli/world.d.ts +33 -0
  323. package/dist/cli/world.d.ts.map +1 -0
  324. package/dist/cli/world.js +48 -0
  325. package/dist/cli/world.js.map +1 -0
  326. package/dist/client/agent.d.ts +87 -0
  327. package/dist/client/agent.d.ts.map +1 -0
  328. package/dist/client/agent.js +209 -0
  329. package/dist/client/agent.js.map +1 -0
  330. package/dist/client/calls.d.ts +77 -0
  331. package/dist/client/calls.d.ts.map +1 -0
  332. package/dist/client/calls.js +153 -0
  333. package/dist/client/calls.js.map +1 -0
  334. package/dist/client/client.d.ts +58 -0
  335. package/dist/client/client.d.ts.map +1 -0
  336. package/dist/client/client.js +146 -0
  337. package/dist/client/client.js.map +1 -0
  338. package/dist/client/connection.d.ts +47 -0
  339. package/dist/client/connection.d.ts.map +1 -0
  340. package/dist/client/connection.js +141 -0
  341. package/dist/client/connection.js.map +1 -0
  342. package/dist/client/endpoints.d.ts +7 -0
  343. package/dist/client/endpoints.d.ts.map +1 -0
  344. package/dist/client/endpoints.js +21 -0
  345. package/dist/client/endpoints.js.map +1 -0
  346. package/dist/client/frames.d.ts +24 -0
  347. package/dist/client/frames.d.ts.map +1 -0
  348. package/dist/client/frames.js +49 -0
  349. package/dist/client/frames.js.map +1 -0
  350. package/dist/client/index.d.ts +15 -0
  351. package/dist/client/index.d.ts.map +1 -0
  352. package/dist/client/index.js +14 -0
  353. package/dist/client/index.js.map +1 -0
  354. package/dist/client/listeners.d.ts +36 -0
  355. package/dist/client/listeners.d.ts.map +1 -0
  356. package/dist/client/listeners.js +61 -0
  357. package/dist/client/listeners.js.map +1 -0
  358. package/dist/client/observe.d.ts +44 -0
  359. package/dist/client/observe.d.ts.map +1 -0
  360. package/dist/client/observe.js +122 -0
  361. package/dist/client/observe.js.map +1 -0
  362. package/dist/client/testing/gateway.d.ts +39 -0
  363. package/dist/client/testing/gateway.d.ts.map +1 -0
  364. package/dist/client/testing/gateway.js +129 -0
  365. package/dist/client/testing/gateway.js.map +1 -0
  366. package/dist/client/testing/index.d.ts +4 -0
  367. package/dist/client/testing/index.d.ts.map +1 -0
  368. package/dist/client/testing/index.js +4 -0
  369. package/dist/client/testing/index.js.map +1 -0
  370. package/dist/client/testing/log.d.ts +26 -0
  371. package/dist/client/testing/log.d.ts.map +1 -0
  372. package/dist/client/testing/log.js +111 -0
  373. package/dist/client/testing/log.js.map +1 -0
  374. package/dist/client/testing/loopback.d.ts +3 -0
  375. package/dist/client/testing/loopback.d.ts.map +1 -0
  376. package/dist/client/testing/loopback.js +3 -0
  377. package/dist/client/testing/loopback.js.map +1 -0
  378. package/dist/index.d.ts +22 -0
  379. package/dist/index.d.ts.map +1 -0
  380. package/dist/index.js +35 -0
  381. package/dist/index.js.map +1 -0
  382. package/dist/runtime/channels.d.ts +16 -0
  383. package/dist/runtime/channels.d.ts.map +1 -0
  384. package/dist/runtime/channels.js +30 -0
  385. package/dist/runtime/channels.js.map +1 -0
  386. package/dist/runtime/connect.d.ts +51 -0
  387. package/dist/runtime/connect.d.ts.map +1 -0
  388. package/dist/runtime/connect.js +284 -0
  389. package/dist/runtime/connect.js.map +1 -0
  390. package/dist/runtime/dispatch.d.ts +37 -0
  391. package/dist/runtime/dispatch.d.ts.map +1 -0
  392. package/dist/runtime/dispatch.js +52 -0
  393. package/dist/runtime/dispatch.js.map +1 -0
  394. package/dist/runtime/grounding.d.ts +15 -0
  395. package/dist/runtime/grounding.d.ts.map +1 -0
  396. package/dist/runtime/grounding.js +72 -0
  397. package/dist/runtime/grounding.js.map +1 -0
  398. package/dist/runtime/recall.d.ts +10 -0
  399. package/dist/runtime/recall.d.ts.map +1 -0
  400. package/dist/runtime/recall.js +13 -0
  401. package/dist/runtime/recall.js.map +1 -0
  402. package/dist/runtime/run-tool.d.ts +26 -0
  403. package/dist/runtime/run-tool.d.ts.map +1 -0
  404. package/dist/runtime/run-tool.js +82 -0
  405. package/dist/runtime/run-tool.js.map +1 -0
  406. package/dist/views/components.d.ts +17 -0
  407. package/dist/views/components.d.ts.map +1 -0
  408. package/dist/views/components.js +33 -0
  409. package/dist/views/components.js.map +1 -0
  410. package/dist/views/jsx-dev-runtime.d.ts +3 -0
  411. package/dist/views/jsx-dev-runtime.d.ts.map +1 -0
  412. package/dist/views/jsx-dev-runtime.js +5 -0
  413. package/dist/views/jsx-dev-runtime.js.map +1 -0
  414. package/dist/views/jsx-runtime.d.ts +49 -0
  415. package/dist/views/jsx-runtime.d.ts.map +1 -0
  416. package/dist/views/jsx-runtime.js +67 -0
  417. package/dist/views/jsx-runtime.js.map +1 -0
  418. package/dist/views/lang.d.ts +17 -0
  419. package/dist/views/lang.d.ts.map +1 -0
  420. package/dist/views/lang.js +46 -0
  421. package/dist/views/lang.js.map +1 -0
  422. package/dist/views/layout.d.ts +19 -0
  423. package/dist/views/layout.d.ts.map +1 -0
  424. package/dist/views/layout.js +62 -0
  425. package/dist/views/layout.js.map +1 -0
  426. package/dist/views/render.d.ts +19 -0
  427. package/dist/views/render.d.ts.map +1 -0
  428. package/dist/views/render.js +26 -0
  429. package/dist/views/render.js.map +1 -0
  430. package/package.json +76 -0
  431. package/tsconfig.tenant.json +24 -0
@@ -0,0 +1,58 @@
1
+ import type { Camel, CommandData, CommandType, EventType } from "@pinecall/protocol";
2
+ import { Agent, type AgentGateway, type AgentOptions } from "./agent.js";
3
+ import type { Call } from "./calls.js";
4
+ import { type Backoff } from "./connection.js";
5
+ import { type AnyListener, type CamelEvent, type Listener } from "./listeners.js";
6
+ import { type LogTarget, type Observation, type Page, type ReadOptions } from "./observe.js";
7
+ /** Where the gateway is and who we are to it. Both default to the environment. */
8
+ export interface PinecallOptions {
9
+ url?: string;
10
+ apiKey?: string;
11
+ pingMs?: number;
12
+ backoff?: Partial<Backoff>;
13
+ }
14
+ /**
15
+ * One app's connection to Pinecall.
16
+ *
17
+ * The gateway and the key are given, and this class reads NOTHING from the environment.
18
+ *
19
+ * It used to fall back to `PINECALL_URL` and `PINECALL_API_KEY`, and that second name was the
20
+ * problem: v1's SDK exports it too, so a shell that still had v1's key live handed this client
21
+ * another org's key and every call it made agreed — silently, because the name was the same.
22
+ * Where a program keeps its own secret is the program's business; guessing at one is not this
23
+ * class's, and a client pointed at a host nobody named fails later, where the app cannot read it.
24
+ */
25
+ export declare class Pinecall implements AgentGateway {
26
+ #private;
27
+ readonly sdk: string;
28
+ /** The gateway this client talks to. */
29
+ readonly url: string;
30
+ /** The key it talks with. It travels in a header, never in a URL. */
31
+ readonly apiKey: string;
32
+ constructor(options?: PinecallOptions);
33
+ /** Declare an agent this app speaks for. Nothing is sent until `connect`. */
34
+ agent(slug: string, options?: AgentOptions): Agent;
35
+ /** Open the socket, claim every agent's slug and doors, and send every declaration. */
36
+ connect(): Promise<void>;
37
+ /** Close the socket and stay closed. Every agent's slug is free the moment it shuts. */
38
+ close(): void;
39
+ /** True while the socket is up. */
40
+ get connected(): boolean;
41
+ /** Listen for one event type across every agent on this client. */
42
+ on<K extends EventType>(type: K, listener: Listener<K, Call | null>): () => void;
43
+ /** Listen for every event across every agent. */
44
+ onAny(listener: AnyListener<Call | null>): () => void;
45
+ /** Hear what the client could not hand to anybody: a bad frame, a tool that threw, a lost socket. */
46
+ onErrors(listener: (error: Error) => void): () => void;
47
+ /** A log as it happens, folded by the protocol's reducer. */
48
+ observe(target: LogTarget, options?: Partial<ReadOptions>): AsyncGenerator<Observation>;
49
+ /** A log as it stands, as one page, and what it folds to. */
50
+ history(target: LogTarget, options?: Partial<ReadOptions>): Promise<Page>;
51
+ /** One command frame up the socket, checked against its schema before it leaves. */
52
+ send<K extends CommandType>(type: K, agent: string, call: string | null, data: Camel<CommandData<K>>, id: string): void;
53
+ /** One event an agent has finished with, for the listeners registered across every agent. */
54
+ seen(event: CamelEvent, call: Call | null): void;
55
+ /** Something failed where nobody was waiting. */
56
+ onError(error: Error): void;
57
+ }
58
+ //# sourceMappingURL=client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/client/client.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,KAAK,EAAE,WAAW,EAAE,WAAW,EAAS,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC5F,OAAO,EAAE,KAAK,EAAE,KAAK,YAAY,EAAE,KAAK,YAAY,EAAE,MAAM,YAAY,CAAC;AACzE,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AACvC,OAAO,EAAc,KAAK,OAAO,EAA0B,MAAM,iBAAiB,CAAC;AAEnF,OAAO,EAAsB,KAAK,WAAW,EAAE,KAAK,UAAU,EAAE,KAAK,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AACtG,OAAO,EAAoB,KAAK,SAAS,EAAE,KAAK,WAAW,EAAE,KAAK,IAAI,EAAE,KAAK,WAAW,EAAE,MAAM,cAAc,CAAC;AAK/G,kFAAkF;AAClF,MAAM,WAAW,eAAe;IAC9B,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;CAC5B;AAED;;;;;;;;;;GAUG;AACH,qBAAa,QAAS,YAAW,YAAY;;IAE3C,QAAQ,CAAC,GAAG,SAAyB;IACrC,wCAAwC;IACxC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,qEAAqE;IACrE,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IAMxB,YAAY,OAAO,GAAE,eAAoB,EAqBxC;IAED,6EAA6E;IAC7E,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,GAAE,YAAiB,GAAG,KAAK,CAIrD;IAED,uFAAuF;IACjF,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAE7B;IAED,wFAAwF;IACxF,KAAK,IAAI,IAAI,CAEZ;IAED,mCAAmC;IACnC,IAAI,SAAS,IAAI,OAAO,CAEvB;IAED,mEAAmE;IACnE,EAAE,CAAC,CAAC,SAAS,SAAS,EAAE,IAAI,EAAE,CAAC,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC,GAAG,MAAM,IAAI,CAE/E;IAED,iDAAiD;IACjD,KAAK,CAAC,QAAQ,EAAE,WAAW,CAAC,IAAI,GAAG,IAAI,CAAC,GAAG,MAAM,IAAI,CAEpD;IAED,qGAAqG;IACrG,QAAQ,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,GAAG,MAAM,IAAI,CAKrD;IAED,6DAA6D;IAC7D,OAAO,CAAC,MAAM,EAAE,SAAS,EAAE,OAAO,GAAE,OAAO,CAAC,WAAW,CAAM,GAAG,cAAc,CAAC,WAAW,CAAC,CAE1F;IAED,6DAA6D;IACvD,OAAO,CAAC,MAAM,EAAE,SAAS,EAAE,OAAO,GAAE,OAAO,CAAC,WAAW,CAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAElF;IAID,oFAAoF;IACpF,IAAI,CAAC,CAAC,SAAS,WAAW,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,EAAE,IAAI,EAAE,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,GAAG,IAAI,CAEtH;IAED,6FAA6F;IAC7F,IAAI,CAAC,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI,CAE/C;IAED,iDAAiD;IACjD,OAAO,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI,CAQ1B;CAkCF"}
@@ -0,0 +1,146 @@
1
+ // The client: one socket, the agents on it, and a door to any log the key can read.
2
+ import { createRequire } from "node:module";
3
+ import { Agent } from "./agent.js";
4
+ import { Connection } from "./connection.js";
5
+ import { PinecallError, frame } from "./frames.js";
6
+ import { Listeners, asError } from "./listeners.js";
7
+ import { history, observe } from "./observe.js";
8
+ // Two levels up from dist/client/, and from src/client/ under a loader: the package's own manifest.
9
+ const { version } = createRequire(import.meta.url)("../../package.json");
10
+ /**
11
+ * One app's connection to Pinecall.
12
+ *
13
+ * The gateway and the key are given, and this class reads NOTHING from the environment.
14
+ *
15
+ * It used to fall back to `PINECALL_URL` and `PINECALL_API_KEY`, and that second name was the
16
+ * problem: v1's SDK exports it too, so a shell that still had v1's key live handed this client
17
+ * another org's key and every call it made agreed — silently, because the name was the same.
18
+ * Where a program keeps its own secret is the program's business; guessing at one is not this
19
+ * class's, and a client pointed at a host nobody named fails later, where the app cannot read it.
20
+ */
21
+ export class Pinecall {
22
+ // `sdk` is the wire's field name for who is registering, so it is this object's too.
23
+ sdk = `pinecall/${version}`;
24
+ /** The gateway this client talks to. */
25
+ url;
26
+ /** The key it talks with. It travels in a header, never in a URL. */
27
+ apiKey;
28
+ #agents = new Map();
29
+ #listeners;
30
+ #errors = new Set();
31
+ #connection;
32
+ constructor(options = {}) {
33
+ const { url, apiKey } = options;
34
+ if (url === undefined || apiKey === undefined) {
35
+ throw new PinecallError("new Pinecall({ url, apiKey }): one of the two was not given");
36
+ }
37
+ this.url = url;
38
+ this.apiKey = apiKey;
39
+ this.#listeners = new Listeners((error) => this.onError(error));
40
+ const dial = { url, apiKey };
41
+ if (options.pingMs !== undefined) {
42
+ dial.pingMs = options.pingMs;
43
+ }
44
+ if (options.backoff !== undefined) {
45
+ dial.backoff = options.backoff;
46
+ }
47
+ this.#connection = new Connection(dial, {
48
+ onOpen: () => this.#declareAll(),
49
+ onEntry: (entry) => this.#take(entry),
50
+ onError: (error) => this.onError(error),
51
+ onHeartbeat: () => this.#pingAll(),
52
+ });
53
+ }
54
+ /** Declare an agent this app speaks for. Nothing is sent until `connect`. */
55
+ agent(slug, options = {}) {
56
+ const agent = new Agent(slug, options, this);
57
+ this.#agents.set(slug, agent);
58
+ return agent;
59
+ }
60
+ /** Open the socket, claim every agent's slug and doors, and send every declaration. */
61
+ async connect() {
62
+ await this.#connection.start();
63
+ }
64
+ /** Close the socket and stay closed. Every agent's slug is free the moment it shuts. */
65
+ close() {
66
+ this.#connection.close();
67
+ }
68
+ /** True while the socket is up. */
69
+ get connected() {
70
+ return this.#connection.open;
71
+ }
72
+ /** Listen for one event type across every agent on this client. */
73
+ on(type, listener) {
74
+ return this.#listeners.on(type, listener);
75
+ }
76
+ /** Listen for every event across every agent. */
77
+ onAny(listener) {
78
+ return this.#listeners.onAny(listener);
79
+ }
80
+ /** Hear what the client could not hand to anybody: a bad frame, a tool that threw, a lost socket. */
81
+ onErrors(listener) {
82
+ this.#errors.add(listener);
83
+ return () => {
84
+ this.#errors.delete(listener);
85
+ };
86
+ }
87
+ /** A log as it happens, folded by the protocol's reducer. */
88
+ observe(target, options = {}) {
89
+ return observe(target, this.#reading(options));
90
+ }
91
+ /** A log as it stands, as one page, and what it folds to. */
92
+ async history(target, options = {}) {
93
+ return history(target, this.#reading(options));
94
+ }
95
+ // ── what the agents send through ────────────────────────────────────────────
96
+ /** One command frame up the socket, checked against its schema before it leaves. */
97
+ send(type, agent, call, data, id) {
98
+ this.#connection.send(frame(type, agent, call, data, id));
99
+ }
100
+ /** One event an agent has finished with, for the listeners registered across every agent. */
101
+ seen(event, call) {
102
+ this.#listeners.emit(event, call);
103
+ }
104
+ /** Something failed where nobody was waiting. */
105
+ onError(error) {
106
+ if (this.#errors.size === 0) {
107
+ console.error(error);
108
+ return;
109
+ }
110
+ for (const listener of this.#errors) {
111
+ listener(error);
112
+ }
113
+ }
114
+ #take(entry) {
115
+ const agent = this.#agents.get(entry.agent);
116
+ if (agent === undefined) {
117
+ // An entry for an agent this client never declared: the socket is shared, the app is not.
118
+ return;
119
+ }
120
+ try {
121
+ agent.take(entry);
122
+ }
123
+ catch (failed) {
124
+ this.onError(asError(failed));
125
+ }
126
+ }
127
+ async #declareAll() {
128
+ for (const agent of this.#agents.values()) {
129
+ await agent.open();
130
+ }
131
+ }
132
+ #pingAll() {
133
+ for (const agent of this.#agents.values()) {
134
+ try {
135
+ agent.ping();
136
+ }
137
+ catch (failed) {
138
+ this.onError(asError(failed));
139
+ }
140
+ }
141
+ }
142
+ #reading(options) {
143
+ return { url: this.url, apiKey: this.apiKey, ...options };
144
+ }
145
+ }
146
+ //# sourceMappingURL=client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/client/client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,47 @@
1
+ import { type Command, type Entry } from "@pinecall/protocol";
2
+ /** How long the client waits before trying again, and how fast that grows. */
3
+ export interface Backoff {
4
+ firstMs: number;
5
+ capMs: number;
6
+ factor: number;
7
+ }
8
+ /** Where the gateway is, who we are to it, and how patient to be. */
9
+ export interface ConnectionOptions {
10
+ url: string;
11
+ apiKey: string;
12
+ pingMs?: number;
13
+ backoff?: Partial<Backoff>;
14
+ }
15
+ /** What the client does with what the socket brings. */
16
+ export interface ConnectionHandlers {
17
+ /** The socket is up: send everything that must be true again before anything else is sent. */
18
+ onOpen: () => Promise<void>;
19
+ /** One log entry, exactly as the gateway wrote it. */
20
+ onEntry: (entry: Entry) => void;
21
+ /** A frame we could not read, a listener that threw, a socket that failed. */
22
+ onError: (error: Error) => void;
23
+ /** Time to prove the socket is alive. */
24
+ onHeartbeat: () => void;
25
+ }
26
+ /**
27
+ * One connection over its whole life, reconnects included.
28
+ *
29
+ * The key travels as `Authorization: Bearer` on the upgrade, never in the URL, because a URL ends
30
+ * up in an access log. A wrong key is closed with 1008 and no body, so a socket that never opens
31
+ * is retried like any other: the gateway will not say more the second time either.
32
+ */
33
+ export declare class Connection {
34
+ #private;
35
+ private readonly options;
36
+ private readonly handlers;
37
+ constructor(options: ConnectionOptions, handlers: ConnectionHandlers);
38
+ /** True between the socket opening and it closing again. */
39
+ get open(): boolean;
40
+ /** Open the socket and resolve once `onOpen` has run. After that, staying up is our problem. */
41
+ start(): Promise<void>;
42
+ /** One frame up. A command sent while the socket is down is refused, not queued. */
43
+ send(command: Command): void;
44
+ /** Stop, and stay stopped: no reconnect follows a close the app asked for. */
45
+ close(): void;
46
+ }
47
+ //# sourceMappingURL=connection.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"connection.d.ts","sourceRoot":"","sources":["../../src/client/connection.ts"],"names":[],"mappings":"AAEA,OAAO,EAAe,KAAK,OAAO,EAAE,KAAK,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAM3E,8EAA8E;AAC9E,MAAM,WAAW,OAAO;IACtB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,qEAAqE;AACrE,MAAM,WAAW,iBAAiB;IAChC,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;CAC5B;AAED,wDAAwD;AACxD,MAAM,WAAW,kBAAkB;IACjC,8FAA8F;IAC9F,MAAM,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5B,sDAAsD;IACtD,OAAO,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;IAChC,8EAA8E;IAC9E,OAAO,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;IAChC,yCAAyC;IACzC,WAAW,EAAE,MAAM,IAAI,CAAC;CACzB;AAKD;;;;;;GAMG;AACH,qBAAa,UAAU;;IAYnB,OAAO,CAAC,QAAQ,CAAC,OAAO;IACxB,OAAO,CAAC,QAAQ,CAAC,QAAQ;IAF3B,YACmB,OAAO,EAAE,iBAAiB,EAC1B,QAAQ,EAAE,kBAAkB,EAI9C;IAED,4DAA4D;IAC5D,IAAI,IAAI,IAAI,OAAO,CAElB;IAED,gGAAgG;IAC1F,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAa3B;IAED,oFAAoF;IACpF,IAAI,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAM3B;IAED,8EAA8E;IAC9E,KAAK,IAAI,IAAI,CAKZ;CA2EF"}
@@ -0,0 +1,141 @@
1
+ // The socket to the gateway: the key at the door, backoff on the way back, a ping while it is up.
2
+ import { decodeEntry } from "@pinecall/protocol";
3
+ import WebSocket from "ws";
4
+ import { appsUrl } from "./endpoints.js";
5
+ import { PinecallError } from "./frames.js";
6
+ import { asError } from "./listeners.js";
7
+ const DEFAULT_BACKOFF = { firstMs: 500, capMs: 30_000, factor: 2 };
8
+ const DEFAULT_PING_MS = 30_000;
9
+ /**
10
+ * One connection over its whole life, reconnects included.
11
+ *
12
+ * The key travels as `Authorization: Bearer` on the upgrade, never in the URL, because a URL ends
13
+ * up in an access log. A wrong key is closed with 1008 and no body, so a socket that never opens
14
+ * is retried like any other: the gateway will not say more the second time either.
15
+ */
16
+ export class Connection {
17
+ options;
18
+ handlers;
19
+ #socket = null;
20
+ #reconnect = null;
21
+ #ping = null;
22
+ #attempt = 0;
23
+ #closed = false;
24
+ #failed = null;
25
+ #opened = null;
26
+ #backoff;
27
+ #pingMs;
28
+ constructor(options, handlers) {
29
+ this.options = options;
30
+ this.handlers = handlers;
31
+ this.#backoff = { ...DEFAULT_BACKOFF, ...options.backoff };
32
+ this.#pingMs = options.pingMs ?? DEFAULT_PING_MS;
33
+ }
34
+ /** True between the socket opening and it closing again. */
35
+ get open() {
36
+ return this.#socket?.readyState === WebSocket.OPEN;
37
+ }
38
+ /** Open the socket and resolve once `onOpen` has run. After that, staying up is our problem. */
39
+ async start() {
40
+ this.#closed = false;
41
+ return new Promise((resolve, reject) => {
42
+ this.#opened = (error) => {
43
+ this.#opened = null;
44
+ if (error) {
45
+ reject(error);
46
+ }
47
+ else {
48
+ resolve();
49
+ }
50
+ };
51
+ this.#dial();
52
+ });
53
+ }
54
+ /** One frame up. A command sent while the socket is down is refused, not queued. */
55
+ send(command) {
56
+ const socket = this.#socket;
57
+ if (socket === null || socket.readyState !== WebSocket.OPEN) {
58
+ throw new PinecallError(`${command.type}: the gateway is not connected`);
59
+ }
60
+ socket.send(JSON.stringify(command));
61
+ }
62
+ /** Stop, and stay stopped: no reconnect follows a close the app asked for. */
63
+ close() {
64
+ this.#closed = true;
65
+ this.#stopTimers();
66
+ this.#socket?.close();
67
+ this.#socket = null;
68
+ }
69
+ #dial() {
70
+ const socket = new WebSocket(appsUrl(this.options.url), {
71
+ headers: { authorization: `Bearer ${this.options.apiKey}` },
72
+ });
73
+ this.#socket = socket;
74
+ socket.on("open", () => void this.#onOpen());
75
+ socket.on("message", (raw) => this.#onMessage(raw));
76
+ socket.on("error", (failed) => {
77
+ this.#failed = failed;
78
+ this.handlers.onError(failed);
79
+ });
80
+ socket.on("close", (code) => this.#onClose(code));
81
+ }
82
+ async #onOpen() {
83
+ this.#attempt = 0;
84
+ this.#failed = null;
85
+ try {
86
+ await this.handlers.onOpen();
87
+ }
88
+ catch (failed) {
89
+ // The socket is up and what must be true on it is not. Whoever called `start` hears it as a
90
+ // rejection and that is the whole report; on a reconnect nobody is waiting there, and then
91
+ // the app's error door is the only one. Both, and one failure is printed twice.
92
+ if (this.#opened === null) {
93
+ this.handlers.onError(asError(failed));
94
+ }
95
+ else {
96
+ this.#opened(asError(failed));
97
+ }
98
+ return;
99
+ }
100
+ this.#ping = setInterval(() => this.handlers.onHeartbeat(), this.#pingMs);
101
+ this.#opened?.();
102
+ }
103
+ #onMessage(raw) {
104
+ try {
105
+ this.handlers.onEntry(decodeEntry(JSON.parse(raw.toString())));
106
+ }
107
+ catch (failed) {
108
+ this.handlers.onError(asError(failed));
109
+ }
110
+ }
111
+ #onClose(code) {
112
+ this.#stopTimers();
113
+ this.#socket = null;
114
+ if (this.#closed) {
115
+ return;
116
+ }
117
+ // The first connection failing is the app's to hear: a wrong key, a host nobody is on. Every
118
+ // close after one that worked is a blip, and a blip is answered with a retry, not a rejection.
119
+ if (this.#opened !== null) {
120
+ this.#opened(new PinecallError(`the gateway refused the socket: ${this.#failed?.message ?? `closed with ${code}`}`));
121
+ return;
122
+ }
123
+ this.#reconnect = setTimeout(() => this.#dial(), this.#waitMs());
124
+ }
125
+ // Full jitter: every client that lost the same gateway comes back at a different moment.
126
+ #waitMs() {
127
+ const window = Math.min(this.#backoff.capMs, this.#backoff.firstMs * this.#backoff.factor ** this.#attempt);
128
+ this.#attempt += 1;
129
+ return Math.random() * window;
130
+ }
131
+ #stopTimers() {
132
+ for (const timer of [this.#reconnect, this.#ping]) {
133
+ if (timer !== null) {
134
+ clearTimeout(timer);
135
+ }
136
+ }
137
+ this.#reconnect = null;
138
+ this.#ping = null;
139
+ }
140
+ }
141
+ //# sourceMappingURL=connection.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"connection.js","sourceRoot":"","sources":["../../src/client/connection.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ /** `WS /v1/apps`, from whatever base the app gave: http and https are the same host as ws and wss. */
2
+ export declare function appsUrl(base: string): string;
3
+ /** `GET /v1/calls/{id}/events`: one call's log, as a JSON page or as SSE. */
4
+ export declare function callLogUrl(base: string, call: string): string;
5
+ /** `GET /v1/agents/{slug}/calls`: the agent's own log — registrations, configurations, errors. */
6
+ export declare function agentLogUrl(base: string, agent: string): string;
7
+ //# sourceMappingURL=endpoints.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"endpoints.d.ts","sourceRoot":"","sources":["../../src/client/endpoints.ts"],"names":[],"mappings":"AAEA,sGAAsG;AACtG,wBAAgB,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAE5C;AAED,6EAA6E;AAC7E,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAE7D;AAED,kGAAkG;AAClG,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAE/D"}
@@ -0,0 +1,21 @@
1
+ // One base URL, three doors. The app configures a host; nothing else writes a path.
2
+ /** `WS /v1/apps`, from whatever base the app gave: http and https are the same host as ws and wss. */
3
+ export function appsUrl(base) {
4
+ return doorAt(base, "/v1/apps", true);
5
+ }
6
+ /** `GET /v1/calls/{id}/events`: one call's log, as a JSON page or as SSE. */
7
+ export function callLogUrl(base, call) {
8
+ return doorAt(base, `/v1/calls/${encodeURIComponent(call)}/events`, false);
9
+ }
10
+ /** `GET /v1/agents/{slug}/calls`: the agent's own log — registrations, configurations, errors. */
11
+ export function agentLogUrl(base, agent) {
12
+ return doorAt(base, `/v1/agents/${encodeURIComponent(agent)}/calls`, false);
13
+ }
14
+ function doorAt(base, path, websocket) {
15
+ const url = new URL(base);
16
+ const secure = url.protocol === "https:" || url.protocol === "wss:";
17
+ url.protocol = websocket ? (secure ? "wss:" : "ws:") : secure ? "https:" : "http:";
18
+ url.pathname = `${url.pathname.replace(/\/$/, "")}${path}`;
19
+ return url.toString();
20
+ }
21
+ //# sourceMappingURL=endpoints.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"endpoints.js","sourceRoot":"","sources":["../../src/client/endpoints.ts"],"names":[],"mappings":"AAAA,oFAAoF;AAEpF,sGAAsG;AACtG,MAAM,UAAU,OAAO,CAAC,IAAY;IAClC,OAAO,MAAM,CAAC,IAAI,EAAE,UAAU,EAAE,IAAI,CAAC,CAAC;AACxC,CAAC;AAED,6EAA6E;AAC7E,MAAM,UAAU,UAAU,CAAC,IAAY,EAAE,IAAY;IACnD,OAAO,MAAM,CAAC,IAAI,EAAE,aAAa,kBAAkB,CAAC,IAAI,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;AAC7E,CAAC;AAED,kGAAkG;AAClG,MAAM,UAAU,WAAW,CAAC,IAAY,EAAE,KAAa;IACrD,OAAO,MAAM,CAAC,IAAI,EAAE,cAAc,kBAAkB,CAAC,KAAK,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;AAC9E,CAAC;AAED,SAAS,MAAM,CAAC,IAAY,EAAE,IAAY,EAAE,SAAkB;IAC5D,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,CAAC;IAC1B,MAAM,MAAM,GAAG,GAAG,CAAC,QAAQ,KAAK,QAAQ,IAAI,GAAG,CAAC,QAAQ,KAAK,MAAM,CAAC;IACpE,GAAG,CAAC,QAAQ,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC;IACnF,GAAG,CAAC,QAAQ,GAAG,GAAG,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,GAAG,IAAI,EAAE,CAAC;IAC3D,OAAO,GAAG,CAAC,QAAQ,EAAE,CAAC;AACxB,CAAC"}
@@ -0,0 +1,24 @@
1
+ import { type Camel, type Command, type CommandData, type CommandType, type EventData } from "@pinecall/protocol";
2
+ /** Anything the client refuses to do, and anything the gateway refused to do for it. */
3
+ export declare class PinecallError extends Error {
4
+ readonly name = "PinecallError";
5
+ }
6
+ /** A refusal the gateway sent back as an `error` entry, with the code a program can match. */
7
+ export declare class Refused extends PinecallError {
8
+ readonly refusal: Camel<EventData<"error">>;
9
+ constructor(refusal: Camel<EventData<"error">>);
10
+ }
11
+ /**
12
+ * What a dev verb's handler throws to refuse: the status the console's door answers with, and the
13
+ * sentence it shows verbatim. Anything else thrown is a 500 with the error's message.
14
+ */
15
+ export declare class DevRefused extends PinecallError {
16
+ readonly status: number;
17
+ readonly detail: string;
18
+ constructor(status: number, detail: string);
19
+ }
20
+ /** The next command id, unique in this process: an `error` naming it is an answer to us. */
21
+ export declare function nextId(): string;
22
+ /** One command frame, its data camelCase in and snake_case on the wire. A bad shape throws here. */
23
+ export declare function frame<K extends CommandType>(type: K, agent: string, call: string | null, data: Camel<CommandData<K>>, id?: string): Command;
24
+ //# sourceMappingURL=frames.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"frames.d.ts","sourceRoot":"","sources":["../../src/client/frames.ts"],"names":[],"mappings":"AAEA,OAAO,EAIL,KAAK,KAAK,EACV,KAAK,OAAO,EACZ,KAAK,WAAW,EAChB,KAAK,WAAW,EAChB,KAAK,SAAS,EACf,MAAM,oBAAoB,CAAC;AAE5B,wFAAwF;AACxF,qBAAa,aAAc,SAAQ,KAAK;IACtC,SAAkB,IAAI,mBAAmB;CAC1C;AAED,8FAA8F;AAC9F,qBAAa,OAAQ,SAAQ,aAAa;IAC5B,QAAQ,CAAC,OAAO,EAAE,KAAK,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;IAAvD,YAAqB,OAAO,EAAE,KAAK,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,EAEtD;CACF;AAED;;;GAGG;AACH,qBAAa,UAAW,SAAQ,aAAa;IAEzC,QAAQ,CAAC,MAAM,EAAE,MAAM;IACvB,QAAQ,CAAC,MAAM,EAAE,MAAM;IAFzB,YACW,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,EAGxB;CACF;AAID,4FAA4F;AAC5F,wBAAgB,MAAM,IAAI,MAAM,CAE/B;AAID,oGAAoG;AACpG,wBAAgB,KAAK,CAAC,CAAC,SAAS,WAAW,EACzC,IAAI,EAAE,CAAC,EACP,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,MAAM,GAAG,IAAI,EACnB,IAAI,EAAE,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,EAC3B,EAAE,GAAE,MAAiB,GACpB,OAAO,CAWT"}
@@ -0,0 +1,49 @@
1
+ // A command frame, built and checked against the schema its type names. Nothing here knows a socket.
2
+ import { COMMAND_SCHEMAS, CommandSchema, toSnake, } from "@pinecall/protocol";
3
+ /** Anything the client refuses to do, and anything the gateway refused to do for it. */
4
+ export class PinecallError extends Error {
5
+ name = "PinecallError";
6
+ }
7
+ /** A refusal the gateway sent back as an `error` entry, with the code a program can match. */
8
+ export class Refused extends PinecallError {
9
+ refusal;
10
+ constructor(refusal) {
11
+ super(`${refusal.code}: ${refusal.message}`);
12
+ this.refusal = refusal;
13
+ }
14
+ }
15
+ /**
16
+ * What a dev verb's handler throws to refuse: the status the console's door answers with, and the
17
+ * sentence it shows verbatim. Anything else thrown is a 500 with the error's message.
18
+ */
19
+ export class DevRefused extends PinecallError {
20
+ status;
21
+ detail;
22
+ constructor(status, detail) {
23
+ super(`${status}: ${detail}`);
24
+ this.status = status;
25
+ this.detail = detail;
26
+ }
27
+ }
28
+ let sent = 0;
29
+ /** The next command id, unique in this process: an `error` naming it is an answer to us. */
30
+ export function nextId() {
31
+ return `c${(sent += 1)}`;
32
+ }
33
+ // The app writes camelCase and the codec turns it into the wire's keys; the schema then says
34
+ // whether the gateway would have accepted it, here, where the stack trace is still the app's.
35
+ /** One command frame, its data camelCase in and snake_case on the wire. A bad shape throws here. */
36
+ export function frame(type, agent, call, data, id = nextId()) {
37
+ // zod is @pinecall/protocol's dependency, not ours: the schema is used through the one method
38
+ // this file needs, so no version of zod is ever named on this side.
39
+ const schema = COMMAND_SCHEMAS[type];
40
+ let checked;
41
+ try {
42
+ checked = schema.parse(toSnake(data));
43
+ }
44
+ catch (bad) {
45
+ throw new PinecallError(`${type}: ${bad instanceof Error ? bad.message : String(bad)}`);
46
+ }
47
+ return CommandSchema.parse({ type, agent, call, id, data: checked });
48
+ }
49
+ //# sourceMappingURL=frames.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"frames.js","sourceRoot":"","sources":["../../src/client/frames.ts"],"names":[],"mappings":"AAAA,qGAAqG;AAErG,OAAO,EACL,eAAe,EACf,aAAa,EACb,OAAO,GAMR,MAAM,oBAAoB,CAAC;AAE5B,wFAAwF;AACxF,MAAM,OAAO,aAAc,SAAQ,KAAK;IACpB,IAAI,GAAG,eAAe,CAAC;CAC1C;AAED,8FAA8F;AAC9F,MAAM,OAAO,OAAQ,SAAQ,aAAa;IACnB,OAAO;IAA5B,YAAqB,OAAkC;QACrD,KAAK,CAAC,GAAG,OAAO,CAAC,IAAI,KAAK,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;uBAD1B,OAAO;IAE5B,CAAC;CACF;AAED;;;GAGG;AACH,MAAM,OAAO,UAAW,SAAQ,aAAa;IAEhC,MAAM;IACN,MAAM;IAFjB,YACW,MAAc,EACd,MAAc;QAEvB,KAAK,CAAC,GAAG,MAAM,KAAK,MAAM,EAAE,CAAC,CAAC;sBAHrB,MAAM;sBACN,MAAM;IAGjB,CAAC;CACF;AAED,IAAI,IAAI,GAAG,CAAC,CAAC;AAEb,4FAA4F;AAC5F,MAAM,UAAU,MAAM;IACpB,OAAO,IAAI,CAAC,IAAI,IAAI,CAAC,CAAC,EAAE,CAAC;AAC3B,CAAC;AAED,6FAA6F;AAC7F,8FAA8F;AAC9F,oGAAoG;AACpG,MAAM,UAAU,KAAK,CACnB,IAAO,EACP,KAAa,EACb,IAAmB,EACnB,IAA2B,EAC3B,EAAE,GAAW,MAAM,EAAE;IAErB,8FAA8F;IAC9F,oEAAoE;IACpE,MAAM,MAAM,GAAG,eAAe,CAAC,IAAI,CAAuC,CAAC;IAC3E,IAAI,OAAgB,CAAC;IACrB,IAAI,CAAC;QACH,OAAO,GAAG,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;IACxC,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,IAAI,aAAa,CAAC,GAAG,IAAI,KAAK,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAC1F,CAAC;IACD,OAAO,aAAa,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC;AACvE,CAAC"}
@@ -0,0 +1,15 @@
1
+ export { Agent } from "./agent.js";
2
+ export type { AgentGateway, AgentOptions, DevHandler, RouteInput, Tool } from "./agent.js";
3
+ export { Call, CallBook } from "./calls.js";
4
+ export type { CallGateway, CallStatus } from "./calls.js";
5
+ export { Pinecall } from "./client.js";
6
+ export type { PinecallOptions } from "./client.js";
7
+ export { Connection } from "./connection.js";
8
+ export type { Backoff, ConnectionHandlers, ConnectionOptions } from "./connection.js";
9
+ export { agentLogUrl, appsUrl, callLogUrl } from "./endpoints.js";
10
+ export { DevRefused, PinecallError, Refused, frame, nextId } from "./frames.js";
11
+ export { Listeners, camelEvent } from "./listeners.js";
12
+ export type { AnyListener, CamelEvent, Listener, Payload } from "./listeners.js";
13
+ export { history, observe } from "./observe.js";
14
+ export type { LogTarget, Observation, Page, ReadOptions } from "./observe.js";
15
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/client/index.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,YAAY,EAAE,YAAY,EAAE,YAAY,EAAE,UAAU,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAC3F,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAC5C,YAAY,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAC1D,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,YAAY,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AACnD,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,YAAY,EAAE,OAAO,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACtF,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAClE,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAChF,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AACvD,YAAY,EAAE,WAAW,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AACjF,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAChD,YAAY,EAAE,SAAS,EAAE,WAAW,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC"}
@@ -0,0 +1,14 @@
1
+ // pinecall/client: an app registers its agents over the gateway's WS door, answers their tool
2
+ // calls, and reads any log its key can reach. The wire's own shapes come from @pinecall/protocol.
3
+ //
4
+ // This is the socket, and nothing above it: no Agent class, no view, no CLI. An app that has
5
+ // its own way of deciding what to answer imports this and never the framework.
6
+ export { Agent } from "./agent.js";
7
+ export { Call, CallBook } from "./calls.js";
8
+ export { Pinecall } from "./client.js";
9
+ export { Connection } from "./connection.js";
10
+ export { agentLogUrl, appsUrl, callLogUrl } from "./endpoints.js";
11
+ export { DevRefused, PinecallError, Refused, frame, nextId } from "./frames.js";
12
+ export { Listeners, camelEvent } from "./listeners.js";
13
+ export { history, observe } from "./observe.js";
14
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/client/index.ts"],"names":[],"mappings":"AAAA,8FAA8F;AAC9F,kGAAkG;AAClG,EAAE;AACF,6FAA6F;AAC7F,+EAA+E;AAE/E,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAEnC,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAE5C,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAEvC,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAE7C,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAClE,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAChF,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAEvD,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC"}
@@ -0,0 +1,36 @@
1
+ import { type Camel, type Event, type EventData, type EventType } from "@pinecall/protocol";
2
+ /** One event's data as the app reads it: the wire's shape, camelCase. */
3
+ export type Payload<K extends EventType> = Camel<EventData<K>>;
4
+ /** One event, typed by its type, as the app reads it: switch on `type` and `data` narrows with it. */
5
+ export type CamelEvent = {
6
+ [K in EventType]: {
7
+ type: K;
8
+ data: Payload<K>;
9
+ };
10
+ }[EventType];
11
+ /** What runs when an event of one type arrives. */
12
+ export type Listener<K extends EventType, Context> = (data: Payload<K>, context: Context) => unknown;
13
+ /** What runs for every event, whatever its type. */
14
+ export type AnyListener<Context> = (event: CamelEvent, context: Context) => unknown;
15
+ /** The decoded event with its keys as the app reads them. */
16
+ export declare function camelEvent(event: Event): CamelEvent;
17
+ /**
18
+ * Every listener registered against one thing — an agent, or a call — and the dispatch to them.
19
+ *
20
+ * A listener that throws is a bug in the app, not a reason to stop reading the socket: it is
21
+ * handed to `onError` and the next listener still runs.
22
+ */
23
+ export declare class Listeners<Context> {
24
+ #private;
25
+ private readonly onError;
26
+ constructor(onError: (error: Error) => void);
27
+ /** Listen for one event type. The returned function stops listening. */
28
+ on<K extends EventType>(type: K, listener: Listener<K, Context>): () => void;
29
+ /** Listen for every event. The returned function stops listening. */
30
+ onAny(listener: AnyListener<Context>): () => void;
31
+ /** Hand one event to everybody waiting for it, then to everybody waiting for anything. */
32
+ emit(event: CamelEvent, context: Context): void;
33
+ }
34
+ /** Whatever was thrown, as an Error: `catch` gives `unknown` and a listener may throw a string. */
35
+ export declare function asError(thrown: unknown): Error;
36
+ //# sourceMappingURL=listeners.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"listeners.d.ts","sourceRoot":"","sources":["../../src/client/listeners.ts"],"names":[],"mappings":"AAEA,OAAO,EAAW,KAAK,KAAK,EAAE,KAAK,KAAK,EAAE,KAAK,SAAS,EAAE,KAAK,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAErG,yEAAyE;AACzE,MAAM,MAAM,OAAO,CAAC,CAAC,SAAS,SAAS,IAAI,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;AAE/D,sGAAsG;AACtG,MAAM,MAAM,UAAU,GAAG;KAAG,CAAC,IAAI,SAAS,GAAG;QAAE,IAAI,EAAE,CAAC,CAAC;QAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,CAAA;KAAE;CAAE,CAAC,SAAS,CAAC,CAAC;AAExF,mDAAmD;AACnD,MAAM,MAAM,QAAQ,CAAC,CAAC,SAAS,SAAS,EAAE,OAAO,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,KAAK,OAAO,CAAC;AAErG,oDAAoD;AACpD,MAAM,MAAM,WAAW,CAAC,OAAO,IAAI,CAAC,KAAK,EAAE,UAAU,EAAE,OAAO,EAAE,OAAO,KAAK,OAAO,CAAC;AAIpF,6DAA6D;AAC7D,wBAAgB,UAAU,CAAC,KAAK,EAAE,KAAK,GAAG,UAAU,CAEnD;AAED;;;;;GAKG;AACH,qBAAa,SAAS,CAAC,OAAO;;IAIhB,OAAO,CAAC,QAAQ,CAAC,OAAO;IAApC,YAA6B,OAAO,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,EAAI;IAEhE,wEAAwE;IACxE,EAAE,CAAC,CAAC,SAAS,SAAS,EAAE,IAAI,EAAE,CAAC,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC,EAAE,OAAO,CAAC,GAAG,MAAM,IAAI,CAO3E;IAED,qEAAqE;IACrE,KAAK,CAAC,QAAQ,EAAE,WAAW,CAAC,OAAO,CAAC,GAAG,MAAM,IAAI,CAKhD;IAED,0FAA0F;IAC1F,IAAI,CAAC,KAAK,EAAE,UAAU,EAAE,OAAO,EAAE,OAAO,GAAG,IAAI,CAO9C;CAYF;AAED,mGAAmG;AACnG,wBAAgB,OAAO,CAAC,MAAM,EAAE,OAAO,GAAG,KAAK,CAE9C"}