xonecode 0.3.0 → 0.5.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 (406) hide show
  1. package/README.md +49 -7
  2. package/THIRD_PARTY_NOTICES.md +128 -0
  3. package/apps/web/dist/assets/KaTeX_AMS-Regular-BQhdFMY1.woff2 +0 -0
  4. package/apps/web/dist/assets/KaTeX_AMS-Regular-DMm9YOAa.woff +0 -0
  5. package/apps/web/dist/assets/KaTeX_AMS-Regular-DRggAlZN.ttf +0 -0
  6. package/apps/web/dist/assets/KaTeX_Caligraphic-Bold-ATXxdsX0.ttf +0 -0
  7. package/apps/web/dist/assets/KaTeX_Caligraphic-Bold-BEiXGLvX.woff +0 -0
  8. package/apps/web/dist/assets/KaTeX_Caligraphic-Bold-Dq_IR9rO.woff2 +0 -0
  9. package/apps/web/dist/assets/KaTeX_Caligraphic-Regular-CTRA-rTL.woff +0 -0
  10. package/apps/web/dist/assets/KaTeX_Caligraphic-Regular-Di6jR-x-.woff2 +0 -0
  11. package/apps/web/dist/assets/KaTeX_Caligraphic-Regular-wX97UBjC.ttf +0 -0
  12. package/apps/web/dist/assets/KaTeX_Fraktur-Bold-BdnERNNW.ttf +0 -0
  13. package/apps/web/dist/assets/KaTeX_Fraktur-Bold-BsDP51OF.woff +0 -0
  14. package/apps/web/dist/assets/KaTeX_Fraktur-Bold-CL6g_b3V.woff2 +0 -0
  15. package/apps/web/dist/assets/KaTeX_Fraktur-Regular-CB_wures.ttf +0 -0
  16. package/apps/web/dist/assets/KaTeX_Fraktur-Regular-CTYiF6lA.woff2 +0 -0
  17. package/apps/web/dist/assets/KaTeX_Fraktur-Regular-Dxdc4cR9.woff +0 -0
  18. package/apps/web/dist/assets/KaTeX_Main-Bold-Cx986IdX.woff2 +0 -0
  19. package/apps/web/dist/assets/KaTeX_Main-Bold-Jm3AIy58.woff +0 -0
  20. package/apps/web/dist/assets/KaTeX_Main-Bold-waoOVXN0.ttf +0 -0
  21. package/apps/web/dist/assets/KaTeX_Main-BoldItalic-DxDJ3AOS.woff2 +0 -0
  22. package/apps/web/dist/assets/KaTeX_Main-BoldItalic-DzxPMmG6.ttf +0 -0
  23. package/apps/web/dist/assets/KaTeX_Main-BoldItalic-SpSLRI95.woff +0 -0
  24. package/apps/web/dist/assets/KaTeX_Main-Italic-3WenGoN9.ttf +0 -0
  25. package/apps/web/dist/assets/KaTeX_Main-Italic-BMLOBm91.woff +0 -0
  26. package/apps/web/dist/assets/KaTeX_Main-Italic-NWA7e6Wa.woff2 +0 -0
  27. package/apps/web/dist/assets/KaTeX_Main-Regular-B22Nviop.woff2 +0 -0
  28. package/apps/web/dist/assets/KaTeX_Main-Regular-Dr94JaBh.woff +0 -0
  29. package/apps/web/dist/assets/KaTeX_Main-Regular-ypZvNtVU.ttf +0 -0
  30. package/apps/web/dist/assets/KaTeX_Math-BoldItalic-B3XSjfu4.ttf +0 -0
  31. package/apps/web/dist/assets/KaTeX_Math-BoldItalic-CZnvNsCZ.woff2 +0 -0
  32. package/apps/web/dist/assets/KaTeX_Math-BoldItalic-iY-2wyZ7.woff +0 -0
  33. package/apps/web/dist/assets/KaTeX_Math-Italic-DA0__PXp.woff +0 -0
  34. package/apps/web/dist/assets/KaTeX_Math-Italic-flOr_0UB.ttf +0 -0
  35. package/apps/web/dist/assets/KaTeX_Math-Italic-t53AETM-.woff2 +0 -0
  36. package/apps/web/dist/assets/KaTeX_SansSerif-Bold-CFMepnvq.ttf +0 -0
  37. package/apps/web/dist/assets/KaTeX_SansSerif-Bold-D1sUS0GD.woff2 +0 -0
  38. package/apps/web/dist/assets/KaTeX_SansSerif-Bold-DbIhKOiC.woff +0 -0
  39. package/apps/web/dist/assets/KaTeX_SansSerif-Italic-C3H0VqGB.woff2 +0 -0
  40. package/apps/web/dist/assets/KaTeX_SansSerif-Italic-DN2j7dab.woff +0 -0
  41. package/apps/web/dist/assets/KaTeX_SansSerif-Italic-YYjJ1zSn.ttf +0 -0
  42. package/apps/web/dist/assets/KaTeX_SansSerif-Regular-BNo7hRIc.ttf +0 -0
  43. package/apps/web/dist/assets/KaTeX_SansSerif-Regular-CS6fqUqJ.woff +0 -0
  44. package/apps/web/dist/assets/KaTeX_SansSerif-Regular-DDBCnlJ7.woff2 +0 -0
  45. package/apps/web/dist/assets/KaTeX_Script-Regular-C5JkGWo-.ttf +0 -0
  46. package/apps/web/dist/assets/KaTeX_Script-Regular-D3wIWfF6.woff2 +0 -0
  47. package/apps/web/dist/assets/KaTeX_Script-Regular-D5yQViql.woff +0 -0
  48. package/apps/web/dist/assets/KaTeX_Size1-Regular-C195tn64.woff +0 -0
  49. package/apps/web/dist/assets/KaTeX_Size1-Regular-Dbsnue_I.ttf +0 -0
  50. package/apps/web/dist/assets/KaTeX_Size1-Regular-mCD8mA8B.woff2 +0 -0
  51. package/apps/web/dist/assets/KaTeX_Size2-Regular-B7gKUWhC.ttf +0 -0
  52. package/apps/web/dist/assets/KaTeX_Size2-Regular-Dy4dx90m.woff2 +0 -0
  53. package/apps/web/dist/assets/KaTeX_Size2-Regular-oD1tc_U0.woff +0 -0
  54. package/apps/web/dist/assets/KaTeX_Size3-Regular-CTq5MqoE.woff +0 -0
  55. package/apps/web/dist/assets/KaTeX_Size3-Regular-DgpXs0kz.ttf +0 -0
  56. package/apps/web/dist/assets/KaTeX_Size4-Regular-BF-4gkZK.woff +0 -0
  57. package/apps/web/dist/assets/KaTeX_Size4-Regular-DWFBv043.ttf +0 -0
  58. package/apps/web/dist/assets/KaTeX_Size4-Regular-Dl5lxZxV.woff2 +0 -0
  59. package/apps/web/dist/assets/KaTeX_Typewriter-Regular-C0xS9mPB.woff +0 -0
  60. package/apps/web/dist/assets/KaTeX_Typewriter-Regular-CO6r4hn1.woff2 +0 -0
  61. package/apps/web/dist/assets/KaTeX_Typewriter-Regular-D3Ib7_Hf.ttf +0 -0
  62. package/apps/web/dist/assets/c-BIGW1oBm.js +1 -0
  63. package/apps/web/dist/assets/cpp-DddhVWhK.js +1 -0
  64. package/apps/web/dist/assets/csharp-DSvCPggb.js +1 -0
  65. package/apps/web/dist/assets/css-CLj8gQPS.js +1 -0
  66. package/apps/web/dist/assets/go-C27-OAKa.js +1 -0
  67. package/apps/web/dist/assets/html-CfGypltT.js +1 -0
  68. package/apps/web/dist/assets/index-BB3SamhR.css +1 -0
  69. package/apps/web/dist/assets/index-CFYAoHdw.js +477 -0
  70. package/apps/web/dist/assets/ini-BEwlwnbL.js +1 -0
  71. package/apps/web/dist/assets/inter-cyrillic-ext-wght-normal-BOeWTOD4.woff2 +0 -0
  72. package/apps/web/dist/assets/inter-cyrillic-wght-normal-DqGufNeO.woff2 +0 -0
  73. package/apps/web/dist/assets/inter-greek-ext-wght-normal-DlzME5K_.woff2 +0 -0
  74. package/apps/web/dist/assets/inter-greek-wght-normal-CkhJZR-_.woff2 +0 -0
  75. package/apps/web/dist/assets/inter-latin-ext-wght-normal-DO1Apj_S.woff2 +0 -0
  76. package/apps/web/dist/assets/inter-latin-wght-normal-Dx4kXJAl.woff2 +0 -0
  77. package/apps/web/dist/assets/inter-vietnamese-wght-normal-CBcvBZtf.woff2 +0 -0
  78. package/apps/web/dist/assets/java-CylS5w8V.js +1 -0
  79. package/apps/web/dist/assets/jetbrains-mono-cyrillic-wght-normal-D73BlboJ.woff2 +0 -0
  80. package/apps/web/dist/assets/jetbrains-mono-greek-wght-normal-Bw9x6K1M.woff2 +0 -0
  81. package/apps/web/dist/assets/jetbrains-mono-latin-ext-wght-normal-DBQx-q_a.woff2 +0 -0
  82. package/apps/web/dist/assets/jetbrains-mono-latin-wght-normal-B9CIFXIH.woff2 +0 -0
  83. package/apps/web/dist/assets/jetbrains-mono-vietnamese-wght-normal-Bt-aOZkq.woff2 +0 -0
  84. package/apps/web/dist/assets/kotlin-BdnUsdx6.js +1 -0
  85. package/apps/web/dist/assets/less-B1dDrJ26.js +1 -0
  86. package/apps/web/dist/assets/lua-BaeVxFsk.js +1 -0
  87. package/apps/web/dist/assets/markdown-Cvjx9yec.js +1 -0
  88. package/apps/web/dist/assets/mdx-Cmh6b_Ma.js +1 -0
  89. package/apps/web/dist/assets/php-D_2--9WK.js +1 -0
  90. package/apps/web/dist/assets/python-B6aJPvgy.js +1 -0
  91. package/apps/web/dist/assets/ruby-DSHSDbk1.js +1 -0
  92. package/apps/web/dist/assets/rust-B1yitclQ.js +1 -0
  93. package/apps/web/dist/assets/scss-D5BDwBP9.js +1 -0
  94. package/apps/web/dist/assets/sql-CRqJ_cUM.js +1 -0
  95. package/apps/web/dist/assets/swift-C2oV4EkX.js +1 -0
  96. package/apps/web/dist/assets/toml-vGWfd6FD.js +1 -0
  97. package/apps/web/dist/assets/xml-sdJ4AIDG.js +1 -0
  98. package/apps/web/dist/assets/yaml-Buea-lGh.js +1 -0
  99. package/apps/web/dist/iconos/xonecode.png +0 -0
  100. package/apps/web/dist/index.html +20 -0
  101. package/dist/agent/agentesEnDisco.js +539 -0
  102. package/dist/agent/agentesEnDisco.js.map +1 -0
  103. package/dist/agent/arbolDeProyecto.js +245 -0
  104. package/dist/agent/arbolDeProyecto.js.map +1 -0
  105. package/dist/agent/artefactosEnDisco.js +139 -0
  106. package/dist/agent/artefactosEnDisco.js.map +1 -0
  107. package/dist/agent/aumentador.js +175 -0
  108. package/dist/agent/aumentador.js.map +1 -0
  109. package/dist/agent/authEnDisco.js +76 -1
  110. package/dist/agent/authEnDisco.js.map +1 -1
  111. package/dist/agent/busquedaRegex.js +92 -0
  112. package/dist/agent/busquedaRegex.js.map +1 -0
  113. package/dist/agent/catalogoModelos.js +345 -0
  114. package/dist/agent/catalogoModelos.js.map +1 -0
  115. package/dist/agent/checkpointer.js +127 -0
  116. package/dist/agent/checkpointer.js.map +1 -0
  117. package/dist/agent/cloudstudioClient.js +194 -0
  118. package/dist/agent/cloudstudioClient.js.map +1 -0
  119. package/dist/agent/cloudstudioMcp.js +722 -0
  120. package/dist/agent/cloudstudioMcp.js.map +1 -0
  121. package/dist/agent/configEnDisco.js +309 -11
  122. package/dist/agent/configEnDisco.js.map +1 -1
  123. package/dist/agent/consumoExterno.js +99 -0
  124. package/dist/agent/consumoExterno.js.map +1 -0
  125. package/dist/agent/descarga.js +149 -0
  126. package/dist/agent/descarga.js.map +1 -0
  127. package/dist/agent/diagnosticoDeTools.js +51 -0
  128. package/dist/agent/diagnosticoDeTools.js.map +1 -0
  129. package/dist/agent/dispositivosEnMaquina.js +596 -0
  130. package/dist/agent/dispositivosEnMaquina.js.map +1 -0
  131. package/dist/agent/escrituraDeCodex.js +134 -0
  132. package/dist/agent/escrituraDeCodex.js.map +1 -0
  133. package/dist/agent/escrituraDeOpencode.js +80 -0
  134. package/dist/agent/escrituraDeOpencode.js.map +1 -0
  135. package/dist/agent/escrituraExterna.js +742 -0
  136. package/dist/agent/escrituraExterna.js.map +1 -0
  137. package/dist/agent/gemini.js +81 -0
  138. package/dist/agent/gemini.js.map +1 -0
  139. package/dist/agent/git.js +83 -0
  140. package/dist/agent/git.js.map +1 -0
  141. package/dist/agent/gitSync.js +441 -0
  142. package/dist/agent/gitSync.js.map +1 -0
  143. package/dist/agent/hotswap.js +448 -0
  144. package/dist/agent/hotswap.js.map +1 -0
  145. package/dist/agent/instalacionEnMaquina.js +252 -0
  146. package/dist/agent/instalacionEnMaquina.js.map +1 -0
  147. package/dist/agent/instantanea.js +7 -10
  148. package/dist/agent/instantanea.js.map +1 -1
  149. package/dist/agent/interrupts.js +11 -2
  150. package/dist/agent/interrupts.js.map +1 -1
  151. package/dist/agent/juezDeTarea.js +345 -0
  152. package/dist/agent/juezDeTarea.js.map +1 -0
  153. package/dist/agent/lanzamientoEnMaquina.js +377 -0
  154. package/dist/agent/lanzamientoEnMaquina.js.map +1 -0
  155. package/dist/agent/manifiesto.js +59 -0
  156. package/dist/agent/manifiesto.js.map +1 -0
  157. package/dist/agent/memoriaDeProyecto.js +60 -0
  158. package/dist/agent/memoriaDeProyecto.js.map +1 -0
  159. package/dist/agent/modelos.js +105 -17
  160. package/dist/agent/modelos.js.map +1 -1
  161. package/dist/agent/modelosDeMotor.js +204 -0
  162. package/dist/agent/modelosDeMotor.js.map +1 -0
  163. package/dist/agent/paqueteDelProyecto.js +181 -0
  164. package/dist/agent/paqueteDelProyecto.js.map +1 -0
  165. package/dist/agent/perfiles.js +92 -31
  166. package/dist/agent/perfiles.js.map +1 -1
  167. package/dist/agent/persona.js +40 -0
  168. package/dist/agent/persona.js.map +1 -0
  169. package/dist/agent/procesosEnMaquina.js +204 -0
  170. package/dist/agent/procesosEnMaquina.js.map +1 -0
  171. package/dist/agent/proyecto.js +311 -13
  172. package/dist/agent/proyecto.js.map +1 -1
  173. package/dist/agent/puente.js +63 -6
  174. package/dist/agent/puente.js.map +1 -1
  175. package/dist/agent/resumenDeContexto.js +30 -0
  176. package/dist/agent/resumenDeContexto.js.map +1 -0
  177. package/dist/agent/resumenDeTool.js +64 -18
  178. package/dist/agent/resumenDeTool.js.map +1 -1
  179. package/dist/agent/sesionGit.js +481 -0
  180. package/dist/agent/sesionGit.js.map +1 -0
  181. package/dist/agent/settingsEnDisco.js +189 -0
  182. package/dist/agent/settingsEnDisco.js.map +1 -0
  183. package/dist/agent/subagenteCodex.js +368 -0
  184. package/dist/agent/subagenteCodex.js.map +1 -0
  185. package/dist/agent/subagenteExterno.js +423 -0
  186. package/dist/agent/subagenteExterno.js.map +1 -0
  187. package/dist/agent/subagenteOpencode.js +389 -0
  188. package/dist/agent/subagenteOpencode.js.map +1 -0
  189. package/dist/agent/subida.js +202 -0
  190. package/dist/agent/subida.js.map +1 -0
  191. package/dist/agent/tareasEnDisco.js +466 -0
  192. package/dist/agent/tareasEnDisco.js.map +1 -0
  193. package/dist/agent/turnoReal.js +663 -50
  194. package/dist/agent/turnoReal.js.map +1 -1
  195. package/dist/agent/versionEnDisco.js +48 -0
  196. package/dist/agent/versionEnDisco.js.map +1 -0
  197. package/dist/agent/xoneAgent.js +290 -49
  198. package/dist/agent/xoneAgent.js.map +1 -1
  199. package/dist/agent/zip.js +52 -0
  200. package/dist/agent/zip.js.map +1 -0
  201. package/dist/cli/acuseDeModelo.js +30 -0
  202. package/dist/cli/acuseDeModelo.js.map +1 -0
  203. package/dist/cli/aprobar.js +55 -2
  204. package/dist/cli/aprobar.js.map +1 -1
  205. package/dist/cli/config.js +9 -13
  206. package/dist/cli/config.js.map +1 -1
  207. package/dist/cli/consola.js +750 -19
  208. package/dist/cli/consola.js.map +1 -1
  209. package/dist/cli/main.js +740 -81
  210. package/dist/cli/main.js.map +1 -1
  211. package/dist/cli/markdown.js +188 -2
  212. package/dist/cli/markdown.js.map +1 -1
  213. package/dist/cli/run.js +32 -4
  214. package/dist/cli/run.js.map +1 -1
  215. package/dist/cli/stdio.js +46 -19
  216. package/dist/cli/stdio.js.map +1 -1
  217. package/dist/cli/tema.js +96 -8
  218. package/dist/cli/tema.js.map +1 -1
  219. package/dist/cli/tokens.js +29 -0
  220. package/dist/cli/tokens.js.map +1 -0
  221. package/dist/cli/tui/app.js +171 -0
  222. package/dist/cli/tui/app.js.map +1 -0
  223. package/dist/cli/tui/aprobarTui.js +80 -0
  224. package/dist/cli/tui/aprobarTui.js.map +1 -0
  225. package/dist/cli/tui/barra.js +37 -0
  226. package/dist/cli/tui/barra.js.map +1 -0
  227. package/dist/cli/tui/correrTui.js +478 -0
  228. package/dist/cli/tui/correrTui.js.map +1 -0
  229. package/dist/cli/tui/entrada.js +166 -0
  230. package/dist/cli/tui/entrada.js.map +1 -0
  231. package/dist/cli/tui/filas.js +24 -0
  232. package/dist/cli/tui/filas.js.map +1 -0
  233. package/dist/cli/tui/logo.js +49 -0
  234. package/dist/cli/tui/logo.js.map +1 -0
  235. package/dist/cli/tui/pielTui.js +14 -0
  236. package/dist/cli/tui/pielTui.js.map +1 -0
  237. package/dist/cli/tui/raton.js +126 -0
  238. package/dist/cli/tui/raton.js.map +1 -0
  239. package/dist/cli/tui/sidebar.js +86 -0
  240. package/dist/cli/tui/sidebar.js.map +1 -0
  241. package/dist/cli/tui/store.js +143 -0
  242. package/dist/cli/tui/store.js.map +1 -0
  243. package/dist/cli/tui/tarjeta.js +19 -0
  244. package/dist/cli/tui/tarjeta.js.map +1 -0
  245. package/dist/cli/tui/temaInk.js +114 -0
  246. package/dist/cli/tui/temaInk.js.map +1 -0
  247. package/dist/cli/tui/transcript.js +254 -0
  248. package/dist/cli/tui/transcript.js.map +1 -0
  249. package/dist/cli/wizardInicial.js +240 -0
  250. package/dist/cli/wizardInicial.js.map +1 -0
  251. package/dist/core/actos.js +113 -0
  252. package/dist/core/actos.js.map +1 -0
  253. package/dist/core/adjuntos.js +97 -0
  254. package/dist/core/adjuntos.js.map +1 -0
  255. package/dist/core/agentes.js +227 -0
  256. package/dist/core/agentes.js.map +1 -0
  257. package/dist/core/artefactos.js +149 -0
  258. package/dist/core/artefactos.js.map +1 -0
  259. package/dist/core/cloudstudio.js +7 -0
  260. package/dist/core/cloudstudio.js.map +1 -0
  261. package/dist/core/config.js +212 -5
  262. package/dist/core/config.js.map +1 -1
  263. package/dist/core/contextos.js +53 -1
  264. package/dist/core/contextos.js.map +1 -1
  265. package/dist/core/descargas.js +106 -0
  266. package/dist/core/descargas.js.map +1 -0
  267. package/dist/core/descriptoresDeApp.js +279 -0
  268. package/dist/core/descriptoresDeApp.js.map +1 -0
  269. package/dist/core/dispositivos.js +466 -0
  270. package/dist/core/dispositivos.js.map +1 -0
  271. package/dist/core/entrega.js +141 -0
  272. package/dist/core/entrega.js.map +1 -0
  273. package/dist/core/entrelazar.js +90 -0
  274. package/dist/core/entrelazar.js.map +1 -0
  275. package/dist/core/esqueleto.js +10 -0
  276. package/dist/core/esqueleto.js.map +1 -1
  277. package/dist/core/modelos.js +235 -3
  278. package/dist/core/modelos.js.map +1 -1
  279. package/dist/core/notify.js +27 -9
  280. package/dist/core/notify.js.map +1 -1
  281. package/dist/core/planDeSubida.js +127 -0
  282. package/dist/core/planDeSubida.js.map +1 -0
  283. package/dist/core/ports.js +189 -1
  284. package/dist/core/ports.js.map +1 -1
  285. package/dist/core/puedeLanzarse.js +239 -0
  286. package/dist/core/puedeLanzarse.js.map +1 -0
  287. package/dist/core/rutaVirtual.js +42 -0
  288. package/dist/core/rutaVirtual.js.map +1 -0
  289. package/dist/core/settings.js +246 -0
  290. package/dist/core/settings.js.map +1 -0
  291. package/dist/core/tareas.js +230 -0
  292. package/dist/core/tareas.js.map +1 -0
  293. package/dist/core/textos.js +36 -0
  294. package/dist/core/textos.js.map +1 -0
  295. package/dist/core/turno.js +56 -8
  296. package/dist/core/turno.js.map +1 -1
  297. package/dist/core/version.js +31 -0
  298. package/dist/core/version.js.map +1 -0
  299. package/dist/vendor/tokenTracking.js +22 -1
  300. package/dist/vendor/tokenTracking.js.map +1 -1
  301. package/dist/web/servidor/arranque.js +3964 -0
  302. package/dist/web/servidor/arranque.js.map +1 -0
  303. package/dist/web/servidor/consolaDeTarea.js +161 -0
  304. package/dist/web/servidor/consolaDeTarea.js.map +1 -0
  305. package/dist/web/servidor/consolaWeb.js +389 -0
  306. package/dist/web/servidor/consolaWeb.js.map +1 -0
  307. package/dist/web/servidor/corredorDeTareas.js +1119 -0
  308. package/dist/web/servidor/corredorDeTareas.js.map +1 -0
  309. package/dist/web/servidor/pielWeb.js +269 -0
  310. package/dist/web/servidor/pielWeb.js.map +1 -0
  311. package/dist/web/servidor/servidor.js +257 -0
  312. package/dist/web/servidor/servidor.js.map +1 -0
  313. package/dist/web/servidor/sesiones.js +440 -0
  314. package/dist/web/servidor/sesiones.js.map +1 -0
  315. package/dist/web/servidor/transporte.js +169 -0
  316. package/dist/web/servidor/transporte.js.map +1 -0
  317. package/dist/web/servidor/vestibulo.js +1276 -0
  318. package/dist/web/servidor/vestibulo.js.map +1 -0
  319. package/package.json +30 -8
  320. package/skills/archify/LICENSE +22 -0
  321. package/skills/archify/SKILL.md +109 -0
  322. package/skills/archify/THIRD_PARTY_NOTICES.md +56 -0
  323. package/skills/archify/assets/template.html +14787 -0
  324. package/skills/archify/bin/archify.mjs +1990 -0
  325. package/skills/archify/bin/open-artifact.mjs +86 -0
  326. package/skills/archify/bin/preview.mjs +648 -0
  327. package/skills/archify/bin/visual-check.mjs +829 -0
  328. package/skills/archify/brand-marks/README.md +31 -0
  329. package/skills/archify/brand-marks/catalog.json +131 -0
  330. package/skills/archify/delta/architecture-delta.mjs +1214 -0
  331. package/skills/archify/examples/agent-run.lifecycle.json +71 -0
  332. package/skills/archify/examples/agent-tool-call.workflow.json +94 -0
  333. package/skills/archify/examples/async-job-roundtrip.sequence.json +61 -0
  334. package/skills/archify/examples/brand-aware-delivery.architecture.json +47 -0
  335. package/skills/archify/examples/cache-miss-request.sequence.json +81 -0
  336. package/skills/archify/examples/checkout-platform.base.architecture.json +31 -0
  337. package/skills/archify/examples/checkout-platform.head.architecture.json +31 -0
  338. package/skills/archify/examples/dataflow-product-analytics.html +14898 -0
  339. package/skills/archify/examples/deployment-release.lifecycle.json +49 -0
  340. package/skills/archify/examples/event-stream.dataflow.json +57 -0
  341. package/skills/archify/examples/incident-response.workflow.json +64 -0
  342. package/skills/archify/examples/lifecycle-agent-run.html +14847 -0
  343. package/skills/archify/examples/product-analytics.dataflow.json +76 -0
  344. package/skills/archify/examples/production-deployment.architecture.json +71 -0
  345. package/skills/archify/examples/release-delivery.workflow.json +62 -0
  346. package/skills/archify/examples/sequence-cache-miss-request.html +14913 -0
  347. package/skills/archify/examples/web-app-rendered.html +14862 -0
  348. package/skills/archify/examples/web-app.architecture.json +46 -0
  349. package/skills/archify/examples/workflow-agent-tool-call-rendered.html +14904 -0
  350. package/skills/archify/migrations/workflow-v2.mjs +279 -0
  351. package/skills/archify/package.json +17 -0
  352. package/skills/archify/recipes/scenarios.mjs +391 -0
  353. package/skills/archify/references/authoring-contract.md +198 -0
  354. package/skills/archify/references/brand-marks.md +69 -0
  355. package/skills/archify/references/delivery-contract.md +116 -0
  356. package/skills/archify/references/viewer-runtime.md +45 -0
  357. package/skills/archify/renderers/architecture/grid.mjs +62 -0
  358. package/skills/archify/renderers/architecture/render-architecture.mjs +1078 -0
  359. package/skills/archify/renderers/dataflow/README.md +104 -0
  360. package/skills/archify/renderers/dataflow/render-dataflow.mjs +483 -0
  361. package/skills/archify/renderers/lifecycle/README.md +115 -0
  362. package/skills/archify/renderers/lifecycle/render-lifecycle.mjs +561 -0
  363. package/skills/archify/renderers/sequence/README.md +114 -0
  364. package/skills/archify/renderers/sequence/render-sequence.mjs +453 -0
  365. package/skills/archify/renderers/shared/brand-marks.mjs +563 -0
  366. package/skills/archify/renderers/shared/cli.mjs +218 -0
  367. package/skills/archify/renderers/shared/desktop-readability.mjs +26 -0
  368. package/skills/archify/renderers/shared/diagnostics.mjs +127 -0
  369. package/skills/archify/renderers/shared/engineering-profiles.mjs +157 -0
  370. package/skills/archify/renderers/shared/generated-brand-marks.mjs +2003 -0
  371. package/skills/archify/renderers/shared/generated-validators.mjs +13 -0
  372. package/skills/archify/renderers/shared/geometry.mjs +1423 -0
  373. package/skills/archify/renderers/shared/i18n.mjs +594 -0
  374. package/skills/archify/renderers/shared/layout-report.mjs +40 -0
  375. package/skills/archify/renderers/shared/legend.mjs +217 -0
  376. package/skills/archify/renderers/shared/output-path.mjs +321 -0
  377. package/skills/archify/renderers/shared/repository-evidence.mjs +235 -0
  378. package/skills/archify/renderers/shared/text-fit.mjs +49 -0
  379. package/skills/archify/renderers/shared/utils.mjs +232 -0
  380. package/skills/archify/renderers/shared/validator.mjs +86 -0
  381. package/skills/archify/renderers/workflow/README.md +223 -0
  382. package/skills/archify/renderers/workflow/render-workflow.mjs +35 -0
  383. package/skills/archify/renderers/workflow/workflow-compiler.mjs +4400 -0
  384. package/skills/archify/renderers/workflow/workflow-migration-geometry.mjs +144 -0
  385. package/skills/archify/schemas/README.md +211 -0
  386. package/skills/archify/schemas/architecture.schema.json +176 -0
  387. package/skills/archify/schemas/common.schema.json +115 -0
  388. package/skills/archify/schemas/dataflow.schema.json +243 -0
  389. package/skills/archify/schemas/lifecycle.schema.json +266 -0
  390. package/skills/archify/schemas/sequence.schema.json +223 -0
  391. package/skills/archify/schemas/workflow.schema.json +428 -0
  392. package/skills/archify/scripts/check-render-output.mjs +835 -0
  393. package/skills/archify/scripts/check-update.mjs +1667 -0
  394. package/skills/archify/scripts/render-examples.mjs +26 -0
  395. package/skills/archify/scripts/update-contract.mjs +182 -0
  396. package/skills/archify/skill-release.json +10 -0
  397. package/skills/artifacts-builder/SKILL.md +120 -0
  398. package/skills/artifacts-builder/reference/diagramas.md +123 -0
  399. package/skills/artifacts-builder/reference/estilo.md +123 -0
  400. package/skills/artifacts-builder/reference/exportar-pdf.md +56 -0
  401. package/skills/artifacts-builder/reference/graficas.md +22 -0
  402. package/skills/artifacts-builder/scripts/bundle_artifact.py +109 -0
  403. package/skills/artifacts-builder/scripts/validate_artifact.py +345 -0
  404. package/skills/xone-hotswap/SKILL.md +185 -0
  405. package/skills/xone-hotswap/references/comandos.md +706 -0
  406. package/skills/xone-hotswap/references/conexion-y-despliegue.md +226 -0
@@ -0,0 +1,144 @@
1
+ const TARGET_SCHEMA_VERSION = 2;
2
+
3
+ function clone(value) {
4
+ return JSON.parse(JSON.stringify(value));
5
+ }
6
+
7
+ /**
8
+ * Return the authored workflow as a schema-v2 document without its capacity
9
+ * override. The compiler can use this projection to discover the intrinsic v2
10
+ * rank plan before deciding whether an explicit viewBox needs to grow.
11
+ */
12
+ export function intrinsicWorkflow(workflow) {
13
+ const intrinsic = clone(workflow);
14
+ intrinsic.schema_version = TARGET_SCHEMA_VERSION;
15
+ intrinsic.meta = { ...intrinsic.meta };
16
+ delete intrinsic.meta.viewBox;
17
+ return intrinsic;
18
+ }
19
+
20
+ /**
21
+ * Return a schema-v2 planning projection that removes authored route geometry
22
+ * which may only become valid after its legacy X coordinates are remapped.
23
+ * Rank-affecting automatic and straight relationships remain in the projection.
24
+ */
25
+ export function planningWorkflow(workflow) {
26
+ const planned = intrinsicWorkflow(workflow);
27
+ planned.edges = planned.edges.flatMap((edge) => {
28
+ const hasRoutedGeometry = Array.isArray(edge.via)
29
+ || (edge.route && !['auto', 'straight'].includes(edge.route))
30
+ || edge.channelX !== undefined
31
+ || edge.channelY !== undefined;
32
+ if (hasRoutedGeometry) return [];
33
+
34
+ const automatic = {};
35
+ for (const property of ['id', 'from', 'to', 'variant', 'role', 'width']) {
36
+ if (edge[property] !== undefined) automatic[property] = edge[property];
37
+ }
38
+ if (edge.route === 'straight') automatic.route = 'straight';
39
+ if (edge.labelAt === undefined && edge.label !== undefined) automatic.label = edge.label;
40
+ return [automatic];
41
+ });
42
+
43
+ if (Array.isArray(planned.mainPath)) {
44
+ const projectedPairs = new Set(planned.edges.map((edge) => `${edge.from}\u0000${edge.to}`));
45
+ const projectionBreaksMainPath = planned.mainPath.some((from, index) => (
46
+ index < planned.mainPath.length - 1
47
+ && !projectedPairs.has(`${from}\u0000${planned.mainPath[index + 1]}`)
48
+ ));
49
+ if (projectionBreaksMainPath) delete planned.mainPath;
50
+ }
51
+
52
+ return planned;
53
+ }
54
+
55
+ function mappedNumber(value) {
56
+ return Number(value.toFixed(6));
57
+ }
58
+
59
+ /**
60
+ * Build a deterministic piecewise-linear mapping between corresponding legacy
61
+ * and readable rank centers. Coordinates outside the rank span are extrapolated
62
+ * using the nearest segment so explicitly authored outside corridors retain
63
+ * their relative offset.
64
+ */
65
+ export function createHorizontalRankMapper(oldColumns, newColumns) {
66
+ if (
67
+ !Array.isArray(oldColumns)
68
+ || !Array.isArray(newColumns)
69
+ || oldColumns.length !== newColumns.length
70
+ || oldColumns.length < 2
71
+ || !oldColumns.every(Number.isFinite)
72
+ || !newColumns.every(Number.isFinite)
73
+ ) {
74
+ throw new TypeError('Horizontal rank mapping requires matching finite column arrays.');
75
+ }
76
+ for (let index = 1; index < oldColumns.length; index += 1) {
77
+ if (oldColumns[index] <= oldColumns[index - 1] || newColumns[index] <= newColumns[index - 1]) {
78
+ throw new TypeError('Horizontal rank mapping requires strictly increasing columns.');
79
+ }
80
+ }
81
+
82
+ return (x) => {
83
+ if (!Number.isFinite(x)) throw new TypeError('Horizontal rank mapping requires a finite x coordinate.');
84
+ let segment = oldColumns.length - 2;
85
+ if (x <= oldColumns[0]) {
86
+ segment = 0;
87
+ } else {
88
+ for (let index = 0; index < oldColumns.length - 1; index += 1) {
89
+ if (x <= oldColumns[index + 1]) {
90
+ segment = index;
91
+ break;
92
+ }
93
+ }
94
+ }
95
+ const oldSpan = oldColumns[segment + 1] - oldColumns[segment];
96
+ const newSpan = newColumns[segment + 1] - newColumns[segment];
97
+ const ratio = (x - oldColumns[segment]) / oldSpan;
98
+ return mappedNumber(newColumns[segment] + ratio * newSpan);
99
+ };
100
+ }
101
+
102
+ /**
103
+ * Apply one horizontal coordinate mapping to every schema-v1 absolute X pin.
104
+ * The caller owns the supplied workflow; this function reports an audit trail
105
+ * for each changed coordinate in stable document order.
106
+ */
107
+ export function mapExplicitCoordinates(workflow, mapX) {
108
+ const changedCoordinates = [];
109
+ const record = (path, owner, property) => {
110
+ const from = owner[property];
111
+ const to = mapX(from);
112
+ owner[property] = to;
113
+ if (to !== from) changedCoordinates.push({ path, from, to });
114
+ };
115
+
116
+ for (const [edgeIndex, edge] of workflow.edges.entries()) {
117
+ if (Array.isArray(edge.via)) {
118
+ for (const [pointIndex, point] of edge.via.entries()) {
119
+ if (Array.isArray(point) && Number.isFinite(point[0])) {
120
+ record(`/edges/${edgeIndex}/via/${pointIndex}/0`, point, 0);
121
+ }
122
+ }
123
+ }
124
+ if (Array.isArray(edge.labelAt) && Number.isFinite(edge.labelAt[0])) {
125
+ record(`/edges/${edgeIndex}/labelAt/0`, edge.labelAt, 0);
126
+ }
127
+ if (Number.isFinite(edge.channelX)) {
128
+ record(`/edges/${edgeIndex}/channelX`, edge, 'channelX');
129
+ }
130
+ }
131
+ return changedCoordinates;
132
+ }
133
+
134
+ /**
135
+ * Construct an independently owned schema-v2 candidate with all authored
136
+ * absolute X pins mapped to the readable rank plan.
137
+ */
138
+ export function createMappedWorkflowCandidate(workflow, oldColumns, newColumns) {
139
+ const document = clone(workflow);
140
+ document.schema_version = TARGET_SCHEMA_VERSION;
141
+ const mapX = createHorizontalRankMapper(oldColumns, newColumns);
142
+ const changedCoordinates = mapExplicitCoordinates(document, mapX);
143
+ return { document, changedCoordinates };
144
+ }
@@ -0,0 +1,211 @@
1
+ # Archify JSON IR Schemas
2
+
3
+ Each typed renderer consumes a JSON intermediate representation (IR) validated
4
+ against one of the schemas in this folder before any layout work happens.
5
+
6
+ ## Files
7
+
8
+ | Schema | Governs | Structural arrays |
9
+ |--------|---------|-------------------|
10
+ | `workflow.schema.json` | `diagram_type: "workflow"` | `lanes`, `phases`, `groups`, `mainPath`, `nodes`, `edges` |
11
+ | `sequence.schema.json` | `diagram_type: "sequence"` | `participants`, `segments`, `messages`, `activations` |
12
+ | `dataflow.schema.json` | `diagram_type: "dataflow"` | `stages`, `nodes`, `flows` |
13
+ | `lifecycle.schema.json` | `diagram_type: "lifecycle"` | `lanes`, `states`, `transitions` |
14
+ | `architecture.schema.json` | `diagram_type: "architecture"` | `components`, `boundaries`, `connections` |
15
+ | `common.schema.json` | shared `$defs` only (no top-level document) | — |
16
+
17
+ Every diagram schema requires `schema_version`, `diagram_type`, `meta` (with
18
+ `title`), and its structural arrays — except `segments`, `activations`, and
19
+ `cards`, which are optional — and sets `additionalProperties: false` at every
20
+ level, so unknown fields are rejected rather than silently ignored.
21
+
22
+ Every `meta` object also accepts `animation: "trace"` for opt-in SVG/CSS motion
23
+ in generated HTML. Omit it, or set `"none"`, for the default static output.
24
+ It also accepts `locale: "en" | "zh-CN"`. The field selects the fixed Viewer
25
+ UI, renderer-owned default legend and accessibility copy, document-title
26
+ suffix, and `<html lang>` value; it does not translate authored strings.
27
+ Omitting it preserves legacy behavior and resolves to English. Unsupported
28
+ locale values fail schema validation instead of being guessed or silently
29
+ rewritten.
30
+ `visual_preset` accepts `classic` (the stable default), `signal-flow` (luminous
31
+ motion-forward presentation), `blueprint` (high-contrast engineering review),
32
+ or `editorial` (warm publication-style design review and documentation).
33
+ Presets change only viewer styling; they do not alter semantic IDs or geometry.
34
+ Sequence `meta` additionally accepts `column_fit`. The default `fixed` keeps
35
+ the historical 108px column gap and 86px participant boxes, so an authored
36
+ diagram renders at the same coordinates no matter how wide its viewBox is.
37
+ `spread` derives the gap and box width from the viewBox instead, which turns a
38
+ wide canvas into column distance and label room rather than empty space on the
39
+ right. Lane order, IDs, and message semantics are unchanged either way.
40
+
41
+ It may also include up to five guided `views`. Each view has a unique `id`, a
42
+ reader-facing `label`, a non-empty `focus` list of existing semantic node IDs,
43
+ and an optional short `note`.
44
+
45
+ ### Legend presentation contract
46
+
47
+ Every `meta` object accepts the same optional legend shape without changing
48
+ the schema version already selected for that renderer:
49
+
50
+ ```json
51
+ "legend": {
52
+ "mode": "auto",
53
+ "entries": {
54
+ "security": { "label": "restricted data", "visible": true }
55
+ }
56
+ }
57
+ ```
58
+
59
+ `mode` is `auto` (the default), `all`, or `hidden`. `auto` includes only kinds
60
+ present in typed IR; `all` includes the renderer's full stable catalog;
61
+ `hidden` removes the complete legend and takes precedence over entry overrides.
62
+ Architecture documents that omit an explicit `viewBox` size that automatic
63
+ viewBox from the same measured resolved legend footprint used for final SVG
64
+ layout. Across all renderers, legacy documents that omit `meta.legend` use a
65
+ compatibility-safe implicit `auto`: if the resolved legend cannot fit an
66
+ explicit authored viewBox without overlap, Archify omits the complete legend
67
+ instead of turning a previously valid schema-v1 document into a hard failure.
68
+ Once an author adds `meta.legend` (including explicit `mode: "auto"`), the
69
+ layout is intentional and unfit labels or bands fail with a path-prefixed
70
+ diagnostic. An entry may set a non-empty, bounded `label`, boolean `visible`,
71
+ or both.
72
+ `visible: false` removes a resolved entry and `visible: true` forces a supported
73
+ but unused kind into the visual legend. Unknown kinds and properties fail
74
+ strict validation.
75
+
76
+ Supported keys are renderer-owned:
77
+
78
+ | Renderer | `meta.legend.entries` keys |
79
+ |---|---|
80
+ | Architecture | `frontend`, `backend`, `database`, `cloud`, `security`, `messagebus`, `external` |
81
+ | Workflow | `frontend`, `backend`, `security`, `messagebus`, `database`, `cloud`, `external` |
82
+ | Sequence | `emphasis`, `return`, `security`, `dashed`, `default` |
83
+ | Dataflow | `emphasis`, `security`, `dashed`, `database`, `default` |
84
+ | Lifecycle | `start`, `active`, `waiting`, `decision`, `success`, `failure`, `neutral`, `external` |
85
+
86
+ Labels are presentation only: they do not rename the stable kind, change
87
+ nodes/relationships, or create Semantic Lens edge facts. Sequence message and
88
+ Dataflow flow-variant entries are visual keys. Component/state entries backed
89
+ by exact compiled node facts receive the interactive Semantic Legend bridge;
90
+ this includes Dataflow `database` when a real `nodes[].type: "database"` fact
91
+ exists.
92
+
93
+ Every relationship collection (`connections`, `edges`, `messages`, `flows`, and
94
+ `transitions`) accepts an optional author-controlled `id` using the shared ID
95
+ pattern. The renderer keeps its source-order runtime key separately, while the
96
+ authored ID enables a stable `#relation=<id>` viewer link that survives array
97
+ reordering. ID-less documents remain valid and their relationship pins stay
98
+ local to the current page.
99
+
100
+ Every semantic node collection (`components`, `nodes`, `participants`, and
101
+ `states`) also accepts one optional `brand`: either a canonical string returned
102
+ by `archify brands --json`, or a digest-pinned `{ "url", "sha256" }` object
103
+ returned by `archify brands capture <url> --json`. Known IDs and known-brand
104
+ domains use the bundled vector catalogue. Unknown URLs must be captured in that
105
+ explicit command before authoring; render and validate never perform an
106
+ unpinned network capture. Unsafe, unavailable, changed, or unsupported content
107
+ fails closed with a brand diagnostic. Omitted `brand` preserves the prior
108
+ output.
109
+
110
+ ## schema_version policy
111
+
112
+ Workflow supports schema versions 1 and 2. Version 1 remains the fixed-layout
113
+ compatibility contract; version 2 opts into the readable workflow compiler and
114
+ can be produced explicitly with `archify migrate workflow ... --to-schema 2`.
115
+ The other four diagram schemas keep `schema_version` pinned to `1`.
116
+
117
+ Workflow also accepts optional `semanticChecks`. `allowedRoots` and
118
+ `allowedTerminals` close the set of intentional graph sources and sinks;
119
+ `requiredEdges` requires exact authored relationships; and `requiredPaths`
120
+ requires directed reachability while allowing intermediate nodes. The compiler
121
+ evaluates these facts before layout and returns typed `workflow/*` diagnostics.
122
+ The field is additive and geometry-neutral: omitting it preserves existing
123
+ workflow behavior and including a satisfied contract does not change SVG or
124
+ layout-receipt bytes.
125
+
126
+ A file that validates today must keep validating and rendering within its
127
+ declared version throughout the 2.x release line. Additive viewer,
128
+ accessibility, and presentation improvements may enhance generated HTML, but
129
+ they must not reinterpret authored IR or turn a previously valid profile-less
130
+ v1 file into a new hard layout failure. Breaking IR changes require a new
131
+ version; additive, backwards-compatible fields do not.
132
+
133
+ ## Shared definitions (common.schema.json)
134
+
135
+ The five diagram schemas reference `common.schema.json#/$defs/...`:
136
+
137
+ - `id` — element identifiers, pattern `^[a-zA-Z][a-zA-Z0-9_-]*$`
138
+ - `point` — an `[x, y]` pair of numbers (used by `via` and `labelAt`)
139
+ - `componentType` — `frontend`, `backend`, `database`, `cloud`, `security`,
140
+ `messagebus`, `external`
141
+ - `locale` — the bounded renderer locale, `en` or `zh-CN`
142
+ - `brandMark` — one optional built-in brand ID or explicit HTTP(S) site URL
143
+ - `variant` — `default`, `emphasis`, `security`, `dashed` (sequence messages
144
+ extend this list locally with `return`)
145
+ - `legendMode` and `legendEntry` — the shared strict mode and label/visibility
146
+ override shapes used by each renderer-owned key map
147
+ - `guidedViews` — the bounded, read-only reader paths accepted by `meta.views`
148
+ - `cards` — the summary-card blocks rendered below the SVG
149
+
150
+ Lifecycle state `type` is mode-specific (`start`/`active`/`waiting`/...) and
151
+ stays in `lifecycle.schema.json`.
152
+
153
+ ## Runtime validation
154
+
155
+ At development time, `scripts/generate-validators.mjs` compiles all five
156
+ schemas with ajv's draft 2020-12 standalone generator using `strict: true` and
157
+ `allErrors: true`. The generated `renderers/shared/generated-validators.mjs`
158
+ is committed and shipped with the skill, so runtime validation has no npm or
159
+ network dependency. `renderers/shared/validator.mjs` applies the matching
160
+ standalone validator before the renderer's own layout checks.
161
+ The shared loader then checks cross-collection facts that JSON Schema cannot
162
+ express cleanly here: duplicate view IDs, duplicate focus IDs, focus IDs that do
163
+ not exist in the diagram's semantic collection, and duplicate authored
164
+ relationship IDs within the mode's relationship collection.
165
+
166
+ Architecture additionally supports opt-in, revision-pinned repository evidence.
167
+ `meta.repository` names a public GitHub URL and full commit SHA; a component may
168
+ carry one to three `sources` with repo-relative POSIX paths, optional line
169
+ ranges, and optional labels. Shape is schema-checked, then the renderer requires
170
+ `--repo-root`: the local Git origin must match, and Git must prove the commit,
171
+ blobs, and requested lines. Verified evidence is embedded outside the canonical
172
+ SVG for the Semantic Passport and Node Finder; ordinary documents and visual
173
+ exports carry no repository evidence.
174
+
175
+ ## Visual quality and engineering truth
176
+
177
+ `meta.quality_profile` and `meta.engineering_profile` answer different
178
+ questions. `quality_profile` is available in all five modes and controls how
179
+ strictly Archify judges composition. `engineering_profile` is an optional
180
+ Architecture-only semantic contract; omitting it preserves the ordinary v1
181
+ behavior.
182
+
183
+ The first engineering profile is `deployment-ownership`. Enable it only when
184
+ the user wants a fail-closed deployment review and the source facts are known.
185
+ It requires every non-external component to name an owner in `tag` and belong
186
+ to exactly one `region`; the document must contain both `region` and
187
+ `security-group` boundaries; every `database` must be inside a
188
+ `security-group`; each security group must contain members from one shared
189
+ region; and every connection whose region or security-group membership changes
190
+ must name the real crossing mechanism in `label`.
191
+
192
+ The profile validates only authored IR. It does not discover infrastructure,
193
+ infer owners, or prove that a diagram matches a live environment. If a fact is
194
+ unknown, leave the profile unset or obtain the fact instead of inventing it.
195
+
196
+ `npm test` runs the generator in check mode and fails when the committed
197
+ validators drift from their schemas.
198
+
199
+ ## Error format
200
+
201
+ Schema violations exit non-zero. Each ajv error is reported on its own line as
202
+ the instance path — annotated with the nearest enclosing element's `id` or
203
+ `label` — followed by the message and parameters:
204
+
205
+ ```text
206
+ workflow schema validation failed:
207
+ /nodes/3 (id/label: "router") must NOT have additional properties {"additionalProperty":"colour"}
208
+ ```
209
+
210
+ Schemas catch shape errors (types, enums, ranges, unknown fields); geometry
211
+ problems such as overlaps and label collisions are the renderers' job.
@@ -0,0 +1,176 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "https://github.com/tt-a1i/archify/schemas/architecture.schema.json",
4
+ "title": "Archify Architecture Diagram",
5
+ "type": "object",
6
+ "additionalProperties": false,
7
+ "required": ["schema_version", "diagram_type", "meta", "components"],
8
+ "properties": {
9
+ "schema_version": { "const": 1 },
10
+ "diagram_type": { "const": "architecture" },
11
+ "meta": {
12
+ "type": "object",
13
+ "additionalProperties": false,
14
+ "required": ["title"],
15
+ "properties": {
16
+ "title": { "type": "string", "minLength": 1 },
17
+ "locale": { "$ref": "common.schema.json#/$defs/locale" },
18
+ "subtitle": { "type": "string" },
19
+ "output": { "type": "string" },
20
+ "animation": { "$ref": "common.schema.json#/$defs/animation" },
21
+ "visual_preset": { "$ref": "common.schema.json#/$defs/visualPreset" },
22
+ "quality_profile": { "$ref": "common.schema.json#/$defs/qualityProfile" },
23
+ "engineering_profile": { "enum": ["deployment-ownership"] },
24
+ "repository": {
25
+ "type": "object",
26
+ "additionalProperties": false,
27
+ "required": ["url", "revision"],
28
+ "properties": {
29
+ "url": {
30
+ "type": "string",
31
+ "pattern": "^https://github\\.com/[A-Za-z0-9_.-]+/[A-Za-z0-9_.-]+(?:\\.git)?/?$"
32
+ },
33
+ "revision": { "type": "string", "pattern": "^[a-fA-F0-9]{40}$" }
34
+ }
35
+ },
36
+ "views": { "$ref": "common.schema.json#/$defs/guidedViews" },
37
+ "legend": {
38
+ "type": "object",
39
+ "additionalProperties": false,
40
+ "properties": {
41
+ "mode": { "$ref": "common.schema.json#/$defs/legendMode" },
42
+ "entries": {
43
+ "type": "object",
44
+ "additionalProperties": false,
45
+ "properties": {
46
+ "frontend": { "$ref": "common.schema.json#/$defs/legendEntry" },
47
+ "backend": { "$ref": "common.schema.json#/$defs/legendEntry" },
48
+ "database": { "$ref": "common.schema.json#/$defs/legendEntry" },
49
+ "cloud": { "$ref": "common.schema.json#/$defs/legendEntry" },
50
+ "security": { "$ref": "common.schema.json#/$defs/legendEntry" },
51
+ "messagebus": { "$ref": "common.schema.json#/$defs/legendEntry" },
52
+ "external": { "$ref": "common.schema.json#/$defs/legendEntry" }
53
+ }
54
+ }
55
+ }
56
+ },
57
+ "viewBox": {
58
+ "type": "array",
59
+ "prefixItems": [
60
+ { "type": "number", "minimum": 320 },
61
+ { "type": "number", "minimum": 240 }
62
+ ],
63
+ "items": false,
64
+ "minItems": 2,
65
+ "maxItems": 2
66
+ }
67
+ }
68
+ },
69
+ "layout": {
70
+ "type": "object",
71
+ "additionalProperties": false,
72
+ "required": ["mode"],
73
+ "properties": {
74
+ "mode": { "enum": ["grid"] },
75
+ "origin": { "$ref": "common.schema.json#/$defs/point" },
76
+ "cols": { "type": "integer", "minimum": 1, "maximum": 12 },
77
+ "gapX": { "type": "number", "minimum": 0 },
78
+ "gapY": { "type": "number", "minimum": 0 },
79
+ "cellW": { "type": "number", "minimum": 40 },
80
+ "cellH": { "type": "number", "minimum": 24 }
81
+ }
82
+ },
83
+ "components": {
84
+ "type": "array",
85
+ "minItems": 1,
86
+ "items": {
87
+ "type": "object",
88
+ "additionalProperties": false,
89
+ "required": ["id", "type", "label"],
90
+ "properties": {
91
+ "id": { "$ref": "common.schema.json#/$defs/id" },
92
+ "type": { "$ref": "common.schema.json#/$defs/componentType" },
93
+ "label": { "type": "string", "minLength": 1 },
94
+ "sublabel": { "type": "string" },
95
+ "tag": { "type": "string" },
96
+ "brand": { "$ref": "common.schema.json#/$defs/brandMark" },
97
+ "sources": {
98
+ "type": "array",
99
+ "minItems": 1,
100
+ "maxItems": 3,
101
+ "items": {
102
+ "type": "object",
103
+ "additionalProperties": false,
104
+ "required": ["path"],
105
+ "properties": {
106
+ "path": { "type": "string", "minLength": 1, "maxLength": 240 },
107
+ "line": { "type": "integer", "minimum": 1 },
108
+ "end_line": { "type": "integer", "minimum": 1 },
109
+ "label": { "type": "string", "minLength": 1, "maxLength": 48 }
110
+ }
111
+ }
112
+ },
113
+ "row": { "type": "integer", "minimum": 0 },
114
+ "col": { "type": "integer", "minimum": 0 },
115
+ "pos": { "$ref": "common.schema.json#/$defs/point" },
116
+ "size": {
117
+ "type": "array",
118
+ "prefixItems": [
119
+ { "type": "number", "exclusiveMinimum": 0 },
120
+ { "type": "number", "exclusiveMinimum": 0 }
121
+ ],
122
+ "items": false,
123
+ "minItems": 2,
124
+ "maxItems": 2
125
+ }
126
+ }
127
+ }
128
+ },
129
+ "boundaries": {
130
+ "type": "array",
131
+ "items": {
132
+ "type": "object",
133
+ "additionalProperties": false,
134
+ "required": ["kind", "label", "wraps"],
135
+ "properties": {
136
+ "kind": { "enum": ["region", "security-group"] },
137
+ "label": { "type": "string", "minLength": 1 },
138
+ "wraps": {
139
+ "type": "array",
140
+ "minItems": 1,
141
+ "items": { "$ref": "common.schema.json#/$defs/id" }
142
+ },
143
+ "pad": { "type": "number", "minimum": 0 }
144
+ }
145
+ }
146
+ },
147
+ "connections": {
148
+ "type": "array",
149
+ "items": {
150
+ "type": "object",
151
+ "additionalProperties": false,
152
+ "required": ["from", "to"],
153
+ "properties": {
154
+ "id": { "$ref": "common.schema.json#/$defs/id" },
155
+ "from": { "$ref": "common.schema.json#/$defs/id" },
156
+ "to": { "$ref": "common.schema.json#/$defs/id" },
157
+ "label": { "type": "string" },
158
+ "variant": { "$ref": "common.schema.json#/$defs/variant" },
159
+ "fromSide": { "$ref": "common.schema.json#/$defs/side" },
160
+ "toSide": { "$ref": "common.schema.json#/$defs/side" },
161
+ "route": { "enum": ["auto", "straight", "orthogonal-h", "orthogonal-v"] },
162
+ "via": {
163
+ "type": "array",
164
+ "items": { "$ref": "common.schema.json#/$defs/point" }
165
+ },
166
+ "labelAt": { "$ref": "common.schema.json#/$defs/point" },
167
+ "labelDx": { "type": "number" },
168
+ "labelDy": { "type": "number" },
169
+ "labelSegment": { "type": "integer", "minimum": 0 },
170
+ "width": { "$ref": "common.schema.json#/$defs/relationshipWidth" }
171
+ }
172
+ }
173
+ },
174
+ "cards": { "$ref": "common.schema.json#/$defs/cards" }
175
+ }
176
+ }
@@ -0,0 +1,115 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "https://github.com/tt-a1i/archify/schemas/common.schema.json",
4
+ "title": "Archify Shared Definitions",
5
+ "$defs": {
6
+ "id": {
7
+ "type": "string",
8
+ "pattern": "^[a-zA-Z][a-zA-Z0-9_-]*$"
9
+ },
10
+ "locale": {
11
+ "enum": ["en", "zh-CN"]
12
+ },
13
+ "animation": {
14
+ "enum": ["trace", "none"]
15
+ },
16
+ "visualPreset": {
17
+ "enum": ["classic", "signal-flow", "blueprint", "editorial"]
18
+ },
19
+ "qualityProfile": {
20
+ "enum": ["standard", "showcase"]
21
+ },
22
+ "side": {
23
+ "enum": ["left", "right", "top", "bottom"]
24
+ },
25
+ "relationshipWidth": {
26
+ "type": "number",
27
+ "minimum": 0.5
28
+ },
29
+ "point": {
30
+ "type": "array",
31
+ "prefixItems": [
32
+ { "type": "number" },
33
+ { "type": "number" }
34
+ ],
35
+ "items": false,
36
+ "minItems": 2,
37
+ "maxItems": 2
38
+ },
39
+ "componentType": {
40
+ "enum": ["frontend", "backend", "database", "cloud", "security", "messagebus", "external"]
41
+ },
42
+ "brandMark": {
43
+ "oneOf": [
44
+ {
45
+ "type": "string",
46
+ "minLength": 1,
47
+ "maxLength": 2048,
48
+ "anyOf": [
49
+ { "maxLength": 80, "pattern": "^[^\\r\\n]+$" },
50
+ { "pattern": "^https?://" }
51
+ ]
52
+ },
53
+ {
54
+ "type": "object",
55
+ "additionalProperties": false,
56
+ "required": ["url", "sha256"],
57
+ "properties": {
58
+ "url": { "type": "string", "minLength": 8, "maxLength": 2048, "pattern": "^https?://" },
59
+ "sha256": { "type": "string", "pattern": "^[a-f0-9]{64}$" }
60
+ }
61
+ }
62
+ ]
63
+ },
64
+ "variant": {
65
+ "enum": ["default", "emphasis", "security", "dashed"]
66
+ },
67
+ "legendMode": {
68
+ "enum": ["auto", "all", "hidden"]
69
+ },
70
+ "legendEntry": {
71
+ "type": "object",
72
+ "additionalProperties": false,
73
+ "minProperties": 1,
74
+ "properties": {
75
+ "label": { "type": "string", "minLength": 1, "maxLength": 80 },
76
+ "visible": { "type": "boolean" }
77
+ }
78
+ },
79
+ "guidedViews": {
80
+ "type": "array",
81
+ "maxItems": 5,
82
+ "items": {
83
+ "type": "object",
84
+ "additionalProperties": false,
85
+ "required": ["id", "label", "focus"],
86
+ "properties": {
87
+ "id": { "$ref": "#/$defs/id" },
88
+ "label": { "type": "string", "minLength": 1, "maxLength": 48 },
89
+ "focus": {
90
+ "type": "array",
91
+ "minItems": 1,
92
+ "items": { "$ref": "#/$defs/id" }
93
+ },
94
+ "note": { "type": "string", "maxLength": 140 }
95
+ }
96
+ }
97
+ },
98
+ "cards": {
99
+ "type": "array",
100
+ "items": {
101
+ "type": "object",
102
+ "additionalProperties": false,
103
+ "required": ["dot", "title", "items"],
104
+ "properties": {
105
+ "dot": { "enum": ["cyan", "emerald", "violet", "amber", "rose", "orange", "slate"] },
106
+ "title": { "type": "string", "minLength": 1 },
107
+ "items": {
108
+ "type": "array",
109
+ "items": { "type": "string" }
110
+ }
111
+ }
112
+ }
113
+ }
114
+ }
115
+ }