@alvin0/ai-agent-sdk-core 0.1.0 → 0.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (178) hide show
  1. package/dist/agent/define/session/model-config.js +1 -1
  2. package/dist/agent/define/session/model-config.js.map +1 -1
  3. package/dist/agent/define/session/types.d.ts +21 -0
  4. package/dist/agent/define/session/types.d.ts.map +1 -1
  5. package/dist/agent/define/session.d.ts +2 -0
  6. package/dist/agent/define/session.d.ts.map +1 -1
  7. package/dist/agent/define/session.js +1 -1
  8. package/dist/agent/define/session.js.map +1 -1
  9. package/dist/agent/history/validation.js +1 -1
  10. package/dist/agent/history/validation.js.map +1 -1
  11. package/dist/agent/loop/events.d.ts +5 -0
  12. package/dist/agent/loop/events.d.ts.map +1 -1
  13. package/dist/agent/loop/schedule.js +1 -1
  14. package/dist/agent/loop/schedule.js.map +1 -1
  15. package/dist/agent/loop/turn/model-round.js +1 -1
  16. package/dist/agent/loop/turn/model-round.js.map +1 -1
  17. package/dist/agent/loop/turn/types.d.ts +2 -0
  18. package/dist/agent/loop/turn/types.d.ts.map +1 -1
  19. package/dist/agent/loop/turn/validation.js +1 -1
  20. package/dist/agent/loop/turn/validation.js.map +1 -1
  21. package/dist/agent/memory/compaction.d.ts +10 -1
  22. package/dist/agent/memory/compaction.d.ts.map +1 -1
  23. package/dist/agent/memory/compaction.js +2 -2
  24. package/dist/agent/memory/compaction.js.map +1 -1
  25. package/dist/agent/memory/token-estimator.js +1 -1
  26. package/dist/agent/memory/token-estimator.js.map +1 -1
  27. package/dist/agent/mode/run-agent.js +1 -1
  28. package/dist/agent/mode/run-agent.js.map +1 -1
  29. package/dist/composition/agent/options.js +1 -1
  30. package/dist/composition/agent/options.js.map +1 -1
  31. package/dist/composition/agent/session.js +1 -1
  32. package/dist/composition/agent/session.js.map +1 -1
  33. package/dist/composition/agent/types.d.ts +43 -1
  34. package/dist/composition/agent/types.d.ts.map +1 -1
  35. package/dist/composition/common/errors.d.ts.map +1 -1
  36. package/dist/composition/common/errors.js +1 -1
  37. package/dist/composition/common/errors.js.map +1 -1
  38. package/dist/composition/embedding/activation.js +2 -0
  39. package/dist/composition/embedding/activation.js.map +1 -0
  40. package/dist/composition/embedding/cache.js +2 -0
  41. package/dist/composition/embedding/cache.js.map +1 -0
  42. package/dist/composition/embedding/definition.d.ts +7 -0
  43. package/dist/composition/embedding/definition.d.ts.map +1 -0
  44. package/dist/composition/embedding/definition.js +2 -0
  45. package/dist/composition/embedding/definition.js.map +1 -0
  46. package/dist/composition/embedding/handle.js +2 -0
  47. package/dist/composition/embedding/handle.js.map +1 -0
  48. package/dist/composition/embedding/limiter.js +2 -0
  49. package/dist/composition/embedding/limiter.js.map +1 -0
  50. package/dist/composition/embedding/manager.js +2 -0
  51. package/dist/composition/embedding/manager.js.map +1 -0
  52. package/dist/composition/embedding/observation.js +2 -0
  53. package/dist/composition/embedding/observation.js.map +1 -0
  54. package/dist/composition/embedding/planner.js +2 -0
  55. package/dist/composition/embedding/planner.js.map +1 -0
  56. package/dist/composition/embedding/plugin-types.d.ts +48 -0
  57. package/dist/composition/embedding/plugin-types.d.ts.map +1 -0
  58. package/dist/composition/embedding/plugin-types.js +2 -0
  59. package/dist/composition/embedding/plugin-types.js.map +1 -0
  60. package/dist/composition/embedding/preflight.js +2 -0
  61. package/dist/composition/embedding/preflight.js.map +1 -0
  62. package/dist/composition/embedding/registry.js +2 -0
  63. package/dist/composition/embedding/registry.js.map +1 -0
  64. package/dist/composition/embedding/retry.js +2 -0
  65. package/dist/composition/embedding/retry.js.map +1 -0
  66. package/dist/composition/embedding/usage.js +2 -0
  67. package/dist/composition/embedding/usage.js.map +1 -0
  68. package/dist/composition/lifecycle/types.d.ts +5 -1
  69. package/dist/composition/lifecycle/types.d.ts.map +1 -1
  70. package/dist/composition/lifecycle/types.js +1 -1
  71. package/dist/composition/lifecycle/types.js.map +1 -1
  72. package/dist/composition/preflight.js +1 -1
  73. package/dist/composition/preflight.js.map +1 -1
  74. package/dist/composition/provider/activation.js +1 -1
  75. package/dist/composition/provider/activation.js.map +1 -1
  76. package/dist/composition/provider/model-selection.js +1 -1
  77. package/dist/composition/provider/model-selection.js.map +1 -1
  78. package/dist/composition/provider/preflight.js +1 -1
  79. package/dist/composition/provider/preflight.js.map +1 -1
  80. package/dist/composition/runtime/owner.js +1 -1
  81. package/dist/composition/runtime/owner.js.map +1 -1
  82. package/dist/composition/runtime/public.js +1 -1
  83. package/dist/composition/runtime/public.js.map +1 -1
  84. package/dist/composition/runtime/types.d.ts +25 -2
  85. package/dist/composition/runtime/types.d.ts.map +1 -1
  86. package/dist/composition/startup.js +1 -1
  87. package/dist/composition/startup.js.map +1 -1
  88. package/dist/composition/team/options.js +1 -1
  89. package/dist/composition/team/options.js.map +1 -1
  90. package/dist/composition/team/runtime.js +1 -1
  91. package/dist/composition/team/runtime.js.map +1 -1
  92. package/dist/composition/team/types.d.ts +3 -0
  93. package/dist/composition/team/types.d.ts.map +1 -1
  94. package/dist/contract/generate-options.d.ts +2 -0
  95. package/dist/contract/generate-options.d.ts.map +1 -1
  96. package/dist/contract/model-info.d.ts +12 -2
  97. package/dist/contract/model-info.d.ts.map +1 -1
  98. package/dist/embedding/adapter.d.ts +104 -0
  99. package/dist/embedding/adapter.d.ts.map +1 -0
  100. package/dist/embedding/adapter.js +2 -0
  101. package/dist/embedding/adapter.js.map +1 -0
  102. package/dist/embedding/catalog.d.ts +82 -0
  103. package/dist/embedding/catalog.d.ts.map +1 -0
  104. package/dist/embedding/catalog.js +2 -0
  105. package/dist/embedding/catalog.js.map +1 -0
  106. package/dist/embedding/errors.d.ts +98 -0
  107. package/dist/embedding/errors.d.ts.map +1 -0
  108. package/dist/embedding/errors.js +2 -0
  109. package/dist/embedding/errors.js.map +1 -0
  110. package/dist/embedding/handle.d.ts +76 -0
  111. package/dist/embedding/handle.d.ts.map +1 -0
  112. package/dist/embedding/limits.d.ts +47 -0
  113. package/dist/embedding/limits.d.ts.map +1 -0
  114. package/dist/embedding/limits.js +2 -0
  115. package/dist/embedding/limits.js.map +1 -0
  116. package/dist/embedding/profile.d.ts +89 -0
  117. package/dist/embedding/profile.d.ts.map +1 -0
  118. package/dist/embedding/profile.js +2 -0
  119. package/dist/embedding/profile.js.map +1 -0
  120. package/dist/embedding/purpose.d.ts +37 -0
  121. package/dist/embedding/purpose.d.ts.map +1 -0
  122. package/dist/embedding/request.d.ts +54 -0
  123. package/dist/embedding/request.d.ts.map +1 -0
  124. package/dist/embedding/request.js +2 -0
  125. package/dist/embedding/request.js.map +1 -0
  126. package/dist/embedding/result.d.ts +50 -0
  127. package/dist/embedding/result.d.ts.map +1 -0
  128. package/dist/embedding/usage.d.ts +64 -0
  129. package/dist/embedding/usage.d.ts.map +1 -0
  130. package/dist/embedding/usage.js +2 -0
  131. package/dist/embedding/usage.js.map +1 -0
  132. package/dist/embedding/validation.d.ts +68 -0
  133. package/dist/embedding/validation.d.ts.map +1 -0
  134. package/dist/embedding/validation.js +2 -0
  135. package/dist/embedding/validation.js.map +1 -0
  136. package/dist/embedding.d.ts +12 -0
  137. package/dist/embedding.js +1 -0
  138. package/dist/index.d.ts +6 -3
  139. package/dist/index.js +1 -1
  140. package/dist/message/content.d.ts +71 -1
  141. package/dist/message/content.d.ts.map +1 -1
  142. package/dist/message/projection.d.ts +28 -2
  143. package/dist/message/projection.d.ts.map +1 -1
  144. package/dist/message/projection.js +1 -1
  145. package/dist/message/projection.js.map +1 -1
  146. package/dist/observability/bus.js +1 -1
  147. package/dist/observation/event.d.ts +1 -1
  148. package/dist/observation/event.d.ts.map +1 -1
  149. package/dist/observation/event.js.map +1 -1
  150. package/dist/observation/port.d.ts +1 -1
  151. package/dist/observation/port.d.ts.map +1 -1
  152. package/dist/observation/port.js.map +1 -1
  153. package/dist/observation/privacy.js +1 -1
  154. package/dist/observation/privacy.js.map +1 -1
  155. package/dist/observation/report.d.ts +2 -0
  156. package/dist/observation/report.d.ts.map +1 -1
  157. package/dist/observation/report.js.map +1 -1
  158. package/dist/primitives/version.d.ts +1 -1
  159. package/dist/primitives/version.js +1 -1
  160. package/dist/primitives/version.js.map +1 -1
  161. package/dist/provider.d.ts +3 -1
  162. package/dist/provider.js +1 -1
  163. package/dist/runtime/model-call-handle.js +1 -1
  164. package/dist/runtime/model-call-handle.js.map +1 -1
  165. package/dist/runtime/model-metadata.js +1 -1
  166. package/dist/runtime/model-metadata.js.map +1 -1
  167. package/dist/runtime/model-stream.js +1 -1
  168. package/dist/runtime/model-stream.js.map +1 -1
  169. package/dist/runtime/registry.js +1 -1
  170. package/dist/runtime/with-retry.d.ts.map +1 -1
  171. package/dist/runtime/with-retry.js +1 -1
  172. package/dist/runtime/with-retry.js.map +1 -1
  173. package/dist/stream/assembler.d.ts.map +1 -1
  174. package/dist/stream/assembler.js +1 -1
  175. package/dist/stream/assembler.js.map +1 -1
  176. package/dist/stream/chunk.d.ts +6 -0
  177. package/dist/stream/chunk.d.ts.map +1 -1
  178. package/package.json +6 -1
@@ -1,2 +1,2 @@
1
- function e(e,t){return t===void 0?{provider:e.provider,model:e.model,...e.effort===void 0?{}:{reasoningEffort:e.effort},...e.maxTokens===void 0?{}:{maxTokens:e.maxTokens}}:{provider:t.provider,model:t.model,...t.reasoningEffort===void 0?{}:{reasoningEffort:t.reasoningEffort},...t.maxTokens===void 0?{}:{maxTokens:t.maxTokens}}}export{e as sessionCallConfig};
1
+ function e(e,t,n){let r=t===void 0?{provider:e.provider,model:e.model,...e.effort===void 0?{}:{reasoningEffort:e.effort},...e.maxTokens===void 0?{}:{maxTokens:e.maxTokens}}:{provider:t.provider,model:t.model,...t.reasoningEffort===void 0?{}:{reasoningEffort:t.reasoningEffort},...t.maxTokens===void 0?{}:{maxTokens:t.maxTokens}},i=n?.model;if(i===void 0&&n?.reasoningEffort===void 0&&n?.maxTokens===void 0)return r;let a=i!==void 0&&(i.provider!==r.provider||i.model!==r.model),o=n?.reasoningEffort??(a?void 0:r.reasoningEffort),s=n?.maxTokens??(a?void 0:r.maxTokens);return{provider:i?.provider??r.provider,model:i?.model??r.model,...o===void 0?{}:{reasoningEffort:o},...s===void 0?{}:{maxTokens:s}}}export{e as sessionCallConfig};
2
2
  //# sourceMappingURL=model-config.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"model-config.js","names":[],"sources":["../../../../src/agent/define/session/model-config.ts"],"sourcesContent":["import type { AgentDefinition } from '../definition.ts'\nimport type { CallConfig } from '../../../contract/index.ts'\nimport type { RuntimeSessionConfiguration } from './runtime-binding.ts'\n\nexport function sessionCallConfig(\n definition: AgentDefinition,\n runtime: RuntimeSessionConfiguration | undefined,\n): Pick<CallConfig, 'provider' | 'model' | 'reasoningEffort' | 'maxTokens'> {\n if (runtime !== undefined) return {\n provider: runtime.provider,\n model: runtime.model,\n ...(runtime.reasoningEffort === undefined ? {} : { reasoningEffort: runtime.reasoningEffort }),\n ...(runtime.maxTokens === undefined ? {} : { maxTokens: runtime.maxTokens }),\n }\n return {\n provider: definition.provider,\n model: definition.model,\n // Omitted when the author expressed no preference: a value the SDK invented\n // is rejected outright by a model that declares no ladder.\n ...(definition.effort === undefined ? {} : { reasoningEffort: definition.effort }),\n ...(definition.maxTokens === undefined ? {} : { maxTokens: definition.maxTokens }),\n }\n}\n"],"mappings":"AAIA,SAAgB,EACd,EACA,EAC0E,CAO1E,OANI,IAAY,IAAA,GAMT,CACL,SAAU,EAAW,SACrB,MAAO,EAAW,MAGlB,GAAI,EAAW,SAAW,IAAA,GAAY,CAAC,EAAI,CAAE,gBAAiB,EAAW,MAAO,EAChF,GAAI,EAAW,YAAc,IAAA,GAAY,CAAC,EAAI,CAAE,UAAW,EAAW,SAAU,CAClF,EAbkC,CAChC,SAAU,EAAQ,SAClB,MAAO,EAAQ,MACf,GAAI,EAAQ,kBAAoB,IAAA,GAAY,CAAC,EAAI,CAAE,gBAAiB,EAAQ,eAAgB,EAC5F,GAAI,EAAQ,YAAc,IAAA,GAAY,CAAC,EAAI,CAAE,UAAW,EAAQ,SAAU,CAC5E,CASF"}
1
+ {"version":3,"file":"model-config.js","names":[],"sources":["../../../../src/agent/define/session/model-config.ts"],"sourcesContent":["import type { AgentDefinition } from '../definition.ts'\nimport type { CallConfig } from '../../../contract/index.ts'\nimport type { RuntimeSessionConfiguration } from './runtime-binding.ts'\nimport type { AgentInvocationOptions } from './types.ts'\n\nexport type SessionCallConfig = Pick<CallConfig, 'provider' | 'model' | 'reasoningEffort' | 'maxTokens'>\n\n/**\n * The model binding for ONE run: the session's binding, then the invocation's\n * overlay on top of it.\n *\n * Switching model and inheriting the previous model's controls is not a\n * conservative default, it is a broken one: an effort or an output ceiling is a\n * property of the model that offers it, and carrying either onto a different\n * model produces `UNSUPPORTED_REASONING_EFFORT` or\n * `OUTPUT_TOKEN_LIMIT_EXCEEDED` at dispatch. So a model override drops the\n * inherited effort and maxTokens unless the same invocation restates them, and\n * omission means the adapter's own default — the same rule the session binding\n * already follows. An effort-only override keeps the session's model, which is\n * the point of asking for a different effort.\n */\nexport function sessionCallConfig(\n definition: AgentDefinition,\n runtime: RuntimeSessionConfiguration | undefined,\n invocation?: Pick<AgentInvocationOptions, 'model' | 'reasoningEffort' | 'maxTokens'>,\n): SessionCallConfig {\n const base: SessionCallConfig = runtime !== undefined\n ? {\n provider: runtime.provider,\n model: runtime.model,\n ...(runtime.reasoningEffort === undefined ? {} : { reasoningEffort: runtime.reasoningEffort }),\n ...(runtime.maxTokens === undefined ? {} : { maxTokens: runtime.maxTokens }),\n }\n : {\n provider: definition.provider,\n model: definition.model,\n // Omitted when the author expressed no preference: a value the SDK invented\n // is rejected outright by a model that declares no ladder.\n ...(definition.effort === undefined ? {} : { reasoningEffort: definition.effort }),\n ...(definition.maxTokens === undefined ? {} : { maxTokens: definition.maxTokens }),\n }\n const target = invocation?.model\n if (target === undefined && invocation?.reasoningEffort === undefined && invocation?.maxTokens === undefined) {\n return base\n }\n const switched = target !== undefined\n && (target.provider !== base.provider || target.model !== base.model)\n const reasoningEffort = invocation?.reasoningEffort ?? (switched ? undefined : base.reasoningEffort)\n const maxTokens = invocation?.maxTokens ?? (switched ? undefined : base.maxTokens)\n return {\n provider: target?.provider ?? base.provider,\n model: target?.model ?? base.model,\n ...(reasoningEffort === undefined ? {} : { reasoningEffort }),\n ...(maxTokens === undefined ? {} : { maxTokens }),\n }\n}\n"],"mappings":"AAqBA,SAAgB,EACd,EACA,EACA,EACmB,CACnB,IAAM,EAA0B,IAAY,IAAA,GAOxC,CACE,SAAU,EAAW,SACrB,MAAO,EAAW,MAGlB,GAAI,EAAW,SAAW,IAAA,GAAY,CAAC,EAAI,CAAE,gBAAiB,EAAW,MAAO,EAChF,GAAI,EAAW,YAAc,IAAA,GAAY,CAAC,EAAI,CAAE,UAAW,EAAW,SAAU,CAClF,EAbA,CACE,SAAU,EAAQ,SAClB,MAAO,EAAQ,MACf,GAAI,EAAQ,kBAAoB,IAAA,GAAY,CAAC,EAAI,CAAE,gBAAiB,EAAQ,eAAgB,EAC5F,GAAI,EAAQ,YAAc,IAAA,GAAY,CAAC,EAAI,CAAE,UAAW,EAAQ,SAAU,CAC5E,EASE,EAAS,GAAY,MAC3B,GAAI,IAAW,IAAA,IAAa,GAAY,kBAAoB,IAAA,IAAa,GAAY,YAAc,IAAA,GACjG,OAAO,EAET,IAAM,EAAW,IAAW,IAAA,KACtB,EAAO,WAAa,EAAK,UAAY,EAAO,QAAU,EAAK,OAC3D,EAAkB,GAAY,kBAAoB,EAAW,IAAA,GAAY,EAAK,iBAC9E,EAAY,GAAY,YAAc,EAAW,IAAA,GAAY,EAAK,WACxE,MAAO,CACL,SAAU,GAAQ,UAAY,EAAK,SACnC,MAAO,GAAQ,OAAS,EAAK,MAC7B,GAAI,IAAoB,IAAA,GAAY,CAAC,EAAI,CAAE,iBAAgB,EAC3D,GAAI,IAAc,IAAA,GAAY,CAAC,EAAI,CAAE,WAAU,CACjD,CACF"}
@@ -1,3 +1,4 @@
1
+ import { ReasoningEffortId } from "../../../primitives/brand.js";
1
2
  import { JsonValue } from "../../../primitives/json.js";
2
3
  import { SpanId, TraceId } from "../../../observation/context.js";
3
4
  import { ObservationResource } from "../../../observation/event.js";
@@ -192,10 +193,30 @@ interface AgentResumeSessionOptions extends Omit<AgentSessionOptions, 'conversat
192
193
  readonly snapshot: AgentSessionSnapshot;
193
194
  }
194
195
  interface AgentInvocationOptions {
196
+ /**
197
+ * Model for THIS run only; the session binding is untouched and the next run
198
+ * without an override returns to it.
199
+ *
200
+ * Resolved and validated before the run acquires anything, and frozen for the
201
+ * duration of that run: every step of one turn reaches the same model, so a
202
+ * mid-turn tool result is never answered by a model that did not see the
203
+ * request that produced it. Switching model drops an inherited effort and
204
+ * output ceiling — see `sessionCallConfig`.
205
+ */
206
+ readonly model?: {
207
+ readonly provider: string;
208
+ readonly model: string;
209
+ };
210
+ /** Reasoning effort for this run only. Alone, it keeps the session's model. */
211
+ readonly reasoningEffort?: ReasoningEffortId;
212
+ /** Output ceiling for this run only. */
213
+ readonly maxTokens?: number;
195
214
  readonly outputFormat?: ModelOutputFormat;
196
215
  readonly validateOutput?: (value: unknown) => void;
197
216
  /** strict rejects known text-only models when request history contains images; project permits lossy conversion. */
198
217
  readonly imagePolicy?: 'strict' | 'project';
218
+ /** strict rejects models that decline document input when history contains documents; project permits lossy conversion. */
219
+ readonly documentPolicy?: 'strict' | 'project';
199
220
  readonly signal?: AbortSignal;
200
221
  /** Observe events when using run()/runPending(); stream() already exposes them directly. */
201
222
  readonly onEvent?: (event: AgentRunEvent) => void | Promise<void>;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","names":[],"sources":["../../../../src/agent/define/session/types.ts"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;KAsBY,sBAAsB;;UAGjB;WACN;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;;;;;WAKA;;;;;;;;WAQA,qBAAqB;;;;;;;;;;;WAWrB;;;;;WAKA;;WAEA;WACA;WACA;;WAEA;;WAEA;;UAGM;WACN;WACA;;UAGM;WACN,UAAU;;WAEV;;WAEA,UAAU;;WAEV,gBAAgB;;WAEhB,gBAAgB;;WAEhB,QAAQ,uBAAuB;;WAE/B,kBAAkB;;WAElB;WACA,YAAY;WACZ,YAAY;;;;;;;;WAQZ,aAAa;WACb,wBAAwB;;;;;;;;WAQxB,2BAA2B;WAC3B,QAAQ;;WAER,cAAc;;WAEd,sBAAsB;;WAEtB,cAAc;;WAEd,eAAe;;WAEf,oBAAoB;;WAEpB,SAAS,cAAc;;WAEvB,aAAa;WACb;aACE,UAAU;aACV,eAAe;;;WAGjB,OAAO;;UAGD;EACf,OAAO,SAAS,cAAc,UAAU;EACxC,SAAS,gBAAgB,yCAAyC;EAClE,gBAAgB;;UAGD;WACN;WACA;WACA;WACA;;;;;;;;;;WAUA;;;UAIM,+BAA+B;WACrC,MAAM;;;UAIA;WACN;WACA;WACA;WACA,SAAS;WACT,QAAQ;;WAER;;aAEE,oBAAoB;;;UAIhB;WACN;WACA;WACA;WACA;WACA,UAAU;;WAEV,eAAe;;;UAIT,kCACP,KAAK;WACJ,UAAU;;UAGJ;WACN,eADM;WAEN,kBAAkB;;WAElB;WACA,SAAS;;WAET,WAAW,OAAO,yBAAyB;;UAGrC;WACN;WACA,SAAS;WACT,QAAQ;WACR,UAAU;;;UAIJ,uBAAuB,cAAc;WAC3C;WACA,QAAQ,QAAQ;WAChB,QAAQ,QAAQ"}
1
+ {"version":3,"file":"types.d.ts","names":[],"sources":["../../../../src/agent/define/session/types.ts"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;KAsBY,sBAAsB;;UAGjB;WACN;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;;;;;WAKA;;;;;;;;WAQA,qBAAqB;;;;;;;;;;;WAWrB;;;;;WAKA;;WAEA;WACA;WACA;;WAEA;;WAEA;;UAGM;WACN;WACA;;UAGM;WACN,UAAU;;WAEV;;WAEA,UAAU;;WAEV,gBAAgB;;WAEhB,gBAAgB;;WAEhB,QAAQ,uBAAuB;;WAE/B,kBAAkB;;WAElB;WACA,YAAY;WACZ,YAAY;;;;;;;;WAQZ,aAAa;WACb,wBAAwB;;;;;;;;WAQxB,2BAA2B;WAC3B,QAAQ;;WAER,cAAc;;WAEd,sBAAsB;;WAEtB,cAAc;;WAEd,eAAe;;WAEf,oBAAoB;;WAEpB,SAAS,cAAc;;WAEvB,aAAa;WACb;aACE,UAAU;aACV,eAAe;;;WAGjB,OAAO;;UAGD;EACf,OAAO,SAAS,cAAc,UAAU;EACxC,SAAS,gBAAgB,yCAAyC;EAClE,gBAAgB;;UAGD;WACN;WACA;WACA;WACA;;;;;;;;;;WAUA;;;UAIM,+BAA+B;WACrC,MAAM;;;UAIA;WACN;WACA;WACA;WACA,SAAS;WACT,QAAQ;;WAER;;aAEE,oBAAoB;;;UAIhB;WACN;WACA;WACA;WACA;WACA,UAAU;;WAEV,eAAe;;;UAIT,kCACP,KAAK;WACJ,UAAU;;UAGJ;;;;;;;;;;;WAWN;aAAmB;aAA2B;;;WAE9C,kBAbM;;WAeN;WACA,eAHyD;WAIzD,kBAAkB;;WAElB;;WAEA;WACA,SAAS;;WAET,WAAW,OAAO,yBAAyB;;UAGrC;WACN;WACA,SAAS;WACT,QAAQ;WACR,UAAU;;;UAIJ,uBAAuB,cAAc;WAC3C;WACA,QAAQ,QAAQ;WAChB,QAAQ,QAAQ"}
@@ -21,6 +21,8 @@ declare class AgentSession {
21
21
  private pendingSkillActivations;
22
22
  private active;
23
23
  private activeAdditionalInstructions;
24
+ /** The overlay of the run that owns the session, so maintenance follows the same model. */
25
+ private activeInvocation;
24
26
  private readonly idleWaiters;
25
27
  constructor(definition: AgentDefinition, options: AgentSessionOptions);
26
28
  /** Restore a JSON-round-tripped session snapshot with fresh runtime dependencies. */
@@ -1 +1 @@
1
- {"version":3,"file":"session.d.ts","names":[],"sources":["../../../src/agent/define/session.ts"],"mappings":";;;;;;;cAkDa;WACF,YAAY;mBACJ;mBACA;UACT;mBACS;mBACA;;mBAEA;UACT;UACA;UACA;UACA;UACA;UACA;UACA;mBACS;EAEjB,YAAY,YAAY,iBAAiB,SAAS;;SA0F3C,aACL,YAAY,iBACZ,SAAS,4BACR;;MAcC;;MAGA,WAAW;;MAGX,UAAU;;MAGV,UAAU;;MAGV;;EAGJ,YAAY;;EAkBZ;;EAWM,QAAQ,aAAY,yBAA8B,QAAQ;UAWlD;;;;;;;EAwBd,OAAO,OAAO;;EAOd,SAAS,SAAS,cAAc;;EAyBhC,OAAO,OAAO,YAAY,aAAY,yBAA8B;;EAKpE,cAAc,aAAY,yBAA8B;;EAKlD,IAAI,OAAO,YAAY,aAAY,yBAA8B,QAAQ;;EAOzE,WAAW,aAAY,yBAA8B,QAAQ;UAM3D;UAqMA;UAWA;UAWA;UAyGA;UAuBA;UAIA;UAwCA;UAEA;UAeA;UAOA;UAkBM"}
1
+ {"version":3,"file":"session.d.ts","names":[],"sources":["../../../src/agent/define/session.ts"],"mappings":";;;;;;;cAkDa;WACF,YAAY;mBACJ;mBACA;UACT;mBACS;mBACA;;mBAEA;UACT;UACA;UACA;UACA;UACA;UACA;UACA;;UAEA;mBACS;EAEjB,YAAY,YAAY,iBAAiB,SAAS;;SA0F3C,aACL,YAAY,iBACZ,SAAS,4BACR;;MAcC;;MAGA,WAAW;;MAGX,UAAU;;MAGV,UAAU;;MAGV;;EAGJ,YAAY;;EAkBZ;;EAWM,QAAQ,aAAY,yBAA8B,QAAQ;UAYlD;;;;;;;EAyBd,OAAO,OAAO;;EAOd,SAAS,SAAS,cAAc;;EAyBhC,OAAO,OAAO,YAAY,aAAY,yBAA8B;;EAKpE,cAAc,aAAY,yBAA8B;;EAKlD,IAAI,OAAO,YAAY,aAAY,yBAA8B,QAAQ;;EAOzE,WAAW,aAAY,yBAA8B,QAAQ;UAM3D;UA8MA;UAYA;UAWA;UA0GA;UAuBA;UAIA;UAwCA;UAIA;UAeA;UAOA;UAkBM"}
@@ -1,2 +1,2 @@
1
- import{waitForSettlement as e}from"../../async/settlement.js";import{ModelError as t}from"../../errors/model-error.js";import{contentHasImage as n}from"../../message/projection.js";import{AgentMemory as r}from"../memory/memory.js";import{normalizeToolPairing as i}from"../history/normalize.js";import{bindCompactionAccounting as a}from"../memory/accounting-binding.js";import{ContextCompactor as o}from"../memory/compaction.js";import{resolveCompactionConfig as s}from"../memory/compaction-config.js";import{bindSkillProviderLogger as c}from"../skill/provider/context.js";import{SkillCatalog as l}from"../skill/catalog.js";import{createSkillTools as u,renderSkillCatalog as d}from"../skill/tools.js";import{createRunTerminalRecord as f,withTerminalDelivery as p}from"../accounting/delivery/terminal.js";import{captureContextSections as m}from"../context/section.js";import{History as h}from"../history/history.js";import{AGENT_ACCOUNTING_ERROR_CODES as g,AgentRunError as _}from"../accounting/error.js";import{runAgent as v}from"../mode/run-agent.js";import{RunEventBuffer as y}from"../accounting/event-buffer.js";import{validateSessionSnapshot as b}from"./session/validation.js";import{resolveRuntimeLimits as x}from"./session/config.js";import{conversationId as S,deferred as C,errorCodeOf as w,messageOf as T,newConversationId as E,toolCatalog as D,userMessage as O}from"./session/common.js";import{captureResumedSkillActivations as k,prepareSkills as A}from"./session/skills.js";import{appendRunInstructions as j}from"./instructions.js";import{accountTraceEvent as M}from"./session/trace-accounting.js";import{captureResumedObjective as N,commitRuntimeMemory as P,loadRuntimeMemory as F,renderRuntimeMemory as I}from"./session/runtime-memory.js";import{attachRuntimeSession as L,configureRuntimeSessionModel as R,runtimeSessionConfiguration as z,streamRuntimeSession as B}from"./session/runtime-binding.js";import{createSessionLedger as V}from"./session/accounting.js";import{runRuntimeCompaction as H}from"./session/runtime-compaction.js";import{sessionCallConfig as U}from"./session/model-config.js";import{consumeSessionEvents as W}from"./session/observer.js";import{sealRuntimeRun as G}from"./session/run-seal.js";var K=class R{definition;options;catalog;activeRuntimeCatalog;skillCatalog;runtimeLimits;contextSections;currentHistory;currentMemory;currentConversationId;compactor;pendingSkillActivations=Object.freeze([]);active=!1;activeAdditionalInstructions;idleWaiters=new Set;constructor(e,t){if(e.mode===`deep-human-in-loop`&&t.userInput===void 0)throw TypeError(`agent '${e.id}' requires a userInput broker in deep-human-in-loop mode`);this.definition=e;let n=t.historyLimits===void 0?void 0:Object.freeze({...t.historyLimits});t.history!==void 0&&n!==void 0&&new h(n);let i=t.compaction===void 0||t.compaction===!1?t.compaction:Object.freeze({...t.compaction}),a=t.trace===void 0?void 0:Object.freeze({...t.trace}),o=t.team===void 0?void 0:Object.freeze({...t.team}),s=t.ledgerLimits===void 0?void 0:Object.freeze({...t.ledgerLimits}),c=t.eventBufferLimits===void 0?void 0:Object.freeze({...t.eventBufferLimits});this.options=Object.freeze({...t,...n===void 0?{}:{historyLimits:n},...i===void 0?{}:{compaction:i},...a===void 0?{}:{trace:a},...o===void 0?{}:{team:o},...s===void 0?{}:{ledgerLimits:s},...c===void 0?{}:{eventBufferLimits:c},...t.skills===void 0?{}:{skills:Object.freeze([...t.skills])},...Array.isArray(t.tools)?{tools:Object.freeze([...t.tools])}:{},...t.interceptors===void 0?{}:{interceptors:Object.freeze([...t.interceptors])}}),this.runtimeLimits=x(t.runtimeLimits);let d=m(t.contextSections)??[],f=m(e.contextSections)??[],p=[...f.map(e=>d.find(t=>t.id===e.id)??e),...d.filter(e=>!f.some(t=>t.id===e.id))];this.contextSections=p.length===0?void 0:Object.freeze(p),this.currentConversationId=S(t.conversationId),this.currentHistory=t.history??new h(n);let g=[...e.skills,...t.skills??[]],_=e.skillIds?.length===0,v=g.length>0||(e.skillIds?.length??0)>0;this.skillCatalog=_||!v?void 0:new l(g,{...e.skillIds===void 0?{}:{allowedSkillIds:e.skillIds},maxSkills:e.skillOptions.maxSkills,maxCatalogBytes:e.skillOptions.maxDiscoveryBytes});let y=this.skillCatalog===void 0?[]:u(this.skillCatalog,e.skillOptions,()=>this.skillLookup()),b=t.team?.tools===`reporting`?`reporting`:`full`,C=t.team?.tools===!1?[]:t.team?.team.toolsFor(t.team.name??e.id,b)??[];this.catalog=D(e.tools,t.tools,[...y,...C]),this.currentMemory=t.memory instanceof r?t.memory:t.memory===void 0?new r(e.memory.seed,e.memory):r.fromSnapshot(t.memory,e.memory),N(this.currentMemory,this.currentHistory,this.definition.memory.autoCaptureObjective),this.compactor=this.createCompactor(),L(this,(e,t,n)=>this.createRunHandle(e,t,n),e=>this.createRunHandle(void 0,e),e=>this.compactForRuntime(e),()=>{this.compactor=this.createCompactor()}),t.team?.team.attach(this,{...t.team.name===void 0?{}:{name:t.team.name},...t.team.description===void 0?{}:{description:t.team.description},...t.team.instructions===void 0?{}:{instructions:t.team.instructions},...t.team.role===void 0?{}:{role:t.team.role},...t.team.tools===void 0?{}:{tools:t.team.tools}})}static fromSnapshot(e,t){let{snapshot:n,...i}=t;b(n,e.id,e.skillOptions.maxSkills);let a=new R(e,{...i,conversationId:n.conversationId,history:h.fromSnapshot(n.history,i.historyLimits),memory:r.fromSnapshot(n.memory,e.memory)});return a.pendingSkillActivations=k(n.skills,a.skillCatalog),a}get conversationId(){return this.currentConversationId}get history(){return this.currentHistory}get memory(){return this.currentMemory}get skills(){return this.skillCatalog}get isRunning(){return this.active}snapshot(){let e=this.activationSnapshot();return Object.freeze({version:1,conversationId:this.currentConversationId,agentId:this.definition.id,history:this.currentHistory.snapshot(),memory:this.currentMemory.snapshot(),...z(this)?.memory===void 0?{}:{memoryBindingId:z(this).memory.bindingId},...e.length===0?{}:{skills:Object.freeze({activated:e})}})}reset(){if(this.active)throw Error(`cannot reset an agent session while a run is active`);this.currentConversationId=E(),this.currentHistory=new h(this.options.historyLimits),this.currentMemory=new r(this.definition.memory.seed,this.definition.memory),this.pendingSkillActivations=Object.freeze([]),this.skillCatalog?.clearActivations(),this.compactor=this.createCompactor()}async compact(e={}){if(this.active)throw Error(`cannot compact an agent session while a run is active`);this.active=!0;try{return await this.prepareSkills(e.signal),await this.compactor?.compactNow(e.signal)??null}finally{this.releaseRun()}}async compactForRuntime(e){if(this.active)throw Error(`cannot compact an agent session while a run is active`);let t=this.createLedger();this.active=!0,this.compactor!==void 0&&a(this.compactor,t),this.skillCatalog!==void 0&&c(this.skillCatalog,t.modelInvocation.logger);try{return await H({...this.compactor===void 0?{}:{compactor:this.compactor},invocation:e,accounting:t,prepare:()=>this.prepareSkills(e.signal,t)})}finally{this.releaseRun()}}inject(e){let t=O(e);return this.currentHistory.append({kind:`user`,message:t}),this.currentHistory.entries().length}whenIdle(e){return this.active?e?.aborted?Promise.reject(e.reason):new Promise((t,n)=>{let r=!1,i=()=>{r||(r=!0,this.idleWaiters.delete(i),e?.removeEventListener(`abort`,a),t())},a=()=>{r||(r=!0,this.idleWaiters.delete(i),n(e?.reason))};this.idleWaiters.add(i),e?.addEventListener(`abort`,a,{once:!0}),this.active||i()}):Promise.resolve()}stream(e,t={}){return this.createRunHandle(e,t)}streamPending(e={}){return this.createRunHandle(void 0,e)}async run(e,t={}){let n=this.stream(e,t);return await W(n,t.onEvent,this.runtimeLimits.observerTimeoutMs??3e4),await n.result}async runPending(e={}){let t=this.streamPending(e);return await W(t,e.onEvent,this.runtimeLimits.observerTimeoutMs??3e4),await t.result}createRunHandle(r,i,o){if(this.active)throw Error(`agent session '${this.definition.id}' is already running`);let s=this.currentHistory.entries().length+1,l=new AbortController,u=!1,d=i.signal===void 0?l.signal:AbortSignal.any([i.signal,l.signal]),m=new y(this.options.eventBufferLimits?.maxEvents,this.options.eventBufferLimits?.maxBytes),h=C(),v=C(),b=C(),x=this.createLedger(),S=Object.freeze([]);this.compactor!==void 0&&a(this.compactor,x),this.skillCatalog!==void 0&&c(this.skillCatalog,x.modelInvocation.logger),this.active=!0,this.activeAdditionalInstructions=o;let E=new Map,k=(async()=>{let e,a,o;try{let e=z(this);if(e?.memory!==void 0){let t=await F(e.memory,this.currentConversationId,this.definition.memory,d,x);o=t.state,t.memory!==void 0&&(this.currentMemory=t.memory)}if(e?.prepareTools!==void 0){let t=x.modelInvocation.logger;if(t===void 0)throw Error(`runtime tool source logger is unavailable`);let n=e.prepareTools(d,t,[...this.catalog?.names()??[],...this.definition.nativeTools.map(e=>e.name)]);this.activeRuntimeCatalog=D([],this.catalog,n.tools),S=n.references}if(b.resolve(S),await this.prepareSkills(d,x),r!==void 0){let e=O(r);if(this.definition.memory.autoCaptureObjective){let t=x.startOperation(`memory`,{data:{action:`capture-objective`}});try{this.currentMemory.captureOriginalObjective(e),x.endOperation(t,`success`)}catch(e){throw x.endOperation(t,`error`,{error:e}),e}}this.currentHistory.append({kind:`user`,message:e})}if(i.imagePolicy===`strict`&&this.history.messages().some(e=>n(e.content))){let e=this.callConfig(),n=await this.options.registry.resolveModelInfo(e.provider,e.model,d);if(n.inputModalities!==void 0&&!n.inputModalities.includes(`image`))throw new t(`model ${n.id} does not support required image input`,`UNSUPPORTED_IMAGE_INPUT`)}for await(let e of this.runDefinition({...i,signal:d},x))M(x,E,e),e.type===`agent-end`&&(a=e.outcome),m.push(e);if(a===void 0)throw Error(`agent session '${this.definition.id}' ended without agent-end`);if(d.aborted)throw d.reason??Error(`agent run was aborted`);if(a.reason.kind===`error`&&a.reason.failure.code===`USAGE_REQUIRED`){let e=Error(a.reason.failure.message);throw e.code=`USAGE_REQUIRED`,e}e?.memory!==void 0&&o!==void 0&&o.status!==`disabled`&&await P(e.memory,this.currentConversationId,this.currentMemory.snapshot(),o,d,x)}catch(t){e=t,b.resolve(S)}let c;try{let t=d.aborted||a?.reason.kind===`aborted`?`aborted`:e!==void 0||a?.reason.kind===`error`?`error`:`success`,n=await x.finalize(t,a?.completed??!1,e);c=p(f(n),n.delivery),h.resolve(c)}catch(e){h.reject(e),v.reject(e),m.fail(e),u=!0,this.releaseRun();return}if(!u){if(e===void 0&&x.terminalAuditFailure){let t=Error(`audit observation checkpoint failed after run finalization`);t.code=`OBSERVABILITY_AUDIT_UNAVAILABLE`,e=t}if(e!==void 0){let t=new _(T(e),w(e)??g.RUN_FAILED,c,{cause:e});v.reject(t),m.fail(t)}else{let e=a,t=[...this.currentHistory.entries()].reverse().find(e=>e.seq>=s&&e.event.kind===`assistant`)?.event,n=t?.kind===`assistant`?t.message:void 0,r=Object.freeze({text:e.text,outcome:e,report:c,...n===void 0?{}:{message:n}});v.resolve(r),m.close()}u=!0,this.releaseRun()}})();k.catch(e=>{u||(h.reject(e),v.reject(e),m.fail(e),u=!0,this.releaseRun())}),v.promise.catch(()=>void 0),h.promise.catch(()=>void 0);let A=!1;return Object.freeze({runId:x.runId,traceId:x.traceId,toolSourceSnapshots:b.promise,eventsSettled:k.then(()=>void 0,()=>void 0),result:v.promise,report:h.promise,seal:()=>G({ledger:x,buffer:m,report:h,result:v,toolSources:b,currentToolSources:()=>S,isTerminal:()=>u,markTerminal:()=>{u=!0},abort:()=>l.abort(Error(`Agent run was sealed`)),release:()=>this.releaseRun()}),abort(e){!u&&!l.signal.aborted&&l.abort(Error(`Agent run was aborted`))},[Symbol.asyncIterator](){return A?(async function*(){throw Error(`an agent run handle can only be iterated once`)})():(A=!0,(async function*(){let t=!1;try{for(;;){let e=await m.take();if(e.done){t=!0;break}yield e.value}}finally{t||(l.abort(Error(`agent event consumer stopped`)),m.stop(),await e(k,3e4))}})())}})}releaseRun(){this.active=!1,this.activeAdditionalInstructions=void 0,this.activeRuntimeCatalog=void 0,this.skillCatalog!==void 0&&c(this.skillCatalog,void 0),this.compactor!==void 0&&a(this.compactor,void 0);let e=[...this.idleWaiters];this.idleWaiters.clear();for(let t of e)t()}createLedger(){let e=z(this);return V({definition:this.definition,options:this.options,runtimeLimits:this.runtimeLimits,conversationId:this.currentConversationId,...e===void 0?{}:{runtime:e}})}runDefinition(e,t){let n=this.definition,r=this.combinedHooks(t),i=this.effectiveCatalog(),a=e.outputFormat??n.outputFormat,o={registry:this.options.registry,config:this.callConfig(),history:this.history,...i===void 0?{}:{tools:i},...n.nativeTools.length===0?{}:{nativeTools:n.nativeTools},...n.toolChoice===void 0?{}:{toolChoice:n.toolChoice},...e.imagePolicy===void 0?{}:{imagePolicy:e.imagePolicy},...a===void 0?{}:{outputFormat:a},...e.validateOutput===void 0?{}:{validateOutput:e.validateOutput},system:this.systemInstructions(this.activeAdditionalInstructions),maxTurns:n.maxTurns,bounds:{maxToolCalls:n.maxToolCalls,...this.runtimeLimits.maxParallelToolCalls===void 0?{}:{maxParallel:this.runtimeLimits.maxParallelToolCalls},...this.runtimeLimits.maxConsecutiveToolErrors===void 0?{}:{maxConsecutiveToolErrors:this.runtimeLimits.maxConsecutiveToolErrors},...this.runtimeLimits.repeatToolWarningAt===void 0?{}:{repeatToolWarningAt:this.runtimeLimits.repeatToolWarningAt},...this.runtimeLimits.repeatToolLimit===void 0?{}:{repeatToolLimit:this.runtimeLimits.repeatToolLimit},...this.runtimeLimits.toolCycleWarningAt===void 0?{}:{toolCycleWarningAt:this.runtimeLimits.toolCycleWarningAt},...this.runtimeLimits.toolCycleLimit===void 0?{}:{toolCycleLimit:this.runtimeLimits.toolCycleLimit},...this.runtimeLimits.onExhausted===void 0?{}:{onExhausted:this.runtimeLimits.onExhausted},...this.runtimeLimits.maxToolResultTokens===void 0?{}:{maxToolResultTokens:this.runtimeLimits.maxToolResultTokens},...this.runtimeLimits.toolResultOverflow===void 0?{}:{toolResultOverflow:this.runtimeLimits.toolResultOverflow},...this.runtimeLimits.maxToolCycleLength===void 0?{}:{maxToolCycleLength:this.runtimeLimits.maxToolCycleLength},...this.runtimeLimits.finalReportReserveTokens===void 0?{}:{finalReportReserveTokens:this.runtimeLimits.finalReportReserveTokens},...this.runtimeLimits.maxTotalTokens===void 0?{}:{maxTotalTokens:this.runtimeLimits.maxTotalTokens},...this.runtimeLimits.maxToolResultBytes===void 0?{}:{maxToolResultBytes:this.runtimeLimits.maxToolResultBytes},...this.runtimeLimits.maxToolDurationMs===void 0?{}:{maxToolDurationMs:this.runtimeLimits.maxToolDurationMs},...this.runtimeLimits.toolTeardownTimeoutMs===void 0?{}:{toolTeardownTimeoutMs:this.runtimeLimits.toolTeardownTimeoutMs}},commentary:n.commentary,...this.runtimeLimits.teardownTimeoutMs===void 0?{}:{teardownTimeoutMs:this.runtimeLimits.teardownTimeoutMs},...this.runtimeLimits.modelTimeoutMs===void 0?{}:{modelTimeoutMs:this.runtimeLimits.modelTimeoutMs},...this.runtimeLimits.maxModelRequestBytes===void 0?{}:{maxModelRequestBytes:this.runtimeLimits.maxModelRequestBytes},...this.runtimeLimits.maxModelResponseBytes===void 0?{}:{maxModelResponseBytes:this.runtimeLimits.maxModelResponseBytes},...this.runtimeLimits.maxModelStreamEvents===void 0?{}:{maxModelStreamEvents:this.runtimeLimits.maxModelStreamEvents},...this.runtimeLimits.hookTimeoutMs===void 0?{}:{hookTimeoutMs:this.runtimeLimits.hookTimeoutMs},...this.runtimeLimits.hookTeardownTimeoutMs===void 0?{}:{hookTeardownTimeoutMs:this.runtimeLimits.hookTeardownTimeoutMs},...this.options.approvals===void 0?{}:{approvals:this.options.approvals},...this.options.spillStore===void 0?{}:{spillStore:this.options.spillStore},...this.options.interceptors===void 0?{}:{interceptors:this.options.interceptors},...this.contextSections===void 0?{}:{contextSections:this.contextSections},...r===void 0?{}:{hooks:r},...e.signal===void 0?{}:{signal:e.signal},...t===void 0?{}:{accounting:t},...t?.modelInvocation.logger===void 0?{}:{logger:t.modelInvocation.logger},trace:{...this.options.trace,conversationId:this.currentConversationId,agentId:n.id,agentName:n.name}};return n.mode===`deep-human-in-loop`?v({...o,mode:n.mode,userInput:this.options.userInput}):n.mode===`deep`?v({...o,mode:n.mode,...this.options.userInput===void 0?{}:{userInput:this.options.userInput}}):v({...o,mode:`basic`})}createCompactor(){let e=this.options.compaction===!1?!1:this.options.compaction===void 0?this.definition.compaction:s(this.options.compaction);if(e!==!1)return new o({registry:this.options.registry,config:this.callConfig(),history:()=>this.currentHistory,system:()=>this.systemInstructions(this.activeAdditionalInstructions),pinnedMessages:()=>I(this.currentMemory,this.definition.memory.maxInjectedChars),tools:()=>[...this.effectiveCatalog()?.schemas()??[],...this.definition.nativeTools],policy:e})}effectiveCatalog(){return this.activeRuntimeCatalog??this.catalog}combinedHooks(e){let t=this.options.hooks;if(this.compactor!==void 0||t!==void 0||this.currentMemory.items().length!==0)return{...t,beforeStep:async n=>{let r=this.currentHistory.generation();if(this.compactor!==void 0&&a(this.compactor,e),await this.compactor?.beforeStep(n),e?.usageStop!==void 0)return{kind:`proceed`};let o=this.currentHistory.generation()===r?n:{...n,messages:i(this.currentHistory.messages()),snapshot:this.currentHistory.snapshot()},s=I(this.currentMemory,this.definition.memory.maxInjectedChars,e),c=s.length===0?o:{...o,messages:Object.freeze([...s,...o.messages])},l=await t?.beforeStep?.(c)??{kind:`proceed`};if(l.kind===`reject`)return l;let u=[...s,...l.prepend??[]];return u.length===0?l:{kind:`proceed`,prepend:u}},onRequestError:async n=>{this.compactor!==void 0&&a(this.compactor,e);let r=await this.compactor?.onRequestError(n);return e?.usageStop===void 0?r===`retry`?`retry`:await t?.onRequestError?.(n)??`fail`:`fail`}}}callConfig(){return U(this.definition,z(this))}systemInstructions(e){let t=this.skillCatalog===void 0?this.definition.instructions:d(this.definition.instructions,this.skillCatalog.summaries(),this.definition.skillOptions),n=this.options.team,r=n===void 0?t:`${t}\n\n${n.team.instructionsFor(n.name??this.definition.id)}`;return j(r,e)}skillLookup(e){return{...this.options.skillCwd===void 0?{}:{cwd:this.options.skillCwd},...e===void 0?{}:{signal:e}}}activationSnapshot(){let e=new Map;for(let t of this.pendingSkillActivations)e.set(t.id,t);for(let t of this.skillCatalog?.activatedSkillReferences()??[])e.set(t.id,t);for(let t of this.skillCatalog?.activatedSummaries()??[])e.has(t.id)||e.set(t.id,Object.freeze({id:t.id,provider:t.provider,source:t.source,...t.resourceBase===void 0?{}:{resourceBase:Object.freeze({...t.resourceBase})}}));return Object.freeze([...e.values()].sort((e,t)=>e.id.localeCompare(t.id)))}async prepareSkills(e,t){await A(this.definition,this.skillCatalog,this.pendingSkillActivations,e=>this.skillLookup(e),()=>{this.pendingSkillActivations=Object.freeze([])},e,t)}};export{K as AgentSession,R as configureRuntimeSessionModel,B as streamRuntimeSession};
1
+ import{waitForSettlement as e}from"../../async/settlement.js";import{ModelError as t}from"../../errors/model-error.js";import{contentHasDocument as n,contentHasImage as r}from"../../message/projection.js";import{AgentMemory as i}from"../memory/memory.js";import{normalizeToolPairing as a}from"../history/normalize.js";import{bindCompactionAccounting as o}from"../memory/accounting-binding.js";import{ContextCompactor as s}from"../memory/compaction.js";import{resolveCompactionConfig as c}from"../memory/compaction-config.js";import{bindSkillProviderLogger as l}from"../skill/provider/context.js";import{SkillCatalog as u}from"../skill/catalog.js";import{createSkillTools as d,renderSkillCatalog as f}from"../skill/tools.js";import{createRunTerminalRecord as p,withTerminalDelivery as m}from"../accounting/delivery/terminal.js";import{captureContextSections as h}from"../context/section.js";import{History as g}from"../history/history.js";import{AGENT_ACCOUNTING_ERROR_CODES as _,AgentRunError as v}from"../accounting/error.js";import{runAgent as y}from"../mode/run-agent.js";import{RunEventBuffer as b}from"../accounting/event-buffer.js";import{validateSessionSnapshot as x}from"./session/validation.js";import{resolveRuntimeLimits as S}from"./session/config.js";import{conversationId as C,deferred as w,errorCodeOf as T,messageOf as E,newConversationId as D,toolCatalog as O,userMessage as k}from"./session/common.js";import{captureResumedSkillActivations as A,prepareSkills as j}from"./session/skills.js";import{appendRunInstructions as M}from"./instructions.js";import{accountTraceEvent as N}from"./session/trace-accounting.js";import{captureResumedObjective as P,commitRuntimeMemory as F,loadRuntimeMemory as I,renderRuntimeMemory as L}from"./session/runtime-memory.js";import{attachRuntimeSession as R,configureRuntimeSessionModel as z,runtimeSessionConfiguration as B,streamRuntimeSession as V}from"./session/runtime-binding.js";import{createSessionLedger as H}from"./session/accounting.js";import{runRuntimeCompaction as U}from"./session/runtime-compaction.js";import{sessionCallConfig as W}from"./session/model-config.js";import{consumeSessionEvents as G}from"./session/observer.js";import{sealRuntimeRun as K}from"./session/run-seal.js";var q=class z{definition;options;catalog;activeRuntimeCatalog;skillCatalog;runtimeLimits;contextSections;currentHistory;currentMemory;currentConversationId;compactor;pendingSkillActivations=Object.freeze([]);active=!1;activeAdditionalInstructions;activeInvocation;idleWaiters=new Set;constructor(e,t){if(e.mode===`deep-human-in-loop`&&t.userInput===void 0)throw TypeError(`agent '${e.id}' requires a userInput broker in deep-human-in-loop mode`);this.definition=e;let n=t.historyLimits===void 0?void 0:Object.freeze({...t.historyLimits});t.history!==void 0&&n!==void 0&&new g(n);let r=t.compaction===void 0||t.compaction===!1?t.compaction:Object.freeze({...t.compaction}),a=t.trace===void 0?void 0:Object.freeze({...t.trace}),o=t.team===void 0?void 0:Object.freeze({...t.team}),s=t.ledgerLimits===void 0?void 0:Object.freeze({...t.ledgerLimits}),c=t.eventBufferLimits===void 0?void 0:Object.freeze({...t.eventBufferLimits});this.options=Object.freeze({...t,...n===void 0?{}:{historyLimits:n},...r===void 0?{}:{compaction:r},...a===void 0?{}:{trace:a},...o===void 0?{}:{team:o},...s===void 0?{}:{ledgerLimits:s},...c===void 0?{}:{eventBufferLimits:c},...t.skills===void 0?{}:{skills:Object.freeze([...t.skills])},...Array.isArray(t.tools)?{tools:Object.freeze([...t.tools])}:{},...t.interceptors===void 0?{}:{interceptors:Object.freeze([...t.interceptors])}}),this.runtimeLimits=S(t.runtimeLimits);let l=h(t.contextSections)??[],f=h(e.contextSections)??[],p=[...f.map(e=>l.find(t=>t.id===e.id)??e),...l.filter(e=>!f.some(t=>t.id===e.id))];this.contextSections=p.length===0?void 0:Object.freeze(p),this.currentConversationId=C(t.conversationId),this.currentHistory=t.history??new g(n);let m=[...e.skills,...t.skills??[]],_=e.skillIds?.length===0,v=m.length>0||(e.skillIds?.length??0)>0;this.skillCatalog=_||!v?void 0:new u(m,{...e.skillIds===void 0?{}:{allowedSkillIds:e.skillIds},maxSkills:e.skillOptions.maxSkills,maxCatalogBytes:e.skillOptions.maxDiscoveryBytes});let y=this.skillCatalog===void 0?[]:d(this.skillCatalog,e.skillOptions,()=>this.skillLookup()),b=t.team?.tools===`reporting`?`reporting`:`full`,x=t.team?.tools===!1?[]:t.team?.team.toolsFor(t.team.name??e.id,b)??[];this.catalog=O(e.tools,t.tools,[...y,...x]),this.currentMemory=t.memory instanceof i?t.memory:t.memory===void 0?new i(e.memory.seed,e.memory):i.fromSnapshot(t.memory,e.memory),P(this.currentMemory,this.currentHistory,this.definition.memory.autoCaptureObjective),this.compactor=this.createCompactor(),R(this,(e,t,n)=>this.createRunHandle(e,t,n),e=>this.createRunHandle(void 0,e),e=>this.compactForRuntime(e),()=>{this.compactor=this.createCompactor()}),t.team?.team.attach(this,{...t.team.name===void 0?{}:{name:t.team.name},...t.team.description===void 0?{}:{description:t.team.description},...t.team.instructions===void 0?{}:{instructions:t.team.instructions},...t.team.role===void 0?{}:{role:t.team.role},...t.team.tools===void 0?{}:{tools:t.team.tools}})}static fromSnapshot(e,t){let{snapshot:n,...r}=t;x(n,e.id,e.skillOptions.maxSkills);let a=new z(e,{...r,conversationId:n.conversationId,history:g.fromSnapshot(n.history,r.historyLimits),memory:i.fromSnapshot(n.memory,e.memory)});return a.pendingSkillActivations=A(n.skills,a.skillCatalog),a}get conversationId(){return this.currentConversationId}get history(){return this.currentHistory}get memory(){return this.currentMemory}get skills(){return this.skillCatalog}get isRunning(){return this.active}snapshot(){let e=this.activationSnapshot();return Object.freeze({version:1,conversationId:this.currentConversationId,agentId:this.definition.id,history:this.currentHistory.snapshot(),memory:this.currentMemory.snapshot(),...B(this)?.memory===void 0?{}:{memoryBindingId:B(this).memory.bindingId},...e.length===0?{}:{skills:Object.freeze({activated:e})}})}reset(){if(this.active)throw Error(`cannot reset an agent session while a run is active`);this.currentConversationId=D(),this.currentHistory=new g(this.options.historyLimits),this.currentMemory=new i(this.definition.memory.seed,this.definition.memory),this.pendingSkillActivations=Object.freeze([]),this.skillCatalog?.clearActivations(),this.compactor=this.createCompactor()}async compact(e={}){if(this.active)throw Error(`cannot compact an agent session while a run is active`);this.active=!0,this.activeInvocation=e;try{return await this.prepareSkills(e.signal),await this.compactor?.compactNow(e.signal)??null}finally{this.releaseRun()}}async compactForRuntime(e){if(this.active)throw Error(`cannot compact an agent session while a run is active`);let t=this.createLedger();this.active=!0,this.activeInvocation=e,this.compactor!==void 0&&o(this.compactor,t),this.skillCatalog!==void 0&&l(this.skillCatalog,t.modelInvocation.logger);try{return await U({...this.compactor===void 0?{}:{compactor:this.compactor},invocation:e,accounting:t,prepare:()=>this.prepareSkills(e.signal,t)})}finally{this.releaseRun()}}inject(e){let t=k(e);return this.currentHistory.append({kind:`user`,message:t}),this.currentHistory.entries().length}whenIdle(e){return this.active?e?.aborted?Promise.reject(e.reason):new Promise((t,n)=>{let r=!1,i=()=>{r||(r=!0,this.idleWaiters.delete(i),e?.removeEventListener(`abort`,a),t())},a=()=>{r||(r=!0,this.idleWaiters.delete(i),n(e?.reason))};this.idleWaiters.add(i),e?.addEventListener(`abort`,a,{once:!0}),this.active||i()}):Promise.resolve()}stream(e,t={}){return this.createRunHandle(e,t)}streamPending(e={}){return this.createRunHandle(void 0,e)}async run(e,t={}){let n=this.stream(e,t);return await G(n,t.onEvent,this.runtimeLimits.observerTimeoutMs??3e4),await n.result}async runPending(e={}){let t=this.streamPending(e);return await G(t,e.onEvent,this.runtimeLimits.observerTimeoutMs??3e4),await t.result}createRunHandle(i,a,s){if(this.active)throw Error(`agent session '${this.definition.id}' is already running`);let c=this.currentHistory.entries().length+1,u=new AbortController,d=!1,f=a.signal===void 0?u.signal:AbortSignal.any([a.signal,u.signal]),h=new b(this.options.eventBufferLimits?.maxEvents,this.options.eventBufferLimits?.maxBytes),g=w(),y=w(),x=w(),S=this.createLedger(),C=Object.freeze([]);this.compactor!==void 0&&o(this.compactor,S),this.skillCatalog!==void 0&&l(this.skillCatalog,S.modelInvocation.logger),this.active=!0,this.activeAdditionalInstructions=s,this.activeInvocation=a;let D=new Map,A=(async()=>{let e,o,s;try{let e=B(this);if(e?.memory!==void 0){let t=await I(e.memory,this.currentConversationId,this.definition.memory,f,S);s=t.state,t.memory!==void 0&&(this.currentMemory=t.memory)}if(e?.prepareTools!==void 0){let t=S.modelInvocation.logger;if(t===void 0)throw Error(`runtime tool source logger is unavailable`);let n=e.prepareTools(f,t,[...this.catalog?.names()??[],...this.definition.nativeTools.map(e=>e.name)]);this.activeRuntimeCatalog=O([],this.catalog,n.tools),C=n.references}if(x.resolve(C),await this.prepareSkills(f,S),i!==void 0){let e=k(i);if(this.definition.memory.autoCaptureObjective){let t=S.startOperation(`memory`,{data:{action:`capture-objective`}});try{this.currentMemory.captureOriginalObjective(e),S.endOperation(t,`success`)}catch(e){throw S.endOperation(t,`error`,{error:e}),e}}this.currentHistory.append({kind:`user`,message:e})}if(a.imagePolicy===`strict`&&this.history.messages().some(e=>r(e.content))){let e=this.callConfig(a),n=await this.options.registry.resolveModelInfo(e.provider,e.model,f);if(n.inputModalities!==void 0&&!n.inputModalities.includes(`image`))throw new t(`model ${n.id} does not support required image input`,`UNSUPPORTED_IMAGE_INPUT`)}if(a.documentPolicy===`strict`&&this.history.messages().some(e=>n(e.content))){let e=this.callConfig(a),n=await this.options.registry.resolveModelInfo(e.provider,e.model,f);if(n.inputModalities!==void 0&&!n.inputModalities.includes(`document`))throw new t(`model ${n.id} does not support required document input`,`UNSUPPORTED_DOCUMENT_INPUT`)}for await(let e of this.runDefinition({...a,signal:f},S))N(S,D,e),e.type===`agent-end`&&(o=e.outcome),h.push(e);if(o===void 0)throw Error(`agent session '${this.definition.id}' ended without agent-end`);if(f.aborted)throw f.reason??Error(`agent run was aborted`);if(o.reason.kind===`error`&&o.reason.failure.code===`USAGE_REQUIRED`){let e=Error(o.reason.failure.message);throw e.code=`USAGE_REQUIRED`,e}e?.memory!==void 0&&s!==void 0&&s.status!==`disabled`&&await F(e.memory,this.currentConversationId,this.currentMemory.snapshot(),s,f,S)}catch(t){e=t,x.resolve(C)}let l;try{let t=f.aborted||o?.reason.kind===`aborted`?`aborted`:e!==void 0||o?.reason.kind===`error`?`error`:`success`,n=await S.finalize(t,o?.completed??!1,e);l=m(p(n),n.delivery),g.resolve(l)}catch(e){g.reject(e),y.reject(e),h.fail(e),d=!0,this.releaseRun();return}if(!d){if(e===void 0&&S.terminalAuditFailure){let t=Error(`audit observation checkpoint failed after run finalization`);t.code=`OBSERVABILITY_AUDIT_UNAVAILABLE`,e=t}if(e!==void 0){let t=new v(E(e),T(e)??_.RUN_FAILED,l,{cause:e});y.reject(t),h.fail(t)}else{let e=o,t=[...this.currentHistory.entries()].reverse().find(e=>e.seq>=c&&e.event.kind===`assistant`)?.event,n=t?.kind===`assistant`?t.message:void 0,r=Object.freeze({text:e.text,outcome:e,report:l,...n===void 0?{}:{message:n}});y.resolve(r),h.close()}d=!0,this.releaseRun()}})();A.catch(e=>{d||(g.reject(e),y.reject(e),h.fail(e),d=!0,this.releaseRun())}),y.promise.catch(()=>void 0),g.promise.catch(()=>void 0);let j=!1;return Object.freeze({runId:S.runId,traceId:S.traceId,toolSourceSnapshots:x.promise,eventsSettled:A.then(()=>void 0,()=>void 0),result:y.promise,report:g.promise,seal:()=>K({ledger:S,buffer:h,report:g,result:y,toolSources:x,currentToolSources:()=>C,isTerminal:()=>d,markTerminal:()=>{d=!0},abort:()=>u.abort(Error(`Agent run was sealed`)),release:()=>this.releaseRun()}),abort(e){!d&&!u.signal.aborted&&u.abort(Error(`Agent run was aborted`))},[Symbol.asyncIterator](){return j?(async function*(){throw Error(`an agent run handle can only be iterated once`)})():(j=!0,(async function*(){let t=!1;try{for(;;){let e=await h.take();if(e.done){t=!0;break}yield e.value}}finally{t||(u.abort(Error(`agent event consumer stopped`)),h.stop(),await e(A,3e4))}})())}})}releaseRun(){this.active=!1,this.activeAdditionalInstructions=void 0,this.activeInvocation=void 0,this.activeRuntimeCatalog=void 0,this.skillCatalog!==void 0&&l(this.skillCatalog,void 0),this.compactor!==void 0&&o(this.compactor,void 0);let e=[...this.idleWaiters];this.idleWaiters.clear();for(let t of e)t()}createLedger(){let e=B(this);return H({definition:this.definition,options:this.options,runtimeLimits:this.runtimeLimits,conversationId:this.currentConversationId,...e===void 0?{}:{runtime:e}})}runDefinition(e,t){let n=this.definition,r=this.combinedHooks(t),i=this.effectiveCatalog(),a=e.outputFormat??n.outputFormat,o={registry:this.options.registry,config:this.callConfig(e),history:this.history,...i===void 0?{}:{tools:i},...n.nativeTools.length===0?{}:{nativeTools:n.nativeTools},...n.toolChoice===void 0?{}:{toolChoice:n.toolChoice},...e.imagePolicy===void 0?{}:{imagePolicy:e.imagePolicy},...e.documentPolicy===void 0?{}:{documentPolicy:e.documentPolicy},...a===void 0?{}:{outputFormat:a},...e.validateOutput===void 0?{}:{validateOutput:e.validateOutput},system:this.systemInstructions(this.activeAdditionalInstructions),maxTurns:n.maxTurns,bounds:{maxToolCalls:n.maxToolCalls,...this.runtimeLimits.maxParallelToolCalls===void 0?{}:{maxParallel:this.runtimeLimits.maxParallelToolCalls},...this.runtimeLimits.maxConsecutiveToolErrors===void 0?{}:{maxConsecutiveToolErrors:this.runtimeLimits.maxConsecutiveToolErrors},...this.runtimeLimits.repeatToolWarningAt===void 0?{}:{repeatToolWarningAt:this.runtimeLimits.repeatToolWarningAt},...this.runtimeLimits.repeatToolLimit===void 0?{}:{repeatToolLimit:this.runtimeLimits.repeatToolLimit},...this.runtimeLimits.toolCycleWarningAt===void 0?{}:{toolCycleWarningAt:this.runtimeLimits.toolCycleWarningAt},...this.runtimeLimits.toolCycleLimit===void 0?{}:{toolCycleLimit:this.runtimeLimits.toolCycleLimit},...this.runtimeLimits.onExhausted===void 0?{}:{onExhausted:this.runtimeLimits.onExhausted},...this.runtimeLimits.maxToolResultTokens===void 0?{}:{maxToolResultTokens:this.runtimeLimits.maxToolResultTokens},...this.runtimeLimits.toolResultOverflow===void 0?{}:{toolResultOverflow:this.runtimeLimits.toolResultOverflow},...this.runtimeLimits.maxToolCycleLength===void 0?{}:{maxToolCycleLength:this.runtimeLimits.maxToolCycleLength},...this.runtimeLimits.finalReportReserveTokens===void 0?{}:{finalReportReserveTokens:this.runtimeLimits.finalReportReserveTokens},...this.runtimeLimits.maxTotalTokens===void 0?{}:{maxTotalTokens:this.runtimeLimits.maxTotalTokens},...this.runtimeLimits.maxToolResultBytes===void 0?{}:{maxToolResultBytes:this.runtimeLimits.maxToolResultBytes},...this.runtimeLimits.maxToolDurationMs===void 0?{}:{maxToolDurationMs:this.runtimeLimits.maxToolDurationMs},...this.runtimeLimits.toolTeardownTimeoutMs===void 0?{}:{toolTeardownTimeoutMs:this.runtimeLimits.toolTeardownTimeoutMs}},commentary:n.commentary,...this.runtimeLimits.teardownTimeoutMs===void 0?{}:{teardownTimeoutMs:this.runtimeLimits.teardownTimeoutMs},...this.runtimeLimits.modelTimeoutMs===void 0?{}:{modelTimeoutMs:this.runtimeLimits.modelTimeoutMs},...this.runtimeLimits.maxModelRequestBytes===void 0?{}:{maxModelRequestBytes:this.runtimeLimits.maxModelRequestBytes},...this.runtimeLimits.maxModelResponseBytes===void 0?{}:{maxModelResponseBytes:this.runtimeLimits.maxModelResponseBytes},...this.runtimeLimits.maxModelStreamEvents===void 0?{}:{maxModelStreamEvents:this.runtimeLimits.maxModelStreamEvents},...this.runtimeLimits.hookTimeoutMs===void 0?{}:{hookTimeoutMs:this.runtimeLimits.hookTimeoutMs},...this.runtimeLimits.hookTeardownTimeoutMs===void 0?{}:{hookTeardownTimeoutMs:this.runtimeLimits.hookTeardownTimeoutMs},...this.options.approvals===void 0?{}:{approvals:this.options.approvals},...this.options.spillStore===void 0?{}:{spillStore:this.options.spillStore},...this.options.interceptors===void 0?{}:{interceptors:this.options.interceptors},...this.contextSections===void 0?{}:{contextSections:this.contextSections},...r===void 0?{}:{hooks:r},...e.signal===void 0?{}:{signal:e.signal},...t===void 0?{}:{accounting:t},...t?.modelInvocation.logger===void 0?{}:{logger:t.modelInvocation.logger},trace:{...this.options.trace,conversationId:this.currentConversationId,agentId:n.id,agentName:n.name}};return n.mode===`deep-human-in-loop`?y({...o,mode:n.mode,userInput:this.options.userInput}):n.mode===`deep`?y({...o,mode:n.mode,...this.options.userInput===void 0?{}:{userInput:this.options.userInput}}):y({...o,mode:`basic`})}createCompactor(){let e=this.options.compaction===!1?!1:this.options.compaction===void 0?this.definition.compaction:c(this.options.compaction);if(e!==!1)return new s({registry:this.options.registry,config:()=>this.callConfig(this.activeInvocation),history:()=>this.currentHistory,system:()=>this.systemInstructions(this.activeAdditionalInstructions),pinnedMessages:()=>L(this.currentMemory,this.definition.memory.maxInjectedChars),tools:()=>[...this.effectiveCatalog()?.schemas()??[],...this.definition.nativeTools],policy:e})}effectiveCatalog(){return this.activeRuntimeCatalog??this.catalog}combinedHooks(e){let t=this.options.hooks;if(this.compactor!==void 0||t!==void 0||this.currentMemory.items().length!==0)return{...t,beforeStep:async n=>{let r=this.currentHistory.generation();if(this.compactor!==void 0&&o(this.compactor,e),await this.compactor?.beforeStep(n),e?.usageStop!==void 0)return{kind:`proceed`};let i=this.currentHistory.generation()===r?n:{...n,messages:a(this.currentHistory.messages()),snapshot:this.currentHistory.snapshot()},s=L(this.currentMemory,this.definition.memory.maxInjectedChars,e),c=s.length===0?i:{...i,messages:Object.freeze([...s,...i.messages])},l=await t?.beforeStep?.(c)??{kind:`proceed`};if(l.kind===`reject`)return l;let u=[...s,...l.prepend??[]];return u.length===0?l:{kind:`proceed`,prepend:u}},onRequestError:async n=>{this.compactor!==void 0&&o(this.compactor,e);let r=await this.compactor?.onRequestError(n);return e?.usageStop===void 0?r===`retry`?`retry`:await t?.onRequestError?.(n)??`fail`:`fail`}}}callConfig(e){return W(this.definition,B(this),e)}systemInstructions(e){let t=this.skillCatalog===void 0?this.definition.instructions:f(this.definition.instructions,this.skillCatalog.summaries(),this.definition.skillOptions),n=this.options.team,r=n===void 0?t:`${t}\n\n${n.team.instructionsFor(n.name??this.definition.id)}`;return M(r,e)}skillLookup(e){return{...this.options.skillCwd===void 0?{}:{cwd:this.options.skillCwd},...e===void 0?{}:{signal:e}}}activationSnapshot(){let e=new Map;for(let t of this.pendingSkillActivations)e.set(t.id,t);for(let t of this.skillCatalog?.activatedSkillReferences()??[])e.set(t.id,t);for(let t of this.skillCatalog?.activatedSummaries()??[])e.has(t.id)||e.set(t.id,Object.freeze({id:t.id,provider:t.provider,source:t.source,...t.resourceBase===void 0?{}:{resourceBase:Object.freeze({...t.resourceBase})}}));return Object.freeze([...e.values()].sort((e,t)=>e.id.localeCompare(t.id)))}async prepareSkills(e,t){await j(this.definition,this.skillCatalog,this.pendingSkillActivations,e=>this.skillLookup(e),()=>{this.pendingSkillActivations=Object.freeze([])},e,t)}};export{q as AgentSession,z as configureRuntimeSessionModel,V as streamRuntimeSession};
2
2
  //# sourceMappingURL=session.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"session.js","names":[],"sources":["../../../src/agent/define/session.ts"],"sourcesContent":["import { contentHasImage } from '../../message/projection.ts'\nimport { ModelError } from '../../errors/model-error.ts'\nimport { type ToolCatalog } from '../tool/registry.ts'\nimport { History } from '../history/history.ts'\nimport { normalizeToolPairing } from '../history/normalize.ts'\nimport type { TurnHooks } from '../loop/types.ts'\nimport { ContextCompactor, type CompactionResult } from '../memory/compaction.ts'\nimport { bindCompactionAccounting } from '../memory/accounting-binding.ts'\nimport { resolveCompactionConfig } from '../memory/compaction-config.ts'\nimport { AgentMemory } from '../memory/memory.ts'\nimport { captureContextSections } from '../context/section.ts'\nimport type { ContextSection } from '../context/types.ts'\nimport { runAgent, type AgentRunEvent, type AgentRunOutcome } from '../mode/run-agent.ts'\nimport type { UserInputBroker } from '../mode/user-input.ts'\nimport { waitForSettlement } from '../../async/index.ts'\nimport type { OperationStatus } from '../../observation/index.ts'\nimport { RunEventBuffer } from '../accounting/event-buffer.ts'\nimport { AgentRunError, AGENT_ACCOUNTING_ERROR_CODES } from '../accounting/error.ts'\nimport type { RunAccountingPort } from '../accounting/contracts.ts'\nimport type { LegacyRunReport } from '../accounting/report.ts'\nimport type { RunReport } from '../accounting/delivery-types.ts'\nimport { createRunTerminalRecord, withTerminalDelivery } from '../accounting/delivery/terminal.ts'\nimport { SkillCatalog, createSkillTools, renderSkillCatalog, type SkillLookupOptions } from '../skill/index.ts'\nimport type { AgentDefinition } from './definition.ts'\nimport {\n type AgentInput, type AgentRuntimeLimits, type AgentSessionOptions, type AgentSessionSnapshot,\n type AgentSessionActivatedSkillSnapshot, type AgentResumeSessionOptions,\n type AgentInvocationOptions, type AgentResponse, type AgentRunHandle,\n} from './session/types.ts'\nimport { validateSessionSnapshot } from './session/validation.ts'\nimport { resolveRuntimeLimits } from './session/config.ts'\nimport {\n conversationId, newConversationId, userMessage, deferred, messageOf, errorCodeOf,\n toolCatalog,\n} from './session/common.ts'\nimport { captureResumedSkillActivations, prepareSkills } from './session/skills.ts'\nimport { appendRunInstructions } from './instructions.ts'\nimport type { ToolSourceRunReference } from '../tool/source-types.ts'\nimport { accountTraceEvent } from './session/trace-accounting.ts'\nimport {\n captureResumedObjective, commitRuntimeMemory, loadRuntimeMemory, renderRuntimeMemory,\n} from './session/runtime-memory.ts'\nimport { attachRuntimeSession, runtimeSessionConfiguration } from './session/runtime-binding.ts'\nimport { bindSkillProviderLogger } from '../skill/provider/context.ts'\nimport { createSessionLedger } from './session/accounting.ts'\nimport { runRuntimeCompaction } from './session/runtime-compaction.ts'\nimport { sessionCallConfig } from './session/model-config.ts'\nimport { consumeSessionEvents } from './session/observer.ts'\nimport { sealRuntimeRun } from './session/run-seal.ts'\n\nexport class AgentSession {\n readonly definition: AgentDefinition\n private readonly options: AgentSessionOptions\n private readonly catalog: ToolCatalog | undefined\n private activeRuntimeCatalog: ToolCatalog | undefined\n private readonly skillCatalog: SkillCatalog | undefined\n private readonly runtimeLimits: Readonly<AgentRuntimeLimits>\n /** Definition sections first, then session sections; duplicate ids are rejected. */\n private readonly contextSections: readonly ContextSection[] | undefined\n private currentHistory: History\n private currentMemory: AgentMemory\n private currentConversationId: string\n private compactor: ContextCompactor | undefined\n private pendingSkillActivations: readonly AgentSessionActivatedSkillSnapshot[] = Object.freeze([])\n private active = false\n private activeAdditionalInstructions: string | undefined\n private readonly idleWaiters = new Set<() => void>()\n\n constructor(definition: AgentDefinition, options: AgentSessionOptions) {\n if (definition.mode === 'deep-human-in-loop' && options.userInput === undefined) {\n throw new TypeError(`agent '${definition.id}' requires a userInput broker in deep-human-in-loop mode`)\n }\n this.definition = definition\n const historyLimits = options.historyLimits === undefined\n ? undefined\n : Object.freeze({ ...options.historyLimits })\n // Validate reset-time policy even when the initial History was supplied by\n // the host, and detach mutable option containers from the caller.\n if (options.history !== undefined && historyLimits !== undefined) void new History(historyLimits)\n const compaction = options.compaction === undefined || options.compaction === false\n ? options.compaction\n : Object.freeze({ ...options.compaction })\n const trace = options.trace === undefined ? undefined : Object.freeze({ ...options.trace })\n const team = options.team === undefined ? undefined : Object.freeze({ ...options.team })\n const ledgerLimits = options.ledgerLimits === undefined ? undefined : Object.freeze({ ...options.ledgerLimits })\n const eventBufferLimits = options.eventBufferLimits === undefined\n ? undefined\n : Object.freeze({ ...options.eventBufferLimits })\n this.options = Object.freeze({\n ...options,\n ...(historyLimits === undefined ? {} : { historyLimits }),\n ...(compaction === undefined ? {} : { compaction }),\n ...(trace === undefined ? {} : { trace }),\n ...(team === undefined ? {} : { team }),\n ...(ledgerLimits === undefined ? {} : { ledgerLimits }),\n ...(eventBufferLimits === undefined ? {} : { eventBufferLimits }),\n ...(options.skills === undefined ? {} : { skills: Object.freeze([...options.skills]) }),\n ...(Array.isArray(options.tools) ? { tools: Object.freeze([...options.tools]) } : {}),\n ...(options.interceptors === undefined ? {} : { interceptors: Object.freeze([...options.interceptors]) }),\n })\n this.runtimeLimits = resolveRuntimeLimits(options.runtimeLimits)\n // A session may replace a definition section by reusing its id: the\n // definition describes the agent, the session describes where it is\n // running, and the more specific one wins in place. Two sections with one\n // id inside the *same* list stays an error — a single live surface node\n // cannot have two owners.\n const overrides = captureContextSections(options.contextSections) ?? []\n const base = captureContextSections(definition.contextSections) ?? []\n const merged = [\n ...base.map(section => overrides.find(override => override.id === section.id) ?? section),\n ...overrides.filter(override => !base.some(section => section.id === override.id)),\n ]\n this.contextSections = merged.length === 0 ? undefined : Object.freeze(merged)\n this.currentConversationId = conversationId(options.conversationId)\n this.currentHistory = options.history ?? new History(historyLimits)\n const skillSources = [...definition.skills, ...options.skills ?? []]\n const skillRuntimeDisabled = definition.skillIds?.length === 0\n const skillRuntimeConfigured = skillSources.length > 0 || (definition.skillIds?.length ?? 0) > 0\n this.skillCatalog = skillRuntimeDisabled || !skillRuntimeConfigured\n ? undefined\n : new SkillCatalog(skillSources, {\n ...(definition.skillIds === undefined ? {} : { allowedSkillIds: definition.skillIds }),\n maxSkills: definition.skillOptions.maxSkills,\n maxCatalogBytes: definition.skillOptions.maxDiscoveryBytes,\n })\n const skillTools = this.skillCatalog === undefined ? [] : createSkillTools(\n this.skillCatalog,\n definition.skillOptions,\n () => this.skillLookup(),\n )\n const teamAccess = options.team?.tools === 'reporting' ? 'reporting' as const : 'full' as const\n const teamTools = options.team?.tools === false\n ? []\n : options.team?.team.toolsFor(options.team.name ?? definition.id, teamAccess) ?? []\n this.catalog = toolCatalog(definition.tools, options.tools, [...skillTools, ...teamTools])\n this.currentMemory = options.memory instanceof AgentMemory\n ? options.memory\n : options.memory === undefined\n ? new AgentMemory(definition.memory.seed, definition.memory)\n : AgentMemory.fromSnapshot(options.memory, definition.memory)\n captureResumedObjective(this.currentMemory, this.currentHistory, this.definition.memory.autoCaptureObjective)\n this.compactor = this.createCompactor()\n attachRuntimeSession(this, (input, invocation, additionalInstructions) =>\n this.createRunHandle(input, invocation, additionalInstructions), invocation =>\n this.createRunHandle(undefined, invocation), invocation =>\n this.compactForRuntime(invocation), () => {\n this.compactor = this.createCompactor()\n })\n options.team?.team.attach(this, {\n ...(options.team.name === undefined ? {} : { name: options.team.name }),\n ...(options.team.description === undefined ? {} : { description: options.team.description }),\n ...(options.team.instructions === undefined ? {} : { instructions: options.team.instructions }),\n ...(options.team.role === undefined ? {} : { role: options.team.role }),\n ...(options.team.tools === undefined ? {} : { tools: options.team.tools }),\n })\n }\n\n /** Restore a JSON-round-tripped session snapshot with fresh runtime dependencies. */\n static fromSnapshot(\n definition: AgentDefinition,\n options: AgentResumeSessionOptions,\n ): AgentSession {\n const { snapshot, ...runtime } = options\n validateSessionSnapshot(snapshot, definition.id, definition.skillOptions.maxSkills)\n const session = new AgentSession(definition, {\n ...runtime,\n conversationId: snapshot.conversationId,\n history: History.fromSnapshot(snapshot.history, runtime.historyLimits),\n memory: AgentMemory.fromSnapshot(snapshot.memory, definition.memory),\n })\n session.pendingSkillActivations = captureResumedSkillActivations(snapshot.skills, session.skillCatalog)\n return session\n }\n\n /** Stable identity for persistence keys, URLs, logs, and GUI trace grouping. */\n get conversationId(): string { return this.currentConversationId }\n\n /** Mutable append-only history owned by this conversation. */\n get history(): History { return this.currentHistory }\n\n /** Durable task facts injected into every request outside compactable history. */\n get memory(): AgentMemory { return this.currentMemory }\n\n /** Refreshable skill catalog for host UIs and explicit user invocation surfaces. */\n get skills(): SkillCatalog | undefined { return this.skillCatalog }\n\n /** Whether a model/tool turn currently owns this session. */\n get isRunning(): boolean { return this.active }\n\n /** Capture one JSON-safe envelope that can be passed to `agent.resumeSession()`. */\n snapshot(): AgentSessionSnapshot {\n const activated = this.activationSnapshot()\n return Object.freeze({\n version: 1 as const,\n conversationId: this.currentConversationId,\n agentId: this.definition.id,\n history: this.currentHistory.snapshot(),\n memory: this.currentMemory.snapshot(),\n ...runtimeSessionConfiguration(this)?.memory === undefined ? {} : {\n memoryBindingId: runtimeSessionConfiguration(this)!.memory!.bindingId,\n },\n ...activated.length === 0 ? {} : {\n skills: Object.freeze({ activated }),\n },\n })\n }\n\n /** Start a fresh conversation without rebuilding provider/tool configuration. */\n reset(): void {\n if (this.active) throw new Error('cannot reset an agent session while a run is active')\n this.currentConversationId = newConversationId()\n this.currentHistory = new History(this.options.historyLimits)\n this.currentMemory = new AgentMemory(this.definition.memory.seed, this.definition.memory)\n this.pendingSkillActivations = Object.freeze([])\n this.skillCatalog?.clearActivations()\n this.compactor = this.createCompactor()\n }\n\n /** Create one explicit context checkpoint while the session is idle. */\n async compact(invocation: AgentInvocationOptions = {}): Promise<CompactionResult | null> {\n if (this.active) throw new Error('cannot compact an agent session while a run is active')\n this.active = true\n try {\n await this.prepareSkills(invocation.signal)\n return await this.compactor?.compactNow(invocation.signal) ?? null\n } finally {\n this.releaseRun()\n }\n }\n\n private async compactForRuntime(invocation: AgentInvocationOptions): Promise<{\n readonly result: CompactionResult | null\n readonly report: LegacyRunReport\n readonly failure?: unknown\n }> {\n if (this.active) throw new Error('cannot compact an agent session while a run is active')\n const ledger = this.createLedger()\n this.active = true\n if (this.compactor !== undefined) bindCompactionAccounting(this.compactor, ledger)\n if (this.skillCatalog !== undefined) bindSkillProviderLogger(this.skillCatalog, ledger.modelInvocation.logger)\n try { return await runRuntimeCompaction({\n ...(this.compactor === undefined ? {} : { compactor: this.compactor }),\n invocation,\n accounting: ledger,\n prepare: () => this.prepareSkills(invocation.signal, ledger),\n }) } finally { this.releaseRun() }\n }\n\n /**\n * Append attributed context without starting a turn.\n *\n * A2A quiet delivery uses this primitive. The returned history sequence is a\n * delivery receipt and lets wake-up schedulers coalesce messages safely.\n */\n inject(input: AgentInput): number {\n const message = userMessage(input)\n this.currentHistory.append({ kind: 'user', message })\n return this.currentHistory.entries().length\n }\n\n /** Resolve after the current run releases the session. */\n whenIdle(signal?: AbortSignal): Promise<void> {\n if (!this.active) return Promise.resolve()\n if (signal?.aborted) return Promise.reject(signal.reason)\n return new Promise<void>((resolve, reject) => {\n let settled = false\n const finish = (): void => {\n if (settled) return\n settled = true\n this.idleWaiters.delete(finish)\n signal?.removeEventListener('abort', abort)\n resolve()\n }\n const abort = (): void => {\n if (settled) return\n settled = true\n this.idleWaiters.delete(finish)\n reject(signal?.reason)\n }\n this.idleWaiters.add(finish)\n signal?.addEventListener('abort', abort, { once: true })\n if (!this.active) finish()\n })\n }\n\n /** Start an eager run and expose both public events and its canonical terminal report. */\n stream(input: AgentInput, invocation: AgentInvocationOptions = {}): AgentRunHandle {\n return this.createRunHandle(input, invocation)\n }\n\n /** Process context already appended with {@link inject} without duplicating it. */\n streamPending(invocation: AgentInvocationOptions = {}): AgentRunHandle {\n return this.createRunHandle(undefined, invocation)\n }\n\n /** Run one user turn and return the terminal response. */\n async run(input: AgentInput, invocation: AgentInvocationOptions = {}): Promise<AgentResponse> {\n const handle = this.stream(input, invocation)\n await consumeSessionEvents(handle, invocation.onEvent, this.runtimeLimits.observerTimeoutMs ?? 30_000)\n return await handle.result\n }\n\n /** Run one turn over already-injected context and return its terminal response. */\n async runPending(invocation: AgentInvocationOptions = {}): Promise<AgentResponse> {\n const handle = this.streamPending(invocation)\n await consumeSessionEvents(handle, invocation.onEvent, this.runtimeLimits.observerTimeoutMs ?? 30_000)\n return await handle.result\n }\n\n private createRunHandle(\n input: AgentInput | undefined,\n invocation: AgentInvocationOptions,\n additionalInstructions?: string,\n ): AgentRunHandle {\n if (this.active) throw new Error(`agent session '${this.definition.id}' is already running`)\n const firstTurnSeq = this.currentHistory.entries().length + 1\n const owned = new AbortController()\n let terminal = false\n const signal = invocation.signal === undefined\n ? owned.signal\n : AbortSignal.any([invocation.signal, owned.signal])\n const buffer = new RunEventBuffer<AgentRunEvent>(\n this.options.eventBufferLimits?.maxEvents,\n this.options.eventBufferLimits?.maxBytes,\n )\n const reportDeferred = deferred<RunReport>()\n const resultDeferred = deferred<AgentResponse>()\n const toolSourcesDeferred = deferred<readonly ToolSourceRunReference[]>()\n const ledger = this.createLedger()\n let toolSourceReferences: readonly ToolSourceRunReference[] = Object.freeze([])\n if (this.compactor !== undefined) bindCompactionAccounting(this.compactor, ledger)\n if (this.skillCatalog !== undefined) {\n bindSkillProviderLogger(this.skillCatalog, ledger.modelInvocation.logger)\n }\n this.active = true\n this.activeAdditionalInstructions = additionalInstructions\n const spanOperations = new Map<string, string>()\n const task = (async (): Promise<void> => {\n let failure: unknown\n let outcome: AgentRunOutcome | undefined\n let memoryState: Awaited<ReturnType<typeof loadRuntimeMemory>>['state'] | undefined\n try {\n const runtime = runtimeSessionConfiguration(this)\n if (runtime?.memory !== undefined) {\n const prepared = await loadRuntimeMemory(\n runtime.memory, this.currentConversationId, this.definition.memory, signal, ledger,\n )\n memoryState = prepared.state\n if (prepared.memory !== undefined) this.currentMemory = prepared.memory\n }\n if (runtime?.prepareTools !== undefined) {\n const logger = ledger.modelInvocation.logger\n if (logger === undefined) throw new Error('runtime tool source logger is unavailable')\n const generation = runtime.prepareTools(signal, logger, [...this.catalog?.names() ?? [], ...this.definition.nativeTools.map(tool => tool.name)])\n this.activeRuntimeCatalog = toolCatalog([], this.catalog, generation.tools)\n toolSourceReferences = generation.references\n }\n toolSourcesDeferred.resolve(toolSourceReferences)\n await this.prepareSkills(signal, ledger)\n if (input !== undefined) {\n const message = userMessage(input)\n if (this.definition.memory.autoCaptureObjective) {\n const operation = ledger.startOperation('memory', { data: { action: 'capture-objective' } })\n try {\n this.currentMemory.captureOriginalObjective(message)\n ledger.endOperation(operation, 'success')\n } catch (error) {\n ledger.endOperation(operation, 'error', { error })\n throw error\n }\n }\n this.currentHistory.append({ kind: 'user', message })\n }\n // Preflight before compaction can turn a required image into a summary.\n if (invocation.imagePolicy === 'strict' && this.history.messages().some(message => contentHasImage(message.content))) {\n const config = this.callConfig()\n const model = await this.options.registry.resolveModelInfo(config.provider, config.model, signal)\n if (model.inputModalities !== undefined && !model.inputModalities.includes('image')) {\n throw new ModelError(`model ${model.id} does not support required image input`, 'UNSUPPORTED_IMAGE_INPUT')\n }\n }\n for await (const event of this.runDefinition({ ...invocation, signal }, ledger)) {\n accountTraceEvent(ledger, spanOperations, event)\n if (event.type === 'agent-end') outcome = event.outcome\n buffer.push(event)\n }\n if (outcome === undefined) {\n throw new Error(`agent session '${this.definition.id}' ended without agent-end`)\n }\n if (signal.aborted) throw signal.reason ?? new Error('agent run was aborted')\n if (outcome.reason.kind === 'error' && outcome.reason.failure.code === 'USAGE_REQUIRED') {\n const error = new Error(outcome.reason.failure.message) as Error & { code: string }\n error.code = 'USAGE_REQUIRED'\n throw error\n }\n if (runtime?.memory !== undefined && memoryState !== undefined && memoryState.status !== 'disabled') {\n await commitRuntimeMemory(\n runtime.memory, this.currentConversationId, this.currentMemory.snapshot(),\n memoryState, signal, ledger,\n )\n }\n } catch (error: unknown) {\n failure = error\n toolSourcesDeferred.resolve(toolSourceReferences)\n }\n\n let report: RunReport\n try {\n const status: OperationStatus = signal.aborted || outcome?.reason.kind === 'aborted'\n ? 'aborted'\n : failure !== undefined || outcome?.reason.kind === 'error'\n ? 'error'\n : 'success'\n const ledgerReport = await ledger.finalize(status, outcome?.completed ?? false, failure)\n report = withTerminalDelivery(createRunTerminalRecord(ledgerReport), ledgerReport.delivery)\n reportDeferred.resolve(report)\n } catch (finalizeError: unknown) {\n reportDeferred.reject(finalizeError)\n resultDeferred.reject(finalizeError)\n buffer.fail(finalizeError)\n terminal = true\n this.releaseRun()\n return\n }\n if (terminal) return\n\n if (failure === undefined && ledger.terminalAuditFailure) {\n const error = new Error('audit observation checkpoint failed after run finalization') as Error & { code: string }\n error.code = 'OBSERVABILITY_AUDIT_UNAVAILABLE'\n failure = error\n }\n if (failure !== undefined) {\n const error = new AgentRunError(\n messageOf(failure),\n errorCodeOf(failure) ?? AGENT_ACCOUNTING_ERROR_CODES.RUN_FAILED,\n report,\n { cause: failure },\n )\n resultDeferred.reject(error)\n buffer.fail(error)\n } else {\n const terminal = outcome as AgentRunOutcome\n const historyEvent = [...this.currentHistory.entries()].reverse()\n .find(entry => entry.seq >= firstTurnSeq && entry.event.kind === 'assistant')\n ?.event\n const assistantMessage = historyEvent?.kind === 'assistant' ? historyEvent.message : undefined\n const response: AgentResponse = Object.freeze({\n text: terminal.text,\n outcome: terminal,\n report,\n ...assistantMessage === undefined ? {} : { message: assistantMessage },\n })\n resultDeferred.resolve(response)\n buffer.close()\n }\n terminal = true\n this.releaseRun()\n })()\n void task.catch(error => {\n if (terminal) return\n reportDeferred.reject(error)\n resultDeferred.reject(error)\n buffer.fail(error)\n terminal = true\n this.releaseRun()\n })\n void resultDeferred.promise.catch(() => undefined)\n void reportDeferred.promise.catch(() => undefined)\n let iterated = false\n return Object.freeze({\n runId: ledger.runId,\n traceId: ledger.traceId,\n toolSourceSnapshots: toolSourcesDeferred.promise,\n eventsSettled: task.then(() => undefined, () => undefined),\n result: resultDeferred.promise,\n report: reportDeferred.promise,\n seal: () => sealRuntimeRun({ ledger, buffer, report: reportDeferred, result: resultDeferred,\n toolSources: toolSourcesDeferred, currentToolSources: () => toolSourceReferences, isTerminal: () => terminal,\n markTerminal: () => { terminal = true }, abort: () => owned.abort(new Error('Agent run was sealed')),\n release: () => this.releaseRun() }),\n abort(_reason?: unknown): void {\n if (!terminal && !owned.signal.aborted) owned.abort(new Error('Agent run was aborted'))\n },\n [Symbol.asyncIterator](): AsyncIterator<AgentRunEvent> {\n if (iterated) return (async function* () { throw new Error('an agent run handle can only be iterated once') })()\n iterated = true\n return (async function* () {\n let exhausted = false\n try {\n while (true) {\n const item = await buffer.take()\n if (item.done) { exhausted = true; break }\n yield item.value\n }\n } finally {\n if (!exhausted) {\n owned.abort(new Error('agent event consumer stopped'))\n buffer.stop()\n await waitForSettlement(task, 30_000)\n }\n }\n })()\n },\n })\n }\n\n private releaseRun(): void {\n this.active = false\n this.activeAdditionalInstructions = undefined\n this.activeRuntimeCatalog = undefined\n if (this.skillCatalog !== undefined) bindSkillProviderLogger(this.skillCatalog, undefined)\n if (this.compactor !== undefined) bindCompactionAccounting(this.compactor, undefined)\n const waiters = [...this.idleWaiters]\n this.idleWaiters.clear()\n for (const resolve of waiters) resolve()\n }\n\n private createLedger() {\n const runtime = runtimeSessionConfiguration(this)\n return createSessionLedger({\n definition: this.definition,\n options: this.options,\n runtimeLimits: this.runtimeLimits,\n conversationId: this.currentConversationId,\n ...(runtime === undefined ? {} : { runtime }),\n })\n }\n\n private runDefinition(\n invocation: AgentInvocationOptions,\n accounting?: RunAccountingPort,\n ): AsyncIterable<AgentRunEvent> {\n const definition = this.definition\n const hooks = this.combinedHooks(accounting)\n const catalog = this.effectiveCatalog()\n const outputFormat = invocation.outputFormat ?? definition.outputFormat\n const common = {\n registry: this.options.registry,\n config: this.callConfig(),\n history: this.history,\n ...catalog === undefined ? {} : { tools: catalog },\n ...definition.nativeTools.length === 0 ? {} : { nativeTools: definition.nativeTools },\n ...definition.toolChoice === undefined ? {} : { toolChoice: definition.toolChoice },\n ...invocation.imagePolicy === undefined ? {} : { imagePolicy: invocation.imagePolicy },\n ...outputFormat === undefined ? {} : { outputFormat },\n ...(invocation.validateOutput === undefined ? {} : { validateOutput: invocation.validateOutput }),\n system: this.systemInstructions(this.activeAdditionalInstructions),\n maxTurns: definition.maxTurns,\n bounds: {\n maxToolCalls: definition.maxToolCalls,\n ...this.runtimeLimits.maxParallelToolCalls === undefined\n ? {}\n : { maxParallel: this.runtimeLimits.maxParallelToolCalls },\n ...this.runtimeLimits.maxConsecutiveToolErrors === undefined\n ? {}\n : { maxConsecutiveToolErrors: this.runtimeLimits.maxConsecutiveToolErrors },\n ...this.runtimeLimits.repeatToolWarningAt === undefined\n ? {}\n : { repeatToolWarningAt: this.runtimeLimits.repeatToolWarningAt },\n ...this.runtimeLimits.repeatToolLimit === undefined\n ? {}\n : { repeatToolLimit: this.runtimeLimits.repeatToolLimit },\n ...this.runtimeLimits.toolCycleWarningAt === undefined\n ? {}\n : { toolCycleWarningAt: this.runtimeLimits.toolCycleWarningAt },\n ...this.runtimeLimits.toolCycleLimit === undefined\n ? {}\n : { toolCycleLimit: this.runtimeLimits.toolCycleLimit },\n ...this.runtimeLimits.onExhausted === undefined\n ? {}\n : { onExhausted: this.runtimeLimits.onExhausted },\n ...this.runtimeLimits.maxToolResultTokens === undefined\n ? {}\n : { maxToolResultTokens: this.runtimeLimits.maxToolResultTokens },\n ...this.runtimeLimits.toolResultOverflow === undefined\n ? {}\n : { toolResultOverflow: this.runtimeLimits.toolResultOverflow },\n ...this.runtimeLimits.maxToolCycleLength === undefined\n ? {}\n : { maxToolCycleLength: this.runtimeLimits.maxToolCycleLength },\n ...this.runtimeLimits.finalReportReserveTokens === undefined ? {} : {\n finalReportReserveTokens: this.runtimeLimits.finalReportReserveTokens,\n },\n ...this.runtimeLimits.maxTotalTokens === undefined\n ? {}\n : { maxTotalTokens: this.runtimeLimits.maxTotalTokens },\n ...this.runtimeLimits.maxToolResultBytes === undefined\n ? {}\n : { maxToolResultBytes: this.runtimeLimits.maxToolResultBytes },\n ...this.runtimeLimits.maxToolDurationMs === undefined\n ? {}\n : { maxToolDurationMs: this.runtimeLimits.maxToolDurationMs },\n ...this.runtimeLimits.toolTeardownTimeoutMs === undefined\n ? {}\n : { toolTeardownTimeoutMs: this.runtimeLimits.toolTeardownTimeoutMs },\n },\n commentary: definition.commentary,\n ...this.runtimeLimits.teardownTimeoutMs === undefined ? {} : { teardownTimeoutMs: this.runtimeLimits.teardownTimeoutMs },\n ...this.runtimeLimits.modelTimeoutMs === undefined ? {} : { modelTimeoutMs: this.runtimeLimits.modelTimeoutMs },\n ...this.runtimeLimits.maxModelRequestBytes === undefined ? {} : { maxModelRequestBytes: this.runtimeLimits.maxModelRequestBytes },\n ...this.runtimeLimits.maxModelResponseBytes === undefined ? {} : { maxModelResponseBytes: this.runtimeLimits.maxModelResponseBytes },\n ...this.runtimeLimits.maxModelStreamEvents === undefined ? {} : { maxModelStreamEvents: this.runtimeLimits.maxModelStreamEvents },\n ...this.runtimeLimits.hookTimeoutMs === undefined ? {} : { hookTimeoutMs: this.runtimeLimits.hookTimeoutMs },\n ...this.runtimeLimits.hookTeardownTimeoutMs === undefined ? {} : { hookTeardownTimeoutMs: this.runtimeLimits.hookTeardownTimeoutMs },\n ...this.options.approvals === undefined ? {} : { approvals: this.options.approvals },\n ...this.options.spillStore === undefined ? {} : { spillStore: this.options.spillStore },\n ...this.options.interceptors === undefined ? {} : { interceptors: this.options.interceptors },\n ...this.contextSections === undefined ? {} : { contextSections: this.contextSections },\n ...hooks === undefined ? {} : { hooks },\n ...invocation.signal === undefined ? {} : { signal: invocation.signal },\n ...accounting === undefined ? {} : { accounting },\n ...accounting?.modelInvocation.logger === undefined ? {} : { logger: accounting.modelInvocation.logger },\n trace: {\n ...this.options.trace,\n conversationId: this.currentConversationId,\n agentId: definition.id,\n agentName: definition.name,\n },\n }\n if (definition.mode === 'deep-human-in-loop') {\n return runAgent({\n ...common, mode: definition.mode, userInput: this.options.userInput as UserInputBroker,\n })\n }\n if (definition.mode === 'deep') {\n return runAgent({\n ...common, mode: definition.mode,\n ...this.options.userInput === undefined ? {} : { userInput: this.options.userInput },\n })\n }\n return runAgent({ ...common, mode: 'basic' })\n }\n\n private createCompactor(): ContextCompactor | undefined {\n const configured = this.options.compaction === false\n ? false\n : this.options.compaction === undefined\n ? this.definition.compaction\n : resolveCompactionConfig(this.options.compaction)\n if (configured === false) return undefined\n return new ContextCompactor({\n registry: this.options.registry,\n config: this.callConfig(),\n history: () => this.currentHistory,\n system: () => this.systemInstructions(this.activeAdditionalInstructions),\n pinnedMessages: () => renderRuntimeMemory(\n this.currentMemory, this.definition.memory.maxInjectedChars,\n ),\n tools: () => [\n ...this.effectiveCatalog()?.schemas() ?? [],\n ...this.definition.nativeTools,\n ],\n policy: configured,\n })\n }\n\n private effectiveCatalog(): ToolCatalog | undefined {\n return this.activeRuntimeCatalog ?? this.catalog\n }\n\n private combinedHooks(accounting?: RunAccountingPort): TurnHooks | undefined {\n const user = this.options.hooks\n if (this.compactor === undefined\n && user === undefined\n && this.currentMemory.items().length === 0) return undefined\n return {\n ...user,\n beforeStep: async context => {\n const generation = this.currentHistory.generation()\n if (this.compactor !== undefined) bindCompactionAccounting(this.compactor, accounting)\n await this.compactor?.beforeStep(context)\n if (accounting?.usageStop !== undefined) return { kind: 'proceed' as const }\n const refreshed = this.currentHistory.generation() === generation\n ? context\n : {\n ...context,\n messages: normalizeToolPairing(this.currentHistory.messages()),\n snapshot: this.currentHistory.snapshot(),\n }\n const memory = renderRuntimeMemory(\n this.currentMemory, this.definition.memory.maxInjectedChars, accounting,\n )\n const current = memory.length === 0\n ? refreshed\n : { ...refreshed, messages: Object.freeze([...memory, ...refreshed.messages]) }\n const decision = await user?.beforeStep?.(current) ?? { kind: 'proceed' as const }\n if (decision.kind === 'reject') return decision\n const prepend = [...memory, ...decision.prepend ?? []]\n return prepend.length === 0 ? decision : { kind: 'proceed' as const, prepend }\n },\n onRequestError: async context => {\n if (this.compactor !== undefined) bindCompactionAccounting(this.compactor, accounting)\n const recovery = await this.compactor?.onRequestError(context)\n if (accounting?.usageStop !== undefined) return 'fail'\n if (recovery === 'retry') return 'retry'\n return await user?.onRequestError?.(context) ?? 'fail'\n },\n }\n }\n\n private callConfig() { return sessionCallConfig(this.definition, runtimeSessionConfiguration(this)) }\n\n private systemInstructions(additionalInstructions?: string): string {\n const base = this.skillCatalog === undefined\n ? this.definition.instructions\n : renderSkillCatalog(\n this.definition.instructions,\n this.skillCatalog.summaries(),\n this.definition.skillOptions,\n )\n const team = this.options.team\n const composed = team === undefined\n ? base\n : `${base}\\n\\n${team.team.instructionsFor(team.name ?? this.definition.id)}`\n return appendRunInstructions(composed, additionalInstructions)\n }\n\n private skillLookup(signal?: AbortSignal): SkillLookupOptions {\n return {\n ...(this.options.skillCwd === undefined ? {} : { cwd: this.options.skillCwd }),\n ...(signal === undefined ? {} : { signal }),\n }\n }\n\n private activationSnapshot(): readonly AgentSessionActivatedSkillSnapshot[] {\n const activated = new Map<string, AgentSessionActivatedSkillSnapshot>()\n for (const entry of this.pendingSkillActivations) activated.set(entry.id, entry)\n for (const reference of this.skillCatalog?.activatedSkillReferences() ?? []) {\n activated.set(reference.id, reference)\n }\n for (const summary of this.skillCatalog?.activatedSummaries() ?? []) {\n if (activated.has(summary.id)) continue\n activated.set(summary.id, Object.freeze({\n id: summary.id, provider: summary.provider, source: summary.source,\n ...summary.resourceBase === undefined ? {} : {\n resourceBase: Object.freeze({ ...summary.resourceBase }),\n },\n }))\n }\n return Object.freeze([...activated.values()].sort((left, right) => left.id.localeCompare(right.id)))\n }\n\n private async prepareSkills(signal?: AbortSignal, accounting?: RunAccountingPort): Promise<void> {\n await prepareSkills(\n this.definition, this.skillCatalog, this.pendingSkillActivations,\n signal => this.skillLookup(signal),\n () => { this.pendingSkillActivations = Object.freeze([]) }, signal, accounting,\n )\n }\n}\n\nexport { configureRuntimeSessionModel, streamRuntimeSession } from './session/runtime-binding.ts'\nexport type {\n AgentInput, AgentRuntimeLimits, AgentSessionOptions, AgentTeamMemberOptions,\n AgentSessionSnapshot, AgentSessionActivatedSkillSnapshot, AgentResumeSessionOptions,\n AgentInvocationOptions, AgentResponse, AgentRunHandle,\n} from './session/types.ts'\n"],"mappings":"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"}
1
+ {"version":3,"file":"session.js","names":[],"sources":["../../../src/agent/define/session.ts"],"sourcesContent":["import { contentHasDocument, contentHasImage } from '../../message/projection.ts'\nimport { ModelError } from '../../errors/model-error.ts'\nimport { type ToolCatalog } from '../tool/registry.ts'\nimport { History } from '../history/history.ts'\nimport { normalizeToolPairing } from '../history/normalize.ts'\nimport type { TurnHooks } from '../loop/types.ts'\nimport { ContextCompactor, type CompactionResult } from '../memory/compaction.ts'\nimport { bindCompactionAccounting } from '../memory/accounting-binding.ts'\nimport { resolveCompactionConfig } from '../memory/compaction-config.ts'\nimport { AgentMemory } from '../memory/memory.ts'\nimport { captureContextSections } from '../context/section.ts'\nimport type { ContextSection } from '../context/types.ts'\nimport { runAgent, type AgentRunEvent, type AgentRunOutcome } from '../mode/run-agent.ts'\nimport type { UserInputBroker } from '../mode/user-input.ts'\nimport { waitForSettlement } from '../../async/index.ts'\nimport type { OperationStatus } from '../../observation/index.ts'\nimport { RunEventBuffer } from '../accounting/event-buffer.ts'\nimport { AgentRunError, AGENT_ACCOUNTING_ERROR_CODES } from '../accounting/error.ts'\nimport type { RunAccountingPort } from '../accounting/contracts.ts'\nimport type { LegacyRunReport } from '../accounting/report.ts'\nimport type { RunReport } from '../accounting/delivery-types.ts'\nimport { createRunTerminalRecord, withTerminalDelivery } from '../accounting/delivery/terminal.ts'\nimport { SkillCatalog, createSkillTools, renderSkillCatalog, type SkillLookupOptions } from '../skill/index.ts'\nimport type { AgentDefinition } from './definition.ts'\nimport {\n type AgentInput, type AgentRuntimeLimits, type AgentSessionOptions, type AgentSessionSnapshot,\n type AgentSessionActivatedSkillSnapshot, type AgentResumeSessionOptions,\n type AgentInvocationOptions, type AgentResponse, type AgentRunHandle,\n} from './session/types.ts'\nimport { validateSessionSnapshot } from './session/validation.ts'\nimport { resolveRuntimeLimits } from './session/config.ts'\nimport {\n conversationId, newConversationId, userMessage, deferred, messageOf, errorCodeOf,\n toolCatalog,\n} from './session/common.ts'\nimport { captureResumedSkillActivations, prepareSkills } from './session/skills.ts'\nimport { appendRunInstructions } from './instructions.ts'\nimport type { ToolSourceRunReference } from '../tool/source-types.ts'\nimport { accountTraceEvent } from './session/trace-accounting.ts'\nimport {\n captureResumedObjective, commitRuntimeMemory, loadRuntimeMemory, renderRuntimeMemory,\n} from './session/runtime-memory.ts'\nimport { attachRuntimeSession, runtimeSessionConfiguration } from './session/runtime-binding.ts'\nimport { bindSkillProviderLogger } from '../skill/provider/context.ts'\nimport { createSessionLedger } from './session/accounting.ts'\nimport { runRuntimeCompaction } from './session/runtime-compaction.ts'\nimport { sessionCallConfig } from './session/model-config.ts'\nimport { consumeSessionEvents } from './session/observer.ts'\nimport { sealRuntimeRun } from './session/run-seal.ts'\n\nexport class AgentSession {\n readonly definition: AgentDefinition\n private readonly options: AgentSessionOptions\n private readonly catalog: ToolCatalog | undefined\n private activeRuntimeCatalog: ToolCatalog | undefined\n private readonly skillCatalog: SkillCatalog | undefined\n private readonly runtimeLimits: Readonly<AgentRuntimeLimits>\n /** Definition sections first, then session sections; duplicate ids are rejected. */\n private readonly contextSections: readonly ContextSection[] | undefined\n private currentHistory: History\n private currentMemory: AgentMemory\n private currentConversationId: string\n private compactor: ContextCompactor | undefined\n private pendingSkillActivations: readonly AgentSessionActivatedSkillSnapshot[] = Object.freeze([])\n private active = false\n private activeAdditionalInstructions: string | undefined\n /** The overlay of the run that owns the session, so maintenance follows the same model. */\n private activeInvocation: AgentInvocationOptions | undefined\n private readonly idleWaiters = new Set<() => void>()\n\n constructor(definition: AgentDefinition, options: AgentSessionOptions) {\n if (definition.mode === 'deep-human-in-loop' && options.userInput === undefined) {\n throw new TypeError(`agent '${definition.id}' requires a userInput broker in deep-human-in-loop mode`)\n }\n this.definition = definition\n const historyLimits = options.historyLimits === undefined\n ? undefined\n : Object.freeze({ ...options.historyLimits })\n // Validate reset-time policy even when the initial History was supplied by\n // the host, and detach mutable option containers from the caller.\n if (options.history !== undefined && historyLimits !== undefined) void new History(historyLimits)\n const compaction = options.compaction === undefined || options.compaction === false\n ? options.compaction\n : Object.freeze({ ...options.compaction })\n const trace = options.trace === undefined ? undefined : Object.freeze({ ...options.trace })\n const team = options.team === undefined ? undefined : Object.freeze({ ...options.team })\n const ledgerLimits = options.ledgerLimits === undefined ? undefined : Object.freeze({ ...options.ledgerLimits })\n const eventBufferLimits = options.eventBufferLimits === undefined\n ? undefined\n : Object.freeze({ ...options.eventBufferLimits })\n this.options = Object.freeze({\n ...options,\n ...(historyLimits === undefined ? {} : { historyLimits }),\n ...(compaction === undefined ? {} : { compaction }),\n ...(trace === undefined ? {} : { trace }),\n ...(team === undefined ? {} : { team }),\n ...(ledgerLimits === undefined ? {} : { ledgerLimits }),\n ...(eventBufferLimits === undefined ? {} : { eventBufferLimits }),\n ...(options.skills === undefined ? {} : { skills: Object.freeze([...options.skills]) }),\n ...(Array.isArray(options.tools) ? { tools: Object.freeze([...options.tools]) } : {}),\n ...(options.interceptors === undefined ? {} : { interceptors: Object.freeze([...options.interceptors]) }),\n })\n this.runtimeLimits = resolveRuntimeLimits(options.runtimeLimits)\n // A session may replace a definition section by reusing its id: the\n // definition describes the agent, the session describes where it is\n // running, and the more specific one wins in place. Two sections with one\n // id inside the *same* list stays an error — a single live surface node\n // cannot have two owners.\n const overrides = captureContextSections(options.contextSections) ?? []\n const base = captureContextSections(definition.contextSections) ?? []\n const merged = [\n ...base.map(section => overrides.find(override => override.id === section.id) ?? section),\n ...overrides.filter(override => !base.some(section => section.id === override.id)),\n ]\n this.contextSections = merged.length === 0 ? undefined : Object.freeze(merged)\n this.currentConversationId = conversationId(options.conversationId)\n this.currentHistory = options.history ?? new History(historyLimits)\n const skillSources = [...definition.skills, ...options.skills ?? []]\n const skillRuntimeDisabled = definition.skillIds?.length === 0\n const skillRuntimeConfigured = skillSources.length > 0 || (definition.skillIds?.length ?? 0) > 0\n this.skillCatalog = skillRuntimeDisabled || !skillRuntimeConfigured\n ? undefined\n : new SkillCatalog(skillSources, {\n ...(definition.skillIds === undefined ? {} : { allowedSkillIds: definition.skillIds }),\n maxSkills: definition.skillOptions.maxSkills,\n maxCatalogBytes: definition.skillOptions.maxDiscoveryBytes,\n })\n const skillTools = this.skillCatalog === undefined ? [] : createSkillTools(\n this.skillCatalog,\n definition.skillOptions,\n () => this.skillLookup(),\n )\n const teamAccess = options.team?.tools === 'reporting' ? 'reporting' as const : 'full' as const\n const teamTools = options.team?.tools === false\n ? []\n : options.team?.team.toolsFor(options.team.name ?? definition.id, teamAccess) ?? []\n this.catalog = toolCatalog(definition.tools, options.tools, [...skillTools, ...teamTools])\n this.currentMemory = options.memory instanceof AgentMemory\n ? options.memory\n : options.memory === undefined\n ? new AgentMemory(definition.memory.seed, definition.memory)\n : AgentMemory.fromSnapshot(options.memory, definition.memory)\n captureResumedObjective(this.currentMemory, this.currentHistory, this.definition.memory.autoCaptureObjective)\n this.compactor = this.createCompactor()\n attachRuntimeSession(this, (input, invocation, additionalInstructions) =>\n this.createRunHandle(input, invocation, additionalInstructions), invocation =>\n this.createRunHandle(undefined, invocation), invocation =>\n this.compactForRuntime(invocation), () => {\n this.compactor = this.createCompactor()\n })\n options.team?.team.attach(this, {\n ...(options.team.name === undefined ? {} : { name: options.team.name }),\n ...(options.team.description === undefined ? {} : { description: options.team.description }),\n ...(options.team.instructions === undefined ? {} : { instructions: options.team.instructions }),\n ...(options.team.role === undefined ? {} : { role: options.team.role }),\n ...(options.team.tools === undefined ? {} : { tools: options.team.tools }),\n })\n }\n\n /** Restore a JSON-round-tripped session snapshot with fresh runtime dependencies. */\n static fromSnapshot(\n definition: AgentDefinition,\n options: AgentResumeSessionOptions,\n ): AgentSession {\n const { snapshot, ...runtime } = options\n validateSessionSnapshot(snapshot, definition.id, definition.skillOptions.maxSkills)\n const session = new AgentSession(definition, {\n ...runtime,\n conversationId: snapshot.conversationId,\n history: History.fromSnapshot(snapshot.history, runtime.historyLimits),\n memory: AgentMemory.fromSnapshot(snapshot.memory, definition.memory),\n })\n session.pendingSkillActivations = captureResumedSkillActivations(snapshot.skills, session.skillCatalog)\n return session\n }\n\n /** Stable identity for persistence keys, URLs, logs, and GUI trace grouping. */\n get conversationId(): string { return this.currentConversationId }\n\n /** Mutable append-only history owned by this conversation. */\n get history(): History { return this.currentHistory }\n\n /** Durable task facts injected into every request outside compactable history. */\n get memory(): AgentMemory { return this.currentMemory }\n\n /** Refreshable skill catalog for host UIs and explicit user invocation surfaces. */\n get skills(): SkillCatalog | undefined { return this.skillCatalog }\n\n /** Whether a model/tool turn currently owns this session. */\n get isRunning(): boolean { return this.active }\n\n /** Capture one JSON-safe envelope that can be passed to `agent.resumeSession()`. */\n snapshot(): AgentSessionSnapshot {\n const activated = this.activationSnapshot()\n return Object.freeze({\n version: 1 as const,\n conversationId: this.currentConversationId,\n agentId: this.definition.id,\n history: this.currentHistory.snapshot(),\n memory: this.currentMemory.snapshot(),\n ...runtimeSessionConfiguration(this)?.memory === undefined ? {} : {\n memoryBindingId: runtimeSessionConfiguration(this)!.memory!.bindingId,\n },\n ...activated.length === 0 ? {} : {\n skills: Object.freeze({ activated }),\n },\n })\n }\n\n /** Start a fresh conversation without rebuilding provider/tool configuration. */\n reset(): void {\n if (this.active) throw new Error('cannot reset an agent session while a run is active')\n this.currentConversationId = newConversationId()\n this.currentHistory = new History(this.options.historyLimits)\n this.currentMemory = new AgentMemory(this.definition.memory.seed, this.definition.memory)\n this.pendingSkillActivations = Object.freeze([])\n this.skillCatalog?.clearActivations()\n this.compactor = this.createCompactor()\n }\n\n /** Create one explicit context checkpoint while the session is idle. */\n async compact(invocation: AgentInvocationOptions = {}): Promise<CompactionResult | null> {\n if (this.active) throw new Error('cannot compact an agent session while a run is active')\n this.active = true\n this.activeInvocation = invocation\n try {\n await this.prepareSkills(invocation.signal)\n return await this.compactor?.compactNow(invocation.signal) ?? null\n } finally {\n this.releaseRun()\n }\n }\n\n private async compactForRuntime(invocation: AgentInvocationOptions): Promise<{\n readonly result: CompactionResult | null\n readonly report: LegacyRunReport\n readonly failure?: unknown\n }> {\n if (this.active) throw new Error('cannot compact an agent session while a run is active')\n const ledger = this.createLedger()\n this.active = true\n this.activeInvocation = invocation\n if (this.compactor !== undefined) bindCompactionAccounting(this.compactor, ledger)\n if (this.skillCatalog !== undefined) bindSkillProviderLogger(this.skillCatalog, ledger.modelInvocation.logger)\n try { return await runRuntimeCompaction({\n ...(this.compactor === undefined ? {} : { compactor: this.compactor }),\n invocation,\n accounting: ledger,\n prepare: () => this.prepareSkills(invocation.signal, ledger),\n }) } finally { this.releaseRun() }\n }\n\n /**\n * Append attributed context without starting a turn.\n *\n * A2A quiet delivery uses this primitive. The returned history sequence is a\n * delivery receipt and lets wake-up schedulers coalesce messages safely.\n */\n inject(input: AgentInput): number {\n const message = userMessage(input)\n this.currentHistory.append({ kind: 'user', message })\n return this.currentHistory.entries().length\n }\n\n /** Resolve after the current run releases the session. */\n whenIdle(signal?: AbortSignal): Promise<void> {\n if (!this.active) return Promise.resolve()\n if (signal?.aborted) return Promise.reject(signal.reason)\n return new Promise<void>((resolve, reject) => {\n let settled = false\n const finish = (): void => {\n if (settled) return\n settled = true\n this.idleWaiters.delete(finish)\n signal?.removeEventListener('abort', abort)\n resolve()\n }\n const abort = (): void => {\n if (settled) return\n settled = true\n this.idleWaiters.delete(finish)\n reject(signal?.reason)\n }\n this.idleWaiters.add(finish)\n signal?.addEventListener('abort', abort, { once: true })\n if (!this.active) finish()\n })\n }\n\n /** Start an eager run and expose both public events and its canonical terminal report. */\n stream(input: AgentInput, invocation: AgentInvocationOptions = {}): AgentRunHandle {\n return this.createRunHandle(input, invocation)\n }\n\n /** Process context already appended with {@link inject} without duplicating it. */\n streamPending(invocation: AgentInvocationOptions = {}): AgentRunHandle {\n return this.createRunHandle(undefined, invocation)\n }\n\n /** Run one user turn and return the terminal response. */\n async run(input: AgentInput, invocation: AgentInvocationOptions = {}): Promise<AgentResponse> {\n const handle = this.stream(input, invocation)\n await consumeSessionEvents(handle, invocation.onEvent, this.runtimeLimits.observerTimeoutMs ?? 30_000)\n return await handle.result\n }\n\n /** Run one turn over already-injected context and return its terminal response. */\n async runPending(invocation: AgentInvocationOptions = {}): Promise<AgentResponse> {\n const handle = this.streamPending(invocation)\n await consumeSessionEvents(handle, invocation.onEvent, this.runtimeLimits.observerTimeoutMs ?? 30_000)\n return await handle.result\n }\n\n private createRunHandle(\n input: AgentInput | undefined,\n invocation: AgentInvocationOptions,\n additionalInstructions?: string,\n ): AgentRunHandle {\n if (this.active) throw new Error(`agent session '${this.definition.id}' is already running`)\n const firstTurnSeq = this.currentHistory.entries().length + 1\n const owned = new AbortController()\n let terminal = false\n const signal = invocation.signal === undefined\n ? owned.signal\n : AbortSignal.any([invocation.signal, owned.signal])\n const buffer = new RunEventBuffer<AgentRunEvent>(\n this.options.eventBufferLimits?.maxEvents,\n this.options.eventBufferLimits?.maxBytes,\n )\n const reportDeferred = deferred<RunReport>()\n const resultDeferred = deferred<AgentResponse>()\n const toolSourcesDeferred = deferred<readonly ToolSourceRunReference[]>()\n const ledger = this.createLedger()\n let toolSourceReferences: readonly ToolSourceRunReference[] = Object.freeze([])\n if (this.compactor !== undefined) bindCompactionAccounting(this.compactor, ledger)\n if (this.skillCatalog !== undefined) {\n bindSkillProviderLogger(this.skillCatalog, ledger.modelInvocation.logger)\n }\n this.active = true\n this.activeAdditionalInstructions = additionalInstructions\n this.activeInvocation = invocation\n const spanOperations = new Map<string, string>()\n const task = (async (): Promise<void> => {\n let failure: unknown\n let outcome: AgentRunOutcome | undefined\n let memoryState: Awaited<ReturnType<typeof loadRuntimeMemory>>['state'] | undefined\n try {\n const runtime = runtimeSessionConfiguration(this)\n if (runtime?.memory !== undefined) {\n const prepared = await loadRuntimeMemory(\n runtime.memory, this.currentConversationId, this.definition.memory, signal, ledger,\n )\n memoryState = prepared.state\n if (prepared.memory !== undefined) this.currentMemory = prepared.memory\n }\n if (runtime?.prepareTools !== undefined) {\n const logger = ledger.modelInvocation.logger\n if (logger === undefined) throw new Error('runtime tool source logger is unavailable')\n const generation = runtime.prepareTools(signal, logger, [...this.catalog?.names() ?? [], ...this.definition.nativeTools.map(tool => tool.name)])\n this.activeRuntimeCatalog = toolCatalog([], this.catalog, generation.tools)\n toolSourceReferences = generation.references\n }\n toolSourcesDeferred.resolve(toolSourceReferences)\n await this.prepareSkills(signal, ledger)\n if (input !== undefined) {\n const message = userMessage(input)\n if (this.definition.memory.autoCaptureObjective) {\n const operation = ledger.startOperation('memory', { data: { action: 'capture-objective' } })\n try {\n this.currentMemory.captureOriginalObjective(message)\n ledger.endOperation(operation, 'success')\n } catch (error) {\n ledger.endOperation(operation, 'error', { error })\n throw error\n }\n }\n this.currentHistory.append({ kind: 'user', message })\n }\n // Preflight before compaction can turn a required image into a summary.\n if (invocation.imagePolicy === 'strict' && this.history.messages().some(message => contentHasImage(message.content))) {\n const config = this.callConfig(invocation)\n const model = await this.options.registry.resolveModelInfo(config.provider, config.model, signal)\n if (model.inputModalities !== undefined && !model.inputModalities.includes('image')) {\n throw new ModelError(`model ${model.id} does not support required image input`, 'UNSUPPORTED_IMAGE_INPUT')\n }\n }\n // Same preflight for documents, for the same reason.\n if (invocation.documentPolicy === 'strict' && this.history.messages().some(message => contentHasDocument(message.content))) {\n const config = this.callConfig(invocation)\n const model = await this.options.registry.resolveModelInfo(config.provider, config.model, signal)\n if (model.inputModalities !== undefined && !model.inputModalities.includes('document')) {\n throw new ModelError(`model ${model.id} does not support required document input`, 'UNSUPPORTED_DOCUMENT_INPUT')\n }\n }\n for await (const event of this.runDefinition({ ...invocation, signal }, ledger)) {\n accountTraceEvent(ledger, spanOperations, event)\n if (event.type === 'agent-end') outcome = event.outcome\n buffer.push(event)\n }\n if (outcome === undefined) {\n throw new Error(`agent session '${this.definition.id}' ended without agent-end`)\n }\n if (signal.aborted) throw signal.reason ?? new Error('agent run was aborted')\n if (outcome.reason.kind === 'error' && outcome.reason.failure.code === 'USAGE_REQUIRED') {\n const error = new Error(outcome.reason.failure.message) as Error & { code: string }\n error.code = 'USAGE_REQUIRED'\n throw error\n }\n if (runtime?.memory !== undefined && memoryState !== undefined && memoryState.status !== 'disabled') {\n await commitRuntimeMemory(\n runtime.memory, this.currentConversationId, this.currentMemory.snapshot(),\n memoryState, signal, ledger,\n )\n }\n } catch (error: unknown) {\n failure = error\n toolSourcesDeferred.resolve(toolSourceReferences)\n }\n\n let report: RunReport\n try {\n const status: OperationStatus = signal.aborted || outcome?.reason.kind === 'aborted'\n ? 'aborted'\n : failure !== undefined || outcome?.reason.kind === 'error'\n ? 'error'\n : 'success'\n const ledgerReport = await ledger.finalize(status, outcome?.completed ?? false, failure)\n report = withTerminalDelivery(createRunTerminalRecord(ledgerReport), ledgerReport.delivery)\n reportDeferred.resolve(report)\n } catch (finalizeError: unknown) {\n reportDeferred.reject(finalizeError)\n resultDeferred.reject(finalizeError)\n buffer.fail(finalizeError)\n terminal = true\n this.releaseRun()\n return\n }\n if (terminal) return\n\n if (failure === undefined && ledger.terminalAuditFailure) {\n const error = new Error('audit observation checkpoint failed after run finalization') as Error & { code: string }\n error.code = 'OBSERVABILITY_AUDIT_UNAVAILABLE'\n failure = error\n }\n if (failure !== undefined) {\n const error = new AgentRunError(\n messageOf(failure),\n errorCodeOf(failure) ?? AGENT_ACCOUNTING_ERROR_CODES.RUN_FAILED,\n report,\n { cause: failure },\n )\n resultDeferred.reject(error)\n buffer.fail(error)\n } else {\n const terminal = outcome as AgentRunOutcome\n const historyEvent = [...this.currentHistory.entries()].reverse()\n .find(entry => entry.seq >= firstTurnSeq && entry.event.kind === 'assistant')\n ?.event\n const assistantMessage = historyEvent?.kind === 'assistant' ? historyEvent.message : undefined\n const response: AgentResponse = Object.freeze({\n text: terminal.text,\n outcome: terminal,\n report,\n ...assistantMessage === undefined ? {} : { message: assistantMessage },\n })\n resultDeferred.resolve(response)\n buffer.close()\n }\n terminal = true\n this.releaseRun()\n })()\n void task.catch(error => {\n if (terminal) return\n reportDeferred.reject(error)\n resultDeferred.reject(error)\n buffer.fail(error)\n terminal = true\n this.releaseRun()\n })\n void resultDeferred.promise.catch(() => undefined)\n void reportDeferred.promise.catch(() => undefined)\n let iterated = false\n return Object.freeze({\n runId: ledger.runId,\n traceId: ledger.traceId,\n toolSourceSnapshots: toolSourcesDeferred.promise,\n eventsSettled: task.then(() => undefined, () => undefined),\n result: resultDeferred.promise,\n report: reportDeferred.promise,\n seal: () => sealRuntimeRun({ ledger, buffer, report: reportDeferred, result: resultDeferred,\n toolSources: toolSourcesDeferred, currentToolSources: () => toolSourceReferences, isTerminal: () => terminal,\n markTerminal: () => { terminal = true }, abort: () => owned.abort(new Error('Agent run was sealed')),\n release: () => this.releaseRun() }),\n abort(_reason?: unknown): void {\n if (!terminal && !owned.signal.aborted) owned.abort(new Error('Agent run was aborted'))\n },\n [Symbol.asyncIterator](): AsyncIterator<AgentRunEvent> {\n if (iterated) return (async function* () { throw new Error('an agent run handle can only be iterated once') })()\n iterated = true\n return (async function* () {\n let exhausted = false\n try {\n while (true) {\n const item = await buffer.take()\n if (item.done) { exhausted = true; break }\n yield item.value\n }\n } finally {\n if (!exhausted) {\n owned.abort(new Error('agent event consumer stopped'))\n buffer.stop()\n await waitForSettlement(task, 30_000)\n }\n }\n })()\n },\n })\n }\n\n private releaseRun(): void {\n this.active = false\n this.activeAdditionalInstructions = undefined\n this.activeInvocation = undefined\n this.activeRuntimeCatalog = undefined\n if (this.skillCatalog !== undefined) bindSkillProviderLogger(this.skillCatalog, undefined)\n if (this.compactor !== undefined) bindCompactionAccounting(this.compactor, undefined)\n const waiters = [...this.idleWaiters]\n this.idleWaiters.clear()\n for (const resolve of waiters) resolve()\n }\n\n private createLedger() {\n const runtime = runtimeSessionConfiguration(this)\n return createSessionLedger({\n definition: this.definition,\n options: this.options,\n runtimeLimits: this.runtimeLimits,\n conversationId: this.currentConversationId,\n ...(runtime === undefined ? {} : { runtime }),\n })\n }\n\n private runDefinition(\n invocation: AgentInvocationOptions,\n accounting?: RunAccountingPort,\n ): AsyncIterable<AgentRunEvent> {\n const definition = this.definition\n const hooks = this.combinedHooks(accounting)\n const catalog = this.effectiveCatalog()\n const outputFormat = invocation.outputFormat ?? definition.outputFormat\n const common = {\n registry: this.options.registry,\n config: this.callConfig(invocation),\n history: this.history,\n ...catalog === undefined ? {} : { tools: catalog },\n ...definition.nativeTools.length === 0 ? {} : { nativeTools: definition.nativeTools },\n ...definition.toolChoice === undefined ? {} : { toolChoice: definition.toolChoice },\n ...invocation.imagePolicy === undefined ? {} : { imagePolicy: invocation.imagePolicy },\n ...invocation.documentPolicy === undefined ? {} : { documentPolicy: invocation.documentPolicy },\n ...outputFormat === undefined ? {} : { outputFormat },\n ...(invocation.validateOutput === undefined ? {} : { validateOutput: invocation.validateOutput }),\n system: this.systemInstructions(this.activeAdditionalInstructions),\n maxTurns: definition.maxTurns,\n bounds: {\n maxToolCalls: definition.maxToolCalls,\n ...this.runtimeLimits.maxParallelToolCalls === undefined\n ? {}\n : { maxParallel: this.runtimeLimits.maxParallelToolCalls },\n ...this.runtimeLimits.maxConsecutiveToolErrors === undefined\n ? {}\n : { maxConsecutiveToolErrors: this.runtimeLimits.maxConsecutiveToolErrors },\n ...this.runtimeLimits.repeatToolWarningAt === undefined\n ? {}\n : { repeatToolWarningAt: this.runtimeLimits.repeatToolWarningAt },\n ...this.runtimeLimits.repeatToolLimit === undefined\n ? {}\n : { repeatToolLimit: this.runtimeLimits.repeatToolLimit },\n ...this.runtimeLimits.toolCycleWarningAt === undefined\n ? {}\n : { toolCycleWarningAt: this.runtimeLimits.toolCycleWarningAt },\n ...this.runtimeLimits.toolCycleLimit === undefined\n ? {}\n : { toolCycleLimit: this.runtimeLimits.toolCycleLimit },\n ...this.runtimeLimits.onExhausted === undefined\n ? {}\n : { onExhausted: this.runtimeLimits.onExhausted },\n ...this.runtimeLimits.maxToolResultTokens === undefined\n ? {}\n : { maxToolResultTokens: this.runtimeLimits.maxToolResultTokens },\n ...this.runtimeLimits.toolResultOverflow === undefined\n ? {}\n : { toolResultOverflow: this.runtimeLimits.toolResultOverflow },\n ...this.runtimeLimits.maxToolCycleLength === undefined\n ? {}\n : { maxToolCycleLength: this.runtimeLimits.maxToolCycleLength },\n ...this.runtimeLimits.finalReportReserveTokens === undefined ? {} : {\n finalReportReserveTokens: this.runtimeLimits.finalReportReserveTokens,\n },\n ...this.runtimeLimits.maxTotalTokens === undefined\n ? {}\n : { maxTotalTokens: this.runtimeLimits.maxTotalTokens },\n ...this.runtimeLimits.maxToolResultBytes === undefined\n ? {}\n : { maxToolResultBytes: this.runtimeLimits.maxToolResultBytes },\n ...this.runtimeLimits.maxToolDurationMs === undefined\n ? {}\n : { maxToolDurationMs: this.runtimeLimits.maxToolDurationMs },\n ...this.runtimeLimits.toolTeardownTimeoutMs === undefined\n ? {}\n : { toolTeardownTimeoutMs: this.runtimeLimits.toolTeardownTimeoutMs },\n },\n commentary: definition.commentary,\n ...this.runtimeLimits.teardownTimeoutMs === undefined ? {} : { teardownTimeoutMs: this.runtimeLimits.teardownTimeoutMs },\n ...this.runtimeLimits.modelTimeoutMs === undefined ? {} : { modelTimeoutMs: this.runtimeLimits.modelTimeoutMs },\n ...this.runtimeLimits.maxModelRequestBytes === undefined ? {} : { maxModelRequestBytes: this.runtimeLimits.maxModelRequestBytes },\n ...this.runtimeLimits.maxModelResponseBytes === undefined ? {} : { maxModelResponseBytes: this.runtimeLimits.maxModelResponseBytes },\n ...this.runtimeLimits.maxModelStreamEvents === undefined ? {} : { maxModelStreamEvents: this.runtimeLimits.maxModelStreamEvents },\n ...this.runtimeLimits.hookTimeoutMs === undefined ? {} : { hookTimeoutMs: this.runtimeLimits.hookTimeoutMs },\n ...this.runtimeLimits.hookTeardownTimeoutMs === undefined ? {} : { hookTeardownTimeoutMs: this.runtimeLimits.hookTeardownTimeoutMs },\n ...this.options.approvals === undefined ? {} : { approvals: this.options.approvals },\n ...this.options.spillStore === undefined ? {} : { spillStore: this.options.spillStore },\n ...this.options.interceptors === undefined ? {} : { interceptors: this.options.interceptors },\n ...this.contextSections === undefined ? {} : { contextSections: this.contextSections },\n ...hooks === undefined ? {} : { hooks },\n ...invocation.signal === undefined ? {} : { signal: invocation.signal },\n ...accounting === undefined ? {} : { accounting },\n ...accounting?.modelInvocation.logger === undefined ? {} : { logger: accounting.modelInvocation.logger },\n trace: {\n ...this.options.trace,\n conversationId: this.currentConversationId,\n agentId: definition.id,\n agentName: definition.name,\n },\n }\n if (definition.mode === 'deep-human-in-loop') {\n return runAgent({\n ...common, mode: definition.mode, userInput: this.options.userInput as UserInputBroker,\n })\n }\n if (definition.mode === 'deep') {\n return runAgent({\n ...common, mode: definition.mode,\n ...this.options.userInput === undefined ? {} : { userInput: this.options.userInput },\n })\n }\n return runAgent({ ...common, mode: 'basic' })\n }\n\n private createCompactor(): ContextCompactor | undefined {\n const configured = this.options.compaction === false\n ? false\n : this.options.compaction === undefined\n ? this.definition.compaction\n : resolveCompactionConfig(this.options.compaction)\n if (configured === false) return undefined\n return new ContextCompactor({\n registry: this.options.registry,\n config: () => this.callConfig(this.activeInvocation),\n history: () => this.currentHistory,\n system: () => this.systemInstructions(this.activeAdditionalInstructions),\n pinnedMessages: () => renderRuntimeMemory(\n this.currentMemory, this.definition.memory.maxInjectedChars,\n ),\n tools: () => [\n ...this.effectiveCatalog()?.schemas() ?? [],\n ...this.definition.nativeTools,\n ],\n policy: configured,\n })\n }\n\n private effectiveCatalog(): ToolCatalog | undefined {\n return this.activeRuntimeCatalog ?? this.catalog\n }\n\n private combinedHooks(accounting?: RunAccountingPort): TurnHooks | undefined {\n const user = this.options.hooks\n if (this.compactor === undefined\n && user === undefined\n && this.currentMemory.items().length === 0) return undefined\n return {\n ...user,\n beforeStep: async context => {\n const generation = this.currentHistory.generation()\n if (this.compactor !== undefined) bindCompactionAccounting(this.compactor, accounting)\n await this.compactor?.beforeStep(context)\n if (accounting?.usageStop !== undefined) return { kind: 'proceed' as const }\n const refreshed = this.currentHistory.generation() === generation\n ? context\n : {\n ...context,\n messages: normalizeToolPairing(this.currentHistory.messages()),\n snapshot: this.currentHistory.snapshot(),\n }\n const memory = renderRuntimeMemory(\n this.currentMemory, this.definition.memory.maxInjectedChars, accounting,\n )\n const current = memory.length === 0\n ? refreshed\n : { ...refreshed, messages: Object.freeze([...memory, ...refreshed.messages]) }\n const decision = await user?.beforeStep?.(current) ?? { kind: 'proceed' as const }\n if (decision.kind === 'reject') return decision\n const prepend = [...memory, ...decision.prepend ?? []]\n return prepend.length === 0 ? decision : { kind: 'proceed' as const, prepend }\n },\n onRequestError: async context => {\n if (this.compactor !== undefined) bindCompactionAccounting(this.compactor, accounting)\n const recovery = await this.compactor?.onRequestError(context)\n if (accounting?.usageStop !== undefined) return 'fail'\n if (recovery === 'retry') return 'retry'\n return await user?.onRequestError?.(context) ?? 'fail'\n },\n }\n }\n\n private callConfig(invocation?: AgentInvocationOptions) {\n return sessionCallConfig(this.definition, runtimeSessionConfiguration(this), invocation)\n }\n\n private systemInstructions(additionalInstructions?: string): string {\n const base = this.skillCatalog === undefined\n ? this.definition.instructions\n : renderSkillCatalog(\n this.definition.instructions,\n this.skillCatalog.summaries(),\n this.definition.skillOptions,\n )\n const team = this.options.team\n const composed = team === undefined\n ? base\n : `${base}\\n\\n${team.team.instructionsFor(team.name ?? this.definition.id)}`\n return appendRunInstructions(composed, additionalInstructions)\n }\n\n private skillLookup(signal?: AbortSignal): SkillLookupOptions {\n return {\n ...(this.options.skillCwd === undefined ? {} : { cwd: this.options.skillCwd }),\n ...(signal === undefined ? {} : { signal }),\n }\n }\n\n private activationSnapshot(): readonly AgentSessionActivatedSkillSnapshot[] {\n const activated = new Map<string, AgentSessionActivatedSkillSnapshot>()\n for (const entry of this.pendingSkillActivations) activated.set(entry.id, entry)\n for (const reference of this.skillCatalog?.activatedSkillReferences() ?? []) {\n activated.set(reference.id, reference)\n }\n for (const summary of this.skillCatalog?.activatedSummaries() ?? []) {\n if (activated.has(summary.id)) continue\n activated.set(summary.id, Object.freeze({\n id: summary.id, provider: summary.provider, source: summary.source,\n ...summary.resourceBase === undefined ? {} : {\n resourceBase: Object.freeze({ ...summary.resourceBase }),\n },\n }))\n }\n return Object.freeze([...activated.values()].sort((left, right) => left.id.localeCompare(right.id)))\n }\n\n private async prepareSkills(signal?: AbortSignal, accounting?: RunAccountingPort): Promise<void> {\n await prepareSkills(\n this.definition, this.skillCatalog, this.pendingSkillActivations,\n signal => this.skillLookup(signal),\n () => { this.pendingSkillActivations = Object.freeze([]) }, signal, accounting,\n )\n }\n}\n\nexport { configureRuntimeSessionModel, streamRuntimeSession } from './session/runtime-binding.ts'\nexport type {\n AgentInput, AgentRuntimeLimits, AgentSessionOptions, AgentTeamMemberOptions,\n AgentSessionSnapshot, AgentSessionActivatedSkillSnapshot, AgentResumeSessionOptions,\n AgentInvocationOptions, AgentResponse, AgentRunHandle,\n} from './session/types.ts'\n"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- import{serializedBytes as e}from"./config.js";function t(e){if(typeof e!=`object`||!e)throw TypeError(`history snapshot must be an object`);let t=e;if(t.version!==1)throw TypeError(`unsupported history snapshot version`);if(!Array.isArray(t.entries))throw TypeError(`history snapshot entries must be an array`);return t.entries}function n(t,n){let r=0;for(let i of t){let t=e(i);if(t>n.maxEntryBytes)throw RangeError(`history snapshot entry exceeds the ${n.maxEntryBytes}-byte limit`);if(r+=t,r>n.maxBytes)throw RangeError(`history snapshot exceeds the ${n.maxBytes}-byte limit`)}return r}function r(){return{messageIds:new Set,toolCallIds:new Set,nativeToolIds:new Set,toolCallEventIds:new Set,compactions:new Map,visibleMessageSeqs:new Set}}function i(e){return{messageIds:new Set(e.messageIds),toolCallIds:new Set(e.toolCallIds),nativeToolIds:new Set(e.nativeToolIds),toolCallEventIds:new Set(e.toolCallEventIds),compactions:new Map([...e.compactions].map(([e,t])=>[e,{...t}])),visibleMessageSeqs:new Set(e.visibleMessageSeqs)}}function a(e){let t=r();for(let n=0;n<e.length;n++){let r=e[n];if(r===void 0||r.seq!==n+1||typeof r.event!=`object`||r.event===null||!(`kind`in r.event))throw TypeError(`invalid history entry at index ${n}`);if(![`user`,`assistant`,`tool-call`,`tool-result`,`compaction-start`,`compaction-prune`,`compaction-summary`,`compaction-end`].includes(String(r.event.kind)))throw TypeError(`unknown history event kind at index ${n}`);o(r.event,r.seq,t),T(r.surfaceOp,r.seq,t.visibleMessageSeqs,y(r.event)),v(r,t.visibleMessageSeqs)}return t}function o(e,t,n){let r=`history entry ${t} ${e.kind}`;switch(e.kind){case`user`:s(e.message,`${r}.message`,n);return;case`assistant`:if(s(e.message,`${r}.message`,n),e.interrupted!==void 0&&e.interrupted!==!0)throw TypeError(`${r}.interrupted must be true when present`);e.usage!==void 0&&g(e.usage,`${r}.usage`);return;case`tool-call`:{let t=x(e.callId,`${r}.callId`);if(n.toolCallEventIds.has(t))throw TypeError(`duplicate tool-call event id '${t}'`);if(n.toolCallEventIds.add(t),x(e.name,`${r}.name`),typeof e.rawArguments!=`string`)throw TypeError(`${r}.rawArguments must be a string`);return}case`tool-result`:{let t=x(e.callId,`${r}.callId`);s(e.message,`${r}.message`,n),p(e.message,t,`${r}.message`),m(e.result,`${r}.result`);return}case`compaction-start`:{let t=x(e.compactionId,`${r}.compactionId`);if(n.compactions.has(t))throw TypeError(`duplicate compaction id '${t}'`);if(![`pressure`,`context-overflow`,`manual`].includes(e.trigger))throw TypeError(`${r}.trigger is invalid`);w(e.at,`${r}.at`),n.compactions.set(t,{summary:!1,end:!1});return}case`compaction-prune`:if(x(e.callId,`${r}.callId`),S(e.originalSeq,`${r}.originalSeq`),e.originalSeq>=t)throw TypeError(`${r}.originalSeq must reference an earlier entry`);if(C(e.charsBefore,`${r}.charsBefore`),C(e.charsAfter,`${r}.charsAfter`),e.charsAfter>e.charsBefore)throw TypeError(`${r}.charsAfter cannot exceed charsBefore`);return;case`compaction-summary`:{let i=x(e.compactionId,`${r}.compactionId`),a=n.compactions.get(i);if(a===void 0)throw TypeError(`${r} has no matching compaction-start`);if(a.summary)throw TypeError(`duplicate compaction summary for '${i}'`);if(a.end)throw TypeError(`${r} appears after compaction-end`);x(e.summary,`${r}.summary`),_(e.shadowedSeqs,t,`${r}.shadowedSeqs`);for(let t of e.shadowedSeqs)if(!n.visibleMessageSeqs.has(t))throw TypeError(`${r}.shadowedSeqs references non-visible message ${t}`);if(C(e.estimatedTokensBefore,`${r}.estimatedTokensBefore`),C(e.estimatedTokensAfter,`${r}.estimatedTokensAfter`),e.estimatedTokensAfter>e.estimatedTokensBefore)throw TypeError(`${r}.estimatedTokensAfter cannot exceed estimatedTokensBefore`);x(e.provider,`${r}.provider`),x(e.model,`${r}.model`),e.usage!==void 0&&g(e.usage,`${r}.usage`),a.summary=!0;return}case`compaction-end`:{let t=x(e.compactionId,`${r}.compactionId`),i=n.compactions.get(t);if(i===void 0)throw TypeError(`${r} has no matching compaction-start`);if(i.end)throw TypeError(`duplicate compaction end for '${t}'`);if(![`completed`,`failed`].includes(e.status))throw TypeError(`${r}.status is invalid`);if(w(e.at,`${r}.at`),e.thresholdTokens!==void 0&&S(e.thresholdTokens,`${r}.thresholdTokens`),e.estimatedNonCompactableTokens!==void 0&&C(e.estimatedNonCompactableTokens,`${r}.estimatedNonCompactableTokens`),e.backoffReason!==void 0&&![`low-savings`,`unreachable-threshold`].includes(e.backoffReason))throw TypeError(`${r}.backoffReason is invalid`);if(e.cooldownSteps!==void 0&&S(e.cooldownSteps,`${r}.cooldownSteps`),e.backoffReason===void 0!=(e.cooldownSteps===void 0))throw TypeError(`${r}.backoffReason and cooldownSteps must be set together`);if(e.backoffReason!==void 0&&e.thresholdTokens===void 0)throw TypeError(`${r}.backoffReason requires thresholdTokens`);if(e.status===`completed`){if(!i.summary)throw TypeError(`${r} completed without a compaction-summary`);if(e.error!==void 0)throw TypeError(`${r}.error is only valid for failed compaction`)}else if(x(e.error,`${r}.error`),e.backoffReason!==void 0||e.thresholdTokens!==void 0||e.estimatedNonCompactableTokens!==void 0)throw TypeError(`${r} failed compaction cannot carry completed metrics`);i.end=!0;return}}}function s(e,t,n){if(!b(e))throw TypeError(`${t} must be an object`);let r=x(e.id,`${t}.id`);if(n.messageIds.has(r))throw TypeError(`duplicate message id '${r}'`);if(n.messageIds.add(r),![`system`,`user`,`assistant`].includes(String(e.role)))throw TypeError(`${t}.role is invalid`);if(!Array.isArray(e.content))throw TypeError(`${t}.content must be an array`);for(let r=0;r<e.content.length;r++)l(e.content[r],`${t}.content[${r}]`,n,new Set,0);c(e.source,`${t}.source`)}function c(e,t){if(!b(e))throw TypeError(`${t} must be an object`);switch(x(e.kind,`${t}.kind`)){case`user`:return;case`app`:x(e.producer,`${t}.producer`);return;case`model`:x(e.provider,`${t}.provider`),x(e.model,`${t}.model`);return;case`tool`:x(e.callId,`${t}.callId`);return;default:return}}function l(e,t,n,r,i){if(i>64)throw TypeError(`${t} exceeds the maximum content depth`);if(!b(e))throw TypeError(`${t} must be an object`);if(r.has(e))throw TypeError(`${t} must not contain a cycle`);let a=new Set(r).add(e);switch(x(e.type,`${t}.type`)){case`text`:if(typeof e.text!=`string`)throw TypeError(`${t}.text must be a string`);if(e.phase!==void 0&&![`commentary`,`final-answer`].includes(String(e.phase)))throw TypeError(`${t}.phase is invalid`);if(e.annotations!==void 0){if(!Array.isArray(e.annotations))throw TypeError(`${t}.annotations must be an array`);for(let n=0;n<e.annotations.length;n++)d(e.annotations[n],`${t}.annotations[${n}]`)}return;case`reasoning`:if(typeof e.text!=`string`)throw TypeError(`${t}.text must be a string`);return;case`image`:f(e.source,`${t}.source`);return;case`native-tool-call`:{let r=x(e.id,`${t}.id`);if(n.nativeToolIds.has(r))throw TypeError(`duplicate native tool id '${r}'`);n.nativeToolIds.add(r)}if(x(e.name,`${t}.name`),e.status!==void 0&&typeof e.status!=`string`)throw TypeError(`${t}.status must be a string`);u(e.content,`${t}.content`,n,a,i+1);return;case`tool-call`:{let r=x(e.id,`${t}.id`);if(n.toolCallIds.has(r))throw TypeError(`duplicate tool call id '${r}'`);if(n.toolCallIds.add(r),x(e.name,`${t}.name`),typeof e.arguments!=`string`)throw TypeError(`${t}.arguments must be a string`);return}case`tool-result`:if(x(e.toolCallId,`${t}.toolCallId`),e.isError!==void 0&&typeof e.isError!=`boolean`)throw TypeError(`${t}.isError must be a boolean`);u(e.content,`${t}.content`,n,a,i+1);return;default:return}}function u(e,t,n,r,i){if(!Array.isArray(e))throw TypeError(`${t} must be an array`);for(let a=0;a<e.length;a++)l(e[a],`${t}[${a}]`,n,r,i)}function d(e,t){if(!b(e))throw TypeError(`${t} must be an object`);if(x(e.type,`${t}.type`)===`url-citation`){if(x(e.url,`${t}.url`),e.title!==void 0&&typeof e.title!=`string`)throw TypeError(`${t}.title must be a string`);for(let n of[`startIndex`,`endIndex`])e[n]!==void 0&&C(e[n],`${t}.${n}`)}}function f(e,t){if(!b(e))throw TypeError(`${t} must be an object`);let n=x(e.kind,`${t}.kind`);if(n===`base64`){if(![`image/jpeg`,`image/png`,`image/gif`,`image/webp`].includes(String(e.mediaType)))throw TypeError(`${t}.mediaType is invalid`);if(typeof e.data!=`string`)throw TypeError(`${t}.data must be a string`)}else if(n===`url`)x(e.url,`${t}.url`);else if(n===`file`)x(e.fileId,`${t}.fileId`);else throw TypeError(`${t}.kind is invalid`)}function p(e,t,n){if(e.source.kind!==`tool`||e.source.callId!==t)throw TypeError(`${n}.source.callId must match its tool-result event`);if(e.role!==`user`||e.content.length!==1||e.content[0]?.type!==`tool-result`||e.content[0].toolCallId!==t)throw TypeError(`${n} must carry exactly one matching tool-result block`)}function m(e,t){if(!b(e)||typeof e.isError!=`boolean`)throw TypeError(`${t}.isError must be a boolean`);if(h(e.content,`${t}.content`),e.additionalContext!==void 0&&h(e.additionalContext,`${t}.additionalContext`),e.meta!==void 0&&!b(e.meta))throw TypeError(`${t}.meta must be an object`);if(e.isError){if(!b(e.error))throw TypeError(`${t}.error must be an object`);if(x(e.error.message,`${t}.error.message`),x(e.error.code,`${t}.error.code`),e.concludesTurn!==void 0)throw TypeError(`${t}.concludesTurn is invalid for a failure`)}else if(e.concludesTurn!==void 0&&e.concludesTurn!==!0)throw TypeError(`${t}.concludesTurn must be true when present`)}function h(e,t){u(e,t,{messageIds:new Set,toolCallIds:new Set,nativeToolIds:new Set,toolCallEventIds:new Set,compactions:new Map,visibleMessageSeqs:new Set},new Set,0)}function g(e,t){if(!b(e))throw TypeError(`${t} must be an object`);for(let n of[`inputTokens`,`outputTokens`,`totalTokens`,`cacheReadTokens`,`cacheWriteTokens`,`reasoningTokens`]){let r=e[n];(n===`inputTokens`||n===`outputTokens`||r!==void 0)&&C(r,`${t}.${n}`)}}function _(e,t,n){if(!Array.isArray(e)||e.length===0||new Set(e).size!==e.length||e.some(e=>!Number.isInteger(e)||e<1||e>=t))throw TypeError(`${n} must contain unique earlier sequence numbers`)}function v(e,t){if(e.surfaceOp!==`append`){let n=e.surfaceOp,r=n.targets===void 0?[...t].filter(e=>e>=n.from&&e<=n.to):[...n.targets];for(let e of r)t.delete(e)}y(e.event)&&t.add(e.seq)}function y(e){return e.kind===`user`||e.kind===`assistant`||e.kind===`tool-result`}function b(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function x(e,t){if(typeof e!=`string`||e.trim().length===0)throw TypeError(`${t} must be a non-empty string`);return e}function S(e,t){if(!Number.isSafeInteger(e)||Number(e)<1)throw TypeError(`${t} must be a positive integer`)}function C(e,t){if(!Number.isSafeInteger(e)||Number(e)<0)throw TypeError(`${t} must be a non-negative integer`)}function w(e,t){let n=x(e,t),r=new Date(n);if(Number.isNaN(r.valueOf())||r.toISOString()!==n)throw TypeError(`${t} must be an ISO timestamp`)}function T(e,t,n,r=!0){if(e!==`append`){if(typeof e!=`object`||e.op!==`replace`||!Number.isInteger(e.from)||!Number.isInteger(e.to)||e.from<1||e.to<e.from||e.to>=t)throw TypeError(`history replace span must reference an earlier inclusive sequence range`);if(e.targets!==void 0){if(e.targets.length===0||new Set(e.targets).size!==e.targets.length||e.targets.some(e=>!Number.isInteger(e)||e<1||e>=t))throw TypeError(`history replace targets must be unique earlier sequence numbers`);if(e.targets.some(t=>t<e.from||t>e.to))throw TypeError(`history replace targets must stay within its inclusive sequence range`)}if(n!==void 0){if(!r)throw TypeError(`history replacement entry must carry a message`);let t=e.targets??[...n].filter(t=>t>=e.from&&t<=e.to);if(t.length===0||t.some(e=>!n.has(e)))throw TypeError(`history replace targets must reference current visible messages`)}}}export{n as assertEntriesWithinLimits,i as cloneValidationState,r as emptyValidationState,b as isRecord,y as messageOfHistoryEvent,x as nonEmptyString,C as nonNegativeInteger,S as positiveInteger,t as snapshotEntries,v as updateVisibleMessages,u as validateContentArray,l as validateContentBlock,h as validateDetachedContent,a as validateEntries,o as validateHistoryEvent,f as validateImageSource,w as validateIsoTimestamp,s as validateMessage,c as validateMessageSource,_ as validateSeqTargets,T as validateSurfaceOp,d as validateTextAnnotation,m as validateToolExecutionResult,p as validateToolResultMessage,g as validateUsage};
1
+ import{serializedBytes as e}from"./config.js";function t(e){if(typeof e!=`object`||!e)throw TypeError(`history snapshot must be an object`);let t=e;if(t.version!==1)throw TypeError(`unsupported history snapshot version`);if(!Array.isArray(t.entries))throw TypeError(`history snapshot entries must be an array`);return t.entries}function n(t,n){let r=0;for(let i of t){let t=e(i);if(t>n.maxEntryBytes)throw RangeError(`history snapshot entry exceeds the ${n.maxEntryBytes}-byte limit`);if(r+=t,r>n.maxBytes)throw RangeError(`history snapshot exceeds the ${n.maxBytes}-byte limit`)}return r}function r(){return{messageIds:new Set,toolCallIds:new Set,nativeToolIds:new Set,toolCallEventIds:new Set,compactions:new Map,visibleMessageSeqs:new Set}}function i(e){return{messageIds:new Set(e.messageIds),toolCallIds:new Set(e.toolCallIds),nativeToolIds:new Set(e.nativeToolIds),toolCallEventIds:new Set(e.toolCallEventIds),compactions:new Map([...e.compactions].map(([e,t])=>[e,{...t}])),visibleMessageSeqs:new Set(e.visibleMessageSeqs)}}function a(e){let t=r();for(let n=0;n<e.length;n++){let r=e[n];if(r===void 0||r.seq!==n+1||typeof r.event!=`object`||r.event===null||!(`kind`in r.event))throw TypeError(`invalid history entry at index ${n}`);if(![`user`,`assistant`,`tool-call`,`tool-result`,`compaction-start`,`compaction-prune`,`compaction-summary`,`compaction-end`].includes(String(r.event.kind)))throw TypeError(`unknown history event kind at index ${n}`);o(r.event,r.seq,t),E(r.surfaceOp,r.seq,t.visibleMessageSeqs,b(r.event)),y(r,t.visibleMessageSeqs)}return t}function o(e,t,n){let r=`history entry ${t} ${e.kind}`;switch(e.kind){case`user`:s(e.message,`${r}.message`,n);return;case`assistant`:if(s(e.message,`${r}.message`,n),e.interrupted!==void 0&&e.interrupted!==!0)throw TypeError(`${r}.interrupted must be true when present`);e.usage!==void 0&&_(e.usage,`${r}.usage`);return;case`tool-call`:{let t=S(e.callId,`${r}.callId`);if(n.toolCallEventIds.has(t))throw TypeError(`duplicate tool-call event id '${t}'`);if(n.toolCallEventIds.add(t),S(e.name,`${r}.name`),typeof e.rawArguments!=`string`)throw TypeError(`${r}.rawArguments must be a string`);return}case`tool-result`:{let t=S(e.callId,`${r}.callId`);s(e.message,`${r}.message`,n),m(e.message,t,`${r}.message`),h(e.result,`${r}.result`);return}case`compaction-start`:{let t=S(e.compactionId,`${r}.compactionId`);if(n.compactions.has(t))throw TypeError(`duplicate compaction id '${t}'`);if(![`pressure`,`context-overflow`,`manual`].includes(e.trigger))throw TypeError(`${r}.trigger is invalid`);T(e.at,`${r}.at`),n.compactions.set(t,{summary:!1,end:!1});return}case`compaction-prune`:if(S(e.callId,`${r}.callId`),C(e.originalSeq,`${r}.originalSeq`),e.originalSeq>=t)throw TypeError(`${r}.originalSeq must reference an earlier entry`);if(w(e.charsBefore,`${r}.charsBefore`),w(e.charsAfter,`${r}.charsAfter`),e.charsAfter>e.charsBefore)throw TypeError(`${r}.charsAfter cannot exceed charsBefore`);return;case`compaction-summary`:{let i=S(e.compactionId,`${r}.compactionId`),a=n.compactions.get(i);if(a===void 0)throw TypeError(`${r} has no matching compaction-start`);if(a.summary)throw TypeError(`duplicate compaction summary for '${i}'`);if(a.end)throw TypeError(`${r} appears after compaction-end`);S(e.summary,`${r}.summary`),v(e.shadowedSeqs,t,`${r}.shadowedSeqs`);for(let t of e.shadowedSeqs)if(!n.visibleMessageSeqs.has(t))throw TypeError(`${r}.shadowedSeqs references non-visible message ${t}`);if(w(e.estimatedTokensBefore,`${r}.estimatedTokensBefore`),w(e.estimatedTokensAfter,`${r}.estimatedTokensAfter`),e.estimatedTokensAfter>e.estimatedTokensBefore)throw TypeError(`${r}.estimatedTokensAfter cannot exceed estimatedTokensBefore`);S(e.provider,`${r}.provider`),S(e.model,`${r}.model`),e.usage!==void 0&&_(e.usage,`${r}.usage`),a.summary=!0;return}case`compaction-end`:{let t=S(e.compactionId,`${r}.compactionId`),i=n.compactions.get(t);if(i===void 0)throw TypeError(`${r} has no matching compaction-start`);if(i.end)throw TypeError(`duplicate compaction end for '${t}'`);if(![`completed`,`failed`].includes(e.status))throw TypeError(`${r}.status is invalid`);if(T(e.at,`${r}.at`),e.thresholdTokens!==void 0&&C(e.thresholdTokens,`${r}.thresholdTokens`),e.estimatedNonCompactableTokens!==void 0&&w(e.estimatedNonCompactableTokens,`${r}.estimatedNonCompactableTokens`),e.backoffReason!==void 0&&![`low-savings`,`unreachable-threshold`].includes(e.backoffReason))throw TypeError(`${r}.backoffReason is invalid`);if(e.cooldownSteps!==void 0&&C(e.cooldownSteps,`${r}.cooldownSteps`),e.backoffReason===void 0!=(e.cooldownSteps===void 0))throw TypeError(`${r}.backoffReason and cooldownSteps must be set together`);if(e.backoffReason!==void 0&&e.thresholdTokens===void 0)throw TypeError(`${r}.backoffReason requires thresholdTokens`);if(e.status===`completed`){if(!i.summary)throw TypeError(`${r} completed without a compaction-summary`);if(e.error!==void 0)throw TypeError(`${r}.error is only valid for failed compaction`)}else if(S(e.error,`${r}.error`),e.backoffReason!==void 0||e.thresholdTokens!==void 0||e.estimatedNonCompactableTokens!==void 0)throw TypeError(`${r} failed compaction cannot carry completed metrics`);i.end=!0;return}}}function s(e,t,n){if(!x(e))throw TypeError(`${t} must be an object`);let r=S(e.id,`${t}.id`);if(n.messageIds.has(r))throw TypeError(`duplicate message id '${r}'`);if(n.messageIds.add(r),![`system`,`user`,`assistant`].includes(String(e.role)))throw TypeError(`${t}.role is invalid`);if(!Array.isArray(e.content))throw TypeError(`${t}.content must be an array`);for(let r=0;r<e.content.length;r++)l(e.content[r],`${t}.content[${r}]`,n,new Set,0);c(e.source,`${t}.source`)}function c(e,t){if(!x(e))throw TypeError(`${t} must be an object`);switch(S(e.kind,`${t}.kind`)){case`user`:return;case`app`:S(e.producer,`${t}.producer`);return;case`model`:S(e.provider,`${t}.provider`),S(e.model,`${t}.model`);return;case`tool`:S(e.callId,`${t}.callId`);return;default:return}}function l(e,t,n,r,i){if(i>64)throw TypeError(`${t} exceeds the maximum content depth`);if(!x(e))throw TypeError(`${t} must be an object`);if(r.has(e))throw TypeError(`${t} must not contain a cycle`);let a=new Set(r).add(e);switch(S(e.type,`${t}.type`)){case`text`:if(typeof e.text!=`string`)throw TypeError(`${t}.text must be a string`);if(e.phase!==void 0&&![`commentary`,`final-answer`].includes(String(e.phase)))throw TypeError(`${t}.phase is invalid`);if(e.annotations!==void 0){if(!Array.isArray(e.annotations))throw TypeError(`${t}.annotations must be an array`);for(let n=0;n<e.annotations.length;n++)d(e.annotations[n],`${t}.annotations[${n}]`)}return;case`reasoning`:if(typeof e.text!=`string`)throw TypeError(`${t}.text must be a string`);return;case`image`:f(e.source,`${t}.source`);return;case`document`:p(e.source,`${t}.source`);for(let n of[`filename`,`title`,`context`])if(e[n]!==void 0&&typeof e[n]!=`string`)throw TypeError(`${t}.${n} must be a string`);if(e.citations!==void 0&&typeof e.citations!=`boolean`)throw TypeError(`${t}.citations must be a boolean`);if(e.pages!==void 0&&(!Number.isSafeInteger(e.pages)||e.pages<=0))throw TypeError(`${t}.pages must be a positive integer`);return;case`native-tool-call`:{let r=S(e.id,`${t}.id`);if(n.nativeToolIds.has(r))throw TypeError(`duplicate native tool id '${r}'`);n.nativeToolIds.add(r)}if(S(e.name,`${t}.name`),e.status!==void 0&&typeof e.status!=`string`)throw TypeError(`${t}.status must be a string`);u(e.content,`${t}.content`,n,a,i+1);return;case`tool-call`:{let r=S(e.id,`${t}.id`);if(n.toolCallIds.has(r))throw TypeError(`duplicate tool call id '${r}'`);if(n.toolCallIds.add(r),S(e.name,`${t}.name`),typeof e.arguments!=`string`)throw TypeError(`${t}.arguments must be a string`);return}case`tool-result`:if(S(e.toolCallId,`${t}.toolCallId`),e.isError!==void 0&&typeof e.isError!=`boolean`)throw TypeError(`${t}.isError must be a boolean`);u(e.content,`${t}.content`,n,a,i+1);return;default:return}}function u(e,t,n,r,i){if(!Array.isArray(e))throw TypeError(`${t} must be an array`);for(let a=0;a<e.length;a++)l(e[a],`${t}[${a}]`,n,r,i)}function d(e,t){if(!x(e))throw TypeError(`${t} must be an object`);if(S(e.type,`${t}.type`)===`url-citation`){if(S(e.url,`${t}.url`),e.title!==void 0&&typeof e.title!=`string`)throw TypeError(`${t}.title must be a string`);for(let n of[`startIndex`,`endIndex`])e[n]!==void 0&&w(e[n],`${t}.${n}`)}}function f(e,t){if(!x(e))throw TypeError(`${t} must be an object`);let n=S(e.kind,`${t}.kind`);if(n===`base64`){if(![`image/jpeg`,`image/png`,`image/gif`,`image/webp`].includes(String(e.mediaType)))throw TypeError(`${t}.mediaType is invalid`);if(typeof e.data!=`string`)throw TypeError(`${t}.data must be a string`)}else if(n===`url`)S(e.url,`${t}.url`);else if(n===`file`)S(e.fileId,`${t}.fileId`);else throw TypeError(`${t}.kind is invalid`)}function p(e,t){if(!x(e))throw TypeError(`${t} must be an object`);let n=S(e.kind,`${t}.kind`);if(n===`base64`){if(String(e.mediaType)!==`application/pdf`)throw TypeError(`${t}.mediaType is invalid`);if(typeof e.data!=`string`)throw TypeError(`${t}.data must be a string`)}else if(n===`url`)S(e.url,`${t}.url`);else if(n===`file`)S(e.fileId,`${t}.fileId`);else throw TypeError(`${t}.kind is invalid`)}function m(e,t,n){if(e.source.kind!==`tool`||e.source.callId!==t)throw TypeError(`${n}.source.callId must match its tool-result event`);if(e.role!==`user`||e.content.length!==1||e.content[0]?.type!==`tool-result`||e.content[0].toolCallId!==t)throw TypeError(`${n} must carry exactly one matching tool-result block`)}function h(e,t){if(!x(e)||typeof e.isError!=`boolean`)throw TypeError(`${t}.isError must be a boolean`);if(g(e.content,`${t}.content`),e.additionalContext!==void 0&&g(e.additionalContext,`${t}.additionalContext`),e.meta!==void 0&&!x(e.meta))throw TypeError(`${t}.meta must be an object`);if(e.isError){if(!x(e.error))throw TypeError(`${t}.error must be an object`);if(S(e.error.message,`${t}.error.message`),S(e.error.code,`${t}.error.code`),e.concludesTurn!==void 0)throw TypeError(`${t}.concludesTurn is invalid for a failure`)}else if(e.concludesTurn!==void 0&&e.concludesTurn!==!0)throw TypeError(`${t}.concludesTurn must be true when present`)}function g(e,t){u(e,t,{messageIds:new Set,toolCallIds:new Set,nativeToolIds:new Set,toolCallEventIds:new Set,compactions:new Map,visibleMessageSeqs:new Set},new Set,0)}function _(e,t){if(!x(e))throw TypeError(`${t} must be an object`);for(let n of[`inputTokens`,`outputTokens`,`totalTokens`,`cacheReadTokens`,`cacheWriteTokens`,`reasoningTokens`]){let r=e[n];(n===`inputTokens`||n===`outputTokens`||r!==void 0)&&w(r,`${t}.${n}`)}}function v(e,t,n){if(!Array.isArray(e)||e.length===0||new Set(e).size!==e.length||e.some(e=>!Number.isInteger(e)||e<1||e>=t))throw TypeError(`${n} must contain unique earlier sequence numbers`)}function y(e,t){if(e.surfaceOp!==`append`){let n=e.surfaceOp,r=n.targets===void 0?[...t].filter(e=>e>=n.from&&e<=n.to):[...n.targets];for(let e of r)t.delete(e)}b(e.event)&&t.add(e.seq)}function b(e){return e.kind===`user`||e.kind===`assistant`||e.kind===`tool-result`}function x(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function S(e,t){if(typeof e!=`string`||e.trim().length===0)throw TypeError(`${t} must be a non-empty string`);return e}function C(e,t){if(!Number.isSafeInteger(e)||Number(e)<1)throw TypeError(`${t} must be a positive integer`)}function w(e,t){if(!Number.isSafeInteger(e)||Number(e)<0)throw TypeError(`${t} must be a non-negative integer`)}function T(e,t){let n=S(e,t),r=new Date(n);if(Number.isNaN(r.valueOf())||r.toISOString()!==n)throw TypeError(`${t} must be an ISO timestamp`)}function E(e,t,n,r=!0){if(e!==`append`){if(typeof e!=`object`||e.op!==`replace`||!Number.isInteger(e.from)||!Number.isInteger(e.to)||e.from<1||e.to<e.from||e.to>=t)throw TypeError(`history replace span must reference an earlier inclusive sequence range`);if(e.targets!==void 0){if(e.targets.length===0||new Set(e.targets).size!==e.targets.length||e.targets.some(e=>!Number.isInteger(e)||e<1||e>=t))throw TypeError(`history replace targets must be unique earlier sequence numbers`);if(e.targets.some(t=>t<e.from||t>e.to))throw TypeError(`history replace targets must stay within its inclusive sequence range`)}if(n!==void 0){if(!r)throw TypeError(`history replacement entry must carry a message`);let t=e.targets??[...n].filter(t=>t>=e.from&&t<=e.to);if(t.length===0||t.some(e=>!n.has(e)))throw TypeError(`history replace targets must reference current visible messages`)}}}export{n as assertEntriesWithinLimits,i as cloneValidationState,r as emptyValidationState,x as isRecord,b as messageOfHistoryEvent,S as nonEmptyString,w as nonNegativeInteger,C as positiveInteger,t as snapshotEntries,y as updateVisibleMessages,u as validateContentArray,l as validateContentBlock,g as validateDetachedContent,p as validateDocumentSource,a as validateEntries,o as validateHistoryEvent,f as validateImageSource,T as validateIsoTimestamp,s as validateMessage,c as validateMessageSource,v as validateSeqTargets,E as validateSurfaceOp,d as validateTextAnnotation,h as validateToolExecutionResult,m as validateToolResultMessage,_ as validateUsage};
2
2
  //# sourceMappingURL=validation.js.map