@fastagent-sh/fastagent 0.21.0 → 0.22.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 +9 -12
- package/dist/agent.d.ts +24 -37
- package/dist/agent.js +7 -15
- package/dist/atomic-write.d.ts +13 -17
- package/dist/atomic-write.js +18 -29
- package/dist/bind.d.ts +12 -22
- package/dist/bind.js +18 -27
- package/dist/channel.d.ts +11 -33
- package/dist/channels/agentcore-limits.d.ts +2 -13
- package/dist/channels/agentcore-limits.js +2 -13
- package/dist/channels/agentcore-protocol.d.ts +67 -58
- package/dist/channels/agentcore-protocol.js +23 -15
- package/dist/channels/agentcore-service.d.ts +19 -33
- package/dist/channels/agentcore-service.js +176 -59
- package/dist/channels/agentcore.d.ts +39 -33
- package/dist/channels/agentcore.js +90 -224
- package/dist/channels/body.d.ts +15 -2
- package/dist/channels/body.js +24 -2
- package/dist/channels/busy.d.ts +1 -21
- package/dist/channels/busy.js +2 -39
- package/dist/channels/control.d.ts +17 -62
- package/dist/channels/control.js +74 -182
- package/dist/channels/define-channel.d.ts +39 -0
- package/dist/channels/define-channel.js +9 -0
- package/dist/channels/discover.d.ts +10 -31
- package/dist/channels/discover.js +37 -31
- package/dist/channels/feishu/bootstrap-token.d.ts +1 -8
- package/dist/channels/feishu/bootstrap-token.js +7 -23
- package/dist/channels/feishu/card.d.ts +14 -28
- package/dist/channels/feishu/card.js +16 -30
- package/dist/channels/feishu/cloud.d.ts +1 -5
- package/dist/channels/feishu/context-buffer.d.ts +4 -23
- package/dist/channels/feishu/context-buffer.js +8 -31
- package/dist/channels/feishu/crypto.d.ts +10 -5
- package/dist/channels/feishu/crypto.js +12 -19
- package/dist/channels/feishu/feishu-api.d.ts +2 -1
- package/dist/channels/feishu/feishu-api.js +5 -4
- package/dist/channels/feishu/feishu.d.ts +4 -10
- package/dist/channels/feishu/feishu.js +113 -227
- package/dist/channels/feishu/invoke-turn.d.ts +5 -4
- package/dist/channels/feishu/invoke-turn.js +36 -54
- package/dist/channels/feishu/model.d.ts +4 -21
- package/dist/channels/feishu/model.js +1 -8
- package/dist/channels/feishu/normalize.d.ts +2 -10
- package/dist/channels/feishu/normalize.js +7 -42
- package/dist/channels/feishu/parse.d.ts +9 -29
- package/dist/channels/feishu/parse.js +8 -26
- package/dist/channels/feishu/preview.d.ts +12 -14
- package/dist/channels/feishu/preview.js +108 -207
- package/dist/channels/feishu/register-app.d.ts +8 -23
- package/dist/channels/feishu/register-app.js +7 -20
- package/dist/channels/feishu/register-webhook.d.ts +2 -9
- package/dist/channels/feishu/register-webhook.js +9 -33
- package/dist/channels/feishu/scaffold/channel.ts +27 -19
- package/dist/channels/feishu/scaffold/channel.websocket.ts +31 -0
- package/dist/channels/feishu/setup-mode.d.ts +11 -36
- package/dist/channels/feishu/setup-mode.js +7 -26
- package/dist/channels/feishu/ws-ingress.d.ts +1 -2
- package/dist/channels/feishu/ws-ingress.js +6 -8
- package/dist/channels/http.d.ts +15 -15
- package/dist/channels/http.js +19 -9
- package/dist/channels/kit/attachment-path.d.ts +4 -5
- package/dist/channels/kit/attachment-path.js +10 -34
- package/dist/channels/kit/context-buffer.d.ts +14 -21
- package/dist/channels/kit/context-buffer.js +25 -38
- package/dist/channels/kit/delivery.d.ts +35 -0
- package/dist/channels/kit/delivery.js +129 -0
- package/dist/channels/kit/event-stream.d.ts +5 -0
- package/dist/channels/kit/event-stream.js +29 -0
- package/dist/channels/kit/invoke-turn-kit.d.ts +53 -26
- package/dist/channels/kit/invoke-turn-kit.js +89 -32
- package/dist/channels/kit/preview-kit.d.ts +18 -72
- package/dist/channels/kit/preview-kit.js +22 -88
- package/dist/channels/kit/signature.d.ts +3 -9
- package/dist/channels/kit/signature.js +3 -9
- package/dist/channels/kit/state.d.ts +1 -2
- package/dist/channels/kit/state.js +5 -14
- package/dist/channels/kit/stop-command.d.ts +1 -2
- package/dist/channels/kit/stop-command.js +6 -9
- package/dist/channels/kit/tasks.d.ts +1 -1
- package/dist/channels/kit/tasks.js +8 -21
- package/dist/channels/kit/text.d.ts +2 -16
- package/dist/channels/kit/text.js +23 -31
- package/dist/channels/kit/thread-participants.d.ts +4 -17
- package/dist/channels/kit/thread-participants.js +8 -55
- package/dist/channels/kit/transport.d.ts +26 -0
- package/dist/channels/kit/transport.js +20 -0
- package/dist/channels/kit/turn-queue.d.ts +7 -11
- package/dist/channels/kit/turn-queue.js +21 -39
- package/dist/channels/kit/turn-runner.d.ts +32 -18
- package/dist/channels/kit/turn-runner.js +98 -53
- package/dist/channels/kit/turn-store.d.ts +32 -32
- package/dist/channels/kit/turn-store.js +45 -88
- package/dist/channels/lark/lark.d.ts +1 -5
- package/dist/channels/lark/onboard.d.ts +3 -12
- package/dist/channels/lark/onboard.js +3 -13
- package/dist/channels/lark/scaffold/channel.ts +27 -19
- package/dist/channels/lark/scaffold/channel.websocket.ts +31 -0
- package/dist/channels/registration.d.ts +9 -35
- package/dist/channels/registration.js +6 -37
- package/dist/channels/secret.js +2 -5
- package/dist/channels/serve.d.ts +47 -44
- package/dist/channels/serve.js +165 -101
- package/dist/channels/slack/config-api.d.ts +4 -27
- package/dist/channels/slack/config-api.js +5 -34
- package/dist/channels/slack/context-buffer.d.ts +2 -3
- package/dist/channels/slack/context-buffer.js +5 -5
- package/dist/channels/slack/invoke-turn.d.ts +3 -1
- package/dist/channels/slack/invoke-turn.js +25 -34
- package/dist/channels/slack/manifest.js +1 -3
- package/dist/channels/slack/model.d.ts +1 -2
- package/dist/channels/slack/model.js +1 -1
- package/dist/channels/slack/onboard.d.ts +4 -3
- package/dist/channels/slack/onboard.js +8 -11
- package/dist/channels/slack/onboarding-state.d.ts +3 -5
- package/dist/channels/slack/onboarding-state.js +9 -6
- package/dist/channels/slack/parse.d.ts +4 -13
- package/dist/channels/slack/parse.js +7 -28
- package/dist/channels/slack/preview.d.ts +12 -2
- package/dist/channels/slack/preview.js +292 -269
- package/dist/channels/slack/reaction.d.ts +11 -3
- package/dist/channels/slack/reaction.js +19 -8
- package/dist/channels/slack/register-webhook.js +4 -7
- package/dist/channels/slack/scaffold/channel.ts +20 -13
- package/dist/channels/slack/scaffold/slack-send.ts +2 -2
- package/dist/channels/slack/setup-server.d.ts +1 -5
- package/dist/channels/slack/setup-server.js +1 -5
- package/dist/channels/slack/shared-api.d.ts +1 -4
- package/dist/channels/slack/shared-api.js +2 -13
- package/dist/channels/slack/slack-api.d.ts +2 -1
- package/dist/channels/slack/slack-api.js +6 -4
- package/dist/channels/slack/slack.d.ts +11 -14
- package/dist/channels/slack/slack.js +121 -122
- package/dist/channels/sse.d.ts +1 -1
- package/dist/channels/sse.js +1 -1
- package/dist/channels/telegram/context-buffer.d.ts +7 -22
- package/dist/channels/telegram/context-buffer.js +6 -23
- package/dist/channels/telegram/invoke-turn.d.ts +7 -7
- package/dist/channels/telegram/invoke-turn.js +24 -43
- package/dist/channels/telegram/parse.d.ts +24 -51
- package/dist/channels/telegram/parse.js +32 -84
- package/dist/channels/telegram/preview.d.ts +10 -1
- package/dist/channels/telegram/preview.js +79 -100
- package/dist/channels/telegram/register-webhook.js +5 -23
- package/dist/channels/telegram/scaffold/channel.ts +25 -18
- package/dist/channels/telegram/scaffold/telegram-send.ts +6 -4
- package/dist/channels/telegram/telegram-api.d.ts +4 -3
- package/dist/channels/telegram/telegram-api.js +9 -7
- package/dist/channels/telegram/telegram.d.ts +4 -18
- package/dist/channels/telegram/telegram.js +38 -94
- package/dist/channels/telegram/turn-store.d.ts +11 -14
- package/dist/channels/telegram/turn-store.js +8 -6
- package/dist/channels/wait-health.d.ts +4 -6
- package/dist/channels/wait-health.js +10 -14
- package/dist/cli/add-feishu.d.ts +2 -12
- package/dist/cli/add-feishu.js +24 -71
- package/dist/cli/add-slack.d.ts +5 -3
- package/dist/cli/add-slack.js +53 -76
- package/dist/cli/auth-view.d.ts +2 -16
- package/dist/cli/auth-view.js +2 -16
- package/dist/cli/commands/add.js +25 -43
- package/dist/cli/commands/chat.d.ts +0 -1
- package/dist/cli/commands/chat.js +5 -6
- package/dist/cli/commands/deploy/agentcore.js +60 -65
- package/dist/cli/commands/deploy/docker.js +50 -23
- package/dist/cli/commands/deploy/fly.js +23 -61
- package/dist/cli/commands/deploy/railway.js +23 -18
- package/dist/cli/commands/deploy/shared.d.ts +38 -57
- package/dist/cli/commands/deploy/shared.js +40 -59
- package/dist/cli/commands/deploy.d.ts +10 -27
- package/dist/cli/commands/deploy.js +38 -60
- package/dist/cli/commands/destroy.d.ts +4 -0
- package/dist/cli/commands/destroy.js +56 -0
- package/dist/cli/commands/dev.d.ts +2 -1
- package/dist/cli/commands/dev.js +20 -23
- package/dist/cli/commands/info.d.ts +0 -2
- package/dist/cli/commands/info.js +83 -49
- package/dist/cli/commands/init.d.ts +1 -2
- package/dist/cli/commands/init.js +16 -55
- package/dist/cli/commands/invoke.d.ts +0 -1
- package/dist/cli/commands/invoke.js +5 -7
- package/dist/cli/commands/login.d.ts +2 -1
- package/dist/cli/commands/login.js +33 -38
- package/dist/cli/commands/logs.js +3 -4
- package/dist/cli/commands/models.js +1 -5
- package/dist/cli/commands/routine-run.d.ts +6 -0
- package/dist/cli/commands/routine-run.js +47 -0
- package/dist/cli/commands/routine.d.ts +25 -0
- package/dist/cli/commands/routine.js +122 -0
- package/dist/cli/commands/start.d.ts +31 -3
- package/dist/cli/commands/start.js +131 -81
- package/dist/cli/commands/tool.js +26 -12
- package/dist/cli/fail.d.ts +13 -23
- package/dist/cli/fail.js +20 -23
- package/dist/cli/invoke-stream.d.ts +1 -8
- package/dist/cli/kernel.d.ts +6 -38
- package/dist/cli/kernel.js +14 -77
- package/dist/cli/models-view.d.ts +1 -9
- package/dist/cli/models-view.js +11 -22
- package/dist/cli/program.d.ts +5 -6
- package/dist/cli/program.js +120 -157
- package/dist/cli/serve.d.ts +57 -41
- package/dist/cli/serve.js +94 -121
- package/dist/cli/shared.d.ts +15 -61
- package/dist/cli/shared.js +55 -181
- package/dist/cli.js +1 -8
- package/dist/collect.d.ts +6 -0
- package/dist/collect.js +6 -0
- package/dist/core.d.ts +4 -1
- package/dist/core.js +9 -7
- package/dist/declared-secrets.d.ts +55 -0
- package/dist/declared-secrets.js +88 -0
- package/dist/deploy/agentcore/aws-cli.d.ts +91 -0
- package/dist/deploy/agentcore/aws-cli.js +64 -0
- package/dist/deploy/agentcore/destroy.d.ts +51 -0
- package/dist/deploy/agentcore/destroy.js +273 -0
- package/dist/deploy/agentcore/forwarder.js +28 -79
- package/dist/deploy/agentcore/logs.d.ts +2 -18
- package/dist/deploy/agentcore/logs.js +27 -51
- package/dist/deploy/agentcore/plan.d.ts +85 -105
- package/dist/deploy/agentcore/plan.js +152 -314
- package/dist/deploy/agentcore/run.d.ts +28 -28
- package/dist/deploy/agentcore/run.js +227 -306
- package/dist/deploy/agentcore/zip.d.ts +2 -15
- package/dist/deploy/agentcore/zip.js +3 -17
- package/dist/deploy/build-context.d.ts +21 -0
- package/dist/deploy/build-context.js +137 -0
- package/dist/deploy/channel-ingress.d.ts +26 -39
- package/dist/deploy/channel-ingress.js +57 -28
- package/dist/deploy/container.d.ts +20 -34
- package/dist/deploy/container.js +49 -100
- package/dist/deploy/docker/plan.d.ts +12 -11
- package/dist/deploy/docker/plan.js +43 -24
- package/dist/deploy/docker/run.d.ts +22 -25
- package/dist/deploy/docker/run.js +39 -37
- package/dist/deploy/fly/plan.d.ts +15 -44
- package/dist/deploy/fly/plan.js +41 -73
- package/dist/deploy/fly/run.d.ts +16 -51
- package/dist/deploy/fly/run.js +42 -95
- package/dist/deploy/hosts.d.ts +24 -3
- package/dist/deploy/hosts.js +24 -3
- package/dist/deploy/preflight.d.ts +47 -41
- package/dist/deploy/preflight.js +282 -383
- package/dist/deploy/railway/plan.d.ts +16 -42
- package/dist/deploy/railway/plan.js +42 -60
- package/dist/deploy/railway/run.d.ts +30 -68
- package/dist/deploy/railway/run.js +86 -100
- package/dist/deploy/registration-gate.d.ts +6 -13
- package/dist/deploy/residency.d.ts +37 -0
- package/dist/deploy/residency.js +24 -0
- package/dist/deploy/runner.d.ts +10 -9
- package/dist/deploy/runner.js +7 -18
- package/dist/deploy/secrets.d.ts +40 -41
- package/dist/deploy/secrets.js +117 -103
- package/dist/deploy/workspace.d.ts +50 -0
- package/dist/deploy/workspace.js +197 -0
- package/dist/dev-supervisor.d.ts +1 -9
- package/dist/dev-supervisor.js +21 -64
- package/dist/effect-port.d.ts +50 -0
- package/dist/effect-port.js +77 -0
- package/dist/engines/pi/agent-session-factory.d.ts +50 -69
- package/dist/engines/pi/agent-session-factory.js +249 -146
- package/dist/engines/pi/auth.d.ts +15 -11
- package/dist/engines/pi/auth.js +96 -99
- package/dist/engines/pi/chat.d.ts +1 -5
- package/dist/engines/pi/chat.js +2 -14
- package/dist/engines/pi/config.d.ts +53 -51
- package/dist/engines/pi/config.js +83 -92
- package/dist/engines/pi/create.d.ts +60 -75
- package/dist/engines/pi/create.js +108 -141
- package/dist/engines/pi/definition.d.ts +14 -58
- package/dist/engines/pi/definition.js +21 -85
- package/dist/engines/pi/invoke-session.d.ts +5 -25
- package/dist/engines/pi/invoke-session.js +209 -244
- package/dist/engines/pi/login.d.ts +95 -35
- package/dist/engines/pi/login.js +259 -107
- package/dist/engines/pi/machine.d.ts +31 -0
- package/dist/engines/pi/machine.js +106 -0
- package/dist/engines/pi/models.d.ts +70 -89
- package/dist/engines/pi/models.js +188 -81
- package/dist/engines/pi/open.d.ts +65 -53
- package/dist/engines/pi/open.js +129 -69
- package/dist/engines/pi/report.d.ts +3 -12
- package/dist/engines/pi/report.js +2 -16
- package/dist/engines/pi/search-tools.d.ts +1 -9
- package/dist/engines/pi/search-tools.js +26 -57
- package/dist/engines/pi/service.d.ts +2 -16
- package/dist/engines/pi/service.js +2 -16
- package/dist/engines/pi/session-builder.d.ts +5 -9
- package/dist/engines/pi/session-builder.js +44 -82
- package/dist/engines/pi/session-control.js +286 -269
- package/dist/engines/pi/session-effects.d.ts +14 -0
- package/dist/engines/pi/session-effects.js +30 -0
- package/dist/engines/pi/session-inheritance.d.ts +9 -18
- package/dist/engines/pi/session-inheritance.js +103 -160
- package/dist/engines/pi/session-markers.d.ts +31 -30
- package/dist/engines/pi/session-markers.js +26 -25
- package/dist/engines/pi/session-settings.d.ts +6 -22
- package/dist/engines/pi/session-settings.js +10 -21
- package/dist/engines/pi/session-store.d.ts +26 -92
- package/dist/engines/pi/session-store.js +96 -310
- package/dist/engines/pi/tool-context.d.ts +17 -45
- package/dist/engines/pi/tool-context.js +7 -26
- package/dist/engines/pi/tool.d.ts +45 -36
- package/dist/engines/pi/tool.js +43 -57
- package/dist/engines/pi/turn-kit.d.ts +14 -52
- package/dist/engines/pi/turn-kit.js +18 -67
- package/dist/engines/pi/wake-tool.d.ts +2 -10
- package/dist/engines/pi/wake-tool.js +7 -27
- package/dist/env.d.ts +27 -28
- package/dist/env.js +45 -50
- package/dist/index.js +0 -2
- package/dist/lark.d.ts +1 -2
- package/dist/lark.js +1 -2
- package/dist/loader.d.ts +14 -55
- package/dist/loader.js +24 -43
- package/dist/log.d.ts +2 -12
- package/dist/log.js +3 -24
- package/dist/node.d.ts +2 -15
- package/dist/node.js +2 -18
- package/dist/observe.d.ts +2 -8
- package/dist/open-url.d.ts +1 -1
- package/dist/open-url.js +1 -1
- package/dist/paths.d.ts +70 -134
- package/dist/paths.js +165 -232
- package/dist/pi.d.ts +4 -6
- package/dist/pi.js +3 -3
- package/dist/proxy.d.ts +16 -6
- package/dist/proxy.js +52 -16
- package/dist/runtime.d.ts +18 -12
- package/dist/runtime.js +18 -11
- package/dist/scaffold/add-channel.d.ts +14 -31
- package/dist/scaffold/add-channel.js +48 -112
- package/dist/scaffold/init.d.ts +9 -31
- package/dist/scaffold/init.js +45 -138
- package/dist/scaffold/templates/env.example +6 -4
- package/dist/scaffold/templates/fastagent.config.ts +36 -0
- package/dist/scaffold/templates.d.ts +3 -3
- package/dist/scaffold/templates.js +5 -8
- package/dist/scaffold/vendor-skill.d.ts +2 -5
- package/dist/scaffold/vendor-skill.js +19 -29
- package/dist/schedule/cron.d.ts +9 -5
- package/dist/schedule/cron.js +9 -11
- package/dist/schedule/discover.d.ts +12 -12
- package/dist/schedule/discover.js +43 -34
- package/dist/schedule/routine.d.ts +43 -0
- package/dist/schedule/routine.js +32 -0
- package/dist/schedule/run.d.ts +55 -0
- package/dist/schedule/run.js +146 -0
- package/dist/schedule/scheduler.d.ts +44 -55
- package/dist/schedule/scheduler.js +291 -265
- package/dist/schedule/state.d.ts +105 -10
- package/dist/schedule/state.js +293 -19
- package/dist/schedule/wake-alarm.d.ts +10 -23
- package/dist/schedule/wake-alarm.js +91 -121
- package/dist/schedule/wakeups.d.ts +23 -39
- package/dist/schedule/wakeups.js +33 -75
- package/dist/secrets-gate.d.ts +32 -0
- package/dist/secrets-gate.js +33 -0
- package/dist/service.d.ts +137 -98
- package/dist/service.js +250 -252
- package/dist/session-remote.d.ts +33 -44
- package/dist/session-remote.js +203 -192
- package/dist/session.d.ts +153 -228
- package/dist/session.js +33 -55
- package/dist/tunnel.d.ts +8 -36
- package/dist/tunnel.js +24 -65
- package/dist/version.d.ts +2 -2
- package/dist/version.js +2 -2
- package/package.json +10 -16
- package/dist/channels/agentcore-state.d.ts +0 -77
- package/dist/channels/agentcore-state.js +0 -276
- package/dist/channels/github/github.d.ts +0 -31
- package/dist/channels/github/github.js +0 -89
- package/dist/channels/github/scaffold/channel.ts +0 -25
- package/dist/cli/commands/attach.d.ts +0 -108
- package/dist/cli/commands/attach.js +0 -637
- package/dist/cli/commands/fire.d.ts +0 -7
- package/dist/cli/commands/fire.js +0 -38
- package/dist/cli/commands/schedule.d.ts +0 -12
- package/dist/cli/commands/schedule.js +0 -87
- package/dist/github.d.ts +0 -3
- package/dist/github.js +0 -2
- package/dist/scaffold/templates/fastagent.config.mjs +0 -23
- package/dist/schedule/audit.d.ts +0 -18
- package/dist/schedule/audit.js +0 -57
- package/dist/schedule/schedule.d.ts +0 -35
- package/dist/schedule/schedule.js +0 -23
|
@@ -1,71 +1,41 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* The shared definition-aware session builder: open a directory's assembled agent as a resident pi
|
|
3
|
-
* `AgentSessionRuntime`, running the SAME agent that `dev`/`start` serve.
|
|
4
|
-
* one consumer: the session control plane was built on the invoke pipeline instead of this resident
|
|
5
|
-
* runtime, so control-plane observation covers invoke-driven runs and deliberately not chat sessions
|
|
6
|
-
* (docs/design/session-control.md §10, §15).
|
|
7
|
-
*
|
|
8
|
-
* FIDELITY: pi's vanilla discovery (AGENTS.md walk to repo root, machine-global skills/extensions)
|
|
9
|
-
* is suppressed; fastagent's assembly is INJECTED into pi's session:
|
|
10
|
-
* - prompt → systemPromptOverride = base + instructions ONLY; pi appends the skill section and env
|
|
11
|
-
* (cwd) itself (including it here would duplicate it).
|
|
12
|
-
* - skills → skillsOverride (fastagent's skills, for the section + invocation).
|
|
13
|
-
* - tools → all seven coding tools plus authored tools through pi's customTools path; pi's builtin
|
|
14
|
-
* copies are suppressed, and the injected set survives /new, /resume, and fork.
|
|
15
|
-
* - models → a ModelRuntime with builtins only (`modelsPath: null`, no availability network), so
|
|
16
|
-
* the model surface equals serving's `createPiModels()` — pi's machine-global
|
|
17
|
-
* models.json does not leak in.
|
|
18
|
-
* - auth → fastagent's credential store at the AGENT's auth path (same resolution as the
|
|
19
|
-
* serving opener: `--auth-path`/`FASTAGENT_AUTH_PATH`, else `<root>/.secrets/auth.json`).
|
|
20
|
-
* pi's TUI `/login` writes through the injected store into the SAME file, so `fastagent
|
|
21
|
-
* login` and chat share one credential lifecycle. pi's `~/.pi` auth is not consulted.
|
|
22
|
-
*
|
|
23
|
-
* `getAgentDir()` (pi's `~/.pi`) remains ONLY for presentation-level TUI settings (theme,
|
|
24
|
-
* keybindings) — user preference, not agent definition; no auth or discovery flows from it.
|
|
25
|
-
*
|
|
26
|
-
* Cross-workspace session switches are rejected: `.env` is process-global, so one runtime is one
|
|
27
|
-
* workspace.
|
|
3
|
+
* `AgentSessionRuntime`, running the SAME agent that `dev`/`start` serve.
|
|
28
4
|
*/
|
|
29
5
|
import { existsSync, readFileSync } from "node:fs";
|
|
30
6
|
import { resolve } from "node:path";
|
|
31
7
|
import { NodeExecutionEnv } from "@earendil-works/pi-agent-core/node";
|
|
32
|
-
import { SessionManager, createAgentSessionRuntime, createAgentSessionServices, getAgentDir, } from "@earendil-works/pi-coding-agent";
|
|
8
|
+
import { SessionManager, SettingsManager, createAgentSessionRuntime, createAgentSessionServices, getAgentDir, } from "@earendil-works/pi-coding-agent";
|
|
33
9
|
import { bindPiSession, definitionResourceLoaderOptions, reportExtensionErrors } from "./agent-session-factory.js";
|
|
10
|
+
import { readMachine } from "./machine.js";
|
|
34
11
|
import { resolveModel } from "./config.js";
|
|
35
12
|
import { assembleSystemPrompt, piBasePrompt } from "./create.js";
|
|
36
13
|
import { canonicalPath, loadAgentDefinition, loadExtensionPaths } from "./definition.js";
|
|
37
|
-
import { createPiModelRuntime } from "./models.js";
|
|
38
|
-
import { reportModuleLoadFailures } from "../../loader.js";
|
|
14
|
+
import { DEFAULT_THINKING_LEVEL, createPiModelRuntime } from "./models.js";
|
|
39
15
|
import { reportFindingsIfChanged, reportToolCollisions } from "./report.js";
|
|
40
16
|
import { resolveAgentAssembly } from "./open.js";
|
|
41
17
|
/**
|
|
42
|
-
* Build pi's interactive runtime driven by fastagent's assembled agent (model, prompt, tools,
|
|
43
|
-
*
|
|
44
|
-
* assembly — the fidelity-critical part — is inspectable and reusable without launching a TUI.
|
|
18
|
+
* Build pi's interactive runtime driven by fastagent's assembled agent (model, prompt, tools, skills, and auth
|
|
19
|
+
* resolved exactly as the serving opener does).
|
|
45
20
|
*/
|
|
46
|
-
export async function buildAgentSessionRuntime(dir, options = {},
|
|
47
|
-
/** Session backend. Defaults to pi's project-scoped store; tests inject SessionManager.inMemory(). */
|
|
48
|
-
sessionManager) {
|
|
21
|
+
export async function buildAgentSessionRuntime(dir, options = {}, sessionManager) {
|
|
49
22
|
async function resolveAssembly(cwd) {
|
|
50
|
-
// The shared front half — the SAME placement/config/model-spec/tool/auth resolution the serving
|
|
51
|
-
//
|
|
52
|
-
|
|
53
|
-
// and project context to Pi, which appends skills/cwd. `tools` already includes search_tools.
|
|
54
|
-
const { config, modelSpec, agentDir, authPath, stateRoot, tools, toolCollisions, toolFailures } = await resolveAgentAssembly(cwd, options);
|
|
23
|
+
// The shared front half — the SAME placement/config/model-spec/tool/auth resolution the serving opener uses
|
|
24
|
+
// (open.ts).
|
|
25
|
+
const { config, modelSpec, agentDir, auth, stateRoot, tools, toolCollisions } = await resolveAgentAssembly(cwd, options);
|
|
55
26
|
reportToolCollisions(toolCollisions);
|
|
56
|
-
|
|
57
|
-
//
|
|
58
|
-
//
|
|
59
|
-
|
|
60
|
-
const modelRuntime = await createPiModelRuntime({ authPath, agentDir, stateRoot });
|
|
27
|
+
// ONE hub owns model resolution AND per-request auth.
|
|
28
|
+
// The fallback layer travels too: `chat` resolving credentials differently from dev/start/invoke is exactly the
|
|
29
|
+
// divergence the layer exists to remove.
|
|
30
|
+
const modelRuntime = await createPiModelRuntime({ auth, agentDir, stateRoot });
|
|
61
31
|
const env = new NodeExecutionEnv({ cwd });
|
|
62
32
|
const definition = await loadAgentDefinition(agentDir, { cwd, env });
|
|
63
33
|
reportFindingsIfChanged(definition.dir, definition);
|
|
64
|
-
// Assembly-time, like serving's: this whole function is memoized, so the scan and its warnings
|
|
65
|
-
//
|
|
34
|
+
// Assembly-time, like serving's: this whole function is memoized, so the scan and its warnings happen once per
|
|
35
|
+
// runtime rather than per session rebuild (/new, /resume, fork).
|
|
66
36
|
const extensionPaths = await loadExtensionPaths(agentDir, { cwd, env });
|
|
67
|
-
// base + instructions ONLY — pi appends the skill section and env (cwd) itself (including
|
|
68
|
-
//
|
|
37
|
+
// base + instructions ONLY — pi appends the skill section and env (cwd) itself (including them here would
|
|
38
|
+
// duplicate them).
|
|
69
39
|
const systemPrompt = assembleSystemPrompt({
|
|
70
40
|
base: piBasePrompt({ tools, persona: definition.persona }),
|
|
71
41
|
contextFiles: definition.contextFiles,
|
|
@@ -81,16 +51,12 @@ sessionManager) {
|
|
|
81
51
|
systemPrompt,
|
|
82
52
|
};
|
|
83
53
|
}
|
|
84
|
-
// pi calls the factory again on /new, /resume, switch, and fork.
|
|
85
|
-
// ESM-cached, so treating same-cwd rebuilds as hot reload would yield a half-fresh agent (fresh
|
|
86
|
-
// AGENTS.md/skills, stale config/tools). Keep the runtime a coherent startup snapshot: restart to
|
|
87
|
-
// load edits. And keep it workspace-scoped — `.env` is process-global, so a switch to another cwd
|
|
88
|
-
// would leak env or require mutating global env at runtime.
|
|
54
|
+
// pi calls the factory again on /new, /resume, switch, and fork.
|
|
89
55
|
const rootCwd = canonicalPath(dir);
|
|
90
56
|
let assembly;
|
|
91
57
|
const assemblyFor = (cwd) => {
|
|
92
|
-
// Canonical paths: pi's process.cwd() fallback is a realpath, so a symlinked workspace would
|
|
93
|
-
//
|
|
58
|
+
// Canonical paths: pi's process.cwd() fallback is a realpath, so a symlinked workspace would otherwise mismatch a
|
|
59
|
+
// non-realpath rootCwd.
|
|
94
60
|
const activeCwd = canonicalPath(cwd);
|
|
95
61
|
if (activeCwd !== rootCwd) {
|
|
96
62
|
throw workspaceScopeError(activeCwd);
|
|
@@ -100,42 +66,43 @@ sessionManager) {
|
|
|
100
66
|
};
|
|
101
67
|
const createRuntime = async ({ cwd, sessionManager, sessionStartEvent }) => {
|
|
102
68
|
const { modelRuntime, modelSpec, thinkingLevel, definition, extensionPaths, tools, systemPrompt } = await assemblyFor(cwd);
|
|
103
|
-
// Per session, NOT memoized with the assembly
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
// through the assembly; only the resource loader is rebuilt.
|
|
107
|
-
const services = await createAgentSessionServices({
|
|
69
|
+
// Per session, NOT memoized with the assembly.
|
|
70
|
+
const machine = await readMachine(cwd);
|
|
71
|
+
const loaded = await createAgentSessionServices({
|
|
108
72
|
cwd,
|
|
109
|
-
// fastagent's models + auth hub replaces pi's default (~/.pi-backed) one — the auth
|
|
110
|
-
//
|
|
73
|
+
// fastagent's models + auth hub replaces pi's default (~/.pi-backed) one — the auth unification point; see the
|
|
74
|
+
// header.
|
|
111
75
|
modelRuntime,
|
|
112
|
-
//
|
|
113
|
-
//
|
|
114
|
-
|
|
76
|
+
// PACKAGELESS, for the loader: fastagent never installs a pi package (machine.ts). Handed pi's own settings, the
|
|
77
|
+
// loader resolves `packages` itself — installing a missing one, and failing chat's start when that fails.
|
|
78
|
+
settingsManager: machine.settingsManager(),
|
|
79
|
+
// Chat's assembly is fixed for the life of the runtime (a rebuild makes a new one), so these read constants.
|
|
115
80
|
resourceLoaderOptions: definitionResourceLoaderOptions({
|
|
116
81
|
systemPrompt: () => systemPrompt,
|
|
117
82
|
skills: () => definition.skills,
|
|
83
|
+
machine,
|
|
118
84
|
extensionPaths,
|
|
119
85
|
}),
|
|
120
86
|
});
|
|
87
|
+
// ...while the SESSION keeps pi's own file-backed settings, so `/settings` in the TUI still saves. pi persists by
|
|
88
|
+
// re-reading the file under its lock and writing only the fields that changed, so `packages` there is untouched.
|
|
89
|
+
const services = { ...loaded, settingsManager: SettingsManager.create(cwd, loaded.agentDir) };
|
|
121
90
|
reportExtensionErrors(services);
|
|
122
|
-
// AFTER the services, because an extension may be what defines the model.
|
|
123
|
-
// is pi's documented way for one to add providers, and extensions do not execute until the
|
|
124
|
-
// services are built — resolving first fails a definition whose configured model comes from its
|
|
125
|
-
// own extension with a bare "unknown model".
|
|
91
|
+
// AFTER the services, because an extension may be what defines the model.
|
|
126
92
|
const model = resolveModel(modelRuntime, modelSpec);
|
|
127
|
-
// The same bind serving performs, minus the activation record: pi's chat session has nowhere to
|
|
128
|
-
//
|
|
129
|
-
// NOT bound to the host here: InteractiveMode.bindCurrentSessionExtensions() calls
|
|
130
|
-
// session.bindExtensions() with the TUI's uiContext, abort handler and command actions — binding
|
|
131
|
-
// here too would emit session_start twice per chat, so an extension opening a resource on start
|
|
132
|
-
// would open two.
|
|
93
|
+
// The same bind serving performs, minus the activation record: pi's chat session has nowhere to put one, which is
|
|
94
|
+
// the documented divergence.
|
|
133
95
|
const result = await bindPiSession({
|
|
134
96
|
services,
|
|
135
97
|
sessionManager,
|
|
136
98
|
sessionStartEvent,
|
|
137
99
|
model,
|
|
138
|
-
thinkingLevel
|
|
100
|
+
// The SPELLING serving uses (agent-session-factory), never `thinkingLevel` alone: pi resolves an ABSENT level
|
|
101
|
+
// from its own settings, which every posture now reads from the machine (`~/.pi/agent/settings.json`). A
|
|
102
|
+
// `/thinking` + Ctrl+S saved for coding would otherwise silently make this the one posture that answers at a
|
|
103
|
+
// different reasoning effort than the deployment does — the effort is the DEFINITION's (`thinkingLevel` in
|
|
104
|
+
// fastagent.config.ts), unlike the engine knobs around it.
|
|
105
|
+
thinkingLevel: thinkingLevel ?? DEFAULT_THINKING_LEVEL,
|
|
139
106
|
tools,
|
|
140
107
|
// A tool must see one spelling of the workspace, including when opened through a symlink.
|
|
141
108
|
cwd: rootCwd,
|
|
@@ -172,12 +139,7 @@ function readSessionHeaderCwd(sessionPath) {
|
|
|
172
139
|
}
|
|
173
140
|
return undefined;
|
|
174
141
|
}
|
|
175
|
-
/**
|
|
176
|
-
* Keep resume/import inside the runtime's single workspace, deciding BEFORE delegating to pi. The
|
|
177
|
-
* process is chdir'd into rootCwd, so a session with no cwd header already lands on rootCwd. The gap
|
|
178
|
-
* is a session that EXPLICITLY records a different cwd: pi would bind it and the factory would reject
|
|
179
|
-
* it — but only AFTER tearing the live session down. Reject such a switch up front.
|
|
180
|
-
*/
|
|
142
|
+
/** Keep resume/import inside the runtime's single workspace, deciding BEFORE delegating to pi. */
|
|
181
143
|
function enforceWorkspaceScopedSessionSwitches(runtime, rootCwd) {
|
|
182
144
|
const rejectForeignTarget = (sessionPath, cwdOverride) => {
|
|
183
145
|
const target = cwdOverride !== undefined ? canonicalPath(cwdOverride) : readSessionHeaderCwd(sessionPath);
|