@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.
- package/README.md +38 -2
- package/bin/xgent-skills.js +515 -4
- package/package.json +7 -3
- package/skills/dev-plan/SKILL.md +113 -93
- package/skills/dev-plan/references/architecture-quality.md +141 -0
- package/skills/dev-plan/references/execution-workflow.md +78 -0
- package/skills/dev-plan/references/plan-skeleton.md +238 -78
- package/skills/dev-plan/scripts/check_progress.sh +158 -0
- package/skills/elintp/SKILL.md +129 -0
- package/skills/grafton-view-dev/SKILL.md +195 -0
- package/skills/grafton-view-dev/references/bindings.md +120 -0
- package/skills/grafton-view-dev/references/components.md +168 -0
- package/skills/grafton-view-dev/references/recipes.md +208 -0
- package/skills/grafton-view-dev/references/schema.md +86 -0
- package/skills/grafton-view-dev/references/stores.md +310 -0
- package/skills/pardon/SKILL.md +30 -0
- package/skills/portal-app-exchange/SKILL.md +106 -0
- package/skills/portal-backend-app/SKILL.md +56 -0
- package/skills/portal-backend-app/references/gate-and-tokens.md +93 -0
- package/skills/portal-backend-app/references/wiring-and-conventions.md +71 -0
- package/skills/portal-dev-setup/SKILL.md +519 -0
- package/skills/portal-dev-setup/puller.env.example +74 -0
- package/skills/portal-dev-setup/references/troubleshooting.md +167 -0
- package/skills/portal-dev-setup/scripts/onebox.sh +966 -0
- package/skills/portal-external-app/SKILL.md +273 -0
- package/skills/portal-external-app/references/contract-doc-template.md +96 -0
- package/skills/portal-external-app/references/health-contract.md +80 -0
- package/skills/portal-external-app/references/integration-contract.md +130 -0
- package/skills/portal-external-app/references/quota-and-seats.md +213 -0
- package/skills/portal-external-app/references/registration-and-onebox.md +259 -0
- package/skills/portal-external-app/scripts/health-verdict.ts +22 -0
- package/skills/portal-external-app/scripts/verify-health.ts +27 -0
- package/skills/portal-logging/SKILL.md +139 -0
- package/skills/portal-logging/references/collectors.md +285 -0
- package/skills/portal-logging/references/contract.md +95 -0
- package/skills/portal-logging/scripts/smoke-ingest.sh +72 -0
- package/skills/portal-micro-app/SKILL.md +83 -0
- package/skills/portal-micro-app/references/manifest-and-acl.md +79 -0
- package/skills/portal-micro-app/references/open-api-and-extensions.md +86 -0
- package/skills/portal-micro-app/references/sdk-reference.md +208 -0
- package/skills/prd/SKILL.md +212 -0
- package/skills/prd/references/prd-skeleton.md +244 -0
- package/skills/prd/references/spms-mapping.md +148 -0
- package/skills/react/SKILL.md +103 -0
- package/skills/react/references/component-patterns.md +275 -0
- package/skills/react/references/data-fetching.md +255 -0
- package/skills/react/references/effect-patterns.md +407 -0
- package/skills/react/references/js-performance.md +432 -0
- package/skills/react/references/rendering-performance.md +351 -0
- package/skills/react/references/rerender-optimization.md +578 -0
- package/skills/rust/SKILL.md +103 -0
- package/skills/rust/references/chapter_01.md +564 -0
- package/skills/rust/references/chapter_02.md +117 -0
- package/skills/rust/references/chapter_03.md +209 -0
- package/skills/rust/references/chapter_04.md +183 -0
- package/skills/rust/references/chapter_05.md +390 -0
- package/skills/rust/references/chapter_06.md +142 -0
- package/skills/rust/references/chapter_07.md +226 -0
- package/skills/rust/references/chapter_08.md +257 -0
- package/skills/rust/references/chapter_09.md +261 -0
- package/skills/rust/references/chapter_10.md +554 -0
- package/skills/story-points/SKILL.md +219 -0
- package/skills/story-points/references/factors.md +367 -0
- package/skills/summarize/SKILL.md +79 -0
- package/skills/swarm/SKILL.md +263 -0
- package/skills/swarm/evals/evals.json +55 -0
- package/skills/swarm/references/agent-types.md +260 -0
- package/skills/swarm/references/teams/code-audit.md +81 -0
- package/skills/swarm/references/teams/debug-race.md +70 -0
- package/skills/swarm/references/teams/feature-dev.md +71 -0
- package/skills/swarm/references/teams/product.md +114 -0
- package/skills/swarm/references/teams/refactor-migration.md +73 -0
- package/skills/swarm/references/teams/research-debate.md +73 -0
- package/skills/test-plan/SKILL.md +136 -0
- package/skills/test-plan/references/case-taxonomy.md +141 -0
- package/skills/working-with-mbx/SKILL.md +343 -0
- package/skills/working-with-mbx/references/acknowledgements.md +37 -0
- package/skills/working-with-mbx/references/benchmarks.md +140 -0
- package/skills/working-with-mbx/references/cache-results.md +153 -0
- package/skills/working-with-mbx/references/cache-server.md +151 -0
- package/skills/working-with-mbx/references/cli/adopt.md +29 -0
- package/skills/working-with-mbx/references/cli/cache/dir.md +24 -0
- package/skills/working-with-mbx/references/cli/cache/export.md +31 -0
- package/skills/working-with-mbx/references/cli/cache/import.md +27 -0
- package/skills/working-with-mbx/references/cli/cache/largest.md +26 -0
- package/skills/working-with-mbx/references/cli/cache/projects.md +23 -0
- package/skills/working-with-mbx/references/cli/cache/remove.md +30 -0
- package/skills/working-with-mbx/references/cli/cache/stats.md +24 -0
- package/skills/working-with-mbx/references/cli/cache/trace.md +27 -0
- package/skills/working-with-mbx/references/cli/cache/verify.md +23 -0
- package/skills/working-with-mbx/references/cli/cache.md +35 -0
- package/skills/working-with-mbx/references/cli/clean.md +27 -0
- package/skills/working-with-mbx/references/cli/completion.md +27 -0
- package/skills/working-with-mbx/references/cli/doctor.md +24 -0
- package/skills/working-with-mbx/references/cli/exec.md +28 -0
- package/skills/working-with-mbx/references/cli/explain.md +29 -0
- package/skills/working-with-mbx/references/cli/gc.md +28 -0
- package/skills/working-with-mbx/references/cli/prefetch.md +27 -0
- package/skills/working-with-mbx/references/cli/setup.md +28 -0
- package/skills/working-with-mbx/references/cli/stats.md +24 -0
- package/skills/working-with-mbx/references/cli/tui.md +24 -0
- package/skills/working-with-mbx/references/cli.md +58 -0
- package/skills/working-with-mbx/references/compared.md +67 -0
- package/skills/working-with-mbx/references/configuration.md +724 -0
- package/skills/working-with-mbx/references/cookbook/fork-prs.md +82 -0
- package/skills/working-with-mbx/references/cookbook/local-development.md +127 -0
- package/skills/working-with-mbx/references/cookbook/migrate.md +67 -0
- package/skills/working-with-mbx/references/dashboard.md +89 -0
- package/skills/working-with-mbx/references/faq.md +75 -0
- package/skills/working-with-mbx/references/getting-started.md +147 -0
- package/skills/working-with-mbx/references/github-action.md +254 -0
- package/skills/working-with-mbx/references/guide.md +59 -0
- package/skills/working-with-mbx/references/how-it-works.md +86 -0
- package/skills/working-with-mbx/references/incremental.md +78 -0
- package/skills/working-with-mbx/references/index.md +57 -0
- package/skills/working-with-mbx/references/installation.md +101 -0
- package/skills/working-with-mbx/references/limits.md +182 -0
- package/skills/working-with-mbx/references/linkers.md +75 -0
- package/skills/working-with-mbx/references/managed-targets.md +197 -0
- package/skills/working-with-mbx/references/protocol-compatibility.md +103 -0
- package/skills/working-with-mbx/references/remote-cache.md +190 -0
- package/skills/working-with-mbx/references/scheduling.md +65 -0
- package/skills/working-with-mbx/references/setup.md +157 -0
- package/skills/working-with-mbx/references/stability.md +43 -0
- package/skills/working-with-mbx/references/standalone-builds.md +102 -0
- package/skills/working-with-mbx/references/stats.md +49 -0
- package/skills/working-with-mbx/references/troubleshooting.md +136 -0
- package/skills/working-with-mbx/references/tui.md +163 -0
- package/skills/working-with-mbx/update-docs.sh +49 -0
- package/skills/working-with-mise/SKILL.md +297 -0
- package/skills/working-with-mise/references/cli/activate-html.md +90 -0
- package/skills/working-with-mise/references/cli/alias-html.md +30 -0
- package/skills/working-with-mise/references/cli/backends-html.md +40 -0
- package/skills/working-with-mise/references/cli/bin-paths-html.md +37 -0
- package/skills/working-with-mise/references/cli/bootstrap-html.md +109 -0
- package/skills/working-with-mise/references/cli/cache-html.md +40 -0
- package/skills/working-with-mise/references/cli/completion-html.md +76 -0
- package/skills/working-with-mise/references/cli/config-html.md +44 -0
- package/skills/working-with-mise/references/cli/daemons-html.md +48 -0
- package/skills/working-with-mise/references/cli/deactivate-html.md +47 -0
- package/skills/working-with-mise/references/cli/deps-html.md +89 -0
- package/skills/working-with-mise/references/cli/doctor-html.md +46 -0
- package/skills/working-with-mise/references/cli/dotfiles-html.md +57 -0
- package/skills/working-with-mise/references/cli/edit-html.md +48 -0
- package/skills/working-with-mise/references/cli/en-html.md +62 -0
- package/skills/working-with-mise/references/cli/env-html.md +57 -0
- package/skills/working-with-mise/references/cli/exec-html.md +79 -0
- package/skills/working-with-mise/references/cli/exec.md +79 -0
- package/skills/working-with-mise/references/cli/fmt-html.md +44 -0
- package/skills/working-with-mise/references/cli/generate-html.md +43 -0
- package/skills/working-with-mise/references/cli/implode-html.md +35 -0
- package/skills/working-with-mise/references/cli/install-html.md +83 -0
- package/skills/working-with-mise/references/cli/install-into-html.md +47 -0
- package/skills/working-with-mise/references/cli/latest-html.md +62 -0
- package/skills/working-with-mise/references/cli/link-html.md +57 -0
- package/skills/working-with-mise/references/cli/lock-html.md +114 -0
- package/skills/working-with-mise/references/cli/ls-html.md +95 -0
- package/skills/working-with-mise/references/cli/ls-remote-html.md +61 -0
- package/skills/working-with-mise/references/cli/mcp-html.md +57 -0
- package/skills/working-with-mise/references/cli/oci-html.md +41 -0
- package/skills/working-with-mise/references/cli/outdated-html.md +79 -0
- package/skills/working-with-mise/references/cli/packslip-html.md +38 -0
- package/skills/working-with-mise/references/cli/patrons-html.md +45 -0
- package/skills/working-with-mise/references/cli/plugins-html.md +46 -0
- package/skills/working-with-mise/references/cli/prune-html.md +56 -0
- package/skills/working-with-mise/references/cli/registry-html.md +59 -0
- package/skills/working-with-mise/references/cli/reshim-html.md +46 -0
- package/skills/working-with-mise/references/cli/run-html.md +152 -0
- package/skills/working-with-mise/references/cli/search-html.md +69 -0
- package/skills/working-with-mise/references/cli/self-update-html.md +42 -0
- package/skills/working-with-mise/references/cli/set-html.md +116 -0
- package/skills/working-with-mise/references/cli/settings-html.md +78 -0
- package/skills/working-with-mise/references/cli/shell-alias-html.md +39 -0
- package/skills/working-with-mise/references/cli/shell-html.md +53 -0
- package/skills/working-with-mise/references/cli/skills-html.md +39 -0
- package/skills/working-with-mise/references/cli/sponsors-html.md +31 -0
- package/skills/working-with-mise/references/cli/ssh-html.md +45 -0
- package/skills/working-with-mise/references/cli/sync-html.md +37 -0
- package/skills/working-with-mise/references/cli/tasks-html.md +61 -0
- package/skills/working-with-mise/references/cli/test-tool-html.md +49 -0
- package/skills/working-with-mise/references/cli/token-html.md +37 -0
- package/skills/working-with-mise/references/cli/tool-alias-html.md +41 -0
- package/skills/working-with-mise/references/cli/tool-html.md +55 -0
- package/skills/working-with-mise/references/cli/tool-stub-html.md +60 -0
- package/skills/working-with-mise/references/cli/trust-html.md +63 -0
- package/skills/working-with-mise/references/cli/uninstall-html.md +62 -0
- package/skills/working-with-mise/references/cli/unset-html.md +59 -0
- package/skills/working-with-mise/references/cli/untrust-html.md +35 -0
- package/skills/working-with-mise/references/cli/unuse-html.md +74 -0
- package/skills/working-with-mise/references/cli/upgrade-html.md +133 -0
- package/skills/working-with-mise/references/cli/use-html.md +130 -0
- package/skills/working-with-mise/references/cli/use.md +130 -0
- package/skills/working-with-mise/references/cli/version-html.md +46 -0
- package/skills/working-with-mise/references/cli/watch-html.md +465 -0
- package/skills/working-with-mise/references/cli/where-html.md +53 -0
- package/skills/working-with-mise/references/cli/which-html.md +55 -0
- package/skills/working-with-mise/references/configuration/environments-html.md +171 -0
- package/skills/working-with-mise/references/configuration/project-diagnostics-html.md +93 -0
- package/skills/working-with-mise/references/configuration/settings-html.md +3062 -0
- package/skills/working-with-mise/references/configuration/vars-html.md +167 -0
- package/skills/working-with-mise/references/dev-tools/aliases-html.md +97 -0
- package/skills/working-with-mise/references/dev-tools/backend_architecture-html.md +198 -0
- package/skills/working-with-mise/references/dev-tools/backends/aqua-html.md +274 -0
- package/skills/working-with-mise/references/dev-tools/backends/aqua.md +274 -0
- package/skills/working-with-mise/references/dev-tools/backends/asdf-html.md +98 -0
- package/skills/working-with-mise/references/dev-tools/backends/asdf.md +98 -0
- package/skills/working-with-mise/references/dev-tools/backends/cargo-html.md +240 -0
- package/skills/working-with-mise/references/dev-tools/backends/cargo.md +240 -0
- package/skills/working-with-mise/references/dev-tools/backends/conda-html.md +125 -0
- package/skills/working-with-mise/references/dev-tools/backends/dotnet-html.md +142 -0
- package/skills/working-with-mise/references/dev-tools/backends/forgejo-html.md +533 -0
- package/skills/working-with-mise/references/dev-tools/backends/gem-html.md +77 -0
- package/skills/working-with-mise/references/dev-tools/backends/gem.md +77 -0
- package/skills/working-with-mise/references/dev-tools/backends/github-html.md +622 -0
- package/skills/working-with-mise/references/dev-tools/backends/github.md +622 -0
- package/skills/working-with-mise/references/dev-tools/backends/gitlab-html.md +546 -0
- package/skills/working-with-mise/references/dev-tools/backends/go-html.md +115 -0
- package/skills/working-with-mise/references/dev-tools/backends/go.md +115 -0
- package/skills/working-with-mise/references/dev-tools/backends/http-html.md +644 -0
- package/skills/working-with-mise/references/dev-tools/backends/http.md +644 -0
- package/skills/working-with-mise/references/dev-tools/backends/npm-html.md +436 -0
- package/skills/working-with-mise/references/dev-tools/backends/npm.md +436 -0
- package/skills/working-with-mise/references/dev-tools/backends/packslip-html.md +310 -0
- package/skills/working-with-mise/references/dev-tools/backends/pipx-html.md +329 -0
- package/skills/working-with-mise/references/dev-tools/backends/pipx.md +329 -0
- package/skills/working-with-mise/references/dev-tools/backends/pkgx-html.md +73 -0
- package/skills/working-with-mise/references/dev-tools/backends/pypi-html.md +331 -0
- package/skills/working-with-mise/references/dev-tools/backends/s3-html.md +346 -0
- package/skills/working-with-mise/references/dev-tools/backends/spm-html.md +201 -0
- package/skills/working-with-mise/references/dev-tools/backends/ubi-html.md +232 -0
- package/skills/working-with-mise/references/dev-tools/backends/vfox-html.md +173 -0
- package/skills/working-with-mise/references/dev-tools/backends/vfox.md +173 -0
- package/skills/working-with-mise/references/dev-tools/backends.md +32 -0
- package/skills/working-with-mise/references/dev-tools/comparison-to-asdf-html.md +112 -0
- package/skills/working-with-mise/references/dev-tools/deps-html.md +390 -0
- package/skills/working-with-mise/references/dev-tools/github-tokens-html.md +390 -0
- package/skills/working-with-mise/references/dev-tools/index-html.md +420 -0
- package/skills/working-with-mise/references/dev-tools/mise-lock-html.md +660 -0
- package/skills/working-with-mise/references/dev-tools/mise-oci-html.md +418 -0
- package/skills/working-with-mise/references/dev-tools/packslip-resources-html.md +203 -0
- package/skills/working-with-mise/references/dev-tools/packslip-verification-html.md +178 -0
- package/skills/working-with-mise/references/dev-tools/shims-html.md +397 -0
- package/skills/working-with-mise/references/dev-tools/tool-stubs-html.md +416 -0
- package/skills/working-with-mise/references/guides/getting-started.md +268 -0
- package/skills/working-with-mise/references/index.md +37 -0
- package/skills/working-with-mise/update-docs.sh +111 -0
- package/skills/xgent-app-release/SKILL.md +438 -0
- package/skills/xgent-app-release/references/build-and-package.md +65 -0
- package/skills/xgent-app-release/references/publish-api.md +315 -0
- package/skills/xgent-app-release/references/troubleshooting.md +108 -0
- package/skills/xgent-app-release/scripts/npm-token.mjs +94 -0
- package/skills/xgent-app-release/scripts/preflight.mjs +340 -0
- package/skills/xgent-app-release/scripts/registry-config.mjs +88 -0
- package/skills/xgent-image-push/SKILL.md +239 -0
- package/skills/xgent-image-push/registry.env.example +51 -0
- package/skills/xgent-image-push/scripts/push-image.sh +576 -0
- package/skills/xgent-init/SKILL.md +96 -0
- package/skills/xgent-init/references/external-app-CLAUDE.template.md +249 -0
- package/skills/xgent-init/references/external-app-DESIGN.template.md +317 -0
- package/skills/xgent-init/references/external-app-PRODUCT.template.md +87 -0
- package/skills/xgent-init/references/fill-guide.md +78 -0
- package/skills/xgent-init/scripts/check-docs.mjs +304 -0
- package/vendor/impeccable/LICENSE +191 -0
- package/vendor/impeccable/NOTICE.md +11 -0
- package/vendor/impeccable/VERSION.json +28 -0
- package/vendor/impeccable/bundle/blobs/00023f9e7f2e27604fde978b56510a8f837b76eeadd93221d11adcf4c98f1a10 +88 -0
- package/vendor/impeccable/bundle/blobs/00f053b877a92a9847d69eec2403e40c757152f30a5ca807c5033c58d7c297f1 +33 -0
- package/vendor/impeccable/bundle/blobs/012f548547fae48ebdd22a3c3af8a01032641fddd530e3783bd73b7358ab2c49 +80 -0
- package/vendor/impeccable/bundle/blobs/015725eeca94f52bffd2132d4cb49bc3eb1ee76e6ac7378c065e629d59f56613 +84 -0
- package/vendor/impeccable/bundle/blobs/03b30331c176a248a3b3bd17abdff1a1fd658f09ffb2a412b36ae9627dd3f33b +105 -0
- package/vendor/impeccable/bundle/blobs/041535231366047a0beeb5daa64ea9c23d5a566580f7dafdb8c0623cb4a7e76b +24 -0
- package/vendor/impeccable/bundle/blobs/04af9f2d6883fe76f9539d310d9c369052822a24886d2c330ab1e3fe5981c8a1 +24 -0
- package/vendor/impeccable/bundle/blobs/058f81f256134841875fd3183e06b37a023de0c877fd2b9eecd97011640791fe +46 -0
- package/vendor/impeccable/bundle/blobs/05aa836a190f4ff62e5d4619738bdb891d83d85e35d81c2e6e322d1dc084d802 +80 -0
- package/vendor/impeccable/bundle/blobs/05e86f37d7fa381c5e8a04b6212490a27904d3be3e9384862a0764d3daba6d78 +54 -0
- package/vendor/impeccable/bundle/blobs/0617b37a905f0486c1ab4e91a287c8ef8292e253095c340f452d591206272f73 +104 -0
- package/vendor/impeccable/bundle/blobs/074575671f24cf4298d06f0019f76e94f62e9a6ed205fce05b8e507341e64266 +111 -0
- package/vendor/impeccable/bundle/blobs/076a31941acbaa81013c8c511e146ed4138128eb5e9895dae3e9a27a25ac4f04 +13 -0
- package/vendor/impeccable/bundle/blobs/08812a8618de7bd2f63a51298e9c2558031237e8efba280062ccb636101e25e1 +80 -0
- package/vendor/impeccable/bundle/blobs/08a2980eae0bfea1f00229899defc28ec92c7ecb875bf5fb02e4ba80dad6c394 +806 -0
- package/vendor/impeccable/bundle/blobs/08d78eb31c561256f83baa0afa742a660f1467aa2c81be2f60c2b7f9c770d66e +54 -0
- package/vendor/impeccable/bundle/blobs/098a891028ce59c212b747d3c70468dd750aff7053a703d1336045ed31e0da7c +70 -0
- package/vendor/impeccable/bundle/blobs/0a151a54959a15eb32fa338890d5d64ac48a9d54d2d5442c3c7708a4c27c1858 +104 -0
- package/vendor/impeccable/bundle/blobs/0bb4085f6dda702846e0e56bd4f797aa1b046ab48eca02644448e368f3820f88 +104 -0
- package/vendor/impeccable/bundle/blobs/0bc7d7971b3edf2acd0580e847458dc6d84129d90715b452799ace3bed815c7c +84 -0
- package/vendor/impeccable/bundle/blobs/0bf6f08bf34d24cd88a78d544add9e4d71478bcf939926cde32f4e164882c775 +105 -0
- package/vendor/impeccable/bundle/blobs/0dbbef70048cc3ae44e6710ff09992ce14ad049ce8ed519b0ff8a1ddb4633f4e +111 -0
- package/vendor/impeccable/bundle/blobs/0e081d496eba4bd77aca81723d59120c10177a71c9551a60ab923c356fb3cf38 +104 -0
- package/vendor/impeccable/bundle/blobs/0e1819750e5448311a051d35ab6d0be0830418f78ca872ef10469fafebb27d4f +46 -0
- package/vendor/impeccable/bundle/blobs/0e18ac33b7e6a247b658fcaf926d9eac028399597dbaba366f1d2f2b884a383b +325 -0
- package/vendor/impeccable/bundle/blobs/0f83648f6b425225290305bced51eacebacf9bf9bc05e21cdbad46863fbc89ce +24 -0
- package/vendor/impeccable/bundle/blobs/115e1c3f1b58b5129910ed925dbf65d61d5ac4c2036618847555ce40098aae97 +145 -0
- package/vendor/impeccable/bundle/blobs/11f75834c26ecd8a5b0afdf696e838953b235dc4835b7293bbc6b1bc27dd3106 +84 -0
- package/vendor/impeccable/bundle/blobs/12c1afcd15e86d840b89a78c6d17ce6d1b5609bac713d59271c6ab5932975dac +111 -0
- package/vendor/impeccable/bundle/blobs/12d2a8043ae8668ad29c32bfa92995849fc49cb016e6ebd4f7e59539d96e7b03 +46 -0
- package/vendor/impeccable/bundle/blobs/12fefe52d80d25014e5f7e2f9b278275a675653d3d99ae8f0ecf344cdb9abbe6 +111 -0
- package/vendor/impeccable/bundle/blobs/13bd27aa8573e6d45d8bbf9f3fc991e4719d28a7e8f709009a4a5a49a227fff3 +37 -0
- package/vendor/impeccable/bundle/blobs/1484a7ae206ab4f0e6262b21afe0f6307a629ed27d28fb7de69536a6800a4883 +37 -0
- package/vendor/impeccable/bundle/blobs/15b4837dccb27d7382e2f134ef050b244c4488b1906e0308f288112183cc09ac +145 -0
- package/vendor/impeccable/bundle/blobs/1640c70b984a43e729d72d046109f87243ae84ecd64d2600a007d140558123cc +80 -0
- package/vendor/impeccable/bundle/blobs/1652d639d91889a08bda7f351456c43ee30e5677aa4866a90f375e1e4be15deb +80 -0
- package/vendor/impeccable/bundle/blobs/16d99e9fe8e75d69042bc4fda12e93daa7e10f9fa6c00b12b0f0580b119a4cfd +105 -0
- package/vendor/impeccable/bundle/blobs/171777f8a8596d2ffdb43f4b935a7c6c12859ace233967f868a566390a59708e +325 -0
- package/vendor/impeccable/bundle/blobs/173dd66abe65633910dcb04a51f40d6ff2a793f87088f022a02fc4cad24dd133 +94 -0
- package/vendor/impeccable/bundle/blobs/17c583cf8ad41266ea1e787b666b9d91fe13469d3d0f6af57c08e0146f9b17ac +58 -0
- package/vendor/impeccable/bundle/blobs/181e814c1b9317098b2300c1b02ad0d137b6d82bd1e7e8cc64de4d00b4c50c25 +111 -0
- package/vendor/impeccable/bundle/blobs/190a4e642ca362d7499f3c3ab123e21f18f75457d11f072b545a183f296e6495 +99 -0
- package/vendor/impeccable/bundle/blobs/1971edc3784273bd8da7b1980779c6159471e857992faa6637178109cb130503 +806 -0
- package/vendor/impeccable/bundle/blobs/199d5d3db1197e053a2eb9c3cb927d44cbaaaeb57745c1ada3fd775ba50d9291 +104 -0
- package/vendor/impeccable/bundle/blobs/19c5bfce570a0e2bddd4d9c788936ff9070c90299363c4853ba77bfd37306e20 +416 -0
- package/vendor/impeccable/bundle/blobs/1a9180cec754f8afd354e7cb759750247e97c5bd26d3242ad4c45e315069e8c0 +37 -0
- package/vendor/impeccable/bundle/blobs/1c804990fd8ac23a4b19c42972b5ae591d17f620d0006f0f32927c8db5d5bf50 +145 -0
- package/vendor/impeccable/bundle/blobs/1d72b494f46a60e6c9c06e89bab79789dd85e11f62fb4286a03abf26d352dc1f +80 -0
- package/vendor/impeccable/bundle/blobs/21bc91f6e07691e82b7bba99f9e1d956f9d7a6810dcdc18d231fe73b53a13b23 +37 -0
- package/vendor/impeccable/bundle/blobs/238e1967d933ca5739db708f7ad9f72ca8b34bc4c9b9e1c07b0a06dcf9d00681 +806 -0
- package/vendor/impeccable/bundle/blobs/244e5b7bca6d22a51b4e22104a52a36e477056b03d257b56d1d4e319cd6167a8 +80 -0
- package/vendor/impeccable/bundle/blobs/249f0437a52ab3eb4bc4d4a9f38e085334c0fbb7795e88dd419e32b5f58c924d +42 -0
- package/vendor/impeccable/bundle/blobs/27c4b6c90ad12a186136f9ece9cb1830d4a6e36b11382ab334efc4543f8082de +145 -0
- package/vendor/impeccable/bundle/blobs/29f741b71e75fd39c65ca6df4b01b5f6c4f3c4c7adf23b47a3220ce2c0251f24 +104 -0
- package/vendor/impeccable/bundle/blobs/2b21f0142ee88a11dbe2593362f5a910718a61062e3a64e7ff936ef1e74fd394 +46 -0
- package/vendor/impeccable/bundle/blobs/2b58041cd82d819d12762b10becb95f8253c661bf6a9de40f61fc01c1204b743 +806 -0
- package/vendor/impeccable/bundle/blobs/2b5b2fbf5f658f34ea1997fb1aeebe01604d05187f75c6a4f1f55a5bc78520a4 +104 -0
- package/vendor/impeccable/bundle/blobs/2c2ed6286bd74adef4f24ef442e2e1bc0780d44bc060aa2a4c03a03988dbafd5 +325 -0
- package/vendor/impeccable/bundle/blobs/2d7086992c07df1fc734cdf9c420c4bd8ad409ab7909e07c8b486c303d420732 +83 -0
- package/vendor/impeccable/bundle/blobs/2e4846117a2fcdc1e4bc9570a5333da839649cb8ccdac6a30a87591ca05b4bb0 +54 -0
- package/vendor/impeccable/bundle/blobs/2f02f96f889e0c8e0e90806af1ef17e0c162a6cc402068f434d3f7608d9deda3 +54 -0
- package/vendor/impeccable/bundle/blobs/2fd096823e4a93f19edd421a69e10f90ebb630a014c673d1802a927c6f47b7d2 +111 -0
- package/vendor/impeccable/bundle/blobs/2feb3768125ba6469c92a50d516727e6d42f44579165ddfd33409948e2a3803d +27 -0
- package/vendor/impeccable/bundle/blobs/30e006fdee873bac23edaeadce0371161625e021e3cf442dff4b05bb82297ba1 +24 -0
- package/vendor/impeccable/bundle/blobs/31b90048c0b540daec46762a10c2b6b6434737a89af005054d8b848d829d003b +69 -0
- package/vendor/impeccable/bundle/blobs/33b6b32c0c3c0c4a2b22bd2275176b1c88a006dd94592a854f629911a0b21cdc +111 -0
- package/vendor/impeccable/bundle/blobs/3565d038a2eeab88a8b18ff52e6630008ab30f867f9df922a38ce8980440b2e3 +80 -0
- package/vendor/impeccable/bundle/blobs/356cfa0ebf61589cf5d52691d101a69d69256062fe1d11d71d95d41a78289cbd +111 -0
- package/vendor/impeccable/bundle/blobs/3673248740bcdd1122ccc610093ba2fe52f3943a61ce0b7170b74dc49e5b6098 +416 -0
- package/vendor/impeccable/bundle/blobs/37080ea5e5b381adb7eae7a427231b0ad0dee0f0916fc1d6b673b7101a5b425b +42 -0
- package/vendor/impeccable/bundle/blobs/3753448bca49da76dd8b12d5a8b4264414673f26e49028d37616faa8beb210b7 +127 -0
- package/vendor/impeccable/bundle/blobs/37565671b09d983ea1ad83a9e9190bc37255d93c68445958c6facecc7e0f7c4f +33 -0
- package/vendor/impeccable/bundle/blobs/37aeddc0f2031fa89d72519ae2e7542c267872f81786fb8288fca0a49118be11 +27 -0
- package/vendor/impeccable/bundle/blobs/37c9a2122efa64dc8789eb47d196150b0bc635e0ba95042fd381ff157002ed50 +111 -0
- package/vendor/impeccable/bundle/blobs/381ff89aa76e82a0d98456ec31cb117555ae045539fba47c45056daa50f611ca +46 -0
- package/vendor/impeccable/bundle/blobs/3895765e9434400dfc1b30e364be002cf499c1718fb2431e65b907c14ae2cb27 +86 -0
- package/vendor/impeccable/bundle/blobs/38c2e839e130008b6da814ab9c16f3fcbbedfdf721a9638eebd31a9e65341a7a +84 -0
- package/vendor/impeccable/bundle/blobs/38d4d404030c6ea935d3223db1eeb22c45d04a94f41f98e02a43cdc5af7ff2e3 +24 -0
- package/vendor/impeccable/bundle/blobs/3970c8e24615610b0246585e49146f6762d5082b3c8fddc08a00940d6e72d394 +80 -0
- package/vendor/impeccable/bundle/blobs/39ac044f2e45a9e7eed8eb68fe91d32938160eb7f8fa93d2afc42fc80a0c3c10 +54 -0
- package/vendor/impeccable/bundle/blobs/39d9600489073e227e4f4d55c451ce4252a6632ed7ae37923efbbcbc91f16d07 +206 -0
- package/vendor/impeccable/bundle/blobs/3aa908c18db91d5f31d6bba6402eab6afc4e0b75137f841a86bd012386e0d8e2 +145 -0
- package/vendor/impeccable/bundle/blobs/3af7c46309f748ff3845f16455a431ec0e9e807e5e3a965e96e9ee75a1198eb8 +95 -0
- package/vendor/impeccable/bundle/blobs/3ba92d4aa840ec1b6c2fda224339489d6dd65eedf43bb45836af02584d1faa88 +42 -0
- package/vendor/impeccable/bundle/blobs/3bcf81b938a0f0309e9ed6616f4bd18d82f07e2801411ee4cce51220d417eb95 +80 -0
- package/vendor/impeccable/bundle/blobs/3bf5d8661351831dbb2195e3b677fea1f128ca319c0589d538b66d9c9d7dddbc +111 -0
- package/vendor/impeccable/bundle/blobs/3dd45e1c32db3d3163a96ef198954905807b25cb9a1d206a7d77986f21d27652 +39 -0
- package/vendor/impeccable/bundle/blobs/3e3b6fdc6afbc2c2a734d08d6a18b393b7139c56f28f91f82e13e5555b98018a +84 -0
- package/vendor/impeccable/bundle/blobs/3f2c351303b74e217907006fb9c55ada2ef596e9710c13d631e20506d17b9ee8 +325 -0
- package/vendor/impeccable/bundle/blobs/402373ef95962ecb81dd3d7cf70ecb3bd3e22a2bd2aabb4c0d76f7f4f9447870 +105 -0
- package/vendor/impeccable/bundle/blobs/402656ca6df17bad1cd55ede0a966a7bb5b187cf4f89c517851f9efe7f14c0fd +87 -0
- package/vendor/impeccable/bundle/blobs/40c87038b5f75147a5952a96237acf312a327bf70c1bcd8e0a5f064625ae9668 +51 -0
- package/vendor/impeccable/bundle/blobs/420d82fe41884b7aa8c28750520146d8160c91396ac332a96b2d82a90b017fb2 +80 -0
- package/vendor/impeccable/bundle/blobs/420e2fdee2b7f555d9a37ce348cf62610ddd98f96b1a0a511796ba600881588c +111 -0
- package/vendor/impeccable/bundle/blobs/424b2e75cb204e2dca7db4a40dfe5a81f78dc0fc58ac4790e8b7bbf2f330bba4 +37 -0
- package/vendor/impeccable/bundle/blobs/424ff273e7ab283d6695d127bb502675627193f5b752d7b43b7524bcfc42f43f +84 -0
- package/vendor/impeccable/bundle/blobs/426c7f5437dd3c23a4cfaef6964dc7f1e038480f92238499b85f3ce7e4472bf4 +111 -0
- package/vendor/impeccable/bundle/blobs/42a71df98075f66e6eb396b69ef3d6b1c3db46d1c1d24b4edc9d15f53d193ecb +111 -0
- package/vendor/impeccable/bundle/blobs/433a79eee3ce4c99e79a7aebe3a6d8ec9ff70216772e0c2ff9dce3a01d672963 +46 -0
- package/vendor/impeccable/bundle/blobs/43852ca5917de66704f73f9019d15482bb1efd92f2eefaeeeae23610b4c0c6a0 +38 -0
- package/vendor/impeccable/bundle/blobs/442749aed338f51c1a3ccfb182c6ade9b74b90590b67984062ac94a5b100e914 +80 -0
- package/vendor/impeccable/bundle/blobs/44a91b3f0810f43829d8584e912812444d15614e4b57ca8070aee7ab899f7c1e +46 -0
- package/vendor/impeccable/bundle/blobs/46250caaec1bd69619a5b28a73cb3c845b319d029b0af9228aaa7001e7e0104a +37 -0
- package/vendor/impeccable/bundle/blobs/464c0c2b33d278375aec66caf95518f5e7ccd0aad1bea3f9dd553ed47815daa1 +325 -0
- package/vendor/impeccable/bundle/blobs/47b3461f6f76db80fdc49fc7542552d65fed24edc8d30d903cb76aefbad0ed05 +84 -0
- package/vendor/impeccable/bundle/blobs/47edbdfaf27073c47033d1ac7dfee881be49e2dcbda7671d1157300481dde6da +1 -0
- package/vendor/impeccable/bundle/blobs/4879f38b23d0a251a63cbb0327e660296194cd2e71eb4da3236c6ebfe5807746 +33 -0
- package/vendor/impeccable/bundle/blobs/48bb7c3b738f57fa4f3f714d7e3e919879036f3e751135a9acc1c5ede1850ea6 +54 -0
- package/vendor/impeccable/bundle/blobs/494d6fcb4701c437597c2ed16a9595af92f3d9ad53c944c96a2fb563bd766af5 +99 -0
- package/vendor/impeccable/bundle/blobs/49a7b37b98fb6e3ef68154174677ff4b9f1715efcffdbf6b30c3535b3e4e302c +54 -0
- package/vendor/impeccable/bundle/blobs/4a7d8695741e2cd354baada215b06798c050aa7a8e1ca6814f0e395e054d1ab1 +145 -0
- package/vendor/impeccable/bundle/blobs/4a8a45a46b79948a64b484edf389aa0b00fc80de855470cbabe3c7c71268f345 +828 -0
- package/vendor/impeccable/bundle/blobs/4acfb9e38f6e09f7484e36fc19704d69eab159436ee9329168be74c493042f22 +111 -0
- package/vendor/impeccable/bundle/blobs/4ad7c5d5821f85c2311ff91746d9b9cf272dbe0a9a5b61687f77681f5a13f812 +69 -0
- package/vendor/impeccable/bundle/blobs/4b0e2eea17f297daa06b17578131775be099ef43addf91007f4b7e295454f64f +105 -0
- package/vendor/impeccable/bundle/blobs/4bceaf3346b6f5100b5a54deaae49a38b975dd134df2836675848f06ff1e7e11 +806 -0
- package/vendor/impeccable/bundle/blobs/4ce929b8cafd37247ea4c148bbe39a9afe15908d1abf4a8248c5122275d16499 +85 -0
- package/vendor/impeccable/bundle/blobs/4df48b7a86d525ad12e7889a1fd16b06ed4b25a9470c359c7193a6d82649262f +54 -0
- package/vendor/impeccable/bundle/blobs/4fb6d2fcc8afaf827a7377ddd604725264fd83be871e2d35062e9d1939144404 +25 -0
- package/vendor/impeccable/bundle/blobs/51e2f8963377f142ebdc9864e0ecc5aa1e5b7d344ed72d0e9d748d2d3d8c71b3 +46 -0
- package/vendor/impeccable/bundle/blobs/521391d55814fdef6cd648ed62154a14d77b324004a0fc2d06c0a4e97857eab2 +806 -0
- package/vendor/impeccable/bundle/blobs/52e861ac390a62c4473ae0cf87ff18dd6d721afa6557910492dd8ed28bd9970d +84 -0
- package/vendor/impeccable/bundle/blobs/532d6387db6f5da1a59dc7d29ce4d8ba6ca044626c367dc16e1cb8b981eb2d9a +104 -0
- package/vendor/impeccable/bundle/blobs/54cb270e8826380caefc8c40642a5d973f27df46bfdb762d822541a0c72a9877 +145 -0
- package/vendor/impeccable/bundle/blobs/54e71283cbd5646021fcd8eaa28d85852ec5288109c306aca9db9e2e4832338e +69 -0
- package/vendor/impeccable/bundle/blobs/5515d5210fbe2ef64e611ef2827a7204b7cea2f9df059f3ea499931f45065d93 +104 -0
- package/vendor/impeccable/bundle/blobs/55e95137b3f9198c1d4dfc425366b82f1ef5f77d602682b2edf91f2ce9296289 +24 -0
- package/vendor/impeccable/bundle/blobs/56500b1f9d2fcec8324d7f448d813048b5831a46d3feeb1055bd3eb17ec3660f +70 -0
- package/vendor/impeccable/bundle/blobs/571526fd5c60a586ff65bdb3f8333f26c36ae227f5f5ece826f4a43b4d4aee0f +325 -0
- package/vendor/impeccable/bundle/blobs/5738bcf9ac21dbb2113fd0c5cc7e4bbfc8174778916ab5843644332b3dbbc36e +46 -0
- package/vendor/impeccable/bundle/blobs/57402ef6fd9d0745f8c60d778f77da83a8b16edf751fa1013598a0f6e5f0f541 +136 -0
- package/vendor/impeccable/bundle/blobs/57e28934208e3eac653ab59c5c6a5e4eace44906d8ac86472988242d777ca5a1 +54 -0
- package/vendor/impeccable/bundle/blobs/581409ace104a81744b7d08f5398a2c207cf76d9e50751f807b4382eaf66454f +46 -0
- package/vendor/impeccable/bundle/blobs/598bfed550954471ba4d257d46b4d608cd82e4cdbf36d07bf93c5f4a563f7727 +89 -0
- package/vendor/impeccable/bundle/blobs/599afc25c1d6d083e4d4e60e1617ab05f6c5ecd52be75473f3788063219aa174 +31 -0
- package/vendor/impeccable/bundle/blobs/5b30a06646ad5e453d6b5ed1b8d446f69fca3cd13b8aeda28f0d0b2cbe8f62d1 +111 -0
- package/vendor/impeccable/bundle/blobs/5b5dcf7029376ee6fbcf13e5975eb828dd1dbf41736c1bd5017dcda8173b1ebc +325 -0
- package/vendor/impeccable/bundle/blobs/5be952da521a2d5fb799c834d14ce5388284374bc23c5efcec737a05aa65d878 +84 -0
- package/vendor/impeccable/bundle/blobs/5c036648951d555e73be63161e5c9edcba146d8e9f64b1604ffdea765cde5d9d +131 -0
- package/vendor/impeccable/bundle/blobs/5c4cd151c97dae824a039211d7ccfba4c572b76d8f079c6186ba1dd5dae7732b +54 -0
- package/vendor/impeccable/bundle/blobs/5ce02fc8f353d7f659535fb80e453963dc047a07c4396adf098fe010b479e7c0 +84 -0
- package/vendor/impeccable/bundle/blobs/5ce0631eacaae6d9fbb23ade26a774a20142cb40d3a8d5608a3fb9dbc4116b60 +806 -0
- package/vendor/impeccable/bundle/blobs/5db17cd013c10dca0012bc18aee7276280941579aa50757682e9ce60c4f7a006 +104 -0
- package/vendor/impeccable/bundle/blobs/5e3616ac45568f239fda3a4764f7d3bf3473b8b5eefd91e402dd9208a4b851d1 +24 -0
- package/vendor/impeccable/bundle/blobs/5f24c5a97b4ffcabc7c432b064cfdd04c7a2ad52f52e765be648dc0aadab8f38 +38 -0
- package/vendor/impeccable/bundle/blobs/5fae7f8a2fc3ddd49ad0a413446dc44daedef5b6b7de5eb935bd2fbfad646d58 +92 -0
- package/vendor/impeccable/bundle/blobs/61c72fdde649bf7f2e0668e48f9d222666c81672100b5f2265940e7aa13c8767 +111 -0
- package/vendor/impeccable/bundle/blobs/633903ba7cb38ed502448a66691fbf655805786a2f06be67043f12294ad08e86 +37 -0
- package/vendor/impeccable/bundle/blobs/64802d14087fc96b38ef3881fef8098b36068d07f3b942031637b18eef3dd2af +84 -0
- package/vendor/impeccable/bundle/blobs/64807d8f43267f4ed879e997834bbf793bd4605ba1dc65f4b545324b660a7063 +80 -0
- package/vendor/impeccable/bundle/blobs/68bc52a604731ca024610051fc763f4d78a53eb2a45d35b40a8c0383043baa63 +86 -0
- package/vendor/impeccable/bundle/blobs/68c5636a7858dd0b5137a9229c15e25fdc2ee40a0f8a4e9d809f78e809256262 +327 -0
- package/vendor/impeccable/bundle/blobs/696c15f96d49a03091b71a408151a3297521f7a8231b98ca9b1103667a0b5f89 +80 -0
- package/vendor/impeccable/bundle/blobs/6989120346e87907d59cc6d4708dd9dee29227ad583fbefee28935395b68ce34 +24 -0
- package/vendor/impeccable/bundle/blobs/69be9bb887f4d8ba4ead24928f9b97d122c796e731652fc0c08f195ab8ec2815 +105 -0
- package/vendor/impeccable/bundle/blobs/6abbf5979db5cb1d7965bf5f91d589e984843069c587f4d1e63aab135bbace0f +37 -0
- package/vendor/impeccable/bundle/blobs/6acc0bf221a4ddc6e5c6438348920b2ca2393b29c4314dbde2cdc23f2b1a9639 +58 -0
- package/vendor/impeccable/bundle/blobs/6bc62a59f6fef0b749927c8d10e9849ab2411199d86d70772a86f8e83ac309f5 +29 -0
- package/vendor/impeccable/bundle/blobs/6bdbc3f745ceee15e10b050f109ce42bbeb53ab3c3b5239257de1d596654dee7 +94 -0
- package/vendor/impeccable/bundle/blobs/6c382f8283756e8a693d832b750f7e4cbff1ca5bdcc3825b2b4ef4da9f21876a +94 -0
- package/vendor/impeccable/bundle/blobs/6c9ce3e27ec4520ead001da3aad2a2ebba481c4e5cd22873db8890259ee579fe +95 -0
- package/vendor/impeccable/bundle/blobs/6d368b679a0ed1815812815de65863b5840d419589dfbda06224c01149240287 +258 -0
- package/vendor/impeccable/bundle/blobs/6d47503587ad6da17ac529f44a96123bbb96a9c91a7a9350b7690fc467561a5d +46 -0
- package/vendor/impeccable/bundle/blobs/6e20041e209e8705d14aa9c4fb8cca3f0d743791de633785e5b46e2dd1ff1a6b +24 -0
- package/vendor/impeccable/bundle/blobs/6e7e3b7c4cf331cdb43f4546c164acd6c45a267ce3289dcfa87e13202d98c747 +104 -0
- package/vendor/impeccable/bundle/blobs/6f1d52863482fa0f6fff877f0cc8f6dd0b4230d28050b0d267e082776e61a332 +37 -0
- package/vendor/impeccable/bundle/blobs/706c68612a7c6b899a0abf0b407eca7cabcd371deae60f830aa38aa86947694e +84 -0
- package/vendor/impeccable/bundle/blobs/713cac92a71ef45e8b700180d881f830096cfe2b0615e79b276ccc4a12c051e0 +80 -0
- package/vendor/impeccable/bundle/blobs/733504a70ed20bcfca9c26c353f7b88f8491d24f3f2fe124dc1e73b28eefa296 +145 -0
- package/vendor/impeccable/bundle/blobs/73549b5536699c915156339976192fb38534bb43158cf9262ff5b89090388c64 +806 -0
- package/vendor/impeccable/bundle/blobs/73bd60faec1d8360753595f1ee9e970b44933448202767d7b0e87c275d399396 +6 -0
- package/vendor/impeccable/bundle/blobs/745b1f74877f6b3445da48af65dc45c66c3daa7738cb9a928aaa900889c2a204 +104 -0
- package/vendor/impeccable/bundle/blobs/74e20b26c29242bbebf79760315f7f0788e001566695618cfc70805484c6f92a +111 -0
- package/vendor/impeccable/bundle/blobs/759bab1d8adc071fdde2efcf6e2157aa4026f3c2b4f3c342a8070bf328011616 +214 -0
- package/vendor/impeccable/bundle/blobs/7848f40e224cf520bd8554943c9816a1ff8c97b1db57af0844e3b1ebb223d91f +416 -0
- package/vendor/impeccable/bundle/blobs/78ac93689928a580c2f90242cbaa96dda3fa4e55ff1f1d00e412b2a62ad85232 +145 -0
- package/vendor/impeccable/bundle/blobs/78c236dadb7e70337dc9dfa67e65fc15b7abed137ad320c16410ddfa7aec34f9 +131 -0
- package/vendor/impeccable/bundle/blobs/79114c6bf78b5a1838fe19bf033f3be85b232560eebf190ff8586aaec34ea170 +105 -0
- package/vendor/impeccable/bundle/blobs/79f85e381d1d6fdc8d39f54e1c8753fccf19b4ba3abb9827b6a7cc61eb376d1f +416 -0
- package/vendor/impeccable/bundle/blobs/7ad26830c7399a118cdbd4465a5426bc1919015aba99fd15959dc6deb8edc8d6 +80 -0
- package/vendor/impeccable/bundle/blobs/7af0a8665057c83b39bca2c8c7427ef2343734f70d4128c377113a6726a1e3b1 +12990 -0
- package/vendor/impeccable/bundle/blobs/7fd1617d5a86b7a1a0bf9d6e291b334ac41a3efce31031eeaef11de7cd7e75b4 +325 -0
- package/vendor/impeccable/bundle/blobs/800cf1c0392b24de7c0a1c6ea6778ecb433dec71c49a150bce96a98477527b2f +1 -0
- package/vendor/impeccable/bundle/blobs/808291e15746c9a64d9ede3ad3f06664b0a72970aa95052e064a96f1bfbed361 +54 -0
- package/vendor/impeccable/bundle/blobs/81666fc7f783b4e3514db6554e713dc0479bd9cdedb06e93d15f8b579aae869a +105 -0
- package/vendor/impeccable/bundle/blobs/824b994782a1fe68a244bbdff7218a2e0854655d90cc0fb5ade7ef9259ba6305 +46 -0
- package/vendor/impeccable/bundle/blobs/82a5e564563333aabb7ab4d2f8c26c785dfe2c2416ac6e9f30cba31440676194 +46 -0
- package/vendor/impeccable/bundle/blobs/835f19a0a3812f3652dd6979a2ce5597f654fd01f26e1b420b92d5f42b997ce4 +121 -0
- package/vendor/impeccable/bundle/blobs/84a06415956986cb215139b3efda7b3c7a5bb6f502a3b3d9300f0744a970e620 +99 -0
- package/vendor/impeccable/bundle/blobs/84df879a0332a56ece4bff1922ecf4f50635951b3c67e67eb46f31bc5d30fa9a +111 -0
- package/vendor/impeccable/bundle/blobs/85b9c2d051de94ee9129c58be111946f73035ca62bbd2a3936f4fa48768fe5cf +145 -0
- package/vendor/impeccable/bundle/blobs/869fa5390b84bfd00d072f5280a9002ea3e3936edf5985241be641a87f03ff7b +41 -0
- package/vendor/impeccable/bundle/blobs/86d10faab62da852aa1f4304157871545c853da708b6fe61c80aefb552c1f300 +84 -0
- package/vendor/impeccable/bundle/blobs/87b3db688c7963898bda8096f7868fed05ec5a0a80d14298e8b906b70cdf9c42 +416 -0
- package/vendor/impeccable/bundle/blobs/88749ebbe9bc87250765a07c2b959508262bd0e276ad60baa53e6e48c3579143 +806 -0
- package/vendor/impeccable/bundle/blobs/896da399bafcffb0623bdd81bb18709d6eab25c9d5917e739c8798f31ff0d076 +46 -0
- package/vendor/impeccable/bundle/blobs/89eb0206a0d9308c6c6a7cc01bc4fd8812d2bd34bb9a831988c5d86fac2c60de +42 -0
- package/vendor/impeccable/bundle/blobs/8a1c872773996dfa1c1eb765ac7ed8e8d41f99d4f12f090b4725b694e85eaa62 +336 -0
- package/vendor/impeccable/bundle/blobs/8a2d316593a631579bbb2f3fcb90d4488f85e97f69698dd2dd4fb50766f537d3 +325 -0
- package/vendor/impeccable/bundle/blobs/8b23562ccc3e41609ce6e67fdad6cc57b6c961964c329eff6975a1b4c5471c0d +111 -0
- package/vendor/impeccable/bundle/blobs/8c06daf096984cf71cf4133ea284dd6eaf503208da828816836ea41dfb69a234 +80 -0
- package/vendor/impeccable/bundle/blobs/8c34f78d71ac02c99303c7e0ca9ef30341aa9ecdeb75804dcba7e36a127914c1 +84 -0
- package/vendor/impeccable/bundle/blobs/8e7bb79db7331b93f99de314dd5599de8587ec0b6c25e26cf1efab25c0777fcb +86 -0
- package/vendor/impeccable/bundle/blobs/8eb39a13e3d3650d4261f8fb06e91d6c0b888ca12ddbd3a5610cd8f0b05ad176 +69 -0
- package/vendor/impeccable/bundle/blobs/8eb466778023fccea641654d662157b123eeb360f4a0875bf6fbe3d93680851c +24 -0
- package/vendor/impeccable/bundle/blobs/8f0867db7c6f6a54348a0d951f198a1bd852cd12505d821e6e1ac6bd42e7fcea +87 -0
- package/vendor/impeccable/bundle/blobs/8f651cb1f8cde0acc5cc511b77fddd98558a527f54974698a1650b0fd7e849a7 +43 -0
- package/vendor/impeccable/bundle/blobs/8ff60b8b5369d364f732f8de10479a39294e65341b3e0b6497b21de5c8e34b2d +806 -0
- package/vendor/impeccable/bundle/blobs/904859c8160b02330b04db23a8eeeb4ef55bcaa10f5208b8d73a1718334633e7 +84 -0
- package/vendor/impeccable/bundle/blobs/910461b1c1f8216155165955c860a884a1e2f557cb38f21ef512ea90ef6503c2 +136 -0
- package/vendor/impeccable/bundle/blobs/9205e222bc6565b37fb504ceec93233c2d2a456802b69d16e6b1c44723907c4c +5 -0
- package/vendor/impeccable/bundle/blobs/93eda27117930692a20f668f1cb0a80b7e14ab865998faba567cd721116081d4 +84 -0
- package/vendor/impeccable/bundle/blobs/943b0d7c9ce4f6802d8440a07b2ad3c61cbd1cc00ab63962bab7eea9ca584d20 +46 -0
- package/vendor/impeccable/bundle/blobs/948326fab89f0d5c07355a06b9b9c30d08bba2e3a673a0151ebbf5a39dff7b9a +40 -0
- package/vendor/impeccable/bundle/blobs/94b4ce6299fea93d9f256b2d25705961a76bc5ea940c56db4145686ebc99df1b +89 -0
- package/vendor/impeccable/bundle/blobs/95b07450ad1ea0b7adc369587b06e52404945bbaa5d87f7491fac7ffd0e6e2ae +11 -0
- package/vendor/impeccable/bundle/blobs/960cb922bc934adbf9192e9428ff6bec1f382038166f02a785939c93b7391067 +139 -0
- package/vendor/impeccable/bundle/blobs/96e2e6bd4fcf9a2c6da65fb029f96d9176308fae2efd9d8653d3b8d838960e07 +44 -0
- package/vendor/impeccable/bundle/blobs/96e508039c719c0815701c36b8418b18baee1967f915fa29b23b84861ae8ea94 +127 -0
- package/vendor/impeccable/bundle/blobs/98afc4c6da252e90c6b783079b6f157bf94a13dd4351392e881edd2a100edf6a +105 -0
- package/vendor/impeccable/bundle/blobs/9a2c08ee2516d2ee87129e7ebe6a0895f9990c9852d1f6fa7e70be9a6a88a659 +234 -0
- package/vendor/impeccable/bundle/blobs/9b2fc50c5062073d097140cde85602bba181e325ec6b9eea1bd3da74582acb9d +46 -0
- package/vendor/impeccable/bundle/blobs/9b85b85443aec09918befb83208c72f475457db8261a8fc5e83ef7eec474c869 +145 -0
- package/vendor/impeccable/bundle/blobs/9deb14303b421b5a9232755b5b9f317716f33e1e211557a98a00a9c409775c4d +145 -0
- package/vendor/impeccable/bundle/blobs/9e161532dc6731581d7a5f35bda5a2865e5248df7aff90e6dfc9221409893e35 +54 -0
- package/vendor/impeccable/bundle/blobs/9eb03b319ce7a2b281bc85ed1b0a437eb05ab2f765fc267354f9f9e6cbfadc25 +806 -0
- package/vendor/impeccable/bundle/blobs/9f1151faffbaadba0ddf5c09a4b2a82c9a12c900a2c1a9dac9863ba9ba0f420e +54 -0
- package/vendor/impeccable/bundle/blobs/a1a56df5fd51be403ca85a2f8054bb6f2bfeee443556c7798c2482e412fb6a09 +54 -0
- package/vendor/impeccable/bundle/blobs/a1dbde501ffabb50f30f28f2de6755b5e91b3d4028292c5a3abd3358106eb457 +37 -0
- package/vendor/impeccable/bundle/blobs/a1e4febca3455787d7c753fe177a150dccde6e742957de400b0307247802d200 +145 -0
- package/vendor/impeccable/bundle/blobs/a423108e7e31a54564e2e0794186394f842625fd9f7d7ce6e6615362511503a2 +93 -0
- package/vendor/impeccable/bundle/blobs/a4cfd2330c8cca94b62986679b3f9e3bb9ada0cb30c2c63c5d19c6039f5a45ae +104 -0
- package/vendor/impeccable/bundle/blobs/a5371492582dbeb69b24a1a2947b256a2da8a4d55917af709bbab6e452d9d23c +145 -0
- package/vendor/impeccable/bundle/blobs/a55f016c046cb6a27c55bd7f346375aeb506a755c4fbca19a5f92dbd42309c23 +59 -0
- package/vendor/impeccable/bundle/blobs/a7045711a1f0dd2cd5bd98e57ff615f638d7e29738bdd618cf15e83fea5993b9 +325 -0
- package/vendor/impeccable/bundle/blobs/a7f036f4217933db8a96cf2f0ba251b15f388839d62bcf95720ce0b7152dd185 +806 -0
- package/vendor/impeccable/bundle/blobs/a8547c8565979894f0c07f92a96ac2a38e681a31fbf155ffeefc7566e185d9c2 +39 -0
- package/vendor/impeccable/bundle/blobs/a8f4056a85706c0c8f80ec48e9b437e198464100aa42786f9252051f4b931c19 +111 -0
- package/vendor/impeccable/bundle/blobs/a9515f6f084d8f51c378eb3cdc6db1f12e06dba2d32fc61b7ee7950fa2586f2e +24 -0
- package/vendor/impeccable/bundle/blobs/a9856cb40da6519b1334bcfc75a4fbe83bef39ca86ee6f3effcb2a96794c627c +127 -0
- package/vendor/impeccable/bundle/blobs/a98b397cedeeaa1da57f3395b3d9b6c1fc477f4247fb9dc13e4da3da588283ff +54 -0
- package/vendor/impeccable/bundle/blobs/a9d2203acd45ca33a13d5c68b02b23ed512425ac15f0e8438318ed124b43729d +61 -0
- package/vendor/impeccable/bundle/blobs/ac695dd89d5f1261004cfa966526f5d5e913c92fa0640d4d71cb42493effad08 +131 -0
- package/vendor/impeccable/bundle/blobs/ad389ab12800738b0e5c97618278b7a824654b25990166ec9f389caa5c3386ca +37 -0
- package/vendor/impeccable/bundle/blobs/add1bee76f897f989166a5b9ad1b38d9173248e29d668d5c885ae9a0eff73861 +105 -0
- package/vendor/impeccable/bundle/blobs/af34b8af89edb10e228c0482754423f48238fce816eceb8703b8781c130da54e +24 -0
- package/vendor/impeccable/bundle/blobs/b0e1a0721a1e47675a8750cfb608138743dd9fa9c047146e5cc8f82b9041be7a +806 -0
- package/vendor/impeccable/bundle/blobs/b14dc725606717be881a058bb691c0af1860cc8ad98d48e5a4789fe1a7de5458 +806 -0
- package/vendor/impeccable/bundle/blobs/b161198874e4e77599bc31691e78790be14bacc2eb03be168c8a7543ece9fbe1 +145 -0
- package/vendor/impeccable/bundle/blobs/b29e10f4506af2277739ad2373bc91c9fff41dbe76c9907f45152b4178cc6b6c +105 -0
- package/vendor/impeccable/bundle/blobs/b2d71ff0df7ed49e06dfc4acfce3d3f7eb48afa68be04763ee8c08354df50a07 +97 -0
- package/vendor/impeccable/bundle/blobs/b2f60e0154bf0e687badc46d8c8420e2118a9a6e21162050722be779dc02cb6d +111 -0
- package/vendor/impeccable/bundle/blobs/b314a0c5bd844f6471ea3031aeb9299674d972fbdd1615d99d16478de437d26d +84 -0
- package/vendor/impeccable/bundle/blobs/b31ff29c7a1ea979c6d039f7e8d17007410697ab49536690dca109f0af3f20f8 +336 -0
- package/vendor/impeccable/bundle/blobs/b3782f2d9215eb0f5df4fe3c0e0bec07cef011e1836d4d0e45ef02bc48d3adde +24 -0
- package/vendor/impeccable/bundle/blobs/b4def5b57733b6ba233570bd5691a536901f8b15479fc0111a2cde56224d0e1a +325 -0
- package/vendor/impeccable/bundle/blobs/b5f4fbb4a044c3f5ec14adc847222488f00fccabbf79ecd0b21084c8d319d616 +105 -0
- package/vendor/impeccable/bundle/blobs/b6022a8c7200e96b0b55c2ff599a01d64123a2f5fe01557d4ca5192a6e0f0b0c +145 -0
- package/vendor/impeccable/bundle/blobs/b6a2ef031313d3848ab2928875298550836f0f9ff7bdf5772e918c5c610ea448 +806 -0
- package/vendor/impeccable/bundle/blobs/b6dfd3df9a371e7d179d365cc1d72c11d4ed91b6507c0e1dbec0843419542f66 +84 -0
- package/vendor/impeccable/bundle/blobs/b7fcd2b03539d1029c8774fa806e6f4c677448e9e97e15f69b066022536c5491 +80 -0
- package/vendor/impeccable/bundle/blobs/b824bb76a657d3edd65e89807dcb21a3679eab39292423066e11368b35afba79 +325 -0
- package/vendor/impeccable/bundle/blobs/b8d49a3cab3428d9f351502e9c2c5802cef187e0d2af626ef3e1cd1837fd06bf +105 -0
- package/vendor/impeccable/bundle/blobs/bad9250670c18d89722563fd747bae4c4bec64d1db0ee09d12d4fea04fe271b8 +84 -0
- package/vendor/impeccable/bundle/blobs/bb069b43c09109d7031b0374e31955749fec657b252d39782f11e8985aca2b51 +131 -0
- package/vendor/impeccable/bundle/blobs/bb36665889124a0b6e15f16045265737449c3bdcf2712cdb08af3cfa01563e2b +14 -0
- package/vendor/impeccable/bundle/blobs/bb59a1f78f3d2aa78e4b024fe203117155f50946a9e4bbe65c1b3b3abdcee356 +104 -0
- package/vendor/impeccable/bundle/blobs/bb9d4bb369216e892eea25adeaefc5a3e09bb4abd31e3475b79e47b3aee2a6af +806 -0
- package/vendor/impeccable/bundle/blobs/bc5f71f1129d0f2c310d913d07c8dc609a1d25644121bd78c308f42d52a0b9e9 +86 -0
- package/vendor/impeccable/bundle/blobs/bc7a5128cfed46148396c08798b6b9429406fbe477e84e331a36ee2840b6b776 +111 -0
- package/vendor/impeccable/bundle/blobs/bcc05ea92faebb5c74037a9d4263a5ce9a56f5ab07c8ab3c59ee704d8cade745 +24 -0
- package/vendor/impeccable/bundle/blobs/bdf9a59beea111ac6f98f5624854feb5a5a1d60b1989edbbfabf3dc6f357a7e6 +105 -0
- package/vendor/impeccable/bundle/blobs/bdfd2a879ca65e437481eac5309f2283da225121630935d89ed902cfdf470c8e +105 -0
- package/vendor/impeccable/bundle/blobs/bea6ebfda78c51b9cf372097a1d77431d0f6bcd96eadec13a2ac95afbb87fb6d +104 -0
- package/vendor/impeccable/bundle/blobs/bead87679caad7c537dd7c04c3bb78be56ac7eec279ad6aad7322f48ff2df2d9 +312 -0
- package/vendor/impeccable/bundle/blobs/bf3b8883f8550744e08754af82a78939ab8b1237e5fad6f38d819e2f17e8a389 +104 -0
- package/vendor/impeccable/bundle/blobs/bf92a4a51b29de9661c5fa82f3d79244718a67d385ef661990f0c4a5b367e843 +104 -0
- package/vendor/impeccable/bundle/blobs/bfc51972fbf387566dc9e29c8b1af479a66ab401fdbce659fae9e6a5a9d85316 +69 -0
- package/vendor/impeccable/bundle/blobs/c02feba25a961a72647ad317aba2d65baeeed53c4cdcc072f25bb37f4d867d43 +84 -0
- package/vendor/impeccable/bundle/blobs/c1cb6877ca99a0c1b38ba0c7d59f32702d3022f6821d8045f7133f7c40b6362f +242 -0
- package/vendor/impeccable/bundle/blobs/c1f3766091019b6f9183bc1d11b1e0fe03d44c168dc05a682c55df32f904dcfd +33 -0
- package/vendor/impeccable/bundle/blobs/c327bf17f2af186f87164dee5fb5468746a9b137f0b604365d531ac9387f3712 +325 -0
- package/vendor/impeccable/bundle/blobs/c36f6aac0ddf52eabbb21df09fd3310540dca6b09e7a4017d18e94c06c469405 +46 -0
- package/vendor/impeccable/bundle/blobs/c3ad2a5fa570876af6645c48d246c664859e19f253d2dc9e0ead34e785d5b40a +84 -0
- package/vendor/impeccable/bundle/blobs/c6a0ec6c28ae55fe539f0f41a507b1638495afd285d6eb15c00245fc8cc7e7fe +42 -0
- package/vendor/impeccable/bundle/blobs/c6f15d20d8d8748c4c475ff70cdb0ee426f2e6c9e7eab6169311f4dffd279ea1 +54 -0
- package/vendor/impeccable/bundle/blobs/c83d6a13fdfb58835c845f61aed3fc6dca17b5569d33387ced840bc13424f354 +84 -0
- package/vendor/impeccable/bundle/blobs/c9284892cb1f21aaeaf93fdf2e9e7a679d05e0baa8ddf309a79a9790d262ad38 +806 -0
- package/vendor/impeccable/bundle/blobs/cb8caddbb3919e5bf7f252143b519fb16db28a244642d937b186cb89962d9201 +828 -0
- package/vendor/impeccable/bundle/blobs/cbd8bd68fa00935dd0f179adb169252629cf7ee443ea9dc7db77e7ef2cf77446 +4 -0
- package/vendor/impeccable/bundle/blobs/cf3ae16765e7b5bc333ef76e24ab37f080e3d62e931c4986158e3cbcda6b9f7a +46 -0
- package/vendor/impeccable/bundle/blobs/d07e3131cdf3e392e59eaa3e2f59fcb0799d9494df4adfee12a21067fb8365ce +37 -0
- package/vendor/impeccable/bundle/blobs/d1366aa4802b364893c2a14b16fe95c3b7fab79f9f69eb272fd1538f7cb1ce2c +105 -0
- package/vendor/impeccable/bundle/blobs/d15a2914d93e07a4956acd5c8b8211af17380f527acd10d8acf4f4920badaaaf +89 -0
- package/vendor/impeccable/bundle/blobs/d1faa55eb956033d28e9f27fd2bc2a9f62c5da0f0abd6534819cc0a04db54d9d +37 -0
- package/vendor/impeccable/bundle/blobs/d1fbd55074abb2251bdaa03749d34acc42c38e46e47549f18f5848df57d43c42 +86 -0
- package/vendor/impeccable/bundle/blobs/d2455359baf5f9e75360c7094e28a16937c8674619e07d58f30d2b5abfd31e53 +105 -0
- package/vendor/impeccable/bundle/blobs/d658c48ffbe0031e8e3b318996cad6ceafe29e40aa50d5bb25e4bf1d6839dc7c +89 -0
- package/vendor/impeccable/bundle/blobs/d6a1fa1689642a6db9027493747d7ed54f9e0cae660472022c0a0a8dfdead3f4 +54 -0
- package/vendor/impeccable/bundle/blobs/d7211a816aa8ca1111701930f7cdab82b4c8caa94c9a37522c1d7945209b01c2 +84 -0
- package/vendor/impeccable/bundle/blobs/d87879329982d608866e4babd31c61438ec34c68483e529761fbf420203eeebd +104 -0
- package/vendor/impeccable/bundle/blobs/daa2a8ecd874f9f940dfd72aaa329318b06bb9be25515be85fea84c871b637a6 +145 -0
- package/vendor/impeccable/bundle/blobs/dcf7340da023e64144af5768b8bf44ecf45b1bfdec12d3b1c9e6618f17f8c60a +131 -0
- package/vendor/impeccable/bundle/blobs/dde1b74aeab3d90320e134f0ed0422bef99917dcab4c1749aa1720a2c94f725f +37 -0
- package/vendor/impeccable/bundle/blobs/de1b7404f4cdfd7b515196afb17b74b1980f0bc88cb8681ae93a76ca48ec7bdb +167 -0
- package/vendor/impeccable/bundle/blobs/df0eb9e9a484fc7b8a0f3e50573a7d7f81e0f17598ac30d9f3fe5a6c6aa5fefa +37 -0
- package/vendor/impeccable/bundle/blobs/df23e9ee5b689a05ed88f42e9a36aaffa2e6e28b1d56e2832acaa1d3603fd363 +105 -0
- package/vendor/impeccable/bundle/blobs/df4f14df1daaad1606b682995f649da19a85debf264092447b3b7ddb8b4bc1ce +147 -0
- package/vendor/impeccable/bundle/blobs/dfd6f341b156bc604e7556b27cba437d5870fbc82d4c673d0127cf18151b2226 +99 -0
- package/vendor/impeccable/bundle/blobs/e02ba7f4417e84b3bd5ec65287c4a14cf163ca3ac6f8ee37d8f709d0c8b0b6d2 +84 -0
- package/vendor/impeccable/bundle/blobs/e21af575fcc0f1df54ae422bea4dfa1e5211422606908919f6a86e19e0d5c20c +89 -0
- package/vendor/impeccable/bundle/blobs/e26ddd48211aae08fe6debf2a7a4308aa081ed224668cde528e451888db0e3e3 +325 -0
- package/vendor/impeccable/bundle/blobs/e2e275495354eeccb7e59af7d74e2ff1f371839bd6aaec1266428760995fb24c +104 -0
- package/vendor/impeccable/bundle/blobs/e2f98c4136d0ab70ec32fcdef58edb20ed8ec4f6cc067e0dae952b22cfd6a471 +24 -0
- package/vendor/impeccable/bundle/blobs/e3c331cc21d9a216e25e08628610ea99c97e150893c3d26e5c0cecc532f26d7b +24 -0
- package/vendor/impeccable/bundle/blobs/e44ca51f24c4736f9aee6024182b0409aa12ec94812b7ec94745e0999ed06a70 +29 -0
- package/vendor/impeccable/bundle/blobs/e49d2b0110c55751da3c965b4ae4d294aa676c961a09f8efbbbf22c1ec7c4fa0 +24 -0
- package/vendor/impeccable/bundle/blobs/e68467ba99684d8c975a8a2725145d29db41d70659c7544ea54cc6632660cea3 +127 -0
- package/vendor/impeccable/bundle/blobs/e71524578eb2bda3b8d2da3d8b8371239a2179c5fa866f9f7e48bcac45a8cd6f +84 -0
- package/vendor/impeccable/bundle/blobs/e71d6b97680084a7ccec01844e658cbd2042aec00da0c91bec62a240ad7dcf6a +145 -0
- package/vendor/impeccable/bundle/blobs/e7dd10af2c3c18c60dc20734d55ff870c323a10dadd337600f7bb980fc6b53c8 +327 -0
- package/vendor/impeccable/bundle/blobs/e802e4f7bdc89050a9c0f2ca506e1d493a2316e6e810c0336c57aa073717ef3e +50 -0
- package/vendor/impeccable/bundle/blobs/e8ee6c08e94b80324173d89d6f4cdc5b4829ea6858b3a11fc186588a490cada4 +46 -0
- package/vendor/impeccable/bundle/blobs/e9da72a13eb3411d6bbb316953022f62abc4434f505e5345907b216eda9f793b +39 -0
- package/vendor/impeccable/bundle/blobs/ea8432c90c30ecb0426662a681ead5c0941113079704e1a766cda09e85b15b4f +111 -0
- package/vendor/impeccable/bundle/blobs/eaa50e8cd95e00a94a257db2bff4eafd820696ba75a08a384a00517c3402924e +325 -0
- package/vendor/impeccable/bundle/blobs/eb3213b9c9f4d6b2f153e7b457f13aa131bcf633695229dad4eac39a920bdf38 +46 -0
- package/vendor/impeccable/bundle/blobs/ec58806f16fc7ba29bccef08f2e158cd00be077ce05d45e943a59bd26dc6dc55 +312 -0
- package/vendor/impeccable/bundle/blobs/ec6338b20047099601e4bac8b2efcd597f800d5e437259f6c15d23090400621b +325 -0
- package/vendor/impeccable/bundle/blobs/edddeb3fad88adec9a055b1bf9d5c75418cbe97a13b1a7f6765e73249e482563 +144 -0
- package/vendor/impeccable/bundle/blobs/ee0a15fcfc244b76b896a2650a17b35e444d4311166b69a3cfa32d11f8f44851 +30 -0
- package/vendor/impeccable/bundle/blobs/ee6d6d127c1c2ab3526d529a8e3698be2185b5e346ac617f37501de2c0698b97 +99 -0
- package/vendor/impeccable/bundle/blobs/ef0b8eca20e1321cf7216fd0bda41ce54b0cca197cfd1b075eb51f3436f59059 +24 -0
- package/vendor/impeccable/bundle/blobs/ef2dde00030580ed2765cbf7be9b2ea4a6f64cb915b804fd6f6abcf38051c7b9 +234 -0
- package/vendor/impeccable/bundle/blobs/f0c4d0615c7d520dfc2536c01cc7f1f3aab9b60ddc399ba01289fe62edb12370 +24 -0
- package/vendor/impeccable/bundle/blobs/f1601095679d7d8cf6fef6845598c70d8734190709c1404fa0026e28fef2faaa +325 -0
- package/vendor/impeccable/bundle/blobs/f173ff03f989f162cee815feb2d8ca72daf00019c48694d89db16d52171a79c0 +24 -0
- package/vendor/impeccable/bundle/blobs/f424dafa190533cd32c0bc3e4131d0c472d58e16bb191eab14f0ae73c2cea917 +37 -0
- package/vendor/impeccable/bundle/blobs/f597742c8e5562263d3bce725cb55e920d8c2c60223f41a632d523ca30cdd12b +111 -0
- package/vendor/impeccable/bundle/blobs/f672ef8251a3ed4051a053d30819664951b17540b2899acd27d20e500c234abc +258 -0
- package/vendor/impeccable/bundle/blobs/f7916d0113da7a19d4e03c113d5563d181457e44f1646ecab9191cfee5ae776d +89 -0
- package/vendor/impeccable/bundle/blobs/f7a9e3f30fe07b0d98351730e9895d50bba96dd42fe91c0d9b9a76ef62e53322 +80 -0
- package/vendor/impeccable/bundle/blobs/f7b854effc55c8f07e40a415e0d6b5c333f4042fbc849fac73d52619c8d053a1 +54 -0
- package/vendor/impeccable/bundle/blobs/f964506c0fae87b3c2c1db7016ddc9be9ef970bbcf5548d684b997b5d5991586 +33 -0
- package/vendor/impeccable/bundle/blobs/f97a6891c80bbbc728edefcf4b638d1a823b38f3cb16ecd0fbb717734cc5c0c8 +46 -0
- package/vendor/impeccable/bundle/blobs/f9cbbad0cc08fb9bd69d4d3046067c6cf820b89cdaf7af8c81c671fb0a62b6ae +54 -0
- package/vendor/impeccable/bundle/blobs/fce6688138d2ceb1e3d2cde5231f54b1d8dc8748b4c95a7919aa83b6f924cf96 +127 -0
- package/vendor/impeccable/bundle/blobs/fd5579dbae1fc2495b7dddde48df9673acebd27953bbb56d506d3b470375c9e9 +37 -0
- package/vendor/impeccable/bundle/blobs/fe91fcf28638f95577af481a50edaf339d6c9a3ad3b9fa477bc81c116b8bc392 +139 -0
- package/vendor/impeccable/bundle/blobs/ff0ab1361f52d70d3ff0d23090d78794a75afdfa2f8c1cee5491dee69215faaa +105 -0
- package/vendor/impeccable/bundle/blobs/ff882c59c9aced92338aa194cc99a521ea2f083fd22eef3b1c1225e06bc72f66 +86 -0
- package/vendor/impeccable/bundle/manifest.json +1139 -0
- package/skills/dev-plan/evals/evals.json +0 -72
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
# 构建与打包
|
|
2
|
+
|
|
3
|
+
发布之前的一切。这里的每一条都对应一种「构建全绿、线上坏掉」的具体死法。
|
|
4
|
+
|
|
5
|
+
依赖怎么装、包从哪来、构建器怎么配 —— 那是你这个 repo 自己的事,本文不管。
|
|
6
|
+
本文只管**产物要长成什么形状**,因为那是门户会校验、会拒收、会静默画错的部分。
|
|
7
|
+
|
|
8
|
+
## 1. `base` 必须是 `/apps/<listingKey>/`
|
|
9
|
+
|
|
10
|
+
生产上产物被同源挂在门户的 `/apps/<key>/` 子路径下(同源是有意的:宿主 iframe 的生产 CSP 是
|
|
11
|
+
`frame-src 'self'`,跨源地址上不了生产)。dev server 却服务在根路径,所以 `base` 是**双态**的:
|
|
12
|
+
|
|
13
|
+
```ts
|
|
14
|
+
// vite
|
|
15
|
+
export default defineConfig(({ command }) => ({
|
|
16
|
+
base: command === 'build' ? '/apps/<listingKey>/' : '/',
|
|
17
|
+
// …
|
|
18
|
+
}));
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
漏掉 `build` 那一态的症状很有欺骗性:iframe 里页面 200(宿主拿得到 `index.html`),
|
|
22
|
+
但里面每个 `/assets/…` 都打到站点根 → 404 → **白屏,控制台一片红**。
|
|
23
|
+
构建、类型检查、单测全绿——这条只有产物形状检查或人眼看得出来,所以预检脚本第一件事就查它。
|
|
24
|
+
|
|
25
|
+
非 vite 的构建器同理:webpack 是 `output.publicPath`,Next 静态导出是 `basePath` + `assetPrefix`。
|
|
26
|
+
判据统一:**`index.html` 里所有根绝对路径都要以 `/apps/<key>/` 开头。**
|
|
27
|
+
|
|
28
|
+
客户端路由也要跟着走子路径(React Router 的 `basename`),否则刷新二级页面会 404。
|
|
29
|
+
|
|
30
|
+
## 2. 产物形状:tar 根直接是 `index.html`
|
|
31
|
+
|
|
32
|
+
门户解包后在**根目录**找 `index.html`,找不到就 `VALIDATION_FAILED` 拒收。
|
|
33
|
+
|
|
34
|
+
```bash
|
|
35
|
+
tar czf dist.tgz -C dist . # ✅ 根下就是 index.html、assets/…
|
|
36
|
+
tar czf dist.tgz dist # ❌ 全套在 dist/ 一层下面,拒收
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
`release-cli` 传目录时已经用第一种形状打好了,只有自己 `curl` 时才需要手打。
|
|
40
|
+
|
|
41
|
+
其它约束:**≤64MB**(超了先查 source map 与未压缩素材);空文件会被当成「构建没产出」拒掉,
|
|
42
|
+
而不是当成「只发版本号」——这是有意的,否则一条坏流水线会报成功。
|
|
43
|
+
|
|
44
|
+
## 3. 不需要 CORS,但可能需要 CSP
|
|
45
|
+
|
|
46
|
+
前端**从不直连自己的后端**:请求经宿主的 `postMessage` 代理由宿主同源发出。
|
|
47
|
+
所以别去要 CORS 放行——要了也没用。
|
|
48
|
+
|
|
49
|
+
反过来,如果前端要直连**自己的域名 / 对象存储 / 第三方**,那是浏览器直发的请求,受 per-App CSP 管。
|
|
50
|
+
XHR/fetch 那一类可以由 App manifest 的 `embedCsp.connectSrc` 放行;字体、样式表、图片走的是
|
|
51
|
+
`font-src` / `style-src` / `img-src`,不在这个字段的能力范围内。**manifest 不在自助面里**——
|
|
52
|
+
要放行得找平台管理员,改完下次反代 reload 生效。
|
|
53
|
+
|
|
54
|
+
所以最省事的做法是**把资源打进产物、不外链**(字体尤其:CDN 字体是这里最常见的外链,
|
|
55
|
+
而它恰好是 `connectSrc` 放行不了的那一类)。预检脚本会把产物里的外链列出来提醒。
|
|
56
|
+
|
|
57
|
+
## 4. 发之前在真门户里看一眼
|
|
58
|
+
|
|
59
|
+
| 通路 | 怎么用 | 硬约束 |
|
|
60
|
+
| --- | --- | --- |
|
|
61
|
+
| **本地一盒(devkit 卷挂载)** | 平台侧起一个真门户,把你的 `dist` **绝对路径**挂进去 | 同源,走生产同款 CSP;**无 HMR**,改前端要重新 build |
|
|
62
|
+
| **cross-origin vite dev** | listing 的 `embedUrl` 临时指向 `http://localhost:53xx`,起你仓的 dev server | 仅门户 dev 的 CSP 放行本地端口;**生产 `frame-src 'self'`,此路永远上不了生产** |
|
|
63
|
+
|
|
64
|
+
第二条最容易留后患:调试时往代码里写死的 `localhost:53xx` 如果跟着产物发上生产,
|
|
65
|
+
CSP 会静默拦掉,症状是「本地好好的,线上那个功能点了没反应」。预检脚本会扫这个。
|
|
@@ -0,0 +1,315 @@
|
|
|
1
|
+
# 发布面:令牌、端点、字段、CI
|
|
2
|
+
|
|
3
|
+
## 0. 五项输入全部放同一份本地配置文件
|
|
4
|
+
|
|
5
|
+
| 输入 | 键名 | 说明 |
|
|
6
|
+
| --- | --- | --- |
|
|
7
|
+
| `listingKey` | `LISTING_KEY` | 一个 repo 一个 App,从头到尾不变。每条命令手打一次纯噪音,还容易打成另一个 App —— 那会直接 404 |
|
|
8
|
+
| 目标门户地址 | `TARGET_XGENT_PLATFORM` | 本次发版打哪一台(旧名 `XGENT_PORTAL_URL` 仍认)。`--portal` 可覆盖 |
|
|
9
|
+
| 目标门户的发布令牌 | `XGENT_RELEASE_TOKEN` | `xrel_…`,按 App 绑定。`--token` 可覆盖 |
|
|
10
|
+
| 清单目录地址 | `MANIFEST_STORE` | 可选。不配 ⇒ 不投目录(整步跳过,不报错也不提示) |
|
|
11
|
+
| 目录的发布令牌 | `MANIFEST_STORE_TOKEN` | 可选。不配 ⇒ 回落 `XGENT_RELEASE_TOKEN`(两个地址是同一台时那就是对的那把) |
|
|
12
|
+
|
|
13
|
+
配置文件按顺序取第一个存在的:`--config <path>` / `$XGENT_REGISTRY_CONFIG` /
|
|
14
|
+
`./.xgent-registry.env` / `${XDG_CONFIG_HOME:-~/.config}/xgent/registry.env` / `~/.xgent-registry.env`。
|
|
15
|
+
格式是 `KEY=value`;同一份文件也放你镜像推送那侧要的键(`REGISTRY` / `PULLER_AUTH`)。
|
|
16
|
+
同名环境变量优先,命令行参数又优先于环境变量 —— **CI 里注入环境变量即可覆盖**。
|
|
17
|
+
|
|
18
|
+
前两个位置是**显式指定**的:指到一个不存在的文件会直接报错,不会悄悄回退到别的候选——
|
|
19
|
+
回退意味着你可能在读另一个 App 的身份,而命令照样成功,只是发错了地方。
|
|
20
|
+
|
|
21
|
+
### 令牌为什么放这里(这条推翻了旧规则)
|
|
22
|
+
|
|
23
|
+
旧规则「密钥别落盘、走 `--token` 或 env」是按**人手敲命令**的模型写的:env 短暂、文件长存。
|
|
24
|
+
今天发版几乎都是**经 skill 让 agent 驱动 CLI**:强制走 `--token`,agent 必须先把令牌**取出来**
|
|
25
|
+
才能传进去 —— 于是它进 agent 上下文、进对话记录、进工具调用日志,还出现在命令行里(同机
|
|
26
|
+
其它进程 `ps` 可见)。**那比落盘更不安全,而且泄露面不可撤销**(记录已经写出去了)。
|
|
27
|
+
让 CLI 自己读文件,令牌就**从不经过 agent**。这个文件本来就是凭证文件(`PULLER_AUTH` 一直在里面)。
|
|
28
|
+
|
|
29
|
+
护栏没有删,换成了真正管用的两条 —— CLI 每次运行都替你查,**只 warn 不阻断**:
|
|
30
|
+
|
|
31
|
+
| 检查 | 触发 | 修法 |
|
|
32
|
+
| --- | --- | --- |
|
|
33
|
+
| 文件权限 | mode 允许同组 / 其他人读 | `chmod 600 .xgent-registry.env` |
|
|
34
|
+
| 有没有被忽略 | `git check-ignore` 判定它**未被忽略**(这才是真会泄露的场景) | `echo '.xgent-registry.env' >> .gitignore` |
|
|
35
|
+
|
|
36
|
+
(做成硬失败只会逼人把令牌搬回命令行 —— 那正是要消灭的那件事。)
|
|
37
|
+
|
|
38
|
+
```bash
|
|
39
|
+
# .xgent-registry.env(chmod 600,且必须 .gitignore)
|
|
40
|
+
LISTING_KEY=my-app
|
|
41
|
+
TARGET_XGENT_PLATFORM=https://portal.example.com
|
|
42
|
+
XGENT_RELEASE_TOKEN=xrel_…
|
|
43
|
+
MANIFEST_STORE=https://catalog.example.com
|
|
44
|
+
MANIFEST_STORE_TOKEN=xrel_…
|
|
45
|
+
```
|
|
46
|
+
```bash
|
|
47
|
+
npx @xgent/release-cli status # 地址与令牌都不用写在命令里
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
## 0a. 一次 publish 打两个端点
|
|
51
|
+
|
|
52
|
+
| 站 | 端点 | 失败语义 |
|
|
53
|
+
| --- | --- | --- |
|
|
54
|
+
| 第一站(真发版) | `POST <TARGET_XGENT_PLATFORM>/api/market/release/<key>` | **必成**:失败 ⇒ 整体非零退出,且**不投目录** |
|
|
55
|
+
| 第二站(投目录) | `PUT <MANIFEST_STORE>/api/market/catalog/<key>` | **best-effort**:连不上 / 非 2xx / `ok:false` 都只 warn,退出码不变 |
|
|
56
|
+
|
|
57
|
+
两个地址相同时**照常两次调用** —— 它们是不同端点,不会互撞。
|
|
58
|
+
没带 `--manifest` 就不投(没有清单可投),CLI 会提示一句 —— 所以**标准发布命令要带上它**。
|
|
59
|
+
|
|
60
|
+
第二站送的是这次发版**生效后**的那一份清单,即原始字节**再套上 `--version` / `--image`
|
|
61
|
+
的覆盖**。这不是「改了内容」,恰恰是为了两站说同一句话:第一站的服务端本来就取
|
|
62
|
+
`body.version ?? manifest.version` 与 `body.image ?? manifest.deployDescriptor.image`,
|
|
63
|
+
批准时还会把这两个值嫁接回 manifest 才落 listing。原样投原始字节的结果是:目标门户
|
|
64
|
+
已经是 `$VER` / 新镜像,目录还停在清单里写的旧值,而 `onebox.sh add` 正是照
|
|
65
|
+
`deployDescriptor.image` 拉镜像 —— 别人起出来的是旧容器,且没有任何信号。
|
|
66
|
+
|
|
67
|
+
一个刻意的例外:目标门户回 `PROPOSAL_PENDING`(你上一版还在待审队列里)时,
|
|
68
|
+
**目录照投**。那是目标门户的**队列状态**,不是「这份清单是什么」的结论;不投的话,
|
|
69
|
+
目标门户与目录是同一台时,一条待审提案会把目录永久冻在提交它的那一版。
|
|
70
|
+
那次 `publish` 的退出码仍是非 0 —— 发版确实没成。
|
|
71
|
+
|
|
72
|
+
目录里那份是**净化过的公开副本**:`serviceAccount` 只留 `clientId`,`exchangeInitiatorSecret`
|
|
73
|
+
与 `deployDescriptor` 的 `env` / `envFile` / `hostPort` 一律剔除(密钥与单部署事实不跨部署共享)。
|
|
74
|
+
它是**只读投影**:不参与任何门户的治理判定、不回写任何 listing、不触发任何部署。
|
|
75
|
+
唯一的消费者是开发环境 —— 别人 `onebox.sh add <key> --from <目录地址>` 时从这里拉清单。
|
|
76
|
+
|
|
77
|
+
## 1. 发布令牌 `xrel_…` 的语义
|
|
78
|
+
|
|
79
|
+
- 平台管理员在 **控制台 › 应用清单 › 编辑清单 › 发布令牌** 签发,**明文只显示一次** → 直接进 CI secret。
|
|
80
|
+
- **一枚令牌只对一个 listing 有效**。拿它去动别的 key 一律 `404`——门户**故意不区分**
|
|
81
|
+
「不属于你」和「那个 App 不存在」,免得令牌变成探测别人 App 是否存在的工具。
|
|
82
|
+
- 可随时吊销、可设过期时间。**每次调用实时查库**,所以吊销后下一次调用就 `401`,没有缓存窗口。
|
|
83
|
+
- 它能**单方面生效**的仍只有自动通过档:`dist` · `version` · `deployDescriptor.image` ·
|
|
84
|
+
展示字段 ·「值是 App 内路由 `/…`」的 `helpEntry`(外站 `https://…` 那一形态进审核档)。
|
|
85
|
+
治理变更只能**提议**(随 `manifest` 提交,进平台审核队列,批准前库里一字不动)。
|
|
86
|
+
它也**读不回** `descriptor.env`——响应体里永远没有它,因为那里面是生产密钥。
|
|
87
|
+
|
|
88
|
+
## 2. 端点
|
|
89
|
+
|
|
90
|
+
```
|
|
91
|
+
POST /api/market/release/:key 发布(落成一条发布提案)
|
|
92
|
+
GET /api/market/release/:key whoami(校验令牌,只返回持有者本就知道的东西)
|
|
93
|
+
GET /api/market/release/:key/status 只读:版本 / 产物 digest / 部署状态 / 最近一条提案
|
|
94
|
+
GET /api/market/release/:key/proposals/:id 只读:单条提案状态(--wait 轮询用)
|
|
95
|
+
DELETE /api/market/release/:key/proposals/:id 撤回自己【待审】的提案(提交方的权利)
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
认证只有一件事:`Authorization: Bearer xrel_…`。没有 cookie、没有 session、没有 CSRF 面。
|
|
99
|
+
|
|
100
|
+
`curl` 兜底(`@xgent/release-cli` 取不到时用这个,能力完全等价):
|
|
101
|
+
|
|
102
|
+
```bash
|
|
103
|
+
tar czf dist.tgz -C dist . # 根下就是 index.html
|
|
104
|
+
curl -X POST "$XGENT_PORTAL_URL/api/market/release/<key>" \
|
|
105
|
+
-H "authorization: Bearer $XGENT_RELEASE_TOKEN" \
|
|
106
|
+
-F version=1.4.2 \
|
|
107
|
+
-F image=<key>:1.4.2 \ # 可选;没有后端的纯前端 App 省掉
|
|
108
|
+
-F dist=@dist.tgz \ # 只 bump 版本/换镜像时可省掉
|
|
109
|
+
-F manifest=@deploy/portal/app.manifest.json # 可选;清单变更/首次接入时带上
|
|
110
|
+
```
|
|
111
|
+
|
|
112
|
+
> `deploy/portal/app.manifest.json` 是【你自己 App 仓】的惯例路径,不是门户仓文件 ——
|
|
113
|
+
> 你的 manifest 只存在于你自己的 repo,按你实际存放的位置传即可。
|
|
114
|
+
|
|
115
|
+
`whoami` 就是同一路径的 `GET`,带同一个 header。
|
|
116
|
+
|
|
117
|
+
**前两条是发布面的底线,第三条不是**:只读面比发布面晚一版上线,老门户上打它得到
|
|
118
|
+
`404 NOT_FOUND / 路由不存在`——与「令牌不是这个 key 的」**响应体完全相同**(门户故意不区分,
|
|
119
|
+
免得令牌能用来探测别人的 App 是否存在)。分诊只有一条路:同一枚令牌先打 whoami,
|
|
120
|
+
`200` 就说明是门户没有这个面。见 `troubleshooting.md`。
|
|
121
|
+
|
|
122
|
+
## 3. 字段:四个 multipart 字段 + 定级
|
|
123
|
+
|
|
124
|
+
| 字段 | 必填 | 说明 |
|
|
125
|
+
| --- | --- | --- |
|
|
126
|
+
| `version` | (或 manifest.version) | 字母/数字/`. _ + -`,≤64 字符。**每次都要 bump** |
|
|
127
|
+
| `dist` | | multipart 文件,`.tar.gz`,根下 `index.html`,≤64MB。省掉 = 这次不换产物 |
|
|
128
|
+
| `image` | | 镜像引用。省掉 = 不换镜像 |
|
|
129
|
+
| `manifest` | | `app.manifest.json` 全文(文件或 JSON 字符串)。省掉 = 只发三件(全自动档) |
|
|
130
|
+
|
|
131
|
+
**这四个之外的散字段仍然直接拒**(`200 + VALIDATION_FAILED`,拒在写库之前)——
|
|
132
|
+
治理变更只能经 manifest 整份提交,没有「往表单里塞一个 scopes」这条路。
|
|
133
|
+
|
|
134
|
+
**定级唯一判据:这次提交有没有改变权限面。** manifest 里与当前 listing 相比有治理差异
|
|
135
|
+
(scopes / aclManifest / dependencies / exchangeTargets / serviceScopes /
|
|
136
|
+
privilegedServiceScopes / usageMetrics / serviceBaseUrl /
|
|
137
|
+
seat* / scopeLabels / embedUrl / embedCsp / type / 部署形态…,以及**任何门户不认识的字段**)
|
|
138
|
+
⇒ 提案 `pending` 等平台审批;只有版本/产物/镜像/展示字段的差异 ⇒ `auto_approved` 当场生效。
|
|
139
|
+
其中 `privilegedServiceScopes`(平台特权 scope 的申请,如 `seats.read`)是最高一档:
|
|
140
|
+
审批人要**逐条勾选确认**才能批准 —— 每条都带上说清用途的 `reason`,等待会短很多;
|
|
141
|
+
已持有的特权 scope 幂等重放不再进审。
|
|
142
|
+
**提交即拒**(连提案都不落)的只有四类:manifest 携带密钥值(SA secret / descriptor.env)、
|
|
143
|
+
SERVICE_ONLY scope 写进 `serviceScopes`(申请要走 `privilegedServiceScopes`)、形状非法
|
|
144
|
+
(含 `usageMetrics` 的 key 不在你的 listingKey 命名空间、或声明金额单位),
|
|
145
|
+
以及**该 App 已有一条待审提案**(`PROPOSAL_PENDING`——
|
|
146
|
+
待审期间连纯 dist/version 的自动档也拒,否则「后交先生效」,批准旧提案时会把后发的版本滚回去)。
|
|
147
|
+
另注意 `serviceAccount.clientId` 归属也算权限面:声明一个已归属别的 App 的 clientId ⇒
|
|
148
|
+
`pending`,且批准也会在生效时被拒 —— clientId 用自己的。
|
|
149
|
+
|
|
150
|
+
## 4. 响应怎么读
|
|
151
|
+
|
|
152
|
+
**业务失败是 `200 + { ok:false, error }`**(门户全局约定:HTTP 状态码只表达传输/路由层)。
|
|
153
|
+
所以只看 HTTP 状态码会把「产物形状不对」读成成功。判据固定是 `body.ok`。
|
|
154
|
+
|
|
155
|
+
只有三种情况不是 200:`401`(令牌无效/吊销/过期)、`404`(令牌不是为这个 key 签发的),以及真故障。
|
|
156
|
+
|
|
157
|
+
成功时 `data` 里(先看 `status`:`"applied"` = 已生效;`"pending"` = 等审批,此时只有
|
|
158
|
+
`proposalId` / `kind` / `governance`(待审字段清单)有意义):
|
|
159
|
+
|
|
160
|
+
| 字段 | 含义 |
|
|
161
|
+
| --- | --- |
|
|
162
|
+
| `proposalId` / `status` / `kind` | 本次提案:id · applied/pending · register(首次)/update |
|
|
163
|
+
| `governance` | pending 时的待审字段清单 |
|
|
164
|
+
| `version` | 落库后的版本号 |
|
|
165
|
+
| `distDigest` | 本次产物的 sha256(`null` = 这次没换产物)。**控制台上「线上跑的是哪一版」靠它** |
|
|
166
|
+
| `distFiles` | 产物顶层条目数 |
|
|
167
|
+
| `distStores` | 落了哪些存储 |
|
|
168
|
+
| `image` / `imageChanged` / `redeployQueued` | 镜像引用、是否变了、是否排了重部署任务 |
|
|
169
|
+
|
|
170
|
+
## 5. 原子性:坏包碰不到线上那份
|
|
171
|
+
|
|
172
|
+
一次调用内:解压 → 验根 `index.html` → 落 staging → rename 换上 → **同一次落库** `version` + `distDigest`。
|
|
173
|
+
被拒时 `version` 与 `digest` 都不动,线上产物原封不动。
|
|
174
|
+
|
|
175
|
+
所以「发布失败了,线上是不是已经半坏了」这个担心不成立——失败就是没发生。
|
|
176
|
+
反过来也意味着:**版本号与产物永远同进同退**,不会出现「产物换了版本号没换」的漂移。
|
|
177
|
+
|
|
178
|
+
## 6. `--image` / `image`
|
|
179
|
+
|
|
180
|
+
给有后端的 App 用。三条硬约定:
|
|
181
|
+
|
|
182
|
+
1. **`<name>` 就是你的 App key**,不是 `<key>-server`。写错了拼出来的仓库根本不存在,
|
|
183
|
+
而这件事只有在真正 `docker pull` 的那一刻才会暴露(往往是切换窗口里)。
|
|
184
|
+
2. **只写相对名**(`<key>:<tag>`),仓库前缀由门户在部署时拼。把前缀写死进来,换仓库就得改你的仓。
|
|
185
|
+
判据与门户一致:含 `/` 且首段含 `.` 或 `:` 或等于 `localhost` 才算完整引用——
|
|
186
|
+
所以 `my-app:1.4.2` 是相对名,`hub.example.com/x/y:1` 不是。
|
|
187
|
+
3. **tag 不可变,新版本 = 新 tag。** 同 tag 覆盖推送在门户侧看不出变化(引用没变),不会触发换版。
|
|
188
|
+
|
|
189
|
+
前提:该 App 已由平台管理员配了 `deployDescriptor`。没有的话这一项直接被拒——
|
|
190
|
+
「给一个没有部署描述的 App 加镜像」等于决定它从此是个被部署的后端,那是治理动作不是发布动作。
|
|
191
|
+
|
|
192
|
+
镜像本身先 `docker push` 到平台 registry。**推送那一步不在本 skill 的范围内**,它有自己的流程与预检
|
|
193
|
+
(跨境链路、架构、tag 不可变、保留策略),照那边的规矩来。这里只提三条会直接影响发布结果的:
|
|
194
|
+
|
|
195
|
+
- **仓库域名不写死。** 它是内部信息,由各仓的本地配置提供(形如 gitignore 掉的 `.xgent-registry.env`,
|
|
196
|
+
CI 里用同名环境变量注入)。所以你的 `--image` 只写相对名,域名从头到尾不该出现在你的发布脚本里。
|
|
197
|
+
- **robot 密钥的权限是项目级**,不是「只能推你那一个 repository」——密钥泄露等于同项目下所有 App
|
|
198
|
+
的 repository 都能被推拉。别放公共 runner。能推别人的不等于可以推。
|
|
199
|
+
- **只发单 arch 的话必须是 amd64**(两条生产链路都是 amd64);Apple Silicon 上直接 build 出来是 arm64,
|
|
200
|
+
**推得上去、拉得下来、容器起不来**(`exec format error`),看着像仓库坏了其实不是。
|
|
201
|
+
要多 arch 用 `docker buildx --platform`。
|
|
202
|
+
|
|
203
|
+
引用一变,门户排一条重部署任务:pm2 侧**先拉后换**(拉不到则旧容器原封不动、任务转 failed),
|
|
204
|
+
K8s 侧滚动更新(旧 Pod 在新 Pod ready 前不下线)。**服务不会因为一次发布断掉。**
|
|
205
|
+
|
|
206
|
+
## 6.1 `--wait` / `--wait-review` / `status`:确认换版真的落地了
|
|
207
|
+
|
|
208
|
+
`publish` 返回 `redeployQueued: true` 只说明**任务排上了**。前端产物是同步的(那一刻已在线上),
|
|
209
|
+
换容器不是——它可能几十秒后才完成,也可能失败(镜像没 push、robot 没权限、tag 打错)。
|
|
210
|
+
不确认这一步,CI 会绿着退出而线上还跑着旧容器。
|
|
211
|
+
|
|
212
|
+
```bash
|
|
213
|
+
# 发布并等到换版结束(默认 1800s,可写 --wait 600)
|
|
214
|
+
npx @xgent/release-cli publish --key $KEY --version $VER --dist dist/ --image $KEY:$VER --wait
|
|
215
|
+
|
|
216
|
+
# 必须卡在人工审批上的流水线,再加一个开关(默认 1800s)
|
|
217
|
+
npx @xgent/release-cli publish --key $KEY --manifest app.manifest.json --wait-review
|
|
218
|
+
|
|
219
|
+
# 或任何时候单查
|
|
220
|
+
npx @xgent/release-cli status --key $KEY
|
|
221
|
+
```
|
|
222
|
+
|
|
223
|
+
**两个开关等的是两件事(CLI 0.5.0 起):**
|
|
224
|
+
|
|
225
|
+
| 开关 | 等什么 | 提案落成待审时 |
|
|
226
|
+
| --- | --- | --- |
|
|
227
|
+
| `--wait [秒]` | 只等**容器换版** | 打印提案号,**退出 0 立即返回** |
|
|
228
|
+
| `--wait-review [秒]` | 先等**人工审批**,批准且换了镜像再等换版 | 轮询到终态;被拒 / 撤回 / 超时 ⇒ 非零退出 |
|
|
229
|
+
|
|
230
|
+
`--wait` 之所以不再等审批:审批是分钟到小时级的人的动作,而**提案落成的那一刻平台管理员就
|
|
231
|
+
收到了站内 + 邮件通知**,把 runner 挂在上面既烧机器又什么都没保证。
|
|
232
|
+
⚠️ 从 0.4.x 升上来:以前写 `--wait` 指望它等审批的流水线,现在会在提案待审时**直接绿**——
|
|
233
|
+
要保持旧行为,把那一处改成 `--wait-review`。
|
|
234
|
+
|
|
235
|
+
`--wait` 成功 → 打印实际在跑的镜像引用、零退出;失败或超时 → 打印原因、**非零退出**。
|
|
236
|
+
没换镜像时它直接跳过,不空等。镜像来源不限 `--image`:**manifest 的
|
|
237
|
+
`deployDescriptor.image` 换了镜像同样会等**(`--wait-review` 下则是提案批准后接着等)。
|
|
238
|
+
判据看的是最近一条 `deploy|redeploy` 任务,不掺 `provision-tenant`(那是某个租户的 bootstrap,
|
|
239
|
+
与镜像滚动无关)。
|
|
240
|
+
|
|
241
|
+
门户上没有这个面时,`status` 与 `--wait` 都用不了:产物那半边照旧由 `publish` 的返回体
|
|
242
|
+
(`version` / `distDigest` / `redeployQueued`)交代清楚,容器那半边只能找平台管理员看
|
|
243
|
+
「服务部署」面板。**别用「命令退出码 0」替代这半边的结论。**
|
|
244
|
+
|
|
245
|
+
`status` 返回:
|
|
246
|
+
|
|
247
|
+
| 字段 | 含义 |
|
|
248
|
+
| --- | --- |
|
|
249
|
+
| `version` / `distDigest` / `distUpdatedAt` | 线上现在是哪一版、哪一份产物 |
|
|
250
|
+
| `image` | 你**声明**的相对引用(不是解析后的完整引用) |
|
|
251
|
+
| `deployment` | `null` = 纯前端 App,没有后端可等 |
|
|
252
|
+
| `deployment.status` | `not_deployed` / `deploying` / `ready` / `failed` |
|
|
253
|
+
| `deployment.deployedImageRef` | **实际**在跑的完整引用(含仓库前缀)——「为什么还是旧版」靠它自查。CLI 默认只打印末段(域名是内部信息,没必要每次构建都刷进 CI 日志),**只在与声明值对不上时**才展开完整引用——那正是需要看清来源的场合,同名 tag 也可能来自另一个仓库 |
|
|
254
|
+
| `deployment.lastJob` | 最近一条部署任务的 `action` / `status` / `error` / `finishedAt` |
|
|
255
|
+
|
|
256
|
+
这个面是**只读**的,且仍在同一条边界内:同一枚令牌、同样绑死一个 listing、跨 key 一样 404。
|
|
257
|
+
`descriptor.env` 读不回来——**连藏在部署错误文本里的那份也不行**,出口会对它做值级抹除,
|
|
258
|
+
所以错误消息仍然可读(`manifest unknown` 之类留着),只有密钥被换成 `«redacted»`。
|
|
259
|
+
|
|
260
|
+
## 7. CI 范式
|
|
261
|
+
|
|
262
|
+
`listingKey` 从仓里的配置文件来,所以 CI 里不用重复它。先在 CI 中准备好本 skill,将 `SKILL_DIR` 设为它的 `SKILL.md` 所在目录;以下步骤在 App repo 根目录执行。
|
|
263
|
+
|
|
264
|
+
```yaml
|
|
265
|
+
env:
|
|
266
|
+
SKILL_DIR: "<本 skill 的 SKILL.md 所在目录>"
|
|
267
|
+
# 仓里那份 .xgent-registry.env 通常不进 CI —— 在这里注入即可(环境变量优先于文件)。
|
|
268
|
+
TARGET_XGENT_PLATFORM: https://portal.example.com
|
|
269
|
+
XGENT_RELEASE_TOKEN: ${{ secrets.XGENT_RELEASE_TOKEN }}
|
|
270
|
+
MANIFEST_STORE: https://catalog.example.com # 可选:顺带投一份到清单目录
|
|
271
|
+
MANIFEST_STORE_TOKEN: ${{ secrets.MANIFEST_STORE_TOKEN }}
|
|
272
|
+
|
|
273
|
+
steps:
|
|
274
|
+
# ⓪ 必须在最前:@xgent/release-cli 自己就在私有包仓上,.npmrc 没配的话 ① 取不到包。
|
|
275
|
+
- run: eval "$(node "$SKILL_DIR/scripts/npm-token.mjs")" # 换私有包只读令牌
|
|
276
|
+
- run: npx @xgent/release-cli whoami # ① 先验令牌,别等构建完才发现过期
|
|
277
|
+
- run: <你自己的依赖安装与构建> # ② base=/apps/<key>/
|
|
278
|
+
- run: node "$SKILL_DIR/scripts/preflight.mjs" --dist dist --version $VER
|
|
279
|
+
- run: npx @xgent/release-cli publish --version $VER --dist dist/ --image <key>:$VER --wait
|
|
280
|
+
--manifest deploy/portal/app.manifest.json # ← 不带它目录永远是空的
|
|
281
|
+
```
|
|
282
|
+
|
|
283
|
+
`--wait` 是让这条流水线**诚实**的那一步:没有它,换版失败时任务照样绿。
|
|
284
|
+
它**不会**把流水线卡在人工审批上——改了权限面的那次发版会打印提案号后退出 0,平台管理员
|
|
285
|
+
已被通知;真要门禁到审批,把 `--wait` 换成 `--wait-review`。
|
|
286
|
+
|
|
287
|
+
版本号从哪来:用 git tag 或 `package.json` 的 version 都行,关键是**每次发布都不同**。
|
|
288
|
+
把它固定成 `latest` 之类的常量,等于放弃「线上跑的是哪一版」这个能力。
|
|
289
|
+
|
|
290
|
+
`--dry-run` 只打印将要发送的内容、不发请求,改 CI 脚本时先跑它。
|
|
291
|
+
|
|
292
|
+
## 8. 私有包只读令牌(`GET /api/market/release/:key/npm-token`)
|
|
293
|
+
|
|
294
|
+
`@xgent/{release-cli,shared,portal-sdk,portal-ui}` 都在私有包仓上 —— **包括发版用的 CLI 本身**,
|
|
295
|
+
所以这一步是整条发布链的前置,不只是装依赖。**你不需要云账号**:拿同一枚 `xrel_`
|
|
296
|
+
向门户换一枚 ≤12 h 的只读令牌,门户持那把云凭据。
|
|
297
|
+
|
|
298
|
+
```
|
|
299
|
+
GET <TARGET_XGENT_PLATFORM>/api/market/release/<key>/npm-token
|
|
300
|
+
Authorization: Bearer xrel_…
|
|
301
|
+
→ 200 { ok: true, data: { registry, scopes: ["@xgent"], token, expiresAt } }
|
|
302
|
+
```
|
|
303
|
+
|
|
304
|
+
| 情况 | 响应 | 你该做什么 |
|
|
305
|
+
| --- | --- | --- |
|
|
306
|
+
| 没令牌 / 令牌失效 | `401` | 重新拿一枚发布令牌 |
|
|
307
|
+
| 令牌绑的是别的 App | `404` | 核对 `LISTING_KEY` |
|
|
308
|
+
| 打太频繁 | `429` | CI 里只换一次,把结果传下去 |
|
|
309
|
+
| 平台没配私有包仓库 | `200` + `NPM_REGISTRY_NOT_CONFIGURED` | **平台侧**的事,贴给管理员 |
|
|
310
|
+
| 平台的仓库凭据被拒 | `200` + `NPM_REGISTRY_UNAUTHORIZED` | 同上,你这边不用改 |
|
|
311
|
+
| 仓库暂时不可达 | `200` + `NPM_REGISTRY_UNAVAILABLE` | 重试一次 |
|
|
312
|
+
|
|
313
|
+
- 令牌是**域级只读**的:能装 `@xgent/*`(`release-cli` 也在内),不能发布、不能删。
|
|
314
|
+
- 不缓存到文件:它 12 h 就过期,CI 每次跑现换即可(门户侧自带缓存,不会每次都打云上)。
|
|
315
|
+
- 客户端脚本 `scripts/npm-token.mjs`(`--raw` / `--npmrc` / `--check`)把这些都封好了。
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
# 排查速查
|
|
2
|
+
|
|
3
|
+
先分清事故落在哪一层——**发不出去** / **发出去了但页面坏** / **发出去了但线上没变**。
|
|
4
|
+
三层的成因不重叠,混着猜会很久。
|
|
5
|
+
|
|
6
|
+
## A. 发不出去(命令报错)
|
|
7
|
+
|
|
8
|
+
| 症状 | 多半原因 | 怎么确认 |
|
|
9
|
+
| --- | --- | --- |
|
|
10
|
+
| `401` | 令牌无效 / 已吊销 / 已过期;或压根没带 `Authorization: Bearer xrel_…` | `whoami`。门户每次调用实时查库,所以「昨天还能发」不构成反证 |
|
|
11
|
+
| `404` | 令牌不是为这个 `--key` 签发的(也可能该 listing 不存在——门户**故意**不区分) | 核对 `--key` 与签发时的 key 逐字相同;换一个你确定存在的 key 试同一枚令牌 |
|
|
12
|
+
| `GET …/<key>/status` 返回 `404`,但同一枚令牌 whoami `200` | **这个门户上还没有只读面**(它比发布面晚一版上线),不是令牌的问题 | 见下面「`/status` 报 404 怎么分诊」。别改令牌、别重发 |
|
|
13
|
+
| `200` 但 `ok:false`,说缺根 `index.html` | 打包套了一层 | 用 `tar czf x.tgz -C dist .`,不是 `tar czf x.tgz dist`;或 `--dist` 指错了一层 |
|
|
14
|
+
| `200` 但 `ok:false`,说超 64MB | source map / 未压缩素材打进产物了 | `du -sh dist`,关掉 sourcemap 再看 |
|
|
15
|
+
| `200` 但 `ok:false`,说版本号非法 | 只能字母/数字/`. _ + -`,≤64 字符 | 别把 `v1.2.3 (build 42)` 这种带空格括号的塞进去 |
|
|
16
|
+
| `200` 但 `ok:false`,说属治理字段不接受散字段 | 往表单里直接塞 `scopes=...` / `aclManifest=...` 之类 | 散字段只认 `dist`/`version`/`image`/`manifest`;治理变更写进 `app.manifest.json` 用 `--manifest` 整份提交,进「发布审核」 |
|
|
17
|
+
| `200` 但 `ok:false`,`PROPOSAL_PENDING` | 该 App 已有一条待审提案挡路——待审期间**任何**新提交都拒,纯 dist/version 也一样(放行会「后交先生效」) | 等平台审批,或先撤回:`DELETE …/proposals/<id>`(错误 details 里带在审提案 id) |
|
|
18
|
+
| `200` 但 `ok:false`,说没有部署描述 | 带了 `--image`,但该 App 还没被平台管理员配 `deployDescriptor` | 纯前端 App 本来就不该带 `--image`,去掉即可;真是新后端就在 manifest 里声明 `deployDescriptor` 随提案提交审核 |
|
|
19
|
+
| `npx @xgent/release-cli` 取不到(`E404 … registry.npmjs.org/@xgent%2frelease-cli`) | **CLI 自己就在私有包仓上**,而这个 repo 的 `.npmrc` 没配 `@xgent:registry` —— 公共 npm 上当然没有 | `npm config get @xgent:registry`,是 `undefined` 就 `node "$SKILL_DIR/scripts/npm-token.mjs" --npmrc >> .npmrc` 再重试(SKILL.md 第 0 步)。**只有**换令牌这步本身报 `NPM_REGISTRY_NOT_CONFIGURED`(平台侧没配)才用 `curl` 兜底,能力完全等价(见 `publish-api.md` §2) |
|
|
20
|
+
| 缺少应用标识 | 没传 `--key`,配置文件里也没有 `LISTING_KEY` | 二选一,见 `publish-api.md` §0 |
|
|
21
|
+
| 缺少发布令牌 / 令牌形状不对 | 没设 `XGENT_RELEASE_TOKEN`、也没传 `--token`;或把别的令牌拿来了 | 令牌以 `xrel_` 开头。**别写进配置文件**——CLI 会告警并忽略 |
|
|
22
|
+
| 卡几分钟后 `fetch failed` / 上传超时,产物只有一两 MB | **本机配了代理,而 Node 内置 `fetch` 不读它**——直连跨境上行实测约 10 KB/s | 环境里有 `HTTPS_PROXY` / `HTTP_PROXY` 就是它。升到 `@xgent/release-cli` ≥0.6.0(检测到代理会带 `NODE_USE_ENV_PROXY=1` 重启自身);Node 既不是 ≥22.21 也不是 ≥24 时按 `publish-api.md` §2 用 curl 兜底 |
|
|
23
|
+
| `门户网关返回 502`(或任何 ≥500) | **传输层故障,不是内容被拒**——反代/网关把连接切了,门户那边没留下任何痕迹(无提案行、无审计、产物未动) | 看 CLI 打出的已传字节与实测速率:速率低得离谱就是上面那条代理问题;速率正常则是门户侧的事,带上时间点找平台管理员 |
|
|
24
|
+
| `tar 不可用` | 构建镜像太精简 | 装 tar,或自己打好包用 `--dist dist.tgz` 传现成的 |
|
|
25
|
+
|
|
26
|
+
### `/status` 报 404 怎么分诊
|
|
27
|
+
|
|
28
|
+
两种 404 的响应体**一字不差**(都是 `{"ok":false,"error":{"code":"NOT_FOUND","message":"路由不存在"}}`)——
|
|
29
|
+
门户是**故意**让「令牌不属于你」和「这条路由不存在」长得一样的,免得令牌变成探测别人 App
|
|
30
|
+
是否存在的工具。所以**别对着 404 的文案猜**,用同一枚令牌先打一次 whoami:
|
|
31
|
+
|
|
32
|
+
```bash
|
|
33
|
+
H="authorization: Bearer $XGENT_RELEASE_TOKEN"
|
|
34
|
+
curl -s -o /dev/null -w 'whoami %{http_code}\n' -H "$H" "$XGENT_PORTAL_URL/api/market/release/<key>"
|
|
35
|
+
curl -s -o /dev/null -w 'status %{http_code}\n' -H "$H" "$XGENT_PORTAL_URL/api/market/release/<key>/status"
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
| whoami | `/status` | 结论 |
|
|
39
|
+
| --- | --- | --- |
|
|
40
|
+
| `200` | `404` | 这个门户**没有**只读面(版本旧)。令牌没问题,发布照发 |
|
|
41
|
+
| `404` | `404` | 令牌不是这个 key 签发的,或该 listing 不存在 |
|
|
42
|
+
| `401` | `401` | 令牌本身无效 / 已吊销 / 已过期 |
|
|
43
|
+
|
|
44
|
+
**没有只读面时怎么验收**:`publish` 的返回体本身就带 `version` / `distDigest` / `distFiles` /
|
|
45
|
+
`imageChanged` / `redeployQueued`——「产物落的是哪一份」这半边一点不缺,照常报告。缺的只有
|
|
46
|
+
「容器到底换没换」,那半边只能找平台管理员看「服务部署」面板,或直接压你自己 App 的健康检查。
|
|
47
|
+
`--wait` / `--wait-review` 同理会失效(它们就是在轮询这个面),**别把它当成保险还照绿放行**。
|
|
48
|
+
|
|
49
|
+
## B. 发出去了,但页面坏
|
|
50
|
+
|
|
51
|
+
| 症状 | 多半原因 |
|
|
52
|
+
| --- | --- |
|
|
53
|
+
| **iframe 白屏,控制台一片 404** | `base` 没设成 `/apps/<key>/` —— **最常见的一种**。资源请求打到了站点根 |
|
|
54
|
+
| 首页能开,**刷新二级页面就 404** | 客户端路由的 basename 没跟着走子路径 |
|
|
55
|
+
| 某个功能点了没反应,本地却正常 | 产物里残留 `localhost:53xx`,或直连了未在 `embedCsp.connectSrc` 里声明的外部源 —— 生产 CSP 静默拦掉。看浏览器控制台的 CSP 报错 |
|
|
56
|
+
| 页面在,但调后端全失败 | 不是 CORS(前端从不直连后端,请求走宿主 postMessage 代理)。查 SDK 握手、`callService` 的 key、以及该 App 在这个租户里装没装 |
|
|
57
|
+
| `/apps/<key>/` 打不开但发布明明成功 | 产物存储侧的事,自己这边查不了 —— 带上本次的 `distDigest` 找平台管理员 |
|
|
58
|
+
| 发布成功但看到的是旧页面 | 浏览器/CDN 缓存。硬刷新;仍旧则对比控制台上的 `distDigest` 与本次返回值 |
|
|
59
|
+
|
|
60
|
+
**B 类问题里最值钱的一句话**:`✓ 已发布` 只证明产物落库了,不证明页面能用。
|
|
61
|
+
所以流程的最后一步是在浏览器里真打开一次——这一步没做就别报「发布完成」。
|
|
62
|
+
|
|
63
|
+
## C. 发出去了,但线上没变
|
|
64
|
+
|
|
65
|
+
**先跑 `npx @xgent/release-cli status --key <key>`**——C 类的几乎每一条它都能直接回答:
|
|
66
|
+
线上是哪一版、实际在跑哪个镜像、最近一条部署任务成没成、失败原因是什么。
|
|
67
|
+
|
|
68
|
+
这个面较新,**门户上没有它时会 `404`**(先按 A 类那条分诊,别当成发布失败)。那种情况下
|
|
69
|
+
下面整张表都只能拿去问平台管理员——你手上只剩 `publish` 的返回体和浏览器。
|
|
70
|
+
|
|
71
|
+
| 症状 | 多半原因 |
|
|
72
|
+
| --- | --- |
|
|
73
|
+
| 换了 `--image`,容器还是旧的 | `status` 看最近一条任务:`failed` 就是拉不到镜像(没 push / robot 没权限 / tag 打错)。**先拉后换**,所以旧容器还在跑、服务没断 |
|
|
74
|
+
| `status` 显示任务还在 `queued`/`running` | 就是还没轮到/还没跑完。发布时加 `--wait` 就不用手动盯 |
|
|
75
|
+
| 提案一直 `pending`,`--wait` 却早早退出 0 | **这是 0.5.0 的既定行为**:`--wait` 只等换版。要卡在审批上用 `--wait-review`;平台管理员在提案落成时已收到通知,不必催 |
|
|
76
|
+
| 审批屏说某个库 / Redis 的键「缺」 | 这个键不叫约定名(`<PREFIX>_DATABASE_URL` / `REDIS_CONN_STRING`),平台自动供给不到 ⇒ 只能人工点一下「从平台服务取值」。改成约定名后下次就零手填(预检会提前 warn 这一条) |
|
|
77
|
+
| 同一个 tag 重推了,门户没反应 | tag 不可变是硬约定:引用没变**根本不排任务**(`status` 里看不到新任务就是这个)。新版本必须新 tag;真要按原样重建只能找平台管理员点面板的「重新部署」 |
|
|
78
|
+
| 版本号发上去了,过一阵又变回旧值 | 该 key 是**门户仓内 App**(清单定义在门户代码里),version 随门户部署被等值对齐回定义值——仓内 App 不走自助发版面。外部 App 的清单事实源在你仓,不存在这个症状;真遇到就是有人在门户控制台手改过,找平台管理员对账 |
|
|
79
|
+
| 发布成功、版本也对,但应用市场/租户侧看不到这个 App | listing 被平台**下架**(delisted)。发布刻意不改上下架状态——上下架归平台,找平台管理员重新上架 |
|
|
80
|
+
| 带 `--manifest` 提交,返回 `ok:true`,但线上一字没变 | 这次提交里有**治理变更** ⇒ 落成待审提案,批准前库里一字不动(`status` 的最近一条提案是 `pending`)。最容易被忽略的一个触发源是 `helpEntry` 写成了外站文档 `https://…`——外链是审核档,改成 App 内路由 `"/help"` 才是自动档 |
|
|
81
|
+
| 控制台上 `version` 与产物对不上 | 正常情况下不可能——两者同一次落库。若真发生,说明有人从别的路径改过 version,带 `distDigest` 去对账 |
|
|
82
|
+
|
|
83
|
+
## D. 发上去也跑起来了,但跨应用调用 401
|
|
84
|
+
|
|
85
|
+
症状:你的 App 去 `POST /oauth/token` 换票,门户回 `SECRET_INVALID`;或者界面上只写着
|
|
86
|
+
**「跨应用授权缺失或未开启」**——那句话说的是授权,而最常见的真因不是授权。
|
|
87
|
+
|
|
88
|
+
| 症状 | 多半原因 | 怎么确认 |
|
|
89
|
+
| --- | --- | --- |
|
|
90
|
+
| `SECRET_INVALID` | `<PREFIX>_APP_SECRET` 两边漂了:容器里跑的是**手填**的那一份,门户布出去的是**平台保管**的那一份的哈希 | 问平台管理员:该 App 的 `deployDescriptor.env` 或 `envFile` 里是不是手填了这个键。有就删掉它——删掉之后指纹变化会自动排一次换版,平台保管的那份就注进去了 |
|
|
91
|
+
| `EXCHANGE_NOT_ALLOWED` | 清单里没声明要调的那个目标 App | 在 `app.manifest.json` 的 `exchangeTargets` 里补上目标 key,随 `--manifest` 提交(这是治理档,要等人工审批) |
|
|
92
|
+
| 闸说缺 `<PREFIX>_APP_SECRET`,提案一直批不了 | 你在 `requiredEnv` 里写了这个键,却没声明 `exchangeTargets` | 平台不会为一个不做跨应用调用的 App 生成这枚密钥。补 `exchangeTargets`,或把这个键从 `requiredEnv` 去掉。**别让平台管理员手填一个值来让闸放行**——那正好制造上面第一行那个故障 |
|
|
93
|
+
|
|
94
|
+
这枚密钥的完整口径见 SKILL.md「`<PREFIX>_APP_SECRET`:跨应用交换的发起方密钥」。一句话:
|
|
95
|
+
**键名归你,值归平台,明文只在批准那一刻给审批人看一次。**
|
|
96
|
+
|
|
97
|
+
## 一条通用的分诊起手式
|
|
98
|
+
|
|
99
|
+
在 App repo 根目录执行;`SKILL_DIR` 表示本 skill 的 `SKILL.md` 所在目录(本文件的上一级)。
|
|
100
|
+
|
|
101
|
+
```bash
|
|
102
|
+
node "$SKILL_DIR/scripts/preflight.mjs" --key <key> --dist dist --version <v> # 发之前
|
|
103
|
+
npx @xgent/release-cli status --key <key> # 发之后
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
前者一次性覆盖 A 类的绝大多数与 B 类的头两条,后者覆盖 C 类(`status` 在这个门户上不存在
|
|
107
|
+
就跳过它,不要为了让它绿而改令牌或改 key)。**先跑它再猜**——
|
|
108
|
+
这些成因的共同点是 `tsc` / lint / 单测全都发现不了,靠读代码找它们非常慢。
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* xgent-app-release · 换一枚私有包只读令牌
|
|
4
|
+
*
|
|
5
|
+
* node npm-token.mjs # 打印 export XGENT_NPM_AUTH_TOKEN='…'(可 eval)
|
|
6
|
+
* node npm-token.mjs --raw # 只打印令牌本体(管道用)
|
|
7
|
+
* node npm-token.mjs --npmrc # 打印可直接追加进 .npmrc 的三行
|
|
8
|
+
* node npm-token.mjs --check # 只体检:能不能换到、还剩多久,不打印令牌
|
|
9
|
+
*
|
|
10
|
+
* `@xgent/{release-cli,shared,portal-sdk,portal-ui}` 都装在私有仓上 —— **发版用的 CLI 本身也在**,
|
|
11
|
+
* 所以 `.npmrc` 没配好时 `npx @xgent/release-cli` 第一条就 E404。你**不需要**任何云账号或 CLI:
|
|
12
|
+
* 用已有的发布令牌(`XGENT_RELEASE_TOKEN`,就是发版那枚)向门户换一枚 ≤12 h 的
|
|
13
|
+
* **只读**令牌即可。门户持那把云凭据,轮换时你这边零改动。
|
|
14
|
+
*
|
|
15
|
+
* 取值优先级:命令行参数 > 环境变量 > 本地配置文件(`.xgent-registry.env` 等)。
|
|
16
|
+
* 令牌**只走 stdout**,不落盘、不进日志;诊断信息一律走 stderr,所以
|
|
17
|
+
* `eval "$(node npm-token.mjs)"` 与 `node npm-token.mjs --raw > /dev/null` 都是安全的。
|
|
18
|
+
*
|
|
19
|
+
* 零依赖,纯 Node ≥18(fetch 内置)。可以整个文件拷进任何 App 仓。
|
|
20
|
+
* 退出码:换到 → 0;配置缺失/被拒/不可达 → 1。
|
|
21
|
+
*/
|
|
22
|
+
import { loadConfig, parseArgs, resolveRelease, warnIfProxyIgnored } from "./registry-config.mjs";
|
|
23
|
+
|
|
24
|
+
const args = parseArgs(process.argv.slice(2), ["raw", "npmrc", "check", "help"]);
|
|
25
|
+
if (args.help) {
|
|
26
|
+
console.error("用法: node npm-token.mjs [--raw|--npmrc|--check] [--key <listingKey>] [--portal <url>] [--config <path>]");
|
|
27
|
+
process.exit(0);
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
const cfg = loadConfig(args.config);
|
|
31
|
+
const { key, portal, token } = resolveRelease(args, cfg);
|
|
32
|
+
|
|
33
|
+
const die = (msg, ...hints) => {
|
|
34
|
+
console.error(`✗ ${msg}`);
|
|
35
|
+
for (const h of hints) console.error(` → ${h}`);
|
|
36
|
+
process.exit(1);
|
|
37
|
+
};
|
|
38
|
+
|
|
39
|
+
if (!key) die("缺少 LISTING_KEY", "在 .xgent-registry.env 里写 LISTING_KEY=<你的应用标识>,或用 --key 传");
|
|
40
|
+
if (!portal) die("缺少门户地址", "在 .xgent-registry.env 里写 TARGET_XGENT_PLATFORM=<门户地址>,或用 --portal 传");
|
|
41
|
+
if (!token) die("缺少发布令牌", "在 .xgent-registry.env 里写 XGENT_RELEASE_TOKEN=xrel_…(就是发版用的那枚)");
|
|
42
|
+
|
|
43
|
+
warnIfProxyIgnored();
|
|
44
|
+
|
|
45
|
+
const url = `${portal}/api/market/release/${encodeURIComponent(key)}/npm-token`;
|
|
46
|
+
let res;
|
|
47
|
+
try {
|
|
48
|
+
res = await fetch(url, {
|
|
49
|
+
headers: { authorization: `Bearer ${token}`, accept: "application/json" },
|
|
50
|
+
signal: AbortSignal.timeout(30_000),
|
|
51
|
+
});
|
|
52
|
+
} catch (e) {
|
|
53
|
+
die(`连不上门户:${e?.message ?? e}`, `确认 ${portal} 可达(公司网络 / VPN)`, "稍后重试;这条链路超时不代表令牌有问题");
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
if (res.status === 401) die("发布令牌无效或已失效(401)", "去门户「应用详情 › 凭证」重新生成一枚,或让平台管理员补发");
|
|
57
|
+
if (res.status === 404) die(`门户上没有 ${key} 这个应用,或令牌绑的是别的应用(404)`, "核对 LISTING_KEY 与令牌是否同一个应用");
|
|
58
|
+
if (res.status === 429) die("触发限流(429)", "稍等一分钟再试;CI 里别在每个 job 都换一次,换一次传下去");
|
|
59
|
+
|
|
60
|
+
const body = await res.json().catch(() => null);
|
|
61
|
+
if (!res.ok || !body) die(`门户返回 ${res.status}`, "把这一行贴给平台管理员");
|
|
62
|
+
|
|
63
|
+
if (body.ok === false) {
|
|
64
|
+
const code = body.error?.code ?? "UNKNOWN";
|
|
65
|
+
const msg = body.error?.message ?? "";
|
|
66
|
+
if (code === "NPM_REGISTRY_NOT_CONFIGURED")
|
|
67
|
+
die("门户还没配置私有包仓库凭据", "让平台管理员去「控制台 › 平台设置 › 私有包仓库」填一次", "这不是你这边的问题,无需改任何配置");
|
|
68
|
+
if (code === "NPM_REGISTRY_UNAUTHORIZED")
|
|
69
|
+
die("门户持有的仓库凭据被拒了", "让平台管理员检查「私有包仓库」设置里的凭据是否过期", "这不是你这边的问题");
|
|
70
|
+
if (code === "NPM_REGISTRY_UNAVAILABLE")
|
|
71
|
+
die("私有包仓库暂时不可达", "过几分钟重试", "CI 里给这一步加一次重试即可");
|
|
72
|
+
die(`${code}${msg ? `:${msg}` : ""}`);
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
const { registry, scopes, token: authToken, expiresAt } = body.data ?? {};
|
|
76
|
+
if (!authToken || !registry) die("门户返回的内容不完整", "把这一行贴给平台管理员");
|
|
77
|
+
|
|
78
|
+
const mins = Math.max(0, Math.round((Date.parse(expiresAt) - Date.now()) / 60000));
|
|
79
|
+
console.error(`✓ 已换到只读令牌,有效期约 ${Math.floor(mins / 60)} 小时 ${mins % 60} 分(至 ${expiresAt})`);
|
|
80
|
+
|
|
81
|
+
if (args.check) process.exit(0);
|
|
82
|
+
|
|
83
|
+
if (args.raw) {
|
|
84
|
+
console.log(authToken);
|
|
85
|
+
} else if (args.npmrc) {
|
|
86
|
+
// registry 形如 https://<host>/npm/<repo>/ —— .npmrc 的 //<host>/<path>:_authToken 要去掉协议。
|
|
87
|
+
const bare = registry.replace(/^https?:/, "");
|
|
88
|
+
for (const s of scopes ?? ["@xgent"]) console.log(`${s}:registry=${registry}`);
|
|
89
|
+
console.log(`${bare}:_authToken=${authToken}`);
|
|
90
|
+
console.log(`${bare}:always-auth=true`);
|
|
91
|
+
} else {
|
|
92
|
+
console.log(`export XGENT_NPM_AUTH_TOKEN='${authToken}'`);
|
|
93
|
+
console.log(`export XGENT_NPM_REGISTRY='${registry}'`);
|
|
94
|
+
}
|