@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
@@ -1,45 +1,47 @@
1
- /** `fastagent init [dir]`: scaffold a runnable agent and install its dependencies. */
1
+ /** `fastagent init <dir> [--content <dir>]...`: scaffold a runnable agent and install its dependencies. */
2
2
  import { spawn } from "node:child_process";
3
- import { basename, resolve } from "node:path";
4
- import { DEFAULT_AGENT_DIRNAME, agentsAt, displayPath } from "../../paths.js";
5
- import { agentDirName, agentDirNameError, scaffoldAgent } from "../../scaffold/init.js";
6
- import { failStartup, failUsage } from "../fail.js";
3
+ import { resolve } from "node:path";
4
+ import { displayPath } from "../../paths.js";
5
+ import { createAgent } from "../../authoring.js";
6
+ import { readContentSource } from "../../content/source.js";
7
+ import { failEdit } from "./content.js";
8
+ import { contentLines } from "../content-view.js";
9
+ import { failStartup } from "../fail.js";
7
10
  export async function runInit(dirArg, opts) {
8
11
  const dir = resolve(dirArg);
9
- // A rejected flag VALUE is the usage class, same as one the parser rejects.
10
- const requested = agentDirName(opts.agentDir);
11
- const invalid = agentDirNameError(requested);
12
- if (invalid)
13
- failUsage(`--agent-dir "${requested}" ${invalid}`);
14
- const { agentDir: rel, created } = await scaffoldAgent(dir, { agentDir: requested }).catch(failStartup);
15
- // The agent dir is where the manifest lives, so the install runs there — never against a surrounding workspace's
16
- // package.json (its deps are its own concern).
17
- const agentDir = resolve(dir, rel);
18
- console.error(`[fastagent] initialized ${dir} — agent in ./${rel}/`);
19
- console.error(` created: ${created.join(", ")}`);
20
- // A second agent beside an existing one is a supported shape, not an accident (an engineer's, a PM's and a content
21
- // owner's agent can drive one repository), but it changes how this workspace resolves from now on — so say it HERE,
22
- // at the moment it becomes true, instead of at the next command's refusal.
23
- const siblings = agentsAt(dir).map((a) => basename(a));
24
- if (siblings.length > 1) {
25
- const pick = siblings.includes(DEFAULT_AGENT_DIRNAME)
26
- ? `\`${DEFAULT_AGENT_DIRNAME}\` answers by default; set FASTAGENT_AGENT=<name> for another`
27
- : `set FASTAGENT_AGENT=<name> (in your shell or .envrc) to pick one`;
28
- console.error(`[fastagent] note: ${dir} now holds ${siblings.length} agents (${siblings.join(", ")}) — ${pick}`);
29
- }
12
+ // Every source is read, and every entry checked (by createAgent), BEFORE anything is created.
13
+ const read = await Promise.resolve()
14
+ .then(() => opts.content.map((source) => readContentSource(source, process.cwd())))
15
+ .catch(failStartup);
30
16
  let installFailed = false;
31
- if (opts.install) {
32
- console.error(`[fastagent] installing dependencies (npm install in ${rel})…`);
33
- installFailed = (await npmInstall(agentDir)) !== 0;
34
- if (installFailed)
35
- console.error(`[fastagent] warn: npm install failed — run it manually in ${agentDir} before \`fastagent dev\``);
36
- }
17
+ const { created, content, repository } = await createAgent(dir, {
18
+ content: read.map((source) => source.addition),
19
+ ...(opts.install
20
+ ? {
21
+ install: async (agentDir) => {
22
+ console.error(`[fastagent] installing dependencies (npm install)…`);
23
+ installFailed = (await npmInstall(agentDir)) !== 0;
24
+ if (installFailed) {
25
+ console.error(`[fastagent] warn: npm install failed — run it manually in ${agentDir} before \`fastagent dev\``);
26
+ }
27
+ },
28
+ }
29
+ : {}),
30
+ }).catch(failEdit(""));
31
+ console.error(`[fastagent] created ${dir}`);
32
+ for (const note of read.flatMap((source) => source.notes))
33
+ console.error(` ${note}`);
34
+ if (content.length > 0)
35
+ for (const [label, value] of contentLines(content))
36
+ console.error(` ${label} ${value}`);
37
+ console.error(` files: ${created.join(", ")}`);
38
+ console.error(`[fastagent] git: ${repository}`);
37
39
  console.error(` next steps:`);
38
40
  const cdTarget = displayPath(process.cwd(), dir);
39
41
  if (cdTarget)
40
42
  console.error(` cd ${cdTarget}`);
41
43
  if (!opts.install || installFailed)
42
- console.error(` (cd ${rel} && npm install)`);
44
+ console.error(` npm install`);
43
45
  console.error(` fastagent dev # serve locally and iterate`);
44
46
  console.error(` fastagent add skill <owner/repo/path> # vendor more skills from GitHub`);
45
47
  }
@@ -2,5 +2,11 @@ export interface InvokeOptions {
2
2
  model?: string;
3
3
  /** false ⇔ `--no-input`. */
4
4
  input?: boolean;
5
+ json?: boolean;
6
+ session?: string;
7
+ /** A served agent's base URL: the message goes there, over its Agent API. */
8
+ url?: string;
9
+ /** The key `url` is called with; else the first in the agent's production values. */
10
+ key?: string;
5
11
  }
6
12
  export declare function runInvoke(message: string, dirArg: string, opts: InvokeOptions): Promise<void>;
@@ -1,21 +1,136 @@
1
- /** `fastagent invoke <message> [dir]`: run ONE turn against the assembled agent, then exit. */
2
- import { randomUUID } from "node:crypto";
3
- import { createPiAgentFromDir } from "../../engines/pi/open.js";
4
- import { runInvokeStream } from "../invoke-stream.js";
5
- import { failStartup } from "../fail.js";
1
+ /**
2
+ * `fastagent invoke <message> [agent]`: send ONE message to the opened agent, print its answer, then exit. Every run
3
+ * prints its session's id; `--session <id>` sends the message into that session, continuing it. `--url` sends it to a
4
+ * served agent instead, over its Agent API (SPEC.md §9.6), with the same output and exit code.
5
+ */
6
+ import { join, relative, resolve } from "node:path";
7
+ import { AgentError } from "../../agent-api.js";
8
+ import { dotEnvPath, enterAgentEnv, loadEnvValues } from "../../env.js";
9
+ import { installProxyFetch } from "../../proxy.js";
10
+ import { modelRefOf } from "../../harnesses/pi-durable/open.js";
11
+ import { openServing } from "../../harnesses/pi-durable/serve.js";
12
+ import { connectAgent } from "../../http/client.js";
13
+ import { API_KEY_VARIABLE, apiKeysFrom } from "../../http/server.js";
14
+ import { resolveStateRoot, selectAgentEnvironment } from "../../paths.js";
15
+ import { runInvokeJson, runInvokeStream } from "../invoke-stream.js";
16
+ import { failStartup, failUsage, optionalAgentDirOrExit } from "../fail.js";
6
17
  import { enterAgentCommand, reportAuth } from "../shared.js";
18
+ /**
19
+ * `invoke`'s sessions, apart from the instance's storage, so `invoke` runs beside a serve of this directory, which holds
20
+ * that one; one `invoke` at a time holds this one.
21
+ */
22
+ const invokeStorageFile = (stateRoot) => join(stateRoot, "invoke.sqlite");
23
+ /**
24
+ * The session to send into, a new one or `sessionId`, set to the model this run resolved: every run answers with the
25
+ * model its flags and configuration name, a continued session included.
26
+ */
27
+ async function sessionFor(agent, sessionId, settings, file) {
28
+ if (sessionId === undefined)
29
+ return (await agent.sessions.create(settings)).id;
30
+ await agent.sessions.update(sessionId, settings).catch((error) => {
31
+ if (error instanceof AgentError && error.code === "not_found") {
32
+ throw new Error(`--session ${sessionId}: no such session in ${file}; pass an id an earlier invoke printed`);
33
+ }
34
+ throw error;
35
+ });
36
+ return sessionId;
37
+ }
38
+ /** A refusal as the line an operator reads: its code, then what it says. */
39
+ const refusal = (error) => error instanceof AgentError ? new Error(`${error.code}: ${error.message}`) : error;
40
+ /** Print the message's answer as it is written, then exit with what it ended as: 0 only for `completed`. */
41
+ async function answer(events, json) {
42
+ // Both renderers exit 1 unless the message completed: CI gates on it.
43
+ const exitCode = json
44
+ ? await runInvokeJson(events, (line) => process.stdout.write(`${line}\n`))
45
+ : await runInvokeStream(events, (text) => process.stdout.write(text), (line) => console.error(line));
46
+ if (!json)
47
+ process.stdout.write("\n");
48
+ return exitCode;
49
+ }
50
+ /**
51
+ * The key `--url` calls with: `--key`, or the first of `FASTAGENT_API_KEY` in the agent's production values, which
52
+ * `deploy` writes there and carries to the deployment.
53
+ */
54
+ function deploymentKey(agentDir, url) {
55
+ selectAgentEnvironment("production");
56
+ const file = dotEnvPath(agentDir);
57
+ const [key] = apiKeysFrom(loadEnvValues(file).get(API_KEY_VARIABLE));
58
+ if (key === undefined) {
59
+ failUsage(`no key to call ${url} with: pass --key, or set ${API_KEY_VARIABLE} in ${relative(process.cwd(), file) || file} ` +
60
+ "(deploy writes one there)");
61
+ }
62
+ return key;
63
+ }
64
+ /**
65
+ * Enter this machine's environment and the proxy it declares, as every command that sends a request does, and answer
66
+ * the key to call `url` with: `--key`, from anywhere (the ambient environment when no agent is here), or the agent's.
67
+ */
68
+ function enterForUrl(dirArg, key, url) {
69
+ const agentDir = optionalAgentDirOrExit(resolve(dirArg));
70
+ if (agentDir === undefined) {
71
+ installProxyFetch();
72
+ if (key === undefined) {
73
+ failUsage(`no key to call ${url} with: pass --key, or run this in the agent whose deploy wrote one`);
74
+ }
75
+ return key;
76
+ }
77
+ enterAgentEnv(agentDir);
78
+ return key ?? deploymentKey(agentDir, url);
79
+ }
80
+ /** `--url`: the message sent to a served agent over its Agent API, in a session there; nothing opens here. */
81
+ async function runRemoteInvoke(message, dirArg, opts) {
82
+ const { url } = opts;
83
+ let settings;
84
+ try {
85
+ settings = opts.model === undefined ? undefined : { model: modelRefOf(opts.model, "--model") };
86
+ }
87
+ catch (error) {
88
+ failUsage(error instanceof Error ? error.message : String(error));
89
+ }
90
+ const agent = connectAgent(url, { apiKey: enterForUrl(dirArg, opts.key, url) });
91
+ console.error(`[fastagent] invoke: ${url}`);
92
+ const sessionId = await remoteSession(agent, opts.session, settings, url).catch((error) => failStartup(refusal(error)));
93
+ console.error(`[fastagent] session ${sessionId} (continue it with --session ${sessionId})`);
94
+ process.exit(await answer(agent.messages.stream({ sessionId, content: message }), opts.json));
95
+ }
96
+ /** The served agent's session to send into: a new one, or `sessionId`, set to `--model` when one is given. */
97
+ async function remoteSession(agent, sessionId, settings, url) {
98
+ if (sessionId === undefined)
99
+ return (await agent.sessions.create(settings)).id;
100
+ const found = settings === undefined ? agent.sessions.get(sessionId) : agent.sessions.update(sessionId, settings);
101
+ await found.catch((error) => {
102
+ if (error instanceof AgentError && error.code === "not_found") {
103
+ throw new Error(`--session ${sessionId}: no such session at ${url}; pass an id an earlier invoke printed`);
104
+ }
105
+ throw error;
106
+ });
107
+ return sessionId;
108
+ }
7
109
  export async function runInvoke(message, dirArg, opts) {
8
- const placement = await enterAgentCommand(dirArg, opts);
9
- const { modelSpec } = placement;
10
- const { agent, models } = await createPiAgentFromDir(placement.agentDir, { model: modelSpec }).catch(failStartup);
11
- // BOTH directories, like dev/start: which agent ran, and what it worked on.
12
- console.error(`[fastagent] invoke: ${placement.agentDir} (workspace ${placement.workspace}, ${modelSpec})`);
13
- await reportAuth(models, modelSpec);
14
- // Fresh session per invoke (one-shot, no resume). runInvokeStream maps events→IO: reply→stdout,
15
- // tool/failure→stderr, exit 1 iff the turn failed (so CI can gate on it).
16
- const exitCode = await runInvokeStream(agent.invoke({ session: randomUUID() }, { text: message }), (text) => process.stdout.write(text), (line) => console.error(line));
17
- process.stdout.write("\n");
110
+ if (opts.url !== undefined)
111
+ return runRemoteInvoke(message, dirArg, { ...opts, url: opts.url });
112
+ if (opts.key !== undefined)
113
+ failUsage("--key is the key --url calls with: pass --url too");
114
+ const { agentDir, modelSpec } = await enterAgentCommand(dirArg, opts);
115
+ const file = invokeStorageFile(resolveStateRoot(agentDir));
116
+ const { agent, models, definition } = await openServing(agentDir, {
117
+ model: modelSpec,
118
+ storage: { file, holders: "another `fastagent invoke` of this agent" },
119
+ // Its messages do not outlive it: one a stopped invoke left is not run again by the next.
120
+ unfinished: "abort",
121
+ }).catch(failStartup);
122
+ console.error(`[fastagent] invoke: ${agentDir} (${modelSpec})`);
123
+ await reportAuth(models, modelSpec, agentDir);
124
+ const { thinkingLevel } = definition.config;
125
+ const settings = {
126
+ model: modelRefOf(modelSpec, "the model"),
127
+ ...(thinkingLevel === undefined ? {} : { thinkingLevel }),
128
+ };
129
+ const sessionId = await sessionFor(agent, opts.session, settings, file).catch(failStartup);
130
+ console.error(`[fastagent] session ${sessionId} (continue it with --session ${sessionId})`);
131
+ const exitCode = await answer(agent.messages.stream({ sessionId, content: message }), opts.json);
132
+ await agent.close();
18
133
  // Always exit explicitly: the undici proxy agent's keep-alive sockets would otherwise hold the event loop open
19
- // after a successful one-shot turn.
134
+ // after a successful one-shot message.
20
135
  process.exit(exitCode);
21
136
  }
@@ -1,13 +1,42 @@
1
+ /**
2
+ * `fastagent login [provider]`: sign in to a model provider, into the project-level auth file
3
+ * (`<agentDir>/.secrets/auth.json`) by default, or `FASTAGENT_AUTH_PATH`. In a terminal it asks, as pi's `/login`
4
+ * does; otherwise (a script, a coding agent: no terminal, `--no-input` or `--json`) nothing is asked and nothing
5
+ * waits: what it needs is named, and a person's step is handed back with a ticket to check (ticket.ts).
6
+ * `--deployment` runs the same login on this agent's deployed box instead (box-login.ts); `--stdio` is the box's half.
7
+ */
8
+ import type { AuthInteraction } from "@earendil-works/pi-ai";
9
+ import { type TicketStep } from "../ticket.ts";
1
10
  export interface LoginOptions {
2
11
  /** `-g`: store in the user-global file, which an agent reads for a provider it has no other credential for. */
3
12
  global?: boolean;
4
13
  /** false ⇔ `--no-input`. */
5
14
  input?: boolean;
6
- /** `--deployment [host]`: log in this workspace's deployment (`true` when no host was named). */
7
- deployment?: string | boolean;
15
+ /** `--method account|api-key`: how to sign in, for a provider that offers both. */
16
+ method?: string;
17
+ /** `--json`: the outcome as one JSON object on stdout. */
18
+ json?: boolean;
19
+ /** `--timeout <seconds>`: how long the sign-in stays open. */
20
+ timeout?: string;
21
+ /** `--check <ticket>`: where a sign-in started without a terminal stands. */
22
+ check?: string;
23
+ /** `--code <address>` (with `--check`): the address the person's browser ended on, or the code it showed. */
24
+ code?: string;
25
+ /** `--ticket <id>`: the process that runs a ticket's sign-in. */
26
+ ticket?: string;
27
+ /** `--deployment <host>`: log in this agent's deployment on that host. */
28
+ deployment?: string;
8
29
  /** `--stdio`: the box's half of `--deployment` — the flow speaks the relay wire on stdin/stdout. */
9
30
  stdio?: boolean;
10
31
  /** `--if-missing` (with `--stdio`): keep a credential already stored for the provider. */
11
32
  ifMissing?: boolean;
12
33
  }
13
34
  export declare function runLogin(provider: string | undefined, opts: LoginOptions): Promise<void>;
35
+ /**
36
+ * pi-ai's account sign-in, run by a ticket's process with no one to answer it. A choice takes its first option, pi's
37
+ * default (the browser sign-in); a text question is left blank, the one pi-ai's account sign-ins ask being Copilot's
38
+ * optional Enterprise domain (a required one fails in the provider's own flow, which the ticket reports); a secret it
39
+ * cannot take; the code or address a browser ends on comes from `login --check --code`, unless the provider's callback
40
+ * brings it first. Not public: a test seam.
41
+ */
42
+ export declare function signInInteraction(step: TicketStep, provider: string): AuthInteraction;