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,99 @@
1
+ /** Loading a tenant's agent file from the CLI: the TypeScript loader, the class, and its own source. */
2
+ import { existsSync, readFileSync } from "node:fs";
3
+ import { resolve } from "node:path";
4
+ import { pathToFileURL } from "node:url";
5
+ import { Agent, setCall } from "../agent/agent.js";
6
+ import { describe } from "../agent/docstrings.js";
7
+ import { CallWorld } from "../call/call.js";
8
+ import { slugOf } from "../runtime/connect.js";
9
+ import { groundingOf } from "../runtime/grounding.js";
10
+ /**
11
+ * Where an agent lives when nobody said. A class whose `render()` returns JSX is written in
12
+ * `agent.tsx`, which is what every example and every generator writes; `agent.ts` still loads, for
13
+ * a class that renders nothing. The first that is there wins, and a usage line names the first.
14
+ */
15
+ export const DEFAULT_AGENTS = ["agent.tsx", "agent.ts"];
16
+ let registered = false;
17
+ /** Register tsx, once per process: the tenant writes .ts and .tsx and never a build step. */
18
+ // `pinecall run` on a fresh clone must work with `pnpm i` and nothing else. Registering is done
19
+ // once per process and only when a tenant's file is actually loaded, so `pinecall <planned group>`
20
+ // pays nothing for it. Exported because a persona is a tenant's .ts file too — cli/testing/caller.ts.
21
+ export async function useTypeScript() {
22
+ if (registered)
23
+ return;
24
+ const { register } = await import("tsx/esm/api");
25
+ register();
26
+ registered = true;
27
+ }
28
+ /**
29
+ * Load an agent file: import its default export and hand the class its own source.
30
+ *
31
+ * The source is not a nicety. A class docstring sits ABOVE the class, where `Ctor.toString()`
32
+ * cannot see it, and the parameter types are gone by the time the file is a module — so the identity
33
+ * block would open without its first line and the tools would carry untyped arguments. `describe`
34
+ * is the one call that puts both back, and this is the only place that has the text to give it.
35
+ */
36
+ export async function load(file) {
37
+ const path = file === undefined ? theAgentHere() : resolve(file);
38
+ if (!existsSync(path))
39
+ throw new Error(`no agent at ${path}`);
40
+ await useTypeScript();
41
+ const module_ = (await import(pathToFileURL(path).href));
42
+ const ctor = module_.default;
43
+ if (typeof ctor !== "function")
44
+ throw new Error(`${path} has no default-exported Agent class`);
45
+ const source = readFileSync(path, "utf8");
46
+ describe(ctor, source, path);
47
+ // What the class says it knows is checked here, where its path is in hand: a knowledge file that
48
+ // is not there, or `docs` still written as a glob, is refused before a prompt is printed or a
49
+ // gateway is knocked at — `pinecall prompt` never mounts, and it must say so too.
50
+ groundingOf(new ctor(), path);
51
+ return { ctor: ctor, file: path, source };
52
+ }
53
+ /**
54
+ * One instance of the loaded class with a line to answer on: what the pages that print a prompt
55
+ * render. A `render()` may read `this.call`, and a page that could not answer that question would
56
+ * be a page about a call that cannot happen.
57
+ */
58
+ export function instanceFor(loaded, channel = "web") {
59
+ const agent = new loaded.ctor();
60
+ setCall(agent, new CallWorld({ id: "", contact: "", channel }, () => undefined));
61
+ return agent;
62
+ }
63
+ /** What `mount` is given for a loaded agent: the client, the source and the file it came from. */
64
+ export function mountOptions(loaded, pc) {
65
+ return { pc, source: loaded.source, file: loaded.file };
66
+ }
67
+ // Nobody named a file. Looking for both names and saying so is the whole of it: a directory with
68
+ // neither is a directory somebody typed the verb in by mistake, and the refusal has to say where
69
+ // it looked rather than "no agent at /…/agent.tsx" for a project written in .ts.
70
+ function theAgentHere() {
71
+ const found = DEFAULT_AGENTS.map((name) => resolve(name)).find((path) => existsSync(path));
72
+ if (found !== undefined)
73
+ return found;
74
+ throw new Error(`no agent here: looked for ${DEFAULT_AGENTS.join(" and ")} in ${process.cwd()}`);
75
+ }
76
+ // The slug of the agent this terminal is standing in, read the way `run` reads it, so no two verbs
77
+ // disagree about whose directory this is. No file here is not an error: it is a terminal outside
78
+ // any agent's directory, and the verb that asked says what it needs instead.
79
+ // `--agent` used to mean a SLUG in three verbs and a FILE in six, which is a flag with two
80
+ // meanings and no way to tell which one you got. It names a slug everywhere now, and `--file` is
81
+ // the file — so a path typed where a slug is taken is a person who learnt the old spelling, and
82
+ // they are told the new one rather than being sent to look for an agent called "agent.tsx".
83
+ const A_PATH = /\.tsx?$|[/\\]/;
84
+ /** The refusal for a file typed where a slug is taken, or undefined when it is a slug. */
85
+ export function notASlug(said) {
86
+ if (said === undefined || !A_PATH.test(said))
87
+ return undefined;
88
+ return `an agent is named by its slug, not a file: \`--file ${said}\` names the class to load.`;
89
+ }
90
+ export async function agentOfThisDirectory() {
91
+ try {
92
+ const loaded = await load();
93
+ return slugOf(loaded.ctor);
94
+ }
95
+ catch {
96
+ return null;
97
+ }
98
+ }
99
+ //# sourceMappingURL=load.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"load.js","sourceRoot":"","sources":["../../src/cli/load.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,30 @@
1
+ /** `pinecall login [gateway]`: signed in through a browser, and the key it mints kept in ~/.pinecall. */
2
+ import type { Group } from "./groups.js";
3
+ export declare const group: Group;
4
+ /** What login can be told besides the argv. Tests only: where to print, and how time passes. */
5
+ export interface Signing {
6
+ out?: NodeJS.WritableStream;
7
+ err?: NodeJS.WritableStream;
8
+ env?: NodeJS.ProcessEnv;
9
+ /** How the link is put in front of the person. A test watches instead of opening a browser. */
10
+ open?: (url: string) => void;
11
+ /** How long between asks, and how long before giving up. A test does not wait two seconds. */
12
+ every?: number;
13
+ until?: number;
14
+ }
15
+ /** Sign in through a browser, or keep a machine's key; either way it is proved before it is kept. */
16
+ export declare function login(argv: string[], how?: Signing): Promise<number>;
17
+ /**
18
+ * Which gateway this login is for, and the line to print when nobody said.
19
+ *
20
+ * A URL nobody typed is the cloud's, and that is said OUT LOUD before anything is kept: a person
21
+ * who meant their own box has to be able to see that this one was assumed, in the line above the
22
+ * link, rather than discovering it in `pinecall whoami` tomorrow.
23
+ */
24
+ export declare function theGateway(named: string | undefined): {
25
+ url: string;
26
+ assumed?: string;
27
+ };
28
+ /** Where the person signs this terminal in: the gateway's own page, carrying the word. */
29
+ export declare function signingIn(gateway: string, code: string): string;
30
+ //# sourceMappingURL=login.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"login.d.ts","sourceRoot":"","sources":["../../src/cli/login.ts"],"names":[],"mappings":"AAAA,yGAAyG;AASzG,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAczC,eAAO,MAAM,KAAK,EAAE,KAoBnB,CAAC;AAEF,gGAAgG;AAChG,MAAM,WAAW,OAAO;IACtB,GAAG,CAAC,EAAE,MAAM,CAAC,cAAc,CAAC;IAC5B,GAAG,CAAC,EAAE,MAAM,CAAC,cAAc,CAAC;IAC5B,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;IACxB,+FAA+F;IAC/F,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;IAC7B,8FAA8F;IAC9F,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,qGAAqG;AACrG,wBAAsB,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,GAAG,GAAE,OAAY,GAAG,OAAO,CAAC,MAAM,CAAC,CAyC9E;AAgCD;;;;;;GAMG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE,CAMvF;AAED,0FAA0F;AAC1F,wBAAgB,SAAS,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAE/D"}
@@ -0,0 +1,158 @@
1
+ /** `pinecall login [gateway]`: signed in through a browser, and the key it mints kept in ~/.pinecall. */
2
+ import { hostname } from "node:os";
3
+ import { parseArgs } from "node:util";
4
+ import { openInABrowser } from "./browser.js";
5
+ import { pinecallHome, writeGateway } from "./credentials.js";
6
+ import { nameFor, readConfig, writeProfile } from "./profiles.js";
7
+ import { CLOUD_URL } from "./env.js";
8
+ import { aLineOfStdin } from "./secret.js";
9
+ import { asked } from "./testing/gateway.js";
10
+ import { orgOf, refusal, whoIs } from "./whoami.js";
11
+ const USAGE = "usage: pinecall login [gateway-url] [--key-stdin]";
12
+ // How often the terminal asks, and for how long. The gateway's word lives ten minutes, so this
13
+ // gives up a little after it does rather than polling a word that cannot come back.
14
+ const EVERY_MS = 2_000;
15
+ const GIVE_UP_MS = 11 * 60 * 1_000;
16
+ const TOOK_TOO_LONG = "nobody approved this terminal: `pinecall login` again when you are ready";
17
+ export const group = {
18
+ purpose: "sign in through a browser and keep the key it mints",
19
+ usage: `${USAGE}
20
+
21
+ Prints a link and opens it. You sign in there — in a browser, where a password belongs — and
22
+ the page hands this terminal a key of its OWN, minted for you and labelled as this machine, so
23
+ it is revoked on its own from the Keys screen. Nothing types a password into a shell, and the
24
+ day your org signs in with Google this verb does not change.
25
+
26
+ With no URL it is ${CLOUD_URL}, and it says so. Name another for your own box.
27
+
28
+ The key it keeps is this machine's SANDBOX key, so \`pinecall run\` and \`pinecall chat\`
29
+ answer in a world of your own and never in the one your customers call.
30
+
31
+ --key-stdin reads a KEY from one line of stdin instead, for a machine: a server, a CI job, a
32
+ container. That is what \`pinecall keys issue\` mints, and it writes the same profile — so a
33
+ machine and a person hold a key the same way, in a 0600 file read once rather than in an
34
+ environment every child process and every \`ps\` can read. PINECALL_HOME says where that file
35
+ goes, and it is the only variable this CLI reads.`,
36
+ run: login,
37
+ };
38
+ /** Sign in through a browser, or keep a machine's key; either way it is proved before it is kept. */
39
+ export async function login(argv, how = {}) {
40
+ const out = how.out ?? process.stdout;
41
+ const err = how.err ?? process.stderr;
42
+ const { values, positionals } = parseArgs({
43
+ args: argv,
44
+ allowPositionals: true,
45
+ options: { "key-stdin": { type: "boolean", default: false }, as: { type: "string" } },
46
+ });
47
+ const { url, assumed } = theGateway(positionals[0]);
48
+ if (assumed !== undefined)
49
+ out.write(`${assumed}\n`);
50
+ const key = values["key-stdin"] === true ? (await aLineOfStdin()).trim() : await throughABrowser(url, how, out, err);
51
+ if (key === null)
52
+ return 1;
53
+ if (key === "") {
54
+ err.write("no key was typed: nothing was kept\n");
55
+ return 2;
56
+ }
57
+ // Proved before it is kept, whichever way it was got: a key that opens nothing is a file a
58
+ // person will trust tomorrow and a refusal they will not understand.
59
+ let who;
60
+ try {
61
+ who = await whoIs({ url, apiKey: key });
62
+ }
63
+ catch (refused) {
64
+ err.write(`${refusal(refused)}\n`);
65
+ return 1;
66
+ }
67
+ const environment = how.env ?? process.env;
68
+ const home = pinecallHome(environment);
69
+ // The slug and not the id, in the file as on the line: a person opening the config to see which
70
+ // org a gateway is has to read a word they recognise.
71
+ //
72
+ // It is kept twice on purpose, for exactly one release: `config.json` is what every verb reads
73
+ // now, and `credentials` is what v1's CLI on this same machine still reads. The second write
74
+ // goes with the second half of this change.
75
+ const name = values.as ?? nameFor(url, readConfig(home));
76
+ writeProfile(name, { url, key, org: orgOf(who), env: who.env }, home);
77
+ writeGateway(url, { api_key: key, org: orgOf(who) }, home);
78
+ out.write(`▸ ${name} · ${url} · org ${orgOf(who)} · ${who.env}\n`);
79
+ return 0;
80
+ }
81
+ /**
82
+ * The dance: a word this terminal asks for, a link the person opens, and the key left behind.
83
+ *
84
+ * The terminal never sees the password and the browser never sees this key until it is minted —
85
+ * what travels in the URL is a word that dies in ten minutes and on first collection. Null once
86
+ * the refusal has been printed.
87
+ */
88
+ async function throughABrowser(url, how, out, err) {
89
+ const door = { url, apiKey: "" };
90
+ let opened;
91
+ try {
92
+ opened = await asked(door, "/v1/login/pairings", {
93
+ method: "POST",
94
+ body: { device: thisMachine() },
95
+ });
96
+ }
97
+ catch (refused) {
98
+ err.write(`${refusal(refused)}\n`);
99
+ return null;
100
+ }
101
+ const link = signingIn(url, opened.code);
102
+ out.write(`\nopen this to sign in:\n${link}\n\nwaiting…\n`);
103
+ (how.open ?? openInABrowser)(link);
104
+ return await collected(door, opened.code, how, err);
105
+ }
106
+ /**
107
+ * Which gateway this login is for, and the line to print when nobody said.
108
+ *
109
+ * A URL nobody typed is the cloud's, and that is said OUT LOUD before anything is kept: a person
110
+ * who meant their own box has to be able to see that this one was assumed, in the line above the
111
+ * link, rather than discovering it in `pinecall whoami` tomorrow.
112
+ */
113
+ export function theGateway(named) {
114
+ if (named !== undefined)
115
+ return { url: named };
116
+ return {
117
+ url: CLOUD_URL,
118
+ assumed: `gateway ${CLOUD_URL} (the default — \`pinecall login <url>\` for your own box)`,
119
+ };
120
+ }
121
+ /** Where the person signs this terminal in: the gateway's own page, carrying the word. */
122
+ export function signingIn(gateway, code) {
123
+ return `${gateway.replace(/\/$/, "")}/cli?c=${encodeURIComponent(code)}`;
124
+ }
125
+ /** Ask until the browser has answered, the word is gone, or nobody ever opened the link. */
126
+ async function collected(door, code, how, err) {
127
+ const every = how.every ?? EVERY_MS;
128
+ const until = Date.now() + (how.until ?? GIVE_UP_MS);
129
+ while (Date.now() < until) {
130
+ try {
131
+ // 202 is a 2xx, so this is an empty body and not a refusal: nobody has approved the card
132
+ // yet. A refusal here is the word being gone — collected, or expired — and it ends the wait.
133
+ const answered = await asked(door, `/v1/login/pairings/${code}/key`);
134
+ if (answered?.key !== undefined)
135
+ return answered.key;
136
+ }
137
+ catch (refused) {
138
+ err.write(`${refusal(refused)}\n`);
139
+ return null;
140
+ }
141
+ await after(every);
142
+ }
143
+ err.write(`${TOOK_TOO_LONG}\n`);
144
+ return null;
145
+ }
146
+ /** What this terminal calls itself, so the card names it and the key is labelled by it. */
147
+ function thisMachine() {
148
+ try {
149
+ return hostname();
150
+ }
151
+ catch {
152
+ return "cli";
153
+ }
154
+ }
155
+ function after(ms) {
156
+ return new Promise((rung) => setTimeout(rung, ms));
157
+ }
158
+ //# sourceMappingURL=login.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"login.js","sourceRoot":"","sources":["../../src/cli/login.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ /** The machine a developer is writing, on one page: the stage the agent is in, and what it shows. */
2
+ /**
3
+ * Every tool the class declares, the visible ones filled in, each with what gates it. The model
4
+ * never reads this — it only ever sees the filled ones — but the person writing the class does,
5
+ * and the page is what turns "why is book not there" into a glance.
6
+ */
7
+ export declare function showMachine(agent: object): string;
8
+ //# sourceMappingURL=machine.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"machine.d.ts","sourceRoot":"","sources":["../../src/cli/machine.ts"],"names":[],"mappings":"AAAA,qGAAqG;AAMrG;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAWjD"}
@@ -0,0 +1,41 @@
1
+ /** The machine a developer is writing, on one page: the stage the agent is in, and what it shows. */
2
+ import { stageOf, stagesOf } from "../agent/stages.js";
3
+ import { toolsOf, visibleToolsOf } from "../agent/tools.js";
4
+ import { headerFor } from "../views/render.js";
5
+ /**
6
+ * Every tool the class declares, the visible ones filled in, each with what gates it. The model
7
+ * never reads this — it only ever sees the filled ones — but the person writing the class does,
8
+ * and the page is what turns "why is book not there" into a glance.
9
+ */
10
+ export function showMachine(agent) {
11
+ const visible = new Set(visibleToolsOf(agent).map((declared) => declared.name));
12
+ const declarations = toolsOf(agent);
13
+ if (declarations.length === 0)
14
+ return `${header(agent)}\n\n this agent declares no tools`;
15
+ const width = Math.max(...declarations.map((declared) => declared.name.length));
16
+ const lines = declarations.map((declared) => {
17
+ const shown = visible.has(declared.name);
18
+ const mark = shown ? "●" : "○";
19
+ return ` ${mark} ${declared.name.padEnd(width)} ${gatedBy(agent, declared.options, shown)}`;
20
+ });
21
+ return [header(agent), "", ...lines].join("\n");
22
+ }
23
+ // The stage rides in the header, beside the tools it decides: a class with no stages says nothing
24
+ // there rather than inventing one.
25
+ function header(agent) {
26
+ const stage = stageOf(agent);
27
+ return stage === undefined ? headerFor("tools") : `${headerFor("tools")} stage: ${stage}`;
28
+ }
29
+ // What decides this tool, in the words its declaration used: the stages it named, `when(state)` for
30
+ // a predicate, `always` for a tool nothing gates. A staged tool that its own stage does not bring
31
+ // back is the one question this page exists to answer, so it says who said no.
32
+ function gatedBy(agent, options, shown) {
33
+ const stages = stagesOf(options);
34
+ if (stages === undefined)
35
+ return options.when === undefined ? "always" : "when(state)";
36
+ const here = stageOf(agent);
37
+ const named = stages.join(" · ");
38
+ const hiddenInItsOwnStage = !shown && here !== undefined && stages.includes(here);
39
+ return hiddenInItsOwnStage ? `${named} · when(state) says no` : named;
40
+ }
41
+ //# sourceMappingURL=machine.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"machine.js","sourceRoot":"","sources":["../../src/cli/machine.ts"],"names":[],"mappings":"AAAA,qGAAqG;AAErG,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,EAAE,OAAO,EAAE,cAAc,EAA0B,MAAM,mBAAmB,CAAC;AACpF,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAE/C;;;;GAIG;AACH,MAAM,UAAU,WAAW,CAAC,KAAa;IACvC,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;IAChF,MAAM,YAAY,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC;IACpC,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,GAAG,MAAM,CAAC,KAAK,CAAC,oCAAoC,CAAC;IAC3F,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;IAChF,MAAM,KAAK,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE;QAC1C,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QACzC,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;QAC/B,OAAO,KAAK,IAAI,IAAI,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,OAAO,CAAC,KAAK,EAAE,QAAQ,CAAC,OAAO,EAAE,KAAK,CAAC,EAAE,CAAC;IAChG,CAAC,CAAC,CAAC;IACH,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,GAAG,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAClD,CAAC;AAED,kGAAkG;AAClG,mCAAmC;AACnC,SAAS,MAAM,CAAC,KAAa;IAC3B,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC;IAC7B,OAAO,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,OAAO,CAAC,WAAW,KAAK,EAAE,CAAC;AAC5F,CAAC;AAED,oGAAoG;AACpG,kGAAkG;AAClG,+EAA+E;AAC/E,SAAS,OAAO,CAAC,KAAa,EAAE,OAA0B,EAAE,KAAc;IACxE,MAAM,MAAM,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAC;IACjC,IAAI,MAAM,KAAK,SAAS;QAAE,OAAO,OAAO,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,aAAa,CAAC;IACvF,MAAM,IAAI,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC;IAC5B,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACjC,MAAM,mBAAmB,GAAG,CAAC,KAAK,IAAI,IAAI,KAAK,SAAS,IAAI,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;IAClF,OAAO,mBAAmB,CAAC,CAAC,CAAC,GAAG,KAAK,wBAAwB,CAAC,CAAC,CAAC,KAAK,CAAC;AACxE,CAAC"}
@@ -0,0 +1,26 @@
1
+ /** `pinecall memory <contact> | forget <contact> | eval`: what memory kept about one contact, the right to be forgotten, and how well recall ranks. */
2
+ import type { ContactFact, MemoryScore } from "@pinecall/protocol";
3
+ import type { Group } from "./groups.js";
4
+ import { type Door } from "./testing/gateway.js";
5
+ export declare const DEFAULT_GOLDEN = "memory/golden.json";
6
+ /** The two sentences a golden is refused by, said the same in the terminal and on the page. */
7
+ export declare const NO_GOLDEN: (golden: string) => string;
8
+ export declare const AN_EMPTY_GOLDEN: (golden: string) => string;
9
+ export declare const group: Group;
10
+ /** What the verb can be told besides the argv: where to print, the environment, and how it asks. Tests only. */
11
+ export interface Recalling {
12
+ out?: NodeJS.WritableStream;
13
+ err?: NodeJS.WritableStream;
14
+ env?: NodeJS.ProcessEnv;
15
+ /** Whether the person said yes to forgetting. A test answers here instead of driving a terminal. */
16
+ confirm?: (question: string) => Promise<boolean>;
17
+ }
18
+ /** Read the contact and do it: the history on stdout, or one forget after one question. */
19
+ export declare function run(argv: string[], how?: Recalling): Promise<number>;
20
+ /** Every question of a golden asked of recall, and the two figures code computed from the answers. */
21
+ export declare function recalledOn(door: Door, questions: unknown[], k: number | undefined): Promise<MemoryScore>;
22
+ /** What a golden prints: the two figures on one line, then a line per question memory did not answer whole. */
23
+ export declare function recallLines(score: MemoryScore): string[];
24
+ /** One fact as a line: the text, its category when it has one, and — dimmed — when it stopped holding. */
25
+ export declare function factLine(fact: ContactFact, dim: boolean): string;
26
+ //# sourceMappingURL=memory.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"memory.d.ts","sourceRoot":"","sources":["../../src/cli/memory.ts"],"names":[],"mappings":"AAAA,uJAAuJ;AAOvJ,OAAO,KAAK,EAAE,WAAW,EAA4B,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAG7F,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAGzC,OAAO,EAAS,KAAK,IAAI,EAAE,MAAM,sBAAsB,CAAC;AASxD,eAAO,MAAM,cAAc,uBAAuB,CAAC;AAKnD,+FAA+F;AAC/F,eAAO,MAAM,SAAS,WAAY,MAAM,KAAG,MAAyE,CAAC;AACrH,eAAO,MAAM,eAAe,WAAY,MAAM,KAAG,MACkC,CAAC;AAOpF,eAAO,MAAM,KAAK,EAAE,KAenB,CAAC;AAEF,gHAAgH;AAChH,MAAM,WAAW,SAAS;IACxB,GAAG,CAAC,EAAE,MAAM,CAAC,cAAc,CAAC;IAC5B,GAAG,CAAC,EAAE,MAAM,CAAC,cAAc,CAAC;IAC5B,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;IACxB,oGAAoG;IACpG,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;CAClD;AAED,2FAA2F;AAC3F,wBAAsB,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,GAAG,GAAE,SAAc,GAAG,OAAO,CAAC,MAAM,CAAC,CAuB9E;AAwDD,sGAAsG;AACtG,wBAAsB,UAAU,CAAC,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,EAAE,CAAC,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAAC,WAAW,CAAC,CAE9G;AAED,+GAA+G;AAC/G,wBAAgB,WAAW,CAAC,KAAK,EAAE,WAAW,GAAG,MAAM,EAAE,CAWxD;AAED,0GAA0G;AAC1G,wBAAgB,QAAQ,CAAC,IAAI,EAAE,WAAW,EAAE,GAAG,EAAE,OAAO,GAAG,MAAM,CAOhE"}
@@ -0,0 +1,148 @@
1
+ /** `pinecall memory <contact> | forget <contact> | eval`: what memory kept about one contact, the right to be forgotten, and how well recall ranks. */
2
+ import { existsSync } from "node:fs";
3
+ import { dirname, join, resolve } from "node:path";
4
+ import { createInterface } from "node:readline";
5
+ import { parseArgs } from "node:util";
6
+ import { theDoor } from "./env.js";
7
+ import { dayAndTime, theQuestionsIn } from "./knowledge.js";
8
+ import { load } from "./load.js";
9
+ import { asked } from "./testing/gateway.js";
10
+ import { refusal } from "./whoami.js";
11
+ const USAGE = `usage: pinecall memory <contact>
12
+ pinecall memory forget <contact>
13
+ pinecall memory eval [golden.json] [--k <n>] [--file agent.tsx]`;
14
+ // The golden beside the agent that answers with those facts: the questions recall is held to, and
15
+ // what each should have brought back. `memory/golden.json` is where `eval` looks when nobody says.
16
+ export const DEFAULT_GOLDEN = "memory/golden.json";
17
+ // The door takes the whole golden and needs no contact: every question carries its own facts.
18
+ const EVAL = "/v1/contacts/memory/eval";
19
+ /** The two sentences a golden is refused by, said the same in the terminal and on the page. */
20
+ export const NO_GOLDEN = (golden) => `no golden at ${golden}: a JSON list of {holds, asks, expects}`;
21
+ export const AN_EMPTY_GOLDEN = (golden) => `${golden} holds no questions: a golden is a JSON list of {holds, asks, expects}`;
22
+ // A fact that a later call superseded is still in the history, and it is drawn dimmer so the
23
+ // current ones read first — on a terminal, that is; a pipe gets the plain line.
24
+ const DIM = "\u001b[2m";
25
+ const PLAIN = "\u001b[0m";
26
+ export const group = {
27
+ purpose: "what memory kept about a contact, forget it on request, and what a golden says of recall",
28
+ usage: `${USAGE}
29
+
30
+ With a contact — the caller's number, or the id the app named — prints everything memory ever
31
+ kept about them: the current facts first, then the ones a later call superseded, with the date
32
+ they stopped holding. forget erases all of it, the right to be forgotten; on a terminal it asks
33
+ once, and it prints how many facts went.
34
+
35
+ eval asks recall every question of a golden — a JSON list of {holds, asks, expects}, where holds
36
+ is what memory holds about that question's contact — and prints recall@k and nDCG@10, computed by
37
+ code with no model in the loop, plus every question it did not answer whole. No contact of yours
38
+ is read or written: each question's facts go to a scratch contact and are deleted again. A golden
39
+ is fixed and the ranking is the variable: never soften a question so a change can pass.`,
40
+ run,
41
+ };
42
+ /** Read the contact and do it: the history on stdout, or one forget after one question. */
43
+ export async function run(argv, how = {}) {
44
+ const out = how.out ?? process.stdout;
45
+ const err = how.err ?? process.stderr;
46
+ const { values, positionals } = parseArgs({
47
+ args: argv,
48
+ allowPositionals: true,
49
+ options: { file: { type: "string" }, k: { type: "string" } },
50
+ });
51
+ const [verb, second] = positionals;
52
+ const door = theDoor(how.env ?? process.env, err);
53
+ if (door === undefined)
54
+ return 2;
55
+ try {
56
+ if (verb === "eval")
57
+ return await evaluate(door, second, values.k, values.file, out, err);
58
+ if (verb === "forget" && second !== undefined) {
59
+ return await forget(door, second, how.confirm ?? askOnATerminal, out);
60
+ }
61
+ if (verb !== undefined && verb !== "forget")
62
+ return await history(door, verb, out);
63
+ }
64
+ catch (refused) {
65
+ err.write(`${refusal(refused)}\n`);
66
+ return 1;
67
+ }
68
+ err.write(`${USAGE}\n`);
69
+ return 2;
70
+ }
71
+ async function history(door, contact, out) {
72
+ const remembered = await asked(door, memoryPath(contact));
73
+ if (remembered.facts.length === 0) {
74
+ out.write(`nothing remembered about ${contact}\n`);
75
+ return 0;
76
+ }
77
+ const dim = out.isTTY === true;
78
+ for (const fact of remembered.facts) {
79
+ out.write(`${factLine(fact, dim)}\n`);
80
+ }
81
+ return 0;
82
+ }
83
+ async function forget(door, contact, confirm, out) {
84
+ if (!(await confirm(`forget everything memory kept about ${contact}? [y/N] `))) {
85
+ out.write("nothing forgotten\n");
86
+ return 0;
87
+ }
88
+ const gone = await asked(door, memoryPath(contact), { method: "DELETE" });
89
+ out.write(`forgotten: ${gone.forgotten}\n`);
90
+ return 0;
91
+ }
92
+ // A golden is run when somebody changed the vocabulary a fact is written in, the embedder or a
93
+ // knob — never on a caller's clock — so it reads its questions off the disk and asks them in order.
94
+ // No contact of the org is read: each question's facts are the question's own.
95
+ async function evaluate(door, file, k, agent, out, err) {
96
+ const golden = resolve(file ?? join(dirname((await load(agent)).file), DEFAULT_GOLDEN));
97
+ if (!existsSync(golden)) {
98
+ err.write(`${NO_GOLDEN(golden)}\n`);
99
+ return 2;
100
+ }
101
+ const questions = theQuestionsIn(golden);
102
+ if (questions === null) {
103
+ err.write(`${AN_EMPTY_GOLDEN(golden)}\n`);
104
+ return 2;
105
+ }
106
+ const score = await recalledOn(door, questions, k === undefined ? undefined : Number(k));
107
+ out.write(`${recallLines(score).join("\n")}\n`);
108
+ return score.misses.length === 0 ? 0 : 1;
109
+ }
110
+ /** Every question of a golden asked of recall, and the two figures code computed from the answers. */
111
+ export async function recalledOn(door, questions, k) {
112
+ return await asked(door, EVAL, { method: "POST", body: { questions, ...(k === undefined ? {} : { k }) } });
113
+ }
114
+ /** What a golden prints: the two figures on one line, then a line per question memory did not answer whole. */
115
+ export function recallLines(score) {
116
+ const figures = `memory · ${score.model} · ${score.questions} questions · ` +
117
+ `recall@${score.k} ${score.recall_at_k.toFixed(2)} · nDCG@10 ${score.ndcg_at_10.toFixed(2)} · ` +
118
+ `${Math.round(score.took_ms)} ms`;
119
+ return [
120
+ figures,
121
+ ...score.misses.map((missed) => ` missed: ${missed.asks} → wanted ${missed.missing.join(", ")}, got ${missed.found[0] ?? "nothing"}`),
122
+ ];
123
+ }
124
+ /** One fact as a line: the text, its category when it has one, and — dimmed — when it stopped holding. */
125
+ export function factLine(fact, dim) {
126
+ const said = [`- ${fact.text}`];
127
+ if (fact.category)
128
+ said.push(`(${fact.category})`);
129
+ if (fact.invalidated_at === null)
130
+ return said.join(" ");
131
+ said.push(`· until ${dayAndTime(fact.invalidated_at)}`);
132
+ const line = said.join(" ");
133
+ return dim ? `${DIM}${line}${PLAIN}` : line;
134
+ }
135
+ function memoryPath(contact) {
136
+ return `/v1/contacts/${encodeURIComponent(contact)}/memory`;
137
+ }
138
+ // The one question, on a terminal. Off one — a script, CI — nobody is there to answer, and the
139
+ // verb was typed on purpose: it goes ahead.
140
+ async function askOnATerminal(question) {
141
+ if (!process.stdin.isTTY)
142
+ return true;
143
+ const reading = createInterface({ input: process.stdin, output: process.stdout });
144
+ const answer = await new Promise((typed) => reading.question(question, typed));
145
+ reading.close();
146
+ return /^y(es)?$/i.test(answer.trim());
147
+ }
148
+ //# sourceMappingURL=memory.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"memory.js","sourceRoot":"","sources":["../../src/cli/memory.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,25 @@
1
+ /** `pinecall numbers list | import | move | drop`: which number reaches which agent, in which world. */
2
+ import type { Group } from "./groups.js";
3
+ /** One door as the listing answers it: the route itself, and which table it came from. */
4
+ interface Door_ {
5
+ route: {
6
+ number: string | null;
7
+ channel: string;
8
+ agent: string;
9
+ env: string;
10
+ managed: boolean;
11
+ };
12
+ source: string;
13
+ }
14
+ export declare const group: Group;
15
+ /** What the verb can be told besides the argv: where to print, and which environment. */
16
+ export interface Numbering {
17
+ out?: NodeJS.WritableStream;
18
+ err?: NodeJS.WritableStream;
19
+ env?: NodeJS.ProcessEnv;
20
+ }
21
+ export declare function run(argv: string[], how?: Numbering): Promise<number>;
22
+ /** One door as a person reads it: the number, whose it is, where, and who put it there. */
23
+ export declare function aLine(one: Door_): string;
24
+ export {};
25
+ //# sourceMappingURL=numbers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"numbers.d.ts","sourceRoot":"","sources":["../../src/cli/numbers.ts"],"names":[],"mappings":"AAAA,wGAAwG;AAKxG,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAezC,0FAA0F;AAC1F,UAAU,KAAK;IACb,KAAK,EAAE;QAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,OAAO,CAAA;KAAE,CAAC;IAChG,MAAM,EAAE,MAAM,CAAC;CAChB;AAUD,eAAO,MAAM,KAAK,EAAE,KAenB,CAAC;AAEF,yFAAyF;AACzF,MAAM,WAAW,SAAS;IACxB,GAAG,CAAC,EAAE,MAAM,CAAC,cAAc,CAAC;IAC5B,GAAG,CAAC,EAAE,MAAM,CAAC,cAAc,CAAC;IAC5B,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;CACzB;AAED,wBAAsB,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,GAAG,GAAE,SAAc,GAAG,OAAO,CAAC,MAAM,CAAC,CAiB9E;AAaD,2FAA2F;AAC3F,wBAAgB,KAAK,CAAC,GAAG,EAAE,KAAK,GAAG,MAAM,CAKxC"}