@zhivex-ai/core 1.18.0 → 1.20.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (266) hide show
  1. package/README.md +4 -0
  2. package/dist/agent/approvals.d.ts +7 -0
  3. package/dist/agent/approvals.d.ts.map +1 -0
  4. package/dist/agent/approvals.js +97 -0
  5. package/dist/agent/approvals.js.map +1 -0
  6. package/dist/agent/cancellation.d.ts +4 -0
  7. package/dist/agent/cancellation.d.ts.map +1 -0
  8. package/dist/agent/cancellation.js +69 -0
  9. package/dist/agent/cancellation.js.map +1 -0
  10. package/dist/agent/common.d.ts +20 -0
  11. package/dist/agent/common.d.ts.map +1 -0
  12. package/dist/agent/common.js +150 -0
  13. package/dist/agent/common.js.map +1 -0
  14. package/dist/agent/compaction.d.ts +6 -0
  15. package/dist/agent/compaction.d.ts.map +1 -0
  16. package/dist/agent/compaction.js +156 -0
  17. package/dist/agent/compaction.js.map +1 -0
  18. package/dist/agent/context.d.ts +58 -0
  19. package/dist/agent/context.d.ts.map +1 -0
  20. package/dist/agent/context.js +267 -0
  21. package/dist/agent/context.js.map +1 -0
  22. package/dist/agent/definition.d.ts +4 -0
  23. package/dist/agent/definition.d.ts.map +1 -0
  24. package/dist/agent/definition.js +35 -0
  25. package/dist/agent/definition.js.map +1 -0
  26. package/dist/agent/execution.d.ts +14 -0
  27. package/dist/agent/execution.d.ts.map +1 -0
  28. package/dist/agent/execution.js +1062 -0
  29. package/dist/agent/execution.js.map +1 -0
  30. package/dist/agent/groups.d.ts +3 -0
  31. package/dist/agent/groups.d.ts.map +1 -0
  32. package/dist/agent/groups.js +130 -0
  33. package/dist/agent/groups.js.map +1 -0
  34. package/dist/agent/guardrails.d.ts +4 -0
  35. package/dist/agent/guardrails.d.ts.map +1 -0
  36. package/dist/agent/guardrails.js +29 -0
  37. package/dist/agent/guardrails.js.map +1 -0
  38. package/dist/agent/instance.d.ts +42 -0
  39. package/dist/agent/instance.d.ts.map +1 -0
  40. package/dist/agent/instance.js +82 -0
  41. package/dist/agent/instance.js.map +1 -0
  42. package/dist/agent/lifecycle.d.ts +31 -0
  43. package/dist/agent/lifecycle.d.ts.map +1 -0
  44. package/dist/agent/lifecycle.js +184 -0
  45. package/dist/agent/lifecycle.js.map +1 -0
  46. package/dist/agent/state.d.ts +6 -0
  47. package/dist/agent/state.d.ts.map +1 -0
  48. package/dist/agent/state.js +119 -0
  49. package/dist/agent/state.js.map +1 -0
  50. package/dist/agent/telemetry.d.ts +12 -0
  51. package/dist/agent/telemetry.d.ts.map +1 -0
  52. package/dist/agent/telemetry.js +176 -0
  53. package/dist/agent/telemetry.js.map +1 -0
  54. package/dist/agent/tool-execution.d.ts +6 -0
  55. package/dist/agent/tool-execution.d.ts.map +1 -0
  56. package/dist/agent/tool-execution.js +176 -0
  57. package/dist/agent/tool-execution.js.map +1 -0
  58. package/dist/agent-run-view.d.ts +9 -0
  59. package/dist/agent-run-view.d.ts.map +1 -0
  60. package/dist/agent-run-view.js +42 -0
  61. package/dist/agent-run-view.js.map +1 -0
  62. package/dist/agent-store/file.d.ts +11 -0
  63. package/dist/agent-store/file.d.ts.map +1 -0
  64. package/dist/agent-store/file.js +534 -0
  65. package/dist/agent-store/file.js.map +1 -0
  66. package/dist/agent-store/memory.d.ts +9 -0
  67. package/dist/agent-store/memory.d.ts.map +1 -0
  68. package/dist/agent-store/memory.js +198 -0
  69. package/dist/agent-store/memory.js.map +1 -0
  70. package/dist/agent-store/postgres.d.ts +4 -0
  71. package/dist/agent-store/postgres.d.ts.map +1 -0
  72. package/dist/agent-store/postgres.js +374 -0
  73. package/dist/agent-store/postgres.js.map +1 -0
  74. package/dist/agent-store/shared.d.ts +19 -0
  75. package/dist/agent-store/shared.d.ts.map +1 -0
  76. package/dist/agent-store/shared.js +137 -0
  77. package/dist/agent-store/shared.js.map +1 -0
  78. package/dist/agent-store/sqlite.d.ts +4 -0
  79. package/dist/agent-store/sqlite.d.ts.map +1 -0
  80. package/dist/agent-store/sqlite.js +362 -0
  81. package/dist/agent-store/sqlite.js.map +1 -0
  82. package/dist/agent-store.d.ts +5 -21
  83. package/dist/agent-store.d.ts.map +1 -1
  84. package/dist/agent-store.js +5 -1588
  85. package/dist/agent-store.js.map +1 -1
  86. package/dist/agent.d.ts +6 -57
  87. package/dist/agent.d.ts.map +1 -1
  88. package/dist/agent.js +6 -2631
  89. package/dist/agent.js.map +1 -1
  90. package/dist/agents-entry.d.ts +19 -0
  91. package/dist/agents-entry.d.ts.map +1 -0
  92. package/dist/agents-entry.js +14 -0
  93. package/dist/agents-entry.js.map +1 -0
  94. package/dist/api-stability.d.ts.map +1 -1
  95. package/dist/api-stability.js +1 -0
  96. package/dist/api-stability.js.map +1 -1
  97. package/dist/artifact/file.d.ts +6 -0
  98. package/dist/artifact/file.d.ts.map +1 -0
  99. package/dist/artifact/file.js +380 -0
  100. package/dist/artifact/file.js.map +1 -0
  101. package/dist/artifact/memory.d.ts +3 -0
  102. package/dist/artifact/memory.d.ts.map +1 -0
  103. package/dist/artifact/memory.js +80 -0
  104. package/dist/artifact/memory.js.map +1 -0
  105. package/dist/artifact/postgres.d.ts +3 -0
  106. package/dist/artifact/postgres.d.ts.map +1 -0
  107. package/dist/artifact/postgres.js +283 -0
  108. package/dist/artifact/postgres.js.map +1 -0
  109. package/dist/artifact/shared.d.ts +208 -0
  110. package/dist/artifact/shared.d.ts.map +1 -0
  111. package/dist/artifact/shared.js +523 -0
  112. package/dist/artifact/shared.js.map +1 -0
  113. package/dist/artifact/sqlite.d.ts +3 -0
  114. package/dist/artifact/sqlite.d.ts.map +1 -0
  115. package/dist/artifact/sqlite.js +283 -0
  116. package/dist/artifact/sqlite.js.map +1 -0
  117. package/dist/artifact.d.ts +6 -186
  118. package/dist/artifact.d.ts.map +1 -1
  119. package/dist/artifact.js +6 -1536
  120. package/dist/artifact.js.map +1 -1
  121. package/dist/catalog-contracts.d.ts +52 -0
  122. package/dist/catalog-contracts.d.ts.map +1 -0
  123. package/dist/catalog-contracts.js +250 -0
  124. package/dist/catalog-contracts.js.map +1 -0
  125. package/dist/catalog.d.ts +3 -52
  126. package/dist/catalog.d.ts.map +1 -1
  127. package/dist/catalog.js +3 -249
  128. package/dist/catalog.js.map +1 -1
  129. package/dist/generate-cache-file.d.ts +11 -0
  130. package/dist/generate-cache-file.d.ts.map +1 -0
  131. package/dist/generate-cache-file.js +124 -0
  132. package/dist/generate-cache-file.js.map +1 -0
  133. package/dist/generate-text.d.ts +2 -5
  134. package/dist/generate-text.d.ts.map +1 -1
  135. package/dist/generate-text.js +6 -18
  136. package/dist/generate-text.js.map +1 -1
  137. package/dist/generation-entry.d.ts +6 -0
  138. package/dist/generation-entry.d.ts.map +1 -0
  139. package/dist/generation-entry.js +6 -0
  140. package/dist/generation-entry.js.map +1 -0
  141. package/dist/image-input.d.ts +4 -0
  142. package/dist/image-input.d.ts.map +1 -0
  143. package/dist/image-input.js +26 -0
  144. package/dist/image-input.js.map +1 -0
  145. package/dist/index.d.ts +1 -0
  146. package/dist/index.d.ts.map +1 -1
  147. package/dist/index.js +1 -0
  148. package/dist/index.js.map +1 -1
  149. package/dist/middleware-runtime.d.ts +35 -0
  150. package/dist/middleware-runtime.d.ts.map +1 -0
  151. package/dist/middleware-runtime.js +532 -0
  152. package/dist/middleware-runtime.js.map +1 -0
  153. package/dist/middleware.d.ts +3 -43
  154. package/dist/middleware.d.ts.map +1 -1
  155. package/dist/middleware.js +3 -653
  156. package/dist/middleware.js.map +1 -1
  157. package/dist/normalize-messages.d.ts +3 -0
  158. package/dist/normalize-messages.d.ts.map +1 -0
  159. package/dist/normalize-messages.js +16 -0
  160. package/dist/normalize-messages.js.map +1 -0
  161. package/dist/provider-entry.d.ts +18 -0
  162. package/dist/provider-entry.d.ts.map +1 -0
  163. package/dist/provider-entry.js +14 -0
  164. package/dist/provider-entry.js.map +1 -0
  165. package/dist/realtime.d.ts +2 -0
  166. package/dist/realtime.d.ts.map +1 -1
  167. package/dist/realtime.js +6 -0
  168. package/dist/realtime.js.map +1 -1
  169. package/dist/store-key.d.ts +3 -0
  170. package/dist/store-key.d.ts.map +1 -0
  171. package/dist/store-key.js +5 -0
  172. package/dist/store-key.js.map +1 -0
  173. package/dist/store-security.d.ts +1 -2
  174. package/dist/store-security.d.ts.map +1 -1
  175. package/dist/store-security.js +2 -4
  176. package/dist/store-security.js.map +1 -1
  177. package/dist/types/agent-state.d.ts +236 -0
  178. package/dist/types/agent-state.d.ts.map +1 -0
  179. package/dist/types/agent-state.js +2 -0
  180. package/dist/types/agent-state.js.map +1 -0
  181. package/dist/types/agents.d.ts +429 -0
  182. package/dist/types/agents.d.ts.map +1 -0
  183. package/dist/types/agents.js +2 -0
  184. package/dist/types/agents.js.map +1 -0
  185. package/dist/types/common.d.ts +179 -0
  186. package/dist/types/common.d.ts.map +1 -0
  187. package/dist/types/common.js +2 -0
  188. package/dist/types/common.js.map +1 -0
  189. package/dist/types/generation.d.ts +109 -0
  190. package/dist/types/generation.d.ts.map +1 -0
  191. package/dist/types/generation.js +2 -0
  192. package/dist/types/generation.js.map +1 -0
  193. package/dist/types/media-data.d.ts +65 -0
  194. package/dist/types/media-data.d.ts.map +1 -0
  195. package/dist/types/media-data.js +2 -0
  196. package/dist/types/media-data.js.map +1 -0
  197. package/dist/types/media.d.ts +141 -0
  198. package/dist/types/media.d.ts.map +1 -0
  199. package/dist/types/media.js +2 -0
  200. package/dist/types/media.js.map +1 -0
  201. package/dist/types/messages.d.ts +84 -0
  202. package/dist/types/messages.d.ts.map +1 -0
  203. package/dist/types/messages.js +2 -0
  204. package/dist/types/messages.js.map +1 -0
  205. package/dist/types/middleware.d.ts +130 -0
  206. package/dist/types/middleware.d.ts.map +1 -0
  207. package/dist/types/middleware.js +2 -0
  208. package/dist/types/middleware.js.map +1 -0
  209. package/dist/types/model-tools.d.ts +409 -0
  210. package/dist/types/model-tools.d.ts.map +1 -0
  211. package/dist/types/model-tools.js +2 -0
  212. package/dist/types/model-tools.js.map +1 -0
  213. package/dist/types/persistence.d.ts +168 -0
  214. package/dist/types/persistence.d.ts.map +1 -0
  215. package/dist/types/persistence.js +2 -0
  216. package/dist/types/persistence.js.map +1 -0
  217. package/dist/types/provider-resources.d.ts +336 -0
  218. package/dist/types/provider-resources.d.ts.map +1 -0
  219. package/dist/types/provider-resources.js +2 -0
  220. package/dist/types/provider-resources.js.map +1 -0
  221. package/dist/types/provider.d.ts +23 -0
  222. package/dist/types/provider.d.ts.map +1 -0
  223. package/dist/types/provider.js +2 -0
  224. package/dist/types/provider.js.map +1 -0
  225. package/dist/types/resource-options.d.ts +88 -0
  226. package/dist/types/resource-options.d.ts.map +1 -0
  227. package/dist/types/resource-options.js +2 -0
  228. package/dist/types/resource-options.js.map +1 -0
  229. package/dist/types/stream.d.ts +70 -0
  230. package/dist/types/stream.d.ts.map +1 -0
  231. package/dist/types/stream.js +2 -0
  232. package/dist/types/stream.js.map +1 -0
  233. package/dist/types/ui.d.ts +110 -0
  234. package/dist/types/ui.d.ts.map +1 -0
  235. package/dist/types/ui.js +2 -0
  236. package/dist/types/ui.js.map +1 -0
  237. package/dist/types.d.ts +16 -2480
  238. package/dist/types.d.ts.map +1 -1
  239. package/dist/ui.d.ts.map +1 -1
  240. package/dist/ui.js +2 -0
  241. package/dist/ui.js.map +1 -1
  242. package/dist/workflow-state-service/file.d.ts +5 -0
  243. package/dist/workflow-state-service/file.d.ts.map +1 -0
  244. package/dist/workflow-state-service/file.js +142 -0
  245. package/dist/workflow-state-service/file.js.map +1 -0
  246. package/dist/workflow-state-service/memory.d.ts +3 -0
  247. package/dist/workflow-state-service/memory.d.ts.map +1 -0
  248. package/dist/workflow-state-service/memory.js +27 -0
  249. package/dist/workflow-state-service/memory.js.map +1 -0
  250. package/dist/workflow-state-service/postgres.d.ts +4 -0
  251. package/dist/workflow-state-service/postgres.d.ts.map +1 -0
  252. package/dist/workflow-state-service/postgres.js +179 -0
  253. package/dist/workflow-state-service/postgres.js.map +1 -0
  254. package/dist/workflow-state-service/shared.d.ts +43 -0
  255. package/dist/workflow-state-service/shared.d.ts.map +1 -0
  256. package/dist/workflow-state-service/shared.js +107 -0
  257. package/dist/workflow-state-service/shared.js.map +1 -0
  258. package/dist/workflow-state-service/sqlite.d.ts +4 -0
  259. package/dist/workflow-state-service/sqlite.d.ts.map +1 -0
  260. package/dist/workflow-state-service/sqlite.js +183 -0
  261. package/dist/workflow-state-service/sqlite.js.map +1 -0
  262. package/dist/workflow-state-service.d.ts +6 -33
  263. package/dist/workflow-state-service.d.ts.map +1 -1
  264. package/dist/workflow-state-service.js +6 -626
  265. package/dist/workflow-state-service.js.map +1 -1
  266. package/package.json +17 -1
package/README.md CHANGED
@@ -45,6 +45,10 @@ surface. The package root remains backward compatible.
45
45
  | Import | Intended surface | Node.js built-ins |
46
46
  | --- | --- | --- |
47
47
  | `@zhivex-ai/core/contracts` | Provider-neutral TypeScript contracts | No runtime module |
48
+ | `@zhivex-ai/core/agents` | Agent runtime and safety, without storage backends | Server-side |
49
+ | `@zhivex-ai/core/generation` | Server-side generation and model wrapping, without stores or agents | Crypto only |
50
+ | `@zhivex-ai/core/provider` | Adapter HTTP, SSE, realtime, and message helpers | Server-side |
51
+ | `@zhivex-ai/core/catalog` | Catalog contracts and factory, without a default inventory | None |
48
52
  | `@zhivex-ai/core/runtime` | Adapter, message, tool, media, retrieval, and realtime primitives | None |
49
53
  | `@zhivex-ai/core/workflows` | Portable workflow orchestration, evaluation contracts, diffs, and gates | None |
50
54
  | `@zhivex-ai/core/ui` | UI messages, request parsing, and response streams | None |
@@ -0,0 +1,7 @@
1
+ import type { AgentApprovalResolution, AgentApprovalResponse, AgentDefinition, AgentRunState, ModelMessage } from "../types.js";
2
+ export declare const applyApprovalResponses: (messages: ModelMessage[], approvals: AgentApprovalResponse[] | undefined, pendingApprovals: AgentRunState["pendingApprovals"], approvalHistory?: AgentRunState["approvalHistory"], signer?: AgentDefinition["toolApprovalSigner"]) => Promise<{
3
+ messages: ModelMessage[];
4
+ pendingApprovals: import("../types.js").AgentApprovalRequest[];
5
+ approvalHistory: AgentApprovalResolution[];
6
+ }>;
7
+ //# sourceMappingURL=approvals.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"approvals.d.ts","sourceRoot":"","sources":["../../src/agent/approvals.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EACV,uBAAuB,EACvB,qBAAqB,EACrB,eAAe,EACf,aAAa,EACb,YAAY,EACb,MAAM,aAAa,CAAC;AAcrB,eAAO,MAAM,sBAAsB,aACvB,YAAY,EAAE,aACb,qBAAqB,EAAE,GAAG,SAAS,oBAC5B,aAAa,CAAC,kBAAkB,CAAC,oBAClC,aAAa,CAAC,iBAAiB,CAAC,WACxC,eAAe,CAAC,oBAAoB,CAAC;;;;EAoH/C,CAAC"}
@@ -0,0 +1,97 @@
1
+ import { createAgentApprovalMessage } from "../agent-approval.js";
2
+ import { ValidationError } from "../errors.js";
3
+ const localApprovalResolutionPayload = (inputDigest, approve, reason) => JSON.stringify({
4
+ inputDigest,
5
+ approve,
6
+ reason: reason ?? null
7
+ });
8
+ const approvalKey = (provider, requestId) => `${provider}\0${requestId}`;
9
+ export const applyApprovalResponses = async (messages, approvals, pendingApprovals, approvalHistory = [], signer) => {
10
+ if (!approvals?.length) {
11
+ return {
12
+ messages,
13
+ pendingApprovals,
14
+ approvalHistory
15
+ };
16
+ }
17
+ const pendingById = new Map(pendingApprovals.map((approval) => [approvalKey(approval.provider, approval.id), approval]));
18
+ for (const approval of approvals) {
19
+ const pending = pendingById.get(approvalKey(approval.provider, approval.approvalRequestId));
20
+ if (!pending) {
21
+ throw new ValidationError(`Unknown approval request "${approval.approvalRequestId}" for provider "${approval.provider}".`);
22
+ }
23
+ }
24
+ const providerApprovals = approvals.filter((approval) => {
25
+ const pending = pendingById.get(approvalKey(approval.provider, approval.approvalRequestId));
26
+ return pending?.kind === undefined || pending.kind === "provider";
27
+ });
28
+ const localResolutions = [];
29
+ const subagentResolutions = [];
30
+ for (const approval of approvals) {
31
+ const pending = pendingById.get(approvalKey(approval.provider, approval.approvalRequestId));
32
+ if (!pending) {
33
+ continue;
34
+ }
35
+ if (pending.kind === "subagent") {
36
+ subagentResolutions.push({
37
+ requestId: pending.id,
38
+ kind: "subagent",
39
+ provider: pending.provider,
40
+ approve: approval.approve,
41
+ reason: approval.reason,
42
+ toolCallId: pending.toolCallId,
43
+ childRunId: pending.childRunId,
44
+ childAgentId: pending.childAgentId,
45
+ childApprovalRequestId: pending.childApprovalRequestId,
46
+ resolvedAt: Date.now()
47
+ });
48
+ continue;
49
+ }
50
+ if (pending.kind !== "local-tool") {
51
+ continue;
52
+ }
53
+ if (signer) {
54
+ if (!pending.inputDigest || !pending.signature) {
55
+ throw new ValidationError(`Approval request "${pending.id}" is missing its required signature.`);
56
+ }
57
+ const requestSignatureValid = signer.verify
58
+ ? await signer.verify(pending.inputDigest, pending.signature)
59
+ : (await signer.sign(pending.inputDigest)) === pending.signature;
60
+ if (!requestSignatureValid) {
61
+ throw new ValidationError(`Approval request "${pending.id}" has an invalid signature.`);
62
+ }
63
+ }
64
+ const resolutionSignature = signer && pending.inputDigest
65
+ ? await signer.sign(localApprovalResolutionPayload(pending.inputDigest, approval.approve, approval.reason))
66
+ : undefined;
67
+ localResolutions.push({
68
+ requestId: pending.id,
69
+ kind: "local-tool",
70
+ provider: pending.provider,
71
+ approve: approval.approve,
72
+ reason: approval.reason,
73
+ toolCallId: pending.toolCallId,
74
+ step: pending.step,
75
+ inputDigest: pending.inputDigest,
76
+ toolVersion: pending.toolVersion,
77
+ signature: resolutionSignature,
78
+ resolvedAt: Date.now()
79
+ });
80
+ }
81
+ return {
82
+ messages: providerApprovals.length
83
+ ? [...messages, createAgentApprovalMessage(providerApprovals)]
84
+ : messages,
85
+ pendingApprovals: pendingApprovals.filter((pending) => !approvals.some((approval) => approval.approvalRequestId === pending.id &&
86
+ approval.provider === pending.provider)),
87
+ approvalHistory: [
88
+ ...approvalHistory.filter((existing) => !localResolutions.some((resolution) => resolution.requestId === existing.requestId &&
89
+ resolution.provider === existing.provider) &&
90
+ !subagentResolutions.some((resolution) => resolution.requestId === existing.requestId &&
91
+ resolution.provider === existing.provider)),
92
+ ...localResolutions,
93
+ ...subagentResolutions
94
+ ]
95
+ };
96
+ };
97
+ //# sourceMappingURL=approvals.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"approvals.js","sourceRoot":"","sources":["../../src/agent/approvals.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import type { AgentRunCancellationOptions, AgentRunState, AgentRunStore, AgentRunTreeCancellationResult } from "../types.js";
2
+ export declare const cancelAgentRun: (store: AgentRunStore, runId: string, options?: AgentRunCancellationOptions) => Promise<AgentRunState | undefined>;
3
+ export declare const cancelAgentRunTree: (store: AgentRunStore, runId: string, options?: AgentRunCancellationOptions) => Promise<AgentRunTreeCancellationResult>;
4
+ //# sourceMappingURL=cancellation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cancellation.d.ts","sourceRoot":"","sources":["../../src/agent/cancellation.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EACV,2BAA2B,EAC3B,aAAa,EACb,aAAa,EACb,8BAA8B,EAC/B,MAAM,aAAa,CAAC;AAQrB,eAAO,MAAM,cAAc,UAClB,aAAa,SACb,MAAM,YACJ,2BAA2B,KACnC,OAAO,CAAC,aAAa,GAAG,SAAS,CAkBnC,CAAC;AAEF,eAAO,MAAM,kBAAkB,UACtB,aAAa,SACb,MAAM,YACJ,2BAA2B,KACnC,OAAO,CAAC,8BAA8B,CAoDxC,CAAC"}
@@ -0,0 +1,69 @@
1
+ import { normalizeAgentRunState } from "../agent-state.js";
2
+ import { ValidationError } from "../errors.js";
3
+ import { cloneState } from "./common.js";
4
+ import { saveStateWithRevision } from "./state.js";
5
+ export const cancelAgentRun = async (store, runId, options = {}) => {
6
+ const loadedState = await store.load(runId, options.scope);
7
+ if (!loadedState) {
8
+ return undefined;
9
+ }
10
+ const cancelledAt = Date.now();
11
+ const status = options.mode === "final" ? "cancelled" : "cancel_requested";
12
+ const state = normalizeAgentRunState({
13
+ ...loadedState,
14
+ status,
15
+ cancelledAt,
16
+ cancellationReason: options.reason,
17
+ updatedAt: cancelledAt,
18
+ error: undefined
19
+ });
20
+ await saveStateWithRevision(store, state);
21
+ return cloneState(state);
22
+ };
23
+ export const cancelAgentRunTree = async (store, runId, options = {}) => {
24
+ if (!store.findByParentRunId) {
25
+ throw new ValidationError('The agent run "store" must implement "findByParentRunId()" to cancel an agent run tree.');
26
+ }
27
+ const cancelledAt = Date.now();
28
+ const status = options.mode === "final" ? "cancelled" : "cancel_requested";
29
+ const cancelState = (state) => normalizeAgentRunState({
30
+ ...state,
31
+ status,
32
+ cancelledAt,
33
+ cancellationReason: options.reason,
34
+ updatedAt: cancelledAt,
35
+ error: undefined
36
+ });
37
+ const parent = await store.load(runId, options.scope);
38
+ if (!parent) {
39
+ return {
40
+ parent: undefined,
41
+ children: []
42
+ };
43
+ }
44
+ const visited = new Set([runId]);
45
+ const children = [];
46
+ const collectChildren = async (parentRunId) => {
47
+ const directChildren = await store.findByParentRunId?.(parentRunId, options.scope);
48
+ for (const child of directChildren ?? []) {
49
+ if (visited.has(child.runId)) {
50
+ continue;
51
+ }
52
+ visited.add(child.runId);
53
+ children.push(child);
54
+ await collectChildren(child.runId);
55
+ }
56
+ };
57
+ await collectChildren(runId);
58
+ const cancelledParent = cancelState(parent);
59
+ const cancelledChildren = children.map(cancelState);
60
+ await saveStateWithRevision(store, cancelledParent);
61
+ for (const child of cancelledChildren) {
62
+ await saveStateWithRevision(store, child);
63
+ }
64
+ return {
65
+ parent: cloneState(cancelledParent),
66
+ children: cancelledChildren.map(cloneState)
67
+ };
68
+ };
69
+ //# sourceMappingURL=cancellation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cancellation.js","sourceRoot":"","sources":["../../src/agent/cancellation.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ import type { AgentApprovalRequest, AgentDefinition, AgentRunOutput, AgentRunState, AgentStep, AgentStepRequest, AgentStepResponse, AgentStatus, GenerateTextStep, JsonValue, ModelGenerateInput, ModelMessage, ToolExecutionResult } from "../types.js";
2
+ export declare const randomId: (prefix: string) => string;
3
+ export declare const joinInstructions: (...parts: Array<string | undefined>) => string | undefined;
4
+ export declare const resolveAgentOutputMode: (agent: AgentDefinition) => "native" | "prompted" | undefined;
5
+ export declare const promptedOutputInstruction: (agent: AgentDefinition) => string | undefined;
6
+ export declare const hasToolCalls: (messages: ModelMessage[]) => boolean;
7
+ export declare const snapshotRequest: (request: ModelGenerateInput, messageOffset?: number, messages?: ModelMessage[]) => AgentStepRequest;
8
+ export declare const snapshotResponse: (response: GenerateTextStep["response"]) => AgentStepResponse;
9
+ export declare const messagePrefixLength: (prefix: ModelMessage[], messages: ModelMessage[]) => number;
10
+ export declare const mapSteps: (steps: GenerateTextStep[], offset: number, toolResults: ToolExecutionResult[]) => AgentStep[];
11
+ export declare const cloneMetadata: (...values: Array<Record<string, JsonValue> | undefined>) => any;
12
+ export declare const toOutput: <TOutput = unknown>(state: AgentRunState) => AgentRunOutput<TOutput>;
13
+ export declare const normalizeApprovalStatus: (status: AgentStatus) => AgentStatus;
14
+ export declare const cloneState: (state: AgentRunState) => AgentRunState;
15
+ export declare const countToolCallsInSteps: (steps: AgentStep[]) => number;
16
+ export declare const countToolErrors: (toolResults: ToolExecutionResult[]) => number;
17
+ export declare const approvalsFromEvents: (messages: ModelMessage[]) => AgentApprovalRequest[];
18
+ export declare const createFailedState: (state: AgentRunState, error: unknown) => AgentRunState;
19
+ export declare const createTerminalState: (state: AgentRunState, status: Extract<AgentStatus, "cancel_requested" | "timed_out">, message: string) => AgentRunState;
20
+ //# sourceMappingURL=common.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"common.d.ts","sourceRoot":"","sources":["../../src/agent/common.ts"],"names":[],"mappings":"AAoBA,OAAO,KAAK,EACV,oBAAoB,EACpB,eAAe,EAEf,cAAc,EACd,aAAa,EACb,SAAS,EACT,gBAAgB,EAChB,iBAAiB,EACjB,WAAW,EACX,gBAAgB,EAChB,SAAS,EACT,kBAAkB,EAClB,YAAY,EAEZ,mBAAmB,EACpB,MAAM,aAAa,CAAC;AAErB,eAAO,MAAM,QAAQ,4BAAiB,CAAC;AAEvC,eAAO,MAAM,gBAAgB,aAAc,KAAK,CAAC,MAAM,GAAG,SAAS,CAAC,KAAG,MAAM,GAAG,SAG/E,CAAC;AAEF,eAAO,MAAM,sBAAsB,UAC1B,eAAe,KACrB,QAAQ,GAAG,UAAU,GAAG,SAe1B,CAAC;AAEF,eAAO,MAAM,yBAAyB,UAAW,eAAe,KAAG,MAAM,GAAG,SAM7D,CAAC;AAEhB,eAAO,MAAM,YAAY,aAAc,YAAY,EAAE,KAAG,OAC6B,CAAC;AAEtF,eAAO,MAAM,eAAe,YACjB,kBAAkB,qCAEjB,YAAY,EAAE,KACvB,gBAYD,CAAC;AAEH,eAAO,MAAM,gBAAgB,aAAc,gBAAgB,CAAC,UAAU,CAAC,KAAG,iBAMxE,CAAC;AAQH,eAAO,MAAM,mBAAmB,WACtB,YAAY,EAAE,YACZ,YAAY,EAAE,KACvB,MAUF,CAAC;AAEF,eAAO,MAAM,QAAQ,UAAW,gBAAgB,EAAE,UAAU,MAAM,eAAe,mBAAmB,EAAE,KAAG,SAAS,EAyBjH,CAAC;AAEF,eAAO,MAAM,aAAa,cAAe,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,SAAS,CAAC,QAGpF,CAAC;AAEF,eAAO,MAAM,QAAQ,GAAI,OAAO,GAAG,OAAO,SAAS,aAAa,KAAG,cAAc,CAAC,OAAO,CAgBvF,CAAC;AAEH,eAAO,MAAM,uBAAuB,WAAY,WAAW,KAAG,WACR,CAAC;AAEvD,eAAO,MAAM,UAAU,UAAW,aAAa,KAAG,aAC0B,CAAC;AAE7E,eAAO,MAAM,qBAAqB,UAAW,SAAS,EAAE,KAAG,MAC8B,CAAC;AAE1F,eAAO,MAAM,eAAe,gBAAiB,mBAAmB,EAAE,KAAG,MACd,CAAC;AAExD,eAAO,MAAM,mBAAmB,aAAc,YAAY,EAAE,KAAG,oBAAoB,EAAwC,CAAC;AAwB5H,eAAO,MAAM,iBAAiB,UAAW,aAAa,SAAS,OAAO,KAAG,aAKvE,CAAC;AAEH,eAAO,MAAM,mBAAmB,UACvB,aAAa,UACZ,OAAO,CAAC,WAAW,EAAE,kBAAkB,GAAG,WAAW,CAAC,WACrD,MAAM,KACd,aASD,CAAC"}
@@ -0,0 +1,150 @@
1
+ import { getAgentApprovalRequests } from "../agent-approval.js";
2
+ import { normalizeAgentRunState } from "../agent-state.js";
3
+ import { ProviderToolCallError, ToolNotRegisteredError, UnsupportedFeatureError } from "../errors.js";
4
+ import { getGenerateTextStepTiming } from "../generate-text.js";
5
+ import { createSecureId } from "#secure-id";
6
+ import { createStructuredOutputPrompt } from "../structured-output-prompt.js";
7
+ export const randomId = createSecureId;
8
+ export const joinInstructions = (...parts) => {
9
+ const content = parts.map((part) => part?.trim()).filter((part) => Boolean(part));
10
+ return content.length ? content.join("\n\n") : undefined;
11
+ };
12
+ export const resolveAgentOutputMode = (agent) => {
13
+ if (!agent.outputSchema) {
14
+ return undefined;
15
+ }
16
+ const requested = agent.outputMode ?? "auto";
17
+ if (requested === "native" && !agent.model.capabilities.structuredOutput) {
18
+ throw new UnsupportedFeatureError(`Model "${agent.model.provider}/${agent.model.modelId}" does not support native structured output.`);
19
+ }
20
+ return requested === "auto"
21
+ ? agent.model.capabilities.structuredOutput
22
+ ? "native"
23
+ : "prompted"
24
+ : requested;
25
+ };
26
+ export const promptedOutputInstruction = (agent) => agent.outputSchema && resolveAgentOutputMode(agent) === "prompted"
27
+ ? createStructuredOutputPrompt(agent.outputSchema, {
28
+ name: agent.outputName,
29
+ description: agent.outputDescription
30
+ })
31
+ : undefined;
32
+ export const hasToolCalls = (messages) => messages.some((message) => message.parts.some((part) => part.type === "tool-call"));
33
+ export const snapshotRequest = (request, messageOffset = 0, messages = request.messages) => ({
34
+ messageOffset,
35
+ messages,
36
+ toolChoice: request.toolChoice,
37
+ toolExecution: request.toolExecution,
38
+ temperature: request.temperature,
39
+ maxTokens: request.maxTokens,
40
+ reasoning: request.reasoning,
41
+ providerOptions: request.providerOptions,
42
+ timeoutMs: request.timeoutMs,
43
+ maxRetries: request.maxRetries,
44
+ retryBackoffMs: request.retryBackoffMs
45
+ });
46
+ export const snapshotResponse = (response) => ({
47
+ messages: response.messages ?? (response.message ? [response.message] : []),
48
+ text: response.text,
49
+ finishReason: response.finishReason,
50
+ providerFinishReason: response.providerFinishReason,
51
+ usage: response.usage
52
+ });
53
+ const countToolCalls = (messages) => messages.reduce((total, message) => total + message.parts.filter((part) => part.type === "tool-call").length, 0);
54
+ export const messagePrefixLength = (prefix, messages) => {
55
+ if (prefix.length > messages.length) {
56
+ return 0;
57
+ }
58
+ for (let index = 0; index < prefix.length; index += 1) {
59
+ if (JSON.stringify(prefix[index]) !== JSON.stringify(messages[index])) {
60
+ return 0;
61
+ }
62
+ }
63
+ return prefix.length;
64
+ };
65
+ export const mapSteps = (steps, offset, toolResults) => {
66
+ let toolResultCursor = 0;
67
+ let previousMessages = [];
68
+ return steps.map((step, index) => {
69
+ const response = snapshotResponse(step.response);
70
+ const toolCallCount = countToolCalls(response.messages);
71
+ const stepToolResults = toolResults.slice(toolResultCursor, toolResultCursor + toolCallCount);
72
+ toolResultCursor += toolCallCount;
73
+ const timing = getGenerateTextStepTiming(step.request);
74
+ const finishedAt = timing?.finishedAt ?? Date.now();
75
+ const messageOffset = index === 0 ? 0 : messagePrefixLength(previousMessages, step.request.messages);
76
+ const incrementalMessages = step.request.messages.slice(messageOffset);
77
+ previousMessages = step.request.messages;
78
+ return {
79
+ index: offset + index + 1,
80
+ status: "completed",
81
+ startedAt: timing?.startedAt ?? finishedAt,
82
+ finishedAt,
83
+ request: snapshotRequest(step.request, messageOffset, incrementalMessages),
84
+ response,
85
+ toolResults: stepToolResults
86
+ };
87
+ });
88
+ };
89
+ export const cloneMetadata = (...values) => {
90
+ const merged = Object.assign({}, ...values.filter(Boolean));
91
+ return Object.keys(merged).length ? merged : undefined;
92
+ };
93
+ export const toOutput = (state) => ({
94
+ status: state.status,
95
+ taskOutcome: state.taskOutcome,
96
+ outputText: state.outputText,
97
+ finalOutput: state.status === "completed" && state.finalOutput !== undefined
98
+ ? state.finalOutput
99
+ : undefined,
100
+ finishReason: state.finishReason,
101
+ providerFinishReason: state.providerFinishReason,
102
+ usage: state.usage,
103
+ messages: state.messages,
104
+ steps: state.steps,
105
+ toolResults: state.toolResults,
106
+ state,
107
+ error: state.error
108
+ });
109
+ export const normalizeApprovalStatus = (status) => status === "suspended" ? "waiting_approval" : status;
110
+ export const cloneState = (state) => JSON.parse(JSON.stringify(normalizeAgentRunState(state)));
111
+ export const countToolCallsInSteps = (steps) => steps.reduce((total, step) => total + countToolCalls(step.response?.messages ?? []), 0);
112
+ export const countToolErrors = (toolResults) => toolResults.filter((result) => result.isError).length;
113
+ export const approvalsFromEvents = (messages) => getAgentApprovalRequests(messages);
114
+ const toAgentRunError = (error) => {
115
+ if (error instanceof ToolNotRegisteredError) {
116
+ return { message: error.message, diagnosticCode: error.code };
117
+ }
118
+ if (error instanceof ProviderToolCallError) {
119
+ return {
120
+ message: error.message,
121
+ diagnosticCode: error.diagnosticCode,
122
+ category: error.category,
123
+ provider: error.provider,
124
+ ...(error.transport ? { transport: error.transport } : {}),
125
+ reason: error.reason,
126
+ retryable: error.retryable,
127
+ effectsPossible: error.effectsPossible
128
+ };
129
+ }
130
+ return {
131
+ message: error instanceof Error ? error.message : String(error)
132
+ };
133
+ };
134
+ export const createFailedState = (state, error) => ({
135
+ ...state,
136
+ status: "failed",
137
+ error: toAgentRunError(error),
138
+ updatedAt: Date.now()
139
+ });
140
+ export const createTerminalState = (state, status, message) => ({
141
+ ...state,
142
+ status,
143
+ error: {
144
+ message
145
+ },
146
+ cancellationReason: status === "cancel_requested" ? message : state.cancellationReason,
147
+ cancelledAt: status === "cancel_requested" ? Date.now() : state.cancelledAt,
148
+ updatedAt: Date.now()
149
+ });
150
+ //# sourceMappingURL=common.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"common.js","sourceRoot":"","sources":["../../src/agent/common.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ import type { AgentCompactionOptions, AgentCompactionRecord, AgentRunState, ModelMessage } from "../types.js";
2
+ export declare const compactAgentMessages: <TContext>(options: AgentCompactionOptions<TContext>, state: AgentRunState, messages: readonly ModelMessage[], beforeStep: number, context: TContext | undefined, abortSignal: AbortSignal | undefined) => Promise<{
3
+ messages: ModelMessage[];
4
+ record: AgentCompactionRecord;
5
+ } | undefined>;
6
+ //# sourceMappingURL=compaction.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"compaction.d.ts","sourceRoot":"","sources":["../../src/agent/compaction.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EACV,sBAAsB,EAEtB,qBAAqB,EACrB,aAAa,EACb,YAAY,EACb,MAAM,aAAa,CAAC;AA6BrB,eAAO,MAAM,oBAAoB,GAAU,QAAQ,WACxC,sBAAsB,CAAC,QAAQ,CAAC,SAClC,aAAa,YACV,SAAS,YAAY,EAAE,cACrB,MAAM,WACT,QAAQ,GAAG,SAAS,eAChB,WAAW,GAAG,SAAS,KACnC,OAAO,CAAC;IAAE,QAAQ,EAAE,YAAY,EAAE,CAAC;IAAC,MAAM,EAAE,qBAAqB,CAAA;CAAE,GAAG,SAAS,CA2IjF,CAAC"}
@@ -0,0 +1,156 @@
1
+ import { createHash } from "node:crypto";
2
+ import { fingerprintAgentHarness } from "../agent-harness.js";
3
+ import { ValidationError } from "../errors.js";
4
+ import { createTextMessage } from "../messages.js";
5
+ const defaultEstimateInputTokens = (messages) => Math.ceil(new TextEncoder().encode(JSON.stringify(messages)).byteLength / 4);
6
+ const validateCompactionOptions = (options) => {
7
+ if (options.maxMessages !== undefined &&
8
+ (!Number.isSafeInteger(options.maxMessages) || options.maxMessages < 2)) {
9
+ throw new ValidationError("Agent compaction maxMessages must be an integer greater than or equal to 2.");
10
+ }
11
+ if (options.maxEstimatedInputTokens !== undefined &&
12
+ (!Number.isSafeInteger(options.maxEstimatedInputTokens) || options.maxEstimatedInputTokens < 1)) {
13
+ throw new ValidationError("Agent compaction maxEstimatedInputTokens must be a positive integer.");
14
+ }
15
+ if (options.keepRecentMessages !== undefined &&
16
+ (!Number.isSafeInteger(options.keepRecentMessages) || options.keepRecentMessages < 1)) {
17
+ throw new ValidationError("Agent compaction keepRecentMessages must be a positive integer.");
18
+ }
19
+ if (options.maxMessages === undefined && options.maxEstimatedInputTokens === undefined) {
20
+ throw new ValidationError("Agent compaction requires maxMessages or maxEstimatedInputTokens.");
21
+ }
22
+ };
23
+ export const compactAgentMessages = async (options, state, messages, beforeStep, context, abortSignal) => {
24
+ validateCompactionOptions(options);
25
+ if (state.pendingApprovals.length) {
26
+ return undefined;
27
+ }
28
+ const estimateTokens = options.estimateTokens ?? defaultEstimateInputTokens;
29
+ const estimatedTokensBefore = estimateTokens(messages);
30
+ const reasons = [];
31
+ if (options.maxMessages !== undefined && messages.length > options.maxMessages) {
32
+ reasons.push("message-count");
33
+ }
34
+ if (options.maxEstimatedInputTokens !== undefined &&
35
+ estimatedTokensBefore > options.maxEstimatedInputTokens) {
36
+ reasons.push("estimated-input-tokens");
37
+ }
38
+ if (!reasons.length) {
39
+ return undefined;
40
+ }
41
+ let systemCount = 0;
42
+ while (messages[systemCount]?.role === "system") {
43
+ systemCount += 1;
44
+ }
45
+ const maxTailForMessageLimit = options.maxMessages === undefined
46
+ ? Number.POSITIVE_INFINITY
47
+ : Math.max(1, options.maxMessages - systemCount - 1);
48
+ const keepRecentMessages = Math.min(options.keepRecentMessages ?? 8, maxTailForMessageLimit);
49
+ let cut = Math.max(systemCount, messages.length - keepRecentMessages);
50
+ while (cut > systemCount && messages[cut]?.role === "tool") {
51
+ cut -= 1;
52
+ }
53
+ // Preserve whole correlated groups even when approval messages or parallel
54
+ // tool results separate a call from its result. Moving the boundary can expose
55
+ // another crossing dependency, so resolve it to a fixed point.
56
+ const origins = new Map();
57
+ const dependencies = [];
58
+ messages.forEach((message, index) => {
59
+ for (const part of message.parts) {
60
+ let origin;
61
+ let reference;
62
+ if (part.type === "tool-call")
63
+ origin = `tool:${part.toolCall.id}`;
64
+ if (part.type === "tool-result")
65
+ reference = `tool:${part.toolResult.toolCallId}`;
66
+ if (part.type === "provider-data" && typeof part.data === "object" && part.data !== null && !Array.isArray(part.data)) {
67
+ if (part.data.type === "mcp_approval_request" && typeof part.data.id === "string") {
68
+ origin = `approval:${part.provider}:${part.data.id}`;
69
+ }
70
+ if (part.data.type === "mcp_approval_response" && typeof part.data.approval_request_id === "string") {
71
+ reference = `approval:${part.provider}:${part.data.approval_request_id}`;
72
+ }
73
+ }
74
+ if (origin)
75
+ origins.set(origin, index);
76
+ const from = reference ? origins.get(reference) : undefined;
77
+ if (from !== undefined)
78
+ dependencies.push({ from, to: index });
79
+ }
80
+ });
81
+ let previousCut;
82
+ do {
83
+ previousCut = cut;
84
+ for (const { from, to } of dependencies) {
85
+ if (from < cut && to >= cut)
86
+ cut = from;
87
+ }
88
+ } while (cut !== previousCut);
89
+ if (cut <= systemCount) {
90
+ throw new ValidationError("Agent compaction cannot satisfy its limits without removing protected messages.");
91
+ }
92
+ const compactedMessages = structuredClone(messages.slice(systemCount, cut));
93
+ const retainedMessages = structuredClone(messages.slice(cut));
94
+ const sourceDigest = fingerprintAgentHarness(messages);
95
+ const id = `cmp_${createHash("sha256")
96
+ .update(`${state.runId}\0${beforeStep}\0${sourceDigest}`)
97
+ .digest("hex")}`;
98
+ const result = await options.compactor({
99
+ runId: state.runId,
100
+ agentId: state.agentId,
101
+ scope: state.scope,
102
+ beforeStep,
103
+ context,
104
+ messages: compactedMessages,
105
+ retainedMessages,
106
+ reasons,
107
+ estimatedTokensBefore,
108
+ sourceDigest,
109
+ idempotencyKey: id,
110
+ metadata: state.metadata,
111
+ abortSignal
112
+ });
113
+ const summary = result.summary.trim();
114
+ if (!summary) {
115
+ throw new ValidationError("Agent compactor returned an empty summary.");
116
+ }
117
+ const compacted = [
118
+ ...structuredClone(messages.slice(0, systemCount)),
119
+ createTextMessage("assistant", `[Compacted prior conversation]\n${summary}`),
120
+ ...retainedMessages
121
+ ];
122
+ const estimatedTokensAfter = estimateTokens(compacted);
123
+ if (compacted.length >= messages.length || estimatedTokensAfter >= estimatedTokensBefore) {
124
+ throw new ValidationError("Agent compaction must reduce both message count and estimated input tokens.");
125
+ }
126
+ if (options.maxMessages !== undefined && compacted.length > options.maxMessages) {
127
+ throw new ValidationError("Agent compaction result still exceeds maxMessages.");
128
+ }
129
+ if (options.maxEstimatedInputTokens !== undefined &&
130
+ estimatedTokensAfter > options.maxEstimatedInputTokens) {
131
+ throw new ValidationError("Agent compaction result still exceeds maxEstimatedInputTokens.");
132
+ }
133
+ const resultDigest = fingerprintAgentHarness(compacted);
134
+ return {
135
+ messages: compacted,
136
+ record: {
137
+ id,
138
+ beforeStep,
139
+ createdAt: Date.now(),
140
+ reasons,
141
+ sourceDigest,
142
+ resultDigest,
143
+ summaryDigest: fingerprintAgentHarness(summary),
144
+ summary,
145
+ messageCountBefore: messages.length,
146
+ messageCountAfter: compacted.length,
147
+ compactedMessageCount: compactedMessages.length,
148
+ retainedMessageCount: retainedMessages.length,
149
+ estimatedTokensBefore,
150
+ estimatedTokensAfter,
151
+ usage: result.usage,
152
+ metadata: result.metadata
153
+ }
154
+ };
155
+ };
156
+ //# sourceMappingURL=compaction.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"compaction.js","sourceRoot":"","sources":["../../src/agent/compaction.ts"],"names":[],"mappings":"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"}