@xgent-ai/skills 0.3.0 → 0.5.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 +117 -11
- package/bin/xgent-skills.js +269 -9
- package/docs/claude-context-goal-guard.md +125 -0
- package/docs/codex-context-goal-guard.md +110 -0
- package/hooks/claude/context-goal-guard.js +139 -0
- package/hooks/claude/settings.example.json +26 -0
- package/hooks/codex/context-goal-guard.py +189 -0
- package/hooks/codex/hooks.example.json +26 -0
- package/package.json +7 -1
- 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 +25 -18
- package/skills/dev-plan/references/execution-workflow.md +8 -61
- package/skills/dev-plan/references/plan-skeleton.md +43 -28
- package/skills/dev-plan/scripts/check_progress.sh +5 -1
- 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 +27 -1
- 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/portal-app-exchange/SKILL.md +8 -17
- package/skills/portal-dev-setup/SKILL.md +137 -46
- package/skills/portal-dev-setup/puller.env.example +3 -2
- package/skills/portal-dev-setup/references/kafka.md +140 -0
- package/skills/portal-dev-setup/references/troubleshooting.md +22 -26
- package/skills/portal-dev-setup/scripts/onebox.sh +510 -56
- package/skills/portal-external-app/SKILL.md +57 -21
- package/skills/portal-external-app/references/contract-doc-template.md +1 -1
- package/skills/portal-external-app/references/integration-contract.md +4 -4
- package/skills/portal-external-app/references/public-entrypoints.md +100 -0
- package/skills/portal-external-app/references/quota-and-seats.md +12 -31
- package/skills/portal-external-app/references/registration-and-onebox.md +67 -11
- package/skills/portal-micro-app/SKILL.md +18 -28
- package/skills/portal-micro-app/references/manifest-and-acl.md +21 -3
- package/skills/portal-micro-app/references/open-api-and-extensions.md +1 -1
- package/skills/portal-micro-app/references/sdk-reference.md +1 -1
- package/skills/prd/SKILL.md +56 -38
- package/skills/prd/references/prd-skeleton.md +72 -34
- package/skills/prd/references/product-quality.md +89 -0
- package/skills/prd/references/spms-mapping.md +9 -7
- package/skills/react/SKILL.md +26 -4
- package/skills/react/references/actions.md +251 -0
- package/skills/react/references/data-fetching.md +25 -1
- package/skills/react/references/react19-migration.md +407 -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/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/summarize/SKILL.md +1 -0
- package/skills/swarm/references/teams/product.md +2 -2
- package/skills/tdd/SKILL.md +42 -0
- package/skills/teach/SKILL.md +21 -0
- package/skills/test-plan/SKILL.md +12 -11
- package/skills/test-plan/references/case-taxonomy.md +3 -2
- 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/xgent-app-release/SKILL.md +97 -28
- package/skills/xgent-app-release/references/build-and-package.md +8 -3
- 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 +62 -56
- package/skills/xgent-app-release/references/troubleshooting.md +18 -2
- package/skills/xgent-app-release/references/verify-preflight.mjs +50 -0
- package/skills/xgent-app-release/scripts/npm-token.mjs +8 -3
- package/skills/xgent-app-release/scripts/preflight.mjs +13 -2
- package/skills/xgent-init/SKILL.md +23 -82
- package/skills/xgent-init/references/external-app-AGENTS.template.md +149 -0
- package/skills/xgent-init/references/fill-guide.md +10 -22
- package/skills/xgent-init/scripts/check-docs.mjs +14 -86
- package/vendor/impeccable/VERSION.json +10 -16
- package/vendor/impeccable/bundle/blobs/{daa2a8ecd874f9f940dfd72aaa329318b06bb9be25515be85fea84c871b637a6 → 00c067253d37cd20a41dbe9c806d6a72cbff983ad1418b3c3e447998f577b9c2} +18 -11
- package/vendor/impeccable/bundle/blobs/{4ce929b8cafd37247ea4c148bbe39a9afe15908d1abf4a8248c5122275d16499 → 00d167d9183c8d0c6c0682055107382e6672bacf7a712de0abc8f157c2cb2210} +3 -2
- package/vendor/impeccable/bundle/blobs/{a9515f6f084d8f51c378eb3cdc6db1f12e06dba2d32fc61b7ee7950fa2586f2e → 016c082dcd2aa8f3c080a757c8ed335c6070a904bd2f39668bb9d3e6f95929c1} +1 -1
- package/vendor/impeccable/bundle/blobs/0221a193d111a9de33a785706a603e55dd974a115f549dbdf74e0f9ec72bde7d +101 -0
- package/vendor/impeccable/bundle/blobs/055c571f2960b8f929d6a8d3806a4d32dfcb9750b3ef8b60adc8930fff34b559 +101 -0
- package/vendor/impeccable/bundle/blobs/{3aa908c18db91d5f31d6bba6402eab6afc4e0b75137f841a86bd012386e0d8e2 → 0605c8729dc638a46798e90ab12486fe3ae3372a869757cfb387a08e23b3c84a} +18 -11
- package/vendor/impeccable/bundle/blobs/{ec58806f16fc7ba29bccef08f2e158cd00be077ce05d45e943a59bd26dc6dc55 → 0648e4e06d01cabc91fa7dc19256ceedeeeea213b9265e9d36b0918370e16fb2} +6 -0
- package/vendor/impeccable/bundle/blobs/06b20bd42e5682a42c5d6fbfaad4c55e66ff9b9d99a604bd31d3545af120fc2d +101 -0
- package/vendor/impeccable/bundle/blobs/{420e2fdee2b7f555d9a37ce348cf62610ddd98f96b1a0a511796ba600881588c → 08346755b13f1a3f7c6fb4e512387884b80467aaeff109fd41f5521d2a95635a} +3 -1
- package/vendor/impeccable/bundle/blobs/{8f651cb1f8cde0acc5cc511b77fddd98558a527f54974698a1650b0fd7e849a7 → 08398fa2d8e2b06b849f1c0f032e1e93b832e9294aed35c1c7f62b938d62ee80} +1 -1
- package/vendor/impeccable/bundle/blobs/087f6715114e901c2ce00b438e75b82fd48978c020a782f3dc361d39eb7198a6 +26 -0
- package/vendor/impeccable/bundle/blobs/{bc7a5128cfed46148396c08798b6b9429406fbe477e84e331a36ee2840b6b776 → 09310582ed23393b171eb99ad4a288cc422ac53c26d76311586ce54c6df77b22} +3 -1
- package/vendor/impeccable/bundle/blobs/{633903ba7cb38ed502448a66691fbf655805786a2f06be67043f12294ad08e86 → 0bc2bc36ca6e74f9f610392f1a4fb8f57b2676238ba1f9c65cd8714f5d27e8a2} +5 -0
- package/vendor/impeccable/bundle/blobs/0c064c9975f25f6eb5cf7911c2eeafd3e695d729f8c86a49a24ff2d76cb3cd94 +63 -0
- package/vendor/impeccable/bundle/blobs/{4a7d8695741e2cd354baada215b06798c050aa7a8e1ca6814f0e395e054d1ab1 → 0ccf57f758eb0d53bc32c5c77156f016e528d20fe2c2740662bf19964dfbb00b} +18 -11
- package/vendor/impeccable/bundle/blobs/0dd1e6ccf053cb80e057caf7bf2fef30fd0197a41d907a1a8d2d2d02f6978674 +63 -0
- package/vendor/impeccable/bundle/blobs/{943b0d7c9ce4f6802d8440a07b2ad3c61cbd1cc00ab63962bab7eea9ca584d20 → 0ed5986d1503399f48c11104df5e523a63be2d6558770ebfbbeb2323ca3f2ad3} +5 -5
- package/vendor/impeccable/bundle/blobs/14c9c9a7816026dd77494d06b8d1777c8d64785126b0c9ac8db5ebd996dfd6b6 +101 -0
- package/vendor/impeccable/bundle/blobs/{54cb270e8826380caefc8c40642a5d973f27df46bfdb762d822541a0c72a9877 → 14ef0ab84c10331f8af6b4124387a3f80b493175a04a3f89200719b4b5aea221} +18 -11
- package/vendor/impeccable/bundle/blobs/{6abbf5979db5cb1d7965bf5f91d589e984843069c587f4d1e63aab135bbace0f → 1547005438784032de3254cb35bff393e8187d7a459d0c20a693d9bfb0b5c1a4} +5 -0
- package/vendor/impeccable/bundle/blobs/162b814ddd1133923b9584bb95f85959e64844c94341d6bf10a81c06ab7cc02c +101 -0
- package/vendor/impeccable/bundle/blobs/16498466a97a5b19a593d5b3f245468c71784bea069d7fc8aa9690db5ac1d968 +29 -0
- package/vendor/impeccable/bundle/blobs/{b31ff29c7a1ea979c6d039f7e8d17007410697ab49536690dca109f0af3f20f8 → 16ba7fca1973c5faf53dd2ca523559129c0fe9e5f8d50b645f527afa78186cd2} +9 -0
- package/vendor/impeccable/bundle/blobs/1725ca4aa546a34770f29191b58bf8dc14957d4258fb9e7d02f7b1c59c412ea4 +63 -0
- package/vendor/impeccable/bundle/blobs/{598bfed550954471ba4d257d46b4d608cd82e4cdbf36d07bf93c5f4a563f7727 → 1898529e994bf0a31ee9ff3f87c343caea3d8a7e0986f404e129fbf89078ade0} +4 -3
- package/vendor/impeccable/bundle/blobs/{6e20041e209e8705d14aa9c4fb8cca3f0d743791de633785e5b46e2dd1ff1a6b → 19b439d7d16e139357459d3874f739ea94dbdffeb2a0e201df1620ed1e40574d} +1 -1
- package/vendor/impeccable/bundle/blobs/{04af9f2d6883fe76f9539d310d9c369052822a24886d2c330ab1e3fe5981c8a1 → 1b289c8c09de9d4442109ada91b1fa3a190e113a310cab7aa26a3633c5df0bb0} +1 -1
- package/vendor/impeccable/bundle/blobs/{eb3213b9c9f4d6b2f153e7b457f13aa131bcf633695229dad4eac39a920bdf38 → 1bb3bdce54386e96e21b5956713a80583e6b3b9d1170f3bb8dec3819fa341bc3} +5 -5
- package/vendor/impeccable/bundle/blobs/{e71d6b97680084a7ccec01844e658cbd2042aec00da0c91bec62a240ad7dcf6a → 1c11cb8ea42536c7a51e197f1aa32198960bb89262da2eaf32e0feb03c70792c} +18 -11
- package/vendor/impeccable/bundle/blobs/{f0c4d0615c7d520dfc2536c01cc7f1f3aab9b60ddc399ba01289fe62edb12370 → 1c6258015ed02c522948f8f1a3b6457395a8f7954497b87c1cd83f1791f9f819} +1 -1
- package/vendor/impeccable/bundle/blobs/{27c4b6c90ad12a186136f9ece9cb1830d4a6e36b11382ab334efc4543f8082de → 1d7145fd5bf65282b2e05cf42faf41766d68e83e2b75f460b3b62d81ada5e5d7} +18 -11
- package/vendor/impeccable/bundle/blobs/{1484a7ae206ab4f0e6262b21afe0f6307a629ed27d28fb7de69536a6800a4883 → 1e2f696760ee55fb154bdcc302c7d7b0fbb807e0308130594bd892dae14dc9ea} +5 -0
- package/vendor/impeccable/bundle/blobs/{6989120346e87907d59cc6d4708dd9dee29227ad583fbefee28935395b68ce34 → 1f6c3a1d7344f44eaa88b6f38334ad7d7b60201709589039a58cee73de486f5d} +1 -1
- package/vendor/impeccable/bundle/blobs/207d443cabe4e6fe1351f91785748957f757bf1e7aeca405433c0329dad46a15 +63 -0
- package/vendor/impeccable/bundle/blobs/{f7916d0113da7a19d4e03c113d5563d181457e44f1646ecab9191cfee5ae776d → 20e2111b3e065e8e8054f715ea3902e64b77886b30d2bddee723558f22942620} +4 -3
- package/vendor/impeccable/bundle/blobs/21e78c8a77badb3f83290cd4577ed3b24bd4dd3b57136d7da75733d4f3ee9ac0 +19 -0
- package/vendor/impeccable/bundle/blobs/{0f83648f6b425225290305bced51eacebacf9bf9bc05e21cdbad46863fbc89ce → 223f08673b267f81d7586f686afe05d7cd7529a8e11ac37d979f95c2ceaae8ce} +1 -1
- package/vendor/impeccable/bundle/blobs/2499b18f26639694344ca95682f47c65494f730cfff88aa9bd2aa83a22e5926d +101 -0
- package/vendor/impeccable/bundle/blobs/{074575671f24cf4298d06f0019f76e94f62e9a6ed205fce05b8e507341e64266 → 26cd88d10f8a14ed0ddb6e6b21e5e2c981f410eac93afa179202c354d7d1c0d5} +3 -1
- package/vendor/impeccable/bundle/blobs/{5f24c5a97b4ffcabc7c432b064cfdd04c7a2ad52f52e765be648dc0aadab8f38 → 275dd1b6e63bbd30d2713227c4f79b880a8bc4e01cc48d392068bb86939d3afa} +1 -1
- package/vendor/impeccable/bundle/blobs/{356cfa0ebf61589cf5d52691d101a69d69256062fe1d11d71d95d41a78289cbd → 28f65b42c1ce9aaea35dc37a51257d7c703bb7f6553ebe3b8ca238a1007251e0} +3 -1
- package/vendor/impeccable/bundle/blobs/{a1dbde501ffabb50f30f28f2de6755b5e91b3d4028292c5a3abd3358106eb457 → 2ac1624b1253f3b6fcf2da54d54293624176539b2e9609a49245e7e46c65ca5f} +5 -0
- package/vendor/impeccable/bundle/blobs/{3895765e9434400dfc1b30e364be002cf499c1718fb2431e65b907c14ae2cb27 → 2b9379cdb329890eebe2384fbaa23f771745f30d8cfc43e180ebd092e69bcd2f} +4 -3
- package/vendor/impeccable/bundle/blobs/{1a9180cec754f8afd354e7cb759750247e97c5bd26d3242ad4c45e315069e8c0 → 2bc5d62463cc83d6417df7b8f4a02b4135e2b1bb654aa7727890662496f86e3d} +5 -0
- package/vendor/impeccable/bundle/blobs/2ce1722bd1a9f366182d9357d629796b1448f7a0126a854df507eb044d891cab +26 -0
- package/vendor/impeccable/bundle/blobs/{e21af575fcc0f1df54ae422bea4dfa1e5211422606908919f6a86e19e0d5c20c → 3149a87bbed84bffe3558d5eaf1dc596b2e84d3c1be290fc7b1c13e481ae0803} +4 -3
- package/vendor/impeccable/bundle/blobs/3253eab02b62efa80abc74a5c85da08f3e2c6c20dff8dec38f4d236cbbfa0f3c +63 -0
- package/vendor/impeccable/bundle/blobs/{38c2e839e130008b6da814ab9c16f3fcbbedfdf721a9638eebd31a9e65341a7a → 37680abf9a8e446619fcd33862718f483d197bf2652f966adca8dc54d2909b9d} +3 -2
- package/vendor/impeccable/bundle/blobs/385a0efe833bd4afe4a257e7159590de0cf1b7fd8f7b213b732f1e537c62dab7 +21 -0
- package/vendor/impeccable/bundle/blobs/{8a1c872773996dfa1c1eb765ac7ed8e8d41f99d4f12f090b4725b694e85eaa62 → 3898bd9b56a042e860a0db4fb4dd81ac81126fa218b604702e2ac0c2287ae09b} +9 -0
- package/vendor/impeccable/bundle/blobs/3b2b60f23fa8ed9d73e721e17142c3933dc5318fa9a251742a76fee890ac81a8 +26 -0
- package/vendor/impeccable/bundle/blobs/3bd55b35c253f7841ca4e6e1a855a4b477d59aa2daf6e61e93fd685caaaff131 +63 -0
- package/vendor/impeccable/bundle/blobs/{dde1b74aeab3d90320e134f0ed0422bef99917dcab4c1749aa1720a2c94f725f → 3bed76a0d528e2d73da8acae4dc63702bdb5baca5ab11600d70e75fc9f2ba90b} +5 -0
- package/vendor/impeccable/bundle/blobs/{9b2fc50c5062073d097140cde85602bba181e325ec6b9eea1bd3da74582acb9d → 3ef9a43006bc68d83bc958fc8401e59f9beb6379048f5ced047747fdad05b895} +5 -5
- package/vendor/impeccable/bundle/blobs/{30e006fdee873bac23edaeadce0371161625e021e3cf442dff4b05bb82297ba1 → 400419aaa20f710e1a7e5ca1fce9e8bc995c4db84053f40cf778d987619e0210} +1 -1
- package/vendor/impeccable/bundle/blobs/40cd6024312a1339aa66801df533afa543e60c36e708f0f9659dd8d558f83dce +63 -0
- package/vendor/impeccable/bundle/blobs/{55e95137b3f9198c1d4dfc425366b82f1ef5f77d602682b2edf91f2ce9296289 → 412dd9a5238aee223397591fe49b3bd27b6b53d649a0e67ed8570f3e199cebb9} +1 -1
- package/vendor/impeccable/bundle/blobs/{181e814c1b9317098b2300c1b02ad0d137b6d82bd1e7e8cc64de4d00b4c50c25 → 41ef23c048ab739f48afdce26a2678d36ee40bcced34ef4b969d1d8ffafca64c} +3 -1
- package/vendor/impeccable/bundle/blobs/{edddeb3fad88adec9a055b1bf9d5c75418cbe97a13b1a7f6765e73249e482563 → 42831c3cd874346d8e7f120808d91e6ed3cda5c3eca6eefd76b126659536bc87} +5 -1
- package/vendor/impeccable/bundle/blobs/{e3c331cc21d9a216e25e08628610ea99c97e150893c3d26e5c0cecc532f26d7b → 43dbfcb7c2e54c9cca9fce66024f17c06a2f2be645547b718b75c8828a463de2} +1 -1
- package/vendor/impeccable/bundle/blobs/4435529820c3fc2eceae8b1ee35c906a34c7612fb860117e896152b45aee0770 +26 -0
- package/vendor/impeccable/bundle/blobs/44a60aedcc350c2d7d501d0f830a31a586a6511a9ff9b4e361cb328bb747339d +101 -0
- package/vendor/impeccable/bundle/blobs/{c6a0ec6c28ae55fe539f0f41a507b1638495afd285d6eb15c00245fc8cc7e7fe → 45dcea8da47cc21f447041daa942cf5d92cddde9a5a02c196cedbd159c829304} +5 -0
- package/vendor/impeccable/bundle/blobs/{015725eeca94f52bffd2132d4cb49bc3eb1ee76e6ac7378c065e629d59f56613 → 4700adf4542874f204c680ebad8317a97bf7169dbc04147082618ab59ce70c7d} +3 -2
- package/vendor/impeccable/bundle/blobs/4777bbeaff2efcd6a2a66b07aacaaf57cd32f3fab1c1da5a0513937fafb48bd1 +63 -0
- package/vendor/impeccable/bundle/blobs/{b6022a8c7200e96b0b55c2ff599a01d64123a2f5fe01557d4ca5192a6e0f0b0c → 484ea165f6d49ecc15b7a5c5623e377f2e203f4dad366df23eae99255ecf4572} +18 -11
- package/vendor/impeccable/bundle/blobs/485774d58dfd5796956024cdd9c12f05e692a3703f70b12a02ab43918885c3fd +101 -0
- package/vendor/impeccable/bundle/blobs/{3bf5d8661351831dbb2195e3b677fea1f128ca319c0589d538b66d9c9d7dddbc → 488da2e7406c6b4b5c92d7bc8cbd370cdaafc82a5f3ab5adbcffb21d1d1c4df4} +3 -1
- package/vendor/impeccable/bundle/blobs/{6f1d52863482fa0f6fff877f0cc8f6dd0b4230d28050b0d267e082776e61a332 → 492a8030d11e2f4908d934bd817bd6d16a3164056c74a7172f60e2cec5ff3055} +5 -0
- package/vendor/impeccable/bundle/blobs/{51e2f8963377f142ebdc9864e0ecc5aa1e5b7d344ed72d0e9d748d2d3d8c71b3 → 4972f28d96897c8dec891f0de7a0d9d51f36030ff780ed9d960241c75413da2b} +5 -5
- package/vendor/impeccable/bundle/blobs/4a6f0386bff78bb42efa285df2919e75209ec336672cf5fff91ba66ffb352eaa +63 -0
- package/vendor/impeccable/bundle/blobs/{12c1afcd15e86d840b89a78c6d17ce6d1b5609bac713d59271c6ab5932975dac → 4e3cc4d0e229ca96dd2e28fb2da0478a7f0bb64e447d07a652c425d8fbc57573} +3 -1
- package/vendor/impeccable/bundle/blobs/4ea8e05d0f88d24f182ad554da84317f90b9730e29fad262143ddf423a1f8645 +26 -0
- package/vendor/impeccable/bundle/blobs/{402656ca6df17bad1cd55ede0a966a7bb5b187cf4f89c517851f9efe7f14c0fd → 50d4b14134fc06daeac0aab6960800f171ef85250d3bcce6f246cf81e824463f} +3 -2
- package/vendor/impeccable/bundle/blobs/{43852ca5917de66704f73f9019d15482bb1efd92f2eefaeeeae23610b4c0c6a0 → 50f3b5714ca3e2c1bcf070003733407935ee050609d3123c2c065489fbc9950b} +5 -0
- package/vendor/impeccable/bundle/blobs/{f597742c8e5562263d3bce725cb55e920d8c2c60223f41a632d523ca30cdd12b → 51032bb883137007127d30189b44b516d0e6140271bf5881da7eca76f8bd282c} +3 -1
- package/vendor/impeccable/bundle/blobs/{13bd27aa8573e6d45d8bbf9f3fc991e4719d28a7e8f709009a4a5a49a227fff3 → 511ecde67e6bd976c9bdfa8d92f0dba359621344f8135c2a5ce5a66b385a4cb5} +5 -0
- package/vendor/impeccable/bundle/blobs/514a27fc9830455828d337cfc2fa95fa86be8e5464501bbabb9aca09a66b40ad +63 -0
- package/vendor/impeccable/bundle/blobs/{78ac93689928a580c2f90242cbaa96dda3fa4e55ff1f1d00e412b2a62ad85232 → 529cb2ace696ec11a86f4b010c9b137acf282072e483932181be1871df2aa690} +18 -11
- package/vendor/impeccable/bundle/blobs/53628d05b7eff0d4f48b95e48fad40266452fe1b42f398bd88dd9328353e0dd8 +101 -0
- package/vendor/impeccable/bundle/blobs/{00023f9e7f2e27604fde978b56510a8f837b76eeadd93221d11adcf4c98f1a10 → 53de37260c4f1c37e467557e9b038faa0f285b056bb2b95f435e0a7d1b69b0de} +3 -2
- package/vendor/impeccable/bundle/blobs/{0dbbef70048cc3ae44e6710ff09992ce14ad049ce8ed519b0ff8a1ddb4633f4e → 5415103ca4422ea1422e23bfe9f9bae181f5d6d6407442f7fba31856ada58d12} +3 -1
- package/vendor/impeccable/bundle/blobs/{af34b8af89edb10e228c0482754423f48238fce816eceb8703b8781c130da54e → 56285b28b0ffe471761c2ad062d3f933ed2346ca1b617f1323a30fed99a1a852} +1 -1
- package/vendor/impeccable/bundle/blobs/{12fefe52d80d25014e5f7e2f9b278275a675653d3d99ae8f0ecf344cdb9abbe6 → 56cc1bba51e6805de370160ce4a9399fef3740571204f13c3c751725870305e5} +3 -1
- package/vendor/impeccable/bundle/blobs/571f5c3bcf01c9b1bd02ab853a54db3f88375c4b8f39dd67d53e983a33e08bb7 +26 -0
- package/vendor/impeccable/bundle/blobs/{5ce02fc8f353d7f659535fb80e453963dc047a07c4396adf098fe010b479e7c0 → 5855d7595b0212bb8d521e0265378d437df8d2343d5f8a30408c3edde0a14d96} +3 -2
- package/vendor/impeccable/bundle/blobs/{2b21f0142ee88a11dbe2593362f5a910718a61062e3a64e7ff936ef1e74fd394 → 5a07d4769a741cd00fdf8c95b943ef072eb12cd0c9e2c2d2622d5fe0a4fa3894} +5 -5
- package/vendor/impeccable/bundle/blobs/{3dd45e1c32db3d3163a96ef198954905807b25cb9a1d206a7d77986f21d27652 → 5a9626fb8c1e9051155c68626fe7c765a55be325113245d44b4991fc3d3b014e} +5 -0
- package/vendor/impeccable/bundle/blobs/{d07e3131cdf3e392e59eaa3e2f59fcb0799d9494df4adfee12a21067fb8365ce → 5e354ae11913d5846faa3681a9ed98b68d1881fbbb1ecebf0769e3010bb0a426} +5 -0
- package/vendor/impeccable/bundle/blobs/{ad389ab12800738b0e5c97618278b7a824654b25990166ec9f389caa5c3386ca → 5e6eea05456108b8766cf354dda998e90b6a5ecca7f15d807e28659ee78c306f} +5 -0
- package/vendor/impeccable/bundle/blobs/{85b9c2d051de94ee9129c58be111946f73035ca62bbd2a3936f4fa48768fe5cf → 634257e766b1fecacd25e27dbfc7e21ef3b440b01e94e92b8b17711018d8a661} +18 -11
- package/vendor/impeccable/bundle/blobs/6428239079f98fd6500e9fd032dd289b52052da7a4364ff357b0a5341b6444db +63 -0
- package/vendor/impeccable/bundle/blobs/{f424dafa190533cd32c0bc3e4131d0c472d58e16bb191eab14f0ae73c2cea917 → 647bab2f5cf6279d58d808f4df05d1ac63c1c86c6df9d13406ae776458653995} +5 -0
- package/vendor/impeccable/bundle/blobs/{8e7bb79db7331b93f99de314dd5599de8587ec0b6c25e26cf1efab25c0777fcb → 6528f2aebe4a425b724de293c8f6dc8a42ca80c7f1ed3039b8b9a813b004956a} +4 -3
- package/vendor/impeccable/bundle/blobs/{89eb0206a0d9308c6c6a7cc01bc4fd8812d2bd34bb9a831988c5d86fac2c60de → 6575a657642ccdab42d0743ceaee06621c77811b4dc4f21c616e28aabf5e28ef} +1 -1
- package/vendor/impeccable/bundle/blobs/66d60356172ccafdd334fca9bf33243c8409216a733dcde0d66a24fd70ee8132 +1 -0
- package/vendor/impeccable/bundle/blobs/{759bab1d8adc071fdde2efcf6e2157aa4026f3c2b4f3c342a8070bf328011616 → 69cad1ae7355825ef320ac9638a1c9675ba9fda01c9a0fa12244cc4a1973e550} +2 -2
- package/vendor/impeccable/bundle/blobs/6d21d8e2729effaecc5b6239dadbcffb1ec8d51e8bdadeb47a39827266a61c5e +26 -0
- package/vendor/impeccable/bundle/blobs/{ff882c59c9aced92338aa194cc99a521ea2f083fd22eef3b1c1225e06bc72f66 → 6d9258a49c0b0583ec255eeb1092554298d5eea676fb9391f5a5a1377c3fd770} +4 -3
- package/vendor/impeccable/bundle/blobs/{68bc52a604731ca024610051fc763f4d78a53eb2a45d35b40a8c0383043baa63 → 6f4dfe968f47302ea64dca0e02f8c6d81497d93e4f436d09236e305456cbcc02} +4 -3
- package/vendor/impeccable/bundle/blobs/{f97a6891c80bbbc728edefcf4b638d1a823b38f3cb16ecd0fbb717734cc5c0c8 → 6f7f1639a933ed88e116aa8ab0cfb951096930d14f413349ae22ed04e28d2358} +5 -5
- package/vendor/impeccable/bundle/blobs/713a942482531ef8ef103adf48d9decd7327697450e444289aa0479458e4ee1f +101 -0
- package/vendor/impeccable/bundle/blobs/{6d47503587ad6da17ac529f44a96123bbb96a9c91a7a9350b7690fc467561a5d → 7212014fb2477d1d54aedaa79cdb861071a58afb2ae6d4dc5a495fa4810c6f8a} +5 -5
- package/vendor/impeccable/bundle/blobs/{21bc91f6e07691e82b7bba99f9e1d956f9d7a6810dcdc18d231fe73b53a13b23 → 73f8bdec7d9a97476fd7d7e0b4114b5c3e9c7b84c22cbb876cd18c3e64a9b8c5} +5 -0
- package/vendor/impeccable/bundle/blobs/{a8547c8565979894f0c07f92a96ac2a38e681a31fbf155ffeefc7566e185d9c2 → 754e9f0aa2101245a83cb17d8cc5bc49cf87997b29a83dedbfff283dbd0a8c4f} +5 -0
- package/vendor/impeccable/bundle/blobs/{84df879a0332a56ece4bff1922ecf4f50635951b3c67e67eb46f31bc5d30fa9a → 765d3e890cd7f58ca94b6834181052166e9c4f9ef06278dc241da4d64da2d595} +3 -1
- package/vendor/impeccable/bundle/blobs/778cedc9199b407d3e23fa1041e38d548b00b1101a33517aa2a2eb299f9d0edc +26 -0
- package/vendor/impeccable/bundle/blobs/{ef0b8eca20e1321cf7216fd0bda41ce54b0cca197cfd1b075eb51f3436f59059 → 77ae09542fbc10aa4e8b119d6fd19359908a47c13c30068d6a150bfdb50e3e10} +1 -1
- package/vendor/impeccable/bundle/blobs/{15b4837dccb27d7382e2f134ef050b244c4488b1906e0308f288112183cc09ac → 796bbd8231413fcbf22eb7e6f40c402842aa4b10b1894545a7b05d9201ca7c4a} +18 -11
- package/vendor/impeccable/bundle/blobs/{5e3616ac45568f239fda3a4764f7d3bf3473b8b5eefd91e402dd9208a4b851d1 → 7af7fcc09c6b14f26ba78734460a2f9dddd2dcd2e2fa0c47c682f539e2f4cad5} +1 -1
- 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/80191b3580a996a2045105976f728e0f46de22c412fc7640741add9767b2d8f4 +101 -0
- package/vendor/impeccable/bundle/blobs/814610dee1081abc4213476ff0c4ae3e8f457909550d250ea0f89953687c85c6 +63 -0
- package/vendor/impeccable/bundle/blobs/8157b5a376e46980117f1ad6d08b24ee7be966f5de64b041bd213d486ea8c077 +26 -0
- package/vendor/impeccable/bundle/blobs/{bad9250670c18d89722563fd747bae4c4bec64d1db0ee09d12d4fea04fe271b8 → 8373668da1aa37c39888809ed9e834a7edfcb884af12f74934c270d004fba626} +3 -2
- package/vendor/impeccable/bundle/blobs/{46250caaec1bd69619a5b28a73cb3c845b319d029b0af9228aaa7001e7e0104a → 83d614fec61078175383012a088f49a9c0bb08b9ebd2b651c77cb94a323474ab} +5 -0
- package/vendor/impeccable/bundle/blobs/{a5371492582dbeb69b24a1a2947b256a2da8a4d55917af709bbab6e452d9d23c → 8449781319a33d4a10a7fab9bfa4812241c303b95f33703b300b097dba51089a} +18 -11
- package/vendor/impeccable/bundle/blobs/{12d2a8043ae8668ad29c32bfa92995849fc49cb016e6ebd4f7e59539d96e7b03 → 857c4a0db5859f1fa91152db684528299dfc552525f50f416d1625a270e12671} +5 -5
- package/vendor/impeccable/bundle/blobs/{bead87679caad7c537dd7c04c3bb78be56ac7eec279ad6aad7322f48ff2df2d9 → 871a8e4d749b807c693ebabd83defbd6c76e1bd2a0f53a28a460cb1308ba8634} +6 -0
- package/vendor/impeccable/bundle/blobs/{cf3ae16765e7b5bc333ef76e24ab37f080e3d62e931c4986158e3cbcda6b9f7a → 881a58aadf300bcc8f4947243e82192ae8dd7f14822a70fabc84fc74a5f9199c} +5 -5
- package/vendor/impeccable/bundle/blobs/{896da399bafcffb0623bdd81bb18709d6eab25c9d5917e739c8798f31ff0d076 → 88549c11ea55d5dfc9f551db9a9c270d7362a9d42aa83db7747c9a7f020e1255} +5 -5
- package/vendor/impeccable/bundle/blobs/9287af96048c58ed0e72493cf7eb90c3957d4ba8b19e70ecf5d1f54264e9e597 +101 -0
- package/vendor/impeccable/bundle/blobs/92b7ab84c828fa888f4882c417c3d7f8fde2e5445b40f96f4fc8181a3e058afc +101 -0
- package/vendor/impeccable/bundle/blobs/{e2f98c4136d0ab70ec32fcdef58edb20ed8ec4f6cc067e0dae952b22cfd6a471 → 93c53421c3376f695fe9dad5c82102f74bb5dd15e4ced81bb4ad50a71e5f1027} +1 -1
- package/vendor/impeccable/bundle/blobs/{a8f4056a85706c0c8f80ec48e9b437e198464100aa42786f9252051f4b931c19 → 95f0c7935a6d0375e09ae67ae0066c0ce7b583bf1d445d268cc4d2f4f900b1bb} +3 -1
- package/vendor/impeccable/bundle/blobs/98384b78af087855dbb526ec1e870a676ecd87f57237643dfea815317dad8a07 +26 -0
- package/vendor/impeccable/bundle/blobs/{948326fab89f0d5c07355a06b9b9c30d08bba2e3a673a0151ebbf5a39dff7b9a → 99e4a6facdb07986aa721bda8a4e35466b30091f32e38d7a71d9fcbe3591f65a} +5 -0
- package/vendor/impeccable/bundle/blobs/{44a91b3f0810f43829d8584e912812444d15614e4b57ca8070aee7ab899f7c1e → 9a4aa0d4903eabee987fdc92053466ff7f6eb0604797aee0efe67d67999b3eae} +5 -5
- package/vendor/impeccable/bundle/blobs/{9b85b85443aec09918befb83208c72f475457db8261a8fc5e83ef7eec474c869 → 9d45e5f6c082de6df4a2cfff11deb969715c49b5d9891d100dd1b2252c5bdcdd} +18 -11
- package/vendor/impeccable/bundle/blobs/9db3c0857f4c2c8877b1fe24a47a229fee0de76ec9057bd8ee95f0677fb58d74 +26 -0
- package/vendor/impeccable/bundle/blobs/{5738bcf9ac21dbb2113fd0c5cc7e4bbfc8174778916ab5843644332b3dbbc36e → 9e82126a2e08aa365f9c430d383cf6e1921e04d1e0a1b5777716ff97828cfad8} +5 -5
- package/vendor/impeccable/bundle/blobs/{b3782f2d9215eb0f5df4fe3c0e0bec07cef011e1836d4d0e45ef02bc48d3adde → 9f2993499adadfdef4065a9a7fb69c75f888d892d4ee6bdbe62619bc772f495c} +1 -1
- package/vendor/impeccable/bundle/blobs/{1c804990fd8ac23a4b19c42972b5ae591d17f620d0006f0f32927c8db5d5bf50 → a1af8b8a97665a3692eb39872c235796684a387a0b83785872f81aebd9dab046} +18 -11
- package/vendor/impeccable/bundle/blobs/{824b994782a1fe68a244bbdff7218a2e0854655d90cc0fb5ade7ef9259ba6305 → a27399e3056c77a28ddd310fb5b4dee6e8e440dfa1737f7e38815097bec4c3a9} +5 -5
- package/vendor/impeccable/bundle/blobs/a569989e6a3d6453b4c45e9474e162a15cc54e11732ac6baa7990a6e7cccc0b5 +21 -0
- package/vendor/impeccable/bundle/blobs/a75b892696469e3ccd2af33c9eef793e635efc3c5ac45336b0c1373d90c856b0 +63 -0
- package/vendor/impeccable/bundle/blobs/{3ba92d4aa840ec1b6c2fda224339489d6dd65eedf43bb45836af02584d1faa88 → a7e8e60df83c6f47590467094ab2a13f1fe28ce45959a4e69dd89575a4208646} +5 -0
- package/vendor/impeccable/bundle/blobs/{e49d2b0110c55751da3c965b4ae4d294aa676c961a09f8efbbbf22c1ec7c4fa0 → a892e337eee548d53252abb72ba5aa85cbcf556ffd8dc74e05534652c010d574} +1 -1
- package/vendor/impeccable/bundle/blobs/{8f0867db7c6f6a54348a0d951f198a1bd852cd12505d821e6e1ac6bd42e7fcea → a93397adc906e245c69b42d4b25931fc92dc75baa60ca9a3749ba23b52ba01a0} +3 -2
- package/vendor/impeccable/bundle/blobs/{424b2e75cb204e2dca7db4a40dfe5a81f78dc0fc58ac4790e8b7bbf2f330bba4 → a9e63b2df611805e845e0bb1cca1a0c27e83640a78185c9fd9de90d53a539cdc} +5 -0
- package/vendor/impeccable/bundle/blobs/ab80e6a971baa66342548a846ce3fb69824ef9ef4e0f26c6f02685f225d00bbd +26 -0
- package/vendor/impeccable/bundle/blobs/af35b5fb6e45acb6483a5fbb864c3eaa9c57bacc43857f48183c836041c670ae +101 -0
- package/vendor/impeccable/bundle/blobs/af5842c4844b692b817319d5375611d4211dc7f459fb12da358baefc3a6cd373 +63 -0
- package/vendor/impeccable/bundle/blobs/b2732083f8f1d1924d38f84f179491430aebda8e0fd1f1d0785e3f883bcf3a40 +63 -0
- package/vendor/impeccable/bundle/blobs/b3b1d5a4c80ce279d88896601deee9ccfeacdae0d0cd433600985a5f7ac93c72 +26 -0
- package/vendor/impeccable/bundle/blobs/{fd5579dbae1fc2495b7dddde48df9673acebd27953bbb56d506d3b470375c9e9 → b4be5499f404a926cdd2c55d8fb7409ba74a56b3d0c7d865594cc0254d3e499a} +5 -0
- package/vendor/impeccable/bundle/blobs/{2fd096823e4a93f19edd421a69e10f90ebb630a014c673d1802a927c6f47b7d2 → b626e0677288a1660e9ce80c4f0454b527010239681f6b8dcc0f36b4a4d6bcb2} +3 -1
- package/vendor/impeccable/bundle/blobs/{33b6b32c0c3c0c4a2b22bd2275176b1c88a006dd94592a854f629911a0b21cdc → b719be9c5d4ced5d649ec6c0c90630196e7ee513d0da482aef13c705fdc23ab6} +3 -1
- package/vendor/impeccable/bundle/blobs/{df0eb9e9a484fc7b8a0f3e50573a7d7f81e0f17598ac30d9f3fe5a6c6aa5fefa → b8938fea3399aa639b4c873248035c219658069eef7be62672254e2f72c056f4} +5 -0
- package/vendor/impeccable/bundle/blobs/{ee0a15fcfc244b76b896a2650a17b35e444d4311166b69a3cfa32d11f8f44851 → ba0d96d88ab40fad1cb522e60b11affc568cfe9d340110ac5e71f834ac3d0f4a} +12 -0
- package/vendor/impeccable/bundle/blobs/{426c7f5437dd3c23a4cfaef6964dc7f1e038480f92238499b85f3ce7e4472bf4 → bc48bca63dff44e1f0205bafb64e16b2d6fb294ace405dbc9ae06a3bc6107154} +3 -1
- package/vendor/impeccable/bundle/blobs/{c3ad2a5fa570876af6645c48d246c664859e19f253d2dc9e0ead34e785d5b40a → bdd676c8f29295addfdbceaab285bb1184ec3ef7ff60501908b97ea8269580c4} +3 -2
- package/vendor/impeccable/bundle/blobs/{38d4d404030c6ea935d3223db1eeb22c45d04a94f41f98e02a43cdc5af7ff2e3 → c06effcdc60859157208d3b7ee23d56160f2386f6a2dfa2514ba82fe21828ae0} +1 -1
- package/vendor/impeccable/bundle/blobs/c100b67a4ae248ad564182b181acb1ee2fe64c00049aeef62d4e7a3213726f37 +26 -0
- package/vendor/impeccable/bundle/blobs/c2dfc965319745c403b99e00e9e97de15f1300ea721bd3f708f0ac47aadc537b +101 -0
- package/vendor/impeccable/bundle/blobs/{e9da72a13eb3411d6bbb316953022f62abc4434f505e5345907b216eda9f793b → c6b3bc811eb23d90ff9add1e0e5b40999a0bbbab364f5e6d08061f36d30429a5} +1 -1
- package/vendor/impeccable/bundle/blobs/{82a5e564563333aabb7ab4d2f8c26c785dfe2c2416ac6e9f30cba31440676194 → cdf8a88b9865599c58fe285041d2d46eea7d9bd2d4075d82de358191742b20ad} +5 -5
- package/vendor/impeccable/bundle/blobs/cf3d3a296890ac1ee363fee930f252e20d0935cd575367ad017b3cdc2dc5a50d +26 -0
- package/vendor/impeccable/bundle/blobs/{a1e4febca3455787d7c753fe177a150dccde6e742957de400b0307247802d200 → d2e16da9bb6b33c931378d1bf57dcfff5dc426a71434bc352cec6aece715a66f} +18 -11
- package/vendor/impeccable/bundle/blobs/{c36f6aac0ddf52eabbb21df09fd3310540dca6b09e7a4017d18e94c06c469405 → d4a9e18a879bbb92aa0a56e16b45481090dffa4470efdecf52fb0da8c900be5d} +5 -5
- package/vendor/impeccable/bundle/blobs/{869fa5390b84bfd00d072f5280a9002ea3e3936edf5985241be641a87f03ff7b → d57c3e0453f601ad688911fca4471057c7b46b561fcd42a1e12a581101c5186c} +1 -1
- package/vendor/impeccable/bundle/blobs/{910461b1c1f8216155165955c860a884a1e2f557cb38f21ef512ea90ef6503c2 → d5f83912eda93d42f93522bb74aeff0ea04d9c559577ec52fcccc130dd03166d} +2 -1
- package/vendor/impeccable/bundle/blobs/{9deb14303b421b5a9232755b5b9f317716f33e1e211557a98a00a9c409775c4d → d6489d7f3e607ce3f8514a7a7d3a0eb5e8f1ac55859eaf7d5c31b53de8fab9f3} +18 -11
- package/vendor/impeccable/bundle/blobs/{37080ea5e5b381adb7eae7a427231b0ad0dee0f0916fc1d6b673b7101a5b425b → d6a51f4df6d76f16b95ab81268a689f4c5936d505c5bb25c80ad7423f927bbc6} +5 -0
- package/vendor/impeccable/bundle/blobs/{61c72fdde649bf7f2e0668e48f9d222666c81672100b5f2265940e7aa13c8767 → d7b99a57652cb8741d57a15ba7e06de4707fac02a97e5e001179da007272f2b8} +3 -1
- package/vendor/impeccable/bundle/blobs/{57402ef6fd9d0745f8c60d778f77da83a8b16edf751fa1013598a0f6e5f0f541 → d9963fd73bf6129fe0c8ec25c5148f50617ec85683b8eeae7e411c9a42e2db33} +2 -1
- package/vendor/impeccable/bundle/blobs/{581409ace104a81744b7d08f5398a2c207cf76d9e50751f807b4382eaf66454f → da3b2399814db89d67959268c646601957d3e8c641b09a5bdbce84217c1c2cfe} +5 -5
- package/vendor/impeccable/bundle/blobs/{249f0437a52ab3eb4bc4d4a9f38e085334c0fbb7795e88dd419e32b5f58c924d → dc3aeccbea3e997704ce8b170f56b0eaf343a14ad4fedb22a6dbee0f205aa37f} +5 -0
- package/vendor/impeccable/bundle/blobs/{433a79eee3ce4c99e79a7aebe3a6d8ec9ff70216772e0c2ff9dce3a01d672963 → dcc1572e739cdabcbf084f276b447cb686aa18459896e6d8fe29f4d7d807bd1d} +5 -5
- package/vendor/impeccable/bundle/blobs/{2d7086992c07df1fc734cdf9c420c4bd8ad409ab7909e07c8b486c303d420732 → dd66761b291c7dbca6e9efd22023e38f8c53ad310f3a6cdab5dc7ecd7ae8f31f} +3 -2
- package/vendor/impeccable/bundle/blobs/dd953992625c240fd1842aaf533a865aabd09487cbc16fa01fe8bb4b4365b843 +101 -0
- package/vendor/impeccable/bundle/blobs/{df4f14df1daaad1606b682995f649da19a85debf264092447b3b7ddb8b4bc1ce → de70398719140e4951aa111e9625de5ed916ad1ef0877e4ab6f6b4a7e3cc5f8f} +18 -11
- package/vendor/impeccable/bundle/blobs/{8b23562ccc3e41609ce6e67fdad6cc57b6c961964c329eff6975a1b4c5471c0d → deaaa533475b6a9f7dd52e01a1f1997aa3af146694334981650f8c846f939559} +3 -1
- package/vendor/impeccable/bundle/blobs/{041535231366047a0beeb5daa64ea9c23d5a566580f7dafdb8c0623cb4a7e76b → e07176229b8a330970ca3c9c5e3dd68c2aaeb726285e30f471e91053d7f8e798} +1 -1
- package/vendor/impeccable/bundle/blobs/{115e1c3f1b58b5129910ed925dbf65d61d5ac4c2036618847555ce40098aae97 → e1075ea5b34ac9c60f7c5bda97356eeaf1b683b599592d324fd3704f0852ad7a} +18 -11
- package/vendor/impeccable/bundle/blobs/e3af212117e0c552b0976687200fe8f95846a01725a482e8e4dbfd75e40dbfa6 +26 -0
- package/vendor/impeccable/bundle/blobs/e3c2031978cd670d7150ff3140f12cf8b6882ef638ea9a9985caffa9a80c8713 +63 -0
- package/vendor/impeccable/bundle/blobs/e6e18e7c23cfe82961d90b9714cb466c20bd83f222ac63e9339b6b2c304e1787 +26 -0
- package/vendor/impeccable/bundle/blobs/e7af7ad18b307a3171fcf49421df2a557f93289d27af2430f10ee74e2a2fc2d3 +101 -0
- package/vendor/impeccable/bundle/blobs/{b161198874e4e77599bc31691e78790be14bacc2eb03be168c8a7543ece9fbe1 → e85da3098368807689009184eca2bb09a91bdb6cb1be3e7a61f91f1ae31cd69b} +18 -11
- package/vendor/impeccable/bundle/blobs/{6bdbc3f745ceee15e10b050f109ce42bbeb53ab3c3b5239257de1d596654dee7 → e8720f3aa41135211cc58cc299a39eeda86c75651f4279cc1ede8db10dcc0584} +4 -0
- package/vendor/impeccable/bundle/blobs/e9861052457cc1ddc42c687bb8c33a877834ced94fed74af2a4f00f6bae50795 +101 -0
- package/vendor/impeccable/bundle/blobs/{d1faa55eb956033d28e9f27fd2bc2a9f62c5da0f0abd6534819cc0a04db54d9d → eb3e86876c20f1cfc443dcbe48d8f41fea6e815082a304610be432272429a06d} +5 -0
- package/vendor/impeccable/bundle/blobs/{0e1819750e5448311a051d35ab6d0be0830418f78ca872ef10469fafebb27d4f → eba472f6190541c28e2e647ed019f43564ba5b92d629963f34c899175b25b31e} +5 -5
- package/vendor/impeccable/bundle/blobs/{f173ff03f989f162cee815feb2d8ca72daf00019c48694d89db16d52171a79c0 → eba609589a5a051643a7bae60b7cceef7cfe44d0f8bd9229e61473ac75910fb3} +1 -1
- package/vendor/impeccable/bundle/blobs/{8eb466778023fccea641654d662157b123eeb360f4a0875bf6fbe3d93680851c → ec81b008d2641402e3352b09b1a90562ef7a24598d7c5aded475038cce63aca0} +1 -1
- package/vendor/impeccable/bundle/blobs/{4acfb9e38f6e09f7484e36fc19704d69eab159436ee9329168be74c493042f22 → ec86b8633fbeb14ef2272f220fdd98089972b03b99da83e49eeb6a8b73b00617} +3 -1
- package/vendor/impeccable/bundle/blobs/{d15a2914d93e07a4956acd5c8b8211af17380f527acd10d8acf4f4920badaaaf → ef2e97cd690baf6fe5c895dd2d8844aff9fcc4a8bc04973402678a739c81d712} +4 -3
- package/vendor/impeccable/bundle/blobs/f0fbe529f63961a027bada2e6a3cbe86f4af0dba4b8e1010da22b007f9002f66 +63 -0
- package/vendor/impeccable/bundle/blobs/{c02feba25a961a72647ad317aba2d65baeeed53c4cdcc072f25bb37f4d867d43 → f254d59ff973e907cacdc2c34b8b4de075437d292de31dac30e10a9d7035086c} +3 -2
- package/vendor/impeccable/bundle/blobs/f5efb1b1dd4cd18e1d4789d7c8e0188f4342b25fffd53af6088ba8b67774fb99 +26 -0
- package/vendor/impeccable/bundle/blobs/{7af0a8665057c83b39bca2c8c7427ef2343734f70d4128c377113a6726a1e3b1 → f68a3d68ac92606e91aa8878e003d9432ddd09aa97ca01c6b3ce46c937dca316} +524 -4
- package/vendor/impeccable/bundle/blobs/{381ff89aa76e82a0d98456ec31cb117555ae045539fba47c45056daa50f611ca → f84b653ede0804d21e6210c6d21fd5352023914fedceae6ff14e20f1e93b06e7} +5 -5
- package/vendor/impeccable/bundle/blobs/{5b30a06646ad5e453d6b5ed1b8d446f69fca3cd13b8aeda28f0d0b2cbe8f62d1 → fb32d99751c5fc24493ff4460be1767bd5236dc820fd337775067c0620d1a7a6} +3 -1
- package/vendor/impeccable/bundle/blobs/{733504a70ed20bcfca9c26c353f7b88f8491d24f3f2fe124dc1e73b28eefa296 → fb5fec24adafa48df43eece6907c1c986a4772cbdc64142c881f00c3b312e9ca} +18 -11
- package/vendor/impeccable/bundle/blobs/fc149b5bc7a8d0cc9b9bf86e5013793f3857c1c302212e9aaf101cb95427386b +101 -0
- package/vendor/impeccable/bundle/manifest.json +413 -298
- package/skills/grafton-view-dev/SKILL.md +0 -195
- package/skills/grafton-view-dev/references/bindings.md +0 -120
- package/skills/grafton-view-dev/references/components.md +0 -168
- package/skills/grafton-view-dev/references/recipes.md +0 -208
- package/skills/grafton-view-dev/references/schema.md +0 -86
- package/skills/grafton-view-dev/references/stores.md +0 -310
- package/skills/portal-backend-app/SKILL.md +0 -56
- package/skills/portal-backend-app/references/gate-and-tokens.md +0 -93
- package/skills/portal-backend-app/references/wiring-and-conventions.md +0 -71
- package/skills/xgent-init/references/external-app-CLAUDE.template.md +0 -249
- package/vendor/impeccable/bundle/blobs/800cf1c0392b24de7c0a1c6ea6778ecb433dec71c49a150bce96a98477527b2f +0 -1
|
@@ -1,93 +0,0 @@
|
|
|
1
|
-
# 自省、四道闸与服务账号(资源服务器契约)
|
|
2
|
-
|
|
3
|
-
> 提炼自门户仓库 `docs/SSO与App开发指引.md` §7/§9/§12(2026-08),响应形状对照 `apps/api/src/modules/token/index.ts` 实现核实。冲突时以门户仓库为准。
|
|
4
|
-
|
|
5
|
-
## 1. 令牌自省(introspection)
|
|
6
|
-
|
|
7
|
-
你的服务**不验 JWT 签名**(HS256 密钥只在 Portal),把 bearer TDT 发给自省端点换已解析声明:
|
|
8
|
-
|
|
9
|
-
```
|
|
10
|
-
POST {PORTAL}/api/tokens/introspect
|
|
11
|
-
Authorization: Basic base64(<saClientId>:<saSecret>) # 服务账号凭证
|
|
12
|
-
body: { "token": "<待验证的 TDT>" }
|
|
13
|
-
→ 200 { "ok": true, "data": {
|
|
14
|
-
"active": true, "kind": "user"|"service",
|
|
15
|
-
"aud": "<安装态 appKey>", "listingKey": "<稳定身份>", "azp": "<代表行事的来源App>"|null,
|
|
16
|
-
"tenant_id": "...", "user_id": "..."|null, "scopes": [...], "role": "admin"|"user"|null,
|
|
17
|
-
"isPlatformAdmin": true,
|
|
18
|
-
"bypass": false, "groups": [...]|null, "permissions": [{ "pid", "scope" }]|null,
|
|
19
|
-
"aclStamp": "..."|null, "exp": 1730003600
|
|
20
|
-
} }
|
|
21
|
-
```
|
|
22
|
-
|
|
23
|
-
硬规则:
|
|
24
|
-
- **信封解包**:声明在 `data` 里,必须 `claims = body.data ?? body`。裸读顶层 `active` 会把一切有效 TDT 误判 401(真实事故)。
|
|
25
|
-
- 无效/已撤销 TDT 也是**成功**的自省,只是 `active:false`——不要当传输错误。
|
|
26
|
-
- `active:true` 始终返回布尔 `isPlatformAdmin`:Portal 每次自省都按 `user_id` 实时检查其是否为**平台租户的 active admin**,与当前 `tenant_id` / `role` / `bypass` 独立;服务态恒为 `false`。该字段是**自省派生信息,不在 TDT JWT claims 里**。
|
|
27
|
-
- 结果缓存到 `exp` 前(上限 60s);因此吊销和平台管理员身份变更可能有秒级延迟。
|
|
28
|
-
- dev 通道 `x-resource-key` 仅 `DEV_MOCK_OAUTH=true` 时生效且只认门户侧 `FILES_RESOURCE_KEY` 一把;生产一律拒绝,必须走 Basic。
|
|
29
|
-
|
|
30
|
-
## 2. 四道闸(每个受保护端点)
|
|
31
|
-
|
|
32
|
-
1. **身份**:`(claims.listingKey ?? claims.aud) === 你的 listingKey`。按 **listingKey**(稳定身份)鉴权而非裸 aud——aud 是安装态 appKey。不匹配 → 401 `INVALID_TOKEN`。
|
|
33
|
-
2. **scope**:所需 scope ∈ `claims.scopes` → 否则 403 `INSUFFICIENT_SCOPE`。
|
|
34
|
-
3. **结构性管理操作**:`claims.role === "admin"`(角色来自 Portal 成员关系,非 TDT claim)→ 否则 403。
|
|
35
|
-
4. **细粒度 ACL**:`claims.bypass || permissions 命中目标 PID`;数据范围取命中授予里**最宽**的(`own`<`team`<`all`)做行级过滤 → 否则 403 `INSUFFICIENT_PERMISSION`。
|
|
36
|
-
|
|
37
|
-
外加两条恒规则:**租户隔离**一律按 `claims.tenant_id` 收口(永不信任请求体);**限流**自建 `(aud, tenant)` 每分钟固定窗口。
|
|
38
|
-
|
|
39
|
-
**平台级跨租户端点另加一道全局闸**:只认服务端自省的 `claims.isPlatformAdmin === true`。不能用 `role === "admin"` / `bypass` 代替(它们只表示 TDT 当前租户),也不能靠 `tenant_id === PLATFORM_TENANT_ID` 推导(平台管理员切到普通租户后仍有全局身份)。拒绝浏览器转发的 Cookie、`X-Is-Platform-Admin` 或 body 字段。
|
|
40
|
-
|
|
41
|
-
`can(claims, pid)` 实现:`bypass || permissions.some(p => pidMatches(p.pid, pid))`;PID 通配 `app:*` ⊃ `app:page:*` ⊃ `app:page:x.*` ⊃ 精确。批量检查可用 `POST /api/v1/acl/check { token, pids[] }`(同服务账号鉴权)。
|
|
42
|
-
|
|
43
|
-
## 3. 服务态令牌的授权姿势
|
|
44
|
-
|
|
45
|
-
`kind:"service"`(client_credentials 签发)**无 `user_id`、整体绕过用户 ACL**:自省返回 `permissions` 空、`bypass=false`、`isPlatformAdmin=false`。对服务态调用**只按 scope 授权**,勿走 PID 门;涉及"用户拥有"的写操作应拒绝服务态。
|
|
46
|
-
|
|
47
|
-
三种令牌来路对照:
|
|
48
|
-
|
|
49
|
-
| 来路 | kind | user_id | 授权依据 |
|
|
50
|
-
| --- | --- | --- | --- |
|
|
51
|
-
| 自己前端(宿主注入 / callService) | user | 有 | scope + PID/ACL |
|
|
52
|
-
| 其他 App 令牌交换 | user | 有 | 同上;scope 是交集;`azp`=发起方(出处归因) |
|
|
53
|
-
| 服务账号 client_credentials | service | 无 | 只按 scope |
|
|
54
|
-
|
|
55
|
-
## 4. 服务账号(M2M)
|
|
56
|
-
|
|
57
|
-
平台管理员在控制台创建(`/api/console/service-accounts`),`clientId:secret` 走 HTTP Basic。能力:
|
|
58
|
-
|
|
59
|
-
| capability | 含义 |
|
|
60
|
-
| --- | --- |
|
|
61
|
-
| `token.introspect` | 可调自省/批量检查——独立后端必需 |
|
|
62
|
-
| `client_credentials` | 可自助签发服务态 TDT(受租户策略约束) |
|
|
63
|
-
|
|
64
|
-
租户访问策略(针对 client_credentials):`tenantAccess="all"`(任意租户,高风险)或 `"allowlist"`(仅名单内,否则 `TENANT_NOT_ALLOWED`)。新增该能力必须显式选策略,否则 `VALIDATION_FAILED`。
|
|
65
|
-
|
|
66
|
-
签发服务态 TDT:
|
|
67
|
-
|
|
68
|
-
```
|
|
69
|
-
POST /api/tokens/service
|
|
70
|
-
Authorization: Basic base64(<clientId>:<secret>)
|
|
71
|
-
body: { "grant_type": "client_credentials", "tenant_id": "...", "scope?": "a b c" }
|
|
72
|
-
→ 200 { access_token, token_type:"Bearer", expires_in, scope }
|
|
73
|
-
```
|
|
74
|
-
|
|
75
|
-
签发 scope = 请求 ∩ 服务账号 scopes(绝不扩张,SA 未授权时**不报错只返空 scope**——调用方必须检查返回的 scope 再用)。
|
|
76
|
-
|
|
77
|
-
## 5. 宿主代理与管理直连
|
|
78
|
-
|
|
79
|
-
- `sdk.callService` 只是转发便利层:你的后端仍必须完整四道闸,不要只因请求来自 Portal web 源就信任。
|
|
80
|
-
- **管理控制面直连**(应用配置 tab 用):门户为管理员铸短时 admin-TDT(`GET /api/admin/apps/:appKey/<svc>-token`,assertAdmin + signTdt,aud=appKey、按需 scope、600s),浏览器直连你的后端读写配置,Portal 不经手敏感配置。参照 files-token / llm-gateway-token。
|
|
81
|
-
|
|
82
|
-
## 6. TDT 撤销(四把钥匙)
|
|
83
|
-
|
|
84
|
-
网关每次校验比对四个版本维度,任一 bump 旧令牌立即失效:
|
|
85
|
-
|
|
86
|
-
| 维度 | 触发 | 影响面 |
|
|
87
|
-
| --- | --- | --- |
|
|
88
|
-
| jti 黑名单 | `POST /oauth/revoke` | 单个 TDT |
|
|
89
|
-
| app version | 应用停用/卸载、Secret 轮换/吊销 | 该应用全部 TDT |
|
|
90
|
-
| user version | 管理员停用/移除用户 | 该用户全部应用 TDT |
|
|
91
|
-
| (user,app) version | 用户撤销该应用授权 | 该用户对该应用的 TDT |
|
|
92
|
-
|
|
93
|
-
你的自省缓存 ≤60s,所以吊销传导有秒级延迟——安全敏感操作可缩短缓存或直查。
|
|
@@ -1,71 +0,0 @@
|
|
|
1
|
-
# 注册布线、部署接线与平台规范(monorepo 后端 App)
|
|
2
|
-
|
|
3
|
-
> 提炼自门户仓库 `docs/SSO与App开发指引.md` §3/§4/§7.5/附录 A、`docs/用量统计服务接入指引.md`、CLAUDE.md 及历史事故(2026-07)。冲突时以门户仓库为准。
|
|
4
|
-
|
|
5
|
-
## 1. 注册链(单一事实源在代码)
|
|
6
|
-
|
|
7
|
-
```
|
|
8
|
-
①代码注册表 ②市场清单 ③安装快照 ④运行时
|
|
9
|
-
acl/manifests.ts + LISTING_DEFS ─seed─► marketplace_listings ─install─► apps 行 ─► SDK init.acl / introspection
|
|
10
|
-
```
|
|
11
|
-
|
|
12
|
-
| 声明什么 | 写在哪 |
|
|
13
|
-
| --- | --- |
|
|
14
|
-
| ACL Manifest | `apps/api/src/modules/acl/manifests.ts`(按 listingKey 集中定义) |
|
|
15
|
-
| listing(scopes/navItems/exchangeTargets/serviceBaseUrl/依赖…) | `apps/api/src/db/provisioning.ts` 的 `LISTING_DEFS` |
|
|
16
|
-
| 服务账号 | 同文件 `SA_DEFS`;约定 `clientId = <key>-server`,capability `token.introspect` |
|
|
17
|
-
| 跨应用交换 | 同文件 `EXCHANGE_WIRING`(`{ 发起方: [目标...] }`) |
|
|
18
|
-
| 内容类型(如用内容服务) | `apps/api/src/modules/content/schemas.ts`,owner=listingKey |
|
|
19
|
-
|
|
20
|
-
升级 Manifest = 改 `manifests.ts` 的 version+内容 → 重新 seed/发布清单 → 租户同步更新。`db:seed` 是 portal-only + **破坏性**(重生成 UUID、会话失效);App 自己的种子写成独立**非破坏性**脚本。
|
|
21
|
-
|
|
22
|
-
**scope 命名空间**(写时校验 `market/service.ts::validateScopes`):一条清单只能声明 平台基础 scope ∪ 自己命名空间(`<listingKey>.` 前缀,连字符 key 接受下划线变体如 `llm_gateway.*`)∪ 已声明 `exchangeTargets` 的目标命名空间。App 命名空间 scope 随清单入库,**无需**改 `packages/shared/src/scopes.ts`;配 `scopeLabels` 三语文案。
|
|
23
|
-
|
|
24
|
-
平台基础 scope 速查:`userinfo.read`、`directory.read`(+`directory.email.read` 含邮箱)、`notification.send`(+`.others` 跨用户)、`inbox.read`、`settings.read/write`、`widget.write`、`audit.write`、`scheduler.read/write`、`content.read/write`。
|
|
25
|
-
|
|
26
|
-
## 2. 部署接线 checklist(新建 App 漏一项生产就出事)
|
|
27
|
-
|
|
28
|
-
| 接线 | 位置 | 漏掉的症状 |
|
|
29
|
-
| --- | --- | --- |
|
|
30
|
-
| `/svc/<key>` 白名单 | `deploy/caddy/Caddyfile` | 生产 404(网关白名单 map 收口,未注册=路由不可达) |
|
|
31
|
-
| **Caddy 全局配置两条不可逆** | 两份 Caddyfile 的 `admin localhost:2019` 不许改回 `admin off`;`ProcessDriver.reloadRouting` 必须是 `systemctl reload`(不是 `restart`),且与 `deploy.sh` 的 sudoers 授权**逐字一致** | 关 admin ⇒ 三个 flavor 的热重载全部**静默**失效(只剩一行 warn);改回 restart ⇒ 请求处理器拆掉自己正在应答的那条连接,调用方在数据已落库之后拿到 GOAWAY + 无响应体(2026-08-19 事故)。门是 `verify-caddy-dynamic` |
|
|
32
|
-
| compose profile | `deploy/docker-compose.yml` 加 `app-<key>`(同 runtime 镜像 + `command: bun --filter @xgent/<key>-server`) | 容器起不来 |
|
|
33
|
-
| 按需部署注册表 | `apps/api/src/modules/deploy/registry.ts` 的 `DEPLOYABLE_APP_SERVICES` | 生产卡「服务正在部署」门 |
|
|
34
|
-
| **Dockerfile COPY 新 workspace** | 根 `Dockerfile` | 本地全绿、镜像构建才炸(真实事故) |
|
|
35
|
-
| 前端构建 | `build:apps` 保持**串行**(并行 OOM) | CI/构建机 OOM |
|
|
36
|
-
| dev:all | 根 `package.json` concurrently 挂 server+app | 本地起不齐 |
|
|
37
|
-
|
|
38
|
-
容器/生产统一监听 8080(本地 dev 各用自己的 4xxx);反代通用规则 `/svc/<key>/* → <key>-server:8080`。宿主运行时按 listing `serviceBaseUrl` 解析服务地址(无烘焙注册表),新增后端无需重建门户前端。
|
|
39
|
-
|
|
40
|
-
## 3. API 与数据规范(评审必查)
|
|
41
|
-
|
|
42
|
-
- **HTTP 状态码只反映传输/路由层**:业务成功/失败一律 `200 + {ok, data|error}`;不用 201/204;数据不存在 = `200 + data:null` 不是 404;4xx/5xx 只留参数结构错/未登录/未授权/真故障。
|
|
43
|
-
- **列表服务端分页**:复用 `Page<T>` 契约与现有 helpers(所有 admin/console 列表页同款)。
|
|
44
|
-
- **字典表**(租户级可维护枚举/分类):排序列固定 `sort integer NOT NULL DEFAULT 0`,查询 `orderBy(asc(sort), asc(name))`,创建 `sort: body.sort ?? 0`、更新 `if (body.sort !== undefined)`。**例外**:树/兄弟次序(章节树、子母题)保留 `seq`,语义是序号不是字典排序。
|
|
45
|
-
- **迁移手写**:`drizzle-kit generate` 在本仓已知损坏——迁移 SQL 手写进 server 的 migrations 目录。
|
|
46
|
-
- **审计**:不自建审计表/页,`POST /api/v1/audit`(scope `audit.write`,用当次用户 TDT),best-effort 不阻断业务。
|
|
47
|
-
- **不做「同步通讯录」**:成员一律 `@xgent/portal-ui` 的 `UserPicker` curated 按需挑选。
|
|
48
|
-
|
|
49
|
-
## 4. 用量上报(如需计量/计费)
|
|
50
|
-
|
|
51
|
-
心智模型:**日桶(UTC 日切)+ 桶内绝对值幂等覆写**。上报的是整桶重算的绝对值不是增量(重试/补报天然幂等);唯一键 `(tenantId, metricKey, day, dimsKey)`。
|
|
52
|
-
|
|
53
|
-
1. **登记指标**:`packages/shared/src/usage.ts` 的 `USAGE_METRICS`(key 前缀必须=你的 listingKey;kind 选对:counter=流量求和 / gauge=水位取峰值,选错聚合口径灾难;dims 白名单防高基数——别放 userId/requestId)。这是**仓内 App** 的路径;manifest 注册的外部 App 改在自己 manifest 的 `usageMetrics` 里声明(治理档,见 portal-external-app skill),运行时注册表 = 内置 ∪ listing 声明。
|
|
54
|
-
2. **服务账号三件套**:capabilities += `client_credentials`、scopes += `usage.report`、`ownerAppKey` = listingKey(`SA_DEFS` 加 `usageReporter: { ownerAppKey }`,`ensureServiceAccount` 幂等补齐)。`metricKey` 前缀必须等于令牌 `azp`——别的 SA 报你的指标整批拒收。
|
|
55
|
-
3. **上报**:按租户铸服务态令牌(**检查返回 scope 含 `usage.report`**——SA 未授权时不报错只返空 scope,应视为可重试失败;`APP_NOT_INSTALLED`/`APP_DISABLED`/`TENANT_NOT_ALLOWED` 才是该租户永久跳过)→ `POST /api/v1/usage/report { records:[{tenantId, metricKey, day, dims?, value}] }`,单批 ≤500、all-or-nothing、`rejected` 非空响亮 log。
|
|
56
|
-
4. 参考实现:counter+水位线 `apps/llm-gateway-server/src/lib/usage-report.ts`;gauge+快照 files。
|
|
57
|
-
|
|
58
|
-
## 5. 应用配置 tab(租户级配置三件套)
|
|
59
|
-
|
|
60
|
-
不在微应用里自建「设置」页;配置收口平台应用配置页:
|
|
61
|
-
|
|
62
|
-
1. server 暴露 `GET/PUT /api/v1/settings`(四道闸,写操作落 ACL action);
|
|
63
|
-
2. `apps/api/src/modules/apps/index.ts` 加 `GET /api/admin/apps/:appKey/<key>-token`(assertAdmin,signTdt 铸 aud=appKey、按需 scope 的 600s admin-TDT,无 consent 门);
|
|
64
|
-
3. `apps/web/src/lib/<key>-config-api.ts` + `AppForm.tsx` 按 `form.scopes.includes("<key>.…")` 条件挂 Section(参照 `showStorage`/`showGateway`),浏览器直连你的后端。
|
|
65
|
-
|
|
66
|
-
## 6. 本地 dev 要点
|
|
67
|
-
|
|
68
|
-
- 一把起齐 `bun run dev:all`;绝不叠跑单个 dev 脚本(Vite 端口自增会抢相邻 App 端口,iframe 加载错应用)。重起先清干净旧监听。
|
|
69
|
-
- 非生产下部署门自动视作 ready,本地不会卡「服务正在部署」。
|
|
70
|
-
- 种子账号均 `@xgent.ai`:`rockie`(晨光 admin + 平台管理员)、`liming`(晨光 user/星网 admin,**无 2FA,脚本登录用它**)、`chenjing`(admin,开了 2FA)。
|
|
71
|
-
- 验证脚本放 `apps/<key>-server/scripts/verify-*.ts` 并挂进 `apps/api/scripts/verify-all.ts`;交付标准 = 本服务 verify 全绿 + `bun run verify:all` 不回归。
|
|
@@ -1,249 +0,0 @@
|
|
|
1
|
-
# CLAUDE.md
|
|
2
|
-
|
|
3
|
-
行为准则,用来减少常见的 LLM 编码错误。与项目自身的规范合并使用。
|
|
4
|
-
|
|
5
|
-
**取舍**:这些准则偏向审慎而非速度。琐碎任务自行判断。
|
|
6
|
-
|
|
7
|
-
## 1. Think Before Coding
|
|
8
|
-
|
|
9
|
-
**不要假设。不要藏起困惑。把取舍摆出来。**
|
|
10
|
-
|
|
11
|
-
动手之前:
|
|
12
|
-
- 明确说出你的假设。不确定就问。
|
|
13
|
-
- 有多种解释时全部列出来——不要默默选一个。
|
|
14
|
-
- 有更简单的做法就说出来。该反驳时反驳。
|
|
15
|
-
- 有不清楚的地方就停下。指出困惑在哪。问。
|
|
16
|
-
|
|
17
|
-
## 2. Simplicity First
|
|
18
|
-
|
|
19
|
-
**用最少的代码解决问题。不做预留。**
|
|
20
|
-
|
|
21
|
-
- 不做没被要求的功能。
|
|
22
|
-
- 不为一次性代码造抽象。
|
|
23
|
-
- 不加没被要求的「灵活性」「可配置性」。
|
|
24
|
-
- 不为不可能发生的场景写错误处理。
|
|
25
|
-
- 写了 200 行而它可以是 50 行,就重写。
|
|
26
|
-
|
|
27
|
-
自问:「资深工程师会不会觉得这写复杂了?」会,就简化。
|
|
28
|
-
|
|
29
|
-
## 3. Surgical Changes
|
|
30
|
-
|
|
31
|
-
**只碰必须碰的。只清理自己造成的混乱。**
|
|
32
|
-
|
|
33
|
-
改既有代码时:
|
|
34
|
-
- 不「顺手改进」相邻代码、注释、格式。
|
|
35
|
-
- 不重构没坏的东西。
|
|
36
|
-
- 匹配既有风格,哪怕你会用别的写法。
|
|
37
|
-
- 发现无关的死代码就说出来——不要删。
|
|
38
|
-
|
|
39
|
-
自己的改动造成孤儿时:
|
|
40
|
-
- 删掉**因你的改动**而不再被使用的 import / 变量 / 函数。
|
|
41
|
-
- 不删既有的死代码,除非被要求。
|
|
42
|
-
|
|
43
|
-
检验标准:每一行改动都能直接追溯到用户的诉求。
|
|
44
|
-
|
|
45
|
-
## 4. Goal-Driven Execution
|
|
46
|
-
|
|
47
|
-
**定义成功标准。循环到可验证为止。**
|
|
48
|
-
|
|
49
|
-
把任务转成可验证的目标:
|
|
50
|
-
- 「加校验」→「为非法输入写测试,然后让它们通过」
|
|
51
|
-
- 「修 bug」→「写一个能复现它的测试,然后让它通过」
|
|
52
|
-
- 「重构 X」→「保证重构前后测试都过」
|
|
53
|
-
|
|
54
|
-
多步任务先说一句计划:
|
|
55
|
-
```
|
|
56
|
-
1. [步骤] → 验证:[检查点]
|
|
57
|
-
2. [步骤] → 验证:[检查点]
|
|
58
|
-
```
|
|
59
|
-
|
|
60
|
-
## 5. Evidence & Quotation
|
|
61
|
-
|
|
62
|
-
**凡引用必见原文。没读到的不写。**
|
|
63
|
-
|
|
64
|
-
- 引用任何文件的措辞、编号、数值、状态、命令或日期前,先亲眼读到那段原文;不凭上下文推断补写,不把「大概如此」写成事实。
|
|
65
|
-
- 工具回显被截断(长文件只给首尾)时,中段是**未知**:要引用就先用 offset / grep / obs_recall 回读定位,再引。
|
|
66
|
-
- 正式产物(CR、计划、运维手册、commit message、给用户的事实陈述)里每一处「据 X 说 Y」,X(文件与段落)与 Y(内容)都要能当场指出。
|
|
67
|
-
- 发现引用与原文不符:全仓搜出同一错误的所有副本一并修正,并向负责人说明,不留两处互相矛盾的版本。
|
|
68
|
-
|
|
69
|
-
---
|
|
70
|
-
|
|
71
|
-
## Project Conventions
|
|
72
|
-
|
|
73
|
-
本仓交付的是 XGENT.ai Portal 的一个 App:`<APP_KEY>`(<APP_NAME>,`type: [micro|service]`)。代码在本仓,**清单事实源也在本仓**(`app.manifest.json`);门户仓里没有它的副本。
|
|
74
|
-
|
|
75
|
-
### 本地开发
|
|
76
|
-
|
|
77
|
-
[填:起本仓的命令、端口、依赖的基础设施容器、测试与 verify 的入口。写清「一把起齐」的那条命令,以及最容易踩的启动坑。]
|
|
78
|
-
|
|
79
|
-
- **缺服务、缺容器就停下来问,不要擅自装。** 如果遇到本地开发环境缺少依赖的服务或容器,停下来要求用户协助或确认是否安装环境依赖,不要擅自下载镜像启动新的容器。
|
|
80
|
-
|
|
81
|
-
### `key` 是四位一体的,永不改
|
|
82
|
-
|
|
83
|
-
```
|
|
84
|
-
listingKey == TDT 的 aud == 安装态 appKey == /svc/<APP_KEY> == scope 命名空间
|
|
85
|
-
```
|
|
86
|
-
|
|
87
|
-
改 key **等于换一个 App**:已安装租户、已授出的 scope、已签发的令牌、反代路由全部对不上。带连字符的 key,scope 命名空间用下划线(`<app_key>.read`),两种写法门户都认。
|
|
88
|
-
|
|
89
|
-
### 清单事实源是本仓的 `app.manifest.json`
|
|
90
|
-
|
|
91
|
-
> 字段全集、校验规则与注册路径:`portal-external-app` skill(`micro` 型的 navItems / dashboardWidgets / ACL 另见 `portal-micro-app`)。
|
|
92
|
-
|
|
93
|
-
改了清单内容就 **bump `version`**——产物与清单版本漂了没有任何机制会发现。
|
|
94
|
-
|
|
95
|
-
- **字段是安装期快照**:改清单对**已安装租户零影响**,必须显式同步(提案批准 / `register-app --prod` 都会做),而这件事**本地永远测不出来**(本地是全新安装)。
|
|
96
|
-
- **只增不减**:`scopes` / `dependencies` / `exchangeTargets` 同步到已安装租户时只做**并集**。清单里删掉一个 scope,已安装租户会永远留着它——收回已授出的权限走显式下架/迁移。
|
|
97
|
-
- **写了 `aclManifest` 必须逐租户 reconcile**(平台侧代做):那是全平台唯一把 `defaultForMember` 种进 member 角色的地方。漏了的症状是新 PID 出现在角色矩阵里却从不进 member 基线(「配了不生效」),而且**只在普通成员身上现形**,管理员看不出来。
|
|
98
|
-
- **`hostPort` / `embedUrl` / `descriptor.env` 的值不归你**(见下)。
|
|
99
|
-
- 新增 manifest 字段前先确认门户认得它:未知字段一律落治理档等人审。
|
|
100
|
-
- **展示字段只收纯字符串**(`tagline` / `desc` / `icon` / `color` / `cat` / `navItems[].label` / `dashboardWidgets[].title`):给多语对象会被拼成字面量 `"[object Object]"` 存进 text 列,然后显示在**每个租户**的应用卡片上。多语只有 `name` 收对象。
|
|
101
|
-
- 声明 `exchangeTargets`(要读别的 App 的数据)之前先过一遍 `portal-app-exchange` skill:`EXCHANGE_NOT_ALLOWED` / `EXCHANGE_CONSENT_REQUIRED` / 跨应用下拉莫名为空,三个症状都出在布线顺序而不是代码。
|
|
102
|
-
|
|
103
|
-
### 发布 = 提案,先分清自动档与治理档
|
|
104
|
-
|
|
105
|
-
> 打包、令牌、CI 写法与发布排错:`xgent-app-release` skill。别自己拼 `curl`。
|
|
106
|
-
|
|
107
|
-
`npx @xgent/release-cli publish`(或 `POST /api/market/release/<APP_KEY>` + `xrel_` 令牌)每次落成一条**发布提案**:
|
|
108
|
-
|
|
109
|
-
- **自动通过档**(当场生效):`dist` 产物 · `version` · `deployDescriptor.image` · 展示字段(name / tagline / desc / icon / color / cat / navItems / dashboardWidgets)· `helpEntry` 当它是 App 内路由时。
|
|
110
|
-
- **治理档**(进平台「发布审核」,批准前库里一字不动):**其余一切**,包括看着像文案实则是权限面的两个——`scopeLabels`(同意屏正文)与 `embedUrl`(iframe 指向),以及 scopes / aclManifest / dependencies / exchangeTargets / serviceBaseUrl / seat* / `requiredEnv` 键集合 / 部署形态。
|
|
111
|
-
- **同一 App 同时只允许一条待审提案**:待审期间任何新提交都被拒(`PROPOSAL_PENDING`,连纯 dist/version 也一样)。等审批,或先撤回。
|
|
112
|
-
- **换镜像不是同步的**:产物是同步的(publish 打印成功即在线上),镜像只排了一条重部署任务、过一会儿才换、**且可能失败**。CI 里换镜像**必须带 `--wait`**,否则会在容器换上去之前就退出码 0,把「发布成功」当成「新版本在跑」。
|
|
113
|
-
- manifest **永远不许携带密钥值**(SA secret / `descriptor.env` 有值,提交即拒)。
|
|
114
|
-
|
|
115
|
-
### 后端运行时契约(六条,逐条都有症状)
|
|
116
|
-
|
|
117
|
-
1. **验令牌**:`POST {PORTAL_INTROSPECT_URL}`,HTTP Basic = 服务账号 `clientId:secret`,body `{ token }`。
|
|
118
|
-
2. **⚠️ 解信封**:自省响应是统一信封,声明在 `data` 里 —— **`claims = body.data ?? body`**。直接读顶层的 `active` 会把**每一个有效 TDT** 都判成无效。这是外部接入最常踩的一条。
|
|
119
|
-
3. **四道闸**(自己实现,网关只是哑路由;顺序即错误面):
|
|
120
|
-
- 身份:`active === true` 且 `(claims.listingKey ?? claims.aud) === "<APP_KEY>"` 且 `tenant_id` 非空 → 否则 **401 `INVALID_TOKEN`**
|
|
121
|
-
- scope:所需 scope ∈ `claims.scopes` → 否则 **403 `INSUFFICIENT_SCOPE`**
|
|
122
|
-
- 角色:结构性管理操作看 `claims.role === "admin"` → 否则 **403 `FORBIDDEN`**
|
|
123
|
-
- ACL:细粒度操作看 `claims.bypass || claims.permissions` 命中目标 PID
|
|
124
|
-
- 跨租户的服务端判据只认自省返回的 `claims.isPlatformAdmin === true`,**不接受前端自报**。
|
|
125
|
-
4. **租户隔离**:每一条查询按 `claims.tenant_id` 收口,不信请求体里的租户字段。这是硬约束,出仓不降级。
|
|
126
|
-
5. **自省失败必须 fail-closed**:传输失败 / 非 2xx → 503,**绝不放行**。`active:false` 是一次成功的自省 → 401。
|
|
127
|
-
6. **`/health` 返 2xx 即视为健康**(健康体长什么样都行);**限流自己做**,门户不替你做。
|
|
128
|
-
|
|
129
|
-
### API:HTTP status code 只反映传输/路由层,不反映业务状态
|
|
130
|
-
|
|
131
|
-
- 404 = endpoint 不存在(路由层);「数据不存在」用 200 + 业务字段(如 `data: null`)。
|
|
132
|
-
- 业务成功统一 200,含新建/更新/删除/覆写,不用 201/204。
|
|
133
|
-
- 业务失败(校验不过 / 状态非法 / 资源冲突)也走 200 + 响应体错误结构。4xx/5xx 只留给参数不正确、未登录、未授权、真传输/服务层故障。
|
|
134
|
-
- 越租户与不存在**统一返回同一种「不存在」**,不泄露存在性。
|
|
135
|
-
|
|
136
|
-
### 端口与环境变量:键名归你,值和宿主口归平台
|
|
137
|
-
|
|
138
|
-
| 字段 | 谁定 | 说明 |
|
|
139
|
-
| --- | --- | --- |
|
|
140
|
-
| `deployDescriptor.port` | 你 | 容器内监听口,**就听 8080**。别要求门户注入 `PORT` 才肯听;一盒**根本不读**这个字段(反代按 `<APP_KEY>-server:8080` 找你),听别的口在一盒里直接 502 |
|
|
141
|
-
| `hostPort` | 平台 | 宿主机发布口。**只在首次注册当建议值**,此后清单里写什么都不生效(会回一条说明)。撞口是自动退让不是拒绝 |
|
|
142
|
-
| `extraPorts[].host` | 你声明需求、平台定值 | **撞了直接拒**(对外契约口,静默挪走等于把 worker 全断掉)。有不经门户请求路径的连接面必须显式 `"bindAddress": "0.0.0.0"`——绑成 loopback 与漏填后果完全相同:接管当天那个面直接掉,而门户侧任何检查都测不到 |
|
|
143
|
-
| `descriptor.env` 的**值** / `envFile` | 平台 | manifest 里出现任何**带值**的 `env` → **解析器直接拒收**(防生产密钥进 App 仓) |
|
|
144
|
-
| `requiredEnv` | 你 | 只交**键名**。它是一道闸:批准前门户拿它比对 `descriptor.env ∪ envFile` 的键集合,**缺任何一个就拒绝生效** |
|
|
145
|
-
|
|
146
|
-
- **改键名写成一条 `{ key, renamedFrom }`**,别写成一删一加——后者在门户眼里是两件不相干的事,值搬不过去。
|
|
147
|
-
- **新增/改名不写进 `requiredEnv`**,提案会自动通过而运维**看不到新键名**,症状是发布方以为发失败了、实际服务已换版并崩着。
|
|
148
|
-
- `PORT` 与 `<APP_KEY>_SERVER_PORT` 由控制器强制注入且覆盖 envFile,别指望在 envFile 里改这两个。
|
|
149
|
-
- **服务账号密钥永不静默轮换**:`--prod` 注册 / 提案批准时,门户没从 `<PREFIX>_SA_CLIENT_SECRET` 拿到值就**随机签发并一次性回显**(抄进平台那份 envFile 即可);已存在却给了个不一致的值 ⇒ 打印原因并**非零退出**,不会悄悄跳过——悄悄跳过的后果是自省 401 而现场看不出原因。
|
|
150
|
-
|
|
151
|
-
### 数据库迁移:打进镜像,平台在换容器前替你跑
|
|
152
|
-
|
|
153
|
-
声明 `deployDescriptor.migrateArgs`(追加在镜像 ENTRYPOINT 后面),控制器在**换容器之前**用同镜像同 env 跑一次性容器;失败则任务转红、**旧容器原封不动继续服务**。
|
|
154
|
-
|
|
155
|
-
1. 迁移文件**打进镜像**(放在仓里的脚本 = 门户拿不到,只能回到手工运维)。
|
|
156
|
-
2. **advisory lock 包住**——仍可能与旧副本或另一次并发部署撞上。
|
|
157
|
-
3. **失败必须非零退出**,别自愈重试。吞掉错误的代价是门户以为成功、把新容器换上去,然后在运行期以各种方式碎掉。
|
|
158
|
-
4. **expand-contract 前向兼容**:迁移跑在换容器之前,那一刻旧版本仍在服务(K8s 滚动期间新旧还并存)。先加列/加表,删旧列留到下一个版本。
|
|
159
|
-
|
|
160
|
-
### 镜像交付(五条硬约定)
|
|
161
|
-
|
|
162
|
-
> 仓库地址、robot 账号与推送前的预检:`xgent-image-push` skill(地址不写在本文件里)。
|
|
163
|
-
|
|
164
|
-
1. **`deployDescriptor.image` 写相对名**:`<APP_KEY>:<tag>`,仓库前缀由门户在部署时拼上。写成 `<APP_KEY>-server:…` 拼出来的 repo **根本不存在**,而这件事只有在切换窗口里第一次 `docker pull` 才会发现。
|
|
165
|
-
2. **tag 不可变**:新版本 = 新 tag。同 tag 覆盖推送在门户侧看不出变化(引用没变就不排任务)。
|
|
166
|
-
3. **单 arch 必须是 amd64**;要多架构自己 `docker buildx --platform linux/amd64,linux/arm64 --push`。
|
|
167
|
-
4. **不带 `-amd64` 后缀**。
|
|
168
|
-
5. 常驻型(有匿名公开面 / 被别的服务随时调)必须 **`alwaysOn: true`**,否则会被缩容或挡在冷启动闸后面。
|
|
169
|
-
|
|
170
|
-
### 依赖 `@xgent/*` 走平台私有 registry
|
|
171
|
-
|
|
172
|
-
`@xgent/shared` · `@xgent/portal-sdk` · `@xgent/portal-ui` 从平台的私有 registry 装(地址与取 token 的方式在本仓的 `.npmrc` 与 CI 配置里,不写进本文件)。**授权 token 是短时效的**——每次构建现取,`bun install` 报 401/404 先想到它过期了,别去改版本号。
|
|
173
|
-
|
|
174
|
-
- **三个包各自独立编号,不是一套齐版**;registry 上**缺号是常态**(仓里 bump 过但没推)。以 `npm view @xgent/<pkg> versions` 为准,**写范围不要精确 pin**。
|
|
175
|
-
- **`^0.x` 只放行 patch**:`^0.1.0` 不会解析到 `0.2.x`。要用新 API 就显式把范围提上去,症状是 `sdk.<新方法> is not a function`。
|
|
176
|
-
- **未经用户明确声明要升级该大版本,禁止升级 Major**(`x.y.z` 的 `x`,包括 `0.x` → `1.x`)。
|
|
177
|
-
|
|
178
|
-
### 前端 UI 开发:设计用 impeccable,验证用 Chrome extension / kimi-webbridge / Playwright(`micro` 型才有;`service` 型删掉本节)
|
|
179
|
-
|
|
180
|
-
涉及页面、组件、布局、交互或视觉的前端 UI 开发,强制走完两步:
|
|
181
|
-
|
|
182
|
-
- **设计阶段**用 `impeccable` skill 提升设计质量,至少覆盖视觉层级、信息架构、间距与对齐、配色、动效、可访问性、空状态和错误状态;不要靠「凭感觉写 Tailwind」出 UI。如果当前环境没有安装 `impeccable` skill,提示用户运行 `npx impeccable install`。
|
|
183
|
-
- **验证阶段**选择当前 coding agent 可用的真实浏览器通道:Claude Code 用 Chrome extension(`mcp__claude-in-chrome__*`);Codex、Kimi Coder 及其他 coding agent 优先用 `kimi-webbridge` skill;不可用时回退到 `playwright`。必须看到改动生效,并走通主路径和关键边界后,才能报告完成。类型检查和单测只验证代码正确,不验证功能正确;UI 改动只看 diff 不算验证完成。
|
|
184
|
-
- 如果本地环境跑不起来,先尝试解决;仍无法验证时,必须显式说明「未在浏览器中验证」、交代阻塞原因并请用户协助,不得默认声称已经完成。
|
|
185
|
-
|
|
186
|
-
### 前端:版头归门户(`micro` 型才有;`service` 型删掉本节及以下三节)
|
|
187
|
-
|
|
188
|
-
> SDK 全量速查(握手 / getToken / callService / routeSync / dashboard widget / iframe 已知坑):`portal-micro-app` skill。
|
|
189
|
-
|
|
190
|
-
- **不在 App 内自绘应用图标 / 应用名 / tagline**:版头最左那一级恒为它且可点回应用首页。再画一份就是同屏说两次,而且租户改过 App 名之后两处会说得不一样(`apps.name` 租户可改,你的 i18n 词条改不了)。可以留:角色 / 工作区 / 当前对象这类**运行期事实**,以及脱离门户直接打开时的 standalone 壳。
|
|
191
|
-
- **页面层级用 `sdk.setBreadcrumbs(crumbs)` 上报**:挂在**视图驱动的 effect** 上(不要散在各个 `routeSync()` 调用点——宿主发起的路由变化只走 `onRoute`,挂错的症状是「侧栏切页后面包屑空着」);首页推 `[]`;每次全量覆盖;label 用**当前语言**解析好(宿主不翻译)。
|
|
192
|
-
- **路由双向**:内部路由变化 `sdk.routeSync(path)`,同时**必须**订阅 `sdk.onRoute` 处理宿主推回的路由。只写单向会出现「同一 App 两个菜单点了不切换」。
|
|
193
|
-
- **调自己的后端一律 `sdk.callService("<APP_KEY>", path, opts)`**(宿主代转发、零跨域、401/403 自动重铸重试一次)。iframe 里直接跨域 `fetch` 自己的后端是错误姿势。
|
|
194
|
-
- **不要自己存 TDT**、不写 localStorage:`sdk.getToken()` 自动缓存并在到期前续签。
|
|
195
|
-
- **日常 `getToken` 不要传裁剪过的 scopes**:mint 会把本次签发的 scope 记为用户的**同意范围**,用子集 mint 会**收窄**已有同意,之后更宽的 mint 触发 `CONSENT_REQUIRED`。
|
|
196
|
-
- **`sdk.acl.can(pid)` 只是隐藏按钮的 UX 门**,真正拦截靠后端。前端判过 ≠ 安全。
|
|
197
|
-
- **低频入口(帮助 / 接入指引)用 `helpEntry` 挂版头**,不占侧栏。指向 App 内路由是自动档;指向外站是治理档(门户版头等于替那个域名背书)。
|
|
198
|
-
- **`window.alert` / `confirm` / `prompt` 在跨源沙箱 iframe 里被静默忽略**——一律用 App 内的 DOM 模态框。
|
|
199
|
-
|
|
200
|
-
### 下拉框:`<select>` 必须 `appearance-none` + 自绘 chevron
|
|
201
|
-
|
|
202
|
-
把文本输入的类直接套在 `<select>` 上,留下的是**浏览器原生箭头**——位置/大小/颜色全归浏览器,`pr-*` 推不动它(padding 只影响文字),也不跟主题 token 走。这错误反复出现,因为类型检查 / lint / 单测**全绿**,只有人眼看得出来。
|
|
203
|
-
|
|
204
|
-
```
|
|
205
|
-
appearance-none ← 唯一硬要求:关掉原生箭头
|
|
206
|
-
pr-8 ← 给自绘箭头留位
|
|
207
|
-
<ChevronDown size={14} className="pointer-events-none absolute right-2.5 top-1/2 -translate-y-1/2 text-fg-3" />
|
|
208
|
-
```
|
|
209
|
-
|
|
210
|
-
收在自己的 `Select` 原语里,视图里不写裸 `<select>`。宽度写在哪取决于 `className` 转发给谁:转发给 `<select>`(内部已有 `w-full`)⇒ 定宽要在外面套一层 `div`;转发给外层 wrapper ⇒ 直接写在组件上。
|
|
211
|
-
|
|
212
|
-
### 字典表统一带 `sort` + `name_i18n`(本 App 有租户级可维护的枚举/分类表时)
|
|
213
|
-
|
|
214
|
-
- 列名固定 `sort`,`integer NOT NULL DEFAULT 0`,**不要**叫 `seq`。列表统一 `ORDER BY sort, name`。前端字段也叫 `sort`。
|
|
215
|
-
- 必带 `name_i18n jsonb`(可空):`name` 是**缺省 locale(zh-CN) 槽位 + 唯一键 + 回退终点**,`name_i18n` 只存非缺省 locale 覆盖,键白名单只有 `en` / `zh-TW`。校验归一用 `@xgent/shared` 的 `normalizeNameI18n()`,前端解析用 `@xgent/portal-ui` 的 `resolveDictName(row, locale)`——别再写一份。
|
|
216
|
-
- ⚠️ body schema 里 `nameI18n` 用 `t.Optional(t.Unknown())`:`t.Record(t.String(), t.String())` 会静默丢弃 `__proto__` 键,把「拒绝」变成「悄悄清空」。
|
|
217
|
-
- **例外**:树 / 兄弟次序表不算字典表,保留 `seq`——语义是序号不是字典排序。
|
|
218
|
-
|
|
219
|
-
### App 图标:必须意义契合,且必须在门户注册表里存在
|
|
220
|
-
|
|
221
|
-
不要用「机器人 / AI」那类通用图标,挑一个和它干什么直接对应的 lucide 图标;**不要和已有 App 撞图标**。图标名必须是**门户宿主支持的 lucide 名**——宿主查不到时**静默回退**,写错的名字会一路走到生产(拿不准就问平台管理员要当前可用清单与占用情况)。改 `icon` 只对**新安装**生效(租户可自行改),存量对齐要找平台。
|
|
222
|
-
|
|
223
|
-
### 本地联调:一盒(one-box)
|
|
224
|
-
|
|
225
|
-
不 clone 门户、不改门户代码:拉门户镜像起一个真门户,注册你的 manifest,再把 `dist` 绝对路径挂进去(`APP_FRONTEND_DIST`)。**步骤、凭证与端口一律走 `portal-dev-setup` skill**,不要照着别处的命令手敲。
|
|
226
|
-
|
|
227
|
-
- **一盒是 dev 底座,不是门户**:`DEV_MOCK_OAUTH=true` + 已知明文 SA 密钥。永远不要拿它当生产。dev 态 manifest 可以带 `serviceAccount.secret` 明文;`--prod` 下**给了就拒收**。
|
|
228
|
-
- **先对齐一盒镜像的版本**:一盒镜像滞后于门户主干时会出现「文档说有、实际没有」的现象(真实案例:注册后自动授予租户的那段代码比某次发布的镜像新一天,症状是市场里没有卡片而没有任何报错)。**遇到「照文档做但行为不符」,先确认镜像版本,再怀疑自己**。
|
|
229
|
-
- **一盒镜像与你自己的 App 镜像不在同一个 registry 项目下**:`init` 默认按你的项目名拼一盒镜像会 404,显式传镜像引用(值见 `portal-dev-setup` skill)。
|
|
230
|
-
- **你自己的库不会被自动建**:一盒的 postgres 初始化脚本只建平台与内置 App 的库,先手工 `CREATE DATABASE "xgent-<APP_KEY>"`。
|
|
231
|
-
- **生产镜像是 amd64、开发机多半是 arm64**:起一盒时要给你的 backend 容器显式 `platform: linux/amd64`(devkit 默认跟随本机架构,自己叠一层 override)。
|
|
232
|
-
- **注册必须先于反代启动**,否则 `/svc/<APP_KEY>` 404;首次 404 的另一个常见原因是放行 map 写失败(权限),进反代容器补一行再 reload。
|
|
233
|
-
- **注册完先看演示租户的市场里有没有卡片**:没有卡片就是授予行没写成,先解决它,别接着往下排查前端。
|
|
234
|
-
- **首次打开有「授权并打开」的同意屏**(正常行为,自动化走查要把它算进步骤);`install` 排出的部署任务在一盒里会一直停在 `deploying`——一盒没有部署控制器,不挡使用。
|
|
235
|
-
|
|
236
|
-
### 完成标准
|
|
237
|
-
|
|
238
|
-
- 后端改动至少自测到:无 token → 401;缺 scope → 403;换一个租户看隔离;`curl /svc/<APP_KEY>/health` 200。
|
|
239
|
-
- 发布前:`release-cli whoami` 验令牌(别等构建完才发现过期),换镜像带 `--wait`。
|
|
240
|
-
- 症状 → 原因先查 skill 里的排查表,别猜:`/svc` 404·502 / 自省 401 / `INSUFFICIENT_SCOPE` 看 `portal-external-app`;发布 401·404·`PROPOSAL_PENDING` / 发了没换版看 `xgent-app-release`;一盒起不来看 `portal-dev-setup`;`EXCHANGE_*` 看 `portal-app-exchange`。
|
|
241
|
-
|
|
242
|
-
## Design Context
|
|
243
|
-
|
|
244
|
-
本仓有专门的设计文档,任何前端 UI 工作之前都要读(`impeccable` skill 会自动加载):
|
|
245
|
-
|
|
246
|
-
- **[PRODUCT.md](./PRODUCT.md)** —— 战略上下文:register、用户、产品目的、品牌人格、反面参照、设计原则、可访问性。
|
|
247
|
-
- **[DESIGN.md](./DESIGN.md)** —— 视觉系统:色彩、字体、投影、组件,以及从门户底座继承来的那部分 token。
|
|
248
|
-
|
|
249
|
-
<!-- 填写指引:两份文档与 CLAUDE.md 同在仓根时链接就是上面这样;放到别处记得改路径。 -->
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
0.1.5
|