experimental-a2 0.20.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/CHANGELOG.md +55 -0
- package/README.md +1 -1
- package/dist/{actor-C7b-1arn.d.ts → actor-CqibLgjQ.d.ts} +15 -7
- package/dist/actor-CqibLgjQ.d.ts.map +1 -0
- package/dist/actor-client.d.ts +1 -1
- package/dist/actor-client.js +2 -2
- package/dist/actor-react.d.ts +3 -3
- package/dist/actor-react.js +5 -5
- package/dist/{actor-shared-t7w8xIKP.js → actor-shared-DFET5q16.js} +3 -3
- package/dist/actor-shared-DFET5q16.js.map +1 -0
- package/dist/actor.d.ts +1 -1
- package/dist/actor.js +54 -43
- package/dist/actor.js.map +1 -1
- package/dist/{ai-Cz3hqVhk.d.ts → ai-DAu77CDr.d.ts} +8 -8
- package/dist/{ai-Cz3hqVhk.d.ts.map → ai-DAu77CDr.d.ts.map} +1 -1
- package/dist/{ai-mMiWul1T.js → ai-EEfKyc-z.js} +9 -9
- package/dist/ai-EEfKyc-z.js.map +1 -0
- package/dist/ai-client.d.ts +2 -2
- package/dist/ai-client.js +2 -2
- package/dist/ai-fx.d.ts +4 -2
- package/dist/ai-fx.d.ts.map +1 -1
- package/dist/ai-fx.js +214 -67
- package/dist/ai-fx.js.map +1 -1
- package/dist/{ai-harness-CV6rXbB3.d.ts → ai-harness-DTjkAr2T.d.ts} +2 -2
- package/dist/{ai-harness-CV6rXbB3.d.ts.map → ai-harness-DTjkAr2T.d.ts.map} +1 -1
- package/dist/{ai-harness-Clbg5ei7.js → ai-harness-dQeJaR1t.js} +7 -3
- package/dist/ai-harness-dQeJaR1t.js.map +1 -0
- package/dist/ai-pi.d.ts +1 -1
- package/dist/ai-pi.js +3 -3
- package/dist/ai-pi.js.map +1 -1
- package/dist/ai-react.d.ts +5 -5
- package/dist/ai-react.js +2 -2
- package/dist/ai-server.d.ts +14 -17
- package/dist/ai-server.d.ts.map +1 -1
- package/dist/ai-server.js +86 -73
- package/dist/ai-server.js.map +1 -1
- package/dist/ai.d.ts +2 -2
- package/dist/ai.js +2 -2
- package/dist/{client-BhHLoNKF.js → client-BQS4i_V9.js} +29 -6
- package/dist/client-BQS4i_V9.js.map +1 -0
- package/dist/{client-h_DKFAjj.d.ts → client-CUMbS_38.d.ts} +3 -3
- package/dist/{client-h_DKFAjj.d.ts.map → client-CUMbS_38.d.ts.map} +1 -1
- package/dist/client.d.ts +3 -3
- package/dist/client.js +1 -1
- package/dist/{contract-BYKASlCV.js → contract-CWukt01d.js} +2 -2
- package/dist/contract-CWukt01d.js.map +1 -0
- package/dist/index.d.ts +5 -5
- package/dist/index.js +3 -3
- package/dist/{initial-snapshot-Bx-c0pDP.d.ts → initial-snapshot-D3Lve43o.d.ts} +4 -4
- package/dist/initial-snapshot-D3Lve43o.d.ts.map +1 -0
- package/dist/{internal-CscSY7K_.js → internal-CvsrprnU.js} +40 -16
- package/dist/internal-CvsrprnU.js.map +1 -0
- package/dist/otel.d.ts +1 -1
- package/dist/otel.js +1 -1
- package/dist/otel.js.map +1 -1
- package/dist/{react-BBXgHWFc.d.ts → react-BoHvC3v9.d.ts} +4 -4
- package/dist/{react-BBXgHWFc.d.ts.map → react-BoHvC3v9.d.ts.map} +1 -1
- package/dist/react.d.ts +1 -1
- package/dist/react.js +1 -1
- package/dist/{reducer-CqA59Q6U.d.ts → reducer-CYPHsSmd.d.ts} +2 -2
- package/dist/{reducer-CqA59Q6U.d.ts.map → reducer-CYPHsSmd.d.ts.map} +1 -1
- package/dist/{reducer-BAXc8JyF.js → reducer-CjmvZSAb.js} +2 -2
- package/dist/{reducer-BAXc8JyF.js.map → reducer-CjmvZSAb.js.map} +1 -1
- package/dist/runtime-consumer-CIeL33wj.js +12 -0
- package/dist/runtime-consumer-CIeL33wj.js.map +1 -0
- package/dist/scheduler-qstash.d.ts +2 -2
- package/dist/scheduler-qstash.js +3 -3
- package/dist/scheduler-task-X1SToDjP.js.map +1 -1
- package/dist/scheduler-vercel.d.ts +2 -2
- package/dist/scheduler-vercel.js +3 -3
- package/dist/scheduler-vercel.js.map +1 -1
- package/dist/{server-qyb5aJJG.js → server-DtFrWxi3.js} +412 -116
- package/dist/server-DtFrWxi3.js.map +1 -0
- package/dist/{server-DYAATFuT.d.ts → server-qgez0Xny.d.ts} +108 -41
- package/dist/server-qgez0Xny.d.ts.map +1 -0
- package/dist/server.browser.js +1 -1
- package/dist/server.browser.js.map +1 -1
- package/dist/server.d.ts +4 -4
- package/dist/server.js +2 -2
- package/dist/{session-clear-C-QwTXV1.d.ts → session-clear-D1PFe7xl.d.ts} +2 -2
- package/dist/session-clear-D1PFe7xl.d.ts.map +1 -0
- package/dist/{session-clear-DGI4jTQ5.js → session-clear-wHd5GCpZ.js} +5 -4
- package/dist/session-clear-wHd5GCpZ.js.map +1 -0
- package/dist/store-D0MhBvg6.d.ts +532 -0
- package/dist/store-D0MhBvg6.d.ts.map +1 -0
- package/dist/store-N8PXxDAS.js.map +1 -1
- package/dist/store-codec-DwrWlgQx.js +65 -0
- package/dist/store-codec-DwrWlgQx.js.map +1 -0
- package/dist/store-memory.d.ts +1 -1
- package/dist/store-memory.d.ts.map +1 -1
- package/dist/store-memory.js +406 -225
- package/dist/store-memory.js.map +1 -1
- package/dist/{store-polling-7WJV0YWP.js → store-polling-BZt2Rf3D.js} +2 -2
- package/dist/{store-polling-7WJV0YWP.js.map → store-polling-BZt2Rf3D.js.map} +1 -1
- package/dist/store-postgres.d.ts +1 -1
- package/dist/store-postgres.d.ts.map +1 -1
- package/dist/store-postgres.js +1598 -587
- package/dist/store-postgres.js.map +1 -1
- package/dist/store-presence-polling-JuAy2Ck2.js +111 -0
- package/dist/store-presence-polling-JuAy2Ck2.js.map +1 -0
- package/dist/store-redis-http.d.ts +1 -1
- package/dist/store-redis-http.js +4 -4
- package/dist/store-redis-notify-CsJw_hfD.js +3060 -0
- package/dist/store-redis-notify-CsJw_hfD.js.map +1 -0
- package/dist/store-redis.d.ts +1 -1
- package/dist/store-redis.d.ts.map +1 -1
- package/dist/store-redis.js +4 -5
- package/dist/store-redis.js.map +1 -1
- package/dist/store-sqlite.d.ts +1 -1
- package/dist/store-sqlite.d.ts.map +1 -1
- package/dist/store-sqlite.js +527 -299
- package/dist/store-sqlite.js.map +1 -1
- package/dist/stream-buffer-DrTyiIuo.js +57 -0
- package/dist/stream-buffer-DrTyiIuo.js.map +1 -0
- package/dist/{telemetry-Cyfqo6Qt.d.ts → telemetry-CWwsh-Gx.d.ts} +3 -3
- package/dist/telemetry-CWwsh-Gx.d.ts.map +1 -0
- package/dist/{wire-BKxH1vbP.js → wire-CV-Z7wz-.js} +6 -5
- package/dist/wire-CV-Z7wz-.js.map +1 -0
- package/docs/01-quickstart.mdx +21 -15
- package/docs/02-examples.mdx +1 -1
- package/docs/actors/01-introduction.mdx +13 -2
- package/docs/actors/02-concurrency.mdx +1 -1
- package/docs/agents/01-introduction.mdx +1 -1
- package/docs/agents/02-tools.mdx +12 -11
- package/docs/agents/03-conversations.mdx +36 -25
- package/docs/agents/04-harnesses.mdx +14 -7
- package/docs/client/03-presence.mdx +18 -14
- package/docs/contract/01-events.mdx +2 -2
- package/docs/contract/02-state.mdx +18 -14
- package/docs/contract/03-sessions.mdx +32 -25
- package/docs/index.mdx +29 -24
- package/docs/reference/01-core.mdx +7 -6
- package/docs/reference/02-server.mdx +250 -191
- package/docs/reference/04-ai.mdx +33 -23
- package/docs/reference/05-telemetry.mdx +27 -13
- package/docs/reference/06-errors.mdx +25 -19
- package/docs/reference/meta.ts +1 -1
- package/docs/schedulers/01-overview.mdx +8 -8
- package/docs/schedulers/02-vercel-queues.mdx +2 -2
- package/docs/schedulers/03-qstash.mdx +4 -4
- package/docs/server/01-consumers.mdx +418 -0
- package/docs/server/02-timers.mdx +31 -21
- package/docs/server/03-cancellation.mdx +52 -44
- package/docs/server/04-routes.mdx +4 -1
- package/docs/server/05-sql-projections.mdx +391 -0
- package/docs/server/06-guarantees.mdx +61 -51
- package/docs/stores/01-overview.mdx +3 -3
- package/docs/stores/02-redis.mdx +24 -10
- package/docs/stores/03-redis-http.mdx +8 -6
- package/docs/stores/04-postgres.mdx +65 -14
- package/docs/stores/05-sqlite.mdx +5 -3
- package/docs/upgrades/01-overview.mdx +31 -0
- package/docs/upgrades/78-0-22.mdx +115 -0
- package/docs/upgrades/79-0-21.mdx +165 -0
- package/docs/upgrades/80-0-20.mdx +43 -0
- package/docs/upgrades/81-0-19.mdx +33 -0
- package/docs/upgrades/82-0-18.mdx +33 -0
- package/docs/upgrades/83-0-17.mdx +69 -0
- package/docs/upgrades/meta.ts +3 -0
- package/examples/playground/DEPLOY.md +39 -7
- package/examples/playground/app/a0/chat.test.tsx +2 -2
- package/examples/playground/app/a0/sandbox-log.ts +17 -15
- package/examples/playground/app/a0/sandbox.ts +58 -13
- package/examples/playground/app/a0/server.ts +4 -4
- package/examples/playground/app/a2slack/a2slack.css +1067 -0
- package/examples/playground/app/a2slack/c/[channel]/page.tsx +20 -0
- package/examples/playground/app/a2slack/consumers/agent.ts +63 -0
- package/examples/playground/app/a2slack/consumers/feed.ts +164 -0
- package/examples/playground/app/a2slack/consumers/notify.ts +116 -0
- package/examples/playground/app/a2slack/consumers/search.ts +37 -0
- package/examples/playground/app/a2slack/consumers/triage.ts +31 -0
- package/examples/playground/app/a2slack/consumers/welcome.ts +25 -0
- package/examples/playground/app/a2slack/db/a2.ts +209 -0
- package/examples/playground/app/a2slack/db/index.ts +73 -0
- package/examples/playground/app/a2slack/db/migrations/0000_extensions.sql +4 -0
- package/examples/playground/app/a2slack/db/migrations/0001_workspace.sql +74 -0
- package/examples/playground/app/a2slack/db/migrations/0002_a2.sql +215 -0
- package/examples/playground/app/a2slack/db/migrations/0003_a2_batch.sql +67 -0
- package/examples/playground/app/a2slack/db/migrations/0004_a2_session_event_ids.sql +2 -0
- package/examples/playground/app/a2slack/db/migrations/meta/0000_snapshot.json +18 -0
- package/examples/playground/app/a2slack/db/migrations/meta/0001_snapshot.json +500 -0
- package/examples/playground/app/a2slack/db/migrations/meta/0002_snapshot.json +1159 -0
- package/examples/playground/app/a2slack/db/migrations/meta/0003_snapshot.json +1159 -0
- package/examples/playground/app/a2slack/db/migrations/meta/0004_snapshot.json +1165 -0
- package/examples/playground/app/a2slack/db/migrations/meta/_journal.json +41 -0
- package/examples/playground/app/a2slack/db/queries.ts +263 -0
- package/examples/playground/app/a2slack/db/schema.ts +145 -0
- package/examples/playground/app/a2slack/drills/a2slack.drill.ts +708 -0
- package/examples/playground/app/a2slack/drills/harness.ts +244 -0
- package/examples/playground/app/a2slack/events/route.ts +36 -0
- package/examples/playground/app/a2slack/identity.ts +44 -0
- package/examples/playground/app/a2slack/inbox/route.ts +8 -0
- package/examples/playground/app/a2slack/lag/data/route.ts +8 -0
- package/examples/playground/app/a2slack/lag/page.tsx +101 -0
- package/examples/playground/app/a2slack/lag.ts +73 -0
- package/examples/playground/app/a2slack/layout.tsx +43 -0
- package/examples/playground/app/a2slack/messages/route.ts +17 -0
- package/examples/playground/app/a2slack/model.test.ts +208 -0
- package/examples/playground/app/a2slack/model.ts +369 -0
- package/examples/playground/app/a2slack/models.test.ts +72 -0
- package/examples/playground/app/a2slack/page.tsx +10 -0
- package/examples/playground/app/a2slack/scheduler/route.ts +5 -0
- package/examples/playground/app/a2slack/search/route.ts +40 -0
- package/examples/playground/app/a2slack/search-index.ts +108 -0
- package/examples/playground/app/a2slack/server.test.ts +315 -0
- package/examples/playground/app/a2slack/server.ts +55 -0
- package/examples/playground/app/a2slack/sessions.ts +50 -0
- package/examples/playground/app/a2slack/thread/route.ts +8 -0
- package/examples/playground/app/a2slack/ui/ChannelView.tsx +87 -0
- package/examples/playground/app/a2slack/ui/Composer.tsx +117 -0
- package/examples/playground/app/a2slack/ui/DotsShadow.tsx +42 -0
- package/examples/playground/app/a2slack/ui/Feed.tsx +157 -0
- package/examples/playground/app/a2slack/ui/InboxContext.tsx +63 -0
- package/examples/playground/app/a2slack/ui/InboxView.tsx +82 -0
- package/examples/playground/app/a2slack/ui/Menu.tsx +128 -0
- package/examples/playground/app/a2slack/ui/MessageRow.tsx +314 -0
- package/examples/playground/app/a2slack/ui/NameGate.tsx +35 -0
- package/examples/playground/app/a2slack/ui/SearchContext.tsx +146 -0
- package/examples/playground/app/a2slack/ui/SearchResults.tsx +97 -0
- package/examples/playground/app/a2slack/ui/Shell.tsx +34 -0
- package/examples/playground/app/a2slack/ui/Sidebar.tsx +199 -0
- package/examples/playground/app/a2slack/ui/ThreadPanel.tsx +134 -0
- package/examples/playground/app/a2slack/ui/useInbox.ts +71 -0
- package/examples/playground/app/agent/server.ts +3 -3
- package/examples/playground/app/chat/[chatId]/chat-client.tsx +1 -1
- package/examples/playground/app/chat/server.ts +45 -35
- package/examples/playground/app/components/demo-icons.tsx +7 -0
- package/examples/playground/app/components/demos.tsx +7 -0
- package/examples/playground/app/orders/[orderId]/order-client.tsx +2 -2
- package/examples/playground/app/orders/page.tsx +1 -1
- package/examples/playground/app/orders/server.ts +49 -30
- package/examples/playground/app/recovery/[recoveryId]/recovery-client.tsx +14 -15
- package/examples/playground/app/recovery/page.tsx +4 -4
- package/examples/playground/app/recovery/server.ts +23 -32
- package/examples/playground/drizzle.config.ts +14 -0
- package/examples/playground/lib/store.ts +1 -1
- package/examples/playground/next.config.ts +6 -1
- package/examples/playground/package.json +12 -1
- package/examples/playground/scripts/migrate.mjs +31 -0
- package/examples/playground/vercel.json +9 -0
- package/examples/playground/vitest.drills.config.ts +32 -0
- package/package.json +5 -2
- package/sql/postgres/drizzle-schema.ts +209 -0
- package/sql/postgres/schema.sql +227 -67
- package/src/actor-shared.ts +10 -2
- package/src/actor.ts +101 -71
- package/src/ai-agent.ts +162 -111
- package/src/ai-control-server.ts +8 -8
- package/src/ai-fx.ts +324 -82
- package/src/ai-harness.ts +17 -2
- package/src/ai-pi.ts +2 -2
- package/src/ai-server.ts +2 -2
- package/src/ai.ts +7 -7
- package/src/client.ts +19 -2
- package/src/contract.ts +1 -1
- package/src/deterministic-id.ts +27 -4
- package/src/errors.ts +8 -5
- package/src/idempotent-replay.ts +0 -1
- package/src/index.ts +1 -1
- package/src/internal.ts +57 -16
- package/src/otel.ts +1 -1
- package/src/postgres-schema.ts +98 -57
- package/src/presence-recovery.ts +18 -11
- package/src/presence-tombstones.ts +52 -0
- package/src/push-envelope.ts +20 -0
- package/src/runtime-consumer.ts +10 -0
- package/src/scheduler-task.ts +2 -2
- package/src/scheduler-vercel.ts +1 -1
- package/src/server.browser.ts +1 -1
- package/src/server.ts +819 -218
- package/src/session-socket.ts +1 -1
- package/src/store-codec.ts +66 -0
- package/src/store-memory.ts +604 -286
- package/src/store-postgres.ts +2006 -857
- package/src/store-presence-polling.ts +59 -34
- package/src/store-redis-core.ts +1961 -1333
- package/src/store-redis-notify.ts +76 -26
- package/src/store-redis.ts +2 -3
- package/src/store-sqlite.ts +915 -516
- package/src/store.ts +241 -102
- package/src/telemetry.ts +2 -1
- package/src/wire.ts +1 -0
- package/dist/actor-C7b-1arn.d.ts.map +0 -1
- package/dist/actor-shared-t7w8xIKP.js.map +0 -1
- package/dist/ai-harness-Clbg5ei7.js.map +0 -1
- package/dist/ai-mMiWul1T.js.map +0 -1
- package/dist/client-BhHLoNKF.js.map +0 -1
- package/dist/contract-BYKASlCV.js.map +0 -1
- package/dist/idempotent-replay-JdgMQRRm.js +0 -21
- package/dist/idempotent-replay-JdgMQRRm.js.map +0 -1
- package/dist/initial-snapshot-Bx-c0pDP.d.ts.map +0 -1
- package/dist/internal-CscSY7K_.js.map +0 -1
- package/dist/server-DYAATFuT.d.ts.map +0 -1
- package/dist/server-qyb5aJJG.js.map +0 -1
- package/dist/session-clear-C-QwTXV1.d.ts.map +0 -1
- package/dist/session-clear-DGI4jTQ5.js.map +0 -1
- package/dist/store-CyLUy86v.d.ts +0 -404
- package/dist/store-CyLUy86v.d.ts.map +0 -1
- package/dist/store-codec-DTG0Ftek.js +0 -10
- package/dist/store-codec-DTG0Ftek.js.map +0 -1
- package/dist/store-presence-polling-B1ixeqIS.js +0 -94
- package/dist/store-presence-polling-B1ixeqIS.js.map +0 -1
- package/dist/store-redis-notify-CM0AfLY0.js +0 -2544
- package/dist/store-redis-notify-CM0AfLY0.js.map +0 -1
- package/dist/stream-buffer-Cx7AAPGq.js +0 -23
- package/dist/stream-buffer-Cx7AAPGq.js.map +0 -1
- package/dist/telemetry-Cyfqo6Qt.d.ts.map +0 -1
- package/dist/wire-BKxH1vbP.js.map +0 -1
- package/docs/server/01-handlers.mdx +0 -227
package/dist/ai-server.js
CHANGED
|
@@ -1,11 +1,12 @@
|
|
|
1
|
-
import { i as A2Error } from "./session-clear-
|
|
2
|
-
import { a as reducer, s as validateSync } from "./reducer-
|
|
3
|
-
import {
|
|
1
|
+
import { i as A2Error } from "./session-clear-wHd5GCpZ.js";
|
|
2
|
+
import { a as reducer, s as validateSync } from "./reducer-CjmvZSAb.js";
|
|
3
|
+
import { _ as installAmbientToolScopeStorage, g as failedPreviousAttempt, h as drainSettledHooks, m as consumeSchedulerSendFailure } from "./internal-CvsrprnU.js";
|
|
4
4
|
import { t as boundedCache } from "./bounded-cache-CPHWF-8h.js";
|
|
5
|
-
import { a as CONSOLE_TELEMETRY,
|
|
5
|
+
import { a as CONSOLE_TELEMETRY, n as createServer, o as setServerFetchHooks } from "./server-DtFrWxi3.js";
|
|
6
6
|
import { a as unexplainedAdmission, i as steersOn, n as initialControlState, r as steeringEnd, t as STEERED_REASON } from "./ai-control-CvLbW10B.js";
|
|
7
|
-
import { A as interruptUIMessage, C as reduceToolActivity, D as flattenProgressBatches, E as upsertResponse, M as assertMessageBase, N as restoreMessageBase, O as progressBatches, S as projectedMessage, T as upsertMessage, _ as applyControlChanges,
|
|
8
|
-
import { a as gatewaySessionAffinity, c as harnessLog, f as registerHarnessStates, l as harnessStates, o as harnessDriver } from "./ai-harness-
|
|
7
|
+
import { A as interruptUIMessage, C as reduceToolActivity, D as flattenProgressBatches, E as upsertResponse, M as assertMessageBase, N as restoreMessageBase, O as progressBatches, S as projectedMessage, T as upsertMessage, _ as applyControlChanges, b as findMessage, d as appSlice, f as isAgentContract, g as isUIMessage, h as aiEventId, j as pauseUIMessage, k as progressOwnedBy, m as AI_EVENT_ID_PREFIX, n as agentContract, o as events, p as withAIStorage, u as appReducerOf, v as controlCommit, w as retainMessageBase, y as advanceProjection } from "./ai-EEfKyc-z.js";
|
|
8
|
+
import { a as gatewaySessionAffinity, c as harnessLog, f as registerHarnessStates, l as harnessStates, o as harnessDriver } from "./ai-harness-dQeJaR1t.js";
|
|
9
|
+
import { t as runtimeConsumer } from "./runtime-consumer-CIeL33wj.js";
|
|
9
10
|
import { AsyncLocalStorage } from "node:async_hooks";
|
|
10
11
|
import { asSchema, convertToModelMessages, isToolUIPart, stepCountIs, streamText, toUIMessageStream } from "ai";
|
|
11
12
|
import { Buffer } from "node:buffer";
|
|
@@ -1606,8 +1607,8 @@ const measuredInputTokens = (options) => {
|
|
|
1606
1607
|
//#endregion
|
|
1607
1608
|
//#region src/ai-agent.ts
|
|
1608
1609
|
/**
|
|
1609
|
-
* The server-only implementation of the experimental-a2/ai protocol:
|
|
1610
|
-
*
|
|
1610
|
+
* The server-only implementation of the experimental-a2/ai protocol: its
|
|
1611
|
+
* consumers and `agent()`, its assembly as an ordinary A2 server.
|
|
1611
1612
|
*/
|
|
1612
1613
|
const isAgentIngressEvent = (event) => {
|
|
1613
1614
|
if (event.type !== "ai.control.requested") return false;
|
|
@@ -1658,8 +1659,8 @@ const withModelSettings = (options) => {
|
|
|
1658
1659
|
const instructionTexts = (instructions) => instructions === void 0 ? [] : typeof instructions === "string" ? [instructions] : (Array.isArray(instructions) ? instructions : [instructions]).map((message) => message.content);
|
|
1659
1660
|
const errorMessage = (error) => error instanceof Error ? error.message : String(error);
|
|
1660
1661
|
const toolScopeStorage = installAmbientToolScopeStorage(() => new AsyncLocalStorage());
|
|
1661
|
-
/** Run `fn` with `ctx` as the ambient tool
|
|
1662
|
-
function
|
|
1662
|
+
/** Run `fn` with `ctx` as the ambient tool consumer context, for direct tool tests. */
|
|
1663
|
+
function runWithConsumerContext(ctx, fn) {
|
|
1663
1664
|
return toolScopeStorage.run({ context: ctx }, fn);
|
|
1664
1665
|
}
|
|
1665
1666
|
/** Sessions whose latest step prompt one process keeps for that step's tools. */
|
|
@@ -2118,7 +2119,7 @@ const assertNoLoopOptions = (options) => {
|
|
|
2118
2119
|
throw new TypeError(harness === "ai-sdk" ? `${key} belongs to the harness: agent({ harness: { type: 'ai-sdk', ${key} } })` : `${key} is an option of the AI SDK harness; ${harness}() runs its own loop`);
|
|
2119
2120
|
}
|
|
2120
2121
|
};
|
|
2121
|
-
function
|
|
2122
|
+
function createConsumers(options) {
|
|
2122
2123
|
if (options.model === void 0) throw new TypeError("agent requires model");
|
|
2123
2124
|
if (options.progress?.maxChunks !== void 0 && (!Number.isInteger(options.progress.maxChunks) || options.progress.maxChunks < 1)) throw new TypeError("progress.maxChunks must be a positive integer");
|
|
2124
2125
|
if (options.progress?.maxDelayMs !== void 0 && (!Number.isFinite(options.progress.maxDelayMs) || options.progress.maxDelayMs < 0)) throw new TypeError("progress.maxDelayMs must be a non-negative number");
|
|
@@ -2626,6 +2627,7 @@ function createHandlers(options) {
|
|
|
2626
2627
|
};
|
|
2627
2628
|
const updates = consumeGeneration({
|
|
2628
2629
|
source: harness !== void 0 ? await harness.step({
|
|
2630
|
+
scope: states,
|
|
2629
2631
|
agentName: options.contract.name,
|
|
2630
2632
|
sessionId: ctx.event.sessionId,
|
|
2631
2633
|
requestIndex: ctx.event.index,
|
|
@@ -2742,8 +2744,14 @@ function createHandlers(options) {
|
|
|
2742
2744
|
};
|
|
2743
2745
|
}
|
|
2744
2746
|
};
|
|
2745
|
-
|
|
2746
|
-
|
|
2747
|
+
const contract = options.contract;
|
|
2748
|
+
const { toolLane } = options;
|
|
2749
|
+
return [
|
|
2750
|
+
runtimeConsumer({
|
|
2751
|
+
contract,
|
|
2752
|
+
name: "a2.ai.metadata",
|
|
2753
|
+
types: ["ai.model.metadata.requested"]
|
|
2754
|
+
}).run(async (ctx) => {
|
|
2747
2755
|
const limits = await readModelLimits({
|
|
2748
2756
|
modelId: ctx.event.payload.modelId,
|
|
2749
2757
|
signal: ctx.signal
|
|
@@ -2757,27 +2765,29 @@ function createHandlers(options) {
|
|
|
2757
2765
|
limits
|
|
2758
2766
|
}
|
|
2759
2767
|
};
|
|
2760
|
-
}
|
|
2761
|
-
|
|
2768
|
+
}),
|
|
2769
|
+
runtimeConsumer({
|
|
2770
|
+
contract,
|
|
2771
|
+
name: "a2.ai.control",
|
|
2772
|
+
types: [
|
|
2773
|
+
"ai.control.requested",
|
|
2774
|
+
"ai.work.reported",
|
|
2775
|
+
"ai.session.closed"
|
|
2776
|
+
],
|
|
2762
2777
|
lane: ({ event }) => {
|
|
2778
|
+
if (event.type !== "ai.control.requested") return "a2.ai.control";
|
|
2763
2779
|
const command = event.payload;
|
|
2764
2780
|
if (event.id === "") throw new A2Error("INVALID_PAYLOAD", "AI command IDs must be nonempty");
|
|
2765
2781
|
if (event.id?.startsWith("a2.ai:")) throw new A2Error("INVALID_PAYLOAD", `AI command IDs cannot use the reserved '${AI_EVENT_ID_PREFIX}' prefix`);
|
|
2766
2782
|
if ((command.action === "send" || command.action === "steer") && event.id !== command.message.id) throw new A2Error("INVALID_PAYLOAD", "AI input event ID must equal message.id");
|
|
2767
2783
|
return "a2.ai.control";
|
|
2768
|
-
}
|
|
2769
|
-
|
|
2770
|
-
|
|
2771
|
-
|
|
2772
|
-
|
|
2773
|
-
|
|
2774
|
-
|
|
2775
|
-
"ai.session.closed": {
|
|
2776
|
-
lane: "a2.ai.control",
|
|
2777
|
-
handler: controlHandler
|
|
2778
|
-
},
|
|
2779
|
-
"ai.generation.requested": {
|
|
2780
|
-
lane: "a2.ai.model",
|
|
2784
|
+
}
|
|
2785
|
+
}).run(controlHandler),
|
|
2786
|
+
runtimeConsumer({
|
|
2787
|
+
contract,
|
|
2788
|
+
name: "a2.ai.model",
|
|
2789
|
+
types: ["ai.generation.requested"],
|
|
2790
|
+
lane: () => "a2.ai.model",
|
|
2781
2791
|
abortOn: {
|
|
2782
2792
|
"ai.control.requested": (event, trigger) => event.payload.action === "stop" && event.payload.turnId === trigger.payload.control?.turnId,
|
|
2783
2793
|
"ai.control.committed": (event, trigger) => {
|
|
@@ -2785,32 +2795,34 @@ function createHandlers(options) {
|
|
|
2785
2795
|
return active?.turnId !== trigger.payload.control?.turnId || active?.version !== trigger.payload.control?.version;
|
|
2786
2796
|
},
|
|
2787
2797
|
"ai.session.closed": true
|
|
2788
|
-
}
|
|
2789
|
-
|
|
2790
|
-
|
|
2791
|
-
|
|
2792
|
-
|
|
2793
|
-
|
|
2794
|
-
|
|
2795
|
-
|
|
2796
|
-
|
|
2797
|
-
|
|
2798
|
-
|
|
2799
|
-
|
|
2800
|
-
|
|
2801
|
-
|
|
2802
|
-
|
|
2803
|
-
|
|
2804
|
-
|
|
2805
|
-
|
|
2806
|
-
|
|
2807
|
-
|
|
2808
|
-
|
|
2809
|
-
|
|
2810
|
-
|
|
2811
|
-
|
|
2812
|
-
|
|
2813
|
-
|
|
2798
|
+
}
|
|
2799
|
+
}).run((ctx) => telemetry.span("a2.ai.generate", {
|
|
2800
|
+
"a2.contract": options.contract.name,
|
|
2801
|
+
"a2.session_id": ctx.event.sessionId,
|
|
2802
|
+
"a2.ai.generate.request_id": ctx.event.id,
|
|
2803
|
+
"a2.ai.generate.attempt": ctx.attempt
|
|
2804
|
+
}, async () => {
|
|
2805
|
+
try {
|
|
2806
|
+
return control.settled({
|
|
2807
|
+
ctx,
|
|
2808
|
+
events: await generationHandler(ctx)
|
|
2809
|
+
});
|
|
2810
|
+
} catch (error) {
|
|
2811
|
+
if (control.cancelled({
|
|
2812
|
+
error,
|
|
2813
|
+
signal: ctx.signal
|
|
2814
|
+
})) return control.settled({
|
|
2815
|
+
ctx,
|
|
2816
|
+
events: void 0
|
|
2817
|
+
});
|
|
2818
|
+
throw error;
|
|
2819
|
+
}
|
|
2820
|
+
})),
|
|
2821
|
+
runtimeConsumer({
|
|
2822
|
+
contract,
|
|
2823
|
+
name: "a2.ai.tools",
|
|
2824
|
+
types: ["ai.tool.execution.requested"],
|
|
2825
|
+
...toolLane === void 0 ? {} : { lane: () => toolLane },
|
|
2814
2826
|
abortOn: {
|
|
2815
2827
|
"ai.control.requested": (event, trigger) => event.payload.action === "stop" && event.payload.turnId === trigger.payload.turnId,
|
|
2816
2828
|
"ai.generation.failed": (event, trigger) => event.payload.generationId === trigger.payload.call.generationId,
|
|
@@ -2819,21 +2831,21 @@ function createHandlers(options) {
|
|
|
2819
2831
|
return active?.turnId !== trigger.payload.turnId || active?.version !== trigger.payload.version;
|
|
2820
2832
|
},
|
|
2821
2833
|
"ai.session.closed": true
|
|
2822
|
-
}
|
|
2823
|
-
|
|
2824
|
-
|
|
2825
|
-
|
|
2826
|
-
|
|
2827
|
-
|
|
2828
|
-
|
|
2829
|
-
|
|
2830
|
-
|
|
2831
|
-
|
|
2832
|
-
};
|
|
2834
|
+
}
|
|
2835
|
+
}).run((ctx) => telemetry.span("a2.ai.tool", {
|
|
2836
|
+
"a2.contract": options.contract.name,
|
|
2837
|
+
"a2.session_id": ctx.event.sessionId,
|
|
2838
|
+
"a2.ai.tool.request_id": ctx.event.payload.call.requestId,
|
|
2839
|
+
"a2.ai.tool.call_id": ctx.event.payload.call.toolCallId,
|
|
2840
|
+
"a2.ai.tool.name": ctx.event.payload.call.toolName,
|
|
2841
|
+
"a2.ai.tool.attempt": ctx.attempt
|
|
2842
|
+
}, () => handleToolExecution(ctx)))
|
|
2843
|
+
];
|
|
2833
2844
|
}
|
|
2834
2845
|
function agent(options) {
|
|
2835
2846
|
assertNoLoopOptions(options);
|
|
2836
|
-
|
|
2847
|
+
if (options.toolLane !== void 0 && (typeof options.toolLane !== "string" || options.toolLane.length === 0)) throw new TypeError("toolLane must be a non-empty string");
|
|
2848
|
+
const { model, tools, instructions, maxSteps, harness, toolRecovery, progress, toolLane, ...rest } = options;
|
|
2837
2849
|
let contract;
|
|
2838
2850
|
let serverOptions;
|
|
2839
2851
|
if ("contract" in rest) {
|
|
@@ -2852,7 +2864,7 @@ function agent(options) {
|
|
|
2852
2864
|
serverOptions = remaining;
|
|
2853
2865
|
}
|
|
2854
2866
|
const states = harnessStates();
|
|
2855
|
-
const builtIns =
|
|
2867
|
+
const builtIns = createConsumers({
|
|
2856
2868
|
contract,
|
|
2857
2869
|
model,
|
|
2858
2870
|
harnessStates: states,
|
|
@@ -2865,16 +2877,17 @@ function agent(options) {
|
|
|
2865
2877
|
...progress === void 0 ? {} : { progress },
|
|
2866
2878
|
...toolLane === void 0 ? {} : { toolLane }
|
|
2867
2879
|
});
|
|
2868
|
-
for (const type of Object.keys(handlers ?? {})) if (Object.hasOwn(builtIns, type)) throw new TypeError(`agent handles '${type}' itself`);
|
|
2869
2880
|
const server = createServer({
|
|
2870
2881
|
...serverOptions,
|
|
2871
2882
|
contract,
|
|
2872
|
-
|
|
2873
|
-
...builtIns,
|
|
2874
|
-
...handlers
|
|
2875
|
-
}
|
|
2883
|
+
consumers: [...builtIns, ...serverOptions.consumers ?? []]
|
|
2876
2884
|
});
|
|
2877
2885
|
registerHarnessStates(server, states);
|
|
2886
|
+
const release = (harness === void 0 || harness.type === "ai-sdk" ? void 0 : harnessDriver(harness))?.release;
|
|
2887
|
+
if (release !== void 0) drainSettledHooks.set(server, (sessionId) => release({
|
|
2888
|
+
scope: states,
|
|
2889
|
+
sessionId
|
|
2890
|
+
}));
|
|
2878
2891
|
const applicationEvents = "contract" in rest;
|
|
2879
2892
|
setServerFetchHooks(server, { validateIngress: (context) => validateAgentIngress({
|
|
2880
2893
|
context,
|
|
@@ -2883,6 +2896,6 @@ function agent(options) {
|
|
|
2883
2896
|
return server;
|
|
2884
2897
|
}
|
|
2885
2898
|
//#endregion
|
|
2886
|
-
export { agent,
|
|
2899
|
+
export { agent, runWithConsumerContext };
|
|
2887
2900
|
|
|
2888
2901
|
//# sourceMappingURL=ai-server.js.map
|