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,22 @@
1
+ export * from "./agent/agent.js";
2
+ export * from "./agent/authors.js";
3
+ export * from "./agent/state.js";
4
+ export * from "./agent/tools.js";
5
+ export * from "./agent/decorators.js";
6
+ export type { Stages } from "./agent/stages.js";
7
+ export * from "./agent/docstrings.js";
8
+ export * from "./agent/lifecycle.js";
9
+ export * from "./views/jsx-runtime.js";
10
+ export * from "./views/components.js";
11
+ export { PROMPT_BLOCKS, type Block, type Blocks } from "./views/layout.js";
12
+ export * from "./views/render.js";
13
+ export * from "./runtime/channels.js";
14
+ export { ToolFailed, runTool } from "./runtime/run-tool.js";
15
+ export * from "./runtime/connect.js";
16
+ export * from "./agent/visibility.js";
17
+ export * from "./agent/accepts.js";
18
+ export * from "./call/room.js";
19
+ export * from "./call/history.js";
20
+ export * from "./call/call.js";
21
+ export * from "./views/lang.js";
22
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAUA,cAAc,kBAAkB,CAAC;AACjC,cAAc,oBAAoB,CAAC;AACnC,cAAc,kBAAkB,CAAC;AACjC,cAAc,kBAAkB,CAAC;AACjC,cAAc,uBAAuB,CAAC;AAGtC,YAAY,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAChD,cAAc,uBAAuB,CAAC;AACtC,cAAc,sBAAsB,CAAC;AACrC,cAAc,wBAAwB,CAAC;AACvC,cAAc,uBAAuB,CAAC;AAGtC,OAAO,EAAE,aAAa,EAAE,KAAK,KAAK,EAAE,KAAK,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAC3E,cAAc,mBAAmB,CAAC;AAClC,cAAc,uBAAuB,CAAC;AAItC,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAC;AAC5D,cAAc,sBAAsB,CAAC;AACrC,cAAc,uBAAuB,CAAC;AACtC,cAAc,oBAAoB,CAAC;AACnC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,mBAAmB,CAAC;AAClC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,iBAAiB,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,35 @@
1
+ // pinecall: the tenant's side — a class whose fields are the state and whose @tool methods are
2
+ // the model's verbs. One export line per module.
3
+ //
4
+ // What a stranger who types `import { … } from "pinecall"` may reach: the agent, the JSX-to-text
5
+ // runtime its `render()` is written in, the call, and the bridge that mounts one on a client. Never a CLI module, never a bridge internal —
6
+ // test/index.test.ts pins the list, so adding an export means editing that test.
7
+ //
8
+ // The socket underneath is a door of its own, `pinecall/client`, because an app that has its own
9
+ // way of deciding what to answer wants it without any of this.
10
+ export * from "./agent/agent.js";
11
+ export * from "./agent/authors.js";
12
+ export * from "./agent/state.js";
13
+ export * from "./agent/tools.js";
14
+ export * from "./agent/decorators.js";
15
+ export * from "./agent/docstrings.js";
16
+ export * from "./agent/lifecycle.js";
17
+ export * from "./views/jsx-runtime.js";
18
+ export * from "./views/components.js";
19
+ // Not `layout` itself: `promptOf(agent)` next door is that function under the name a tenant reads
20
+ // it by, and one thing with two names is one name too many.
21
+ export { PROMPT_BLOCKS } from "./views/layout.js";
22
+ export * from "./views/render.js";
23
+ export * from "./runtime/channels.js";
24
+ // Not the whole module: `runTool` and its error are how a tenant runs one tool the way the bridge
25
+ // would, which is what an agent's own ring-0 suite is written against. The rest of run-tool.ts —
26
+ // the argument check, the preview cut — is the bridge's business and stays inside.
27
+ export { ToolFailed, runTool } from "./runtime/run-tool.js";
28
+ export * from "./runtime/connect.js";
29
+ export * from "./agent/visibility.js";
30
+ export * from "./agent/accepts.js";
31
+ export * from "./call/room.js";
32
+ export * from "./call/history.js";
33
+ export * from "./call/call.js";
34
+ export * from "./views/lang.js";
35
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,+FAA+F;AAC/F,iDAAiD;AACjD,EAAE;AACF,iGAAiG;AACjG,4IAA4I;AAC5I,iFAAiF;AACjF,EAAE;AACF,iGAAiG;AACjG,+DAA+D;AAE/D,cAAc,kBAAkB,CAAC;AACjC,cAAc,oBAAoB,CAAC;AACnC,cAAc,kBAAkB,CAAC;AACjC,cAAc,kBAAkB,CAAC;AACjC,cAAc,uBAAuB,CAAC;AAItC,cAAc,uBAAuB,CAAC;AACtC,cAAc,sBAAsB,CAAC;AACrC,cAAc,wBAAwB,CAAC;AACvC,cAAc,uBAAuB,CAAC;AACtC,kGAAkG;AAClG,4DAA4D;AAC5D,OAAO,EAAE,aAAa,EAA2B,MAAM,mBAAmB,CAAC;AAC3E,cAAc,mBAAmB,CAAC;AAClC,cAAc,uBAAuB,CAAC;AACtC,kGAAkG;AAClG,iGAAiG;AACjG,mFAAmF;AACnF,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAC;AAC5D,cAAc,sBAAsB,CAAC;AACrC,cAAc,uBAAuB,CAAC;AACtC,cAAc,oBAAoB,CAAC;AACnC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,mBAAmB,CAAC;AAClC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,iBAAiB,CAAC"}
@@ -0,0 +1,16 @@
1
+ /** The doors: the class's phone, whatsapp and web fields translated into the routes it registers. */
2
+ import type { RouteInput } from "../client/index.js";
3
+ /** The three config fields that are doors, in the order a console reads them. */
4
+ export type ChannelField = "phone" | "whatsapp" | "web";
5
+ /** The phone line, when the class declares one. */
6
+ export declare function phoneRoute(value: unknown): RouteInput | null;
7
+ /** The WhatsApp door, when the class declares one. */
8
+ export declare function whatsappRoute(value: unknown): RouteInput | null;
9
+ /** The web widget's door, which never carries a number. */
10
+ export declare function webRoute(value: unknown): RouteInput | null;
11
+ /**
12
+ * Every door this agent answers. The wire has no `channel.add` command — a route is part of
13
+ * agent.register — so this is where the three fields become the declaration, once, at register.
14
+ */
15
+ export declare function routesOf(config: Record<string, unknown>): RouteInput[];
16
+ //# sourceMappingURL=channels.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"channels.d.ts","sourceRoot":"","sources":["../../src/runtime/channels.ts"],"names":[],"mappings":"AAAA,qGAAqG;AAErG,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAErD,iFAAiF;AACjF,MAAM,MAAM,YAAY,GAAG,OAAO,GAAG,UAAU,GAAG,KAAK,CAAC;AAUxD,mDAAmD;AACnD,wBAAgB,UAAU,CAAC,KAAK,EAAE,OAAO,GAAG,UAAU,GAAG,IAAI,CAE5D;AAED,sDAAsD;AACtD,wBAAgB,aAAa,CAAC,KAAK,EAAE,OAAO,GAAG,UAAU,GAAG,IAAI,CAE/D;AAED,2DAA2D;AAC3D,wBAAgB,QAAQ,CAAC,KAAK,EAAE,OAAO,GAAG,UAAU,GAAG,IAAI,CAE1D;AAED;;;GAGG;AACH,wBAAgB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,UAAU,EAAE,CAGtE"}
@@ -0,0 +1,30 @@
1
+ /** The doors: the class's phone, whatsapp and web fields translated into the routes it registers. */
2
+ // A door is declared by being truthy. `phone = "+34 910 000 000"` is a number; `web = true` is a
3
+ // channel with no number at all, which is what the widget is. `false`, `""` and undefined are
4
+ // "this agent does not answer there", not "answer with an empty number".
5
+ function routeOf(channel, value) {
6
+ if (value === undefined || value === null || value === false || value === "")
7
+ return null;
8
+ return { channel, number: typeof value === "string" ? value : null };
9
+ }
10
+ /** The phone line, when the class declares one. */
11
+ export function phoneRoute(value) {
12
+ return routeOf("phone", value);
13
+ }
14
+ /** The WhatsApp door, when the class declares one. */
15
+ export function whatsappRoute(value) {
16
+ return routeOf("whatsapp", value);
17
+ }
18
+ /** The web widget's door, which never carries a number. */
19
+ export function webRoute(value) {
20
+ return routeOf("web", value);
21
+ }
22
+ /**
23
+ * Every door this agent answers. The wire has no `channel.add` command — a route is part of
24
+ * agent.register — so this is where the three fields become the declaration, once, at register.
25
+ */
26
+ export function routesOf(config) {
27
+ return [phoneRoute(config["phone"]), whatsappRoute(config["whatsapp"]), webRoute(config["web"])]
28
+ .filter((route) => route !== null);
29
+ }
30
+ //# sourceMappingURL=channels.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"channels.js","sourceRoot":"","sources":["../../src/runtime/channels.ts"],"names":[],"mappings":"AAAA,qGAAqG;AAOrG,iGAAiG;AACjG,8FAA8F;AAC9F,yEAAyE;AACzE,SAAS,OAAO,CAAC,OAAqB,EAAE,KAAc;IACpD,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,KAAK,IAAI,KAAK,KAAK,EAAE;QAAE,OAAO,IAAI,CAAC;IAC1F,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;AACvE,CAAC;AAED,mDAAmD;AACnD,MAAM,UAAU,UAAU,CAAC,KAAc;IACvC,OAAO,OAAO,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;AACjC,CAAC;AAED,sDAAsD;AACtD,MAAM,UAAU,aAAa,CAAC,KAAc;IAC1C,OAAO,OAAO,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;AACpC,CAAC;AAED,2DAA2D;AAC3D,MAAM,UAAU,QAAQ,CAAC,KAAc;IACrC,OAAO,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;AAC/B,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,QAAQ,CAAC,MAA+B;IACtD,OAAO,CAAC,UAAU,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,EAAE,aAAa,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;SAC7F,MAAM,CAAC,CAAC,KAAK,EAAuB,EAAE,CAAC,KAAK,KAAK,IAAI,CAAC,CAAC;AAC5D,CAAC"}
@@ -0,0 +1,51 @@
1
+ /** The bridge: an Agent class mounted on a Pinecall client, one live instance per call. */
2
+ import type { Camel, ModelConfig } from "@pinecall/protocol";
3
+ import type { Agent as SdkAgent, AgentOptions, Call as SdkCall, Pinecall, Tool } from "../client/index.js";
4
+ import { Agent } from "../agent/agent.js";
5
+ import { type LastCall, type Snapshot } from "../agent/state.js";
6
+ /** What mount needs beyond the class: where to send, and the class's own source. */
7
+ export interface MountOptions {
8
+ pc: Pinecall;
9
+ /** The class's own source, so docstrings and parameter types survive compilation. */
10
+ source?: string;
11
+ /** The agent file's own path: the dialect its source is parsed as, and where its knowledge file is read. */
12
+ file?: string;
13
+ /** Override the slug the class name would give. */
14
+ slug?: string;
15
+ /** Where every instance of this agent reads `this.last(contact)` from. Per mount, never global. */
16
+ last?: LastCall;
17
+ /** False for a console: it serves the call it opens itself and no call that named no app. */
18
+ takesUnclaimed?: boolean;
19
+ /**
20
+ * The state a case opens a call in. Applied after the class's own `onCall` and before the first
21
+ * render, which is the only moment it can be: earlier and `onCall` writes over it, later and the
22
+ * bridge re-renders once per field and shows the model states the call was never in.
23
+ */
24
+ opening?: (call: SdkCall) => Snapshot | undefined;
25
+ }
26
+ /** A mounted agent: the sdk agent it registered as, and the instances it is serving right now. */
27
+ export interface Mounted {
28
+ slug: string;
29
+ agent: SdkAgent;
30
+ options: AgentOptions;
31
+ /** The instance serving one call, while the call lasts. */
32
+ instanceOf(callId: string): Agent | undefined;
33
+ }
34
+ type Ctor = new () => Agent;
35
+ /** The slug an agent registers under: its `static slug`, or its class name in kebab-case. */
36
+ export declare function slugOf(ctor: Function): string;
37
+ /** The model a bare name means, so `llm = "haiku"` reaches the provider as an id it recognises. */
38
+ export declare function modelOf(value: unknown): Camel<ModelConfig> | undefined;
39
+ /**
40
+ * Everything the class says about itself, as the declaration the gateway is sent. The probe is one
41
+ * instance of the class, read and thrown away; mount builds it once and hands it in. `file` is
42
+ * where the class came from, so what it knows is read beside it.
43
+ */
44
+ export declare function optionsFor(ctor: Ctor, tools: Tool[], instance?: Agent, file?: string): AgentOptions;
45
+ /**
46
+ * Mount a class on a client: it registers once, and from then on every call gets its own instance,
47
+ * its own state and its own rendered prompt. Nothing is sent until `pc.connect()`.
48
+ */
49
+ export declare function mount(ctor: Ctor, { pc, source, file, slug, last, opening, takesUnclaimed }: MountOptions): Mounted;
50
+ export {};
51
+ //# sourceMappingURL=connect.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"connect.d.ts","sourceRoot":"","sources":["../../src/runtime/connect.ts"],"names":[],"mappings":"AAAA,2FAA2F;AAE3F,OAAO,KAAK,EACV,KAAK,EAGL,WAAW,EAIZ,MAAM,oBAAoB,CAAC;AAC5B,OAAO,KAAK,EAAE,KAAK,IAAI,QAAQ,EAAE,YAAY,EAAE,IAAI,IAAI,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,oBAAoB,CAAC;AAE3G,OAAO,EAAE,KAAK,EAAuG,MAAM,mBAAmB,CAAC;AAM/I,OAAO,EAAY,KAAK,QAAQ,EAAE,KAAK,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAU3E,oFAAoF;AACpF,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,QAAQ,CAAC;IACb,qFAAqF;IACrF,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,4GAA4G;IAC5G,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,mDAAmD;IACnD,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,mGAAmG;IACnG,IAAI,CAAC,EAAE,QAAQ,CAAC;IAChB,6FAA6F;IAC7F,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB;;;;OAIG;IACH,OAAO,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,QAAQ,GAAG,SAAS,CAAC;CACnD;AAED,kGAAkG;AAClG,MAAM,WAAW,OAAO;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,QAAQ,CAAC;IAChB,OAAO,EAAE,YAAY,CAAC;IACtB,2DAA2D;IAC3D,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,KAAK,GAAG,SAAS,CAAC;CAC/C;AAED,KAAK,IAAI,GAAG,UAAU,KAAK,CAAC;AAoB5B,6FAA6F;AAC7F,wBAAgB,MAAM,CAAC,IAAI,EAAE,QAAQ,GAAG,MAAM,CAO7C;AAYD,mGAAmG;AACnG,wBAAgB,OAAO,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,CAAC,WAAW,CAAC,GAAG,SAAS,CAKtE;AAiED;;;;GAIG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,QAAQ,GAAE,KAAkB,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,YAAY,CAyB/G;AAED;;;GAGG;AACH,wBAAgB,KAAK,CACnB,IAAI,EAAE,IAAI,EACV,EAAE,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,cAAqB,EAAE,EAAE,YAAY,GAC7E,OAAO,CAuBT"}
@@ -0,0 +1,284 @@
1
+ /** The bridge: an Agent class mounted on a Pinecall client, one live instance per call. */
2
+ import { Agent, onChange, onLog, recalled, seal, setCall, setLast } from "../agent/agent.js";
3
+ import { eventsOf } from "../agent/accepts.js";
4
+ import { visibilityOf } from "../agent/visibility.js";
5
+ import { CallWorld } from "../call/call.js";
6
+ import { describe } from "../agent/docstrings.js";
7
+ import { runHook } from "../agent/lifecycle.js";
8
+ import { snapshot } from "../agent/state.js";
9
+ import { toolNamed } from "../agent/tools.js";
10
+ import { PROMPT_BLOCKS } from "../views/layout.js";
11
+ import { promptOf } from "../views/render.js";
12
+ import { routesOf } from "./channels.js";
13
+ import { inOrder } from "./dispatch.js";
14
+ import { groundingOf } from "./grounding.js";
15
+ import { wordsRecalled } from "./recall.js";
16
+ import { runTool, ToolFailed } from "./run-tool.js";
17
+ /** The slug an agent registers under: its `static slug`, or its class name in kebab-case. */
18
+ export function slugOf(ctor) {
19
+ const declared = ctor.slug;
20
+ if (typeof declared === "string")
21
+ return declared;
22
+ return ctor.name
23
+ .replace(/([a-z0-9])([A-Z])/g, "$1-$2")
24
+ .replace(/([A-Z]+)([A-Z][a-z])/g, "$1-$2")
25
+ .toLowerCase();
26
+ }
27
+ // `llm = "haiku"` is how the design writes it, and the wire wants a provider and a real model id:
28
+ // "haiku" on its own is a 404 from Anthropic. The three short names are the family's tiers as the
29
+ // runtime prices them; anything else is passed through as written, with "provider/model" naming
30
+ // both halves and a bare name defaulting to Anthropic. An object written out in full is untouched.
31
+ const SHORT_NAMES = {
32
+ haiku: "claude-haiku-4-5-20251001",
33
+ sonnet: "claude-sonnet-5",
34
+ opus: "claude-opus-5",
35
+ };
36
+ /** The model a bare name means, so `llm = "haiku"` reaches the provider as an id it recognises. */
37
+ export function modelOf(value) {
38
+ if (typeof value === "object" && value !== null)
39
+ return value;
40
+ if (typeof value !== "string" || value === "")
41
+ return undefined;
42
+ const [provider, name] = value.includes("/") ? value.split("/", 2) : ["anthropic", value];
43
+ return { provider: provider, model: SHORT_NAMES[name] ?? name };
44
+ }
45
+ // `voice = "carolina"` is a name, not an id: sending it as one is how a call spent twenty seconds
46
+ // retrying 1008 voice_id_does_not_exist while the model apologised. The word the class wrote travels
47
+ // as the word it is, and the platform resolves it to a vendor and an id when this declaration lands
48
+ // — so a voice nobody curated is refused there, and never at the first utterance.
49
+ function voiceOf(value) {
50
+ if (typeof value === "object" && value !== null)
51
+ return value;
52
+ if (typeof value !== "string" || value === "")
53
+ return undefined;
54
+ return { name: value };
55
+ }
56
+ // `says = { Vidal: "bidál" }` is how the class writes it, because a map is how anybody thinks
57
+ // about it; the wire carries a list so the schema can name both halves. The voice is given the
58
+ // spoken form on its way out and the log keeps what the model actually wrote.
59
+ function saysOf(value) {
60
+ if (typeof value !== "object" || value === null)
61
+ return undefined;
62
+ const said = Object.entries(value)
63
+ .filter(([word, spoken]) => word !== "" && typeof spoken === "string" && spoken !== "")
64
+ .map(([word, spoken]) => ({ word, spoken: spoken }));
65
+ return said.length === 0 ? undefined : said;
66
+ }
67
+ /** `hears = ["Clínica Norte"]`: the words the ears must know, as the class wrote them. */
68
+ function hearsOf(value) {
69
+ if (!Array.isArray(value))
70
+ return undefined;
71
+ const heard = value.filter((word) => typeof word === "string" && word !== "");
72
+ return heard.length === 0 ? undefined : heard;
73
+ }
74
+ // The same sentence the runtime refuses with, because it is the same rule: a greeting names one
75
+ // of the two verbs the wire already has, and a class that named both has not decided which.
76
+ const GREETING_IS_ONE_VERB = "a greeting is one of two things: `say` the words, or `reply` what the model reads before it finds its own.";
77
+ /** `greeting = "Buenos días."` or `greeting = { reply: "saluda y preséntate" }`: the opening. */
78
+ function greetingOf(value) {
79
+ if (typeof value === "string")
80
+ return value === "" ? undefined : { say: value };
81
+ if (typeof value !== "object" || value === null)
82
+ return undefined;
83
+ const declared = value;
84
+ const said = declared.say !== undefined;
85
+ const replied = declared.reply !== undefined;
86
+ if (said === replied) {
87
+ throw new Error(`${GREETING_IS_ONE_VERB} ${said ? "Both were declared" : "Neither was"} — pick one.`);
88
+ }
89
+ const greeting = said ? { say: declared.say } : { reply: declared.reply };
90
+ if (declared.allowInterruptions !== undefined)
91
+ greeting.allowInterruptions = declared.allowInterruptions;
92
+ return greeting;
93
+ }
94
+ // Only what the class declared: a field nobody wrote a visibility for is tenant by the wire's own
95
+ // default, and saying so again would be the framework inventing a declaration.
96
+ // `hangup = {}` is a declaration too: the empty object says the model may end the call and leaves
97
+ // the wording to livekit's own description. Only a class that says nothing at all gets no tool.
98
+ function hangupOf(value) {
99
+ if (typeof value !== "object" || value === null)
100
+ return undefined;
101
+ const declared = value;
102
+ return { when: declared.when ?? "" };
103
+ }
104
+ function stateFieldsOf(ctor) {
105
+ const declared = visibilityOf(ctor);
106
+ return declared.length === 0 ? undefined : declared;
107
+ }
108
+ /**
109
+ * Everything the class says about itself, as the declaration the gateway is sent. The probe is one
110
+ * instance of the class, read and thrown away; mount builds it once and hands it in. `file` is
111
+ * where the class came from, so what it knows is read beside it.
112
+ */
113
+ export function optionsFor(ctor, tools, instance = new ctor(), file) {
114
+ const probe = instance;
115
+ const options = { routes: routesOf(probe), tools, ...groundingOf(probe, file) };
116
+ const language = probe["language"];
117
+ if (typeof language === "string")
118
+ options.language = language;
119
+ const llm = modelOf(probe["llm"]);
120
+ if (llm)
121
+ options.llm = llm;
122
+ const voice = voiceOf(probe["voice"]);
123
+ if (voice)
124
+ options.voice = voice;
125
+ const says = saysOf(probe["says"]);
126
+ if (says)
127
+ options.says = says;
128
+ const hears = hearsOf(probe["hears"]);
129
+ if (hears)
130
+ options.hears = hears;
131
+ const greeting = greetingOf(probe["greeting"]);
132
+ if (greeting)
133
+ options.greeting = greeting;
134
+ const hangup = hangupOf(probe["hangup"]);
135
+ if (hangup)
136
+ options.hangup = hangup;
137
+ // The layout is always sent whole: the send order is the framework's contract, and the wire
138
+ // carrying it is what lets the runtime and the console name every block the same way.
139
+ options.prompt = [...PROMPT_BLOCKS];
140
+ const stateFields = stateFieldsOf(ctor);
141
+ if (stateFields)
142
+ options.stateFields = stateFields;
143
+ const events = eventsOf(ctor);
144
+ if (events.length > 0)
145
+ options.events = events;
146
+ return options;
147
+ }
148
+ /**
149
+ * Mount a class on a client: it registers once, and from then on every call gets its own instance,
150
+ * its own state and its own rendered prompt. Nothing is sent until `pc.connect()`.
151
+ */
152
+ export function mount(ctor, { pc, source, file, slug, last, opening, takesUnclaimed = true }) {
153
+ if (source !== undefined)
154
+ describe(ctor, source, file);
155
+ const name = slug ?? slugOf(ctor);
156
+ const live = new Map();
157
+ // One instance to read the class with: its tools and everything it declares about itself are
158
+ // read off the same probe, which is then thrown away. Every call gets an instance of its own.
159
+ const probe = new ctor();
160
+ const tools = probe.tools().map((spec) => ({
161
+ ...spec,
162
+ run: (args, call) => call_(live, call, spec.name, args),
163
+ }));
164
+ const options = { ...optionsFor(ctor, tools, probe, file), takesUnclaimed };
165
+ const agent = pc.agent(name, options);
166
+ agent.on("call.started", (_payload, call) => {
167
+ if (call !== null) {
168
+ void start(ctor, live, call, (type, id, data) => agent.command(type, id, data), last, opening);
169
+ }
170
+ });
171
+ agent.on("call.ended", (_payload, call) => {
172
+ if (call !== null)
173
+ void end(live, call);
174
+ });
175
+ return { slug: name, agent, options, instanceOf: (id) => live.get(id)?.agent };
176
+ }
177
+ // One tool call, routed to the instance that owns this call. A call the bridge is not serving is
178
+ // the model talking to a hung-up line, and the model is told so instead of the process throwing.
179
+ async function call_(live, call, name, args) {
180
+ const serving = live.get(call.id);
181
+ if (serving === undefined)
182
+ throw new ToolFailed(`${name}: this call is no longer being served`);
183
+ const declaration = toolNamed(serving.agent, name);
184
+ if (declaration === undefined)
185
+ throw new ToolFailed(`${name}: this agent declares no such tool`);
186
+ return runTool(serving.agent, declaration, args);
187
+ }
188
+ // A call started: build the instance, let onCall write into it, send the whole prompt once, and
189
+ // only then start listening — so the opening send is one prompt and not one per field onCall set.
190
+ async function start(ctor, live, call, send, last, opening) {
191
+ const agent = seal(new ctor());
192
+ if (last !== undefined)
193
+ setLast(agent, last);
194
+ const world = new CallWorld(hookCall(call), (type, data) => send(type, call.id, data));
195
+ setCall(agent, world);
196
+ const serving = { agent, ctor, call: world, warned: new Set(), queue: Promise.resolve() };
197
+ const link = { agent, sent: { blocks: new Map() }, stop: [], serving };
198
+ live.set(call.id, link);
199
+ await runHook(agent, "onCall", hookCall(call));
200
+ const wanted = opening?.(call);
201
+ if (wanted !== undefined)
202
+ agent.startIn(wanted);
203
+ call.setState(snapshot(agent));
204
+ sync(link, call);
205
+ link.stop.push(onChange(agent, (change) => {
206
+ call.setState(snapshot(agent), [change.field]);
207
+ // state.set carries no cause on the wire, so the reason a field moved goes in the log next
208
+ // to it: one line naming the event, the field and the event's place in this call's stream.
209
+ const cause = world.cause;
210
+ if (cause !== null)
211
+ call.log("state.cause", { field: change.field, kind: "event", ...cause });
212
+ sync(link, call);
213
+ }), onLog(agent, (entry) => call.log(entry.name, dataOf(entry.data))), call.onAny((event) => {
214
+ world.take(event.type, event.data, Date.now());
215
+ if (event.type === "event.received")
216
+ void received(serving, event.data);
217
+ // What memory found is not state and moves no field, so nothing else would re-render — and a
218
+ // `render()` that asks what the agent remembers is a different prompt once it has an answer.
219
+ if (event.type === "memory.ops") {
220
+ recalled(agent, wordsRecalled(event.data));
221
+ sync(link, call);
222
+ }
223
+ }));
224
+ }
225
+ // One outside fact, numbered by this call rather than by the wire: camelEvent hands listeners the
226
+ // event without the entry's own seq, so the hook is told where the fact sits in this call's own
227
+ // stream of them. See docs/decisions/agent-events.md.
228
+ async function received(serving, data) {
229
+ const fact = data;
230
+ await inOrder(serving, {
231
+ name: fact.name,
232
+ data: fact.data,
233
+ source: fact.source,
234
+ seq: serving.call.numbered(),
235
+ ...(fact.identity === undefined ? {} : { identity: fact.identity }),
236
+ });
237
+ }
238
+ async function end(live, call) {
239
+ const link = live.get(call.id);
240
+ if (link === undefined)
241
+ return;
242
+ live.delete(call.id);
243
+ for (const stop of link.stop)
244
+ stop();
245
+ await runHook(link.agent, "onEnd", hookCall(call));
246
+ setCall(link.agent, null);
247
+ }
248
+ // The one rule this card exists for: render, then compare with what this call was last sent, and
249
+ // send only the block whose text is different. Tools are compared as their whole declaration,
250
+ // because a `when` flipping changes the list and nothing else about a spec ever changes mid-call.
251
+ function sync(serving, call) {
252
+ const { blocks } = promptOf(serving.agent);
253
+ for (const block of blocks) {
254
+ if (block.text === (serving.sent.blocks.get(block.name) ?? ""))
255
+ continue;
256
+ serving.sent.blocks.set(block.name, block.text);
257
+ call.setPrompt(block.name, block.text);
258
+ }
259
+ const visible = serving.agent.visibleTools();
260
+ const key = JSON.stringify(visible);
261
+ if (key !== serving.sent.tools) {
262
+ serving.sent.tools = key;
263
+ call.setTools(visible);
264
+ }
265
+ }
266
+ function hookCall(call) {
267
+ const hook = { id: call.id, contact: call.contact?.id ?? call.from ?? "" };
268
+ if (call.from !== null)
269
+ hook.from = call.from;
270
+ if (call.channel !== null)
271
+ hook.channel = call.channel;
272
+ return hook;
273
+ }
274
+ // call.log carries an object; a tool that logged a number still deserves a line, so a value that
275
+ // is not an object travels under `value` rather than being dropped at the door.
276
+ function dataOf(data) {
277
+ if (data === undefined)
278
+ return {};
279
+ if (typeof data === "object" && data !== null && !Array.isArray(data)) {
280
+ return data;
281
+ }
282
+ return { value: data };
283
+ }
284
+ //# sourceMappingURL=connect.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"connect.js","sourceRoot":"","sources":["../../src/runtime/connect.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,37 @@
1
+ /** An outside fact off the wire, dispatched to the instance serving that call — or dropped. */
2
+ import { type EventSource } from "../agent/accepts.js";
3
+ import type { CallWorld } from "../call/call.js";
4
+ /** One event.received entry, in the shape the wire carries it. */
5
+ export interface Received {
6
+ name: string;
7
+ data: Record<string, unknown>;
8
+ source: EventSource;
9
+ identity?: string;
10
+ seq: number;
11
+ }
12
+ /** What the dispatcher needs of the live instance: the class it is, and the call it is serving. */
13
+ export interface Serving {
14
+ agent: object;
15
+ ctor: Function;
16
+ call: CallWorld;
17
+ /** The (call, name) pairs already warned about, so a chatty sender warns once and not once a second. */
18
+ warned: Set<string>;
19
+ /** The events of this call, one after another: the cause a write names is the event running. */
20
+ queue: Promise<unknown>;
21
+ }
22
+ /**
23
+ * Dispatch after every event before it has finished. The cause lives on the call while a hook runs,
24
+ * so two hooks awaiting at once would name each other's event; one at a time, in the order the wire
25
+ * delivered them, is also the only order a tenant can reason about.
26
+ */
27
+ export declare function inOrder(serving: Serving, received: Received): Promise<boolean>;
28
+ /**
29
+ * Hand the event to `onEvent`, or drop it. The gate is the pair, not the name: an event declared
30
+ * `from: ["app"]` that arrives from a participant's browser is somebody else's event with our
31
+ * name on it, and the hook never sees it.
32
+ *
33
+ * A write inside the hook is authored `event:<name>`, and the call carries the cause while the
34
+ * hook runs so the bridge can say in the log which event moved the field.
35
+ */
36
+ export declare function dispatch(serving: Serving, received: Received): Promise<boolean>;
37
+ //# sourceMappingURL=dispatch.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dispatch.d.ts","sourceRoot":"","sources":["../../src/runtime/dispatch.ts"],"names":[],"mappings":"AAAA,+FAA+F;AAI/F,OAAO,EAA2B,KAAK,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAChF,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAEjD,kEAAkE;AAClE,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC9B,MAAM,EAAE,WAAW,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,GAAG,EAAE,MAAM,CAAC;CACb;AAED,mGAAmG;AACnG,MAAM,WAAW,OAAO;IACtB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,QAAQ,CAAC;IACf,IAAI,EAAE,SAAS,CAAC;IAChB,wGAAwG;IACxG,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IACpB,gGAAgG;IAChG,KAAK,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;CACzB;AAED;;;;GAIG;AACH,wBAAgB,OAAO,CAAC,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC,CAK9E;AAED;;;;;;;GAOG;AACH,wBAAsB,QAAQ,CAAC,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC,CAiBrF"}
@@ -0,0 +1,52 @@
1
+ /** An outside fact off the wire, dispatched to the instance serving that call — or dropped. */
2
+ import { emitEvent } from "../agent/agent.js";
3
+ import { withAuthorAsync } from "../agent/authors.js";
4
+ import { accepts } from "../agent/accepts.js";
5
+ /**
6
+ * Dispatch after every event before it has finished. The cause lives on the call while a hook runs,
7
+ * so two hooks awaiting at once would name each other's event; one at a time, in the order the wire
8
+ * delivered them, is also the only order a tenant can reason about.
9
+ */
10
+ export function inOrder(serving, received) {
11
+ const next = serving.queue.then(() => dispatch(serving, received));
12
+ // A hook that threw must not jam every later event behind it; the rejection is the caller's.
13
+ serving.queue = next.catch(() => undefined);
14
+ return next;
15
+ }
16
+ /**
17
+ * Hand the event to `onEvent`, or drop it. The gate is the pair, not the name: an event declared
18
+ * `from: ["app"]` that arrives from a participant's browser is somebody else's event with our
19
+ * name on it, and the hook never sees it.
20
+ *
21
+ * A write inside the hook is authored `event:<name>`, and the call carries the cause while the
22
+ * hook runs so the bridge can say in the log which event moved the field.
23
+ */
24
+ export async function dispatch(serving, received) {
25
+ const { name, data, source, seq } = received;
26
+ if (!accepts(serving.ctor, name, source)) {
27
+ warn(serving, name, source);
28
+ return false;
29
+ }
30
+ const meta = { source, seq, ...(received.identity === undefined ? {} : { identity: received.identity }) };
31
+ const hook = serving.agent.onEvent;
32
+ serving.call.cause = { name, seq };
33
+ try {
34
+ await withAuthorAsync(`event:${name}`, () => hook.call(serving.agent, name, data, meta));
35
+ }
36
+ finally {
37
+ serving.call.cause = null;
38
+ }
39
+ const heard = { name, data, meta };
40
+ emitEvent(serving.agent, heard);
41
+ return true;
42
+ }
43
+ // One line per (call, name): a backend that sends an undeclared event sends it every time, and a
44
+ // log that repeats itself is a log nobody reads.
45
+ function warn(serving, name, source) {
46
+ const key = `${serving.call.id}:${name}`;
47
+ if (serving.warned.has(key))
48
+ return;
49
+ serving.warned.add(key);
50
+ console.warn(`pinecall: event ${name} from ${source} is not declared by this agent; dropped`);
51
+ }
52
+ //# sourceMappingURL=dispatch.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dispatch.js","sourceRoot":"","sources":["../../src/runtime/dispatch.ts"],"names":[],"mappings":"AAAA,+FAA+F;AAE/F,OAAO,EAAE,SAAS,EAAmB,MAAM,mBAAmB,CAAC;AAC/D,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,EAAE,OAAO,EAAoC,MAAM,qBAAqB,CAAC;AAuBhF;;;;GAIG;AACH,MAAM,UAAU,OAAO,CAAC,OAAgB,EAAE,QAAkB;IAC1D,MAAM,IAAI,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAC;IACnE,6FAA6F;IAC7F,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;IAC5C,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,QAAQ,CAAC,OAAgB,EAAE,QAAkB;IACjE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,QAAQ,CAAC;IAC7C,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,CAAC,EAAE,CAAC;QACzC,IAAI,CAAC,OAAO,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;QAC5B,OAAO,KAAK,CAAC;IACf,CAAC;IACD,MAAM,IAAI,GAAc,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,CAAC,QAAQ,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,QAAQ,CAAC,QAAQ,EAAE,CAAC,EAAE,CAAC;IACrH,MAAM,IAAI,GAAI,OAAO,CAAC,KAAuF,CAAC,OAAO,CAAC;IACtH,OAAO,CAAC,IAAI,CAAC,KAAK,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC;IACnC,IAAI,CAAC;QACH,MAAM,eAAe,CAAC,SAAS,IAAI,EAAE,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC;IAC3F,CAAC;YAAS,CAAC;QACT,OAAO,CAAC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;IAC5B,CAAC;IACD,MAAM,KAAK,GAAe,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;IAC/C,SAAS,CAAC,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;IAChC,OAAO,IAAI,CAAC;AACd,CAAC;AAED,iGAAiG;AACjG,iDAAiD;AACjD,SAAS,IAAI,CAAC,OAAgB,EAAE,IAAY,EAAE,MAAmB;IAC/D,MAAM,GAAG,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,IAAI,EAAE,CAAC;IACzC,IAAI,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC;QAAE,OAAO;IACpC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IACxB,OAAO,CAAC,IAAI,CAAC,mBAAmB,IAAI,SAAS,MAAM,yCAAyC,CAAC,CAAC;AAChG,CAAC"}
@@ -0,0 +1,15 @@
1
+ /** `knowledge` / `docs` / `memory` fields → what the declaration carries: the file read, the base named, the policy. */
2
+ import type { Camel, DocsConfig, KnowledgeFile, MemoryConfig } from "@pinecall/protocol";
3
+ /** The three fields as the wire carries them. Absent when the class said nothing. */
4
+ export interface Grounding {
5
+ knowledge?: Camel<KnowledgeFile>;
6
+ docs?: Camel<DocsConfig>;
7
+ memory?: Camel<MemoryConfig>;
8
+ }
9
+ /**
10
+ * What the class says it knows, reads and remembers, read off one probe instance. `file` is the
11
+ * agent's own path, so a knowledge file is found beside the class and not beside whoever ran the
12
+ * process; without one it is read from the working directory.
13
+ */
14
+ export declare function groundingOf(probe: object, file?: string): Grounding;
15
+ //# sourceMappingURL=grounding.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"grounding.d.ts","sourceRoot":"","sources":["../../src/runtime/grounding.ts"],"names":[],"mappings":"AAAA,wHAAwH;AAKxH,OAAO,KAAK,EAAE,KAAK,EAAE,UAAU,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAIzF,qFAAqF;AACrF,MAAM,WAAW,SAAS;IACxB,SAAS,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC,CAAC;IACjC,IAAI,CAAC,EAAE,KAAK,CAAC,UAAU,CAAC,CAAC;IACzB,MAAM,CAAC,EAAE,KAAK,CAAC,YAAY,CAAC,CAAC;CAC9B;AAMD;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAUnE"}