experimental-ash 0.62.0 → 0.64.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 (85) hide show
  1. package/CHANGELOG.md +24 -0
  2. package/dist/docs/public/advanced/auth-and-route-protection.mdx +26 -20
  3. package/dist/docs/public/advanced/hooks.mdx +8 -2
  4. package/dist/docs/public/advanced/runs-and-streaming.md +6 -3
  5. package/dist/docs/public/advanced/typescript-api.md +32 -0
  6. package/dist/docs/public/channels/ash.mdx +5 -1
  7. package/dist/docs/public/channels/custom.mdx +23 -0
  8. package/dist/docs/public/frontend/README.md +8 -4
  9. package/dist/docs/public/frontend/meta.json +9 -1
  10. package/dist/docs/public/frontend/nextjs.md +4 -4
  11. package/dist/docs/public/frontend/nuxt.md +168 -0
  12. package/dist/docs/public/frontend/sveltekit.md +177 -0
  13. package/dist/docs/public/frontend/use-ash-agent-svelte.md +185 -0
  14. package/dist/docs/public/frontend/use-ash-agent-vue.md +236 -0
  15. package/dist/docs/public/frontend/use-ash-agent.md +14 -14
  16. package/dist/docs/public/getting-started.mdx +2 -0
  17. package/dist/src/channel/websocket-upgrade-server.d.ts +26 -0
  18. package/dist/src/channel/websocket-upgrade-server.js +1 -0
  19. package/dist/src/chunks/use-ash-agent-DzoSHUCb.js +1197 -0
  20. package/dist/src/chunks/use-ash-agent-KtjpWd5l.js +1229 -0
  21. package/dist/src/client/ash-agent-store.d.ts +61 -0
  22. package/dist/src/client/ash-agent-store.js +2 -0
  23. package/dist/src/client/client-error.js +1 -1
  24. package/dist/src/client/index.d.ts +2 -0
  25. package/dist/src/client/index.js +1 -1
  26. package/dist/src/compiled/.vendor-stamp.json +3 -3
  27. package/dist/src/compiled/@chat-adapter/slack/index.js +25 -25
  28. package/dist/src/compiled/@workflow/core/events-consumer.d.ts +8 -0
  29. package/dist/src/compiled/@workflow/core/index.js +2 -2
  30. package/dist/src/compiled/@workflow/core/runtime/constants.d.ts +1 -0
  31. package/dist/src/compiled/@workflow/core/runtime.js +29 -29
  32. package/dist/src/compiled/@workflow/core/version.d.ts +1 -1
  33. package/dist/src/compiled/@workflow/core/workflow.js +1 -1
  34. package/dist/src/compiled/@workflow/errors/error-codes.d.ts +2 -0
  35. package/dist/src/compiled/@workflow/errors/index.d.ts +14 -0
  36. package/dist/src/compiled/@workflow/errors/index.js +1 -1
  37. package/dist/src/compiled/@workflow/world/queue.d.ts +8 -0
  38. package/dist/src/compiled/_chunks/workflow/dist-zpK2YVVA.js +3 -0
  39. package/dist/src/compiled/_chunks/workflow/resume-hook-BFK9mgsb.js +12 -0
  40. package/dist/src/compiled/_chunks/workflow/{sleep-Bg0t23kF.js → sleep-CeJckNg2.js} +1 -1
  41. package/dist/src/compiled/_chunks/workflow/{symbols-u476uwyR.js → symbols-BWCAoPHE.js} +1 -1
  42. package/dist/src/internal/application/package.d.ts +1 -0
  43. package/dist/src/internal/application/package.js +1 -1
  44. package/dist/src/internal/nitro/host/build-application.js +1 -1
  45. package/dist/src/internal/nitro/host/channel-routes.js +2 -2
  46. package/dist/src/internal/workflow-bundle/ash-service-route-output.js +11 -1
  47. package/dist/src/packages/ash-scaffold/src/channels.js +1 -1
  48. package/dist/src/packages/ash-scaffold/src/web-template.js +5 -16
  49. package/dist/src/public/channels/auth.d.ts +45 -3
  50. package/dist/src/public/channels/auth.js +1 -1
  51. package/dist/src/public/channels/index.d.ts +1 -0
  52. package/dist/src/public/channels/index.js +1 -1
  53. package/dist/src/public/channels/slack/inbound.d.ts +3 -1
  54. package/dist/src/public/channels/slack/inbound.js +1 -1
  55. package/dist/src/public/nuxt/dev-server.d.ts +24 -0
  56. package/dist/src/public/nuxt/dev-server.js +1 -0
  57. package/dist/src/public/nuxt/index.d.ts +1 -0
  58. package/dist/src/public/nuxt/index.js +1 -0
  59. package/dist/src/public/nuxt/module.d.ts +31 -0
  60. package/dist/src/public/nuxt/module.js +1 -0
  61. package/dist/src/public/nuxt/routing.d.ts +55 -0
  62. package/dist/src/public/nuxt/routing.js +1 -0
  63. package/dist/src/public/nuxt/vercel-json.d.ts +17 -0
  64. package/dist/src/public/nuxt/vercel-json.js +1 -0
  65. package/dist/src/public/sveltekit/dev-server.d.ts +24 -0
  66. package/dist/src/public/sveltekit/dev-server.js +1 -0
  67. package/dist/src/public/sveltekit/index.d.ts +39 -0
  68. package/dist/src/public/sveltekit/index.js +1 -0
  69. package/dist/src/public/sveltekit/routing.d.ts +32 -0
  70. package/dist/src/public/sveltekit/routing.js +1 -0
  71. package/dist/src/public/sveltekit/vercel-json.d.ts +17 -0
  72. package/dist/src/public/sveltekit/vercel-json.js +1 -0
  73. package/dist/src/react/use-ash-agent.d.ts +5 -27
  74. package/dist/src/react/use-ash-agent.js +1 -2
  75. package/dist/src/svelte/index.d.ts +3 -0
  76. package/dist/src/svelte/index.js +3 -0
  77. package/dist/src/svelte/use-ash-agent.d.ts +80 -0
  78. package/dist/src/svelte/use-ash-agent.js +3 -0
  79. package/dist/src/vue/index.d.ts +3 -0
  80. package/dist/src/vue/index.js +3 -0
  81. package/dist/src/vue/use-ash-agent.d.ts +78 -0
  82. package/dist/src/vue/use-ash-agent.js +3 -0
  83. package/package.json +51 -6
  84. package/dist/src/compiled/_chunks/workflow/dist-C4EHshZE.js +0 -3
  85. package/dist/src/compiled/_chunks/workflow/resume-hook-BlALLgSA.js +0 -12
@@ -0,0 +1,61 @@
1
+ import type { AshAgentReducer } from "#client/reducer.js";
2
+ import type { ClientSession } from "#client/session.js";
3
+ import type { HandleMessageStreamEvent } from "#protocol/message.js";
4
+ import type { ClientAuth, HeadersValue, SendMessageOptions, SendTurnInput, SessionState } from "#client/types.js";
5
+ export type AshAgentStoreStatus = "error" | "ready" | "streaming" | "submitted";
6
+ /**
7
+ * Prepares one outbound turn immediately before the client sends it.
8
+ *
9
+ * Use this to attach fresh, one-turn client state such as page context via
10
+ * `clientContext`.
11
+ */
12
+ export type PrepareSend = (input: SendTurnInput) => SendTurnInput | Promise<SendTurnInput>;
13
+ /**
14
+ * Current projected state for an Ash agent session.
15
+ */
16
+ export interface AshAgentStoreSnapshot<TData> {
17
+ readonly data: TData;
18
+ readonly error: Error | undefined;
19
+ readonly events: readonly HandleMessageStreamEvent[];
20
+ readonly session: SessionState;
21
+ readonly status: AshAgentStoreStatus;
22
+ }
23
+ /**
24
+ * Lifecycle callbacks invoked while the store processes a turn.
25
+ */
26
+ export interface AshAgentStoreCallbacks<TData> {
27
+ readonly onError?: (error: Error) => void;
28
+ readonly onEvent?: (event: HandleMessageStreamEvent) => void;
29
+ readonly onFinish?: (snapshot: AshAgentStoreSnapshot<TData>) => void;
30
+ readonly onSessionChange?: (session: SessionState) => void;
31
+ readonly prepareSend?: PrepareSend;
32
+ }
33
+ export interface AshAgentStoreInit<TData> {
34
+ readonly auth?: ClientAuth;
35
+ readonly headers?: HeadersValue;
36
+ readonly host?: string;
37
+ readonly initialEvents?: readonly HandleMessageStreamEvent[];
38
+ readonly initialSession?: SessionState;
39
+ readonly maxReconnectAttempts?: number;
40
+ readonly optimistic?: boolean;
41
+ readonly reducer: AshAgentReducer<TData>;
42
+ readonly session?: ClientSession;
43
+ }
44
+ /**
45
+ * Framework-agnostic state machine for an Ash agent session.
46
+ *
47
+ * Manages the send/stream lifecycle, optimistic projection, and
48
+ * subscriber notification. Framework integrations (React, Vue) wrap this
49
+ * store with their own reactivity primitives.
50
+ */
51
+ export declare class AshAgentStore<TData> {
52
+ #private;
53
+ constructor(init: AshAgentStoreInit<TData>);
54
+ get snapshot(): AshAgentStoreSnapshot<TData>;
55
+ setCallbacks(callbacks: AshAgentStoreCallbacks<TData>): void;
56
+ subscribe(callback: () => void): () => void;
57
+ sendMessage(message: string, options?: SendMessageOptions): Promise<void>;
58
+ send(input: SendTurnInput, options?: SendMessageOptions): Promise<void>;
59
+ stop(): void;
60
+ reset(): void;
61
+ }
@@ -0,0 +1,2 @@
1
+ import{toError}from"#shared/errors.js";import{Client}from"#client/client.js";var AshAgentStore=class{#e;#t;#n;#r=new Set;#i;#a={};#o;#s;#c;#l=0;#u;#d;#f;#p;#m=`ready`;constructor(e){this.#e=e.session?void 0:()=>new Client({auth:e.auth,headers:e.headers,host:e.host??``,maxReconnectAttempts:e.maxReconnectAttempts}).session(e.initialSession),this.#c=[...e.initialEvents??[]],this.#d=[...this.#c],this.#t=e.optimistic??!0,this.#n=e.reducer,this.#f=e.session??this.#h(),this.#o=this.#E(this.#d),this.#p=this.#D()}get snapshot(){return this.#p}setCallbacks(e){this.#a=e}subscribe(e){return this.#r.add(e),()=>{this.#r.delete(e)}}async sendMessage(e,t){await this.send({message:e},t)}async send(t,n){if(this.#m===`streaming`||this.#m===`submitted`)throw Error(`Ash session is already processing a turn.`);let r=this.#g(),i=new AbortController;this.#i=i,this.#s=void 0,this.#m=`submitted`,this.#O();try{let e=await this.#a.prepareSend?.(t)??t;if(!this.#v(r))return;this.#y(e),this.#b(e),this.#O();let a=await this.#f.send(e,{...n,signal:createAbortSignal(n?.signal,i.signal)}),o=!1;for await(let e of a){if(!this.#v(r))return;o||(o=!0,this.#m=`streaming`),this.#c=[...this.#c,e],this.#x(e),this.#a.onEvent?.(e),this.#S(e),this.#O()}if(!this.#v(r))return;this.#m=this.#s===void 0?`ready`:`error`}catch(t){if(!this.#v(r))return;isAbortError(t)?(this.#m=`ready`,this.#C(toError(t))):(this.#s=toError(t),this.#m=`error`,this.#C(this.#s),this.#a.onError?.(this.#s))}finally{this.#v(r)&&(this.#i=void 0,this.#a.onSessionChange?.(this.#f.state),this.#O(),this.#a.onFinish?.(this.#p))}}stop(){this.#i?.abort()}reset(){this.#_(),this.stop(),this.#i=void 0,this.#f=this.#e?.()??this.#f,this.#c=[],this.#u=void 0,this.#d=[],this.#o=this.#n.initial(),this.#s=void 0,this.#m=`ready`,this.#a.onSessionChange?.(this.#f.state),this.#O()}#h(){if(!this.#e)throw Error(`Cannot create an owned Ash session from an external session.`);return this.#e()}#g(){return this.#l+=1,this.#l}#_(){this.#l+=1}#v(e){return this.#l===e}#y(e){if(!this.#t||e.message===void 0)return;let t=createSubmissionId(),n={createdAt:Date.now(),id:t,message:summarizeUserContent(e.message)};this.#u=n,this.#w({data:{createdAt:n.createdAt,message:n.message,submissionId:n.id},type:`client.message.submitted`})}#b(e){e.inputResponses===void 0||e.inputResponses.length===0||this.#w({data:{createdAt:Date.now(),responses:e.inputResponses},type:`client.input.responded`})}#x(e){if(e.type===`message.received`&&this.#u!==void 0){let t=this.#u.id;this.#u=void 0,this.#T(e=>e.type===`client.message.submitted`&&e.data.submissionId===t,e);return}this.#w(e)}#S(e){let t=toTerminalStreamFailureError(e);t!==void 0&&(this.#m=`error`,this.#C(t),this.#s===void 0&&(this.#s=t,this.#a.onError?.(t)))}#C(e){let t=this.#u;t!==void 0&&(this.#u=void 0,this.#T(e=>e.type===`client.message.submitted`&&e.data.submissionId===t.id,{data:{createdAt:t.createdAt,error:{message:e.message},message:t.message,submissionId:t.id},type:`client.message.failed`}))}#w(e){this.#d=[...this.#d,e],this.#o=this.#n.reduce(this.#o,e)}#T(e,t){let n=!1;this.#d=this.#d.map(r=>!n&&e(r)?(n=!0,t):r),n||(this.#d=[...this.#d,t]),this.#o=this.#E(this.#d)}#E(e){let t=this.#n.initial();for(let n of e)t=this.#n.reduce(t,n);return t}#D(){return{data:this.#o,error:this.#s,events:this.#c,session:this.#f.state,status:this.#m}}#O(){this.#p=this.#D();for(let e of this.#r)e()}};let submissionSequence=0;function createSubmissionId(){let e=globalThis.crypto?.randomUUID;return e===void 0?(submissionSequence+=1,`submission_${submissionSequence.toString()}`):e.call(globalThis.crypto)}function createAbortSignal(e,t){return e?AbortSignal.any([e,t]):t}function summarizeUserContent(e){if(typeof e==`string`)return e;let t=[];for(let n of e){if(n.type===`text`){t.push(n.text);continue}n.type===`file`&&t.push(n.filename?`[file: ${n.filename}]`:`[file]`)}return t.join(`
2
+ `)}function isAbortError(e){return e instanceof Error&&e.name===`AbortError`}function toTerminalStreamFailureError(e){if(e.type!==`session.failed`)return;let t=Error(e.data.message);return t.name=e.data.code,t}export{AshAgentStore};
@@ -1 +1 @@
1
- var ClientError=class extends Error{status;body;constructor(e,t){super(t||`Server returned ${e}.`),this.name=`ClientError`,this.status=e,this.body=t}};export{ClientError};
1
+ import{isObject}from"#shared/guards.js";var ClientError=class extends Error{status;body;constructor(e,t){let n=t||`Server returned ${e}.`;try{let e=JSON.parse(t);isObject(e)&&typeof e.error==`string`&&(n=e.error)}catch{}super(n),this.name=`ClientError`,this.status=e,this.body=t}};export{ClientError};
@@ -1,8 +1,10 @@
1
+ export { AshAgentStore } from "#client/ash-agent-store.js";
1
2
  export { Client } from "#client/client.js";
2
3
  export { ClientError } from "#client/client-error.js";
3
4
  export { defaultMessageReducer } from "#client/message-reducer.js";
4
5
  export { MessageResponse } from "#client/message-response.js";
5
6
  export { ClientSession } from "#client/session.js";
7
+ export type { AshAgentStoreCallbacks, AshAgentStoreInit, AshAgentStoreSnapshot, AshAgentStoreStatus, PrepareSend, } from "#client/ash-agent-store.js";
6
8
  export type { ClientAuth, ClientOptions, HeadersValue, HealthResult, MessageResult, OpenStreamOptions, SendMessageOptions, SendTurnInput, SessionState, TokenValue, } from "#client/types.js";
7
9
  export type { AshAgentReducer, AshAgentReducerEvent, ClientInputRespondedEvent, ClientMessageFailedEvent, ClientMessageSubmittedEvent, } from "#client/reducer.js";
8
10
  export type { AshMessageData, AshDynamicToolPart, AshMessageInputRequest, AshMessage, AshMessageMetadata, AshMessagePart, AshMessageToolMetadata, } from "#client/message-reducer.js";
@@ -1 +1 @@
1
- import{resolveTextToResponse,resolveTextToResponses}from"#channel/resolve-text.js";import{isCurrentTurnBoundaryEvent}from"#protocol/message.js";import{ClientError}from"#client/client-error.js";import{ClientSession}from"#client/session.js";import{Client}from"#client/client.js";import{defaultMessageReducer}from"#client/message-reducer.js";import{MessageResponse}from"#client/message-response.js";import{inputOptionSchema,inputRequestSchema,inputResponseSchema,isInputRequest,isInputResponse}from"#runtime/input/types.js";export{Client,ClientError,ClientSession,MessageResponse,defaultMessageReducer,inputOptionSchema,inputRequestSchema,inputResponseSchema,isCurrentTurnBoundaryEvent,isInputRequest,isInputResponse,resolveTextToResponse,resolveTextToResponses};
1
+ import{resolveTextToResponse,resolveTextToResponses}from"#channel/resolve-text.js";import{isCurrentTurnBoundaryEvent}from"#protocol/message.js";import{Client}from"#client/client.js";import{ClientError}from"#client/client-error.js";import{ClientSession}from"#client/session.js";import{AshAgentStore}from"#client/ash-agent-store.js";import{defaultMessageReducer}from"#client/message-reducer.js";import{MessageResponse}from"#client/message-response.js";import{inputOptionSchema,inputRequestSchema,inputResponseSchema,isInputRequest,isInputResponse}from"#runtime/input/types.js";export{AshAgentStore,Client,ClientError,ClientSession,MessageResponse,defaultMessageReducer,inputOptionSchema,inputRequestSchema,inputResponseSchema,isCurrentTurnBoundaryEvent,isInputRequest,isInputResponse,resolveTextToResponse,resolveTextToResponses};
@@ -22,9 +22,9 @@
22
22
  "turndown": "7.2.4",
23
23
  "@vercel/oidc": "3.5.0",
24
24
  "@vercel/sandbox": "2.1.0",
25
- "@workflow/core": "5.0.0-beta.11",
26
- "@workflow/errors": "5.0.0-beta.6",
27
- "@workflow/world": "5.0.0-beta.6",
25
+ "@workflow/core": "5.0.0-beta.12",
26
+ "@workflow/errors": "5.0.0-beta.7",
27
+ "@workflow/world": "5.0.0-beta.7",
28
28
  "zod": "4.4.3",
29
29
  "zod-validation-error": "5.0.0"
30
30
  },