@fastagent-sh/fastagent 0.24.4 → 0.25.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 (480) hide show
  1. package/README.md +53 -82
  2. package/dist/agent-api.d.ts +452 -0
  3. package/dist/agent-api.js +201 -0
  4. package/dist/answer-text.d.ts +8 -0
  5. package/dist/answer-text.js +18 -0
  6. package/dist/atomic-write.d.ts +2 -2
  7. package/dist/atomic-write.js +2 -2
  8. package/dist/authoring.d.ts +77 -0
  9. package/dist/authoring.js +238 -0
  10. package/dist/channel.d.ts +29 -15
  11. package/dist/channel.js +4 -1
  12. package/dist/channels/agentcore-protocol.d.ts +36 -50
  13. package/dist/channels/agentcore-protocol.js +3 -3
  14. package/dist/channels/agentcore-service.d.ts +8 -18
  15. package/dist/channels/agentcore-service.js +108 -127
  16. package/dist/channels/agentcore.d.ts +8 -24
  17. package/dist/channels/agentcore.js +32 -65
  18. package/dist/channels/body.d.ts +0 -16
  19. package/dist/channels/body.js +0 -25
  20. package/dist/channels/busy.js +6 -1
  21. package/dist/channels/context.d.ts +4 -0
  22. package/dist/channels/context.js +35 -0
  23. package/dist/channels/discover.d.ts +18 -20
  24. package/dist/channels/discover.js +41 -99
  25. package/dist/channels/feishu/feishu-api.d.ts +54 -4
  26. package/dist/channels/feishu/feishu-api.js +192 -149
  27. package/dist/channels/feishu/feishu.d.ts +3 -0
  28. package/dist/channels/feishu/feishu.js +117 -106
  29. package/dist/channels/feishu/history.d.ts +55 -0
  30. package/dist/channels/feishu/history.js +199 -0
  31. package/dist/channels/feishu/invoke-turn.d.ts +13 -11
  32. package/dist/channels/feishu/invoke-turn.js +9 -10
  33. package/dist/channels/feishu/model.d.ts +2 -1
  34. package/dist/channels/feishu/normalize.js +100 -0
  35. package/dist/channels/feishu/preview.d.ts +2 -2
  36. package/dist/channels/feishu/register-webhook.d.ts +1 -0
  37. package/dist/channels/feishu/register-webhook.js +3 -2
  38. package/dist/channels/feishu/scaffold/channel.ts +65 -46
  39. package/dist/channels/feishu/scaffold/feishu-send.ts +38 -33
  40. package/dist/channels/feishu/scaffold/feishu-threads.ts +25 -0
  41. package/dist/channels/feishu/setup-mode.d.ts +45 -25
  42. package/dist/channels/feishu/setup-mode.js +74 -23
  43. package/dist/channels/feishu/shared-api.d.ts +24 -6
  44. package/dist/channels/feishu/shared-api.js +30 -24
  45. package/dist/channels/kit/context-buffer.d.ts +11 -2
  46. package/dist/channels/kit/context-buffer.js +7 -4
  47. package/dist/channels/kit/delivery.d.ts +19 -3
  48. package/dist/channels/kit/delivery.js +74 -15
  49. package/dist/channels/kit/event-stream.js +2 -1
  50. package/dist/channels/kit/invoke-turn-kit.d.ts +41 -41
  51. package/dist/channels/kit/invoke-turn-kit.js +62 -71
  52. package/dist/channels/kit/place-history.d.ts +107 -0
  53. package/dist/channels/kit/place-history.js +182 -0
  54. package/dist/channels/kit/preview-kit.d.ts +9 -5
  55. package/dist/channels/kit/preview-kit.js +36 -15
  56. package/dist/channels/kit/room-threads.d.ts +46 -0
  57. package/dist/channels/kit/room-threads.js +81 -0
  58. package/dist/channels/kit/seen.js +1 -1
  59. package/dist/channels/kit/stop-command.d.ts +6 -3
  60. package/dist/channels/kit/stop-command.js +20 -18
  61. package/dist/channels/kit/thread-fork.d.ts +17 -0
  62. package/dist/channels/kit/thread-fork.js +43 -0
  63. package/dist/channels/kit/thread-participants.js +1 -1
  64. package/dist/channels/kit/transport.d.ts +5 -0
  65. package/dist/channels/kit/transport.js +5 -0
  66. package/dist/channels/kit/turn-runner.d.ts +10 -9
  67. package/dist/channels/kit/turn-runner.js +17 -19
  68. package/dist/channels/kit/turn-store.d.ts +5 -4
  69. package/dist/channels/kit/turn-store.js +5 -5
  70. package/dist/channels/lark/lark.d.ts +3 -0
  71. package/dist/channels/lark/lark.js +5 -0
  72. package/dist/channels/lark/onboard.d.ts +5 -3
  73. package/dist/channels/lark/onboard.js +14 -14
  74. package/dist/channels/lark/scaffold/channel.ts +67 -44
  75. package/dist/channels/lark/scaffold/lark-send.ts +38 -33
  76. package/dist/channels/lark/scaffold/lark-threads.ts +25 -0
  77. package/dist/channels/respond.d.ts +0 -4
  78. package/dist/channels/respond.js +1 -1
  79. package/dist/channels/router.d.ts +18 -0
  80. package/dist/channels/router.js +68 -0
  81. package/dist/channels/serve.d.ts +5 -70
  82. package/dist/channels/serve.js +105 -287
  83. package/dist/channels/slack/history.d.ts +42 -0
  84. package/dist/channels/slack/history.js +282 -0
  85. package/dist/channels/slack/invoke-turn.d.ts +12 -5
  86. package/dist/channels/slack/invoke-turn.js +7 -5
  87. package/dist/channels/slack/manifest.d.ts +1 -4
  88. package/dist/channels/slack/manifest.js +22 -10
  89. package/dist/channels/slack/model.d.ts +2 -1
  90. package/dist/channels/slack/onboard.d.ts +0 -2
  91. package/dist/channels/slack/onboard.js +2 -4
  92. package/dist/channels/slack/onboarding-state.d.ts +0 -2
  93. package/dist/channels/slack/onboarding-state.js +0 -1
  94. package/dist/channels/slack/parse.d.ts +0 -5
  95. package/dist/channels/slack/parse.js +1 -16
  96. package/dist/channels/slack/preview.d.ts +2 -3
  97. package/dist/channels/slack/preview.js +78 -52
  98. package/dist/channels/slack/register-webhook.d.ts +1 -0
  99. package/dist/channels/slack/register-webhook.js +6 -5
  100. package/dist/channels/slack/scaffold/channel.ts +23 -24
  101. package/dist/channels/slack/scaffold/slack-send.ts +50 -43
  102. package/dist/channels/slack/scaffold/slack-threads.ts +29 -0
  103. package/dist/channels/slack/setup-server.d.ts +19 -0
  104. package/dist/channels/slack/setup-server.js +113 -11
  105. package/dist/channels/slack/shared-api.d.ts +15 -4
  106. package/dist/channels/slack/shared-api.js +19 -14
  107. package/dist/channels/slack/slack-api.d.ts +61 -2
  108. package/dist/channels/slack/slack-api.js +28 -5
  109. package/dist/channels/slack/slack.js +97 -52
  110. package/dist/channels/slack/welcomed.js +1 -1
  111. package/dist/channels/telegram/context-buffer.d.ts +6 -1
  112. package/dist/channels/telegram/context-buffer.js +19 -0
  113. package/dist/channels/telegram/invoke-turn.d.ts +8 -4
  114. package/dist/channels/telegram/invoke-turn.js +7 -7
  115. package/dist/channels/telegram/parse.d.ts +7 -2
  116. package/dist/channels/telegram/parse.js +7 -0
  117. package/dist/channels/telegram/preview.d.ts +2 -2
  118. package/dist/channels/telegram/register-webhook.d.ts +1 -0
  119. package/dist/channels/telegram/register-webhook.js +3 -2
  120. package/dist/channels/telegram/scaffold/channel.ts +27 -28
  121. package/dist/channels/telegram/scaffold/telegram-send.ts +61 -108
  122. package/dist/channels/telegram/shared-api.d.ts +34 -0
  123. package/dist/channels/telegram/shared-api.js +79 -0
  124. package/dist/channels/telegram/telegram-api.d.ts +15 -5
  125. package/dist/channels/telegram/telegram-api.js +10 -6
  126. package/dist/channels/telegram/telegram.js +27 -21
  127. package/dist/channels/telegram/turn-store.js +1 -1
  128. package/dist/channels/{kit/turn-queue.d.ts → turn-queue.d.ts} +2 -2
  129. package/dist/channels/{kit/turn-queue.js → turn-queue.js} +10 -10
  130. package/dist/cli/add-feishu.d.ts +42 -12
  131. package/dist/cli/add-feishu.js +177 -124
  132. package/dist/cli/add-slack.d.ts +8 -3
  133. package/dist/cli/add-slack.js +115 -63
  134. package/dist/cli/auth-view.d.ts +10 -3
  135. package/dist/cli/auth-view.js +8 -6
  136. package/dist/cli/box-login.d.ts +17 -7
  137. package/dist/cli/box-login.js +46 -12
  138. package/dist/cli/commands/add.d.ts +15 -4
  139. package/dist/cli/commands/add.js +252 -143
  140. package/dist/cli/commands/auth.d.ts +6 -0
  141. package/dist/cli/commands/auth.js +50 -0
  142. package/dist/cli/commands/content.d.ts +6 -0
  143. package/dist/cli/commands/content.js +45 -0
  144. package/dist/cli/commands/deploy/agentcore.js +50 -77
  145. package/dist/cli/commands/deploy/docker.js +38 -39
  146. package/dist/cli/commands/deploy/fly.js +21 -18
  147. package/dist/cli/commands/deploy/host-login.d.ts +26 -0
  148. package/dist/cli/commands/deploy/host-login.js +90 -0
  149. package/dist/cli/commands/deploy/railway.js +21 -26
  150. package/dist/cli/commands/deploy/shared.d.ts +45 -17
  151. package/dist/cli/commands/deploy/shared.js +34 -15
  152. package/dist/cli/commands/deploy.d.ts +0 -4
  153. package/dist/cli/commands/deploy.js +237 -50
  154. package/dist/cli/commands/destroy.js +8 -6
  155. package/dist/cli/commands/dev.d.ts +0 -2
  156. package/dist/cli/commands/dev.js +20 -19
  157. package/dist/cli/commands/env.d.ts +12 -0
  158. package/dist/cli/commands/env.js +190 -0
  159. package/dist/cli/commands/info.js +95 -156
  160. package/dist/cli/commands/init.d.ts +2 -2
  161. package/dist/cli/commands/init.js +35 -33
  162. package/dist/cli/commands/invoke.d.ts +6 -0
  163. package/dist/cli/commands/invoke.js +131 -16
  164. package/dist/cli/commands/login.d.ts +31 -2
  165. package/dist/cli/commands/login.js +413 -64
  166. package/dist/cli/commands/logout.d.ts +4 -0
  167. package/dist/cli/commands/logout.js +53 -0
  168. package/dist/cli/commands/logs.js +8 -6
  169. package/dist/cli/commands/models.d.ts +2 -1
  170. package/dist/cli/commands/models.js +39 -37
  171. package/dist/cli/commands/schedules.d.ts +21 -0
  172. package/dist/cli/commands/schedules.js +143 -0
  173. package/dist/cli/commands/start.d.ts +11 -10
  174. package/dist/cli/commands/start.js +35 -62
  175. package/dist/cli/content-view.d.ts +9 -0
  176. package/dist/cli/content-view.js +26 -0
  177. package/dist/cli/fail.d.ts +9 -12
  178. package/dist/cli/fail.js +17 -14
  179. package/dist/cli/invoke-stream.d.ts +12 -3
  180. package/dist/cli/invoke-stream.js +85 -23
  181. package/dist/cli/kernel.d.ts +9 -2
  182. package/dist/cli/kernel.js +15 -6
  183. package/dist/cli/login-relay.d.ts +3 -2
  184. package/dist/cli/login-relay.js +18 -6
  185. package/dist/cli/models-view.d.ts +5 -1
  186. package/dist/cli/models-view.js +1 -1
  187. package/dist/cli/person.d.ts +10 -0
  188. package/dist/cli/person.js +23 -0
  189. package/dist/cli/program.js +421 -203
  190. package/dist/cli/serve.d.ts +13 -63
  191. package/dist/cli/serve.js +31 -121
  192. package/dist/cli/shared.d.ts +21 -48
  193. package/dist/cli/shared.js +68 -89
  194. package/dist/cli/ticket.d.ts +136 -0
  195. package/dist/cli/ticket.js +476 -0
  196. package/dist/client.d.ts +7 -0
  197. package/dist/client.js +2 -0
  198. package/dist/content/declare.d.ts +70 -0
  199. package/dist/content/declare.js +163 -0
  200. package/dist/content/file.d.ts +32 -0
  201. package/dist/content/file.js +119 -0
  202. package/dist/content/git.d.ts +41 -0
  203. package/dist/content/git.js +217 -0
  204. package/dist/content/mount.d.ts +2 -0
  205. package/dist/content/mount.js +15 -0
  206. package/dist/content/resolve.d.ts +52 -0
  207. package/dist/content/resolve.js +151 -0
  208. package/dist/content/source.d.ts +27 -0
  209. package/dist/content/source.js +53 -0
  210. package/dist/conversation-sessions.d.ts +26 -0
  211. package/dist/conversation-sessions.js +99 -0
  212. package/dist/declared-secrets.d.ts +19 -37
  213. package/dist/declared-secrets.js +16 -58
  214. package/dist/deploy/agentcore/destroy.d.ts +3 -3
  215. package/dist/deploy/agentcore/destroy.js +46 -28
  216. package/dist/deploy/agentcore/forwarder.js +105 -22
  217. package/dist/deploy/agentcore/logs.js +1 -1
  218. package/dist/deploy/agentcore/plan.d.ts +10 -24
  219. package/dist/deploy/agentcore/plan.js +31 -135
  220. package/dist/deploy/agentcore/run.d.ts +1 -1
  221. package/dist/deploy/agentcore/run.js +8 -5
  222. package/dist/deploy/agentcore/shell.d.ts +1 -1
  223. package/dist/deploy/agentcore/shell.js +5 -5
  224. package/dist/deploy/api.d.ts +34 -0
  225. package/dist/deploy/api.js +50 -0
  226. package/dist/deploy/box-shell.d.ts +6 -0
  227. package/dist/deploy/box-shell.js +7 -0
  228. package/dist/deploy/build-context.d.ts +7 -5
  229. package/dist/deploy/build-context.js +41 -35
  230. package/dist/deploy/channel-ingress.d.ts +6 -1
  231. package/dist/deploy/channel-ingress.js +18 -5
  232. package/dist/deploy/container.d.ts +22 -9
  233. package/dist/deploy/container.js +96 -55
  234. package/dist/deploy/docker/plan.d.ts +3 -2
  235. package/dist/deploy/docker/plan.js +13 -14
  236. package/dist/deploy/docker/run.d.ts +2 -2
  237. package/dist/deploy/docker/run.js +8 -4
  238. package/dist/deploy/fly/plan.d.ts +1 -1
  239. package/dist/deploy/fly/plan.js +12 -21
  240. package/dist/deploy/fly/run.d.ts +10 -6
  241. package/dist/deploy/fly/run.js +11 -6
  242. package/dist/deploy/hosts.d.ts +2 -1
  243. package/dist/deploy/hosts.js +2 -1
  244. package/dist/deploy/preflight.d.ts +21 -23
  245. package/dist/deploy/preflight.js +222 -201
  246. package/dist/deploy/railway/plan.d.ts +8 -6
  247. package/dist/deploy/railway/plan.js +15 -58
  248. package/dist/deploy/railway/run.d.ts +8 -3
  249. package/dist/deploy/railway/run.js +12 -8
  250. package/dist/deploy/residency.d.ts +5 -11
  251. package/dist/deploy/residency.js +0 -6
  252. package/dist/deploy/runner.d.ts +1 -1
  253. package/dist/deploy/runner.js +1 -1
  254. package/dist/deploy/secrets.d.ts +16 -2
  255. package/dist/deploy/secrets.js +33 -6
  256. package/dist/deploy/workspace.d.ts +11 -6
  257. package/dist/deploy/workspace.js +55 -38
  258. package/dist/dev-supervisor.d.ts +11 -2
  259. package/dist/dev-supervisor.js +51 -26
  260. package/dist/effect-port.d.ts +4 -4
  261. package/dist/effect-port.js +4 -4
  262. package/dist/environment/apt.d.ts +4 -0
  263. package/dist/environment/apt.js +32 -0
  264. package/dist/environment/declare.d.ts +59 -0
  265. package/dist/environment/declare.js +210 -0
  266. package/dist/environment/mise.d.ts +50 -0
  267. package/dist/environment/mise.js +268 -0
  268. package/dist/feishu.d.ts +2 -2
  269. package/dist/feishu.js +2 -2
  270. package/dist/git.d.ts +13 -0
  271. package/dist/git.js +55 -0
  272. package/dist/harnesses/models/catalog.d.ts +20 -0
  273. package/dist/harnesses/models/catalog.js +254 -0
  274. package/dist/{engines/pi/auth.d.ts → harnesses/models/credentials.d.ts} +3 -3
  275. package/dist/{engines/pi/auth.js → harnesses/models/credentials.js} +3 -3
  276. package/dist/harnesses/models/environment.d.ts +43 -0
  277. package/dist/harnesses/models/environment.js +82 -0
  278. package/dist/{engines/pi → harnesses/models}/login.d.ts +57 -26
  279. package/dist/{engines/pi → harnesses/models}/login.js +187 -79
  280. package/dist/harnesses/models/models.d.ts +83 -0
  281. package/dist/harnesses/models/models.js +158 -0
  282. package/dist/harnesses/pi-durable/agent.d.ts +42 -0
  283. package/dist/harnesses/pi-durable/agent.js +579 -0
  284. package/dist/harnesses/pi-durable/defaults.d.ts +28 -0
  285. package/dist/harnesses/pi-durable/defaults.js +26 -0
  286. package/dist/harnesses/pi-durable/define.d.ts +77 -0
  287. package/dist/harnesses/pi-durable/define.js +28 -0
  288. package/dist/harnesses/pi-durable/entries.d.ts +32 -0
  289. package/dist/harnesses/pi-durable/entries.js +126 -0
  290. package/dist/harnesses/pi-durable/events.d.ts +25 -0
  291. package/dist/harnesses/pi-durable/events.js +238 -0
  292. package/dist/harnesses/pi-durable/ids.d.ts +16 -0
  293. package/dist/harnesses/pi-durable/ids.js +55 -0
  294. package/dist/harnesses/pi-durable/messages.d.ts +41 -0
  295. package/dist/harnesses/pi-durable/messages.js +116 -0
  296. package/dist/harnesses/pi-durable/open.d.ts +88 -0
  297. package/dist/harnesses/pi-durable/open.js +329 -0
  298. package/dist/harnesses/pi-durable/reads.d.ts +30 -0
  299. package/dist/harnesses/pi-durable/reads.js +94 -0
  300. package/dist/harnesses/pi-durable/registry.d.ts +18 -0
  301. package/dist/harnesses/pi-durable/registry.js +56 -0
  302. package/dist/harnesses/pi-durable/release.d.ts +13 -0
  303. package/dist/harnesses/pi-durable/release.js +40 -0
  304. package/dist/harnesses/pi-durable/serve.d.ts +80 -0
  305. package/dist/harnesses/pi-durable/serve.js +156 -0
  306. package/dist/harnesses/pi-durable/sessions.d.ts +27 -0
  307. package/dist/harnesses/pi-durable/sessions.js +47 -0
  308. package/dist/harnesses/pi-durable/storage.d.ts +4 -0
  309. package/dist/harnesses/pi-durable/storage.js +49 -0
  310. package/dist/harnesses/pi-durable/stream.d.ts +20 -0
  311. package/dist/harnesses/pi-durable/stream.js +221 -0
  312. package/dist/harnesses/pi-durable/text.d.ts +30 -0
  313. package/dist/harnesses/pi-durable/text.js +292 -0
  314. package/dist/harnesses/pi-durable/wake.d.ts +4 -0
  315. package/dist/harnesses/pi-durable/wake.js +81 -0
  316. package/dist/http/client.d.ts +6 -0
  317. package/dist/http/client.js +256 -0
  318. package/dist/http/contract.d.ts +541 -0
  319. package/dist/http/contract.js +179 -0
  320. package/dist/http/server.d.ts +34 -0
  321. package/dist/http/server.js +194 -0
  322. package/dist/index.d.ts +17 -4
  323. package/dist/index.js +10 -5
  324. package/dist/lark.d.ts +2 -2
  325. package/dist/lark.js +2 -2
  326. package/dist/locked-file.d.ts +17 -0
  327. package/dist/{engines/pi/locked-file.js → locked-file.js} +16 -10
  328. package/dist/once.d.ts +6 -0
  329. package/dist/once.js +23 -0
  330. package/dist/paths.d.ts +36 -52
  331. package/dist/paths.js +66 -182
  332. package/dist/runtime.d.ts +25 -2
  333. package/dist/runtime.js +27 -0
  334. package/dist/scaffold/add-channel.d.ts +14 -27
  335. package/dist/scaffold/add-channel.js +82 -180
  336. package/dist/scaffold/init.d.ts +17 -18
  337. package/dist/scaffold/init.js +87 -99
  338. package/dist/scaffold/templates/SYSTEM.md +12 -0
  339. package/dist/scaffold/templates/env.example +4 -10
  340. package/dist/scaffold/templates/fastagent.config.ts +21 -33
  341. package/dist/scaffold/templates/gitignore +8 -1
  342. package/dist/scaffold/templates/skills/writing-great-skills/SKILL.md +1 -2
  343. package/dist/scaffold/templates.d.ts +9 -4
  344. package/dist/scaffold/templates.js +7 -5
  345. package/dist/scaffold/vendor-skill.d.ts +1 -4
  346. package/dist/scaffold/vendor-skill.js +5 -6
  347. package/dist/schedule/cron.d.ts +13 -0
  348. package/dist/schedule/cron.js +52 -0
  349. package/dist/schedule/eventbridge-cron.d.ts +17 -0
  350. package/dist/schedule/eventbridge-cron.js +88 -0
  351. package/dist/schedule/schedule.d.ts +23 -0
  352. package/dist/schedule/schedule.js +34 -0
  353. package/dist/schedule/scheduler.d.ts +34 -33
  354. package/dist/schedule/scheduler.js +251 -137
  355. package/dist/schedule/state.d.ts +4 -14
  356. package/dist/schedule/state.js +7 -7
  357. package/dist/schedule/wake-alarm.d.ts +22 -2
  358. package/dist/schedule/wake-alarm.js +66 -20
  359. package/dist/schedule/wakeups.d.ts +16 -15
  360. package/dist/schedule/wakeups.js +47 -45
  361. package/dist/service.d.ts +56 -169
  362. package/dist/service.js +91 -187
  363. package/dist/serving-command.d.ts +10 -0
  364. package/dist/serving-command.js +16 -0
  365. package/dist/slack.d.ts +1 -1
  366. package/dist/slack.js +1 -1
  367. package/dist/{channels/kit/state.js → state-file.js} +6 -6
  368. package/dist/telegram.d.ts +1 -0
  369. package/dist/telegram.js +1 -0
  370. package/dist/tunnel.d.ts +3 -0
  371. package/dist/tunnel.js +12 -4
  372. package/dist/value-file.d.ts +21 -0
  373. package/dist/value-file.js +108 -0
  374. package/dist/version.d.ts +5 -0
  375. package/dist/version.js +14 -1
  376. package/package.json +18 -28
  377. package/dist/agent.d.ts +0 -106
  378. package/dist/agent.js +0 -21
  379. package/dist/channels/control.d.ts +0 -31
  380. package/dist/channels/control.js +0 -329
  381. package/dist/channels/define-channel.d.ts +0 -39
  382. package/dist/channels/define-channel.js +0 -9
  383. package/dist/channels/feishu/context-buffer.d.ts +0 -35
  384. package/dist/channels/feishu/context-buffer.js +0 -65
  385. package/dist/channels/feishu/scaffold/channel.websocket.ts +0 -31
  386. package/dist/channels/http.d.ts +0 -23
  387. package/dist/channels/http.js +0 -57
  388. package/dist/channels/lark/scaffold/channel.websocket.ts +0 -31
  389. package/dist/channels/slack/context-buffer.d.ts +0 -23
  390. package/dist/channels/slack/context-buffer.js +0 -37
  391. package/dist/channels/sse.d.ts +0 -4
  392. package/dist/channels/sse.js +0 -66
  393. package/dist/cli/commands/chat.d.ts +0 -3
  394. package/dist/cli/commands/chat.js +0 -14
  395. package/dist/cli/commands/routine-run.d.ts +0 -6
  396. package/dist/cli/commands/routine-run.js +0 -46
  397. package/dist/cli/commands/routine.d.ts +0 -25
  398. package/dist/cli/commands/routine.js +0 -122
  399. package/dist/cli/commands/tool.d.ts +0 -1
  400. package/dist/cli/commands/tool.js +0 -57
  401. package/dist/collect.d.ts +0 -63
  402. package/dist/collect.js +0 -90
  403. package/dist/core.d.ts +0 -13
  404. package/dist/core.js +0 -15
  405. package/dist/engines/pi/agent-models.d.ts +0 -83
  406. package/dist/engines/pi/agent-models.js +0 -120
  407. package/dist/engines/pi/agent-session-factory.d.ts +0 -121
  408. package/dist/engines/pi/agent-session-factory.js +0 -535
  409. package/dist/engines/pi/chat.d.ts +0 -3
  410. package/dist/engines/pi/chat.js +0 -8
  411. package/dist/engines/pi/config.d.ts +0 -71
  412. package/dist/engines/pi/config.js +0 -199
  413. package/dist/engines/pi/create.d.ts +0 -170
  414. package/dist/engines/pi/create.js +0 -343
  415. package/dist/engines/pi/definition.d.ts +0 -74
  416. package/dist/engines/pi/definition.js +0 -236
  417. package/dist/engines/pi/entry-images.d.ts +0 -14
  418. package/dist/engines/pi/entry-images.js +0 -23
  419. package/dist/engines/pi/invoke-session.d.ts +0 -18
  420. package/dist/engines/pi/invoke-session.js +0 -403
  421. package/dist/engines/pi/locked-file.d.ts +0 -9
  422. package/dist/engines/pi/machine.d.ts +0 -53
  423. package/dist/engines/pi/machine.js +0 -137
  424. package/dist/engines/pi/models.d.ts +0 -200
  425. package/dist/engines/pi/models.js +0 -533
  426. package/dist/engines/pi/open.d.ts +0 -180
  427. package/dist/engines/pi/open.js +0 -270
  428. package/dist/engines/pi/openai-account-models.d.ts +0 -35
  429. package/dist/engines/pi/openai-account-models.js +0 -116
  430. package/dist/engines/pi/report.d.ts +0 -18
  431. package/dist/engines/pi/report.js +0 -59
  432. package/dist/engines/pi/retry-event.d.ts +0 -6
  433. package/dist/engines/pi/retry-event.js +0 -15
  434. package/dist/engines/pi/service.d.ts +0 -9
  435. package/dist/engines/pi/service.js +0 -14
  436. package/dist/engines/pi/session-builder.d.ts +0 -13
  437. package/dist/engines/pi/session-builder.js +0 -117
  438. package/dist/engines/pi/session-control.d.ts +0 -77
  439. package/dist/engines/pi/session-control.js +0 -908
  440. package/dist/engines/pi/session-effects.d.ts +0 -14
  441. package/dist/engines/pi/session-effects.js +0 -30
  442. package/dist/engines/pi/session-inheritance.d.ts +0 -21
  443. package/dist/engines/pi/session-inheritance.js +0 -204
  444. package/dist/engines/pi/session-markers.d.ts +0 -49
  445. package/dist/engines/pi/session-markers.js +0 -60
  446. package/dist/engines/pi/session-settings.d.ts +0 -67
  447. package/dist/engines/pi/session-settings.js +0 -119
  448. package/dist/engines/pi/session-store.d.ts +0 -69
  449. package/dist/engines/pi/session-store.js +0 -430
  450. package/dist/engines/pi/tool-context.d.ts +0 -45
  451. package/dist/engines/pi/tool-context.js +0 -31
  452. package/dist/engines/pi/tool.d.ts +0 -99
  453. package/dist/engines/pi/tool.js +0 -118
  454. package/dist/engines/pi/turn-kit.d.ts +0 -92
  455. package/dist/engines/pi/turn-kit.js +0 -288
  456. package/dist/engines/pi/wake-tool.d.ts +0 -9
  457. package/dist/engines/pi/wake-tool.js +0 -92
  458. package/dist/loader.d.ts +0 -41
  459. package/dist/loader.js +0 -116
  460. package/dist/node.d.ts +0 -3
  461. package/dist/node.js +0 -4
  462. package/dist/observe.d.ts +0 -6
  463. package/dist/observe.js +0 -47
  464. package/dist/pi.d.ts +0 -25
  465. package/dist/pi.js +0 -15
  466. package/dist/scaffold/templates/APPEND_SYSTEM.md +0 -12
  467. package/dist/scaffold/templates/tools/fetch-url.ts +0 -25
  468. package/dist/schedule/discover.d.ts +0 -17
  469. package/dist/schedule/discover.js +0 -61
  470. package/dist/schedule/routine.d.ts +0 -43
  471. package/dist/schedule/routine.js +0 -32
  472. package/dist/schedule/run.d.ts +0 -55
  473. package/dist/schedule/run.js +0 -146
  474. package/dist/secrets-gate.d.ts +0 -32
  475. package/dist/secrets-gate.js +0 -33
  476. package/dist/session-remote.d.ts +0 -47
  477. package/dist/session-remote.js +0 -460
  478. package/dist/session.d.ts +0 -466
  479. package/dist/session.js +0 -57
  480. /package/dist/{channels/kit/state.d.ts → state-file.d.ts} +0 -0
@@ -0,0 +1,256 @@
1
+ /**
2
+ * An Agent over HTTP (SPEC.md §8, §9): the interface `openAgent` gives in process, called through the contract the
3
+ * server answers from. Runs wherever `fetch` does (Node, Bun, Deno, Workers): nothing here needs a runtime's own API.
4
+ */
5
+ import * as Cause from "effect/Cause";
6
+ import * as Effect from "effect/Effect";
7
+ import * as Exit from "effect/Exit";
8
+ import * as Schema from "effect/Schema";
9
+ import * as Stream from "effect/Stream";
10
+ import { FetchHttpClient, HttpClient, HttpClientRequest } from "effect/http";
11
+ import { HttpApiClient } from "effect/http-api";
12
+ import { AgentError, CompactOptions, CreateSessionOptions, EntriesOptions, LIMITS, ListOptions, MessageKey, SendRequest, SessionChanges, Wait, agentError, errorData, hasEnded, } from "../agent-api.js";
13
+ import { AgentHttpApi, MESSAGE_STREAM_EVENT_TYPES, Refusal, SESSION_EVENT_TYPES } from "./contract.js";
14
+ /**
15
+ * What a request checks before it is sent, with the schema the in-process Agent checks it with. A field given as
16
+ * `undefined` is left out (§4): JSON would send it as `null`, which in a session's changes clears the field.
17
+ */
18
+ function checked(schema, value, what) {
19
+ const exit = Schema.decodeUnknownExit(schema)(value);
20
+ if (Exit.isSuccess(exit))
21
+ return present(exit.value);
22
+ throw agentError("invalid_request", `${what}: ${String(Cause.squash(exit.cause))}`);
23
+ }
24
+ function present(value) {
25
+ if (value === null || typeof value !== "object" || Array.isArray(value))
26
+ return value;
27
+ return Object.fromEntries(Object.entries(value).flatMap(([key, field]) => (field === undefined ? [] : [[key, present(field)]])));
28
+ }
29
+ const rejected = (signal) => Effect.callback((resume) => {
30
+ const onAbort = () => resume(Effect.fail(signal.reason));
31
+ if (signal.aborted)
32
+ return onAbort();
33
+ signal.addEventListener("abort", onAbort, { once: true });
34
+ return Effect.sync(() => signal.removeEventListener("abort", onAbort));
35
+ });
36
+ /**
37
+ * A refusal at a status the contract does not declare, a later server's: its body says what it is, as any refusal's
38
+ * does (§7.1). A body that is not one (a proxy's page) leaves the failure the request met.
39
+ */
40
+ const refusalIn = (error) => {
41
+ const response = error.reason?.response;
42
+ if (response === undefined || response.status < 400)
43
+ return Effect.fail(error);
44
+ return response.json.pipe(Effect.flatMap(Schema.decodeUnknownEffect(Refusal)), Effect.matchEffect({ onSuccess: Effect.fail, onFailure: () => Effect.fail(error) }));
45
+ };
46
+ const reasonOf = (error) => error.reason;
47
+ /** A request this client could not make: it never left. */
48
+ const unsent = (error) => ["EncodeError", "InvalidUrlError"].includes(reasonOf(error)?._tag ?? "");
49
+ const said = (error) => (error instanceof Error ? error.message : String(error));
50
+ /** What stopped a request that left, said for a Caller. */
51
+ const whatFailed = (baseUrl, error) => reasonOf(error)?._tag === "TransportError"
52
+ ? `could not reach the agent at ${baseUrl}: ${said(error)}`
53
+ : `the agent at ${baseUrl} answered what this client cannot read: ${said(error)}`;
54
+ /**
55
+ * A read's failure, and a write's other than a send's: a refusal as the agent answered it; one that could not get
56
+ * through or met a server's error may be sent again, since repeating any request but a send does no harm (§7);
57
+ * anything else is not the Caller's to retry.
58
+ */
59
+ function readFailure(baseUrl, error) {
60
+ if (error instanceof AgentError)
61
+ return error;
62
+ if (unsent(error))
63
+ return agentError("internal", `this client could not make a request of ${baseUrl}: ${said(error)}`);
64
+ const reason = reasonOf(error);
65
+ const status = reason?.response?.status;
66
+ const again = reason?._tag === "TransportError" || (status !== undefined && status >= 500);
67
+ return agentError(again ? "unavailable" : "internal", whatFailed(baseUrl, error));
68
+ }
69
+ /**
70
+ * A send's failure, by how far it got (§5.2), the one place that says so. Refused before it was recorded, it is the
71
+ * refusal; recorded, or perhaps recorded, it is `unconfirmed` with what finds it: the key, the client's own when the
72
+ * Caller gave none, and the message's id once known.
73
+ */
74
+ function sendFailure(baseUrl, stage, error) {
75
+ const { sessionId, key, messageId } = stage;
76
+ const finds = { sessionId, idempotencyKey: key, ...(messageId === undefined ? {} : { messageId }) };
77
+ if (error instanceof AgentError && error.code === "unconfirmed") {
78
+ const known = typeof error.details === "object" && error.details !== null ? error.details : {};
79
+ return new AgentError({ ...errorData(error), details: { ...known, ...finds } });
80
+ }
81
+ if (messageId !== undefined) {
82
+ return agentError("unconfirmed", `The message was recorded, and waiting for it failed: ${said(error)}`, finds);
83
+ }
84
+ if (error instanceof AgentError)
85
+ return error;
86
+ if (unsent(error))
87
+ return readFailure(baseUrl, error);
88
+ return agentError("unconfirmed", `${whatFailed(baseUrl, error)}; the message may have been recorded`, finds);
89
+ }
90
+ export function connectAgent(url, options) {
91
+ const client = Effect.runSync(HttpApiClient.make(AgentHttpApi, {
92
+ baseUrl: url,
93
+ transformClient: HttpClient.mapRequest(HttpClientRequest.bearerToken(options.apiKey)),
94
+ }).pipe(Effect.provide(FetchHttpClient.layer))).agent;
95
+ const read = (error) => readFailure(url, error);
96
+ const sent = (stage) => (error) => sendFailure(url, stage, error);
97
+ /**
98
+ * A request: rejected with its signal's reason once its Caller lets go, and otherwise with what `failure` makes of
99
+ * the failure, as it met it.
100
+ */
101
+ const request = async (effect, signal, failure = read) => {
102
+ if (signal?.aborted)
103
+ throw signal.reason;
104
+ const answered = effect.pipe(Effect.catch(refusalIn));
105
+ const exit = await Effect.runPromiseExit((signal === undefined ? answered : Effect.raceFirst(answered, rejected(signal))).pipe(Effect.provideService(HttpClient.TracerPropagationEnabled, false)));
106
+ if (Exit.isSuccess(exit))
107
+ return exit.value;
108
+ if (signal?.aborted)
109
+ throw signal.reason;
110
+ throw failure(Cause.squash(exit.cause));
111
+ };
112
+ /**
113
+ * Asks again until the message ends or the Caller's `wait` is over: a request waits at most a minute (§7). What a
114
+ * request after the first that fails means is `failureAfter`'s to say: for a send, the message is recorded by then.
115
+ */
116
+ const waited = async (first, options, failureAfter = () => read) => {
117
+ const wait = options?.wait === undefined ? undefined : checked(Wait, options.wait, "wait");
118
+ const deadline = wait === undefined ? undefined : Date.now() + wait * 1000;
119
+ const remaining = () => (deadline === undefined ? 0 : Math.max(0, deadline - Date.now()) / 1000);
120
+ const capped = () => Math.min(remaining(), LIMITS.httpWaitSeconds);
121
+ let message = await first(wait === undefined ? undefined : capped());
122
+ while (!hasEnded(message) && remaining() > 0) {
123
+ const { sessionId, id: messageId } = message;
124
+ message = await request(client.getMessage({ params: { sessionId, messageId }, query: { wait: capped() } }), options?.signal, failureAfter(message));
125
+ }
126
+ return message;
127
+ };
128
+ /**
129
+ * An event stream. Until it has delivered an event, a failure rejects its first read with what `refused` makes of
130
+ * it, an answer that ends before its first event included; once it has, a connection that fails or ends before the
131
+ * stream's own end ends it with `stream_error` (§6). A signal ends it, rejecting the read waiting then with its reason.
132
+ */
133
+ const watched = (opened, stream) => {
134
+ const { known, isLast, refused, signal } = stream;
135
+ const lostWith = (why) => ({ type: "stream_error", error: errorData(agentError("unavailable", why)) });
136
+ let delivered = false;
137
+ let ended = false;
138
+ const events = Stream.unwrap(opened.pipe(Effect.catch(refusalIn), Effect.provideService(HttpClient.TracerPropagationEnabled, false))).pipe(
139
+ // A type a later server sends is not one this Caller can be handed (§7.1).
140
+ Stream.filter((event) => known.has(event.type)), Stream.tap(() => Effect.sync(() => {
141
+ delivered = true;
142
+ })), Stream.catchCause((cause) => delivered
143
+ ? Stream.make(lostWith(`the connection to the agent failed: ${said(Cause.squash(cause))}`))
144
+ : Stream.fail(refused(Cause.squash(cause)))), Stream.takeUntil((event) => {
145
+ ended = event.type === "stream_error" || isLast(event);
146
+ return ended;
147
+ }), Stream.concat(Stream.suspend(() => {
148
+ if (ended)
149
+ return Stream.empty;
150
+ if (delivered)
151
+ return Stream.make(lostWith("the agent ended the stream"));
152
+ return Stream.fail(refused(new Error("the answer ended before its first event")));
153
+ })));
154
+ if (signal === undefined)
155
+ return Stream.toAsyncIterable(events);
156
+ const iterable = Stream.toAsyncIterable(events.pipe(Stream.interruptWhen(rejected(signal))));
157
+ return {
158
+ [Symbol.asyncIterator]: () => {
159
+ const iterator = iterable[Symbol.asyncIterator]();
160
+ return {
161
+ // The read waiting when the signal fires rejects with its reason, and so does every read after it.
162
+ next: async () => {
163
+ if (signal.aborted)
164
+ throw signal.reason;
165
+ return iterator.next();
166
+ },
167
+ return: async () => (await iterator.return?.()) ?? { done: true, value: undefined },
168
+ };
169
+ },
170
+ };
171
+ };
172
+ /** A send carries a key, the Caller's or one of its own, so that one whose answer was lost can be found (§5.2). */
173
+ const keyed = (sendRequest, what) => {
174
+ const { sessionId, idempotencyKey, ...body } = checked(SendRequest, sendRequest, what);
175
+ return { stage: { sessionId, key: idempotencyKey ?? crypto.randomUUID() }, body };
176
+ };
177
+ return {
178
+ info: () => request(client.info()),
179
+ usage: () => request(client.usage()),
180
+ sessions: {
181
+ create: async (createOptions) => request(client.createSession({ payload: checked(CreateSessionOptions, createOptions ?? {}, "sessions.create") })),
182
+ get: (sessionId) => request(client.getSession({ params: { sessionId } })),
183
+ list: async (listOptions) => (await request(client.listSessions({ query: checked(ListOptions, listOptions ?? {}, "sessions.list") }))),
184
+ update: async (sessionId, changes) => request(client.updateSession({ params: { sessionId }, payload: checked(SessionChanges, changes, "sessions.update") })),
185
+ entries: async (sessionId, entriesOptions) => (await request(client.entries({
186
+ params: { sessionId },
187
+ query: checked(EntriesOptions, entriesOptions ?? {}, "sessions.entries"),
188
+ }))),
189
+ events: (sessionId, eventsOptions) => watched(client.events({
190
+ params: { sessionId },
191
+ query: { after: eventsOptions?.after },
192
+ headers: { "last-event-id": undefined },
193
+ }), { known: SESSION_EVENT_TYPES, isLast: () => false, refused: read, signal: eventsOptions?.signal }),
194
+ cancel: async (sessionId) => {
195
+ const { stopped } = await request(client.cancel({ params: { sessionId } }));
196
+ return { stopped: [...stopped] };
197
+ },
198
+ compact: async (sessionId, compactOptions) => {
199
+ await request(client.compact({
200
+ params: { sessionId },
201
+ payload: checked(CompactOptions, compactOptions ?? {}, "sessions.compact"),
202
+ }));
203
+ },
204
+ attachment: (sessionId, ref) => request(Effect.gen(function* () {
205
+ const response = yield* client.attachment({ params: { sessionId, ref }, responseMode: "response-only" });
206
+ if (response.status !== 200) {
207
+ // A refusal fails here, decoded; a body this endpoint never answers a refusal with is said as such.
208
+ yield* decodeAttachmentRefusal(response);
209
+ return yield* Effect.fail(agentError("internal", `the agent answered ${response.status} with an image`));
210
+ }
211
+ const data = new Uint8Array(yield* response.arrayBuffer);
212
+ return { mimeType: response.headers["content-type"] ?? "application/octet-stream", data };
213
+ })),
214
+ },
215
+ messages: {
216
+ send: async (sendRequest, sendOptions) => {
217
+ const { stage, body } = keyed(sendRequest, "messages.send");
218
+ return waited((wait) => request(client.send({
219
+ params: { sessionId: stage.sessionId },
220
+ headers: { "idempotency-key": stage.key },
221
+ payload: { ...body, wait },
222
+ }), sendOptions?.signal, sent(stage)), sendOptions, (message) => sent({ ...stage, messageId: message.id }));
223
+ },
224
+ stream: (sendRequest, streamOptions) => {
225
+ // Checked on the first read, which a refusal rejects (§6.2): until then there is no stage to fail at.
226
+ let stage;
227
+ let messageId;
228
+ return watched(Effect.try({ try: () => keyed(sendRequest, "messages.stream"), catch: (error) => error }).pipe(Effect.flatMap((keying) => {
229
+ stage = keying.stage;
230
+ return client.send({
231
+ params: { sessionId: keying.stage.sessionId },
232
+ headers: { "idempotency-key": keying.stage.key },
233
+ payload: { ...keying.body, stream: true },
234
+ });
235
+ })), {
236
+ known: MESSAGE_STREAM_EVENT_TYPES,
237
+ isLast: (event) => {
238
+ if (event.type === "message")
239
+ messageId = event.message.id;
240
+ return event.type === "done" && event.message.id === messageId;
241
+ },
242
+ // The answer begins once the message is recorded, so a failure before its first event is a send's.
243
+ refused: (error) => (stage === undefined ? read(error) : sent(stage)(error)),
244
+ signal: streamOptions?.signal,
245
+ });
246
+ },
247
+ get: async (key, getOptions) => {
248
+ const at = checked(MessageKey, key, "messages.get");
249
+ return waited((wait) => request("messageId" in at
250
+ ? client.getMessage({ params: at, query: { wait } })
251
+ : client.getMessageByKey({ params: at, query: { wait } }), getOptions?.signal), getOptions);
252
+ },
253
+ },
254
+ };
255
+ }
256
+ const decodeAttachmentRefusal = HttpApiClient.decodeResponse(AgentHttpApi, { group: "agent", endpoint: "attachment" });