@stacksjs/defaults 0.70.206 → 0.70.208

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 (408) hide show
  1. package/TODO.md +21 -0
  2. package/ai/AGENTS.md +79 -0
  3. package/ai/README.md +45 -0
  4. package/ai/claude/launch.json +12 -0
  5. package/ai/skills/stacks-actions/SKILL.md +128 -0
  6. package/ai/skills/stacks-ai/SKILL.md +276 -0
  7. package/ai/skills/stacks-alias/SKILL.md +94 -0
  8. package/ai/skills/stacks-analytics/SKILL.md +91 -0
  9. package/ai/skills/stacks-api/SKILL.md +738 -0
  10. package/ai/skills/stacks-arrays/SKILL.md +277 -0
  11. package/ai/skills/stacks-auth/SKILL.md +422 -0
  12. package/ai/skills/stacks-auto-imports/SKILL.md +138 -0
  13. package/ai/skills/stacks-brandkit/SKILL.md +811 -0
  14. package/ai/skills/stacks-browse/SKILL.md +127 -0
  15. package/ai/skills/stacks-browse/scripts/browse.ts +492 -0
  16. package/ai/skills/stacks-browser/SKILL.md +145 -0
  17. package/ai/skills/stacks-buddy/SKILL.md +676 -0
  18. package/ai/skills/stacks-build/SKILL.md +163 -0
  19. package/ai/skills/stacks-cache/SKILL.md +125 -0
  20. package/ai/skills/stacks-calendar/SKILL.md +113 -0
  21. package/ai/skills/stacks-chat/SKILL.md +371 -0
  22. package/ai/skills/stacks-cli/SKILL.md +112 -0
  23. package/ai/skills/stacks-cloud/SKILL.md +192 -0
  24. package/ai/skills/stacks-cms/SKILL.md +217 -0
  25. package/ai/skills/stacks-collections/SKILL.md +82 -0
  26. package/ai/skills/stacks-commerce/SKILL.md +114 -0
  27. package/ai/skills/stacks-composables/SKILL.md +161 -0
  28. package/ai/skills/stacks-config/SKILL.md +144 -0
  29. package/ai/skills/stacks-configuration/SKILL.md +154 -0
  30. package/ai/skills/stacks-cron/SKILL.md +123 -0
  31. package/ai/skills/stacks-crosswind/SKILL.md +190 -0
  32. package/ai/skills/stacks-dashboard/SKILL.md +173 -0
  33. package/ai/skills/stacks-database/SKILL.md +286 -0
  34. package/ai/skills/stacks-datetime/SKILL.md +269 -0
  35. package/ai/skills/stacks-dependencies/SKILL.md +111 -0
  36. package/ai/skills/stacks-deploy/SKILL.md +102 -0
  37. package/ai/skills/stacks-design-brutalist/SKILL.md +110 -0
  38. package/ai/skills/stacks-design-minimalist/SKILL.md +115 -0
  39. package/ai/skills/stacks-design-output/SKILL.md +55 -0
  40. package/ai/skills/stacks-design-soft/SKILL.md +156 -0
  41. package/ai/skills/stacks-design-taste/SKILL.md +1012 -0
  42. package/ai/skills/stacks-design-taste-codex/SKILL.md +294 -0
  43. package/ai/skills/stacks-desktop/SKILL.md +78 -0
  44. package/ai/skills/stacks-development/SKILL.md +298 -0
  45. package/ai/skills/stacks-dns/SKILL.md +149 -0
  46. package/ai/skills/stacks-docs/SKILL.md +109 -0
  47. package/ai/skills/stacks-email/SKILL.md +236 -0
  48. package/ai/skills/stacks-enums/SKILL.md +100 -0
  49. package/ai/skills/stacks-env/SKILL.md +181 -0
  50. package/ai/skills/stacks-error-handling/SKILL.md +137 -0
  51. package/ai/skills/stacks-events/SKILL.md +228 -0
  52. package/ai/skills/stacks-faker/SKILL.md +158 -0
  53. package/ai/skills/stacks-git/SKILL.md +158 -0
  54. package/ai/skills/stacks-guard/SKILL.md +98 -0
  55. package/ai/skills/stacks-health/SKILL.md +75 -0
  56. package/ai/skills/stacks-http/SKILL.md +316 -0
  57. package/ai/skills/stacks-i18n/SKILL.md +198 -0
  58. package/ai/skills/stacks-image-to-code/SKILL.md +629 -0
  59. package/ai/skills/stacks-imagegen-mobile/SKILL.md +1474 -0
  60. package/ai/skills/stacks-imagegen-web/SKILL.md +998 -0
  61. package/ai/skills/stacks-investigate/SKILL.md +119 -0
  62. package/ai/skills/stacks-jobs/SKILL.md +136 -0
  63. package/ai/skills/stacks-lint/SKILL.md +184 -0
  64. package/ai/skills/stacks-listeners/SKILL.md +99 -0
  65. package/ai/skills/stacks-logging/SKILL.md +78 -0
  66. package/ai/skills/stacks-mail/SKILL.md +120 -0
  67. package/ai/skills/stacks-middleware/SKILL.md +249 -0
  68. package/ai/skills/stacks-migrations/SKILL.md +105 -0
  69. package/ai/skills/stacks-models/SKILL.md +267 -0
  70. package/ai/skills/stacks-new-feature/SKILL.md +206 -0
  71. package/ai/skills/stacks-notifications/SKILL.md +210 -0
  72. package/ai/skills/stacks-objects/SKILL.md +205 -0
  73. package/ai/skills/stacks-office-hours/SKILL.md +134 -0
  74. package/ai/skills/stacks-orm/SKILL.md +342 -0
  75. package/ai/skills/stacks-path/SKILL.md +118 -0
  76. package/ai/skills/stacks-payments/SKILL.md +373 -0
  77. package/ai/skills/stacks-plan-review/SKILL.md +152 -0
  78. package/ai/skills/stacks-plugins/SKILL.md +149 -0
  79. package/ai/skills/stacks-push/SKILL.md +376 -0
  80. package/ai/skills/stacks-query-builder/SKILL.md +128 -0
  81. package/ai/skills/stacks-queue/SKILL.md +559 -0
  82. package/ai/skills/stacks-realtime/SKILL.md +442 -0
  83. package/ai/skills/stacks-redesign/SKILL.md +182 -0
  84. package/ai/skills/stacks-registry/SKILL.md +58 -0
  85. package/ai/skills/stacks-repl/SKILL.md +80 -0
  86. package/ai/skills/stacks-retro/SKILL.md +122 -0
  87. package/ai/skills/stacks-review/SKILL.md +135 -0
  88. package/ai/skills/stacks-router/SKILL.md +231 -0
  89. package/ai/skills/stacks-routes/SKILL.md +105 -0
  90. package/ai/skills/stacks-scaffolding/SKILL.md +162 -0
  91. package/ai/skills/stacks-scheduler/SKILL.md +363 -0
  92. package/ai/skills/stacks-search-engine/SKILL.md +112 -0
  93. package/ai/skills/stacks-security/SKILL.md +129 -0
  94. package/ai/skills/stacks-security-audit/SKILL.md +128 -0
  95. package/ai/skills/stacks-server/SKILL.md +458 -0
  96. package/ai/skills/stacks-shell/SKILL.md +62 -0
  97. package/ai/skills/stacks-slug/SKILL.md +87 -0
  98. package/ai/skills/stacks-sms/SKILL.md +385 -0
  99. package/ai/skills/stacks-socials/SKILL.md +303 -0
  100. package/ai/skills/stacks-storage/SKILL.md +576 -0
  101. package/ai/skills/stacks-strings/SKILL.md +416 -0
  102. package/ai/skills/stacks-stx/SKILL.md +176 -0
  103. package/ai/skills/stacks-technical-diagrams/LICENSE +22 -0
  104. package/ai/skills/stacks-technical-diagrams/SKILL.md +290 -0
  105. package/ai/skills/stacks-technical-diagrams/agents/openai.yaml +4 -0
  106. package/ai/skills/stacks-technical-diagrams/assets/template.html +1252 -0
  107. package/ai/skills/stacks-technical-diagrams/bin/technical-diagrams.mjs +289 -0
  108. package/ai/skills/stacks-technical-diagrams/bunfig.toml +1 -0
  109. package/ai/skills/stacks-technical-diagrams/examples/agent-run.lifecycle.json +64 -0
  110. package/ai/skills/stacks-technical-diagrams/examples/agent-tool-call.workflow.json +88 -0
  111. package/ai/skills/stacks-technical-diagrams/examples/cache-miss-request.sequence.json +75 -0
  112. package/ai/skills/stacks-technical-diagrams/examples/product-analytics.dataflow.json +70 -0
  113. package/ai/skills/stacks-technical-diagrams/examples/web-app.architecture.json +41 -0
  114. package/ai/skills/stacks-technical-diagrams/renderers/architecture/grid.mjs +62 -0
  115. package/ai/skills/stacks-technical-diagrams/renderers/architecture/render-architecture.mjs +371 -0
  116. package/ai/skills/stacks-technical-diagrams/renderers/dataflow/README.md +82 -0
  117. package/ai/skills/stacks-technical-diagrams/renderers/dataflow/render-dataflow.mjs +295 -0
  118. package/ai/skills/stacks-technical-diagrams/renderers/lifecycle/README.md +91 -0
  119. package/ai/skills/stacks-technical-diagrams/renderers/lifecycle/render-lifecycle.mjs +384 -0
  120. package/ai/skills/stacks-technical-diagrams/renderers/sequence/README.md +84 -0
  121. package/ai/skills/stacks-technical-diagrams/renderers/sequence/render-sequence.mjs +257 -0
  122. package/ai/skills/stacks-technical-diagrams/renderers/shared/cli.mjs +42 -0
  123. package/ai/skills/stacks-technical-diagrams/renderers/shared/generated-validators.mjs +13 -0
  124. package/ai/skills/stacks-technical-diagrams/renderers/shared/geometry.mjs +230 -0
  125. package/ai/skills/stacks-technical-diagrams/renderers/shared/layout-report.mjs +40 -0
  126. package/ai/skills/stacks-technical-diagrams/renderers/shared/utils.mjs +88 -0
  127. package/ai/skills/stacks-technical-diagrams/renderers/shared/validator.mjs +40 -0
  128. package/ai/skills/stacks-technical-diagrams/renderers/workflow/README.md +103 -0
  129. package/ai/skills/stacks-technical-diagrams/renderers/workflow/render-workflow.mjs +481 -0
  130. package/ai/skills/stacks-technical-diagrams/schemas/README.md +68 -0
  131. package/ai/skills/stacks-technical-diagrams/schemas/architecture.schema.json +121 -0
  132. package/ai/skills/stacks-technical-diagrams/schemas/common.schema.json +43 -0
  133. package/ai/skills/stacks-technical-diagrams/schemas/dataflow.schema.json +221 -0
  134. package/ai/skills/stacks-technical-diagrams/schemas/lifecycle.schema.json +241 -0
  135. package/ai/skills/stacks-technical-diagrams/schemas/sequence.schema.json +186 -0
  136. package/ai/skills/stacks-technical-diagrams/schemas/workflow.schema.json +332 -0
  137. package/ai/skills/stacks-technical-diagrams/scripts/check-render-output.mjs +297 -0
  138. package/ai/skills/stacks-technical-diagrams/scripts/render-examples.mjs +28 -0
  139. package/ai/skills/stacks-testing/SKILL.md +129 -0
  140. package/ai/skills/stacks-tunnel/SKILL.md +125 -0
  141. package/ai/skills/stacks-types/SKILL.md +178 -0
  142. package/ai/skills/stacks-ui/SKILL.md +246 -0
  143. package/ai/skills/stacks-utils/SKILL.md +444 -0
  144. package/ai/skills/stacks-validation/SKILL.md +371 -0
  145. package/ai/skills/stacks-whois/SKILL.md +315 -0
  146. package/assets/world-map-data.ts +121 -0
  147. package/bootstrap.ts +114 -0
  148. package/docs/api-examples.md +46 -0
  149. package/docs/index.md +24 -0
  150. package/docs/markdown-examples.md +87 -0
  151. package/functions/analytics.ts +97 -0
  152. package/functions/api.ts +143 -0
  153. package/functions/auth.ts +208 -0
  154. package/functions/billing/payments.ts +149 -0
  155. package/functions/blog.ts +120 -0
  156. package/functions/cms/categorizables.ts +107 -0
  157. package/functions/cms/pages.ts +108 -0
  158. package/functions/cms/posts.ts +100 -0
  159. package/functions/cms/taggables.ts +102 -0
  160. package/functions/commerce/coupons.ts +128 -0
  161. package/functions/commerce/customers.ts +128 -0
  162. package/functions/commerce/gift-cards.ts +119 -0
  163. package/functions/commerce/orders.ts +112 -0
  164. package/functions/commerce/payments.ts +119 -0
  165. package/functions/commerce/products/categories.ts +123 -0
  166. package/functions/commerce/products/manufacturers.ts +123 -0
  167. package/functions/commerce/products/products.ts +123 -0
  168. package/functions/commerce/products/reviews.ts +123 -0
  169. package/functions/commerce/products/units.ts +123 -0
  170. package/functions/commerce/products/variants.ts +123 -0
  171. package/functions/commerce/shippings/delivery-routes.ts +123 -0
  172. package/functions/commerce/shippings/digital-deliveries.ts +119 -0
  173. package/functions/commerce/shippings/drivers.ts +123 -0
  174. package/functions/commerce/shippings/license-keys.ts +123 -0
  175. package/functions/commerce/shippings/shipping-methods.ts +123 -0
  176. package/functions/commerce/shippings/shipping-rates.ts +119 -0
  177. package/functions/commerce/shippings/shipping-zones.ts +119 -0
  178. package/functions/commerce/taxes.ts +119 -0
  179. package/functions/commerce/waitlist/products.ts +123 -0
  180. package/functions/commerce/waitlist/restaurants.ts +123 -0
  181. package/functions/craft.ts +107 -0
  182. package/functions/dashboard.ts +153 -0
  183. package/functions/inbox.ts +95 -0
  184. package/functions/jobs.ts +86 -0
  185. package/functions/monitoring/errors.ts +295 -0
  186. package/functions/queue.ts +111 -0
  187. package/functions/realtime/websockets.ts +96 -0
  188. package/functions/realtime.ts +52 -0
  189. package/functions/releases.ts +49 -0
  190. package/functions/search.ts +126 -0
  191. package/functions/toasts.ts +95 -0
  192. package/functions/uploads.ts +216 -0
  193. package/ide/.gitignore +4 -0
  194. package/ide/cursor/rules/auto-imports.mdc +574 -0
  195. package/ide/cursor/rules/code-style.mdc +12 -0
  196. package/ide/cursor/rules/documentation.mdc +9 -0
  197. package/ide/cursor/rules/error-handling-validation.mdc +11 -0
  198. package/ide/cursor/rules/key-conventions.mdc +11 -0
  199. package/ide/cursor/rules/project-structure.mdc +169 -0
  200. package/ide/cursor/rules/readme.mdc +318 -0
  201. package/ide/cursor/rules/syntax-formatting.mdc +9 -0
  202. package/ide/cursor/rules/testing.mdc +10 -0
  203. package/ide/cursor/rules/typescript.mdc +9 -0
  204. package/ide/cursor/rules/ui-styling.mdc +0 -0
  205. package/ide/dictionary.txt +397 -0
  206. package/ide/jetbrains/.fleet/settings.json +4 -0
  207. package/ide/jetbrains/.idea/.gitignore +5 -0
  208. package/ide/jetbrains/.idea/.name +1 -0
  209. package/ide/jetbrains/.idea/inspectionProfiles/Project_Default.xml +6 -0
  210. package/ide/jetbrains/.idea/jsLinters/eslint.xml +7 -0
  211. package/ide/jetbrains/.idea/modules.xml +8 -0
  212. package/ide/jetbrains/.idea/stacks.iml +22 -0
  213. package/ide/jetbrains/.idea/vcs.xml +6 -0
  214. package/ide/jetbrains/.idea/webResources.xml +14 -0
  215. package/ide/jetbrains/IntelliJ IDEA Global Settings +0 -0
  216. package/ide/jetbrains/installed.txt +4 -0
  217. package/ide/jetbrains/options/github-copilot.xml +5 -0
  218. package/ide/jetbrains/options/nodejs.xml +7 -0
  219. package/ide/jetbrains/options/templates.xml +124 -0
  220. package/ide/jetbrains/templates/JavaScript.xml +6 -0
  221. package/ide/jetbrains/templates/Stacks.xml +8 -0
  222. package/ide/vscode/.vscode/README.md +23 -0
  223. package/ide/vscode/.vscode/extensions.json +5 -0
  224. package/ide/vscode/.vscode/settings.json +176 -0
  225. package/ide/vscode/.vscode/stacks.code-snippets +181 -0
  226. package/ide/vscode/LICENSE.md +21 -0
  227. package/ide/vscode/README.md +36 -0
  228. package/ide/vscode/logo.png +0 -0
  229. package/ide/vscode/package.json +79 -0
  230. package/ide/zed/.zed/settings.json +139 -0
  231. package/lang/README.md +28 -0
  232. package/lang/de.yml +14 -0
  233. package/lang/en.yml +15 -0
  234. package/package.json +19 -3
  235. package/project/bootstrap +161 -0
  236. package/project/buddy +175 -0
  237. package/project/storage/framework/tsconfig.app.json +50 -0
  238. package/project/storage/framework/tsconfig.base.json +58 -0
  239. package/routes/core.ts +78 -0
  240. package/routes/dashboard-api.ts +233 -0
  241. package/routes/dashboard.ts +739 -0
  242. package/routes/email.ts +129 -0
  243. package/stores/[name].stx +16 -0
  244. package/stores/git.ts +71 -0
  245. package/stores/payment.ts +474 -0
  246. package/stores/queue.ts +43 -0
  247. package/stores/user.ts +29 -0
  248. package/stx-components-plugin.ts +25 -0
  249. package/styles/design-tokens.css +597 -0
  250. package/types/dashboard.ts +70 -0
  251. package/types/defaults.ts +438 -0
  252. package/vcs/github/CODE_OF_CONDUCT.md +83 -0
  253. package/vcs/github/CONTRIBUTING.md +187 -0
  254. package/vcs/github/EXPLANATIONS.md +41 -0
  255. package/vcs/github/FUNDING.yml +1 -0
  256. package/vcs/github/ISSUE_TEMPLATE/bug_report.yml +49 -0
  257. package/vcs/github/ISSUE_TEMPLATE/config.yml +10 -0
  258. package/vcs/github/ISSUE_TEMPLATE/feature_request.yml +44 -0
  259. package/vcs/github/SECURITY.md +70 -0
  260. package/vcs/github/renovate.json +5 -0
  261. package/vcs/github/stale.yml +14 -0
  262. package/vcs/github/workflows/README.md +16 -0
  263. package/vcs/github/workflows/ci.yml +114 -0
  264. package/vcs/github/workflows/export-size.yml +25 -0
  265. package/vcs/github/workflows/labeler.yml +13 -0
  266. package/vcs/github/workflows/release.yml +219 -0
  267. package/views/[...all].stx +8 -0
  268. package/views/about.md +3 -0
  269. package/views/auth/login.stx +1 -0
  270. package/views/auth/signup.stx +85 -0
  271. package/views/dashboard/.discovered-models.json +542 -0
  272. package/views/dashboard/AUDIT.md +904 -0
  273. package/views/dashboard/[...all].stx +89 -0
  274. package/views/dashboard/access-tokens/index.stx +177 -0
  275. package/views/dashboard/actions/index.stx +129 -0
  276. package/views/dashboard/analytics/blog/index.stx +356 -0
  277. package/views/dashboard/analytics/browsers/index.stx +263 -0
  278. package/views/dashboard/analytics/commerce/sales/index.stx +329 -0
  279. package/views/dashboard/analytics/commerce/web/index.stx +379 -0
  280. package/views/dashboard/analytics/countries/index.stx +289 -0
  281. package/views/dashboard/analytics/devices/index.stx +305 -0
  282. package/views/dashboard/analytics/events/index.stx +536 -0
  283. package/views/dashboard/analytics/index.stx +88 -0
  284. package/views/dashboard/analytics/marketing/index.stx +315 -0
  285. package/views/dashboard/analytics/pages/index.stx +271 -0
  286. package/views/dashboard/analytics/referrers/index.stx +319 -0
  287. package/views/dashboard/analytics/web/index.stx +356 -0
  288. package/views/dashboard/buddy/index.stx +198 -0
  289. package/views/dashboard/ci/index.stx +462 -0
  290. package/views/dashboard/cloud/index.stx +452 -0
  291. package/views/dashboard/commands/index.stx +295 -0
  292. package/views/dashboard/commerce/categories/index.stx +406 -0
  293. package/views/dashboard/commerce/coupons/index.stx +485 -0
  294. package/views/dashboard/commerce/customers/index.stx +410 -0
  295. package/views/dashboard/commerce/dashboard/index.stx +287 -0
  296. package/views/dashboard/commerce/delivery/delivery-routes.stx +305 -0
  297. package/views/dashboard/commerce/delivery/digital-delivery.stx +332 -0
  298. package/views/dashboard/commerce/delivery/drivers.stx +397 -0
  299. package/views/dashboard/commerce/delivery/index.stx +18 -0
  300. package/views/dashboard/commerce/delivery/license-keys.stx +380 -0
  301. package/views/dashboard/commerce/delivery/shipping-methods.stx +346 -0
  302. package/views/dashboard/commerce/delivery/shipping-rates.stx +338 -0
  303. package/views/dashboard/commerce/delivery/shipping-zones.stx +302 -0
  304. package/views/dashboard/commerce/delivery/tabs.ts +25 -0
  305. package/views/dashboard/commerce/gift-cards/index.stx +561 -0
  306. package/views/dashboard/commerce/manufacturers/index.stx +308 -0
  307. package/views/dashboard/commerce/orders/index.stx +247 -0
  308. package/views/dashboard/commerce/payments/index.stx +535 -0
  309. package/views/dashboard/commerce/pos/index.stx +653 -0
  310. package/views/dashboard/commerce/printers/devices/index.stx +273 -0
  311. package/views/dashboard/commerce/printers/receipts/index.stx +308 -0
  312. package/views/dashboard/commerce/products/detail.stx +563 -0
  313. package/views/dashboard/commerce/products/index.stx +370 -0
  314. package/views/dashboard/commerce/reviews/index.stx +656 -0
  315. package/views/dashboard/commerce/reviews/index.ts +0 -0
  316. package/views/dashboard/commerce/taxes/index.stx +377 -0
  317. package/views/dashboard/commerce/units/index.stx +317 -0
  318. package/views/dashboard/commerce/variants/index.stx +319 -0
  319. package/views/dashboard/commerce/waitlist/products.stx +942 -0
  320. package/views/dashboard/commerce/waitlist/restaurant.stx +1024 -0
  321. package/views/dashboard/components/index.stx +330 -0
  322. package/views/dashboard/composables/index.ts +19 -0
  323. package/views/dashboard/composables/useChart.ts +77 -0
  324. package/views/dashboard/composables/useNavigation.ts +99 -0
  325. package/views/dashboard/composables/useRole.ts +58 -0
  326. package/views/dashboard/composables/useTheme.ts +74 -0
  327. package/views/dashboard/content/authors/index.stx +171 -0
  328. package/views/dashboard/content/blog/index.stx +493 -0
  329. package/views/dashboard/content/categories/index.stx +169 -0
  330. package/views/dashboard/content/comments/index.stx +189 -0
  331. package/views/dashboard/content/dashboard.stx +383 -0
  332. package/views/dashboard/content/files/index.stx +706 -0
  333. package/views/dashboard/content/pages/index.stx +174 -0
  334. package/views/dashboard/content/posts/index.stx +269 -0
  335. package/views/dashboard/content/seo/index.stx +240 -0
  336. package/views/dashboard/content/tags/index.stx +167 -0
  337. package/views/dashboard/data/activity/index.stx +261 -0
  338. package/views/dashboard/data/dashboard/index.stx +116 -0
  339. package/views/dashboard/data/subscribers.stx +270 -0
  340. package/views/dashboard/data/teams.stx +275 -0
  341. package/views/dashboard/data/users.stx +279 -0
  342. package/views/dashboard/dependencies/index.stx +178 -0
  343. package/views/dashboard/deployments/[id].stx +234 -0
  344. package/views/dashboard/deployments/index.stx +9 -0
  345. package/views/dashboard/dns/index.stx +163 -0
  346. package/views/dashboard/environment/index.stx +283 -0
  347. package/views/dashboard/errors/index.stx +274 -0
  348. package/views/dashboard/forgot-password.stx +57 -0
  349. package/views/dashboard/functions/index.stx +159 -0
  350. package/views/dashboard/health/index.stx +248 -0
  351. package/views/dashboard/inbox/activity.stx +350 -0
  352. package/views/dashboard/inbox/index.stx +452 -0
  353. package/views/dashboard/inbox/settings.stx +290 -0
  354. package/views/dashboard/index.stx +252 -0
  355. package/views/dashboard/insights/index.stx +529 -0
  356. package/views/dashboard/jobs/[id].stx +430 -0
  357. package/views/dashboard/jobs/history.stx +222 -0
  358. package/views/dashboard/jobs/index.stx +214 -0
  359. package/views/dashboard/kanban/[id].stx +899 -0
  360. package/views/dashboard/kanban/index.stx +260 -0
  361. package/views/dashboard/layouts/default.stx +565 -0
  362. package/views/dashboard/layouts/guest.stx +10 -0
  363. package/views/dashboard/login.stx +48 -0
  364. package/views/dashboard/logs/index.stx +540 -0
  365. package/views/dashboard/mailboxes/index.stx +149 -0
  366. package/views/dashboard/management/permissions/index.stx +490 -0
  367. package/views/dashboard/marketing/campaigns/index.stx +604 -0
  368. package/views/dashboard/marketing/lists/index.stx +514 -0
  369. package/views/dashboard/marketing/reviews/index.stx +475 -0
  370. package/views/dashboard/marketing/social-posts/index.stx +560 -0
  371. package/views/dashboard/models/[model].stx +195 -0
  372. package/views/dashboard/models/index.stx +159 -0
  373. package/views/dashboard/monitoring/errors/index.stx +415 -0
  374. package/views/dashboard/notifications/dashboard.stx +383 -0
  375. package/views/dashboard/notifications/email.stx +336 -0
  376. package/views/dashboard/notifications/history.stx +373 -0
  377. package/views/dashboard/notifications/sms.stx +332 -0
  378. package/views/dashboard/packages/index.stx +195 -0
  379. package/views/dashboard/queries/[id].stx +381 -0
  380. package/views/dashboard/queries/history.stx +227 -0
  381. package/views/dashboard/queries/index.stx +335 -0
  382. package/views/dashboard/queries/slow.stx +318 -0
  383. package/views/dashboard/queue/index.stx +427 -0
  384. package/views/dashboard/realtime/index.stx +429 -0
  385. package/views/dashboard/register.stx +46 -0
  386. package/views/dashboard/releases/index.stx +389 -0
  387. package/views/dashboard/requests/index.stx +462 -0
  388. package/views/dashboard/serverless/index.stx +475 -0
  389. package/views/dashboard/servers/[id].stx +299 -0
  390. package/views/dashboard/servers/index.stx +483 -0
  391. package/views/dashboard/settings/billing.stx +50 -0
  392. package/views/dashboard/settings/index.stx +256 -0
  393. package/views/dashboard/settings/mail.stx +252 -0
  394. package/views/dashboard/stores/auth.ts +123 -0
  395. package/views/dashboard/stores/ci.ts +342 -0
  396. package/views/dashboard/stores/index.ts +129 -0
  397. package/views/dashboard/stores/kanban.ts +723 -0
  398. package/views/dashboard/stores/rbac.ts +350 -0
  399. package/views/dashboard/stx.config.ts +34 -0
  400. package/views/dashboard/teams/[id].stx +170 -0
  401. package/views/forum/category.stx +92 -0
  402. package/views/forum/index.stx +209 -0
  403. package/views/forum/new-topic.stx +113 -0
  404. package/views/forum/profile.stx +1 -0
  405. package/views/forum/topic.stx +143 -0
  406. package/views/hello-world/[name].stx +47 -0
  407. package/views/index.stx +21 -0
  408. package/views/system-tray/index.stx +147 -0
@@ -0,0 +1,332 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "https://github.com/tt-a1i/archify/schemas/workflow.schema.json",
4
+ "title": "Technical Workflow Diagram",
5
+ "type": "object",
6
+ "additionalProperties": false,
7
+ "required": [
8
+ "schema_version",
9
+ "diagram_type",
10
+ "meta",
11
+ "lanes",
12
+ "nodes",
13
+ "edges"
14
+ ],
15
+ "properties": {
16
+ "schema_version": {
17
+ "const": 1
18
+ },
19
+ "diagram_type": {
20
+ "const": "workflow"
21
+ },
22
+ "meta": {
23
+ "type": "object",
24
+ "additionalProperties": false,
25
+ "required": [
26
+ "title"
27
+ ],
28
+ "properties": {
29
+ "title": {
30
+ "type": "string",
31
+ "minLength": 1
32
+ },
33
+ "subtitle": {
34
+ "type": "string"
35
+ },
36
+ "output": {
37
+ "type": "string"
38
+ },
39
+ "animation": {
40
+ "enum": [
41
+ "trace",
42
+ "none"
43
+ ]
44
+ },
45
+ "viewBox": {
46
+ "type": "array",
47
+ "prefixItems": [
48
+ {
49
+ "type": "number",
50
+ "minimum": 700
51
+ },
52
+ {
53
+ "type": "number",
54
+ "minimum": 240
55
+ }
56
+ ],
57
+ "items": false,
58
+ "minItems": 2,
59
+ "maxItems": 2
60
+ }
61
+ }
62
+ },
63
+ "lanes": {
64
+ "type": "array",
65
+ "minItems": 1,
66
+ "items": {
67
+ "type": "object",
68
+ "additionalProperties": false,
69
+ "required": [
70
+ "id",
71
+ "label"
72
+ ],
73
+ "properties": {
74
+ "id": {
75
+ "$ref": "common.schema.json#/$defs/id"
76
+ },
77
+ "label": {
78
+ "type": "string",
79
+ "minLength": 1
80
+ },
81
+ "variant": {
82
+ "enum": [
83
+ "normal",
84
+ "exception"
85
+ ]
86
+ }
87
+ }
88
+ }
89
+ },
90
+ "phases": {
91
+ "type": "array",
92
+ "items": {
93
+ "type": "object",
94
+ "additionalProperties": false,
95
+ "required": [
96
+ "id",
97
+ "label",
98
+ "fromCol",
99
+ "toCol"
100
+ ],
101
+ "properties": {
102
+ "id": {
103
+ "$ref": "common.schema.json#/$defs/id"
104
+ },
105
+ "label": {
106
+ "type": "string",
107
+ "minLength": 1
108
+ },
109
+ "fromCol": {
110
+ "type": "integer",
111
+ "minimum": 0,
112
+ "maximum": 5
113
+ },
114
+ "toCol": {
115
+ "type": "integer",
116
+ "minimum": 0,
117
+ "maximum": 5
118
+ },
119
+ "variant": {
120
+ "enum": [
121
+ "default",
122
+ "emphasis",
123
+ "security",
124
+ "dashed"
125
+ ]
126
+ }
127
+ }
128
+ }
129
+ },
130
+ "groups": {
131
+ "type": "array",
132
+ "items": {
133
+ "type": "object",
134
+ "additionalProperties": false,
135
+ "required": [
136
+ "id",
137
+ "label",
138
+ "lane",
139
+ "fromCol",
140
+ "toCol"
141
+ ],
142
+ "properties": {
143
+ "id": {
144
+ "$ref": "common.schema.json#/$defs/id"
145
+ },
146
+ "label": {
147
+ "type": "string",
148
+ "minLength": 1
149
+ },
150
+ "lane": {
151
+ "$ref": "common.schema.json#/$defs/id"
152
+ },
153
+ "fromCol": {
154
+ "type": "integer",
155
+ "minimum": 0,
156
+ "maximum": 5
157
+ },
158
+ "toCol": {
159
+ "type": "integer",
160
+ "minimum": 0,
161
+ "maximum": 5
162
+ },
163
+ "variant": {
164
+ "enum": [
165
+ "default",
166
+ "emphasis",
167
+ "security",
168
+ "dashed"
169
+ ]
170
+ }
171
+ }
172
+ }
173
+ },
174
+ "mainPath": {
175
+ "type": "array",
176
+ "minItems": 2,
177
+ "items": {
178
+ "$ref": "common.schema.json#/$defs/id"
179
+ }
180
+ },
181
+ "nodes": {
182
+ "type": "array",
183
+ "minItems": 1,
184
+ "items": {
185
+ "type": "object",
186
+ "additionalProperties": false,
187
+ "required": [
188
+ "id",
189
+ "lane",
190
+ "col",
191
+ "type",
192
+ "label"
193
+ ],
194
+ "properties": {
195
+ "id": {
196
+ "$ref": "common.schema.json#/$defs/id"
197
+ },
198
+ "lane": {
199
+ "$ref": "common.schema.json#/$defs/id"
200
+ },
201
+ "col": {
202
+ "type": "integer",
203
+ "minimum": 0,
204
+ "maximum": 5
205
+ },
206
+ "type": {
207
+ "$ref": "common.schema.json#/$defs/componentType"
208
+ },
209
+ "label": {
210
+ "type": "string",
211
+ "minLength": 1
212
+ },
213
+ "sublabel": {
214
+ "type": "string"
215
+ },
216
+ "tag": {
217
+ "type": "string"
218
+ },
219
+ "width": {
220
+ "type": "number",
221
+ "minimum": 32
222
+ },
223
+ "height": {
224
+ "type": "number",
225
+ "minimum": 32
226
+ },
227
+ "yOffset": {
228
+ "type": "number"
229
+ }
230
+ }
231
+ }
232
+ },
233
+ "edges": {
234
+ "type": "array",
235
+ "items": {
236
+ "type": "object",
237
+ "additionalProperties": false,
238
+ "required": [
239
+ "from",
240
+ "to"
241
+ ],
242
+ "properties": {
243
+ "from": {
244
+ "$ref": "common.schema.json#/$defs/id"
245
+ },
246
+ "to": {
247
+ "$ref": "common.schema.json#/$defs/id"
248
+ },
249
+ "label": {
250
+ "type": "string"
251
+ },
252
+ "variant": {
253
+ "$ref": "common.schema.json#/$defs/variant"
254
+ },
255
+ "role": {
256
+ "enum": [
257
+ "main",
258
+ "branch",
259
+ "async",
260
+ "return",
261
+ "error"
262
+ ]
263
+ },
264
+ "fromSide": {
265
+ "$ref": "#/$defs/side"
266
+ },
267
+ "toSide": {
268
+ "$ref": "#/$defs/side"
269
+ },
270
+ "route": {
271
+ "enum": [
272
+ "auto",
273
+ "straight",
274
+ "drop",
275
+ "outside-right",
276
+ "return-left",
277
+ "bottom-channel",
278
+ "up-channel"
279
+ ]
280
+ },
281
+ "via": {
282
+ "type": "array",
283
+ "items": {
284
+ "$ref": "common.schema.json#/$defs/point"
285
+ }
286
+ },
287
+ "labelAt": {
288
+ "$ref": "common.schema.json#/$defs/point"
289
+ },
290
+ "labelDx": {
291
+ "type": "number"
292
+ },
293
+ "labelDy": {
294
+ "type": "number"
295
+ },
296
+ "labelSegment": {
297
+ "type": "integer",
298
+ "minimum": 0
299
+ },
300
+ "channelX": {
301
+ "type": "number"
302
+ },
303
+ "channelY": {
304
+ "type": "number"
305
+ },
306
+ "bias": {
307
+ "type": "number",
308
+ "minimum": 0,
309
+ "maximum": 1
310
+ },
311
+ "width": {
312
+ "type": "number",
313
+ "minimum": 0.5
314
+ }
315
+ }
316
+ }
317
+ },
318
+ "cards": {
319
+ "$ref": "common.schema.json#/$defs/cards"
320
+ }
321
+ },
322
+ "$defs": {
323
+ "side": {
324
+ "enum": [
325
+ "left",
326
+ "right",
327
+ "top",
328
+ "bottom"
329
+ ]
330
+ }
331
+ }
332
+ }
@@ -0,0 +1,297 @@
1
+ #!/usr/bin/env node
2
+
3
+ import fs from 'node:fs';
4
+ import path from 'node:path';
5
+
6
+ const input = process.argv[2];
7
+
8
+ if (!input || input === '-h' || input === '--help') {
9
+ console.error('Usage: bun scripts/check-render-output.mjs <diagram.html>');
10
+ process.exit(input ? 0 : 2);
11
+ }
12
+
13
+ const htmlPath = path.resolve(input);
14
+ let html;
15
+ try {
16
+ html = fs.readFileSync(htmlPath, 'utf8');
17
+ } catch (err) {
18
+ console.error(JSON.stringify({
19
+ ok: false,
20
+ file: htmlPath,
21
+ checks: [{ name: 'file_readable', ok: false, details: [err.message] }],
22
+ }, null, 2));
23
+ process.exit(1);
24
+ }
25
+
26
+ const checks = [];
27
+
28
+ function addCheck(name, ok, details = []) {
29
+ checks.push({ name, ok, details });
30
+ }
31
+
32
+ const svgMatches = [...html.matchAll(/<svg\b[\s\S]*?<\/svg>/gi)];
33
+ addCheck('single_svg', svgMatches.length === 1, [`found ${svgMatches.length} <svg> block(s)`]);
34
+
35
+ if (svgMatches.length === 1) {
36
+ const svg = svgMatches[0][0];
37
+ addCheck('finite_svg', !/\b(?:NaN|undefined|Infinity|-Infinity)\b/.test(svg));
38
+ const legendStart = svg.indexOf('<!-- Legend -->');
39
+ const beforeLegend = legendStart >= 0 ? svg.slice(0, legendStart) : svg;
40
+ const arrows = collectArrows(beforeLegend);
41
+ const diagonal = arrows.filter((arrow) => isTwoPointDiagonal(arrow));
42
+ addCheck(
43
+ 'orthogonal_arrows',
44
+ diagonal.length === 0,
45
+ diagonal.map((arrow) => `${arrow.kind} ${arrow.index}: ${arrow.raw}`),
46
+ );
47
+
48
+ if (legendStart >= 0) {
49
+ const legendFragment = svg.slice(legendStart);
50
+ const legendBoxes = collectLegendBoxes(legendFragment);
51
+ const collisions = collectLegendCollisions(arrows, legendBoxes);
52
+ addCheck(
53
+ 'legend_clearance',
54
+ collisions.length === 0,
55
+ collisions.map((hit) => `${hit.arrow.kind} ${hit.arrow.index} crosses legend ${hit.box.label}`),
56
+ );
57
+ } else {
58
+ addCheck('legend_clearance', true, ['no legend marker found']);
59
+ }
60
+ }
61
+
62
+ const ok = checks.every((check) => check.ok);
63
+ console.log(JSON.stringify({ ok, file: htmlPath, checks }, null, 2));
64
+ process.exit(ok ? 0 : 1);
65
+
66
+ function collectArrows(fragment) {
67
+ const arrows = [];
68
+ let index = 0;
69
+
70
+ for (const tag of fragment.matchAll(/<(path|line)\b[^>]*>/gi)) {
71
+ const raw = tag[0];
72
+ if (!/\bclass="[^"]*\ba-(?:default|emphasis|security|dashed)\b/.test(raw)) continue;
73
+ if (!/\bmarker-end=/.test(raw)) continue;
74
+ const attrs = parseAttrs(raw);
75
+ const segments = tag[1].toLowerCase() === 'line'
76
+ ? lineSegments(attrs)
77
+ : pathSegments(attrs.d || '');
78
+ arrows.push({ kind: tag[1].toLowerCase(), index: index += 1, raw, segments });
79
+ }
80
+
81
+ return arrows;
82
+ }
83
+
84
+ function lineSegments(attrs) {
85
+ const start = [numberAttr(attrs, 'x1'), numberAttr(attrs, 'y1')];
86
+ const end = [numberAttr(attrs, 'x2'), numberAttr(attrs, 'y2')];
87
+ if (!isPoint(start) || !isPoint(end)) return [];
88
+ return [{ start, end }];
89
+ }
90
+
91
+ function pathSegments(d) {
92
+ const points = pointsFromPath(d);
93
+ const segments = [];
94
+ for (let i = 1; i < points.length; i += 1) {
95
+ segments.push({ start: points[i - 1], end: points[i] });
96
+ }
97
+ return segments;
98
+ }
99
+
100
+ function isTwoPointDiagonal(arrow) {
101
+ if (arrow.segments.length !== 1) return false;
102
+ const { start, end } = arrow.segments[0];
103
+ return Math.abs(start[0] - end[0]) > 0.01 && Math.abs(start[1] - end[1]) > 0.01;
104
+ }
105
+
106
+ function collectLegendBoxes(fragment) {
107
+ const boxes = [];
108
+
109
+ for (const match of fragment.matchAll(/<rect\b[^>]*>/gi)) {
110
+ const attrs = parseAttrs(match[0]);
111
+ const x = numberAttr(attrs, 'x');
112
+ const y = numberAttr(attrs, 'y');
113
+ const width = numberAttr(attrs, 'width');
114
+ const height = numberAttr(attrs, 'height');
115
+ if ([x, y, width, height].every(Number.isFinite)) {
116
+ boxes.push({ x1: x, y1: y, x2: x + width, y2: y + height, label: `rect@${x},${y}` });
117
+ }
118
+ }
119
+
120
+ for (const match of fragment.matchAll(/<text\b([^>]*)>([\s\S]*?)<\/text>/gi)) {
121
+ const attrs = parseAttrs(match[1]);
122
+ const box = textBox(attrs, stripTags(match[2]).trim());
123
+ if (box) boxes.push(box);
124
+ }
125
+
126
+ return boxes;
127
+ }
128
+
129
+ function collectLegendCollisions(arrows, boxes) {
130
+ const collisions = [];
131
+ for (const arrow of arrows) {
132
+ for (const segment of arrow.segments) {
133
+ for (const box of boxes) {
134
+ if (segmentIntersectsBox(segment, padBox(box, 2))) {
135
+ collisions.push({ arrow, box });
136
+ }
137
+ }
138
+ }
139
+ }
140
+ return collisions;
141
+ }
142
+
143
+ function textBox(attrs, text) {
144
+ const x = numberAttr(attrs, 'x');
145
+ const y = numberAttr(attrs, 'y');
146
+ const fontSize = Number.parseFloat(attrs['font-size'] || '10');
147
+ if (!Number.isFinite(x) || !Number.isFinite(y) || !Number.isFinite(fontSize)) return null;
148
+ const width = estimatedTextWidth(text, fontSize);
149
+ const anchor = attrs['text-anchor'] || 'start';
150
+ let x1 = x;
151
+ if (anchor === 'middle') x1 = x - width / 2;
152
+ if (anchor === 'end') x1 = x - width;
153
+ return {
154
+ x1,
155
+ y1: y - fontSize,
156
+ x2: x1 + width,
157
+ y2: y + fontSize * 0.25,
158
+ label: text || `text@${x},${y}`,
159
+ };
160
+ }
161
+
162
+ function estimatedTextWidth(text, fontSize) {
163
+ let units = 0;
164
+ for (const char of text) units += char.charCodeAt(0) > 255 ? 1.8 : 0.62;
165
+ return Math.max(fontSize, units * fontSize);
166
+ }
167
+
168
+ function pointsFromPath(d) {
169
+ const tokens = d.match(/[MLHVZmlhvz]|[-+]?(?:\d*\.)?\d+(?:e[-+]?\d+)?/g) || [];
170
+ const points = [];
171
+ let i = 0;
172
+ let command = '';
173
+ let current = [0, 0];
174
+ let start = null;
175
+
176
+ while (i < tokens.length) {
177
+ if (isCommand(tokens[i])) command = tokens[i++];
178
+ if (!command) break;
179
+
180
+ const absolute = command === command.toUpperCase();
181
+ switch (command.toUpperCase()) {
182
+ case 'M':
183
+ case 'L': {
184
+ while (i + 1 < tokens.length && !isCommand(tokens[i])) {
185
+ const x = Number.parseFloat(tokens[i++]);
186
+ const y = Number.parseFloat(tokens[i++]);
187
+ if (!Number.isFinite(x) || !Number.isFinite(y)) break;
188
+ current = absolute ? [x, y] : [current[0] + x, current[1] + y];
189
+ points.push(current);
190
+ if (!start) start = current;
191
+ }
192
+ break;
193
+ }
194
+ case 'H': {
195
+ while (i < tokens.length && !isCommand(tokens[i])) {
196
+ const x = Number.parseFloat(tokens[i++]);
197
+ if (!Number.isFinite(x)) break;
198
+ current = absolute ? [x, current[1]] : [current[0] + x, current[1]];
199
+ points.push(current);
200
+ }
201
+ break;
202
+ }
203
+ case 'V': {
204
+ while (i < tokens.length && !isCommand(tokens[i])) {
205
+ const y = Number.parseFloat(tokens[i++]);
206
+ if (!Number.isFinite(y)) break;
207
+ current = absolute ? [current[0], y] : [current[0], current[1] + y];
208
+ points.push(current);
209
+ }
210
+ break;
211
+ }
212
+ case 'Z': {
213
+ if (start) points.push(start);
214
+ break;
215
+ }
216
+ default:
217
+ return [];
218
+ }
219
+ }
220
+
221
+ return points.filter(isPoint);
222
+ }
223
+
224
+ function segmentIntersectsBox(segment, box) {
225
+ const { start, end } = segment;
226
+ if (pointInsideBox(start, box) || pointInsideBox(end, box)) return true;
227
+ const edges = [
228
+ [[box.x1, box.y1], [box.x2, box.y1]],
229
+ [[box.x2, box.y1], [box.x2, box.y2]],
230
+ [[box.x2, box.y2], [box.x1, box.y2]],
231
+ [[box.x1, box.y2], [box.x1, box.y1]],
232
+ ];
233
+ return edges.some(([a, b]) => segmentsIntersect(start, end, a, b));
234
+ }
235
+
236
+ function segmentsIntersect(a, b, c, d) {
237
+ const o1 = orientation(a, b, c);
238
+ const o2 = orientation(a, b, d);
239
+ const o3 = orientation(c, d, a);
240
+ const o4 = orientation(c, d, b);
241
+
242
+ if (o1 !== o2 && o3 !== o4) return true;
243
+ if (o1 === 0 && onSegment(a, c, b)) return true;
244
+ if (o2 === 0 && onSegment(a, d, b)) return true;
245
+ if (o3 === 0 && onSegment(c, a, d)) return true;
246
+ if (o4 === 0 && onSegment(c, b, d)) return true;
247
+ return false;
248
+ }
249
+
250
+ function orientation(a, b, c) {
251
+ const value = (b[1] - a[1]) * (c[0] - b[0]) - (b[0] - a[0]) * (c[1] - b[1]);
252
+ if (Math.abs(value) < 1e-9) return 0;
253
+ return value > 0 ? 1 : 2;
254
+ }
255
+
256
+ function onSegment(a, b, c) {
257
+ return b[0] <= Math.max(a[0], c[0]) + 1e-9
258
+ && b[0] + 1e-9 >= Math.min(a[0], c[0])
259
+ && b[1] <= Math.max(a[1], c[1]) + 1e-9
260
+ && b[1] + 1e-9 >= Math.min(a[1], c[1]);
261
+ }
262
+
263
+ function pointInsideBox(point, box) {
264
+ return point[0] >= box.x1 && point[0] <= box.x2 && point[1] >= box.y1 && point[1] <= box.y2;
265
+ }
266
+
267
+ function padBox(box, padding) {
268
+ return {
269
+ ...box,
270
+ x1: box.x1 - padding,
271
+ y1: box.y1 - padding,
272
+ x2: box.x2 + padding,
273
+ y2: box.y2 + padding,
274
+ };
275
+ }
276
+
277
+ function parseAttrs(tag) {
278
+ const attrs = {};
279
+ for (const match of tag.matchAll(/([\w:-]+)\s*=\s*"([^"]*)"/g)) attrs[match[1]] = match[2];
280
+ return attrs;
281
+ }
282
+
283
+ function numberAttr(attrs, name) {
284
+ return Number.parseFloat(attrs[name]);
285
+ }
286
+
287
+ function isCommand(token) {
288
+ return /^[A-Za-z]$/.test(token);
289
+ }
290
+
291
+ function isPoint(point) {
292
+ return Array.isArray(point) && point.length === 2 && point.every(Number.isFinite);
293
+ }
294
+
295
+ function stripTags(value) {
296
+ return value.replace(/<[^>]*>/g, '');
297
+ }
@@ -0,0 +1,28 @@
1
+ // Re-render every bundled example from its JSON IR. Installed skills keep HTML
2
+ // beside the JSON examples; the development script passes the golden directory.
3
+
4
+ import { execFileSync } from 'node:child_process';
5
+ import path from 'node:path';
6
+ import { fileURLToPath } from 'node:url';
7
+
8
+ const __dirname = path.dirname(fileURLToPath(import.meta.url));
9
+ const skillRoot = path.resolve(__dirname, '..');
10
+ const outputRoot = path.resolve(process.argv[2] || path.join(skillRoot, 'examples'));
11
+
12
+ const TARGETS = [
13
+ ['workflow', 'agent-tool-call.workflow.json', 'workflow-agent-tool-call-rendered.html'],
14
+ ['sequence', 'cache-miss-request.sequence.json', 'sequence-cache-miss-request.html'],
15
+ ['dataflow', 'product-analytics.dataflow.json', 'dataflow-product-analytics.html'],
16
+ ['lifecycle', 'agent-run.lifecycle.json', 'lifecycle-agent-run.html'],
17
+ ['architecture', 'web-app.architecture.json', 'web-app-rendered.html'],
18
+ ];
19
+
20
+ for (const [mode, input, output] of TARGETS) {
21
+ execFileSync(process.execPath, [
22
+ `--config=${path.join(skillRoot, 'bunfig.toml')}`,
23
+ '--no-env-file',
24
+ path.join(skillRoot, `renderers/${mode}/render-${mode}.mjs`),
25
+ path.join(skillRoot, 'examples', input),
26
+ path.join(outputRoot, output),
27
+ ], { stdio: 'inherit' });
28
+ }