@fastagent-sh/fastagent 0.21.1 → 0.22.1
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 -40
- 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 +233 -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 +166 -229
- 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,13 +1,4 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* What a session is SET TO, and what it may be set to. Model and thinking level are ONE setting —
|
|
3
|
-
* which levels exist is a property of the model — so they resolve together, here, and `state()`, the
|
|
4
|
-
* `update({ thinkingLevel })` gate and the per-invoke binding all read this rather than deriving their own.
|
|
5
|
-
*
|
|
6
|
-
* Read-only by design. The durable record may hold a level the current model cannot do; that record
|
|
7
|
-
* is the user's PREFERENCE, so resolving per read restores it when the session returns to a capable
|
|
8
|
-
* model. (It could not be made unrepresentable anyway: `model_change`/`thinking_level_change` are
|
|
9
|
-
* pi's entries, and pi appends them itself.)
|
|
10
|
-
*/
|
|
1
|
+
/** What a session is SET TO, and what it may be set to. */
|
|
11
2
|
import type { ThinkingLevel } from "@earendil-works/pi-agent-core";
|
|
12
3
|
import { type Models } from "@earendil-works/pi-ai";
|
|
13
4
|
import type { SessionManager } from "@earendil-works/pi-coding-agent";
|
|
@@ -20,8 +11,10 @@ export interface OverrideEntryLike {
|
|
|
20
11
|
modelId?: string;
|
|
21
12
|
thinkingLevel?: string;
|
|
22
13
|
}
|
|
23
|
-
/**
|
|
24
|
-
*
|
|
14
|
+
/**
|
|
15
|
+
* The last entry of each kind wins, and a malformed one reads as ABSENT rather than falling through to an earlier
|
|
16
|
+
* record.
|
|
17
|
+
*/
|
|
25
18
|
export declare function lastOverrideEntries(entries: OverrideEntryLike[]): {
|
|
26
19
|
model?: {
|
|
27
20
|
provider: string;
|
|
@@ -50,14 +43,5 @@ export declare function resolveSessionSettings(entries: OverrideEntryLike[], mod
|
|
|
50
43
|
model: AnyModel;
|
|
51
44
|
thinkingLevel: ThinkingLevel;
|
|
52
45
|
}): SessionSettings;
|
|
53
|
-
/**
|
|
54
|
-
* The entries on the session's ACTIVE path, root→leaf — what every last-wins settings read walks.
|
|
55
|
-
* `getBranch()` is exactly that walk: the journal can hold abandoned branches after a leaf move,
|
|
56
|
-
* and reading it flat would run the session on a setting it moved away from.
|
|
57
|
-
*
|
|
58
|
-
* A chain that is not intact THROWS. `getBranch()` stops where a parent is missing and answers the
|
|
59
|
-
* SHORT path, which reads exactly like a short session — every override above the gap gone, the next
|
|
60
|
-
* turn silently on assembly defaults. The caller decides what to do with the fault (state() reports
|
|
61
|
-
* the settings as absent, dispatch answers with a code); what it must not do is guess.
|
|
62
|
-
*/
|
|
46
|
+
/** The entries on the session's ACTIVE path, root→leaf — what every last-wins settings read walks. */
|
|
63
47
|
export declare function activePath(record: SessionManager, from?: string): OverrideEntryLike[];
|
|
@@ -1,8 +1,5 @@
|
|
|
1
1
|
import { clampThinkingLevel, getSupportedThinkingLevels } from "@earendil-works/pi-ai";
|
|
2
|
-
/** Which strings are levels at all — the vocabulary.
|
|
3
|
-
* `getSupportedThinkingLevels`. The `satisfies` anchor keeps this exhaustive against pi's union: a
|
|
4
|
-
* level pi adds becomes a type error here rather than a value `update({ thinkingLevel })` silently
|
|
5
|
-
* rejects. */
|
|
2
|
+
/** Which strings are levels at all — the vocabulary. */
|
|
6
3
|
const ALL_THINKING_LEVELS = {
|
|
7
4
|
off: true,
|
|
8
5
|
minimal: true,
|
|
@@ -13,8 +10,10 @@ const ALL_THINKING_LEVELS = {
|
|
|
13
10
|
max: true,
|
|
14
11
|
};
|
|
15
12
|
export const THINKING_LEVELS = new Set(Object.keys(ALL_THINKING_LEVELS));
|
|
16
|
-
/**
|
|
17
|
-
*
|
|
13
|
+
/**
|
|
14
|
+
* The last entry of each kind wins, and a malformed one reads as ABSENT rather than falling through to an earlier
|
|
15
|
+
* record.
|
|
16
|
+
*/
|
|
18
17
|
export function lastOverrideEntries(entries) {
|
|
19
18
|
let model;
|
|
20
19
|
let modelSeen = false;
|
|
@@ -56,9 +55,8 @@ export function resolveSessionSettings(entries, models, defaults) {
|
|
|
56
55
|
dropped.thinkingLevel = { recorded: level, running: thinkingLevel, known: false };
|
|
57
56
|
}
|
|
58
57
|
else {
|
|
59
|
-
// pi's clamp takes the lowest supported level AT OR ABOVE the recorded one, falling back
|
|
60
|
-
//
|
|
61
|
-
// why `dropped` names both levels rather than reporting a substitution.
|
|
58
|
+
// pi's clamp takes the lowest supported level AT OR ABOVE the recorded one, falling back downward only when
|
|
59
|
+
// nothing is above.
|
|
62
60
|
thinkingLevel = clampThinkingLevel(model, level);
|
|
63
61
|
if (thinkingLevel !== level) {
|
|
64
62
|
dropped.thinkingLevel = { recorded: level, running: thinkingLevel, known: true };
|
|
@@ -72,19 +70,10 @@ export function resolveSessionSettings(entries, models, defaults) {
|
|
|
72
70
|
...(dropped.model || dropped.thinkingLevel ? { dropped } : {}),
|
|
73
71
|
};
|
|
74
72
|
}
|
|
75
|
-
/**
|
|
76
|
-
* The entries on the session's ACTIVE path, root→leaf — what every last-wins settings read walks.
|
|
77
|
-
* `getBranch()` is exactly that walk: the journal can hold abandoned branches after a leaf move,
|
|
78
|
-
* and reading it flat would run the session on a setting it moved away from.
|
|
79
|
-
*
|
|
80
|
-
* A chain that is not intact THROWS. `getBranch()` stops where a parent is missing and answers the
|
|
81
|
-
* SHORT path, which reads exactly like a short session — every override above the gap gone, the next
|
|
82
|
-
* turn silently on assembly defaults. The caller decides what to do with the fault (state() reports
|
|
83
|
-
* the settings as absent, dispatch answers with a code); what it must not do is guess.
|
|
84
|
-
*/
|
|
73
|
+
/** The entries on the session's ACTIVE path, root→leaf — what every last-wins settings read walks. */
|
|
85
74
|
export function activePath(record, from) {
|
|
86
|
-
// `from` asks a different question: the path a leaf move is ABOUT to make active, which a caller
|
|
87
|
-
//
|
|
75
|
+
// `from` asks a different question: the path a leaf move is ABOUT to make active, which a caller validating a patch
|
|
76
|
+
// needs before the move exists.
|
|
88
77
|
const path = record.getBranch(from);
|
|
89
78
|
const root = path[0];
|
|
90
79
|
if (root?.parentId != null) {
|
|
@@ -2,50 +2,27 @@ import { SessionManager } from "@earendil-works/pi-coding-agent";
|
|
|
2
2
|
import type { SessionSummary, SessionUpdateField } from "../../session.ts";
|
|
3
3
|
import { type OverrideEntryLike } from "./session-settings.ts";
|
|
4
4
|
import { type SessionInheritance } from "./session-inheritance.ts";
|
|
5
|
-
/**
|
|
6
|
-
* The session RECORDS, as operations rather than as pi handles.
|
|
7
|
-
*
|
|
8
|
-
* The distinction is the point. `openOrCreate`/`openIfExists` hand out a live `SessionManager` for
|
|
9
|
-
* the two things that genuinely need one — driving a turn, and reading a session's contents — and
|
|
10
|
-
* everything else is a whole-record operation implemented HERE. That line was drawn after the
|
|
11
|
-
* lifecycle work: when the control plane wrote properties by calling pi's append methods itself, it
|
|
12
|
-
* had to know pi's rules to do it (every append advances the single leaf pointer, so order decides
|
|
13
|
-
* where a fork's head lands; `appendSessionInfo` rewrites the name it is given; a record buffers in
|
|
14
|
-
* memory until its first assistant message). Every caller learning those separately is how the same
|
|
15
|
-
* fact ended up half-known in two modules — so they are known once, here.
|
|
16
|
-
*/
|
|
5
|
+
/** The session RECORDS, as operations rather than as pi handles. */
|
|
17
6
|
export interface PiSessionRecordStore {
|
|
18
7
|
openOrCreate(sessionId: string, inherit?: SessionInheritance): Promise<SessionManager>;
|
|
19
|
-
/** OPEN-EXISTING sibling: an unknown session answers undefined, never creates one — sessions are
|
|
20
|
-
* the data plane's monopoly. The READ path (state/entries) and the turn binding use this; the
|
|
21
|
-
* write path does not, because a caller holding a handle is a caller learning pi's rules. */
|
|
22
|
-
openIfExists(sessionId: string): Promise<SessionManager | undefined>;
|
|
23
8
|
/**
|
|
24
|
-
*
|
|
25
|
-
*
|
|
26
|
-
* Each property is its own journal entry — pi has no "append these together" — so a failure
|
|
27
|
-
* partway is a real state, and this answers it rather than pretending a rollback happened. The
|
|
28
|
-
* caller supplies an already-VALIDATED patch (a model resolved to provider+id, a level this model
|
|
29
|
-
* accepts): what belongs here is how a record is written, not what a value means.
|
|
30
|
-
*
|
|
31
|
-
* `undefined` = no such record (it vanished between the caller's check and this call).
|
|
9
|
+
* OPEN-EXISTING sibling: an unknown session answers undefined, never creates one — sessions are the data plane's
|
|
10
|
+
* monopoly.
|
|
32
11
|
*/
|
|
12
|
+
openIfExists(sessionId: string): Promise<SessionManager | undefined>;
|
|
13
|
+
/** Write session properties, in the order pi's leaf pointer requires, and report what LANDED. */
|
|
33
14
|
applyProperties(sessionId: string, writes: PropertyWrites): Promise<AppliedProperties | undefined>;
|
|
34
|
-
/** Every record this store holds, in CALLER ids.
|
|
35
|
-
* `[]` means "no sessions", so it must not double as "could not look". Answers the CONTRACT's row
|
|
36
|
-
* type: the hub forwards it, and a second identical shape here would only be a thing to keep in
|
|
37
|
-
* sync. */
|
|
15
|
+
/** Every record this store holds, in CALLER ids. */
|
|
38
16
|
list(): Promise<SessionSummary[]>;
|
|
39
|
-
/**
|
|
40
|
-
*
|
|
41
|
-
*
|
|
42
|
-
*
|
|
17
|
+
/**
|
|
18
|
+
* Copy `from`'s history up to entry `at` into a new record named `into`, stamped with `provenance` so a repeat of
|
|
19
|
+
* the SAME fork can be recognised as one ({@link forkProvenance}) instead of becoming a second record or an
|
|
20
|
+
* overwrite.
|
|
21
|
+
*/
|
|
43
22
|
fork(from: string, at: string, into: string, provenance: string): Promise<void>;
|
|
44
|
-
/** Destroy a record. `false` = there was none (the caller answers `no_such_session`). */
|
|
45
23
|
delete(sessionId: string): Promise<boolean>;
|
|
46
24
|
}
|
|
47
|
-
/** A validated property patch, in the shape a RECORD takes it
|
|
48
|
-
* provider + id pi's append wants, so this layer never asks what a model spec means. */
|
|
25
|
+
/** A validated property patch, in the shape a RECORD takes it. */
|
|
49
26
|
export interface PropertyWrites {
|
|
50
27
|
name?: string;
|
|
51
28
|
model?: {
|
|
@@ -57,73 +34,30 @@ export interface PropertyWrites {
|
|
|
57
34
|
}
|
|
58
35
|
/** What a property write actually did, and what the record holds after it. */
|
|
59
36
|
interface AppliedProperties {
|
|
60
|
-
/** In write order.
|
|
37
|
+
/** In write order. */
|
|
61
38
|
landed: SessionUpdateField[];
|
|
62
|
-
/** Why the rest stopped, if anything did.
|
|
63
|
-
* already reflects `landed`. */
|
|
39
|
+
/** Why the rest stopped, if anything did. */
|
|
64
40
|
failure?: unknown;
|
|
65
|
-
/**
|
|
66
|
-
*
|
|
41
|
+
/**
|
|
42
|
+
* The record AFTER the writes — what the caller reports, rather than echoing the request. pi rewrites a name
|
|
43
|
+
* (newlines collapse, ends trim), so the request is not what was stored.
|
|
44
|
+
*/
|
|
67
45
|
name?: string;
|
|
68
46
|
leafEntryId?: string;
|
|
69
|
-
/**
|
|
70
|
-
*
|
|
71
|
-
*
|
|
47
|
+
/**
|
|
48
|
+
* The active path after the writes, for a caller that resolves settings against a model registry this layer has no
|
|
49
|
+
* business knowing.
|
|
50
|
+
*/
|
|
72
51
|
path?: OverrideEntryLike[];
|
|
73
52
|
}
|
|
74
|
-
/**
|
|
75
|
-
* A Caller's session id, as a name pi will accept.
|
|
76
|
-
*
|
|
77
|
-
* `SessionManager` enforces `^[A-Za-z0-9](?:[A-Za-z0-9._-]*[A-Za-z0-9])?$` — which no built-in
|
|
78
|
-
* channel satisfies: telegram's `-1001234567890` leads with a dash, feishu and slack keys carry
|
|
79
|
-
* `:` and `/`, and any custom `route()` may mint anything at all.
|
|
80
|
-
*
|
|
81
|
-
* The mapping is INJECTIVE, because two conversations resolving to one record is two rooms sharing a
|
|
82
|
-
* memory. `s` prefix (the pattern demands an alphanumeric head, and prefixing unconditionally is what
|
|
83
|
-
* keeps it injective — a conditional one would map `-a` and `s-a` alike), then each character
|
|
84
|
-
* outside `[A-Za-z0-9.-]` becomes `_XX` / `_uXXXX`, self-describing widths so no two inputs can
|
|
85
|
-
* produce one output. `_` escapes itself for the same reason. A trailing `.` or `-` is legal
|
|
86
|
-
* mid-name but not at the end, so it escapes too.
|
|
87
|
-
*
|
|
88
|
-
* Injective within this encoding — which is only sufficient because this store's records live in
|
|
89
|
-
* their own directory. A name this store did not write draws from the same character set and can
|
|
90
|
-
* still decode: a file called `s42` is also this encoding of `42`, so one directory would make some
|
|
91
|
-
* names ambiguous no matter how this side spells them.
|
|
92
|
-
*
|
|
93
|
-
* Readability is deliberate: `-1001234567890` becomes `s-1001234567890`, so an operator can still
|
|
94
|
-
* tell which room a file belongs to.
|
|
95
|
-
*/
|
|
53
|
+
/** A Caller's session id, as a name pi will accept. */
|
|
96
54
|
export declare function piSessionId(sessionId: string): string;
|
|
97
55
|
/**
|
|
98
|
-
* {@link piSessionId} backwards — what `list()` needs, because a session id belongs to the CALLER and
|
|
99
|
-
*
|
|
100
|
-
* itself), so this is a decode rather than a guess; a name this store did not write (no `s` head, a
|
|
101
|
-
* truncated escape) answers undefined and is left out of the listing rather than reported under a
|
|
102
|
-
* name nobody can dial.
|
|
56
|
+
* {@link piSessionId} backwards — what `list()` needs, because a session id belongs to the CALLER and a record name is
|
|
57
|
+
* storage detail.
|
|
103
58
|
*/
|
|
104
59
|
export declare function callerSessionId(recordId: string): string | undefined;
|
|
105
|
-
/**
|
|
106
|
-
* Disk-backed store under `dir`: restart the process, conversations continue.
|
|
107
|
-
*
|
|
108
|
-
* Lookup is a directory scan of THIS store's own directory, reading ids out of the filenames pi
|
|
109
|
-
* writes (`<timestamp>_<id>.jsonl`) — not `SessionManager.list`, which filters by the cwd recorded in
|
|
110
|
-
* each header and would make a renamed agent directory look like an empty store (see
|
|
111
|
-
* {@link recordFiles}).
|
|
112
|
-
*
|
|
113
|
-
* Records live in a subdirectory of their own, because a name this store did not write can still
|
|
114
|
-
* decode to a Caller id: a file called `s42` beside them is also this encoding of `42`, so a shared
|
|
115
|
-
* directory would answer `42` with a record it does not own. Only this directory is scanned, which
|
|
116
|
-
* makes this encoding's own injectivity sufficient — a record written before this store existed
|
|
117
|
-
* lies outside it and is never read.
|
|
118
|
-
*
|
|
119
|
-
* SCOPE OF "open-or-create": idempotent against a store that is serialized per session, which is what
|
|
120
|
-
* the serving path provides — the single-writer lease is taken before any store call, so no two
|
|
121
|
-
* turns of one conversation reach this at once. What it does NOT do is arbitrate a FIRST open racing
|
|
122
|
-
* across processes: two instances that scan before either writes will both create, and the
|
|
123
|
-
* conversation forks into two records. A horizontally-scaled deployment that wants more owes a lease
|
|
124
|
-
* that spans its instances — an in-process one cannot arbitrate between them, and a file lock here
|
|
125
|
-
* would only look like it could.
|
|
126
|
-
*/
|
|
60
|
+
/** Disk-backed store under `dir`: restart the process, conversations continue. */
|
|
127
61
|
export declare function piSessionRecordStore(options: {
|
|
128
62
|
dir: string;
|
|
129
63
|
cwd?: string;
|