@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,139 @@
1
+ ---
2
+ name: portal-logging
3
+ description: '把一个 App 的日志/遥测接进门户的「日志与监控」服务:采集器布线(容器 stdout / 文件 tail / 应用内直打)、写入身份(服务账号换令牌 或 长期访问密钥)、`observability.ingest` scope、`/svc/observability/v1/ingest/…` 写入面、`app_你的key_流名` 的流命名与跨 App 统一的日志字段口径。凡任务涉及「让我的服务的日志能在日志与监控里看到」「接采集器 / fluent-bit / docker 日志驱动」「日志写入 401 / 403 / scope 为空」「写进去了但界面查不到 / stream not found」「一次报错被拆成几十条 / 分不出哪条是错误」时,务必先用本 skill 再动手——即使用户只说「把日志接上」。Use when wiring an app''s logs or telemetry into the portal observability service: collector setup, ingest credentials and scope, stream naming, log field conventions, and the classic failures (empty scope, 403 on write, 401 on query, records that never show up).'
4
+ ---
5
+
6
+ # portal-logging · 把 App 的日志接进「日志与监控」
7
+
8
+ 一条链路四段,**两种身份**:
9
+
10
+ ```
11
+ 你的进程 → 采集器 → POST /svc/observability/v1/ingest/<stream> → 在「日志与监控」App 里看
12
+ (产生) (搬运) ↑ 服务身份(机器的钥匙) ↑ 用户身份(人的票)
13
+ ```
14
+
15
+ 两种身份不能互换,这是整条链路最常见的困惑来源:**采集器只能写、不能查;人只能查、不能写**。拿服务密钥去查会得到 401,那不是配置错。
16
+
17
+ > **路径约定**:本 skill 里的 `apps/…` `deploy/…` `docs/…` 都在**门户仓**。在你自己的 App repo 里它们不存在——它们标注的是「门户侧的事实在哪」,不是让你去打开的文件。你需要的一切在本 skill 的 `references/` 与 `scripts/`(自包含,路径相对于本 `SKILL.md` 所在目录)。运行脚本前,在 App repo 根目录按实际加载位置设置 `SKILL_DIR="<本 SKILL.md 所在目录>"`。
18
+
19
+ ## 按任务读
20
+
21
+ | 任务 | 读 |
22
+ | --- | --- |
23
+ | 配采集器(容器 stdout / 文件 tail / 应用内直打),含多行合并与级别判定 | [references/collectors.md](references/collectors.md) |
24
+ | 端点、凭据、请求/响应形状、查询 API、错误码矩阵、计量 | [references/contract.md](references/contract.md) |
25
+ | 只想先打通一条,验证链路是活的 | `"$SKILL_DIR/scripts/smoke-ingest.sh"`(改环境变量直接跑) |
26
+
27
+ ## 0. 先判断:你要接的真的是「日志」吗
28
+
29
+ 日志流是**给人排障看的时间序列文本**。下面这些各有专用面,塞进日志流会同时失去两边的能力:
30
+
31
+ - **审计**(谁在什么时候改了什么,要可追溯、不可篡改、要留存)→ 门户审计面(`audit.write`),不是日志。
32
+ - **用量/计费**(要精确、要对账)→ 平台计量面。日志会被采样、会过期。
33
+ - **给用户看的消息**(提醒、待办、通知)→ 门户通知域。
34
+ - **指标与链路**(数值时间序列 / trace)→ 同一个服务的 OTLP 入口,形状与日志不同,见 contract.md。
35
+
36
+ 判据:这条记录**丢了会不会有人要赔钱或说不清责任**。会 → 不是日志。
37
+
38
+ ## 1. 三个前提(不成立时,每一步都会以「看起来成功」的方式失败)
39
+
40
+ 1. **平台把「日志与监控」登记为平台基础服务应用,且默认授予里含 `observability.ingest`。**
41
+ 这是平台管理员在门户控制台做的一次登记。没有它:你换令牌拿到 HTTP 200、`scope` 字段却是**空的**,直到第一次写入才 403。——第一天接日志的团队九成栽在这里,先查它。
42
+ 2. **你的 App 在目标租户已安装且可用。** 令牌里的 `azp` 绑着你的 App key,签发时会检查「这个租户装没装你」。没装 ⇒ `APP_NOT_INSTALLED`。语义是对的:你没在这个租户里跑,就不该有这个租户的日志。
43
+ 3. **你有自己的服务账号凭据。** 平台部署你的服务时注入 `<PREFIX>_SA_CLIENT_ID` / `<PREFIX>_SA_CLIENT_SECRET`(`<PREFIX>` = 你的 appKey 大写、`-` 换 `_`),另有 `API_BASE_URL`(门户内部源,换令牌用)与 `PORTAL_BASE_URL`(门户公开源,`/svc/...` 用)。
44
+ 与门户同仓的后端没有「平台注入」这一步,同名的键在部署环境的 env 文件里——**键名与用法完全一样**,下文不再分叉。
45
+
46
+ **不要为日志新建一套密钥**,也**不要**把 `observability.ingest` 写进自己 manifest 的 `serviceScopes`:那是别人命名空间的 scope,写进去反而要求你把对方列进依赖;这条 scope 由平台在**签发那一刻**并进来,manifest 一个字都不用改。
47
+
48
+ ## 2. 选写入身份
49
+
50
+ | | 短期服务态令牌 | 长期访问密钥(`xsak_` 开头) |
51
+ | --- | --- | --- |
52
+ | 怎么拿 | `POST {API_BASE_URL}/api/tokens/service`,HTTP Basic = `client_id:secret`,body `grant_type=client_credentials` + `tenant_id` + `scope` | 门户控制台 › 服务账号 › 访问密钥(平台管理员签;租户自助建的服务账号同理) |
53
+ | 有效期 | 分钟级,要缓存 + 到期前续 | 可无期限 |
54
+ | 谁用 | **你的应用代码**自己打点 | **采集器进程**(fluent-bit 这类不会自己换令牌的) |
55
+ | 代价 | 每次要一次 HTTP | 明文长期存在盘上,泄漏面大 ⇒ 只给 `observability.ingest` 这一条 scope,别多给 |
56
+
57
+ 拿短期令牌时把它缓存到 `expires_in - 10s`,别每条日志换一次令牌——那是把日志量乘进了门户的负载。
58
+
59
+ ## 3. 写入
60
+
61
+ ```
62
+ POST {PORTAL_BASE_URL}/svc/observability/v1/ingest/<stream>
63
+ Authorization: Bearer <服务令牌 或 xsak_…>
64
+ Content-Type: application/json
65
+
66
+ [ {…记录1…}, {…记录2…} ] ← 一次一批,别一条一个请求
67
+ ```
68
+
69
+ **成功判据要看两层**:HTTP 200 **且** 响应体 `code:200` 且 `status[]` 里 `failed:0`。只看 HTTP 状态码会把「收下了但没落库」当成功——这正是「写入一直 200、界面永远查不到」的来源。
70
+
71
+ ⚠️ **采集器代发(形态 A/B)时你根本看不到这个响应**:采集器只在自己的日志里留一行 `HTTP status=200`,`failed>0` 那种「收下了没落库」它不会告诉你,401/403 也只是按重试上限丢掉——**采集器不报错 ≠ 接通了**。所以这两种形态的验收落在 §8 冒烟那一条 curl(那里你拿得到响应体)加上界面真的搜到;排障时再临时打开采集器的响应打印(见 collectors.md)。
72
+
73
+ **流名**:你写 `<stream>`,实际落在 `app_<你的 appKey>_<stream>`——前缀由令牌里的 `azp` 决定,你写不进别人的命名空间,也**别在 `<stream>` 里再重复一遍自己的 key**(会得到 `app_foo_foo_console`)。一个 App 按用途分流即可:`console`(进程标准输出)、`access`、`job`。
74
+
75
+ ## 4. 字段口径(跨 App 一致,界面和排障才有共同语言)
76
+
77
+ | 字段 | 必要性 | 说明 |
78
+ | --- | --- | --- |
79
+ | `message` | 必备 | 正文,一条一行 |
80
+ | `level` | 强烈建议 | `info` / `warn` / `error`;**产生方给的最准**,采集器只能猜 |
81
+ | `service` | 强烈建议 | 进程/子服务名,一个 App 有多个进程时靠它分 |
82
+ | `host` | 建议 | 实例/主机名,多副本时靠它分 |
83
+ | `fd` | 采集器填 | `stdout` / `stderr` |
84
+
85
+ **时间**:落库的时间轴是**到达时间**,日志自带的时间只是一个普通字段。要让时间轴等于事件时间,就在记录里带上 `_timestamp`(微秒 epoch),并**先用一条冒烟记录验证**这个版本认不认——别假设。
86
+
87
+ **级别**:如果你的日志是文本行、由采集器搬运,采集器只能靠 `stderr` 和关键词猜,而 `console.warn` 一类在多数运行时也走 stderr ⇒ 例行 warn 会整批被判成 error。解法是**产生方把级别写进正文**(例如正文尾部的 JSON 里 `"lvl":"error"`),采集器优先取它。判定次序与可直接抄的实现见 collectors.md。
88
+
89
+ **永远不要写进日志**:令牌 / 密钥 / 密码、完整 query string(授权码与令牌常在里面)、用户个人信息与租户业务正文、大 blob。排障要的是**能定位的 ID**,不是内容本身——日志会被转发、留存、被平台管理员看到。
90
+
91
+ ## 5. 选采集形态
92
+
93
+ | 形态 | 适合 | 代价 |
94
+ | --- | --- | --- |
95
+ | A 容器 stdout → 日志驱动 → 采集器 | 容器化交付、应用零改动 | 多一个采集器进程 |
96
+ | B 采集器 tail 日志文件 | 进程管理器把 stdout 写成文件的部署 | 要处理轮转 |
97
+ | C 应用内直接批量 POST | 想要结构化字段与精确级别、日志量小 | 自己管批量/重试/背压 |
98
+
99
+ 共性的四条(三种形态都适用,任一漏掉都会在生产上现形):**批量发**、**异步发**(不许在请求热路径上同步等远端)、**失败丢弃而不是无限重试**(日志不值得拖垮主流程)、**多行合并**(一个栈是一条记录,不是四十条)。
100
+
101
+ ⚠️ 多行合并按 tag/流分缓冲。**多个日志源共用一个 tag 时,A 源的栈会把 B 源随后那行吸进同一条记录**——每个源(每个文件 / 每个容器 × stdout|stderr)一个 tag。
102
+
103
+ 配置照抄 [references/collectors.md](references/collectors.md)。
104
+
105
+ ## 6. 查
106
+
107
+ 正常路径是人打开「日志与监控」App 查(需要 `observability.read`,由租户管理员同意授权)。程序化查询要**用户身份的令牌**,服务密钥打查询面是 `401`——先确认你是不是拿错了钥匙,再怀疑数据没进去。
108
+
109
+ ## 7. 排错矩阵
110
+
111
+ | 症状 | 多半是 | 动作 |
112
+ | --- | --- | --- |
113
+ | 换令牌 200,但响应里 `scope` 是空的 | 平台没登记基础服务应用 / 默认授予里没有 ingest | 找平台管理员登记,§1.1 |
114
+ | 写入 `403` | 身份类型不对(拿用户票写)或 scope 里没有 ingest | 用服务身份;查签出来的 scope |
115
+ | 写入 `401` | 凭证缺失 / 伪造 / 已撤销 / 已过期 | 重签;轮换过的旧密钥立刻失效 |
116
+ | 换令牌报 `APP_NOT_INSTALLED` | 你的 App 没装在这个租户 | 这是设计,不是 bug;换租户或先装 |
117
+ | 写入 200,但查不到 | ① 只看了 HTTP 没看 `status[]`;② 流名前缀猜错(是 `app_<key>_<stream>`);③ 时间范围——时间轴是**到达时间** | 按序查这三条 |
118
+ | 查询报 `stream not found` | 这个流一条都没写进去过 | 回到上一行 |
119
+ | 查询 401、但写入 200 | 拿服务密钥查 | 换用户身份 |
120
+ | 只看到零星几条 | 时间范围太窄;或你的进程本来就几乎不打日志 | 先确认源头有没有行 |
121
+ | 一次报错被拆成几十条 | 采集器没配多行合并 | collectors.md |
122
+ | 一条记录里混了两个进程的行 | 多个源共用一个 tag | 每源一个 tag |
123
+ | 界面里只有别的 App 的流 | 你的令牌 `azp` 不是你以为的那个 | 自省一下令牌 |
124
+
125
+ ## 8. 冒烟验收(接完逐条走一遍,都过才算接上)
126
+
127
+ 1. 换出来的令牌 `scope` **确实含** `observability.ingest`(不是空)。
128
+ 2. 写一条带标记的记录,响应 HTTP 200 且 `status[]` 里 `failed:0`。
129
+ 3. 在「日志与监控」App 里按这个标记**搜到了**它,流名是 `app_<你的 key>_<stream>`。
130
+ 4. 故意打一个多行栈,界面里它是**一条**记录。
131
+ 5. 打一条 error 和一条 info,界面里级别**分得开**。
132
+ 6. 把采集器停掉再起来,不重放历史、也不丢新行。
133
+
134
+ ## 别做的事
135
+
136
+ - 别为日志自建一套网关/存储/密钥体系——这条链路已经存在,重造的那份不会有人运维。
137
+ - 别把审计、用量、通知塞进日志流(§0)。
138
+ - 别在生产刷 debug 级别:写入是**计量项**(按字节),也会把有用的行淹掉。
139
+ - 别把别的 App 的日志代写进自己的流:`azp` 决定前缀,代写要么被拒,要么污染自己的命名空间。
@@ -0,0 +1,285 @@
1
+ # 采集器:三种形态 + 可直接抄的配置
2
+
3
+ 三种形态写入面完全一样([contract.md](contract.md)),差别只在「从哪儿把行读出来」。下面的 fluent-bit 配置在真镜像上跑通过,**照抄再改路径/环境变量**比自己重写省一整天——尤其是多行合并那一段,它有两个静默坑。
4
+
5
+ - [A 容器 stdout → 日志驱动 → 采集器](#a-容器-stdout)
6
+ - [B 采集器 tail 日志文件](#b-文件-tail)
7
+ - [C 应用内直接批量 POST](#c-应用内直接打点)
8
+ - [采集器怎么知道自己写成功了](#采集器怎么知道自己写成功了)
9
+ - [级别判定(两种形态共用)](#级别判定)
10
+ - [多行合并的两个坑](#多行合并的两个坑)
11
+
12
+ ---
13
+
14
+ ## A 容器 stdout
15
+
16
+ 应用零改动:容器的 stdout/stderr 由 docker 的日志驱动转给采集器。适合容器化交付。
17
+
18
+ ```yaml
19
+ # 你的服务:把日志转给采集器(fluentd-async 让采集器没起来时容器照常启动)
20
+ services:
21
+ my-service:
22
+ logging:
23
+ driver: fluentd
24
+ options:
25
+ fluentd-address: 127.0.0.1:24224
26
+ fluentd-async: "true"
27
+ fluentd-async-reconnect-interval: 5s
28
+ tag: my-service # ⚠️ 不要带点,见下面 rewrite_tag 那段
29
+
30
+ log-collector:
31
+ image: fluent/fluent-bit:3.2.10
32
+ restart: unless-stopped
33
+ environment:
34
+ OBS_HOST: ${PORTAL_HOST} # 门户公开源的主机名(不带 scheme)
35
+ OBS_STREAM: console
36
+ OBS_SOURCE_HOST: ${HOSTNAME}
37
+ env_file: [./collector.env] # 只放 OBS_ACCESS_KEY,权限 600
38
+ ports: ["127.0.0.1:24224:24224"]
39
+ volumes:
40
+ - ./fluent-bit:/fluent-bit/etc:ro
41
+ - collector-state:/var/lib/fluent-bit
42
+ volumes: { collector-state: {} }
43
+ ```
44
+
45
+ ```ini
46
+ # fluent-bit/fluent-bit.conf
47
+ [SERVICE]
48
+ Flush 5
49
+ Grace 5
50
+ Log_Level info
51
+ Parsers_File parsers.conf
52
+ storage.path /var/lib/fluent-bit/storage
53
+ storage.sync normal
54
+ HTTP_Server Off
55
+
56
+ [INPUT]
57
+ Name forward
58
+ Listen 0.0.0.0
59
+ Port 24224
60
+ storage.type filesystem
61
+
62
+ # ⚠️ docker 的日志驱动给 stdout 与 stderr 【同一个 tag】,而多行合并按 tag 缓冲:
63
+ # 不先拆开,stderr 那条栈的续行会被接到上一条 stdout 记录屁股后面(实测如此)。
64
+ # Match_Regex 挑「还没拆过的 tag」——日志驱动的 tag 不含点、拆出来的含点,所以重新入链的
65
+ # 记录不会再次命中这条规则(否则就是死循环)。新接进来的容器 tag 也不能带点。
66
+ [FILTER]
67
+ Name rewrite_tag
68
+ Match_Regex ^[^.]+$
69
+ Rule $source ^(stdout|stderr)$ console.$TAG.$1 false
70
+ Emitter_Name console_split
71
+
72
+ [FILTER]
73
+ Name multiline
74
+ Match console.*
75
+ multiline.key_content log
76
+ multiline.parser js_stack
77
+
78
+ [FILTER]
79
+ Name lua
80
+ Match console.*
81
+ script enrich.lua
82
+ call enrich
83
+
84
+ [OUTPUT]
85
+ Name http
86
+ Match console.*
87
+ Host ${OBS_HOST}
88
+ Port 443
89
+ tls On
90
+ tls.verify On
91
+ URI /svc/observability/v1/ingest/${OBS_STREAM}
92
+ Format json
93
+ Json_date_key timestamp
94
+ Json_date_format iso8601
95
+ Header Authorization Bearer ${OBS_ACCESS_KEY}
96
+ Header Content-Type application/json
97
+ Retry_Limit 8
98
+ Log_response_payload Off
99
+ storage.total_limit_size 64M
100
+ ```
101
+
102
+ ```lua
103
+ -- fluent-bit/enrich.lua —— docker 驱动的记录 {log, source, container_name} → 统一字段
104
+ local host = os.getenv("OBS_SOURCE_HOST") or "unknown"
105
+
106
+ function enrich(tag, ts, record)
107
+ local name = string.gsub(record["container_name"] or tag or "unknown", "^/", "")
108
+ record["service"] = string.match(name, "^[%w]+%-(.-)%-%d+$") or name -- compose 容器名 → 服务名
109
+ record["fd"] = record["source"] or "stdout"
110
+ record["host"] = host
111
+ record["message"] = record["log"]
112
+ record["level"] = level_of(record["fd"], record["log"] or "") -- 见「级别判定」
113
+ record["log"] = nil; record["source"] = nil
114
+ record["container_id"] = nil; record["container_name"] = nil
115
+ return 2, ts, record
116
+ end
117
+ ```
118
+
119
+ ---
120
+
121
+ ## B 文件 tail
122
+
123
+ 进程管理器把 stdout 写成文件时用这条。与 A 的差别只在 INPUT 与 service 的来源。
124
+
125
+ ```ini
126
+ [INPUT]
127
+ Name tail
128
+ # ⚠️ 每个文件一个 tag(`*` 展开成文件路径):多行合并按 tag 缓冲,
129
+ # 多个文件共用一个 tag 时 A 进程的栈会把 B 进程随后那行吸进来。
130
+ Tag console.*
131
+ Path /logs/app.out.log,/logs/app.err.log
132
+ Path_Key file
133
+ Parser line
134
+ DB /var/lib/fluent-bit/tail.db
135
+ Refresh_Interval 10
136
+ Rotate_Wait 30
137
+ Skip_Long_Lines On
138
+ storage.type filesystem
139
+ # Read_from_Head 默认 Off:首次启动不回灌历史几万行。要补历史再临时打开。
140
+ ```
141
+
142
+ ```lua
143
+ -- 从被跟随的文件名派生 service / fd:/logs/<service>.<out|err>.log
144
+ function enrich(tag, ts, record)
145
+ local service, fd = string.match(record["file"] or "", "([%w%-]+)%.(%a+)%.log$")
146
+ record["service"] = service or "unknown"
147
+ record["fd"] = (fd == "err") and "stderr" or "stdout"
148
+ record["host"] = os.getenv("OBS_SOURCE_HOST") or "unknown"
149
+ record["level"] = level_of(record["fd"], record["message"] or "")
150
+ record["file"] = nil
151
+ return 2, ts, record
152
+ end
153
+ ```
154
+
155
+ 如果进程管理器给每行加了时间戳前缀(很多都会),用一个正则 parser 把它切掉,正文才干净:
156
+
157
+ ```ini
158
+ [PARSER]
159
+ Name line
160
+ Format regex
161
+ Regex ^(?<time>\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}): (?<message>.*)$
162
+ Time_Key time
163
+ Time_Format %Y-%m-%dT%H:%M:%S
164
+ Time_Offset +0800 # 前缀不带时区就得固定一个,按机器时区填
165
+ Time_Keep Off
166
+ # ⚠️ 空行也要带上空的 message:缺了这个键,多行合并器认不出它是续行、直接放行,
167
+ # 一条错误转储会被中间那个空行劈成两半,后半截还丢了 Path_Key ⇒ service 变成 unknown。
168
+ Skip_Empty_Values Off
169
+ ```
170
+
171
+ ---
172
+
173
+ ## C 应用内直接打点
174
+
175
+ 日志量小、想要结构化字段与精确级别时最省事。要点:**批量、异步、丢得起**。
176
+
177
+ ```ts
178
+ const BUF: Record<string, unknown>[] = [];
179
+
180
+ export function log(level: "info" | "warn" | "error", message: string, ctx: Record<string, unknown> = {}) {
181
+ BUF.push({ level, message, service: SERVICE, host: HOST, ...ctx });
182
+ if (BUF.length >= 200) void flush(); // 满一批就走
183
+ }
184
+
185
+ async function flush() {
186
+ if (!BUF.length) return;
187
+ const batch = BUF.splice(0, BUF.length); // 先摘出来:flush 期间新来的行不阻塞
188
+ try {
189
+ const token = await serviceToken(); // 缓存到 expires_in - 10s,见 contract.md §2
190
+ const r = await fetch(`${PORTAL_BASE_URL}/svc/observability/v1/ingest/console`, {
191
+ method: "POST",
192
+ headers: { authorization: `Bearer ${token}`, "content-type": "application/json" },
193
+ body: JSON.stringify(batch),
194
+ signal: AbortSignal.timeout(5000),
195
+ });
196
+ // 只看 HTTP 200 会把「收下了但没落库」当成功
197
+ const body = await r.json().catch(() => null);
198
+ if (!r.ok || body?.code !== 200) console.error("[log] ingest rejected", r.status, body?.status);
199
+ } catch (e) {
200
+ // 丢弃。日志不值得把主流程拖垮,也不值得无限重试堆成内存泄漏。
201
+ console.error("[log] ingest failed", (e as Error).message);
202
+ }
203
+ }
204
+
205
+ setInterval(() => void flush(), 5000).unref(); // 定时兜底
206
+ process.on("beforeExit", () => void flush()); // 退出前冲一次
207
+ ```
208
+
209
+ **不要**在请求处理路径上 `await flush()`:远端抖一下,你的接口就跟着抖。
210
+
211
+ ---
212
+
213
+ ## 采集器怎么知道自己写成功了
214
+
215
+ 这是形态 A/B 最容易漏的一环:**写入的响应体不在你眼前**。fluent-bit 只会在自己的日志里留一行
216
+
217
+ ```
218
+ [2026-01-01 00:00:00] [ info] [output:http:http.0] <host>:443, HTTP status=200
219
+ ```
220
+
221
+ 而「HTTP 200 但 `status[].failed>0`」——记录被判拒、根本没落库——在这行里**看起来一模一样**。401/403 也只是按 `Retry_Limit` 重试几次后丢弃:日志静静地没了,采集器一切正常。
222
+
223
+ 所以:
224
+
225
+ - **验收不要看采集器的日志**,看冒烟那一条 curl(你拿得到响应体,能判两层)+ 界面真的搜到。`scripts/smoke-ingest.sh` 就是干这个的。
226
+ - **排障时**临时把响应打印打开,看完再关掉(响应体会一直进采集器日志):
227
+
228
+ ```ini
229
+ [OUTPUT]
230
+ Log_response_payload On
231
+ ```
232
+
233
+ - **长期监控**:采集器进程本身要有人看(重启、`[error]` 行、积压)。日志链路断了不会有人来告诉你——它的症状就是「最近怎么没日志了」,而那通常是很久以后才有人注意到。
234
+
235
+ ## 级别判定
236
+
237
+ 产生方给的级别最准。搬运方只能猜,猜的次序要**先精确后启发式**,否则会把例行 warn 整批判成 error:
238
+
239
+ ```lua
240
+ -- ① 正文 JSON 里的 "lvl"/"level" —— 产生方给的,直接用
241
+ -- ② warn 标记 —— 必须排在 fd 之前:console.warn 一类也走 stderr
242
+ -- ③ fd == stderr ⇒ error
243
+ -- ④ stdout 上的错误标记 —— 第三方库(连接失败那种)并不按 fd 分级
244
+ -- ⑤ 其余 info
245
+ function level_of(fd, msg)
246
+ local lvl = msg:match('"lvl"%s*:%s*"(%a+)"') or msg:match('"level"%s*:%s*"(%a+)"')
247
+ if lvl == "error" or lvl == "warn" or lvl == "info" or lvl == "debug" then return lvl end
248
+ local head = msg:match("^[^{]*") or msg -- 只看 JSON 之前那截,见下
249
+ if head:match("⚠") or head:match("[Ww]arn") or head:match("WARN") then return "warn" end
250
+ if fd == "stderr" then return "error" end
251
+ if head:match("✗") or head:match("❌") or head:match("[Ee]rror") or head:match("ERROR")
252
+ or head:match("[Ff]ail") or head:match("FAIL") or head:match("失败") or head:match("异常") then return "error" end
253
+ if msg:match('"error"%s*:%s*"') then return "error" end
254
+ return "info"
255
+ end
256
+ ```
257
+
258
+ ④ 只看 `{` 之前那一截,是因为正文里的 JSON 常含 `delivery_failed` 这类**字段名/事件名**,整条搜关键词会把一条 info 判成 error;JSON 部分只认 `"error":"…"`(有内容的错误字段)。
259
+
260
+ 产生方那边对应地做一件事就够:打错误行时把级别写进正文的 JSON。例如 `[api] request failed {"lvl":"error","path":"/x","status":500}`,采集器走 ① 直接命中,不再需要猜。
261
+
262
+ ---
263
+
264
+ ## 多行合并的两个坑
265
+
266
+ ```ini
267
+ [MULTILINE_PARSER]
268
+ Name js_stack
269
+ Type regex
270
+ Flush 2
271
+ rule "start_state" "/^.*$/" "cont"
272
+ rule "cont" "/^(\s|\d+ \||error: |\w+Error: |$)/" "cont"
273
+ ```
274
+
275
+ start_state 收下任意一行;下一行**看着像续行**就并进去,否则冲出上一条、另起一条。续行的四种形状:前导空白(` at …` / ` errno:`)、代码帧(`262 | …`)、`error:` / `SyntaxError:` 抬头、空行。
276
+
277
+ 1. **按 tag 缓冲**:一个 tag 一条流。多个日志源共用一个 tag ⇒ A 的栈吸走 B 的下一行。tail 用 `Tag console.*`(每文件一个),docker 驱动用 `rewrite_tag` 按 `source` 拆。
278
+ 2. **空行必须带着 `message` 键进来**(`Skip_Empty_Values Off`):解析器丢掉空值时,合并器认不出它是续行而直接放行,一条转储被劈成两半,后半截还丢了文件名派生的字段。
279
+
280
+ 验证方式:拿一段**真的**崩溃输出(不是自己编的三行)喂进去,看它是不是**一条**记录、级别是不是 error。本机跑一遍就知道:
281
+
282
+ ```bash
283
+ docker run --rm -v "$PWD/etc:/fluent-bit/etc:ro" -v "$PWD/logs:/logs:ro" \
284
+ fluent/fluent-bit:3.2.10 # 把 OUTPUT 换成 Name stdout / Format json_lines 再跑
285
+ ```
@@ -0,0 +1,95 @@
1
+ # 契约:端点、凭据、响应、查询、计量
2
+
3
+ 本文件是「写代码时要查的那几行」。判断与流程在 [SKILL.md](../SKILL.md)。
4
+
5
+ ## 1. 地址
6
+
7
+ | 用途 | 地址 | 从哪来 |
8
+ | --- | --- | --- |
9
+ | 换服务令牌 | `{API_BASE_URL}/api/tokens/service` | 平台注入 `API_BASE_URL`(门户内部源) |
10
+ | 写入日志 | `{PORTAL_BASE_URL}/svc/observability/v1/ingest/<stream>` | 平台注入 `PORTAL_BASE_URL`(门户公开源) |
11
+ | 写入指标/链路(OTLP) | `{PORTAL_BASE_URL}/svc/observability/v1/ingest/otlp/{logs,metrics,traces}` | 同上 |
12
+ | 查询(人用) | 「日志与监控」App 界面 | — |
13
+ | 查询(程序,需用户身份) | `{PORTAL_BASE_URL}/svc/observability/api/t<租户UUID去掉横线>/_search?type=logs` | — |
14
+
15
+ `/svc/<key>/…` 是**所有部署形态都通**的那条路(门户反代按 key 转发)。同机直连对方容器是优化,不是默认——换个部署形态就断。
16
+
17
+ ⚠️ OTLP 三条入口的协议细节与日志入口不同,接之前先跟服务方确认版本行为;本 skill 只保证 `/v1/ingest/<stream>` 这条 JSON 路径。
18
+
19
+ ## 2. 换服务令牌
20
+
21
+ ```bash
22
+ curl -sS -X POST "$API_BASE_URL/api/tokens/service" \
23
+ -u "$MY_SA_CLIENT_ID:$MY_SA_CLIENT_SECRET" \
24
+ -H 'content-type: application/json' \
25
+ -d '{"grant_type":"client_credentials","tenant_id":"<租户 UUID>","scope":"observability.ingest"}'
26
+ ```
27
+
28
+ 响应是门户统一信封:
29
+
30
+ ```json
31
+ { "ok": true, "data": { "access_token": "…", "token_type": "Bearer", "expires_in": 900, "scope": "observability.ingest" } }
32
+ ```
33
+
34
+ - **先看 `ok`,再看 `data`**;失败时是 `{"ok":false,"error":{"code":"…"}}`,HTTP 仍可能是 200(业务失败不用状态码表达)。
35
+ - **`scope` 为空 = 没拿到写入权**:往下写一定 403。回 SKILL.md §1.1。
36
+ - `scope` 省略时给的是这把钥匙**当前全部**权限;显式写 `observability.ingest` 更窄、更好排查。
37
+ - 缓存到 `expires_in - 10s`。别每条日志换一次。
38
+
39
+ ## 3. 长期访问密钥(采集器用)
40
+
41
+ 门户控制台 › 服务账号 › 访问密钥:选目标租户、**只勾 `observability.ingest`**、起个能认出用途的名字、按需设到期。明文**只显示一次**。
42
+
43
+ - 一个服务账号最多 10 把活跃密钥。
44
+ - 撤销/轮换后旧密钥立刻 401(采集器会按重试上限丢弃,重签后重启即可)。
45
+ - 落盘权限收紧到只有采集器进程能读;**别进仓库、别进镜像、别打进日志**。
46
+ - 密钥能签出来的 scope 不会超过它所属服务账号当下能拿到的——签发时报「无法授予」就是前提没成立,不是名字写错。
47
+
48
+ ## 4. 写入
49
+
50
+ ```bash
51
+ curl -sS -X POST "$PORTAL_BASE_URL/svc/observability/v1/ingest/console" \
52
+ -H "authorization: Bearer $TOKEN" -H 'content-type: application/json' \
53
+ -d '[{"message":"hello","level":"info","service":"my-service","host":"node-1"}]'
54
+ ```
55
+
56
+ 成功响应形如 `{"code":200,"status":[{"successful":1,"failed":0,…}]}`。**两层都要判**:HTTP 2xx 且 `code:200` 且 `failed:0`。
57
+
58
+ - 请求体是**记录数组**;一次一批,别一条一个请求。
59
+ - 字段是随写随建的:你发什么字段,流里就有什么列。所以字段名一旦定下就别改来改去(改名 = 老数据查不到)。
60
+ - 实际流名 `app_<azp>_<stream>`,`azp` 来自令牌,等于你的 appKey。**响应体里的 `status[].name` 就是实际落点**——不用猜,也不用回头查。
61
+ - ⚠️ **key 里的 `-` 在流名里会被归一成 `__`**:`llm-gateway` 的流是 `app_llm__gateway_console`。写入端不用管,**查询时要用归一后的名字**,否则得到的是 `stream not found`(HTTP 400),看着像数据没进去。
62
+ - 时间轴用的是**到达时间**;日志自带时间是普通字段。要对齐就带 `_timestamp`(微秒 epoch),并先冒烟验证这个版本认不认。
63
+
64
+ ## 5. 查询(程序化)
65
+
66
+ 只认**用户身份的令牌**(`aud` = 日志与监控、scope 含 `observability.read`)。服务密钥打查询面是 `401` —— 按设计如此,不是坏了。
67
+
68
+ ```
69
+ POST {PORTAL_BASE_URL}/svc/observability/api/t<租户UUID去横线>/_search?type=logs
70
+ { "query": { "sql": "SELECT service, level, message FROM \"app_<key>_console\" ORDER BY _timestamp DESC",
71
+ "from": 0, "size": 20, "start_time": <微秒>, "end_time": <微秒> } }
72
+ ```
73
+
74
+ - 时间范围是**微秒** epoch——不传或范围写窄了,结果就是「什么都没有」。这是「明明写进去了却查不到」的头号原因。
75
+ - 流名要带前缀:`app_<key>_<stream>`。
76
+ - `GET …/api/t<租户>/streams` 列出有哪些流:查不到自己那条,说明一条都没写进去过。
77
+
78
+ ## 6. 错误码矩阵
79
+
80
+ | HTTP / code | 含义 | 下一步 |
81
+ | --- | --- | --- |
82
+ | 换令牌 `ok:false` + `APP_NOT_INSTALLED` | 你的 App 没装在这个租户 | 设计如此;换租户或先装 |
83
+ | 换令牌 200 但 `scope` 空 | 平台没把日志与监控登记为基础服务应用 / 默认授予没有 ingest | 找平台管理员登记 |
84
+ | 写入 `401` | 凭证缺失 / 伪造 / 已撤销 / 已过期 | 重签;轮换过的旧密钥立刻失效 |
85
+ | 写入 `403` | 身份类型不对(用户身份写入)或 scope 不含 ingest | 换服务身份;核对签出的 scope |
86
+ | 写入 200 但 `failed>0` | 记录被拒(形状/大小) | 看 `status[]` 里的原因,别忽略 |
87
+ | 查询 `401` | 拿服务密钥查 | 换用户身份 |
88
+ | 查询 `stream not found` | 这个流从没写进过东西 | 回到写入那一层,先看成功判据 |
89
+ | 查询 `stream not found`,但你确信写成功了 | key 里有 `-`,流名被归一成 `__` | 用 `…/streams` 列一下真实流名 |
90
+
91
+ ## 7. 计量与留存
92
+
93
+ 写入按字节计量(平台的用量面能看到),存储占用同理。两条实践:**生产不开 debug**(一条 debug 的成本和一条 error 一样)、**正文里别塞大 blob**(要看的是能定位的 ID)。
94
+
95
+ 留存期由平台/租户在日志与监控里配置:**日志不是归档**。要长期留证的东西走审计面。
@@ -0,0 +1,72 @@
1
+ #!/usr/bin/env bash
2
+ # 冒烟:换令牌 → 写一条带标记的记录 → 告诉你怎么在界面里找到它。
3
+ # 接日志的第一步跑它,比读文档快:三个前提里哪个不成立,它会直接说出来。
4
+ #
5
+ # PORTAL_BASE_URL=https://<门户域名> TENANT_ID=<租户UUID> APP_KEY=<你的key> \
6
+ # SA_CLIENT_ID=… SA_CLIENT_SECRET=… ./smoke-ingest.sh
7
+ #
8
+ # 已有长期密钥就跳过换令牌:ACCESS_KEY=xsak_… ./smoke-ingest.sh
9
+ # 令牌/密钥永远不打印。
10
+ set -euo pipefail
11
+
12
+ : "${PORTAL_BASE_URL:?缺 PORTAL_BASE_URL(门户公开源,形如 https://portal.example.com)}"
13
+ : "${TENANT_ID:?缺 TENANT_ID(目标租户 UUID)}"
14
+ : "${APP_KEY:?缺 APP_KEY(你的 App key,用来拼期望的流名)}"
15
+ API_BASE_URL="${API_BASE_URL:-$PORTAL_BASE_URL}"
16
+ STREAM="${STREAM:-console}"
17
+ MARKER="portal-logging-smoke-$(date +%s)"
18
+
19
+ jget() { python3 -c 'import json,sys;d=json.load(sys.stdin);print(eval("d"+sys.argv[1]) if d else "")' "$1" 2>/dev/null || true; }
20
+
21
+ if [ -n "${ACCESS_KEY:-}" ]; then
22
+ TOKEN="$ACCESS_KEY"
23
+ echo "① 用长期访问密钥(跳过换令牌)"
24
+ else
25
+ : "${SA_CLIENT_ID:?缺 SA_CLIENT_ID(平台注入 <PREFIX>_SA_CLIENT_ID)}"
26
+ : "${SA_CLIENT_SECRET:?缺 SA_CLIENT_SECRET}"
27
+ RESP=$(curl -sS -X POST "$API_BASE_URL/api/tokens/service" \
28
+ -u "$SA_CLIENT_ID:$SA_CLIENT_SECRET" -H 'content-type: application/json' \
29
+ -d "{\"grant_type\":\"client_credentials\",\"tenant_id\":\"$TENANT_ID\",\"scope\":\"observability.ingest\"}")
30
+ OK=$(printf '%s' "$RESP" | jget '["ok"]')
31
+ if [ "$OK" != "True" ]; then
32
+ echo "✗ 换令牌失败:$(printf '%s' "$RESP" | jget '["error"]["code"]')"
33
+ echo " APP_NOT_INSTALLED ⇒ 你的 App 没装在这个租户(设计如此)。其余见 references/contract.md §6。"
34
+ exit 1
35
+ fi
36
+ SCOPE=$(printf '%s' "$RESP" | jget '["data"]["scope"]')
37
+ TOKEN=$(printf '%s' "$RESP" | jget '["data"]["access_token"]')
38
+ if [ -z "$SCOPE" ]; then
39
+ echo "✗ 令牌签出来了,但 scope 是空的 —— 平台还没把「日志与监控」登记为平台基础服务应用"
40
+ echo " (或默认授予里没有 observability.ingest)。往下写一定 403,先找平台管理员登记。"
41
+ exit 1
42
+ fi
43
+ echo "① 换到服务令牌,scope=$SCOPE"
44
+ fi
45
+
46
+ echo "② 写一条:stream=$STREAM marker=$MARKER"
47
+ W=$(curl -sS -o /tmp/pl-smoke.json -w '%{http_code}' -X POST \
48
+ "$PORTAL_BASE_URL/svc/observability/v1/ingest/$STREAM" \
49
+ -H "authorization: Bearer $TOKEN" -H 'content-type: application/json' \
50
+ -d "[{\"message\":\"$MARKER hello from smoke\",\"level\":\"info\",\"service\":\"$APP_KEY\",\"host\":\"$(hostname)\"}]")
51
+ BODY=$(cat /tmp/pl-smoke.json); rm -f /tmp/pl-smoke.json
52
+ CODE=$(printf '%s' "$BODY" | jget '["code"]')
53
+ FAILED=$(printf '%s' "$BODY" | jget '["status"][0]["failed"]')
54
+
55
+ if [ "$W" != "200" ]; then
56
+ echo "✗ HTTP $W —— 401=凭证无效/已撤销;403=身份类型不对或 scope 不含 ingest。见 contract.md §6"
57
+ echo " $BODY"; exit 1
58
+ fi
59
+ if [ "$CODE" != "200" ] || [ "${FAILED:-1}" != "0" ]; then
60
+ echo "✗ HTTP 200 但没落库(这正是「一直 200、界面查不到」的来源):$BODY"; exit 1
61
+ fi
62
+
63
+ echo "③ 写入成功(HTTP 200 + code:200 + failed:0)"
64
+ cat <<TIP
65
+
66
+ 下一步,在「日志与监控」App 里核对(用你自己的账号,不是这把密钥):
67
+ · 流名应为 app_${APP_KEY}_${STREAM}
68
+ · 搜 $MARKER
69
+ · 时间范围选【最近 15 分钟】—— 时间轴是到达时间,范围写窄了就是"什么都没有"
70
+
71
+ 搜不到就按这个次序查:流名前缀 → 时间范围 → 令牌的 azp 是不是你以为的那个。
72
+ TIP