@event4u/agent-config 14.9.0 → 14.11.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/.augment-plugin/marketplace.json +3 -3
- package/.augment-plugin/plugin.json +1 -1
- package/.claude-plugin/marketplace.json +1 -1
- package/CHANGELOG.md +384 -0
- package/README.md +1 -1
- package/dist/agent-src/commands/design.md +88 -0
- package/dist/agent-src/commands/project/analyze.md +47 -0
- package/dist/agent-src/commands/review/changes.md +67 -6
- package/dist/agent-src/commands/roadmap/create.md +49 -0
- package/dist/agent-src/commands/roadmap/next.md +27 -11
- package/dist/agent-src/commands/roadmap/process-full.md +14 -0
- package/dist/agent-src/commands/video/from-script.md +60 -3
- package/dist/agent-src/commands/video/stitch.md +14 -0
- package/dist/agent-src/contexts/communication/rules-auto/guidelines-mechanics.md +1 -0
- package/dist/agent-src/contexts/execution/roadmap-process-loop.md +154 -2
- package/dist/agent-src/rules/active-remediation.md +3 -3
- package/dist/agent-src/rules/code-provenance.md +2 -2
- package/dist/agent-src/rules/context-hygiene.md +13 -33
- package/dist/agent-src/rules/council-availability.md +2 -2
- package/dist/agent-src/rules/decision-revisit-gate.md +3 -1
- package/dist/agent-src/rules/design-fidelity.md +18 -0
- package/dist/agent-src/rules/design-review-after-ui-write.md +2 -2
- package/dist/agent-src/rules/evaluator-independence.md +56 -44
- package/dist/agent-src/rules/fix-what-you-see.md +9 -1
- package/dist/agent-src/rules/framework-neutrality-in-generic-skills.md +1 -1
- package/dist/agent-src/rules/minimal-safe-diff.md +14 -20
- package/dist/agent-src/rules/missing-skill-recovery.md +13 -1
- package/dist/agent-src/rules/playbook-precedence.md +105 -0
- package/dist/agent-src/rules/recurring-criticism.md +3 -1
- package/dist/agent-src/rules/roadmap-progress-sync.md +14 -13
- package/dist/agent-src/rules/scale-discipline.md +24 -0
- package/dist/agent-src/rules/security-sensitive-stop.md +2 -2
- package/dist/agent-src/rules/settings-ask-protocol.md +2 -2
- package/dist/agent-src/rules/ui-audit-gate.md +27 -15
- package/dist/agent-src/rules/untrusted-input-defense.md +2 -2
- package/dist/agent-src/skills/accessibility-auditor/SKILL.md +19 -0
- package/dist/agent-src/skills/adr-create/SKILL.md +7 -0
- package/dist/agent-src/skills/agents-md-thin-root/SKILL.md +33 -0
- package/dist/agent-src/skills/ai-council/references/advanced-modes.md +17 -3
- package/dist/agent-src/skills/ai-council/references/output-and-synthesis.md +31 -0
- package/dist/agent-src/skills/ai-council/references/procedure.md +19 -0
- package/dist/agent-src/skills/alerting-doctrine/SKILL.md +225 -0
- package/dist/agent-src/skills/alerting-doctrine/evals/triggers.json +17 -0
- package/dist/agent-src/skills/async-python-patterns/SKILL.md +1 -1
- package/dist/agent-src/skills/authz-review/SKILL.md +0 -1
- package/dist/agent-src/skills/blast-radius-analyzer/SKILL.md +32 -0
- package/dist/agent-src/skills/brand/SKILL.md +3 -0
- package/dist/agent-src/skills/brand-asset-generation/SKILL.md +3 -0
- package/dist/agent-src/skills/brand-audit/SKILL.md +3 -0
- package/dist/agent-src/skills/brand-identity/SKILL.md +3 -0
- package/dist/agent-src/skills/brand-strategy/SKILL.md +3 -0
- package/dist/agent-src/skills/brand-to-tokens/SKILL.md +3 -0
- package/dist/agent-src/skills/check-refs/SKILL.md +3 -0
- package/dist/agent-src/skills/code-refactoring/SKILL.md +1 -1
- package/dist/agent-src/skills/code-review/SKILL.md +11 -0
- package/dist/agent-src/skills/command-routing/SKILL.md +6 -0
- package/dist/agent-src/skills/condense-memory/SKILL.md +4 -1
- package/dist/agent-src/skills/context-authoring/SKILL.md +1 -1
- package/dist/agent-src/skills/conventional-commits-writing/SKILL.md +4 -1
- package/dist/agent-src/skills/copilot-agents-optimization/SKILL.md +10 -0
- package/dist/agent-src/skills/corpus-grounding/SKILL.md +3 -0
- package/dist/agent-src/skills/design-intelligence/SKILL.md +3 -0
- package/dist/agent-src/skills/design-intelligence/data/landing.csv +36 -35
- package/dist/agent-src/skills/design-intelligence/data/stacks/threejs.csv +1 -0
- package/dist/agent-src/skills/design-review/SKILL.md +80 -2
- package/dist/agent-src/skills/design-review/references/verification-automation.md +41 -0
- package/dist/agent-src/skills/design-system-capture/SKILL.md +35 -40
- package/dist/agent-src/skills/design-system-capture/references/import-procedure.md +50 -0
- package/dist/agent-src/skills/design-tokens/SKILL.md +3 -0
- package/dist/agent-src/skills/design-variations/SKILL.md +3 -0
- package/dist/agent-src/skills/developer-like-execution/SKILL.md +3 -0
- package/dist/agent-src/skills/discovery-interview/SKILL.md +1 -1
- package/dist/agent-src/skills/doc-coauthoring/SKILL.md +1 -1
- package/dist/agent-src/skills/docx-authoring/SKILL.md +1 -1
- package/dist/agent-src/skills/editorial-calendar/SKILL.md +1 -1
- package/dist/agent-src/skills/estimate-ticket/SKILL.md +3 -0
- package/dist/agent-src/skills/existing-ui-audit/SKILL.md +20 -3
- package/dist/agent-src/skills/fe-design/SKILL.md +74 -41
- package/dist/agent-src/skills/fe-design/evals/triggers.json +65 -53
- package/dist/agent-src/skills/fe-design/references/craft-floor.md +52 -0
- package/dist/agent-src/skills/fe-design/references/source-led-port.md +36 -0
- package/dist/agent-src/skills/file-editor/SKILL.md +5 -0
- package/dist/agent-src/skills/finishing-a-development-branch/SKILL.md +2 -2
- package/dist/agent-src/skills/git-workflow/SKILL.md +3 -0
- package/dist/agent-src/skills/github-ci/SKILL.md +1 -1
- package/dist/agent-src/skills/html-deck/SKILL.md +3 -0
- package/dist/agent-src/skills/iconography/SKILL.md +3 -0
- package/dist/agent-src/skills/image-editing/SKILL.md +3 -0
- package/dist/agent-src/skills/image-generation/SKILL.md +3 -0
- package/dist/agent-src/skills/image-provider-routing/SKILL.md +3 -0
- package/dist/agent-src/skills/incident-commander/SKILL.md +10 -0
- package/dist/agent-src/skills/js-library-packaging/SKILL.md +173 -0
- package/dist/agent-src/skills/js-library-packaging/evals/triggers.json +17 -0
- package/dist/agent-src/skills/js-library-packaging/scripts/check_package_surface.ts +270 -0
- package/dist/agent-src/skills/judge-artifact-completeness/SKILL.md +1 -1
- package/dist/agent-src/skills/judge-injection-defense/SKILL.md +1 -1
- package/dist/agent-src/skills/laravel-migration/SKILL.md +3 -0
- package/dist/agent-src/skills/laravel-validation/SKILL.md +1 -1
- package/dist/agent-src/skills/learning-to-rule-or-skill/SKILL.md +3 -0
- package/dist/agent-src/skills/legal-intake-triage/SKILL.md +1 -1
- package/dist/agent-src/skills/legal-practice-profile/SKILL.md +1 -1
- package/dist/agent-src/skills/lint-skills/SKILL.md +3 -0
- package/dist/agent-src/skills/llm-provider-knowledge/SKILL.md +3 -0
- package/dist/agent-src/skills/logging-monitoring/SKILL.md +234 -51
- package/dist/agent-src/skills/logo-generation/SKILL.md +3 -0
- package/dist/agent-src/skills/md-language-check/SKILL.md +3 -0
- package/dist/agent-src/skills/messaging-architecture/SKILL.md +1 -1
- package/dist/agent-src/skills/migration-architect/SKILL.md +1 -1
- package/dist/agent-src/skills/module-detect-on-the-fly/SKILL.md +1 -1
- package/dist/agent-src/skills/module-management/SKILL.md +1 -1
- package/dist/agent-src/skills/monorepo-workspace/SKILL.md +149 -0
- package/dist/agent-src/skills/monorepo-workspace/evals/triggers.json +17 -0
- package/dist/agent-src/skills/motion-choreographer/SKILL.md +7 -1
- package/dist/agent-src/skills/multi-tenancy/SKILL.md +4 -0
- package/dist/agent-src/skills/onboarding-program/SKILL.md +1 -1
- package/dist/agent-src/skills/operational-readiness/SKILL.md +184 -0
- package/dist/agent-src/skills/operational-readiness/evals/triggers.json +17 -0
- package/dist/agent-src/skills/override-management/SKILL.md +3 -0
- package/dist/agent-src/skills/perf-feedback-craft/SKILL.md +1 -1
- package/dist/agent-src/skills/persona-improvement/SKILL.md +3 -0
- package/dist/agent-src/skills/pest-testing/SKILL.md +3 -0
- package/dist/agent-src/skills/playbook-authoring/SKILL.md +162 -0
- package/dist/agent-src/skills/playwright-testing/SKILL.md +3 -0
- package/dist/agent-src/skills/privacy-review/SKILL.md +3 -0
- package/dist/agent-src/skills/prompt-engineering-image/SKILL.md +3 -0
- package/dist/agent-src/skills/prompt-optimizer/SKILL.md +1 -1
- package/dist/agent-src/skills/quality-tools/SKILL.md +5 -0
- package/dist/agent-src/skills/react-shadcn-ui/SKILL.md +52 -21
- package/dist/agent-src/skills/readme-reviewer/SKILL.md +3 -0
- package/dist/agent-src/skills/readme-writing/SKILL.md +3 -0
- package/dist/agent-src/skills/readme-writing-package/SKILL.md +3 -0
- package/dist/agent-src/skills/receiving-code-review/SKILL.md +3 -3
- package/dist/agent-src/skills/refine-prompt/SKILL.md +3 -0
- package/dist/agent-src/skills/refine-ticket/SKILL.md +3 -0
- package/dist/agent-src/skills/requesting-code-review/SKILL.md +2 -2
- package/dist/agent-src/skills/review-routing/SKILL.md +2 -2
- package/dist/agent-src/skills/roadmap-writing/SKILL.md +23 -41
- package/dist/agent-src/skills/roadmap-writing/references/follow-up-roadmap-shape.md +47 -0
- package/dist/agent-src/skills/rtk-output-filtering/SKILL.md +22 -6
- package/dist/agent-src/skills/runway-cognition/SKILL.md +3 -0
- package/dist/agent-src/skills/scene-expander/SKILL.md +1 -1
- package/dist/agent-src/skills/scene-expander/scene-blueprint.schema.yaml +26 -0
- package/dist/agent-src/skills/secrets-management/SKILL.md +5 -1
- package/dist/agent-src/skills/server-hardening/SKILL.md +159 -0
- package/dist/agent-src/skills/server-hardening/evals/triggers.json +17 -0
- package/dist/agent-src/skills/skill-improvement-pipeline/SKILL.md +3 -0
- package/dist/agent-src/skills/skill-management/SKILL.md +3 -0
- package/dist/agent-src/skills/skill-reviewer/SKILL.md +3 -0
- package/dist/agent-src/skills/skill-writing/SKILL.md +6 -0
- package/dist/agent-src/skills/spreadsheet-authoring/SKILL.md +3 -0
- package/dist/agent-src/skills/storybook-workshop/SKILL.md +194 -0
- package/dist/agent-src/skills/storybook-workshop/evals/triggers.json +17 -0
- package/dist/agent-src/skills/storybook-workshop/scripts/story_contrast_floor.ts +134 -0
- package/dist/agent-src/skills/subagent-orchestration/SKILL.md +1 -1
- package/dist/agent-src/skills/subagent-orchestration/prompts/README.md +25 -0
- package/dist/agent-src/skills/supply-chain-intake/SKILL.md +12 -0
- package/dist/agent-src/skills/systematic-debugging/SKILL.md +1 -1
- package/dist/agent-src/skills/terraform/SKILL.md +3 -0
- package/dist/agent-src/skills/test-driven-development/SKILL.md +1 -1
- package/dist/agent-src/skills/threat-modeling/SKILL.md +0 -3
- package/dist/agent-src/skills/token-optimizer/SKILL.md +3 -0
- package/dist/agent-src/skills/typography-system/SKILL.md +3 -0
- package/dist/agent-src/skills/ui-component-architect/SKILL.md +9 -1
- package/dist/agent-src/skills/upstream-contribute/SKILL.md +3 -0
- package/dist/agent-src/skills/using-git-worktrees/SKILL.md +1 -1
- package/dist/agent-src/skills/validate-feature-fit/SKILL.md +3 -0
- package/dist/agent-src/skills/verify-completion-evidence/SKILL.md +2 -2
- package/dist/agent-src/skills/wireframe/SKILL.md +3 -0
- package/dist/agent-src/skills/wireframe/references/story-beat-ledger.schema.json +115 -0
- package/dist/agent-src/skills/workspace-link/SKILL.md +131 -0
- package/dist/agent-src/skills/workspace-link/evals/triggers.json +17 -0
- package/dist/agent-src/templates/agents/agent-project-settings.example.yml +1 -1
- package/dist/agent-src/templates/playbook.md +75 -0
- package/dist/agent-src/templates/roadmaps.md +37 -0
- package/dist/agent-src/templates/scripts/check_playbook_invokes.ts +231 -0
- package/dist/agent-src/templates/scripts/work_engine/directives/ui/apply.ts +24 -0
- package/dist/agent-src/templates/scripts/work_engine/directives/ui/polish.ts +2 -0
- package/dist/agent-src/templates/scripts/work_engine/directives/ui/review.ts +216 -0
- package/dist/agent-src/templates/scripts/work_engine/directives/ui/scaffold.ts +159 -0
- package/dist/agent-src/templates/scripts/work_engine/directives/ui/stack_bundles.ts +73 -4
- package/dist/agent-src/templates/scripts/work_engine/stack/detect.ts +325 -40
- package/dist/cli/commands/uiAudit.js +221 -0
- package/dist/cli/commands/uiAudit.js.map +1 -0
- package/dist/cli/commands/uiRender.js +206 -0
- package/dist/cli/commands/uiRender.js.map +1 -0
- package/dist/cli/main.js +22 -1
- package/dist/cli/main.js.map +1 -1
- package/dist/cli/mcp/content.js +64 -1
- package/dist/cli/mcp/content.js.map +1 -1
- package/dist/cli/mcp/dispatch.js +175 -10
- package/dist/cli/mcp/dispatch.js.map +1 -1
- package/dist/cli/registry.js +3 -0
- package/dist/cli/registry.js.map +1 -1
- package/dist/cli-delegate/{chunk-H4VIVD4C.js → chunk-236PNQZK.js} +413 -391
- package/dist/cli-delegate/{chunk-G23AT6GD.js → chunk-DMSZHXZS.js} +57 -1
- package/dist/cli-delegate/{chunk-77GR3VD4.js → chunk-FF7WAFMR.js} +58 -3
- package/dist/cli-delegate/{chunk-PLSG6UL5.js → chunk-K4FFODTS.js} +341 -204
- package/dist/cli-delegate/{chunk-YM4GZDJG.js → chunk-L43NCYPB.js} +5 -0
- package/dist/cli-delegate/{chunk-B2ERU2VA.js → chunk-WOKWX5PL.js} +1 -1
- package/dist/cli-delegate/cmd_brand_status.js +8 -6
- package/dist/cli-delegate/cmd_conformance.js +3 -3
- package/dist/cli-delegate/cmd_doctor.js +3 -3
- package/dist/cli-delegate/cmd_export.js +4 -4
- package/dist/cli-delegate/cmd_handoff.js +1 -1
- package/dist/cli-delegate/cmd_preflight.js +2 -2
- package/dist/cli-delegate/cmd_prune.js +4 -4
- package/dist/cli-delegate/cmd_session_recycle.js +70 -9
- package/dist/cli-delegate/cmd_settings_migrate.js +4 -4
- package/dist/cli-delegate/cmd_settings_set.js +1 -1
- package/dist/cli-delegate/cmd_sync.js +4 -4
- package/dist/cli-delegate/cmd_uninstall.js +4 -4
- package/dist/cli-delegate/cmd_validate.js +4 -4
- package/dist/discovery/deprecation-report.md +1 -1
- package/dist/discovery/discovery-manifest.json +380 -145
- package/dist/discovery/discovery-manifest.json.sha256 +1 -1
- package/dist/discovery/discovery-manifest.summary.md +4 -4
- package/dist/discovery/dormancy-report.md +1 -1
- package/dist/discovery/orphan-report.md +1 -1
- package/dist/discovery/packs.json +18 -8
- package/dist/discovery/trust-report.md +3 -3
- package/dist/discovery/workspaces.json +16 -6
- package/dist/hooks/dispatch.js +2337 -1436
- package/dist/install/install.mjs +795 -708
- package/dist/mcp/registry-manifest.json +3 -3
- package/dist/mcp/server.json +2 -2
- package/dist/mcp/server.mjs +1685 -1250
- package/dist/router.json +1 -1
- package/dist/scripts/_lib/lean_projection_mode.js +40 -0
- package/dist/scripts/_lib/lean_projection_mode.js.map +1 -0
- package/dist/scripts/_lib/scoped_projection.js +84 -0
- package/dist/scripts/_lib/scoped_projection.js.map +1 -1
- package/dist/scripts/_lib/ui_surface.js +89 -0
- package/dist/scripts/_lib/ui_surface.js.map +1 -0
- package/dist/scripts/condense.js +6 -10
- package/dist/scripts/condense.js.map +1 -1
- package/dist/scripts/project_thin_rules.js +40 -2
- package/dist/scripts/project_thin_rules.js.map +1 -1
- package/dist/server/schemas/settings.js +3 -0
- package/dist/server/schemas/settings.js.map +1 -1
- package/dist/shared/skillRanking.js +159 -0
- package/dist/shared/skillRanking.js.map +1 -0
- package/docs/contracts/provider-lifecycle.md +47 -18
- package/docs/contracts/settings-classes.md +14 -4
- package/docs/guidelines/agent-infra/context-hygiene-mechanics.md +49 -0
- package/docs/guidelines/agent-infra/evaluator-independence-mechanics.md +92 -0
- package/docs/guidelines/agent-infra/minimal-safe-diff-mechanics.md +45 -1
- package/docs/guidelines/agent-infra/roadmap-deferred-resolution-provenance.md +54 -0
- package/docs/guidelines/design-antipatterns.md +4 -2
- package/docs/guidelines/design-asset-discipline.md +38 -0
- package/docs/guidelines/design-fidelity-mechanics.md +45 -29
- package/docs/guidelines/design-handover-extraction.md +35 -5
- package/docs/guidelines/design-modes.md +41 -1
- package/docs/guidelines/monorepo-antipatterns.md +141 -0
- package/llms.txt +50 -39
- package/package.json +1 -1
- package/src/agent-src/templates/scripts/check_playbook_invokes.ts +231 -0
- package/src/agent-src/templates/scripts/work_engine/directives/ui/apply.ts +24 -0
- package/src/agent-src/templates/scripts/work_engine/directives/ui/polish.ts +2 -0
- package/src/agent-src/templates/scripts/work_engine/directives/ui/review.ts +216 -0
- package/src/agent-src/templates/scripts/work_engine/directives/ui/scaffold.ts +159 -0
- package/src/agent-src/templates/scripts/work_engine/directives/ui/stack_bundles.ts +73 -4
- package/src/agent-src/templates/scripts/work_engine/stack/detect.ts +325 -40
- package/src/config/agent-settings.template.yml +28 -0
- package/src/config/assurance-capability-registry.json +223 -0
- package/src/config/assurance-threshold-budget.json +65 -0
- package/src/config/ci-local-parity.yml +14 -0
- package/src/config/discovery/unassigned-artefacts.yml +2 -0
- package/src/config/dispatch-economy-metrics.json +4 -2
- package/src/config/evaluator-budgets.json +14 -14
- package/src/config/gate-coverage.yml +227 -8
- package/src/config/gate-violation-baselines.json +76 -72
- package/src/config/hook-latency-budget.json +1 -0
- package/src/config/hook-token-budget.json +137 -125
- package/src/config/pack-size-budget.json +4 -2
- package/src/config/preamble-payload-budget.json +71 -67
- package/src/config/quorum-attendance-budget.json +12 -4
- package/src/config/rule-activation-census.json +7 -3
- package/src/config/rule-enforcement-baseline.json +0 -1
- package/src/config/rule-stub-ceilings.json +112 -91
- package/src/scripts/_cli/cmd_doctor.ts +15 -16
- package/src/scripts/_cli/doctor_install_mode.ts +49 -0
- package/src/scripts/_cli/doctor_overrides.ts +154 -0
- package/src/scripts/_dispatch.bash +17 -0
- package/src/scripts/_lib/as_of.ts +412 -0
- package/src/scripts/_lib/exec_evidence.ts +7 -0
- package/src/scripts/_lib/hook_settings.ts +33 -0
- package/src/scripts/_lib/host_listing_model.ts +192 -0
- package/src/scripts/_lib/lean_projection_mode.ts +44 -0
- package/src/scripts/_lib/mcp_bridge.ts +199 -0
- package/src/scripts/_lib/review_independence.ts +62 -10
- package/src/scripts/_lib/rule_injection.ts +239 -0
- package/src/scripts/_lib/run_checkpoint.ts +54 -1
- package/src/scripts/_lib/scoped_projection.ts +96 -0
- package/src/scripts/_lib/session_register.ts +44 -2
- package/src/scripts/_lib/skill_catalogue.ts +38 -2
- package/src/scripts/_lib/transcript_reads.ts +207 -0
- package/src/scripts/_lib/ui_authority.test.ts +251 -0
- package/src/scripts/_lib/ui_authority.ts +343 -0
- package/src/scripts/ai-video/adapters/fal.sh +8 -3
- package/src/scripts/ai-video/adapters/gemini-veo.sh +10 -0
- package/src/scripts/ai-video/adapters/higgsfield.sh +10 -2
- package/src/scripts/ai-video/adapters/kling.sh +10 -0
- package/src/scripts/ai-video/adapters/sora.sh +10 -0
- package/src/scripts/ai-video/lib/calibrate-cost.sh +145 -0
- package/src/scripts/ai-video/lib/model-capabilities/README.md +53 -7
- package/src/scripts/ai-video/lib/model-capabilities/comfyui.json +15 -3
- package/src/scripts/ai-video/lib/model-capabilities/fal.json +36 -6
- package/src/scripts/ai-video/lib/model-capabilities/gemini-veo.json +23 -0
- package/src/scripts/ai-video/lib/model-capabilities/higgsfield.json +23 -0
- package/src/scripts/ai-video/lib/model-capabilities/kling.json +23 -0
- package/src/scripts/ai-video/lib/model-capabilities/musetalk.json +8 -2
- package/src/scripts/ai-video/lib/model-capabilities/replicate.json +36 -6
- package/src/scripts/ai-video/lib/model-capabilities/sora.json +45 -0
- package/src/scripts/ai-video/lib/model-capabilities/syncso.json +8 -2
- package/src/scripts/ai-video/lib/parse-blueprint.sh +52 -5
- package/src/scripts/ai-video/lib/resume-scan.sh +92 -3
- package/src/scripts/ai-video/lib/seam-plan.sh +212 -0
- package/src/scripts/ai-video/smoke-trace.sh +450 -2
- package/src/scripts/ai-video/stitch.sh +191 -10
- package/src/scripts/ai-video/test-pipeline.sh +84 -6
- package/src/scripts/ai_council/cli_agency_bounds.ts +139 -0
- package/src/scripts/ai_council/cli_least_agency_canary.ts +347 -0
- package/src/scripts/ai_council/clients.ts +3 -2
- package/src/scripts/ai_council/consensus.ts +63 -6
- package/src/scripts/ai_council/events_log.ts +46 -1
- package/src/scripts/ai_council/orchestrator.ts +103 -108
- package/src/scripts/ai_council/orchestrator_results.ts +166 -0
- package/src/scripts/ai_council/prompts.ts +12 -5
- package/src/scripts/ai_council/quorum.ts +82 -1
- package/src/scripts/ai_council/quorum_wiring.ts +82 -5
- package/src/scripts/ai_council/seating.ts +211 -0
- package/src/scripts/ai_council/stance_tally.ts +22 -0
- package/src/scripts/bench_hook_latency.ts +62 -0
- package/src/scripts/build_proof.ts +12 -1
- package/src/scripts/capture_skill_catalogue.ts +21 -0
- package/src/scripts/check_always_budget.ts +2 -1
- package/src/scripts/check_augmentignore.ts +2 -1
- package/src/scripts/check_beta_review_markers.ts +2 -1
- package/src/scripts/check_composite_arming.ts +364 -0
- package/src/scripts/check_corpus_staleness.ts +2 -1
- package/src/scripts/check_council_pin_staleness.ts +3 -1
- package/src/scripts/check_enforcement_coverage.ts +116 -3
- package/src/scripts/check_enforcement_denominator.ts +365 -0
- package/src/scripts/check_gate_coverage.ts +2 -1
- package/src/scripts/check_hook_bundle_freshness.ts +13 -1
- package/src/scripts/check_knowledge_cards.ts +2 -1
- package/src/scripts/check_knowledge_pages.ts +3 -2
- package/src/scripts/check_memory.ts +2 -1
- package/src/scripts/check_no_automerge_key.ts +287 -0
- package/src/scripts/check_pack_conformance_fixture.ts +565 -0
- package/src/scripts/check_pack_passport_reconciliation.ts +274 -0
- package/src/scripts/check_proposal.ts +2 -1
- package/src/scripts/check_reach_staleness.ts +2 -1
- package/src/scripts/check_release_adjacent_health.ts +2 -1
- package/src/scripts/check_release_pr_shape.ts +5 -0
- package/src/scripts/check_review_schema.ts +34 -1
- package/src/scripts/check_roadmap_trackable.ts +48 -3
- package/src/scripts/check_source_size_budget.ts +2 -1
- package/src/scripts/check_standing_payload_delta.ts +505 -0
- package/src/scripts/check_trigger_evals.ts +2 -1
- package/src/scripts/classify_change_risk.ts +281 -0
- package/src/scripts/compute_skill_tiers.ts +186 -0
- package/src/scripts/condense.ts +8 -13
- package/src/scripts/council_attendance_metrics.ts +183 -0
- package/src/scripts/council_cli.ts +10 -8
- package/src/scripts/council_parse_rate.ts +116 -0
- package/src/scripts/derive_playbooks.ts +406 -0
- package/src/scripts/design_slop_rules.test.ts +7 -0
- package/src/scripts/design_slop_rules.ts +56 -2
- package/src/scripts/dispatch_r2_reviewer.ts +16 -0
- package/src/scripts/frontend_corpus_hash.ts +116 -0
- package/src/scripts/generate_pack_manifests.ts +78 -0
- package/src/scripts/grade_target_readiness.ts +478 -0
- package/src/scripts/hook_manifest.json +1 -1
- package/src/scripts/hook_manifest.yaml +97 -16
- package/src/scripts/hooks/concern_registry.ts +4 -0
- package/src/scripts/hooks/design_pass_hook.ts +356 -0
- package/src/scripts/hooks/rtk_wrap_hook.ts +30 -7
- package/src/scripts/hooks/rule_inject_hook.ts +318 -0
- package/src/scripts/hot_context_hook.ts +74 -7
- package/src/scripts/install.ts +40 -89
- package/src/scripts/lint_adapter_tier.ts +663 -0
- package/src/scripts/lint_archived_skills.ts +93 -0
- package/src/scripts/lint_budget_ownership.ts +2 -1
- package/src/scripts/lint_deterministic_time.ts +470 -0
- package/src/scripts/lint_framework_leakage.ts +5 -0
- package/src/scripts/lint_handoffs.ts +525 -1
- package/src/scripts/lint_judge_prompt_expectation.ts +155 -0
- package/src/scripts/lint_marketplace.ts +88 -0
- package/src/scripts/lint_media_policy_linkage.ts +140 -1
- package/src/scripts/lint_one_off_age.ts +6 -1
- package/src/scripts/lint_override_kernel_guard.ts +87 -5
- package/src/scripts/lint_roadmap_complexity.ts +56 -0
- package/src/scripts/lint_rule_enforcement_declaration.ts +24 -7
- package/src/scripts/lint_rule_norm_pin.ts +321 -0
- package/src/scripts/lint_spawn_payload.ts +42 -5
- package/src/scripts/lint_symptom_intake.ts +2 -1
- package/src/scripts/mcp_parity_smoke.ts +30 -4
- package/src/scripts/mcp_render.ts +66 -1
- package/src/scripts/mcp_tool_fingerprint.ts +241 -0
- package/src/scripts/measure_risk_class_drift.ts +140 -0
- package/src/scripts/measure_skill_ranker_baseline.ts +212 -0
- package/src/scripts/media/lib/adapter-common.sh +211 -1
- package/src/scripts/media/lib/adapter-contract.md +74 -6
- package/src/scripts/model_rule_injection.ts +907 -0
- package/src/scripts/project_thin_rules.ts +45 -2
- package/src/scripts/release.ts +66 -860
- package/src/scripts/release_drill.ts +59 -3
- package/src/scripts/release_env.ts +298 -0
- package/src/scripts/release_publication.ts +720 -0
- package/src/scripts/roadmap_context.ts +778 -0
- package/src/scripts/schemas/fidelity-measurement-sheet.schema.json +169 -0
- package/src/scripts/schemas/pack.schema.json +62 -4
- package/src/scripts/schemas/rule.schema.json +24 -2
- package/src/scripts/schemas/skill.schema.json +41 -2
- package/src/scripts/schemas/ui-authority.schema.json +114 -0
- package/src/scripts/session_register_hook.ts +29 -3
- package/src/scripts/sessions_cli.ts +67 -3
- package/src/scripts/skill_tools/score_skill_relevance.ts +36 -53
- package/src/scripts/tighten_skill_descriptions.ts +264 -0
- package/src/scripts/token_sink_report.ts +239 -0
- package/src/scripts/trigger_coverage.ts +122 -3
- package/src/scripts/update_counts.ts +7 -3
- package/src/scripts/validate_frontmatter.ts +66 -0
- package/src/server/schemas/settings.ts +5 -0
- package/src/shared/skillRanking.ts +183 -0
|
@@ -68,6 +68,58 @@ interface WorldConfig {
|
|
|
68
68
|
merge_fails_hard?: boolean;
|
|
69
69
|
/** PR checks fail (watch exits non-zero) — the release must die. */
|
|
70
70
|
checks_fail?: boolean;
|
|
71
|
+
/**
|
|
72
|
+
* Content `git show <target>:CHANGELOG.md` returns.
|
|
73
|
+
*
|
|
74
|
+
* Step 1.3 of `road-to-release-publication-integrity`, decided by AI council
|
|
75
|
+
* 2026-08-23 (2/2 convergent) in favour of controlled fixtures over a scoped
|
|
76
|
+
* policy exemption. The drill USED to return the live `CHANGELOG.md`, which
|
|
77
|
+
* coupled every sequencing scenario to whatever the repository's changelog
|
|
78
|
+
* happened to contain — and that coupling is what broke four scenarios in the
|
|
79
|
+
* second refused attempt at the publication guard: a guard reading real
|
|
80
|
+
* content refuses on real markers, so the drill failed for a reason that had
|
|
81
|
+
* nothing to do with sequencing.
|
|
82
|
+
*
|
|
83
|
+
* A fixture is the right shape rather than an exemption because the council
|
|
84
|
+
* had already rejected letting drills bypass policy universally: an exempt
|
|
85
|
+
* drill proves the sequencing AND proves nothing about the policy, whereas a
|
|
86
|
+
* fixture holding policy-valid content exercises the same parsing path with
|
|
87
|
+
* content the test controls.
|
|
88
|
+
*
|
|
89
|
+
* Defaults to `defaultChangelogFixture(target)` — a minimal, policy-valid
|
|
90
|
+
* section for the target. Pass the live file explicitly if a scenario really
|
|
91
|
+
* needs it; nothing does today, and doing it silently is what this seam
|
|
92
|
+
* removes.
|
|
93
|
+
*/
|
|
94
|
+
changelog?: string;
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
/**
|
|
98
|
+
* The smallest changelog the pipeline accepts for `target`.
|
|
99
|
+
*
|
|
100
|
+
* Shape requirements, each load-bearing rather than decorative:
|
|
101
|
+
* `extract_changelog_section` needs an `## [X.Y.Z]` heading to find the section
|
|
102
|
+
* at all, `tag_message_from_section` and `pr_body_from_section` render its body,
|
|
103
|
+
* and a SECOND section below it is what proves the extractor stops at the right
|
|
104
|
+
* boundary instead of swallowing the rest of the file. Carries no placeholder
|
|
105
|
+
* marker, deliberately: a fixture that trips the very guard the drill exists to
|
|
106
|
+
* sequence would reproduce the failure this seam removes.
|
|
107
|
+
*/
|
|
108
|
+
export function defaultChangelogFixture(target: string): string {
|
|
109
|
+
return [
|
|
110
|
+
'# Changelog',
|
|
111
|
+
'',
|
|
112
|
+
`## [${target}]`,
|
|
113
|
+
'',
|
|
114
|
+
'### Features',
|
|
115
|
+
'',
|
|
116
|
+
'- fixture entry for the release drill',
|
|
117
|
+
'',
|
|
118
|
+
'## [0.0.0]',
|
|
119
|
+
'',
|
|
120
|
+
'- earlier release, present so the section boundary is exercised',
|
|
121
|
+
'',
|
|
122
|
+
].join('\n');
|
|
71
123
|
}
|
|
72
124
|
|
|
73
125
|
/**
|
|
@@ -91,6 +143,7 @@ class FakeWorld {
|
|
|
91
143
|
private merge_races_once: boolean;
|
|
92
144
|
private merge_fails_hard: boolean;
|
|
93
145
|
private checks_fail: boolean;
|
|
146
|
+
private readonly changelog: string;
|
|
94
147
|
|
|
95
148
|
constructor(
|
|
96
149
|
readonly branch: string,
|
|
@@ -98,6 +151,7 @@ class FakeWorld {
|
|
|
98
151
|
cfg: WorldConfig,
|
|
99
152
|
) {
|
|
100
153
|
this.push_rejections = cfg.push_rejections ?? 0;
|
|
154
|
+
this.changelog = cfg.changelog ?? defaultChangelogFixture(target);
|
|
101
155
|
this.behind_probes = cfg.behind_probes ?? 0;
|
|
102
156
|
this.merge_races_once = cfg.merge_races_once ?? false;
|
|
103
157
|
this.merge_fails_hard = cfg.merge_fails_hard ?? false;
|
|
@@ -135,9 +189,11 @@ class FakeWorld {
|
|
|
135
189
|
return OK;
|
|
136
190
|
}
|
|
137
191
|
if (cmd === `git show ${this.target}:CHANGELOG.md`) {
|
|
138
|
-
//
|
|
139
|
-
//
|
|
140
|
-
|
|
192
|
+
// A FIXTURE, not the live file. See `WorldConfig.changelog` for why:
|
|
193
|
+
// returning the repository's own changelog made every sequencing
|
|
194
|
+
// scenario depend on its current content, and that dependency is what
|
|
195
|
+
// broke four of them in the second refused guard attempt.
|
|
196
|
+
return { ...OK, stdout: this.changelog };
|
|
141
197
|
}
|
|
142
198
|
if (cmd === `git push origin ${this.target}`) {
|
|
143
199
|
this.tag_remote = true;
|
|
@@ -0,0 +1,298 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared release constants, paths and Python-parity error types.
|
|
3
|
+
*
|
|
4
|
+
* Extracted for step 1.1 of `road-to-release-publication-integrity`. It exists
|
|
5
|
+
* because the publication unit and the changelog/version unit both need these
|
|
6
|
+
* and neither may import the other: `release.ts` importing back from
|
|
7
|
+
* `release_publication.ts` while that file imports `REMOTE` from `release.ts` is
|
|
8
|
+
* a cycle, and a cycle is worse than the large file the split is trying to fix.
|
|
9
|
+
* A third leaf module is the smallest shape without one.
|
|
10
|
+
*
|
|
11
|
+
* Contains almost no logic and reaches nothing — paths, two branch names, two
|
|
12
|
+
* GitHub body limits, three error classes, and the JSON serializer the version
|
|
13
|
+
* bumps share. That is what makes it a safe leaf.
|
|
14
|
+
*
|
|
15
|
+
* The two manifest-version writers live here rather than in `release.ts` for a
|
|
16
|
+
* measured reason: `release.ts` is 564 lines over the 1500-line source-size
|
|
17
|
+
* ratchet, so every line added there is charged, and this function needs
|
|
18
|
+
* exactly two things this module already owns — the manifest paths and
|
|
19
|
+
* `jsonDumpsIndent`. Extraction, not a baseline bump. `set_marketplace_version`
|
|
20
|
+
* moved with its Augment twin because the argument is identical and splitting a
|
|
21
|
+
* matched pair across two files for no reason is the worse shape.
|
|
22
|
+
*/
|
|
23
|
+
import * as fs from 'node:fs';
|
|
24
|
+
import * as path from 'node:path';
|
|
25
|
+
import { fileURLToPath } from 'node:url';
|
|
26
|
+
|
|
27
|
+
const _HERE = fileURLToPath(import.meta.url);
|
|
28
|
+
|
|
29
|
+
// ---------------------------------------------------------------------------
|
|
30
|
+
// Python-runtime parity helpers
|
|
31
|
+
// ---------------------------------------------------------------------------
|
|
32
|
+
|
|
33
|
+
/** Mirror of Python `sys.exit(code)` raised by `die()`. Caught at the CLI entry. */
|
|
34
|
+
class SystemExitError extends Error {
|
|
35
|
+
constructor(public readonly code: number) {
|
|
36
|
+
super(`system-exit-${code}`);
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
/** argparse usage-error / help exit (code 2 / 0). */
|
|
41
|
+
class ArgparseExit extends Error {
|
|
42
|
+
constructor(public readonly code: number) {
|
|
43
|
+
super(`argparse-exit-${code}`);
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
/**
|
|
48
|
+
* Mirror of `subprocess.CalledProcessError`. Thrown by `run()` when a command
|
|
49
|
+
* fails with `check=True` and output is NOT captured — the retired Python implementation
|
|
50
|
+
* lets `CalledProcessError` propagate in that path. The CLI entry guard does
|
|
51
|
+
* NOT catch this, so it surfaces (non-zero exit + traceback), matching Python.
|
|
52
|
+
*/
|
|
53
|
+
class CalledProcessError extends Error {
|
|
54
|
+
constructor(
|
|
55
|
+
public readonly returncode: number,
|
|
56
|
+
public readonly cmd: readonly string[],
|
|
57
|
+
) {
|
|
58
|
+
super(`Command '${cmd.join(' ')}' returned non-zero exit status ${returncode}.`);
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
// ---------------------------------------------------------------------------
|
|
63
|
+
// Module-level constants (release.py:70-84)
|
|
64
|
+
// ---------------------------------------------------------------------------
|
|
65
|
+
|
|
66
|
+
// REPO_ROOT: release.py is at src/scripts/release.py;
|
|
67
|
+
// Path(__file__).resolve().parent.parent.parent == src/scripts → src → repo
|
|
68
|
+
// root. release.ts lives in the same dir, so _HERE-dir is src/scripts and
|
|
69
|
+
// `..`/`..` reaches the repo root (matches changelog_eras.ts's 3-up from
|
|
70
|
+
// _lib/ and install.ts's REPO_ROOT computation).
|
|
71
|
+
const REPO_ROOT = path.resolve(path.dirname(_HERE), '..', '..');
|
|
72
|
+
const PACKAGE_JSON = path.join(REPO_ROOT, 'package.json');
|
|
73
|
+
// Bumped alongside package.json — see set_lockfile_version for why.
|
|
74
|
+
const PACKAGE_LOCK_JSON = path.join(REPO_ROOT, 'package-lock.json');
|
|
75
|
+
const MARKETPLACE_JSON = path.join(REPO_ROOT, '.claude-plugin', 'marketplace.json');
|
|
76
|
+
// The Augment twins. Both ship in the npm tarball (`publish-surface.json`
|
|
77
|
+
// roots) and both are version-synced to package.json — see
|
|
78
|
+
// lint_marketplace.check_augment_manifests for why they are not independent.
|
|
79
|
+
const AUGMENT_PLUGIN_JSON = path.join(REPO_ROOT, '.augment-plugin', 'plugin.json');
|
|
80
|
+
const AUGMENT_MARKETPLACE_JSON = path.join(REPO_ROOT, '.augment-plugin', 'marketplace.json');
|
|
81
|
+
// Source-of-truth project-settings template. Carries an `agent_config_version`
|
|
82
|
+
// pin that check_template_pin_drift requires to equal package.json.version. We
|
|
83
|
+
// bump the src twin here; `task release-prepare` (run right after the bump)
|
|
84
|
+
// regenerates the dist/agent-src/ twin from it.
|
|
85
|
+
const PROJECT_TEMPLATE = path.join(
|
|
86
|
+
REPO_ROOT,
|
|
87
|
+
'src',
|
|
88
|
+
'agent-src',
|
|
89
|
+
'templates',
|
|
90
|
+
'agents',
|
|
91
|
+
'agent-project-settings.example.yml',
|
|
92
|
+
);
|
|
93
|
+
const CHANGELOG = path.join(REPO_ROOT, 'CHANGELOG.md');
|
|
94
|
+
const MAIN_BRANCH = 'main';
|
|
95
|
+
const REMOTE = 'origin';
|
|
96
|
+
const REPO_SLUG = 'event4u-app/agent-config';
|
|
97
|
+
|
|
98
|
+
// GitHub rejects bodies over these limits with a GraphQL "Body is too
|
|
99
|
+
// long" error. The full entry always lands in CHANGELOG.md (committed in
|
|
100
|
+
// the PR diff and attached to the tag), so an oversized body is capped
|
|
101
|
+
// with a pointer rather than failing the release — a major bump can
|
|
102
|
+
// render hundreds of commit bullets, well past the 65 536 PR-body limit.
|
|
103
|
+
const GH_PR_BODY_LIMIT = 65_536; // createPullRequest mutation hard limit
|
|
104
|
+
const GH_RELEASE_NOTES_LIMIT = 125_000; // release-notes body limit
|
|
105
|
+
/**
|
|
106
|
+
* Return `text` unchanged when within `limit` chars; otherwise truncate at
|
|
107
|
+
* the last line boundary that fits and append a pointer to `full_ref` so
|
|
108
|
+
* nothing is silently lost.
|
|
109
|
+
*/
|
|
110
|
+
function _cap_body(text: string, limit: number, full_ref: string): string {
|
|
111
|
+
if (pyLen(text) <= limit) {
|
|
112
|
+
return text;
|
|
113
|
+
}
|
|
114
|
+
const notice =
|
|
115
|
+
`\n\n> _Changelog truncated to fit GitHub's ` +
|
|
116
|
+
`${commaGroup(limit)}-character body limit — full entry in ${full_ref}._`;
|
|
117
|
+
let head = pySlice(text, limit - pyLen(notice));
|
|
118
|
+
const nl = head.lastIndexOf('\n');
|
|
119
|
+
if (nl > 0) {
|
|
120
|
+
head = head.slice(0, nl);
|
|
121
|
+
}
|
|
122
|
+
return head + notice;
|
|
123
|
+
}
|
|
124
|
+
/** Python `len(str)` — number of Unicode code points (not UTF-16 units). */
|
|
125
|
+
function pyLen(s: string): number {
|
|
126
|
+
return [...s].length;
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
/** Python `text[:n]` on a string — first `n` code points. */
|
|
130
|
+
function pySlice(s: string, n: number): string {
|
|
131
|
+
return [...s].slice(0, n).join('');
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
/** Python f-string `{n:,}` — thousands grouping with commas (en-US grouping). */
|
|
135
|
+
function commaGroup(n: number): string {
|
|
136
|
+
const neg = n < 0;
|
|
137
|
+
const digits = Math.abs(n).toString();
|
|
138
|
+
let out = '';
|
|
139
|
+
for (let i = 0; i < digits.length; i += 1) {
|
|
140
|
+
if (i > 0 && (digits.length - i) % 3 === 0) out += ',';
|
|
141
|
+
out += digits[i];
|
|
142
|
+
}
|
|
143
|
+
return neg ? '-' + out : out;
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
/** Python `re.escape` — escape regex-special chars in a literal string. */
|
|
147
|
+
function reEscape(s: string): string {
|
|
148
|
+
return s.replace(/[.*+?^${}()|[\]\\#\-]/g, '\\$&');
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
// --- JSON byte-parity (mirrors install.ts; see Parity notes for ensure_ascii). ---
|
|
152
|
+
|
|
153
|
+
function _jsonStrNoAscii(s: string): string {
|
|
154
|
+
// json.dumps(ensure_ascii=False): escape control chars + " + \, keep >=0x20.
|
|
155
|
+
let out = '"';
|
|
156
|
+
for (const ch of s) {
|
|
157
|
+
const code = ch.codePointAt(0) as number;
|
|
158
|
+
switch (ch) {
|
|
159
|
+
case '"':
|
|
160
|
+
out += '\\"';
|
|
161
|
+
break;
|
|
162
|
+
case '\\':
|
|
163
|
+
out += '\\\\';
|
|
164
|
+
break;
|
|
165
|
+
case '\n':
|
|
166
|
+
out += '\\n';
|
|
167
|
+
break;
|
|
168
|
+
case '\r':
|
|
169
|
+
out += '\\r';
|
|
170
|
+
break;
|
|
171
|
+
case '\t':
|
|
172
|
+
out += '\\t';
|
|
173
|
+
break;
|
|
174
|
+
case '\b':
|
|
175
|
+
out += '\\b';
|
|
176
|
+
break;
|
|
177
|
+
case '\f':
|
|
178
|
+
out += '\\f';
|
|
179
|
+
break;
|
|
180
|
+
default:
|
|
181
|
+
if (code < 0x20) {
|
|
182
|
+
out += '\\u' + code.toString(16).padStart(4, '0');
|
|
183
|
+
} else {
|
|
184
|
+
out += ch;
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
return out + '"';
|
|
189
|
+
}
|
|
190
|
+
|
|
191
|
+
function _jsonScalar(value: unknown): string | null {
|
|
192
|
+
if (value === null || value === undefined) return 'null';
|
|
193
|
+
if (typeof value === 'boolean') return value ? 'true' : 'false';
|
|
194
|
+
if (typeof value === 'number') {
|
|
195
|
+
if (!Number.isFinite(value)) {
|
|
196
|
+
if (Number.isNaN(value)) return 'NaN';
|
|
197
|
+
return value > 0 ? 'Infinity' : '-Infinity';
|
|
198
|
+
}
|
|
199
|
+
return String(value);
|
|
200
|
+
}
|
|
201
|
+
if (typeof value === 'string') return _jsonStrNoAscii(value);
|
|
202
|
+
return null;
|
|
203
|
+
}
|
|
204
|
+
|
|
205
|
+
function _dumpIndent(value: unknown, indent: number, depth: number): string {
|
|
206
|
+
const scalar = _jsonScalar(value);
|
|
207
|
+
if (scalar !== null) return scalar;
|
|
208
|
+
const pad = ' '.repeat(indent * (depth + 1));
|
|
209
|
+
const closePad = ' '.repeat(indent * depth);
|
|
210
|
+
if (Array.isArray(value)) {
|
|
211
|
+
if (value.length === 0) return '[]';
|
|
212
|
+
const items = value.map((v) => pad + _dumpIndent(v, indent, depth + 1));
|
|
213
|
+
return `[\n${items.join(',\n')}\n${closePad}]`;
|
|
214
|
+
}
|
|
215
|
+
if (typeof value === 'object' && value !== null) {
|
|
216
|
+
const obj = value as Record<string, unknown>;
|
|
217
|
+
const keys = Object.keys(obj);
|
|
218
|
+
if (keys.length === 0) return '{}';
|
|
219
|
+
const items = keys.map(
|
|
220
|
+
(k) => `${pad}${_jsonStrNoAscii(k)}: ${_dumpIndent(obj[k], indent, depth + 1)}`,
|
|
221
|
+
);
|
|
222
|
+
return `{\n${items.join(',\n')}\n${closePad}}`;
|
|
223
|
+
}
|
|
224
|
+
return _jsonStrNoAscii(String(value));
|
|
225
|
+
}
|
|
226
|
+
|
|
227
|
+
/** `json.dumps(data, indent=N)` (sort_keys=False; ensure_ascii — see Parity notes). */
|
|
228
|
+
function jsonDumpsIndent(value: unknown, indent: number): string {
|
|
229
|
+
return _dumpIndent(value, indent, 0);
|
|
230
|
+
}
|
|
231
|
+
|
|
232
|
+
/**
|
|
233
|
+
* Rewrite every version field in an `.augment-plugin/` manifest.
|
|
234
|
+
*
|
|
235
|
+
* Enumerated, not walked: `plugin.json` carries one top-level `version`, and
|
|
236
|
+
* `marketplace.json` carries three (top level, `metadata.version`, and one per
|
|
237
|
+
* `plugins[]` entry). A recursive "every key named version" rewrite would
|
|
238
|
+
* silently start bumping a future field that is legitimately independent, which
|
|
239
|
+
* is the failure this whole change exists to stop — an unowned version is drift
|
|
240
|
+
* whichever direction it drifts.
|
|
241
|
+
*/
|
|
242
|
+
function set_augment_manifest_version(p: string, version: string): void {
|
|
243
|
+
const data = JSON.parse(fs.readFileSync(p, 'utf-8')) as Record<string, unknown>;
|
|
244
|
+
if ('version' in data) {
|
|
245
|
+
data['version'] = version;
|
|
246
|
+
}
|
|
247
|
+
const meta = data['metadata'];
|
|
248
|
+
if (typeof meta === 'object' && meta !== null && !Array.isArray(meta) && 'version' in meta) {
|
|
249
|
+
(meta as Record<string, unknown>)['version'] = version;
|
|
250
|
+
}
|
|
251
|
+
const plugins = data['plugins'];
|
|
252
|
+
if (Array.isArray(plugins)) {
|
|
253
|
+
for (const entry of plugins) {
|
|
254
|
+
if (typeof entry === 'object' && entry !== null && !Array.isArray(entry) && 'version' in entry) {
|
|
255
|
+
(entry as Record<string, unknown>)['version'] = version;
|
|
256
|
+
}
|
|
257
|
+
}
|
|
258
|
+
}
|
|
259
|
+
fs.writeFileSync(p, jsonDumpsIndent(data, 2) + '\n', 'utf-8');
|
|
260
|
+
}
|
|
261
|
+
|
|
262
|
+
/** Update `metadata.version`; preserve 2-space indentation + UTF-8. */
|
|
263
|
+
function set_marketplace_version(p: string, version: string): void {
|
|
264
|
+
const data = JSON.parse(fs.readFileSync(p, 'utf-8')) as Record<string, unknown>;
|
|
265
|
+
// data.setdefault("metadata", {})["version"] = version — preserve key order.
|
|
266
|
+
if (!(typeof data['metadata'] === 'object' && data['metadata'] !== null && !Array.isArray(data['metadata']))) {
|
|
267
|
+
data['metadata'] = {};
|
|
268
|
+
}
|
|
269
|
+
(data['metadata'] as Record<string, unknown>)['version'] = version;
|
|
270
|
+
fs.writeFileSync(p, jsonDumpsIndent(data, 2) + '\n', 'utf-8');
|
|
271
|
+
}
|
|
272
|
+
|
|
273
|
+
export {
|
|
274
|
+
ArgparseExit,
|
|
275
|
+
commaGroup,
|
|
276
|
+
jsonDumpsIndent,
|
|
277
|
+
set_augment_manifest_version,
|
|
278
|
+
set_marketplace_version,
|
|
279
|
+
pyLen,
|
|
280
|
+
pySlice,
|
|
281
|
+
reEscape,
|
|
282
|
+
_cap_body,
|
|
283
|
+
CHANGELOG,
|
|
284
|
+
CalledProcessError,
|
|
285
|
+
GH_PR_BODY_LIMIT,
|
|
286
|
+
GH_RELEASE_NOTES_LIMIT,
|
|
287
|
+
MAIN_BRANCH,
|
|
288
|
+
AUGMENT_MARKETPLACE_JSON,
|
|
289
|
+
AUGMENT_PLUGIN_JSON,
|
|
290
|
+
MARKETPLACE_JSON,
|
|
291
|
+
PACKAGE_JSON,
|
|
292
|
+
PACKAGE_LOCK_JSON,
|
|
293
|
+
PROJECT_TEMPLATE,
|
|
294
|
+
REMOTE,
|
|
295
|
+
REPO_ROOT,
|
|
296
|
+
REPO_SLUG,
|
|
297
|
+
SystemExitError,
|
|
298
|
+
};
|