@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.
Files changed (426) hide show
  1. package/.augment-plugin/marketplace.json +3 -3
  2. package/.augment-plugin/plugin.json +1 -1
  3. package/.claude-plugin/marketplace.json +1 -1
  4. package/CHANGELOG.md +384 -0
  5. package/README.md +1 -1
  6. package/dist/agent-src/commands/design.md +88 -0
  7. package/dist/agent-src/commands/project/analyze.md +47 -0
  8. package/dist/agent-src/commands/review/changes.md +67 -6
  9. package/dist/agent-src/commands/roadmap/create.md +49 -0
  10. package/dist/agent-src/commands/roadmap/next.md +27 -11
  11. package/dist/agent-src/commands/roadmap/process-full.md +14 -0
  12. package/dist/agent-src/commands/video/from-script.md +60 -3
  13. package/dist/agent-src/commands/video/stitch.md +14 -0
  14. package/dist/agent-src/contexts/communication/rules-auto/guidelines-mechanics.md +1 -0
  15. package/dist/agent-src/contexts/execution/roadmap-process-loop.md +154 -2
  16. package/dist/agent-src/rules/active-remediation.md +3 -3
  17. package/dist/agent-src/rules/code-provenance.md +2 -2
  18. package/dist/agent-src/rules/context-hygiene.md +13 -33
  19. package/dist/agent-src/rules/council-availability.md +2 -2
  20. package/dist/agent-src/rules/decision-revisit-gate.md +3 -1
  21. package/dist/agent-src/rules/design-fidelity.md +18 -0
  22. package/dist/agent-src/rules/design-review-after-ui-write.md +2 -2
  23. package/dist/agent-src/rules/evaluator-independence.md +56 -44
  24. package/dist/agent-src/rules/fix-what-you-see.md +9 -1
  25. package/dist/agent-src/rules/framework-neutrality-in-generic-skills.md +1 -1
  26. package/dist/agent-src/rules/minimal-safe-diff.md +14 -20
  27. package/dist/agent-src/rules/missing-skill-recovery.md +13 -1
  28. package/dist/agent-src/rules/playbook-precedence.md +105 -0
  29. package/dist/agent-src/rules/recurring-criticism.md +3 -1
  30. package/dist/agent-src/rules/roadmap-progress-sync.md +14 -13
  31. package/dist/agent-src/rules/scale-discipline.md +24 -0
  32. package/dist/agent-src/rules/security-sensitive-stop.md +2 -2
  33. package/dist/agent-src/rules/settings-ask-protocol.md +2 -2
  34. package/dist/agent-src/rules/ui-audit-gate.md +27 -15
  35. package/dist/agent-src/rules/untrusted-input-defense.md +2 -2
  36. package/dist/agent-src/skills/accessibility-auditor/SKILL.md +19 -0
  37. package/dist/agent-src/skills/adr-create/SKILL.md +7 -0
  38. package/dist/agent-src/skills/agents-md-thin-root/SKILL.md +33 -0
  39. package/dist/agent-src/skills/ai-council/references/advanced-modes.md +17 -3
  40. package/dist/agent-src/skills/ai-council/references/output-and-synthesis.md +31 -0
  41. package/dist/agent-src/skills/ai-council/references/procedure.md +19 -0
  42. package/dist/agent-src/skills/alerting-doctrine/SKILL.md +225 -0
  43. package/dist/agent-src/skills/alerting-doctrine/evals/triggers.json +17 -0
  44. package/dist/agent-src/skills/async-python-patterns/SKILL.md +1 -1
  45. package/dist/agent-src/skills/authz-review/SKILL.md +0 -1
  46. package/dist/agent-src/skills/blast-radius-analyzer/SKILL.md +32 -0
  47. package/dist/agent-src/skills/brand/SKILL.md +3 -0
  48. package/dist/agent-src/skills/brand-asset-generation/SKILL.md +3 -0
  49. package/dist/agent-src/skills/brand-audit/SKILL.md +3 -0
  50. package/dist/agent-src/skills/brand-identity/SKILL.md +3 -0
  51. package/dist/agent-src/skills/brand-strategy/SKILL.md +3 -0
  52. package/dist/agent-src/skills/brand-to-tokens/SKILL.md +3 -0
  53. package/dist/agent-src/skills/check-refs/SKILL.md +3 -0
  54. package/dist/agent-src/skills/code-refactoring/SKILL.md +1 -1
  55. package/dist/agent-src/skills/code-review/SKILL.md +11 -0
  56. package/dist/agent-src/skills/command-routing/SKILL.md +6 -0
  57. package/dist/agent-src/skills/condense-memory/SKILL.md +4 -1
  58. package/dist/agent-src/skills/context-authoring/SKILL.md +1 -1
  59. package/dist/agent-src/skills/conventional-commits-writing/SKILL.md +4 -1
  60. package/dist/agent-src/skills/copilot-agents-optimization/SKILL.md +10 -0
  61. package/dist/agent-src/skills/corpus-grounding/SKILL.md +3 -0
  62. package/dist/agent-src/skills/design-intelligence/SKILL.md +3 -0
  63. package/dist/agent-src/skills/design-intelligence/data/landing.csv +36 -35
  64. package/dist/agent-src/skills/design-intelligence/data/stacks/threejs.csv +1 -0
  65. package/dist/agent-src/skills/design-review/SKILL.md +80 -2
  66. package/dist/agent-src/skills/design-review/references/verification-automation.md +41 -0
  67. package/dist/agent-src/skills/design-system-capture/SKILL.md +35 -40
  68. package/dist/agent-src/skills/design-system-capture/references/import-procedure.md +50 -0
  69. package/dist/agent-src/skills/design-tokens/SKILL.md +3 -0
  70. package/dist/agent-src/skills/design-variations/SKILL.md +3 -0
  71. package/dist/agent-src/skills/developer-like-execution/SKILL.md +3 -0
  72. package/dist/agent-src/skills/discovery-interview/SKILL.md +1 -1
  73. package/dist/agent-src/skills/doc-coauthoring/SKILL.md +1 -1
  74. package/dist/agent-src/skills/docx-authoring/SKILL.md +1 -1
  75. package/dist/agent-src/skills/editorial-calendar/SKILL.md +1 -1
  76. package/dist/agent-src/skills/estimate-ticket/SKILL.md +3 -0
  77. package/dist/agent-src/skills/existing-ui-audit/SKILL.md +20 -3
  78. package/dist/agent-src/skills/fe-design/SKILL.md +74 -41
  79. package/dist/agent-src/skills/fe-design/evals/triggers.json +65 -53
  80. package/dist/agent-src/skills/fe-design/references/craft-floor.md +52 -0
  81. package/dist/agent-src/skills/fe-design/references/source-led-port.md +36 -0
  82. package/dist/agent-src/skills/file-editor/SKILL.md +5 -0
  83. package/dist/agent-src/skills/finishing-a-development-branch/SKILL.md +2 -2
  84. package/dist/agent-src/skills/git-workflow/SKILL.md +3 -0
  85. package/dist/agent-src/skills/github-ci/SKILL.md +1 -1
  86. package/dist/agent-src/skills/html-deck/SKILL.md +3 -0
  87. package/dist/agent-src/skills/iconography/SKILL.md +3 -0
  88. package/dist/agent-src/skills/image-editing/SKILL.md +3 -0
  89. package/dist/agent-src/skills/image-generation/SKILL.md +3 -0
  90. package/dist/agent-src/skills/image-provider-routing/SKILL.md +3 -0
  91. package/dist/agent-src/skills/incident-commander/SKILL.md +10 -0
  92. package/dist/agent-src/skills/js-library-packaging/SKILL.md +173 -0
  93. package/dist/agent-src/skills/js-library-packaging/evals/triggers.json +17 -0
  94. package/dist/agent-src/skills/js-library-packaging/scripts/check_package_surface.ts +270 -0
  95. package/dist/agent-src/skills/judge-artifact-completeness/SKILL.md +1 -1
  96. package/dist/agent-src/skills/judge-injection-defense/SKILL.md +1 -1
  97. package/dist/agent-src/skills/laravel-migration/SKILL.md +3 -0
  98. package/dist/agent-src/skills/laravel-validation/SKILL.md +1 -1
  99. package/dist/agent-src/skills/learning-to-rule-or-skill/SKILL.md +3 -0
  100. package/dist/agent-src/skills/legal-intake-triage/SKILL.md +1 -1
  101. package/dist/agent-src/skills/legal-practice-profile/SKILL.md +1 -1
  102. package/dist/agent-src/skills/lint-skills/SKILL.md +3 -0
  103. package/dist/agent-src/skills/llm-provider-knowledge/SKILL.md +3 -0
  104. package/dist/agent-src/skills/logging-monitoring/SKILL.md +234 -51
  105. package/dist/agent-src/skills/logo-generation/SKILL.md +3 -0
  106. package/dist/agent-src/skills/md-language-check/SKILL.md +3 -0
  107. package/dist/agent-src/skills/messaging-architecture/SKILL.md +1 -1
  108. package/dist/agent-src/skills/migration-architect/SKILL.md +1 -1
  109. package/dist/agent-src/skills/module-detect-on-the-fly/SKILL.md +1 -1
  110. package/dist/agent-src/skills/module-management/SKILL.md +1 -1
  111. package/dist/agent-src/skills/monorepo-workspace/SKILL.md +149 -0
  112. package/dist/agent-src/skills/monorepo-workspace/evals/triggers.json +17 -0
  113. package/dist/agent-src/skills/motion-choreographer/SKILL.md +7 -1
  114. package/dist/agent-src/skills/multi-tenancy/SKILL.md +4 -0
  115. package/dist/agent-src/skills/onboarding-program/SKILL.md +1 -1
  116. package/dist/agent-src/skills/operational-readiness/SKILL.md +184 -0
  117. package/dist/agent-src/skills/operational-readiness/evals/triggers.json +17 -0
  118. package/dist/agent-src/skills/override-management/SKILL.md +3 -0
  119. package/dist/agent-src/skills/perf-feedback-craft/SKILL.md +1 -1
  120. package/dist/agent-src/skills/persona-improvement/SKILL.md +3 -0
  121. package/dist/agent-src/skills/pest-testing/SKILL.md +3 -0
  122. package/dist/agent-src/skills/playbook-authoring/SKILL.md +162 -0
  123. package/dist/agent-src/skills/playwright-testing/SKILL.md +3 -0
  124. package/dist/agent-src/skills/privacy-review/SKILL.md +3 -0
  125. package/dist/agent-src/skills/prompt-engineering-image/SKILL.md +3 -0
  126. package/dist/agent-src/skills/prompt-optimizer/SKILL.md +1 -1
  127. package/dist/agent-src/skills/quality-tools/SKILL.md +5 -0
  128. package/dist/agent-src/skills/react-shadcn-ui/SKILL.md +52 -21
  129. package/dist/agent-src/skills/readme-reviewer/SKILL.md +3 -0
  130. package/dist/agent-src/skills/readme-writing/SKILL.md +3 -0
  131. package/dist/agent-src/skills/readme-writing-package/SKILL.md +3 -0
  132. package/dist/agent-src/skills/receiving-code-review/SKILL.md +3 -3
  133. package/dist/agent-src/skills/refine-prompt/SKILL.md +3 -0
  134. package/dist/agent-src/skills/refine-ticket/SKILL.md +3 -0
  135. package/dist/agent-src/skills/requesting-code-review/SKILL.md +2 -2
  136. package/dist/agent-src/skills/review-routing/SKILL.md +2 -2
  137. package/dist/agent-src/skills/roadmap-writing/SKILL.md +23 -41
  138. package/dist/agent-src/skills/roadmap-writing/references/follow-up-roadmap-shape.md +47 -0
  139. package/dist/agent-src/skills/rtk-output-filtering/SKILL.md +22 -6
  140. package/dist/agent-src/skills/runway-cognition/SKILL.md +3 -0
  141. package/dist/agent-src/skills/scene-expander/SKILL.md +1 -1
  142. package/dist/agent-src/skills/scene-expander/scene-blueprint.schema.yaml +26 -0
  143. package/dist/agent-src/skills/secrets-management/SKILL.md +5 -1
  144. package/dist/agent-src/skills/server-hardening/SKILL.md +159 -0
  145. package/dist/agent-src/skills/server-hardening/evals/triggers.json +17 -0
  146. package/dist/agent-src/skills/skill-improvement-pipeline/SKILL.md +3 -0
  147. package/dist/agent-src/skills/skill-management/SKILL.md +3 -0
  148. package/dist/agent-src/skills/skill-reviewer/SKILL.md +3 -0
  149. package/dist/agent-src/skills/skill-writing/SKILL.md +6 -0
  150. package/dist/agent-src/skills/spreadsheet-authoring/SKILL.md +3 -0
  151. package/dist/agent-src/skills/storybook-workshop/SKILL.md +194 -0
  152. package/dist/agent-src/skills/storybook-workshop/evals/triggers.json +17 -0
  153. package/dist/agent-src/skills/storybook-workshop/scripts/story_contrast_floor.ts +134 -0
  154. package/dist/agent-src/skills/subagent-orchestration/SKILL.md +1 -1
  155. package/dist/agent-src/skills/subagent-orchestration/prompts/README.md +25 -0
  156. package/dist/agent-src/skills/supply-chain-intake/SKILL.md +12 -0
  157. package/dist/agent-src/skills/systematic-debugging/SKILL.md +1 -1
  158. package/dist/agent-src/skills/terraform/SKILL.md +3 -0
  159. package/dist/agent-src/skills/test-driven-development/SKILL.md +1 -1
  160. package/dist/agent-src/skills/threat-modeling/SKILL.md +0 -3
  161. package/dist/agent-src/skills/token-optimizer/SKILL.md +3 -0
  162. package/dist/agent-src/skills/typography-system/SKILL.md +3 -0
  163. package/dist/agent-src/skills/ui-component-architect/SKILL.md +9 -1
  164. package/dist/agent-src/skills/upstream-contribute/SKILL.md +3 -0
  165. package/dist/agent-src/skills/using-git-worktrees/SKILL.md +1 -1
  166. package/dist/agent-src/skills/validate-feature-fit/SKILL.md +3 -0
  167. package/dist/agent-src/skills/verify-completion-evidence/SKILL.md +2 -2
  168. package/dist/agent-src/skills/wireframe/SKILL.md +3 -0
  169. package/dist/agent-src/skills/wireframe/references/story-beat-ledger.schema.json +115 -0
  170. package/dist/agent-src/skills/workspace-link/SKILL.md +131 -0
  171. package/dist/agent-src/skills/workspace-link/evals/triggers.json +17 -0
  172. package/dist/agent-src/templates/agents/agent-project-settings.example.yml +1 -1
  173. package/dist/agent-src/templates/playbook.md +75 -0
  174. package/dist/agent-src/templates/roadmaps.md +37 -0
  175. package/dist/agent-src/templates/scripts/check_playbook_invokes.ts +231 -0
  176. package/dist/agent-src/templates/scripts/work_engine/directives/ui/apply.ts +24 -0
  177. package/dist/agent-src/templates/scripts/work_engine/directives/ui/polish.ts +2 -0
  178. package/dist/agent-src/templates/scripts/work_engine/directives/ui/review.ts +216 -0
  179. package/dist/agent-src/templates/scripts/work_engine/directives/ui/scaffold.ts +159 -0
  180. package/dist/agent-src/templates/scripts/work_engine/directives/ui/stack_bundles.ts +73 -4
  181. package/dist/agent-src/templates/scripts/work_engine/stack/detect.ts +325 -40
  182. package/dist/cli/commands/uiAudit.js +221 -0
  183. package/dist/cli/commands/uiAudit.js.map +1 -0
  184. package/dist/cli/commands/uiRender.js +206 -0
  185. package/dist/cli/commands/uiRender.js.map +1 -0
  186. package/dist/cli/main.js +22 -1
  187. package/dist/cli/main.js.map +1 -1
  188. package/dist/cli/mcp/content.js +64 -1
  189. package/dist/cli/mcp/content.js.map +1 -1
  190. package/dist/cli/mcp/dispatch.js +175 -10
  191. package/dist/cli/mcp/dispatch.js.map +1 -1
  192. package/dist/cli/registry.js +3 -0
  193. package/dist/cli/registry.js.map +1 -1
  194. package/dist/cli-delegate/{chunk-H4VIVD4C.js → chunk-236PNQZK.js} +413 -391
  195. package/dist/cli-delegate/{chunk-G23AT6GD.js → chunk-DMSZHXZS.js} +57 -1
  196. package/dist/cli-delegate/{chunk-77GR3VD4.js → chunk-FF7WAFMR.js} +58 -3
  197. package/dist/cli-delegate/{chunk-PLSG6UL5.js → chunk-K4FFODTS.js} +341 -204
  198. package/dist/cli-delegate/{chunk-YM4GZDJG.js → chunk-L43NCYPB.js} +5 -0
  199. package/dist/cli-delegate/{chunk-B2ERU2VA.js → chunk-WOKWX5PL.js} +1 -1
  200. package/dist/cli-delegate/cmd_brand_status.js +8 -6
  201. package/dist/cli-delegate/cmd_conformance.js +3 -3
  202. package/dist/cli-delegate/cmd_doctor.js +3 -3
  203. package/dist/cli-delegate/cmd_export.js +4 -4
  204. package/dist/cli-delegate/cmd_handoff.js +1 -1
  205. package/dist/cli-delegate/cmd_preflight.js +2 -2
  206. package/dist/cli-delegate/cmd_prune.js +4 -4
  207. package/dist/cli-delegate/cmd_session_recycle.js +70 -9
  208. package/dist/cli-delegate/cmd_settings_migrate.js +4 -4
  209. package/dist/cli-delegate/cmd_settings_set.js +1 -1
  210. package/dist/cli-delegate/cmd_sync.js +4 -4
  211. package/dist/cli-delegate/cmd_uninstall.js +4 -4
  212. package/dist/cli-delegate/cmd_validate.js +4 -4
  213. package/dist/discovery/deprecation-report.md +1 -1
  214. package/dist/discovery/discovery-manifest.json +380 -145
  215. package/dist/discovery/discovery-manifest.json.sha256 +1 -1
  216. package/dist/discovery/discovery-manifest.summary.md +4 -4
  217. package/dist/discovery/dormancy-report.md +1 -1
  218. package/dist/discovery/orphan-report.md +1 -1
  219. package/dist/discovery/packs.json +18 -8
  220. package/dist/discovery/trust-report.md +3 -3
  221. package/dist/discovery/workspaces.json +16 -6
  222. package/dist/hooks/dispatch.js +2337 -1436
  223. package/dist/install/install.mjs +795 -708
  224. package/dist/mcp/registry-manifest.json +3 -3
  225. package/dist/mcp/server.json +2 -2
  226. package/dist/mcp/server.mjs +1685 -1250
  227. package/dist/router.json +1 -1
  228. package/dist/scripts/_lib/lean_projection_mode.js +40 -0
  229. package/dist/scripts/_lib/lean_projection_mode.js.map +1 -0
  230. package/dist/scripts/_lib/scoped_projection.js +84 -0
  231. package/dist/scripts/_lib/scoped_projection.js.map +1 -1
  232. package/dist/scripts/_lib/ui_surface.js +89 -0
  233. package/dist/scripts/_lib/ui_surface.js.map +1 -0
  234. package/dist/scripts/condense.js +6 -10
  235. package/dist/scripts/condense.js.map +1 -1
  236. package/dist/scripts/project_thin_rules.js +40 -2
  237. package/dist/scripts/project_thin_rules.js.map +1 -1
  238. package/dist/server/schemas/settings.js +3 -0
  239. package/dist/server/schemas/settings.js.map +1 -1
  240. package/dist/shared/skillRanking.js +159 -0
  241. package/dist/shared/skillRanking.js.map +1 -0
  242. package/docs/contracts/provider-lifecycle.md +47 -18
  243. package/docs/contracts/settings-classes.md +14 -4
  244. package/docs/guidelines/agent-infra/context-hygiene-mechanics.md +49 -0
  245. package/docs/guidelines/agent-infra/evaluator-independence-mechanics.md +92 -0
  246. package/docs/guidelines/agent-infra/minimal-safe-diff-mechanics.md +45 -1
  247. package/docs/guidelines/agent-infra/roadmap-deferred-resolution-provenance.md +54 -0
  248. package/docs/guidelines/design-antipatterns.md +4 -2
  249. package/docs/guidelines/design-asset-discipline.md +38 -0
  250. package/docs/guidelines/design-fidelity-mechanics.md +45 -29
  251. package/docs/guidelines/design-handover-extraction.md +35 -5
  252. package/docs/guidelines/design-modes.md +41 -1
  253. package/docs/guidelines/monorepo-antipatterns.md +141 -0
  254. package/llms.txt +50 -39
  255. package/package.json +1 -1
  256. package/src/agent-src/templates/scripts/check_playbook_invokes.ts +231 -0
  257. package/src/agent-src/templates/scripts/work_engine/directives/ui/apply.ts +24 -0
  258. package/src/agent-src/templates/scripts/work_engine/directives/ui/polish.ts +2 -0
  259. package/src/agent-src/templates/scripts/work_engine/directives/ui/review.ts +216 -0
  260. package/src/agent-src/templates/scripts/work_engine/directives/ui/scaffold.ts +159 -0
  261. package/src/agent-src/templates/scripts/work_engine/directives/ui/stack_bundles.ts +73 -4
  262. package/src/agent-src/templates/scripts/work_engine/stack/detect.ts +325 -40
  263. package/src/config/agent-settings.template.yml +28 -0
  264. package/src/config/assurance-capability-registry.json +223 -0
  265. package/src/config/assurance-threshold-budget.json +65 -0
  266. package/src/config/ci-local-parity.yml +14 -0
  267. package/src/config/discovery/unassigned-artefacts.yml +2 -0
  268. package/src/config/dispatch-economy-metrics.json +4 -2
  269. package/src/config/evaluator-budgets.json +14 -14
  270. package/src/config/gate-coverage.yml +227 -8
  271. package/src/config/gate-violation-baselines.json +76 -72
  272. package/src/config/hook-latency-budget.json +1 -0
  273. package/src/config/hook-token-budget.json +137 -125
  274. package/src/config/pack-size-budget.json +4 -2
  275. package/src/config/preamble-payload-budget.json +71 -67
  276. package/src/config/quorum-attendance-budget.json +12 -4
  277. package/src/config/rule-activation-census.json +7 -3
  278. package/src/config/rule-enforcement-baseline.json +0 -1
  279. package/src/config/rule-stub-ceilings.json +112 -91
  280. package/src/scripts/_cli/cmd_doctor.ts +15 -16
  281. package/src/scripts/_cli/doctor_install_mode.ts +49 -0
  282. package/src/scripts/_cli/doctor_overrides.ts +154 -0
  283. package/src/scripts/_dispatch.bash +17 -0
  284. package/src/scripts/_lib/as_of.ts +412 -0
  285. package/src/scripts/_lib/exec_evidence.ts +7 -0
  286. package/src/scripts/_lib/hook_settings.ts +33 -0
  287. package/src/scripts/_lib/host_listing_model.ts +192 -0
  288. package/src/scripts/_lib/lean_projection_mode.ts +44 -0
  289. package/src/scripts/_lib/mcp_bridge.ts +199 -0
  290. package/src/scripts/_lib/review_independence.ts +62 -10
  291. package/src/scripts/_lib/rule_injection.ts +239 -0
  292. package/src/scripts/_lib/run_checkpoint.ts +54 -1
  293. package/src/scripts/_lib/scoped_projection.ts +96 -0
  294. package/src/scripts/_lib/session_register.ts +44 -2
  295. package/src/scripts/_lib/skill_catalogue.ts +38 -2
  296. package/src/scripts/_lib/transcript_reads.ts +207 -0
  297. package/src/scripts/_lib/ui_authority.test.ts +251 -0
  298. package/src/scripts/_lib/ui_authority.ts +343 -0
  299. package/src/scripts/ai-video/adapters/fal.sh +8 -3
  300. package/src/scripts/ai-video/adapters/gemini-veo.sh +10 -0
  301. package/src/scripts/ai-video/adapters/higgsfield.sh +10 -2
  302. package/src/scripts/ai-video/adapters/kling.sh +10 -0
  303. package/src/scripts/ai-video/adapters/sora.sh +10 -0
  304. package/src/scripts/ai-video/lib/calibrate-cost.sh +145 -0
  305. package/src/scripts/ai-video/lib/model-capabilities/README.md +53 -7
  306. package/src/scripts/ai-video/lib/model-capabilities/comfyui.json +15 -3
  307. package/src/scripts/ai-video/lib/model-capabilities/fal.json +36 -6
  308. package/src/scripts/ai-video/lib/model-capabilities/gemini-veo.json +23 -0
  309. package/src/scripts/ai-video/lib/model-capabilities/higgsfield.json +23 -0
  310. package/src/scripts/ai-video/lib/model-capabilities/kling.json +23 -0
  311. package/src/scripts/ai-video/lib/model-capabilities/musetalk.json +8 -2
  312. package/src/scripts/ai-video/lib/model-capabilities/replicate.json +36 -6
  313. package/src/scripts/ai-video/lib/model-capabilities/sora.json +45 -0
  314. package/src/scripts/ai-video/lib/model-capabilities/syncso.json +8 -2
  315. package/src/scripts/ai-video/lib/parse-blueprint.sh +52 -5
  316. package/src/scripts/ai-video/lib/resume-scan.sh +92 -3
  317. package/src/scripts/ai-video/lib/seam-plan.sh +212 -0
  318. package/src/scripts/ai-video/smoke-trace.sh +450 -2
  319. package/src/scripts/ai-video/stitch.sh +191 -10
  320. package/src/scripts/ai-video/test-pipeline.sh +84 -6
  321. package/src/scripts/ai_council/cli_agency_bounds.ts +139 -0
  322. package/src/scripts/ai_council/cli_least_agency_canary.ts +347 -0
  323. package/src/scripts/ai_council/clients.ts +3 -2
  324. package/src/scripts/ai_council/consensus.ts +63 -6
  325. package/src/scripts/ai_council/events_log.ts +46 -1
  326. package/src/scripts/ai_council/orchestrator.ts +103 -108
  327. package/src/scripts/ai_council/orchestrator_results.ts +166 -0
  328. package/src/scripts/ai_council/prompts.ts +12 -5
  329. package/src/scripts/ai_council/quorum.ts +82 -1
  330. package/src/scripts/ai_council/quorum_wiring.ts +82 -5
  331. package/src/scripts/ai_council/seating.ts +211 -0
  332. package/src/scripts/ai_council/stance_tally.ts +22 -0
  333. package/src/scripts/bench_hook_latency.ts +62 -0
  334. package/src/scripts/build_proof.ts +12 -1
  335. package/src/scripts/capture_skill_catalogue.ts +21 -0
  336. package/src/scripts/check_always_budget.ts +2 -1
  337. package/src/scripts/check_augmentignore.ts +2 -1
  338. package/src/scripts/check_beta_review_markers.ts +2 -1
  339. package/src/scripts/check_composite_arming.ts +364 -0
  340. package/src/scripts/check_corpus_staleness.ts +2 -1
  341. package/src/scripts/check_council_pin_staleness.ts +3 -1
  342. package/src/scripts/check_enforcement_coverage.ts +116 -3
  343. package/src/scripts/check_enforcement_denominator.ts +365 -0
  344. package/src/scripts/check_gate_coverage.ts +2 -1
  345. package/src/scripts/check_hook_bundle_freshness.ts +13 -1
  346. package/src/scripts/check_knowledge_cards.ts +2 -1
  347. package/src/scripts/check_knowledge_pages.ts +3 -2
  348. package/src/scripts/check_memory.ts +2 -1
  349. package/src/scripts/check_no_automerge_key.ts +287 -0
  350. package/src/scripts/check_pack_conformance_fixture.ts +565 -0
  351. package/src/scripts/check_pack_passport_reconciliation.ts +274 -0
  352. package/src/scripts/check_proposal.ts +2 -1
  353. package/src/scripts/check_reach_staleness.ts +2 -1
  354. package/src/scripts/check_release_adjacent_health.ts +2 -1
  355. package/src/scripts/check_release_pr_shape.ts +5 -0
  356. package/src/scripts/check_review_schema.ts +34 -1
  357. package/src/scripts/check_roadmap_trackable.ts +48 -3
  358. package/src/scripts/check_source_size_budget.ts +2 -1
  359. package/src/scripts/check_standing_payload_delta.ts +505 -0
  360. package/src/scripts/check_trigger_evals.ts +2 -1
  361. package/src/scripts/classify_change_risk.ts +281 -0
  362. package/src/scripts/compute_skill_tiers.ts +186 -0
  363. package/src/scripts/condense.ts +8 -13
  364. package/src/scripts/council_attendance_metrics.ts +183 -0
  365. package/src/scripts/council_cli.ts +10 -8
  366. package/src/scripts/council_parse_rate.ts +116 -0
  367. package/src/scripts/derive_playbooks.ts +406 -0
  368. package/src/scripts/design_slop_rules.test.ts +7 -0
  369. package/src/scripts/design_slop_rules.ts +56 -2
  370. package/src/scripts/dispatch_r2_reviewer.ts +16 -0
  371. package/src/scripts/frontend_corpus_hash.ts +116 -0
  372. package/src/scripts/generate_pack_manifests.ts +78 -0
  373. package/src/scripts/grade_target_readiness.ts +478 -0
  374. package/src/scripts/hook_manifest.json +1 -1
  375. package/src/scripts/hook_manifest.yaml +97 -16
  376. package/src/scripts/hooks/concern_registry.ts +4 -0
  377. package/src/scripts/hooks/design_pass_hook.ts +356 -0
  378. package/src/scripts/hooks/rtk_wrap_hook.ts +30 -7
  379. package/src/scripts/hooks/rule_inject_hook.ts +318 -0
  380. package/src/scripts/hot_context_hook.ts +74 -7
  381. package/src/scripts/install.ts +40 -89
  382. package/src/scripts/lint_adapter_tier.ts +663 -0
  383. package/src/scripts/lint_archived_skills.ts +93 -0
  384. package/src/scripts/lint_budget_ownership.ts +2 -1
  385. package/src/scripts/lint_deterministic_time.ts +470 -0
  386. package/src/scripts/lint_framework_leakage.ts +5 -0
  387. package/src/scripts/lint_handoffs.ts +525 -1
  388. package/src/scripts/lint_judge_prompt_expectation.ts +155 -0
  389. package/src/scripts/lint_marketplace.ts +88 -0
  390. package/src/scripts/lint_media_policy_linkage.ts +140 -1
  391. package/src/scripts/lint_one_off_age.ts +6 -1
  392. package/src/scripts/lint_override_kernel_guard.ts +87 -5
  393. package/src/scripts/lint_roadmap_complexity.ts +56 -0
  394. package/src/scripts/lint_rule_enforcement_declaration.ts +24 -7
  395. package/src/scripts/lint_rule_norm_pin.ts +321 -0
  396. package/src/scripts/lint_spawn_payload.ts +42 -5
  397. package/src/scripts/lint_symptom_intake.ts +2 -1
  398. package/src/scripts/mcp_parity_smoke.ts +30 -4
  399. package/src/scripts/mcp_render.ts +66 -1
  400. package/src/scripts/mcp_tool_fingerprint.ts +241 -0
  401. package/src/scripts/measure_risk_class_drift.ts +140 -0
  402. package/src/scripts/measure_skill_ranker_baseline.ts +212 -0
  403. package/src/scripts/media/lib/adapter-common.sh +211 -1
  404. package/src/scripts/media/lib/adapter-contract.md +74 -6
  405. package/src/scripts/model_rule_injection.ts +907 -0
  406. package/src/scripts/project_thin_rules.ts +45 -2
  407. package/src/scripts/release.ts +66 -860
  408. package/src/scripts/release_drill.ts +59 -3
  409. package/src/scripts/release_env.ts +298 -0
  410. package/src/scripts/release_publication.ts +720 -0
  411. package/src/scripts/roadmap_context.ts +778 -0
  412. package/src/scripts/schemas/fidelity-measurement-sheet.schema.json +169 -0
  413. package/src/scripts/schemas/pack.schema.json +62 -4
  414. package/src/scripts/schemas/rule.schema.json +24 -2
  415. package/src/scripts/schemas/skill.schema.json +41 -2
  416. package/src/scripts/schemas/ui-authority.schema.json +114 -0
  417. package/src/scripts/session_register_hook.ts +29 -3
  418. package/src/scripts/sessions_cli.ts +67 -3
  419. package/src/scripts/skill_tools/score_skill_relevance.ts +36 -53
  420. package/src/scripts/tighten_skill_descriptions.ts +264 -0
  421. package/src/scripts/token_sink_report.ts +239 -0
  422. package/src/scripts/trigger_coverage.ts +122 -3
  423. package/src/scripts/update_counts.ts +7 -3
  424. package/src/scripts/validate_frontmatter.ts +66 -0
  425. package/src/server/schemas/settings.ts +5 -0
  426. 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
- // The drill runs in the real repo — the changelog at the tag is
139
- // the real file (execute() extracts the target's section from it).
140
- return { ...OK, stdout: fs.readFileSync(path.join(REPO_ROOT, 'CHANGELOG.md'), 'utf-8') };
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
+ };