@xgent-ai/skills 0.1.0 → 0.4.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 +124 -4
- package/bin/xgent-skills.js +561 -4
- package/package.json +7 -3
- package/skills/agi-mode/SKILL.md +225 -0
- package/skills/agi-mode/evals/baseline-coverage.md +96 -0
- package/skills/agi-mode/evals/scenarios.md +331 -0
- package/skills/agi-mode/evals/test_check_evidence.py +141 -0
- package/skills/agi-mode/playbooks/arena.md +47 -0
- package/skills/agi-mode/playbooks/authoring-a-skill.md +26 -0
- package/skills/agi-mode/playbooks/autonomous-run.md +39 -0
- package/skills/agi-mode/playbooks/bug-fix.md +27 -0
- package/skills/agi-mode/playbooks/design-prototype.md +41 -0
- package/skills/agi-mode/playbooks/eval.md +72 -0
- package/skills/agi-mode/playbooks/feature.md +26 -0
- package/skills/agi-mode/playbooks/forensics.md +31 -0
- package/skills/agi-mode/playbooks/hillclimb.md +73 -0
- package/skills/agi-mode/playbooks/investigation.md +29 -0
- package/skills/agi-mode/playbooks/migration-refactoring.md +27 -0
- package/skills/agi-mode/playbooks/optimization.md +27 -0
- package/skills/agi-mode/playbooks/pr-lifecycle.md +38 -0
- package/skills/agi-mode/playbooks/program.md +57 -0
- package/skills/agi-mode/playbooks/reflection.md +41 -0
- package/skills/agi-mode/playbooks/resource-cleanup.md +24 -0
- package/skills/agi-mode/playbooks/review.md +27 -0
- package/skills/agi-mode/playbooks/session-handoff.md +37 -0
- package/skills/agi-mode/playbooks/shipping.md +35 -0
- package/skills/agi-mode/playbooks/ui-delivery.md +34 -0
- package/skills/agi-mode/playbooks/unblock.md +54 -0
- package/skills/agi-mode/principles/autonomous-decisions.md +21 -0
- package/skills/agi-mode/principles/behavioral-tests.md +21 -0
- package/skills/agi-mode/principles/boundary-discipline.md +21 -0
- package/skills/agi-mode/principles/bounded-convergence.md +21 -0
- package/skills/agi-mode/principles/build-leverage.md +21 -0
- package/skills/agi-mode/principles/challenge-premises.md +21 -0
- package/skills/agi-mode/principles/complete-migrations.md +21 -0
- package/skills/agi-mode/principles/context-as-state.md +21 -0
- package/skills/agi-mode/principles/critical-path-throughput.md +21 -0
- package/skills/agi-mode/principles/domain-models-and-types.md +23 -0
- package/skills/agi-mode/principles/evidence-lifetime.md +21 -0
- package/skills/agi-mode/principles/experience-first.md +21 -0
- package/skills/agi-mode/principles/explore-alternatives.md +21 -0
- package/skills/agi-mode/principles/falsifiable-verification.md +21 -0
- package/skills/agi-mode/principles/foundations-first.md +21 -0
- package/skills/agi-mode/principles/idempotent-effects.md +21 -0
- package/skills/agi-mode/principles/information-first.md +21 -0
- package/skills/agi-mode/principles/minimize-complexity.md +21 -0
- package/skills/agi-mode/principles/outcome-ownership.md +21 -0
- package/skills/agi-mode/principles/prove-real-outcomes.md +21 -0
- package/skills/agi-mode/principles/redesign-from-constraints.md +21 -0
- package/skills/agi-mode/principles/root-cause.md +21 -0
- package/skills/agi-mode/principles/state-ownership.md +21 -0
- package/skills/agi-mode/principles/structural-learning.md +21 -0
- package/skills/agi-mode/principles/verifiable-units.md +21 -0
- package/skills/agi-mode/references/continuity.md +75 -0
- package/skills/agi-mode/references/eval-protocol.md +71 -0
- package/skills/agi-mode/references/evidence-contract.md +57 -0
- package/skills/agi-mode/references/evolution-evidence.md +71 -0
- package/skills/agi-mode/references/experiments.md +82 -0
- package/skills/agi-mode/references/reflection/divergent-reviewer.md +45 -0
- package/skills/agi-mode/references/reflection/judgment-reviewer.md +44 -0
- package/skills/agi-mode/references/reflection/synthesizer.md +39 -0
- package/skills/agi-mode/references/reflection/tooling-reviewer.md +57 -0
- package/skills/agi-mode/references/skill-evolution.md +50 -0
- package/skills/agi-mode/scripts/check_evidence.py +147 -0
- package/skills/apply-code-review/SKILL.md +53 -0
- package/skills/apply-code-review/agents/openai.yaml +4 -0
- package/skills/apply-code-review/references/record-contract.md +77 -0
- package/skills/apply-doc-review/SKILL.md +79 -0
- package/skills/apply-doc-review/agents/openai.yaml +4 -0
- package/skills/apply-doc-review/references/disposition-contract.md +57 -0
- package/skills/archify/LICENSE +22 -0
- package/skills/archify/SKILL.md +137 -0
- package/skills/archify/THIRD_PARTY_NOTICES.md +69 -0
- package/skills/archify/assets/JetBrainsMono-OFL.txt +93 -0
- package/skills/archify/assets/template.html +14937 -0
- package/skills/archify/bin/archify.mjs +2139 -0
- package/skills/archify/bin/open-artifact.mjs +86 -0
- package/skills/archify/bin/preview.mjs +653 -0
- package/skills/archify/bin/visual-check.mjs +829 -0
- package/skills/archify/brand-marks/README.md +31 -0
- package/skills/archify/brand-marks/catalog.json +131 -0
- package/skills/archify/delta/architecture-delta.mjs +1232 -0
- package/skills/archify/examples/agent-run.lifecycle.json +60 -0
- package/skills/archify/examples/agent-tool-call.workflow.json +94 -0
- package/skills/archify/examples/async-job-roundtrip.sequence.json +61 -0
- package/skills/archify/examples/brand-aware-delivery.architecture.json +47 -0
- package/skills/archify/examples/cache-miss-request.sequence.json +82 -0
- package/skills/archify/examples/checkout-platform.base.architecture.json +31 -0
- package/skills/archify/examples/checkout-platform.head.architecture.json +31 -0
- package/skills/archify/examples/dataflow-product-analytics.html +15048 -0
- package/skills/archify/examples/deployment-release.lifecycle.json +49 -0
- package/skills/archify/examples/event-stream.dataflow.json +57 -0
- package/skills/archify/examples/incident-response.workflow.json +64 -0
- package/skills/archify/examples/lifecycle-agent-run.html +14983 -0
- package/skills/archify/examples/product-analytics.dataflow.json +76 -0
- package/skills/archify/examples/production-deployment.architecture.json +71 -0
- package/skills/archify/examples/release-delivery.workflow.json +62 -0
- package/skills/archify/examples/sequence-cache-miss-request.html +15063 -0
- package/skills/archify/examples/web-app-rendered.html +15012 -0
- package/skills/archify/examples/web-app.architecture.json +46 -0
- package/skills/archify/examples/workflow-agent-tool-call-rendered.html +15054 -0
- package/skills/archify/migrations/workflow-v2.mjs +279 -0
- package/skills/archify/package-lock.json +149 -0
- package/skills/archify/package.json +39 -0
- package/skills/archify/recipes/scenarios.mjs +391 -0
- package/skills/archify/references/authoring-contract.md +247 -0
- package/skills/archify/references/brand-marks.md +65 -0
- package/skills/archify/references/delivery-contract.md +138 -0
- package/skills/archify/references/viewer-runtime.md +45 -0
- package/skills/archify/renderers/architecture/grid.mjs +62 -0
- package/skills/archify/renderers/architecture/render-architecture.mjs +1078 -0
- package/skills/archify/renderers/dataflow/README.md +104 -0
- package/skills/archify/renderers/dataflow/render-dataflow.mjs +483 -0
- package/skills/archify/renderers/lifecycle/README.md +115 -0
- package/skills/archify/renderers/lifecycle/render-lifecycle.mjs +561 -0
- package/skills/archify/renderers/sequence/README.md +114 -0
- package/skills/archify/renderers/sequence/render-sequence.mjs +464 -0
- package/skills/archify/renderers/shared/brand-marks.mjs +563 -0
- package/skills/archify/renderers/shared/cli.mjs +218 -0
- package/skills/archify/renderers/shared/desktop-readability.mjs +26 -0
- package/skills/archify/renderers/shared/diagnostics.mjs +160 -0
- package/skills/archify/renderers/shared/engineering-profiles.mjs +157 -0
- package/skills/archify/renderers/shared/generated-brand-marks.mjs +2003 -0
- package/skills/archify/renderers/shared/generated-validators.mjs +13 -0
- package/skills/archify/renderers/shared/geometry.mjs +1423 -0
- package/skills/archify/renderers/shared/i18n.mjs +595 -0
- package/skills/archify/renderers/shared/layout-report.mjs +40 -0
- package/skills/archify/renderers/shared/legend.mjs +217 -0
- package/skills/archify/renderers/shared/output-path.mjs +340 -0
- package/skills/archify/renderers/shared/repository-evidence.mjs +239 -0
- package/skills/archify/renderers/shared/repository-location.mjs +58 -0
- package/skills/archify/renderers/shared/text-fit.mjs +49 -0
- package/skills/archify/renderers/shared/utils.mjs +232 -0
- package/skills/archify/renderers/shared/validator.mjs +86 -0
- package/skills/archify/renderers/workflow/README.md +223 -0
- package/skills/archify/renderers/workflow/render-workflow.mjs +35 -0
- package/skills/archify/renderers/workflow/workflow-compiler.mjs +4400 -0
- package/skills/archify/renderers/workflow/workflow-migration-geometry.mjs +144 -0
- package/skills/archify/schemas/README.md +211 -0
- package/skills/archify/schemas/architecture.schema.json +178 -0
- package/skills/archify/schemas/common.schema.json +115 -0
- package/skills/archify/schemas/dataflow.schema.json +243 -0
- package/skills/archify/schemas/lifecycle.schema.json +266 -0
- package/skills/archify/schemas/sequence.schema.json +223 -0
- package/skills/archify/schemas/workflow.schema.json +428 -0
- package/skills/archify/scripts/check-render-output.mjs +916 -0
- package/skills/archify/scripts/check-update.mjs +1667 -0
- package/skills/archify/scripts/generate-brand-marks.mjs +141 -0
- package/skills/archify/scripts/generate-validators.mjs +66 -0
- package/skills/archify/scripts/render-examples.mjs +26 -0
- package/skills/archify/scripts/update-contract.mjs +182 -0
- package/skills/archify/skill-release.json +10 -0
- package/skills/archify/test/adaptive-reader-layout.test.mjs +86 -0
- package/skills/archify/test/animation.test.mjs +179 -0
- package/skills/archify/test/architecture-compare-recovery.test.mjs +157 -0
- package/skills/archify/test/architecture-delta-markers.test.mjs +137 -0
- package/skills/archify/test/architecture-delta.test.mjs +705 -0
- package/skills/archify/test/artifact-receipt-flush.test.mjs +126 -0
- package/skills/archify/test/authored-reachability.test.mjs +95 -0
- package/skills/archify/test/authoring-safety-contract.test.mjs +54 -0
- package/skills/archify/test/automatic-port-spread.test.mjs +376 -0
- package/skills/archify/test/base-input-compatibility.test.mjs +42 -0
- package/skills/archify/test/brand-marks.test.mjs +678 -0
- package/skills/archify/test/chapter-delta-preview.test.mjs +157 -0
- package/skills/archify/test/chapter-handoff.test.mjs +97 -0
- package/skills/archify/test/chapter-rail.test.mjs +86 -0
- package/skills/archify/test/checkout-line-endings.test.mjs +72 -0
- package/skills/archify/test/ci-scope.test.mjs +59 -0
- package/skills/archify/test/clean-skill-staging.test.mjs +440 -0
- package/skills/archify/test/cli-output-types.test.mjs +201 -0
- package/skills/archify/test/cli.test.mjs +986 -0
- package/skills/archify/test/community-proof-intake.test.mjs +125 -0
- package/skills/archify/test/cursor-onboarding.test.mjs +74 -0
- package/skills/archify/test/degraded.test.mjs +161 -0
- package/skills/archify/test/delivery-contract.test.mjs +52 -0
- package/skills/archify/test/desktop-reader-browser.test.mjs +80 -0
- package/skills/archify/test/diagram-guide.test.mjs +92 -0
- package/skills/archify/test/engineering-profile.test.mjs +209 -0
- package/skills/archify/test/export-browser.test.mjs +305 -0
- package/skills/archify/test/export-cleanup-browser.test.mjs +294 -0
- package/skills/archify/test/finder-browser.test.mjs +274 -0
- package/skills/archify/test/finder.test.mjs +104 -0
- package/skills/archify/test/fixtures/automatic-routing-node-border-clearance.workflow.json +40 -0
- package/skills/archify/test/fixtures/fail-migration-cleanup.mjs +17 -0
- package/skills/archify/test/fixtures/issue-126/custom-widths.workflow.json +18 -0
- package/skills/archify/test/fixtures/issue-126/explicit-route.workflow.json +28 -0
- package/skills/archify/test/fixtures/issue-126/explicit-viewbox.workflow.json +19 -0
- package/skills/archify/test/fixtures/issue-126/labels.workflow.json +18 -0
- package/skills/archify/test/fixtures/v1-baseline/agent-run.lifecycle.json +64 -0
- package/skills/archify/test/fixtures/v1-baseline/agent-tool-call.workflow.json +88 -0
- package/skills/archify/test/fixtures/v1-baseline/cache-miss-request.sequence.json +75 -0
- package/skills/archify/test/fixtures/v1-baseline/event-stream.dataflow.json +57 -0
- package/skills/archify/test/fixtures/v1-baseline/product-analytics.dataflow.json +70 -0
- package/skills/archify/test/fixtures/v1-baseline/production-deployment.architecture.json +71 -0
- package/skills/archify/test/fixtures/v1-baseline/web-app.architecture.json +41 -0
- package/skills/archify/test/fixtures/v1-workflow-700x400.workflow.json +22 -0
- package/skills/archify/test/fixtures/v1-workflow-explicit-coordinates.workflow.json +47 -0
- package/skills/archify/test/focus-browser.test.mjs +226 -0
- package/skills/archify/test/gallery.test.mjs +130 -0
- package/skills/archify/test/generate-validators.test.mjs +59 -0
- package/skills/archify/test/generate-viewer.test.mjs +165 -0
- package/skills/archify/test/generated-artifact-xml.test.mjs +88 -0
- package/skills/archify/test/geometry.test.mjs +739 -0
- package/skills/archify/test/golden.mjs +207 -0
- package/skills/archify/test/grid.test.mjs +47 -0
- package/skills/archify/test/guide-page.test.mjs +85 -0
- package/skills/archify/test/guide.test.mjs +81 -0
- package/skills/archify/test/guided-views-browser.test.mjs +460 -0
- package/skills/archify/test/guided-views.test.mjs +144 -0
- package/skills/archify/test/helpers/desktop-browser.mjs +48 -0
- package/skills/archify/test/helpers/offline-fonts.mjs +76 -0
- package/skills/archify/test/helpers/viewer-click.mjs +72 -0
- package/skills/archify/test/helpers/xml.mjs +37 -0
- package/skills/archify/test/i18n.test.mjs +422 -0
- package/skills/archify/test/intent-trace-browser.test.mjs +284 -0
- package/skills/archify/test/intent-trace.test.mjs +111 -0
- package/skills/archify/test/landing.test.mjs +97 -0
- package/skills/archify/test/layout-rules.test.mjs +1498 -0
- package/skills/archify/test/legend-contract.test.mjs +404 -0
- package/skills/archify/test/motion-governor-browser.test.mjs +342 -0
- package/skills/archify/test/motion-governor.test.mjs +111 -0
- package/skills/archify/test/offline-font-browser.test.mjs +210 -0
- package/skills/archify/test/offline-self-containment.test.mjs +80 -0
- package/skills/archify/test/open-artifact.test.mjs +118 -0
- package/skills/archify/test/ordinary-model-floor.test.mjs +1052 -0
- package/skills/archify/test/output-path.test.mjs +587 -0
- package/skills/archify/test/presentation.test.mjs +71 -0
- package/skills/archify/test/preset-tryon.test.mjs +113 -0
- package/skills/archify/test/preview-contract.test.mjs +40 -0
- package/skills/archify/test/preview.test.mjs +530 -0
- package/skills/archify/test/proof-aperture.test.mjs +78 -0
- package/skills/archify/test/reach-share-card.test.mjs +149 -0
- package/skills/archify/test/reader-layout-browser.test.mjs +320 -0
- package/skills/archify/test/readme-showcase.test.mjs +319 -0
- package/skills/archify/test/real-repository-proof.test.mjs +209 -0
- package/skills/archify/test/relationship-direct-explorer.test.mjs +115 -0
- package/skills/archify/test/relationship-lens.test.mjs +128 -0
- package/skills/archify/test/relationship-permalink.test.mjs +130 -0
- package/skills/archify/test/relationship-pulse.test.mjs +122 -0
- package/skills/archify/test/release-identity.test.mjs +476 -0
- package/skills/archify/test/release-package-gates.test.mjs +750 -0
- package/skills/archify/test/render-output-checks.test.mjs +588 -0
- package/skills/archify/test/renderer-diagnostic-boundary.test.mjs +107 -0
- package/skills/archify/test/repair-receipt.test.mjs +181 -0
- package/skills/archify/test/repository-evidence-replacement.test.mjs +136 -0
- package/skills/archify/test/repository-evidence.test.mjs +605 -0
- package/skills/archify/test/repository-language-metadata.test.mjs +67 -0
- package/skills/archify/test/route-journey.test.mjs +125 -0
- package/skills/archify/test/route-probe-browser.test.mjs +363 -0
- package/skills/archify/test/route-probe.test.mjs +114 -0
- package/skills/archify/test/route-share-card.test.mjs +163 -0
- package/skills/archify/test/semantic-camera.test.mjs +88 -0
- package/skills/archify/test/semantic-flow.test.mjs +90 -0
- package/skills/archify/test/semantic-legend-gateway.test.mjs +156 -0
- package/skills/archify/test/semantic-lens-browser.test.mjs +372 -0
- package/skills/archify/test/semantic-lens.test.mjs +103 -0
- package/skills/archify/test/semantic-passport.test.mjs +99 -0
- package/skills/archify/test/semantic-radar.test.mjs +735 -0
- package/skills/archify/test/semantic-zoom.test.mjs +86 -0
- package/skills/archify/test/sequence-column-fit.test.mjs +137 -0
- package/skills/archify/test/settled-flow.test.mjs +97 -0
- package/skills/archify/test/share-card-export.test.mjs +132 -0
- package/skills/archify/test/site-language-continuity.test.mjs +569 -0
- package/skills/archify/test/site-language-integration.mjs +9 -0
- package/skills/archify/test/skill-metadata.test.mjs +84 -0
- package/skills/archify/test/stable-update-manifest.test.mjs +167 -0
- package/skills/archify/test/start-page.test.mjs +312 -0
- package/skills/archify/test/story-beat-navigator.test.mjs +103 -0
- package/skills/archify/test/story-carrier.test.mjs +90 -0
- package/skills/archify/test/story-director-strip.test.mjs +91 -0
- package/skills/archify/test/story-follow-camera.test.mjs +103 -0
- package/skills/archify/test/story-horizon.test.mjs +91 -0
- package/skills/archify/test/story-moment-link.test.mjs +93 -0
- package/skills/archify/test/story-shelf.test.mjs +84 -0
- package/skills/archify/test/story-trail.test.mjs +81 -0
- package/skills/archify/test/toolbar-polish.test.mjs +57 -0
- package/skills/archify/test/update-contract.test.mjs +133 -0
- package/skills/archify/test/update-notifier.test.mjs +3317 -0
- package/skills/archify/test/v1-compatibility.test.mjs +329 -0
- package/skills/archify/test/vertical-edge.test.mjs +68 -0
- package/skills/archify/test/viewer-camera-browser.test.mjs +395 -0
- package/skills/archify/test/viewer-chrome-layout.test.mjs +1104 -0
- package/skills/archify/test/viewer-identifiers-browser.test.mjs +135 -0
- package/skills/archify/test/visual-check.test.mjs +400 -0
- package/skills/archify/test/webm-artifact.smoke.mjs +1855 -0
- package/skills/archify/test/workflow-compiler-hard-contract.test.mjs +2136 -0
- package/skills/archify/test/workflow-compiler.test.mjs +1163 -0
- package/skills/archify/test/workflow-migration.test.mjs +620 -0
- package/skills/archify/test/workflow-semantic-contract.test.mjs +131 -0
- package/skills/architect/SKILL.md +83 -0
- package/skills/architect/references/design-red-flags.md +33 -0
- package/skills/architect/references/rationale-template.md +35 -0
- package/skills/architect/references/runner-prompt.md +20 -0
- package/skills/arena/SKILL.md +13 -0
- package/skills/automate-me/SKILL.md +104 -0
- package/skills/autoresearch/SKILL.md +14 -0
- package/skills/debugging/SKILL.md +279 -0
- package/skills/dev-plan/SKILL.md +117 -92
- package/skills/dev-plan/references/architecture-quality.md +141 -0
- package/skills/dev-plan/references/execution-workflow.md +25 -0
- package/skills/dev-plan/references/plan-skeleton.md +252 -77
- package/skills/dev-plan/scripts/check_progress.sh +162 -0
- package/skills/documentation-writer/SKILL.md +204 -0
- package/skills/documentation-writer/assets/templates/ARCHITECTURE.md +49 -0
- package/skills/documentation-writer/assets/templates/CONCERNS.md +56 -0
- package/skills/documentation-writer/assets/templates/CONVENTIONS.md +52 -0
- package/skills/documentation-writer/assets/templates/FEATURES.md +43 -0
- package/skills/documentation-writer/assets/templates/INTEGRATIONS.md +48 -0
- package/skills/documentation-writer/assets/templates/STACK.md +56 -0
- package/skills/documentation-writer/assets/templates/STRUCTURE.md +44 -0
- package/skills/documentation-writer/assets/templates/TESTING.md +57 -0
- package/skills/documentation-writer/references/api-docs.md +185 -0
- package/skills/documentation-writer/references/architecture.md +134 -0
- package/skills/documentation-writer/references/codebase-map.md +113 -0
- package/skills/documentation-writer/references/inquiry-checkpoints.md +78 -0
- package/skills/documentation-writer/references/readme.md +89 -0
- package/skills/documentation-writer/references/stack-detection.md +134 -0
- package/skills/documentation-writer/references/user-manual.md +103 -0
- package/skills/documentation-writer/references/writing-style.md +220 -0
- package/skills/documentation-writer/scripts/check_doc.py +273 -0
- package/skills/documentation-writer/scripts/scan.py +712 -0
- package/skills/elintp/SKILL.md +155 -0
- package/skills/figure-it-out/SKILL.md +53 -0
- package/skills/gdpr-compliant/SKILL.md +283 -0
- package/skills/gdpr-compliant/references/Security.md +266 -0
- package/skills/gdpr-compliant/references/data-rights.md +177 -0
- package/skills/how/SKILL.md +58 -0
- package/skills/how/references/explainer-prompt.md +55 -0
- package/skills/how/references/explorer-prompt.md +52 -0
- package/skills/humanize-writing/SKILL.md +417 -0
- package/skills/humanize-writing/references/ai-tells.md +291 -0
- package/skills/kpi-dashboard-design/SKILL.md +103 -0
- package/skills/landing-page-conversion-audit/SKILL.md +122 -0
- package/skills/meeting-minutes/SKILL.md +235 -0
- package/skills/pardon/SKILL.md +30 -0
- package/skills/portal-app-exchange/SKILL.md +97 -0
- package/skills/portal-dev-setup/SKILL.md +610 -0
- package/skills/portal-dev-setup/puller.env.example +75 -0
- package/skills/portal-dev-setup/references/kafka.md +140 -0
- package/skills/portal-dev-setup/references/troubleshooting.md +163 -0
- package/skills/portal-dev-setup/scripts/onebox.sh +1420 -0
- package/skills/portal-external-app/SKILL.md +309 -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/public-entrypoints.md +100 -0
- package/skills/portal-external-app/references/quota-and-seats.md +194 -0
- package/skills/portal-external-app/references/registration-and-onebox.md +315 -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 +73 -0
- package/skills/portal-micro-app/references/manifest-and-acl.md +97 -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 +230 -0
- package/skills/prd/references/prd-skeleton.md +282 -0
- package/skills/prd/references/product-quality.md +89 -0
- package/skills/prd/references/spms-mapping.md +150 -0
- package/skills/react/SKILL.md +125 -0
- package/skills/react/references/actions.md +251 -0
- package/skills/react/references/component-patterns.md +275 -0
- package/skills/react/references/data-fetching.md +279 -0
- package/skills/react/references/effect-patterns.md +407 -0
- package/skills/react/references/js-performance.md +432 -0
- package/skills/react/references/react19-migration.md +407 -0
- package/skills/react/references/rendering-performance.md +351 -0
- package/skills/react/references/rerender-optimization.md +578 -0
- package/skills/reflect/SKILL.md +13 -0
- package/skills/review-code/SKILL.md +63 -0
- package/skills/review-code/agents/openai.yaml +4 -0
- package/skills/review-code/references/git-scopes.md +38 -0
- package/skills/review-code/references/report-contract.md +56 -0
- package/skills/review-code/references/review-lenses.md +33 -0
- package/skills/review-dev-plan/SKILL.md +88 -0
- package/skills/review-dev-plan/agents/openai.yaml +4 -0
- package/skills/review-dev-plan/references/report-contract.md +59 -0
- package/skills/review-dev-plan/references/review-lenses.md +82 -0
- package/skills/review-prd/SKILL.md +84 -0
- package/skills/review-prd/agents/openai.yaml +4 -0
- package/skills/review-prd/references/report-contract.md +64 -0
- package/skills/review-prd/references/review-lenses.md +82 -0
- package/skills/review-prd-dev-gaps/SKILL.md +84 -0
- package/skills/review-prd-dev-gaps/agents/openai.yaml +4 -0
- package/skills/review-prd-dev-gaps/references/report-contract.md +72 -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/security-audit/SKILL.md +191 -0
- package/skills/security-audit/references/language-patterns.md +221 -0
- package/skills/security-audit/references/report-format.md +194 -0
- package/skills/security-audit/references/secret-patterns.md +178 -0
- package/skills/security-audit/references/vuln-categories.md +288 -0
- package/skills/security-audit/references/vulnerable-packages.md +111 -0
- package/skills/sql-optimization/SKILL.md +296 -0
- package/skills/story-points/SKILL.md +219 -0
- package/skills/story-points/references/factors.md +367 -0
- package/skills/summarize/SKILL.md +80 -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/tdd/SKILL.md +42 -0
- package/skills/teach/SKILL.md +21 -0
- package/skills/test-plan/SKILL.md +137 -0
- package/skills/test-plan/references/case-taxonomy.md +142 -0
- package/skills/why/SKILL.md +158 -0
- package/skills/why/references/epistemics.md +144 -0
- package/skills/why/references/investigator-prompt.md +103 -0
- package/skills/why/references/source-playbook.md +17 -0
- package/skills/why/references/sources/code-archaeology.md +88 -0
- package/skills/why/references/sources/databricks.md +70 -0
- package/skills/why/references/sources/datadog.md +99 -0
- package/skills/why/references/sources/incident-postmortem.md +15 -0
- package/skills/why/references/sources/linear.md +48 -0
- package/skills/why/references/sources/notion.md +55 -0
- package/skills/why/references/sources/sentry.md +100 -0
- package/skills/why/references/sources/slack.md +54 -0
- package/skills/why/references/synthesizer-prompt.md +135 -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 +507 -0
- package/skills/xgent-app-release/references/build-and-package.md +70 -0
- package/skills/xgent-app-release/references/embed-csp.mjs +126 -0
- package/skills/xgent-app-release/references/frontend-archive.md +67 -0
- package/skills/xgent-app-release/references/public-delivery.md +75 -0
- package/skills/xgent-app-release/references/publish-api.md +321 -0
- package/skills/xgent-app-release/references/troubleshooting.md +124 -0
- package/skills/xgent-app-release/references/verify-preflight.mjs +50 -0
- package/skills/xgent-app-release/scripts/npm-token.mjs +99 -0
- package/skills/xgent-app-release/scripts/preflight.mjs +351 -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 +37 -0
- package/skills/xgent-init/references/external-app-AGENTS.template.md +149 -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 +66 -0
- package/skills/xgent-init/scripts/check-docs.mjs +232 -0
- package/vendor/impeccable/LICENSE +191 -0
- package/vendor/impeccable/NOTICE.md +11 -0
- package/vendor/impeccable/VERSION.json +22 -0
- package/vendor/impeccable/bundle/blobs/00c067253d37cd20a41dbe9c806d6a72cbff983ad1418b3c3e447998f577b9c2 +152 -0
- package/vendor/impeccable/bundle/blobs/00d167d9183c8d0c6c0682055107382e6672bacf7a712de0abc8f157c2cb2210 +86 -0
- package/vendor/impeccable/bundle/blobs/00f053b877a92a9847d69eec2403e40c757152f30a5ca807c5033c58d7c297f1 +33 -0
- package/vendor/impeccable/bundle/blobs/012f548547fae48ebdd22a3c3af8a01032641fddd530e3783bd73b7358ab2c49 +80 -0
- package/vendor/impeccable/bundle/blobs/016c082dcd2aa8f3c080a757c8ed335c6070a904bd2f39668bb9d3e6f95929c1 +24 -0
- package/vendor/impeccable/bundle/blobs/0221a193d111a9de33a785706a603e55dd974a115f549dbdf74e0f9ec72bde7d +101 -0
- package/vendor/impeccable/bundle/blobs/03b30331c176a248a3b3bd17abdff1a1fd658f09ffb2a412b36ae9627dd3f33b +105 -0
- package/vendor/impeccable/bundle/blobs/055c571f2960b8f929d6a8d3806a4d32dfcb9750b3ef8b60adc8930fff34b559 +101 -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/0605c8729dc638a46798e90ab12486fe3ae3372a869757cfb387a08e23b3c84a +152 -0
- package/vendor/impeccable/bundle/blobs/0617b37a905f0486c1ab4e91a287c8ef8292e253095c340f452d591206272f73 +104 -0
- package/vendor/impeccable/bundle/blobs/0648e4e06d01cabc91fa7dc19256ceedeeeea213b9265e9d36b0918370e16fb2 +318 -0
- package/vendor/impeccable/bundle/blobs/06b20bd42e5682a42c5d6fbfaad4c55e66ff9b9d99a604bd31d3545af120fc2d +101 -0
- package/vendor/impeccable/bundle/blobs/076a31941acbaa81013c8c511e146ed4138128eb5e9895dae3e9a27a25ac4f04 +13 -0
- package/vendor/impeccable/bundle/blobs/08346755b13f1a3f7c6fb4e512387884b80467aaeff109fd41f5521d2a95635a +113 -0
- package/vendor/impeccable/bundle/blobs/08398fa2d8e2b06b849f1c0f032e1e93b832e9294aed35c1c7f62b938d62ee80 +43 -0
- package/vendor/impeccable/bundle/blobs/087f6715114e901c2ce00b438e75b82fd48978c020a782f3dc361d39eb7198a6 +26 -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/09310582ed23393b171eb99ad4a288cc422ac53c26d76311586ce54c6df77b22 +113 -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/0bc2bc36ca6e74f9f610392f1a4fb8f57b2676238ba1f9c65cd8714f5d27e8a2 +42 -0
- package/vendor/impeccable/bundle/blobs/0bc7d7971b3edf2acd0580e847458dc6d84129d90715b452799ace3bed815c7c +84 -0
- package/vendor/impeccable/bundle/blobs/0bf6f08bf34d24cd88a78d544add9e4d71478bcf939926cde32f4e164882c775 +105 -0
- package/vendor/impeccable/bundle/blobs/0c064c9975f25f6eb5cf7911c2eeafd3e695d729f8c86a49a24ff2d76cb3cd94 +63 -0
- package/vendor/impeccable/bundle/blobs/0ccf57f758eb0d53bc32c5c77156f016e528d20fe2c2740662bf19964dfbb00b +152 -0
- package/vendor/impeccable/bundle/blobs/0dd1e6ccf053cb80e057caf7bf2fef30fd0197a41d907a1a8d2d2d02f6978674 +63 -0
- package/vendor/impeccable/bundle/blobs/0e081d496eba4bd77aca81723d59120c10177a71c9551a60ab923c356fb3cf38 +104 -0
- package/vendor/impeccable/bundle/blobs/0e18ac33b7e6a247b658fcaf926d9eac028399597dbaba366f1d2f2b884a383b +325 -0
- package/vendor/impeccable/bundle/blobs/0ed5986d1503399f48c11104df5e523a63be2d6558770ebfbbeb2323ca3f2ad3 +46 -0
- package/vendor/impeccable/bundle/blobs/11f75834c26ecd8a5b0afdf696e838953b235dc4835b7293bbc6b1bc27dd3106 +84 -0
- package/vendor/impeccable/bundle/blobs/14c9c9a7816026dd77494d06b8d1777c8d64785126b0c9ac8db5ebd996dfd6b6 +101 -0
- package/vendor/impeccable/bundle/blobs/14ef0ab84c10331f8af6b4124387a3f80b493175a04a3f89200719b4b5aea221 +152 -0
- package/vendor/impeccable/bundle/blobs/1547005438784032de3254cb35bff393e8187d7a459d0c20a693d9bfb0b5c1a4 +42 -0
- package/vendor/impeccable/bundle/blobs/162b814ddd1133923b9584bb95f85959e64844c94341d6bf10a81c06ab7cc02c +101 -0
- package/vendor/impeccable/bundle/blobs/1640c70b984a43e729d72d046109f87243ae84ecd64d2600a007d140558123cc +80 -0
- package/vendor/impeccable/bundle/blobs/16498466a97a5b19a593d5b3f245468c71784bea069d7fc8aa9690db5ac1d968 +29 -0
- package/vendor/impeccable/bundle/blobs/1652d639d91889a08bda7f351456c43ee30e5677aa4866a90f375e1e4be15deb +80 -0
- package/vendor/impeccable/bundle/blobs/16ba7fca1973c5faf53dd2ca523559129c0fe9e5f8d50b645f527afa78186cd2 +345 -0
- package/vendor/impeccable/bundle/blobs/16d99e9fe8e75d69042bc4fda12e93daa7e10f9fa6c00b12b0f0580b119a4cfd +105 -0
- package/vendor/impeccable/bundle/blobs/171777f8a8596d2ffdb43f4b935a7c6c12859ace233967f868a566390a59708e +325 -0
- package/vendor/impeccable/bundle/blobs/1725ca4aa546a34770f29191b58bf8dc14957d4258fb9e7d02f7b1c59c412ea4 +63 -0
- package/vendor/impeccable/bundle/blobs/173dd66abe65633910dcb04a51f40d6ff2a793f87088f022a02fc4cad24dd133 +94 -0
- package/vendor/impeccable/bundle/blobs/17c583cf8ad41266ea1e787b666b9d91fe13469d3d0f6af57c08e0146f9b17ac +58 -0
- package/vendor/impeccable/bundle/blobs/1898529e994bf0a31ee9ff3f87c343caea3d8a7e0986f404e129fbf89078ade0 +90 -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/19b439d7d16e139357459d3874f739ea94dbdffeb2a0e201df1620ed1e40574d +24 -0
- package/vendor/impeccable/bundle/blobs/19c5bfce570a0e2bddd4d9c788936ff9070c90299363c4853ba77bfd37306e20 +416 -0
- package/vendor/impeccable/bundle/blobs/1b289c8c09de9d4442109ada91b1fa3a190e113a310cab7aa26a3633c5df0bb0 +24 -0
- package/vendor/impeccable/bundle/blobs/1bb3bdce54386e96e21b5956713a80583e6b3b9d1170f3bb8dec3819fa341bc3 +46 -0
- package/vendor/impeccable/bundle/blobs/1c11cb8ea42536c7a51e197f1aa32198960bb89262da2eaf32e0feb03c70792c +152 -0
- package/vendor/impeccable/bundle/blobs/1c6258015ed02c522948f8f1a3b6457395a8f7954497b87c1cd83f1791f9f819 +24 -0
- package/vendor/impeccable/bundle/blobs/1d7145fd5bf65282b2e05cf42faf41766d68e83e2b75f460b3b62d81ada5e5d7 +152 -0
- package/vendor/impeccable/bundle/blobs/1d72b494f46a60e6c9c06e89bab79789dd85e11f62fb4286a03abf26d352dc1f +80 -0
- package/vendor/impeccable/bundle/blobs/1e2f696760ee55fb154bdcc302c7d7b0fbb807e0308130594bd892dae14dc9ea +42 -0
- package/vendor/impeccable/bundle/blobs/1f6c3a1d7344f44eaa88b6f38334ad7d7b60201709589039a58cee73de486f5d +24 -0
- package/vendor/impeccable/bundle/blobs/207d443cabe4e6fe1351f91785748957f757bf1e7aeca405433c0329dad46a15 +63 -0
- package/vendor/impeccable/bundle/blobs/20e2111b3e065e8e8054f715ea3902e64b77886b30d2bddee723558f22942620 +90 -0
- package/vendor/impeccable/bundle/blobs/21e78c8a77badb3f83290cd4577ed3b24bd4dd3b57136d7da75733d4f3ee9ac0 +19 -0
- package/vendor/impeccable/bundle/blobs/223f08673b267f81d7586f686afe05d7cd7529a8e11ac37d979f95c2ceaae8ce +24 -0
- package/vendor/impeccable/bundle/blobs/238e1967d933ca5739db708f7ad9f72ca8b34bc4c9b9e1c07b0a06dcf9d00681 +806 -0
- package/vendor/impeccable/bundle/blobs/244e5b7bca6d22a51b4e22104a52a36e477056b03d257b56d1d4e319cd6167a8 +80 -0
- package/vendor/impeccable/bundle/blobs/2499b18f26639694344ca95682f47c65494f730cfff88aa9bd2aa83a22e5926d +101 -0
- package/vendor/impeccable/bundle/blobs/26cd88d10f8a14ed0ddb6e6b21e5e2c981f410eac93afa179202c354d7d1c0d5 +113 -0
- package/vendor/impeccable/bundle/blobs/275dd1b6e63bbd30d2713227c4f79b880a8bc4e01cc48d392068bb86939d3afa +38 -0
- package/vendor/impeccable/bundle/blobs/28f65b42c1ce9aaea35dc37a51257d7c703bb7f6553ebe3b8ca238a1007251e0 +113 -0
- package/vendor/impeccable/bundle/blobs/29f741b71e75fd39c65ca6df4b01b5f6c4f3c4c7adf23b47a3220ce2c0251f24 +104 -0
- package/vendor/impeccable/bundle/blobs/2ac1624b1253f3b6fcf2da54d54293624176539b2e9609a49245e7e46c65ca5f +42 -0
- package/vendor/impeccable/bundle/blobs/2b58041cd82d819d12762b10becb95f8253c661bf6a9de40f61fc01c1204b743 +806 -0
- package/vendor/impeccable/bundle/blobs/2b5b2fbf5f658f34ea1997fb1aeebe01604d05187f75c6a4f1f55a5bc78520a4 +104 -0
- package/vendor/impeccable/bundle/blobs/2b9379cdb329890eebe2384fbaa23f771745f30d8cfc43e180ebd092e69bcd2f +87 -0
- package/vendor/impeccable/bundle/blobs/2bc5d62463cc83d6417df7b8f4a02b4135e2b1bb654aa7727890662496f86e3d +42 -0
- package/vendor/impeccable/bundle/blobs/2c2ed6286bd74adef4f24ef442e2e1bc0780d44bc060aa2a4c03a03988dbafd5 +325 -0
- package/vendor/impeccable/bundle/blobs/2ce1722bd1a9f366182d9357d629796b1448f7a0126a854df507eb044d891cab +26 -0
- package/vendor/impeccable/bundle/blobs/2e4846117a2fcdc1e4bc9570a5333da839649cb8ccdac6a30a87591ca05b4bb0 +54 -0
- package/vendor/impeccable/bundle/blobs/2f02f96f889e0c8e0e90806af1ef17e0c162a6cc402068f434d3f7608d9deda3 +54 -0
- package/vendor/impeccable/bundle/blobs/2feb3768125ba6469c92a50d516727e6d42f44579165ddfd33409948e2a3803d +27 -0
- package/vendor/impeccable/bundle/blobs/3149a87bbed84bffe3558d5eaf1dc596b2e84d3c1be290fc7b1c13e481ae0803 +90 -0
- package/vendor/impeccable/bundle/blobs/31b90048c0b540daec46762a10c2b6b6434737a89af005054d8b848d829d003b +69 -0
- package/vendor/impeccable/bundle/blobs/3253eab02b62efa80abc74a5c85da08f3e2c6c20dff8dec38f4d236cbbfa0f3c +63 -0
- package/vendor/impeccable/bundle/blobs/3565d038a2eeab88a8b18ff52e6630008ab30f867f9df922a38ce8980440b2e3 +80 -0
- package/vendor/impeccable/bundle/blobs/3673248740bcdd1122ccc610093ba2fe52f3943a61ce0b7170b74dc49e5b6098 +416 -0
- package/vendor/impeccable/bundle/blobs/3753448bca49da76dd8b12d5a8b4264414673f26e49028d37616faa8beb210b7 +127 -0
- package/vendor/impeccable/bundle/blobs/37565671b09d983ea1ad83a9e9190bc37255d93c68445958c6facecc7e0f7c4f +33 -0
- package/vendor/impeccable/bundle/blobs/37680abf9a8e446619fcd33862718f483d197bf2652f966adca8dc54d2909b9d +85 -0
- package/vendor/impeccable/bundle/blobs/37aeddc0f2031fa89d72519ae2e7542c267872f81786fb8288fca0a49118be11 +27 -0
- package/vendor/impeccable/bundle/blobs/37c9a2122efa64dc8789eb47d196150b0bc635e0ba95042fd381ff157002ed50 +111 -0
- package/vendor/impeccable/bundle/blobs/385a0efe833bd4afe4a257e7159590de0cf1b7fd8f7b213b732f1e537c62dab7 +21 -0
- package/vendor/impeccable/bundle/blobs/3898bd9b56a042e860a0db4fb4dd81ac81126fa218b604702e2ac0c2287ae09b +345 -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/3af7c46309f748ff3845f16455a431ec0e9e807e5e3a965e96e9ee75a1198eb8 +95 -0
- package/vendor/impeccable/bundle/blobs/3b2b60f23fa8ed9d73e721e17142c3933dc5318fa9a251742a76fee890ac81a8 +26 -0
- package/vendor/impeccable/bundle/blobs/3bcf81b938a0f0309e9ed6616f4bd18d82f07e2801411ee4cce51220d417eb95 +80 -0
- package/vendor/impeccable/bundle/blobs/3bd55b35c253f7841ca4e6e1a855a4b477d59aa2daf6e61e93fd685caaaff131 +63 -0
- package/vendor/impeccable/bundle/blobs/3bed76a0d528e2d73da8acae4dc63702bdb5baca5ab11600d70e75fc9f2ba90b +42 -0
- package/vendor/impeccable/bundle/blobs/3e3b6fdc6afbc2c2a734d08d6a18b393b7139c56f28f91f82e13e5555b98018a +84 -0
- package/vendor/impeccable/bundle/blobs/3ef9a43006bc68d83bc958fc8401e59f9beb6379048f5ced047747fdad05b895 +46 -0
- package/vendor/impeccable/bundle/blobs/3f2c351303b74e217907006fb9c55ada2ef596e9710c13d631e20506d17b9ee8 +325 -0
- package/vendor/impeccable/bundle/blobs/400419aaa20f710e1a7e5ca1fce9e8bc995c4db84053f40cf778d987619e0210 +24 -0
- package/vendor/impeccable/bundle/blobs/402373ef95962ecb81dd3d7cf70ecb3bd3e22a2bd2aabb4c0d76f7f4f9447870 +105 -0
- package/vendor/impeccable/bundle/blobs/40c87038b5f75147a5952a96237acf312a327bf70c1bcd8e0a5f064625ae9668 +51 -0
- package/vendor/impeccable/bundle/blobs/40cd6024312a1339aa66801df533afa543e60c36e708f0f9659dd8d558f83dce +63 -0
- package/vendor/impeccable/bundle/blobs/412dd9a5238aee223397591fe49b3bd27b6b53d649a0e67ed8570f3e199cebb9 +24 -0
- package/vendor/impeccable/bundle/blobs/41ef23c048ab739f48afdce26a2678d36ee40bcced34ef4b969d1d8ffafca64c +113 -0
- package/vendor/impeccable/bundle/blobs/420d82fe41884b7aa8c28750520146d8160c91396ac332a96b2d82a90b017fb2 +80 -0
- package/vendor/impeccable/bundle/blobs/424ff273e7ab283d6695d127bb502675627193f5b752d7b43b7524bcfc42f43f +84 -0
- package/vendor/impeccable/bundle/blobs/42831c3cd874346d8e7f120808d91e6ed3cda5c3eca6eefd76b126659536bc87 +148 -0
- package/vendor/impeccable/bundle/blobs/42a71df98075f66e6eb396b69ef3d6b1c3db46d1c1d24b4edc9d15f53d193ecb +111 -0
- package/vendor/impeccable/bundle/blobs/43dbfcb7c2e54c9cca9fce66024f17c06a2f2be645547b718b75c8828a463de2 +24 -0
- package/vendor/impeccable/bundle/blobs/442749aed338f51c1a3ccfb182c6ade9b74b90590b67984062ac94a5b100e914 +80 -0
- package/vendor/impeccable/bundle/blobs/4435529820c3fc2eceae8b1ee35c906a34c7612fb860117e896152b45aee0770 +26 -0
- package/vendor/impeccable/bundle/blobs/44a60aedcc350c2d7d501d0f830a31a586a6511a9ff9b4e361cb328bb747339d +101 -0
- package/vendor/impeccable/bundle/blobs/45dcea8da47cc21f447041daa942cf5d92cddde9a5a02c196cedbd159c829304 +47 -0
- package/vendor/impeccable/bundle/blobs/464c0c2b33d278375aec66caf95518f5e7ccd0aad1bea3f9dd553ed47815daa1 +325 -0
- package/vendor/impeccable/bundle/blobs/4700adf4542874f204c680ebad8317a97bf7169dbc04147082618ab59ce70c7d +85 -0
- package/vendor/impeccable/bundle/blobs/4777bbeaff2efcd6a2a66b07aacaaf57cd32f3fab1c1da5a0513937fafb48bd1 +63 -0
- package/vendor/impeccable/bundle/blobs/47b3461f6f76db80fdc49fc7542552d65fed24edc8d30d903cb76aefbad0ed05 +84 -0
- package/vendor/impeccable/bundle/blobs/47edbdfaf27073c47033d1ac7dfee881be49e2dcbda7671d1157300481dde6da +1 -0
- package/vendor/impeccable/bundle/blobs/484ea165f6d49ecc15b7a5c5623e377f2e203f4dad366df23eae99255ecf4572 +152 -0
- package/vendor/impeccable/bundle/blobs/485774d58dfd5796956024cdd9c12f05e692a3703f70b12a02ab43918885c3fd +101 -0
- package/vendor/impeccable/bundle/blobs/4879f38b23d0a251a63cbb0327e660296194cd2e71eb4da3236c6ebfe5807746 +33 -0
- package/vendor/impeccable/bundle/blobs/488da2e7406c6b4b5c92d7bc8cbd370cdaafc82a5f3ab5adbcffb21d1d1c4df4 +113 -0
- package/vendor/impeccable/bundle/blobs/48bb7c3b738f57fa4f3f714d7e3e919879036f3e751135a9acc1c5ede1850ea6 +54 -0
- package/vendor/impeccable/bundle/blobs/492a8030d11e2f4908d934bd817bd6d16a3164056c74a7172f60e2cec5ff3055 +42 -0
- package/vendor/impeccable/bundle/blobs/494d6fcb4701c437597c2ed16a9595af92f3d9ad53c944c96a2fb563bd766af5 +99 -0
- package/vendor/impeccable/bundle/blobs/4972f28d96897c8dec891f0de7a0d9d51f36030ff780ed9d960241c75413da2b +46 -0
- package/vendor/impeccable/bundle/blobs/49a7b37b98fb6e3ef68154174677ff4b9f1715efcffdbf6b30c3535b3e4e302c +54 -0
- package/vendor/impeccable/bundle/blobs/4a6f0386bff78bb42efa285df2919e75209ec336672cf5fff91ba66ffb352eaa +63 -0
- package/vendor/impeccable/bundle/blobs/4a8a45a46b79948a64b484edf389aa0b00fc80de855470cbabe3c7c71268f345 +828 -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/4df48b7a86d525ad12e7889a1fd16b06ed4b25a9470c359c7193a6d82649262f +54 -0
- package/vendor/impeccable/bundle/blobs/4e3cc4d0e229ca96dd2e28fb2da0478a7f0bb64e447d07a652c425d8fbc57573 +113 -0
- package/vendor/impeccable/bundle/blobs/4ea8e05d0f88d24f182ad554da84317f90b9730e29fad262143ddf423a1f8645 +26 -0
- package/vendor/impeccable/bundle/blobs/4fb6d2fcc8afaf827a7377ddd604725264fd83be871e2d35062e9d1939144404 +25 -0
- package/vendor/impeccable/bundle/blobs/50d4b14134fc06daeac0aab6960800f171ef85250d3bcce6f246cf81e824463f +88 -0
- package/vendor/impeccable/bundle/blobs/50f3b5714ca3e2c1bcf070003733407935ee050609d3123c2c065489fbc9950b +43 -0
- package/vendor/impeccable/bundle/blobs/51032bb883137007127d30189b44b516d0e6140271bf5881da7eca76f8bd282c +113 -0
- package/vendor/impeccable/bundle/blobs/511ecde67e6bd976c9bdfa8d92f0dba359621344f8135c2a5ce5a66b385a4cb5 +42 -0
- package/vendor/impeccable/bundle/blobs/514a27fc9830455828d337cfc2fa95fa86be8e5464501bbabb9aca09a66b40ad +63 -0
- package/vendor/impeccable/bundle/blobs/521391d55814fdef6cd648ed62154a14d77b324004a0fc2d06c0a4e97857eab2 +806 -0
- package/vendor/impeccable/bundle/blobs/529cb2ace696ec11a86f4b010c9b137acf282072e483932181be1871df2aa690 +152 -0
- package/vendor/impeccable/bundle/blobs/52e861ac390a62c4473ae0cf87ff18dd6d721afa6557910492dd8ed28bd9970d +84 -0
- package/vendor/impeccable/bundle/blobs/532d6387db6f5da1a59dc7d29ce4d8ba6ca044626c367dc16e1cb8b981eb2d9a +104 -0
- package/vendor/impeccable/bundle/blobs/53628d05b7eff0d4f48b95e48fad40266452fe1b42f398bd88dd9328353e0dd8 +101 -0
- package/vendor/impeccable/bundle/blobs/53de37260c4f1c37e467557e9b038faa0f285b056bb2b95f435e0a7d1b69b0de +89 -0
- package/vendor/impeccable/bundle/blobs/5415103ca4422ea1422e23bfe9f9bae181f5d6d6407442f7fba31856ada58d12 +113 -0
- package/vendor/impeccable/bundle/blobs/54e71283cbd5646021fcd8eaa28d85852ec5288109c306aca9db9e2e4832338e +69 -0
- package/vendor/impeccable/bundle/blobs/5515d5210fbe2ef64e611ef2827a7204b7cea2f9df059f3ea499931f45065d93 +104 -0
- package/vendor/impeccable/bundle/blobs/56285b28b0ffe471761c2ad062d3f933ed2346ca1b617f1323a30fed99a1a852 +24 -0
- package/vendor/impeccable/bundle/blobs/56500b1f9d2fcec8324d7f448d813048b5831a46d3feeb1055bd3eb17ec3660f +70 -0
- package/vendor/impeccable/bundle/blobs/56cc1bba51e6805de370160ce4a9399fef3740571204f13c3c751725870305e5 +113 -0
- package/vendor/impeccable/bundle/blobs/571526fd5c60a586ff65bdb3f8333f26c36ae227f5f5ece826f4a43b4d4aee0f +325 -0
- package/vendor/impeccable/bundle/blobs/571f5c3bcf01c9b1bd02ab853a54db3f88375c4b8f39dd67d53e983a33e08bb7 +26 -0
- package/vendor/impeccable/bundle/blobs/57e28934208e3eac653ab59c5c6a5e4eace44906d8ac86472988242d777ca5a1 +54 -0
- package/vendor/impeccable/bundle/blobs/5855d7595b0212bb8d521e0265378d437df8d2343d5f8a30408c3edde0a14d96 +85 -0
- package/vendor/impeccable/bundle/blobs/599afc25c1d6d083e4d4e60e1617ab05f6c5ecd52be75473f3788063219aa174 +31 -0
- package/vendor/impeccable/bundle/blobs/5a07d4769a741cd00fdf8c95b943ef072eb12cd0c9e2c2d2622d5fe0a4fa3894 +46 -0
- package/vendor/impeccable/bundle/blobs/5a9626fb8c1e9051155c68626fe7c765a55be325113245d44b4991fc3d3b014e +44 -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/5ce0631eacaae6d9fbb23ade26a774a20142cb40d3a8d5608a3fb9dbc4116b60 +806 -0
- package/vendor/impeccable/bundle/blobs/5db17cd013c10dca0012bc18aee7276280941579aa50757682e9ce60c4f7a006 +104 -0
- package/vendor/impeccable/bundle/blobs/5e354ae11913d5846faa3681a9ed98b68d1881fbbb1ecebf0769e3010bb0a426 +42 -0
- package/vendor/impeccable/bundle/blobs/5e6eea05456108b8766cf354dda998e90b6a5ecca7f15d807e28659ee78c306f +42 -0
- package/vendor/impeccable/bundle/blobs/5fae7f8a2fc3ddd49ad0a413446dc44daedef5b6b7de5eb935bd2fbfad646d58 +92 -0
- package/vendor/impeccable/bundle/blobs/634257e766b1fecacd25e27dbfc7e21ef3b440b01e94e92b8b17711018d8a661 +152 -0
- package/vendor/impeccable/bundle/blobs/6428239079f98fd6500e9fd032dd289b52052da7a4364ff357b0a5341b6444db +63 -0
- package/vendor/impeccable/bundle/blobs/647bab2f5cf6279d58d808f4df05d1ac63c1c86c6df9d13406ae776458653995 +42 -0
- package/vendor/impeccable/bundle/blobs/64802d14087fc96b38ef3881fef8098b36068d07f3b942031637b18eef3dd2af +84 -0
- package/vendor/impeccable/bundle/blobs/64807d8f43267f4ed879e997834bbf793bd4605ba1dc65f4b545324b660a7063 +80 -0
- package/vendor/impeccable/bundle/blobs/6528f2aebe4a425b724de293c8f6dc8a42ca80c7f1ed3039b8b9a813b004956a +87 -0
- package/vendor/impeccable/bundle/blobs/6575a657642ccdab42d0743ceaee06621c77811b4dc4f21c616e28aabf5e28ef +42 -0
- package/vendor/impeccable/bundle/blobs/66d60356172ccafdd334fca9bf33243c8409216a733dcde0d66a24fd70ee8132 +1 -0
- package/vendor/impeccable/bundle/blobs/68c5636a7858dd0b5137a9229c15e25fdc2ee40a0f8a4e9d809f78e809256262 +327 -0
- package/vendor/impeccable/bundle/blobs/696c15f96d49a03091b71a408151a3297521f7a8231b98ca9b1103667a0b5f89 +80 -0
- package/vendor/impeccable/bundle/blobs/69be9bb887f4d8ba4ead24928f9b97d122c796e731652fc0c08f195ab8ec2815 +105 -0
- package/vendor/impeccable/bundle/blobs/69cad1ae7355825ef320ac9638a1c9675ba9fda01c9a0fa12244cc4a1973e550 +214 -0
- package/vendor/impeccable/bundle/blobs/6acc0bf221a4ddc6e5c6438348920b2ca2393b29c4314dbde2cdc23f2b1a9639 +58 -0
- package/vendor/impeccable/bundle/blobs/6bc62a59f6fef0b749927c8d10e9849ab2411199d86d70772a86f8e83ac309f5 +29 -0
- package/vendor/impeccable/bundle/blobs/6c382f8283756e8a693d832b750f7e4cbff1ca5bdcc3825b2b4ef4da9f21876a +94 -0
- package/vendor/impeccable/bundle/blobs/6c9ce3e27ec4520ead001da3aad2a2ebba481c4e5cd22873db8890259ee579fe +95 -0
- package/vendor/impeccable/bundle/blobs/6d21d8e2729effaecc5b6239dadbcffb1ec8d51e8bdadeb47a39827266a61c5e +26 -0
- package/vendor/impeccable/bundle/blobs/6d368b679a0ed1815812815de65863b5840d419589dfbda06224c01149240287 +258 -0
- package/vendor/impeccable/bundle/blobs/6d9258a49c0b0583ec255eeb1092554298d5eea676fb9391f5a5a1377c3fd770 +87 -0
- package/vendor/impeccable/bundle/blobs/6e7e3b7c4cf331cdb43f4546c164acd6c45a267ce3289dcfa87e13202d98c747 +104 -0
- package/vendor/impeccable/bundle/blobs/6f4dfe968f47302ea64dca0e02f8c6d81497d93e4f436d09236e305456cbcc02 +87 -0
- package/vendor/impeccable/bundle/blobs/6f7f1639a933ed88e116aa8ab0cfb951096930d14f413349ae22ed04e28d2358 +46 -0
- package/vendor/impeccable/bundle/blobs/706c68612a7c6b899a0abf0b407eca7cabcd371deae60f830aa38aa86947694e +84 -0
- package/vendor/impeccable/bundle/blobs/713a942482531ef8ef103adf48d9decd7327697450e444289aa0479458e4ee1f +101 -0
- package/vendor/impeccable/bundle/blobs/713cac92a71ef45e8b700180d881f830096cfe2b0615e79b276ccc4a12c051e0 +80 -0
- package/vendor/impeccable/bundle/blobs/7212014fb2477d1d54aedaa79cdb861071a58afb2ae6d4dc5a495fa4810c6f8a +46 -0
- package/vendor/impeccable/bundle/blobs/73549b5536699c915156339976192fb38534bb43158cf9262ff5b89090388c64 +806 -0
- package/vendor/impeccable/bundle/blobs/73bd60faec1d8360753595f1ee9e970b44933448202767d7b0e87c275d399396 +6 -0
- package/vendor/impeccable/bundle/blobs/73f8bdec7d9a97476fd7d7e0b4114b5c3e9c7b84c22cbb876cd18c3e64a9b8c5 +42 -0
- package/vendor/impeccable/bundle/blobs/745b1f74877f6b3445da48af65dc45c66c3daa7738cb9a928aaa900889c2a204 +104 -0
- package/vendor/impeccable/bundle/blobs/74e20b26c29242bbebf79760315f7f0788e001566695618cfc70805484c6f92a +111 -0
- package/vendor/impeccable/bundle/blobs/754e9f0aa2101245a83cb17d8cc5bc49cf87997b29a83dedbfff283dbd0a8c4f +44 -0
- package/vendor/impeccable/bundle/blobs/765d3e890cd7f58ca94b6834181052166e9c4f9ef06278dc241da4d64da2d595 +113 -0
- package/vendor/impeccable/bundle/blobs/778cedc9199b407d3e23fa1041e38d548b00b1101a33517aa2a2eb299f9d0edc +26 -0
- package/vendor/impeccable/bundle/blobs/77ae09542fbc10aa4e8b119d6fd19359908a47c13c30068d6a150bfdb50e3e10 +24 -0
- package/vendor/impeccable/bundle/blobs/7848f40e224cf520bd8554943c9816a1ff8c97b1db57af0844e3b1ebb223d91f +416 -0
- package/vendor/impeccable/bundle/blobs/78c236dadb7e70337dc9dfa67e65fc15b7abed137ad320c16410ddfa7aec34f9 +131 -0
- package/vendor/impeccable/bundle/blobs/79114c6bf78b5a1838fe19bf033f3be85b232560eebf190ff8586aaec34ea170 +105 -0
- package/vendor/impeccable/bundle/blobs/796bbd8231413fcbf22eb7e6f40c402842aa4b10b1894545a7b05d9201ca7c4a +152 -0
- package/vendor/impeccable/bundle/blobs/79f85e381d1d6fdc8d39f54e1c8753fccf19b4ba3abb9827b6a7cc61eb376d1f +416 -0
- package/vendor/impeccable/bundle/blobs/7ad26830c7399a118cdbd4465a5426bc1919015aba99fd15959dc6deb8edc8d6 +80 -0
- package/vendor/impeccable/bundle/blobs/7af7fcc09c6b14f26ba78734460a2f9dddd2dcd2e2fa0c47c682f539e2f4cad5 +24 -0
- package/vendor/impeccable/bundle/blobs/7b1a4cc5ce94837c8309962a204c47361927e442b7a1c3cc472f90276eca8b8c +63 -0
- package/vendor/impeccable/bundle/blobs/7c417abe75f0ce4341b6f5acbadcafbbeabcc32cdb13c930aecc5cabda9f9242 +26 -0
- package/vendor/impeccable/bundle/blobs/7e36403ed58e0e82c0e42bf2fbea1c066b8e63276978647a6f1e44bf1edb23fb +63 -0
- package/vendor/impeccable/bundle/blobs/7fd1617d5a86b7a1a0bf9d6e291b334ac41a3efce31031eeaef11de7cd7e75b4 +325 -0
- package/vendor/impeccable/bundle/blobs/80191b3580a996a2045105976f728e0f46de22c412fc7640741add9767b2d8f4 +101 -0
- package/vendor/impeccable/bundle/blobs/808291e15746c9a64d9ede3ad3f06664b0a72970aa95052e064a96f1bfbed361 +54 -0
- package/vendor/impeccable/bundle/blobs/814610dee1081abc4213476ff0c4ae3e8f457909550d250ea0f89953687c85c6 +63 -0
- package/vendor/impeccable/bundle/blobs/8157b5a376e46980117f1ad6d08b24ee7be966f5de64b041bd213d486ea8c077 +26 -0
- package/vendor/impeccable/bundle/blobs/81666fc7f783b4e3514db6554e713dc0479bd9cdedb06e93d15f8b579aae869a +105 -0
- package/vendor/impeccable/bundle/blobs/835f19a0a3812f3652dd6979a2ce5597f654fd01f26e1b420b92d5f42b997ce4 +121 -0
- package/vendor/impeccable/bundle/blobs/8373668da1aa37c39888809ed9e834a7edfcb884af12f74934c270d004fba626 +85 -0
- package/vendor/impeccable/bundle/blobs/83d614fec61078175383012a088f49a9c0bb08b9ebd2b651c77cb94a323474ab +42 -0
- package/vendor/impeccable/bundle/blobs/8449781319a33d4a10a7fab9bfa4812241c303b95f33703b300b097dba51089a +152 -0
- package/vendor/impeccable/bundle/blobs/84a06415956986cb215139b3efda7b3c7a5bb6f502a3b3d9300f0744a970e620 +99 -0
- package/vendor/impeccable/bundle/blobs/857c4a0db5859f1fa91152db684528299dfc552525f50f416d1625a270e12671 +46 -0
- package/vendor/impeccable/bundle/blobs/86d10faab62da852aa1f4304157871545c853da708b6fe61c80aefb552c1f300 +84 -0
- package/vendor/impeccable/bundle/blobs/871a8e4d749b807c693ebabd83defbd6c76e1bd2a0f53a28a460cb1308ba8634 +318 -0
- package/vendor/impeccable/bundle/blobs/87b3db688c7963898bda8096f7868fed05ec5a0a80d14298e8b906b70cdf9c42 +416 -0
- package/vendor/impeccable/bundle/blobs/881a58aadf300bcc8f4947243e82192ae8dd7f14822a70fabc84fc74a5f9199c +46 -0
- package/vendor/impeccable/bundle/blobs/88549c11ea55d5dfc9f551db9a9c270d7362a9d42aa83db7747c9a7f020e1255 +46 -0
- package/vendor/impeccable/bundle/blobs/88749ebbe9bc87250765a07c2b959508262bd0e276ad60baa53e6e48c3579143 +806 -0
- package/vendor/impeccable/bundle/blobs/8a2d316593a631579bbb2f3fcb90d4488f85e97f69698dd2dd4fb50766f537d3 +325 -0
- package/vendor/impeccable/bundle/blobs/8c06daf096984cf71cf4133ea284dd6eaf503208da828816836ea41dfb69a234 +80 -0
- package/vendor/impeccable/bundle/blobs/8c34f78d71ac02c99303c7e0ca9ef30341aa9ecdeb75804dcba7e36a127914c1 +84 -0
- package/vendor/impeccable/bundle/blobs/8eb39a13e3d3650d4261f8fb06e91d6c0b888ca12ddbd3a5610cd8f0b05ad176 +69 -0
- package/vendor/impeccable/bundle/blobs/8ff60b8b5369d364f732f8de10479a39294e65341b3e0b6497b21de5c8e34b2d +806 -0
- package/vendor/impeccable/bundle/blobs/904859c8160b02330b04db23a8eeeb4ef55bcaa10f5208b8d73a1718334633e7 +84 -0
- package/vendor/impeccable/bundle/blobs/9205e222bc6565b37fb504ceec93233c2d2a456802b69d16e6b1c44723907c4c +5 -0
- package/vendor/impeccable/bundle/blobs/9287af96048c58ed0e72493cf7eb90c3957d4ba8b19e70ecf5d1f54264e9e597 +101 -0
- package/vendor/impeccable/bundle/blobs/92b7ab84c828fa888f4882c417c3d7f8fde2e5445b40f96f4fc8181a3e058afc +101 -0
- package/vendor/impeccable/bundle/blobs/93c53421c3376f695fe9dad5c82102f74bb5dd15e4ced81bb4ad50a71e5f1027 +24 -0
- package/vendor/impeccable/bundle/blobs/93eda27117930692a20f668f1cb0a80b7e14ab865998faba567cd721116081d4 +84 -0
- package/vendor/impeccable/bundle/blobs/94b4ce6299fea93d9f256b2d25705961a76bc5ea940c56db4145686ebc99df1b +89 -0
- package/vendor/impeccable/bundle/blobs/95b07450ad1ea0b7adc369587b06e52404945bbaa5d87f7491fac7ffd0e6e2ae +11 -0
- package/vendor/impeccable/bundle/blobs/95f0c7935a6d0375e09ae67ae0066c0ce7b583bf1d445d268cc4d2f4f900b1bb +113 -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/98384b78af087855dbb526ec1e870a676ecd87f57237643dfea815317dad8a07 +26 -0
- package/vendor/impeccable/bundle/blobs/98afc4c6da252e90c6b783079b6f157bf94a13dd4351392e881edd2a100edf6a +105 -0
- package/vendor/impeccable/bundle/blobs/99e4a6facdb07986aa721bda8a4e35466b30091f32e38d7a71d9fcbe3591f65a +45 -0
- package/vendor/impeccable/bundle/blobs/9a2c08ee2516d2ee87129e7ebe6a0895f9990c9852d1f6fa7e70be9a6a88a659 +234 -0
- package/vendor/impeccable/bundle/blobs/9a4aa0d4903eabee987fdc92053466ff7f6eb0604797aee0efe67d67999b3eae +46 -0
- package/vendor/impeccable/bundle/blobs/9d45e5f6c082de6df4a2cfff11deb969715c49b5d9891d100dd1b2252c5bdcdd +152 -0
- package/vendor/impeccable/bundle/blobs/9db3c0857f4c2c8877b1fe24a47a229fee0de76ec9057bd8ee95f0677fb58d74 +26 -0
- package/vendor/impeccable/bundle/blobs/9e161532dc6731581d7a5f35bda5a2865e5248df7aff90e6dfc9221409893e35 +54 -0
- package/vendor/impeccable/bundle/blobs/9e82126a2e08aa365f9c430d383cf6e1921e04d1e0a1b5777716ff97828cfad8 +46 -0
- package/vendor/impeccable/bundle/blobs/9eb03b319ce7a2b281bc85ed1b0a437eb05ab2f765fc267354f9f9e6cbfadc25 +806 -0
- package/vendor/impeccable/bundle/blobs/9f1151faffbaadba0ddf5c09a4b2a82c9a12c900a2c1a9dac9863ba9ba0f420e +54 -0
- package/vendor/impeccable/bundle/blobs/9f2993499adadfdef4065a9a7fb69c75f888d892d4ee6bdbe62619bc772f495c +24 -0
- package/vendor/impeccable/bundle/blobs/a1a56df5fd51be403ca85a2f8054bb6f2bfeee443556c7798c2482e412fb6a09 +54 -0
- package/vendor/impeccable/bundle/blobs/a1af8b8a97665a3692eb39872c235796684a387a0b83785872f81aebd9dab046 +152 -0
- package/vendor/impeccable/bundle/blobs/a27399e3056c77a28ddd310fb5b4dee6e8e440dfa1737f7e38815097bec4c3a9 +46 -0
- package/vendor/impeccable/bundle/blobs/a423108e7e31a54564e2e0794186394f842625fd9f7d7ce6e6615362511503a2 +93 -0
- package/vendor/impeccable/bundle/blobs/a4cfd2330c8cca94b62986679b3f9e3bb9ada0cb30c2c63c5d19c6039f5a45ae +104 -0
- package/vendor/impeccable/bundle/blobs/a55f016c046cb6a27c55bd7f346375aeb506a755c4fbca19a5f92dbd42309c23 +59 -0
- package/vendor/impeccable/bundle/blobs/a569989e6a3d6453b4c45e9474e162a15cc54e11732ac6baa7990a6e7cccc0b5 +21 -0
- package/vendor/impeccable/bundle/blobs/a7045711a1f0dd2cd5bd98e57ff615f638d7e29738bdd618cf15e83fea5993b9 +325 -0
- package/vendor/impeccable/bundle/blobs/a75b892696469e3ccd2af33c9eef793e635efc3c5ac45336b0c1373d90c856b0 +63 -0
- package/vendor/impeccable/bundle/blobs/a7e8e60df83c6f47590467094ab2a13f1fe28ce45959a4e69dd89575a4208646 +47 -0
- package/vendor/impeccable/bundle/blobs/a7f036f4217933db8a96cf2f0ba251b15f388839d62bcf95720ce0b7152dd185 +806 -0
- package/vendor/impeccable/bundle/blobs/a892e337eee548d53252abb72ba5aa85cbcf556ffd8dc74e05534652c010d574 +24 -0
- package/vendor/impeccable/bundle/blobs/a93397adc906e245c69b42d4b25931fc92dc75baa60ca9a3749ba23b52ba01a0 +88 -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/a9e63b2df611805e845e0bb1cca1a0c27e83640a78185c9fd9de90d53a539cdc +42 -0
- package/vendor/impeccable/bundle/blobs/ab80e6a971baa66342548a846ce3fb69824ef9ef4e0f26c6f02685f225d00bbd +26 -0
- package/vendor/impeccable/bundle/blobs/ac695dd89d5f1261004cfa966526f5d5e913c92fa0640d4d71cb42493effad08 +131 -0
- package/vendor/impeccable/bundle/blobs/add1bee76f897f989166a5b9ad1b38d9173248e29d668d5c885ae9a0eff73861 +105 -0
- package/vendor/impeccable/bundle/blobs/af35b5fb6e45acb6483a5fbb864c3eaa9c57bacc43857f48183c836041c670ae +101 -0
- package/vendor/impeccable/bundle/blobs/af5842c4844b692b817319d5375611d4211dc7f459fb12da358baefc3a6cd373 +63 -0
- package/vendor/impeccable/bundle/blobs/b0e1a0721a1e47675a8750cfb608138743dd9fa9c047146e5cc8f82b9041be7a +806 -0
- package/vendor/impeccable/bundle/blobs/b14dc725606717be881a058bb691c0af1860cc8ad98d48e5a4789fe1a7de5458 +806 -0
- package/vendor/impeccable/bundle/blobs/b2732083f8f1d1924d38f84f179491430aebda8e0fd1f1d0785e3f883bcf3a40 +63 -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/b3b1d5a4c80ce279d88896601deee9ccfeacdae0d0cd433600985a5f7ac93c72 +26 -0
- package/vendor/impeccable/bundle/blobs/b4be5499f404a926cdd2c55d8fb7409ba74a56b3d0c7d865594cc0254d3e499a +42 -0
- package/vendor/impeccable/bundle/blobs/b4def5b57733b6ba233570bd5691a536901f8b15479fc0111a2cde56224d0e1a +325 -0
- package/vendor/impeccable/bundle/blobs/b5f4fbb4a044c3f5ec14adc847222488f00fccabbf79ecd0b21084c8d319d616 +105 -0
- package/vendor/impeccable/bundle/blobs/b626e0677288a1660e9ce80c4f0454b527010239681f6b8dcc0f36b4a4d6bcb2 +113 -0
- package/vendor/impeccable/bundle/blobs/b6a2ef031313d3848ab2928875298550836f0f9ff7bdf5772e918c5c610ea448 +806 -0
- package/vendor/impeccable/bundle/blobs/b6dfd3df9a371e7d179d365cc1d72c11d4ed91b6507c0e1dbec0843419542f66 +84 -0
- package/vendor/impeccable/bundle/blobs/b719be9c5d4ced5d649ec6c0c90630196e7ee513d0da482aef13c705fdc23ab6 +113 -0
- package/vendor/impeccable/bundle/blobs/b7fcd2b03539d1029c8774fa806e6f4c677448e9e97e15f69b066022536c5491 +80 -0
- package/vendor/impeccable/bundle/blobs/b824bb76a657d3edd65e89807dcb21a3679eab39292423066e11368b35afba79 +325 -0
- package/vendor/impeccable/bundle/blobs/b8938fea3399aa639b4c873248035c219658069eef7be62672254e2f72c056f4 +42 -0
- package/vendor/impeccable/bundle/blobs/b8d49a3cab3428d9f351502e9c2c5802cef187e0d2af626ef3e1cd1837fd06bf +105 -0
- package/vendor/impeccable/bundle/blobs/ba0d96d88ab40fad1cb522e60b11affc568cfe9d340110ac5e71f834ac3d0f4a +42 -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/bc48bca63dff44e1f0205bafb64e16b2d6fb294ace405dbc9ae06a3bc6107154 +113 -0
- package/vendor/impeccable/bundle/blobs/bc5f71f1129d0f2c310d913d07c8dc609a1d25644121bd78c308f42d52a0b9e9 +86 -0
- package/vendor/impeccable/bundle/blobs/bcc05ea92faebb5c74037a9d4263a5ce9a56f5ab07c8ab3c59ee704d8cade745 +24 -0
- package/vendor/impeccable/bundle/blobs/bdd676c8f29295addfdbceaab285bb1184ec3ef7ff60501908b97ea8269580c4 +85 -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/bf3b8883f8550744e08754af82a78939ab8b1237e5fad6f38d819e2f17e8a389 +104 -0
- package/vendor/impeccable/bundle/blobs/bf92a4a51b29de9661c5fa82f3d79244718a67d385ef661990f0c4a5b367e843 +104 -0
- package/vendor/impeccable/bundle/blobs/bfc51972fbf387566dc9e29c8b1af479a66ab401fdbce659fae9e6a5a9d85316 +69 -0
- package/vendor/impeccable/bundle/blobs/c06effcdc60859157208d3b7ee23d56160f2386f6a2dfa2514ba82fe21828ae0 +24 -0
- package/vendor/impeccable/bundle/blobs/c100b67a4ae248ad564182b181acb1ee2fe64c00049aeef62d4e7a3213726f37 +26 -0
- package/vendor/impeccable/bundle/blobs/c1cb6877ca99a0c1b38ba0c7d59f32702d3022f6821d8045f7133f7c40b6362f +242 -0
- package/vendor/impeccable/bundle/blobs/c1f3766091019b6f9183bc1d11b1e0fe03d44c168dc05a682c55df32f904dcfd +33 -0
- package/vendor/impeccable/bundle/blobs/c2dfc965319745c403b99e00e9e97de15f1300ea721bd3f708f0ac47aadc537b +101 -0
- package/vendor/impeccable/bundle/blobs/c327bf17f2af186f87164dee5fb5468746a9b137f0b604365d531ac9387f3712 +325 -0
- package/vendor/impeccable/bundle/blobs/c6b3bc811eb23d90ff9add1e0e5b40999a0bbbab364f5e6d08061f36d30429a5 +39 -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/cdf8a88b9865599c58fe285041d2d46eea7d9bd2d4075d82de358191742b20ad +46 -0
- package/vendor/impeccable/bundle/blobs/cf3d3a296890ac1ee363fee930f252e20d0935cd575367ad017b3cdc2dc5a50d +26 -0
- package/vendor/impeccable/bundle/blobs/d1366aa4802b364893c2a14b16fe95c3b7fab79f9f69eb272fd1538f7cb1ce2c +105 -0
- package/vendor/impeccable/bundle/blobs/d1fbd55074abb2251bdaa03749d34acc42c38e46e47549f18f5848df57d43c42 +86 -0
- package/vendor/impeccable/bundle/blobs/d2455359baf5f9e75360c7094e28a16937c8674619e07d58f30d2b5abfd31e53 +105 -0
- package/vendor/impeccable/bundle/blobs/d2e16da9bb6b33c931378d1bf57dcfff5dc426a71434bc352cec6aece715a66f +152 -0
- package/vendor/impeccable/bundle/blobs/d4a9e18a879bbb92aa0a56e16b45481090dffa4470efdecf52fb0da8c900be5d +46 -0
- package/vendor/impeccable/bundle/blobs/d57c3e0453f601ad688911fca4471057c7b46b561fcd42a1e12a581101c5186c +41 -0
- package/vendor/impeccable/bundle/blobs/d5f83912eda93d42f93522bb74aeff0ea04d9c559577ec52fcccc130dd03166d +137 -0
- package/vendor/impeccable/bundle/blobs/d6489d7f3e607ce3f8514a7a7d3a0eb5e8f1ac55859eaf7d5c31b53de8fab9f3 +152 -0
- package/vendor/impeccable/bundle/blobs/d658c48ffbe0031e8e3b318996cad6ceafe29e40aa50d5bb25e4bf1d6839dc7c +89 -0
- package/vendor/impeccable/bundle/blobs/d6a1fa1689642a6db9027493747d7ed54f9e0cae660472022c0a0a8dfdead3f4 +54 -0
- package/vendor/impeccable/bundle/blobs/d6a51f4df6d76f16b95ab81268a689f4c5936d505c5bb25c80ad7423f927bbc6 +47 -0
- package/vendor/impeccable/bundle/blobs/d7211a816aa8ca1111701930f7cdab82b4c8caa94c9a37522c1d7945209b01c2 +84 -0
- package/vendor/impeccable/bundle/blobs/d7b99a57652cb8741d57a15ba7e06de4707fac02a97e5e001179da007272f2b8 +113 -0
- package/vendor/impeccable/bundle/blobs/d87879329982d608866e4babd31c61438ec34c68483e529761fbf420203eeebd +104 -0
- package/vendor/impeccable/bundle/blobs/d9963fd73bf6129fe0c8ec25c5148f50617ec85683b8eeae7e411c9a42e2db33 +137 -0
- package/vendor/impeccable/bundle/blobs/da3b2399814db89d67959268c646601957d3e8c641b09a5bdbce84217c1c2cfe +46 -0
- package/vendor/impeccable/bundle/blobs/dc3aeccbea3e997704ce8b170f56b0eaf343a14ad4fedb22a6dbee0f205aa37f +47 -0
- package/vendor/impeccable/bundle/blobs/dcc1572e739cdabcbf084f276b447cb686aa18459896e6d8fe29f4d7d807bd1d +46 -0
- package/vendor/impeccable/bundle/blobs/dcf7340da023e64144af5768b8bf44ecf45b1bfdec12d3b1c9e6618f17f8c60a +131 -0
- package/vendor/impeccable/bundle/blobs/dd66761b291c7dbca6e9efd22023e38f8c53ad310f3a6cdab5dc7ecd7ae8f31f +84 -0
- package/vendor/impeccable/bundle/blobs/dd953992625c240fd1842aaf533a865aabd09487cbc16fa01fe8bb4b4365b843 +101 -0
- package/vendor/impeccable/bundle/blobs/de1b7404f4cdfd7b515196afb17b74b1980f0bc88cb8681ae93a76ca48ec7bdb +167 -0
- package/vendor/impeccable/bundle/blobs/de70398719140e4951aa111e9625de5ed916ad1ef0877e4ab6f6b4a7e3cc5f8f +154 -0
- package/vendor/impeccable/bundle/blobs/deaaa533475b6a9f7dd52e01a1f1997aa3af146694334981650f8c846f939559 +113 -0
- package/vendor/impeccable/bundle/blobs/df23e9ee5b689a05ed88f42e9a36aaffa2e6e28b1d56e2832acaa1d3603fd363 +105 -0
- package/vendor/impeccable/bundle/blobs/dfd6f341b156bc604e7556b27cba437d5870fbc82d4c673d0127cf18151b2226 +99 -0
- package/vendor/impeccable/bundle/blobs/e02ba7f4417e84b3bd5ec65287c4a14cf163ca3ac6f8ee37d8f709d0c8b0b6d2 +84 -0
- package/vendor/impeccable/bundle/blobs/e07176229b8a330970ca3c9c5e3dd68c2aaeb726285e30f471e91053d7f8e798 +24 -0
- package/vendor/impeccable/bundle/blobs/e1075ea5b34ac9c60f7c5bda97356eeaf1b683b599592d324fd3704f0852ad7a +152 -0
- package/vendor/impeccable/bundle/blobs/e26ddd48211aae08fe6debf2a7a4308aa081ed224668cde528e451888db0e3e3 +325 -0
- package/vendor/impeccable/bundle/blobs/e2e275495354eeccb7e59af7d74e2ff1f371839bd6aaec1266428760995fb24c +104 -0
- package/vendor/impeccable/bundle/blobs/e3af212117e0c552b0976687200fe8f95846a01725a482e8e4dbfd75e40dbfa6 +26 -0
- package/vendor/impeccable/bundle/blobs/e3c2031978cd670d7150ff3140f12cf8b6882ef638ea9a9985caffa9a80c8713 +63 -0
- package/vendor/impeccable/bundle/blobs/e44ca51f24c4736f9aee6024182b0409aa12ec94812b7ec94745e0999ed06a70 +29 -0
- package/vendor/impeccable/bundle/blobs/e68467ba99684d8c975a8a2725145d29db41d70659c7544ea54cc6632660cea3 +127 -0
- package/vendor/impeccable/bundle/blobs/e6e18e7c23cfe82961d90b9714cb466c20bd83f222ac63e9339b6b2c304e1787 +26 -0
- package/vendor/impeccable/bundle/blobs/e71524578eb2bda3b8d2da3d8b8371239a2179c5fa866f9f7e48bcac45a8cd6f +84 -0
- package/vendor/impeccable/bundle/blobs/e7af7ad18b307a3171fcf49421df2a557f93289d27af2430f10ee74e2a2fc2d3 +101 -0
- package/vendor/impeccable/bundle/blobs/e7dd10af2c3c18c60dc20734d55ff870c323a10dadd337600f7bb980fc6b53c8 +327 -0
- package/vendor/impeccable/bundle/blobs/e802e4f7bdc89050a9c0f2ca506e1d493a2316e6e810c0336c57aa073717ef3e +50 -0
- package/vendor/impeccable/bundle/blobs/e85da3098368807689009184eca2bb09a91bdb6cb1be3e7a61f91f1ae31cd69b +152 -0
- package/vendor/impeccable/bundle/blobs/e8720f3aa41135211cc58cc299a39eeda86c75651f4279cc1ede8db10dcc0584 +98 -0
- package/vendor/impeccable/bundle/blobs/e8ee6c08e94b80324173d89d6f4cdc5b4829ea6858b3a11fc186588a490cada4 +46 -0
- package/vendor/impeccable/bundle/blobs/e9861052457cc1ddc42c687bb8c33a877834ced94fed74af2a4f00f6bae50795 +101 -0
- package/vendor/impeccable/bundle/blobs/ea8432c90c30ecb0426662a681ead5c0941113079704e1a766cda09e85b15b4f +111 -0
- package/vendor/impeccable/bundle/blobs/eaa50e8cd95e00a94a257db2bff4eafd820696ba75a08a384a00517c3402924e +325 -0
- package/vendor/impeccable/bundle/blobs/eb3e86876c20f1cfc443dcbe48d8f41fea6e815082a304610be432272429a06d +42 -0
- package/vendor/impeccable/bundle/blobs/eba472f6190541c28e2e647ed019f43564ba5b92d629963f34c899175b25b31e +46 -0
- package/vendor/impeccable/bundle/blobs/eba609589a5a051643a7bae60b7cceef7cfe44d0f8bd9229e61473ac75910fb3 +24 -0
- package/vendor/impeccable/bundle/blobs/ec6338b20047099601e4bac8b2efcd597f800d5e437259f6c15d23090400621b +325 -0
- package/vendor/impeccable/bundle/blobs/ec81b008d2641402e3352b09b1a90562ef7a24598d7c5aded475038cce63aca0 +24 -0
- package/vendor/impeccable/bundle/blobs/ec86b8633fbeb14ef2272f220fdd98089972b03b99da83e49eeb6a8b73b00617 +113 -0
- package/vendor/impeccable/bundle/blobs/ee6d6d127c1c2ab3526d529a8e3698be2185b5e346ac617f37501de2c0698b97 +99 -0
- package/vendor/impeccable/bundle/blobs/ef2dde00030580ed2765cbf7be9b2ea4a6f64cb915b804fd6f6abcf38051c7b9 +234 -0
- package/vendor/impeccable/bundle/blobs/ef2e97cd690baf6fe5c895dd2d8844aff9fcc4a8bc04973402678a739c81d712 +90 -0
- package/vendor/impeccable/bundle/blobs/f0fbe529f63961a027bada2e6a3cbe86f4af0dba4b8e1010da22b007f9002f66 +63 -0
- package/vendor/impeccable/bundle/blobs/f1601095679d7d8cf6fef6845598c70d8734190709c1404fa0026e28fef2faaa +325 -0
- package/vendor/impeccable/bundle/blobs/f254d59ff973e907cacdc2c34b8b4de075437d292de31dac30e10a9d7035086c +85 -0
- package/vendor/impeccable/bundle/blobs/f5efb1b1dd4cd18e1d4789d7c8e0188f4342b25fffd53af6088ba8b67774fb99 +26 -0
- package/vendor/impeccable/bundle/blobs/f672ef8251a3ed4051a053d30819664951b17540b2899acd27d20e500c234abc +258 -0
- package/vendor/impeccable/bundle/blobs/f68a3d68ac92606e91aa8878e003d9432ddd09aa97ca01c6b3ce46c937dca316 +13510 -0
- package/vendor/impeccable/bundle/blobs/f7a9e3f30fe07b0d98351730e9895d50bba96dd42fe91c0d9b9a76ef62e53322 +80 -0
- package/vendor/impeccable/bundle/blobs/f7b854effc55c8f07e40a415e0d6b5c333f4042fbc849fac73d52619c8d053a1 +54 -0
- package/vendor/impeccable/bundle/blobs/f84b653ede0804d21e6210c6d21fd5352023914fedceae6ff14e20f1e93b06e7 +46 -0
- package/vendor/impeccable/bundle/blobs/f964506c0fae87b3c2c1db7016ddc9be9ef970bbcf5548d684b997b5d5991586 +33 -0
- package/vendor/impeccable/bundle/blobs/f9cbbad0cc08fb9bd69d4d3046067c6cf820b89cdaf7af8c81c671fb0a62b6ae +54 -0
- package/vendor/impeccable/bundle/blobs/fb32d99751c5fc24493ff4460be1767bd5236dc820fd337775067c0620d1a7a6 +113 -0
- package/vendor/impeccable/bundle/blobs/fb5fec24adafa48df43eece6907c1c986a4772cbdc64142c881f00c3b312e9ca +152 -0
- package/vendor/impeccable/bundle/blobs/fc149b5bc7a8d0cc9b9bf86e5013793f3857c1c302212e9aaf101cb95427386b +101 -0
- package/vendor/impeccable/bundle/blobs/fce6688138d2ceb1e3d2cde5231f54b1d8dc8748b4c95a7919aa83b6f924cf96 +127 -0
- package/vendor/impeccable/bundle/blobs/fe91fcf28638f95577af481a50edaf339d6c9a3ad3b9fa477bc81c116b8bc392 +139 -0
- package/vendor/impeccable/bundle/blobs/ff0ab1361f52d70d3ff0d23090d78794a75afdfa2f8c1cee5491dee69215faaa +105 -0
- package/vendor/impeccable/bundle/manifest.json +1254 -0
- package/skills/dev-plan/evals/evals.json +0 -72
|
@@ -0,0 +1,507 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: xgent-app-release
|
|
3
|
+
description: '把一个 App 的新版本发布到 XGENT.ai Portal —— 在 App 自己的 repo 里用 xrel_ 发布令牌一条命令提交「前端产物 dist / bump 版本 / 换镜像 / 整份 app.manifest 清单」,落成发布提案:无治理变更自动通过并应用,改权限面的进平台「发布审核」等批准;不登录门户控制台、不找门户运维代传。凡任务涉及发版/发布前端或后端镜像/上传产物/提交或修改 app.manifest.json/首次把 App 接入门户/release-cli/xrel_ 令牌/POST /api/market/release/、配 vite base、在 CI 里写发布步骤、或出现「`npx @xgent/release-cli` 取不到 / E404(它在私有包仓上)」「发布 401 / 404」「发布 200 但 ok:false」「PROPOSAL_PENDING / 一直 pending 等审」「/apps/listingKey/ 白屏或资源 404」「发上去了但线上没变 / 容器没换版」这类症状时,务必先用本 skill 再动手——即使用户只说「发个版」。Use whenever publishing or debugging an XGENT portal app release from the app''s own repo — frontend dist, backend image, or manifest/governance changes via release proposals: release tokens, packaging, version bumps, CI wiring, pending approvals, or a blank/404 /apps/listingKey/ page after a publish.'
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# xgent-app-release · App 版本自助发布
|
|
7
|
+
|
|
8
|
+
**这个 skill 用在 App 自己的 repo 里**(门户代码不在你手上,也不需要在)。目标是:把构建好的前端
|
|
9
|
+
一次推上门户的某个 listing,并让「线上跑的是哪一版」在控制台上可辨认。
|
|
10
|
+
|
|
11
|
+
每次提交在门户侧落成一条**发布提案**,按内容自动定级:
|
|
12
|
+
|
|
13
|
+
- **自动通过档**:`dist`(前端产物)· `version` · `deployDescriptor.image` · 展示字段
|
|
14
|
+
(name / tagline / desc / icon / color / cat / navItems / dashboardWidgets)——
|
|
15
|
+
自动通过并应用清单/产物;后端与网关需分别确认,且每次留档(时间 + diff + 令牌前缀)。
|
|
16
|
+
- **审核档**:其余一切(scopes / ACL 清单 / 依赖 / 跨应用授权 / 服务地址 / 席位 /
|
|
17
|
+
授权文案 scopeLabels / iframe 指向 embedUrl / 部署形态 / 部署前置 env 键清单
|
|
18
|
+
requiredEnv / 服务账号身份 serviceAccount.clientId / 首次接入)都会改变权限面,
|
|
19
|
+
⇒ 提交成功但进入平台管理员的「发布审核」队列,**批准前库里一字不动**。
|
|
20
|
+
被拒绝时 `status` 与 `--wait` 都能看到原因。
|
|
21
|
+
- **`helpEntry`(版头那枚帮助按钮)按【值】分档**,同一个字段两种命运:写 App 内路由
|
|
22
|
+
(`"/help"`)是**自动通过档**——改一条自家路由不该等人审;写外站文档
|
|
23
|
+
(`"https://docs.example.com"`)进**审核档**——门户版头等于替这个域名背书。
|
|
24
|
+
|
|
25
|
+
判据只有一条:**这次提交有没有改变权限面** —— 不是一张字段白名单。散字段(往表单里直接塞
|
|
26
|
+
`scopes=...`)仍然直接拒:治理变更只能经 manifest 整份提交。
|
|
27
|
+
|
|
28
|
+
### 那你 repo 里那份 `app.manifest.json` 呢?
|
|
29
|
+
|
|
30
|
+
**它就是你 App 清单的唯一事实源**,而且**直接参与发版**:
|
|
31
|
+
`publish --manifest deploy/portal/app.manifest.json` 把它随提案交上去 ——
|
|
32
|
+
无治理变更的自动通过并应用,有治理变更的等平台批准。门户代码里不再保留你清单的副本,
|
|
33
|
+
「改了 manifest 却被门户下次部署改回去」的静默漂移已经从机制上消灭。
|
|
34
|
+
|
|
35
|
+
manifest **绝不携带密钥值**:`serviceAccount.secret`、`deployDescriptor.env` 有值、
|
|
36
|
+
SERVICE_ONLY scope(如 `seats.read`)写进 `serviceScopes` 都会**提交即拒**。
|
|
37
|
+
要用平台特权 scope,走 `privilegedServiceScopes: [{ "scope": "seats.read", "reason": "为什么需要" }]`
|
|
38
|
+
—— 它是**申请**不是授予:必进「发布审核」,审批人逐条确认后你的服务账号才拿到;
|
|
39
|
+
reason 会原文展示给审批人,写清楚用途能少一轮往返。上报自己的用量指标,先在
|
|
40
|
+
`usageMetrics` 里声明(key 必须以你的 listingKey. 开头;同样治理档)——没声明的
|
|
41
|
+
metricKey 会被上报接口拒收并计入 `rejected`。要声明「部署我需要哪些环境变量」
|
|
42
|
+
用 `requiredEnv`(只交键名),值由平台注入、自动供给或管理员配置 —— 见下面「镜像要环境变量」。
|
|
43
|
+
|
|
44
|
+
### 文案字段:哪些支持多语,哪些不支持
|
|
45
|
+
|
|
46
|
+
门户把 manifest 的文案分两处存,形状要求不同,而**写错的那一组不会报错**:
|
|
47
|
+
|
|
48
|
+
| 字段 | 形状 | 写错的后果 |
|
|
49
|
+
| --- | --- | --- |
|
|
50
|
+
| `tagline` / `desc` / `icon` / `color` / `cat` / `navItems[].label` / `dashboardWidgets[].title` | **纯字符串** | 给多语对象 ⇒ 存成字面量 `"[object Object]"`,直接显示在每个租户的应用卡片与详情上 |
|
|
51
|
+
| `name` | 纯字符串 | 给对象不报错,但会被**拍平成 zh-CN**,另外两种语言就此丢掉 |
|
|
52
|
+
| `scopeLabels[<scope>]` | 字符串 **或** `{ "zh-CN": …, "zh-TW": …, "en": … }` | 同意屏按门户当前语言解析,回退链 当前语言 → `zh-CN` → `en` → 键名。**`zh-CN` 是回退终点,必写** |
|
|
53
|
+
| `aclManifest` 里的 `label` / `name` / `desc` | 同上(字符串或多语对象) | 角色矩阵按请求语言解析 |
|
|
54
|
+
| `usageMetrics[].label` | **`{ "zh": …, "en"?: …, "tw"?: … }`** —— 键名和上面那套**不一样** | 缺 `zh` ⇒ 提交即拒 |
|
|
55
|
+
|
|
56
|
+
`scopeLabels` 另有两条静默失效,一条报错都没有:
|
|
57
|
+
|
|
58
|
+
- **键不在 `scopes` 里的会在写入时被直接丢掉** —— 同意屏上那条权限回落成键名。改 scope 名忘了改文案键就中。
|
|
59
|
+
- **平台基础 scope(`userinfo.read` / `audit.write` / `notification.*` / `settings.*` …)的文案别自己写。**
|
|
60
|
+
那是平台统一维护的措辞;各 App 各写一份,同一条权限在不同应用的同意屏上就会说得不一样,比缺文案更糟。
|
|
61
|
+
发现平台漏了哪条,找平台补,不要在自己清单里补。
|
|
62
|
+
|
|
63
|
+
这一整节 `scripts/preflight.mjs` 都会替你查(`--manifest <path>`,不传就按常见路径自己找)。
|
|
64
|
+
|
|
65
|
+
`deployDescriptor.hostPort`(宿主机发布口)**也不归你定**:它是部署环境相关的事实——
|
|
66
|
+
同一份 manifest 会发到好几套门户,各自的端口地貌不同,而你看不见那台机器上谁占了什么。
|
|
67
|
+
规则:**首次注册**当建议值(撞了自动退让到平台端口池,不会因此拒掉你的注册);**之后一律
|
|
68
|
+
忽略**,发布响应的 `warnings` 里会告诉你当前实际是哪个口。它**不算治理变更**,所以带着它
|
|
69
|
+
提交不会平白让你的发版进人工审批队列。你要管的只有 `port`(容器内监听口,约定 8080)。
|
|
70
|
+
|
|
71
|
+
|
|
72
|
+
> **路径约定**:本 skill **不要求你有门户仓**,也不会让你去打开门户仓里的文件——需要的
|
|
73
|
+
> 一切都在这里的 `references/` 与 `scripts/`,路径以本 `SKILL.md` 所在目录为基准。
|
|
74
|
+
> 命令在 App repo 根目录执行;先按实际加载位置设置 `SKILL_DIR="<本 SKILL.md 所在目录>"`,不假定安装目录名。
|
|
75
|
+
> `dist`、`.npmrc` 和 manifest 路径仍相对于 App repo。
|
|
76
|
+
>
|
|
77
|
+
> ⚠️ 唯一容易误读的是 `/apps/<key>/`:它是**线上 URL 路径**(你的产物在生产被挂载到的
|
|
78
|
+
> 子路径,也就是 vite 的 `base`),**不是**任何仓库里的目录。看到它不要去找、不要去建。
|
|
79
|
+
|
|
80
|
+
## 先备齐三样,缺一样就发不出去
|
|
81
|
+
|
|
82
|
+
涉及匿名公开页、CDN 画布、CSP 阻断、改 App key 或“批准且 ready 但不可用”时,
|
|
83
|
+
先读 [references/public-delivery.md](references/public-delivery.md)。现有标准入口是
|
|
84
|
+
`/apps/<key>/…`、`/svc/<key>/…` 或 Sites;审核、部署、网关与业务验收分别核对。
|
|
85
|
+
|
|
86
|
+
| 你需要 | 从哪来 | 放在哪 |
|
|
87
|
+
| --- | --- | --- |
|
|
88
|
+
| `listingKey` | 平台给的 App 标识,小写字母/数字/连字符。它同时是 `/svc/<key>`、`/apps/<key>/`、scope 命名空间、令牌的 aud —— **四位一体,永不改** | `LISTING_KEY=…` |
|
|
89
|
+
| 发布令牌 `xrel_…` | 门户「开发者应用」› 你的应用 › 凭证 › **生成配置文件**(连同 listingKey、门户地址一次写好),**明文只显示一次**。开发者应用里还没有这个应用 ⇒ 先「申请建立应用」,平台管理员批准后才能生成 | `XGENT_RELEASE_TOKEN=xrel_…` |
|
|
90
|
+
| 目标门户地址 | 问平台要 | `TARGET_XGENT_PLATFORM=…`(旧名 `XGENT_PORTAL_URL` 仍认) |
|
|
91
|
+
|
|
92
|
+
**五项全部写进同一份本地配置文件 `.xgent-registry.env`**(另两项见下面「顺带投一份到清单目录」),
|
|
93
|
+
`chmod 600` + `.gitignore`。CLI 自己去读它;`--token` / 环境变量保留为覆盖手段,给 CI 用。
|
|
94
|
+
|
|
95
|
+
> **为什么令牌可以落盘。** 旧规则「密钥别落盘、走 `--token` 或 env」是按**人手敲命令**的模型
|
|
96
|
+
> 写的。今天发版几乎都是**经这个 skill 让 agent 驱动 CLI** —— 强制走 `--token` 意味着 agent
|
|
97
|
+
> 必须先把令牌**取出来**才能传进去,于是它进 agent 上下文、进对话记录、进工具调用日志,
|
|
98
|
+
> 还出现在命令行里(同机其它进程 `ps` 就能看见)。那比落盘更不安全,而且泄露面**不可撤销**。
|
|
99
|
+
> 让 CLI 自己读文件,令牌就**从不经过 agent**。这个文件本来就是凭证文件(`PULLER_AUTH` 一直在里面)。
|
|
100
|
+
>
|
|
101
|
+
> 护栏没删,换成了对的两条 —— CLI 每次运行都替你查:① 文件 mode 允许同组/其他人读 ⇒ 提示
|
|
102
|
+
> `chmod 600`;② `git check-ignore` 判定它**没被忽略** ⇒ 提示(那才是真会泄露的场景)。
|
|
103
|
+
> 两条都**只 warn 不阻断**:把它变成硬失败只会逼人把令牌搬回命令行。
|
|
104
|
+
|
|
105
|
+
详见 [references/publish-api.md](references/publish-api.md) §0。
|
|
106
|
+
|
|
107
|
+
### 顺带投一份到清单目录(可选)
|
|
108
|
+
|
|
109
|
+
配了 `MANIFEST_STORE` 之后,一次 `publish` 会打**两个不同的端点**:
|
|
110
|
+
|
|
111
|
+
| 站 | 端点 | 语义 |
|
|
112
|
+
| --- | --- | --- |
|
|
113
|
+
| 第一站(真发版,必成) | `POST <TARGET_XGENT_PLATFORM>/api/market/release/<key>` | 落发布提案;失败 ⇒ 整体失败 |
|
|
114
|
+
| 第二站(投目录,best-effort) | `PUT <MANIFEST_STORE>/api/market/catalog/<key>` | 存一份**净化后的公开清单**副本;失败只 warn,退出码不变 |
|
|
115
|
+
|
|
116
|
+
```
|
|
117
|
+
MANIFEST_STORE=<目录门户地址> # 不配 ⇒ 整步跳过,不报错也不提示
|
|
118
|
+
MANIFEST_STORE_TOKEN=xrel_… # 目录那台签给你的发布令牌;不配 ⇒ 回落 XGENT_RELEASE_TOKEN
|
|
119
|
+
```
|
|
120
|
+
|
|
121
|
+
- **两个地址相同也照发两次**:它们是不同端点,不会互撞。
|
|
122
|
+
- 目录**只是一份只读投影**:它不下发、不部署、不编排任何东西,也不参与任何门户的治理判定。
|
|
123
|
+
它唯一的消费者是**开发环境** —— 别人起一盒时 `onebox.sh add <key>` 从这里拉你的清单,
|
|
124
|
+
不再依赖「那版一盒镜像里预置了哪几份样例」。
|
|
125
|
+
- **投递 manifest 不会上传前端包。** 跨平台同步读取主平台已生效的 listing 与原始归档
|
|
126
|
+
(`/api/federation/apps/:key` 与 `/dist`)。投目录成功、发布 applied、页面能打开,
|
|
127
|
+
都不能单独证明可同步。带前端的应用按 [前端归档与同步验收](references/frontend-archive.md) 留存、上传并核验。
|
|
128
|
+
- 目录里那份是**净化过的**:`serviceAccount` 只留 `clientId`,`exchangeInitiatorSecret` 与
|
|
129
|
+
`deployDescriptor` 的 `env` / `envFile` / `hostPort` 一律剔除(密钥与单部署事实不跨部署共享)。
|
|
130
|
+
- **目标门户那边卡在待审不影响投目录**:`PROPOSAL_PENDING` 是目标门户的队列状态,
|
|
131
|
+
不是「这份清单是什么」的结论 —— 那次 `publish` 的退出码仍是非 0(发版确实没成),
|
|
132
|
+
但目录会收到这一版。
|
|
133
|
+
|
|
134
|
+
## 第 0 步:配私有包仓(**`@xgent/release-cli` 自己也在上面**,不需要任何云账号)
|
|
135
|
+
|
|
136
|
+
`@xgent/release-cli` 与 `@xgent/shared` / `@xgent/portal-sdk` / `@xgent/portal-server-sdk` /
|
|
137
|
+
`@xgent/portal-ui` 发在**同一个私有包仓**上,公共 npm 上一个都没有。所以这一步**不只是装依赖**:
|
|
138
|
+
`.npmrc` 没配 `@xgent:registry`,下面第 1 步的 `npx @xgent/release-cli whoami` 就是第一条撞墙的命令
|
|
139
|
+
(`E404 Not Found - GET https://registry.npmjs.org/@xgent%2frelease-cli`)。
|
|
140
|
+
**App 代码第一次要装 `@xgent/*`(还没到发版)也走这一步**,不必等到发版。
|
|
141
|
+
|
|
142
|
+
**没有发布令牌就停下,别绕。** 仓里没有 `.xgent-registry.env`、或里面没有 `XGENT_RELEASE_TOKEN`
|
|
143
|
+
⇒ 停止安装,请开发者先去门户「开发者应用」› 你的应用 › 凭证 › **生成配置文件**,把下载的
|
|
144
|
+
`.xgent-registry.env` 放到仓根(`chmod 600`,加进 `.gitignore`)再继续。开发者应用里还没有这个
|
|
145
|
+
应用 ⇒ 先「申请建立应用」,平台管理员批准后才能生成;打开开发者应用提示没有开发者权限 ⇒ 请租户
|
|
146
|
+
管理员在「用户管理」里发「开发者」角色。
|
|
147
|
+
|
|
148
|
+
### 套件(bundle):一枚令牌发一组应用
|
|
149
|
+
|
|
150
|
+
一组 App 由同一支团队交付、**后端跑在同一个镜像里**时,门户里把它编成「套件」:
|
|
151
|
+
开发者应用 › 我的套件 › 新建,把成员应用加进去(成员必须是 descriptor 型出仓 App、
|
|
152
|
+
没有独立部署在跑、镜像与其它成员一致)。
|
|
153
|
+
|
|
154
|
+
- **令牌**:套件详情 › 凭证 签的 `xrel_` 对**任一成员**都有效 —— 单发照旧走
|
|
155
|
+
`POST /api/market/release/<成员key>`(CLI 零改动);凭证页会列明这枚令牌能发哪几个应用,
|
|
156
|
+
别把套件令牌当单应用令牌随手分发。成员被移出套件 ⇒ 令牌对它即刻 404;维护者离场 ⇒
|
|
157
|
+
套件令牌连同吊销。
|
|
158
|
+
- **批次**:`POST /api/market/release/bundle/<bundleKey>`(bundle 令牌),一次给全体成员
|
|
159
|
+
各建一条提案,共享同一批号与同一镜像/版本。JSON 体:`version` / `image` 共享,
|
|
160
|
+
每成员可选 `dist__<key>`(文件)与 `manifest__<key>`。任一成员的确定性校验不过 ⇒
|
|
161
|
+
整批不落库;成员镜像已漂移而批次没带镜像 ⇒ `BUNDLE_IMAGE_DIVERGED`(带上镜像即可收敛)。
|
|
162
|
+
状态轮询:`GET /api/market/release/bundle/<bundleKey>/status`(每成员一条)。
|
|
163
|
+
- **共享后端的 manifest**:成员各自的 `deployDescriptor.image` 的**仓库段可以等于 bundleKey**
|
|
164
|
+
(治理闸对套件镜像放行);端口/环境变量以最早加入的成员为准。成员的对外地址不变:
|
|
165
|
+
各自 `/svc/<成员key>`,容器只是同一个(`<bundleKey>-server`)。共享 ⇒ 故障域合一:
|
|
166
|
+
容器挂了,全部成员一起不可用,各自的告警各自到。
|
|
167
|
+
- **加不进去的两种真原因**:报 `BUNDLE_BUILTIN_MEMBER` ⇒ 那是仓内内置 App,先出仓再进套件;
|
|
168
|
+
报 `BUNDLE_MEMBER_ALREADY_DEPLOYED` ⇒ 它已有独立容器在跑,先让平台管理员在
|
|
169
|
+
「服务部署」里停止,再加入。
|
|
170
|
+
|
|
171
|
+
**不许 vendor。** 装不上时不要把 `@xgent/*` 的产物或源码拷进仓(`vendor/` 目录、`file:` / `link:`
|
|
172
|
+
依赖、向人要 tar 包、手抄一份 SDK),也不要自己重写 SDK 已有的能力。私有仓上没有你要的版本
|
|
173
|
+
⇒ 停下,请平台团队发布那一版。本地快照不会随平台的修复更新,会和门户协议悄悄漂开。
|
|
174
|
+
|
|
175
|
+
**动手发版之前先查一眼配没配**(`npm config get` 会把 `./.npmrc`、`~/.npmrc` 整条链解析完):
|
|
176
|
+
|
|
177
|
+
```bash
|
|
178
|
+
npm config get @xgent:registry # 打印 undefined ⇒ 没配,下面这步必须先做
|
|
179
|
+
```
|
|
180
|
+
|
|
181
|
+
没配就用手上已有的**发布令牌**(`XGENT_RELEASE_TOKEN`,就是发版那枚)向门户换一枚 ≤12 h 的
|
|
182
|
+
**只读**令牌 —— 你**不必**有云账号、不必装云厂商 CLI、不必持任何长期凭据:
|
|
183
|
+
|
|
184
|
+
```bash
|
|
185
|
+
node "$SKILL_DIR/scripts/npm-token.mjs" --npmrc >> .npmrc # 写进三行(含明文令牌,这份别提交)
|
|
186
|
+
npm config get @xgent:registry # 验收:打印出私有仓地址,不再是 undefined
|
|
187
|
+
npx @xgent/release-cli whoami # 验收:CLI 取得到了,顺带验了发布令牌
|
|
188
|
+
```
|
|
189
|
+
|
|
190
|
+
CI 里用变量形式(`.npmrc` 可以进仓,令牌不进仓):
|
|
191
|
+
|
|
192
|
+
```bash
|
|
193
|
+
eval "$(node "$SKILL_DIR/scripts/npm-token.mjs")" # 导出 XGENT_NPM_AUTH_TOKEN / XGENT_NPM_REGISTRY
|
|
194
|
+
npm install # .npmrc 里用 ${XGENT_NPM_AUTH_TOKEN} 引它
|
|
195
|
+
node "$SKILL_DIR/scripts/npm-token.mjs" --check # 只体检:能不能换到、还剩多久,不打印令牌
|
|
196
|
+
```
|
|
197
|
+
|
|
198
|
+
`.npmrc` 里这样引(**变量为空 = 空令牌 = 401**,所以 CI 里务必先 `eval` 再 `npm ci`):
|
|
199
|
+
|
|
200
|
+
```
|
|
201
|
+
@xgent:registry=${XGENT_NPM_REGISTRY}
|
|
202
|
+
//<仓库 host>/<路径>/:_authToken=${XGENT_NPM_AUTH_TOKEN}
|
|
203
|
+
```
|
|
204
|
+
|
|
205
|
+
- 令牌**只走 stdout**,诊断走 stderr —— `eval "$(…)"` 不会把日志也吃进去。
|
|
206
|
+
- 平台轮换云凭据时你这边**零改动**:换的是门户持有的那把,你每次拿到的都是新令牌。
|
|
207
|
+
- 报 `NPM_REGISTRY_NOT_CONFIGURED` / `NPM_REGISTRY_UNAUTHORIZED` 是**平台侧**没配好或凭据过期,
|
|
208
|
+
不是你的配置问题 —— 贴给平台管理员即可,你这边不用改任何东西。
|
|
209
|
+
|
|
210
|
+
## 发布五步,每步都有验收
|
|
211
|
+
|
|
212
|
+
```bash
|
|
213
|
+
VER=1.4.2 # 地址、令牌、listingKey 都在 .xgent-registry.env 里,命令里一个都不用重复
|
|
214
|
+
# (CI 里想覆盖:注入 XGENT_RELEASE_TOKEN / TARGET_XGENT_PLATFORM 环境变量即可)
|
|
215
|
+
```
|
|
216
|
+
|
|
217
|
+
1. **先验令牌,再构建。** `npx @xgent/release-cli whoami`
|
|
218
|
+
→ 验收:打印 key + 令牌前缀 + 过期时间。放在构建之前是因为构建可能十分钟,
|
|
219
|
+
而令牌过期/被吊销的现象只有调用时才现形。**这条同时验了第 0 步**:CLI 自己就在私有包仓上,
|
|
220
|
+
报 `E404 … @xgent%2frelease-cli` 是 `.npmrc` 没配,不是令牌的问题——回第 0 步一条命令就好。
|
|
221
|
+
2. **构建,`base` 必须是 `/apps/<key>/`。** 产物在生产被挂到那个子路径下,
|
|
222
|
+
`base` 少了 → 资源请求打到站点根 → 页面 200 但白屏。这是本流程翻车率第一名。
|
|
223
|
+
→ 验收:`grep -o 'src="[^"]*"' dist/index.html`,路径都以 `/apps/<key>/` 开头。
|
|
224
|
+
3. **预检。** `node "$SKILL_DIR/scripts/preflight.mjs" --dist dist --version $VER --manifest deploy/portal/app.manifest.json`
|
|
225
|
+
→ 验收:脚本零 ✗ 退出。它把「构建看着成功、线上却坏」的几种成因一次性挡下(base 前缀、
|
|
226
|
+
根 `index.html`、包大小、dev 地址残留、版本号形状、令牌有效性,以及 manifest 的文案字段形状
|
|
227
|
+
—— 见上面「文案字段」,那一类**发布成功、审批通过、线上显示 `[object Object]`**)。
|
|
228
|
+
**本次含外部后端镜像时,还必须检查待发布镜像的 `/health`**:按 `portal-external-app` skill 的
|
|
229
|
+
`references/health-contract.md` 运行其 `scripts/verify-health.ts`,非零退出不得发布。
|
|
230
|
+
平铺与 Envelope 都支持:非 2xx 不通过;2xx 顶层有 `ok` 时必须 `ok === true && data.db === true`;
|
|
231
|
+
没有顶层 `ok` 时按 2xx 判健康。检查脚本与平台同源,不另加包装或字段命名限制。
|
|
232
|
+
4. **发布。**
|
|
233
|
+
带前端的应用先按 [前端归档与同步验收](references/frontend-archive.md) 生成并持久留存
|
|
234
|
+
`DIST_ARCHIVE`(根下直接是 index.html 的 `.tgz`)与 SHA-256;下面上传的必须就是这份文件。
|
|
235
|
+
只发后端/治理变更可省略 dist,但不能据此声称前端归档已补齐;服务型应用不要求前端包。
|
|
236
|
+
```bash
|
|
237
|
+
bunx @xgent/release-cli publish --version "$VER" --dist "$DIST_ARCHIVE" \
|
|
238
|
+
--manifest deploy/portal/app.manifest.json
|
|
239
|
+
# 获批后等待本次后端与网关:加 --wait;换镜像另加 --image <key>:$VER
|
|
240
|
+
```
|
|
241
|
+
**每次都带 `--manifest`**:内容没变的重复提交是自动档(不会多一次人工审),而
|
|
242
|
+
①它是清单目录唯一的输入 —— 不带就等于目录永远是空的;②`requiredEnv` 这类
|
|
243
|
+
「不落 listing」的声明只有随清单提交才能刷新基线。
|
|
244
|
+
→ 验收:本次产物 digest 与留存包的 SHA-256 一致,并记录 proposalId。坏包在 staging 校验失败时不会替换线上产物;应用后的部署或网关失败须按阶段检查,不能概括为“什么都没发生”。
|
|
245
|
+
有治理变更时打印的是「提案已提交」+ 提案号,**同样退出 0 并立即返回** —— 平台管理员
|
|
246
|
+
在那一刻就收到了通知,流水线没有理由挂在那里等人(见下面「等审批」)。
|
|
247
|
+
5. **线上看一眼。** `npx @xgent/release-cli status` 确认版本与 digest 就是本次这一份;
|
|
248
|
+
然后浏览器打开门户 → 应用中心 → 你的 App,走通主路径。**`status` 报 404 不等于发布失败**
|
|
249
|
+
(见下),第 4 步的返回体已经给了版本与 digest,浏览器那一眼照走不误。
|
|
250
|
+
交付包含跨平台同步时,还须核验主平台条目和 `/dist` 的真实字节;没有读取权限时明示
|
|
251
|
+
「前端已发布,主平台归档/可同步性未验证」,不能把发布或投目录成功当作同步验收通过。
|
|
252
|
+
|
|
253
|
+
`@xgent/release-cli` 不在公共 npm 上,**它就在第 0 步那个私有包仓里**。取不到包时先分诊,
|
|
254
|
+
别急着换工具:`npm config get @xgent:registry` 是 `undefined` ⇒ 回第 0 步配 `.npmrc`,一条命令就好。
|
|
255
|
+
只有换令牌这步本身失败(`NPM_REGISTRY_NOT_CONFIGURED` 等**平台侧**原因)才需要兜底——端点就一条
|
|
256
|
+
`POST /api/market/release/:key`,`curl` 版见 [references/publish-api.md](references/publish-api.md) §2。
|
|
257
|
+
|
|
258
|
+
**只读面(`status` / `--wait`)不保证每个门户都有**——它比发布面晚一版上线。同一枚令牌
|
|
259
|
+
whoami `200` 而 `/status` `404`,就是这种情况:**令牌没问题,别停下来改令牌或改 key**。
|
|
260
|
+
两种 404 的响应体一字不差(门户故意不区分「不属于你」和「不存在」),只能靠 whoami 分诊;
|
|
261
|
+
分诊表与替代验收方式见 [references/troubleshooting.md](references/troubleshooting.md)。
|
|
262
|
+
|
|
263
|
+
## 五条硬约定(都是「不知道就会中」的那种)
|
|
264
|
+
|
|
265
|
+
- **`version` 每次都要 bump**——哪怕这次只换产物没改功能。产物 digest 变了而 version
|
|
266
|
+
没变,控制台上就再也分不清「线上跑的是哪一版」,而这正是发布链路存在的意义。
|
|
267
|
+
version 归你所有(清单事实源在你仓里);`--version` 可省略,省略时取 manifest.version。
|
|
268
|
+
- **发布是替换,不是合并。** 上一版的文件不会留着。所以「只补传一个改了的文件」这种操作不存在,
|
|
269
|
+
每次都传完整 dist。
|
|
270
|
+
- **tar 根必须直接是 `index.html`。** CLI 传目录会生成临时包并在命令收尾删除;本流程先留存
|
|
271
|
+
完整 `.tgz` 再用 `--dist` 上传该文件,保证留存的是实际上传的字节。套一层 `dist/` 的包会被拒收。
|
|
272
|
+
- **上限 64MB**,且门户只按顶层条目数报数。真超了先查有没有把 source map / 未压缩素材打进去。
|
|
273
|
+
- **本机配了代理就用 `@xgent/release-cli` ≥0.6.0。** Node 内置的 `fetch` **不读** `HTTPS_PROXY`
|
|
274
|
+
—— curl / git / npm / docker 全都读,唯独发版这一步不读,于是它绕开本机代理直连门户:跨境
|
|
275
|
+
直连上行实测约 10 KB/s,2MB 产物必然超时,而报出来的是一句没有线索的 `fetch failed`。
|
|
276
|
+
0.6.0 起 CLI 检测到代理变量就带 `NODE_USE_ENV_PROXY=1` **重启自身**走代理(需 Node ≥22.21
|
|
277
|
+
或 ≥24;23.x 没收到这个开关,CLI 会告警并照常直连)。Node 版本不够就用
|
|
278
|
+
[references/publish-api.md](references/publish-api.md) §2 的 curl 兜底 —— curl 自己读代理。
|
|
279
|
+
|
|
280
|
+
## 顺带换镜像(有后端的 App)
|
|
281
|
+
|
|
282
|
+
同一次 `publish` 可以带 `--image <name>:<tag>`:镜像引用一变,门户自动排一条重部署任务,
|
|
283
|
+
当前支持的部署驱动异步执行,实际完成状态需回读。三个易错点:**① `<name>` 就是你的 App key,不是
|
|
284
|
+
`<key>-server`;② 只写相对名,仓库前缀由门户拼;③ tag 不可变——同 tag 覆盖推送门户看不出变化,
|
|
285
|
+
不会触发换版。** 该 App 必须已由平台管理员配了 `deployDescriptor`,否则这一项直接 `VALIDATION_FAILED`。
|
|
286
|
+
|
|
287
|
+
**需要确认交付时加 `--wait`,纯前端也一样。** 支持新 delivery 的门户按本次 proposalId 固定目标,
|
|
288
|
+
等待后端与网关回执;待审不会自动等待,需加 `--wait-review`。unknown 不能当成功,superseded 表示
|
|
289
|
+
已被后续目标取代。旧门户无 delivery 时会明确提示无法核验网关,不能把兼容退出 0 当完整确认。
|
|
290
|
+
版本与 strict/v2 启用前提见 [公开面与交付确认](references/public-delivery.md),API 见
|
|
291
|
+
[发布 API](references/publish-api.md)。上述新增能力尚待正式发布与受控启用。
|
|
292
|
+
|
|
293
|
+
## 镜像要环境变量:**键名归你,值归平台**
|
|
294
|
+
|
|
295
|
+
manifest 里带**值**的 `deployDescriptor.env` 提交即拒(防生产密钥进你的 git 历史)。唯一的表达
|
|
296
|
+
方式是 **`requiredEnv`(只交键名)**。值从哪来分三档 —— 照这张表命名,绝大多数键**零手填**:
|
|
297
|
+
|
|
298
|
+
| 档 | 键 | 值从哪来 |
|
|
299
|
+
| --- | --- | --- |
|
|
300
|
+
| **平台注入** | `PORT` · `<PREFIX>_SERVER_PORT` · `PORTAL_INTROSPECT_URL` · `API_BASE_URL` · `PORTAL_BASE_URL` · `<PREFIX>_SA_CLIENT_ID` · `<PREFIX>_SA_CLIENT_SECRET` · `<PREFIX>_APP_SECRET` | 平台换版时自己算并注入,没有人需要动手 |
|
|
301
|
+
| **自动供给** | 库连接串 · Redis 地址 | 批准时平台按登记的服务替你建库 / 取地址并注入(见下面「服务怎么绑到键」) |
|
|
302
|
+
| **自定** | 其余一切(第三方 API key、业务开关…)—— **不含上面两档列出的键** | 平台管理员手填:非密钥进控制台的 `deployDescriptor.env`,密钥进宿主机上一个 600 的 `envFile` |
|
|
303
|
+
|
|
304
|
+
`<PREFIX>` = 你的 `listingKey` 全大写、连字符换下划线(`wish-list` ⇒ `WISH_LIST`)。
|
|
305
|
+
`PORTAL_BASE_URL` 是**浏览器可达的门户公开地址**,也是你调别的 App `/svc/<key>/…` 的基址;
|
|
306
|
+
`API_BASE_URL` 是内部 portal-api,**不代理 `/svc`** —— 两个别互相顶替。
|
|
307
|
+
|
|
308
|
+
### 调用门户内的其他 App:从 `PORTAL_BASE_URL` 派生地址
|
|
309
|
+
|
|
310
|
+
门户已通过 `/svc/<key>` 统一代理 App 服务。调用这些服务时,在应用代码里用平台注入的
|
|
311
|
+
`PORTAL_BASE_URL` 拼接服务路径;不要求管理员逐个提供目标服务的主机名、容器名或端口。
|
|
312
|
+
以 Page Builder 调用 LLM 网关和文件服务为例:
|
|
313
|
+
|
|
314
|
+
| 原来的地址变量 | 应用代码使用的默认基址 |
|
|
315
|
+
| --- | --- |
|
|
316
|
+
| `LLM_GATEWAY_SERVER_URL` | `${PORTAL_BASE_URL}/svc/llm-gateway` |
|
|
317
|
+
| `FILES_SERVER_URL` | `${PORTAL_BASE_URL}/svc/files` |
|
|
318
|
+
|
|
319
|
+
- **manifest**:这两个地址能推导,就不再列入 `requiredEnv`;改为声明 `PORTAL_BASE_URL`,
|
|
320
|
+
并保留其他确实必需的键。平台会注入门户地址,**不会自动注入这两个旧变量**。
|
|
321
|
+
- **代码**:去掉门户基址末尾的 `/` 后拼接路径,再追加具体 API 路径(例如 LLM 的
|
|
322
|
+
`/v1/chat/completions`)。如保留旧变量用于本地调试或特殊部署,把它们作为可选覆盖项,
|
|
323
|
+
未设置时使用上表默认值。不要将 `${PORTAL_BASE_URL}/…` 当成值写进发布 manifest。
|
|
324
|
+
- **迁移**:代码的默认值与启动校验、manifest、包含新代码的新镜像要同步交付;只删
|
|
325
|
+
`requiredEnv` 不会让仍强制读取旧变量的镜像自动兼容。已有覆盖值仍会优先使用,需由平台侧
|
|
326
|
+
核对是否保留。发布前在未设置这两个旧变量时,验证经 `/svc` 的实际调用。
|
|
327
|
+
- **鉴权**:统一入口只解决路由。代表用户调用仍需声明 `exchangeTargets` 与目标 scopes,
|
|
328
|
+
换取目标 App 的令牌;后台服务调用仍用获准的服务账号权限。不要直接转发本 App 的用户令牌。
|
|
329
|
+
|
|
330
|
+
这是**门户内 App 服务地址**的约定;第三方 API 等无法从门户基址推导的地址,仍按实际需要声明。
|
|
331
|
+
|
|
332
|
+
### `<PREFIX>_APP_SECRET`:跨应用交换的发起方密钥(归平台,线上永不手填)
|
|
333
|
+
|
|
334
|
+
只要你的清单声明了 `exchangeTargets`(你要去调别的 App),平台就在**批准那一刻**生成这枚密钥、
|
|
335
|
+
加密保管、每次换版注进容器,同时把它的哈希布到每个已安装租户。你这边只在 `requiredEnv` 里写下
|
|
336
|
+
**键名**,不需要也不可能提供值(`deployDescriptor.env` 带值提交即拒)。
|
|
337
|
+
|
|
338
|
+
- **本地联调要那一份怎么办**:明文只在批准那一刻**一次性**显示给审批人。找审批你这条提案的平台
|
|
339
|
+
管理员要;要不到就请他在控制台按「轮换交换密钥」重新生成一枚(会重布全部实例并排一次换版)。
|
|
340
|
+
**别自己编一个填进去**——你填的那一份会压掉平台保管的那一份(手填优先是有意的),于是容器里跑的
|
|
341
|
+
和门户布出去的哈希对不上。
|
|
342
|
+
- **两份不一致的症状**:`/oauth/token` 回 `SECRET_INVALID`,而界面上写的是「跨应用授权缺失或未开启」
|
|
343
|
+
——报错指向授权,根因是密钥漂了。
|
|
344
|
+
- **没声明 `exchangeTargets` 就别在 `requiredEnv` 里写这个键**:平台不会生成也不会保管它,闸会如实
|
|
345
|
+
判「缺值」,提案就卡在那儿等一个永远不会来的值。要么补声明 `exchangeTargets`,要么把键去掉。
|
|
346
|
+
|
|
347
|
+
**这张清单是一道闸,不只是一份提醒**:批准之前门户会拿它比对「已有值」的**键集合**,缺哪个就
|
|
348
|
+
拒绝生效(`REQUIRED_ENV_MISSING`,提案留在 pending 可重批)。所以「批准了、然后线上是坏的」
|
|
349
|
+
这条路径已经关掉 —— 代价是**你的提案可能因为平台那边没配值而多等一轮**(见下面「pending 久了
|
|
350
|
+
先问哪一句」)。它全程只看**键在不在**,不读值。
|
|
351
|
+
|
|
352
|
+
### 服务怎么绑到键
|
|
353
|
+
|
|
354
|
+
**按约定名命名,平台就能自动供给**:库连接串写 `<PREFIX>_DATABASE_URL`、Redis 写 `REDIS_CONN_STRING`。
|
|
355
|
+
再在 `requiredServices` 里声明你要哪条服务(`name` 是平台侧登记的服务名,问平台管理员):
|
|
356
|
+
|
|
357
|
+
```jsonc
|
|
358
|
+
"requiredEnv": [
|
|
359
|
+
"PORTAL_INTROSPECT_URL", "API_BASE_URL", "PORTAL_BASE_URL",
|
|
360
|
+
"WISH_LIST_SA_CLIENT_ID", "WISH_LIST_SA_CLIENT_SECRET",
|
|
361
|
+
"WISH_LIST_DATABASE_URL", "REDIS_CONN_STRING"
|
|
362
|
+
],
|
|
363
|
+
"requiredServices": [
|
|
364
|
+
{ "kind": "postgres", "name": "main" },
|
|
365
|
+
{ "kind": "redis", "name": "main" }
|
|
366
|
+
],
|
|
367
|
+
"deployDescriptor": {
|
|
368
|
+
"image": "wish-list:1.4.2",
|
|
369
|
+
"port": 8080, // 容器内监听口,就这一个归你
|
|
370
|
+
"healthPath": "/health",
|
|
371
|
+
"alwaysOn": true // 常驻型才写:别让它被缩容
|
|
372
|
+
}
|
|
373
|
+
```
|
|
374
|
+
|
|
375
|
+
批准时平台按登记的那条服务替你建库、生成专用角色与连接串,注进约定名那个键;值加密保管在平台侧,
|
|
376
|
+
**永远不回显给任何人**,换版时注入。
|
|
377
|
+
|
|
378
|
+
- **`requiredServices` 的每一条只能带 `name` / `kind` / `note`**,多一个字段整份清单会被拒收
|
|
379
|
+
(`VALIDATION_FAILED`)—— 别往里加自定义键。
|
|
380
|
+
- 连 `requiredServices` 都不写、只在 `requiredEnv` 里写了约定名 ⇒ 用该类型的**缺省服务**,一样能供给。
|
|
381
|
+
- **键名不按约定来(例如 `ZO_META_POSTGRES_DSN` 这种上游定死的名字)也能发**,只是平台管理员
|
|
382
|
+
要在审批屏上点一下「从平台服务取值」,每次发版多等一轮。预检会对这类键给你一条 warn。
|
|
383
|
+
|
|
384
|
+
另外:**平台级能力(例如日志写入)会直接出现在你的服务令牌里,不用申请、不用写进 manifest** ——
|
|
385
|
+
拿到令牌就能用,你那侧只管调。
|
|
386
|
+
|
|
387
|
+
**六条别踩:**
|
|
388
|
+
|
|
389
|
+
- **`env` / `hostPort` / `envFile` 一个都别写进 manifest。** `env` 带值即拒;`hostPort` 归平台
|
|
390
|
+
(见前面 `deployDescriptor.hostPort` 那段);`envFile` 是那台机器上的路径,写了就得和平台实际持有的那份**逐字一致**,
|
|
391
|
+
不一致就变成一条「部署描述变更」,让你本来能自动通过的发版平白进人工审批队列。
|
|
392
|
+
- **`PORTAL_INTROSPECT_URL` / `API_BASE_URL` / `PORTAL_BASE_URL` 这类地址不是你能定的常量。**
|
|
393
|
+
同一份 manifest 会发到一盒、pm2 生产、K8s 生产,自省地址分别是
|
|
394
|
+
`http://host.docker.internal:3000/...`、`http://portal-api:3000/...`、
|
|
395
|
+
`http://portal-api.<ns>.svc.cluster.local:3000/...`。你只交键名,平台换版时自己填 ——
|
|
396
|
+
审批屏上这几行会显示「平台注入」,没人要动手。
|
|
397
|
+
- **`requiredEnv` 的键集合属治理档** ⇒ 新增或改名会让这次发版进「发布审核」。这是**有意的**:
|
|
398
|
+
运维要先看见新键名才能在换版前把值配好。反过来说,**改了 env 键名却不同步改 `requiredEnv`,
|
|
399
|
+
没有任何机制拦得住**(容器起来就缺变量)—— 改一个键就改一次清单,别嫌一次审批。
|
|
400
|
+
- **改名要写成一条,不要写成一删一加。** 门户看不出「同一个 TTL 换了个名字」和「删一个键、
|
|
401
|
+
加一个不相干的键」的区别,于是值搬不过去、换版当场缺变量。写对象形态:
|
|
402
|
+
|
|
403
|
+
```jsonc
|
|
404
|
+
"requiredEnv": [
|
|
405
|
+
{ "key": "OBS_PLATFORM_SCOPE_TTL_MIN", "renamedFrom": "OBS_CROSSTENANT_SESSION_TTL_MIN" },
|
|
406
|
+
"API_BASE_URL"
|
|
407
|
+
]
|
|
408
|
+
```
|
|
409
|
+
|
|
410
|
+
批准时门户把旧键在 **`descriptor.env`** 里的值搬到新键,审批屏如实显示「将沿用旧键的现有值」。
|
|
411
|
+
⚠️ **值在 envFile 里的搬不了**(那是主机上的文件,门户连写都不写它)—— 那种情况审批屏会把这一条
|
|
412
|
+
判成「缺」,并告诉运维去把那一行改名。仍然只带键名,不带值。
|
|
413
|
+
两条写法约束:`renamedFrom` 不能等于 `key`;旧键**不能**同时还留在清单里(那等于说「它既被改掉
|
|
414
|
+
又仍然必需」,提交即拒)。改名生效之后 **`renamedFrom` 留着就行** —— 它是幂等的(新键已有值就不再搬),
|
|
415
|
+
而摘掉它本身是一次清单变更,会平白再进一次人工审。
|
|
416
|
+
- **重部署看配置指纹,不只看 image。** 新执行链把实际消费的 envFile 字节、平台注入与落点纳入指纹,
|
|
417
|
+
控制器协调最新目标;Compose 使用其实际消费的全局 env 文件。旧部署可能仍需管理员显式重部署。
|
|
418
|
+
显式 redeploy 用于强制重建;同 tag 覆盖镜像仍不是可追踪的发版方式。实际运行事实与网关回执要分别核对。
|
|
419
|
+
- **`deployRequirements` / `requiredServices` 也是治理档,而且是【闸】。** 前者说「我的后端要跑在
|
|
420
|
+
什么样的机器上」(地域 / 规格档位下限 / 要不要 GPU / 必须同时属于哪些**命名**网络),后者说
|
|
421
|
+
「我运行需要哪些外部服务」(`(kind, name)` 二元组)。批准那一刻门户按目标环境**当时**的资源池与
|
|
422
|
+
已登记服务清单逐条比对,不满足就**拒绝生效**、提案留在待审队列 —— 平台侧登记或调整之后重新批准
|
|
423
|
+
即可,你不用重新提交。
|
|
424
|
+
|
|
425
|
+
```jsonc
|
|
426
|
+
"deployRequirements": { "region": ["ap-shanghai"], "size": "m", "network": ["cube-prod"] },
|
|
427
|
+
"requiredServices": [{ "name": "chroma", "kind": "vectorStore", "envKey": "XC_VECTOR_URL" }]
|
|
428
|
+
```
|
|
429
|
+
|
|
430
|
+
三条约束:① **只写名字与档位** —— 网段 / IP / URL / 端口一律提交即拒(那是部署环境的事实,同一份
|
|
431
|
+
清单要发到 N 套门户);② `deployRequirements` 需要 `deployDescriptor`(门户不部署你就无从匹配,
|
|
432
|
+
提交即拒);③ **被拒时你只收到一句泛化的「当前环境不满足…,提案已转入待审核队列」** —— 逐维
|
|
433
|
+
原因、池里有哪些地域、最大档位、机器名都只在平台控制台,要知道差在哪找目标环境的运维。
|
|
434
|
+
首次通过时门户会把**落点固定**在命中的那台机器上,此后不再自动迁移。
|
|
435
|
+
`requiredServices[].envKey` 是「将来注入到哪个环境变量」的声明位,**当前只被携带,不注入**——
|
|
436
|
+
现在就要值仍然走 `requiredEnv`。
|
|
437
|
+
|
|
438
|
+
服务账号的标识与密钥(`<PREFIX>_SA_CLIENT_ID` / `<PREFIX>_SA_CLIENT_SECRET`)你不用管也不用要:
|
|
439
|
+
批准注册时门户随机签发、**由平台保管并在换版时注入你的容器**,没有任何人需要把它抄进 envFile。
|
|
440
|
+
明文仍会**一次性回显**给审批人一次(留给你本地联调),之后再也取不回来。它**永不静默轮换** ——
|
|
441
|
+
要轮换找平台走控制台的「轮换密钥」,那次轮换会顺带排一次换版,线上容器自动拿到新密钥;
|
|
442
|
+
你本地那份副本要自己同步换,否则自省 401 而现场看不出原因。
|
|
443
|
+
|
|
444
|
+
## 首次发布(你的 App 还不在市场里)
|
|
445
|
+
|
|
446
|
+
1. 平台管理员在 控制台 › 应用市场 › **接入新应用** 输入你的 `listingKey` ⇒ 建一条草稿占位 +
|
|
447
|
+
签发 `xrel_` 令牌(经安全渠道交给你)。此刻你的 App 还不存在,只是有了提交的门。
|
|
448
|
+
2. 你第一次 `publish --manifest deploy/portal/app.manifest.json --dist dist/ --image <ref>` ⇒
|
|
449
|
+
**必然进审核队列**(首次提交携带全部治理字段,无论内容)。
|
|
450
|
+
3. 平台批准 ⇒ listing 建成上架 + 服务账号建出(client secret 明文一次性回显给审批人,
|
|
451
|
+
平台经外部渠道交给你);清单/产物应用、后端和网关分阶段完成,不承诺同一时刻切换。
|
|
452
|
+
4. 之后的日常发版与老 App 完全相同 —— 首次与后续是同一条代码路径,没有第二套流程。
|
|
453
|
+
|
|
454
|
+
## 等审批(pending 之后会发生什么)
|
|
455
|
+
|
|
456
|
+
- `publish` 返回 pending 时**退出码 0 并立即返回**(提交成功不是失败),打印提案 id 与待审字段清单。
|
|
457
|
+
**提案落成的那一刻,平台管理员就收到了站内 + 邮件通知**,不必另行催办。
|
|
458
|
+
- **`--wait` 等获批后的本次后端与网关,不等人工审批。** 审批是分钟到小时级的人的动作,把 runner 挂在上面
|
|
459
|
+
既烧机器又什么都没保证。真要把「审批通过且生效」纳入 CI 门禁,用 **`--wait-review [秒]`**
|
|
460
|
+
(默认 1800s):它轮询到 `applied` / `rejected` / `withdrawn`,批准 ⇒ 继续等本次后端与网关,纯前端同样等网关;
|
|
461
|
+
**被拒绝 ⇒ 打印平台填的原因并非零退出**(CI 该红就红);超时 ⇒「仍在等审批」+ 非零退出。
|
|
462
|
+
⚠️ 从旧版升上来:以前写 `--wait` 指望它等审批的流水线,现在会在提案待审时**直接绿**。
|
|
463
|
+
- 同一 App 同时只允许一条待审提案,且待审期间**任何新提交都被拒**(纯 dist/version 的
|
|
464
|
+
自动档也一样 —— 放行会「后交先生效」,批准旧提案时把你后发的版本滚回去):返回
|
|
465
|
+
`PROPOSAL_PENDING` + 在审提案 id,等审批或先撤回。
|
|
466
|
+
撤回是你的权利(不是审批动作):
|
|
467
|
+
`curl -X DELETE -H "Authorization: Bearer $XGENT_RELEASE_TOKEN" $XGENT_PORTAL_URL/api/market/release/<key>/proposals/<id>`
|
|
468
|
+
- 拒绝原因不推送给你 —— 靠 `status` / `--wait-review` 轮询看(通知面是给平台管理员的,不是给提交方的)。
|
|
469
|
+
|
|
470
|
+
**pending 久了先问哪一句:** 如果这次改了 `requiredEnv`(新增或改名),**最可能的原因不是没人看,
|
|
471
|
+
是平台那边还没配值** —— 审批人点批准会收到 `REQUIRED_ENV_MISSING` 并被拦下,提案原地留 pending。
|
|
472
|
+
审批屏上逐键标了「已有值 / 平台注入 / 已取值 / 沿用旧键值 / 缺」,所以他知道缺哪几个;你要做的是
|
|
473
|
+
直接问「`<KEY>` 配好了吗」,而不是重发一版或催审。**你不需要、也不应该拿到那些值。**
|
|
474
|
+
—— 但先自查一遍:平台注入档的那七个键、以及按约定名命名的库 / Redis 是不会缺的,真卡住的
|
|
475
|
+
只会是「自定」那一档。
|
|
476
|
+
|
|
477
|
+
**一条纯自动档的发版也可能变成 pending。** 只发 `dist`/bump 版本、一个治理字段都没碰,如果这个
|
|
478
|
+
App 声明过的某个 `requiredEnv` 键在部署环境里还没有值,这次发版同样会落成待审提案(返回
|
|
479
|
+
`PROPOSAL_PENDING` + 缺的键名,`publish` 退出码仍是 0)。这不是你写错了什么 —— 是平台侧的配置
|
|
480
|
+
缺口,而让它悄悄生效就意味着容器换版即崩。同样:问平台缺哪个键。
|
|
481
|
+
|
|
482
|
+
## 发之前想在真门户里看一眼
|
|
483
|
+
|
|
484
|
+
**想连发布链本身一起在本地验**(定级、审批屏、`requiredEnv` 闸):一盒里 `/api/market/release/*`
|
|
485
|
+
是通的,用平台管理员账号在控制台签一个 `xrel_` 令牌就能对着它发。做法与两条差异(prod 模式
|
|
486
|
+
拒收明文密钥、首次接入必落 pending)见 `portal-dev-setup` skill §2.0。
|
|
487
|
+
|
|
488
|
+
两条本地通路,各有硬约束,别混用:
|
|
489
|
+
|
|
490
|
+
| | 用在哪 | 约束 |
|
|
491
|
+
| --- | --- | --- |
|
|
492
|
+
| **devkit 卷挂载**(一盒) | 服务端同学本地跑一个真门户,把你的 `dist` 目录挂进去 | 同源,满足生产同款 CSP;**没有 HMR**,改前端要重新 build |
|
|
493
|
+
| **cross-origin vite dev** | 前端内循环改页面 | 门户 dev 的 CSP 才放行 `localhost:53xx`;**生产 CSP 是 `frame-src 'self'`,此路上不了生产** |
|
|
494
|
+
|
|
495
|
+
⭐ 无论哪条,**都不需要门户给你开 CORS**:前端从不直连自己的后端,请求都经宿主 `postMessage` 代理发出。
|
|
496
|
+
|
|
497
|
+
## 按需读
|
|
498
|
+
|
|
499
|
+
| 场景 | 读 |
|
|
500
|
+
| --- | --- |
|
|
501
|
+
| 产物形状(`base` 双态、tar 根、CSP 与外链、发前在真门户里试) | [references/build-and-package.md](references/build-and-package.md) |
|
|
502
|
+
| 令牌语义、端点原始形状、字段白名单、返回体、`curl` 兜底、CI 范式 | [references/publish-api.md](references/publish-api.md) |
|
|
503
|
+
| 症状 → 原因速查(发布报错 / 线上白屏 / 发了没换版) | [references/troubleshooting.md](references/troubleshooting.md) |
|
|
504
|
+
|
|
505
|
+
报告结果时如实说清:发了哪个 key、哪个版本、proposalId、digest、原始包持久留存位置、
|
|
506
|
+
有没有在浏览器里实际打开过;涉及同步时另报主平台归档是否已验证。
|
|
507
|
+
「命令返回 ✓」只证明产物落库了,不证明页面能用——第 5 步没做就说没做。
|
|
@@ -0,0 +1,70 @@
|
|
|
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` 传目录时会用第一种形状生成临时包,并在命令结束后删除。
|
|
40
|
+
发布流程应按 [前端归档与同步验收](frontend-archive.md) 留存原始 tgz,再用 `--dist <包路径>`
|
|
41
|
+
上传这份文件;重新打包目录不保证 SHA-256 相同,不能替代实际上传包的留存。
|
|
42
|
+
|
|
43
|
+
其它约束:**≤64MB**(超了先查 source map 与未压缩素材);空文件会被当成「构建没产出」拒掉,
|
|
44
|
+
而不是当成「只发版本号」——这是有意的,否则一条坏流水线会报成功。
|
|
45
|
+
|
|
46
|
+
## 3. 不需要 CORS,但可能需要 CSP
|
|
47
|
+
|
|
48
|
+
前端**从不直连自己的后端**:请求经宿主的 `postMessage` 代理由宿主同源发出。
|
|
49
|
+
所以别去要 CORS 放行——要了也没用。
|
|
50
|
+
|
|
51
|
+
反过来,如果前端要直连**自己的域名 / 对象存储 / 第三方**,那是浏览器直发的请求,受 per-App CSP 管。
|
|
52
|
+
XHR/fetch 那一类可以由 App manifest 的 `embedCsp.connectSrc` 放行;字体、样式表、图片走的是
|
|
53
|
+
`font-src` / `style-src` / `img-src`,不在这个字段的能力范围内。
|
|
54
|
+
**manifest 支持自助提交**:用 `publish --manifest` 申报 connectSrc,变化进入治理审核,
|
|
55
|
+
批准后由平台同步反代;申报不等于已经生效,仍须验证实际响应头。
|
|
56
|
+
需要 script/style/font 等扩展时向平台提出具体能力需求,不把它们塞进 connectSrc。
|
|
57
|
+
公开入口与交付验收见 [public-delivery.md](public-delivery.md)。
|
|
58
|
+
|
|
59
|
+
所以最省事的做法是**把资源打进产物、不外链**(字体尤其:CDN 字体是这里最常见的外链,
|
|
60
|
+
而它恰好是 `connectSrc` 放行不了的那一类)。预检脚本会把产物里的外链列出来提醒。
|
|
61
|
+
|
|
62
|
+
## 4. 发之前在真门户里看一眼
|
|
63
|
+
|
|
64
|
+
| 通路 | 怎么用 | 硬约束 |
|
|
65
|
+
| --- | --- | --- |
|
|
66
|
+
| **本地一盒(devkit 卷挂载)** | 平台侧起一个真门户,把你的 `dist` **绝对路径**挂进去 | 同源,走生产同款 CSP;**无 HMR**,改前端要重新 build |
|
|
67
|
+
| **cross-origin vite dev** | listing 的 `embedUrl` 临时指向 `http://localhost:53xx`,起你仓的 dev server | 仅门户 dev 的 CSP 放行本地端口;**生产 `frame-src 'self'`,此路永远上不了生产** |
|
|
68
|
+
|
|
69
|
+
第二条最容易留后患:调试时往代码里写死的 `localhost:53xx` 如果跟着产物发上生产,
|
|
70
|
+
CSP 会静默拦掉,症状是「本地好好的,线上那个功能点了没反应」。预检脚本会扫这个。
|