psadk 1.4.8 → 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 (205) hide show
  1. package/build/main/index.d.ts +1 -0
  2. package/build/main/lib/PSAI.js +1 -2
  3. package/build/main/lib/PSAgent.d.ts +46 -44
  4. package/build/main/lib/PSAgent.js +176 -961
  5. package/build/main/lib/PSAgentConfig.d.ts +110 -26
  6. package/build/main/lib/PSAgentLogger.js +1 -2
  7. package/build/main/lib/PSAgentTool.d.ts +8 -3
  8. package/build/main/lib/PSAgentTool.js +3 -3
  9. package/build/main/lib/agent-core/{agent-loop.d.ts → src/agent-loop.d.ts} +1 -1
  10. package/build/main/lib/agent-core/src/agent-loop.js +514 -0
  11. package/build/{module/lib/agent-core → main/lib/agent-core/src}/agent.d.ts +2 -2
  12. package/build/main/lib/agent-core/src/agent.js +419 -0
  13. package/build/main/lib/agent-core/{harness → src/harness}/agent-harness.d.ts +36 -26
  14. package/build/main/lib/agent-core/src/harness/agent-harness.js +1028 -0
  15. package/build/main/lib/agent-core/src/harness/compaction/branch-summarization.d.ts +52 -0
  16. package/build/main/lib/agent-core/src/harness/compaction/branch-summarization.js +182 -0
  17. package/build/main/lib/agent-core/src/harness/compaction/compaction.d.ts +94 -0
  18. package/build/main/lib/agent-core/src/harness/compaction/compaction.js +550 -0
  19. package/build/main/lib/agent-core/src/harness/compaction/utils.d.ts +24 -0
  20. package/build/main/lib/agent-core/src/harness/compaction/utils.js +131 -0
  21. package/build/main/lib/agent-core/src/harness/env/nodejs.d.ts +50 -0
  22. package/build/main/lib/agent-core/src/harness/env/nodejs.js +494 -0
  23. package/build/main/lib/agent-core/{harness → src/harness}/messages.d.ts +2 -2
  24. package/build/{module/lib/agent-core → main/lib/agent-core/src}/harness/messages.js +1 -1
  25. package/build/main/lib/agent-core/{harness → src/harness}/prompt-templates.d.ts +4 -1
  26. package/build/main/lib/agent-core/src/harness/prompt-templates.js +235 -0
  27. 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
  28. package/build/main/lib/agent-core/src/harness/session/jsonl-repo.js +106 -0
  29. 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
  30. package/build/main/lib/agent-core/src/harness/session/jsonl-storage.js +234 -0
  31. package/build/main/lib/agent-core/{harness/session/repo/memory.d.ts → src/harness/session/memory-repo.d.ts} +1 -1
  32. package/build/main/lib/agent-core/src/harness/session/memory-repo.js +45 -0
  33. package/build/main/lib/agent-core/{harness/session/storage/memory.d.ts → src/harness/session/memory-storage.d.ts} +4 -5
  34. package/build/main/lib/agent-core/src/harness/session/memory-storage.js +116 -0
  35. package/build/main/lib/agent-core/{harness/session/repo/shared.d.ts → src/harness/session/repo-utils.d.ts} +3 -2
  36. package/build/main/lib/agent-core/src/harness/session/repo-utils.js +39 -0
  37. package/build/{module/lib/agent-core → main/lib/agent-core/src}/harness/session/session.d.ts +3 -2
  38. package/build/main/lib/agent-core/src/harness/session/session.js +213 -0
  39. package/build/main/lib/agent-core/src/harness/session/uuid.d.ts +1 -0
  40. package/build/main/lib/agent-core/src/harness/session/uuid.js +54 -0
  41. package/build/main/lib/agent-core/{harness → src/harness}/skills.d.ts +4 -1
  42. package/build/main/lib/agent-core/src/harness/skills.js +353 -0
  43. package/build/main/lib/agent-core/{harness → src/harness}/system-prompt.d.ts +1 -1
  44. package/build/main/lib/agent-core/src/harness/system-prompt.js +30 -0
  45. package/build/{module/lib/agent-core → main/lib/agent-core/src}/harness/types.d.ts +160 -70
  46. package/build/main/lib/agent-core/src/harness/types.js +94 -0
  47. package/build/main/lib/agent-core/{harness → src/harness}/utils/shell-output.d.ts +2 -2
  48. package/build/main/lib/agent-core/src/harness/utils/shell-output.js +134 -0
  49. package/build/main/lib/agent-core/src/harness/utils/truncate.js +294 -0
  50. package/build/main/lib/agent-core/src/index.d.ts +19 -0
  51. package/build/main/lib/agent-core/src/index.js +25 -0
  52. package/build/main/lib/agent-core/src/node.d.ts +2 -0
  53. package/build/main/lib/agent-core/src/node.js +3 -0
  54. package/build/main/lib/agent-core/{proxy.js → src/proxy.js} +3 -2
  55. package/build/{module/lib/agent-core → main/lib/agent-core/src}/types.d.ts +13 -1
  56. package/build/{module/lib/agent-core → main/lib/agent-core/src}/types.js +1 -1
  57. package/build/main/lib/localAgent.d.ts +35 -0
  58. package/build/main/lib/localAgent.js +329 -0
  59. package/build/main/lib/remoteAgent.d.ts +25 -0
  60. package/build/main/lib/remoteAgent.js +311 -0
  61. package/build/main/lib/tools/BraveWebSearchTool.js +1 -2
  62. package/build/main/lib/tools/PSArtifactTool.js +1 -2
  63. package/build/main/lib/tools/PSClarifyTool.js +1 -2
  64. package/build/main/lib/tools/PSCommandLineTool.js +1 -2
  65. package/build/main/lib/tools/PSMemoryTool.js +1 -2
  66. package/build/main/lib/tools/PSReadFileTool.js +1 -2
  67. package/build/main/lib/tools/PSRetrievalTool.js +1 -2
  68. package/build/main/lib/tools/PSSkillTool.js +1 -2
  69. package/build/main/lib/tools/PSSubAgentTool.js +1 -1
  70. package/build/main/lib/tools/PSWriteFileTool.js +1 -2
  71. package/build/main/lib/tools/TodoTool.js +1 -2
  72. package/build/main/lib/utils/debuglogger.js +1 -2
  73. package/build/main/lib/utils/helpers.js +1 -6
  74. package/build/module/index.d.ts +1 -0
  75. package/build/module/lib/PSAI.js +1 -2
  76. package/build/module/lib/PSAgent.d.ts +46 -44
  77. package/build/module/lib/PSAgent.js +176 -961
  78. package/build/module/lib/PSAgentConfig.d.ts +110 -26
  79. package/build/module/lib/PSAgentLogger.js +1 -2
  80. package/build/module/lib/PSAgentTool.d.ts +8 -3
  81. package/build/module/lib/PSAgentTool.js +3 -3
  82. package/build/module/lib/agent-core/{agent-loop.d.ts → src/agent-loop.d.ts} +1 -1
  83. package/build/module/lib/agent-core/src/agent-loop.js +514 -0
  84. package/build/{main/lib/agent-core → module/lib/agent-core/src}/agent.d.ts +2 -2
  85. package/build/module/lib/agent-core/src/agent.js +419 -0
  86. package/build/module/lib/agent-core/{harness → src/harness}/agent-harness.d.ts +36 -26
  87. package/build/module/lib/agent-core/src/harness/agent-harness.js +1028 -0
  88. package/build/module/lib/agent-core/src/harness/compaction/branch-summarization.d.ts +52 -0
  89. package/build/module/lib/agent-core/src/harness/compaction/branch-summarization.js +182 -0
  90. package/build/module/lib/agent-core/src/harness/compaction/compaction.d.ts +94 -0
  91. package/build/module/lib/agent-core/src/harness/compaction/compaction.js +550 -0
  92. package/build/module/lib/agent-core/src/harness/compaction/utils.d.ts +24 -0
  93. package/build/module/lib/agent-core/src/harness/compaction/utils.js +131 -0
  94. package/build/module/lib/agent-core/src/harness/env/nodejs.d.ts +50 -0
  95. package/build/module/lib/agent-core/src/harness/env/nodejs.js +494 -0
  96. package/build/module/lib/agent-core/{harness → src/harness}/messages.d.ts +2 -2
  97. package/build/{main/lib/agent-core → module/lib/agent-core/src}/harness/messages.js +1 -1
  98. package/build/module/lib/agent-core/{harness → src/harness}/prompt-templates.d.ts +4 -1
  99. package/build/module/lib/agent-core/src/harness/prompt-templates.js +235 -0
  100. 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
  101. package/build/module/lib/agent-core/src/harness/session/jsonl-repo.js +106 -0
  102. 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
  103. package/build/module/lib/agent-core/src/harness/session/jsonl-storage.js +234 -0
  104. package/build/module/lib/agent-core/{harness/session/repo/memory.d.ts → src/harness/session/memory-repo.d.ts} +1 -1
  105. package/build/module/lib/agent-core/src/harness/session/memory-repo.js +45 -0
  106. package/build/module/lib/agent-core/{harness/session/storage/memory.d.ts → src/harness/session/memory-storage.d.ts} +4 -5
  107. package/build/module/lib/agent-core/src/harness/session/memory-storage.js +116 -0
  108. package/build/module/lib/agent-core/{harness/session/repo/shared.d.ts → src/harness/session/repo-utils.d.ts} +3 -2
  109. package/build/module/lib/agent-core/src/harness/session/repo-utils.js +39 -0
  110. package/build/{main/lib/agent-core → module/lib/agent-core/src}/harness/session/session.d.ts +3 -2
  111. package/build/module/lib/agent-core/src/harness/session/session.js +213 -0
  112. package/build/module/lib/agent-core/src/harness/session/uuid.d.ts +1 -0
  113. package/build/module/lib/agent-core/src/harness/session/uuid.js +54 -0
  114. package/build/module/lib/agent-core/{harness → src/harness}/skills.d.ts +4 -1
  115. package/build/module/lib/agent-core/src/harness/skills.js +353 -0
  116. package/build/module/lib/agent-core/{harness → src/harness}/system-prompt.d.ts +1 -1
  117. package/build/module/lib/agent-core/src/harness/system-prompt.js +30 -0
  118. package/build/{main/lib/agent-core → module/lib/agent-core/src}/harness/types.d.ts +160 -70
  119. package/build/module/lib/agent-core/src/harness/types.js +94 -0
  120. package/build/module/lib/agent-core/{harness → src/harness}/utils/shell-output.d.ts +2 -2
  121. package/build/module/lib/agent-core/src/harness/utils/shell-output.js +134 -0
  122. package/build/module/lib/agent-core/src/harness/utils/truncate.js +294 -0
  123. package/build/module/lib/agent-core/src/index.d.ts +19 -0
  124. package/build/module/lib/agent-core/src/index.js +25 -0
  125. package/build/module/lib/agent-core/src/node.d.ts +2 -0
  126. package/build/module/lib/agent-core/src/node.js +3 -0
  127. package/build/module/lib/agent-core/{proxy.js → src/proxy.js} +3 -2
  128. package/build/{main/lib/agent-core → module/lib/agent-core/src}/types.d.ts +13 -1
  129. package/build/{main/lib/agent-core → module/lib/agent-core/src}/types.js +1 -1
  130. package/build/module/lib/localAgent.d.ts +35 -0
  131. package/build/module/lib/localAgent.js +329 -0
  132. package/build/module/lib/remoteAgent.d.ts +25 -0
  133. package/build/module/lib/remoteAgent.js +311 -0
  134. package/build/module/lib/tools/BraveWebSearchTool.js +1 -2
  135. package/build/module/lib/tools/PSArtifactTool.js +1 -2
  136. package/build/module/lib/tools/PSClarifyTool.js +1 -2
  137. package/build/module/lib/tools/PSCommandLineTool.js +1 -2
  138. package/build/module/lib/tools/PSMemoryTool.js +1 -2
  139. package/build/module/lib/tools/PSReadFileTool.js +1 -2
  140. package/build/module/lib/tools/PSRetrievalTool.js +1 -2
  141. package/build/module/lib/tools/PSSkillTool.js +1 -2
  142. package/build/module/lib/tools/PSSubAgentTool.js +1 -1
  143. package/build/module/lib/tools/PSWriteFileTool.js +1 -2
  144. package/build/module/lib/tools/TodoTool.js +1 -2
  145. package/build/module/lib/utils/debuglogger.js +1 -2
  146. package/build/module/lib/utils/helpers.js +1 -6
  147. package/package.json +2 -1
  148. package/build/main/lib/agent-core/agent-loop.js +0 -483
  149. package/build/main/lib/agent-core/agent.js +0 -419
  150. package/build/main/lib/agent-core/harness/agent-harness.js +0 -772
  151. package/build/main/lib/agent-core/harness/compaction/branch-summarization.d.ts +0 -87
  152. package/build/main/lib/agent-core/harness/compaction/branch-summarization.js +0 -246
  153. package/build/main/lib/agent-core/harness/compaction/compaction.d.ts +0 -121
  154. package/build/main/lib/agent-core/harness/compaction/compaction.js +0 -637
  155. package/build/main/lib/agent-core/harness/compaction/utils.d.ts +0 -37
  156. package/build/main/lib/agent-core/harness/compaction/utils.js +0 -153
  157. package/build/main/lib/agent-core/harness/env/nodejs.d.ts +0 -43
  158. package/build/main/lib/agent-core/harness/env/nodejs.js +0 -353
  159. package/build/main/lib/agent-core/harness/execution-env.d.ts +0 -3
  160. package/build/main/lib/agent-core/harness/execution-env.js +0 -3
  161. package/build/main/lib/agent-core/harness/prompt-templates.js +0 -204
  162. package/build/main/lib/agent-core/harness/session/repo/jsonl.js +0 -98
  163. package/build/main/lib/agent-core/harness/session/repo/memory.js +0 -46
  164. package/build/main/lib/agent-core/harness/session/repo/shared.js +0 -31
  165. package/build/main/lib/agent-core/harness/session/session.js +0 -199
  166. package/build/main/lib/agent-core/harness/session/storage/jsonl.js +0 -170
  167. package/build/main/lib/agent-core/harness/session/storage/memory.js +0 -94
  168. package/build/main/lib/agent-core/harness/skills.js +0 -266
  169. package/build/main/lib/agent-core/harness/system-prompt.js +0 -30
  170. package/build/main/lib/agent-core/harness/types.js +0 -16
  171. package/build/main/lib/agent-core/harness/utils/shell-output.js +0 -101
  172. package/build/main/lib/agent-core/harness/utils/truncate.js +0 -208
  173. package/build/main/lib/agent-core/index.d.ts +0 -19
  174. package/build/main/lib/agent-core/index.js +0 -25
  175. package/build/module/lib/agent-core/agent-loop.js +0 -483
  176. package/build/module/lib/agent-core/agent.js +0 -419
  177. package/build/module/lib/agent-core/harness/agent-harness.js +0 -772
  178. package/build/module/lib/agent-core/harness/compaction/branch-summarization.d.ts +0 -87
  179. package/build/module/lib/agent-core/harness/compaction/branch-summarization.js +0 -246
  180. package/build/module/lib/agent-core/harness/compaction/compaction.d.ts +0 -121
  181. package/build/module/lib/agent-core/harness/compaction/compaction.js +0 -637
  182. package/build/module/lib/agent-core/harness/compaction/utils.d.ts +0 -37
  183. package/build/module/lib/agent-core/harness/compaction/utils.js +0 -153
  184. package/build/module/lib/agent-core/harness/env/nodejs.d.ts +0 -43
  185. package/build/module/lib/agent-core/harness/env/nodejs.js +0 -353
  186. package/build/module/lib/agent-core/harness/execution-env.d.ts +0 -3
  187. package/build/module/lib/agent-core/harness/execution-env.js +0 -3
  188. package/build/module/lib/agent-core/harness/prompt-templates.js +0 -204
  189. package/build/module/lib/agent-core/harness/session/repo/jsonl.js +0 -98
  190. package/build/module/lib/agent-core/harness/session/repo/memory.js +0 -46
  191. package/build/module/lib/agent-core/harness/session/repo/shared.js +0 -31
  192. package/build/module/lib/agent-core/harness/session/session.js +0 -199
  193. package/build/module/lib/agent-core/harness/session/storage/jsonl.js +0 -170
  194. package/build/module/lib/agent-core/harness/session/storage/memory.js +0 -94
  195. package/build/module/lib/agent-core/harness/skills.js +0 -266
  196. package/build/module/lib/agent-core/harness/system-prompt.js +0 -30
  197. package/build/module/lib/agent-core/harness/types.js +0 -16
  198. package/build/module/lib/agent-core/harness/utils/shell-output.js +0 -101
  199. package/build/module/lib/agent-core/harness/utils/truncate.js +0 -208
  200. package/build/module/lib/agent-core/index.d.ts +0 -19
  201. package/build/module/lib/agent-core/index.js +0 -25
  202. /package/build/main/lib/agent-core/{harness → src/harness}/utils/truncate.d.ts +0 -0
  203. /package/build/main/lib/agent-core/{proxy.d.ts → src/proxy.d.ts} +0 -0
  204. /package/build/module/lib/agent-core/{harness → src/harness}/utils/truncate.d.ts +0 -0
  205. /package/build/module/lib/agent-core/{proxy.d.ts → src/proxy.d.ts} +0 -0
@@ -0,0 +1,294 @@
1
+ /**
2
+ * Shared truncation utilities for tool outputs.
3
+ *
4
+ * Truncation is based on two independent limits - whichever is hit first wins:
5
+ * - Line limit (default: 2000 lines)
6
+ * - Byte limit (default: 50KB)
7
+ *
8
+ * Never returns partial lines (except bash tail truncation edge case).
9
+ */
10
+ export const DEFAULT_MAX_LINES = 2000;
11
+ export const DEFAULT_MAX_BYTES = 50 * 1024; // 50KB
12
+ export const GREP_MAX_LINE_LENGTH = 500; // Max chars per grep match line
13
+ const runtimeBuffer = globalThis.Buffer;
14
+ // eslint-disable-next-line no-control-regex
15
+ const nonAsciiPattern = /[^\x00-\x7f]/;
16
+ function utf8ByteLength(content) {
17
+ if (runtimeBuffer)
18
+ return runtimeBuffer.byteLength(content, 'utf8');
19
+ const firstNonAscii = content.search(nonAsciiPattern);
20
+ if (firstNonAscii === -1)
21
+ return content.length;
22
+ let bytes = firstNonAscii;
23
+ for (let i = firstNonAscii; i < content.length; i++) {
24
+ const code = content.charCodeAt(i);
25
+ if (code <= 0x7f) {
26
+ bytes += 1;
27
+ }
28
+ else if (code <= 0x7ff) {
29
+ bytes += 2;
30
+ }
31
+ else if (code >= 0xd800 && code <= 0xdbff && i + 1 < content.length) {
32
+ const next = content.charCodeAt(i + 1);
33
+ if (next >= 0xdc00 && next <= 0xdfff) {
34
+ bytes += 4;
35
+ i++;
36
+ }
37
+ else {
38
+ bytes += 3;
39
+ }
40
+ }
41
+ else {
42
+ bytes += 3;
43
+ }
44
+ }
45
+ return bytes;
46
+ }
47
+ function replaceUnpairedSurrogates(content) {
48
+ let output = '';
49
+ for (let i = 0; i < content.length; i++) {
50
+ const code = content.charCodeAt(i);
51
+ if (code >= 0xd800 && code <= 0xdbff) {
52
+ if (i + 1 < content.length) {
53
+ const next = content.charCodeAt(i + 1);
54
+ if (next >= 0xdc00 && next <= 0xdfff) {
55
+ output += content[i] + content[i + 1];
56
+ i++;
57
+ continue;
58
+ }
59
+ }
60
+ output += '�';
61
+ }
62
+ else if (code >= 0xdc00 && code <= 0xdfff) {
63
+ output += '�';
64
+ }
65
+ else {
66
+ output += content[i];
67
+ }
68
+ }
69
+ return output;
70
+ }
71
+ /**
72
+ * Format bytes as human-readable size.
73
+ */
74
+ export function formatSize(bytes) {
75
+ if (bytes < 1024) {
76
+ return `${bytes}B`;
77
+ }
78
+ else if (bytes < 1024 * 1024) {
79
+ return `${(bytes / 1024).toFixed(1)}KB`;
80
+ }
81
+ else {
82
+ return `${(bytes / (1024 * 1024)).toFixed(1)}MB`;
83
+ }
84
+ }
85
+ /**
86
+ * Truncate content from the head (keep first N lines/bytes).
87
+ * Suitable for file reads where you want to see the beginning.
88
+ *
89
+ * Never returns partial lines. If first line exceeds byte limit,
90
+ * returns empty content with firstLineExceedsLimit=true.
91
+ */
92
+ export function truncateHead(content, options = {}) {
93
+ const maxLines = options.maxLines ?? DEFAULT_MAX_LINES;
94
+ const maxBytes = options.maxBytes ?? DEFAULT_MAX_BYTES;
95
+ const totalBytes = utf8ByteLength(content);
96
+ const lines = content.split('\n');
97
+ const totalLines = lines.length;
98
+ // Check if no truncation needed
99
+ if (totalLines <= maxLines && totalBytes <= maxBytes) {
100
+ return {
101
+ content,
102
+ truncated: false,
103
+ truncatedBy: null,
104
+ totalLines,
105
+ totalBytes,
106
+ outputLines: totalLines,
107
+ outputBytes: totalBytes,
108
+ lastLinePartial: false,
109
+ firstLineExceedsLimit: false,
110
+ maxLines,
111
+ maxBytes,
112
+ };
113
+ }
114
+ // Check if first line alone exceeds byte limit
115
+ const firstLineBytes = utf8ByteLength(lines[0]);
116
+ if (firstLineBytes > maxBytes) {
117
+ return {
118
+ content: '',
119
+ truncated: true,
120
+ truncatedBy: 'bytes',
121
+ totalLines,
122
+ totalBytes,
123
+ outputLines: 0,
124
+ outputBytes: 0,
125
+ lastLinePartial: false,
126
+ firstLineExceedsLimit: true,
127
+ maxLines,
128
+ maxBytes,
129
+ };
130
+ }
131
+ // Collect complete lines that fit
132
+ const outputLinesArr = [];
133
+ let outputBytesCount = 0;
134
+ let truncatedBy = 'lines';
135
+ for (let i = 0; i < lines.length && i < maxLines; i++) {
136
+ const line = lines[i];
137
+ const lineBytes = utf8ByteLength(line) + (i > 0 ? 1 : 0); // +1 for newline
138
+ if (outputBytesCount + lineBytes > maxBytes) {
139
+ truncatedBy = 'bytes';
140
+ break;
141
+ }
142
+ outputLinesArr.push(line);
143
+ outputBytesCount += lineBytes;
144
+ }
145
+ // If we exited due to line limit
146
+ if (outputLinesArr.length >= maxLines && outputBytesCount <= maxBytes) {
147
+ truncatedBy = 'lines';
148
+ }
149
+ const outputContent = outputLinesArr.join('\n');
150
+ const finalOutputBytes = utf8ByteLength(outputContent);
151
+ return {
152
+ content: outputContent,
153
+ truncated: true,
154
+ truncatedBy,
155
+ totalLines,
156
+ totalBytes,
157
+ outputLines: outputLinesArr.length,
158
+ outputBytes: finalOutputBytes,
159
+ lastLinePartial: false,
160
+ firstLineExceedsLimit: false,
161
+ maxLines,
162
+ maxBytes,
163
+ };
164
+ }
165
+ /**
166
+ * Truncate content from the tail (keep last N lines/bytes).
167
+ * Suitable for bash output where you want to see the end (errors, final results).
168
+ *
169
+ * May return partial first line if the last line of original content exceeds byte limit.
170
+ */
171
+ export function truncateTail(content, options = {}) {
172
+ const maxLines = options.maxLines ?? DEFAULT_MAX_LINES;
173
+ const maxBytes = options.maxBytes ?? DEFAULT_MAX_BYTES;
174
+ const totalBytes = utf8ByteLength(content);
175
+ const lines = content.split('\n');
176
+ if (lines.length > 1 && lines[lines.length - 1] === '')
177
+ lines.pop();
178
+ const totalLines = lines.length;
179
+ // Check if no truncation needed
180
+ if (totalLines <= maxLines && totalBytes <= maxBytes) {
181
+ return {
182
+ content,
183
+ truncated: false,
184
+ truncatedBy: null,
185
+ totalLines,
186
+ totalBytes,
187
+ outputLines: totalLines,
188
+ outputBytes: totalBytes,
189
+ lastLinePartial: false,
190
+ firstLineExceedsLimit: false,
191
+ maxLines,
192
+ maxBytes,
193
+ };
194
+ }
195
+ // Work backwards from the end
196
+ const outputLinesArr = [];
197
+ let outputBytesCount = 0;
198
+ let truncatedBy = 'lines';
199
+ let lastLinePartial = false;
200
+ for (let i = lines.length - 1; i >= 0 && outputLinesArr.length < maxLines; i--) {
201
+ const line = lines[i];
202
+ const lineBytes = utf8ByteLength(line) + (outputLinesArr.length > 0 ? 1 : 0); // +1 for newline
203
+ if (outputBytesCount + lineBytes > maxBytes) {
204
+ truncatedBy = 'bytes';
205
+ // Edge case: if we haven't added ANY lines yet and this line exceeds maxBytes,
206
+ // take the end of the line (partial)
207
+ if (outputLinesArr.length === 0) {
208
+ const truncatedLine = truncateStringToBytesFromEnd(line, maxBytes);
209
+ outputLinesArr.unshift(truncatedLine);
210
+ outputBytesCount = utf8ByteLength(truncatedLine);
211
+ lastLinePartial = true;
212
+ }
213
+ break;
214
+ }
215
+ outputLinesArr.unshift(line);
216
+ outputBytesCount += lineBytes;
217
+ }
218
+ // If we exited due to line limit
219
+ if (outputLinesArr.length >= maxLines && outputBytesCount <= maxBytes) {
220
+ truncatedBy = 'lines';
221
+ }
222
+ const outputContent = outputLinesArr.join('\n');
223
+ const finalOutputBytes = utf8ByteLength(outputContent);
224
+ return {
225
+ content: outputContent,
226
+ truncated: true,
227
+ truncatedBy,
228
+ totalLines,
229
+ totalBytes,
230
+ outputLines: outputLinesArr.length,
231
+ outputBytes: finalOutputBytes,
232
+ lastLinePartial,
233
+ firstLineExceedsLimit: false,
234
+ maxLines,
235
+ maxBytes,
236
+ };
237
+ }
238
+ /**
239
+ * Truncate a string to fit within a byte limit (from the end).
240
+ * Handles multi-byte UTF-8 characters correctly.
241
+ */
242
+ function truncateStringToBytesFromEnd(str, maxBytes) {
243
+ if (maxBytes <= 0)
244
+ return '';
245
+ let outputBytes = 0;
246
+ let start = str.length;
247
+ let needsReplacement = false;
248
+ for (let i = str.length; i > 0;) {
249
+ let characterStart = i - 1;
250
+ const code = str.charCodeAt(characterStart);
251
+ let characterBytes;
252
+ let unpairedSurrogate = false;
253
+ if (code >= 0xdc00 && code <= 0xdfff && characterStart > 0) {
254
+ const previous = str.charCodeAt(characterStart - 1);
255
+ if (previous >= 0xd800 && previous <= 0xdbff) {
256
+ characterStart--;
257
+ characterBytes = 4;
258
+ }
259
+ else {
260
+ characterBytes = 3;
261
+ unpairedSurrogate = true;
262
+ }
263
+ }
264
+ else if (code >= 0xd800 && code <= 0xdfff) {
265
+ characterBytes = 3;
266
+ unpairedSurrogate = true;
267
+ }
268
+ else {
269
+ characterBytes = code <= 0x7f ? 1 : code <= 0x7ff ? 2 : 3;
270
+ }
271
+ if (outputBytes + characterBytes > maxBytes)
272
+ break;
273
+ outputBytes += characterBytes;
274
+ start = characterStart;
275
+ needsReplacement ||= unpairedSurrogate;
276
+ i = characterStart;
277
+ }
278
+ const output = str.slice(start);
279
+ return needsReplacement ? replaceUnpairedSurrogates(output) : output;
280
+ }
281
+ /**
282
+ * Truncate a single line to max characters, adding [truncated] suffix.
283
+ * Used for grep match lines.
284
+ */
285
+ export function truncateLine(line, maxChars = GREP_MAX_LINE_LENGTH) {
286
+ if (line.length <= maxChars) {
287
+ return { text: line, wasTruncated: false };
288
+ }
289
+ return {
290
+ text: `${line.slice(0, maxChars)}... [truncated]`,
291
+ wasTruncated: true,
292
+ };
293
+ }
294
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJ1bmNhdGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL2FnZW50LWNvcmUvc3JjL2hhcm5lc3MvdXRpbHMvdHJ1bmNhdGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7O0dBUUc7QUFFSCxNQUFNLENBQUMsTUFBTSxpQkFBaUIsR0FBRyxJQUFJLENBQUM7QUFDdEMsTUFBTSxDQUFDLE1BQU0saUJBQWlCLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDLE9BQU87QUFDbkQsTUFBTSxDQUFDLE1BQU0sb0JBQW9CLEdBQUcsR0FBRyxDQUFDLENBQUMsZ0NBQWdDO0FBc0N6RSxNQUFNLGFBQWEsR0FBSSxVQUF5QyxDQUFDLE1BQU0sQ0FBQztBQUN4RSw0Q0FBNEM7QUFDNUMsTUFBTSxlQUFlLEdBQUcsY0FBYyxDQUFDO0FBRXZDLFNBQVMsY0FBYyxDQUFDLE9BQWU7SUFDckMsSUFBSSxhQUFhO1FBQUUsT0FBTyxhQUFhLENBQUMsVUFBVSxDQUFDLE9BQU8sRUFBRSxNQUFNLENBQUMsQ0FBQztJQUVwRSxNQUFNLGFBQWEsR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDLGVBQWUsQ0FBQyxDQUFDO0lBQ3RELElBQUksYUFBYSxLQUFLLENBQUMsQ0FBQztRQUFFLE9BQU8sT0FBTyxDQUFDLE1BQU0sQ0FBQztJQUVoRCxJQUFJLEtBQUssR0FBRyxhQUFhLENBQUM7SUFDMUIsS0FBSyxJQUFJLENBQUMsR0FBRyxhQUFhLEVBQUUsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztRQUNwRCxNQUFNLElBQUksR0FBRyxPQUFPLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ25DLElBQUksSUFBSSxJQUFJLElBQUksRUFBRSxDQUFDO1lBQ2pCLEtBQUssSUFBSSxDQUFDLENBQUM7UUFDYixDQUFDO2FBQU0sSUFBSSxJQUFJLElBQUks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
@@ -0,0 +1,19 @@
1
+ export * from './agent.ts';
2
+ export * from './agent-loop.ts';
3
+ export * from './harness/agent-harness.ts';
4
+ export { type BranchPreparation, type BranchSummaryDetails, type CollectEntriesResult, collectEntriesForBranchSummary, generateBranchSummary, prepareBranchEntries, } from './harness/compaction/branch-summarization.ts';
5
+ export { calculateContextTokens, compact, DEFAULT_COMPACTION_SETTINGS, estimateContextTokens, estimateTokens, findCutPoint, findTurnStartIndex, generateSummary, getLastAssistantUsage, prepareCompaction, serializeConversation, shouldCompact, } from './harness/compaction/compaction.ts';
6
+ export * from './harness/messages.ts';
7
+ export * from './harness/prompt-templates.ts';
8
+ export * from './harness/session/jsonl-repo.ts';
9
+ export * from './harness/session/memory-repo.ts';
10
+ export * from './harness/session/repo-utils.ts';
11
+ export * from './harness/session/session.ts';
12
+ export { uuidv7 } from './harness/session/uuid.ts';
13
+ export * from './harness/skills.ts';
14
+ export * from './harness/system-prompt.ts';
15
+ export * from './harness/types.ts';
16
+ export * from './harness/utils/shell-output.ts';
17
+ export * from './harness/utils/truncate.ts';
18
+ export * from './proxy.ts';
19
+ export * from './types.ts';
@@ -0,0 +1,25 @@
1
+ // Core Agent
2
+ export * from "./agent.js";
3
+ // Loop functions
4
+ export * from "./agent-loop.js";
5
+ export * from "./harness/agent-harness.js";
6
+ export { collectEntriesForBranchSummary, generateBranchSummary, prepareBranchEntries, } from "./harness/compaction/branch-summarization.js";
7
+ export { calculateContextTokens, compact, DEFAULT_COMPACTION_SETTINGS, estimateContextTokens, estimateTokens, findCutPoint, findTurnStartIndex, generateSummary, getLastAssistantUsage, prepareCompaction, serializeConversation, shouldCompact, } from "./harness/compaction/compaction.js";
8
+ export * from "./harness/messages.js";
9
+ export * from "./harness/prompt-templates.js";
10
+ export * from "./harness/session/jsonl-repo.js";
11
+ export * from "./harness/session/memory-repo.js";
12
+ export * from "./harness/session/repo-utils.js";
13
+ export * from "./harness/session/session.js";
14
+ export { uuidv7 } from "./harness/session/uuid.js";
15
+ export * from "./harness/skills.js";
16
+ export * from "./harness/system-prompt.js";
17
+ // Harness
18
+ export * from "./harness/types.js";
19
+ export * from "./harness/utils/shell-output.js";
20
+ export * from "./harness/utils/truncate.js";
21
+ // Proxy utilities
22
+ export * from "./proxy.js";
23
+ // Types
24
+ export * from "./types.js";
25
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvbGliL2FnZW50LWNvcmUvc3JjL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGFBQWE7QUFDYixjQUFjLFlBQVksQ0FBQztBQUMzQixpQkFBaUI7QUFDakIsY0FBYyxpQkFBaUIsQ0FBQztBQUNoQyxjQUFjLDRCQUE0QixDQUFDO0FBQzNDLE9BQU8sRUFJTCw4QkFBOEIsRUFDOUIscUJBQXFCLEVBQ3JCLG9CQUFvQixHQUNyQixNQUFNLDhDQUE4QyxDQUFDO0FBQ3RELE9BQU8sRUFDTCxzQkFBc0IsRUFDdEIsT0FBTyxFQUNQLDJCQUEyQixFQUMzQixxQkFBcUIsRUFDckIsY0FBYyxFQUNkLFlBQVksRUFDWixrQkFBa0IsRUFDbEIsZUFBZSxFQUNmLHFCQUFxQixFQUNyQixpQkFBaUIsRUFDakIscUJBQXFCLEVBQ3JCLGFBQWEsR0FDZCxNQUFNLG9DQUFvQyxDQUFDO0FBQzVDLGNBQWMsdUJBQXVCLENBQUM7QUFDdEMsY0FBYywrQkFBK0IsQ0FBQztBQUM5QyxjQUFjLGlDQUFpQyxDQUFDO0FBQ2hELGNBQWMsa0NBQWtDLENBQUM7QUFDakQsY0FBYyxpQ0FBaUMsQ0FBQztBQUNoRCxjQUFjLDhCQUE4QixDQUFDO0FBQzdDLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUNuRCxjQUFjLHFCQUFxQixDQUFDO0FBQ3BDLGNBQWMsNEJBQTRCLENBQUM7QUFDM0MsVUFBVTtBQUNWLGNBQWMsb0JBQW9CLENBQUM7QUFDbkMsY0FBYyxpQ0FBaUMsQ0FBQztBQUNoRCxjQUFjLDZCQUE2QixDQUFDO0FBQzVDLGtCQUFrQjtBQUNsQixjQUFjLFlBQVksQ0FBQztBQUMzQixRQUFRO0FBQ1IsY0FBYyxZQUFZLENBQUMifQ==
@@ -0,0 +1,2 @@
1
+ export { NodeExecutionEnv } from './harness/env/nodejs.ts';
2
+ export * from './index.ts';
@@ -0,0 +1,3 @@
1
+ export { NodeExecutionEnv } from "./harness/env/nodejs.js";
2
+ export * from "./index.js";
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm9kZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvYWdlbnQtY29yZS9zcmMvbm9kZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUMzRCxjQUFjLFlBQVksQ0FBQyJ9
@@ -285,10 +285,11 @@ function processProxyEvent(proxyEvent, partial) {
285
285
  partial.usage = proxyEvent.usage;
286
286
  return { type: 'error', reason: proxyEvent.reason, error: partial };
287
287
  default: {
288
- void proxyEvent;
288
+ const _exhaustiveCheck = proxyEvent;
289
+ void _exhaustiveCheck;
289
290
  console.warn(`Unhandled proxy event type: ${proxyEvent.type}`);
290
291
  return undefined;
291
292
  }
292
293
  }
293
294
  }
294
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJveHkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL2FnZW50LWNvcmUvcHJveHkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7OztHQUdHO0FBRUgsMkNBQTJDO0FBQzNDLE9BQU8sRUFJTCxXQUFXLEVBRVgsa0JBQWtCLEdBSW5CLE1BQU0sdUJBQXVCLENBQUM7QUFFL0IsdURBQXVEO0FBQ3ZELE1BQU0sdUJBQXdCLFNBQVEsV0FHckM7SUFDQztRQUNFLEtBQUssQ0FDSCxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLElBQUksS0FBSyxNQUFNLElBQUksS0FBSyxDQUFDLElBQUksS0FBSyxPQUFPLEVBQzFELENBQUMsS0FBSyxFQUFFLEVBQUU7WUFDUixJQUFJLEtBQUssQ0FBQyxJQUFJLEtBQUssTUFBTTtnQkFBRSxPQUFPLEtBQUssQ0FBQyxPQUFPLENBQUM7WUFDaEQsSUFBSSxLQUFLLENBQUMsSUFBSSxLQUFLLE9BQU87Z0JBQUUsT0FBTyxLQUFLLENBQUMsS0FBSyxDQUFDO1lBQy9DLE1BQU0sSUFBSSxLQUFLLENBQUMsdUJBQXVCLENBQUMsQ0FBQztRQUMzQyxDQUFDLENBQ0YsQ0FBQztJQUNKLENBQUM7Q0FDRjtBQXdERDs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBa0JHO0FBQ0gsU0FBUyx3QkFBd0IsQ0FDL0IsT0FBMkI7SUFFM0IsT0FBTztRQUNMLFdBQVcsRUFBRSxPQUFPLENBQUMsV0FBVztRQUNoQyxTQUFTLEVBQUUsT0FBTyxDQUFDLFNBQVM7UUFDNUIsU0FBUyxFQUFFLE9BQU8sQ0FBQyxTQUFTO1FBQzVCLGNBQWMsRUFBRSxPQUFPLENBQUMsY0FBYztRQUN0QyxTQUFTLEVBQUUsT0FBTyxDQUFDLFNBQVM7UUFDNUIsT0FBTyxFQUFFLE9BQU8sQ0FBQyxPQUFPO1FBQ3hCLFFBQVEsRUFBRSxPQUFPLENBQUMsUUFBUTtRQUMxQixTQUFTLEVBQUUsT0FBTyxDQUFDLFNBQVM7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
295
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJveHkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvbGliL2FnZW50LWNvcmUvc3JjL3Byb3h5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7R0FHRztBQUVILDJDQUEyQztBQUMzQyxPQUFPLEVBSUwsV0FBVyxFQUVYLGtCQUFrQixHQUluQixNQUFNLHVCQUF1QixDQUFDO0FBRS9CLHVEQUF1RDtBQUN2RCxNQUFNLHVCQUF3QixTQUFRLFdBR3JDO0lBQ0M7UUFDRSxLQUFLLENBQ0gsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxJQUFJLEtBQUssTUFBTSxJQUFJLEtBQUssQ0FBQyxJQUFJLEtBQUssT0FBTyxFQUMxRCxDQUFDLEtBQUssRUFBRSxFQUFFO1lBQ1IsSUFBSSxLQUFLLENBQUMsSUFBSSxLQUFLLE1BQU07Z0JBQUUsT0FBTyxLQUFLLENBQUMsT0FBTyxDQUFDO1lBQ2hELElBQUksS0FBSyxDQUFDLElBQUksS0FBSyxPQUFPO2dCQUFFLE9BQU8sS0FBSyxDQUFDLEtBQUssQ0FBQztZQUMvQyxNQUFNLElBQUksS0FBSyxDQUFDLHVCQUF1QixDQUFDLENBQUM7UUFDM0MsQ0FBQyxDQUNGLENBQUM7SUFDSixDQUFDO0NBQ0Y7QUF3REQ7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQWtCRztBQUNILFNBQVMsd0JBQXdCLENBQy9CLE9BQTJCO0lBRTNCLE9BQU87UUFDTCxXQUFXLEVBQUUsT0FBTyxDQUFDLFdBQVc7UUFDaEMsU0FBUyxFQUFFLE9BQU8sQ0FBQyxTQUFTO1FBQzVCLFNBQVMsRUFBRSxPQUFPLENBQUMsU0FBUztRQUM1QixjQUFjLEVBQUUsT0FBTyxDQUFDLGNBQWM7UUFDdEMsU0FBUyxFQUFFLE9BQU8sQ0FBQyxTQUFTO1FBQzVCLE9BQU8sRUFBRSxPQUFPLENBQUMsT0FBTztRQUN4QixRQUFRLEVBQUUsT0FBTyxDQUFDLFFBQVE7UUFDMUIsU0FBUyxFQUFFLE9BQU8sQ0FB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
@@ -19,6 +19,13 @@ export type StreamFn = (...args: Parameters<typeof streamSimple>) => ReturnType<
19
19
  * while tool-result message artifacts are emitted later in assistant source order.
20
20
  */
21
21
  export type ToolExecutionMode = 'sequential' | 'parallel';
22
+ /**
23
+ * Controls how many queued user messages are injected when the agent loop reaches a queue drain point.
24
+ *
25
+ * - "all": drain and inject every queued message at that point.
26
+ * - "one-at-a-time": drain and inject only the oldest queued message, leaving the rest queued for later drain points.
27
+ */
28
+ export type QueueMode = 'all' | 'one-at-a-time';
22
29
  /** A single tool call content block emitted by an assistant message. */
23
30
  export type AgentToolCall = Extract<AssistantMessage['content'][number], {
24
31
  type: 'toolCall';
@@ -306,7 +313,12 @@ export interface AgentToolResult<T> {
306
313
  */
307
314
  terminate?: boolean;
308
315
  }
309
- /** Callback used by tools to stream partial execution updates. */
316
+ /**
317
+ * Callback used by tools to stream partial execution updates.
318
+ *
319
+ * The callback is scoped to the current `execute()` invocation. Calls made after
320
+ * the tool promise settles are ignored.
321
+ */
310
322
  export type AgentToolUpdateCallback<T = any> = (partialResult: AgentToolResult<T>) => void;
311
323
  /** Tool definition used by the agent runtime. */
312
324
  export interface AgentTool<TParameters extends TSchema = TSchema, TDetails = any> extends Tool<TParameters> {
@@ -1,2 +1,2 @@
1
1
  export {};
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL2FnZW50LWNvcmUvdHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiJ9
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvbGliL2FnZW50LWNvcmUvc3JjL3R5cGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIifQ==
@@ -0,0 +1,35 @@
1
+ /**
2
+ * Local agent helpers — plain functions, no class.
3
+ *
4
+ * Three responsibilities extracted from PSAgent so the class stays lean:
5
+ * 1. buildLocalAgent — construct an agent-core Agent from PSAgentLocalConfig
6
+ * 2. convertTools — map PSAgentTool[] → agent-core tool descriptors
7
+ * 3. executeLocalAgent — bridge a local Agent run into an A2A event bus
8
+ *
9
+ * Nothing here is exported from the public barrel. Consumers interact with
10
+ * local mode exclusively through PSAgent's public API.
11
+ */
12
+ import type { ExecutionEventBus, RequestContext } from '@a2a-js/sdk/server';
13
+ import type { PSAgentLocalConfig } from './PSAgentConfig';
14
+ import type { IStreamLogger } from './PSAgentLogger';
15
+ import type { IPSAgentToolRunOptions, PSAgentTool } from './PSAgentTool';
16
+ import { Agent } from './agent-core/src/agent.js';
17
+ /**
18
+ * Maps PSAgentTool[] into the tool descriptor shape expected by agent-core.
19
+ */
20
+ export declare function convertTools(tools: PSAgentTool[], log?: IStreamLogger, options?: IPSAgentToolRunOptions): any[];
21
+ /**
22
+ * Constructs an agent-core Agent from a PSAgentLocalConfig.
23
+ *
24
+ * @param config The local agent config.
25
+ * @param getBaseUrl Resolves a service base URL (forwarded from PSAgent).
26
+ * @param getTools Returns the current tool list (called at build time so
27
+ * dynamically added tools via addTool() are included).
28
+ * @param log Optional logger.
29
+ */
30
+ export declare function buildLocalAgent(config: PSAgentLocalConfig, getBaseUrl: (service?: 'agents' | 'events' | 'llmtrack' | 'llm') => string, getTools: () => PSAgentTool[], log?: IStreamLogger): Agent;
31
+ /**
32
+ * Bridges a local Agent run into an A2A ExecutionEventBus.
33
+ * Called from PSAgent.execute() when local: true.
34
+ */
35
+ export declare function executeLocalAgent(agent: Agent, requestContext: RequestContext, eventBus: ExecutionEventBus, cancelledTasks: Set<string>, agentName: string, log?: IStreamLogger): Promise<void>;