@xgent-ai/skills 0.1.0 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (618) hide show
  1. package/README.md +38 -2
  2. package/bin/xgent-skills.js +515 -4
  3. package/package.json +7 -3
  4. package/skills/dev-plan/SKILL.md +113 -93
  5. package/skills/dev-plan/references/architecture-quality.md +141 -0
  6. package/skills/dev-plan/references/execution-workflow.md +78 -0
  7. package/skills/dev-plan/references/plan-skeleton.md +238 -78
  8. package/skills/dev-plan/scripts/check_progress.sh +158 -0
  9. package/skills/elintp/SKILL.md +129 -0
  10. package/skills/grafton-view-dev/SKILL.md +195 -0
  11. package/skills/grafton-view-dev/references/bindings.md +120 -0
  12. package/skills/grafton-view-dev/references/components.md +168 -0
  13. package/skills/grafton-view-dev/references/recipes.md +208 -0
  14. package/skills/grafton-view-dev/references/schema.md +86 -0
  15. package/skills/grafton-view-dev/references/stores.md +310 -0
  16. package/skills/pardon/SKILL.md +30 -0
  17. package/skills/portal-app-exchange/SKILL.md +106 -0
  18. package/skills/portal-backend-app/SKILL.md +56 -0
  19. package/skills/portal-backend-app/references/gate-and-tokens.md +93 -0
  20. package/skills/portal-backend-app/references/wiring-and-conventions.md +71 -0
  21. package/skills/portal-dev-setup/SKILL.md +519 -0
  22. package/skills/portal-dev-setup/puller.env.example +74 -0
  23. package/skills/portal-dev-setup/references/troubleshooting.md +167 -0
  24. package/skills/portal-dev-setup/scripts/onebox.sh +966 -0
  25. package/skills/portal-external-app/SKILL.md +273 -0
  26. package/skills/portal-external-app/references/contract-doc-template.md +96 -0
  27. package/skills/portal-external-app/references/health-contract.md +80 -0
  28. package/skills/portal-external-app/references/integration-contract.md +130 -0
  29. package/skills/portal-external-app/references/quota-and-seats.md +213 -0
  30. package/skills/portal-external-app/references/registration-and-onebox.md +259 -0
  31. package/skills/portal-external-app/scripts/health-verdict.ts +22 -0
  32. package/skills/portal-external-app/scripts/verify-health.ts +27 -0
  33. package/skills/portal-logging/SKILL.md +139 -0
  34. package/skills/portal-logging/references/collectors.md +285 -0
  35. package/skills/portal-logging/references/contract.md +95 -0
  36. package/skills/portal-logging/scripts/smoke-ingest.sh +72 -0
  37. package/skills/portal-micro-app/SKILL.md +83 -0
  38. package/skills/portal-micro-app/references/manifest-and-acl.md +79 -0
  39. package/skills/portal-micro-app/references/open-api-and-extensions.md +86 -0
  40. package/skills/portal-micro-app/references/sdk-reference.md +208 -0
  41. package/skills/prd/SKILL.md +212 -0
  42. package/skills/prd/references/prd-skeleton.md +244 -0
  43. package/skills/prd/references/spms-mapping.md +148 -0
  44. package/skills/react/SKILL.md +103 -0
  45. package/skills/react/references/component-patterns.md +275 -0
  46. package/skills/react/references/data-fetching.md +255 -0
  47. package/skills/react/references/effect-patterns.md +407 -0
  48. package/skills/react/references/js-performance.md +432 -0
  49. package/skills/react/references/rendering-performance.md +351 -0
  50. package/skills/react/references/rerender-optimization.md +578 -0
  51. package/skills/rust/SKILL.md +103 -0
  52. package/skills/rust/references/chapter_01.md +564 -0
  53. package/skills/rust/references/chapter_02.md +117 -0
  54. package/skills/rust/references/chapter_03.md +209 -0
  55. package/skills/rust/references/chapter_04.md +183 -0
  56. package/skills/rust/references/chapter_05.md +390 -0
  57. package/skills/rust/references/chapter_06.md +142 -0
  58. package/skills/rust/references/chapter_07.md +226 -0
  59. package/skills/rust/references/chapter_08.md +257 -0
  60. package/skills/rust/references/chapter_09.md +261 -0
  61. package/skills/rust/references/chapter_10.md +554 -0
  62. package/skills/story-points/SKILL.md +219 -0
  63. package/skills/story-points/references/factors.md +367 -0
  64. package/skills/summarize/SKILL.md +79 -0
  65. package/skills/swarm/SKILL.md +263 -0
  66. package/skills/swarm/evals/evals.json +55 -0
  67. package/skills/swarm/references/agent-types.md +260 -0
  68. package/skills/swarm/references/teams/code-audit.md +81 -0
  69. package/skills/swarm/references/teams/debug-race.md +70 -0
  70. package/skills/swarm/references/teams/feature-dev.md +71 -0
  71. package/skills/swarm/references/teams/product.md +114 -0
  72. package/skills/swarm/references/teams/refactor-migration.md +73 -0
  73. package/skills/swarm/references/teams/research-debate.md +73 -0
  74. package/skills/test-plan/SKILL.md +136 -0
  75. package/skills/test-plan/references/case-taxonomy.md +141 -0
  76. package/skills/working-with-mbx/SKILL.md +343 -0
  77. package/skills/working-with-mbx/references/acknowledgements.md +37 -0
  78. package/skills/working-with-mbx/references/benchmarks.md +140 -0
  79. package/skills/working-with-mbx/references/cache-results.md +153 -0
  80. package/skills/working-with-mbx/references/cache-server.md +151 -0
  81. package/skills/working-with-mbx/references/cli/adopt.md +29 -0
  82. package/skills/working-with-mbx/references/cli/cache/dir.md +24 -0
  83. package/skills/working-with-mbx/references/cli/cache/export.md +31 -0
  84. package/skills/working-with-mbx/references/cli/cache/import.md +27 -0
  85. package/skills/working-with-mbx/references/cli/cache/largest.md +26 -0
  86. package/skills/working-with-mbx/references/cli/cache/projects.md +23 -0
  87. package/skills/working-with-mbx/references/cli/cache/remove.md +30 -0
  88. package/skills/working-with-mbx/references/cli/cache/stats.md +24 -0
  89. package/skills/working-with-mbx/references/cli/cache/trace.md +27 -0
  90. package/skills/working-with-mbx/references/cli/cache/verify.md +23 -0
  91. package/skills/working-with-mbx/references/cli/cache.md +35 -0
  92. package/skills/working-with-mbx/references/cli/clean.md +27 -0
  93. package/skills/working-with-mbx/references/cli/completion.md +27 -0
  94. package/skills/working-with-mbx/references/cli/doctor.md +24 -0
  95. package/skills/working-with-mbx/references/cli/exec.md +28 -0
  96. package/skills/working-with-mbx/references/cli/explain.md +29 -0
  97. package/skills/working-with-mbx/references/cli/gc.md +28 -0
  98. package/skills/working-with-mbx/references/cli/prefetch.md +27 -0
  99. package/skills/working-with-mbx/references/cli/setup.md +28 -0
  100. package/skills/working-with-mbx/references/cli/stats.md +24 -0
  101. package/skills/working-with-mbx/references/cli/tui.md +24 -0
  102. package/skills/working-with-mbx/references/cli.md +58 -0
  103. package/skills/working-with-mbx/references/compared.md +67 -0
  104. package/skills/working-with-mbx/references/configuration.md +724 -0
  105. package/skills/working-with-mbx/references/cookbook/fork-prs.md +82 -0
  106. package/skills/working-with-mbx/references/cookbook/local-development.md +127 -0
  107. package/skills/working-with-mbx/references/cookbook/migrate.md +67 -0
  108. package/skills/working-with-mbx/references/dashboard.md +89 -0
  109. package/skills/working-with-mbx/references/faq.md +75 -0
  110. package/skills/working-with-mbx/references/getting-started.md +147 -0
  111. package/skills/working-with-mbx/references/github-action.md +254 -0
  112. package/skills/working-with-mbx/references/guide.md +59 -0
  113. package/skills/working-with-mbx/references/how-it-works.md +86 -0
  114. package/skills/working-with-mbx/references/incremental.md +78 -0
  115. package/skills/working-with-mbx/references/index.md +57 -0
  116. package/skills/working-with-mbx/references/installation.md +101 -0
  117. package/skills/working-with-mbx/references/limits.md +182 -0
  118. package/skills/working-with-mbx/references/linkers.md +75 -0
  119. package/skills/working-with-mbx/references/managed-targets.md +197 -0
  120. package/skills/working-with-mbx/references/protocol-compatibility.md +103 -0
  121. package/skills/working-with-mbx/references/remote-cache.md +190 -0
  122. package/skills/working-with-mbx/references/scheduling.md +65 -0
  123. package/skills/working-with-mbx/references/setup.md +157 -0
  124. package/skills/working-with-mbx/references/stability.md +43 -0
  125. package/skills/working-with-mbx/references/standalone-builds.md +102 -0
  126. package/skills/working-with-mbx/references/stats.md +49 -0
  127. package/skills/working-with-mbx/references/troubleshooting.md +136 -0
  128. package/skills/working-with-mbx/references/tui.md +163 -0
  129. package/skills/working-with-mbx/update-docs.sh +49 -0
  130. package/skills/working-with-mise/SKILL.md +297 -0
  131. package/skills/working-with-mise/references/cli/activate-html.md +90 -0
  132. package/skills/working-with-mise/references/cli/alias-html.md +30 -0
  133. package/skills/working-with-mise/references/cli/backends-html.md +40 -0
  134. package/skills/working-with-mise/references/cli/bin-paths-html.md +37 -0
  135. package/skills/working-with-mise/references/cli/bootstrap-html.md +109 -0
  136. package/skills/working-with-mise/references/cli/cache-html.md +40 -0
  137. package/skills/working-with-mise/references/cli/completion-html.md +76 -0
  138. package/skills/working-with-mise/references/cli/config-html.md +44 -0
  139. package/skills/working-with-mise/references/cli/daemons-html.md +48 -0
  140. package/skills/working-with-mise/references/cli/deactivate-html.md +47 -0
  141. package/skills/working-with-mise/references/cli/deps-html.md +89 -0
  142. package/skills/working-with-mise/references/cli/doctor-html.md +46 -0
  143. package/skills/working-with-mise/references/cli/dotfiles-html.md +57 -0
  144. package/skills/working-with-mise/references/cli/edit-html.md +48 -0
  145. package/skills/working-with-mise/references/cli/en-html.md +62 -0
  146. package/skills/working-with-mise/references/cli/env-html.md +57 -0
  147. package/skills/working-with-mise/references/cli/exec-html.md +79 -0
  148. package/skills/working-with-mise/references/cli/exec.md +79 -0
  149. package/skills/working-with-mise/references/cli/fmt-html.md +44 -0
  150. package/skills/working-with-mise/references/cli/generate-html.md +43 -0
  151. package/skills/working-with-mise/references/cli/implode-html.md +35 -0
  152. package/skills/working-with-mise/references/cli/install-html.md +83 -0
  153. package/skills/working-with-mise/references/cli/install-into-html.md +47 -0
  154. package/skills/working-with-mise/references/cli/latest-html.md +62 -0
  155. package/skills/working-with-mise/references/cli/link-html.md +57 -0
  156. package/skills/working-with-mise/references/cli/lock-html.md +114 -0
  157. package/skills/working-with-mise/references/cli/ls-html.md +95 -0
  158. package/skills/working-with-mise/references/cli/ls-remote-html.md +61 -0
  159. package/skills/working-with-mise/references/cli/mcp-html.md +57 -0
  160. package/skills/working-with-mise/references/cli/oci-html.md +41 -0
  161. package/skills/working-with-mise/references/cli/outdated-html.md +79 -0
  162. package/skills/working-with-mise/references/cli/packslip-html.md +38 -0
  163. package/skills/working-with-mise/references/cli/patrons-html.md +45 -0
  164. package/skills/working-with-mise/references/cli/plugins-html.md +46 -0
  165. package/skills/working-with-mise/references/cli/prune-html.md +56 -0
  166. package/skills/working-with-mise/references/cli/registry-html.md +59 -0
  167. package/skills/working-with-mise/references/cli/reshim-html.md +46 -0
  168. package/skills/working-with-mise/references/cli/run-html.md +152 -0
  169. package/skills/working-with-mise/references/cli/search-html.md +69 -0
  170. package/skills/working-with-mise/references/cli/self-update-html.md +42 -0
  171. package/skills/working-with-mise/references/cli/set-html.md +116 -0
  172. package/skills/working-with-mise/references/cli/settings-html.md +78 -0
  173. package/skills/working-with-mise/references/cli/shell-alias-html.md +39 -0
  174. package/skills/working-with-mise/references/cli/shell-html.md +53 -0
  175. package/skills/working-with-mise/references/cli/skills-html.md +39 -0
  176. package/skills/working-with-mise/references/cli/sponsors-html.md +31 -0
  177. package/skills/working-with-mise/references/cli/ssh-html.md +45 -0
  178. package/skills/working-with-mise/references/cli/sync-html.md +37 -0
  179. package/skills/working-with-mise/references/cli/tasks-html.md +61 -0
  180. package/skills/working-with-mise/references/cli/test-tool-html.md +49 -0
  181. package/skills/working-with-mise/references/cli/token-html.md +37 -0
  182. package/skills/working-with-mise/references/cli/tool-alias-html.md +41 -0
  183. package/skills/working-with-mise/references/cli/tool-html.md +55 -0
  184. package/skills/working-with-mise/references/cli/tool-stub-html.md +60 -0
  185. package/skills/working-with-mise/references/cli/trust-html.md +63 -0
  186. package/skills/working-with-mise/references/cli/uninstall-html.md +62 -0
  187. package/skills/working-with-mise/references/cli/unset-html.md +59 -0
  188. package/skills/working-with-mise/references/cli/untrust-html.md +35 -0
  189. package/skills/working-with-mise/references/cli/unuse-html.md +74 -0
  190. package/skills/working-with-mise/references/cli/upgrade-html.md +133 -0
  191. package/skills/working-with-mise/references/cli/use-html.md +130 -0
  192. package/skills/working-with-mise/references/cli/use.md +130 -0
  193. package/skills/working-with-mise/references/cli/version-html.md +46 -0
  194. package/skills/working-with-mise/references/cli/watch-html.md +465 -0
  195. package/skills/working-with-mise/references/cli/where-html.md +53 -0
  196. package/skills/working-with-mise/references/cli/which-html.md +55 -0
  197. package/skills/working-with-mise/references/configuration/environments-html.md +171 -0
  198. package/skills/working-with-mise/references/configuration/project-diagnostics-html.md +93 -0
  199. package/skills/working-with-mise/references/configuration/settings-html.md +3062 -0
  200. package/skills/working-with-mise/references/configuration/vars-html.md +167 -0
  201. package/skills/working-with-mise/references/dev-tools/aliases-html.md +97 -0
  202. package/skills/working-with-mise/references/dev-tools/backend_architecture-html.md +198 -0
  203. package/skills/working-with-mise/references/dev-tools/backends/aqua-html.md +274 -0
  204. package/skills/working-with-mise/references/dev-tools/backends/aqua.md +274 -0
  205. package/skills/working-with-mise/references/dev-tools/backends/asdf-html.md +98 -0
  206. package/skills/working-with-mise/references/dev-tools/backends/asdf.md +98 -0
  207. package/skills/working-with-mise/references/dev-tools/backends/cargo-html.md +240 -0
  208. package/skills/working-with-mise/references/dev-tools/backends/cargo.md +240 -0
  209. package/skills/working-with-mise/references/dev-tools/backends/conda-html.md +125 -0
  210. package/skills/working-with-mise/references/dev-tools/backends/dotnet-html.md +142 -0
  211. package/skills/working-with-mise/references/dev-tools/backends/forgejo-html.md +533 -0
  212. package/skills/working-with-mise/references/dev-tools/backends/gem-html.md +77 -0
  213. package/skills/working-with-mise/references/dev-tools/backends/gem.md +77 -0
  214. package/skills/working-with-mise/references/dev-tools/backends/github-html.md +622 -0
  215. package/skills/working-with-mise/references/dev-tools/backends/github.md +622 -0
  216. package/skills/working-with-mise/references/dev-tools/backends/gitlab-html.md +546 -0
  217. package/skills/working-with-mise/references/dev-tools/backends/go-html.md +115 -0
  218. package/skills/working-with-mise/references/dev-tools/backends/go.md +115 -0
  219. package/skills/working-with-mise/references/dev-tools/backends/http-html.md +644 -0
  220. package/skills/working-with-mise/references/dev-tools/backends/http.md +644 -0
  221. package/skills/working-with-mise/references/dev-tools/backends/npm-html.md +436 -0
  222. package/skills/working-with-mise/references/dev-tools/backends/npm.md +436 -0
  223. package/skills/working-with-mise/references/dev-tools/backends/packslip-html.md +310 -0
  224. package/skills/working-with-mise/references/dev-tools/backends/pipx-html.md +329 -0
  225. package/skills/working-with-mise/references/dev-tools/backends/pipx.md +329 -0
  226. package/skills/working-with-mise/references/dev-tools/backends/pkgx-html.md +73 -0
  227. package/skills/working-with-mise/references/dev-tools/backends/pypi-html.md +331 -0
  228. package/skills/working-with-mise/references/dev-tools/backends/s3-html.md +346 -0
  229. package/skills/working-with-mise/references/dev-tools/backends/spm-html.md +201 -0
  230. package/skills/working-with-mise/references/dev-tools/backends/ubi-html.md +232 -0
  231. package/skills/working-with-mise/references/dev-tools/backends/vfox-html.md +173 -0
  232. package/skills/working-with-mise/references/dev-tools/backends/vfox.md +173 -0
  233. package/skills/working-with-mise/references/dev-tools/backends.md +32 -0
  234. package/skills/working-with-mise/references/dev-tools/comparison-to-asdf-html.md +112 -0
  235. package/skills/working-with-mise/references/dev-tools/deps-html.md +390 -0
  236. package/skills/working-with-mise/references/dev-tools/github-tokens-html.md +390 -0
  237. package/skills/working-with-mise/references/dev-tools/index-html.md +420 -0
  238. package/skills/working-with-mise/references/dev-tools/mise-lock-html.md +660 -0
  239. package/skills/working-with-mise/references/dev-tools/mise-oci-html.md +418 -0
  240. package/skills/working-with-mise/references/dev-tools/packslip-resources-html.md +203 -0
  241. package/skills/working-with-mise/references/dev-tools/packslip-verification-html.md +178 -0
  242. package/skills/working-with-mise/references/dev-tools/shims-html.md +397 -0
  243. package/skills/working-with-mise/references/dev-tools/tool-stubs-html.md +416 -0
  244. package/skills/working-with-mise/references/guides/getting-started.md +268 -0
  245. package/skills/working-with-mise/references/index.md +37 -0
  246. package/skills/working-with-mise/update-docs.sh +111 -0
  247. package/skills/xgent-app-release/SKILL.md +438 -0
  248. package/skills/xgent-app-release/references/build-and-package.md +65 -0
  249. package/skills/xgent-app-release/references/publish-api.md +315 -0
  250. package/skills/xgent-app-release/references/troubleshooting.md +108 -0
  251. package/skills/xgent-app-release/scripts/npm-token.mjs +94 -0
  252. package/skills/xgent-app-release/scripts/preflight.mjs +340 -0
  253. package/skills/xgent-app-release/scripts/registry-config.mjs +88 -0
  254. package/skills/xgent-image-push/SKILL.md +239 -0
  255. package/skills/xgent-image-push/registry.env.example +51 -0
  256. package/skills/xgent-image-push/scripts/push-image.sh +576 -0
  257. package/skills/xgent-init/SKILL.md +96 -0
  258. package/skills/xgent-init/references/external-app-CLAUDE.template.md +249 -0
  259. package/skills/xgent-init/references/external-app-DESIGN.template.md +317 -0
  260. package/skills/xgent-init/references/external-app-PRODUCT.template.md +87 -0
  261. package/skills/xgent-init/references/fill-guide.md +78 -0
  262. package/skills/xgent-init/scripts/check-docs.mjs +304 -0
  263. package/vendor/impeccable/LICENSE +191 -0
  264. package/vendor/impeccable/NOTICE.md +11 -0
  265. package/vendor/impeccable/VERSION.json +28 -0
  266. package/vendor/impeccable/bundle/blobs/00023f9e7f2e27604fde978b56510a8f837b76eeadd93221d11adcf4c98f1a10 +88 -0
  267. package/vendor/impeccable/bundle/blobs/00f053b877a92a9847d69eec2403e40c757152f30a5ca807c5033c58d7c297f1 +33 -0
  268. package/vendor/impeccable/bundle/blobs/012f548547fae48ebdd22a3c3af8a01032641fddd530e3783bd73b7358ab2c49 +80 -0
  269. package/vendor/impeccable/bundle/blobs/015725eeca94f52bffd2132d4cb49bc3eb1ee76e6ac7378c065e629d59f56613 +84 -0
  270. package/vendor/impeccable/bundle/blobs/03b30331c176a248a3b3bd17abdff1a1fd658f09ffb2a412b36ae9627dd3f33b +105 -0
  271. package/vendor/impeccable/bundle/blobs/041535231366047a0beeb5daa64ea9c23d5a566580f7dafdb8c0623cb4a7e76b +24 -0
  272. package/vendor/impeccable/bundle/blobs/04af9f2d6883fe76f9539d310d9c369052822a24886d2c330ab1e3fe5981c8a1 +24 -0
  273. package/vendor/impeccable/bundle/blobs/058f81f256134841875fd3183e06b37a023de0c877fd2b9eecd97011640791fe +46 -0
  274. package/vendor/impeccable/bundle/blobs/05aa836a190f4ff62e5d4619738bdb891d83d85e35d81c2e6e322d1dc084d802 +80 -0
  275. package/vendor/impeccable/bundle/blobs/05e86f37d7fa381c5e8a04b6212490a27904d3be3e9384862a0764d3daba6d78 +54 -0
  276. package/vendor/impeccable/bundle/blobs/0617b37a905f0486c1ab4e91a287c8ef8292e253095c340f452d591206272f73 +104 -0
  277. package/vendor/impeccable/bundle/blobs/074575671f24cf4298d06f0019f76e94f62e9a6ed205fce05b8e507341e64266 +111 -0
  278. package/vendor/impeccable/bundle/blobs/076a31941acbaa81013c8c511e146ed4138128eb5e9895dae3e9a27a25ac4f04 +13 -0
  279. package/vendor/impeccable/bundle/blobs/08812a8618de7bd2f63a51298e9c2558031237e8efba280062ccb636101e25e1 +80 -0
  280. package/vendor/impeccable/bundle/blobs/08a2980eae0bfea1f00229899defc28ec92c7ecb875bf5fb02e4ba80dad6c394 +806 -0
  281. package/vendor/impeccable/bundle/blobs/08d78eb31c561256f83baa0afa742a660f1467aa2c81be2f60c2b7f9c770d66e +54 -0
  282. package/vendor/impeccable/bundle/blobs/098a891028ce59c212b747d3c70468dd750aff7053a703d1336045ed31e0da7c +70 -0
  283. package/vendor/impeccable/bundle/blobs/0a151a54959a15eb32fa338890d5d64ac48a9d54d2d5442c3c7708a4c27c1858 +104 -0
  284. package/vendor/impeccable/bundle/blobs/0bb4085f6dda702846e0e56bd4f797aa1b046ab48eca02644448e368f3820f88 +104 -0
  285. package/vendor/impeccable/bundle/blobs/0bc7d7971b3edf2acd0580e847458dc6d84129d90715b452799ace3bed815c7c +84 -0
  286. package/vendor/impeccable/bundle/blobs/0bf6f08bf34d24cd88a78d544add9e4d71478bcf939926cde32f4e164882c775 +105 -0
  287. package/vendor/impeccable/bundle/blobs/0dbbef70048cc3ae44e6710ff09992ce14ad049ce8ed519b0ff8a1ddb4633f4e +111 -0
  288. package/vendor/impeccable/bundle/blobs/0e081d496eba4bd77aca81723d59120c10177a71c9551a60ab923c356fb3cf38 +104 -0
  289. package/vendor/impeccable/bundle/blobs/0e1819750e5448311a051d35ab6d0be0830418f78ca872ef10469fafebb27d4f +46 -0
  290. package/vendor/impeccable/bundle/blobs/0e18ac33b7e6a247b658fcaf926d9eac028399597dbaba366f1d2f2b884a383b +325 -0
  291. package/vendor/impeccable/bundle/blobs/0f83648f6b425225290305bced51eacebacf9bf9bc05e21cdbad46863fbc89ce +24 -0
  292. package/vendor/impeccable/bundle/blobs/115e1c3f1b58b5129910ed925dbf65d61d5ac4c2036618847555ce40098aae97 +145 -0
  293. package/vendor/impeccable/bundle/blobs/11f75834c26ecd8a5b0afdf696e838953b235dc4835b7293bbc6b1bc27dd3106 +84 -0
  294. package/vendor/impeccable/bundle/blobs/12c1afcd15e86d840b89a78c6d17ce6d1b5609bac713d59271c6ab5932975dac +111 -0
  295. package/vendor/impeccable/bundle/blobs/12d2a8043ae8668ad29c32bfa92995849fc49cb016e6ebd4f7e59539d96e7b03 +46 -0
  296. package/vendor/impeccable/bundle/blobs/12fefe52d80d25014e5f7e2f9b278275a675653d3d99ae8f0ecf344cdb9abbe6 +111 -0
  297. package/vendor/impeccable/bundle/blobs/13bd27aa8573e6d45d8bbf9f3fc991e4719d28a7e8f709009a4a5a49a227fff3 +37 -0
  298. package/vendor/impeccable/bundle/blobs/1484a7ae206ab4f0e6262b21afe0f6307a629ed27d28fb7de69536a6800a4883 +37 -0
  299. package/vendor/impeccable/bundle/blobs/15b4837dccb27d7382e2f134ef050b244c4488b1906e0308f288112183cc09ac +145 -0
  300. package/vendor/impeccable/bundle/blobs/1640c70b984a43e729d72d046109f87243ae84ecd64d2600a007d140558123cc +80 -0
  301. package/vendor/impeccable/bundle/blobs/1652d639d91889a08bda7f351456c43ee30e5677aa4866a90f375e1e4be15deb +80 -0
  302. package/vendor/impeccable/bundle/blobs/16d99e9fe8e75d69042bc4fda12e93daa7e10f9fa6c00b12b0f0580b119a4cfd +105 -0
  303. package/vendor/impeccable/bundle/blobs/171777f8a8596d2ffdb43f4b935a7c6c12859ace233967f868a566390a59708e +325 -0
  304. package/vendor/impeccable/bundle/blobs/173dd66abe65633910dcb04a51f40d6ff2a793f87088f022a02fc4cad24dd133 +94 -0
  305. package/vendor/impeccable/bundle/blobs/17c583cf8ad41266ea1e787b666b9d91fe13469d3d0f6af57c08e0146f9b17ac +58 -0
  306. package/vendor/impeccable/bundle/blobs/181e814c1b9317098b2300c1b02ad0d137b6d82bd1e7e8cc64de4d00b4c50c25 +111 -0
  307. package/vendor/impeccable/bundle/blobs/190a4e642ca362d7499f3c3ab123e21f18f75457d11f072b545a183f296e6495 +99 -0
  308. package/vendor/impeccable/bundle/blobs/1971edc3784273bd8da7b1980779c6159471e857992faa6637178109cb130503 +806 -0
  309. package/vendor/impeccable/bundle/blobs/199d5d3db1197e053a2eb9c3cb927d44cbaaaeb57745c1ada3fd775ba50d9291 +104 -0
  310. package/vendor/impeccable/bundle/blobs/19c5bfce570a0e2bddd4d9c788936ff9070c90299363c4853ba77bfd37306e20 +416 -0
  311. package/vendor/impeccable/bundle/blobs/1a9180cec754f8afd354e7cb759750247e97c5bd26d3242ad4c45e315069e8c0 +37 -0
  312. package/vendor/impeccable/bundle/blobs/1c804990fd8ac23a4b19c42972b5ae591d17f620d0006f0f32927c8db5d5bf50 +145 -0
  313. package/vendor/impeccable/bundle/blobs/1d72b494f46a60e6c9c06e89bab79789dd85e11f62fb4286a03abf26d352dc1f +80 -0
  314. package/vendor/impeccable/bundle/blobs/21bc91f6e07691e82b7bba99f9e1d956f9d7a6810dcdc18d231fe73b53a13b23 +37 -0
  315. package/vendor/impeccable/bundle/blobs/238e1967d933ca5739db708f7ad9f72ca8b34bc4c9b9e1c07b0a06dcf9d00681 +806 -0
  316. package/vendor/impeccable/bundle/blobs/244e5b7bca6d22a51b4e22104a52a36e477056b03d257b56d1d4e319cd6167a8 +80 -0
  317. package/vendor/impeccable/bundle/blobs/249f0437a52ab3eb4bc4d4a9f38e085334c0fbb7795e88dd419e32b5f58c924d +42 -0
  318. package/vendor/impeccable/bundle/blobs/27c4b6c90ad12a186136f9ece9cb1830d4a6e36b11382ab334efc4543f8082de +145 -0
  319. package/vendor/impeccable/bundle/blobs/29f741b71e75fd39c65ca6df4b01b5f6c4f3c4c7adf23b47a3220ce2c0251f24 +104 -0
  320. package/vendor/impeccable/bundle/blobs/2b21f0142ee88a11dbe2593362f5a910718a61062e3a64e7ff936ef1e74fd394 +46 -0
  321. package/vendor/impeccable/bundle/blobs/2b58041cd82d819d12762b10becb95f8253c661bf6a9de40f61fc01c1204b743 +806 -0
  322. package/vendor/impeccable/bundle/blobs/2b5b2fbf5f658f34ea1997fb1aeebe01604d05187f75c6a4f1f55a5bc78520a4 +104 -0
  323. package/vendor/impeccable/bundle/blobs/2c2ed6286bd74adef4f24ef442e2e1bc0780d44bc060aa2a4c03a03988dbafd5 +325 -0
  324. package/vendor/impeccable/bundle/blobs/2d7086992c07df1fc734cdf9c420c4bd8ad409ab7909e07c8b486c303d420732 +83 -0
  325. package/vendor/impeccable/bundle/blobs/2e4846117a2fcdc1e4bc9570a5333da839649cb8ccdac6a30a87591ca05b4bb0 +54 -0
  326. package/vendor/impeccable/bundle/blobs/2f02f96f889e0c8e0e90806af1ef17e0c162a6cc402068f434d3f7608d9deda3 +54 -0
  327. package/vendor/impeccable/bundle/blobs/2fd096823e4a93f19edd421a69e10f90ebb630a014c673d1802a927c6f47b7d2 +111 -0
  328. package/vendor/impeccable/bundle/blobs/2feb3768125ba6469c92a50d516727e6d42f44579165ddfd33409948e2a3803d +27 -0
  329. package/vendor/impeccable/bundle/blobs/30e006fdee873bac23edaeadce0371161625e021e3cf442dff4b05bb82297ba1 +24 -0
  330. package/vendor/impeccable/bundle/blobs/31b90048c0b540daec46762a10c2b6b6434737a89af005054d8b848d829d003b +69 -0
  331. package/vendor/impeccable/bundle/blobs/33b6b32c0c3c0c4a2b22bd2275176b1c88a006dd94592a854f629911a0b21cdc +111 -0
  332. package/vendor/impeccable/bundle/blobs/3565d038a2eeab88a8b18ff52e6630008ab30f867f9df922a38ce8980440b2e3 +80 -0
  333. package/vendor/impeccable/bundle/blobs/356cfa0ebf61589cf5d52691d101a69d69256062fe1d11d71d95d41a78289cbd +111 -0
  334. package/vendor/impeccable/bundle/blobs/3673248740bcdd1122ccc610093ba2fe52f3943a61ce0b7170b74dc49e5b6098 +416 -0
  335. package/vendor/impeccable/bundle/blobs/37080ea5e5b381adb7eae7a427231b0ad0dee0f0916fc1d6b673b7101a5b425b +42 -0
  336. package/vendor/impeccable/bundle/blobs/3753448bca49da76dd8b12d5a8b4264414673f26e49028d37616faa8beb210b7 +127 -0
  337. package/vendor/impeccable/bundle/blobs/37565671b09d983ea1ad83a9e9190bc37255d93c68445958c6facecc7e0f7c4f +33 -0
  338. package/vendor/impeccable/bundle/blobs/37aeddc0f2031fa89d72519ae2e7542c267872f81786fb8288fca0a49118be11 +27 -0
  339. package/vendor/impeccable/bundle/blobs/37c9a2122efa64dc8789eb47d196150b0bc635e0ba95042fd381ff157002ed50 +111 -0
  340. package/vendor/impeccable/bundle/blobs/381ff89aa76e82a0d98456ec31cb117555ae045539fba47c45056daa50f611ca +46 -0
  341. package/vendor/impeccable/bundle/blobs/3895765e9434400dfc1b30e364be002cf499c1718fb2431e65b907c14ae2cb27 +86 -0
  342. package/vendor/impeccable/bundle/blobs/38c2e839e130008b6da814ab9c16f3fcbbedfdf721a9638eebd31a9e65341a7a +84 -0
  343. package/vendor/impeccable/bundle/blobs/38d4d404030c6ea935d3223db1eeb22c45d04a94f41f98e02a43cdc5af7ff2e3 +24 -0
  344. package/vendor/impeccable/bundle/blobs/3970c8e24615610b0246585e49146f6762d5082b3c8fddc08a00940d6e72d394 +80 -0
  345. package/vendor/impeccable/bundle/blobs/39ac044f2e45a9e7eed8eb68fe91d32938160eb7f8fa93d2afc42fc80a0c3c10 +54 -0
  346. package/vendor/impeccable/bundle/blobs/39d9600489073e227e4f4d55c451ce4252a6632ed7ae37923efbbcbc91f16d07 +206 -0
  347. package/vendor/impeccable/bundle/blobs/3aa908c18db91d5f31d6bba6402eab6afc4e0b75137f841a86bd012386e0d8e2 +145 -0
  348. package/vendor/impeccable/bundle/blobs/3af7c46309f748ff3845f16455a431ec0e9e807e5e3a965e96e9ee75a1198eb8 +95 -0
  349. package/vendor/impeccable/bundle/blobs/3ba92d4aa840ec1b6c2fda224339489d6dd65eedf43bb45836af02584d1faa88 +42 -0
  350. package/vendor/impeccable/bundle/blobs/3bcf81b938a0f0309e9ed6616f4bd18d82f07e2801411ee4cce51220d417eb95 +80 -0
  351. package/vendor/impeccable/bundle/blobs/3bf5d8661351831dbb2195e3b677fea1f128ca319c0589d538b66d9c9d7dddbc +111 -0
  352. package/vendor/impeccable/bundle/blobs/3dd45e1c32db3d3163a96ef198954905807b25cb9a1d206a7d77986f21d27652 +39 -0
  353. package/vendor/impeccable/bundle/blobs/3e3b6fdc6afbc2c2a734d08d6a18b393b7139c56f28f91f82e13e5555b98018a +84 -0
  354. package/vendor/impeccable/bundle/blobs/3f2c351303b74e217907006fb9c55ada2ef596e9710c13d631e20506d17b9ee8 +325 -0
  355. package/vendor/impeccable/bundle/blobs/402373ef95962ecb81dd3d7cf70ecb3bd3e22a2bd2aabb4c0d76f7f4f9447870 +105 -0
  356. package/vendor/impeccable/bundle/blobs/402656ca6df17bad1cd55ede0a966a7bb5b187cf4f89c517851f9efe7f14c0fd +87 -0
  357. package/vendor/impeccable/bundle/blobs/40c87038b5f75147a5952a96237acf312a327bf70c1bcd8e0a5f064625ae9668 +51 -0
  358. package/vendor/impeccable/bundle/blobs/420d82fe41884b7aa8c28750520146d8160c91396ac332a96b2d82a90b017fb2 +80 -0
  359. package/vendor/impeccable/bundle/blobs/420e2fdee2b7f555d9a37ce348cf62610ddd98f96b1a0a511796ba600881588c +111 -0
  360. package/vendor/impeccable/bundle/blobs/424b2e75cb204e2dca7db4a40dfe5a81f78dc0fc58ac4790e8b7bbf2f330bba4 +37 -0
  361. package/vendor/impeccable/bundle/blobs/424ff273e7ab283d6695d127bb502675627193f5b752d7b43b7524bcfc42f43f +84 -0
  362. package/vendor/impeccable/bundle/blobs/426c7f5437dd3c23a4cfaef6964dc7f1e038480f92238499b85f3ce7e4472bf4 +111 -0
  363. package/vendor/impeccable/bundle/blobs/42a71df98075f66e6eb396b69ef3d6b1c3db46d1c1d24b4edc9d15f53d193ecb +111 -0
  364. package/vendor/impeccable/bundle/blobs/433a79eee3ce4c99e79a7aebe3a6d8ec9ff70216772e0c2ff9dce3a01d672963 +46 -0
  365. package/vendor/impeccable/bundle/blobs/43852ca5917de66704f73f9019d15482bb1efd92f2eefaeeeae23610b4c0c6a0 +38 -0
  366. package/vendor/impeccable/bundle/blobs/442749aed338f51c1a3ccfb182c6ade9b74b90590b67984062ac94a5b100e914 +80 -0
  367. package/vendor/impeccable/bundle/blobs/44a91b3f0810f43829d8584e912812444d15614e4b57ca8070aee7ab899f7c1e +46 -0
  368. package/vendor/impeccable/bundle/blobs/46250caaec1bd69619a5b28a73cb3c845b319d029b0af9228aaa7001e7e0104a +37 -0
  369. package/vendor/impeccable/bundle/blobs/464c0c2b33d278375aec66caf95518f5e7ccd0aad1bea3f9dd553ed47815daa1 +325 -0
  370. package/vendor/impeccable/bundle/blobs/47b3461f6f76db80fdc49fc7542552d65fed24edc8d30d903cb76aefbad0ed05 +84 -0
  371. package/vendor/impeccable/bundle/blobs/47edbdfaf27073c47033d1ac7dfee881be49e2dcbda7671d1157300481dde6da +1 -0
  372. package/vendor/impeccable/bundle/blobs/4879f38b23d0a251a63cbb0327e660296194cd2e71eb4da3236c6ebfe5807746 +33 -0
  373. package/vendor/impeccable/bundle/blobs/48bb7c3b738f57fa4f3f714d7e3e919879036f3e751135a9acc1c5ede1850ea6 +54 -0
  374. package/vendor/impeccable/bundle/blobs/494d6fcb4701c437597c2ed16a9595af92f3d9ad53c944c96a2fb563bd766af5 +99 -0
  375. package/vendor/impeccable/bundle/blobs/49a7b37b98fb6e3ef68154174677ff4b9f1715efcffdbf6b30c3535b3e4e302c +54 -0
  376. package/vendor/impeccable/bundle/blobs/4a7d8695741e2cd354baada215b06798c050aa7a8e1ca6814f0e395e054d1ab1 +145 -0
  377. package/vendor/impeccable/bundle/blobs/4a8a45a46b79948a64b484edf389aa0b00fc80de855470cbabe3c7c71268f345 +828 -0
  378. package/vendor/impeccable/bundle/blobs/4acfb9e38f6e09f7484e36fc19704d69eab159436ee9329168be74c493042f22 +111 -0
  379. package/vendor/impeccable/bundle/blobs/4ad7c5d5821f85c2311ff91746d9b9cf272dbe0a9a5b61687f77681f5a13f812 +69 -0
  380. package/vendor/impeccable/bundle/blobs/4b0e2eea17f297daa06b17578131775be099ef43addf91007f4b7e295454f64f +105 -0
  381. package/vendor/impeccable/bundle/blobs/4bceaf3346b6f5100b5a54deaae49a38b975dd134df2836675848f06ff1e7e11 +806 -0
  382. package/vendor/impeccable/bundle/blobs/4ce929b8cafd37247ea4c148bbe39a9afe15908d1abf4a8248c5122275d16499 +85 -0
  383. package/vendor/impeccable/bundle/blobs/4df48b7a86d525ad12e7889a1fd16b06ed4b25a9470c359c7193a6d82649262f +54 -0
  384. package/vendor/impeccable/bundle/blobs/4fb6d2fcc8afaf827a7377ddd604725264fd83be871e2d35062e9d1939144404 +25 -0
  385. package/vendor/impeccable/bundle/blobs/51e2f8963377f142ebdc9864e0ecc5aa1e5b7d344ed72d0e9d748d2d3d8c71b3 +46 -0
  386. package/vendor/impeccable/bundle/blobs/521391d55814fdef6cd648ed62154a14d77b324004a0fc2d06c0a4e97857eab2 +806 -0
  387. package/vendor/impeccable/bundle/blobs/52e861ac390a62c4473ae0cf87ff18dd6d721afa6557910492dd8ed28bd9970d +84 -0
  388. package/vendor/impeccable/bundle/blobs/532d6387db6f5da1a59dc7d29ce4d8ba6ca044626c367dc16e1cb8b981eb2d9a +104 -0
  389. package/vendor/impeccable/bundle/blobs/54cb270e8826380caefc8c40642a5d973f27df46bfdb762d822541a0c72a9877 +145 -0
  390. package/vendor/impeccable/bundle/blobs/54e71283cbd5646021fcd8eaa28d85852ec5288109c306aca9db9e2e4832338e +69 -0
  391. package/vendor/impeccable/bundle/blobs/5515d5210fbe2ef64e611ef2827a7204b7cea2f9df059f3ea499931f45065d93 +104 -0
  392. package/vendor/impeccable/bundle/blobs/55e95137b3f9198c1d4dfc425366b82f1ef5f77d602682b2edf91f2ce9296289 +24 -0
  393. package/vendor/impeccable/bundle/blobs/56500b1f9d2fcec8324d7f448d813048b5831a46d3feeb1055bd3eb17ec3660f +70 -0
  394. package/vendor/impeccable/bundle/blobs/571526fd5c60a586ff65bdb3f8333f26c36ae227f5f5ece826f4a43b4d4aee0f +325 -0
  395. package/vendor/impeccable/bundle/blobs/5738bcf9ac21dbb2113fd0c5cc7e4bbfc8174778916ab5843644332b3dbbc36e +46 -0
  396. package/vendor/impeccable/bundle/blobs/57402ef6fd9d0745f8c60d778f77da83a8b16edf751fa1013598a0f6e5f0f541 +136 -0
  397. package/vendor/impeccable/bundle/blobs/57e28934208e3eac653ab59c5c6a5e4eace44906d8ac86472988242d777ca5a1 +54 -0
  398. package/vendor/impeccable/bundle/blobs/581409ace104a81744b7d08f5398a2c207cf76d9e50751f807b4382eaf66454f +46 -0
  399. package/vendor/impeccable/bundle/blobs/598bfed550954471ba4d257d46b4d608cd82e4cdbf36d07bf93c5f4a563f7727 +89 -0
  400. package/vendor/impeccable/bundle/blobs/599afc25c1d6d083e4d4e60e1617ab05f6c5ecd52be75473f3788063219aa174 +31 -0
  401. package/vendor/impeccable/bundle/blobs/5b30a06646ad5e453d6b5ed1b8d446f69fca3cd13b8aeda28f0d0b2cbe8f62d1 +111 -0
  402. package/vendor/impeccable/bundle/blobs/5b5dcf7029376ee6fbcf13e5975eb828dd1dbf41736c1bd5017dcda8173b1ebc +325 -0
  403. package/vendor/impeccable/bundle/blobs/5be952da521a2d5fb799c834d14ce5388284374bc23c5efcec737a05aa65d878 +84 -0
  404. package/vendor/impeccable/bundle/blobs/5c036648951d555e73be63161e5c9edcba146d8e9f64b1604ffdea765cde5d9d +131 -0
  405. package/vendor/impeccable/bundle/blobs/5c4cd151c97dae824a039211d7ccfba4c572b76d8f079c6186ba1dd5dae7732b +54 -0
  406. package/vendor/impeccable/bundle/blobs/5ce02fc8f353d7f659535fb80e453963dc047a07c4396adf098fe010b479e7c0 +84 -0
  407. package/vendor/impeccable/bundle/blobs/5ce0631eacaae6d9fbb23ade26a774a20142cb40d3a8d5608a3fb9dbc4116b60 +806 -0
  408. package/vendor/impeccable/bundle/blobs/5db17cd013c10dca0012bc18aee7276280941579aa50757682e9ce60c4f7a006 +104 -0
  409. package/vendor/impeccable/bundle/blobs/5e3616ac45568f239fda3a4764f7d3bf3473b8b5eefd91e402dd9208a4b851d1 +24 -0
  410. package/vendor/impeccable/bundle/blobs/5f24c5a97b4ffcabc7c432b064cfdd04c7a2ad52f52e765be648dc0aadab8f38 +38 -0
  411. package/vendor/impeccable/bundle/blobs/5fae7f8a2fc3ddd49ad0a413446dc44daedef5b6b7de5eb935bd2fbfad646d58 +92 -0
  412. package/vendor/impeccable/bundle/blobs/61c72fdde649bf7f2e0668e48f9d222666c81672100b5f2265940e7aa13c8767 +111 -0
  413. package/vendor/impeccable/bundle/blobs/633903ba7cb38ed502448a66691fbf655805786a2f06be67043f12294ad08e86 +37 -0
  414. package/vendor/impeccable/bundle/blobs/64802d14087fc96b38ef3881fef8098b36068d07f3b942031637b18eef3dd2af +84 -0
  415. package/vendor/impeccable/bundle/blobs/64807d8f43267f4ed879e997834bbf793bd4605ba1dc65f4b545324b660a7063 +80 -0
  416. package/vendor/impeccable/bundle/blobs/68bc52a604731ca024610051fc763f4d78a53eb2a45d35b40a8c0383043baa63 +86 -0
  417. package/vendor/impeccable/bundle/blobs/68c5636a7858dd0b5137a9229c15e25fdc2ee40a0f8a4e9d809f78e809256262 +327 -0
  418. package/vendor/impeccable/bundle/blobs/696c15f96d49a03091b71a408151a3297521f7a8231b98ca9b1103667a0b5f89 +80 -0
  419. package/vendor/impeccable/bundle/blobs/6989120346e87907d59cc6d4708dd9dee29227ad583fbefee28935395b68ce34 +24 -0
  420. package/vendor/impeccable/bundle/blobs/69be9bb887f4d8ba4ead24928f9b97d122c796e731652fc0c08f195ab8ec2815 +105 -0
  421. package/vendor/impeccable/bundle/blobs/6abbf5979db5cb1d7965bf5f91d589e984843069c587f4d1e63aab135bbace0f +37 -0
  422. package/vendor/impeccable/bundle/blobs/6acc0bf221a4ddc6e5c6438348920b2ca2393b29c4314dbde2cdc23f2b1a9639 +58 -0
  423. package/vendor/impeccable/bundle/blobs/6bc62a59f6fef0b749927c8d10e9849ab2411199d86d70772a86f8e83ac309f5 +29 -0
  424. package/vendor/impeccable/bundle/blobs/6bdbc3f745ceee15e10b050f109ce42bbeb53ab3c3b5239257de1d596654dee7 +94 -0
  425. package/vendor/impeccable/bundle/blobs/6c382f8283756e8a693d832b750f7e4cbff1ca5bdcc3825b2b4ef4da9f21876a +94 -0
  426. package/vendor/impeccable/bundle/blobs/6c9ce3e27ec4520ead001da3aad2a2ebba481c4e5cd22873db8890259ee579fe +95 -0
  427. package/vendor/impeccable/bundle/blobs/6d368b679a0ed1815812815de65863b5840d419589dfbda06224c01149240287 +258 -0
  428. package/vendor/impeccable/bundle/blobs/6d47503587ad6da17ac529f44a96123bbb96a9c91a7a9350b7690fc467561a5d +46 -0
  429. package/vendor/impeccable/bundle/blobs/6e20041e209e8705d14aa9c4fb8cca3f0d743791de633785e5b46e2dd1ff1a6b +24 -0
  430. package/vendor/impeccable/bundle/blobs/6e7e3b7c4cf331cdb43f4546c164acd6c45a267ce3289dcfa87e13202d98c747 +104 -0
  431. package/vendor/impeccable/bundle/blobs/6f1d52863482fa0f6fff877f0cc8f6dd0b4230d28050b0d267e082776e61a332 +37 -0
  432. package/vendor/impeccable/bundle/blobs/706c68612a7c6b899a0abf0b407eca7cabcd371deae60f830aa38aa86947694e +84 -0
  433. package/vendor/impeccable/bundle/blobs/713cac92a71ef45e8b700180d881f830096cfe2b0615e79b276ccc4a12c051e0 +80 -0
  434. package/vendor/impeccable/bundle/blobs/733504a70ed20bcfca9c26c353f7b88f8491d24f3f2fe124dc1e73b28eefa296 +145 -0
  435. package/vendor/impeccable/bundle/blobs/73549b5536699c915156339976192fb38534bb43158cf9262ff5b89090388c64 +806 -0
  436. package/vendor/impeccable/bundle/blobs/73bd60faec1d8360753595f1ee9e970b44933448202767d7b0e87c275d399396 +6 -0
  437. package/vendor/impeccable/bundle/blobs/745b1f74877f6b3445da48af65dc45c66c3daa7738cb9a928aaa900889c2a204 +104 -0
  438. package/vendor/impeccable/bundle/blobs/74e20b26c29242bbebf79760315f7f0788e001566695618cfc70805484c6f92a +111 -0
  439. package/vendor/impeccable/bundle/blobs/759bab1d8adc071fdde2efcf6e2157aa4026f3c2b4f3c342a8070bf328011616 +214 -0
  440. package/vendor/impeccable/bundle/blobs/7848f40e224cf520bd8554943c9816a1ff8c97b1db57af0844e3b1ebb223d91f +416 -0
  441. package/vendor/impeccable/bundle/blobs/78ac93689928a580c2f90242cbaa96dda3fa4e55ff1f1d00e412b2a62ad85232 +145 -0
  442. package/vendor/impeccable/bundle/blobs/78c236dadb7e70337dc9dfa67e65fc15b7abed137ad320c16410ddfa7aec34f9 +131 -0
  443. package/vendor/impeccable/bundle/blobs/79114c6bf78b5a1838fe19bf033f3be85b232560eebf190ff8586aaec34ea170 +105 -0
  444. package/vendor/impeccable/bundle/blobs/79f85e381d1d6fdc8d39f54e1c8753fccf19b4ba3abb9827b6a7cc61eb376d1f +416 -0
  445. package/vendor/impeccable/bundle/blobs/7ad26830c7399a118cdbd4465a5426bc1919015aba99fd15959dc6deb8edc8d6 +80 -0
  446. package/vendor/impeccable/bundle/blobs/7af0a8665057c83b39bca2c8c7427ef2343734f70d4128c377113a6726a1e3b1 +12990 -0
  447. package/vendor/impeccable/bundle/blobs/7fd1617d5a86b7a1a0bf9d6e291b334ac41a3efce31031eeaef11de7cd7e75b4 +325 -0
  448. package/vendor/impeccable/bundle/blobs/800cf1c0392b24de7c0a1c6ea6778ecb433dec71c49a150bce96a98477527b2f +1 -0
  449. package/vendor/impeccable/bundle/blobs/808291e15746c9a64d9ede3ad3f06664b0a72970aa95052e064a96f1bfbed361 +54 -0
  450. package/vendor/impeccable/bundle/blobs/81666fc7f783b4e3514db6554e713dc0479bd9cdedb06e93d15f8b579aae869a +105 -0
  451. package/vendor/impeccable/bundle/blobs/824b994782a1fe68a244bbdff7218a2e0854655d90cc0fb5ade7ef9259ba6305 +46 -0
  452. package/vendor/impeccable/bundle/blobs/82a5e564563333aabb7ab4d2f8c26c785dfe2c2416ac6e9f30cba31440676194 +46 -0
  453. package/vendor/impeccable/bundle/blobs/835f19a0a3812f3652dd6979a2ce5597f654fd01f26e1b420b92d5f42b997ce4 +121 -0
  454. package/vendor/impeccable/bundle/blobs/84a06415956986cb215139b3efda7b3c7a5bb6f502a3b3d9300f0744a970e620 +99 -0
  455. package/vendor/impeccable/bundle/blobs/84df879a0332a56ece4bff1922ecf4f50635951b3c67e67eb46f31bc5d30fa9a +111 -0
  456. package/vendor/impeccable/bundle/blobs/85b9c2d051de94ee9129c58be111946f73035ca62bbd2a3936f4fa48768fe5cf +145 -0
  457. package/vendor/impeccable/bundle/blobs/869fa5390b84bfd00d072f5280a9002ea3e3936edf5985241be641a87f03ff7b +41 -0
  458. package/vendor/impeccable/bundle/blobs/86d10faab62da852aa1f4304157871545c853da708b6fe61c80aefb552c1f300 +84 -0
  459. package/vendor/impeccable/bundle/blobs/87b3db688c7963898bda8096f7868fed05ec5a0a80d14298e8b906b70cdf9c42 +416 -0
  460. package/vendor/impeccable/bundle/blobs/88749ebbe9bc87250765a07c2b959508262bd0e276ad60baa53e6e48c3579143 +806 -0
  461. package/vendor/impeccable/bundle/blobs/896da399bafcffb0623bdd81bb18709d6eab25c9d5917e739c8798f31ff0d076 +46 -0
  462. package/vendor/impeccable/bundle/blobs/89eb0206a0d9308c6c6a7cc01bc4fd8812d2bd34bb9a831988c5d86fac2c60de +42 -0
  463. package/vendor/impeccable/bundle/blobs/8a1c872773996dfa1c1eb765ac7ed8e8d41f99d4f12f090b4725b694e85eaa62 +336 -0
  464. package/vendor/impeccable/bundle/blobs/8a2d316593a631579bbb2f3fcb90d4488f85e97f69698dd2dd4fb50766f537d3 +325 -0
  465. package/vendor/impeccable/bundle/blobs/8b23562ccc3e41609ce6e67fdad6cc57b6c961964c329eff6975a1b4c5471c0d +111 -0
  466. package/vendor/impeccable/bundle/blobs/8c06daf096984cf71cf4133ea284dd6eaf503208da828816836ea41dfb69a234 +80 -0
  467. package/vendor/impeccable/bundle/blobs/8c34f78d71ac02c99303c7e0ca9ef30341aa9ecdeb75804dcba7e36a127914c1 +84 -0
  468. package/vendor/impeccable/bundle/blobs/8e7bb79db7331b93f99de314dd5599de8587ec0b6c25e26cf1efab25c0777fcb +86 -0
  469. package/vendor/impeccable/bundle/blobs/8eb39a13e3d3650d4261f8fb06e91d6c0b888ca12ddbd3a5610cd8f0b05ad176 +69 -0
  470. package/vendor/impeccable/bundle/blobs/8eb466778023fccea641654d662157b123eeb360f4a0875bf6fbe3d93680851c +24 -0
  471. package/vendor/impeccable/bundle/blobs/8f0867db7c6f6a54348a0d951f198a1bd852cd12505d821e6e1ac6bd42e7fcea +87 -0
  472. package/vendor/impeccable/bundle/blobs/8f651cb1f8cde0acc5cc511b77fddd98558a527f54974698a1650b0fd7e849a7 +43 -0
  473. package/vendor/impeccable/bundle/blobs/8ff60b8b5369d364f732f8de10479a39294e65341b3e0b6497b21de5c8e34b2d +806 -0
  474. package/vendor/impeccable/bundle/blobs/904859c8160b02330b04db23a8eeeb4ef55bcaa10f5208b8d73a1718334633e7 +84 -0
  475. package/vendor/impeccable/bundle/blobs/910461b1c1f8216155165955c860a884a1e2f557cb38f21ef512ea90ef6503c2 +136 -0
  476. package/vendor/impeccable/bundle/blobs/9205e222bc6565b37fb504ceec93233c2d2a456802b69d16e6b1c44723907c4c +5 -0
  477. package/vendor/impeccable/bundle/blobs/93eda27117930692a20f668f1cb0a80b7e14ab865998faba567cd721116081d4 +84 -0
  478. package/vendor/impeccable/bundle/blobs/943b0d7c9ce4f6802d8440a07b2ad3c61cbd1cc00ab63962bab7eea9ca584d20 +46 -0
  479. package/vendor/impeccable/bundle/blobs/948326fab89f0d5c07355a06b9b9c30d08bba2e3a673a0151ebbf5a39dff7b9a +40 -0
  480. package/vendor/impeccable/bundle/blobs/94b4ce6299fea93d9f256b2d25705961a76bc5ea940c56db4145686ebc99df1b +89 -0
  481. package/vendor/impeccable/bundle/blobs/95b07450ad1ea0b7adc369587b06e52404945bbaa5d87f7491fac7ffd0e6e2ae +11 -0
  482. package/vendor/impeccable/bundle/blobs/960cb922bc934adbf9192e9428ff6bec1f382038166f02a785939c93b7391067 +139 -0
  483. package/vendor/impeccable/bundle/blobs/96e2e6bd4fcf9a2c6da65fb029f96d9176308fae2efd9d8653d3b8d838960e07 +44 -0
  484. package/vendor/impeccable/bundle/blobs/96e508039c719c0815701c36b8418b18baee1967f915fa29b23b84861ae8ea94 +127 -0
  485. package/vendor/impeccable/bundle/blobs/98afc4c6da252e90c6b783079b6f157bf94a13dd4351392e881edd2a100edf6a +105 -0
  486. package/vendor/impeccable/bundle/blobs/9a2c08ee2516d2ee87129e7ebe6a0895f9990c9852d1f6fa7e70be9a6a88a659 +234 -0
  487. package/vendor/impeccable/bundle/blobs/9b2fc50c5062073d097140cde85602bba181e325ec6b9eea1bd3da74582acb9d +46 -0
  488. package/vendor/impeccable/bundle/blobs/9b85b85443aec09918befb83208c72f475457db8261a8fc5e83ef7eec474c869 +145 -0
  489. package/vendor/impeccable/bundle/blobs/9deb14303b421b5a9232755b5b9f317716f33e1e211557a98a00a9c409775c4d +145 -0
  490. package/vendor/impeccable/bundle/blobs/9e161532dc6731581d7a5f35bda5a2865e5248df7aff90e6dfc9221409893e35 +54 -0
  491. package/vendor/impeccable/bundle/blobs/9eb03b319ce7a2b281bc85ed1b0a437eb05ab2f765fc267354f9f9e6cbfadc25 +806 -0
  492. package/vendor/impeccable/bundle/blobs/9f1151faffbaadba0ddf5c09a4b2a82c9a12c900a2c1a9dac9863ba9ba0f420e +54 -0
  493. package/vendor/impeccable/bundle/blobs/a1a56df5fd51be403ca85a2f8054bb6f2bfeee443556c7798c2482e412fb6a09 +54 -0
  494. package/vendor/impeccable/bundle/blobs/a1dbde501ffabb50f30f28f2de6755b5e91b3d4028292c5a3abd3358106eb457 +37 -0
  495. package/vendor/impeccable/bundle/blobs/a1e4febca3455787d7c753fe177a150dccde6e742957de400b0307247802d200 +145 -0
  496. package/vendor/impeccable/bundle/blobs/a423108e7e31a54564e2e0794186394f842625fd9f7d7ce6e6615362511503a2 +93 -0
  497. package/vendor/impeccable/bundle/blobs/a4cfd2330c8cca94b62986679b3f9e3bb9ada0cb30c2c63c5d19c6039f5a45ae +104 -0
  498. package/vendor/impeccable/bundle/blobs/a5371492582dbeb69b24a1a2947b256a2da8a4d55917af709bbab6e452d9d23c +145 -0
  499. package/vendor/impeccable/bundle/blobs/a55f016c046cb6a27c55bd7f346375aeb506a755c4fbca19a5f92dbd42309c23 +59 -0
  500. package/vendor/impeccable/bundle/blobs/a7045711a1f0dd2cd5bd98e57ff615f638d7e29738bdd618cf15e83fea5993b9 +325 -0
  501. package/vendor/impeccable/bundle/blobs/a7f036f4217933db8a96cf2f0ba251b15f388839d62bcf95720ce0b7152dd185 +806 -0
  502. package/vendor/impeccable/bundle/blobs/a8547c8565979894f0c07f92a96ac2a38e681a31fbf155ffeefc7566e185d9c2 +39 -0
  503. package/vendor/impeccable/bundle/blobs/a8f4056a85706c0c8f80ec48e9b437e198464100aa42786f9252051f4b931c19 +111 -0
  504. package/vendor/impeccable/bundle/blobs/a9515f6f084d8f51c378eb3cdc6db1f12e06dba2d32fc61b7ee7950fa2586f2e +24 -0
  505. package/vendor/impeccable/bundle/blobs/a9856cb40da6519b1334bcfc75a4fbe83bef39ca86ee6f3effcb2a96794c627c +127 -0
  506. package/vendor/impeccable/bundle/blobs/a98b397cedeeaa1da57f3395b3d9b6c1fc477f4247fb9dc13e4da3da588283ff +54 -0
  507. package/vendor/impeccable/bundle/blobs/a9d2203acd45ca33a13d5c68b02b23ed512425ac15f0e8438318ed124b43729d +61 -0
  508. package/vendor/impeccable/bundle/blobs/ac695dd89d5f1261004cfa966526f5d5e913c92fa0640d4d71cb42493effad08 +131 -0
  509. package/vendor/impeccable/bundle/blobs/ad389ab12800738b0e5c97618278b7a824654b25990166ec9f389caa5c3386ca +37 -0
  510. package/vendor/impeccable/bundle/blobs/add1bee76f897f989166a5b9ad1b38d9173248e29d668d5c885ae9a0eff73861 +105 -0
  511. package/vendor/impeccable/bundle/blobs/af34b8af89edb10e228c0482754423f48238fce816eceb8703b8781c130da54e +24 -0
  512. package/vendor/impeccable/bundle/blobs/b0e1a0721a1e47675a8750cfb608138743dd9fa9c047146e5cc8f82b9041be7a +806 -0
  513. package/vendor/impeccable/bundle/blobs/b14dc725606717be881a058bb691c0af1860cc8ad98d48e5a4789fe1a7de5458 +806 -0
  514. package/vendor/impeccable/bundle/blobs/b161198874e4e77599bc31691e78790be14bacc2eb03be168c8a7543ece9fbe1 +145 -0
  515. package/vendor/impeccable/bundle/blobs/b29e10f4506af2277739ad2373bc91c9fff41dbe76c9907f45152b4178cc6b6c +105 -0
  516. package/vendor/impeccable/bundle/blobs/b2d71ff0df7ed49e06dfc4acfce3d3f7eb48afa68be04763ee8c08354df50a07 +97 -0
  517. package/vendor/impeccable/bundle/blobs/b2f60e0154bf0e687badc46d8c8420e2118a9a6e21162050722be779dc02cb6d +111 -0
  518. package/vendor/impeccable/bundle/blobs/b314a0c5bd844f6471ea3031aeb9299674d972fbdd1615d99d16478de437d26d +84 -0
  519. package/vendor/impeccable/bundle/blobs/b31ff29c7a1ea979c6d039f7e8d17007410697ab49536690dca109f0af3f20f8 +336 -0
  520. package/vendor/impeccable/bundle/blobs/b3782f2d9215eb0f5df4fe3c0e0bec07cef011e1836d4d0e45ef02bc48d3adde +24 -0
  521. package/vendor/impeccable/bundle/blobs/b4def5b57733b6ba233570bd5691a536901f8b15479fc0111a2cde56224d0e1a +325 -0
  522. package/vendor/impeccable/bundle/blobs/b5f4fbb4a044c3f5ec14adc847222488f00fccabbf79ecd0b21084c8d319d616 +105 -0
  523. package/vendor/impeccable/bundle/blobs/b6022a8c7200e96b0b55c2ff599a01d64123a2f5fe01557d4ca5192a6e0f0b0c +145 -0
  524. package/vendor/impeccable/bundle/blobs/b6a2ef031313d3848ab2928875298550836f0f9ff7bdf5772e918c5c610ea448 +806 -0
  525. package/vendor/impeccable/bundle/blobs/b6dfd3df9a371e7d179d365cc1d72c11d4ed91b6507c0e1dbec0843419542f66 +84 -0
  526. package/vendor/impeccable/bundle/blobs/b7fcd2b03539d1029c8774fa806e6f4c677448e9e97e15f69b066022536c5491 +80 -0
  527. package/vendor/impeccable/bundle/blobs/b824bb76a657d3edd65e89807dcb21a3679eab39292423066e11368b35afba79 +325 -0
  528. package/vendor/impeccable/bundle/blobs/b8d49a3cab3428d9f351502e9c2c5802cef187e0d2af626ef3e1cd1837fd06bf +105 -0
  529. package/vendor/impeccable/bundle/blobs/bad9250670c18d89722563fd747bae4c4bec64d1db0ee09d12d4fea04fe271b8 +84 -0
  530. package/vendor/impeccable/bundle/blobs/bb069b43c09109d7031b0374e31955749fec657b252d39782f11e8985aca2b51 +131 -0
  531. package/vendor/impeccable/bundle/blobs/bb36665889124a0b6e15f16045265737449c3bdcf2712cdb08af3cfa01563e2b +14 -0
  532. package/vendor/impeccable/bundle/blobs/bb59a1f78f3d2aa78e4b024fe203117155f50946a9e4bbe65c1b3b3abdcee356 +104 -0
  533. package/vendor/impeccable/bundle/blobs/bb9d4bb369216e892eea25adeaefc5a3e09bb4abd31e3475b79e47b3aee2a6af +806 -0
  534. package/vendor/impeccable/bundle/blobs/bc5f71f1129d0f2c310d913d07c8dc609a1d25644121bd78c308f42d52a0b9e9 +86 -0
  535. package/vendor/impeccable/bundle/blobs/bc7a5128cfed46148396c08798b6b9429406fbe477e84e331a36ee2840b6b776 +111 -0
  536. package/vendor/impeccable/bundle/blobs/bcc05ea92faebb5c74037a9d4263a5ce9a56f5ab07c8ab3c59ee704d8cade745 +24 -0
  537. package/vendor/impeccable/bundle/blobs/bdf9a59beea111ac6f98f5624854feb5a5a1d60b1989edbbfabf3dc6f357a7e6 +105 -0
  538. package/vendor/impeccable/bundle/blobs/bdfd2a879ca65e437481eac5309f2283da225121630935d89ed902cfdf470c8e +105 -0
  539. package/vendor/impeccable/bundle/blobs/bea6ebfda78c51b9cf372097a1d77431d0f6bcd96eadec13a2ac95afbb87fb6d +104 -0
  540. package/vendor/impeccable/bundle/blobs/bead87679caad7c537dd7c04c3bb78be56ac7eec279ad6aad7322f48ff2df2d9 +312 -0
  541. package/vendor/impeccable/bundle/blobs/bf3b8883f8550744e08754af82a78939ab8b1237e5fad6f38d819e2f17e8a389 +104 -0
  542. package/vendor/impeccable/bundle/blobs/bf92a4a51b29de9661c5fa82f3d79244718a67d385ef661990f0c4a5b367e843 +104 -0
  543. package/vendor/impeccable/bundle/blobs/bfc51972fbf387566dc9e29c8b1af479a66ab401fdbce659fae9e6a5a9d85316 +69 -0
  544. package/vendor/impeccable/bundle/blobs/c02feba25a961a72647ad317aba2d65baeeed53c4cdcc072f25bb37f4d867d43 +84 -0
  545. package/vendor/impeccable/bundle/blobs/c1cb6877ca99a0c1b38ba0c7d59f32702d3022f6821d8045f7133f7c40b6362f +242 -0
  546. package/vendor/impeccable/bundle/blobs/c1f3766091019b6f9183bc1d11b1e0fe03d44c168dc05a682c55df32f904dcfd +33 -0
  547. package/vendor/impeccable/bundle/blobs/c327bf17f2af186f87164dee5fb5468746a9b137f0b604365d531ac9387f3712 +325 -0
  548. package/vendor/impeccable/bundle/blobs/c36f6aac0ddf52eabbb21df09fd3310540dca6b09e7a4017d18e94c06c469405 +46 -0
  549. package/vendor/impeccable/bundle/blobs/c3ad2a5fa570876af6645c48d246c664859e19f253d2dc9e0ead34e785d5b40a +84 -0
  550. package/vendor/impeccable/bundle/blobs/c6a0ec6c28ae55fe539f0f41a507b1638495afd285d6eb15c00245fc8cc7e7fe +42 -0
  551. package/vendor/impeccable/bundle/blobs/c6f15d20d8d8748c4c475ff70cdb0ee426f2e6c9e7eab6169311f4dffd279ea1 +54 -0
  552. package/vendor/impeccable/bundle/blobs/c83d6a13fdfb58835c845f61aed3fc6dca17b5569d33387ced840bc13424f354 +84 -0
  553. package/vendor/impeccable/bundle/blobs/c9284892cb1f21aaeaf93fdf2e9e7a679d05e0baa8ddf309a79a9790d262ad38 +806 -0
  554. package/vendor/impeccable/bundle/blobs/cb8caddbb3919e5bf7f252143b519fb16db28a244642d937b186cb89962d9201 +828 -0
  555. package/vendor/impeccable/bundle/blobs/cbd8bd68fa00935dd0f179adb169252629cf7ee443ea9dc7db77e7ef2cf77446 +4 -0
  556. package/vendor/impeccable/bundle/blobs/cf3ae16765e7b5bc333ef76e24ab37f080e3d62e931c4986158e3cbcda6b9f7a +46 -0
  557. package/vendor/impeccable/bundle/blobs/d07e3131cdf3e392e59eaa3e2f59fcb0799d9494df4adfee12a21067fb8365ce +37 -0
  558. package/vendor/impeccable/bundle/blobs/d1366aa4802b364893c2a14b16fe95c3b7fab79f9f69eb272fd1538f7cb1ce2c +105 -0
  559. package/vendor/impeccable/bundle/blobs/d15a2914d93e07a4956acd5c8b8211af17380f527acd10d8acf4f4920badaaaf +89 -0
  560. package/vendor/impeccable/bundle/blobs/d1faa55eb956033d28e9f27fd2bc2a9f62c5da0f0abd6534819cc0a04db54d9d +37 -0
  561. package/vendor/impeccable/bundle/blobs/d1fbd55074abb2251bdaa03749d34acc42c38e46e47549f18f5848df57d43c42 +86 -0
  562. package/vendor/impeccable/bundle/blobs/d2455359baf5f9e75360c7094e28a16937c8674619e07d58f30d2b5abfd31e53 +105 -0
  563. package/vendor/impeccable/bundle/blobs/d658c48ffbe0031e8e3b318996cad6ceafe29e40aa50d5bb25e4bf1d6839dc7c +89 -0
  564. package/vendor/impeccable/bundle/blobs/d6a1fa1689642a6db9027493747d7ed54f9e0cae660472022c0a0a8dfdead3f4 +54 -0
  565. package/vendor/impeccable/bundle/blobs/d7211a816aa8ca1111701930f7cdab82b4c8caa94c9a37522c1d7945209b01c2 +84 -0
  566. package/vendor/impeccable/bundle/blobs/d87879329982d608866e4babd31c61438ec34c68483e529761fbf420203eeebd +104 -0
  567. package/vendor/impeccable/bundle/blobs/daa2a8ecd874f9f940dfd72aaa329318b06bb9be25515be85fea84c871b637a6 +145 -0
  568. package/vendor/impeccable/bundle/blobs/dcf7340da023e64144af5768b8bf44ecf45b1bfdec12d3b1c9e6618f17f8c60a +131 -0
  569. package/vendor/impeccable/bundle/blobs/dde1b74aeab3d90320e134f0ed0422bef99917dcab4c1749aa1720a2c94f725f +37 -0
  570. package/vendor/impeccable/bundle/blobs/de1b7404f4cdfd7b515196afb17b74b1980f0bc88cb8681ae93a76ca48ec7bdb +167 -0
  571. package/vendor/impeccable/bundle/blobs/df0eb9e9a484fc7b8a0f3e50573a7d7f81e0f17598ac30d9f3fe5a6c6aa5fefa +37 -0
  572. package/vendor/impeccable/bundle/blobs/df23e9ee5b689a05ed88f42e9a36aaffa2e6e28b1d56e2832acaa1d3603fd363 +105 -0
  573. package/vendor/impeccable/bundle/blobs/df4f14df1daaad1606b682995f649da19a85debf264092447b3b7ddb8b4bc1ce +147 -0
  574. package/vendor/impeccable/bundle/blobs/dfd6f341b156bc604e7556b27cba437d5870fbc82d4c673d0127cf18151b2226 +99 -0
  575. package/vendor/impeccable/bundle/blobs/e02ba7f4417e84b3bd5ec65287c4a14cf163ca3ac6f8ee37d8f709d0c8b0b6d2 +84 -0
  576. package/vendor/impeccable/bundle/blobs/e21af575fcc0f1df54ae422bea4dfa1e5211422606908919f6a86e19e0d5c20c +89 -0
  577. package/vendor/impeccable/bundle/blobs/e26ddd48211aae08fe6debf2a7a4308aa081ed224668cde528e451888db0e3e3 +325 -0
  578. package/vendor/impeccable/bundle/blobs/e2e275495354eeccb7e59af7d74e2ff1f371839bd6aaec1266428760995fb24c +104 -0
  579. package/vendor/impeccable/bundle/blobs/e2f98c4136d0ab70ec32fcdef58edb20ed8ec4f6cc067e0dae952b22cfd6a471 +24 -0
  580. package/vendor/impeccable/bundle/blobs/e3c331cc21d9a216e25e08628610ea99c97e150893c3d26e5c0cecc532f26d7b +24 -0
  581. package/vendor/impeccable/bundle/blobs/e44ca51f24c4736f9aee6024182b0409aa12ec94812b7ec94745e0999ed06a70 +29 -0
  582. package/vendor/impeccable/bundle/blobs/e49d2b0110c55751da3c965b4ae4d294aa676c961a09f8efbbbf22c1ec7c4fa0 +24 -0
  583. package/vendor/impeccable/bundle/blobs/e68467ba99684d8c975a8a2725145d29db41d70659c7544ea54cc6632660cea3 +127 -0
  584. package/vendor/impeccable/bundle/blobs/e71524578eb2bda3b8d2da3d8b8371239a2179c5fa866f9f7e48bcac45a8cd6f +84 -0
  585. package/vendor/impeccable/bundle/blobs/e71d6b97680084a7ccec01844e658cbd2042aec00da0c91bec62a240ad7dcf6a +145 -0
  586. package/vendor/impeccable/bundle/blobs/e7dd10af2c3c18c60dc20734d55ff870c323a10dadd337600f7bb980fc6b53c8 +327 -0
  587. package/vendor/impeccable/bundle/blobs/e802e4f7bdc89050a9c0f2ca506e1d493a2316e6e810c0336c57aa073717ef3e +50 -0
  588. package/vendor/impeccable/bundle/blobs/e8ee6c08e94b80324173d89d6f4cdc5b4829ea6858b3a11fc186588a490cada4 +46 -0
  589. package/vendor/impeccable/bundle/blobs/e9da72a13eb3411d6bbb316953022f62abc4434f505e5345907b216eda9f793b +39 -0
  590. package/vendor/impeccable/bundle/blobs/ea8432c90c30ecb0426662a681ead5c0941113079704e1a766cda09e85b15b4f +111 -0
  591. package/vendor/impeccable/bundle/blobs/eaa50e8cd95e00a94a257db2bff4eafd820696ba75a08a384a00517c3402924e +325 -0
  592. package/vendor/impeccable/bundle/blobs/eb3213b9c9f4d6b2f153e7b457f13aa131bcf633695229dad4eac39a920bdf38 +46 -0
  593. package/vendor/impeccable/bundle/blobs/ec58806f16fc7ba29bccef08f2e158cd00be077ce05d45e943a59bd26dc6dc55 +312 -0
  594. package/vendor/impeccable/bundle/blobs/ec6338b20047099601e4bac8b2efcd597f800d5e437259f6c15d23090400621b +325 -0
  595. package/vendor/impeccable/bundle/blobs/edddeb3fad88adec9a055b1bf9d5c75418cbe97a13b1a7f6765e73249e482563 +144 -0
  596. package/vendor/impeccable/bundle/blobs/ee0a15fcfc244b76b896a2650a17b35e444d4311166b69a3cfa32d11f8f44851 +30 -0
  597. package/vendor/impeccable/bundle/blobs/ee6d6d127c1c2ab3526d529a8e3698be2185b5e346ac617f37501de2c0698b97 +99 -0
  598. package/vendor/impeccable/bundle/blobs/ef0b8eca20e1321cf7216fd0bda41ce54b0cca197cfd1b075eb51f3436f59059 +24 -0
  599. package/vendor/impeccable/bundle/blobs/ef2dde00030580ed2765cbf7be9b2ea4a6f64cb915b804fd6f6abcf38051c7b9 +234 -0
  600. package/vendor/impeccable/bundle/blobs/f0c4d0615c7d520dfc2536c01cc7f1f3aab9b60ddc399ba01289fe62edb12370 +24 -0
  601. package/vendor/impeccable/bundle/blobs/f1601095679d7d8cf6fef6845598c70d8734190709c1404fa0026e28fef2faaa +325 -0
  602. package/vendor/impeccable/bundle/blobs/f173ff03f989f162cee815feb2d8ca72daf00019c48694d89db16d52171a79c0 +24 -0
  603. package/vendor/impeccable/bundle/blobs/f424dafa190533cd32c0bc3e4131d0c472d58e16bb191eab14f0ae73c2cea917 +37 -0
  604. package/vendor/impeccable/bundle/blobs/f597742c8e5562263d3bce725cb55e920d8c2c60223f41a632d523ca30cdd12b +111 -0
  605. package/vendor/impeccable/bundle/blobs/f672ef8251a3ed4051a053d30819664951b17540b2899acd27d20e500c234abc +258 -0
  606. package/vendor/impeccable/bundle/blobs/f7916d0113da7a19d4e03c113d5563d181457e44f1646ecab9191cfee5ae776d +89 -0
  607. package/vendor/impeccable/bundle/blobs/f7a9e3f30fe07b0d98351730e9895d50bba96dd42fe91c0d9b9a76ef62e53322 +80 -0
  608. package/vendor/impeccable/bundle/blobs/f7b854effc55c8f07e40a415e0d6b5c333f4042fbc849fac73d52619c8d053a1 +54 -0
  609. package/vendor/impeccable/bundle/blobs/f964506c0fae87b3c2c1db7016ddc9be9ef970bbcf5548d684b997b5d5991586 +33 -0
  610. package/vendor/impeccable/bundle/blobs/f97a6891c80bbbc728edefcf4b638d1a823b38f3cb16ecd0fbb717734cc5c0c8 +46 -0
  611. package/vendor/impeccable/bundle/blobs/f9cbbad0cc08fb9bd69d4d3046067c6cf820b89cdaf7af8c81c671fb0a62b6ae +54 -0
  612. package/vendor/impeccable/bundle/blobs/fce6688138d2ceb1e3d2cde5231f54b1d8dc8748b4c95a7919aa83b6f924cf96 +127 -0
  613. package/vendor/impeccable/bundle/blobs/fd5579dbae1fc2495b7dddde48df9673acebd27953bbb56d506d3b470375c9e9 +37 -0
  614. package/vendor/impeccable/bundle/blobs/fe91fcf28638f95577af481a50edaf339d6c9a3ad3b9fa477bc81c116b8bc392 +139 -0
  615. package/vendor/impeccable/bundle/blobs/ff0ab1361f52d70d3ff0d23090d78794a75afdfa2f8c1cee5491dee69215faaa +105 -0
  616. package/vendor/impeccable/bundle/blobs/ff882c59c9aced92338aa194cc99a521ea2f083fd22eef3b1c1225e06bc72f66 +86 -0
  617. package/vendor/impeccable/bundle/manifest.json +1139 -0
  618. package/skills/dev-plan/evals/evals.json +0 -72
@@ -0,0 +1,213 @@
1
+ # 配额与席位(seatBased / seatRoles)
2
+
3
+ > 有「每租户最多能建几个 X」这类诉求时读本文。提炼自门户仓 `apps/api/src/modules/seats/`、
4
+ > `packages/shared/src/constants.ts`、`apps/api/src/db/provisioning.ts`(门户仓文件,App 自己的
5
+ > repo 里没有;本文件已自包含)。冲突时以门户仓库为准。
6
+
7
+ ## 0. 红线
8
+
9
+ **外部服务不自建配额/套餐/计费。** 配额的唯一事实源是平台的套餐矩阵。对方在自己库里存一份
10
+ 「本租户上限」,第一次调档就会与门户对不上,而且**没有任何东西会告诉你它们分叉了**。
11
+
12
+ **配额 ≠ 用量**:配额答「还能不能再建一个」,用量答「这段时间用了多少」。后者走 `usageReporter`
13
+ + `usage.report`(指标注册表 = 内置 `USAGE_METRICS` ∪ manifest `usageMetrics` 声明,见 §5)。
14
+ 计费方向另有平台级 Credit 服务,同样不自建。
15
+
16
+ ## 1. 先选模型:二选一
17
+
18
+ 两者都是 listing 上的标记,且**仅 backed listing** 可声明 —— end-state 得有 `serviceBaseUrl` 或
19
+ `deployDescriptor`,否则 `createListing`/`updateListing` 直接 `VALIDATION_FAILED`:「只有带独立后端
20
+ (serviceBaseUrl / 部署描述)的应用可声明席位制」(`market/service.ts` 的 `assertSeatBasedEligible`)。
21
+
22
+ | | 用在哪 | 谁收口 |
23
+ | --- | --- | --- |
24
+ | `seatBased: true` | 计「门户成员」用不用得了这个 App | **门户**。TDT 签发时就拦:无席位 ⇒ `SEAT_REQUIRED`,App 侧零代码 |
25
+ | `seatRoles: ["teacher","student"]` | App **自管账号/资源**(sms 的师生号那类) | **App 自己**。门户只发数,不拦对方的建号请求 |
26
+
27
+ ## 2. 四要素分属四个事实源
28
+
29
+ 「配额」不是一件事。想清楚你要动的是哪一件,再决定找谁:
30
+
31
+ | 要素 | 谁写 / 写在哪 | 要门户发版吗 |
32
+ | --- | --- | --- |
33
+ | role 存不存在(`seatRoles: ["service"]`) | **对方自己的 `app.manifest.json`**(清单仍在门户仓的 App 才是 `LISTING_DEFS`) | 不用 |
34
+ | 各套餐给几个(生效值) | 平台管理员 → `PUT /api/console/seat-plans` upsert `app_seat_quotas(listing_key, plan, role)` | 不用 |
35
+ | 单租户加购 | 平台管理员 → `PUT /api/console/tenants/:id/seat-addons`(仅 pro/ultra 可加购) | 不用 |
36
+ | role 的三语标签 `SEAT_ROLE_LABELS` | 门户 `packages/shared/src/constants.ts` | **要**(不加则控制台显示裸 role key,`?? role` 兜底不报错) |
37
+ | SA 的 `seats.read` | **对方 manifest `privilegedServiceScopes: [{scope, reason}]` 申请** → 「发布审核」逐条确认批准即授予(`SA_DEFS.serviceScopes` 降为种子/运维兜底,union top-up 不回滚审批授予) | 不用 |
38
+
39
+ ⚠️ **各套餐的数值进不了 manifest,也进不了 `LISTING_DEFS`** —— `AppManifest` 与 `ListingDef`
40
+ 都只有 `seatBased` / `seatRoles` 两个字段,没有任何 per-plan 数值字段。应用侧**没有任何写路径**
41
+ (manifest 没这字段 · 发布提案携带的未知字段一律进人工审而非生效 · `seats.read` 只读)。这是有意的:
42
+ 数值是商务面,改它等于改可售卖档位、影响所有租户。应用侧能做的是在契约里**提议**一组数。
43
+
44
+ ⚠️ **`seats.read` 是 `SERVICE_ONLY_SCOPES`**(与 `directory.provision` / `lms.taxonomy.manage` 同列)。
45
+ 外部团队在 manifest 里自己写 `serviceScopes: ["seats.read"]` **会被拒收** —— 评审交付物
46
+ 时看到它是**当场打回的信号**,不是配置失误。要拿它走
47
+ `privilegedServiceScopes: [{ "scope": "seats.read", "reason": "…" }]`:这是**申请**不是授予,
48
+ 必进「发布审核」(最高治理档,审批人逐条勾选确认),批准后经 `registerFromManifest`
49
+ 落到 SA 的服务态 scope。
50
+
51
+ ## 3. 声明写在 manifest 里(不需要门户改代码)
52
+
53
+ `seatRoles` / `seatBased` 是 `AppManifest` 的一等字段,`register-app --prod` 与控制台「导入 manifest」
54
+ 都经 `manifestToListingInput` → `updateListing` 落到 listing 上:
55
+
56
+ ```jsonc
57
+ {
58
+ "listingKey": "task-gateway",
59
+ "deployDescriptor": { "image": "…" }, // 没有它(或 serviceBaseUrl) ⇒ 席位声明会被拒
60
+ "seatRoles": ["service", "node"]
61
+ }
62
+ ```
63
+
64
+ 两条操作面的事实:
65
+
66
+ - 写进 manifest 后随 `publish --manifest` 提交 —— `seatRoles` 是治理档,提案进「发布审核」
67
+ 等平台批准后生效(`register-app --prod` / 控制台「导入 manifest」是运维兜底路径,同一段
68
+ `registerFromManifest`)。
69
+ - 出仓四件(knowledge / task-gateway / omni-parser / pagebuilder)已**不在** `LISTING_DEFS`
70
+ 里 —— 清单唯一事实源就是对方仓的 manifest,不存在双事实源问题;**别把定义加回门户**
71
+ (verify-split「清单零残留」棘轮看守)。
72
+ - 仓内 App 在 `LISTING_DEFS` 加 `seatRoles` **不用 bump version**:它走「代码权威
73
+ 字段」通道,每次部署都对齐,跟版本治理无关。
74
+
75
+ ## 4. 对接面与三态
76
+
77
+ ```
78
+ POST /api/v1/seats/quota 服务态令牌(client_credentials, azp=自己的 listingKey), scope seats.read
79
+ body { roles: ["service","node"] }
80
+ → { tenantId, plan, listingKey, roles: [{ role, quota, quotaIsDefault, addon, available }] }
81
+ ```
82
+
83
+ 在**建号/建资源路径**上查它并拒绝超额,就是 App 侧的全部工作量。按三态分支,**别只看数字**:
84
+
85
+ | 响应 | 含义 | 建议动作 |
86
+ | --- | --- | --- |
87
+ | `available === null` | 该租户 unlimited | 放行,不收口。**把 null 当 0 是这个契约最容易踩的一处** |
88
+ | `quotaIsDefault: true` | 平台还没配,你拿到的是兜底 | 按兜底值放行 **+ 打告警**,别静默按一个没人定过的数收口 |
89
+ | `quotaIsDefault: false` | 权威值 | 照值收口。**值可能是 0** —— 那是平台明确决定「这档不给」 |
90
+
91
+ **解析顺序**:`app_seat_quotas` 行 → `SEAT_ROLE_DEFAULTS[role]` → `UNREGISTERED_ROLE_DEFAULTS`
92
+ (各档一律 **1**)。1 的意思是「能跑通、但显然还要配」。
93
+
94
+ - 兜底**不能取 0**:0 是合法的权威配置值(`putSeatPlans` 接受 0),拿它表示「没配」就再也分不开
95
+ 「没配」与「明确不给」——而 `quotaIsDefault` 存在的全部意义就是分开这两者。
96
+ - `seatBased` 的成员席位走**另一条**兜底 `DEFAULT_PLAN_SEATS` = free 3 / pro 20 / ultra 100,别混。
97
+ - 新 role 落地后**一定要去控制台配一轮真实数值**,别让生产挂着兜底跑。
98
+
99
+ ## 5. 想让控制台显示「已用 / 超额」:得上报 gauge
100
+
101
+ 平台不掌握 `seatRoles` 的占用数(收口在 App 侧),所以「已用」来自 App 自己上报的日快照:
102
+ metricKey 约定 `<listingKey>.<role>-seats.allocated`(`latestRoleAllocated` 读最近一天)。
103
+ sms 先例每个 role 报两条(`allocated` + `available`),两个 role 共 4 条。
104
+
105
+ ⚠️ **硬门**:`ingestUsage` 对**未注册**的 metricKey **拒收该条记录**,且指标的
106
+ `appKey` 必须等于上报者的 azp。漏注册的症状是上报接口返 200 但记录进 `rejected`,
107
+ 控制台「已用」恒 0、`overQuota` 恒 false、加购决策没有依据(拒收理由现在会显式指出
108
+ 「未注册 —— 请在 usageMetrics 里声明」,不再是无提示的静默失真)。
109
+ 指标注册表 = 内置 `USAGE_METRICS` ∪ 各 listing 的 manifest `usageMetrics` 声明:
110
+ **外部 App 在自己 manifest 的 `usageMetrics` 里声明 gauge 条目**
111
+ (`[{ key, kind: "gauge", unit: "count", label: {zh,…} }]`,key 前缀必须=listingKey、
112
+ 金额单位 microAmount 不开放;治理档,批准后生效)——不再需要门户发版;
113
+ 仓内 App 仍在 `packages/shared/src/usage.ts` 登记。
114
+
115
+ ## 6. 两层快照:谁读哪一层
116
+
117
+ 安装时 `seatBased` / `seatRoles` 会快照进该租户的 `apps` 行。三个面读的表**不同**:
118
+
119
+ | 面 | 读哪张 |
120
+ | --- | --- |
121
+ | 平台配额矩阵 `getSeatPlans` | `marketplace_listings.seat_roles` |
122
+ | 租户加购 `getTenantAddons` | **`apps.seat_roles`(已装租户快照)** |
123
+ | `POST /api/v1/seats/quota` | **两者都不读** —— roles 来自请求体,只查 plan + 配额表 + 加购表 |
124
+
125
+ **存量租户不需要人工回刷**,两条路都自带传播:
126
+
127
+ - `LISTING_DEFS` 路:`syncFromSource` 对 listing 层与已装 `apps` 行**各打一次**
128
+ `codeAuthoritativePatch`(union 语义),随 `bootstrap:prod` 自动到达。
129
+ - manifest 路:`updateListing` 直接批量 update 所有已装 `apps` 行,`registerFromManifest` 之后
130
+ 还会再跑一次 `syncInstalledAppsFromListing`。
131
+
132
+ 推论:**漏声明不会 fail-closed**。`/api/v1/seats/quota` 不读任何 seatRoles 声明,照样按请求体里的
133
+ role 返回兜底值。真实症状是**控制台配额矩阵与加购面不出这一行** ⇒ 平台配不了、租户加购不了
134
+ ⇒ 所有租户静默跑兜底。真正 fail-closed 的是 SA 缺 `seats.read` → 403。
135
+
136
+ ## 7. 三个坑
137
+
138
+ - **manifest 的 `seatRoles` 是整份覆盖,不是 union**(`updateListing`,改动还会批量传播到所有已装
139
+ 租户的 `apps` 行)。下一版 manifest 少写一个 role ⇒ 那个 role 从所有租户消失。清单字段
140
+ 「只增不减」那条规矩管的是 scopes/dependencies/exchangeTargets,**不覆盖 `seatRoles`**。
141
+ (走 `LISTING_DEFS` 那条是 union,不会静默删。)
142
+ - **role 名没有格式校验,改名 = 换一个新 role**:旧 `(listing_key, plan, role)` 配额行成孤儿 ——
143
+ 全仓没有任何地方删它们,`getSeatPlans` 只按当前 `seatRoles` 出行,于是孤儿行在控制台不可见
144
+ 却还躺在库里(改回同名会「复活」旧数值),而新 role 悄悄回落兜底。**role 名定下来就别动。**
145
+ - **`SEAT_ROLE_DEFAULTS` 按 role 名索引,不带 App**(`Record<role, Record<plan, number>>`)——
146
+ 全平台共用一个 role 名命名空间,两个 App 都用 `node` 就共享同一份代码兜底。DB 里的权威值
147
+ 倒是按 `(listing_key, plan, role)` 分得开。要放代码兜底就挑个不会撞的名字。
148
+
149
+ ## 8. 判定:这个数该不该进套餐表
150
+
151
+ **先问一句「你说的是配额还是用量」** —— 两者经常被混为一谈。三个面的命名空间也各不相同:
152
+
153
+ | 面 | 命名 | 例 |
154
+ | --- | --- | --- |
155
+ | scope | **下划线** | `task_gateway.submit` |
156
+ | 用量指标 `USAGE_METRICS.key` | **连字符** | `task-gateway.tasks.submitted` |
157
+ | 配额 | **不是字符串键** | `(task-gateway, pro, service) → 10` |
158
+
159
+ 配额的键空间是 `app_seat_quotas` 的唯一索引 `(listing_key, plan, role) → seats:int`。namespace 已经
160
+ 由 `listingKey` 占掉,你要提供的只是一个**短 role 名**。(所以「entitlements 的 key 怎么命名」是个
161
+ 不成立的问题 —— 平台没有 entitlements 这个东西。)
162
+
163
+ **再问「是不是真要按套餐卖」。** 只是防滥用的安全上限就别进套餐表 —— 进了就等于承诺它是可售卖
164
+ 档位,以后想改口径要动所有租户的既有配额。
165
+
166
+ **最后看它像不像一个「池子」。** `app_seat_quotas` 存的不是参数,是池子:它自带加购
167
+ (`available = quota + addon`)、已占用(gauge)、超额(`overQuota = allocated > available`)三件配套。
168
+ 配套不成立的东西塞进去不会报错,只会让控制台显示一行永远「已用 0 / 未超额」、还挂着语义错的
169
+ 加购入口的假数据。
170
+
171
+ ⚠️ 别拿「唯一键里没有『每个父对象』这一维」当判据 —— 一个**对所有实例一律生效**的上限就是
172
+ 一个整数,`(app, plan, role) → 5` 存得下。只有「A 服务 3 个、B 服务 10 个」那种**真嵌套**配额才卡在
173
+ 键的形状上。平台**不**为此新建通用 entitlements 表:真功能要排期,代价是平台从此有两套配额模型。
174
+
175
+ ## 9. 案例:task-gateway 的 `max_services` / `max_nodes_per_service`(2026-08-19)
176
+
177
+ 对方提议拿它们当「entitlements 的 key」问门户怎么映射到套餐表。逐条判定:
178
+
179
+ - **`max_services`**(每租户最多几个 service)→ **能落**,就是一个 role。按 §2 的事实源表分工:
180
+ role 由对方 manifest 声明 · 数值平台在控制台配 · gauge 由对方 manifest `usageMetrics` 声明 ·
181
+ `seats.read` 由对方 manifest `privilegedServiceScopes` 申请(审批授予)· 门户侧只剩
182
+ `SEAT_ROLE_LABELS` 三语标签一件(可选,不加显示裸 role key)。
183
+ - **`max_nodes_per_service`**(每个 service 最多几个 node,对所有 service 一律生效)→
184
+ **能落,但配套三件空转**(§8)。按「随不随套餐变」三分:
185
+ **(a)** 不随套餐变(纯防滥用)→ App 侧产品常量,别进表;
186
+ **(b)** 随套餐变、卖的是**总容量** → 租户级 `node` 池(`seatRoles: ["service","node"]`),三件配套
187
+ 全部成立,门户看得见真实水位、加购这条商业路径也保住 —— **默认推荐这条**;
188
+ **(c)** 随套餐变、且确实要卖「节点密度」→ 把这个一律生效的上限当一个 role 落,标签必须说清是
189
+ 「每个服务的上限」而不是总量(否则平台管理员会当成总量配错),接受那行的配套空转。
190
+
191
+ ## 10. 落地清单
192
+
193
+ **外部 App(manifest 路,除标签外无需门户发版)**
194
+
195
+ 1. manifest 加 `seatRoles: [...]`(治理档)
196
+ 2. manifest 加 `usageMetrics` gauge 条目(每 role 两条:`.allocated` / `.available`;治理档)
197
+ 3. manifest 加 `privilegedServiceScopes: [{ "scope": "seats.read", "reason": "…" }]`(申请,审批逐条确认后授予)
198
+ 4. (可选)门户 `SEAT_ROLE_LABELS` 加三语标签 —— 唯一仍要门户发版的一件;不加则控制台显示裸 role key
199
+ 5. 批准部署后,平台管理员在控制台按 `App × role × 套餐` 配一轮真实数值
200
+
201
+ **仓内 App(LISTING_DEFS 路,随门户发版)**
202
+
203
+ 1. `LISTING_DEFS[<key>]` 加 `seatRoles: [...]`
204
+ 2. `SEAT_ROLE_LABELS` 加三语标签;`SEAT_ROLE_DEFAULTS` 加各档默认值(可选;不加则一律兜底 1)
205
+ 3. `USAGE_METRICS` 加 gauge 条目(每 role 两条)
206
+ 4. `SA_DEFS[<key>].serviceScopes` 加 `seats.read`
207
+ 5. 部署后控制台配数值
208
+
209
+ **App 侧**
210
+
211
+ 1. 建号/建资源路径上调 `POST /api/v1/seats/quota`,按 §4 三态分支
212
+ 2. 每日上报 gauge(`allocated` = 当前实际数,`available` = 配额 + 加购;unlimited 不报)
213
+ 3. 形状类上限(每个实例最多几个子对象)留作 App 侧常量
@@ -0,0 +1,259 @@
1
+ # 注册布线与一盒(one-box)本地联调
2
+
3
+ > 提炼自门户仓库 `docs/外部App本地联调指南-one-box.md`、`deploy/app-devkit/README.md`、`docs/SSO与App开发指引.md` §15.3(§4 一盒部分对齐 2026-08 的精简镜像与自建 Harbor)(门户仓文件,App 自己的 repo 里没有;本文件已自包含,不必去找)。冲突时以门户仓库为准。
4
+
5
+ ## 1. `app.manifest.json`(单一事实源,放你自己的 repo)
6
+
7
+ 既是交付契约也是注册脚本的输入。字段:
8
+
9
+ - 身份/展示:`listingKey`(= TDT aud = 服务账号/容器命名基名)、`name`、`version`、`cat`、`tagline`、`desc`、`icon`、`color`
10
+ - 形态:`type`(`micro` 有前端 / `service` 无前端)、`embedUrl`(micro:`/apps/<key>/`)、`embedCsp.connectSrc`、`helpEntry`(micro:版头帮助按钮入口,`"/help"` App 内路由 = 自动档 / `"https://…"` 外站文档 = 治理档;不声明就不出按钮)
11
+ - 权限:`scopes` + `scopeLabels`(同意屏逐 scope 的说明文案,支持多语——形状见下)、`aclManifest`(纯 scope 鉴权可 `null`)、`navItems`(micro)
12
+ - ⚠️ `scopes` 还有第二个用途:它(按租户的安装期快照)就是**租户自助开服务账号**时的可选项池。
13
+ 租户要拿自己的采集器/脚本/CI 直调你,那条 scope 必须在这里;只写在 `serviceScopes` /
14
+ `privilegedServiceScopes` 里的,租户面**一条也勾不到**(见 integration-contract.md §3.1)。
15
+ `scopeLabels` 同时是那个勾选列表的正文——不写就只显示裸 scope 串。
16
+ - 关系:`dependencies`、`exchangeTargets`、`serviceBaseUrl`(`/svc/<listingKey>`)
17
+ - 服务态与计量:`usageReporter`(true ⇒ SA 得 `client_credentials` + `usage.report`)、`serviceScopes`(服务态 scope;SERVICE_ONLY **永拒**)、`privilegedServiceScopes`(SERVICE_ONLY 的**申请**:`[{scope, reason}]`,reason 必填,最高治理档、审批逐条确认后授予)、`usageMetrics`(用量指标声明:key 前缀必须=listingKey、金额单位不开放;治理档,批准后 ingest 才认这些 key)
18
+ - 部署/运维:`requiredEnv`(部署所需 env 的**键名**清单,值永远由平台配;元素可写 `{ key, renamedFrom }` 表达改名。键集合一变提案转入「发布审核」,且**批准前门户会比对 `descriptor.env ∪ envFile` 的键集合,缺了拒绝生效**(`REQUIRED_ENV_MISSING`,提案留 pending))、`deployDescriptor`(`image` 归自动档、`hostPort` 归平台不算变更,**其余一切属治理档**)、`deployRequirements`(后端要跑在**什么样的机器**上:`{region?, size?, gpu?, network?}`,只写**名字与档位**,网段/IP/URL 提交即拒;批准时按目标环境**当时**的资源池逐维匹配,不满足则拒绝生效、提案留待审,通过则把首次落点固定住;需要 `deployDescriptor`)、`requiredServices`(运行所需的**外部服务** `[{name, kind, note?, envKey?}]`,身份是 `(kind, name)` 二元组;批准时比对本环境**已登记**的「已具备服务」,未登记或缺条目则拒绝生效 —— 门户**不据此开通**,只核对登记表;`envKey` 只被携带、当前不注入)
19
+
20
+ ⚠️ **`deployDescriptor.hostPort`(宿主机发布口)不归 App 定**:它是部署环境相关的事实——同一份 manifest 会发到一盒与好几套生产门户,各自端口地貌不同,而 App 团队看不见目标机器上谁占了什么。规则三句话:**首次注册**当建议值采纳(撞了自动退让到平台端口池 20000–20999,**不会因此拒掉注册**);**listing 已存在则一律忽略**(那个口已经写进 Caddy 的 `/svc` map、也是在跑的容器发布出来的口);发布响应的 `warnings` 会说明实际是哪个口。App 只管 `port`(容器内监听口,约定 8080)。
21
+ **例外**:`extraPorts[].host` **不参与退让**,撞了硬拒——那些是对外契约口(worker 节点连的就是那个数字),静默挪走等于把它们全断掉,且门户侧一条都测不到。
22
+ - dev 专用明文:`serviceAccount{clientId,secret}`(`clientId` 约定 `<key>-server`,且**必须是自己的** —— 服务账号身份归平台,声明已归属另一 App 的 clientId 会进人工审、批准也会在生效时被写入闸拒绝)、`exchangeInitiatorSecret`(本应用作为交换发起方时的 App Secret)
23
+
24
+ **文案字段的形状**(写错的那一组**不会报错**,所以单列一张表):
25
+
26
+ | 字段 | 形状 | 写错的后果 |
27
+ | --- | --- | --- |
28
+ | `tagline` / `desc` / `icon` / `color` / `cat` / `navItems[].label` / `dashboardWidgets[].title` | **纯字符串**(单语) | 给多语对象 ⇒ 门户把它拼成字面量 `"[object Object]"` 存进 text 列,显示在每个租户的应用卡片与详情上 |
29
+ | `name` | 纯字符串 | 给对象不报错,但会被**拍平成 zh-CN**,另外两种语言就此丢掉 |
30
+ | `scopeLabels[<scope>]` | 字符串 **或** `{ "zh-CN": …, "zh-TW": …, "en": … }` | 存 jsonb,同意屏按门户当前语言解析;回退链 当前语言 → `zh-CN` → `en` → 键名,所以 **`zh-CN` 是回退终点,必写** |
31
+ | `aclManifest` 内的 `label` / `name` / `desc` | 同上(字符串或多语对象) | 角色矩阵按请求 locale 解析 |
32
+ | `usageMetrics[].label` | **`{ "zh": …, "en"?: …, "tw"?: … }`** —— 键名与上一行**不是同一套** | 缺 `zh` ⇒ 提交即拒 |
33
+
34
+ `scopeLabels` 还有两条静默失效:**键不在 `scopes` 里的在写入时被直接丢弃**(同意屏上那条回落成键名,改 scope 名忘了改文案键就中);
35
+ **平台基础 scope(`userinfo.read` / `audit.write` / `notification.*` …)的文案不归 App 写** —— 那是平台统一维护的措辞,
36
+ 各 App 各写一份,同一条权限在不同应用的同意屏上就会说得不一样,比缺文案更糟;发现平台漏了哪条,反馈给平台补。
37
+
38
+ **scope 三规则**(写时强校验):一条清单只能声明——
39
+ 1. 平台基础 scope(`userinfo.*`/`audit.write`/`notification.*`/`settings.*`/`scheduler.*`/`content.*` 等);
40
+ 2. **自己命名空间**:`<listingKey>.` 前缀及连字符→下划线变体(`omni-parser` → `omni_parser.*`);
41
+ 3. **已声明 `exchangeTargets` 的目标命名空间**(例:omni-parser 声明 `files.read` 但 exchangeTargets 不含 files → 拒;knowledge 声明 `files.read` 且 `exchangeTargets:["files"]` → 放行)。
42
+
43
+ 越界 → `VALIDATION_FAILED`。App 命名空间 scope 随清单入库,**不用改门户代码**。
44
+
45
+ ⚠️ 规则 3 **读写不分**:背书的是整个命名空间,`files.write` 与 `files.read` 同一条待遇,
46
+ 没有「写要额外批一次」这回事。别人的 App 只声明了读,那是它自己的业务选择(它的写面不
47
+ 代表用户),不是平台对你的限制 —— 照抄别人的清单当规矩用,会把一个本来合法的功能砍掉。
48
+
49
+ ## 2. 注册(dev / 一盒):`register-app`
50
+
51
+ ```bash
52
+ bun run register-app <你的>.manifest.json # 幂等;NODE_ENV=production 拒跑
53
+ ```
54
+
55
+ 四件事:① 按 listingKey upsert + 发布 listing(复用门户写时校验:scope 命名空间 / ACL 形状 / 依赖无环);② DB 直写 `token.introspect` 服务账号(secret = manifest 明文;同 secret 不动、不同则轮换);③ 把 `exchangeInitiatorSecret` 写进**已安装**实例的 App Secret——⚠️ 所以**先在门户安装 App、再重跑一次 register-app**,否则发起交换 401(判定方法见 §2.2,别看日志里那个数字);④ 往 `caddy-svc-allow` 卷写 `<key>.map` 放行 `/svc/<key>`(免改 Caddyfile、免重启反代)。
56
+
57
+ ### 2.1 第五件事:授予租户(dev 自动 / 生产不自动)
58
+
59
+ **发布一条 listing 并不会让它出现在任何租户的市场里。** 那道闸 fail-closed 在
60
+ `tenant_listing_grants` 上:列表按授予集过滤、安装前 `assertTenantMayUseListing` 无授予行直接
61
+ `LISTING_NOT_GRANTED`。授予行本来由 `installListing` 在**安装那一刻**写(「安装即授予」,依赖一并
62
+ 授予)——这对被依赖方成立,但对**目标 App 自己**是先有鸡还是先有蛋:路由闸先于安装拒绝。
63
+
64
+ | 路径 | 行为 |
65
+ | --- | --- |
66
+ | **dev / 一盒**:`register-app <manifest>` | **自动授予当时已存在的所有租户**(非 service 型),输出里有一行 `租户可用应用: 新授予 N 个租户` |
67
+ | **生产**:发布提案批准 / 控制台导入 manifest(`mode:"prod"`) | **不自动授予** —— 语义是平台管理员显式勾选,自动授予会绕过治理面 |
68
+
69
+ ⚠️ **判断你手上的一盒镜像有没有这个自动授予**:跑完 `register-app` 看输出里**有没有
70
+ `租户可用应用:` 这一行**。没有 ⇒ 镜像早于这次改动,按下面手动补。
71
+
72
+ ⚠️ **自动授予只覆盖「注册那一刻已存在」的租户**:之后新建的租户不会被补授,要么再跑一次
73
+ `register-app`,要么手动勾。
74
+
75
+ **手动补授权(生产必走 / 老镜像上必走)**:**平台 › 租户管理 › 选中租户 › 「可用应用」tab**,
76
+ 勾上你的 App 再保存(计数会从 `4/5` 变 `5/5`),之后租户市场才出现「安装」。
77
+
78
+ ⚠️ 没授予时的症状极具迷惑性:**平台控制台「清单管理」显示已上架**(还能点「转为草稿 / 下架」,
79
+ 看着一切正常),但**租户市场里根本不出现这个 App**——没有报错、没有灰掉的卡片,就是不在列表里。
80
+ 别去查发布状态,那不是病根。
81
+
82
+ ⚠️ `service` 型**永不写授予行**(自动与手动都不写):它在那张表里的勾选语义是**安装 / 卸载**
83
+ (勾上即 `installListing`、取消即卸载),事实源是 `apps.status` 而不是授予表——一个勾选只许一个
84
+ 事实源。
85
+
86
+ ### 2.2 `wired into N installed instance(s)` 的 N 是「改了几个」,不是「对了几个」
87
+
88
+ `wireInitiatorSecret` 对 `secretHash === hash` 的实例直接 `continue` —— **不计数**。所以 **N=0 有两义**:
89
+ ① 还没有任何安装实例;② 所有实例本来就已经是对的。register-app 在 N=0 时打印的
90
+ `(none installed yet — install then re-run…)` **只覆盖第 ① 种**,看到它别当成「没写成」。
91
+
92
+ **判据是比哈希,不是看数字**(三处必须相等):
93
+
94
+ ```
95
+ sha256(<manifest 的 exchangeInitiatorSecret>)
96
+ == 门户 app_secrets 里 prefix='sk_<listingKey>' 且 status='active' 那行的 secret_hash
97
+ == sha256(<你后端 env 的 <PREFIX>_APP_SECRET>)
98
+ ```
99
+
100
+ 「先装再重跑」那一步只对**第一个租户**是必要的:`installListing` 现在会把发起方密钥的哈希
101
+ 随安装布进新实例(EXCHANGE-SECRET-HOLD:有平台保管值用保管值,dev 没有保管值就从既有实例的
102
+ active 行拷哈希)——但「谁都还没布过」的第一个实例仍然只有 `register-app`(与 seed 的
103
+ provisioning 路径)能写。所以装完第一个租户后的那次重跑仍要跑,**之后每次重跑都显示 0、
104
+ 之后装的租户自动布上,那都是正常的**。
105
+
106
+ ## 3. 注册(生产)
107
+
108
+ 生产的清单事实源就是对方仓的 `app.manifest.json`:平台在控制台
109
+ 「应用市场 › 接入新应用」按 key 签发 `xrel_` 令牌(无行先建 draft 占位),对方
110
+ `publish --manifest` 提交,平台在「发布审核」批准 = `registerFromManifest` 建全
111
+ (listing 上架 + SA + /svc + 已装租户对齐)。**不要**把外部 App 登记进 `LISTING_DEFS` ——
112
+ 门户只保留平台侧事实(`EXCHANGE_WIRING` / Caddy 内联行 / 部署行,及作为**种子**的
113
+ `SA_DEFS` 与 scope 常量 —— 特权 scope 已可经 `privilegedServiceScopes` 申请、审批授予),
114
+ `bootstrap:prod` 对外部 key 只自愈 SA 与部署行。**生产没有 manifest 明文密钥这条路**:
115
+ SA 密钥与交换发起方密钥(`<PREFIX>_APP_SECRET`)都由平台在批准时生成、enc:v1 保管、
116
+ 换版时注入容器(EXCHANGE-SECRET-HOLD);明文只回显给审批人一次(供本地联调),轮换走
117
+ 控制台(应用清单 ›「轮换交换密钥」/ 服务账号 ›「轮换密钥」),都顺带排换版。要交接一枚
118
+ **既有**的交换密钥(比如和一盒联调对齐),把值写进门户进程的 `<PREFIX>_APP_SECRET` env
119
+ 再批准一次即可 —— apply 会把它接管为保管值,两侧从此同源,那行 env 之后可删。
120
+
121
+ ⚠️ **secret 一致红线**:平台落库的服务账号 secret 与你镜像 env 里的必须一致。漂移症状 = 自省 401,或「跨应用授权缺失/未开启」(实为 `SECRET_INVALID`)。排查:对你侧 secret 求 sha256 与门户 DB 存的哈希比对。
122
+
123
+ ## 4. 一盒联调流程
124
+
125
+ 分工:平台交**两个门户镜像** + `deploy/` 目录(含 `app-devkit/` 与 `onebox/`)。你交
126
+ ①manifest ②`compose.env`(本机接线:`APP_KEY`=listingKey、`APP_IMAGE`、micro 才需
127
+ `APP_FRONTEND_DIST` **绝对路径**)③你的后端镜像(+ micro 的前端 dist)。
128
+ **不 clone 门户、不改门户代码、不重建门户镜像。**
129
+
130
+ ```
131
+ <registry>/<项目>/one-box:latest # portal runtime → XGENT_IMAGE (~310MB)
132
+ <registry>/<项目>/proxy:latest # caddy proxy → XGENT_PROXY_IMAGE (~68MB)
133
+ ```
134
+
135
+ ⚠️ 三条硬前提,缺一条第 0 步就过不去:① **仓库地址与拉取账号都要问平台团队** —— 仓库不开放
136
+ 匿名拉取,得有一个 **puller 账号**(只读凭证,按团队发放),`docker login <registry>` 用的就是它;
137
+ 凭证别转发给团队外的人、别写进会提交的文件(`portal-dev-setup` skill 把这两样收在一份
138
+ `.xgent-registry.env` 里,照它配即可)。② **这两个调试镜像有 `latest`**(跟着最新一版走,开新项目
139
+ 不用先问 tag);代价是本地已有同名 `latest` 时 compose **不回仓库查**,换版本前先 `docker pull`。
140
+ 要钉住某一版就写 `:v<版本>-<7位sha>`(当前 `v1.1.0-5c1660e`),那种 tag 不可变。③ **一盒只发 `arm64`**(它是给开发机用的调试底座,开发机全是
141
+ Apple Silicon),生产门户走另一条链。无 registry 访问时则要离线 `docker save` tar,`docker load` 即可
142
+ (那条路上镜像的本地 tag 可能叫 `ai-portal-one-box:local` / `xgent-ai-portal-proxy:local`)。
143
+
144
+ ### 4.1 一盒里有什么,以及刻意没有什么
145
+
146
+ 一盒是**调试底座,不是门户**:它按 `deploy/onebox/Dockerfile` 单独构建,只带四个**基础服务 App**——
147
+ `files`(文件管理)· `llm-gateway`(大模型网关)· `git`(Git 服务)· `org`(组织架构)。
148
+ `git` **依赖 `files`**,两者要么一起在 `XGENT_BASE_APPS` 里、要么一起不在。
149
+
150
+ 下面三件「缺失」都是刻意的,**不是环境坏了**,收到这些报错别当配置问题查:
151
+
152
+ - 其余内置 App(spms/sms/qbank/lms/…)的 workspace **已从镜像里删掉** ⇒
153
+ `bun --filter @xgent/spms-server …` 直接报 `no packages matched the filter`;
154
+ - 镜像烘死 `XGENT_ONEBOX=1` ⇒ `bootstrap:prod` 与 deploy-controller **启动即拒**并打印原因;
155
+ - 没有 `ffmpeg` 与 `docker CLI`(合计省 552MB)⇒ `PREVIEW_MEDIA_CONVERTER_URL` 必须**留空**
156
+ (填 `auto` 会让每次转换去 exec 一个不存在的二进制),视频海报/网格缩略图退化成图标,
157
+ 图片/PDF/文本预览不受影响。
158
+
159
+ ### 4.2 起栈之前:躲开本机已占的端口与项目名
160
+
161
+ 一盒**只发布 6 个宿主端口**(reverse-proxy 80/443 → `HTTP_PORT`/`HTTPS_PORT`、postgres 5432 →
162
+ `POSTGRES_PORT`、redis 6379 → `REDIS_PORT`、minio 9000/9001 → `MINIO_PORT`/`MINIO_CONSOLE_PORT`);
163
+ 其余(portal-api 的 3000、各 `<key>-server` 的 8080、你的 app-backend 的 8080)只 `expose`,不占宿主。
164
+ 撞了就在 `compose.env` 里改这几个;改的只是发布口,一盒内部一律走 compose 网络的
165
+ `postgres:5432` / `redis:6379` / `minio:9000`。改了 `HTTP_PORT` 之后门户地址随之变化,下文冒烟里的
166
+ `http://localhost/…` 都要跟着改。
167
+
168
+ ⚠️ 两个必改/必不做:
169
+
170
+ - **`COMPOSE_PROJECT_NAME=xgent-onebox`** —— 模板里写死的是 `xgent`,同机起两套栈时
171
+ compose 会认为它们是同一个项目:容器名冲突、命名卷被共享,症状是「我起了一盒,结果把另一套的
172
+ 容器停了」。项目名固定 `xgent-onebox`、全机只跑一套一盒:已有在跑的一盒时别再起第二套,
173
+ 把你的 App 接进现有那套(见 portal-dev-setup 文首「一套就够」)。
174
+ - **不要**关掉 `local-infra` 让一盒去连你本地那套 PG —— 库名会撞(`xgent-portal` / `xgent-files` …),
175
+ 而 `db:seed:onebox` 是会往里写的,等于拿一盒的种子污染你的本地开发库。
176
+
177
+ ### 4.3 端到端命令(从 repo 根跑;相对路径解析自第一个 `-f` 文件所在目录)
178
+
179
+ ```bash
180
+ # 0) docker login <registry> && docker pull 上面两个 tag(或 docker load tar)+ 你的镜像
181
+ # 1) env 三层:基础模板 + 一盒增量 + 本套件增量
182
+ # cp deploy/compose.env.example deploy/compose.env
183
+ # cat deploy/onebox/compose.env.onebox.example >> deploy/compose.env # ★ 一盒必需
184
+ # cat deploy/app-devkit/compose.env.app.example >> deploy/compose.env
185
+ # 填 XGENT_IMAGE / XGENT_PROXY_IMAGE / APP_KEY / APP_IMAGE /(micro)APP_FRONTEND_DIST
186
+ # + 你后端读的 SA 密钥与 DSN(与 manifest 的 serviceAccount.secret 等值)+ 强随机门户密钥
187
+ # 2) 起基础设施: --profile local-infra up -d postgres redis minio
188
+ # 3) 门户迁移 + 基线 seed:
189
+ # run --rm portal-api bun run db:migrate
190
+ # run --rm portal-api bun run db:seed:onebox # ★ 不是 db:seed
191
+ # 4) 注册: run --rm -v "$(pwd)/deploy/app-devkit/manifests:/devkit:ro" \
192
+ # portal-api bun run register-app /devkit/<你的>.manifest.json
193
+ # 5) 起门户三件套 + 你的后端(网络别名 <key>-server:8080):
194
+ # -f docker-compose.yml \
195
+ # -f onebox/docker-compose.onebox.yml # ★ 一盒必须叠这一层
196
+ # -f app-devkit/docker-compose.app-dev.yml [micro 加 app-frontend.yml]
197
+ # --profile local-infra --profile app-external up -d reverse-proxy portal-api app-backend
198
+ # 5b) 按需起基础 App 后端(同一个镜像,compose command 选跑哪个)+ 各自库迁移:
199
+ # --profile app-files --profile app-llm-gateway --profile app-git --profile app-org up -d
200
+ # run --rm portal-api bun run db:files:migrate # 同理 db:llm-gateway / db:git / db:org
201
+ # ⚠️ 这批迁移要跑在 db:seed:onebox 之前 —— 种子会替 deploy-controller 跑各 App 的逐租户基线
202
+ # 6) 你自己的库迁移:跑你镜像的迁移 argv(生产由门户经 migrateArgs 自动跑,这里手动跑同一条)
203
+ # run --rm --env-file <同一份> <你的镜像> --role migrate
204
+ # 每租户 bootstrap(若你的表 FK 自己的 tenants):门户目前没有钩子,本地手动建行
205
+ ```
206
+
207
+ ⚠️ **第 3 步必须是 `db:seed:onebox`**:`db:seed` 会串起十几个 App 的种子链(qbank/lms/exam/task/…),
208
+ 而它们的 workspace 不在一盒镜像里 —— **必失败**。`db:seed:onebox` 只种 `XGENT_APP_CATALOG` 里的四个基础 App。
209
+
210
+ ⚠️ **第 4 步要跑在起反代之前**:注册会往 `caddy-svc-allow` 卷写 `<key>.map`,反代启动时 `import` 才读得到。
211
+
212
+ ⚠️ **依赖 `files` 的 App 别忘了 5b**:`files` 已在镜像里、`/svc/files` 已放行、市场安装会连带补装它,
213
+ 但**后端进程不起来**读文件就是 502/401。`FILES_SA_CLIENT_SECRET` 必须与 `db:seed:onebox` 种的 SA secret
214
+ 等值,否则自省 401。
215
+
216
+ 细节(含 App 自带基础设施如向量库 sidecar、把后端跑在宿主上保留热重载的 socat 绕法)见交付包内
217
+ `deploy/app-devkit/README.md`。
218
+
219
+ ## 5. 冒烟
220
+
221
+ 打开 `http://localhost/` → 登录页的「本地开发账号」按钮(没有就直接开 `/auth/dev/start`)→ 选 `rockie`(租户 admin + 平台管理员)。
222
+
223
+ **第 0 步:确认租户已被授予**(否则下面第 1 步无从点起)。新版 `register-app` 在 dev 下会自动授予并
224
+ 打印 `租户可用应用: …`;没看到那一行(老镜像)就去 平台 › 租户管理 › 选中租户 › 「可用应用」勾上保存(§2.1)。
225
+
226
+ ⚠️ `db:seed:onebox` 只种两个 dev 账号:`rockie@xgent.ai`(admin)与 `liming@xgent.ai`(普通成员)——
227
+ **用普通成员再走一遍**。ACL member 基线没到位的问题(`defaultForMember` 没种进 member 角色)
228
+ 只在非管理员身上才现形,管理员的 `bypass` 会把它整个盖住。
229
+
230
+ - **micro**:应用市场安装(连带补装依赖)→ 应用中心打开 → iframe 加载 `/apps/<key>/`、`sdk.ready()` 握手 → `sdk.callService("<key>", ...)` 通 → 跨应用读数据首次弹交换授权页 → 切租户看不到上一租户数据。
231
+ - **service**(无 UI 走 curl):
232
+
233
+ ```bash
234
+ curl http://localhost/svc/<key>/health # 平铺 {"service":"<key>","db":"ok"} 或信封 {"ok":true,"data":{"db":true}}
235
+ curl -X POST http://localhost/svc/<key>/v1/... # 缺/错 token → 401/403(四道闸生效)
236
+ # 拿一个 aud=<key> 的 TDT(经交换,或 dev 自助 /api/tokens/authorize → /oauth/token)→ 200 信封
237
+ ```
238
+
239
+ **micro / service 的健康接口都按 [平台健康判据](health-contract.md) 验证**:运行 skill 自带 `scripts/verify-health.ts`,同时检查 HTTP 与信封的 db 判据;首次接入/修改健康接口还要在隔离环境验证必要依赖故障的 `not-ready`。
240
+
241
+ ## 6. 排查速查
242
+
243
+ | 症状 | 病根 |
244
+ | --- | --- |
245
+ | **租户市场里看不到你的 App**(控制台却显示已上架) | **该租户没被授予**(§2.1)。三种成因:① 一盒镜像早于自动授予那次改动(输出里没有 `租户可用应用:` 行);② 该租户是注册之后才建的;③ 走的是生产路径(本就不自动)。补法:平台 › 租户管理 › 租户 › 「可用应用」勾上保存。**不是发布状态问题** |
246
+ | 安装报 `LISTING_NOT_GRANTED` | 同上(这是同一道闸的显式报错形态) |
247
+ | `wired into 0 installed instance(s)` | **未必是没写成**:0 = 本次没有改动,含「本来就是对的」。按 §2.2 比哈希判定 |
248
+ | `/svc/<key>` 404 | 白名单 `.map` 没写成,或反代先于 register-app 起(重启反代/重跑注册) |
249
+ | `/svc/<key>` 502 | 后端没起 / 没听 8080 / 网络别名 `<key>-server` 没命中 |
250
+ | `/health` 能访问,但健康检查失败 | HTTP 非 2xx 或信封未满足 `ok:true + data.db:true`;平铺与合法信封都支持,详见 [health-contract.md](health-contract.md)。部署超时还需看启动日志与迁移,不能仅凭包装格式定因 |
251
+ | 有效 TDT 被判 `INVALID_TOKEN` | 先检查自省 ok:true 和 data 对象,再校验 data;失败信封/缺 data 为 503,不能回退到顶层 |
252
+ | register-app 报 scope `VALIDATION_FAILED` | 声明了别人的 scope 但没列进 `exchangeTargets` |
253
+ | 发起交换 401 | `exchangeInitiatorSecret` 未写进已安装实例(先安装再重跑 register-app)或 secret 漂移 |
254
+ | 受门路由 503 | 门户三变量(自省地址/SA id/secret)配置不全 |
255
+ | `db:seed`/`bun --filter @xgent/<别的 App>` 报 `no packages matched the filter` | **刻意的**:一盒只带四个基础 App,其余 workspace 已删。seed 用 `db:seed:onebox`(§4.3) |
256
+ | 读写文件 502 / 401 | `files` 后端没起(`--profile app-files` + `db:files:migrate`);401 多半是 `FILES_SA_CLIENT_SECRET` 与种子里的 SA secret 不等值 |
257
+ | `git` 连不上本机 Gitea/GitHub | 一盒是 `NODE_ENV=production`,SSRF 守卫默认拒环回与私网 —— 把目标 hostname 显式列进 `GIT_ALLOWED_HOSTS` |
258
+ | 视频海报/网格缩略图不出 | 一盒没装 ffmpeg,`PREVIEW_MEDIA_CONVERTER_URL` 应留空(§4.1);其余预览不受影响 |
259
+ | 起了一盒把另一套栈的容器停了 | `COMPOSE_PROJECT_NAME` 没改(§4.2) |
@@ -0,0 +1,22 @@
1
+ // 部署、平台信息页、巡检共用此判据。skill 带同源副本,export-skills.sh 校验逐字一致。
2
+ export type HealthVerdictKind = "healthy" | "degraded" | "unhealthy";
3
+
4
+ /** 先看 HTTP,再按顶层是否含 ok 分流;不按内建/外部 App 区分。
5
+ * 信封必须 ok===true 且 data.db===true;非信封沿用任意 2xx 通过的兼容规则。
6
+ * service/redis/time 不参与判定,非信封的依赖故障必须由非 2xx 状态表达。 */
7
+ export function healthVerdict(
8
+ res: { ok: boolean; status: number },
9
+ body: unknown,
10
+ ): { verdict: HealthVerdictKind; detail: string | null } {
11
+ if (!res.ok) return { verdict: "unhealthy", detail: `http ${res.status}` };
12
+ const isEnvelope = body !== null && typeof body === "object" && "ok" in (body as object);
13
+ if (!isEnvelope) return { verdict: "healthy", detail: null };
14
+ const b = body as { ok?: unknown; data?: { db?: unknown } };
15
+ if (b.ok !== true) return { verdict: "degraded", detail: "ok=false" };
16
+ if (b.data?.db === true) return { verdict: "healthy", detail: null };
17
+ return { verdict: "degraded", detail: b.data?.db === false ? "db=false" : "db=unknown" };
18
+ }
19
+
20
+ export function isHealthy(v: { verdict: HealthVerdictKind }): boolean {
21
+ return v.verdict === "healthy";
22
+ }
@@ -0,0 +1,27 @@
1
+ // 独立运行,无需门户源码或凭证;判据与平台运行时同源。
2
+ // bun verify-health.ts <health-url> <listingKey> [ready|not-ready]
3
+ import { healthVerdict, isHealthy } from "./health-verdict";
4
+
5
+ const args = Bun.argv.slice(2);
6
+ const [url, listingKey, expected = "ready"] = args;
7
+ if (args.length < 2 || args.length > 3 || !url || !listingKey || !["ready", "not-ready"].includes(expected)) {
8
+ console.error("用法:bun verify-health.ts <health-url> <listingKey> [ready|not-ready]");
9
+ process.exit(2);
10
+ }
11
+
12
+ try {
13
+ // 与 deploy-controller / health:deployed 相同:5 秒超时,JSON 解析失败按 null 判定。
14
+ const res = await fetch(url, { signal: AbortSignal.timeout(5000) })
15
+ .catch(() => { throw new Error("健康接口无法连接或探测超时"); });
16
+ const body = await res.json().catch(() => null);
17
+ const verdict = healthVerdict(res, body);
18
+ const up = isHealthy(verdict);
19
+ if (up !== (expected === "ready"))
20
+ throw new Error(`期望 ${expected},实际 ${verdict.verdict}${verdict.detail ? ` (${verdict.detail})` : ""}`);
21
+ console.log(`[health-contract] PASS ${listingKey}: ${verdict.verdict}, HTTP ${res.status}`);
22
+ } catch (error) {
23
+ // not-ready 只验证收到了明确的失败响应;连接失败不算故障分支已正确实现。
24
+ // 不打印服务响应体,它可能错误地包含连接串或其他秘密。
25
+ console.error(`[health-contract] FAIL: ${error instanceof Error ? error.message : "探测失败"}`);
26
+ process.exit(1);
27
+ }