@monoes/monomindcli 2.15.6 → 2.16.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 (304) hide show
  1. package/.claude/helpers/build-skill-registry.cjs +23 -2
  2. package/.claude/helpers/handlers/route-handler.cjs +89 -3
  3. package/.claude/helpers/handlers/session-restore-handler.cjs +1 -1
  4. package/.claude/helpers/jev-picker.cjs +499 -0
  5. package/.claude/helpers/redact-secrets.cjs +69 -0
  6. package/.claude/skills/mastermind-agent-select/SKILL.md +28 -0
  7. package/dist/src/catalog/blueprints.d.ts +39 -0
  8. package/dist/src/catalog/blueprints.d.ts.map +1 -0
  9. package/dist/src/catalog/blueprints.js +78 -0
  10. package/dist/src/catalog/blueprints.js.map +1 -0
  11. package/dist/src/catalog/digest.d.ts +16 -0
  12. package/dist/src/catalog/digest.d.ts.map +1 -0
  13. package/dist/src/catalog/digest.js +62 -0
  14. package/dist/src/catalog/digest.js.map +1 -0
  15. package/dist/src/catalog/frontmatter.d.ts +23 -0
  16. package/dist/src/catalog/frontmatter.d.ts.map +1 -0
  17. package/dist/src/catalog/frontmatter.js +80 -0
  18. package/dist/src/catalog/frontmatter.js.map +1 -0
  19. package/dist/src/catalog/lifecycle.d.ts +31 -0
  20. package/dist/src/catalog/lifecycle.d.ts.map +1 -0
  21. package/dist/src/catalog/lifecycle.js +78 -0
  22. package/dist/src/catalog/lifecycle.js.map +1 -0
  23. package/dist/src/catalog/projection.d.ts +57 -0
  24. package/dist/src/catalog/projection.d.ts.map +1 -0
  25. package/dist/src/catalog/projection.js +272 -0
  26. package/dist/src/catalog/projection.js.map +1 -0
  27. package/dist/src/catalog/scan.d.ts +37 -0
  28. package/dist/src/catalog/scan.d.ts.map +1 -0
  29. package/dist/src/catalog/scan.js +214 -0
  30. package/dist/src/catalog/scan.js.map +1 -0
  31. package/dist/src/catalog/snapshot.d.ts +62 -0
  32. package/dist/src/catalog/snapshot.d.ts.map +1 -0
  33. package/dist/src/catalog/snapshot.js +183 -0
  34. package/dist/src/catalog/snapshot.js.map +1 -0
  35. package/dist/src/catalog/stage.d.ts +26 -0
  36. package/dist/src/catalog/stage.d.ts.map +1 -0
  37. package/dist/src/catalog/stage.js +316 -0
  38. package/dist/src/catalog/stage.js.map +1 -0
  39. package/dist/src/catalog/state.d.ts +23 -0
  40. package/dist/src/catalog/state.d.ts.map +1 -0
  41. package/dist/src/catalog/state.js +102 -0
  42. package/dist/src/catalog/state.js.map +1 -0
  43. package/dist/src/catalog/types.d.ts +289 -0
  44. package/dist/src/catalog/types.d.ts.map +1 -0
  45. package/dist/src/catalog/types.js +118 -0
  46. package/dist/src/catalog/types.js.map +1 -0
  47. package/dist/src/commands/catalog.d.ts +14 -0
  48. package/dist/src/commands/catalog.d.ts.map +1 -0
  49. package/dist/src/commands/catalog.js +392 -0
  50. package/dist/src/commands/catalog.js.map +1 -0
  51. package/dist/src/commands/doctor-catalog-checks.d.ts +3 -0
  52. package/dist/src/commands/doctor-catalog-checks.d.ts.map +1 -0
  53. package/dist/src/commands/doctor-catalog-checks.js +69 -0
  54. package/dist/src/commands/doctor-catalog-checks.js.map +1 -0
  55. package/dist/src/commands/doctor-decision-checks.d.ts +10 -0
  56. package/dist/src/commands/doctor-decision-checks.d.ts.map +1 -0
  57. package/dist/src/commands/doctor-decision-checks.js +82 -0
  58. package/dist/src/commands/doctor-decision-checks.js.map +1 -0
  59. package/dist/src/commands/doctor.d.ts.map +1 -1
  60. package/dist/src/commands/doctor.js +9 -1
  61. package/dist/src/commands/doctor.js.map +1 -1
  62. package/dist/src/commands/index.d.ts +2 -2
  63. package/dist/src/commands/index.d.ts.map +1 -1
  64. package/dist/src/commands/index.js +4 -1
  65. package/dist/src/commands/index.js.map +1 -1
  66. package/dist/src/commands/org-observe.d.ts.map +1 -1
  67. package/dist/src/commands/org-observe.js +7 -1
  68. package/dist/src/commands/org-observe.js.map +1 -1
  69. package/dist/src/commands/org-skills.d.ts.map +1 -1
  70. package/dist/src/commands/org-skills.js +14 -4
  71. package/dist/src/commands/org-skills.js.map +1 -1
  72. package/dist/src/commands/org.d.ts.map +1 -1
  73. package/dist/src/commands/org.js +8 -1
  74. package/dist/src/commands/org.js.map +1 -1
  75. package/dist/src/commands/pick.d.ts +4 -0
  76. package/dist/src/commands/pick.d.ts.map +1 -0
  77. package/dist/src/commands/pick.js +77 -0
  78. package/dist/src/commands/pick.js.map +1 -0
  79. package/dist/src/commands/route.js +1 -1
  80. package/dist/src/commands/route.js.map +1 -1
  81. package/dist/src/decision/catalogs.d.ts +20 -0
  82. package/dist/src/decision/catalogs.d.ts.map +1 -0
  83. package/dist/src/decision/catalogs.js +64 -0
  84. package/dist/src/decision/catalogs.js.map +1 -0
  85. package/dist/src/decision/jev.d.ts +85 -0
  86. package/dist/src/decision/jev.d.ts.map +1 -0
  87. package/dist/src/decision/jev.js +72 -0
  88. package/dist/src/decision/jev.js.map +1 -0
  89. package/dist/src/decision/picks.d.ts +50 -0
  90. package/dist/src/decision/picks.d.ts.map +1 -0
  91. package/dist/src/decision/picks.js +100 -0
  92. package/dist/src/decision/picks.js.map +1 -0
  93. package/dist/src/init/helpers-generator.d.ts.map +1 -1
  94. package/dist/src/init/helpers-generator.js +7 -0
  95. package/dist/src/init/helpers-generator.js.map +1 -1
  96. package/dist/src/orgrt/checkpoint-ops.d.ts.map +1 -1
  97. package/dist/src/orgrt/checkpoint-ops.js +6 -1
  98. package/dist/src/orgrt/checkpoint-ops.js.map +1 -1
  99. package/dist/src/orgrt/completion-gate.d.ts +15 -0
  100. package/dist/src/orgrt/completion-gate.d.ts.map +1 -1
  101. package/dist/src/orgrt/completion-gate.js +59 -3
  102. package/dist/src/orgrt/completion-gate.js.map +1 -1
  103. package/dist/src/orgrt/daemon.d.ts +18 -1
  104. package/dist/src/orgrt/daemon.d.ts.map +1 -1
  105. package/dist/src/orgrt/daemon.js +33 -3
  106. package/dist/src/orgrt/daemon.js.map +1 -1
  107. package/dist/src/orgrt/decisions.d.ts +24 -0
  108. package/dist/src/orgrt/decisions.d.ts.map +1 -1
  109. package/dist/src/orgrt/decisions.js +164 -18
  110. package/dist/src/orgrt/decisions.js.map +1 -1
  111. package/dist/src/orgrt/review-packet.d.ts +1 -1
  112. package/dist/src/orgrt/review-packet.d.ts.map +1 -1
  113. package/dist/src/orgrt/review-packet.js +2 -2
  114. package/dist/src/orgrt/review-packet.js.map +1 -1
  115. package/dist/src/orgrt/session.d.ts +9 -0
  116. package/dist/src/orgrt/session.d.ts.map +1 -1
  117. package/dist/src/orgrt/session.js +24 -2
  118. package/dist/src/orgrt/session.js.map +1 -1
  119. package/dist/src/orgrt/skill-library.d.ts +10 -1
  120. package/dist/src/orgrt/skill-library.d.ts.map +1 -1
  121. package/dist/src/orgrt/skill-library.js +53 -4
  122. package/dist/src/orgrt/skill-library.js.map +1 -1
  123. package/dist/src/orgrt/task-dag.d.ts +3 -0
  124. package/dist/src/orgrt/task-dag.d.ts.map +1 -1
  125. package/dist/src/orgrt/task-dag.js +6 -0
  126. package/dist/src/orgrt/task-dag.js.map +1 -1
  127. package/dist/src/orgrt/types.d.ts +2 -0
  128. package/dist/src/orgrt/types.d.ts.map +1 -1
  129. package/dist/src/orgrt/types.js +4 -0
  130. package/dist/src/orgrt/types.js.map +1 -1
  131. package/dist/src/platform-adapters/mutation.d.ts +34 -0
  132. package/dist/src/platform-adapters/mutation.d.ts.map +1 -0
  133. package/dist/src/platform-adapters/mutation.js +188 -0
  134. package/dist/src/platform-adapters/mutation.js.map +1 -0
  135. package/dist/src/platform-adapters/operations.d.ts +7 -1
  136. package/dist/src/platform-adapters/operations.d.ts.map +1 -1
  137. package/dist/src/platform-adapters/operations.js +18 -76
  138. package/dist/src/platform-adapters/operations.js.map +1 -1
  139. package/dist/src/routing/jev-step.d.ts +17 -0
  140. package/dist/src/routing/jev-step.d.ts.map +1 -0
  141. package/dist/src/routing/jev-step.js +27 -0
  142. package/dist/src/routing/jev-step.js.map +1 -0
  143. package/dist/src/routing/route-layer-factory.d.ts.map +1 -1
  144. package/dist/src/routing/route-layer-factory.js +16 -1
  145. package/dist/src/routing/route-layer-factory.js.map +1 -1
  146. package/dist/src/utils/redaction.d.ts.map +1 -1
  147. package/dist/src/utils/redaction.js +19 -4
  148. package/dist/src/utils/redaction.js.map +1 -1
  149. package/dist/tsconfig.tsbuildinfo +1 -1
  150. package/package.json +4 -4
  151. package/.claude/skills/monodesign/SKILL.md +0 -257
  152. package/.claude/skills/monodesign/adapt.md +0 -53
  153. package/.claude/skills/monodesign/agents/monodesign-asset-producer.md +0 -100
  154. package/.claude/skills/monodesign/agents/monodesign-manual-edit-applier.md +0 -103
  155. package/.claude/skills/monodesign/animate.md +0 -65
  156. package/.claude/skills/monodesign/audit.md +0 -89
  157. package/.claude/skills/monodesign/bolder.md +0 -50
  158. package/.claude/skills/monodesign/clarify.md +0 -64
  159. package/.claude/skills/monodesign/colorize.md +0 -68
  160. package/.claude/skills/monodesign/craft.md +0 -51
  161. package/.claude/skills/monodesign/critique.md +0 -66
  162. package/.claude/skills/monodesign/delight.md +0 -47
  163. package/.claude/skills/monodesign/distill.md +0 -56
  164. package/.claude/skills/monodesign/document.md +0 -83
  165. package/.claude/skills/monodesign/extract.md +0 -74
  166. package/.claude/skills/monodesign/harden.md +0 -65
  167. package/.claude/skills/monodesign/init.md +0 -30
  168. package/.claude/skills/monodesign/layout.md +0 -36
  169. package/.claude/skills/monodesign/live.md +0 -34
  170. package/.claude/skills/monodesign/onboard.md +0 -50
  171. package/.claude/skills/monodesign/optimize.md +0 -64
  172. package/.claude/skills/monodesign/overdrive.md +0 -56
  173. package/.claude/skills/monodesign/polish.md +0 -68
  174. package/.claude/skills/monodesign/quieter.md +0 -57
  175. package/.claude/skills/monodesign/reference/adapt.md +0 -312
  176. package/.claude/skills/monodesign/reference/adapt.native.md +0 -58
  177. package/.claude/skills/monodesign/reference/android.md +0 -40
  178. package/.claude/skills/monodesign/reference/animate.md +0 -203
  179. package/.claude/skills/monodesign/reference/antipatterns-catalog.md +0 -410
  180. package/.claude/skills/monodesign/reference/audit.md +0 -135
  181. package/.claude/skills/monodesign/reference/audit.native.md +0 -139
  182. package/.claude/skills/monodesign/reference/bolder.md +0 -120
  183. package/.claude/skills/monodesign/reference/brand-workflow.md +0 -180
  184. package/.claude/skills/monodesign/reference/brand.md +0 -108
  185. package/.claude/skills/monodesign/reference/clarify.md +0 -288
  186. package/.claude/skills/monodesign/reference/codex.md +0 -105
  187. package/.claude/skills/monodesign/reference/cognitive-load.md +0 -106
  188. package/.claude/skills/monodesign/reference/color-and-contrast.md +0 -105
  189. package/.claude/skills/monodesign/reference/colorize.md +0 -257
  190. package/.claude/skills/monodesign/reference/component-specs.md +0 -260
  191. package/.claude/skills/monodesign/reference/component-states.md +0 -274
  192. package/.claude/skills/monodesign/reference/component-system.md +0 -358
  193. package/.claude/skills/monodesign/reference/copy-formulas.md +0 -160
  194. package/.claude/skills/monodesign/reference/craft.md +0 -123
  195. package/.claude/skills/monodesign/reference/critique.md +0 -780
  196. package/.claude/skills/monodesign/reference/delight.md +0 -302
  197. package/.claude/skills/monodesign/reference/design-principles.md +0 -246
  198. package/.claude/skills/monodesign/reference/distill.md +0 -111
  199. package/.claude/skills/monodesign/reference/document.md +0 -429
  200. package/.claude/skills/monodesign/reference/extract.md +0 -69
  201. package/.claude/skills/monodesign/reference/harden.md +0 -347
  202. package/.claude/skills/monodesign/reference/heuristics-scoring.md +0 -234
  203. package/.claude/skills/monodesign/reference/hooks.md +0 -92
  204. package/.claude/skills/monodesign/reference/image-prompts.md +0 -130
  205. package/.claude/skills/monodesign/reference/init.md +0 -221
  206. package/.claude/skills/monodesign/reference/interaction-design.md +0 -189
  207. package/.claude/skills/monodesign/reference/ios.md +0 -45
  208. package/.claude/skills/monodesign/reference/layout.md +0 -185
  209. package/.claude/skills/monodesign/reference/live.md +0 -710
  210. package/.claude/skills/monodesign/reference/motion-design.md +0 -109
  211. package/.claude/skills/monodesign/reference/onboard.md +0 -234
  212. package/.claude/skills/monodesign/reference/optimize.md +0 -258
  213. package/.claude/skills/monodesign/reference/overdrive.md +0 -130
  214. package/.claude/skills/monodesign/reference/personas.md +0 -179
  215. package/.claude/skills/monodesign/reference/polish.md +0 -241
  216. package/.claude/skills/monodesign/reference/pre-delivery-checklist.md +0 -108
  217. package/.claude/skills/monodesign/reference/product.md +0 -60
  218. package/.claude/skills/monodesign/reference/quieter.md +0 -99
  219. package/.claude/skills/monodesign/reference/responsive-design.md +0 -114
  220. package/.claude/skills/monodesign/reference/shape.md +0 -165
  221. package/.claude/skills/monodesign/reference/spatial-design.md +0 -100
  222. package/.claude/skills/monodesign/reference/teach.md +0 -10
  223. package/.claude/skills/monodesign/reference/token-architecture.md +0 -222
  224. package/.claude/skills/monodesign/reference/typeset.md +0 -301
  225. package/.claude/skills/monodesign/reference/typography.md +0 -159
  226. package/.claude/skills/monodesign/reference/ux-research.md +0 -143
  227. package/.claude/skills/monodesign/reference/ux-rules.md +0 -211
  228. package/.claude/skills/monodesign/reference/ux-writing.md +0 -107
  229. package/.claude/skills/monodesign/scripts/command-metadata.json +0 -94
  230. package/.claude/skills/monodesign/scripts/context-signals.mjs +0 -260
  231. package/.claude/skills/monodesign/scripts/context.mjs +0 -1065
  232. package/.claude/skills/monodesign/scripts/critique-storage.mjs +0 -416
  233. package/.claude/skills/monodesign/scripts/detect-csp.mjs +0 -193
  234. package/.claude/skills/monodesign/scripts/detect.mjs +0 -33
  235. package/.claude/skills/monodesign/scripts/detector/browser/injected/index.mjs +0 -1960
  236. package/.claude/skills/monodesign/scripts/detector/cli/main.mjs +0 -321
  237. package/.claude/skills/monodesign/scripts/detector/design-system.mjs +0 -814
  238. package/.claude/skills/monodesign/scripts/detector/detect-antipatterns-browser.js +0 -5628
  239. package/.claude/skills/monodesign/scripts/detector/detect-antipatterns.mjs +0 -50
  240. package/.claude/skills/monodesign/scripts/detector/engines/browser/detect-url.mjs +0 -259
  241. package/.claude/skills/monodesign/scripts/detector/engines/browser/drivers.mjs +0 -339
  242. package/.claude/skills/monodesign/scripts/detector/engines/regex/detect-text.mjs +0 -636
  243. package/.claude/skills/monodesign/scripts/detector/engines/static-html/css-cascade.mjs +0 -1016
  244. package/.claude/skills/monodesign/scripts/detector/engines/static-html/detect-html.mjs +0 -253
  245. package/.claude/skills/monodesign/scripts/detector/engines/visual/screenshot-contrast.mjs +0 -198
  246. package/.claude/skills/monodesign/scripts/detector/findings.mjs +0 -12
  247. package/.claude/skills/monodesign/scripts/detector/fix/css-regions.mjs +0 -181
  248. package/.claude/skills/monodesign/scripts/detector/fix/fixers.mjs +0 -373
  249. package/.claude/skills/monodesign/scripts/detector/fix/index.mjs +0 -426
  250. package/.claude/skills/monodesign/scripts/detector/node/file-system.mjs +0 -198
  251. package/.claude/skills/monodesign/scripts/detector/profile/profiler.mjs +0 -166
  252. package/.claude/skills/monodesign/scripts/detector/registry/antipatterns.mjs +0 -563
  253. package/.claude/skills/monodesign/scripts/detector/rules/checks.mjs +0 -3024
  254. package/.claude/skills/monodesign/scripts/detector/shared/color.mjs +0 -124
  255. package/.claude/skills/monodesign/scripts/detector/shared/constants.mjs +0 -101
  256. package/.claude/skills/monodesign/scripts/detector/shared/fonts.mjs +0 -30
  257. package/.claude/skills/monodesign/scripts/detector/shared/inline-ignores.mjs +0 -148
  258. package/.claude/skills/monodesign/scripts/detector/shared/page.mjs +0 -7
  259. package/.claude/skills/monodesign/scripts/hook-admin.mjs +0 -694
  260. package/.claude/skills/monodesign/scripts/hook-before-edit.mjs +0 -516
  261. package/.claude/skills/monodesign/scripts/hook-lib.mjs +0 -1785
  262. package/.claude/skills/monodesign/scripts/hook.mjs +0 -61
  263. package/.claude/skills/monodesign/scripts/lib/design-parser.mjs +0 -809
  264. package/.claude/skills/monodesign/scripts/lib/is-generated.mjs +0 -69
  265. package/.claude/skills/monodesign/scripts/lib/monodesign-config.mjs +0 -640
  266. package/.claude/skills/monodesign/scripts/lib/monodesign-paths.mjs +0 -129
  267. package/.claude/skills/monodesign/scripts/lib/provider.mjs +0 -4
  268. package/.claude/skills/monodesign/scripts/lib/target-args.mjs +0 -42
  269. package/.claude/skills/monodesign/scripts/live/browser-script-parts.mjs +0 -50
  270. package/.claude/skills/monodesign/scripts/live/completion.mjs +0 -19
  271. package/.claude/skills/monodesign/scripts/live/event-validation.mjs +0 -137
  272. package/.claude/skills/monodesign/scripts/live/insert-ui.mjs +0 -458
  273. package/.claude/skills/monodesign/scripts/live/manual-apply.mjs +0 -939
  274. package/.claude/skills/monodesign/scripts/live/manual-edit-routes.mjs +0 -357
  275. package/.claude/skills/monodesign/scripts/live/manual-edits-buffer.mjs +0 -152
  276. package/.claude/skills/monodesign/scripts/live/session-store.mjs +0 -293
  277. package/.claude/skills/monodesign/scripts/live/svelte-component.mjs +0 -826
  278. package/.claude/skills/monodesign/scripts/live/sveltekit-adapter.mjs +0 -279
  279. package/.claude/skills/monodesign/scripts/live/ui-core.mjs +0 -180
  280. package/.claude/skills/monodesign/scripts/live/vocabulary.mjs +0 -36
  281. package/.claude/skills/monodesign/scripts/live-accept.mjs +0 -812
  282. package/.claude/skills/monodesign/scripts/live-browser-dom.js +0 -147
  283. package/.claude/skills/monodesign/scripts/live-browser-session.js +0 -124
  284. package/.claude/skills/monodesign/scripts/live-browser.js +0 -11213
  285. package/.claude/skills/monodesign/scripts/live-commit-manual-edits.mjs +0 -1241
  286. package/.claude/skills/monodesign/scripts/live-complete.mjs +0 -75
  287. package/.claude/skills/monodesign/scripts/live-copy-edit-agent.mjs +0 -683
  288. package/.claude/skills/monodesign/scripts/live-discard-manual-edits.mjs +0 -51
  289. package/.claude/skills/monodesign/scripts/live-inject.mjs +0 -596
  290. package/.claude/skills/monodesign/scripts/live-insert.mjs +0 -272
  291. package/.claude/skills/monodesign/scripts/live-manual-edit-evidence.mjs +0 -363
  292. package/.claude/skills/monodesign/scripts/live-poll.mjs +0 -384
  293. package/.claude/skills/monodesign/scripts/live-resume.mjs +0 -94
  294. package/.claude/skills/monodesign/scripts/live-server.mjs +0 -1210
  295. package/.claude/skills/monodesign/scripts/live-status.mjs +0 -61
  296. package/.claude/skills/monodesign/scripts/live-target.mjs +0 -30
  297. package/.claude/skills/monodesign/scripts/live-wrap.mjs +0 -884
  298. package/.claude/skills/monodesign/scripts/live.mjs +0 -297
  299. package/.claude/skills/monodesign/scripts/modern-screenshot.umd.js +0 -14
  300. package/.claude/skills/monodesign/scripts/palette.mjs +0 -635
  301. package/.claude/skills/monodesign/scripts/pin.mjs +0 -221
  302. package/.claude/skills/monodesign/shape.md +0 -71
  303. package/.claude/skills/monodesign/teach.md +0 -18
  304. package/.claude/skills/monodesign/typeset.md +0 -59
@@ -0,0 +1,62 @@
1
+ import { type CatalogEntry, type CatalogStatus, type CatalogTarget } from './types.js';
2
+ export interface CatalogAsset {
3
+ id: string;
4
+ kind: CatalogEntry['kind'];
5
+ name: string;
6
+ status: CatalogStatus;
7
+ targets: CatalogTarget[];
8
+ grantedTools: string[];
9
+ replacesLegacy: boolean;
10
+ description: string;
11
+ tags: string[];
12
+ requestedTools: string[];
13
+ sha256: string;
14
+ source: CatalogEntry['source'];
15
+ /** Digest verified (always false for revoked entries). */
16
+ eligible: boolean;
17
+ /** Verified package directory; absent when verification failed. */
18
+ dir?: string;
19
+ }
20
+ export interface CatalogDiagnostic {
21
+ id: string;
22
+ reason: string;
23
+ }
24
+ export interface CatalogSnapshot {
25
+ assets: CatalogAsset[];
26
+ diagnostics: CatalogDiagnostic[];
27
+ stateVersion: number | null;
28
+ }
29
+ /** Verified, body-free view of the catalog; empty (and file-free) without state.
30
+ * An unreadable state yields no assets and one `(state)` diagnostic, so
31
+ * consumers keep their legacy behaviour instead of failing. */
32
+ export declare function buildSnapshot(root: string): CatalogSnapshot;
33
+ /** Active, verified assets that name `target`. */
34
+ export declare function eligible(snapshot: CatalogSnapshot, target: CatalogTarget): CatalogAsset[];
35
+ export interface CatalogAuditReport {
36
+ /** False only when an active entry has a problem. */
37
+ ok: boolean;
38
+ configured: boolean;
39
+ active: number;
40
+ activeByTarget: Partial<Record<CatalogTarget, number>>;
41
+ entries: {
42
+ id: string;
43
+ status: CatalogStatus;
44
+ problems: string[];
45
+ }[];
46
+ legacyCollisions: {
47
+ name: string;
48
+ legacyOrigin: string;
49
+ catalogId: string;
50
+ replacesLegacy: boolean;
51
+ }[];
52
+ stale: {
53
+ id: string;
54
+ status: CatalogStatus;
55
+ ageDays: number;
56
+ }[];
57
+ /** Set when state.json exists but cannot be read. */
58
+ error?: string;
59
+ }
60
+ /** Re-hashes every entry and reports; repairs nothing. */
61
+ export declare function catalogAudit(root: string, now?: number): CatalogAuditReport;
62
+ //# sourceMappingURL=snapshot.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"snapshot.d.ts","sourceRoot":"","sources":["../../../src/catalog/snapshot.ts"],"names":[],"mappings":"AAaA,OAAO,EACL,KAAK,YAAY,EAGjB,KAAK,aAAa,EAClB,KAAK,aAAa,EACnB,MAAM,YAAY,CAAC;AAEpB,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,YAAY,CAAC,MAAM,CAAC,CAAC;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,aAAa,CAAC;IACtB,OAAO,EAAE,aAAa,EAAE,CAAC;IACzB,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,cAAc,EAAE,OAAO,CAAC;IACxB,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,YAAY,CAAC,QAAQ,CAAC,CAAC;IAC/B,0DAA0D;IAC1D,QAAQ,EAAE,OAAO,CAAC;IAClB,mEAAmE;IACnE,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,iBAAiB;IAChC,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,YAAY,EAAE,CAAC;IACvB,WAAW,EAAE,iBAAiB,EAAE,CAAC;IACjC,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;CAC7B;AA+ED;;gEAEgE;AAChE,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,eAAe,CAuB3D;AAED,kDAAkD;AAClD,wBAAgB,QAAQ,CAAC,QAAQ,EAAE,eAAe,EAAE,MAAM,EAAE,aAAa,GAAG,YAAY,EAAE,CAIzF;AAED,MAAM,WAAW,kBAAkB;IACjC,qDAAqD;IACrD,EAAE,EAAE,OAAO,CAAC;IACZ,UAAU,EAAE,OAAO,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,cAAc,EAAE,OAAO,CAAC,MAAM,CAAC,aAAa,EAAE,MAAM,CAAC,CAAC,CAAC;IACvD,OAAO,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,aAAa,CAAC;QAAC,QAAQ,EAAE,MAAM,EAAE,CAAA;KAAE,EAAE,CAAC;IACrE,gBAAgB,EAAE;QAChB,IAAI,EAAE,MAAM,CAAC;QACb,YAAY,EAAE,MAAM,CAAC;QACrB,SAAS,EAAE,MAAM,CAAC;QAClB,cAAc,EAAE,OAAO,CAAC;KACzB,EAAE,CAAC;IACJ,KAAK,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,aAAa,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IAChE,qDAAqD;IACrD,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAiBD,0DAA0D;AAC1D,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,GAAE,MAAmB,GAAG,kBAAkB,CA6CvF"}
@@ -0,0 +1,183 @@
1
+ /**
2
+ * The derived, disposable view of the catalog: state entries joined with the
3
+ * frontmatter of their verified packages. Pure — no writes, no registry, no
4
+ * network — and body-free. Cached per root on a hash of the state file;
5
+ * packages are content-addressed, so they need no re-hash until state changes.
6
+ * `catalogAudit` (and doctor) bypass the cache and re-hash.
7
+ */
8
+ import { createHash } from 'node:crypto';
9
+ import { existsSync, readFileSync } from 'node:fs';
10
+ import { join } from 'node:path';
11
+ import { parseFrontmatter, skillRoots } from '../orgrt/skill-library.js';
12
+ import { verifyEntry } from './digest.js';
13
+ import { loadCatalogState, statePath } from './state.js';
14
+ import { CatalogStateSchema, } from './types.js';
15
+ const asList = (v) => v === undefined ? [] : Array.isArray(v) ? v : v.split(/[,\s]+/).filter(Boolean);
16
+ const asStr = (v) => v === undefined ? '' : Array.isArray(v) ? v.join(', ') : v;
17
+ /** Authored metadata from a verified package: frontmatter or blueprint.json. */
18
+ function readMeta(kind, dir) {
19
+ if (kind === 'blueprint') {
20
+ const bp = JSON.parse(readFileSync(join(dir, 'blueprint.json'), 'utf8'));
21
+ return {
22
+ description: typeof bp.description === 'string' ? bp.description : '',
23
+ tags: [],
24
+ tools: [],
25
+ };
26
+ }
27
+ const { data } = parseFrontmatter(readFileSync(join(dir, 'SKILL.md'), 'utf8'));
28
+ return {
29
+ description: asStr(data.description),
30
+ tags: asList(data.tags),
31
+ tools: [...new Set(asList(data.tools))].sort(),
32
+ };
33
+ }
34
+ function toAsset(root, e, diagnostics) {
35
+ const base = {
36
+ id: e.id,
37
+ kind: e.kind,
38
+ name: e.id.slice(e.id.indexOf(':') + 1),
39
+ status: e.status,
40
+ targets: e.targets,
41
+ grantedTools: e.grantedTools,
42
+ replacesLegacy: e.replacesLegacy,
43
+ description: '',
44
+ tags: [],
45
+ requestedTools: e.inspection.requestedTools,
46
+ sha256: e.sha256,
47
+ source: e.source,
48
+ eligible: false,
49
+ };
50
+ if (e.status === 'revoked')
51
+ return base;
52
+ const check = verifyEntry(root, e);
53
+ if (!check.ok) {
54
+ diagnostics.push({ id: e.id, reason: check.reason });
55
+ return base;
56
+ }
57
+ try {
58
+ const meta = readMeta(e.kind, check.dir);
59
+ return {
60
+ ...base,
61
+ description: meta.description,
62
+ tags: meta.tags,
63
+ requestedTools: meta.tools.length ? meta.tools : base.requestedTools,
64
+ eligible: true,
65
+ dir: check.dir,
66
+ };
67
+ }
68
+ catch {
69
+ diagnostics.push({ id: e.id, reason: 'unreadable-metadata' });
70
+ return base;
71
+ }
72
+ }
73
+ function snapshotOf(root, state) {
74
+ const diagnostics = [];
75
+ const assets = [...state.entries]
76
+ .sort((a, b) => (a.id < b.id ? -1 : a.id > b.id ? 1 : 0))
77
+ .map((e) => toAsset(root, e, diagnostics));
78
+ return { assets, diagnostics, stateVersion: state.schemaVersion };
79
+ }
80
+ const EMPTY = () => ({ assets: [], diagnostics: [], stateVersion: null });
81
+ const cache = new Map();
82
+ /** Verified, body-free view of the catalog; empty (and file-free) without state.
83
+ * An unreadable state yields no assets and one `(state)` diagnostic, so
84
+ * consumers keep their legacy behaviour instead of failing. */
85
+ export function buildSnapshot(root) {
86
+ let raw;
87
+ try {
88
+ raw = readFileSync(statePath(root));
89
+ }
90
+ catch (e) {
91
+ if (e.code === 'ENOENT')
92
+ return EMPTY();
93
+ return { ...EMPTY(), diagnostics: [{ id: '(state)', reason: e.message }] };
94
+ }
95
+ // Keyed on content: mtime + size can repeat across two different writes.
96
+ const key = createHash('sha256').update(raw).digest('hex');
97
+ const hit = cache.get(root);
98
+ if (hit?.key === key)
99
+ return hit.snap;
100
+ let snap;
101
+ try {
102
+ // Parse the very bytes that were hashed, so the key always matches the view.
103
+ const parsed = CatalogStateSchema.safeParse(JSON.parse(raw.toString('utf8')));
104
+ if (!parsed.success)
105
+ throw new Error(`catalog state is invalid: ${parsed.error.message}`);
106
+ snap = snapshotOf(root, parsed.data);
107
+ }
108
+ catch (e) {
109
+ snap = { ...EMPTY(), diagnostics: [{ id: '(state)', reason: e.message }] };
110
+ }
111
+ cache.set(root, { key, snap });
112
+ return snap;
113
+ }
114
+ /** Active, verified assets that name `target`. */
115
+ export function eligible(snapshot, target) {
116
+ return snapshot.assets.filter((a) => a.status === 'active' && a.eligible && a.targets.includes(target));
117
+ }
118
+ /** Entries sitting this long in a non-terminal, non-active status are stale. */
119
+ const STALE_DAYS = 30;
120
+ const DAY_MS = 86_400_000;
121
+ function entryProblems(e, verify) {
122
+ const problems = [];
123
+ if (verify)
124
+ problems.push(verify);
125
+ const live = e.status === 'approved' || e.status === 'active';
126
+ if (live && e.inspection.verdict === 'quarantine' && !e.inspection.override)
127
+ problems.push('quarantine-verdict-without-override');
128
+ const notRequested = e.grantedTools.filter((t) => !e.inspection.requestedTools.includes(t));
129
+ if (notRequested.length)
130
+ problems.push(`granted-not-requested: ${notRequested.join(', ')}`);
131
+ return problems;
132
+ }
133
+ /** Re-hashes every entry and reports; repairs nothing. */
134
+ export function catalogAudit(root, now = Date.now()) {
135
+ const report = {
136
+ ok: true,
137
+ configured: existsSync(statePath(root)),
138
+ active: 0,
139
+ activeByTarget: {},
140
+ entries: [],
141
+ legacyCollisions: [],
142
+ stale: [],
143
+ };
144
+ if (!report.configured)
145
+ return report;
146
+ let state;
147
+ try {
148
+ state = loadCatalogState(root);
149
+ }
150
+ catch (e) {
151
+ return { ...report, ok: false, error: e.message };
152
+ }
153
+ const snap = snapshotOf(root, state);
154
+ const failed = new Map(snap.diagnostics.map((d) => [d.id, d.reason]));
155
+ const legacy = skillRoots(root);
156
+ for (const e of [...state.entries].sort((a, b) => (a.id < b.id ? -1 : 1))) {
157
+ const problems = entryProblems(e, failed.get(e.id));
158
+ report.entries.push({ id: e.id, status: e.status, problems });
159
+ if (e.status === 'active') {
160
+ report.active++;
161
+ for (const t of e.targets)
162
+ report.activeByTarget[t] = (report.activeByTarget[t] ?? 0) + 1;
163
+ if (problems.length)
164
+ report.ok = false;
165
+ }
166
+ const name = e.id.slice(e.id.indexOf(':') + 1);
167
+ const hit = e.kind !== 'blueprint' && e.status !== 'revoked'
168
+ ? legacy.find((r) => existsSync(join(r.dir, name, 'SKILL.md')))
169
+ : undefined;
170
+ if (hit)
171
+ report.legacyCollisions.push({
172
+ name,
173
+ legacyOrigin: hit.origin,
174
+ catalogId: e.id,
175
+ replacesLegacy: e.replacesLegacy,
176
+ });
177
+ const ageDays = Math.floor((now - Date.parse(e.updatedAt)) / DAY_MS);
178
+ if (e.status !== 'active' && e.status !== 'revoked' && ageDays >= STALE_DAYS)
179
+ report.stale.push({ id: e.id, status: e.status, ageDays });
180
+ }
181
+ return report;
182
+ }
183
+ //# sourceMappingURL=snapshot.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"snapshot.js","sourceRoot":"","sources":["../../../src/catalog/snapshot.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,26 @@
1
+ import { type FenceLoader } from './scan.js';
2
+ import type { CatalogEntry } from './types.js';
3
+ export type { FenceLoader } from './scan.js';
4
+ export interface StageOptions {
5
+ /** Self-asserted provenance, recorded in history. */
6
+ actor: string;
7
+ /** Candidate name when the source holds more than one. */
8
+ only?: string;
9
+ /** Default: `skill` when the source has a SKILL.md, else `blueprint`. */
10
+ kind?: CatalogEntry['kind'];
11
+ /** Scanner override (tests); default loads monofence-ai. */
12
+ fence?: FenceLoader;
13
+ now?: string;
14
+ }
15
+ export interface StageResult {
16
+ entry: CatalogEntry;
17
+ /** The stored package directory. */
18
+ dir: string;
19
+ /** Same digest as the recorded revision: nothing changed. */
20
+ unchanged: boolean;
21
+ }
22
+ /** Every directory holding a blueprint.json under `root`. */
23
+ export declare function findBlueprintDirs(root: string): string[];
24
+ /** Stage one candidate from `src` (owner/repo, git URL or local path). */
25
+ export declare function stage(root: string, src: string, opts: StageOptions): Promise<StageResult>;
26
+ //# sourceMappingURL=stage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stage.d.ts","sourceRoot":"","sources":["../../../src/catalog/stage.ts"],"names":[],"mappings":"AA+BA,OAAO,EAAE,KAAK,WAAW,EAA6C,MAAM,WAAW,CAAC;AAExF,OAAO,KAAK,EAAE,YAAY,EAAiB,MAAM,YAAY,CAAC;AAE9D,YAAY,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAE7C,MAAM,WAAW,YAAY;IAC3B,qDAAqD;IACrD,KAAK,EAAE,MAAM,CAAC;IACd,0DAA0D;IAC1D,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,yEAAyE;IACzE,IAAI,CAAC,EAAE,YAAY,CAAC,MAAM,CAAC,CAAC;IAC5B,4DAA4D;IAC5D,KAAK,CAAC,EAAE,WAAW,CAAC;IACpB,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,YAAY,CAAC;IACpB,oCAAoC;IACpC,GAAG,EAAE,MAAM,CAAC;IACZ,6DAA6D;IAC7D,SAAS,EAAE,OAAO,CAAC;CACpB;AAcD,6DAA6D;AAC7D,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAUxD;AAgJD,0EAA0E;AAC1E,wBAAsB,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,YAAY,GAAG,OAAO,CAAC,WAAW,CAAC,CA6H/F"}
@@ -0,0 +1,316 @@
1
+ /**
2
+ * Staging: bring one skill, archetype or blueprint from a Git repository or a
3
+ * local path into the content-addressed package store
4
+ * (`.monomind/catalog/packages/<name>/<sha12>/`) and record it as `staged`
5
+ * (clean scan) or `quarantined`. The candidate is copied first (O_NOFOLLOW)
6
+ * and the copy is what gets inspected, hashed and stored — so a source edited
7
+ * mid-stage cannot reach the store. A refused stage leaves no store debris.
8
+ */
9
+ import { closeSync, constants, existsSync, fstatSync, lstatSync, mkdirSync, mkdtempSync, openSync, readdirSync, readFileSync, realpathSync, renameSync, rmdirSync, rmSync, writeFileSync, } from 'node:fs';
10
+ import { basename, dirname, join, relative } from 'node:path';
11
+ import { checkout, findSkillDirs, skillLicense, toSkillName } from '../orgrt/skill-import.js';
12
+ import { parseFrontmatter } from '../orgrt/skill-library.js';
13
+ import { BlueprintSchema } from './blueprints.js';
14
+ import { packageDigest, packagesDir } from './digest.js';
15
+ import { sanitizeFrontmatter } from './frontmatter.js';
16
+ import { inspectPackage, MAX_FILE_BYTES, SKIP_DIRS } from './scan.js';
17
+ import { CatalogStateError, HISTORY_CAP, loadCatalogState, mutateCatalogState } from './state.js';
18
+ /** Statuses from which changed content may replace the recorded revision. */
19
+ const RESTAGEABLE = ['staged', 'quarantined', 'disabled'];
20
+ const DISCOVERY_SKIP = new Set(['node_modules', '.git', 'dist', 'build']);
21
+ /** Every directory holding a blueprint.json under `root`. */
22
+ export function findBlueprintDirs(root) {
23
+ const out = [];
24
+ const walk = (dir) => {
25
+ const entries = readdirSync(dir, { withFileTypes: true });
26
+ if (entries.some((e) => e.isFile() && e.name === 'blueprint.json'))
27
+ out.push(dir);
28
+ for (const e of entries)
29
+ if (e.isDirectory() && !DISCOVERY_SKIP.has(e.name))
30
+ walk(join(dir, e.name));
31
+ };
32
+ walk(root);
33
+ return out;
34
+ }
35
+ const byDepth = (a, b) => a.split('/').length - b.split('/').length || a.localeCompare(b);
36
+ function discover(root, kind) {
37
+ const seen = new Set();
38
+ const out = [];
39
+ const add = (c) => {
40
+ if (seen.has(c.name))
41
+ return;
42
+ seen.add(c.name);
43
+ out.push(c);
44
+ };
45
+ if (kind === 'blueprint') {
46
+ for (const dir of findBlueprintDirs(root).sort(byDepth)) {
47
+ try {
48
+ const bp = BlueprintSchema.parse(JSON.parse(readFileSync(join(dir, 'blueprint.json'), 'utf8')));
49
+ add({ name: bp.name, dir });
50
+ }
51
+ catch (e) {
52
+ add({ name: toSkillName(basename(dir)), dir, invalid: e.message.slice(0, 300) });
53
+ }
54
+ }
55
+ return out;
56
+ }
57
+ for (const dir of findSkillDirs(root).sort(byDepth)) {
58
+ const { data } = parseFrontmatter(readFileSync(join(dir, 'SKILL.md'), 'utf8'));
59
+ const name = typeof data.name === 'string' ? data.name : basename(dir);
60
+ const license = typeof data.license === 'string' ? data.license : undefined;
61
+ add({ name: toSkillName(name), dir, declaredLicense: license });
62
+ }
63
+ return out;
64
+ }
65
+ function choose(root, opts) {
66
+ const kind = opts.kind ?? (findSkillDirs(root).length ? 'skill' : 'blueprint');
67
+ const all = discover(root, kind);
68
+ const picked = opts.only ? all.filter((c) => c.name === opts.only) : all;
69
+ if (picked.length === 0)
70
+ throw new CatalogStateError(opts.only
71
+ ? `no ${kind} named "${opts.only}" in the source`
72
+ : `no ${kind} found in the source`);
73
+ if (picked.length > 1)
74
+ throw new CatalogStateError(`${picked.length} candidates (${picked.map((c) => c.name).join(', ')}); pass --only <name>`);
75
+ const c = picked[0];
76
+ if (c.invalid)
77
+ throw new CatalogStateError(`invalid blueprint.json in ${c.dir}: ${c.invalid}`);
78
+ return { kind, c };
79
+ }
80
+ function copyNoFollow(from, to) {
81
+ const fd = openSync(from, constants.O_RDONLY | constants.O_NOFOLLOW);
82
+ try {
83
+ if (!fstatSync(fd).isFile())
84
+ throw new Error(`not a regular file: ${from}`);
85
+ mkdirSync(dirname(to), { recursive: true });
86
+ writeFileSync(to, readFileSync(fd));
87
+ }
88
+ finally {
89
+ closeSync(fd);
90
+ }
91
+ }
92
+ /** Copy regular files of `src` into `dest`; symlinks, excluded dirs and oversize files are rejected. */
93
+ function copyCandidate(src, dest, skip) {
94
+ const rejected = [];
95
+ const walk = (prefix) => {
96
+ for (const name of readdirSync(join(src, prefix)).sort()) {
97
+ const rel = prefix ? `${prefix}/${name}` : name;
98
+ const from = join(src, rel);
99
+ if (from === skip)
100
+ continue;
101
+ const st = lstatSync(from);
102
+ if (st.isSymbolicLink())
103
+ rejected.push({ path: rel, reason: 'symlink' });
104
+ else if (st.isDirectory()) {
105
+ if (SKIP_DIRS.has(name))
106
+ rejected.push({ path: rel, reason: 'excluded directory' });
107
+ else
108
+ walk(rel);
109
+ }
110
+ else if (!st.isFile())
111
+ rejected.push({ path: rel, reason: 'not a regular file' });
112
+ else if (st.size > MAX_FILE_BYTES)
113
+ rejected.push({ path: rel, reason: `larger than ${MAX_FILE_BYTES / 1024} KiB` });
114
+ else
115
+ copyNoFollow(from, join(dest, rel));
116
+ }
117
+ };
118
+ walk('');
119
+ return rejected;
120
+ }
121
+ function pruneEmptyDirs(dir) {
122
+ for (const e of readdirSync(dir, { withFileTypes: true })) {
123
+ if (!e.isDirectory())
124
+ continue;
125
+ const sub = join(dir, e.name);
126
+ pruneEmptyDirs(sub);
127
+ if (readdirSync(sub).length === 0)
128
+ rmdirSync(sub);
129
+ }
130
+ }
131
+ function sourceOf(src, co, dir, license) {
132
+ const inSource = relative(co.root, dir) || '.';
133
+ const commit = co.commit && /^[0-9a-f]{40}$/.test(co.commit) ? co.commit : undefined;
134
+ if (!existsSync(src)) {
135
+ if (!commit)
136
+ throw new CatalogStateError(`no commit recorded for ${co.source}`);
137
+ return { kind: 'git', url: co.source, commit, path: inSource, license };
138
+ }
139
+ return {
140
+ kind: 'local',
141
+ path: realpathSync(co.root),
142
+ ...(commit ? { commit } : {}),
143
+ path_in_source: inSource,
144
+ license,
145
+ };
146
+ }
147
+ /** Every SKILL.md below `dir` (root and nested), relative; the copy holds no links. */
148
+ function skillMdFiles(dir, prefix = '') {
149
+ const out = [];
150
+ for (const e of readdirSync(join(dir, prefix), { withFileTypes: true })) {
151
+ const rel = prefix ? `${prefix}/${e.name}` : e.name;
152
+ if (e.name.startsWith('.'))
153
+ continue; // dropped by inspection
154
+ if (e.isDirectory())
155
+ out.push(...skillMdFiles(dir, rel));
156
+ else if (e.isFile() && e.name === 'SKILL.md')
157
+ out.push(rel);
158
+ }
159
+ return out;
160
+ }
161
+ /** Rewrites every SKILL.md's frontmatter to the allow-list in place; one reject record per dropped key. */
162
+ function sanitizeSkillMd(dir) {
163
+ return skillMdFiles(dir).flatMap((rel) => {
164
+ const file = join(dir, rel);
165
+ const before = readFileSync(file, 'utf8');
166
+ const { text, removed } = sanitizeFrontmatter(before);
167
+ if (text !== before)
168
+ writeFileSync(file, text);
169
+ return removed.map((key) => ({
170
+ path: `${rel} (frontmatter ${key})`,
171
+ reason: 'frontmatter key not allowed; removed',
172
+ }));
173
+ });
174
+ }
175
+ /** Stage one candidate from `src` (owner/repo, git URL or local path). */
176
+ export async function stage(root, src, opts) {
177
+ const now = opts.now ?? new Date().toISOString();
178
+ // Never echo the URL: it would print the credential it carries.
179
+ if (!existsSync(src) && /^[a-z][a-z0-9+.-]*:\/\/[^/?#]*@/i.test(src))
180
+ throw new CatalogStateError('refusing a source URL with embedded credentials (user[:token]@); use a git credential helper');
181
+ const co = checkout(src);
182
+ const store = packagesDir(root);
183
+ const storeExisted = existsSync(store);
184
+ let temp;
185
+ try {
186
+ const { kind, c } = choose(co.root, opts);
187
+ const id = `${kind}:${c.name}`;
188
+ const verdict = skillLicense(c.dir, co.root, c.declaredLicense);
189
+ if (!verdict.license)
190
+ throw new CatalogStateError(`license: ${verdict.found}`);
191
+ const license = verdict.license;
192
+ const source = sourceOf(src, co, c.dir, license);
193
+ // Read-only preflight; repeated under the lock below.
194
+ const prior = loadCatalogState(root).entries.find((e) => e.id === id);
195
+ if (prior?.status === 'revoked')
196
+ throw new CatalogStateError(`${id} is revoked`);
197
+ mkdirSync(join(store, '.incoming'), { recursive: true });
198
+ temp = mkdtempSync(join(store, '.incoming', `${c.name}-`));
199
+ const copyRejects = copyCandidate(c.dir, temp, verdict.file);
200
+ if (verdict.file)
201
+ copyNoFollow(verdict.file, join(temp, 'LICENSE.txt'));
202
+ // Before inspection and hashing: platforms execute frontmatter config.
203
+ if (kind !== 'blueprint')
204
+ copyRejects.push(...sanitizeSkillMd(temp));
205
+ const insp = await inspectPackage(temp, kind, { root, fence: opts.fence });
206
+ if (insp.fatal)
207
+ throw new CatalogStateError(`refused ${id}: ${insp.fatal}`);
208
+ for (const r of insp.rejected)
209
+ rmSync(join(temp, r.path), { recursive: true, force: true });
210
+ pruneEmptyDirs(temp);
211
+ const sha256 = packageDigest(temp);
212
+ if (prior && prior.sha256 !== sha256 && !RESTAGEABLE.includes(prior.status))
213
+ throw new CatalogStateError(`entry is ${prior.status}; disable it first`);
214
+ const dir = join(store, c.name, sha256.slice(0, 12));
215
+ let created = false;
216
+ if (existsSync(dir)) {
217
+ if (packageDigest(dir) !== sha256)
218
+ throw new CatalogStateError(`stored package ${dir} does not match its digest`);
219
+ }
220
+ else {
221
+ mkdirSync(dirname(dir), { recursive: true });
222
+ renameSync(temp, dir);
223
+ temp = undefined;
224
+ created = true;
225
+ }
226
+ const inspection = {
227
+ verdict: insp.verdict,
228
+ accepted: insp.accepted,
229
+ rejected: [...copyRejects, ...insp.rejected].sort((a, b) => (a.path < b.path ? -1 : 1)),
230
+ requestedTools: insp.requestedTools,
231
+ scanner: insp.scanner,
232
+ at: now,
233
+ };
234
+ const status = insp.verdict === 'clean' ? 'staged' : 'quarantined';
235
+ let entry;
236
+ let unchanged = false;
237
+ try {
238
+ mutateCatalogState(root, (state) => {
239
+ const cur = state.entries.find((e) => e.id === id);
240
+ if (cur?.status === 'revoked')
241
+ throw new CatalogStateError(`${id} is revoked`);
242
+ if (cur && cur.sha256 === sha256) {
243
+ unchanged = true;
244
+ entry = cur;
245
+ return state;
246
+ }
247
+ if (cur && !RESTAGEABLE.includes(cur.status))
248
+ throw new CatalogStateError(`entry is ${cur.status}; disable it first`);
249
+ const next = cur
250
+ ? {
251
+ ...cur,
252
+ sha256,
253
+ source,
254
+ inspection,
255
+ status,
256
+ targets: [],
257
+ grantedTools: [],
258
+ replacesLegacy: false,
259
+ updatedAt: now,
260
+ history: [
261
+ ...cur.history,
262
+ { from: cur.status, to: status, actor: opts.actor, at: now, reason: 'restaged' },
263
+ ].slice(-HISTORY_CAP),
264
+ }
265
+ : {
266
+ id,
267
+ kind,
268
+ status,
269
+ sha256,
270
+ source,
271
+ inspection,
272
+ targets: [],
273
+ grantedTools: [],
274
+ replacesLegacy: false,
275
+ createdAt: now,
276
+ updatedAt: now,
277
+ history: [{ from: null, to: status, actor: opts.actor, at: now }],
278
+ };
279
+ entry = next;
280
+ return {
281
+ ...state,
282
+ entries: cur
283
+ ? state.entries.map((e) => (e.id === id ? next : e))
284
+ : [...state.entries, next],
285
+ };
286
+ });
287
+ }
288
+ catch (e) {
289
+ if (created) {
290
+ rmSync(dir, { recursive: true, force: true });
291
+ rmdirIfEmpty(dirname(dir));
292
+ }
293
+ throw e;
294
+ }
295
+ return { entry: entry, dir, unchanged };
296
+ }
297
+ finally {
298
+ co.cleanup();
299
+ if (temp)
300
+ rmSync(temp, { recursive: true, force: true });
301
+ rmdirIfEmpty(join(store, '.incoming'));
302
+ if (!storeExisted) {
303
+ rmdirIfEmpty(store);
304
+ rmdirIfEmpty(dirname(store));
305
+ }
306
+ }
307
+ }
308
+ function rmdirIfEmpty(dir) {
309
+ try {
310
+ rmdirSync(dir);
311
+ }
312
+ catch {
313
+ // not empty (still in use) or absent
314
+ }
315
+ }
316
+ //# sourceMappingURL=stage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stage.js","sourceRoot":"","sources":["../../../src/catalog/stage.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,EACL,SAAS,EACT,SAAS,EACT,UAAU,EACV,SAAS,EACT,SAAS,EACT,SAAS,EACT,WAAW,EACX,QAAQ,EACR,WAAW,EACX,YAAY,EACZ,YAAY,EACZ,UAAU,EACV,SAAS,EACT,MAAM,EACN,aAAa,GACd,MAAM,SAAS,CAAC;AACjB,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAC9D,OAAO,EAAE,QAAQ,EAAE,aAAa,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAC9F,OAAO,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAC7D,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AACzD,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,EAAoB,cAAc,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACxF,OAAO,EAAE,iBAAiB,EAAE,WAAW,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAyBlG,6EAA6E;AAC7E,MAAM,WAAW,GAA6B,CAAC,QAAQ,EAAE,aAAa,EAAE,UAAU,CAAC,CAAC;AACpF,MAAM,cAAc,GAAG,IAAI,GAAG,CAAC,CAAC,cAAc,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;AAU1E,6DAA6D;AAC7D,MAAM,UAAU,iBAAiB,CAAC,IAAY;IAC5C,MAAM,GAAG,GAAa,EAAE,CAAC;IACzB,MAAM,IAAI,GAAG,CAAC,GAAW,EAAQ,EAAE;QACjC,MAAM,OAAO,GAAG,WAAW,CAAC,GAAG,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;QAC1D,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,IAAI,KAAK,gBAAgB,CAAC;YAAE,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAClF,KAAK,MAAM,CAAC,IAAI,OAAO;YACrB,IAAI,CAAC,CAAC,WAAW,EAAE,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC;gBAAE,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;IAChF,CAAC,CAAC;IACF,IAAI,CAAC,IAAI,CAAC,CAAC;IACX,OAAO,GAAG,CAAC;AACb,CAAC;AAED,MAAM,OAAO,GAAG,CAAC,CAAS,EAAE,CAAS,EAAU,EAAE,CAC/C,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;AAElE,SAAS,QAAQ,CAAC,IAAY,EAAE,IAA0B;IACxD,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAC/B,MAAM,GAAG,GAAgB,EAAE,CAAC;IAC5B,MAAM,GAAG,GAAG,CAAC,CAAY,EAAE,EAAE;QAC3B,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC;YAAE,OAAO;QAC7B,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QACjB,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACd,CAAC,CAAC;IACF,IAAI,IAAI,KAAK,WAAW,EAAE,CAAC;QACzB,KAAK,MAAM,GAAG,IAAI,iBAAiB,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;YACxD,IAAI,CAAC;gBACH,MAAM,EAAE,GAAG,eAAe,CAAC,KAAK,CAC9B,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,GAAG,EAAE,gBAAgB,CAAC,EAAE,MAAM,CAAC,CAAC,CAC9D,CAAC;gBACF,GAAG,CAAC,EAAE,IAAI,EAAE,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,CAAC,CAAC;YAC9B,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC;gBACX,GAAG,CAAC,EAAE,IAAI,EAAE,WAAW,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,OAAO,EAAG,CAAW,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC;YAC9F,CAAC;QACH,CAAC;QACD,OAAO,GAAG,CAAC;IACb,CAAC;IACD,KAAK,MAAM,GAAG,IAAI,aAAa,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;QACpD,MAAM,EAAE,IAAI,EAAE,GAAG,gBAAgB,CAAC,YAAY,CAAC,IAAI,CAAC,GAAG,EAAE,UAAU,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC;QAC/E,MAAM,IAAI,GAAG,OAAO,IAAI,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;QACvE,MAAM,OAAO,GAAG,OAAO,IAAI,CAAC,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC;QAC5E,GAAG,CAAC,EAAE,IAAI,EAAE,WAAW,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,eAAe,EAAE,OAAO,EAAE,CAAC,CAAC;IAClE,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,SAAS,MAAM,CAAC,IAAY,EAAE,IAAkB;IAC9C,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC;IAC/E,MAAM,GAAG,GAAG,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IACjC,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;IACzE,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;QACrB,MAAM,IAAI,iBAAiB,CACzB,IAAI,CAAC,IAAI;YACP,CAAC,CAAC,MAAM,IAAI,WAAW,IAAI,CAAC,IAAI,iBAAiB;YACjD,CAAC,CAAC,MAAM,IAAI,sBAAsB,CACrC,CAAC;IACJ,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC;QACnB,MAAM,IAAI,iBAAiB,CACzB,GAAG,MAAM,CAAC,MAAM,gBAAgB,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,uBAAuB,CAC5F,CAAC;IACJ,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;IACpB,IAAI,CAAC,CAAC,OAAO;QAAE,MAAM,IAAI,iBAAiB,CAAC,6BAA6B,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;IAC/F,OAAO,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;AACrB,CAAC;AAED,SAAS,YAAY,CAAC,IAAY,EAAE,EAAU;IAC5C,MAAM,EAAE,GAAG,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC,QAAQ,GAAG,SAAS,CAAC,UAAU,CAAC,CAAC;IACrE,IAAI,CAAC;QACH,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,MAAM,EAAE;YAAE,MAAM,IAAI,KAAK,CAAC,uBAAuB,IAAI,EAAE,CAAC,CAAC;QAC5E,SAAS,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAC5C,aAAa,CAAC,EAAE,EAAE,YAAY,CAAC,EAAE,CAAC,CAAC,CAAC;IACtC,CAAC;YAAS,CAAC;QACT,SAAS,CAAC,EAAE,CAAC,CAAC;IAChB,CAAC;AACH,CAAC;AAED,wGAAwG;AACxG,SAAS,aAAa,CAAC,GAAW,EAAE,IAAY,EAAE,IAAwB;IACxE,MAAM,QAAQ,GAAuC,EAAE,CAAC;IACxD,MAAM,IAAI,GAAG,CAAC,MAAc,EAAQ,EAAE;QACpC,KAAK,MAAM,IAAI,IAAI,WAAW,CAAC,IAAI,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC;YACzD,MAAM,GAAG,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,IAAI,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;YAChD,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;YAC5B,IAAI,IAAI,KAAK,IAAI;gBAAE,SAAS;YAC5B,MAAM,EAAE,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;YAC3B,IAAI,EAAE,CAAC,cAAc,EAAE;gBAAE,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,CAAC;iBACpE,IAAI,EAAE,CAAC,WAAW,EAAE,EAAE,CAAC;gBAC1B,IAAI,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC;oBAAE,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,EAAE,oBAAoB,EAAE,CAAC,CAAC;;oBAC/E,IAAI,CAAC,GAAG,CAAC,CAAC;YACjB,CAAC;iBAAM,IAAI,CAAC,EAAE,CAAC,MAAM,EAAE;gBAAE,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,EAAE,oBAAoB,EAAE,CAAC,CAAC;iBAC/E,IAAI,EAAE,CAAC,IAAI,GAAG,cAAc;gBAC/B,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,EAAE,eAAe,cAAc,GAAG,IAAI,MAAM,EAAE,CAAC,CAAC;;gBAC9E,YAAY,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC;QAC3C,CAAC;IACH,CAAC,CAAC;IACF,IAAI,CAAC,EAAE,CAAC,CAAC;IACT,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,SAAS,cAAc,CAAC,GAAW;IACjC,KAAK,MAAM,CAAC,IAAI,WAAW,CAAC,GAAG,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;QAC1D,IAAI,CAAC,CAAC,CAAC,WAAW,EAAE;YAAE,SAAS;QAC/B,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;QAC9B,cAAc,CAAC,GAAG,CAAC,CAAC;QACpB,IAAI,WAAW,CAAC,GAAG,CAAC,CAAC,MAAM,KAAK,CAAC;YAAE,SAAS,CAAC,GAAG,CAAC,CAAC;IACpD,CAAC;AACH,CAAC;AAED,SAAS,QAAQ,CACf,GAAW,EACX,EAAqD,EACrD,GAAW,EACX,OAA6B;IAE7B,MAAM,QAAQ,GAAG,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,GAAG,CAAC,IAAI,GAAG,CAAC;IAC/C,MAAM,MAAM,GAAG,EAAE,CAAC,MAAM,IAAI,gBAAgB,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC;IACrF,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QACrB,IAAI,CAAC,MAAM;YAAE,MAAM,IAAI,iBAAiB,CAAC,0BAA0B,EAAE,CAAC,MAAM,EAAE,CAAC,CAAC;QAChF,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC;IAC1E,CAAC;IACD,OAAO;QACL,IAAI,EAAE,OAAO;QACb,IAAI,EAAE,YAAY,CAAC,EAAE,CAAC,IAAI,CAAC;QAC3B,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC7B,cAAc,EAAE,QAAQ;QACxB,OAAO;KACR,CAAC;AACJ,CAAC;AAED,uFAAuF;AACvF,SAAS,YAAY,CAAC,GAAW,EAAE,MAAM,GAAG,EAAE;IAC5C,MAAM,GAAG,GAAa,EAAE,CAAC;IACzB,KAAK,MAAM,CAAC,IAAI,WAAW,CAAC,IAAI,CAAC,GAAG,EAAE,MAAM,CAAC,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;QACxE,MAAM,GAAG,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QACpD,IAAI,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;YAAE,SAAS,CAAC,wBAAwB;QAC9D,IAAI,CAAC,CAAC,WAAW,EAAE;YAAE,GAAG,CAAC,IAAI,CAAC,GAAG,YAAY,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;aACpD,IAAI,CAAC,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,IAAI,KAAK,UAAU;YAAE,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC9D,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,2GAA2G;AAC3G,SAAS,eAAe,CAAC,GAAW;IAClC,OAAO,YAAY,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE;QACvC,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;QAC5B,MAAM,MAAM,GAAG,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QAC1C,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,mBAAmB,CAAC,MAAM,CAAC,CAAC;QACtD,IAAI,IAAI,KAAK,MAAM;YAAE,aAAa,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QAC/C,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;YAC3B,IAAI,EAAE,GAAG,GAAG,iBAAiB,GAAG,GAAG;YACnC,MAAM,EAAE,sCAAsC;SAC/C,CAAC,CAAC,CAAC;IACN,CAAC,CAAC,CAAC;AACL,CAAC;AAED,0EAA0E;AAC1E,MAAM,CAAC,KAAK,UAAU,KAAK,CAAC,IAAY,EAAE,GAAW,EAAE,IAAkB;IACvE,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,IAAI,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IACjD,gEAAgE;IAChE,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,kCAAkC,CAAC,IAAI,CAAC,GAAG,CAAC;QAClE,MAAM,IAAI,iBAAiB,CACzB,8FAA8F,CAC/F,CAAC;IACJ,MAAM,EAAE,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC;IACzB,MAAM,KAAK,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC;IAChC,MAAM,YAAY,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC;IACvC,IAAI,IAAwB,CAAC;IAC7B,IAAI,CAAC;QACH,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,GAAG,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QAC1C,MAAM,EAAE,GAAG,GAAG,IAAI,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC;QAC/B,MAAM,OAAO,GAAG,YAAY,CAAC,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC,eAAe,CAAC,CAAC;QAChE,IAAI,CAAC,OAAO,CAAC,OAAO;YAAE,MAAM,IAAI,iBAAiB,CAAC,YAAY,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC;QAC/E,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;QAChC,MAAM,MAAM,GAAG,QAAQ,CAAC,GAAG,EAAE,EAAE,EAAE,CAAC,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;QACjD,sDAAsD;QACtD,MAAM,KAAK,GAAG,gBAAgB,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;QACtE,IAAI,KAAK,EAAE,MAAM,KAAK,SAAS;YAAE,MAAM,IAAI,iBAAiB,CAAC,GAAG,EAAE,aAAa,CAAC,CAAC;QAEjF,SAAS,CAAC,IAAI,CAAC,KAAK,EAAE,WAAW,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACzD,IAAI,GAAG,WAAW,CAAC,IAAI,CAAC,KAAK,EAAE,WAAW,EAAE,GAAG,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC;QAC3D,MAAM,WAAW,GAAG,aAAa,CAAC,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;QAC7D,IAAI,OAAO,CAAC,IAAI;YAAE,YAAY,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,aAAa,CAAC,CAAC,CAAC;QACxE,uEAAuE;QACvE,IAAI,IAAI,KAAK,WAAW;YAAE,WAAW,CAAC,IAAI,CAAC,GAAG,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC;QACrE,MAAM,IAAI,GAAG,MAAM,cAAc,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;QAC3E,IAAI,IAAI,CAAC,KAAK;YAAE,MAAM,IAAI,iBAAiB,CAAC,WAAW,EAAE,KAAK,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;QAC5E,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,QAAQ;YAAE,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QAC5F,cAAc,CAAC,IAAI,CAAC,CAAC;QACrB,MAAM,MAAM,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC;QACnC,IAAI,KAAK,IAAI,KAAK,CAAC,MAAM,KAAK,MAAM,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC;YACzE,MAAM,IAAI,iBAAiB,CAAC,YAAY,KAAK,CAAC,MAAM,oBAAoB,CAAC,CAAC;QAE5E,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,IAAI,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;QACrD,IAAI,OAAO,GAAG,KAAK,CAAC;QACpB,IAAI,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YACpB,IAAI,aAAa,CAAC,GAAG,CAAC,KAAK,MAAM;gBAC/B,MAAM,IAAI,iBAAiB,CAAC,kBAAkB,GAAG,4BAA4B,CAAC,CAAC;QACnF,CAAC;aAAM,CAAC;YACN,SAAS,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YAC7C,UAAU,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;YACtB,IAAI,GAAG,SAAS,CAAC;YACjB,OAAO,GAAG,IAAI,CAAC;QACjB,CAAC;QAED,MAAM,UAAU,GAA+B;YAC7C,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,QAAQ,EAAE,CAAC,GAAG,WAAW,EAAE,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YACvF,cAAc,EAAE,IAAI,CAAC,cAAc;YACnC,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,EAAE,EAAE,GAAG;SACR,CAAC;QACF,MAAM,MAAM,GAAkB,IAAI,CAAC,OAAO,KAAK,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,aAAa,CAAC;QAClF,IAAI,KAA+B,CAAC;QACpC,IAAI,SAAS,GAAG,KAAK,CAAC;QACtB,IAAI,CAAC;YACH,kBAAkB,CAAC,IAAI,EAAE,CAAC,KAAK,EAAE,EAAE;gBACjC,MAAM,GAAG,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;gBACnD,IAAI,GAAG,EAAE,MAAM,KAAK,SAAS;oBAAE,MAAM,IAAI,iBAAiB,CAAC,GAAG,EAAE,aAAa,CAAC,CAAC;gBAC/E,IAAI,GAAG,IAAI,GAAG,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;oBACjC,SAAS,GAAG,IAAI,CAAC;oBACjB,KAAK,GAAG,GAAG,CAAC;oBACZ,OAAO,KAAK,CAAC;gBACf,CAAC;gBACD,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC;oBAC1C,MAAM,IAAI,iBAAiB,CAAC,YAAY,GAAG,CAAC,MAAM,oBAAoB,CAAC,CAAC;gBAC1E,MAAM,IAAI,GAAiB,GAAG;oBAC5B,CAAC,CAAC;wBACE,GAAG,GAAG;wBACN,MAAM;wBACN,MAAM;wBACN,UAAU;wBACV,MAAM;wBACN,OAAO,EAAE,EAAE;wBACX,YAAY,EAAE,EAAE;wBAChB,cAAc,EAAE,KAAK;wBACrB,SAAS,EAAE,GAAG;wBACd,OAAO,EAAE;4BACP,GAAG,GAAG,CAAC,OAAO;4BACd,EAAE,IAAI,EAAE,GAAG,CAAC,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,EAAE,EAAE,GAAG,EAAE,MAAM,EAAE,UAAU,EAAE;yBACjF,CAAC,KAAK,CAAC,CAAC,WAAW,CAAC;qBACtB;oBACH,CAAC,CAAC;wBACE,EAAE;wBACF,IAAI;wBACJ,MAAM;wBACN,MAAM;wBACN,MAAM;wBACN,UAAU;wBACV,OAAO,EAAE,EAAE;wBACX,YAAY,EAAE,EAAE;wBAChB,cAAc,EAAE,KAAK;wBACrB,SAAS,EAAE,GAAG;wBACd,SAAS,EAAE,GAAG;wBACd,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC;qBAClE,CAAC;gBACN,KAAK,GAAG,IAAI,CAAC;gBACb,OAAO;oBACL,GAAG,KAAK;oBACR,OAAO,EAAE,GAAG;wBACV,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;wBACpD,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,OAAO,EAAE,IAAI,CAAC;iBAC7B,CAAC;YACJ,CAAC,CAAC,CAAC;QACL,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,IAAI,OAAO,EAAE,CAAC;gBACZ,MAAM,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;gBAC9C,YAAY,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC;YAC7B,CAAC;YACD,MAAM,CAAC,CAAC;QACV,CAAC;QACD,OAAO,EAAE,KAAK,EAAE,KAAqB,EAAE,GAAG,EAAE,SAAS,EAAE,CAAC;IAC1D,CAAC;YAAS,CAAC;QACT,EAAE,CAAC,OAAO,EAAE,CAAC;QACb,IAAI,IAAI;YAAE,MAAM,CAAC,IAAI,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QACzD,YAAY,CAAC,IAAI,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC,CAAC;QACvC,IAAI,CAAC,YAAY,EAAE,CAAC;YAClB,YAAY,CAAC,KAAK,CAAC,CAAC;YACpB,YAAY,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC;QAC/B,CAAC;IACH,CAAC;AACH,CAAC;AAED,SAAS,YAAY,CAAC,GAAW;IAC/B,IAAI,CAAC;QACH,SAAS,CAAC,GAAG,CAAC,CAAC;IACjB,CAAC;IAAC,MAAM,CAAC;QACP,qCAAqC;IACvC,CAAC;AACH,CAAC"}