@qodo/sdk 0.13.4 → 2.0.0-next.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 (764) hide show
  1. package/LICENSE +31 -118
  2. package/README.md +133 -121
  3. package/bin/qodo-skills.mjs +13 -0
  4. package/bundled-skills/code-review/SKILL.md +41 -0
  5. package/bundled-skills/pr-summary/SKILL.md +59 -0
  6. package/bundled-skills/test-gen/SKILL.md +47 -0
  7. package/dist/auth/index.browser.d.ts +38 -0
  8. package/dist/auth/index.browser.d.ts.map +1 -0
  9. package/dist/auth/index.browser.js +62 -0
  10. package/dist/auth/index.browser.js.map +1 -0
  11. package/dist/auth/index.d.ts +44 -30
  12. package/dist/auth/index.d.ts.map +1 -1
  13. package/dist/auth/index.js +57 -110
  14. package/dist/auth/index.js.map +1 -1
  15. package/dist/client/AgentsClient.d.ts +33 -0
  16. package/dist/client/AgentsClient.d.ts.map +1 -0
  17. package/dist/client/AgentsClient.js +40 -0
  18. package/dist/client/AgentsClient.js.map +1 -0
  19. package/dist/client/ArtifactsClient.d.ts +43 -0
  20. package/dist/client/ArtifactsClient.d.ts.map +1 -0
  21. package/dist/client/ArtifactsClient.js +54 -0
  22. package/dist/client/ArtifactsClient.js.map +1 -0
  23. package/dist/client/BulletinClient.d.ts +45 -0
  24. package/dist/client/BulletinClient.d.ts.map +1 -0
  25. package/dist/client/BulletinClient.js +51 -0
  26. package/dist/client/BulletinClient.js.map +1 -0
  27. package/dist/client/InfoClient.d.ts +58 -0
  28. package/dist/client/InfoClient.d.ts.map +1 -0
  29. package/dist/client/InfoClient.js +135 -0
  30. package/dist/client/InfoClient.js.map +1 -0
  31. package/dist/client/PipelineClient.d.ts +162 -0
  32. package/dist/client/PipelineClient.d.ts.map +1 -0
  33. package/dist/client/PipelineClient.js +340 -0
  34. package/dist/client/PipelineClient.js.map +1 -0
  35. package/dist/client/QarRegistryClient.d.ts +396 -0
  36. package/dist/client/QarRegistryClient.d.ts.map +1 -0
  37. package/dist/client/QarRegistryClient.js +536 -0
  38. package/dist/client/QarRegistryClient.js.map +1 -0
  39. package/dist/client/QodoClient.d.ts +296 -0
  40. package/dist/client/QodoClient.d.ts.map +1 -0
  41. package/dist/client/QodoClient.js +803 -0
  42. package/dist/client/QodoClient.js.map +1 -0
  43. package/dist/client/SpecsClient.d.ts +121 -0
  44. package/dist/client/SpecsClient.d.ts.map +1 -0
  45. package/dist/client/SpecsClient.js +252 -0
  46. package/dist/client/SpecsClient.js.map +1 -0
  47. package/dist/client/StateClient.d.ts +35 -0
  48. package/dist/client/StateClient.d.ts.map +1 -0
  49. package/dist/client/StateClient.js +36 -0
  50. package/dist/client/StateClient.js.map +1 -0
  51. package/dist/client/TaskClient.d.ts +706 -0
  52. package/dist/client/TaskClient.d.ts.map +1 -0
  53. package/dist/client/TaskClient.js +2522 -0
  54. package/dist/client/TaskClient.js.map +1 -0
  55. package/dist/client/ToolClient.d.ts +278 -0
  56. package/dist/client/ToolClient.d.ts.map +1 -0
  57. package/dist/client/ToolClient.js +1115 -0
  58. package/dist/client/ToolClient.js.map +1 -0
  59. package/dist/client/a2a/index.d.ts +10 -0
  60. package/dist/client/a2a/index.d.ts.map +1 -0
  61. package/dist/client/a2a/index.js +9 -0
  62. package/dist/client/a2a/index.js.map +1 -0
  63. package/dist/client/a2a/registerA2A.d.ts +170 -0
  64. package/dist/client/a2a/registerA2A.d.ts.map +1 -0
  65. package/dist/client/a2a/registerA2A.js +85 -0
  66. package/dist/client/a2a/registerA2A.js.map +1 -0
  67. package/dist/client/connection.d.ts +800 -0
  68. package/dist/client/connection.d.ts.map +1 -0
  69. package/dist/client/connection.js +2020 -0
  70. package/dist/client/connection.js.map +1 -0
  71. package/dist/client/errors.d.ts +735 -0
  72. package/dist/client/errors.d.ts.map +1 -0
  73. package/dist/client/errors.js +921 -0
  74. package/dist/client/errors.js.map +1 -0
  75. package/dist/client/index.d.ts +26 -0
  76. package/dist/client/index.d.ts.map +1 -0
  77. package/dist/client/index.js +20 -0
  78. package/dist/client/index.js.map +1 -0
  79. package/dist/client/inlineGraph.d.ts +66 -0
  80. package/dist/client/inlineGraph.d.ts.map +1 -0
  81. package/dist/client/inlineGraph.js +500 -0
  82. package/dist/client/inlineGraph.js.map +1 -0
  83. package/dist/client/internal/thenable.d.ts +27 -0
  84. package/dist/client/internal/thenable.d.ts.map +1 -0
  85. package/dist/client/internal/thenable.js +31 -0
  86. package/dist/client/internal/thenable.js.map +1 -0
  87. package/dist/client/iterator.d.ts +32 -0
  88. package/dist/client/iterator.d.ts.map +1 -0
  89. package/dist/client/iterator.js +73 -0
  90. package/dist/client/iterator.js.map +1 -0
  91. package/dist/client/mcp/McpClientPool.browser.d.ts +76 -0
  92. package/dist/client/mcp/McpClientPool.browser.d.ts.map +1 -0
  93. package/dist/client/mcp/McpClientPool.browser.js +78 -0
  94. package/dist/client/mcp/McpClientPool.browser.js.map +1 -0
  95. package/dist/client/mcp/McpClientPool.d.ts +236 -0
  96. package/dist/client/mcp/McpClientPool.d.ts.map +1 -0
  97. package/dist/client/mcp/McpClientPool.js +585 -0
  98. package/dist/client/mcp/McpClientPool.js.map +1 -0
  99. package/dist/client/mcp/projection.d.ts +109 -0
  100. package/dist/client/mcp/projection.d.ts.map +1 -0
  101. package/dist/client/mcp/projection.js +446 -0
  102. package/dist/client/mcp/projection.js.map +1 -0
  103. package/dist/client/mcp/substituteEnv.browser.d.ts +18 -0
  104. package/dist/client/mcp/substituteEnv.browser.d.ts.map +1 -0
  105. package/dist/client/mcp/substituteEnv.browser.js +20 -0
  106. package/dist/client/mcp/substituteEnv.browser.js.map +1 -0
  107. package/dist/client/mcp/substituteEnv.d.ts +45 -0
  108. package/dist/client/mcp/substituteEnv.d.ts.map +1 -0
  109. package/dist/client/mcp/substituteEnv.js +63 -0
  110. package/dist/client/mcp/substituteEnv.js.map +1 -0
  111. package/dist/client/observers.d.ts +57 -0
  112. package/dist/client/observers.d.ts.map +1 -0
  113. package/dist/client/observers.js +203 -0
  114. package/dist/client/observers.js.map +1 -0
  115. package/dist/client/options.d.ts +269 -0
  116. package/dist/client/options.d.ts.map +1 -0
  117. package/dist/client/options.js +9 -0
  118. package/dist/client/options.js.map +1 -0
  119. package/dist/client/tools/_readlineApprovalPrompt.browser.d.ts +17 -0
  120. package/dist/client/tools/_readlineApprovalPrompt.browser.d.ts.map +1 -0
  121. package/dist/client/tools/_readlineApprovalPrompt.browser.js +24 -0
  122. package/dist/client/tools/_readlineApprovalPrompt.browser.js.map +1 -0
  123. package/dist/client/tools/_readlineApprovalPrompt.d.ts +33 -0
  124. package/dist/client/tools/_readlineApprovalPrompt.d.ts.map +1 -0
  125. package/dist/client/tools/_readlineApprovalPrompt.js +90 -0
  126. package/dist/client/tools/_readlineApprovalPrompt.js.map +1 -0
  127. package/dist/client/tools/approval.d.ts +280 -0
  128. package/dist/client/tools/approval.d.ts.map +1 -0
  129. package/dist/client/tools/approval.js +229 -0
  130. package/dist/client/tools/approval.js.map +1 -0
  131. package/dist/client/tools/bindFunctionToolDefs.d.ts +156 -0
  132. package/dist/client/tools/bindFunctionToolDefs.d.ts.map +1 -0
  133. package/dist/client/tools/bindFunctionToolDefs.js +360 -0
  134. package/dist/client/tools/bindFunctionToolDefs.js.map +1 -0
  135. package/dist/client/tools/defineFunctionTool.d.ts +277 -0
  136. package/dist/client/tools/defineFunctionTool.d.ts.map +1 -0
  137. package/dist/client/tools/defineFunctionTool.js +190 -0
  138. package/dist/client/tools/defineFunctionTool.js.map +1 -0
  139. package/dist/client/transport.browser.d.ts +20 -0
  140. package/dist/client/transport.browser.d.ts.map +1 -0
  141. package/dist/client/transport.browser.js +29 -0
  142. package/dist/client/transport.browser.js.map +1 -0
  143. package/dist/client/transport.d.ts +47 -0
  144. package/dist/client/transport.d.ts.map +1 -0
  145. package/dist/client/transport.js +102 -0
  146. package/dist/client/transport.js.map +1 -0
  147. package/dist/client/transport.shared.d.ts +30 -0
  148. package/dist/client/transport.shared.d.ts.map +1 -0
  149. package/dist/client/transport.shared.js +40 -0
  150. package/dist/client/transport.shared.js.map +1 -0
  151. package/dist/client/uuid.d.ts +32 -0
  152. package/dist/client/uuid.d.ts.map +1 -0
  153. package/dist/client/uuid.js +65 -0
  154. package/dist/client/uuid.js.map +1 -0
  155. package/dist/index.d.ts +88 -39
  156. package/dist/index.d.ts.map +1 -1
  157. package/dist/index.js +166 -43
  158. package/dist/index.js.map +1 -1
  159. package/dist/observability/attributes.d.ts +136 -0
  160. package/dist/observability/attributes.d.ts.map +1 -0
  161. package/dist/observability/attributes.js +184 -0
  162. package/dist/observability/attributes.js.map +1 -0
  163. package/dist/observability/index.d.ts +14 -0
  164. package/dist/observability/index.d.ts.map +1 -0
  165. package/dist/observability/index.js +11 -0
  166. package/dist/observability/index.js.map +1 -0
  167. package/dist/observability/resolveOTel.browser.d.ts +13 -0
  168. package/dist/observability/resolveOTel.browser.d.ts.map +1 -0
  169. package/dist/observability/resolveOTel.browser.js +14 -0
  170. package/dist/observability/resolveOTel.browser.js.map +1 -0
  171. package/dist/observability/resolveOTel.d.ts +28 -0
  172. package/dist/observability/resolveOTel.d.ts.map +1 -0
  173. package/dist/observability/resolveOTel.js +74 -0
  174. package/dist/observability/resolveOTel.js.map +1 -0
  175. package/dist/observability/spans.d.ts +198 -0
  176. package/dist/observability/spans.d.ts.map +1 -0
  177. package/dist/observability/spans.js +300 -0
  178. package/dist/observability/spans.js.map +1 -0
  179. package/dist/observability/traceContext.d.ts +51 -0
  180. package/dist/observability/traceContext.d.ts.map +1 -0
  181. package/dist/observability/traceContext.js +151 -0
  182. package/dist/observability/traceContext.js.map +1 -0
  183. package/dist/observability/transportMetrics.d.ts +58 -0
  184. package/dist/observability/transportMetrics.d.ts.map +1 -0
  185. package/dist/observability/transportMetrics.js +55 -0
  186. package/dist/observability/transportMetrics.js.map +1 -0
  187. package/dist/qar/agentSpec.d.ts +93 -0
  188. package/dist/qar/agentSpec.d.ts.map +1 -0
  189. package/dist/qar/agentSpec.js +184 -0
  190. package/dist/qar/agentSpec.js.map +1 -0
  191. package/dist/qar/clientEvents.d.ts +86 -0
  192. package/dist/qar/clientEvents.d.ts.map +1 -0
  193. package/dist/qar/clientEvents.js +36 -0
  194. package/dist/qar/clientEvents.js.map +1 -0
  195. package/dist/qar/envelopes.d.ts +227 -0
  196. package/dist/qar/envelopes.d.ts.map +1 -0
  197. package/dist/qar/envelopes.js +67 -0
  198. package/dist/qar/envelopes.js.map +1 -0
  199. package/dist/qar/generated/envelope.d.ts +332 -0
  200. package/dist/qar/generated/envelope.d.ts.map +1 -0
  201. package/dist/qar/generated/envelope.js +15 -0
  202. package/dist/qar/generated/envelope.js.map +1 -0
  203. package/dist/qar/generated/qar-info.d.ts +76 -0
  204. package/dist/qar/generated/qar-info.d.ts.map +1 -0
  205. package/dist/qar/generated/qar-info.js +15 -0
  206. package/dist/qar/generated/qar-info.js.map +1 -0
  207. package/dist/qar/generated/qodo-task-start-payload.d.ts +54 -0
  208. package/dist/qar/generated/qodo-task-start-payload.d.ts.map +1 -0
  209. package/dist/qar/generated/qodo-task-start-payload.js +15 -0
  210. package/dist/qar/generated/qodo-task-start-payload.js.map +1 -0
  211. package/dist/qar/ids.d.ts +19 -0
  212. package/dist/qar/ids.d.ts.map +1 -0
  213. package/dist/qar/ids.js +11 -0
  214. package/dist/qar/ids.js.map +1 -0
  215. package/dist/qar/index.d.ts +24 -0
  216. package/dist/qar/index.d.ts.map +1 -0
  217. package/dist/qar/index.js +16 -0
  218. package/dist/qar/index.js.map +1 -0
  219. package/dist/qar/info.d.ts +37 -0
  220. package/dist/qar/info.d.ts.map +1 -0
  221. package/dist/qar/info.js +17 -0
  222. package/dist/qar/info.js.map +1 -0
  223. package/dist/qar/json.d.ts +14 -0
  224. package/dist/qar/json.d.ts.map +1 -0
  225. package/dist/qar/json.js +9 -0
  226. package/dist/qar/json.js.map +1 -0
  227. package/dist/qar/payloads.d.ts +480 -0
  228. package/dist/qar/payloads.d.ts.map +1 -0
  229. package/dist/qar/payloads.js +37 -0
  230. package/dist/qar/payloads.js.map +1 -0
  231. package/dist/qar/specs.d.ts +604 -0
  232. package/dist/qar/specs.d.ts.map +1 -0
  233. package/dist/qar/specs.js +29 -0
  234. package/dist/qar/specs.js.map +1 -0
  235. package/dist/qar/taskEvents.d.ts +25 -0
  236. package/dist/qar/taskEvents.d.ts.map +1 -0
  237. package/dist/qar/taskEvents.js +22 -0
  238. package/dist/qar/taskEvents.js.map +1 -0
  239. package/dist/qar/trace.d.ts +12 -0
  240. package/dist/qar/trace.d.ts.map +1 -0
  241. package/dist/qar/trace.js +12 -0
  242. package/dist/qar/trace.js.map +1 -0
  243. package/dist/skills/activation.d.ts +177 -0
  244. package/dist/skills/activation.d.ts.map +1 -0
  245. package/dist/skills/activation.js +428 -0
  246. package/dist/skills/activation.js.map +1 -0
  247. package/dist/skills/cli/index.browser.d.ts +18 -0
  248. package/dist/skills/cli/index.browser.d.ts.map +1 -0
  249. package/dist/skills/cli/index.browser.js +27 -0
  250. package/dist/skills/cli/index.browser.js.map +1 -0
  251. package/dist/skills/cli/index.d.ts +37 -0
  252. package/dist/skills/cli/index.d.ts.map +1 -0
  253. package/dist/skills/cli/index.js +494 -0
  254. package/dist/skills/cli/index.js.map +1 -0
  255. package/dist/skills/events.d.ts +255 -0
  256. package/dist/skills/events.d.ts.map +1 -0
  257. package/dist/skills/events.js +224 -0
  258. package/dist/skills/events.js.map +1 -0
  259. package/dist/skills/index.d.ts +45 -0
  260. package/dist/skills/index.d.ts.map +1 -0
  261. package/dist/skills/index.js +34 -0
  262. package/dist/skills/index.js.map +1 -0
  263. package/dist/skills/inject.d.ts +57 -0
  264. package/dist/skills/inject.d.ts.map +1 -0
  265. package/dist/skills/inject.js +162 -0
  266. package/dist/skills/inject.js.map +1 -0
  267. package/dist/skills/lockfile.browser.d.ts +56 -0
  268. package/dist/skills/lockfile.browser.d.ts.map +1 -0
  269. package/dist/skills/lockfile.browser.js +55 -0
  270. package/dist/skills/lockfile.browser.js.map +1 -0
  271. package/dist/skills/lockfile.d.ts +137 -0
  272. package/dist/skills/lockfile.d.ts.map +1 -0
  273. package/dist/skills/lockfile.js +423 -0
  274. package/dist/skills/lockfile.js.map +1 -0
  275. package/dist/skills/manager.browser.d.ts +94 -0
  276. package/dist/skills/manager.browser.d.ts.map +1 -0
  277. package/dist/skills/manager.browser.js +159 -0
  278. package/dist/skills/manager.browser.js.map +1 -0
  279. package/dist/skills/manager.d.ts +362 -0
  280. package/dist/skills/manager.d.ts.map +1 -0
  281. package/dist/skills/manager.js +1386 -0
  282. package/dist/skills/manager.js.map +1 -0
  283. package/dist/skills/mcp/index.d.ts +15 -0
  284. package/dist/skills/mcp/index.d.ts.map +1 -0
  285. package/dist/skills/mcp/index.js +12 -0
  286. package/dist/skills/mcp/index.js.map +1 -0
  287. package/dist/skills/mcp/path.browser.d.ts +27 -0
  288. package/dist/skills/mcp/path.browser.d.ts.map +1 -0
  289. package/dist/skills/mcp/path.browser.js +33 -0
  290. package/dist/skills/mcp/path.browser.js.map +1 -0
  291. package/dist/skills/mcp/path.d.ts +57 -0
  292. package/dist/skills/mcp/path.d.ts.map +1 -0
  293. package/dist/skills/mcp/path.js +150 -0
  294. package/dist/skills/mcp/path.js.map +1 -0
  295. package/dist/skills/mcp/server.browser.d.ts +32 -0
  296. package/dist/skills/mcp/server.browser.d.ts.map +1 -0
  297. package/dist/skills/mcp/server.browser.js +53 -0
  298. package/dist/skills/mcp/server.browser.js.map +1 -0
  299. package/dist/skills/mcp/server.d.ts +144 -0
  300. package/dist/skills/mcp/server.d.ts.map +1 -0
  301. package/dist/skills/mcp/server.js +841 -0
  302. package/dist/skills/mcp/server.js.map +1 -0
  303. package/dist/skills/mcp/types.d.ts +72 -0
  304. package/dist/skills/mcp/types.d.ts.map +1 -0
  305. package/dist/skills/mcp/types.js +20 -0
  306. package/dist/skills/mcp/types.js.map +1 -0
  307. package/dist/skills/mcp/wireDefs.d.ts +58 -0
  308. package/dist/skills/mcp/wireDefs.d.ts.map +1 -0
  309. package/dist/skills/mcp/wireDefs.js +141 -0
  310. package/dist/skills/mcp/wireDefs.js.map +1 -0
  311. package/dist/skills/parser.d.ts +63 -0
  312. package/dist/skills/parser.d.ts.map +1 -0
  313. package/dist/skills/parser.js +755 -0
  314. package/dist/skills/parser.js.map +1 -0
  315. package/dist/skills/prefilter.d.ts +104 -0
  316. package/dist/skills/prefilter.d.ts.map +1 -0
  317. package/dist/skills/prefilter.js +398 -0
  318. package/dist/skills/prefilter.js.map +1 -0
  319. package/dist/skills/preprocess.d.ts +169 -0
  320. package/dist/skills/preprocess.d.ts.map +1 -0
  321. package/dist/skills/preprocess.js +535 -0
  322. package/dist/skills/preprocess.js.map +1 -0
  323. package/dist/skills/render.d.ts +83 -0
  324. package/dist/skills/render.d.ts.map +1 -0
  325. package/dist/skills/render.js +397 -0
  326. package/dist/skills/render.js.map +1 -0
  327. package/dist/skills/sources/index.browser.d.ts +29 -0
  328. package/dist/skills/sources/index.browser.d.ts.map +1 -0
  329. package/dist/skills/sources/index.browser.js +16 -0
  330. package/dist/skills/sources/index.browser.js.map +1 -0
  331. package/dist/skills/sources/index.d.ts +59 -0
  332. package/dist/skills/sources/index.d.ts.map +1 -0
  333. package/dist/skills/sources/index.js +471 -0
  334. package/dist/skills/sources/index.js.map +1 -0
  335. package/dist/skills/sources/walk.browser.d.ts +17 -0
  336. package/dist/skills/sources/walk.browser.d.ts.map +1 -0
  337. package/dist/skills/sources/walk.browser.js +19 -0
  338. package/dist/skills/sources/walk.browser.js.map +1 -0
  339. package/dist/skills/sources/walk.d.ts +68 -0
  340. package/dist/skills/sources/walk.d.ts.map +1 -0
  341. package/dist/skills/sources/walk.js +264 -0
  342. package/dist/skills/sources/walk.js.map +1 -0
  343. package/dist/skills/substitute.d.ts +87 -0
  344. package/dist/skills/substitute.d.ts.map +1 -0
  345. package/dist/skills/substitute.js +322 -0
  346. package/dist/skills/substitute.js.map +1 -0
  347. package/dist/skills/testing/SkillKit.browser.d.ts +62 -0
  348. package/dist/skills/testing/SkillKit.browser.d.ts.map +1 -0
  349. package/dist/skills/testing/SkillKit.browser.js +41 -0
  350. package/dist/skills/testing/SkillKit.browser.js.map +1 -0
  351. package/dist/skills/testing/SkillKit.d.ts +130 -0
  352. package/dist/skills/testing/SkillKit.d.ts.map +1 -0
  353. package/dist/skills/testing/SkillKit.js +316 -0
  354. package/dist/skills/testing/SkillKit.js.map +1 -0
  355. package/dist/skills/testing/index.d.ts +9 -0
  356. package/dist/skills/testing/index.d.ts.map +1 -0
  357. package/dist/skills/testing/index.js +8 -0
  358. package/dist/skills/testing/index.js.map +1 -0
  359. package/dist/skills/trust.d.ts +72 -0
  360. package/dist/skills/trust.d.ts.map +1 -0
  361. package/dist/skills/trust.js +183 -0
  362. package/dist/skills/trust.js.map +1 -0
  363. package/dist/skills/types.d.ts +627 -0
  364. package/dist/skills/types.d.ts.map +1 -0
  365. package/dist/skills/types.js +85 -0
  366. package/dist/skills/types.js.map +1 -0
  367. package/dist/skills/validator.d.ts +95 -0
  368. package/dist/skills/validator.d.ts.map +1 -0
  369. package/dist/skills/validator.js +486 -0
  370. package/dist/skills/validator.js.map +1 -0
  371. package/dist/tracing/PipelineTracer.d.ts +35 -22
  372. package/dist/tracing/PipelineTracer.d.ts.map +1 -1
  373. package/dist/tracing/PipelineTracer.js +106 -61
  374. package/dist/tracing/PipelineTracer.js.map +1 -1
  375. package/dist/tracing/SdkTracer.d.ts +63 -61
  376. package/dist/tracing/SdkTracer.d.ts.map +1 -1
  377. package/dist/tracing/SdkTracer.js +185 -177
  378. package/dist/tracing/SdkTracer.js.map +1 -1
  379. package/dist/tracing/index.d.ts +10 -1
  380. package/dist/tracing/index.d.ts.map +1 -1
  381. package/dist/tracing/index.js +9 -0
  382. package/dist/tracing/index.js.map +1 -1
  383. package/dist/tracing/types.d.ts +89 -16
  384. package/dist/tracing/types.d.ts.map +1 -1
  385. package/dist/tracing/types.js +17 -4
  386. package/dist/tracing/types.js.map +1 -1
  387. package/dist/types.d.ts +6 -1
  388. package/dist/types.d.ts.map +1 -1
  389. package/dist/types.js +4 -0
  390. package/dist/types.js.map +1 -1
  391. package/dist/version.d.ts.map +1 -1
  392. package/dist/version.js +10 -20
  393. package/dist/version.js.map +1 -1
  394. package/package.json +53 -39
  395. package/.claude/skills/qodo-agent/SKILL.md +0 -974
  396. package/.claude/skills/qodo-agent/assets/programmatic-agent.ts +0 -407
  397. package/.claude/skills/qodo-agent/references/builtin-tools.md +0 -342
  398. package/.claude/skills/qodo-agent/references/common-issues.md +0 -537
  399. package/bin/rg +0 -0
  400. package/dist/api/agent.d.ts +0 -105
  401. package/dist/api/agent.d.ts.map +0 -1
  402. package/dist/api/agent.js +0 -963
  403. package/dist/api/agent.js.map +0 -1
  404. package/dist/api/analytics.d.ts +0 -43
  405. package/dist/api/analytics.d.ts.map +0 -1
  406. package/dist/api/analytics.js +0 -163
  407. package/dist/api/analytics.js.map +0 -1
  408. package/dist/api/http.d.ts +0 -5
  409. package/dist/api/http.d.ts.map +0 -1
  410. package/dist/api/http.js +0 -62
  411. package/dist/api/http.js.map +0 -1
  412. package/dist/api/index.d.ts +0 -12
  413. package/dist/api/index.d.ts.map +0 -1
  414. package/dist/api/index.js +0 -17
  415. package/dist/api/index.js.map +0 -1
  416. package/dist/api/taskTracking.d.ts +0 -54
  417. package/dist/api/taskTracking.d.ts.map +0 -1
  418. package/dist/api/taskTracking.js +0 -208
  419. package/dist/api/taskTracking.js.map +0 -1
  420. package/dist/api/types.d.ts +0 -93
  421. package/dist/api/types.d.ts.map +0 -1
  422. package/dist/api/types.js +0 -2
  423. package/dist/api/types.js.map +0 -1
  424. package/dist/api/utils.d.ts +0 -8
  425. package/dist/api/utils.d.ts.map +0 -1
  426. package/dist/api/utils.js +0 -63
  427. package/dist/api/utils.js.map +0 -1
  428. package/dist/api/websocket.d.ts +0 -203
  429. package/dist/api/websocket.d.ts.map +0 -1
  430. package/dist/api/websocket.js +0 -1166
  431. package/dist/api/websocket.js.map +0 -1
  432. package/dist/bin/install-skill.d.ts +0 -14
  433. package/dist/bin/install-skill.d.ts.map +0 -1
  434. package/dist/bin/install-skill.js +0 -125
  435. package/dist/bin/install-skill.js.map +0 -1
  436. package/dist/bin/run-helpers.d.ts +0 -34
  437. package/dist/bin/run-helpers.d.ts.map +0 -1
  438. package/dist/bin/run-helpers.js +0 -186
  439. package/dist/bin/run-helpers.js.map +0 -1
  440. package/dist/bin/run.d.ts +0 -13
  441. package/dist/bin/run.d.ts.map +0 -1
  442. package/dist/bin/run.js +0 -57
  443. package/dist/bin/run.js.map +0 -1
  444. package/dist/clients/index.d.ts +0 -10
  445. package/dist/clients/index.d.ts.map +0 -1
  446. package/dist/clients/index.js +0 -8
  447. package/dist/clients/index.js.map +0 -1
  448. package/dist/clients/info/InfoClient.d.ts +0 -37
  449. package/dist/clients/info/InfoClient.d.ts.map +0 -1
  450. package/dist/clients/info/InfoClient.js +0 -69
  451. package/dist/clients/info/InfoClient.js.map +0 -1
  452. package/dist/clients/info/index.d.ts +0 -4
  453. package/dist/clients/info/index.d.ts.map +0 -1
  454. package/dist/clients/info/index.js +0 -2
  455. package/dist/clients/info/index.js.map +0 -1
  456. package/dist/clients/info/types.d.ts +0 -21
  457. package/dist/clients/info/types.d.ts.map +0 -1
  458. package/dist/clients/info/types.js +0 -2
  459. package/dist/clients/info/types.js.map +0 -1
  460. package/dist/clients/sessions/SessionsClient.d.ts +0 -34
  461. package/dist/clients/sessions/SessionsClient.d.ts.map +0 -1
  462. package/dist/clients/sessions/SessionsClient.js +0 -71
  463. package/dist/clients/sessions/SessionsClient.js.map +0 -1
  464. package/dist/clients/sessions/index.d.ts +0 -4
  465. package/dist/clients/sessions/index.d.ts.map +0 -1
  466. package/dist/clients/sessions/index.js +0 -2
  467. package/dist/clients/sessions/index.js.map +0 -1
  468. package/dist/clients/sessions/types.d.ts +0 -20
  469. package/dist/clients/sessions/types.d.ts.map +0 -1
  470. package/dist/clients/sessions/types.js +0 -2
  471. package/dist/clients/sessions/types.js.map +0 -1
  472. package/dist/clients/tools/ToolsClient.d.ts +0 -39
  473. package/dist/clients/tools/ToolsClient.d.ts.map +0 -1
  474. package/dist/clients/tools/ToolsClient.js +0 -95
  475. package/dist/clients/tools/ToolsClient.js.map +0 -1
  476. package/dist/clients/tools/index.d.ts +0 -4
  477. package/dist/clients/tools/index.d.ts.map +0 -1
  478. package/dist/clients/tools/index.js +0 -2
  479. package/dist/clients/tools/index.js.map +0 -1
  480. package/dist/clients/tools/types.d.ts +0 -14
  481. package/dist/clients/tools/types.d.ts.map +0 -1
  482. package/dist/clients/tools/types.js +0 -2
  483. package/dist/clients/tools/types.js.map +0 -1
  484. package/dist/config/ConfigManager.d.ts +0 -43
  485. package/dist/config/ConfigManager.d.ts.map +0 -1
  486. package/dist/config/ConfigManager.js +0 -472
  487. package/dist/config/ConfigManager.js.map +0 -1
  488. package/dist/config/index.d.ts +0 -6
  489. package/dist/config/index.d.ts.map +0 -1
  490. package/dist/config/index.js +0 -7
  491. package/dist/config/index.js.map +0 -1
  492. package/dist/config/urlConfig.d.ts +0 -15
  493. package/dist/config/urlConfig.d.ts.map +0 -1
  494. package/dist/config/urlConfig.js +0 -75
  495. package/dist/config/urlConfig.js.map +0 -1
  496. package/dist/constants/errors.d.ts +0 -2
  497. package/dist/constants/errors.d.ts.map +0 -1
  498. package/dist/constants/errors.js +0 -2
  499. package/dist/constants/errors.js.map +0 -1
  500. package/dist/constants/index.d.ts +0 -7
  501. package/dist/constants/index.d.ts.map +0 -1
  502. package/dist/constants/index.js +0 -11
  503. package/dist/constants/index.js.map +0 -1
  504. package/dist/constants/tools.d.ts +0 -4
  505. package/dist/constants/tools.d.ts.map +0 -1
  506. package/dist/constants/tools.js +0 -4
  507. package/dist/constants/tools.js.map +0 -1
  508. package/dist/constants/versions.d.ts +0 -2
  509. package/dist/constants/versions.d.ts.map +0 -1
  510. package/dist/constants/versions.js +0 -2
  511. package/dist/constants/versions.js.map +0 -1
  512. package/dist/context/buildUserContext.d.ts +0 -18
  513. package/dist/context/buildUserContext.d.ts.map +0 -1
  514. package/dist/context/buildUserContext.js +0 -34
  515. package/dist/context/buildUserContext.js.map +0 -1
  516. package/dist/context/index.d.ts +0 -9
  517. package/dist/context/index.d.ts.map +0 -1
  518. package/dist/context/index.js +0 -9
  519. package/dist/context/index.js.map +0 -1
  520. package/dist/context/messageManager.d.ts +0 -42
  521. package/dist/context/messageManager.d.ts.map +0 -1
  522. package/dist/context/messageManager.js +0 -322
  523. package/dist/context/messageManager.js.map +0 -1
  524. package/dist/context/taskFocus.d.ts +0 -2
  525. package/dist/context/taskFocus.d.ts.map +0 -1
  526. package/dist/context/taskFocus.js +0 -26
  527. package/dist/context/taskFocus.js.map +0 -1
  528. package/dist/context/userInput.d.ts +0 -3
  529. package/dist/context/userInput.d.ts.map +0 -1
  530. package/dist/context/userInput.js +0 -20
  531. package/dist/context/userInput.js.map +0 -1
  532. package/dist/mcp/MCPManager.d.ts +0 -109
  533. package/dist/mcp/MCPManager.d.ts.map +0 -1
  534. package/dist/mcp/MCPManager.js +0 -592
  535. package/dist/mcp/MCPManager.js.map +0 -1
  536. package/dist/mcp/approvedTools.d.ts +0 -4
  537. package/dist/mcp/approvedTools.d.ts.map +0 -1
  538. package/dist/mcp/approvedTools.js +0 -19
  539. package/dist/mcp/approvedTools.js.map +0 -1
  540. package/dist/mcp/baseServer.d.ts +0 -75
  541. package/dist/mcp/baseServer.d.ts.map +0 -1
  542. package/dist/mcp/baseServer.js +0 -107
  543. package/dist/mcp/baseServer.js.map +0 -1
  544. package/dist/mcp/builtinServers.d.ts +0 -15
  545. package/dist/mcp/builtinServers.d.ts.map +0 -1
  546. package/dist/mcp/builtinServers.js +0 -141
  547. package/dist/mcp/builtinServers.js.map +0 -1
  548. package/dist/mcp/dynamicBEServer.d.ts +0 -20
  549. package/dist/mcp/dynamicBEServer.d.ts.map +0 -1
  550. package/dist/mcp/dynamicBEServer.js +0 -52
  551. package/dist/mcp/dynamicBEServer.js.map +0 -1
  552. package/dist/mcp/index.d.ts +0 -18
  553. package/dist/mcp/index.d.ts.map +0 -1
  554. package/dist/mcp/index.js +0 -23
  555. package/dist/mcp/index.js.map +0 -1
  556. package/dist/mcp/mcpInitialization.d.ts +0 -2
  557. package/dist/mcp/mcpInitialization.d.ts.map +0 -1
  558. package/dist/mcp/mcpInitialization.js +0 -56
  559. package/dist/mcp/mcpInitialization.js.map +0 -1
  560. package/dist/mcp/servers/filesystem.d.ts +0 -44
  561. package/dist/mcp/servers/filesystem.d.ts.map +0 -1
  562. package/dist/mcp/servers/filesystem.js +0 -776
  563. package/dist/mcp/servers/filesystem.js.map +0 -1
  564. package/dist/mcp/servers/git.d.ts +0 -18
  565. package/dist/mcp/servers/git.d.ts.map +0 -1
  566. package/dist/mcp/servers/git.js +0 -441
  567. package/dist/mcp/servers/git.js.map +0 -1
  568. package/dist/mcp/servers/ripgrep.d.ts +0 -39
  569. package/dist/mcp/servers/ripgrep.d.ts.map +0 -1
  570. package/dist/mcp/servers/ripgrep.js +0 -550
  571. package/dist/mcp/servers/ripgrep.js.map +0 -1
  572. package/dist/mcp/servers/shell.d.ts +0 -20
  573. package/dist/mcp/servers/shell.d.ts.map +0 -1
  574. package/dist/mcp/servers/shell.js +0 -519
  575. package/dist/mcp/servers/shell.js.map +0 -1
  576. package/dist/mcp/serversRegistry.d.ts +0 -55
  577. package/dist/mcp/serversRegistry.d.ts.map +0 -1
  578. package/dist/mcp/serversRegistry.js +0 -416
  579. package/dist/mcp/serversRegistry.js.map +0 -1
  580. package/dist/mcp/toolProcessor.d.ts +0 -82
  581. package/dist/mcp/toolProcessor.d.ts.map +0 -1
  582. package/dist/mcp/toolProcessor.js +0 -392
  583. package/dist/mcp/toolProcessor.js.map +0 -1
  584. package/dist/mcp/types.d.ts +0 -29
  585. package/dist/mcp/types.d.ts.map +0 -1
  586. package/dist/mcp/types.js +0 -2
  587. package/dist/mcp/types.js.map +0 -1
  588. package/dist/messages/index.d.ts +0 -8
  589. package/dist/messages/index.d.ts.map +0 -1
  590. package/dist/messages/index.js +0 -7
  591. package/dist/messages/index.js.map +0 -1
  592. package/dist/messages/openai.d.ts +0 -26
  593. package/dist/messages/openai.d.ts.map +0 -1
  594. package/dist/messages/openai.js +0 -55
  595. package/dist/messages/openai.js.map +0 -1
  596. package/dist/messages/types.d.ts +0 -73
  597. package/dist/messages/types.d.ts.map +0 -1
  598. package/dist/messages/types.js +0 -78
  599. package/dist/messages/types.js.map +0 -1
  600. package/dist/parser/index.d.ts +0 -72
  601. package/dist/parser/index.d.ts.map +0 -1
  602. package/dist/parser/index.js +0 -967
  603. package/dist/parser/index.js.map +0 -1
  604. package/dist/parser/types.d.ts +0 -153
  605. package/dist/parser/types.d.ts.map +0 -1
  606. package/dist/parser/types.js +0 -6
  607. package/dist/parser/types.js.map +0 -1
  608. package/dist/parser/utils.d.ts +0 -18
  609. package/dist/parser/utils.d.ts.map +0 -1
  610. package/dist/parser/utils.js +0 -64
  611. package/dist/parser/utils.js.map +0 -1
  612. package/dist/sdk/QodoSDK.d.ts +0 -218
  613. package/dist/sdk/QodoSDK.d.ts.map +0 -1
  614. package/dist/sdk/QodoSDK.js +0 -1115
  615. package/dist/sdk/QodoSDK.js.map +0 -1
  616. package/dist/sdk/artifacts.d.ts +0 -156
  617. package/dist/sdk/artifacts.d.ts.map +0 -1
  618. package/dist/sdk/artifacts.js +0 -166
  619. package/dist/sdk/artifacts.js.map +0 -1
  620. package/dist/sdk/bootstrap.d.ts +0 -16
  621. package/dist/sdk/bootstrap.d.ts.map +0 -1
  622. package/dist/sdk/bootstrap.js +0 -28
  623. package/dist/sdk/bootstrap.js.map +0 -1
  624. package/dist/sdk/builders.d.ts +0 -54
  625. package/dist/sdk/builders.d.ts.map +0 -1
  626. package/dist/sdk/builders.js +0 -117
  627. package/dist/sdk/builders.js.map +0 -1
  628. package/dist/sdk/defaults.d.ts +0 -11
  629. package/dist/sdk/defaults.d.ts.map +0 -1
  630. package/dist/sdk/defaults.js +0 -39
  631. package/dist/sdk/defaults.js.map +0 -1
  632. package/dist/sdk/discovery.d.ts +0 -2
  633. package/dist/sdk/discovery.d.ts.map +0 -1
  634. package/dist/sdk/discovery.js +0 -25
  635. package/dist/sdk/discovery.js.map +0 -1
  636. package/dist/sdk/events.d.ts +0 -269
  637. package/dist/sdk/events.d.ts.map +0 -1
  638. package/dist/sdk/events.js +0 -69
  639. package/dist/sdk/events.js.map +0 -1
  640. package/dist/sdk/exit-expression.d.ts +0 -13
  641. package/dist/sdk/exit-expression.d.ts.map +0 -1
  642. package/dist/sdk/exit-expression.js +0 -35
  643. package/dist/sdk/exit-expression.js.map +0 -1
  644. package/dist/sdk/index.d.ts +0 -17
  645. package/dist/sdk/index.d.ts.map +0 -1
  646. package/dist/sdk/index.js +0 -17
  647. package/dist/sdk/index.js.map +0 -1
  648. package/dist/sdk/middleware.d.ts +0 -59
  649. package/dist/sdk/middleware.d.ts.map +0 -1
  650. package/dist/sdk/middleware.js +0 -69
  651. package/dist/sdk/middleware.js.map +0 -1
  652. package/dist/sdk/pipeline/PipelineBuilder.d.ts +0 -79
  653. package/dist/sdk/pipeline/PipelineBuilder.d.ts.map +0 -1
  654. package/dist/sdk/pipeline/PipelineBuilder.js +0 -129
  655. package/dist/sdk/pipeline/PipelineBuilder.js.map +0 -1
  656. package/dist/sdk/pipeline/PipelineRunner.d.ts +0 -28
  657. package/dist/sdk/pipeline/PipelineRunner.d.ts.map +0 -1
  658. package/dist/sdk/pipeline/PipelineRunner.js +0 -326
  659. package/dist/sdk/pipeline/PipelineRunner.js.map +0 -1
  660. package/dist/sdk/pipeline/compiler.d.ts +0 -24
  661. package/dist/sdk/pipeline/compiler.d.ts.map +0 -1
  662. package/dist/sdk/pipeline/compiler.js +0 -199
  663. package/dist/sdk/pipeline/compiler.js.map +0 -1
  664. package/dist/sdk/pipeline/declarative.d.ts +0 -34
  665. package/dist/sdk/pipeline/declarative.d.ts.map +0 -1
  666. package/dist/sdk/pipeline/declarative.js +0 -9
  667. package/dist/sdk/pipeline/declarative.js.map +0 -1
  668. package/dist/sdk/pipeline/index.d.ts +0 -20
  669. package/dist/sdk/pipeline/index.d.ts.map +0 -1
  670. package/dist/sdk/pipeline/index.js +0 -19
  671. package/dist/sdk/pipeline/index.js.map +0 -1
  672. package/dist/sdk/pipeline/types.d.ts +0 -93
  673. package/dist/sdk/pipeline/types.d.ts.map +0 -1
  674. package/dist/sdk/pipeline/types.js +0 -10
  675. package/dist/sdk/pipeline/types.js.map +0 -1
  676. package/dist/sdk/policies.d.ts +0 -163
  677. package/dist/sdk/policies.d.ts.map +0 -1
  678. package/dist/sdk/policies.js +0 -243
  679. package/dist/sdk/policies.js.map +0 -1
  680. package/dist/sdk/runner/AgentRunner.d.ts +0 -22
  681. package/dist/sdk/runner/AgentRunner.d.ts.map +0 -1
  682. package/dist/sdk/runner/AgentRunner.js +0 -222
  683. package/dist/sdk/runner/AgentRunner.js.map +0 -1
  684. package/dist/sdk/runner/finalize.d.ts +0 -56
  685. package/dist/sdk/runner/finalize.d.ts.map +0 -1
  686. package/dist/sdk/runner/finalize.js +0 -155
  687. package/dist/sdk/runner/finalize.js.map +0 -1
  688. package/dist/sdk/runner/formats.d.ts +0 -7
  689. package/dist/sdk/runner/formats.d.ts.map +0 -1
  690. package/dist/sdk/runner/formats.js +0 -76
  691. package/dist/sdk/runner/formats.js.map +0 -1
  692. package/dist/sdk/runner/index.d.ts +0 -9
  693. package/dist/sdk/runner/index.d.ts.map +0 -1
  694. package/dist/sdk/runner/index.js +0 -9
  695. package/dist/sdk/runner/index.js.map +0 -1
  696. package/dist/sdk/runner/progress.d.ts +0 -3
  697. package/dist/sdk/runner/progress.d.ts.map +0 -1
  698. package/dist/sdk/runner/progress.js +0 -16
  699. package/dist/sdk/runner/progress.js.map +0 -1
  700. package/dist/sdk/schemas.d.ts +0 -72
  701. package/dist/sdk/schemas.d.ts.map +0 -1
  702. package/dist/sdk/schemas.js +0 -282
  703. package/dist/sdk/schemas.js.map +0 -1
  704. package/dist/sdk/trigger-context.d.ts +0 -24
  705. package/dist/sdk/trigger-context.d.ts.map +0 -1
  706. package/dist/sdk/trigger-context.js +0 -136
  707. package/dist/sdk/trigger-context.js.map +0 -1
  708. package/dist/session/SessionContext.d.ts +0 -89
  709. package/dist/session/SessionContext.d.ts.map +0 -1
  710. package/dist/session/SessionContext.js +0 -410
  711. package/dist/session/SessionContext.js.map +0 -1
  712. package/dist/session/environment.d.ts +0 -52
  713. package/dist/session/environment.d.ts.map +0 -1
  714. package/dist/session/environment.js +0 -27
  715. package/dist/session/environment.js.map +0 -1
  716. package/dist/session/history.d.ts +0 -18
  717. package/dist/session/history.d.ts.map +0 -1
  718. package/dist/session/history.js +0 -68
  719. package/dist/session/history.js.map +0 -1
  720. package/dist/session/index.d.ts +0 -10
  721. package/dist/session/index.d.ts.map +0 -1
  722. package/dist/session/index.js +0 -9
  723. package/dist/session/index.js.map +0 -1
  724. package/dist/session/serverData.d.ts +0 -38
  725. package/dist/session/serverData.d.ts.map +0 -1
  726. package/dist/session/serverData.js +0 -261
  727. package/dist/session/serverData.js.map +0 -1
  728. package/dist/tracing/pipelineHelpers.d.ts +0 -29
  729. package/dist/tracing/pipelineHelpers.d.ts.map +0 -1
  730. package/dist/tracing/pipelineHelpers.js +0 -224
  731. package/dist/tracing/pipelineHelpers.js.map +0 -1
  732. package/dist/tracking/Tracker.d.ts +0 -55
  733. package/dist/tracking/Tracker.d.ts.map +0 -1
  734. package/dist/tracking/Tracker.js +0 -217
  735. package/dist/tracking/Tracker.js.map +0 -1
  736. package/dist/tracking/index.d.ts +0 -8
  737. package/dist/tracking/index.d.ts.map +0 -1
  738. package/dist/tracking/index.js +0 -8
  739. package/dist/tracking/index.js.map +0 -1
  740. package/dist/tracking/schemas.d.ts +0 -292
  741. package/dist/tracking/schemas.d.ts.map +0 -1
  742. package/dist/tracking/schemas.js +0 -91
  743. package/dist/tracking/schemas.js.map +0 -1
  744. package/dist/utils/extractSetFlags.d.ts +0 -6
  745. package/dist/utils/extractSetFlags.d.ts.map +0 -1
  746. package/dist/utils/extractSetFlags.js +0 -16
  747. package/dist/utils/extractSetFlags.js.map +0 -1
  748. package/dist/utils/formatTimeAgo.d.ts +0 -2
  749. package/dist/utils/formatTimeAgo.d.ts.map +0 -1
  750. package/dist/utils/formatTimeAgo.js +0 -20
  751. package/dist/utils/formatTimeAgo.js.map +0 -1
  752. package/dist/utils/index.d.ts +0 -12
  753. package/dist/utils/index.d.ts.map +0 -1
  754. package/dist/utils/index.js +0 -12
  755. package/dist/utils/index.js.map +0 -1
  756. package/dist/utils/machineId.d.ts +0 -14
  757. package/dist/utils/machineId.d.ts.map +0 -1
  758. package/dist/utils/machineId.js +0 -66
  759. package/dist/utils/machineId.js.map +0 -1
  760. package/dist/utils/pathUtils.d.ts +0 -22
  761. package/dist/utils/pathUtils.d.ts.map +0 -1
  762. package/dist/utils/pathUtils.js +0 -54
  763. package/dist/utils/pathUtils.js.map +0 -1
  764. package/scripts/download-ripgrep.js +0 -269
@@ -0,0 +1,85 @@
1
+ /**
2
+ * Skills foundation types.
3
+ *
4
+ * SDK 2.0 is a thin typed wire binding to QAR (Qodo Agent Runtime); it does
5
+ * not execute agents. Skills here are a *consumer-side* concept: the SDK
6
+ * reads `SKILL.md` files from the configured sources, builds an in-memory
7
+ * catalog, and injects a slim `<available_skills>` index into
8
+ * `InlineAgentSpec.instructions` so the QAR-side model loop sees what
9
+ * skills exist. Runtime body loading lives in the `qodo-skills` MCP
10
+ * server.
11
+ *
12
+ * The frontmatter shape mirrors the Agent Skills open standard
13
+ * (`name` / `description` / `when_to_use` / `allowed-tools` / ...) plus
14
+ * Qodo extensions (`vendor`, `version`, `min_sdk_version`, `requires`).
15
+ * Unknown fields are preserved on `unknown_fields` so forward-compat is
16
+ * by silence, not error.
17
+ */
18
+ /** Preprocessing config defaults — exported so tests stay in sync with the runtime. */
19
+ export const PREPROCESS_DEFAULT_TIMEOUT_MS = 5000;
20
+ export const PREPROCESS_DEFAULT_MAX_OUTPUT_BYTES = 64 * 1024;
21
+ /** Default top-K when `SkillsConfig.activation.topK` is unset. */
22
+ export const ACTIVATION_DEFAULT_TOP_K = 8;
23
+ /** Default minimum cosine score when `SkillsConfig.activation.minScore` is unset. */
24
+ export const ACTIVATION_DEFAULT_MIN_SCORE = 0.35;
25
+ /** Resolved cap defaults used when `SkillsConfig.requires` fields are absent. */
26
+ export const REQUIRES_DEFAULT_MAX_DEPTH = 3;
27
+ export const REQUIRES_DEFAULT_MAX_TRANSITIVE = 8;
28
+ export const REQUIRES_DEFAULT_MAX_TRANSITIVE_TOKENS = 50 * 1024;
29
+ // ---------------------------------------------------------------------------
30
+ // Constants — wire defaults the renderer + parser refer to
31
+ // ---------------------------------------------------------------------------
32
+ /**
33
+ * Per-entry `description + when_to_use` cap in the slim index. Mirrors
34
+ * Claude Code's `SLASH_COMMAND_TOOL_CHAR_BUDGET` so OSS skills land
35
+ * identically.
36
+ */
37
+ export const SLIM_INDEX_ENTRY_BUDGET = 1536;
38
+ /** Default total cap on the `<available_skills>` block. */
39
+ export const DEFAULT_INDEX_CHAR_BUDGET = 8000;
40
+ /** Hard cap on `SKILL.md` body size — exclusion threshold. */
41
+ export const SKILL_BODY_HARD_BYTES = 50 * 1024;
42
+ /**
43
+ * Hard cap on total `SKILL.md` file size (frontmatter + body + structure)
44
+ * enforced *before* `fs.readFile` — files larger than this are rejected
45
+ * with `sdk.skill.error` severity `'error'` and never read into memory.
46
+ * Comfortably above `SKILL_BODY_HARD_BYTES` so a generous frontmatter
47
+ * fits, but tight enough to defend against a third-party `package` /
48
+ * `cli-fetched` source shipping multi-megabyte SKILL.md files —
49
+ * defense-in-depth against DoS via unbounded `fs.readFile`.
50
+ */
51
+ export const SKILL_FILE_HARD_BYTES = 256 * 1024;
52
+ /** Soft cap on `SKILL.md` body lines — emits warning, does not exclude. */
53
+ export const SKILL_BODY_SOFT_LINES = 500;
54
+ /** Max chars in a skill `name`. Reserved-word + character-class checks live in the validator. */
55
+ export const SKILL_NAME_MAX_CHARS = 64;
56
+ /** Reserved words a skill `name` cannot include (case-insensitive substring). */
57
+ export const SKILL_NAME_RESERVED_WORDS = ['anthropic', 'claude'];
58
+ /** Default `vendor` per source type. Frontmatter `vendor:` overrides. */
59
+ export const SOURCE_DEFAULT_VENDORS = {
60
+ project: 'local',
61
+ config: 'local',
62
+ user: 'user',
63
+ package: '__from_package_name__', // sentinel — manager resolves to packageName
64
+ 'cli-fetched': '__from_ref__', // sentinel — manager resolves to <vendor> portion of ref
65
+ bundled: 'qodo',
66
+ };
67
+ /** Trust tier per source type. Mirror of `SkillTrustTier` documentation. */
68
+ export const SOURCE_TRUST_TIERS = {
69
+ project: 'trusted',
70
+ config: 'trusted',
71
+ bundled: 'trusted',
72
+ user: 'operator',
73
+ package: 'third-party',
74
+ 'cli-fetched': 'third-party',
75
+ };
76
+ /** Default precedence (highest first). */
77
+ export const DEFAULT_SOURCE_ORDER = [
78
+ 'project',
79
+ 'config',
80
+ 'user',
81
+ 'package',
82
+ 'cli-fetched',
83
+ 'bundled',
84
+ ];
85
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/skills/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AA8MH,uFAAuF;AACvF,MAAM,CAAC,MAAM,6BAA6B,GAAG,IAAI,CAAC;AAClD,MAAM,CAAC,MAAM,mCAAmC,GAAG,EAAE,GAAG,IAAI,CAAC;AAe7D,kEAAkE;AAClE,MAAM,CAAC,MAAM,wBAAwB,GAAG,CAAC,CAAC;AAC1C,qFAAqF;AACrF,MAAM,CAAC,MAAM,4BAA4B,GAAG,IAAI,CAAC;AAwGjD,iFAAiF;AACjF,MAAM,CAAC,MAAM,0BAA0B,GAAG,CAAC,CAAC;AAC5C,MAAM,CAAC,MAAM,+BAA+B,GAAG,CAAC,CAAC;AACjD,MAAM,CAAC,MAAM,sCAAsC,GAAG,EAAE,GAAG,IAAI,CAAC;AAkXhE,8EAA8E;AAC9E,2DAA2D;AAC3D,8EAA8E;AAE9E;;;;GAIG;AACH,MAAM,CAAC,MAAM,uBAAuB,GAAG,IAAI,CAAC;AAE5C,2DAA2D;AAC3D,MAAM,CAAC,MAAM,yBAAyB,GAAG,IAAI,CAAC;AAE9C,8DAA8D;AAC9D,MAAM,CAAC,MAAM,qBAAqB,GAAG,EAAE,GAAG,IAAI,CAAC;AAE/C;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAG,GAAG,GAAG,IAAI,CAAC;AAEhD,2EAA2E;AAC3E,MAAM,CAAC,MAAM,qBAAqB,GAAG,GAAG,CAAC;AAEzC,iGAAiG;AACjG,MAAM,CAAC,MAAM,oBAAoB,GAAG,EAAE,CAAC;AAEvC,iFAAiF;AACjF,MAAM,CAAC,MAAM,yBAAyB,GAAsB,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC;AAEpF,yEAAyE;AACzE,MAAM,CAAC,MAAM,sBAAsB,GAA8C;IAC/E,OAAO,EAAE,OAAO;IAChB,MAAM,EAAE,OAAO;IACf,IAAI,EAAE,MAAM;IACZ,OAAO,EAAE,uBAAuB,EAAE,6CAA6C;IAC/E,aAAa,EAAE,cAAc,EAAE,yDAAyD;IACxF,OAAO,EAAE,MAAM;CAChB,CAAC;AAEF,4EAA4E;AAC5E,MAAM,CAAC,MAAM,kBAAkB,GAAsD;IACnF,OAAO,EAAE,SAAS;IAClB,MAAM,EAAE,SAAS;IACjB,OAAO,EAAE,SAAS;IAClB,IAAI,EAAE,UAAU;IAChB,OAAO,EAAE,aAAa;IACtB,aAAa,EAAE,aAAa;CAC7B,CAAC;AAEF,0CAA0C;AAC1C,MAAM,CAAC,MAAM,oBAAoB,GAA+B;IAC9D,SAAS;IACT,QAAQ;IACR,MAAM;IACN,SAAS;IACT,aAAa;IACb,SAAS;CACV,CAAC"}
@@ -0,0 +1,95 @@
1
+ /**
2
+ * Frontmatter + body validator for skill documents.
3
+ *
4
+ * Operates on the output of `parseSkillDocument()` plus the skill's
5
+ * directory name (used as the default `name`) and source. Returns a typed
6
+ * `SkillFrontmatter` plus a list of warnings/errors so the manager can
7
+ * emit `sdk.skill.error` events with the appropriate severity.
8
+ *
9
+ * Rules enforced here (everything else is the manager's job — shadowing,
10
+ * versioning, FQN construction):
11
+ *
12
+ * - `name` regex + reserved-word ban + length cap.
13
+ * - `description` length cap (1024 chars).
14
+ * - `when_to_use` length cap (1024 chars).
15
+ * - `allowed-tools` normalization (string-or-array → `AllowedToolEntry[]`
16
+ * with `Tool(args)` parsed).
17
+ * - `arguments` normalization (string-or-object form → `SkillArgument[]`).
18
+ * - `paths` shape (array of strings).
19
+ * - Booleans for `disable-model-invocation`, `user-invocable`.
20
+ * - `version` semver shape; defaults to `0.0.0` if absent.
21
+ * - `min_sdk_version` semver shape.
22
+ * - `requires` shape (array of strings).
23
+ * - `effort`, `context`, `shell` enum membership.
24
+ * - Body size — 50 KB hard error, 500-line warning.
25
+ *
26
+ * Unknown frontmatter fields are NOT rejected; they're preserved on
27
+ * `frontmatter.unknown_fields` for forward compatibility and emitted as
28
+ * `sdk.skill.unknown_field` debug events.
29
+ */
30
+ import type { JsonValue } from '../qar/json.js';
31
+ import type { SkillEventSeverity, SkillFrontmatter } from './types.js';
32
+ /**
33
+ * One validation diagnostic emitted by `validateFrontmatter` /
34
+ * `validateBody`. The manager translates these into `sdk.skill.error`
35
+ * events with the skill's path attached.
36
+ */
37
+ export interface ValidationIssue {
38
+ readonly severity: SkillEventSeverity;
39
+ readonly message: string;
40
+ /** When emitted from `validateFrontmatter`, the offending field. */
41
+ readonly field?: string;
42
+ }
43
+ export interface ValidatedFrontmatter {
44
+ readonly frontmatter: SkillFrontmatter;
45
+ readonly issues: readonly ValidationIssue[];
46
+ /** Unknown fields preserved verbatim; emit `sdk.skill.unknown_field` per entry. */
47
+ readonly unknownFields: readonly string[];
48
+ }
49
+ export interface ValidatedBody {
50
+ readonly issues: readonly ValidationIssue[];
51
+ }
52
+ /**
53
+ * Validate parsed frontmatter against the skill contract. Returns a typed
54
+ * `SkillFrontmatter` (always present — even on failure, the validator
55
+ * preserves whatever it could parse) plus a list of issues. Fatal issues
56
+ * carry `severity: 'error'`; the manager treats those as catalog
57
+ * exclusions.
58
+ */
59
+ export declare function validateFrontmatter(raw: Readonly<Record<string, JsonValue>>, defaultName: string): ValidatedFrontmatter;
60
+ /**
61
+ * Validate the body — 50 KB hard cap (error, exclude skill), 500-line soft
62
+ * cap (warning, include anyway).
63
+ */
64
+ export declare function validateBody(body: string): ValidatedBody;
65
+ /**
66
+ * Result of {@link extractBodyReferences} — one entry per `[label](path)`
67
+ * markdown link OR `get_skill_file(path)` reference observed in the body.
68
+ *
69
+ * Only relative paths land in the result; absolute URLs (`https://...`,
70
+ * `mailto:`, anchors `#section`) are filtered out — they don't reference
71
+ * supporting files.
72
+ */
73
+ export interface BodyReference {
74
+ /** The link target — normalized to POSIX separators, stripped of `./`. */
75
+ readonly path: string;
76
+ /** Path-segment depth (number of `/` separators + 1). */
77
+ readonly depth: number;
78
+ }
79
+ /**
80
+ * Extract supporting-file references from a SKILL.md body. Two forms are
81
+ * recognized per `skills-progressive-disclosure.md`:
82
+ *
83
+ * - Markdown links: `[label](path/to/file.ext)`.
84
+ * - Explicit tool calls: `get_skill_file("path/to/file")` (string arg).
85
+ *
86
+ * Both must be relative; external URLs and anchors are skipped.
87
+ */
88
+ export declare function extractBodyReferences(body: string): readonly BodyReference[];
89
+ /** Compare two semver strings (`a < b`). Both must match `SEMVER_RE`. */
90
+ export declare function semverLessThan(a: string, b: string): boolean;
91
+ /** Return `true` iff the version strings refer to the same version. */
92
+ export declare function semverEqual(a: string, b: string): boolean;
93
+ /** Test helper exposed for the validator's own unit suite. */
94
+ export declare function isValidSemver(s: string): boolean;
95
+ //# sourceMappingURL=validator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validator.d.ts","sourceRoot":"","sources":["../../src/skills/validator.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAChD,OAAO,KAAK,EAGV,kBAAkB,EAClB,gBAAgB,EACjB,MAAM,YAAY,CAAC;AA4CpB;;;;GAIG;AACH,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,QAAQ,EAAE,kBAAkB,CAAC;IACtC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,oEAAoE;IACpE,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,WAAW,EAAE,gBAAgB,CAAC;IACvC,QAAQ,CAAC,MAAM,EAAE,SAAS,eAAe,EAAE,CAAC;IAC5C,mFAAmF;IACnF,QAAQ,CAAC,aAAa,EAAE,SAAS,MAAM,EAAE,CAAC;CAC3C;AAED,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,MAAM,EAAE,SAAS,eAAe,EAAE,CAAC;CAC7C;AAED;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CACjC,GAAG,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC,EACxC,WAAW,EAAE,MAAM,GAClB,oBAAoB,CAsKtB;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,aAAa,CAiBxD;AAED;;;;;;;GAOG;AACH,MAAM,WAAW,aAAa;IAC5B,0EAA0E;IAC1E,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,yDAAyD;IACzD,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;CACxB;AAED;;;;;;;;GAQG;AACH,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,aAAa,EAAE,CAiC5E;AA6BD,yEAAyE;AACzE,wBAAgB,cAAc,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,OAAO,CAa5D;AAED,uEAAuE;AACvE,wBAAgB,WAAW,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,OAAO,CAEzD;AAED,8DAA8D;AAC9D,wBAAgB,aAAa,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAEhD"}
@@ -0,0 +1,486 @@
1
+ /**
2
+ * Frontmatter + body validator for skill documents.
3
+ *
4
+ * Operates on the output of `parseSkillDocument()` plus the skill's
5
+ * directory name (used as the default `name`) and source. Returns a typed
6
+ * `SkillFrontmatter` plus a list of warnings/errors so the manager can
7
+ * emit `sdk.skill.error` events with the appropriate severity.
8
+ *
9
+ * Rules enforced here (everything else is the manager's job — shadowing,
10
+ * versioning, FQN construction):
11
+ *
12
+ * - `name` regex + reserved-word ban + length cap.
13
+ * - `description` length cap (1024 chars).
14
+ * - `when_to_use` length cap (1024 chars).
15
+ * - `allowed-tools` normalization (string-or-array → `AllowedToolEntry[]`
16
+ * with `Tool(args)` parsed).
17
+ * - `arguments` normalization (string-or-object form → `SkillArgument[]`).
18
+ * - `paths` shape (array of strings).
19
+ * - Booleans for `disable-model-invocation`, `user-invocable`.
20
+ * - `version` semver shape; defaults to `0.0.0` if absent.
21
+ * - `min_sdk_version` semver shape.
22
+ * - `requires` shape (array of strings).
23
+ * - `effort`, `context`, `shell` enum membership.
24
+ * - Body size — 50 KB hard error, 500-line warning.
25
+ *
26
+ * Unknown frontmatter fields are NOT rejected; they're preserved on
27
+ * `frontmatter.unknown_fields` for forward compatibility and emitted as
28
+ * `sdk.skill.unknown_field` debug events.
29
+ */
30
+ import { SKILL_BODY_HARD_BYTES, SKILL_BODY_SOFT_LINES, SKILL_NAME_MAX_CHARS, SKILL_NAME_RESERVED_WORDS, } from './types.js';
31
+ /** Description / when_to_use per-field cap. Mirrors the standard's 1024-char limit. */
32
+ const FIELD_CHAR_CAP = 1024;
33
+ /** Recognized top-level frontmatter keys. Anything else lands in `unknown_fields`. */
34
+ const KNOWN_FIELDS = new Set([
35
+ 'name',
36
+ 'description',
37
+ 'when_to_use',
38
+ 'allowed-tools',
39
+ 'disable-model-invocation',
40
+ 'user-invocable',
41
+ 'model',
42
+ 'effort',
43
+ 'context',
44
+ 'agent',
45
+ 'paths',
46
+ 'arguments',
47
+ 'argument-hint',
48
+ 'shell',
49
+ 'hooks',
50
+ 'vendor',
51
+ 'version',
52
+ 'min_sdk_version',
53
+ 'requires',
54
+ ]);
55
+ const VALID_EFFORT = new Set(['low', 'medium', 'high', 'max']);
56
+ const VALID_CONTEXT = new Set(['fork', 'inherit']);
57
+ const VALID_SHELL = new Set(['bash', 'powershell']);
58
+ /** Strict semver — major.minor.patch (no pre-release / build for simplicity). */
59
+ const SEMVER_RE = /^(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)$/;
60
+ /** `name` shape — lowercase letters, digits, hyphens. Max length checked separately. */
61
+ const NAME_RE = /^[a-z0-9][a-z0-9-]*$/;
62
+ /**
63
+ * Validate parsed frontmatter against the skill contract. Returns a typed
64
+ * `SkillFrontmatter` (always present — even on failure, the validator
65
+ * preserves whatever it could parse) plus a list of issues. Fatal issues
66
+ * carry `severity: 'error'`; the manager treats those as catalog
67
+ * exclusions.
68
+ */
69
+ export function validateFrontmatter(raw, defaultName) {
70
+ const issues = [];
71
+ const unknown = {};
72
+ const unknownFields = [];
73
+ // -- name --
74
+ let name = defaultName;
75
+ const rawName = raw.name;
76
+ if (typeof rawName === 'string' && rawName.length > 0) {
77
+ name = rawName;
78
+ }
79
+ else if (rawName !== undefined && rawName !== null) {
80
+ issues.push({ severity: 'error', message: 'name must be a string', field: 'name' });
81
+ }
82
+ if (!NAME_RE.test(name)) {
83
+ issues.push({
84
+ severity: 'error',
85
+ message: `name ${JSON.stringify(name)} must match /^[a-z0-9][a-z0-9-]*$/`,
86
+ field: 'name',
87
+ });
88
+ }
89
+ if (name.length > SKILL_NAME_MAX_CHARS) {
90
+ issues.push({
91
+ severity: 'error',
92
+ message: `name exceeds ${SKILL_NAME_MAX_CHARS} chars`,
93
+ field: 'name',
94
+ });
95
+ }
96
+ const lowerName = name.toLowerCase();
97
+ for (const reserved of SKILL_NAME_RESERVED_WORDS) {
98
+ if (lowerName.includes(reserved)) {
99
+ issues.push({
100
+ severity: 'error',
101
+ message: `name uses reserved word: ${reserved}`,
102
+ field: 'name',
103
+ });
104
+ break;
105
+ }
106
+ }
107
+ // -- description / when_to_use --
108
+ const description = expectStringField(raw.description, 'description', issues);
109
+ if (description !== undefined && description.length > FIELD_CHAR_CAP) {
110
+ issues.push({
111
+ severity: 'warning',
112
+ message: `description exceeds ${FIELD_CHAR_CAP} chars`,
113
+ field: 'description',
114
+ });
115
+ }
116
+ const whenToUse = expectStringField(raw.when_to_use, 'when_to_use', issues);
117
+ if (whenToUse !== undefined && whenToUse.length > FIELD_CHAR_CAP) {
118
+ issues.push({
119
+ severity: 'warning',
120
+ message: `when_to_use exceeds ${FIELD_CHAR_CAP} chars`,
121
+ field: 'when_to_use',
122
+ });
123
+ }
124
+ // -- allowed-tools --
125
+ const allowedTools = normalizeAllowedTools(raw['allowed-tools'], issues);
126
+ // -- disable-model-invocation / user-invocable --
127
+ const disableModel = expectBooleanField(raw['disable-model-invocation'], 'disable-model-invocation', issues);
128
+ const userInvocable = expectBooleanField(raw['user-invocable'], 'user-invocable', issues);
129
+ // -- model --
130
+ const model = expectStringField(raw.model, 'model', issues);
131
+ // -- effort --
132
+ const effort = expectEnumField(raw.effort, 'effort', VALID_EFFORT, issues);
133
+ // -- context / agent --
134
+ const context = expectEnumField(raw.context, 'context', VALID_CONTEXT, issues);
135
+ const agent = expectStringField(raw.agent, 'agent', issues);
136
+ // -- paths --
137
+ const paths = normalizeStringArray(raw.paths, 'paths', issues);
138
+ // -- arguments --
139
+ const argumentsList = normalizeArguments(raw.arguments, issues);
140
+ const argumentHint = expectStringField(raw['argument-hint'], 'argument-hint', issues);
141
+ // -- shell --
142
+ const shell = expectEnumField(raw.shell, 'shell', VALID_SHELL, issues);
143
+ // -- hooks (opaque JSON, no validation beyond presence) --
144
+ const hooks = raw.hooks;
145
+ // -- vendor --
146
+ const vendor = expectStringField(raw.vendor, 'vendor', issues);
147
+ // -- version --
148
+ let version;
149
+ const rawVersion = raw.version;
150
+ if (rawVersion === undefined || rawVersion === null) {
151
+ version = undefined; // manager defaults to '0.0.0'
152
+ }
153
+ else if (typeof rawVersion === 'string' && SEMVER_RE.test(rawVersion)) {
154
+ version = rawVersion;
155
+ }
156
+ else {
157
+ issues.push({
158
+ severity: 'error',
159
+ message: `version must be semver "major.minor.patch"; got ${JSON.stringify(rawVersion)}`,
160
+ field: 'version',
161
+ });
162
+ }
163
+ // -- min_sdk_version --
164
+ let minSdk;
165
+ const rawMin = raw.min_sdk_version;
166
+ if (rawMin === undefined || rawMin === null) {
167
+ minSdk = undefined;
168
+ }
169
+ else if (typeof rawMin === 'string' && SEMVER_RE.test(rawMin)) {
170
+ minSdk = rawMin;
171
+ }
172
+ else {
173
+ issues.push({
174
+ severity: 'error',
175
+ message: `min_sdk_version must be semver; got ${JSON.stringify(rawMin)}`,
176
+ field: 'min_sdk_version',
177
+ });
178
+ }
179
+ // -- requires --
180
+ const requires = normalizeStringArray(raw.requires, 'requires', issues);
181
+ // -- unknown fields --
182
+ for (const key of Object.keys(raw)) {
183
+ if (!KNOWN_FIELDS.has(key)) {
184
+ unknown[key] = raw[key];
185
+ unknownFields.push(key);
186
+ }
187
+ }
188
+ // Build the typed frontmatter object.
189
+ const frontmatter = {
190
+ name,
191
+ ...(description !== undefined ? { description } : {}),
192
+ ...(whenToUse !== undefined ? { when_to_use: whenToUse } : {}),
193
+ ...(allowedTools !== undefined ? { 'allowed-tools': allowedTools } : {}),
194
+ ...(disableModel !== undefined ? { 'disable-model-invocation': disableModel } : {}),
195
+ ...(userInvocable !== undefined ? { 'user-invocable': userInvocable } : {}),
196
+ ...(model !== undefined ? { model } : {}),
197
+ ...(effort !== undefined ? { effort } : {}),
198
+ ...(context !== undefined ? { context } : {}),
199
+ ...(agent !== undefined ? { agent } : {}),
200
+ ...(paths !== undefined ? { paths } : {}),
201
+ ...(argumentsList !== undefined ? { arguments: argumentsList } : {}),
202
+ ...(argumentHint !== undefined ? { 'argument-hint': argumentHint } : {}),
203
+ ...(shell !== undefined ? { shell } : {}),
204
+ ...(hooks !== undefined ? { hooks } : {}),
205
+ ...(vendor !== undefined ? { vendor } : {}),
206
+ ...(version !== undefined ? { version } : {}),
207
+ ...(minSdk !== undefined ? { min_sdk_version: minSdk } : {}),
208
+ ...(requires !== undefined ? { requires } : {}),
209
+ ...(unknownFields.length > 0 ? { unknown_fields: unknown } : {}),
210
+ };
211
+ return { frontmatter, issues, unknownFields };
212
+ }
213
+ /**
214
+ * Validate the body — 50 KB hard cap (error, exclude skill), 500-line soft
215
+ * cap (warning, include anyway).
216
+ */
217
+ export function validateBody(body) {
218
+ const issues = [];
219
+ const byteLen = Buffer.byteLength(body, 'utf-8');
220
+ if (byteLen > SKILL_BODY_HARD_BYTES) {
221
+ issues.push({
222
+ severity: 'error',
223
+ message: `body exceeds ${SKILL_BODY_HARD_BYTES} bytes hard cap`,
224
+ });
225
+ }
226
+ const lineCount = body.split('\n').length;
227
+ if (lineCount > SKILL_BODY_SOFT_LINES) {
228
+ issues.push({
229
+ severity: 'warning',
230
+ message: `body exceeds ${SKILL_BODY_SOFT_LINES} lines (got ${lineCount})`,
231
+ });
232
+ }
233
+ return { issues };
234
+ }
235
+ /**
236
+ * Extract supporting-file references from a SKILL.md body. Two forms are
237
+ * recognized per `skills-progressive-disclosure.md`:
238
+ *
239
+ * - Markdown links: `[label](path/to/file.ext)`.
240
+ * - Explicit tool calls: `get_skill_file("path/to/file")` (string arg).
241
+ *
242
+ * Both must be relative; external URLs and anchors are skipped.
243
+ */
244
+ export function extractBodyReferences(body) {
245
+ const seen = new Map();
246
+ // Markdown link form. Match `[label](target)` with no nested brackets
247
+ // in the target; embedded `)` inside the target is rare in real skills
248
+ // and disambiguating without a full parser would be over-engineering.
249
+ const mdLinkRe = /\[([^\]\n]*)\]\(([^)\n]+)\)/g;
250
+ let m;
251
+ while ((m = mdLinkRe.exec(body)) !== null) {
252
+ const target = m[2].trim();
253
+ if (!isRelativePath(target))
254
+ continue;
255
+ const stripped = stripFragment(target);
256
+ if (stripped.length === 0)
257
+ continue;
258
+ const path = normalizeRelative(stripped);
259
+ if (!seen.has(path)) {
260
+ seen.set(path, { path, depth: path.split('/').length });
261
+ }
262
+ }
263
+ // `get_skill_file("path")` form. Both single- and double-quoted strings.
264
+ const toolCallRe = /get_skill_file\s*\(\s*["']([^"'\n]+)["']/g;
265
+ while ((m = toolCallRe.exec(body)) !== null) {
266
+ const target = m[1].trim();
267
+ if (!isRelativePath(target))
268
+ continue;
269
+ const stripped = stripFragment(target);
270
+ if (stripped.length === 0)
271
+ continue;
272
+ const path = normalizeRelative(stripped);
273
+ if (!seen.has(path)) {
274
+ seen.set(path, { path, depth: path.split('/').length });
275
+ }
276
+ }
277
+ return [...seen.values()];
278
+ }
279
+ function isRelativePath(target) {
280
+ if (target.length === 0)
281
+ return false;
282
+ // Absolute URLs / protocol-relative / scheme-prefixed.
283
+ if (/^[a-z]+:\/\//i.test(target))
284
+ return false;
285
+ if (target.startsWith('//'))
286
+ return false;
287
+ if (target.startsWith('mailto:'))
288
+ return false;
289
+ if (target.startsWith('tel:'))
290
+ return false;
291
+ // Anchor-only.
292
+ if (target.startsWith('#'))
293
+ return false;
294
+ // POSIX-absolute or Windows-absolute.
295
+ if (target.startsWith('/'))
296
+ return false;
297
+ if (/^[A-Za-z]:[\\/]/.test(target))
298
+ return false;
299
+ return true;
300
+ }
301
+ function stripFragment(target) {
302
+ const hashIdx = target.indexOf('#');
303
+ const trimmed = hashIdx === -1 ? target : target.slice(0, hashIdx);
304
+ return trimmed.split('?')[0];
305
+ }
306
+ function normalizeRelative(target) {
307
+ let out = target.replace(/\\/g, '/');
308
+ while (out.startsWith('./'))
309
+ out = out.slice(2);
310
+ return out;
311
+ }
312
+ /** Compare two semver strings (`a < b`). Both must match `SEMVER_RE`. */
313
+ export function semverLessThan(a, b) {
314
+ const am = a.match(SEMVER_RE);
315
+ const bm = b.match(SEMVER_RE);
316
+ if (am === null || bm === null) {
317
+ throw new Error(`invalid semver: ${JSON.stringify(am === null ? a : b)}`);
318
+ }
319
+ for (let i = 1; i <= 3; i += 1) {
320
+ const an = Number(am[i]);
321
+ const bn = Number(bm[i]);
322
+ if (an < bn)
323
+ return true;
324
+ if (an > bn)
325
+ return false;
326
+ }
327
+ return false;
328
+ }
329
+ /** Return `true` iff the version strings refer to the same version. */
330
+ export function semverEqual(a, b) {
331
+ return a === b;
332
+ }
333
+ /** Test helper exposed for the validator's own unit suite. */
334
+ export function isValidSemver(s) {
335
+ return SEMVER_RE.test(s);
336
+ }
337
+ // ---------------------------------------------------------------------------
338
+ // Field helpers
339
+ // ---------------------------------------------------------------------------
340
+ function expectStringField(value, field, issues) {
341
+ if (value === undefined || value === null)
342
+ return undefined;
343
+ if (typeof value !== 'string') {
344
+ issues.push({ severity: 'error', message: `${field} must be a string`, field });
345
+ return undefined;
346
+ }
347
+ return value;
348
+ }
349
+ function expectBooleanField(value, field, issues) {
350
+ if (value === undefined || value === null)
351
+ return undefined;
352
+ if (typeof value !== 'boolean') {
353
+ issues.push({ severity: 'error', message: `${field} must be a boolean`, field });
354
+ return undefined;
355
+ }
356
+ return value;
357
+ }
358
+ function expectEnumField(value, field, allowed, issues) {
359
+ if (value === undefined || value === null)
360
+ return undefined;
361
+ if (typeof value !== 'string' || !allowed.has(value)) {
362
+ issues.push({
363
+ severity: 'error',
364
+ message: `${field} must be one of ${[...allowed].join(', ')}; got ${JSON.stringify(value)}`,
365
+ field,
366
+ });
367
+ return undefined;
368
+ }
369
+ return value;
370
+ }
371
+ function normalizeStringArray(value, field, issues) {
372
+ if (value === undefined || value === null)
373
+ return undefined;
374
+ if (!Array.isArray(value)) {
375
+ issues.push({ severity: 'error', message: `${field} must be an array`, field });
376
+ return undefined;
377
+ }
378
+ const out = [];
379
+ for (const entry of value) {
380
+ if (typeof entry !== 'string') {
381
+ issues.push({
382
+ severity: 'error',
383
+ message: `${field} entries must be strings`,
384
+ field,
385
+ });
386
+ continue;
387
+ }
388
+ out.push(entry);
389
+ }
390
+ return out;
391
+ }
392
+ /**
393
+ * Normalize `allowed-tools` to `AllowedToolEntry[]`. Accepts the
394
+ * space-separated string form (`'Read Write Bash(git:*)'`) AND the YAML
395
+ * list form. Tool-with-args entries parse `Bash(git:*)` into
396
+ * `{ tool: 'Bash', args: 'git:*' }`.
397
+ */
398
+ function normalizeAllowedTools(value, issues) {
399
+ if (value === undefined || value === null)
400
+ return undefined;
401
+ let parts;
402
+ if (typeof value === 'string') {
403
+ parts = value.split(/\s+/).filter((p) => p.length > 0);
404
+ }
405
+ else if (Array.isArray(value)) {
406
+ parts = [];
407
+ for (const entry of value) {
408
+ if (typeof entry !== 'string') {
409
+ issues.push({
410
+ severity: 'error',
411
+ message: 'allowed-tools entries must be strings',
412
+ field: 'allowed-tools',
413
+ });
414
+ continue;
415
+ }
416
+ parts.push(entry);
417
+ }
418
+ }
419
+ else {
420
+ issues.push({
421
+ severity: 'error',
422
+ message: 'allowed-tools must be a space-separated string or array of strings',
423
+ field: 'allowed-tools',
424
+ });
425
+ return undefined;
426
+ }
427
+ return parts.map((p) => parseToolEntry(p));
428
+ }
429
+ /**
430
+ * Parse a single `allowed-tools` entry. `Bash(git:*)` → `{ tool: 'Bash', args: 'git:*' }`;
431
+ * `Read` → `{ tool: 'Read' }`.
432
+ */
433
+ function parseToolEntry(entry) {
434
+ const openIdx = entry.indexOf('(');
435
+ if (openIdx === -1 || !entry.endsWith(')')) {
436
+ return { tool: entry };
437
+ }
438
+ const tool = entry.slice(0, openIdx);
439
+ const args = entry.slice(openIdx + 1, -1);
440
+ return { tool, args };
441
+ }
442
+ function normalizeArguments(value, issues) {
443
+ if (value === undefined || value === null)
444
+ return undefined;
445
+ if (!Array.isArray(value)) {
446
+ issues.push({
447
+ severity: 'error',
448
+ message: 'arguments must be an array',
449
+ field: 'arguments',
450
+ });
451
+ return undefined;
452
+ }
453
+ const out = [];
454
+ for (const entry of value) {
455
+ if (typeof entry === 'string') {
456
+ out.push({ name: entry });
457
+ continue;
458
+ }
459
+ if (entry !== null && typeof entry === 'object' && !Array.isArray(entry)) {
460
+ const obj = entry;
461
+ const nameValue = obj.name;
462
+ if (typeof nameValue !== 'string' || nameValue.length === 0) {
463
+ issues.push({
464
+ severity: 'error',
465
+ message: 'arguments entry must carry a non-empty name',
466
+ field: 'arguments',
467
+ });
468
+ continue;
469
+ }
470
+ const descriptionValue = obj.description;
471
+ const arg = {
472
+ name: nameValue,
473
+ ...(typeof descriptionValue === 'string' ? { description: descriptionValue } : {}),
474
+ };
475
+ out.push(arg);
476
+ continue;
477
+ }
478
+ issues.push({
479
+ severity: 'error',
480
+ message: 'arguments entry must be a string or { name, description? } object',
481
+ field: 'arguments',
482
+ });
483
+ }
484
+ return out;
485
+ }
486
+ //# sourceMappingURL=validator.js.map