@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,5 +1,5 @@
1
1
  import { awsCli, awsJson, parseLogGroupNames } from "./aws-cli.js";
2
- import { agentcoreRepoName, agentcoreStackName, deploymentBucketName, forwarderLogGroup, runtimeLogGroupPrefix, toRuntimeName, wakeAlarmPrefix, } from "./plan.js";
2
+ import { agentcoreRepoName, agentcoreStackName, deploymentBucketName, forwarderLogGroup, runtimeLogGroupPrefix, recurringSchedulePrefix, toRuntimeName, wakeAlarmPrefix, } from "./plan.js";
3
3
  /** S3 deletes at most 1000 keys per call. */
4
4
  const DELETE_BATCH = 1000;
5
5
  /**
@@ -59,18 +59,33 @@ export async function destroyAgentcoreDeployment(plan, runner, announce = () =>
59
59
  // the wrong profile has to be able to see that from the line above the failure.
60
60
  announce(`account ${account}, region ${region}`);
61
61
  // ---- What is out there. Each read gets its own policy for "AWS could not answer". ----
62
- // The alarm ids are minted inside the container, so the PREFIX is all we can ask for. Unreadable is a gate
63
- // here: an alarm nobody deleted keeps firing at a Lambda that is about to stop existing.
64
- const prefix = wakeAlarmPrefix(plan.name);
65
- const listed = await aws.read(["scheduler", "list-schedules", "--name-prefix", prefix, "--output", "json"], parseScheduleNames);
66
- if ("unreadable" in listed)
67
- return gate(`could not list wake alarms under ${prefix}: ${listed.unreadable}`);
68
- // THE FULL SHAPE, not just the prefix. The forwarder mints every alarm as prefix + sha256(wakeId)[:16]
69
- // (plan.ts / forwarder.js), and a prefix alone is ambiguous between sibling agents: a workspace literally
62
+ // The schedule names are minted inside the container, so the PREFIXES are all we can ask for. Unreadable is a gate
63
+ // here: a schedule nobody deleted keeps firing at a Lambda that is about to stop existing.
64
+ const minted = [
65
+ { what: "wake alarm", prefix: wakeAlarmPrefix(plan.name) },
66
+ { what: "schedule", prefix: recurringSchedulePrefix(plan.name) },
67
+ ];
68
+ // THE FULL SHAPE, not just the prefix. The forwarder mints every name as prefix + sha256(id)[:16]
69
+ // (plan.ts / forwarder.js), and a prefix alone is ambiguous between sibling agents: an agent directory literally
70
70
  // named `<name>-wk-abc` produces `fa-<name>-wk-abc-wk-<hash>`, which starts with THIS deployment's prefix.
71
- // Deleting it would take a live deployment's pending wake-ups, and a wake-up is not re-created.
72
- const isMintedAlarm = (alarm) => alarm.startsWith(prefix) && /^[0-9a-f]{16}$/.test(alarm.slice(prefix.length));
73
- const alarms = ("ok" in listed ? listed.ok : []).filter(isMintedAlarm);
71
+ // Deleting it would take a live deployment's pending wake-ups or schedules.
72
+ const listMinted = async (prefix) => {
73
+ const listed = await aws.read(["scheduler", "list-schedules", "--name-prefix", prefix, "--output", "json"], parseScheduleNames);
74
+ if ("unreadable" in listed)
75
+ return listed;
76
+ const names = "ok" in listed ? listed.ok : [];
77
+ return {
78
+ ok: names.filter((name) => name.startsWith(prefix) && /^[0-9a-f]{16}$/.test(name.slice(prefix.length))),
79
+ };
80
+ };
81
+ const held = [];
82
+ for (const kind of minted) {
83
+ const listed = await listMinted(kind.prefix);
84
+ if ("unreadable" in listed) {
85
+ return gate(`could not list ${kind.what}s under ${kind.prefix}: ${listed.unreadable}`);
86
+ }
87
+ held.push({ ...kind, names: listed.ok });
88
+ }
74
89
  // A GATE for these three, because they decide whether the REPORT is true. `delete-stack` answers 0 for a
75
90
  // stack that does not exist, so "deleted: stack X" for a stack nobody deployed — or "nothing left to delete"
76
91
  // over a runtime that is still billing — is the false signal this repo refuses.
@@ -148,8 +163,10 @@ export async function destroyAgentcoreDeployment(plan, runner, announce = () =>
148
163
  const listedGroups = [...named(forwarderRead).filter((name) => name === forwarderGroup), ...named(runtimeRead)];
149
164
  const logGroups = "unreadable" in forwarderRead ? [forwarderGroup, ...listedGroups] : listedGroups;
150
165
  const found = [];
151
- if (alarms.length > 0)
152
- found.push(`${alarms.length} wake alarm(s) under ${prefix}`);
166
+ for (const kind of held) {
167
+ if (kind.names.length > 0)
168
+ found.push(`${kind.names.length} ${kind.what}(s) under ${kind.prefix}`);
169
+ }
153
170
  if (stackExists)
154
171
  found.push(`stack ${stack}`);
155
172
  if (bucketExists)
@@ -185,13 +202,14 @@ export async function destroyAgentcoreDeployment(plan, runner, announce = () =>
185
202
  return false;
186
203
  };
187
204
  const swept = new Set();
188
- const sweepAlarms = async (names) => {
189
- for (const alarm of names.filter((name) => !swept.has(name))) {
190
- swept.add(alarm);
191
- await attempt(`wake alarm ${alarm}`, ["scheduler", "delete-schedule", "--name", alarm]);
205
+ const sweep = async (what, names) => {
206
+ for (const name of names.filter((name) => !swept.has(name))) {
207
+ swept.add(name);
208
+ await attempt(`${what} ${name}`, ["scheduler", "delete-schedule", "--name", name]);
192
209
  }
193
210
  };
194
- await sweepAlarms(alarms);
211
+ for (const kind of held)
212
+ await sweep(kind.what, kind.names);
195
213
  if (stackExists) {
196
214
  announce(`deleting stack ${stack} (this waits for CloudFormation)…`);
197
215
  const asked = await aws.write(["cloudformation", "delete-stack", "--stack-name", stack]);
@@ -211,15 +229,15 @@ export async function destroyAgentcoreDeployment(plan, runner, announce = () =>
211
229
  `from are untouched, so a retry has what it needs.`, { found, removed, kept });
212
230
  }
213
231
  removed.push(`stack ${stack}`);
214
- // AGAIN, NOW. The container served the whole deletion and holds `scheduler:CreateSchedule`, so a wake-up
215
- // taken in those minutes minted an alarm after the first sweep read the list — an alarm whose target is the
216
- // Lambda we just deleted, retrying into nothing for weeks.
217
- const after = await aws.read(["scheduler", "list-schedules", "--name-prefix", prefix, "--output", "json"], parseScheduleNames);
218
- if ("unreadable" in after) {
219
- failures.push(`re-listing wake alarms under ${prefix}: ${after.unreadable}`);
220
- }
221
- else {
222
- await sweepAlarms(("ok" in after ? after.ok : []).filter(isMintedAlarm));
232
+ // AGAIN, NOW. The container served the whole deletion and could create schedules, so a wake-up taken or a
233
+ // schedule written in those minutes minted one after the first sweep read the list — one whose target is the
234
+ // Lambda we just deleted, retrying into nothing.
235
+ for (const kind of minted) {
236
+ const after = await listMinted(kind.prefix);
237
+ if ("unreadable" in after)
238
+ failures.push(`re-listing ${kind.what}s under ${kind.prefix}: ${after.unreadable}`);
239
+ else
240
+ await sweep(kind.what, after.ok);
223
241
  }
224
242
  }
225
243
  if (bucketExists && foreign.length === 0)
@@ -1,15 +1,16 @@
1
1
  // Generated by `fastagent deploy agentcore` — the deployment's only ingress.
2
2
  // (Inside fastagent this file IS the source; the sentence below applies to the copy it is emitted as,
3
- // the workspace's `lambda/index.js`.)
3
+ // the agent directory's `lambda/index.js`.)
4
4
  // REGENERATED ON EVERY DEPLOY; edits here are overwritten and never deployed. `--run` builds the
5
5
  // Lambda package from fastagent's own copy of this source, so this file is the readable MIRROR of
6
6
  // what runs (and what the manual runbook zips) — not an input you can change.
7
7
  // Webhooks (Function URL) and EventBridge Scheduler fires are forwarded as envelopes to the
8
8
  // AgentCore Runtime over SigV4 InvokeAgentRuntime, all on ONE fixed ingress session (fastagent
9
9
  // channel state is single-writer; one session = at most one microVM). This
10
- // Lambda also OWNS the wake alarms: the container POSTs its pending wake-ups to /__fastagent/
11
- // wake-alarm (shared secret) and each becomes a self-deleting one-shot EventBridge schedule that
12
- // pokes this Lambda — which wakes the container, whose wake pump fires the due entry.
10
+ // Lambda also OWNS the alarms: the container POSTs its schedules and pending wake-ups to
11
+ // /__fastagent/wake-alarm (shared secret). Each schedule becomes a RECURRING EventBridge cron schedule
12
+ // that delivers each instant's fire on EventBridge's own clock; each wake-up becomes a self-deleting
13
+ // one-shot that pokes the container, whose wake pump fires the due entry.
13
14
  // CommonJS on purpose: the deployment package's entry lands as index.js, where ESM import is invalid.
14
15
  "use strict";
15
16
  const crypto = require("node:crypto");
@@ -52,22 +53,24 @@ async function invoke(envelope) {
52
53
  return { status: res.statusCode ?? 200, body };
53
54
  }
54
55
 
55
- // Mirror the container's pending wake-ups into one-shot schedules: at(fireAt), poke me, delete
56
- // after firing. Upsert (create → conflict → update). The container pre-filters DUE alarms (it is
57
- // awake handling those), so every failure here is REAL — counted and propagated: a swallowed error
58
- // would leave a pending wake with no alarm, exactly the reliability hole this mechanism closes.
59
- // Cancelled wakes are NOT deleted here: their poke fires, finds nothing due, and the schedule
56
+ /** The EventBridge name for one alarm id: prefix + a stable hash of the WHOLE id. */
57
+ const mintedName = (prefix, id) => prefix + crypto.createHash("sha256").update(id).digest("hex").slice(0, 16);
58
+
59
+ // Mirror the container's pending wake-ups into one-shot schedules: at(fireAt), poke me, delete after firing. Upsert
60
+ // (create → conflict → update): an id names one instant, so the update is the same alarm mirrored again, never a
61
+ // spent one moved. The container pre-filters DUE alarms (it is awake handling those), so every failure here is REAL —
62
+ // counted and propagated: a swallowed error would leave a pending wake with no alarm, exactly the reliability hole
63
+ // this mechanism closes. Cancelled wakes are NOT deleted here: their poke fires, finds nothing due, and the schedule
60
64
  // self-deletes (lazy cleanup by design).
61
- async function syncAlarms(alarms, ctx) {
62
- const { SchedulerClient, CreateScheduleCommand, UpdateScheduleCommand } = require("@aws-sdk/client-scheduler");
63
- const sch = new SchedulerClient({});
65
+ async function syncAlarms(sch, alarms, ctx) {
66
+ const { CreateScheduleCommand, UpdateScheduleCommand } = require("@aws-sdk/client-scheduler");
64
67
  let failed = 0;
65
- // Alarm name = a stable hash of the WHOLE wake id. A prefix of the id would collide (two wakes
66
- // sharing 8 hex chars), and a collision is INDISTINGUISHABLE from the legitimate re-arm below:
67
- // the second wake would "update" the first's alarm and silently steal its fire time.
68
+ // Alarm name = a stable hash of the WHOLE alarm id. A prefix of the id would collide (two alarms
69
+ // sharing 8 hex chars), and a collision is INDISTINGUISHABLE from the legitimate re-mirror below:
70
+ // the second alarm would "update" the first and silently steal its fire time.
68
71
  const names = new Map();
69
72
  for (const a of alarms) {
70
- const name = process.env.WAKE_PREFIX + crypto.createHash("sha256").update(a.id).digest("hex").slice(0, 16);
73
+ const name = mintedName(process.env.WAKE_PREFIX, a.id);
71
74
  if (names.has(name)) {
72
75
  failed += 1;
73
76
  console.log(`alarm name collision ${name}: ${names.get(name)} vs ${a.id}`);
@@ -80,6 +83,7 @@ async function syncAlarms(alarms, ctx) {
80
83
  ScheduleExpressionTimezone: "UTC",
81
84
  FlexibleTimeWindow: { Mode: "OFF" },
82
85
  ActionAfterCompletion: "DELETE",
86
+ // It only wakes the container, whose pump fires what is due.
83
87
  Target: { Arn: ctx.invokedFunctionArn, RoleArn: process.env.WAKE_ROLE_ARN, Input: '{"wakePoke":true}' },
84
88
  };
85
89
  try {
@@ -97,12 +101,86 @@ async function syncAlarms(alarms, ctx) {
97
101
  return failed;
98
102
  }
99
103
 
104
+ // Make the recurring schedules exactly the container's set: create what is missing, update what differs, delete what
105
+ // it no longer has. Declarative, so a delete that failed is retried by the next sync, and the update is skipped when
106
+ // nothing changed (every sync carries the whole set, and a sync follows every wake-up too). Only names this Lambda
107
+ // mints are deleted: a prefix alone also matches a sibling agent named `<name>-sc-…`.
108
+ async function syncSchedules(sch, schedules, ctx) {
109
+ const {
110
+ CreateScheduleCommand,
111
+ UpdateScheduleCommand,
112
+ GetScheduleCommand,
113
+ DeleteScheduleCommand,
114
+ ListSchedulesCommand,
115
+ } = require("@aws-sdk/client-scheduler");
116
+ const prefix = process.env.SCHEDULE_PREFIX;
117
+ const held = new Set();
118
+ let NextToken;
119
+ do {
120
+ const page = await sch.send(new ListSchedulesCommand({ NamePrefix: prefix, NextToken }));
121
+ for (const s of page.Schedules || []) {
122
+ if (s.Name.startsWith(prefix) && /^[0-9a-f]{16}$/.test(s.Name.slice(prefix.length))) held.add(s.Name);
123
+ }
124
+ NextToken = page.NextToken;
125
+ } while (NextToken);
126
+ let failed = 0;
127
+ const wanted = new Set();
128
+ for (const s of schedules) {
129
+ const p = {
130
+ Name: mintedName(prefix, s.name),
131
+ ScheduleExpression: s.expression,
132
+ ScheduleExpressionTimezone: s.tz,
133
+ FlexibleTimeWindow: { Mode: "OFF" },
134
+ State: "ENABLED",
135
+ // <aws.scheduler.scheduled-time> is the clock's NAME for this occurrence: EventBridge repeats it byte-identical
136
+ // on every redelivery, which is what makes the container's claim work.
137
+ Target: {
138
+ Arn: ctx.invokedFunctionArn,
139
+ RoleArn: process.env.WAKE_ROLE_ARN,
140
+ Input: JSON.stringify({ scheduleFire: { name: s.name, occurrence: "<aws.scheduler.scheduled-time>" } }),
141
+ },
142
+ };
143
+ wanted.add(p.Name);
144
+ try {
145
+ if (!held.has(p.Name)) {
146
+ await sch.send(new CreateScheduleCommand(p));
147
+ continue;
148
+ }
149
+ const now = await sch.send(new GetScheduleCommand({ Name: p.Name }));
150
+ // Every field this Lambda sets. RoleArn too: the role's name is CloudFormation's, so a stack recreated over a
151
+ // schedule left behind gives it a new one, and a schedule still naming the old role never fires again.
152
+ const same =
153
+ now.ScheduleExpression === p.ScheduleExpression &&
154
+ now.ScheduleExpressionTimezone === p.ScheduleExpressionTimezone &&
155
+ now.State === p.State &&
156
+ now.Target?.Input === p.Target.Input &&
157
+ now.Target?.Arn === p.Target.Arn &&
158
+ now.Target?.RoleArn === p.Target.RoleArn;
159
+ if (!same) await sch.send(new UpdateScheduleCommand(p));
160
+ } catch (e) {
161
+ failed += 1;
162
+ console.log(`schedule ${s.name} (${p.Name}): ${e}`);
163
+ }
164
+ }
165
+ for (const name of held) {
166
+ if (wanted.has(name)) continue;
167
+ try {
168
+ await sch.send(new DeleteScheduleCommand({ Name: name }));
169
+ } catch (e) {
170
+ if (e.name === "ResourceNotFoundException") continue;
171
+ failed += 1;
172
+ console.log(`schedule ${name} (delete): ${e}`);
173
+ }
174
+ }
175
+ return failed;
176
+ }
177
+
100
178
  /**
101
179
  * Invoke the container, and leave ONE line under `label` whichever way it ends — including the way that never came
102
180
  * back at all.
103
181
  *
104
182
  * Lambda already logs an unhandled throw, so the failure is not invisible; what it is not is ATTRIBUTABLE. An
105
- * operator (or a probe) filtering this log group for `routine-fire <name>` sees nothing and concludes the clock
183
+ * operator (or a probe) filtering this log group for `schedule-fire <name>` sees nothing and concludes the clock
106
184
  * never fired, when what actually happened is that the clock fired and the call died. Those need different fixes
107
185
  * and looked identical from outside — that mistake cost a real debugging session.
108
186
  */
@@ -125,11 +203,11 @@ exports.handler = async (event, ctx) => {
125
203
  // EventBridge Scheduler fire — throw on failure so the miss lands in CloudWatch, never silently.
126
204
  if (event?.scheduleFire) {
127
205
  const { name, occurrence } = event.scheduleFire;
128
- const label = `routine-fire ${name} (${occurrence})`;
129
- const r = await invokeLogged(label, { kind: "routine-fire", name, occurrence });
206
+ const label = `schedule-fire ${name} (${occurrence})`;
207
+ const r = await invokeLogged(label, { kind: "schedule-fire", name, occurrence });
130
208
  const out = r.body.toString();
131
209
  console.log(`${label}: ${r.status} ${out}`);
132
- if (r.status >= 400) throw new Error(`routine-fire ${name} failed: ${r.status} ${out}`);
210
+ if (r.status >= 400) throw new Error(`schedule-fire ${name} failed: ${r.status} ${out}`);
133
211
  return { status: r.status };
134
212
  }
135
213
  const http = event?.requestContext?.http;
@@ -138,9 +216,14 @@ exports.handler = async (event, ctx) => {
138
216
  if (event.rawPath === "/__fastagent/wake-alarm") {
139
217
  const req = JSON.parse(event.isBase64Encoded ? Buffer.from(event.body, "base64").toString() : event.body || "{}");
140
218
  if (!secretEq(req.secret, process.env.WAKE_SECRET)) return { statusCode: 403, body: "forbidden\n" };
141
- const failed = await syncAlarms(req.alarms || [], ctx);
219
+ const { SchedulerClient } = require("@aws-sdk/client-scheduler");
220
+ const sch = new SchedulerClient({});
221
+ // A sync request names the WHOLE schedule set; one without it is not a sync, and deleting every schedule on it
222
+ // would be the wrong answer.
223
+ if (!Array.isArray(req.schedules)) return { statusCode: 400, body: "schedules: expected the whole set\n" };
224
+ const failed = (await syncAlarms(sch, req.alarms || [], ctx)) + (await syncSchedules(sch, req.schedules, ctx));
142
225
  // Partial failure IS failure: the container retries the whole (idempotent) set until every
143
- // pending wake really has its alarm.
226
+ // schedule and pending wake really has its EventBridge schedule.
144
227
  if (failed > 0) return { statusCode: 500, body: `${failed} alarm(s) failed\n` };
145
228
  return { statusCode: 200, body: "ok\n" };
146
229
  }
@@ -59,7 +59,7 @@ export async function tailAgentcoreLogs(plan, aws, announce = () => { }) {
59
59
  const matches = groups.filter((group) => (exact ? group === exact : group.startsWith(prefix))).sort();
60
60
  if (matches.length === 0) {
61
61
  // Absent group = never used.
62
- const trigger = plan.source === "runtime" ? "invoke the Runtime once" : "deliver one webhook or routine run";
62
+ const trigger = plan.source === "runtime" ? "invoke the Runtime once" : "deliver one webhook or schedule fire";
63
63
  return {
64
64
  ok: false,
65
65
  gate: `no ${plan.source} log group exists yet — ${trigger}, then retry (AWS creates it on first use)`,
@@ -1,12 +1,6 @@
1
1
  import type { DeclaredChannel } from "../../channels/discover.ts";
2
2
  import { type Artifact, type ContainerInput } from "../container.ts";
3
3
  import type { DeploymentSecret } from "../secrets.ts";
4
- /** The one schedule fact the plan needs (from loadRoutines) — name + cron + tz. */
5
- export interface ScheduleFact {
6
- name: string;
7
- cron: string;
8
- tz?: string;
9
- }
10
4
  export interface AgentcorePlanInput extends ContainerInput {
11
5
  /** Base name (dir basename) — shapes the runtime name, stack name, ECR repo, session id. */
12
6
  name: string;
@@ -20,8 +14,6 @@ export interface AgentcorePlanInput extends ContainerInput {
20
14
  * carries.
21
15
  */
22
16
  secrets?: readonly DeploymentSecret[];
23
- /** Static schedules — each becomes an EventBridge Scheduler rule targeting the forwarder. */
24
- schedules: ScheduleFact[];
25
17
  /**
26
18
  * How long an idle session keeps its microVM (config `deploy.agentcore.idleTimeoutSeconds`). The workload decides:
27
19
  * a chat agent talked to in bursts wants a longer tail than a schedule-only one. Defaults to
@@ -40,11 +32,6 @@ export interface AgentcorePlan {
40
32
  artifacts: Artifact[];
41
33
  /** The ordered, values-resolved deploy runbook — printed to stdout. */
42
34
  runbook: string[];
43
- /** Cron expressions EventBridge cannot express — surfaced as runbook warnings, not silent drops. */
44
- untranslatableSchedules: {
45
- name: string;
46
- reason: string;
47
- }[];
48
35
  /** What the stack contains — the ONE reading the template, the runbook and the `--run` driver share. */
49
36
  topology: AgentcoreTopology;
50
37
  }
@@ -70,6 +57,11 @@ export declare const FORWARDER_FILE = "lambda/index.js";
70
57
  * container, so this prefix is the only handle anything outside has on the alarms a deployment has pending.
71
58
  */
72
59
  export declare function wakeAlarmPrefix(name: string): string;
60
+ /**
61
+ * Where the forwarder puts the recurring schedule for each `schedules/` file. Set at runtime by the container (the
62
+ * set follows edits), so like the wake alarms it is no stack resource, and this prefix is the handle on them.
63
+ */
64
+ export declare function recurringSchedulePrefix(name: string): string;
73
65
  /** Account-suffixed artifact bucket for S3's global namespace. */
74
66
  export declare function deploymentBucketName(name: string, account: string): string;
75
67
  /**
@@ -95,8 +87,8 @@ export declare const TEMPLATE_FILE = "agentcore.template.yaml";
95
87
  export declare const GENERATED_TEMPLATE_MARKER = "# Generated by `fastagent deploy agentcore`";
96
88
  /** Whether an on-disk template is fastagent-generated (vs hand-written — kept, never gated). */
97
89
  export declare function isGeneratedAgentcoreTemplate(content: string): boolean;
98
- /** Deployment base name from the workspace basename — the ONE mapping used to find its stack later. */
99
- export declare function agentcoreName(workspaceBasename: string): string;
90
+ /** Deployment base name from the agent directory's name — the ONE mapping used to find its stack later. */
91
+ export declare function agentcoreName(agentDirName: string): string;
100
92
  /** Runtime name (`[a-zA-Z][a-zA-Z0-9_]{0,47}`) from a dir basename. */
101
93
  export declare function toRuntimeName(basename: string): string;
102
94
  /**
@@ -124,20 +116,14 @@ export declare function runtimeLogGroupPrefix(runtimeOrName: string): string;
124
116
  * and `--run` summary that tell an operator to set its retention, and `fastagent logs --source forwarder`.
125
117
  */
126
118
  export declare function forwarderLogGroup(name: string): string;
127
- /** The ONE fixed ingress session id (webhooks + routine fires). */
119
+ /** The `invoke-agent-runtime` payload IAM may send: a probe, answered `{"ok":true}` once the definition opened. */
120
+ export declare const PROBE_PAYLOAD: string;
121
+ /** The ONE fixed ingress session id (webhooks + schedule fires). */
128
122
  export declare function ingressSessionId(name: string): string;
129
- /** Translate a 5-field cron into EventBridge Scheduler's `cron(m h dom mon dow *)`, or say why it can't be. */
130
- export declare function toEventBridgeCron(cron: string): {
131
- expression: string;
132
- } | {
133
- error: string;
134
- };
135
123
  /**
136
124
  * The forwarder Lambda source — `forwarder.js` beside this file, the ONE text both the deployment package and the
137
125
  * readable `lambda/index.js` artifact are generated from.
138
126
  */
139
127
  export declare function forwarderSource(): string;
140
- /** The EventBridge physical name for a schedule. */
141
- export declare function scheduleResourceName(agent: string, schedule: string): string;
142
128
  /** Compute the AgentCore deploy plan from the resolved definition. */
143
129
  export declare function planAgentcoreDeploy(input: AgentcorePlanInput): AgentcorePlan;