@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.
- package/README.md +53 -82
- package/dist/agent-api.d.ts +452 -0
- package/dist/agent-api.js +201 -0
- package/dist/answer-text.d.ts +8 -0
- package/dist/answer-text.js +18 -0
- package/dist/atomic-write.d.ts +2 -2
- package/dist/atomic-write.js +2 -2
- package/dist/authoring.d.ts +77 -0
- package/dist/authoring.js +238 -0
- package/dist/channel.d.ts +29 -15
- package/dist/channel.js +4 -1
- package/dist/channels/agentcore-protocol.d.ts +36 -50
- package/dist/channels/agentcore-protocol.js +3 -3
- package/dist/channels/agentcore-service.d.ts +8 -18
- package/dist/channels/agentcore-service.js +108 -127
- package/dist/channels/agentcore.d.ts +8 -24
- package/dist/channels/agentcore.js +32 -65
- package/dist/channels/body.d.ts +0 -16
- package/dist/channels/body.js +0 -25
- package/dist/channels/busy.js +6 -1
- package/dist/channels/context.d.ts +4 -0
- package/dist/channels/context.js +35 -0
- package/dist/channels/discover.d.ts +18 -20
- package/dist/channels/discover.js +41 -99
- package/dist/channels/feishu/feishu-api.d.ts +54 -4
- package/dist/channels/feishu/feishu-api.js +192 -149
- package/dist/channels/feishu/feishu.d.ts +3 -0
- package/dist/channels/feishu/feishu.js +117 -106
- package/dist/channels/feishu/history.d.ts +55 -0
- package/dist/channels/feishu/history.js +199 -0
- package/dist/channels/feishu/invoke-turn.d.ts +13 -11
- package/dist/channels/feishu/invoke-turn.js +9 -10
- package/dist/channels/feishu/model.d.ts +2 -1
- package/dist/channels/feishu/normalize.js +100 -0
- package/dist/channels/feishu/preview.d.ts +2 -2
- package/dist/channels/feishu/register-webhook.d.ts +1 -0
- package/dist/channels/feishu/register-webhook.js +3 -2
- package/dist/channels/feishu/scaffold/channel.ts +65 -46
- package/dist/channels/feishu/scaffold/feishu-send.ts +38 -33
- package/dist/channels/feishu/scaffold/feishu-threads.ts +25 -0
- package/dist/channels/feishu/setup-mode.d.ts +45 -25
- package/dist/channels/feishu/setup-mode.js +74 -23
- package/dist/channels/feishu/shared-api.d.ts +24 -6
- package/dist/channels/feishu/shared-api.js +30 -24
- package/dist/channels/kit/context-buffer.d.ts +11 -2
- package/dist/channels/kit/context-buffer.js +7 -4
- package/dist/channels/kit/delivery.d.ts +19 -3
- package/dist/channels/kit/delivery.js +74 -15
- package/dist/channels/kit/event-stream.js +2 -1
- package/dist/channels/kit/invoke-turn-kit.d.ts +41 -41
- package/dist/channels/kit/invoke-turn-kit.js +62 -71
- package/dist/channels/kit/place-history.d.ts +107 -0
- package/dist/channels/kit/place-history.js +182 -0
- package/dist/channels/kit/preview-kit.d.ts +9 -5
- package/dist/channels/kit/preview-kit.js +36 -15
- package/dist/channels/kit/room-threads.d.ts +46 -0
- package/dist/channels/kit/room-threads.js +81 -0
- package/dist/channels/kit/seen.js +1 -1
- package/dist/channels/kit/stop-command.d.ts +6 -3
- package/dist/channels/kit/stop-command.js +20 -18
- package/dist/channels/kit/thread-fork.d.ts +17 -0
- package/dist/channels/kit/thread-fork.js +43 -0
- package/dist/channels/kit/thread-participants.js +1 -1
- package/dist/channels/kit/transport.d.ts +5 -0
- package/dist/channels/kit/transport.js +5 -0
- package/dist/channels/kit/turn-runner.d.ts +10 -9
- package/dist/channels/kit/turn-runner.js +17 -19
- package/dist/channels/kit/turn-store.d.ts +5 -4
- package/dist/channels/kit/turn-store.js +5 -5
- package/dist/channels/lark/lark.d.ts +3 -0
- package/dist/channels/lark/lark.js +5 -0
- package/dist/channels/lark/onboard.d.ts +5 -3
- package/dist/channels/lark/onboard.js +14 -14
- package/dist/channels/lark/scaffold/channel.ts +67 -44
- package/dist/channels/lark/scaffold/lark-send.ts +38 -33
- package/dist/channels/lark/scaffold/lark-threads.ts +25 -0
- package/dist/channels/respond.d.ts +0 -4
- package/dist/channels/respond.js +1 -1
- package/dist/channels/router.d.ts +18 -0
- package/dist/channels/router.js +68 -0
- package/dist/channels/serve.d.ts +5 -70
- package/dist/channels/serve.js +105 -287
- package/dist/channels/slack/history.d.ts +42 -0
- package/dist/channels/slack/history.js +282 -0
- package/dist/channels/slack/invoke-turn.d.ts +12 -5
- package/dist/channels/slack/invoke-turn.js +7 -5
- package/dist/channels/slack/manifest.d.ts +1 -4
- package/dist/channels/slack/manifest.js +22 -10
- package/dist/channels/slack/model.d.ts +2 -1
- package/dist/channels/slack/onboard.d.ts +0 -2
- package/dist/channels/slack/onboard.js +2 -4
- package/dist/channels/slack/onboarding-state.d.ts +0 -2
- package/dist/channels/slack/onboarding-state.js +0 -1
- package/dist/channels/slack/parse.d.ts +0 -5
- package/dist/channels/slack/parse.js +1 -16
- package/dist/channels/slack/preview.d.ts +2 -3
- package/dist/channels/slack/preview.js +78 -52
- package/dist/channels/slack/register-webhook.d.ts +1 -0
- package/dist/channels/slack/register-webhook.js +6 -5
- package/dist/channels/slack/scaffold/channel.ts +23 -24
- package/dist/channels/slack/scaffold/slack-send.ts +50 -43
- package/dist/channels/slack/scaffold/slack-threads.ts +29 -0
- package/dist/channels/slack/setup-server.d.ts +19 -0
- package/dist/channels/slack/setup-server.js +113 -11
- package/dist/channels/slack/shared-api.d.ts +15 -4
- package/dist/channels/slack/shared-api.js +19 -14
- package/dist/channels/slack/slack-api.d.ts +61 -2
- package/dist/channels/slack/slack-api.js +28 -5
- package/dist/channels/slack/slack.js +97 -52
- package/dist/channels/slack/welcomed.js +1 -1
- package/dist/channels/telegram/context-buffer.d.ts +6 -1
- package/dist/channels/telegram/context-buffer.js +19 -0
- package/dist/channels/telegram/invoke-turn.d.ts +8 -4
- package/dist/channels/telegram/invoke-turn.js +7 -7
- package/dist/channels/telegram/parse.d.ts +7 -2
- package/dist/channels/telegram/parse.js +7 -0
- package/dist/channels/telegram/preview.d.ts +2 -2
- package/dist/channels/telegram/register-webhook.d.ts +1 -0
- package/dist/channels/telegram/register-webhook.js +3 -2
- package/dist/channels/telegram/scaffold/channel.ts +27 -28
- package/dist/channels/telegram/scaffold/telegram-send.ts +61 -108
- package/dist/channels/telegram/shared-api.d.ts +34 -0
- package/dist/channels/telegram/shared-api.js +79 -0
- package/dist/channels/telegram/telegram-api.d.ts +15 -5
- package/dist/channels/telegram/telegram-api.js +10 -6
- package/dist/channels/telegram/telegram.js +27 -21
- package/dist/channels/telegram/turn-store.js +1 -1
- package/dist/channels/{kit/turn-queue.d.ts → turn-queue.d.ts} +2 -2
- package/dist/channels/{kit/turn-queue.js → turn-queue.js} +10 -10
- package/dist/cli/add-feishu.d.ts +42 -12
- package/dist/cli/add-feishu.js +177 -124
- package/dist/cli/add-slack.d.ts +8 -3
- package/dist/cli/add-slack.js +115 -63
- package/dist/cli/auth-view.d.ts +10 -3
- package/dist/cli/auth-view.js +8 -6
- package/dist/cli/box-login.d.ts +17 -7
- package/dist/cli/box-login.js +46 -12
- package/dist/cli/commands/add.d.ts +15 -4
- package/dist/cli/commands/add.js +252 -143
- package/dist/cli/commands/auth.d.ts +6 -0
- package/dist/cli/commands/auth.js +50 -0
- package/dist/cli/commands/content.d.ts +6 -0
- package/dist/cli/commands/content.js +45 -0
- package/dist/cli/commands/deploy/agentcore.js +50 -77
- package/dist/cli/commands/deploy/docker.js +38 -39
- package/dist/cli/commands/deploy/fly.js +21 -18
- package/dist/cli/commands/deploy/host-login.d.ts +26 -0
- package/dist/cli/commands/deploy/host-login.js +90 -0
- package/dist/cli/commands/deploy/railway.js +21 -26
- package/dist/cli/commands/deploy/shared.d.ts +45 -17
- package/dist/cli/commands/deploy/shared.js +34 -15
- package/dist/cli/commands/deploy.d.ts +0 -4
- package/dist/cli/commands/deploy.js +237 -50
- package/dist/cli/commands/destroy.js +8 -6
- package/dist/cli/commands/dev.d.ts +0 -2
- package/dist/cli/commands/dev.js +20 -19
- package/dist/cli/commands/env.d.ts +12 -0
- package/dist/cli/commands/env.js +190 -0
- package/dist/cli/commands/info.js +95 -156
- package/dist/cli/commands/init.d.ts +2 -2
- package/dist/cli/commands/init.js +35 -33
- package/dist/cli/commands/invoke.d.ts +6 -0
- package/dist/cli/commands/invoke.js +131 -16
- package/dist/cli/commands/login.d.ts +31 -2
- package/dist/cli/commands/login.js +413 -64
- package/dist/cli/commands/logout.d.ts +4 -0
- package/dist/cli/commands/logout.js +53 -0
- package/dist/cli/commands/logs.js +8 -6
- package/dist/cli/commands/models.d.ts +2 -1
- package/dist/cli/commands/models.js +39 -37
- package/dist/cli/commands/schedules.d.ts +21 -0
- package/dist/cli/commands/schedules.js +143 -0
- package/dist/cli/commands/start.d.ts +11 -10
- package/dist/cli/commands/start.js +35 -62
- package/dist/cli/content-view.d.ts +9 -0
- package/dist/cli/content-view.js +26 -0
- package/dist/cli/fail.d.ts +9 -12
- package/dist/cli/fail.js +17 -14
- package/dist/cli/invoke-stream.d.ts +12 -3
- package/dist/cli/invoke-stream.js +85 -23
- package/dist/cli/kernel.d.ts +9 -2
- package/dist/cli/kernel.js +15 -6
- package/dist/cli/login-relay.d.ts +3 -2
- package/dist/cli/login-relay.js +18 -6
- package/dist/cli/models-view.d.ts +5 -1
- package/dist/cli/models-view.js +1 -1
- package/dist/cli/person.d.ts +10 -0
- package/dist/cli/person.js +23 -0
- package/dist/cli/program.js +421 -203
- package/dist/cli/serve.d.ts +13 -63
- package/dist/cli/serve.js +31 -121
- package/dist/cli/shared.d.ts +21 -48
- package/dist/cli/shared.js +68 -89
- package/dist/cli/ticket.d.ts +136 -0
- package/dist/cli/ticket.js +476 -0
- package/dist/client.d.ts +7 -0
- package/dist/client.js +2 -0
- package/dist/content/declare.d.ts +70 -0
- package/dist/content/declare.js +163 -0
- package/dist/content/file.d.ts +32 -0
- package/dist/content/file.js +119 -0
- package/dist/content/git.d.ts +41 -0
- package/dist/content/git.js +217 -0
- package/dist/content/mount.d.ts +2 -0
- package/dist/content/mount.js +15 -0
- package/dist/content/resolve.d.ts +52 -0
- package/dist/content/resolve.js +151 -0
- package/dist/content/source.d.ts +27 -0
- package/dist/content/source.js +53 -0
- package/dist/conversation-sessions.d.ts +26 -0
- package/dist/conversation-sessions.js +99 -0
- package/dist/declared-secrets.d.ts +19 -37
- package/dist/declared-secrets.js +16 -58
- package/dist/deploy/agentcore/destroy.d.ts +3 -3
- package/dist/deploy/agentcore/destroy.js +46 -28
- package/dist/deploy/agentcore/forwarder.js +105 -22
- package/dist/deploy/agentcore/logs.js +1 -1
- package/dist/deploy/agentcore/plan.d.ts +10 -24
- package/dist/deploy/agentcore/plan.js +31 -135
- package/dist/deploy/agentcore/run.d.ts +1 -1
- package/dist/deploy/agentcore/run.js +8 -5
- package/dist/deploy/agentcore/shell.d.ts +1 -1
- package/dist/deploy/agentcore/shell.js +5 -5
- package/dist/deploy/api.d.ts +34 -0
- package/dist/deploy/api.js +50 -0
- package/dist/deploy/box-shell.d.ts +6 -0
- package/dist/deploy/box-shell.js +7 -0
- package/dist/deploy/build-context.d.ts +7 -5
- package/dist/deploy/build-context.js +41 -35
- package/dist/deploy/channel-ingress.d.ts +6 -1
- package/dist/deploy/channel-ingress.js +18 -5
- package/dist/deploy/container.d.ts +22 -9
- package/dist/deploy/container.js +96 -55
- package/dist/deploy/docker/plan.d.ts +3 -2
- package/dist/deploy/docker/plan.js +13 -14
- package/dist/deploy/docker/run.d.ts +2 -2
- package/dist/deploy/docker/run.js +8 -4
- package/dist/deploy/fly/plan.d.ts +1 -1
- package/dist/deploy/fly/plan.js +12 -21
- package/dist/deploy/fly/run.d.ts +10 -6
- package/dist/deploy/fly/run.js +11 -6
- package/dist/deploy/hosts.d.ts +2 -1
- package/dist/deploy/hosts.js +2 -1
- package/dist/deploy/preflight.d.ts +21 -23
- package/dist/deploy/preflight.js +222 -201
- package/dist/deploy/railway/plan.d.ts +8 -6
- package/dist/deploy/railway/plan.js +15 -58
- package/dist/deploy/railway/run.d.ts +8 -3
- package/dist/deploy/railway/run.js +12 -8
- package/dist/deploy/residency.d.ts +5 -11
- package/dist/deploy/residency.js +0 -6
- package/dist/deploy/runner.d.ts +1 -1
- package/dist/deploy/runner.js +1 -1
- package/dist/deploy/secrets.d.ts +16 -2
- package/dist/deploy/secrets.js +33 -6
- package/dist/deploy/workspace.d.ts +11 -6
- package/dist/deploy/workspace.js +55 -38
- package/dist/dev-supervisor.d.ts +11 -2
- package/dist/dev-supervisor.js +51 -26
- package/dist/effect-port.d.ts +4 -4
- package/dist/effect-port.js +4 -4
- package/dist/environment/apt.d.ts +4 -0
- package/dist/environment/apt.js +32 -0
- package/dist/environment/declare.d.ts +59 -0
- package/dist/environment/declare.js +210 -0
- package/dist/environment/mise.d.ts +50 -0
- package/dist/environment/mise.js +268 -0
- package/dist/feishu.d.ts +2 -2
- package/dist/feishu.js +2 -2
- package/dist/git.d.ts +13 -0
- package/dist/git.js +55 -0
- package/dist/harnesses/models/catalog.d.ts +20 -0
- package/dist/harnesses/models/catalog.js +254 -0
- package/dist/{engines/pi/auth.d.ts → harnesses/models/credentials.d.ts} +3 -3
- package/dist/{engines/pi/auth.js → harnesses/models/credentials.js} +3 -3
- package/dist/harnesses/models/environment.d.ts +43 -0
- package/dist/harnesses/models/environment.js +82 -0
- package/dist/{engines/pi → harnesses/models}/login.d.ts +57 -26
- package/dist/{engines/pi → harnesses/models}/login.js +187 -79
- package/dist/harnesses/models/models.d.ts +83 -0
- package/dist/harnesses/models/models.js +158 -0
- package/dist/harnesses/pi-durable/agent.d.ts +42 -0
- package/dist/harnesses/pi-durable/agent.js +579 -0
- package/dist/harnesses/pi-durable/defaults.d.ts +28 -0
- package/dist/harnesses/pi-durable/defaults.js +26 -0
- package/dist/harnesses/pi-durable/define.d.ts +77 -0
- package/dist/harnesses/pi-durable/define.js +28 -0
- package/dist/harnesses/pi-durable/entries.d.ts +32 -0
- package/dist/harnesses/pi-durable/entries.js +126 -0
- package/dist/harnesses/pi-durable/events.d.ts +25 -0
- package/dist/harnesses/pi-durable/events.js +238 -0
- package/dist/harnesses/pi-durable/ids.d.ts +16 -0
- package/dist/harnesses/pi-durable/ids.js +55 -0
- package/dist/harnesses/pi-durable/messages.d.ts +41 -0
- package/dist/harnesses/pi-durable/messages.js +116 -0
- package/dist/harnesses/pi-durable/open.d.ts +88 -0
- package/dist/harnesses/pi-durable/open.js +329 -0
- package/dist/harnesses/pi-durable/reads.d.ts +30 -0
- package/dist/harnesses/pi-durable/reads.js +94 -0
- package/dist/harnesses/pi-durable/registry.d.ts +18 -0
- package/dist/harnesses/pi-durable/registry.js +56 -0
- package/dist/harnesses/pi-durable/release.d.ts +13 -0
- package/dist/harnesses/pi-durable/release.js +40 -0
- package/dist/harnesses/pi-durable/serve.d.ts +80 -0
- package/dist/harnesses/pi-durable/serve.js +156 -0
- package/dist/harnesses/pi-durable/sessions.d.ts +27 -0
- package/dist/harnesses/pi-durable/sessions.js +47 -0
- package/dist/harnesses/pi-durable/storage.d.ts +4 -0
- package/dist/harnesses/pi-durable/storage.js +49 -0
- package/dist/harnesses/pi-durable/stream.d.ts +20 -0
- package/dist/harnesses/pi-durable/stream.js +221 -0
- package/dist/harnesses/pi-durable/text.d.ts +30 -0
- package/dist/harnesses/pi-durable/text.js +292 -0
- package/dist/harnesses/pi-durable/wake.d.ts +4 -0
- package/dist/harnesses/pi-durable/wake.js +81 -0
- package/dist/http/client.d.ts +6 -0
- package/dist/http/client.js +256 -0
- package/dist/http/contract.d.ts +541 -0
- package/dist/http/contract.js +179 -0
- package/dist/http/server.d.ts +34 -0
- package/dist/http/server.js +194 -0
- package/dist/index.d.ts +17 -4
- package/dist/index.js +10 -5
- package/dist/lark.d.ts +2 -2
- package/dist/lark.js +2 -2
- package/dist/locked-file.d.ts +17 -0
- package/dist/{engines/pi/locked-file.js → locked-file.js} +16 -10
- package/dist/once.d.ts +6 -0
- package/dist/once.js +23 -0
- package/dist/paths.d.ts +36 -52
- package/dist/paths.js +66 -182
- package/dist/runtime.d.ts +25 -2
- package/dist/runtime.js +27 -0
- package/dist/scaffold/add-channel.d.ts +14 -27
- package/dist/scaffold/add-channel.js +82 -180
- package/dist/scaffold/init.d.ts +17 -18
- package/dist/scaffold/init.js +87 -99
- package/dist/scaffold/templates/SYSTEM.md +12 -0
- package/dist/scaffold/templates/env.example +4 -10
- package/dist/scaffold/templates/fastagent.config.ts +21 -33
- package/dist/scaffold/templates/gitignore +8 -1
- package/dist/scaffold/templates/skills/writing-great-skills/SKILL.md +1 -2
- package/dist/scaffold/templates.d.ts +9 -4
- package/dist/scaffold/templates.js +7 -5
- package/dist/scaffold/vendor-skill.d.ts +1 -4
- package/dist/scaffold/vendor-skill.js +5 -6
- package/dist/schedule/cron.d.ts +13 -0
- package/dist/schedule/cron.js +52 -0
- package/dist/schedule/eventbridge-cron.d.ts +17 -0
- package/dist/schedule/eventbridge-cron.js +88 -0
- package/dist/schedule/schedule.d.ts +23 -0
- package/dist/schedule/schedule.js +34 -0
- package/dist/schedule/scheduler.d.ts +34 -33
- package/dist/schedule/scheduler.js +251 -137
- package/dist/schedule/state.d.ts +4 -14
- package/dist/schedule/state.js +7 -7
- package/dist/schedule/wake-alarm.d.ts +22 -2
- package/dist/schedule/wake-alarm.js +66 -20
- package/dist/schedule/wakeups.d.ts +16 -15
- package/dist/schedule/wakeups.js +47 -45
- package/dist/service.d.ts +56 -169
- package/dist/service.js +91 -187
- package/dist/serving-command.d.ts +10 -0
- package/dist/serving-command.js +16 -0
- package/dist/slack.d.ts +1 -1
- package/dist/slack.js +1 -1
- package/dist/{channels/kit/state.js → state-file.js} +6 -6
- package/dist/telegram.d.ts +1 -0
- package/dist/telegram.js +1 -0
- package/dist/tunnel.d.ts +3 -0
- package/dist/tunnel.js +12 -4
- package/dist/value-file.d.ts +21 -0
- package/dist/value-file.js +108 -0
- package/dist/version.d.ts +5 -0
- package/dist/version.js +14 -1
- package/package.json +18 -28
- package/dist/agent.d.ts +0 -106
- package/dist/agent.js +0 -21
- package/dist/channels/control.d.ts +0 -31
- package/dist/channels/control.js +0 -329
- package/dist/channels/define-channel.d.ts +0 -39
- package/dist/channels/define-channel.js +0 -9
- package/dist/channels/feishu/context-buffer.d.ts +0 -35
- package/dist/channels/feishu/context-buffer.js +0 -65
- package/dist/channels/feishu/scaffold/channel.websocket.ts +0 -31
- package/dist/channels/http.d.ts +0 -23
- package/dist/channels/http.js +0 -57
- package/dist/channels/lark/scaffold/channel.websocket.ts +0 -31
- package/dist/channels/slack/context-buffer.d.ts +0 -23
- package/dist/channels/slack/context-buffer.js +0 -37
- package/dist/channels/sse.d.ts +0 -4
- package/dist/channels/sse.js +0 -66
- package/dist/cli/commands/chat.d.ts +0 -3
- package/dist/cli/commands/chat.js +0 -14
- package/dist/cli/commands/routine-run.d.ts +0 -6
- package/dist/cli/commands/routine-run.js +0 -46
- package/dist/cli/commands/routine.d.ts +0 -25
- package/dist/cli/commands/routine.js +0 -122
- package/dist/cli/commands/tool.d.ts +0 -1
- package/dist/cli/commands/tool.js +0 -57
- package/dist/collect.d.ts +0 -63
- package/dist/collect.js +0 -90
- package/dist/core.d.ts +0 -13
- package/dist/core.js +0 -15
- package/dist/engines/pi/agent-models.d.ts +0 -83
- package/dist/engines/pi/agent-models.js +0 -120
- package/dist/engines/pi/agent-session-factory.d.ts +0 -121
- package/dist/engines/pi/agent-session-factory.js +0 -535
- package/dist/engines/pi/chat.d.ts +0 -3
- package/dist/engines/pi/chat.js +0 -8
- package/dist/engines/pi/config.d.ts +0 -71
- package/dist/engines/pi/config.js +0 -199
- package/dist/engines/pi/create.d.ts +0 -170
- package/dist/engines/pi/create.js +0 -343
- package/dist/engines/pi/definition.d.ts +0 -74
- package/dist/engines/pi/definition.js +0 -236
- package/dist/engines/pi/entry-images.d.ts +0 -14
- package/dist/engines/pi/entry-images.js +0 -23
- package/dist/engines/pi/invoke-session.d.ts +0 -18
- package/dist/engines/pi/invoke-session.js +0 -403
- package/dist/engines/pi/locked-file.d.ts +0 -9
- package/dist/engines/pi/machine.d.ts +0 -53
- package/dist/engines/pi/machine.js +0 -137
- package/dist/engines/pi/models.d.ts +0 -200
- package/dist/engines/pi/models.js +0 -533
- package/dist/engines/pi/open.d.ts +0 -180
- package/dist/engines/pi/open.js +0 -270
- package/dist/engines/pi/openai-account-models.d.ts +0 -35
- package/dist/engines/pi/openai-account-models.js +0 -116
- package/dist/engines/pi/report.d.ts +0 -18
- package/dist/engines/pi/report.js +0 -59
- package/dist/engines/pi/retry-event.d.ts +0 -6
- package/dist/engines/pi/retry-event.js +0 -15
- package/dist/engines/pi/service.d.ts +0 -9
- package/dist/engines/pi/service.js +0 -14
- package/dist/engines/pi/session-builder.d.ts +0 -13
- package/dist/engines/pi/session-builder.js +0 -117
- package/dist/engines/pi/session-control.d.ts +0 -77
- package/dist/engines/pi/session-control.js +0 -908
- package/dist/engines/pi/session-effects.d.ts +0 -14
- package/dist/engines/pi/session-effects.js +0 -30
- package/dist/engines/pi/session-inheritance.d.ts +0 -21
- package/dist/engines/pi/session-inheritance.js +0 -204
- package/dist/engines/pi/session-markers.d.ts +0 -49
- package/dist/engines/pi/session-markers.js +0 -60
- package/dist/engines/pi/session-settings.d.ts +0 -67
- package/dist/engines/pi/session-settings.js +0 -119
- package/dist/engines/pi/session-store.d.ts +0 -69
- package/dist/engines/pi/session-store.js +0 -430
- package/dist/engines/pi/tool-context.d.ts +0 -45
- package/dist/engines/pi/tool-context.js +0 -31
- package/dist/engines/pi/tool.d.ts +0 -99
- package/dist/engines/pi/tool.js +0 -118
- package/dist/engines/pi/turn-kit.d.ts +0 -92
- package/dist/engines/pi/turn-kit.js +0 -288
- package/dist/engines/pi/wake-tool.d.ts +0 -9
- package/dist/engines/pi/wake-tool.js +0 -92
- package/dist/loader.d.ts +0 -41
- package/dist/loader.js +0 -116
- package/dist/node.d.ts +0 -3
- package/dist/node.js +0 -4
- package/dist/observe.d.ts +0 -6
- package/dist/observe.js +0 -47
- package/dist/pi.d.ts +0 -25
- package/dist/pi.js +0 -15
- package/dist/scaffold/templates/APPEND_SYSTEM.md +0 -12
- package/dist/scaffold/templates/tools/fetch-url.ts +0 -25
- package/dist/schedule/discover.d.ts +0 -17
- package/dist/schedule/discover.js +0 -61
- package/dist/schedule/routine.d.ts +0 -43
- package/dist/schedule/routine.js +0 -32
- package/dist/schedule/run.d.ts +0 -55
- package/dist/schedule/run.js +0 -146
- package/dist/secrets-gate.d.ts +0 -32
- package/dist/secrets-gate.js +0 -33
- package/dist/session-remote.d.ts +0 -47
- package/dist/session-remote.js +0 -460
- package/dist/session.d.ts +0 -466
- package/dist/session.js +0 -57
- /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
|
|
63
|
-
// here:
|
|
64
|
-
const
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
// THE FULL SHAPE, not just the prefix. The forwarder mints every
|
|
69
|
-
// (plan.ts / forwarder.js), and a prefix alone is ambiguous between sibling agents:
|
|
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
|
|
72
|
-
const
|
|
73
|
-
|
|
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
|
-
|
|
152
|
-
|
|
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
|
|
189
|
-
for (const
|
|
190
|
-
swept.add(
|
|
191
|
-
await attempt(
|
|
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
|
-
|
|
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
|
|
215
|
-
//
|
|
216
|
-
// Lambda we just deleted, retrying into nothing
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
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
|
|
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
|
|
11
|
-
// wake-alarm (shared secret)
|
|
12
|
-
//
|
|
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
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
//
|
|
59
|
-
//
|
|
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 {
|
|
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
|
|
66
|
-
// sharing 8 hex chars), and a collision is INDISTINGUISHABLE from the legitimate re-
|
|
67
|
-
// the second
|
|
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
|
|
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 `
|
|
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 = `
|
|
129
|
-
const r = await invokeLogged(label, { kind: "
|
|
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(`
|
|
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
|
|
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
|
|
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
|
|
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
|
|
99
|
-
export declare function agentcoreName(
|
|
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
|
|
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;
|