experimental-ash 0.3.0-alpha.8 → 0.3.0-alpha.9

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.
@@ -1,6 +1,7 @@
1
1
  import type { ContextAccessor } from "../context/key.js";
2
2
  import type { ContextProvider } from "../context/provider.js";
3
3
  import type { StepInput } from "../harness/types.js";
4
+ import type { AttachmentRef } from "../internal/attachments/refs.js";
4
5
  import type { HandleMessageStreamEvent } from "../protocol/message.js";
5
6
  import type { DeliverPayload } from "./types.js";
6
7
  /**
@@ -46,6 +47,28 @@ type EventHandler<T extends HandleMessageStreamEvent["type"], TCtx extends Chann
46
47
  export type ChannelEventHandlers<TCtx extends ChannelAdapterContext<any> = ChannelAdapterContext> = {
47
48
  [K in HandleMessageStreamEvent["type"]]?: EventHandler<K, TCtx>;
48
49
  };
50
+ /**
51
+ * Channel-owned resolver that turns an opaque {@link AttachmentRef} back
52
+ * into raw bytes.
53
+ *
54
+ * Attachment refs are the wire format channels use to carry inbound
55
+ * file identity across step boundaries without inlining the payload
56
+ * (inline bytes trip the Vercel Queue 8 KB per-field multipart cap).
57
+ * A channel that ingests file attachments must provide a resolver so
58
+ * the staging layer can re-fetch the bytes on demand at turn time.
59
+ *
60
+ * The resolver is called once per inbound file per turn, inside a
61
+ * workflow step boundary. It has full Node access and can reach any
62
+ * credential the adapter captured at construction time via closure
63
+ * (route options, adapter state, env-derived tokens, etc.).
64
+ *
65
+ * Throw {@link import("../internal/attachments/errors.js").AshAttachmentError}
66
+ * to surface structured failures to observability. Uncategorized
67
+ * throws are wrapped as `resolver-threw` by the staging dispatch.
68
+ */
69
+ export interface AttachmentResolver {
70
+ resolve(ref: AttachmentRef): Promise<Buffer>;
71
+ }
49
72
  /**
50
73
  * Plain-object adapter that replaces the `Channel` abstract class.
51
74
  *
@@ -109,6 +132,22 @@ export type ChannelAdapter<TCtx extends ChannelAdapterContext<any> = ChannelAdap
109
132
  * @internal — set by `createSlackBaseAdapter`, not authored by users.
110
133
  */
111
134
  readonly createAdapterContext?: (base: ChannelAdapterContext) => ChannelAdapterContext;
135
+ /**
136
+ * Optional resolver that turns an opaque {@link AttachmentRef}
137
+ * produced by this adapter into raw bytes.
138
+ *
139
+ * Channels that produce `FilePart`s whose `data` is an
140
+ * `ash-attachment:` URL must declare a resolver here so the
141
+ * staging layer can re-fetch the bytes at turn time. Channels that
142
+ * never emit refs (test adapters, framework `http` / `schedule` /
143
+ * `subagent` pass-throughs) omit it.
144
+ *
145
+ * Attachment resolvers are stateless handlers — all state (bot
146
+ * tokens, API credentials, cache) lives on the adapter and is
147
+ * captured by closure at construction time. Do not store
148
+ * per-resolve state on the handler.
149
+ */
150
+ readonly attachments?: AttachmentResolver;
112
151
  } & ChannelEventHandlers<TCtx>;
113
152
  /**
114
153
  * Produces the default {@link StepInput} when no custom adapter `deliver`
@@ -1 +1 @@
1
- {"version":3,"file":"adapter.d.ts","sourceRoot":"","sources":["../../../src/channel/adapter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACzD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,wBAAwB,CAAC;AACvE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAMjD;;;;;;;;GAQG;AACH,MAAM,WAAW,qBAAqB,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IACrE;;;OAGG;IACH,KAAK,EAAE,MAAM,CAAC;IAEd;;;OAGG;IACH,QAAQ,CAAC,GAAG,EAAE,eAAe,CAAC;CAC/B;AAMD;;;GAGG;AACH,KAAK,SAAS,CAAC,CAAC,SAAS,wBAAwB,CAAC,MAAM,CAAC,IACvD,OAAO,CAAC,wBAAwB,EAAE;IAAE,IAAI,EAAE,CAAC,CAAA;CAAE,CAAC,SAAS;IAAE,IAAI,EAAE,MAAM,CAAC,CAAA;CAAE,GAAG,CAAC,GAAG,SAAS,CAAC;AAE3F;;;GAGG;AACH,KAAK,YAAY,CACf,CAAC,SAAS,wBAAwB,CAAC,MAAM,CAAC,EAC1C,IAAI,SAAS,qBAAqB,CAAC,GAAG,CAAC,GAAG,qBAAqB,IAC7D,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,IAAI,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;AAE5D;;;;GAIG;AACH,MAAM,MAAM,oBAAoB,CAAC,IAAI,SAAS,qBAAqB,CAAC,GAAG,CAAC,GAAG,qBAAqB,IAC9F;KACG,CAAC,IAAI,wBAAwB,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,YAAY,CAAC,CAAC,EAAE,IAAI,CAAC;CAChE,CAAC;AAMJ;;;;;;;;;;;;;GAaG;AACH,MAAM,MAAM,cAAc,CAAC,IAAI,SAAS,qBAAqB,CAAC,GAAG,CAAC,GAAG,qBAAqB,IAAI;IAC5F;;;;;;OAMG;IACH,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IAEvB;;;;OAIG;IACH,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAEzC;;;;;;;;;;;;;;OAcG;IACH,OAAO,CAAC,CAAC,OAAO,EAAE,cAAc,EAAE,GAAG,EAAE,IAAI,GAAG,SAAS,GAAG,IAAI,GAAG,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC,CAAC;IAE3F;;;;;;OAMG;IACH,QAAQ,CAAC,gBAAgB,CAAC,EAAE,SAAS,eAAe,CAAC,OAAO,CAAC,EAAE,CAAC;IAEhE;;;;;;;;OAQG;IACH,QAAQ,CAAC,oBAAoB,CAAC,EAAE,CAAC,IAAI,EAAE,qBAAqB,KAAK,qBAAqB,CAAC;CACxF,GAAG,oBAAoB,CAAC,IAAI,CAAC,CAAC;AAM/B;;;;;;;GAOG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,cAAc,GAAG,SAAS,GAAG,SAAS,CAUnF;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,cAAc,GAAG,MAAM,CAE9D;AAED;;GAEG;AACH,wBAAgB,0BAA0B,CACxC,OAAO,EAAE,cAAc,GACtB,SAAS,eAAe,CAAC,OAAO,CAAC,EAAE,CAErC;AAED;;;;;;GAMG;AACH,wBAAsB,uBAAuB,CAC3C,OAAO,EAAE,cAAc,EACvB,KAAK,EAAE,wBAAwB,EAC/B,GAAG,EAAE,qBAAqB,GACzB,OAAO,CAAC,wBAAwB,CAAC,CAUnC"}
1
+ {"version":3,"file":"adapter.d.ts","sourceRoot":"","sources":["../../../src/channel/adapter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACzD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,iCAAiC,CAAC;AACrE,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,wBAAwB,CAAC;AACvE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAMjD;;;;;;;;GAQG;AACH,MAAM,WAAW,qBAAqB,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IACrE;;;OAGG;IACH,KAAK,EAAE,MAAM,CAAC;IAEd;;;OAGG;IACH,QAAQ,CAAC,GAAG,EAAE,eAAe,CAAC;CAC/B;AAMD;;;GAGG;AACH,KAAK,SAAS,CAAC,CAAC,SAAS,wBAAwB,CAAC,MAAM,CAAC,IACvD,OAAO,CAAC,wBAAwB,EAAE;IAAE,IAAI,EAAE,CAAC,CAAA;CAAE,CAAC,SAAS;IAAE,IAAI,EAAE,MAAM,CAAC,CAAA;CAAE,GAAG,CAAC,GAAG,SAAS,CAAC;AAE3F;;;GAGG;AACH,KAAK,YAAY,CACf,CAAC,SAAS,wBAAwB,CAAC,MAAM,CAAC,EAC1C,IAAI,SAAS,qBAAqB,CAAC,GAAG,CAAC,GAAG,qBAAqB,IAC7D,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,IAAI,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;AAE5D;;;;GAIG;AACH,MAAM,MAAM,oBAAoB,CAAC,IAAI,SAAS,qBAAqB,CAAC,GAAG,CAAC,GAAG,qBAAqB,IAC9F;KACG,CAAC,IAAI,wBAAwB,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,YAAY,CAAC,CAAC,EAAE,IAAI,CAAC;CAChE,CAAC;AAMJ;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,WAAW,kBAAkB;IACjC,OAAO,CAAC,GAAG,EAAE,aAAa,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;CAC9C;AAMD;;;;;;;;;;;;;GAaG;AACH,MAAM,MAAM,cAAc,CAAC,IAAI,SAAS,qBAAqB,CAAC,GAAG,CAAC,GAAG,qBAAqB,IAAI;IAC5F;;;;;;OAMG;IACH,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IAEvB;;;;OAIG;IACH,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAEzC;;;;;;;;;;;;;;OAcG;IACH,OAAO,CAAC,CAAC,OAAO,EAAE,cAAc,EAAE,GAAG,EAAE,IAAI,GAAG,SAAS,GAAG,IAAI,GAAG,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC,CAAC;IAE3F;;;;;;OAMG;IACH,QAAQ,CAAC,gBAAgB,CAAC,EAAE,SAAS,eAAe,CAAC,OAAO,CAAC,EAAE,CAAC;IAEhE;;;;;;;;OAQG;IACH,QAAQ,CAAC,oBAAoB,CAAC,EAAE,CAAC,IAAI,EAAE,qBAAqB,KAAK,qBAAqB,CAAC;IAEvF;;;;;;;;;;;;;;OAcG;IACH,QAAQ,CAAC,WAAW,CAAC,EAAE,kBAAkB,CAAC;CAC3C,GAAG,oBAAoB,CAAC,IAAI,CAAC,CAAC;AAM/B;;;;;;;GAOG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,cAAc,GAAG,SAAS,GAAG,SAAS,CAUnF;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,cAAc,GAAG,MAAM,CAE9D;AAED;;GAEG;AACH,wBAAgB,0BAA0B,CACxC,OAAO,EAAE,cAAc,GACtB,SAAS,eAAe,CAAC,OAAO,CAAC,EAAE,CAErC;AAED;;;;;;GAMG;AACH,wBAAsB,uBAAuB,CAC3C,OAAO,EAAE,cAAc,EACvB,KAAK,EAAE,wBAAwB,EAC/B,GAAG,EAAE,qBAAqB,GACzB,OAAO,CAAC,wBAAwB,CAAC,CAUnC"}
@@ -1 +1 @@
1
- {"version":3,"file":"adapter.js","sourceRoot":"","sources":["../../../src/channel/adapter.ts"],"names":[],"mappings":"AAwIA,8EAA8E;AAC9E,UAAU;AACV,8EAA8E;AAE9E;;;;;;;GAOG;AACH,MAAM,UAAU,oBAAoB,CAAC,OAAuB;IAC1D,IAAI,OAAO,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;QAClC,OAAO,EAAE,cAAc,EAAE,OAAO,CAAC,cAAc,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,CAAC;IAC9E,CAAC;IAED,IAAI,OAAO,CAAC,cAAc,KAAK,SAAS,IAAI,OAAO,CAAC,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC9E,OAAO,EAAE,cAAc,EAAE,OAAO,CAAC,cAAc,EAAE,CAAC;IACpD,CAAC;IAED,OAAO,SAAS,CAAC;AACnB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,cAAc,CAAC,OAAuB;IACpD,OAAO,OAAO,CAAC,IAAI,IAAI,SAAS,CAAC;AACnC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,0BAA0B,CACxC,OAAuB;IAEvB,OAAO,OAAO,CAAC,gBAAgB,IAAI,EAAE,CAAC;AACxC,CAAC;AAED;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAC3C,OAAuB,EACvB,KAA+B,EAC/B,GAA0B;IAE1B,MAAM,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAErB,CAAC;IAEd,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;QAC1B,MAAM,OAAO,CAAC,MAAM,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC;IAC/D,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC"}
1
+ {"version":3,"file":"adapter.js","sourceRoot":"","sources":["../../../src/channel/adapter.ts"],"names":[],"mappings":"AAqLA,8EAA8E;AAC9E,UAAU;AACV,8EAA8E;AAE9E;;;;;;;GAOG;AACH,MAAM,UAAU,oBAAoB,CAAC,OAAuB;IAC1D,IAAI,OAAO,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;QAClC,OAAO,EAAE,cAAc,EAAE,OAAO,CAAC,cAAc,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,CAAC;IAC9E,CAAC;IAED,IAAI,OAAO,CAAC,cAAc,KAAK,SAAS,IAAI,OAAO,CAAC,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC9E,OAAO,EAAE,cAAc,EAAE,OAAO,CAAC,cAAc,EAAE,CAAC;IACpD,CAAC;IAED,OAAO,SAAS,CAAC;AACnB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,cAAc,CAAC,OAAuB;IACpD,OAAO,OAAO,CAAC,IAAI,IAAI,SAAS,CAAC;AACnC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,0BAA0B,CACxC,OAAuB;IAEvB,OAAO,OAAO,CAAC,gBAAgB,IAAI,EAAE,CAAC;AACxC,CAAC;AAED;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAC3C,OAAuB,EACvB,KAA+B,EAC/B,GAA0B;IAE1B,MAAM,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAErB,CAAC;IAEd,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;QAC1B,MAAM,OAAO,CAAC,MAAM,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC;IAC/D,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"slack-adapter.d.ts","sourceRoot":"","sources":["../../../src/channel/slack-adapter.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAyB,MAAM,IAAI,CAAC;AAE1D,OAAO,EAIL,KAAK,YAAY,EAClB,MAAM,qCAAqC,CAAC;AAE7C,OAAO,KAAK,EAAE,cAAc,EAAE,qBAAqB,EAAwB,MAAM,cAAc,CAAC;AAUhG,OAAO,KAAK,EAAuB,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAC9E,OAAO,KAAK,EACV,gBAAgB,EAChB,eAAe,EAEf,kBAAkB,EACnB,MAAM,kBAAkB,CAAC;AAO1B;;;;;;GAMG;AACH,MAAM,WAAW,mBAAmB,CAClC,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAChC,SAAQ,qBAAqB,CAAC,MAAM,CAAC;IACrC,QAAQ,CAAC,KAAK,EAAE,WAAW,CAAC;CAC7B;AAED;;;GAGG;AACH,MAAM,WAAW,WAAW;IAC1B,0DAA0D;IAC1D,IAAI,CAAC,UAAU,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACjD,6CAA6C;IAC7C,WAAW,CAAC,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACpE,0DAA0D;IAC1D,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC3C,0CAA0C;IAC1C,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACzB,uDAAuD;IACvD,kBAAkB,IAAI,OAAO,CAAC,SAAS,kBAAkB,EAAE,CAAC,CAAC;IAC7D,wBAAwB;IACxB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,0BAA0B;IAC1B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,6BAA6B;IAC7B,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,oBAAoB;IACpB,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,6CAA6C;IAC7C,QAAQ,CAAC,WAAW,CAAC,EAAE,gBAAgB,CAAC;CACzC;AAsDD;;;;;;;;;;GAUG;AACH,wBAAgB,sBAAsB,CAAC,KAAK,EAAE;IAC5C,QAAQ,CAAC,WAAW,CAAC,EAAE,cAAc,CAAC,GAAG,CAAC,CAAC;IAC3C,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC7C;;;;;;OAMG;IACH,QAAQ,CAAC,YAAY,CAAC,EAAE,YAAY,CAAC;CACtC,GAAG,cAAc,CA8PjB;AAMD;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE;IACvC,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,gBAAgB,EAAE,OAAO,CAAC;IACnC,QAAQ,CAAC,WAAW,CAAC,EAAE,gBAAgB,CAAC;CACzC,GAAG,WAAW,CA8Fd;AAMD;;;;;;;;GAQG;AACH,wBAAgB,mCAAmC,CACjD,WAAW,EAAE,gBAAgB,GAC5B,SAAS,OAAO,2BAA2B,EAAE,aAAa,EAAE,CA6B9D;AAUD;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,SAAS,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAChF,OAAO,EAAE,cAAc,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAC,GACnD,cAAc,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAC,CAE7C;AAiDD;;;;;;;;;;;;;GAaG;AACH,wBAAsB,4BAA4B,CAChD,QAAQ,EAAE,SAAS,kBAAkB,EAAE,EACvC,YAAY,GAAE,YAAoC,GACjD,OAAO,CAAC,QAAQ,EAAE,CAAC,CAMrB"}
1
+ {"version":3,"file":"slack-adapter.d.ts","sourceRoot":"","sources":["../../../src/channel/slack-adapter.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAyB,MAAM,IAAI,CAAC;AAM1D,OAAO,EAIL,KAAK,YAAY,EAClB,MAAM,qCAAqC,CAAC;AAE7C,OAAO,KAAK,EAEV,cAAc,EACd,qBAAqB,EAEtB,MAAM,cAAc,CAAC;AAUtB,OAAO,KAAK,EAAuB,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAC9E,OAAO,KAAK,EACV,gBAAgB,EAChB,eAAe,EAEf,kBAAkB,EACnB,MAAM,kBAAkB,CAAC;AAO1B;;;;;;GAMG;AACH,MAAM,WAAW,mBAAmB,CAClC,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAChC,SAAQ,qBAAqB,CAAC,MAAM,CAAC;IACrC,QAAQ,CAAC,KAAK,EAAE,WAAW,CAAC;CAC7B;AAED;;;GAGG;AACH,MAAM,WAAW,WAAW;IAC1B,0DAA0D;IAC1D,IAAI,CAAC,UAAU,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACjD,6CAA6C;IAC7C,WAAW,CAAC,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACpE,0DAA0D;IAC1D,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC3C,0CAA0C;IAC1C,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACzB,uDAAuD;IACvD,kBAAkB,IAAI,OAAO,CAAC,SAAS,kBAAkB,EAAE,CAAC,CAAC;IAC7D,wBAAwB;IACxB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,0BAA0B;IAC1B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,6BAA6B;IAC7B,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,oBAAoB;IACpB,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,6CAA6C;IAC7C,QAAQ,CAAC,WAAW,CAAC,EAAE,gBAAgB,CAAC;CACzC;AAsDD;;;;;;;;;;GAUG;AACH,wBAAgB,sBAAsB,CAAC,KAAK,EAAE;IAC5C,QAAQ,CAAC,WAAW,CAAC,EAAE,cAAc,CAAC,GAAG,CAAC,CAAC;IAC3C,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC7C;;;;;;OAMG;IACH,QAAQ,CAAC,YAAY,CAAC,EAAE,YAAY,CAAC;CACtC,GAAG,cAAc,CAoTjB;AAMD;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE;IACvC,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,gBAAgB,EAAE,OAAO,CAAC;IACnC,QAAQ,CAAC,WAAW,CAAC,EAAE,gBAAgB,CAAC;CACzC,GAAG,WAAW,CA8Fd;AAMD;;;;;;;;GAQG;AACH,wBAAgB,mCAAmC,CACjD,WAAW,EAAE,gBAAgB,GAC5B,SAAS,OAAO,2BAA2B,EAAE,aAAa,EAAE,CA6B9D;AAUD;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,SAAS,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAChF,OAAO,EAAE,cAAc,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAC,GACnD,cAAc,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAC,CAE7C;AAiDD;;;;;;;;;;;;;GAaG;AACH,wBAAsB,4BAA4B,CAChD,QAAQ,EAAE,SAAS,kBAAkB,EAAE,EACvC,YAAY,GAAE,YAAoC,GACjD,OAAO,CAAC,QAAQ,EAAE,CAAC,CAMrB"}
@@ -6,6 +6,10 @@
6
6
  * default Slack behaviors (typing, posting, HITL cards) that user adapters
7
7
  * can override per event type.
8
8
  */
9
+ import { loadContext } from "../context/container.js";
10
+ import { ChannelKey } from "../context/keys.js";
11
+ import { AshAttachmentError } from "../internal/attachments/errors.js";
12
+ import { encodeAttachmentRef } from "../internal/attachments/refs.js";
9
13
  import { DEFAULT_UPLOAD_POLICY, evaluateFilePart, formatUploadPolicyViolation, } from "../public/channels/upload-policy.js";
10
14
  import { getAdapterKind } from "./adapter.js";
11
15
  import { resolveTextToResponses } from "./resolve-text.js";
@@ -59,6 +63,54 @@ export function createSlackBaseAdapter(input) {
59
63
  const kind = userAdapter ? getAdapterKind(userAdapter) : "slack";
60
64
  const userState = userAdapter?.state ?? {};
61
65
  const uploadPolicy = input.uploadPolicy ?? DEFAULT_UPLOAD_POLICY;
66
+ // Channel-owned attachment resolver. Slack inbound files cross the
67
+ // step boundary as `ash-attachment:slack?url=...&__size=...` refs so
68
+ // the raw bytes never hit the Vercel Queue 8 KB per-field cap; the
69
+ // harness calls this resolver from inside the step and we read the
70
+ // bot token from the rehydrated adapter's state (every session's
71
+ // serialized state carries `botToken` — see `SlackChannelState`).
72
+ const attachments = {
73
+ async resolve(ref) {
74
+ const url = ref.params.url;
75
+ if (!url) {
76
+ throw new AshAttachmentError({
77
+ adapterKind: "slack",
78
+ kind: "missing-param",
79
+ message: 'Slack attachment ref is missing the "url" param.',
80
+ });
81
+ }
82
+ const botToken = loadContext().get(ChannelKey)?.state?.botToken;
83
+ if (!botToken || typeof botToken !== "string") {
84
+ throw new AshAttachmentError({
85
+ adapterKind: "slack",
86
+ kind: "resolver-missing",
87
+ message: "Slack attachment resolver requires `state.botToken` on the active adapter. Pass `credentials.botToken` to `slackRoute()` so the per-session adapter carries it.",
88
+ });
89
+ }
90
+ let response;
91
+ try {
92
+ response = await fetch(url, {
93
+ headers: { authorization: `Bearer ${botToken}` },
94
+ });
95
+ }
96
+ catch (cause) {
97
+ throw new AshAttachmentError({
98
+ adapterKind: "slack",
99
+ cause,
100
+ kind: "fetch-failed",
101
+ message: `Slack attachment fetch failed: ${cause instanceof Error ? cause.message : String(cause)}`,
102
+ });
103
+ }
104
+ if (!response.ok) {
105
+ throw new AshAttachmentError({
106
+ adapterKind: "slack",
107
+ kind: "fetch-failed",
108
+ message: `Slack attachment fetch returned HTTP ${response.status} for ${url}.`,
109
+ });
110
+ }
111
+ return Buffer.from(await response.arrayBuffer());
112
+ },
113
+ };
62
114
  // Merge user state with slack infrastructure state + base layer state
63
115
  const initialState = {
64
116
  ...userState,
@@ -152,6 +204,7 @@ export function createSlackBaseAdapter(input) {
152
204
  };
153
205
  // Build the final adapter: user handlers take precedence over defaults
154
206
  const adapter = {
207
+ attachments,
155
208
  kind: kind === "unknown" ? "slack" : kind,
156
209
  state: initialState,
157
210
  contextProviders: userAdapter?.contextProviders,
@@ -473,15 +526,25 @@ async function collectFilePartsFromAttachments(attachments, uploadPolicy) {
473
526
  if (attachment.type === "audio" || attachment.type === "video") {
474
527
  continue;
475
528
  }
476
- const bytes = await attachment.getBytes();
477
- if (bytes === null) {
529
+ // Slack attachments cross the step boundary as `ash-attachment:` refs
530
+ // rather than inline bytes; the harness resolves the ref via the
531
+ // adapter's channel-owned `attachments.resolve` at staging time. The
532
+ // 8 KB Vercel Queue per-field multipart cap makes inline byte
533
+ // delivery architecturally unviable, so attachments without a URL
534
+ // cannot be represented and are dropped with a warning.
535
+ if (!attachment.url) {
536
+ console.warn("[slack] dropped attachment — no url available for ref construction", attachment.name !== undefined ? { name: attachment.name } : {});
478
537
  continue;
479
538
  }
480
539
  const filePart = {
481
540
  type: "file",
482
541
  mediaType: attachment.mimeType ?? "application/octet-stream",
483
542
  filename: attachment.name ?? `attachment-${parts.length}`,
484
- data: bytes,
543
+ data: encodeAttachmentRef({
544
+ adapterKind: "slack",
545
+ params: { url: attachment.url },
546
+ size: attachment.size,
547
+ }),
485
548
  };
486
549
  const violation = evaluateFilePart(filePart, uploadPolicy);
487
550
  if (violation !== null) {
@@ -1 +1 @@
1
- {"version":3,"file":"slack-adapter.js","sourceRoot":"","sources":["../../../src/channel/slack-adapter.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"slack-adapter.js","sourceRoot":"","sources":["../../../src/channel/slack-adapter.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAIH,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AACtD,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAChD,OAAO,EAAE,kBAAkB,EAAE,MAAM,mCAAmC,CAAC;AACvE,OAAO,EAAE,mBAAmB,EAAE,MAAM,iCAAiC,CAAC;AACtE,OAAO,EACL,qBAAqB,EACrB,gBAAgB,EAChB,2BAA2B,GAE5B,MAAM,qCAAqC,CAAC;AAQ7C,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EAAE,sBAAsB,EAAE,MAAM,mBAAmB,CAAC;AAC3D,OAAO,EACL,wCAAwC,EACxC,gCAAgC,EAChC,kBAAkB,EAClB,sBAAsB,EACtB,oBAAoB,GACrB,MAAM,mBAAmB,CAAC;AAsD3B,8EAA8E;AAC9E,mBAAmB;AACnB,8EAA8E;AAE9E,MAAM,8BAA8B,GAAG,EAAE,CAAC;AAE1C,SAAS,oBAAoB,CAAC,MAAc;IAC1C,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;IACvD,IAAI,UAAU,CAAC,MAAM,IAAI,8BAA8B,EAAE,CAAC;QACxD,OAAO,UAAU,CAAC;IACpB,CAAC;IACD,OAAO,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,8BAA8B,GAAG,CAAC,CAAC,CAAC,OAAO,EAAE,KAAK,CAAC;AACnF,CAAC;AAED,SAAS,sBAAsB,CAAC,GAAqB;IACnD,MAAM,KAAK,GAAG;QACZ,iBAAiB;QACjB,YAAY,GAAG,CAAC,MAAM,EAAE;QACxB,cAAc,GAAG,CAAC,QAAQ,EAAE;QAC5B,cAAc,GAAG,CAAC,QAAQ,EAAE;QAC5B,eAAe,GAAG,CAAC,SAAS,EAAE;QAC9B,cAAc,GAAG,CAAC,QAAQ,EAAE;KAC7B,CAAC;IACF,IAAI,GAAG,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;QAC7B,KAAK,CAAC,IAAI,CAAC,YAAY,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC;IACvC,CAAC;IACD,KAAK,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;IAC/B,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED,SAAS,cAAc,CAAC,MAKvB;IACC,IAAI,MAAM,CAAC,IAAI,KAAK,WAAW,IAAI,MAAM,CAAC,QAAQ;QAAE,OAAO,MAAM,CAAC,QAAQ,CAAC;IAC3E,IAAI,MAAM,CAAC,IAAI,KAAK,eAAe,IAAI,MAAM,CAAC,YAAY;QAAE,OAAO,MAAM,CAAC,YAAY,CAAC;IACvF,OAAO,MAAM,CAAC,IAAI,CAAC;AACrB,CAAC;AAaD;;;;;;;;;;GAUG;AACH,MAAM,UAAU,sBAAsB,CAAC,KAWtC;IACC,MAAM,WAAW,GAAG,KAAK,CAAC,WAAW,CAAC;IACtC,MAAM,IAAI,GAAG,WAAW,CAAC,CAAC,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC;IACjE,MAAM,SAAS,GAAG,WAAW,EAAE,KAAK,IAAI,EAAE,CAAC;IAC3C,MAAM,YAAY,GAAG,KAAK,CAAC,YAAY,IAAI,qBAAqB,CAAC;IAEjE,mEAAmE;IACnE,qEAAqE;IACrE,mEAAmE;IACnE,mEAAmE;IACnE,iEAAiE;IACjE,kEAAkE;IAClE,MAAM,WAAW,GAAuB;QACtC,KAAK,CAAC,OAAO,CAAC,GAAG;YACf,MAAM,GAAG,GAAG,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC;YAC3B,IAAI,CAAC,GAAG,EAAE,CAAC;gBACT,MAAM,IAAI,kBAAkB,CAAC;oBAC3B,WAAW,EAAE,OAAO;oBACpB,IAAI,EAAE,eAAe;oBACrB,OAAO,EAAE,kDAAkD;iBAC5D,CAAC,CAAC;YACL,CAAC;YAED,MAAM,QAAQ,GAAG,WAAW,EAAE,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,KAAK,EAAE,QAAQ,CAAC;YAChE,IAAI,CAAC,QAAQ,IAAI,OAAO,QAAQ,KAAK,QAAQ,EAAE,CAAC;gBAC9C,MAAM,IAAI,kBAAkB,CAAC;oBAC3B,WAAW,EAAE,OAAO;oBACpB,IAAI,EAAE,kBAAkB;oBACxB,OAAO,EACL,iKAAiK;iBACpK,CAAC,CAAC;YACL,CAAC;YAED,IAAI,QAAkB,CAAC;YACvB,IAAI,CAAC;gBACH,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE;oBAC1B,OAAO,EAAE,EAAE,aAAa,EAAE,UAAU,QAAQ,EAAE,EAAE;iBACjD,CAAC,CAAC;YACL,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,MAAM,IAAI,kBAAkB,CAAC;oBAC3B,WAAW,EAAE,OAAO;oBACpB,KAAK;oBACL,IAAI,EAAE,cAAc;oBACpB,OAAO,EAAE,kCACP,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CACvD,EAAE;iBACH,CAAC,CAAC;YACL,CAAC;YACD,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;gBACjB,MAAM,IAAI,kBAAkB,CAAC;oBAC3B,WAAW,EAAE,OAAO;oBACpB,IAAI,EAAE,cAAc;oBACpB,OAAO,EAAE,wCAAwC,QAAQ,CAAC,MAAM,QAAQ,GAAG,GAAG;iBAC/E,CAAC,CAAC;YACL,CAAC;YACD,OAAO,MAAM,CAAC,IAAI,CAAC,MAAM,QAAQ,CAAC,WAAW,EAAE,CAAC,CAAC;QACnD,CAAC;KACF,CAAC;IAEF,sEAAsE;IACtE,MAAM,YAAY,GAA4B;QAC5C,GAAG,SAAS;QACZ,GAAG,KAAK,CAAC,UAAU;QACnB,WAAW,EAAE;YACX,eAAe,EAAE,EAAE;YACnB,sBAAsB,EAAE,IAAI;SACC;KAChC,CAAC;IAEF,SAAS,YAAY,CAAC,KAA8B;QAClD,OAAO,CACJ,KAAK,CAAC,WAAmC,IAAI;YAC5C,eAAe,EAAE,EAAE;YACnB,sBAAsB,EAAE,IAAI;SAC7B,CACF,CAAC;IACJ,CAAC;IAED,SAAS,YAAY,CAAC,KAA8B,EAAE,IAAyB;QAC7E,KAAK,CAAC,WAAW,GAAG,IAAI,CAAC;IAC3B,CAAC;IAED,4EAA4E;IAC5E,MAAM,eAAe,GAA8C;QACjE,KAAK,CAAC,cAAc,CAAC,KAAK,EAAE,GAAG;YAC7B,mCAAmC;YACnC,MAAM,IAAI,GAAG,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;YACrC,YAAY,CAAC,GAAG,CAAC,KAAK,EAAE,EAAE,GAAG,IAAI,EAAE,sBAAsB,EAAE,IAAI,EAAE,CAAC,CAAC;YACnE,MAAM,GAAG,CAAC,KAAK,CAAC,WAAW,CAAC,gBAAgB,CAAC,CAAC;QAChD,CAAC;QAED,KAAK,CAAC,mBAAmB,CAAC,IAAI,EAAE,GAAG;YACjC,MAAM,IAAI,GAAG,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;YACrC,MAAM,QAAQ,GAAG,IAAI,CAAC,sBAAsB,CAAC;YAC7C,YAAY,CAAC,GAAG,CAAC,KAAK,EAAE,EAAE,GAAG,IAAI,EAAE,sBAAsB,EAAE,IAAI,EAAE,CAAC,CAAC;YAEnE,IAAI,QAAQ,EAAE,CAAC;gBACb,MAAM,SAAS,GAAG,QAAQ;qBACvB,KAAK,CAAC,QAAQ,CAAC;qBACf,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;qBACpB,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;gBAC7B,IAAI,SAAS,EAAE,CAAC;oBACd,MAAM,GAAG,CAAC,KAAK,CAAC,WAAW,CAAC,oBAAoB,CAAC,SAAS,CAAC,CAAC,CAAC;oBAC7D,OAAO;gBACT,CAAC;YACH,CAAC;YAED,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;YAChD,MAAM,GAAG,CAAC,KAAK,CAAC,WAAW,CAAC,oBAAoB,CAAC,WAAW,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;QAC1F,CAAC;QAED,KAAK,CAAC,iBAAiB,CAAC,IAAI,EAAE,GAAG;YAC/B,qDAAqD;YACrD,MAAM,IAAI,GAAG,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;YACrC,IAAI,IAAI,CAAC,sBAAsB,EAAE,CAAC;gBAChC,MAAM,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,QAAQ,EAAE,IAAI,CAAC,sBAAsB,EAAE,CAAC,CAAC;YACpF,CAAC;YACD,6DAA6D;YAC7D,YAAY,CAAC,GAAG,CAAC,KAAK,EAAE;gBACtB,GAAG,IAAI;gBACP,eAAe,EAAE,IAAI,CAAC,QAAQ;gBAC9B,sBAAsB,EAAE,IAAI;aAC7B,CAAC,CAAC;YACH,oBAAoB;YACpB,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACpC,IAAI,CAAC;oBACH,MAAM,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,gCAAgC,CAAC,OAAO,CAAC,CAAC,CAAC;gBAClE,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBACf,OAAO,CAAC,KAAK,CAAC,0CAA0C,EAAE,KAAK,CAAC,CAAC;gBACnE,CAAC;YACH,CAAC;QACH,CAAC;QAED,KAAK,CAAC,mBAAmB,CAAC,IAAI,EAAE,GAAG;YACjC,IAAI,IAAI,CAAC,OAAO,KAAK,IAAI,EAAE,CAAC;gBAC1B,IAAI,IAAI,CAAC,YAAY,KAAK,YAAY,EAAE,CAAC;oBACvC,6DAA6D;oBAC7D,MAAM,IAAI,GAAG,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;oBACrC,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;oBACvC,YAAY,CAAC,GAAG,CAAC,KAAK,EAAE;wBACtB,GAAG,IAAI;wBACP,sBAAsB,EAAE,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI;qBAClE,CAAC,CAAC;gBACL,CAAC;qBAAM,CAAC;oBACN,MAAM,IAAI,GAAG,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;oBACrC,YAAY,CAAC,GAAG,CAAC,KAAK,EAAE,EAAE,GAAG,IAAI,EAAE,sBAAsB,EAAE,IAAI,EAAE,CAAC,CAAC;oBACnE,MAAM,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,QAAQ,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;gBACrE,CAAC;YACH,CAAC;QACH,CAAC;QAED,KAAK,CAAC,gBAAgB,CAAC,IAAI,EAAE,GAAG;YAC9B,MAAM,IAAI,GAAG,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;YACrC,YAAY,CAAC,GAAG,CAAC,KAAK,EAAE,EAAE,GAAG,IAAI,EAAE,sBAAsB,EAAE,IAAI,EAAE,CAAC,CAAC;YAEnE,MAAM,SAAS,GACb,IAAI,CAAC,OAAO,IAAI,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC;YACxF,MAAM,KAAK,GAAG,SAAS,CAAC,CAAC,CAAC,IAAI,SAAS,MAAM,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC;YAC3E,MAAM,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,QAAQ,EAAE,4BAA4B,KAAK,EAAE,EAAE,CAAC,CAAC;QAC5F,CAAC;KACF,CAAC;IAEF,uEAAuE;IACvE,MAAM,OAAO,GAAmB;QAC9B,WAAW;QACX,IAAI,EAAE,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI;QACzC,KAAK,EAAE,YAAY;QACnB,gBAAgB,EAAE,WAAW,EAAE,gBAAgB;QAE/C,oEAAoE;QACpE,oBAAoB,CAAC,IAA2B;YAC9C,MAAM,WAAW,GAAG,iBAAiB,CAAC;gBACpC,QAAQ,EAAE,IAAI,CAAC,KAAK,CAAC,QAA8B;gBACnD,gBAAgB,EAAE,IAAI,CAAC,KAAK,CAAC,gBAAgB;gBAC7C,WAAW,EAAE,IAAI,CAAC,KAAK,CAAC,WAA2C;aACpE,CAAC,CAAC;YACH,OAAO,EAAE,GAAG,IAAI,EAAE,KAAK,EAAE,WAAW,EAAE,CAAC;QACzC,CAAC;QAED,sEAAsE;QACtE,KAAK,CAAC,OAAO,CAAC,OAAuB,EAAE,MAA6B;YAClE,MAAM,GAAG,GAAG,MAA6B,CAAC;YAC1C,MAAM,YAAY,GAAG,OAA8B,CAAC;YAEpD,4DAA4D;YAC5D,+DAA+D;YAC/D,8DAA8D;YAC9D,6DAA6D;YAC7D,eAAe;YACf,MAAM,aAAa,GACjB,OAAO,CAAC,OAAO,KAAK,SAAS,IAAI,YAAY,CAAC,cAAc,KAAK,aAAa,CAAC;YACjF,MAAM,SAAS,GAAG,aAAa,CAAC,CAAC,CAAC,MAAM,uBAAuB,CAAC,GAAG,EAAE,YAAY,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YAExF,gEAAgE;YAChE,uDAAuD;YACvD,4DAA4D;YAC5D,MAAM,gBAAgB,GACpB,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,YAAY,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,YAAY,CAAC;YAEvE,yEAAyE;YACzE,MAAM,UAAU,GAAG,WAAW,EAAE,OAAO;gBACrC,CAAC,CAAC,MAAM,WAAW,CAAC,OAAO,CAAC,gBAAgB,EAAE,GAAG,CAAC;gBAClD,CAAC,CAAC,SAAS,CAAC;YAEd,iEAAiE;YACjE,MAAM,IAAI,GAAG,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;YAErC,wEAAwE;YACxE,IAAI,YAAY,CAAC,cAAc,IAAI,YAAY,CAAC,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC1E,IAAI,IAAI,CAAC,eAAe,IAAI,IAAI,CAAC,eAAe,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBAC5D,+DAA+D;oBAC/D,2CAA2C;oBAC3C,MAAM,WAAW,GAAG,YAAY,CAAC,WAAW,CAAC;oBAC7C,IAAI,WAAW,EAAE,CAAC;wBAChB,KAAK,MAAM,QAAQ,IAAI,YAAY,CAAC,cAAc,EAAE,CAAC;4BACnD,MAAM,OAAO,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,KAAK,QAAQ,CAAC,SAAS,CAAC,CAAC;4BACrF,IAAI,CAAC,OAAO;gCAAE,SAAS;4BACvB,MAAM,GAAG,CAAC,KAAK,CAAC,WAAW,CACzB,WAAW,CAAC,SAAS,EACrB,wCAAwC,CAAC;gCACvC,OAAO;gCACP,QAAQ;gCACR,IAAI,EAAE,WAAW,CAAC,IAAI;6BACvB,CAAC,CACH,CAAC;wBACJ,CAAC;oBACH,CAAC;oBACD,YAAY,CAAC,GAAG,CAAC,KAAK,EAAE,EAAE,GAAG,IAAI,EAAE,eAAe,EAAE,EAAE,EAAE,CAAC,CAAC;oBAC1D,OAAO,EAAE,cAAc,EAAE,CAAC,GAAG,YAAY,CAAC,cAAc,CAAC,EAAE,CAAC;gBAC9D,CAAC;gBACD,+DAA+D;gBAC/D,iEAAiE;gBACjE,4CAA4C;gBAC5C,OAAO;YACT,CAAC;YAED,wCAAwC;YACxC,IACE,OAAO,CAAC,OAAO,KAAK,SAAS;gBAC7B,IAAI,CAAC,eAAe;gBACpB,IAAI,CAAC,eAAe,CAAC,MAAM,GAAG,CAAC,EAC/B,CAAC;gBACD,MAAM,IAAI,GAAG,kBAAkB,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;gBACjD,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBACpB,MAAM,SAAS,GAAG,sBAAsB,CAAC,IAAI,EAAE,IAAI,CAAC,eAAe,CAAC,CAAC;oBACrE,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;wBACzB,0CAA0C;wBAC1C,YAAY,CAAC,GAAG,CAAC,KAAK,EAAE,EAAE,GAAG,IAAI,EAAE,eAAe,EAAE,EAAE,EAAE,CAAC,CAAC;wBAC1D,8DAA8D;wBAC9D,+CAA+C;wBAC/C,OAAO,EAAE,cAAc,EAAE,SAAS,EAAE,CAAC;oBACvC,CAAC;gBACH,CAAC;YACH,CAAC;YAED,qEAAqE;YACrE,EAAE;YACF,mEAAmE;YACnE,kEAAkE;YAClE,6DAA6D;YAC7D,kEAAkE;YAClE,eAAe;YACf,IAAI,UAAU,KAAK,SAAS,IAAI,UAAU,KAAK,IAAI,IAAI,OAAO,UAAU,KAAK,QAAQ,EAAE,CAAC;gBACtF,OAAO,4BAA4B,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC;YAC7D,CAAC;YACD,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;YAChC,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;gBAC1B,MAAM,WAAW,GAAG,GAAG,CAAC,KAAK,CAAC,WAA2C,CAAC;gBAC1E,MAAM,gBAAgB,GAAG,WAAW;oBAClC,CAAC,CAAC,uBAAuB,CAAC,WAAW,EAAE,OAAO,CAAC;oBAC/C,CAAC,CAAC,OAAO,CAAC;gBACZ,OAAO,4BAA4B,CAAC,EAAE,OAAO,EAAE,gBAAgB,EAAE,EAAE,SAAS,CAAC,CAAC;YAChF,CAAC;YACD,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACzB,mEAAmE;gBACnE,uCAAuC;gBACvC,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC;YAChC,CAAC;QACH,CAAC;KACF,CAAC;IAEF,wDAAwD;IACxD,KAAK,MAAM,SAAS,IAAI,MAAM,CAAC,IAAI,CAAC,eAAe,CAAqC,EAAE,CAAC;QACzF,MAAM,WAAW,GAAG,WAAW,EAAE,CAAC,SAAiC,CAAC,CAAC;QACrE,MAAM,cAAc,GAAG,eAAe,CAAC,SAAS,CAAC,CAAC;QAElD,IAAI,OAAO,WAAW,KAAK,UAAU,EAAE,CAAC;YACtC,qEAAqE;YACrE,qCAAqC;YACpC,OAAmC,CAAC,SAAS,CAAC,GAAG,WAAW,CAAC;QAChE,CAAC;aAAM,IAAI,cAAc,EAAE,CAAC;YACzB,OAAmC,CAAC,SAAS,CAAC,GAAG,cAAc,CAAC;QACnE,CAAC;IACH,CAAC;IAED,oEAAoE;IACpE,IAAI,WAAW,EAAE,CAAC;QAChB,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC;YAC3C,IAAI,GAAG,KAAK,MAAM,IAAI,GAAG,KAAK,OAAO,IAAI,GAAG,KAAK,SAAS,IAAI,GAAG,KAAK,kBAAkB,EAAE,CAAC;gBACzF,SAAS;YACX,CAAC;YACD,IAAI,CAAC,CAAC,GAAG,IAAI,OAAO,CAAC,EAAE,CAAC;gBACrB,OAAmC,CAAC,GAAG,CAAC,GAAI,WAAuC,CAAC,GAAG,CAAC,CAAC;YAC5F,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,8EAA8E;AAC9E,uBAAuB;AACvB,8EAA8E;AAE9E;;;;;GAKG;AACH,MAAM,UAAU,iBAAiB,CAAC,KAIjC;IAcC,IAAI,aAAa,GAAiC,IAAI,CAAC;IAEvD,MAAM,gBAAgB,GAAG,KAAK,CAAC,gBAAqD,CAAC;IAErF,SAAS,SAAS;QAChB,IAAI,aAAa,KAAK,IAAI;YAAE,OAAO,aAAa,CAAC;QAEjD,aAAa,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,qBAAqB,CAAC,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAC/E,CAAC,CAAC,WAAW,EAAE,UAAU,CAAC,EAAE,EAAE;YAC5B,MAAM,OAAO,GAAG,WAAW,CAAC,kBAAkB,CAAC,EAAE,QAAQ,EAAE,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC;YAC7E,MAAM,MAAM,GAAG,UAAU,CAAC,UAAU,CAAC,QAAQ,CAC3C,gBAA8D,EAC9D,OAAO,CACR,CAAC;YACF,MAAM,OAAO,GAAG,kBAAkB,CAAC,UAAU,CAAC,CAAC;YAC/C,MAAM,MAAM,GAAiB;gBAC3B,MAAM;gBACN,WAAW,EAAE,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,CAAgC;gBAC7E,OAAO;gBACP,gBAAgB;aACjB,CAAC;YACF,OAAO,MAAM,CAAC;QAChB,CAAC,CACF,CAAC;QACF,OAAO,aAAa,CAAC;IACvB,CAAC;IAED,KAAK,UAAU,UAAU,CAAC,UAA2B;QACnD,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,SAAS,EAAE,CAAC;QACtC,OAAO,sBAAsB,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;IACrD,CAAC;IAED,MAAM,QAAQ,GAAG,kBAAkB,CAAC,gBAAgB,CAAC,CAAC;IAEtD,OAAO;QACL,SAAS,EAAE,KAAK,CAAC,WAAW,EAAE,SAAS,IAAI,gBAAgB,CAAC,SAAS;QACrE,MAAM,EAAE,KAAK,CAAC,WAAW,EAAE,MAAM;QACjC,QAAQ,EAAE,gBAAgB,CAAC,EAAE;QAC7B,QAAQ,EAAE,KAAK,CAAC,WAAW,EAAE,QAAQ,IAAI,QAAQ;QACjD,WAAW,EAAE,KAAK,CAAC,WAAW;QAE9B,KAAK,CAAC,IAAI,CAAC,UAAU;YACnB,IAAI,CAAC;gBACH,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,SAAS,EAAE,CAAC;gBACrC,MAAM,MAAM,CAAC,IAAI,CAAC,MAAM,UAAU,CAAC,UAAU,CAAC,CAAC,CAAC;YAClD,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,OAAO,CAAC,KAAK,CAAC,sCAAsC,EAAE,KAAK,CAAC,CAAC;YAC/D,CAAC;QACH,CAAC;QAED,KAAK,CAAC,WAAW,CAAC,SAAS,EAAE,UAAU;YACrC,IAAI,CAAC;gBACH,MAAM,EAAE,WAAW,EAAE,gBAAgB,EAAE,EAAE,EAAE,GAAG,MAAM,SAAS,EAAE,CAAC;gBAChE,MAAM,WAAW,CAAC,EAAE,CAAC,EAAE,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC,UAAU,CAAC,CAAC,CAAC;YACpE,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,OAAO,CAAC,KAAK,CAAC,kCAAkC,EAAE,KAAK,CAAC,CAAC;YAC3D,CAAC;QACH,CAAC;QAED,KAAK,CAAC,WAAW,CAAC,MAAM;YACtB,IAAI,CAAC;gBACH,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,SAAS,EAAE,CAAC;gBACrC,MAAM,MAAM,CAAC,WAAW,CAAC,oBAAoB,CAAC,MAAM,CAAC,CAAC,CAAC;YACzD,CAAC;YAAC,MAAM,CAAC;gBACP,oDAAoD;YACtD,CAAC;QACH,CAAC;QAED,KAAK,CAAC,OAAO;YACX,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,SAAS,EAAE,CAAC;YACrC,MAAM,MAAM,CAAC,OAAO,EAAE,CAAC;QACzB,CAAC;QAED,KAAK,CAAC,kBAAkB;YACtB,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,SAAS,EAAE,CAAC;YACrC,OAAO,CAAE,MAAM,CAAC,cAAqC,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CACvE,oBAAoB,CAAC,GAA6B,CAAC,CACpD,CAAC;QACJ,CAAC;KACF,CAAC;AACJ,CAAC;AAED,8EAA8E;AAC9E,8BAA8B;AAC9B,8EAA8E;AAE9E;;;;;;;;GAQG;AACH,MAAM,UAAU,mCAAmC,CACjD,WAA6B;IAE7B,MAAM,cAAc,GAAwD,EAAE,CAAC;IAE/E,KAAK,MAAM,MAAM,IAAI,WAAW,CAAC,OAAO,EAAE,CAAC;QACzC,IAAI,MAAM,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YAC7B,IAAI,MAAM,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;gBAC/B,SAAS;YACX,CAAC;YACD,cAAc,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,MAAM,CAAC,QAAQ,EAAE,SAAS,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;YAC5E,SAAS;QACX,CAAC;QAED,IACE,MAAM,CAAC,IAAI,KAAK,eAAe;YAC/B,MAAM,CAAC,IAAI,KAAK,eAAe;YAC/B,MAAM,CAAC,IAAI,KAAK,iBAAiB,EACjC,CAAC;YACD,IAAI,MAAM,CAAC,gBAAgB,KAAK,SAAS,EAAE,CAAC;gBAC1C,SAAS;YACX,CAAC;YAED,MAAM,SAAS,GAAG,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC,SAAS,CAAC;gBACrD,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC;gBAC1B,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC;YACpB,cAAc,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,MAAM,CAAC,gBAAgB,EAAE,SAAS,EAAE,CAAC,CAAC;QACxE,CAAC;IACH,CAAC;IAED,OAAO,cAAc,CAAC;AACxB,CAAC;AAED,8EAA8E;AAC9E,UAAU;AACV,8EAA8E;AAE9E,8EAA8E;AAC9E,qBAAqB;AACrB,8EAA8E;AAE9E;;;;;GAKG;AACH,MAAM,UAAU,kBAAkB,CAChC,OAAoD;IAEpD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,8EAA8E;AAC9E,UAAU;AACV,8EAA8E;AAE9E,SAAS,kBAAkB,CAAC,gBAAgC;IAC1D,MAAM,KAAK,GAAG,gBAAgB,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAC7C,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,OAAO,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,SAAS,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC;QAC5F,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED;;;;GAIG;AACH,SAAS,uBAAuB,CAC9B,WAA6B,EAC7B,OAA6B;IAE7B,MAAM,WAAW,GAAG,sBAAsB,CAAC,WAAW,CAAC,CAAC;IACxD,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE,CAAC;QAChC,OAAO,GAAG,WAAW,OAAO,OAAO,EAAE,CAAC;IACxC,CAAC;IACD,MAAM,WAAW,GAAa,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC;IAClE,OAAO,CAAC,WAAW,EAAE,GAAG,OAAO,CAAC,CAAC;AACnC,CAAC;AAED;;;;GAIG;AACH,SAAS,kBAAkB,CAAC,OAA6B;IACvD,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE,CAAC;QAChC,OAAO,OAAO,CAAC;IACjB,CAAC;IACD,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,KAAK,MAAM,IAAI,IAAI,OAAO,EAAE,CAAC;QAC3B,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;YACzB,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACzB,CAAC;IACH,CAAC;IACD,OAAO,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC3B,CAAC;AAED;;;;;;;;;;;;;GAaG;AACH,MAAM,CAAC,KAAK,UAAU,4BAA4B,CAChD,QAAuC,EACvC,YAAY,GAAiB,qBAAqB;IAElD,MAAM,MAAM,GAAG,CAAC,GAAG,QAAQ,CAAC,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IACnE,IAAI,MAAM,KAAK,SAAS,IAAI,MAAM,CAAC,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC5D,OAAO,EAAE,CAAC;IACZ,CAAC;IACD,OAAO,+BAA+B,CAAC,MAAM,CAAC,WAAW,EAAE,YAAY,CAAC,CAAC;AAC3E,CAAC;AAED,KAAK,UAAU,+BAA+B,CAC5C,WAA6C,EAC7C,YAA0B;IAE1B,MAAM,KAAK,GAAe,EAAE,CAAC;IAC7B,KAAK,MAAM,UAAU,IAAI,WAAW,EAAE,CAAC;QACrC,IAAI,UAAU,CAAC,IAAI,KAAK,OAAO,IAAI,UAAU,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;YAC/D,SAAS;QACX,CAAC;QACD,sEAAsE;QACtE,iEAAiE;QACjE,qEAAqE;QACrE,8DAA8D;QAC9D,kEAAkE;QAClE,wDAAwD;QACxD,IAAI,CAAC,UAAU,CAAC,GAAG,EAAE,CAAC;YACpB,OAAO,CAAC,IAAI,CACV,oEAAoE,EACpE,UAAU,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,UAAU,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAC/D,CAAC;YACF,SAAS;QACX,CAAC;QACD,MAAM,QAAQ,GAAa;YACzB,IAAI,EAAE,MAAM;YACZ,SAAS,EAAE,UAAU,CAAC,QAAQ,IAAI,0BAA0B;YAC5D,QAAQ,EAAE,UAAU,CAAC,IAAI,IAAI,cAAc,KAAK,CAAC,MAAM,EAAE;YACzD,IAAI,EAAE,mBAAmB,CAAC;gBACxB,WAAW,EAAE,OAAO;gBACpB,MAAM,EAAE,EAAE,GAAG,EAAE,UAAU,CAAC,GAAG,EAAE;gBAC/B,IAAI,EAAE,UAAU,CAAC,IAAI;aACtB,CAAC;SACH,CAAC;QACF,MAAM,SAAS,GAAG,gBAAgB,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC;QAC3D,IAAI,SAAS,KAAK,IAAI,EAAE,CAAC;YACvB,OAAO,CAAC,IAAI,CAAC,gCAAgC,2BAA2B,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;YACvF,SAAS;QACX,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACvB,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,KAAK,UAAU,uBAAuB,CACpC,GAAwB,EACxB,YAA0B;IAE1B,IAAI,CAAC;QACH,MAAM,GAAG,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC;QAC1B,MAAM,QAAQ,GAAG,MAAM,GAAG,CAAC,KAAK,CAAC,kBAAkB,EAAE,CAAC;QACtD,OAAO,MAAM,4BAA4B,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC;IACpE,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,IAAI,CAAC,2CAA2C,EAAE,KAAK,CAAC,CAAC;QACjE,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAED;;;;;;GAMG;AACH,SAAS,4BAA4B,CACnC,KAAQ,EACR,SAA8B;IAE9B,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC3B,OAAO,KAAK,CAAC;IACf,CAAC;IACD,MAAM,QAAQ,GAAG,KAAK,CAAC,OAAO,CAAC;IAC/B,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;QAC3B,OAAO,EAAE,GAAG,KAAK,EAAE,OAAO,EAAE,CAAC,GAAG,SAAS,CAAC,EAAE,CAAC;IAC/C,CAAC;IACD,IAAI,OAAO,QAAQ,KAAK,QAAQ,EAAE,CAAC;QACjC,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC1B,OAAO,EAAE,GAAG,KAAK,EAAE,OAAO,EAAE,CAAC,GAAG,SAAS,CAAC,EAAE,CAAC;QAC/C,CAAC;QACD,MAAM,QAAQ,GAAa,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;QAC5D,OAAO,EAAE,GAAG,KAAK,EAAE,OAAO,EAAE,CAAC,QAAQ,EAAE,GAAG,SAAS,CAAC,EAAE,CAAC;IACzD,CAAC;IACD,kEAAkE;IAClE,8DAA8D;IAC9D,OAAO,KAAK,CAAC;AACf,CAAC"}
@@ -7,7 +7,7 @@ let cachedPackageInfo;
7
7
  let cachedWorkflowPackageRoot;
8
8
  // The package build stamps the published version into `dist` so bundled
9
9
  // deployments can still report package metadata without resolving package.json.
10
- const BUNDLED_FALLBACK_PACKAGE_VERSION = "0.3.0-alpha.8";
10
+ const BUNDLED_FALLBACK_PACKAGE_VERSION = "0.3.0-alpha.9";
11
11
  const BUNDLED_FALLBACK_PACKAGE_VERSION_PLACEHOLDER = "__ASH_PACKAGE_VERSION_PLACEHOLDER__";
12
12
  const WORKFLOW_DEFAULT_EXPORT_PATHS = {
13
13
  workflow: ["dist", "index.js"],
@@ -13,6 +13,12 @@
13
13
  * Returns `null` for URL-shaped inputs we cannot fetch locally — remote
14
14
  * `http(s):` URLs and provider-reference records. Callers leave those
15
15
  * parts untouched so the provider resolves them at call time.
16
+ *
17
+ * Attachment refs (`ash-attachment:` URLs) are resolved via the
18
+ * {@link ChannelKey} adapter's `attachments` resolver. The ref's
19
+ * `adapterKind` must match the active adapter — cross-adapter
20
+ * resolution is unsupported and surfaces as
21
+ * {@link AshAttachmentError}`{ kind: "wrong-kind" }`.
16
22
  */
17
23
  export declare function fileDataToBytes(data: unknown): Promise<Buffer | null>;
18
24
  /**
@@ -21,6 +27,11 @@ export declare function fileDataToBytes(data: unknown): Promise<Buffer | null>;
21
27
  * Handles the same shapes as {@link fileDataToBytes} plus base64 length
22
28
  * estimation for plain strings and data URLs. Returns `null` for URL
23
29
  * values whose size is only knowable after fetching.
30
+ *
31
+ * For attachment refs (`ash-attachment:` URLs), returns the `__size`
32
+ * query param when the adapter populated it and `null` otherwise —
33
+ * callers treat `null` as "unknown, skip the size check" the same way
34
+ * remote `http(s):` URLs are handled.
24
35
  */
25
36
  export declare function getKnownByteLength(data: unknown): number | null;
26
37
  //# sourceMappingURL=data.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"data.d.ts","sourceRoot":"","sources":["../../../../src/internal/attachments/data.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH;;;;;;GAMG;AACH,wBAAsB,eAAe,CAAC,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CA2B3E;AAED;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,OAAO,GAAG,MAAM,GAAG,IAAI,CAyB/D"}
1
+ {"version":3,"file":"data.d.ts","sourceRoot":"","sources":["../../../../src/internal/attachments/data.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAOH;;;;;;;;;;;;GAYG;AACH,wBAAsB,eAAe,CAAC,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CA+B3E;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,OAAO,GAAG,MAAM,GAAG,IAAI,CA8B/D"}
@@ -7,12 +7,22 @@
7
7
  * etc.). Kept internal so the public surface stays scoped to
8
8
  * `UploadPolicy` + `defineFilePart` helpers in `public/channels/`.
9
9
  */
10
+ import { loadContext } from "../../context/container.js";
11
+ import { ChannelKey } from "../../context/keys.js";
12
+ import { AshAttachmentError } from "./errors.js";
13
+ import { isAttachmentRefUrl, parseAttachmentRef } from "./refs.js";
10
14
  /**
11
15
  * Converts any AI SDK `FilePart.data` value into raw bytes.
12
16
  *
13
17
  * Returns `null` for URL-shaped inputs we cannot fetch locally — remote
14
18
  * `http(s):` URLs and provider-reference records. Callers leave those
15
19
  * parts untouched so the provider resolves them at call time.
20
+ *
21
+ * Attachment refs (`ash-attachment:` URLs) are resolved via the
22
+ * {@link ChannelKey} adapter's `attachments` resolver. The ref's
23
+ * `adapterKind` must match the active adapter — cross-adapter
24
+ * resolution is unsupported and surfaces as
25
+ * {@link AshAttachmentError}`{ kind: "wrong-kind" }`.
16
26
  */
17
27
  export async function fileDataToBytes(data) {
18
28
  // Buffer extends Uint8Array — check it first so genuine Buffer inputs
@@ -29,6 +39,9 @@ export async function fileDataToBytes(data) {
29
39
  if (typeof data === "string") {
30
40
  return decodeStringData(data);
31
41
  }
42
+ if (isAttachmentRefUrl(data)) {
43
+ return resolveAttachmentRefToBytes(data);
44
+ }
32
45
  if (data instanceof URL) {
33
46
  if (data.protocol === "data:") {
34
47
  return decodeStringData(data.href);
@@ -43,6 +56,11 @@ export async function fileDataToBytes(data) {
43
56
  * Handles the same shapes as {@link fileDataToBytes} plus base64 length
44
57
  * estimation for plain strings and data URLs. Returns `null` for URL
45
58
  * values whose size is only knowable after fetching.
59
+ *
60
+ * For attachment refs (`ash-attachment:` URLs), returns the `__size`
61
+ * query param when the adapter populated it and `null` otherwise —
62
+ * callers treat `null` as "unknown, skip the size check" the same way
63
+ * remote `http(s):` URLs are handled.
46
64
  */
47
65
  export function getKnownByteLength(data) {
48
66
  if (typeof Buffer !== "undefined" && Buffer.isBuffer(data)) {
@@ -57,6 +75,10 @@ export function getKnownByteLength(data) {
57
75
  if (typeof data === "string") {
58
76
  return computeStringByteLength(data);
59
77
  }
78
+ if (isAttachmentRefUrl(data)) {
79
+ const ref = parseAttachmentRef(data);
80
+ return ref.size ?? null;
81
+ }
60
82
  if (data instanceof URL) {
61
83
  if (data.protocol === "data:") {
62
84
  return computeStringByteLength(data.href);
@@ -65,6 +87,57 @@ export function getKnownByteLength(data) {
65
87
  }
66
88
  return null;
67
89
  }
90
+ /**
91
+ * Resolves an {@link AttachmentRef} URL to bytes via the active
92
+ * adapter's `attachments` resolver.
93
+ *
94
+ * Thin dispatch on top of {@link parseAttachmentRef} and the
95
+ * {@link ChannelKey}-bound adapter. Every failure mode surfaces as an
96
+ * {@link AshAttachmentError} with a kind discriminator so channel code
97
+ * can decide between drop-and-warn and hard-fail on a per-kind basis.
98
+ * Today every caller drops; the kinds are carried forward so a future
99
+ * strict mode can opt in without a second rewrite.
100
+ */
101
+ async function resolveAttachmentRefToBytes(url) {
102
+ const ref = parseAttachmentRef(url);
103
+ const adapter = loadContext().get(ChannelKey);
104
+ if (adapter === undefined) {
105
+ throw new AshAttachmentError({
106
+ adapterKind: ref.adapterKind,
107
+ kind: "missing-adapter",
108
+ message: `No channel adapter is bound on the active context — cannot resolve ash-attachment:${ref.adapterKind} ref.`,
109
+ });
110
+ }
111
+ const activeKind = adapter.kind ?? "unknown";
112
+ if (activeKind !== ref.adapterKind) {
113
+ throw new AshAttachmentError({
114
+ adapterKind: ref.adapterKind,
115
+ kind: "wrong-kind",
116
+ message: `Attachment ref adapterKind="${ref.adapterKind}" does not match active adapter kind="${activeKind}". Cross-adapter resolution is not supported.`,
117
+ });
118
+ }
119
+ if (adapter.attachments === undefined) {
120
+ throw new AshAttachmentError({
121
+ adapterKind: activeKind,
122
+ kind: "resolver-missing",
123
+ message: `Channel adapter kind="${activeKind}" did not declare an \`attachments\` resolver but received an attachment ref.`,
124
+ });
125
+ }
126
+ try {
127
+ return await adapter.attachments.resolve(ref);
128
+ }
129
+ catch (cause) {
130
+ if (cause instanceof AshAttachmentError) {
131
+ throw cause;
132
+ }
133
+ throw new AshAttachmentError({
134
+ adapterKind: activeKind,
135
+ cause,
136
+ kind: "resolver-threw",
137
+ message: `Attachment resolver for adapter kind="${activeKind}" threw: ${cause instanceof Error ? cause.message : String(cause)}`,
138
+ });
139
+ }
140
+ }
68
141
  function decodeStringData(value) {
69
142
  if (value.startsWith("data:")) {
70
143
  const comma = value.indexOf(",");
@@ -1 +1 @@
1
- {"version":3,"file":"data.js","sourceRoot":"","sources":["../../../../src/internal/attachments/data.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"data.js","sourceRoot":"","sources":["../../../../src/internal/attachments/data.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,60 @@
1
+ /**
2
+ * Structured errors surfaced when a channel-owned attachment resolver
3
+ * fails to materialize the bytes for an {@link AttachmentRef}.
4
+ *
5
+ * The `kind` discriminator lets call sites (and future strict-mode
6
+ * policies) tell the difference between operator misconfiguration
7
+ * (`missing-adapter`, `wrong-kind`, `resolver-missing`), malformed
8
+ * refs (`missing-param`), and transport-level failure
9
+ * (`fetch-failed`, `resolver-threw`).
10
+ */
11
+ /**
12
+ * Discriminator for {@link AshAttachmentError}.
13
+ *
14
+ * - `missing-adapter` — no `ChannelKey` was bound on the active context
15
+ * when staging tried to resolve a ref. This is a programmer error:
16
+ * the ref reached staging without an adapter having been installed
17
+ * by the runtime.
18
+ * - `wrong-kind` — the ref's `adapterKind` does not match the active
19
+ * adapter. Cross-adapter resolution is intentionally unsupported.
20
+ * - `resolver-missing` — the active adapter matches the ref's
21
+ * `adapterKind` but does not provide an `attachments` resolver.
22
+ * - `missing-param` — the resolver looked for an adapter-defined
23
+ * parameter on `ref.params` and did not find it.
24
+ * - `fetch-failed` — the resolver attempted to fetch bytes from an
25
+ * upstream endpoint and the endpoint returned a non-2xx status or
26
+ * the network call failed.
27
+ * - `resolver-threw` — the resolver threw something that is not
28
+ * already an {@link AshAttachmentError}. Used as the catch-all
29
+ * wrapper in the staging-layer dispatch.
30
+ */
31
+ export type AshAttachmentErrorKind = "missing-adapter" | "wrong-kind" | "resolver-missing" | "missing-param" | "fetch-failed" | "resolver-threw";
32
+ /**
33
+ * Input shape for {@link AshAttachmentError}. Separated from the class
34
+ * constructor so callers can build the options object inline and TS
35
+ * can check the `kind` / `message` pair without a positional
36
+ * constructor signature.
37
+ */
38
+ export interface AshAttachmentErrorInput {
39
+ readonly kind: AshAttachmentErrorKind;
40
+ readonly message: string;
41
+ readonly adapterKind?: string;
42
+ readonly cause?: unknown;
43
+ }
44
+ /**
45
+ * Error surfaced when an attachment resolver fails to produce bytes for
46
+ * an {@link AttachmentRef}.
47
+ *
48
+ * Channels can inspect the `.kind` discriminator to decide whether to
49
+ * drop the attachment and continue the turn (the default posture for
50
+ * every kind today) or fail the whole delivery (future strict mode).
51
+ * The original failure, when there is one, is preserved on `.cause` so
52
+ * observability can surface the upstream error without losing context.
53
+ */
54
+ export declare class AshAttachmentError extends Error {
55
+ readonly kind: AshAttachmentErrorKind;
56
+ readonly adapterKind?: string;
57
+ readonly cause?: unknown;
58
+ constructor(input: AshAttachmentErrorInput);
59
+ }
60
+ //# sourceMappingURL=errors.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../../../src/internal/attachments/errors.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAM,MAAM,sBAAsB,GAC9B,iBAAiB,GACjB,YAAY,GACZ,kBAAkB,GAClB,eAAe,GACf,cAAc,GACd,gBAAgB,CAAC;AAErB;;;;;GAKG;AACH,MAAM,WAAW,uBAAuB;IACtC,QAAQ,CAAC,IAAI,EAAE,sBAAsB,CAAC;IACtC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC;CAC1B;AAED;;;;;;;;;GASG;AACH,qBAAa,kBAAmB,SAAQ,KAAK;IAC3C,QAAQ,CAAC,IAAI,EAAE,sBAAsB,CAAC;IACtC,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,SAAkB,KAAK,CAAC,EAAE,OAAO,CAAC;IAElC,YAAY,KAAK,EAAE,uBAAuB,EAUzC;CACF"}
@@ -0,0 +1,37 @@
1
+ /**
2
+ * Structured errors surfaced when a channel-owned attachment resolver
3
+ * fails to materialize the bytes for an {@link AttachmentRef}.
4
+ *
5
+ * The `kind` discriminator lets call sites (and future strict-mode
6
+ * policies) tell the difference between operator misconfiguration
7
+ * (`missing-adapter`, `wrong-kind`, `resolver-missing`), malformed
8
+ * refs (`missing-param`), and transport-level failure
9
+ * (`fetch-failed`, `resolver-threw`).
10
+ */
11
+ /**
12
+ * Error surfaced when an attachment resolver fails to produce bytes for
13
+ * an {@link AttachmentRef}.
14
+ *
15
+ * Channels can inspect the `.kind` discriminator to decide whether to
16
+ * drop the attachment and continue the turn (the default posture for
17
+ * every kind today) or fail the whole delivery (future strict mode).
18
+ * The original failure, when there is one, is preserved on `.cause` so
19
+ * observability can surface the upstream error without losing context.
20
+ */
21
+ export class AshAttachmentError extends Error {
22
+ kind;
23
+ adapterKind;
24
+ cause;
25
+ constructor(input) {
26
+ super(input.message);
27
+ this.name = "AshAttachmentError";
28
+ this.kind = input.kind;
29
+ if (input.adapterKind !== undefined) {
30
+ this.adapterKind = input.adapterKind;
31
+ }
32
+ if (input.cause !== undefined) {
33
+ this.cause = input.cause;
34
+ }
35
+ }
36
+ }
37
+ //# sourceMappingURL=errors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.js","sourceRoot":"","sources":["../../../../src/internal/attachments/errors.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AA2CH;;;;;;;;;GASG;AACH,MAAM,OAAO,kBAAmB,SAAQ,KAAK;IAClC,IAAI,CAAyB;IAC7B,WAAW,CAAU;IACZ,KAAK,CAAW;IAElC,YAAY,KAA8B;QACxC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QACrB,IAAI,CAAC,IAAI,GAAG,oBAAoB,CAAC;QACjC,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC;QACvB,IAAI,KAAK,CAAC,WAAW,KAAK,SAAS,EAAE,CAAC;YACpC,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC,WAAW,CAAC;QACvC,CAAC;QACD,IAAI,KAAK,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;YAC9B,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC;QAC3B,CAAC;IACH,CAAC;CACF"}
@@ -0,0 +1,95 @@
1
+ /**
2
+ * Opaque attachment references: the wire format a channel uses to carry
3
+ * file identity across step boundaries without inlining the bytes.
4
+ *
5
+ * A ref is encoded as a URL with a custom scheme:
6
+ *
7
+ * ```
8
+ * ash-attachment:<adapterKind>?<params>&__size=<bytes>
9
+ * ```
10
+ *
11
+ * The scheme isolates refs from normal `http(s):` / `data:` URLs so the
12
+ * staging layer can dispatch safely. The first path segment is the
13
+ * adapter kind and is authoritative for resolution — only the adapter
14
+ * that produced the ref can turn it back into bytes.
15
+ *
16
+ * Query keys that start with `__` are reserved for framework use
17
+ * (today just `__size`); adapter-defined params must not collide with
18
+ * them.
19
+ *
20
+ * Refs are deliberately small (~200 bytes for a typical Slack file) so
21
+ * they cross the Vercel Queue 8 KB per-field multipart boundary
22
+ * trivially. Every adapter that produces `FilePart.data` on inbound
23
+ * turns MUST emit a ref — inline bytes are architecturally unviable.
24
+ */
25
+ /**
26
+ * Custom URL scheme used by every attachment ref.
27
+ *
28
+ * The trailing colon is part of the scheme per WHATWG URL semantics.
29
+ * Code that parses or constructs refs should import this constant
30
+ * instead of hard-coding the literal.
31
+ */
32
+ export declare const ATTACHMENT_REF_SCHEME = "ash-attachment:";
33
+ /**
34
+ * Query key carrying the optional byte length. Reserved — adapter
35
+ * params must not use any key starting with `__`.
36
+ */
37
+ export declare const ATTACHMENT_REF_SIZE_KEY = "__size";
38
+ /**
39
+ * Serializable description of one inbound file attachment.
40
+ *
41
+ * `adapterKind` ties the ref to the adapter that produced it. The
42
+ * runtime staging layer refuses to resolve a ref whose `adapterKind`
43
+ * does not match the adapter currently bound on the active context.
44
+ *
45
+ * `params` is an adapter-defined string→string map. It never carries
46
+ * credentials — resolvers pull those from their own adapter state
47
+ * (closure capture at construction time). Slack sets
48
+ * `{ url, file_id }`; a hypothetical HTTP blob adapter would set
49
+ * `{ blob_key }`; custom adapters define whatever they need.
50
+ *
51
+ * `size` is optional. Adapters populate it whenever the upstream
52
+ * protocol exposes the byte length before fetch so upload-policy size
53
+ * checks can run without pulling the bytes. Slack populates it from
54
+ * the Slack attachment metadata; generic HTTP URL refs that need a
55
+ * HEAD request to discover size leave it unset.
56
+ */
57
+ export interface AttachmentRef {
58
+ readonly adapterKind: string;
59
+ readonly params: Readonly<Record<string, string>>;
60
+ readonly size?: number;
61
+ }
62
+ /**
63
+ * Encodes an {@link AttachmentRef} as a URL suitable for use as
64
+ * `FilePart.data`.
65
+ *
66
+ * Validates that:
67
+ * - `adapterKind` is non-empty.
68
+ * - No reserved query key (`__*`) appears in `params`.
69
+ * - `size`, when provided, is a non-negative finite integer.
70
+ *
71
+ * The returned URL stringifies to a compact form (e.g.
72
+ * `ash-attachment:slack?url=...&file_id=...&__size=13319`) that
73
+ * comfortably fits under the Vercel Queue 8 KB field cap.
74
+ */
75
+ export declare function encodeAttachmentRef(ref: AttachmentRef): URL;
76
+ /**
77
+ * Parses an {@link AttachmentRef} back out of a URL.
78
+ *
79
+ * Throws when the URL's scheme is not `ash-attachment:`, when the
80
+ * adapter-kind segment is missing, or when `__size` is present but
81
+ * cannot be parsed as a non-negative integer. Reserved query keys
82
+ * (other than `__size`) are ignored so future framework keys stay
83
+ * forward-compatible.
84
+ */
85
+ export declare function parseAttachmentRef(url: URL): AttachmentRef;
86
+ /**
87
+ * Cheap runtime check: does this value look like an attachment-ref URL?
88
+ *
89
+ * Accepts `URL` instances with the `ash-attachment:` scheme. Strings
90
+ * are NOT accepted — the staging layer only checks URL-instance
91
+ * `FilePart.data` values, matching the existing `data instanceof URL`
92
+ * branch in `fileDataToBytes`.
93
+ */
94
+ export declare function isAttachmentRefUrl(value: unknown): value is URL;
95
+ //# sourceMappingURL=refs.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"refs.d.ts","sourceRoot":"","sources":["../../../../src/internal/attachments/refs.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAEH;;;;;;GAMG;AACH,eAAO,MAAM,qBAAqB,oBAAoB,CAAC;AAEvD;;;GAGG;AACH,eAAO,MAAM,uBAAuB,WAAW,CAAC;AAIhD;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IAClD,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;CACxB;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,aAAa,GAAG,GAAG,CA6B3D;AAED;;;;;;;;GAQG;AACH,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,GAAG,GAAG,aAAa,CAyC1D;AAED;;;;;;;GAOG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,GAAG,CAE/D"}
@@ -0,0 +1,132 @@
1
+ /**
2
+ * Opaque attachment references: the wire format a channel uses to carry
3
+ * file identity across step boundaries without inlining the bytes.
4
+ *
5
+ * A ref is encoded as a URL with a custom scheme:
6
+ *
7
+ * ```
8
+ * ash-attachment:<adapterKind>?<params>&__size=<bytes>
9
+ * ```
10
+ *
11
+ * The scheme isolates refs from normal `http(s):` / `data:` URLs so the
12
+ * staging layer can dispatch safely. The first path segment is the
13
+ * adapter kind and is authoritative for resolution — only the adapter
14
+ * that produced the ref can turn it back into bytes.
15
+ *
16
+ * Query keys that start with `__` are reserved for framework use
17
+ * (today just `__size`); adapter-defined params must not collide with
18
+ * them.
19
+ *
20
+ * Refs are deliberately small (~200 bytes for a typical Slack file) so
21
+ * they cross the Vercel Queue 8 KB per-field multipart boundary
22
+ * trivially. Every adapter that produces `FilePart.data` on inbound
23
+ * turns MUST emit a ref — inline bytes are architecturally unviable.
24
+ */
25
+ /**
26
+ * Custom URL scheme used by every attachment ref.
27
+ *
28
+ * The trailing colon is part of the scheme per WHATWG URL semantics.
29
+ * Code that parses or constructs refs should import this constant
30
+ * instead of hard-coding the literal.
31
+ */
32
+ export const ATTACHMENT_REF_SCHEME = "ash-attachment:";
33
+ /**
34
+ * Query key carrying the optional byte length. Reserved — adapter
35
+ * params must not use any key starting with `__`.
36
+ */
37
+ export const ATTACHMENT_REF_SIZE_KEY = "__size";
38
+ const RESERVED_KEY_PREFIX = "__";
39
+ /**
40
+ * Encodes an {@link AttachmentRef} as a URL suitable for use as
41
+ * `FilePart.data`.
42
+ *
43
+ * Validates that:
44
+ * - `adapterKind` is non-empty.
45
+ * - No reserved query key (`__*`) appears in `params`.
46
+ * - `size`, when provided, is a non-negative finite integer.
47
+ *
48
+ * The returned URL stringifies to a compact form (e.g.
49
+ * `ash-attachment:slack?url=...&file_id=...&__size=13319`) that
50
+ * comfortably fits under the Vercel Queue 8 KB field cap.
51
+ */
52
+ export function encodeAttachmentRef(ref) {
53
+ if (ref.adapterKind.length === 0) {
54
+ throw new Error("AttachmentRef.adapterKind must be a non-empty string.");
55
+ }
56
+ if (ref.size !== undefined) {
57
+ if (!Number.isFinite(ref.size) || ref.size < 0 || !Number.isInteger(ref.size)) {
58
+ throw new RangeError(`AttachmentRef.size must be a non-negative integer. Received: ${String(ref.size)}.`);
59
+ }
60
+ }
61
+ for (const key of Object.keys(ref.params)) {
62
+ if (key.startsWith(RESERVED_KEY_PREFIX)) {
63
+ throw new Error(`AttachmentRef.params key "${key}" is reserved. Query keys starting with "__" are framework-owned.`);
64
+ }
65
+ }
66
+ const url = new URL(`${ATTACHMENT_REF_SCHEME}${encodeURIComponent(ref.adapterKind)}`);
67
+ for (const [key, value] of Object.entries(ref.params)) {
68
+ url.searchParams.set(key, value);
69
+ }
70
+ if (ref.size !== undefined) {
71
+ url.searchParams.set(ATTACHMENT_REF_SIZE_KEY, String(ref.size));
72
+ }
73
+ return url;
74
+ }
75
+ /**
76
+ * Parses an {@link AttachmentRef} back out of a URL.
77
+ *
78
+ * Throws when the URL's scheme is not `ash-attachment:`, when the
79
+ * adapter-kind segment is missing, or when `__size` is present but
80
+ * cannot be parsed as a non-negative integer. Reserved query keys
81
+ * (other than `__size`) are ignored so future framework keys stay
82
+ * forward-compatible.
83
+ */
84
+ export function parseAttachmentRef(url) {
85
+ if (url.protocol !== ATTACHMENT_REF_SCHEME) {
86
+ throw new Error(`AttachmentRef URL must use scheme "${ATTACHMENT_REF_SCHEME}". Got: "${url.protocol}".`);
87
+ }
88
+ // Custom-scheme URLs have their adapter kind in `pathname` (no
89
+ // authority). `new URL("ash-attachment:slack?x=1").pathname === "slack"`.
90
+ const rawKind = url.pathname;
91
+ if (rawKind.length === 0) {
92
+ throw new Error(`AttachmentRef URL is missing the adapter-kind segment. Got: "${url.href}".`);
93
+ }
94
+ const adapterKind = decodeURIComponent(rawKind);
95
+ if (adapterKind.length === 0) {
96
+ throw new Error(`AttachmentRef URL has an empty adapter-kind segment. Got: "${url.href}".`);
97
+ }
98
+ const params = {};
99
+ let size;
100
+ for (const [key, value] of url.searchParams) {
101
+ if (key === ATTACHMENT_REF_SIZE_KEY) {
102
+ const parsed = Number(value);
103
+ if (!Number.isFinite(parsed) || parsed < 0 || !Number.isInteger(parsed)) {
104
+ throw new Error(`AttachmentRef "__size" must be a non-negative integer. Got: "${value}".`);
105
+ }
106
+ size = parsed;
107
+ continue;
108
+ }
109
+ if (key.startsWith(RESERVED_KEY_PREFIX)) {
110
+ // Skip unknown reserved keys; the framework owns them and
111
+ // adapter code has no business interpreting them.
112
+ continue;
113
+ }
114
+ params[key] = value;
115
+ }
116
+ if (size === undefined) {
117
+ return { adapterKind, params };
118
+ }
119
+ return { adapterKind, params, size };
120
+ }
121
+ /**
122
+ * Cheap runtime check: does this value look like an attachment-ref URL?
123
+ *
124
+ * Accepts `URL` instances with the `ash-attachment:` scheme. Strings
125
+ * are NOT accepted — the staging layer only checks URL-instance
126
+ * `FilePart.data` values, matching the existing `data instanceof URL`
127
+ * branch in `fileDataToBytes`.
128
+ */
129
+ export function isAttachmentRefUrl(value) {
130
+ return value instanceof URL && value.protocol === ATTACHMENT_REF_SCHEME;
131
+ }
132
+ //# sourceMappingURL=refs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"refs.js","sourceRoot":"","sources":["../../../../src/internal/attachments/refs.ts"],"names":[],"mappings":"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"}
@@ -24,8 +24,10 @@
24
24
  * });
25
25
  * ```
26
26
  */
27
- export type { ChannelAdapter, ChannelAdapterContext } from "../../channel/adapter.js";
27
+ export type { AttachmentResolver, ChannelAdapter, ChannelAdapterContext, } from "../../channel/adapter.js";
28
28
  export type { EventEmitFn } from "../../channel/types.js";
29
+ export { AshAttachmentError, type AshAttachmentErrorInput, type AshAttachmentErrorKind, } from "../../internal/attachments/errors.js";
30
+ export { ATTACHMENT_REF_SCHEME, type AttachmentRef, encodeAttachmentRef, isAttachmentRefUrl, parseAttachmentRef, } from "../../internal/attachments/refs.js";
29
31
  export { type Agent, type ChannelMethod, type DisabledRouteSentinel, defineRoute, disableRoute, isDisabledRouteSentinel, isRouteDefinition, type Route, type RouteContext, } from "../definitions/channel.js";
30
32
  export { collectUploadPolicyViolations, DEFAULT_UPLOAD_POLICY, evaluateFilePart, formatUploadPolicyViolation, isMediaTypeAllowed, mergeUploadPolicy, stripDisallowedFileParts, type UploadPolicy, type UploadPolicyViolation, } from "./upload-policy.js";
31
33
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/public/channels/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAEH,YAAY,EAAE,cAAc,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;AACtF,YAAY,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,EACL,KAAK,KAAK,EACV,KAAK,aAAa,EAClB,KAAK,qBAAqB,EAC1B,WAAW,EACX,YAAY,EACZ,uBAAuB,EACvB,iBAAiB,EACjB,KAAK,KAAK,EACV,KAAK,YAAY,GAClB,MAAM,2BAA2B,CAAC;AACnC,OAAO,EACL,6BAA6B,EAC7B,qBAAqB,EACrB,gBAAgB,EAChB,2BAA2B,EAC3B,kBAAkB,EAClB,iBAAiB,EACjB,wBAAwB,EACxB,KAAK,YAAY,EACjB,KAAK,qBAAqB,GAC3B,MAAM,oBAAoB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/public/channels/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAEH,YAAY,EACV,kBAAkB,EAClB,cAAc,EACd,qBAAqB,GACtB,MAAM,0BAA0B,CAAC;AAClC,YAAY,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,EACL,kBAAkB,EAClB,KAAK,uBAAuB,EAC5B,KAAK,sBAAsB,GAC5B,MAAM,sCAAsC,CAAC;AAC9C,OAAO,EACL,qBAAqB,EACrB,KAAK,aAAa,EAClB,mBAAmB,EACnB,kBAAkB,EAClB,kBAAkB,GACnB,MAAM,oCAAoC,CAAC;AAC5C,OAAO,EACL,KAAK,KAAK,EACV,KAAK,aAAa,EAClB,KAAK,qBAAqB,EAC1B,WAAW,EACX,YAAY,EACZ,uBAAuB,EACvB,iBAAiB,EACjB,KAAK,KAAK,EACV,KAAK,YAAY,GAClB,MAAM,2BAA2B,CAAC;AACnC,OAAO,EACL,6BAA6B,EAC7B,qBAAqB,EACrB,gBAAgB,EAChB,2BAA2B,EAC3B,kBAAkB,EAClB,iBAAiB,EACjB,wBAAwB,EACxB,KAAK,YAAY,EACjB,KAAK,qBAAqB,GAC3B,MAAM,oBAAoB,CAAC"}
@@ -24,6 +24,8 @@
24
24
  * });
25
25
  * ```
26
26
  */
27
+ export { AshAttachmentError, } from "../../internal/attachments/errors.js";
28
+ export { ATTACHMENT_REF_SCHEME, encodeAttachmentRef, isAttachmentRefUrl, parseAttachmentRef, } from "../../internal/attachments/refs.js";
27
29
  export { defineRoute, disableRoute, isDisabledRouteSentinel, isRouteDefinition, } from "../definitions/channel.js";
28
30
  export { collectUploadPolicyViolations, DEFAULT_UPLOAD_POLICY, evaluateFilePart, formatUploadPolicyViolation, isMediaTypeAllowed, mergeUploadPolicy, stripDisallowedFileParts, } from "./upload-policy.js";
29
31
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/public/channels/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAIH,OAAO,EAIL,WAAW,EACX,YAAY,EACZ,uBAAuB,EACvB,iBAAiB,GAGlB,MAAM,2BAA2B,CAAC;AACnC,OAAO,EACL,6BAA6B,EAC7B,qBAAqB,EACrB,gBAAgB,EAChB,2BAA2B,EAC3B,kBAAkB,EAClB,iBAAiB,EACjB,wBAAwB,GAGzB,MAAM,oBAAoB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/public/channels/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAQH,OAAO,EACL,kBAAkB,GAGnB,MAAM,sCAAsC,CAAC;AAC9C,OAAO,EACL,qBAAqB,EAErB,mBAAmB,EACnB,kBAAkB,EAClB,kBAAkB,GACnB,MAAM,oCAAoC,CAAC;AAC5C,OAAO,EAIL,WAAW,EACX,YAAY,EACZ,uBAAuB,EACvB,iBAAiB,GAGlB,MAAM,2BAA2B,CAAC;AACnC,OAAO,EACL,6BAA6B,EAC7B,qBAAqB,EACrB,gBAAgB,EAChB,2BAA2B,EAC3B,kBAAkB,EAClB,iBAAiB,EACjB,wBAAwB,GAGzB,MAAM,oBAAoB,CAAC"}
@@ -182,8 +182,21 @@ export default slackRoute({
182
182
  });
183
183
  ```
184
184
 
185
+ ## Inbound Attachments
186
+
187
+ Channels that ingest file attachments (Slack, HTTP multipart, custom
188
+ webhooks) deliver them as opaque `ash-attachment:` refs rather than
189
+ inline bytes — the Vercel Queue 8 KB per-field multipart cap makes
190
+ inline delivery architecturally unviable. The channel's adapter owns
191
+ both ends of the contract: it encodes a ref on inbound turns and
192
+ declares an `attachments` resolver that materializes the bytes inside
193
+ a step boundary.
194
+
195
+ See [`./attachments.md`](./attachments.md) for the authoring guide.
196
+
185
197
  ## What To Read Next
186
198
 
199
+ - [`./attachments.md`](./attachments.md)
187
200
  - [`../project-layout.md`](../project-layout.md)
188
201
  - [`../typescript-api.md`](../typescript-api.md)
189
202
  - [`../auth-and-route-protection.md`](../auth-and-route-protection.md)
@@ -0,0 +1,168 @@
1
+ # Channel attachments
2
+
3
+ This guide explains how channels deliver inbound file attachments to the
4
+ agent without inlining the raw bytes in the turn message.
5
+
6
+ ## The problem
7
+
8
+ Every ash channel delivery path crosses at least one step boundary via
9
+ `agent.run()` or `agent.deliver()`. On Vercel, those boundaries hit a
10
+ **Vercel Queue 8 KB per-field multipart limit**. Any `FilePart.data`
11
+ carrying raw bytes above ~6 KB (after UTF‑8 / base64 overhead) trips the
12
+ limit and the delivery fails with a `MultipartParseError`.
13
+
14
+ For any practical attachment (CSVs, PDFs, screenshots, etc.) the bytes
15
+ cannot travel inline.
16
+
17
+ ## The design
18
+
19
+ The channel owns both ends of the file contract:
20
+
21
+ 1. **Encode a ref, not bytes.** When the channel observes an inbound
22
+ file, it builds an opaque `AttachmentRef` — a small URL
23
+ (`ash-attachment:<adapterKind>?...`) that carries whatever the
24
+ channel needs to re-fetch the bytes later (URL, object key, file id,
25
+ etc.).
26
+ 2. **Resolve the ref at staging time.** The channel's `ChannelAdapter`
27
+ declares an `attachments` resolver. When the harness prepares the
28
+ turn for the model it detects the ref, looks up the active adapter
29
+ via `ChannelKey`, and calls `adapter.attachments.resolve(ref)` to
30
+ materialize the bytes. The bytes are then written to the agent's
31
+ sandbox and the `FilePart.filename` is rewritten to the resolved
32
+ path.
33
+
34
+ The ref crosses every queue boundary as ~200 bytes of text. The bytes
35
+ only exist inside a single workflow step — they never cross a boundary.
36
+
37
+ ## Building a ref
38
+
39
+ Use the helpers exported from `experimental-ash/channels`:
40
+
41
+ ```ts
42
+ import { encodeAttachmentRef } from "experimental-ash/channels";
43
+
44
+ const ref = encodeAttachmentRef({
45
+ adapterKind: "slack",
46
+ params: { url: attachment.url, file_id: attachment.id },
47
+ size: attachment.size, // optional — enables pre-fetch size checks
48
+ });
49
+
50
+ const filePart: FilePart = {
51
+ type: "file",
52
+ mediaType: attachment.mimeType ?? "application/octet-stream",
53
+ filename: attachment.name ?? "attachment",
54
+ data: ref, // ← a URL, not bytes
55
+ };
56
+ ```
57
+
58
+ - `adapterKind` must match the adapter that will resolve this ref.
59
+ Cross-adapter resolution is unsupported and throws
60
+ `AshAttachmentError{ kind: "wrong-kind" }`.
61
+ - `params` is adapter-defined. Never put credentials here — the
62
+ resolver pulls those from its own adapter state.
63
+ - `size`, when populated, is checked against the route's
64
+ `UploadPolicy.maxBytes` before the bytes are fetched. A 500 MB ref
65
+ over a 25 MB policy is rejected without touching the network.
66
+
67
+ ## Writing a resolver
68
+
69
+ The resolver hangs off `ChannelAdapter.attachments`. It receives a ref
70
+ and returns bytes:
71
+
72
+ ```ts
73
+ import {
74
+ AshAttachmentError,
75
+ type AttachmentResolver,
76
+ type ChannelAdapter,
77
+ } from "experimental-ash/channels";
78
+
79
+ export function createDiscordAdapter(options: {
80
+ readonly botToken: string;
81
+ }): ChannelAdapter {
82
+ const attachments: AttachmentResolver = {
83
+ async resolve(ref) {
84
+ const url = ref.params.cdn_url;
85
+ if (url === undefined) {
86
+ throw new AshAttachmentError({
87
+ adapterKind: "discord",
88
+ kind: "missing-param",
89
+ message: 'discord attachment ref is missing the "cdn_url" param',
90
+ });
91
+ }
92
+ const response = await fetch(url, {
93
+ headers: { authorization: `Bot ${options.botToken}` },
94
+ });
95
+ if (!response.ok) {
96
+ throw new AshAttachmentError({
97
+ adapterKind: "discord",
98
+ kind: "fetch-failed",
99
+ message: `discord attachment fetch failed: HTTP ${response.status}`,
100
+ });
101
+ }
102
+ return Buffer.from(await response.arrayBuffer());
103
+ },
104
+ };
105
+
106
+ return {
107
+ attachments,
108
+ deliver: /* ... */,
109
+ kind: "discord",
110
+ state: {},
111
+ };
112
+ }
113
+ ```
114
+
115
+ The resolver:
116
+
117
+ - **Runs inside a step boundary.** Full Node access, full async, full
118
+ filesystem. Safe to use `fetch`, cryptographic primitives, etc.
119
+ - **Closes over credentials.** `botToken` is captured at construction;
120
+ the ref itself carries only the identity of the file.
121
+ - **Throws `AshAttachmentError` on failure.** The `kind` discriminator
122
+ lets observability distinguish operator misconfiguration from
123
+ transport failure. Uncategorized throws are wrapped as
124
+ `resolver-threw`.
125
+
126
+ ## Error kinds
127
+
128
+ `AshAttachmentError.kind` is one of:
129
+
130
+ | kind | meaning |
131
+ | ------------------ | ---------------------------------------------------------------------------- |
132
+ | `missing-adapter` | No `ChannelKey` was bound on the active context. |
133
+ | `wrong-kind` | The ref's `adapterKind` does not match the active adapter. |
134
+ | `resolver-missing` | The active adapter matches, but did not declare an `attachments` resolver. |
135
+ | `missing-param` | The resolver looked for an adapter-defined param on `ref.params` and missed. |
136
+ | `fetch-failed` | Non-2xx HTTP response or transport-level network failure. |
137
+ | `resolver-threw` | Catch-all wrapper for unclassified throws out of the resolver. |
138
+
139
+ The current default posture across every kind is **drop the
140
+ attachment, log a warning, and continue the turn** — matching the old
141
+ "broken upload" path. Channels can inspect `.kind` and decide to fail
142
+ hard in a future strict mode.
143
+
144
+ ## Dropped attachments
145
+
146
+ Attachments that can't be expressed as a ref (no URL, no stable
147
+ identity) cannot be delivered. The channel should log and drop them:
148
+
149
+ ```ts
150
+ if (attachment.url === undefined) {
151
+ console.warn("[my-channel] dropped attachment — no url available for ref construction", {
152
+ name: attachment.name,
153
+ });
154
+ continue;
155
+ }
156
+ ```
157
+
158
+ This mirrors the shape the Slack adapter uses today.
159
+
160
+ ## What you do NOT have to do
161
+
162
+ - Stream the bytes yourself. The harness writes them to the sandbox
163
+ after your resolver returns.
164
+ - Deduplicate fetches. Refs SHA-dedupe at the sandbox layer
165
+ (`stageFilePart`). Network-level caching inside the resolver is
166
+ optional and transparent.
167
+ - Worry about step boundaries in the resolver. The resolver is only
168
+ called from inside a step.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "experimental-ash",
3
- "version": "0.3.0-alpha.8",
3
+ "version": "0.3.0-alpha.9",
4
4
  "bin": {
5
5
  "ash": "./bin/ash.js",
6
6
  "experimental-ash": "./bin/ash.js"