@fastagent-sh/fastagent 0.24.4 → 0.26.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 (487) hide show
  1. package/README.md +54 -82
  2. package/dist/agent-api.d.ts +460 -0
  3. package/dist/agent-api.js +209 -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 +81 -0
  9. package/dist/authoring.js +245 -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 +116 -64
  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 +18 -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 +253 -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 +191 -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 +132 -16
  164. package/dist/cli/commands/login.d.ts +31 -2
  165. package/dist/cli/commands/login.js +416 -65
  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 +6 -4
  184. package/dist/cli/login-relay.js +19 -7
  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 +70 -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 +220 -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 +223 -202
  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 +52 -27
  260. package/dist/effect-port.d.ts +4 -4
  261. package/dist/effect-port.js +4 -4
  262. package/dist/env.d.ts +0 -13
  263. package/dist/env.js +1 -44
  264. package/dist/environment/apt.d.ts +4 -0
  265. package/dist/environment/apt.js +32 -0
  266. package/dist/environment/declare.d.ts +59 -0
  267. package/dist/environment/declare.js +210 -0
  268. package/dist/environment/mise.d.ts +51 -0
  269. package/dist/environment/mise.js +272 -0
  270. package/dist/feishu.d.ts +2 -2
  271. package/dist/feishu.js +2 -2
  272. package/dist/git.d.ts +13 -0
  273. package/dist/git.js +55 -0
  274. package/dist/harnesses/models/catalog.d.ts +20 -0
  275. package/dist/harnesses/models/catalog.js +254 -0
  276. package/dist/{engines/pi/auth.d.ts → harnesses/models/credentials.d.ts} +3 -3
  277. package/dist/{engines/pi/auth.js → harnesses/models/credentials.js} +3 -3
  278. package/dist/harnesses/models/environment.d.ts +48 -0
  279. package/dist/harnesses/models/environment.js +88 -0
  280. package/dist/harnesses/models/host.d.ts +30 -0
  281. package/dist/harnesses/models/host.js +97 -0
  282. package/dist/{engines/pi → harnesses/models}/login.d.ts +66 -70
  283. package/dist/harnesses/models/login.js +439 -0
  284. package/dist/harnesses/models/models.d.ts +84 -0
  285. package/dist/harnesses/models/models.js +197 -0
  286. package/dist/harnesses/pi-durable/agent.d.ts +42 -0
  287. package/dist/harnesses/pi-durable/agent.js +581 -0
  288. package/dist/harnesses/pi-durable/defaults.d.ts +28 -0
  289. package/dist/harnesses/pi-durable/defaults.js +26 -0
  290. package/dist/harnesses/pi-durable/define.d.ts +77 -0
  291. package/dist/harnesses/pi-durable/define.js +28 -0
  292. package/dist/harnesses/pi-durable/entries.d.ts +32 -0
  293. package/dist/harnesses/pi-durable/entries.js +126 -0
  294. package/dist/harnesses/pi-durable/events.d.ts +25 -0
  295. package/dist/harnesses/pi-durable/events.js +238 -0
  296. package/dist/harnesses/pi-durable/ids.d.ts +16 -0
  297. package/dist/harnesses/pi-durable/ids.js +55 -0
  298. package/dist/harnesses/pi-durable/messages.d.ts +41 -0
  299. package/dist/harnesses/pi-durable/messages.js +116 -0
  300. package/dist/harnesses/pi-durable/open.d.ts +95 -0
  301. package/dist/harnesses/pi-durable/open.js +330 -0
  302. package/dist/harnesses/pi-durable/reads.d.ts +30 -0
  303. package/dist/harnesses/pi-durable/reads.js +94 -0
  304. package/dist/harnesses/pi-durable/registry.d.ts +18 -0
  305. package/dist/harnesses/pi-durable/registry.js +56 -0
  306. package/dist/harnesses/pi-durable/release.d.ts +13 -0
  307. package/dist/harnesses/pi-durable/release.js +40 -0
  308. package/dist/harnesses/pi-durable/serve.d.ts +90 -0
  309. package/dist/harnesses/pi-durable/serve.js +186 -0
  310. package/dist/harnesses/pi-durable/sessions.d.ts +27 -0
  311. package/dist/harnesses/pi-durable/sessions.js +47 -0
  312. package/dist/harnesses/pi-durable/storage.d.ts +4 -0
  313. package/dist/harnesses/pi-durable/storage.js +49 -0
  314. package/dist/harnesses/pi-durable/stream.d.ts +20 -0
  315. package/dist/harnesses/pi-durable/stream.js +221 -0
  316. package/dist/harnesses/pi-durable/text.d.ts +30 -0
  317. package/dist/harnesses/pi-durable/text.js +292 -0
  318. package/dist/harnesses/pi-durable/wake.d.ts +11 -0
  319. package/dist/harnesses/pi-durable/wake.js +90 -0
  320. package/dist/http/client.d.ts +6 -0
  321. package/dist/http/client.js +256 -0
  322. package/dist/http/contract.d.ts +541 -0
  323. package/dist/http/contract.js +179 -0
  324. package/dist/http/server.d.ts +34 -0
  325. package/dist/http/server.js +194 -0
  326. package/dist/index.d.ts +19 -4
  327. package/dist/index.js +13 -5
  328. package/dist/lark.d.ts +2 -2
  329. package/dist/lark.js +2 -2
  330. package/dist/locked-file.d.ts +17 -0
  331. package/dist/{engines/pi/locked-file.js → locked-file.js} +16 -10
  332. package/dist/once.d.ts +6 -0
  333. package/dist/once.js +23 -0
  334. package/dist/paths.d.ts +36 -52
  335. package/dist/paths.js +66 -182
  336. package/dist/runtime.d.ts +25 -2
  337. package/dist/runtime.js +27 -0
  338. package/dist/scaffold/add-channel.d.ts +14 -27
  339. package/dist/scaffold/add-channel.js +82 -180
  340. package/dist/scaffold/init.d.ts +17 -18
  341. package/dist/scaffold/init.js +87 -99
  342. package/dist/scaffold/templates/SYSTEM.md +12 -0
  343. package/dist/scaffold/templates/env.example +4 -10
  344. package/dist/scaffold/templates/fastagent.config.ts +21 -33
  345. package/dist/scaffold/templates/gitignore +8 -1
  346. package/dist/scaffold/templates/skills/writing-great-skills/SKILL.md +1 -2
  347. package/dist/scaffold/templates.d.ts +9 -4
  348. package/dist/scaffold/templates.js +7 -5
  349. package/dist/scaffold/vendor-skill.d.ts +1 -4
  350. package/dist/scaffold/vendor-skill.js +5 -6
  351. package/dist/schedule/cron.d.ts +13 -0
  352. package/dist/schedule/cron.js +52 -0
  353. package/dist/schedule/eventbridge-cron.d.ts +17 -0
  354. package/dist/schedule/eventbridge-cron.js +88 -0
  355. package/dist/schedule/schedule.d.ts +23 -0
  356. package/dist/schedule/schedule.js +34 -0
  357. package/dist/schedule/scheduler.d.ts +34 -33
  358. package/dist/schedule/scheduler.js +251 -137
  359. package/dist/schedule/state.d.ts +4 -14
  360. package/dist/schedule/state.js +7 -7
  361. package/dist/schedule/wake-alarm.d.ts +22 -2
  362. package/dist/schedule/wake-alarm.js +66 -20
  363. package/dist/schedule/wakeups.d.ts +16 -15
  364. package/dist/schedule/wakeups.js +47 -45
  365. package/dist/service.d.ts +56 -169
  366. package/dist/service.js +91 -187
  367. package/dist/serving-command.d.ts +10 -0
  368. package/dist/serving-command.js +16 -0
  369. package/dist/sign-in-api.d.ts +147 -0
  370. package/dist/sign-in-api.js +9 -0
  371. package/dist/slack.d.ts +1 -1
  372. package/dist/slack.js +1 -1
  373. package/dist/{channels/kit/state.js → state-file.js} +6 -6
  374. package/dist/telegram.d.ts +1 -0
  375. package/dist/telegram.js +1 -0
  376. package/dist/tunnel.d.ts +3 -0
  377. package/dist/tunnel.js +14 -5
  378. package/dist/value-file.d.ts +40 -0
  379. package/dist/value-file.js +164 -0
  380. package/dist/version.d.ts +5 -0
  381. package/dist/version.js +14 -1
  382. package/package.json +18 -28
  383. package/dist/agent.d.ts +0 -106
  384. package/dist/agent.js +0 -21
  385. package/dist/channels/control.d.ts +0 -31
  386. package/dist/channels/control.js +0 -329
  387. package/dist/channels/define-channel.d.ts +0 -39
  388. package/dist/channels/define-channel.js +0 -9
  389. package/dist/channels/feishu/context-buffer.d.ts +0 -35
  390. package/dist/channels/feishu/context-buffer.js +0 -65
  391. package/dist/channels/feishu/scaffold/channel.websocket.ts +0 -31
  392. package/dist/channels/http.d.ts +0 -23
  393. package/dist/channels/http.js +0 -57
  394. package/dist/channels/lark/scaffold/channel.websocket.ts +0 -31
  395. package/dist/channels/slack/context-buffer.d.ts +0 -23
  396. package/dist/channels/slack/context-buffer.js +0 -37
  397. package/dist/channels/sse.d.ts +0 -4
  398. package/dist/channels/sse.js +0 -66
  399. package/dist/cli/commands/chat.d.ts +0 -3
  400. package/dist/cli/commands/chat.js +0 -14
  401. package/dist/cli/commands/routine-run.d.ts +0 -6
  402. package/dist/cli/commands/routine-run.js +0 -46
  403. package/dist/cli/commands/routine.d.ts +0 -25
  404. package/dist/cli/commands/routine.js +0 -122
  405. package/dist/cli/commands/tool.d.ts +0 -1
  406. package/dist/cli/commands/tool.js +0 -57
  407. package/dist/collect.d.ts +0 -63
  408. package/dist/collect.js +0 -90
  409. package/dist/core.d.ts +0 -13
  410. package/dist/core.js +0 -15
  411. package/dist/engines/pi/agent-models.d.ts +0 -83
  412. package/dist/engines/pi/agent-models.js +0 -120
  413. package/dist/engines/pi/agent-session-factory.d.ts +0 -121
  414. package/dist/engines/pi/agent-session-factory.js +0 -535
  415. package/dist/engines/pi/chat.d.ts +0 -3
  416. package/dist/engines/pi/chat.js +0 -8
  417. package/dist/engines/pi/config.d.ts +0 -71
  418. package/dist/engines/pi/config.js +0 -199
  419. package/dist/engines/pi/create.d.ts +0 -170
  420. package/dist/engines/pi/create.js +0 -343
  421. package/dist/engines/pi/definition.d.ts +0 -74
  422. package/dist/engines/pi/definition.js +0 -236
  423. package/dist/engines/pi/entry-images.d.ts +0 -14
  424. package/dist/engines/pi/entry-images.js +0 -23
  425. package/dist/engines/pi/invoke-session.d.ts +0 -18
  426. package/dist/engines/pi/invoke-session.js +0 -403
  427. package/dist/engines/pi/locked-file.d.ts +0 -9
  428. package/dist/engines/pi/login.js +0 -331
  429. package/dist/engines/pi/machine.d.ts +0 -53
  430. package/dist/engines/pi/machine.js +0 -137
  431. package/dist/engines/pi/models.d.ts +0 -200
  432. package/dist/engines/pi/models.js +0 -533
  433. package/dist/engines/pi/open.d.ts +0 -180
  434. package/dist/engines/pi/open.js +0 -270
  435. package/dist/engines/pi/openai-account-models.d.ts +0 -35
  436. package/dist/engines/pi/openai-account-models.js +0 -116
  437. package/dist/engines/pi/report.d.ts +0 -18
  438. package/dist/engines/pi/report.js +0 -59
  439. package/dist/engines/pi/retry-event.d.ts +0 -6
  440. package/dist/engines/pi/retry-event.js +0 -15
  441. package/dist/engines/pi/service.d.ts +0 -9
  442. package/dist/engines/pi/service.js +0 -14
  443. package/dist/engines/pi/session-builder.d.ts +0 -13
  444. package/dist/engines/pi/session-builder.js +0 -117
  445. package/dist/engines/pi/session-control.d.ts +0 -77
  446. package/dist/engines/pi/session-control.js +0 -908
  447. package/dist/engines/pi/session-effects.d.ts +0 -14
  448. package/dist/engines/pi/session-effects.js +0 -30
  449. package/dist/engines/pi/session-inheritance.d.ts +0 -21
  450. package/dist/engines/pi/session-inheritance.js +0 -204
  451. package/dist/engines/pi/session-markers.d.ts +0 -49
  452. package/dist/engines/pi/session-markers.js +0 -60
  453. package/dist/engines/pi/session-settings.d.ts +0 -67
  454. package/dist/engines/pi/session-settings.js +0 -119
  455. package/dist/engines/pi/session-store.d.ts +0 -69
  456. package/dist/engines/pi/session-store.js +0 -430
  457. package/dist/engines/pi/tool-context.d.ts +0 -45
  458. package/dist/engines/pi/tool-context.js +0 -31
  459. package/dist/engines/pi/tool.d.ts +0 -99
  460. package/dist/engines/pi/tool.js +0 -118
  461. package/dist/engines/pi/turn-kit.d.ts +0 -92
  462. package/dist/engines/pi/turn-kit.js +0 -288
  463. package/dist/engines/pi/wake-tool.d.ts +0 -9
  464. package/dist/engines/pi/wake-tool.js +0 -92
  465. package/dist/loader.d.ts +0 -41
  466. package/dist/loader.js +0 -116
  467. package/dist/node.d.ts +0 -3
  468. package/dist/node.js +0 -4
  469. package/dist/observe.d.ts +0 -6
  470. package/dist/observe.js +0 -47
  471. package/dist/pi.d.ts +0 -25
  472. package/dist/pi.js +0 -15
  473. package/dist/scaffold/templates/APPEND_SYSTEM.md +0 -12
  474. package/dist/scaffold/templates/tools/fetch-url.ts +0 -25
  475. package/dist/schedule/discover.d.ts +0 -17
  476. package/dist/schedule/discover.js +0 -61
  477. package/dist/schedule/routine.d.ts +0 -43
  478. package/dist/schedule/routine.js +0 -32
  479. package/dist/schedule/run.d.ts +0 -55
  480. package/dist/schedule/run.js +0 -146
  481. package/dist/secrets-gate.d.ts +0 -32
  482. package/dist/secrets-gate.js +0 -33
  483. package/dist/session-remote.d.ts +0 -47
  484. package/dist/session-remote.js +0 -460
  485. package/dist/session.d.ts +0 -466
  486. package/dist/session.js +0 -57
  487. /package/dist/{channels/kit/state.d.ts → state-file.d.ts} +0 -0
@@ -0,0 +1,84 @@
1
+ /**
2
+ * pi-ai's model collection as FastAgent composes it: the built-in providers over a credential store, kept current by
3
+ * the catalogs (catalog.ts), and the definition's own providers; and the reads a report, a login or a picker make of
4
+ * it. A custom model is a provider in code (`defineAgent({ providers })`), never a models file or a per-account list
5
+ * (architecture.md §3).
6
+ */
7
+ import { type Api, type CredentialStore, type Model, type Models, type Provider } from "@earendil-works/pi-ai";
8
+ import type { Catalogs } from "./catalog.ts";
9
+ /** The provider of a `"provider/modelId"` spec. */
10
+ export declare function providerOf(spec: string): string;
11
+ /** Every chat model `models` offers, as `"provider/modelId"`, sorted. */
12
+ export declare function listModels(models: Models): string[];
13
+ /**
14
+ * The built-ins plus `providers` (a same id replaces a built-in), over any credential store, in `environment`: what
15
+ * the agent's environment adds to this process's, read before it by a provider's auth and by each request. With
16
+ * `catalogs`, the lists its refresh brings up to date; without, the ones this pi-ai was built with.
17
+ */
18
+ export declare function modelsOver(credentials: CredentialStore, providers?: readonly Provider[], catalogs?: Catalogs, environment?: Readonly<Record<string, string>>): Models;
19
+ /**
20
+ * Whether `env` alone satisfies a provider, by pi's own check, and with what when the provider says (its API-key
21
+ * variable, or an ambient source such as an AWS profile); undefined when it does not. A provider in code may
22
+ * authenticate without naming a source. Passed explicitly rather than read from `process.env`: only the environment a
23
+ * SHELL hands down is shared by every agent on the machine, and a process that has loaded an agent's `.secrets/.env`
24
+ * holds that agent's variables too. What the shell shares outranks the global credentials file (environment.ts), so a
25
+ * global login for such a provider is not used.
26
+ *
27
+ * `fileExists` answers for the files a source points at (an AWS profile, Google ADC): this machine's by default, which
28
+ * is right wherever the answer is about THIS machine. A deployment passes one that finds nothing, because no file of
29
+ * the builder's travels with it.
30
+ */
31
+ export declare function environmentAuth(providerId: string, env: NodeJS.ProcessEnv, fileExists?: (path: string) => Promise<boolean>, providers?: readonly Provider[]): Promise<{
32
+ source?: string;
33
+ } | undefined>;
34
+ /**
35
+ * The environment variables a provider reads its key from, in the order it reads them: what a person sets for it to
36
+ * authenticate with no sign-in. pi-ai keeps the names inside each provider's auth, so they are learnt by asking the
37
+ * provider to authenticate over an environment that records every name asked for and holds none. Its side-effect-free
38
+ * `check` when it has one, since its `resolve` may then run commands.
39
+ */
40
+ export declare function keyVariables(provider: Provider): Promise<string[]>;
41
+ /**
42
+ * What a provider can offer as an interactive login: an OAuth flow, an API-key ENTRY prompt, or nothing ("none" — the
43
+ * key must come from the provider's env var).
44
+ */
45
+ export type InteractiveLoginKind = "oauth" | "api_key" | "none";
46
+ export declare function interactiveLoginKind(p: Provider): InteractiveLoginKind;
47
+ /** THE rule for "can this method be signed in to interactively": the auth to run for it, or undefined. */
48
+ export declare function interactiveAuth(provider: Provider, method: Exclude<InteractiveLoginKind, "none">): import("@earendil-works/pi-ai").ApiKeyAuth | import("@earendil-works/pi-ai").OAuthAuth | undefined;
49
+ /** The providers a sign-in can target: pi's built-ins plus `extra`, composed exactly as {@link modelsOver} does. */
50
+ export declare function loginProviders(extra?: readonly Provider[]): readonly Provider[];
51
+ /** Per-provider auth status for the first-run model picker. */
52
+ export type ProviderAuthStatus = {
53
+ state: "ready";
54
+ source?: string;
55
+ } | {
56
+ state: "unconfigured";
57
+ login: InteractiveLoginKind;
58
+ } | {
59
+ state: "broken";
60
+ message: string;
61
+ login: InteractiveLoginKind;
62
+ };
63
+ /** Probe every provider's auth once (auth is provider-scoped, so any of its models works as the probe). */
64
+ export declare function providerAuthStatuses(models: Models): Promise<Map<string, ProviderAuthStatus>>;
65
+ /** The source of a provider that authenticates without naming one: a definition's provider resolving its own key. */
66
+ export declare const UNNAMED_AUTH_SOURCE = "the provider's own auth";
67
+ /**
68
+ * Which source currently satisfies auth for `spec`, or undefined when none does (or the spec is not in `models`).
69
+ * Rejects when resolving fails — a corrupt entry, a refresh the provider refused — which is a different answer from
70
+ * "nothing configured" and must reach whoever reports it.
71
+ */
72
+ export declare function probeAuthSource(models: Models, spec: string): Promise<string | undefined>;
73
+ /**
74
+ * Verdict of {@link probeApiKey}: `rejected` is DEFINITIVE (the provider answered HTTP 401 — the key is wrong);
75
+ * everything else non-ok is `unknown`.
76
+ */
77
+ export type KeyProbe = {
78
+ state: "ok";
79
+ } | {
80
+ state: "rejected" | "unknown";
81
+ message: string;
82
+ };
83
+ /** Quick-fail probe for a just-stored API key. */
84
+ export declare function probeApiKey(models: Models, model: Model<Api>, signal?: AbortSignal): Promise<KeyProbe>;
@@ -0,0 +1,197 @@
1
+ /**
2
+ * pi-ai's model collection as FastAgent composes it: the built-in providers over a credential store, kept current by
3
+ * the catalogs (catalog.ts), and the definition's own providers; and the reads a report, a login or a picker make of
4
+ * it. A custom model is a provider in code (`defineAgent({ providers })`), never a models file or a per-account list
5
+ * (architecture.md §3).
6
+ */
7
+ import { InMemoryCredentialStore, createModels, defaultProviderAuthContext, } from "@earendil-works/pi-ai";
8
+ import { builtinModels, builtinProviders } from "@earendil-works/pi-ai/providers/all";
9
+ /** The provider of a `"provider/modelId"` spec. */
10
+ export function providerOf(spec) {
11
+ const slash = spec.indexOf("/");
12
+ return slash > 0 ? spec.slice(0, slash) : spec;
13
+ }
14
+ /** Every chat model `models` offers, as `"provider/modelId"`, sorted. */
15
+ export function listModels(models) {
16
+ const specs = [];
17
+ for (const provider of models.getProviders()) {
18
+ for (const model of provider.getModels())
19
+ specs.push(`${provider.id}/${model.id}`);
20
+ }
21
+ return specs.sort();
22
+ }
23
+ /**
24
+ * pi's own reading of an environment (a blank variable is unset) through `read` instead of this process's: an agent's
25
+ * environment is its own when the process runs several. Files a source points at are this machine's unless
26
+ * `fileExists` says otherwise.
27
+ */
28
+ function authContextIn(read, fileExists = defaultProviderAuthContext().fileExists) {
29
+ return {
30
+ env: async (name) => {
31
+ const value = read(name);
32
+ return value?.trim() ? value : undefined;
33
+ },
34
+ fileExists,
35
+ };
36
+ }
37
+ /**
38
+ * `provider` with `environment` given to each request, as its auth reads it: pi resolves a provider's key from the
39
+ * auth context, but a request reads its region, endpoint or ambient key (Bedrock, Azure, Vertex) from the request's
40
+ * own `env`, which it otherwise takes from this process.
41
+ */
42
+ function inEnvironment(provider, environment) {
43
+ const withEnv = (options) => ({ ...options, env: { ...environment, ...options?.env } });
44
+ const { fetchDeferred, cancelDeferred, generateImages, classify } = provider;
45
+ return {
46
+ ...provider,
47
+ stream: (model, context, options) => provider.stream(model, context, withEnv(options)),
48
+ streamSimple: (model, context, options) => provider.streamSimple(model, context, withEnv(options)),
49
+ ...(fetchDeferred && {
50
+ fetchDeferred: (model, handle, options) => fetchDeferred.call(provider, model, handle, withEnv(options)),
51
+ }),
52
+ ...(cancelDeferred && {
53
+ cancelDeferred: (model, handle, options) => cancelDeferred.call(provider, model, handle, withEnv(options)),
54
+ }),
55
+ ...(generateImages && {
56
+ generateImages: (model, context, options) => generateImages.call(provider, model, context, withEnv(options)),
57
+ }),
58
+ ...(classify && {
59
+ classify: (model, context, options) => classify.call(provider, model, context, withEnv(options)),
60
+ }),
61
+ };
62
+ }
63
+ /**
64
+ * The built-ins plus `providers` (a same id replaces a built-in), over any credential store, in `environment`: what
65
+ * the agent's environment adds to this process's, read before it by a provider's auth and by each request. With
66
+ * `catalogs`, the lists its refresh brings up to date; without, the ones this pi-ai was built with.
67
+ */
68
+ export function modelsOver(credentials, providers = [], catalogs, environment = {}) {
69
+ const models = createModels({
70
+ credentials,
71
+ // As a request reads it (pi's getProviderEnvValue): the request's env first, then this process's.
72
+ authContext: authContextIn((name) => environment[name] || process.env[name]),
73
+ ...(catalogs ? { modelsStore: catalogs.fetched } : {}),
74
+ });
75
+ for (const builtIn of builtinProviders()) {
76
+ models.setProvider(inEnvironment(catalogs ? catalogs.over(builtIn) : builtIn, environment));
77
+ }
78
+ for (const provider of providers)
79
+ models.setProvider(inEnvironment(provider, environment));
80
+ return models;
81
+ }
82
+ /**
83
+ * Whether `env` alone satisfies a provider, by pi's own check, and with what when the provider says (its API-key
84
+ * variable, or an ambient source such as an AWS profile); undefined when it does not. A provider in code may
85
+ * authenticate without naming a source. Passed explicitly rather than read from `process.env`: only the environment a
86
+ * SHELL hands down is shared by every agent on the machine, and a process that has loaded an agent's `.secrets/.env`
87
+ * holds that agent's variables too. What the shell shares outranks the global credentials file (environment.ts), so a
88
+ * global login for such a provider is not used.
89
+ *
90
+ * `fileExists` answers for the files a source points at (an AWS profile, Google ADC): this machine's by default, which
91
+ * is right wherever the answer is about THIS machine. A deployment passes one that finds nothing, because no file of
92
+ * the builder's travels with it.
93
+ */
94
+ export async function environmentAuth(providerId, env, fileExists = defaultProviderAuthContext().fileExists, providers = []) {
95
+ const models = builtinModels({
96
+ credentials: new InMemoryCredentialStore(),
97
+ authContext: authContextIn((name) => env[name], fileExists),
98
+ });
99
+ for (const provider of providers)
100
+ models.setProvider(provider);
101
+ return models.checkAuth(providerId);
102
+ }
103
+ /**
104
+ * The environment variables a provider reads its key from, in the order it reads them: what a person sets for it to
105
+ * authenticate with no sign-in. pi-ai keeps the names inside each provider's auth, so they are learnt by asking the
106
+ * provider to authenticate over an environment that records every name asked for and holds none. Its side-effect-free
107
+ * `check` when it has one, since its `resolve` may then run commands.
108
+ */
109
+ export async function keyVariables(provider) {
110
+ const apiKey = provider.auth.apiKey;
111
+ if (apiKey === undefined)
112
+ return [];
113
+ const asked = new Set();
114
+ const ctx = {
115
+ env: async (name) => void asked.add(name),
116
+ fileExists: async () => false,
117
+ };
118
+ const signal = new AbortController().signal;
119
+ await (apiKey.check ? apiKey.check({ ctx, signal }) : apiKey.resolve({ ctx, signal }));
120
+ return [...asked];
121
+ }
122
+ export function interactiveLoginKind(p) {
123
+ if (interactiveAuth(p, "oauth"))
124
+ return "oauth";
125
+ return interactiveAuth(p, "api_key") ? "api_key" : "none";
126
+ }
127
+ /** THE rule for "can this method be signed in to interactively": the auth to run for it, or undefined. */
128
+ export function interactiveAuth(provider, method) {
129
+ return method === "oauth" ? provider.auth.oauth : provider.auth.apiKey?.login ? provider.auth.apiKey : undefined;
130
+ }
131
+ /** The providers a sign-in can target: pi's built-ins plus `extra`, composed exactly as {@link modelsOver} does. */
132
+ export function loginProviders(extra) {
133
+ return modelsOver(new InMemoryCredentialStore(), extra).getProviders();
134
+ }
135
+ /** Probe every provider's auth once (auth is provider-scoped, so any of its models works as the probe). */
136
+ export async function providerAuthStatuses(models) {
137
+ const statuses = new Map();
138
+ for (const provider of models.getProviders()) {
139
+ const [probe] = provider.getModels();
140
+ if (!probe)
141
+ continue;
142
+ const login = interactiveLoginKind(provider);
143
+ try {
144
+ const auth = await models.getAuth(probe);
145
+ statuses.set(provider.id, auth ? { state: "ready", source: auth.source } : { state: "unconfigured", login });
146
+ }
147
+ catch (error) {
148
+ statuses.set(provider.id, { state: "broken", message: error.message, login });
149
+ }
150
+ }
151
+ return statuses;
152
+ }
153
+ /** The source of a provider that authenticates without naming one: a definition's provider resolving its own key. */
154
+ export const UNNAMED_AUTH_SOURCE = "the provider's own auth";
155
+ /**
156
+ * Which source currently satisfies auth for `spec`, or undefined when none does (or the spec is not in `models`).
157
+ * Rejects when resolving fails — a corrupt entry, a refresh the provider refused — which is a different answer from
158
+ * "nothing configured" and must reach whoever reports it.
159
+ */
160
+ export async function probeAuthSource(models, spec) {
161
+ const slash = spec.indexOf("/");
162
+ if (slash < 1)
163
+ return undefined;
164
+ const model = models.getModel(spec.slice(0, slash), spec.slice(slash + 1));
165
+ if (!model)
166
+ return undefined;
167
+ // A virtual selection authenticates the physical model after routing, not its catalog entry.
168
+ if (model.api === "pi-virtual")
169
+ return "virtual";
170
+ const auth = await models.getAuth(model);
171
+ return auth === undefined ? undefined : (auth.source ?? UNNAMED_AUTH_SOURCE);
172
+ }
173
+ /** Quick-fail probe for a just-stored API key. */
174
+ export async function probeApiKey(models, model, signal) {
175
+ let status;
176
+ let reply;
177
+ try {
178
+ reply = await models.complete(model, { messages: [{ role: "user", content: "ping", timestamp: Date.now() }] }, {
179
+ maxTokens: 16,
180
+ timeoutMs: 15_000,
181
+ maxRetries: 0,
182
+ ...(signal ? { signal } : {}),
183
+ onResponse: (r) => {
184
+ status = r.status;
185
+ },
186
+ });
187
+ }
188
+ catch (error) {
189
+ // Thrown = before/around the request (auth resolution, transport setup) — not a provider verdict.
190
+ return { state: "unknown", message: error.message };
191
+ }
192
+ if (reply.stopReason !== "error" && reply.stopReason !== "aborted")
193
+ return { state: "ok" };
194
+ const message = reply.errorMessage ?? `stopReason "${reply.stopReason}"`;
195
+ const unauthorized = status === 401 || (status === undefined && /(^|\D)401(\D|$)/.test(message));
196
+ return { state: unauthorized ? "rejected" : "unknown", message };
197
+ }
@@ -0,0 +1,42 @@
1
+ import type { Models, ModelThinkingLevel } from "@earendil-works/pi-ai";
2
+ import { type Conversation, Harness, type HarnessOptions, type HarnessSettings, type ModelRef, type RegistryReader, type Storage } from "@earendil-works/pi-durable";
3
+ import { type Agent } from "../../agent-api.ts";
4
+ /** What a Caller may offer as `/<name>`: a prompt template or a skill, expanded for the model (SPEC.md §5.1). */
5
+ export interface AgentCommand {
6
+ name: string;
7
+ description?: string;
8
+ expand(args: string): string;
9
+ }
10
+ export interface DurableAgentOptions {
11
+ storage: Storage;
12
+ models: Models;
13
+ registry: RegistryReader;
14
+ settings?: HarnessSettings;
15
+ env?: HarnessOptions["env"];
16
+ name: string;
17
+ description?: string;
18
+ /** Read for every `info()` and send, so a command the definition gains is offered without a restart. */
19
+ commands?: () => readonly AgentCommand[];
20
+ /** What a conversation answers with when its own settings name none (defaults.ts). */
21
+ model?: ModelRef;
22
+ thinkingLevel?: ModelThinkingLevel;
23
+ inFlightPerProcess?: number;
24
+ /** What becomes of the messages an earlier process accepted and did not end ({@link Unfinished}). */
25
+ unfinished?: Unfinished;
26
+ }
27
+ /**
28
+ * What a process does with the messages an earlier one accepted and did not end (it was stopped, or killed). `"resume"`
29
+ * (the default, a serve's): they run on in this one, as its own work. `"abort"`: they end aborted before anything runs,
30
+ * for a Caller whose messages do not outlive it (`fastagent invoke`), where running one again would run what its user
31
+ * stopped. `"refuse"`: the open fails naming them, for a process that runs one thing and would cut the rest off
32
+ * (`fastagent schedules run`).
33
+ */
34
+ export type Unfinished = "resume" | "abort" | "refuse";
35
+ export interface DurableAgent extends Agent {
36
+ /** pi-durable's own API, for operating the agent. */
37
+ readonly harness: Harness;
38
+ /** The conversation a session id names, to operate it through `harness`. */
39
+ conversation(sessionId: string): Promise<Conversation | undefined>;
40
+ close(): Promise<void>;
41
+ }
42
+ export declare function openDurableAgent(options: DurableAgentOptions): Promise<DurableAgent>;