@legionworks/facet 1.9.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 (327) hide show
  1. package/LICENSE-APACHE +202 -0
  2. package/LICENSE-MIT +23 -0
  3. package/README.md +158 -0
  4. package/dist/gallery/chunk-4g8rem85.css +656 -0
  5. package/dist/gallery/chunk-c6s9k9ty.js +5970 -0
  6. package/dist/gallery/frame/artifact.css +8424 -0
  7. package/dist/gallery/frame/chunks/abnfDiagram-N423BO3Z-jj74szbm.js +155 -0
  8. package/dist/gallery/frame/chunks/architecture-TIHT7OUA-cvdjn7dt.js +10 -0
  9. package/dist/gallery/frame/chunks/architectureDiagram-T3A2C74G-n4z77eg6.js +8675 -0
  10. package/dist/gallery/frame/chunks/blockDiagram-VBNYF7ZC-7xsqzrd1.js +3529 -0
  11. package/dist/gallery/frame/chunks/c4Diagram-5PPSVZJV-z2zjs7wx.js +2413 -0
  12. package/dist/gallery/frame/chunks/classDiagram-JCYQIIEL-ve8rngqp.js +47 -0
  13. package/dist/gallery/frame/chunks/classDiagram-v2-OCEON4UE-8cfaxb8z.js +47 -0
  14. package/dist/gallery/frame/chunks/cose-bilkent-JH36ORCC-sn92qexx.js +4822 -0
  15. package/dist/gallery/frame/chunks/cynefin-VYW2F7L2-tqjv913d.js +10 -0
  16. package/dist/gallery/frame/chunks/cynefinDiagram-MW4NZA55-c1c0dj12.js +500 -0
  17. package/dist/gallery/frame/chunks/dagre-VZM6K2ZE-7tyg4yt2.js +476 -0
  18. package/dist/gallery/frame/chunks/diagram-7IWD3JNH-y4eng9sc.js +526 -0
  19. package/dist/gallery/frame/chunks/diagram-B4RE2ZJO-rn3p7j5h.js +673 -0
  20. package/dist/gallery/frame/chunks/diagram-LBJQPF4R-w4a2cm9q.js +255 -0
  21. package/dist/gallery/frame/chunks/diagram-Q27KOJAE-aqc2v7wy.js +575 -0
  22. package/dist/gallery/frame/chunks/diagram-UB23O5K3-xncy8nyd.js +355 -0
  23. package/dist/gallery/frame/chunks/ebnfDiagram-BXEA7PRR-acwgxz16.js +175 -0
  24. package/dist/gallery/frame/chunks/erDiagram-JOGREHBK-mzp5nswt.js +1332 -0
  25. package/dist/gallery/frame/chunks/eventmodeling-45OFAUF4-sg07qr0c.js +10 -0
  26. package/dist/gallery/frame/chunks/flowDiagram-UKHOOZJN-2e5ygs44.js +29 -0
  27. package/dist/gallery/frame/chunks/ganttDiagram-PKOTCBZU-p2hhh7hr.js +2620 -0
  28. package/dist/gallery/frame/chunks/gitGraph-TEB2WS4Q-j6kw0naa.js +10 -0
  29. package/dist/gallery/frame/chunks/gitGraphDiagram-DS77QQ5N-4z9z8wjm.js +1347 -0
  30. package/dist/gallery/frame/chunks/info-DKCQHKI2-mpt80jd3.js +10 -0
  31. package/dist/gallery/frame/chunks/infoDiagram-6WML65LV-5rqm3mgg.js +65 -0
  32. package/dist/gallery/frame/chunks/ishikawaDiagram-WSZJBQD7-b51z96jy.js +975 -0
  33. package/dist/gallery/frame/chunks/journeyDiagram-NVQOT4AX-9jbfp0pk.js +1272 -0
  34. package/dist/gallery/frame/chunks/kanban-definition-27J2QSJJ-4x0vx4se.js +1116 -0
  35. package/dist/gallery/frame/chunks/katex-xfgk95tv.js +14034 -0
  36. package/dist/gallery/frame/chunks/markdown-1s5vwkf2.js +9 -0
  37. package/dist/gallery/frame/chunks/markdown-2h6bwsms.js +3239 -0
  38. package/dist/gallery/frame/chunks/markdown-2x113yh8.js +107 -0
  39. package/dist/gallery/frame/chunks/markdown-30b7rwmp.js +1943 -0
  40. package/dist/gallery/frame/chunks/markdown-356bfj4g.js +2031 -0
  41. package/dist/gallery/frame/chunks/markdown-44n9ea69.js +2406 -0
  42. package/dist/gallery/frame/chunks/markdown-56enrf2r.js +39 -0
  43. package/dist/gallery/frame/chunks/markdown-5avymm8t.js +725 -0
  44. package/dist/gallery/frame/chunks/markdown-6r4svars.js +33 -0
  45. package/dist/gallery/frame/chunks/markdown-6zz8efx2.js +24 -0
  46. package/dist/gallery/frame/chunks/markdown-7jp6prnb.js +19 -0
  47. package/dist/gallery/frame/chunks/markdown-809k7q41.js +55 -0
  48. package/dist/gallery/frame/chunks/markdown-82xmzhzd.js +1076 -0
  49. package/dist/gallery/frame/chunks/markdown-92n37gd4.js +7627 -0
  50. package/dist/gallery/frame/chunks/markdown-ag2sssf8.js +36 -0
  51. package/dist/gallery/frame/chunks/markdown-b4s7ntq2.js +19 -0
  52. package/dist/gallery/frame/chunks/markdown-c9k0fvp1.js +100 -0
  53. package/dist/gallery/frame/chunks/markdown-ceefymn8.js +125 -0
  54. package/dist/gallery/frame/chunks/markdown-d1wfbs70.js +243 -0
  55. package/dist/gallery/frame/chunks/markdown-dy5sgjhc.js +11022 -0
  56. package/dist/gallery/frame/chunks/markdown-dz3z5w30.js +30868 -0
  57. package/dist/gallery/frame/chunks/markdown-eg6ngz7y.js +30340 -0
  58. package/dist/gallery/frame/chunks/markdown-ff5wvb43.js +1149 -0
  59. package/dist/gallery/frame/chunks/markdown-ffg06nfz.js +86 -0
  60. package/dist/gallery/frame/chunks/markdown-fvfncadf.js +472 -0
  61. package/dist/gallery/frame/chunks/markdown-gvyszqpv.js +19 -0
  62. package/dist/gallery/frame/chunks/markdown-gx1p0ew0.js +88 -0
  63. package/dist/gallery/frame/chunks/markdown-gxye5frz.js +65 -0
  64. package/dist/gallery/frame/chunks/markdown-h7pzv34e.js +105 -0
  65. package/dist/gallery/frame/chunks/markdown-hab789t9.js +47 -0
  66. package/dist/gallery/frame/chunks/markdown-hjp6sj8t.js +125 -0
  67. package/dist/gallery/frame/chunks/markdown-jka64qgp.js +1993 -0
  68. package/dist/gallery/frame/chunks/markdown-k8xkn8mw.js +56 -0
  69. package/dist/gallery/frame/chunks/markdown-m7frq8x8.js +112 -0
  70. package/dist/gallery/frame/chunks/markdown-p740v4qm.js +36 -0
  71. package/dist/gallery/frame/chunks/markdown-pxfeh231.js +57 -0
  72. package/dist/gallery/frame/chunks/markdown-pzgd8z3s.js +87 -0
  73. package/dist/gallery/frame/chunks/markdown-qx3cngz2.js +1673 -0
  74. package/dist/gallery/frame/chunks/markdown-rawhfvvc.js +85 -0
  75. package/dist/gallery/frame/chunks/markdown-rd8w0ng9.js +49 -0
  76. package/dist/gallery/frame/chunks/markdown-rm2yxfjj.js +2773 -0
  77. package/dist/gallery/frame/chunks/markdown-s1jatrnk.js +993 -0
  78. package/dist/gallery/frame/chunks/markdown-sgfg5vvq.js +59 -0
  79. package/dist/gallery/frame/chunks/markdown-t4ethv9d.js +409 -0
  80. package/dist/gallery/frame/chunks/markdown-tnmabqvz.js +36 -0
  81. package/dist/gallery/frame/chunks/markdown-tvdpppw8.js +5292 -0
  82. package/dist/gallery/frame/chunks/markdown-v0x27twr.js +22 -0
  83. package/dist/gallery/frame/chunks/markdown-v14td68x.js +36 -0
  84. package/dist/gallery/frame/chunks/markdown-w6sgd54z.js +36 -0
  85. package/dist/gallery/frame/chunks/markdown-xw8dsk8b.js +2125 -0
  86. package/dist/gallery/frame/chunks/markdown-y18mve73.js +85 -0
  87. package/dist/gallery/frame/chunks/markdown-yengsms5.js +427 -0
  88. package/dist/gallery/frame/chunks/markdown-z1wc0v0d.js +1826 -0
  89. package/dist/gallery/frame/chunks/markdown-zazx9h4n.js +329 -0
  90. package/dist/gallery/frame/chunks/mermaid-de7p4v0x.js +30 -0
  91. package/dist/gallery/frame/chunks/mindmap-definition-FAOFIHXS-ra44cbem.js +1216 -0
  92. package/dist/gallery/frame/chunks/packet-7NZHBO7P-xppm5913.js +10 -0
  93. package/dist/gallery/frame/chunks/pegDiagram-VL7TDLO6-a2a4wg03.js +163 -0
  94. package/dist/gallery/frame/chunks/pie-RZYD4A2V-hnbxk152.js +10 -0
  95. package/dist/gallery/frame/chunks/pieDiagram-7S7Q4E2Y-f1vxjtmx.js +311 -0
  96. package/dist/gallery/frame/chunks/quadrantDiagram-CIZ2JOQS-ywafa6kh.js +1390 -0
  97. package/dist/gallery/frame/chunks/radar-I7S5WNFK-ewqd27se.js +10 -0
  98. package/dist/gallery/frame/chunks/railroad-3IZDKUUU-5hy4bdx3.js +10 -0
  99. package/dist/gallery/frame/chunks/railroad-abnf-AHOZXSZD-bh5sxz0d.js +10 -0
  100. package/dist/gallery/frame/chunks/railroad-ebnf-EBAXGLYW-6b9c3zeh.js +10 -0
  101. package/dist/gallery/frame/chunks/railroad-peg-LSFZ7HO6-avc8v39s.js +10 -0
  102. package/dist/gallery/frame/chunks/railroadDiagram-AXF67PYL-qc61wax4.js +131 -0
  103. package/dist/gallery/frame/chunks/requirementDiagram-LRYGKXZP-9bs4786c.js +1295 -0
  104. package/dist/gallery/frame/chunks/sankeyDiagram-W5VNT64P-awt1em8b.js +1339 -0
  105. package/dist/gallery/frame/chunks/sequenceDiagram-SI44F4Z6-qaf9mz3t.js +4324 -0
  106. package/dist/gallery/frame/chunks/sizeCapture-X5ZJPWSS-9fq685xd.js +64 -0
  107. package/dist/gallery/frame/chunks/stateDiagram-OKZ733FA-vx7a7hh0.js +456 -0
  108. package/dist/gallery/frame/chunks/stateDiagram-v2-UEYNNEHI-x4m6ws5t.js +46 -0
  109. package/dist/gallery/frame/chunks/swimlanes-SLNWSIFB-e4mxm1gh.js +8287 -0
  110. package/dist/gallery/frame/chunks/swimlanesDiagram-ULZ7WXOC-0h93e2qq.js +42 -0
  111. package/dist/gallery/frame/chunks/timeline-definition-Z64GVDOM-wp0bhbzg.js +1549 -0
  112. package/dist/gallery/frame/chunks/treeView-QDETBFTQ-hcx7n0vt.js +10 -0
  113. package/dist/gallery/frame/chunks/treemap-6X3UGDF4-av02skdw.js +10 -0
  114. package/dist/gallery/frame/chunks/vennDiagram-T6HMQDX7-pmvk1p7n.js +2566 -0
  115. package/dist/gallery/frame/chunks/wardley-OPB4EBWU-njsp6e40.js +10 -0
  116. package/dist/gallery/frame/chunks/wardleyDiagram-T6FBY63Y-eggmnv4z.js +979 -0
  117. package/dist/gallery/frame/chunks/xychartDiagram-ELKLHX3M-q40tnpe5.js +1954 -0
  118. package/dist/gallery/frame/frame.css +183 -0
  119. package/dist/gallery/frame/runtime/chart.js +42744 -0
  120. package/dist/gallery/frame/runtime/html.js +14 -0
  121. package/dist/gallery/frame/runtime/markdown.js +1403 -0
  122. package/dist/gallery/frame/runtime/mermaid.js +32 -0
  123. package/dist/gallery/frame/runtime/svg.js +14 -0
  124. package/dist/gallery/frame/runtime/tsx.js +52 -0
  125. package/dist/gallery/index.html +104 -0
  126. package/docs/reference/cli.md +163 -0
  127. package/docs/reference/export.md +106 -0
  128. package/docs/reference/html.md +215 -0
  129. package/docs/reference/http.md +85 -0
  130. package/docs/reference/mcp.md +78 -0
  131. package/docs/reference/security.md +119 -0
  132. package/docs/reference/storage.md +93 -0
  133. package/docs/reference/tsx.md +101 -0
  134. package/docs/reference/validation.md +212 -0
  135. package/package.json +89 -0
  136. package/scripts/build-gallery.ts +127 -0
  137. package/scripts/launch-netns.sh +67 -0
  138. package/skills/facet/SKILL.md +100 -0
  139. package/src/cli/client.ts +311 -0
  140. package/src/cli/commands/create.ts +49 -0
  141. package/src/cli/commands/doctor.ts +249 -0
  142. package/src/cli/commands/export.ts +179 -0
  143. package/src/cli/commands/instantiate.ts +35 -0
  144. package/src/cli/commands/list.ts +49 -0
  145. package/src/cli/commands/open.ts +75 -0
  146. package/src/cli/commands/pin.ts +39 -0
  147. package/src/cli/commands/promote.ts +49 -0
  148. package/src/cli/commands/publish.ts +122 -0
  149. package/src/cli/commands/read-back.ts +56 -0
  150. package/src/cli/commands/status.ts +114 -0
  151. package/src/cli/commands/watch.ts +146 -0
  152. package/src/cli/main.ts +522 -0
  153. package/src/cli/output.ts +106 -0
  154. package/src/cli/parser.ts +376 -0
  155. package/src/cli/presenter.ts +212 -0
  156. package/src/cli/service-metadata.ts +134 -0
  157. package/src/cli/spawn-service.ts +326 -0
  158. package/src/css.d.ts +4 -0
  159. package/src/gallery-web/app.ts +1581 -0
  160. package/src/gallery-web/export-menu.ts +121 -0
  161. package/src/gallery-web/export.ts +112 -0
  162. package/src/gallery-web/favicon.ts +54 -0
  163. package/src/gallery-web/frame/entries/chart.ts +6 -0
  164. package/src/gallery-web/frame/entries/html.ts +6 -0
  165. package/src/gallery-web/frame/entries/markdown.ts +6 -0
  166. package/src/gallery-web/frame/entries/mermaid.ts +6 -0
  167. package/src/gallery-web/frame/entries/svg.ts +6 -0
  168. package/src/gallery-web/frame/entries/tsx.ts +6 -0
  169. package/src/gallery-web/frame/frame-payload.ts +91 -0
  170. package/src/gallery-web/frame/renderer-validation.ts +13 -0
  171. package/src/gallery-web/frame/renderers/chart.ts +182 -0
  172. package/src/gallery-web/frame/renderers/dompurify-shim.ts +112 -0
  173. package/src/gallery-web/frame/renderers/html.ts +48 -0
  174. package/src/gallery-web/frame/renderers/markdown.ts +81 -0
  175. package/src/gallery-web/frame/renderers/mermaid.ts +120 -0
  176. package/src/gallery-web/frame/renderers/registry.ts +260 -0
  177. package/src/gallery-web/frame/renderers/svg.ts +393 -0
  178. package/src/gallery-web/frame/renderers/tsx.ts +61 -0
  179. package/src/gallery-web/frame/runtime.ts +501 -0
  180. package/src/gallery-web/frame/styles/artifact.css +8424 -0
  181. package/src/gallery-web/frame/styles/frame.css +183 -0
  182. package/src/gallery-web/frame/styles/html-source.css +23 -0
  183. package/src/gallery-web/frame/view-box.ts +33 -0
  184. package/src/gallery-web/frame-html.ts +72 -0
  185. package/src/gallery-web/index.html +104 -0
  186. package/src/gallery-web/session.ts +107 -0
  187. package/src/gallery-web/sse-client.ts +212 -0
  188. package/src/gallery-web/styles/app.css +420 -0
  189. package/src/gallery-web/styles/tokens.css +112 -0
  190. package/src/gallery-web/styles/verdict.css +186 -0
  191. package/src/gallery-web/swap.ts +64 -0
  192. package/src/gallery-web/theme.ts +40 -0
  193. package/src/gallery-web/view-state.ts +93 -0
  194. package/src/harness-adapters/claude-code/README.md +10 -0
  195. package/src/harness-adapters/claude-code/facet.sh +4 -0
  196. package/src/harness-adapters/codex/README.md +10 -0
  197. package/src/harness-adapters/codex/facet.sh +4 -0
  198. package/src/harness-adapters/mcp/README.md +13 -0
  199. package/src/harness-adapters/mcp/cli-bridge.ts +216 -0
  200. package/src/harness-adapters/mcp/main.ts +15 -0
  201. package/src/harness-adapters/mcp/server.ts +164 -0
  202. package/src/harness-adapters/mcp/tool-schemas.ts +53 -0
  203. package/src/harness-adapters/opencode/README.md +10 -0
  204. package/src/harness-adapters/opencode/facet.sh +4 -0
  205. package/src/runtime/compiled-entrypoints.ts +69 -0
  206. package/src/service/dispatcher.ts +717 -0
  207. package/src/service/export.ts +218 -0
  208. package/src/service/http-utils.ts +55 -0
  209. package/src/service/lexical/expectations.ts +210 -0
  210. package/src/service/lifecycle/idle-controller.ts +125 -0
  211. package/src/service/lifecycle/orphan-cleanup.ts +128 -0
  212. package/src/service/lifecycle/process-lock.ts +235 -0
  213. package/src/service/main.ts +136 -0
  214. package/src/service/process.ts +240 -0
  215. package/src/service/router-guards.ts +239 -0
  216. package/src/service/router.ts +627 -0
  217. package/src/service/security/auth.ts +168 -0
  218. package/src/service/security/host-origin.ts +138 -0
  219. package/src/service/security/http-guards.ts +13 -0
  220. package/src/service/security/leases.ts +182 -0
  221. package/src/service/security/token-store.ts +138 -0
  222. package/src/service/server.ts +356 -0
  223. package/src/service/store/database.ts +61 -0
  224. package/src/service/store/evidence-retention.ts +234 -0
  225. package/src/service/store/migrations.ts +167 -0
  226. package/src/service/store/repository-lifecycle.ts +121 -0
  227. package/src/service/store/repository.ts +732 -0
  228. package/src/service/store/schema.ts +218 -0
  229. package/src/service/stored-verdict.ts +97 -0
  230. package/src/service/stream.ts +301 -0
  231. package/src/service/verdict-enrichment.ts +45 -0
  232. package/src/shared/build/frame-bundle-plugins.ts +61 -0
  233. package/src/shared/build-mode.ts +28 -0
  234. package/src/shared/config/evidence-read.ts +98 -0
  235. package/src/shared/config/limits.ts +56 -0
  236. package/src/shared/config/paths.ts +96 -0
  237. package/src/shared/contracts/artifact-types.ts +2 -0
  238. package/src/shared/contracts/artifact.ts +98 -0
  239. package/src/shared/contracts/commands/_shared.ts +59 -0
  240. package/src/shared/contracts/commands/guards.ts +86 -0
  241. package/src/shared/contracts/commands/index.ts +204 -0
  242. package/src/shared/contracts/commands/names.ts +35 -0
  243. package/src/shared/contracts/commands/requests.ts +149 -0
  244. package/src/shared/contracts/commands/results.ts +200 -0
  245. package/src/shared/contracts/envelope.ts +140 -0
  246. package/src/shared/contracts/events.ts +41 -0
  247. package/src/shared/contracts/observed-counts.ts +19 -0
  248. package/src/shared/contracts/renderers.ts +6 -0
  249. package/src/shared/contracts/validation.ts +296 -0
  250. package/src/shared/errors/facet-error.ts +127 -0
  251. package/src/shared/errors/store-error.ts +68 -0
  252. package/src/shared/evidence-image.ts +37 -0
  253. package/src/shared/export.ts +31 -0
  254. package/src/shared/html/policy.ts +108 -0
  255. package/src/shared/html/style-vocabulary.ts +352 -0
  256. package/src/shared/logging/logger.ts +108 -0
  257. package/src/shared/logging/redact.ts +49 -0
  258. package/src/shared/security/frozen-csp.ts +13 -0
  259. package/src/shared/storage-version.ts +2 -0
  260. package/src/shared/tsx/execution.ts +29 -0
  261. package/src/shared/tsx/import-policy.ts +94 -0
  262. package/src/shared/util/dir-permissions.ts +94 -0
  263. package/src/shared/util/mermaid-nodes.ts +230 -0
  264. package/src/shared/util/process.ts +67 -0
  265. package/src/shared/util/time.ts +21 -0
  266. package/src/shared/version.ts +3 -0
  267. package/src/validation/sandbox/limits.ts +41 -0
  268. package/src/validation/sandbox/netns.ts +177 -0
  269. package/src/validation/tier0/chart.ts +177 -0
  270. package/src/validation/tier0/dom-shim.ts +54 -0
  271. package/src/validation/tier0/html.ts +408 -0
  272. package/src/validation/tier0/markdown.ts +285 -0
  273. package/src/validation/tier0/mermaid.ts +98 -0
  274. package/src/validation/tier0/runner.ts +504 -0
  275. package/src/validation/tier0/svg.ts +321 -0
  276. package/src/validation/tier0/tsx/allowlist-resolver.ts +77 -0
  277. package/src/validation/tier0/tsx/ast-policy-capabilities.ts +238 -0
  278. package/src/validation/tier0/tsx/ast-policy-shared.ts +71 -0
  279. package/src/validation/tier0/tsx/ast-policy.ts +181 -0
  280. package/src/validation/tier0/tsx/compiler.ts +156 -0
  281. package/src/validation/tier0/worker-dispatch.ts +211 -0
  282. package/src/validation/tier0/worker-entry.ts +96 -0
  283. package/src/validation/tier0/worker-input.ts +75 -0
  284. package/src/validation/tier1/browser-process.ts +147 -0
  285. package/src/validation/tier1/cdp-pipe.ts +281 -0
  286. package/src/validation/tier1/entries/chart.ts +5 -0
  287. package/src/validation/tier1/entries/html.ts +6 -0
  288. package/src/validation/tier1/entries/markdown.ts +5 -0
  289. package/src/validation/tier1/entries/mermaid.ts +5 -0
  290. package/src/validation/tier1/entries/svg.ts +5 -0
  291. package/src/validation/tier1/entries/tsx.ts +5 -0
  292. package/src/validation/tier1/frame-target.ts +162 -0
  293. package/src/validation/tier1/harness-entry.ts +261 -0
  294. package/src/validation/tier1/harness.ts +215 -0
  295. package/src/validation/tier1/isolated-probe.ts +94 -0
  296. package/src/validation/tier1/launcher.ts +177 -0
  297. package/src/validation/tier1/limits.ts +80 -0
  298. package/src/validation/tier1/nonce.ts +17 -0
  299. package/src/validation/tier1/protocol-probe.ts +519 -0
  300. package/src/validation/tier1/runner.ts +1122 -0
  301. package/src/validation/tier1/verdict.ts +246 -0
  302. package/src/validation/tier1/webp.ts +69 -0
  303. package/templates/README.md +88 -0
  304. package/templates/bar-compare.vl.json +63 -0
  305. package/templates/capacity-report.tsx +102 -0
  306. package/templates/decision-record.md +24 -0
  307. package/templates/deployment-state.mmd +40 -0
  308. package/templates/exemplar.md +91 -0
  309. package/templates/facet-story.tsx +799 -0
  310. package/templates/fleet-dashboard.html +141 -0
  311. package/templates/html-release-ledger.html +91 -0
  312. package/templates/html-status-report.html +114 -0
  313. package/templates/incident-console.tsx +147 -0
  314. package/templates/legion-boundaries.mmd +23 -0
  315. package/templates/legion-flow.mmd +15 -0
  316. package/templates/legion-sequence.mmd +14 -0
  317. package/templates/legion-state.mmd +7 -0
  318. package/templates/metric-card.svg +29 -0
  319. package/templates/observability-map.svg +101 -0
  320. package/templates/pipeline-audit.md +108 -0
  321. package/templates/release-metrics.vl.json +98 -0
  322. package/templates/service-topology.mmd +47 -0
  323. package/templates/status-report.md +32 -0
  324. package/templates/system-map.svg +53 -0
  325. package/templates/timeseries.vl.json +71 -0
  326. package/templates/tsx-interactive-counter.tsx +19 -0
  327. package/templates/tsx-status-report.tsx +31 -0
@@ -0,0 +1,85 @@
1
+ import {
2
+ AbstractMermaidTokenBuilder,
3
+ AbstractMermaidValueConverter,
4
+ EmptyFileSystem,
5
+ MermaidGeneratedSharedModule,
6
+ RailroadPegGrammarGeneratedModule,
7
+ __name,
8
+ createDefaultCoreModule,
9
+ createDefaultSharedCoreModule,
10
+ inject
11
+ } from "./markdown-dz3z5w30.js";
12
+
13
+ // node_modules/@mermaid-js/parser/dist/chunks/mermaid-parser.core/chunk-JG7HCLWE.mjs
14
+ var RailroadPegTokenBuilder = class extends AbstractMermaidTokenBuilder {
15
+ static {
16
+ __name(this, "RailroadPegTokenBuilder");
17
+ }
18
+ constructor() {
19
+ super(["railroad-peg-beta"]);
20
+ }
21
+ };
22
+ var decodeEscapedString = /* @__PURE__ */ __name((input) => {
23
+ const content = input.slice(1, -1);
24
+ let value = "";
25
+ for (let index = 0;index < content.length; index++) {
26
+ const character = content[index];
27
+ if (character === "\\" && index + 1 < content.length) {
28
+ index++;
29
+ const escaped = content[index];
30
+ switch (escaped) {
31
+ case "n":
32
+ value += `
33
+ `;
34
+ break;
35
+ case "r":
36
+ value += "\r";
37
+ break;
38
+ case "t":
39
+ value += "\t";
40
+ break;
41
+ default:
42
+ value += escaped;
43
+ }
44
+ continue;
45
+ }
46
+ value += character;
47
+ }
48
+ return value;
49
+ }, "decodeEscapedString");
50
+ var RailroadPegValueConverter = class extends AbstractMermaidValueConverter {
51
+ static {
52
+ __name(this, "RailroadPegValueConverter");
53
+ }
54
+ runConverter(rule, input, cstNode) {
55
+ const value = super.runConverter(rule, input, cstNode);
56
+ if (rule.name === "TITLE" && typeof value === "string") {
57
+ const trimmedValue = value.trim();
58
+ if (trimmedValue.startsWith('"') && trimmedValue.endsWith('"') || trimmedValue.startsWith("'") && trimmedValue.endsWith("'")) {
59
+ return decodeEscapedString(trimmedValue);
60
+ }
61
+ }
62
+ return value;
63
+ }
64
+ runCustomConverter(rule, input, _cstNode) {
65
+ if (rule.name === "PEG_STRING") {
66
+ return decodeEscapedString(input);
67
+ }
68
+ return;
69
+ }
70
+ };
71
+ var RailroadPegModule = {
72
+ parser: {
73
+ TokenBuilder: /* @__PURE__ */ __name(() => new RailroadPegTokenBuilder, "TokenBuilder"),
74
+ ValueConverter: /* @__PURE__ */ __name(() => new RailroadPegValueConverter, "ValueConverter")
75
+ }
76
+ };
77
+ function createRailroadPegServices(context = EmptyFileSystem) {
78
+ const shared = inject(createDefaultSharedCoreModule(context), MermaidGeneratedSharedModule);
79
+ const RailroadPeg = inject(createDefaultCoreModule({ shared }), RailroadPegGrammarGeneratedModule, RailroadPegModule);
80
+ shared.ServiceRegistry.register(RailroadPeg);
81
+ return { shared, RailroadPeg };
82
+ }
83
+ __name(createRailroadPegServices, "createRailroadPegServices");
84
+
85
+ export { RailroadPegModule, createRailroadPegServices };
@@ -0,0 +1,427 @@
1
+ import {
2
+ getConfig,
3
+ sanitizeText
4
+ } from "./markdown-92n37gd4.js";
5
+ import {
6
+ log
7
+ } from "./markdown-xw8dsk8b.js";
8
+ import {
9
+ __name
10
+ } from "./markdown-1s5vwkf2.js";
11
+ // node_modules/@iconify/utils/lib/icon/name.js
12
+ var stringToIcon = (value, validate, allowSimpleName, provider = "") => {
13
+ const colonSeparated = value.split(":");
14
+ if (value.slice(0, 1) === "@") {
15
+ if (colonSeparated.length < 2 || colonSeparated.length > 3)
16
+ return null;
17
+ provider = colonSeparated.shift().slice(1);
18
+ }
19
+ if (colonSeparated.length > 3 || !colonSeparated.length)
20
+ return null;
21
+ if (colonSeparated.length > 1) {
22
+ const name2 = colonSeparated.pop();
23
+ const prefix = colonSeparated.pop();
24
+ const result = {
25
+ provider: colonSeparated.length > 0 ? colonSeparated[0] : provider,
26
+ prefix,
27
+ name: name2
28
+ };
29
+ return validate && !validateIconName(result) ? null : result;
30
+ }
31
+ const name = colonSeparated[0];
32
+ const dashSeparated = name.split("-");
33
+ if (dashSeparated.length > 1) {
34
+ const result = {
35
+ provider,
36
+ prefix: dashSeparated.shift(),
37
+ name: dashSeparated.join("-")
38
+ };
39
+ return validate && !validateIconName(result) ? null : result;
40
+ }
41
+ if (allowSimpleName && provider === "") {
42
+ const result = {
43
+ provider,
44
+ prefix: "",
45
+ name
46
+ };
47
+ return validate && !validateIconName(result, allowSimpleName) ? null : result;
48
+ }
49
+ return null;
50
+ };
51
+ var validateIconName = (icon, allowSimpleName) => {
52
+ if (!icon)
53
+ return false;
54
+ return !!((allowSimpleName && icon.prefix === "" || !!icon.prefix) && !!icon.name);
55
+ };
56
+ // node_modules/@iconify/utils/lib/icon/defaults.js
57
+ var defaultIconDimensions = Object.freeze({
58
+ left: 0,
59
+ top: 0,
60
+ width: 16,
61
+ height: 16
62
+ });
63
+ var defaultIconTransformations = Object.freeze({
64
+ rotate: 0,
65
+ vFlip: false,
66
+ hFlip: false
67
+ });
68
+ var defaultIconProps = Object.freeze({
69
+ ...defaultIconDimensions,
70
+ ...defaultIconTransformations
71
+ });
72
+ var defaultExtendedIconProps = Object.freeze({
73
+ ...defaultIconProps,
74
+ body: "",
75
+ hidden: false
76
+ });
77
+
78
+ // node_modules/@iconify/utils/lib/icon/transformations.js
79
+ function mergeIconTransformations(obj1, obj2) {
80
+ const result = {};
81
+ if (!obj1.hFlip !== !obj2.hFlip)
82
+ result.hFlip = true;
83
+ if (!obj1.vFlip !== !obj2.vFlip)
84
+ result.vFlip = true;
85
+ const rotate = ((obj1.rotate || 0) + (obj2.rotate || 0)) % 4;
86
+ if (rotate)
87
+ result.rotate = rotate;
88
+ return result;
89
+ }
90
+
91
+ // node_modules/@iconify/utils/lib/icon/merge.js
92
+ function mergeIconData(parent, child) {
93
+ const result = mergeIconTransformations(parent, child);
94
+ for (const key in defaultExtendedIconProps)
95
+ if (key in defaultIconTransformations) {
96
+ if (key in parent && !(key in result))
97
+ result[key] = defaultIconTransformations[key];
98
+ } else if (key in child)
99
+ result[key] = child[key];
100
+ else if (key in parent)
101
+ result[key] = parent[key];
102
+ return result;
103
+ }
104
+
105
+ // node_modules/@iconify/utils/lib/icon-set/tree.js
106
+ function getIconsTree(data, names) {
107
+ const icons = data.icons;
108
+ const aliases = data.aliases || Object.create(null);
109
+ const resolved = Object.create(null);
110
+ function resolve(name) {
111
+ if (icons[name])
112
+ return resolved[name] = [];
113
+ if (!(name in resolved)) {
114
+ resolved[name] = null;
115
+ const parent = aliases[name] && aliases[name].parent;
116
+ const value = parent && resolve(parent);
117
+ if (value)
118
+ resolved[name] = [parent].concat(value);
119
+ }
120
+ return resolved[name];
121
+ }
122
+ (names || Object.keys(icons).concat(Object.keys(aliases))).forEach(resolve);
123
+ return resolved;
124
+ }
125
+
126
+ // node_modules/@iconify/utils/lib/icon-set/get-icon.js
127
+ function internalGetIconData(data, name, tree) {
128
+ const icons = data.icons;
129
+ const aliases = data.aliases || Object.create(null);
130
+ let currentProps = {};
131
+ function parse(name2) {
132
+ currentProps = mergeIconData(icons[name2] || aliases[name2], currentProps);
133
+ }
134
+ parse(name);
135
+ tree.forEach(parse);
136
+ return mergeIconData(data, currentProps);
137
+ }
138
+ function getIconData(data, name) {
139
+ if (data.icons[name])
140
+ return internalGetIconData(data, name, []);
141
+ const tree = getIconsTree(data, [name])[name];
142
+ return tree ? internalGetIconData(data, name, tree) : null;
143
+ }
144
+ // node_modules/@iconify/utils/lib/customisations/defaults.js
145
+ var defaultIconSizeCustomisations = Object.freeze({
146
+ width: null,
147
+ height: null
148
+ });
149
+ var defaultIconCustomisations = Object.freeze({
150
+ ...defaultIconSizeCustomisations,
151
+ ...defaultIconTransformations
152
+ });
153
+
154
+ // node_modules/@iconify/utils/lib/svg/size.js
155
+ var unitsSplit = /(-?[0-9.]*[0-9]+[0-9.]*)/g;
156
+ var unitsTest = /^-?[0-9.]*[0-9]+[0-9.]*$/g;
157
+ function calculateSize(size, ratio, precision) {
158
+ if (ratio === 1)
159
+ return size;
160
+ precision = precision || 100;
161
+ if (typeof size === "number")
162
+ return Math.ceil(size * ratio * precision) / precision;
163
+ if (typeof size !== "string")
164
+ return size;
165
+ const oldParts = size.split(unitsSplit);
166
+ if (oldParts === null || !oldParts.length)
167
+ return size;
168
+ const newParts = [];
169
+ let code = oldParts.shift();
170
+ let isNumber = unitsTest.test(code);
171
+ while (true) {
172
+ if (isNumber) {
173
+ const num = parseFloat(code);
174
+ if (isNaN(num))
175
+ newParts.push(code);
176
+ else
177
+ newParts.push(Math.ceil(num * ratio * precision) / precision);
178
+ } else
179
+ newParts.push(code);
180
+ code = oldParts.shift();
181
+ if (code === undefined)
182
+ return newParts.join("");
183
+ isNumber = !isNumber;
184
+ }
185
+ }
186
+
187
+ // node_modules/@iconify/utils/lib/svg/defs.js
188
+ function splitSVGDefs(content, tag = "defs") {
189
+ let defs = "";
190
+ const index = content.indexOf("<" + tag);
191
+ while (index >= 0) {
192
+ const start = content.indexOf(">", index);
193
+ const end = content.indexOf("</" + tag);
194
+ if (start === -1 || end === -1)
195
+ break;
196
+ const endEnd = content.indexOf(">", end);
197
+ if (endEnd === -1)
198
+ break;
199
+ defs += content.slice(start + 1, end).trim();
200
+ content = content.slice(0, index).trim() + content.slice(endEnd + 1);
201
+ }
202
+ return {
203
+ defs,
204
+ content
205
+ };
206
+ }
207
+ function mergeDefsAndContent(defs, content) {
208
+ return defs ? "<defs>" + defs + "</defs>" + content : content;
209
+ }
210
+ function wrapSVGContent(body, start, end) {
211
+ const split = splitSVGDefs(body);
212
+ return mergeDefsAndContent(split.defs, start + split.content + end);
213
+ }
214
+
215
+ // node_modules/@iconify/utils/lib/svg/build.js
216
+ var isUnsetKeyword = (value) => value === "unset" || value === "undefined" || value === "none";
217
+ function iconToSVG(icon, customisations) {
218
+ const fullIcon = {
219
+ ...defaultIconProps,
220
+ ...icon
221
+ };
222
+ const fullCustomisations = {
223
+ ...defaultIconCustomisations,
224
+ ...customisations
225
+ };
226
+ const box = {
227
+ left: fullIcon.left,
228
+ top: fullIcon.top,
229
+ width: fullIcon.width,
230
+ height: fullIcon.height
231
+ };
232
+ let body = fullIcon.body;
233
+ [fullIcon, fullCustomisations].forEach((props) => {
234
+ const transformations = [];
235
+ const hFlip = props.hFlip;
236
+ const vFlip = props.vFlip;
237
+ let rotation = props.rotate;
238
+ if (hFlip)
239
+ if (vFlip)
240
+ rotation += 2;
241
+ else {
242
+ transformations.push("translate(" + (box.width + box.left).toString() + " " + (0 - box.top).toString() + ")");
243
+ transformations.push("scale(-1 1)");
244
+ box.top = box.left = 0;
245
+ }
246
+ else if (vFlip) {
247
+ transformations.push("translate(" + (0 - box.left).toString() + " " + (box.height + box.top).toString() + ")");
248
+ transformations.push("scale(1 -1)");
249
+ box.top = box.left = 0;
250
+ }
251
+ let tempValue;
252
+ if (rotation < 0)
253
+ rotation -= Math.floor(rotation / 4) * 4;
254
+ rotation = rotation % 4;
255
+ switch (rotation) {
256
+ case 1:
257
+ tempValue = box.height / 2 + box.top;
258
+ transformations.unshift("rotate(90 " + tempValue.toString() + " " + tempValue.toString() + ")");
259
+ break;
260
+ case 2:
261
+ transformations.unshift("rotate(180 " + (box.width / 2 + box.left).toString() + " " + (box.height / 2 + box.top).toString() + ")");
262
+ break;
263
+ case 3:
264
+ tempValue = box.width / 2 + box.left;
265
+ transformations.unshift("rotate(-90 " + tempValue.toString() + " " + tempValue.toString() + ")");
266
+ break;
267
+ }
268
+ if (rotation % 2 === 1) {
269
+ if (box.left !== box.top) {
270
+ tempValue = box.left;
271
+ box.left = box.top;
272
+ box.top = tempValue;
273
+ }
274
+ if (box.width !== box.height) {
275
+ tempValue = box.width;
276
+ box.width = box.height;
277
+ box.height = tempValue;
278
+ }
279
+ }
280
+ if (transformations.length)
281
+ body = wrapSVGContent(body, '<g transform="' + transformations.join(" ") + '">', "</g>");
282
+ });
283
+ const customisationsWidth = fullCustomisations.width;
284
+ const customisationsHeight = fullCustomisations.height;
285
+ const boxWidth = box.width;
286
+ const boxHeight = box.height;
287
+ let width;
288
+ let height;
289
+ if (customisationsWidth === null) {
290
+ height = customisationsHeight === null ? "1em" : customisationsHeight === "auto" ? boxHeight : customisationsHeight;
291
+ width = calculateSize(height, boxWidth / boxHeight);
292
+ } else {
293
+ width = customisationsWidth === "auto" ? boxWidth : customisationsWidth;
294
+ height = customisationsHeight === null ? calculateSize(width, boxHeight / boxWidth) : customisationsHeight === "auto" ? boxHeight : customisationsHeight;
295
+ }
296
+ const attributes = {};
297
+ const setAttr = (prop, value) => {
298
+ if (!isUnsetKeyword(value))
299
+ attributes[prop] = value.toString();
300
+ };
301
+ setAttr("width", width);
302
+ setAttr("height", height);
303
+ const viewBox = [
304
+ box.left,
305
+ box.top,
306
+ boxWidth,
307
+ boxHeight
308
+ ];
309
+ attributes.viewBox = viewBox.join(" ");
310
+ return {
311
+ attributes,
312
+ viewBox,
313
+ body
314
+ };
315
+ }
316
+
317
+ // node_modules/@iconify/utils/lib/svg/id.js
318
+ var regex = /\sid="(\S+)"/g;
319
+ var counters = /* @__PURE__ */ new Map;
320
+ function nextID(id) {
321
+ id = id.replace(/[0-9]+$/, "") || "a";
322
+ const count = counters.get(id) || 0;
323
+ counters.set(id, count + 1);
324
+ return count ? `${id}${count}` : id;
325
+ }
326
+ function replaceIDs(body) {
327
+ const ids = [];
328
+ let match;
329
+ while (match = regex.exec(body))
330
+ ids.push(match[1]);
331
+ if (!ids.length)
332
+ return body;
333
+ const suffix = "suffix" + (Math.random() * 16777216 | Date.now()).toString(16);
334
+ ids.forEach((id) => {
335
+ const newID = nextID(id);
336
+ const escapedID = id.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
337
+ body = body.replace(new RegExp('([#;"])(' + escapedID + ')([")]|\\.[a-z])', "g"), "$1" + newID + suffix + "$3");
338
+ });
339
+ body = body.replace(new RegExp(suffix, "g"), "");
340
+ return body;
341
+ }
342
+ // node_modules/@iconify/utils/lib/svg/html.js
343
+ function iconToHTML(body, attributes) {
344
+ let renderAttribsHTML = body.indexOf("xlink:") === -1 ? "" : ' xmlns:xlink="http://www.w3.org/1999/xlink"';
345
+ for (const attr in attributes)
346
+ renderAttribsHTML += " " + attr + '="' + attributes[attr] + '"';
347
+ return '<svg xmlns="http://www.w3.org/2000/svg"' + renderAttribsHTML + ">" + body + "</svg>";
348
+ }
349
+ // node_modules/mermaid/dist/chunks/mermaid.core/chunk-4I5QYGJK.mjs
350
+ var unknownIcon = {
351
+ body: '<g><rect width="80" height="80" style="fill: #087ebf; stroke-width: 0px;"/><text transform="translate(21.16 64.67)" style="fill: #fff; font-family: ArialMT, Arial; font-size: 67.75px;"><tspan x="0" y="0">?</tspan></text></g>',
352
+ height: 80,
353
+ width: 80
354
+ };
355
+ var iconsStore = /* @__PURE__ */ new Map;
356
+ var loaderStore = /* @__PURE__ */ new Map;
357
+ var registerIconPacks = /* @__PURE__ */ __name((iconLoaders) => {
358
+ for (const iconLoader of iconLoaders) {
359
+ if (!iconLoader.name) {
360
+ throw new Error('Invalid icon loader. Must have a "name" property with non-empty string value.');
361
+ }
362
+ log.debug("Registering icon pack:", iconLoader.name);
363
+ if ("loader" in iconLoader) {
364
+ loaderStore.set(iconLoader.name, iconLoader.loader);
365
+ } else if ("icons" in iconLoader) {
366
+ iconsStore.set(iconLoader.name, iconLoader.icons);
367
+ } else {
368
+ log.error("Invalid icon loader:", iconLoader);
369
+ throw new Error('Invalid icon loader. Must have either "icons" or "loader" property.');
370
+ }
371
+ }
372
+ }, "registerIconPacks");
373
+ var getRegisteredIconData = /* @__PURE__ */ __name(async (iconName, fallbackPrefix) => {
374
+ const data = stringToIcon(iconName, true, fallbackPrefix !== undefined);
375
+ if (!data) {
376
+ throw new Error(`Invalid icon name: ${iconName}`);
377
+ }
378
+ const prefix = data.prefix || fallbackPrefix;
379
+ if (!prefix) {
380
+ throw new Error(`Icon name must contain a prefix: ${iconName}`);
381
+ }
382
+ let icons = iconsStore.get(prefix);
383
+ if (!icons) {
384
+ const loader = loaderStore.get(prefix);
385
+ if (!loader) {
386
+ throw new Error(`Icon set not found: ${data.prefix}`);
387
+ }
388
+ try {
389
+ const loaded = await loader();
390
+ icons = { ...loaded, prefix };
391
+ iconsStore.set(prefix, icons);
392
+ } catch (e) {
393
+ log.error(e);
394
+ throw new Error(`Failed to load icon set: ${data.prefix}`);
395
+ }
396
+ }
397
+ const iconData = getIconData(icons, data.name);
398
+ if (!iconData) {
399
+ throw new Error(`Icon not found: ${iconName}`);
400
+ }
401
+ return iconData;
402
+ }, "getRegisteredIconData");
403
+ var isIconAvailable = /* @__PURE__ */ __name(async (iconName) => {
404
+ try {
405
+ await getRegisteredIconData(iconName);
406
+ return true;
407
+ } catch {
408
+ return false;
409
+ }
410
+ }, "isIconAvailable");
411
+ var getIconSVG = /* @__PURE__ */ __name(async (iconName, customisations, extraAttributes) => {
412
+ let iconData;
413
+ try {
414
+ iconData = await getRegisteredIconData(iconName, customisations?.fallbackPrefix);
415
+ } catch (e) {
416
+ log.error(e);
417
+ iconData = unknownIcon;
418
+ }
419
+ const renderData = iconToSVG(iconData, customisations);
420
+ const svg = iconToHTML(replaceIDs(renderData.body), {
421
+ ...renderData.attributes,
422
+ ...extraAttributes
423
+ });
424
+ return sanitizeText(svg, getConfig());
425
+ }, "getIconSVG");
426
+
427
+ export { unknownIcon, registerIconPacks, isIconAvailable, getIconSVG };