@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
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Auth for the pi
|
|
2
|
+
* Auth for the pi harness: a read-WRITE {@link CredentialStore} over a fastagent credentials file, consumed by the
|
|
3
3
|
* `Models` collection (models.ts), and which of those files an agent reads. The write path refuses to overwrite a
|
|
4
4
|
* corrupt file, so a torn read never clobbers the other providers' credentials.
|
|
5
5
|
*/
|
|
@@ -7,7 +7,7 @@ import { existsSync, readFileSync } from "node:fs";
|
|
|
7
7
|
import { join } from "node:path";
|
|
8
8
|
import { globalHome, SECRETS_DIRNAME, resolveOverridePath, resolveSecretsDir } from "../../paths.js";
|
|
9
9
|
import { log } from "../../log.js";
|
|
10
|
-
import { withLockedFile } from "
|
|
10
|
+
import { withLockedFile } from "../../locked-file.js";
|
|
11
11
|
/**
|
|
12
12
|
* The GLOBAL fastagent credentials file (distinct from pi's `~/.pi`), under the user-global machinery home
|
|
13
13
|
* `~/.fastagent/`.
|
|
@@ -80,7 +80,7 @@ function parseForWrite(raw, where) {
|
|
|
80
80
|
* to avoid. A provider present in neither layer is new, and new credentials belong to the primary.
|
|
81
81
|
*
|
|
82
82
|
* The fallback also yields to `projectAuthenticates`: a provider the project authenticates some other way (an env key,
|
|
83
|
-
* its
|
|
83
|
+
* a provider in its config that authenticates itself) never reaches it — for reading, listing or writing back.
|
|
84
84
|
*/
|
|
85
85
|
export function fastagentCredentialStore(path, options = {}) {
|
|
86
86
|
const warn = options.warn ?? ((message) => log.warn(message));
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import type { Credential, CredentialStore, Models, Provider } from "@earendil-works/pi-ai";
|
|
2
|
+
import { type AuthLayers, type CredentialSourceOptions, type FastagentAuthOptions } from "./credentials.ts";
|
|
3
|
+
/** What authenticates one provider for an agent ({@link ModelEnvironment.authStatus}). */
|
|
4
|
+
interface AuthStatus {
|
|
5
|
+
/** What satisfies it now (`OAuth`, `stored credential`, an env variable's name), after a due refresh. */
|
|
6
|
+
source?: string;
|
|
7
|
+
/** Why resolving it failed (a corrupt entry, a refresh the provider refused), when it did. */
|
|
8
|
+
error?: string;
|
|
9
|
+
/** The file that holds the stored credential, or the one a login would write; absent over a caller's store. */
|
|
10
|
+
path?: string;
|
|
11
|
+
/** The kind of credential the store holds for it, usable or not. */
|
|
12
|
+
stored?: Credential["type"];
|
|
13
|
+
/**
|
|
14
|
+
* An env variable that also authenticates it but goes unused, because a stored credential owns its provider: a key
|
|
15
|
+
* added to a deployment's value file after the box was logged in, typically.
|
|
16
|
+
*/
|
|
17
|
+
shadowed?: string;
|
|
18
|
+
}
|
|
19
|
+
export interface ModelEnvironment {
|
|
20
|
+
/** The credentials files behind {@link credentials}; absent when the caller supplied its own store. */
|
|
21
|
+
auth?: AuthLayers;
|
|
22
|
+
credentials: CredentialStore;
|
|
23
|
+
/** pi's built-ins and the definition's providers, over {@link credentials}. */
|
|
24
|
+
models: Models;
|
|
25
|
+
/** Why a model list is not current, when one is not (logged already): each lists what it last had. */
|
|
26
|
+
catalogProblem?: string;
|
|
27
|
+
/**
|
|
28
|
+
* What authenticates `provider` here, resolved exactly as a message resolves it: the one answer the startup report
|
|
29
|
+
* and a deployed box's `login --if-missing` both give. `modelId` picks the model to probe with; the provider's first
|
|
30
|
+
* one otherwise (auth is provider-scoped).
|
|
31
|
+
*/
|
|
32
|
+
authStatus(provider: string, modelId?: string): Promise<AuthStatus>;
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* The model environment of the agent in `agentDir` (or, without one, of a caller with no directory: the named or global
|
|
36
|
+
* credentials file). A supplied `credentialStore` is used as given; otherwise the files: the directory's own layers
|
|
37
|
+
* ({@link resolveAuthLayers}), or the named file, or the global one. `providers` are the definition's. The model lists
|
|
38
|
+
* are refreshed before it resolves, kept in the agent's state root; `force` asks the network even when they are fresh.
|
|
39
|
+
*/
|
|
40
|
+
export declare function modelEnvironment(agentDir: string | undefined, source?: CredentialSourceOptions & FastagentAuthOptions, providers?: readonly Provider[], options?: {
|
|
41
|
+
force?: boolean;
|
|
42
|
+
}): Promise<ModelEnvironment>;
|
|
43
|
+
export {};
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* An agent's MODEL ENVIRONMENT as one value: the credential store its messages authenticate through, the models they
|
|
3
|
+
* resolve against (models.ts) with their lists refreshed (catalog.ts), and what authenticates a provider there. Every
|
|
4
|
+
* reader builds it here (the serve, the startup report, a deployed box's `login --if-missing`, `info`, `login`, the
|
|
5
|
+
* model list, `deploy`'s pre-flight), so none can read other credential layers, another registry, or older lists than
|
|
6
|
+
* the Agent does.
|
|
7
|
+
*/
|
|
8
|
+
import { join } from "node:path";
|
|
9
|
+
import { log } from "../../log.js";
|
|
10
|
+
import { resolveStateRoot } from "../../paths.js";
|
|
11
|
+
import { catalogsIn } from "./catalog.js";
|
|
12
|
+
import { GLOBAL_AUTH_PATH, assertOneCredentialSource, fastagentCredentialStore, resolveAuthLayers, } from "./credentials.js";
|
|
13
|
+
import { environmentAuth, modelsOver, probeAuthSource } from "./models.js";
|
|
14
|
+
/**
|
|
15
|
+
* The model environment of the agent in `agentDir` (or, without one, of a caller with no directory: the named or global
|
|
16
|
+
* credentials file). A supplied `credentialStore` is used as given; otherwise the files: the directory's own layers
|
|
17
|
+
* ({@link resolveAuthLayers}), or the named file, or the global one. `providers` are the definition's. The model lists
|
|
18
|
+
* are refreshed before it resolves, kept in the agent's state root; `force` asks the network even when they are fresh.
|
|
19
|
+
*/
|
|
20
|
+
export async function modelEnvironment(agentDir, source = {}, providers = [], options = {}) {
|
|
21
|
+
assertOneCredentialSource(source);
|
|
22
|
+
const files = source.credentialStore
|
|
23
|
+
? undefined
|
|
24
|
+
: agentDir
|
|
25
|
+
? resolveAuthLayers(agentDir, source.authPath)
|
|
26
|
+
: { path: source.authPath ?? GLOBAL_AUTH_PATH };
|
|
27
|
+
const store = files === undefined ? undefined : layeredStore(files, providers, source.warn);
|
|
28
|
+
const credentials = source.credentialStore ?? store;
|
|
29
|
+
const catalogs = catalogsIn(agentDir === undefined ? undefined : join(resolveStateRoot(agentDir), "models"));
|
|
30
|
+
const models = modelsOver(credentials, providers, catalogs);
|
|
31
|
+
const catalogProblem = await catalogs.refresh(models, options);
|
|
32
|
+
if (catalogProblem !== undefined)
|
|
33
|
+
log.warn(`[fastagent] ${catalogProblem}`);
|
|
34
|
+
return {
|
|
35
|
+
...(files ? { auth: files } : {}),
|
|
36
|
+
credentials,
|
|
37
|
+
models,
|
|
38
|
+
...(catalogProblem === undefined ? {} : { catalogProblem }),
|
|
39
|
+
async authStatus(provider, modelId) {
|
|
40
|
+
const id = modelId ?? models.getProvider(provider)?.getModels()[0]?.id;
|
|
41
|
+
let resolved = {};
|
|
42
|
+
if (id !== undefined) {
|
|
43
|
+
try {
|
|
44
|
+
const found = await probeAuthSource(models, `${provider}/${id}`);
|
|
45
|
+
if (found !== undefined)
|
|
46
|
+
resolved = { source: found };
|
|
47
|
+
}
|
|
48
|
+
catch (error) {
|
|
49
|
+
// The first line: pi folds the request's stack into the message of a failed refresh.
|
|
50
|
+
resolved = { error: String(error.message).split("\n")[0] };
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
// `read` never refreshes: this is the kind on file, whatever became of it.
|
|
54
|
+
const stored = (await credentials.read(provider))?.type;
|
|
55
|
+
const fromEnvironment = stored === undefined ? undefined : (await environmentAuth(provider, process.env, undefined, providers))?.source;
|
|
56
|
+
const shadowed = resolved.source !== undefined && fromEnvironment !== resolved.source ? fromEnvironment : undefined;
|
|
57
|
+
return {
|
|
58
|
+
...(store ? { path: await store.layerOf(provider) } : {}),
|
|
59
|
+
...resolved,
|
|
60
|
+
...(stored !== undefined ? { stored } : {}),
|
|
61
|
+
...(shadowed !== undefined ? { shadowed } : {}),
|
|
62
|
+
};
|
|
63
|
+
},
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* The credential store an agent reads through: its own file, then the user-global one for a provider the PROJECT
|
|
68
|
+
* authenticates no other way (its own file, a provider in code that needs no key, or the environment). A deployment
|
|
69
|
+
* never has the global file, so a global login that outranked, say, an `ANTHROPIC_API_KEY` in `.secrets/.env` would
|
|
70
|
+
* run one credential here and a different one deployed.
|
|
71
|
+
*/
|
|
72
|
+
function layeredStore(auth, providers, warn) {
|
|
73
|
+
const own = () => fastagentCredentialStore(auth.path, { ...(warn ? { warn } : {}) });
|
|
74
|
+
if (auth.fallback === undefined)
|
|
75
|
+
return own();
|
|
76
|
+
const project = modelsOver(own(), providers);
|
|
77
|
+
return fastagentCredentialStore(auth.path, {
|
|
78
|
+
...(warn ? { warn } : {}),
|
|
79
|
+
fallbackPath: auth.fallback,
|
|
80
|
+
projectAuthenticates: async (providerId) => (await project.checkAuth(providerId)) !== undefined,
|
|
81
|
+
});
|
|
82
|
+
}
|
|
@@ -2,39 +2,59 @@
|
|
|
2
2
|
* Signing in to a MODEL PROVIDER, for any front end: {@link login} runs one provider's flow over pi-ai's own
|
|
3
3
|
* `AuthInteraction` and persists the credential through the same {@link fastagentCredentialStore} the runtime reads
|
|
4
4
|
* (one writer, one lock/corruption semantics); {@link loginOptions} is the list a picker offers. `fastagent login` is
|
|
5
|
-
* one front end ({@link loginFlow}: terminal menus, then {@link login});
|
|
5
|
+
* one front end ({@link loginFlow}: terminal menus, then {@link login}); `login --deployment` drives the same flow on a
|
|
6
|
+
* deployed box over a relay (cli/login-relay.ts).
|
|
6
7
|
*/
|
|
7
8
|
import { type AuthInteraction, type CredentialStore, type Provider } from "@earendil-works/pi-ai";
|
|
8
9
|
export type LoginMethod = "oauth" | "api_key";
|
|
9
10
|
/** The user backed out of a prompt/menu, or the flow was aborted — a decision, not a failure. */
|
|
10
11
|
export declare class LoginCancelled extends Error {
|
|
11
12
|
}
|
|
12
|
-
/**
|
|
13
|
+
/** A sign-in that cannot start as asked: an unknown provider, or a choice a caller without menus did not make. */
|
|
14
|
+
export declare class LoginRefused extends Error {
|
|
15
|
+
/** The sign-ins it could be instead, for a caller to choose from. */
|
|
16
|
+
readonly choices: readonly LoginOption[];
|
|
17
|
+
constructor(message: string, choices: readonly LoginOption[]);
|
|
18
|
+
}
|
|
19
|
+
/** One provider sign-in a picker can offer, as pi's `/login` offers it. */
|
|
13
20
|
export interface LoginOption {
|
|
14
21
|
provider: string;
|
|
22
|
+
/** The provider's name, as pi lists it: "OpenAI", "OpenAI Codex (legacy)". */
|
|
23
|
+
name: string;
|
|
15
24
|
method: LoginMethod;
|
|
16
|
-
/**
|
|
25
|
+
/** What signing in this way is called: the provider's own label ("Sign in with ChatGPT"), else pi's. */
|
|
17
26
|
label: string;
|
|
18
27
|
/** An OAuth login backed by a provider subscription. */
|
|
19
28
|
subscription: boolean;
|
|
29
|
+
/** Its key comes from the environment, never from a sign-in: picking it says so. */
|
|
30
|
+
external: boolean;
|
|
20
31
|
/**
|
|
21
|
-
* What the
|
|
22
|
-
*
|
|
32
|
+
* What authenticates the provider now: the kind of credential, and `OAuth`, `stored credential` or an env variable
|
|
33
|
+
* such as `OPENAI_API_KEY`. The store keeps ONE credential per provider, so signing in with the other method
|
|
34
|
+
* replaces a stored one, which a picker shows.
|
|
23
35
|
*/
|
|
24
|
-
|
|
36
|
+
status?: {
|
|
37
|
+
type: LoginMethod;
|
|
38
|
+
source: string;
|
|
39
|
+
};
|
|
40
|
+
/** Why checking what authenticates it failed, when it did. */
|
|
41
|
+
problem?: string;
|
|
25
42
|
}
|
|
26
43
|
/**
|
|
27
|
-
* Every
|
|
28
|
-
*
|
|
44
|
+
* Every sign-in of pi's built-in providers, sorted by name as pi's `/login` lists them, with what authenticates each
|
|
45
|
+
* one here: a credential `credentials` (a credentials file, or the caller's own store) holds, else this process's
|
|
46
|
+
* environment, which a stored credential outranks.
|
|
29
47
|
*/
|
|
30
48
|
export declare function loginOptions(credentials: string | CredentialStore): Promise<LoginOption[]>;
|
|
31
49
|
/** {@link loginOptions} over pi's built-ins plus `providers` (a same id replaces one). Not public: a test seam. */
|
|
32
50
|
export declare function loginOptionsOver(credentials: string | CredentialStore, providers?: readonly Provider[]): Promise<LoginOption[]>;
|
|
51
|
+
/** An option's status as pi's picker writes it after the provider's name. */
|
|
52
|
+
export declare function loginStatusText(option: LoginOption): string;
|
|
33
53
|
export type LoginRequest = {
|
|
34
54
|
/**
|
|
35
|
-
* Stable installation identity (Sign in with ChatGPT requires one). With `authPath` it defaults to
|
|
36
|
-
* beside that file
|
|
37
|
-
*
|
|
55
|
+
* Stable installation identity (Sign in with ChatGPT requires one). With `authPath` it defaults to `device.json`
|
|
56
|
+
* beside that file, written before the flow runs; over a caller's `credentialStore` there is no file to keep it
|
|
57
|
+
* beside, so a flow that needs one fails unless this supplies it.
|
|
38
58
|
*/
|
|
39
59
|
getDeviceId?: () => string;
|
|
40
60
|
provider: string;
|
|
@@ -66,7 +86,6 @@ export interface LoginResult {
|
|
|
66
86
|
* written. Credentials are provider-scoped, so any of the provider's models answers the question the check asks (does
|
|
67
87
|
* the provider refuse the key, HTTP 401); a key the provider rejects is never stored, and the provider's key flow runs
|
|
68
88
|
* again (the provider and method were not the mistake). Progress and outcome go out through `interaction.notify`.
|
|
69
|
-
* A provider an agent's models.json points elsewhere is not this call's: store that key with `fastagentCredentialStore`.
|
|
70
89
|
*
|
|
71
90
|
* Aborting `interaction.signal` at any point, the verification included, rejects with {@link LoginCancelled} and
|
|
72
91
|
* writes no credential (an OAuth device ID, the installation's identity, is kept once created). Every prompt carries a signal that aborts on it, on the prompt's own signal (a callback server
|
|
@@ -75,14 +94,11 @@ export interface LoginResult {
|
|
|
75
94
|
export declare function login(request: LoginRequest): Promise<LoginResult>;
|
|
76
95
|
/** Not public: what the CLI and the tests add to {@link login}. */
|
|
77
96
|
export interface LoginInternals {
|
|
78
|
-
/** Providers added to pi's built-ins (a same id replaces one): a test seam. */
|
|
79
|
-
providers?: readonly Provider[];
|
|
80
97
|
/**
|
|
81
|
-
* The
|
|
82
|
-
*
|
|
83
|
-
* gateway, where the provider's own endpoint would refuse the gateway's key and loop the person through re-entry.
|
|
98
|
+
* The definition's providers, added to pi's built-ins (a same id replaces one): a key is verified against the
|
|
99
|
+
* endpoint its turns will reach, which a provider in code can point at a gateway.
|
|
84
100
|
*/
|
|
85
|
-
|
|
101
|
+
providers?: readonly Provider[];
|
|
86
102
|
/**
|
|
87
103
|
* A model spec to verify an entered key with, when the registry has it as one of this provider's models: the
|
|
88
104
|
* first-run picker's choice, the request the agent is about to make. Otherwise pi's default model for the provider
|
|
@@ -108,28 +124,43 @@ export interface IoOption {
|
|
|
108
124
|
export interface LoginIO {
|
|
109
125
|
/** Single-choice picker. */
|
|
110
126
|
select(message: string, options: IoOption[]): Promise<string | undefined>;
|
|
111
|
-
/**
|
|
127
|
+
/**
|
|
128
|
+
* Free-text or hidden input. `redirect`: what is asked is the address the browser ended on after signing in, or the
|
|
129
|
+
* code its page showed (pi-ai's `manual_code`).
|
|
130
|
+
*/
|
|
112
131
|
prompt(message: string, opts?: {
|
|
113
132
|
hidden?: boolean;
|
|
133
|
+
redirect?: boolean;
|
|
114
134
|
signal?: AbortSignal;
|
|
115
135
|
}): Promise<string | undefined>;
|
|
116
136
|
/** Print an informational line (auth URL, device code, progress). */
|
|
117
137
|
note(message: string): void;
|
|
118
|
-
/** Best-effort open a URL in the browser (printed regardless). */
|
|
119
|
-
openUrl(url: string): void;
|
|
138
|
+
/** Best-effort open a URL in the browser (printed regardless); `userCode` is what a device sign-in enters there. */
|
|
139
|
+
openUrl(url: string, userCode?: string): void;
|
|
120
140
|
}
|
|
121
141
|
/**
|
|
122
|
-
* `fastagent login
|
|
123
|
-
*
|
|
142
|
+
* `fastagent login` in a terminal: ask only what was not given, as pi's `/login` asks it (how to sign in, then the
|
|
143
|
+
* provider; a provider named by its id or its name, then how, when it offers both), then {@link login}.
|
|
124
144
|
*/
|
|
125
145
|
export declare function loginFlow(io: LoginIO, options: {
|
|
126
146
|
authPath: string;
|
|
127
147
|
provider?: string;
|
|
128
148
|
method?: LoginMethod;
|
|
129
|
-
providers?: Provider[];
|
|
149
|
+
providers?: readonly Provider[];
|
|
130
150
|
signal?: AbortSignal;
|
|
151
|
+
/**
|
|
152
|
+
* Where the menus read what authenticates each provider now: the credentials the agent reads (its file over the
|
|
153
|
+
* global one), which can hold more than the file a sign-in writes. Default that file.
|
|
154
|
+
*/
|
|
155
|
+
statusFrom?: CredentialStore;
|
|
131
156
|
/** {@link LoginInternals.verifyWith}. */
|
|
132
157
|
verifyWith?: string;
|
|
133
|
-
/** {@link LoginInternals.agentDir}. */
|
|
134
|
-
agentDir?: string;
|
|
135
158
|
}): Promise<LoginResult>;
|
|
159
|
+
/**
|
|
160
|
+
* The sign-in `given` names, or, with `menus`, the one a person picks; without them a choice not given refuses
|
|
161
|
+
* ({@link LoginRefused}) naming how to give it.
|
|
162
|
+
*/
|
|
163
|
+
export declare function chooseLogin(offered: readonly LoginOption[], given: {
|
|
164
|
+
provider?: string;
|
|
165
|
+
method?: LoginMethod;
|
|
166
|
+
}, menus: LoginIO | undefined): Promise<LoginOption>;
|