@sentry/warden 0.31.0 → 0.32.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 (171) hide show
  1. package/.oxlintrc.json +4 -3
  2. package/CHANGELOG.md +20 -0
  3. package/README.md +1 -1
  4. package/dist/output/renderer.js +3 -3
  5. package/dist/output/renderer.js.map +1 -1
  6. package/dist/sdk/analyze.js +1 -0
  7. package/dist/sdk/analyze.js.map +1 -1
  8. package/dist/sdk/prompt-sections.d.ts +2 -0
  9. package/dist/sdk/prompt-sections.d.ts.map +1 -1
  10. package/dist/sdk/prompt-sections.js +8 -2
  11. package/dist/sdk/prompt-sections.js.map +1 -1
  12. package/dist/sdk/prompt.d.ts.map +1 -1
  13. package/dist/sdk/prompt.js +8 -6
  14. package/dist/sdk/prompt.js.map +1 -1
  15. package/dist/sdk/verify.d.ts.map +1 -1
  16. package/dist/sdk/verify.js +5 -1
  17. package/dist/sdk/verify.js.map +1 -1
  18. package/package.json +16 -8
  19. package/src/builtin-skills/code-review/SKILL.md +1 -1
  20. package/src/builtin-skills/security-review/SKILL.md +1 -1
  21. package/test-results.junit.xml +2330 -2297
  22. package/.cursor/mcp.json +0 -7
  23. package/coverage/lcov-report/base.css +0 -224
  24. package/coverage/lcov-report/block-navigation.js +0 -87
  25. package/coverage/lcov-report/favicon.png +0 -0
  26. package/coverage/lcov-report/index.html +0 -446
  27. package/coverage/lcov-report/prettify.css +0 -1
  28. package/coverage/lcov-report/prettify.js +0 -2
  29. package/coverage/lcov-report/sort-arrow-sprite.png +0 -0
  30. package/coverage/lcov-report/sorter.js +0 -210
  31. package/coverage/lcov-report/src/action/checks/index.html +0 -116
  32. package/coverage/lcov-report/src/action/checks/manager.ts.html +0 -499
  33. package/coverage/lcov-report/src/action/error-reporting.ts.html +0 -181
  34. package/coverage/lcov-report/src/action/fix-evaluation/github.ts.html +0 -508
  35. package/coverage/lcov-report/src/action/fix-evaluation/index.html +0 -161
  36. package/coverage/lcov-report/src/action/fix-evaluation/index.ts.html +0 -1243
  37. package/coverage/lcov-report/src/action/fix-evaluation/judge.ts.html +0 -817
  38. package/coverage/lcov-report/src/action/fix-evaluation/types.ts.html +0 -274
  39. package/coverage/lcov-report/src/action/index.html +0 -161
  40. package/coverage/lcov-report/src/action/inputs.ts.html +0 -529
  41. package/coverage/lcov-report/src/action/pi-ncc-compat.ts.html +0 -292
  42. package/coverage/lcov-report/src/action/review/coordination.ts.html +0 -208
  43. package/coverage/lcov-report/src/action/review/index.html +0 -131
  44. package/coverage/lcov-report/src/action/review/poster.ts.html +0 -1051
  45. package/coverage/lcov-report/src/action/review-state.ts.html +0 -280
  46. package/coverage/lcov-report/src/action/triggers/executor.ts.html +0 -856
  47. package/coverage/lcov-report/src/action/triggers/index.html +0 -116
  48. package/coverage/lcov-report/src/action/workflow/base.ts.html +0 -1135
  49. package/coverage/lcov-report/src/action/workflow/index.html +0 -146
  50. package/coverage/lcov-report/src/action/workflow/pr-workflow.ts.html +0 -2713
  51. package/coverage/lcov-report/src/action/workflow/schedule.ts.html +0 -1027
  52. package/coverage/lcov-report/src/cli/args.ts.html +0 -1657
  53. package/coverage/lcov-report/src/cli/commands/add.ts.html +0 -1567
  54. package/coverage/lcov-report/src/cli/commands/build.ts.html +0 -1618
  55. package/coverage/lcov-report/src/cli/commands/index.html +0 -191
  56. package/coverage/lcov-report/src/cli/commands/init.ts.html +0 -1357
  57. package/coverage/lcov-report/src/cli/commands/runs.ts.html +0 -2560
  58. package/coverage/lcov-report/src/cli/commands/setup-app/browser.ts.html +0 -214
  59. package/coverage/lcov-report/src/cli/commands/setup-app/credentials.ts.html +0 -220
  60. package/coverage/lcov-report/src/cli/commands/setup-app/index.html +0 -161
  61. package/coverage/lcov-report/src/cli/commands/setup-app/manifest.ts.html +0 -235
  62. package/coverage/lcov-report/src/cli/commands/setup-app/server.ts.html +0 -601
  63. package/coverage/lcov-report/src/cli/commands/setup-app.ts.html +0 -571
  64. package/coverage/lcov-report/src/cli/commands/sync.ts.html +0 -475
  65. package/coverage/lcov-report/src/cli/context.ts.html +0 -532
  66. package/coverage/lcov-report/src/cli/diff-apply.ts.html +0 -334
  67. package/coverage/lcov-report/src/cli/files.ts.html +0 -904
  68. package/coverage/lcov-report/src/cli/fix.ts.html +0 -1060
  69. package/coverage/lcov-report/src/cli/git.ts.html +0 -1201
  70. package/coverage/lcov-report/src/cli/help.ts.html +0 -1696
  71. package/coverage/lcov-report/src/cli/index.html +0 -281
  72. package/coverage/lcov-report/src/cli/input.ts.html +0 -397
  73. package/coverage/lcov-report/src/cli/log-cleanup.ts.html +0 -337
  74. package/coverage/lcov-report/src/cli/main.ts.html +0 -5107
  75. package/coverage/lcov-report/src/cli/output/box.ts.html +0 -790
  76. package/coverage/lcov-report/src/cli/output/formatters.ts.html +0 -1099
  77. package/coverage/lcov-report/src/cli/output/icons.ts.html +0 -142
  78. package/coverage/lcov-report/src/cli/output/index.html +0 -281
  79. package/coverage/lcov-report/src/cli/output/index.ts.html +0 -295
  80. package/coverage/lcov-report/src/cli/output/ink-runner.tsx.html +0 -1597
  81. package/coverage/lcov-report/src/cli/output/jsonl-schema-gen.ts.html +0 -355
  82. package/coverage/lcov-report/src/cli/output/jsonl.ts.html +0 -2137
  83. package/coverage/lcov-report/src/cli/output/live-status.tsx.html +0 -916
  84. package/coverage/lcov-report/src/cli/output/reporter.ts.html +0 -1630
  85. package/coverage/lcov-report/src/cli/output/tasks.ts.html +0 -3193
  86. package/coverage/lcov-report/src/cli/output/tty.ts.html +0 -310
  87. package/coverage/lcov-report/src/cli/output/verbosity.ts.html +0 -181
  88. package/coverage/lcov-report/src/cli/signals.ts.html +0 -199
  89. package/coverage/lcov-report/src/cli/terminal.ts.html +0 -1060
  90. package/coverage/lcov-report/src/config/index.html +0 -161
  91. package/coverage/lcov-report/src/config/index.ts.html +0 -94
  92. package/coverage/lcov-report/src/config/loader.ts.html +0 -1753
  93. package/coverage/lcov-report/src/config/schema.ts.html +0 -910
  94. package/coverage/lcov-report/src/config/writer.ts.html +0 -538
  95. package/coverage/lcov-report/src/diff/apply.ts.html +0 -241
  96. package/coverage/lcov-report/src/diff/classify.ts.html +0 -361
  97. package/coverage/lcov-report/src/diff/coalesce.ts.html +0 -1123
  98. package/coverage/lcov-report/src/diff/context.ts.html +0 -952
  99. package/coverage/lcov-report/src/diff/index.html +0 -191
  100. package/coverage/lcov-report/src/diff/index.ts.html +0 -100
  101. package/coverage/lcov-report/src/diff/parser.ts.html +0 -532
  102. package/coverage/lcov-report/src/evals/harness.ts.html +0 -700
  103. package/coverage/lcov-report/src/evals/index.html +0 -221
  104. package/coverage/lcov-report/src/evals/index.ts.html +0 -955
  105. package/coverage/lcov-report/src/evals/names.ts.html +0 -121
  106. package/coverage/lcov-report/src/evals/runner.ts.html +0 -664
  107. package/coverage/lcov-report/src/evals/scaffold.ts.html +0 -970
  108. package/coverage/lcov-report/src/evals/types.ts.html +0 -661
  109. package/coverage/lcov-report/src/evals/usage.ts.html +0 -178
  110. package/coverage/lcov-report/src/evals/verify.ts.html +0 -1054
  111. package/coverage/lcov-report/src/event/context.ts.html +0 -490
  112. package/coverage/lcov-report/src/event/index.html +0 -116
  113. package/coverage/lcov-report/src/index.html +0 -116
  114. package/coverage/lcov-report/src/output/dedup.ts.html +0 -2950
  115. package/coverage/lcov-report/src/output/github-checks.ts.html +0 -1579
  116. package/coverage/lcov-report/src/output/index.html +0 -161
  117. package/coverage/lcov-report/src/output/renderer.ts.html +0 -988
  118. package/coverage/lcov-report/src/output/stale.ts.html +0 -640
  119. package/coverage/lcov-report/src/sdk/analyze.ts.html +0 -3010
  120. package/coverage/lcov-report/src/sdk/auth.ts.html +0 -217
  121. package/coverage/lcov-report/src/sdk/circuit-breaker.ts.html +0 -304
  122. package/coverage/lcov-report/src/sdk/errors.ts.html +0 -658
  123. package/coverage/lcov-report/src/sdk/extract.ts.html +0 -1810
  124. package/coverage/lcov-report/src/sdk/fix-quality.ts.html +0 -841
  125. package/coverage/lcov-report/src/sdk/haiku.ts.html +0 -1456
  126. package/coverage/lcov-report/src/sdk/index.html +0 -416
  127. package/coverage/lcov-report/src/sdk/json-output.ts.html +0 -508
  128. package/coverage/lcov-report/src/sdk/model-pricing.json.html +0 -499
  129. package/coverage/lcov-report/src/sdk/otel.ts.html +0 -433
  130. package/coverage/lcov-report/src/sdk/post-process.ts.html +0 -412
  131. package/coverage/lcov-report/src/sdk/prepare.ts.html +0 -400
  132. package/coverage/lcov-report/src/sdk/pricing.ts.html +0 -778
  133. package/coverage/lcov-report/src/sdk/prompt-sections.ts.html +0 -595
  134. package/coverage/lcov-report/src/sdk/prompt.ts.html +0 -451
  135. package/coverage/lcov-report/src/sdk/report-files.ts.html +0 -166
  136. package/coverage/lcov-report/src/sdk/retry.ts.html +0 -202
  137. package/coverage/lcov-report/src/sdk/runner.ts.html +0 -400
  138. package/coverage/lcov-report/src/sdk/runtimes/claude.ts.html +0 -1693
  139. package/coverage/lcov-report/src/sdk/runtimes/index.html +0 -176
  140. package/coverage/lcov-report/src/sdk/runtimes/index.ts.html +0 -244
  141. package/coverage/lcov-report/src/sdk/runtimes/model-selectors.ts.html +0 -328
  142. package/coverage/lcov-report/src/sdk/runtimes/pi.ts.html +0 -2104
  143. package/coverage/lcov-report/src/sdk/runtimes/types.ts.html +0 -508
  144. package/coverage/lcov-report/src/sdk/types.ts.html +0 -730
  145. package/coverage/lcov-report/src/sdk/usage.ts.html +0 -502
  146. package/coverage/lcov-report/src/sdk/verify.ts.html +0 -1027
  147. package/coverage/lcov-report/src/sentry.ts.html +0 -994
  148. package/coverage/lcov-report/src/skill-builder/agentic.ts.html +0 -1063
  149. package/coverage/lcov-report/src/skill-builder/authoring-provider.ts.html +0 -334
  150. package/coverage/lcov-report/src/skill-builder/definition.ts.html +0 -748
  151. package/coverage/lcov-report/src/skill-builder/index.html +0 -236
  152. package/coverage/lcov-report/src/skill-builder/outline-contract.ts.html +0 -400
  153. package/coverage/lcov-report/src/skill-builder/outline-state.ts.html +0 -382
  154. package/coverage/lcov-report/src/skill-builder/outline.ts.html +0 -1402
  155. package/coverage/lcov-report/src/skill-builder/skill-contract.ts.html +0 -382
  156. package/coverage/lcov-report/src/skill-builder/skill-prompts.ts.html +0 -1180
  157. package/coverage/lcov-report/src/skill-builder/skill.ts.html +0 -2398
  158. package/coverage/lcov-report/src/skills/index.html +0 -131
  159. package/coverage/lcov-report/src/skills/loader.ts.html +0 -1693
  160. package/coverage/lcov-report/src/skills/remote.ts.html +0 -1909
  161. package/coverage/lcov-report/src/triggers/index.html +0 -116
  162. package/coverage/lcov-report/src/triggers/matcher.ts.html +0 -841
  163. package/coverage/lcov-report/src/types/index.html +0 -116
  164. package/coverage/lcov-report/src/types/index.ts.html +0 -1240
  165. package/coverage/lcov-report/src/utils/async.ts.html +0 -331
  166. package/coverage/lcov-report/src/utils/exec.ts.html +0 -496
  167. package/coverage/lcov-report/src/utils/index.html +0 -176
  168. package/coverage/lcov-report/src/utils/index.ts.html +0 -313
  169. package/coverage/lcov-report/src/utils/path.ts.html +0 -202
  170. package/coverage/lcov-report/src/utils/version.ts.html +0 -136
  171. package/coverage/lcov.info +0 -19134
@@ -1,1402 +0,0 @@
1
-
2
- <!doctype html>
3
- <html lang="en">
4
-
5
- <head>
6
- <title>Code coverage report for src/skill-builder/outline.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">src/skill-builder</a> outline.ts</h1>
23
- <div class='clearfix'>
24
-
25
- <div class='fl pad1y space-right2'>
26
- <span class="strong">19.17% </span>
27
- <span class="quiet">Statements</span>
28
- <span class='fraction'>14/73</span>
29
- </div>
30
-
31
-
32
- <div class='fl pad1y space-right2'>
33
- <span class="strong">3.92% </span>
34
- <span class="quiet">Branches</span>
35
- <span class='fraction'>2/51</span>
36
- </div>
37
-
38
-
39
- <div class='fl pad1y space-right2'>
40
- <span class="strong">27.77% </span>
41
- <span class="quiet">Functions</span>
42
- <span class='fraction'>5/18</span>
43
- </div>
44
-
45
-
46
- <div class='fl pad1y space-right2'>
47
- <span class="strong">19.44% </span>
48
- <span class="quiet">Lines</span>
49
- <span class='fraction'>14/72</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 low'></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>
270
- <a name='L205'></a><a href='#L205'>205</a>
271
- <a name='L206'></a><a href='#L206'>206</a>
272
- <a name='L207'></a><a href='#L207'>207</a>
273
- <a name='L208'></a><a href='#L208'>208</a>
274
- <a name='L209'></a><a href='#L209'>209</a>
275
- <a name='L210'></a><a href='#L210'>210</a>
276
- <a name='L211'></a><a href='#L211'>211</a>
277
- <a name='L212'></a><a href='#L212'>212</a>
278
- <a name='L213'></a><a href='#L213'>213</a>
279
- <a name='L214'></a><a href='#L214'>214</a>
280
- <a name='L215'></a><a href='#L215'>215</a>
281
- <a name='L216'></a><a href='#L216'>216</a>
282
- <a name='L217'></a><a href='#L217'>217</a>
283
- <a name='L218'></a><a href='#L218'>218</a>
284
- <a name='L219'></a><a href='#L219'>219</a>
285
- <a name='L220'></a><a href='#L220'>220</a>
286
- <a name='L221'></a><a href='#L221'>221</a>
287
- <a name='L222'></a><a href='#L222'>222</a>
288
- <a name='L223'></a><a href='#L223'>223</a>
289
- <a name='L224'></a><a href='#L224'>224</a>
290
- <a name='L225'></a><a href='#L225'>225</a>
291
- <a name='L226'></a><a href='#L226'>226</a>
292
- <a name='L227'></a><a href='#L227'>227</a>
293
- <a name='L228'></a><a href='#L228'>228</a>
294
- <a name='L229'></a><a href='#L229'>229</a>
295
- <a name='L230'></a><a href='#L230'>230</a>
296
- <a name='L231'></a><a href='#L231'>231</a>
297
- <a name='L232'></a><a href='#L232'>232</a>
298
- <a name='L233'></a><a href='#L233'>233</a>
299
- <a name='L234'></a><a href='#L234'>234</a>
300
- <a name='L235'></a><a href='#L235'>235</a>
301
- <a name='L236'></a><a href='#L236'>236</a>
302
- <a name='L237'></a><a href='#L237'>237</a>
303
- <a name='L238'></a><a href='#L238'>238</a>
304
- <a name='L239'></a><a href='#L239'>239</a>
305
- <a name='L240'></a><a href='#L240'>240</a>
306
- <a name='L241'></a><a href='#L241'>241</a>
307
- <a name='L242'></a><a href='#L242'>242</a>
308
- <a name='L243'></a><a href='#L243'>243</a>
309
- <a name='L244'></a><a href='#L244'>244</a>
310
- <a name='L245'></a><a href='#L245'>245</a>
311
- <a name='L246'></a><a href='#L246'>246</a>
312
- <a name='L247'></a><a href='#L247'>247</a>
313
- <a name='L248'></a><a href='#L248'>248</a>
314
- <a name='L249'></a><a href='#L249'>249</a>
315
- <a name='L250'></a><a href='#L250'>250</a>
316
- <a name='L251'></a><a href='#L251'>251</a>
317
- <a name='L252'></a><a href='#L252'>252</a>
318
- <a name='L253'></a><a href='#L253'>253</a>
319
- <a name='L254'></a><a href='#L254'>254</a>
320
- <a name='L255'></a><a href='#L255'>255</a>
321
- <a name='L256'></a><a href='#L256'>256</a>
322
- <a name='L257'></a><a href='#L257'>257</a>
323
- <a name='L258'></a><a href='#L258'>258</a>
324
- <a name='L259'></a><a href='#L259'>259</a>
325
- <a name='L260'></a><a href='#L260'>260</a>
326
- <a name='L261'></a><a href='#L261'>261</a>
327
- <a name='L262'></a><a href='#L262'>262</a>
328
- <a name='L263'></a><a href='#L263'>263</a>
329
- <a name='L264'></a><a href='#L264'>264</a>
330
- <a name='L265'></a><a href='#L265'>265</a>
331
- <a name='L266'></a><a href='#L266'>266</a>
332
- <a name='L267'></a><a href='#L267'>267</a>
333
- <a name='L268'></a><a href='#L268'>268</a>
334
- <a name='L269'></a><a href='#L269'>269</a>
335
- <a name='L270'></a><a href='#L270'>270</a>
336
- <a name='L271'></a><a href='#L271'>271</a>
337
- <a name='L272'></a><a href='#L272'>272</a>
338
- <a name='L273'></a><a href='#L273'>273</a>
339
- <a name='L274'></a><a href='#L274'>274</a>
340
- <a name='L275'></a><a href='#L275'>275</a>
341
- <a name='L276'></a><a href='#L276'>276</a>
342
- <a name='L277'></a><a href='#L277'>277</a>
343
- <a name='L278'></a><a href='#L278'>278</a>
344
- <a name='L279'></a><a href='#L279'>279</a>
345
- <a name='L280'></a><a href='#L280'>280</a>
346
- <a name='L281'></a><a href='#L281'>281</a>
347
- <a name='L282'></a><a href='#L282'>282</a>
348
- <a name='L283'></a><a href='#L283'>283</a>
349
- <a name='L284'></a><a href='#L284'>284</a>
350
- <a name='L285'></a><a href='#L285'>285</a>
351
- <a name='L286'></a><a href='#L286'>286</a>
352
- <a name='L287'></a><a href='#L287'>287</a>
353
- <a name='L288'></a><a href='#L288'>288</a>
354
- <a name='L289'></a><a href='#L289'>289</a>
355
- <a name='L290'></a><a href='#L290'>290</a>
356
- <a name='L291'></a><a href='#L291'>291</a>
357
- <a name='L292'></a><a href='#L292'>292</a>
358
- <a name='L293'></a><a href='#L293'>293</a>
359
- <a name='L294'></a><a href='#L294'>294</a>
360
- <a name='L295'></a><a href='#L295'>295</a>
361
- <a name='L296'></a><a href='#L296'>296</a>
362
- <a name='L297'></a><a href='#L297'>297</a>
363
- <a name='L298'></a><a href='#L298'>298</a>
364
- <a name='L299'></a><a href='#L299'>299</a>
365
- <a name='L300'></a><a href='#L300'>300</a>
366
- <a name='L301'></a><a href='#L301'>301</a>
367
- <a name='L302'></a><a href='#L302'>302</a>
368
- <a name='L303'></a><a href='#L303'>303</a>
369
- <a name='L304'></a><a href='#L304'>304</a>
370
- <a name='L305'></a><a href='#L305'>305</a>
371
- <a name='L306'></a><a href='#L306'>306</a>
372
- <a name='L307'></a><a href='#L307'>307</a>
373
- <a name='L308'></a><a href='#L308'>308</a>
374
- <a name='L309'></a><a href='#L309'>309</a>
375
- <a name='L310'></a><a href='#L310'>310</a>
376
- <a name='L311'></a><a href='#L311'>311</a>
377
- <a name='L312'></a><a href='#L312'>312</a>
378
- <a name='L313'></a><a href='#L313'>313</a>
379
- <a name='L314'></a><a href='#L314'>314</a>
380
- <a name='L315'></a><a href='#L315'>315</a>
381
- <a name='L316'></a><a href='#L316'>316</a>
382
- <a name='L317'></a><a href='#L317'>317</a>
383
- <a name='L318'></a><a href='#L318'>318</a>
384
- <a name='L319'></a><a href='#L319'>319</a>
385
- <a name='L320'></a><a href='#L320'>320</a>
386
- <a name='L321'></a><a href='#L321'>321</a>
387
- <a name='L322'></a><a href='#L322'>322</a>
388
- <a name='L323'></a><a href='#L323'>323</a>
389
- <a name='L324'></a><a href='#L324'>324</a>
390
- <a name='L325'></a><a href='#L325'>325</a>
391
- <a name='L326'></a><a href='#L326'>326</a>
392
- <a name='L327'></a><a href='#L327'>327</a>
393
- <a name='L328'></a><a href='#L328'>328</a>
394
- <a name='L329'></a><a href='#L329'>329</a>
395
- <a name='L330'></a><a href='#L330'>330</a>
396
- <a name='L331'></a><a href='#L331'>331</a>
397
- <a name='L332'></a><a href='#L332'>332</a>
398
- <a name='L333'></a><a href='#L333'>333</a>
399
- <a name='L334'></a><a href='#L334'>334</a>
400
- <a name='L335'></a><a href='#L335'>335</a>
401
- <a name='L336'></a><a href='#L336'>336</a>
402
- <a name='L337'></a><a href='#L337'>337</a>
403
- <a name='L338'></a><a href='#L338'>338</a>
404
- <a name='L339'></a><a href='#L339'>339</a>
405
- <a name='L340'></a><a href='#L340'>340</a>
406
- <a name='L341'></a><a href='#L341'>341</a>
407
- <a name='L342'></a><a href='#L342'>342</a>
408
- <a name='L343'></a><a href='#L343'>343</a>
409
- <a name='L344'></a><a href='#L344'>344</a>
410
- <a name='L345'></a><a href='#L345'>345</a>
411
- <a name='L346'></a><a href='#L346'>346</a>
412
- <a name='L347'></a><a href='#L347'>347</a>
413
- <a name='L348'></a><a href='#L348'>348</a>
414
- <a name='L349'></a><a href='#L349'>349</a>
415
- <a name='L350'></a><a href='#L350'>350</a>
416
- <a name='L351'></a><a href='#L351'>351</a>
417
- <a name='L352'></a><a href='#L352'>352</a>
418
- <a name='L353'></a><a href='#L353'>353</a>
419
- <a name='L354'></a><a href='#L354'>354</a>
420
- <a name='L355'></a><a href='#L355'>355</a>
421
- <a name='L356'></a><a href='#L356'>356</a>
422
- <a name='L357'></a><a href='#L357'>357</a>
423
- <a name='L358'></a><a href='#L358'>358</a>
424
- <a name='L359'></a><a href='#L359'>359</a>
425
- <a name='L360'></a><a href='#L360'>360</a>
426
- <a name='L361'></a><a href='#L361'>361</a>
427
- <a name='L362'></a><a href='#L362'>362</a>
428
- <a name='L363'></a><a href='#L363'>363</a>
429
- <a name='L364'></a><a href='#L364'>364</a>
430
- <a name='L365'></a><a href='#L365'>365</a>
431
- <a name='L366'></a><a href='#L366'>366</a>
432
- <a name='L367'></a><a href='#L367'>367</a>
433
- <a name='L368'></a><a href='#L368'>368</a>
434
- <a name='L369'></a><a href='#L369'>369</a>
435
- <a name='L370'></a><a href='#L370'>370</a>
436
- <a name='L371'></a><a href='#L371'>371</a>
437
- <a name='L372'></a><a href='#L372'>372</a>
438
- <a name='L373'></a><a href='#L373'>373</a>
439
- <a name='L374'></a><a href='#L374'>374</a>
440
- <a name='L375'></a><a href='#L375'>375</a>
441
- <a name='L376'></a><a href='#L376'>376</a>
442
- <a name='L377'></a><a href='#L377'>377</a>
443
- <a name='L378'></a><a href='#L378'>378</a>
444
- <a name='L379'></a><a href='#L379'>379</a>
445
- <a name='L380'></a><a href='#L380'>380</a>
446
- <a name='L381'></a><a href='#L381'>381</a>
447
- <a name='L382'></a><a href='#L382'>382</a>
448
- <a name='L383'></a><a href='#L383'>383</a>
449
- <a name='L384'></a><a href='#L384'>384</a>
450
- <a name='L385'></a><a href='#L385'>385</a>
451
- <a name='L386'></a><a href='#L386'>386</a>
452
- <a name='L387'></a><a href='#L387'>387</a>
453
- <a name='L388'></a><a href='#L388'>388</a>
454
- <a name='L389'></a><a href='#L389'>389</a>
455
- <a name='L390'></a><a href='#L390'>390</a>
456
- <a name='L391'></a><a href='#L391'>391</a>
457
- <a name='L392'></a><a href='#L392'>392</a>
458
- <a name='L393'></a><a href='#L393'>393</a>
459
- <a name='L394'></a><a href='#L394'>394</a>
460
- <a name='L395'></a><a href='#L395'>395</a>
461
- <a name='L396'></a><a href='#L396'>396</a>
462
- <a name='L397'></a><a href='#L397'>397</a>
463
- <a name='L398'></a><a href='#L398'>398</a>
464
- <a name='L399'></a><a href='#L399'>399</a>
465
- <a name='L400'></a><a href='#L400'>400</a>
466
- <a name='L401'></a><a href='#L401'>401</a>
467
- <a name='L402'></a><a href='#L402'>402</a>
468
- <a name='L403'></a><a href='#L403'>403</a>
469
- <a name='L404'></a><a href='#L404'>404</a>
470
- <a name='L405'></a><a href='#L405'>405</a>
471
- <a name='L406'></a><a href='#L406'>406</a>
472
- <a name='L407'></a><a href='#L407'>407</a>
473
- <a name='L408'></a><a href='#L408'>408</a>
474
- <a name='L409'></a><a href='#L409'>409</a>
475
- <a name='L410'></a><a href='#L410'>410</a>
476
- <a name='L411'></a><a href='#L411'>411</a>
477
- <a name='L412'></a><a href='#L412'>412</a>
478
- <a name='L413'></a><a href='#L413'>413</a>
479
- <a name='L414'></a><a href='#L414'>414</a>
480
- <a name='L415'></a><a href='#L415'>415</a>
481
- <a name='L416'></a><a href='#L416'>416</a>
482
- <a name='L417'></a><a href='#L417'>417</a>
483
- <a name='L418'></a><a href='#L418'>418</a>
484
- <a name='L419'></a><a href='#L419'>419</a>
485
- <a name='L420'></a><a href='#L420'>420</a>
486
- <a name='L421'></a><a href='#L421'>421</a>
487
- <a name='L422'></a><a href='#L422'>422</a>
488
- <a name='L423'></a><a href='#L423'>423</a>
489
- <a name='L424'></a><a href='#L424'>424</a>
490
- <a name='L425'></a><a href='#L425'>425</a>
491
- <a name='L426'></a><a href='#L426'>426</a>
492
- <a name='L427'></a><a href='#L427'>427</a>
493
- <a name='L428'></a><a href='#L428'>428</a>
494
- <a name='L429'></a><a href='#L429'>429</a>
495
- <a name='L430'></a><a href='#L430'>430</a>
496
- <a name='L431'></a><a href='#L431'>431</a>
497
- <a name='L432'></a><a href='#L432'>432</a>
498
- <a name='L433'></a><a href='#L433'>433</a>
499
- <a name='L434'></a><a href='#L434'>434</a>
500
- <a name='L435'></a><a href='#L435'>435</a>
501
- <a name='L436'></a><a href='#L436'>436</a>
502
- <a name='L437'></a><a href='#L437'>437</a>
503
- <a name='L438'></a><a href='#L438'>438</a>
504
- <a name='L439'></a><a href='#L439'>439</a>
505
- <a name='L440'></a><a href='#L440'>440</a></td><td class="line-coverage quiet"><span class="cline-any cline-neutral">&nbsp;</span>
506
- <span class="cline-any cline-neutral">&nbsp;</span>
507
- <span class="cline-any cline-neutral">&nbsp;</span>
508
- <span class="cline-any cline-neutral">&nbsp;</span>
509
- <span class="cline-any cline-neutral">&nbsp;</span>
510
- <span class="cline-any cline-neutral">&nbsp;</span>
511
- <span class="cline-any cline-neutral">&nbsp;</span>
512
- <span class="cline-any cline-neutral">&nbsp;</span>
513
- <span class="cline-any cline-neutral">&nbsp;</span>
514
- <span class="cline-any cline-neutral">&nbsp;</span>
515
- <span class="cline-any cline-neutral">&nbsp;</span>
516
- <span class="cline-any cline-neutral">&nbsp;</span>
517
- <span class="cline-any cline-neutral">&nbsp;</span>
518
- <span class="cline-any cline-neutral">&nbsp;</span>
519
- <span class="cline-any cline-neutral">&nbsp;</span>
520
- <span class="cline-any cline-neutral">&nbsp;</span>
521
- <span class="cline-any cline-neutral">&nbsp;</span>
522
- <span class="cline-any cline-neutral">&nbsp;</span>
523
- <span class="cline-any cline-neutral">&nbsp;</span>
524
- <span class="cline-any cline-neutral">&nbsp;</span>
525
- <span class="cline-any cline-neutral">&nbsp;</span>
526
- <span class="cline-any cline-neutral">&nbsp;</span>
527
- <span class="cline-any cline-neutral">&nbsp;</span>
528
- <span class="cline-any cline-neutral">&nbsp;</span>
529
- <span class="cline-any cline-neutral">&nbsp;</span>
530
- <span class="cline-any cline-neutral">&nbsp;</span>
531
- <span class="cline-any cline-neutral">&nbsp;</span>
532
- <span class="cline-any cline-neutral">&nbsp;</span>
533
- <span class="cline-any cline-neutral">&nbsp;</span>
534
- <span class="cline-any cline-neutral">&nbsp;</span>
535
- <span class="cline-any cline-neutral">&nbsp;</span>
536
- <span class="cline-any cline-neutral">&nbsp;</span>
537
- <span class="cline-any cline-neutral">&nbsp;</span>
538
- <span class="cline-any cline-yes">3x</span>
539
- <span class="cline-any cline-yes">3x</span>
540
- <span class="cline-any cline-yes">3x</span>
541
- <span class="cline-any cline-neutral">&nbsp;</span>
542
- <span class="cline-any cline-neutral">&nbsp;</span>
543
- <span class="cline-any cline-neutral">&nbsp;</span>
544
- <span class="cline-any cline-neutral">&nbsp;</span>
545
- <span class="cline-any cline-neutral">&nbsp;</span>
546
- <span class="cline-any cline-neutral">&nbsp;</span>
547
- <span class="cline-any cline-neutral">&nbsp;</span>
548
- <span class="cline-any cline-neutral">&nbsp;</span>
549
- <span class="cline-any cline-neutral">&nbsp;</span>
550
- <span class="cline-any cline-neutral">&nbsp;</span>
551
- <span class="cline-any cline-neutral">&nbsp;</span>
552
- <span class="cline-any cline-neutral">&nbsp;</span>
553
- <span class="cline-any cline-neutral">&nbsp;</span>
554
- <span class="cline-any cline-neutral">&nbsp;</span>
555
- <span class="cline-any cline-neutral">&nbsp;</span>
556
- <span class="cline-any cline-neutral">&nbsp;</span>
557
- <span class="cline-any cline-neutral">&nbsp;</span>
558
- <span class="cline-any cline-neutral">&nbsp;</span>
559
- <span class="cline-any cline-neutral">&nbsp;</span>
560
- <span class="cline-any cline-neutral">&nbsp;</span>
561
- <span class="cline-any cline-neutral">&nbsp;</span>
562
- <span class="cline-any cline-no">&nbsp;</span>
563
- <span class="cline-any cline-no">&nbsp;</span>
564
- <span class="cline-any cline-neutral">&nbsp;</span>
565
- <span class="cline-any cline-neutral">&nbsp;</span>
566
- <span class="cline-any cline-neutral">&nbsp;</span>
567
- <span class="cline-any cline-neutral">&nbsp;</span>
568
- <span class="cline-any cline-yes">1x</span>
569
- <span class="cline-any cline-neutral">&nbsp;</span>
570
- <span class="cline-any cline-neutral">&nbsp;</span>
571
- <span class="cline-any cline-neutral">&nbsp;</span>
572
- <span class="cline-any cline-no">&nbsp;</span>
573
- <span class="cline-any cline-no">&nbsp;</span>
574
- <span class="cline-any cline-neutral">&nbsp;</span>
575
- <span class="cline-any cline-neutral">&nbsp;</span>
576
- <span class="cline-any cline-neutral">&nbsp;</span>
577
- <span class="cline-any cline-neutral">&nbsp;</span>
578
- <span class="cline-any cline-yes">1x</span>
579
- <span class="cline-any cline-neutral">&nbsp;</span>
580
- <span class="cline-any cline-neutral">&nbsp;</span>
581
- <span class="cline-any cline-neutral">&nbsp;</span>
582
- <span class="cline-any cline-neutral">&nbsp;</span>
583
- <span class="cline-any cline-yes">1x</span>
584
- <span class="cline-any cline-neutral">&nbsp;</span>
585
- <span class="cline-any cline-neutral">&nbsp;</span>
586
- <span class="cline-any cline-neutral">&nbsp;</span>
587
- <span class="cline-any cline-yes">1x</span>
588
- <span class="cline-any cline-yes">1x</span>
589
- <span class="cline-any cline-yes">1x</span>
590
- <span class="cline-any cline-neutral">&nbsp;</span>
591
- <span class="cline-any cline-neutral">&nbsp;</span>
592
- <span class="cline-any cline-no">&nbsp;</span>
593
- <span class="cline-any cline-neutral">&nbsp;</span>
594
- <span class="cline-any cline-neutral">&nbsp;</span>
595
- <span class="cline-any cline-neutral">&nbsp;</span>
596
- <span class="cline-any cline-neutral">&nbsp;</span>
597
- <span class="cline-any cline-neutral">&nbsp;</span>
598
- <span class="cline-any cline-neutral">&nbsp;</span>
599
- <span class="cline-any cline-no">&nbsp;</span>
600
- <span class="cline-any cline-neutral">&nbsp;</span>
601
- <span class="cline-any cline-no">&nbsp;</span>
602
- <span class="cline-any cline-neutral">&nbsp;</span>
603
- <span class="cline-any cline-no">&nbsp;</span>
604
- <span class="cline-any cline-neutral">&nbsp;</span>
605
- <span class="cline-any cline-neutral">&nbsp;</span>
606
- <span class="cline-any cline-neutral">&nbsp;</span>
607
- <span class="cline-any cline-neutral">&nbsp;</span>
608
- <span class="cline-any cline-yes">1x</span>
609
- <span class="cline-any cline-neutral">&nbsp;</span>
610
- <span class="cline-any cline-neutral">&nbsp;</span>
611
- <span class="cline-any cline-neutral">&nbsp;</span>
612
- <span class="cline-any cline-neutral">&nbsp;</span>
613
- <span class="cline-any cline-neutral">&nbsp;</span>
614
- <span class="cline-any cline-neutral">&nbsp;</span>
615
- <span class="cline-any cline-neutral">&nbsp;</span>
616
- <span class="cline-any cline-yes">1x</span>
617
- <span class="cline-any cline-yes">1x</span>
618
- <span class="cline-any cline-yes">2x</span>
619
- <span class="cline-any cline-neutral">&nbsp;</span>
620
- <span class="cline-any cline-neutral">&nbsp;</span>
621
- <span class="cline-any cline-neutral">&nbsp;</span>
622
- <span class="cline-any cline-neutral">&nbsp;</span>
623
- <span class="cline-any cline-neutral">&nbsp;</span>
624
- <span class="cline-any cline-neutral">&nbsp;</span>
625
- <span class="cline-any cline-yes">1x</span>
626
- <span class="cline-any cline-neutral">&nbsp;</span>
627
- <span class="cline-any cline-neutral">&nbsp;</span>
628
- <span class="cline-any cline-neutral">&nbsp;</span>
629
- <span class="cline-any cline-no">&nbsp;</span>
630
- <span class="cline-any cline-no">&nbsp;</span>
631
- <span class="cline-any cline-neutral">&nbsp;</span>
632
- <span class="cline-any cline-neutral">&nbsp;</span>
633
- <span class="cline-any cline-neutral">&nbsp;</span>
634
- <span class="cline-any cline-no">&nbsp;</span>
635
- <span class="cline-any cline-no">&nbsp;</span>
636
- <span class="cline-any cline-neutral">&nbsp;</span>
637
- <span class="cline-any cline-neutral">&nbsp;</span>
638
- <span class="cline-any cline-neutral">&nbsp;</span>
639
- <span class="cline-any cline-no">&nbsp;</span>
640
- <span class="cline-any cline-no">&nbsp;</span>
641
- <span class="cline-any cline-neutral">&nbsp;</span>
642
- <span class="cline-any cline-neutral">&nbsp;</span>
643
- <span class="cline-any cline-neutral">&nbsp;</span>
644
- <span class="cline-any cline-neutral">&nbsp;</span>
645
- <span class="cline-any cline-neutral">&nbsp;</span>
646
- <span class="cline-any cline-neutral">&nbsp;</span>
647
- <span class="cline-any cline-no">&nbsp;</span>
648
- <span class="cline-any cline-no">&nbsp;</span>
649
- <span class="cline-any cline-neutral">&nbsp;</span>
650
- <span class="cline-any cline-neutral">&nbsp;</span>
651
- <span class="cline-any cline-neutral">&nbsp;</span>
652
- <span class="cline-any cline-neutral">&nbsp;</span>
653
- <span class="cline-any cline-neutral">&nbsp;</span>
654
- <span class="cline-any cline-neutral">&nbsp;</span>
655
- <span class="cline-any cline-no">&nbsp;</span>
656
- <span class="cline-any cline-no">&nbsp;</span>
657
- <span class="cline-any cline-neutral">&nbsp;</span>
658
- <span class="cline-any cline-neutral">&nbsp;</span>
659
- <span class="cline-any cline-no">&nbsp;</span>
660
- <span class="cline-any cline-neutral">&nbsp;</span>
661
- <span class="cline-any cline-neutral">&nbsp;</span>
662
- <span class="cline-any cline-neutral">&nbsp;</span>
663
- <span class="cline-any cline-neutral">&nbsp;</span>
664
- <span class="cline-any cline-neutral">&nbsp;</span>
665
- <span class="cline-any cline-no">&nbsp;</span>
666
- <span class="cline-any cline-neutral">&nbsp;</span>
667
- <span class="cline-any cline-neutral">&nbsp;</span>
668
- <span class="cline-any cline-neutral">&nbsp;</span>
669
- <span class="cline-any cline-neutral">&nbsp;</span>
670
- <span class="cline-any cline-neutral">&nbsp;</span>
671
- <span class="cline-any cline-neutral">&nbsp;</span>
672
- <span class="cline-any cline-neutral">&nbsp;</span>
673
- <span class="cline-any cline-neutral">&nbsp;</span>
674
- <span class="cline-any cline-neutral">&nbsp;</span>
675
- <span class="cline-any cline-neutral">&nbsp;</span>
676
- <span class="cline-any cline-neutral">&nbsp;</span>
677
- <span class="cline-any cline-neutral">&nbsp;</span>
678
- <span class="cline-any cline-neutral">&nbsp;</span>
679
- <span class="cline-any cline-neutral">&nbsp;</span>
680
- <span class="cline-any cline-neutral">&nbsp;</span>
681
- <span class="cline-any cline-neutral">&nbsp;</span>
682
- <span class="cline-any cline-neutral">&nbsp;</span>
683
- <span class="cline-any cline-no">&nbsp;</span>
684
- <span class="cline-any cline-neutral">&nbsp;</span>
685
- <span class="cline-any cline-neutral">&nbsp;</span>
686
- <span class="cline-any cline-neutral">&nbsp;</span>
687
- <span class="cline-any cline-neutral">&nbsp;</span>
688
- <span class="cline-any cline-neutral">&nbsp;</span>
689
- <span class="cline-any cline-neutral">&nbsp;</span>
690
- <span class="cline-any cline-neutral">&nbsp;</span>
691
- <span class="cline-any cline-neutral">&nbsp;</span>
692
- <span class="cline-any cline-neutral">&nbsp;</span>
693
- <span class="cline-any cline-neutral">&nbsp;</span>
694
- <span class="cline-any cline-neutral">&nbsp;</span>
695
- <span class="cline-any cline-neutral">&nbsp;</span>
696
- <span class="cline-any cline-neutral">&nbsp;</span>
697
- <span class="cline-any cline-neutral">&nbsp;</span>
698
- <span class="cline-any cline-neutral">&nbsp;</span>
699
- <span class="cline-any cline-neutral">&nbsp;</span>
700
- <span class="cline-any cline-neutral">&nbsp;</span>
701
- <span class="cline-any cline-neutral">&nbsp;</span>
702
- <span class="cline-any cline-neutral">&nbsp;</span>
703
- <span class="cline-any cline-neutral">&nbsp;</span>
704
- <span class="cline-any cline-neutral">&nbsp;</span>
705
- <span class="cline-any cline-neutral">&nbsp;</span>
706
- <span class="cline-any cline-neutral">&nbsp;</span>
707
- <span class="cline-any cline-neutral">&nbsp;</span>
708
- <span class="cline-any cline-neutral">&nbsp;</span>
709
- <span class="cline-any cline-neutral">&nbsp;</span>
710
- <span class="cline-any cline-neutral">&nbsp;</span>
711
- <span class="cline-any cline-neutral">&nbsp;</span>
712
- <span class="cline-any cline-neutral">&nbsp;</span>
713
- <span class="cline-any cline-neutral">&nbsp;</span>
714
- <span class="cline-any cline-neutral">&nbsp;</span>
715
- <span class="cline-any cline-neutral">&nbsp;</span>
716
- <span class="cline-any cline-neutral">&nbsp;</span>
717
- <span class="cline-any cline-neutral">&nbsp;</span>
718
- <span class="cline-any cline-neutral">&nbsp;</span>
719
- <span class="cline-any cline-neutral">&nbsp;</span>
720
- <span class="cline-any cline-neutral">&nbsp;</span>
721
- <span class="cline-any cline-neutral">&nbsp;</span>
722
- <span class="cline-any cline-neutral">&nbsp;</span>
723
- <span class="cline-any cline-neutral">&nbsp;</span>
724
- <span class="cline-any cline-neutral">&nbsp;</span>
725
- <span class="cline-any cline-neutral">&nbsp;</span>
726
- <span class="cline-any cline-neutral">&nbsp;</span>
727
- <span class="cline-any cline-neutral">&nbsp;</span>
728
- <span class="cline-any cline-neutral">&nbsp;</span>
729
- <span class="cline-any cline-neutral">&nbsp;</span>
730
- <span class="cline-any cline-neutral">&nbsp;</span>
731
- <span class="cline-any cline-neutral">&nbsp;</span>
732
- <span class="cline-any cline-neutral">&nbsp;</span>
733
- <span class="cline-any cline-neutral">&nbsp;</span>
734
- <span class="cline-any cline-neutral">&nbsp;</span>
735
- <span class="cline-any cline-neutral">&nbsp;</span>
736
- <span class="cline-any cline-neutral">&nbsp;</span>
737
- <span class="cline-any cline-neutral">&nbsp;</span>
738
- <span class="cline-any cline-neutral">&nbsp;</span>
739
- <span class="cline-any cline-neutral">&nbsp;</span>
740
- <span class="cline-any cline-neutral">&nbsp;</span>
741
- <span class="cline-any cline-neutral">&nbsp;</span>
742
- <span class="cline-any cline-neutral">&nbsp;</span>
743
- <span class="cline-any cline-neutral">&nbsp;</span>
744
- <span class="cline-any cline-neutral">&nbsp;</span>
745
- <span class="cline-any cline-neutral">&nbsp;</span>
746
- <span class="cline-any cline-neutral">&nbsp;</span>
747
- <span class="cline-any cline-neutral">&nbsp;</span>
748
- <span class="cline-any cline-neutral">&nbsp;</span>
749
- <span class="cline-any cline-neutral">&nbsp;</span>
750
- <span class="cline-any cline-neutral">&nbsp;</span>
751
- <span class="cline-any cline-neutral">&nbsp;</span>
752
- <span class="cline-any cline-neutral">&nbsp;</span>
753
- <span class="cline-any cline-neutral">&nbsp;</span>
754
- <span class="cline-any cline-neutral">&nbsp;</span>
755
- <span class="cline-any cline-neutral">&nbsp;</span>
756
- <span class="cline-any cline-neutral">&nbsp;</span>
757
- <span class="cline-any cline-neutral">&nbsp;</span>
758
- <span class="cline-any cline-neutral">&nbsp;</span>
759
- <span class="cline-any cline-neutral">&nbsp;</span>
760
- <span class="cline-any cline-neutral">&nbsp;</span>
761
- <span class="cline-any cline-neutral">&nbsp;</span>
762
- <span class="cline-any cline-neutral">&nbsp;</span>
763
- <span class="cline-any cline-neutral">&nbsp;</span>
764
- <span class="cline-any cline-neutral">&nbsp;</span>
765
- <span class="cline-any cline-neutral">&nbsp;</span>
766
- <span class="cline-any cline-neutral">&nbsp;</span>
767
- <span class="cline-any cline-neutral">&nbsp;</span>
768
- <span class="cline-any cline-neutral">&nbsp;</span>
769
- <span class="cline-any cline-neutral">&nbsp;</span>
770
- <span class="cline-any cline-neutral">&nbsp;</span>
771
- <span class="cline-any cline-neutral">&nbsp;</span>
772
- <span class="cline-any cline-neutral">&nbsp;</span>
773
- <span class="cline-any cline-neutral">&nbsp;</span>
774
- <span class="cline-any cline-neutral">&nbsp;</span>
775
- <span class="cline-any cline-neutral">&nbsp;</span>
776
- <span class="cline-any cline-neutral">&nbsp;</span>
777
- <span class="cline-any cline-neutral">&nbsp;</span>
778
- <span class="cline-any cline-neutral">&nbsp;</span>
779
- <span class="cline-any cline-neutral">&nbsp;</span>
780
- <span class="cline-any cline-neutral">&nbsp;</span>
781
- <span class="cline-any cline-neutral">&nbsp;</span>
782
- <span class="cline-any cline-neutral">&nbsp;</span>
783
- <span class="cline-any cline-neutral">&nbsp;</span>
784
- <span class="cline-any cline-neutral">&nbsp;</span>
785
- <span class="cline-any cline-neutral">&nbsp;</span>
786
- <span class="cline-any cline-neutral">&nbsp;</span>
787
- <span class="cline-any cline-neutral">&nbsp;</span>
788
- <span class="cline-any cline-neutral">&nbsp;</span>
789
- <span class="cline-any cline-neutral">&nbsp;</span>
790
- <span class="cline-any cline-neutral">&nbsp;</span>
791
- <span class="cline-any cline-neutral">&nbsp;</span>
792
- <span class="cline-any cline-neutral">&nbsp;</span>
793
- <span class="cline-any cline-neutral">&nbsp;</span>
794
- <span class="cline-any cline-neutral">&nbsp;</span>
795
- <span class="cline-any cline-neutral">&nbsp;</span>
796
- <span class="cline-any cline-no">&nbsp;</span>
797
- <span class="cline-any cline-neutral">&nbsp;</span>
798
- <span class="cline-any cline-neutral">&nbsp;</span>
799
- <span class="cline-any cline-neutral">&nbsp;</span>
800
- <span class="cline-any cline-neutral">&nbsp;</span>
801
- <span class="cline-any cline-neutral">&nbsp;</span>
802
- <span class="cline-any cline-neutral">&nbsp;</span>
803
- <span class="cline-any cline-neutral">&nbsp;</span>
804
- <span class="cline-any cline-neutral">&nbsp;</span>
805
- <span class="cline-any cline-neutral">&nbsp;</span>
806
- <span class="cline-any cline-neutral">&nbsp;</span>
807
- <span class="cline-any cline-neutral">&nbsp;</span>
808
- <span class="cline-any cline-neutral">&nbsp;</span>
809
- <span class="cline-any cline-neutral">&nbsp;</span>
810
- <span class="cline-any cline-neutral">&nbsp;</span>
811
- <span class="cline-any cline-no">&nbsp;</span>
812
- <span class="cline-any cline-no">&nbsp;</span>
813
- <span class="cline-any cline-no">&nbsp;</span>
814
- <span class="cline-any cline-neutral">&nbsp;</span>
815
- <span class="cline-any cline-neutral">&nbsp;</span>
816
- <span class="cline-any cline-no">&nbsp;</span>
817
- <span class="cline-any cline-no">&nbsp;</span>
818
- <span class="cline-any cline-no">&nbsp;</span>
819
- <span class="cline-any cline-no">&nbsp;</span>
820
- <span class="cline-any cline-neutral">&nbsp;</span>
821
- <span class="cline-any cline-no">&nbsp;</span>
822
- <span class="cline-any cline-neutral">&nbsp;</span>
823
- <span class="cline-any cline-neutral">&nbsp;</span>
824
- <span class="cline-any cline-neutral">&nbsp;</span>
825
- <span class="cline-any cline-neutral">&nbsp;</span>
826
- <span class="cline-any cline-neutral">&nbsp;</span>
827
- <span class="cline-any cline-neutral">&nbsp;</span>
828
- <span class="cline-any cline-no">&nbsp;</span>
829
- <span class="cline-any cline-no">&nbsp;</span>
830
- <span class="cline-any cline-no">&nbsp;</span>
831
- <span class="cline-any cline-no">&nbsp;</span>
832
- <span class="cline-any cline-no">&nbsp;</span>
833
- <span class="cline-any cline-no">&nbsp;</span>
834
- <span class="cline-any cline-neutral">&nbsp;</span>
835
- <span class="cline-any cline-neutral">&nbsp;</span>
836
- <span class="cline-any cline-no">&nbsp;</span>
837
- <span class="cline-any cline-no">&nbsp;</span>
838
- <span class="cline-any cline-no">&nbsp;</span>
839
- <span class="cline-any cline-no">&nbsp;</span>
840
- <span class="cline-any cline-no">&nbsp;</span>
841
- <span class="cline-any cline-neutral">&nbsp;</span>
842
- <span class="cline-any cline-neutral">&nbsp;</span>
843
- <span class="cline-any cline-neutral">&nbsp;</span>
844
- <span class="cline-any cline-neutral">&nbsp;</span>
845
- <span class="cline-any cline-neutral">&nbsp;</span>
846
- <span class="cline-any cline-neutral">&nbsp;</span>
847
- <span class="cline-any cline-neutral">&nbsp;</span>
848
- <span class="cline-any cline-neutral">&nbsp;</span>
849
- <span class="cline-any cline-neutral">&nbsp;</span>
850
- <span class="cline-any cline-neutral">&nbsp;</span>
851
- <span class="cline-any cline-neutral">&nbsp;</span>
852
- <span class="cline-any cline-no">&nbsp;</span>
853
- <span class="cline-any cline-no">&nbsp;</span>
854
- <span class="cline-any cline-no">&nbsp;</span>
855
- <span class="cline-any cline-no">&nbsp;</span>
856
- <span class="cline-any cline-neutral">&nbsp;</span>
857
- <span class="cline-any cline-neutral">&nbsp;</span>
858
- <span class="cline-any cline-neutral">&nbsp;</span>
859
- <span class="cline-any cline-neutral">&nbsp;</span>
860
- <span class="cline-any cline-neutral">&nbsp;</span>
861
- <span class="cline-any cline-neutral">&nbsp;</span>
862
- <span class="cline-any cline-neutral">&nbsp;</span>
863
- <span class="cline-any cline-neutral">&nbsp;</span>
864
- <span class="cline-any cline-neutral">&nbsp;</span>
865
- <span class="cline-any cline-neutral">&nbsp;</span>
866
- <span class="cline-any cline-neutral">&nbsp;</span>
867
- <span class="cline-any cline-neutral">&nbsp;</span>
868
- <span class="cline-any cline-neutral">&nbsp;</span>
869
- <span class="cline-any cline-neutral">&nbsp;</span>
870
- <span class="cline-any cline-neutral">&nbsp;</span>
871
- <span class="cline-any cline-neutral">&nbsp;</span>
872
- <span class="cline-any cline-neutral">&nbsp;</span>
873
- <span class="cline-any cline-no">&nbsp;</span>
874
- <span class="cline-any cline-no">&nbsp;</span>
875
- <span class="cline-any cline-neutral">&nbsp;</span>
876
- <span class="cline-any cline-neutral">&nbsp;</span>
877
- <span class="cline-any cline-neutral">&nbsp;</span>
878
- <span class="cline-any cline-neutral">&nbsp;</span>
879
- <span class="cline-any cline-neutral">&nbsp;</span>
880
- <span class="cline-any cline-neutral">&nbsp;</span>
881
- <span class="cline-any cline-neutral">&nbsp;</span>
882
- <span class="cline-any cline-neutral">&nbsp;</span>
883
- <span class="cline-any cline-neutral">&nbsp;</span>
884
- <span class="cline-any cline-neutral">&nbsp;</span>
885
- <span class="cline-any cline-neutral">&nbsp;</span>
886
- <span class="cline-any cline-neutral">&nbsp;</span>
887
- <span class="cline-any cline-neutral">&nbsp;</span>
888
- <span class="cline-any cline-no">&nbsp;</span>
889
- <span class="cline-any cline-neutral">&nbsp;</span>
890
- <span class="cline-any cline-neutral">&nbsp;</span>
891
- <span class="cline-any cline-neutral">&nbsp;</span>
892
- <span class="cline-any cline-neutral">&nbsp;</span>
893
- <span class="cline-any cline-neutral">&nbsp;</span>
894
- <span class="cline-any cline-neutral">&nbsp;</span>
895
- <span class="cline-any cline-neutral">&nbsp;</span>
896
- <span class="cline-any cline-neutral">&nbsp;</span>
897
- <span class="cline-any cline-neutral">&nbsp;</span>
898
- <span class="cline-any cline-no">&nbsp;</span>
899
- <span class="cline-any cline-no">&nbsp;</span>
900
- <span class="cline-any cline-neutral">&nbsp;</span>
901
- <span class="cline-any cline-no">&nbsp;</span>
902
- <span class="cline-any cline-neutral">&nbsp;</span>
903
- <span class="cline-any cline-neutral">&nbsp;</span>
904
- <span class="cline-any cline-neutral">&nbsp;</span>
905
- <span class="cline-any cline-no">&nbsp;</span>
906
- <span class="cline-any cline-neutral">&nbsp;</span>
907
- <span class="cline-any cline-neutral">&nbsp;</span>
908
- <span class="cline-any cline-neutral">&nbsp;</span>
909
- <span class="cline-any cline-neutral">&nbsp;</span>
910
- <span class="cline-any cline-neutral">&nbsp;</span>
911
- <span class="cline-any cline-neutral">&nbsp;</span>
912
- <span class="cline-any cline-neutral">&nbsp;</span>
913
- <span class="cline-any cline-neutral">&nbsp;</span>
914
- <span class="cline-any cline-neutral">&nbsp;</span>
915
- <span class="cline-any cline-neutral">&nbsp;</span>
916
- <span class="cline-any cline-neutral">&nbsp;</span>
917
- <span class="cline-any cline-no">&nbsp;</span>
918
- <span class="cline-any cline-no">&nbsp;</span>
919
- <span class="cline-any cline-neutral">&nbsp;</span>
920
- <span class="cline-any cline-neutral">&nbsp;</span>
921
- <span class="cline-any cline-no">&nbsp;</span>
922
- <span class="cline-any cline-no">&nbsp;</span>
923
- <span class="cline-any cline-neutral">&nbsp;</span>
924
- <span class="cline-any cline-neutral">&nbsp;</span>
925
- <span class="cline-any cline-neutral">&nbsp;</span>
926
- <span class="cline-any cline-neutral">&nbsp;</span>
927
- <span class="cline-any cline-neutral">&nbsp;</span>
928
- <span class="cline-any cline-neutral">&nbsp;</span>
929
- <span class="cline-any cline-neutral">&nbsp;</span>
930
- <span class="cline-any cline-neutral">&nbsp;</span>
931
- <span class="cline-any cline-neutral">&nbsp;</span>
932
- <span class="cline-any cline-neutral">&nbsp;</span>
933
- <span class="cline-any cline-no">&nbsp;</span>
934
- <span class="cline-any cline-neutral">&nbsp;</span>
935
- <span class="cline-any cline-neutral">&nbsp;</span>
936
- <span class="cline-any cline-neutral">&nbsp;</span>
937
- <span class="cline-any cline-neutral">&nbsp;</span>
938
- <span class="cline-any cline-neutral">&nbsp;</span>
939
- <span class="cline-any cline-neutral">&nbsp;</span>
940
- <span class="cline-any cline-neutral">&nbsp;</span>
941
- <span class="cline-any cline-neutral">&nbsp;</span>
942
- <span class="cline-any cline-no">&nbsp;</span>
943
- <span class="cline-any cline-neutral">&nbsp;</span>
944
- <span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">import { createHash } from 'node:crypto';
945
- import { existsSync } from 'node:fs';
946
- import { basename } from 'node:path';
947
- import type { SkillDefinition } from '../config/schema.js';
948
- import type { Runtime, RuntimeName } from '../sdk/runtimes/index.js';
949
- import { getRuntime } from '../sdk/runtimes/index.js';
950
- import { runStructuredSkillBuilderAgent, StructuredSkillBuilderAgentError } from './agentic.js';
951
- import {
952
- GENERATED_SKILL_DEFINITION_FILE,
953
- loadGeneratedSkillDefinition,
954
- readGeneratedSkillArtifactFiles,
955
- } from './definition.js';
956
- import {
957
- SKILL_BUILD_OUTLINE_SCHEMA_VERSION,
958
- SKILL_BUILD_VERSION,
959
- SkillBuildOutlineSchema,
960
- type SkillBuildOutline,
961
- type SkillBuildOutlineResult,
962
- type SkillBuildSourceFile,
963
- type SkillBuildSource,
964
- } from './outline-contract.js';
965
- import {
966
- getBuildStatePath,
967
- type SkillBuildState,
968
- readSkillBuildState,
969
- SKILL_BUILD_STATE_KIND,
970
- SKILL_BUILD_STATE_SCHEMA_VERSION,
971
- writeSkillBuildState,
972
- } from './outline-state.js';
973
- &nbsp;
974
- export { outlineHash, SKILL_BUILD_OUTLINE_SCHEMA_VERSION, SKILL_BUILD_VERSION, SkillBuildOutlineSchema } from './outline-contract.js';
975
- export type { SkillBuildOutline, SkillBuildOutlineResult, SkillBuildSource, SkillBuildSourceFile } from './outline-contract.js';
976
- &nbsp;
977
- export const SKILL_BUILD_MAX_TOKENS = 64_000;
978
- export const SKILL_BUILD_TIMEOUT_MS = 180_000;
979
- export const SKILL_BUILD_MAX_TURNS = 80;
980
- &nbsp;
981
- export interface BuildSkillOutlineOptions {
982
- skill: SkillDefinition;
983
- runtime?: Runtime;
984
- runtimeName?: RuntimeName;
985
- apiKey?: string;
986
- model?: string;
987
- previousOutline?: SkillBuildOutline;
988
- maxRetries?: number;
989
- regenerate?: boolean;
990
- abortController?: AbortController;
991
- repoPath?: string;
992
- maxTurns?: number;
993
- repairModel?: string;
994
- repairMaxRetries?: number;
995
- onStatus?: (message: string) =&gt; void;
996
- source?: SkillBuildSource;
997
- }
998
- &nbsp;
999
- export class SkillBuildOutlineError extends Error {
1000
- <span class="fstat-no" title="function not covered" > constructor(m</span>essage: string, options?: { cause?: unknown }) {
1001
- <span class="cstat-no" title="statement not covered" > super(message, options);</span>
1002
- <span class="cstat-no" title="statement not covered" > this.name = 'SkillBuildOutlineError';</span>
1003
- }
1004
- }
1005
- &nbsp;
1006
- function sha256(value: string): string {
1007
- return createHash('sha256').update(value).digest('hex');
1008
- }
1009
- &nbsp;
1010
- function <span class="fstat-no" title="function not covered" >sourceBlocks(s</span>ource: SkillBuildSource): string {
1011
- <span class="cstat-no" title="statement not covered" > return source.files</span>
1012
- .map(<span class="fstat-no" title="function not covered" >(f</span>ile) =&gt; <span class="cstat-no" title="statement not covered" >`## ${file.path}\n\n${file.content}`)</span>
1013
- .join('\n\n---\n\n');
1014
- }
1015
- &nbsp;
1016
- function buildSkillSource(skillName: string, files: SkillBuildSourceFile[]): SkillBuildSource {
1017
- const hash = sha256(JSON.stringify({
1018
- skill: skillName,
1019
- files,
1020
- }));
1021
- &nbsp;
1022
- return { hash, files };
1023
- }
1024
- &nbsp;
1025
- function generatedSkillDefinitionSourceFile(skill: SkillDefinition): SkillBuildSourceFile {
1026
- <span class="missing-if-branch" title="else path not taken" >E</span>if (skill.rootDir) {
1027
- const { content } = loadGeneratedSkillDefinition(skill.rootDir);
1028
- return { path: GENERATED_SKILL_DEFINITION_FILE, content };
1029
- }
1030
- &nbsp;
1031
- <span class="cstat-no" title="statement not covered" > return {</span>
1032
- path: GENERATED_SKILL_DEFINITION_FILE,
1033
- content: `version: 1\nkind: generated-skill\nname: ${skill.name}\nprompt: ${JSON.stringify(skill.prompt)}\n`,
1034
- };
1035
- }
1036
- &nbsp;
1037
- export function <span class="fstat-no" title="function not covered" >collectSkillBuildSource(s</span>kill: SkillDefinition): SkillBuildSource {
1038
- const files: SkillBuildSourceFile[] = <span class="cstat-no" title="statement not covered" >[];</span>
1039
- &nbsp;
1040
- <span class="cstat-no" title="statement not covered" > files.push(generatedSkillDefinitionSourceFile(skill));</span>
1041
- &nbsp;
1042
- <span class="cstat-no" title="statement not covered" > return buildSkillSource(skill.name, files);</span>
1043
- }
1044
- &nbsp;
1045
- /** Collect the improvement brief and current artifacts as source material. */
1046
- export function collectSkillImproveSource(skill: SkillDefinition, improvementPrompt: string): SkillBuildSource {
1047
- const files: SkillBuildSourceFile[] = [
1048
- generatedSkillDefinitionSourceFile(skill),
1049
- {
1050
- path: 'improvement-brief.md',
1051
- content: improvementPrompt.trim(),
1052
- },
1053
- ];
1054
- &nbsp;
1055
- <span class="missing-if-branch" title="else path not taken" >E</span>if (skill.rootDir) {
1056
- files.push(
1057
- ...readGeneratedSkillArtifactFiles(skill.rootDir).map((file) =&gt; ({
1058
- path: `current-artifacts/${file.path}`,
1059
- content: file.content,
1060
- })),
1061
- );
1062
- }
1063
- &nbsp;
1064
- return buildSkillSource(skill.name, files);
1065
- }
1066
- &nbsp;
1067
- function <span class="fstat-no" title="function not covered" >validateOutlineIdentity(o</span>utline: SkillBuildOutline, skillName: string, sourceHash: string): void {
1068
- <span class="cstat-no" title="statement not covered" > if (outline.skill !== skillName) {</span>
1069
- <span class="cstat-no" title="statement not covered" > throw new SkillBuildOutlineError(</span>
1070
- `Generated skill outline mismatch: expected ${skillName}, got ${outline.skill}`,
1071
- );
1072
- }
1073
- <span class="cstat-no" title="statement not covered" > if (outline.sourceHash !== sourceHash) {</span>
1074
- <span class="cstat-no" title="statement not covered" > throw new SkillBuildOutlineError(</span>
1075
- `Generated skill outline source hash mismatch for ${skillName}. Regenerate the skill.`,
1076
- );
1077
- }
1078
- <span class="cstat-no" title="statement not covered" > if (outline.buildVersion !== SKILL_BUILD_VERSION) {</span>
1079
- <span class="cstat-no" title="statement not covered" > throw new SkillBuildOutlineError(</span>
1080
- `Generated skill outline version mismatch for ${skillName}. Regenerate the skill.`,
1081
- );
1082
- }
1083
- }
1084
- &nbsp;
1085
- function <span class="fstat-no" title="function not covered" >validateStateIdentity(s</span>tate: SkillBuildState, model: string | undefined): void {
1086
- <span class="cstat-no" title="statement not covered" > if (state.identity?.requestedModel !== model) {</span>
1087
- <span class="cstat-no" title="statement not covered" > throw new SkillBuildOutlineError(</span>
1088
- `Generated skill model mismatch. Expected ${model ?? 'default'}, got ${state.identity?.requestedModel ?? 'default'}. Regenerate the skill.`,
1089
- );
1090
- }
1091
- }
1092
- &nbsp;
1093
- function <span class="fstat-no" title="function not covered" >renderPreviousOutlineContinuity(p</span>reviousOutline: SkillBuildOutline | undefined): string {
1094
- <span class="cstat-no" title="statement not covered" > if (!previousOutline || previousOutline.tracks.length === 0) {</span>
1095
- <span class="cstat-no" title="statement not covered" > return '';</span>
1096
- }
1097
- &nbsp;
1098
- const previousTracks = <span class="cstat-no" title="statement not covered" >previousOutline.tracks.map(<span class="fstat-no" title="function not covered" >(t</span>rack) =&gt; (<span class="cstat-no" title="statement not covered" >{</span></span>
1099
- id: track.id,
1100
- title: track.title,
1101
- goal: track.goal,
1102
- }));
1103
- &nbsp;
1104
- <span class="cstat-no" title="statement not covered" > return `</span>
1105
- &nbsp;
1106
- Existing track continuity:
1107
- - Reuse an existing track id exactly when the same concern still exists after regeneration.
1108
- - Only create a new track id when a concern is genuinely new.
1109
- - If one previous track splits into multiple tracks, keep the previous id on the primary surviving concern and mint new ids only for the new sibling concerns.
1110
- - If multiple previous tracks merge, keep the id of the track whose concern remains primary.
1111
- - Do not rename tracks casually. Stable ids help compare authoring plans across regenerations.
1112
- &nbsp;
1113
- Previous track set:
1114
- ${JSON.stringify(previousTracks, null, 2)}`;
1115
- }
1116
- &nbsp;
1117
- function <span class="fstat-no" title="function not covered" >buildOutlinePrompt(</span>
1118
- skill: SkillDefinition,
1119
- source: SkillBuildSource,
1120
- previousOutline?: SkillBuildOutline,
1121
- ): string {
1122
- <span class="cstat-no" title="statement not covered" > return `You build the internal outline for one repo-local Warden skill.</span>
1123
- &nbsp;
1124
- This outline exists only to give Warden context for a later authoring-provider run. It is planning metadata, not a runnable skill, and it does not prescribe the final artifact layout.
1125
- &nbsp;
1126
- Rules:
1127
- - Return only a JSON object. No markdown, prose, or code fences.
1128
- - Use version ${SKILL_BUILD_OUTLINE_SCHEMA_VERSION}.
1129
- - Use skill "${skill.name}".
1130
- - Use sourceHash "${source.hash}" exactly.
1131
- - Use buildVersion "${SKILL_BUILD_VERSION}" exactly.
1132
- - First determine what kind of skill this is: domain, ecosystem, repository, or product.
1133
- - First determine the full agenda implied by the prompt, metadata contract, and source material. The track set exists only to accomplish that agenda completely.
1134
- - Split by analysis concern, not file type, severity, or implementation phase.
1135
- - Track count is unconstrained. Use as many or as few tracks as needed to fit the agenda cleanly.
1136
- - If one track can carry the agenda without becoming vague or overloaded, one track is correct.
1137
- - If the agenda requires many focused tracks to avoid overlap or shallow work, many tracks are correct.
1138
- - The important constraint is scope fit: each track should be small enough to support deep, coherent execution, and the full track set should accomplish the entire agenda without gaps or duplicate ownership.
1139
- - Each track must have an id, title, goal, rationale, sourceSignals, owns, excludes, relevanceSignals, evidenceFocus, checks, safeCounterpatterns, falsePositiveTraps, and researchHints.
1140
- - Track ids must be lowercase kebab-case.
1141
- - The outline should stay lean. Do not write runnable prompts here.
1142
- - scopeProfile.subject should describe the generated skill, not the repo name alone.
1143
- - scopeProfile.observedContext should capture the concrete context that shaped the track split:
1144
- - for repository or product skills, include the stack, runtime, notable trust boundaries, and important repo-local surfaces you actually observed
1145
- - for domain or ecosystem skills, include the supplied source material, intended platform, and any explicit coverage boundaries
1146
- - scopeProfile.unresolvedContext is only for context that would materially improve decomposition and was not inferable from the provided sources.
1147
- - Do not list obvious context as unresolved when it is already visible in the source material.
1148
- - Treat each track as a concise analysis concern that the authoring provider may use, merge, split, or inline while producing the final skill:
1149
- - goal: the one-line investigation objective
1150
- - rationale: why this track exists for this skill
1151
- - sourceSignals: the context signals that justified this track
1152
- - owns: the primary concerns this track is responsible for
1153
- - excludes: the sibling concerns or boundaries this track must not absorb
1154
- - relevanceSignals: the file, hunk, or behavioral cues that should make the runtime skill pick this track
1155
- - evidenceFocus: what concrete evidence the runtime skill must require
1156
- - checks: a short ordered task set of concrete investigation steps or questions for this track
1157
- - safeCounterpatterns: concrete safe patterns, mitigations, or boundary conditions that should suppress weak findings
1158
- - falsePositiveTraps: the common shallow misreads, sibling overlaps, or pattern-only claims that this track must avoid
1159
- - researchHints: public docs, runtime topics, or prior-art areas the generated reference may need to consult
1160
- - Keep track fields short and specific. If a field starts reading like a long prompt, you are adding bloat to the outline.
1161
- - Do not put trigger-language, long remediation playbooks, or essay-length false-positive controls into the outline.
1162
- - When one code path could create chained risks across tracks, assign one primary owning track and make the other tracks exclude that ownership boundary instead of competing for the same finding.
1163
- - Boundary rules should be written from this track's perspective: say what this track owns and what it must not report.
1164
- - If the source material is too thin for a safe decomposition, make that explicit inside scopeProfile.unresolvedContext or the relevant track fields. Do not silently invent coverage areas.
1165
- - Do not ask follow-up questions or return prose. If context is missing, still return valid JSON and record it in scopeProfile.unresolvedContext or the relevant track fields.
1166
- - Keep all track guidance compatible with Warden's normal hunk analysis model: concerns must be focused, inspectable, and able to return an empty findings array when evidence is insufficient.
1167
- - If the skill is intentionally generic, keep it generic. Depth must come from concrete checks, relevance signals, safe counterpatterns, falsePositiveTraps, and researchHints, not fake repo specificity.
1168
- &nbsp;
1169
- JSON shape:
1170
- {
1171
- "version": ${SKILL_BUILD_OUTLINE_SCHEMA_VERSION},
1172
- "skill": "${skill.name}",
1173
- "sourceHash": "${source.hash}",
1174
- "buildVersion": "${SKILL_BUILD_VERSION}",
1175
- "scopeProfile": {
1176
- "kind": "repository",
1177
- "subject": "Code review for this repo's CLI and runtime surfaces",
1178
- "localContextUsed": true,
1179
- "observedContext": [
1180
- "Node.js and TypeScript runtime",
1181
- "CLI orchestration and subprocess execution",
1182
- "GitHub workflow and token boundaries"
1183
- ],
1184
- "unresolvedContext": ["Production deployment boundary, if it materially affects decomposition"]
1185
- },
1186
- "build": {
1187
- "phases": [
1188
- {"id": "collect-inputs", "status": "generated"},
1189
- {"id": "assess-source-depth", "status": "generated"},
1190
- {"id": "identify-research-needs", "status": "generated"},
1191
- {"id": "build-tracks", "status": "generated"},
1192
- {"id": "validate-coverage", "status": "validated"}
1193
- ],
1194
- "externalSources": [
1195
- {"title": "Public source title", "url": "https://example.com/source", "reason": "Why this source informed the decomposition"}
1196
- ]
1197
- },
1198
- "tracks": [
1199
- {
1200
- "id": "example-track",
1201
- "title": "Example track",
1202
- "goal": "One-line investigation objective.",
1203
- "rationale": "Why this track exists for this skill.",
1204
- "sourceSignals": ["Observed context or source signal that justified this track"],
1205
- "owns": ["Primary concern this track is responsible for"],
1206
- "excludes": ["Sibling concern or boundary this track must not report"],
1207
- "relevanceSignals": ["Cue that should make the runtime skill choose this track"],
1208
- "evidenceFocus": ["Concrete evidence the runtime skill must require"],
1209
- "checks": ["Ordered investigation step or question for this track"],
1210
- "safeCounterpatterns": ["Concrete safe pattern or mitigation that should suppress weak reporting"],
1211
- "falsePositiveTraps": ["Common shallow misread or sibling overlap this track must avoid"],
1212
- "researchHints": ["Public runtime or ecosystem topic the generated reference may need to consult"]
1213
- }
1214
- ]
1215
- }
1216
- &nbsp;
1217
- Quality bar:
1218
- - The outline should fully accomplish the agenda implied by the prompt, metadata, and source material. Do not optimize for a preferred number of tracks.
1219
- - The track set should be specific enough that one generated skill can route work clearly and avoid duplicate reports.
1220
- - Each track should have the right amount of work for one coherent investigation track: not so broad that it becomes shallow, and not so narrow that the split becomes busywork.
1221
- - The checks should be specific enough that the authoring provider can turn them into executable runtime guidance without inventing the structure again.
1222
- - The track set should give later build steps enough depth hooks to expand into strong references: relevanceSignals, safeCounterpatterns, falsePositiveTraps, and researchHints should be concrete instead of generic filler.
1223
- - Repository or product skills must reflect the local context actually observed. Domain or ecosystem skills must say they are generic and stay aligned with the supplied scope.
1224
- &nbsp;
1225
- Skill description:
1226
- ${skill.description}
1227
- ${renderPreviousOutlineContinuity(previousOutline)}
1228
- &nbsp;
1229
- Source material:
1230
- &nbsp;
1231
- ${sourceBlocks(source)}`;
1232
- }
1233
- &nbsp;
1234
- function <span class="fstat-no" title="function not covered" >buildOutlineSystemPrompt(): string {</span>
1235
- <span class="cstat-no" title="statement not covered" > return `You build the internal outline for one generated Warden skill.</span>
1236
- &nbsp;
1237
- Use Read, Grep, and Glob to inspect relevant repository source before deciding how to decompose the skill when local context is needed. Use WebSearch or WebFetch for public prior art and current external documentation when framework, runtime, risk class, or ecosystem behavior affects the outline.
1238
- &nbsp;
1239
- Do not send repository code, secrets, private file paths, or proprietary details to web tools. Use public framework, package, API, risk class, and documentation names only.
1240
- &nbsp;
1241
- Return only the strict JSON object requested by the user prompt. Never return prose or follow-up questions.`;
1242
- }
1243
- &nbsp;
1244
- function <span class="fstat-no" title="function not covered" >parseCachedOutline(</span>
1245
- statePath: string,
1246
- skillName: string,
1247
- sourceHash: string,
1248
- model?: string,
1249
- ): SkillBuildState | undefined {
1250
- const <span class="cstat-no" title="statement not covered" >state = readSkillBuildState(statePath);</span>
1251
- <span class="cstat-no" title="statement not covered" > if (!state) {</span>
1252
- <span class="cstat-no" title="statement not covered" > return undefined;</span>
1253
- }
1254
- &nbsp;
1255
- <span class="cstat-no" title="statement not covered" > try {</span>
1256
- <span class="cstat-no" title="statement not covered" > validateOutlineIdentity(state.outline, skillName, sourceHash);</span>
1257
- <span class="cstat-no" title="statement not covered" > validateStateIdentity(state, model);</span>
1258
- <span class="cstat-no" title="statement not covered" > return state;</span>
1259
- } catch {
1260
- <span class="cstat-no" title="statement not covered" > return undefined;</span>
1261
- }
1262
- }
1263
- &nbsp;
1264
- export async function <span class="fstat-no" title="function not covered" >buildSkillOutline(</span>
1265
- options: BuildSkillOutlineOptions,
1266
- ): Promise&lt;SkillBuildOutlineResult&gt; {
1267
- const { skill, apiKey, model, maxRetries, regenerate = <span class="branch-0 cbranch-no" title="branch not covered" >false }</span> = <span class="cstat-no" title="statement not covered" >options;</span>
1268
- const runtime = <span class="cstat-no" title="statement not covered" >options.runtime ?? getRuntime(options.runtimeName ?? 'pi');</span>
1269
- const source = <span class="cstat-no" title="statement not covered" >options.source ?? collectSkillBuildSource(skill);</span>
1270
- const rootDir = <span class="cstat-no" title="statement not covered" >skill.rootDir;</span>
1271
- <span class="cstat-no" title="statement not covered" > if (!rootDir) {</span>
1272
- <span class="cstat-no" title="statement not covered" > throw new SkillBuildOutlineError(`Generated skill ${skill.name} is missing a root directory`);</span>
1273
- }
1274
- &nbsp;
1275
- const <span class="cstat-no" title="statement not covered" >statePath = getBuildStatePath(rootDir);</span>
1276
- <span class="cstat-no" title="statement not covered" > if (existsSync(statePath) &amp;&amp; !regenerate) {</span>
1277
- const state = <span class="cstat-no" title="statement not covered" >parseCachedOutline(statePath, skill.name, source.hash, model);</span>
1278
- <span class="cstat-no" title="statement not covered" > if (state) {</span>
1279
- <span class="cstat-no" title="statement not covered" > return {</span>
1280
- outline: state.outline,
1281
- source: 'cache',
1282
- statePath,
1283
- usage: state.outlineRun?.usage,
1284
- durationMs: state.outlineRun?.durationMs,
1285
- responseModel: state.outlineRun?.responseModel,
1286
- numTurns: state.outlineRun?.numTurns,
1287
- };
1288
- }
1289
- }
1290
- &nbsp;
1291
- <span class="cstat-no" title="statement not covered" > if (options.repoPath) {</span>
1292
- <span class="cstat-no" title="statement not covered" > try {</span>
1293
- <span class="cstat-no" title="statement not covered" > options.onStatus?.('Inspecting source material');</span>
1294
- const result = <span class="cstat-no" title="statement not covered" >await runStructuredSkillBuilderAgent({</span>
1295
- runtime,
1296
- repoPath: options.repoPath,
1297
- skillName: `${skill.name}:skill-outline`,
1298
- systemPrompt: buildOutlineSystemPrompt(),
1299
- userPrompt: buildOutlinePrompt(skill, source, options.previousOutline),
1300
- schema: SkillBuildOutlineSchema,
1301
- model,
1302
- maxTurns: options.maxTurns ?? SKILL_BUILD_MAX_TURNS,
1303
- apiKey,
1304
- abortController: options.abortController,
1305
- repair: {
1306
- apiKey,
1307
- model: options.repairModel,
1308
- maxRetries: options.repairMaxRetries ?? maxRetries,
1309
- },
1310
- });
1311
- &nbsp;
1312
- <span class="cstat-no" title="statement not covered" > validateOutlineIdentity(result.data, skill.name, source.hash);</span>
1313
- <span class="cstat-no" title="statement not covered" > writeSkillBuildState(statePath, {</span>
1314
- version: SKILL_BUILD_STATE_SCHEMA_VERSION,
1315
- kind: SKILL_BUILD_STATE_KIND,
1316
- identity: model ? { requestedModel: model } : undefined,
1317
- outline: result.data,
1318
- outlineRun: {
1319
- usage: result.usage,
1320
- durationMs: result.durationMs,
1321
- responseModel: result.responseModel,
1322
- numTurns: result.numTurns,
1323
- },
1324
- updatedAt: new Date().toISOString(),
1325
- });
1326
- &nbsp;
1327
- <span class="cstat-no" title="statement not covered" > return {</span>
1328
- outline: result.data,
1329
- source: 'generated',
1330
- statePath,
1331
- usage: result.usage,
1332
- durationMs: result.durationMs,
1333
- responseModel: result.responseModel,
1334
- numTurns: result.numTurns,
1335
- };
1336
- } catch (error) {
1337
- <span class="cstat-no" title="statement not covered" > if (error instanceof StructuredSkillBuilderAgentError) {</span>
1338
- <span class="cstat-no" title="statement not covered" > throw new SkillBuildOutlineError(`Skill outline build failed: ${error.message}`, { cause: error });</span>
1339
- }
1340
- <span class="cstat-no" title="statement not covered" > throw error;</span>
1341
- }
1342
- }
1343
- &nbsp;
1344
- const result = <span class="cstat-no" title="statement not covered" >await runtime.runSynthesis({</span>
1345
- task: 'skill_build',
1346
- agentName: `${skill.name}:skill-outline`,
1347
- apiKey,
1348
- prompt: buildOutlinePrompt(skill, source, options.previousOutline),
1349
- schema: SkillBuildOutlineSchema,
1350
- model,
1351
- maxTokens: SKILL_BUILD_MAX_TOKENS,
1352
- timeout: SKILL_BUILD_TIMEOUT_MS,
1353
- maxRetries,
1354
- });
1355
- &nbsp;
1356
- <span class="cstat-no" title="statement not covered" > if (!result.success) {</span>
1357
- <span class="cstat-no" title="statement not covered" > throw new SkillBuildOutlineError(`Skill outline build failed: ${result.error}`);</span>
1358
- }
1359
- &nbsp;
1360
- <span class="cstat-no" title="statement not covered" > validateOutlineIdentity(result.data, skill.name, source.hash);</span>
1361
- <span class="cstat-no" title="statement not covered" > writeSkillBuildState(statePath, {</span>
1362
- version: SKILL_BUILD_STATE_SCHEMA_VERSION,
1363
- kind: SKILL_BUILD_STATE_KIND,
1364
- identity: model ? { requestedModel: model } : undefined,
1365
- outline: result.data,
1366
- outlineRun: {
1367
- usage: result.usage,
1368
- },
1369
- updatedAt: new Date().toISOString(),
1370
- });
1371
- &nbsp;
1372
- <span class="cstat-no" title="statement not covered" > return {</span>
1373
- outline: result.data,
1374
- source: 'generated',
1375
- statePath,
1376
- usage: result.usage,
1377
- };
1378
- }
1379
- &nbsp;
1380
- export function <span class="fstat-no" title="function not covered" >defaultOutlineExportPath(s</span>killName: string): string {
1381
- <span class="cstat-no" title="statement not covered" > return `${basename(skillName)}-outline.json`;</span>
1382
- }
1383
- &nbsp;</pre></td></tr></table></pre>
1384
-
1385
- <div class='push'></div><!-- for sticky footer -->
1386
- </div><!-- /wrapper -->
1387
- <div class='footer quiet pad2 space-top1 center small'>
1388
- Code coverage generated by
1389
- <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
1390
- at 2026-05-17T04:35:52.381Z
1391
- </div>
1392
- <script src="../../prettify.js"></script>
1393
- <script>
1394
- window.onload = function () {
1395
- prettyPrint();
1396
- };
1397
- </script>
1398
- <script src="../../sorter.js"></script>
1399
- <script src="../../block-navigation.js"></script>
1400
- </body>
1401
- </html>
1402
-