@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
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* What a channel is handed when it is mounted (channel.ts): the Agent, a directory of its own, the sessions its
|
|
3
|
+
* conversations talk in, and its turns. Every mount builds a channel's context here, so a channel file, a first-party
|
|
4
|
+
* channel and a test mount the same way.
|
|
5
|
+
*/
|
|
6
|
+
import { isAbsolute, join } from "node:path";
|
|
7
|
+
import { conversationSessions, forkedSession } from "../conversation-sessions.js";
|
|
8
|
+
import * as Effect from "effect/Effect";
|
|
9
|
+
import { portError, portJoin } from "../effect-port.js";
|
|
10
|
+
import { log } from "../log.js";
|
|
11
|
+
import { ensureStateHome } from "../state-file.js";
|
|
12
|
+
import { createTurnQueue } from "./turn-queue.js";
|
|
13
|
+
/** The context of the channel `name` (its file's name under `src/channels/`), its state under `stateRoot`. */
|
|
14
|
+
export function channelContext(agent, stateRoot, name) {
|
|
15
|
+
if (!isAbsolute(stateRoot))
|
|
16
|
+
throw new Error(`a channel's state root must be absolute, got "${stateRoot}"`);
|
|
17
|
+
const stateDir = join(stateRoot, "channels", name);
|
|
18
|
+
ensureStateHome(stateDir);
|
|
19
|
+
const sessions = conversationSessions(join(stateDir, "sessions.json"));
|
|
20
|
+
const turns = createTurnQueue({
|
|
21
|
+
label: `[${name}]`,
|
|
22
|
+
// The channel's own failure surface: `turn` promises a failed one goes to the log, said as the author wrote it.
|
|
23
|
+
run: ({ conversation, work }) => portJoin(work).pipe(Effect.catchCause((cause) => Effect.sync(() => log.error(`[${name}] turn failed (place=${conversation}): ${String(portError(cause))}`)))),
|
|
24
|
+
});
|
|
25
|
+
return {
|
|
26
|
+
agent,
|
|
27
|
+
stateDir,
|
|
28
|
+
sessionFor: (key, options) => {
|
|
29
|
+
const forkFrom = options?.forkFrom;
|
|
30
|
+
return sessions.of(key, agent, forkFrom === undefined ? undefined : async () => forkedSession(agent, await forkFrom()));
|
|
31
|
+
},
|
|
32
|
+
recordedSession: (key) => sessions.get(key),
|
|
33
|
+
turn: (place, work) => turns.accept({ conversation: place, work }),
|
|
34
|
+
};
|
|
35
|
+
}
|
|
@@ -1,16 +1,18 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
1
|
+
/**
|
|
2
|
+
* A definition's channels, mounted: each route channel's routes, and each long connection bound to its context. The
|
|
3
|
+
* modules are what the definition built (`BuiltDefinition.channels`); a channel's shape is checked there, by
|
|
4
|
+
* {@link channelModuleProblem}, and its routes here, where it is first called.
|
|
5
|
+
*/
|
|
6
|
+
import type { Agent } from "../agent-api.ts";
|
|
7
|
+
import type { ChannelModule, LongConnection, LongConnectionChannelModule, Routes } from "../channel.ts";
|
|
8
|
+
export type AnyChannelModule = ChannelModule | LongConnectionChannelModule;
|
|
9
9
|
/** A long-connection module bound to the same context route factories receive. */
|
|
10
10
|
export interface LoadedLongConnectionChannel {
|
|
11
11
|
name: string;
|
|
12
12
|
connect(signal: AbortSignal): LongConnection;
|
|
13
13
|
}
|
|
14
|
+
/** Why `value` is not a channel module: a route channel's `(ctx) => Routes`, or a long connection's object. */
|
|
15
|
+
export declare function channelModuleProblem(value: unknown): string | undefined;
|
|
14
16
|
/** HOW A CHANNEL IS REACHED — the authored structural fact, and the ONE shape it travels in. */
|
|
15
17
|
export type ChannelIngress = "webhook" | "long-connection";
|
|
16
18
|
/** One channel a directory declares, with the ingress its module shape says it has. */
|
|
@@ -20,18 +22,14 @@ export interface DeclaredChannel {
|
|
|
20
22
|
}
|
|
21
23
|
/** Declared channels from basenames that share one ingress. */
|
|
22
24
|
export declare function declaredChannels(names: readonly string[], ingress?: ChannelIngress): DeclaredChannel[];
|
|
23
|
-
/**
|
|
24
|
-
export declare function
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
}>;
|
|
31
|
-
export declare function loadChannels(dir: string, ctx: ChannelContext): Promise<{
|
|
25
|
+
/** How a channel module is reached: its routes, or the connection it opens. */
|
|
26
|
+
export declare function channelIngress(module: AnyChannelModule): ChannelIngress;
|
|
27
|
+
/**
|
|
28
|
+
* Mount the channels, each with its own context (context.ts): every route of every route channel (two claiming one
|
|
29
|
+
* route is refused), and the connections.
|
|
30
|
+
*/
|
|
31
|
+
export declare function mountChannels(modules: ReadonlyMap<string, AnyChannelModule>, agent: Agent, stateRoot: string): {
|
|
32
32
|
routes: Routes;
|
|
33
33
|
longConnections: LoadedLongConnectionChannel[];
|
|
34
34
|
routeChannels: string[];
|
|
35
|
-
|
|
36
|
-
failures: ModuleLoadFailure[];
|
|
37
|
-
}>;
|
|
35
|
+
};
|
|
@@ -1,50 +1,25 @@
|
|
|
1
|
-
|
|
2
|
-
import {
|
|
3
|
-
import { assertRouteKey, routeKeysConflict } from "./serve.js";
|
|
4
|
-
import { loadModuleDir } from "../loader.js";
|
|
5
|
-
import { readSecretDeclaration } from "../declared-secrets.js";
|
|
6
|
-
import { gateSecrets } from "../secrets-gate.js";
|
|
7
|
-
import { assertInsideAgentDir } from "../paths.js";
|
|
1
|
+
import { channelContext } from "./context.js";
|
|
2
|
+
import { assertRouteKey, routeKeysConflict } from "./router.js";
|
|
8
3
|
function longConnectionModule(value) {
|
|
9
4
|
return value !== null && typeof value === "object" && typeof value.connect === "function";
|
|
10
5
|
}
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
6
|
+
/** Why `value` is not a channel module: a route channel's `(ctx) => Routes`, or a long connection's object. */
|
|
7
|
+
export function channelModuleProblem(value) {
|
|
8
|
+
if (typeof value === "function")
|
|
9
|
+
return undefined;
|
|
10
|
+
if (!longConnectionModule(value))
|
|
11
|
+
return "must default-export (ctx) => Routes or { name, connect(ctx, signal) }";
|
|
12
|
+
return typeof value.name === "string" && value.name.trim() !== ""
|
|
13
|
+
? undefined
|
|
14
|
+
: "long-connection channel name must be a non-empty string";
|
|
15
15
|
}
|
|
16
16
|
/** Declared channels from basenames that share one ingress. */
|
|
17
17
|
export function declaredChannels(names, ingress = "webhook") {
|
|
18
18
|
return names.map((name) => ({ name, ingress }));
|
|
19
19
|
}
|
|
20
|
-
/**
|
|
21
|
-
export
|
|
22
|
-
|
|
23
|
-
const { modules, failures } = await loadModuleDir(join(dir, "channels"));
|
|
24
|
-
const channels = [];
|
|
25
|
-
const secrets = new Map();
|
|
26
|
-
for (const { name, label, file, mod } of modules) {
|
|
27
|
-
try {
|
|
28
|
-
const declaration = readSecretDeclaration(mod.default, label);
|
|
29
|
-
if (declaration.error !== undefined)
|
|
30
|
-
throw new Error(declaration.error);
|
|
31
|
-
if (typeof mod.default === "function") {
|
|
32
|
-
channels.push({ name, ingress: "webhook" });
|
|
33
|
-
}
|
|
34
|
-
else if (longConnectionModule(mod.default)) {
|
|
35
|
-
validateLongConnectionModule(mod.default, label);
|
|
36
|
-
channels.push({ name, ingress: "long-connection" });
|
|
37
|
-
}
|
|
38
|
-
else {
|
|
39
|
-
throw new Error(`${label} must default-export (ctx) => Routes or { name, connect(ctx, signal) }`);
|
|
40
|
-
}
|
|
41
|
-
secrets.set(name, declaration.secrets);
|
|
42
|
-
}
|
|
43
|
-
catch (error) {
|
|
44
|
-
failures.push({ label, file, message: error.message });
|
|
45
|
-
}
|
|
46
|
-
}
|
|
47
|
-
return { channels, secrets, failures };
|
|
20
|
+
/** How a channel module is reached: its routes, or the connection it opens. */
|
|
21
|
+
export function channelIngress(module) {
|
|
22
|
+
return typeof module === "function" ? "webhook" : "long-connection";
|
|
48
23
|
}
|
|
49
24
|
function validateRoutes(value, label) {
|
|
50
25
|
if (value === null || typeof value !== "object" || value instanceof Map) {
|
|
@@ -62,71 +37,38 @@ function validateRoutes(value, label) {
|
|
|
62
37
|
}
|
|
63
38
|
return routes;
|
|
64
39
|
}
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
const { modules, failures } = await loadModuleDir(join(dir, "channels"));
|
|
40
|
+
/**
|
|
41
|
+
* Mount the channels, each with its own context (context.ts): every route of every route channel (two claiming one
|
|
42
|
+
* route is refused), and the connections.
|
|
43
|
+
*/
|
|
44
|
+
export function mountChannels(modules, agent, stateRoot) {
|
|
71
45
|
const routes = {};
|
|
46
|
+
const owners = new Map();
|
|
72
47
|
const longConnections = [];
|
|
73
48
|
const routeChannels = [];
|
|
74
|
-
const
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
const declaredSecrets = new Map();
|
|
81
|
-
const declaring = modules.flatMap((entry) => {
|
|
82
|
-
const declaration = readSecretDeclaration(entry.mod.default, entry.label);
|
|
83
|
-
if (declaration.error !== undefined) {
|
|
84
|
-
failures.push({ label: entry.label, file: entry.file, message: declaration.error });
|
|
85
|
-
return [];
|
|
49
|
+
for (const [name, module] of modules) {
|
|
50
|
+
const label = `src/channels/${name}`;
|
|
51
|
+
const ctx = channelContext(agent, stateRoot, name);
|
|
52
|
+
if (typeof module !== "function") {
|
|
53
|
+
longConnections.push({ name: module.name, connect: (signal) => module.connect(ctx, signal) });
|
|
54
|
+
continue;
|
|
86
55
|
}
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
const channel = mod.default;
|
|
94
|
-
longConnections.push({
|
|
95
|
-
name: channel.name,
|
|
96
|
-
connect: (signal) => channel.connect(ctx, signal),
|
|
97
|
-
});
|
|
98
|
-
declaredSecrets.set(name, secrets);
|
|
99
|
-
continue;
|
|
100
|
-
}
|
|
101
|
-
if (typeof mod.default !== "function") {
|
|
102
|
-
throw new Error(`${label} must default-export (ctx) => Routes or { name, connect(ctx, signal) }`);
|
|
103
|
-
}
|
|
104
|
-
const declared = mod.default(ctx);
|
|
105
|
-
if (declared !== null &&
|
|
106
|
-
typeof declared === "object" &&
|
|
107
|
-
typeof declared.then === "function") {
|
|
108
|
-
declared.catch(() => { });
|
|
109
|
-
throw new Error(`${label} must return Routes synchronously, not a Promise`);
|
|
110
|
-
}
|
|
111
|
-
const declaredRoutes = validateRoutes(declared, label);
|
|
112
|
-
for (const [route, handler] of declaredRoutes) {
|
|
113
|
-
const clash = Object.keys(routes).some((key) => routeKeysConflict(key, route));
|
|
114
|
-
if (clash) {
|
|
115
|
-
collisions.push({ route, source: label });
|
|
116
|
-
continue;
|
|
117
|
-
}
|
|
118
|
-
routes[route] = handler;
|
|
119
|
-
}
|
|
120
|
-
routeChannels.push(name);
|
|
121
|
-
declaredSecrets.set(name, secrets);
|
|
56
|
+
const declared = module(ctx);
|
|
57
|
+
if (declared !== null &&
|
|
58
|
+
typeof declared === "object" &&
|
|
59
|
+
typeof declared.then === "function") {
|
|
60
|
+
declared.catch(() => { });
|
|
61
|
+
throw new Error(`${label} must return Routes synchronously, not a Promise`);
|
|
122
62
|
}
|
|
123
|
-
|
|
124
|
-
|
|
63
|
+
for (const [route, handler] of validateRoutes(declared, label)) {
|
|
64
|
+
const taken = [...owners.keys()].find((key) => routeKeysConflict(key, route));
|
|
65
|
+
if (taken !== undefined) {
|
|
66
|
+
throw new Error(`${label} serves "${route}", which ${owners.get(taken)} already serves as "${taken}"`);
|
|
67
|
+
}
|
|
68
|
+
owners.set(route, label);
|
|
69
|
+
routes[route] = handler;
|
|
125
70
|
}
|
|
71
|
+
routeChannels.push(name);
|
|
126
72
|
}
|
|
127
|
-
|
|
128
|
-
// refuses — src/secrets-gate.ts, decision 2). Binding a module ahead of the gate costs nothing: a
|
|
129
|
-
// route factory builds handlers; nothing listens or dials until the caller mounts what this returns.
|
|
130
|
-
gateSecrets({ declared: declaredSecrets, failures });
|
|
131
|
-
return { routes, longConnections, routeChannels, collisions, failures };
|
|
73
|
+
return { routes, longConnections, routeChannels };
|
|
132
74
|
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { ImageRef } from "
|
|
1
|
+
import type { ImageAttachment as ImageRef } from "../kit/invoke-turn-kit.ts";
|
|
2
2
|
import type { FeishuCloudKind } from "./cloud.ts";
|
|
3
3
|
import type { CallOptions } from "../kit/transport.ts";
|
|
4
4
|
/** Where a reply goes: a chat, optionally quote-replying a message inside a platform thread. */
|
|
@@ -35,6 +35,31 @@ export interface FeishuApiOptions {
|
|
|
35
35
|
appId: string;
|
|
36
36
|
appSecret: string;
|
|
37
37
|
}
|
|
38
|
+
/** One message as `GET /im/v1/messages` lists it — the fields the history read uses. */
|
|
39
|
+
export interface FeishuListedMessage {
|
|
40
|
+
message_id?: string;
|
|
41
|
+
chat_id?: string;
|
|
42
|
+
msg_type?: string;
|
|
43
|
+
/** Milliseconds since the epoch, as a string. */
|
|
44
|
+
create_time?: string;
|
|
45
|
+
parent_id?: string;
|
|
46
|
+
root_id?: string;
|
|
47
|
+
thread_id?: string;
|
|
48
|
+
deleted?: boolean;
|
|
49
|
+
body?: {
|
|
50
|
+
content?: string;
|
|
51
|
+
};
|
|
52
|
+
mentions?: {
|
|
53
|
+
key?: string;
|
|
54
|
+
name?: string;
|
|
55
|
+
id?: string;
|
|
56
|
+
}[];
|
|
57
|
+
sender?: {
|
|
58
|
+
id?: string;
|
|
59
|
+
id_type?: string;
|
|
60
|
+
sender_type?: string;
|
|
61
|
+
};
|
|
62
|
+
}
|
|
38
63
|
export interface FeishuAppScope {
|
|
39
64
|
name: string;
|
|
40
65
|
grantStatus: number;
|
|
@@ -45,6 +70,12 @@ export interface FeishuAppScope {
|
|
|
45
70
|
* single pipeline (module header). Throws {@link FeishuApiError} on any failure.
|
|
46
71
|
*/
|
|
47
72
|
export interface FeishuApi {
|
|
73
|
+
/**
|
|
74
|
+
* This client over the same pipeline and token cache, reporting the id of every message it creates (a send, a reply,
|
|
75
|
+
* each chunk of a long text). The channel sends through one to know which messages in a chat's history are its own
|
|
76
|
+
* turn output; the send tool shares the plain client, so what the agent sends itself stays part of the discussion.
|
|
77
|
+
*/
|
|
78
|
+
recordingSends(onSent: (messageId: string) => void): FeishuApi;
|
|
48
79
|
/** Validate appId/appSecret by acquiring the tenant token through this pipeline. Does not require
|
|
49
80
|
* the bot capability (unlike botInfo), so guided onboarding can fail before persisting a typo. */
|
|
50
81
|
verifyCredentials(): Promise<void>;
|
|
@@ -66,6 +97,28 @@ export interface FeishuApi {
|
|
|
66
97
|
editTextMessage(messageId: string, text: string): Promise<void>;
|
|
67
98
|
/** Recall (delete) a message the bot sent. */
|
|
68
99
|
deleteMessage(messageId: string): Promise<void>;
|
|
100
|
+
/**
|
|
101
|
+
* A place's messages, NEWEST first: a chat's (an ordinary group lists a thread's root only; a topic group lists
|
|
102
|
+
* every message) or a thread's. Cards come back as sent, and senders as open_ids.
|
|
103
|
+
*/
|
|
104
|
+
listMessages(container: {
|
|
105
|
+
type: "chat" | "thread";
|
|
106
|
+
id: string;
|
|
107
|
+
}, pageSize: number,
|
|
108
|
+
/** Seconds since the epoch, inclusive: list nothing created after this second. */
|
|
109
|
+
endTime?: number, opts?: CallOptions): Promise<{
|
|
110
|
+
items: FeishuListedMessage[];
|
|
111
|
+
hasMore: boolean;
|
|
112
|
+
}>;
|
|
113
|
+
/**
|
|
114
|
+
* Names for `wanted` open_ids among a chat's members (needs `im:chat.members:read`). Pages until every wanted id is
|
|
115
|
+
* named or the member list ends, up to {@link MEMBER_PAGES} pages; `complete` says whether the list was read to its
|
|
116
|
+
* end, so an id still unnamed is known not to be a member rather than beyond the cap.
|
|
117
|
+
*/
|
|
118
|
+
chatMemberNames(chatId: string, wanted: ReadonlySet<string>, opts?: CallOptions): Promise<{
|
|
119
|
+
names: Map<string, string>;
|
|
120
|
+
complete: boolean;
|
|
121
|
+
}>;
|
|
69
122
|
/** Fetch one message (the reply-referent path). Undefined when the API returns no item.
|
|
70
123
|
*
|
|
71
124
|
* `sender` is typed rather than `unknown` because the referent path READS it: an app-sent message
|
|
@@ -105,9 +158,6 @@ export interface FeishuApi {
|
|
|
105
158
|
/** List the app's scopes and grant state. Used by onboarding/runtime to make group visibility
|
|
106
159
|
* explicit instead of silently assuming unmentioned group events are delivered. */
|
|
107
160
|
listAppScopes(): Promise<FeishuAppScope[]>;
|
|
108
|
-
/** Add tenant scopes to the app draft through application-v7 config. Approval + version publishing
|
|
109
|
-
* remain console actions; this method only removes the error-prone manual draft edit. */
|
|
110
|
-
addAppScopes(appId: string, scopeNames: string[]): Promise<void>;
|
|
111
161
|
/** Update the app's own event subscription (application-v7 config PATCH — tenant token can only
|
|
112
162
|
* operate on itself; the request-URL change takes effect immediately, no version publish). The
|
|
113
163
|
* platform VERIFIES `requestUrl` with a url_verification challenge during this call, so the server
|