@xgent-ai/skills 0.7.4 → 0.7.6

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 (717) hide show
  1. package/.claude/hooks/xgent-statusline.js +32 -18
  2. package/README.md +65 -37
  3. package/bin/phoenix-diagram.js +14 -0
  4. package/bin/xgent-skills.js +259 -243
  5. package/dist/phoenix-diagram/LICENSE +21 -0
  6. package/dist/phoenix-diagram/NOTICE.md +34 -0
  7. package/dist/phoenix-diagram/THIRD-PARTY-LICENSES/005fc765ddc5115da796cca915baa9557abae13ff35e0a47c47affc56f6c414d.txt +272 -0
  8. package/dist/phoenix-diagram/THIRD-PARTY-LICENSES/010492e490b92ec85db01daad2a290ea5959f29314a1c4ff25e7a172e223abf9.txt +18 -0
  9. package/dist/phoenix-diagram/THIRD-PARTY-LICENSES/01c266bced4a434da0051174d6bee16a4c82cf634e2679b6155d40d75012390f.txt +3 -0
  10. package/dist/phoenix-diagram/THIRD-PARTY-LICENSES/0218327e7a480793ffdd4eb792379a9709e5c135c7ba267f709d6f6d4d70af0a.txt +201 -0
  11. package/dist/phoenix-diagram/THIRD-PARTY-LICENSES/02bb8c3b4e70190e3986c0404ad2fd8d639b4f534252d82379cc1b502b6d1812.txt +191 -0
  12. package/dist/phoenix-diagram/THIRD-PARTY-LICENSES/0444c6991eead6822f7b9102e654448d51624431119546492e8b231db42c48bb.txt +25 -0
  13. package/dist/phoenix-diagram/THIRD-PARTY-LICENSES/0552c898248eadfc130df0c0e8f6f82776fcb3f1dd5a5af2fa991b5baff9367a.txt +21 -0
  14. package/dist/phoenix-diagram/THIRD-PARTY-LICENSES/0ab4d106b6faac07fb6a051815fd1b4d862d730895e2d7d7358c2f13565e7a38.txt +20 -0
  15. package/dist/phoenix-diagram/THIRD-PARTY-LICENSES/0b28172679e0009b655da42797c03fd163a3379d5cfa67ba1f1655e974a2a1a9.txt +25 -0
  16. package/dist/phoenix-diagram/THIRD-PARTY-LICENSES/0d3f7c086c6b6cf3ea4aac714e9aa3e1fb02e355ce35bd21c56acf8d04390885.txt +21 -0
  17. package/dist/phoenix-diagram/THIRD-PARTY-LICENSES/0dd882e53de11566d50f8e8e2d5a651bcf3fabee4987d70f306233cf39094ba7.txt +21 -0
  18. package/dist/phoenix-diagram/THIRD-PARTY-LICENSES/0f96a83840e146e43c0ec96a22ec1f392e0680e6c1226e6f3ba87e0740af850f.txt +21 -0
  19. package/dist/phoenix-diagram/THIRD-PARTY-LICENSES/117829c3ca21efb132d81a44b55363d395ab8eea18526873bc828da4c0e5f038.txt +21 -0
  20. package/dist/phoenix-diagram/THIRD-PARTY-LICENSES/123a331b5dbf04c30097fa43b8f858bc85df671fe776de498d01f3d6b7c1f69e.txt +25 -0
  21. package/dist/phoenix-diagram/THIRD-PARTY-LICENSES/1a2f5c12ddc934d58956aa5dbdd3255fe55fd957633ab7d0d39e4f0daa73f7df.txt +26 -0
  22. package/dist/phoenix-diagram/THIRD-PARTY-LICENSES/1f256ecad192880510e84ad60474eab7589218784b9a50bc7ceee34c2b91f1d5.txt +373 -0
  23. package/dist/phoenix-diagram/THIRD-PARTY-LICENSES/1f485f0d6125658861351e3d6084ea90fefe78f89450be9915044b7c56d5a75a.txt +15 -0
  24. package/dist/phoenix-diagram/THIRD-PARTY-LICENSES/209fbbe0ad52d9235e37badf9cadfe4dbdc87203179c0899e738b39ade42177b.txt +26 -0
  25. package/dist/phoenix-diagram/THIRD-PARTY-LICENSES/20c7855c364d57ea4c97889a5e8d98470a9952dade37bd9248b9a54431670e5e.txt +25 -0
  26. package/dist/phoenix-diagram/THIRD-PARTY-LICENSES/20fe7b00e904ed690e3b9fd6073784d3fc428141dbd10b81c01fd143d0797f58.txt +176 -0
  27. package/dist/phoenix-diagram/THIRD-PARTY-LICENSES/219920e865eee70b7dcfc948a86b099e7f4fe2de01bcca2ca9a20c0a033f2b59.txt +7 -0
  28. package/dist/phoenix-diagram/THIRD-PARTY-LICENSES/23860c2a7b5d96b21569afedf033469bab9fe14a1b24a35068b8641c578ce24d.txt +7 -0
  29. package/dist/phoenix-diagram/THIRD-PARTY-LICENSES/23f18e03dc49df91622fe2a76176497404e46ced8a715d9d2b67a7446571cca3.txt +23 -0
  30. package/dist/phoenix-diagram/THIRD-PARTY-LICENSES/268872b9816f90fd8e85db5a28d33f8150ebb8dd016653fb39ef1f94f2686bc5.txt +220 -0
  31. package/dist/phoenix-diagram/THIRD-PARTY-LICENSES/27995d58ad5c1145c1a8cd86244ce844886958a35eb2b78c6b772748669999ac.txt +25 -0
  32. package/dist/phoenix-diagram/THIRD-PARTY-LICENSES/28a9529c7d0bb4dc51f4bf5c116a3d16ef247a052f7591466768ddf563fd1cf5.txt +428 -0
  33. package/dist/phoenix-diagram/THIRD-PARTY-LICENSES/29e9fe5074bd27e0e5d5d110394fbbcd841baee2651a3c4b4560a632702cede4.txt +26 -0
  34. package/dist/phoenix-diagram/THIRD-PARTY-LICENSES/30fefc3a7d6a0041541858293bcbea2dde4caa4c0a5802f996a7f7e8c0085652.txt +23 -0
  35. package/dist/phoenix-diagram/THIRD-PARTY-LICENSES/3521672491a3479422d5fe1aca6645dd2984090f85da6e5205abfb18fb7a6897.txt +25 -0
  36. package/dist/phoenix-diagram/THIRD-PARTY-LICENSES/35242e7a83f69875e6edeff02291e688c97caafe2f8902e4e19b49d3e78b4cab.txt +176 -0
  37. package/dist/phoenix-diagram/THIRD-PARTY-LICENSES/36516aefdc84c5d5a1e7485425913a22dbda69eb1930c5e84d6ae4972b5194b9.txt +23 -0
  38. package/dist/phoenix-diagram/THIRD-PARTY-LICENSES/375bdbf54d6584debb4bcc5bce1c9dcfdd581f977c9a8469113dbdf208f4c927.txt +131 -0
  39. package/dist/phoenix-diagram/THIRD-PARTY-LICENSES/378f5840b258e2779c39418f3f2d7b2ba96f1c7917dd6be0713f88305dbda397.txt +25 -0
  40. package/dist/phoenix-diagram/THIRD-PARTY-LICENSES/391a5396cec6230bfabd4ef4eb2350eb895bc5efce377a2218f5702ed020d3e3.txt +20 -0
  41. package/dist/phoenix-diagram/THIRD-PARTY-LICENSES/39712155836e5c10ef1b07037b606e4ad2d633e72205d162fdd7e2290aa54f15.txt +21 -0
  42. package/dist/phoenix-diagram/THIRD-PARTY-LICENSES/3bb1e548250b3acc43febde65a5cdba9f2e0a3288018aa41f009a3c59ffab51a.txt +390 -0
  43. package/dist/phoenix-diagram/THIRD-PARTY-LICENSES/3bc70e239e91272782006c638fc0452a714d384224f11f0923036b7be07cf9b5.txt +21 -0
  44. package/dist/phoenix-diagram/THIRD-PARTY-LICENSES/3f3d9e0024b1921b067d6f7f88deb4a60cbe7a78e76c64e3f1d7fc3b779b9d04.txt +373 -0
  45. package/dist/phoenix-diagram/THIRD-PARTY-LICENSES/3f941b3b89cf7b8370ceb83cc76d2120d471b58735d8ca60238a751a48d7f72f.txt +359 -0
  46. package/dist/phoenix-diagram/THIRD-PARTY-LICENSES/3fa4ca83dcc9237839b1bdeb2e6d16bdfb5ec0c5ce42b24694d8bbf0dcbef72c.txt +25 -0
  47. package/dist/phoenix-diagram/THIRD-PARTY-LICENSES/42fa16951ce7f24b5a467a40e5b449a1d41e662f97ca779864f053f39e097737.txt +26 -0
  48. package/dist/phoenix-diagram/THIRD-PARTY-LICENSES/4455bf75a91154108304cb283e0fea9948c14f13e20d60887cf2552449dea3b1.txt +21 -0
  49. package/dist/phoenix-diagram/THIRD-PARTY-LICENSES/451167c55c0fa447cc2d5632714f5e3c567fe4f1e1badefab2c1333852198aca.txt +542 -0
  50. package/dist/phoenix-diagram/THIRD-PARTY-LICENSES/45f522cacecb1023856e46df79ca625dfc550c94910078bd8aec6e02880b3d42.txt +25 -0
  51. package/dist/phoenix-diagram/THIRD-PARTY-LICENSES/45fd05c4865e7c350b98ad7ac50e1b15462d49af4a91e9b0c9dd933dc9a69742.txt +201 -0
  52. package/dist/phoenix-diagram/THIRD-PARTY-LICENSES/4789210f4df8abc03fce1cddd9c2ba517f184840687f2815d741de282c1aa93a.txt +228 -0
  53. package/dist/phoenix-diagram/THIRD-PARTY-LICENSES/4cada0bd02ea3692eee6f16400d86c6508bbd3bafb2b65fed0419f36d4f83e8f.txt +25 -0
  54. package/dist/phoenix-diagram/THIRD-PARTY-LICENSES/516b24e051bf5630880ebbd55c40a25ce9552ebaf8970a53e8976eb70e522406.txt +201 -0
  55. package/dist/phoenix-diagram/THIRD-PARTY-LICENSES/553fffcd9b1cb158bc3e9edc35da85ca5c3b3d7d2e61c883ebcfa8a65814b583.txt +13 -0
  56. package/dist/phoenix-diagram/THIRD-PARTY-LICENSES/5757a1f28eff735a8b5e7425478f367812d71e974530f5bedd01219480965f4a.txt +51 -0
  57. package/dist/phoenix-diagram/THIRD-PARTY-LICENSES/5b698ca13897be3afdb7174256fa1574f8c6892b8bea1a66dd6469d3fe27885a.txt +19 -0
  58. package/dist/phoenix-diagram/THIRD-PARTY-LICENSES/5e05b024f653a5ce199e77cbbbd42fb5553562ec714b819421ed0c3e552a75d7.txt +25 -0
  59. package/dist/phoenix-diagram/THIRD-PARTY-LICENSES/60a7062291b01ba068f300612cdbdc20382ac1d4934f07bcdd7167c15299f309.txt +25 -0
  60. package/dist/phoenix-diagram/THIRD-PARTY-LICENSES/62065228e42caebca7e7d7db1204cbb867033de5982ca4009928915e4095f3a3.txt +25 -0
  61. package/dist/phoenix-diagram/THIRD-PARTY-LICENSES/62c7a1e35f56406896d7aa7ca52d0cc0d272ac022b5d2796e7d6905db8a3636a.txt +176 -0
  62. package/dist/phoenix-diagram/THIRD-PARTY-LICENSES/6485b8ed310d3f0340bf1ad1f47645069ce4069dcc6bb46c7d5c6faf41de1fdb.txt +25 -0
  63. package/dist/phoenix-diagram/THIRD-PARTY-LICENSES/65f94e99ddaf4f5d1782a6dae23f35d4293a9a01444a13135a6887017d353cee.txt +25 -0
  64. package/dist/phoenix-diagram/THIRD-PARTY-LICENSES/6df43f6f4b5d4587f3d8d71e45532c688fd168afa5fe89d571cb32fa09c4ef51.txt +187 -0
  65. package/dist/phoenix-diagram/THIRD-PARTY-LICENSES/709e3175b4212f7b13aa93971c9f62ff8c69ec45ad8c6532a7e0c41d7a7d6f8c.txt +25 -0
  66. package/dist/phoenix-diagram/THIRD-PARTY-LICENSES/71674605ec4c087fe9eb534e3e4f9e26eb2e4aabcd76a29fd156c6a844d44b3d.txt +21 -0
  67. package/dist/phoenix-diagram/THIRD-PARTY-LICENSES/7365cc8878a1d7ce155a58c4ca09c3d7a6be413efa5334a80ea842912b669349.txt +25 -0
  68. package/dist/phoenix-diagram/THIRD-PARTY-LICENSES/7abd9b6960dcf7d4d0a48606a5b71bfe37d472db68d70637f3a58a56785f1621.txt +13 -0
  69. package/dist/phoenix-diagram/THIRD-PARTY-LICENSES/7b63ecd5f1902af1b63729947373683c32745c16a10e8e6292e2e2dcd7e90ae0.txt +25 -0
  70. package/dist/phoenix-diagram/THIRD-PARTY-LICENSES/7ca6700600dfa9c9497bf5556365067daa802c871ea78239f129309c7a2048f7.txt +21 -0
  71. package/dist/phoenix-diagram/THIRD-PARTY-LICENSES/7cfafc877eccc46c0e346ccbaa5c51bb6b894d2b818e617d970211e232785ad4.txt +15 -0
  72. package/dist/phoenix-diagram/THIRD-PARTY-LICENSES/7e12e5df4bae12cb21581ba157ced20e1986a0508dd10d0e8a4ab9a4cf94e85c.txt +24 -0
  73. package/dist/phoenix-diagram/THIRD-PARTY-LICENSES/7e5886959f67f8c75063a9d55cd3cb08c5a8cbea9a944fa1df2d4ae038f53721.txt +21 -0
  74. package/dist/phoenix-diagram/THIRD-PARTY-LICENSES/7fea0ee51a4ca5d5cea7464135fd55e8b09caf3a61da3d451ac8a22af95c033f.txt +20 -0
  75. package/dist/phoenix-diagram/THIRD-PARTY-LICENSES/8173d5c29b4f956d532781d2b86e4e30f83e6b7878dce18c919451d6ba707c90.txt +201 -0
  76. package/dist/phoenix-diagram/THIRD-PARTY-LICENSES/83c1763356e822adde0a2cae748d938a73fdc263849ccff6b27776dff213bd32.txt +24 -0
  77. package/dist/phoenix-diagram/THIRD-PARTY-LICENSES/86dd7f026f916daf7511e39951ad8ea8cf55a8db67ae64060dacf829761c18f3.txt +25 -0
  78. package/dist/phoenix-diagram/THIRD-PARTY-LICENSES/8a35369f3ca263b3c62fbb5032947e53b6bfebc6c8a4d1bb982de1c069f6fba5.txt +21 -0
  79. package/dist/phoenix-diagram/THIRD-PARTY-LICENSES/8b43ce8accd61e9d370b5ca9e9c4f953279b5c239926c62315b40e24df51b726.txt +25 -0
  80. package/dist/phoenix-diagram/THIRD-PARTY-LICENSES/8bb1b50b0e5c9399ae33bd35fab2769010fa6c14e8860c729a52295d84896b7a.txt +201 -0
  81. package/dist/phoenix-diagram/THIRD-PARTY-LICENSES/8bce3b45e49ecd1461f223b46de133d8f62cd39f745cfdaf81bee554b908bd42.txt +21 -0
  82. package/dist/phoenix-diagram/THIRD-PARTY-LICENSES/8c7516d4b27b1e495be5e38b612298b63de48d05f49cdac94f70f3cd70f8864b.txt +25 -0
  83. package/dist/phoenix-diagram/THIRD-PARTY-LICENSES/9046848b63a5c92bff14e4accca80bd987e0623b74adf9226ce5198d312b79d5.txt +30 -0
  84. package/dist/phoenix-diagram/THIRD-PARTY-LICENSES/90eb64f0279b0d9432accfa6023ff803bc4965212383697eee27a0f426d5f8d5.txt +12 -0
  85. package/dist/phoenix-diagram/THIRD-PARTY-LICENSES/9117d922e667125508dde62b02c1f57ed22f5ad21eb536aa2e2d99e1c796e639.txt +25 -0
  86. package/dist/phoenix-diagram/THIRD-PARTY-LICENSES/9387c2d197e2370a740ca457dae1662c56de56b811ee4862024343961307f9bf.txt +19 -0
  87. package/dist/phoenix-diagram/THIRD-PARTY-LICENSES/946c9835d8034d24404f8cfec5f4654cee5dad17e944afc3d06d742cf2882831.txt +240 -0
  88. package/dist/phoenix-diagram/THIRD-PARTY-LICENSES/95bd3988beee069fa2848f648dab43cc6e0b2add2ad6bcb17360caf749802bcc.txt +176 -0
  89. package/dist/phoenix-diagram/THIRD-PARTY-LICENSES/9ba9550ad48438d0836ddab3da480b3b69ffa0aac7b7878b5a0039e7ab429411.txt +396 -0
  90. package/dist/phoenix-diagram/THIRD-PARTY-LICENSES/9d185ac6703c4b0453974c0d85e9eee43e6941009296bb1f5eb0b54e2329e9f3.txt +202 -0
  91. package/dist/phoenix-diagram/THIRD-PARTY-LICENSES/9e0dfd2dd4173a530e238cb6adb37aa78c34c6bc7444e0e10c1ab5d8881f63ba.txt +25 -0
  92. package/dist/phoenix-diagram/THIRD-PARTY-LICENSES/9f2ae19ef94ba82887729a4a1617ff25eede56611dd21a4b2c6f797df30fca33.txt +2013 -0
  93. package/dist/phoenix-diagram/THIRD-PARTY-LICENSES/9fa38f610a00115dd1f612bdd3559e3b381ea579538b6ff25a5899da250a5fce.txt +21 -0
  94. package/dist/phoenix-diagram/THIRD-PARTY-LICENSES/a00511478c83ebb464ef19d840f061c7444adc4636bb561900e75c5808cfc6cc.txt +21 -0
  95. package/dist/phoenix-diagram/THIRD-PARTY-LICENSES/a2010f343487d3f7618affe54f789f5487602331c0a8d03f49e9a7c547cf0499.txt +121 -0
  96. package/dist/phoenix-diagram/THIRD-PARTY-LICENSES/a5dea80c1f383cb5f80a6bb0da5e55a2beb9f24adb123ce6300af2cbaaa3bf65.txt +19 -0
  97. package/dist/phoenix-diagram/THIRD-PARTY-LICENSES/a60eea817514531668d7e00765731449fe14d059d3249e0bc93b36de45f759f2.txt +201 -0
  98. package/dist/phoenix-diagram/THIRD-PARTY-LICENSES/a825bd853ab71619a4923d7b4311221427848070ff44d990da39b0b274c1683f.txt +21 -0
  99. package/dist/phoenix-diagram/THIRD-PARTY-LICENSES/a9040321c3712d8fd0b09cf52b17445de04a23a10165049ae187cd39e5c86be5.txt +201 -0
  100. package/dist/phoenix-diagram/THIRD-PARTY-LICENSES/aaff376532ea30a0cd5330b9502ad4a4c8bf769c539c87ffe78819d188a18ebf.txt +201 -0
  101. package/dist/phoenix-diagram/THIRD-PARTY-LICENSES/ae9baa7beea910273c2f384c2a6b721fb7bd02bda3436074a1072e4ee689f985.txt +25 -0
  102. package/dist/phoenix-diagram/THIRD-PARTY-LICENSES/b1181a40b2a7b25cf66fd01481713bc1005df082c53ef73e851e55071b102744.txt +19 -0
  103. package/dist/phoenix-diagram/THIRD-PARTY-LICENSES/b38f11f6096706e6de553dabe2a7ed142d59b6fa8c97e290c67496154745cdd5.txt +25 -0
  104. package/dist/phoenix-diagram/THIRD-PARTY-LICENSES/b3d734001a94efff3579978d953391aa7115f877657d25eb54037a43875d078a.txt +9 -0
  105. package/dist/phoenix-diagram/THIRD-PARTY-LICENSES/b40930bbcf80744c86c46a12bc9da056641d722716c378f5659b9e555ef833e1.txt +201 -0
  106. package/dist/phoenix-diagram/THIRD-PARTY-LICENSES/b4eb00df6e2a4d22518fcaa6a2b4646f249b3a3c9814509b22bd2091f1392ff1.txt +27 -0
  107. package/dist/phoenix-diagram/THIRD-PARTY-LICENSES/b68ad1a3367b825447089e1f8d6829b97f47a89eb78d2f4ebaef4672f5606186.txt +22 -0
  108. package/dist/phoenix-diagram/THIRD-PARTY-LICENSES/b7e650f3fce5c53249d1cdc608b54df156a97edd636cf9d23498d0cfe7aec63e.txt +19 -0
  109. package/dist/phoenix-diagram/THIRD-PARTY-LICENSES/c09aae9d3c77b531f56351a9947bc7446511d6b025b3255312d3e3442a9a7583.txt +21 -0
  110. package/dist/phoenix-diagram/THIRD-PARTY-LICENSES/c16f8dcf1a368b83be78d826ea23de4079fe1b4469a0ab9ee20563f37ff3d44b.txt +201 -0
  111. package/dist/phoenix-diagram/THIRD-PARTY-LICENSES/c2cfccb812fe482101a8f04597dfc5a9991a6b2748266c47ac91b6a5aae15383.txt +21 -0
  112. package/dist/phoenix-diagram/THIRD-PARTY-LICENSES/c30152c94a6d75e021adbc52b3a52470366a46edb917e17deae3259251af244c.txt +42 -0
  113. package/dist/phoenix-diagram/THIRD-PARTY-LICENSES/c394e3bda1f3b9378f30a7cab11242887eeeafc73c7bef36a0fe13e09691e18b.txt +17 -0
  114. package/dist/phoenix-diagram/THIRD-PARTY-LICENSES/c71d239df91726fc519c6eb72d318ec65820627232b2f796219e87dcf35d0ab4.txt +201 -0
  115. package/dist/phoenix-diagram/THIRD-PARTY-LICENSES/c962ee4d1d05ddc138b202b2540219ebc57893fcf97b364852094a9a94ce1365.txt +7 -0
  116. package/dist/phoenix-diagram/THIRD-PARTY-LICENSES/c9a75f18b9ab2927829a208fc6aa2cf4e63b8420887ba29cdb265d6619ae82d5.txt +25 -0
  117. package/dist/phoenix-diagram/THIRD-PARTY-LICENSES/cfc7749b96f63bd31c3c42b5c471bf756814053e847c10f3eb003417bc523d30.txt +202 -0
  118. package/dist/phoenix-diagram/THIRD-PARTY-LICENSES/d1fc1bc0d155df60b2e7705b6b2ae02a05c96f948e1cec6e2fb86360b09f346b.txt +29 -0
  119. package/dist/phoenix-diagram/THIRD-PARTY-LICENSES/d5c22aa3118d240e877ad41c5d9fa232f9c77d757d4aac0c2f943afc0a95e0ef.txt +25 -0
  120. package/dist/phoenix-diagram/THIRD-PARTY-LICENSES/d5fca2653c88ad02d197faead77e22b80c70636b5bec6e02f2805f389a21b86d.txt +10 -0
  121. package/dist/phoenix-diagram/THIRD-PARTY-LICENSES/db11fec9946737df39ca3898d9cd8c10ec6f6c3a884a6802b0ad0b81b4e8f23a.txt +1 -0
  122. package/dist/phoenix-diagram/THIRD-PARTY-LICENSES/dc91f8200e4b2a1f9261035d4c18c33c246911a6c0f7b543d75347e61b249cff.txt +25 -0
  123. package/dist/phoenix-diagram/THIRD-PARTY-LICENSES/ddea4e94a1c35ed9826e54e13a5b50b8f81b21665a00ca07c8861f1859e56b6b.txt +14 -0
  124. package/dist/phoenix-diagram/THIRD-PARTY-LICENSES/e271993808fec50ab29350b39539cdec611a9103f827e0aa26d61da70e2d33f8.txt +61 -0
  125. package/dist/phoenix-diagram/THIRD-PARTY-LICENSES/e66c269d4819aaab34b49ef5220c4ddab6756f21bb5180761a4eb8561f2b7bbd.txt +438 -0
  126. package/dist/phoenix-diagram/THIRD-PARTY-LICENSES/ecc269ef87fd38a1d98e30bfac9ba964a9dbd9315c3770fed98d4d7cb5882055.txt +25 -0
  127. package/dist/phoenix-diagram/THIRD-PARTY-LICENSES/efcfee7981ff72431fffb06925cad00a23dce079ed4354f61030ad5abdb78829.txt +22 -0
  128. package/dist/phoenix-diagram/THIRD-PARTY-LICENSES/f025ccfb7dfb6bdfedc75ca0f67acc69e6fb4998143d834f7c2f38a29989680f.txt +13 -0
  129. package/dist/phoenix-diagram/THIRD-PARTY-LICENSES/f367c1b8e1aa262435251e442901da4607b4650e0e63a026f5044473ecfb90f2.txt +46 -0
  130. package/dist/phoenix-diagram/THIRD-PARTY-LICENSES/f51ac2c59a222f7476ce507ca879960e2b64ea64bb2786eefdbeb7b0b538d1b7.txt +25 -0
  131. package/dist/phoenix-diagram/THIRD-PARTY-LICENSES/f7715d38a3fa1b4ac97c5729740752505a39cb92ee83ab5b102aeb5eaa7cdea4.txt +25 -0
  132. package/dist/phoenix-diagram/THIRD-PARTY-LICENSES/f7db81051789b729fea528a63ec4c938fdcb93d9d61d97dc8cc2e9df6d47f2a1.txt +39 -0
  133. package/dist/phoenix-diagram/THIRD-PARTY-LICENSES/f9c4c77baa3828004ee54b8a4f2db2e88ed44a6237a493965bf551fac0fcb62d.txt +17 -0
  134. package/dist/phoenix-diagram/THIRD-PARTY-LICENSES/fab3dd6bdab226f1c08630b1dd917e11fcb4ec5e1e020e2c16f83a0a13863e85.txt +373 -0
  135. package/dist/phoenix-diagram/THIRD-PARTY-LICENSES/fb77f0a9c53e473abe5103c8632ef9f0f2874d4fb3f17cb2d8c661aab9cee9d7.txt +25 -0
  136. package/dist/phoenix-diagram/THIRD-PARTY-LICENSES/ff8f68cb076caf8cefe7a6430d4ac086ce6af2ca8ce2c4e5a2004d4552ef52a2.txt +25 -0
  137. package/dist/phoenix-diagram/THIRD-PARTY-LICENSES/ff92bed461f50338dd703a9ba9aee496a425957873df1d91192776e4bdf5dda7.txt +74 -0
  138. package/dist/phoenix-diagram/THIRD-PARTY-LICENSES/rust-std-1.99.1/COPYRIGHT-library.html +29357 -0
  139. package/dist/phoenix-diagram/THIRD-PARTY-LICENSES/rust-std-1.99.1/licenses/Apache-2.0.txt +73 -0
  140. package/dist/phoenix-diagram/THIRD-PARTY-LICENSES/rust-std-1.99.1/licenses/BSD-2-Clause.txt +9 -0
  141. package/dist/phoenix-diagram/THIRD-PARTY-LICENSES/rust-std-1.99.1/licenses/CC-BY-SA-4.0.txt +427 -0
  142. package/dist/phoenix-diagram/THIRD-PARTY-LICENSES/rust-std-1.99.1/licenses/GCC-exception-3.1.txt +30 -0
  143. package/dist/phoenix-diagram/THIRD-PARTY-LICENSES/rust-std-1.99.1/licenses/GPL-2.0-only.txt +133 -0
  144. package/dist/phoenix-diagram/THIRD-PARTY-LICENSES/rust-std-1.99.1/licenses/GPL-3.0-or-later.txt +202 -0
  145. package/dist/phoenix-diagram/THIRD-PARTY-LICENSES/rust-std-1.99.1/licenses/ISC.txt +7 -0
  146. package/dist/phoenix-diagram/THIRD-PARTY-LICENSES/rust-std-1.99.1/licenses/LLVM-exception.txt +15 -0
  147. package/dist/phoenix-diagram/THIRD-PARTY-LICENSES/rust-std-1.99.1/licenses/MIT.txt +9 -0
  148. package/dist/phoenix-diagram/THIRD-PARTY-LICENSES/rust-std-1.99.1/licenses/NCSA.txt +29 -0
  149. package/dist/phoenix-diagram/THIRD-PARTY-LICENSES/rust-std-1.99.1/licenses/OFL-1.1.txt +43 -0
  150. package/dist/phoenix-diagram/THIRD-PARTY-LICENSES/rust-std-1.99.1/licenses/Unicode-3.0.txt +39 -0
  151. package/dist/phoenix-diagram/THIRD-PARTY-NOTICES.md +210 -0
  152. package/dist/phoenix-diagram/THIRD-PARTY.json +5459 -0
  153. package/dist/phoenix-diagram/VERSION.json +39 -0
  154. package/dist/phoenix-diagram/bundle/ENGINE.json +39 -0
  155. package/dist/phoenix-diagram/bundle/SKILL.md +109 -0
  156. package/dist/phoenix-diagram/bundle/examples/minimal.architecture.json +11 -0
  157. package/dist/phoenix-diagram/bundle/examples/minimal.class.json +23 -0
  158. package/dist/phoenix-diagram/bundle/examples/minimal.dataflow.json +11 -0
  159. package/dist/phoenix-diagram/bundle/examples/minimal.erd.json +25 -0
  160. package/dist/phoenix-diagram/bundle/examples/minimal.lifecycle.json +11 -0
  161. package/dist/phoenix-diagram/bundle/examples/minimal.sequence.json +13 -0
  162. package/dist/phoenix-diagram/bundle/examples/minimal.timeline.json +15 -0
  163. package/dist/phoenix-diagram/bundle/examples/minimal.tree.json +13 -0
  164. package/dist/phoenix-diagram/bundle/examples/minimal.waterfall.json +12 -0
  165. package/dist/phoenix-diagram/bundle/examples/minimal.workflow.json +12 -0
  166. package/dist/phoenix-diagram/bundle/manifest.json +253 -0
  167. package/dist/phoenix-diagram/bundle/references/architecture-compare.md +111 -0
  168. package/dist/phoenix-diagram/bundle/references/authoring-defaults.md +42 -0
  169. package/dist/phoenix-diagram/bundle/references/brand-marks.md +52 -0
  170. package/dist/phoenix-diagram/bundle/references/compatibility.md +22 -0
  171. package/dist/phoenix-diagram/bundle/references/delivery-contract.md +127 -0
  172. package/dist/phoenix-diagram/bundle/references/extending-types.md +14 -0
  173. package/dist/phoenix-diagram/bundle/references/migration.md +57 -0
  174. package/dist/phoenix-diagram/bundle/references/preview.md +45 -0
  175. package/dist/phoenix-diagram/bundle/references/repository-authoring.md +29 -0
  176. package/dist/phoenix-diagram/bundle/references/viewer-runtime.md +27 -0
  177. package/dist/phoenix-diagram/bundle/schemas/README.md +23 -0
  178. package/dist/phoenix-diagram/bundle/schemas/architecture.schema.json +329 -0
  179. package/dist/phoenix-diagram/bundle/schemas/class.schema.json +348 -0
  180. package/dist/phoenix-diagram/bundle/schemas/common.schema.json +358 -0
  181. package/{skills/archify → dist/phoenix-diagram/bundle}/schemas/dataflow.schema.json +36 -8
  182. package/dist/phoenix-diagram/bundle/schemas/erd.schema.json +384 -0
  183. package/dist/phoenix-diagram/bundle/schemas/lifecycle.schema.json +202 -0
  184. package/{skills/archify → dist/phoenix-diagram/bundle}/schemas/sequence.schema.json +41 -10
  185. package/dist/phoenix-diagram/bundle/schemas/timeline.schema.json +170 -0
  186. package/dist/phoenix-diagram/bundle/schemas/tree.schema.json +144 -0
  187. package/dist/phoenix-diagram/bundle/schemas/waterfall.schema.json +150 -0
  188. package/{skills/archify → dist/phoenix-diagram/bundle}/schemas/workflow.schema.json +42 -10
  189. package/dist/phoenix-diagram/bundle/scripts/phoenix-bootstrap.cjs +589 -0
  190. package/dist/phoenix-diagram/bundle/scripts/phoenix-diagram +6 -0
  191. package/dist/phoenix-diagram/bundle/scripts/phoenix-launcher.cjs +10 -0
  192. package/dist/phoenix-ui/THIRD-PARTY.json +164 -158
  193. package/dist/phoenix-ui/VERSION.json +17 -17
  194. package/dist/phoenix-ui/bundle/blobs/00727f7b333a7be8ac7740aa257a3a3f691db8ae545a6afab2b787acab5e88df +46 -0
  195. package/dist/phoenix-ui/bundle/blobs/{8b1723fb51e6aad9bfc0bc5ba8e09b5a373b0e33c251331f6ca14ff6b1c261ef → 00f4a6a630f31eb05fbdd5725e4a294233d24574bd70f4f32f4597d8256a7c1c} +2 -5
  196. package/dist/phoenix-ui/bundle/blobs/{41400e182e2180a567923d58bfa935d2799a54f2a747b2c5813c3884c84f768b → 04057592e18ea9dd3c4edcac14cde3fa5b75239c2552d4459db8e047068f61a8} +6 -7
  197. package/dist/phoenix-ui/bundle/blobs/{34571f7d46632205d518d15cb008457494dfad745c6b483bb11d63ca3a22ac48 → 0cb3bf26e1980b0e530373fb32edbe5864a171492a04e2abe1952ffe78bff231} +6 -7
  198. package/dist/phoenix-ui/bundle/blobs/{3133bec6998506bf92baeeabba39438c5ee27aa3330c2e6245f9df216fbe7b2d → 0e684572eb98d24b39cd70fa23e66c163178f5a11756dcf8a98fe2335636b33f} +6 -3
  199. package/dist/phoenix-ui/bundle/blobs/{d17b3a454146e74ef4ecf69d7b72a8fa45c4fe1c695dffb0d36690b653cd2d8f → 10553c45c7bf38e527a57a281c4365152a768b4dd7ef597ff34ae841e9ff7d41} +6 -7
  200. package/dist/phoenix-ui/bundle/blobs/{b544da38492c15f5295053b64189a9ec5ebe446c77138ac52ca7bd9da9c0e842 → 125bc7030d7f2ba789d7b1d5f474af34f8902b764e7bc351b98f1f6f55779929} +6 -3
  201. package/dist/phoenix-ui/bundle/blobs/{74dbcbbad6c3831e95abb38775dd488c59ae9f1d44a95f5fd4bc0051577488fa → 13cf6c054ed424e2eb639ea12d20a4aa2b1c85eeb00afa8cbd8a30c6c22aadd8} +1 -1
  202. package/dist/phoenix-ui/bundle/blobs/1832ff9624cebd30370eb0e806665c656ac879215f93d33bcc0750baa47459dc +46 -0
  203. package/dist/phoenix-ui/bundle/blobs/{8e7de5ca347036a07f5f1e9cab942d8ff378d029bc101fa6d126406f3298c9db → 1864a10c29e7062cca5e49d1790dc7d9d8ea777bfa2ab6fd941635965cd0084d} +1 -1
  204. package/dist/phoenix-ui/bundle/blobs/{784722b72224a7005a80cdcd6408dd2b25b23fd9619d0f6c8788f7ac681fad4c → 1ecc81de39d28b85b95e797bcc338d4213a50231c3315a741d14571fd22c844f} +6 -7
  205. package/dist/phoenix-ui/bundle/blobs/{b8c614dc7c2eb30ee0f864fec116dbcafb39e5a199dce66d0c1a88b13f76265a → 2079e4146039a8dadf19a39237cbdc0b8b54ea1fa16d320716c2cbf58161c835} +1 -1
  206. package/dist/phoenix-ui/bundle/blobs/{dba6e4a09c5d752e5ddebe7c2c1aefc9c4b2a84e01a3178599579778ed2d09e9 → 2813aa68c0804a7fe061d88201d8a684cac9987b48511e1e2cbfe0a869a67a82} +6 -7
  207. package/dist/phoenix-ui/bundle/blobs/{2889c2817b5079abff254bb6d13f92dbde0fabc38be4acc7d20e613eef5e5829 → 2873e340be947c83c3d03520139b73524fd166a34063d2693d3b711021ea5b87} +6 -7
  208. package/dist/phoenix-ui/bundle/blobs/{64c4aa2d1c24ae5028e987498ac544020d48600a51d9654b2df562681ba480f2 → 298ef41899acefa056eccf2345378078832db6d868d2377f471f896d5c1599f9} +6 -14
  209. package/dist/phoenix-ui/bundle/blobs/{1b7174a6f3f49a8efc8f7fa74ff84cf8960e2646b9bc976e4129a7c8ad608faa → 2b5cef2a14a5b1256ec6de9172a4f57f227948ced1921ef86e899f48524d7fb8} +1 -1
  210. package/dist/phoenix-ui/bundle/blobs/{f148f630f43f3c91cf10feeda5a3c21448ca0683ce82d0fe763c1b43dee584d6 → 2d376cbbf7ec1e262614aac4f1b200e8f60e86e940c7137a2a26788bc857e509} +6 -7
  211. package/dist/phoenix-ui/bundle/blobs/2e5985a6eb339d70cfa25f6d2b420a0ef286caa8467f0226eb841702ec438d0b +46 -0
  212. package/dist/phoenix-ui/bundle/blobs/{7e199833376de5d2b6e088ee2965b448f94da842f28ccbd707e1cc3a295147c8 → 3322d691bf7b578b38723576df6b266993b2afb9e567b0cd1ded898ffe1dc17e} +1 -1
  213. package/dist/phoenix-ui/bundle/blobs/{6530364f99c98b9ae9a8f9f3d34866a6393a75e75db48d8c0cbb49dd93a69f81 → 3625c5c2750f117021232ce81c1e39ac5ef7c21445729327b88cf54dfc937df0} +6 -3
  214. package/dist/phoenix-ui/bundle/blobs/{335ccd78685b679dc0c880fc46139d0fa94aebcfa6e5ff848fd0599b187d25c4 → 36310febe3e7bd4c9b21407603f2a04afefdc87b7821758bb47098b1b2876765} +6 -3
  215. package/dist/phoenix-ui/bundle/blobs/{24d92a176573768bfffaf8f9c6483e58bceb5bf2a095d1cdf3d3a2c0bcda0707 → 3a9c2daf4ef284ca83b0e7f6fef3a5300e273c32b20769e090463cb8a8b0b06f} +1 -1
  216. package/dist/phoenix-ui/bundle/blobs/{153e377c44b162cf0074698a61716db7f664db78f5635efa926bed484de4f54c → 3ce1a44efe39b93e7a39307c6a5e5f514e938fbae818e358986b4db1b05883ca} +1 -1
  217. package/dist/phoenix-ui/bundle/blobs/{ad8ad0b7acf6c88ef9ce0ee1a640c2200da77821f0d97d605d4f1d4a10e5897a → 403fcde498d75abec7844ee31434201152ac229f7675772164d69563f0572da4} +1 -1
  218. package/dist/phoenix-ui/bundle/blobs/{e8ee6c08e94b80324173d89d6f4cdc5b4829ea6858b3a11fc186588a490cada4 → 45d0e7eff0923c40296e971318756617944c4f1c97f03126cd74c0f8c629f8a4} +3 -1
  219. package/dist/phoenix-ui/bundle/blobs/{e23dabf908842be08751fc4e7f3b586e8c6b1ca0fc30303ec5317c77f83dcf26 → 4c0f396bfa85171f61972d3f3765733318769bb53fe06d2cdcb5d7f64578b5b8} +1 -1
  220. package/dist/phoenix-ui/bundle/blobs/{a5517d32c1539c388c47c00879a0d807ed2989647bfa8c0844ef22328f75f5be → 4f6563876e0e0cc51c38a06767b8800eb3238611e9fdd11e5ff9dd487c742e74} +1 -1
  221. package/dist/phoenix-ui/bundle/blobs/{a9d2203acd45ca33a13d5c68b02b23ed512425ac15f0e8438318ed124b43729d → 4fcada229d0c689c1a493d13184145a81ff40c498e882142ae390bda8e5b2492} +15 -0
  222. package/dist/phoenix-ui/bundle/blobs/5293adc55cf66068b6df20468ad9e91433fd1c48e75d66c86f874aca951a8fb9 +46 -0
  223. package/dist/phoenix-ui/bundle/blobs/{96e2e6bd4fcf9a2c6da65fb029f96d9176308fae2efd9d8653d3b8d838960e07 → 5436f0301ec258f3badcc6842019ee29a9b870d2727dc425fbc9cc0f4f88a284} +3 -1
  224. package/dist/phoenix-ui/bundle/blobs/{d0f4939e86a62b0ca437d51a997ceba7e77d64566b7fa8ca2747487e31ca819d → 54a09a4afdffca3cc135e5007716ea684dc1ed7a78349de859225c55a2fed810} +6 -7
  225. package/dist/phoenix-ui/bundle/blobs/{d9f1d8e01b40a8d7310e367f7e3da7d1fac5850313082feb853093b7eb36d2bd → 55277fa15eb4bd2f09bf7bb24c4e79df417b06654b1e10f502c7928b192fd7cc} +6 -3
  226. package/dist/phoenix-ui/bundle/blobs/{3759780bd25526f7eaa3793c010356bccb850d40db931e0c6d47d35e81e96f96 → 567c3f42394f9aee9b048a001016a7ba9d8773d78027f8c995c379886634e719} +6 -3
  227. package/dist/phoenix-ui/bundle/blobs/57c8f33a7401f918566b8a4883871a69ef2223438c51f158c67f69e3250be465 +46 -0
  228. package/dist/phoenix-ui/bundle/blobs/{5f5fc6bb04605feb7ac6f6b19e35ff2f8d39e11a89fdd260159c6829f27b4a4d → 61450dbef64859e3136cd17ae3e997134d5df5721d96985c4e07367f38522129} +6 -3
  229. package/dist/phoenix-ui/bundle/blobs/{e3c1e925be0b2deb0e3765b83ab94b86560292364f275e98bb23a8bdf2c2e049 → 656bbfda3e72b40d53b5832293dc8700ad8a784e804a6246271bf0ea23527822} +1 -1
  230. package/dist/phoenix-ui/bundle/blobs/{b49cdd7f125d9cb5ce10de7d39c5e3daff7d6649b9ac1c5ffd36a0aebdc4e7ca → 68b454a99ba72c3b9b93ed96c4267847297169f6a5bf321b20e60d637c271068} +6 -3
  231. package/dist/phoenix-ui/bundle/blobs/68e44832c82b873b0aeb2da56def7b1de5f612c019445e5e28238c690124cbbe +46 -0
  232. package/dist/phoenix-ui/bundle/blobs/{ec8968ee6a8e42b952e5ece2369ba69f40185c62a135ed54e930df3170421d9c → 6b8d4c71355429a0b16bf367163fea46103a0a99b4e34f87608a39d85b1b980a} +6 -3
  233. package/dist/phoenix-ui/bundle/blobs/{264815d0080e4862715a4f82542e66241c6563f07259d32aed4a17bbc329b9cc → 6cef874722442de7c60ea96f4221dc54cc4250a270cd05a1e818b58c5b43e232} +6 -7
  234. package/dist/phoenix-ui/bundle/blobs/{2028a857c0476324a4256faf66693e2a869275e53a88d2b182a28b62c2a17893 → 7181f1f4c452c4345695f9100f6deb610f54f4c55f126043433a65b8491fc680} +6 -7
  235. package/dist/phoenix-ui/bundle/blobs/{ccb76aabba47938d518a5d46a09d7e70c4a9222bc391e163763f2a7f12d30437 → 75850a8c9d2a8259f71ef1f86dd5d1325415227c1887e81a3467ae1ee400979f} +1 -1
  236. package/dist/phoenix-ui/bundle/blobs/{4b03cdb5b17d534b5c7e84b079c066f59e8b60b9e454671a453867c4aeb9920d → 77bcc6c2d6ac00a8bfead3b6c6b5fc69f4b60bf086ebbc89271e1b23003168c9} +1 -1
  237. package/dist/phoenix-ui/bundle/blobs/{9520e25a381c82af6f46e175b7c347d1dc513d933dd6cf8c52570c72abb4ca7f → 792552563745d208594cf4ade19110f2c811a0e1a2661ae1ef43a185ccff5a69} +1 -1
  238. package/dist/phoenix-ui/bundle/blobs/{f7c8af35acf71a96056afb6afcff6a3ea42f65561f02652d04e11ad9ece9b8e9 → 7acd9b6f2f61b509c6a518508b8b52c2f0de67cdea4fd3f3d383b3ce8b38cf5e} +6 -7
  239. package/dist/phoenix-ui/bundle/blobs/7bacc1e3da7e8b7127ca3f8f69a2422098b9b2d23fbedefc56dfe76117c1c0e3 +46 -0
  240. package/dist/phoenix-ui/bundle/blobs/{3077452231f1ce3c48ae5d8dd912b14ab30de55a270a031d07065357bc1cca94 → 8078b804bea630ed9c4ea07ec2f8ac92aba4128725860a66599eda90390d98f6} +6 -3
  241. package/dist/phoenix-ui/bundle/blobs/{99f49df49ade2ca21deffcc752fc8a76c9a6645f5416b9314ea3ab1bd010f34c → 88b150cb804bc141b80a5687a091f61b99627155c465a27adb88546ef615af92} +6 -3
  242. package/dist/phoenix-ui/bundle/blobs/{a64a45a4e082a0d05daf711080cb7c3195f15fb6b3f3dce0521f4816b64452f3 → 90f8b07ec12b78e633e306322cda58415aea70d8e0f9ff85bd439361c01dabe1} +6 -3
  243. package/dist/phoenix-ui/bundle/blobs/{486145071d3445e82774f1b39b2bb15986ce52277e798a31ef7e9c27afb42af3 → 95b2944686e8258a655c3b5e6db68593e24e5199354e46aac553918ea2c0f55a} +1 -1
  244. package/dist/phoenix-ui/bundle/blobs/{a1998e37084c11f496d4970f86a85d5a6375bbeaa4797b9f42bbac2d44048d23 → 979639f0e8859d600a8db57e733566d9ad37ff8258c3e05a6f9c0f3008e92373} +1 -1
  245. package/dist/phoenix-ui/bundle/blobs/{3173293607055ea6e1a153ec6f51fb8154782157c8a61abf411da1f41be61728 → 9eaaa00049844060f842fe7fb73cc8edc4be5225cf38a96f33bda3ffc381456c} +6 -7
  246. package/dist/phoenix-ui/bundle/blobs/{69086f7cb235b35ccc230e1f2da41cbb10cea8f0636b6d4514672113a3adc2cb → a420bbda622399399a6b5c7c3614dcaebc6c62faceaf7b3c83c97db53d26b165} +1 -1
  247. package/dist/phoenix-ui/bundle/blobs/a63054b8920905045753facece83f154bf806158c6f46ef380036e7a82d4fde5 +46 -0
  248. package/dist/phoenix-ui/bundle/blobs/{e802e4f7bdc89050a9c0f2ca506e1d493a2316e6e810c0336c57aa073717ef3e → a63788c764b0e4fdcbc029d46093016310edcbcf702d62688e5aaac7ddeee6fd} +3 -1
  249. package/dist/phoenix-ui/bundle/blobs/{827a211ea03d2cb44b4ea1bc81ba1a6dc51a87fa16d6692997c4e4751241c815 → acfc4c26b135d5b27fc0930738486c9d43d379704102fab45564320180942e4b} +4 -2
  250. package/dist/phoenix-ui/bundle/blobs/{8da14f3eabac53c990a66e721387367b46cb676cc4204e8c67d6f88c95a6217f → ad243ca615349127aa422bccc1a6604ad17149735659087ca5bab3c5fae97f4e} +6 -7
  251. package/dist/phoenix-ui/bundle/blobs/b63931066e2b2623d012e1a3c1a0769cc43ed6640460c3899669b45539d6a20d +46 -0
  252. package/dist/phoenix-ui/bundle/blobs/{bb65af58ecc3e0c0093dc9a705a7ab643035e4e592c3adb93583c82d1aef1f51 → bde793ab5ad776f7e6f6d25ce2b838c1b5022054a1dad5502a873423eb0ad917} +6 -7
  253. package/dist/phoenix-ui/bundle/blobs/{48b7e6acf597d4f0320834db1393003451d1bd7c0d024dd62f7577a398b2e320 → c0a70ab2889e5c16e1f09249aefad948ce352c42cfe2b5afb758a4524e1b21b6} +6 -3
  254. package/dist/phoenix-ui/bundle/blobs/{60b2914df394800688c4e20f4eb34e117cd430df9954cf4d48574734507723f4 → c9ee9006ae6c0194a5d39a9f0cb275c52d74a71ea3f6dc2b4c1c7bd89f48a2c0} +1 -1
  255. package/dist/phoenix-ui/bundle/blobs/{d21ccafc83495872c80ec9873ad4fbfb4223837a747b524aa03b6d819f7c08e3 → cadc2daefcf238aab981fa56388381d3d5ab9c0686bb9dd8187035c9933dfcee} +6 -3
  256. package/dist/phoenix-ui/bundle/blobs/{d7b744fcc95164d96d9f811a93e2e8a374887146eb762ef775f3d3c7f27abc8d → cbea5728b90f58ff047be6ec4f14eed9d63c7148f5db99b5f147d2f17b472317} +1 -1
  257. package/dist/phoenix-ui/bundle/blobs/d408a4fea71b656aa8a5f6b5c037815a6e4229df336629ebddf4b5c85ed82fac +46 -0
  258. package/dist/phoenix-ui/bundle/blobs/{6ff950a5729ad9ea480ddf8c1b489b1c84189bbf7d6034b3b5a98e7c11a28cec → d9ae0c782d8a77787561536c0d7bc3b61175d59303f3cb8c20796f85140c6984} +1 -1
  259. package/dist/phoenix-ui/bundle/blobs/{1d53e2226465b1047faec7cda2e743e61540ea69e073a3a4057e8d86b277405f → e2932d63eb7f52a82960a19ba79bc800ef4f212164e098f96dee7a4326302f38} +1 -1
  260. package/dist/phoenix-ui/bundle/blobs/{fa576f6655b235bdea535198647305b7a3855e810180cbdf5d4c246c03c7d190 → e381bcfec42ac541d574011460600cf0818aa0e3362e8c6d205b4157890bf821} +6 -7
  261. package/dist/phoenix-ui/bundle/blobs/{8fbce5b4859e6011afa83b1c07c4436589cd7181f9cb997538f4c27f196d0d34 → e415657d8725d9b60ece42cc18581da177c42fc47cb11e501db722a5f524ecf7} +6 -7
  262. package/dist/phoenix-ui/bundle/blobs/{1ba392d45294b3e90cc7f3964f134ae685118bbbcc84ca944953a4270ec67a54 → e46d63e5f8a6ead1d44c8b6302a0c7247af8585b975ab5715518381777622ede} +6 -3
  263. package/dist/phoenix-ui/bundle/blobs/ee63b3f9b354d69443d05ea4a338af56546897335ace7533546e10be56ea2207 +46 -0
  264. package/dist/phoenix-ui/bundle/blobs/{c23617601e9c4d97b775c175a5ce1642c40459b157d0821609fe1d253b83ced8 → ef7d57633252f4604749447608850e299c277f7dd1a32776685df0724b1051c8} +6 -7
  265. package/dist/phoenix-ui/bundle/blobs/{0581c8428246f43c5374393878a29e38f2b1865df87e6f13f2309b8eae54e76f → f0652c6ce41e6949133360178f192ea4ee9f6129a018c7a8b6652870c2330392} +1 -1
  266. package/dist/phoenix-ui/bundle/blobs/{cfac9eaf96481a8874391e5cecc6149abea1f1f19622f77f1ebb9e1876720e91 → f06c9d797ca2ac8c6a49d3dcd2e99d1b4df8bc9637a49c7e80f3161f49d06b1b} +4 -2
  267. package/dist/phoenix-ui/bundle/blobs/{882bfe4d8ffd9bc217b0c1bdd5e3cf659cd4b46598d631c4649aaaf0e13333ce → f077545caeb3ecb9f51a3f703a09736ca924869f4b4345c1b1ffbd9bf927a287} +6 -3
  268. package/dist/phoenix-ui/bundle/blobs/f781c5874bcd79ebe1b3b012275b9af7eae6c4867e9a16e29bb3d3ed3dc1940b +46 -0
  269. package/dist/phoenix-ui/bundle/blobs/fa10c0c926997387c89b7c1070e25b1b2b53ee891741e3c450a89ec6c6dcaf7d +46 -0
  270. package/dist/phoenix-ui/bundle/blobs/fb1a36ab7116b0c6709b89720cdded29d80982114c2f87cad614e01e126270dd +46 -0
  271. package/dist/phoenix-ui/bundle/blobs/fbd3214fc12ba70d9c69a995742ba73dc5365823af63afdc93c0c8a8f0c484af +46 -0
  272. package/dist/phoenix-ui/bundle/blobs/{77682e9d63b484f94a699f2c0b393e4540797d311362c384a3d643aec11d6985 → fea19b8381ec10ff8ed1923a336332974bbb552227ed215e7ddaaf0ec0112c1d} +1 -1
  273. package/dist/phoenix-ui/bundle/manifest.json +126 -126
  274. package/docs/phoenix-diagram.md +173 -0
  275. package/docs/phoenix-ui.md +57 -16
  276. package/package.json +14 -10
  277. package/skills/agi-mode/SKILL.md +3 -1
  278. package/skills/agi-mode/assets/sdlc/event.md +4 -5
  279. package/skills/agi-mode/assets/sdlc/object-status.md +1 -1
  280. package/skills/agi-mode/assets/sdlc/protocol.md +4 -2
  281. package/skills/agi-mode/evals/scenarios.md +108 -3
  282. package/skills/agi-mode/playbooks/authoring-a-skill.md +13 -2
  283. package/skills/agi-mode/playbooks/eval.md +19 -3
  284. package/skills/agi-mode/playbooks/hillclimb.md +4 -2
  285. package/skills/agi-mode/playbooks/reflection.md +1 -1
  286. package/skills/agi-mode/playbooks/sdlc.md +10 -6
  287. package/skills/agi-mode/playbooks/what-next.md +6 -2
  288. package/skills/agi-mode/references/eval-protocol.md +13 -4
  289. package/skills/agi-mode/references/interface-design.md +1 -0
  290. package/skills/agi-mode/references/remote-evolution.md +178 -0
  291. package/skills/agi-mode/references/skill-evolution.md +2 -0
  292. package/skills/agi-mode/scripts/evolution/compare.py +569 -0
  293. package/skills/agi-mode/scripts/evolution/evolution.py +2886 -0
  294. package/skills/agi-mode/scripts/evolution/examples/public-smoke.json +128 -0
  295. package/skills/agi-mode/scripts/evolution/examples/quality-calibration.json +128 -0
  296. package/skills/agi-mode/scripts/evolution/examples/quality-rubric.json +133 -0
  297. package/skills/agi-mode/scripts/evolution/protocol.py +1586 -0
  298. package/skills/agi-mode/scripts/evolution/pyproject.toml +16 -0
  299. package/skills/agi-mode/scripts/evolution/quality.py +689 -0
  300. package/skills/agi-mode/scripts/evolution/remote.py +2303 -0
  301. package/skills/agi-mode/scripts/evolution/tests/support.py +201 -0
  302. package/skills/agi-mode/scripts/evolution/tests/test_apply.py +643 -0
  303. package/skills/agi-mode/scripts/evolution/tests/test_bounded_exploration.py +236 -0
  304. package/skills/agi-mode/scripts/evolution/tests/test_bundles.py +414 -0
  305. package/skills/agi-mode/scripts/evolution/tests/test_calibration.py +460 -0
  306. package/skills/agi-mode/scripts/evolution/tests/test_compare.py +377 -0
  307. package/skills/agi-mode/scripts/evolution/tests/test_protocol.py +357 -0
  308. package/skills/agi-mode/scripts/evolution/tests/test_quality.py +647 -0
  309. package/skills/agi-mode/scripts/evolution/tests/test_remote.py +857 -0
  310. package/skills/agi-mode/scripts/evolution/tests/test_search.py +1109 -0
  311. package/skills/agi-mode/scripts/evolution/tests/test_typesafe.py +624 -0
  312. package/skills/agi-mode/scripts/evolution/tests/test_verifier_context.py +132 -0
  313. package/skills/agi-mode/scripts/evolution/typesafe_worker.py +145 -0
  314. package/skills/agi-mode/scripts/evolution/uv.lock +2548 -0
  315. package/skills/apply-code-review/SKILL.md +1 -0
  316. package/skills/apply-code-review/agents/openai.yaml +2 -0
  317. package/skills/apply-doc-review/SKILL.md +1 -0
  318. package/skills/apply-doc-review/agents/openai.yaml +2 -0
  319. package/skills/apply-ui-review/SKILL.md +1 -0
  320. package/skills/apply-ui-review/agents/openai.yaml +2 -0
  321. package/skills/autoresearch/SKILL.md +1 -0
  322. package/skills/clean-artifacts/SKILL.md +52 -0
  323. package/skills/clean-artifacts/agents/openai.yaml +4 -0
  324. package/skills/clean-artifacts/evals/scenarios.md +13 -0
  325. package/skills/clean-artifacts/references/history-cleanup.md +41 -0
  326. package/skills/crd/SKILL.md +100 -65
  327. package/skills/crd/assets/cr-template.md +15 -0
  328. package/skills/crd-respond/SKILL.md +17 -5
  329. package/skills/crd-respond/agents/openai.yaml +2 -2
  330. package/skills/crd-respond/assets/response-template.md +7 -0
  331. package/skills/crd-respond/evals/scenarios.md +7 -0
  332. package/skills/create-verification-skill/SKILL.md +1 -0
  333. package/skills/debugging/SKILL.md +1 -0
  334. package/skills/design-md/SKILL.md +1 -0
  335. package/skills/design-reference/SKILL.md +6 -2
  336. package/skills/design-reference/evals/scenarios.md +4 -0
  337. package/skills/dev-plan/SKILL.md +11 -6
  338. package/skills/dev-plan/references/execution-workflow.md +1 -1
  339. package/skills/dev-plan/references/plan-skeleton.md +234 -69
  340. package/skills/dev-plan/scripts/check_plan.py +1 -1
  341. package/skills/documentation-writer/SKILL.md +19 -14
  342. package/skills/documentation-writer/references/architecture.md +6 -2
  343. package/skills/documentation-writer/references/user-manual.md +2 -2
  344. package/skills/elintp/SKILL.md +12 -6
  345. package/skills/experience-capture/SKILL.md +1 -0
  346. package/skills/gdpr-compliant/SKILL.md +1 -0
  347. package/skills/kpi-dashboard-design/SKILL.md +1 -0
  348. package/skills/landing-page-conversion-audit/SKILL.md +1 -0
  349. package/skills/mcp-release-qa/SKILL.md +2 -1
  350. package/skills/meeting-minutes/SKILL.md +1 -0
  351. package/skills/optimize-agents-md/SKILL.md +128 -0
  352. package/skills/optimize-agents-md/assets/coding-principles.md +118 -0
  353. package/skills/phoenix-diagram/ENGINE.json +39 -0
  354. package/skills/phoenix-diagram/SKILL.md +109 -0
  355. package/skills/phoenix-diagram/examples/legacy.agent-tool-call.workflow.json +94 -0
  356. package/skills/phoenix-diagram/examples/legacy.async-job-roundtrip.sequence.json +61 -0
  357. package/skills/phoenix-diagram/examples/legacy.deployment-release.lifecycle.json +49 -0
  358. package/skills/phoenix-diagram/examples/legacy.product-analytics.dataflow.json +76 -0
  359. package/skills/{archify/test/fixtures/v1-baseline/web-app.architecture.json → phoenix-diagram/examples/legacy.web-app.architecture.json} +16 -11
  360. package/skills/phoenix-diagram/examples/minimal.architecture.json +11 -0
  361. package/skills/phoenix-diagram/examples/minimal.class.json +23 -0
  362. package/skills/phoenix-diagram/examples/minimal.dataflow.json +11 -0
  363. package/skills/phoenix-diagram/examples/minimal.erd.json +25 -0
  364. package/skills/phoenix-diagram/examples/minimal.lifecycle.json +11 -0
  365. package/skills/phoenix-diagram/examples/minimal.sequence.json +13 -0
  366. package/skills/phoenix-diagram/examples/minimal.timeline.json +15 -0
  367. package/skills/phoenix-diagram/examples/minimal.tree.json +13 -0
  368. package/skills/phoenix-diagram/examples/minimal.waterfall.json +12 -0
  369. package/skills/phoenix-diagram/examples/minimal.workflow.json +12 -0
  370. package/skills/phoenix-diagram/references/architecture-compare.md +111 -0
  371. package/skills/phoenix-diagram/references/authoring-defaults.md +42 -0
  372. package/skills/phoenix-diagram/references/brand-marks.md +52 -0
  373. package/skills/phoenix-diagram/references/compatibility.md +22 -0
  374. package/skills/phoenix-diagram/references/delivery-contract.md +127 -0
  375. package/skills/phoenix-diagram/references/extending-types.md +14 -0
  376. package/skills/phoenix-diagram/references/migration.md +57 -0
  377. package/skills/phoenix-diagram/references/preview.md +45 -0
  378. package/skills/phoenix-diagram/references/repository-authoring.md +29 -0
  379. package/skills/phoenix-diagram/references/viewer-runtime.md +27 -0
  380. package/skills/phoenix-diagram/schemas/README.md +23 -0
  381. package/skills/phoenix-diagram/schemas/architecture.schema.json +329 -0
  382. package/skills/phoenix-diagram/schemas/class.schema.json +348 -0
  383. package/skills/phoenix-diagram/schemas/common.schema.json +358 -0
  384. package/skills/{archify/schemas/lifecycle.schema.json → phoenix-diagram/schemas/dataflow.schema.json} +63 -58
  385. package/skills/phoenix-diagram/schemas/erd.schema.json +384 -0
  386. package/skills/phoenix-diagram/schemas/lifecycle.schema.json +202 -0
  387. package/skills/phoenix-diagram/schemas/sequence.schema.json +254 -0
  388. package/skills/phoenix-diagram/schemas/timeline.schema.json +170 -0
  389. package/skills/phoenix-diagram/schemas/tree.schema.json +144 -0
  390. package/skills/phoenix-diagram/schemas/waterfall.schema.json +150 -0
  391. package/skills/phoenix-diagram/schemas/workflow.schema.json +460 -0
  392. package/skills/phoenix-diagram/scripts/phoenix-bootstrap.cjs +589 -0
  393. package/skills/phoenix-diagram/scripts/phoenix-diagram +6 -0
  394. package/skills/phoenix-diagram/scripts/phoenix-launcher.cjs +10 -0
  395. package/skills/phoenix-ui/GENERATED.json +255 -240
  396. package/skills/phoenix-ui/SKILL.md +7 -4
  397. package/skills/phoenix-ui/evals/scenarios.md +8 -1
  398. package/skills/phoenix-ui/reference/craft-floor.md +3 -1
  399. package/skills/phoenix-ui/reference/critique.md +6 -14
  400. package/skills/phoenix-ui/reference/init.md +1 -1
  401. package/skills/phoenix-ui/reference/live.md +1 -1
  402. package/skills/phoenix-ui/reference/operate.md +15 -0
  403. package/skills/phoenix-ui/scripts/ENGINE.json +17 -17
  404. package/skills/phoenix-ui/scripts/phoenix-bootstrap.cjs +2 -5
  405. package/skills/portal-app-exchange/SKILL.md +1 -0
  406. package/skills/portal-dev-setup/SKILL.md +71 -12
  407. package/skills/portal-dev-setup/scripts/onebox.sh +69 -6
  408. package/skills/portal-external-app/SKILL.md +55 -16
  409. package/skills/portal-external-app/references/config-placement.md +108 -2
  410. package/skills/portal-external-app/references/registration-and-onebox.md +56 -2
  411. package/skills/portal-logging/SKILL.md +1 -0
  412. package/skills/portal-micro-app/SKILL.md +2 -1
  413. package/skills/portal-micro-app/references/sdk-reference.md +3 -1
  414. package/skills/prd/SKILL.md +238 -159
  415. package/skills/prd/evals/scenarios.md +13 -0
  416. package/skills/prd/references/prd-skeleton.md +14 -4
  417. package/skills/react/SKILL.md +1 -0
  418. package/skills/resolve-blocked/SKILL.md +46 -19
  419. package/skills/resolve-blocked/agents/openai.yaml +2 -2
  420. package/skills/resolve-blocked/evals/scenarios.md +22 -0
  421. package/skills/resolve-blocked/references/decisions-contract.md +7 -4
  422. package/skills/review-code/SKILL.md +308 -46
  423. package/skills/review-code/agents/openai.yaml +2 -0
  424. package/skills/review-dev-plan/SKILL.md +88 -33
  425. package/skills/review-dev-plan/agents/openai.yaml +2 -0
  426. package/skills/review-dev-plan/references/report-contract.md +53 -19
  427. package/skills/review-dev-plan/references/review-lenses.md +2 -1
  428. package/skills/review-prd/SKILL.md +90 -34
  429. package/skills/review-prd/agents/openai.yaml +2 -0
  430. package/skills/review-prd/references/report-contract.md +54 -18
  431. package/skills/review-prd-dev-gaps/SKILL.md +1 -0
  432. package/skills/review-prd-dev-gaps/agents/openai.yaml +2 -0
  433. package/skills/review-ui/SKILL.md +369 -71
  434. package/skills/review-ui/agents/openai.yaml +2 -0
  435. package/skills/review-ui/evals/scenarios.md +2 -0
  436. package/skills/rust/SKILL.md +76 -84
  437. package/skills/rust/references/api-design.md +97 -0
  438. package/skills/rust/references/{chapter_10.md → async-tokio.md} +42 -18
  439. package/skills/rust/references/behavioral-patterns.md +49 -0
  440. package/skills/rust/references/bevy.md +95 -0
  441. package/skills/rust/references/{chapter_02.md → clippy-and-linting.md} +26 -15
  442. package/skills/rust/references/{chapter_01.md → coding-idioms.md} +58 -7
  443. package/skills/rust/references/crates-and-dependencies.md +66 -0
  444. package/skills/rust/references/{chapter_08.md → documentation.md} +30 -3
  445. package/skills/rust/references/{chapter_04.md → error-handling.md} +32 -6
  446. package/skills/rust/references/{chapter_06.md → generics-and-dispatch.md} +28 -11
  447. package/skills/rust/references/macros.md +45 -0
  448. package/skills/rust/references/{chapter_03.md → performance.md} +25 -2
  449. package/skills/rust/references/{chapter_09.md → pointers-and-ownership.md} +37 -17
  450. package/skills/rust/references/{chapter_05.md → testing.md} +18 -2
  451. package/skills/rust/references/{chapter_07.md → type-state.md} +5 -1
  452. package/skills/rust/references/unsafe-and-ffi.md +56 -0
  453. package/skills/rust-port/SKILL.md +144 -0
  454. package/skills/rust-review/SKILL.md +177 -0
  455. package/skills/security-audit/SKILL.md +1 -0
  456. package/skills/spec-human-decision/SKILL.md +1 -0
  457. package/skills/sql-optimization/SKILL.md +1 -0
  458. package/skills/story-points/SKILL.md +1 -0
  459. package/skills/swarm/SKILL.md +1 -0
  460. package/skills/test-plan/SKILL.md +1 -0
  461. package/skills/ui-loop/SKILL.md +39 -0
  462. package/skills/ui-loop/agents/openai.yaml +3 -0
  463. package/skills/ui-pattern-research/SKILL.md +1 -0
  464. package/skills/use-llm-gateway/SKILL.md +58 -0
  465. package/skills/use-llm-gateway/agents/openai.yaml +4 -0
  466. package/skills/use-llm-gateway/references/api.md +129 -0
  467. package/skills/use-llm-gateway/references/recovery.md +86 -0
  468. package/skills/use-prompt-dsl/SKILL.md +165 -0
  469. package/skills/use-prompt-dsl/references/examples.md +726 -0
  470. package/skills/use-prompt-dsl/references/language.md +938 -0
  471. package/skills/use-rustify-docs/SKILL.md +60 -0
  472. package/skills/use-rustify-docs/agents/openai.yaml +4 -0
  473. package/skills/use-rustify-docs/references/rustify-docs.md +138 -0
  474. package/skills/use-task-gateway/SKILL.md +60 -0
  475. package/skills/use-task-gateway/agents/openai.yaml +3 -0
  476. package/skills/use-task-gateway/references/authentication.md +75 -0
  477. package/skills/use-task-gateway/references/task-api.md +121 -0
  478. package/skills/use-task-gateway/references/workers.md +85 -0
  479. package/skills/use-task-gateway/references/workflow-actions.md +66 -0
  480. package/skills/use-workflow-service/SKILL.md +57 -0
  481. package/skills/use-workflow-service/agents/openai.yaml +3 -0
  482. package/skills/use-workflow-service/references/action-provider.md +84 -0
  483. package/skills/use-workflow-service/references/authentication.md +76 -0
  484. package/skills/use-workflow-service/references/authoring.md +62 -0
  485. package/skills/use-workflow-service/references/mcp.md +47 -0
  486. package/skills/use-workflow-service/references/open-api.md +88 -0
  487. package/skills/use-workflow-service/references/orchestration-choice.md +63 -0
  488. package/skills/working-with-mbx/SKILL.md +1 -0
  489. package/skills/working-with-mise/SKILL.md +1 -0
  490. package/skills/xgent-app-release/SKILL.md +114 -16
  491. package/skills/xgent-app-release/references/build-and-package.md +2 -1
  492. package/skills/xgent-app-release/references/publish-api.md +6 -1
  493. package/skills/xgent-app-release/references/troubleshooting.md +2 -1
  494. package/skills/xgent-app-release/references/verify-preflight.mjs +21 -1
  495. package/skills/xgent-app-release/scripts/preflight.mjs +42 -3
  496. package/skills/xgent-image-push/SKILL.md +1 -0
  497. package/skills/xgent-init/SKILL.md +1 -0
  498. package/docs/claude-context-goal-guard.md +0 -124
  499. package/docs/codex-context-goal-guard.md +0 -109
  500. package/hooks/claude/context-goal-guard.js +0 -139
  501. package/hooks/claude/settings.example.json +0 -26
  502. package/hooks/codex/context-goal-guard.py +0 -189
  503. package/hooks/codex/hooks.example.json +0 -26
  504. package/skills/archify/SKILL.md +0 -137
  505. package/skills/archify/assets/template.html +0 -14937
  506. package/skills/archify/bin/archify.mjs +0 -2139
  507. package/skills/archify/bin/open-artifact.mjs +0 -86
  508. package/skills/archify/bin/preview.mjs +0 -653
  509. package/skills/archify/bin/visual-check.mjs +0 -829
  510. package/skills/archify/brand-marks/README.md +0 -31
  511. package/skills/archify/brand-marks/catalog.json +0 -131
  512. package/skills/archify/delta/architecture-delta.mjs +0 -1232
  513. package/skills/archify/examples/agent-run.lifecycle.json +0 -60
  514. package/skills/archify/examples/brand-aware-delivery.architecture.json +0 -47
  515. package/skills/archify/examples/cache-miss-request.sequence.json +0 -82
  516. package/skills/archify/examples/checkout-platform.base.architecture.json +0 -31
  517. package/skills/archify/examples/checkout-platform.head.architecture.json +0 -31
  518. package/skills/archify/examples/dataflow-product-analytics.html +0 -15048
  519. package/skills/archify/examples/event-stream.dataflow.json +0 -57
  520. package/skills/archify/examples/incident-response.workflow.json +0 -64
  521. package/skills/archify/examples/lifecycle-agent-run.html +0 -14983
  522. package/skills/archify/examples/production-deployment.architecture.json +0 -71
  523. package/skills/archify/examples/release-delivery.workflow.json +0 -62
  524. package/skills/archify/examples/sequence-cache-miss-request.html +0 -15063
  525. package/skills/archify/examples/web-app-rendered.html +0 -15012
  526. package/skills/archify/examples/workflow-agent-tool-call-rendered.html +0 -15054
  527. package/skills/archify/migrations/workflow-v2.mjs +0 -279
  528. package/skills/archify/package-lock.json +0 -149
  529. package/skills/archify/package.json +0 -39
  530. package/skills/archify/recipes/scenarios.mjs +0 -391
  531. package/skills/archify/references/authoring-contract.md +0 -247
  532. package/skills/archify/references/brand-marks.md +0 -65
  533. package/skills/archify/references/delivery-contract.md +0 -138
  534. package/skills/archify/references/viewer-runtime.md +0 -45
  535. package/skills/archify/renderers/architecture/grid.mjs +0 -62
  536. package/skills/archify/renderers/architecture/render-architecture.mjs +0 -1078
  537. package/skills/archify/renderers/dataflow/README.md +0 -104
  538. package/skills/archify/renderers/dataflow/render-dataflow.mjs +0 -483
  539. package/skills/archify/renderers/lifecycle/README.md +0 -115
  540. package/skills/archify/renderers/lifecycle/render-lifecycle.mjs +0 -561
  541. package/skills/archify/renderers/sequence/README.md +0 -114
  542. package/skills/archify/renderers/sequence/render-sequence.mjs +0 -464
  543. package/skills/archify/renderers/shared/brand-marks.mjs +0 -563
  544. package/skills/archify/renderers/shared/cli.mjs +0 -218
  545. package/skills/archify/renderers/shared/desktop-readability.mjs +0 -26
  546. package/skills/archify/renderers/shared/diagnostics.mjs +0 -160
  547. package/skills/archify/renderers/shared/engineering-profiles.mjs +0 -157
  548. package/skills/archify/renderers/shared/generated-brand-marks.mjs +0 -2003
  549. package/skills/archify/renderers/shared/generated-validators.mjs +0 -13
  550. package/skills/archify/renderers/shared/geometry.mjs +0 -1423
  551. package/skills/archify/renderers/shared/i18n.mjs +0 -595
  552. package/skills/archify/renderers/shared/layout-report.mjs +0 -40
  553. package/skills/archify/renderers/shared/legend.mjs +0 -217
  554. package/skills/archify/renderers/shared/output-path.mjs +0 -340
  555. package/skills/archify/renderers/shared/repository-evidence.mjs +0 -239
  556. package/skills/archify/renderers/shared/repository-location.mjs +0 -58
  557. package/skills/archify/renderers/shared/text-fit.mjs +0 -49
  558. package/skills/archify/renderers/shared/utils.mjs +0 -232
  559. package/skills/archify/renderers/shared/validator.mjs +0 -86
  560. package/skills/archify/renderers/workflow/README.md +0 -223
  561. package/skills/archify/renderers/workflow/render-workflow.mjs +0 -35
  562. package/skills/archify/renderers/workflow/workflow-compiler.mjs +0 -4400
  563. package/skills/archify/renderers/workflow/workflow-migration-geometry.mjs +0 -144
  564. package/skills/archify/schemas/README.md +0 -211
  565. package/skills/archify/schemas/architecture.schema.json +0 -178
  566. package/skills/archify/schemas/common.schema.json +0 -115
  567. package/skills/archify/scripts/check-render-output.mjs +0 -916
  568. package/skills/archify/scripts/check-update.mjs +0 -1667
  569. package/skills/archify/scripts/generate-brand-marks.mjs +0 -141
  570. package/skills/archify/scripts/generate-validators.mjs +0 -66
  571. package/skills/archify/scripts/render-examples.mjs +0 -26
  572. package/skills/archify/scripts/update-contract.mjs +0 -182
  573. package/skills/archify/skill-release.json +0 -10
  574. package/skills/archify/test/adaptive-reader-layout.test.mjs +0 -86
  575. package/skills/archify/test/animation.test.mjs +0 -179
  576. package/skills/archify/test/architecture-compare-recovery.test.mjs +0 -157
  577. package/skills/archify/test/architecture-delta-markers.test.mjs +0 -137
  578. package/skills/archify/test/architecture-delta.test.mjs +0 -705
  579. package/skills/archify/test/artifact-receipt-flush.test.mjs +0 -126
  580. package/skills/archify/test/authored-reachability.test.mjs +0 -95
  581. package/skills/archify/test/authoring-safety-contract.test.mjs +0 -54
  582. package/skills/archify/test/automatic-port-spread.test.mjs +0 -376
  583. package/skills/archify/test/base-input-compatibility.test.mjs +0 -42
  584. package/skills/archify/test/brand-marks.test.mjs +0 -678
  585. package/skills/archify/test/chapter-delta-preview.test.mjs +0 -157
  586. package/skills/archify/test/chapter-handoff.test.mjs +0 -97
  587. package/skills/archify/test/chapter-rail.test.mjs +0 -86
  588. package/skills/archify/test/checkout-line-endings.test.mjs +0 -72
  589. package/skills/archify/test/ci-scope.test.mjs +0 -59
  590. package/skills/archify/test/clean-skill-staging.test.mjs +0 -440
  591. package/skills/archify/test/cli-output-types.test.mjs +0 -201
  592. package/skills/archify/test/cli.test.mjs +0 -986
  593. package/skills/archify/test/community-proof-intake.test.mjs +0 -125
  594. package/skills/archify/test/cursor-onboarding.test.mjs +0 -74
  595. package/skills/archify/test/degraded.test.mjs +0 -161
  596. package/skills/archify/test/delivery-contract.test.mjs +0 -52
  597. package/skills/archify/test/desktop-reader-browser.test.mjs +0 -80
  598. package/skills/archify/test/diagram-guide.test.mjs +0 -92
  599. package/skills/archify/test/engineering-profile.test.mjs +0 -209
  600. package/skills/archify/test/export-browser.test.mjs +0 -305
  601. package/skills/archify/test/export-cleanup-browser.test.mjs +0 -294
  602. package/skills/archify/test/finder-browser.test.mjs +0 -274
  603. package/skills/archify/test/finder.test.mjs +0 -104
  604. package/skills/archify/test/fixtures/automatic-routing-node-border-clearance.workflow.json +0 -40
  605. package/skills/archify/test/fixtures/fail-migration-cleanup.mjs +0 -17
  606. package/skills/archify/test/fixtures/issue-126/custom-widths.workflow.json +0 -18
  607. package/skills/archify/test/fixtures/issue-126/explicit-route.workflow.json +0 -28
  608. package/skills/archify/test/fixtures/issue-126/explicit-viewbox.workflow.json +0 -19
  609. package/skills/archify/test/fixtures/issue-126/labels.workflow.json +0 -18
  610. package/skills/archify/test/fixtures/v1-baseline/agent-run.lifecycle.json +0 -64
  611. package/skills/archify/test/fixtures/v1-baseline/agent-tool-call.workflow.json +0 -88
  612. package/skills/archify/test/fixtures/v1-baseline/cache-miss-request.sequence.json +0 -75
  613. package/skills/archify/test/fixtures/v1-baseline/event-stream.dataflow.json +0 -57
  614. package/skills/archify/test/fixtures/v1-baseline/product-analytics.dataflow.json +0 -70
  615. package/skills/archify/test/fixtures/v1-baseline/production-deployment.architecture.json +0 -71
  616. package/skills/archify/test/fixtures/v1-workflow-700x400.workflow.json +0 -22
  617. package/skills/archify/test/fixtures/v1-workflow-explicit-coordinates.workflow.json +0 -47
  618. package/skills/archify/test/focus-browser.test.mjs +0 -226
  619. package/skills/archify/test/gallery.test.mjs +0 -130
  620. package/skills/archify/test/generate-validators.test.mjs +0 -59
  621. package/skills/archify/test/generate-viewer.test.mjs +0 -165
  622. package/skills/archify/test/generated-artifact-xml.test.mjs +0 -88
  623. package/skills/archify/test/geometry.test.mjs +0 -739
  624. package/skills/archify/test/golden.mjs +0 -207
  625. package/skills/archify/test/grid.test.mjs +0 -47
  626. package/skills/archify/test/guide-page.test.mjs +0 -85
  627. package/skills/archify/test/guide.test.mjs +0 -81
  628. package/skills/archify/test/guided-views-browser.test.mjs +0 -460
  629. package/skills/archify/test/guided-views.test.mjs +0 -144
  630. package/skills/archify/test/helpers/desktop-browser.mjs +0 -48
  631. package/skills/archify/test/helpers/offline-fonts.mjs +0 -76
  632. package/skills/archify/test/helpers/viewer-click.mjs +0 -72
  633. package/skills/archify/test/helpers/xml.mjs +0 -37
  634. package/skills/archify/test/i18n.test.mjs +0 -422
  635. package/skills/archify/test/intent-trace-browser.test.mjs +0 -284
  636. package/skills/archify/test/intent-trace.test.mjs +0 -111
  637. package/skills/archify/test/landing.test.mjs +0 -97
  638. package/skills/archify/test/layout-rules.test.mjs +0 -1498
  639. package/skills/archify/test/legend-contract.test.mjs +0 -404
  640. package/skills/archify/test/motion-governor-browser.test.mjs +0 -342
  641. package/skills/archify/test/motion-governor.test.mjs +0 -111
  642. package/skills/archify/test/offline-font-browser.test.mjs +0 -210
  643. package/skills/archify/test/offline-self-containment.test.mjs +0 -80
  644. package/skills/archify/test/open-artifact.test.mjs +0 -118
  645. package/skills/archify/test/ordinary-model-floor.test.mjs +0 -1052
  646. package/skills/archify/test/output-path.test.mjs +0 -587
  647. package/skills/archify/test/presentation.test.mjs +0 -71
  648. package/skills/archify/test/preset-tryon.test.mjs +0 -113
  649. package/skills/archify/test/preview-contract.test.mjs +0 -40
  650. package/skills/archify/test/preview.test.mjs +0 -530
  651. package/skills/archify/test/proof-aperture.test.mjs +0 -78
  652. package/skills/archify/test/reach-share-card.test.mjs +0 -149
  653. package/skills/archify/test/reader-layout-browser.test.mjs +0 -320
  654. package/skills/archify/test/readme-showcase.test.mjs +0 -319
  655. package/skills/archify/test/real-repository-proof.test.mjs +0 -209
  656. package/skills/archify/test/relationship-direct-explorer.test.mjs +0 -115
  657. package/skills/archify/test/relationship-lens.test.mjs +0 -128
  658. package/skills/archify/test/relationship-permalink.test.mjs +0 -130
  659. package/skills/archify/test/relationship-pulse.test.mjs +0 -122
  660. package/skills/archify/test/release-identity.test.mjs +0 -476
  661. package/skills/archify/test/release-package-gates.test.mjs +0 -750
  662. package/skills/archify/test/render-output-checks.test.mjs +0 -588
  663. package/skills/archify/test/renderer-diagnostic-boundary.test.mjs +0 -107
  664. package/skills/archify/test/repair-receipt.test.mjs +0 -181
  665. package/skills/archify/test/repository-evidence-replacement.test.mjs +0 -136
  666. package/skills/archify/test/repository-evidence.test.mjs +0 -605
  667. package/skills/archify/test/repository-language-metadata.test.mjs +0 -67
  668. package/skills/archify/test/route-journey.test.mjs +0 -125
  669. package/skills/archify/test/route-probe-browser.test.mjs +0 -363
  670. package/skills/archify/test/route-probe.test.mjs +0 -114
  671. package/skills/archify/test/route-share-card.test.mjs +0 -163
  672. package/skills/archify/test/semantic-camera.test.mjs +0 -88
  673. package/skills/archify/test/semantic-flow.test.mjs +0 -90
  674. package/skills/archify/test/semantic-legend-gateway.test.mjs +0 -156
  675. package/skills/archify/test/semantic-lens-browser.test.mjs +0 -372
  676. package/skills/archify/test/semantic-lens.test.mjs +0 -103
  677. package/skills/archify/test/semantic-passport.test.mjs +0 -99
  678. package/skills/archify/test/semantic-radar.test.mjs +0 -735
  679. package/skills/archify/test/semantic-zoom.test.mjs +0 -86
  680. package/skills/archify/test/sequence-column-fit.test.mjs +0 -137
  681. package/skills/archify/test/settled-flow.test.mjs +0 -97
  682. package/skills/archify/test/share-card-export.test.mjs +0 -132
  683. package/skills/archify/test/site-language-continuity.test.mjs +0 -569
  684. package/skills/archify/test/site-language-integration.mjs +0 -9
  685. package/skills/archify/test/skill-metadata.test.mjs +0 -84
  686. package/skills/archify/test/stable-update-manifest.test.mjs +0 -167
  687. package/skills/archify/test/start-page.test.mjs +0 -312
  688. package/skills/archify/test/story-beat-navigator.test.mjs +0 -103
  689. package/skills/archify/test/story-carrier.test.mjs +0 -90
  690. package/skills/archify/test/story-director-strip.test.mjs +0 -91
  691. package/skills/archify/test/story-follow-camera.test.mjs +0 -103
  692. package/skills/archify/test/story-horizon.test.mjs +0 -91
  693. package/skills/archify/test/story-moment-link.test.mjs +0 -93
  694. package/skills/archify/test/story-shelf.test.mjs +0 -84
  695. package/skills/archify/test/story-trail.test.mjs +0 -81
  696. package/skills/archify/test/toolbar-polish.test.mjs +0 -57
  697. package/skills/archify/test/update-contract.test.mjs +0 -133
  698. package/skills/archify/test/update-notifier.test.mjs +0 -3317
  699. package/skills/archify/test/v1-compatibility.test.mjs +0 -329
  700. package/skills/archify/test/vertical-edge.test.mjs +0 -68
  701. package/skills/archify/test/viewer-camera-browser.test.mjs +0 -395
  702. package/skills/archify/test/viewer-chrome-layout.test.mjs +0 -1104
  703. package/skills/archify/test/viewer-identifiers-browser.test.mjs +0 -135
  704. package/skills/archify/test/visual-check.test.mjs +0 -400
  705. package/skills/archify/test/webm-artifact.smoke.mjs +0 -1855
  706. package/skills/archify/test/workflow-compiler-hard-contract.test.mjs +0 -2136
  707. package/skills/archify/test/workflow-compiler.test.mjs +0 -1163
  708. package/skills/archify/test/workflow-migration.test.mjs +0 -620
  709. package/skills/archify/test/workflow-semantic-contract.test.mjs +0 -131
  710. /package/{skills/archify/THIRD_PARTY_NOTICES.md → dist/phoenix-diagram/THIRD-PARTY-LICENSES/0b7fb59365dc21c93b0f62526d74ee913aeec9ae532c112bc76afa7edcd56e14.txt} +0 -0
  711. /package/{skills/archify/LICENSE → dist/phoenix-diagram/THIRD-PARTY-LICENSES/b799ab081703e7821ae5096d2c1abdf14bbdc75e8ea1c4045998c36ed6db9706.txt} +0 -0
  712. /package/{skills/archify/assets/JetBrainsMono-OFL.txt → dist/phoenix-diagram/THIRD-PARTY-LICENSES/c1ab7c666206842a02b35b30770dac0d7a10156ed401c9defc3f02a754d89e90.txt} +0 -0
  713. /package/{skills/archify/examples/agent-tool-call.workflow.json → dist/phoenix-diagram/bundle/examples/legacy.agent-tool-call.workflow.json} +0 -0
  714. /package/{skills/archify/examples/async-job-roundtrip.sequence.json → dist/phoenix-diagram/bundle/examples/legacy.async-job-roundtrip.sequence.json} +0 -0
  715. /package/{skills/archify/examples/deployment-release.lifecycle.json → dist/phoenix-diagram/bundle/examples/legacy.deployment-release.lifecycle.json} +0 -0
  716. /package/{skills/archify/examples/product-analytics.dataflow.json → dist/phoenix-diagram/bundle/examples/legacy.product-analytics.dataflow.json} +0 -0
  717. /package/{skills/archify/examples/web-app.architecture.json → dist/phoenix-diagram/bundle/examples/legacy.web-app.architecture.json} +0 -0
@@ -1,1104 +0,0 @@
1
- import { test } from 'node:test';
2
- import assert from 'node:assert/strict';
3
- import { execFileSync } from 'node:child_process';
4
- import fs from 'node:fs';
5
- import os from 'node:os';
6
- import path from 'node:path';
7
- import { fileURLToPath, pathToFileURL } from 'node:url';
8
-
9
- import { ChromeVisualBrowser, findChrome } from '../bin/visual-check.mjs';
10
- import { MIN_PROJECTED_NODE_TEXT_PX } from '../renderers/shared/desktop-readability.mjs';
11
-
12
- const __dirname = path.dirname(fileURLToPath(import.meta.url));
13
- const skillRoot = path.resolve(__dirname, '..');
14
- const tmp = fs.mkdtempSync(path.join(os.tmpdir(), 'archify-viewer-chrome-layout-'));
15
- const chromePath = process.env.ARCHIFY_CHROME ? findChrome() : null;
16
-
17
- const CASES = {
18
- architecture: 'web-app.architecture.json',
19
- workflow: 'agent-tool-call.workflow.json',
20
- sequence: 'cache-miss-request.sequence.json',
21
- dataflow: 'product-analytics.dataflow.json',
22
- lifecycle: 'agent-run.lifecycle.json',
23
- };
24
-
25
- function render(mode, example) {
26
- const output = path.join(tmp, `${mode}.html`);
27
- execFileSync(process.execPath, [
28
- path.join(skillRoot, 'bin', 'archify.mjs'),
29
- 'render',
30
- mode,
31
- path.join(skillRoot, 'examples', example),
32
- output,
33
- ]);
34
- return output;
35
- }
36
-
37
- function renderWithoutLegend() {
38
- const source = JSON.parse(fs.readFileSync(
39
- path.join(skillRoot, 'examples', CASES.architecture),
40
- 'utf8',
41
- ));
42
- source.meta = { ...source.meta, legend: { mode: 'hidden' } };
43
- const input = path.join(tmp, 'architecture-no-legend.json');
44
- const output = path.join(tmp, 'architecture-no-legend.html');
45
- fs.writeFileSync(input, `${JSON.stringify(source, null, 2)}\n`);
46
- execFileSync(process.execPath, [
47
- path.join(skillRoot, 'bin', 'archify.mjs'),
48
- 'render',
49
- 'architecture',
50
- input,
51
- output,
52
- ]);
53
- return output;
54
- }
55
-
56
- function canonicalSvg(html) {
57
- return html.match(/<svg\b[\s\S]*?<\/svg>/)?.[0] || '';
58
- }
59
-
60
- async function evaluate(browser, sessionId, expression, awaitPromise = false) {
61
- const response = await browser.cdp.send('Runtime.evaluate', {
62
- expression,
63
- awaitPromise,
64
- returnByValue: true,
65
- }, sessionId);
66
- if (response.exceptionDetails) {
67
- throw new Error(response.exceptionDetails.exception?.description
68
- || response.exceptionDetails.text
69
- || 'Runtime.evaluate failed');
70
- }
71
- return response.result?.value;
72
- }
73
-
74
- async function waitForLayout(browser, sessionId) {
75
- return evaluate(browser, sessionId, `(function () {
76
- var fontsReady = document.fonts && document.fonts.ready
77
- ? document.fonts.ready.catch(function () {})
78
- : Promise.resolve();
79
- return fontsReady.then(function () {
80
- return new Promise(function (resolve, reject) {
81
- var previous = '';
82
- var stableFrames = 0;
83
- var sampledFrames = 0;
84
- function rect(element) {
85
- if (!element) return 'missing';
86
- var value = element.getBoundingClientRect();
87
- return [value.left, value.top, value.right, value.bottom].map(function (entry) {
88
- return Math.round(entry * 100) / 100;
89
- }).join(',');
90
- }
91
- function sample() {
92
- sampledFrames += 1;
93
- var container = document.querySelector('.diagram-container');
94
- var current = [
95
- rect(container),
96
- rect(container && container.querySelector(':scope > svg')),
97
- rect(document.querySelector('.diagram-nav')),
98
- rect(document.querySelector('[data-legend]')),
99
- rect(document.getElementById('semantic-lens')),
100
- rect(document.getElementById('overview-map')),
101
- container ? getComputedStyle(container).getPropertyValue('--archify-nav-reserve') : ''
102
- ].join('|');
103
- if (current === previous) stableFrames += 1;
104
- else {
105
- previous = current;
106
- stableFrames = 0;
107
- }
108
- /* Final-artifact tests cannot inspect private scheduler flags. Eight
109
- equal frames cover the public three-frame contract plus any
110
- reader/viewer handoff queued after a ResizeObserver callback. */
111
- if (stableFrames >= 8) {
112
- resolve({ stable: true, snapshot: current, sampledFrames: sampledFrames });
113
- return;
114
- }
115
- if (sampledFrames >= 240) {
116
- reject(new Error('Final Viewer geometry did not stabilize.'));
117
- return;
118
- }
119
- requestAnimationFrame(sample);
120
- }
121
- requestAnimationFrame(sample);
122
- });
123
- });
124
- })()`, true);
125
- }
126
-
127
- async function finalGeometry(browser, sessionId) {
128
- return evaluate(browser, sessionId, `(function () {
129
- function area(a, b) {
130
- if (!a || !b || !a.width || !a.height || !b.width || !b.height) return 0;
131
- return Math.max(0, Math.min(a.right, b.right) - Math.max(a.left, b.left)) *
132
- Math.max(0, Math.min(a.bottom, b.bottom) - Math.max(a.top, b.top));
133
- }
134
- var container = document.querySelector('.diagram-container');
135
- var legend = document.querySelector('[data-legend]');
136
- var nav = document.querySelector('.diagram-nav');
137
- var svg = container && container.querySelector(':scope > svg');
138
- var lens = document.getElementById('semantic-lens');
139
- var radar = document.getElementById('overview-map');
140
- var passport = document.getElementById('focus-chip');
141
- var chromeReceipt = window.Archify && Archify.viewerChromeLayout
142
- && typeof Archify.viewerChromeLayout.receipt === 'function'
143
- ? Archify.viewerChromeLayout.receipt()
144
- : null;
145
- var viewBox = svg && svg.viewBox && svg.viewBox.baseVal;
146
- var projectedScale = svg && viewBox && viewBox.width > 0
147
- ? Math.min(1, svg.getBoundingClientRect().width / viewBox.width)
148
- : 0;
149
- var minimumProjectedNodeTextPx = null;
150
- if (svg && projectedScale > 0) {
151
- Array.from(svg.querySelectorAll('text[data-node-label], text[data-boundary-label], text[data-detail="context"]')).forEach(function (text) {
152
- if (text.hasAttribute('data-detail') && !text.closest('[data-node-id]')) return;
153
- var sourceFontPx = parseFloat(text.getAttribute('font-size') || '');
154
- if (!Number.isFinite(sourceFontPx)) return;
155
- var projectedFontPx = sourceFontPx * projectedScale;
156
- if (minimumProjectedNodeTextPx == null || projectedFontPx < minimumProjectedNodeTextPx) {
157
- minimumProjectedNodeTextPx = projectedFontPx;
158
- }
159
- });
160
- }
161
- var legendRect = legend && getComputedStyle(legend).display !== 'none' ? legend.getBoundingClientRect() : null;
162
- var navRect = nav && getComputedStyle(nav).display !== 'none' ? nav.getBoundingClientRect() : null;
163
- var stageRect = window.Archify && Archify.viewerChromeLayout
164
- && typeof Archify.viewerChromeLayout.stageRect === 'function'
165
- ? Archify.viewerChromeLayout.stageRect()
166
- : null;
167
- var lensRect = lens && !lens.hidden && getComputedStyle(lens).display !== 'none' ? lens.getBoundingClientRect() : null;
168
- var radarRect = radar && !radar.hidden && getComputedStyle(radar).display !== 'none' ? radar.getBoundingClientRect() : null;
169
- var passportRect = passport && !passport.hidden && getComputedStyle(passport).display !== 'none' ? passport.getBoundingClientRect() : null;
170
- var stageDockIntersectionArea = area(stageRect, navRect);
171
- var semanticDockIntersectionArea = stageDockIntersectionArea > 0 && navRect && svg
172
- ? Array.from(svg.querySelectorAll('[data-node-id]')).reduce(function (maximum, node) {
173
- return Math.max(maximum, area(node.getBoundingClientRect(), navRect));
174
- }, 0)
175
- : 0;
176
- return {
177
- reserve: parseFloat(getComputedStyle(container).getPropertyValue('--archify-nav-reserve')) || 0,
178
- receiptReserve: chromeReceipt ? chromeReceipt.reserve : null,
179
- receiptEligible: chromeReceipt ? chromeReceipt.eligible : null,
180
- receiptStageIntersectionArea: chromeReceipt ? chromeReceipt.stageIntersectionArea : null,
181
- minimumProjectedNodeTextPx: minimumProjectedNodeTextPx,
182
- stageGap: navRect && stageRect ? navRect.top - stageRect.bottom : null,
183
- dockStageIntersectionArea: stageDockIntersectionArea,
184
- legendDockIntersectionArea: stageDockIntersectionArea > 0 ? area(legendRect, navRect) : 0,
185
- semanticDockIntersectionArea: semanticDockIntersectionArea,
186
- legendLensIntersectionArea: area(legendRect, lensRect),
187
- navLensIntersectionArea: area(navRect, lensRect),
188
- legendRadarIntersectionArea: area(legendRect, radarRect),
189
- navRadarIntersectionArea: area(navRect, radarRect),
190
- legendPassportIntersectionArea: area(legendRect, passportRect),
191
- navPassportIntersectionArea: area(navRect, passportRect),
192
- radarPassportIntersectionArea: area(radarRect, passportRect),
193
- legendRect: legendRect ? { left: legendRect.left, right: legendRect.right, top: legendRect.top, bottom: legendRect.bottom } : null,
194
- navRect: navRect ? { left: navRect.left, right: navRect.right, top: navRect.top, bottom: navRect.bottom } : null,
195
- passportRect: passportRect ? { left: passportRect.left, right: passportRect.right, top: passportRect.top, bottom: passportRect.bottom } : null,
196
- radarRect: radarRect ? { left: radarRect.left, right: radarRect.right, top: radarRect.top, bottom: radarRect.bottom } : null,
197
- hasLegend: Boolean(legendRect && legendRect.width && legendRect.height),
198
- scrollWidth: document.documentElement.scrollWidth,
199
- scrollHeight: document.documentElement.scrollHeight,
200
- innerWidth: window.innerWidth,
201
- innerHeight: window.innerHeight,
202
- containerBottom: container ? container.getBoundingClientRect().bottom : null,
203
- containerHeight: container ? container.clientHeight : null,
204
- receiptGap: chromeReceipt ? chromeReceipt.gap : null,
205
- navBottom: navRect ? navRect.bottom : null
206
- };
207
- })()`);
208
- }
209
-
210
- async function edgePaintHitsUnderDock(browser, sessionId, selector) {
211
- return evaluate(browser, sessionId, `(function () {
212
- var edge = document.querySelector(${JSON.stringify(selector)});
213
- var nav = document.querySelector('.diagram-nav');
214
- if (!edge || !nav || typeof edge.getTotalLength !== 'function') return null;
215
- var navRect = nav.getBoundingClientRect();
216
- var matrix = edge.getScreenCTM();
217
- var length = edge.getTotalLength();
218
- var hits = [];
219
- for (var offset = 0; offset <= length; offset += 0.25) {
220
- var point = edge.getPointAtLength(offset).matrixTransform(matrix);
221
- if (point.x < navRect.left || point.x > navRect.right || point.y < navRect.top || point.y > navRect.bottom) continue;
222
- if (document.elementsFromPoint(point.x, point.y).includes(edge)) {
223
- hits.push({ x: point.x, y: point.y });
224
- if (hits.length >= 5) break;
225
- }
226
- }
227
- return hits;
228
- })()`);
229
- }
230
-
231
- async function load(browser, artifactPath, { width = 1440, height = 900, query = '' } = {}) {
232
- const sessionId = await browser.sessionPromise;
233
- await browser.cdp.send('Emulation.setDeviceMetricsOverride', {
234
- width,
235
- height,
236
- deviceScaleFactor: 1,
237
- mobile: false,
238
- }, sessionId);
239
- const loaded = browser.cdp.waitFor('Page.loadEventFired', sessionId);
240
- const navigation = await browser.cdp.send('Page.navigate', {
241
- url: pathToFileURL(artifactPath).href + query,
242
- }, sessionId);
243
- if (navigation.errorText) throw new Error(`Chrome navigation failed: ${navigation.errorText}`);
244
- await loaded;
245
- await evaluate(browser, sessionId, `document.documentElement.setAttribute('data-motion', 'still')`);
246
- await waitForLayout(browser, sessionId);
247
- return sessionId;
248
- }
249
-
250
- test('the public CLI gives all typed renderers one final Viewer contract', () => {
251
- const directChildSvg = /<div class="diagram-container"[^>]*>\s*<svg\b/;
252
- assert.doesNotMatch(
253
- '<div class="diagram-container"><section></section><svg>',
254
- directChildSvg,
255
- 'the direct-child assertion must not cross an intervening wrapper',
256
- );
257
- for (const [mode, example] of Object.entries(CASES)) {
258
- const output = render(mode, example);
259
- const html = fs.readFileSync(output, 'utf8');
260
- assert.match(html, /class="[^"]*\bdiagram-nav\b[^"]*"/, mode);
261
- assert.match(html, /data-legend/, mode);
262
- assert.match(html, directChildSvg, `${mode} keeps the SVG as a direct child`);
263
- assert.doesNotMatch(html, /class="diagram-stage"/, `${mode} does not re-nest the exported SVG`);
264
- assert.doesNotMatch(canonicalSvg(html), /nav-safe-rail|archify-nav-reserve|viewerChromeLayout/, mode);
265
- execFileSync(process.execPath, [path.join(skillRoot, 'bin', 'archify.mjs'), 'check', output]);
266
- }
267
- });
268
-
269
- test('Viewer chrome remains outside the canonical SVG export boundary', () => {
270
- const html = fs.readFileSync(render('architecture', CASES.architecture), 'utf8');
271
- const svg = canonicalSvg(html);
272
- assert.match(svg, /data-legend/);
273
- assert.doesNotMatch(svg, /diagram-nav|data-nav-stage-rail|viewerChromeLayout/);
274
- });
275
-
276
- test('Dock Safe Rail keeps typed renderers clear across themes, Presentation, and low-height desktops', {
277
- skip: chromePath ? false : 'Set ARCHIFY_CHROME to run the real browser regression.',
278
- }, async () => {
279
- const browser = new ChromeVisualBrowser(chromePath);
280
- const matrix = Object.keys(CASES).flatMap((mode) => [
281
- { mode, theme: 'light', width: 1440, height: 820, present: false },
282
- { mode, theme: 'dark', width: 1440, height: 900, present: true },
283
- ]);
284
- try {
285
- for (const entry of matrix) {
286
- const query = `?theme=${entry.theme}${entry.present ? '&present=1' : ''}`;
287
- const sessionId = await load(browser, render(entry.mode, CASES[entry.mode]), {
288
- width: entry.width,
289
- height: entry.height,
290
- query,
291
- });
292
- const receipt = await finalGeometry(browser, sessionId);
293
- const message = `${entry.mode}: ${JSON.stringify({ entry, receipt })}`;
294
- assert.ok(receipt.reserve > 0, message);
295
- assert.ok(receipt.stageGap >= 9, message);
296
- assert.equal(receipt.dockStageIntersectionArea, 0, message);
297
- assert.ok(receipt.scrollWidth <= receipt.innerWidth, message);
298
- assert.ok(receipt.navBottom <= receipt.containerBottom + 0.5, message);
299
- /* Normal artifacts intentionally keep supporting cards in document
300
- flow on low-height pages. Presentation removes that document scroll
301
- while every mode keeps the Viewer itself vertically contained. */
302
- if (entry.present) {
303
- assert.ok(receipt.scrollHeight <= receipt.innerHeight, message);
304
- }
305
- assert.ok(receipt.minimumProjectedNodeTextPx >= MIN_PROJECTED_NODE_TEXT_PX, message);
306
- }
307
- } finally {
308
- await browser.close();
309
- }
310
- });
311
-
312
- test('an artifact with no Legend still receives the desktop stage rail', {
313
- skip: chromePath ? false : 'Set ARCHIFY_CHROME to run the real browser regression.',
314
- }, async () => {
315
- const browser = new ChromeVisualBrowser(chromePath);
316
- try {
317
- const sessionId = await load(browser, renderWithoutLegend());
318
- const receipt = await finalGeometry(browser, sessionId);
319
-
320
- assert.equal(receipt.hasLegend, false, JSON.stringify(receipt));
321
- assert.ok(receipt.reserve > 0, JSON.stringify(receipt));
322
- assert.ok(receipt.stageGap >= 9, JSON.stringify(receipt));
323
- assert.ok(receipt.navBottom <= receipt.containerBottom + 0.5, JSON.stringify(receipt));
324
- } finally {
325
- await browser.close();
326
- }
327
- });
328
-
329
- test('Dock Safe Rail resolves a forced Legend collision across the shared diagram viewer', {
330
- skip: chromePath ? false : 'Set ARCHIFY_CHROME to run the real browser regression.',
331
- }, async () => {
332
- const browser = new ChromeVisualBrowser(chromePath);
333
- try {
334
- for (const [mode, example] of Object.entries(CASES)) {
335
- const sessionId = await load(browser, render(mode, example));
336
- const setup = await evaluate(browser, sessionId, `(function () {
337
- var nav = document.querySelector('.diagram-nav');
338
- var legendElement = document.querySelector('[data-legend]');
339
- if (!legendElement) {
340
- return { noLegend: true };
341
- }
342
- var initialLegend = legendElement.getBoundingClientRect();
343
- var containerRect = document.querySelector('.diagram-container').getBoundingClientRect();
344
- nav.style.right = 'auto';
345
- nav.style.left = Math.max(0, initialLegend.left - containerRect.left) + 'px';
346
- nav.style.bottom = Math.max(0, containerRect.bottom - initialLegend.bottom) + 'px';
347
- nav.style.width = Math.max(240, initialLegend.width) + 'px';
348
- window.dispatchEvent(new Event('resize'));
349
- return { noLegend: false };
350
- })()`);
351
-
352
- if (setup.noLegend) {
353
- const receipt = await finalGeometry(browser, sessionId);
354
- assert.ok(receipt.reserve > 0, mode);
355
- assert.ok(receipt.stageGap >= 9, mode);
356
- continue;
357
- }
358
- await waitForLayout(browser, sessionId);
359
- const receipt = await finalGeometry(browser, sessionId);
360
- assert.ok(receipt.reserve > 0, `${mode}: ${JSON.stringify(receipt)}`);
361
- assert.equal(receipt.legendDockIntersectionArea, 0, `${mode}: ${JSON.stringify(receipt)}`);
362
- assert.ok(receipt.stageGap >= 9, `${mode}: ${JSON.stringify(receipt)}`);
363
- }
364
- } finally {
365
- await browser.close();
366
- }
367
- });
368
-
369
- test('Maka remains collision-free at the reported Retina-equivalent viewport', {
370
- skip: chromePath ? false : 'Set ARCHIFY_CHROME to run the real browser regression.',
371
- }, async () => {
372
- const output = path.join(tmp, 'maka-architecture.html');
373
- execFileSync(process.execPath, [
374
- path.join(skillRoot, 'bin', 'archify.mjs'),
375
- 'render',
376
- 'architecture',
377
- path.resolve(skillRoot, '..', 'examples', 'maka-architecture.architecture.json'),
378
- output,
379
- ]);
380
- const browser = new ChromeVisualBrowser(chromePath);
381
- try {
382
- const sessionId = await load(browser, output, { width: 1484, height: 724 });
383
- const receipt = await evaluate(browser, sessionId, `(function () {
384
- var legend = document.querySelector('[data-legend]').getBoundingClientRect();
385
- var dock = document.querySelector('.diagram-nav').getBoundingClientRect();
386
- var width = Math.max(0, Math.min(legend.right, dock.right) - Math.max(legend.left, dock.left));
387
- var height = Math.max(0, Math.min(legend.bottom, dock.bottom) - Math.max(legend.top, dock.top));
388
- return {
389
- intersectionArea: width * height,
390
- scrollWidth: document.documentElement.scrollWidth,
391
- innerWidth: window.innerWidth
392
- };
393
- })()`);
394
-
395
- assert.equal(receipt.intersectionArea, 0, JSON.stringify(receipt));
396
- assert.ok(receipt.scrollWidth <= receipt.innerWidth, JSON.stringify(receipt));
397
- } finally {
398
- await browser.close();
399
- }
400
- });
401
-
402
- test('a real 5px Legend gap keeps the stage rail and Legend clear', {
403
- skip: chromePath ? false : 'Set ARCHIFY_CHROME to run the real browser regression.',
404
- }, async () => {
405
- const browser = new ChromeVisualBrowser(chromePath);
406
- try {
407
- const sessionId = await load(browser, render('architecture', CASES.architecture));
408
- await evaluate(browser, sessionId, `(function () {
409
- var container = document.querySelector('.diagram-container');
410
- var legend = document.querySelector('[data-legend]');
411
- var nav = document.querySelector('.diagram-nav');
412
- var legendRect = legend.getBoundingClientRect();
413
- var containerRect = container.getBoundingClientRect();
414
- nav.style.right = 'auto';
415
- nav.style.left = (legendRect.right - containerRect.left + 5) + 'px';
416
- nav.style.bottom = Math.max(0, containerRect.bottom - legendRect.bottom) + 'px';
417
- window.dispatchEvent(new Event('resize'));
418
- })()`);
419
- await waitForLayout(browser, sessionId);
420
- const receipt = await finalGeometry(browser, sessionId);
421
-
422
- assert.equal(receipt.legendDockIntersectionArea, 0, JSON.stringify(receipt));
423
- assert.ok(receipt.reserve > 0, JSON.stringify(receipt));
424
- assert.ok(receipt.stageGap >= 9, JSON.stringify(receipt));
425
- } finally {
426
- await browser.close();
427
- }
428
- });
429
-
430
- test('Presentation keeps its visible Dock clear of a colliding Legend', {
431
- skip: chromePath ? false : 'Set ARCHIFY_CHROME to run the real browser regression.',
432
- }, async () => {
433
- const browser = new ChromeVisualBrowser(chromePath);
434
- try {
435
- const sessionId = await load(browser, render('architecture', CASES.architecture), { query: '?present=1' });
436
- await evaluate(browser, sessionId, `(function () {
437
- var container = document.querySelector('.diagram-container');
438
- var legend = document.querySelector('[data-legend]');
439
- var nav = document.querySelector('.diagram-nav');
440
- var legendRect = legend.getBoundingClientRect();
441
- var containerRect = container.getBoundingClientRect();
442
- nav.style.right = 'auto';
443
- nav.style.left = Math.max(0, legendRect.left - containerRect.left) + 'px';
444
- nav.style.bottom = Math.max(0, containerRect.bottom - legendRect.bottom) + 'px';
445
- nav.style.width = Math.max(240, legendRect.width) + 'px';
446
- window.dispatchEvent(new Event('resize'));
447
- })()`);
448
- await waitForLayout(browser, sessionId);
449
- const receipt = await finalGeometry(browser, sessionId);
450
-
451
- assert.equal(receipt.legendDockIntersectionArea, 0, JSON.stringify(receipt));
452
- assert.ok(receipt.reserve > 0, JSON.stringify(receipt));
453
- } finally {
454
- await browser.close();
455
- }
456
- });
457
-
458
- test('manual zoom and pan reschedules Legend and Dock collision measurement', {
459
- skip: chromePath ? false : 'Set ARCHIFY_CHROME to run the real browser regression.',
460
- }, async () => {
461
- const browser = new ChromeVisualBrowser(chromePath);
462
- try {
463
- const sessionId = await load(browser, render('architecture', CASES.architecture));
464
- await evaluate(browser, sessionId, `(function () {
465
- var container = document.querySelector('.diagram-container');
466
- var zoomIn = document.querySelector('[data-view="in"]');
467
- for (var index = 0; index < 8; index += 1) zoomIn.click();
468
- var svg = container.querySelector(':scope > svg');
469
- var rect = svg.getBoundingClientRect();
470
- var pointer = { bubbles: true, pointerId: 7, button: 0 };
471
- var startX = rect.left + rect.width / 2;
472
- var startY = rect.top + rect.height / 2;
473
- container.dispatchEvent(new PointerEvent('pointerdown', Object.assign({ clientX: startX, clientY: startY }, pointer)));
474
- container.dispatchEvent(new PointerEvent('pointermove', Object.assign({ clientX: startX + 210, clientY: startY - 500 }, pointer)));
475
- container.dispatchEvent(new PointerEvent('pointerup', Object.assign({ clientX: startX + 210, clientY: startY - 500 }, pointer)));
476
- })()`);
477
- await waitForLayout(browser, sessionId);
478
- const receipt = await finalGeometry(browser, sessionId);
479
-
480
- assert.equal(receipt.legendDockIntersectionArea, 0, JSON.stringify(receipt));
481
- assert.equal(receipt.semanticDockIntersectionArea, 0, JSON.stringify(receipt));
482
- assert.ok(receipt.reserve > 0, JSON.stringify(receipt));
483
- } finally {
484
- await browser.close();
485
- }
486
- });
487
-
488
- test('camera pan clips authored relationship paint at the protected stage boundary', {
489
- skip: chromePath ? false : 'Set ARCHIFY_CHROME to run the real browser regression.',
490
- }, async () => {
491
- const browser = new ChromeVisualBrowser(chromePath);
492
- try {
493
- const sessionId = await load(browser, render('architecture', CASES.architecture));
494
- await evaluate(browser, sessionId, `(function () {
495
- var container = document.querySelector('.diagram-container');
496
- var zoomIn = document.querySelector('[data-view="in"]');
497
- for (var index = 0; index < 8; index += 1) zoomIn.click();
498
- var svg = container.querySelector(':scope > svg');
499
- var rect = svg.getBoundingClientRect();
500
- var pointer = { bubbles: true, pointerId: 11, button: 0 };
501
- var startX = rect.left + rect.width / 2;
502
- var startY = rect.top + rect.height / 2;
503
- container.dispatchEvent(new PointerEvent('pointerdown', Object.assign({ clientX: startX, clientY: startY }, pointer)));
504
- container.dispatchEvent(new PointerEvent('pointermove', Object.assign({ clientX: startX, clientY: startY + 500 }, pointer)));
505
- container.dispatchEvent(new PointerEvent('pointerup', Object.assign({ clientX: startX, clientY: startY + 500 }, pointer)));
506
- })()`);
507
- await waitForLayout(browser, sessionId);
508
- const hits = await edgePaintHitsUnderDock(
509
- browser,
510
- sessionId,
511
- 'path[data-edge-id="jwt-verification"][data-edge-from="auth"][data-edge-to="api"]',
512
- );
513
-
514
- assert.deepEqual(hits, [], JSON.stringify(hits));
515
- } finally {
516
- await browser.close();
517
- }
518
- });
519
-
520
- test('live camera transitions keep authored relationship paint outside the Dock on every frame', {
521
- skip: chromePath ? false : 'Set ARCHIFY_CHROME to run the real browser regression.',
522
- }, async () => {
523
- const browser = new ChromeVisualBrowser(chromePath);
524
- const artifact = render('architecture', CASES.architecture);
525
- const scenarios = [
526
- { name: 'zoom-in', setupZoomClicks: 7, action: 'in', duration: 260, clearsClip: false },
527
- { name: 'zoom-out', setupZoomClicks: 8, action: 'out', duration: 260, clearsClip: false },
528
- { name: 'reset', setupZoomClicks: 8, action: 'reset', duration: 420, clearsClip: true },
529
- { name: 'interrupted zoom', setupZoomClicks: 8, action: 'interrupt', duration: 420, clearsClip: false },
530
- ];
531
- try {
532
- for (const scenario of scenarios) {
533
- const sessionId = await load(browser, artifact);
534
- const result = await evaluate(browser, sessionId, `(function () {
535
- var scenario = ${JSON.stringify(scenario)};
536
- var container = document.querySelector('.diagram-container');
537
- var svg = container.querySelector(':scope > svg');
538
- var zoomIn = document.querySelector('[data-view="in"]');
539
- var zoomOut = document.querySelector('[data-view="out"]');
540
- for (var index = 0; index < scenario.setupZoomClicks; index += 1) zoomIn.click();
541
-
542
- var rect = svg.getBoundingClientRect();
543
- var pointer = { bubbles: true, pointerId: 17, button: 0 };
544
- var x = rect.left + rect.width / 2;
545
- var y = rect.top + rect.height / 2;
546
- container.dispatchEvent(new PointerEvent('pointerdown', Object.assign({ clientX: x, clientY: y }, pointer)));
547
- container.dispatchEvent(new PointerEvent('pointermove', Object.assign({ clientX: x, clientY: y + 500 }, pointer)));
548
- container.dispatchEvent(new PointerEvent('pointerup', Object.assign({ clientX: x, clientY: y + 500 }, pointer)));
549
-
550
- document.documentElement.removeAttribute('data-motion');
551
- return new Promise(function (resolve) {
552
- requestAnimationFrame(function () {
553
- if (scenario.action === 'in') zoomIn.click();
554
- else if (scenario.action === 'out') zoomOut.click();
555
- else if (scenario.action === 'reset') document.querySelector('[data-view="reset"]').click();
556
- else {
557
- zoomOut.click();
558
- requestAnimationFrame(function () { zoomIn.click(); });
559
- }
560
- var edge = document.querySelector(
561
- 'path[data-edge-id="jwt-verification"][data-edge-from="auth"][data-edge-to="api"]'
562
- );
563
- var hits = [];
564
- var started = performance.now();
565
- function sample(now) {
566
- var dock = document.querySelector('.diagram-nav').getBoundingClientRect();
567
- var matrix = edge.getScreenCTM();
568
- var length = edge.getTotalLength();
569
- for (var offset = 0; offset <= length; offset += 0.25) {
570
- var point = edge.getPointAtLength(offset).matrixTransform(matrix);
571
- if (
572
- point.x >= dock.left && point.x <= dock.right &&
573
- point.y >= dock.top && point.y <= dock.bottom &&
574
- document.elementsFromPoint(point.x, point.y).includes(edge)
575
- ) {
576
- hits.push({ ms: now - started, x: point.x, y: point.y });
577
- break;
578
- }
579
- }
580
- if (now - started < scenario.duration) requestAnimationFrame(sample);
581
- else resolve({ hits: hits, clipPath: svg.style.getPropertyValue('clip-path') });
582
- }
583
- requestAnimationFrame(sample);
584
- });
585
- });
586
- })()`, true);
587
-
588
- assert.deepEqual(result.hits, [], `${scenario.name}: ${JSON.stringify(result.hits)}`);
589
- if (scenario.clearsClip) {
590
- assert.equal(result.clipPath, '', `${scenario.name} retains runtime clip-path`);
591
- }
592
- }
593
- } finally {
594
- await browser.close();
595
- }
596
- });
597
-
598
- test('zoom keeps the desktop rail stable and reports protected stage geometry', {
599
- skip: chromePath ? false : 'Set ARCHIFY_CHROME to run the real browser regression.',
600
- }, async () => {
601
- const browser = new ChromeVisualBrowser(chromePath);
602
- try {
603
- const sessionId = await load(browser, render('architecture', CASES.architecture));
604
- const baseline = await finalGeometry(browser, sessionId);
605
- await evaluate(browser, sessionId, `(function () {
606
- var container = document.querySelector('.diagram-container');
607
- var zoomIn = document.querySelector('[data-view="in"]');
608
- for (var index = 0; index < 8; index += 1) zoomIn.click();
609
- var svg = container.querySelector(':scope > svg');
610
- var rect = svg.getBoundingClientRect();
611
- var pointer = { bubbles: true, pointerId: 13, button: 0 };
612
- var startX = rect.left + rect.width / 2;
613
- var startY = rect.top + rect.height / 2;
614
- container.dispatchEvent(new PointerEvent('pointerdown', Object.assign({ clientX: startX, clientY: startY }, pointer)));
615
- container.dispatchEvent(new PointerEvent('pointermove', Object.assign({ clientX: startX + 210, clientY: startY - 500 }, pointer)));
616
- container.dispatchEvent(new PointerEvent('pointerup', Object.assign({ clientX: startX + 210, clientY: startY - 500 }, pointer)));
617
- })()`);
618
- await waitForLayout(browser, sessionId);
619
- const zoomed = await finalGeometry(browser, sessionId);
620
-
621
- assert.ok(Math.abs(zoomed.reserve - baseline.reserve) <= 1, JSON.stringify({ baseline, zoomed }));
622
- assert.equal(zoomed.dockStageIntersectionArea, 0, JSON.stringify({ baseline, zoomed }));
623
- assert.equal(zoomed.receiptStageIntersectionArea, 0, JSON.stringify({ baseline, zoomed }));
624
- } finally {
625
- await browser.close();
626
- }
627
- });
628
-
629
- test('Reset followed immediately by zoom and pan retains a collision-free desktop rail', {
630
- skip: chromePath ? false : 'Set ARCHIFY_CHROME to run the real browser regression.',
631
- }, async () => {
632
- const browser = new ChromeVisualBrowser(chromePath);
633
- try {
634
- const sessionId = await load(browser, render('architecture', CASES.architecture));
635
- const baseline = await finalGeometry(browser, sessionId);
636
- await evaluate(browser, sessionId, `(function () {
637
- var container = document.querySelector('.diagram-container');
638
- document.querySelector('[data-view="reset"]').click();
639
- var zoomIn = document.querySelector('[data-view="in"]');
640
- for (var index = 0; index < 8; index += 1) zoomIn.click();
641
- var svg = container.querySelector(':scope > svg');
642
- var rect = svg.getBoundingClientRect();
643
- var pointer = { bubbles: true, pointerId: 11, button: 0 };
644
- var startX = rect.left + rect.width / 2;
645
- var startY = rect.top + rect.height / 2;
646
- container.dispatchEvent(new PointerEvent('pointerdown', Object.assign({ clientX: startX, clientY: startY }, pointer)));
647
- container.dispatchEvent(new PointerEvent('pointermove', Object.assign({ clientX: startX, clientY: startY + 500 }, pointer)));
648
- container.dispatchEvent(new PointerEvent('pointerup', Object.assign({ clientX: startX, clientY: startY + 500 }, pointer)));
649
- })()`);
650
- await waitForLayout(browser, sessionId);
651
- const receipt = await finalGeometry(browser, sessionId);
652
-
653
- assert.ok(receipt.reserve > 0, JSON.stringify({ baseline, receipt }));
654
- assert.ok(receipt.reserve <= baseline.reserve + 1, JSON.stringify({ baseline, receipt }));
655
- assert.equal(receipt.semanticDockIntersectionArea, 0, JSON.stringify({ baseline, receipt }));
656
- } finally {
657
- await browser.close();
658
- }
659
- });
660
-
661
- test('zoomed camera restores its bounded desktop rail after crossing the mobile breakpoint', {
662
- skip: chromePath ? false : 'Set ARCHIFY_CHROME to run the real browser regression.',
663
- }, async () => {
664
- const browser = new ChromeVisualBrowser(chromePath);
665
- try {
666
- const sessionId = await load(browser, render('architecture', CASES.architecture));
667
- const baseline = await finalGeometry(browser, sessionId);
668
- await evaluate(browser, sessionId, `(function () {
669
- var zoomIn = document.querySelector('[data-view="in"]');
670
- for (var index = 0; index < 8; index += 1) zoomIn.click();
671
- })()`);
672
- await waitForLayout(browser, sessionId);
673
- const zoomed = await finalGeometry(browser, sessionId);
674
-
675
- await browser.cdp.send('Emulation.setDeviceMetricsOverride', {
676
- width: 720,
677
- height: 900,
678
- deviceScaleFactor: 1,
679
- mobile: false,
680
- }, sessionId);
681
- await waitForLayout(browser, sessionId);
682
- const mobile = await finalGeometry(browser, sessionId);
683
- assert.equal(mobile.reserve, 0, JSON.stringify(mobile));
684
-
685
- await browser.cdp.send('Emulation.setDeviceMetricsOverride', {
686
- width: 1440,
687
- height: 900,
688
- deviceScaleFactor: 1,
689
- mobile: false,
690
- }, sessionId);
691
- await waitForLayout(browser, sessionId);
692
- const restored = await finalGeometry(browser, sessionId);
693
-
694
- assert.ok(Math.abs(restored.reserve - baseline.reserve) <= 1, JSON.stringify({ baseline, zoomed, restored }));
695
- assert.equal(restored.receiptReserve, restored.reserve, JSON.stringify(restored));
696
- assert.equal(restored.receiptEligible, true, JSON.stringify(restored));
697
- assert.ok(restored.scrollHeight <= restored.innerHeight, JSON.stringify(restored));
698
- } finally {
699
- await browser.close();
700
- }
701
- });
702
-
703
- test('localized multiline Legends remain clear across required viewports, themes, and presets', {
704
- skip: chromePath ? false : 'Set ARCHIFY_CHROME to run the real browser regression.',
705
- }, async () => {
706
- const browser = new ChromeVisualBrowser(chromePath);
707
- const viewports = [[1440, 900], [1600, 1000], [1920, 1080], [2048, 1320]];
708
- const cases = viewports.flatMap(([width, height]) => (
709
- ['light', 'dark'].flatMap((theme) => (
710
- ['classic', 'signal-flow', 'blueprint', 'editorial'].map((preset) => ({
711
- width,
712
- height,
713
- theme,
714
- preset,
715
- }))
716
- ))
717
- ));
718
- try {
719
- const sessionId = await load(browser, render('architecture', CASES.architecture), { width: 1920, height: 1080 });
720
- await evaluate(browser, sessionId, `(function () {
721
- var text = document.querySelector('[data-legend] text');
722
- var x = text.getAttribute('x') || '0';
723
- var namespace = 'http://www.w3.org/2000/svg';
724
- text.textContent = '';
725
- var first = document.createElementNS(namespace, 'tspan');
726
- first.setAttribute('x', x);
727
- first.textContent = '应用与运行时编排服务(本地化长标签)';
728
- var second = document.createElementNS(namespace, 'tspan');
729
- second.setAttribute('x', x);
730
- second.setAttribute('dy', '14');
731
- second.textContent = '第二行语义说明';
732
- text.appendChild(first);
733
- text.appendChild(second);
734
- })()`);
735
-
736
- for (const entry of cases) {
737
- await browser.cdp.send('Emulation.setDeviceMetricsOverride', {
738
- width: entry.width,
739
- height: entry.height,
740
- deviceScaleFactor: 1,
741
- mobile: false,
742
- }, sessionId);
743
- await evaluate(browser, sessionId, `(function () {
744
- var html = document.documentElement;
745
- var nav = document.querySelector('.diagram-nav');
746
- html.setAttribute('data-preset', ${JSON.stringify(entry.preset)});
747
- html.setAttribute('data-theme', ${JSON.stringify(entry.theme)});
748
- document.querySelector('[data-view="reset"]').click();
749
- nav.removeAttribute('style');
750
- window.dispatchEvent(new Event('resize'));
751
- })()`);
752
- await waitForLayout(browser, sessionId);
753
- let receipt = null;
754
- for (let attempt = 0; attempt < 3; attempt += 1) {
755
- await evaluate(browser, sessionId, `(function () {
756
- var container = document.querySelector('.diagram-container');
757
- var legend = document.querySelector('[data-legend]').getBoundingClientRect();
758
- var nav = document.querySelector('.diagram-nav');
759
- var containerRect = container.getBoundingClientRect();
760
- nav.style.right = '0';
761
- nav.style.left = '0';
762
- nav.style.bottom = Math.max(0, containerRect.bottom - legend.bottom) + 'px';
763
- nav.style.width = 'auto';
764
- window.dispatchEvent(new Event('resize'));
765
- })()`);
766
- await waitForLayout(browser, sessionId);
767
- receipt = await finalGeometry(browser, sessionId);
768
- if (receipt.reserve > 0) break;
769
- }
770
- assert.equal(receipt.legendDockIntersectionArea, 0, JSON.stringify({ ...entry, receipt }));
771
- assert.ok(receipt.reserve > 0, JSON.stringify({ ...entry, receipt }));
772
- assert.equal(receipt.dockStageIntersectionArea, 0, JSON.stringify({ ...entry, receipt }));
773
- assert.ok(receipt.stageGap >= 9, JSON.stringify({ ...entry, receipt }));
774
- }
775
- } finally {
776
- await browser.close();
777
- }
778
- });
779
-
780
- test('Semantic Lens and Radar protect the final Legend and Dock rectangles', {
781
- skip: chromePath ? false : 'Set ARCHIFY_CHROME to run the real browser regression.',
782
- }, async () => {
783
- const browser = new ChromeVisualBrowser(chromePath);
784
- try {
785
- const sessionId = await load(browser, render('architecture', CASES.architecture), { width: 1440, height: 900 });
786
- await evaluate(browser, sessionId, `document.getElementById('btn-semantic-lens').click()`);
787
- await waitForLayout(browser, sessionId);
788
- let receipt = await finalGeometry(browser, sessionId);
789
- assert.equal(receipt.legendLensIntersectionArea, 0, JSON.stringify(receipt));
790
- assert.equal(receipt.navLensIntersectionArea, 0, JSON.stringify(receipt));
791
-
792
- await evaluate(browser, sessionId, `(function () {
793
- document.getElementById('btn-semantic-lens').click();
794
- document.getElementById('btn-overview-map').click();
795
- })()`);
796
- await waitForLayout(browser, sessionId);
797
- receipt = await finalGeometry(browser, sessionId);
798
- assert.equal(receipt.legendRadarIntersectionArea, 0, JSON.stringify(receipt));
799
- assert.equal(receipt.navRadarIntersectionArea, 0, JSON.stringify(receipt));
800
- } finally {
801
- await browser.close();
802
- }
803
- });
804
-
805
- test('Radar, Passport, Legend, and Dock remain mutually clear on desktop and narrow viewports', {
806
- skip: chromePath ? false : 'Set ARCHIFY_CHROME to run the real browser regression.',
807
- }, async () => {
808
- const browser = new ChromeVisualBrowser(chromePath);
809
- try {
810
- const artifact = render('architecture', CASES.architecture);
811
- for (const viewport of [
812
- { width: 1440, height: 900, label: 'desktop' },
813
- { width: 390, height: 600, label: 'narrow' },
814
- ]) {
815
- const sessionId = await load(browser, artifact, viewport);
816
- await evaluate(browser, sessionId, `(function () {
817
- var container = document.querySelector('.diagram-container');
818
- window.scrollTo(0, Math.max(0, container.offsetTop));
819
- Archify.focus.set('lb', { toggle: false });
820
- Archify.radar.open();
821
- window.dispatchEvent(new Event('resize'));
822
- })()`);
823
- await waitForLayout(browser, sessionId);
824
- const receipt = await finalGeometry(browser, sessionId);
825
- const message = viewport.label + ': ' + JSON.stringify(receipt);
826
-
827
- assert.equal(receipt.legendDockIntersectionArea, 0, message);
828
- assert.equal(receipt.legendPassportIntersectionArea, 0, message);
829
- assert.equal(receipt.navPassportIntersectionArea, 0, message);
830
- assert.equal(receipt.legendRadarIntersectionArea, 0, message);
831
- assert.equal(receipt.navRadarIntersectionArea, 0, message);
832
- assert.equal(receipt.radarPassportIntersectionArea, 0, message);
833
- }
834
- } finally {
835
- await browser.close();
836
- }
837
- });
838
-
839
- test('mobile, embed, and print keep zero reserve while hidden Legends retain the stage rail', {
840
- skip: chromePath ? false : 'Set ARCHIFY_CHROME to run the real browser regression.',
841
- }, async () => {
842
- const browser = new ChromeVisualBrowser(chromePath);
843
- try {
844
- let sessionId = await load(browser, render('architecture', CASES.architecture), { width: 720, height: 900 });
845
- let receipt = await finalGeometry(browser, sessionId);
846
- assert.equal(receipt.reserve, 0, `mobile: ${JSON.stringify(receipt)}`);
847
- assert.equal(receipt.legendDockIntersectionArea, 0, `mobile: ${JSON.stringify(receipt)}`);
848
-
849
- sessionId = await load(browser, render('architecture', CASES.architecture), { query: '?embed=1' });
850
- receipt = await finalGeometry(browser, sessionId);
851
- assert.equal(receipt.reserve, 0, `embed: ${JSON.stringify(receipt)}`);
852
-
853
- sessionId = await load(browser, render('architecture', CASES.architecture));
854
- await evaluate(browser, sessionId, `(function () {
855
- document.querySelector('[data-legend]').hidden = true;
856
- window.dispatchEvent(new Event('resize'));
857
- })()`);
858
- await waitForLayout(browser, sessionId);
859
- receipt = await finalGeometry(browser, sessionId);
860
- assert.ok(receipt.reserve > 0, `hidden: ${JSON.stringify(receipt)}`);
861
- assert.ok(receipt.stageGap >= 9, `hidden: ${JSON.stringify(receipt)}`);
862
-
863
- await browser.cdp.send('Emulation.setEmulatedMedia', { media: 'print' }, sessionId);
864
- await waitForLayout(browser, sessionId);
865
- receipt = await finalGeometry(browser, sessionId);
866
- assert.equal(receipt.reserve, 0, `print: ${JSON.stringify(receipt)}`);
867
- } finally {
868
- await browser.close();
869
- }
870
- });
871
-
872
-
873
- test('Chrome Layout preserves scheduling, mode restoration and Reader handoffs', {
874
- skip: chromePath ? false : 'Set ARCHIFY_CHROME to run the real browser regression.',
875
- }, async (t) => {
876
- const browser = new ChromeVisualBrowser(chromePath);
877
- t.after(() => browser.close());
878
- const evidence = process.env.ARCHIFY_CHROME_LAYOUT_EVIDENCE;
879
- if (evidence) fs.mkdirSync(evidence, { recursive: true });
880
- const observations = [];
881
- const file = render('architecture', CASES.architecture);
882
- const session = await browser.sessionPromise;
883
- const send = (method, params = {}) => browser.cdp.send(method, params, session);
884
- const run = (expression, awaitPromise = false) => evaluate(browser, session, expression, awaitPromise);
885
- await send('Page.addScriptToEvaluateOnNewDocument', {
886
- source: `window.chromeLayoutErrors = [];
887
- addEventListener('error', e => chromeLayoutErrors.push(e.message));
888
- addEventListener('unhandledrejection', e => chromeLayoutErrors.push(String(e.reason)));`,
889
- });
890
- async function resize(width, height = 900) {
891
- await send('Emulation.setDeviceMetricsOverride', { width, height, deviceScaleFactor: 1, mobile: false });
892
- await waitForLayout(browser, session);
893
- }
894
- async function state(label) {
895
- // Read DOM first, without receipt(), measure() or public stability methods.
896
- // This ensures those methods cannot make a missed automatic event pass.
897
- const raw = await run(`(() => {
898
- const html = document.documentElement;
899
- const container = document.querySelector('.diagram-container');
900
- const svg = container.querySelector(':scope > svg');
901
- return {
902
- reserve: parseFloat(container.style.getPropertyValue('--archify-nav-reserve')) || 0,
903
- rootRail: html.getAttribute('data-nav-stage-rail'), rail: container.getAttribute('data-nav-stage-rail'),
904
- reader: html.getAttribute('data-reader-layout'), width: innerWidth,
905
- viewBox: svg.getAttribute('viewBox'),
906
- errors: chromeLayoutErrors,
907
- external: performance.getEntriesByType('resource').map(e => e.name).filter(n => /^https?:/.test(n))
908
- };
909
- })()`);
910
- assert.deepEqual(raw.errors, [], label);
911
- assert.deepEqual(raw.external, [], label);
912
- const geometry = await finalGeometry(browser, session);
913
- assert.equal(raw.reserve, geometry.receiptReserve, `${label}: observation must not repair stale state`);
914
- assert.equal(raw.rootRail, raw.reserve ? 'true' : null, label);
915
- assert.equal(raw.rail, raw.rootRail, label);
916
- observations.push({ label, ...raw, geometry });
917
- return { ...raw, geometry };
918
- }
919
- function zero(value) {
920
- assert.equal(value.reserve, 0);
921
- assert.equal(value.rail, null);
922
- assert.equal(value.rootRail, null);
923
- }
924
- function clearStage(value) {
925
- assert.equal(value.geometry.dockStageIntersectionArea, 0, JSON.stringify(value));
926
- assert.ok(value.geometry.stageGap >= 9, JSON.stringify(value));
927
- }
928
- function variant(name, source) {
929
- const original = fs.readFileSync(file, 'utf8');
930
- const html = original.replace(' <script>\n var Archify = {};',
931
- () => ` <script>${source}</script>\n <script>\n var Archify = {};`);
932
- assert.notEqual(html, original);
933
- const output = path.join(tmp, `chrome-${name}.html`);
934
- fs.writeFileSync(output, html);
935
- return output;
936
- }
937
- try {
938
- await t.test('automatic resize crosses Chrome and Reader thresholds without reserve accumulation', async () => {
939
- await load(browser, file);
940
- const initial = await state('threshold-initial');
941
- for (const width of [719, 720, 721, 1023, 1024, 1025, 720, 1440]) {
942
- await resize(width);
943
- const current = await state(`threshold-${width}-${observations.length}`);
944
- assert.equal(current.geometry.receiptEligible, width > 720);
945
- assert.equal(current.reader, width >= 1024 ? 'adaptive' : null);
946
- assert.equal(current.viewBox, initial.viewBox);
947
- if (width <= 720) zero(current);
948
- else clearStage(current);
949
- if (width === 1440) assert.equal(current.reserve, initial.reserve);
950
- }
951
- });
952
-
953
- await t.test('automatic observer callbacks handle navigation size, visibility and content changes', async () => {
954
- await load(browser, file);
955
- const initial = await state('observer-initial');
956
- await run(`document.querySelector('.diagram-nav').style.display = 'none'`);
957
- await waitForLayout(browser, session);
958
- zero(await state('observer-nav-hidden'));
959
- await run(`document.querySelector('.diagram-nav').style.display = ''`);
960
- await waitForLayout(browser, session);
961
- const restored = await state('observer-nav-restored');
962
- assert.equal(restored.reserve, initial.reserve);
963
- await run(`document.querySelector('.diagram-nav').style.height = '120px'`);
964
- await waitForLayout(browser, session);
965
- const taller = await state('observer-nav-taller');
966
- assert.ok(taller.reserve > initial.reserve);
967
- clearStage(taller);
968
- // A legend mutation drives the existing MutationObserver. Font/preset
969
- // rules remain the production rules; no public layout method is invoked.
970
- await run(`document.querySelector('[data-legend]').setAttribute('transform', 'translate(0,-20)')`);
971
- await waitForLayout(browser, session);
972
- clearStage(await state('observer-legend-changed'));
973
- await run(`document.querySelector('.diagram-nav').style.height = ''; window.dispatchEvent(new Event('resize'))`);
974
- await waitForLayout(browser, session);
975
- assert.equal((await state('observer-returned')).reserve, initial.reserve);
976
- await run(`document.querySelector('.diagram-nav').style.bottom = '-200px'; window.dispatchEvent(new Event('resize'))`);
977
- await waitForLayout(browser, session);
978
- zero(await state('no-reserve-needed'));
979
- });
980
-
981
- await t.test('embed and print restore a zoomed rail, while Presentation remains eligible', async () => {
982
- for (const mode of ['embed', 'print']) {
983
- if (mode === 'print') await send('Emulation.setEmulatedMedia', { media: 'print' });
984
- await load(browser, file, { query: mode === 'embed' ? '?embed=1' : '' });
985
- zero(await state(`${mode}-initial`));
986
- await send('Emulation.setEmulatedMedia', { media: '' });
987
- await load(browser, file);
988
- const initial = await state(`${mode}-ordinary`);
989
- await run('Archify.view.zoomIn()');
990
- await waitForLayout(browser, session);
991
- for (let cycle = 0; cycle < 2; cycle += 1) {
992
- if (mode === 'embed') await run(`document.documentElement.setAttribute('data-embed', 'true')`);
993
- else {
994
- await send('Emulation.setEmulatedMedia', { media: 'print' });
995
- await run(`window.dispatchEvent(new Event('beforeprint'))`);
996
- }
997
- await waitForLayout(browser, session);
998
- zero(await state(`${mode}-enter-${cycle}`));
999
- if (mode === 'embed') await run(`document.documentElement.removeAttribute('data-embed')`);
1000
- else {
1001
- await send('Emulation.setEmulatedMedia', { media: '' });
1002
- await run(`window.dispatchEvent(new Event('afterprint'))`);
1003
- }
1004
- await waitForLayout(browser, session);
1005
- const restored = await state(`${mode}-return-${cycle}`);
1006
- assert.equal(restored.reserve, initial.reserve);
1007
- clearStage(restored);
1008
- }
1009
- }
1010
- for (const theme of ['dark', 'light']) {
1011
- await send('Emulation.setEmulatedMedia', { media: '', features: [
1012
- { name: 'prefers-reduced-motion', value: theme === 'light' ? 'reduce' : 'no-preference' },
1013
- ] });
1014
- await load(browser, file, { query: `?theme=${theme}&present=1` });
1015
- const present = await state(`presentation-${theme}`);
1016
- assert.equal(present.geometry.receiptEligible, true);
1017
- clearStage(present);
1018
- if (evidence) {
1019
- const shot = await send('Page.captureScreenshot', { format: 'png' });
1020
- fs.writeFileSync(path.join(evidence, `presentation-${theme}.png`), Buffer.from(shot.data, 'base64'));
1021
- }
1022
- await run('Archify.presentation.exit()');
1023
- await waitForLayout(browser, session);
1024
- clearStage(await state(`presentation-return-${theme}`));
1025
- }
1026
- await send('Emulation.setEmulatedMedia', { features: [] });
1027
- });
1028
-
1029
- await t.test('pending Reader probes coalesce and retain the rail when the camera changes', async () => {
1030
- for (const reject of [false, true]) {
1031
- await load(browser, file);
1032
- const initial = await state(`probe-initial-${reject}`);
1033
- assert.ok(initial.reserve > 0);
1034
- const pending = await run(`(() => {
1035
- const reader = Archify.readerLayout;
1036
- const original = reader.whenStable;
1037
- let release;
1038
- const gate = new Promise((resolve, reject) => { release = ${reject} ? () => reject(new Error('test reader rejection')) : resolve; });
1039
- reader.whenStable = () => gate;
1040
- const first = Archify.viewerChromeLayout.reprobe();
1041
- const second = Archify.viewerChromeLayout.reprobe();
1042
- const measuring = Archify.viewerChromeLayout.measure();
1043
- const reserve = document.querySelector('.diagram-container').style.getPropertyValue('--archify-nav-reserve');
1044
- Archify.view.zoomIn();
1045
- window.dispatchEvent(new Event('resize'));
1046
- window.finishChromeProbe = async () => {
1047
- reader.whenStable = original;
1048
- release();
1049
- const result = await first;
1050
- delete window.finishChromeProbe;
1051
- return result;
1052
- };
1053
- return { same: first === second, measuring, reserve };
1054
- })()`);
1055
- assert.deepEqual(pending, { same: true, measuring: null, reserve: '' });
1056
- assert.equal(await run('finishChromeProbe()', true), true);
1057
- await waitForLayout(browser, session);
1058
- const restored = await state(`probe-restored-${reject}`);
1059
- assert.equal(restored.reserve, initial.reserve);
1060
- clearStage(restored);
1061
- await run(`for (let i = 0; i < 20; i++) { Archify.viewerChromeLayout.schedule(); Archify.viewerChromeLayout.reprobe(); window.dispatchEvent(new Event('resize')); }`);
1062
- await waitForLayout(browser, session);
1063
- const repeated = await state(`probe-burst-${reject}`);
1064
- assert.equal(repeated.reserve, initial.reserve);
1065
- assert.deepEqual(repeated.geometry, restored.geometry);
1066
- }
1067
- });
1068
-
1069
- await t.test('font readiness and optional observers preserve their existing fallbacks', async () => {
1070
- const noObservers = variant('no-observers', 'window.ResizeObserver = undefined; window.MutationObserver = undefined;');
1071
- await load(browser, noObservers);
1072
- const initial = await state('fallback-initial');
1073
- await resize(720);
1074
- zero(await state('fallback-mobile'));
1075
- await resize(1440);
1076
- assert.equal((await state('fallback-return')).reserve, initial.reserve);
1077
-
1078
- const delayedFonts = variant('fonts', `window.originalChromeFonts = document.fonts;
1079
- Object.defineProperty(document, 'fonts', { configurable: true, value: { ready: new Promise(resolve => { window.releaseChromeFonts = resolve; }) } });`);
1080
- // Bypass load's font/stability wait to observe the deliberately pending gate.
1081
- const loaded = browser.cdp.waitFor('Page.loadEventFired', session);
1082
- await send('Page.navigate', { url: pathToFileURL(delayedFonts).href });
1083
- await loaded;
1084
- const result = await run(`(async () => {
1085
- let resolved = false;
1086
- const stable = Archify.viewerChromeLayout.whenStable().then(() => { resolved = true; });
1087
- document.querySelector('.diagram-nav').style.height = '100px';
1088
- await new Promise(resolve => requestAnimationFrame(() => requestAnimationFrame(resolve)));
1089
- const beforeReady = resolved;
1090
- releaseChromeFonts();
1091
- await stable;
1092
- Object.defineProperty(document, 'fonts', { configurable: true, value: originalChromeFonts });
1093
- return { beforeReady, resolved };
1094
- })()`, true);
1095
- assert.deepEqual(result, { beforeReady: false, resolved: true });
1096
- await waitForLayout(browser, session);
1097
- clearStage(await state('font-ready'));
1098
- });
1099
- } finally {
1100
- if (evidence) fs.writeFileSync(path.join(evidence, 'observations.json'), JSON.stringify(observations, null, 2) + '\n');
1101
- }
1102
- });
1103
-
1104
- process.on('exit', () => fs.rmSync(tmp, { recursive: true, force: true }));