psadk 1.4.7 → 1.5.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 (207) hide show
  1. package/README.md +153 -0
  2. package/build/main/index.d.ts +1 -0
  3. package/build/main/lib/PSAI.js +1 -2
  4. package/build/main/lib/PSAgent.d.ts +50 -13
  5. package/build/main/lib/PSAgent.js +179 -502
  6. package/build/main/lib/PSAgentConfig.d.ts +114 -2
  7. package/build/main/lib/PSAgentLogger.js +1 -2
  8. package/build/main/lib/PSAgentTool.d.ts +8 -3
  9. package/build/main/lib/PSAgentTool.js +3 -3
  10. package/build/main/lib/agent-core/package.json +1 -1
  11. package/build/main/lib/agent-core/{agent-loop.d.ts → src/agent-loop.d.ts} +1 -1
  12. package/build/main/lib/agent-core/src/agent-loop.js +514 -0
  13. package/build/{module/lib/agent-core → main/lib/agent-core/src}/agent.d.ts +2 -2
  14. package/build/main/lib/agent-core/src/agent.js +419 -0
  15. package/build/main/lib/agent-core/{harness → src/harness}/agent-harness.d.ts +36 -26
  16. package/build/main/lib/agent-core/src/harness/agent-harness.js +1028 -0
  17. package/build/main/lib/agent-core/src/harness/compaction/branch-summarization.d.ts +52 -0
  18. package/build/main/lib/agent-core/src/harness/compaction/branch-summarization.js +182 -0
  19. package/build/main/lib/agent-core/src/harness/compaction/compaction.d.ts +94 -0
  20. package/build/main/lib/agent-core/src/harness/compaction/compaction.js +550 -0
  21. package/build/main/lib/agent-core/src/harness/compaction/utils.d.ts +24 -0
  22. package/build/main/lib/agent-core/src/harness/compaction/utils.js +131 -0
  23. package/build/main/lib/agent-core/src/harness/env/nodejs.d.ts +50 -0
  24. package/build/main/lib/agent-core/src/harness/env/nodejs.js +494 -0
  25. package/build/main/lib/agent-core/{harness → src/harness}/messages.d.ts +2 -2
  26. package/build/{module/lib/agent-core → main/lib/agent-core/src}/harness/messages.js +1 -1
  27. package/build/main/lib/agent-core/{harness → src/harness}/prompt-templates.d.ts +4 -1
  28. package/build/main/lib/agent-core/src/harness/prompt-templates.js +235 -0
  29. package/build/{module/lib/agent-core/harness/session/repo/jsonl.d.ts → main/lib/agent-core/src/harness/session/jsonl-repo.d.ts} +7 -1
  30. package/build/main/lib/agent-core/src/harness/session/jsonl-repo.js +106 -0
  31. package/build/{module/lib/agent-core/harness/session/storage/jsonl.d.ts → main/lib/agent-core/src/harness/session/jsonl-storage.d.ts} +7 -4
  32. package/build/main/lib/agent-core/src/harness/session/jsonl-storage.js +234 -0
  33. package/build/main/lib/agent-core/{harness/session/repo/memory.d.ts → src/harness/session/memory-repo.d.ts} +1 -1
  34. package/build/main/lib/agent-core/src/harness/session/memory-repo.js +45 -0
  35. package/build/main/lib/agent-core/{harness/session/storage/memory.d.ts → src/harness/session/memory-storage.d.ts} +4 -5
  36. package/build/main/lib/agent-core/src/harness/session/memory-storage.js +116 -0
  37. package/build/main/lib/agent-core/{harness/session/repo/shared.d.ts → src/harness/session/repo-utils.d.ts} +3 -2
  38. package/build/main/lib/agent-core/src/harness/session/repo-utils.js +39 -0
  39. package/build/{module/lib/agent-core → main/lib/agent-core/src}/harness/session/session.d.ts +3 -2
  40. package/build/main/lib/agent-core/src/harness/session/session.js +213 -0
  41. package/build/main/lib/agent-core/src/harness/session/uuid.d.ts +1 -0
  42. package/build/main/lib/agent-core/src/harness/session/uuid.js +54 -0
  43. package/build/main/lib/agent-core/{harness → src/harness}/skills.d.ts +4 -1
  44. package/build/main/lib/agent-core/src/harness/skills.js +353 -0
  45. package/build/main/lib/agent-core/{harness → src/harness}/system-prompt.d.ts +1 -1
  46. package/build/main/lib/agent-core/src/harness/system-prompt.js +30 -0
  47. package/build/{module/lib/agent-core → main/lib/agent-core/src}/harness/types.d.ts +160 -70
  48. package/build/main/lib/agent-core/src/harness/types.js +94 -0
  49. package/build/main/lib/agent-core/{harness → src/harness}/utils/shell-output.d.ts +2 -2
  50. package/build/main/lib/agent-core/src/harness/utils/shell-output.js +134 -0
  51. package/build/main/lib/agent-core/src/harness/utils/truncate.js +294 -0
  52. package/build/main/lib/agent-core/src/index.d.ts +19 -0
  53. package/build/main/lib/agent-core/src/index.js +25 -0
  54. package/build/main/lib/agent-core/src/node.d.ts +2 -0
  55. package/build/main/lib/agent-core/src/node.js +3 -0
  56. package/build/main/lib/agent-core/{proxy.js → src/proxy.js} +3 -2
  57. package/build/{module/lib/agent-core → main/lib/agent-core/src}/types.d.ts +13 -1
  58. package/build/{module/lib/agent-core → main/lib/agent-core/src}/types.js +1 -1
  59. package/build/main/lib/localAgent.d.ts +35 -0
  60. package/build/main/lib/localAgent.js +329 -0
  61. package/build/main/lib/remoteAgent.d.ts +25 -0
  62. package/build/main/lib/remoteAgent.js +311 -0
  63. package/build/main/lib/tools/BraveWebSearchTool.js +1 -2
  64. package/build/main/lib/tools/PSArtifactTool.js +1 -2
  65. package/build/main/lib/tools/PSClarifyTool.js +1 -2
  66. package/build/main/lib/tools/PSCommandLineTool.js +1 -2
  67. package/build/main/lib/tools/PSMemoryTool.js +1 -2
  68. package/build/main/lib/tools/PSReadFileTool.js +1 -2
  69. package/build/main/lib/tools/PSRetrievalTool.js +1 -2
  70. package/build/main/lib/tools/PSSkillTool.js +1 -2
  71. package/build/main/lib/tools/PSSubAgentTool.js +1 -1
  72. package/build/main/lib/tools/PSWriteFileTool.js +1 -2
  73. package/build/main/lib/tools/TodoTool.js +1 -2
  74. package/build/main/lib/utils/debuglogger.js +1 -2
  75. package/build/main/lib/utils/helpers.js +1 -6
  76. package/build/module/index.d.ts +1 -0
  77. package/build/module/lib/PSAI.js +1 -2
  78. package/build/module/lib/PSAgent.d.ts +50 -13
  79. package/build/module/lib/PSAgent.js +179 -502
  80. package/build/module/lib/PSAgentConfig.d.ts +114 -2
  81. package/build/module/lib/PSAgentLogger.js +1 -2
  82. package/build/module/lib/PSAgentTool.d.ts +8 -3
  83. package/build/module/lib/PSAgentTool.js +3 -3
  84. package/build/module/lib/agent-core/{agent-loop.d.ts → src/agent-loop.d.ts} +1 -1
  85. package/build/module/lib/agent-core/src/agent-loop.js +514 -0
  86. package/build/{main/lib/agent-core → module/lib/agent-core/src}/agent.d.ts +2 -2
  87. package/build/module/lib/agent-core/src/agent.js +419 -0
  88. package/build/module/lib/agent-core/{harness → src/harness}/agent-harness.d.ts +36 -26
  89. package/build/module/lib/agent-core/src/harness/agent-harness.js +1028 -0
  90. package/build/module/lib/agent-core/src/harness/compaction/branch-summarization.d.ts +52 -0
  91. package/build/module/lib/agent-core/src/harness/compaction/branch-summarization.js +182 -0
  92. package/build/module/lib/agent-core/src/harness/compaction/compaction.d.ts +94 -0
  93. package/build/module/lib/agent-core/src/harness/compaction/compaction.js +550 -0
  94. package/build/module/lib/agent-core/src/harness/compaction/utils.d.ts +24 -0
  95. package/build/module/lib/agent-core/src/harness/compaction/utils.js +131 -0
  96. package/build/module/lib/agent-core/src/harness/env/nodejs.d.ts +50 -0
  97. package/build/module/lib/agent-core/src/harness/env/nodejs.js +494 -0
  98. package/build/module/lib/agent-core/{harness → src/harness}/messages.d.ts +2 -2
  99. package/build/{main/lib/agent-core → module/lib/agent-core/src}/harness/messages.js +1 -1
  100. package/build/module/lib/agent-core/{harness → src/harness}/prompt-templates.d.ts +4 -1
  101. package/build/module/lib/agent-core/src/harness/prompt-templates.js +235 -0
  102. package/build/{main/lib/agent-core/harness/session/repo/jsonl.d.ts → module/lib/agent-core/src/harness/session/jsonl-repo.d.ts} +7 -1
  103. package/build/module/lib/agent-core/src/harness/session/jsonl-repo.js +106 -0
  104. package/build/{main/lib/agent-core/harness/session/storage/jsonl.d.ts → module/lib/agent-core/src/harness/session/jsonl-storage.d.ts} +7 -4
  105. package/build/module/lib/agent-core/src/harness/session/jsonl-storage.js +234 -0
  106. package/build/module/lib/agent-core/{harness/session/repo/memory.d.ts → src/harness/session/memory-repo.d.ts} +1 -1
  107. package/build/module/lib/agent-core/src/harness/session/memory-repo.js +45 -0
  108. package/build/module/lib/agent-core/{harness/session/storage/memory.d.ts → src/harness/session/memory-storage.d.ts} +4 -5
  109. package/build/module/lib/agent-core/src/harness/session/memory-storage.js +116 -0
  110. package/build/module/lib/agent-core/{harness/session/repo/shared.d.ts → src/harness/session/repo-utils.d.ts} +3 -2
  111. package/build/module/lib/agent-core/src/harness/session/repo-utils.js +39 -0
  112. package/build/{main/lib/agent-core → module/lib/agent-core/src}/harness/session/session.d.ts +3 -2
  113. package/build/module/lib/agent-core/src/harness/session/session.js +213 -0
  114. package/build/module/lib/agent-core/src/harness/session/uuid.d.ts +1 -0
  115. package/build/module/lib/agent-core/src/harness/session/uuid.js +54 -0
  116. package/build/module/lib/agent-core/{harness → src/harness}/skills.d.ts +4 -1
  117. package/build/module/lib/agent-core/src/harness/skills.js +353 -0
  118. package/build/module/lib/agent-core/{harness → src/harness}/system-prompt.d.ts +1 -1
  119. package/build/module/lib/agent-core/src/harness/system-prompt.js +30 -0
  120. package/build/{main/lib/agent-core → module/lib/agent-core/src}/harness/types.d.ts +160 -70
  121. package/build/module/lib/agent-core/src/harness/types.js +94 -0
  122. package/build/module/lib/agent-core/{harness → src/harness}/utils/shell-output.d.ts +2 -2
  123. package/build/module/lib/agent-core/src/harness/utils/shell-output.js +134 -0
  124. package/build/module/lib/agent-core/src/harness/utils/truncate.js +294 -0
  125. package/build/module/lib/agent-core/src/index.d.ts +19 -0
  126. package/build/module/lib/agent-core/src/index.js +25 -0
  127. package/build/module/lib/agent-core/src/node.d.ts +2 -0
  128. package/build/module/lib/agent-core/src/node.js +3 -0
  129. package/build/module/lib/agent-core/{proxy.js → src/proxy.js} +3 -2
  130. package/build/{main/lib/agent-core → module/lib/agent-core/src}/types.d.ts +13 -1
  131. package/build/{main/lib/agent-core → module/lib/agent-core/src}/types.js +1 -1
  132. package/build/module/lib/localAgent.d.ts +35 -0
  133. package/build/module/lib/localAgent.js +329 -0
  134. package/build/module/lib/remoteAgent.d.ts +25 -0
  135. package/build/module/lib/remoteAgent.js +311 -0
  136. package/build/module/lib/tools/BraveWebSearchTool.js +1 -2
  137. package/build/module/lib/tools/PSArtifactTool.js +1 -2
  138. package/build/module/lib/tools/PSClarifyTool.js +1 -2
  139. package/build/module/lib/tools/PSCommandLineTool.js +1 -2
  140. package/build/module/lib/tools/PSMemoryTool.js +1 -2
  141. package/build/module/lib/tools/PSReadFileTool.js +1 -2
  142. package/build/module/lib/tools/PSRetrievalTool.js +1 -2
  143. package/build/module/lib/tools/PSSkillTool.js +1 -2
  144. package/build/module/lib/tools/PSSubAgentTool.js +1 -1
  145. package/build/module/lib/tools/PSWriteFileTool.js +1 -2
  146. package/build/module/lib/tools/TodoTool.js +1 -2
  147. package/build/module/lib/utils/debuglogger.js +1 -2
  148. package/build/module/lib/utils/helpers.js +1 -6
  149. package/package.json +3 -2
  150. package/build/main/lib/agent-core/agent-loop.js +0 -483
  151. package/build/main/lib/agent-core/agent.js +0 -419
  152. package/build/main/lib/agent-core/harness/agent-harness.js +0 -772
  153. package/build/main/lib/agent-core/harness/compaction/branch-summarization.d.ts +0 -87
  154. package/build/main/lib/agent-core/harness/compaction/branch-summarization.js +0 -246
  155. package/build/main/lib/agent-core/harness/compaction/compaction.d.ts +0 -121
  156. package/build/main/lib/agent-core/harness/compaction/compaction.js +0 -637
  157. package/build/main/lib/agent-core/harness/compaction/utils.d.ts +0 -37
  158. package/build/main/lib/agent-core/harness/compaction/utils.js +0 -153
  159. package/build/main/lib/agent-core/harness/env/nodejs.d.ts +0 -43
  160. package/build/main/lib/agent-core/harness/env/nodejs.js +0 -353
  161. package/build/main/lib/agent-core/harness/execution-env.d.ts +0 -3
  162. package/build/main/lib/agent-core/harness/execution-env.js +0 -3
  163. package/build/main/lib/agent-core/harness/prompt-templates.js +0 -204
  164. package/build/main/lib/agent-core/harness/session/repo/jsonl.js +0 -98
  165. package/build/main/lib/agent-core/harness/session/repo/memory.js +0 -46
  166. package/build/main/lib/agent-core/harness/session/repo/shared.js +0 -31
  167. package/build/main/lib/agent-core/harness/session/session.js +0 -199
  168. package/build/main/lib/agent-core/harness/session/storage/jsonl.js +0 -170
  169. package/build/main/lib/agent-core/harness/session/storage/memory.js +0 -94
  170. package/build/main/lib/agent-core/harness/skills.js +0 -266
  171. package/build/main/lib/agent-core/harness/system-prompt.js +0 -30
  172. package/build/main/lib/agent-core/harness/types.js +0 -16
  173. package/build/main/lib/agent-core/harness/utils/shell-output.js +0 -101
  174. package/build/main/lib/agent-core/harness/utils/truncate.js +0 -208
  175. package/build/main/lib/agent-core/index.d.ts +0 -19
  176. package/build/main/lib/agent-core/index.js +0 -25
  177. package/build/module/lib/agent-core/agent-loop.js +0 -483
  178. package/build/module/lib/agent-core/agent.js +0 -419
  179. package/build/module/lib/agent-core/harness/agent-harness.js +0 -772
  180. package/build/module/lib/agent-core/harness/compaction/branch-summarization.d.ts +0 -87
  181. package/build/module/lib/agent-core/harness/compaction/branch-summarization.js +0 -246
  182. package/build/module/lib/agent-core/harness/compaction/compaction.d.ts +0 -121
  183. package/build/module/lib/agent-core/harness/compaction/compaction.js +0 -637
  184. package/build/module/lib/agent-core/harness/compaction/utils.d.ts +0 -37
  185. package/build/module/lib/agent-core/harness/compaction/utils.js +0 -153
  186. package/build/module/lib/agent-core/harness/env/nodejs.d.ts +0 -43
  187. package/build/module/lib/agent-core/harness/env/nodejs.js +0 -353
  188. package/build/module/lib/agent-core/harness/execution-env.d.ts +0 -3
  189. package/build/module/lib/agent-core/harness/execution-env.js +0 -3
  190. package/build/module/lib/agent-core/harness/prompt-templates.js +0 -204
  191. package/build/module/lib/agent-core/harness/session/repo/jsonl.js +0 -98
  192. package/build/module/lib/agent-core/harness/session/repo/memory.js +0 -46
  193. package/build/module/lib/agent-core/harness/session/repo/shared.js +0 -31
  194. package/build/module/lib/agent-core/harness/session/session.js +0 -199
  195. package/build/module/lib/agent-core/harness/session/storage/jsonl.js +0 -170
  196. package/build/module/lib/agent-core/harness/session/storage/memory.js +0 -94
  197. package/build/module/lib/agent-core/harness/skills.js +0 -266
  198. package/build/module/lib/agent-core/harness/system-prompt.js +0 -30
  199. package/build/module/lib/agent-core/harness/types.js +0 -16
  200. package/build/module/lib/agent-core/harness/utils/shell-output.js +0 -101
  201. package/build/module/lib/agent-core/harness/utils/truncate.js +0 -208
  202. package/build/module/lib/agent-core/index.d.ts +0 -19
  203. package/build/module/lib/agent-core/index.js +0 -25
  204. /package/build/main/lib/agent-core/{harness → src/harness}/utils/truncate.d.ts +0 -0
  205. /package/build/main/lib/agent-core/{proxy.d.ts → src/proxy.d.ts} +0 -0
  206. /package/build/module/lib/agent-core/{harness → src/harness}/utils/truncate.d.ts +0 -0
  207. /package/build/module/lib/agent-core/{proxy.d.ts → src/proxy.d.ts} +0 -0
@@ -1,419 +0,0 @@
1
- import { streamSimple, } from '@earendil-works/pi-ai';
2
- import { runAgentLoop, runAgentLoopContinue } from './agent-loop.js';
3
- function defaultConvertToLlm(messages) {
4
- return messages.filter((message) => message.role === 'user' ||
5
- message.role === 'assistant' ||
6
- message.role === 'toolResult');
7
- }
8
- const EMPTY_USAGE = {
9
- input: 0,
10
- output: 0,
11
- cacheRead: 0,
12
- cacheWrite: 0,
13
- totalTokens: 0,
14
- cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0, total: 0 },
15
- };
16
- const DEFAULT_MODEL = {
17
- id: 'unknown',
18
- name: 'unknown',
19
- api: 'unknown',
20
- provider: 'unknown',
21
- baseUrl: '',
22
- reasoning: false,
23
- input: [],
24
- cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 },
25
- contextWindow: 0,
26
- maxTokens: 0,
27
- };
28
- function createMutableAgentState(initialState) {
29
- let tools = initialState?.tools?.slice() ?? [];
30
- let messages = initialState?.messages?.slice() ?? [];
31
- return {
32
- systemPrompt: initialState?.systemPrompt ?? '',
33
- model: initialState?.model ?? DEFAULT_MODEL,
34
- thinkingLevel: initialState?.thinkingLevel ?? 'off',
35
- get tools() {
36
- return tools;
37
- },
38
- set tools(nextTools) {
39
- tools = nextTools.slice();
40
- },
41
- get messages() {
42
- return messages;
43
- },
44
- set messages(nextMessages) {
45
- messages = nextMessages.slice();
46
- },
47
- isStreaming: false,
48
- streamingMessage: undefined,
49
- pendingToolCalls: new Set(),
50
- errorMessage: undefined,
51
- };
52
- }
53
- class PendingMessageQueue {
54
- mode;
55
- messages = [];
56
- constructor(mode) {
57
- this.mode = mode;
58
- }
59
- enqueue(message) {
60
- this.messages.push(message);
61
- }
62
- hasItems() {
63
- return this.messages.length > 0;
64
- }
65
- drain() {
66
- if (this.mode === 'all') {
67
- const drained = this.messages.slice();
68
- this.messages = [];
69
- return drained;
70
- }
71
- const first = this.messages[0];
72
- if (!first) {
73
- return [];
74
- }
75
- this.messages = this.messages.slice(1);
76
- return [first];
77
- }
78
- clear() {
79
- this.messages = [];
80
- }
81
- }
82
- /**
83
- * Stateful wrapper around the low-level agent loop.
84
- *
85
- * `Agent` owns the current transcript, emits lifecycle events, executes tools,
86
- * and exposes queueing APIs for steering and follow-up messages.
87
- */
88
- export class Agent {
89
- _state;
90
- listeners = new Set();
91
- steeringQueue;
92
- followUpQueue;
93
- convertToLlm;
94
- transformContext;
95
- streamFn;
96
- getApiKey;
97
- onPayload;
98
- onResponse;
99
- beforeToolCall;
100
- afterToolCall;
101
- prepareNextTurn;
102
- activeRun;
103
- /** Session identifier forwarded to providers for cache-aware backends. */
104
- sessionId;
105
- /** Optional per-level thinking token budgets forwarded to the stream function. */
106
- thinkingBudgets;
107
- /** Preferred transport forwarded to the stream function. */
108
- transport;
109
- /** Optional cap for provider-requested retry delays. */
110
- maxRetryDelayMs;
111
- /** Tool execution strategy for assistant messages that contain multiple tool calls. */
112
- toolExecution;
113
- constructor(options = {}) {
114
- this._state = createMutableAgentState(options.initialState);
115
- this.convertToLlm = options.convertToLlm ?? defaultConvertToLlm;
116
- this.transformContext = options.transformContext;
117
- this.streamFn = options.streamFn ?? streamSimple;
118
- this.getApiKey = options.getApiKey;
119
- this.onPayload = options.onPayload;
120
- this.onResponse = options.onResponse;
121
- this.beforeToolCall = options.beforeToolCall;
122
- this.afterToolCall = options.afterToolCall;
123
- this.prepareNextTurn = options.prepareNextTurn;
124
- this.steeringQueue = new PendingMessageQueue(options.steeringMode ?? 'one-at-a-time');
125
- this.followUpQueue = new PendingMessageQueue(options.followUpMode ?? 'one-at-a-time');
126
- this.sessionId = options.sessionId;
127
- this.thinkingBudgets = options.thinkingBudgets;
128
- this.transport = options.transport ?? 'auto';
129
- this.maxRetryDelayMs = options.maxRetryDelayMs;
130
- this.toolExecution = options.toolExecution ?? 'parallel';
131
- }
132
- /**
133
- * Subscribe to agent lifecycle events.
134
- *
135
- * Listener promises are awaited in subscription order and are included in
136
- * the current run's settlement. Listeners also receive the active abort
137
- * signal for the current run.
138
- *
139
- * `agent_end` is the final emitted event for a run, but the agent does not
140
- * become idle until all awaited listeners for that event have settled.
141
- */
142
- subscribe(listener) {
143
- this.listeners.add(listener);
144
- return () => this.listeners.delete(listener);
145
- }
146
- /**
147
- * Current agent state.
148
- *
149
- * Assigning `state.tools` or `state.messages` copies the provided top-level array.
150
- */
151
- get state() {
152
- return this._state;
153
- }
154
- /** Controls how queued steering messages are drained. */
155
- set steeringMode(mode) {
156
- this.steeringQueue.mode = mode;
157
- }
158
- get steeringMode() {
159
- return this.steeringQueue.mode;
160
- }
161
- /** Controls how queued follow-up messages are drained. */
162
- set followUpMode(mode) {
163
- this.followUpQueue.mode = mode;
164
- }
165
- get followUpMode() {
166
- return this.followUpQueue.mode;
167
- }
168
- /** Queue a message to be injected after the current assistant turn finishes. */
169
- steer(message) {
170
- this.steeringQueue.enqueue(message);
171
- }
172
- /** Queue a message to run only after the agent would otherwise stop. */
173
- followUp(message) {
174
- this.followUpQueue.enqueue(message);
175
- }
176
- /** Remove all queued steering messages. */
177
- clearSteeringQueue() {
178
- this.steeringQueue.clear();
179
- }
180
- /** Remove all queued follow-up messages. */
181
- clearFollowUpQueue() {
182
- this.followUpQueue.clear();
183
- }
184
- /** Remove all queued steering and follow-up messages. */
185
- clearAllQueues() {
186
- this.clearSteeringQueue();
187
- this.clearFollowUpQueue();
188
- }
189
- /** Returns true when either queue still contains pending messages. */
190
- hasQueuedMessages() {
191
- return this.steeringQueue.hasItems() || this.followUpQueue.hasItems();
192
- }
193
- /** Active abort signal for the current run, if any. */
194
- get signal() {
195
- return this.activeRun?.abortController.signal;
196
- }
197
- /** Abort the current run, if one is active. */
198
- abort() {
199
- this.activeRun?.abortController.abort();
200
- }
201
- /**
202
- * Resolve when the current run and all awaited event listeners have finished.
203
- *
204
- * This resolves after `agent_end` listeners settle.
205
- */
206
- waitForIdle() {
207
- return this.activeRun?.promise ?? Promise.resolve();
208
- }
209
- /** Clear transcript state, runtime state, and queued messages. */
210
- reset() {
211
- this._state.messages = [];
212
- this._state.isStreaming = false;
213
- this._state.streamingMessage = undefined;
214
- this._state.pendingToolCalls = new Set();
215
- this._state.errorMessage = undefined;
216
- this.clearFollowUpQueue();
217
- this.clearSteeringQueue();
218
- }
219
- async prompt(input, images) {
220
- if (this.activeRun) {
221
- throw new Error('Agent is already processing a prompt. Use steer() or followUp() to queue messages, or wait for completion.');
222
- }
223
- const messages = this.normalizePromptInput(input, images);
224
- await this.runPromptMessages(messages);
225
- }
226
- /** Continue from the current transcript. The last message must be a user or tool-result message. */
227
- async continue() {
228
- if (this.activeRun) {
229
- throw new Error('Agent is already processing. Wait for completion before continuing.');
230
- }
231
- const lastMessage = this._state.messages[this._state.messages.length - 1];
232
- if (!lastMessage) {
233
- throw new Error('No messages to continue from');
234
- }
235
- if (lastMessage.role === 'assistant') {
236
- const queuedSteering = this.steeringQueue.drain();
237
- if (queuedSteering.length > 0) {
238
- await this.runPromptMessages(queuedSteering, {
239
- skipInitialSteeringPoll: true,
240
- });
241
- return;
242
- }
243
- const queuedFollowUps = this.followUpQueue.drain();
244
- if (queuedFollowUps.length > 0) {
245
- await this.runPromptMessages(queuedFollowUps);
246
- return;
247
- }
248
- throw new Error('Cannot continue from message role: assistant');
249
- }
250
- await this.runContinuation();
251
- }
252
- normalizePromptInput(input, images) {
253
- if (Array.isArray(input)) {
254
- return input;
255
- }
256
- if (typeof input !== 'string') {
257
- return [input];
258
- }
259
- const content = [
260
- { type: 'text', text: input },
261
- ];
262
- if (images && images.length > 0) {
263
- content.push(...images);
264
- }
265
- return [{ role: 'user', content, timestamp: Date.now() }];
266
- }
267
- async runPromptMessages(messages, options = {}) {
268
- await this.runWithLifecycle(async (signal) => {
269
- await runAgentLoop(messages, this.createContextSnapshot(), this.createLoopConfig(options), (event) => this.processEvents(event), signal, this.streamFn);
270
- });
271
- }
272
- async runContinuation() {
273
- await this.runWithLifecycle(async (signal) => {
274
- await runAgentLoopContinue(this.createContextSnapshot(), this.createLoopConfig(), (event) => this.processEvents(event), signal, this.streamFn);
275
- });
276
- }
277
- createContextSnapshot() {
278
- return {
279
- systemPrompt: this._state.systemPrompt,
280
- messages: this._state.messages.slice(),
281
- tools: this._state.tools.slice(),
282
- };
283
- }
284
- createLoopConfig(options = {}) {
285
- let skipInitialSteeringPoll = options.skipInitialSteeringPoll === true;
286
- return {
287
- model: this._state.model,
288
- reasoning: this._state.thinkingLevel === 'off'
289
- ? undefined
290
- : this._state.thinkingLevel,
291
- sessionId: this.sessionId,
292
- onPayload: this.onPayload,
293
- onResponse: this.onResponse,
294
- transport: this.transport,
295
- thinkingBudgets: this.thinkingBudgets,
296
- maxRetryDelayMs: this.maxRetryDelayMs,
297
- toolExecution: this.toolExecution,
298
- beforeToolCall: this.beforeToolCall,
299
- afterToolCall: this.afterToolCall,
300
- prepareNextTurn: this.prepareNextTurn
301
- ? async () => await this.prepareNextTurn?.(this.signal)
302
- : undefined,
303
- convertToLlm: this.convertToLlm,
304
- transformContext: this.transformContext,
305
- getApiKey: this.getApiKey,
306
- getSteeringMessages: async () => {
307
- if (skipInitialSteeringPoll) {
308
- skipInitialSteeringPoll = false;
309
- return [];
310
- }
311
- return this.steeringQueue.drain();
312
- },
313
- getFollowUpMessages: async () => this.followUpQueue.drain(),
314
- };
315
- }
316
- async runWithLifecycle(executor) {
317
- if (this.activeRun) {
318
- throw new Error('Agent is already processing.');
319
- }
320
- const abortController = new AbortController();
321
- let resolvePromise = () => { };
322
- const promise = new Promise((resolve) => {
323
- resolvePromise = resolve;
324
- });
325
- this.activeRun = { promise, resolve: resolvePromise, abortController };
326
- this._state.isStreaming = true;
327
- this._state.streamingMessage = undefined;
328
- this._state.errorMessage = undefined;
329
- try {
330
- await executor(abortController.signal);
331
- }
332
- catch (error) {
333
- await this.handleRunFailure(error, abortController.signal.aborted);
334
- }
335
- finally {
336
- this.finishRun();
337
- }
338
- }
339
- async handleRunFailure(error, aborted) {
340
- const failureMessage = {
341
- role: 'assistant',
342
- content: [{ type: 'text', text: '' }],
343
- api: this._state.model.api,
344
- provider: this._state.model.provider,
345
- model: this._state.model.id,
346
- usage: EMPTY_USAGE,
347
- stopReason: aborted ? 'aborted' : 'error',
348
- errorMessage: error instanceof Error ? error.message : String(error),
349
- timestamp: Date.now(),
350
- };
351
- await this.processEvents({
352
- type: 'message_start',
353
- message: failureMessage,
354
- });
355
- await this.processEvents({ type: 'message_end', message: failureMessage });
356
- await this.processEvents({
357
- type: 'turn_end',
358
- message: failureMessage,
359
- toolResults: [],
360
- });
361
- await this.processEvents({ type: 'agent_end', messages: [failureMessage] });
362
- }
363
- finishRun() {
364
- this._state.isStreaming = false;
365
- this._state.streamingMessage = undefined;
366
- this._state.pendingToolCalls = new Set();
367
- this.activeRun?.resolve();
368
- this.activeRun = undefined;
369
- }
370
- /**
371
- * Reduce internal state for a loop event, then await listeners.
372
- *
373
- * `agent_end` only means no further loop events will be emitted. The run is
374
- * considered idle later, after all awaited listeners for `agent_end` finish
375
- * and `finishRun()` clears runtime-owned state.
376
- */
377
- async processEvents(event) {
378
- switch (event.type) {
379
- case 'message_start':
380
- this._state.streamingMessage = event.message;
381
- break;
382
- case 'message_update':
383
- this._state.streamingMessage = event.message;
384
- break;
385
- case 'message_end':
386
- this._state.streamingMessage = undefined;
387
- this._state.messages.push(event.message);
388
- break;
389
- case 'tool_execution_start': {
390
- const pendingToolCalls = new Set(this._state.pendingToolCalls);
391
- pendingToolCalls.add(event.toolCallId);
392
- this._state.pendingToolCalls = pendingToolCalls;
393
- break;
394
- }
395
- case 'tool_execution_end': {
396
- const pendingToolCalls = new Set(this._state.pendingToolCalls);
397
- pendingToolCalls.delete(event.toolCallId);
398
- this._state.pendingToolCalls = pendingToolCalls;
399
- break;
400
- }
401
- case 'turn_end':
402
- if (event.message.role === 'assistant' && event.message.errorMessage) {
403
- this._state.errorMessage = event.message.errorMessage;
404
- }
405
- break;
406
- case 'agent_end':
407
- this._state.streamingMessage = undefined;
408
- break;
409
- }
410
- const signal = this.activeRun?.abortController.signal;
411
- if (!signal) {
412
- throw new Error('Agent listener invoked outside active run');
413
- }
414
- for (const listener of this.listeners) {
415
- await listener(event, signal);
416
- }
417
- }
418
- }
419
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWdlbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL2FnZW50LWNvcmUvYWdlbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUtMLFlBQVksR0FJYixNQUFNLHVCQUF1QixDQUFDO0FBRS9CLE9BQU8sRUFBRSxZQUFZLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQWlCckUsU0FBUyxtQkFBbUIsQ0FBQyxRQUF3QjtJQUNuRCxPQUFPLFFBQVEsQ0FBQyxNQUFNLENBQ3BCLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FDVixPQUFPLENBQUMsSUFBSSxLQUFLLE1BQU07UUFDdkIsT0FBTyxDQUFDLElBQUksS0FBSyxXQUFXO1FBQzVCLE9BQU8sQ0FBQyxJQUFJLEtBQUssWUFBWSxDQUNoQyxDQUFDO0FBQ0osQ0FBQztBQUVELE1BQU0sV0FBVyxHQUFHO0lBQ2xCLEtBQUssRUFBRSxDQUFDO0lBQ1IsTUFBTSxFQUFFLENBQUM7SUFDVCxTQUFTLEVBQUUsQ0FBQztJQUNaLFVBQVUsRUFBRSxDQUFDO0lBQ2IsV0FBVyxFQUFFLENBQUM7SUFDZCxJQUFJLEVBQUUsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLE1BQU0sRUFBRSxDQUFDLEVBQUUsU0FBUyxFQUFFLENBQUMsRUFBRSxVQUFVLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUU7Q0FDckUsQ0FBQztBQUVGLE1BQU0sYUFBYSxHQUFHO0lBQ3BCLEVBQUUsRUFBRSxTQUFTO0lBQ2IsSUFBSSxFQUFFLFNBQVM7SUFDZixHQUFHLEVBQUUsU0FBUztJQUNkLFFBQVEsRUFBRSxTQUFTO0lBQ25CLE9BQU8sRUFBRSxFQUFFO0lBQ1gsU0FBUyxFQUFFLEtBQUs7SUFDaEIsS0FBSyxFQUFFLEVBQUU7SUFDVCxJQUFJLEVBQUUsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLE1BQU0sRUFBRSxDQUFDLEVBQUUsU0FBUyxFQUFFLENBQUMsRUFBRSxVQUFVLEVBQUUsQ0FBQyxFQUFFO0lBQzFELGFBQWEsRUFBRSxDQUFDO0lBQ2hCLFNBQVMsRUFBRSxDQUFDO0NBQ1EsQ0FBQztBQWN2QixTQUFTLHVCQUF1QixDQUM5QixZQUtDO0lBRUQsSUFBSSxLQUFLLEdBQUcsWUFBWSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLENBQUM7SUFDL0MsSUFBSSxRQUFRLEdBQUcsWUFBWSxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLENBQUM7SUFFckQsT0FBTztRQUNMLFlBQVksRUFBRSxZQUFZLEVBQUUsWUFBWSxJQUFJLEVBQUU7UUFDOUMsS0FBSyxFQUFFLFlBQVksRUFBRSxLQUFLLElBQUksYUFBYTtRQUMzQyxhQUFhLEVBQUUsWUFBWSxFQUFFLGFBQWEsSUFBSSxLQUFLO1FBQ25ELElBQUksS0FBSztZQUNQLE9BQU8sS0FBSyxDQUFDO1FBQ2YsQ0FBQztRQUNELElBQUksS0FBSyxDQUFDLFNBQTJCO1lBQ25DLEtBQUssR0FBRyxTQUFTLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDNUIsQ0FBQztRQUNELElBQUksUUFBUTtZQUNWLE9BQU8sUUFBUSxDQUFDO1FBQ2xCLENBQUM7UUFDRCxJQUFJLFFBQVEsQ0FBQyxZQUE0QjtZQUN2QyxRQUFRLEdBQUcsWUFBWSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ2xDLENBQUM7UUFDRCxXQUFXLEVBQUUsS0FBSztRQUNsQixnQkFBZ0IsRUFBRSxTQUFTO1FBQzNCLGdCQUFnQixFQUFFLElBQUksR0FBRyxFQUFVO1FBQ25DLFlBQVksRUFBRSxTQUFTO0tBQ3hCLENBQUM7QUFDSixDQUFDO0FBNENELE1BQU0sbUJBQW1CO0lBR0o7SUFGWCxRQUFRLEdBQW1CLEVBQUUsQ0FBQztJQUV0QyxZQUFtQixJQUFlO1FBQWYsU0FBSSxHQUFKLElBQUksQ0FBVztJQUFHLENBQUM7SUFFdEMsT0FBTyxDQUFDLE9BQXFCO1FBQzNCLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQzlCLENBQUM7SUFFRCxRQUFRO1FBQ04sT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7SUFDbEMsQ0FBQztJQUVELEtBQUs7UUFDSCxJQUFJLElBQUksQ0FBQyxJQUFJLEtBQUssS0FBSyxFQUFFLENBQUM7WUFDeEIsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUN0QyxJQUFJLENBQUMsUUFBUSxHQUFHLEVBQUUsQ0FBQztZQUNuQixPQUFPLE9BQU8sQ0FBQztRQUNqQixDQUFDO1FBRUQsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUMvQixJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDWCxPQUFPLEVBQUUsQ0FBQztRQUNaLENBQUM7UUFDRCxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3ZDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNqQixDQUFDO0lBRUQsS0FBSztRQUNILElBQUksQ0FBQyxRQUFRLEdBQUcsRUFBRSxDQUFDO0lBQ3JCLENBQUM7Q0FDRjtBQVFEOzs7OztHQUtHO0FBQ0gsTUFBTSxPQUFPLEtBQUs7SUFDUixNQUFNLENBQW9CO0lBQ2pCLFNBQVMsR0FBRyxJQUFJLEdBQUcsRUFFakMsQ0FBQztJQUNhLGFBQWEsQ0FBc0I7SUFDbkMsYUFBYSxDQUFzQjtJQUU3QyxZQUFZLENBRWlCO0lBQzdCLGdCQUFnQixDQUdNO0lBQ3RCLFFBQVEsQ0FBVztJQUNuQixTQUFTLENBRXNDO0lBQy9DLFNBQVMsQ0FBb0M7SUFDN0MsVUFBVSxDQUFxQztJQUMvQyxjQUFjLENBRzBCO0lBQ3hDLGFBQWEsQ0FHMEI7SUFDdkMsZUFBZSxDQUtSO0lBQ04sU0FBUyxDQUFhO0lBQzlCLDBFQUEwRTtJQUNuRSxTQUFTLENBQVU7SUFDMUIsa0ZBQWtGO0lBQzNFLGVBQWUsQ0FBbUI7SUFDekMsNERBQTREO0lBQ3JELFNBQVMsQ0FBWTtJQUM1Qix3REFBd0Q7SUFDakQsZUFBZSxDQUFVO0lBQ2hDLHVGQUF1RjtJQUNoRixhQUFhLENBQW9CO0lBRXhDLFlBQVksVUFBd0IsRUFBRTtRQUNwQyxJQUFJLENBQUMsTUFBTSxHQUFHLHVCQUF1QixDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUM1RCxJQUFJLENBQUMsWUFBWSxHQUFHLE9BQU8sQ0FBQyxZQUFZLElBQUksbUJBQW1CLENBQUM7UUFDaEUsSUFBSSxDQUFDLGdCQUFnQixHQUFHLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQztRQUNqRCxJQUFJLENBQUMsUUFBUSxHQUFHLE9BQU8sQ0FBQyxRQUFRLElBQUksWUFBWSxDQUFDO1FBQ2pELElBQUksQ0FBQyxTQUFTLEdBQUcsT0FBTyxDQUFDLFNBQVMsQ0FBQztRQUNuQyxJQUFJLENBQUMsU0FBUyxHQUFHLE9BQU8sQ0FBQyxTQUFTLENBQUM7UUFDbkMsSUFBSSxDQUFDLFVBQVUsR0FBRyxPQUFPLENBQUMsVUFBVSxDQUFDO1FBQ3JDLElBQUksQ0FBQyxjQUFjLEdBQUcsT0FBTyxDQUFDLGNBQWMsQ0FBQztRQUM3QyxJQUFJLENBQUMsYUFBYSxHQUFHLE9BQU8sQ0FBQyxhQUFhLENBQUM7UUFDM0MsSUFBSSxDQUFDLGVBQWUsR0FBRyxPQUFPLENBQUMsZUFBZSxDQUFDO1FBQy9DLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxtQkFBbUIsQ0FDMUMsT0FBTyxDQUFDLFlBQVksSUFBSSxlQUFlLENBQ3hDLENBQUM7UUFDRixJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksbUJBQW1CLENBQzFDLE9BQU8sQ0FBQyxZQUFZLElBQUksZUFBZSxDQUN4QyxDQUFDO1FBQ0YsSUFBSSxDQUFDLFNBQVMsR0FBRyxPQUFPLENBQUMsU0FBUyxDQUFDO1FBQ25DLElBQUksQ0FBQyxlQUFlLEdBQUcsT0FBTyxDQUFDLGVBQWUsQ0FBQztRQUMvQyxJQUFJLENBQUMsU0FBUyxHQUFHLE9BQU8sQ0FBQyxTQUFTLElBQUksTUFBTSxDQUFDO1FBQzdDLElBQUksQ0FBQyxlQUFlLEdBQUcsT0FBTyxDQUFDLGVBQWUsQ0FBQztRQUMvQyxJQUFJLENBQUMsYUFBYSxHQUFHLE9BQU8sQ0FBQyxhQUFhLElBQUksVUFBVSxDQUFDO0lBQzNELENBQUM7SUFFRDs7Ozs7Ozs7O09BU0c7SUFDSCxTQUFTLENBQ1AsUUFBMEU7UUFFMUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDN0IsT0FBTyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUMvQyxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILElBQUksS0FBSztRQUNQLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQztJQUNyQixDQUFDO0lBRUQseURBQXlEO0lBQ3pELElBQUksWUFBWSxDQUFDLElBQWU7UUFDOUIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO0lBQ2pDLENBQUM7SUFFRCxJQUFJLFlBQVk7UUFDZCxPQUFPLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDO0lBQ2pDLENBQUM7SUFFRCwwREFBMEQ7SUFDMUQsSUFBSSxZQUFZLENBQUMsSUFBZTtRQUM5QixJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7SUFDakMsQ0FBQztJQUVELElBQUksWUFBWTtRQUNkLE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUM7SUFDakMsQ0FBQztJQUVELGdGQUFnRjtJQUNoRixLQUFLLENBQUMsT0FBcUI7UUFDekIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDdEMsQ0FBQztJQUVELHdFQUF3RTtJQUN4RSxRQUFRLENBQUMsT0FBcUI7UUFDNUIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDdEMsQ0FBQztJQUVELDJDQUEyQztJQUMzQyxrQkFBa0I7UUFDaEIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUM3QixDQUFDO0lBRUQsNENBQTRDO0lBQzVDLGtCQUFrQjtRQUNoQixJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssRUFBRSxDQUFDO0lBQzdCLENBQUM7SUFFRCx5REFBeUQ7SUFDekQsY0FBYztRQUNaLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1FBQzFCLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO0lBQzVCLENBQUM7SUFFRCxzRUFBc0U7SUFDdEUsaUJBQWlCO1FBQ2YsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDLFFBQVEsRUFBRSxJQUFJLElBQUksQ0FBQyxhQUFhLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDeEUsQ0FBQztJQUVELHVEQUF1RDtJQUN2RCxJQUFJLE1BQU07UUFDUixPQUFPLElBQUksQ0FBQyxTQUFTLEVBQUUsZUFBZSxDQUFDLE1BQU0sQ0FBQztJQUNoRCxDQUFDO0lBRUQsK0NBQStDO0lBQy9DLEtBQUs7UUFDSCxJQUFJLENBQUMsU0FBUyxFQUFFLGVBQWUsQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUMxQyxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILFdBQVc7UUFDVCxPQUFPLElBQUksQ0FBQyxTQUFTLEVBQUUsT0FBTyxJQUFJLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUN0RCxDQUFDO0lBRUQsa0VBQWtFO0lBQ2xFLEtBQUs7UUFDSCxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsR0FBRyxFQUFFLENBQUM7UUFDMUIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxXQUFXLEdBQUcsS0FBSyxDQUFDO1FBQ2hDLElBQUksQ0FBQyxNQUFNLENBQUMsZ0JBQWdCLEdBQUcsU0FBUyxDQUFDO1FBQ3pDLElBQUksQ0FBQyxNQUFNLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxHQUFHLEVBQVUsQ0FBQztRQUNqRCxJQUFJLENBQUMsTUFBTSxDQUFDLFlBQVksR0FBRyxTQUFTLENBQUM7UUFDckMsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7UUFDMUIsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7SUFDNUIsQ0FBQztJQUtELEtBQUssQ0FBQyxNQUFNLENBQ1YsS0FBNkMsRUFDN0MsTUFBdUI7UUFFdkIsSUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDbkIsTUFBTSxJQUFJLEtBQUssQ0FDYiw0R0FBNEcsQ0FDN0csQ0FBQztRQUNKLENBQUM7UUFDRCxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsb0JBQW9CLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQzFELE1BQU0sSUFBSSxDQUFDLGlCQUFpQixDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ3pDLENBQUM7SUFFRCxvR0FBb0c7SUFDcEcsS0FBSyxDQUFDLFFBQVE7UUFDWixJQUFJLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUNuQixNQUFNLElBQUksS0FBSyxDQUNiLHFFQUFxRSxDQUN0RSxDQUFDO1FBQ0osQ0FBQztRQUVELE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztRQUMxRSxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDakIsTUFBTSxJQUFJLEtBQUssQ0FBQyw4QkFBOEIsQ0FBQyxDQUFDO1FBQ2xELENBQUM7UUFFRCxJQUFJLFdBQVcsQ0FBQyxJQUFJLEtBQUssV0FBVyxFQUFFLENBQUM7WUFDckMsTUFBTSxjQUFjLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUNsRCxJQUFJLGNBQWMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7Z0JBQzlCLE1BQU0sSUFBSSxDQUFDLGlCQUFpQixDQUFDLGNBQWMsRUFBRTtvQkFDM0MsdUJBQXVCLEVBQUUsSUFBSTtpQkFDOUIsQ0FBQyxDQUFDO2dCQUNILE9BQU87WUFDVCxDQUFDO1lBRUQsTUFBTSxlQUFlLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUNuRCxJQUFJLGVBQWUsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7Z0JBQy9CLE1BQU0sSUFBSSxDQUFDLGlCQUFpQixDQUFDLGVBQWUsQ0FBQyxDQUFDO2dCQUM5QyxPQUFPO1lBQ1QsQ0FBQztZQUVELE1BQU0sSUFBSSxLQUFLLENBQUMsOENBQThDLENBQUMsQ0FBQztRQUNsRSxDQUFDO1FBRUQsTUFBTSxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7SUFDL0IsQ0FBQztJQUVPLG9CQUFvQixDQUMxQixLQUE2QyxFQUM3QyxNQUF1QjtRQUV2QixJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUN6QixPQUFPLEtBQUssQ0FBQztRQUNmLENBQUM7UUFFRCxJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsRUFBRSxDQUFDO1lBQzlCLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNqQixDQUFDO1FBRUQsTUFBTSxPQUFPLEdBQXNDO1lBQ2pELEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFO1NBQzlCLENBQUM7UUFDRixJQUFJLE1BQU0sSUFBSSxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQ2hDLE9BQU8sQ0FBQyxJQUFJLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQztRQUMxQixDQUFDO1FBQ0QsT0FBTyxDQUFDLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDNUQsQ0FBQztJQUVPLEtBQUssQ0FBQyxpQkFBaUIsQ0FDN0IsUUFBd0IsRUFDeEIsVUFBaUQsRUFBRTtRQUVuRCxNQUFNLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLEVBQUUsTUFBTSxFQUFFLEVBQUU7WUFDM0MsTUFBTSxZQUFZLENBQ2hCLFFBQVEsRUFDUixJQUFJLENBQUMscUJBQXFCLEVBQUUsRUFDNUIsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxFQUM5QixDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsRUFDcEMsTUFBTSxFQUNOLElBQUksQ0FBQyxRQUFRLENBQ2QsQ0FBQztRQUNKLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVPLEtBQUssQ0FBQyxlQUFlO1FBQzNCLE1BQU0sSUFBSSxDQUFDLGdCQUFnQixDQUFDLEtBQUssRUFBRSxNQUFNLEVBQUUsRUFBRTtZQUMzQyxNQUFNLG9CQUFvQixDQUN4QixJQUFJLENBQUMscUJBQXFCLEVBQUUsRUFDNUIsSUFBSSxDQUFDLGdCQUFnQixFQUFFLEVBQ3ZCLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxFQUNwQyxNQUFNLEVBQ04sSUFBSSxDQUFDLFFBQVEsQ0FDZCxDQUFDO1FBQ0osQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRU8scUJBQXFCO1FBQzNCLE9BQU87WUFDTCxZQUFZLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxZQUFZO1lBQ3RDLFFBQVEsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxLQUFLLEVBQUU7WUFDdEMsS0FBSyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRTtTQUNqQyxDQUFDO0lBQ0osQ0FBQztJQUVPLGdCQUFnQixDQUN0QixVQUFpRCxFQUFFO1FBRW5ELElBQUksdUJBQXVCLEdBQUcsT0FBTyxDQUFDLHVCQUF1QixLQUFLLElBQUksQ0FBQztRQUN2RSxPQUFPO1lBQ0wsS0FBSyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSztZQUN4QixTQUFTLEVBQ1AsSUFBSSxDQUFDLE1BQU0sQ0FBQyxhQUFhLEtBQUssS0FBSztnQkFDakMsQ0FBQyxDQUFDLFNBQVM7Z0JBQ1gsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsYUFBYTtZQUMvQixTQUFTLEVBQUUsSUFBSSxDQUFDLFNBQVM7WUFDekIsU0FBUyxFQUFFLElBQUksQ0FBQyxTQUFTO1lBQ3pCLFVBQVUsRUFBRSxJQUFJLENBQUMsVUFBVTtZQUMzQixTQUFTLEVBQUUsSUFBSSxDQUFDLFNBQVM7WUFDekIsZUFBZSxFQUFFLElBQUksQ0FBQyxlQUFlO1lBQ3JDLGVBQWUsRUFBRSxJQUFJLENBQUMsZUFBZTtZQUNyQyxhQUFhLEVBQUUsSUFBSSxDQUFDLGFBQWE7WUFDakMsY0FBYyxFQUFFLElBQUksQ0FBQyxjQUFjO1lBQ25DLGFBQWEsRUFBRSxJQUFJLENBQUMsYUFBYTtZQUNqQyxlQUFlLEVBQUUsSUFBSSxDQUFDLGVBQWU7Z0JBQ25DLENBQUMsQ0FBQyxLQUFLLElBQUksRUFBRSxDQUFDLE1BQU0sSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUM7Z0JBQ3ZELENBQUMsQ0FBQyxTQUFTO1lBQ2IsWUFBWSxFQUFFLElBQUksQ0FBQyxZQUFZO1lBQy9CLGdCQUFnQixFQUFFLElBQUksQ0FBQyxnQkFBZ0I7WUFDdkMsU0FBUyxFQUFFLElBQUksQ0FBQyxTQUFTO1lBQ3pCLG1CQUFtQixFQUFFLEtBQUssSUFBSSxFQUFFO2dCQUM5QixJQUFJLHVCQUF1QixFQUFFLENBQUM7b0JBQzVCLHVCQUF1QixHQUFHLEtBQUssQ0FBQztvQkFDaEMsT0FBTyxFQUFFLENBQUM7Z0JBQ1osQ0FBQztnQkFDRCxPQUFPLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDcEMsQ0FBQztZQUNELG1CQUFtQixFQUFFLEtBQUssSUFBSSxFQUFFLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLEVBQUU7U0FDNUQsQ0FBQztJQUNKLENBQUM7SUFFTyxLQUFLLENBQUMsZ0JBQWdCLENBQzVCLFFBQWdEO1FBRWhELElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQ25CLE1BQU0sSUFBSSxLQUFLLENBQUMsOEJBQThCLENBQUMsQ0FBQztRQUNsRCxDQUFDO1FBRUQsTUFBTSxlQUFlLEdBQUcsSUFBSSxlQUFlLEVBQUUsQ0FBQztRQUM5QyxJQUFJLGNBQWMsR0FBRyxHQUFHLEVBQUUsR0FBRSxDQUFDLENBQUM7UUFDOUIsTUFBTSxPQUFPLEdBQUcsSUFBSSxPQUFPLENBQU8sQ0FBQyxPQUFPLEVBQUUsRUFBRTtZQUM1QyxjQUFjLEdBQUcsT0FBTyxDQUFDO1FBQzNCLENBQUMsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLFNBQVMsR0FBRyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsY0FBYyxFQUFFLGVBQWUsRUFBRSxDQUFDO1FBRXZFLElBQUksQ0FBQyxNQUFNLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQztRQUMvQixJQUFJLENBQUMsTUFBTSxDQUFDLGdCQUFnQixHQUFHLFNBQVMsQ0FBQztRQUN6QyxJQUFJLENBQUMsTUFBTSxDQUFDLFlBQVksR0FBRyxTQUFTLENBQUM7UUFFckMsSUFBSSxDQUFDO1lBQ0gsTUFBTSxRQUFRLENBQUMsZUFBZSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3pDLENBQUM7UUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1lBQ2YsTUFBTSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxFQUFFLGVBQWUsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDckUsQ0FBQztnQkFBUyxDQUFDO1lBQ1QsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBQ25CLENBQUM7SUFDSCxDQUFDO0lBRU8sS0FBSyxDQUFDLGdCQUFnQixDQUM1QixLQUFjLEVBQ2QsT0FBZ0I7UUFFaEIsTUFBTSxjQUFjLEdBQUc7WUFDckIsSUFBSSxFQUFFLFdBQVc7WUFDakIsT0FBTyxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsQ0FBQztZQUNyQyxHQUFHLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsR0FBRztZQUMxQixRQUFRLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsUUFBUTtZQUNwQyxLQUFLLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUMzQixLQUFLLEVBQUUsV0FBVztZQUNsQixVQUFVLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLE9BQU87WUFDekMsWUFBWSxFQUFFLEtBQUssWUFBWSxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUM7WUFDcEUsU0FBUyxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUU7U0FDQyxDQUFDO1FBQ3pCLE1BQU0sSUFBSSxDQUFDLGFBQWEsQ0FBQztZQUN2QixJQUFJLEVBQUUsZUFBZTtZQUNyQixPQUFPLEVBQUUsY0FBYztTQUN4QixDQUFDLENBQUM7UUFDSCxNQUFNLElBQUksQ0FBQyxhQUFhLENBQUMsRUFBRSxJQUFJLEVBQUUsYUFBYSxFQUFFLE9BQU8sRUFBRSxjQUFjLEVBQUUsQ0FBQyxDQUFDO1FBQzNFLE1BQU0sSUFBSSxDQUFDLGFBQWEsQ0FBQztZQUN2QixJQUFJLEVBQUUsVUFBVTtZQUNoQixPQUFPLEVBQUUsY0FBYztZQUN2QixXQUFXLEVBQUUsRUFBRTtTQUNoQixDQUFDLENBQUM7UUFDSCxNQUFNLElBQUksQ0FBQyxhQUFhLENBQUMsRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFLFFBQVEsRUFBRSxDQUFDLGNBQWMsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUM5RSxDQUFDO0lBRU8sU0FBUztRQUNmLElBQUksQ0FBQyxNQUFNLENBQUMsV0FBVyxHQUFHLEtBQUssQ0FBQztRQUNoQyxJQUFJLENBQUMsTUFBTSxDQUFDLGdCQUFnQixHQUFHLFNBQVMsQ0FBQztRQUN6QyxJQUFJLENBQUMsTUFBTSxDQUFDLGdCQUFnQixHQUFHLElBQUksR0FBRyxFQUFVLENBQUM7UUFDakQsSUFBSSxDQUFDLFNBQVMsRUFBRSxPQUFPLEVBQUUsQ0FBQztRQUMxQixJQUFJLENBQUMsU0FBUyxHQUFHLFNBQVMsQ0FBQztJQUM3QixDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0ssS0FBSyxDQUFDLGFBQWEsQ0FBQyxLQUFpQjtRQUMzQyxRQUFRLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUNuQixLQUFLLGVBQWU7Z0JBQ2xCLElBQUksQ0FBQyxNQUFNLENBQUMsZ0JBQWdCLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQztnQkFDN0MsTUFBTTtZQUVSLEtBQUssZ0JBQWdCO2dCQUNuQixJQUFJLENBQUMsTUFBTSxDQUFDLGdCQUFnQixHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUM7Z0JBQzdDLE1BQU07WUFFUixLQUFLLGFBQWE7Z0JBQ2hCLElBQUksQ0FBQyxNQUFNLENBQUMsZ0JBQWdCLEdBQUcsU0FBUyxDQUFDO2dCQUN6QyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO2dCQUN6QyxNQUFNO1lBRVIsS0FBSyxzQkFBc0IsQ0FBQyxDQUFDLENBQUM7Z0JBQzVCLE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxHQUFHLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO2dCQUMvRCxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDO2dCQUN2QyxJQUFJLENBQUMsTUFBTSxDQUFDLGdCQUFnQixHQUFHLGdCQUFnQixDQUFDO2dCQUNoRCxNQUFNO1lBQ1IsQ0FBQztZQUVELEtBQUssb0JBQW9CLENBQUMsQ0FBQyxDQUFDO2dCQUMxQixNQUFNLGdCQUFnQixHQUFHLElBQUksR0FBRyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztnQkFDL0QsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQztnQkFDMUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxnQkFBZ0IsR0FBRyxnQkFBZ0IsQ0FBQztnQkFDaEQsTUFBTTtZQUNSLENBQUM7WUFFRCxLQUFLLFVBQVU7Z0JBQ2IsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksS0FBSyxXQUFXLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxZQUFZLEVBQUUsQ0FBQztvQkFDckUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxZQUFZLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUM7Z0JBQ3hELENBQUM7Z0JBQ0QsTUFBTTtZQUVSLEtBQUssV0FBVztnQkFDZCxJQUFJLENBQUMsTUFBTSxDQUFDLGdCQUFnQixHQUFHLFNBQVMsQ0FBQztnQkFDekMsTUFBTTtRQUNWLENBQUM7UUFFRCxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsU0FBUyxFQUFFLGVBQWUsQ0FBQyxNQUFNLENBQUM7UUFDdEQsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ1osTUFBTSxJQUFJLEtBQUssQ0FBQywyQ0FBMkMsQ0FBQyxDQUFDO1FBQy9ELENBQUM7UUFDRCxLQUFLLE1BQU0sUUFBUSxJQUFJLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUN0QyxNQUFNLFFBQVEsQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDaEMsQ0FBQztJQUNILENBQUM7Q0FDRiJ9