@fastagent-sh/fastagent 0.24.3 → 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 -517
  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 -83
  455. package/dist/engines/pi/turn-kit.js +0 -275
  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
@@ -1,3 +1,12 @@
1
- /** Render an Agent event stream to two sinks plus an exit code. */
2
- import type { AgentEvent } from "../agent.ts";
3
- export declare function runInvokeStream(events: AsyncIterable<AgentEvent>, out: (text: string) => void, err: (line: string) => void): Promise<number>;
1
+ /** Render one message's answer, as `messages.stream` delivers it, plus an exit code: 0 only for `completed`. */
2
+ import { type Message, type MessageStreamEvent } from "../agent-api.ts";
3
+ /** A command that sends a message exits 0 only when it completed. */
4
+ export declare const exitCodeOf: (message: Pick<Message, "status">) => number;
5
+ /** The answer as text on `out`, what the tools did and why it failed on `err`. */
6
+ export declare function runInvokeStream(events: AsyncIterable<MessageStreamEvent>, out: (text: string) => void, err: (line: string) => void): Promise<number>;
7
+ /**
8
+ * The answer as JSON lines, for a program to read: the message's events as `messages.stream` delivers them, its
9
+ * `message` first, through its `done`. A message that ends no other way ends with the line that says why: `rejected`
10
+ * when the agent refused it, a `stream_error` event, or `unfinished` when the events end first.
11
+ */
12
+ export declare function runInvokeJson(events: AsyncIterable<MessageStreamEvent>, line: (json: string) => void): Promise<number>;
@@ -1,35 +1,97 @@
1
+ /** Render one message's answer, as `messages.stream` delivers it, plus an exit code: 0 only for `completed`. */
2
+ import { AgentError, errorData } from "../agent-api.js";
3
+ import { answerText } from "../answer-text.js";
4
+ /** A command that sends a message exits 0 only when it completed. */
5
+ export const exitCodeOf = (message) => (message.status === "completed" ? 0 : 1);
6
+ function failure(message) {
7
+ const { status, error } = message;
8
+ if (status === "completed")
9
+ return undefined;
10
+ if (error === undefined)
11
+ return status;
12
+ return `${error.code}: ${error.message}${error.retryable ? " (retryable)" : ""}`;
13
+ }
14
+ /**
15
+ * Read `events` to their end with `read`, which answers an exit code once the message has ended; a send the agent
16
+ * refused rejects the first read, and is said by `refused`.
17
+ */
18
+ async function readMessage(events, read, refused) {
19
+ try {
20
+ for await (const event of events) {
21
+ const exit = read(event);
22
+ if (exit !== undefined)
23
+ return exit;
24
+ }
25
+ }
26
+ catch (error) {
27
+ if (!(error instanceof AgentError))
28
+ throw error;
29
+ refused(error);
30
+ return 1;
31
+ }
32
+ return undefined;
33
+ }
34
+ /** The answer as text on `out`, what the tools did and why it failed on `err`. */
1
35
  export async function runInvokeStream(events, out, err) {
2
- const toolName = new Map(); // tool_ended carries no name — remember it from tool_started
3
- let exitCode = 0;
4
- for await (const event of events) {
36
+ const toolName = new Map(); // a tool result carries the id; its name came with tool_started
37
+ const textOf = answerText();
38
+ const exit = await readMessage(events, (event) => {
39
+ const text = event.type === "delta" || event.type === "entry" ? textOf(event) : "";
40
+ if (text !== "")
41
+ out(text);
5
42
  switch (event.type) {
6
- case "text":
7
- out(event.delta);
8
- break;
9
43
  case "tool_started":
10
- toolName.set(event.id, event.name);
44
+ toolName.set(event.toolCallId, event.name);
11
45
  err(`[tool] ${event.name}`);
12
- break;
46
+ return undefined;
13
47
  case "tool_progress":
14
- err(`[tool] ${toolName.get(event.id) ?? event.id} › ${clipStatus(event.text)}`);
15
- break;
16
- case "tool_ended":
17
- if (event.isError)
18
- err(`[tool] ${toolName.get(event.id) ?? event.id} failed`);
19
- break;
48
+ err(`[tool] ${toolName.get(event.toolCallId) ?? event.toolCallId} › ${clipStatus(event.text)}`);
49
+ return undefined;
20
50
  case "retrying":
21
51
  // Operator-facing: include the reason (channels show a neutral customer line instead).
22
52
  err(`[fastagent] transient failure — retrying (${event.attempt}/${event.maxAttempts} in ${event.delayMs}ms): ${event.reason}`);
23
- break;
24
- case "failed":
25
- err(`[fastagent] failed: ${event.details}${event.retryable ? " (retryable)" : ""}`);
26
- exitCode = 1;
27
- break;
28
- case "completed":
29
- break; // terminal success — nothing to render (structured data, if any, is not a CLI concern)
53
+ return undefined;
54
+ case "stream_error":
55
+ err(`[fastagent] ${event.error.message}`);
56
+ return 1;
57
+ case "entry": {
58
+ const data = event.entry.data;
59
+ if (event.entry.kind === "tool_result" && data.isError) {
60
+ err(`[tool] ${toolName.get(data.toolCallId ?? "") ?? data.toolCallId} failed`);
61
+ }
62
+ return undefined;
63
+ }
64
+ case "done": {
65
+ const failed = failure(event.message);
66
+ if (failed !== undefined)
67
+ err(`[fastagent] failed: ${failed}`);
68
+ return exitCodeOf(event.message);
69
+ }
70
+ default:
71
+ return undefined;
30
72
  }
31
- }
32
- return exitCode;
73
+ }, (error) => err(`[fastagent] rejected: ${error.code}: ${error.message}`));
74
+ if (exit !== undefined)
75
+ return exit;
76
+ err("[fastagent] the stream ended before the message did");
77
+ return 1;
78
+ }
79
+ /**
80
+ * The answer as JSON lines, for a program to read: the message's events as `messages.stream` delivers them, its
81
+ * `message` first, through its `done`. A message that ends no other way ends with the line that says why: `rejected`
82
+ * when the agent refused it, a `stream_error` event, or `unfinished` when the events end first.
83
+ */
84
+ export async function runInvokeJson(events, line) {
85
+ const exit = await readMessage(events, (event) => {
86
+ line(JSON.stringify(event));
87
+ if (event.type === "stream_error")
88
+ return 1;
89
+ return event.type === "done" ? exitCodeOf(event.message) : undefined;
90
+ }, (error) => line(JSON.stringify({ type: "rejected", error: errorData(error) })));
91
+ if (exit !== undefined)
92
+ return exit;
93
+ line(JSON.stringify({ type: "unfinished", reason: "the stream ended before the message did" }));
94
+ return 1;
33
95
  }
34
96
  /** How much of a status line a terminal gets, in code points. */
35
97
  const STATUS_MAX = 120;
@@ -1,12 +1,17 @@
1
1
  /** CLI kernel — commands as data. */
2
2
  import { Command } from "commander";
3
- /** One positional argument, in commander syntax: `<name>` required, `[dir]` optional. */
3
+ /**
4
+ * One positional argument, in commander syntax: `<name>` required, `[dir]` optional, `<names...>` one or more (the
5
+ * command receives them as an array).
6
+ */
4
7
  interface ArgSpec {
5
8
  name: string;
6
9
  description: string;
7
10
  default?: string;
8
11
  /** Closed value set — the parser rejects anything else as a usage error (exit 2). */
9
12
  choices?: string[];
13
+ /** Passed on as given, an empty value included: another program's arguments (`env exec`). */
14
+ verbatim?: boolean;
10
15
  }
11
16
  /** One flag, in the flag DSL: `--json`, or `--bind <addr>` for a value-taking flag. */
12
17
  export interface FlagSpec {
@@ -14,6 +19,8 @@ export interface FlagSpec {
14
19
  description: string;
15
20
  /** Parsed but left out of help: an internal seam between two fastagent processes, not a user-facing flag. */
16
21
  hidden?: boolean;
22
+ /** May be given more than once; the command receives every value, in order, as an array. */
23
+ repeatable?: boolean;
17
24
  }
18
25
  interface ExampleSpec {
19
26
  cmd: string;
@@ -37,7 +44,7 @@ export interface CommandSpec {
37
44
  * The implementation: positional args in declaration order (an optional arg without a default is `undefined`), then
38
45
  * the parsed flags.
39
46
  */
40
- run?: (args: (string | undefined)[], flags: Record<string, unknown>) => Promise<void> | void;
47
+ run?: (args: (string | string[] | undefined)[], flags: Record<string, unknown>) => Promise<void> | void;
41
48
  }
42
49
  export interface ProgramOptions {
43
50
  /** Printed by `-v`/`--version`. */
@@ -9,7 +9,7 @@ const specOf = new WeakMap();
9
9
  export function buildProgram(specs, options = {}) {
10
10
  const exit = options.exit ?? ((code) => process.exit(code));
11
11
  const program = new Command("fastagent");
12
- program.description("Serve a file-defined agent — SYSTEM.md, skills/, tools/, channels/ — as a live service.");
12
+ program.description("Serve a file-defined agent — SYSTEM.md, skills/, src/ — as a live service.");
13
13
  // The exit-code policy: commander throws only for parse-level events — help/version displays carry exitCode 0 (→
14
14
  // 0), everything else it rejects is a usage error (→ 2).
15
15
  program.exitOverride((err) => exit(err.exitCode === 0 ? 0 : 2));
@@ -52,17 +52,26 @@ function register(parent, spec) {
52
52
  if (a.choices)
53
53
  arg.choices(a.choices);
54
54
  // A required argument means a non-empty VALUE, not just a present token.
55
- if (a.name.startsWith("<") && !a.choices) {
56
- arg.argParser((value) => {
55
+ if (a.name.startsWith("<") && !a.choices && !a.verbatim) {
56
+ const nonEmpty = (value) => {
57
57
  if (value.trim() === "")
58
58
  throw new InvalidArgumentError("must not be empty.");
59
59
  return value;
60
- });
60
+ };
61
+ // A parser of a variadic argument replaces commander's own collecting, so it collects too.
62
+ if (a.name.endsWith("...>"))
63
+ arg.argParser((value, previous = []) => [...previous, nonEmpty(value)]);
64
+ else
65
+ arg.argParser(nonEmpty);
61
66
  }
62
67
  cmd.addArgument(arg);
63
68
  }
64
- for (const f of spec.flags ?? [])
65
- cmd.addOption(new Option(f.flags, f.description).hideHelp(f.hidden === true));
69
+ for (const f of spec.flags ?? []) {
70
+ const option = new Option(f.flags, f.description).hideHelp(f.hidden === true);
71
+ if (f.repeatable)
72
+ option.argParser((value, previous = []) => [...previous, value]);
73
+ cmd.addOption(option);
74
+ }
66
75
  for (const sub of spec.subcommands ?? [])
67
76
  register(cmd, sub);
68
77
  const run = spec.run;
@@ -1,5 +1,5 @@
1
1
  import type { Readable, Writable } from "node:stream";
2
- import type { LoginIO, LoginMethod } from "../engines/pi/login.ts";
2
+ import type { LoginIO, LoginMethod } from "../harnesses/models/login.ts";
3
3
  /** How a login on the box ended, as the box reports it. */
4
4
  export type RelayResult =
5
5
  /** Logged in now: `method` is how, `path` where the box saved it. */
@@ -32,7 +32,8 @@ export declare function stdioLoginIO(input: Readable, output: Writable): {
32
32
  };
33
33
  /**
34
34
  * The terminal half: drive `io` from what the box sends on `from`, answering on `to`. Resolves with the box's
35
- * `result` line when `from` ends, or `undefined` when it ended without one. A line that is not the wire (a host
35
+ * `result` line when `from` ends, `undefined` when it ended without one, or a failure of this side's own when the box
36
+ * speaks an older wire than this one (`BOX_CLI_PREDATES`). A line that is not the wire (a host
36
37
  * CLI's banner, a shell's error) goes to `passthrough`, so nothing the box printed is lost.
37
38
  */
38
39
  export declare function relayLogin(from: Readable, to: Writable, io: LoginIO, passthrough: (line: string) => void): Promise<RelayResult | undefined>;
@@ -8,6 +8,7 @@
8
8
  * seen doing so), so an ended stream without that line is a failure, whatever the exit code says.
9
9
  */
10
10
  import { createInterface } from "node:readline";
11
+ import { BOX_CLI_PREDATES } from "../deploy/box-shell.js";
11
12
  const send = (out, message) => void out.write(`${JSON.stringify(message)}\n`);
12
13
  /**
13
14
  * The box half: a {@link LoginIO} over `input`/`output`. Once `input` ends (the session dropped), every pending and
@@ -47,9 +48,9 @@ export function stdioLoginIO(input, output) {
47
48
  return {
48
49
  io: {
49
50
  select: (message, options) => ask((id) => ({ type: "select", id, message, options })),
50
- prompt: (message, opts) => ask((id) => ({ type: "prompt", id, message, hidden: opts?.hidden === true }), opts?.signal),
51
+ prompt: (message, opts) => ask((id) => ({ type: "prompt", id, message, hidden: opts?.hidden === true, redirect: opts?.redirect === true }), opts?.signal),
51
52
  note: (message) => send(output, { type: "note", message }),
52
- openUrl: (url) => send(output, { type: "open", url }),
53
+ openUrl: (url, userCode) => send(output, { type: "open", url, ...(userCode ? { userCode } : {}) }),
53
54
  },
54
55
  result: (result) => {
55
56
  send(output, { type: "result", ...result });
@@ -59,7 +60,8 @@ export function stdioLoginIO(input, output) {
59
60
  }
60
61
  /**
61
62
  * The terminal half: drive `io` from what the box sends on `from`, answering on `to`. Resolves with the box's
62
- * `result` line when `from` ends, or `undefined` when it ended without one. A line that is not the wire (a host
63
+ * `result` line when `from` ends, `undefined` when it ended without one, or a failure of this side's own when the box
64
+ * speaks an older wire than this one (`BOX_CLI_PREDATES`). A line that is not the wire (a host
63
65
  * CLI's banner, a shell's error) goes to `passthrough`, so nothing the box printed is lost.
64
66
  */
65
67
  export function relayLogin(from, to, io, passthrough) {
@@ -68,6 +70,8 @@ export function relayLogin(from, to, io, passthrough) {
68
70
  const answer = (id, value) => send(to, { id, value: value ?? null });
69
71
  const prompts = new Map();
70
72
  let result;
73
+ /** Why this relay stopped the box itself: a box whose wire this CLI cannot read whole. */
74
+ let refused;
71
75
  const lines = createInterface({ input: from });
72
76
  lines.on("line", (line) => {
73
77
  const message = parse(line);
@@ -78,9 +82,17 @@ export function relayLogin(from, to, io, passthrough) {
78
82
  void io.select(message.message, message.options).then((value) => answer(message.id, value));
79
83
  return;
80
84
  case "prompt": {
85
+ if (typeof message.redirect !== "boolean") {
86
+ // An older box: which of its prompts takes the browser's address cannot be told, so none could be answered
87
+ // from the redirect this side catches. Its input ends, so it stops instead of waiting on a paste.
88
+ refused = BOX_CLI_PREDATES;
89
+ to.end();
90
+ return;
91
+ }
81
92
  const controller = new AbortController();
82
93
  prompts.set(message.id, controller);
83
- void io.prompt(message.message, { hidden: message.hidden, signal: controller.signal }).then((value) => {
94
+ const asked = { hidden: message.hidden, redirect: message.redirect, signal: controller.signal };
95
+ void io.prompt(message.message, asked).then((value) => {
84
96
  prompts.delete(message.id);
85
97
  if (!controller.signal.aborted)
86
98
  answer(message.id, value);
@@ -93,7 +105,7 @@ export function relayLogin(from, to, io, passthrough) {
93
105
  case "note":
94
106
  return io.note(message.message);
95
107
  case "open":
96
- return io.openUrl(message.url);
108
+ return io.openUrl(message.url, message.userCode);
97
109
  case "result": {
98
110
  const { type: _, ...rest } = message;
99
111
  result = rest;
@@ -104,7 +116,7 @@ export function relayLogin(from, to, io, passthrough) {
104
116
  return new Promise((resolve) => lines.on("close", () => {
105
117
  for (const controller of prompts.values())
106
118
  controller.abort();
107
- resolve(result);
119
+ resolve(refused === undefined ? result : { ok: false, reason: "failed", message: refused });
108
120
  }));
109
121
  }
110
122
  const WIRE_TYPES = new Set(["select", "prompt", "abort", "note", "open", "result"]);
@@ -1,4 +1,8 @@
1
- import type { ProviderAuthStatus } from "../engines/pi/models.ts";
1
+ /**
2
+ * CLI presenter for the model-facing commands: `fastagent models [search]` output and the first-run picker's option
3
+ * list.
4
+ */
5
+ import { type ProviderAuthStatus } from "../harnesses/models/models.ts";
2
6
  /** One first-run picker entry (@clack/prompts option shape). */
3
7
  export interface ModelPickerOption {
4
8
  value: string;
@@ -2,7 +2,7 @@
2
2
  * CLI presenter for the model-facing commands: `fastagent models [search]` output and the first-run picker's option
3
3
  * list.
4
4
  */
5
- import { providerOf } from "../engines/pi/config.js";
5
+ import { providerOf } from "../harnesses/models/models.js";
6
6
  /** The remedy hint for a non-ready provider, by what picking it actually does. */
7
7
  function remedy(login) {
8
8
  if (login === "oauth")
@@ -0,0 +1,10 @@
1
+ export interface Person {
2
+ /** A step this run waits on: `instructions`, at `url`; `until`, when the step itself lapses (ms since the epoch). */
3
+ waitsOn(url: string, instructions: string, until?: number): void;
4
+ /** The step waited on is done: the run carries on without the person. */
5
+ carriesOn(): void;
6
+ /** A step left to the person once this run ends, which nothing here waits for; at `url`, when it has one. */
7
+ afterwards(instructions: string, url?: string): void;
8
+ }
9
+ /** The person at this terminal: told, and the page opened for them. */
10
+ export declare const terminalPerson: Person;
@@ -0,0 +1,23 @@
1
+ /**
2
+ * What an app's setup says to the person setting it up, for the steps only they can take. At a terminal it is printed,
3
+ * and the page opened. In a coding agent's run it goes to the ticket the agent hands its person (ticket.ts): the step
4
+ * the run waits on as `need_user_action`, and a step left to them after it as `afterwards`.
5
+ */
6
+ import { openExternalUrl } from "../open-url.js";
7
+ /** The person at this terminal: told, and the page opened for them. */
8
+ export const terminalPerson = {
9
+ waitsOn(url, instructions, until) {
10
+ const lapses = until === undefined ? "" : `, valid for ${Math.round((until - Date.now()) / 60_000)} minutes`;
11
+ console.error(`[fastagent] ${instructions} — opening ${url} (waiting${lapses}; keep this running)`);
12
+ openExternalUrl(url);
13
+ },
14
+ carriesOn() { },
15
+ afterwards(instructions, url) {
16
+ if (url === undefined) {
17
+ console.error(`[fastagent] ${instructions}`);
18
+ return;
19
+ }
20
+ console.error(`[fastagent] ${instructions} — opening ${url}`);
21
+ openExternalUrl(url);
22
+ },
23
+ };