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
@@ -0,0 +1,419 @@
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
+ messages = [];
55
+ mode;
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWdlbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvbGliL2FnZW50LWNvcmUvc3JjL2FnZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFLTCxZQUFZLEdBSWIsTUFBTSx1QkFBdUIsQ0FBQztBQUUvQixPQUFPLEVBQUUsWUFBWSxFQUFFLG9CQUFvQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFvQnJFLFNBQVMsbUJBQW1CLENBQUMsUUFBd0I7SUFDbkQsT0FBTyxRQUFRLENBQUMsTUFBTSxDQUNwQixDQUFDLE9BQU8sRUFBRSxFQUFFLENBQ1YsT0FBTyxDQUFDLElBQUksS0FBSyxNQUFNO1FBQ3ZCLE9BQU8sQ0FBQyxJQUFJLEtBQUssV0FBVztRQUM1QixPQUFPLENBQUMsSUFBSSxLQUFLLFlBQVksQ0FDaEMsQ0FBQztBQUNKLENBQUM7QUFFRCxNQUFNLFdBQVcsR0FBRztJQUNsQixLQUFLLEVBQUUsQ0FBQztJQUNSLE1BQU0sRUFBRSxDQUFDO0lBQ1QsU0FBUyxFQUFFLENBQUM7SUFDWixVQUFVLEVBQUUsQ0FBQztJQUNiLFdBQVcsRUFBRSxDQUFDO0lBQ2QsSUFBSSxFQUFFLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxNQUFNLEVBQUUsQ0FBQyxFQUFFLFNBQVMsRUFBRSxDQUFDLEVBQUUsVUFBVSxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFO0NBQ3JFLENBQUM7QUFFRixNQUFNLGFBQWEsR0FBRztJQUNwQixFQUFFLEVBQUUsU0FBUztJQUNiLElBQUksRUFBRSxTQUFTO0lBQ2YsR0FBRyxFQUFFLFNBQVM7SUFDZCxRQUFRLEVBQUUsU0FBUztJQUNuQixPQUFPLEVBQUUsRUFBRTtJQUNYLFNBQVMsRUFBRSxLQUFLO0lBQ2hCLEtBQUssRUFBRSxFQUFFO0lBQ1QsSUFBSSxFQUFFLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxNQUFNLEVBQUUsQ0FBQyxFQUFFLFNB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
@@ -1,40 +1,46 @@
1
1
  import { type AssistantMessage, type ImageContent, type Model } from '@earendil-works/pi-ai';
2
- import { Agent, type QueueMode } from '../agent.js';
3
- import type { AgentMessage, AgentTool, ThinkingLevel } from '../types.js';
4
- import type { AbortResult, AgentHarnessEvent, AgentHarnessEventResultMap, AgentHarnessOptions, AgentHarnessOwnEvent, AgentHarnessResources, AgentHarnessStreamOptions, ExecutionEnv, NavigateTreeResult, PromptTemplate, Skill } from './types.js';
2
+ import type { AgentMessage, AgentTool, QueueMode, ThinkingLevel } from '../types.ts';
3
+ import type { AbortResult, AgentHarnessEvent, AgentHarnessEventResultMap, AgentHarnessOptions, AgentHarnessOwnEvent, AgentHarnessResources, AgentHarnessStreamOptions, ExecutionEnv, NavigateTreeResult, PromptTemplate, Skill } from './types.ts';
5
4
  export declare class AgentHarness<TSkill extends Skill = Skill, TPromptTemplate extends PromptTemplate = PromptTemplate, TTool extends AgentTool = AgentTool> {
6
- readonly agent: Agent;
7
5
  readonly env: ExecutionEnv;
8
6
  private session;
9
- private model;
10
- private thinkingLevel;
11
- private activeToolNames;
12
- private nextTurnQueue;
13
7
  private phase;
14
- private steerQueue;
15
- private followUpQueue;
8
+ private runAbortController?;
9
+ private runPromise?;
16
10
  private pendingSessionWrites;
17
- private resources;
18
- private streamOptions;
19
- private appliedStreamOptions;
20
- private appliedSessionId?;
11
+ private model;
12
+ private thinkingLevel;
21
13
  private systemPrompt;
14
+ private streamOptions;
22
15
  private getApiKeyAndHeaders?;
16
+ private resources;
23
17
  private tools;
24
- private listeners;
25
- private hooks;
18
+ private activeToolNames;
19
+ private steerQueue;
20
+ private steeringQueueMode;
21
+ private followUpQueue;
22
+ private followUpQueueMode;
23
+ private nextTurnQueue;
24
+ private handlers;
26
25
  constructor(options: AgentHarnessOptions<TSkill, TPromptTemplate, TTool>);
26
+ private getHandlers;
27
27
  private emitOwn;
28
28
  private emitAny;
29
29
  private emitHook;
30
30
  private emitBeforeProviderRequest;
31
31
  private emitBeforeProviderPayload;
32
32
  private emitQueueUpdate;
33
+ private startRunPromise;
33
34
  private createTurnState;
34
- private applyTurnState;
35
+ private createContext;
36
+ private createStreamFn;
37
+ private drainQueuedMessages;
38
+ private createLoopConfig;
39
+ private validateUniqueNames;
35
40
  private validateToolNames;
36
41
  private flushPendingSessionWrites;
37
42
  private handleAgentEvent;
43
+ private emitRunFailure;
38
44
  private executeTurn;
39
45
  prompt(text: string, options?: {
40
46
  images?: ImageContent[];
@@ -43,13 +49,13 @@ export declare class AgentHarness<TSkill extends Skill = Skill, TPromptTemplate
43
49
  promptFromTemplate(name: string, args?: string[]): Promise<AssistantMessage>;
44
50
  steer(text: string, options?: {
45
51
  images?: ImageContent[];
46
- }): void;
52
+ }): Promise<void>;
47
53
  followUp(text: string, options?: {
48
54
  images?: ImageContent[];
49
- }): void;
55
+ }): Promise<void>;
50
56
  nextTurn(text: string, options?: {
51
57
  images?: ImageContent[];
52
- }): void;
58
+ }): Promise<void>;
53
59
  appendMessage(message: AgentMessage): Promise<void>;
54
60
  compact(customInstructions?: string): Promise<{
55
61
  summary: string;
@@ -63,18 +69,22 @@ export declare class AgentHarness<TSkill extends Skill = Skill, TPromptTemplate
63
69
  replaceInstructions?: boolean;
64
70
  label?: string;
65
71
  }): Promise<NavigateTreeResult>;
72
+ getModel(): Model<any>;
66
73
  setModel(model: Model<any>): Promise<void>;
74
+ getThinkingLevel(): ThinkingLevel;
67
75
  setThinkingLevel(level: ThinkingLevel): Promise<void>;
76
+ getTools(): TTool[];
77
+ setTools(tools: TTool[], activeToolNames?: string[]): Promise<void>;
78
+ getActiveTools(): TTool[];
68
79
  setActiveTools(toolNames: string[]): Promise<void>;
69
- get steeringMode(): QueueMode;
70
- set steeringMode(mode: QueueMode);
71
- get followUpMode(): QueueMode;
72
- set followUpMode(mode: QueueMode);
80
+ getSteeringMode(): QueueMode;
81
+ setSteeringMode(mode: QueueMode): Promise<void>;
82
+ getFollowUpMode(): QueueMode;
83
+ setFollowUpMode(mode: QueueMode): Promise<void>;
73
84
  getResources(): AgentHarnessResources<TSkill, TPromptTemplate>;
74
85
  setResources(resources: AgentHarnessResources<TSkill, TPromptTemplate>): Promise<void>;
75
86
  getStreamOptions(): AgentHarnessStreamOptions;
76
- setStreamOptions(streamOptions: AgentHarnessStreamOptions): void;
77
- setTools(tools: TTool[], activeToolNames?: string[]): Promise<void>;
87
+ setStreamOptions(streamOptions: AgentHarnessStreamOptions): Promise<void>;
78
88
  abort(): Promise<AbortResult>;
79
89
  waitForIdle(): Promise<void>;
80
90
  subscribe(listener: (event: AgentHarnessEvent<TSkill, TPromptTemplate>, signal?: AbortSignal) => Promise<void> | void): () => void;