experimental-a2 0.0.0 → 0.1.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.
Files changed (55) hide show
  1. package/CHANGELOG.md +36 -0
  2. package/dist/ai-server.browser.js +2 -2
  3. package/dist/ai-server.d.ts +19 -7
  4. package/dist/ai-server.js +730 -96
  5. package/dist/ai.d.ts +32 -11
  6. package/dist/ai.js +253 -75
  7. package/dist/client.d.ts +1 -1
  8. package/dist/client.js +4 -4
  9. package/dist/{contract-B0kAXoaL.js → contract-CG_adnu_.js} +2 -1
  10. package/dist/{contract-DL8btVd9.d.ts → contract-C_3dIIEU.d.ts} +4 -1
  11. package/dist/devtools-server.browser.js +2 -2
  12. package/dist/devtools-server.js +1 -1
  13. package/dist/http.d.ts +1 -1
  14. package/dist/http.js +4 -3
  15. package/dist/idempotent-replay-BMyHrP0L.js +19 -0
  16. package/dist/index.d.ts +4 -4
  17. package/dist/index.js +1 -1
  18. package/dist/{internal-Dm8Ejnud.js → internal-D6wNxTck.js} +3 -3
  19. package/dist/{log-Dg1I8NRr.d.ts → log-ldf5g8Cx.d.ts} +74 -56
  20. package/dist/log-memory.d.ts +1 -1
  21. package/dist/log-memory.js +173 -96
  22. package/dist/{log-polling-RO7kclzR.js → log-polling-6COoN60V.js} +1 -1
  23. package/dist/log-postgres.d.ts +1 -1
  24. package/dist/log-postgres.js +235 -192
  25. package/dist/log-redis.d.ts +1 -1
  26. package/dist/log-redis.js +453 -263
  27. package/dist/log-sqlite.d.ts +1 -1
  28. package/dist/log-sqlite.js +216 -127
  29. package/dist/otel.d.ts +1 -1
  30. package/dist/otel.js +1 -1
  31. package/dist/react.d.ts +1 -1
  32. package/dist/react.js +1 -1
  33. package/dist/recovery-vercel.d.ts +2 -2
  34. package/dist/recovery-vercel.js +9 -10
  35. package/dist/server-BWffWe5A.js +867 -0
  36. package/dist/server.browser.js +4 -4
  37. package/dist/server.d.ts +42 -27
  38. package/dist/server.js +1 -1
  39. package/dist/{telemetry-C78al20p.d.ts → telemetry-Cso0qyHQ.d.ts} +1 -1
  40. package/dist/{wire-2QpU1EtJ.js → wire-BVsgR8o9.js} +1 -1
  41. package/docs/01-quickstart.mdx +7 -7
  42. package/docs/concepts/01-contracts.mdx +22 -22
  43. package/docs/concepts/02-handlers.mdx +223 -89
  44. package/docs/concepts/03-durability.mdx +191 -112
  45. package/docs/concepts/04-state.mdx +27 -1
  46. package/docs/guides/01-timers.mdx +4 -4
  47. package/docs/guides/02-cancellation.mdx +32 -4
  48. package/docs/guides/05-production.mdx +36 -27
  49. package/docs/guides/06-ai-agents.mdx +151 -70
  50. package/docs/guides/07-devtools.mdx +6 -3
  51. package/docs/guides/08-application-data.mdx +5 -6
  52. package/docs/index.mdx +30 -14
  53. package/docs/reference/01-api.mdx +280 -70
  54. package/package.json +31 -31
  55. package/dist/server-DYsnKTTy.js +0 -780
package/CHANGELOG.md CHANGED
@@ -1,5 +1,41 @@
1
1
  # Changelog
2
2
 
3
+ ## 0.1.0
4
+
5
+ ### Minor Changes
6
+
7
+ - 6a1fb4c: Run each AI SDK model step as one durable A2 generation and execute ready tools
8
+ concurrently. Keep approvals, tool results, retries, queued user turns, and the
9
+ single continuation barrier recoverable through the event log.
10
+ - 48e3b58: Add `experimental-a2/devtools/server`, a read-only HTTP dashboard over durable event,
11
+ processing, failure, and snapshot metadata. Serve the complete browser UI and
12
+ live SSE invalidations from one authenticated handler without a client package
13
+ or separate datastore.
14
+ - 78a9c3f: Persist atomic same-session causes plus event claim, write-once completion, and
15
+ failure summaries inside existing log operations.
16
+ - 352be59: Run handlers concurrently by default with durable per-event claims. Add
17
+ session-scoped `lane` ordering, atomic handler returns for one event or an
18
+ event batch, and a shared `ctx.session` interface with reducer-state reads and
19
+ named immediate appends.
20
+ - 3ca23b1: Add the extensible `experimental-a2/ai` agent protocol and the AI SDK-backed `experimental-a2/ai/server`
21
+ runtime. Let `createReact` bind a shared client whose stable live session
22
+ identities carry optimistic state across route handoffs and accept
23
+ server-rendered event history for a complete first paint. Keep an optimistic
24
+ agent interruption terminal when in-flight generation events arrive after it.
25
+
26
+ ### Patch Changes
27
+
28
+ - 5679f4f: Retry lazy log and recovery initialization after transient failures while still
29
+ deduplicating concurrent attempts. Serialize Postgres schema creation across
30
+ serverless instances so racing cold starts cannot poison a warm instance.
31
+ - 167371a: Publish A2 temporarily as `experimental-a2` and update every public import
32
+ path to match.
33
+ - 0cb72af: Settle event types without registered handlers atomically during append. Skip
34
+ drains, leases, and recovery messages when a session has no pending handler
35
+ work, while preserving append-driven healing for older handled events. Custom
36
+ log adapters now return `{ events, hasPending }` from `A2Log.append()` so this
37
+ decision is part of the atomic append operation.
38
+
3
39
  Notable changes to the `experimental-a2` package. The telemetry span/attribute
4
40
  catalogue (see the API reference) is treated as a contract: renames and
5
41
  additions are breaking for dashboards and are called out here.
@@ -1,4 +1,4 @@
1
1
  //#region src/ai-server.browser.ts
2
- /** a2/ai/server is server-only; agent definitions live in a2/ai. */
3
- throw new Error("a2/ai/server is server-only — a client bundle imported it. Import agent from a2/ai in browser code instead.");
2
+ /** experimental-a2/ai/server is server-only; agent definitions live in experimental-a2/ai. */
3
+ throw new Error("experimental-a2/ai/server is server-only — a client bundle imported it. Import agent from experimental-a2/ai in browser code instead.");
4
4
  //#endregion
@@ -1,8 +1,18 @@
1
- import { i as EventDefs, r as ContractEvent } from "./contract-DL8btVd9.js";
1
+ import { a as EventDefs, r as ContractEvent } from "./contract-C_3dIIEU.js";
2
2
  import { AIEventDefs, AIState, AgentDefinition } from "./ai.js";
3
- import { A2Server, ServerOptions } from "./server.js";
4
- import { Instructions, LanguageModel, ToolLoopAgentSettings, ToolSet, UIMessage, UIMessageChunk } from "ai";
3
+ import { A2Server, PushValidationContext, ServerOptions } from "./server.js";
4
+ import { Instructions, LanguageModel, ToolSet, ToolSet as ToolSet$1, UIMessage, UIMessageChunk, streamText } from "ai";
5
+ //#region src/ai-sdk-step.d.ts
6
+ type StreamTextOptions<T extends ToolSet$1> = Parameters<typeof streamText<T>>[0];
7
+ type ModelStepTimeout<T extends ToolSet$1> = number | Omit<Exclude<StreamTextOptions<T>["timeout"], number | undefined>, "toolMs" | "tools">;
8
+ type ControlledStreamTextSetting = "_internal" | "abortSignal" | "instructions" | "messages" | "model" | "onToolExecutionEnd" | "onToolExecutionStart" | "experimental_onToolCallFinish" | "experimental_onToolCallStart" | "experimental_sandbox" | "experimental_toolCallers" | "experimental_toolApprovalSecret" | "prompt" | "prepareStep" | "stopWhen" | "system" | "tools" | "toolsContext";
9
+ /** AI SDK streamText settings that remain meaningful for one durable step. */
10
+ type AISDKStepSettings<T extends ToolSet$1> = Partial<Omit<StreamTextOptions<T>, ControlledStreamTextSetting | "timeout">> & {
11
+ timeout?: ModelStepTimeout<T>;
12
+ };
13
+ //#endregion
5
14
  //#region src/ai-server.d.ts
15
+ declare function validateAgentPush(context: PushValidationContext): void;
6
16
  type AgentGenerateContext<M extends UIMessage, D extends AIEventDefs<M> & EventDefs, T extends ToolSet> = {
7
17
  request: ContractEvent<D, "ai.generation.requested">;
8
18
  requestId: string;
@@ -33,15 +43,17 @@ type CompactionPolicy<M extends UIMessage, D extends AIEventDefs<M> & EventDefs>
33
43
  messages: M[];
34
44
  }): M[] | Promise<M[]>;
35
45
  };
36
- type AgentGenerationSettings<T extends ToolSet> = Partial<Omit<ToolLoopAgentSettings<never, T>, "id" | "model" | "tools" | "instructions" | "callOptionsSchema" | "prepareCall">>;
46
+ type AgentGenerationSettings<T extends ToolSet> = AISDKStepSettings<T>;
37
47
  type CreateHandlersOptions<M extends UIMessage, D extends AIEventDefs<M> & EventDefs, T extends ToolSet = ToolSet> = {
38
48
  agent: AgentDefinition<M, D>;
39
49
  /** AI SDK model string or provider model, optionally resolved per generation. */
40
50
  model: Resolvable<LanguageModel, AgentResolverContext<M, D>>;
41
51
  tools?: T;
42
52
  instructions?: Resolvable<Instructions | undefined, AgentResolverContext<M, D>>;
43
- /** Passed to AI SDK's ToolLoopAgent. */
53
+ /** Settings for each one-step AI SDK streamText call. */
44
54
  generation?: AgentGenerationSettings<T>;
55
+ /** Maximum model steps in one assistant response. Defaults to 20. */
56
+ maxSteps?: number;
45
57
  /** Replace model generation with an AI SDK UI message chunk stream. */
46
58
  generate?: AgentGenerate<M, D, T>;
47
59
  compaction?: CompactionPolicy<M, D>;
@@ -51,7 +63,7 @@ type CreateHandlersOptions<M extends UIMessage, D extends AIEventDefs<M> & Event
51
63
  maxDelayMs?: number;
52
64
  };
53
65
  };
54
- type CreateAgentServerOptions<M extends UIMessage, D extends AIEventDefs<M> & EventDefs, T extends ToolSet = ToolSet> = CreateHandlersOptions<M, D, T> & Omit<ServerOptions<D>, "contract" | "handlers"> & {
66
+ type CreateAgentServerOptions<M extends UIMessage, D extends AIEventDefs<M> & EventDefs, T extends ToolSet = ToolSet> = CreateHandlersOptions<M, D, T> & Omit<ServerOptions<D>, "contract" | "handlers" | "validatePush"> & {
55
67
  handlers?: ServerOptions<D>["handlers"];
56
68
  };
57
69
  /**
@@ -62,4 +74,4 @@ declare function createHandlers<M extends UIMessage, D extends AIEventDefs<M> &
62
74
  /** Assemble an A2 server with the built-in agent handlers and app extensions. */
63
75
  declare function createAgentServer<M extends UIMessage, D extends AIEventDefs<M> & EventDefs, T extends ToolSet = ToolSet>(options: CreateAgentServerOptions<M, D, T>): A2Server<D>;
64
76
  //#endregion
65
- export { AgentGenerate, AgentGenerateContext, AgentGenerationSettings, AgentResolverContext, CompactionPolicy, CreateAgentServerOptions, CreateHandlersOptions, type Instructions, type LanguageModel, Resolvable, type ToolLoopAgentSettings, type ToolSet, createAgentServer, createHandlers };
77
+ export { AgentGenerate, AgentGenerateContext, AgentGenerationSettings, AgentResolverContext, CompactionPolicy, CreateAgentServerOptions, CreateHandlersOptions, type Instructions, type LanguageModel, Resolvable, type ToolSet, createAgentServer, createHandlers, validateAgentPush };