@humanbased/crosscheck 1.2.0-beta.81 → 1.2.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 (314) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +375 -182
  3. package/README.zh.md +1 -1
  4. package/crosscheck.config.example.yml +9 -101
  5. package/dist/__tests__/board.test.js +0 -11
  6. package/dist/__tests__/board.test.js.map +1 -1
  7. package/dist/__tests__/codex.test.js +27 -14
  8. package/dist/__tests__/codex.test.js.map +1 -1
  9. package/dist/__tests__/comment-bodies.test.js +1 -49
  10. package/dist/__tests__/comment-bodies.test.js.map +1 -1
  11. package/dist/__tests__/conflict-resolve.test.js +1 -44
  12. package/dist/__tests__/conflict-resolve.test.js.map +1 -1
  13. package/dist/__tests__/fix.test.js +0 -33
  14. package/dist/__tests__/fix.test.js.map +1 -1
  15. package/dist/__tests__/onboard-preservation.test.js +3 -59
  16. package/dist/__tests__/onboard-preservation.test.js.map +1 -1
  17. package/dist/__tests__/optimize.test.js +0 -2
  18. package/dist/__tests__/optimize.test.js.map +1 -1
  19. package/dist/__tests__/repo-picker.test.js +1 -7
  20. package/dist/__tests__/repo-picker.test.js.map +1 -1
  21. package/dist/__tests__/review-comment-body.test.js +0 -35
  22. package/dist/__tests__/review-comment-body.test.js.map +1 -1
  23. package/dist/__tests__/review-models.test.js +3 -19
  24. package/dist/__tests__/review-models.test.js.map +1 -1
  25. package/dist/__tests__/runner.test.js +1 -29
  26. package/dist/__tests__/runner.test.js.map +1 -1
  27. package/dist/cli.js +0 -29
  28. package/dist/cli.js.map +1 -1
  29. package/dist/commands/onboard.d.ts +3 -36
  30. package/dist/commands/onboard.d.ts.map +1 -1
  31. package/dist/commands/onboard.js +42 -233
  32. package/dist/commands/onboard.js.map +1 -1
  33. package/dist/commands/review.d.ts.map +1 -1
  34. package/dist/commands/review.js +6 -65
  35. package/dist/commands/review.js.map +1 -1
  36. package/dist/commands/run.d.ts.map +1 -1
  37. package/dist/commands/run.js +7 -45
  38. package/dist/commands/run.js.map +1 -1
  39. package/dist/commands/status.d.ts.map +1 -1
  40. package/dist/commands/status.js +1 -53
  41. package/dist/commands/status.js.map +1 -1
  42. package/dist/commands/watch.d.ts.map +1 -1
  43. package/dist/commands/watch.js +12 -90
  44. package/dist/commands/watch.js.map +1 -1
  45. package/dist/config/loader.d.ts +1 -3
  46. package/dist/config/loader.d.ts.map +1 -1
  47. package/dist/config/loader.js +0 -13
  48. package/dist/config/loader.js.map +1 -1
  49. package/dist/config/review-model-tiers.json +3 -3
  50. package/dist/config/schema.d.ts +15 -261
  51. package/dist/config/schema.d.ts.map +1 -1
  52. package/dist/config/schema.js +8 -90
  53. package/dist/config/schema.js.map +1 -1
  54. package/dist/github/client.d.ts +1 -21
  55. package/dist/github/client.d.ts.map +1 -1
  56. package/dist/github/client.js +7 -46
  57. package/dist/github/client.js.map +1 -1
  58. package/dist/github/webhook.d.ts +0 -4
  59. package/dist/github/webhook.d.ts.map +1 -1
  60. package/dist/github/webhook.js.map +1 -1
  61. package/dist/issues/ticket-ref.d.ts.map +1 -1
  62. package/dist/issues/ticket-ref.js +5 -6
  63. package/dist/issues/ticket-ref.js.map +1 -1
  64. package/dist/lib/annotation.d.ts +0 -7
  65. package/dist/lib/annotation.d.ts.map +1 -1
  66. package/dist/lib/annotation.js +1 -11
  67. package/dist/lib/annotation.js.map +1 -1
  68. package/dist/lib/board.d.ts +0 -3
  69. package/dist/lib/board.d.ts.map +1 -1
  70. package/dist/lib/board.js +2 -4
  71. package/dist/lib/board.js.map +1 -1
  72. package/dist/lib/clone.d.ts +0 -1
  73. package/dist/lib/clone.d.ts.map +1 -1
  74. package/dist/lib/clone.js +10 -32
  75. package/dist/lib/clone.js.map +1 -1
  76. package/dist/lib/comment-bodies.d.ts +0 -37
  77. package/dist/lib/comment-bodies.d.ts.map +1 -1
  78. package/dist/lib/comment-bodies.js +9 -47
  79. package/dist/lib/comment-bodies.js.map +1 -1
  80. package/dist/lib/repo-picker.d.ts +0 -3
  81. package/dist/lib/repo-picker.d.ts.map +1 -1
  82. package/dist/lib/repo-picker.js +9 -45
  83. package/dist/lib/repo-picker.js.map +1 -1
  84. package/dist/lib/review-models.d.ts +2 -15
  85. package/dist/lib/review-models.d.ts.map +1 -1
  86. package/dist/lib/review-models.js +6 -26
  87. package/dist/lib/review-models.js.map +1 -1
  88. package/dist/lib/runner.d.ts +0 -92
  89. package/dist/lib/runner.d.ts.map +1 -1
  90. package/dist/lib/runner.js +54 -470
  91. package/dist/lib/runner.js.map +1 -1
  92. package/dist/lib/workflow.d.ts +0 -9
  93. package/dist/lib/workflow.d.ts.map +1 -1
  94. package/dist/lib/workflow.js +0 -20
  95. package/dist/lib/workflow.js.map +1 -1
  96. package/dist/reviewers/claude.d.ts +1 -4
  97. package/dist/reviewers/claude.d.ts.map +1 -1
  98. package/dist/reviewers/claude.js +7 -39
  99. package/dist/reviewers/claude.js.map +1 -1
  100. package/dist/reviewers/codex.d.ts +1 -3
  101. package/dist/reviewers/codex.d.ts.map +1 -1
  102. package/dist/reviewers/codex.js +70 -76
  103. package/dist/reviewers/codex.js.map +1 -1
  104. package/dist/reviewers/conflict-resolve.d.ts +1 -3
  105. package/dist/reviewers/conflict-resolve.d.ts.map +1 -1
  106. package/dist/reviewers/conflict-resolve.js +6 -21
  107. package/dist/reviewers/conflict-resolve.js.map +1 -1
  108. package/dist/reviewers/fix.d.ts +2 -5
  109. package/dist/reviewers/fix.d.ts.map +1 -1
  110. package/dist/reviewers/fix.js +10 -26
  111. package/dist/reviewers/fix.js.map +1 -1
  112. package/get-started.md +11 -207
  113. package/package.json +3 -4
  114. package/assets/icon-256.png +0 -0
  115. package/assets/linear-comment.svg +0 -18
  116. package/assets/linear-onboard.svg +0 -30
  117. package/assets/linear-status.svg +0 -23
  118. package/assets/linear-test.svg +0 -34
  119. package/assets/skills/code-review/.crosscheck-skill.json +0 -9
  120. package/assets/skills/code-review/LICENSE +0 -21
  121. package/assets/skills/code-review/SKILL.md +0 -89
  122. package/assets/skills/code-review/agents/openai.yaml +0 -3
  123. package/assets/skills/code-review-skill/.crosscheck-skill.json +0 -9
  124. package/assets/skills/code-review-skill/LICENSE +0 -21
  125. package/assets/skills/code-review-skill/SKILL.md +0 -231
  126. package/assets/skills/code-review-skill/assets/pr-review-template.md +0 -137
  127. package/assets/skills/code-review-skill/assets/review-checklist.md +0 -123
  128. package/assets/skills/code-review-skill/reference/angular.md +0 -768
  129. package/assets/skills/code-review-skill/reference/architecture-review-guide.md +0 -472
  130. package/assets/skills/code-review-skill/reference/c.md +0 -890
  131. package/assets/skills/code-review-skill/reference/code-quality-universal.md +0 -488
  132. package/assets/skills/code-review-skill/reference/code-review-best-practices.md +0 -136
  133. package/assets/skills/code-review-skill/reference/common-bugs-checklist.md +0 -286
  134. package/assets/skills/code-review-skill/reference/cpp.md +0 -893
  135. package/assets/skills/code-review-skill/reference/cross-cutting/async-concurrency-patterns.md +0 -515
  136. package/assets/skills/code-review-skill/reference/cross-cutting/error-handling-principles.md +0 -492
  137. package/assets/skills/code-review-skill/reference/cross-cutting/n-plus-one-queries.md +0 -309
  138. package/assets/skills/code-review-skill/reference/cross-cutting/sql-injection-prevention.md +0 -308
  139. package/assets/skills/code-review-skill/reference/cross-cutting/xss-prevention.md +0 -264
  140. package/assets/skills/code-review-skill/reference/csharp.md +0 -525
  141. package/assets/skills/code-review-skill/reference/css-less-sass.md +0 -661
  142. package/assets/skills/code-review-skill/reference/django.md +0 -985
  143. package/assets/skills/code-review-skill/reference/fastapi.md +0 -580
  144. package/assets/skills/code-review-skill/reference/go.md +0 -993
  145. package/assets/skills/code-review-skill/reference/java.md +0 -409
  146. package/assets/skills/code-review-skill/reference/java8.md +0 -586
  147. package/assets/skills/code-review-skill/reference/kotlin.md +0 -1018
  148. package/assets/skills/code-review-skill/reference/nestjs.md +0 -593
  149. package/assets/skills/code-review-skill/reference/performance-review-guide.md +0 -816
  150. package/assets/skills/code-review-skill/reference/php.md +0 -684
  151. package/assets/skills/code-review-skill/reference/python.md +0 -1073
  152. package/assets/skills/code-review-skill/reference/qt.md +0 -757
  153. package/assets/skills/code-review-skill/reference/react.md +0 -871
  154. package/assets/skills/code-review-skill/reference/ruby.md +0 -964
  155. package/assets/skills/code-review-skill/reference/rust.md +0 -846
  156. package/assets/skills/code-review-skill/reference/security-review-guide.md +0 -494
  157. package/assets/skills/code-review-skill/reference/svelte.md +0 -1064
  158. package/assets/skills/code-review-skill/reference/swift.md +0 -936
  159. package/assets/skills/code-review-skill/reference/typescript.md +0 -1016
  160. package/assets/skills/code-review-skill/reference/vue.md +0 -924
  161. package/assets/skills/code-review-skill/reference/zig.md +0 -440
  162. package/assets/skills/code-review-skill/scripts/pr-analyzer.py +0 -435
  163. package/assets/skills/code-review-skill/scripts/test_pr_analyzer.py +0 -380
  164. package/assets/skills/codebase-design/.crosscheck-skill.json +0 -9
  165. package/assets/skills/codebase-design/DEEPENING.md +0 -37
  166. package/assets/skills/codebase-design/DESIGN-IT-TWICE.md +0 -44
  167. package/assets/skills/codebase-design/LICENSE +0 -21
  168. package/assets/skills/codebase-design/SKILL.md +0 -114
  169. package/assets/skills/codebase-design/agents/openai.yaml +0 -3
  170. package/assets/skills/diagnosing-bugs/.crosscheck-skill.json +0 -9
  171. package/assets/skills/diagnosing-bugs/LICENSE +0 -21
  172. package/assets/skills/diagnosing-bugs/SKILL.md +0 -134
  173. package/assets/skills/diagnosing-bugs/agents/openai.yaml +0 -3
  174. package/assets/skills/diagnosing-bugs/scripts/hitl-loop.template.sh +0 -41
  175. package/dist/__tests__/can-write-verdict.test.d.ts +0 -2
  176. package/dist/__tests__/can-write-verdict.test.d.ts.map +0 -1
  177. package/dist/__tests__/can-write-verdict.test.js +0 -31
  178. package/dist/__tests__/can-write-verdict.test.js.map +0 -1
  179. package/dist/__tests__/linear-branding.test.d.ts +0 -2
  180. package/dist/__tests__/linear-branding.test.d.ts.map +0 -1
  181. package/dist/__tests__/linear-branding.test.js +0 -156
  182. package/dist/__tests__/linear-branding.test.js.map +0 -1
  183. package/dist/__tests__/linear-client.test.d.ts +0 -2
  184. package/dist/__tests__/linear-client.test.d.ts.map +0 -1
  185. package/dist/__tests__/linear-client.test.js +0 -120
  186. package/dist/__tests__/linear-client.test.js.map +0 -1
  187. package/dist/__tests__/linear-comment.test.d.ts +0 -2
  188. package/dist/__tests__/linear-comment.test.d.ts.map +0 -1
  189. package/dist/__tests__/linear-comment.test.js +0 -151
  190. package/dist/__tests__/linear-comment.test.js.map +0 -1
  191. package/dist/__tests__/linear-identity.test.d.ts +0 -2
  192. package/dist/__tests__/linear-identity.test.d.ts.map +0 -1
  193. package/dist/__tests__/linear-identity.test.js +0 -253
  194. package/dist/__tests__/linear-identity.test.js.map +0 -1
  195. package/dist/__tests__/linear-notify.test.d.ts +0 -2
  196. package/dist/__tests__/linear-notify.test.d.ts.map +0 -1
  197. package/dist/__tests__/linear-notify.test.js +0 -144
  198. package/dist/__tests__/linear-notify.test.js.map +0 -1
  199. package/dist/__tests__/linear-ref.test.d.ts +0 -2
  200. package/dist/__tests__/linear-ref.test.d.ts.map +0 -1
  201. package/dist/__tests__/linear-ref.test.js +0 -261
  202. package/dist/__tests__/linear-ref.test.js.map +0 -1
  203. package/dist/__tests__/linear-test-ref.test.d.ts +0 -2
  204. package/dist/__tests__/linear-test-ref.test.d.ts.map +0 -1
  205. package/dist/__tests__/linear-test-ref.test.js +0 -81
  206. package/dist/__tests__/linear-test-ref.test.js.map +0 -1
  207. package/dist/__tests__/linear-verify.test.d.ts +0 -2
  208. package/dist/__tests__/linear-verify.test.d.ts.map +0 -1
  209. package/dist/__tests__/linear-verify.test.js +0 -132
  210. package/dist/__tests__/linear-verify.test.js.map +0 -1
  211. package/dist/__tests__/linear-worker.test.d.ts +0 -2
  212. package/dist/__tests__/linear-worker.test.d.ts.map +0 -1
  213. package/dist/__tests__/linear-worker.test.js +0 -83
  214. package/dist/__tests__/linear-worker.test.js.map +0 -1
  215. package/dist/__tests__/linear-write-possible.test.d.ts +0 -2
  216. package/dist/__tests__/linear-write-possible.test.d.ts.map +0 -1
  217. package/dist/__tests__/linear-write-possible.test.js +0 -30
  218. package/dist/__tests__/linear-write-possible.test.js.map +0 -1
  219. package/dist/__tests__/repository-guidance.test.d.ts +0 -2
  220. package/dist/__tests__/repository-guidance.test.d.ts.map +0 -1
  221. package/dist/__tests__/repository-guidance.test.js +0 -107
  222. package/dist/__tests__/repository-guidance.test.js.map +0 -1
  223. package/dist/__tests__/review-strategy.test.d.ts +0 -2
  224. package/dist/__tests__/review-strategy.test.d.ts.map +0 -1
  225. package/dist/__tests__/review-strategy.test.js +0 -397
  226. package/dist/__tests__/review-strategy.test.js.map +0 -1
  227. package/dist/__tests__/skill-attribution.test.d.ts +0 -2
  228. package/dist/__tests__/skill-attribution.test.d.ts.map +0 -1
  229. package/dist/__tests__/skill-attribution.test.js +0 -53
  230. package/dist/__tests__/skill-attribution.test.js.map +0 -1
  231. package/dist/__tests__/skill-broker.test.d.ts +0 -2
  232. package/dist/__tests__/skill-broker.test.d.ts.map +0 -1
  233. package/dist/__tests__/skill-broker.test.js +0 -144
  234. package/dist/__tests__/skill-broker.test.js.map +0 -1
  235. package/dist/__tests__/skill-catalog.test.d.ts +0 -2
  236. package/dist/__tests__/skill-catalog.test.d.ts.map +0 -1
  237. package/dist/__tests__/skill-catalog.test.js +0 -40
  238. package/dist/__tests__/skill-catalog.test.js.map +0 -1
  239. package/dist/__tests__/skill-installer.test.d.ts +0 -2
  240. package/dist/__tests__/skill-installer.test.d.ts.map +0 -1
  241. package/dist/__tests__/skill-installer.test.js +0 -96
  242. package/dist/__tests__/skill-installer.test.js.map +0 -1
  243. package/dist/__tests__/skills-config.test.d.ts +0 -2
  244. package/dist/__tests__/skills-config.test.d.ts.map +0 -1
  245. package/dist/__tests__/skills-config.test.js +0 -12
  246. package/dist/__tests__/skills-config.test.js.map +0 -1
  247. package/dist/commands/linear-test.d.ts +0 -18
  248. package/dist/commands/linear-test.d.ts.map +0 -1
  249. package/dist/commands/linear-test.js +0 -130
  250. package/dist/commands/linear-test.js.map +0 -1
  251. package/dist/commands/skill.d.ts +0 -2
  252. package/dist/commands/skill.d.ts.map +0 -1
  253. package/dist/commands/skill.js +0 -16
  254. package/dist/commands/skill.js.map +0 -1
  255. package/dist/config/review-strategy.json +0 -204
  256. package/dist/lib/repository-guidance.d.ts +0 -2
  257. package/dist/lib/repository-guidance.d.ts.map +0 -1
  258. package/dist/lib/repository-guidance.js +0 -55
  259. package/dist/lib/repository-guidance.js.map +0 -1
  260. package/dist/lib/review-strategy.d.ts +0 -92
  261. package/dist/lib/review-strategy.d.ts.map +0 -1
  262. package/dist/lib/review-strategy.js +0 -282
  263. package/dist/lib/review-strategy.js.map +0 -1
  264. package/dist/linear/client.d.ts +0 -18
  265. package/dist/linear/client.d.ts.map +0 -1
  266. package/dist/linear/client.js +0 -67
  267. package/dist/linear/client.js.map +0 -1
  268. package/dist/linear/comment.d.ts +0 -20
  269. package/dist/linear/comment.d.ts.map +0 -1
  270. package/dist/linear/comment.js +0 -57
  271. package/dist/linear/comment.js.map +0 -1
  272. package/dist/linear/identity.d.ts +0 -59
  273. package/dist/linear/identity.d.ts.map +0 -1
  274. package/dist/linear/identity.js +0 -187
  275. package/dist/linear/identity.js.map +0 -1
  276. package/dist/linear/notify.d.ts +0 -35
  277. package/dist/linear/notify.d.ts.map +0 -1
  278. package/dist/linear/notify.js +0 -76
  279. package/dist/linear/notify.js.map +0 -1
  280. package/dist/linear/ref.d.ts +0 -13
  281. package/dist/linear/ref.d.ts.map +0 -1
  282. package/dist/linear/ref.js +0 -90
  283. package/dist/linear/ref.js.map +0 -1
  284. package/dist/linear/verify.d.ts +0 -26
  285. package/dist/linear/verify.d.ts.map +0 -1
  286. package/dist/linear/verify.js +0 -67
  287. package/dist/linear/verify.js.map +0 -1
  288. package/dist/skills/attribution.d.ts +0 -4
  289. package/dist/skills/attribution.d.ts.map +0 -1
  290. package/dist/skills/attribution.js +0 -14
  291. package/dist/skills/attribution.js.map +0 -1
  292. package/dist/skills/broker-server.d.ts +0 -2
  293. package/dist/skills/broker-server.d.ts.map +0 -1
  294. package/dist/skills/broker-server.js +0 -17
  295. package/dist/skills/broker-server.js.map +0 -1
  296. package/dist/skills/broker.d.ts +0 -42
  297. package/dist/skills/broker.d.ts.map +0 -1
  298. package/dist/skills/broker.js +0 -285
  299. package/dist/skills/broker.js.map +0 -1
  300. package/dist/skills/catalog.d.ts +0 -28
  301. package/dist/skills/catalog.d.ts.map +0 -1
  302. package/dist/skills/catalog.js +0 -104
  303. package/dist/skills/catalog.js.map +0 -1
  304. package/dist/skills/installer.d.ts +0 -10
  305. package/dist/skills/installer.d.ts.map +0 -1
  306. package/dist/skills/installer.js +0 -138
  307. package/dist/skills/installer.js.map +0 -1
  308. package/dist/skills/integrity.d.ts +0 -4
  309. package/dist/skills/integrity.d.ts.map +0 -1
  310. package/dist/skills/integrity.js +0 -36
  311. package/dist/skills/integrity.js.map +0 -1
  312. package/docs/dynamic-thoroughness.md +0 -738
  313. package/docs/linear-identity-contract.md +0 -139
  314. package/docs/linear-identity.md +0 -293
@@ -1,42 +0,0 @@
1
- import { type SkillIdentity } from './catalog.js';
2
- export type SkillMetadata = Omit<SkillIdentity, 'path'>;
3
- export interface BrokerToolResult {
4
- content: Array<{
5
- type: 'text';
6
- text: string;
7
- }>;
8
- isError?: boolean;
9
- }
10
- export interface McpRequest {
11
- jsonrpc: '2.0';
12
- id?: string | number | null;
13
- method: string;
14
- params?: unknown;
15
- }
16
- export interface McpResponse {
17
- jsonrpc: '2.0';
18
- id: string | number | null;
19
- result?: unknown;
20
- error?: {
21
- code: number;
22
- message: string;
23
- };
24
- }
25
- export interface SkillActivationSession {
26
- path: string;
27
- stepType: string;
28
- enabledSkills: SkillMetadata[];
29
- activations(): SkillMetadata[];
30
- close(): void;
31
- }
32
- export declare function createSkillActivationSession(stepType: string, enabledNames: string[], catalog: SkillIdentity[]): SkillActivationSession;
33
- export declare function skillBrokerCommand(session: SkillActivationSession): {
34
- command: string;
35
- args: string[];
36
- };
37
- export declare function renderSkillBrokerInstructions(session: SkillActivationSession): string;
38
- export declare function claudeSkillBrokerArgs(session?: SkillActivationSession): string[];
39
- export declare function codexSkillBrokerArgs(session?: SkillActivationSession): string[];
40
- export declare function callSkillBrokerTool(sessionPath: string, toolName: string, rawArgs: unknown): BrokerToolResult;
41
- export declare function handleSkillBrokerRequest(sessionPath: string, request: McpRequest): McpResponse | null;
42
- //# sourceMappingURL=broker.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"broker.d.ts","sourceRoot":"","sources":["../../src/skills/broker.ts"],"names":[],"mappings":"AAOA,OAAO,EAAsB,KAAK,aAAa,EAAE,MAAM,cAAc,CAAA;AAErE,MAAM,MAAM,aAAa,GAAG,IAAI,CAAC,aAAa,EAAE,MAAM,CAAC,CAAA;AASvD,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;IAC9C,OAAO,CAAC,EAAE,OAAO,CAAA;CAClB;AAED,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,KAAK,CAAA;IACd,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAA;IAC3B,MAAM,EAAE,MAAM,CAAA;IACd,MAAM,CAAC,EAAE,OAAO,CAAA;CACjB;AAED,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,KAAK,CAAA;IACd,EAAE,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAA;IAC1B,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,KAAK,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAA;CAC1C;AAED,MAAM,WAAW,sBAAsB;IACrC,IAAI,EAAE,MAAM,CAAA;IACZ,QAAQ,EAAE,MAAM,CAAA;IAChB,aAAa,EAAE,aAAa,EAAE,CAAA;IAC9B,WAAW,IAAI,aAAa,EAAE,CAAA;IAC9B,KAAK,IAAI,IAAI,CAAA;CACd;AAiED,wBAAgB,4BAA4B,CAC1C,QAAQ,EAAE,MAAM,EAChB,YAAY,EAAE,MAAM,EAAE,EACtB,OAAO,EAAE,aAAa,EAAE,GACvB,sBAAsB,CAyDxB;AAED,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,sBAAsB,GAAG;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,EAAE,CAAA;CAAE,CAIvG;AAED,wBAAgB,6BAA6B,CAAC,OAAO,EAAE,sBAAsB,GAAG,MAAM,CA+BrF;AAED,wBAAgB,qBAAqB,CAAC,OAAO,CAAC,EAAE,sBAAsB,GAAG,MAAM,EAAE,CAMhF;AAED,wBAAgB,oBAAoB,CAAC,OAAO,CAAC,EAAE,sBAAsB,GAAG,MAAM,EAAE,CAO/E;AAED,wBAAgB,mBAAmB,CACjC,WAAW,EAAE,MAAM,EACnB,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,OAAO,GACf,gBAAgB,CAyClB;AA0CD,wBAAgB,wBAAwB,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,UAAU,GAAG,WAAW,GAAG,IAAI,CAsBrG"}
@@ -1,285 +0,0 @@
1
- import { existsSync, mkdtempSync, readFileSync, rmSync, statSync } from 'fs';
2
- import { join, resolve, sep } from 'path';
3
- import { fileURLToPath } from 'url';
4
- import { randomUUID } from 'crypto';
5
- import { createServer } from 'net';
6
- import { createInterface } from 'readline';
7
- import { tmpdir } from 'os';
8
- import { findCompetingSkill } from './catalog.js';
9
- const BROKER_SERVER_PATH = fileURLToPath(new URL('./broker-server.js', import.meta.url));
10
- const BROKER_SERVER_TS_PATH = fileURLToPath(new URL('./broker-server.ts', import.meta.url));
11
- const MAX_SKILL_FILE_BYTES = 512_000;
12
- const sessionStates = new Map();
13
- const brokerCommands = new WeakMap();
14
- function readState(sessionPath) {
15
- const state = sessionStates.get(sessionPath);
16
- if (!state)
17
- throw new Error('Skill session not found');
18
- return state;
19
- }
20
- async function serveBrokerConnection(socket, sessionPath) {
21
- const lines = createInterface({ input: socket, crlfDelay: Infinity });
22
- for await (const line of lines) {
23
- if (!line.trim())
24
- continue;
25
- let response;
26
- try {
27
- response = handleSkillBrokerRequest(sessionPath, JSON.parse(line));
28
- }
29
- catch (err) {
30
- response = {
31
- jsonrpc: '2.0',
32
- id: null,
33
- error: { code: -32700, message: err instanceof Error ? err.message : String(err) },
34
- };
35
- }
36
- if (response)
37
- socket.write(`${JSON.stringify(response)}\n`);
38
- }
39
- }
40
- function createBrokerServer(socketPath, sessionPath, sockets, onError, onConnection) {
41
- const server = createServer(socket => {
42
- onConnection();
43
- // The agent starts MCP before repository code; make its argv-visible endpoint single-use.
44
- server.close();
45
- sockets.add(socket);
46
- socket.once('close', () => sockets.delete(socket));
47
- void serveBrokerConnection(socket, sessionPath).catch(() => socket.destroy());
48
- });
49
- server.on('error', onError);
50
- server.listen(socketPath);
51
- return server;
52
- }
53
- function metadata(skill) {
54
- const { path: _path, ...identity } = skill;
55
- return identity;
56
- }
57
- function error(message) {
58
- return { content: [{ type: 'text', text: message }], isError: true };
59
- }
60
- function stringArg(args, key) {
61
- return typeof args[key] === 'string' && args[key].trim() ? args[key].trim() : null;
62
- }
63
- export function createSkillActivationSession(stepType, enabledNames, catalog) {
64
- const enabledSet = new Set(enabledNames);
65
- const enabled = catalog.filter(skill => enabledSet.has(skill.name));
66
- const sessionDir = process.platform === 'win32' ? undefined : mkdtempSync(join(tmpdir(), 'crosscheck-skill-'));
67
- const path = process.platform === 'win32'
68
- ? `\\\\.\\pipe\\crosscheck-skill-${randomUUID()}`
69
- : sessionDir;
70
- sessionStates.set(path, { schemaVersion: 1, stepType, enabled, activated: [] });
71
- let listenError;
72
- const sockets = new Set();
73
- const servers = new Set();
74
- let pendingServer;
75
- const session = {
76
- path,
77
- stepType,
78
- enabledSkills: enabled.map(metadata),
79
- activations: () => {
80
- if (listenError)
81
- throw new Error(`Skill broker failed to listen: ${listenError.message}`);
82
- const state = readState(path);
83
- const activated = new Set(state.activated);
84
- return state.enabled.filter(skill => activated.has(skill.name)).map(metadata);
85
- },
86
- close: () => {
87
- sessionStates.delete(path);
88
- for (const socket of sockets)
89
- socket.destroy();
90
- for (const server of servers)
91
- server.close();
92
- if (sessionDir)
93
- rmSync(sessionDir, { recursive: true, force: true });
94
- },
95
- };
96
- brokerCommands.set(session, () => {
97
- if (pendingServer) {
98
- const staleServer = pendingServer;
99
- if (staleServer.listening)
100
- staleServer.close();
101
- else
102
- staleServer.once('listening', () => staleServer.close());
103
- }
104
- const socketPath = process.platform === 'win32'
105
- ? `\\\\.\\pipe\\crosscheck-skill-${randomUUID()}`
106
- : join(sessionDir, `${randomUUID().slice(0, 8)}.sock`);
107
- const server = createBrokerServer(socketPath, path, sockets, err => { if (pendingServer === server)
108
- listenError = err; }, () => { if (pendingServer === server)
109
- pendingServer = undefined; });
110
- pendingServer = server;
111
- servers.add(server);
112
- server.once('close', () => servers.delete(server));
113
- return { command: process.execPath, args: [
114
- ...(existsSync(BROKER_SERVER_PATH) ? [BROKER_SERVER_PATH] : ['--import', 'tsx', BROKER_SERVER_TS_PATH]),
115
- '--socket', socketPath,
116
- ] };
117
- });
118
- return session;
119
- }
120
- export function skillBrokerCommand(session) {
121
- const command = brokerCommands.get(session);
122
- if (!command)
123
- throw new Error('Skill session not found');
124
- return command();
125
- }
126
- export function renderSkillBrokerInstructions(session) {
127
- if (session.enabledSkills.length === 0)
128
- return '';
129
- const skills = session.enabledSkills
130
- .map(skill => `- ${skill.name}: ${skill.description} (by @${skill.author}, ${skill.license})`)
131
- .join('\n');
132
- // Ordered, obligatory, and step-aware on purpose. The advisory phrasing this
133
- // replaced ("decide whether a skill applies") never produced a single
134
- // activation in production: a fully-specified step leaves the agent no reason
135
- // to reach for an optional tool. Two further frictions are handled here —
136
- // catalog descriptions are written for interactive use ("when the user wants
137
- // …") and so never match a headless step, and a SKILL.md that links to files
138
- // in its own package is unusable unless the agent knows read_skill_file is the
139
- // only way to fetch them (Read/Grep/Glob are not granted for skill paths).
140
- //
141
- // Deliberately no "if none apply, say so" step: on a review step the model's
142
- // output IS the posted comment body, so that sentence would land above
143
- // `## Summary` on every review where nothing matched. The skills_none_activated
144
- // log event carries that signal instead, where nobody has to read it. The
145
- // silence is stated outright below for the same reason — a skill that did
146
- // activate is attributed in the comment footer, not narrated in the body.
147
- return [
148
- '## Agent Skills (do this first)',
149
- `Crosscheck exposes Agent Skills for this ${session.stepType} step through the crosscheck MCP server. Before you begin:`,
150
- '1. Call `list_enabled_skills`.',
151
- `2. Judge each description against the work in front of you. The descriptions are written for interactive use, so read "when the user wants X" as "when this step is X" — this is a ${session.stepType} step.`,
152
- '3. Call `activate_skill` for every skill that applies, then follow its instructions for the rest of this step. Some skills compete with one another — activating one makes the other an error, so among competing skills pick the single best fit.',
153
- 'Do not mention skills, activation, or these instructions in your output — crosscheck records which skills were activated and attributes them itself.',
154
- 'A SKILL.md may link to further files inside its own package. Fetch those with `read_skill_file`, passing a path relative to the skill root — Read, Grep and Glob are not available for skill files.',
155
- 'Skills enabled for this step:',
156
- skills,
157
- ].join('\n');
158
- }
159
- export function claudeSkillBrokerArgs(session) {
160
- if (!session)
161
- return [];
162
- const broker = skillBrokerCommand(session);
163
- return ['--mcp-config', JSON.stringify({
164
- mcpServers: { crosscheck: { command: broker.command, args: broker.args } },
165
- })];
166
- }
167
- export function codexSkillBrokerArgs(session) {
168
- if (!session)
169
- return [];
170
- const broker = skillBrokerCommand(session);
171
- return [
172
- '-c', `mcp_servers.crosscheck.command=${JSON.stringify(broker.command)}`,
173
- '-c', `mcp_servers.crosscheck.args=${JSON.stringify(broker.args)}`,
174
- ];
175
- }
176
- export function callSkillBrokerTool(sessionPath, toolName, rawArgs) {
177
- const state = readState(sessionPath);
178
- const args = rawArgs && typeof rawArgs === 'object' ? rawArgs : {};
179
- if (toolName === 'list_enabled_skills') {
180
- return { content: [{ type: 'text', text: JSON.stringify(state.enabled.map(metadata), null, 2) }] };
181
- }
182
- const name = stringArg(args, 'name');
183
- if (!name)
184
- return error('name is required');
185
- const skill = state.enabled.find(candidate => candidate.name === name);
186
- if (!skill)
187
- return error(`Skill ${name} is not enabled for this operation`);
188
- if (toolName === 'activate_skill') {
189
- const competitor = findCompetingSkill(name, state.activated);
190
- if (competitor)
191
- return error(`Skill ${name} competes with activated ${competitor}; activate only one review baseline`);
192
- const instructions = readFileSync(join(skill.path, 'SKILL.md'), 'utf8');
193
- if (!state.activated.includes(name)) {
194
- state.activated.push(name);
195
- }
196
- return {
197
- content: [{
198
- type: 'text',
199
- text: `Activated ${name} (by @${skill.author}, ${skill.license}).\nSkill root: ${skill.path}\n\n${instructions}`,
200
- }],
201
- };
202
- }
203
- if (toolName === 'read_skill_file') {
204
- if (!state.activated.includes(name))
205
- return error(`Activate ${name} before reading its files`);
206
- const requestedPath = stringArg(args, 'path');
207
- if (!requestedPath)
208
- return error('path is required');
209
- const root = resolve(skill.path);
210
- const path = resolve(root, requestedPath);
211
- if (path !== root && !path.startsWith(`${root}${sep}`))
212
- return error('Skill file path must stay inside the skill package');
213
- if (!existsSync(path) || !statSync(path).isFile())
214
- return error(`Skill file not found: ${requestedPath}`);
215
- if (statSync(path).size > MAX_SKILL_FILE_BYTES)
216
- return error(`Skill file exceeds ${MAX_SKILL_FILE_BYTES} bytes`);
217
- return { content: [{ type: 'text', text: readFileSync(path, 'utf8') }] };
218
- }
219
- return error(`Unknown skill broker tool: ${toolName}`);
220
- }
221
- // Broker tools never mutate the repository or external systems; activation only
222
- // records an idempotent receipt in the current step's temporary session.
223
- const READ_ONLY_TOOL_ANNOTATIONS = {
224
- readOnlyHint: true,
225
- destructiveHint: false,
226
- idempotentHint: true,
227
- openWorldHint: false,
228
- };
229
- const TOOLS = [
230
- {
231
- name: 'list_enabled_skills',
232
- description: 'List Agent Skills enabled for the current Crosscheck operation. Metadata only; this does not activate a skill.',
233
- inputSchema: { type: 'object', properties: {}, additionalProperties: false },
234
- annotations: READ_ONLY_TOOL_ANNOTATIONS,
235
- },
236
- {
237
- name: 'activate_skill',
238
- description: 'Activate an enabled skill when its description applies, record attribution, and load its SKILL.md instructions.',
239
- inputSchema: {
240
- type: 'object',
241
- properties: { name: { type: 'string' } },
242
- required: ['name'],
243
- additionalProperties: false,
244
- },
245
- annotations: READ_ONLY_TOOL_ANNOTATIONS,
246
- },
247
- {
248
- name: 'read_skill_file',
249
- description: 'Read a referenced file from a skill after activating it.',
250
- inputSchema: {
251
- type: 'object',
252
- properties: { name: { type: 'string' }, path: { type: 'string' } },
253
- required: ['name', 'path'],
254
- additionalProperties: false,
255
- },
256
- annotations: READ_ONLY_TOOL_ANNOTATIONS,
257
- },
258
- ];
259
- export function handleSkillBrokerRequest(sessionPath, request) {
260
- if (request.method.startsWith('notifications/'))
261
- return null;
262
- const id = request.id ?? null;
263
- if (request.method === 'initialize') {
264
- const params = request.params && typeof request.params === 'object' ? request.params : {};
265
- return {
266
- jsonrpc: '2.0', id,
267
- result: {
268
- protocolVersion: typeof params.protocolVersion === 'string' ? params.protocolVersion : '2024-11-05',
269
- capabilities: { tools: {} },
270
- serverInfo: { name: 'crosscheck-skill-broker', version: '1.0.0' },
271
- },
272
- };
273
- }
274
- if (request.method === 'ping')
275
- return { jsonrpc: '2.0', id, result: {} };
276
- if (request.method === 'tools/list')
277
- return { jsonrpc: '2.0', id, result: { tools: TOOLS } };
278
- if (request.method === 'tools/call') {
279
- const params = request.params && typeof request.params === 'object' ? request.params : {};
280
- const name = typeof params.name === 'string' ? params.name : '';
281
- return { jsonrpc: '2.0', id, result: callSkillBrokerTool(sessionPath, name, params.arguments) };
282
- }
283
- return { jsonrpc: '2.0', id, error: { code: -32601, message: `Method not found: ${request.method}` } };
284
- }
285
- //# sourceMappingURL=broker.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"broker.js","sourceRoot":"","sources":["../../src/skills/broker.ts"],"names":[],"mappings":"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"}
@@ -1,28 +0,0 @@
1
- export interface SkillIdentity {
2
- name: string;
3
- description: string;
4
- author: string;
5
- license: string;
6
- source: string;
7
- revision: string;
8
- integrity: string;
9
- path: string;
10
- }
11
- export interface SkillFrontmatter {
12
- name?: string;
13
- description?: string;
14
- author?: string;
15
- license?: string;
16
- }
17
- export declare const RECOMMENDED_SKILL_NAMES: readonly ["code-review-skill", "codebase-design", "diagnosing-bugs"];
18
- export declare const BUNDLED_SKILL_RECOMMENDATIONS: Readonly<Record<string, string>>;
19
- export declare function findCompetingSkill(skillName: string, selectedNames: readonly string[]): string | undefined;
20
- export declare const INSTALLED_SKILLS_DIR: string;
21
- export declare function readSkillFrontmatter(skillPath: string): SkillFrontmatter;
22
- export declare function isValidSkillAuthor(value: unknown): value is string;
23
- export declare function isValidSkillLicense(value: unknown): value is string;
24
- export declare function loadBundledSkills(rootDir?: string): SkillIdentity[];
25
- export declare function loadInstalledSkills(rootDir?: string): SkillIdentity[];
26
- export declare function loadSkillCatalog(installedRoot?: string): SkillIdentity[];
27
- export declare function formatSkillIdentity(skill: Pick<SkillIdentity, 'name' | 'author' | 'license'>): string;
28
- //# sourceMappingURL=catalog.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"catalog.d.ts","sourceRoot":"","sources":["../../src/skills/catalog.ts"],"names":[],"mappings":"AAOA,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAA;IACZ,WAAW,EAAE,MAAM,CAAA;IACnB,MAAM,EAAE,MAAM,CAAA;IACd,OAAO,EAAE,MAAM,CAAA;IACf,MAAM,EAAE,MAAM,CAAA;IACd,QAAQ,EAAE,MAAM,CAAA;IAChB,SAAS,EAAE,MAAM,CAAA;IACjB,IAAI,EAAE,MAAM,CAAA;CACb;AAMD,MAAM,WAAW,gBAAgB;IAC/B,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,OAAO,CAAC,EAAE,MAAM,CAAA;CACjB;AAED,eAAO,MAAM,uBAAuB,sEAAuE,CAAA;AAE3G,eAAO,MAAM,6BAA6B,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAK1E,CAAA;AAOD,wBAAgB,kBAAkB,CAAC,SAAS,EAAE,MAAM,EAAE,aAAa,EAAE,SAAS,MAAM,EAAE,GAAG,MAAM,GAAG,SAAS,CAE1G;AAGD,eAAO,MAAM,oBAAoB,QAA2C,CAAA;AAE5E,wBAAgB,oBAAoB,CAAC,SAAS,EAAE,MAAM,GAAG,gBAAgB,CAMxE;AAED,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,MAAM,CAElE;AAED,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,MAAM,CAEnE;AAiDD,wBAAgB,iBAAiB,CAAC,OAAO,SAAqB,GAAG,aAAa,EAAE,CAE/E;AAED,wBAAgB,mBAAmB,CAAC,OAAO,SAAuB,GAAG,aAAa,EAAE,CAEnF;AAED,wBAAgB,gBAAgB,CAAC,aAAa,SAAuB,GAAG,aAAa,EAAE,CAMtF;AAED,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,IAAI,CAAC,aAAa,EAAE,MAAM,GAAG,QAAQ,GAAG,SAAS,CAAC,GAAG,MAAM,CAErG"}
@@ -1,104 +0,0 @@
1
- import { existsSync, readFileSync, readdirSync, statSync } from 'fs';
2
- import { join } from 'path';
3
- import { fileURLToPath } from 'url';
4
- import { homedir } from 'os';
5
- import yaml from 'js-yaml';
6
- import { computeSkillIntegrity } from './integrity.js';
7
- export const RECOMMENDED_SKILL_NAMES = ['code-review-skill', 'codebase-design', 'diagnosing-bugs'];
8
- export const BUNDLED_SKILL_RECOMMENDATIONS = {
9
- 'code-review': 'Best for evidence-rich repositories with documented standards and a clear issue or PRD; checks Standards and Spec separately.',
10
- 'code-review-skill': 'Best general default for broad language, correctness, security, performance, and architecture coverage.',
11
- 'codebase-design': 'Best for architecture-heavy changes: deep modules, small interfaces, clean seams, and testability.',
12
- 'diagnosing-bugs': 'Best for hard bugs and regressions: requires a reproducible signal, ranked hypotheses, and regression evidence.',
13
- };
14
- const COMPETING_SKILLS = {
15
- 'code-review': ['code-review-skill'],
16
- 'code-review-skill': ['code-review'],
17
- };
18
- export function findCompetingSkill(skillName, selectedNames) {
19
- return COMPETING_SKILLS[skillName]?.find(name => selectedNames.includes(name));
20
- }
21
- const BUNDLED_SKILLS_DIR = fileURLToPath(new URL('../../assets/skills/', import.meta.url));
22
- export const INSTALLED_SKILLS_DIR = join(homedir(), '.crosscheck', 'skills');
23
- export function readSkillFrontmatter(skillPath) {
24
- const content = readFileSync(join(skillPath, 'SKILL.md'), 'utf8');
25
- const match = /^---\r?\n([\s\S]*?)\r?\n---/.exec(content);
26
- if (!match)
27
- return {};
28
- const parsed = yaml.load(match[1]);
29
- return typeof parsed === 'object' && parsed !== null ? parsed : {};
30
- }
31
- export function isValidSkillAuthor(value) {
32
- return typeof value === 'string' && /^[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,37}[a-zA-Z0-9])?$/.test(value);
33
- }
34
- export function isValidSkillLicense(value) {
35
- return typeof value === 'string' && /^[a-zA-Z0-9][a-zA-Z0-9.+() -]{0,99}$/.test(value);
36
- }
37
- function isSkillReceipt(value) {
38
- if (typeof value !== 'object' || value === null)
39
- return false;
40
- const receipt = value;
41
- return receipt.schemaVersion === 1
42
- && typeof receipt.name === 'string' && /^[a-z0-9]+(?:-[a-z0-9]+)*$/.test(receipt.name)
43
- && isValidSkillAuthor(receipt.author)
44
- && isValidSkillLicense(receipt.license)
45
- && typeof receipt.source === 'string' && receipt.source.length > 0
46
- && typeof receipt.revision === 'string' && receipt.revision.length > 0
47
- && typeof receipt.integrity === 'string' && /^sha256:[0-9a-f]{64}$/.test(receipt.integrity);
48
- }
49
- function loadSkills(rootDir, skipInvalid) {
50
- if (!existsSync(rootDir))
51
- return [];
52
- return readdirSync(rootDir, { withFileTypes: true })
53
- .filter(entry => entry.isDirectory() && !entry.name.startsWith('.'))
54
- .flatMap(entry => {
55
- const path = join(rootDir, entry.name);
56
- try {
57
- const receiptPath = join(path, '.crosscheck-skill.json');
58
- if (statSync(receiptPath).size > 64 * 1024)
59
- throw new Error(`Invalid skill receipt: ${entry.name}`);
60
- const integrity = computeSkillIntegrity(path);
61
- const receipt = JSON.parse(readFileSync(receiptPath, 'utf8'));
62
- const frontmatter = readSkillFrontmatter(path);
63
- if (!isSkillReceipt(receipt) || receipt.name !== entry.name || frontmatter.name !== receipt.name
64
- || typeof frontmatter.description !== 'string' || !frontmatter.description.trim()
65
- || integrity !== receipt.integrity) {
66
- throw new Error(`Invalid skill package: ${entry.name}`);
67
- }
68
- return [{
69
- name: receipt.name,
70
- description: frontmatter.description.trim(),
71
- author: receipt.author,
72
- license: receipt.license,
73
- source: receipt.source,
74
- revision: receipt.revision,
75
- integrity: receipt.integrity,
76
- path,
77
- }];
78
- }
79
- catch (err) {
80
- if (skipInvalid)
81
- return [];
82
- throw err;
83
- }
84
- })
85
- .sort((a, b) => a.name.localeCompare(b.name));
86
- }
87
- export function loadBundledSkills(rootDir = BUNDLED_SKILLS_DIR) {
88
- return loadSkills(rootDir, false);
89
- }
90
- export function loadInstalledSkills(rootDir = INSTALLED_SKILLS_DIR) {
91
- return loadSkills(rootDir, true);
92
- }
93
- export function loadSkillCatalog(installedRoot = INSTALLED_SKILLS_DIR) {
94
- const skills = new Map(loadBundledSkills().map(skill => [skill.name, skill]));
95
- for (const skill of loadInstalledSkills(installedRoot)) {
96
- if (!skills.has(skill.name))
97
- skills.set(skill.name, skill);
98
- }
99
- return [...skills.values()].sort((a, b) => a.name.localeCompare(b.name));
100
- }
101
- export function formatSkillIdentity(skill) {
102
- return `${skill.name} (by @${skill.author}, ${skill.license})`;
103
- }
104
- //# sourceMappingURL=catalog.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"catalog.js","sourceRoot":"","sources":["../../src/skills/catalog.ts"],"names":[],"mappings":"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"}
@@ -1,10 +0,0 @@
1
- import { type SkillIdentity } from './catalog.js';
2
- export { computeSkillIntegrity } from './integrity.js';
3
- export interface InstallSkillOptions {
4
- installDir?: string;
5
- }
6
- export declare class SkillInstallError extends Error {
7
- }
8
- export declare function redactSkillSource(source: string): string;
9
- export declare function installSkill(source: string, opts?: InstallSkillOptions): Promise<SkillIdentity>;
10
- //# sourceMappingURL=installer.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"installer.d.ts","sourceRoot":"","sources":["../../src/skills/installer.ts"],"names":[],"mappings":"AAIA,OAAO,EAA+H,KAAK,aAAa,EAAE,MAAM,cAAc,CAAA;AAG9K,OAAO,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAA;AAEtD,MAAM,WAAW,mBAAmB;IAClC,UAAU,CAAC,EAAE,MAAM,CAAA;CACpB;AAED,qBAAa,iBAAkB,SAAQ,KAAK;CAAG;AAE/C,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAYxD;AAuCD,wBAAsB,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,GAAE,mBAAwB,GAAG,OAAO,CAAC,aAAa,CAAC,CAgEzG"}