@fastagent-sh/fastagent 0.24.3 → 0.25.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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 -517
- 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 -83
- package/dist/engines/pi/turn-kit.js +0 -275
- 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
|
@@ -2,18 +2,19 @@
|
|
|
2
2
|
* Telegram bot channel: verify the webhook secret token → decide via `route(update)` → run the turn → stream the
|
|
3
3
|
* agent's reply back to the chat, ACK 200.
|
|
4
4
|
*/
|
|
5
|
-
import {
|
|
5
|
+
import { join } from "node:path";
|
|
6
6
|
import { log } from "../../log.js";
|
|
7
7
|
import { readBodyCapped } from "../body.js";
|
|
8
8
|
import { text } from "../respond.js";
|
|
9
9
|
import { secretEquals } from "../secret.js";
|
|
10
10
|
import { telegramTurnStream } from "./invoke-turn.js";
|
|
11
11
|
import { collectAttachments, createContextBuffer } from "./context-buffer.js";
|
|
12
|
-
import { attachmentSummary, defaultTelegramRoute, extractFiles, extractImages, fromLabel, messageText, ownFiles, ownImages, pickMessage, telegramEnvelope, telegramStop, } from "./parse.js";
|
|
12
|
+
import { attachmentSummary, defaultTelegramRoute, extractFiles, extractImages, fromLabel, messageText, ownFiles, ownImages, pickMessage, telegramEnvelope, telegramPlaceKey, telegramStop, } from "./parse.js";
|
|
13
|
+
import { registerTelegramTransport } from "./shared-api.js";
|
|
13
14
|
import { defaultErrorMessage, deliverTelegramAnswer, telegramReply } from "./preview.js";
|
|
14
15
|
import { attachmentsDir } from "../kit/attachment-path.js";
|
|
15
|
-
import { ensureStateHome } from "../kit/state.js";
|
|
16
16
|
import { dispatchStop } from "../kit/stop-command.js";
|
|
17
|
+
import { createTaskTracker } from "../kit/tasks.js";
|
|
17
18
|
import { callApi, editMessageText, sendMessage } from "./telegram-api.js";
|
|
18
19
|
import { createTurnRunner } from "../kit/turn-runner.js";
|
|
19
20
|
import { discussionBlock } from "../kit/context-buffer.js";
|
|
@@ -25,7 +26,7 @@ export { defaultTelegramRoute, telegramEnvelope, telegramStop };
|
|
|
25
26
|
const MAX_UPDATE_BYTES = 1 << 20;
|
|
26
27
|
/** Build a Telegram bot channel: policy options in, a {@link ChannelModule} out. */
|
|
27
28
|
export function telegramChannel({ secretToken, botToken, route, onError, botUsername, apiBaseUrl = "https://api.telegram.org", }) {
|
|
28
|
-
return ({ agent,
|
|
29
|
+
return ({ agent, sessionFor, recordedSession, stateDir: stateHome }) => {
|
|
29
30
|
// Validate at activation so deploy may inspect the module shape before secrets are provisioned.
|
|
30
31
|
if (!secretToken) {
|
|
31
32
|
throw new Error("telegramChannel requires a non-empty secretToken (the webhook secret_token; an unset one accepts forged updates)");
|
|
@@ -57,17 +58,17 @@ export function telegramChannel({ secretToken, botToken, route, onError, botUser
|
|
|
57
58
|
log.warn("[telegram] bot token has no parseable bot id — reply-to-bot summon disabled until getMe resolves");
|
|
58
59
|
}
|
|
59
60
|
const decide = route ?? ((update) => defaultTelegramRoute(update, { botUsername: mentionName, botId }));
|
|
60
|
-
// The channel-state convention: this channel's durable home is `<stateRoot>/channels/telegram` (engine state at
|
|
61
|
-
// the root, channel state under `channels/<kind>/`).
|
|
62
|
-
if (!isAbsolute(stateRoot)) {
|
|
63
|
-
throw new Error(`telegramChannel requires an absolute ctx.stateRoot, got "${stateRoot}"`);
|
|
64
|
-
}
|
|
65
|
-
const stateHome = join(stateRoot, "channels", "telegram");
|
|
66
|
-
ensureStateHome(stateHome); // buffers/files may carry chat content; the agent .gitignore covers .state/
|
|
67
61
|
const buffer = createContextBuffer(join(stateHome, "buffers.json"));
|
|
62
|
+
// The send tool rides this channel's token, and what it sends lands in this buffer (shared-api.ts says why).
|
|
63
|
+
registerTelegramTransport({
|
|
64
|
+
apiBaseUrl,
|
|
65
|
+
botToken,
|
|
66
|
+
record: (placeKey, entry) => buffer.push(placeKey, entry),
|
|
67
|
+
});
|
|
68
68
|
// Durable turn intent (L1): persist an accepted turn pre-ACK, remove it when the turn ends; a crash leaves it for
|
|
69
69
|
// replay on the next start.
|
|
70
70
|
const store = createTurnStore(join(stateHome, "turns.json"));
|
|
71
|
+
const sideTasks = createTaskTracker("[telegram]");
|
|
71
72
|
const targetOf = (r) => ({ chatId: r.chatId, threadId: r.threadId, replyTo: r.replyTo });
|
|
72
73
|
// Tell the asker when a turn is dropped at the execution ceiling: the chain's end needs a signal, not just an
|
|
73
74
|
// operator log line.
|
|
@@ -76,15 +77,15 @@ export function telegramChannel({ secretToken, botToken, route, onError, botUser
|
|
|
76
77
|
const sent = r.previewId !== undefined
|
|
77
78
|
? editMessageText(apiBaseUrl, botToken, targetOf(r), r.previewId, body, { html: false })
|
|
78
79
|
: sendMessage(apiBaseUrl, botToken, targetOf(r), body, { html: false }).then(() => { });
|
|
79
|
-
void sent.catch((e) => log.warn(`[telegram] could not notify a dropped turn (
|
|
80
|
+
void sent.catch((e) => log.warn(`[telegram] could not notify a dropped turn (conversation=${r.conversation}): ${String(e)}`));
|
|
80
81
|
};
|
|
81
82
|
const runner = createTurnRunner({
|
|
82
83
|
label: "[telegram]",
|
|
83
84
|
store,
|
|
84
|
-
buffer,
|
|
85
|
+
discussion: buffer,
|
|
85
86
|
toStored: ({ previewId: _live, ...intent }) => ({ ...intent, attempts: 0 }),
|
|
86
87
|
fromStored: ({ attempts: _a, ...intent }) => ({ ...intent, previewId: undefined }),
|
|
87
|
-
|
|
88
|
+
discussionKey: (rec) => rec.placeKey,
|
|
88
89
|
where: (rec) => `chat=${rec.chatId}${rec.threadId !== undefined ? ` thread=${rec.threadId}` : ""}`,
|
|
89
90
|
// Queue feedback: when this session already has a turn running/queued, a silent wait reads as "the bot ignored
|
|
90
91
|
// me" once the current turn runs long.
|
|
@@ -108,7 +109,11 @@ export function telegramChannel({ secretToken, botToken, route, onError, botUser
|
|
|
108
109
|
notifyDropped,
|
|
109
110
|
// `rec.previewId`: the ⏳ notice THIS process put up if the record waited behind another turn.
|
|
110
111
|
deliverAnswer: (rec, answer) => portJoin(() => deliverTelegramAnswer(apiBaseUrl, botToken, targetOf(rec), answer, rec.previewId)),
|
|
111
|
-
execute: (rec, discussion, onAnswered) => telegramReply(telegramTurnStream(agent,
|
|
112
|
+
execute: (rec, discussion, onAnswered) => telegramReply(telegramTurnStream(agent, {
|
|
113
|
+
session: () => sessionFor(rec.conversation),
|
|
114
|
+
key: rec.id,
|
|
115
|
+
text: `${discussionBlock(discussion.text)}${rec.baseText}`,
|
|
116
|
+
}, { api: apiBaseUrl, botToken, chatId: rec.chatId, filesDir: attachmentsDir(stateHome) }, {
|
|
112
117
|
primary: { imageFileIds: rec.imageFileIds, fileIds: rec.fileIds },
|
|
113
118
|
buffered: collectAttachments(discussion.consumed, {
|
|
114
119
|
files: new Set(rec.fileIds),
|
|
@@ -138,7 +143,7 @@ export function telegramChannel({ secretToken, botToken, route, onError, botUser
|
|
|
138
143
|
const m = pickMessage(update);
|
|
139
144
|
if (!m)
|
|
140
145
|
return new Response(null, { status: 200 });
|
|
141
|
-
const placeKey = m.
|
|
146
|
+
const placeKey = telegramPlaceKey(m.chat.id, m.message_thread_id);
|
|
142
147
|
const r = decide(update);
|
|
143
148
|
if (!r) {
|
|
144
149
|
// Not summoned: in a group, record the message so a later summon has the discussion (needs privacy off to be
|
|
@@ -164,17 +169,18 @@ export function telegramChannel({ secretToken, botToken, route, onError, botUser
|
|
|
164
169
|
}
|
|
165
170
|
return new Response(null, { status: 200 });
|
|
166
171
|
}
|
|
167
|
-
|
|
168
|
-
const session = r.session ?? `telegram:${placeKey}`;
|
|
172
|
+
const conversation = r.conversation ?? placeKey;
|
|
169
173
|
const chatId = r.chatId ?? m.chat.id;
|
|
170
174
|
// Reply to the summoning message in groups (threads the answer under the asker); a 1:1 DM needs no reply-quote.
|
|
171
175
|
const threadId = r.threadId ?? m.message_thread_id;
|
|
172
176
|
const sameTarget = String(chatId) === String(m.chat.id) && threadId === m.message_thread_id;
|
|
173
177
|
const replyTo = m.chat.type !== "private" && sameTarget ? m.message_id : undefined;
|
|
174
178
|
// Explicit user stop (`/stop`): a control action, never a turn — it must not queue behind the run it stops.
|
|
179
|
+
// `abort` waits until what it stopped has ended, so the update is acknowledged first.
|
|
175
180
|
if (telegramStop(update, { botUsername: mentionName, botId })) {
|
|
176
|
-
|
|
177
|
-
|
|
181
|
+
sideTasks.track(dispatchStop(agent, recordedSession(conversation), "[telegram]")
|
|
182
|
+
.then((feedback) => sendMessage(apiBaseUrl, botToken, { chatId, threadId, replyTo }, feedback, { html: false }))
|
|
183
|
+
.catch((e) => log.warn(`[telegram] stop feedback failed: ${String(e)}`)));
|
|
178
184
|
return new Response(null, { status: 200 });
|
|
179
185
|
}
|
|
180
186
|
const baseText = r.text ?? telegramEnvelope(m);
|
|
@@ -184,7 +190,7 @@ export function telegramChannel({ secretToken, botToken, route, onError, botUser
|
|
|
184
190
|
// Everything the turn needs, as a plain record; persisted pre-ACK then run serially per session.
|
|
185
191
|
runner.submit({
|
|
186
192
|
id: `${update.update_id}`,
|
|
187
|
-
|
|
193
|
+
conversation,
|
|
188
194
|
placeKey,
|
|
189
195
|
baseText,
|
|
190
196
|
chatId,
|
|
@@ -13,7 +13,7 @@ function isStoredTurn(t) {
|
|
|
13
13
|
const r = t;
|
|
14
14
|
const strings = (v) => Array.isArray(v) && v.every((x) => typeof x === "string");
|
|
15
15
|
return (typeof r?.id === "string" &&
|
|
16
|
-
typeof r.
|
|
16
|
+
typeof r.conversation === "string" &&
|
|
17
17
|
typeof r.placeKey === "string" &&
|
|
18
18
|
typeof r.baseText === "string" &&
|
|
19
19
|
(typeof r.chatId === "string" || typeof r.chatId === "number") &&
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/** Per-
|
|
1
|
+
/** Per-conversation FIFO execution. */
|
|
2
2
|
import * as Effect from "effect/Effect";
|
|
3
3
|
import type * as Scope from "effect/Scope";
|
|
4
4
|
export interface TurnQueue<T> {
|
|
@@ -7,7 +7,7 @@ export interface TurnQueue<T> {
|
|
|
7
7
|
idle(): Promise<void>;
|
|
8
8
|
}
|
|
9
9
|
export declare function createTurnQueue<T extends {
|
|
10
|
-
|
|
10
|
+
conversation: string;
|
|
11
11
|
}>(opts: {
|
|
12
12
|
label: string;
|
|
13
13
|
/** The queue diagnoses escaped failures and closes this turn's resources before its successor runs. */
|
|
@@ -1,17 +1,17 @@
|
|
|
1
|
-
/** Per-
|
|
1
|
+
/** Per-conversation FIFO execution. */
|
|
2
2
|
import * as Effect from "effect/Effect";
|
|
3
3
|
import * as Fiber from "effect/Fiber";
|
|
4
|
-
import { log } from "
|
|
5
|
-
import { beginWork } from "
|
|
6
|
-
import { portError } from "
|
|
4
|
+
import { log } from "../log.js";
|
|
5
|
+
import { beginWork } from "./busy.js";
|
|
6
|
+
import { portError } from "../effect-port.js";
|
|
7
7
|
export function createTurnQueue(opts) {
|
|
8
8
|
const { label, run, onQueuedBehind } = opts;
|
|
9
9
|
const chains = new Map();
|
|
10
10
|
return {
|
|
11
11
|
accept(rec) {
|
|
12
|
-
if (chains.has(rec.
|
|
12
|
+
if (chains.has(rec.conversation))
|
|
13
13
|
onQueuedBehind?.(rec);
|
|
14
|
-
const prev = chains.get(rec.
|
|
14
|
+
const prev = chains.get(rec.conversation);
|
|
15
15
|
// Admission counts immediately, including while waiting behind another turn.
|
|
16
16
|
const workDone = beginWork();
|
|
17
17
|
const fiber = Effect.runFork(Effect.scoped(Effect.gen(function* () {
|
|
@@ -20,12 +20,12 @@ export function createTurnQueue(opts) {
|
|
|
20
20
|
if (prev)
|
|
21
21
|
yield* Fiber.await(prev);
|
|
22
22
|
yield* run(rec);
|
|
23
|
-
})).pipe(Effect.catchCause((cause) => Effect.sync(() => log.error(`${label} turn runner rejected (
|
|
23
|
+
})).pipe(Effect.catchCause((cause) => Effect.sync(() => log.error(`${label} turn runner rejected (conversation=${rec.conversation}; own your error surface in run()): ${String(portError(cause))}`))), Effect.ensuring(Effect.sync(() => {
|
|
24
24
|
workDone();
|
|
25
|
-
if (chains.get(rec.
|
|
26
|
-
chains.delete(rec.
|
|
25
|
+
if (chains.get(rec.conversation) === fiber)
|
|
26
|
+
chains.delete(rec.conversation);
|
|
27
27
|
}))));
|
|
28
|
-
chains.set(rec.
|
|
28
|
+
chains.set(rec.conversation, fiber);
|
|
29
29
|
},
|
|
30
30
|
idle: () => Effect.runPromise(Effect.gen(function* () {
|
|
31
31
|
// A finishing turn may enqueue more work.
|
package/dist/cli/add-feishu.d.ts
CHANGED
|
@@ -1,20 +1,50 @@
|
|
|
1
|
-
import { type
|
|
1
|
+
import { type FeishuSubscriptionMode } from "../channels/feishu/setup-mode.ts";
|
|
2
2
|
import { type FeishuApi } from "../channels/feishu/feishu-api.ts";
|
|
3
|
-
import {
|
|
4
|
-
|
|
5
|
-
|
|
3
|
+
import type { DeclaredChannel } from "../channels/discover.ts";
|
|
4
|
+
import { type Person } from "./person.ts";
|
|
5
|
+
export interface AgentScopeCheck {
|
|
6
|
+
/** Safe to proceed to version publishing now; false means Permissions still needs console or admin work. */
|
|
6
7
|
publishReady: boolean;
|
|
8
|
+
/** The scopes found missing; empty when the list could not be read (`publishReady` is false then). */
|
|
9
|
+
missing: string[];
|
|
7
10
|
}
|
|
8
|
-
|
|
11
|
+
/**
|
|
12
|
+
* Check that the app holds what an app of this ingress needs ({@link feishuAppScopes}). A created app asks for them on
|
|
13
|
+
* its confirm page, and a tenant may still withhold some (its approval policy, or an app made by hand): those are
|
|
14
|
+
* NAMED, with what each one costs, and the console page that requests them is opened pre-filled. Nothing is requested
|
|
15
|
+
* through the config API — that needs a scope of its own, which a tenant can withhold just the same.
|
|
16
|
+
*/
|
|
17
|
+
export declare function checkAgentScopes(input: {
|
|
9
18
|
kind: "feishu" | "lark";
|
|
10
19
|
appId: string;
|
|
11
20
|
apiBase: string;
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
/** Whether the author chose the behavior (flag or prompt). */
|
|
15
|
-
explicit: boolean;
|
|
21
|
+
ingress: FeishuSubscriptionMode;
|
|
22
|
+
api: Pick<FeishuApi, "listAppScopes">;
|
|
16
23
|
note?: (message: string) => void;
|
|
17
|
-
|
|
18
|
-
|
|
24
|
+
/** Who is sent to the console page that requests a missing permission. */
|
|
25
|
+
person?: Person;
|
|
26
|
+
}): Promise<AgentScopeCheck>;
|
|
19
27
|
/** Create or resume the platform app behind `add feishu` / `add lark`. */
|
|
20
|
-
export declare function onboardFeishuCloudApp(target: string, kind: "feishu" | "lark", ingress
|
|
28
|
+
export declare function onboardFeishuCloudApp(target: string, kind: "feishu" | "lark", ingress: FeishuSubscriptionMode,
|
|
29
|
+
/** The command that continues an interrupted setup: the one that started it. */
|
|
30
|
+
rerun?: string,
|
|
31
|
+
/** Who takes the steps only a person can: at this terminal, or a coding agent's person through a ticket. */
|
|
32
|
+
person?: Person): Promise<Record<string, string> | undefined>;
|
|
33
|
+
/**
|
|
34
|
+
* Lark's app credentials, which only the person can get, from the app they create in Lark's console: with no one at a
|
|
35
|
+
* terminal to type them, the report naming where they set them (the selected environment's file), when either is
|
|
36
|
+
* absent. `again` is the command that continues once they have.
|
|
37
|
+
*/
|
|
38
|
+
export declare function larkCredentialsNeeded(agentDir: string, again: string): Promise<{
|
|
39
|
+
json: Record<string, unknown>;
|
|
40
|
+
text: string[];
|
|
41
|
+
} | undefined>;
|
|
42
|
+
export declare function feishuAppSecretNames(kind: "feishu" | "lark", ingress: FeishuSubscriptionMode): string[];
|
|
43
|
+
interface FeishuAppSetup {
|
|
44
|
+
kind: "feishu" | "lark";
|
|
45
|
+
ingress: FeishuSubscriptionMode;
|
|
46
|
+
}
|
|
47
|
+
export declare function unpreparedFeishuApps(channels: readonly DeclaredChannel[], values: ReadonlyMap<string, string>): FeishuAppSetup[];
|
|
48
|
+
export declare function assertIndependentFeishuApps(agentDir: string, kinds: readonly ("feishu" | "lark")[], values: ReadonlyMap<string, string>): void;
|
|
49
|
+
export declare function prepareFeishuApps(agentDir: string, apps: readonly FeishuAppSetup[], rerun: string, person: Person, onboard?: typeof onboardFeishuCloudApp): Promise<void>;
|
|
50
|
+
export {};
|