@funkai/agents 0.1.0 → 0.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (45) hide show
  1. package/.turbo/turbo-build.log +19 -21
  2. package/CHANGELOG.md +6 -0
  3. package/README.md +1 -1
  4. package/package.json +1 -1
  5. package/.turbo/turbo-test$colon$coverage.log +0 -109
  6. package/.turbo/turbo-test.log +0 -141
  7. package/.turbo/turbo-typecheck.log +0 -4
  8. package/coverage/lcov-report/base.css +0 -224
  9. package/coverage/lcov-report/block-navigation.js +0 -87
  10. package/coverage/lcov-report/core/agents/base/agent.ts.html +0 -1705
  11. package/coverage/lcov-report/core/agents/base/index.html +0 -146
  12. package/coverage/lcov-report/core/agents/base/output.ts.html +0 -256
  13. package/coverage/lcov-report/core/agents/base/utils.ts.html +0 -694
  14. package/coverage/lcov-report/core/agents/flow/engine.ts.html +0 -928
  15. package/coverage/lcov-report/core/agents/flow/flow-agent.ts.html +0 -1462
  16. package/coverage/lcov-report/core/agents/flow/index.html +0 -146
  17. package/coverage/lcov-report/core/agents/flow/messages.ts.html +0 -508
  18. package/coverage/lcov-report/core/agents/flow/steps/factory.ts.html +0 -1975
  19. package/coverage/lcov-report/core/agents/flow/steps/index.html +0 -116
  20. package/coverage/lcov-report/core/index.html +0 -131
  21. package/coverage/lcov-report/core/logger.ts.html +0 -541
  22. package/coverage/lcov-report/core/models/providers/index.html +0 -116
  23. package/coverage/lcov-report/core/models/providers/openai.ts.html +0 -337
  24. package/coverage/lcov-report/core/provider/index.html +0 -131
  25. package/coverage/lcov-report/core/provider/provider.ts.html +0 -346
  26. package/coverage/lcov-report/core/provider/usage.ts.html +0 -376
  27. package/coverage/lcov-report/core/tool.ts.html +0 -577
  28. package/coverage/lcov-report/favicon.png +0 -0
  29. package/coverage/lcov-report/index.html +0 -221
  30. package/coverage/lcov-report/lib/hooks.ts.html +0 -262
  31. package/coverage/lcov-report/lib/index.html +0 -161
  32. package/coverage/lcov-report/lib/middleware.ts.html +0 -274
  33. package/coverage/lcov-report/lib/runnable.ts.html +0 -151
  34. package/coverage/lcov-report/lib/trace.ts.html +0 -520
  35. package/coverage/lcov-report/prettify.css +0 -1
  36. package/coverage/lcov-report/prettify.js +0 -2
  37. package/coverage/lcov-report/sort-arrow-sprite.png +0 -0
  38. package/coverage/lcov-report/sorter.js +0 -210
  39. package/coverage/lcov-report/utils/attempt.ts.html +0 -199
  40. package/coverage/lcov-report/utils/error.ts.html +0 -421
  41. package/coverage/lcov-report/utils/index.html +0 -176
  42. package/coverage/lcov-report/utils/resolve.ts.html +0 -208
  43. package/coverage/lcov-report/utils/result.ts.html +0 -538
  44. package/coverage/lcov-report/utils/zod.ts.html +0 -178
  45. package/coverage/lcov.info +0 -1566
@@ -1,694 +0,0 @@
1
-
2
- <!doctype html>
3
- <html lang="en">
4
-
5
- <head>
6
- <title>Code coverage report for core/agents/base/utils.ts</title>
7
- <meta charset="utf-8" />
8
- <link rel="stylesheet" href="../../../prettify.css" />
9
- <link rel="stylesheet" href="../../../base.css" />
10
- <link rel="shortcut icon" type="image/x-icon" href="../../../favicon.png" />
11
- <meta name="viewport" content="width=device-width, initial-scale=1" />
12
- <style type='text/css'>
13
- .coverage-summary .sorter {
14
- background-image: url(../../../sort-arrow-sprite.png);
15
- }
16
- </style>
17
- </head>
18
-
19
- <body>
20
- <div class='wrapper'>
21
- <div class='pad1'>
22
- <h1><a href="../../../index.html">All files</a> / <a href="index.html">core/agents/base</a> utils.ts</h1>
23
- <div class='clearfix'>
24
-
25
- <div class='fl pad1y space-right2'>
26
- <span class="strong">100% </span>
27
- <span class="quiet">Statements</span>
28
- <span class='fraction'>55/55</span>
29
- </div>
30
-
31
-
32
- <div class='fl pad1y space-right2'>
33
- <span class="strong">100% </span>
34
- <span class="quiet">Branches</span>
35
- <span class='fraction'>42/42</span>
36
- </div>
37
-
38
-
39
- <div class='fl pad1y space-right2'>
40
- <span class="strong">100% </span>
41
- <span class="quiet">Functions</span>
42
- <span class='fraction'>21/21</span>
43
- </div>
44
-
45
-
46
- <div class='fl pad1y space-right2'>
47
- <span class="strong">100% </span>
48
- <span class="quiet">Lines</span>
49
- <span class='fraction'>55/55</span>
50
- </div>
51
-
52
-
53
- </div>
54
- <p class="quiet">
55
- Press <em>n</em> or <em>j</em> to go to the next uncovered block, <em>b</em>, <em>p</em> or <em>k</em> for the previous block.
56
- </p>
57
- <template id="filterTemplate">
58
- <div class="quiet">
59
- Filter:
60
- <input type="search" id="fileSearch">
61
- </div>
62
- </template>
63
- </div>
64
- <div class='status-line high'></div>
65
- <pre><table class="coverage">
66
- <tr><td class="line-count quiet"><a name='L1'></a><a href='#L1'>1</a>
67
- <a name='L2'></a><a href='#L2'>2</a>
68
- <a name='L3'></a><a href='#L3'>3</a>
69
- <a name='L4'></a><a href='#L4'>4</a>
70
- <a name='L5'></a><a href='#L5'>5</a>
71
- <a name='L6'></a><a href='#L6'>6</a>
72
- <a name='L7'></a><a href='#L7'>7</a>
73
- <a name='L8'></a><a href='#L8'>8</a>
74
- <a name='L9'></a><a href='#L9'>9</a>
75
- <a name='L10'></a><a href='#L10'>10</a>
76
- <a name='L11'></a><a href='#L11'>11</a>
77
- <a name='L12'></a><a href='#L12'>12</a>
78
- <a name='L13'></a><a href='#L13'>13</a>
79
- <a name='L14'></a><a href='#L14'>14</a>
80
- <a name='L15'></a><a href='#L15'>15</a>
81
- <a name='L16'></a><a href='#L16'>16</a>
82
- <a name='L17'></a><a href='#L17'>17</a>
83
- <a name='L18'></a><a href='#L18'>18</a>
84
- <a name='L19'></a><a href='#L19'>19</a>
85
- <a name='L20'></a><a href='#L20'>20</a>
86
- <a name='L21'></a><a href='#L21'>21</a>
87
- <a name='L22'></a><a href='#L22'>22</a>
88
- <a name='L23'></a><a href='#L23'>23</a>
89
- <a name='L24'></a><a href='#L24'>24</a>
90
- <a name='L25'></a><a href='#L25'>25</a>
91
- <a name='L26'></a><a href='#L26'>26</a>
92
- <a name='L27'></a><a href='#L27'>27</a>
93
- <a name='L28'></a><a href='#L28'>28</a>
94
- <a name='L29'></a><a href='#L29'>29</a>
95
- <a name='L30'></a><a href='#L30'>30</a>
96
- <a name='L31'></a><a href='#L31'>31</a>
97
- <a name='L32'></a><a href='#L32'>32</a>
98
- <a name='L33'></a><a href='#L33'>33</a>
99
- <a name='L34'></a><a href='#L34'>34</a>
100
- <a name='L35'></a><a href='#L35'>35</a>
101
- <a name='L36'></a><a href='#L36'>36</a>
102
- <a name='L37'></a><a href='#L37'>37</a>
103
- <a name='L38'></a><a href='#L38'>38</a>
104
- <a name='L39'></a><a href='#L39'>39</a>
105
- <a name='L40'></a><a href='#L40'>40</a>
106
- <a name='L41'></a><a href='#L41'>41</a>
107
- <a name='L42'></a><a href='#L42'>42</a>
108
- <a name='L43'></a><a href='#L43'>43</a>
109
- <a name='L44'></a><a href='#L44'>44</a>
110
- <a name='L45'></a><a href='#L45'>45</a>
111
- <a name='L46'></a><a href='#L46'>46</a>
112
- <a name='L47'></a><a href='#L47'>47</a>
113
- <a name='L48'></a><a href='#L48'>48</a>
114
- <a name='L49'></a><a href='#L49'>49</a>
115
- <a name='L50'></a><a href='#L50'>50</a>
116
- <a name='L51'></a><a href='#L51'>51</a>
117
- <a name='L52'></a><a href='#L52'>52</a>
118
- <a name='L53'></a><a href='#L53'>53</a>
119
- <a name='L54'></a><a href='#L54'>54</a>
120
- <a name='L55'></a><a href='#L55'>55</a>
121
- <a name='L56'></a><a href='#L56'>56</a>
122
- <a name='L57'></a><a href='#L57'>57</a>
123
- <a name='L58'></a><a href='#L58'>58</a>
124
- <a name='L59'></a><a href='#L59'>59</a>
125
- <a name='L60'></a><a href='#L60'>60</a>
126
- <a name='L61'></a><a href='#L61'>61</a>
127
- <a name='L62'></a><a href='#L62'>62</a>
128
- <a name='L63'></a><a href='#L63'>63</a>
129
- <a name='L64'></a><a href='#L64'>64</a>
130
- <a name='L65'></a><a href='#L65'>65</a>
131
- <a name='L66'></a><a href='#L66'>66</a>
132
- <a name='L67'></a><a href='#L67'>67</a>
133
- <a name='L68'></a><a href='#L68'>68</a>
134
- <a name='L69'></a><a href='#L69'>69</a>
135
- <a name='L70'></a><a href='#L70'>70</a>
136
- <a name='L71'></a><a href='#L71'>71</a>
137
- <a name='L72'></a><a href='#L72'>72</a>
138
- <a name='L73'></a><a href='#L73'>73</a>
139
- <a name='L74'></a><a href='#L74'>74</a>
140
- <a name='L75'></a><a href='#L75'>75</a>
141
- <a name='L76'></a><a href='#L76'>76</a>
142
- <a name='L77'></a><a href='#L77'>77</a>
143
- <a name='L78'></a><a href='#L78'>78</a>
144
- <a name='L79'></a><a href='#L79'>79</a>
145
- <a name='L80'></a><a href='#L80'>80</a>
146
- <a name='L81'></a><a href='#L81'>81</a>
147
- <a name='L82'></a><a href='#L82'>82</a>
148
- <a name='L83'></a><a href='#L83'>83</a>
149
- <a name='L84'></a><a href='#L84'>84</a>
150
- <a name='L85'></a><a href='#L85'>85</a>
151
- <a name='L86'></a><a href='#L86'>86</a>
152
- <a name='L87'></a><a href='#L87'>87</a>
153
- <a name='L88'></a><a href='#L88'>88</a>
154
- <a name='L89'></a><a href='#L89'>89</a>
155
- <a name='L90'></a><a href='#L90'>90</a>
156
- <a name='L91'></a><a href='#L91'>91</a>
157
- <a name='L92'></a><a href='#L92'>92</a>
158
- <a name='L93'></a><a href='#L93'>93</a>
159
- <a name='L94'></a><a href='#L94'>94</a>
160
- <a name='L95'></a><a href='#L95'>95</a>
161
- <a name='L96'></a><a href='#L96'>96</a>
162
- <a name='L97'></a><a href='#L97'>97</a>
163
- <a name='L98'></a><a href='#L98'>98</a>
164
- <a name='L99'></a><a href='#L99'>99</a>
165
- <a name='L100'></a><a href='#L100'>100</a>
166
- <a name='L101'></a><a href='#L101'>101</a>
167
- <a name='L102'></a><a href='#L102'>102</a>
168
- <a name='L103'></a><a href='#L103'>103</a>
169
- <a name='L104'></a><a href='#L104'>104</a>
170
- <a name='L105'></a><a href='#L105'>105</a>
171
- <a name='L106'></a><a href='#L106'>106</a>
172
- <a name='L107'></a><a href='#L107'>107</a>
173
- <a name='L108'></a><a href='#L108'>108</a>
174
- <a name='L109'></a><a href='#L109'>109</a>
175
- <a name='L110'></a><a href='#L110'>110</a>
176
- <a name='L111'></a><a href='#L111'>111</a>
177
- <a name='L112'></a><a href='#L112'>112</a>
178
- <a name='L113'></a><a href='#L113'>113</a>
179
- <a name='L114'></a><a href='#L114'>114</a>
180
- <a name='L115'></a><a href='#L115'>115</a>
181
- <a name='L116'></a><a href='#L116'>116</a>
182
- <a name='L117'></a><a href='#L117'>117</a>
183
- <a name='L118'></a><a href='#L118'>118</a>
184
- <a name='L119'></a><a href='#L119'>119</a>
185
- <a name='L120'></a><a href='#L120'>120</a>
186
- <a name='L121'></a><a href='#L121'>121</a>
187
- <a name='L122'></a><a href='#L122'>122</a>
188
- <a name='L123'></a><a href='#L123'>123</a>
189
- <a name='L124'></a><a href='#L124'>124</a>
190
- <a name='L125'></a><a href='#L125'>125</a>
191
- <a name='L126'></a><a href='#L126'>126</a>
192
- <a name='L127'></a><a href='#L127'>127</a>
193
- <a name='L128'></a><a href='#L128'>128</a>
194
- <a name='L129'></a><a href='#L129'>129</a>
195
- <a name='L130'></a><a href='#L130'>130</a>
196
- <a name='L131'></a><a href='#L131'>131</a>
197
- <a name='L132'></a><a href='#L132'>132</a>
198
- <a name='L133'></a><a href='#L133'>133</a>
199
- <a name='L134'></a><a href='#L134'>134</a>
200
- <a name='L135'></a><a href='#L135'>135</a>
201
- <a name='L136'></a><a href='#L136'>136</a>
202
- <a name='L137'></a><a href='#L137'>137</a>
203
- <a name='L138'></a><a href='#L138'>138</a>
204
- <a name='L139'></a><a href='#L139'>139</a>
205
- <a name='L140'></a><a href='#L140'>140</a>
206
- <a name='L141'></a><a href='#L141'>141</a>
207
- <a name='L142'></a><a href='#L142'>142</a>
208
- <a name='L143'></a><a href='#L143'>143</a>
209
- <a name='L144'></a><a href='#L144'>144</a>
210
- <a name='L145'></a><a href='#L145'>145</a>
211
- <a name='L146'></a><a href='#L146'>146</a>
212
- <a name='L147'></a><a href='#L147'>147</a>
213
- <a name='L148'></a><a href='#L148'>148</a>
214
- <a name='L149'></a><a href='#L149'>149</a>
215
- <a name='L150'></a><a href='#L150'>150</a>
216
- <a name='L151'></a><a href='#L151'>151</a>
217
- <a name='L152'></a><a href='#L152'>152</a>
218
- <a name='L153'></a><a href='#L153'>153</a>
219
- <a name='L154'></a><a href='#L154'>154</a>
220
- <a name='L155'></a><a href='#L155'>155</a>
221
- <a name='L156'></a><a href='#L156'>156</a>
222
- <a name='L157'></a><a href='#L157'>157</a>
223
- <a name='L158'></a><a href='#L158'>158</a>
224
- <a name='L159'></a><a href='#L159'>159</a>
225
- <a name='L160'></a><a href='#L160'>160</a>
226
- <a name='L161'></a><a href='#L161'>161</a>
227
- <a name='L162'></a><a href='#L162'>162</a>
228
- <a name='L163'></a><a href='#L163'>163</a>
229
- <a name='L164'></a><a href='#L164'>164</a>
230
- <a name='L165'></a><a href='#L165'>165</a>
231
- <a name='L166'></a><a href='#L166'>166</a>
232
- <a name='L167'></a><a href='#L167'>167</a>
233
- <a name='L168'></a><a href='#L168'>168</a>
234
- <a name='L169'></a><a href='#L169'>169</a>
235
- <a name='L170'></a><a href='#L170'>170</a>
236
- <a name='L171'></a><a href='#L171'>171</a>
237
- <a name='L172'></a><a href='#L172'>172</a>
238
- <a name='L173'></a><a href='#L173'>173</a>
239
- <a name='L174'></a><a href='#L174'>174</a>
240
- <a name='L175'></a><a href='#L175'>175</a>
241
- <a name='L176'></a><a href='#L176'>176</a>
242
- <a name='L177'></a><a href='#L177'>177</a>
243
- <a name='L178'></a><a href='#L178'>178</a>
244
- <a name='L179'></a><a href='#L179'>179</a>
245
- <a name='L180'></a><a href='#L180'>180</a>
246
- <a name='L181'></a><a href='#L181'>181</a>
247
- <a name='L182'></a><a href='#L182'>182</a>
248
- <a name='L183'></a><a href='#L183'>183</a>
249
- <a name='L184'></a><a href='#L184'>184</a>
250
- <a name='L185'></a><a href='#L185'>185</a>
251
- <a name='L186'></a><a href='#L186'>186</a>
252
- <a name='L187'></a><a href='#L187'>187</a>
253
- <a name='L188'></a><a href='#L188'>188</a>
254
- <a name='L189'></a><a href='#L189'>189</a>
255
- <a name='L190'></a><a href='#L190'>190</a>
256
- <a name='L191'></a><a href='#L191'>191</a>
257
- <a name='L192'></a><a href='#L192'>192</a>
258
- <a name='L193'></a><a href='#L193'>193</a>
259
- <a name='L194'></a><a href='#L194'>194</a>
260
- <a name='L195'></a><a href='#L195'>195</a>
261
- <a name='L196'></a><a href='#L196'>196</a>
262
- <a name='L197'></a><a href='#L197'>197</a>
263
- <a name='L198'></a><a href='#L198'>198</a>
264
- <a name='L199'></a><a href='#L199'>199</a>
265
- <a name='L200'></a><a href='#L200'>200</a>
266
- <a name='L201'></a><a href='#L201'>201</a>
267
- <a name='L202'></a><a href='#L202'>202</a>
268
- <a name='L203'></a><a href='#L203'>203</a>
269
- <a name='L204'></a><a href='#L204'>204</a></td><td class="line-coverage quiet"><span class="cline-any cline-neutral">&nbsp;</span>
270
- <span class="cline-any cline-neutral">&nbsp;</span>
271
- <span class="cline-any cline-neutral">&nbsp;</span>
272
- <span class="cline-any cline-neutral">&nbsp;</span>
273
- <span class="cline-any cline-neutral">&nbsp;</span>
274
- <span class="cline-any cline-neutral">&nbsp;</span>
275
- <span class="cline-any cline-neutral">&nbsp;</span>
276
- <span class="cline-any cline-neutral">&nbsp;</span>
277
- <span class="cline-any cline-neutral">&nbsp;</span>
278
- <span class="cline-any cline-neutral">&nbsp;</span>
279
- <span class="cline-any cline-neutral">&nbsp;</span>
280
- <span class="cline-any cline-neutral">&nbsp;</span>
281
- <span class="cline-any cline-neutral">&nbsp;</span>
282
- <span class="cline-any cline-neutral">&nbsp;</span>
283
- <span class="cline-any cline-neutral">&nbsp;</span>
284
- <span class="cline-any cline-neutral">&nbsp;</span>
285
- <span class="cline-any cline-neutral">&nbsp;</span>
286
- <span class="cline-any cline-neutral">&nbsp;</span>
287
- <span class="cline-any cline-neutral">&nbsp;</span>
288
- <span class="cline-any cline-neutral">&nbsp;</span>
289
- <span class="cline-any cline-neutral">&nbsp;</span>
290
- <span class="cline-any cline-neutral">&nbsp;</span>
291
- <span class="cline-any cline-neutral">&nbsp;</span>
292
- <span class="cline-any cline-neutral">&nbsp;</span>
293
- <span class="cline-any cline-yes">8x</span>
294
- <span class="cline-any cline-yes">3x</span>
295
- <span class="cline-any cline-neutral">&nbsp;</span>
296
- <span class="cline-any cline-yes">5x</span>
297
- <span class="cline-any cline-neutral">&nbsp;</span>
298
- <span class="cline-any cline-neutral">&nbsp;</span>
299
- <span class="cline-any cline-neutral">&nbsp;</span>
300
- <span class="cline-any cline-neutral">&nbsp;</span>
301
- <span class="cline-any cline-neutral">&nbsp;</span>
302
- <span class="cline-any cline-neutral">&nbsp;</span>
303
- <span class="cline-any cline-yes">68x</span>
304
- <span class="cline-any cline-yes">2x</span>
305
- <span class="cline-any cline-neutral">&nbsp;</span>
306
- <span class="cline-any cline-yes">66x</span>
307
- <span class="cline-any cline-neutral">&nbsp;</span>
308
- <span class="cline-any cline-neutral">&nbsp;</span>
309
- <span class="cline-any cline-neutral">&nbsp;</span>
310
- <span class="cline-any cline-neutral">&nbsp;</span>
311
- <span class="cline-any cline-neutral">&nbsp;</span>
312
- <span class="cline-any cline-neutral">&nbsp;</span>
313
- <span class="cline-any cline-neutral">&nbsp;</span>
314
- <span class="cline-any cline-neutral">&nbsp;</span>
315
- <span class="cline-any cline-neutral">&nbsp;</span>
316
- <span class="cline-any cline-neutral">&nbsp;</span>
317
- <span class="cline-any cline-neutral">&nbsp;</span>
318
- <span class="cline-any cline-neutral">&nbsp;</span>
319
- <span class="cline-any cline-neutral">&nbsp;</span>
320
- <span class="cline-any cline-neutral">&nbsp;</span>
321
- <span class="cline-any cline-neutral">&nbsp;</span>
322
- <span class="cline-any cline-neutral">&nbsp;</span>
323
- <span class="cline-any cline-neutral">&nbsp;</span>
324
- <span class="cline-any cline-neutral">&nbsp;</span>
325
- <span class="cline-any cline-neutral">&nbsp;</span>
326
- <span class="cline-any cline-neutral">&nbsp;</span>
327
- <span class="cline-any cline-yes">78x</span>
328
- <span class="cline-any cline-yes">78x</span>
329
- <span class="cline-any cline-neutral">&nbsp;</span>
330
- <span class="cline-any cline-yes">78x</span>
331
- <span class="cline-any cline-yes">5x</span>
332
- <span class="cline-any cline-neutral">&nbsp;</span>
333
- <span class="cline-any cline-neutral">&nbsp;</span>
334
- <span class="cline-any cline-yes">78x</span>
335
- <span class="cline-any cline-yes">9x</span>
336
- <span class="cline-any cline-neutral">&nbsp;</span>
337
- <span class="cline-any cline-neutral">&nbsp;</span>
338
- <span class="cline-any cline-yes">8x</span>
339
- <span class="cline-any cline-neutral">&nbsp;</span>
340
- <span class="cline-any cline-neutral">&nbsp;</span>
341
- <span class="cline-any cline-yes">8x</span>
342
- <span class="cline-any cline-yes">8x</span>
343
- <span class="cline-any cline-neutral">&nbsp;</span>
344
- <span class="cline-any cline-neutral">&nbsp;</span>
345
- <span class="cline-any cline-yes">8x</span>
346
- <span class="cline-any cline-neutral">&nbsp;</span>
347
- <span class="cline-any cline-neutral">&nbsp;</span>
348
- <span class="cline-any cline-neutral">&nbsp;</span>
349
- <span class="cline-any cline-neutral">&nbsp;</span>
350
- <span class="cline-any cline-yes">2x</span>
351
- <span class="cline-any cline-yes">2x</span>
352
- <span class="cline-any cline-yes">1x</span>
353
- <span class="cline-any cline-neutral">&nbsp;</span>
354
- <span class="cline-any cline-yes">1x</span>
355
- <span class="cline-any cline-neutral">&nbsp;</span>
356
- <span class="cline-any cline-neutral">&nbsp;</span>
357
- <span class="cline-any cline-neutral">&nbsp;</span>
358
- <span class="cline-any cline-neutral">&nbsp;</span>
359
- <span class="cline-any cline-neutral">&nbsp;</span>
360
- <span class="cline-any cline-neutral">&nbsp;</span>
361
- <span class="cline-any cline-yes">2x</span>
362
- <span class="cline-any cline-yes">2x</span>
363
- <span class="cline-any cline-yes">1x</span>
364
- <span class="cline-any cline-neutral">&nbsp;</span>
365
- <span class="cline-any cline-yes">1x</span>
366
- <span class="cline-any cline-neutral">&nbsp;</span>
367
- <span class="cline-any cline-neutral">&nbsp;</span>
368
- <span class="cline-any cline-neutral">&nbsp;</span>
369
- <span class="cline-any cline-yes">8x</span>
370
- <span class="cline-any cline-neutral">&nbsp;</span>
371
- <span class="cline-any cline-neutral">&nbsp;</span>
372
- <span class="cline-any cline-yes">9x</span>
373
- <span class="cline-any cline-neutral">&nbsp;</span>
374
- <span class="cline-any cline-neutral">&nbsp;</span>
375
- <span class="cline-any cline-yes">78x</span>
376
- <span class="cline-any cline-yes">78x</span>
377
- <span class="cline-any cline-yes">11x</span>
378
- <span class="cline-any cline-neutral">&nbsp;</span>
379
- <span class="cline-any cline-yes">67x</span>
380
- <span class="cline-any cline-neutral">&nbsp;</span>
381
- <span class="cline-any cline-neutral">&nbsp;</span>
382
- <span class="cline-any cline-neutral">&nbsp;</span>
383
- <span class="cline-any cline-neutral">&nbsp;</span>
384
- <span class="cline-any cline-neutral">&nbsp;</span>
385
- <span class="cline-any cline-neutral">&nbsp;</span>
386
- <span class="cline-any cline-neutral">&nbsp;</span>
387
- <span class="cline-any cline-neutral">&nbsp;</span>
388
- <span class="cline-any cline-neutral">&nbsp;</span>
389
- <span class="cline-any cline-yes">70x</span>
390
- <span class="cline-any cline-yes">3x</span>
391
- <span class="cline-any cline-neutral">&nbsp;</span>
392
- <span class="cline-any cline-yes">67x</span>
393
- <span class="cline-any cline-yes">2x</span>
394
- <span class="cline-any cline-neutral">&nbsp;</span>
395
- <span class="cline-any cline-yes">65x</span>
396
- <span class="cline-any cline-neutral">&nbsp;</span>
397
- <span class="cline-any cline-neutral">&nbsp;</span>
398
- <span class="cline-any cline-neutral">&nbsp;</span>
399
- <span class="cline-any cline-neutral">&nbsp;</span>
400
- <span class="cline-any cline-neutral">&nbsp;</span>
401
- <span class="cline-any cline-neutral">&nbsp;</span>
402
- <span class="cline-any cline-neutral">&nbsp;</span>
403
- <span class="cline-any cline-neutral">&nbsp;</span>
404
- <span class="cline-any cline-neutral">&nbsp;</span>
405
- <span class="cline-any cline-neutral">&nbsp;</span>
406
- <span class="cline-any cline-neutral">&nbsp;</span>
407
- <span class="cline-any cline-neutral">&nbsp;</span>
408
- <span class="cline-any cline-neutral">&nbsp;</span>
409
- <span class="cline-any cline-neutral">&nbsp;</span>
410
- <span class="cline-any cline-neutral">&nbsp;</span>
411
- <span class="cline-any cline-yes">72x</span>
412
- <span class="cline-any cline-yes">72x</span>
413
- <span class="cline-any cline-neutral">&nbsp;</span>
414
- <span class="cline-any cline-yes">72x</span>
415
- <span class="cline-any cline-neutral">&nbsp;</span>
416
- <span class="cline-any cline-yes">1x</span>
417
- <span class="cline-any cline-neutral">&nbsp;</span>
418
- <span class="cline-any cline-neutral">&nbsp;</span>
419
- <span class="cline-any cline-neutral">&nbsp;</span>
420
- <span class="cline-any cline-neutral">&nbsp;</span>
421
- <span class="cline-any cline-yes">1x</span>
422
- <span class="cline-any cline-neutral">&nbsp;</span>
423
- <span class="cline-any cline-neutral">&nbsp;</span>
424
- <span class="cline-any cline-neutral">&nbsp;</span>
425
- <span class="cline-any cline-neutral">&nbsp;</span>
426
- <span class="cline-any cline-neutral">&nbsp;</span>
427
- <span class="cline-any cline-yes">4x</span>
428
- <span class="cline-any cline-yes">4x</span>
429
- <span class="cline-any cline-yes">4x</span>
430
- <span class="cline-any cline-yes">3x</span>
431
- <span class="cline-any cline-yes">1x</span>
432
- <span class="cline-any cline-neutral">&nbsp;</span>
433
- <span class="cline-any cline-yes">66x</span>
434
- <span class="cline-any cline-neutral">&nbsp;</span>
435
- <span class="cline-any cline-yes">64x</span>
436
- <span class="cline-any cline-yes">2x</span>
437
- <span class="cline-any cline-neutral">&nbsp;</span>
438
- <span class="cline-any cline-neutral">&nbsp;</span>
439
- <span class="cline-any cline-neutral">&nbsp;</span>
440
- <span class="cline-any cline-neutral">&nbsp;</span>
441
- <span class="cline-any cline-neutral">&nbsp;</span>
442
- <span class="cline-any cline-neutral">&nbsp;</span>
443
- <span class="cline-any cline-neutral">&nbsp;</span>
444
- <span class="cline-any cline-neutral">&nbsp;</span>
445
- <span class="cline-any cline-neutral">&nbsp;</span>
446
- <span class="cline-any cline-neutral">&nbsp;</span>
447
- <span class="cline-any cline-neutral">&nbsp;</span>
448
- <span class="cline-any cline-neutral">&nbsp;</span>
449
- <span class="cline-any cline-neutral">&nbsp;</span>
450
- <span class="cline-any cline-yes">57x</span>
451
- <span class="cline-any cline-yes">56x</span>
452
- <span class="cline-any cline-neutral">&nbsp;</span>
453
- <span class="cline-any cline-neutral">&nbsp;</span>
454
- <span class="cline-any cline-neutral">&nbsp;</span>
455
- <span class="cline-any cline-yes">1x</span>
456
- <span class="cline-any cline-neutral">&nbsp;</span>
457
- <span class="cline-any cline-yes">57x</span>
458
- <span class="cline-any cline-yes">56x</span>
459
- <span class="cline-any cline-neutral">&nbsp;</span>
460
- <span class="cline-any cline-neutral">&nbsp;</span>
461
- <span class="cline-any cline-yes">1x</span>
462
- <span class="cline-any cline-neutral">&nbsp;</span>
463
- <span class="cline-any cline-yes">57x</span>
464
- <span class="cline-any cline-neutral">&nbsp;</span>
465
- <span class="cline-any cline-neutral">&nbsp;</span>
466
- <span class="cline-any cline-neutral">&nbsp;</span>
467
- <span class="cline-any cline-neutral">&nbsp;</span>
468
- <span class="cline-any cline-neutral">&nbsp;</span>
469
- <span class="cline-any cline-neutral">&nbsp;</span>
470
- <span class="cline-any cline-neutral">&nbsp;</span>
471
- <span class="cline-any cline-neutral">&nbsp;</span>
472
- <span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">import type { LanguageModelUsage } from "ai";
473
- import { tool } from "ai";
474
- import { match, P } from "ts-pattern";
475
- import type { ZodType } from "zod";
476
- import { z } from "zod";
477
- &nbsp;
478
- import type { Agent, Message } from "@/core/agents/base/types.js";
479
- import { openrouter } from "@/core/provider/provider.js";
480
- import type { LanguageModel, TokenUsage } from "@/core/provider/types.js";
481
- import type { Tool } from "@/core/tool.js";
482
- import type { Model } from "@/core/types.js";
483
- import { RUNNABLE_META, type RunnableMeta } from "@/lib/runnable.js";
484
- &nbsp;
485
- /**
486
- * Resolve a display name for a sub-agent tool from its runnable
487
- * metadata, falling back to the provided name.
488
- *
489
- * @param meta - The runnable metadata, or undefined if not available.
490
- * @param fallback - The fallback name to use if metadata is missing.
491
- * @returns The resolved tool name.
492
- *
493
- * @private
494
- */
495
- function resolveToolName(meta: RunnableMeta | undefined, fallback: string): string {
496
- if (meta != null &amp;&amp; meta.name != null) {
497
- return meta.name;
498
- }
499
- return fallback;
500
- }
501
- &nbsp;
502
- /**
503
- * Resolve a {@link Model} to an AI SDK `LanguageModel`.
504
- */
505
- export function resolveModel(ref: Model): LanguageModel {
506
- if (typeof ref === "string") {
507
- return openrouter(ref);
508
- }
509
- return ref as LanguageModel;
510
- }
511
- &nbsp;
512
- /**
513
- * Merge `Tool` records and wrap subagent `Runnable` objects into AI SDK
514
- * tool format for `generateText` / `streamText`.
515
- *
516
- * Tools created via `tool()` are already AI SDK tools and are
517
- * passed through directly. Only subagents need wrapping.
518
- *
519
- * Parent tools are automatically forwarded to sub-agents so they
520
- * can access the same capabilities (e.g. sandbox filesystem tools)
521
- * without explicit injection at each call site.
522
- */
523
- export function buildAITools(
524
- tools?: Record&lt;string, Tool&gt;,
525
- // eslint-disable-next-line @typescript-eslint/no-explicit-any -- Agent generic params are contravariant; `unknown` breaks assignability
526
- agents?: Record&lt;string, Agent&lt;any, any, any, any&gt;&gt;,
527
- // eslint-disable-next-line @typescript-eslint/no-explicit-any -- ToolSet requires `any` values; `unknown` breaks assignability with AI SDK
528
- ): Record&lt;string, any&gt; | undefined {
529
- // eslint-disable-next-line @typescript-eslint/no-explicit-any -- ToolSet requires `any` values
530
- const result: Record&lt;string, any&gt; = {};
531
- const hasInitialTools = tools != null &amp;&amp; Object.keys(tools).length &gt; 0;
532
- &nbsp;
533
- if (tools) {
534
- Object.assign(result, tools);
535
- }
536
- &nbsp;
537
- if (agents) {
538
- const agentTools = Object.fromEntries(
539
- Object.entries(agents).map(([name, runnable]) =&gt; {
540
- // eslint-disable-next-line security/detect-object-injection -- Symbol-keyed property access; symbols cannot be user-controlled
541
- const meta = (runnable as unknown as Record&lt;symbol, unknown&gt;)[RUNNABLE_META] as
542
- | RunnableMeta
543
- | undefined;
544
- const toolName = resolveToolName(meta, name);
545
- const agentToolName = `agent:${name}`;
546
- &nbsp;
547
- const agentTool =
548
- meta != null &amp;&amp; meta.inputSchema != null
549
- ? tool({
550
- description: `Delegate to ${toolName}`,
551
- inputSchema: meta.inputSchema,
552
- execute: async (input, { abortSignal }) =&gt; {
553
- const r = await runnable.generate(input, { signal: abortSignal, tools });
554
- if (!r.ok) {
555
- throw new Error(r.error.message);
556
- }
557
- return r.output;
558
- },
559
- })
560
- : tool({
561
- description: `Delegate to ${toolName}`,
562
- inputSchema: z.object({ prompt: z.string().describe("The prompt to send") }),
563
- execute: async (input: { prompt: string }, { abortSignal }) =&gt; {
564
- const r = await runnable.generate(input.prompt, { signal: abortSignal, tools });
565
- if (!r.ok) {
566
- throw new Error(r.error.message);
567
- }
568
- return r.output;
569
- },
570
- });
571
- &nbsp;
572
- return [agentToolName, agentTool];
573
- }),
574
- );
575
- Object.assign(result, agentTools);
576
- }
577
- &nbsp;
578
- const hasAgents = agents != null &amp;&amp; Object.keys(agents).length &gt; 0;
579
- if (hasInitialTools || hasAgents) {
580
- return result;
581
- }
582
- return undefined;
583
- }
584
- &nbsp;
585
- /**
586
- * Resolve the system prompt from config or override.
587
- */
588
- export function resolveSystem&lt;TInput&gt;(
589
- system: string | ((params: { input: TInput }) =&gt; string) | undefined,
590
- input: TInput,
591
- ): string | undefined {
592
- if (system == null) {
593
- return undefined;
594
- }
595
- if (typeof system === "function") {
596
- return system({ input });
597
- }
598
- return system;
599
- }
600
- &nbsp;
601
- /**
602
- * Build the prompt/messages from input based on mode (typed vs simple).
603
- *
604
- * Returns a discriminated object: either `{ prompt }` or `{ messages }`,
605
- * never both — matching the AI SDK's `Prompt` union type.
606
- */
607
- export function buildPrompt&lt;TInput&gt;(
608
- input: TInput,
609
- config: {
610
- input?: ZodType&lt;TInput&gt;;
611
- prompt?: (params: { input: TInput }) =&gt; string | Message[];
612
- },
613
- ): { prompt: string } | { messages: Message[] } {
614
- const hasInput = Boolean(config.input);
615
- const hasPrompt = Boolean(config.prompt);
616
- &nbsp;
617
- return match({ hasInput, hasPrompt })
618
- .with({ hasInput: true, hasPrompt: false }, () =&gt; {
619
- throw new Error(
620
- "Agent has `input` schema but no `prompt` function — both are required for typed mode",
621
- );
622
- })
623
- .with({ hasInput: false, hasPrompt: true }, () =&gt; {
624
- throw new Error(
625
- "Agent has `prompt` function but no `input` schema — both are required for typed mode",
626
- );
627
- })
628
- .with({ hasInput: true, hasPrompt: true }, () =&gt; {
629
- // config.prompt is guaranteed non-null by the match
630
- const promptFn = config.prompt as NonNullable&lt;typeof config.prompt&gt;;
631
- const built = promptFn({ input });
632
- return match(typeof built === "string")
633
- .with(true, () =&gt; ({ prompt: built as string }))
634
- .otherwise(() =&gt; ({ messages: built as Message[] }));
635
- })
636
- .otherwise(() =&gt;
637
- match(typeof input === "string")
638
- .with(true, () =&gt; ({ prompt: input as string }))
639
- .otherwise(() =&gt; ({ messages: input as Message[] })),
640
- );
641
- }
642
- &nbsp;
643
- /**
644
- * Convert AI SDK's `LanguageModelUsage` to our flat `TokenUsage`.
645
- *
646
- * Maps nested `inputTokenDetails` / `outputTokenDetails` to flat
647
- * fields, resolving `undefined` → `0`.
648
- *
649
- * @param usage - The AI SDK usage object (from `totalUsage`).
650
- * @returns A resolved {@link TokenUsage} with all fields as numbers.
651
- */
652
- export function toTokenUsage(usage: LanguageModelUsage): TokenUsage {
653
- const inputDetails = match(usage.inputTokenDetails)
654
- .with(P.nonNullable, (d) =&gt; ({
655
- cacheReadTokens: d.cacheReadTokens ?? 0,
656
- cacheWriteTokens: d.cacheWriteTokens ?? 0,
657
- }))
658
- .otherwise(() =&gt; ({ cacheReadTokens: 0, cacheWriteTokens: 0 }));
659
- &nbsp;
660
- const outputDetails = match(usage.outputTokenDetails)
661
- .with(P.nonNullable, (d) =&gt; ({
662
- reasoningTokens: d.reasoningTokens ?? 0,
663
- }))
664
- .otherwise(() =&gt; ({ reasoningTokens: 0 }));
665
- &nbsp;
666
- return {
667
- inputTokens: usage.inputTokens ?? 0,
668
- outputTokens: usage.outputTokens ?? 0,
669
- totalTokens: usage.totalTokens ?? 0,
670
- cacheReadTokens: inputDetails.cacheReadTokens,
671
- cacheWriteTokens: inputDetails.cacheWriteTokens,
672
- reasoningTokens: outputDetails.reasoningTokens,
673
- };
674
- }
675
- &nbsp;</pre></td></tr></table></pre>
676
-
677
- <div class='push'></div><!-- for sticky footer -->
678
- </div><!-- /wrapper -->
679
- <div class='footer quiet pad2 space-top1 center small'>
680
- Code coverage generated by
681
- <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
682
- at 2026-03-13T01:02:17.231Z
683
- </div>
684
- <script src="../../../prettify.js"></script>
685
- <script>
686
- window.onload = function () {
687
- prettyPrint();
688
- };
689
- </script>
690
- <script src="../../../sorter.js"></script>
691
- <script src="../../../block-navigation.js"></script>
692
- </body>
693
- </html>
694
-